From 8ce9ab33b502eb455cb200aa21c840c3345b0956 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Fri, 5 Apr 2019 19:35:43 -0400 Subject: [PATCH] debug ISR, recording word --- jopl.c | 5 +++++ jopl.exe | Bin 62531 -> 62755 bytes jopl.jor | 47 ++++++++++++++++++++++++++++++++++++++--------- jopl.prj | Bin 4388 -> 4390 bytes kbd.c | 13 +++++++++---- timer.c | 5 +++++ 6 files changed, 57 insertions(+), 13 deletions(-) diff --git a/jopl.c b/jopl.c index f36fe75..591727e 100755 --- a/jopl.c +++ b/jopl.c @@ -49,6 +49,10 @@ void f_keyWasPressed() { consumeKey(k); } +void f_keydown() { + TOP().i = keyIsDown(TOP().i); +} + void do_repl() { char buf[128]; @@ -66,6 +70,7 @@ void do_repl() { CDEF("key-end", kbd_cleanup); CDEF("key-debounce", kbd_debounce); CDEF("key-pressed", f_keyWasPressed); + CDEF("key-down", f_keydown); f_loadfile("jopl.jor"); ontick = f_lookupcp("ontick"); timer_setcallback(timer_callback); diff --git a/jopl.exe b/jopl.exe index e7ebe61cd13e54b6175ddbe1bcbf2be2d1de3202..dc2eab23f764192d684c02df812709b13e64a1b4 100755 GIT binary patch delta 9575 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 W&TP8>z8O__%`lA_?QH#_QTiWAjN51c delta 9632 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 if 5 + then dup 5 > if 5 + then + dup 2 > if 5 + then + op @ + ; : opreg create b, does> ub@ op-with-voice ; : voicereg create b, does> ub@ voice @ + ; @@ -90,11 +92,12 @@ var songticks var notestate var octave +: oct+ octave @ 12 * + ; : rest songticks @ begin dup songticks @ != until drop ; : beat begin dup songticks @ swap % 0 != while rest repeat drop ; : %O octave ! ; : %V voice ! ; -: mknote create b, does> ub@ octave @ 12 * + notestate @ if b, else noteon rest then ; +: mknote create b, does> ub@ oct+ notestate @ if b, else noteon rest then ; : %loop 0xfe b, , ; : % notestate @ if 0xf0 b, else rest then ; : %% 0 for % next ; @@ -132,7 +135,7 @@ array tracks 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , : shush 0 voice @ track ! %- ; : player - songticks @ 1 + songticks ! + 1 songticks +! voice @ 0 10 for i voice ! i track-tick next voice ! ; @@ -155,17 +158,43 @@ var t2 |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 +: onkeynote ( cp -- ) keynote dup if oct+ swap execute else drop drop then ; + +: dokeys ( cp -- ) + r> 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 + 75 key-pressed if -1 +voice! then + 77 key-pressed if 1 +voice! then + r@ execute rest - repeat key-end ; + repeat key-end rdrop ; + +: nextnote ( ip -- ip ) + dup if + dup ub@ r> + r@ 0xff = if drop 0 else + r@ 0xfe = if 1 + @ nextnote then then + rdrop + then ; + +: setnote ( note -- ) + voice @ track @ nextnote + dup if b! else drop drop then ; + +: record + :| ' setnote onkeynote + 41 key-pressed if 0xfd setnote then + 52 key-down if 0xf0 setnote then + |; dokeys ; + +: jam + :| ' noteon onkeynote + 41 key-pressed if noteoff then + |; dokeys ; :noname - default + 9 -1 for i voice ! default next startt2 ; ' onload redefine diff --git a/jopl.prj b/jopl.prj index 8b08d4ca9e2b2a410ebd7575286f8335d1acdf6c..7624429dd1d397df4d413d8a506517f639f201de 100755 GIT binary patch delta 259 zcmZ3Yv`lG(IvewznXQ|(*i6`Y&u(n?+rh}d(8|ET5I8xTH1~`7kjsECPx}Pj=>uw{>Td0J622p(Fv zhFd^&vP=vNGl61Zlb!kEtzDVKfox4C872m%-3%FwpBb+*Zed)`IFpf^@&ErmMtjCa z#uCO23^feVjMo_qfRKTKhk=dZ+Ulms_xU`HeAZa_aWE)w#E7wgNj?TKuv_@^+CdCH z24RK{26l%3Ada`wf1vWoef*K^91H>s6@~Sa-_|Q#)=%2-S{8G3Gtl# Nl;4>dq(WQZHvpyFO4