From 79331737ce9f957f35cbee58523e373e5f18a5b4 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 19 Apr 2025 18:56:37 -0500 Subject: [PATCH] 6502 command stream player, part 13 possible implementation of full commands --- src/asm/6502/nes/test.s | 4 +- src/asm/6502/seq.bin | Bin 938 -> 3935 bytes src/asm/6502/stream.s | 341 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 336 insertions(+), 9 deletions(-) diff --git a/src/asm/6502/nes/test.s b/src/asm/6502/nes/test.s index 8638f1f07..97643dce9 100644 --- a/src/asm/6502/nes/test.s +++ b/src/asm/6502/nes/test.s @@ -118,8 +118,8 @@ irq: rti ; command stream player definition -FCS_MAX_CHAN=4 -FCS_MAX_STACK=16 +FCS_MAX_CHAN=8 +FCS_MAX_STACK=10 fcsAddrBase=$20 fcsZeroPage=$10 diff --git a/src/asm/6502/seq.bin b/src/asm/6502/seq.bin index d88a8e3e805deac2530357ea7eb0321150aa1ddf..5b0afe69e9d5a323f32733b683b0f623650903bd 100644 GIT binary patch literal 3935 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 diff --git a/src/asm/6502/stream.s b/src/asm/6502/stream.s index 0f115c304..de06157ec 100644 --- a/src/asm/6502/stream.s +++ b/src/asm/6502/stream.s @@ -80,7 +80,7 @@ fcsNoteOnNull: rts ; note off, note off env, env release -fcsNoArgDispatch: +fcsNoArgDispatchB4: tya sec sbc #$b4 @@ -88,14 +88,69 @@ fcsNoArgDispatch: jsr fcsDispatchCmd 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: tya pha fcsReadNext sta fcsArg0 pla - sec - sbc #$b4 + tay + 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 jsr fcsDispatchCmd rts @@ -229,9 +284,28 @@ fcsOffWait: jsr fcsDispatchCmd rts -; TODO 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: ; get address and relocate it @@ -583,15 +657,268 @@ fcsVibTable: ; $de fcsWait1, ; $df fcsStop, 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 >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: - .db fcsNoArgDispatch + .db >fcsOneByteDispatch + .db >fcsTwoByteDispatch + .db >fcsOneShortDispatch + .db >fcsTwoShortDispatch + +fcsCmdReadTableLow: + .db