6502 command stream player, part 5
it compiles to-do: test with an actual command stream
This commit is contained in:
parent
134954412d
commit
66e2791b35
|
@ -193,54 +193,98 @@ fcsOptPlaceholder:
|
||||||
jsr fcsReadNext
|
jsr fcsReadNext
|
||||||
rts
|
rts
|
||||||
|
|
||||||
fcsNoOp:
|
fcsCallI:
|
||||||
|
jsr fcsPushCall
|
||||||
|
; get address
|
||||||
|
jsr fcsReadNext
|
||||||
|
tay
|
||||||
|
jsr fcsReadNext
|
||||||
|
; ignore next two bytes
|
||||||
|
jsr fcsIgnoreNext
|
||||||
|
jsr fcsIgnoreNext
|
||||||
|
; a has high byte
|
||||||
|
; y has low byte
|
||||||
|
sty chanPC,x
|
||||||
|
sta chanPC+1,x
|
||||||
rts
|
rts
|
||||||
|
|
||||||
; COMMAND TABLE
|
fcsOffWait:
|
||||||
; $b4 fcsNoArgDispatch,
|
ldy #0
|
||||||
; $b5 fcsNoArgDispatch,
|
sty chanTicks+1,x
|
||||||
; $b6 fcsNoArgDispatch,
|
iny
|
||||||
; $b7 fcsNoArgDispatch,
|
sty chanTicks,x
|
||||||
; $b8 fcsOneByteDispatch,
|
jsr fcsDispatchCmd
|
||||||
; $b9 fcsNoOp,
|
rts
|
||||||
; $ba fcsNoOp,
|
|
||||||
; $bb fcsNoOp,
|
; TODO
|
||||||
; $bc fcsNoOp,
|
fcsFullCmd:
|
||||||
; $bd fcsNoOp,
|
rts
|
||||||
; $be fcsNoOp,
|
|
||||||
; $bf fcsNoOp,
|
fcsCall:
|
||||||
; $c0 fcsPrePorta,
|
jsr fcsPushCall
|
||||||
; $c1 fcsArpTime,
|
; get address
|
||||||
; $c2 fcsVibrato,
|
jsr fcsReadNext
|
||||||
; $c3 fcsVibRange,
|
tay
|
||||||
; $c4 fcsVibShape,
|
jsr fcsReadNext
|
||||||
; $c5 fcsPitch,
|
; a has high byte
|
||||||
; $c6 fcsArpeggio,
|
; y has low byte
|
||||||
; $c7 fcsVolume,
|
sty chanPC,x
|
||||||
; $c8 fcsVolSlide,
|
sta chanPC+1,x
|
||||||
; $c9 fcsPorta,
|
rts
|
||||||
; $ca fcsLegato,
|
|
||||||
; $cb fcsVolSlideTarget,
|
fcsPushCall:
|
||||||
; $cc fcsNoOpOneByte,
|
rts
|
||||||
; $cd fcsNoOpOneByte,
|
|
||||||
; $ce fcsNoOpOneByte,
|
fcsRet:
|
||||||
; $cf fcsPan,
|
rts
|
||||||
; $d0 fcsOptPlaceholder,
|
|
||||||
; $d1 fcsNoOp,
|
fcsJump:
|
||||||
; $d2 fcsNoOp,
|
; get address
|
||||||
; $d3 fcsNoOp,
|
jsr fcsReadNext
|
||||||
; $d4 fcsNoOp,
|
tay
|
||||||
; $d5 fcsCallI,
|
jsr fcsReadNext
|
||||||
; $d6 fcsOffWait,
|
; ignore next two bytes
|
||||||
; $d7 fcsFullCmd,
|
jsr fcsIgnoreNext
|
||||||
; $d8 fcsCall,
|
jsr fcsIgnoreNext
|
||||||
; $d9 fcsRet,
|
; a has high byte
|
||||||
; $da fcsJump,
|
; y has low byte
|
||||||
; $db fcsTickRate,
|
sty chanPC,x
|
||||||
; $dc fcsWaitS,
|
sta chanPC+1,x
|
||||||
; $dd fcsWaitC,
|
rts
|
||||||
; $de fcsWait1,
|
|
||||||
; $df fcsStop,
|
; TODO
|
||||||
|
fcsTickRate:
|
||||||
|
rts
|
||||||
|
|
||||||
|
fcsWaitS:
|
||||||
|
jsr fcsReadNext
|
||||||
|
sta chanTicks,x
|
||||||
|
jsr fcsReadNext
|
||||||
|
sta chanTicks+1,x
|
||||||
|
rts
|
||||||
|
|
||||||
|
fcsWaitC:
|
||||||
|
jsr fcsReadNext
|
||||||
|
sta chanTicks,x
|
||||||
|
lda #0
|
||||||
|
sta chanTicks+1,x
|
||||||
|
rts
|
||||||
|
|
||||||
|
fcsWait1:
|
||||||
|
ldy #1
|
||||||
|
sty chanTicks,x
|
||||||
|
dey
|
||||||
|
sty chanTicks+1,x
|
||||||
|
rts
|
||||||
|
|
||||||
|
fcsStop:
|
||||||
|
lda #0
|
||||||
|
sta chanPC,x
|
||||||
|
sta chanPC+1,x
|
||||||
|
rts
|
||||||
|
|
||||||
|
fcsNoOp:
|
||||||
|
rts
|
||||||
|
|
||||||
; x: channel*2
|
; x: channel*2
|
||||||
; y: command
|
; y: command
|
||||||
|
@ -282,6 +326,14 @@ fcsReadNext:
|
||||||
lda (fcsTempPtr),y
|
lda (fcsTempPtr),y
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
; x: channel*2
|
||||||
|
fcsIgnoreNext:
|
||||||
|
; increase PC
|
||||||
|
inc chanPC,x
|
||||||
|
bne +
|
||||||
|
inc chanPC+1,x
|
||||||
|
+ rts
|
||||||
|
|
||||||
; x: channel*2 (for speed... char variables are interleaved)
|
; x: channel*2 (for speed... char variables are interleaved)
|
||||||
; read commands
|
; read commands
|
||||||
fcsChannelCmd:
|
fcsChannelCmd:
|
||||||
|
@ -434,6 +486,62 @@ fcsVibTable:
|
||||||
.db 0, -12, -24, -36, -48, -59, -70, -80, -89, -98, -105, -112, -117, -121, -124, -126
|
.db 0, -12, -24, -36, -48, -59, -70, -80, -89, -98, -105, -112, -117, -121, -124, -126
|
||||||
.db -126, -126, -124, -121, -117, -112, -105, -98, -89, -80, -70, -59, -48, -36, -24, -12
|
.db -126, -126, -124, -121, -117, -112, -105, -98, -89, -80, -70, -59, -48, -36, -24, -12
|
||||||
|
|
||||||
|
; COMMAND TABLE
|
||||||
|
; $b4 fcsNoArgDispatch,
|
||||||
|
; $b5 fcsNoArgDispatch,
|
||||||
|
; $b6 fcsNoArgDispatch,
|
||||||
|
; $b7 fcsNoArgDispatch,
|
||||||
|
; $b8 fcsOneByteDispatch,
|
||||||
|
; $b9 fcsNoOp,
|
||||||
|
; $ba fcsNoOp,
|
||||||
|
; $bb fcsNoOp,
|
||||||
|
; $bc fcsNoOp,
|
||||||
|
; $bd fcsNoOp,
|
||||||
|
; $be fcsNoOp,
|
||||||
|
; $bf fcsNoOp,
|
||||||
|
; $c0 fcsPrePorta,
|
||||||
|
; $c1 fcsArpTime,
|
||||||
|
; $c2 fcsVibrato,
|
||||||
|
; $c3 fcsVibRange,
|
||||||
|
; $c4 fcsVibShape,
|
||||||
|
; $c5 fcsPitch,
|
||||||
|
; $c6 fcsArpeggio,
|
||||||
|
; $c7 fcsVolume,
|
||||||
|
; $c8 fcsVolSlide,
|
||||||
|
; $c9 fcsPorta,
|
||||||
|
; $ca fcsLegato,
|
||||||
|
; $cb fcsVolSlideTarget,
|
||||||
|
; $cc fcsNoOpOneByte,
|
||||||
|
; $cd fcsNoOpOneByte,
|
||||||
|
; $ce fcsNoOpOneByte,
|
||||||
|
; $cf fcsPan,
|
||||||
|
; $d0 fcsOptPlaceholder,
|
||||||
|
; $d1 fcsNoOp,
|
||||||
|
; $d2 fcsNoOp,
|
||||||
|
; $d3 fcsNoOp,
|
||||||
|
; $d4 fcsNoOp,
|
||||||
|
; $d5 fcsCallI,
|
||||||
|
; $d6 fcsOffWait,
|
||||||
|
; $d7 fcsFullCmd,
|
||||||
|
; $d8 fcsCall,
|
||||||
|
; $d9 fcsRet,
|
||||||
|
; $da fcsJump,
|
||||||
|
; $db fcsTickRate,
|
||||||
|
; $dc fcsWaitS,
|
||||||
|
; $dd fcsWaitC,
|
||||||
|
; $de fcsWait1,
|
||||||
|
; $df fcsStop,
|
||||||
|
fcsInsTableLow:
|
||||||
|
.db >fcsNoArgDispatch, >fcsNoArgDispatch, >fcsNoArgDispatch, >fcsNoArgDispatch, >fcsOneByteDispatch, >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 >fcsOptPlaceholder, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsNoOp, >fcsCallI, >fcsOffWait, >fcsFullCmd, >fcsCall, >fcsRet, >fcsJump, >fcsTickRate, >fcsWaitS, >fcsWaitC, >fcsWait1, >fcsStop
|
||||||
|
|
||||||
|
fcsInsTableHigh:
|
||||||
|
.db <fcsNoArgDispatch, <fcsNoArgDispatch, <fcsNoArgDispatch, <fcsNoArgDispatch, <fcsOneByteDispatch, <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 <fcsOptPlaceholder, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsNoOp, <fcsCallI, <fcsOffWait, <fcsFullCmd, <fcsCall, <fcsRet, <fcsJump, <fcsTickRate, <fcsWaitS, <fcsWaitC, <fcsWait1, <fcsStop
|
||||||
|
|
||||||
|
|
||||||
; "dummy" implementation - example only!
|
; "dummy" implementation - example only!
|
||||||
|
|
||||||
fcsDummyFunc:
|
fcsDummyFunc:
|
||||||
|
|
Loading…
Reference in a new issue