;;;;;S.MAP - save battery ram .inesprg 1 ;01 x 16k prg bank .ineschr 0 ;no chr bank .inesmir 1 ; VERTICAL mirroring .inesmap 0 .include "variables.h" .include "loader.fns" .bank 0 .org $0400 jmp START .org $0404 jmp CONTROLLER START: jsr ClearNameTable jsr LoadLogo jsr ClearLine lda #messageSAVINGRAM sta temp jsr StrCopy lda #$1C sta printY jsr PrintLine jsr RenderingOn ;;load wram cluster into destcluster lda wramCluster bne SaveWRamInit lda wramCluster+1 bne SaveWRamInit lda wramCluster+2 bne SaveWRamInit lda wramCluster+3 bne SaveWRamInit jmp SaveWRamDone SaveWRamInit: lda wramCluster sta sourceCluster lda wramCluster+1 sta sourceCluster+1 lda wramCluster+2 sta sourceCluster+2 lda wramCluster+3 sta sourceCluster+3 jsr ClusterToLBA lda #$80 sta destBank sta PRGBANK lda #$00 sta bankCounter sta sectorCounter sta sourceLo ;reset to beginning of wram lda #$60 sta sourceHi SaveWRamLoop: lda #$00 sta sourceLo jsr CardWriteSector ;write 512 bytes lda sourceHi sta temp jsr LoadNextSectorNum ;uses x,y,destHi,destLo SaveWRamLoopCheckCluster16: lda sourceCluster cmp #$FF bne SaveWRamLoopLoadBank ;cluster != last cluster lda sourceCluster+1 cmp #$FF bne SaveWRamLoopLoadBank ;cluster != last cluster lda fat32Enabled beq SaveWRamDone ;if fat 16, done checking SaveWRamLoopCheckCluster32: lda sourceCluster+2 cmp #$FF bne SaveWRamLoopLoadBank ;cluster != last cluster lda sourceCluster+3 and #$0F cmp #$0F bne SaveWRamLoopLoadBank ;cluster != last cluster jmp SaveWRamDone ;fat 32, done checking SaveWRamLoopLoadBank: lda temp sta sourceHi SaveWRamLoopCheckBank: lda sourceHi cmp #$80 bne SaveWRamLoop ;check if next bank needed, destHi=80 ;go to next bank ;reset sourceHi ;jmp SaveWRamLoop lda destBank clc adc #$01 sta destBank sta PRGBANK lda #$60 sta sourceHi jmp SaveWRamLoop SaveWRamDone: lda #'I' sta findEntry lda #' ' sta findEntry+1 sta findEntry+2 sta findEntry+3 sta findEntry+4 sta findEntry+5 sta findEntry+6 sta findEntry+7 jmp CardLoadModule ;load intro module CONTROLLER: rts