Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;****************************************************************************************************************************************************
- ;* Includes
- ;****************************************************************************************************************************************************
- INCLUDE "tileData/alice.inc"
- ;****************************************************************************************************************************************************
- ;* user data [constants]
- ;****************************************************************************************************************************************************
- ;****************************************************************************************************************************************************
- ;* equates
- ;****************************************************************************************************************************************************
- ;****************************************************************************************************************************************************
- ;* macros
- ;****************************************************************************************************************************************************
- ;****************************************************************************************************************************************************
- ;* cartridge header
- ;****************************************************************************************************************************************************
- SECTION "Org $00",ROM0[$00]
- RST_00:
- jp $100
- SECTION "Org $08",ROM0[$08]
- RST_08:
- jp $100
- SECTION "Org $10",ROM0[$10]
- RST_10:
- jp $100
- SECTION "Org $18",ROM0[$18]
- RST_18:
- jp $100
- SECTION "Org $20",ROM0[$20]
- RST_20:
- jp $100
- SECTION "Org $28",ROM0[$28]
- RST_28:
- jp $100
- SECTION "Org $30",ROM0[$30]
- RST_30:
- jp $100
- SECTION "Org $38",ROM0[$38]
- RST_38:
- jp $100
- SECTION "V-Blank IRQ Vector",ROM0[$40]
- VBL_VECT:
- jp VBlank
- SECTION "LCD IRQ Vector",ROM0[$48]
- LCD_VECT:
- reti
- SECTION "Timer IRQ Vector",ROM0[$50]
- TIMER_VECT:
- reti
- SECTION "Serial IRQ Vector",ROM0[$58]
- SERIAL_VECT:
- reti
- SECTION "Joypad IRQ Vector",ROM0[$60]
- JOYPAD_VECT:
- reti
- SECTION "Start",ROM0[$100]
- nop
- jp Start
- ; $0104-$0133 [Nintendo logo - do _not_ modify the logo data here or the GB will not run the program]
- DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D
- DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99
- DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E
- ; $0134-$013E [Game title - up to 11 upper case ASCII characters, pad with $00]
- DB "ALICE IMAGE"
- ;0123456789A
- ; $013F-$0142 [Product code - 4 ASCII characters, assigned by Nintendo, just leave blank]
- DB " "
- ;0123
- ; $0143 [Color GameBoy compatibility code]
- DB $00 ; $00 - DMG
- ; $80 - DMG/GBC
- ; $C0 - GBC Only cartridge
- ; $0144 [High-nibble of license code - normally $00 if $014B != $33]
- DB $00
- ; $0145 [Low-nibble of license code - normally $00 if $014B != $33]
- DB $00
- ; $0146 [GameBoy/Super GameBoy indicator]
- DB $00 ; $00 - GameBoy
- ; $0147 [Cartridge type - all Color GameBoy cartridges are at least $19]
- DB $00 ; $00 - ROM Only
- ; $0148 [ROM size]
- DB $00 ; $00 - 256Kbit = 32Kbyte = 2 banks
- ; $0149 [RAM size]
- DB $00 ; $00 - None
- ; $014A [Destination code]
- DB $01 ; $01 - All others
- ; $00 - Japan
- ; $014B [Licensee code - this _must_ be $33]
- DB $33 ; $33 - Check $0144/$0145 for Licensee code.
- ; $014C [Mask ROM version - handled by RGBFIX]
- DB $00
- ; $014D [Complement check - handled by RGBFIX]
- DB $00
- ; $014E-$014F [Cartridge checksum - handled by RGBFIX]
- DW $00
- ;****************************************************************************************************************************************************
- ;* Program Start
- ;****************************************************************************************************************************************************
- SECTION "Program Start",ROM0[$0150]
- Start:
- ld sp,$FFFE ;set the stack pointer to $FFFE
- call clearWRAM ;Clear the Work RAM
- ei
- ld a, $01
- ld [$FFFF], a
- Loop:
- .waitVBlankDone:
- ld a, [$C002]
- cp a, $01
- jr nz, .waitVBlankDone
- ld a, $00
- ld [$C002], a
- jp Loop
- ;***************************************************************
- ;* Subroutines
- ;***************************************************************
- SECTION "Support Routines",ROM0
- clearWRAM:
- ld hl, $C000
- ld bc, $1FFF
- .clearWRAMLoop:
- ld a, $00
- ld [hl], a
- inc hl
- dec bc
- ld a, b
- or c
- jr nz, .clearWRAMLoop
- ret
- clearOAM:
- ld hl, $FE00
- ld bc, 40*4
- .clearOAMLoop:
- ld a, $00
- ld [hl], a
- inc hl
- dec bc
- ld a, b
- or c
- jr nz, .clearOAMLoop
- ret
- clearMap:
- ld hl, $9800
- ld de, $9C00
- ld bc, 32*32
- .clearMapLoop:
- ld a, $00
- ld [hl], a
- ld [de], a
- inc hl
- inc de
- dec bc
- ld a, b
- or c
- jr nz, .clearMapLoop
- ret
- loadTiles:
- .loadTilesLoop:
- ld a, [hl]
- ld [de], a
- inc hl
- inc de
- dec bc
- ld a, b
- or c
- jr nz, .loadTilesLoop
- ret
- placeImage:
- ld a, $00
- ld [$9800], a
- ld a, $01
- ld [$9801], a
- ld a, $02
- ld [$9802], a
- ld a, $03
- ld [$9803], a
- ret
- VBlank:
- ld a, [$C001]
- cp a, $01
- jr z, .skipInit
- .waitRealVBlank:
- ld a,[$FF44] ;get current scanline
- cp $91 ;Are we in v-blank yet?
- jr nz, .waitRealVBlank ;if A != 0x91 then loop
- ld a, $00 ;Load 0x00 to A
- ld [$FF40],a ;turn off LCD
- call clearOAM ;Clear OAM
- call clearMap ;Clear BG
- ld hl, alice3_tile_data ;Load a pointer to the tiles into HL
- ld de, $8000 ;Load the destination in VRAM to DE
- ld bc, alice3_tile_data_size;Load the number of bytes to load into BC
- call loadTiles ;Load the tiles
- call placeImage
- ld a, %11100100 ;Load 0xE4 to A
- ld [$FF47], a ;Load A into 0xFF47 (DMG BG Shades)
- ld [$FF48], a ;Load A into 0xFF48 (DMG Sprite Shades)
- ld a, $D2
- ld [$FF40],a ;Turn on the LCD, BG, etc
- ld a, $01
- ld [$C001], a
- .skipInit:
- ld a, $01
- ld [$C002], a
- reti
Advertisement
Add Comment
Please, Sign In to add comment