pokecrystal/home/init.asm

226 lines
2.6 KiB
NASM
Raw Normal View History

Reset:: ; 150
2013-08-20 07:26:37 +00:00
di
2015-11-12 04:38:57 +00:00
call MapSetup_Sound_Off
2013-08-20 07:26:37 +00:00
xor a
2015-11-05 19:06:03 +00:00
ld [hMapAnims], a
2013-08-20 07:26:37 +00:00
call ClearPalettes
xor a
ld [rIF], a
ld a, 1 ; VBlank int
ld [rIE], a
ei
2015-02-10 23:14:41 +00:00
ld hl, wcfbe
2013-08-20 07:26:37 +00:00
set 7, [hl]
ld c, 32
call DelayFrames
jr Init
; 16e
_Start:: ; 16e
2013-08-20 07:26:37 +00:00
cp $11
jr z, .cgb
2013-08-20 07:26:37 +00:00
xor a
jr .load
2013-08-20 07:26:37 +00:00
.cgb
2013-08-20 07:26:37 +00:00
ld a, $1
.load
2013-08-20 07:26:37 +00:00
ld [hCGB], a
ld a, $1
ld [hFFEA], a
2013-08-20 07:26:37 +00:00
; 17d
Init:: ; 17d
2013-08-20 07:26:37 +00:00
di
xor a
ld [rIF], a
ld [rIE], a
ld [rRP], a
ld [rSCX], a
ld [rSCY], a
ld [rSB], a
ld [rSC], a
ld [rWX], a
ld [rWY], a
ld [rBGP], a
ld [rOBP0], a
ld [rOBP1], a
ld [rTMA], a
ld [rTAC], a
ld [$d000], a
ld a, %100 ; Start timer at 4096Hz
ld [rTAC], a
.wait
ld a, [rLY]
cp 145
jr nz, .wait
xor a
ld [rLCDC], a
; Clear WRAM bank 0
2017-12-09 20:14:51 +00:00
ld hl, wRAM0Start
ld bc, wRAM1Start - wRAM0Start
.ByteFill:
2013-08-20 07:26:37 +00:00
ld [hl], 0
inc hl
dec bc
ld a, b
or c
jr nz, .ByteFill
2013-08-20 07:26:37 +00:00
ld sp, Stack
2013-08-20 07:26:37 +00:00
; Clear HRAM
ld a, [hCGB]
push af
ld a, [hFFEA]
2013-08-20 07:26:37 +00:00
push af
xor a
ld hl, HRAM_START
ld bc, HRAM_END - HRAM_START
2013-08-20 07:26:37 +00:00
call ByteFill
pop af
ld [hFFEA], a
2013-08-20 07:26:37 +00:00
pop af
ld [hCGB], a
call ClearWRAM
ld a, 1
ld [rSVBK], a
call ClearVRAM
call ClearSprites
call ClearsScratch
2013-08-20 07:26:37 +00:00
ld a, BANK(LoadPushOAM)
rst Bankswitch
call LoadPushOAM
xor a
2015-11-05 19:06:03 +00:00
ld [hMapAnims], a
2013-08-20 07:26:37 +00:00
ld [hSCX], a
ld [hSCY], a
ld [rJOYP], a
ld a, $8 ; HBlank int enable
ld [rSTAT], a
ld a, $90
ld [hWY], a
ld [rWY], a
ld a, 7
ld [hWX], a
ld [rWX], a
ld a, %11100011
; LCD on
; Win tilemap 1
; Win on
; BG/Win tiledata 0
; BG Tilemap 0
; OBJ 8x8
; OBJ on
; BG on
ld [rLCDC], a
2015-10-19 20:49:29 +00:00
ld a, -1
2015-11-06 14:04:27 +00:00
ld [hLinkPlayerNumber], a
2013-08-20 07:26:37 +00:00
2017-12-24 17:47:30 +00:00
farcall InitCGBPals
2013-08-20 07:26:37 +00:00
2015-10-19 20:49:29 +00:00
ld a, VBGMap1 / $100
ld [hBGMapAddress + 1], a
xor a ; VBGMap1 % $100
2013-08-20 07:26:37 +00:00
ld [hBGMapAddress], a
2017-12-24 17:47:30 +00:00
farcall StartClock
2013-08-20 07:26:37 +00:00
xor a
ld [MBC3LatchClock], a
ld [MBC3SRamEnable], a
ld a, [hCGB]
and a
2016-05-05 19:07:37 +00:00
jr z, .no_double_speed
2013-09-08 07:12:48 +00:00
call NormalSpeed
2016-05-05 19:07:37 +00:00
.no_double_speed
2013-08-20 07:26:37 +00:00
xor a
ld [rIF], a
ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts
ld [rIE], a
ei
call DelayFrame
2016-05-05 19:07:37 +00:00
predef InitSGBBorder ; SGB init
2013-08-20 07:26:37 +00:00
2015-11-12 04:38:57 +00:00
call MapSetup_Sound_Off
2013-08-20 07:26:37 +00:00
xor a
2014-05-21 20:21:46 +00:00
ld [wMapMusic], a
2013-08-20 07:26:37 +00:00
jp GameInit
; 245
ClearVRAM:: ; 245
2013-08-20 07:26:37 +00:00
; Wipe VRAM banks 0 and 1
ld a, 1
ld [rVBK], a
call .clear
xor a
ld [rVBK], a
.clear
ld hl, VTiles0
ld bc, $2000
xor a
call ByteFill
ret
; 25a
ClearWRAM:: ; 25a
2013-08-20 07:26:37 +00:00
; Wipe swappable WRAM banks (1-7)
; Assumes CGB or AGB
2013-08-20 07:26:37 +00:00
ld a, 1
.bank_loop
2013-08-20 07:26:37 +00:00
push af
ld [rSVBK], a
xor a
ld hl, $d000
ld bc, $1000
call ByteFill
pop af
inc a
cp 8
2016-05-19 12:11:44 +00:00
jr nc, .bank_loop ; Should be jr c
2013-08-20 07:26:37 +00:00
ret
; 270
ClearsScratch:: ; 270
; Wipe the first 32 bytes of sScratch
ld a, BANK(sScratch)
2013-08-20 07:26:37 +00:00
call GetSRAMBank
ld hl, sScratch
ld bc, $20
2013-08-20 07:26:37 +00:00
xor a
call ByteFill
call CloseSRAM
ret
; 283