PAT file: Difference between revisions
Jump to navigation
Jump to search
(→Format) |
(Updated incorrect information.) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
PAT files contain structured data to patch already loaded [[Z80]] code. They're used to replace [[YM2610#ADPCM|sound samples]] | PAT files contain structured data to patch already loaded [[Z80]] code. They're used to replace [[YM2610#ADPCM|sound samples]] address tables originally loaded from [[Z80 file]]s when different [[PCM file]]s are loaded. | ||
*Maximum file size: ? | * Maximum file size: 2048 bytes ? | ||
*Type code: 5 | * Type code: 5 | ||
* | * Loaded into: Z80 code RAM | ||
=Format= | =Format= | ||
Blocks of 5 | Blocks of 5 word (16 bit) values: | ||
*Patch address | * Patch address in bytes. $0000 means end of file. All the $0001~$FFFF range seems to work. | ||
*First data word is (/2), byteswapped and written to address | * First data word is (/2), byteswapped and written to address | ||
*Second data word is (/2)-1, byteswapped written to address+2 | * Second data word is (/2)-1, byteswapped written to address + 2 | ||
*Third (optional) data word is (/2), byteswapped and written to address+ | * Third (optional) data word is (/2), byteswapped and written to address + 5 | ||
*Fourth (optional) data word is (/2)-1, byteswapped written to address+ | * Fourth (optional) data word is (/2)-1, byteswapped written to address + 7 | ||
If third data word is | If the third data word is $0000, both the third and fourth patches are skipped. | ||
=Offset= | |||
When loading a PAT file (see [[loading files]]) the bank number and destination address parameters can be used to add an offset to all the patched values. This allows PCM data associated with a PAT file to be loaded into different regions of PCM DRAM without the need of multiple PAT files. | |||
Code snippet from the TOP-SP1 [[system ROM]] which handles this: | |||
<syntaxhighlight> | |||
C0BFAE MOVEQ #0x0,D0 Clear D0 00000000 | |||
C0BFB0 MOVE.B (0x7EDB,A5),D0 Bank number byte to D0 000000bb | |||
C0BFB4 SWAP D0 00bb0000 | |||
C0BFB6 LSL.L #4,D0 0bb00000 | |||
C0BFB8 OR.L (0x7EF4,A5),D0 Insert destination addr. 0bbddddd | |||
C0BFBC LSR.L #8,D0 000bbddd | |||
C0BFBE MOVE.W D0,(0x7736,A5) Offset will be: bddd | |||
</syntaxhighlight> | |||
[[Category:CD systems]] | [[Category:CD systems]] |
Latest revision as of 16:27, 6 November 2018
PAT files contain structured data to patch already loaded Z80 code. They're used to replace sound samples address tables originally loaded from Z80 files when different PCM files are loaded.
- Maximum file size: 2048 bytes ?
- Type code: 5
- Loaded into: Z80 code RAM
Format
Blocks of 5 word (16 bit) values:
- Patch address in bytes. $0000 means end of file. All the $0001~$FFFF range seems to work.
- First data word is (/2), byteswapped and written to address
- Second data word is (/2)-1, byteswapped written to address + 2
- Third (optional) data word is (/2), byteswapped and written to address + 5
- Fourth (optional) data word is (/2)-1, byteswapped written to address + 7
If the third data word is $0000, both the third and fourth patches are skipped.
Offset
When loading a PAT file (see loading files) the bank number and destination address parameters can be used to add an offset to all the patched values. This allows PCM data associated with a PAT file to be loaded into different regions of PCM DRAM without the need of multiple PAT files.
Code snippet from the TOP-SP1 system ROM which handles this:
C0BFAE MOVEQ #0x0,D0 Clear D0 00000000
C0BFB0 MOVE.B (0x7EDB,A5),D0 Bank number byte to D0 000000bb
C0BFB4 SWAP D0 00bb0000
C0BFB6 LSL.L #4,D0 0bb00000
C0BFB8 OR.L (0x7EF4,A5),D0 Insert destination addr. 0bbddddd
C0BFBC LSR.L #8,D0 000bbddd
C0BFBE MOVE.W D0,(0x7736,A5) Offset will be: bddd