Skip to content

Instantly share code, notes, and snippets.

@rdeioris
Last active August 25, 2021 23:04
Show Gist options
  • Save rdeioris/fe24346e44e62250728c0ce71263388e to your computer and use it in GitHub Desktop.
Save rdeioris/fe24346e44e62250728c0ce71263388e to your computer and use it in GitHub Desktop.
SECTION "Setup", ROM0[$100]
JP start
SECTION "Main", ROM0[$150]
start:
LD SP, $FFFE
CALL clear_vram
CALL clear_oam
LD HL, $8000
LD BC, tile_quad
CALL set_tile
LD BC, tile_block
CALL set_tile
LD BC, tile_hlines
CALL set_tile
LD BC, tile_blank
CALL set_tile
LD BC, tile_block
CALL set_tile
LD BC, tile_cross
CALL set_tile
LD BC, window_map
LD DE, 1024
LD HL, $9C00
CALL load_map
XOR A
LD [$FF42], A
LD [$FF43], A
LD A, 100
LD [$FF4A], A
LD [$FF4B], A
CALL sprite_palette0
LD A, 30
LD [sprite_y], A
LD [sprite_x], A
LD A, [sprite_y]
LD [$FE00], A
LD A, [sprite_x]
LD [$FE01], A
LD A, 5
LD [$FE02], A
LD A, 0
LD [$FE03], A
CALL turn_on_lcd
gameloop:
LD A, [$FF44]
CP $90
CALL Z, in_vblank
LD A, [$FF44]
CP $48
JP NC, scroll_x
CALL wait_hblank
LD A, [sprite_y]
LD [$FE00], A
LD A, [sprite_x]
LD [$FE01], A
CALL white_palette
XOR A
LD [$FF43], A
CALL wait_non_hblank
JP gameloop
scroll_x:
CALL wait_hblank
CALL black_palette
LD A, [scroll_var]
LD [$FF43], A
CALL wait_non_hblank
JP gameloop
in_vblank:
LD A, $20
LD [$FF00], A
LD A, [$FF00]
LD A, [$FF00]
LD A, [$FF00]
LD A, [$FF00]
LD A, [$FF00]
BIT 0, A
JP NZ, left
LD HL, $FF4B
INC [HL]
left:
BIT 1, A
JP NZ, up
LD HL, $FF4B
DEC [HL]
up:
BIT 2, A
JP NZ, down
LD HL, $FF4A
DEC [HL]
down:
BIT 3, A
JP NZ, half_bottom_scroll
LD HL, $FF4A
INC [HL]
half_bottom_scroll:
LD A, [scroll_var]
INC A
LD [scroll_var],A
LD HL, sprite_y
INC [HL]
LD HL, sprite_x
INC [HL]
RET
wait_vblank:
LD A, [$FF44]
CP $90
JP NZ, wait_vblank
RET
wait_hblank:
LD A, [$FF41]
AND $03
JP NZ, wait_hblank
RET
wait_non_hblank:
LD A, [$FF41]
AND $03
JP Z, wait_non_hblank
RET
turn_off_lcd:
CALL wait_vblank
XOR A
LD [$FF40], A
RET
turn_on_lcd:
LD A, $f3
LD [$FF40], A
RET
clear_vram:
CALL turn_off_lcd
XOR A
LD HL, $9FFF
clear_vram_loop:
LD [HL-], A
BIT 7, H
JP NZ, clear_vram_loop
RET
black_palette:
LD A, $03
LD [$FF47], A
RET
white_palette:
LD A, $C0
LD [$FF47], A
RET
sprite_palette0:
LD A, $e4
LD [$FF48], A
RET
clear_oam:
LD HL, $FE00
clear_oam_loop:
XOR A
LD [HL+], A
LD A, $A0
CP A, L
JP NZ, clear_oam_loop
RET
set_tile:
LD D, 0
set_tile_loop:
LD A, [BC]
LD [HL+], A
INC BC
INC D
LD A, D
CP $10
JP NZ, set_tile_loop
RET
load_map:
LD A, [BC]
LD [HL+], A
INC BC
DEC DE
LD A,D
OR E
JP NZ, load_map
RET
tile_quad:
DB $FF,$FF,$81,$81,$81,$81,$81,$81,$81,$81,$81,$81,$81,$81,$FF,$FF
tile_block:
DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
tile_hlines:
DB $FF,$FF,$00,$00,$FF,$FF,$00,$00,$FF,$FF,$00,$00,$FF,$FF,$00,$00
tile_blank:
DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
tile_cross:
DB $18,$00,$18,$00,$18,$00,$FF,$FF,$FF,$FF,$00,$18,$00,$18,$00,$18
window_map:
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
DB 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
DB 4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3
SECTION "VARIABLES", WRAM0
scroll_var:
DS 1
sprite_y:
DS 1
sprite_x:
DS 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment