Files
mazegame/projects/targets/msxgl_config.h
T

638 lines
34 KiB
C

// ____________________________
// ██▀▀█▀▀██▀▀▀▀▀▀▀█▀▀█ │ ▄▄▄ ▄▄
// ██ ▀ █▄ ▀██▄ ▀ ▄█ ▄▀▀ █ │ ▀█▄ ▄▀██ ▄█▄█ ██▀▄ ██ ▄███
// █ █ █ ▀▀ ▄█ █ █ ▀▄█ █▄ │ ▄▄█▀ ▀▄██ ██ █ ██▀ ▀█▄ ▀█▄▄
// ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀────────┘ ▀▀
// Library configuration
//─────────────────────────────────────────────────────────────────────────────
#pragma once
//-----------------------------------------------------------------------------
// BUILD
//-----------------------------------------------------------------------------
// Target
// - TARGET_ROM_8K 8 KB ROM in page 1 (4000h ~ 5FFFh)
// - TARGET_ROM_8K_P2 8 KB ROM in page 2 (8000h ~ 9FFFh)
// - TARGET_ROM_16K 16 KB ROM in page 1 (4000h ~ 7FFFh)
// - TARGET_ROM_16K_P2 16 KB ROM in page 2 (8000h ~ BFFFh)
// - TARGET_ROM_32K 32 KB ROM in page 1&2 (4000h ~ BFFFh)
// - TARGET_ROM_48K 48 KB ROM in page 0-2 (0000h ~ BFFFh)
// - TARGET_ROM_48K_ISR 48 KB ROM in page 0-2 (0000h ~ BFFFh) with ISR replacement
// - TARGET_ROM_64K 64 KB ROM in page 0-3 (0000h ~ FFFFh)
// - TARGET_ROM_64K_ISR 64 KB ROM in page 0-3 (0000h ~ FFFFh) with ISR replacement
// - TARGET_ROM_ASCII8 ASCII-8: 8KB segments for a total of 64 KB to 2 MB
// - TARGET_ROM_ASCII16 ASCII-16: 16KB segments for a total of 64 KB to 4 MB
// - TARGET_ROM_KONAMI Konami MegaROM (aka Konami4): 8 KB segments for a total of 64 KB to 2 MB
// - TARGET_ROM_KONAMI_SCC Konami MegaROM SCC (aka Konami5): 8 KB segments for a total of 64 KB to 2 MB
// - TARGET_DOS1 MSX-DOS 1 program (starting at 0100h)
// - TARGET_DOS2 MSX-DOS 2 program (starting at 0100h)
// - TARGET_DOS0 Direct program boot from disk (starting at 0100h)
// - TARGET_BIN BASIC binary program (starting at 8000h)
// - TARGET_BIN_USR BASIC USR binary driver (starting at C000h)
// TARGET is defined by the build tool
// MSX version
// - MSX_1 ........................ MSX1
// - MSX_2 ........................ MSX2
// - MSX_12 ....................... MSX1 and 2 (support each)
// - MSX_2K ....................... Korean MSX2 (SC9 support)
// - MSX_2P ....................... MSX2+
// - MSX_22P ...................... MSX2 and 2+ (support each)
// - MSX_122P ..................... MSX1, 2 and 2+ (support each)
// - MSX_0 ........................ MSX0 (MSX2+)
// - MSX_TR ....................... MSX turbo R
// - MSX_3 ........................ MSX3
// MSX_VERSION is defined by the build tool
//-----------------------------------------------------------------------------
// BIOS MODULE
//-----------------------------------------------------------------------------
// Default slot BIOS access
// - BIOS_CALL_DIRECT ............. Use direct access to Bios routines (ROM slot must be selected in corresponding page)
// - BIOS_CALL_INTERSLOT .......... Use inter-slot access to Bios routines (through CALSLT routine)
#define BIOS_CALL_MAINROM BIOS_CALL_DIRECT
#define BIOS_CALL_SUBROM BIOS_CALL_INTERSLOT
#define BIOS_CALL_DISKROM BIOS_CALL_INTERSLOT
// MAIN-Bios module setting
#define BIOS_USE_MAINROM TRUE // Allow use of Main-ROM routines
#define BIOS_USE_VDP FALSE // Give access to Main-ROM routines related to VDP
#define BIOS_USE_PSG FALSE // Give access to Main-ROM routines related to PSG
#define BIOS_USE_SUBROM FALSE // Allow use of Sub-ROM routines (MSX2/2+/turbo R)
#define BIOS_USE_DISKROM FALSE // Allow use of Disk-ROM routines
//-----------------------------------------------------------------------------
// VDP MODULE
//-----------------------------------------------------------------------------
// 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_14
// 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_U8
// 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_G1 FALSE // MSX1 Screen 1
#define VDP_USE_MODE_G2 FALSE // MSX1 Screen 2
#define VDP_USE_MODE_MC FALSE // MSX1 Screen 3
#define VDP_USE_MODE_T2 FALSE // MSX2 Screen 0 Width 80
#define VDP_USE_MODE_G3 FALSE // MSX2 Screen 4
#define VDP_USE_MODE_G4 FALSE // MSX2 Screen 5
#define VDP_USE_MODE_G5 FALSE // MSX2 Screen 6
#define VDP_USE_MODE_G6 FALSE // MSX2 Screen 7
#define VDP_USE_MODE_G7 FALSE // MSX2/2+ Screen 8, 10, 11 & 12
#define VDP_USE_VRAM16K TRUE // Use 16K VRAM access functions on MSX2
#define VDP_USE_SPRITE FALSE // Use sprite handling functions
#define VDP_USE_COMMAND FALSE // 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 FALSE // 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 FALSE // 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 FALSE // 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_DEFAULT
//-----------------------------------------------------------------------------
// V9990 MODULE
//-----------------------------------------------------------------------------
// V9990 screen modes support
#define V9_USE_MODE_P1 TRUE // Tile mode 0 256x212
#define V9_USE_MODE_P2 TRUE // Tile mode 1 512x212
#define V9_USE_MODE_B0 TRUE // Bitmap mode 1 192x240 (Undocumented v9990 mode)
#define V9_USE_MODE_B1 TRUE // Bitmap mode 1 256x212
#define V9_USE_MODE_B2 TRUE // Bitmap mode 2 384x240
#define V9_USE_MODE_B3 TRUE // Bitmap mode 3 512x212
#define V9_USE_MODE_B4 TRUE // Bitmap mode 4 768x240
#define V9_USE_MODE_B5 TRUE // Bitmap mode 5 640x400 (VGA)
#define V9_USE_MODE_B6 TRUE // Bitmap mode 6 640x480 (VGA)
#define V9_USE_MODE_B7 TRUE // Bitmap mode 7 1024x212 (Undocumented v9990 mode)
#define V9_INT_PROTECT TRUE // VRAM access protection mode against interruption
// Palette input data format
// - V9_PALETTE_YSGBR_16 .......... 16 bits RGB + Ys [Ys|G|G|G|G|G|R|R] [R|R|R|B|B|B|B|B]
// - V9_PALETTE_GBR_16 ............ 16 bits RGB [0|G|G|G|G|G|R|R] [R|R|R|B|B|B|B|B]
// - V9_PALETTE_RGB_24 ............ 24 bits RGB [0|0|0|R|R|R|R|R] [0|0|0|G|G|G|G|G] [0|0|0|B|B|B|B|B]
#define V9_PALETTE_MODE V9_PALETTE_RGB_24
//-----------------------------------------------------------------------------
// INPUT MODULE
//-----------------------------------------------------------------------------
// Input module setting
#define INPUT_USE_JOYSTICK FALSE // Add functions to handle joystick using I/O port
#define INPUT_USE_KEYBOARD TRUE // Add functions to handle keyboard using I/O port
#define INPUT_USE_MOUSE FALSE // Add support for Mouse handling functions
#define INPUT_USE_DETECT FALSE // Add feature to detect device plugged in General purpose ports
#define INPUT_USE_ISR_PROTECTION FALSE // Disable interruptions while access PSG registers (needed if you use BIOS or access PSG in your own ISR)
#define INPUT_JOY_UPDATE FALSE // Add function to update all joystick states at once
#define INPUT_HOLD_SIGNAL FALSE // Determines whether functions that modify signals should keep the state of those they don't need to modify (which slows functions down a bit)
// Key update handler
#define INPUT_KB_UPDATE FALSE // Add function to update all keyboard rows at once
#define INPUT_KB_UPDATE_MIN 0 // First row to update
#define INPUT_KB_UPDATE_MAX 8 // Last row to update (10 for numerical-pad, 8 otherwise)
//-----------------------------------------------------------------------------
// PADDLE MODULE
//-----------------------------------------------------------------------------
// Paddle module setting
#define PADDLE_USE_CALIB TRUE // Add functions paddle calibration feature
//-----------------------------------------------------------------------------
// MEMORY MODULE
//-----------------------------------------------------------------------------
#define MEM_USE_VALIDATOR FALSE // Activate validator to handle invalide input value
#define MEM_USE_FASTCOPY FALSE // Add support for fast-copy function (using unrolled-LDI loop)
#define MEM_USE_FASTSET FALSE // Add support for fast-set function (using unrolled-LDI loop)
#define MEM_USE_DYNAMIC FALSE // Add support for malloc style dynamic allocator
#define MEM_USE_BUILTIN TRUE // Use SDCC built-in memcpy and memset function instead of MSXgl ones
//-----------------------------------------------------------------------------
// MSX-DOS MODULE
//-----------------------------------------------------------------------------
#define DOS_USE_FCB TRUE // Add support for file managment features through FCB structure
#define DOS_USE_HANDLE TRUE // Add support for file managment features through file handle
#define DOS_USE_UTILITIES TRUE // Add support for file managment features through filename
#define DOS_USE_VALIDATOR TRUE // Add support for last error backup and return value validation
#define DOS_USE_ERROR_HANDLER FALSE // Add support for MSX-DOS 1 error handler callback
#define DOS_USE_BIOSCALL FALSE // Add support for call to BIOS routines
//-----------------------------------------------------------------------------
// CLOCK MODULE
//-----------------------------------------------------------------------------
#define RTC_USE_CLOCK TRUE // Add functions to handle date and time
#define RTC_USE_CLOCK_EXTRA TRUE // Add extra date and time functions that require additional data
#define RTC_USE_SAVEDATA TRUE // Add functions to read/write into the CMOS
#define RTC_USE_SAVESIGNED TRUE // Add signature handling to validate CMOS I/O
//-----------------------------------------------------------------------------
// DRAW MODULE
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// PRINT MODULE
//-----------------------------------------------------------------------------
// Print module setting
#define PRINT_USE_TEXT TRUE // Allow use of Text font (T1-T2, G1-G3)
#define PRINT_USE_BITMAP FALSE // Allow use of Bitmap font (G4-G7)
#define PRINT_USE_VRAM FALSE // Allow use of VRAM stored font (G4-G7)
#define PRINT_USE_SPRITE FALSE // Allow use of Sprite font (G3-G7)
#define PRINT_USE_FX_SHADOW FALSE // [Bitmap] Allow use of text shadow
#define PRINT_USE_FX_OUTLINE FALSE // [Bitmap] Allow use of text outline
#define PRINT_USE_2_PASS_FX FALSE // [Bitmap] Allow use 2-pass FX render to prevent character overlap
#define PRINT_USE_GRAPH TRUE // Allow use of character lines and boxes
#define PRINT_USE_VALIDATOR FALSE // Add validator character code
#define PRINT_USE_UNIT FALSE // Display integer type (h: hexadecimal, b: binary)
#define PRINT_USE_FORMAT TRUE // Add printf type function
#define PRINT_USE_32B FALSE // Allow to print 32-bits integers
#define PRINT_USE_MULTIFONT TRUE // Use multiple fonts (each one with its own data structure)
#define PRINT_SKIP_SPACE FALSE // Skill space character
#define PRINT_COLOR_NUM 1 // 1 color per line
// Character width
// - PRINT_WIDTH_1 (text mode)
// - PRINT_WIDTH_6
// - PRINT_WIDTH_8
// - PRINT_WIDTH_X (variable)
#define PRINT_WIDTH PRINT_WIDTH_1
// Character height
// - PRINT_HEIGHT_1 (text mode)
// - PRINT_HEIGHT_8
// - PRINT_HEIGHT_X (variable)
#define PRINT_HEIGHT PRINT_HEIGHT_1
//-----------------------------------------------------------------------------
// SPRITE FX MODULE
//-----------------------------------------------------------------------------
// Supported sprite size
#define SPRITEFX_USE_8x8 TRUE // Use 8x8 pixels effects
#define SPRITEFX_USE_16x16 TRUE // Use 16x16 pixels effects
// Supported effect
#define SPRITEFX_USE_CROP TRUE // Use cropping effect
#define SPRITEFX_USE_FLIP TRUE // Use flipping effect
#define SPRITEFX_USE_MASK TRUE // Use masking effect
#define SPRITEFX_USE_ROTATE TRUE // Use rotating effect
//-----------------------------------------------------------------------------
// GAME MAIN MODULE
//-----------------------------------------------------------------------------
// Game state setting
#define GAME_USE_STATE FALSE // Add state machine features
#define GAME_USE_VSYNC FALSE // Add vertical synchronization features
#define GAME_USE_LOOP FALSE // Add game main loop with call to v-synch and state
#define GAME_USE_SYNC_50HZ TRUE // Force 50Hz synchronization on 60Hz machine
//-----------------------------------------------------------------------------
// GAME PAWN MODULE
//-----------------------------------------------------------------------------
// Pawn setting
#define PAWN_ID_PER_LAYER FALSE // Set sprite ID for each layer (otherwise set per pawn)
#define PAWN_USE_RT_LOAD TRUE // Load sprite pattern data on the fly (real-time)
#define PAWN_USE_SPRT_FX TRUE // Allow sprite effects (crop, flip, mask, rotate)
#define PAWN_SPRITE_SIZE 16 // Sprite size mode (8 for 8x8 pixel mode, or 16 for 16x16)
#define PAWN_BLEND_OFFSET 12 // Sprite pattern offset for blending mode
#define PAWN_USE_PHYSICS TRUE // Add physics and collision features
// Pawn coordinate unit
// - PAWN_UNIT_SCREEN Default screen (pixel) unit (8-bit unsigned int)
// - PAWN_UNIT_QMN(n) Fixed-point (Qm.n) unit (16-bit signed int)
#define PAWN_UNIT PAWN_UNIT_SCREEN
// Pawn's bound (can be fixed for all pawn, or setable for each one)
#define PAWN_BOUND_X PAWN_BOUND_CUSTOM
#define PAWN_BOUND_Y PAWN_BOUND_CUSTOM
// Collision position options for each pawn's side
// - PAWN_COL_0
// - PAWN_COL_25
// - PAWN_COL_50
// - PAWN_COL_75
// - PAWN_COL_100
#define PAWN_COL_DOWN (PAWN_COL_25|PAWN_COL_75)
#define PAWN_COL_UP PAWN_COL_50
#define PAWN_COL_RIGHT PAWN_COL_50
#define PAWN_COL_LEFT PAWN_COL_50
// Options to determine which border collide or trigger events
// - PAWN_BORDER_NONE
// - PAWN_BORDER_DOWN
// - PAWN_BORDER_UP
// - PAWN_BORDER_RIGHT
// - PAWN_BORDER_LEFT
#define PAWN_BORDER_EVENT (PAWN_BORDER_DOWN|PAWN_BORDER_RIGHT)
#define PAWN_BORDER_BLOCK (PAWN_BORDER_UP|PAWN_BORDER_LEFT)
// Top/bottom border position (in pixel)
#define PAWN_BORDER_MIN_Y 0 // High border Y coordinade
#define PAWN_BORDER_MAX_Y 191 // Low border Y coordinate
#define PAWN_TILEMAP_WIDTH 32 // Width of the tiles map
#define PAWN_TILEMAP_HEIGHT 24 // Height of the tiles map
// Collision tilemap source
// - PAWN_TILEMAP_SRC_AUTO ........ Backward compatibility option
// - PAWN_TILEMAP_SRC_RAM ......... Tilemap located in a buffer in RAM (best for performance)
// - PAWN_TILEMAP_SRC_VRAM ........ Tilemap located in VRAM (slow but don't need additionnal data)
// - PAWN_TILEMAP_SRC_V9 .......... Tilemap located in V9990's VRAM
#define PAWN_TILEMAP_SRC PAWN_TILEMAP_SRC_VRAM
// Pawn's sprite mode
// - PAWN_SPT_MODE_AUTO ........... Backward compatibility option
// - PAWN_SPT_MODE_MSX1 ........... Sprite Mode 1 (MSX1 screens)
// - PAWN_SPT_MODE_MSX2 ........... Sprite Mode 2 unicolor (MSX2 screens)
// - PAWN_SPT_MODE_MSX2_MULTI ..... Sprite Mode 2 multi-color (MSX2 screens)
// - PAWN_SPT_MODE_MSX12 .......... Sprite Mode 1 & 2 unicolor (MSX1 & MSX2 screens)
// - PAWN_SPT_MODE_V9_P1 .......... V9990 sprite in P1 mode
// - PAWN_SPT_MODE_V9_P2 .......... V9990 sprite in P2 mode
#define PAWN_SPT_MODE PAWN_SPT_MODE_MSX1
//-----------------------------------------------------------------------------
// GAME MENU MODULE
//-----------------------------------------------------------------------------
#define MENU_USE_DEFAULT_CALLBACK TRUE // Use default input/print callback
#define MENU_SCREEN_WIDTH MENU_VARIABLE // Screen width
#define MENU_FRAME_X 0 // Frame position X
#define MENU_FRAME_Y 6 // Frame position Y
#define MENU_FRAME_WIDTH 32 // Frame width
#define MENU_FRAME_HEIGHT 8 // Frame height
#define MENU_CHAR_CLEAR '\0' // Clear character
#define MENU_CHAR_CURSOR '@' // Cursor character
#define MENU_CHAR_TRUE 'O' // True character
#define MENU_CHAR_FALSE 'X' // False character
#define MENU_CHAR_LEFT '<' // Left edit character
#define MENU_CHAR_RIGHT '>' // Right edit character
#define MENU_TITLE_X 4 // Title position X
#define MENU_TITLE_Y 6 // Title position Y
#define MENU_ITEM_X 6 // Item label X position
#define MENU_ITEM_Y 8 // Item label X position
#define MENU_ITEM_X_GOTO 6 // Goto type item label X position
#define MENU_ITEM_ALIGN MENU_ITEM_ALIGN_LEFT // Item label alignment
#define MENU_ITEM_ALIGN_GOTO MENU_ITEM_ALIGN_LEFT // Goto type item label alignment
#define MENU_VALUE_X 14 // Item value X position
// Type of cursor
// - MENU_CURSOR_MODE_NONE ........ No cursor
// - MENU_CURSOR_MODE_CHAR ........ Character cursor
// - MENU_CURSOR_MODE_SPRT ........ Sprite cursor
#define MENU_CURSOR_MODE MENU_CURSOR_MODE_CHAR
#define MENU_CURSOR_OFFSET (-2) // Cursor X position offset
//-----------------------------------------------------------------------------
// GAME QUEST VARIABLES MODULE
//-----------------------------------------------------------------------------
#define BITFIELD_MAX 64 // Maximum number of quest variables (8 variables per byte)
//-----------------------------------------------------------------------------
// STRING MODULE
//-----------------------------------------------------------------------------
// Support for integer to ASCII string converter functions
#define STRING_USE_FROM_INT8 TRUE // Signed 8-bits integer to string
#define STRING_USE_FROM_UINT8 TRUE // Unsigned 8-bits integer to string
#define STRING_USE_FROM_INT16 TRUE // Signed 16-bits integer to string
#define STRING_USE_FROM_UINT16 TRUE // Unsigned 16-bits integer to string
// Support for sprintf style formating function
#define STRING_USE_FORMAT TRUE
#define STRING_USE_INT32 TRUE // Add support for 32-bits integer
//-----------------------------------------------------------------------------
// SCROLL MODULE
//-----------------------------------------------------------------------------
// Allow horizontal and/or vertical scrolling
#define SCROLL_HORIZONTAL TRUE // Activate horizontal scrolling
#define SCROLL_VERTICAL TRUE // Activate vertical scrolling
// Source data info
#define SCROLL_SRC_X 64 // Start X coordinate of the source data
#define SCROLL_SRC_Y 0 // Start Y coordinate of the source data
#define SCROLL_SRC_W 128 // Width of the source data
#define SCROLL_SRC_H 24 // Height of the source data
// Destination data info
#define SCROLL_DST_X 0 // Destination x coordinate (in layout table)
#define SCROLL_DST_Y 2 // Destination y coordinate (in layout table)
#define SCROLL_DST_W 32 // Destination width
#define SCROLL_DST_H 20 // Destination height
#define SCROLL_SCREEN_W 32 // Screen width in tile number
// Allow scroll data looping (only for horizontal scrolling)
#define SCROLL_WRAP TRUE
// Use screen position adjust register (allow per-pixel scrolling) [MSX2]
#define SCROLL_ADJUST FALSE // Global ajustement
#define SCROLL_ADJUST_SPLIT FALSE // Destination windows ajustement using screen split
// Use sprite mask (allow smooth per-pixel scrolling) [MSX2]
#define SCROLL_MASK FALSE // Use sprite to mask
#define SCROLL_MASK_ID 0 // First sprite ID to use
#define SCROLL_MASK_COLOR COLOR_BLACK // Must be the same than border color
#define SCROLL_MASK_PATTERN 0 // Sprite pattern to use
//-----------------------------------------------------------------------------
// TILE
//-----------------------------------------------------------------------------
#define TILE_WIDTH 8 // Tile width
#define TILE_HEIGHT 8 // Tile height
#define TILE_BPP 4 // Screen bits-per-pixel
#define TILE_SCREEN_WIDTH 256 // Screen width
#define TILE_SCREEN_HEIGHT 212 // Screen height
#define TILE_USE_SKIP TRUE // Skip drawing of a given index
#define TILE_SKIP_INDEX 0 // The index tile to skip
//-----------------------------------------------------------------------------
// AUDIO
//-----------------------------------------------------------------------------
// PSG options
// - PSG_INTERNAL ................. Use internal PSG chip (port A0-A2)
// - PSG_EXTERNAL ................. Use external PSG chip (port 10-12)
// - PSG_BOTH ..................... Use both internal and external PSG chips
#define PSG_CHIP PSG_INTERNAL
// - PSG_DIRECT ................... Function set directly the PSG registers
// - PSG_INDIRECT ................. Function set a buffer (Apply() function must be call once a frame)
#define PSG_ACCESS PSG_INDIRECT
#define PSG_USE_NOTES FALSE // Add notes table to convert note to tone
#define PSG_USE_EXTRA TRUE // Add helper functions to handle PSG settings
#define PSG_USE_RESUME TRUE // Add function to allow playback pause and resume
// MSX-Music options
#define MSXAUDIO_USE_RESUME TRUE // Add function to allow playback pause and resume
// MSX-Audio options
#define MSXMUSIC_USE_RESUME TRUE // Add function to allow playback pause and resume
// SCC options
#define SCC_USE_EXTA TRUE // Add helper functions to handle PSG settings
#define SCC_USE_RESUME TRUE // Add function to allow playback pause and resume
// - SCC_SLOT_DIRECT .............. Program on a SCC cartridge
// - SCC_SLOT_FIXED ............... Fixed slot-id (non-expanded second cartridge slot)
// - SCC_SLOT_USER ................ Defined by the user
// - SCC_SLOT_AUTO ................ First auto-detected cartridge
#define SCC_SLOT_MODE SCC_SLOT_AUTO
// VGM supported chip
#define VGM_USE_PSG TRUE // Allow PSG data parsing and audio output
#define VGM_USE_MSXMUSIC TRUE // Allow MSX-Music data parsing and audio output
#define VGM_USE_MSXAUDIO TRUE // Allow MSX-Audio data parsing and audio output
#define VGM_USE_SCC TRUE // Allow SCC data parsing and audio output
// PCM-Encoder supported frequency (more than 1 value allowed)
// - PCMENC_NONE, PCMENC_8K, PCMENC_11K, PCMENC_22K and PCMENC_44K
#define PCMENC_FREQ PCMENC_8K | PCMENC_11K | PCMENC_22K | PCMENC_44K
// PCMPlay
// - PCMPLAY_8K or PCMPLAY_11K
#define PCMPLAY_FREQ PCMPLAY_8K
#define PCMPLAY_USE_RESTORE FALSE
// PT3 options
#define PT3_SKIP_HEADER TRUE // Don't use PT3 data header (first 100 bytes must be truncated)
#define PT3_AUTOPLAY TRUE // Play music automatically
#define PT3_EXTRA TRUE // Add helper functions
// ayFX options
// - AYFX_BUFFER_DEFAULT .......... Use PSG module's PSG registers buffer
// - AYFX_BUFFER_PSG2 ............. Use PSG module's 2nd PSG registers buffer (only if PSG_CHIP == PSG_BOTH)
// - AYFX_BUFFER_PT3 .............. Use PT3 module's PSG registers buffer
#define AYFX_BUFFER AYFX_BUFFER_PT3
// TriloTracker options
#define TRILO_USE_SFXPLAY TRUE // Add SFX playback through Trilo SCC player (ayFX + SCC format)
#define TRILO_USE_TREMOLO TRUE // Add support for tremolo effect (little bit expensive)
#define TRILO_USE_TAIL FALSE // Add tail to prevent volume to fall to zero
// LVGM replayer options
#define LVGM_USE_PSG TRUE // Add parser for PSG data
#define LVGM_USE_MSXMUSIC TRUE // Add parser for MSX-Music data
#define LVGM_USE_MSXAUDIO TRUE // Add parser for MSX-Audio data
#define LVGM_USE_SCC TRUE // Add parser for Konami SCC data
#define LVGM_USE_SCCI FALSE // Add parser for Konami SCC+ data
#define LVGM_USE_PSG2 FALSE // Add parser for secondary PSG data
#define LVGM_USE_OPL4 FALSE // Add parser for OPL4 data
#define LVGM_USE_NOTIFY TRUE // Add parser for PSG data
// WYZ Tracker replayer options
// Channels number
// - WYZ_3CH
// - WYZ_6CH
#define WYZ_CHANNELS WYZ_3CH // Number of supported channels (can be 3 for 1 PSG or 6 for 2 PSG)
#define WYZ_USE_DIRECT_ACCESS FALSE // Send data directly to PSG registers (otherwise, write in a RAM buffer)
#define WYZ_CHAN_BUFFER_SIZE 0x20 // Size of the channel buffer
// Arkos Tracker options
#define ARKOS_BUFFER_ADDR 0xF000 // Replayer working area address in RAM
#define ARKOS_ISR_PROTECTION FALSE // Prevent interruption during audio update
#define ARKOS_SFX_START_IDX 0 // Do SFX indexes start at 0 or 1? Default is 0 but Arkos Tracker use 1
#define ARKOS_USE_EVENT FALSE // Support for event callback function (AKG replayer only)
// NDP player options
#define NDP_USE_INDERCT FALSE // Output music data into RAM buffer (need to use with ayFX for example)
//-----------------------------------------------------------------------------
// MATH MODULE
//-----------------------------------------------------------------------------
// Random methods
// - RANDOM_8_NONE ................ No 8-bits random
// - RANDOM_8_REGISTER ............ R Register value (7-bits)
// - RANDOM_8_RACC ................ R Register accumulation (7-bits)
// - RANDOM_8_ION ................. Ion Random
// - RANDOM_8_MEMORY .............. Memory Peek from R
#define RANDOM_8_METHOD RANDOM_8_NONE
// - RANDOM_16_NONE ............... No 16-bits random
// - RANDOM_16_LINEAR ............. Linear congruential
// - RANDOM_16_XORSHIFT ........... XOR Shift
// - RANDOM_16_LFSR_LCG ........... Combined LFSR/LCG
#define RANDOM_16_METHOD RANDOM_16_NONE
//-----------------------------------------------------------------------------
// COMPRESS
//-----------------------------------------------------------------------------
// RLEp compression
#define COMPRESS_USE_RLEP TRUE // Use RLEp unpacker
#define COMPRESS_USE_RLEP_DEFAULT TRUE // Data include the default value (0 otherwise)
#define COMPRESS_USE_RLEP_FIXSIZE FALSE // Gize the data size as function input (loop up to terminator otherwise)
// Pletter compression
#define PLETTER_LENGTHINDATA FALSE // Is length included in data (first 2 bytes)
// Disable interruption mode
// - PLETTER_DI_NONE .............. Don't disable interruption
// - PLETTER_DI_FULL .............. Disable interruption during the whole function
// - PLETTER_DI_LOOP .............. Disable interruption during VRAM write loop
#define PLETTER_DI_MODE PLETTER_DI_LOOP
// VRAM write timing mode
// - PLETTER_WRITE_SAFE ........... Safe VRAM write speed (30 t-states)
// - PLETTER_WRITE_NODISPLAY ...... Safe VRAM write speed when screen display disable (22 t-states)
// - PLETTER_WRITE_MINIMAL ........ Minimal wait beetween write (17 t-states)
// - PLETTER_WRITE_QUICK .......... No wait beetween write (12 t-states)
// - PLETTER_WRITE_AUTO ........... Determine the worst case according to selected screen mode (12~30 t-states)
#define PLETTER_WRITE_MODE PLETTER_WRITE_SAFE
// BitBuster compression
// VRAM write timing mode
// - BITBUSTER_WRITE_SAFE ......... Safe VRAM write speed (include nop between write)
// - BITBUSTER_WRITE_QUICK ........ No wait beetween write
#define BITBUSTER_WRITE_MODE BITBUSTER_WRITE_SAFE
// ZX0 compression
// Unpack mode
// - ZX0_MODE_STANDARD ............ Standard routine: 68 bytes only
// - ZX0_MODE_TURBO ............... Turbo routine: 126 bytes, about 21% faster
// - ZX0_MODE_FAST ................ Fast routine: 187 bytes, about 25% faster
// - ZX0_MODE_MEGA ................ Mega routine: 673 bytes, about 28% faster
#define ZX0_MODE ZX0_MODE_STANDARD
// LZ48 compression
// - LZ48_MODE_STANDARD ........... Standard routine
// - LZ48_MODE_SPEED .............. Version optimized for speed
// - LZ48_MODE_SIZE ............... Version optimized for size
#define LZ48_MODE LZ48_MODE_STANDARD
// MSXi compressor support
#define MSXi_USE_COMP_NONE TRUE
#define MSXi_USE_COMP_CROP16 TRUE
#define MSXi_USE_COMP_CROP32 TRUE
#define MSXi_USE_COMP_CROP256 TRUE
#define MSXi_USE_COMP_CROPLINE16 TRUE
#define MSXi_USE_COMP_CROPLINE32 TRUE
#define MSXi_USE_COMP_CROPLINE256 TRUE
#define MSXi_USE_COMP_RLE0 TRUE
#define MSXi_USE_COMP_RLE4 TRUE
#define MSXi_USE_COMP_RLE8 TRUE
//-----------------------------------------------------------------------------
// NINJATAP MODULE
//-----------------------------------------------------------------------------
// Supported driver(s)
// - NTAP_DRIVER_MSXGL ............ MSXgl custom driver (based on DM-System2 one)
// - NTAP_DRIVER_GIGAMIX .......... Original Gigamix's DM-System2 driver
// - NTAP_DRIVER_SHINOBI .......... Shinobi Tap driver by Danjovic
#define NTAP_DRIVER NTAP_DRIVER_MSXGL | NTAP_DRIVER_GIGAMIX | NTAP_DRIVER_SHINOBI
#define NTAP_USE_PREVIOUS TRUE // Backup previous data to allow push/release detection
//-----------------------------------------------------------------------------
// PAC MODULE
//-----------------------------------------------------------------------------
#define PAC_USE_SIGNATURE TRUE // Handle application signature to validate saved data
#define PAC_USE_VALIDATOR TRUE // Add code to validate input parameters
#define PAC_DEVICE_MAX 4 // Maximum number of supported PAC devices
// SRAM access method
// - PAC_ACCESS_DIRECT ............ Direct access to SRAM (must be selected in page 1)
// - PAC_ACCESS_BIOS .............. Access through BIOS routines
// - PAC_ACCESS_SWITCH_BIOS ....... Access through BIOS routines with BIOS switched in
// - PAC_ACCESS_SYSTEM ............ Access through MSXgl routine (no need BIOS)
#define PAC_ACCESS PAC_ACCESS_BIOS
//-----------------------------------------------------------------------------
// QR CODE MODULE
//-----------------------------------------------------------------------------
#define QRCODE_VERSION_MIN 1 // The minimum version number supported in the QR Code Model 2 standard
#define QRCODE_VERSION_MAX 20 // The maximum version number supported in the QR Code Model 2 standard
#define QRCODE_VERSION_CUSTOM FALSE // TRUE: Allow to define version using <QRCode_SetVersion>. FALSE: Use hardcoded min/max version
#define QRCODE_USE_BYTE_ONLY TRUE // TRUE: Allow only BYTE mode. FALSE allow all mode including NUMERIC, ALPHANUMERIC, KANJI and ECI.
#define QRCODE_USE_EXTRA FALSE // TRUE: Add extra function to generate custom data segments.
#define QRCODE_BOOST_ECL FALSE // If boostEcl is TRUE, then the ECC level of the result may be higher than the ecl argument if it can be done without increasing the version. QRCODE_PARAM_CUSTOM: Allow to use <QRCode_SetBoostECL> function.
#define QRCODE_TINY_VERSION 10 // The version number supported in the QR Code Model 2 standard
// Error correction level
// - QRCODE_ECC_LOW ............... The QR Code can tolerate about 7% erroneous codewords
// - QRCODE_ECC_MEDIUM ............ The QR Code can tolerate about 15% erroneous codewords
// - QRCODE_ECC_QUARTILE .......... The QR Code can tolerate about 25% erroneous codewords
// - QRCODE_ECC_HIGH .............. The QR Code can tolerate about 30% erroneous codewords
#define QRCODE_TINY_ECC QRCODE_ECC_LOW
// Mask pattern
// - QRCODE_MASK_0 ................ (i + j) % 2 = 0
// - QRCODE_MASK_1 ................ i % 2 = 0
// - QRCODE_MASK_2 ................ j % 3 = 0
// - QRCODE_MASK_3 ................ (i + j) % 3 = 0
// - QRCODE_MASK_4 ................ (i / 2 + j / 3) % 2 = 0
// - QRCODE_MASK_5 ................ (i * j) % 2 + (i * j) % 3 = 0
// - QRCODE_MASK_6 ................ ((i * j) % 3 + i * j) % 2 = 0
// - QRCODE_MASK_7 ................ ((i * j) % 3 + i + j) % 2 = 0
#define QRCODE_TINY_MASK QRCODE_MASK_0
//-----------------------------------------------------------------------------
// DEBUG & PROFILE
//-----------------------------------------------------------------------------
// Debugger options
// - DEBUG_DISABLE ................ No debug tool
// - DEBUG_EMULICIOUS ............. Debug features for Emulicious
// - DEBUG_OPENMSX ................ Debug features for openMSX using 'debugdevice' extension
// - DEBUG_OPENMSX_P .............. Debug features for openMSX using PVM script (tools/script/openMSX/debugger_pvm.tcl)
#define DEBUG_TOOL DEBUG_DISABLE
// Profiler options
// - PROFILE_DISABLE .............. No profile tool
// - PROFILE_OPENMSX_G ............ Profiler features for openMSX using Grauw script (tools/script/openMSX/profiler_grauw.tcl)
// - PROFILE_OPENMSX_S ............ Profiler features for openMSX using Salutte script (tools/script/openMSX/profiler_salutte.tcl)
#define PROFILE_TOOL PROFILE_DISABLE
#define PROFILE_LEVEL 10