edit automata while paused
This commit is contained in:
184
Code/edit.asm
184
Code/edit.asm
@@ -1,8 +1,13 @@
|
||||
INCLUDE "hardware.inc"
|
||||
INCLUDE "utils.inc"
|
||||
|
||||
SPRITE_ANIM_DELAY EQU 12
|
||||
|
||||
Section "Edit memory", HRAM
|
||||
SelectX: ds 1
|
||||
SelectY: ds 1
|
||||
SpriteAnimation: ds 1
|
||||
SpriteDelay: ds 1
|
||||
|
||||
EXPORT InitEdit
|
||||
SECTION "Init edit", ROM0
|
||||
@@ -15,23 +20,186 @@ InitEdit:
|
||||
|
||||
EXPORT EditOldBuffer
|
||||
SECTION "Edit old buffer", ROM0
|
||||
EditOldBuffer:
|
||||
EditOldBuffer:
|
||||
; check start has been pressed
|
||||
ldh a, [JoypadDown]
|
||||
and a, %1000
|
||||
and a, JOYPAD_START
|
||||
ret z
|
||||
|
||||
.loop
|
||||
; wait v-blank
|
||||
halt
|
||||
|
||||
; show sprites
|
||||
ldh a, [rLCDC]
|
||||
or a, LCDCF_OBJON
|
||||
ldh [rLCDC], a
|
||||
|
||||
; init sprite animation
|
||||
xor a
|
||||
ldh a, [rIF]
|
||||
ldh [SpriteAnimation], a
|
||||
ld a, SPRITE_ANIM_DELAY
|
||||
ldh [SpriteDelay], a
|
||||
|
||||
.loop
|
||||
; clear interrupts
|
||||
xor a
|
||||
ldh [rIF], a
|
||||
|
||||
; compute cursor X position
|
||||
ldh a, [SelectX]
|
||||
sla a
|
||||
sla a
|
||||
add a, 8
|
||||
ld b, a
|
||||
|
||||
; compute cursor Y position
|
||||
ldh a, [SelectY]
|
||||
sla a
|
||||
sla a
|
||||
add a, 16
|
||||
ld c, a
|
||||
|
||||
; update and load sprite animation
|
||||
ldh a, [SpriteDelay]
|
||||
dec a
|
||||
ldh [SpriteDelay], a
|
||||
jr nz, .same
|
||||
ldh a, [SpriteAnimation]
|
||||
inc a
|
||||
and a, 3
|
||||
ldh [SpriteAnimation], a
|
||||
ld a, SPRITE_ANIM_DELAY
|
||||
ldh [SpriteDelay], a
|
||||
.same
|
||||
ldh a, [SpriteAnimation]
|
||||
ld d, a
|
||||
|
||||
; update sprite in OAM
|
||||
SetSprite 0, b, c, d, 0
|
||||
|
||||
call UpdateJoypad
|
||||
|
||||
; check A button has been pressed
|
||||
ldh a, [JoypadDown]
|
||||
and a, %1000
|
||||
ret nz
|
||||
and a, JOYPAD_A
|
||||
call nz, ToggleCell
|
||||
|
||||
jr .loop
|
||||
; check start has been pressed
|
||||
ldh a, [JoypadDown]
|
||||
and a, JOYPAD_START
|
||||
jr nz, .exit
|
||||
|
||||
; check left direction
|
||||
ldh a, [JoypadDown]
|
||||
and a, JOYPAD_LEFT
|
||||
jr z, .endLeft
|
||||
ldh a, [SelectX]
|
||||
and a
|
||||
jr z, .endLeft
|
||||
dec a
|
||||
ldh [SelectX], a
|
||||
.endLeft
|
||||
|
||||
; check up direction
|
||||
ldh a, [JoypadDown]
|
||||
and a, JOYPAD_UP
|
||||
jr z, .endUp
|
||||
ldh a, [SelectY]
|
||||
and a
|
||||
jr z, .endUp
|
||||
dec a
|
||||
ldh [SelectY], a
|
||||
.endUp
|
||||
|
||||
|
||||
; check right direction
|
||||
ldh a, [JoypadDown]
|
||||
and a, JOYPAD_RIGHT
|
||||
jr z, .endRight
|
||||
ldh a, [SelectX]
|
||||
cp a, 39
|
||||
jr nc, .endRight
|
||||
inc a
|
||||
ldh [SelectX], a
|
||||
.endRight
|
||||
|
||||
; check down direction
|
||||
ldh a, [JoypadDown]
|
||||
and a, JOYPAD_DOWN
|
||||
jr z, .endDown
|
||||
ldh a, [SelectY]
|
||||
cp a, 35
|
||||
jr nc, .endDown
|
||||
inc a
|
||||
ldh [SelectY], a
|
||||
.endDown
|
||||
|
||||
; wait v-blank
|
||||
halt
|
||||
|
||||
jp .loop
|
||||
|
||||
.exit
|
||||
|
||||
; hide sprites
|
||||
ldh a, [rLCDC]
|
||||
and a, ~LCDCF_OBJON
|
||||
ldh [rLCDC], a
|
||||
|
||||
ret
|
||||
|
||||
Section "Value to flag", ROM0, ALIGN[8]
|
||||
Flag: db 1, 2, 4, 8
|
||||
|
||||
; \1: horizontal stride
|
||||
ToggleInTargetBuffer: MACRO
|
||||
; move pointer to 2x2 cell group
|
||||
ldh a, [SelectY]
|
||||
sra a
|
||||
jr z, .addX\@
|
||||
ld c, a
|
||||
ld de, \1
|
||||
.mul\@
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .mul\@
|
||||
.addX\@
|
||||
xor a
|
||||
ld d, a
|
||||
ldh a, [SelectX]
|
||||
sra a
|
||||
ld e, a
|
||||
add hl, de
|
||||
|
||||
; compute cell number in 2x2 cell group
|
||||
ldh a, [SelectX]
|
||||
and a, 1
|
||||
ld b, a
|
||||
ldh a, [SelectY]
|
||||
and a, 1
|
||||
sla a
|
||||
or a, b
|
||||
|
||||
; transform cell number to bit offset in 2x2 cell
|
||||
ld d, HIGH(Flag)
|
||||
ld e, a
|
||||
ld a, [de]
|
||||
ld b, a
|
||||
|
||||
ld a, [hl]
|
||||
xor a, b
|
||||
ld [hl], a
|
||||
ENDM
|
||||
|
||||
ToggleCell:
|
||||
ldh a, [Video]
|
||||
ld l, a
|
||||
ldh a, [Video + 1]
|
||||
xor a, %100 ; change to displayed video buffer
|
||||
ld h, a
|
||||
ToggleInTargetBuffer 32
|
||||
ldh a, [Progress]
|
||||
ld l, a
|
||||
ldh a, [Old]
|
||||
ld h, a
|
||||
ToggleInTargetBuffer 20
|
||||
ret
|
||||
Reference in New Issue
Block a user