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-17 19:48:23 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-17 19:48:23 +0300
commitc13c394c93f78d51ea4abb822d766579ae90384c (patch)
treeca79b99ed54259e7366b37f6af503f05ad4828eb /flash.asm
parenta95ef293d4c49ac8cc15f1e52000d6548c794990 (diff)
Spaces
Diffstat (limited to 'flash.asm')
-rw-r--r--flash.asm213
1 files changed, 122 insertions, 91 deletions
diff --git a/flash.asm b/flash.asm
index 476bcd9..3d82803 100644
--- a/flash.asm
+++ b/flash.asm
@@ -1,104 +1,135 @@
- ; субрутины для работы с флеш-памятью
- ; OMG, это работает!
-flash_writer:
+ ; subroutines for flash memory stuff
+ ; OMG, это работает!
+
+FLASH_TYPE .rs 1 ; flash memory type
+
+flash_detect:
+ lda #%00001111 ; mirroring, flash-write, chr-write, enable sram
+ sta $5007 ; to enable flash writes
+ lda #$F0
+ sta $8000
+ lda #0
+ sta <FLASH_TYPE
+ lda #$98
+ sta $8AAA
+ lda $8020
+ cmp #'Q'
+ bne .end
+ lda $8022
+ cmp #'R'
+ bne .end
+ lda $8024
+ cmp #'I'
+ bne .end
+ lda $804E
+ sta <FLASH_TYPE
+.end:
+ lda #$F0
+ sta $8000
+ lda #%00001011 ; mirroring, chr-write, enable sram
+ sta $5007 ; to disable flash writes
+ rts
+
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);
+ 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
-
+ 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
-
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
-
+ 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
+ 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
+ lda #$00
+ sta $5000
+ sta $5001
+ lda #%11111000
+ sta $5002
+ rts