HOW TO PLAY: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
[[File:howtoplay_nam.png|thumb|A "scripted" how-to-play screen.]] | |||
The HOW_TO_PLAY | The HOW_TO_PLAY ($C00474) [[system ROM]] call builds and animates an "how to play" screen from a command list. Not all games use this call. | ||
The graphics are set up using the [[fix layer]] with hardcoded tile numbers (todo: tilemaps). | |||
=Command list= | |||
The command list starts at $10F300 (how many bytes reserved ?). | |||
Each command is a longword (4 bytes): | |||
* The rightmost byte is the command parameter | |||
* The next byte is the command type (0~3) | |||
* If the command type isn't recognized, the longword is processed as being a pointer to a [[MESS OUT]] data buffer | |||
* The end command is $00000000 | |||
<pre> | |||
00000000 00000000 000000TT PPPPPPPP | |||
</pre> | |||
==Type 0: Loop control== | |||
$FF | * If the parameter byte is less than $FF: Set a loop counter to that value | ||
* If the parameter byte is equal to $FF: Decrement the loop counter and loop back to the setup command until it reaches 0 | |||
== | ==Type 1: Joystick state== | ||
Sets the color of each joystick direction arrow. | |||
1 | * 1 is light blue (pressed) | ||
* 0 is dark blue (released) | |||
0 | |||
{{8BitRegister | {{8BitRegister | ||
Line 46: | Line 51: | ||
}} | }} | ||
If followed by a null command ($0.l) the next word | If followed by a null command ($0.l) the next 16-bit word specifies a number of frame to wait before executing the next command. | ||
==Type 2: Buttons state== | |||
Sets the state of each button. | |||
0 | * 1 is pressed | ||
* 0 is released | |||
{{8BitRegister | {{8BitRegister | ||
| | | - | ||
|4 | |4 | ||
| | |D | ||
|1 | |||
|C | |||
|1 | |1 | ||
|B | |B | ||
|1 | |1 | ||
| | |A | ||
|1 | |1 | ||
}} | }} | ||
If followed by a null command ($0.l) the next word | If followed by a null command ($0.l) the next 16-bit word specifies a number of frame to wait before executing the next command. | ||
==Any other type: Text update== | |||
The longword value is a point to a [[MESS_OUT]] data buffer. | |||
This command is '''always''' followed by a 16-bit word value which specifies a number of frame to wait before executing the next command. | |||
= | =Example= | ||
[[NAM-1975]] sets up the following command list: | |||
<pre> | |||
0000 0200 All buttons released | |||
0000 01FF All arrows highlighted | |||
0010 F3E2 MESS_OUT write "NAM 1975" "CONTROL HERO AND CURSOR" | |||
0004 Wait 4 frames | |||
0000 000C Init loop counter to 12 | |||
0000 0100 All arrows cleared <--------------, | |||
0000 0000 Wait... | | |||
0008 ...8 frames | | |||
0000 01FF All arrows highlighted | | |||
0000 0000 Wait... | | |||
0008 ...8 frames | | |||
0000 00FF Loop back (blink all arrows 12 times) --' | |||
0000 0201 A button is pressed | |||
0000 0100 All arrows cleared | |||
0010 F418 MESS_OUT write "MACHINE GUN" | |||
0004 Wait 4 frames | |||
0000 000C Init loop counter to 12 | |||
0000 0200 All buttons released <--------------, | |||
0000 0000 Wait... | | |||
0008 ...8 frames | | |||
0000 0201 A button is pressed | | |||
0000 0000 Wait... | | |||
0008 ...8 frames | | |||
0000 00FF Loop back (blink A button 12 times) ----' | |||
... | |||
</pre> | |||
= List of games known to use HOW_TO_PLAY = | =List of games known to use HOW_TO_PLAY= | ||
* [[NAM-1975]] | * [[NAM-1975]] | ||
Line 83: | Line 119: | ||
* [[Mahjong Kyo Retsuden]] | * [[Mahjong Kyo Retsuden]] | ||
[[Category:Code]] | |||
[[Category:BIOS calls]] | [[Category:BIOS calls]] |
Revision as of 22:37, 21 February 2017
The HOW_TO_PLAY ($C00474) system ROM call builds and animates an "how to play" screen from a command list. Not all games use this call.
The graphics are set up using the fix layer with hardcoded tile numbers (todo: tilemaps).
Command list
The command list starts at $10F300 (how many bytes reserved ?).
Each command is a longword (4 bytes):
- The rightmost byte is the command parameter
- The next byte is the command type (0~3)
- If the command type isn't recognized, the longword is processed as being a pointer to a MESS OUT data buffer
- The end command is $00000000
00000000 00000000 000000TT PPPPPPPP
Type 0: Loop control
- If the parameter byte is less than $FF: Set a loop counter to that value
- If the parameter byte is equal to $FF: Decrement the loop counter and loop back to the setup command until it reaches 0
Type 1: Joystick state
Sets the color of each joystick direction arrow.
- 1 is light blue (pressed)
- 0 is dark blue (released)
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Def | Up-Right | Right | Down-Right | Down | Down-Left | Left | Up-Left | Up |
If followed by a null command ($0.l) the next 16-bit word specifies a number of frame to wait before executing the next command.
Type 2: Buttons state
Sets the state of each button.
- 1 is pressed
- 0 is released
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Def | - | D | C | B | A |
If followed by a null command ($0.l) the next 16-bit word specifies a number of frame to wait before executing the next command.
Any other type: Text update
The longword value is a point to a MESS_OUT data buffer.
This command is always followed by a 16-bit word value which specifies a number of frame to wait before executing the next command.
Example
NAM-1975 sets up the following command list:
0000 0200 All buttons released 0000 01FF All arrows highlighted 0010 F3E2 MESS_OUT write "NAM 1975" "CONTROL HERO AND CURSOR" 0004 Wait 4 frames 0000 000C Init loop counter to 12 0000 0100 All arrows cleared <--------------, 0000 0000 Wait... | 0008 ...8 frames | 0000 01FF All arrows highlighted | 0000 0000 Wait... | 0008 ...8 frames | 0000 00FF Loop back (blink all arrows 12 times) --' 0000 0201 A button is pressed 0000 0100 All arrows cleared 0010 F418 MESS_OUT write "MACHINE GUN" 0004 Wait 4 frames 0000 000C Init loop counter to 12 0000 0200 All buttons released <--------------, 0000 0000 Wait... | 0008 ...8 frames | 0000 0201 A button is pressed | 0000 0000 Wait... | 0008 ...8 frames | 0000 00FF Loop back (blink A button 12 times) ----' ...