27#if defined(__TARGET_sms)
29#elif defined(__TARGET_gg)
38#define SYSTEM_60HZ 0x00
39#define SYSTEM_50HZ 0x01
41#define VBK_REG VDP_ATTR_SHIFT
56#define J_UP 0b00000001
57#define J_DOWN 0b00000010
58#define J_LEFT 0b00000100
59#define J_RIGHT 0b00001000
62#define J_START 0b01000000
63#define J_SELECT 0b10000000
69#define M_TEXT_OUT 0x02U
70#define M_TEXT_INOUT 0x03U
76#define M_NO_SCROLL 0x04U
80#define M_NO_INTERP 0x08U
93#define S_PALETTE 0x08U
96#define S_PRIORITY 0x10U
100#define S_PAL(n) (((n) & 0x01U) << 3)
103#define __WRITE_VDP_REG_UNSAFE(REG, v) shadow_##REG=(v),VDP_CMD=(shadow_##REG),VDP_CMD=REG
104#define __WRITE_VDP_REG(REG, v) shadow_##REG=(v);__asm__("di");VDP_CMD=(shadow_##REG);VDP_CMD=REG;__asm__("ei")
105#define __READ_VDP_REG(REG) shadow_##REG
134#define EMPTY_IFLAG 0x00U
140#define VBL_IFLAG 0x01U
144#define LCD_IFLAG 0x02U
147#define TIM_IFLAG 0x04U
150#define SIO_IFLAG 0x08U
153#define JOY_IFLAG 0x10U
160#define SCREENWIDTH DEVICE_SCREEN_PX_WIDTH
163#define SCREENHEIGHT DEVICE_SCREEN_PX_HEIGHT
166#define MINWNDPOSX 0x00U
169#define MINWNDPOSY 0x00U
172#define MAXWNDPOSX 0x00U
175#define MAXWNDPOSY 0x00U
261 __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) |= R1_DISP_ON)
276#define HIDE_LEFT_COLUMN \
277 __WRITE_VDP_REG(VDP_R0, __READ_VDP_REG(VDP_R0) |= R0_LCB)
282#define SHOW_LEFT_COLUMN \
283 __WRITE_VDP_REG(VDP_R0, __READ_VDP_REG(VDP_R0) &= (~R0_LCB))
287#define SET_BORDER_COLOR(C) __WRITE_VDP_REG(VDP_R7, ((C) | 0xf0u))
311#define SHOW_SPRITES \
316#define HIDE_SPRITES \
321#define SPRITES_8x16 \
322 __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) |= R1_SPR_8X16)
327 __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) &= (~R1_SPR_8X16))
332#define DEVICE_SUPPORTS_COLOR (TRUE)
348#define VBL_DONE _vbl_done
358#define DIV_REG get_r_reg()
362#define _current_bank MAP_FRAME1
363#define CURRENT_BANK MAP_FRAME1
375#define BANK(VARNAME) ( (uint8_t) & __bank_ ## VARNAME )
390#define BANKREF(VARNAME) void __func_ ## VARNAME(void) __banked __naked { \
392 .local b___func_ ## VARNAME \
393 ___bank_ ## VARNAME = b___func_ ## VARNAME \
394 .globl ___bank_ ## VARNAME \
407#define BANKREF_EXTERN(VARNAME) extern const void __bank_ ## VARNAME;
414#define SWITCH_ROM(b) MAP_FRAME1=(b)
415#define SWITCH_ROM1 SWITCH_ROM
421#define SWITCH_ROM2(b) MAP_FRAME2=(b)
427#define SWITCH_RAM(b) RAM_CONTROL=((b)&1)?RAM_CONTROL|RAMCTL_BANK:RAM_CONTROL&(~RAMCTL_BANK)
432#define ENABLE_RAM RAM_CONTROL|=RAMCTL_RAM
437#define DISABLE_RAM RAM_CONTROL&=(~RAMCTL_RAM)
471 uint8_t joy0, joy1, joy2, joy3;
524#if defined(__TARGET_sms)
526#define RGB(r,g,b) ((r) | ((g) << 2) | ((b) << 4))
527#define RGB8(r,g,b) (((r) >> 6) | (((g) >> 6) << 2) | (((b) >> 6) << 4))
528#define RGBHTML(RGB24bit) (((RGB24bit) >> 22) | ((((RGB24bit) & 0xFFFF) >> 14) << 2) | ((((RGB24bit) & 0xFF) >> 6) << 4))
532#define RGB_RED RGB( 3, 0, 0)
533#define RGB_DARKRED RGB( 2, 0, 0)
534#define RGB_GREEN RGB( 0, 3, 0)
535#define RGB_DARKGREEN RGB( 0, 2, 0)
536#define RGB_BLUE RGB( 0, 0, 3)
537#define RGB_DARKBLUE RGB( 0, 0, 2)
538#define RGB_YELLOW RGB( 3, 3, 0)
539#define RGB_DARKYELLOW RGB( 2, 2, 0)
540#define RGB_CYAN RGB( 0, 3, 3)
541#define RGB_AQUA RGB( 3, 1, 2)
542#define RGB_PINK RGB( 3, 0, 3)
543#define RGB_PURPLE RGB( 2, 0, 2)
544#define RGB_BLACK RGB( 0, 0, 0)
545#define RGB_DARKGRAY RGB( 1, 1, 1)
546#define RGB_LIGHTGRAY RGB( 2, 2, 2)
547#define RGB_WHITE RGB( 3, 3, 3)
551#elif defined(__TARGET_gg)
553#define RGB(r,g,b) ((uint16_t)(r) | (uint16_t)((g) << 4) | (uint16_t)((b) << 8))
554#define RGB8(r,g,b) ((uint16_t)((r) >> 4) | ((uint16_t)((g) >> 4) << 4) | ((uint16_t)((b) >> 4) << 8))
555#define RGBHTML(RGB24bit) (((RGB24bit) >> 20) | ((((RGB24bit) & 0xFFFF) >> 12) << 4)|((((RGB24bit) & 0xFF) >> 4) << 8))
559#define RGB_RED RGB(15, 0, 0)
560#define RGB_DARKRED RGB( 7, 0, 0)
561#define RGB_GREEN RGB( 0, 15, 0)
562#define RGB_DARKGREEN RGB( 0, 7, 0)
563#define RGB_BLUE RGB( 0, 0, 15)
564#define RGB_DARKBLUE RGB( 0, 0, 7)
565#define RGB_YELLOW RGB(15, 15, 0)
566#define RGB_DARKYELLOW RGB( 7, 7, 0)
567#define RGB_CYAN RGB( 0, 15, 15)
568#define RGB_AQUA RGB(14, 2, 11)
569#define RGB_PINK RGB(15, 0, 15)
570#define RGB_PURPLE RGB(10, 0, 10)
571#define RGB_BLACK RGB( 0, 0, 0)
572#define RGB_DARKGRAY RGB( 5, 5, 5)
573#define RGB_LIGHTGRAY RGB(10, 10, 10)
574#define RGB_WHITE RGB(15, 15, 15)
576#define RGB_LIGHTFLESH RGB(15, 10, 7)
577#define RGB_BROWN RGB( 5, 5, 0)
578#define RGB_ORANGE RGB(15, 10, 0)
579#define RGB_TEAL RGB( 7, 7, 0)
584#error Unrecognized port
595#define set_bkg_palette_entry set_palette_entry
596#define set_sprite_palette_entry(palette,entry,rgb_data) set_palette_entry(1,entry,rgb_data)
624#define set_bkg_palette set_palette
625#define set_sprite_palette(first_palette,nb_palettes,rgb_data) set_palette(1,1,rgb_data)
634#define COMPAT_PALETTE(C0,C1,C2,C3) (((uint16_t)(C3) << 12) | ((uint16_t)(C2) << 8) | ((uint16_t)(C1) << 4) | (uint16_t)(C0))
679#define set_bkg_tiles set_tile_map_compat
680#define set_win_tiles set_tile_map_compat
703#define set_bkg_submap set_tile_submap_compat
704#define set_win_submap set_tile_submap_compat
726#define fill_bkg_rect fill_rect_compat
727#define fill_win_rect fill_rect_compat
767#define DISABLE_VBL_TRANSFER \
772#define ENABLE_VBL_TRANSFER \
773 _shadow_OAM_base = (uint8_t)((uint16_t)&shadow_OAM >> 8)
777#define MAX_HARDWARE_SPRITES 64
781#define HARDWARE_SPRITE_CAN_FLIP_X 0
785#define HARDWARE_SPRITE_CAN_FLIP_Y 0
906#define set_bkg_tile_xy set_tile_xy
907#define set_win_tile_xy set_tile_xy
917#define set_bkg_attribute_xy set_attribute_xy
918#define set_win_attribute_xy set_attribute_xy
924#define get_win_xy_addr get_bkg_xy_addr
#define NONBANKED
Definition: types.h:40
#define OLDCALL
Definition: types.h:21
#define PRESERVES_REGS(...)
Definition: types.h:32
UINT8 UBYTE
Definition: types.h:62
#define Z88DK_CALLEE
Definition: types.h:46
#define Z88DK_FASTCALL
Definition: types.h:47
uint16_t palette_color_t
Definition: cgb.h:85
#define VBK_ATTRIBUTES
Definition: hardware.h:338
#define VBK_TILES
Definition: hardware.h:336
#define R1_DISP_ON
Definition: hardware.h:58
#define VDP_R1
Definition: hardware.h:53
#define VDP_RSCX
Definition: hardware.h:108
#define VDP_RSCY
Definition: hardware.h:113
#define VDP_SAT_TERM
Definition: hardware.h:141
void SET_SHADOW_OAM_ADDRESS(void *address)
Definition: sms.h:789
#define VBK_REG
Definition: sms.h:41
void WRITE_VDP_CMD(uint16_t cmd) Z88DK_FASTCALL PRESERVES_REGS(b
void WRITE_VDP_DATA(uint16_t data) Z88DK_FASTCALL PRESERVES_REGS(b
#define __READ_VDP_REG(REG)
Definition: sms.h:105
#define __WRITE_VDP_REG(REG, v)
Definition: sms.h:104
uint16_t _current_1bpp_colors
uint16_t _current_2bpp_palette
volatile uint8_t _shadow_OAM_OFF
volatile uint8_t _shadow_OAM_base
Definition: gb.h:1836
volatile uint8_t _sprites_OFF
uint8_t _submap_tile_offset
volatile uint8_t _vbl_done
Definition: gb.h:476
void add_JOY(int_handler h) Z88DK_FASTCALL
void add_LCD(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(b
void add_SIO(int_handler h) Z88DK_FASTCALL
void add_TIM(int_handler h) Z88DK_FASTCALL
void add_VBL(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(d
void b
Definition: sms.h:503
void c
Definition: sms.h:107
uint8_t cancel_pending_interrupts(void)
Definition: sms.h:218
void cgb_compatibility(void)
Definition: sms.h:588
void cpu_fast(void)
Definition: sms.h:592
void d
Definition: sms.h:107
void delay(uint16_t d) Z88DK_FASTCALL
void disable_interrupts(void) PRESERVES_REGS(a
void display_off(void)
Definition: sms.h:253
void e
Definition: sms.h:107
void enable_interrupts(void) PRESERVES_REGS(a
void fill_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint16_t tile) Z88DK_CALLEE
void fill_rect_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint16_t tile) Z88DK_CALLEE
uint8_t * get_bkg_xy_addr(uint8_t x, uint8_t y) Z88DK_CALLEE PRESERVES_REGS(iyh
uint8_t get_mode(void) OLDCALL
uint8_t get_r_reg(void) PRESERVES_REGS(b
uint8_t get_sprite_prop(uint8_t nb)
Definition: sms.h:833
uint8_t get_sprite_tile(uint8_t nb)
Definition: sms.h:820
uint8_t get_system(void)
Definition: sms.h:127
void h
Definition: sms.h:243
void hide_sprite(uint8_t nb)
Definition: sms.h:877
void(* int_handler)(void) NONBANKED
Definition: sms.h:180
void iyh
Definition: sms.h:107
void iyl
Definition: sms.h:107
uint8_t joypad(void) OLDCALL PRESERVES_REGS(b
void joypad_ex(joypads_t *joypads) Z88DK_FASTCALL PRESERVES_REGS(iyh
uint8_t joypad_init(uint8_t npads, joypads_t *joypads) Z88DK_CALLEE
void l
Definition: sms.h:243
void mode(uint8_t m) OLDCALL
void move_bkg(uint8_t x, uint8_t y)
Definition: sms.h:222
void move_sprite(uint8_t nb, uint8_t x, uint8_t y)
Definition: sms.h:850
void remove_JOY(int_handler h) Z88DK_FASTCALL
void remove_LCD(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(b
void remove_SIO(int_handler h) Z88DK_FASTCALL
void remove_TIM(int_handler h) Z88DK_FASTCALL
void remove_VBL(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(iyh
void set_1bpp_colors(uint8_t fgcolor, uint8_t bgcolor)
Definition: sms.h:654
void set_2bpp_palette(uint16_t palette)
Definition: sms.h:636
uint8_t * set_attribute_xy(uint8_t x, uint8_t y, uint8_t a) Z88DK_CALLEE PRESERVES_REGS(iyh
uint8_t * set_attributed_tile_xy(uint8_t x, uint8_t y, uint16_t t) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_bkg_1bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:658
void set_bkg_2bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:646
void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh
void set_bkg_attributes(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles)
Definition: sms.h:694
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: sms.h:707
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: sms.h:683
void set_bkg_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:640
void set_bkg_native_data(uint16_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh
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: sms.h:718
#define set_bkg_tiles
Definition: sms.h:679
void set_data(uint16_t dst, const void *src, uint16_t size) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_default_palette(void)
void set_interrupts(uint8_t flags) Z88DK_FASTCALL
void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh
void set_palette(uint8_t first_palette, uint8_t nb_palettes, const palette_color_t *rgb_data) Z88DK_CALLEE
void set_palette_entry(uint8_t palette, uint8_t entry, uint16_t rgb_data) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_sprite_1bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:661
void set_sprite_2bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:649
void set_sprite_4bpp_data(uint8_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh
void set_sprite_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:643
void set_sprite_native_data(uint8_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh
void set_sprite_prop(uint8_t nb, uint8_t prop)
Definition: sms.h:829
void set_sprite_tile(uint8_t nb, uint8_t tile)
Definition: sms.h:809
void set_tile_1bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t colors) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_tile_2bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t palette) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_tile_map(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) Z88DK_CALLEE
void set_tile_map_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) Z88DK_CALLEE
void set_tile_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w) Z88DK_CALLEE
void set_tile_submap_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w) Z88DK_CALLEE
uint8_t * set_tile_xy(uint8_t x, uint8_t y, uint8_t t) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_vram_byte(uint8_t *addr, uint8_t v) Z88DK_CALLEE PRESERVES_REGS(iyh
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: sms.h:712
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: sms.h:688
volatile uint8_t shadow_OAM[]
volatile uint16_t sys_time
void vmemcpy(uint16_t dst, const void *src, uint16_t size) Z88DK_CALLEE PRESERVES_REGS(iyh
void vsync(void) PRESERVES_REGS(b
void wait_vbl_done(void) PRESERVES_REGS(b
uint8_t waitpad(uint8_t mask) Z88DK_FASTCALL PRESERVES_REGS(d
void waitpadup(void) PRESERVES_REGS(d
short int int16_t
Definition: stdint.h:44
signed char int8_t
Definition: stdint.h:43
unsigned short int uint16_t
Definition: stdint.h:52
unsigned char uint8_t
Definition: stdint.h:51