Finish implementing embedded sys.f
authorJonas Hvid <mail@johv.dk>
Sun, 8 Mar 2020 18:32:16 +0000 (19:32 +0100)
committerJonas Hvid <mail@johv.dk>
Sun, 8 Mar 2020 18:32:16 +0000 (19:32 +0100)
OK, this works... barely!

We have to omit the final newline in sys.f for it to work. We should probably
take another look at that.

But, it does technically work: We can now run just ./main, and the sys.f file
will be run automatically from inside the program. Very cool!

bootstrap.asm
impl.asm
main.asm
sys.f

index bd0cc1541bccbdc35ddc0eec5ca548f2a692ccaf..1b8b65862947102c2c9117ae73eaf2890219d322 100644 (file)
@@ -111,11 +111,13 @@ forth INTERPRET_STRING, 'INTERPRET-STRING'
   ;; Check if the buffer is-non-empty
   ;; [TODO] This probably won't work for strings with whitespace at the end.
   dq INPUT_LENGTH, GET
-  dq ZBRANCH, 8 * 7 ; to EXIT
+  dq ZBRANCH, 8 * 5 ; to EXIT
 
   dq READ_WORD
 
   dq INTERPRET_WORD
   dq BRANCH, -8 * 7 ; to INPUT-LENGTH @
 
+  dq LIT, 0, INPUT_BUFFER, PUT
+
   dq EXIT
index 070ad2a70561899ab567d4ec92796e68a588dc9a..f6a25cf5b54d420cc016582e6f3d41e0661636a2 100644 (file)
--- a/impl.asm
+++ b/impl.asm
@@ -177,6 +177,9 @@ pop_word:
   jmp .read_alpha
 
 .end:
+  ;; Finally, we want to skip one whitespace character after the word.
+  inc rsi
+  dec rcx
 
   ret
 
index 4e1a05fa1253d00f6a3b85b1a3ceeb46286bcdf6..a670b343e99c1a1f0154f0eab083ef6eb1e6cc1a 100644 (file)
--- a/main.asm
+++ b/main.asm
@@ -452,10 +452,6 @@ read_string_buffer:
   ;; We borrow READ_STRING's buffer. They won't mind.
   mov [READ_STRING.length], 0
 
-  ;; Skip space ([TODO]: Shouldn't we do this while parsing instead?)
-  inc [input_buffer]
-  dec [input_buffer_length]
-
 .read_char:
   mov rbx, [input_buffer]
   mov al, [rbx]
diff --git a/sys.f b/sys.f
index 6b13ff9775b5b0ad93c26ada9e83e00c504b8feb..0815e0fe0ca89d729a068e5072a4e8b721635460 100644 (file)
--- a/sys.f
+++ b/sys.f
@@ -83,5 +83,7 @@ EXIT [
 ( Read a number from standard input. )
 : READ-NUMBER READ-WORD PARSE-NUMBER ;
 
+S" Ready." TELL NEWLINE
+
 ( vim: syntax=forth
 )