;;;;;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
  

