USER subroutine: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
mNo edit summary
Line 62: Line 62:
Show the game's title screen. This is called when a coin is inserted on [[MVS systems]].
Show the game's title screen. This is called when a coin is inserted on [[MVS systems]].
{{BR|BIOS_COMPULSION_TIMER}} is used as a count-down timer for auto-start.
{{BR|BIOS_COMPULSION_TIMER}} is used as a count-down timer for auto-start.
Some games write 0x01 to 0x10FEC5 in this routine. It stops the bios calling command 3 twice after game over if credits are already in the system (attract mode skipped). When 0x00 the bios will initiate another command 3 a few frames after the first. This causes the title page to draw twice. This could be a bios bug which SNK fixed by adding this variable in a later bios revision (needs confirming).
To see an example compare Art or Fighting to Art of Fighting 2 after game over.


[[Category:Code]]
[[Category:Code]]

Revision as of 11:37, 24 January 2015

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 jump to 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.

Some games write 0x01 to 0x10FEC5 in this routine. It stops the bios calling command 3 twice after game over if credits are already in the system (attract mode skipped). When 0x00 the bios will initiate another command 3 a few frames after the first. This causes the title page to draw twice. This could be a bios bug which SNK fixed by adding this variable in a later bios revision (needs confirming).

To see an example compare Art or Fighting to Art of Fighting 2 after game over.