HOW TO PLAY: Difference between revisions
No edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
[[File:howtoplay_nam.png|thumb|A "scripted" how-to-play screen.]] | [[File:howtoplay_nam.png|thumb|A "scripted" how-to-play screen.]] | ||
The HOW_TO_PLAY ($C00474) [[system ROM]] call builds and animates an "how to play" screen from a command list. | The HOW_TO_PLAY ($C00474) [[system ROM]] call builds and animates an "how to play" screen from a command list. Only a few games use this call. | ||
The graphics are set up using the [[fix layer]] with hardcoded tile numbers (todo: tilemaps). | The graphics are set up using the [[fix layer]] with hardcoded tile numbers (todo: get tilemaps). | ||
=Command list= | =Command list= | ||
The command list | The command list must be loaded at $10F300 (how many bytes reserved ?). | ||
Each command is a longword (4 bytes): | Each command is a longword (4 bytes): | ||
Line 23: | Line 23: | ||
* If the parameter byte is less than $FF: Set a loop counter to that value | * 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 | * If the parameter byte is equal to $FF: Decrement the loop counter and loop back to the previous setup command until it reaches 0 | ||
==Type 1: Joystick state== | ==Type 1: Joystick state== | ||
Line 51: | Line 51: | ||
}} | }} | ||
If followed by a null command ($0.l) the next 16-bit word specifies a number of | If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command. | ||
==Type 2: Buttons state== | ==Type 2: Buttons state== | ||
Line 73: | Line 73: | ||
}} | }} | ||
If followed by a null command ($0.l) the next 16-bit word specifies a number of | If followed by a null command ($0.l) the next 16-bit word specifies a number of frames to wait before executing the next command. | ||
==Any other type: Text update== | ==Any other type: Text update== | ||
The longword value is a | The longword value is a pointer to a [[MESS_OUT]] data buffer. | ||
This command is '''always''' followed by a 16-bit word value which specifies a number of | This command is '''always''' followed by a 16-bit word value which specifies a number of frames to wait before executing the next command. | ||
=Example= | =Example= | ||
Line 118: | Line 118: | ||
* [[Baseball Stars Professional]] | * [[Baseball Stars Professional]] | ||
* [[Mahjong Kyo Retsuden]] | * [[Mahjong Kyo Retsuden]] | ||
* ... | |||
[[Category:Code]] | [[Category:Code]] | ||
[[Category:BIOS calls]] | [[Category:BIOS calls]] |
Revision as of 00:06, 13 June 2017
The HOW_TO_PLAY ($C00474) system ROM call builds and animates an "how to play" screen from a command list. Only a few games use this call.
The graphics are set up using the fix layer with hardcoded tile numbers (todo: get tilemaps).
Command list
The command list must be loaded 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 previous 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 frames 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 frames to wait before executing the next command.
Any other type: Text update
The longword value is a pointer to a MESS_OUT data buffer.
This command is always followed by a 16-bit word value which specifies a number of frames 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) ----' ...