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

github.com/ClusterM/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-17 01:13:18 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-17 01:13:18 +0300
commita95ef293d4c49ac8cc15f1e52000d6548c794990 (patch)
treef9e5c15cb83101c01a58b000e235ae561692771e /flash.asm
parentc1a0b52bc997859f7ba7f0fba0b76c9226ea1e95 (diff)
Refactoring
Diffstat (limited to 'flash.asm')
-rw-r--r--flash.asm104
1 files changed, 104 insertions, 0 deletions
diff --git a/flash.asm b/flash.asm
new file mode 100644
index 0000000..476bcd9
--- /dev/null
+++ b/flash.asm
@@ -0,0 +1,104 @@
+ ; субрутины для работы с флеш-памятью
+ ; OMG, это работает!
+flash_writer:
+sector_erase:
+ jsr flash_set_superbank
+ lda #%00001111 ; mirroring, flash-write, chr-write, enable sram
+ sta $5007 ; to enable flash writes
+
+ lda #$F0
+ sta $8000 ; write_prg_flash_command(0x0000, 0xF0);
+ lda #$AA
+ sta $8AAA ; write_prg_flash_command(0x0AAA, 0xAA);
+ lda #$55
+ sta $8555 ; write_prg_flash_command(0x0555, 0x55);
+ lda #$80
+ sta $8AAA ; write_prg_flash_command(0x0AAA, 0x80);
+ lda #$AA
+ sta $8AAA ; write_prg_flash_command(0x0AAA, 0xAA);
+ lda #$55
+ sta $8555 ; write_prg_flash_command(0x0555, 0x55);
+ lda #$30
+ sta $8000 ; write_prg_flash_command(0x0000, 0x30);
+
+ lda #%00001011 ; mirroring, chr-write, enable sram
+ sta $5007 ; to disable flash writes
+
+wait_for_sector_erase:
+ lda $8000
+ cmp #$FF
+ bne wait_for_sector_erase
+ jsr flash_set_superbank_zero
+ rts
+
+write_flash:
+ jsr flash_set_superbank
+ lda #%00001111 ; mirroring, flash-write, chr-write, enable sram
+ sta $5007 ; включаем запись в PRG
+ ldy #$00
+ ldx #$20
+write_flash_loop:
+ lda #$F0
+ sta $8000 ; write_prg_flash_command(0x0000, 0xF0);
+ lda #$AA
+ sta $8AAA ; write_prg_flash_command(0x0AAA, 0xAA);
+ lda #$55
+ sta $8555 ; write_prg_flash_command(0x0555, 0x55);
+ lda #$A0
+ sta $8AAA ; write_prg_flash_command(0x0AAA, 0xA0);
+ lda [COPY_SOURCE_ADDR], y
+ sta [COPY_DEST_ADDR], y
+write_flash_check1:
+ lda [COPY_DEST_ADDR], y
+ cmp [COPY_SOURCE_ADDR], y
+ bne write_flash_check1
+write_flash_check2:
+ lda [COPY_DEST_ADDR], y
+ cmp [COPY_SOURCE_ADDR], y
+ bne write_flash_check2
+ iny
+ bne write_flash_loop
+ inc COPY_SOURCE_ADDR+1
+ inc COPY_DEST_ADDR+1
+ dex
+ bne write_flash_loop
+ lda #%00001011 ; mirroring, chr-write, enable sram
+ sta $5007 ; to disable flash writes
+ jsr flash_set_superbank_zero
+ rts
+
+read_flash:
+ jsr flash_set_superbank
+ ldy #0
+ ldx #$20
+load_save_again:
+ lda [COPY_SOURCE_ADDR], y
+ sta [COPY_DEST_ADDR], y
+ iny
+ bne load_save_again
+ inc COPY_SOURCE_ADDR+1
+ inc COPY_DEST_ADDR+1
+ dex
+ bne load_save_again
+ jsr flash_set_superbank_zero
+ rts
+
+flash_set_superbank:
+ ldx LOADER_GAME_SAVE_SUPERBANK
+ inx
+ lda #$FF
+ sta $5000
+ lda #$00
+flash_set_superbank_calc_next:
+ sec
+ sbc #$02
+ dex
+ bne flash_set_superbank_calc_next
+ sta $5001
+ rts
+
+flash_set_superbank_zero:
+ lda #$00
+ sta $5000
+ sta $5001
+ rts