SGDK
A free and open development kit for the Sega Mega Drive
Loading...
Searching...
No Matches
vdp.h
Go to the documentation of this file.
1
19
20#ifndef _VDP_H_
21#define _VDP_H_
22
23
28#define VDP_DATA_PORT 0xC00000
33#define VDP_CTRL_PORT 0xC00004
38#define VDP_HVCOUNTER_PORT 0xC00008
39
44#define GFX_DATA_PORT _Pragma("GCC error \"This definition is deprecated, use VDP_DATA_PORT instead.\"")
45
50#define GFX_CTRL_PORT _Pragma("GCC error \"This definition is deprecated, use VDP_CTRL_PORT instead.\"")
55#define GFX_HVCOUNTER_PORT _Pragma("GCC error \"This definition is deprecated, use VDP_HVCOUNTER_PORT instead.\"")
56
57
62#define VDP_FIFOEMPTY_FLAG (1 << 9)
67#define VDP_FIFOFULL_FLAG (1 << 8)
72#define VDP_VINTPENDING_FLAG (1 << 7)
77#define VDP_SPROVERFLOW_FLAG (1 << 6)
82#define VDP_SPRCOLLISION_FLAG (1 << 5)
87#define VDP_ODDFRAME_FLAG (1 << 4)
92#define VDP_VBLANK_FLAG (1 << 3)
97#define VDP_HBLANK_FLAG (1 << 2)
102#define VDP_DMABUSY_FLAG (1 << 1)
107#define VDP_PALMODE_FLAG (1 << 0)
108
113#define VDP_PLAN_A _Pragma("GCC error \"This definition is deprecated, use VDP_BG_A instead.\"")
118#define VDP_PLAN_B _Pragma("GCC error \"This definition is deprecated, use VDP_BG_B instead.\"")
123#define VDP_PLAN_WINDOW _Pragma("GCC error \"This definition is deprecated, use VDP_WINDOW instead.\"")
124
129#define VDP_BG_A bga_addr
134#define VDP_BG_B bgb_addr
139#define VDP_WINDOW window_addr
144#define VDP_HSCROLL_TABLE hscrl_addr
149#define VDP_SPRITE_TABLE slist_addr
154#define VDP_MAPS_START maps_addr
155
160#define HSCROLL_PLANE 0
165#define HSCROLL_TILE 2
170#define HSCROLL_LINE 3
171
176#define VSCROLL_PLANE 0
181#define VSCROLL_COLUMN 1
186#define VSCROLL_2TILE _Pragma("GCC error \"This definition is deprecated, use VSCROLL_COLUMN instead.\"")
187
193#define INTERLACED_NONE 0
199#define INTERLACED_MODE1 1
205#define INTERLACED_MODE2 2
206
211#define FONT_LEN 96
212
217#define TILE_SIZE 32
218#define TILE_INDEX_MASK (0xFFFF / TILE_SIZE)
219
224#define TILE_SPACE VDP_MAPS_START
225
230#define TILE_MAX_NUM (TILE_SPACE / TILE_SIZE)
235#define TILE_MAX_INDEX (TILE_MAXNUM - 1)
240#define TILE_SYSTEM_INDEX 0x0000
245#define TILE_SYSTEM_LENGTH 16
250#define TILE_USER_INDEX (TILE_SYSTEM_INDEX + TILE_SYSTEM_LENGTH)
255#define TILE_FONT_INDEX (TILE_MAX_NUM - FONT_LEN)
260#define TILE_SPRITE_INDEX (TILE_FONT_INDEX - spriteVramSize)
265#define TILE_USER_LENGTH ((userTileMaxIndex - TILE_USER_INDEX) + 1)
270#define TILE_USER_MAX_INDEX userTileMaxIndex
271
276#define TILE_MAXNUM _Pragma("GCC error \"This definition is deprecated, use TILE_MAX_NUM instead.\"")
281#define TILE_MAXINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_MAX_INDEX instead.\"")
285#define TILE_SYSTEM_LENGHT _Pragma("GCC error \"This definition is deprecated, use TILE_SYSTEM_LENGTH instead.\"")
290#define TILE_SYSTEMLENGTH _Pragma("GCC error \"This definition is deprecated, use TILE_SYSTEM_LENGTH instead.\"")
295#define TILE_SYSTEMINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_SYSTEM_INDEX instead.\"")
300#define TILE_USERINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_USER_INDEX instead.\"")
305#define TILE_FONTINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_FONT_INDEX instead.\"")
310#define TILE_SPRITEINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_SPRITE_INDEX instead.\"")
315#define TILE_USERLENGTH _Pragma("GCC error \"This definition is deprecated, use TILE_USER_LENGTH instead.\"")
320#define TILE_USERMAXINDEX _Pragma("GCC error \"This definition is deprecated, use TILE_USER_MAX_INDEX instead.\"")
321
326#define TILE_SYSTEM (TILE_SYSTEM_INDEX * TILE_SIZE)
331#define TILE_USER (TILE_USER_INDEX * TILE_SIZE)
336#define TILE_FONT (TILE_FONT_INDEX * TILE_SIZE)
337
342#define PAL0 0
347#define PAL1 1
352#define PAL2 2
357#define PAL3 3
358
363#define VDP_READ_VRAM_ADDR(adr) (((0x0000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00))
368#define VDP_READ_CRAM_ADDR(adr) (((0x0000 + ((adr) & 0x7F)) << 16) + 0x20)
373#define VDP_READ_VSRAM_ADDR(adr) (((0x0000 + ((adr) & 0x7F)) << 16) + 0x10)
374
379#define VDP_WRITE_VRAM_ADDR(adr) (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00))
384#define VDP_WRITE_CRAM_ADDR(adr) (((0xC000 + ((adr) & 0x7F)) << 16) + 0x00)
389#define VDP_WRITE_VSRAM_ADDR(adr) (((0x4000 + ((adr) & 0x7F)) << 16) + 0x10)
390
395#define VDP_DMA_VRAM_ADDR(adr) (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x80))
400#define VDP_DMA_CRAM_ADDR(adr) (((0xC000 + ((adr) & 0x7F)) << 16) + 0x80)
405#define VDP_DMA_VSRAM_ADDR(adr) (((0x4000 + ((adr) & 0x7F)) << 16) + 0x90)
406
411#define VDP_DMA_VRAMCOPY_ADDR(adr) (((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0xC0))
412
417#define VDP_VERT_SCROLL(adr) VDP_WRITE_VSRAM_ADDR(adr)
422#define VDP_HORZ_SCROLL(adr) VDP_WRITE_VRAM_ADDR(VDP_SCROLL_H + (adr))
423
428#define GFX_READ_VRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_READ_VRAM_ADDR instead.\""))
433#define GFX_READ_CRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_READ_CRAM_ADDR instead.\"")
438#define GFX_READ_VSRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_READ_VSRAM_ADDR instead.\"")
443#define GFX_WRITE_VRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_WRITE_VRAM_ADDR instead.\"")
448#define GFX_WRITE_CRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_WRITE_CRAM_ADDR instead.\"")
453#define GFX_WRITE_VSRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_WRITE_VSRAM_ADDR instead.\"")
458#define GFX_DMA_VRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_VRAM_ADDR instead.\"")
463#define GFX_DMA_CRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_CRAM_ADDR instead.\"")
468#define GFX_DMA_VSRAM_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_VSRAM_ADDR instead.\"")
473#define GFX_DMA_VRAMCOPY_ADDR(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_DMA_VRAMCOPY_ADDR instead.\"")
478#define GFX_VERT_SCROLL(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_VERT_SCROLL instead.\"")
483#define GFX_HORZ_SCROLL(adr) _Pragma("GCC error \"This definition is deprecated, use VDP_HORZ_SCROLL instead.\"")
484
485
490#define GET_VDP_STATUS(flag) ((*(vu16*)(VDP_CTRL_PORT)) & (flag))
495#define IS_PAL_SYSTEM GET_VDP_STATUS(VDP_PALMODE_FLAG)
496
501#define GET_HVCOUNTER (*(vu16*)(VDP_HVCOUNTER_PORT))
506#define GET_HCOUNTER (GET_HVCOUNTER & 0xFF)
511#define GET_VCOUNTER (GET_HVCOUNTER >> 8)
512
513
518typedef enum
519{
520 BG_A = 0, BG_B = 1, WINDOW = 2
521} VDPPlane;
522
523
524// used by define
525extern u16 window_addr;
526extern u16 bga_addr;
527extern u16 bgb_addr;
528extern u16 hscrl_addr;
529extern u16 slist_addr;
530extern u16 maps_addr;
531extern u16 userTileMaxIndex;
532
537extern u16 screenWidth;
542extern u16 screenHeight;
549extern u16 planeWidth;
556extern u16 planeHeight;
563extern u16 windowWidth;
570extern u16 planeWidthSft;
577extern u16 planeHeightSft;
584extern u16 windowWidthSft;
585
586
593void VDP_init(void);
594
601void VDP_resetScreen(void);
602
611u8 VDP_getReg(u16 reg);
621void VDP_setReg(u16 reg, u8 value);
622
627bool VDP_getEnable(void);
632bool VDP_isEnable(void);
639void VDP_setEnable(bool value);
640
662void VDP_setScreenHeight224(void);
669void VDP_setScreenHeight240(void);
681void VDP_setScreenWidth256(void);
686void VDP_setScreenWidth320(void);
687
714void VDP_setPlaneSize(u16 w, u16 h, bool setupVram);
719#define VDP_setPlanSize(w, h) _Pragma("GCC error \"This definition is deprecated, use VDP_setPlaneSize(..) instead.\"")
720
759void VDP_setScrollingMode(u16 hscroll, u16 vscroll);
760
770void VDP_setBackgroundColor(u8 value);
771
776u8 VDP_getAutoInc(void);
781void VDP_setAutoInc(u8 value);
782
794void VDP_setDMAEnabled(bool value);
806void VDP_setHVLatching(bool value);
813void VDP_setVInterrupt(bool value);
820void VDP_setHInterrupt(bool value);
827void VDP_setExtInterrupt(bool value);
832void VDP_setHilightShadow(bool value);
833
846void VDP_setHIntCounter(u8 value);
847
862#define VDP_getAPlanAddress() _Pragma("GCC error \"This definition is deprecated, use VDP_getBGAAddress() instead.\"")
867#define VDP_getBPlanAddress() _Pragma("GCC error \"This definition is deprecated, use VDP_getBGBAddress() instead.\"")
868
878#define VDP_getWindowPlanAddress() _Pragma("GCC error \"This definition is deprecated, use VDP_getWindowAddress() instead.\"")
889
899void VDP_setBGAAddress(u16 value);
909void VDP_setBGBAddress(u16 value);
914#define VDP_setAPlanAddress(value) \
915_Pragma("GCC error \"This definition is deprecated, use VDP_setBGAAddress(..) instead.\"")
916
920#define VDP_setBPlanAddress(value) \
921_Pragma("GCC error \"This definition is deprecated, use VDP_setBGBAddress(..) instead.\"")
922
931void VDP_setWindowAddress(u16 value);
936#define VDP_setWindowPlanAddress(value) _Pragma("GCC error \"This definition is deprecated, use VDP_setWindowAddress(..) instead.\"")
946void VDP_setSpriteListAddress(u16 value);
957
970void VDP_setScanMode(u16 mode);
971
982void VDP_setWindowHPos(u16 right, u16 pos);
993void VDP_setWindowVPos(u16 down, u16 pos);
998void VDP_setWindowOff();
1006void VDP_setWindowOnTop(u16 rows);
1014void VDP_setWindowOnBottom(u16 rows);
1022void VDP_setWindowOnLeft(u16 cols);
1030void VDP_setWindowOnRight(u16 cols);
1036
1041void VDP_waitDMACompletion(void);
1046void VDP_waitFIFOEmpty(void);
1047
1057bool VDP_waitVInt(void);
1069bool VDP_waitVBlank(bool forceNext);
1078bool VDP_waitVSync(void);
1088void VDP_waitVActive(bool forceNext);
1089
1098
1115void VDP_showFPS(u16 asFloat, u16 x, u16 y);
1129void VDP_showCPULoad(u16 x, u16 y);
1130
1131
1132#endif // _VDP_H_
unsigned short u16
Definition types.h:100
unsigned char u8
Definition types.h:95
void VDP_setScanMode(u16 mode)
Sets the scan mode of the display.
Definition vdp.c:765
void VDP_setWindowOff()
Turns off the window.
Definition vdp.c:811
void VDP_setSpriteListAddress(u16 value)
Set VRAM address (location) of Sprite list. The address should be at multiple of $400 in H40 and $20...
Definition vdp.c:736
void VDP_setHIntCounter(u8 value)
Set Horizontal interrupt counter value.
Definition vdp.c:657
void VDP_setBGBAddress(u16 value)
Set VRAM address (location) of BG B tilemap. The address should be at multiple of $2000 Ex: VDP_...
Definition vdp.c:707
u8 VDP_getAutoInc(void)
Returns auto increment register value.
Definition vdp.c:559
void VDP_waitFIFOEmpty(void)
Wait for VDP FIFO to be empty.
Definition vdp.c:847
void VDP_setWindowOnBottom(u16 rows)
Positions the window from the bottom edge of the screen by the specified number of rows (tiles).
Definition vdp.c:822
void VDP_setWindowAddress(u16 value)
Set VRAM address (location) of Window tilemap. The address should be at multiple of $1000 in H40 and...
Definition vdp.c:720
void VDP_setHInterrupt(bool value)
Enable or Disable Horizontal interrupt.
Definition vdp.c:618
void VDP_resetScreen(void)
Reset background planes and palettes.
Definition vdp.c:134
VDPPlane
Type used to define on which plane to work (used by some methods).
Definition vdp.h:519
void VDP_setBGAAddress(u16 value)
Set VRAM address (location) of BG A tilemap. The address should be at multiple of $2000 Ex: VDP_s...
Definition vdp.c:694
u8 VDP_getBackgroundColor(void)
Returns the background color index.
Definition vdp.c:543
void VDP_setAutoInc(u8 value)
Set auto increment register value.
Definition vdp.c:564
void VDP_setHVLatching(bool value)
Set HV counter latching on INT2 (used for light gun)
Definition vdp.c:596
void VDP_waitVActive(bool forceNext)
Wait for next vertical active area (end of vertical blank period)
Definition vdp.c:935
void VDP_setVInterrupt(bool value)
Enable or Disable Vertical interrupt (it's strongly recommanded to keep it enabled).
Definition vdp.c:607
void VDP_setWindowOnTop(u16 rows)
Positions the window from the top edge of the screen by the specified number of rows (tiles).
Definition vdp.c:817
u16 VDP_getSpriteListAddress(void)
Get VRAM address (location) of Sprite list.
Definition vdp.c:683
void VDP_setScreenHeight224(void)
Set vertical resolution to 224 pixels.
Definition vdp.c:351
u8 VDP_getHVLatching(void)
Returns HV counter latching on INT2 (used for light gun)
Definition vdp.c:591
void VDP_setWindowOnRight(u16 cols)
Positions the window from the right edge of the screen by the specified number of columns,...
Definition vdp.c:832
u16 VDP_getScanlineNumber(void)
Returns number of total scanline.
Definition vdp.c:340
void VDP_init(void)
Initialize the whole VDP sub system.
Definition vdp.c:65
void VDP_setReg(u16 reg, u8 value)
Set VDP register value.
Definition vdp.c:200
void VDP_setWindowHPos(u16 right, u16 pos)
Sets the window Horizontal position.
Definition vdp.c:783
bool VDP_waitVSync(void)
Wait for Vertical Synchro.
Definition vdp.c:953
u16 VDP_getScreenHeight(void)
Returns vertical screen resolution.
Definition vdp.c:346
void VDP_setHScrollTableAddress(u16 value)
Set VRAM address (location) of H Scroll table. The address should be at multiple of $400 Ex: VDP...
Definition vdp.c:752
void VDP_setScreenWidth320(void)
Set horizontal resolution to 320 pixels.
Definition vdp.c:394
u16 VDP_getBGAAddress(void)
Get VRAM address (location) of BG A tilemap.
Definition vdp.c:668
void VDP_setWindowVPos(u16 down, u16 pos)
Sets the window Vertical position.
Definition vdp.c:797
u16 VDP_getAdjustedVCounter(void)
Return an enhanced V Counter representation.
Definition vdp.c:990
u16 VDP_getBGBAddress(void)
Get VRAM address (location) of BG B tilemap.
Definition vdp.c:673
u8 VDP_getHIntCounter(void)
Get Horizontal interrupt counter value.
Definition vdp.c:652
void VDP_setEnable(bool value)
Set VDP enable state.
Definition vdp.c:328
u8 VDP_getReg(u16 reg)
Get VDP register value.
Definition vdp.c:194
u8 VDP_getDMAEnabled(void)
Returns DMA enabled state.
Definition vdp.c:575
void VDP_showCPULoad(u16 x, u16 y)
Display the estimated CPU load (in %).
Definition vdp.c:1014
bool VDP_getEnable(void)
Returns VDP enable state.
Definition vdp.c:318
u16 VDP_getScreenWidth(void)
Returns horizontal screen resolution.
Definition vdp.c:376
void VDP_setExtInterrupt(bool value)
Enable or Disable External interrupt.
Definition vdp.c:629
void VDP_waitDMACompletion(void)
Wait for DMA operation to complete - same as DMA_waitCompletion()
Definition vdp.c:842
bool VDP_waitVBlank(bool forceNext)
Wait for next vertical blank period (same as VDP_waitVSync())
Definition vdp.c:887
void VDP_setBackgroundColor(u8 value)
Set the background color index.
Definition vdp.c:548
void VDP_setScrollingMode(u16 hscroll, u16 vscroll)
Set plane scrolling mode.
Definition vdp.c:531
void VDP_setScreenWidth256(void)
Set horizontal resolution to 256 pixels.
Definition vdp.c:381
u16 VDP_getPlaneHeight(void)
Return background plane height (in tile).
Definition vdp.c:413
void VDP_setDMAEnabled(bool value)
Set DMA enabled state.
Definition vdp.c:580
void VDP_setPlaneSize(u16 w, u16 h, bool setupVram)
Set background plane size (in tile). WARNING: take attention to properly setup VRAM so tilemaps has ...
Definition vdp.c:418
u16 VDP_getHScrollTableAddress(void)
Get VRAM address (location) of H SCroll table.
Definition vdp.c:688
u16 VDP_getWindowAddress(void)
Get VRAM address (location) of Window tilemap.
Definition vdp.c:678
u8 VDP_getHorizontalScrollingMode(void)
Returns plane horizontal scrolling mode.
Definition vdp.c:526
bool VDP_waitVInt(void)
Wait for next Vertical Interruption.
Definition vdp.c:853
void VDP_setHilightShadow(bool value)
Enable or Disable Hilight / Shadow effect.
Definition vdp.c:640
u16 VDP_getPlaneWidth(void)
Return background plane width (in tile).
Definition vdp.c:408
bool VDP_isEnable(void)
Returns VDP enable state.
Definition vdp.c:323
void VDP_showFPS(u16 asFloat, u16 x, u16 y)
Display number of Frame Per Second.
Definition vdp.c:996
u8 VDP_getVerticalScrollingMode(void)
Returns plane vertical scrolling mode.
Definition vdp.c:521
void VDP_setWindowOnLeft(u16 cols)
Positions the window from the left edge of the screen by the specified number of columns,...
Definition vdp.c:827
void VDP_setScreenHeight240(void)
Set vertical resolution to 240 pixels.
Definition vdp.c:362
void VDP_setWindowFullScreen()
Positions the window to full screen.
Definition vdp.c:837