BIOS RAM locations
The locations are (?) guaranteed to be identical accross all system ROM versions so that games can use them regardless of the system type.
Game Related
Address | DEF name | Size | Set by | Description |
$10FD84~$10FD93 | BIOS_GAME_DIP | 16 bytes | BIOS | Software DIPs values (game configuration) |
$10FDAE | BIOS_USER_REQUEST | byte | BIOS | Request code for the USER subroutine. 0:Init, 1:Boot animation, 2:Demo, 3:Title |
$10FDAF | BIOS_USER_MODE | byte | BIOS/Game | Used by the game to tell what it's doing: 0:Init/Boot animation, 1:Title/Demo, 2:Game
Game selection can only be done on MVS systems when this byte is < 2 |
$10FDB0 | BIOS_CREDIT_DEC | 4 bytes | Game | Credit decrement value for each player (1, 2, 3, 4) when calling CREDIT DOWN. |
$10FDB4 | BIOS_START_FLAG | byte | BIOS | Used when calling the PLAYER START subroutine. The 4 LSBs correspond to the player who pushed start. |
$10FDB6 | BIOS_PLAYER_MOD1 | byte | Game | Sets player status. 0:Never played, 1:Playing, 2:Continue option being displayed, 3:Game over |
$10FDB7 | BIOS_PLAYER_MOD2 | byte | Game | |
$10FDB8 | BIOS_PLAYER_MOD3 | byte | Game | |
$10FDB9 | BIOS_PLAYER_MOD4 | byte | Game | |
$10FEC5 | BIOS_TITLE_FIX | byte | BIOS/Game | Newer games set this to 1 in their command 3 USER subroutine. It prevents the system ROM from calling command 3 twice after game over if credits are already in the system. |
System Related
Address | DEF name | Size | Set by | Description |
$10FD80 | BIOS_SYSTEM_MODE | byte | BIOS | 0:BIOS wants vblank (system mode), $80:Ok to use vblank (game mode) |
$10FD81 | BIOS_SYSRET_STATUS | byte | BIOS | Internal value which stores the function code that SYSTEM_RETURN will call.
|
$10FD82 | BIOS_MVS_FLAG | byte | BIOS | System type. 0:AES, 1:MVS |
$10FD83 | BIOS_COUNTRY_CODE | byte | BIOS | 0:Japan, 1:USA, 2:Europe |
$10FE80 | BIOS_DEVMODE | byte | BIOS/GAME | 0:Normal mode, 1:Developer mode |
Joypad Related
These values are updated by calling SYSTEM_IO.
Address | DEF name | Size | Set by | Description |
$10FD94 | BIOS_P1STATUS | byte | BIOS | 0:No connection, 1:Normal joypad, 2:Expanded joypad, 3:Mahjong controller, 4:Keyboard |
$10FD95 | BIOS_P1PREVIOUS | byte | BIOS | Inputs on previous frame [DCBA Right Left Down Up] (positive logic). |
$10FD96 | BIOS_P1CURRENT | byte | BIOS | Inputs on current frame [DCBA Right Left Down Up] (positive logic). |
$10FD97 | BIOS_P1CHANGE | byte | BIOS | Buttons just pressed, active edge [DCBA Right Left Down Up] (positive logic). |
$10FD98 | BIOS_P1REPEAT | byte | BIOS | Active edge + repeat every 8 frames after 16 frames. [DCBA Right Left Down Up] (positive logic). |
$10FD99 | BIOS_P1TIMER | byte | BIOS | Repeat timer (counts down from 8 to 0). |
$10FD9A~$10FD9F | Same for P2 | 6 bytes | BIOS | See above |
$10FDA0~$10FDA6 | Same for P3 | 6 bytes | BIOS | See above |
$10FDA7~$10FDAB | Same for P4 | 6 bytes | BIOS | See above |
$10FDAC | BIOS_STATCURNT | byte | BIOS | Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic)
On AES systems the select bits are always read as 0 ? |
$10FDAD | BIOS_STATCHANGE | byte | BIOS | Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic)
On AES systems the select bits are always read as 0 ? |
$10FEDC | BIOS_STATCURNT_RAW | byte | BIOS | Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic) |
$10FEDD | BIOS_STATCHANGE_RAW | byte | BIOS | Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic) |
Memory Card Related
See CARD for more details on those variables.
Address | DEF name | Size | Set by | Description |
$10FDC4 | BIOS_CARD_COMMAND | byte | BIOS or Game | Command to execute |
$10FDC6 | BIOS_CARD_ANSWER | byte | BIOS | Answer code for the command |
$10FDC8 | BIOS_CARD_START | longword | BIOS or Game | Pointer to data |
$10FDCC | BIOS_CARD_SIZE | word | BIOS or Game | Size of data |
$10FDCE | BIOS_CARD_FCB | word | BIOS or Game | Game NGH number |
$10FDD0 | BIOS_CARD_SUB | byte or word | BIOS or Game | Game Subnumber |
MESS OUT Related
See MESS_OUT to know how to use this routine.
Address | DEF name | Size | Set by | Description |
$10FDBE | BIOS_MESS_POINT | longword | Game | Buffer pointer |
$10FDC2 | BIOS_MESS_BUSY | byte | Game | 0:Allow MESS_OUT, 1:Skip MESS_OUT |
Calendar Related
Those value are updated when READ_CALENDAR is called
Address | DEF name | Size | Set by | Description |
$10FDD2 | BIOS_YEAR | byte | BIOS | Current year |
$10FDD3 | BIOS_MONTH | byte | BIOS | Current month |
$10FDD4 | BIOS_DAY | byte | BIOS | Current day |
$10FDD5 | BIOS_WEEKDAY | byte | BIOS | Current weekday (Sunday = 00, Monday = 01 ... Saturday = 06) |
$10FDD6 | BIOS_HOUR | byte | BIOS | Current hour (24h format) |
$10FDD7 | BIOS_MINUTE | byte | BIOS | Current minute |
$10FDD8 | BIOS_SECOND | byte | BIOS | Current minute |
Internal
Address | DEF name | Size | Set by | Description |
$10FCEF | BIOS_SLOTCHECK | byte | BIOS | Slot check passed if non-zero |
$10FDDA | BIOS_COMPULSION_TIMER | byte | BIOS | Timer for the game compulsion start feature, in seconds. |
$10FDDB | BIOS_COMPULSION_FRAME_TIMER | byte | BIOS | Frame-based timer for the game compulsion start feature.
When it underflows, the timer is reset to 59 and START_COMPULSION_TIMER is decremented. |
$10FE88 | BIOS_FRAME_COUNTER | longword | BIOS | Frame counter, updated by SYSTEM_IO. |
$10FEBF | BIOS_BRAM_USED | byte | BIOS | 0:Backup RAM not currently used, 1:Currently used |
$10FEE1 | BIOS_FRAME_SKIP | byte | BIOS | Number of frames to skip in the routine which checks demo_end or if the player has pressed start.
Decremented in SYSTEM_IO. |
$10FEE3 | BIOS_INT1_SKIP | byte | BIOS | Only used in SYSTEM_INT1. If non-zero, will only do the RTC check during INT1. |
$10FEE4 | BIOS_INT1_FRAME_COUNTER | byte | BIOS | Frame counter, only used in SYSTEM_INT1 |
Thoses will be valid on a 4P compatible bios only
Address | DEF name | Size | Set by | Description |
$10FEF8 | BIOS_4P_REQUESTED | byte | BIOS | Keeps a local copy of hard dip 2 status on bootup.
0: dip2 wasn't set $2: dip 2 was on. |
$10FEFA | BIOS_4P_MODE | byte | BIOS | Main 4P flag, is set when hard dip 2 is on and 4P board is found.
0: regular play $FF: 4P mode game |
$10FEFB | BIOS_4P_PLUGGED | byte | BIOS | 0: 4P board not found
$FF: 4P board plugged 4P compatible bios will check for 4P board regardless of dip2 switch status. |
CD only
Address | DEF name | Size | Set by | Description |
$10FEF4 | BIOS_UPDEST | Long | Game | Copy destination address |
$10FEF8 | BIOS_UPSRC | Long | Game | Copy source address |
$10FEFC | BIOS_UPSIZE | Long | Game | Copy data size |
$10FEDA | BIOS_UPZONE | Byte | Game | Copy zone (0=PRG, 1=FIX, 2=SPR, 3=Z80, 4=PCM, 5=PAT, 7=OBJ, 8=A** files) |
$10FEDB | BIOS_UPBANK | Byte | Game | Copy bank |
Others
Address | DEF name | Size | Set by | Description |
$10FCEE | ? | byte | GAME | Z80/M ROM check pass |