From aced3961eccaeae6caaa73b4e61c19276d8dd417 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 24 Apr 2025 04:43:35 -0500 Subject: [PATCH] more dispatch sections... real commit --- src/asm/6502/nes/test.s | 136 ++++++++++++++++++++++++++++++++++------ 1 file changed, 117 insertions(+), 19 deletions(-) diff --git a/src/asm/6502/nes/test.s b/src/asm/6502/nes/test.s index a77511523..2b739c02d 100644 --- a/src/asm/6502/nes/test.s +++ b/src/asm/6502/nes/test.s @@ -8,6 +8,8 @@ curChan=$401 joyInput=$402 joyPrev=$403 +mulTemp0=$08 +mulTemp1=$09 tempNote=$0a tempOctave=$0b temp16=$0c @@ -42,6 +44,9 @@ main: initPlayer: ; initialize command stream player jsr fcsInit + ; enable audio (not DPCM though) ++ lda #$0f + sta $4015 initPPU: ; wait for PPU to be ready bit PPUSTATUS @@ -273,6 +278,39 @@ printNum: sta PPUDATA rts +; a: factor 1 +; y: factor 2 +; ya: product +mul8: + lsr + sta mulTemp0 + tya + beq mul8Zero + + dey + sty mulTemp1 + lda #0 + + ; iteration 0 + bcc + + adc mulTemp1 ++ ror + + ; iterations 1-7 +.REPEAT 7 + ror mulTemp0 + bcc + + adc mulTemp1 ++ ror +.ENDR + + ; end + tay + lda mulTemp0 + ror +mul8Zero: + rts + ; command stream player definition FCS_MAX_CHAN=8 @@ -282,8 +320,22 @@ fcsGlobalStack=$200 fcsPtr=cmdStream fcsVolMax=volMaxArray -exampleNoteTable: - .dw $06ad*2, $064d*2, $05f3*2, $059d*2, $054c*2, $0500*2, $04b8*2, $0474*2, $0434*2, $03f8*2, $03bf*2, $0389*2 +; dispatch state definition +dcStateBase=$410 + +dcBaseFreq=dcStateBase ; short +dcPitch=dcStateBase+(2*FCS_MAX_CHAN) ; short +dcFreq=dcStateBase+(4*FCS_MAX_CHAN) ; short +dcFreqChanged=dcStateBase+(6*FCS_MAX_CHAN) ; char + +exampleNoteTableLow: + .db <$d5c, <$c9c, <$be8, <$b3c, <$a9a, <$a02, <$972, <$8ea, <$86a, <$7f2, <$780, <$714, <$6ae + +exampleNoteTableHigh: + .db >$d5c, >$c9c, >$be8, >$b3c, >$a9a, >$a02, >$972, >$8ea, >$86a, >$7f2, >$780, >$714, >$6ae + +exampleNoteDelta: + .db 192, 180, 172, 162, 152, 144, 136, 128, 120, 114, 108, 102 ; >>2 noteSubTable: @@ -333,7 +385,7 @@ calcNoteOctave: ; end rts -noteOnHandler: +dispatchNoteOn: txa lsr cmp curChan @@ -342,37 +394,83 @@ noteOnHandler: ; note_on handler + lda fcsArg0 sec - sbc #72 + sbc #60 + bmi bottomPitch jsr calcNoteOctave + sta tempNote + sty tempOctave - clc - rol tay - lda exampleNoteTable+1,y - pha - lda exampleNoteTable,y - pha + lda exampleNoteTableLow,y + sta temp16 + lda exampleNoteTableHigh,y + sta temp16+1 + + ldy tempOctave + beq + +- lsr temp16+1 + ror temp16 + dey + bne - + ++ lda temp16+1 + and #$f8 + beq + + + bottomPitch: + lda #$ff + sta temp16 + lda #$07 + sta temp16+1 + ; make a sound - lda #$01 - sta $4015 - lda #$04 ++ lda #$04 sta $4000 lda #$08 sta $4001 - pla + lda temp16 sta $4002 - pla + lda temp16+1 ora #$08 sta $4003 rts +dispatchNoteOff: +dispatchPorta: +dispatchPitch: +dispatchLegato: +dispatchPrePorta: + rts + cmdTableLow: - .db noteOnHandler - .dsb 255, 0 + .db >dispatchNoteOn + .db >dispatchNoteOff + .db 0 ; note_release + .db 0 ; env release + .db 0 ; instrument + .db 0 ; volume + .db 0, 0 ; unused + .db >dispatchPorta + .db >dispatchPitch + .db 0 ; panning + .db >dispatchLegato + .db >dispatchPrePorta + .dsb 243, 0 .include "../stream.s"