sgdk
vdp.h
Go to the documentation of this file.
00001 
00020 #ifndef _VDP_H_
00021 #define _VDP_H_
00022 
00023 
00028 #define GFX_DATA_PORT           0xC00000
00029 
00033 #define GFX_CTRL_PORT           0xC00004
00034 
00038 #define GFX_HVCOUNTER_PORT      0xC00008
00039 
00044 #define VDP_FIFOEMPTY_FLAG      (1 << 9)
00045 
00049 #define VDP_FIFOFULL_FLAG       (1 << 8)
00050 
00054 #define VDP_VINTPENDING_FLAG    (1 << 7)
00055 
00059 #define VDP_SPROVERFLOW_FLAG    (1 << 6)
00060 
00064 #define VDP_SPRCOLLISION_FLAG   (1 << 5)
00065 
00069 #define VDP_ODDFRAME_FLAG       (1 << 4)
00070 
00074 #define VDP_VBLANK_FLAG         (1 << 3)
00075 
00079 #define VDP_HBLANK_FLAG         (1 << 2)
00080 
00084 #define VDP_DMABUSY_FLAG        (1 << 1)
00085 
00089 #define VDP_PALMODE_FLAG        (1 << 0)
00090 
00095 #define VDP_PLAN_A              VDP_BG_A
00096 
00100 #define VDP_PLAN_B              VDP_BG_B
00101 
00105 #define VDP_PLAN_WINDOW         VDP_WINDOW
00106 
00111 #define VDP_BG_A                bga_addr
00112 
00116 #define VDP_BG_B                bgb_addr
00117 
00121 #define VDP_WINDOW              window_addr
00122 
00126 #define VDP_HSCROLL_TABLE       hscrl_addr
00127 
00131 #define VDP_SPRITE_TABLE        slist_addr
00132 
00136 #define VDP_MAPS_START          maps_addr
00137 
00142 #define HSCROLL_PLANE           0
00143 
00147 #define HSCROLL_TILE            2
00148 
00152 #define HSCROLL_LINE            3
00153 
00158 #define VSCROLL_PLANE           0
00159 
00163 #define VSCROLL_COLUMN          1
00164 
00168 #define VSCROLL_2TILE           VSCROLL_COLUMN
00169 
00175 #define INTERLACED_NONE         0
00176 
00181 #define INTERLACED_MODE1        1
00182 
00187 #define INTERLACED_MODE2        2
00188 
00193 #define FONT_LEN    96
00194 
00199 #define TILE_SIZE               32
00200 #define TILE_INDEX_MASK         (0xFFFF / TILE_SIZE)
00201 
00206 #define TILE_SPACE              VDP_MAPS_START
00207 
00212 #define TILE_MAXNUM             (TILE_SPACE / TILE_SIZE)
00213 
00217 #define TILE_MAXINDEX           (TILE_MAXNUM - 1)
00218 
00222 #define TILE_SYSTEMINDEX        0x0000
00223 
00227 #define TILE_SYSTEMLENGTH       16
00228 
00231 #define TILE_SYSTEMLENGHT       TILE_SYSTEMLENGTH
00232 
00236 #define TILE_USERINDEX          (TILE_SYSTEMINDEX + TILE_SYSTEMLENGTH)
00237 
00241 #define TILE_FONTINDEX          (TILE_MAXNUM - FONT_LEN)
00242 
00246 #define TILE_SPRITEINDEX        (TILE_FONTINDEX - spriteVramSize)
00247 
00251 #define TILE_USERLENGTH         ((userTileMaxIndex - TILE_USERINDEX) + 1)
00252 
00255 #define TILE_USERLENGHT         TILE_USERLENGTH
00256 
00260 #define TILE_USERMAXINDEX       userTileMaxIndex
00261 
00265 #define TILE_SYSTEM             (TILE_SYSTEMINDEX * TILE_SIZE)
00266 
00270 #define TILE_USER               (TILE_USERINDEX * TILE_SIZE)
00271 
00275 #define TILE_FONT               (TILE_FONTINDEX * TILE_SIZE)
00276 
00281 #define PAL0                    0
00282 
00286 #define PAL1                    1
00287 
00291 #define PAL2                    2
00292 
00296 #define PAL3                    3
00297 
00302 #define GFX_READ_VRAM_ADDR(adr)     (((0x0000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00))
00303 
00307 #define GFX_READ_CRAM_ADDR(adr)     (((0x0000 + ((adr) & 0x7F)) << 16) + 0x20)
00308 
00312 #define GFX_READ_VSRAM_ADDR(adr)    (((0x0000 + ((adr) & 0x3F)) << 16) + 0x10)
00313 
00318 #define GFX_WRITE_VRAM_ADDR(adr)    (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00))
00319 
00323 #define GFX_WRITE_CRAM_ADDR(adr)    (((0xC000 + ((adr) & 0x7F)) << 16) + 0x00)
00324 
00328 #define GFX_WRITE_VSRAM_ADDR(adr)   (((0x4000 + ((adr) & 0x3F)) << 16) + 0x10)
00329 
00334 #define GFX_DMA_VRAM_ADDR(adr)      (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x80))
00335 
00339 #define GFX_DMA_CRAM_ADDR(adr)      (((0xC000 + ((adr) & 0x7F)) << 16) + 0x80)
00340 
00344 #define GFX_DMA_VSRAM_ADDR(adr)     (((0x4000 + ((adr) & 0x3F)) << 16) + 0x90)
00345 
00350 #define GFX_DMA_VRAMCOPY_ADDR(adr)  (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0xC0))
00351 
00356 #define GFX_VERT_SCROLL(adr)        GFX_WRITE_VSRAM_ADDR(adr)
00357 
00361 #define GFX_HORZ_SCROLL(adr)        GFX_WRITE_VRAM_ADDR(VDP_SCROLL_H + (adr))
00362 
00367 #define GET_VDPSTATUS(flag)         ((*(vu16*)(GFX_CTRL_PORT)) & (flag))
00368 
00372 #define IS_PALSYSTEM                GET_VDPSTATUS(VDP_PALMODE_FLAG)
00373 
00378 #define GET_HVCOUNTER               (*(vu16*)(GFX_HVCOUNTER_PORT))
00379 
00383 #define GET_HCOUNTER                (GET_HVCOUNTER & 0xFF)
00384 
00388 #define GET_VCOUNTER                (GET_HVCOUNTER >> 8)
00389 
00390 
00395 typedef enum
00396 {
00397     BG_A = 0, BG_B = 1, WINDOW = 2
00398 } VDPPlane;
00399 
00400 
00401 // used by define
00402 extern u16 window_addr;
00403 extern u16 bga_addr;
00404 extern u16 bgb_addr;
00405 extern u16 hscrl_addr;
00406 extern u16 slist_addr;
00407 extern u16 maps_addr;
00408 extern u16 userTileMaxIndex;
00409 
00414 extern u16 screenWidth;
00419 extern u16 screenHeight;
00426 extern u16 planeWidth;
00433 extern u16 planeHeight;
00440 extern u16 windowWidth;
00447 extern u16 planeWidthSft;
00454 extern u16 planeHeightSft;
00461 extern u16 windowWidthSft;
00462 
00463 
00470 void VDP_init();
00471 
00478 void VDP_resetScreen();
00479 
00488 u8   VDP_getReg(u16 reg);
00498 void VDP_setReg(u16 reg, u8 value);
00499 
00504 u8   VDP_getEnable();
00511 void VDP_setEnable(u8 value);
00512 
00519 u16  VDP_getScanlineNumber();
00527 u16  VDP_getScreenHeight();
00534 void VDP_setScreenHeight224();
00541 void VDP_setScreenHeight240();
00548 u16  VDP_getScreenWidth();
00553 void VDP_setScreenWidth256();
00558 void VDP_setScreenWidth320();
00559 
00564 u16  VDP_getPlaneWidth();
00569 u16  VDP_getPlaneHeight();
00586 void VDP_setPlaneSize(u16 w, u16 h, bool setupVram);
00591 void VDP_setPlanSize(u16 w, u16 h);
00592 
00601 u8 VDP_getHorizontalScrollingMode();
00610 u8 VDP_getVerticalScrollingMode();
00631 void VDP_setScrollingMode(u16 hscroll, u16 vscroll);
00632 
00637 u8 VDP_getBackgroundColor();
00642 void VDP_setBackgroundColor(u8 value);
00643 
00648 u8   VDP_getAutoInc();
00653 void VDP_setAutoInc(u8 value);
00654 
00659 u8 VDP_getDMAEnabled();
00666 void VDP_setDMAEnabled(u8 value);
00671 u8 VDP_getHVLatching();
00678 void VDP_setHVLatching(u8 value);
00685 void VDP_setHInterrupt(u8 value);
00692 void VDP_setExtInterrupt(u8 value);
00697 void VDP_setHilightShadow(u8 value);
00698 
00703 u8   VDP_getHIntCounter();
00711 void VDP_setHIntCounter(u8 value);
00712 
00717 u16 VDP_getBGAAddress();
00722 u16 VDP_getBGBAddress();
00727 u16 VDP_getAPlanAddress();
00732 u16 VDP_getBPlanAddress();
00737 u16 VDP_getWindowAddress();
00742 u16 VDP_getWindowPlanAddress();
00747 u16 VDP_getSpriteListAddress();
00752 u16 VDP_getHScrollTableAddress();
00753 
00763 void VDP_setBGAAddress(u16 value);
00773 void VDP_setBGBAddress(u16 value);
00778 void VDP_setAPlanAddress(u16 value);
00783 void VDP_setBPlanAddress(u16 value);
00793 void VDP_setWindowAddress(u16 value);
00798 void VDP_setWindowPlanAddress(u16 value);
00808 void VDP_setSpriteListAddress(u16 value);
00818 void VDP_setHScrollTableAddress(u16 value);
00819 
00832 void VDP_setScanMode(u16 mode);
00833 
00844 void VDP_setWindowHPos(u16 right, u16 pos);
00855 void VDP_setWindowVPos(u16 down, u16 pos);
00856 
00862 void VDP_waitDMACompletion();
00867 void VDP_waitFIFOEmpty();
00868 
00878 bool VDP_waitVInt();
00890 bool VDP_waitVBlank(bool forceNext);
00899 bool VDP_waitVSync();
00909 void VDP_waitVActive(bool forceNext);
00910 
00918 u16 VDP_getAdjustedVCounter();
00919 
00932 void VDP_showFPS(u16 asFloat);
00941 void VDP_showCPULoad();
00942 
00943 
00944 #endif // _VDP_H_
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines