BIOS RAM locations: Difference between revisions
mNo edit summary |
No edit summary |
||
(14 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
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= | |||
{| class="regdef" | {| class="regdef" | ||
Line 12: | Line 14: | ||
|16 bytes | |16 bytes | ||
|BIOS | |BIOS | ||
|[[Software DIPs]] values | |[[Software DIPs]] values (game configuration) | ||
|- | |- | ||
|$10FDAE | |$10FDAE | ||
Line 18: | Line 20: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Request for the [[USER subroutine]]. 0:Init, 1:Boot animation, 2:Demo, 3:Title | |Request code for the [[USER subroutine]]. 0:Init, 1:Boot animation, 2:Demo, 3:Title | ||
|- | |- | ||
|$10FDAF | |$10FDAF | ||
Line 25: | Line 27: | ||
|BIOS/Game | |BIOS/Game | ||
|Used by the game to tell what it's doing: 0:Init/Boot animation, 1:Title/Demo, 2: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 | [[Game selection]] can only be done on MVS systems when this byte is < 2 | ||
|- | |- | ||
|$10FDB0 | |$10FDB0 | ||
Line 31: | Line 33: | ||
|4 bytes | |4 bytes | ||
|Game | |Game | ||
|Credit decrement value for each player when calling [[CREDIT DOWN]]. | |Credit decrement value for each player (1, 2, 3, 4) when calling [[CREDIT DOWN]]. | ||
|- | |- | ||
|$10FDB4 | |$10FDB4 | ||
Line 37: | Line 39: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Used when calling the [[PLAYER START subroutine]]. | |Used when calling the [[PLAYER START subroutine]]. The 4 LSBs correspond to the player who pushed start. | ||
|- | |- | ||
|$10FDB6 | |$10FDB6 | ||
| | |BIOS_PLAYER_MOD1 | ||
|4 | |byte | ||
|Game | |||
|rowspan="4|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 | |Game | ||
| | |- | ||
|$10FEC5 | |||
|BIOS_TITLE_MODE | |||
|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= | |||
{| class="regdef" | {| class="regdef" | ||
Line 60: | Line 82: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|0:BIOS wants vblank (system mode), $80: | |0:BIOS wants vblank (system mode), $80:Ok to use vblank (game mode) | ||
|- | |- | ||
|$10FD81 | |$10FD81 | ||
Line 66: | Line 88: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Internal value | |Internal value which stores the function code that [[SYSTEM_RETURN]] will call. | ||
*0 : Init bram/select valid game for eye-catcher | |||
0 : | *1 : Set the EL-LED to the correct value | ||
*2 : Switch to the next slot, relaunch eye-catcher | |||
1 : | *3 : After a gameover, save the playtime for bookeeping, switch to DEMO mode, reset the workbackup ram | ||
*4 : Switch next slot (select p1 pressed) | |||
2 : Switch to the next slot, relaunch eye-catcher | *5 : Switch to previous slot (select p2 pressed) | ||
*6 : Called after a coin deposit, does nothing | |||
3 : After a gameover, save the playtime for bookeeping, switch to DEMO mode, reset the workbackup ram | |||
4 : Switch next slot (select p1 pressed) | |||
5 : Switch to previous slot (select p2 pressed) | |||
6 : Called after a coin deposit, does nothing | |||
|- | |- | ||
|$10FD82 | |$10FD82 | ||
Line 86: | Line 101: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|0:AES, 1:MVS | |System type. 0:AES, 1:MVS | ||
|- | |- | ||
|$10FD83 | |$10FD83 | ||
Line 96: | Line 111: | ||
|$10FE80 | |$10FE80 | ||
|BIOS_DEVMODE | |BIOS_DEVMODE | ||
| | |8 bytes | ||
|BIOS | |BIOS | ||
| | |All set to 0x00 in normal mode. Set to "1streset" string in developer mode | ||
|} | |} | ||
=Joypad Related= | |||
These values are updated by calling [[SYSTEM_IO]]. | |||
{| class="regdef" | {| class="regdef" | ||
Line 123: | Line 137: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
| | |Inputs on previous frame [DCBA Right Left Down Up] (positive logic). | ||
|- | |- | ||
|$10FD96 | |$10FD96 | ||
Line 129: | Line 143: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
| | |Inputs on current frame [DCBA Right Left Down Up] (positive logic). | ||
|- | |- | ||
|$10FD97 | |$10FD97 | ||
Line 135: | Line 149: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
| | |Buttons just pressed, active edge [DCBA Right Left Down Up] (positive logic). | ||
|- | |- | ||
|$10FD98 | |$10FD98 | ||
Line 141: | Line 155: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Active edge + repeat every 8 frames after 16 frames. DCBA Right Left | |Active edge + repeat every 8 frames after 16 frames. [DCBA Right Left Down Up] (positive logic). | ||
|- | |- | ||
|$10FD99 | |$10FD99 | ||
Line 147: | Line 161: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
| | |Repeat timer (counts down from 8 to 0). | ||
|- | |- | ||
|$10FD9A~$10FD9F | |$10FD9A~$10FD9F | ||
|Same for P2 | |Same for P2 | ||
| | |6 bytes | ||
|BIOS | |BIOS | ||
|See above | |See above | ||
Line 157: | Line 171: | ||
|$10FDA0~$10FDA6 | |$10FDA0~$10FDA6 | ||
|Same for P3 | |Same for P3 | ||
| | |6 bytes | ||
|BIOS | |BIOS | ||
|See above | |See above | ||
Line 163: | Line 177: | ||
|$10FDA7~$10FDAB | |$10FDA7~$10FDAB | ||
|Same for P4 | |Same for P4 | ||
| | |6 bytes | ||
|BIOS | |BIOS | ||
|See above | |See above | ||
Line 173: | Line 187: | ||
|Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic) | |Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic) | ||
On | On AES systems the select bits are always read as 0 ? | ||
|- | |- | ||
|$10FDAD | |$10FDAD | ||
Line 181: | Line 195: | ||
|Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic) | |Select P4, Start P4, Select P3, Start P3, Select P2, Start P2, Select P1, Start P1 (positive logic) | ||
On | On AES systems the select bits are always read as 0 ? | ||
|- | |- | ||
|$10FEDC | |$10FEDC | ||
Line 196: | Line 210: | ||
|} | |} | ||
=Memory Card Related= | |||
See [[CARD]] for more details on those variables. | |||
See [[CARD]] for more | |||
{| class="regdef" | {| class="regdef" | ||
Line 212: | Line 225: | ||
|byte | |byte | ||
|BIOS or Game | |BIOS or Game | ||
|Command to execute | |Command to execute | ||
|- | |||
|$10FDC5 | |||
|BIOS_CARD_MODE | |||
|byte | |||
|BIOS? | |||
|Internal use? | |||
|- | |- | ||
|$10FDC6 | |$10FDC6 | ||
Line 245: | Line 264: | ||
|} | |} | ||
=MESS OUT Related= | |||
See [[MESS_OUT]] to know how to use this routine. | See [[MESS_OUT]] to know how to use this routine. | ||
Line 261: | Line 279: | ||
|longword | |longword | ||
|Game | |Game | ||
| | |Buffer pointer | ||
|- | |- | ||
|$10FDC2 | |$10FDC2 | ||
Line 270: | Line 288: | ||
|} | |} | ||
=Calendar Related= | |||
Those value are updated when [[READ_CALENDAR]] is called | Those value are updated when [[READ_CALENDAR]] is called | ||
Line 325: | Line 342: | ||
|} | |} | ||
=Internal= | |||
{| class="regdef" | {| class="regdef" | ||
Line 345: | Line 361: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Timer for the game compulsion start feature, in seconds. | |Timer for the game compulsion start feature, in seconds. BCD format. | ||
|- | |- | ||
|$10FDDB | |$10FDDB | ||
Line 351: | Line 367: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Frame based timer for the game compulsion start feature. | |Frame-based timer for the game compulsion start feature. | ||
When | When it underflows, the timer is reset to 59 and START_COMPULSION_TIMER is decremented. | ||
|- | |- | ||
|$10FE88 | |$10FE88 | ||
Line 359: | Line 375: | ||
|longword | |longword | ||
|BIOS | |BIOS | ||
|Frame counter, updated by SYSTEM_IO | |Frame counter, updated by SYSTEM_IO. | ||
|- | |- | ||
|$10FEBF | |$10FEBF | ||
Line 365: | Line 381: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|0 : | |0:[[Backup RAM]] not currently used, 1:Currently used | ||
|- | |- | ||
|$10FEE1 | |$10FEE1 | ||
Line 371: | Line 387: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Number of | |Number of frames to skip in the routine which checks demo_end or if the player has pressed start. | ||
Decremented in [[SYSTEM_IO]] | Decremented in [[SYSTEM_IO]]. | ||
|- | |- | ||
|$10FEE3 | |$10FEE3 | ||
Line 379: | Line 395: | ||
|byte | |byte | ||
|BIOS | |BIOS | ||
|Only used in [[SYSTEM_INT1]], | |Only used in [[SYSTEM_INT1]]. If non-zero, will only do the [[RTC]] check during INT1. | ||
|- | |- | ||
|$10FEE4 | |$10FEE4 | ||
Line 388: | Line 404: | ||
|} | |} | ||
== | =4P mode related= | ||
Thoses will be valid on a 4P compatible bios only | |||
{| class="regdef" | |||
| '''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= | |||
{| class="regdef" | |||
| '''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= | |||
{| class="regdef" | {| class="regdef" | ||
Line 404: | Line 502: | ||
|} | |} | ||
[[Category:Base system]] | [[Category:Base system]] |
Latest revision as of 00:05, 20 August 2018
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_MODE | 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 | 8 bytes | BIOS | All set to 0x00 in normal mode. Set to "1streset" string in 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 |
$10FDC5 | BIOS_CARD_MODE | byte | BIOS? | Internal use? |
$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. BCD format. |
$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 |