git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

commit 95e576c80777d3d481c59f3c8166a4f27813a31a
parent c62e9f89c0ba5d622c23577143f689d2e9937c68
Author: Toxa <untoxa@mail.ru>
Date:   Mon, 27 Feb 2023 21:18:58 +0300

GB: optimize the mode switching routines

Diffstat:
Mgbdk-lib/include/gb/gb.h4++--
Mgbdk-lib/libc/targets/sm83/ap/global.s2--
Mgbdk-lib/libc/targets/sm83/duck/global.s2--
Mgbdk-lib/libc/targets/sm83/gb/global.s2--
Mgbdk-lib/libc/targets/sm83/mode.s23+++++++----------------
5 files changed, 9 insertions(+), 24 deletions(-)

diff --git a/gbdk-lib/include/gb/gb.h b/gbdk-lib/include/gb/gb.h @@ -369,13 +369,13 @@ inline uint8_t cancel_pending_interrupts(void) { @see M_DRAWING, M_TEXT_OUT, M_TEXT_INOUT, M_NO_SCROLL, M_NO_INTERP */ -void mode(uint8_t m) OLDCALL; +void mode(uint8_t m); /** Returns the current mode @see M_DRAWING, M_TEXT_OUT, M_TEXT_INOUT, M_NO_SCROLL, M_NO_INTERP */ -uint8_t get_mode(void) OLDCALL PRESERVES_REGS(b, c); +uint8_t get_mode(void) PRESERVES_REGS(b, c, d, e, h, l); /** GB CPU type diff --git a/gbdk-lib/libc/targets/sm83/ap/global.s b/gbdk-lib/libc/targets/sm83/ap/global.s @@ -453,8 +453,6 @@ .globl __is_GBA ;; Global routines -; .globl .set_mode ;; don't link mode.o by default - .globl .reset .globl .display_off diff --git a/gbdk-lib/libc/targets/sm83/duck/global.s b/gbdk-lib/libc/targets/sm83/duck/global.s @@ -453,8 +453,6 @@ .globl __is_GBA ;; Global routines -; .globl .set_mode ;; don't link mode.o by default - .globl .reset .globl .display_off diff --git a/gbdk-lib/libc/targets/sm83/gb/global.s b/gbdk-lib/libc/targets/sm83/gb/global.s @@ -453,8 +453,6 @@ .globl __is_GBA ;; Global routines -; .globl .set_mode ;; don't link mode.o by default - .globl .reset .globl .display_off diff --git a/gbdk-lib/libc/targets/sm83/mode.s b/gbdk-lib/libc/targets/sm83/mode.s @@ -3,28 +3,19 @@ .title "screen modes" .module Modes - ;; BANKED: checked .area _HOME _mode:: - LDA HL,2(SP) ; Skip return address - LD L,(HL) - LD H,#0x00 - -.set_mode:: - LD A,L - LD (.mode),A - - ;; AND to get rid of the extra flags + LD (.mode), A AND #0x03 + ADD A + ADD A LD L,A - LD BC,#.MODE_TABLE - SLA L ; Multiply mode by 4 - SLA L - ADD HL,BC + LD H, #0 + LD BC, #.MODE_TABLE + ADD HL, BC JP (HL) ; Jump to initialization routine _get_mode:: - LD HL,#.mode - LD E,(HL) + LD A, (.mode) RET

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.