summaryrefslogtreecommitdiff
path: root/home/init.asm
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
commit2bf93c5905319e9181f87b3f83cd3bce7b9feeca (patch)
tree3ebf17c8879e5d6243d81aac8f1c36eb226fac26 /home/init.asm
parented3f9395f6d45f6554ed9d9c49c41ea86a8e2447 (diff)
Import stuff from pokecrystal; diff gold and silver
Diffstat (limited to 'home/init.asm')
-rw-r--r--home/init.asm222
1 files changed, 222 insertions, 0 deletions
diff --git a/home/init.asm b/home/init.asm
new file mode 100644
index 00000000..dacc5ff7
--- /dev/null
+++ b/home/init.asm
@@ -0,0 +1,222 @@
+Reset:: ; 150
+ di
+ call MapSetup_Sound_Off
+ xor a
+ ld [hMapAnims], a
+ call ClearPalettes
+ xor a
+ ld [rIF], a
+ ld a, 1 ; VBlank int
+ ld [rIE], a
+ ei
+
+ ld hl, wcfbe
+ set 7, [hl]
+
+ ld c, 32
+ call DelayFrames
+
+ jr Init
+; 16e
+
+
+_Start:: ; 16e
+ cp $11
+ jr z, .cgb
+ xor a
+ jr .load
+
+.cgb
+ ld a, $1
+
+.load
+ ld [hCGB], a
+ ld a, $1
+ ld [hFFEA], a
+; 17d
+
+
+Init:: ; 17d
+
+ 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
+ ld hl, wc000
+ ld bc, wd000 - wc000
+.ByteFill
+ ld [hl], 0
+ inc hl
+ dec bc
+ ld a, b
+ or c
+ jr nz, .ByteFill
+
+ ld sp, Stack
+
+; Clear HRAM
+ ld a, [hCGB]
+ push af
+ ld a, [hFFEA]
+ push af
+ xor a
+ ld hl, HRAM_START
+ ld bc, HRAM_END - HRAM_START
+ call ByteFill
+ pop af
+ ld [hFFEA], a
+ pop af
+ ld [hCGB], a
+
+ call ClearWRAM
+ ld a, 1
+ ld [rSVBK], a
+ call ClearVRAM
+ call ClearSprites
+ call Function270
+
+
+ ld a, BANK(LoadPushOAM)
+ rst Bankswitch
+
+ call LoadPushOAM
+
+ xor a
+ ld [hMapAnims], a
+ 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
+
+ ld a, -1
+ ld [hLinkPlayerNumber], a
+
+ callba Function9890
+
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ xor a ; VBGMap1 % $100
+ ld [hBGMapAddress], a
+
+ callba StartClock
+
+ xor a
+ ld [MBC3LatchClock], a
+ ld [MBC3SRamEnable], a
+
+ ld a, [hCGB]
+ and a
+ jr z, .asm_22b
+ call NormalSpeed
+.asm_22b
+
+ xor a
+ ld [rIF], a
+ ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts
+ ld [rIE], a
+ ei
+
+ call DelayFrame
+
+ predef Function9853
+
+ call MapSetup_Sound_Off
+ xor a
+ ld [wMapMusic], a
+ jp GameInit
+; 245
+
+
+ClearVRAM:: ; 245
+; 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
+; Wipe swappable WRAM banks (1-7)
+
+ ld a, 1
+.asm_25c
+ push af
+ ld [rSVBK], a
+ xor a
+ ld hl, $d000
+ ld bc, $1000
+ call ByteFill
+ pop af
+ inc a
+ cp 8
+ jr nc, .asm_25c
+ ret
+; 270
+
+Function270:: ; 270
+ ld a, $0
+ call GetSRAMBank
+ ld hl, $a000
+ ld bc, $0020
+ xor a
+ call ByteFill
+ call CloseSRAM
+ ret
+; 283