[OpenBIOS] r575 - in trunk/openbios-devel: forth/debugging modules

svn at openbios.org svn at openbios.org
Mon Aug 31 01:39:55 CEST 2009


Author: laurent
Date: 2009-08-31 01:39:55 +0200 (Mon, 31 Aug 2009)
New Revision: 575

Modified:
   trunk/openbios-devel/forth/debugging/client.fs
   trunk/openbios-devel/modules/filesystems.c
Log:
Implement load method

Modified: trunk/openbios-devel/forth/debugging/client.fs
===================================================================
--- trunk/openbios-devel/forth/debugging/client.fs	2009-08-30 23:37:42 UTC (rev 574)
+++ trunk/openbios-devel/forth/debugging/client.fs	2009-08-30 23:39:55 UTC (rev 575)
@@ -17,10 +17,28 @@
 
 \ 7.6.2    Program download and execute
 
+variable file-size
+
+: !load-size file-size ! ;
+
+: load-size file-size @ ;
+
 : load    ( "{params}<cr>" -- )
+  linefeed parse ( str len )
+  open-dev ( ihandle )
+  dup 0= if
+    drop
+    exit
+  then
+  dup >r
+  " load-base" evaluate swap ( load-base ihandle )
+  dup ihandle>phandle " load" rot find-method ( xt 0|1 )
+  if swap call-package !load-size else cr ." Cannot find load for this package" 2drop then
+  r> close-dev
   ;
 
 : go    ( -- )
+  ." go is not yet implemented"
   ;
 
 : state-valid    ( -- a-addr )

Modified: trunk/openbios-devel/modules/filesystems.c
===================================================================
--- trunk/openbios-devel/modules/filesystems.c	2009-08-30 23:37:42 UTC (rev 574)
+++ trunk/openbios-devel/modules/filesystems.c	2009-08-30 23:39:55 UTC (rev 575)
@@ -243,6 +243,31 @@
 		PUSH( (ucell)"unspecified");
 }
 
+/* ( addr -- size ) */
+
+static void
+files_load( files_info_t *mi)
+{
+	char *buf = (char*)POP();
+	int ret, size;
+
+	if (!mi->file) {
+		PUSH(0);
+		return;
+	}
+
+	size = 0;
+	while(1) {
+		ret = mi->fs->read( mi->file, buf, 512 );
+		if (ret != 512)
+			break;
+		buf += ret;
+		mi->filepos += ret;
+		size += ret;
+	}
+	PUSH( size );
+}
+
 /* static method, ( ih -- flag? ) */
 static void
 files_probe( files_info_t *dummy )
@@ -279,6 +304,7 @@
 	{ "write",		files_write 		},
 	{ "seek",		files_seek 		},
 	{ "tell",		files_tell		},
+	{ "load",		files_load		},
 	{ "block-size",		files_block_size	},
 
 	/* special */




More information about the OpenBIOS mailing list