BIOS calls: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
Line 1: Line 1:
Please see [[ASM Defines]] or [[C Defines]] for the hex addresses.
Please see [[ASM Defines]] or [[C Defines]] for the hex addresses.


Simplify hierarchy and tell on which system each call works ?
= Jump tables =


= Generic BIOS calls =
BIOS calls common to every system.
== BIOSF_CLEARFIX ($C004C2): Clear fix layer ==
'''Warning:''' register contents aren't preserved ! (Uses D0, D1, and A0)
Clears all the [[fix layer]] with tile # $FF, palette 0. The leftmost and rightmost columns are cleared with tile # $20, palette 0.<br>
In the default fix tileset, tile # $FF is filled with color 0 (transparent). Tile # $20 is opaque (used for masking).
== BIOSF_CLEARSPR ($C004C8): Clear sprites ==
'''Warning:''' register contents aren't preserved ! (Uses D0, D1, and A0)
*All maps are cleared with tile # $FF, no special attributes (all [[sprites|SCB1]] to $00FF,$0000)
*All shrinking values are set to max (all [[sprites|SCB2]] to $0FFF)
*All heights cleared to 0 (all [[sprites|SCB3]] to $0000)
*All X positions are set to 380 (all [[sprites|SCB4]] to $BE00)
== BIOSF_VBL ($C0044A): Multiple purpose VBL routine ==
Sets values in RAM according to buttons states, checks CDDA commands, probably other things... Always (?) called each frame by games.
Memory locations set (all 8bit):
<pre>
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
</pre>
Bit definitions: see [[Joypad]]
= AES/MVS BIOS calls =
SP-E jump table:
{| class="regdef"
{| class="regdef"
|Call address
|Call address
|Function
|SP-E
|TOP-SP1-1 (CDM3-2)
|Common CDZ BIOS
|-
|-
|$C00402 to $C00432
|$C00402 to $C00432
|Entry point
|colspan="3"|Entry point
|-
|-
|$C00438
|$C00438
|Boot process
|colspan="3"|Vblank handler for boot process (?)
|-
|$C0043E
|colspan="2"|?
|RTS
|-
|-
|$C0043E to $C00462
|$C00444
|?
|colspan="3"|Some games JMP here
|-
|$C0044A
|colspan="3"|BIOSF_VBL
|-
|$C00450 to $C0045C
|colspan="3"|?
|-
|$C00462
|colspan="2"|?
|RTS
|-
|-
|$C00468
|$C00468
|BIOSF_CRDACCESS
|BIOSF_CRDACCESS
|colspan="2"|?
|-
|-
|$C0046E
|$C0046E
|BIOSF_CRDREPORT
|BIOSF_CRDREPORT
|colspan="2"|?
|-
|$C00474,$C0047A
|?
|colspan="2"|RTS
|-
|$C00480 to $C004BC
|colspan="3"|RTS
|-
|-
|$C00474
|$C004C2
|
|colspan="3"|BIOSF_CLEARFIX
|-
|-
|$C0047A
|$C004C8
|
|colspan="3"|BIOSF_CLEARSPR
|-
|-
|$C00480 to $C004BC
|$C004CE, $C004D4
|colspan="3"|?
|-
|$C004DA
|Invalid
|HBlank handler
|?
|-
|$C004E0 to $C004F2
|Invalid
|$FF0000 range register operations and RTEs
|?
|-
|$C004F8 to $C0051C
|Invalid
|colspan="2"|RTS
|-
|$C00522 to $C00540
|Invalid
|colspan="2"|?
|-
|$C00546
|Invalid
|colspan="2"|Upload to DRAM
|-
|$C0054C
|Invalid
|colspan="2"|?
|-
|$C00522
|Invalid
|colspan="2"|Load file with animation
|-
|$C00558,$C005EE
|Invalid
|colspan="2"|?
|-
|$C00564
|Invalid
|colspan="2"|Load file without animation
|-
|$C0056A
|Invalid
|colspan="2"|CDDA
|-
|$C00570
|Invalid
|colspan="2"|Videolayers
|-
|$C00576 to $C00582
|Invalid
|colspan="2"|?
|-
|$C00588,$C00592
|Invalid
|RTS
|RTS
|?
|-
|-
|$C004C2 to $C004D4
|$C00598 to $C006FC
|?
|Invalid
|colspan="2"|RTS
|}
|}


== BIOSF_CRDACCESS ($C00468): Perform memory card operation ==
= Generic BIOS calls =
(Informations provided by [[User:Smkdan]])
BIOS calls common to every system.
 
