From 49f532a85bf43bec8a2bd691d9feb034855968fe Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 31 Mar 2019 19:29:16 -0400 Subject: [PATCH] JOPL adlib livecoding environment; stop including JIM files in git I now have multiple executables that depend on the same .jor source files and I am not diligent about ensuring that both are up-to-date and working. As small changes to source files can cause .jim files to fail silently, I've removed them from the repo for now. --- .gitignore | 1 + adlib.c | 16 +++++- adlib.h | 7 ++- boot.jim | Bin 1243 -> 0 bytes defs.jim | Bin 1764 -> 0 bytes entity.jim | Bin 1021 -> 0 bytes footer.jim | Bin 1142 -> 0 bytes game.jim | Bin 1962 -> 0 bytes input.jim | Bin 372 -> 0 bytes jazzbass.sbi | Bin 0 -> 52 bytes jeanne.jim | Bin 593 -> 0 bytes jopl.c | 55 +++++++++++++++++++ jopl.exe | Bin 0 -> 61436 bytes jopl.jor | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++ jopl.prj | Bin 0 -> 4334 bytes jorth.c | 21 +++++++ jorth.h | 3 + map.jim | Bin 1009 -> 0 bytes pete.jim | Bin 456 -> 0 bytes petehous.jim | Bin 686 -> 0 bytes repl.jim | Bin 331 -> 0 bytes road.jim | Bin 501 -> 0 bytes state.jim | Bin 89 -> 0 bytes temp.jor | 13 ----- testbed.c | 2 +- timer.c | 6 ++ timer.h | 1 + timer.jim | Bin 438 -> 0 bytes trail1.jim | Bin 504 -> 0 bytes 29 files changed, 260 insertions(+), 17 deletions(-) delete mode 100755 boot.jim delete mode 100755 defs.jim delete mode 100755 entity.jim delete mode 100755 footer.jim delete mode 100755 game.jim delete mode 100755 input.jim create mode 100755 jazzbass.sbi delete mode 100755 jeanne.jim create mode 100755 jopl.c create mode 100755 jopl.exe create mode 100755 jopl.jor create mode 100755 jopl.prj delete mode 100755 map.jim delete mode 100755 pete.jim delete mode 100755 petehous.jim delete mode 100755 repl.jim delete mode 100755 road.jim delete mode 100755 state.jim delete mode 100755 temp.jor delete mode 100755 timer.jim delete mode 100755 trail1.jim diff --git a/.gitignore b/.gitignore index 91587d6..4c11873 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ *.dsk *.swp *.log +*.jim diff --git a/adlib.c b/adlib.c index 5547a4e..0c4fff7 100755 --- a/adlib.c +++ b/adlib.c @@ -1,8 +1,8 @@ -#include +#include "adlib.h" static void adlib_wait(int delay) { int i; - for (i = 0; i < delay; i ++) inp(0x388); + for (i = 0; i < delay; i ++) adlib_read(); } void adlib_write(int reg, int val) { @@ -12,3 +12,15 @@ void adlib_write(int reg, int val) { outp(0x389, val); adlib_wait(35); } + +void adlib_reset() { + int i; + for (i = 0; i < 0xff; i ++) { + adlib_write(i, 0); + } +} + +void adlib_init() { + adlib_reset(); + atexit(adlib_reset); +} diff --git a/adlib.h b/adlib.h index ab352f5..009857f 100755 --- a/adlib.h +++ b/adlib.h @@ -1 +1,6 @@ -void adlib_write(int reg, int val); \ No newline at end of file +#include + +void adlib_init(); +#define adlib_read() inp(0x388) +void adlib_write(int reg, int val); +void adlib_reset(); \ No newline at end of file diff --git a/boot.jim b/boot.jim deleted file mode 100755 index d20f40fe6260405bb92b01e1b9d739f8b56a227f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 zcmY*YO=whC6h3q3+}wBXGbCahTo~+(i*y!Qm?9z}hEgpm1~(E27VRYSCcZj(?=kbH zkr+}H6BkklE?fz1!DanHBr9=13ND6js=@wXK!gMrO0bAj9<=A&mpGKigZrKD{Cww} zdwbN+?rnI2QXx!u)hfK~5zwQg1$Efc-K*Y+1oJ8jeZ@Xvi|`q__I(vFFfeREjX@_I zQv&J{9Y29F<-(VzkBp2QI(X#s6Nkul0m?*A)F|g+^*EE@IfCO=f?r#BMO^~FLa>R; zSd>OI5uhj&ysj>TSFL-NY7vzZM&$9YtP#Cxl?2`)r}&H)kW)$|_*BiqxHsviwglG* zPoMFtX`=tvc&`?q=0#p9{#Ye%MR1J-w>k4rnk?B=O=Jx$Y=EqdAojV3R5V);I~U;$b>IEW3#WFr~t~o9I!!hDU2JoR%$hydB3fWmI|IQhZ%;v0ZKyrlEcPXM%1LkOS zkDN{t5_`3%=Ec)ttxS1i^?i0!Y|YM7hJAWH)586lo9ohDZQr0VHSX~~Ip>(3p+*OF zcbjhnXM=E>$G=0q#Th*eJLGrN$w}?PL^u`EDmKd96hKS=QRj6F@9G@hCv;mMwHuI#ljL6}V91=@% zH~k!y$5nf3qdfjeoxU>L+dBIFN`E7Y!*VHRO@Lh;v~~A`9Flj;7~QecZmNY>dDdOe zG%*7S7TqoF)qNB4bs3W9X_yb}N>7l4)vO8-gKQm!= z(Nbo42~nUsa!4N{-Wsa`6U69o zWrKdyzR*JYR+Ge1Xh@vNQ{L$2pq)9jv-Ux4#vI9mF$7+M5$xq~4P0AO(#Kmaz1>Q@~hT|@_#?^_E% z*QG7#w*)(`pnlo6V?r3d0hlRZ<279qRmXK|^850hiJRI18Dnx z5}n|G0H*oxex;~NNYA#Aj%8jIPUOqhklf7c*zJ5Q%F>Ro1DT@w5W?~ib~18a%BW(& zv8O6Xa0VQGhG5$&kK?mlRRU?>0iO2!SS_nN^6*^inIz^P1ACJQTg4bcVA{+D(Z&Me zY61O?$dJ^mDyAHFl1W(2G!;Q6i0H|Nv^V>PsM(eu)endZwI?@QGjsDiMBM)4Sw&1c zE)orD%;r)y7XAd|)_jDsh_AHp%i+)ZSr9BcwA3#FCl%? zMr-_}Tu;PxW7`i#M;zgA8)e8iHvVp;Vq>jtm01)Vt8AMkGu@7D*$wk*tL8p4Df)Pn zXshj6X3TiM6DCiTj~=I!kP}ZfV&<_X?A|2280Ya7(h+3gd1`$uGORRWq-hFz+WeC~ zF^BevPF2uPMpH?X(MtY3%uR(<-gSe%HeX3Hxm@DiDCx49g3hgS-8mb-6KPsAHnB0o zOd}Pa9>M88PTa%K=9^-N^M5+ym*I}d(%?5Kq(lx>`U?kZw#(P>Q|zsY{XduE@_d;Z zbUL@GF#91roZBVlET{f|@5S77qCqbFLV7+&xJFU3BS;d``CL-?cG-5$@(sS2h)eLT RyB39gl;e_IsyBL#{{;sJxKjWC diff --git a/entity.jim b/entity.jim deleted file mode 100755 index a03576f03d82702e6ae7189d13c372e74fd38ea9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 zcmYLHPe>F|82{$YH_p0$R7jmS6B#3WNYf62LM<$TNJ>x#v#zZ>V-C*l%I=uu(y_ur zb&2TWDX?1}>LNkgt%G$4>mZ^OQJsV+hz>*cy*INP!_2(*`~AM(`~JM+$$WSE=r489 zNE&T0arx5J_<8u!4KQfvVta9Be3JGGoHmlMT&em_KJa`O(p?Qi*idb3{zIH1i6HY* z7faS-iTH=;8|~n@b8b2Cf}5mxnrUD!4rt=38{!+{10w;E;M9%SZ_57seEm*>IEY6W8}82{!l^$-ri)L3NbcDcpq;X<`*k9A^=|- z+f>00eM21Mspfe^+r$rHiWIx*4!t4H@XnYYrebSBK^)ryu+)lkD#Pw|id*H|>POt* zHty+L_>wnJfmOb%mNKHTK%H4hG%%+QXlr_i_xK$+6I7Op^AtK^tnm=v@!JG>#RWn} zCGv^ig%W#bAh5)3j1y%+!H;+G<0e znWKaqvzO94JQSYPMLZ$V6^SYkp(7HzZ;GAJZsDVNtx(KaQ-ir`p(N%pqD4=LkIl9S zrJnaNP*hECPqihI>1SpF#Qe&R8{G*8>*}Vt&-U2?RrAJ_*GhESE0W`@%!t-NW_`|t zc%XhTL;Myiyz(`9dm}|wDr~xf!X;r*t?pc*?3H2tPl=w9-&tbOU#o z@-I6Psywk$F}hsv7X;{A8e__4OC1zueOC}!EAyUGuNUVFo;1x`9p9~F96swx%dFM; NM~LPt)mj|Y^$&vo59j~@ diff --git a/footer.jim b/footer.jim deleted file mode 100755 index 495c9852303f50b653fce05c4cca5089013906ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1142 zcmah|O=uHA6#kld`DvS`0ox+7J3AGrC{{$&OQje!w$@msR!gNq*L0=PG+UCD+KV34 zlX~p+|77C&w3VIMvvIpPnM(fQ$hW)-b@4fGRGh?;%cl=UC zS}^Vy37m0V&nfrLBiRWo7_FEp+jG4ki)4DqsEZS8e0pa@u{W35cL*OkfS(32I-X_F zgoqi%z(_Vb%qW6(ldx|*qk({F3XEj;^EY9$8OPzwKz4XE!#IjvoVIu5$e7+4!vRLQ zfsxEOqc}zx?Qft2PU~2sT{C9QnBE!oYr#bwY&2}e4eoyQ;ILMi#BDQy+-l1<+~?Hs zY%X_XjN>Uh;ncCggQI$kcDyuO;5iq(-n?6M%WOwGmUzFWF0ec4E%eE(iy8Lfi^(e7 zvRAeXo{m(h3ElM5^a(PKif4Q0DQm54Dq3oh_^1Aft zk`&lDv61Uf;PGFTdCmucp2|MaO@r}1ah0>b23a*qTA<_1Ez&P$G``Mt>tcxip&Rq; z#`A`LuQ20i+kli6PE_Iv!VcdAXps(BuVkpSMuS!t`J}7_Dn)m$F{@$iFhJk9;Z4i1 z4jB{jd!$OhPL?=8>zTi1?WC<%Kcfw)8dbQ+F`9|h=u}W{$ciFgbZnN9)`#`l{A4bR zAN0mj|M@|?pe^oUg&n~vdDZDv`u6~q`2cQNt*A`9|GbhaZG+BUG71LY0@aG?!j!Z6 ziu4examDe*vzy~9#A4IxZRcc{PkWR=#nyM{o|RT()=}ltNp(eY>zQ0gROz(pZ}X|7 znvtKj%QjyFJ?*o$P0>x!D&1A@ISQ%^E!~W-MCzi059zWZ%sQTfzRtTU0^ku7Gj@4C zAfjl(3&q||pU42hR56@&>{2PrNw0{z;f00m3iQGMuJ&+Db4@H^hI$rus4@={-mOw#|l@_l!*? z(&x=N-8B|LV@+Hc?oei7kv@u+;1+!ll{!oC4P{repo-WqOLuR=H}5FJ)JJZTRkB3= zl~^XTESSA80#7k)@m4p816~jZqBdBxjxf)fla2yv6Hk|gzD0_nwQnD& zZlb(v@_|nIL#N+rm7z$ig>fv%%MA@Od*>wfzD%3Aaa_0LMv}`EkTn+0Zn}$fjs7jO zkPIoqk_}O%;>fM71CI8LvbttQN0fa=_f_K>oluz3+lozXm{Y3B1@vgcXfFZz*-;LSE17l`jKJ$|kpl&k8;^u&QU_X2mqCvRzO3Nw5rUs@rQF ztws7YvdJBH&?6oyd1#k|4tr>ihmJYuIS=jkP}hF1G9i8vWFzVUGMm*6!_?-@jFH4b zVZ%hgVPdFtB%^2b+%D%GSW@{wkuEp5rD1_7#{E0+J))H|$Bu>uIqtXNnp%sUoz$Hy zpF{-*X~a@m;t1)0rvwuFDhd)j#C%PQk^KfI)@bFBBp81us7w5X0YuOPaH&!tF_ z>MbRZVvPMy$T68o%Fz@obMuW7+Fa_z%^QycyRepd1M diff --git a/input.jim b/input.jim deleted file mode 100755 index 6b942a2ef724bc09aa7dd7b38be465f02809d491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmXw#yH3JT9LB%4M^pldC_O9~!{)-I@e&OQ!74^>X(4VkKsz9p8f+mZz5);7V0;4x z7lKUR{ys0wGeUcma5;8$@6F;J#%oGWB08V|QkW6WWy9jaxW~o3rjVPzBjCLr3 zCs-Fj{rD&?FpDi=9^_ARLqUSVr(Lh{DGUk^NCU;qFB diff --git a/jazzbass.sbi b/jazzbass.sbi new file mode 100755 index 0000000000000000000000000000000000000000..eefdfdf439ae32e6c351890c95b1eacad02fcf65 GIT binary patch literal 52 jcmWG`@|4O-tg1>%EG}li0TdJ+7^=TAl`t}JfmHwi$`UlMh`&$3kb*lvYH9Keu|0JF@pW@m1XSk}}ymz9apM}@D)V^`%-4>yT^dnz5 z_vZoL@*O_`V{@3ucodnT+y4ui7Hh1Nk~YXK_N!C09rhUBSIJ9n4iXDcEa*l>|6<;e zvEgX>?jYyQ#gbki@6WrYPK*1tXZrYBs$X!xip3(n) ChPfaB diff --git a/jopl.c b/jopl.c new file mode 100755 index 0000000..e38234e --- /dev/null +++ b/jopl.c @@ -0,0 +1,55 @@ +#include "jorth.h" +#include "adlib.h" +#include "kbd.h" +#include "timer.h" + +cell ontick = 0; +void f_adlib_read() { + PUSHU(adlib_read()); +} + +void f_adlib_write() { + adlib_write(TOP().u & 0xff, ST1().u & 0xff); + DROP(2); +} + +static void timer_callback() { + if (ontick.p) { + f_execcp(ontick); + } +} + +int DONE = 0; +static void f_quit() { + DONE = 1; +} + +void do_repl() { + char buf[128]; + + adlib_init(); + + timer_init(TIMER_18HZ); + f_init(); + + CDEF("quit", f_quit); + CDEF("adlib!", f_adlib_write); + CDEF("adlib@", f_adlib_read); + + f_loadfile("jopl.jor"); + ontick = f_lookupcp("ontick"); + timer_setcallback(timer_callback); + + f_taskloop(); + + while (!DONE) { + PUSHS(gets(buf)); + f_runstring("REPL send"); + f_taskloop(); + } +} + +int main() { + do_repl(); + return 0; +} \ No newline at end of file diff --git a/jopl.exe b/jopl.exe new file mode 100755 index 0000000000000000000000000000000000000000..1c59a48e1a67af5a062d67e0ac9696b27c49b3c8 GIT binary patch literal 61436 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 literal 0 HcmV?d00001 diff --git a/jopl.jor b/jopl.jor new file mode 100755 index 0000000..9a091ce --- /dev/null +++ b/jopl.jor @@ -0,0 +1,152 @@ +' putc task-emit ! + +: start-repl activate ' putc task-emit ! + s" .:: J O P L ( jean OPL2 print loop) ::." type cr + begin receive loadstring s" ok" type cr again ; +task const REPL +REPL start-repl + +var voice +var op + +: op-with-voice voice @ + dup 2 > if 5 + then + dup 5 > if 5 + then + + op @ + ; +: opreg create b, does> ub@ op-with-voice ; +: voicereg create b, does> ub@ voice @ + ; + +0x20 opreg ar-flags +0x40 opreg ar-level +0x60 opreg ar-ad +0x80 opreg ar-sr +0xe0 opreg ar-wave +0xc0 voicereg ar-alg + +0xa0 voicereg ar-freq +0xb0 voicereg ar-note + +: op2 3 op ! ; +: op1 0 op ! ; +: loadop ( flags level ad sr wave -- ) + ar-wave adlib! + ar-sr adlib! + ar-ad adlib! + ar-level adlib! + ar-flags adlib! ; + +: readop ( v -- ) + r> r@ 4 + b@ r@ 3 + b@ r@ 2 + b@ r@ 1 + b@ r< b@ loadop ; + +: instrument ( alg f1 l1 ad1 sr1 w1 f2 l2 ad2 sr2 w2 -- ) + create b, b, b, b, b, b, b, b, b, b, b, does> + dup dup 5 + op1 readop op2 readop + 10 + b@ ar-alg adlib! ; + +0 0x01 0x10 0xf0 0x77 0 0x01 0x00 0xf0 0x77 0 instrument default + +: freqon ( oct freq -- ) + dup 0xff & ar-freq adlib! + 8 >> 0x03 & swap 2 << | 0x20 | ar-note adlib! ; +: noteoff ( -- ) 0 ar-note adlib! ; + +array semitones +3520 3520 />ratio , +3729 3520 />ratio , +3951 3520 />ratio , +4186 3520 />ratio , +4435 3520 />ratio , +4699 3520 />ratio , +4978 3520 />ratio , +5274 3520 />ratio , +5588 3520 />ratio , +5920 3520 />ratio , +6272 3520 />ratio , +6645 3520 />ratio , + +: note dup 12 / 8 % swap 12 % cells semitones + @ 440 swap * ub@ octave @ 12 * + notestate @ if b, else noteon rest then ; +: %loop 0xfe b, , ; +: % notestate @ if 0xf0 b, else rest then ; +: %% 0 for % next ; +: %- notestate @ if 0xfd b, else noteoff then ; +: %do 0xff b, , ; +0 mknote A +1 mknote A# +2 mknote B +3 mknote C +4 mknote C# +5 mknote D +6 mknote D# +7 mknote E +8 mknote F +9 mknote F# +10 mknote G +11 mknote G# + +array tracks 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , + +: track ( i -- p ) cells tracks + ; +: dotrack ( ip -- ip ) + dup if dup 1 + swap ub@ r> + r@ 0xff = if dup @ swap cell + swap execute then + r@ 0xfe = if @ dotrack then + r@ 0xfd = if noteoff then + r@ 0xf0 < if r@ noteon then + rdrop then ; + +: track-tick ( i -- ) + track dup @ dotrack swap ! ; + +: :track create here 1 notestate ! does> voice @ track ! ; +: ;track %loop 0 notestate ! ; +: shush 0 voice @ track ! %- ; + +: player + songticks @ 1 + songticks ! + voice @ + 0 10 for i voice ! i track-tick next + voice ! ; + +var t2 +: startt2 + 0x60 0x04 adlib! + 0x80 0x04 adlib! + t2 @ 0x03 adlib! + 0x42 0x04 adlib! ; + +: ontick adlib@ 0x20 & if startt2 player then ; + +:noname + default + startt2 +; ' onload redefine diff --git a/jopl.prj b/jopl.prj new file mode 100755 index 0000000000000000000000000000000000000000..8d074c1822a8d0f0cf5ebe977612e2053a2f98da GIT binary patch literal 4334 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 ZCqNErtK*>F?~TzSnT*Kfm{qqH{144!)&2kg diff --git a/repl.jim b/repl.jim deleted file mode 100755 index bd663f3667eee15ccbd7b82720786ce209fabc9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmb2=G85(zab&z9bVi7ap|~Wms6@9YwIGLqM_@n8N1)cH8D>iEx)KFLsP-ZN{>N;wVr*h5C_*M79HXIY%upUi=yx! hmURrM;G>X_@EKuLv7yJiA;iKE5BFz8* diff --git a/road.jim b/road.jim deleted file mode 100755 index 8abf566d75c621cf10b63af05ed56498a6500ea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmYk3u}{K47{w1g43bK4&|n<=P^4h&Rc99y2SVbcgNuo&?I8{A9ciyBPW}ld&d$b} zU>r<3J2<*HI%*ummBBl#$aeST_ujpG-<@%}dTo59u8ngejqGM*w~#hBj|+)i5);zZ2YQTW6p(vIv6p!WQvK;!!YPQ*|(dVdonDK1T=Us%;{L2^+S*IRtTQk zqW@_@I+PNJZ}Kd^`bBD#(ZKQ`6g;3{F$dZ_6u=t|*B+CuNU5Gki>7L6$=u<-A2C;S zz@|*l;P0Vc@pCf9vuJBl)nX0lBeSmiz_@f~R2Aw3ybUfpjF`n3kC;szrQeses_o>e SYC9KZz%7UPRvX2o0saBQW}7IL;+8(vgCMDJiPIY$d2XJ!| z^b2SQ$Bg2l;G%T(3*6vyNh?`$zyHhg+?7|o^*i~HDG6KTsnzrQgI%)M_UuFJ9s9yT zjAKEVg2<2~CQfoP+~t3b5(mA=A9h0y7T{u&g=b6SgoT5J5HkoZxcDv8jez;o({sen02IKd)kz^~ICWco9f4EH#TaP6|K73Js%fr=ud(W`$70 zn`QL$dS&Ur!;dvZhGJ~-$w4EzoW?H~2H};P6uS82?YHGJ`R$P(w3NX#?;=#WL&K9x z)DK5$XK3CbomH`$#WVX`)VZJvLY*@k{EQP>vHSTLm$Jb#(@*16=IElQ)L=fe0JCcW O=bU(z#{Zb?sPPA%>Syo( diff --git a/trail1.jim b/trail1.jim deleted file mode 100755 index 6d2d743998b7ad5de3ceff5b41494d6b4daab728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmYL_ze~eF6vwa4Nkw9bgFmVuucF45-UT-ehtsMma1i@Y1 z92|?A5ciIvgARhDgF|ub;GGqO8{WJ3zTfwG@12~_-I1@vB{?N2#11QVqf$fa=op@u zN}xyOD0xW~R51hb7n7^WB=WJJR5gTSoIuOUGkzm&y{F6Ub$(F)RL5`+t6GfFU*5&z zRMp!0eL6*+lukiv2Iw`pPaFD(h(~B!#InC9Jo)_AP#4>Vs?FqzncD?~pRq;zo%{3w zx_Fyz>UHpV1WnVeIbM~bGIT^!A7dEBIEB{8NB)1DX0&p0#GI%V(S<5aHA9-+&>b6& zc>s~kz~v_l_%Wr@v5Q~mx;#b}O1uf&gAFr?Y_J>)TD)<qDKvE{j+J>{{CpMM`P3Po6&x|NA9e0t|O&`Ux GJ^TYGADB4+