Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/coolgirl-multicart/coolgirl-multirom-builder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-18 22:39:19 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-18 22:41:30 +0300
commit65f7185ad6e99eab403e9111b12e4c34db54136b (patch)
treefe9c241babd837026e4354ce4d582edaa422d7f9 /saves.asm
parentc13c394c93f78d51ea4abb822d766579ae90384c (diff)
Banking
Diffstat (limited to 'saves.asm')
-rw-r--r--saves.asm127
1 files changed, 44 insertions, 83 deletions
diff --git a/saves.asm b/saves.asm
index 9799e45..d1a3995 100644
--- a/saves.asm
+++ b/saves.asm
@@ -2,6 +2,7 @@ SAVES .rs 4 ; saves locations
save_state:
; saving last started game
+ jsr enable_prg_ram
lda #0 ; first SRAM bank
sta $5005
; storing signature
@@ -25,10 +26,12 @@ save_state:
; storing save ID of last started game
lda LAST_STARTED_SAVE
sta SRAM_LAST_STARTED_SAVE
+ jsr disable_prg_ram
rts
load_state:
; loading saved state
+ jsr enable_prg_ram
lda #0 ; first SRAM bank
sta $5005
; check for signature
@@ -42,33 +45,34 @@ load_state:
bne .signature_loop
; loading last started game
lda SRAM_LAST_STARTED_GAME
- sta SELECTED_GAME
+ sta <SELECTED_GAME
lda SRAM_LAST_STARTED_GAME+1
- sta SELECTED_GAME+1
+ sta <SELECTED_GAME+1
; check for invalid value
- lda SELECTED_GAME
+ lda <SELECTED_GAME
sec
sbc games_count
- lda SELECTED_GAME+1
+ lda <SELECTED_GAME+1
sbc games_count+1
bcs .ovf
; loading scrolling state
lda SRAM_LAST_STARTED_LINE
- sta SCROLL_LINES_TARGET
+ sta <SCROLL_LINES_TARGET
lda SRAM_LAST_STARTED_LINE+1
- sta SCROLL_LINES_TARGET+1
+ sta <SCROLL_LINES_TARGET+1
; loading last save ID
lda SRAM_LAST_STARTED_SAVE
- sta LAST_STARTED_SAVE
-.end:
- rts
+ sta <LAST_STARTED_SAVE
+ jmp .end
.ovf:
; reset values
lda #0
- sta SELECTED_GAME
- sta SELECTED_GAME+1
- sta SCROLL_LINES_TARGET
- sta SCROLL_LINES_TARGET+1
+ sta <SELECTED_GAME
+ sta <SELECTED_GAME+1
+ sta <SCROLL_LINES_TARGET
+ sta <SCROLL_LINES_TARGET+1
+.end:
+ jsr disable_prg_ram
rts
load_save:
@@ -79,7 +83,7 @@ load_save:
txa
pha
- lda LOADER_GAME_SAVE
+ lda LOADER_GAME_SAVE
beq .done ; game has not battery backed saves
; superbank number
sta LOADER_GAME_SAVE_SUPERBANK
@@ -94,7 +98,9 @@ load_save:
sta COPY_SOURCE_ADDR+1
lda #$60
sta COPY_DEST_ADDR+1
+ jsr enable_prg_ram
jsr read_flash
+ jsr disable_prg_ram
.done:
pla
tax
@@ -110,8 +116,7 @@ save_save:
pha
txa
pha
-
- lda LOADER_GAME_SAVE
+ lda LOADER_GAME_SAVE
beq .done ; если игра не использует сейвы, то всё
; номер супербанка
sta LOADER_GAME_SAVE_SUPERBANK
@@ -126,7 +131,9 @@ save_save:
sta COPY_SOURCE_ADDR+1
lda #$80
sta COPY_DEST_ADDR+1
+ jsr enable_prg_ram
jsr write_flash
+ jsr disable_prg_ram
.done:
pla
tax
@@ -136,117 +143,71 @@ save_save:
rts
save_all_saves:
- ldx LAST_STARTED_SAVE
+ ldx <LAST_STARTED_SAVE
bne .there_is_save
jmp .done
.there_is_save:
- ; чёрный экран
- lda #%00000000 ; выключаем пока что PPU
- sta $2000
- sta $2001
- jsr waitblank_simple
- jsr clear_screen
- lda #$21
- sta $2006
- lda #$C0
- sta $2006
- ldy #0
-.print_warning:
- lda saving_text, y
- sta $2007
- iny
- cmp #0 ; после завершающего нуля перестаём читать символы
- bne .print_warning
- lda #$23
- sta $2006
- lda #$C8
- sta $2006
- lda #$FF
- ldy #$38
-.print_warning_palette:
- sta $2007
- dey
- bne .print_warning_palette
- jsr waitblank_simple
- bit $2002
- lda #0
- sta $2005
- sta $2005
- lda #%00001000
- sta $2000
- lda #%00001010
- sta $2001
- jsr waitblank_simple
-
- ldx LAST_STARTED_SAVE
+ jsr saving_warning_show
+ ldx <LAST_STARTED_SAVE
dex
txa
and #%11111100 ; номер первого сохранения в группе
ora #1 ; плюс один
- sta LOADER_GAME_SAVE
+ sta <LOADER_GAME_SAVE
lda #0
- sta LOADER_GAME_SAVE_BANK
-
+ sta <LOADER_GAME_SAVE_BANK
; копируем три банка
ldx #3
.load_all_saves:
; если это и есть последняя сохранёнка, то пропускаем
- lda LOADER_GAME_SAVE
- cmp LAST_STARTED_SAVE
+ lda <LOADER_GAME_SAVE
+ cmp <LAST_STARTED_SAVE
bne .load_all_saves_skip1
- inc LOADER_GAME_SAVE
+ inc <LOADER_GAME_SAVE
.load_all_saves_skip1:
; если это второй банк, то тоже не трогаем
- lda LOADER_GAME_SAVE_BANK
+ lda <LOADER_GAME_SAVE_BANK
cmp #2
bne .load_all_saves_skip2
- inc LOADER_GAME_SAVE_BANK
+ inc <LOADER_GAME_SAVE_BANK
.load_all_saves_skip2:
; запоминаем в массив - где какая сохранёнка
- lda LOADER_GAME_SAVE
- ldy LOADER_GAME_SAVE_BANK
+ lda <LOADER_GAME_SAVE
+ ldy <LOADER_GAME_SAVE_BANK
sta SAVES, y
jsr load_save
- inc LOADER_GAME_SAVE
- inc LOADER_GAME_SAVE_BANK
+ inc <LOADER_GAME_SAVE
+ inc <LOADER_GAME_SAVE_BANK
dex
- bne .load_all_saves
-
+ bne .load_all_saves
; а во втором банке у нас всегда последняя сохранёнка
- ldx LAST_STARTED_SAVE
+ ldx <LAST_STARTED_SAVE
txa
ldy #2
sta SAVES, y
dex ; выслисляем начало сектора
txa
ora #%00000011
- sta LOADER_GAME_SAVE_SUPERBANK ; номер супербанка
+ sta <LOADER_GAME_SAVE_SUPERBANK ; номер супербанка
lda #0
sta $5005 ; нулевой банк
-
; стираем сектор
jsr sector_erase
-
; а теперь записываем четыре сейва назад
ldy #0
.write:
lda SAVES, y
- sta LOADER_GAME_SAVE
- sty LOADER_GAME_SAVE_BANK
+ sta <LOADER_GAME_SAVE
+ sty <LOADER_GAME_SAVE_BANK
jsr save_save
iny
cpy #4
bne .write
-
.done:
lda #0
- sta LAST_STARTED_SAVE ; никаких сохранёнок, всё, но это надо будет занести в SRAM
+ sta <LAST_STARTED_SAVE ; никаких сохранёнок, всё, но это надо будет занести в SRAM
jsr save_state
- lda #%00000000 ; выключаем пока что PPU
- sta $2000
- sta $2001
- jsr waitblank_simple
- jsr clear_screen
+ jsr saving_warning_hide
rts
saves_signature: