diff --git a/tracker.tal b/tracker.tal index d019e74..696b24b 100644 --- a/tracker.tal +++ b/tracker.tal @@ -20,6 +20,9 @@ %DEBUG2 { ;print-hex JSR2 #0a18 DEO } %RTN { JMP2r } +%MOD { DIVk MUL SUB } +%MOD2 { DIV2k MUL2 SUB2 } + ( devices ) |00 @System &vector $2 &wst $1 &rst $1 &eaddr $2 &ecode $1 &pad $1 &r $2 &g $2 &b $2 &debug $1 &halt $1 @@ -47,7 +50,7 @@ &speed $1 &songloop $1 ( if song loops or not ) &songpos $2 ( position in song table ) - + ( program ) |0100 ( -> ) @@ -60,13 +63,15 @@ ;module ;k-init-module/run JSR2 ;screen-vector .Screen/vector DEO2 -( #01 ;draw-pattern JSR2 ) BRK @screen-vector ( -> ) #0000 .Screen/x DEO2 #0008 .Screen/y DEO2 ;draw-song JSR2 + #0008 .Screen/y DEO2 + #0080 .Screen/x DEO2 + #00 ;draw-pattern JSR2 BRK @draw-song @@ -96,10 +101,67 @@ RTN &pos $2 @draw-pattern ( p ) + .Screen/x DEI2 ,&x STR2 ;k-get-pattern JSR2 - DEBUG2 + DUP2 #0030 ADD2 STH2 ( stash address of end of pattern ) + &loop ( addr ) + DUP2 ;draw-pattern-line JSR2 ( addr ) + #00 .Screen/auto DEO ( clear auto byte ) + .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 + ,&x LDR2 .Screen/x DEO2 + #0003 ADD2 ( addr+3 ) DUP2 STH2rk ( addr+3 addr+3 end ) NEQ2 ,&loop JCN + POP2 POP2r + RTN + &x $2 + +@draw-pattern-line ( addr ) + #01 .Screen/auto DEO + DUP2 LDA #01 ;draw-note JSR2 ( draw note name ) + #00 .Screen/sprite DEO ( space ) + DUP2 #0001 ADD2 ( effect letter ) + LDA #00 SWP ;&effect-letters ADD2 LDA #20 SUB #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 ( draw effect letter ) + #01 .Screen/sprite DEO + #0002 ADD2 LDA #01 ;draw-hex JSR2 ( draw effect argument ) RTN -@draw-hex ( n color -- ) + &effect-letters '_ 'V 'I 'A 'D 'S 'R 'T + +@draw-note ( n color -- ) + #01 .Screen/auto DEO + STH ( stash color ) + DUP #ff EQU ;¬e-off JCN2 + DUP #00 EQU ;&blank JCN2 + + DUP #0c MOD ( note minus octave ) + #00 SWP #0002 MUL2 + ;¬es ADD2 LDA2 SWP + #20 SUB #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 ( first note character ) + STHrk .Screen/sprite DEO + #20 SUB #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 ( second note character ) + STHrk .Screen/sprite DEO + + #0c DIV #10 ADD #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 ( octave number ) + STHr .Screen/sprite DEO +RTN + ¬e-off + #5b #20 SUB #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 ( [ ) + STHrk .Screen/sprite DEO + #00 .Screen/sprite DEO + #5d #20 SUB #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 ( ] ) + STHr .Screen/sprite DEO + POP +RTN + &blank + #2d #20 SUB #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 ( - ) + STHr + DUP .Screen/sprite DEO ( three times ) + DUP .Screen/sprite DEO + .Screen/sprite DEO + POP + + RTN + ¬es "C- "C# "D- "D# "E- "F- "F# "G- "G# "A- "A# "B- + +@draw-hex ( n color -- ) #01 .Screen/auto DEO STH ( stash color ) DUP