; ZZ points to offset from pointer ;D0 F1 ;0 $9000,$9100,$9200 = A Low (reg0) ;D1 F2 ;1 $9300,$9400,$9500 = A high (reg1) [top], B high (reg3) [bottom] ;D2 F3 ;2 $9600,$9700,$9800 = B Low (reg2) ;D3 F4 ;3 $9900,$9A00,$9B00 = C Low (reg4) ;D4 F5 ;4 $9C00,$9D00,$9E00 = Envelope Shape (r13) [top], C high (reg5) [bot] ;D5 F6 ;5 $9F00,$A000,$A100 = Noise (r6), bit7 = don't change envelope ;D6 F7 ;6 $A200,$A300,$A400 = Enable (r7) ;D7 F8 ;7 $A500,$A600,$A700 = A amp (r8), bit 5 of r8,r9,r10 ;D8 F9 ;8 $A800,$A900,$AA00 = C amp (r10) [top], B amp (r9) [bottom] ;D9 FA ;9 $AB00,$AC00,$AD00 = ENV low (r11) ;DA FB ;a $AE00,$AF00,$B000 = ENV high (r12) pt3_write_frame: ldy FRAME_OFFSET ; 3 ;===================== ; Register 0: A fine lda A_FINE_TONE r0_wrsmc: sta $D000,Y ;========================== ; Register 1/3: A/B coarse lda A_COARSE_TONE asl asl asl asl ora B_COARSE_TONE r1_wrsmc: sta $D100,Y ;==================== ; Register 2: B fine lda B_FINE_TONE r2_wrsmc: sta $D200,Y ;==================== ; Register 3: B coarse already done ;============================= ; Register 4: C fine lda C_FINE_TONE r4_wrsmc: sta $D300,Y ;======================================= ; Register 5: Envelope Shape [top] / C coarse [bottom] lda C_COARSE_TONE and #$f sta C_COARSE_TEMP lda ENVELOPE_SHAPE cmp #$ff beq no_envelope yes_envelope: lda ENVELOPE_SHAPE asl asl asl asl ora C_COARSE_TEMP sta C_COARSE_TEMP lda #0 jmp done_envelope no_envelope: lda #$80 done_envelope: sta ENV_SHAPE_TEMP lda C_COARSE_TEMP r13_wrsmc: sta $D400,Y ;===================== ; Register 6: Noise lda NOISE and #$1f ora ENV_SHAPE_TEMP r6_wrsmc: sta $D500,Y ;===================== ; Register 7: Enable lda ENABLE r7_wrsmc: sta $D600,Y ;===================== ; Register 8: a-amp lda A_VOLUME and #$1f sta A_VOL_TEMP lda B_VOLUME and #$10 asl ora A_VOL_TEMP sta A_VOL_TEMP lda C_VOLUME and #$10 asl asl ora A_VOL_TEMP r8_wrsmc: sta $D700,Y ;============================ ; Register 9/10: b-amp (bottom) , c-amp (top) lda B_VOLUME and #$f sta A_VOL_TEMP lda C_VOLUME asl asl asl asl ora A_VOL_TEMP r9_wrsmc: sta $D800,Y ;===================== ; Register 10: c-amp already handled ;===================== ; Register 11: E fine lda ENVELOPE_FINE r11_wrsmc: sta $D900,Y ;======================= ; Register 12: E coarse lda ENVELOPE_COARSE r12_wrsmc: sta $DA00,Y ;============================= ; Register 13: already handled rts ; 6