27 #define SYSTEM_60HZ 0x00
28 #define SYSTEM_50HZ 0x01
30 #if defined(__TARGET_ap)
31 #define ANALOGUEPOCKET
32 #elif defined(__TARGET_gb)
34 #elif defined(__TARGET_duck)
58 #define J_SELECT 0x40U
65 #define M_DRAWING 0x01U
66 #define M_TEXT_OUT 0x02U
67 #define M_TEXT_INOUT 0x03U
73 #define M_NO_SCROLL 0x04U
77 #define M_NO_INTERP 0x08U
88 #define S_PALETTE 0x10U
101 #define S_PRIORITY 0x80U
110 #define EMPTY_IFLAG 0x00U
116 #define VBL_IFLAG 0x01U
120 #define LCD_IFLAG 0x02U
124 #define TIM_IFLAG 0x04U
128 #define SIO_IFLAG 0x08U
132 #define JOY_IFLAG 0x10U
136 #define DMG_BLACK 0x03
137 #define DMG_DARK_GRAY 0x02
138 #define DMG_LITE_GRAY 0x01
139 #define DMG_WHITE 0x00
159 #define DMG_PALETTE(C0, C1, C2, C3) ((uint8_t)((((C3) & 0x03) << 6) | (((C2) & 0x03) << 4) | (((C1) & 0x03) << 2) | ((C0) & 0x03)))
164 #define SCREENWIDTH DEVICE_SCREEN_PX_WIDTH
167 #define SCREENHEIGHT DEVICE_SCREEN_PX_HEIGHT
170 #define MINWNDPOSX DEVICE_WINDOW_PX_OFFSET_X
173 #define MINWNDPOSY DEVICE_WINDOW_PX_OFFSET_Y
176 #define MAXWNDPOSX (DEVICE_WINDOW_PX_OFFSET_X + DEVICE_SCREEN_PX_WIDTH - 1)
179 #define MAXWNDPOSY (DEVICE_WINDOW_PX_OFFSET_Y + DEVICE_SCREEN_PX_HEIGHT - 1)
438 #define DMG_TYPE 0x01
441 #define MGB_TYPE 0xFF
444 #define CGB_TYPE 0x11
454 #define GBA_NOT_DETECTED 0x00
457 #define GBA_DETECTED 0x01
461 #define DEVICE_SUPPORTS_COLOR (_cpu == CGB_TYPE)
477 #define VBL_DONE _vbl_done
511 #define IO_IDLE 0x00U
513 #define IO_SENDING 0x01U
515 #define IO_RECEIVING 0x02U
517 #define IO_ERROR 0x04U
535 #define CURRENT_BANK _current_bank
547 #define BANK(VARNAME) ( (uint8_t) & __bank_ ## VARNAME )
562 #define BANKREF(VARNAME) void __func_ ## VARNAME(void) __banked __naked { \
564 .local b___func_ ## VARNAME \
565 ___bank_ ## VARNAME = b___func_ ## VARNAME \
566 .globl ___bank_ ## VARNAME \
579 #define BANKREF_EXTERN(VARNAME) extern const void __bank_ ## VARNAME;
596 #define SWITCH_ROM(b) (_current_bank = (b), rROMB0 = (b))
598 #if defined(__TARGET_duck)
600 #define SWITCH_RAM(b) (0)
615 #define SWITCH_RAM(b) (rRAMB = (b))
619 #define ENABLE_RAM (rRAMG = 0x0A)
623 #define DISABLE_RAM (rRAMG = 0x00)
630 #define SWITCH_ROM_MEGADUCK(b) SWITCH_ROM(b)
640 #define SWITCH_ROM_MBC1(b) SWITCH_ROM(b)
649 #define SWITCH_RAM_MBC1(b) SWITCH_RAM(b)
653 #define ENABLE_RAM_MBC1 ENABLE_RAM
657 #define DISABLE_RAM_MBC1 DISABLE_RAM
659 #define SWITCH_16_8_MODE_MBC1 (*(volatile uint8_t *)0x6000 = 0x00)
661 #define SWITCH_4_32_MODE_MBC1 (*(volatile uint8_t *)0x6000 = 0x01)
675 #define SWITCH_ROM_MBC5(b) (_current_bank = (b), rROMB1 = 0, rROMB0 = (b))
690 #define SWITCH_ROM_MBC5_8M(b) (rROMB1 = ((uint16_t)(b) >> 8), rROMB0 = (b))
697 #define SWITCH_RAM_MBC5(b) SWITCH_RAM(b)
701 #define ENABLE_RAM_MBC5 ENABLE_RAM
705 #define DISABLE_RAM_MBC5 DISABLE_RAM
888 #define DISPLAY_OFF \
893 #define HIDE_LEFT_COLUMN
897 #define SHOW_LEFT_COLUMN
901 #define SET_BORDER_COLOR(C)
925 LCDC_REG&=~LCDCF_BGON
937 LCDC_REG|=LCDCF_WINON
943 LCDC_REG&=~LCDCF_WINON
948 #define SHOW_SPRITES \
949 LCDC_REG|=LCDCF_OBJON
956 #define HIDE_SPRITES \
957 LCDC_REG&=~LCDCF_OBJON
962 #define SPRITES_8x16 \
963 LCDC_REG|=LCDCF_OBJ16
968 #define SPRITES_8x8 \
969 LCDC_REG&=~LCDCF_OBJ16
1000 #define COMPAT_PALETTE(C0,C1,C2,C3) ((uint8_t)(((C3) << 6) | ((C2) << 4) | ((C1) << 2) | (C0)))
1060 #define set_bkg_2bpp_data set_bkg_data
1158 #define set_tile_map set_bkg_tiles
1290 #define set_tile_submap set_bkg_submap
1410 #define set_tile_xy set_bkg_tile_xy
1428 #define set_attribute_xy set_bkg_attribute_xy
1774 #define set_sprite_2bpp_data set_sprite_data
1838 #define DISABLE_OAM_DMA \
1839 _shadow_OAM_base = 0
1843 #define DISABLE_VBL_TRANSFER DISABLE_OAM_DMA
1845 #define ENABLE_OAM_DMA \
1846 _shadow_OAM_base = (uint8_t)((uint16_t)&shadow_OAM >> 8)
1850 #define ENABLE_VBL_TRANSFER ENABLE_OAM_DMA
1854 #define MAX_HARDWARE_SPRITES 40
1858 #define HARDWARE_SPRITE_CAN_FLIP_X 1
1862 #define HARDWARE_SPRITE_CAN_FLIP_Y 1
1990 itm->
y+=
y, itm->
x+=
x;
2145 if (first_tile < 256) {
2222 #define fill_rect fill_bkg_rect
#define OLDCALL
Definition: types.h:21
#define NONBANKED
Definition: types.h:40
#define PRESERVES_REGS(...)
Definition: types.h:32
#define __REG
Definition: hardware.h:14
__REG WY_REG
Definition: hardware.h:321
__REG SCY_REG
Definition: hardware.h:305
__REG WX_REG
Definition: hardware.h:323
#define VBK_ATTRIBUTES
Definition: hardware.h:338
__REG IF_REG
Definition: hardware.h:104
__REG VBK_REG
Definition: hardware.h:332
#define VBK_TILES
Definition: hardware.h:336
__REG SCX_REG
Definition: hardware.h:307
void set_sprite_tile(uint8_t nb, uint8_t tile)
Definition: gb.h:1886
uint8_t d
Definition: gb.h:419
uint8_t c
Definition: gb.h:419
void set_bkg_attributes(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles)
Definition: gb.h:1236
void scroll_win(int8_t x, int8_t y)
Definition: gb.h:1752
void refresh_OAM(void) PRESERVES_REGS(b
void set_win_based_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w, uint8_t base_tile)
Definition: gb.h:1669
void set_bkg_submap_attributes(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w)
Definition: gb.h:1368
void set_1bpp_colors_ex(uint8_t fgcolor, uint8_t bgcolor, uint8_t mode) OLDCALL
void set_bkg_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) OLDCALL PRESERVES_REGS(b
void scroll_bkg(int8_t x, int8_t y)
Definition: gb.h:1474
uint16_t _current_1bpp_colors
void set_vram_byte(uint8_t *addr, uint8_t v) PRESERVES_REGS(b
void vmemcpy(uint8_t *dest, uint8_t *sour, uint16_t len)
uint8_t get_win_tile_xy(uint8_t x, uint8_t y) OLDCALL PRESERVES_REGS(b
volatile uint8_t _io_status
void remove_SIO(int_handler h)
volatile struct OAM_item_t shadow_OAM[]
void reset(void)
Definition: nes.h:534
uint8_t * set_bkg_attribute_xy(uint8_t x, uint8_t y, uint8_t a)
Definition: gb.h:1420
uint8_t get_system(void)
Definition: gb.h:426
uint8_t joypad(void) PRESERVES_REGS(b
void init_bkg(uint8_t c) OLDCALL PRESERVES_REGS(b
void b
Definition: gb.h:748
void wait_int_handler(void)
void nowait_int_handler(void)
uint8_t get_bkg_tile_xy(uint8_t x, uint8_t y) OLDCALL PRESERVES_REGS(b
void get_bkg_data(uint8_t first_tile, uint8_t nb_tiles, uint8_t *data) OLDCALL PRESERVES_REGS(b
void set_win_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) OLDCALL PRESERVES_REGS(b
void set_data(uint8_t *vram_addr, const uint8_t *data, uint16_t len)
void add_low_priority_TIM(int_handler h)
void set_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t *vram_addr, const uint8_t *tiles) OLDCALL
void remove_TIM(int_handler h)
void move_bkg(uint8_t x, uint8_t y)
Definition: gb.h:1460
void remove_JOY(int_handler h)
void remove_LCD(int_handler h)
void set_native_tile_data(uint16_t first_tile, uint8_t nb_tiles, const uint8_t *data)
Definition: gb.h:2144
uint8_t get_sprite_prop(uint8_t nb)
Definition: gb.h:1955
void scroll_sprite(uint8_t nb, int8_t x, int8_t y)
Definition: gb.h:1988
void set_bkg_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) OLDCALL PRESERVES_REGS(b
void set_bkg_1bpp_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) OLDCALL PRESERVES_REGS(b
void set_win_based_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles, uint8_t base_tile)
Definition: gb.h:1594
void fill_bkg_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t tile) OLDCALL PRESERVES_REGS(b
void get_data(uint8_t *data, uint8_t *vram_addr, uint16_t len)
volatile uint16_t sys_time
void delay(uint16_t d) PRESERVES_REGS(h
__REG _shadow_OAM_base
Definition: gb.h:1836
void SET_SHADOW_OAM_ADDRESS(void *address)
Definition: gb.h:1866
void get_win_data(uint8_t first_tile, uint8_t nb_tiles, uint8_t *data) OLDCALL PRESERVES_REGS(b
void set_bkg_based_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles, uint8_t base_tile)
Definition: gb.h:1181
void wait_vbl_done(void) PRESERVES_REGS(b
void add_VBL(int_handler h)
void get_win_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t *tiles) OLDCALL PRESERVES_REGS(b
struct OAM_item_t OAM_item_t
uint8_t * get_bkg_xy_addr(uint8_t x, uint8_t y) OLDCALL PRESERVES_REGS(b
void(* int_handler)(void) NONBANKED
Definition: gb.h:184
void hiramcpy(uint8_t dst, const void *src, uint8_t n) OLDCALL PRESERVES_REGS(b
void vmemset(void *s, uint8_t c, size_t n) OLDCALL PRESERVES_REGS(b
__REG _current_bank
Definition: gb.h:534
#define SYSTEM_60HZ
Definition: gb.h:27
void set_sprite_prop(uint8_t nb, uint8_t prop)
Definition: gb.h:1945
void add_TIM(int_handler h)
uint8_t get_mode(void) PRESERVES_REGS(b
void set_2bpp_palette(uint16_t palette)
Definition: gb.h:1004
void get_bkg_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t *tiles) OLDCALL PRESERVES_REGS(b
uint8_t * get_win_xy_addr(uint8_t x, uint8_t y) OLDCALL PRESERVES_REGS(b
void set_sprite_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data)
Definition: gb.h:2184
uint8_t * set_bkg_tile_xy(uint8_t x, uint8_t y, uint8_t t)
void enable_interrupts(void) PRESERVES_REGS(a
void display_off(void) PRESERVES_REGS(b
void set_sprite_1bpp_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) OLDCALL PRESERVES_REGS(b
void move_sprite(uint8_t nb, uint8_t x, uint8_t y)
Definition: gb.h:1972
uint8_t _submap_tile_offset
void joypad_ex(joypads_t *joypads) PRESERVES_REGS(b
uint8_t joypad_init(uint8_t npads, joypads_t *joypads) OLDCALL
uint8_t h
Definition: gb.h:419
uint8_t waitpad(uint8_t mask) PRESERVES_REGS(b
void set_bkg_based_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w, uint8_t base_tile)
Definition: gb.h:1314
void set_tile_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data, uint8_t base) OLDCALL PRESERVES_REGS(b
void set_win_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) OLDCALL PRESERVES_REGS(b
uint8_t * set_win_tile_xy(uint8_t x, uint8_t y, uint8_t t)
void remove_VBL(int_handler h)
void set_bkg_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data)
Definition: gb.h:2167
void set_win_1bpp_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) OLDCALL PRESERVES_REGS(b
void hide_sprite(uint8_t nb)
Definition: gb.h:2000
void fill_win_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t tile) OLDCALL PRESERVES_REGS(b
void waitpadup(void) PRESERVES_REGS(a
void set_bkg_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w) OLDCALL
Definition: msx.h:627
void set_1bpp_colors(uint8_t fgcolor, uint8_t bgcolor)
Definition: gb.h:1038
void get_sprite_data(uint8_t first_tile, uint8_t nb_tiles, uint8_t *data) OLDCALL PRESERVES_REGS(b
uint8_t cancel_pending_interrupts(void)
Definition: gb.h:403
void add_LCD(int_handler h)
uint8_t get_vram_byte(uint8_t *addr) PRESERVES_REGS(b
void add_JOY(int_handler h)
void disable_interrupts(void) PRESERVES_REGS(a
void set_sprite_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) OLDCALL PRESERVES_REGS(b
void add_SIO(int_handler h)
void set_interrupts(uint8_t flags) PRESERVES_REGS(b
uint8_t e
Definition: gb.h:419
void move_win(uint8_t x, uint8_t y)
Definition: gb.h:1738
void vsync(void) PRESERVES_REGS(b
uint8_t get_sprite_tile(uint8_t nb)
Definition: gb.h:1897
void init_win(uint8_t c) OLDCALL PRESERVES_REGS(b
uint8_t l
Definition: gb.h:419
void set_win_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w) OLDCALL
Definition: msx.h:630
void get_tiles(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t *vram_addr, uint8_t *tiles) OLDCALL
__REG _vbl_done
Definition: gb.h:476
unsigned char uint8_t
Definition: stdint.h:51
unsigned short int uint16_t
Definition: stdint.h:52
signed char int8_t
Definition: stdint.h:43
uint8_t x
Definition: gb.h:1824
uint8_t prop
Definition: gb.h:1826
uint8_t tile
Definition: gb.h:1825
uint8_t y
Definition: gb.h:1824
uint8_t joy0
Definition: gb.h:759
uint8_t npads
Definition: gb.h:756