Modules/vdp
From MSX Game Library
< Modules
The vdp module is a major module that handles all display-related tasks: choice of screen modes, VRAM writing and reading, sprite management, management of advanced MSX2 commands, etc. This module manages all the graphics processors (VDPs) of the MSX1 (TI TMS9918), MSX2 (Yamaha V9938) and MSX2+ (Yamaha V9958). This module manages all the graphics processors (VDPs) of the MSX1 (TI TMS9918), MSX2 (Yamaha V9938) and MSX2+ (Yamaha V9958).
Note: For the Yamaha V9990 extension, see module v9990.
Usage
To use this module, include "vdp.h" in your source code, and add "vdp" to the modules list (LibModules) in your project's configuration file (project_config.js).
Links
For more information about the 3 generations of MSX's VDP, please check:
- Texas Instruments VDP Programmer’s Guide (MSX Assembly Page)
- Texas Instruments TMS9918 (MSX Resource Center)
- Yamaha V9938 (MSX-VIDEO) Technical Data Book Programmer’s Guide (GR8BIT)
- Yamaha V9938 (MSX Resource Center)
- Yamaha V9958 Technical Data Book (MSX Resource Center)
- Yamaha V9958 (MSX Resource Center)
Samples
See module use cases in the sample programs:
- s_sm1 (sprite mode 1)
- s_sprite (sprite mode 2 and screen split)
- s_vdpcmd (VDP commands)
- s_gm3 (Undocumented mode and screen split)
Settings
Library configuration (msxgl_config.h):
// VRAM addressing unit // - VDP_VRAM_ADDR_14 ............. Use 14-bits 16K VRAM addressing for MSX1 (u16) // - VDP_VRAM_ADDR_17 ............. Use 17-bits 128K VRAM addressing for MSX2/2+/turbo R (u32) #define VDP_VRAM_ADDR VDP_VRAM_ADDR_17 // VDP X/Y units // - VDP_UNIT_U8 .................. X and Y use 8-bits values // - VDP_UNIT_X16 ................. X use 16-bits and Y use 8-bits values // - VDP_UNIT_Y16 ................. X use 8-bits and Y use 16-bits values // - VDP_UNIT_U16 ................. X and Y use 16-bits values #define VDP_UNIT VDP_UNIT_X16 // VDP screen modes (additionnal limitations come from the selected MSX_VERSION) #define VDP_USE_MODE_T1 TRUE // MSX1 Screen 0 Width 40 #define VDP_USE_MODE_MC TRUE // MSX1 Screen 3 #define VDP_USE_MODE_G1 TRUE // MSX1 Screen 1 #define VDP_USE_MODE_G2 TRUE // MSX1 Screen 2 #define VDP_USE_MODE_T2 TRUE // MSX2 Screen 0 Width 80 #define VDP_USE_MODE_G3 TRUE // MSX2 Screen 4 #define VDP_USE_MODE_G4 TRUE // MSX2 Screen 5 #define VDP_USE_MODE_G5 TRUE // MSX2 Screen 6 #define VDP_USE_MODE_G6 TRUE // MSX2 Screen 7 #define VDP_USE_MODE_G7 TRUE // MSX2/2+ Screen 8, 10, 11 & 12 #define VDP_USE_VRAM16K TRUE // Use 16K VRAM access functions on MSX2 #define VDP_USE_SPRITE TRUE // Use sprite handling functions #define VDP_USE_COMMAND TRUE // Use VDP commands wrapper functions #define VDP_USE_CUSTOM_CMD FALSE // Use custom VDP commands through data buffer #define VDP_AUTO_INIT TRUE // Call VDP_Initialize() at the first call to VDP_SetMode() #define VDP_USE_UNDOCUMENTED TRUE // Allow the use of undocumented screen mode (WIP) #define VDP_USE_VALIDATOR TRUE // Handle some option specific for each VDP mode (highly recommended) #define VDP_USE_DEFAULT_PALETTE FALSE // Add data for default MSX2 palette #define VDP_USE_MSX1_PALETTE FALSE // Add data for default MSX1 palette #define VDP_USE_DEFAULT_SETTINGS TRUE // Auto-initialization of common VDP feature #define VDP_USE_16X16_SPRITE TRUE // Use 16x16 sprites mode #define VDP_USE_RESTORE_S0 TRUE // Do restore of status register pointer to S#0 (needed onlt for default BIOS ISR) #define VDP_USE_PALETTE16 TRUE // Use 16 entries palette (use only 15 entries otherwise) // ISR protection while modifiying VDP registers // - VDP_ISR_SAFE_NONE ............ No ISR protection (for program not using VDP interruption) // - VDP_ISR_SAFE_DEFAULT ......... Protect only VDP register pair writing (default behavior; ISR can read/write registers but VRAM ones) // - VDP_ISR_SAFE_ALL ............. Protect all VDP writing process #define VDP_ISR_SAFE_MODE VDP_ISR_SAFE_DEFAULT // Initial screen mode setting // - VDP_INIT_OFF ................. Force option to be disable // - VDP_INIT_ON .................. Force option to be enable // - VDP_INIT_AUTO ................ Determining the best value for the context // - VDP_INIT_DEFAULT ............. Keep default value #define VDP_INIT_50HZ VDP_INIT_ON
Dependencies
Dependency on other modules: None
Documentation