GBDK 2020 Docs  4.2.0
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 
14 // Here NINTENDO means Game Boy & related clones
15 #ifdef NINTENDO
16 #undef NINTENDO
17 #endif
18 
19 #ifdef NINTENDO_NES
20 #undef NINTENDO_NES
21 #endif
22 
23 #ifdef MSX
24 #undef MSX
25 #endif
26 
27 #if defined(__TARGET_sms)
28 #define MASTERSYSTEM
29 #elif defined(__TARGET_gg)
30 #define GAMEGEAR
31 #endif
32 
33 
34 #define VBK_REG VDP_ATTR_SHIFT
35 
49 #define J_UP 0b00000001
50 #define J_DOWN 0b00000010
51 #define J_LEFT 0b00000100
52 #define J_RIGHT 0b00001000
53 #define J_B 0b00010000
54 #define J_A 0b00100000
55 #if defined(__TARGET_sms)
56 #define J_SELECT 0b00100000
57 #define J_START 0b00010000
58 #elif defined(__TARGET_gg)
59 #define J_SELECT 0b00100000
60 #define J_START 0b10000000
61 #endif
62 
67 #define M_TEXT_OUT 0x02U
68 #define M_TEXT_INOUT 0x03U
74 #define M_NO_SCROLL 0x04U
78 #define M_NO_INTERP 0x08U
79 
82 #define S_FLIPX 0x02U
85 #define S_FLIPY 0x04U
88 #define S_PALETTE 0x08U
91 #define S_PRIORITY 0x10U
95 #define S_PAL(n) 0
96 
97 // VDP helper macros
98 #define __WRITE_VDP_REG(REG, v) shadow_##REG=(v);__critical{VDP_CMD=(shadow_##REG),VDP_CMD=REG;}
99 #define __READ_VDP_REG(REG) shadow_##REG
100 
103 
111 
117 
118 /* Interrupt flags */
121 #define EMPTY_IFLAG 0x00U
127 #define VBL_IFLAG 0x01U
131 #define LCD_IFLAG 0x02U
134 #define TIM_IFLAG 0x04U
137 #define SIO_IFLAG 0x08U
140 #define JOY_IFLAG 0x10U
141 
143 
144 /* Limits */
147 #define SCREENWIDTH DEVICE_SCREEN_PX_WIDTH
150 #define SCREENHEIGHT DEVICE_SCREEN_PX_HEIGHT
153 #define MINWNDPOSX 0x00U
156 #define MINWNDPOSY 0x00U
159 #define MAXWNDPOSX 0x00U
162 #define MAXWNDPOSY 0x00U
163 
164 
167 typedef void (*int_handler)(void) NONBANKED;
168 
173 
178 
182 
186 
190 
194 
198 
202 
206  return VDP_STATUS;
207 }
208 
209 inline void move_bkg(uint8_t x, uint8_t y) {
212 }
213 
214 inline void scroll_bkg(int8_t x, int8_t y) {
216  int16_t tmp = __READ_VDP_REG(VDP_RSCY) + y;
217  __WRITE_VDP_REG(VDP_RSCY, (tmp < 0) ? 224 + tmp : tmp % 224u);
218 }
219 
230 void vsync(void) PRESERVES_REGS(b, c, d, e, h, l, iyh, iyl);
231 
234 void wait_vbl_done(void) PRESERVES_REGS(b, c, d, e, h, l, iyh, iyl);
235 
240 inline void display_off(void) {
242 }
243 
247 #define DISPLAY_ON \
248  __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) |= R1_DISP_ON)
249 
253 #define DISPLAY_OFF \
254  display_off();
255 
258 void refresh_OAM(void);
259 
263 #define HIDE_LEFT_COLUMN \
264  __WRITE_VDP_REG(VDP_R0, __READ_VDP_REG(VDP_R0) |= R0_LCB)
265 
269 #define SHOW_LEFT_COLUMN \
270  __WRITE_VDP_REG(VDP_R0, __READ_VDP_REG(VDP_R0) &= (~R0_LCB))
271 
275 #define SHOW_BKG
276 
280 #define HIDE_BKG
281 
285 #define SHOW_WIN
286 
290 #define HIDE_WIN
291 
295 #define SHOW_SPRITES
296 
300 #define HIDE_SPRITES
301 
304 #define SPRITES_8x16 \
305  __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) |= R1_SPR_8X16)
306 
309 #define SPRITES_8x8 \
310  __WRITE_VDP_REG(VDP_R1, __READ_VDP_REG(VDP_R1) &= (~R1_SPR_8X16))
311 
315 #define DEVICE_SUPPORTS_COLOR (TRUE)
316 
323 extern volatile uint16_t sys_time;
324 
327 #define _current_bank MAP_FRAME1
328 #define CURRENT_BANK MAP_FRAME1
329 
339 #ifndef BANK
340 #define BANK(VARNAME) ( (uint8_t) & __bank_ ## VARNAME )
341 #endif
342 
355 #define BANKREF(VARNAME) void __func_ ## VARNAME(void) __banked __naked { \
356 __asm \
357  .local b___func_ ## VARNAME \
358  ___bank_ ## VARNAME = b___func_ ## VARNAME \
359  .globl ___bank_ ## VARNAME \
360 __endasm; \
361 }
362 
372 #define BANKREF_EXTERN(VARNAME) extern const void __bank_ ## VARNAME;
373 
374 
379 #define SWITCH_ROM(b) MAP_FRAME1=(b)
380 #define SWITCH_ROM1 SWITCH_ROM
381 
386 #define SWITCH_ROM2(b) MAP_FRAME2=(b)
387 
392 #define SWITCH_RAM(b) RAM_CONTROL=((b)&1)?RAM_CONTROL|RAMCTL_BANK:RAM_CONTROL&(~RAMCTL_BANK)
393 
397 #define ENABLE_RAM RAM_CONTROL|=RAMCTL_RAM
398 
402 #define DISABLE_RAM RAM_CONTROL&=(~RAMCTL_RAM)
403 
404 
410 
411 
415 
419 
425 void waitpadup(void) PRESERVES_REGS(b, c, d, e, iyh, iyl);
426 
432 typedef struct {
433  uint8_t npads;
434  union {
435  struct {
436  uint8_t joy0, joy1, joy2, joy3;
437  };
438  uint8_t joypads[4];
439  };
440 } joypads_t;
441 
451 
459 
460 
461 #if defined(__TARGET_sms)
462 
463 #define RGB(r,g,b) ((r) | ((g) << 2) | ((b) << 4))
464 #define RGB8(r,g,b) (((r) >> 6) | (((g) >> 6) << 2) | (((b) >> 6) << 4))
465 #define RGBHTML(RGB24bit) (((RGB24bit) >> 22) | ((((RGB24bit) & 0xFFFF) >> 14) << 2) | ((((RGB24bit) & 0xFF) >> 6) << 4))
466 
469 #define RGB_RED RGB( 3, 0, 0)
470 #define RGB_DARKRED RGB( 2, 0, 0)
471 #define RGB_GREEN RGB( 0, 3, 0)
472 #define RGB_DARKGREEN RGB( 0, 2, 0)
473 #define RGB_BLUE RGB( 0, 0, 3)
474 #define RGB_DARKBLUE RGB( 0, 0, 2)
475 #define RGB_YELLOW RGB( 3, 3, 0)
476 #define RGB_DARKYELLOW RGB( 2, 2, 0)
477 #define RGB_CYAN RGB( 0, 3, 3)
478 #define RGB_AQUA RGB( 3, 1, 2)
479 #define RGB_PINK RGB( 3, 0, 3)
480 #define RGB_PURPLE RGB( 2, 0, 2)
481 #define RGB_BLACK RGB( 0, 0, 0)
482 #define RGB_DARKGRAY RGB( 1, 1, 1)
483 #define RGB_LIGHTGRAY RGB( 2, 2, 2)
484 #define RGB_WHITE RGB( 3, 3, 3)
485 
486 typedef uint8_t palette_color_t;
487 
488 #elif defined(__TARGET_gg)
489 
490 #define RGB(r,g,b) ((uint16_t)(r) | (uint16_t)((g) << 4) | (uint16_t)((b) << 8))
491 #define RGB8(r,g,b) ((uint16_t)((r) >> 4) | ((uint16_t)((g) >> 4) << 4) | ((uint16_t)((b) >> 4) << 8))
492 #define RGBHTML(RGB24bit) (((RGB24bit) >> 20) | ((((RGB24bit) & 0xFFFF) >> 12) << 4)|((((RGB24bit) & 0xFF) >> 4) << 8))
493 
496 #define RGB_RED RGB(15, 0, 0)
497 #define RGB_DARKRED RGB( 7, 0, 0)
498 #define RGB_GREEN RGB( 0, 15, 0)
499 #define RGB_DARKGREEN RGB( 0, 7, 0)
500 #define RGB_BLUE RGB( 0, 0, 15)
501 #define RGB_DARKBLUE RGB( 0, 0, 7)
502 #define RGB_YELLOW RGB(15, 15, 0)
503 #define RGB_DARKYELLOW RGB( 7, 7, 0)
504 #define RGB_CYAN RGB( 0, 15, 15)
505 #define RGB_AQUA RGB(14, 2, 11)
506 #define RGB_PINK RGB(15, 0, 15)
507 #define RGB_PURPLE RGB(10, 0, 10)
508 #define RGB_BLACK RGB( 0, 0, 0)
509 #define RGB_DARKGRAY RGB( 5, 5, 5)
510 #define RGB_LIGHTGRAY RGB(10, 10, 10)
511 #define RGB_WHITE RGB(15, 15, 15)
512 
513 #define RGB_LIGHTFLESH RGB(15, 10, 7)
514 #define RGB_BROWN RGB( 5, 5, 0)
515 #define RGB_ORANGE RGB(15, 10, 0)
516 #define RGB_TEAL RGB( 7, 7, 0)
517 
518 typedef uint16_t palette_color_t;
519 
520 #else
521 #error Unrecognized port
522 #endif
523 
525 inline void cgb_compatibility(void) {
527 }
528 
529 inline void cpu_fast(void) {}
530 
532 #define set_bkg_palette_entry set_palette_entry
533 #define set_sprite_palette_entry(palette,entry,rgb_data) set_palette_entry(1,entry,rgb_data)
534 void set_palette(uint8_t first_palette, uint8_t nb_palettes, const palette_color_t *rgb_data) Z88DK_CALLEE;
535 #define set_bkg_palette set_palette
536 #define set_sprite_palette(first_palette,nb_palettes,rgb_data) set_palette(1,1,rgb_data)
537 
538 void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl);
539 inline void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
540  set_native_tile_data(start, ntiles, src);
541 }
542 inline void set_bkg_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) {
543  set_bkg_4bpp_data(first_tile, nb_tiles, data);
544 }
545 
546 inline void set_sprite_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
547  set_native_tile_data((uint8_t)(start) + 0x100u, ntiles, src);
548 }
549 inline void set_sprite_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) {
550  set_sprite_4bpp_data(first_tile, nb_tiles, data);
551 }
552 
553 #define COMPAT_PALETTE(C0,C1,C2,C3) (((uint16_t)(C3) << 12) | ((uint16_t)(C2) << 8) | ((uint16_t)(C1) << 4) | (uint16_t)(C0))
555 inline void set_2bpp_palette(uint16_t palette) {
556  _current_2bpp_palette = palette;
557 }
558 void set_tile_2bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t palette) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl);
559 inline void set_bkg_data(uint16_t start, uint16_t ntiles, const void *src) {
560  set_tile_2bpp_data(start, ntiles, src, _current_2bpp_palette);
561 }
562 inline void set_sprite_data(uint16_t start, uint16_t ntiles, const void *src) {
563  set_tile_2bpp_data((uint8_t)(start) + 0x100u, ntiles, src, _current_2bpp_palette);
564 }
565 inline void set_bkg_2bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
566  set_tile_2bpp_data(start, ntiles, src, _current_2bpp_palette);
567 }
568 inline void set_sprite_2bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
569  set_tile_2bpp_data((uint8_t)(start) + 0x100u, ntiles, src, _current_2bpp_palette);
570 }
571 
573 inline void set_1bpp_colors(uint8_t fgcolor, uint8_t bgcolor) {
574  _current_1bpp_colors = ((uint16_t)bgcolor << 8) | fgcolor;
575 }
576 void set_tile_1bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t colors) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl);
577 inline void set_bkg_1bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
578  set_tile_1bpp_data(start, ntiles, src, _current_1bpp_colors);
579 }
580 inline void set_sprite_1bpp_data(uint16_t start, uint16_t ntiles, const void *src) {
581  set_tile_1bpp_data((uint8_t)(start) + 0x100u, ntiles, src, _current_1bpp_colors);
582 }
583 
584 
593 void set_data(uint16_t dst, const void *src, uint16_t size) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl);
594 void vmemcpy(uint16_t dst, const void *src, uint16_t size) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl);
595 
598 #define set_bkg_tiles set_tile_map_compat
599 #define set_win_tiles set_tile_map_compat
600 
602 inline 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) {
603  _map_tile_offset = base_tile;
604  set_tile_map_compat(x, y, w, h, tiles);
605  _map_tile_offset = 0;
606 }
607 inline 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) {
608  _map_tile_offset = base_tile;
609  set_tile_map_compat(x, y, w, h, tiles);
610  _map_tile_offset = 0;
611 }
612 
613 inline void set_bkg_attributes(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles)
614 {
616  set_bkg_tiles(x, y, w, h, tiles);
617  VBK_REG = VBK_TILES;
618 }
619 
622 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) {
623  set_tile_submap_compat(x, y, w, h, map_w, map);
624 }
625 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) {
626  set_tile_submap_compat(x, y, w, h, map_w, map);
627 }
628 
630 inline 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) {
631  _submap_tile_offset = base_tile;
632  set_tile_submap_compat(x, y, w, h, map_w, map);
634 }
635 inline 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) {
636  _submap_tile_offset = base_tile;
637  set_tile_submap_compat(x, y, w, h, map_w, map);
639 }
640 
641 inline 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)
642 {
644  set_bkg_submap(x, y, w, h, map, map_w);
645  VBK_REG = VBK_TILES;
646 }
647 
650 #define fill_bkg_rect fill_rect_compat
651 #define fill_win_rect fill_rect_compat
652 
655 extern volatile uint8_t shadow_OAM[];
656 
659 extern volatile uint8_t _shadow_OAM_base;
660 
685 extern volatile uint8_t _shadow_OAM_OFF;
686 
689 #define DISABLE_VBL_TRANSFER \
690  _shadow_OAM_base = 0
691 
694 #define ENABLE_VBL_TRANSFER \
695  _shadow_OAM_base = (uint8_t)((uint16_t)&shadow_OAM >> 8)
696 
699 #define MAX_HARDWARE_SPRITES 64
700 
703 #define HARDWARE_SPRITE_CAN_FLIP_X 0
704 
707 #define HARDWARE_SPRITE_CAN_FLIP_Y 0
708 
711 inline void SET_SHADOW_OAM_ADDRESS(void * address) {
712  _shadow_OAM_base = (uint8_t)((uint16_t)address >> 8);
713 }
714 
731 inline void set_sprite_tile(uint8_t nb, uint8_t tile) {
732  shadow_OAM[0x41+(nb << 1)] = tile;
733 }
734 
735 
743  return shadow_OAM[0x41+(nb << 1)];
744 }
745 
746 inline void set_sprite_prop(uint8_t nb, uint8_t prop) {
747  nb; prop;
748 }
749 
751  nb;
752  return 0;
753 }
754 
767 inline void move_sprite(uint8_t nb, uint8_t x, uint8_t y) {
768  shadow_OAM[nb] = (y < VDP_SAT_TERM) ? y : 0xC0;
769  shadow_OAM[0x40+(nb << 1)] = x;
770 }
771 
772 
783 inline void scroll_sprite(uint8_t nb, int8_t x, int8_t y) {
784  uint8_t new_y = shadow_OAM[nb] + y;
785  shadow_OAM[nb] = (new_y < VDP_SAT_TERM) ? new_y : 0xC0;
786  shadow_OAM[0x40+(nb << 1)] = x;
787 }
788 
789 
794 inline void hide_sprite(uint8_t nb) {
795  shadow_OAM[nb] = 0xC0;
796 }
797 
805 
814 
823 #define set_bkg_tile_xy set_tile_xy
824 #define set_win_tile_xy set_tile_xy
825 
834 #define set_bkg_attribute_xy set_attribute_xy
835 #define set_win_attribute_xy set_attribute_xy
836 
841 #define get_win_xy_addr get_bkg_xy_addr
842 
843 #endif /* _SMS_H */
#define OLDCALL
Definition: types.h:21
#define NONBANKED
Definition: types.h:40
#define PRESERVES_REGS(...)
Definition: types.h:32
#define Z88DK_CALLEE
Definition: types.h:45
#define Z88DK_FASTCALL
Definition: types.h:46
uint16_t palette_color_t
Definition: cgb.h:85
#define VBK_ATTRIBUTES
Definition: hardware.h:318
#define VBK_TILES
Definition: hardware.h:316
void b
Definition: gb.h:691
#define VDP_RSCY
Definition: hardware.h:133
#define VDP_R1
Definition: hardware.h:73
#define VDP_RSCX
Definition: hardware.h:128
#define VDP_SAT_TERM
Definition: hardware.h:186
#define R1_DISP_ON
Definition: hardware.h:78
void set_sprite_tile(uint8_t nb, uint8_t tile)
Definition: sms.h:731
void d
Definition: sms.h:101
void c
Definition: sms.h:101
void set_bkg_attributes(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles)
Definition: sms.h:613
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:622
void set_sprite_2bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:568
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
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:635
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:641
void joypad_ex(joypads_t *joypads) Z88DK_FASTCALL PRESERVES_REGS(iyh
void h
Definition: sms.h:230
void scroll_bkg(int8_t x, int8_t y)
Definition: sms.h:214
void set_sprite_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:562
void delay(uint16_t d) Z88DK_FASTCALL
uint16_t _current_2bpp_palette
void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_sprite_4bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:546
uint16_t _current_1bpp_colors
void set_default_palette(void)
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:580
void add_SIO(int_handler h) Z88DK_FASTCALL
void vmemcpy(uint16_t dst, const void *src, uint16_t size) Z88DK_CALLEE PRESERVES_REGS(iyh
void remove_JOY(int_handler h) Z88DK_FASTCALL
volatile uint8_t _shadow_OAM_OFF
void mode(uint8_t m) OLDCALL
uint8_t * set_attributed_tile_xy(uint8_t x, uint8_t y, uint16_t t) Z88DK_CALLEE PRESERVES_REGS(iyh
void add_JOY(int_handler h) Z88DK_FASTCALL
void WRITE_VDP_CMD(uint16_t cmd) Z88DK_FASTCALL PRESERVES_REGS(b
void set_bkg_1bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:577
void add_LCD(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(b
volatile uint8_t _shadow_OAM_base
Definition: gb.h:1753
uint8_t * set_tile_xy(uint8_t x, uint8_t y, uint8_t t) Z88DK_CALLEE PRESERVES_REGS(iyh
uint8_t joypad(void) OLDCALL PRESERVES_REGS(b
void move_bkg(uint8_t x, uint8_t y)
Definition: sms.h:209
uint8_t * get_bkg_xy_addr(uint8_t x, uint8_t y) Z88DK_CALLEE PRESERVES_REGS(iyh
void cgb_compatibility(void)
Definition: sms.h:525
uint8_t get_sprite_prop(uint8_t nb)
Definition: sms.h:750
#define VBK_REG
Definition: sms.h:34
void scroll_sprite(uint8_t nb, int8_t x, int8_t y)
Definition: sms.h:783
void add_TIM(int_handler h) Z88DK_FASTCALL
uint8_t get_mode(void) OLDCALL
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:607
void set_tile_1bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t colors) Z88DK_CALLEE PRESERVES_REGS(iyh
volatile uint16_t sys_time
uint8_t waitpad(uint8_t mask) Z88DK_FASTCALL PRESERVES_REGS(b
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
void SET_SHADOW_OAM_ADDRESS(void *address)
Definition: sms.h:711
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:602
void set_bkg_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:559
void wait_vbl_done(void) PRESERVES_REGS(b
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
void cpu_fast(void)
Definition: sms.h:529
uint8_t * set_attribute_xy(uint8_t x, uint8_t y, uint8_t a) Z88DK_CALLEE PRESERVES_REGS(iyh
void set_data(uint16_t dst, const void *src, uint16_t size) Z88DK_CALLEE PRESERVES_REGS(iyh
void(* int_handler)(void) NONBANKED
Definition: sms.h:167
#define __READ_VDP_REG(REG)
Definition: sms.h:99
void remove_TIM(int_handler h) Z88DK_FASTCALL
void remove_SIO(int_handler h) Z88DK_FASTCALL
void remove_VBL(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(iyh
void set_sprite_prop(uint8_t nb, uint8_t prop)
Definition: sms.h:746
#define set_bkg_tiles
Definition: sms.h:598
void set_2bpp_palette(uint16_t palette)
Definition: sms.h:555
void WRITE_VDP_DATA(uint16_t data) Z88DK_FASTCALL PRESERVES_REGS(b
#define __WRITE_VDP_REG(REG, v)
Definition: sms.h:98
void set_bkg_2bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:565
uint8_t _map_tile_offset
void remove_LCD(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(b
void set_sprite_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data)
Definition: sms.h:549
void iyh
Definition: sms.h:101
void move_sprite(uint8_t nb, uint8_t x, uint8_t y)
Definition: sms.h:767
uint8_t _submap_tile_offset
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_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
void fill_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint16_t tile) Z88DK_CALLEE PRESERVES_REGS(iyh
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:625
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:630
uint8_t joypad_init(uint8_t npads, joypads_t *joypads) Z88DK_CALLEE
void refresh_OAM(void)
void waitpadup(void) PRESERVES_REGS(b
void set_bkg_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data)
Definition: sms.h:542
void hide_sprite(uint8_t nb)
Definition: sms.h:794
void set_1bpp_colors(uint8_t fgcolor, uint8_t bgcolor)
Definition: sms.h:573
uint8_t cancel_pending_interrupts(void)
Definition: sms.h:205
void add_VBL(int_handler h) Z88DK_FASTCALL PRESERVES_REGS(d
void e
Definition: sms.h:101
void set_interrupts(uint8_t flags) Z88DK_FASTCALL
void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src)
Definition: sms.h:539
volatile uint8_t shadow_OAM[]
void iyl
Definition: sms.h:101
void set_palette(uint8_t first_palette, uint8_t nb_palettes, const palette_color_t *rgb_data) Z88DK_CALLEE
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
void vsync(void) PRESERVES_REGS(b
uint8_t get_sprite_tile(uint8_t nb)
Definition: sms.h:742
void l
Definition: sms.h:230
void set_vram_byte(uint8_t *addr, uint8_t v) Z88DK_CALLEE PRESERVES_REGS(iyh
void display_off(void)
Definition: sms.h:240
short int int16_t
Definition: stdint.h:44
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
Definition: gb.h:698