6502 command stream player, part 13

possible implementation of full commands
This commit is contained in:
tildearrow 2025-04-19 18:56:37 -05:00
parent 470ae1b7a9
commit 79331737ce
3 changed files with 336 additions and 9 deletions

View file

@ -118,8 +118,8 @@ irq:
rti rti
; command stream player definition ; command stream player definition
FCS_MAX_CHAN=4 FCS_MAX_CHAN=8
FCS_MAX_STACK=16 FCS_MAX_STACK=10
fcsAddrBase=$20 fcsAddrBase=$20
fcsZeroPage=$10 fcsZeroPage=$10

Binary file not shown.

View file

@ -80,7 +80,7 @@ fcsNoteOnNull:
rts rts
; note off, note off env, env release ; note off, note off env, env release
fcsNoArgDispatch: fcsNoArgDispatchB4:
tya tya
sec sec
sbc #$b4 sbc #$b4
@ -88,14 +88,69 @@ fcsNoArgDispatch:
jsr fcsDispatchCmd jsr fcsDispatchCmd
rts rts
fcsOneByteDispatchB4:
tya
pha
fcsReadNext
sta fcsArg0
pla
sec
sbc #$b4
tay
jsr fcsDispatchCmd
rts
; dispatch subroutines for full commands
fcsNoArgDispatch:
jsr fcsDispatchCmd
rts
fcsOneByteDispatch: fcsOneByteDispatch:
tya tya
pha pha
fcsReadNext fcsReadNext
sta fcsArg0 sta fcsArg0
pla pla
sec tay
sbc #$b4 jsr fcsDispatchCmd
rts
fcsTwoByteDispatch:
tya
pha
fcsReadNext
sta fcsArg0
fcsReadNext
sta fcsArg1
pla
tay
jsr fcsDispatchCmd
rts
fcsOneShortDispatch:
tya
pha
fcsReadNext
sta fcsArg0
fcsReadNext
sta fcsArg0+1
pla
tay
jsr fcsDispatchCmd
rts
fcsTwoShortDispatch:
tya
pha
fcsReadNext
sta fcsArg0
fcsReadNext
sta fcsArg0+1
fcsReadNext
sta fcsArg1
fcsReadNext
sta fcsArg1+1
pla
tay tay
jsr fcsDispatchCmd jsr fcsDispatchCmd
rts rts
@ -229,9 +284,28 @@ fcsOffWait:
jsr fcsDispatchCmd jsr fcsDispatchCmd
rts rts
; TODO
fcsFullCmd: fcsFullCmd:
rts ; read command
fcsReadNext
tay
lda fcsFullCmdTable-28,y
tay
lda fcsCmdReadTableLow,y
sta fcsTempPtr
lda fcsCmdReadTableHigh,y
sta fcsTempPtr+1
jmp (fcsTempPtr)
fcsSpeedDialCmd:
lda fcsSpeedDial-224,y
tay
lda fcsFullCmdTable-28,y
tay
lda fcsCmdReadTableLow,y
sta fcsTempPtr
lda fcsCmdReadTableHigh,y
sta fcsTempPtr+1
jmp (fcsTempPtr)
fcsCall: fcsCall:
; get address and relocate it ; get address and relocate it
@ -583,15 +657,268 @@ fcsVibTable:
; $de fcsWait1, ; $de fcsWait1,
; $df fcsStop, ; $df fcsStop,
fcsInsTableHigh: fcsInsTableHigh:
.db >fcsNoArgDispatch, >fcsNoArgDispatch, >fcsNoArgDispatch, >fcsNoArgDispatch, >fcsOneByteDispatch, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp .db >fcsNoArgDispatchB4, >fcsNoArgDispatchB4, >fcsNoArgDispatchB4, >fcsNoArgDispatchB4, >fcsOneByteDispatchB4, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp
.db >fcsPrePorta, >fcsArpTime, >fcsVibrato, >fcsVibRange, >fcsVibShape, >fcsPitch, >fcsArpeggio, >fcsVolume, >fcsVolSlide, >fcsPorta, >fcsLegato, >fcsVolSlideTarget, >fcsNoOpOneByte, >fcsNoOpOneByte, >fcsNoOpOneByte, >fcsPan .db >fcsPrePorta, >fcsArpTime, >fcsVibrato, >fcsVibRange, >fcsVibShape, >fcsPitch, >fcsArpeggio, >fcsVolume, >fcsVolSlide, >fcsPorta, >fcsLegato, >fcsVolSlideTarget, >fcsNoOpOneByte, >fcsNoOpOneByte, >fcsNoOpOneByte, >fcsPan
.db >fcsOptPlaceholder, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsCallI, >fcsOffWait, >fcsFullCmd, >fcsCall, >fcsRet, >fcsJump, >fcsTickRate, >fcsWaitS, >fcsWaitC, >fcsWait1, >fcsStop .db >fcsOptPlaceholder, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsCallI, >fcsOffWait, >fcsFullCmd, >fcsCall, >fcsRet, >fcsJump, >fcsTickRate, >fcsWaitS, >fcsWaitC, >fcsWait1, >fcsStop
.db >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd, >fcsSpeedDialCmd
fcsInsTableLow: fcsInsTableLow:
.db <fcsNoArgDispatch, <fcsNoArgDispatch, <fcsNoArgDispatch, <fcsNoArgDispatch, <fcsOneByteDispatch, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp .db <fcsNoArgDispatchB4, <fcsNoArgDispatchB4, <fcsNoArgDispatchB4, <fcsNoArgDispatchB4, <fcsOneByteDispatchB4, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp
.db <fcsPrePorta, <fcsArpTime, <fcsVibrato, <fcsVibRange, <fcsVibShape, <fcsPitch, <fcsArpeggio, <fcsVolume, <fcsVolSlide, <fcsPorta, <fcsLegato, <fcsVolSlideTarget, <fcsNoOpOneByte, <fcsNoOpOneByte, <fcsNoOpOneByte, <fcsPan .db <fcsPrePorta, <fcsArpTime, <fcsVibrato, <fcsVibRange, <fcsVibShape, <fcsPitch, <fcsArpeggio, <fcsVolume, <fcsVolSlide, <fcsPorta, <fcsLegato, <fcsVolSlideTarget, <fcsNoOpOneByte, <fcsNoOpOneByte, <fcsNoOpOneByte, <fcsPan
.db <fcsOptPlaceholder, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsCallI, <fcsOffWait, <fcsFullCmd, <fcsCall, <fcsRet, <fcsJump, <fcsTickRate, <fcsWaitS, <fcsWaitC, <fcsWait1, <fcsStop .db <fcsOptPlaceholder, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsCallI, <fcsOffWait, <fcsFullCmd, <fcsCall, <fcsRet, <fcsJump, <fcsTickRate, <fcsWaitS, <fcsWaitC, <fcsWait1, <fcsStop
.db <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd, <fcsSpeedDialCmd
fcsCmdReadTableHigh:
.db >fcsNoArgDispatch
.db >fcsOneByteDispatch
.db >fcsTwoByteDispatch
.db >fcsOneShortDispatch
.db >fcsTwoShortDispatch
fcsCmdReadTableLow:
.db <fcsNoArgDispatch
.db <fcsOneByteDispatch
.db <fcsTwoByteDispatch
.db <fcsOneShortDispatch
.db <fcsTwoShortDispatch
fcsFullCmdTable:
; starting from $1c
.db 1
.db 1
.db 1
.db 4
.db 1
; FM commands
.db 1
.db 1
.db 1
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 2
.db 1
.db 2
.db 2
.db 3
.db 1
.db 1
.db 1
.db 1
.db 1
; PSG commands
.db 1
.db 1
.db 1
; Game Boy commands
.db 1
.db 1
; PC Engine commands
.db 1
.db 1
; NES
.db 1
.db 1
; C64
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 3
.db 3
; AY commands
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 2
.db 2
; FDS
.db 1
.db 1
.db 1
.db 1
.db 1
; SAA1099
.db 1
; Amiga
.db 1
.db 1
.db 1
; Lynx
.db 3
; QSound
.db 1
.db 3
.db 1
.db 1
; X1-010
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
; WonderSwan
.db 1
.db 1
; Namco 163
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
; Sound Unit
.db 2
.db 2
.db 2
.db 2
.db 1
.db 1
; ADPCM-A
.db 1
; SNES
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 2
; NES
.db 1
.db 1
.db 1
; macro control
.db 1
.db 1
; surround
.db 2
; FM
.db 1
.db 1
; ES5506
.db 1
.db 4
.db 4
.db 2
.db 2
.db 3
.db 1
.db 1
.db 2
.db 2
.db 1
; unused gap
.db 1
; SNES
.db 1
.db 1
; NES linear counter
.db 1
; ext cmd
.db 1
; C64
.db 1
.db 1
; ESFM
.db 2
.db 2
.db 2
.db 2
; restart macro
.db 1
; PowerNoise
.db 2
.db 2
; Dave
.db 1
.db 1
.db 1
.db 1
.db 1
; MinMod
.db 1
; Bifurcator
.db 2
.db 2
; FDS AutoMod
.db 1
; OpMask
.db 1
; MultiPCM
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
.db 1
; SID3
.db 1
.db 1
.db 1
.db 1
.db 1
.db 2
.db 1
.db 2
.db 2
.db 1
.db 1
.db 1
.db 1
; slide
.db 2
.db 2
; SID3 continued
.db 1
.db 1
.db 1
.db 1
.db 1
; WonderSwan speaker vol
.db 1
; "dummy" implementation - example only! ; "dummy" implementation - example only!