mid-kid
3 years ago
10 changed files with 510 additions and 19 deletions
@ -0,0 +1,393 @@ |
|||||
|
include "charmap.inc" |
||||
|
include "video.inc" |
||||
|
include "defines.inc" |
||||
|
include "utils.inc" |
||||
|
include "hardware.inc" |
||||
|
|
||||
|
cursor_max equ 5 |
||||
|
|
||||
|
section "prog/ezflash_test.asm@wram", wram0 |
||||
|
|
||||
|
w_cursor: db |
||||
|
w_write_val: db |
||||
|
w_write_addr: dw |
||||
|
w_write2_val: db |
||||
|
w_write2_addr: dw |
||||
|
w_read_addr: dw |
||||
|
|
||||
|
section "prog/ezflash_test.asm", rom0 |
||||
|
|
||||
|
prog_ezflash_test:: |
||||
|
call lcd_disable |
||||
|
call font_load |
||||
|
call pals_set_bw |
||||
|
call vram_clear_bgmap |
||||
|
call lcd_enable |
||||
|
|
||||
|
ld hl, string_title |
||||
|
bgcoord de, (screen_width - string_title.end + string_title + 1) / 2, 2 |
||||
|
call print |
||||
|
|
||||
|
ld hl, string_write |
||||
|
bgcoord de, 2, 5 |
||||
|
call print |
||||
|
ld hl, string_write |
||||
|
bgcoord de, 2, 7 |
||||
|
call print |
||||
|
ld hl, string_read |
||||
|
bgcoord de, 2, 10 |
||||
|
call print |
||||
|
|
||||
|
xor a |
||||
|
ld [w_cursor], a |
||||
|
ld [w_write_val], a |
||||
|
ld [w_write2_val], a |
||||
|
ld [w_write2_addr + 0], a |
||||
|
ld [w_read_addr + 0], a |
||||
|
ld a, $a0 |
||||
|
ld [w_read_addr + 1], a |
||||
|
ld a, $c0 |
||||
|
ld [w_write_addr + 0], a |
||||
|
ld a, $7f |
||||
|
ld [w_write_addr + 1], a |
||||
|
ld a, $a0 |
||||
|
ld [w_write2_addr + 1], a |
||||
|
|
||||
|
ld hl, ezf_write_code |
||||
|
ld de, ezf_write_ram |
||||
|
ld bc, ezf_write_end - ezf_write_ram |
||||
|
call memcpy |
||||
|
|
||||
|
call ezf_unlock |
||||
|
|
||||
|
call update_write_addr |
||||
|
call update_write_val |
||||
|
call update_write2_addr |
||||
|
call update_write2_val |
||||
|
call update_read_addr |
||||
|
xor a |
||||
|
call update_cursor |
||||
|
|
||||
|
main: |
||||
|
call update_read_view |
||||
|
call vblank_wait |
||||
|
call joypad_update |
||||
|
ldh a, [h_joypad_pressed] |
||||
|
rra ; joy_a |
||||
|
jr c, .joy_a |
||||
|
rra ; joy_b |
||||
|
rra ; joy_select |
||||
|
rra ; joy_start |
||||
|
rra ; joy_right |
||||
|
jr c, .joy_right |
||||
|
rra ; joy_left |
||||
|
jr c, .joy_left |
||||
|
rra ; joy_up |
||||
|
jr c, .joy_up |
||||
|
rra ; joy_down |
||||
|
jr c, .joy_down |
||||
|
jr main |
||||
|
|
||||
|
.joy_a |
||||
|
ld a, [w_cursor] |
||||
|
srl a |
||||
|
and a |
||||
|
jr z, .joy_a_write |
||||
|
dec a |
||||
|
jr z, .joy_a_write2 |
||||
|
jr main |
||||
|
|
||||
|
.joy_a_write |
||||
|
ld hl, w_write_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
ld a, [w_write_val] |
||||
|
call ezf_write |
||||
|
jr main |
||||
|
|
||||
|
.joy_a_write2 |
||||
|
ld hl, w_write2_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
ld a, [w_write2_val] |
||||
|
call ezf_write |
||||
|
jr main |
||||
|
|
||||
|
.joy_right |
||||
|
ld a, 1 |
||||
|
call update_cursor |
||||
|
jr main |
||||
|
|
||||
|
.joy_left |
||||
|
ld a, cursor_max - 1 |
||||
|
call update_cursor |
||||
|
jr main |
||||
|
|
||||
|
.joy_up |
||||
|
ld de, $10 |
||||
|
ldh a, [h_joypad_down] |
||||
|
bit joy_b_f, a |
||||
|
jr nz, .joy_up_done |
||||
|
ld de, 1 |
||||
|
.joy_up_done |
||||
|
call update_val |
||||
|
jr main |
||||
|
|
||||
|
.joy_down |
||||
|
ld de, -$10 |
||||
|
ldh a, [h_joypad_down] |
||||
|
bit joy_b_f, a |
||||
|
jr nz, .joy_down_done |
||||
|
ld de, -1 |
||||
|
.joy_down_done |
||||
|
call update_val |
||||
|
jr main |
||||
|
|
||||
|
update_val: |
||||
|
; de: value increment |
||||
|
ld a, [w_cursor] |
||||
|
ld hl, .jumptable |
||||
|
ld c, 2 |
||||
|
call array_index |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
jp hl |
||||
|
|
||||
|
.jumptable |
||||
|
dw .write_addr |
||||
|
dw .write_val |
||||
|
dw .write2_addr |
||||
|
dw .write2_val |
||||
|
dw .read_addr |
||||
|
|
||||
|
.write_addr |
||||
|
ld hl, w_write_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
add hl, de |
||||
|
ld a, l |
||||
|
ld [w_write_addr + 0], a |
||||
|
ld a, h |
||||
|
ld [w_write_addr + 1], a |
||||
|
jp update_write_addr |
||||
|
|
||||
|
.write_val |
||||
|
ld hl, w_write_val |
||||
|
ld a, [hl] |
||||
|
add e |
||||
|
ld [hl], a |
||||
|
jp update_write_val |
||||
|
|
||||
|
.write2_addr |
||||
|
ld hl, w_write2_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
add hl, de |
||||
|
ld a, l |
||||
|
ld [w_write2_addr + 0], a |
||||
|
ld a, h |
||||
|
ld [w_write2_addr + 1], a |
||||
|
jp update_write2_addr |
||||
|
|
||||
|
.write2_val |
||||
|
ld hl, w_write2_val |
||||
|
ld a, [hl] |
||||
|
add e |
||||
|
ld [hl], a |
||||
|
jp update_write2_val |
||||
|
|
||||
|
.read_addr |
||||
|
ld hl, w_read_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
add hl, de |
||||
|
ld a, l |
||||
|
ld [w_read_addr + 0], a |
||||
|
ld a, h |
||||
|
ld [w_read_addr + 1], a |
||||
|
jp update_read_addr |
||||
|
|
||||
|
update_cursor: |
||||
|
; a: cursor increment |
||||
|
ld hl, w_cursor |
||||
|
ld e, [hl] |
||||
|
ld d, e |
||||
|
add e |
||||
|
ld c, cursor_max |
||||
|
call divide |
||||
|
ld [hl], a |
||||
|
ld e, a |
||||
|
; d: old, e: new |
||||
|
|
||||
|
ld a, d |
||||
|
ld d, 0 |
||||
|
call .set |
||||
|
ld a, e |
||||
|
ld d, "-" |
||||
|
|
||||
|
.set |
||||
|
; a: position |
||||
|
; d: character |
||||
|
ld hl, .coords |
||||
|
ld c, 2 |
||||
|
call array_index |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
call lcd_blank_wait |
||||
|
ld [hl], d |
||||
|
ret |
||||
|
|
||||
|
.coords |
||||
|
dbgcoord 8, 5 |
||||
|
dbgcoord 8 + 6, 5 |
||||
|
dbgcoord 8, 7 |
||||
|
dbgcoord 8 + 6, 7 |
||||
|
dbgcoord 8, 10 |
||||
|
|
||||
|
update_write_addr: |
||||
|
ld hl, w_write_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
bgcoord de, 9, 5 |
||||
|
jp print_hex_4digit |
||||
|
|
||||
|
update_write_val: |
||||
|
ld a, [w_write_val] |
||||
|
bgcoord de, 9 + 6, 5 |
||||
|
jp print_hex_2digit |
||||
|
|
||||
|
update_write2_addr: |
||||
|
ld hl, w_write2_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
bgcoord de, 9, 7 |
||||
|
jp print_hex_4digit |
||||
|
|
||||
|
update_write2_val: |
||||
|
ld a, [w_write2_val] |
||||
|
bgcoord de, 9 + 6, 7 |
||||
|
jp print_hex_2digit |
||||
|
|
||||
|
update_read_addr: |
||||
|
ld hl, w_read_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
bgcoord de, 9, 10 |
||||
|
jp print_hex_4digit |
||||
|
|
||||
|
update_read_view: |
||||
|
ld hl, w_read_addr |
||||
|
ld a, [hl+] |
||||
|
ld h, [hl] |
||||
|
ld l, a |
||||
|
bgcoord de, 2, 12 |
||||
|
ld b, 4 |
||||
|
.loop |
||||
|
ld c, 8 |
||||
|
.loop_inner |
||||
|
push bc |
||||
|
ld a, [hl+] |
||||
|
call print_hex_2digit |
||||
|
pop bc |
||||
|
dec c |
||||
|
jr nz, .loop_inner |
||||
|
add_r16_8 de, 32 - 16 |
||||
|
dec b |
||||
|
jr nz, .loop |
||||
|
ret |
||||
|
|
||||
|
ezf_unlock: |
||||
|
xor a |
||||
|
ld hl, $7f31 |
||||
|
call ezf_write |
||||
|
ld a, $80 |
||||
|
ld hl, $7f32 |
||||
|
jp ezf_write |
||||
|
|
||||
|
string_title: db "EZFLASH TESTER$" |
||||
|
.end |
||||
|
string_write: db "WRITE$" |
||||
|
string_read: db "READ$" |
||||
|
|
||||
|
ezf_write: |
||||
|
; a: value |
||||
|
; hl: address |
||||
|
ld b, a |
||||
|
ld a, h |
||||
|
cp $7f |
||||
|
jp nz, ezf_write_do |
||||
|
ld a, l |
||||
|
cp $d2 |
||||
|
jp z, .wait |
||||
|
cp $36 |
||||
|
jp nz, ezf_write_do |
||||
|
|
||||
|
.wait |
||||
|
push bc |
||||
|
push hl |
||||
|
ld hl, $7fc0 |
||||
|
ld b, $05 |
||||
|
call ezf_write_do |
||||
|
bgcoord de, 15, 10 |
||||
|
ld a, "." |
||||
|
call lcd_blank_wait |
||||
|
ld [de], a |
||||
|
pop hl |
||||
|
pop bc |
||||
|
call ezf_write_7fd2 |
||||
|
bgcoord de, 15, 10 |
||||
|
xor a |
||||
|
call lcd_blank_wait |
||||
|
ld [de], a |
||||
|
ret |
||||
|
|
||||
|
ezf_write_code: |
||||
|
load "prog/ezflash_test.asm@ezf_write", wram0 |
||||
|
ezf_write_ram: |
||||
|
ezf_write_do: |
||||
|
ld de, $7f00 |
||||
|
ld a, $e1 |
||||
|
ld [de], a |
||||
|
ld e, $10 |
||||
|
inc a |
||||
|
ld [de], a |
||||
|
ld e, $20 |
||||
|
inc a |
||||
|
ld [de], a |
||||
|
ld [hl], b |
||||
|
ld e, $f0 |
||||
|
inc a |
||||
|
ld [de], a |
||||
|
ret |
||||
|
|
||||
|
ezf_write_7fd2: |
||||
|
di |
||||
|
call ezf_write_do |
||||
|
ld de, $a000 |
||||
|
.loop |
||||
|
ld a, [de] |
||||
|
and a |
||||
|
jr nz, .loop |
||||
|
|
||||
|
jr @ ; TEST |
||||
|
|
||||
|
ld b, 0 |
||||
|
call ezf_write_do |
||||
|
ei |
||||
|
ret |
||||
|
|
||||
|
; 7f32:01 -> 7fd2:01 (hang) |
||||
|
; 7f36:02 (hang) |
||||
|
; 7f36:03 (hang) |
||||
|
|
||||
|
ezf_write_end: |
@ -0,0 +1,23 @@ |
|||||
|
if !def(_utils_inc_) |
||||
|
_utils_inc_ equ 0 |
||||
|
|
||||
|
_add_r16_8: macro |
||||
|
ld a, \2 |
||||
|
add (\3) |
||||
|
ld \2, a |
||||
|
adc \1 |
||||
|
sub \2 |
||||
|
ld \1, a |
||||
|
endm |
||||
|
|
||||
|
add_r16_8: macro |
||||
|
if "\1" == "hl" |
||||
|
_add_r16_8 h, l, (\2) |
||||
|
elif "\1" == "bc" |
||||
|
_add_r16_8 b, c, (\2) |
||||
|
elif "\1" == "de" |
||||
|
_add_r16_8 d, e, (\2) |
||||
|
endc |
||||
|
endm |
||||
|
|
||||
|
endc |
Loading…
Reference in new issue