BIOS calls

Please see ASM Defines or C Defines for the hex addresses.

Simplify hierarchy and tell on which system each call works ?

= Universal BIOS calls =

BIOS calls common to every system.

BIOSF_? ($C0044A): (Called every frame)
Sets values in RAM according to buttons states. Often called each frame.

Memory locations set: BIOS_P1CURRENT    $10FD95 Joystick 1 state BIOS_P1PREVIOUS   $10FD96 Previous joystick 1 state BIOS_P1CHANGE     $10FD97 Joystick 1 state change (edges) BIOS_P1REPEAT     $10FD98 Joystick 1 repeat (edge, and strobe if held more than ? calls)

BIOS_P2CURRENT    $10FD9B Joystick 2 state BIOS_P2PREVIOUS   $10FD9C Previous joystick 2 state BIOS_P2CHANGE     $10FD9D Joystick 2 state change (edges) BIOS_P2REPEAT     $10FD9E Joystick 2 repeat (edge, and strobe if held more than ? calls)

BIOS_STATCURNT    Joystick 1/2 start/select state BIOS_STATCHANGE   Previous Joystick 1/2 start/select state

Bit definitions: see Joypads

= AES/MVS BIOS calls =

AES/MVS specific calls.

SP-E jump table:

BIOSF_CRDACCESS ($C00468): Perform memory card operation
(Informations provided by User:Smkdan)

Memory locations used (all 8bit):

BIOS_CRDF      (8bit): function to perform when calling BIOSF_CRDACCESS, see below table BIOS_CRDRESULT (8bit): 00 on success, else 80+ and encodes the error, see below table BIOS_CRDPTR    (32bit): pointer to read from/write to BIOS_CRDSIZE    (16bit): how much data to read/write from/to card BIOS_CRDNGH    (16bit): usually game NGH. Unique identifier for the game that 'owns' the save file BIOS_CRDFILE   (16bit): each NGH has up to 16 save 'files' associated with

To access memory card, the RAM addresses above must be set depending on the function being attempted BIOS_CRDF values:


 * $00 (Format)
 * No extra parameters


 * $01 (Find)
 * In: BIOS_CRDNGH: NGH to find save files for
 * Out: BIOS_CRDFILE: 16bit mask containing 1 bits for each one of the 16 save files if present.
 * 0 bits mean the save file is not present. i.e. FFFF = all 16 saves used, 8000 = only save file 15 is used


 * $02 (Load)
 * In:
 * CRDPTR: pointer to store loaded data to
 * CRDSIZE: the max size of data to load (automatically stops when entire file is loaded)
 * CRDNGH: NGH of file
 * CRDFILE: the file # of the given NGH to load from


 * $03 (Save)
 * In:
 * CRDPTR: pointer to read data to store to the card
 * CRDSIZE: size of data to save
 * CRDNGH: NGH of file
 * CRDFILE: the file # of the given NGH to save as


 * $04 (Delete)
 * In:
 * CRDNGH: NGH of file
 * CRDFILE: the file # of the given NGH to delete


 * $05 (GETNAME)
 * Gets name of a save file, forgot how these work...


 * $06 (SETUSER) (the username of the card)
 * $07 (GETUSER)

Errors may occur and the BIOS will store a value in BIOS_CRDRESULT depending on what went wrong:
 * $00: no errors
 * $80: no card inserted
 * $81: card inserted, but not formatted
 * $82: attempted to load a file that doesn't exist on the card
 * $83: checksum error?
 * $84: attempted to save to a full card
 * $85: card write protect switch is active

= CD BIOS calls =


 * Same ones as the AES/MVS ?

BIOSF_UPLOAD ($C00546): Upload data to DRAM
Arguments:
 * $10FEF8: Source (Long)
 * $10FEF4: Destination (Long)
 * $10FEDA: Zone (Byte, 0=PRG, 1=FIX, 2=SPR, 3=Z80, 4=PCM, 5=PAT)
 * $10FEFC: Size (Long)
 * $10FEDB: Bank (Byte)

For FIX, Z80 (, PAT ?) and PCM upload, Destination has to be multiplied by 2 (8 bit busses). SPR bank size is 1MiB (4 banks), PCM bank size is 512KiB (4 banks).

$10FEF4 is auto-incremented by the size upon completion, which allows to do multiple consecutive uploads.

BIOSF_LOADFILE ($C00552): Load file from CD (with animation)
A0 points to a file information block made of:
 * File name, ends with 0 (32 chars buffer ?)
 * Bank (byte)
 * Eventual padding bytes to align Offset
 * Offset (long)

For FIX, Z80 and PCM files, Offset is multiplied by 2 (8 bit busses).

The destination memory is automatically chosen according to the file's extension.

BIOSF_CDDACMD ($C0056A): Issue CDDA command
Word in D0, command/track ?

= CDZ BIOS calls =


 * Check track 0 ? Copy protection