sgdk
|
00001 00020 #ifndef _VDP_H_ 00021 #define _VDP_H_ 00022 00023 00028 #define VDP_DATA_PORT 0xC00000 00029 00033 #define VDP_CTRL_PORT 0xC00004 00034 00038 #define VDP_HVCOUNTER_PORT 0xC00008 00039 00044 #define GFX_DATA_PORT _Pragma("GCC error \"This definition is deprecated, use VDP_DATA_PORT instead.\"") 00045 00050 #define GFX_CTRL_PORT _Pragma("GCC error \"This definition is deprecated, use VDP_CTRL_PORT instead.\"") 00051 00055 #define GFX_HVCOUNTER_PORT _Pragma("GCC error \"This definition is deprecated, use VDP_HVCOUNTER_PORT instead.\"") 00056 00057 00062 #define VDP_FIFOEMPTY_FLAG (1 << 9) 00063 00067 #define VDP_FIFOFULL_FLAG (1 << 8) 00068 00072 #define VDP_VINTPENDING_FLAG (1 << 7) 00073 00077 #define VDP_SPROVERFLOW_FLAG (1 << 6) 00078 00082 #define VDP_SPRCOLLISION_FLAG (1 << 5) 00083 00087 #define VDP_ODDFRAME_FLAG (1 << 4) 00088 00092 #define VDP_VBLANK_FLAG (1 << 3) 00093 00097 #define VDP_HBLANK_FLAG (1 << 2) 00098 00102 #define VDP_DMABUSY_FLAG (1 << 1) 00103 00107 #define VDP_PALMODE_FLAG (1 << 0) 00108 00113 #define VDP_PLAN_A _Pragma("GCC error \"This definition is deprecated, use VDP_BG_A instead.\"") 00114 00118 #define VDP_PLAN_B _Pragma("GCC error \"This definition is deprecated, use VDP_BG_B instead.\"") 00119 00123 #define VDP_PLAN_WINDOW _Pragma("GCC error \"This definition is deprecated, use VDP_WINDOW instead.\"") 00124 00129 #define VDP_BG_A bga_addr 00130 00134 #define VDP_BG_B bgb_addr 00135 00139 #define VDP_WINDOW window_addr 00140 00144 #define VDP_HSCROLL_TABLE hscrl_addr 00145 00149 #define VDP_SPRITE_TABLE slist_addr 00150 00154 #define VDP_MAPS_START maps_addr 00155 00160 #define HSCROLL_PLANE 0 00161 00165 #define HSCROLL_TILE 2 00166 00170 #define HSCROLL_LINE 3 00171 00176 #define VSCROLL_PLANE 0 00177 00181 #define VSCROLL_COLUMN 1 00182 00186 #define VSCROLL_2TILE _Pragma("GCC error \"This definition is deprecated, use VSCROLL_COLUMN instead.\"") 00187 00193 #define INTERLACED_NONE 0 00194 00199 #define INTERLACED_MODE1 1 00200 00205 #define INTERLACED_MODE2 2 00206 00211 #define FONT_LEN 96 00212 00217 #define TILE_SIZE 32 00218 #define TILE_INDEX_MASK (0xFFFF / TILE_SIZE) 00219 00224 #define TILE_SPACE VDP_MAPS_START 00225 00230 #define TILE_MAX_NUM (TILE_SPACE / TILE_SIZE) 00231 00235 #define TILE_MAX_INDEX (TILE_MAXNUM - 1) 00236 00240 #define TILE_SYSTEM_INDEX 0x0000 00241 00245 #define TILE_SYSTEM_LENGTH 16 00246 00250 #define TILE_USER_INDEX (TILE_SYSTEM_INDEX + TILE_SYSTEM_LENGTH) 00251 00255 #define TILE_FONT_INDEX (TILE_MAX_NUM - FONT_LEN) 00256 00260 #define TILE_SPRITE_INDEX (TILE_FONT_INDEX - spriteVramSize) 00261 00265 #define TILE_USER_LENGTH ((userTileMaxIndex - TILE_USER_INDEX) + 1) 00266 00270 #define TILE_USER_MAX_INDEX userTileMaxIndex 00271 00276 #define TILE_MAXNUM _Pragma("GCC error \"This definition is deprecated, use TILE_MAX_NUM instead.\"") 00277 00281 #define TILE_MAXINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_MAX_INDEX instead.\"") 00282 00285 #define TILE_SYSTEM_LENGHT _Pragma("GCC error \"This definition is deprecated, use TILE_SYSTEM_LENGTH instead.\"") 00286 00290 #define TILE_SYSTEMLENGTH _Pragma("GCC error \"This definition is deprecated, use TILE_SYSTEM_LENGTH instead.\"") 00291 00295 #define TILE_SYSTEMINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_SYSTEM_INDEX instead.\"") 00296 00300 #define TILE_USERINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_USER_INDEX instead.\"") 00301 00305 #define TILE_FONTINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_FONT_INDEX instead.\"") 00306 00310 #define TILE_SPRITEINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_SPRITE_INDEX instead.\"") 00311 00315 #define TILE_USERLENGTH _Pragma("GCC error \"This definition is deprecated, use TILE_USER_LENGTH instead.\"") 00316 00320 #define TILE_USERMAXINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_USER_MAX_INDEX instead.\"") 00321 00326 #define TILE_SYSTEM (TILE_SYSTEM_INDEX * TILE_SIZE) 00327 00331 #define TILE_USER (TILE_USER_INDEX * TILE_SIZE) 00332 00336 #define TILE_FONT (TILE_FONT_INDEX * TILE_SIZE) 00337 00342 #define PAL0 0 00343 00347 #define PAL1 1 00348 00352 #define PAL2 2 00353 00357 #define PAL3 3 00358 00363 #define VDP_READ_VRAM_ADDR(adr) (((0x0000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00)) 00364 00368 #define VDP_READ_CRAM_ADDR(adr) (((0x0000 + ((adr) & 0x7F)) << 16) + 0x20) 00369 00373 #define VDP_READ_VSRAM_ADDR(adr) (((0x0000 + ((adr) & 0x7F)) << 16) + 0x10) 00374 00379 #define VDP_WRITE_VRAM_ADDR(adr) (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00)) 00380 00384 #define VDP_WRITE_CRAM_ADDR(adr) (((0xC000 + ((adr) & 0x7F)) << 16) + 0x00) 00385 00389 #define VDP_WRITE_VSRAM_ADDR(adr) (((0x4000 + ((adr) & 0x7F)) << 16) + 0x10) 00390 00395 #define VDP_DMA_VRAM_ADDR(adr) (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x80)) 00396 00400 #define VDP_DMA_CRAM_ADDR(adr) (((0xC000 + ((adr) & 0x7F)) << 16) + 0x80) 00401 00405 #define VDP_DMA_VSRAM_ADDR(adr) (((0x4000 + ((adr) & 0x7F)) << 16) + 0x90) 00406 00411 #define VDP_DMA_VRAMCOPY_ADDR(adr) (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0xC0)) 00412 00417 #define VDP_VERT_SCROLL(adr) VDP_WRITE_VSRAM_ADDR(adr) 00418 00422 #define VDP_HORZ_SCROLL(adr) VDP_WRITE_VRAM_ADDR(VDP_SCROLL_H + (adr)) 00423 00428 #define GFX_READ_VRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_READ_VRAM_ADDR instead.\"")) 00429 00433 #define GFX_READ_CRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_READ_CRAM_ADDR instead.\"") 00434 00438 #define GFX_READ_VSRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_READ_VSRAM_ADDR instead.\"") 00439 00443 #define GFX_WRITE_VRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_WRITE_VRAM_ADDR instead.\"") 00444 00448 #define GFX_WRITE_CRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_WRITE_CRAM_ADDR instead.\"") 00449 00453 #define GFX_WRITE_VSRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_WRITE_VSRAM_ADDR instead.\"") 00454 00458 #define GFX_DMA_VRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_VRAM_ADDR instead.\"") 00459 00463 #define GFX_DMA_CRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_CRAM_ADDR instead.\"") 00464 00468 #define GFX_DMA_VSRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_VSRAM_ADDR instead.\"") 00469 00473 #define GFX_DMA_VRAMCOPY_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_VRAMCOPY_ADDR instead.\"") 00474 00478 #define GFX_VERT_SCROLL(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_VERT_SCROLL instead.\"") 00479 00483 #define GFX_HORZ_SCROLL(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_HORZ_SCROLL instead.\"") 00484 00485 00490 #define GET_VDP_STATUS(flag) ((*(vu16*)(VDP_CTRL_PORT)) & (flag)) 00491 00495 #define IS_PAL_SYSTEM GET_VDP_STATUS(VDP_PALMODE_FLAG) 00496 00501 #define GET_HVCOUNTER (*(vu16*)(VDP_HVCOUNTER_PORT)) 00502 00506 #define GET_HCOUNTER (GET_HVCOUNTER & 0xFF) 00507 00511 #define GET_VCOUNTER (GET_HVCOUNTER >> 8) 00512 00513 00518 typedef enum 00519 { 00520 BG_A = 0, BG_B = 1, WINDOW = 2 00521 } VDPPlane; 00522 00523 00524 // used by define 00525 extern u16 window_addr; 00526 extern u16 bga_addr; 00527 extern u16 bgb_addr; 00528 extern u16 hscrl_addr; 00529 extern u16 slist_addr; 00530 extern u16 maps_addr; 00531 extern u16 userTileMaxIndex; 00532 00537 extern u16 screenWidth; 00542 extern u16 screenHeight; 00549 extern u16 planeWidth; 00556 extern u16 planeHeight; 00563 extern u16 windowWidth; 00570 extern u16 planeWidthSft; 00577 extern u16 planeHeightSft; 00584 extern u16 windowWidthSft; 00585 00586 00593 void VDP_init(void); 00594 00601 void VDP_resetScreen(void); 00602 00611 u8 VDP_getReg(u16 reg); 00621 void VDP_setReg(u16 reg, u8 value); 00622 00627 bool VDP_getEnable(void); 00632 bool VDP_isEnable(void); 00639 void VDP_setEnable(bool value); 00640 00647 u16 VDP_getScanlineNumber(void); 00655 u16 VDP_getScreenHeight(void); 00662 void VDP_setScreenHeight224(void); 00669 void VDP_setScreenHeight240(void); 00676 u16 VDP_getScreenWidth(void); 00681 void VDP_setScreenWidth256(void); 00686 void VDP_setScreenWidth320(void); 00687 00692 u16 VDP_getPlaneWidth(void); 00697 u16 VDP_getPlaneHeight(void); 00714 void VDP_setPlaneSize(u16 w, u16 h, bool setupVram); 00719 #define VDP_setPlanSize(w, h) _Pragma("GCC error \"This definition is deprecated, use VDP_setPlaneSize(..) instead.\"") 00720 00729 u8 VDP_getHorizontalScrollingMode(void); 00738 u8 VDP_getVerticalScrollingMode(void); 00759 void VDP_setScrollingMode(u16 hscroll, u16 vscroll); 00760 00765 u8 VDP_getBackgroundColor(void); 00770 void VDP_setBackgroundColor(u8 value); 00771 00776 u8 VDP_getAutoInc(void); 00781 void VDP_setAutoInc(u8 value); 00782 00787 u8 VDP_getDMAEnabled(void); 00794 void VDP_setDMAEnabled(bool value); 00799 u8 VDP_getHVLatching(void); 00806 void VDP_setHVLatching(bool value); 00813 void VDP_setVInterrupt(bool value); 00820 void VDP_setHInterrupt(bool value); 00827 void VDP_setExtInterrupt(bool value); 00832 void VDP_setHilightShadow(bool value); 00833 00838 u8 VDP_getHIntCounter(void); 00846 void VDP_setHIntCounter(u8 value); 00847 00852 u16 VDP_getBGAAddress(void); 00857 u16 VDP_getBGBAddress(void); 00862 #define VDP_getAPlanAddress() _Pragma("GCC error \"This definition is deprecated, use VDP_getBGAAddress() instead.\"") 00863 00867 #define VDP_getBPlanAddress() _Pragma("GCC error \"This definition is deprecated, use VDP_getBGBAddress() instead.\"") 00868 00873 u16 VDP_getWindowAddress(void); 00878 #define VDP_getWindowPlanAddress() _Pragma("GCC error \"This definition is deprecated, use VDP_getWindowAddress() instead.\"") 00879 00883 u16 VDP_getSpriteListAddress(void); 00888 u16 VDP_getHScrollTableAddress(void); 00889 00899 void VDP_setBGAAddress(u16 value); 00909 void VDP_setBGBAddress(u16 value); 00914 #define VDP_setAPlanAddress(value) \ 00915 _Pragma("GCC error \"This definition is deprecated, use VDP_setBGAAddress(..) instead.\"") 00916 00920 #define VDP_setBPlanAddress(value) \ 00921 _Pragma("GCC error \"This definition is deprecated, use VDP_setBGBAddress(..) instead.\"") 00922 00931 void VDP_setWindowAddress(u16 value); 00936 #define VDP_setWindowPlanAddress(value) _Pragma("GCC error \"This definition is deprecated, use VDP_setWindowAddress(..) instead.\"") 00937 00946 void VDP_setSpriteListAddress(u16 value); 00956 void VDP_setHScrollTableAddress(u16 value); 00957 00970 void VDP_setScanMode(u16 mode); 00971 00982 void VDP_setWindowHPos(u16 right, u16 pos); 00993 void VDP_setWindowVPos(u16 down, u16 pos); 00994 00999 void VDP_waitDMACompletion(void); 01004 void VDP_waitFIFOEmpty(void); 01005 01015 bool VDP_waitVInt(void); 01027 bool VDP_waitVBlank(bool forceNext); 01036 bool VDP_waitVSync(void); 01046 void VDP_waitVActive(bool forceNext); 01047 01055 u16 VDP_getAdjustedVCounter(void); 01056 01069 void VDP_showFPS(u16 asFloat); 01078 void VDP_showCPULoad(void); 01079 01080 01081 #endif // _VDP_H_