USER subroutine

From NeoGeo Development Wiki
Revision as of 01:40, 2 February 2014 by Hpman (talk | contribs)
Jump to navigation Jump to search

The USER subroutine (not called, always jumped to by the BIOS) is required 68k code which needs to perform actions according to the command value set in BIOS_USER_REQUEST ($10FDAE ) .

At the end of the routine, a jump to BIOSF_SYSTEM_RETURN is needed to give back control to the BIOS.

Handling code

JT_User:
    dc.l   StartupInit
    dc.l   EyeCatcher
    dc.l   Game
    dc.l   Title

User:
    move.b  d0,REG_DIPSW
    clr.l   d0
    move.b  BIOS_USER_REQUEST,d0
    lsl.b   #2,d0
    lea     JT_User,a0
    movea.l (a0,d0),a0
    jsr     (a0)
    jmp     BIOSF_SYSTEM_RETURN

USER_REQUEST values

Command 0

Initilization of the soft/debug DIPs in the 68k user RAM. Used only once, when the game is started for the first time on a MVS system (probably when the BIOS doesn't find the game's NGH number in the backup RAM).

Set BIOS_USER_MODE ($10FDAF ) to 0 during operations, and don't forget to kick the watchdog as interrupts are disabled.

Initilization of the rest of the user RAM, the display, and I/O.

Viewpoint, which has its backup RAM save pointer set to $100000 (header $10E) and game save size set to $0200 (header $112) does this:

	move.b	#$00,BIOS_USER_MODE
	lea	$100000,a0		;Start of game save block
	move	#$001F,d1		;32*4 longword writes = 512 bytes
	moveq	#0,d0
.cl:
	move.l	d0,(a0)+
	move.l	d0,(a0)+
	move.l	d0,(a0)+
	move.l	d0,(a0)+
	dbf	d1,.cl
	move.b	d0,REG_WATCHDOG
...
        jmp     BIOSF_SYSTEM_RETURN

Typical use is load default data (default rankings, etc) into work-backup area, then call SYSTEM_RETURN.

Command 1

Show the game's own boot logo animation (when $114 = 1).

More information needed (end flag, BIOS_USER_MODE value ?).

Command 2

Show the game's demo (the recommended duration is ?).

Command 3

Show the game's title screen. This is called when a coin is inserted on MVS systems. BIOS_COMPULSION_TIMER ($10FDDA ) is used as a count-down timer for auto-start.