add basic drawing rountines for things in tracker, a good start

This commit is contained in:
Nico 2022-02-20 22:21:04 +00:00
parent 2015a2e1bc
commit 0760f0d832
1 changed files with 66 additions and 4 deletions

View File

@ -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 ;&note-off JCN2
DUP #00 EQU ;&blank JCN2
DUP #0c MOD ( note minus octave )
#00 SWP #0002 MUL2
;&notes 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
&note-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
&notes "C- "C# "D- "D# "E- "F- "F# "G- "G# "A- "A# "B-
@draw-hex ( n color -- )
#01 .Screen/auto DEO
STH ( stash color )
DUP