diff --git a/jopl.c b/jopl.c index e38234e..f36fe75 100755 --- a/jopl.c +++ b/jopl.c @@ -1,3 +1,4 @@ +#include #include "jorth.h" #include "adlib.h" #include "kbd.h" @@ -24,6 +25,30 @@ static void f_quit() { DONE = 1; } +struct ffblk findfile; +void f_findfirst() { + int result = findfirst(TOP().s, &findfile, 0); + if (result == 0) { + PUSHS(findfile.ff_name); + } else { + PUSHU(0); + } +} +void f_findnext() { + int result = findnext(&findfile); + if (result == 0) { + PUSHS(findfile.ff_name); + } else { + PUSHU(0); + } +} + +void f_keyWasPressed() { + int k = TOP().i; + TOP().i = keyWasPressed(k); + consumeKey(k); +} + void do_repl() { char buf[128]; @@ -35,7 +60,12 @@ void do_repl() { CDEF("quit", f_quit); CDEF("adlib!", f_adlib_write); CDEF("adlib@", f_adlib_read); - + CDEF("findfile", f_findfirst); + CDEF("findnext", f_findnext); + CDEF("key-start", kbd_init); + CDEF("key-end", kbd_cleanup); + CDEF("key-debounce", kbd_debounce); + CDEF("key-pressed", f_keyWasPressed); f_loadfile("jopl.jor"); ontick = f_lookupcp("ontick"); timer_setcallback(timer_callback); diff --git a/jopl.exe b/jopl.exe index 1c59a48..e7ebe61 100755 Binary files a/jopl.exe and b/jopl.exe differ diff --git a/jopl.jor b/jopl.jor index 9a091ce..2f6c6b4 100755 --- a/jopl.jor +++ b/jopl.jor @@ -146,6 +146,25 @@ var t2 : ontick adlib@ 0x20 & if startt2 player then ; +: files findfile begin dup while yield findnext repeat ; + +: keynote [ inline| +44 b, 31 b, 45 b, 32 b, 46 b, 47 b, 34 b, 48 b, 35 b, 49 b, 36 b, 50 b, +16 b, 3 b, 17 b, 4 b, 18 b, 19 b, 6 b, 20 b, 7 b, 21 b, 8 b, 22 b, +23 b, 10 b, 24 b, 11 b, 25 b, +|inline ] 0 29 for dup i + ub@ key-pressed if drop i 3 + rdrop rdrop ret then next + drop 51 key-pressed if 15 else 0 then ; + +: keyboard + key-start begin + key-debounce 1 key-pressed not while + keynote dup if octave @ 12 * + noteon else drop then + 78 key-pressed if 1 octave +! then + 74 key-pressed if -1 octave +! then + 41 key-pressed if noteoff then + rest + repeat key-end ; + :noname default startt2 diff --git a/jopl.prj b/jopl.prj index 8d074c1..8b08d4c 100755 Binary files a/jopl.prj and b/jopl.prj differ diff --git a/kbd.h b/kbd.h index 624a7b7..6061ef5 100755 --- a/kbd.h +++ b/kbd.h @@ -6,6 +6,7 @@ extern volatile char kbd_triggered; void kbd_init(); void kbd_debounce(); // call once per frame +void kbd_cleanup(); unsigned char kbd_wait(); #define KEY_OFF 0