Memory locations used:
 
<pre>
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
</pre>
 
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_VIDEOEN ($C00470): Enable/disable video layers ==
 
Parameters in bits 0~2 of D0:
*Bit0:Enable fix layer
*Bit1:Enable sprites
*Bit2:Enable video output
 
== BIOSF_UPLOAD ($C00546): Upload data to [[DRAM]] ==
 
<pre>
BIOS_UPSRC      (32bit): Source (Long)
BIOS_UPDEST    (32bit): Destination (Long)
BIOS_UPSIZE    (32bit): Size (Long)
BIOS_UPZONE    (8bit):  Zone (Byte, 0=PRG, 1=FIX, 2=SPR, 3=Z80, 4=PCM, 5=PAT)
BIOS_UPBANK    (8bit):  Bank (Byte)
</pre>
 
For FIX, Z80 (, PAT ?) and PCM upload, the destination has to be multiplied by 2 (8bit busses).
The SPR bank size is 1MiB (4 banks), PCM bank size is 512KiB (4 banks). The other zones aren't banked.
 
BIOS_UPDEST (and BIOS_UPSRC ?) is 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:
*The file name, ends with 0 (32 chars buffer ?)
*The destination bank (8bit)
*Eventual padding bytes to align the destination
*Destination (32bit)
 
Example (?): "STAGE_2.SPR",0x02,0x00,0x1600 loads STAGE_2.SPR at $201600 in the sprite DRAM.
 
For FIX, Z80 (, PAT ?) and PCM files, the destination is multiplied by 2 (8bit busses).


The destination memory is automatically chosen according to the file's extension.
*[[BIOSF_CLEARFIX]]: Clear fix layer
*[[BIOSF_CLEARSPR]]: Clear sprites
*[[BIOSF_VBL]]: Multiple purpose VBL routine


== BIOSF_CDPLAYER ($C0055E): Reset to CD player ==
= AES/MVS only BIOS calls =


== BIOSF_LOADFILEX (?) ($C00564): Load file from CD (no animation) ==
*[[BIOSF_CRDACCESS]]: Perform memory card operation


== BIOSF_CDDACMD ($C0056A): Issue CDDA command ==
= CD only BIOS calls =


Command/track pair in D0. Hooks the VBL interrupt for a while.
*[[BIOSF_VIDEOEN]]: Enable/disable video layers
*[[BIOSF_UPLOAD]]: Upload data to [[DRAM]]
*[[BIOSF_LOADFILE]]: Load file from CD (with animation)
*BIOSF_CDPLAYER ($C0055E): Reset to CD player
*BIOSF_LOADFILEX (?) ($C00564): Load file from CD (no animation)
*[[BIOSF_CDDACMD]]: Issue CDDA command


= CDZ BIOS calls =
= CDZ only BIOS calls =


Check track 0 ? [[Copy protection]]
Check track 0 ? [[Copy protection]]

Revision as of 18:23, 16 April 2011

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

Jump tables

Call address SP-E TOP-SP1-1 (CDM3-2) Common CDZ BIOS
$C00402 to $C00432 Entry point
$C00438 Vblank handler for boot process (?)
$C0043E ? RTS
$C00444 Some games JMP here
$C0044A BIOSF_VBL
$C00450 to $C0045C ?
$C00462 ? RTS
$C00468 BIOSF_CRDACCESS ?
$C0046E BIOSF_CRDREPORT ?
$C00474,$C0047A ? RTS
$C00480 to $C004BC RTS
$C004C2 BIOSF_CLEARFIX
$C004C8 BIOSF_CLEARSPR
$C004CE, $C004D4 ?
$C004DA Invalid HBlank handler ?
$C004E0 to $C004F2 Invalid $FF0000 range register operations and RTEs ?
$C004F8 to $C0051C Invalid RTS
$C00522 to $C00540 Invalid ?
$C00546 Invalid Upload to DRAM
$C0054C Invalid ?
$C00522 Invalid Load file with animation
$C00558,$C005EE Invalid ?
$C00564 Invalid Load file without animation
$C0056A Invalid CDDA
$C00570 Invalid Videolayers
$C00576 to $C00582 Invalid ?
$C00588,$C00592 Invalid RTS ?
$C00598 to $C006FC Invalid RTS

Generic BIOS calls

BIOS calls common to every system.

AES/MVS only BIOS calls

CD only BIOS calls

CDZ only BIOS calls

Check track 0 ? Copy protection