.DB $01, $02, $04, $08, $10, $20, $40, $80 .PADTO 0x0040 VBlank: JP $mem_vblank_jump_instruction .PADTO 0x0048 STAT: JP $mem_stat_jump_instruction .PADTO 0x0100 Start: JP =Initialize_RAM .PADTO 0x0104 Header: .Nintendo_Logo: ; The Nintendo logo must be stored in bytes 0x104-133 .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 .PADTO 0x0134 .Title: .DB $50, $79, $6f, $6e, $20, $41, $64, $76 .PADTO 0x13f .Manufacturer_code: .PADTO 0x143 .CGB_Flag: .DB $69 .Licensee_code_new: .DB $00, $00 .SGB_Flag: .DB $00 .MBC: .DB $01 .ROM_size: .DB $00 ; Will be set after assembly by build scripts .RAM_size: .DB $00 ; The .sav cartridge kind of ram .Destination_code: .DB $01 ; Overseas .Licensee_code_old: .DB $00 .Version_number: .DB $42 .Header_checksum: .DB $00 ; Will be set after assembly by build scripts .Global_checksum: .DB $00, $00 ; Will be set after assembly by build scripts Initialize_RAM: LD SP, $fffe ; LCDC XOR A LD $reg_lcd_controller, A ; Disable Interrupts LD A, $00 LD $reg_interrupt_enable, A Empty_WRAM: LD HL, $C000 .loop: XOR A LD (HL+), A LD A, $D0 CP H JR NZ, =.loop CALL =VBlank_Wait Empty_VRAM: ; (Clear screen) LD HL, $VRAM_start ; We set the HL register to the start of VRAM Empty_VRAM.loop: XOR A LD (HL+), A ; We set the memory pointed to by HL to 0 and increase HL LD A, $a0 CP H ; Until h has reached $a0 ($a0000 is the end of VRAM) JR NZ, =Empty_VRAM.loop ; BG Palette LD A, $palette_normal LD $reg_bg_palette, A LD $mem_prepared_color_palette, A ; OBJ0 Palette LD A, $obj_palette_normal LD $reg_obj0_palette, A ; OBJ1 Palette (frozen, shadow) LD A, $obj_palette_frozen LD $reg_obj1_palette, A ; Interrupt jmp instruction LD A, $c3 ; Unconditional imm16 jump LD ($mem_vblank_jump_instruction), A LD ($mem_stat_jump_instruction), A Initialize_Window_GUI: LD A, $48 LD $reg_window_y, A LD A, $6f LD $reg_window_x, A LD HL, $9d80 .top_bar_loop: LD A, $10 LD (HL+), A LD A, L CP $94 LD $reg_lcd_status, A JR NZ, =.top_bar_loop LD HL, $9c80 LD BC, $00a0 LD DE, =Dialogue_Box_Tilemap_data CALL =memcpy LD HL, $9c00 LD BC, $0080 LD DE, =Cost_Window_Tilemap_data CALL =memcpy Copy_OAM_DMA_Transfer_Routine_To_HRAM: LD HL, $OAM_DMA_Transfer_routine LD DE, =OAM_DMA_Transfer_routine_src LD BC, $000a CALL =memcpy JP =Entrypoint OAM_DMA_Transfer_routine_src: LD A, high($mem_oam_buffer) LD ($46), A LD A, $28 ; delay for a total of 4×40 = 160 M-cycles .wait: DEC A ; 1 M-cycle JR NZ, =.wait ; 3 M-cycles RET .end: