sgdk
vdp.h
Go to the documentation of this file.
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_
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines