From e9e8fa804a86527500da46911930595dc44dfb3b Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 10 Feb 2019 19:17:58 -0500 Subject: [PATCH] Implement game loop in Jorth --- boot.jor | 3 +-- defs.jor | 4 ++++ game.exe | Bin 107158 -> 107402 bytes game.jor | 60 ++++++++++++++++++++++++++++++++++++++++++++++-------- game.prj | Bin 5137 -> 5265 bytes jorth.c | 21 ++++++++++++++----- testbed.c | 15 +++++++++----- 7 files changed, 82 insertions(+), 21 deletions(-) diff --git a/boot.jor b/boot.jor index f764b7a..2d3e63e 100755 --- a/boot.jor +++ b/boot.jor @@ -35,8 +35,7 @@ key const sp then then ; : interpreter - begin word dup b@ while compileword repeat - s" ok" type cr drop ; + begin word dup b@ while compileword repeat drop ; : load-input swap-input r> r> interpreter r< r< swap-input ; : loadstring ' key-string load-input drop drop ; : loadfile ' key-file load-input drop close ; diff --git a/defs.jor b/defs.jor index 10f3b98..8b161a3 100755 --- a/defs.jor +++ b/defs.jor @@ -6,6 +6,10 @@ s" jorth.log" open const LOGFILE : :noname here docolon , ] ; : 2dup over over ; +: noop ; + +: defer word new-word docolon , ' noop , ' ret , ; +: is ( cp -- ) word lookup drop cell + ! ; : decompile word lookup if 1 begin ( cp i ) diff --git a/game.exe b/game.exe index d0674565a90858421dc1e139bfa6c5669c84869d..99625a719c1887a4faa9bf88210032efaf4e0e4e 100755 GIT binary patch delta 23005 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 delta 166 zcmbQJIZHmK#raY!sjBHHGjCBkRK(QW1 z1I83aUPcMVn+#_d_A_)dcmW{;0|$dRLk!U5iGpI1XDk;lb@k(7P-YN5D7*1Lh!gDk MA1J%|fZ#OV diff --git a/jorth.c b/jorth.c index 004a0ff..a7cd066 100755 --- a/jorth.c +++ b/jorth.c @@ -123,6 +123,11 @@ void f_bset() { DROP(1); } +void f_addset() { + TOP().p->i += ST1().i; + DROP(2); +} + void f_drop() { DROP(1); } @@ -300,6 +305,11 @@ void f_comma() { DROP(1); } +void f_allot() { + HERE = CELL_OFFSET(HERE, TOP().u); + DROP(1); +} + void f_bcomma() { *((char*)HERE) = TOP().i; HERE = CELL_OFFSET(HERE, 1); @@ -375,9 +385,6 @@ void f_execute() { f_colondispatch(); } -void f_noop() { -} - void f_lit_() { PUSHC(*IP.p); IP.p++; @@ -750,17 +757,21 @@ void f_init() { CDEF("word", f_word); CDEF("immediate", f_immediate); CDEF("execute", f_execute); - CDEF("create", f_create); + CDEF("new-word", f_create); CDEF("here", f_here); CDEF("latest", f_latest); CDEF("state", f_state); CDEF("'", f_quote); f_immediate(); CDEF("`", f_revlookup); + CDEF("wordname", f_wordname); + CDEF("wordflags", f_wordflags); + CDEF("codepointer", f_codepointer); CDEF("lookup", f_lookup); CDEF(":", f_colon); CDEF(";", f_semicolon); f_immediate(); CDEF("const", f_const); CDEF("var", f_var); + CDEF("allot", f_allot); CDEF("+", f_add); CDEF("-", f_sub); CDEF("*", f_mul); @@ -785,6 +796,7 @@ void f_init() { CDEF("^", f_bitxor); CDEF("@", f_get); CDEF("!", f_set); + CDEF("+!", f_addset); CDEF("b@", f_bget); CDEF("b!", f_bset); CDEF("dup", f_dup); @@ -814,7 +826,6 @@ void f_init() { CDEF("b,", f_bcomma); CDEF("s\"", f_string); f_immediate(); CDEF("S\"_", f_string_); - CDEF("noop", f_noop); CDEF("open", f_open); CDEF("close", f_close); CDEF("quiet", f_quiet); diff --git a/testbed.c b/testbed.c index e44853c..0e1a2a0 100755 --- a/testbed.c +++ b/testbed.c @@ -170,6 +170,7 @@ void f_drawSprite() { // ( x y sprite -- ) } void f_scroll() { // ( x y -- ) scroll(ST1().i, TOP().i); + DROP(2); } void f_ticks() { PUSHU(timer_counter); @@ -180,9 +181,9 @@ void game_f_init() { CDEF("seremit", f_seremit); CDEF("key-pressed", f_keyWasPressed); CDEF("key-down", f_keyIsDown); - CDEF("sprite", f_drawSprite); + CDEF("draw-sprite", f_drawSprite); CDEF("scroll", f_scroll); - CDEF("draw", drawScreen); + CDEF("draw-screen", drawScreen); CDEF("ticks", f_ticks); f_loadfile("game.jor"); @@ -213,7 +214,6 @@ void f_poll() { line[i] = '\0'; } } - f_taskloop(); } int main() { @@ -224,14 +224,19 @@ int main() { while (!keyIsDown(K_ESC)) { kbd_debounce(); f_poll(); + f_taskloop(); + f_runstring("tick"); + f_taskloop(); + f_runstring("draw"); - if (game.state == STATE_MAP) { +/* if (game.state == STATE_MAP) { overworldThink(); } else if (game.state == STATE_DIALOG) { dialogThink(); } drawEntity(&game.player); - drawScreen(); + drawScreen();*/ + } return 0;