diff options
-rw-r--r-- | definitions.gbasm | 13 | ||||
-rw-r--r-- | entity/init.gbasm | 8 | ||||
-rw-r--r-- | init.gbasm | 26 | ||||
-rw-r--r-- | main.gbasm | 138 | ||||
-rw-r--r-- | map/objects.gbasm | 3 | ||||
-rw-r--r-- | tiles.gbasm | 7 |
6 files changed, 136 insertions, 59 deletions
diff --git a/definitions.gbasm b/definitions.gbasm index deb9789..a4216a1 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -1,11 +1,10 @@ .DEFINE reg_joypad ($00) +.DEFINE reg_interrupt_flags ($0f) .DEFINE reg_lcd_controller ($40) .DEFINE reg_lcd_status ($41) .DEFINE reg_lyc ($45) .DEFINE reg_viewport_y ($42) .DEFINE reg_viewport_x ($43) -.DEFINE reg_window_pos_y ($4a) -.DEFINE reg_window_pos_x ($4b) .DEFINE reg_bg_palette ($47) .DEFINE reg_obj0_palette ($48) .DEFINE reg_interrupt_enable ($ff) @@ -50,6 +49,9 @@ .DEFINE mem_prepared_viewport_x ($c011) .DEFINE mem_prepared_viewport_y ($c012) +.DEFINE mem_display_flag ($c013) +; bit 0: if dialogue box is displayed + .DEFINE next_free_head_higher_bytes $c7 .DEFINE mem_next_free_head_lower_bytes ($c6ff) @@ -107,6 +109,13 @@ .DEFINE enum_direction_up $03 .DEFINE enum_direction_down $04 +.DEFINE palette_normal $e4 +.DEFINE palette_bold_font $f4 +.DEFINE palette_thin_font $c4 + +.DEFINE lcdc_window_enabled $8d +.DEFINE lcdc_window_disabled $87 + ; HIGH_RAM: ; ; 80-85 ; Free to use as temporary variables diff --git a/entity/init.gbasm b/entity/init.gbasm index 188a4b9..5404ead 100644 --- a/entity/init.gbasm +++ b/entity/init.gbasm @@ -47,6 +47,14 @@ Initialize_Entities: LD L, A CALL =Initialize_Fox + CALL =Initialize_Fox + CALL =Initialize_Fox + CALL =Initialize_Fox + CALL =Initialize_Fox + CALL =Initialize_Fox + CALL =Initialize_Fox + CALL =Initialize_Fox + CALL =Initialize_Fox Fix_Bunny_screen: LD A, $mem_bunny_x @@ -59,31 +59,21 @@ Empty_VRAM: ; (Clear screen) LD A, $d3 ; $e4 LD $reg_obj0_palette, A - ; Interrupts - LD A, $03 - LD $reg_interrupt_enable, A - - ; LYC - LD A, $09 - LD $reg_lyc, A - - ; Set STAT interrupt to LYC = LY - LD A, $40 - LD $reg_lcd_status, A - - ; Window position - LD A, $ff - LD $reg_window_pos_x, A - Initialize_Window_GUI: LD HL, $9c20 - Initialize_Window_GUI.loop: + Initialize_Window_GUI.top_bar_loop: LD A, $10 LD (HL+), A LD A, L CP $40 - JR NZ, =Initialize_Window_GUI.loop + LD $reg_lcd_status, A + JR NZ, =Initialize_Window_GUI.top_bar_loop + + LD HL, $9da0 + LD BC, $00a0 + LD DE, =Dialogue_Box_Tilemap_data + CALL =memcpy Copy_OAM_DMA_Transfer_Routine_To_HRAM: LD HL, $OAM_DMA_Transfer_routine @@ -1,6 +1,74 @@ .INCLUDE "definitions.gbasm" .INCLUDE "init.gbasm" +.MACRODEF HBLANK_WAIT + LD A, $reg_lcd_controller + BIT 7, A + JR Z, =$HBlank_Wait.End + $HBlank_Wait.loop: + LD A, $reg_lcd_status + AND $03 + CP $00 + JR NZ, =$HBlank_Wait.loop + $HBlank_Wait.End: +.END + +.MACRODEF ENABLE_WINDOW + .HBLANK_WAIT + XOR A + LD $reg_viewport_x, A + LD $reg_viewport_y, A + + LD A, $palette_bold_font + LD $reg_bg_palette, A + + LD A, $lcdc_window_enabled + LD $reg_lcd_controller, A +.END + +.MACRODEF DISABLE_WINDOW + PUSH BC + LD A, $mem_prepared_viewport_x + LD B, A + LD A, $mem_prepared_viewport_y + LD C, A + .HBLANK_WAIT + LD A, B + LD $reg_viewport_x, A + LD A, C + LD $reg_viewport_y, A + LD A, $palette_normal + LD $reg_bg_palette, A + LD A, $lcdc_window_disabled + LD $reg_lcd_controller, A + POP BC +.END + +.MACRODEF ENABLE_VBLANK_INTERRUPTS + LD A, $03 + LD $reg_interrupt_enable, A +.END + +.MACRODEF RESET_STAT_INTERRUPT + LD A, $reg_interrupt_flags + RES 1, A + LD $reg_interrupt_flags, A +.END + +.MACRODEF ENABLE_LYC_INTERRUPT + .RESET_STAT_INTERRUPT + LD A, $02 + LD $reg_interrupt_enable, A + LD A, $40 + LD $reg_lcd_status, A +.END + +.MACRODEF DISABLE_LYC_INTERRUPT + LD A, $reg_interrupt_enable + RES 1, A + LD $reg_interrupt_enable, A +.END + Entrypoint: CALL =Initialize_RNG New_Dungeon: @@ -12,27 +80,15 @@ New_Dungeon: CALL =Load_Map CALL =Load_Objects - ; LCDC - LD A, $87 - LD $reg_lcd_controller, A - + .ENABLE_VBLANK_INTERRUPTS EI Wait_for_VRAM.loop: HALT + EI JP =Wait_for_VRAM.loop VBLANK_Entrypoint: - ; Window enable - LD A, $reg_lcd_controller - OR $60 - AND $fd - LD $reg_lcd_controller, A - - LD A, $00 - LD $reg_viewport_y, A - LD $reg_viewport_x, A - - LD HL, $9c01 + LD HL, $9c00 LD A, $mem_bunny_health CALL =Print_8bit @@ -43,31 +99,12 @@ VBLANK_Entrypoint: CALL =Display_Object CALL $OAM_DMA_Transfer_routine - ; BOLD FONT - LD A, $f4 - ; SLIM FONT - ; LD A, $c4 - LD $reg_bg_palette, A - - LD A, $mem_prepared_viewport_x - LD B, A - LD A, $mem_prepared_viewport_y - LD C, A - LD A, $reg_lcd_controller - AND $9f - OR $02 + .ENABLE_WINDOW + ; LYC + LD A, $09 + LD $reg_lyc, A + .ENABLE_LYC_INTERRUPT EI - HALT - RETI - -STAT_Entrypoint: - LD $reg_lcd_controller, A - LD A, B - LD $reg_viewport_x, A - LD A, C - LD $reg_viewport_y, A - LD A, $e4 - LD $reg_bg_palette, A CALL =Object_Interactions_Check @@ -77,8 +114,31 @@ STAT_Entrypoint: CALL =Prepare_Scrolling_Map CALL =Display_Entities + .ENABLE_VBLANK_INTERRUPTS + RET + +STAT_Entrypoint: + PUSH AF + LD A, $reg_lyc + CP $09 + JR Z, =STAT_Entrypoint.End_Top_Bar + LD A, $mem_display_flag + BIT 0, A + JR Z, =STAT_Entrypoint.skip_dialogue + .ENABLE_WINDOW + STAT_Entrypoint.skip_dialogue: + .DISABLE_LYC_INTERRUPT + POP AF RET + STAT_Entrypoint.End_Top_Bar: + .DISABLE_WINDOW + LD A, $67 + LD $reg_lyc, A + .RESET_STAT_INTERRUPT + POP AF + RETI + .INCLUDE "tiles.gbasm" .INCLUDE "rng.gbasm" .INCLUDE "utils.gbasm" diff --git a/map/objects.gbasm b/map/objects.gbasm index 2e36b12..f3ef48f 100644 --- a/map/objects.gbasm +++ b/map/objects.gbasm @@ -169,6 +169,9 @@ Load_Objects: RET Object_Interactions_Check: + LD A, $mem_moving_animation_step + CP $0d + JR NZ, =Object_Interactions_Check.End LD A, $mem_map_loading_flags BIT 1, A JR Z, =Object_Interactions_Check.End diff --git a/tiles.gbasm b/tiles.gbasm index 9cfce67..dcef5a9 100644 --- a/tiles.gbasm +++ b/tiles.gbasm @@ -18,3 +18,10 @@ Load_Tile: LD BC, $0490 CALL =memcpy RET + +Dialogue_Box_Tilemap_data: + .DB 0x11, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .DB 0x12, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |