;=================================================================== ; code to patch mockingboard if not in slot#4 ;=================================================================== ; this is the brute force version, we have to patch 39 locations ; see further below if you want to try a smaller, more dangerous, patch mockingboard_patch: lda MB_ADDR_H sta pt3_irq_smc1+2 ; 1 * sta pt3_irq_smc2+2 ; 2 * sta pt3_irq_smc2+5 ; 3 * sta pt3_irq_smc3+2 ; 4 * sta pt3_irq_smc3+5 ; 5 * sta pt3_irq_smc4+2 ; 6 * sta pt3_irq_smc4+5 ; 7 * sta pt3_irq_smc5+2 ; 8 * sta pt3_irq_smc5+5 ; 9 * sta pt3_irq_smc6+2 ; 10 * sta pt3_irq_smc6+5 ; 11 * sta pt3_irq_smc7+2 ; 12 * sta pt3_irq_smc7+5 ; 13 * sta mock_init_smc1+2 ; 14 * sta mock_init_smc1+5 ; 15 * sta mock_init_smc2+2 ; 16 * sta mock_init_smc2+5 ; 17 * sta reset_ay_smc1+2 ; 18 * sta reset_ay_smc2+2 ; 19 * sta reset_ay_smc3+2 ; 20 * sta reset_ay_smc4+2 ; 21 * sta write_ay_smc1+2 ; 22 * sta write_ay_smc1+5 ; 23 * sta write_ay_smc2+2 ; 24 * sta write_ay_smc2+5 ; 25 * sta write_ay_smc3+2 ; 26 * sta write_ay_smc3+5 ; 27 * sta write_ay_smc4+2 ; 28 * sta write_ay_smc4+5 ; 29 * sta write_ay_smc5+2 ; 30 * sta write_ay_smc5+5 ; 31 * sta write_ay_smc6+2 ; 32 * sta write_ay_smc6+5 ; 33 * sta setup_irq_smc1+2 ; 34 * sta setup_irq_smc2+2 ; 35 * sta setup_irq_smc3+2 ; 36 * sta setup_irq_smc4+2 ; 37 * sta setup_irq_smc5+2 ; 38 * sta setup_irq_smc6+2 ; 39 * sta disable_irq_smc1+2 ; 40 * sta disable_irq_smc2+2 ; 41 * rts .if 0 ;=================================================================== ; dangerous code to patch mockingboard if not in slot#4 ;=================================================================== ; this code patches any $C4 value to the proper slot# if not slot4 ; this can be dangerous, it might over-write other important values ; that should be $C4 ; safer ways to do this: ; only do this if 2 bytes after a LDA/STA/LDX/STX ; count total and if not 39 then print error message mockingboard_patch: ; from mockingboard_init $1BBF ; to done_pt3_irq_handler $1D85 ldx MB_ADDR_H ldy #0 lda #mockingboard_init sta MB_ADDR_H mb_patch_loop: lda (MB_ADDR_L),Y cmp #$C4 bne mb_patch_nomatch txa sta (MB_ADDR_L),Y mb_patch_nomatch: ; 16-bit increment inc MB_ADDR_L bne mb_patch_oflo inc MB_ADDR_H mb_patch_oflo: lda MB_ADDR_H cmp #>done_pt3_irq_handler bne mb_patch_loop lda MB_ADDR_L cmp #