Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- rLCDC EQU $ff40
- rSTAT EQU $ff41
- rSCX EQU $ff42
- rSCY EQU $ff43
- rVBK EQU $ff4f
- rBCPS EQU $ff68
- rBCPD EQU $ff69
- rOCPS EQU $ff6a
- rOCPD EQU $ff6b
- rIE EQU $ffff
- SECTION "ROM", ROM0[0]
- Main:
- call ScreenOff
- MainContinue:
- xor a
- ldh [rSCX], a
- ldh [rSCY], a
- ldh [rIE], a
- dec a
- ld hl, $9c00
- .clear_tilemap_loop
- ld [hli], a
- bit 5, h
- jr z, .clear_tilemap_loop
- ld hl, $8ff0
- xor a
- .clear_tile_loop
- ld [hli], a
- bit 4, h
- jr z, .clear_tile_loop
- ld de, Font
- ld c, 160
- .load_font_loop
- ld a, [de]
- inc de
- ld [hli], a
- ld [hli], a
- dec c
- jr nz, .load_font_loop
- call Calculate
- ld a, $89
- ldh [rLCDC], a
- ei
- .halts
- db $76, $76, $76 ;triple halt
- jr .halts
- Font:
- db $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00 ;0
- db $30, $70, $30, $30, $30, $30, $FC, $00 ;1
- db $78, $CC, $0C, $38, $60, $CC, $FC, $00 ;2
- db $78, $CC, $0C, $38, $0C, $CC, $78, $00 ;3
- db $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00 ;4
- db $FC, $C0, $F8, $0C, $0C, $CC, $78, $00 ;5
- db $38, $60, $C0, $F8, $CC, $CC, $78, $00 ;6
- db $FC, $CC, $0C, $18, $30, $30, $30, $00 ;7
- db $78, $CC, $CC, $78, $CC, $CC, $78, $00 ;8
- db $78, $CC, $CC, $7C, $0C, $18, $70, $00 ;9
- db $30, $78, $CC, $CC, $FC, $CC, $CC, $00 ;A
- db $FC, $66, $66, $7C, $66, $66, $FC, $00 ;B
- db $3C, $66, $C0, $C0, $C0, $66, $3C, $00 ;C
- db $F8, $6C, $66, $66, $66, $6C, $F8, $00 ;D
- db $FE, $62, $68, $78, $68, $62, $FE, $00 ;E
- db $FE, $62, $68, $78, $68, $60, $F0, $00 ;F
- db $FE, $C6, $8C, $18, $32, $66, $FE, $00 ;Z
- db $00, $00, $FC, $00, $00, $FC, $00, $00 ;=
- db $00, $00, $00, $FC, $00, $00, $00, $00 ;-
- db $00, $30, $30, $FC, $30, $30, $00, $00 ;+
- ScreenOff:
- ldh a, [rSTAT]
- and 3
- cp 1
- jr nz, ScreenOff
- di
- xor a
- ldh [rLCDC], a
- ret
- LoadColor:
- ld a, l
- ldh [rBCPD], a
- ldh [rOCPD], a
- ld a, h
- ldh [rBCPD], a
- ldh [rOCPD], a
- ret
- PrintByte:
- ; in: a: byte, de: destination
- push af
- swap a
- and $f
- ld [de], a
- inc de
- pop af
- and $f
- ld [de], a
- inc de
- ret
- rept $100 - @
- db $ff
- endr
- ; entry point
- dec a
- jr nz, LoadPalettes
- rst 0
- rept $134 - @
- nop
- endr
- ; header data - encoded here so it's consistent across builds
- db "SP TEST ROM" ;title
- db "TEST" ;manufacturer
- db $80 ;CGB + DMG
- db "XX" ;new licensee
- db 0 ;no SGB
- db 0 ;cart type: ROM only
- db 0 ;32K ROM
- db 0 ;no RAM
- db 1 ;destination: not Japan
- db $33 ;old licensee (must be $33)
- db 1 ;ROM version
- db 0 ;checksum (must fix)
- dw 0 ;global checksum (must fix)
- LoadPalettes:
- call ScreenOff
- ld a, 1
- ldh [rVBK], a
- ld hl, $9c00
- xor a
- .loop
- ld [hli], a
- bit 5, h
- jr z, .loop
- ldh [rVBK], a
- ld a, $80
- ldh [rBCPS], a
- ldh [rOCPS], a
- ld hl, $7fff
- call LoadColor
- ld hl, $56b5
- call LoadColor
- ld hl, $294a
- call LoadColor
- ld hl, 0
- call LoadColor
- jp MainContinue
- GeneratedCode:
- ; in: hl: target sp, a: target addend
- ; out: hl: result, a: flags
- cp a ;reset flags to a known state
- ldh [$ff80 + (.add_instruction - GeneratedCode) + 1], a
- ld [$ffe0], sp
- ld sp, hl
- .add_instruction
- add sp, 0
- ld [$ffe2], sp
- ld sp, $ffe6
- push af
- ld hl, $ffe0
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld sp, hl
- ld hl, $ffe2
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ldh a, [$ffe4]
- ret
- .end
- Calculate:
- ld bc, ((GeneratedCode.end - GeneratedCode) << 8) + $80
- ld hl, GeneratedCode
- .copy_loop
- ld a, [hli]
- ldh [c], a
- inc c
- dec b
- jr nz, .copy_loop
- ld bc, Addends
- ld de, $9c00
- .loop
- ld a, [bc]
- inc bc
- ld h, a
- call PrintByte
- ld a, [bc]
- inc bc
- ld l, a
- call PrintByte
- inc de
- ld a, [bc]
- inc bc
- push bc
- ld c, a
- add a, a
- sbc a
- add a, $13
- ld [de], a
- inc de
- inc de
- ld a, c
- bit 7, c
- jr z, .not_negative
- cpl
- inc a
- .not_negative
- call PrintByte
- inc de
- ld a, $11
- ld [de], a
- inc de
- inc de
- ld a, c
- call $ff80
- ld c, a
- ld a, h
- call PrintByte
- ld a, l
- call PrintByte
- inc de
- inc de
- ld a, c
- add a, a
- sbc a
- add a, a
- add a, $12
- ld [de], a
- inc de
- swap c
- srl c
- sbc a
- and $c - $12
- add a, $12
- ld [de], a
- set 2, e
- set 3, e
- inc de
- pop bc
- ld a, c
- cp LOW(Addends.end)
- jr nz, .loop
- ret
- addends: MACRO
- db HIGH(\1)
- db LOW(\1)
- db \2
- ENDM
- Addends:
- addends $0000, +$00
- addends $ffff, +$01
- addends $ff80, -$80
- addends $0080, -$80
- addends $0002, -$02
- addends $ffcf, +$30
- addends $ffbd, +$53
- addends $ff96, +$76
- addends $000e, -$0e
- addends $000e, +$0e
- addends $00ff, +$01
- addends $0042, +$42
- addends $fea2, +$5e
- .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement