From 99d2ee2bdc0c3ed7206a91bbeee61b32c83584ca Mon Sep 17 00:00:00 2001 From: yenatch Date: Tue, 20 Aug 2013 03:26:37 -0400 Subject: [PATCH] split out program init --- engine/init.asm | 225 +++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 226 +----------------------------------------------- 2 files changed, 226 insertions(+), 225 deletions(-) create mode 100644 engine/init.asm diff --git a/engine/init.asm b/engine/init.asm new file mode 100644 index 000000000..d7594ae1d --- /dev/null +++ b/engine/init.asm @@ -0,0 +1,225 @@ +Reset: ; 150 + di + call CleanSoundRestart + xor a + ld [$ffde], a + call ClearPalettes + xor a + ld [rIF], a + ld a, 1 ; VBlank int + ld [rIE], a + ei + + ld hl, $cfbe + set 7, [hl] + + ld c, 32 + call DelayFrames + + jr Init +; 16e + + +_Start: ; 16e + cp $11 + jr z, .asm_175 + xor a + jr .asm_177 + +.asm_175 + ld a, $1 + +.asm_177 + ld [hCGB], a + ld a, $1 + ld [$ffea], 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, $c000 + ld bc, $d000 - $c000 +.asm_1b1 + ld [hl], 0 + inc hl + dec bc + ld a, b + or c + jr nz, .asm_1b1 + + ld sp, Stack - 1 + +; Clear HRAM + ld a, [hCGB] + push af + ld a, [$ffea] + push af + xor a + ld hl, $ff80 + ld bc, $ffff - $ff80 + call ByteFill + pop af + ld [$ffea], 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 [$ffde], 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, $ff + ld [$ffcb], a + + callba Function9890 + + ld a, $9c + ld [$ffd7], a + + xor a + ld [hBGMapAddress], a + + callba StartClock + + xor a + ld [MBC3LatchClock], a + ld [MBC3SRamEnable], a + + ld a, [hCGB] + and a + jr z, .asm_22b + call Function2ff7 +.asm_22b + + xor a + ld [rIF], a + ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts + ld [rIE], a + ei + + call DelayFrame + + ld a, $30 + call Predef + + call CleanSoundRestart + xor a + ld [CurMusic], 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 + diff --git a/main.asm b/main.asm index 97fe6ae30..0ea083173 100644 --- a/main.asm +++ b/main.asm @@ -56,231 +56,7 @@ Start: SECTION "start",HOME[$150] -Reset: ; 150 - di - call CleanSoundRestart - xor a - ld [$ffde], a - call ClearPalettes - xor a - ld [rIF], a - ld a, 1 ; VBlank int - ld [rIE], a - ei - - ld hl, $cfbe - set 7, [hl] - - ld c, 32 - call DelayFrames - - jr Init -; 16e - - -_Start: ; 16e - cp $11 - jr z, .asm_175 - xor a - jr .asm_177 - -.asm_175 - ld a, $1 - -.asm_177 - ld [hCGB], a - ld a, $1 - ld [$ffea], 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, $c000 - ld bc, $d000 - $c000 -.asm_1b1 - ld [hl], 0 - inc hl - dec bc - ld a, b - or c - jr nz, .asm_1b1 - - ld sp, Stack - 1 - -; Clear HRAM - ld a, [hCGB] - push af - ld a, [$ffea] - push af - xor a - ld hl, $ff80 - ld bc, $ffff - $ff80 - call ByteFill - pop af - ld [$ffea], 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 [$ffde], 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, $ff - ld [$ffcb], a - - callba Function9890 - - ld a, $9c - ld [$ffd7], a - - xor a - ld [hBGMapAddress], a - - callba StartClock - - xor a - ld [MBC3LatchClock], a - ld [MBC3SRamEnable], a - - ld a, [hCGB] - and a - jr z, .asm_22b - call Function2ff7 -.asm_22b - - xor a - ld [rIF], a - ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts - ld [rIE], a - ei - - call DelayFrame - - ld a, $30 - call Predef - - call CleanSoundRestart - xor a - ld [CurMusic], 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 - +INCLUDE "engine/init.asm" VBlank: ; 283 INCLUDE "engine/vblank.asm"