GBDK 2020 Docs
API Documentation for GBDK 2020
sms.h
Go to the documentation of this file.
1 
4 #ifndef _SMS_H
5 #define _SMS_H
6 
7 #include <types.h>
8 #include <stdint.h>
9 #include <gbdk/version.h>
10 #include <sms/hardware.h>
11 
12 #define SEGA
13 #ifdef NINTENDO
14 #undef NINTENDO
15 #endif
16 #if defined(__TARGET_sms)
17 #define MASTERSYSTEM
18 #elif defined(__TARGET_gg)
19 #define GAMEGEAR
20 #endif
21 
22 
23 #define VBK_REG VDP_ATTR_SHIFT
24 
38 #define J_UP 0b00000001
39 #define J_DOWN 0b00000010
40 #define J_LEFT 0b00000100
41 #define J_RIGHT 0b00001000
42 #define J_A 0b00010000
43 #define J_B 0b00100000
44 #if defined(__TARGET_sms)
45 #define J_SELECT 0b00100000
46 #define J_START 0b00010000
47 #elif defined(__TARGET_gg)
48 #define J_SELECT 0b00100000
49 #define J_START 0b10000000
50 #endif
51 
56 #define M_TEXT_OUT 0x02U
57 #define M_TEXT_INOUT 0x03U
58 
63 #define M_NO_SCROLL 0x04U
64 
67 #define M_NO_INTERP 0x08U
68 
71 #define S_FLIPX 0x02U
72 
74 #define S_FLIPY 0x04U
75 
77 #define S_PALETTE 0x08U
78 
80 #define S_PRIORITY 0x10U
81 
82 // VDP helper macros
83 #define __WRITE_VDP_REG(REG, v) shadow_##REG=(v);__critical{VDP_CMD=(shadow_##REG),VDP_CMD=REG;}
84 #define __READ_VDP_REG(REG) shadow_##REG
85 
86 void WRITE_VDP_CMD(uint16_t cmd) __z88dk_fastcall __preserves_regs(b, c, d, e, iyh, iyl);
87 void WRITE_VDP_DATA(uint16_t data) __z88dk_fastcall __preserves_regs(b, c, d, e, iyh, iyl);
88 
96 
102 
103 /* Interrupt flags */
106 #define EMPTY_IFLAG 0x00U
107 
112 #define VBL_IFLAG 0x01U
113 
116 #define LCD_IFLAG 0x02U
117 
119 #define TIM_IFLAG 0x04U
120 
122 #define SIO_IFLAG 0x08U
123 
125 #define JOY_IFLAG 0x10U
126 
127 void set_interrupts(uint8_t flags) __z88dk_fastcall;
128 
129 /* Limits */
132 #define SCREENWIDTH DEVICE_SCREEN_PX_WIDTH
133 
135 #define SCREENHEIGHT DEVICE_SCREEN_PX_HEIGHT
136 
138 #define MINWNDPOSX 0x00U
139 
141 #define MINWNDPOSY 0x00U
142 
144 #define MAXWNDPOSX 0x00U
145 
147 #define MAXWNDPOSY 0x00U
148 
149 
152 typedef void (*int_handler)(void) NONBANKED;
153 
157 void remove_VBL(int_handler h) __z88dk_fastcall __preserves_regs(iyh, iyl);
158 
162 void remove_LCD(int_handler h) __z88dk_fastcall __preserves_regs(b, c, iyh, iyl);
163 
164 void remove_TIM(int_handler h) __z88dk_fastcall;
165 void remove_SIO(int_handler h) __z88dk_fastcall;
166 void remove_JOY(int_handler h) __z88dk_fastcall;
167 
170 void add_VBL(int_handler h) __z88dk_fastcall __preserves_regs(d, e, iyh, iyl);
171 
174 void add_LCD(int_handler h) __z88dk_fastcall __preserves_regs(b, c, iyh, iyl);
175 
178 void add_TIM(int_handler h) __z88dk_fastcall;
179 
182 void add_SIO(int_handler h) __z88dk_fastcall;
183 
186 void add_JOY(int_handler h) __z88dk_fastcall;
187 
191  return VDP_STATUS;
192 }
193 
194 inline void move_bkg(uint8_t x, uint8_t y) {
197 }
198 
199 inline void scroll_bkg(int8_t x, int8_t y) {
201  int16_t tmp = __READ_VDP_REG(VDP_RSCY) + y;
202  __WRITE_VDP_REG(VDP_RSCY, (tmp < 0) ? 224 + tmp : tmp % 224u);
203 }
204 
215 void wait_vbl_done() __preserves_regs(b, c, d, e, h, l, iyh, iyl);
216 
221 inline void display_off() {
223 }
224 
228 #define DISPLAY_ON \
229  __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) |= R1_DISP_ON)
230 
234 #define DISPLAY_OFF \
235  display_off();
236 
239 void refresh_OAM();
240 
244 #define HIDE_LEFT_COLUMN \
245  __WRITE_VDP_REG(VDP_R0, __READ_VDP_REG(VDP_R0) |= R0_LCB)
246 
250 #define SHOW_LEFT_COLUMN \
251  __WRITE_VDP_REG(VDP_R0, __READ_VDP_REG(VDP_R0) &= (~R0_LCB))
252 
256 #define SHOW_BKG
257 
261 #define HIDE_BKG
262 
266 #define SHOW_WIN
267 
271 #define HIDE_WIN
272 
276 #define SHOW_SPRITES
277 
281 #define HIDE_SPRITES
282 
285 #define SPRITES_8x16 \
286  __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) |= R1_SPR_8X16)
287 
290 #define SPRITES_8x8 \
291  __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) &= (~R1_SPR_8X16))
292 
296 #define DEVICE_SUPPORTS_COLOR (TRUE)
297 
304 extern volatile uint16_t sys_time;
305 
308 #define _current_bank MAP_FRAME1
309 #define CURRENT_BANK MAP_FRAME1
310 
320 #ifndef BANK
321 #define BANK(VARNAME) ( (uint8_t) & __bank_ ## VARNAME )
322 #endif
323 
336 #define BANKREF(VARNAME) void __func_ ## VARNAME() __banked __naked { \
337 __asm \
338  .local b___func_ ## VARNAME \
339  ___bank_ ## VARNAME = b___func_ ## VARNAME \
340  .globl ___bank_ ## VARNAME \
341 __endasm; \
342 }
343 
353 #define BANKREF_EXTERN(VARNAME) extern const void __bank_ ## VARNAME;
354 
355 
360 #define SWITCH_ROM(b) MAP_FRAME1=(b)
361 #define SWITCH_ROM1 SWITCH_ROM
362 
367 #define SWITCH_ROM2(b) MAP_FRAME2=(b)
368 
373 #define SWITCH_RAM(b) RAM_CONTROL=((b)&1)?RAM_CONTROL|RAMCTL_BANK:RAM_CONTROL&(~RAMCTL_BANK)
374 
378 #define ENABLE_RAM RAM_CONTROL|=RAMCTL_RAM
379 
383 #define DISABLE_RAM RAM_CONTROL&=(~RAMCTL_RAM)
384 
385 
390 void delay(uint16_t d) __z88dk_fastcall;
391 
392 
395 uint8_t joypad() OLDCALL __preserves_regs(b, c, d, e, h, iyh, iyl);
396 
399 uint8_t waitpad(uint8_t mask) __z88dk_fastcall __preserves_regs(b, c, d, e, iyh, iyl);
400 
406 void waitpadup() __preserves_regs(b, c, d, e, iyh, iyl);
407 
413 typedef struct {
414  uint8_t npads;
415  union {
416  struct {
417  uint8_t joy0, joy1, joy2, joy3;
418  };
419  uint8_t joypads[4];
420  };
421 } joypads_t;
422 
431 uint8_t joypad_init(uint8_t npads, joypads_t * joypads) __z88dk_callee;
432 
439 void joypad_ex(joypads_t * joypads) __z88dk_fastcall __preserves_regs(iyh, iyl);
440 
441 
442 #if defined(__TARGET_sms)
443 
444 #define RGB(r,g,b) ((r) | ((g) << 2) | ((b) << 4))
445 #define RGB8(r,g,b) (((r) >> 6) | (((g) >> 6) << 2) | (((b) >> 6) << 4))
446 #define RGBHTML(RGB24bit) (((RGB24bit) >> 22) | ((((RGB24bit) & 0xFFFF) >> 14) << 2) | ((((RGB24bit) & 0xFF) >> 6) << 4))
447 
450 #define RGB_RED RGB( 3, 0, 0)
451 #define RGB_DARKRED RGB( 2, 0, 0)
452 #define RGB_GREEN RGB( 0, 3, 0)
453 #define RGB_DARKGREEN RGB( 0, 2, 0)
454 #define RGB_BLUE RGB( 0, 0, 3)
455 #define RGB_DARKBLUE RGB( 0, 0, 2)
456 #define RGB_YELLOW RGB( 3, 3, 0)
457 #define RGB_DARKYELLOW RGB( 2, 2, 0)
458 #define RGB_CYAN RGB( 0, 3, 3)
459 #define RGB_AQUA RGB( 3, 1, 2)
460 #define RGB_PINK RGB( 3, 0, 3)
461 #define RGB_PURPLE RGB( 2, 0, 2)
462 #define RGB_BLACK RGB( 0, 0, 0)
463 #define RGB_DARKGRAY RGB( 1, 1, 1)
464 #define RGB_LIGHTGRAY RGB( 2, 2, 2)
465 #define RGB_WHITE RGB( 3, 3, 3)
466 
467 typedef uint8_t palette_color_t;
468 
469 #elif defined(__TARGET_gg)
470 
471 #define RGB(r,g,b) ((uint16_t)(r) | (uint16_t)((g) << 4) | (uint16_t)((b) << 8))
472 #define RGB8(r,g,b) ((uint16_t)((r) >> 4) | ((uint16_t)((g) >> 4) << 4) | ((uint16_t)((b) >> 4) << 8))
473 #define RGBHTML(RGB24bit) (((RGB24bit) >> 20) | ((((RGB24bit) & 0xFFFF) >> 12) << 4)|((((RGB24bit) & 0xFF) >> 4) << 8))
474 
477 #define RGB_RED RGB(15, 0, 0)
478 #define RGB_DARKRED RGB( 7, 0, 0)
479 #define RGB_GREEN RGB( 0, 15, 0)
480 #define RGB_DARKGREEN RGB( 0, 7, 0)
481 #define RGB_BLUE RGB( 0, 0, 15)
482 #define RGB_DARKBLUE RGB( 0, 0, 7)
483 #define RGB_YELLOW RGB(15, 15, 0)
484 #define RGB_DARKYELLOW RGB( 7, 7, 0)
485 #define RGB_CYAN RGB( 0, 15, 15)
486 #define RGB_AQUA RGB(14, 2, 11)
487 #define RGB_PINK RGB(15, 0, 15)
488 #define RGB_PURPLE RGB(10, 0, 10)
489 #define RGB_BLACK RGB( 0, 0, 0)
490 #define RGB_DARKGRAY RGB( 5, 5, 5)
491 #define RGB_LIGHTGRAY RGB(10, 10, 10)
492 #define RGB_WHITE RGB(15, 15, 15)
493 
494 #define RGB_LIGHTFLESH RGB(15, 10, 7)
495 #define RGB_BROWN RGB( 5, 5, 0)
496 #define RGB_ORANGE RGB(15, 10, 0)
497 #define RGB_TEAL RGB( 7, 7, 0)
498 
499 typedef uint16_t palette_color_t;
500 
501 #else
502 #error Unrecognized port
503 #endif
504 
506 inline void cpu_fast() {}
507 
508 void set_palette_entry(uint8_t palette, uint8_t entry, uint16_t rgb_data) __z88dk_callee __preserves_regs(iyh, iyl);
509 #define set_bkg_palette_entry set_palette_entry
510 #define set_sprite_palette_entry(palette,entry,rgb_data) set_palette_entry(1,entry,rgb_data)
511 void set_palette(uint8_t first_palette, uint8_t nb_palettes, palette_color_t *rgb_data) __z88dk_callee;
512 #define set_bkg_palette set_palette
513 #define set_sprite_palette(first_palette,nb_palettes,rgb_data) set_palette(1,1,rgb_data)
514 
515 void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) __z88dk_callee __preserves_regs(iyh,iyl);
516 inline void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
517  set_native_tile_data(start, ntiles, src);
518 }
519 inline void set_sprite_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
520  set_native_tile_data((uint8_t)(start) + 0x100u, ntiles, src);
521 }
522 
523 #define COMPAT_PALETTE(C0,C1,C2,C3) (((uint16_t)(C3) << 12) | ((uint16_t)(C2) << 8) | ((uint16_t)(C1) << 4) | (uint16_t)(C0))
525 inline void set_2bpp_palette(uint16_t palette) {
526  _current_2bpp_palette = palette;
527 }
528 void set_tile_2bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t palette) __z88dk_callee __preserves_regs(iyh,iyl);
529 inline void set_bkg_data(uint16_t start, uint16_t ntiles, const void *src) {
530  set_tile_2bpp_data(start, ntiles, src, _current_2bpp_palette);
531 }
532 inline void set_sprite_data(uint16_t start, uint16_t ntiles, const void *src) {
533  set_tile_2bpp_data((uint8_t)(start) + 0x100u, ntiles, src, _current_2bpp_palette);
534 }
535 inline void set_bkg_2bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
536  set_tile_2bpp_data(start, ntiles, src, _current_2bpp_palette);
537 }
538 inline void set_sprite_2bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
539  set_tile_2bpp_data((uint8_t)(start) + 0x100u, ntiles, src, _current_2bpp_palette);
540 }
541 
543 inline void set_1bpp_colors(uint8_t fgcolor, uint8_t bgcolor) {
544  _current_1bpp_colors = ((uint16_t)bgcolor << 8) | fgcolor;
545 }
546 void set_tile_1bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t colors) __z88dk_callee __preserves_regs(iyh,iyl);
547 inline void set_bkg_1bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
548  set_tile_1bpp_data(start, ntiles, src, _current_1bpp_colors);
549 }
550 inline void set_sprite_1bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
551  set_tile_1bpp_data((uint8_t)(start) + 0x100u, ntiles, src, _current_1bpp_colors);
552 }
553 
554 
563 void set_data(uint16_t dst, const void *src, uint16_t size) __z88dk_callee __preserves_regs(iyh, iyl);
564 void vmemcpy(uint16_t dst, const void *src, uint16_t size) __z88dk_callee __preserves_regs(iyh, iyl);
565 
566 void set_tile_map(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) __z88dk_callee __preserves_regs(iyh, iyl);
567 void set_tile_map_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) __z88dk_callee __preserves_regs(iyh, iyl);
568 #define set_bkg_tiles set_tile_map_compat
569 #define set_win_tiles set_tile_map_compat
570 
571 void set_tile_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t map_w, const uint8_t *map) __z88dk_callee __preserves_regs(iyh, iyl);
572 void set_tile_submap_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t map_w, const uint8_t *map) __z88dk_callee __preserves_regs(iyh, iyl);
573 inline void set_bkg_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w) {
574  set_tile_submap_compat(x, y, w, h, map_w, map);
575 }
576 inline void set_win_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w) {
577  set_tile_submap_compat(x, y, w, h, map_w, map);
578 }
579 
580 void fill_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint16_t tile) __z88dk_callee __preserves_regs(iyh, iyl);
581 void fill_rect_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint16_t tile) __z88dk_callee __preserves_regs(iyh, iyl);
582 #define fill_bkg_rect fill_rect_compat
583 #define fill_win_rect fill_rect_compat
584 
587 extern volatile uint8_t shadow_OAM[];
588 
591 extern volatile uint8_t _shadow_OAM_base;
592 
617 extern volatile uint8_t _shadow_OAM_OFF;
618 
621 #define DISABLE_VBL_TRANSFER \
622  _shadow_OAM_base = 0
623 
626 #define ENABLE_VBL_TRANSFER \
627  _shadow_OAM_base = (uint8_t)((uint16_t)&shadow_OAM >> 8)
628 
631 #define MAX_HARDWARE_SPRITES 64
632 
635 inline void SET_SHADOW_OAM_ADDRESS(void * address) {
636  _shadow_OAM_base = (uint8_t)((uint16_t)address >> 8);
637 }
638 
655 inline void set_sprite_tile(uint8_t nb, uint8_t tile) {
656  shadow_OAM[0x41+(nb << 1)] = tile;
657 }
658 
659 
667  return shadow_OAM[0x41+(nb << 1)];
668 }
669 
670 inline void set_sprite_prop(uint8_t nb, uint8_t prop) {
671  nb; prop;
672 }
673 
675  nb;
676  return 0;
677 }
678 
691 inline void move_sprite(uint8_t nb, uint8_t x, uint8_t y) {
692  shadow_OAM[nb] = (y < VDP_SAT_TERM) ? y : 0xC0;
693  shadow_OAM[0x40+(nb << 1)] = x;
694 }
695 
696 
707 inline void scroll_sprite(uint8_t nb, int8_t x, int8_t y) {
708  uint8_t new_y = shadow_OAM[nb] + y;
709  shadow_OAM[nb] = (new_y < VDP_SAT_TERM) ? new_y : 0xC0;
710  shadow_OAM[0x40+(nb << 1)] = x;
711 }
712 
713 
718 inline void hide_sprite(uint8_t nb) {
719  shadow_OAM[nb] = 0xC0;
720 }
721 
728 void set_vram_byte(uint8_t * addr, uint8_t v) __z88dk_callee __preserves_regs(iyh, iyl);
729 
737 uint8_t * set_attributed_tile_xy(uint8_t x, uint8_t y, uint16_t t) __z88dk_callee __preserves_regs(iyh, iyl);
738 
746 uint8_t * set_tile_xy(uint8_t x, uint8_t y, uint8_t t) __z88dk_callee __preserves_regs(iyh, iyl);
747 #define set_bkg_tile_xy set_tile_xy
748 #define set_win_tile_xy set_tile_xy
749 
753 uint8_t * get_bkg_xy_addr(uint8_t x, uint8_t y) __z88dk_callee __preserves_regs(iyh, iyl);
754 #define get_win_xy_addr get_bkg_xy_addr
755 
756 #endif /* _SMS_H */
set_sprite_2bpp_data
void set_sprite_2bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:538
uint8_t
unsigned char uint8_t
Definition: stdint.h:51
set_bkg_2bpp_data
void set_bkg_2bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:535
int8_t
signed char int8_t
Definition: stdint.h:43
set_bkg_4bpp_data
void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:516
set_interrupts
void set_interrupts(uint8_t flags) __z88dk_fastcall
joypads_t
Definition: gb.h:592
display_off
void display_off()
Definition: sms.h:221
set_sprite_tile
void set_sprite_tile(uint8_t nb, uint8_t tile)
Definition: sms.h:655
d
void d
Definition: sms.h:86
hardware.h
hide_sprite
void hide_sprite(uint8_t nb)
Definition: sms.h:718
remove_SIO
void remove_SIO(int_handler h) __z88dk_fastcall
add_VBL
void add_VBL(int_handler h) __z88dk_fastcall __preserves_regs(d
joypad
uint8_t joypad() OLDCALL __preserves_regs(b
set_bkg_1bpp_data
void set_bkg_1bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:547
joypad_ex
void joypad_ex(joypads_t *joypads) __z88dk_fastcall __preserves_regs(iyh
VDP_R1
#define VDP_R1
Definition: hardware.h:63
set_tile_map_compat
void set_tile_map_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) __z88dk_callee __preserves_regs(iyh
set_win_submap
void set_win_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w)
Definition: sms.h:576
sys_time
volatile uint16_t sys_time
set_attributed_tile_xy
uint8_t * set_attributed_tile_xy(uint8_t x, uint8_t y, uint16_t t) __z88dk_callee __preserves_regs(iyh
set_bkg_submap
void set_bkg_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *map, uint8_t map_w)
Definition: sms.h:573
l
void l
Definition: sms.h:215
cancel_pending_interrupts
uint8_t cancel_pending_interrupts()
Definition: sms.h:190
waitpad
uint8_t waitpad(uint8_t mask) __z88dk_fastcall __preserves_regs(b
uint16_t
unsigned short int uint16_t
Definition: stdint.h:52
WRITE_VDP_CMD
void WRITE_VDP_CMD(uint16_t cmd) __z88dk_fastcall __preserves_regs(b
version.h
refresh_OAM
void refresh_OAM()
set_data
void set_data(uint16_t dst, const void *src, uint16_t size) __z88dk_callee __preserves_regs(iyh
R1_DISP_ON
#define R1_DISP_ON
Definition: hardware.h:68
set_tile_2bpp_data
void set_tile_2bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t palette) __z88dk_callee __preserves_regs(iyh
get_sprite_tile
uint8_t get_sprite_tile(uint8_t nb)
Definition: sms.h:666
c
void c
Definition: sms.h:86
joypad_init
uint8_t joypad_init(uint8_t npads, joypads_t *joypads) __z88dk_callee
vmemcpy
void vmemcpy(uint16_t dst, const void *src, uint16_t size) __z88dk_callee __preserves_regs(iyh
wait_vbl_done
void wait_vbl_done() __preserves_regs(b
set_tile_submap
void set_tile_submap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t map_w, const uint8_t *map) __z88dk_callee __preserves_regs(iyh
set_palette
void set_palette(uint8_t first_palette, uint8_t nb_palettes, palette_color_t *rgb_data) __z88dk_callee
VDP_RSCX
#define VDP_RSCX
Definition: hardware.h:113
set_vram_byte
void set_vram_byte(uint8_t *addr, uint8_t v) __z88dk_callee __preserves_regs(iyh
int16_t
short int int16_t
Definition: stdint.h:44
move_bkg
void move_bkg(uint8_t x, uint8_t y)
Definition: sms.h:194
set_sprite_prop
void set_sprite_prop(uint8_t nb, uint8_t prop)
Definition: sms.h:670
add_SIO
void add_SIO(int_handler h) __z88dk_fastcall
remove_LCD
void remove_LCD(int_handler h) __z88dk_fastcall __preserves_regs(b
__READ_VDP_REG
#define __READ_VDP_REG(REG)
Definition: sms.h:84
mode
void mode(uint8_t m) OLDCALL
fill_rect
void fill_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint16_t tile) __z88dk_callee __preserves_regs(iyh
__WRITE_VDP_REG
#define __WRITE_VDP_REG(REG, v)
Definition: sms.h:83
fill_rect_compat
void fill_rect_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint16_t tile) __z88dk_callee __preserves_regs(iyh
get_mode
uint8_t get_mode() OLDCALL
add_LCD
void add_LCD(int_handler h) __z88dk_fastcall __preserves_regs(b
stdint.h
VDP_RSCY
#define VDP_RSCY
Definition: hardware.h:118
scroll_sprite
void scroll_sprite(uint8_t nb, int8_t x, int8_t y)
Definition: sms.h:707
cpu_fast
void cpu_fast()
Definition: sms.h:506
delay
void delay(uint16_t d) __z88dk_fastcall
set_1bpp_colors
void set_1bpp_colors(uint8_t fgcolor, uint8_t bgcolor)
Definition: sms.h:543
palette_color_t
uint16_t palette_color_t
Definition: cgb.h:85
_shadow_OAM_base
volatile uint8_t _shadow_OAM_base
Definition: gb.h:1271
b
void b
Definition: gb.h:585
set_sprite_4bpp_data
void set_sprite_4bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:519
OLDCALL
#define OLDCALL
Definition: types.h:21
set_sprite_data
void set_sprite_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:532
set_tile_submap_compat
void set_tile_submap_compat(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t map_w, const uint8_t *map) __z88dk_callee __preserves_regs(iyh
get_bkg_xy_addr
uint8_t * get_bkg_xy_addr(uint8_t x, uint8_t y) __z88dk_callee __preserves_regs(iyh
shadow_OAM
volatile uint8_t shadow_OAM[]
set_bkg_data
void set_bkg_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:529
remove_VBL
void remove_VBL(int_handler h) __z88dk_fastcall __preserves_regs(iyh
remove_JOY
void remove_JOY(int_handler h) __z88dk_fastcall
NONBANKED
#define NONBANKED
Definition: types.h:12
set_tile_map
void set_tile_map(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles) __z88dk_callee __preserves_regs(iyh
SET_SHADOW_OAM_ADDRESS
void SET_SHADOW_OAM_ADDRESS(void *address)
Definition: sms.h:635
_current_1bpp_colors
uint16_t _current_1bpp_colors
move_sprite
void move_sprite(uint8_t nb, uint8_t x, uint8_t y)
Definition: sms.h:691
get_sprite_prop
uint8_t get_sprite_prop(uint8_t nb)
Definition: sms.h:674
_current_2bpp_palette
uint16_t _current_2bpp_palette
VDP_SAT_TERM
#define VDP_SAT_TERM
Definition: hardware.h:177
set_2bpp_palette
void set_2bpp_palette(uint16_t palette)
Definition: sms.h:525
_shadow_OAM_OFF
volatile uint8_t _shadow_OAM_OFF
iyl
void iyl
Definition: sms.h:86
set_tile_xy
uint8_t * set_tile_xy(uint8_t x, uint8_t y, uint8_t t) __z88dk_callee __preserves_regs(iyh
set_native_tile_data
void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) __z88dk_callee __preserves_regs(iyh
add_TIM
void add_TIM(int_handler h) __z88dk_fastcall
set_default_palette
void set_default_palette()
scroll_bkg
void scroll_bkg(int8_t x, int8_t y)
Definition: sms.h:199
add_JOY
void add_JOY(int_handler h) __z88dk_fastcall
WRITE_VDP_DATA
void WRITE_VDP_DATA(uint16_t data) __z88dk_fastcall __preserves_regs(b
set_palette_entry
void set_palette_entry(uint8_t palette, uint8_t entry, uint16_t rgb_data) __z88dk_callee __preserves_regs(iyh
set_sprite_1bpp_data
void set_sprite_1bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:550
h
void h
Definition: sms.h:215
iyh
void iyh
Definition: sms.h:86
int_handler
void(* int_handler)(void) NONBANKED
Definition: sms.h:152
waitpadup
void waitpadup() __preserves_regs(b
e
void e
Definition: sms.h:86
set_tile_1bpp_data
void set_tile_1bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t colors) __z88dk_callee __preserves_regs(iyh
remove_TIM
void remove_TIM(int_handler h) __z88dk_fastcall