diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index b89c153..e3a5337 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -60,7 +60,9 @@ db #$20, #$19, #$06, #$17 ; year/month/day ;$7EF4A0 - $7EF4A7 - Service Request Block !FRESH_FILE_MARKER = "$7EF4F0" ; zero if fresh file ;$700500 - $70050F - Extended File Name -;$700510 - $70051F - Password (eventually should be moved into non-mirrored area) +;$701000 - $70100F - Password (incorporate into log header) +;$702000 - $702014 - Rom title copy (incorporate into log header) + !MS_GOT = "$7F5031" !DARK_WORLD = "$7EF3CA" @@ -175,6 +177,7 @@ incsrc inverted.asm incsrc invertedmaps.asm incsrc newhud.asm incsrc compasses.asm +incsrc save.asm incsrc password.asm incsrc enemy_adjustments.asm incsrc hudtext.asm @@ -300,7 +303,7 @@ warnpc $B08000 ;$7F5000[0x800]: Rando's main free ram region ; See tables.asm for specific assignments ;$7F6000[0x500]: Free RAM (reclaimed from damage table) Not allocated yet -;$7F6500[0xB00]: Reserved for SRAM mirror for last 0xB00 bytes of SRAM (extended sram) +;$7F6500[0xB00]: SRAM mirror for last 0xB00 bytes of SRAM (extended sram) ;$7F7667[0x6719] - free ram ;================================================================================ ;SRAM Map diff --git a/fileselect.asm b/fileselect.asm index 77afeca..3d9f551 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -719,11 +719,6 @@ SetItemLayoutPriority: RTL -;-------------------------------------------------------------------------------- -Validate_SRAM: -RTL -;-------------------------------------------------------------------------------- - ;-------------------------------------------------------------------------------- LoadFullItemTiles: PHA : PHX diff --git a/hooks.asm b/hooks.asm index a5d0b17..c6df31c 100755 --- a/hooks.asm +++ b/hooks.asm @@ -215,9 +215,57 @@ SKIP 7 : NOP #3 SKIP 7 : NOP #3 SKIP 7 : NOP #3 ;-------------------------------------------------------------------------------- -; Clearing mirrored copy on file erase -org $0CD4E7 ; <- 654E7 - Bank0C.asm : 2282 (STA $700400, X : STA $700F00, X : STA $701000, X : STA $701100, X) -NOP #20 +; remove Clearing mirrored copy on file erase, instead clearing the extended save file too +org $0CD4E3 ; <- Bank0C.asm : 2282 (STA $700400, X : STA $700F00, X : STA $701000, X : STA $701100, X) +JSL.l ClearExtendedSaveFile +BRA + + NOP #18 ++ +;-------------------------------------------------------------------------------- + +;================================================================================ +; Extended SRAM Save file +;-------------------------------------------------------------------------------- +org $0ccf08 ; <- Bank0C.asm : 2036 (LDA.w #$0007 : STA $7EC00D : STA $7EC013) +JSL CopyExtendedSaveFileToWRAM +;-------------------------------------------------------------------------------- +org $008998 ; <- Bank00.asm : 1296 (LDX.w #$0000) +JSL CopyExtendedWRAMSaveFileToSRAM +;-------------------------------------------------------------------------------- +org $0CD7AB ; <- Bank0C.asm : 3342 (STA $700400, X) +JSL.l ClearExtendedSaveFile +;-------------------------------------------------------------------------------- +org $0CC2EB ; <- Bank0C.asm : 348 (STA $7EF000, X : STA $7EF100, X : STA $7EF200, X : STA $7EF300, X : STA $7EF400, X) +JSL.l ClearExtendedWRAMSaveFile +;-------------------------------------------------------------------------------- +org $09F653 ; <- module_death.asm : 556 (STA $7EF400, X) +JSL.l ClearExtendedWRAMSaveFile +;-------------------------------------------------------------------------------- + +;================================================================================ +; Remove storage of selected file index from end of vanilla SRAM +;-------------------------------------------------------------------------------- +org $0087EB ; <- Bank00.asm : 986 (STA $7EC500 : STA $701FFE) +BRA AfterFileWrittenChecks +;Also skip totally redundant checking and clearing the "file written" marker, +;since it is not even useful in the original code, much less with only one save slot +org $00881f ; <- Bank00.asm : 1011 (STY $01FE) +AfterFileWrittenChecks: +;-------------------------------------------------------------------------------- +org $008951 ; <- Bank00.asm : 1278 (LDX $1FFE : LDA $00848A, X : TAY : PHY) +LDX #$0002 +;-------------------------------------------------------------------------------- +org $0CCE85 ; <- Bank0C.asm : 1953 (LDA $C8 : ASL A : INC #2 : STA $701FFE) +NOP #4 +;-------------------------------------------------------------------------------- +org $0CDB4C ; <- Bank0C.asm : 3655 (LDA $C8 : ASL A : INC #2 : STA $701FFE : TAX) +NOP #4 +;-------------------------------------------------------------------------------- +org $09F5EA ; <- module_death.asm : 510 (LDA $701FFE : TAX : DEX #2) +LDA.w #$0002 : NOP +;-------------------------------------------------------------------------------- +org $0EEFEB ; <- vwf.asm : 310 (LDA $701FFE : TAX) +LDA.w #$0002 : NOP ;-------------------------------------------------------------------------------- ;================================================================================ diff --git a/password.asm b/password.asm index ff45b74..09a1108 100644 --- a/password.asm +++ b/password.asm @@ -1,6 +1,6 @@ !PASSWORD_CODE_POSITION = "$C8" !PASSWORD_SELECTION_POSITION = "$C9" -!PASSWORD_SRAM = "$700510" +!PASSWORD_SRAM = "$701000" Module_Password: diff --git a/save.asm b/save.asm new file mode 100644 index 0000000..f1add73 --- /dev/null +++ b/save.asm @@ -0,0 +1,116 @@ +;-------------------------------------------------------------------------------- +Validate_SRAM: +RTL +;-------------------------------------------------------------------------------- +ClearExtendedSaveFile: + STA $700400, X ; what we wrote over + STA $700500, X + STA $700600, X + STA $700700, X + STA $700800, X + STA $700900, X + STA $700A00, X + STA $700B00, X + STA $700C00, X + STA $700D00, X + STA $700E00, X + STA $700F00, X +RTL +;-------------------------------------------------------------------------------- +ClearExtendedWRAMSaveFile: + STA $7EF400, X ; what we wrote over + STA $7F6500, X + STA $7F6600, X + STA $7F6700, X + STA $7F6800, X + STA $7F6900, X + STA $7F6A00, X + STA $7F6B00, X + STA $7F6C00, X + STA $7F6D00, X + STA $7F6E00, X + STA $7F6F00, X +RTL +;-------------------------------------------------------------------------------- +CopyExtendedSaveFileToWRAM: + PHA + SEP #$30 + LDA $4300 : PHA ; preserve DMA parameters + LDA $4301 : PHA ; preserve DMA parameters + LDA $4302 : PHA ; preserve DMA parameters + LDA $4303 : PHA ; preserve DMA parameters + LDA $4304 : PHA ; preserve DMA parameters + LDA $4305 : PHA ; preserve DMA parameters + LDA $4306 : PHA ; preserve DMA parameters + ;-------------------------------------------------------------------------------- + LDA #$00 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode + + LDA #$80 : STA $4301 ; set bus B source to WRAM register + + LDA #$00 : STA $2181 ; set WRAM register source address + LDA #$65 : STA $2182 + LDA #$7F : STA $2183 + + STZ $4302 ; set bus A destination address to SRAM + LDA #$05 : STA $4303 + LDA #$70 : STA $4304 + + LDA #$00 : STA $4305 ; set transfer size to 0xB00 + LDA #$0B : STA $4306 ; STZ $4307 + + LDA #$01 : STA $420B ; begin DMA transfer + ;-------------------------------------------------------------------------------- + PLA : STA $4306 ; restore DMA parameters + PLA : STA $4305 ; restore DMA parameters + PLA : STA $4304 ; restore DMA parameters + PLA : STA $4303 ; restore DMA parameters + PLA : STA $4302 ; restore DMA parameters + PLA : STA $4301 ; restore DMA parameters + PLA : STA $4300 ; restore DMA parameters + REP #$30 + PLA + STA $7EC00D ; what we wrote over +RTL +;-------------------------------------------------------------------------------- +CopyExtendedWRAMSaveFileToSRAM: + PHA + PHB + SEP #$30 + LDA #$00 : PHA : PLB + LDA $4300 : PHA ; preserve DMA parameters + LDA $4301 : PHA ; preserve DMA parameters + LDA $4302 : PHA ; preserve DMA parameters + LDA $4303 : PHA ; preserve DMA parameters + LDA $4304 : PHA ; preserve DMA parameters + LDA $4305 : PHA ; preserve DMA parameters + LDA $4306 : PHA ; preserve DMA parameters + ;-------------------------------------------------------------------------------- + LDA #$80 : STA $4300 ; set DMA transfer direction B -> A, bus A auto increment, single-byte mode + + STA $4301 ; set bus B source to WRAM register + + LDA #$00 : STA $2181 ; set WRAM register source address + LDA #$65 : STA $2182 + LDA #$7F : STA $2183 + + STZ $4302 ; set bus A destination address to SRAM + LDA #$05 : STA $4303 + LDA #$70 : STA $4304 + + LDA #$00 : STA $4305 ; set transfer size to 0xB00 + LDA #$0B : STA $4306 ; STZ $4307 + + LDA #$01 : STA $420B ; begin DMA transfer + ;-------------------------------------------------------------------------------- + PLA : STA $4306 ; restore DMA parameters + PLA : STA $4305 ; restore DMA parameters + PLA : STA $4304 ; restore DMA parameters + PLA : STA $4303 ; restore DMA parameters + PLA : STA $4302 ; restore DMA parameters + PLA : STA $4301 ; restore DMA parameters + PLA : STA $4300 ; restore DMA parameters + REP #$30 + PLB + PLA + LDX.w #$0000 : TXA ; what we wrote over +RTL