;Universal Cartrige Copy / Run routine ;written by Nir Dary 13/6/2001 ; ; GSA = $0488 ;Game Start Adress DOSINI = $0C ; DOSVEC = $0A ; TMPFROM = $CA ;Tmp Source address TMPTO = $CC ;Tmp Dest. address TMPEND = $CE ;Tmp End Copy Addr TMPTABLE = $D0 ;Table address ; ; This Routine will be located at $A000 ; but Assembled at $3000 mem area ; Org $3000 ; TABLE .BYTE $00,$00,$A2,$00,$04,$20,$BF .BYTE $FF ;$FF ends the copy ; START STX $03E9 ;Cassette vector - STX $03EA ;disabled DEX STX $D301 ;Basic off - hardware LDA #$01 STA $09 ;Boot? - say booted STA $42 ;Critic set STA $03F8 ;Basic off - software ; ; LDA #$00 ;Short Move Routine STA TMPTO STA TMPFROM STA TMPTABLE TAY LDA #$30 ;Copy to PAGE 30 STA TMPTO+1 STA TMPTABLE+1 LDA #$A0 STA TMPFROM+1 L1 LDA (TMPFROM),Y STA (TMPTO),Y INY BNE L1 JMP COPY ;ie. jmp 3000 region to ;move code out of cart. ; ; COPY LDA #$00 ;Enable Access to STA $D40E ;Shadow O.S Ram SEI LDA #$FE STA $D301 L2 LDY #$00 ;Load Bank# from table ;into X register LDA (TMPTABLE),Y ;deted if End CMP #$FF ;of Table then BEQ EXITCOPY ;exit to run game TAX INC TMPTABLE LDA (TMPTABLE),Y ;Load Source STA TMPFROM ;Address INC TMPTABLE LDA (TMPTABLE),Y STA TMPFROM+1 INC TMPTABLE LDA (TMPTABLE),Y ;Load Dest STA TMPTO ;Address INC TMPTABLE LDA (TMPTABLE),Y STA TMPTO+1 INC TMPTABLE LDA (TMPTABLE),Y ;Load Source STA TMPEND ;end Address INC TMPTABLE ;to copy LDA (TMPTABLE),Y STA TMPEND+1 INC TMPTABLE ; ;Start of Copy Routine ; MAINLOOP STX $D500 ;Load Rom bank to LDA (TMPFROM),Y STA (TMPTO),Y INC TMPFROM BNE L3 INC TMPFROM+1 L3 INC TMPTO BNE L4 INC TMPTO+1 L4 LDA TMPFROM+1 CMP TMPEND+1 BNE MAINLOOP LDA TMPFROM CMP TMPEND BNE MAINLOOP BEQ L2 ; Do next Bank? ; EXITCOPY LDA #$22 STA $D400 ;DMA control LDA #$FE STA $D301 ;RAM under ROM on LDA #$40 ;Some games need $C0 STA $D40E ;NMI allowed CLI LDA #GSA STA DOSINI+1 STA DOSVEC+1 ; LDA #$C0 ;C000 high byte STA $2E4 ;system size STA $2E6 ; STA $6A ;dlist ends a ; LDA #$00 ;cart interlock ; STA $03FA ;no cart status = off STA $42 ;critic OK STA $244 ;COLDST LDA #$01 STA $08 ;WARMST TAY CLC JMP GSA ;$E474 RTS ; ;Cartrige Run Address ;See Mapping the Atari ; Org $BFFA .WORD $0000 .BYTE $00 .BYTE $04 .WORD START+$7000