.OPT NO LIST,NO EJECT ; SAVE #D1:SDXDUMP.M65 ; ; ; ASM ,,#D1:SDXDUMP.COM ; ; Copy SDX cartridge banks to ; D1:SDXIMAGE.CBx where x is bank ; ICCOM = $0342 ICBAL = $0344 ICBLL = $0348 ICAX1 = $034A CIOV = $E456 PORTB = $D301 DMACTL = $D400 SDMCTL = $022F GINTLK = $03FA TRIG3 = $D013 ; ; First 64 bytes to SDX.MAP file ; *= $2F00 RAMROM *= *+16 0=rom $FF=ram BNUMBR *= *+16 Value at $AFFF BARRAY *= *+16 0=valid, unique rom bank TRIG3A *= *+16 trig3 reading for bank ; CURBNK *= *+1 Base test bank CBSAVE *= *+1 Entry cart status PBSAVE *= *+1 Entry portb status *= $3000 START LDA #$60 STA START LDX #0 TXA ZLOOP STA $2F00,X Clear data page INX BNE ZLOOP LDA PORTB STA PBSAVE DEX STX PORTB Basic rom off ; ; SDX OSS BAS OPERATING CONDITION ; $0C $08 1 in high ram (x.com) ; $0C $08 0 in basic ; $08 on 1 in oss cartridge ; $01 $08 1 in dos or low ram ; LDA #$08 a=$08=oss off LDX #$0C x=$0C=sdx off LDY TRIG3 Is this valid? BEQ SAVEOX Yes both are off TAX x=$08=sdx xprnt LDA $AFFF a=ossbnk CMP #$10 Valid? BCC SAVEOX x=$08=sdx xprnt a=oss on TXA a=$08=oss off LDX #$01 x=$01=sdx on SAVEOX STA CBSAVE STX XCSAVE SEI Kill vblank2 before LDX #$0F playing with carts LOOP0 STA $D5E0,X Select SDX bank STA $D508 Kill any OSS bank LDA TRIG3 Save trigger value STA TRIG3A,X LDA $AFFF Also bank id value STA BNUMBR,X INC $AFFF Check ram CMP $AFFF BEQ ISROM No, it's rom STA $AFFF DEC RAMROM,X Set rom/ram map to ram DEC BARRAY,X Show no rom to test ISROM DEX BPL LOOP0 STX CURBNK ; TEST1 INC CURBNK Start sdx bank=0 LDX CURBNK CPX #$10 BCS TESTED LDA BARRAY,X Unique ROM to test? BMI TEST1 No, ram or duplicate JSR BCOPY Copy to ram JSR WRITE Write to disk LDX CURBNK NXTTST INX Next higher bank CPX #$10 BCS TEST1 All done, bump base LDA BARRAY,X Ram or a duplicate? BMI NXTTST Yes, skip it JSR BTEST Go test it and set JMP NXTTST array if applicable. ; TESTED LDX XCSAVE STA $D5E0,X LDX CBSAVE STA $D500,X LDA PBSAVE STA PORTB LDX #$10 LDA # MSPEC STA ICBAL+1,X LDA #3 JSR GOCIO BMI CLOSE LDA # RAMROM STA ICBAL+1,X LDA #64 STA ICBLL,X LDA #0 JSR BPUT CLI RTS ; WRITE TXA CLC ADC #'0 CMP #'9+1 BCC ISHEX ADC #6 ISHEX STA BANKID LDX #$10 JSR CLOSE LDA # FSPEC STA ICBAL+1,X LDA #8 STA ICAX1,X LDA #0 STA ICAX1+1,X LDA #3 JSR GOCIO BMI CLOSE LDA # <$6000 STA ICBAL,X address STA ICBLL,X length LDA # >$6000 STA ICBAL+1,X address LDA # >$2000 BPUT STA ICBLL+1,X length LDA #11 bput JSR GOCIO CLOSE LDA #12 GOCIO STA ICCOM,X CLI JSR CIOV SEI RTS ; BCOPY STA $D5E0,X STA $D508 LDA #$A0 STA BCLOOP+2 LDA #$60 STA BCLOOP+5 LDY #0 BCLOOP LDA $A000,Y STA $6000,Y INY BNE BCLOOP INC BCLOOP+2 INC BCLOOP+5 BPL BCLOOP RESTOR LDY XCSAVE STA $D5E0,Y LDY CBSAVE STA $D500,Y RTS ; BTEST STA $D5E0,X Enable bank STA $D508 LDA #$A0 STA TLOOP+2 LDA #$60 STA TLOOP+5 LDY #0 TLOOP LDA $A000,Y EOR $6000,Y BNE DIFFER Skip array change INY BNE TLOOP INC TLOOP+2 INC TLOOP+5 BPL TLOOP DEC BARRAY,X Flag duplicate DIFFER RTS ; FSPEC .BYTE "D1:SDXBANK." BANKID .BYTE "0",155 MSPEC .BYTE "D1:SDX.MAP",155 .OPT NO LIST .END