From 69e5f68ef0c67ab7f38275cb955fb8de1b7e133c Mon Sep 17 00:00:00 2001 From: spicyjpeg Date: Fri, 17 May 2024 00:14:47 +0000 Subject: [PATCH] Deployed 61ee97d with MkDocs version: 1.4.2 --- .nojekyll | 0 404.html | 727 + CNAME | 1 + aboutcredits/index.html | 863 + arcadecabinets/index.html | 1131 + assets/images/favicon.png | Bin 0 -> 1870 bytes assets/javascripts/bundle.19047be9.min.js | 29 + assets/javascripts/bundle.19047be9.min.js.map | 8 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 ++++ .../workers/search.208ed371.min.js | 42 + .../workers/search.208ed371.min.js.map | 8 + assets/stylesheets/main.240905d7.min.css | 1 + assets/stylesheets/main.240905d7.min.css.map | 1 + assets/stylesheets/palette.a0c5b2b5.min.css | 1 + .../stylesheets/palette.a0c5b2b5.min.css.map | 1 + cdromdrive/index.html | 8609 +++++ cdromfileformats/index.html | 30587 ++++++++++++++++ .../index.html | 5705 +++ cdromvideocdsvcd/index.html | 2409 ++ cheatdevices/index.html | 2861 ++ controller-pinout.jpg | Bin 0 -> 41704 bytes controllersandmemorycards/index.html | 6477 ++++ cpuspecifications/index.html | 2626 ++ css/extra.css | 14 + dmachannels/index.html | 1190 + expansionportpio/index.html | 2343 ++ geometrytransformationenginegte/index.html | 2303 ++ graphicsprocessingunitgpu/index.html | 3653 ++ hardwarenumbers/index.html | 1375 + index.html | 860 + interrupts/index.html | 963 + iomap/index.html | 1356 + kernelbios/index.html | 8366 +++++ konamisystem573/index.html | 13382 +++++++ macroblockdecodermdec/index.html | 1725 + memorycontrol/index.html | 1141 + memorymap/index.html | 1047 + pinouts/index.html | 7144 ++++ pocketstation/index.html | 5370 +++ psx-spx.pdf | Bin 0 -> 4113883 bytes psxdevboardchipsets/index.html | 1307 + search/search_index.json | 1 + serialinterfacessio/index.html | 1196 + sitemap.xml | 148 + sitemap.xml.gz | Bin 0 -> 526 bytes soundprocessingunitspu/index.html | 3264 ++ timers/index.html | 939 + unpredictablethings/index.html | 1155 + 75 files changed, 129524 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 CNAME create mode 100644 aboutcredits/index.html create mode 100644 arcadecabinets/index.html create mode 100644 assets/images/favicon.png create mode 100644 assets/javascripts/bundle.19047be9.min.js create mode 100644 assets/javascripts/bundle.19047be9.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.208ed371.min.js create mode 100644 assets/javascripts/workers/search.208ed371.min.js.map create mode 100644 assets/stylesheets/main.240905d7.min.css create mode 100644 assets/stylesheets/main.240905d7.min.css.map create mode 100644 assets/stylesheets/palette.a0c5b2b5.min.css create mode 100644 assets/stylesheets/palette.a0c5b2b5.min.css.map create mode 100644 cdromdrive/index.html create mode 100644 cdromfileformats/index.html create mode 100644 cdrominternalinfoonpsxcdromcontroller/index.html create mode 100644 cdromvideocdsvcd/index.html create mode 100644 cheatdevices/index.html create mode 100644 controller-pinout.jpg create mode 100644 controllersandmemorycards/index.html create mode 100644 cpuspecifications/index.html create mode 100644 css/extra.css create mode 100644 dmachannels/index.html create mode 100644 expansionportpio/index.html create mode 100644 geometrytransformationenginegte/index.html create mode 100644 graphicsprocessingunitgpu/index.html create mode 100644 hardwarenumbers/index.html create mode 100644 index.html create mode 100644 interrupts/index.html create mode 100644 iomap/index.html create mode 100644 kernelbios/index.html create mode 100644 konamisystem573/index.html create mode 100644 macroblockdecodermdec/index.html create mode 100644 memorycontrol/index.html create mode 100644 memorymap/index.html create mode 100644 pinouts/index.html create mode 100644 pocketstation/index.html create mode 100644 psx-spx.pdf create mode 100644 psxdevboardchipsets/index.html create mode 100644 search/search_index.json create mode 100644 serialinterfacessio/index.html create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 soundprocessingunitspu/index.html create mode 100644 timers/index.html create mode 100644 unpredictablethings/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..fc2c3e3 --- /dev/null +++ b/404.html @@ -0,0 +1,727 @@ + + + + + + + + + + + + + + + + + + PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..c62d824 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +psx-spx.consoledev.net diff --git a/aboutcredits/index.html b/aboutcredits/index.html new file mode 100644 index 0000000..aa0ed02 --- /dev/null +++ b/aboutcredits/index.html @@ -0,0 +1,863 @@ + + + + + + + + + + + + + + + + + + + + + + + + About & Credits - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

About & Credits

+

Credits

+

Contributors to Martin Korth's original documentation: +

GPU.TXT by doomed/padua; based on info from K-communications & Nagra/Blackbag
+GTE.TXT by doomed@c64.org / psx.rules.org
+SPU.TXT by doomed@c64.org / psx.rules.org
+CDINFO.TXT by doomed with big thanks to Barubary, who rewrote a large part
+SYSTEM.TXT by doomed with thanx to Herozero for breakpoint info
+PS_ENG.TXT PlayStation PAD/Memory Interface Protocol by HFB03536
+IDT79R3041 Hardware User's Manual by Integrated Device Technology, Inc.
+IDTR3051, R3052 RISController User's Manual by Integrated Device Technology
+PSX.* by Joshua Walker (additional details in various distorted file formats)
+LIBMIRAGE by Rok; info/source code for various cdrom-image formats
+psxdev.ru; cdrom sub-cpu decapping
+

+

All the contributors to the psx-spx.github.io +repo who've helped update, correct and expand this information.

+

PSXSPX homepage

+ +

Contact

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/arcadecabinets/index.html b/arcadecabinets/index.html new file mode 100644 index 0000000..c1b050a --- /dev/null +++ b/arcadecabinets/index.html @@ -0,0 +1,1131 @@ + + + + + + + + + + + + + + + + + + + + + + + + Arcade Cabinets - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Arcade Cabinets

+

The following arcade PCBs are known to be based on PlayStation hardware:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ManufacturerBoardCPU clockGPURAMVRAMAdditional CPUsAudioStorage
KonamiGV33 MHzv02 MB1 MBSPU, CD-DASCSI CD-ROM, optional flash daughterboard
KonamiGQ33 MHzv14 MB2 MB68000, TMS570022x custom PCM chipSCSI hard drive
KonamiSystem 57333 MHzv24 MB2 MBH8/3644SPU, CD-DA, optional MP3 decoder16 MB flash, optional ATAPI CD-ROM, PCMCIA cards
KonamiTwinkle System33 MHzv24 MB2 MB68000, DVD playerSPU, Ricoh RF5C400SCSI CD-ROM, IDE hard drive, VCD/DVD, optional floppy
NamcoSystem 11 (COH-100 CPU board)33 MHzv14 MB2 MBNamco C76SPU (unpopulated), custom PCM chipMask ROM daughterboard
NamcoSystem 11 (COH-110 CPU board)33 MHzv24 MB2 MBNamco C76Custom PCM chipMask ROM daughterboard
NamcoSystem 12 (COH-700 CPU board)50 MHzv2b4 MB2 MBH8/3002, optional SH-2Custom PCM chip, optional XA-ADPCMMask ROM/flash daughterboard, optional ATAPI CD-ROM
NamcoSystem 12 (COH-716 CPU board)50 MHzv216 MB2 MBH8/3002, optional SH-2Custom PCM chip, optional XA-ADPCMMask ROM/flash daughterboard, optional ATAPI CD-ROM
NamcoSystem 1050 MHzv216 MB2 MBSPU, optional MP3 decoderMask ROM/flash daughterboard, optional ATAPI CD-ROM
SonyZN-133 MHzv24-8 MB1-2 MBOptional game-specificSPU, optional game-specific hardwareMask ROM/flash daughterboard
SonyZN-250 MHzv2 or v2b4-16 MB2 MBOptional game-specificSPU, optional game-specific hardwareMask ROM/flash daughterboard
TaitoFX-1A (ZN-1 + custom addon board)33 MHzv24 MB1 MBZ80SPU, Yamaha YM2610BMask ROM daughterboard
TaitoFX-1B (ZN-1 + custom addon board)33 MHzv24 MB1 MBSPU, custom Zoom DSPMask ROM daughterboard
TaitoG-NET (ZN-2 + custom addon board)50 MHzv2b4 MB2 MBMN1020012A, TMS57002SPU, custom Zoom DSP8 MB flash, custom encrypted PCMCIA/CF card
+

The following boards were mentioned in the original nocash page, but almost +nothing is known about them:

+
    +
  • Atlus PSX
  • +
  • PS Arcade 95
  • +
  • Tecmo TPS
  • +
+

Currently only documentation for the System 573 exists. More information about +other arcade boards could be obtained from MAME source code.

+

CPU

+

Most boards use the same CPUs as retail consoles and development units. The +System 10, System 12 and ZN-2 feature a later CPU revision that allows for up +to 16 MB main RAM (as opposed to 8 MB on the standard CPUs) and clock speeds of +up to 50 MHz. The bus interface and memory control registers on these chips may +behave differently from the ones found on standard CPUs due to the extended +address space.

+

GPU

+

Most systems have a regular v2 GPU but expand VRAM to 2 MB, arranged as a +1024x1024 buffer rather than 1024x512. The Konami GQ and COH-100 (CPU + GPU +daughterboard used in early System 11 units) have the v1 "prototype" GPU, which +uses completely different commands from v0/v2 and is generally not compatible +with any known version of Sony's development tools. Most System 11 games seem to +support both GPU types.

+

Some System 12 and ZN-2 variants use a later revision of the v2 GPU (v2b). The +differences between v2 and v2b GPUs are currently unknown.

+

Audio

+

Almost all boards extend the SPU's functionality with additional hardware, +usually a custom fixed-function DSP and in some cases a separate sound CPU. The +custom audio hardware is typically on a separate board, with some systems +allowing it to be unplugged if the game does not require it. The Konami GQ, +System 11 (both COH-100 and COH-110 variants) and System 12 omit the SPU +entirely.

+

Controls

+

Most systems are designed to be connected to a cabinet through a JAMMA board +edge connector, which carries power, a video output, player controls and +coin/service button inputs. These inputs are typically accessed via custom +memory-mapped I/O ports. As control schemes may vary greatly from game to game, +many systems also provide means to connect additional inputs or expansion +boards.

+

Some boards feature a JVS port (a standardized serial bus protocol used to +connect controls and peripherals to modern arcade systems), allowing standard +JVS I/O boards to be used if supported by games.

+

Storage

+

With the exception of Konami, all manufacturers used mask ROMs or flash memory +for game storage. The wiring and layout of the ROMs varies for each board; on +some systems the BIOS and game are part of the same ROM, while others have +separate BIOS and game ROMs. Graphical and audio assets may also be stored +separately or within the main game ROM.

+

Konami systems store game executables and assets on standard SCSI/IDE hard +drives or CD-ROMs. The System 573 can also boot from its built-in flash or a +PCMCIA flash card, using the CD-ROM drive only to install new games, however +the vast majority of 573 games are too large to fit entirely in the flash and +still rely on reading files from the disc after installation. The Twinkle +System is particularly unusual as it has a CD-ROM drive accessed by the main +CPU, a separate hard drive used by the audio board and an external DVD player +unit for background videos.

+

The System 10 and System 12 are the only known non-Konami boards with CD-ROM +support. The former can be connected directly to an ATAPI drive, while the +latter requires an expansion module that provides an IDE interface and XA-ADPCM +decoding through an integrated SH-2 CPU. Whether these boards support CD-ROM +booting without any game ROMs installed is currently unknown.

+

Security

+

The implementation of anti-piracy measures varies for each manufacturer.

+
    +
  • Namco boards have their ROMs encrypted, with a CPLD ("KEYCUS" chip) wired + between the CPU and ROM performing on-the-fly decryption. Some KEYCUS chips + require the CPU to issue commands in order to unlock different sections of the + ROM.
  • +
  • Sony's ZN-1 and ZN-2 are fitted by each manufacturer with a custom BIOS ROM + and security microcontroller, which are then verified by the games. This makes + it harder to convert a ZN-1 or ZN-2 game to a different one by simply swapping + out the game-specific daughterboard.
  • +
  • CD-ROMs for Konami boards were typically shipped alongside a security dongle + or cartridge that must be plugged in to boot the game. Some games write the + system's serial number to the dongle during installation, preventing + installation of the same game on more than one cabinet. The System 573's + optional MP3 decoder board additionally features an FPGA used to decrypt MP3 + files on the disc during playback.
  • +
  • Taito G-NET games are stored on a custom manufactured PCMCIA card which is not + readable by any normal means. The contents of the card are presumably + encrypted as well.
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c GIT binary patch literal 1870 zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0 zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7 z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9 zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K z^bTyO6>Gar#P_W2gEMwq)ot3; zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8 zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq! zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d; ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV** z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo IM6N<$f(jP3KmY&$ literal 0 HcmV?d00001 diff --git a/assets/javascripts/bundle.19047be9.min.js b/assets/javascripts/bundle.19047be9.min.js new file mode 100644 index 0000000..0e09ba9 --- /dev/null +++ b/assets/javascripts/bundle.19047be9.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Ri=Object.create;var gr=Object.defineProperty;var ki=Object.getOwnPropertyDescriptor;var Hi=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Pi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,on=Object.prototype.propertyIsEnumerable;var nn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&nn(e,r,t[r]);if(Ht)for(var r of Ht(t))on.call(t,r)&&nn(e,r,t[r]);return e};var an=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&on.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var $i=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Hi(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=ki(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ri(Pi(e)):{},$i(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var cn=Pt((xr,sn)=>{(function(e,t){typeof xr=="object"&&typeof sn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function c(T){var Qe=T.type,De=T.tagName;return!!(De==="INPUT"&&s[Qe]&&!T.readOnly||De==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function f(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(a(r.activeElement)&&f(r.activeElement),n=!0)}function m(T){n=!1}function d(T){a(T.target)&&(n||c(T.target))&&f(T.target)}function h(T){a(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),G())}function G(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function oe(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,oe())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),G(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var fn=Pt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var p=f.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},s=function(){var f=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof f){var d=this;p.forEach(function(oe,N){d.append(N,oe)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),f._entries&&(f._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(c,f){typeof c!="string"&&(c=String(c)),f&&typeof f!="string"&&(f=String(f));var u=document,p;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=f,u.head.appendChild(p);try{if(p.href.indexOf(f)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+f+" due to "+T)}}var m=u.createElement("a");m.href=c,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=c,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,G=!0,oe=this;["append","delete","set"].forEach(function(T){var Qe=h[T];h[T]=function(){Qe.apply(h,arguments),v&&(G=!1,oe.search=h.toString(),G=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,G&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(c){Object.defineProperty(s,c,{get:function(){return this._anchorElement[c]},set:function(f){this._anchorElement[c]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(c){a(c)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(c){this._anchorElement.search=c,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var c=this;return function(){return c.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(c){this._anchorElement.href=c,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(c){this._anchorElement.pathname=c},enumerable:!0},origin:{get:function(){var c={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=c&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(c){},enumerable:!0},username:{get:function(){return""},set:function(c){},enumerable:!0}}),i.createObjectURL=function(c){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(c){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var Kr=Pt((Mt,qr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Mt=="object"&&typeof qr=="object"?qr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ci}});var s=i(279),a=i.n(s),c=i(370),f=i.n(c),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var E=p()(O);return m("cut"),E},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[O?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var G=function(O,E){var H=v(O);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},oe=function(O){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof O=="string"?H=G(O,E):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?H=G(O.value,E):(H=p()(O),m("copy")),H},N=oe;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(E){return typeof E}:T=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},T(j)}var Qe=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=O.action,H=E===void 0?"copy":E,I=O.container,q=O.target,Me=O.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function wi(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function rn(j,O){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=f()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",kt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Me,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(kt){Me=Me&&!!document.queryCommandSupported(kt)}),Me}}]),E}(a()),Ci=Ai},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=f.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function c(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function f(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=c},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function c(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return f(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=c},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),f=document.createRange();f.selectNodeContents(i),c.removeAllRanges(),c.addRange(f),s=c.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function f(){c.off(i,f),s.apply(a,arguments)}return f._=s,this.on(i,f,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,f=a.length;for(c;c{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var ns=/["'&<>]/;Go.exports=os;function os(e){var t=""+e,r=ns.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(f[0]===6||f[0]===2)){r=0;continue}if(f[0]===3&&(!i||f[1]>i[0]&&f[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{c(n[m](d))}catch(h){p(i[0][3],h)}}function c(m){m.value instanceof et?Promise.resolve(m.value.v).then(f,u):p(i[0][2],m)}function f(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function ln(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(f){i({value:f,done:a})},s)}}function C(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),c=a.next();!c.done;c=a.next()){var f=c.value;f.remove(this)}}catch(v){t={error:v}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(C(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{mn(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)mn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function jt(e){return e instanceof Ie||e&&"closed"in e&&C(e.remove)&&C(e.add)&&C(e.unsubscribe)}function mn(e){C(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new En(r,n)},t}(F);var En=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,c=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Tn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var Te=new Tn(Sn);var _=new F(function(e){return e.complete()});function Vt(e){return e&&C(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return C(Cr(e))?e.pop():void 0}function Oe(e){return Vt(Cr(e))?e.pop():void 0}function zt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return C(e==null?void 0:e.then)}function qt(e){return C(e[ft])}function Kt(e){return Symbol.asyncIterator&&C(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ni(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=Ni();function Gt(e){return C(e==null?void 0:e[Yt])}function Bt(e){return pn(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return C(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(qt(e))return qi(e);if(pt(e))return Ki(e);if(Nt(e))return Qi(e);if(Kt(e))return On(e);if(Gt(e))return Yi(e);if(Jt(e))return Gi(e)}throw Qt(e)}function qi(e){return new F(function(t){var r=e[ft]();if(C(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ki(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?A(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Vn(function(){return new Zt}))}}function zn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(f){var u,p,m,d=0,h=!1,v=!1,G=function(){p==null||p.unsubscribe(),p=void 0},oe=function(){G(),u=m=void 0,h=v=!1},N=function(){var T=u;oe(),T==null||T.unsubscribe()};return y(function(T,Qe){d++,!v&&!h&&G();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,c))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,G(),p=$r(oe,o,$e),De.error($e)},complete:function(){h=!0,G(),p=$r(oe,s),De.complete()}}),U(T).subscribe(u))})(f)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),B())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Qn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,Te),l(()=>Xe(e)),V(Xe(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Te),l(()=>rr(e)),V(rr(e)))}var Gn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Dr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ga?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Dr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=va.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Bn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Xn=typeof WeakMap!="undefined"?new WeakMap:new Gn,Zn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ya.getInstance(),n=new Aa(t,r,this);Xn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Zn.prototype[e]=function(){var t;return(t=Xn.get(this))[e].apply(t,arguments)}});var Ca=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:Zn}(),eo=Ca;var to=new x,Ra=$(()=>k(new eo(e=>{for(let t of e)to.next(t)}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var ro=new x,ka=$(()=>k(new IntersectionObserver(e=>{for(let t of e)ro.next(t)},{threshold:0}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function sr(e){return ka.pipe(S(t=>t.observe(e)),g(t=>ro.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function no(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),B())}var cr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function oo(e){return cr[e].checked}function Ke(e,t){cr[e].checked!==t&&cr[e].click()}function Ue(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function Ha(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Pa(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function io(){let e=b(window,"keydown").pipe(A(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:oo("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),A(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!Ha(n,r)}return!0}),pe());return Pa().pipe(g(t=>t?_:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function ao(){return new x}function so(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)so(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)so(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function co(){return location.hash.substring(1)}function Vr(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function $a(e){return L(b(window,"hashchange"),e).pipe(l(co),V(co()),A(t=>t.length>0),J(1))}function fo(e){return $a(e).pipe(l(t=>ce(`[id="${t}"]`)),A(t=>typeof t!="undefined"))}function zr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function uo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function Nr(e,t){return e.pipe(g(r=>r?t():_))}function ur(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>_),g(r=>r.status!==200?Tt(()=>new Error(r.statusText)):k(r)))}function We(e,t){return ur(e,t).pipe(g(r=>r.json()),J(1))}function po(e,t){let r=new DOMParser;return ur(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function pr(e){let t=M("script",{src:e});return $(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(g(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function lo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function mo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(lo),V(lo()))}function ho(){return{width:innerWidth,height:innerHeight}}function bo(){return b(window,"resize",{passive:!0}).pipe(l(ho),V(ho()))}function vo(){return Q([mo(),bo()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(Z("size")),o=Q([n,r]).pipe(l(()=>Xe(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:c,y:f}])=>({offset:{x:s.x-c,y:s.y-f+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,c,f)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:c,error:f});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

CDROM Drive

+

Playstation CDROM I/O Ports

+

CDROM Controller I/O Ports

+

Playstation CDROM Commands

+

CDROM Controller Command Summary
+CDROM - Control Commands
+CDROM - Seek Commands
+CDROM - Read Commands
+CDROM - Status Commands
+CDROM - CD Audio Commands
+CDROM - Test Commands
+CDROM - Secret Unlock Commands
+CDROM - Video CD Commands
+CDROM - Mainloop/Responses
+CDROM - Response Timings
+CDROM - Response/Data Queueing

+

General CDROM Disk Format

+

CDROM Disk Format
+CDROM Subchannels
+CDROM Sector Encoding
+CDROM Scrambling
+CDROM XA Subheader, File, Channel, Interleave
+CDROM XA Audio ADPCM Compression
+CDROM ISO Volume Descriptors
+CDROM ISO File and Directory Descriptors
+CDROM ISO Misc
+CDROM File Formats
+CDROM Video CDs (VCD)

+

Playstation CDROM Protection

+

CDROM Protection - SCEx Strings
+CDROM Protection - Bypassing it
+CDROM Protection - Modchips
+CDROM Protection - Chipless Modchips
+CDROM Protection - LibCrypt

+

Playstation CDROM Coprocessor

+

CDROM Internal Info on PSX CDROM Controller

+

CDROM Controller I/O Ports

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1F801800h1F801801h1F801802h1F801803h
0Index/Status (RW)Response FIFO (R) (Mirror)
Command Register (W)
Data FIFO (R)
Parameter FIFO (W)
Interrupt Enable Register (R)
Request Register (W)
1Index/Status (RW)Response FIFO (R)
Sound Map Data Out (W)
Data FIFO (R)
Interrupt Enable Register (W)
Interrupt Flag Register (RW)
2Index/Status (RW)Response FIFO (R) (Mirror)
Sound Map Coding Info (W)
Data FIFO (R)
Left-CD to Left-SPU Volume (W)
Interrupt Enable Register (R) (Mirror)
Left-CD to Right-SPU Volume (W)
3Index/Status (RW)Response FIFO (R) (Mirror)
Right-CD to Right-SPU Volume (W)
Data FIFO (R)
Right-CD to Left-SPU Volume (W)
Interrupt Flag Register (R) (Mirror)
Audio Volume Apply Changes (W)
+

1F801800h - Index/Status Register (Bit0-1 R/W) (Bit2-7 Read Only)

+

  0-1 Index   Port 1F801801h-1F801803h index (0..3 = Index0..Index3)   (R/W)
+  2   ADPBUSY XA-ADPCM fifo empty  (0=Empty) ;set when playing XA-ADPCM sound
+  3   PRMEMPT Parameter fifo empty (1=Empty) ;triggered before writing 1st byte
+  4   PRMWRDY Parameter fifo full  (0=Full)  ;triggered after writing 16 bytes
+  5   RSLRRDY Response fifo empty  (0=Empty) ;triggered after reading LAST byte
+  6   DRQSTS  Data fifo empty      (0=Empty) ;triggered after reading LAST byte
+  7   BUSYSTS Command/parameter transmission busy  (1=Busy)
+
+Bit3,4,5 are bound to 5bit counters; ie. the bits become true at specified +amount of reads/writes, and thereafter once on every further 32 reads/writes.

+

1F801801h.Index0 - Command Register (W)

+

  0-7  Command Byte
+
+Writing to this address sends the command byte to the CDROM controller, which +will then read-out any Parameter byte(s) which have been previously stored in +the Parameter Fifo. It takes a while until the command/parameters are +transferred to the controller, and until the response bytes are received; once +when completed, interrupt INT3 is generated (or INT5 in case of invalid +command/parameter values), and the response (or error code) can be then read +from the Response Fifo. Some commands additionally have a second response, +which is sent with another interrupt.

+

1F801802h.Index0 - Parameter Fifo (W)

+

  0-7  Parameter Byte(s) to be used for next Command
+
+Before sending a command, write any parameter byte(s) to this address.

+

1F801803h.Index0 - Request Register (W)

+
  0-4 0    Not used (should be zero)
+  5   SMEN Want Command Start Interrupt on Next Command (0=No change, 1=Yes)
+  6   BFWR ...
+  7   BFRD Want Data         (0=No/Reset Data Fifo, 1=Yes/Load Data Fifo)
+
+

1F801802h.Index0..3 - Data Fifo - 8bit/16bit (R)

+

After ReadS/ReadN commands have generated INT1, software must set the Want Data +bit (1F801803h.Index0.Bit7), then wait until Data Fifo becomes not empty +(1F801800h.Bit6), the datablock (disk sector) can be then read from this +register.
+

  0-7  Data 8bit  (one byte), or alternately,
+  0-15 Data 16bit (LSB=First byte, MSB=Second byte)
+
+The PSX hardware allows to read 800h-byte or 924h-byte sectors, indexed as +[000h..7FFh] or [000h..923h], when trying to read further bytes, then the PSX +will repeat the byte at index [800h-8] or [924h-4] as padding value.
+Port 1F801802h can be accessed with 8bit or 16bit reads (ie. to read a +2048-byte sector, one can use 2048 load-byte opcodes, or 1024 load halfword +opcodes, or, more conventionally, a 512 word DMA transfer; the actual CDROM +databus is only 8bits wide, so CPU/DMA are apparently breaking 16bit/32bit +reads into multiple 8bit reads from 1F801802h).

+

1F801801h.Index1 - Response Fifo (R)

+

1F801801h.Index0,2,3 - Response Fifo (R) (Mirrors)

+

  0-7  Response Byte(s) received after sending a Command
+
+The response Fifo is a 16-byte buffer, most or all responses are less than 16 +bytes, after reading the last used byte (or before reading anything when the +response is 0-byte long), Bit5 of the Index/Status register becomes zero to +indicate that the last byte was received.
+When reading further bytes: The buffer is padded with 00h's to the end of the +16-bytes, and does then restart at the first response byte (that, without +receiving a new response, so it'll always return the same 16 bytes, until a new +command/response has been sent/received).

+

1F801802h.Index1 - Interrupt Enable Register (W)

+

1F801803h.Index0 - Interrupt Enable Register (R)

+

1F801803h.Index2 - Interrupt Enable Register (R) (Mirror)

+

  0-4  Interrupt Enable Bits (usually all set, ie. 1Fh=Enable All IRQs)
+  5-7  Unknown/unused (write: should be zero) (read: usually all bits set)
+
+XXX WRITE: bit5-7 unused should be 0 // READ: bit5-7 unused

+

1F801803h.Index1 - Interrupt Flag Register (R/W)

+

1F801803h.Index3 - Interrupt Flag Register (R) (Mirror)

+

  0-2   Read: Response Received   Write: 7=Acknowledge   ;INT1..INT7
+  3     Read: Unknown (usually 0) Write: 1=Acknowledge   ;INT8  ;XXX CLRBFEMPT
+  4     Read: Command Start       Write: 1=Acknowledge   ;INT10h;XXX CLRBFWRDY
+  5     Read: Always 1 ;XXX "_"   Write: 1=Unknown              ;XXX SMADPCLR
+  6     Read: Always 1 ;XXX "_"   Write: 1=Reset Parameter Fifo ;XXX CLRPRM
+  7     Read: Always 1 ;XXX "_"   Write: 1=Unknown              ;XXX CHPRST
+
+Writing "1" bits to bit0-4 resets the corresponding IRQ flags; normally one +should write 07h to reset the response bits, or 1Fh to reset all IRQ bits. +Writing values like 01h is possible (eg. that would change INT3 to INT2, but +doing that would be total nonsense). After acknowledge, the Response Fifo is +made empty, and if there's been a pending command, then that command gets send +to the controller.
+The lower 3bit indicate the type of response received,
+
  INT0   No response received (no interrupt request)
+  INT1   Received SECOND (or further) response to ReadS/ReadN (and Play+Report)
+  INT2   Received SECOND response (to various commands)
+  INT3   Received FIRST response (to any command)
+  INT4   DataEnd (when Play/Forward reaches end of disk) (maybe also for Read?)
+  INT5   Received error-code (in FIRST or SECOND response)
+         INT5 also occurs on SECOND GetID response, on unlicensed disks
+         INT5 also occurs when opening the drive door (even if no command
+            was sent, ie. even if no read-command or other command is active)
+  INT6   N/A
+  INT7   N/A
+
+The other 2bit indicate something else,
+
  INT8   Unknown (never seen that bit set yet)
+  INT10h Command Start (when INT10h requested via 1F801803h.Index0.Bit5)
+
+The response interrupts are queued, for example, if the 1st response is INT3, +and the second INT5, then INT3 is delivered first, and INT5 is not delivered +until INT3 is acknowledged (ie. the response interrupts are NOT ORed together +to produce INT7 or so). The upper bits however can be ORed with the lower bits +(ie. Command Start INT10h and 1st Response INT3 would give INT13h).

+

Caution - Unstable IRQ Flag polling

+

IRQ flag changes aren't synced with the MIPS CPU clock. If more than one bit +gets set (and the CPU is reading at the same time) then the CPU does +occassionally see only one of the newly bits:
+

  0 ----------> 3   ;99.9%  normal case INT3's
+  0 ----------> 5   ;99%    normal case INT5's
+  0 ---> 1 ---> 3   ;0.1%   glitch: occurs about once per thousands of INT3's
+  0 ---> 4 ---> 5   ;1%     glitch: occurs about once per hundreds of INT5's
+
+As workaround, do something like:
+
 @@polling_lop:
+  irq_flags = [1F801803h] AND 07h       ;<-- 1st read (may be still unstable)
+  if irq_flags = 00h then goto @@polling_lop
+  irq_flags = [1F801803h] AND 07h       ;<-- 2nd read (should be stable now)
+  handle irq_flags and acknowledge them
+
+The problem applies only when manually polling the IRQ flags (an actual IRQ +handler will get triggered when the flags get nonzero, and the flags will have +stabilized once when the IRQ handler is reading them) (except, a combination of +IRQ10h followed by IRQ3 can also have unstable LSBs within the IRQ handler).
+The problem occurs only on older consoles (like LATE-PU-8), not on newer +consoles (like PSone).

+

1F801802h.Index2 - Audio Volume for Left-CD-Out to Left-SPU-Input (W)

+

1F801803h.Index2 - Audio Volume for Left-CD-Out to Right-SPU-Input (W)

+

1F801801h.Index3 - Audio Volume for Right-CD-Out to Right-SPU-Input (W)

+

1F801802h.Index3 - Audio Volume for Right-CD-Out to Left-SPU-Input (W)

+

Allows to configure the CD for mono/stereo output (eg. values "80h,0,80h,0" +produce normal stereo volume, values "40h,40h,40h,40h" produce mono output of +equivalent volume).
+When using bigger values, the hardware does have some incomplete saturation +support; the saturation works up to double volume (eg. overflows that occur on +"FFh,0,FFh,0" or "80h,80h,80h,80h" are clipped to min/max levels), however, the +saturation does NOT work properly when exceeding double volume (eg. mono with +quad-volume "FFh,FFh,FFh,FFh").
+

  0-7  Volume Level (00h..FFh) (00h=Off, FFh=Max/Double, 80h=Default/Normal)
+
+After changing these registers, write 20h to 1F801803h.Index3.
+Unknown if any existing games are actually supporting mono output. Resident +Evil 2 uses these ports to produce fade-in/fade-out effects (although, for that +purpose, it should be much easier to use Port 1F801DB0h).

+

1F801803h.Index3 - Audio Volume Apply Changes (by writing bit5=1)

+
  0    ADPMUTE Mute ADPCM                 (0=Normal, 1=Mute)
+  1-4  -       Unused (should be zero)
+  5    CHNGATV Apply Audio Volume changes (0=No change, 1=Apply)
+  6-7  -       Unused (should be zero)
+
+

1F801801h.Index1 - Sound Map Data Out (W)

+

  0-7  Data
+
+This register seems to be restricted to 8bit bus, unknown if/how the PSX DMA +controller can write to it (it might support only 16bit data for CDROM).

+

1F801801h.Index2 - Sound Map Coding Info (W)

+
  0    Mono/Stereo     (0=Mono, 1=Stereo)
+  1    Reserved        (0)
+  2    Sample Rate     (0=37800Hz, 1=18900Hz)
+  3    Reserved        (0)
+  4    Bits per Sample (0=4bit, 1=8bit)
+  5    Reserved        (0)
+  6    Emphasis        (0=Off, 1=Emphasis)
+  7    Reserved        (0)
+
+
 =============================================================================
+
+

Command Execution

+

Command/Parameter transmission is indicated by bit7 of 1F801800h.
+When that bit gets zero, the response can be read immediately (immediately for +MOST commands, but not ALL commands; so better wait for the IRQ).
+Alternately, you can wait for an IRQ (which seems to take place MUCH later), +and then read the response.
+If there are any pending cdrom interrupts, these MUST be acknowledged before +sending the command (otherwise bit7 of 1F801800h will stay set forever).

+

Command Busy Flag - 1F801800h.Bit7

+

Indicates ready-to-send-new-command,
+

  0=Ready to send a new command
+  1=Busy sending a command/parameters
+
+Trying to send a new command in the Busy-phase causes malfunction (the older +command seems to get lost, the newer command executes and returns its results +and triggers an interrupt, but, thereafter, the controller seems to hang). So, +always wait until the Busy-bit goes off before sending a command.
+When the Busy-flag goes off, a new command can be send immediately (even if the +response from the previous command wasn't received yet), however, the new +command stays in the Busy-phase until the IRQ from the previous command is +acknowledged, at that point the actual transmission of the new command starts, +and the Busy-flag goes off (once when the transmission completes).

+

Pause -> Wait for INT3 IRQ -> clear IRQ (write 0x1f to 1f801803h.0) -> SetMode/Pause/Stop/SetMode/SeekL/... <br/>
+ReadN/ReadS -> Wait for INT3 IRQ -> clear IRQ (write 0x1f to 1f801803h.0) -> SetMode/SetLoc/... <br/>
+
+Will not drop any of the two commands, thus execute sequentially.
+

+

Stop -> Wait for INT3 IRQ -> clear IRQ (write 0x1f to 1f801803h.0) -> SetMode/Pause/...<br/>
+
+Will drop the second response of Stop(), and then execute the next command.

+

Misc

+

Trying to do a 32bit read from 1F801800h returns the 8bit value at 1F801800h +multiplied by 01010101h.

+

To init the CD

+
  -Flush all IRQs
+  -1F801803h.Index0=0
+  -Com_Delay=4901 (=1325h) (Port 1F801020h) (means 16bit or 32bit write?)
+     (the write seems to be 32bit, clearing the upper16bit of the register)
+  -Send two Getstat commands
+  -Send Command 0Ah (Init)
+  -Demute
+
+

Seek-Busy Phase

+

Warning: most or all of the info in the sentence below appear to incorrect +(either that, or I didn't understand that rather confusing sentence).
+REPORTEDLY:
+"You should not send some commands while the CD is seeking (ie. Getstat returns +with bit6 set). Thing is that stat only gets updated after a new command. I +haven't tested this for other command, but for the play command (03h) you can +just keep repeating the [which?] command and checking stat returned by that, +for bit6 to go low (and bit7 to go high in this case). If you don't and try to +do a getloc [GetlocP and/or GetlocL?] directly after the play command reports +it's done [what done? meaning sending start-to-play was "done"? or meaning play +reached end-of-disc?], the CD will stop. (I guess the CD can't get it's current +location while it's seeking, so the logic stops the seek to get an exact fix, +but never restarts..)"

+

Sound Map Flowchart

+

Sound Map mode allows to output XA-ADPCM from Main RAM (rather than from +CDROM).
+

  SPU: Init Master Volume Left/Right (Port 1F801D80h/1F801D82h)
+  SPU: Init CD Audio Volume Left/Right (Port 1F801DB0h/1F801DB2h)
+  SPU: Enable CD Audio (Port 1F801DAAh.Bit0=1)
+  CDROM/CMD: send Stop command (probably better to avoid conflicts)
+  CDROM/CMD: send Demute command (if muted) (but works only if disc inserted)
+  CDROM/HOST: init Codinginfo (Port 1F801801h.Index2)
+  CDROM/HOST: enable ADPCM (Port 1F801803h.Index3.Bit0=0)  ;probably needed?
+  ... set dummy addr/len with DISHXFRC=1 ?  <-- NOT required !
+  ... set SMEN ... and dummy BFWR?    <-- BOTH bits required ?
+  ... maybe SMADPCLR (1F801803h.Index1.bit5) does clear SoundMap ADPCM buf?
+  transfer 900h bytes (same format as ADPCM sectors) (Port 1F801801h.Index1)
+  Note: Before sending a byte, one should wait for DRQs (1F801801h.Bit6=1)
+  Note: ADPCM output doesn't start until the last (900h'th) byte is transferred
+
+Sound Map mode may be very useful for testing XA-ADPCM directly from within an +exe file (without needing a cdrom with ADPCM sectors). And, Sound Map supports +both 4bit and 8bit compression (the SPU supports only 4bit).
+Caution: If ADPCM wasn't playing, and one sends one 900h-byte block, then it +will get stored in one of three 900h-byte slots in SRAM, and one would expect +that slot to be played when the ADPCM output starts - however, actually, the +hardware will more or less randomly play one of the three slots; not +necessarily the slot that was updated most recently.

+

CDROM Controller Command Summary

+

Command Summary

+

  Command          Parameters      Response(s)
+  00h -            -               INT5(11h,40h)  ;reportedly "Sync" uh?
+  01h Getstat      -               INT3(stat)
+  02h Setloc     E amm,ass,asect   INT3(stat)
+  03h Play       E (track)         INT3(stat), optional INT1(report bytes)
+  04h Forward    E -               INT3(stat), optional INT1(report bytes)
+  05h Backward   E -               INT3(stat), optional INT1(report bytes)
+  06h ReadN      E -               INT3(stat), INT1(stat), datablock
+  07h MotorOn    E -               INT3(stat), INT2(stat)
+  08h Stop       E -               INT3(stat), INT2(stat)
+  09h Pause      E -               INT3(stat), INT2(stat)
+  0Ah Init         -               INT3(late-stat), INT2(stat)
+  0Bh Mute       E -               INT3(stat)
+  0Ch Demute     E -               INT3(stat)
+  0Dh Setfilter  E file,channel    INT3(stat)
+  0Eh Setmode      mode            INT3(stat)
+  0Fh Getparam     -               INT3(stat,mode,null,file,channel)
+  10h GetlocL    E -               INT3(amm,ass,asect,mode,file,channel,sm,ci)
+  11h GetlocP    E -               INT3(track,index,mm,ss,sect,amm,ass,asect)
+  12h SetSession E session         INT3(stat), INT2(stat)
+  13h GetTN      E -               INT3(stat,first,last)  ;BCD
+  14h GetTD      E track (BCD)     INT3(stat,mm,ss)       ;BCD
+  15h SeekL      E -               INT3(stat), INT2(stat)  ;\use prior Setloc
+  16h SeekP      E -               INT3(stat), INT2(stat)  ;/to set target
+  17h -            -               INT5(11h,40h)  ;reportedly "SetClock" uh?
+  18h -            -               INT5(11h,40h)  ;reportedly "GetClock" uh?
+  19h Test         sub_function    depends on sub_function (see below)
+  1Ah GetID      E -               INT3(stat), INT2/5(stat,flg,typ,atip,"SCEx")
+  1Bh ReadS      E?-               INT3(stat), INT1(stat), datablock
+  1Ch Reset        -               INT3(stat), Delay            ;-not DTL-H2000
+  1Dh GetQ       E adr,point       INT3(stat), INT2(10bytesSubQ,peak_lo) ;\not
+  1Eh ReadTOC      -               INT3(late-stat), INT2(stat)           ;/vC0
+  1Fh VideoCD      sub,a,b,c,d,e   INT3(stat,a,b,c,d,e)   ;<-- SCPH-5903 only
+  1Fh..4Fh -       -               INT5(11h,40h)  ;-Unused/invalid
+  50h Secret 1     -               INT5(11h,40h)  ;\
+  51h Secret 2     "Licensed by"   INT5(11h,40h)  ;
+  52h Secret 3     "Sony"          INT5(11h,40h)  ; Secret Unlock Commands
+  53h Secret 4     "Computer"      INT5(11h,40h)  ; (not in version vC0, and,
+  54h Secret 5     "Entertainment" INT5(11h,40h)  ; nonfunctional in japan)
+  55h Secret 6     "<region>"      INT5(11h,40h)  ;
+  56h Secret 7     -               INT5(11h,40h)  ;/
+  57h SecretLock   -               INT5(11h,40h)  ;-Secret Lock Command
+  58h..5Fh Crash   -               Crashes the HC05 (jumps into a data area)
+  6Fh..FFh -       -               INT5(11h,40h)  ;-Unused/invalid
+
+E = Error 80h appears on some commands (02h..09h, 0Bh..0Dh, 10h..16h, 1Ah, +1Bh?, and 1Dh) when the disk is missing, or when the drive unit is disconnected +from the mainboard.
+Some commands (04h,05h,10h,11h,1Dh) do also trigger Error 80h when the disk is +stopped.

+

sub_function numbers (for command 19h)

+

Test commands are invoked with command number 19h, followed by a sub_function +number as first parameter byte. The Kernel seems to be using only sub_function +20h (to detect the CDROM Controller version).
+

  sub  params  response           ;Effect
+  00h      -   INT3(stat)         ;Force motor on, clockwise, even if door open
+  01h      -   INT3(stat)         ;Force motor on, anti-clockwise, super-fast
+  02h      -   INT3(stat)         ;Force motor on, anti-clockwise, super-fast
+  03h      -   INT3(stat)         ;Force motor off (ignored during spin-up)
+  04h      -   INT3(stat)         ;Start SCEx reading and reset counters
+  05h      -   INT3(total,success);Stop SCEx reading and get counters
+  06h *    n   INT3(old)  ;\early ;Adjust balance in RAM, send CX(30+n XOR 7)
+  07h *    n   INT3(old)  ; PSX   ;Adjust gain in RAM, send CX(38+n XOR 7)
+  08h *    n   INT3(old)  ;/only  ;Adjust balance in RAM only
+  06h..0Fh -   INT5(11h,10h)      ;N/A (11h,20h when NONZERO number of params)
+  10h      -   INT3(stat) ;CX(..) ;Force motor on, anti-clockwise, super-fast
+  11h      -   INT3(stat) ;CX(03) ;Move Lens Up (leave parking position)
+  12h      -   INT3(stat) ;CX(02) ;Move Lens Down (enter parking position)
+  13h      -   INT3(stat) ;CX(28) ;Move Lens Outwards
+  14h      -   INT3(stat) ;CX(2C) ;Move Lens Inwards
+  15h      -   INT3(stat) ;CX(22) ;If motor on: Move outwards,inwards,motor off
+  16h      -   INT3(stat) ;CX(23) ;No effect?
+  17h      -   INT3(stat) ;CX(E8) ;Force motor on, clockwise, super-fast
+  18h      -   INT3(stat) ;CX(EA) ;Force motor on, anti-clockwise, super-fast
+  19h      -   INT3(stat) ;CX(25) ;No effect?
+  1Ah      -   INT3(stat) ;CX(21) ;No effect?
+  1Bh..1Fh -   INT5(11h,10h)      ;N/A (11h,20h when NONZERO number of params)
+  20h      -   INT3(yy,mm,dd,ver) ;Get cdrom BIOS date/version (yy,mm,dd,ver)
+  21h      -   INT3(n)            ;Get Drive Switches (bit0=POS0, bit1=DOOR)
+  22h ***  -   INT3("for ...")    ;Get Region ID String
+  23h ***  -   INT3("CXD...")     ;Get Chip ID String for Servo Amplifier
+  24h ***  -   INT3("CXD...")     ;Get Chip ID String for Signal Processor
+  25h ***  -   INT3("CXD...")     ;Get Chip ID String for Decoder/FIFO
+  26h..2Fh -   INT5(11h,10h)      ;N/A (11h,20h when NONZERO number of params)
+  30h *    i,x,y     INT3(stat)       ;Prototype/Debug stuff   ;\supported on
+  31h *    x,y       INT3(stat)       ;Prototype/Debug stuff   ; early PSX only
+  4xh *    i         INT3(x,y)        ;Prototype/Debug stuff   ;/
+  30h..4Fh ..        INT5(11h,10h)    ;N/A always 11h,10h (no matter of params)
+  50h      a[,b[,c]] INT3(stat)       ;Servo/Signal send CX(a:b:c)
+  51h **   39h,xx    INT3(stat,hi,lo) ;Servo/Signal send CX(39xx) with response
+  51h..5Fh -         INT5(11h,10h)    ;N/A
+  60h      lo,hi     INT3(databyte)   ;HC05 SUB-CPU read RAM and I/O ports
+  61h..70h -         INT5(11h,10h)    ;N/A
+  71h ***  adr       INT3(databyte)   ;Decoder Read one register
+  72h ***  adr,dat   INT3(stat)       ;Decoder Write one register
+  73h ***  adr,len   INT3(databytes..);Decoder Read multiple registers, bugged
+  74h ***  adr,len,..INT3(stat)       ;Decoder Write multiple registers, bugged
+  75h ***  -         INT3(lo,hi,lo,hi);Decoder Get Host Xfer Info Remain/Addr
+  76h ***  a,b,c,d   INT3(stat)       ;Decoder Prepare Transfer to/from SRAM
+  77h..FFh -         INT5(11h,10h)    ;N/A
+  80h..8Fh a,b       ?                ;seem to do something on PS2
+
+* sub_functions 06h..08h, 30h..31h, and 4xh are supported only in vC0 and vC1.
+** sub_function 51h is supported only in BIOS version vC2 and up.
+*** sub_functions 22h..25h, 71h..76h supported only in BIOS version vC1 and up.

+

Unsupported GetQ,VCD,SecretUnlock (command 1Dh,1Fh,5xh)

+

INT5 will be returned if the command is unsupported. That, WITHOUT removing the +Parameters from the FIFO, so the parameters will be accidently passed to the +NEXT command. To avoid that: clear the parameter FIFO via +[1F801803h.Index1]=40h after receiving the INT5 error.

+

CDROM - Control Commands

+

Sync - Command 00h --> INTx(stat+1,40h) (?)

+

Reportedly "command does not succeed until all other commands complete. This +can be used for synchronization - hence the name."
+Uh, actually, returns error code 40h = Invalid Command...?

+

Setfilter - Command 0Dh,file,channel --> INT3(stat)

+

Automatic ADPCM (CD-ROM XA) filter ignores sectors except those which have the +same channel and file numbers in their subheader. This is the mechanism used to +select which of multiple songs in a single .XA file to play.
+Setfilter does not affect actual reading (sector reads still occur for all +sectors).
+XXX err... that is... does not affect reading of non-ADPCM sectors (normal +"data" sectors are kept received regardless of Setfilter).

+

Setmode - Command 0Eh,mode --> INT3(stat)

+

  7   Speed       (0=Normal speed, 1=Double speed)
+  6   XA-ADPCM    (0=Off, 1=Send XA-ADPCM sectors to SPU Audio Input)
+  5   Sector Size (0=800h=DataOnly, 1=924h=WholeSectorExceptSyncBytes)
+  4   Ignore Bit  (0=Normal, 1=Ignore Sector Size and Setloc position)
+  3   XA-Filter   (0=Off, 1=Process only XA-ADPCM sectors that match Setfilter)
+  2   Report      (0=Off, 1=Enable Report-Interrupts for Audio Play)
+  1   AutoPause   (0=Off, 1=Auto Pause upon End of Track) ;for Audio Play
+  0   CDDA        (0=Off, 1=Allow to Read CD-DA Sectors; ignore missing EDC)
+
+The "Ignore Bit" does reportedly force a sector size of 2328 bytes (918h), +however, that doesn't seem to be true. Instead, Bit4 seems to cause the +controller to ignore the sector size in Bit5 (instead, the size is kept from +the most recent Setmode command which didn't have Bit4 set). Also, Bit4 seems +to cause the controller to ignore the \<exact> Setloc position (instead, +data is randomly returned from the "Setloc position minus 0..3 sectors"). And, +Bit4 causes INT1 to return status.Bit3=set (IdError). Purpose of Bit4 is +unknown?

+

Init - Command 0Ah --> INT3(stat) --> INT2(stat)

+

Multiple effects at once. Sets mode=20h, activates drive motor, Standby, abort +all commands.

+

Reset - Command 1Ch,(...) --> INT3(stat) --> Delay(1/8 seconds)

+

  Caution: Not supported on DTL-H2000 (v01)
+
+Resets the drive controller, reportedly, same as opening and closing the drive +door. The command executes no matter if/how many parameters are used (tested +with 0..7 params). INT3 indicates that the command was started, but there's no +INT that would indicate when the command is finished, so, before sending any +further commands, a delay of 1/8 seconds (or 400000h clock cycles) must be +issued by software.
+Note: Executing the command produces a click sound in the drive mechanics, +maybe it's just a rapid motor on/off, but it might something more serious, like +ignoring the /POS0 signal...?

+

MotorOn - Command 07h --> INT3(stat) --> INT2(stat)

+

Activates the drive motor, works ONLY if the motor was off (otherwise fails +with INT5(stat,20h); that error code would normally indicate "wrong number of +parameters", but means "motor already on" in this case).
+Commands like Read, Seek, and Play are automatically starting the Motor when +needed (which makes the MotorOn command rather useless, and it's rarely used by +any games).
+Myth: Older homebrew docs are referring to MotorOn as "Standby", claiming that +it would work similar as "Pause", that is wrong: the command does NOT pause +anything (if the motor is on, then it does simply trigger INT5, but without +pausing reading or playing).
+Note: The game "Nightmare Creatures 2" does actually attempt to use MotorOn to +"pause" after reading files, but the hardware does simply ignore that attempt +(aside from doing the INT5 thing).

+

Stop - Command 08h --> INT3(stat) --> INT2(stat)

+

Stops motor with magnetic brakes (stops within a second or so) (unlike +power-off where it'd keep spinning for about 10 seconds), and moves the drive +head to the begin of the first track. Official way to restart is command 0Ah, +but almost any command will restart it.
+The first response returns the current status (this already with bit5 cleared), +the second response returns the new status (with bit1 cleared).

+

Pause - Command 09h --> INT3(stat) --> INT2(stat)

+

Aborts Reading and Playing, the motor is kept spinning, and the drive head +maintains the current location within reasonable error.
+The first response returns the current status (still with bit5 set if a Read +command was active), the second response returns the new status (with bit5 +cleared).

+

Data/ADPCM Sector Filtering/Delivery

+

The PSX CDROM BIOS is first trying to send sectors to the ADPCM decoder, and, +if that didn't work out, then it's trying to send them to the main CPU (and if +that didn't work out either, then it's silently ignoring the sector).
+

 try_deliver_as_adpcm_sector:
+  reject if CD-DA AUDIO format
+  reject if sector isn't MODE2 format
+  reject if adpcm_disabled(setmode.6)
+  reject if filter_enabled(setmode.3) AND selected file/channel doesn't match
+  reject if submode isn't audio+realtime (bit2 and bit6 must be both set)
+  deliver: send sector to xa-adpcm decoder when passing above cases
+ try_deliver_as_data_sector:
+  reject data-delivery if "try_deliver_as_adpcm_sector" did do adpcm-delivery
+  reject if filter_enabled(setmode.3) AND submode is audio+realtime (bit2+bit6)
+  1st delivery attempt: send INT1+data, unless there's another INT pending
+  delay, and retry at later time... but this time with file/channel checking!
+  reject if filter_enabled(setmode.3) AND selected file/channel doesn't match
+  2nd delivery attempt: send INT1+data, unless there's another INT pending
+
+BUG: Note that the data delivery is done in two different attempts: The first +one regardless of file/channel, and the second one only on matching +file/channel (if filtering is enabled).

+

CDROM - Seek Commands

+

Setloc - Command 02h,amm,ass,asect --> INT3(stat)

+

Sets the seek target - but without yet starting the seek operation. The actual +seek is invoked by certain commands: SeekL (Data) and SeekP (Audio) are doing +plain seeks (and do Pause after completion). ReadN/ReadS are similar to SeekL +(and do start reading data after the seek operation). Play is similar to SeekP +(and does start playing audio after the seek operation).
+The amm,ass,asect parameters refer to the entire disk (not to the current +track). To seek to a specific location within a specific track, use GetTD to +get the start address of the track, and add the desired time offset to it.

+

SeekL - Command 15h --> INT3(stat) --> INT2(stat)

+

Seek to Setloc's location in data mode (using data sector header position data, +which works/exists only on Data tracks, not on CD-DA Audio tracks).
+After the seek, the disk stays on the seeked location forever (namely: when +seeking sector N, it does stay at around N-8..N-0 in single speed mode, or at +around N-5..N+2 in double speed mode). This command will stop any current or pending ReadN or ReadS.
+Trying to use SeekL on Audio CDs passes okay on the first response, but (after +two seconds or so) the second response will return an error (stat+4,04h), and +stop the drive motor... that error doesn't appear ALWAYS though... works in +some situations... such like when previously reading data sectors or so...?

+

SeekP - Command 16h --> INT3(stat) --> INT2(stat)

+

Seek to Setloc's location in audio mode (using the Subchannel Q position data, +which works on both Audio on Data disks).
+After the seek, the disk stays on the seeked location forever (namely: when +seeking sector N, it does stay at around N-9..N-1 in single speed mode, or at +around N-2..N in double speed mode). This command will stop any current or pending ReadN or ReadS.
+Note: Some older docs claim that SeekP would recurse only "MM:SS" of the +"MM:SS:FF" position from Setloc - that is wrong, it does seek to MM:SS:FF +(verified on a PSone).
+After the seek, status is stat.bit7=0 (ie. audio playback off), until sending a +new Play command (without parameters) to start playback at the seeked location.

+

SetSession - Command 12h,session --> INT3(stat) --> INT2(stat)

+

Seeks to session (ie. moves the drive head to the session, with stat bit6 set +during the seek phase).
+When issued during active-play, the command returns error code 80h.
+When issued during play-spin-up, play is aborted.
+

  ___Errors___
+  session = 00h causes error code 10h.     ;INT5(03h,10h), no 2nd/3rd response
+  ___On a non-multisession-disk___
+  session = 01h passes okay.               ;INT3(stat), and once INT2(stat)
+  session = 02h or higher cause seek error ;INT3(stat), and twice INT5(06h,40h)
+  ___On a multisession-disk with N sessions___
+  session = 01h..N+1 passes okay   ;where N+1 moves to the END of LAST session
+  session = N+2 or higher cause seek error  ;2nd response = INT5(06h,20h)
+
+after seek error --> disk stops spinning at 2nd response, then restarts +spinning for 1 second or so, then stops spinning forever... and following +gettn/gettd/getid/getlocl/getlocp fail with error 80h...
+The command does automatically read the TOC of the new session. BUG: Older CD +Firmwares (16 May 1995 and older) don't clear the old TOC when loading Session +1, in that case SetSession(1) may update some (not all) TOC entries; ending up +with a mixup of old and new TOC entries.
+There seems to be no way to determine the current sessions number (via Getparam +or so), and more important, no way to determine if the disk is a multi-session +disk or not... except by trial... which would stop the drive motor on seek +errors on single-session disks...?
+For setloc, one must probably specifiy minutes within the 1st track of the new +session (the 1st track of 1st session usually/always starts at 00:02:00, but +for other sessions one would need to use GetTD)...?

+

CDROM - Read Commands

+

ReadN - Command 06h --> INT3(stat) --> INT1(stat) --> datablock

+

Read with retry. The command responds once with "stat,INT3", and then it's +repeatedly sending "stat,INT1 --> datablock", that is continued even after a +successful read has occured; use the Pause command to terminate the repeated +INT1 responses.
+Unknown which responses are sent in case of read errors?
+====
+ReadN and ReadS cause errors if you're trying to read an unlicensed CD or CD-R +without a mod chip. Sectors on Audio CDs can be read only when CDDA is enabled +via Setmode (otherwise error code 40h is returned).
+====
+Actually, Read seems to work on unlicensed CD-R's, but the returned data is the +whole sector or so (the 2048 data bytes preceeded by a 12byte header, and +probably/maybe followed by error-correction info; in fact the total received +data in the Data Fifo is 4096 bytes; the last some bytes probably being +garbage) (however error correction is NOT performed by hardware, so the 2048 +data bytes may be trashy) (however, if the error correction info IS received, +then error correction could be performed by software) (also Setloc doesn't seem +to work accurately on unlicensed CD-R's).
+====
+

     ;Read occasionally returns 11h,40h ..? when TOC isn't loaded?
+
+After receiving INT1, the Kernel does,
+
  [1F801800h]=00h
+  00h=[1F801800h]
+  [1F801803h]=00h
+  00h=[1F801803h]
+  [1F801800h]=00h
+  [1F801803h]=80h
+
+and then,
+
  [1F801018h]=00020943h  ;cdrom_delay
+  [1F801020h]=0000132Ch  ;com_delay
+
+then,
+
  x=[1F8010F4h] AND 00FFFFFFh   ;result is 00840000h
+  [1F8010F4h] = x OR 00880000h
+  [1F8010F0h] = [1F8010F0h] OR 00008000h
+  [1F8010B0h] = A0010000h ;addr
+  [1F8010B4h] = 00010200h ;LSBs=num words, MSBs=ignored/bullshit
+  [1F8010B4h] = 11000000h ;DMA control
+
+thereafter,
+
  [1F801800h]=01h
+  [1F801803h]=40h    ;reset parameter fifo
+  [0]=00000000h
+  [0]=00000001h
+  [0]=00000002h
+  [0]=00000003h
+  [1F801800h]=00h
+  [1F801801h]=09h    ;command9 (pause)
+

+

ReadS - Command 1Bh --> INT3(stat) --> INT1(stat) --> datablock

+

Read without automatic retry. Not sure what that means... does WHAT on errors? +Maybe intended for continous streaming video output (to skip bad frames, rather +than to interrupt the stream by performing read-retrys).

+

ReadN/ReadS

+

Both ReadN/ReadS are reading data sequentially, starting at the sector +specified with Setloc, and then automatically reading the following sectors.

+

CDROM Incoming Data / Buffer Overrun Timings

+

The Read commands are continously receiving 75 sectors per second (or 150 +sectors at double speed), and, basically, the software must be fast enough to +process that amount of incoming data. However, the PSX hardware includes a +buffer that can hold up to a handful (exact number is unknown?) of sectors, so, +occasional delays of more than 1/75 seconds between processing two sectors +aren't causing lost sectors, unless the delay(s) are summing up too much. The +relevant steps for receiving data are:
+

  Wait for Interrupt Request (INT1)          ;indicates that data is available
+  Send Data Request (1F801803h.Index0.Bit7=1);accept data
+  Acknowledge INT1                           ;
+  Copy Data to Main RAM (via I/O or DMA)     ;read data
+
+The Data Request accepts the data for the currently pending interrupt, it +should be usually issued between receiving/acknowledging INT1 (however, it can +be also issued shortly after the acknowledge; even if there are further sectors +in the buffer, there seems to be a small delay between the acknowledge and the +next interrupt, and Data Requests during that period are still treated to +belong to the old interrupt).
+If a buffer overrun has occured \<before> issuing the Data Request, then +wrong data will be received, ie. some sectors will be skipped (the hardware +doesn't seem to support a buffer-overrun error flag? Anyways, see GetlocL +description for a possible way to detect buffer-overruns).
+If a buffer overrun occurs \<after> issuing the Data Request, then the +requested data can be still read via I/O or DMA intactly, ie. the requested +data is "locked", and the overrun will affect only the following sectors.

+

ReadTOC - Command 1Eh --> INT3(stat) --> INT2(stat)

+

  Caution: Supported only in BIOS version vC1 and up. Not supported in vC0.
+
+Reread the Table of Contents of current session without reset. The command is +rather slow, the second response appears after about 1 second delay. The +command itself returns only status information (to get the actual TOC info, use +GetTD and GetTN commands).
+Note: The TOC contains information about the tracks on the disk (not file names +or so, that kind of information is obtained via Read commands). The TOC is read +automatically on power-up, when opening/closing the drive door, and when +changing sessions (so, normally, it isn't required to use this command).

+

Setloc, Read, Pause

+

A normal CDROM access (such like reading a file) consists of three commands:
+

  Setloc, Read, Pause
+
+Normally one shouldn't mess up the ordering of those commands, but if one does, +following rules do apply:
+Setloc is memorizing the wanted target, and marks it as unprocessed, and has no +other effect (it doesn't start reading or seeking, and doesn't interrupt or +redirect any active reads).
+If Read is issued with an unprocessed Setloc, then the drive is automatically +seeking the Setloc location (and marks Setloc as processed).
+If Read is issued without an unprocessed Setloc, the following happens: If +reading is already in progress then it just continues reading. If Reading was +Paused, then reading resumes at the most recently received sector (ie. +returning that sector once another time).

+

CDROM - Status Commands

+

Status code (stat)

+

The 8bit status code is returned by Getstat command (and many other commands), +the meaning of the separate stat bits is:
+

  7  Play          Playing CD-DA         ;\only ONE of these bits can be set
+  6  Seek          Seeking               ; at a time (ie. Read/Play won't get
+  5  Read          Reading data sectors  ;/set until after Seek completion)
+  4  ShellOpen     Once shell open (0=Closed, 1=Is/was Open)
+  3  IdError       (0=Okay, 1=GetID denied) (also set when Setmode.Bit4=1)
+  2  SeekError     (0=Okay, 1=Seek error)     (followed by Error Byte)
+  1  Spindle Motor (0=Motor off, or in spin-up phase, 1=Motor on)
+  0  Error         Invalid Command/parameters (followed by Error Byte)
+
+If the shell is closed, then bit4 is automatically reset to zero after reading +stat with the Getstat command (most or all other commands do not reset that bit +after reading). If stat bit0 or bit2 is set, then the normal respons(es) and +interrupt(s) are not send, and, instead, INT5 occurs, and an error-byte is send +as second response byte, with the following values:
+
  ___These values appear in the FIRST response; with stat.bit0 set___
+  10h - Invalid Sub_function (for command 19h), or invalid parameter value
+  20h - Wrong number of parameters
+  40h - Invalid command
+  80h - Cannot respond yet (eg. required info was not yet read from disk yet)
+           (namely, TOC not-yet-read or so)
+           (also appears if no disk inserted at all)
+  ___These values appear in the SECOND response; with stat.bit2 set___
+  04h - Seek failed (when trying to use SeekL on Audio CDs)
+  ___These values appear even if no command was sent; with stat.bit2 set___
+  08h - Drive door became opened
+
+80h appears on some commands (02h..09h, 0Bh..0Dh, 10h..16h, 1Ah, 1Bh?, and 1Dh) +when the disk is missing, or when the drive unit is disconnected from the +mainboard.

+

When the shell is opened, INT5 is triggered regardless of whether a command was +executing or not. When this happens, all bits except shell open and error are cleared +in the status register. The error byte in the INT5 is set to 08h.

+

Some games send a Stop command before changing discs, but others just wait for the +user to open the shell, causing the disc to stop. The game can then send GetStat commands, +looping until bit 4 is cleared to detect when the new disc has been inserted.

+

Stat Seek/Play/Read bits

+

There's is only max ONE of the three Seek/Play/Read bits set at a time, ie. +during Seek, ONLY the seek bit is set (and Read or Play doesn't get until seek +completion), that is important for Gran Turismo 1, which checks for seek +completion by waiting for READ getting set (rather than waiting for SEEK +getting cleared).

+

Getstat - Command 01h --> INT3(stat)

+

Returns stat (like many other commands), and additionally does reset the shell +open flag (for the following commands; unless the shell is still opened). This +is different as for most or all other commands (which may return stat, but +which do not reset the shell open flag).
+In other docs, the command is eventually referred to as "Nop", believing that +it does nothing than returning stat (ignoring the fact that it's having the +special shell open reset feature).

+

Getparam - Command 0Fh --> INT3(stat,mode,null,file,channel)

+

Returns stat (see Getstat above), mode (see Setmode), a null byte (always 00h), +and file/channel filter values (see Setfilter).

+

GetlocL - Command 10h --> INT3(amm,ass,asect,mode,file,channel,sm,ci)

+

Retrieves 4-byte sector header, plus 4-byte subheader of the current sector. +GetlocL can be send during active Read commands (but, mind that the +GetlocL-INT3-response can't be received until any pending Read-INT1's are +acknowledged).
+The PSX hardware can buffer a handful of sectors, the INT1 handler receives the +\<oldest> buffered sector, the GetlocL command returns the header and +subheader of the \<newest> buffered sector. Note: If the returned +\<newest> sector number is much bigger than the expected \<oldest> +sector number, then it's likely that a buffer overrun has occured.
+GetlocL fails (with error code 80h) when playing Audio CDs (or Audio Tracks on +Data CDs). These errors occur because Audio sectors don't have any +header/subheader (instead, equivalent data is stored in Subchannel Q, which can +be read with GetlocP).
+GetlocL also fails (with error code 80h) when the drive is in Seek phase (such +like shortly after a new ReadN/ReadS command). In that case one can retry +issuing GetlocL (until it passes okay, ie. until the seek has completed). +During Seek, the drive seems to decode only Subchannel position data (but no +header/subheader data), accordingly GetlocL won't work during seek (however, +GetlocP does work during Seek).

+

GetlocP - Command 11h - INT3(track,index,mm,ss,sect,amm,ass,asect)

+

Retrieves 8 bytes of position information from Subchannel Q with ADR=1. Mainly +intended for displaying the current audio position during Play. All results are +in BCD.
+

  track:  track number (AAh=Lead-out area) (FFh=unknown, toc, none?)
+  index:  index number (Usually 01h)
+  mm:     minute number within track (00h and up)
+  ss:     second number within track (00h to 59h)
+  sect:   sector number within track (00h to 74h)
+  amm:    minute number on entire disk (00h and up)
+  ass:    second number on entire disk (00h to 59h)
+  asect:  sector number on entire disk (00h to 74h)
+
+Note: GetlocP is also used for reading the LibCrypt protection data:
+CDROM Protection - LibCrypt

+

GetTN - Command 13h --> INT3(stat,first,last) ;BCD

+

Get first track number, and last track number in the TOC of the current +Session. The number of tracks in the current session can be calculated as +(last-first+1). The first track number is usually 01h in the first (or only) +session, and "last track of previous session plus 1" in further sessions.

+

GetTD - Command 14h,track --> INT3(stat,mm,ss) ;BCD

+

For a disk with NN tracks, parameter values 01h..NNh return the start of the +specified track, parameter value 00h returns the end of the last track, and +parameter values bigger than NNh return error code 10h.
+The GetTD values are relative to Index=1 and are rounded down to second +boundaries (eg. if track=N Index=0 starts at 12:34:56, and Track=N Index=1 +starts at 12:36:56, then GetTD(N) will return 12:36, ie. the sector number is +truncated, and the Index=0 region is skipped).

+

GetQ - Command 1Dh,adr,point --> INT3(stat) --> INT2(10bytesSubQ,peak_lo)

+

  Caution: Supported only in BIOS version vC1 and up. Not supported in vC0.
+  Caution: When unsupported, Parameter Fifo isn't cleared after the command.
+
+Allows to read 10 bytes from Subchannel Q in Lead-In (see CDROM Subchannels +chapter for details). Unlike GetTD, this command allows to receive the exact +MM:SS:FF address of the point'ed Track (GetTD reads a memorized MM:SS value +from RAM, whilst GetQ reads the full MM:SS:FF from the disk, which is slower +than GetTD, due to the disk-access).
+With ADR=1, point can be a any point number for ADR=1 in Lead-in (eg. +01h..99h=Track N, A2h=Lead-Out). The returned 10 bytes are raw SubQ data +(starting with the ADR/Control value; of which the lower 4bits are always +ADR=1).
+The 11th returned byte is the Peak LSB (similar as in Play+Report, but in this +case only the LSB is transferred, which is apparently a bug in CDROM BIOS, the +programmer probably wanted to send 10 bytes without peak, or 12 bytes with full +peak; although peak wouldn't be too useful, as it should always zero during +Lead-In... but some discs do seem return non-zero values for whatever reason).
+Aside from ADR=1, a value of ADR=5 can be used on multisession disks (eg. with +point B0h, C0h). Not sure if any other ADR values can be used (ADR=3, ISRC is +usually not in the Lead-In, ADR=2, EAN may be in the lead-in, but one may need +to specify point equal to the first EAN byte).
+If the ADR/Point combination isn't found, then a timeout occurs after circa 6 +seconds (to avoid this, use GetTN to see which tracks/points exist). After the +timeout, the command starts playing track 1. If the controller wasn't already +in audio mode before sending the command, then it does switch off the drive +motor for a moment (that, after the timeout, and before starting playback).
+In case of timeout, the normal INT3/INT2 responses are replaced by +INT3/INT5/INT5 (INT3 at command start, 1st INT5 at timeout/stop, and 2nd INT5 +at restart/play).
+Note: GetQ sends scratch noise to the SPU while seeking to the Lead-In area.

+

GetID - Command 1Ah --> INT3(stat) --> INT2/5 (stat,flags,type,atip,"SCEx")

+

  Drive Status           1st Response   2nd Response
+  Door Open              INT5(11h,80h)  N/A
+  Spin-up                INT5(01h,80h)  N/A
+  Detect busy            INT5(03h,80h)  N/A
+  No Disk                INT3(stat)     INT5(08h,40h, 00h,00h, 00h,00h,00h,00h)
+  Audio Disk             INT3(stat)     INT5(0Ah,90h, 00h,00h, 00h,00h,00h,00h)
+  Unlicensed:Mode1       INT3(stat)     INT5(0Ah,80h, 00h,00h, 00h,00h,00h,00h)
+  Unlicensed:Mode2       INT3(stat)     INT5(0Ah,80h, 20h,00h, 00h,00h,00h,00h)
+  Unlicensed:Mode2+Audio INT3(stat)     INT5(0Ah,90h, 20h,00h, 00h,00h,00h,00h)
+  Debug/Yaroze:Mode2     INT3(stat)     INT2(02h,00h, 20h,00h, 20h,20h,20h,20h)
+  Licensed:Mode2         INT3(stat)     INT2(02h,00h, 20h,00h, 53h,43h,45h,4xh)
+  Modchip:Audio/Mode1    INT3(stat)     INT2(02h,00h, 00h,00h, 53h,43h,45h,4xh)
+
+The status byte (ie. the first byte in the responses), may differ in some +cases; values shown above are typically received when issuing GetID shortly +after power-up; however, shortly after the detect-busy phase, seek-busy flag +(bit6) bit may be set, and, after issuing commands like Play/Read/Stop, +bit7,6,5,1 may differ. The meaning of the separate 2nd response bytes is:
+
  1st byte: stat  (as usually, but with bit3 same as bit7 in 2nd byte)
+  2nd byte: flags (bit7=denied, bit4=audio... or reportedly import, uh?)
+    bit7: Licensed (0=Licensed Data CD, 1=Denied Data CD or Audio CD)
+    bit6: Missing  (0=Disk Present, 1=Disk Missing)
+    bit4: Audio CD (0=Data CD, 1=Audio CD) (always 0 when Modchip installed)
+  3rd byte: Disk type (from TOC Point=A0h) (eg. 00h=Audio or Mode1, 20h=Mode2)
+  4th byte: Usually 00h (or 8bit ATIP from Point=C0h, if session info exists)
+    that 8bit ATIP value is taken form the middle 8bit of the 24bit ATIP value
+  5th-8th byte: SCEx region (eg. ASCII "SCEE" = Europe) (0,0,0,0 = Unlicensed)
+
+The fourth letter of the "SCEx" string contains region information: "SCEI" +(Japan/NTSC), "SCEA" (America/NTSC), "SCEE" (Europe/PAL). The "SCEx" string is +displayed in the intro, and the PSX refuses to boot if it doesn't match up for +the local region.
+With a modchip installed, the same response is sent for Mode1 and Audio disks +(except for Audio disks with very short TOCs (eg. singles) because SCEX reading +is aborted immediately after reading all TOC entries on Audio disks); whether +it is Audio or Mode1 can be checked by examining Subchannel Q ADR/Control.Bit6 +(eg. via command 19h,60h,50h,00h).
+Yaroze does return "SCEA" for SCEA discs, but, for SCEI,SCEE,SCEW discs it does +return four ASCII spaces (20h).

+

CDROM - CD Audio Commands

+

To play CD-DA Audio CDs, init the following SPU Registers: CD Audio Volume, +Main Volume, and SPU Control Bit0. Then send Demute command, and Play command.

+

Mute - Command 0Bh --> INT3(stat)

+

Turn off audio streaming to SPU (affects both CD-DA and XA-ADPCM).
+Even when muted, the CDROM controller is internally processing audio sectors +(as seen in 1F801800h.Bit2, which works as usually for XA-ADPCM), muting is +just forcing the CD output volume to zero.
+Mute is used by Dino Crisis 1 to mute noise during modchip detection.

+

Demute - Command 0Ch --> INT3(stat)

+

Turn on audio streaming to SPU (affects both CD-DA and XA-ADPCM). The Demute +command is needed only if one has formerly used the Mute command (by default, +the PSX is demuted after power-up (...and/or after Init command?), and is +demuted after cdrom-booting).

+

Play - Command 03h (,track) --> INT3(stat) --> optional INT1(report bytes)

+

Starts CD Audio Playback. The parameter is optional, if there's no parameter +given (or if it is 00h), then play either starts at Setloc position (if there +was a pending unprocessed Setloc), or otherwise starts at the current location +(eg. the last point seeked, or the current location of the current song; if it +was already playing). For a disk with N songs, Parameters 1..N are starting the +selected track. Parameters N+1..99h are restarting the begin of current track. +The motor is switched off automatically when Play reaches the end of the disk, +and INT4(stat) is generated (with stat.bit7 cleared).
+The track parameter seems to be ignored when sending Play shortly after +power-up (ie. when the drive hasn't yet read the TOC).
+===
+"Play is almost identical to CdlReadS, believe it or not. The main difference +is that this does not trigger a completed read IRQ. CdlPlay may be used on data +sectors. However, all sectors from data tracks are treated as 00, so no sound +is played. As CdlPlay is reading, the audio data appears in the sector buffer, +but is not reliable. Game Shark "enhancement CDs" for the 2.x and 3.x versions +used this to get around the PSX copy protection."
+Hmmm, what/where is the sector buffer... in the SPU?
+And, what/who are the 2.x and 3.x versions?

+

Forward - Command 04h --> INT3(stat) --> optional INT1(report bytes)

+

Backward - Command 05h --> INT3(stat) --> optional INT1(report bytes)

+

After sending the command, the drive is in fast forward/backward mode, skipping +every some sectors. The skipping rate is fixed (it doesn't increase after some +seconds) (however, it increases when (as long as) sending the command again and +again). The sound becomes (obviously) non-continous, and also rather very +silent, muffled, and almost inaudible (that's making it rather useless; unless +it's combined with a track/minute/second display). To terminate +forward/backward, send a new Play command (with no parameters, so play starts +at the "searched" location). Backward automatically switches to Play when +reaching the begin of Track 1. Forward automatically Stops the drive motor with +INT4(stat) when reaching the end of the last track.
+Forward/Backwards work only if the drive was in Play state, and only if Play +had already started (ie. not shortly/immediately after a Play command); if the +drive was not in Play state, then INT5(stat+1,80h) occurs.

+

Setmode bits used for Play command

+

During Play, only bit 7,2,1 of Setmode are used, all other Setmode bits are +ignored (that, including bit0, ie. during Play the drive is always in CD-DA +mode, regardless of that bit).
+Bit7 (double speed) should be usually off, although it can be used for a fast +forward effect (with audible output). Bit2 (report) activates an optional +interrupt for Play, Forward, and Backward commands (see below). Bit1 +(autopause) pauses play at the end of the track.

+

Report --> INT1(stat,track,index,mm/amm,ss+80h/ass,sect/asect,peaklo,peakhi)

+

With report enabled via Setmode, the Play, Forward, and Backward commands do +repeatedly generate INT1 interrupts, with eight bytes response length. The +interrupt isn't generated on ALL sectors, and the response changes between +absolute time, and time within current track (the latter one indicated by bit7 +of ss):
+

  amm/ass/asect are returned on asect=00h,20h,40h,60h   ;-absolute time
+  mm/ss+80h/sect are returned on asect=10h,30h,50h,70h  ;-within current track
+  (or, in case of read errors, report may be returned on other asect's)
+
+The last two response bytes (peaklo,peakhi) contain the Peak value, as received +from the CXD2510Q Signal Processor. That is: An unsigned absolute peak level in +lower 15bit, and an L/R flag in upper bit. The L/R bit is toggled after each +SUBQ read, however the PSX Report mode does usually forward SUBQ only every 10 +frames (but does read SUBQ in \<every> frame), so L/R will stay stuck in +one setting (but may toggle after one second; ie. after 75 frames). And, peak +is reset after each read, so 9 of the 10 frames are lost.
+Note: Report mode affects only CD Audio (not Data, nor XA-ADPCM sectors).

+

AutoPause --> INT4(stat)

+

Autopause can be enabled/disabled via Setmode.bit1:
+

  Setmode.bit1=1: AutoPause=On  --> Issue INT4(stat) and PAUSE at end of TRACK
+  Setmode.bit1=0: AutoPause=Off --> Issue INT4(stat) and STOP at end of DISC
+
+End of Track is determined by sensing a track number transition in SubQ +position info. After autopause, the disc stays at the \<end> of the old +track, NOT at the \<begin> of the next track (so trying to resume playing +by sending a new Play command without new Seek/Setloc command will instantly +pause again).
+Caution: SubQ track transitions may pause instantly when accidently starting to +play at the end of the previous track rather than at begin of desired track +(this \<might> happen due to seek inaccuracies, for example, GetTD does +round down TOC entries from MM:SS:FF to MM:SS:00, which may be off by 0.99 +seconds, although this error should be usually compensated by the leading +2-second pregap/index0 region at the begin of each track, unfortunately there +are a few .CUE sheet files that do lack both PREGAP and INDEX 00 entries on +audio tracks, which might cause problems with autopause).
+AutoPause is used by Rayman and Tactics Ogre.

+

Playing XA-ADPCM Sectors (compressed audio data)

+

Aside from normal uncompressed CD Audio disks, the PSX can also play XA-ADPCM +compressed sectors. XA-ADPCM sectors are organized in Files (not in tracks), +and are "played" with Read command (not Play command).
+To play XA-ADPCM, initialize the SPU for CD Audio input (as described above), +enable ADPCM via Setmode, then select the sector via Setloc, and issue a Read +command (typically ReadS).
+XA-ADPCM sectors are interleaved, ie. only each Nth sector should be played +(where "N" depends on the Motor Speed, mono/stereo format, and sample rate). If +the "other" sectors do contain XA-ADPCM data too, then the Setfilter command +(and XA-Filter enable flag in Setmode) must be used to select the desired +sectors. If the "other" sectors do contain code or data (eg. MDEC video data) +which is wanted to be send to the CPU, then SetFilter isn't required to be +enabled (although it shouldn't disturb reading even if it is enabled).
+If XA-ADPCM (and/or XA-Filter) is enabled via Setmode, then INT1 is generated +only for non-ADPCM sectors.
+The Setmode sector-size selection is don't care for forwarding XA-ADPCM sectors +to the SPU (the hardware does always decompress all 900h bytes).

+

CDROM - Test Commands

+

CDROM - Test Commands - Version, Switches, Region, Chipset, SCEx
+CDROM - Test Commands - Test Drive Mechanics
+CDROM - Test Commands - Prototype Debug Transmission
+CDROM - Test Commands - Read/Write Decoder RAM and I/O Ports
+CDROM - Test Commands - Read HC05 SUB-CPU RAM and I/O Ports

+

CDROM - Test Commands - Version, Switches, Region, Chipset, SCEx

+

19h,20h --> INT3(yy,mm,dd,ver)

+

Indicates the date (Year-month-day, in BCD format) and version of the HC05 +CDROM controller BIOS. Known/existing values are:
+

  (unknown)        ;DTL-H2000 (with SPC700 instead HC05)
+  94h,09h,19h,C0h  ;PSX (PU-7)               19 Sep 1994, version vC0 (a)
+  94h,11h,18h,C0h  ;PSX (PU-7)               18 Nov 1994, version vC0 (b)
+  94h,11h,28h,01h  ;PSX (DTL-H2000)          28 Nov 1994, version v01 (debug)
+  95h,05h,16h,C1h  ;PSX (LATE-PU-8)          16 May 1995, version vC1 (a)
+  95h,07h,24h,C1h  ;PSX (LATE-PU-8)          24 Jul 1995, version vC1 (b)
+  95h,07h,24h,D1h  ;PSX (LATE-PU-8,debug ver)24 Jul 1995, version vD1 (debug)
+  96h,08h,15h,C2h  ;PSX (PU-16, Video CD)    15 Aug 1996, version vC2 (VCD)
+  96h,08h,18h,C1h  ;PSX (LATE-PU-8,yaroze)   18 Aug 1996, version vC1 (yaroze)
+  96h,09h,12h,C2h  ;PSX (PU-18) (japan)      12 Sep 1996, version vC2 (a.jap)
+  97h,01h,10h,C2h  ;PSX (PU-18) (us/eur)     10 Jan 1997, version vC2 (a)
+  97h,08h,14h,C2h  ;PSX (PU-20)              14 Aug 1997, version vC2 (b)
+  98h,06h,10h,C3h  ;PSX (PU-22)              10 Jun 1998, version vC3 (a)
+  99h,02h,01h,C3h  ;PSX/PSone (PU-23, PM-41) 01 Feb 1999, version vC3 (b)
+  A1h,03h,06h,C3h  ;PSone/late (PM-41(2))    06 Jun 2001, version vC3 (c)
+  (unknown)        ;PS2,   xx xxx xxxx, late PS2 models...?
+

+

19h,21h --> INT3(flags)

+

Returns the current status of the POS0 and DOOR switches.
+

  Bit0   = HeadIsAtPos0 (0=No, 1=Pos0)
+  Bit1   = DoorIsOpen   (0=No, 1=Open)
+  Bit2   = EjectButtonOrOutSwOrSo? (DTL-H2000 only) (always 0 on retail)
+  Bit3-7 = AlwaysZero
+

+

19h,22h --> INT3("for Europe")

+

  Caution: Supported only in BIOS version vC1 and up. Not supported in vC0.
+
+Indicates the region that console is to be used in:
+
  INT5(11h,10h)      --> NTSC, Japan (vC0)         --> requires "SCEI" discs
+  INT3("for Europe") --> PAL, Europe               --> requires "SCEE" discs
+  INT3("for U/C")    --> NTSC, North America       --> requires "SCEA" discs
+  INT3("for Japan")  --> NTSC, Japan / NTSC, Asia  --> requires "SCEI" discs
+  INT3("for NETNA")  --> Region-free yaroze version--> requires "SCEx" discs
+  INT3("for US/AEP") --> Region-free debug version --> accepts unlicensed CDRs
+
+The CDROMs must contain a matching SCEx string accordingly.
+The string "for Europe" does also suggest 50Hz PAL/SECAM video hardware.
+The Yaroze accepts any normal SCEE,SCEA,SCEI discs, plus special SCEW discs.

+

19h,23h --> INT3("CXD2940Q/CXD1817Q/CXD2545Q/CXD1782BR") ;Servo Amplifier

+

19h,24h --> INT3("CXD2940Q/CXD1817Q/CXD2545Q/CXD2510Q") ;Signal Processor

+

19h,25h --> INT3("CXD2940Q/CXD1817Q/CXD1815Q/CXD1199BQ") ;Decoder/FIFO

+

  Caution: Supported only in BIOS version vC1 and up. Not supported in vC0.
+
+Indicates the chipset that the CDROM controller is intended to be used with. +The strings aren't always precisely correct (CXD1782BR is actually CXA1782BR, +ie. CXA, not CXD) (and CXD1199BQ chips exist on PU-7 boards, but later PU-8 +boards do actually use CXD1815Q) (and CXD1817Q is actually CXD1817R) (and newer +PSones are using CXD2938Q or possibly CXD2941R chips, but nothing called +CXD2940Q).
+Note: Yaroze responds by CXD1815BQ instead of CXD1199BQ (but not by CXD1815Q).

+

19h,04h --> INT3(stat) ;Read SCEx string (and force motor on)

+

Resets the total/success counters to zero, and does then try to read the SCEx +string from the current location (the SCEx is stored only in the Lead-In area, +so, if the drive head is elsewhere, it will usually not find any strings, +unless a modchip is permanently simulating SCEx strings).
+This is a raw test command (the successful or unsuccessful results do not +lock/unlock the disk). The results can be read with command 19h,05h (which will +terminate the SCEx reading), or they can be read from RAM with command +19h,60h,lo,hi (which doesn't stop reading). Wait 1-2 seconds before expecting +any results.
+Note: Like 19h,00h, this command forces the drive motor to spin at standard +speed (synchronized with the data on the disk), works even if the shell is open +(but stops spinning after a while if the drive is empty).

+

19h,05h --> INT3(total,success) ;Get SCEx Counters

+

Returns the total number of "Sxxx" strings received (where at least the first +byte did match), and the number of full "SCEx" strings (where all bytes did +match). Typically, the values are "01h,01h" for Licensed PSX Data CDs, or +"00h,00h" for disk missing, unlicensed data CDs, Audio CDs.
+The counters are reset to zero, and SCEx receive mode is active for a few +seconds after booting a new disk (on power up, on closing the drive door, on +sending a Reset command, and on sub_function 04h). The disk is unlocked if the +"success" counter is nonzero, the only exception is sub_function 04h which does +update the counters, but does not lock/unlock the disk.

+

CDROM - Test Commands - Test Drive Mechanics

+

Signal Processor and Servo Amplifier

+

19h,50h,msb[,mid,[lsb[,xlo]]] --> INT3(stat)

+

Sends an 8bit/16bit/24bit command to the hardware, depending on number of +parameters:
+

  1 byte  --> send CX(Xx)       ;short 8bit command
+  2 bytes --> send CX(Xxxx)     ;longer 16bit command
+  3 bytes --> send CX(Xxxxxx)   ;full 24bit command
+  4 bytes --> send CX(Xxxxxxxx) ;extended 32bit command (BIOS vC3 only)
+  4..15 bytes: acts same as max (3 or 4 bytes) (extra bytes are ignored)
+  0 bytes or more than 15 bytes: generates an error
+

+

19h,51h,msb[,mid,[lsb]] --> INT3(stat,hi,lo) ;BIOS vC2/vC3 only

+

Supported by newer CDROM BIOSes only (such that use CXD2545Q or newer chips).
+Works same as 19h,50h, but does additionally receive a response.
+The command is always sending a 24bit CX(Xxxxxx) command, but it doesn't verify +the number of parameter bytes (when using more than 3 bytes: extra bytes are +ignored, when using less than 3 bytes: garbage is appended, which is somewhat +valid because 8bit/16bit commands can be padded to 24bit size by appending +"don't care" bits).
+The command can be used to send any CX(..) command, but actually it does make +sense only for the get-status commands, see below "19h,51h,39h,xxh" +description.

+

19h,51h,39h,xxh --> INT3(stat,hi,lo) ;BIOS vC2/vC3 only

+

Supported by newer CDROM BIOSes only (such that use CXD2545Q or newer chips).
+Sends CX(39xx) to the hardware, and receives a response (the response.hi byte +is usually 00h for 8bit responses, or 00h..01h for 9bit responses). For +example, this can be used to dump the Coefficient RAM.

+

19h,03h --> INT3(stat) ;force motor off

+

Forces the motor to stop spinning (ignored during spin-up phase).

+

19h,17h --> INT3(stat) ;force motor on, clockwise, super-fast

+

19h,01h --> INT3(stat) ;force motor on, anti-clockwise, super-fast

+

19h,02h --> INT3(stat) ;force motor on, anti-clockwise, super-fast

+

19h,10h --> INT3(stat) ;force motor on, anti-clockwise, super-fast

+

19h,18h --> INT3(stat) ;force motor on, anti-clockwise, super-fast

+

Forces the drive motor to spin at maximum speed (which is much faster than +normal or double speed), in normal (clockwise), or reversed (anti-clockwise) +direction. The commands work even if the shell is open. The commands do not try +to synchronize the motor with the data on the disk (and do thus work even if no +disk is inserted).

+

19h,00h --> INT3(stat) ;force motor on, clockwise (even if shell open)

+

This command seems to have effect only if the drive motor was off. If it was +off, it does FFh-fills the TOC entries in RAM, and seek to the begin of the TOC +at 98:30:00 or so (where minute=98 means minus two). From that location, it +follows the spiral on the disk, although it does occassionally jump back some +seconds. After clearing the TOC, the command does not write new data to the TOC +buffer in RAM.
+Note: Like 19h,04h, this command forces the drive motor to spin at standard +speed (synchronized with the data on the disk), works even if the shell is open +(but stops spinning after a while if the drive is empty).

+

19h,11h --> INT3(stat) ;Move Lens Up (leave parking position)

+

19h,12h --> INT3(stat) ;Move Lens Down (enter parking position)

+

19h,13h --> INT3(stat) ;Move Lens Outwards (away from center of disk)

+

19h,14h --> INT3(stat) ;Move Lens Inwards (towards center of disk)

+

Moves the laser lens. The inwards/outwards commands do move ONLY the lens (ie. +unlike as for Seek commands, the overall-laser-unit remains in place, only the +lens is moved).

+

19h,15h - if motor on: move head outwards + inwards + motor off

+

Moves the drive head to outer-most and inner-most position. Note that the drive +doesn't have a switch that'd tell the controller when it has reached the +outer-most position (so it'll forcefully hit against the outer edge) (ie. using +this command too often may destroy the drive mechanics).
+Note: The same destructive hit-outer-edge effect happens when using Setloc/Seek +with too large values (like minute=99h).

+

19h,16h --> INT3(stat) ;Unknown / makes some noise if motor is on

+

19h,19h --> INT3(stat) ;Unknown / no effect

+

19h,1Ah --> INT3(stat) ;Unknown / makes some noise if motor is on

+

Seem to have no effect?
+19h,16h seems to Move Lens Inwards, too.

+

19h,06h,new --> INT3(old) ;Adjust balance in RAM, and apply it via CX(30+n)

+

19h,07h,new --> INT3(old) ;Adjust gain in RAM, and apply it via CX(38+n)

+

19h,08h,new --> INT3(old) ;Adjust balance in RAM only

+

These commands are supported only by older CDROM BIOS versions (those with +CXA1782BR Servo Amplifier).
+Later BIOSes will respond with INT5(11h,20h) when trying to use these commands +(because CXD2545Q and later Servo Amplifiers don't support the CX(30/38+n) +commands).

+

CDROM - Test Commands - Prototype Debug Transmission

+

Serial Debug Messages

+

Older CDROM BIOSes are supporting debug message transmission via serial bus, +using lower 3bit of the HC05 "databus" combined with the so-called "ROMSEL" pin +(which apparently doesn't refer to Read-Only-Memory, but rather something like +Runtime-Output-Message, or whatever).
+Data is transferred in 24bit units (8bit command/index from HC05, followed by +16bit data to/from HC05), bigger messages are divided into multiple such 24bit +snippets.
+There are no connectors for external debug hardware on any PSX mainboards, so +the whole stuff seems to be dating back to prototypes. And it seems to be +removed from later BIOSes (which appear to use "ROMSEL" as "SCLK"; for +receiving status info from the new CXD2545Q chips).

+

19h,30h,index,dat1,dat2 --> INT3(stat) ;Prototype/Debug stuff

+

19h,31h,dat1,dat2 --> INT3(stat) ;Prototype/Debug stuff

+

19h,4xh,index --> INT3(dat1,dat2) ;Prototype/Debug stuff

+

These functions are supported on older CDROM BIOS only; later BIOSes respond by +INT5(11h,10h).
+The functions do not affect the CDROM operation (they do simple allow to +transfer data between Main CPU and external debug hardware).
+Sub functions 30h and 31h may fail with INT5(11h,80h) when receiving wrong +signals on the serial input line.
+Sub function "4xh" value can be 40h..4Fh (don't care).

+

INT5 Debug Messages

+

Alongsides to INT5 errors, the BIOS is usually also sending information via the +above serial bus (the error info is divided into multiple 8bit+16bit snippets, +and contains stat, error code, mode, current SubQ position, and most recently +issued command).

+

CDROM - Test Commands - Read/Write Decoder RAM and I/O Ports

+

Caution: Below commands 19h,71h..76h are supported only in BIOS version vC1 and +up. Not supported in vC0.

+

19h,71h,index --> INT3(databyte) ;Read single register

+

index can be 00h..1Fh, bigger values seem to be mirrored to "index AND 1Fh", +with one exception: index 13h in NOT mirrored, instead, index 33h, 53h, 93h, +B3h, D3h, F3h return INT5(stat+1,10h), and index 73h returns INT5(stat+1,20h).
+Aside from returning a value, the commands seem to DO something (like moving +the drive head when a disk is inserted). Return values are usually:
+

  index     value
+  00h       04h      ;04h=empty, 8Eh=licensed, 24h=audio
+  01h       [0B1h]   ;DCh=empty/licensed, DDh=audio
+  02h       00h
+  03h       00h          ;or variable when disk inserted
+  04h       00h
+  05h       80h          ;or 86h or 89h when disk inserted
+  06h       C0h
+  07h       02h
+  08h       8Ah
+  09h       C0h
+  0Ah       00h
+  0Bh       C0h
+  0Ch       [1F2h]
+  0Dh       [1F3h]
+  0Eh       00h          ;or 8Eh or E6h when disk inserted    ;D4h/audio
+  0Fh       00h          ;or sometimes 01h when disk inserted ;50h/audio
+  10h       C0h
+  11h       E0h
+  12h       71h
+  13h       stat
+  14h       FFh
+  15h..1Fh  C0h-filled        ;or 17h --> DEh
+

+

19h,72h,index,databyte --> INT3(stat) ;Write single register

+
  ;other response on param xx16h,xx18h with xx>00h
+
+

19h,73h,index,len --> INT3(databytes...) ;Read multiple registers (bugged)

+

19h,74h,index,len,databytes --> INT3(stat) ;Write multiple registers (bugged)

+

Same as read/write single register, but trying to transfer multiple registers +at once. BUG: The transfer should range from 00h to len-1, but the loop counter +is left uninitialized (set to X=48h aka "command number 19h-minus-1-mul-2" +instead of X=00h). Causing to the function to read/write garbage at index +48h..FFh, it does then wrap to 00h and do the correct intended transfer, but +the preceeding bugged part may have smashed RAM or I/O ports.

+

19h,75h --> INT3(remain.lo,remain.hi,addr.lo,addr.hi) ;Get Host Xfer Info

+

Returns a 4-byte value. In my early tests, on the first day it returned +B1h,CEh,4Ch,01h, on the next day 2Ch,E4h,95h,D5h, and on all following days +00h,C0h,00h,00h (no idea why/where the earlier values came from).
+The first byte seems to be always 00h; no matter of [1F0h].
+The second byte seems to be always C0h; no matter of [1F1h].
+The third,fourth bytes are [1F2h,1F3h].
+That two bytes are 0Ch,08h after Read commands.
+

  The first bytes are NOT affected by:
+  destroying [1F0h] via too-many-parameters in command-buffer,
+  changes to [1F1h] which may occur after read command (eg. may be 20h)
+

+

19h,76h,len_lo,len_hi,addr_lo,addr_hi --> INT3(stat) ;Prepare SRAM Transfer

+

Prepare Transfer to/from 32K SRAM.
+After INT3, data can be read (same way as sector data after INT1).

+

CDROM - Test Commands - Read HC05 SUB-CPU RAM and I/O Ports

+

19h,60h,addr_lo,addr_hi --> INT3(data) ;Read one byte from Drive RAM or I/O

+

Reads one byte from the controller's RAM or I/O area, see the memory map below +for more info. Among others, the command allows to read Subchannel Q data, eg. +at [200h..209h], including ADR=2/UPC/EAN and ADR=3/ISRC values (which are +suppressed by GetlocP). Eg. wait for ADR\<>2, then for ADR=2, then read +the remaining 9 bytes (because of the delayed IRQs, this works only at single +speed) (at double speed one can read only 5 bytes before the values get +overwritten by new data). Unknown if older boards (with 4.00MHz oscillators) +are fast enough to read all 10 SubQ bytes.

+

CDROM Controller I/O Area and RAM Memory Map

+

First 40h bytes are I/O ports (as in MC68HC05 datasheet):
+

  000h 4        FF 7B 00 FF  (other when disk inserted)
+  004h 5        11 00 20 20 0C
+  009h 1        00 (when disk inserted: changes between 00 or 80)
+  00Ah 2        71 00
+  00Ch 1        00 (when disk inserted: changes between 00 or 80)
+  00Dh 3        20 20 20
+  010h 8        02 80 00 60 00 00 99(orBB) 98
+  018h 4     changes randomly (even when no disk inserted)
+  01Ch 3        40 00 41
+  01Fh 1     changes randomly (even when no disk inserted)
+  020h 30    20h-filled
+  03Eh 2        82h 20h
+
+Next 200h bytes are RAM:
+
  040h 4        08 00 00 00  ;or 98 07 xx 0B when disk inserted ;[40].Bit1=MUTE
+  044h 4     00h-filled
+  048h 3        40 20 00     ;or 58 71 0F when disk inserted
+  04Bh 1     changes randomly (nodisk: 00 or 80 / disk: BFh)
+  04Ch 1     Zero (or C0h)
+  04Dh 3     MM:SS:FF (begin of current track MM:SS:00h) (or increasing addr)
+  050h 10    Subchannel Q (adjusted position values)
+  05Ah 2        ...
+  05Ch 1     00h (or 64h)
+  05Dh 3     MM:SS:FF (current read address) (sticky address during pause)
+  060h 1     increments at circa 16Hz or so (or other rate when spinning)
+  061h 12    00h-filled ;or else when disk inserted
+  06Dh 1        01      ;or 0C when disk inserted
+  06Eh 2     SetFilter setting (file,channel)
+  070h 16    00h-filled ;or else when disk inserted
+  080h 8     00h-filled
+  088h 3        03:SS:FF (three, second, fraction)
+  08Bh 3        03:SS:FF (three, second, fraction)
+  08Eh 2        01 FF (or other values)
+  090h 1        00h (or 91h when disk inserted + spinning)
+  091h 13    Zero
+  09Eh 1        00h (or 01h when disk inserted + spinning)
+  09Fh 1     Zero
+  0A0h 1     Always 23h
+  0A1h 1        09h (5Dh when disk inserted)
+  0A2h 7     00h-filled
+  0A9h 1        40
+  0AAh 4     00h-filled
+  0AEh 1        00 (no disk) or 01 (disk) or so
+  0AFh 1        00            ;or 06 when disk inserted
+  0B0h 7        00 DC 00 02 00 E0 08             ;\or else when disk inserted
+  0B7h 1        20         ;Bit6+7=MUTE          ;
+  0B8h 3        DE 00 00                         ;/
+  0BBh 1     SetMode setting (mode)
+  0BCh 1     GetStat setting (stat)
+  0BDh 3     00h-filled
+  0C0h 6     FFh-filled            ;stack...                    ;\
+  0C6h 1     Usually DFh           ;sometimes [0EBh and up] are non-FFh, too
+  0C7h 15    FFh-filled            ;(depending on disk or commands or so)
+  0D6h 1     Usually FDh (or FFh)  ;                            ;
+  0D7h 24    FFh-filled                                         ; stack
+  0EFh 4     on power-up FFh-filled, other once when disk read  ;
+  0F3h 7     changes randomly (even when no disk inserted)      ;
+  0FAh 6       2E 3C 2A D6 10 95                                ;/
+  100h 2x99  TOC Entries for Start of Track 1..99 (MM:SS)
+  1C6h 1     TOC First Track number (usually 01h)
+  1C7h 1     TOC Last Track number (usually 01h or higher)
+  1C8h 3     TOC Entry for Start of Lead-Out (MM:SS:FF)
+  1CBh 2     Zero
+  1CDh 1     Depends on disk (01 or 02 or 06) (or 00 when no disk)
+  1CEh 1     Zero
+  1CFh 1     Depends on disk (NULL minus N*6) (or 00 when no disk)
+               (maybe reflection level / laser intensity or so)
+                [1CDh..1CFh]
+                01 00 E8 --> licensed/metalgear/kain
+                01 00 EE --> licensed/alone2
+                06 00 E2 or 00 00 02 00 E8 --> licensed/wipeout
+                02 00 DC --> unlicensed/elo
+                02 00 D6 --> unlicensed/driver
+                00 00 EE --> audio/lola
+                00 00 FA --> audio/marilyn
+                00 00 F4 --> audio/westen
+                00 00 00 --> disk missing
+               last byte is always in steps of 6
+  1D0h 4     SCEx String
+  1D4h 4     Zero
+  1D8h 2     SCEx Counters (total,success)  ;for command 19h,05h
+  1DAh 6       00h-filled     (or ... SS:FF)
+  1E0h 6     Command Buffer (usually 19h,60h,E2h,01h = Read RAM Command)
+  1E6h 7       00h-filled (unless destroyed by more-than-6-byte-commands)
+  1EDh 3     Setloc setting (MM:SS:FF)
+  1F0h 1       00h          (unless destroyed by more-than-6-byte-commands)
+  1F1h 3       C0h 00h 00h ;or 20h,0Ch,50h or C0h,0Ch,08h ;for command(19h,75h)
+                           ;or 00h,00h,00h for audio
+                           ;or 80h,00h,00h for disk missing
+  1F4h 4       00h-filled ... or SCEx string
+  1F8h 1       00h
+  1F9h 1     Selected Target (parameter from Play and SetSession commands)
+  1FAh 5       00h-filled       ;01 01 00 8B 00 00   ;or 01 02 8B 00 00
+                       01 00 8B 00 00 -- audio/unlicensed
+                       01 01 00 00 00 -- licensed
+  1FFh 1       00h-on power up, changes when disk inserted  ;or 01 = Playing
+    1FDh 3       MM:SS:FF (only during command 19h,00h) (MM=98..99=TOC)
+  200h 10    Subchannel Q (real values)
+  20Ah 2       whatever
+  20Ch 1     Zero
+  20Dh 1     Desired Session (from SetSession command)
+  20Eh 1     Current Session (actual location of drive head)
+  20Fh 1     Zero
+  210h 10    Subchannel Q (adjusted position values)
+  21Ah 6     00h-filled
+  220h 4     Data Sector Header (MM:SS:FF:Mode)
+  224h 4     Data Sector CD-XA Subheader (file,channel,sm,ci)
+  228h 1         00h
+  229h 1     Usually 00h (shortly other value on power-up, and maybe on seek)
+  22Ah 1         10h (or 00h when no disk)
+  22Bh 3     00h-filled
+  22Eh 2         01,03 or 0A,00 or 03,01 (or else for other disk)
+  230h 3     00h-filled (or other during spin-up / read-toc or so)
+  233h 0Dh   00h-filled (unused RAM)
+
+Other/invalid addresses are:
+
  240h..2FFh  - Invalid (00h-filled) (no ROM, RAM, or I/O mapped here)
+  300h..3FFh  - Mirror of 200h..2FFh    ;\the BIOS is doing that
+  400h..FFFFh - Mirrors of 000h..3FFh   ;/mirroring by software
+

+

DTL-H2000 Memory Map

+

This version allows to read the whole 64Kbyte memory space (withou mirroring +everything to first 300h bytes). I/O Ports and Variables are at different +locations:
+

  000h..0DFh   RAM Part 1 (C0h bytes)
+  0E0h..0FFh   I/O Area
+  100h..1DFh   RAM Part 2 (C0h bytes)
+  1E0h..1FFh   I/O Area
+  200h..2DFh   RAM Part 3 (100h bytes)
+  2E0h..7FFFh  Unknown
+  8000h-BFFFh  Unknown  (lower 16K of 32K EPROM) (or unused?)
+  C000h-FFFFh  Firmware (upper 16K of 32K EPROM)
+

+

Writing to RAM

+

There is no command for writing to RAM. Except that, one can write to the +command/parameter buffer at 1E0h and up. Normally, the longest known command +should have 6 bytes (19h,76h,a,b,c,d), and longer commands results in "bad +number of parameters" response - however, despite of that error message, the +controller does still store ALL parameter bytes in RAM (at address 1E1h..2E0h, +then wrapping back to 1E1h). Whereas, writing more than 16 bytes (FIFO storage +size) will mirror the FIFO content twice, and more than 32 bytes (FIFO counter +size) will work only when feeding extra data into the FIFO during transmission. +Anyways, writing to 1E1h and up doesn't allow to do interesting things (such +like manipulating the stack and executing custom code on the CPU).

+

Subchannel Q Notes

+

The "adjusted position values" at 050h, 210h, 310h contain only position +information (with ADR=1) (the PSX seems to check only the lower 2bit of the +4bit ADR value, so it also treats ADR=5 as ADR=1, too). Additionally, during +Lead-In, bytes 7..9 are overwritten by the position value from bytes 3..5. The +"real values" contain unadjusted data, including ADR=2 and ADR=3 etc.

+

CDROM - Secret Unlock Commands

+

SecretUnlockPart1 - Command 50h --> INT5(11h,40h)

+

SecretUnlockPart2 - Command 51h,"Licensed by" --> INT5(11h,40h)

+

SecretUnlockPart3 - Command 52h,"Sony" --> INT5(11h,40h)

+

SecretUnlockPart4 - Command 53h,"Computer" --> INT5(11h,40h)

+

SecretUnlockPart5 - Command 54h,"Entertainment" --> INT5(11h,40h)

+

SecretUnlockPart6 - Command 55h,\<region> --> INT5(11h,40h)

+

SecretUnlockPart7 - Command 56h --> INT5(11h,40h)

+

  Caution: Supported only in BIOS version vC1 and up. Not supported in vC0.
+  Caution: Supported only in Europe/USA. Nonfunctional in Japan/Asia.
+  Caution: When unsupported, Parameter Fifo isn't cleared after the command.
+
+Sending these commands with the correct strings (in order 50h through 56h) does +disable the "SCEx" protection. The region can be detected via test command +19h,22h, and must be translated to the following \<region> string:
+
  "of America"    ;for NTSC/US          ;\
+  "(Europe)"      ;for PAL/Europe       ; handled, and actually working
+  "World wide"    ;for Yaroze           ;/
+  "Inc."          ;for NTSC/JP          ;-non-functional
+
+In the unlocked state, ReadN/ReadS are working for unlicensed CD-Rs, and for +imported CDROMs from other regions (both without needing modchips). However +there are some cases which may still cause problems: The GetID command (1Ah) +does still identify the disc as being unlicensed, same for the Get SCEx +Counters test command (19h,05h). And, if a game should happen to send the Reset +command (1Ch) for some weird reason, then the BIOS would forget the unlocking, +same for games that set the "HCRISD" I/O port bit. On the contrary, +opening/closing the drive door does not affect the unlocking state.
+The commands have been discovered in September 2013, and appear to be supported +by all CDROM BIOS versions (from old PSXes up to later PSones).
+Note that the commands do always respond with INT5 errors (even on successful +unlocking).
+Japanese consoles are internally containing code for processing the Secret +Unlock commands, but they are not actually executing that code, and even if +they would do so: they are ignoring the resulting unlocking flag, making the +commands nonfunctional in Japan/Asia regions.

+

SecretLock - Command 57h --> INT5(11h,40h)

+

Undoes the unlocking and restores the normal locked state (same happens when +sending the Unlocking commands in wrong order or with wrong parameters).

+

SecretCrash - Command 58h..5Fh --> Crash

+

Jumps to a data area and executes random code. Results are more or less +unpredictable (as they involve executing undefined opcodes). Eventually the CPU +might hit a RET opcode and recover from the crash.

+

CDROM - Video CD Commands

+
  Caution: Supported only on SCPH-5903, not supported on any other consoles.
+  Caution: When unsupported, Parameter Fifo isn't cleared after the command.
+
+
  1Fh VideoCD      sub,a,b,c,d,e   INT3(stat,a,b,c,d,e)   ;<-- SCPH-5903 only
+  1Fh..4Fh -       -               INT5(11h,40h)  ;-Unused/invalid
+
+

VideoCdSio - Cmd 1Fh,01h,JoyL,JoyH,State,Task,0 --> INT3(stat,req,mm,ss,ff,x)

+

The JoyL/JoyH bytes contain 16bit button (and drive door) bits:
+

  0  Drive Door  (0=Open)    (from CDROM stat bit4) ;Open
+  1  Button /\   (0=Pressed) (from PSX pad bit12) ;N/A       ;PBC: Back/LevelUp
+  2  Button []   (0=Pressed) (from PSX pad bit15) ;Enter Menu
+  3  Button ()   (0=Pressed) (from PSX pad bit13) ;Leave Menu     ;PBC: Confirm
+  4  Button ><   (0=Pressed) (from PSX pad bit14) ;N/A
+  5  Start       (0=Pressed) (from PSX pad bit3)  ;Play/Pause
+  6  Select      (0=Pressed) (from PSX pad bit0)  ;Stop (prompt restart/resume)
+  7  Always 0    (0)         (fixed)              ;N/A
+  8  DPAD Up     (0=Pressed) (from PSX pad bit4)  ;Menu Up           ;PBC: +1
+  9  DPAD Right  (0=Pressed) (from PSX pad bit5)  ;Menu Right/change ;PBC: +10
+  10 DPAD Down   (0=Pressed) (from PSX pad bit6)  ;Menu Down         ;PBC: -1
+  11 DPAD Left   (0=Pressed) (from PSX pad bit7)  ;Menu Left/change  ;PBC: -10
+  12 Button R1   (0=Pressed) (from PSX pad bit11) ;Prev Track/Restart Track
+  13 Button R2   (0=Pressed) (from PSX pad bit9)  ;Fast Forward (slowly)
+  14 Button L1   (0=Pressed) (from PSX pad bit10) ;Next Track (if any)
+  15 Button L2   (0=Pressed) (from PSX pad bit8)  ;Fast Backward (slowly)
+
+The State byte can be:
+
  00h  Motor Off (or spin-up)   (when stat.bit1=0)
+  01h  Playing                  (when stat.bit7=1)
+  02h  Paused (and not seeking) (when stat.bit6=0)
+  (note: State remains unchanged when seeking)
+
+The Task byte can be:
+
  00h = Confirms that "Tocread" (aka setsession 1) request was processed
+  01h = Detect VCD Disc (used on power-up, and after door open) (after spin-up)
+  02h = Handshake (request ack response)
+  0Ah = Door opened during play (int5/door error)
+  80h = No disc
+  FFh = No change (nop)
+
+The req byte in the INT3 response can be:
+
  00h  Normal (no special event occured and no action requested)
+  01h  Request CD to Seek_and_play (using mm:ss:ff response parameter bytes)
+  02h  Request CD to Pause                ;cmd(09h)    -->int3(stat),int2(stat)
+  03h  Request CD to Stop                 ;cmd(08h)    -->int3(stat),int2(stat)
+  04h  Request CD to Tocread (setsession1);cmd(12h,01h)-->int3(stat),int2(stat)
+  05h  Handshake Command was processed, and this is the "ack" response
+  06h  Request CD to Fast Forward         ;cmd(04h)    -->int3(stat)
+  07h  Request CD to Fast Backward        ;cmd(05h)    -->int3(stat)
+  80h  Detect Command was processed, and disc was detected as VCD
+  81h  Detect Command was processed, and disc was detected as Non-VCD
+

+

VideoCdSwitch - Cmd 1Fh,02h,flag,x,x,x,x --> INT3(stat,0,0,x,x,x)

+
  00h      = Normal PSX Mode  (PortF.3=LOW)  (Audio/Video from GPU/SPU chips)
+  01h..FFh = Special VCD Mode (PortF.3=HIGH) (Audio/Video from MDEC/OSD chips)
+
+

Some findings on the SC430924 firmware...

+

The version/date is "15 Aug 1996, version C2h", although the "C2h" is +misleading: The firmware is nearly identical to version "C1h" from PU-8 boards +(the stuff added in normal "C2h" versions would be for PU-18 boards with +different cdrom chipset).

+

Compared to the original C1h version, there are only a few changes: A +initialization function for initializing port F on power-up. And new command +(command 1Fh, inserted in the various command tables), with two subfunctions +(01h and 02h):
+- Command 1Fh,01h,a,b,c,d,e --> INT3(stat,a,b,c,d,e) Serial 5-byte +read-write
+- Command 1Fh,02h,v,x,x,x,x --> INT3(stat,0,0,x,x,x) Toggle 1bit (port +F.bit3)
+Whereas,
+

  x = don't care/garbage
+  v = toggle state (00h=normal=PortF.3=LOW, 01h..FFh=special=PortF.3=HIGH)
+      (toggle gpu vs mpeg maybe?)
+  a,b,c,d,e = five bytes sent serially, and five bytes response received
+      serially (send/receive done simultaneously)
+

+

The Port F bits are:
+

  Port F.Bit0 = Serial Data In
+  Port F.Bit1 = Serial Data Out
+  Port F.Bit2 = Serial Clock Out
+  Port F.Bit3 = Toggle (0=Normal, 1=Special)
+

+

And that's about all. Ie. essentially, the only change is that the new command +controls Port F. There is no interaction with the remaining firmware (ie. +reading, seeking, and everything is working as usually, without any video-cd +related changes).
+The SCEx stuff is also not affected (ie. Video CDs would be seen as unlicensed +discs, so the PSX couldn't read anything from those discs, aside from Sub-Q +position data, of course). The SCEx region is SCEI aka "Japan" (or actually for +Asia in this case).

+

Note

+

The SPU MUTE Flag (SPUCNT.14) does also affect VCD Audio (mute is applied to +the final analog audio amplifier). All other SPUCNT bits can be zero for VCD.

+

CDROM - Mainloop/Responses

+

SUB-CPU Mainloop

+

The SUB-CPU is running a mainloop that is handling hardware events (by simple +polling, not by IRQs):
+

  check for incoming sectors (from CDROM decoder)
+  check for incoming commands (from Main CPU)
+  do maintenance stuff on the drive mechanics
+
+There is no fixed priority: if both incoming sector and incoming command are +present, then the SUB-CPU may handle either one, depending on which portion of +the mainloop it is currently executing.
+There is no fixed timing: if the mainloop is just checking for a specific +event, then a new event may be processed immediately, otherwise it may take +whole mainloop cycle until the SUB-CPU sees the event.
+Whereas, the mainloop cycle execution time isn't constant: It may vary +depending on various details. Especially, some maintenance stuff is only +handled approximately around 15 times per second (so there are 15 slow mainloop +cycles per second).

+

The order of steps that happen when sending a command to the CD controller look roughly like this: +

e.g. SetMode:
+1. Command busy flag set immediately.
+2. Response FIFO is populated.
+3. Command is being processed.
+4. Command busy flag is unset and parameter fifo is cleared.
+5. Shortly after (around 1000-6000 cycles later), CDROM IRQ is fired.
+

+

Responses

+

The PSX can deliver one INT after another. Instead of using a real queue, it's +merely using some flags that do indicate which INT(s) need to be delivered. +Basically, there seem to be two flags: One for Second Response (INT2), and one +for Data/Report Response (INT1). There is no flag for First Response (INT3); +because that INT is generated immediately after executing a command.
+The flag mechanism means that the SUB-CPU cannot hold more than one undelivered +INT1. That, although the CDROM Decoder does notify the SUB-CPU about all newly +received sectors, and it can hold up to eight sectors in the 32K SRAM. However, +the SUB-CPU BIOS merely sets a sector-delivery-needed flag (instead of +memorizing which/how many sectors need to be delivered, and, accordingly, the +PSX can use only three of the available eight SRAM slots: One for currently +pending INT1, one for undelivered INT1, and one for currently/incompletely +received sector).

+

First Response (INT3) (or INT5 if failed)

+

The first response is sent immediately after processing a command. In detail:
+The mainloop checks for incoming commands once every some clock cycles, and +executes commands under following condition:
+

  Main CPU has sent a command, AND, there is no INT pending
+  (if an INT is pending, then the command won't be executed yet, but will be
+  executed in following mainloop cycles; once when INT got acknowledged)
+  (even if no INT is pending, the mainloop may generate INT1/INT2 before
+  executing the command, if so, as said above, the command won't execute yet)
+
+Once when the command gets executed it will sent the first response immediately +after the command execution (which may only take a few clock cycles, or some +more cycles, for example Init/ReadTOC do include some time consuming +initializations). Anyways, there will be no other INTs generated during command +execution, so once when the command execution has started, it's guaranteed that +the next INT will contain the first response.

+

Second Responses (INT2) (or INT5 if failed)

+

Some commands do send a second response after actual command execution:
+

  07h MotorOn    E -               INT3(stat), INT2(stat)
+  08h Stop       E -               INT3(stat), INT2(stat)
+  09h Pause      E -               INT3(stat), INT2(stat)
+  0Ah Init         -               INT3(late-stat), INT2(stat)
+  12h SetSession E session         INT3(stat), INT2(stat)
+  15h SeekL      E -               INT3(stat), INT2(stat)  ;\use prior Setloc
+  16h SeekP      E -               INT3(stat), INT2(stat)  ;/to set target
+  1Ah GetID      E -               INT3(stat), INT2/5(stat,flg,typ,atip,"SCEx")
+  1Dh GetQ       E adr,point       INT3(stat), INT2(10bytesSubQ,peak_lo)
+  1Eh ReadTOC      -               INT3(late-stat), INT2(stat)
+
+In some cases (like seek or spin-up), it may take more than a second until the +2nd response is sent.
+It should be highly recommended to WAIT until the second response is generated +BEFORE sending a new command (it wouldn't make too much sense to send a new +command between first and second response, and results would be unknown, and +probably totally unpredictable).
+Error Notes: If the command has been rejected (INT5 sent as 1st response) then +the 2nd response isn't sent (eg. on wrong number of parameters, or if disc +missing). If the command fails at a later stage (INT5 as 2nd response), then +there are cases where another INT5 occurs as 3rd response (eg. on +SetSession=02h on non-multisession-disk).

+

Data/Report Responses (INT1)

+
  03h Play       E (track)         INT3(stat), optional INT1(report bytes)
+  04h Forward    E -               INT3(stat), optional INT1(report bytes)
+  05h Backward   E -               INT3(stat), optional INT1(report bytes)
+  06h ReadN      E -               INT3(stat), INT1(stat), datablock
+  1Bh ReadS      E?-               INT3(stat), INT1(stat), datablock
+
+

CDROM - Response Timings

+

Here are some response timings, measured in 33MHz units on a PAL PSone. The +CDROM BIOSes mainloop is doing some maintenance stuff once and when, meaning +that the response time will be higher in such mainloop cycles (max values), and +less in normal cycles (min values). The maintenance timings do also depend on +whether the motor is on or off (and probably on various other factors like +seeking).

+

First Response

+

The First Response interrupt is sent almost immediately after processing the +command (that is, when the mainloop sees a new command without any old +interrupt pending). For GetStat, timings are as so:
+

  Command                Average   Min       Max
+  GetStat (normal)       000c4e1h  0004a73h..003115bh
+  GetStat (when stopped) 0005cf4h  000483bh..00093f2h
+
+Timings for most other commands should be similar as above. One exception is +the Init command, which is doing some initialization before sending the 1st +response:
+
  Init                   0013cceh  000f820h..00xxxxxh
+
+The ReadTOC command is doing similar initialization, and should have similar +timing as Init command. Some (rarely used) Test commands include things like +serial data transfers, which may be also quite slow.

+

Second Response

+

  Command                Average   Min       Max
+  GetID                  0004a00h  0004922h..0004c2bh
+  Pause (single speed)   021181ch  020eaefh..0216e3ch ;\time equal to
+  Pause (double speed)   010bd93h  010477Ah..011B302h ;/about 5 sectors
+  Pause (when paused)    0001df2h  0001d25h..0001f22h
+  Stop (single speed)    0d38acah  0c3bc41h..0da554dh
+  Stop (double speed)    18a6076h  184476bh..192b306h
+  Stop (when stopped)    0001d7bh  0001ce8h..0001eefh
+
+Moreover, Seek/Play/Read/SetSession/MotorOn/Init/ReadTOC are sending second +responses which depend on seek time (and spin-up time if the motor was off). +The seek timings are still unknown, and they are probably quite complicated:
+The CDROM BIOS seems to split seek distance somehow into coarse steps (eg. +minutes) and fine steps (eg. seconds/sectors), so 1-minute seek distance may +have completely different timings than 59-seconds distance.
+The amount of data per spiral winding increases towards ends of the disc (so +the drive head will need to be moved by shorter distance when moving from +minute 59 to 60 as than moving from 00 to 01).
+The CDROM BIOS contains some seek distance table, which is probably optimized +for 72-minute discs (or whatever capacity is used on original PSX discs). +80-minute CDRs may have tighter spiral windings (the above seek table is +probably causing the drive head to be moved too far on such discs, which will +raise the seek time as the head needs to be moved backwards to compensate that +error).

+

INT1 Rate

+

  Command                Average   Min       Max
+  Read (single speed)    006e1cdh  00686dah..0072732h
+  Read (double speed)    0036cd2h  00322dfh..003ab2bh
+
+The INT1 rate needs to be precise for CD-DA and CD-XA Audio streaming, exact +clock cycle values should be: SystemClock*930h/4/44100Hz for Single Speed (and +half as much for Double Speed) (the "Average" values are AVERAGE values, not +exact values).

+

CDROM - Response/Data Queueing

+

[Below are some older/outdated test cases]

+

Sector Buffer

+

The CDROM sector buffer is 32Kx8 SRAM (IC303). The buffer is apparently divided +into 8 slots, theoretically allowing to buffer up to 8 sectors.
+BUG: The drive controller seems to allow only 2 of those 8 sectors (the oldest +sector, and the current/newest sector).
+Ie. after processing the INT1 for the oldest sector, one would expect the +controller to generate another INT1 for next newer sector - but instead it +appears to jump directly to INT1 for the newest sector (skipping all other +unprocessed sectors). There is no known way to get around that effect.
+So far, the big 32Kbyte buffer is entirely useless (the two accessible sectors +could have been as well stored in a 8Kbyte chip) (unless, maybe the 32Kbytes +have been intended for some error-correction "read-ahead" purposes, rather than +as "look-back" buffer for old sectors; one of the unused slots might be also +used for XA-ADPCM sectors).
+The bottom line is that one should process INT1's as soon as possible (ie. +before the cdrom controller receives and skips further sectors). Otherwise +sectors would be lost without notice (there appear to be absolutely no overrun +status flags, nor overrun error interrupts).

+

Sector Buffer Test Cases

+

  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Process INT1 --> receives sector header for 0:2:1
+  Process INT1 --> receives sector header for 0:2:2
+  Process INT1 --> receives sector header for 0:2:3
+
+Above shows the normal flow when processing INT1's as they arise. Now, +inserting delays (and not processing INT1's during that delays):
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  delay(1)
+  Process INT1 --> receives sector header for 0:2:1 (oldest sector)
+  Process INT1 --> receives sector header for 0:2:6 (newest sector)
+  Process INT1 --> receives sector header for 0:2:7 (next sector)
+
+Above suggests that the CDROM buffer can hold max 2 sectors (the oldest and +current one). However, using a longer delay:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  delay(2)
+  Process INT1 --> receives sector header for 0:2:9  (oldest/overwritten)
+  Process INT1 --> receives sector header for 0:2:11 (newest sector)
+  Process INT1 --> receives sector header for 0:2:12 (next sector)
+
+Above indicates that sector buffer can hold 8 sectors (as the sector 1 slot is +overwritten by sector 9). And, another test with even longer delay:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  delay(3)
+  Process INT1 --> receives sector header for 0:2:17 (currently received)
+  Process INT1 --> receives sector header for 0:2:16 (newest full sector)
+  Process INT1 --> receives sector header for 0:2:17 (next sector)
+  Process INT1 --> receives sector header for 0:2:18 (next sector)
+
+Above is a special case where sector 17 appears twice; the first one is the +sector 1 slot (which was overwritten by sector 9, and apparently then half +overwritten by sector 17).

+

Sector Buffer VS GetlocL Response Tests

+

  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  GetlocL
+  Process INT3 --> receives getloc info for 0:2:0
+  Process INT1 --> receives sector header for 0:2:1
+  Process INT1 --> receives sector header for 0:2:2
+  Process INT1 --> receives sector header for 0:2:3
+
+Another test, with Delay BEFORE Getloc:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  GetlocL
+  Process INT1 --> receives sector header for 0:2:1
+  Process INT3 --> receives getloc info for 0:2:6
+  Process INT1 --> receives sector header for 0:2:6
+  Process INT1 --> receives sector header for 0:2:7
+
+Another test, with Delay AFTER Getloc:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  GetlocL
+  Delay(1)
+  Process INT3 --> receives getloc info for 0:2:0
+  Process INT1 --> receives sector header for 0:2:5
+  Process INT1 --> receives sector header for 0:2:6
+  Process INT1 --> receives sector header for 0:2:7
+
+Another test, with Delay BEFORE and AFTER Getloc:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  GetlocL
+  Delay(1)
+  Process INT1 --> receives sector header for 0:2:9
+  Process INT1 --> receives sector header for 0:2:11
+  Process INT3 --> receives getloc info for 0:2:12
+  Process INT1 --> receives sector header for 0:2:12
+  Process INT1 --> receives sector header for 0:2:13
+

+

Sector Buffer VS Pause Response Tests

+

  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Pause
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+Another test, with Delay BEFORE Pause:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  Pause
+  Process INT1 --> receives sector header for 0:2:1 (oldest)
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+Another test, with Delay AFTER Pause:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Pause
+  Delay(1)
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+Another test, with Delay BEFORE and AFTER Pause:
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  Pause
+  Delay(1)
+  Process INT1 --> receives sector header for 0:2:9 (oldest/overwritten)
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+For above: Note that, despite of Pause, the CDROM is still writing to the +internal buffer (and overwrites slot 1 by sector 9) (this might be because the +Pause command isn't processed at all until INT1 is processed).

+

Double Commands (Getloc then Pause)

+

  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  GetlocL
+  Pause
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+Another test,
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  GetlocL
+  Pause
+  Process INT1 --> receives sector header for 0:2:1
+  Process INT1 --> receives sector header for 0:2:6
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+Another test,
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  GetlocL
+  Delay(1)
+  Pause
+  Process INT3 --> receives getloc info for 0:2:0 (first getloc response)
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+Another test,
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  GetlocL
+  Delay(1)
+  Pause
+  Process INT1 --> receives sector header for 0:2:9 (oldest/overwritten)
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT2 --> receives stat=02h (second pause response)
+

+

Double Commands (Pause then Getloc)

+

  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Pause
+  GetlocL
+  Process INT3 --> receives getloc info for 0:2:0 (first getloc response)
+  Process INT1 --> receives sector header for 0:2:1
+  Process INT1 --> receives sector header for 0:2:2
+  Process INT1 --> receives sector header for 0:2:3
+
+Another test,
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  Pause
+  GetlocL
+  Process INT1 --> receives sector header for 0:2:1
+  Process INT3 --> receives getloc info for 0:2:6 (first getloc response)
+  Process INT1 --> receives sector header for 0:2:6
+  Process INT1 --> receives sector header for 0:2:7
+
+Another test,
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Pause
+  Delay(1)
+  GetlocL
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT3 --> receives getloc info for 0:2:6 (first getloc response)
+  (No further INT's, ie. read is paused, but second-pause-response is lost).
+
+Another test,
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Pause
+  Delay(1)
+  GetlocL
+  Delay(1)
+  Process INT3 --> receives stat=22h (first pause response)
+  Process INT3 --> receives getloc info for 0:2:6 (first getloc response)
+  Process INT2 --> receives stat=02h (second pause response)
+
+Another test,
+
  Setloc(0:2:0)+Read
+  Process INT1 --> receives sector header for 0:2:0
+  Delay(1)
+  Pause
+  Delay(1)
+  GetlocL
+  Process INT1 --> receives sector header for 0:2:9
+  Process INT1 --> receives sector header for 0:2:11
+  Process INT3 --> receives getloc info for 0:2:12 (first getloc response)
+  Process INT1 --> receives sector header for 0:2:12
+  Process INT1 --> receives sector header for 0:2:13
+

+

CDROM Disk Format

+

Overview

+

The PSX uses a ISO 9660 filesystem, with data stored on CD-XA (Mode2) Sectors. +ISO 9660 is standard for CDROM disks, although newer CDROMs may use extended +filesystems, allowing to use long filenames and lowercase filenames, the PSX +Kernel doesn't support such stuff, and, in fact, it's putting some restrictions +on the ISO standard: it's limiting file names to MSDOS-style 8.3 format, and +it's allowing only a limited number of files and directories per disk.

+

CDROM Filesystem (ISO 9660 aka ECMA-119)

+
  Originally intended for Mode1 Sectors (but is also used for CD-XA Mode2)
+  Supports "FILENAME.EXT;VERSION" filenames (version is usually "1")
+  Supports all-uppercase filenames and directory names (0-9, A-Z, underscore)
+  For PSX: Max 8-character filenames with max 3-character extensions
+  For PSX: Max 8-character directory names, without extension
+  For PSX: Max one sector per directory (?)
+  For PSX: Max one sector (or less?) per path table (?)
+
+

CDROM Extended Architecture (CD-ROM XA aka CD-XA)

+
  Uses Mode2 Sectors (see Sector Encoding chapter)
+  Allows 800h or 914h byte data per sector (with/without error correction)
+  Allows to break interleaved data into separate files/channels
+  Supports XA-ADPCM compressed audio data
+  Stores "CD-XA001" at 400h Primary Volume Descriptor (?)
+  Stores 14 extra bytes in System Use area (LEN_SU) of Directory Entries
+
+

Physical Audio/CDROM Disk Format (ISO/IEC 10149 aka ECMA-130)

+
  Defines physical metrics of the CDROM and Audio disks
+  Defines Sub-channels and Track.Index and Minute.Second.Fraction numbering
+  Defines 14bit-per-byte encoding, and splits sectors into frames
+  Defines ECC and EDC (error correction and error detection codes)
+
+

Available Documentation

+

ISO documents are commercial standards (not available for download), however, +they are based on ECMA standards (which are free for download, however, the +ECMA stuff is in PDF format, so one may treat it as commercial bullshit, too). +CD-ROM XA is commercial only (not available for download), and, CD-XA doesn't +seem to have become very popular outside of the PSX-world, so there's very +little information available, portions of CD-XA are also used in the CD-i +standard (which may be a little better or worse documented).

+

Stuff

+
  sessions  one or more sessions per disk
+  tracks    99 tracks per disk     (01h..99h) (usually only 01h on Data Disks)
+  index     99 indices per track   (01h..99h) (rarely used, usually always 01h)
+  minutes   74 minutes per disk    (00h..73h) (or more, with some restrictions)
+  seconds   60 seconds per minute  (00h..59h)
+  sectors   75 sectors per second  (00h..74h)
+  frames    98 frames per sector
+  bytes     33 bytes per frame (24+1+8 = data + subchannel + error correction)
+  bits      14 bits per byte   (256 valid combinations, and many invalid ones)
+
+

Track.Index (stored in subchannel, in BCD format)

+

Multiple Tracks are usually used only on Audio Disks (one track for each song, +numbered 01h and up), a few Audio Disks may also split Tracks into separate +fragments with different Index values (numbered 01h and up, but most tracks +have only Index 01h). A simple Data Disk would usually contain only one Track +(all sectors marked Track=01h and Index=01h), although some more complex Data +Disks may have multiple Data tracks and/or Audio tracks.

+

Minute.Second.Sector (stored in subchannel, and in Data sectors, BCD format)

+

The sectors on CDROMs and CD Audio disks are numbered in Minutes, Seconds, and +1/75 fragments of a second (where a "second" is referring to single-speed +drives, ie. the normal CD Audio playback speed).
+Minute.Second.Sector is stored twice in the subchannel (once the "absolute" +time, and once the "local" time).
+The "absolute" sector number (counted from the begin of the disk) is mainly +relevant for Seek purposes (telling the controller if the drive head is on the +desired location, or if it needs to move the head backwards or forwards).
+The "local" sector number (counted from the begin of the track) is mainly +relevant for Audio Players, allowing to pass the data directly to the +Minute:Second display, without needing to subtract the start address of the +track.
+Data disks are additionally storing the "absolute" values in their Data Areas, +basically that's just the subchannel data duplicated, but more precisely +assigned - the problem with the subchannel data is that the CD Audio standard +seems to lack a clear definition that would assign the begin of the sub-channel +block to the exact begin of a sector; so, when using only the subchannel data, +some Drive Controllers may assign the begin of a new sector to another location +as than other Controllers do, for Audio Disks that isn't too much of a problem, +but for Data Disks it'd be fatal.

+

Subchannels

+

Each frame contains 8 subchannel bits (named P,Q,R,S,T,U,V,W). So, a sector +(with 98 frames) contains 98 bits (12.25 bytes) for each subchannel.
+CDROM Subchannels

+

Error Correction

+

Each Frame contains 8 bytes Error Correction information, which is mainly used +for Audio Disks, but it isn't 100% fail-proof, for that reason, Data Disks are +containing additional Error Correction in the 930h-byte data area (the audio +correction is probably focusing on repairing the MSBs of the 16bit samples, and +gives less priority on the LSBs). Error Correction is some kind of a huge +complex checksum, which allows to detect the location of faulty bytes, and to +fix them.

+

930h-Byte Sectors

+

The "user" area for each sector is 930h bytes (2352 bytes). That region is +combined of the 24-byte data per frame (and excludes the 8-byte audio error +correction info, and the 1-byte subchannel data).
+Most CDROM Controllers are only giving access to this 930h-byte region (ie. +there's no way to read the audio error correction info by software, and only +limited access to the subchannel data, such like allowing to read only the +Q-channel for showing track/minute/second in audio playback mode).
+On Audio disks, the 930h bytes are plain data, on Data disks that bytes are +containing headers, error correction, and usually only 800h bytes user data +(for more info see Sector Encoding chapter).

+

Sessions

+

Multi-Sessions are mainly used on CDR's, allowing to append newer data at the +end of the disk at a later time. First of, the old session must contain a flag +indicating that there may be a newer session, telling the CDROM Controller to +search if one such exists (and if that is equally flagged, to search for an +even newer session, and so on until reaching the last and newest session).
+Each session contains a complete new ISO Volume Descriptor, and may +additionally contain new Path Tables, new Directories, and new Files. The +Driver Controller is usually recursing only the Volume Descriptor of the newest +session. However, the various Directory Records of the new session may refer to +old files or old directories from previous sessions, allowing to "import" the +older files, or to "rename" or "delete" them by assigning new names to that +files, or by removing them from the directory.
+The PSX is reportedly not supporting multi-session disks, but that doesn't seem +to be correct, namely, the Setsession command is apparently intended for that +purpose... though not sure if the PSX Kernel is automatically searching the +newest session... otherwise the boot executable in the first session would need +to do that manually by software, and redirect control to the boot executable in +the last session.

+

CDROM Subchannels

+

Subchannel P

+

Subchannel P contains some kind of a Pause flag (to indicate muted areas +between Audio Tracks). This subchannel doesn't have any checksum, so the data +cannot be trusted to be intact (unless when sensing a longer stream of +all-one's, or all zero's). Theoretically, the 98 pause bits are somehow +associated to the 98 audio frames (with 24 audio bytes each) of the sector. +However, reportedly, Subchannel P does contain two sync bits, if that is true, +then there'd be only 96 pause flags for 98 audio frames. Strange.
+Note: Another way to indicate "paused" regions is to set Subchannel Q to ADR=1 +and Index=00h.

+

Subchannel Q

+

contains the following information:
+

  Bits Expl.
+  2    Sub-channel synchronization field
+  8    ADR/Control (see below)
+  72   Data (content depends on ADR)
+  16   CRC-16-CCITT error detection code (big-endian: bytes ordered MSB, LSB)
+
+Possible values for the ADR/Control field are:
+
  Bit0-3 ADR (0=No data, 1..3=see below, 4..0Fh=Reserved)
+  Bit4   Audio Preemphasis  (0=No, 1=Yes)      (Audio only, must be 0 for Data)
+  Bit5   Digital Copy       (0=Prohibited, 1=Allowed)
+  Bit6   Data               (0=Audio, 1=Data)
+  Bit7   Four-Channel Audio (0=Stereo, 1=Quad) (Audio only, must be 0 for Data)
+
+The 72bit data regions are, depending on the ADR value...

+

Subchannel Q with ADR=1 during Lead-In -- Table of Contents (TOC)

+

  8    Track number (fixed, must be 00h=Lead-in)
+  8    Point (01h..99h or A0h..A2h, see last three bytes for more info)
+  24   MSF address (incrementing address within the Lead-in area)
+         Note: On some disks, these values are choosen so that the lead-in
+         <starts> at 00:00:00, on other disks so that it <ends> at 99:59:74.
+  8    Reserved (00h)
+
+When Point=01h..99h (Track 1..99) or Point=A2h (Lead-Out):
+
  24   MSF address (absolute address, start address of the "Point" track)
+
+When Point=A0h (First Track Number):
+
  8    First Track number (BCD)
+  8    Disk Type Byte (00h=CD-DA or CD-ROM, 10h=CD-I, 20h=CD-ROM-XA)
+  8    Reserved (00h)
+
+When Point=A1h (Last Track Number):
+
  8    Last Track number (BCD)
+  16   Reserved (0000h)
+
+ADR=1 should exist in 3 consecutive lead-in sectors.

+

Subchannel Q with ADR=1 in Data region -- Position

+

  8    Track number (01h..99h=Track 1..99)
+  8    Index number (00h=Pause, 01h..99h=Index within Track)
+  24   Track relative MSF address (decreasing during Pause)
+  8    Reserved (00h)
+  24   Absolute MSF address
+
+ADR=1 is required to exist in at least 9 out of 10 consecutive data sectors.

+

Subchannel Q with ADR=1 during Lead-Out -- Position

+

  8    Track number (fixed, must be AAh=Lead-Out)
+  8    Index number (fixed, must be 01h) (there's no Index=00h in Lead-Out)
+  24   Track relative MSF address (increasing, 00:00:00 and up)
+  8    Reserved (00h)
+  24   Absolute MSF address
+
+ADR=1 should exist in 3 consecutive lead-out sectors (and may then be followed +by ADR=5 on multisession disks).

+

Subchannel Q with ADR=2 -- Catalogue number of the disc (UPC/EAN barcode)

+

  52   EAN-13 barcode number (13-digit BCD)
+  12   Reserved (000h)
+  8    Absolute Sector number (BCD, 00h..74h) (always 00h during Lead-in)
+
+If the first digit of the EAN-13 number is "0", then the remaining digits are a +UPC-A barcode number. Either the 13-digit EAN-13 number, or the 12-digit UPC-A +number should be printed as barcode on the rear-side of the CD package.
+The first some digits contain a country code (EAN only, not UPC), followed by a +manufacturer code, followed by a serial number. The last digit contains a +checksum, which can be calculated as 250 minus the sum of the first 12 digits, +minus twice the sum of each second digit, modulated by 10.
+ADR=2 isn't included on all CDs, and, many CDs do have ADR=2, but the 13 digits +are all zero. Most CDROM drives do not allow to read EAN/UPC numbers.
+If present, ADR=2 should exist in at least 1 out of 100 consecutive sectors. +ADR=2 may occur also in Lead-in.

+

Subchannel Q with ADR=3 -- ISRC number of the current track

+

(ISO 3901 and DIN-31-621):
+

  12   Country Code      (two 6bit characters)   (ASCII minus 30h) ;eg. "US"
+  18   Owner Code        (three 6bit characters) (ASCII minus 30h)
+  2    Reserved          (zero)
+  8    Year of recording (2-digit BCD) ;eg. 82h for 1982
+  20   Serial number     (5-digit BCD) ;usually increments by 1 or 10 per track
+  4    Reserved          (zero)
+  8    Absolute Sector number (BCD, 00h..74h) (always 00h during Lead-in)
+
+Most CDROM drives for PC's do not allow to read ISRC numbers (or even worse, +they may accidently return the same ISRC number on every two tracks).
+If present, ADR=3 should exist in at least 1 out of 100 consecutive sectors. +However, reportedly, ADR=3 should not occur in Lead-in.

+

Subchannel Q with ADR=5 in Lead-in -- Multisession Lead-In Info

+

When Point=B0h:
+

  8    Track number (fixed, must be 00h=Lead-in)
+  8    POINT = B0h (multi-session disc)
+  24   MM:SS:FF = the start time for the next possible session's program area,
+       a final session is indicated by FFh:FFh:FFh,
+       or when the ADR=5 / Point=B0h is absent.
+  8    Number of different Mode-5 pointers present.
+  24   MM:SS:FF = the maximum possible start time of the outermost Lead-out
+
+When Point=C0h:
+
  8    Track number (fixed, must be 00h=Lead-in)
+  8    POINT = C0h (Identifies a Multisession disc, together with POINT=B0h)
+  24   ATIP values from Special Information 1, ID=101
+  8    Reserved (must be 00h)
+  24   MM:SS:FF = Start time of the first Lead-in area of the disc
+
+And, optionally, when Point=C1h:
+
  8    Track number (fixed, must be 00h=Lead-in)
+  8    POINT=C1h
+  8x7  Copy of information from A1 point in ATIP
+

+

Subchannel Q with ADR=5 in Lead-Out -- Multisession Lead-Out Info

+

  8    Track number (fixed, must be AAh=Lead-out)
+  8    POINT = D1h (Identifies a Multisession lead-out)
+  24   Usually zero (or maybe ATIP as in Lead-In with Point=C0h...?)
+  8    Seems to be the session number?
+  24   MM:SS:FF = Absolute address of the First data sector of the session
+
+Present in 3 consequtive sectors (3x ADR=1, 3x ADR=5, 3x ADR=1, 3x ADR=5, etc).

+

Subchannel Q with ADR=5 in Lead-in -- CDR/CDRW Skip Info (Audio Only)

+

When Point=01h..40h:
+

  8    Track number (fixed, must be 00h=Lead-in)
+  8    POINT=01h..40h (This identifies a specific playback skip interval)
+  24   MM:SS:FF Skip interval stop time in 6 BCD digits
+  8    Reserved (must be 00h)
+  24   MM:SS:FF Skip interval start time in 6 BCD digits
+
+When Point=B1h:
+
  8    Track number (fixed, must be 00h=Lead-in)
+  8    POINT=B1h (Audio only: This identifies the presence of skip intervals)
+  8x4  Reserved (must be 00h,00h,00h,00h)
+  8    the number of skip interval pointers in POINT=01h..40h
+  8    the number of skip track assignments in POINT=B2h..B4h
+  8    Reserved (must be 00h)
+
+When Point=B2h,B3h,B4h:
+
  8    Track number (fixed, must be 00h=Lead-in)
+  8    POINT=B2h,B3h,B4h (This identifies tracks that should be skipped)
+  8    1st Track number to skip upon playback (01h..99h, must be nonzero)
+  8    2nd Track number to skip upon playback (01h..99h, or 00h=None)
+  8    3rd Track number to skip upon playback (01h..99h, or 00h=None)
+  8    Reserved (must be 00h)... unclear... OR... 4th (of 7) skip info's...?
+  8    4th Track number to skip upon playback (01h..99h, or 00h=None)
+  8    5th Track number to skip upon playback (01h..99h, or 00h=None)
+  8    6th Track number to skip upon playback (01h..99h, or 00h=None)
+
+Note: Skip intervals are seldom written by recorders and typically ignored by +readers.

+

Subchannel R..W

+

Subchannels R..W are usually unused, except for some extended formats:
+

  CD-TEXT in the Lead-In area (see below)
+  CD-TEXT in the Data area    (rarely used)
+  CD plus Graphics (CD+G)     (rarely used)
+
+Most CDROM drives do not allow to read these subchannels. CD-TEXT was designed +by Sony and Philips in 1997, so it should be found only on (some) newer discs. +Most CD/DVD players don't support it (the only exception is that CD-TEXT seems +to be popular for car hifi equipment). Most record labels don't support +CD-TEXT, even Sony seems to have discontinued it on their own records after +some years (so CD-TEXT is very rare on original disks, however, CDR software +does often allow to write CD-TEXT on CDRs).

+

Subchannel R..W, when used for CD-TEXT in the Lead-In area

+

CD-TEXT is stored in the six Subchannels R..W. Of the 12.25 bytes (98 bits) per +subchannel, only 12 bytes are used. Together, all 6 subchannels have a capacity +of 72 bytes (6x12 bytes) per sector. These 72 bytes are divided into four +CD-TEXT fragments (of 18 bytes each). The format of these 18 bytes is:
+

  00h 1  Header Field ID1: Pack Type Indicator
+  01h 1  Header Field ID2: Track Number
+  02h 1  Header Field ID3: Sequence Number
+  03h 1  Header Field ID4: Block Number and Character Position Indicator
+  04h 12 Text/Data Field
+  10h 2  CRC-16-CCITT (big-endian) (across bytes 00h..0Fh)
+
+ID1 - Pack Type Indicator:
+
  80h   Titel      (TEXT)
+  81h   Performer  (TEXT)
+  82h   Songwriter (TEXT)
+  83h   Composer   (TEXT)
+  84h   Arranger   (TEXT)
+  85h   Message    (TEXT)
+  86h   Disc ID    (TEXT?)  (content/format/purpose unknown?)
+  87h   Genre      (BINARY) (ID codes unknown?)
+  88h   TOC        (BINARY) (content/format/purpose unknown?)
+  89h   TOC2       (BINARY) (content/format/purpose unknown?)
+  8Ah   Reserved for future
+  8Bh   Reserved for future
+  8Ch   Reserved for future
+  8Dh   Reserved for "content provider" aka "closed information"
+  8Eh   UPC/EAN and ISRC Codes (TEXT) (content/format/purpose unknown?)
+  8Fh   Blocksize (BINARY) (see below)
+
+ID2 - Track Number:
+
  00h       Title/Performer/etc. for the Disc
+  01h..63h  Title/Performer/etc. for Track 1..99 (Non-BCD) (Bit7=Extension)
+
+ID3 - Sequence Number:
+
  00h..FFh  Incrementing Number (00h=First 18-byte fragment, 01h=Second, etc.)
+
+ID4 - Block Number and Character Position Indicator:
+
  Bit7      Character Set      (0=8bit, 1=16bit)
+  Bit6-4    Block Number       (0..7 = Language number, as set by "Blocksize")
+  Bit3-0    Character Position (0..0Eh=Position, 0Fh=Append to prev fragment)
+
+Example Data (generated with CDRWIN):
+
  ID TR SQ CH <------------Text/Data------------> -CRC-  <---Text--->
+  80 00 00 00 54 65 73 74 44 69 73 6B 54 69 74 6C E2 22  TestDiskTitl
+  80 00 01 0C 65 00 54 65 73 74 54 72 61 63 6B 54 C9 1B  e.TestTrackT
+  80 01 02 0A 69 74 6C 65 31 00 54 65 73 74 54 72 40 3A  itle1.TestTr
+  80 02 03 06 61 63 6B 54 69 74 6C 65 32 00 00 00 80 E3  ackTitle2...
+  81 00 04 00 54 65 73 74 44 69 73 6B 50 65 72 66 03 DF  TestDiskPerf
+  81 00 05 0C 6F 72 6D 65 72 00 54 65 73 74 54 72 12 A5  ormer.TestTr
+  81 01 06 06 61 63 6B 50 65 72 66 6F 72 6D 65 72 BC 5B  ackPerformer
+  81 01 07 0F 31 00 54 65 73 74 54 72 61 63 6B 50 AC 41  1.TestTrackP
+  81 02 08 0A 65 72 66 6F 72 6D 65 72 32 00 00 00 64 1A  erformer2...
+  8F 00 09 00 01 01 02 00 04 05 00 00 00 00 00 00 6D E2  ............
+  8F 01 0A 00 00 00 00 00 00 00 00 03 0B 00 00 00 CD 0C  ............
+  8F 02 0B 00 00 00 00 00 09 00 00 00 00 00 00 00 FC 8C  ............
+  00   ;<--- for some reason, CDRWIN stores an ending 00h byte in .CDT files
+
+Each Text string is terminated by a 00h byte (or 0000h for 16bit character +set). If there's still room in the 12-byte data region, then first characters +for the next Text string (for the next track) are appended after the 00h byte +(if there's no further track, then the remaining bytes should be padded with +00h).
+The "Blocksize" (ID1=8Fh) consists of three packs with 24h bytes of data (first +0Ch bytes stored with ID2=00h, next 0Ch bytes with ID2=01h, and last 0Ch bytes +with ID2=02h):
+
  00h  1   Character set (00h,01h,80h,81h,82h = see below)
+  01h  1   First track number (usually/always 01h)
+  02h  1   Last track number (01h..63h)
+  03h  1   1bit-cd-text-in-data-area-flag, 7bit-copy-protection-flags
+  04h  16  Number of 18-byte packs for ID1=80h..8Fh
+  14h  8   Last sequence number of block 0..7 (or 00h=none)
+  1Ch  8   Language codes for block 0..7 (definitions are unknown)
+
+Character Set values (for ID1=8Fh, ID2=00h, DATA[0]=charset):
+
  00h ISO 8859-1
+  01h ISO 646, ASCII
+  80h MS-JIS
+  81h Korean character code
+  82h Mandarin (standard) Chinese character code
+  Other = reserved
+
+"In case the same character stings is used for consecutive tracks, character +09h (or 0909h for 16bit charset) may be used to indicate the same as previous +track. It shall not used for the first track."

+

adjust_crc_16_ccitt(addr_len) ;for CD-TEXT and Subchannel Q

+
  lsb=00h, msb=00h      ;-initial value (zero for both CD-TEXT and Sub-Q)
+  for i=0 to len-1      ;-len (10h for CD-TEXT, 0Ah for Sub-Q)
+    x = [addr+i] xor msb
+    x = x xor (x shr 4)
+    msb = lsb xor (x shr 3) xor (x shl 4)
+    lsb = x xor (x shl 5)
+  next i
+  [addr+len+0]=msb xor FFh, [addr+len+1]=lsb xor FFh   ;inverted / big-endian
+
+

CDROM Sector Encoding

+

Audio

+
  000h 930h Audio Data (2352 bytes) (LeftLsb,LeftMsb,RightLsb,RightMsb)
+
+

Mode0 (Empty)

+
  000h 0Ch  Sync   (00h,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,00h)
+  00Ch 4    Header (Minute,Second,Sector,Mode=00h)
+  010h 920h Zerofilled
+
+

Mode1 (Original CDROM)

+
  000h 0Ch  Sync   (00h,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,00h)
+  00Ch 4    Header (Minute,Second,Sector,Mode=01h)
+  010h 800h Data (2048 bytes)
+  810h 4    EDC (checksum across [000h..80Fh])
+  814h 8    Zerofilled
+  81Ch 114h ECC (error correction codes)
+
+

Mode2/Form1 (CD-XA)

+
  000h 0Ch  Sync   (00h,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,00h)
+  00Ch 4    Header (Minute,Second,Sector,Mode=02h)
+  010h 4    Sub-Header (File, Channel, Submode AND DFh, Codinginfo)
+  014h 4    Copy of Sub-Header
+  018h 800h Data (2048 bytes)
+  818h 4    EDC (checksum across [010h..817h])
+  81Ch 114h ECC (error correction codes)
+
+

Mode2/Form2 (CD-XA)

+
  000h 0Ch  Sync   (00h,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,00h)
+  00Ch 4    Header (Minute,Second,Sector,Mode=02h)
+  010h 4    Sub-Header (File, Channel, Submode OR 20h, Codinginfo)
+  014h 4    Copy of Sub-Header
+  018h 914h Data (2324 bytes)
+  92Ch 4    EDC (checksum across [010h..92Bh]) (or 00000000h if no EDC)
+
+

encode_sector

+
  sector[000h]=00h,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,00h
+  sector[00ch]=bcd(adr/75/60)      ;0..7x
+  sector[00dh]=bcd(adr/75 MOD 60)  ;0..59
+  sector[00eh]=bcd(adr MOD 75)     ;0..74
+  sector[00fh]=mode
+  if mode=00h then
+    sector[010h..92Fh]=zerofilled
+  if mode=01h then
+    adjust_edc(sector+0, 800h+10h)
+    sector[814h..817h]=00h,00h,00h,00h,00h,00h,00h,00h
+    calc_p_parity(sector)
+    calc_q_parity(sector)
+  if mode=02h and form=1
+    sector[012h]=sector[012h] AND (NOT 20h)  ;indicate not form2
+    sector[014h..017h]=sector[010h..013h]    ;copy of sub-header
+    adjust_edc(sector+10h,800h+8)
+    push sector[00ch]           ;\temporarily clear header
+    sector[00ch]=00000000h      ;/
+    calc_p_parity(sector)
+    calc_q_parity(sector)
+    pop sector[00ch]            ;-restore header
+  if mode=02h and form=2
+    sector[012h]=sector[012h] OR 20h         ;indicate form2
+    sector[014h..017h]=sector[010h..013h]    ;copy of sub-header
+    adjust_edc(sector+10h,914h+8)            ;edc is optional for form2
+
+

calc_parity(sector,offs,len,j0,step1,step2)

+

  src=00ch, dst=81ch+offs, srcmax=dst
+  for i=0 to len-1
+    base=src, x=0000h, y=0000h
+    for j=j0 to 42
+      x=x xor GF8_PRODUCT[j,sector[src+0]]
+      y=y xor GF8_PRODUCT[j,sector[src+1]]
+      src=src+step1, if (step1=2*44) and (src>=srcmax) then src=src-2*1118
+    sector[dst+2*len+0]=x AND 0FFh, [dst+0]=x SHR 8
+    sector[dst+2*len+1]=y AND 0FFh, [dst+1]=y SHR 8
+    dst=dst+2, src=base+step2
+
+calc_p_parity(sector) = calc_parity(sector,0,43,19,2*43,2)
+calc_q_parity(sector) = calc_parity(sector,43*4,26,0,2*44,2*43)

+

adjust_edc(addr,len)

+
  x=00000000h
+  for i=0 to len-1
+    x=x xor byte[addr+i], x=(x shr 8) xor edc_table[x and FFh]
+  word[addr+len]=x  ;append EDC value (little endian)
+
+

init_tables

+
  for i=0 to FFh
+    x=i, for j=0 to 7, x=x shr 1, if carry then x=x xor D8018001h
+    edc_table[i]=x
+  GF8_LOG[00h]=00h, GF8_ILOG[FFh]=00h, x=01h
+  for i=00h to FEh
+    GF8_LOG[x]=i, GF8_ILOG[i]=x
+    x=x SHL 1, if carry8bit then x=x xor 1dh
+  for j=0 to 42
+    xx=GF8_ILOG[44-j],  yy=subfunc(xx xor 1,19h)
+    xx=subfunc(xx,01h), xx=subfunc(xx xor 1,18h)
+    xx=GF8_LOG[xx], yy = GF8_LOG[yy]
+    GF8_PRODUCT[j,0]=0000h
+    for i=01h to FFh
+      x=xx+GF8_LOG[i], if x>=255 then x=x-255
+      y=yy+GF8_LOG[i], if y>=255 then y=y-255
+      GF8_PRODUCT[j,i]=GF8_ILOG[x]+(GF8_ILOG[y] shl 8)
+
+

subfunc(a,b)

+
  if a>0 then
+    a=GF8_LOG[a]-b, if a<0 then a=a+255
+    a=GF8_ILOG[a]
+  return(a)
+
+

CDROM Scrambling

+

Scrambling

+

Scambling does XOR the data sectors with random values (done to avoid regular +patterns). The scrambling is applied to Data sector bytes[00Ch..92Fh] (not to +CD-DA audio sectors, and not to the leading 12-byte Sync mark in Data sectors).
+The (de-)scrambling is done automatically by the CDROM controller, so disc +images should usually contain unscrambled data (there are some exceptions such +like CD-i discs that have audio and data sectors mixed inside of the same +track; which may confuse the CDROM controller about whether or not to apply +scrambling to which sectors; so one may need to manually XOR the faulty sectors +in the disc image).
+The scrambling pattern is derived from a 15bit polynomial counter (much like a +noise generator in sound chips). The data bits are XORed with the counters low +bit, and the counters lower 2bit are XORed with each other, and shifted in to +the counters upper bit. To compute 8 bits and once, and store them in a +924h-byte table:
+

  poly=0001h  ;init 15bit polynomial counter
+  for i=0 to 924h-1
+    scramble_table[i]=poly AND FFh
+    poly=(((poly XOR poly/2) AND 0FFh)*80h) XOR (poly/100h)
+  next i
+
+The resulting table content should be:
+
  01h,80h,00h,60h,00h,28h,00h,1Eh,80h,08h,60h,06h,A8h,02h,FEh,81h,
+  80h,60h,60h,28h,28h,1Eh,9Eh,88h,68h,66h,AEh,AAh,FCh,7Fh,01h,E0h,
+  etc.
+
+After scrambling, the data is reportedly "shuffled and byte-swapped". Unknown +what shuffling means. And unknown what/where/why byte-swapping is done (it does +reportedly swap each two bytes in the whole(?) 930h-byte (data-?) sector; which +might date back to different conventions for disc images to contain "16bit +audio samples" in big- or little-endian format).

+

CDROM XA Subheader, File, Channel, Interleave

+

The Sub-Header for normal data sectors is usually 00h,00h,08h,00h (some PSX +sectors have 09h instead 08h, indicating the end of "something" or so?

+

1st Subheader byte - File Number (FN)

+
  0-7 File Number    (00h..FFh) (for Audio/Video Interleave, see below)
+
+

2nd Subheader byte - Channel Number (CN)

+

  0-4 Channel Number (00h..1Fh) (for Audio/Video Interleave, see below)
+  5-7 Should be always zero
+
+Whilst not officially allowed, PSX Ace Combat 3 Electrosphere does use +Channel=FFh for unused gaps in interleaved streaming sectors.

+

3rd Subheader byte - Submode (SM)

+

  0   End of Record (EOR) (all Volume Descriptors, and all sectors with EOF)
+  1   Video     ;\Sector Type (usually ONE of these bits should be set)
+  2   Audio     ; Note: PSX .STR files are declared as Data (not as Video)
+  3   Data      ;/
+  4   Trigger           (for application use)
+  5   Form2             (0=Form1/800h-byte data, 1=Form2, 914h-byte data)
+  6   Real Time (RT)
+  7   End of File (EOF) (or end of Directory/PathTable/VolumeTerminator)
+
+The EOR bit is set in all Volume Descriptor sectors, the last sector (ie. the +Volume Descriptor Terminator) additionally has the EOF bit set. Moreover, EOR +and EOF are set in the last sector of each Path Table, and last sector of each +Directory, and last sector of each File.

+

4th Subheader byte - Codinginfo (CI)

+

When used for Data sectors:
+

  0-7 Reserved (00h)
+
+When used for XA-ADPCM audio sectors:
+
  0-1 Mono/Stereo     (0=Mono, 1=Stereo, 2-3=Reserved)
+  2-2 Sample Rate     (0=37800Hz, 1=18900Hz, 2-3=Reserved)
+  4-5 Bits per Sample (0=Normal/4bit, 1=8bit, 2-3=Reserved)
+  6   Emphasis        (0=Normal/Off, 1=Emphasis)
+  7   Reserved        (0)
+

+

Audio/Video Interleave (Multiple Files/Channels)

+

The CDROM drive mechanics are working best when continously following the data +spiral on the disk, that works fine for uncompressed Audio Data at normal +speed, but compressed Audio Data the disk is spinning much too fast. To avoid +the drive to need to pause reading or to do permanent backwards seeking, CD-XA +allows to store data interleaved in separate files/channels. With common +interleave values like so:
+

  Interleave   Data Format
+  1/1 (none)   44100Hz Stereo CD Audio at normal speed
+  1/8          37800Hz Stereo ADPCM compressed Audio at double speed
+  1/16         18900Hz Stereo ADPCM compressed Audio at double speed
+  1/16         37800Hz Mono   ADPCM compressed Audio at double speed
+  1/32         18900Hz Mono   ADPCM compressed Audio at double speed
+  7/8          15fps 320x224 pixel MDEC compressed Videos at double speed
+  Unknown if 1/16 and 1/32 interleaves are actually possible (the PSX cdrom
+  controller seems to overwrite the IC303 sector buffer entries once every
+  eight sectors, so ADPCM data may get destroyed on interleaves above 1/8).
+  (Crash Team Racing uses 37800Hz Mono at Double speed, so 1/16 must work).
+
+For example, 1/8 means that the controller processes only each 8th sector (each +having the same File Number and Channel Number), and ignores the next 7 sectors +(which must have other File Number and/or other Channel Number). There are +various ways to arrange multiple files or channels, for example,
+
  one file with eight 1/8 audio channels
+  one file with one 1/8 audio channels, plus one 7/8 video channel (*)
+  one file with one 1/8 audio channels, plus 7 unused channels
+  eight different files with one 1/8 audio channel each
+  etc.
+
+(*) If the Audio and Video data belongs together then both should use the SAME +channel.
+Note: Above interleave values are assuming that PSX Game Disks are always +running at double speed (that's fastest for normal data files, and ADPCM files +are usually using the same speed; otherwise it'd be neccessary to change the +drive speed everytime when switching between Data to ADPCM modes).
+Note: The file/channel numbers can be somehow selected with the Setfilter +command. No idea if the controller is automatically switching to the next +channel or so when reaching the end of the file?

+

Unused sectors in Interleave

+

There are different ways to mark unused sectors in interleaved streams. Ace +Combat 3 uses Channel=FFh=Invalid. Tron Bonne uses Submode=00h=Nothing +(notably, that game has a 74Mbyte XA file that leaves about 75% unused).
+

  Subheader bytes: 01h,FFh,64h,01h   ;Ace Combat 3 Electrosphere
+  Subheader bytes: 01h,00h,00h,00h   ;Misadventures of Tron Bonne (XA\*.XA)
+

+

Real Time Streaming

+

With the above Interleave, files can be played continously at real time - that, +unless read-errors do occur. In that case the drive controller would usually +perform time-consuming error-correction and/or read-retries. For video/audio +streaming the resulting delay would be tendencially more annoying as than +processing or skipping the incorrect data.
+In such cases the drive controller is allowed to ignore read errors; that +probably on sectors that have the Real Time (RT) flag set in their subheaders. +The controller is probably doing some read-ahead buffering (so, if it has +buffered enough data, then it may still perform read retries and/or error +correction, as long as it doesn't affect real time playback).

+

CDROM XA Audio ADPCM Compression

+

CD-ROM XA ADPCM is used for Audio data compression. Each 16bit sample is +encoded in 4bit nibbles; so the compression rate is almost 1:4 (only almost 1:4 +because there are 16 header bytes within each 128-byte portion). The data is +usually/always stored on 914h-byte sectors (without error correction).

+

Subheader

+

The Subheader (see previous chapter) contains important info for ADPCM: The +file/channel numbers for Interleaved data, and the codinginfo flags: +mono/stereo flag, 37800Hz/18900Hz sampling rate, 4bit/8bit format, and +emphasis.

+

ADPCM Sectors

+

Each sector consists of 12h 128-byte portions (=900h bytes) (the remaining 14h +bytes of the sectors 914h-byte data region are 00h filled).
+The separate 128-byte portions consist of a 16-byte header,
+

  00h..03h  Copy of below 4 bytes (at 04h..07h)
+  04h       Header for 1st Block/Mono, or 1st Block/Left
+  05h       Header for 2nd Block/Mono, or 1st Block/Right
+  06h       Header for 3rd Block/Mono, or 2nd Block/Left
+  07h       Header for 4th Block/Mono, or 2nd Block/Right
+  08h       Header for 5th Block/Mono, or 3rd Block/Left  ;\unknown/unused
+  09h       Header for 6th Block/Mono, or 3rd Block/Right ; for 8bit ADPCM
+  0Ah       Header for 7th Block/Mono, or 4th Block/Left  ; (maybe 0, or maybe
+  0Bh       Header for 8th Block/Mono, or 4th Block/Right ;/copy of above)
+  0Ch..0Fh  Copy of above 4 bytes (at 08h..0Bh)
+
+followed by twentyeight data words (4x28-bytes),
+
  10h..13h  1st Data Word (packed 1st samples for 2-8 blocks)
+  14h..17h  2nd Data Word (packed 2nd samples for 2-8 blocks)
+  18h..1Bh  3rd Data Word (packed 3rd samples for 2-8 blocks)
+  ...       Nth Data Word (packed Nth samples for 2-8 blocks)
+  7Ch..7Fh  28th Data Word (packed 28th samples for 2-8 blocks)
+
+and then followed by the next 128-byte portion.
+The "Copy" bytes are allowing to repair faulty headers (ie. if the CDROM +controller has sensed a read-error in the header then it can eventually replace +it by the copy of the header).

+

XA-ADPCM Header Bytes

+

  0-3   Shift  (0..12) (0=Loudest) (13..15=Reserved/Same as 9)
+  4-5   Filter (0..3) (only four filters, unlike SPU-ADPCM which has five)
+  6-7   Unused (should be 0)
+
+Note: The 4bit (or 8bit) samples are expanded to 16bit by left-shifting them by +12 (or 8), that 16bit value is then right-shifted by the selected 'shift' +amount. For 8bit ADPCM shift should be 0..8 (values 9..12 will cut-off the +LSB(s) of the 8bit value, this works, but isn't useful). For both 4bit and 8bit +ADPCM, reserved shift values 13..15 will act same as shift=9).

+

XA-ADPCM Data Words (32bit, little endian)

+

  0-3   Nibble for 1st Block/Mono, or 1st Block/Left  (-8h..+7h)
+  4-7   Nibble for 2nd Block/Mono, or 1st Block/Right (-8h..+7h)
+  8-11  Nibble for 3rd Block/Mono, or 2nd Block/Left  (-8h..+7h)
+  12-15 Nibble for 4th Block/Mono, or 2nd Block/Right (-8h..+7h)
+  16-19 Nibble for 5th Block/Mono, or 3rd Block/Left  (-8h..+7h)
+  20-23 Nibble for 6th Block/Mono, or 3rd Block/Right (-8h..+7h)
+  24-27 Nibble for 7th Block/Mono, or 4th Block/Left  (-8h..+7h)
+  28-31 Nibble for 8th Block/Mono, or 4th Block/Right (-8h..+7h)
+
+or, for 8bit ADPCM format:
+
  0-7   Byte for 1st Block/Mono, or 1st Block/Left    (-80h..+7Fh)
+  8-15  Byte for 2nd Block/Mono, or 1st Block/Right   (-80h..+7Fh)
+  16-23 Byte for 3rd Block/Mono, or 2nd Block/Left    (-80h..+7Fh)
+  24-31 Byte for 4th Block/Mono, or 2nd Block/Right   (-80h..+7Fh)
+

+

decode_sector(src)

+
  src=src+12+4+8   ;skip sync,header,subheader
+  for i=0 to 11h
+   for blk=0 to 3
+    IF stereo ;left-samples (LO-nibbles), plus right-samples (HI-nibbles)
+      decode_28_nibbles(src,blk,0,dst_left,old_left,older_left)
+      decode_28_nibbles(src,blk,1,dst_right,old_right,older_right)
+    ELSE      ;first 28 samples (LO-nibbles), plus next 28 samples (HI-nibbles)
+      decode_28_nibbles(src,blk,0,dst_mono,old_mono,older_mono)
+      decode_28_nibbles(src,blk,1,dst_mono,old_mono,older_mono)
+    ENDIF
+   next blk
+   src=src+128
+  next i
+  src=src+14h+4    ;skip padding,edc
+
+

decode_28_nibbles(src,blk,nibble,dst,old,older)

+
  shift  = 12 - (src[4+blk*2+nibble] AND 0Fh)
+  filter =      (src[4+blk*2+nibble] AND 30h) SHR 4
+  f0 = pos_xa_adpcm_table[filter]
+  f1 = neg_xa_adpcm_table[filter]
+  for j=0 to 27
+    t = signed4bit((src[16+blk+j*4] SHR (nibble*4)) AND 0Fh)
+    s = (t SHL shift) + ((old*f0 + older*f1+32)/64);
+    s = MinMax(s,-8000h,+7FFFh)
+    halfword[dst]=s, dst=dst+2, older=old, old=s
+  next j
+
+

Pos/neg Tables

+

  pos_xa_adpcm_table[0..4] = (0, +60, +115, +98, +122)
+  neg_xa_adpcm_table[0..4] = (0,   0,  -52, -55,  -60)
+
+Note: XA-ADPCM supports only four filters (0..3), unlike SPU-ADPCM which +supports five filters (0..4).

+

Old/Older Values

+

The incoming old/older values are usually that from the previous part, or +garbage (in case of decoding errors in the previous part), or whatever (in case +there was no previous part) (ie. maybe zero on power-up?) (and maybe there's +also a way to reset the values to zero at the begin of a new file, or *maybe* +it's silently done automatically when issuing seek commands?).

+

25-point Zigzag Interpolation

+

The CDROM decoder is applying some weird 25-point zigzag interpolation when +resampling the 37800Hz XA-ADPCM output to 44100Hz. This part is different from +SPU-ADPCM (which uses 4-point gaussian pitch interpolations). For example, +XA-ADPCM interpolation applied to a square wave looks like this:
+

                                                 .            .
+           .--------------.                      | |        | |
+           |              |                     .'.'.'----'.'.'.
+           |              |                     | |          | |
+           |              |                     |              |
+           | Decompressed |                     |    Final     |
+           |   XA-ADPCM   |                     |   XA-ADPCM   |
+           |   Waveform   |                     |    Output    |
+           |              |                   | |              | |
+           |              |             ---.'.'.'              '.'.'.---
+   --------'              '--------          | |                | |
+                                               '                '
+
+The zigzagging does produce some (inaudible) 22050Hz noise, and does produce +some low-pass (?) filtering ("sinc filter"). The effect can be reproduced +somewhat like so:
+
<B>  Output37800Hz(sample):</B>
+    ringbuf[p AND 1Fh]=sample, p=p+1, sixstep=sixstep-1
+    if sixstep=0
+      sixstep=6
+      Ouput44100Hz(ZigZagInterpolate(p,Table1))
+      Ouput44100Hz(ZigZagInterpolate(p,Table2))
+      Ouput44100Hz(ZigZagInterpolate(p,Table3))
+      Ouput44100Hz(ZigZagInterpolate(p,Table4))
+      Ouput44100Hz(ZigZagInterpolate(p,Table5))
+      Ouput44100Hz(ZigZagInterpolate(p,Table6))
+      Ouput44100Hz(ZigZagInterpolate(p,Table7))
+    endif
+<B>  ZigZagInterpolate(p,TableX):</B>
+    sum=0
+    for i=1 to 29, sum=sum+(ringbuf[(p-i) AND 1Fh]*TableX[i])/8000h, next i
+    return MinMax(sum,-8000h,+7FFFh)
+<B>  Table1, Table2, Table3, Table4, Table5, Table6, Table7  ;Index</B>
+    0     , 0     , 0     , 0     , -0001h, +0002h, -0005h  ;1
+    0     , 0     , 0     , -0001h, +0003h, -0008h, +0011h  ;2
+    0     , 0     , -0001h, +0003h, -0008h, +0010h, -0023h  ;3
+    0     , -0002h, +0003h, -0008h, +0011h, -0023h, +0046h  ;4
+    0     , 0     , -0002h, +0006h, -0010h, +002Bh, -0017h  ;5
+    -0002h, +0003h, -0005h, +0005h, +000Ah, +001Ah, -0044h  ;6
+    +000Ah, -0013h, +001Fh, -001Bh, +006Bh, -00EBh, +015Bh  ;7
+    -0022h, +003Ch, -004Ah, +00A6h, -016Dh, +027Bh, -0347h  ;8
+    +0041h, -004Bh, +00B3h, -01A8h, +0350h, -0548h, +080Eh  ;9
+    -0054h, +00A2h, -0192h, +0372h, -0623h, +0AFAh, -1249h  ;10
+    +0034h, -00E3h, +02B1h, -05BFh, +0BCDh, -16FAh, +3C07h  ;11
+    +0009h, +0132h, -039Eh, +09B8h, -1780h, +53E0h, +53E0h  ;12
+    -010Ah, -0043h, +04F8h, -11B4h, +6794h, +3C07h, -16FAh  ;13
+    +0400h, -0267h, -05A6h, +74BBh, +234Ch, -1249h, +0AFAh  ;14
+    -0A78h, +0C9Dh, +7939h, +0C9Dh, -0A78h, +080Eh, -0548h  ;15
+    +234Ch, +74BBh, -05A6h, -0267h, +0400h, -0347h, +027Bh  ;16
+    +6794h, -11B4h, +04F8h, -0043h, -010Ah, +015Bh, -00EBh  ;17
+    -1780h, +09B8h, -039Eh, +0132h, +0009h, -0044h, +001Ah  ;18
+    +0BCDh, -05BFh, +02B1h, -00E3h, +0034h, -0017h, +002Bh  ;19
+    -0623h, +0372h, -0192h, +00A2h, -0054h, +0046h, -0023h  ;20
+    +0350h, -01A8h, +00B3h, -004Bh, +0041h, -0023h, +0010h  ;21
+    -016Dh, +00A6h, -004Ah, +003Ch, -0022h, +0011h, -0008h  ;22
+    +006Bh, -001Bh, +001Fh, -0013h, +000Ah, -0005h, +0002h  ;23
+    +000Ah, +0005h, -0005h, +0003h, -0001h, 0     , 0       ;24
+    -0010h, +0006h, -0002h, 0     , 0     , 0     , 0       ;25
+    +0011h, -0008h, +0003h, -0002h, +0001h, 0     , 0       ;26
+    -0008h, +0003h, -0001h, 0     , 0     , 0     , 0       ;27
+    +0003h, -0001h, 0     , 0     , 0     , 0     , 0       ;28
+    -0001h, 0     , 0     , 0     , 0     , 0     , 0       ;29
+
+The above formula/table gives nearly correct results, but with small rounding +errors in some cases - possibly due to actual rounding issues, or due to +factors with bigger fractional portions, or due to a completely different +formula...
+Probably, the hardware does actually do the above stuff in two steps: first, +applying a zig-zag filter (with only around 21-points) to the 37800Hz output, +and then doing 44100Hz interpolation (2-point linear or 4-point gaussian or +whatever) in a second step.
+That two-step theory would also match well for 18900Hz resampling (which has +lower-pitch zigzag, and gets spread across about fifty 44100Hz samples).

+

XA-ADPCM Emphasis

+

With XA-Emphasis enabled in Sub-header, output will appear as so:
+

           .------------.                           ....-----.
+           |            |                        .''         |
+           |    Raw     |                       .'    XA     |
+           |   ADPCM    |                       |  Emphasis  '.
+           |  Waveform  |                       |   Output    '..
+   --------'            '----------     --------'                ''''---
+
+The exact XA-Emphasis formula is unknown (maybe it's just same as for CD-DA's +SUBQ emphasis). Additionally, zig-zag interpolation is applied (somewhere +before or after applying the emphasis stuff).
+Note: The Emphasis feature isn't used by any known PSX games.

+

Uninitialized Six-step Counter

+

The hardware does contain some six-step counter (for interpolating 37800Hz to +44100Hz, ie. to insert one extra sample after each six samples). The 900h-byte +sectors contain a multiple of six samples, so the counter will be always same +before & after playing a sector. However, the initial counter value on +power-up is uninitialized random (and the counter will fallback to that initial +random setting after each 900h-byte sector).

+

RIFF Headers (on PCs)

+

When reading files that consist of 914h-byte sectors on a PC, the PC seems to +automatically insert a 2Ch-byte RIFF fileheader. Like so, for ADPCM audio +files:
+

  00h 4   "RIFF"
+  04h 4   Total Filesize (minus 8)
+  08h 8   "CDXAfmt "
+  10h 4   Size of below stuff (10h)
+  14h 14  Stuff (looks like the "LEN_SU" region from XA-Directory Record)
+  22h 2   Zero  (probably just dummy padding for 32bit alignment)
+  24h 4   "data"
+  28h 4   Size of following data (usually N*930h)
+
+That RIFF stuff isn't stored on the CDROM (at least not in the file area) +(however, some of that info, like the "=UXA" stuff, is stored in the directory +area of the CDROM).
+After the RIFF header, the normal sector data is appended, that, with the full +930h bytes per sector (ie. the 914h data bytes preceeded by sync bytes, header, +subheader, and followed by the EDC value).
+The Channel Interleave doesn't seem to be resolved, ie. the Channels are kept +arranged as how they are stored on the CDROM. However, File Interleave +\<should> be resolved, ie. other Files that "overlap" the file shouldn't +be included in the file.

+

CDROM ISO Volume Descriptors

+

System Area (prior to Volume Descriptors)

+

The first 16 sectors on the first track are the system area, for a Playstation +disk, it contains the following:
+

  Sector 0..3   - Zerofilled (Mode2/Form1, 4x800h bytes, plus ECC/EDC)
+  Sector 4      - Licence String
+  Sector 5..11  - Playstation Logo (3278h bytes) (remaining bytes FFh-filled)
+  Sector 12..15 - Zerofilled (Mode2/Form2, 4x914h bytes, plus EDC)
+
+Of which, the Licence String in sector 4 is,
+
  000h 32    Line 1      ("          Licensed  by          ")
+  020h 32+6  Line 2 (EU) ("Sony Computer Entertainment Euro"," pe   ") ;\either
+  020h 32+1  Line 2 (JP) ("Sony Computer Entertainment Inc.",0Ah)      ; one of
+  020h 32+6  Line 2 (US) ("Sony Computer Entertainment Amer","  ica ") ;/these
+  041h 1983  Empty (JP)    (filled by repeating pattern 62x30h,1x0Ah, 1x30h)
+  046h 1978  Empty (EU/US) (filled by 00h-bytes)
+
+The Playstation Logo in sectors 5..11 contains data like so,
+
  0000h ..   41h,00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,1Ch,23h,00h,00h
+  0010h ..   51h,01h,00h,00h,A4h,2Dh,00h,00h,99h,00h,00h,00h,1Ch,00h,00h,00h
+  0020h ..   ...
+  3278h 588h FF-filled (remaining bytes on sector 11)
+
+the Logo contains a .TMD header, polygons, vertices and normals for the "PS" +logo (which is displayed when booting from CDROM). Some BIOS versions are +comparing these 3278h bytes against an identical copy in ROM, and refuse to +boot if the data isn't 1:1 the same:
+- NTSC US/ASIA BIOS always accepts changed logos.
+- PAL EU BIOS accepts changed logos up to v3.0E (and refuses in v4.0E and up).
+- NTSC JP BIOS never accepts changed logos (and/or changed license strings?).
+Note: A region-patch-modchip causes PAL BIOS to behave same as US/ASIA BIOS.

+

Volume Descriptors (Sector 16 and up)

+

Playstation disks usually have only two Volume Descriptors,
+

  Sector 16    - Primary Volume Descriptor
+  Sector 17    - Volume Descriptor Set Terminator
+

+

Primary Volume Descriptor (sector 16 on PSX disks)

+
  000h 1    Volume Descriptor Type        (01h=Primary Volume Descriptor)
+  001h 5    Standard Identifier           ("CD001")
+  006h 1    Volume Descriptor Version     (01h=Standard)
+  007h 1    Reserved                      (00h)
+  008h 32   System Identifier             (a-characters) ("PLAYSTATION")
+  028h 32   Volume Identifier             (d-characters) (max 8 chars for PSX?)
+  048h 8    Reserved                      (00h)
+  050h 8    Volume Space Size             (2x32bit, number of logical blocks)
+  058h 32   Reserved                      (00h)
+  078h 4    Volume Set Size               (2x16bit) (usually 0001h)
+  07Ch 4    Volume Sequence Number        (2x16bit) (usually 0001h)
+  080h 4    Logical Block Size in Bytes   (2x16bit) (usually 0800h) (1 sector)
+  084h 8    Path Table Size in Bytes      (2x32bit) (max 800h for PSX)
+  08Ch 4    Path Table 1 Block Number     (32bit little-endian)
+  090h 4    Path Table 2 Block Number     (32bit little-endian) (or 0=None)
+  094h 4    Path Table 3 Block Number     (32bit big-endian)
+  098h 4    Path Table 4 Block Number     (32bit big-endian) (or 0=None)
+  09Ch 34   Root Directory Record         (see next chapter)
+  0BEh 128  Volume Set Identifier         (d-characters) (usually empty)
+  13Eh 128  Publisher Identifier          (a-characters) (company name)
+  1BEh 128  Data Preparer Identifier      (a-characters) (empty or other)
+  23Eh 128  Application Identifier        (a-characters) ("PLAYSTATION")
+  2BEh 37   Copyright Filename            ("FILENAME.EXT;VER") (empty or text)
+  2E3h 37   Abstract Filename             ("FILENAME.EXT;VER") (empty)
+  308h 37   Bibliographic Filename        ("FILENAME.EXT;VER") (empty)
+  32Dh 17   Volume Creation Timestamp     ("YYYYMMDDHHMMSSFF",timezone)
+  33Eh 17   Volume Modification Timestamp ("0000000000000000",00h)
+  34Fh 17   Volume Expiration Timestamp   ("0000000000000000",00h)
+  360h 17   Volume Effective Timestamp    ("0000000000000000",00h)
+  371h 1    File Structure Version        (01h=Standard)
+  372h 1    Reserved for future           (00h-filled)
+  373h 141  Application Use Area          (00h-filled for PSX and VCD)
+  400h 8    CD-XA Identifying Signature   ("CD-XA001" for PSX and VCD)
+  408h 2    CD-XA Flags (unknown purpose) (00h-filled for PSX and VCD)
+  40Ah 8    CD-XA Startup Directory       (00h-filled for PSX and VCD)
+  412h 8    CD-XA Reserved                (00h-filled for PSX and VCD)
+  41Ah 345  Application Use Area          (00h-filled for PSX and VCD)
+  573h 653  Reserved for future           (00h-filled)
+
+

Volume Descriptor Set Terminator (sector 17 on PSX disks)

+
  000h 1    Volume Descriptor Type    (FFh=Terminator)
+  001h 5    Standard Identifier       ("CD001")
+  006h 1    Terminator Version        (01h=Standard)
+  007h 2041 Reserved                  (00h-filled)
+
+

Boot Record (none such on PSX disks)

+
  000h 1    Volume Descriptor Type    (00h=Boot Record)
+  001h 5    Standard Identifier       ("CD001")
+  006h 1    Boot Record Version       (01h=Standard)
+  007h 32   Boot System Identifier    (a-characters)
+  027h 32   Boot Identifier           (a-characters)
+  047h 1977 Boot System Use           (not specified content)
+
+

Supplementary Volume Descriptor (none such on PSX disks)

+

  000h 1    Volume Descriptor Type (02h=Supplementary Volume Descriptor)
+  001h ..   Same as for Primary Volume Descriptor (see there)
+  007h 1    Volume Flags           (8bit)
+  008h ..   Same as for Primary Volume Descriptor (see there)
+  058h 32   Escape Sequences       (32 bytes)
+  078h ..   Same as for Primary Volume Descriptor (see there)
+
+In practice, this is used for Joliet:
+CDROM Extension Joliet

+

Volume Partition Descriptor (none such on PSX disks)

+
  000h 1    Volume Descriptor Type      (03h=Volume Partition Descriptor)
+  001h 5    Standard Identifier         ("CD001")
+  006h 1    Volume Partition Version    (01h=Standard)
+  007h 1    Reserved                    (00h)
+  008h 32   System Identifier           (a-characters) (32 bytes)
+  028h 32   Volume Partition Identifier (d-characters) (32 bytes)
+  048h 8    Volume Partition Location   (2x32bit) Logical Block Number
+  050h 8    Volume Partition Size       (2x32bit) Number of Logical Blocks
+  058h 1960 System Use                  (not specified content)
+
+

Reserved Volume Descriptors (none such on PSX disks)

+
  000h 1    Volume Descriptor Type    (04h..FEh=Reserved, don't use)
+  001h 2047 Reserved                  (don't use)
+
+

CDROM ISO File and Directory Descriptors

+

The location of the Root Directory is described by a 34-byte Directory Record +being located in Primary Volume Descriptor entries 09Ch..0BDh. The data therein +is: Block Number (usually 22 on PSX disks), LEN_FI=01h, Name=00h, and, +LEN_SU=00h (due to the 34-byte limit).

+

Format of a Directory Record

+

  00h 1      Length of Directory Record (LEN_DR) (33+LEN_FI+pad+LEN_SU) (0=Pad)
+  01h 1      Extended Attribute Record Length (usually 00h)
+  02h 8      Data Logical Block Number (2x32bit)
+  0Ah 8      Data Size in Bytes        (2x32bit)
+  12h 7      Recording Timestamp       (yy-1900,mm,dd,hh,mm,ss,timezone)
+  19h 1      File Flags 8 bits         (usually 00h=File, or 02h=Directory)
+  1Ah 1      File Unit Size            (usually 00h)
+  1Bh 1      Interleave Gap Size       (usually 00h)
+  1Ch 4      Volume Sequence Number    (2x16bit, usually 0001h)
+  20h 1      Length of Name            (LEN_FI)
+  21h LEN_FI File/Directory Name ("FILENAME.EXT;1" or "DIR_NAME" or 00h or 01h)
+  xxh 0..1   Padding Field (00h) (only if LEN_FI is even)
+  xxh LEN_SU System Use (LEN_SU bytes) (see below for CD-XA disks)
+
+LEN_SU can be calculated as "LEN_DR-(33+LEN_FI+Padding)". For CD-XA disks (as +used in the PSX), LEN_SU is 14 bytes:
+
  00h 2      Owner ID Group  (whatever, usually 0000h, big endian)
+  02h 2      Owner ID User   (whatever, usually 0000h, big endian)
+  04h 2      File Attributes (big endian):
+               0   Owner Read    (usually 1)
+               1   Reserved      (0)
+               2   Owner Execute (usually 1)
+               3   Reserved      (0)
+               4   Group Read    (usually 1)
+               5   Reserved      (0)
+               6   Group Execute (usually 1)
+               7   Reserved      (0)
+               8   World Read    (usually 1)
+               9   Reserved      (0)
+               10  World Execute (usually 1)
+               11  IS_MODE2        (0=MODE1 or CD-DA, 1=MODE2)
+               12  IS_MODE2_FORM2  (0=FORM1, 1=FORM2)
+               13  IS_INTERLEAVED  (0=No, 1=Yes...?) (by file and/or channel?)
+               14  IS_CDDA         (0=Data or ADPCM, 1=CD-DA Audio Track)
+               15  IS_DIRECTORY    (0=File or CD-DA, 1=Directory Record)
+             Commonly used Attributes are:
+               0D55h=Normal Binary File (with 800h-byte sectors)
+               1555h=Uncommon           (fade to black .DPS and .XA files)
+               2555h=Uncommon           (wipeout .AV files) (MODE1 ??)
+               4555h=CD-DA Audio Track  (wipeout .SWP files, alone .WAV file)
+               3D55h=Streaming File     (ADPCM and/or MDEC or so)
+               8D55h=Directory Record   (parent-, current-, or sub-directory)
+  06h 2      Signature     ("XA")
+  08h 1      File Number   (Must match Subheader's File Number)
+  09h 5      Reserved      (00h-filled)
+
+Directory sectors do usually have zeropadding at the end of each sector:
+
  - Directory sizes are always rounded up to N*800h-bytes.
+  - Directory entries should not cross 800h-byte sector boundaries.
+  There may be further directory entries on the next sector after the padding.
+  To deal with that, skip 00h-bytes until finding a nonzero LEN_DR value (or
+  slightly faster, upon a 00h-byte, directly jump to next sector instead of
+  doing a slow byte-by-byte skip).
+  Note: Padding between sectors does rarely happen on PSX discs because the
+  PSX kernel supports max 800h bytes per directory (one exception is PSX Hot
+  Shots Golf 2, which has an ISO directory with more than 800h bytes; it does
+  use a lookup file instead of actually parsing the while ISO directory).
+
+Names are alphabetically sorted, no matter if the names refer to files or +directories (ie. SUBDIR would be inserted between STRFILE.EXT and SYSFILE.EXT). +The first two entries (with non-ascii names 00h and 01h) are referring to +current and parent directory.

+

Path Tables

+

The Path Table contain a summary of the directory names (the same information +is also stored in the directory records, so programs may either use path tables +or directory records; the path tables are allowing to read the whole directory +tree quickly at once, without neeeding to seek from directory to directory).
+Path Table 1 is in Little-Endian format, Path Table 3 contains the same data in +Big-Endian format. Path Table 2 and 4 are optional copies of Table 1 and 3. The +size and location of the tables is stored in Volume Descriptor entries +084h..09Bh. The format of the separate entries within a Path Table is,
+

  00h 1       Length of Directory Name (LEN_DI) (01h..08h for PSX)
+  01h 1       Extended Attribute Record Length  (usually 00h)
+  02h 4       Directory Logical Block Number
+  06h 2       Parent Directory Number           (0001h and up)
+  08h LEN_DI  Directory Name (d-characters, d1-characters) (or 00h for Root)
+  xxh 0..1    Padding Field (00h) (only if LEN_FI is odd)
+
+The first entry (directory number 0001h) is the root directory, the root +doesn't have a name, nor a parent (the name field contains a 00h byte, rather +than ASCII text, LEN_DI is 01h, and parent is 0001h, making the root it's own +parent; ignoring the fact that incest is forbidden in many countries).
+The next entries (directory number 0002h and up) (if any) are sub-directories +within the root (sorted in alphabetical order, and all having parent=0001h). +The next entries are sub-directories (if any) of the first sub-directory (also +sorted in alphabetical order, and all having parent=0002h). And so on.
+PSX disks usually contain all four tables (usually on sectors 18,19,20,21).

+

Format of an Extended Attribute Record (none such on PSX disks)

+

If present, an Extended Attribute Record shall be recorded over at least one +Logical Block. It shall have the following contents.
+

  00h 4       Owner Identification (numerical value)  ;\used only if
+  04h 4       Group Identification (numerical value)  ; File Flags Bit4=1
+  08h 2       Permission Flags (16bit, little-endian) ;/
+  0Ah 17      File Creation Timestamp      ("YYYYMMDDHHMMSSFF",timezone)
+  1Bh 17      File Modification Timestamp  ("0000000000000000",00h)
+  2Ch 17      File Expiration Timestamp    ("0000000000000000",00h)
+  3Dh 17      File Effective Timestamp     ("0000000000000000",00h)
+  4Eh 1       Record Format                (numerical value)
+  4Fh 1       Record Attributes            (numerical value)
+  50h 4       Record Length                (numerical value)
+  54h 32      System Identifier            (a-characters, a1-characters)
+  74h 64      System Use                   (not specified content)
+  B4h 1       Extended Attribute Record Version (numerical value)
+  B5h 1       Length of Escape Sequences   (LEN_ESC)
+  B6h 64      Reserved for future standardization (00h-filled)
+  F6h 4       Length of Application Use    (LEN_AU)
+  FAh LEN_AU  Application Use
+  xxh LEN_ESC Escape Sequences
+
+Unknown WHERE that data is located... the Directory Records can specify the +Extended Attribute Length, but not the location... maybe it's meant to be +located in the first some bytes or blocks of the File or Directory...?

+

CDROM ISO Misc

+

Both Byte Order

+

All 16bit and 32bit numbers in the ISO region are stored twice, once in +Little-Endian order, and then in Big-Endian Order. For example,
+

  2x16bit value 1234h     ---> stored as 34h,12h,12h,34h
+  2x32bit value 12345678h ---> stored as 78h,56h,34h,12h,12h,34h,56h,78h
+
+Exceptions are the 16bit Permission Flags which are stored only in +Little-Endian format (although the flags are four 4bit groups, so that isn't a +real 16bit number), and, the Path Tables are stored in both formats, but +separately, ie. one table contains only Little-Endian numbers, and the other +only Big-Endian numbers.

+

d-characters (Filenames)

+
  "0..9", "A..Z", and "_"
+
+

a-characters

+

  "0..9", "A..Z", SPACE, "!"%&'()*+,-./:;<=>?_"
+
+Ie. all ASCII characters from 20h..5Fh except "#$@[]^"

+

SEPARATOR 1 = 2Eh (aka ".") (extension; eg. "EXT")
+SEPARATOR 2 = 3Bh (aka ";") (file version; "1".."32767")

+

Fixed Length Strings/Filenames

+

The Volume Descriptors contain a number fixed-length string/filename fields +(unlike the Directory Records and Path Tables which have variable lengths). +These fields should be padded with SPACE characters if they are empty, or if +the string is shorter than the maximum length.
+Filename fields in Volume Descriptors are referring to files in the Root +Directory. On PSX disks, the filename fields are usually empty, but some disks +are mis-using the Copyright Filename to store the Company Name (although no +such file exists on the disk).

+

Volume Descriptor Timestamps

+

The various timestamps occupy 17 bytes each, in form of
+

  "YYYYMMDDHHMMSSFF",timezone
+  "0000000000000000",00h         ;empty timestamp
+
+The first 16 bytes are ASCII Date and Time digits (Year, Month, Day, Hour, +Minute, Second, and 1/100 Seconds. The last byte is Offset from Greenwich Mean +Time in number of 15-minute steps from -48 (West) to +52 (East); or actually: +to +56 when recursing Kiribati's new timezone.
+Note: PSX games manufactured in year 2000 were accidently marked to be created +in year 0000.

+

Recording Timestamps

+

Occupy only 7 bytes, in non-ascii format
+

  year-1900,month,day,hour,minute,second,timezone
+  00h,00h,00h,00h,00h,00h,00h    ;empty timestamp
+
+The year ranges from 1900+0 to 1900+255.

+

File Flags

+

If this Directory Record identifies a directory then bit 2,3,7 shall be set to +ZERO.
+If no Extended Attribute Record is associated with the File Section identified +by this Directory Record then bit positions 3 and 4 shall be set to ZERO.
+

  0  Existence       (0=Normal, 1=Hidden)
+  1  Directory       (0=File, 1=Directory)
+  2  Associated File (0=Not an Associated File, 1=Associated File)
+  3  Record
+        If set to ZERO, shall mean that the structure of the information in
+        the file is not specified by the Record Format field of any associated
+        Extended Attribute Record (see 9.5.8).
+        If set to ONE, shall mean that the structure of the information in
+        the file has a record format specified by a number other than zero in
+        the Record Format Field of the Extended Attribute Record (see 9.5.8).
+  4  Restrictions    (0=None, 1=Restricted via Permission Flags)
+  5  Reserved        (0)
+  6  Reserved        (0)
+  7  Multi-Extent    (0=Final Directory Record for the file, 1=Not final)
+

+

Permission Flags (in Extended Attribute Records)

+

  0-3   Permissions for upper-class owners
+  4-7   Permissions for normal owners
+  8-11  Permissions for upper-class users
+  12-15 Permissions for normal users
+
+This is a bit bizarre, an upper-class owner is "an owner who is a member of a +group of the System class of user". An upper-class user is "any user who is a +member of the group specified by the Group Identification field". The separate +4bit permission codes are:
+
  Bit0  Permission to read the file    (0=Yes, 1=No)
+  Bit1  Must be set (1)
+  Bit2  Permission to execute the file (0=Yes, 1=No)
+  Bit3  Must be set (1)
+

+

CDROM Extension Joliet

+

Typical Joliet Disc Header

+

The discs contains two separate filesystems, the ISO one for backwards +compatibilty, and the Joliet one with longer filenames and Unicode characters.
+

  Sector 16 - Primary Volume Descriptor (with 8bit uppercase ASCII ISO names)
+  Sector 17 - Secondary Volume Descriptor (with 16bit Unicode Joliet names)
+  Sector 18 - Volume Descriptor Set Terminator
+  Sector .. - Path Tables and Directory Records (for ISO)
+  Sector .. - Path Tables and Directory Records (for Joliet)
+  Sector .. - File Data Sectors (shared for ISO and Joliet)
+
+There is no way to determine which ISO name belongs to which Joliet name +(except, filenames do usually point to the same file data sectors, but that +doesn't work for empty files, and doesn't work for folder names).
+The ISO names can be max 31 chars (or shorter for compatibility with DOS short +names: Nero does truncate them to max 14 chars "FILENAME.EXT;1", all uppercase, +with underscores instead of spaces, and somehow assigning names like +"FILENAMx.EXT;1" in case of duplicated short names).

+

Secondary Volume Descriptor (aka Supplementary Volume Descriptor)

+

This is using the same format as ISO Primary Volume Descriptor (but with some +changed entries).
+CDROM ISO Volume Descriptors
+Changed entries are:
+

  000h 1     Volume Descriptor Type (02h=Supplementary instead of 01h=Primary)
+  007h 1     Volume Flags           (whatever, instead of Reserved)
+  008h 2x32  Identifier Strings     (16-char Unicode instead 32-char ASCII)
+  058h 32    Escape Sequences       (see below, instead of Reserved)
+  08Ch 4x4   Path Tables            (point to new tables with Unicode chars)
+  09Ch 34    Root Directory Record  (point to root with Unicode chars)
+  0BEh 4x128 Identifier Strings     (64-char Unicode instead 128-char ASCII)
+  2BEh 3x37  Filename Strings       (18-char Unicode instead 37-char ASCII)
+
+The Escape Sequences entry contains three ASCII chars (plus 29-byte +zeropadding), indicating the ISO 2022 Unicode charset:
+
  %/@   UCS-2 Level 1
+  %/C   UCS-2 Level 2
+  %/E   UCS-2 Level 3
+

+

Directory Records and Path Tables

+

This is using the standard ISO format (but with 16bit Unicode characters +instead of 8bit ASCII chars).
+CDROM ISO File and Directory Descriptors

+

File and Directory Name Characters

+

All characters are stored in 16bit Big Endian format. The LEN_FI filename entry +contains the length in bytes (ie. numchars*2). Charaters 0000h/0001h are +current/parent directory. Characters 0020h and up can be used for +file/directory names, except six reserved characters: */:;?\
+All names must be sorted by their character numbers, padded with zero (without +attempting to merge uppercase, lowercase, or umlauts to nearby locations).

+

File and Directory Name Length

+

  max 64 chars according to original Joliet specs from 1995
+  max 110 chars (on standard CDROMs, with LEN_SU=0)
+  max 103 chars (on CD-XA discs, with LEN_SU=14)
+
+Joliet Filenames include ISO-style version suffices (usually ";1", so the +actual filename lengths are two chars less than shown above).
+The original 64-char limit was perhaps intended to leave space for future +extensions in the LEN_SU region. The 64-char limit can cause problems with +verbose names (eg. "Interprete - Title (version).mp3"). Microsoft later changed +the limit to up to 110 chars.
+The 110/103-char limit is caused by the 8bit "LEN_DR=(33+LEN_FI+pad+LEN_SU)" +entry in the Directory Records.
+Joliet allows to exceed the 8-level ISO directory nesting limit, however, it +doesn't allow to exceed the 240-byte (120-Unicode-char) limit in ISO 9660 +section 6.8.2.1 for the total "path\filename" lengths.

+

Official Specs

+

Joliet Specification, CD-ROM Recording Spec ISO 9660:1988, Extensions for +Unicode Version 1; May 22, 1995, Copyright 1995, Microsoft Corporation
+

  http://littlesvr.ca/isomaster/resources/JolietSpecification.html
+

+

CDROM Protection - SCEx Strings

+

SCEx String

+

The heart of the PSX copy-protection is the four-letter "SCEx" string, encoded +in the wobble signal of original PSX disks, which cannot be reproduced by +normal CD writers. The last letter varies depending on the region:
+

  "SCEI" for Japan
+  "SCEA" for America (and all other NTSC countries except Japan)
+  "SCEE" for Europe (and all other PAL countries like Australia)
+
+If the string is missing (or if it doesn't match up for the local region) then +the PSX refuses to boot. The verification is done by the Firmware inside of the +CDROM Controller (not by the PSX BIOS, so there's no way to bypass it by +patching the BIOS ROM chip).

+

Wobble Groove and Absolute Time in Pregroove (ATIP) on CD-R's

+

A "blank" CDR contains a pre-formatted spiral on it. The number of windings in +the spiral varies depending on the number of minutes that can be recorded on +the disk. The spiral isn't made of a straight line (------), but rather a +wobbled line (/\/\/), which is used to adjust the rotation speed during +recording; at normal drive speed, wobble should produce a 22050Hz sine wave.
+Additionally, the CDR wobble is modulated to provide ATIP information, ATIP is +used for locating and positioning during recording, and contains information +about the approximate laser power necessary for recording, the last possible +time location that lead out can start, and the disc application code.
+Wobble is commonly used only on (recordable) CDRs, ie. usually NOT on +(readonly) CDROMs and Audio Disks. The copyprotected PSX CDROMs are having a +short CDR-style wobble period in the first some seconds, which seems to contain +the "SCEx" string instead of ATIP information.

+

Other Protections

+

Aside from the SCEx string, PSX disks are required to contain region and +licence strings (in the ISO System Area, and in the .EXE file headers), and the +"PS" logo (in the System Area, too). This data can be reproduced with normal CD +writers, although it may be illegal to distribute unlicensed disks with licence +strings.

+

CDROM Protection - Bypassing it

+

Modchips

+

A modchip is a small microcontroller which injects the "SCEx" signal to the +mainboard, so the PSX can be booted even from CDRs which don't contain the +"SCEx" string. Some modchips are additionally patching region checks contained +in the BIOS ROM.
+Note: Although regular PSX disks are black, the hardware doesn't verify the +color of the disks, and works also with normal silver disks.

+

Disk-Swap-Trick

+

Once when the PSX has recognized a disk with the "SCEx" signal, it'll be +satisfied until a new disk is inserted, which is sensed by the SHELL_OPEN +switch. When having that switch blocked, it is possible to insert a CDR without +the PSX noticing that the disk was changed.
+Additionally, the trick requires some boot software that stops the drive motor +(so the new disk can be inserted, despite of the PSX thinking that the drive +door is still closed), and that does then start the boot executable on the new +disk.
+The boot software can be stored on a special boot-disk (that do have the "SCEx" +string on it). Alternately, a regular PSX game disk could be used, with the +boot software stored somewhere else (eg. on Expansion ROM, or BIOS ROM +replacement, or Memory Card).

+

Booting via BIOS ROM or Expansion ROM

+

The PSX can be quite easily booted via Expansion ROM, or BIOS ROM replacements, +allowing to execute code that is stored in the ROM, or that is received via +whatever serial or parallel cable connection from a PC.
+However, even with a BIOS replacement, the protection in the CDROM controller +is still active, so the ROM can't read "clean" data from the CDROM Drive +(unless the Disk-Swap trick is used).
+Whereas, no "clean" data doens't mean no data at all. The CDROM controller does +still seem to output "raw" data (without removing the sector header, and +without handling error correction, and with only limited accuracy on the sector +position). So, eventually, a customized BIOS could convert the "raw" data to +"clean" data.

+

Secret Unlock Commands

+

There is an "official" backdoor that allows to disable the SCEx protection by +software via secret commands (for example, sending those commands can be done +via BIOS patches, nocash BIOS clone, or Expansion ROMs).
+CDROM - Secret Unlock Commands

+

Booting via Memory Card

+

Some games that load data from memory cards may get confused if the save data +isn't formatted as how they expect it - with some fine tuning you can get them +to "crash" in a manner that they do accidently execute bootcode stored on the +memory card. This is how tonyhax's game exploits and FreePSXBoot's BIOS shell +exploit work.
+Requires a tools to write to the memory card (eg. parallel port cable), and the +memory card data customized for a specific game, and an original CDROM with +that specific game. Once when the memory card code is booted, the Disk-Swap +trick can be used.

+

CDROM Protection - Modchips

+

Modchip Source Code

+

The Old Crow mod chip source code works like so:
+

  entrypoint:                   ;at power_up
+    gate=input/highz
+    data=input/highz
+    wait 50 ms
+    data=output/low
+    wait 850 ms
+    gate=output/low
+    wait 314 ms
+  loop:
+    wait 72 ms                  ;pause (eighteen "1=low" bits)
+    sendbyte("S")               ;1st letter
+    sendbyte("C")               ;2nd letter
+    sendbyte("E")               ;3rd letter
+    sendbyte(...)               ;4th letter (A, E, or I, depending on region)
+    goto loop
+  sendbyte(char):
+    sendbit(0)                  ;one start bit (0=highz)
+    for i=0 to 7
+      sendbit(char AND 1)       ;output data (LSB first)
+      char=char/2
+    next i
+    sendbit(1)                  ;1st stop bit (1=low)
+    sendbit(1)                  ;2nd stop bit (1=low)
+    return
+  sendbit(bit):
+    if bit=1 then data=output/low elseif bit=0 then data=input/highz
+    wait 4 ms           ;4ms per bit = 250 bits per second
+    return
+
+That is, 62 bits per transfer at 250bps = circa 4 transfers per second.

+

Connection for the data/gate/sync signals:

+

For older PSX boards (data/gate):
+

  Board        data             gate
+  PU-xx        unknown?         unknown?        ;older PSX boards
+
+For newer PSX and PSone boards (data/sync):
+
  Board        data             sync
+  PU-23, PM-41 CXD2938Q.Pin42   CXD2938Q.Pin5   ;newer PSX and older PSone
+  PM-41(2)     CXD2941R.Pin36   CXD2941R.Pin76  ;newer PSone boards
+
+On the mainboard should be a big SMD capacitor (connected to the "data" pin), +and a big testpoint (connected to the "sync" pin); it's easier to connect the +signals to that locations than to the tiny CXD-chip pins.
+gate and data must be tristate outputs, or open-collector outputs (or normal +high/low outputs passed through a diode).

+

Note on "data" pin (all boards)

+

Transfers the "SCEx" data. Note that the signal produced by the modchip is +looking entirly different than the signal produced by original disks, the real +signal would be modulated 22050Hz wobble, while the modchip is simply dragging +the signal permanently LOW throughout "1" bits, and leaves it floating for "0" +bits. Anyways the "faked" signal seems to be accurate enough to work.

+

Note on "gate" pin (older PSX boards only)

+

The "gate" pin needs to be LOW only for use with original licensed disks +(reportedly otherwise the SCEx string on that disks would conflict with the +SCEx string from the modchip).
+At the mainboard side, the "gate" signal is an input, and "data" is an inverted +output of the gate signal (so dragging gate to low, would cause data to go +high).

+

Note on "sync" pin (newer PSX and PSone boards only)

+

The "sync" pin is a testpoint on the mainboard, which does (at single speed) +output a frequency of circa 44.1kHz/6 (of which some clock pulses seem to be +longer or shorter, probably to indicate adjustments to the rotation speed).
+Some modchips are connected directly to "sync" (so they are apparently +synchronizing the data output with that signal; which is not implemented in the +above source code).
+Anyways, other modchips are using a more simplified connection: The modchip +itself connects only to the "data" pin, and "sync" is required to be wired to +IC723.Pin17.

+

Note on Multi-Region chips

+

Modchips that are designed to work in different regions are sending a different +string (SCEA, SCEE, SCEI) in each loop cycle. Due to the slow 250bps transfer +rate, it may take a while until the PSX has received the correct string, so +this multi-region technique may cause a noticeable boot-delay.

+

Stealth (hidden modchip)

+

The Stealth connection is required for some newer games with anti-modchip +protection, ie. games that refuse to run if they detect a modchip. The +detection relies on the fact that the SCEx signal is normally received only +when booting the disk, whilst older modchips were sending that signal +permanently. Stealth modchips are sending the signal only on power-up (and when +inserting a new disk, which can be sensed via SHELL_OPEN signal).
+Modchip detection reportedly works like so (not too sure if all commands are +required, some seem to be rather offtopic):
+

  1.  Com 19h,20h   ;Retrieve CDROM Controller timestamp
+  2.  Com 01h       ;CdlNop: Get CD status
+  3.  Com 07h       ;CdlMotorOn: Make CD-ROM drive ready (blah?)
+  4.  Com 02h,1,1,1 ;CdlSetloc(01:01:01) (sector that does NOT have SCEx data)
+  5.  Com 0Eh,1     ;CdlSetmode: Turn on CD-DA read mode
+  6.  Short Delay
+  7.  Com 16h       ;CdlSeekP: Seek to Setloc's parameters (4426)
+  8.  Com 0Bh       ;CdlMute: Turn off sound so CdlPlay is inaudible
+  9.  Com 03h       ;CdlPlay: Start playing CD-DA.
+  10. Com 19h,04h   ;ResetSCExInfo (reset GetSCExInfo response to 0,0)
+  11. Long Delay    ;wait until the modchip (if any) has output SCEx data
+  12. Com 19h,05h   ;GetSCExInfo (returns total,success counters)
+  13. Com 09h       ;CdlPause: Stop command 19h.
+
+If GetSCExInfo returns nonzero values, then the console is equipped with a +modchip, and if so, anti-modchip games would refuse to work (no matter if the +disk is an illegal copy, or not).

+

NTSC-Boot BIOS Patch

+

Typically connects to two or three BIOS address/data lines, apparently watching +that signals, and dragging a data line LOW at certain time, to skip software +based region checks (eg. allowing to play NTSC games on PAL consoles).
+Aside from the modchip connection, that additionally requires to adjust the +video signal (in 60Hz NTSC mode, the PSX defaults to generate a NTSC video +signal) (whilst most PAL screens can handle 60Hz refresh, they can't handle +NTSC colors) (on PSone boards, this can be fixed simply by grounding the /PAL +pin; IC502.Pin13) (on older PSX boards it seems to be required to install an +external color clock generator).

+

MODCHIP Connection Example

+

Connection for 8pin "12C508" mod chip from fatcat.co.nz for a PAL PSone with +PM-41 board (ie. with 208pin SPU CXD2938Q, and 52pin IC304 "C 3060, +SC430943PB"):
+

  1 3.5V        (supply)
+  2 IC304.Pin44 (unknown?) (XLAT)
+  3 BIOS.Pin15  (D2)
+  4 BIOS.Pin31  (A18)
+  5 SPU.Pin5    ("sync")
+  6 SPU.Pin42   ("data")
+  7 IC304.Pin19 (SHELL_OPEN)
+  8 GND         (supply)
+
+The chip can be used in a Basic connection (with only pin1,5,6,8 connected), or +Stealth and NTSC-Boot connection (additionally pin2,3,4,7 connected). Some +other modchips (such without internal oscillator) are additionally connected to +a 4MHz or 4.3MHz signal on the mainboard. Some early modchips also connected to +a bunch of additional pins that were reportedly for power-on timings (whilst +newer chips use hardcoded power-on delays).

+

Nocash BIOS "Modchip" Feature

+

The nocash PSX bios outputs the "data" signal on the A20 address line, so +(aside from the BIOS chip) one only needs to install a 1N4148 diode and two +wires to unlock the CDROM:
+

  SPU.Pin42 "data" -------|>|------ CPU.Pin149 (A20)
+  SPU.Pin5  "sync" ---------------- IC723.Pin17
+
+With the "sync" connection, the SCEx signal from the disk is disabled (ie. even +original licensed disks are no longer recognized, unless SCEx is output via A20 +by software). For more variants, see:
+CDROM Protection - Chipless Modchips

+

CDROM Protection - Chipless Modchips

+

The nocash kernel clone outputs a SCEX signal via A20 and A21 address lines, +(so one won't need a separate modchip/microprocessor):
+

  A20 = the normal SCEX signal (inverted ASCII, eg. "A" = BEh)   ;all boards
+  A21 = uninverted SCEX signal (uninverted ASCII, eg. "A" = 41h) ;PU-7..PU-20
+  A21 = always 1 during SCEX output                              ;PU-22 and up
+
+When using the clone bios as internal ROM replacement, A20 can be used with +simple wires/diodes. Doing that with external expansion ROMs would cause the +console to stop working when unplugging the ROM, hence needing a slightly more +complex circuit with transistors/logic chips.

+

External Expansion ROM version, for older boards (PU-7 through PU-20):

+
              .--------.-.                 .--------.-.
+  GATE--------|C  NPN  |  .    DATA--------|C  NPN  |  .
+  A20--[10K]--|B  BC   |  |    A21--[10K]--|B  BC   |  |
+  GND---------|E  547  |  '    GND---------|E  547  |  '
+              '--------'-'                 '--------'-'
+
+

External Expansion ROM version, for newer boards (PU-22):

+
         .-------------------.
+  A21----|OE1,OE2            |
+  A20----|IN1   74HC126  OUT1|--- DATA
+  WFCK---|IN2            OUT2|--- SYNC
+         '-------------------'
+
+

Internal Kernel ROM version, for older boards (PU-7 through PU-20):

+
  GATE---------GND
+  DATA---------A20
+
+

Internal Kernel ROM version, for newer boards (PU-22 through PM-41(2)):

+
  SYNC--------WFCK
+  DATA---|>|---A20
+
+

What pin is where...

+

  GATE is IC703.Pin2  (?) (8pin chip with marking "082B")   ;PU-7? .. PU-16
+  GATE is IC706.Pin7/10   (16pin "118" (uPC5023GR-118)      ;PU-18 .. PU-20
+  SYNC is IC723.Pin17(TEO)(20pin "SONY CXA2575N")           ;PU-22 .. PM-41(2)
+  DATA is IC???.Pin7 (CG) (8pin chip with marking "2903")   ;PU-7? .. PU-16
+  DATA is IC706.Pin1 (CG) (16pin "118" (uPC5023GR-118)      ;PU-18 .. PU-20
+  DATA is HC05.Pin17 (CG) (52pin "SONY SC4309xxPB")         ;PU-7 .. EARLY-PU-8
+  DATA is HC05.Pin32 (CG) (80pin "SONY E35D, 4246xx 185")   ;LATE-PU-8 .. PU-20
+  DATA is SPU.Pin42 (CEI) (208pin "SONY CXD2938Q")          ;PU-22 .. PM-41
+  DATA is SPU.Pin36?(CEI) (176pin "SONY CXD2941R")          ;PM-41(2)
+  WFCK is SPU.Pin5 (WFCK) (208pin "SONY CXD2938Q")          ;PU-22 .. PM-41
+  WFCK is SPU.Pin84(WFCK) (176pin "SONY CXD2941R")          ;PM-41(2)
+  A20  is CPU.Pin149(A20) (208-pin CPU CXD8530 or CXD8606)  ;PU-7 .. PM-41(2)
+  A20  is EXP.Pin28 (A20) (68-pin Expansion Port)           ;PU-7 .. PU-22
+  A21  is CPU.Pin150(A21) (208-pin CPU CXD8530 or CXD8606)  ;PU-7 .. PM-41(2)
+  A21  is EXP.Pin62 (A21) (68-pin Expansion Port)           ;PU-7 .. PU-22
+
+GATE on PU-18 is usually IC706.Pin7 (but IC706.Pin10 reportedly works, too).
+GATE on PU-20 is usually IC706.Pin10 (but IC706.Pin7 might work, too).

+

CDROM Protection - LibCrypt

+

LibCrypt is an additional copy-protection, used by about 100 PSX games. The +protection uses a 16bit decryption key, which is stored as bad position data in +Subchannel Q. The 16bit key is then used for a simple XOR-decryption on certain +800h-byte sectors.

+

Protected sectors generation schemas

+

There are some variants on how the Subchannel Q data is modified:
+

  1. 2 bits from both MSFs are modified,
+     CRC-16 is recalculated and XORed with 0x0080.
+     Games: MediEvil (E).
+  2. 2 bits from both MSFs are modified,
+     original CRC-16 is XORed with 0x8001.
+     Games: CTR: Crash Team Racing (E) (No EDC), CTR: Crash Team Racing (E)
+     (EDC), Dino Crisis (E), Eagle One: Harrier Attack (E) et al.
+  3. Either 2 bits or none from both MSFs are modified,
+     CRC-16 is recalculated and XORed with 0x0080.
+     Games: Ape Escape (S) et al.
+
+Anyways, the relevant part is that the modified sectors have wrong CRCs (which +means that the PSX cdrom controller will ignore them, and the GetlocP command +will keep returning position data from the previous sector).

+

LibCrypt sectors

+

The modified sectors could be theoretically located anywhere on the disc, +however, all known protected games are having them located on the same sectors:
+

  No.    <------- Minute=03/Normal ------->  <------- Minute=09/Backup ------->
+  Bit15  14105 (03:08:05)  14110 (03:08:10)  42045 (09:20:45)  42050 (09:20:50)
+  Bit14  14231 (03:09:56)  14236 (03:09:61)  42166 (09:22:16)  42171 (09:22:21)
+  Bit13  14485 (03:13:10)  14490 (03:13:15)  42432 (09:25:57)  42437 (09:25:62)
+  Bit12  14579 (03:14:29)  14584 (03:14:34)  42580 (09:27:55)  42585 (09:27:60)
+  Bit11  14649 (03:15:24)  14654 (03:15:29)  42671 (09:28:71)  42676 (09:29:01)
+  Bit10  14899 (03:18:49)  14904 (03:18:54)  42813 (09:30:63)  42818 (09:30:68)
+  Bit9   15056 (03:20:56)  15061 (03:20:61)  43012 (09:33:37)  43017 (09:33:42)
+  Bit8   15130 (03:21:55)  15135 (03:21:60)  43177 (09:35:52)  43182 (09:35:57)
+  Bit7   15242 (03:23:17)  15247 (03:23:22)  43289 (09:37:14)  43294 (09:37:19)
+  Bit6   15312 (03:24:12)  15317 (03:24:17)  43354 (09:38:04)  43359 (09:38:09)
+  Bit5   15378 (03:25:03)  15383 (03:25:08)  43408 (09:38:58)  43413 (09:38:63)
+  Bit4   15628 (03:28:28)  15633 (03:28:33)  43634 (09:41:59)  43639 (09:41:64)
+  Bit3   15919 (03:32:19)  15924 (03:32:24)  43963 (09:46:13)  43968 (09:46:18)
+  Bit2   16031 (03:33:56)  16036 (03:33:61)  44054 (09:47:29)  44059 (09:47:34)
+  Bit1   16101 (03:34:51)  16106 (03:34:56)  44159 (09:48:59)  44164 (09:48:64)
+  Bit0   16167 (03:35:42)  16172 (03:35:47)  44312 (09:50:62)  44317 (09:50:67)
+
+Each bit is stored twice on Minute=03 (five sectors apart). For some reason, +there is also a "backup copy" on Minute=09 (however, the libcrypt software +doesn't actually support using that backup stuff, and, some discs don't have +the backup at all (namely, discs with less than 10 minutes on track 1?)).
+A modified sector means a "1" bit, an unmodified means a "0" bit. The 16bit +keys of the existing games are always having eight "0" bits, and eight "1" bits +(meaning that there are 16 modified sectors on Minute=03, and, if present, +another 16 ones one Minute=09).

+

Example (Legacy of Kain)

+

Legacy of Kain (PAL) is reading the LibCrypt data during the title screen, and +does then display GOT KEY!!! on TTY terminal (this, no matter if the correct +16bit key was received).
+The actual protection jumps in a bit later (shortly after learning to glide, +the game will hang when the first enemies appear if the key isn't okay). +Thereafter, the 16bit key is kept used once and when to decrypt 800h-byte +sector data via simple XORing.
+The 16bit key (and some other related counters/variables) aren't stored in RAM, +but rather in COP0 debug registers (which are mis-used as general-purpose +storage in this case), for example, the 16bit key is stored in LSBs of the +"cop0r3" register.
+In particuar, the encryption is used for some of the BIGFILE.DAT folder +headers:
+CDROM File Archive BIGFILE.DAT (Soul Reaver)

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cdromfileformats/index.html b/cdromfileformats/index.html new file mode 100644 index 0000000..2b3df6e --- /dev/null +++ b/cdromfileformats/index.html @@ -0,0 +1,30587 @@ + + + + + + + + + + + + + + + + + + + + + + + + CDROM File Formats - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

CDROM File Formats

+

Official PSX File Formats

+

CDROM File Official Sony File Formats

+

Executables

+

CDROM File Playstation EXE and SYSTEM.CNF
+CDROM File PsyQ .CPE Files (Debug Executables)
+CDROM File PsyQ .SYM Files (Debug Information)

+

Video Files

+

CDROM File Video Texture Image TIM/PXL/CLT (Sony)
+CDROM File Video Texture/Bitmap (Other)
+CDROM File Video 2D Graphics CEL/BGD/TSQ/ANM/SDF (Sony)
+CDROM File Video 3D Graphics TMD/PMD/TOD/HMD/RSD (Sony)
+CDROM File Video STR Streaming and BS Picture Compression (Sony)

+

Audio Files

+

CDROM File Audio Single Samples VAG (Sony)
+CDROM File Audio Sample Sets VAB and VH/VB (Sony)
+CDROM File Audio Sequences SEQ/SEP (Sony)
+CDROM File Audio Other Formats
+CDROM File Audio Streaming XA-ADPCM
+CDROM File Audio CD-DA Tracks

+

Virtual Filesystem Archives

+

PSX titles are quite often using virtual filesystems, with numerous custom file +archive formats.
+CDROM File Archives with Filename
+CDROM File Archives with Offset and Size
+CDROM File Archives with Offset
+CDROM File Archives with Size
+CDROM File Archives with Chunks
+CDROM File Archives with Folders
+CDROM File Archives in Hidden Sectors
+More misc stuff...
+CDROM File Archive HED/DAT/BNS/STR (Ape Escape)
+CDROM File Archive WAD.WAD, BIG.BIN, JESTERS.PKG (Crash/Herc/Pandemonium)
+CDROM File Archive BIGFILE.BIG (Gex)
+CDROM File Archive BIGFILE.DAT (Gex - Enter the Gecko)
+CDROM File Archive FF9 DB (Final Fantasy IX)
+CDROM File Archive Ace Combat 2 and 3
+CDROM File Archive NSD/NSF (Crash Bandicoot 1-3)
+CDROM File Archive STAGE.DIR and *.DAT (Metal Gear Solid)
+CDROM File Archive DRACULA.DAT (Dracula)
+CDROM File Archive Croc 1 (DIR, WAD, etc.)
+CDROM File Archive Croc 2 (DIR, WAD, etc.)
+CDROM File Archive Headerless Archives
+Using archives can avoid issues with the PSX's poorly implemented ISO +filesystem: The PSX kernel supports max 800h bytes per directory, and lacks +proper caching for most recently accessed directories (additionally, some +archives can load the whole file/directory tree from continous sectors, which +could be difficult in ISO filesystems).

+

Compression

+

CDROM File Compression

+

Misc

+

CDROM File XYZ and Dummy/Null Files

+

General CDROM Disk Images

+

CDROM Disk Images CCD/IMG/SUB (CloneCD)
+CDROM Disk Images CDI (DiscJuggler)
+CDROM Disk Images CUE/BIN/CDT (Cdrwin)
+CDROM Disk Images MDS/MDF (Alcohol 120%)
+CDROM Disk Images NRG (Nero)
+CDROM Disk Image/Containers CDZ
+CDROM Disk Image/Containers ECM
+CDROM Subchannel Images
+CDROM Disk Images Other Formats

+

FILENAME.EXT

+

The BIOS seems to support only (max) 8-letter filenames with 3-letter +extension, typically all uppercase, eg. "FILENAME.EXT". Eventually, once when +the executable has started, some programs might install drivers for long +filenames(?)

+

The PSX uses the standard CDROM ISO9660 filesystem without any encryption (ie. +you can put an original PSX CDROM into a DOS/Windows computer, and view the +content of the files in text or hex editors without problems).

+

Note

+

MagDemoNN is short for "Official U.S. Playstation Magazine Demo Disc NN"

+

CDROM File Official Sony File Formats

+

Official Sony File Formats

+

https://psx.arthus.net/sdk/Psy-Q/DOCS/Devrefs/Filefrmt.pdf - Sony 1998
+

  File Formats
+    (c) 1998 Sony Computer Entertainment Inc.
+    Publication date: November 1998
+  Chapter 1: Streaming Audio and Video Data
+    STR: Streaming (Movie) Data                               1-3
+    BS: MDEC Bitstream Data                                   1-8
+    XA: CD-ROM Voice Data                                     1-31
+  Chapter 2: 3D Graphics
+    RSD: 3D Model Data [RSD,PLY,MAT,GRP,MSH,PVT,COD,MOT,OGP]  2-3
+    TMD: Modeling Data for OS Library                         2-24
+    PMD: High-Speed Modeling Data                             2-35
+    TOD: Animation Data                                       2-40
+    HMD: Hierarchical 3D Model, Animation and Other Data      2-49
+  Chapter 3: 2D Graphics
+    TIM: Screen Image Data                                    3-3
+    SDF: Sprite Editor Project File                           3-8
+    PXL: Pixel Image Data                                     3-11
+    CLT: Palette Data                                         3-14
+    ANM: Animation Information                                3-16
+    TSQ: Animation Time Sequence                              3-22
+    CEL: Cell Data                                            3-23
+    BGD: BG Map Data                                          3-27
+  Chapter 4: Sound
+    SEQ: PS Sequence Data                                     4-3
+    SEP: PS Multi-Track Sequence Data                         4-3
+    VAG: PS Single Waveform Data                              4-5
+    VAB: PS Sound Source Data [VAB and VH/VB]                 4-5
+    DA: CD-DA Data                                            4-7
+  Chapter 5: PDA and Memory Card
+    FAT: Memory Card File System Specification                5-3
+
+Most games are using their own custom file formats. However, VAG, VAB/VH(VB, +STR/XA, and TIM are quite popular (because they are matched to the PSX +low-level data encoding). Obviously, EXE is also very common (although not +included in the above document).

+

CDROM File Playstation EXE and SYSTEM.CNF

+

SYSTEM.CNF

+

Contains boot info in ASCII/TXT format, similar to the CONFIG.SYS or +AUTOEXEC.BAT files for MSDOS. A typical SYSTEM.CNF would look like so:
+

  BOOT = cdrom:\abcd_123.45;1 arg ;boot exe (drive:\path\name.ext;version)
+  TCB = 4                         ;HEX (=4 decimal)   ;max number of threads
+  EVENT = 10                      ;HEX (=16 decimal)  ;max number of events
+  STACK = 801FFF00                ;HEX (=memtop-256)
+
+The first line specifies the executable to load, from the "cdrom:" drive, "\" +root directory, filename "abcd_123.45" (case-insensitive, the real name in the +disk directory would be uppercase, ie. "ABCD_123.45"), and, finally ";1" is the +file's version number (a rather strange ISO-filesystem specific feature) (the +version number should be usually/always 1). Additionally, "arg" may contain an +optional 128-byte command line argument string, which is copied to address +00000180h, where it may be interpreted by the executable (most or all games +don't use that feature).
+Each line in the file should be terminated by 0Dh,0Ah characters... not sure if +it's also working with only 0Dh, or only 0Ah...?

+

ABCD_123.45

+

This is a normal executable (exactly as for the .EXE files, described below), +however, the filename/extension is taken from the game code (the "ABCD-12345" +text that is printed on the CD cover), but, with the minus replaced by an +underscore, and due to the 8-letter filename limit, the last two characters are +stored in the extension region.
+That "XXXX_NNN.NN" naming convention seems to apply for all official licensed +PSX games. Wild Arms does unconventionally have the file in a separate folder, +"EXE\SCUS_946.06".

+

PSX.EXE (Boot-Executable) (default filename when SYSTEM.CNF doesn't exist)

+

XXXX_NNN.NN (Boot-Executable) (with filename as specified in SYSTEM.CNF)

+

FILENAME.EXE (General-Purpose Executable)

+

PSX executables are having an 800h-byte header, followed by the code/data.
+

  000h-007h ASCII ID "PS-X EXE"
+  008h-00Fh Zerofilled
+  010h      Initial PC                   (usually 80010000h, or higher)
+  014h      Initial GP/R28               (usually 0)
+  018h      Destination Address in RAM   (usually 80010000h, or higher)
+  01Ch      Filesize (must be N*800h)    (excluding 800h-byte header)
+  020h      Data section Start Address   (usually 0)
+  024h      Data Section Size in bytes   (usually 0)
+  028h      BSS section Start Address    (usually 0) (when below Size=None)
+  02Ch      BSS section Size in bytes    (usually 0) (0=None)
+  030h      Initial SP/R29 & FP/R30 Base (usually 801FFFF0h) (or 0=None)
+  034h      Initial SP/R29 & FP/R30 Offs (usually 0, added to above Base)
+  038h-04Bh Reserved for A(43h) Function (should be zerofilled in exefile)
+  04Ch-xxxh ASCII marker
+             "Sony Computer Entertainment Inc. for Japan area"
+             "Sony Computer Entertainment Inc. for Europe area"
+             "Sony Computer Entertainment Inc. for North America area"
+             (or often zerofilled in some homebrew files)
+             (the BIOS doesn't verify this string, and boots fine without it)
+  xxxh-7FFh Zerofilled
+  800h...   Code/Data                  (loaded to entry[018h] and up)
+
+The code/data is simply loaded to the specified destination address, ie. unlike +as in MSDOS .EXE files, there is no relocation info in the header.
+Note: In bootfiles, SP is usually 801FFFF0h (ie. not 801FFF00h as in +system.cnf). When SP is 0, the unmodified caller's stack is used. In most cases +(except when manually calling DoExecute), the stack values in the exeheader +seem to be ignored though (eg. replaced by the SYSTEM.CNF value).
+The memfill region is zerofilled by a "relative" fast word-by-word fill (so +address and size must be multiples of 4) (despite of the word-by-word filling, +still it's SLOW because the memfill executes in uncached slow ROM).
+The reserved region at [038h-04Bh] is internally used by the BIOS to memorize +the caller's RA,SP,R30,R28,R16 registers (for some bizarre reason, this +information is saved in the exe header, rather than on the caller's stack).
+Additionally to the initial PC,R28,SP,R30 values that are contained in the +header, two parameter values are passed to the executable (in R4 and R5 +registers) (however, usually that values are simply R4=1 and R5=0).
+Like normal functions, the executable can return control to the caller by +jumping to the incoming RA address (provided that it hasn't destroyed the stack +or other important memory locations, and that it has pushed/popped all +registers) (returning works only for non-boot executables; if the boot +executable returns to the BIOS, then the BIOS will simply lockup itself by +calling the "SystemErrorBootOrDiskFailure" function.

+

Relocatable EXE

+

Fade to Black (CINE.EXR) contains ID "PS-X EXR" (instead "PS-X EXE") and string +"PSX Relocable File - Delphine Software Int.", this is supposedly some custom +relocatable exe file (unsupported by the PSX kernel).

+

MSDOS.EXE and WINDOWS.EXE Files

+

Some PSX discs contain DOS or Windows .EXE files (with "MZ" headers), eg. +devkit leftovers, or demos/gimmicks.

+

CDROM File PsyQ .CPE Files (Debug Executables)

+

Fileheader

+
  00h 4   File ID (01455043h aka "CPE",01h)
+
+

Chunk 00h: End of File

+
  00h 1   Chunk ID (00h)
+
+

Chunk 01h: Load Data

+

  00h 1   Chunk ID (01h)
+  01h 4   Address (usually 80010000h and up)
+  05h 4   Size (LEN)
+  09h LEN Data (binary EXE code/data)
+
+Theoretically, this could contain the whole EXE body in a single chunk. +However, the PsyQ files are usually containing hundreds of small chunks (with +each function and each data item in a separate chunk). For converting CPE to +EXE, use "ExeOffset = (CpeAddress AND 1FFFFFFFh)-10000h+800h".

+

Chunk 02h: Run Address (whatever, optional, usually not used in CPE files)

+

  00h 1   Chunk ID (02h)
+  01h 4   Address
+
+Unknown what this is. It's not the entrypoint (which is set via chunk 03h). +Maybe intended to change the default load address (usually 80010000h)?

+

Chunk 03h: Set Value 32bit (LEN=4) (used for entrypoint)

+

Chunk 04h: Set Value 16bit (LEN=2) (unused)

+

Chunk 05h: Set Value 8bit (LEN=1) (unused)

+

Chunk 06h: Set Value 24bit (LEN=3) (unused)

+
  00h 1   Chunk ID (03h..06h)
+  01h 2   Register (usually 0090h=Initial PC, aka Entrypoint)
+  03h LEN Value (8bit..32bit)
+
+

Chunk 07h: Select Workspace (whatever, optional, usually not used in CPE)

+
  00h 1   Chunk ID (07h)
+  01h 4   Workspace number (usually 00000000h)
+
+

Chunk 08h: Select Unit (whatever, usually first chunk in CPE file)

+
  00h 1   Chunk ID (08h)
+  01h 1   Unit (usually 00h)
+
+

Example from LameGuy's sample.cpe:

+
  0000h 4    File ID ("CPE",01h)
+  0004h 2    Select Unit 0            (08h,00h)
+  0006h 7    Set Entrypoint 8001731Ch (03h,0090h,8001731Ch)
+  000Dh 0Dh  Load   (01h,800195F8h,00000004h,0,0,0,0)
+  001Ah ..   Load   (01h,80010000h,0000002Bh,...)
+  004Eh ..   Load   (01h,8001065Ch,00000120h,...)
+  0177h ...  Load   (01h,8001077Ch,0000012Ch,...)
+  02ACh ...  Load   (01h,800108A8h,000000A4h,...)
+  ...   ...  Load   (...)
+  98F4h ...  Load   (01h,800195F0h,00000008h,...)
+  9905h 1    End    (00h)
+
+

CDROM File PsyQ .SYM Files (Debug Information)

+

PsyQ .SYM Files contain debug info, usually bundled with PsyQ .MAP and Psy .CPE +files. Those files are generated by PsyQ tools, which appear to be still in use +for homebrew PSX titles.
+The files are occassionally also found on PSX CDROMs:
+

  Legacy of Kain PAL version (\DEGUG\NTSC\KAIN2.SYM+MAP+CPE)
+  RC Revenge (\RELEASE.SYM)
+  Twisted Metal: Small Brawl (MagDemo54: TMSB\TM.SYM)
+  Jackie Chan Stuntmaster (GAME_REL.SYM+CPE)
+  SnoCross Championship Racing (MagDemo37: SNOCROSS\SNOW.TOC\SNOW.MAP)
+  Sled Storm (MagDemo24: DEBUG\MAIN.MAP)
+  E.T. Interplanetary Mission (MagDemo54: MEGA\MEGA.CSH\* has SYM+CPE+MAP)
+

+

Fileheader .SYM

+
  00h 4  File ID ("MND",01h)
+  04h 4  Whatever (0,0,0,0)    ;TOMB5: 0,02h,0,0
+  08h .. Chunks (see below)
+
+

Symbol Chunks

+
Chunk 01h: Symbol (Immediate, eg. memsize, or membase)
+
Chunk 02h: Symbol (Function Address for Internal & External Functions)
+
Chunk 05h: Symbol (?)
+
Chunk 06h: Symbol (?)
+
  00h 4   Address/Value
+  04h 1   Chunk ID (01h/02h/05h/06h)
+  05h 1   Symbol Length (LEN)
+  06h LEN Symbol (eg. "VSync")
+
+

Source Code Line Chunks

+
Chunk 80h: Source Code Line Numbers: Address for 1 Line
+
  00h 4   Address (for 1 line, starting at current line)
+  04h 1   Chunk ID (80h)
+
+
Chunk 82h: Source Code Line Numbers: Address for N Lines (8bit)
+
  00h 4   Address (for N lines, starting at current line)
+  04h 1   Chunk ID (82h)
+  05h 1   Number of Lines (00h=None, or 02h and up?)
+
+
Chunk 84h: Source Code Line Numbers: Address for NN Lines (16bit)
+
  00h 4   Address (for N lines, starting at current line)
+  04h 1   Chunk ID (84h)
+  05h 2   Number of Lines (?)
+
+
Chunk 86h: Source Code Line Numbers: Address for Line NNN (32bit?)
+
  00h 4   Address (for 1 line, starting at newly assigned current line)
+  04h 1   Chunk ID (84h)
+  05h 4   Absolute Line Number (rather than number of lines) (?)
+
+
Chunk 88h: Source Code Line Numbers: Start with Filename
+
  00h 4   Address (start address)
+  04h 1   Chunk ID (88h=Filename)
+  05h 4   First Line Number (after comments/definitions) (32bit?)
+  09h 1   Filename Length (LEN)
+  0Ah LEN Filename (eg. "C:\path\main.c")
+
+
Chunk 8Ah: Source Code Line Numbers: End of Source Code
+
  00h 4   Address (end address)
+  04h 1   Chunk ID (8Ah)
+
+

Internal Function Chunks

+
Chunk 8Ch: Internal Function: Start with Filename
+
  00h 4    Address
+  04h 1    Chunk ID (8Ch)
+  05h 4    Whatever (1Eh,00h,20h,00h)  ;or 1Eh,00h,18h,00h
+  09h 4    Whatever (00h,00h,1Fh,00h)
+  0Dh 4    Whatever (00h,00h,00h,C0h)
+  11h 4    Whatever (FCh,FFh,FFh,FFh)  ;mask? neg.offset?
+  15h 4    Whatever (10h,00h,00h,00h)  <-- line number (32bit?)
+  19h 1    Filename Length (LEN1)
+  1Ah LEN1 Filename (eg. "C:\path\main.c")
+  xxh 1    Symbol Length (LEN2)
+  xxh LEN2 Symbol (eg. "VSync")
+
+
Chunk 8Eh: Internal Function: End of Function (end of chunk 8Ch)
+
  00h 4   Address
+  04h 1   Chunk ID (8Eh)
+  05h 4   Line Number                 <-- line number (32bit?)
+
+
Chunk 90h: Internal Function:Whatever90h... first instruction in main func?
+
Chunk 92h: Internal Function:Whatever92h... last instruction in main func?
+

Maybe line numbers? Or end of definitions for incoming parameters?
+

  00h 4   Address
+  04h 1   Chunk ID (90h/92h)
+  05h 4   Whatever (1Fh,00h,00h,00h)  <-- line number relative to main.start?
+

+

Class/Type Chunks

+
Chunk 94h: Type/Symbol (Simple Types?)
+
  00h 4   Offset (when used within a structure, or stack-N, or otherwise zero)
+  04h 1   Chunk ID (94h)
+  05h 2   Class (000Dh=Type.alias, 000Ah=Address, 0001h=Stack, 0002h=Addr)
+  07h 2   Type (XX = 8bit,16bit,signed,etc.?)
+  09h 4   Zero, or Size in Bytes (for "memblocks")
+  0xh 1   Symbol Name Length (LEN)
+  0xh LEN Symbol Name (eg. "size_t")
+
+
Chunk 96h: Type/Symbol (Complex Structures/Arrays?)
+
  00h 4   Offset (when used within a structure, otherwise zero)
+  04h 1   Chunk ID (96h)
+  05h 2   Class (02h=Array,08h=RefToStruct,0Dh=DefineAlias,66h=StructEnd)
+  07h 2   Type (0xh=Small, 3xh=WithArrayStuff?) (same/similar as in chunk 94h)
+  09h 4     Struct Size in Bytes
+  0Dh 2     Array Dimensions (DIM) (0=none) ;eg. [3][4] --> 0002h
+  0Fh DIM*4 Array Entries per Dimension     ;eg. [3][4] --> 00000003h,00000004h
+  xxh 1     Internal Fake Name Length (LEN1) (0=none)
+  xxh LEN1  Internal Fake Name  (eg. ".1fake")
+  xxh 1     Symbol Name Length (LEN2)
+  xxh LEN2  Symbol Name (eg. "r")
+
+

Class/Type Values

+
Class definition (in chunk 94h) (and somewhat same/similar in chunk 96h)
+

(looks same/similar as C_xxx class values in COFF files!)
+

  0001h = Local variable              (with Offset = negative stack offset)
+  0002h = Global variable or Function (with Offset = address)
+  0008h = Item in Structure           (with Offser = offset within struct)
+  0009h = Incoming Function param     (with Offset = index; 0,4,8,etc.)
+  000Ah = Type address / struc start? (with Offset = zero)
+  000Dh = Type alias                  (with Offset = zero)
+

+
Type definition (in chunk 94h/96h)
+

(maybe lower 4bit=type, and next 4bit=usage/variant?)
+(looks same/similar as T_xxx type values in COFF files!)
+

  0000h =
+  0001h =
+  0002h =
+  0003h =                (16bit signed?)
+  0004h = int            (32bit signed?)
+  0005h =
+  0006h =
+  0007h =
+  0008h = (address)      (32bit unsigned?) (with Definition=000Ah)
+  0009h =
+  000Ah =
+  000Bh =
+  000Ch = u_char         (8bit unsigned?)
+  000Dh = u_short,ushort (16bit unsigned?)
+  000Eh = u_int          (32bit unsigned?)
+  000Fh = u_long         (64bit unsigned?) (or rather SAME as above?)
+  0021h = function with 0 params, and/or return="nothing"?
+  0024h = main function with 2 params, and/or return="int"?
+  0052h = argv           (string maybe?)
+  0038h = GsOT           (huh?)
+  00F8h = GsOT_TAG       (huh?)
+  00FCh = PACKET         (huh?)
+  ??    = float,bool,string,ptr,packet,(un-)signed8/16/32/64bit,etc
+  ??    = custom type/struct (using value 000xh plus "fake" name, or so?)
+

+

.MAP File

+
PsyQ .MAP File
+

The .SYM file is usually bundled with a .MAP file, which is containing a +summary of the symbolic info as ASCII text (but without info on line numbers or +data types). For example:
+

    Start     Stop   Length      Obj Group            Section name
+ 80010000 80012D5B 00002D5C 80010000 text             .rdata
+ 80012D5C 800C8417 000B56BC 80012D5C text             .text
+ 800C8418 800CDAB7 000056A0 800C8418 text             .data
+ 800CDAB8 800CFB63 000020AC 800CDAB8 text             .sdata
+ 800CFB64 800D5C07 000060A4 800CFB64 bss              .sbss
+ 800D5C08 800DD33F 00007738 800D5C08 bss              .bss
+

+
  Address  Names alphabetically
+ 800CFE80 ACE_amount
+ 800CFB94 AIMenu
+ 800CDE5C AXIS_LENGTH
+ 8005E28C AddClippedTri
+ 8005DFEC AddVertex
+ ...
+
+
  Address  Names in address order
+ 00000000 _cinemax_obj
+ 00000000 _cinemax_header_org
+ 00000000 _cinemax_org
+ 00000000 _mcardx_sbss_size
+ 00000000 _mcardx_org
+ ...
+
+

CDROM File Video Texture Image TIM/PXL/CLT (Sony)

+

TIM/PXL/CLT are standard formats from Sony's devkit. TIM is used by many PSX +games.
+

  .TIM   contains Pixel data, and (optional) CLUT data  ;-all in one file
+  .PXL   contains Pixel data only                       ;\in two separate files
+  .CLT   contains CLUT data only (if any)               ;/
+

+

TIM Format

+

  000h 1  File ID  (always 10h=TIM)
+  001h 1  Version  (always 00h)
+  002h 2  Reserved (always 0000h) (or 1 or 2 for Compressed TIM, see below)
+  004h 4  Flags (bit0-2=Type; see below, bit3=HasCLUT, bit4-31=Reserved/zero)
+  ...  .. Data Section for CLUT (Palette), only exists if Flags.bit3=1, HasCLUT
+  ...  .. Data Section for Pixels (Bitmap/Texture)
+
+The Type in Flags.bit0-2 can be 0=4bpp, 1=8bpp, 2=16bpp, 3=24bpp, 4=Mixed.
+NFL Blitz 2000 (MagDemo26: B2000\DATA\ARTD_G.BIN) does additionally use Type +5=8bit.
+The Type value value is only a hint on how to view the Pixel data (the data is +copied to VRAM regardless of the type; 4=Mixed is meant to indicate that the +data contains different types, eg. both 4bpp & 8bpp textures).
+Type 3=24bpp is quite rare, but does exist (eg. Colony Wars (MagDemo02: +CWARS\GAME.RSC\DEMO.TIM).

+

The format of the CLUT and Pixel Data Section(s) is:

+

  000h 4  Size of Data Section (Xsiz*2*Ysiz+0Ch)  ;maybe rounded to 4-byte?
+  004h 4  Destination Coord    (YyyyXxxxh)  ;Xpos counted in halfwords
+  008h 4  Width+Height         (YsizXsizh)  ;Xsiz counted in halfwords
+  00Ch .. VRAM Data (to be DMAed to frame buffer)
+
+Note: Above is usually a multiple of 4 bytes, but not always:
+Shadow Madness (MagDemo18: SHADOW\DATA\ANDY\LOADSAVE\*.TIM) contains TIM +bitmaps with 27x27 or 39x51 halfwords; those files have odd section size & +odd total filesize. Gran Turismo 2 (GT2.VOL\arcade\arc_other.tim\0000) also has +odd size. Unknown if the CLUT can also have odd size (which would misalign the +following Bitmap section).
+Bust A Groove (MagDemo18: BUSTGR_A\G_COMMON.DFS\0005) has 0x0 pixel Bitmaps +(with CLUT data).

+

PXL/CLT Format

+

PXL/CLT is very rare. And oddly, with swapped ID values (official specs say +11h=PXL, 12h=CLT, but the existing games do use 11h=CLT, 12h=PXL).
+Used by Granstream Saga (MagDemo10 GS\)
+Used by Bloody Roar 1 (MagDemo06: BL\
)
+Used by Bloody Roar 2 (MagDemo22: ASC,CMN,EFT,LON,SND,ST5,STU\*)

+

CLT Format

+

  000h 1  File ID  (always 11h=CLT) (although Sony's doc says 12h)
+  001h 1  Version  (always 00h)
+  002h 2  Reserved (always 0000h)
+  004h 4  Flags (bit0-1=Type=2; bit2-31=Reserved/zero)
+  ...  .. Data Section for CLUT (Palette)
+
+The .CLT Type should be always 2 (meant to indicate 16bit CLUT entries).

+

PXL Format

+

  000h 1  File ID  (always 12h=PXL) (although Sony's doc says 11h)
+  001h 1  Version  (always 00h)
+  002h 2  Reserved (always 0000h)
+  004h 4  Flags (bit0-?=Type; see below, bit?-31=Reserved/zero)
+  ...  .. Data Section for Pixels (Bitmap/Texture)
+
+This does probably support the same 5 types as in .TIMs (though official Sony +docs claim the .PXL type to be only 1bit wide, but netherless claim that PXL +can be 4bpp, 8bpp, or 16bpp).

+

Compressed TIMs

+

Ape Escape (Sony 1999) is using a customized TIM format with 4bpp compression:
+CDROM File Compression TIM-RLE4/RLE8
+Other than that, TIMs can be compressed via generic compression functions (like +LZSS, GZIP), or via bitmap dedicated compression formats (like BS, JPG, GIF).

+

Malformed Files

+
Malformed TIMs in BIGFILE.DAT
+

  Used by Legacy of Kain: Soul Reaver (eg. BIGFILE.DAT\folder04h\file13h)
+  Used by Gex - Enter the Gecko (eg. BIGFILE.DAT\file0Fh\LZcompressed)
+
+Malformed TIMs contain texture data preceeded by a dummy 14h-byte TIM header +with following constant values:
+
  10 00 00 00  02 00 00 00  04 00 08 00  00 02 00 00  00 02 00 02  ;<-- this
+  10 00 00 00  02 00 00 00  04 00 08 00  00 00 00 00  00 02 00 02  ;<-- or this
+
+The malformed entries include:
+
  [04h]=Type should indicated the color depth, but it's always 02h=16bpp.
+  [08h]=Width*2*Height+0Ch should be 8000Ch, but malformed is 80004h.
+  Total filesize should be 80014h, but Gecko files are often MUCH smaller.
+
+Also, destination yloc should be 0..1FFh, but PSX "Lemmings & Oh No! More +Lemmings" (FILES\GFX\*.TIM) has yloc=200h (that game also has vandalized .BMP +headers with 2-byte alignment padding after ID "BM", whilst pretending that +those extra bytes aren't there in data offset and total size entries).

+
Oversized TIMs
+

  Used by Pong (MagDemo24: LES02020\*\*.TIM)
+
+Has 200x200h pix, but section size (and filesize) are +2 bigger than that:
+
  10 00 00 00 02 00 00 00 0E 00 08 00 C0 01 00 00 00 02 00 02  ;Pong *.TIM
+  10 00 00 00 02 00 00 00 0E 00 07 00 00 02 00 00 C0 01 00 02  ;Pong WORLD.TIM
+  10 00 00 00 02 00 00 00 0E 80 03 00 00 02 00 01 C0 01 00 01  ;Pong ZONE*.TIM
+

+
Miscomputed Section Size
+

NBA Basketball 2000 (MagDemo28: FOXBB\TIM\*.TIM) has TIMs with section size +"0Ch+Xsiz*Ysiz" instead of "0Ch+Xsiz*2*Ysiz".

+
NonTIMs in Bloody Roar 1 and 2
+

  Bloody Roar 1 (CMN\INIT.DAT\000Eh)
+  Bloody Roar 2 (CMN\SE00.DAT, CMD\SEL00.DAT\0030h and CMN\VS\VS.DAT\0000h)
+
+This looks somehow TIM-inspired, but has ID=13h.
+
  13 00 00 00 02 00 00 00 0C 20 00 00 00 00 F8 01 00 01 10 00  ;Bloody Roar 1
+  13 00 00 00 02 00 00 00 0C 20 00 00 00 00 00 00 00 01 10 00  ;Bloody Roar 2
+

+
Other uncommon/malformed TIM variants
+

And, Heart of Darkness has a TIM with Size entry set to Xsiz*2*Ysiz+0Eh +(instead of +0Ch) (that malformed TIM is found inside of the RNC compressed +IMAGES\US.TIM file).
+Also, NFL Gameday '99 (MagDemo17: GAMEDAY\PHOTOS.FIL) contains a TIM cropped to +800h-byte size (containing only the upper quarter of the photo).
+Also, not directly malformed, but uncommon: Final Fantasy IX contains 14h-byte +0x0 pixel TIMs (eg. FF9.IMG\dir04\file0046\1B-0000\04-0001).
+Klonoa (MagDemo08: KLONOA\FILE.IDX\3\2\0..1) has 0x0pix TIM (plus palette).

+
Malformed CLTs
+

  Used by Secret of Mana, WM\WEFF\*.CLT
+
+ID is 10h=TIM, Flags=10101009h (should be ID=12h, Flags=02h).

+

CDROM File Video Texture/Bitmap (Other)

+

Apart from Sony's TIM (and PXL/CLT) format, there are a bunch of other +texture/bitmap formats:

+

Compressed Bitmaps

+
  .BS used by several games (and also in most .STR videos)
+  .GIF used by Lightspan Online Connection CD
+  .JPG used by Lightspan Online Connection CD
+  .BMP with RLE4 used by Lightspan Online Connection CD (MONOFONT, PROPFONT)
+  .BMP with RLE8+Delta also used by Online Connection CD (PROPFONT\ARIA6.BMP)
+  .PCX with RLE used by Jampack Vol. 1 (MDK\CD.HED\*.pcx)
+
+

Uncompressed Bitmaps

+
  .BMP
+  .BMP used by Mat Hoffman's Pro BMX (MagDemo39: BMX\BMXCD.HED\*)
+  .BMP used by Mat Hoffman's Pro BMX (MagDemo48: MHPB\BMXCD.HED\*)
+  .BMP used by Thrasher: Skate and Destroy (MagDemo27: SKATE\ASSETS\*.ZAL)
+  .BMP used by Dave Mirra Freestyle BMX (MagDemo36,46: BMX\ASSETS\*.ZAL)
+  .VRM .IMG .TEX .TIM .RAW .256 .COL .4B .15B .R16 .TPG - raw VRAM data
+  "SC" memory card icons
+
+

Targa TGA and Paintbrush PCX

+

CDROM File Video Texture/Bitmap (TGA)
+CDROM File Video Texture/Bitmap (PCX)

+

PSI bitmap - Power Spike (MagDemo43: POWER\GAME.IDX\.BIZ\.PSI)

+
  000h 10h   Name 1 ("FILENAME.BMP", zeropadded)
+  010h 10h   Name 2 ("FILENAME.PSI", zeropadded)
+  020h 4     Bits per pixel (usually 4, 8, or 16)
+  024h 2     Bitmap VRAM Dest.X ?
+  026h 2     Bitmap VRAM Dest.Y ?
+  028h 2     Bitmap Width in pixels
+  02Ah 2     Bitmap Height in pixels
+  02Ch 2     Palette VRAM Dest.X ?   ;\zero for 16bpp
+  02Eh 2     Palette VRAM Dest.Y ?   ;/
+  030h 2     Bitmap Width in Halfwords (PixelWidth*bpp/16)
+  032h 2     Palette Size in Halfwords (0, 10h, 100h for 16bpp,4npp,8bpp)
+  034h 4     Maybe Bitmap present flag (always 1)
+  038h 4     Maybe Palette present flag (0=16bpp, 1=4bpp/8bpp)
+  03Ch ..    Bitmap pixels
+  ...  ..    Palette (if any, for 4bpp: 16x16bit, for 8bpp: 256x16bit)
+
+

JumpStart Wildlife Safari Field Trip (MagDemo52: DEMO\DATA.DAT\*.DAT+*.PSX)

+

This game does use two different (but nearly identical) bitmap formats (with +either palette or bitmap data stored first).
+

  000h 4     Total Filesize (Width*Height+20Ch)
+  004h 2     Bitmap Width
+  006h 2     Bitmap Height
+  008h 4     Unknown, always 1 (maybe 1=8bpp?)
+ In .DAT files (512x192 or 256x64 pix), palette first:
+  00Ch 200h  Palette data
+  20Ch ..    Bitmap data
+ In .PSX files (64x64 pix), bitmap first:
+  00Ch ..    Bitmap data
+  ...  200h  Palette data
+
+To detect the "palette first" format, check for these conditions(s):
+
  Filename extension is ".DAT"
+  Bitmap Width<>Height (non-square)
+  [00Ch..20Bh] has AllMSBs>=80h, and SomeLSBs<80h
+
+Note: The bitmaps are vertically mirrored (starting with bottom-most scanline).

+

WxH Bitmap (Width*Height)

+

Used by Alone in the Dark The New Nightmare (FAT.BIN\BOOK,DOC,INTRO,MENU\)
+Used by Rayman (RAY\JUN,MON,MUS\
) (but seems to contain map data, not pixels)
+

  000h 2   Width  (W)   ;\usually 320x240 (or 512x240 or 80x13)
+  002h 2   Height (H)   ;/
+  004h ..  Bitmap 16bpp (W*H*2 bytes)
+

+

RAWP Bitmap

+

Used by Championship Motocross (MagDemo25: SMX\RESHAD.BIN\*) ("RAWP")
+

  000h 4     ID "RAWP" (this variant has BIG-ENDIAN width/height!)
+  004h 2     Width  (usually 280h=640pix or 140h=320pix) (big-endian!!!)
+  006h 2     Height (usually 1E0h=480pix or F0h=240pix)  (big-endian!!!)
+  008h ..    Bitmap data, 16bpp (width*height*2 bytes)
+

+

XYWH Bitmap/Palette (X,Y,Width*Height) (.BIT and .CLT)

+

Used by CART World Series (MagDemo04: CART\.BIT and *.BIN\)
+Used by NFL Gameday '98 (MagDemo04: GAMEDAY\BUILD\GRBA.FIL\)
+Used by NFL Gameday '99 (MagDemo17: GAMEDAY\
.BIT and *.FIL\)
+Used by NFL Gameday 2000 (MagDemo27: GAMEDAY\
.BIT)
+Used by NCAA Gamebreaker '98 (MagDemo05: GBREAKER\.BIT and UFLA.BIN\)
+Used by NCAA Gamebreaker 2000 (MagDemo27: GBREAKER\.BIT and *.FIL\)
+Used by Twisted Metal 4 (MagDemo30: TM4DATA\.MR,*.IMG\.bit,*.clt)
+

  000h 2   VRAM.X             (X) (0..3FFh)
+  002h 2   VRAM.X             (Y) (0..1FFh)
+  004h 2   Width in halfwords (W) (1..400h)
+  006h 2   Height             (H) (1..200h)
+  008h ..  Bitmap or Palette data (W*H*2 bytes)
+

+

Doom (PSXDOOM\ABIN\PSXDOOM.WAD\\)

+

  000h 2     Hotspot X (signed) (usually 0)
+  002h 2     Hotspot Y (signed) (usually 0)
+  004h 2     Width in bytes
+  006h 2     Height
+  008h ..    Bitmap 8bpp (Width*Height bytes)
+
+Most files have Hotspot X=0,Y=0, WAD\LOADING has X=FF80h,Y=FF8Ah, and WAD\S\* +has X=0..Width, Y=0..Height+1Ah (eg. S\BKEY*, S\BFG*, S\PISFA0 have large Y).
+The files do not contain any palette info... maybe 2800h-byte PLAYPAL does +contain the palette(s)?

+

Lemmings & Oh No! More Lemmings (FILES\GFX\.BOB, FILES\SMLMAPS\.BOB)

+

  000h 2       Width
+  002h 2       Height
+  004h 100h*3  Palette 24bit RGB888
+  304h ..      Bitmap 8bpp (Width*Height bytes)
+  ..   (1700h) Unknown (only in SMLMAPS\*.BOB, not in GFX\*.BOB)
+
+Apart from .BOB, the FILES\GFX folder also has vandalized .BMP (with ID +"BM",00h,00h) and corrupted .TIM (with VRAM.Y=200h).

+

Perfect Assassin (DATA.JFS\DATA\*.BM)

+
  000h 4      Format 1 (0=8bpp, 1=16bpp)
+  004h 4      Format 2 (1=8bpp, 2=16bpp)
+  008h 4      Width in pixels
+  00Ch 4      Height in pixels
+  010h ..     Bitmap Data
+  ...  (300h) Palette 18bit RGB666 (R,G,B range 00h..3Fh) (only if format 8bpp)
+
+

One (DIRFILE.BIN\*.VCF)

+
  000h 4     Unknown (always 1)
+  004h 4     Unknown (always 8)
+  008h 4     Unknown (always 2) (maybe 2=16bpp?)
+  00Ch 4     Width in pixels (3Ah, 140h, or 280h)
+  010h 4     Height          (3Ah, or F0h)
+  014h ..    Bitmap 16bpp (Width*Height*2 bytes)
+
+

One (DIRFILE.BIN\*.VCK and DIRFILE.BIN\w*\sect*.bin\TEXTURE 001)

+

  000h 2     Number if Files (N)
+  002h 2     Number of VRAM.Slots (less or equal than Number of Files)
+  004h 4     ID "BLK0"
+  008h N*10h File List
+  ...  ..    1st File Bitmap
+  ...  ..    1st File Palette (20h/200h/0 bytes for 4bpp/8bpp/16bpp)
+  ...  ..    2nd File Bitmap
+  ...  ..    2nd File Palette (only if PaletteID=FileNo=1)
+  ...  ..    3rd File Bitmap
+  ...  ..    3rd File Palette (only if PaletteID=FileNo=2)
+  ...  ..    etc.
+
+File List entries:
+
  000h 2     VRAM.X in halfwords (0..1Fh, +bit15=Blank)  ;\within current
+  002h 2     VRAM.Y              (0..3Fh)                ;/VRAM.Slot
+  004h 2     Width in pixels (max 80h/40h/20h for 4bpp/8bpp/16bpp)
+  006h 2     Height          (max 40h)
+  008h 2     VRAM.Slot       (0,1,2,3,...,NumSlots-1)
+  00Ah 2     Unknown         (0,1,2,4 in *.vck, 4 in sect*.bin)
+  00Ch 2     Color Depth     (0=4bpp, 1=8bpp, 2=16bpp)
+  00Eh 2     Palette ID      (0..FileNo-1=Old, FileNo=New, FFFFh=None/16bpp)
+  NumFiles-1, or ID of already used palette)
+
+Note: VRAM.Slots are 20h*40h halfwords.
+Bitmaps can either have newly defined palettes (when PaletteID=FileNo), or +re-use previously defined "old" palettes (when PaletteID\<FileNo).
+The Blank flag allows to define a blank region (for whatever purpose), the file +doesn't contain any bitmap/palette data for such blank regions.

+

BMR Bitmaps

+

These are 16bpp bitmaps, stored either in uncompressed .BMR files, or in +compressed .RLE files:
+CDROM File Compression RLE_16
+

  Apocalypse (MagDemo16: APOC\CD.HED\*.RLE and *.BMR)
+  Spider-Man 1 older version (MagDemo31: SPIDEY\CD.HED\*.RLE)
+  Spider-Man 1 newer version (MagDemo40: SPIDEY\CD.HED\*.RLE and .BMR)
+  Spider-Man 2 (MagDemo50: HARNESS\CD.HED\*.RLE)
+  Tony Hawk's Pro Skater (MagDemo22: PROSKATE\CD.HED\*.BMR)
+
+The width/height for known filesizes are:
+
  33408h bytes --> 512x205pix, 16bpp (Apocalypse warning.rle)
+  3C008h bytes --> 512x240pix, 16bpp (most common)
+  96008h bytes --> 640x480pix, 16bpp (tony hawk's pro skater)
+
+Most of the older BMR files (in Apocalypse) have valid 8-byte headers:
+
  000h 2     Unknown (FFA0h) (ID for files with valid headers?)
+  002h 2     Dest.Y (usually 0) (11h=(240-205)/2 in Apocalypse warning.rle)
+  004h 2     Width  (usually 200h=512pix)
+  006h 2     Height (usually F0h=240pix) (CDh=205pix in Apocalypse warning.rle)
+  008h ..    Bitmap data, 16bpp (width*height*2 bytes)
+
+Most or all newer BMR files (in Apocalypse "loadlogo.rle", and in all files in +Spider-Man 1, Spider-Man-2, Tony Hawk's Pro Skater) have the 8-byte header +replaced by unused 8-byte at end of file:
+
  000h ..    Bitmap data, 16bpp (width*height*2 bytes)
+  ..   8     Unused (garbage or extra pixels, not transferred to VRAM)
+
+BUG: The bitmaps in all .BMR files (both with/without header) are distorted: +The last 4-byte (rightmost 2pix) of each scanline should be actually located at +the begin of the scanline, and the last scanline is shifted by an odd amount of +bytes (resulting in nonsense 16bpp pixel colors); Spider-Man is actually +displaying the bitmap in that distorted form (although it does mask off some +glitches: one of the two bad rightmost pixels is replaced by a bad black +leftmost pixel, and glitches in upper/lower lines aren't visible on 224-line +NTSC screens).

+

Croc 1 (retail: *.IMG) (retail only, not in MagDemo02 demo version)

+

Croc 2 (MagDemo22: CROC2\CROCII.DIR\*.IMG)

+

Disney's The Emperor's New Groove (MagDemo39: ENG\KINGDOM.DIR\*.IMG)

+

Disney's Aladdin in Nasira's Rev. (MagDemo46: ALADDIN\ALADDIN.DIR\*.IMG)

+

Contains raw 16bpp bitmaps, with following sizes:
+

  25800h bytes = 12C00h pixels (320x240)  ;Croc 1 (retail version)
+  3C000h bytes = 1E000h pixels (512x240)
+  96000h bytes = 4B000h pixels (640x480)
+
+Note: The .IMG format is about same as .BMR files (but without the 8-byte +header, and without distorted scanlines).

+

Mat Hoffman's Pro BMX (MagDemo39: BMX\FE.WAD+STR\*.BIN) (Activision)

+

Mat Hoffman's Pro BMX (MagDemo48: MHPB\FE.WAD+STR\*.BIN) (Shaba/Activision)

+

  000h 2     Bits per pixel (4 or 8)
+  002h 2     Bitmap Width in pixels
+  004h 2     Bitmap Height in pixels
+  006h 2     Zero
+  008h N*2   Palette (with N=(1 SHL bpp))
+  ...  ..    Bitmap (with Width*Height*bpp/8 bytes)
+  ...  (..)  Zeropadding to 4-byte boundary (old version only)
+
+The trailing alignment padding exists only in old demo version (eg. size of +78x49x8bpp "coreypp.bin" is old=10F8h, new=10F6h).

+

E.T. Interplanetary Mission (MagDemo54: MEGA\MEGA.CSH\*)

+

  000h 2     Type (0=4bpp, 1=8bpp, 2=16bpp)
+  002h 2     Unknown (usually 0000h, or sometimes CCCCh)
+  004h 2     Bitmap Width in pixels
+  006h 2     Bitmap Height in pixels
+  008h 200h  Palette (always 200h-byte, even for 4bpp or 16bpp)
+  208h ..    Bitmap (Width*Height*bpp/8 bytes)
+
+Palette is 00h-or-CCh-padded when 4bpp, or CCh-filled when 16bpp.
+Note: Some files contain two or more such bitmaps (of same or different sizes) +badged together.

+

EA Sports: Madden NFL '98 (MagDemo02: TIBURON\.DAT\)

+

EA Sports: Madden NFL 2000 (MagDemo27: MADN00\.DAT\)

+

EA Sports: Madden NFL 2001 (MagDemo39: MADN01\.DAT\)

+

This format is used in various EA Sports Madden .DAT archives, it contains +standard TIMs with extra Headers/Footers.
+

  000h 4     Offset to TIM (1Ch) (Hdr size)    (1Ch)               ;\
+  004h 4     Offset to Footer    (Hdr+TIM size)(123Ch,1A3Ch,1830h) ;
+  008h 2     Bitmap Width in pixels      (40h or 60h or 30h)       ;
+  00Ah 2     Bitmap Height in pixels     (40h)                     ;
+  00Ch 4     Unknown, always 01h         (01h)                     ; Header
+  010h 4     Unknown, always 23h         (23h)                     ; 1Ch bytes
+  014h 2     Unknown, always 0101h       (101h)                    ;
+  016h 1     Bitmap Width in pixels      (40h or 60h or 30h)       ;
+  017h 1     Bitmap Height in pixels     (40h)                     ;
+  018h 4     Unknown, always 00h         (0)                       ;/
+  01Ch ..    TIM (Texture, can be 4bpp, 8bpp, 16bpp)               ;-TIM
+  ...  4     Unknown, always C0000222h   (C0000222h)               ;\
+  ...  2     Unknown, always 0001h       (0001h)                   ;
+  ...  1     Bitmap Width in pixels      (40h or 60h or 30h)       ; Footer
+  ...  1     Bitmap Height in pixels     (40h)                     ; 12h bytes
+  ...  4     Unknown, always 78000000h   (78000000h)               ;
+  ...  6     Unknown                     (0,0,80h,0,0,0)           ;/
+
+Purpose is unknown; the 8bit Width/Height entries might be TexCoords.
+The PORTRAITS.DAT archives are a special case:
+
  Madden NFL '98 (MagDemo02: TIBURON\PORTRAIT.DAT) (48x64, 16bpp)
+  Madden NFL 2000 (MagDemo27: MADN00\PORTRAIT.DAT) (96x64, 8bpp plus palette)
+  Madden NFL 2001 (MagDemo39: MADN01\PORTRAIT.DAT) (64x64, 8bpp plus palette)
+
+Those PORTRAITS.DAT don't have any archive header, instead they do contain +several images in the above format, each one zeropadded to 2000h-byte size.

+

989 Sports: NHL Faceoff '99 (MagDemo17: FO99\.KGB\.TEX)

+

989 Sports: NHL Faceoff 2000 (MagDemo28: FO2000\*.TEX)

+

989 Sports: NCAA Final Four 2000 (MagDemo30: FF00\*.TEX)

+

  000h 0Ch  ID "TEX PSX ",01h,00h,00h,00h    ;used in 989 Sports games
+  00Ch 4    Number of Textures
+  010h 4    Total Filesize
+  014h 4    Common Palette Size    (0=200h, 1=None, 2=20h)
+  018h (..) Common Palette, if any (0,20h,200h bytes)
+  ...  ..   Texture(s)
+ Texture format:
+  000h 10h  Filename (eg. "light1", max 16 chars, zeropadded if shorter)
+  010h 4    Width in pixels  (eg. 40h)
+  014h 4    Height           (eg. 20h or 40h)
+  018h 4    Unknown          (always 0)
+  01Ch 4    Number of Colors (eg. 10h, 20h or 100h)
+  020h ..   Bitmap (4bpp when NumColors<=10h, 8bpp when NumColors>10h)
+  ...  (..) Palette (NumColors*2 bytes, only present if Common Palette=None)
+
+The .TEX files may be in ISO folders, KGB archives, DOTLESS archives. And, some +are stored in headerless .DAT/.CAT archives (which start with ID "TEX PSX ", +but seem to have further files appended thereafter).

+

Electronic Arts .PSH (SHPP)

+

FIFA - Road to World Cup 98 (with chunk C0h/C1h = RefPack compression)
+NCAA March Madness 2000 (MagDemo32: MM2K\.PSH)
+Need for Speed 3 Hot Pursuit (*.PSH, ZLOAD*.QPS\RefPack.PSH)
+ReBoot (DATA\
.PSH) (with chunk 6Bh)
+Sled Storm (MagDemo24: DEBUG,ART,ART2,ART3,SOUND\.PSH) (with Comment, Mipmap)
+WCW Mayhem (MagDemo28: WCWDEMO\
.BIG\*.PSH) (with chunk C0h/C1h = RefPack)
+

  000h 4    ID "SHPP"
+  004h 4    Total Filesize (or Filesize-0Ch, eg. FIFA'98 ZLEG*.PSH)
+  008h 4    Number of Textures (N)
+  00Ch 4    ID "GIMX"
+  010h N*8  File List
+  ...  ..   Data (each File contains a Bitmap chunk, and Palette chunk, if any)
+ File List entries:
+  000h 4    Name (ascii) (Mipmaps use the same name for each mipmap level)
+  004h 4    Offset from begin of archive to first Chunk of file
+  Caution: Most PSH files do have the above offsets sorted in increasing order,
+  but some have UNSORTED offsets, eg. Sled Storm (MagDemo24: ART3\LOAD1.PSH),
+  so one cannot easily compute sizes as NextOffset-CurrOffset.
+  Note: Mipmap textures consist of two files with same name and different
+  resolution, eg. in Sled Storm (MagDemo24: ART\WORLD0x.PSH)
+ Bitmap Chunk:
+  000h 1    Chunk Type (40h=PSX/4bpp, 41h=PSX/8bpp, 42h=PSX/16bpp)
+  001h 3    Offset from current chunk to next chunk (000000h=None)
+  004h 2    Bitmap Width in pixels (can be odd, pad lines to 2-byte boundary)
+  006h 2    Bitmap Height
+  008h 2    Center X   (whatever that is)
+  00Ah 2    Center Y   (whatever that is)
+  00Ch 2    Position X (whatever that is, plus bit12-15=flags?)
+  00Eh 2    Position Y (whatever that is, plus bit12-15=flags?)
+  010h ..   Bitmap data (each scanline is padded to 2-byte boundary)
+  ...  ..   Padding to 8-byte boundary
+ Compressed Bitmap Chunk:
+  000h 1    Chunk Type (C0h=PSX/4bpp, C1h=PSX/8bpp, and probably C2h=PSX/16bpp)
+  001h 0Fh  Same as in Chunk 40h/41h/42h (see there)
+  010h ..   Compressed Bitmap data (usually/always with Method=10FBh)
+  ...  ..   Padding to 8-byte boundary
+ Palette Chunk (if any) (only for 4bpp/8bpp bitmaps, not for 16bpp):
+  000h 1    Chunk Type (23h=PSX/Palette)
+  001h 3    Offset from current chunk to next chunk (000000h=None)
+  004h 2    Palette Width in halfwords (10h or 100h)
+  006h 2    Palette Height             (1)
+  008h 2    Unknown (usually same as Width) (or 80D0h or 9240h)
+  00Ah 2    Unknown (usually 0000h)         (or 0001h or 0002h)
+  00Ch 2    Unknown (usually 0000h)
+  00Eh 2    Unknown (usually 00F0h)
+  010h ..   Palette data (16bit per color)
+  Note: The odd 80D0h,0001h values occur in Sled Storm ART\WORKD00.PSH\TBR1)
+ Unknown Chunk (eg. ReBoot (DATA\AREA15.PSH\sp*))
+  000h 1    Chunk Type (6Bh)
+  001h 3    Offset from current chunk to next chunk (000000h=None)
+  004h 8    Unknown (2C,00,00,3C,03,00,00,00)
+  00Ch -    For whatever reason, there is no 8-byte padding here
+ Comment Chunk (eg. Sled Storm (MagDemo24: ART\WORLD0x.PSH))
+  000h 1    Chunk Type (6Fh=PSX/Comment)
+  001h 3    Offset from current chunk to next chunk (000000h=None)
+  004h ..   Comment ("Saved in Photoshop Plugin made by PEE00751@...",00h)
+  ...  ..   Zeropadding to 8-byte boundary
+ Unknown Chunk (eg. Sled Storm (MagDemo24: ART\WORLD09.PSH\ADAA))
+  000h 1    Chunk Type (7Ch)
+  001h 3    Offset from current chunk to next chunk (000000h=None)
+  004h 2Ch  Unknown (reportedly Hot spot / Pix region, but differs on PSX?)
+
+The whole .PSH file or the bitmap chunks can be compressed:
+CDROM File Compression EA Methods
+Variants of the .PSH format are also used on PC, PS2, PSP, XBOX (with other +Chunk Types for other texture/palette formats, and for optional extra data). +For details, see: http://wiki.xentax.com/index.php/EA_SSH_FSH_Image

+

Destruction Derby Raw (MagDemo35: DDRAW\*.PCK,*.FNT,*.SPR)

+

This format can contain one single Bitmap, or a font with several small +character bitmaps.
+

  000h 2     ID "BC"                                        ;\
+  002h 1     Color Depth (1=4bpp, 2=8bpp, 4=16bpp)          ; Header
+  003h 1     Type        (40h=Bitmap, C0h=Font)             ;/
+  ...  (2)   Palette Unknown (0 or 1)                       ;\only if Bitmap
+  ...  (2)   Palette Unknown (1)                            ; 4bpp or 8bpp
+  ...  (..)  Palette data (20h or 200h bytes for 4bpp/8bpp) ;/
+  ...  2     Bitmap Number of Bitmaps-1 (N-1)               ;\
+  ...  2     Bitmap Width in pixels                         ;
+  ...  2     Bitmap Height in pixels                        ; Bitmap(s)
+  ...  N*1   Bitmap Tilenumbers (eg. "ABCDEFG..." for Fonts);
+  ...  N*1   Bitmap Proportional Font widths? (0xh or FFh)  ;
+  ...  N*BMP Bitmap(s) for all characters                   ;/
+  ...  (20h) Palette Data (20h bytes for 4bpp)              ;-only if Font/4bpp
+
+All bitmap scanlines are padded to 2-byte boundary, eg. needed for:
+
  INGAME1\BOWL2.PTH\SPRITES.PTH\ST.SPR    30x10x4bpp: 15 --> 16 bytes/line
+  INGAME1\BOWL2.PTH\SPRITES.PTH\STOPW.SPR 75x40x4bpp: 37.5 --> 38 bytes/line
+
+The BC files are usually compressed (either in PCK file, or in the compressed +DAT portion of a PTH+DAT archive).

+

Cool Boarders 2 (MagDemo02: CB2\DATA*\*.FBD)

+

  000h 2    ID ("FB")                                ;\File Header
+  002h 2    Always 1 (version? 4bpp? num entries?)   ;/
+  004h 2    Palette VRAM Dest X (eg. 300h)           ;\
+  006h 2    Palette VRAM Dest Y (eg. 1CCh,1EDh,1FFh) ; Palette Header
+  008h 2    Palette Width in halfwords (eg. 100h)    ; (all zero when unused)
+  00Ah 2    Palette Height (eg. 1 or 0Dh)            ;/
+  00Ch 2    Bitmap VRAM Dest X (eg. 140h or 200h)    ;\
+  00Eh 2    Bitmap VRAM Dest Y (eg. 0 or 100h)       ; Bitmap Header
+  010h 2    Bitmap Width in halfwords                ;
+  012h 2    Bitmap Height                            ;/
+  ...  ..   Palette Data (if any)                    ;-Palette Data
+  ...  ..   Bitmap Data                              ;-Bitmap Data
+
+The bitmap data seems to be 4bpp and/or 8bpp, but it's hard to know the correct +palette (some files have more than 16 or 256 palette colors, or don't have any +palette at all).

+

CDROM File Video Texture/Bitmap (TGA)

+

Targa TGA

+

  000h 1   Image ID Size (00h..FFh, usually 0=None)      ;0
+  001h 1   Palette Present Flag (0=None, 1=Present)      ;0            iv=1
+  002h 1   Data Type code (0,1,2,3,9,10,11,32,33)        ;NEBULA=2     iv=1
+  003h 2   Palette First Color (usually 0)               ;0            iv=0
+  005h 2   Palette Number of Colors (usually 100h)       ;0            iv=100h
+  007h 1   Palette Bits per Color (16,24,32, usually 24) ;0            iv=18h
+  008h 2   Bitmap X origin (usually 0)                   ;0
+  00Ah 2   Bitmap Y origin (usually 0)                   ;0
+  00Ch 2   Bitmap Width                                  ;NEBULA=20h LOGO=142h
+  00Eh 2   Bitmap Height                                 ;NEBULA=20h
+  010h 1   Bitmap Bits per Pixel (8,16,24,32 exist?)     ;NEBULA=18h   iv=8
+  011h 1   Image Descriptor (usually 0)                  ;0
+  012h ..  Image ID Data (if any, len=[00h], usually 0=None)
+  ...  ..  Palette
+  ...  ..  Bitmap
+  ...  1Ah Footer (8x00h, "TRUEVISION-XFILE.", 00h) (not present in iview)
+
+Data Type [02h]:
+
  00h = No image data included  ;-Unknown purpose
+  01h = Color-mapped image      ;\
+  02h = RGB image               ; Uncompressed
+  03h = Black and white image   ;/
+  09h = Color-mapped image      ;\Runlength
+  0Ah = RGB image               ;/
+  0Bh = Black and white image   ;-Unknown compression method
+  20h = Color-mapped image      ;-Huffman+Delta+Runlength
+  21h = Color-mapped image      ;-Huffman+Delta+Runlength+FourPassQuadTree
+
+The official specs do list the above 9 types, but do describe only 4 types in +detail (type 01h,02h,09h,0Ah).
+
  Type 01h and 09h lack details on supported bits per pixel (8bpp with 100h
+    colors does exist; unknown if less (or more) than 8bpp are supported,
+    and if so, in which bit order.
+  Type 02h and 0Ah are more or less well documented.
+  Type 03h has unknown bit-order, also unknown if/how it differs from type
+    01h with 1bpp.
+  Type 0Bh, 20h, 21h lack any details on the compression method.
+
+TGA's are used by a couple of PSX games/demos (all uncompressed):
+
  16bpp: Tomb Raider 2 (MagDemo01: TOMBRAID\*.RAW)
+  24bpp: Tomb Raider 2 (MagDemo05: TOMB2\*.TGA)
+  24bpp: Colony Wars Venegance (MagDemo14: CWV\GAME.RSC\NEBULA*.TGA, *SKY.TGA)
+  24bpp: Colony Wars Red Sun (MagDemo31: CWREDSUN\GAME.RSC\000A\*)
+  16bpp: Colony Wars Venegance (MagDemo14: CWV\GAME.RSC\LOGO.DAT)
+  16bpp: X-Men: Mutant Academy (MagDemo50: XMEN2\*)
+  16bpp: Disney's Tarzan (MagDemo42: TARZAN\*)
+  8bpp+Wrong8bitAttr: SnoCross Championship Racing (MagDemo37: SNOCROSS\*.TGA)
+  16bpp+WrongYflip: SnoCross Championship Racing (MagDemo37: SNOCROSS\*.TGA)
+
+For whatever reason, TGA is still in use on newer consoles:
+
  32bpp: 3DS AR Games (RomFS:\i_ar\tex\hm*.lz77
+

+

CDROM File Video Texture/Bitmap (PCX)

+

PC Paintbrush .PCX files (ZSoft)

+

Default extension is .PCX (some tools did use .PCX for the "main" image, and +.PCC for smaller snippets that were clipped/cropped/copied from from a large +image).
+

  000h 1    File ID (always 0Ah=PCX/ZSoft)
+  001h 1    Version (0,2,3,4,5)
+  002h 1    Compression (always 01h=RLE) (or inofficial: 00h=Uncompressed)
+  003h 1    Bits per Pixel (per Plane) (1, 2, 4, or 8)
+  004h 2    Window X1   ;\
+  006h 2    Window Y1   ; Width  = X2+1-X1
+  008h 2    Window X2   ; Height = Y2+1-Y1
+  00Ah 2    Window Y2   ;/
+  00Ch 2    Horizontal Resolution in DPI  ;\often square, but can be also zero,
+  00Eh 2    Vertical Resolution in DPI    ;/or screen size, or other values
+  010h 30h  EGA/VGA Palette (16 colors, 3-byte per color = R,G,B) (or garbage)
+  010h 1    CGA: Bit7-4=Background Color (supposedly IRGB1111 ?)
+  013h 1    CGA: Bit7:0=Color,1=Mono,Bit6:0=Yellow,1=White,Bit5:0=Dim,1=Bright
+  014h 1    Paintbrush IV: New CGA Color1 Green  ;\weird new way to encode CGA
+  015h 1    Paintbrush IV: New CGA Color1 Red    ;/palette in these two bytes
+  040h 1    Reserved (00h) (but is 96h in animals.pcx)
+  041h 1    Number of color planes (1=Palette, 3=RGB, or 4=RGBI)
+  042h 2    Bytes per Line (per plane) (must be N*2) (=(Width*Bits+15)/16*2)
+  044h 2    PaletteInfo? (0000h/xxxxh=Normal, 0001h=Color/BW, 0002h=Grayscale)
+  046h 2    Horizontal screen size in pixels  ;\New fields, found only
+  048h 2    Vertical screen size in pixels    ;/in Paintbrush IV/IV Plus
+  04Ah 36h  Reserved (zerofilled) (or garbage in older files, custom in MGS)
+  080h ..   Bitmap data (RLE compressed)
+  ...  1    VGA Palette ID (0Ch=256 colors)                      ;\when 8bpp
+  ..   300h VGA Palette (256 colors, 3-byte per color  = R,G,B)  ;/
+
+Decoding PCX files is quite a hardcore exercise due to a vast amount of +versions, revisions, corner cases, incomplete & bugged specifications, and +inofficial third-party glitches.

+

PCX Versions

+

  00h = Version 2.5 whatever ancient stuff
+  02h = Version 2.8 with custom 16-color palette
+  03h = Version 2.8 without palette (uses fixed CGA/EGA palette)
+  04h = Version ?.? without palette (uses fixed CGA/EGA palette)
+  05h = Version 3.0 with custom 16-color or 256-color palette or truecolor
+
+NOTE: Version[01h]=05h with PaletteInfo[44h]=0001h..0002h is Paintbrush IV?

+

Known PCX Color Depths

+
  planes=1, bits=1  P1        ;1bit, HGC 2 color (iview and paint shop pro 2)
+  planes=1, bits=2  P2        ;2bit, CGA 4 color (with old/new palette info)
+  planes=3, bits=1  RGB111    ;3bit, EGA 8 color (official samples)  ;\version
+  planes=4, bits=1  IRGB1111  ;4bit, EGA 16 color (paint shop pro 2) ;/03h..04h
+  planes=1, bits=4  P4        ;4bit, BMP 16 color (iview)
+  planes=1, bits=8  P8        ;8bit, VGA 256 color palette
+  planes=1, bits=8  I8        ;8bit, VGA 256 level grayscale (gmarbles.pcx)
+  planes=3, bits=8  BGR888    ;24bit, truecolor (this is official 24bit format)
+ ;planes=1, bits=24 BGR888 ?  ;24bit, reportedly exists? poor compression
+ ;planes=4, bits=4  ABGR4444  ;16bit, wikipedia-myth? unlikely to exist
+ ;planes=4, bits=8  ABGR8888  ;32bit, truecolor+alpha (used in abydos.dcx\*)
+
+

Width and Height

+

These are normally calculated as so:
+

  Width  = X2+1-X1      ;width for normal files
+  Height = Y2+1-Y1      ;height for normal files
+
+However, a few PCX files do accidentally want them to be calculated as so:
+
  Width  = X2-X1        ;width for bugged files
+  Height = Y2-Y1        ;height for bugged files
+
+Files with bugged width can be (sometimes) detected as so:
+
  (Width*Bits+15)/16*2) > BytesPerLine
+
+Files with bugged height can be detected during decompression:
+
  BeginOfLastScanline >= Filesize (or Filesize-301h for files with palette)
+
+Bugged sample files are SAMPLE.DCX, marbles.pcx and gmarbles.pcx. RLE +decompression may crash when not taking care of such files.

+

Color Planes and Palettes

+

The official ZSoft PCX specs are - wrongly - describing planes as:
+

  plane0 = red         ;\
+  plane1 = green       ; this is WRONG, NONSENSE, does NOT exist
+  plane2 = blue        ;
+  plane3 = intensity   ;/
+
+The 8-color and 16-color EGA images are actually using plane0,1,2,(3) as +bit0,1,2,(3) of the EGA color number; which implies plane0=blue (ie. red/blue +are opposite of the ZSoft document).
+The truecolor and truecolor+alpha formats have plane0..2=red,green,blue (as +described by ZSoft), but they don't have any intensity plane (a few files are +using plane3=alpha).

+

Mono 2-Color Palette

+

This format was intended for 640x200pix 2-color CGA graphics, it's also common +for higher resolution FAX or print images. The general rule for these files is +to use this colors:
+

  color0=black
+  color1=white
+
+There are rumours that color1 could be changed to any of the 16 CGA colors +(supposedly via [10h].bit7-4, but most older & newer 2-color files have +that byte set to 00h, so one would end up with black-on-black).
+Some newer 2-color files contain RGB palette entries [10h]=000000h, +[13h]=FFFFFFh (and [16h..3Fh]=00h-filled or FFh-filled).
+Iview does often display 2-color images with color1=dark green (somewhat +mysteriously; it's doing that even for files that don't contain any CGA color +numbers or RGB palette values that could qualify as dark green).

+

4-Color Palettes

+

This format was intended for 320x200pix 4-color CGA graphics, and the palette +is closely bound to colors available in CGA graphics modes. Color0 is defined +in [10h], and Color1-3 were originally defined in [13h], and later in

+

  color0=[10h].bit7-4  ;(Color0 IRGB)  ;CGA Port 3D9h.bit3-0 (usually 0=black)
+  bright=[13h].bit5                    ;CGA Port 3D9h.bit4    ;\
+  palette=[13h].bit6                   ;CGA Port 3D9h.bit5    ; old method
+  if [13h].bit7 then palette=2         ;CGA Port 3D8h.bit2    ;/
+  if [01h]=05h and [44h]=0001h then                           ;\new "smart"
+    if [14h]>200 or [15h]>200 then bright=1, else bright=0    ; method used in
+    if [14h]>[15h] then palette=0 else palette=1              :/Paintbrush IV
+  if palette=0 and bright=0 then color1..3=02h,04h,06h  ;\green-red-yellow
+  if palette=0 and bright=1 then color1..3=0Ah,0Ch,0Eh  ;/
+  if palette=1 and bright=0 then color1..3=03h,05h,07h  ;\cyan-magenta-white
+  if palette=1 and bright=1 then color1..3=0Bh,0Dh,0Fh  ;/
+  if palette=2 and bright=0 then color1..3=03h,04h,07h  ;\cyan-red-white
+  if palette=2 and bright=1 then color1..3=0Bh,0Ch,0Fh  ;/
+
+Palette=2 uses some undocumented CGA glitch, it was somewhat intended to output +grayscale by disabling color burst on CGA hardware with analog composite +output, but actually most or all CGA hardware is having digital 4bit IRGB +output, which outputs cyan-red-white.
+The new "smart" method is apparently trying to detect if [13h-1Bh] contains RGB +values with Color1=Green or Cyan, and to select the corresponding CGA palette; +unfortunately such PCX files are merely setting 14h,15h to match up with the +"smart" formula, without actually storing valid RGB values in [13h-1Bh].

+

8-Color and 16-Color, with fixed EGA Palettes (version=03h or 04h)

+

These images have 3 or 4 planes. Plane0-3 correspond to bit0-3 of the EGA color +numbers (ie. blue=plane0, green=plane1, red=plane2, and either intensity=plane3 +for 16-color, or intensity=0 for 8-color images).
+Some 8-Color sample images (with version=03h and 04h) can be found bundled with +PC Paintbrush Plus 1.22 for Windows. A 16-color sample called WINSCR.PCX can be +found elsewhere in internet.
+Caution 1: Official ZSoft specs are wrongly claiming plane0=red and +plane2=blue; this is wrong (although Paint Shop Pro 2 is actually implementing +it that way) (whilst MS Paint for Win95b can properly display them) (most other +tools are trying to read a palette from [10h..3Fh], which is usually garbage +filled in version=03h..04h).
+Caution 2: The standard EGA palette is used for version=03h..04h (many docs +claim it to be used for version=03h only).

+

16-Color, with custom EGA/VGA Palettes (version=02h or 05h)

+

These can have 1 plane with 4 bits, or 4 planes with 1 bit. Header[10h..3Fh] +contains a custom 16-color RGB palette with 3x8bit per R,G,B.
+Classic VGA hardware did only use the upper 6bit of the 8bit values.
+Classic EGA hardware did only use the upper 2bit of the 8bit values (that, only +when having a special EGA monitor with support for more than 16 colors).

+

256-Color VGA Palettes (version=05h)

+

These have 1 plane with 8 bits. And a 256-color RGB palette with 3x8bit per +R,G,B appended at end of file.
+The appended 256-color palette should normally exist only in 256-color images, +some PCX tools are reportedly always appending the extra palette to all +version=05h files (even for 2-color files).

+

256-Level Grayscale Images (version=05h and [44h]=0002h)

+

The most obvious and reliable way is to use a palette with grayscale RGB +values. However, Paintbrush IV is explicetly implementing (or ignoring?) an +obscure grayscale format with following settings:
+

  [01h]=version=05h, and [44h]=0002h=grayscale
+
+That settings are used in a file called gmarbles.pcx (which does contain a +256-color RGB palette with gray RGB values, ie. one can simply ignore the +special settings, and display it as normal 256-color image).

+

Default 16-color CGA/EGA Palettes

+

  Color  Name                     IRGB1111 RGB222 RGB888   Windows
+  00h    dark black               0000     000    000000   000000
+  01h    dark blue                0001     002    0000AA   000080
+  02h    dark green               0010     020    00AA00   008000
+  03h    dark cyan                0011     022    00AAAA   008080
+  04h    dark red                 0100     200    AA0000   800000
+  05h    dark magenta             0101     202    AA00AA   800080
+  06h    dark yellow (brown)      0110     210!!  AA5500!! 808000
+  07h    dark white (light gray)  0111     222    AAAAAA   C0C0C0!!
+  08h    bright black (dark gray) 1000     111    555555   808080!!
+  09h    bright blue              1001     113    5555FF   0000FF
+  0Ah    bright green             1010     131    55FF55   00FF00
+  0Bh    bright cyan              1011     133    55FFFF   00FFFF
+  0Ch    bright red               1100     311    FF5555   FF0000
+  0Dh    bright magenta           1101     313    FF55FF   FF00FF
+  0Eh    bright yellow            1110     331    FFFF55   FFFF00
+  0Fh    bright white             1111     333    FFFFFF   FFFFFF
+
+Some notes on number of colors:
+
 CGA supports 16 colors in text mode (but only max 4 colors in graphics mode).
+ EGA supports the same 16 colors as CGA in both text and graphics mode.
+ EGA-with-special-EGA-monitor supports 64 colors (but only max 16 at once).
+ VGA supports much colors (but can mimmick CGA/EGA colors, or similar colors)
+
+CGA is using a 4pin IRGB1111 signal for up to 16 colors in text mode (max 4 +colors in graphics mode), and CGA monitors contain some circuitry to convert +"dark yellow" to "brown" (though cheap CGA clones may display it as "dark +yellow").
+EGA can display CGA colors (with all 16 colors in graphics mode). +EGA-with-special-EGA-monitor uses 6pin RGB222 signals for up to 64 colors (but +not more than 16 colors at once).
+Windows is also using those 16 standard colors (when not having any VGA driver +installed, and also in 256-color VGA mode, in the latter case the 16 standard +colors are held to always available (even if different tasks are trying to +simultanously display different images with different palettes).
+However, Windows has dropped brown, and uses non-pastelized bright colors.

+

PCX files in PSX games

+
  .PCX with RLE used by Jampack Vol. 1 (MDK\CD.HED\*.pcx)
+  .PCX with RLE used by Hot Wheels Extreme Racing (MagDemo52: US_01293\MISC\*)
+  .PCX with RLE used by Metal Gear Solid (slightly corrupted PCX files)
+
+

PCX files in PSX Metal Gear Solid (MGS)

+

MGS is storing some extra data at [4Ah..57h] (roughly resembling the info in +TIM files).
+

  04Ah 2    Custom MGS ID (always 3039h)
+  04Ch 2    Display Mode? (08h/18h=4bit, 09h/19h=8bit)
+  04Eh 2    Bitmap X-coordinate in VRAM (reportedly "divided by 2" ???)
+  050h 2    Bitmap Y-coordinate in VRAM
+  052h 2    Palette X-coordinate in VRAM
+  054h 2    Palette Y-coordinate in VRAM
+  056h 2    Palette number of actually used colors (can be less than 16/256)
+  058h 28h  Reserved (zerofilled)
+  080h ..   Bitmap data (RLE compressed)
+  ...  1    VGA Palette ID (0Ch=256 colors)                      ;\when 8bpp
+  ..   300h VGA Palette (256 colors, 3-byte per color  = R,G,B)  ;/
+  ..   ..   Padding to 4-byte boundary, ie. palette isn't at filesize-301h !!!
+
+MGS has filesize padded to 4-byte boundary. That is causing problems for files +with 256-color palette: The official way to find the palette is to stepback +301h bytes from end of file, which won't work with padding. To find the MGS +palette, one must decompress the whole bitmap, and then expect the 301h-byte +palette to be located after the compressed data.
+As an extra oddity, MGS uses non-square ultra-high DPI values.

+

DCX Archives

+

DCX archives contain multiple PCX files (eg. multi-page FAX documents). The +standard format is as so:
+

  0000h 4     ID (3ADE68B1h) (987654321 decimal)
+  0004h 4000h File List (32bit offsets) (max 1023 files, plus 0=End of List)
+  1004h ..    File Data area (PCX files)
+
+However, some files have the first PCX at offset 1000h (ie. the list is only +3FFCh bytes tall). Reportedly there are also files that start with yet smaller +offsets (for saving space when the file list contains fewer entries).
+The PCX filesize is next-curr offset (or total-curr for last file).

+

References

+

https://www.fileformat.info/format/pcx/egff.htm

+

CDROM File Video 2D Graphics CEL/BGD/TSQ/ANM/SDF (Sony)

+

CEL/BGD/TSQ/ANM/SDF

+

CEL: Cell Data (official format with 8bit header entries)

+

This does merely translate Tile Numbers to VRAM Addresses and Attributes (with +the actual VRAM bitmap data usually being stored in .TIM files).
+

  000h 1   File ID (22h)
+  001h 1   Version (3)
+  002h 2   Flag (bit15=WithAttr, bit14=AttrDataSize:0=8bit,1=16bit, bit13-0=0)
+  004h 2   Number of cell data items (in cell units) (N)
+  006h 1   Sprite Editor Display Window Width  (in cell units)
+  007h 1   Sprite Editor Display Window Height (in cell units)
+  008h ..  Cell Data[N] (64bit entries)
+  ...  ..  Cell Attr[N] (0bit/8bit/16bit user data? depending on Flag)
+
+Cell Data:
+
  0-7   Tex Coord X (8bit)
+  8-15  Tex Coord Y (8bit)
+  16-21 Clut X      (6bit)
+  22-30 Clut X      (9bit)
+  31    Semi-transparency enable        ;-only in Version>=3
+  32    Vertical Reversal   (Y-Flip)    ;\only in Version=0 and Version>=2
+  33    Horizontal Reversal (X-Flip)    ;/
+  34-47 Unused
+  48-52 Texture Page (5bit)
+  53-54 Semi Transparency     (0=B/2+F/2, 1=B+F, 2=B-F, 3=B+F/4)
+  55-56 Texture page colors   (0=4bit, 1=8bit, 2=15bit, 3=Reserved)
+  57-60 Sprite Editor Color Set Number  ;\
+  61    Unused                          ; only in Version>=3
+  62-63 Sprite Editor TIM Bank          ;/     XXX else hardcoded?
+
+This is used in R-Types, CG.1\file3Dh\file00h, but [6,7] are 16bit wide! And +there are a LOT of ZEROes appended (plus FFh-padding due to CG.1 archive size +units).
+Used by R-Types (CG.1\file07h\file01h, size 08h*04h, with 8bit attr)
+Used by R-Types (CG.1\file07h\file03h, size 10h*08h, with 16bit attr)
+Used by R-Types (CG.1\file07h\file05h, size 04h*04h, with 16bit attr)
+Used by Tiny Tank (MagDemo23: TINYTANK\TMD05.DSK\*.CEL, size 08h*05h)

+

CEL16: Inofficial CEL hack with 16bit entries and more extra data (R-Types)

+

This is an inofficial hack used by R-Types, the game does use both the official +CEL and inofficial CEL16 format.
+

  000h 1   File ID (22h)        ;\same as in official CEL version
+  001h 1   Version (3)          ;/
+  002h 2   Flag (...unknown meaning in this case...?)           ;<-- ?
+  004h 2   Number of cell data items (in cell units) (N)
+  006h 2   Sprite Editor Display Window Width  (in cell units)  ;<-- 16bit!
+  008h 2   Sprite Editor Display Window Height (in cell units)  ;<-- 16bit!
+  00Ah ..  Cell Data[N] (64bit entries)
+  ...  ..  Cell Attr[N] (16bit/192bit user data, depending on Flag or so...?)
+
+Used by R-Types (CG.1\file12h\file00h, size 0120h*000Fh with 192bit attr)
+Used by R-Types (CG.1\file15h\file00h, size 0168h*000Fh with ? attr)
+Used by R-Types (CG.1\file1Ch\file00h, size 00D8h*000Fh with ? attr)

+

BGD: BG Map Data (official format with 8bit header entries)

+

  000h 1   File ID (23h)
+  001h 1   Version (0)
+  002h 2   Flag (bit15=WithAttr, bit14=AttrDataSize:0=8bit,1=16bit, bit13-0=0)
+  004h 1   BG Map Width  (in cell units) (W)
+  005h 1   BG Map Height (in cell units) (H)
+  006h 1   Cell Width    (in pixels)
+  007h 1   Cell Height   (in pixels)
+  008h ..  BG Map Data[W*H] (16bit cell numbers)
+  ...  ..  BG Map Attr[W*H] (0bit/8bit/16bit user data? depending on Flag)
+
+Used by R-Types (CG.1\file07h\file00h, official BGD format)
+Used by Cardinal Syn (MagDemo03,09: SYN\SONY\KROLOGO.WAD\.BGD)
+Used by Tiny Tank (MagDemo23: TINYTANK\TMD05.DSK\
.BGD, with 8bit entries).

+

BGD16: Inofficial BGD hack with 16bit entries (R-Types)

+

This is an inofficial hack used by R-Types, the game does use both the official +BGD and inofficial BGD16 format. Apparently invented to support bigger BG Map +Widths for huge sidescrolling game maps.
+

  000h 1   File ID (23h)        ;\same as in official BGD version
+  001h 1   Version (0)          ;/
+  002h 2   Flag (bit15=WithAttr, bit14=AttrDataSize:0=8bit,1=16bit, bit13-0=0)
+  004h 2   BG Map Width  (in cell units) (W)                    ;<-- 16bit!
+  006h 2   BG Map Height (in cell units) (H)                    ;<-- 16bit!
+  008h 2   Cell Width    (in pixels)                            ;<-- 16bit!
+  00Ah 2   Cell Height   (in pixels)                            ;<-- 16bit!
+  00Ch ..  BG Map Data[W*H] (16bit cell numbers)
+  ...  ..  BG Map Attr[W*H] (0bit/8bit/16bit user data? depending on Flag)
+  ...  ..  FFh-padding (in case being stored in R-Types' DOT1 archives)
+
+Used by R-Types (CG.1\file3Ch\file00h, inofficial BGD16 format)

+

TSQ: Animation Time Sequence

+

  000h 1   File ID (24h)
+  001h 1   Version (1)
+  002h 2   Number of Sequence data entries (N)
+  004h N*8 Sequence Data (64bit entries)
+
+Sequence Data:
+
  0-15  Sprite Group Number to be displayed
+  16-23 Display Time
+  24-27 Unused
+  28-31 Attribute (user defined) (only in Version>=1)
+  32-47 Hotspot X Coordinate
+  48-63 Hotspot Y Coordinate
+
+There aren't any known games using .TSQ files.

+

ANM: Animation Information

+

  000h 1    File ID (21h)
+  001h 1    Version (3=normal) (but see below notes on older versions)
+  002h 2    Flag (bit0-1=TPF, bit2-11=0, bit12-15=CLT)
+             0-1   TPF PixFmt (0=4bpp, 1=8bpp, 2/3=Reserved)   ;version>=2 only
+             2-11  -   Reserved (0)
+             12-15 CLT Number of CLUT Groups, for color animation
+  004h 2    Number of Sprites Groups
+  006h 2    Number of Sequences (N) (can be 0=None)
+  008h N*8  Sequence(s) (64bit per entry)  ;Num=[004h]
+  ...  ..   Sprite Group(s)                ;Num=[006h]
+  ...  ..   CLUT Group(s)                  ;Num=[002h].bit12-15
+
+Sequence entries:
+
  000h 2  Sprite Group Number to be displayed (range 0..AnimHdr[004h]-1)
+  002h 1  Display Time (can be 00h or 0Ah or whatever)
+  003h 1  Attribute (bit0-3=Unused/Zero, bit4-7=User defined)  ;version>=3 only
+  004h 2  Hotspot X Coordinate (usually 0, or maybe can be +/-NN ?)
+  006h 2  Hotspot Y Coordinate (usually 0, or maybe can be +/-NN ?)
+
+Sprite Group entries:
+
 Each "Group" seems to represent one animation frame.
+ Each "Group" can contain one or more sprites (aka metatiles).
+ Below stuff is "4+N*14h" bytes, that seems to repeat "AnmHeader[004h] times"
+ XXX... actually below can be "4+N*10h" or "4+N*14h" bytes
+ XXX... so, maybe maybe some entries like width/height are optional?
+  000h 4     Number of Sprites in this Sprite Group ("sprites per metatile"?)
+  004h 14h*N Sprite(s) (see below)
+ Sprites:
+  000h 1   Tex Coord X (8bit)
+  001h 1   Tex Coord Y (8bit)
+  002h 1   Offset X from Hotspot within frame (maybe vertex x ?)
+  003h 1   Offset Y from Hotspot within frame (maybe vertex y ?)
+  004h 2   CBA Clut Base (bit0-5=ClutX, Bit6-14=ClutY, bit15=SemiTransp)
+  006h 2   FLAGs (bit0-4, bit5-6, bit7-8, bit9, bit10, bit11, bit12-15)
+            0-4   TPN Texture Page Number
+            5-6   ABR Semi-Transparency Rate
+            7-8   TPF Pixel depth (0=4bpp, 1=8bpp, 2=16bpp)
+            9     -   Reserved
+            10    RSZ Scaling  (0=No, 1=Scaled)
+            11    ROT Rotation (0=No, 1=Rotated)
+            12-15 THW Texture Width/Height div8 (0=Other custom width/height)
+  008h (2) Texture Width    "of optional size" (uh?)  ;\only present if
+  00Ah (2) Texture Height   "of optional size" (uh?)  ;/FLAGs.bit12-15=0 ?)
+  00Ch 2   Angle of Rotation (in what units?)
+  00Eh 2   Sprite Editor info (bit0-7=Zero, bit8-13=ClutNo, bit14-15=TimBank)
+  010h 2   Scaling X (for Vertex?) (as whatever fixed point number) (eg. 1000h)
+  012h 2   Scaling Y (for Vertex?) (as whatever fixed point number) (eg. 1000h)
+
+CLUT Group entries:
+
  000h 4  CLUT size in bytes (Width*Height*2+0Ch)
+  004h 2  Clut X Coordinate
+  006h 2  Clut Y Coordinate
+  008h 2  Clut Width
+  00Ah 2  Clut Height
+  00Ch .. CLUT entries (16bit per entry, Width*Height*2 bytes)
+
+Note: ALICE.PAC\MENU.PAC\CON00.ANM has NumSequences=0 and NumSpriteGroups=2Dh +(unknown if/how that is animated, maybe it has 2Dh static groups? or the groups +are played in order 0..2Ch with display time 1 frame each?).
+Used by Alice in Cyberland (ALICE.PAC\*.ANM) (ANM v3)
+Unknown if there are any other games are using that format.

+

SDF: Sprite Editor Project File

+

This is an ASCII text file for "artist boards" with following entries:
+

  TIM0 file0.tim             ;\
+  TIM1 file1.pxl file1.clt   ; four TIM banks (with TIM or PXL/CLT files)
+  TIM2                       ; (or no filename for empty banks)
+  TIM3                       ;/
+  CEL0 file0.cel             ;-one CEL (with CEL, or no filename if none)
+  MAP0 file0.bgd             ;\
+  MAP1 file1.bgd             ; four BG MAP banks (with BGD filenames)
+  MAP2                       ; (or no filename for empty banks)
+  MAP3                       ;/
+  ANM0 file0.anm             ;-one ANM (with ANM, or no filename if none)
+  DISPLAY n       ;0-3=256/320/512/640x240, 4-7=256/320/512/640x480
+  COLOR n         ;0=4bpp, 1=8bpp  ;docs are unclear, is it COLORn or COLOR n?
+  ADDR0 texX texY clutX clutY numColorSets ;\
+  ADDR1 texX texY clutX clutY numColorSets ; four texture/palette offsets
+  ADDR2 texX texY clutX clutY numColorSets ; for the corresponding TIM banks
+  ADDR3 texX texY clutX clutY numColorSets ;/ (or whatever for empty banks?)
+

+

CDROM File Video 3D Graphics TMD/PMD/TOD/HMD/RSD (Sony)

+

TMD - Modeling Data for OS Library

+

  000h 4     ID (00000041h)
+  004h 4     Flags (bit0=FIXP, bit1-31=Reserved/zero)
+  008h 4     Number of Objects (N)     ;"integral value" uh?
+  00Ch N*1Ch Object List (1Ch-byte per entry)
+  ...  ..    Data (Vertices, Normals, Primitives)
+
+Object List entries:
+
  000h 4    Start address of a Vertex     ;\Address values depend on the
+  004h 4    Number of Vertices            ; file header's FIXP flag:
+  008h 4    Start address of a Normal     ;  FIXP=0 Addr from begin of Object
+  00Ch 4    Number of Normals             ;  FIXP=0 Addr from begin of TMD File
+  010h 4    Start address of a Primitive  ;
+  014h 4    Number of Primitives          ;/
+  018h 4    Scale (signed shift value, Pos=SHL, Neg=SHR) (not used by LIBGS)
+
+Vertex entries (8-byte):
+
  000h 2    Vertex X (signed 16bit)
+  002h 2    Vertex Y (signed 16bit)
+  004h 2    Vertex Z (signed 16bit)
+  006h 2    Unused
+
+Normal entries (8-byte) (if any, needed only for computing light directions):
+
  000h 2    Normal X (fixed point 1.3.12)
+  002h 2    Normal Y (fixed point 1.3.12)
+  004h 2    Normal Z (fixed point 1.3.12)
+  006h 2    Unused
+
+Primitive entries (variable length):
+
  000h 1    Output Size/4 of the GPU command (after GTE conversion)
+  001h 1    Input Size/4 of the Packet Data in the TMD file
+  002h 1    Flag
+              0   Light source calculation (0=On, 1=Off)
+              1   Clip Back (0=Clip, 1=Don't clip) (for Polygons only)
+              2   Shading (0=Flat, 1=Gouraud)
+                   (Valid only for the polygon not textured,
+                   subjected to light source calculation)
+              3-7 Reserved (0)
+  003h 1    Mode (20h..7Fh) (same as GP0(20h..7Fh) command value in packet)
+  004h ..   Packet Data
+
+Packet Data (for Polygons)
+
  000h 4   GPU Command+Color for that packet (CcBbGgRrh), see GP0(20h..3Fh)
+  ... (4)  Texcoord1+Palette (ClutYyXxh)               ;\
+  ... (4)  Texcoord2+Texpage (PageYyXxh)               ; only if Mode.bit2=1
+  ... (4)  Texcoord3         (0000YyXxh)               ;
+  ... (4)  Texcoord4         (0000YyXxh) ;-quad only   ;/
+  ... (4)  Color2 (00BbGgRrh)                          ;\
+  ... (4)  Color3 (00BbGgRrh)                          ; only if Flag.bit2=1
+  ... (4)  Color4 (00BbGgRrh) ;-quad only              ;/
+  ... (2)  Normal1 (index in Normal list?)  ;always, unless Flag.bit0=1
+  ...  2   Vertex1 (index in Vertex list?)
+  ... (2)  Normal2 (index in Normal list?)             ;-only if Mode.bit4=1
+  ...  2   Vertex2 (index in Vertex list?)
+  ... (2)  Normal3 (index in Normal list?)             ;-only if Mode.bit4=1
+  ...  2   Vertex3 (index in Vertex list?)
+  ... (2)  Normal4 (index in Normal list?) ;\quad only ;-only if Mode.bit4=1
+  ...  2   Vertex4 (index in Vertex list?) ;/
+  ... (2)  Unused zeropadding (to 4-byte boundary)
+
+Packet Data (for Lines)
+
  000h 4   GPU Command+Color for that packet (CcBbGgRrh), see GP0(40h,50h)
+  ... (4)  Color2 (00BbGgRrh)                          ;-only if Mode.bit4=1
+  ...  2   Vertex1 (index in Vertex list?)
+  ...  2   Vertex2 (index in Vertex list?)
+
+Packet Data (for Rectangle/Sprites)
+
  000h 4   GPU Command+Color for that packet (CcBbGgRrh), see GP0(60h..7Fh)
+  ...  ..  Unknown, reportedy "with 3-D coordinates and the drawing
+           content is the same as a normal sprite."
+
+Note: Objects should usually contain Primitives and Vertices (and optionally +Normals), however, N2O\SHIP.TMD does contain some dummy Objects with Number of +Vertices/Normals/Primitives all set to zero.
+Used by Playstation Logo (in sector 5..11 on all PSX discs, 3278h bytes)
+Used by ...???model???... (MagDemo54: MODEL\.BIN\.TMD)
+Used by Alice in Cyberland (ALICE.PAC\xxx_TM*.FA\.TMD)
+Used by Armored Core (MagDemo02: AC10DEMP\MS\MENU_TMD.T\
)
+Used by Bloody Roar 1 (MagDemo06: CMN\EFFECT.DAT\0005h)
+Used by Deception III Dark Delusion (MagDemo33: DECEPT3\K3_DAT.BIN\056A,0725\)
+Used by Gundam Battle Assault 2 (DATA\
.PAC\)
+Used by Hear It Now (Playstation Developer's Demo) (*.TMD and FISH.DAT).
+Used by Jersey Devil (MagDemo10: JD\
.BZZ\)
+Used by Klonoa (MagDemo08: KLONOA\FILE.IDX\
)
+Used by Legend of Dragoon (MagDemo34: LOD\DRAGN0.BIN\16xxh)
+Used by Macross VF-X 2 (MagDemo23: VFX2\DATA01\.TMD)
+Used by Madden NFL '98 (MagDemo02: TIBURON\MODEL01.DAT\
)
+Used by No One Can Stop Mr. Domino (MagDemo18: DATA\, .TMD and DOT1\TMD)
+Used by O.D.T. (MagDemo17: ODT\
.LNK\)
+Used by Parappa (MagDemo01: PARAPPA\COMPO01.INT\3\
.TMD)
+Used by Resident Evil 1 (PSX\ITEM_M1\.DOR\0001)
+Used by Starblade Alpha (FLT\SB2.DAT\
and TEX\SB2.DAT\)
+Used by Tiny Tank (MagDemo23: TINYTANK\TMD*.DSK\
.TMD)
+Used by WCW/nWo Thunder (MagDemo19: THUNDER\RING\.TMD)
+Used by Witch of Salzburg (the MODELS\
.MDL\.TMD)
+Used by Scooby Doo and the Cyber Chase (MagDemo54: MODEL\
\*)

+

PMD - High-Speed Modeling Data

+

This is about same as TMD, with less features, intended to work faster.
+

  000h 4    ID (00000042h)
+  004h 4    Offset to Primitives
+  008h 4    Offset to Shared Vertices (or 0=None)
+  00Ch 4    Number of Objects
+  010h ..   Objects         (4+N*4 bytes each, with offsets to Primitives)
+  ...  ..   Primitives
+  ...  ..   Shared Vertices (8-bytes each, if any)
+
+Vertex entries (8-byte):
+
  000h 2    Vertex X (signed 16bit)
+  002h 2    Vertex Y (signed 16bit)
+  004h 2    Vertex Z (signed 16bit)
+  006h 2    Unused
+
+Objects:
+
  000h 4    Number of Primitives
+  004h N*4  Offsets to Primitives ... maybe relative to hdr[004h] ?
+
+Primitives:
+
  000h 2    Number of Packets
+  002h 2    Type flags
+             0    Polygon   (0=Triangle, 1=Quadrilateral)
+             1    Shading   (0=Flat, 1=Gouraud)           ;uh, with ONE color?
+             2    Texture   (0=Texture-On, 1=Texture-Off) ;uh, withoutTexCoord?
+             3    Shared    (0=Independent vertex, 1=Shared vertex)
+             4    Light source calculation (0=Off, 1=On)  ;uh, withoutNormal?
+             5    Clip      (0=Back clip, 1=No back clip)
+             6-15 Reserved for system
+  004h ...  Packet(s)
+
+Packet entries, when Type.bit3=0 (independent vertex):
+
  000h 4   GPU Command+Color for that packet (CcBbGgRrh), see GP0(20h..7Fh)
+  004h 8   Vertex1 (Xxxxh,Yyyyh,Zzzzh,0000h)
+  00Ch 8   Vertex2 (Xxxxh,Yyyyh,Zzzzh,0000h)
+  014h 8   Vertex3 (Xxxxh,Yyyyh,Zzzzh,0000h)
+  01Ch (8) Vertex4 (Xxxxh,Yyyyh,Zzzzh,0000h) ;<-- only when Type.bit0=1 (quad)
+
+Packet entries, when Type.bit3=1 (shared vertex):
+
  000h 4   GPU Command+Color for that packet (CcBbGgRrh), see GP0(20h..7Fh)
+  004h 4   Offset to Shared Vertex1    ;offsets are
+  008h 4   Offset to Shared Vertex2    ;"from the start of a row"
+  00Ch 4   Offset to Shared Vertex3    ;aka from "Packet+04h" ?
+  010h (4) Offset to Shared Vertex4          ;<-- only when Type.bit0=1(quad)
+
+Unknown if/how Texture/Light is implemented... without TexCoords/Normals?
+Unknown if/how Gouraud is implemented... with ONE color and without Normals?
+Used only by a few games:
+
  Cool Boarders 2 (MagDemo02: CB2\DATA3\*.PMD)
+  Cardinal Syn (MagDemo03,09: SYN\*\*.WAD\*.PMD)    (4-byte hdr plus PMD file)
+  Sesame Streets Sports (MagDemo52: SSS\LV*\*MRG\*) (4-byte hdr plus PMD file)
+
+Unknown if/which other games are using the PMD format.

+

TOD - Animation Data

+

  000h 1    ID (50h)
+  001h 1    Version (0)
+  002h 2    Resolution (time per frame in 60Hz units, can be 0) (60Hz on PAL?)
+  004h 4    Number of Frames
+  008h ..   Frame1
+  ...  ..   Frame2
+  ...  ..   Frame3
+  ...  ..   etc.
+
+Frames:
+
  000h 2    Frame Size in words (ie. size/4)
+  002h 2    Number of Packets (can be 0=None, ie. do nothing this frame)
+  004h 4    Frame Number (increasing 0,1,2,3,..)
+  008h ...  Packet(s)
+
+Packet:
+
  000h 2    Object ID
+  002h 1    Type/Flag (bit0-3=Type, bit4-7=Flags)
+  003h 1    Packet Size ("in words (4 bytes)")
+  004h ...  Packet Data
+
+XXX... in Sony's doc.
+Used by Witch of Salzburg (ANIM\ANM0\ANM0.TOD) (oddly with [02h]=0000h)
+Used by Parappa (MagDemo01: PARAPPA\COMPO01.INT\3\.TOD)
+Used by Macross VF-X 2 (MagDemo23: VFX2\DATA01\
.TOD and *.TOX)
+Used by Alice in Cyberland (ALICE.PAC\xxx_T*.FA\*.TOD)
+Unknown if/which other games are using the TOD format.

+

HMD - Hierarchical 3D Model, Animation and Other Data

+

  000h 4    ID (00000050h)   ;same as in TOD, which CAN ALSO have MSBs=zero(!)
+  004h 4    MAP FLAG (0 or 1, set when mapped via GsMapUnit() function)
+  008h 4    Primitive Header Section pointer (whut?)
+  00Ch 4    Number of Blocks
+  010h 4*N  Pointers to Blocks
+  ...       Primitive Header section    (required)
+  ...       Coordinate section          (optional)
+  ...       Primitive section           (required)
+
+This format is very complicated, see Sony's "File Formats" document for +details.
+.HMD used by Brunswick Bowling (MagDemo13: THQBOWL\).
+.HMD used by Soul of the Samurai (MagDemo22: RASETSU\0\OPT01T.BIN\0\0\
)
+.HMD used by Bloody Roar 2 (MagDemo22: LON\LON*.DAT\*, ST5\ST*.DAT\02h..03h)
+.HMD used by Ultimate Fighting Championship (MagDemo38: UFC\CU00.RBB\6Bh..EFh)
+Unknown if/which games other are using the HMD format.

+

RSD Files (RSD,PLY,MAT,GRP,MSH,PVT,COD,MOT,OGP)

+

RSD files consist of a set of several files (RSD,PLY,MAT,etc). The files +contain the "polygon source code" in ASCII text format, generated from Sony's +"SCE 3D Graphics Tool". For use on actual hardware, the "RSDLINK" utility can +be used to convert them to binary (TMD, PMD, TOD?, HMB?) files.
+

  RSD Main project file
+  PLY Polygon Vertices (Vertices, Normals, Polygons)
+  MAT Polygon Material (Color, Blending, Texture)
+  GRP Polygon Grouping
+  MSH Polygon Linking                   ;\
+  PVT Pivot Rotation center offsets     ; New Extended
+  COD Vertex Coordinate Attributes      ; (since RSD version 3)
+  MOT Animation Information             ;/
+  OGP Vertex Object Grouping            ;-Sub-extended
+
+All of the above files are in ASCII text format. Each file is starting with a +"@typYYMMDD" string in the first line of the file, eg. "@RSD970401" for RSD +version 3. Vertices are defined as floating point values (as ASCII strings).
+There's more info in Sony's "File Formats" document, but the RSD stuff isn't +used on retail discs. Except:
+
  RSD/GRP/MAT/PLY (and DXF=whatever?) used on Yaroze disc (DTL-S3035)
+

+

CDROM File Video STR Streaming and BS Picture Compression (Sony)

+

STR Files (movie streams)

+

CDROM File Video Streaming STR (Sony)
+CDROM File Video Streaming STR Variants
+CDROM File Video Streaming Framerate
+CDROM File Video Streaming Audio
+CDROM File Video Streaming Chunk-based formats
+CDROM File Video Streaming Mis-mastered files
+Apart from the 20h-byte STR headers, movies basically consist of a series of BS +files (see below).

+

BS Files (Huffman compressed MDEC codes)

+

BS stands for bitstream, which might refer to the use in STR files, or to the +Huffman bitstreams.
+CDROM File Video BS Compression Versions
+CDROM File Video BS Compression Headers
+The header is followed by the bitstream...
+

  v1/v2/v3/ea/iki --> first bit in bit15 of first halfword (good for psx)
+  v0              --> first bit in bit7 of first byte (not so good for psx)
+  (to use the same decoder for all version: swap each 2 bytes in v0)
+
+For each block, the bitstream contains one DC value, up to 63 AC values, +terminated by EOB (end of block).
+CDROM File Video BS Compression DC Values
+CDROM File Video BS Compression AC Values
+Apart from being used in STR movies, BS can be also used to store single +pictures:
+CDROM File Video BS Picture Files

+

Wacwac (similar as BS, but with completely different Huffman codes)

+

CDROM File Video Wacwac MDEC Streams

+

Credits

+

Thanks to Michael Sabin for info on various STR and BS variants:
+https://github.com/m35/jpsxdec/

+

CDROM File Video Streaming STR (Sony)

+

.STR Sectors (with 20h-byte headers) (for MDEC Movies, or User data)

+

  000h 2    StStatus (0160h) (RV6Rh; R=Reserved=0, V=Version=1, 6=Fixed ID)
+  002h 2    StType (0000h..7FFFh=User Defined, 8000h..FFFFh=System; 8001h=MDEC)
+  004h 2    StSectorOffset (Sector number in the frame, 0=First)
+  006h 2    StSectorSize   (Number of sectors in the frame) (eg. 4 or 5)
+  008h 4    StFrameNo      (Frame number, 1=First) (except Viewpoint=0)
+  00Ch 4    StFrameSize    (in bytes, in this frame, excluding headers/padding)
+ When StType=0000h..7FFFh:
+  010h 10h  StUser         (user defined data)
+  020h 7E0h User data      (more user defined data)
+ When StType=8001h=MDEC (the only system defined type) (with StStatus=0160h):
+  010h 2    StMovieWidth                  (eg. 0140h)
+  012h 2    StMovieHeight                 (eg. 00F0h)
+  014h 4    StHeadM (reserved for system) (eg. 38000720h) ;\same as [020h-027h]
+  018h 4    StHeadV (reserved for system) (eg. 00020001h) ;/from 1st STR sector
+  01Ch 4    Unspecified                   (eg. 00000000h) (except Viewpoint<>0)
+  020h 7E0h Data (in BS format) (or padding, when image is smaller than frame)
+
+The default file extension .STR is used by various games (though some games use +other extensions, the .FMV files in Tomb Raider do also contain standard +20h-byte .STR sector headers).

+

Video Frames

+

The video frames consist of BS compressed images (that is, all sectors have STR +headers at 000h..01Fh, and the first sector of each frame does additionally +contain a standard BS fileheader at offset 020h..027h).
+

  See "CDROM File Video BS Compression" chapters
+
+Less common, there is also a format for streaming polygon animations instead of +BS compressed bitmaps:
+CDROM File Video Polygon Streaming

+

STR Resolution

+

The Width/Height entries are almost always multiples of 16 pixels. But there +are a few exceptions:
+

  Height=260 (104h) in Star Wars Rebel Assault II, NTSC (S1\L01_PLAY.STR)
+  Height=200 (0C8h) in Perfect Assassin (DATA.JFS\CDV\*.STR)
+  Height=40  (028h) in Gran Turismo 1 (TITLE.DAT\*, MagDemo10 and MagDemo15)
+  Width=232  (0E8h) in Gran Turismo 1 (TITLE.DAT\*, MagDemo10 only)
+
+For such videos, the width/height of MDEC decompression buffer in RAM must be +rounded up to multiples of 16 pixels (and the decompressed picture should be +cropped to the STR header width/height before forwarding it to VRAM).
+Note: The extra scanlines are usually padded with the bottom-most scanline +(except, Gran Turismo 1 has gray-padding in lower/right pixels). Ideally, one +would repeat the bottom-most pixels in zigzag order.

+

Subtitles

+

Metal Gear Solid MGS\ZMOVIE.STR contains subtitles as text strings: The first +sector of the .STR file is something custom (without STR header), the remaining +movie consists of STR sectors with StType=0001h for subtitles and StType=8001h +for picture frames.
+Unknown if other games are using the same method, or other methods.
+Obviously, subtitles could be also displayed as part of the compressed image, +but text strings are much smaller, have better quality, and would also allow to +support multiple languages.

+

CDROM File Video Streaming STR Variants

+

STR ID Values

+
  2-byte  0160h         ;Standard STR header
+  1-byte  01h           ;Ace Combat 3 Electrosphere
+  4-byte  "SMJ",01h     ;Final Fantasy 8, Video
+  4-byte  "SMN",01h     ;Final Fantasy 8, Audio/left
+  4-byte  "SMR",01h     ;Final Fantasy 8, Audio/righ
+  4-byte  0000000xh     ;Judge Dredd
+  4-byte  DDCCBBAAh     ;Crusader: No Remorse, older Electronic Arts
+  4-byte  08895574h     ;Chunk header in 1st sector only, Best Sports (demo)
+  4-byte  "VLC0"        ;Chunk header in 1st sector only, newer Electronic Arts
+  4-byte  "VMNK"        ;Chunk header in 1st sector only, Policenauts
+  4-byte  01h,"XSP"     ;Sentient header in 1st sector only
+  N-byre  zero(es)      ;Polygons? (in last 150Mbyte of PANEKIT.STR)
+
+

STR Type values (for videos that do have STR ID=0160h):

+

The official definition from Sony's File Formats document is as so;
+

  0000h..7FFFh=User Defined
+  8000h..FFFFh=System (with 8001h=MDEC being the only officially defined type)
+
+In practice, the following values are used (of which, 8001h is most common).
+
  0000h=Polygon Video, Wacwac as Polygon Stream
+  0000h=Polygon Video?, Army Men Air Attack 2 (MagDemo40: AMAA2\*.PMB)
+  0000h=MDEC Video, Alice in Cyberland
+  0001h=MDEC Video, Ridge Racer Type 4 (PAL version, 320x176 pix)
+  0001h=Whatever extra data for XA-ADPCM streams (Bits Laboratory games)
+  0001h=Whatever non-audio waverform? (3D Baseball)
+  0001h=Subtitles, Metal Gear Solid MGS\ZMOVIE.STR
+  0002h=Software-rendered video (without using MDEC/GTE) (Cyberia)
+  0002h=MDEC Video, Wacwac with IntroTableSet
+  0003h=MDEC Video, Wacwac with EndingTableSet
+  0004h=MDEC Video, Final Fantasy 9 (MODE2/FORM2)
+  0008h=SPU-ADPCM, AKAO audio (Final Fantasy 9)
+  0000h=SPU-ADPCM, AKAO audio (Chrono Cross Disc 1, Legend of Mana)
+  0001h=SPU-ADPCM, AKAO audio (Chrono Cross Disc 1, Legend of Mana)
+  0100h=SPU-ADPCM, AKAO audio (Chrono Cross Disc 2)
+  0101h=SPU-ADPCM, AKAO audio (Chrono Cross Disc 2)
+  0000h=Whatever special, channel 0 header (Nightmare Project: Yakata)
+  0400h=Whatever special, channel 1 header (Nightmare Project: Yakata)
+  0001h=Whatever special, channel 0 data   (Nightmare Project: Yakata)
+  0401h=Whatever special, channel 1 data   (Nightmare Project: Yakata)
+  5349h=MDEC Video, Gran Turismo 1 and 2 (with BS iki)
+  0078h=MDEC Ending Dummy  (Mat Hoffman's Pro BMX (MagDemo48: MHPB\SHORT.STR)
+  5673h=MDEC Leading Dummy (Mat Hoffman's Pro BMX (MagDemo48: MHPB\SHORT.STR)
+  8001h=MDEC Video, Standard MDEC (most common type value)
+  8001h=Polygon Video (Ape Escape) (same ID as standard MDEC)
+  8001h=Eagle One: Harrier Attack various types (MDEC and other data)
+  8001h=Dance series SPU-ADPCM streaming (with STR[1Ch]=DDCCBBAAh)
+  8101h=MDEC Video, Standard MDEC plus bit8=FlagDisc2 (Chrono Cross Disc 2)
+

+

Leading XA-ADPCM

+

Most movies start with STR video sectors. But a few games start with XA-ADPCM:
+

  Ace Combat 3 Electrosphere (*.SPB)
+  Alice in Cyber Land (*.STR)
+  Judge Dredd (*.IXA) ;and very small 4-byte STR header
+  ReBoot (MOVIES\*.WXA)
+
+Also, Aconcagua (Wacwac) has XA-ADPCM before Video (but, yet before that, it +has 150 leading zerofilled sectors).
+Also, Porsche Challenge (SRC\MENU\STREAM\*.STR) starts with corrupted +Subheaders, which may appear as leading XA-ADPCM (depending on how to +interprete the corrupted header bits).

+

Leading SPU-ADPCM

+
  EA videos     ;\
+  Crusader      ; chunks
+  Policenauts   ;/
+  AKAO videos
+
+

Metal Gear Solid (MGS\ZMOVIE.STR, 47Mbyte)

+

This is an archive dedicated to STR movies (with number of frames instead of +filesize entries). Metal Gear Solid does also have cut-scenes with polygon +animations (but those are supposedly stored elsewhere?).
+

  000h 4    Number of entries (4)
+  004h N*8  File List
+  ...  ..   Zerofilled
+
+File List entries:
+
  000h 2    Unknown... decreasing values?
+  002h 2    Number of Frames (same as last frame number in STR header)
+  004h 4    Offset/800h (to begin of STR movie, with subtiltes in 1st sector)
+
+Disc 1 has four movies: The first one has a bit more than 12.5 sectors/frame, +the other three have a bit more than 10 sectors/frame (eg. detecting the +archive format could be done checking for entries wirh 8..16 sectors/frame).
+Example, from Disc 1:
+
  04 00 00 00
+  ED 97 9E 01  01 00 00 00 ;num sectors=1439h ;div19Eh=C.81h ;97EDh-6137h=36B6h
+  37 61 86 01  3A 14 00 00 ;num sectors=0F41h ;div186h=A.03h ;6137h-38D0h=2867h
+  D0 38 10 03  7B 23 00 00 ;num sectors=1EA1h ;div310h=A.00h ;38D0h-2302h=15CEh
+  02 23 73 02  1C 42 00 00 ;num sectors=1881h ;div273h=A.01h ;2302h-0000h=2302h
+
+The files in the ZMOVIE.STR archive start with subtitles in 1st sector (this is +usually/always only one single sector for the whole movie):
+
  000h 2    STR ID   (0160h)                                       ;\
+  002h 2    STR Type (0001h=Subtitles)                             ;
+  004h 2    Sector number within Subtitles (0)                     ; STR
+  006h 2    Number of Sectors with Subtitles (1)                   ; header
+  008h 4    Frame number (1)                                       ;
+  00Ch 4    Data size counted in 4-byte units (same as [02Ch]/4)   ;
+  010h 10h  Zerofilled                                             ;/
+  020h 4    Unknown (2)                                            ;\
+  024h 4    Unknown (1AAh, 141h, or 204h)                          ; Data
+  028h 4    Unknown (00100000h)                                    ; part
+  02Ch 4    Size of all Subtitle entries in bytes plus 10h         ;
+  030h ..   Subtitle entries                                       ;/
+  ...  ..   Zeropadding to 800h-byte boundary                      ;-padding
+
+Subtitle entries:
+
  000h 4    Offset from current subtitle to next subtitle (or 0=Last subtitle)
+  004h 4    First Frame number when to display the subtitle?
+  008h 4    Number of frames when to display the subtitle?
+  00Ch 4    Zero
+  010h ..   Text string, terminated by 00h
+  ...  ..   Zeropadding to 4-byte boundary
+
+The text strings are ASCII, with special 2-byte codes (80h,7Bh=Linebreak, +1Fh,20h=u-Umlaut, etc).

+

Customized STR Video Headers

+
Viewpoint (with slightly modified STR header)
+
  008h 4    Frame number (0=First)                      ;<-- instead of 1=First
+  01Ch 2    Unknown (always D351h)                      ;<-- instead of zero
+  01Eh 2    Number of Frames in this STR file           ;<-- instead of zero
+
+
Capcom games
+

Resident Evil 2 (ZMOVIE\.STR, PL0\ZMOVIE\.STR)
+Super Puzzle Fighter II Turbo (STR/CAPCOM15.STR)
+

  01Ch 4    Sector number of 1st sector of current frame  ;<-- instead of zero
+

+
Chrono Cross Disc 2 Video
+

Chrono Cross Disc 1 does have normal STR headers, but Disc 2 has Type.bit8 +toggled:
+

  002h 2    STR Type (8101h=Disc 2)                       ;<-- instead of 8001h
+
+And, the Chrono Cross "final movie" does reportedly have "additional +properties". Unknown, what that means, it does probably refer to the last movie +on Chrono Cross Disc 2, which is quite huge (90Mbyte), and has lower resolution +(160x112), and might have whatever "additional properties"?

+
Need for Speed 3
+

Need for Speed 3 Hot Pursuit (MOVIES\.XA, contains videos, not raw XA-ADPCM)
+Jackie Chan Stuntmaster (FE\MOVIES\
.STR)
+With slightly modified STR headers:
+

  014h 4    Number of Frames (..excluding last some frames?) ;-instead BS[0..3]
+  018h 4    Unlike the above modified entry, this is normal  ;-copy of BS[4..7]
+

+
ReBoot (MOVIES\*.WXA)
+

This has leading XA-ADPCM, and customized STR header:
+

  014h 2    Type (0000h=Normal, 01FFh=Empty frames at end of video)
+  016h 2    Number of Frames (excluding empty ones at end of video)
+  018h 8    Zerofilled
+

+
Gran Turismo 1 (230Mbyte STREAM.DAT) and Gran Turismo 2 (330Mbyte STREAM.DAT)
+

These two games use BS iki format, and (unlike other iki videos) also special +STR headers:
+

  002h 2    STR Type (5349h) ("IS")         ;-special (instead 8001h)
+  010h 2    Total number of frames in video ;-special (instead width)
+  012h 2    Flags (bit15=1st, bit14=last)   ;-special (instead height)
+  014h 8    Zero                            ;-special (instead BS header copy)
+  020h 7E0h Data (in BS iki format)         ;-BS iki header (with width/height)
+
+Caution: The STR header values aren't constant throughout the frame:
+
  Namely, flags in [012h] are toggled on first/last sector of each frame,
+  and of course [04h] does also increase per sector.
+

+
PGA Tour 96, 97, 98 (VIDEO..\.XA and ZZBUFFER\.STR)
+

Used by all movies in PGA Tour 96, 97 (and for the ZZBUFFER\BIGSPY.STR dummy +padding movie in PGA Tour 98).
+The videos have normal BS v2 data, but the Frame Size entry is 8 smaller than +usually. As workaround, always load [0Ch]+8 for all movies with standard STR +headers (unless that would exceed [06h]*7E0h).
+

  00Ch 4    Frame Size-8 (ie. excluding 8-byte BS header)  ;instead of Size-0
+
+The padding videos in ZZBUFFER folder have additional oddities in STR header:
+
  ZZBUFFER\SPY256.STR    [14h..1Fh]=normal copy of 8-byte BS v2 header and zero
+  ZZBUFFER\SPYGLASS.STR  [14h..1Fh]=zerofilled                          ;\BS v1
+  ZZBUFFER\SPYTEST.STR   [14h..1Fh]=00 00 10 00 00 00 00 09 00 00 07 EE ;/
+  ZZBUFFER\BIGSPY.STR    Used in PGA Tour 98 (instead of above three files)
+
+SPYTEST.STR has nonsense quant values exceeding the 0000h..003Fh range (first +frame has quant=00B1h, and later frames go as high as quant=FFxxh, that kind of +junk is probably unrelated to BS fraquant). The oddities for SPYTEST.STR do +also occur in some frames in PGA Tour 98 BIGSPY.STR. Anyways, those ZZBUFFER +files seem to be only unused padding files.

+
Alice in Cyber Land (*.STR)
+

Note: First sector contains XA-ADPCM audio (video starts in 2nd sector).
+

 STR Sector Header:
+  002h 2    STR Type (0000h=Alice in Cyber Land video)            ;-special
+  008h 4    Frame number (1=First) (bit15 set in last frame, or FFFFh)
+  010h 10h  Zerofilled (instead width/height and BS header copy)  ;-special
+  020h 7E0h Data (in BS v2 format)
+
+Frames are always 320x240.
+The frame number of the last used frame of a movie has the bit15 set. After +that last frame, there are some empty frame(s) with frame number FFFFh.
+For some reason there are "extra audio sectors in between movies" (uh?).
+Many of the movies have a variable frame rate. All movies contain frames +sequences that match one of the following frame rates: 7.5 fps, 10 fps, 15 fps, +30 fps.

+
Encrypted iki (Panekit - Infinitive Crafting Toy Case)
+
  014h 8    Copy of decrypted BS header (instead of encrypted BS header)
+
+
Princess Maker: Yumemiru Yousei (PM3.STR)
+
Parappa (Japanese Demo version only) (S0/GUIDE.STR)
+

These files do have BS ID=3000h (except, the first and last some frames have +nromal ID=3800h). The STR header is quite normal (apart from reflecting the odd +BS ID):
+

  016h 2    Copy of BS ID, 3000h in most frames (instead of 3800h)
+  020h 7E0h Data (in BS format, also with BS ID 3000h, instead of 3800h)
+

+
Starblade Alpha and Galaxian 3
+

These movies have Extra stuff in the data section. The STR header is quite +normal (apart from reflecting the Extra stuff):
+

  00Ch 4    Frame Size in bytes (=size of ExtraHeader + BsData + ExtraData)
+  014h 4    Copy of Extra Header        ;instead of BS[0..3]
+  018h 4    Copy of BS[0..3]            ;instead of BS[4..7]
+  020h 7E0h Data (ExtraHeader + BsData + ExtraData)
+
+The data part looks as so:
+
  000h 2    Size of BS Data area    (S1)        ;\Extra Header
+  002h 2    Size of Extra Data area (S2)        ;/
+  004h S1   BS Data (in BS v3 format)           ;-BS Data
+  ..   S2   Extra Data (unknown purpose)        ;-Extra Data
+
+Note: Starblade Alpha does use that format for GAMEn.STR and NAME.STR in FLT +and TEX folders (the other movies in that game are in normal STR format).

+
Largo Winch: Commando SAR (FMV\NSPIN_W.RNG)
+

This is a somewhat "normal" movie, without audio, and with the STR headers +moved to the begin of the file:
+

  000h Nx20h   STR Headers  ;size = filesize/800h*20h
+  ...  Nx7E0h  Data         ;size = filesize/800h*7E0h
+
+Note: The movie contains the rotating "W" logo, which is looped in Start +screen.

+
Player Manager (1996, Anco Software) (FILMS\1..3\*.STR)
+

  006h 2    Number of Sectors in this Frame-1 (8..9 = 9..10 sectors)
+  00Ch 4    Frame Size in bytes               (8..9*7E0h = 3F00h or 46E0h)
+  010h 2    Bitmap Width                      (always F0h)
+  012h 2    Bitmap Width                      (always 50h)
+  014h 0Ch  Zerofilled (instead copy of BS header or copy of Extra header)
+  020h 7E0h Data (Extra Stuff, BS v2 data, plus Unused stuff)
+
+The data part occupies 9-10 sectors, consisting of:
+
  0000h Extra Stuff   (7E0h bytes, whatever, often starts with 00,FF,00,FF,..)
+  07E0h BS v2 data    (3720h or 3F00h bytes, including FFh-padding)
+  ...   Unused Sector (7E0h bytes, same as in previous frame or zerofilled)
+
+The compressor tries to match the picture quality to the number of sectors per +frame, but it's accidentally leaving the last sector unused:
+
  For 9 sectors:  Only 1..7 are used, sector 8 is same as in previous frame
+  For 10 sectors: Only 1..8 are used, sector 9 is zerofilled
+
+Apart from the odd format in FILMS\1..3\.STR, the game does also have normal +videos in FILMS\.STR.

+
Chiisana Kyojin Microman (DAT\STAGE*\*.MV)
+

The .MV files have 5 sectors/frame: Either 5 video sectors without audio, or +4-5 video sectors plus XA-ADPCM audio (in the latter case, audio is in each 8th +sector (07h,0Fh,17h,1Fh,etc), hence having filesize rounded up to N*8 sectors):
+

  Filesize = 800h*((NumberOfFrames*5))             ;5 sectors, no xa-adpcm
+  Filesize = 800h*((NumberOfFrames*5+7) AND not 7) ;4-5 sectors, plus xa-adpcm
+
+Caution: The STR header values aren't constant throughout the frame:
+
  Sector 0: [10h] = Number of Frames,   [12h]=Junk
+  Sector 1: [10h] = Junk,               [12h]=0
+  Sector 2: [10h] = Junk,               [12h]=Junk
+  Sector 3: [10h] = Junk,               [12h]=Same as below (Bitmap Height)
+ Below ONLY when having 5 sectors per frame:
+  Sector 4: [10h] = Bitmap Width (140h) [12h]=Bitmap Height (D0h)
+ That is, frames with 4 sectors do NOT have any Bitmap Width entry
+ (the duplicated Height entry in sector 3 exists, so one could compute
+ Width=NumMacroBlocks*100h/Height, or assume fixed Width=320, Height=208).
+
+The Junk values can be zero, or increase/decrease during the movie, some or all +of them seem to be sign-expanded from 12bit (eg. increasing values can wrap +from 07xxh to F8xxh).
+Apart from the odd DAT\STAGE*\.MV files, the game does also have .STR files +with normal STR headers and more sectors per frame (DAT\STAGE16,21,27\.STR, +DAT\OTHER\.STR, DAT\OTHER\CM\.STR, and MAT\DAT\*.STR).

+
Black Silence padding
+

Used by Bugriders: The Race of Kings (MOVIE\XB.STR)
+Used by Rugrats Studio Tour (MagDemo32: RUGRATS\DATA\OPEN\
B.STR)
+

  Each movie file is followed by dummy padding file. For example, in Bugriders:
+  MOVIE\*XA.STR  Movie clip             (with correct size, 320x192)
+  MOVIE\*XB.STR  Black Silence padding  (wrong size 640x192, should be 320x192)
+
+The names are sorted alphabetically and exist in pairs (eg. CHARMXA.STR and +CHARMXB.STR), and the disc sectors are following the same sort order.
+The padding files contain only black pixels and silent XA-ADPCM sectors, with +following unique STR header entries, notably with wrong Width entry (the MDEC +data contains only 320x192 pixels).
+
  00Ch 4    Frame Size    (087Ch)
+  010h 2    Bitmap Width  (wrongly set to 640, should be 320)
+  012h 2    Bitmap Height (192)
+  014h 2    MDEC Size     (05A0h)
+  016h 2    BS ID         (3800h)
+  018h 2    BS Quant      (0001h)
+  01Ah 2    BS Version    (0002h)
+  Filesize is always 44Fh sectors (about 2.2Mbyte per *XB.STR file)
+
+The huge 7 second padding is a very crude way to avoid the next movie to be +played when not immediately pausing the CDROM at end of current movie.

+
Ridge Racer Type 4 (only PAL version) (R4.STR)
+

The 570Mbyte R4.STR file contains XA-ADPCM in first three quarters, and two STR +movies in last quarter:
+

  1st NTSC/US movie: 320x160 pix, 0F61h frames, 4-5 sectors/frame, normal STR
+  1st PAL/EUR movie: 320x176 pix, 0CD0h frames, 5-6 sectors/frame, special STR
+  2nd NTSC/US movie: 320x160 pix, 1D6Ah frames, 4-5 sectors/frame, normal STR
+  2nd PAL/EUR movie: 320x160 pix, 18B5h frames, 5-6 sectors/frame, normal STR
+
+As seen above, the PAL movies have lower framerate. And, the 1st PAL movie has +higher resolution, plus some other customized STR header entries:
+
  002h 2    STR Type (0001h=Custom, 176pix PAL video)         ;instead of 8001h
+  006h 2    Number of Sectors in this Frame (always 5..6)
+  00Ch 4    Frame Size (always 2760h or 2F40h, aka 7E0h*5..6)
+  012h 2    Bitmap Height (00B0h, aka 176 pixels)             ;instead of 00A0h
+  014h 8    Zerofilled                                        ;instead BS[0..7]
+  020h 7E0h Data (in BS v3 format, plus FFh-padding)
+
+That is, the special video is standard MDEC, the only problem is detecting it +as such (despite of the custom STR Type entry).

+
Mat Hoffman's Pro BMX (MagDemo48: MHPB\SHORT.STR)
+

This contains a normal MDEC movie, but with distorted "garbage" in first and +last some sectors.
+

  1st sector          STR Type 5673h (Leading Dummy)                ;\
+  2nd sector          STR Type 8001h (distorted/empty MDEC)         ; junk
+  3rd..6th sector     STR Type 8001h (distorted/garbage MDEC)       ;/
+  7th sector and up   STR Type 8001h (normal MDEC, with odd [01Ch]) ;-movie
+  Last 96h sectors    STR Type 0078h (Ending Dummy)                 ;-junk
+
+1st Sector:
+
  002h 2    STR Type (5673h=Leading Dummy)
+  004h 4    Whatever (0004000Ch)
+  008h 4    Whatever (0098967Fh)
+  00Ch 4    Frame Size (always 100h)
+  010h 7F0h EAh-filled
+
+2nd Sector:
+
  002h 2    STR Type (8001h=Normal MDEC ID, but content is empty)
+  004h 4    Whatever (0004000Ch)        ;\
+  008h 4    Whatever (0098967Fh)        ; same as in 1st sector
+  00Ch 4    Frame Size (always 100h)    ; (but ID at [002h] differes)
+  010h 7F0h EAh-filled                  ;/
+
+3rd-6th Sector:
+
  002h 2    STR Type (8001h=Normal MDEC ID, but content is distorted)
+  004h 2    Sector number within current Frame (always 0)
+  006h 2    Number of Sectors in this Frame (always 1)
+  008h 4    Frame number (increasing, 1..4 for 3rd..6th sector)
+  00Ch 4    Frame Size (always 7D0h)
+  010h 10h  EAh-filled
+  020h 7D0h Unknown (random/garbage?)
+  7F0h 10h  EAh-filled
+
+7th Sector and up (almost standard MDEC):
+
 Caution: The STR header values aren't constant throughout the frame:
+ Entry entry [01Ch] is incremented per sector (or wraps to 0 in new section).
+  01Ch 4    Increasing sector number (within current movie section or so)
+
+Last 96h Sectors:
+
  002h 2    STR Type (0078h=Ending Dummy)
+  004h 2    Sector number within current Frame (always 0)
+  006h 2    Number of Sectors in this Frame (always 1)
+  008h 4    Frame number (increasing, in last 96h sectors)
+  00Ch 4    Frame Size (always 20h)
+  010h 2    Bitmap Width  (always 40h)
+  012h 2    Bitmap Height (always 40h)
+  014h 7ECh Zerofilled
+

+
Final Fantasy VII (FF7) (MOVIE\.MOV and MOVIE\.STR)
+

These movies have Extra stuff in the data section. The STR header is quite +normal (apart from reflecting the Extra stuff):
+

  00Ch 4    Frame Size in bytes (including 28h-byte extra stuff)
+  014h 8    Copy of Extra data [0..7]           :-instead of BS header[0..7]
+  020h 7E0h Data (ExtraData + BsData)
+
+The data part looks as so:
+
  000h 28h  Extra data (unknown purpose, reportedly "Camera data" ... whut?)
+  028h ..   BS Data (in BS v1 format)
+

+
Final Fantasy IX (FF9) (*.STR and *.MBG)
+

There are several customized STR header entries:
+

  002h 2    STR Type (0004h=FF9/Video)                      ;instead of 8001h
+  004h 2    Sector number within current Frame (02h..num-1) (2..9 for video)
+  006h 2    Total number of Audio+Video sectors in this frame (always 0Ah)
+  00Ch 4    Frame Size/4 (of BS data, excluding MBG extra)  ;instead of Size/1
+  014h 8    Copy of BS[0..7] from 8th video sector          ;instead 1st sector
+  01Ch 2    Usually 0000h (or 0004h in some MBG sectors)    ;inszead of 0000h
+  01Eh 2    Usually 0000h (or 3xxxh in some MBG sectors)    ;inszead of 0000h
+  020h 8F4h Data (in BS v2 format, plus MBG extra data, if any)
+
+Caution: The STR header values aren't constant throughout the frame:
+
  Namely, entry [1Ch..1Fh]=nonzero occurs only on the sector that does contain
+  the end of BS data (=and begin of MBG extra data), and of course [04h] does
+  also increase per sector.
+
+Sector ordering has BS data snippets arranged backwards, for example, if BS +data does occupy 2.5 sectors:
+
  [04h]=00h-01h 1st-2nd audio sector, SPU-ADPCM (see Audio streaming chapter)
+  [04h]=02h-06h 1st-5th video sector, unused, [020h..913h] is FFh-filled
+  [04h]=07h     6th video sector, contains end of BS data and MBG extra, if any
+  [04h]=08h     7th video sector, contains middle of BS data
+  [04h]=09h     8th video sector, contains begin of BS data
+
+Sector type/size, very unusually with FORM2 sectors:
+
  Audio sectors are MODE2/FORM1 (800h bytes, with error correction)
+  Video sectors are MODE2/FORM2 (914h bytes, without error correction)
+
+Huffman codes are standard BS v2, with one odd exception: MDEC 001Eh/03E1h +(run=0, level=+/-1Eh) should be usually encoded as 15bit Huffman codes, FF9 is +doing that for 001Eh, but 03E1h is instead encoded as 22bit Escape code:
+
  000000000100010         MDEC=001Eh (run=0, level=+1Eh) ;-normal (used)
+  000000000100011         MDEC=03E1h (run=0, level=-1Eh) ;-normal (not used)
+  0000010000001111100001  MDEC=03E1h (run=0, level=-1Eh) ;-escape (used)
+
+There are two movie variants: *.STR and *.MBG. Most MBG files (except +SEQ02\MBG102.MBG) contain extra MBG info in [01Ch..01Fh] and extra MBG data +appended after the BS data. If present, the appended MBG data is +often/always(?) just these 28h-bytes:
+
  FF FF FF FF FE FF FE 41 AD AD AD AD AD AD AD AD
+  AD AD AD AD AD AD AD AD AD AD AD AD AD AD AD AD
+  AD AD AD AD AD AD AD AD
+  (followed by FF's, which might be padding, or part of the extra data)
+
+Unknown if some sectors contain more/other MBG data, perhaps compressed BG +pixel-depth values for drawing OBJs in front/behind BG pixels?

+

Non-standard STR Video Headers

+
Final Fantasy VIII (FF8)
+

Video frames are always 320x224. The video frames are preceeded by two +SPU-ADPCM audio sectors.
+

  000h 4    ID "SMJ",01h=Video
+  004h 1    Sector number within current Frame (02h..num-1) (2..9 for video)
+  005h 1    Total number of Audio+Video sectors in this frame, minus 1 (9)
+  006h 2    Frame number (0=First)
+  008h 7F8h Data (in BS v2 format)
+

+
Ace Combat 3 Electrosphere (in 520Mbyte ACE.SPH/SPB archive)
+

The videos start with one XA-ADPCM sector, followed by the first Video sector.
+

 STR Sector Header:
+  000h 1    Always 01h
+  001h 1    Sector number within current Frame (00h..num-1) (8bit)
+  002h 2    Number of Sectors in this Frame
+  004h 2    Unknown (1 or 3)
+  006h 2    Frame number (decreasing, 0=Last)
+  008h 2    Bitmap Width in pixels    ;\130hxE0h or 140hxB0h or 80hx60h
+  00Ah 2    Bitmap Height in pixels   ;/
+  00Ch 4    Zero
+  010h 2    Zero, or decreasing timer (decreases approx every 2 sectors)
+  012h 2    Zero, or decreasing timer (decreases approx every 1 sector)
+  014h 3    Zero
+  017h 1    Zero, or increases with step 2 every some hundred sectors
+  018h 2    Zero, or Timer (increments when [1Ah] wraps from 04h to 01h)
+  01Ah 1    Zero, or Timer (increments when [1Bh] wraps from 5Fh to 00h]
+  01Bh 1    Zero, or Timer (increments approx every 1 sector)
+  01Ch 2    Zero, or Whatever (changes to whatever every many hundred sectors)
+  01Eh 2    Zero, or 0204h
+  020h 7E0h Data (in BS v3 format)
+
+Caution: The STR header values aren't constant throughout the frame:
+
  Namely, entry [10h..1Fh] can change within the frame (happens in japanese
+  version), and of course [01h] does also increase per sector.
+
+The Japanese version may be the only game that has two streaming videos running +in parallel on different channels.
+That means, non-japanese version is different...?

+
Judge Dredd (1998, Gremlin) (CUTS\.IXA and LEVELS\\*.IXA)
+

This is a lightgun-game with "interactive movies". The gameplay consists of +running on a fixed path through a scene with pre-recorded background graphics, +the only player interaction is aiming the gun at other people that show up in +that movie scene. There are two movie types:
+

  LEVELS\*\*.IXA  - Interactive gameplay movies
+  CUTS\*.IXA      - Non-interactive cut-scene movies
+
+Both CUTS and LEVELS have unusually small 4-byte STR headers:
+
  000h 4    Sector number within current Frame (LEVELS=0..8, or CUTS=0..9)
+  004h 7FCh Data (see below)
+
+Data for CUTS is 320x240pix (10 sectors per frame):
+
  Note: CUTS videos have 2 leading XA-ADPCM sectors
+  000h ..   BS Data (in BS v2/v3 format)                        ;-BS picture
+
+Data for LEVELS is 320x352pix plus extra stuff (9 sectors per frame):
+
  Note: LEVELS videos have 1 leading XA-ADPCM sector
+  000h 4    Offset to BS Data (always 28h)                      ;\
+  004h 4*6  Offsets to Extra Stuff 1..6                         ; extra header
+  01Ch 0Ch  Zerofilled                                          ;/
+  028h ..   BS Data (in BS v2/v3 format)                        ;-BS picture
+  ...  ..   Extra Stuff 1..6                                    ;-extra data
+
+The unusual 320x352pix resoltution contains a 320x240pix BG image, with +additional 320x112pix texture data appended at the bottom.
+Extra Stuff 1..6 does supposedly contain info for animating enemies and/or +backgrounds.

+

iki

+

The .iki video format (found in files with .IKI or .IK2 extension) is used in +several games made by Sony. iki movie sectors have some different properties:
+

  * There are only as many iki video sectors as needed to hold all the
+    frame's data. Remaining sectors are null.
+  * The first sector's Submode.Channel starts at zero, then increments for
+    each sector after that, and resets to zero after an audio sector.
+  * IK2 videos can also have variable frame rates that are very inconsistent.
+

+

CDROM File Video Streaming Framerate

+

According to Sony, BS encoded 320x240pix videos can be played at 30fps (with +cdrom running at double speed).

+

STR Frame Rate

+

As a general rule, the frame rate is implied in CDROM rotation speed (150 or 75 +sectors per second, minus the audio sectors, divided by the number of sectors +per video frame).

+

Fixed/Variable Framerates

+

The frame can drop on video frames that contain more sectors than usually. +Video frames that require fewer sectors than often padded with zerofilled +sectors. However, some games don't have that padding, so they could end up +reeceiving up to 150 single-sector frames per second; the actual framerate is +supposedly slowed down to 60Hz or less via Vblank timer (and with the CDROM +reading getting paused when the read-ahead buffer gets full).

+

Audio Samplerate

+

XA-ADPCM audio contains samplerate info (in the FORM2 subheader), the +samplerate versus amount of audio sectors can be used to compute the CDROM +rotation speed.
+There are two exceptions: Some movies don't have any audio at all, and some +movies use SPU-ADPCM instead of XA-ADPCM. In the latter case, the SPU Pitch +(samplerate) may (or may not) be found somewhere in the audio sector headers.

+

CDROM Rotation speed

+

As said above, the speed can be often detected via audio sample rate. +Otherwise, the general rule is that most PSX games are used 2x speed (150 +sectors/second). But, there are a few games with 1x speed (see below).

+

CDROM Single speed (75 sectors/frame)

+

Here are probably most of the USA games with videos at 1x speed.
+

  007 - The World Is Not Enough
+  1Xtreme
+  Arcade Party Pak
+  Atari Anniversary Edition Redux
+  Blast Radius
+  Blue's Clues - Blue's Big Musical
+  Chessmaster II
+  Chronicles of the Sword
+  Civilization II
+  Colin McRae Rally
+  Creatures - Raised in Space
+  Cyberia
+  Demolition Racer
+  Dune 2000
+  ESPN Extreme Games
+  FIFA Soccer 97
+  Fade to Black
+  Family Connection - A Guide to Lightspan
+  Fear Effect
+  Fox Hunt
+  Interactive CD Sampler Volume 1
+  Jade Cocoon - Story of the Tamamayu
+  Jeopardy! 2nd Edition
+  Juggernaut
+  Krazy Ivan
+  MTV Sports - Skateboarding featuring Andy Macdonald
+  MTV Sports - T.J. Lavin's Ultimate BMX
+  Medal of Honor
+  Medal of Honor - Underground
+  Official U.S. PlayStation Magazine Demo Disc 23
+  Planet of the Apes
+  PlayStation Underground Number 2
+  Shockwave Assault
+  Starblade Alpha
+  Starwinder - The Ultimate Space Race
+  Str.at.e.s. 1 - Match-A-Batch
+  Str.at.e.s. 5 - Parallel Lives!
+  Str.at.e.s. 7 - Riddle Roundup!
+  The X-Files
+  Top Gun - Fire at Will!
+  Um Jammer Lammy
+  Uprising X
+  Wheel of Fortune - 2nd Edition
+  Williams Arcade's Greatest Hits
+

+

CDROM File Video Streaming Audio

+

Audio Stream

+

STR movies are usually interleaved with XA-ADPCM sectors (the audio sectors are +automatically decoded by the CDROM hardware and consist of raw ADPCM data +without STR headers).
+CDROM File Audio Streaming XA-ADPCM
+However, there are also movies without audio. And a few movies with SPU-ADPCM +audio.

+

SPU-ADPCM in Chunk-based formats

+

CDROM File Video Streaming Chunk-based formats

+

SPU-ADPCM in Chrono Cross/Legend of Mana Audio Sector

+

Chrono Cross Disc 1 (HiddenDirectory\1793h..17A6h)
+Chrono Cross Disc 2 (HiddenDirectory\1793h..179Dh)
+Legend of Mana (MOVIE\*.STR, except some movies without audio)
+

  000h 2    STR ID   (0160h)
+  002h 2    STR Type (0000h, 0001h, 0100h, or 0101h)
+              0000h=Legend of Mana, Audio normal sectors
+              0001h=Legend of Mana, Audio sectors near end of movie
+              0000h=Chrono Cross Disc 1, Audio.left?
+              0001h=Chrono Cross Disc 1, Audio.right?
+              0100h=Chrono Cross Disc 2, Audio.left?
+              0101h=Chrono Cross Disc 2, Audio.right?
+  004h 2    Sector number in Frame (0=Audio.left?, 1=Audio.right?)
+  006h 2    Number of Audio sectors in this frame (always 2)
+  008h 4    Frame number (1=First)
+  00Ch 4    Unused (Chrono: FFh-filled or Mana: 00000FC0h=2x7E0h=Framesize?)
+  010h 10h  Unused (Chrono: FFh-filled or Mana: 00h-filled)
+  020h 60h  Unused (FFh-filled)
+  080h 4    ID "AKAO"
+  084h 4    Frame number (0=First)
+  088h 8    Unused (zerofilled)
+  090h 4    Remaining Time (step 690h) (can get stuck at 0340h or 0B20h at end)
+  094h 4    Zero
+  098h 4    Unknown (11h)
+  09Ch 4    Pitch (1000h=44100Hz)
+  0A0h 4    Number of bytes of audio data (always 690h)
+  0A4h 2Ch  Unused (zerofilled)
+  0D0h 690h Audio  (10h-byte SPU-ADPCM blocks) (1680 bytes)
+  760h A0h  Unused (10h-byte SPU-ADPCM blocks with flag=03h and other bytes=0)
+
+Note: The Chrono/Mana STR files start with Audio frames in first sector +(except, some Legend of Mana movies don't have any Audio, and do start with +Video frames).

+

SPU-ADPCM in Final Fantasy VIII (FF8)

+

  000h 4    ID "SMN",01h=Audio/left, "SMR",01h=Audio/right
+  004h 1    Sector number in Frame (0=Audio.left, 1=Audio.right)
+  005h 1    Total number of Audio+Video sectors in this frame, minus 1 (1 or 9)
+  006h 2    Frame number (0=First)
+  008h E8h  Unknown (camera data?) (232 bytes)
+  0F0h 6    Audio ID (usually "MORIYA", sometimes "SHUN.M")
+  0F6h 0Ah  Unknown (10 bytes) (reportedly 10 bytes at offset 250 = FAh ?????)
+  100h 4    ID "AKAO"
+  104h 4    Frame number (0=First)
+  108h 14h  Unknown (20 bytes)
+  11Ch 4    Pitch (1000h=44100Hz)
+  120h 4    Number of bytes of audio data (always 690h)
+  124h 2Ch  Unknown (44 bytes)
+  150h 20h  Unknown (32 bytes)
+  170h 690h SPU-ADPCM Audio data (690h bytes)
+
+There is one special case on disc 1: a movie with no video. Each 'frame' +consists of two sectors: the first is the left audio channel, the second is the +right audio channel.

+

SPU-ADPCM in Final Fantasy IX (FF9) (*.STR and *.MBG)

+

The FF9 audio sectors are normal MODE2/FORM1 sectors (unlike the FF9 video +sectors, which are MODE2/FORM2).
+

  000h 2    STR ID   (0160h)
+  002h 2    STR Type (0008h=FF9/Audio)
+  004h 2    Sector number in Frame (0=Audio.left, 1=Audio.right)
+  006h 2    Total number of Audio+Video sectors in this frame (always 0Ah)
+  008h 4    Frame number (1=First)
+  00Ch 4    Zero
+  010h 1    Audio flag? (00h=No Audio, 01h=Audio)
+  011h 4Fh  Zerofilled --- XXX or whatever (when above is 00h)
+  060h 4    Number of Frames in this STR file
+  064h 1Ch  EEh-filled
+ Below 780h bytes are all zerofilled when [10h]=00h (no audio)
+ Below 780h bytes are reportedly all ABh-filled "in the last frame of a movie
+ on Disc 4" (unknown which movie, and if that occurs in other movies, too)
+  080h 4    ID "AKAO"
+  084h 4    Frame number (0=First)
+  088h 14h  Unknown (20 bytes)
+  09Ch 4    Pitch (116Ah=48000Hz) (or 1000h=44100Hz in final movie)
+  0A0h 4    Number of bytes of audio data (0, 720h, 730h, or 690h=final movie)
+  0A4h 2Ch  Unknown (44 bytes)
+  0D0h 730h SPU-ADPCM audio (plus leftover/padding when less than 730h bytes)
+

+

Dance series SPU-ADPCM streaming (bigben interactive, DATA.PAK\stream\*.str)

+

This format is used for raw SPU-ADPCM streaming (without video).
+SLES-04121 Dance: UK
+SLES-04161 Dance: UK eXtra TraX
+SLES-04129 Dance Europe
+SLES-04162 All Music Dance! (Italy)
+

  000h 2    STR ID   (0160h)
+  002h 2    STR Type (8001h, same as MDEC)
+  004h 2    Sector number within current Frame (0000h..num-1)
+  006h 2    Number of Sectors in this Frame (always 9)
+  008h 4    Frame number (0=First)
+  00Ch 4    Frame Size in bytes (always 4000h)
+  010h 4    Whatever (always 00A000A0h, would be width/height if it were video)
+  014h 8    Zerofilled
+  01Ch 4    Special ID (always DDCCBBAAh for Dance audio)
+  020h 7E0h Data (in SPU-ADPCM format, mono, 22200Hz aka Pitch=07F5h)
+
+Note: Sector 0..8 contain 9*7E0h=46E0h bytes data per frame, but only 4000h +bytes are used (the last 6E0h bytes in sector 8 are same as in sector 7).

+

Raw SPU-ADPCM Streaming

+

Some games are using raw SPU-ADPCM for streaming. That is, the file is +basically a normal .VB file, but it can be dozens of megabytes tall (ie. too +large to be loaded into RAM all at once).
+

  Disney's The Emperor's New Groove (MagDemo39: ENG\STREAM\*.CVS)
+  Disney's Aladdin in Nasira's Revenge (MagDemo46: ALADDIN\STREAM\*.CVS)
+

+

CDROM File Video Streaming Chunk-based formats

+

Newer Electronic Arts videos (EA)

+

EA videos are chunk based (instead of using 20h-byte .STR headers). The next +chunk starts right at the end of the previous chunk (without padding to sector +boundaries).
+

 STR Sector Header:
+  No STR Sector header (first sector starts directly with "VLC0" chunk)
+ VLC0 Chunk (at begin of movie file):
+  000h 4     Chunk ID "VLC0"
+  004h 4     Chunk Size (always 1C8h)     (big-endian)
+  008h 1C0h  16bit MDEC values for E0h huffman AC codes (little-endian)
+ MDEC Chunks (video frames):
+  000h 4     Chunk ID "MDEC"                           ;\
+  004h 4     Chunk Size (...)             (big-endian) ; custom chunk header,
+  008h 2     Bitmap Width in pixels       (big-endian) ; instead of STR header
+  00Ah 2     Bitmap Height in pixels      (big-endian) ;
+  00Ch 4     Frame Number (starting at 0) (big-endian) ;/
+  010h ..    Data (in BS v2 format, but using custom Huffman codes from VLC0)
+  ...  ..    Zeropadding to 4-byte boundary
+ Audio Chunks (au00/au01):
+  000h 4     Chunk ID ("au00"=normal, "au01"=last audio chunk)
+  004h 4     Chunk Size (...)                                   (big-endian)
+  008h 4     Total number of 2x4bit samples in previous chunks  (big-endian)
+  00Ch 2     Unknown (always 800h) (maybe Pitch: 800h=22050Hz)  (big-endian)
+  00Eh 2     Unknown (always 200h)                              (big-endian)
+  ...  ..    SPU-ADPCM audio data, left  (0Fh bytes per sample block)
+  ...  ..    SPU-ADPCM audio data, right (0Fh bytes per sample block)
+  ...  ..    Garbagepadding to 4-byte boundary
+  Note: SPU-ADPCM does normally have 10h-byte blocks, but in this case,
+  the 2nd byte (with loop flags) is omitted, hence only 0Fh-byte blocks.
+ Zero Chunk (zeropadding at end of file, exists only in some EA videos):
+  000h ..    Zeropadding
+

+

Older Electronic Arts videos

+

Crusader: No Remorse (1996 Origin Systems) (MOVIES\*.STR)
+Soviet Strike (1996 Electronic Arts)
+Battle Stations (1997 Electronic Arts)
+Andretti Racing (1996 Electronic Arts)
+

 STR Sector Header:
+  000h 4    ID (DDCCBBAAh) (aka AABBCCDDh big-endian)
+  004h 4    Sector number within STR file (0=First, up to Filesize/800h-1)
+  008h 7F8h Data (video and audio chunks, see below) (first chunk is "ad20")
+ Video Chunks (MDEC):
+  000h 4    Chunk ID "MDEC"                           ;\
+  004h 4    Chunk Size (...)             (big-endian) ;
+  008h 2    Bitmap Width in pixels       (big-endian) ; custom chunk header
+  00Ah 2    Bitmap Height in pixels      (big-endian) ;
+  00Ch 4    Frame Number (starting at 0) (big-endian) ;/
+  010h ..   Data (in BS v2 format)                    ;-standard BS v2 data
+ Audio Chunks (ad20/ad21) (22050Hz stereo):
+  000h 4    Chunk ID ("ad20"=normal, "ad21"=last audio chunk)
+  004h 4    Chunk Size (1A50h or 1A70h)                        (big-endian)
+  008h 4    Total number of 2x4bit samples in previous chunks  (big-endian)
+  00Ch 2    Unknown (always 800h) (maybe Pitch: 800h=22050Hz)  (big-endian)
+  00Eh 2    Unknown (always 200h)                              (big-endian)
+  010h ..   SPU-ADPCM audio data, left  (10h bytes per sample block)
+  ...  ..   SPU-ADPCM audio data, right (10h bytes per sample block)
+ Last STR Sector:
+  000h 18h  FFh-filled (aka 8-byte STR header and 10h-byte Chunk header)
+  018h -    Nothing (total STR filesize is N*800h+18h bytes)
+

+

Oldest Electronic Arts videos

+

Wing Commander III: Heart of the Tiger (MOVIES1.LIB\*.wve) (1995, EA/Origin)
+

 STR Sector Header:
+  No STR Sector header (first sector starts directly with "Ad10" chunk)
+ Video Chunks (MDEC):
+  000h 4    Chunk ID "MDEC"                           ;\
+  004h 4    Chunk Size (2xx0h)           (big-endian) ;
+  008h 2    Bitmap Width in pixels       (big-endian) ; custom chunk header
+  00Ah 2    Bitmap Height in pixels      (big-endian) ;
+  00Ch 2    Unknown (7FFFh)              (big-endian) ;
+  00Eh 2    Unknown (AD14h or AD24h)     (big-endian) ;/
+  010h ..   Data (in BS v2 format)                    ;-standard BS v2 data
+  ...  ..   Padding, up to circa 20h bytes, FFh-filled
+ Audio Chunks (Ad10/Ad11) (22050Hz stereo):
+  000h 4    Chunk ID ("ad20"=normal, "ad21"=last audio chunk)
+  004h 4    Chunk Size (D38h or D28h) (or less in last chunk)  (big-endian)
+  010h ..   SPU-ADPCM audio data, left  ? (10h bytes per sample block)
+  ...  ..   SPU-ADPCM audio data, right ? (10h bytes per sample block)
+
+Audio seems to be 22050Hz stereo, however, chunks with size=D38h have odd +amounts of sampleblocks, so it isn't as simple as having left/right in +first/second half.

+

Policenauts (Japan, 1996 Konami) (NAUTS\MOVIE\*.MOV)

+

 STR Sector Header:
+  No STR Sector header (first sector starts directly with "VMNK" chunk)
+ First chunk (800h bytes):
+  000h 4     ID "VMNK" (aka KNMV backwards, maybe for Konami Video/Movie)
+  004h 4     Unknown (01h)
+  008h 4     Unknown (01h)
+  00Ch 4     Unknown (F0h)
+  010h 4     Size of KLBS chunks?          (40000h)
+  014h 4     Bitmap X1 (aka left border)?  (16pix, 10h)
+  018h 4     Bitmap Y1 (aka upper border)? (16pix, 10h)
+  01Ch 4     Bitmap Width                  (288pix, 120h)
+  020h 4     Bitmap Height                 (144pix, 90h)
+  024h 7E4h  Zerofilled
+ Further chunks (40000h bytes, each):
+  000h 8     Zerofilled
+  008h 4     Chunk ID "KLBS" (aka SBLK backwards, maybe for Stream Block)
+  00Ch 4     Chunk Size (usually 40000h)
+  010h 4     Number of Name List entries
+  014h 4     Number of Name List entries (same as above)
+  018h 8     Zerofilled
+  020h N*30h Name List
+  ...  ..    Data (referenced from Name List)
+  ...  ..    Zeropadding (to end of 40000h-byte chunk)
+
+The Name List does resemble a file archive, however, the "filenames" are just +Type IDs (eg. all picture frames do have the same name).
+
 Name List entries:
+  000h 8     Zerofilled
+  008h 8     Data Type Name (eg. "SCIPPDTS")
+  010h 4     Time when to play/display the frame (0 and up)
+  014h 4     Time duration for that frame (usually 14h for Picture frames)
+  018h 4     Data Offset in bytes (from begin of chunk)
+  01Ch 4     Data Size in bytes
+  020h 10h   Zerofilled
+
+Data Formats for the different Data Types...
+
 Type "SDNSHDTS" aka SNDS,STDH - SoundStdHeader (Size=800h, Duration=0)
+  000h 4     Maybe Pitch? (800h)                            (big-endian)
+  004h 4     Maybe Pitch? (800h)                            (big-endian)
+  008h 4     Total SPU-ADPCM size in bytes (for whole .MOV) (big-endian)
+  00Ch 4     Unknown (FFFFFFFFh)                            (whatever)
+  010h 4     Unknown (00007FFFh)                            (big-endian)
+  014h 7ECh  Zerofilled
+ Type "SDNSSDTS" aka SNDS,STDS - SoundStdStream (Size=10h..4000h, Duration=9Ch)
+  000h 4000h SPU-ADPCM data in 10h-byte blocks (last chunk is less than 4000h)
+ Type "SCIPPDTS" aka PICS,STDP - PictureStdPicture (Size=3xxxh, Duration=14h)
+  000h 3xxxh Picture Frame (in BS v1 format)
+ Type "SCTELLEC" aka ETCS,CELL - ExtraCells? (Size=0Ch, Duration=1)
+  000h ..    Maybe subtitle related...?
+ Type "SCTEGOLD" aka ETCS,DLOG - ExtraD-log? (Size=19h..31h, Duration=27h..44h)
+  000h ..    Maybe subtitle related...?
+
+Note: Total number of 10h-byte SPU-ADPCM blocks can be odd (so the audio seems +to be mono).
+Apart from the .MOV files, there's also one standard .STR file for the Knnami +Intro (with normal STR headers and BS v2 data).

+

Best Sports Games Ever (DD\.VLC and MOVIES\.VLC) (Powerline Demo Disc menu)

+

This format is used for still images with only frame, and for looping short +animation sequences in the Demo Disc Menu. There's no audio.
+

 Header Chunk:
+  000h 4    Fixed ID (74h,55h,89h,08h aka 08895574h)
+  004h 2    Bitmap Width           (140h)
+  006h 2    Bitmap Height          (100h)
+  008h 2    Video Frame Size/4     (17A0h or 13B0h)
+  00Ah 2    Number of Video Frames (01h or 32h)
+  00Ch 4    Frame End ID (eg. 62DCCACEh) (random?, but stays same within movie)
+ Video Frame Chunk(s):
+  ...  ..   Data (in BS v1/v2/v3 format)         ;\size = hdr[008h]*4
+  ...  ..   FFh-filled (padding to Frame Size)   ;/
+  ...  4    Frame End ID (eg. 62DCCACEh)         ;-same value as in hdr[00Ch]
+
+For random access, best is seeking "fpos=N*(Framesize+4)+10h", alternately one +could search "fpos=LocationAfterFrameEndID".

+

Sentient (FILMS\*.FXA)

+

This is having neither per-sector STR headers nor Chunk headers, instead it's +having raw data with fixed size of 10 sectors per frame.
+File Header (sector 0, 800h bytes):
+

  000h 4    File ID (01h,"XSP") (aka PSX backwards)
+  004h 2    Unknown (0001h)
+  006h 2    Unknown (0040h) (this is used for something...)
+  008h 2    Bitmap Width  (0140h)
+  00Ah 2    Bitmap Height (00F0h)
+  00Ch 4    Total number of video frames
+  010h 4    Number of video sectors per frame (always 8)
+  014h 4    Total number of video sectors, excluding audio/dummy (=NumFrames*8)
+  018h 1    Zero
+  019h 1    Sector List size (28h) (ie. each 4 frames)  ;\or zerofilled when
+  01Ah 28h  Sector Types (2=Video, 1=Audio, 0=Dummy)    ;/not present
+  042h ..   Zerofilled
+  7xxh ..   Unknown, maybe just garbage ...?
+  ...  ..   Zerofilled
+
+The frame rate is 15fps with 10 sectors per frame (8xVideo and either 2xAudio +or 1xAudio+1xDummy). The Video/Audio/Dummy sector arrangement does repeat each +40 sectors (aka each 4 frames):
+
  vVvvvvv--vvVvvv--vvvvVv--vvvvvv-Vvvvvvv-  Video
+  -------A-------A-------A-------A-------A  Audio
+  --------D-------D-------D---------------  Dummy
+  V = 1st sector of video frame
+  v = 2nd..8th sector of video frame (or fileheader in case of sector 0)
+  A = Audio (each 8th sector, ie. sector 07h,0Fh,17h,1Fh,etc.)
+  D = Dummy (occurs after some (not all) audio sectors)
+ Some files have that sector arrangement stored in header[019h..041h], but
+ other files have that header entries zerofilled (despite of using the same
+ arrangement).
+
+Video frames are 8 sectors (4000h-byte), first and last 8 bytes are swapped:
+
  0000h 8     Last 8 bytes of BS v1 bitstream   ;\or garbage padding
+  0008h 3FF0h First 3FF0h of BS v1 bitstream    ;/
+  3FF8h 8     Footer (64bit, with squeezed BS header and other info)
+ The footer bits are:
+  0-4    5bit   Quant (00h..1Fh) (only 5bit, not 6bit)
+  5-15   11bit  MDEC Size in 20h-word units (80h-byte units)
+  16-23  8bit   Unknown (lowbits are often same as bit48 and up?)
+  24-31  8bit   BS ID/100h (3800h/100h)
+  32-47  16bit  Frame Number (0=First)
+  48-63  16bit  Next Sector Number (start of next video frame)
+ To decrypt/convert the frame to standard BS v1 format:
+  x=[3FF8h]                      ;get footer
+  [3FF8h..3FFFh]=[0000h..0007h]  ;last 8 bytes of bitstream
+  [0000h]=(x AND FF00FFE0h)      ;size and ID=3800h
+  [0004h]=(x AND 1Fh)+10000h     ;quant and version=v1
+ The next_sector number is usually current_sector+1 (or +2 if that would be
+ audio), in last frame it does point to end of file.
+ Bitstreams smaller than 3FF8h are garbage padded (initially some 32bit garbage
+ values, and in later frames leftovers from previous bitstream sectors).
+
+Dummy sectors contain 800h bytes:
+
  000h 4     Always FFFFFFFFh (unfortunately, this isn't a unique ID)
+  004h 7FCh  Garbage (zeroes, random, or even leaked ASM source code)
+ Dummy sectors have the same Subheader as video sectors, the leading FFFFFFFFh
+ could also occur in BS bitstreams or frames with garbage padding, so one must
+ use the sector arrangement pattern to identify dummy sectors.
+
+Audio sectors are XA-ADPCM and can be filtered via Subheader, or via sector +arrangement pattern.

+

CDROM File Video Streaming Mis-mastered files

+

Mis-mastered streaming files

+

There are several discs that have streaming data stored as partial CDROM images +(instead of as real CDROM sectors).
+

  Format        Content    Where
+  raw 920h-byte STR        K9.5 1 - Live in Airedale (ZZBUFFER.STR)  ;\
+  raw 920h-byte STR        Need for Speed 3 (MOVIES\ZZZZZZZ*.PAD)    ;
+  raw 920h-byte STR        3D Baseball (ZZZZZZZZ.ZZZ)                ; intended
+  raw 920h-byte STR        Wing Commander III (DUMMY.DAT)            ; padding
+  raw 920h-byte STR        R-Types (DMY\DUMMY.BIN)                   ;
+  raw 920h+junk STR+junk   Grand Slam (DUMMY.BIN)                    ;
+  raw 920h-byte XA-ADPCM   Spec Ops Airborne Commando (PADDING.NUL)  ;
+  raw 920h-byte SW-STR     Cyberia (ENDFILL\*.STR) (software render) ;
+  RIFFs/CDXAfmt STRs       Sonic Wings Special (SW00.DMY = two RIFFs);/
+  raw 920h-byte XA-ADPCM   Rugrats (MagDemo19: STREAMS\DB02.ISF)     ;\nonsense
+  raw 920h-byte Data BABEh Rugrats (MagDemo19: STREAMS\OPEN.BIN)     ; dupes
+  raw ???-byte  CDDA       Championship Surfer (MagDemo43: HWX\MUSIC);/
+  raw ???-byte  CDDA       Twisted Metal 2 (MagDemo50: TM2\FRWYSUB.DA) ;-?
+  raw 920h-byte STR        Sonic Wings Special (MOV\MQ*.STR)         ;-unused?
+  raw 920h-byte STR        Apocalypse (MagDemo16: APOC\*.STR)
+  raw 920h-byte XA-ADPCM   Apocalypse (MagDemo16: APOC\*.XA)
+  raw 920h-byte XA-ADPCM   NFL Xtreme (MagDemo13: NFLX\GAME\SOUND\2PLAYRNO.XA)
+  raw 920h-byte XA-ADPCM   Ace Combat 2 (MagDemo01: ACE2.STP)
+  raw 920h-byte XA-ADPCM   Colony Wars (MagDemo02: CWARS\DEMO.PAK)
+  raw 920h-byte XA-ADPCM   Best Sports demo (AH2\GAMEDATA\COM\MUSIC\MUSIC.IXA)
+  raw 920h-byte XA-ADPCM   Tomb Raider: Last Revelation (MagDemo29: TR4\XA1.XA)
+  raw 800h-byte XA-ADPCM   Croc 1 demo (MagDemo02: CROC\MAGMUS.STR) (FORM1)
+  RIFF/CDXAfmt  XA-ADPCM   Best Sports demo (LOMUDEMO\SFX\COMMENT.STR)
+  RIFF/CDXAfmt  ?+XA-ADPCM Ace Combat 3 Electrosphere (MagDemo30: AC3\*.SPB)
+  RIFF/CDXAfmt  XA-ADPCM   Colony Wars Venegance (MagDemo14: CWV\SONYDEMO.PAK)
+  RIFF/WAVEfmt  CDDA       T'ai Fu (MagDemo16: TAIFU\3_10.WAV, 2x16bit 44100Hz)
+  RIFF/WAVEfmt  CDDA       Psalm69 (beta) FRONT\FIRE.TRK
+
+The 920h-byte sectors exclude the leading Sync mark and MM:SS:FF:Mode2 value.
+
 Data/movie sectors look as so:
+  000h 4    Sub-Header (File, Channel, Submode OR 20h, Codinginfo)
+  004h 4    Copy of Sub-Header
+  008h 800h Data (2048 bytes)           ;<-- contains STR movie sectors
+  808h 4    EDC (zerofilled)
+  80Ch 114h ECC (zerofilled)
+ And XA-ADPCM sectors look as so:
+  000h 4    Sub-Header (File, Channel, Submode OR 64h, Codinginfo)
+  004h 4    Copy of Sub-Header
+  008h 900h Data (18*128 bytes)         ;\contains XA-ADPCM audio sectors
+  908h 14h  Data (zerofilled)           ;/
+  91Ch 4    EDC (zerofilled)
+
+The RIFF/CDXAfmt has a standard RIFF header, followed by 930h-byte sectors +(same format as when opening CDROM streaming files in Windows). The +RIFF/WAVEfmt is just a standard .WAV file.
+In case of the ZZ*.* files on retail discs, the developers did intentionally +append some non-functional dummy STR files (instead of appending zerofilled +30Mbyte at end of disc).
+CDROM File XYZ and Dummy/Null Files
+In case of the Demo Discs, the developers did probably have high hopes to +release a demo version with working streaming data, just to find out that Sony +had screwed up the data format (or maybe they had only accidentally included +streaming data, without actually using it in demo version). Confusingly, the +corrupted files were released on several discs (magazine demos, and other demo +releases).
+The Rugrats demo has intact files in RUGRATS\CINEMAT and RUGRATS\XA folders, +plus nonsense copies of that files in 920h-byte format in STREAMS folder.

+

Partially mis-mastered files

+

Legend of Dragoon (MagDemo34: LOD\XA\LODXA00.XA has FIRST SECTOR mis-mastered +(it has TWO sub-headers (01,00,48,00,01,00,48,00,01,01,64,04,01,01,64,04), the +remaining sectors are looking okay).

+

Porsche Challenge (USA) (SRC\MENU\STREAM\*.STR)

+

The subheader and data of the 1st sector are accidently overwritten by some +ASCII string:
+

  000h 4    Subheader       01 44 2D 52            ".D-R"    ;\distorted
+  004h 4    Subheader copy  01 4D 20 47            ".M G"    ;/"CD-ROM G"
+  008h 299h Data ASCII      65 6E 65 72 61 ...     "enerator for Windows"...
+  2A1h 567h Data BS bitstream (but lacks BS header and start of bitstream)
+
+The 2nd sector and up are containing intact STR headers (for the 2nd-Nth sector +of 1st frame, but the whole 1st frame is unusable due to missing 1st sector; +however, the following frames are intact).

+

CDROM File Video BS Compression Versions

+

STR/BS Version Summary, with popularity in percents (roughly)

+

  Version         .STR movies   .BS pictures
+  BS v2            60%           6%            Most games
+  BS v3            20%           4%            Some newer games
+  BS v1            15%           0.1%          Old games
+  BS ea            2%            - (?)         Electronic Arts titles
+  BS iki           0.5%          0.1%          Several games
+  BS fraquant      0.2%          0.1%          Rare (X-Files, Eagle One)
+  BS v0            0.1%          -             Rare (Serial Experiments Lain)
+  BS v2/v3.crypt   0.2%          -             Rare (Star Wars games)
+  BS iki.encrypted 0.1%          -             Rare (Panekit)
+  Wacwac MDEC      0.1%          -             Rare (Aconcagua)
+  Polygon Streams  0.x% (?)      -             Some titles
+  Raw MDEC         -             -             Was never used in files?
+  MPEG1            -             -             VCD Video CDs
+  None             ?%   (?)      90%           No videos or BS pictures
+
+Most games can decrypt v1/v2/v3 videos (no matter which of the three versions +they are actually using), newer games do occassionally use v3 for picture +compression, but often stick with v2 for video streaming (perhaps because v3 +does require slightly more CPU load; unknown if the higher CPU load has been an +actual issue, and if it has been solved in the later (more optimized) +decompressor versions) (unknown if there are other benefits like v2 having +better DC quality or better compression in some cases?).

+

BS v0 (used by only one known game)

+

  v0 used by Serial Experiments Lain
+
+This game is apparently using a very old and very unoptimized decoder (although +it was released in 1997, when most or all other games did already have decoders +with v1/v2/v3 support).
+The v0 decoder has different header, lacks End of Frame codes, and uses Huffman +codes with different AC values than v1/v2/v3/iki.

+

BS v1 (used by older games, some of them also having v2 videos)

+

  v1 used by Wipeout 2097 (MAKE.AV, XTRO*.AV)
+  v1 used by Viewpoint (MOVIES\*.STR) (oddly with [08h]=FirstFrame=0 and
+        [1Ch]=Unspecified=Nonzero) (the game also has ".str" files in
+        VIEW.DIR\streams, but that isn't MDEC/STR stuff)
+  v1 used by Ridge Racer Revolution (MOVIE\*.STR)
+  v1 used by Policenauts
+  v1 used by Final Fantasy VII (FF7)
+  v1? used by Tekken 2
+  v1/v2 used by Final Fantasy Tactics (OPEN*.STR)
+  v1/v2 used by Project Horned Owl (*.STR)
+  v1/v2 used by Gex (*.FMV)
+  (and probably more)
+
+v1 and v2 can be decoded with the same decompressor. The only difference is +that v1 was generated with an older compressor (which did accidently store +nonsense 22bit escape codes with run=N, level=0 in the bitstream; whereas one +could as well use run+N+1 in the next code, or omit it completely if next code +is EOB).

+

BS v2 (most games)

+

  v2 used by Gex - Enter the Gecko (*.STR)
+  v2 used by Tomb Raider (FMV\*.FMV)
+  v2 used by Alone (STR*\*.STR)
+  v2 used by Kain (*.STR)
+  v2 used by Fear Effect (BOOT.SID, LOGO.SID, ABGA\ABGA.FLX)
+  v2 used by Parasite Eve 2 (INTERx.STR, and in .CDF's eg. stage1\folder501)
+  v2 used by Witch of Salzburg (MOVIE\*.STR)
+  v2 used by Breath of Fire III (LOGO\*.STR)
+  v2 used by Hear it Now (MOVIE\*.STR)
+  v2 used by Legend of Mana (MOVIE\*.STR)
+  v2 used by Misadventures of Tron Bonne (STR\*.STR)
+  v2 used by Rayman (VIDEO\*.STR)
+  v2 used by Resident Evil 1 (PSX\MOVIE\*.STR)                ;\although v3 is
+  v2 used by Resident Evil 2 (PL0\ZMOVIE\*.STR, ZMOVIE\*.STR) ;/used in *.BSS
+  v2 used by Tokimeki Memorial 2 (VX*.STR)
+  v2 used by Spider-Man (CINEMAS\*.STR)
+  v2 used by Perfect Assassin (CDV\*.STR)
+  v2 used by Pandemonium 2 (*.STR)
+  v2 used by Die Hard Trilogy 2 (MOVIE\*.STR)
+  v2 used by Need for Speed 3 (MOVIES\*.STR) (oddly with [14h,18h]<>[20h,24h])
+  v2 used by Wild Arms (STR\*.STR)
+  v2 used by Wild Arms 2 (STR\*.STR)
+  v2 used by Frogger (*.STR)
+  v2 used by Gundam Battle Assault (XA\*.STR)
+  v2 used by Alundra (MOVIE\*.MOV)
+  v2 used by Spec Ops (file 95h,96h within BIGFILE.CAT)
+  v2 used by Crash Team Racing (file 1E1h..1F8h,1FAh within BIGFILE.BIG)
+  (and many more)
+
+Same as v1, but without the compressor bug.

+

BS v3 (used by some newer games, some of them also having v2 videos)

+

  v2/v3 used by Lemmings Oh No More Lemmings (ANIMS\*.STR)
+  v2/v3 used by Castlevania (*.STR)
+  v3 used by Heart of Darkness (CINE\*.STR, SETUP\*.STR)
+  v3 used by R-Types (MV\*.STR)
+  v3 used by Black Matrix (MOVIE\*.STR)
+  v3 used by Nightmare Creatures II (INTRO\*.STR, LEVEL*\*.STR)
+  (and many more)
+
+Same as v2, but using Huffman compressed DC values.

+

BS ea (Electronic Arts)

+

Used by many EA Sports titles and several other titles from Electronic Arts:
+

  Castrol Honda Superbike Racing
+  EA Sports Supercross 2000, 2001
+  Future Cop - L.A.P.D. (retail and MagDemo14: FCOPLAPD\*.WVE and *.FSV)
+  Hot Wheels - Turbo Racing
+  Jampack Vol. 2
+  Knockout Kings 99, 2000, 2001
+  Madden NFL 99, 2000, 2001, 2002, 2003, 2004, 2005 (eg. MADN00\FMVIDEO.DAT\*)
+  NASCAR 98, 99, 2000, 2001 (and 98 Collector's Edition, and 99 Legacy)
+  NASCAR Thunder 2002, 2003, 2004 and NASCAR Rumble
+  Nuclear Strike
+  Official U.S. PlayStation Magazine Demo Disc 39 (...XXX which game?)
+  PlayStation Underground Jampack - Winter 2000
+  Road Rash Jailbreak, and Road Rash 3D
+  Tiger Woods PGA Tour Golf, and Tiger Woods USA Tour 2001
+
+Uses VLC0 and MDEC chunks (instead of STR headers), the MDEC chunks contain +standard BS v2 data, but using custom MDEC values from VLC0 chunk.

+

BS fraquant

+

  X-Files (Fox Interactive/Hyperbole Studios, 1999)
+  Eagle One: Harrier Attack (Infogrames/Glass Ghost, 2000)
+  Blue's Clues: Blue's Big Musical (Mattel/Viacom/TerraGlyph, 2000)
+
+This replaces the 6bit quant value by a 16bit fixed-point quant value (done by +manipulating the Quant Table instead of using QuantDC, apart from that extra +feature it's internally using normal BS v1/v2/v3 decoding).

+

BS iki

+

  iki: Gran Turismo 1 (STREAM.DAT)   ;\with uncommon STR header
+  iki: Gran Turismo 2 (STREAM.DAT)   ;/
+  iki: Hot Shots Golf 2 / Everybody's Golf 2 (MagDemo31: HSG2\MINGOL2X.BIN)
+  iki: Legend of Legaia (MagDemo20: LEGAIA\MOV\MV2.STR)
+  iki: Legend of Dragoon (STR\*.IKI)
+  iki: Omega Boost (MOVIE\*.IKI)
+  iki: Um Jammer Lammy (MagDemo24: UJL\*.IKI) (retail: *\*.IKI and CM\*.IK2)
+  iki: plus a dozen of japanese-only titles
+
+This might have been used between v2 and v3, iki is using uncommon BS headers +and LZ compressed Quant/DC values (whilst v3 is using Huffman compressed DC +values).

+

Encrypted iki

+

  Panekit - Infinitive Crafting Toy Case (first 13Mbyte in PANEKIT.STR)
+
+Same as normal iki, with some SWAP/ADD/XOR-encrytion in first 20h-bytes.

+

Encrypted v2/v3

+

  v3.xor used by Star Wars Masters of Teras Kasi (MagDemo03: MASTERS\*.STR)
+  v2.xor supported (but not actually used) by Star Wars Masters (MagDemo03)
+  v3.swap used by Star Wars Rebel Assault II (*.STR, *.SED, Stills)
+  v2.swap used by Star Wars Rebel Assault II (*.STR)
+  v3.swap used by BallBlazer Champions (*.STR)
+
+Same as normal v2/v3 with simple XOR-encryption or SWAP-encryption.

+

Wacwac MDEC

+

  Aconcagua (JP) (2000 Sony/WACWAC!) (STR_01_00.STR and STR_09_01.STR)
+
+Similar to v3, but uses completely different Huffman codes than BS video.

+

Polygon Streaming (instead of MDEC picture streaming)

+

  Ape Escape (DEMO\*.STR, STR\*.STR, and KKIIDDZZ.HED\STR\0006h and up)
+  Aconcagua (most STRs are Polygon Streams, except two are Wacwac MDEC streams)
+  Panekit - Infinitive Crafting Toy Case (last 150Mbyte in PANEKIT.STR)
+
+Polygon streams contain vertices (for textures that are stored elsewhere). +Usually needing only one sector per frame. This can be useful for animations +that were recorded from real actors. Drawbacks are more edgy graphics and lower +color depth (although that may fit in with the game engine).
+CDROM File Video Polygon Streaming

+

MPEG1 (on VCD Video CDs)

+

MPEG1 uses I/P/B-Frames, the I-Frames may reach similar compression as BS +files. However, P-Frames and B-Frames do compress much better than BS files.
+CDROM Video CDs (VCD)
+MPEG1 isn't used in any PSX games, but VCDs can be viewed on SCPH-5903 consoles +(or via software decoder in nocash PSX kernel clone).

+

Titles without movies

+

Most PSX titles do include movies, exceptions are some early launch titles and +educational titles:
+

  Ridge Racer 1 (1994)
+  Lightspan Online Connection CD
+

+

CDROM File Video BS Compression Headers

+

There are several different BS headers. The File ID/Version entries can be used +to detect the correct type. The MDEC Size entry contains the size after Huffman +decompression (ie. the half-decompressed size before passing the data to the +MDEC decompression hardware) (usually divided by 4 and rounded up to 80h/4 +bytes).

+

BS v1/v2/v3 header

+
  000h 2    MDEC Size/4 (after huffman decompression) (rounded to 80h/4 bytes)
+  002h 2    File ID (3800h)
+  004h 2    Quantization step/factor (0000h..003Fh, for MDEC "DCT.bit10-15")
+  006h 2    Version (1, 2, or 3) (2 is most common)
+  008h ...  Huffman compressed data blocks (Cr,Cb,Y1,Y2,Y3,Y4, Cr,Cb,Y1,Y2..)
+
+

Encrypted v2/v3

+

Encryption is used in Star Wars games, there are two encryption schemes (XOR +and SWAP).
+XOR-encrypt: Star Wars Masters of Teras Kasi (MagDemo03: MASTERS\*.STR):
+

  000h 2   MDEC Size/4 (rounded to 80h/4 bytes) (unencrypted) ;\same as normal
+  002h 2   File ID (3800h)                      (unencrypted) ; BS v1/v2/v3
+  004h 2   Quant (0..3Fh)                       (unencrypted) ;/
+  006h 2   Version (in bit15, plus random in LSBs):
+             00xxh..7FFFh for v2 (unknown if this could include values 0..3)
+             8000h..FFFFh for v3 (bit14-0=random, varies in each frame)
+  008h ..  Encrypted bitstream
+             (each halfword XORed by BE67h for v2, or XORed by E67Bh for v3)
+  ...  (2) Zeropadding to 4-byte boundary (unencrypted)
+  ...  ..  Zeropadding to end of sector   (unencrypted)
+ The XOR values BE67h/E67Bh are hardcoded in the Star Wars Masters of Teras
+ Kasi .EXE (same XOR values for both retail and demo version), unknown if any
+ other games are also using that kind of encryption (and if yes, if they are
+ using the same XOR values).
+
+SWAP-encrypt: BallBlazer Champions, Star Wars Rebel Assault II (*.STR, *.SED):
+
  000h 2   MDEC Size/4 (rounded to 80h/4 bytes) ;\same as normal
+  002h 2   File ID (3800h)                      ; BS v1/v2/v3
+  004h 2   Quant (0..3Fh)                       ;/
+  006h 2   Version (random 16bit, 00xxh..FFFFh) ;-no meaningful version info
+  008h 2   Bitstream 2nd halfword               ;\to "decrypt" the file,
+  00Ah 2   Bitstream 1st halfword               ;/these must be swapped
+  00Ch ..  Bitstream 3rd halfword and up        ;-in normal order
+
+Whilst XORing or SWAPping the halfwords is simple, the more difficult part is +distinguishing between SWAP-v2/v3 and XOR-v2/v3 encryption. This can be done as +so:
+
  if header[06h]<=0003h then assume unencrypted v0/v1/v2/v3
+  if header[06h]>=0004h then strip any trailing 0 bits, and check EndOfFrame..
+  if last 10bit = 0111111111 then assume SWAP.v2
+  if last 10bit = 1111111111 then assume SWAP.v3
+  otherwise assume XOR.v2/v3 (and use header[06h].bit15 to distinguish v2/v3)
+

+

BS iki Header

+

IKI videos have a custom .BS header, including some GT-ZIP compressed data:
+

  000h 2   MDEC Size/4 (rounded to 80h/4 bytes)         ;\same as normal
+  002h 2   File ID (3800h)                              ;/BS v1/v2/v3
+  004h 2   Bitmap Width in pixels     ;instead of Quant
+  006h 2   Bitmap Height in pixels    ;instead of Version
+  008h 2   Size of GT-ZIP compressed data (plus 2-byte alignment padding)
+  00Ah ..  GT-ZIP compressed DC/Quant values (plus 2-byte alignment padding)
+  ...  ..  Huffman compressed AC data blocks (Cr,Cb,Y1,Y2,Y3,Y4, Cr,Cb,Y1,Y2..)
+
+The number of blocks is NumBlocks=(Width+15)/16*(height+15)/16*6. The size of +the decompressed GT-ZIP data is NumBlocks*2.

+

Encrypted iki

+

The first 20h byte of the iki header & data are encrypted. Among others, +the ID 3800h is inverted (=C7FFh). To decrypt them:
+

  [buf+00h]=[buf+00h] XOR FFFFFFFFh
+  [buf+04h] <--> [buf+08h]          ;exchange 2x32bit
+  [buf+0Ch] <--> [buf+0Eh]          ;exchange 2x16bit
+  [buf+10h]=[buf+10h]+FFFF6F7Bh
+  [buf+14h]=[buf+14h]+69140000h
+  [buf+18h]=[buf+18h]+FFFF7761h
+  [buf+1Ch]=[buf+1Ch]+6B040000h
+
+Note: The .STR header's StHeadM/StHeadV fields contain a copy of the decrypted +values. The PANEKIT.STR file is 170Mbyte tall, but only the first 13Mbyte +contain movie data... the rest is unknown stuff... often with zeroes followed +by 7B,44,F0,29,E0,28 unknown what for...?

+

BS fraquant

+

  X-Files, GRAPHICS\*.STR,*.BIN, LOGOS\*.STR,*.BS
+  Eagle One: Harrier Attack (\*.STR, DATA*\*.STR) (leading zerofilled sectors)
+  Blue's Clues: Blue's Big Musical (*.STR) (has one leading zerofilled sector)
+
+This has a normal BS v1/v2/v3 header, with special quant entry:
+
  004h 2    Quant (0001h..0003h, or fixed-point 8000h..9xxxh)
+
+The decoder is using the default_quant_table (02h,10h,10h,13h,..,53h) +multiplied with a fixed point number:
+
  quant=BsHeader[04h]   ;get fractional quant value
+  BsHeader[04h]=0001h   ;force quant=1 (for use in BS v1/v2/v3 decoder)
+  if quant<8000h then quant=quant*200h else quant=quant AND 7FFFh
+  quant[0]=default_quant_table[0]
+  for i=1 to 3Fh,
+    x=(default_quant_table[i]*quant)/200h
+    if x=00000000h then quant[i]=01h else quant[i]=(x AND FFh)
+  next i
+  use MDEC(2) command to apply quant[0..3Fh] to both Luma and Chroma tables
+  use normal BS v1/v2/v3 decoder to decompress the bitmap
+
+BsHeader[04h] should be 0001h..0003h, or 8000h..862Bh (values outside that +range would overflow the 8bit quant table entries). Values 0001h..0003h should +should give same results as for normal BS decoding, so only values 8000h and up +do need special decoding.
+Caution: Despite of the overflows, quant>862Bh is used (eg. X-Files +GRAPHICS\GRAPHICS.BIN has quant=88C4h, Blue's Big Musical has quant=93E9h; +those images do look okay, so the compressor seems to have recursed the +overflows; or the overflow affects only a few pixels), however, very large with +LSBs all zero (eg. 9000h) can cause 8bit table entries to become 00h (due to +ANDing the result with FFh).
+Note: X-Files LOGOS\POP*.STR have quant=8001h (=near zero), that files are only +60Kbyte and seem to be all black.
+Note: The movie engine uses COP2 GPF opcodes to calculate quant values.

+

v0 Header (in STR files)

+
  000h 1   Quant for Y1,Y2,Y3,Y4  (00h..3Fh)
+  001h 1   Quant for Cr,Cb        (00h..3Fh)
+  002h 2   File ID (3800h) (or Frame Number in ENDROLL1.STR on Disc 2)
+  004h 2   MDEC Size/2 (!), and without padding (!) (unlike v1/v2/v3/iki)
+  006h 2   BS Version (0) (actually MSBs of above Size, but it's always 0)
+  008h ..  Huffman Bitstream, first bit in bit7 of first byte
+
+

v0 Header (in LAPKS.BIN chunks)

+

LAPKS.BIN contains several chunks, each chunk contains an animation sequence +with picture frame(s), each frame starts with following header:
+

  000h 2   Bitmap Width in pixels     ;\cropped to non-black screen area,
+  002h 2   Bitmap Height in pixels    ;/size can vary within the sequence
+  004h 2   Quant for Y1,Y2,Y3,Y4  (0000h..003Fh)
+  006h 2   Quant for Cr,Cb        (0000h..003Fh)
+  008h 4   Size of compressed BS Bitstream plus 4 ;Transparency at [008h]+0Ch
+  00Ch 2   Size/2 of MDEC data (after huffman decompression, without padding)
+  00Eh 2   BS Version (0) (actually MSBs of above Size, but it's always 0)
+  010h ..  BS Bitstream with DC and AC values (Huffman compressed MDEC data)
+  ...  4   Transparency Mask Decompressed Size (Width*Height*2/8) (=2bpp)
+  ...  ..  Transparency Mask LZSS-compressed data
+
+For decompressing the transparency mask:
+CDROM File Compression LZSS (Serial Experiments Lain)
+The Transparency Mask is stored as scanlines (not as macroblocks), the +upper/left pixel is in bit7-6 of first byte, the 2bit alpha values are ranging +from 0=Transparent to 3=Solid.

+

BS ea Headers (Electronic Arts)

+

EA videos are chunk based (instead of using 20h-byte .STR headers).
+CDROM File Video Streaming Chunk-based formats
+VLC0 Chunk: Custom MDEC values (to be assigned to normal BS v2 Huffman codes).
+MDEC Chunks: Width/Height and BS v2 data (using MDEC values from VLC0 chunk).

+

Raw MDEC

+

There aren't any known pictures or movies in raw MDEC format. However, the +Huffman decompression functions do usually output raw data in this format:
+

  000h 2   MDEC Size/4 (after huffman decompression) (rounded to 80h/4 bytes)
+  002h 2   File ID (3800h)
+  004h ..  MDEC data (16bit DC/AC/EOB codes)
+  ...  ..  Padding (FE00h-filled to 80h-byte DMA transfer block size boundary)
+
+The first 4 bytes are the MDEC(1) command, the "ID" is always 3800h (equivalent +to selecting 16bpp output; for 24bpp this must be changed to 3000h before +passing the command to the MDEC hardware). The remaining bytes are MDEC data +(padded to 80h-byte boundary).
+Macroblock Decoder (MDEC)

+

CDROM File Video BS Compression DC Values

+

DC v0

+

  nnnnnnnnnn        DC Value (signed 10bit, -200h..+1FFh)
+
+This is similar as v1/v2, except there is no End code for End of Frame, and the +.BS header contains two separate quant values (for Cr/Cb and Y1-Y4).
+
  If output_size=NumberOfMdecCodes*2 then EndOfFrame
+  If BlockIsCrCb then QuantDC=DC+QuantC*400h else QuantDC=DC+QuantY*400h
+

+

DC v1/v2/ea

+

  nnnnnnnnnn        DC Value (signed 10bit, -200h..+1FEh)
+  0111111111        End of Frame (+1FFh, that, in place of Cr)
+
+This is similar as v0, except there is only one Quant value for all blocks, and +the header lacks info about the exact decompressed size, instead, compression +end is indicated by a newly added end code:
+
  If DC=+1FFh then EndOfFrame
+  QuantDC=DC+Quant*400h
+

+

DC v3

+

Similar as v1/v2, but DC values (and End code) are now Huffman compressed +offsets relative to old DC, with different Huffman codes for Cr/Cb and Y1-Y4:
+

  For Cr/Cb         For Y1..Y4      Offset (added to old DC of Y/Cr/Cb block)
+  00                100             +(00h)                      ;\
+  01s               00s             -(01h)*4     ,+(01h)*4      ;
+  10sn              01sn            -(03h..02h)*4,+(02h..03h)*4 ; required
+  110snn            101snn          -(07h..04h)*4,+(04h..07h)*4 ; codes
+  1110snnn          110snnn         -(0Fh..08h)*4,+(08h..0Fh)*4 ; for 10bit
+  11110snnnn        1110snnnn       -(1Fh..10h)*4,+(10h..1Fh)*4 ; range
+  111110snnnnn      11110snnnnn     -(3Fh..20h)*4,+(20h..3Fh)*4 ;
+  1111110snnnnnn    111110snnnnnn   -(7Fh..40h)*4,+(40h..7Fh)*4 ;/
+  11111110snnnnnnn  1111110snnnnnnn -(FFh..80h)*4,+(80h..FFh)*4 ;-11bit (!)
+  -                 11111110        Unused                      ;\
+  111111110         111111110       Unused                      ; unused
+  1111111110        1111111110      Unused                      ;/
+  1111111111        1111111111      End of Frame                ;-end code
+  Note: the "snnn" bits are indexing the values in right column,
+  with s=0 for negative values, and s=1 for positive values.
+
+The decoding works as so (with oldDcXxx=0 for first macroblock):
+
  If bits=1111111111 then EndOfFrame
+  If BlockIsCr then DC=DecodeHuffman(HuffmanCodesCbCr)+oldDcCr, oldDcCr=DC
+  If BlockIsCb then DC=DecodeHuffman(HuffmanCodesCbCr)+oldDcCb, oldDcCb=DC
+  If BlockIsY1234 then DC=DecodeHuffman(HuffmanCodesY1234)+oldDcY, oldDcY=DC
+  If older_version AND DC>=0 then QuantDC=Quant*400h or (DC)       ;\requires
+  If older_version AND DC<0  then QuantDC=Quant*400h or (DC+400h)  ;/11bit
+  If newer_version           then QuantDC=Quant*400h+(DC AND 3FFh) ;-wrap 10bit
+
+Note: The offsets do cover signed 11bit range -3FCh..+3FCh. Older v3 decoders +did require 11bit offsets (eg. add +3FCh to change DC from -200h to +1FCh). +Newer v3 decoders can wrap within 10bit (eg. add -4 to wrap DC from -200h to ++1FCh).

+

DC iki

+

The DC values (including Quant values for each block) are separately stored as +GT-ZIP compressed data in the IKI .BS header.
+CDROM File Compression GT-ZIP (Gran Turismo 1 and 2)
+Calculate NumBlocks=(Width+15)/16*(height+15)/16*6, decompress the DC values +(until DecompressedSize=NumBlocks*2). During Huffman decompression, read the DC +values from the decompressed DC buffer (instead of from the Huffman bitstream):
+

  If BlockNo>=NumBlocks then EndOfFrame
+  QuantDC = DCbuf[BlockNo]*100h + DCbuf[BlockNo+NumBlocks]
+
+As shown above, the Hi- and Lo-bytes are stored in separate halves of the DC +buffer (which may gain better compression).

+

CDROM File Video BS Compression AC Values

+

Below shows the huffman codes and corresponding 16bit MDEC values; the "xx" +bits contain an index in the list of 16bit MDEC values, the "s" bit means to +negate the AC level (in lower 10bit of the 16bit MDEC value) when s=1.

+

Huffman codes for AC values BS v1/v2/v3/iki

+
  10                     FE00h          ;End of Block, EOB
+  11s                    0001h
+  011s                   0401h
+  010xs                  0002h,0801h
+  0011xs                 1001h,0C01h
+  00101s                 0003h
+  00100xxxs              3401h,0006h,3001h,2C01h,0C02h,0403h,0005h,2801h
+  0001xxs                1C01h,1801h,0402h,1401h
+  00001xxs               0802h,2401h,0004h,2001h
+  000001xxxxxxxxxxxxxxxx 0000h..FFFFh   ;Escape code for raw 16bit values
+  000001xxxxxx0000000000 0000h..FC00h   ;Escape nonsense level=0 (used in v1)
+  0000001xxxs            4001h,1402h,0007h,0803h,0404h,3C01h,3801h,1002h
+  00000001xxxxs          000Bh,2002h,1003h,000Ah,0804h,1C02h,5401h,5001h,
+                         0009h,4C01h,4801h,0405h,0C03h,0008h,1802h,4401h
+  000000001xxxxs         2802h,2402h,1403h,0C04h,0805h,0407h,0406h,000Fh,
+                         000Eh,000Dh,000Ch,6801h,6401h,6001h,5C01h,5801h
+  0000000001xxxxs        001Fh,001Eh,001Dh,001Ch,001Bh,001Ah,0019h,0018h,
+                         0017h,0016h,0015h,0014h,0013h,0012h,0011h,0010h
+  00000000001xxxxs       0028h,0027h,0026h,0025h,0024h,0023h,0022h,0021h,
+                         0020h,040Eh,040Dh,040Ch,040Bh,040Ah,0409h,0408h
+  000000000001xxxxs      0412h,0411h,0410h,040Fh,1803h,4002h,3C02h,3802h,
+                         3402h,3002h,2C02h,7C01h,7801h,7401h,7001h,6C01h
+  000000000000           Unused
+
+

Huffman codes for AC values BS v0 (Serial Experiments Lain)

+

  10                           FE00h          ;End of Block, EOB
+  11s                          0001h
+  011s                         0002h
+  010xs                        0401h,0003h
+  0011xs                       0801h,0005h
+  00101s                       0004h
+  00100xxxs                    000Ah,000Bh,0403h,1801h,000Ch,000Dh,1C01h,000Eh
+  0001xxs                      0006h,0C01h,0402h,0007h
+  00001xxs                     0008h,1001h,0009h,1401h
+  000001xxxxxx0xxxxxxx         0000h..FC00h+(+001h..+07Fh AND 3FFh) ;\
+  000001xxxxxx000000001xxxxxxx 0000h..FC00h+(+080h..+0FFh AND 3FFh) ; Escape
+  000001xxxxxx000000000xxxxxxx Unused                               ; codes
+  000001xxxxxx1xxxxxxx         0000h..FC00h+(-080h..-001h AND 3FFh) ;
+  000001xxxxxx100000000xxxxxxx 0000h..FC00h+(-100h..-081h AND 3FFh) ;
+  000001xxxxxx100000001xxxxxxx Unused                               ;/
+  0000001xxxs                  000Fh,0802h,2001h,0404h,0010h,0011h,2401h,0012h
+  00000001xxxxs                0013h,0405h,0014h,2801h,0015h,0C02h,3001h,0017h,
+                               0016h,2C01h,0018h,001Ch,0019h,0406h,0803h,001Bh
+  000000001xxxxs               001Ah,3401h,001Dh,0407h,1002h,001Fh,001Eh,3801h,
+                               0020h,0021h,0408h,0023h,0022h,1402h,0024h,0025h
+  0000000001xxxxs              0804h,0409h,0418h,0026h,3C01h,0027h,0C03h,1C03h,
+                               0028h,0029h,002Ah,002Bh,040Ah,002Ch,1802h,002Dh
+  00000000001xxxxs             002Fh,002Eh,4001h,0805h,0030h,040Bh,0031h,0033h,
+                               0032h,1C02h,0034h,1003h,0035h,4401h,040Ch,0037h
+  000000000001xxxxs            0036h,0038h,0039h,5401h,003Ah,0C04h,040Dh,5C01h,
+                               2002h,003Bh,0806h,4C01h,003Ch,2402h,6001h,4801h
+  000000000000                 Unused
+
+Uses different 16bit MDEC values, and the Escape code is different: 8bit levels +are 2bit shorter than v1/v2/v3, but 9bit levels are much longer, and 10bit +levels are not supported at all (those v0 Escape codes are described in Sony's +File Format documented; albeit accidentally because the doc was actually trying +to describe v2/v3).

+

Huffman codes for AC values BS ea (Electronic Arts)

+

This is using custom MDEC values from VLC0 chunk, and assigns them to the +standard Huffman codes. There are two special MDEC values:
+

  FE00h End of Block (EOB)
+  7C1Fh Escape code (huffman code will be followed by v2-style 16bit value)
+
+VLC0 chunk entries 00h..DFh are mapped to the following Huffman codes:
+
  10                   00
+  11x                  01,02
+  011x                 03,04
+  010xx                05,06,07,08
+  0011xx               0D,0E,0B,0C
+  00101x               09,0A
+  00100xxxx            2E,2F,22,23,2C,2D,2A,2B,26,27,24,25,20,21,28,29
+  0001xxx              15,16,13,14,0F,10,11,12
+  00001xxx             1A,1B,1E,1F,18,19,1C,1D
+  000001               17h
+  0000001xxxx          3E,3F,38,39,30,31,34,35,32,33,3C,3D,3A,3B,36,37
+  00000001xxxxx        46,47,54,55,4E,4F,44,45,4A,4B,52,53,5E,5F,5C,5D,
+                       42,43,5A,5B,58,59,48,49,4C,4D,40,41,50,51,56,57
+  000000001xxxxx       74,75,72,73,70,71,6E,6F,6C,6D,6A,6B,68,69,66,67,
+                       64,65,62,63,60,61,7E,7F,7C,7D,7A,7B,78,79,76,77
+  0000000001xxxxx      9E,9F,9C,9D,9A,9B,98,99,96,97,94,95,92,93,90,91,
+                       8E,8F,8C,8D,8A,8B,88,89,86,87,84,85,82,83,80,81
+  00000000001xxxxx     B0,B1,AE,AF,AC,AD,AA,AB,A8,A9,A6,A7,A4,A5,A2,A3,
+                       A0,A1,BE,BF,BC,BD,BA,BB,B8,B9,B6,B7,B4,B5,B2,B3
+  000000000001xxxxx    C6,C7,C4,C5,C2,C3,C0,C1,C8,C9,D4,D5,D2,D3,D0,D1,
+                       CE,CF,CC,CD,CA,CB,DE,DF,DC,DD,DA,DB,D8,D9,D6,D7
+  000000000000         Unused
+
+All codes can be freely assigned (Escape and EOB don't need to be at 10 and +000001, and the last huffman bit doesn't have to serve as sign bit).

+

Notes

+

All BS versions are using the same Huffman codes (the different BS versions do +just assign different 16bit MDEC codes to them).
+The huffman codes can be neatly decoded by "counting leading zeroes" (without +needing bitwise node-by-node processing; this is done in IKI video decoders via +GTE registers LZCS and LZCR). Sony's normal v2/v3 decoders are using a yet +faster method: A large table to interprete the next 13bit of the bitstream, the +table lookup can decode up to 3 huffman codes at once (if the 13bit contain +several small huffman codes).

+

CDROM File Video BS Picture Files

+

BS Picture Files

+

A couple of games are storing single pictures in .BS files:
+

  Alice in Cyberland (ALICE.PAC\*.BS)
+  BallBlazer Champions (BBX_EXTR.DAT\Pics\*) (SWAP-encrypted)
+  Bugriders: The Race of Kings (*\*.BS and STILLS\MENUS.BS\*)
+  Die Hard Trilogy 2 (DATA\*.DHB, DATA\DH*\L*\*.DHB, MOVIE\*.DHB)
+  Dino Crisis 2 (PSX\DATA\ST*.DBS\*)
+  Duke Nukem (MagDemo12: DN_TTK\*)
+  Final Fantasy VII (FF7) (MOVIE\FSHIP2*.BIN\*) (BS v1)
+  Gran Turismo 1 (retail TITLE.DAT\* and MagDemo10/15) (in BS iki format)
+  Jet Moto 2 (MagDemo03: JETMOTO2\*)
+  Mary-Kate and Ashley Crush Course (MagDemo52: CRUSH\SCRN\*.BS)
+  Mat Hoffman's Pro BMX (MagDemo48: MHPB\STILLS.BIN\*) (with width/height info)
+  NFL Gameday '99 (MagDemo17: GAMEDAY\FE\GD98DATA.DAT)
+  Official U.S. PlayStation Magazine Demo Disc 01-02 (MENU\DATA\*.BSS)
+  Official U.S. PlayStation Magazine Demo Disc 03-54 (MENU.FF\*)
+  Parasite Eve 2 (INIT.BS, and within .HED/.CDF archives)
+  Resident Evil 1 (PSX\STAGE*\*.BSS, headerless archive, 8000h-byte align)
+  Resident Evil 2 (COMMON\BSS\*.BSS, headerless archive, 10000h-byte align)
+  Rugrats (MagDemo19: RUGRATS\*)
+  Rugrats Studio Tour (MagDemo32: RUGRATS\DATA\RAW\*.BS)
+  Starwars Demolition (MagDemo39+MagDemo41: STARWARS\SHELL\.BS+.TBL\*)
+  Star Wars Rebel Assault 2 (RESOURCE.000\Stills\*) (SWAP-encrypted)
+  Ultimate Fighting Championship (MagDemo38: UFC\CU00.RBB\390h..3E2h)
+  Vigilante 8 (MagDemo09: EXAMPLE\*)
+  Witch of Salzburg (PICT\PIC*\*.BS and DOT1 archives *.BSS, *.DAT, *.BIN)
+  X-Files (LOGOS\*.BS and GRAPHICS\GRAPHICS.BIN and GRAPHICS\PACKEDBS.BIN\*)
+  You Don't Know Jack 2 (MagDemo41: YDKJV2\RES\UI\*.BS)
+
+Note: Those .BS files are usually hidden in custom file archives.

+

BS Picture Resolution

+

Movies have Width/Height entries (in the .STR header). Raw .BS picture files +don't have any such information. However, there are ways to guess the correct +resolution:
+

  For BS iki format, use resolution from iki header (eg. Gran Turismo 1)
+  For MHPB\STILLS.BIN, there's width/height in chunk headers
+  Count the number of blocks (EOB codes) during Huffman decompression
+  Divide that number by 6 to get the number of Macroblocks
+  Search matches for Height=NumBlocks/Width with Width>=Height and Remainder=0
+  If Height=300..400, assume double H-resolution, repeat with Width/2>=Height
+  And/or use a list of known common resoltions (see below examples)
+  Search arrangements with many similar colors on adjacent macroblocks
+
+Common resolutions are:
+
  Blocks Pixels   Example
+  F0h    256x240  any?
+  12Ch   320x240  Resident Evil 2 (COMMON\BSS\*.BSS)
+  1E0h   512x240  Demo Disc 03-54 (MENU.FF\*), Duke Nukem (MagDemo12)
+  1E0h   640x192  Less common than above (but used by Witch of Salzburg)
+  4B0h   640x480  Vigilante 8 (MagDemo09), Jet Moto 2 (MagDemo03)
+  var    random   Witch of Salzburg has various random resolutions
+  iki    ikihdr   Gran Turismo 1 has A0hxA0h and odd size (!) E8hx28h
+  ?      ?        Final Fantasy VII (FF7)
+  ?      ?        Ultimate Fighting Championship (UFC\CU00.RBB\3B7h..3E2h)
+  118h   320x224  Alice in Cyberland (most files; or two such as panorama)
+  230h   ?        Alice in Cyberland (AD_115.BS and AD_123A.BS)
+
+Some other possible, but rather unlikely results would be:
+
  C8h    320x160  Unlikely for pictures (but used for STR videos, eg. Alone)
+  F0h    320x192  Unlikely for pictures (but used for STR videos, eg. Wipeout)
+  1E0h   384x320  Very unlikely to see that vertical resolution on PSX
+
+Witch of Salzburg has many small .BS files with various uncommon resolutions +(most of them are bundled with 16-byte .TXT files with resolution info).

+

Extended BS with Width/Height

+

Starwars Demolition (MagDemo39: STARWARS\SHELL\DEMOLOGO.BS+RESOURCE.TBL\)
+Starwars Demolition (MagDemo41: STARWARS\SHELL\DEMOLOGO.BS+RESOURCE.TBL\
)
+

  000h 2    Width  (280h)       ;\extra header
+  002h 2    Height (1E0h)       ;/
+  004h 2    MDEC Size/4 (after huffman decompression) (rounded to 80h/4 bytes)
+  006h 2    File ID (3800h)
+  008h 2    Quantization step/factor (0000h..003Fh, for MDEC "DCT.bit10-15")
+  00Ah 2    Version (1, 2, or 3) (2 is most common)
+  00Ch ...  Huffman compressed data blocks (Cr,Cb,Y1,Y2,Y3,Y4, Cr,Cb,Y1,Y2..)
+

+

CDROM File Video Wacwac MDEC Streams

+

Wacwac uses different Huffman codes than BS videos, the decoder has some +promising ideas that might yield slightly better compression than BS v3. +However, it is used by only one known game:
+

  Aconcagua (JP) (2000 Sony/WACWAC!)
+
+And even that game is only using it in two movies, and the movies are barely +making any use of it: The 20Mbyte intro scene is a picture slide show (where +the camera is zooming across twelve black and white images), the 50Mbyte ending +scene is providing a more cinematic experience (the camera is scrolling through +a text file with developer staff names).

+

Wacwac MDEC Stream Sectors

+

  000h 2    STR ID   (0160h)
+  002h 2    STR Type WACWAC Tables (0002h=IntroTableSet, 0003h=EndingTableSet)
+  004h 2    Sector number within current Frame (0000h..num-1)
+  006h 2    Number of Sectors in this Frame
+  008h 4    Frame number (6 or 11 and up, because 1st some frames are Polygons)
+  00Ch 4    Frame Size in bytes
+  010h 2    Bitmap Width  (always 140h)  ;\always 320x208 (in fact, the
+  012h 2    Bitmap Height (always 0D0h)  ;/decoder is hardcoded as so)
+  014h 4    Quant (0..3Fh) (same for all sectors within the frame)
+  018h 8    Zerofilled
+  020h 7E0h Raw Bitstream data (without Quant or BS header) (garbage padded)
+
+Aconcagua has dozens of STR files with Polygon Streams. MDEC Streams are found +only in two STR files for Intro and Ending scenes:
+
  Intro=Disc1:\ST01_01\STR_01_00.STR     Ending=Disc2:\ST09_01\STR_09_01.STR
+  Leading zeroes (150 sectors)           Leading zeroes (150 sectors)
+  Frame 0001h..0005h Polygon Frames      Frame 0001h..000Ah Polygon Frames
+  Frame 0006h..0545h MDEC Frames 20MB    Frame 000Bh..0D79h MDEC Frames 50MB
+  Frame 0546h..1874h Polygon Frames 48MB
+
+Audio is normal XA-ADPCM, with the first audio sector occuring before 1st frame +(after the leading zeropadded 150 sectors).

+

Wacwac Huffman Bitstreams

+

Wacwac uses little-endian bitstreams (starting with low bit in bit0 of first +byte). To decode the separate blocks in the bitstream:
+

  Read Huffman code for DC, and output Quant*400h+(DC AND 3FFh)
+  Read Huffman code for Size, aka num1,num2,num3 values for below reads
+  Repeat num1 times: Read Huffman code for AC1, and output AC
+  Repeat num2 times: Read Huffman code for AC2, and output AC
+  Repeat num3 times: Read Huffman code for AC3, and output AC
+  Output EOB (end of block)
+
+The header/data lacks info about MDEC size after Huffman decompression, the +worst case size for 320x208pix would be:
+
  14h*0Dh*6*41h*2+Align(80h)+Header(4) = 31880h+4 bytes
+
+Note: The bitstream consists of separate 16x208pix slices (set DC for Cr,Cb,Y +to zero at begin of each slice, and skip padding to 32bit-boundary at end of +each slice).

+

Wacwac Huffman Table Sets

+

Aconcagua has two table sets, stored in PROGRAM.BIN (in compressed form, +appearing as so: FF,90,16,2E,06,20,03,D6,etc). While watching the intro movie, +the uncompressed sets can be found at these RAM locations:
+

  80112AF8h (1690h bytes)  ;Table Set for Intro Scene
+  80114188h (1B68h bytes)  ;Table Set for Ending Scene
+
+Each Table Set has a 38h-byte header, followed by five tables:
+
  000h 4    Table Set size (1690h or 1B68h)
+  004h 4    Table Set exploded size (when allocating 16bit/DC, 32bit/Size/AC)
+  008h 2    Size Table max Huffman size in bits  (0Ah or 09h)           ;\Size
+  00Ah 2    Size Table number of entries         (40h)                  ;/
+  00Ch 2    DC Table max Huffman size in bits    (0Bh)                  ;\
+  00Eh 2    DC Table number of entries           (100h)                 ; DC
+  010h 2    DC Huffman code Escape 10bit (non-relative 10bit DC value)  ;
+  012h 2    DC Huffman size Escape 10bit (3 or 6, escape prefix size)   ;/
+  014h 2    AC1 Table max Huffman size in bits   (0Eh or 0Bh)           ;\
+  016h 2    AC1 Table number of entries          (0DAh or 100h)         ;
+  018h 2    AC1 Huffman code Escape 7bit  (run=0bit, level=signed7bit)  ; AC1
+  01Ah 2    AC1 Huffman code Escape 16bit (run=6bit, level=10bit)       ;
+  01Ch 2    AC1 Huffman size Escape 7bit  (9 or 7, escape prefix size)  ;
+  01Eh 2    AC1 Huffman size Escape 16bit (9 or 7, escape prefix size)  ;/
+  020h 2    AC2 Table max Huffman size in bits   (0Eh)                  ;\
+  022h 2    AC2 Table number of entries          (AAh or F4h)           ;
+  024h 2    AC2 Huffman code Escape 8bit  (run=3bit, level=signed5bit)  ; AC2
+  026h 2    AC2 Huffman code Escape 16bit (run=6bit, level=10bit)       ;
+  028h 2    AC2 Huffman size Escape 8bit  (10 or 9, escape prefix size) ;
+  02Ah 2    AC2 Huffman size Escape 16bit (10 or 9, escape prefix size) ;/
+  02Ch 2    AC3 Table max Huffman size in bits   (0Eh)                  ;\
+  02Eh 2    AC3 Table number of entries          (87h or B2h)           ;
+  030h 2    AC3 Huffman code Escape 8bit  (run=4bit, level=signed4bit)  ; AC3
+  032h 2    AC3 Huffman code Escape 16bit (run=6bit, level=10bit)       ;
+  034h 2    AC3 Huffman size Escape 8bit  (10 or 9, escape prefix size) ;
+  036h 2    AC3 Huffman size Escape 16bit (10 or 9, escape prefix size) ;/
+  038h ..   Size Table (64bit per entry)    ;\
+  ...  ..   DC Table   (32bit per entry)    ;
+  ...  ..   AC1 Table  (64bit per entry)    ; Tables
+  ...  ..   AC2 Table  (64bit per entry)    ;
+  ...  ..   AC3 Table  (64bit per entry)    ;/
+
+Size Table entries (64bit):
+
  0-1    Zero
+  2-31   Huffman code (10bit max)
+  32-39  Number of AC1 codes in this block  ;\implies End of Block (EOB)
+  40-47  Number of AC2 codes in this block  ; after those AC codes
+  48-55  Number of AC3 codes in this block  ;/
+  56-63  Huffman size (1..10 bits)
+
+DC Table entries (32bit):
+
  0-9    Relative DC Value (relative to old DC from memorized Cr,Cb,Y)
+  10-15  Huffman size (1..11 bits)
+  16-31  Huffman code (11bit max)
+ Notes: For the relative DC's, the decoder does memorize DC for Cr,Cb,Y upon
+  decoding Cr,Cb,Y1,Y3 (but does NOT memorize DC when decoding Y2,Y4).
+  Initial DC for Cr,Cb,Y is zero at begin of each 16x208pix slice.
+ Obscurities: The decoder does accidentally use bit10 to sign-expand the
+  DC value in bit0-9 (but does mask-off those bugged sign bits thereafter),
+  and the decoder does uselessly memorize Y1 and Y3 separately (but uses only
+  the most recently memorized value).
+
+AC1/AC2/AC3 Table entries (64bit):
+
  0-1    Zero
+  2-31   Huffman code (14bit max)
+  32-47  MDEC code (6bit run, and 10bit AC level)
+  48-63  Huffman size (1..14 bits)
+
+The Escape codes are stored in the 38h-byte Table Set header (instead of in the +tables), the init function uses that info for patching escape-related opcodes +in the decoder function (that would allow to omit table lookups upon escape +codes; the decoder doesn't actually omit such lookups though).
+To simplify things, one could store the escape codes in the tables (eg. using +special MDEC values like FC00h+35h for run=3bit, level=signed5bit).

+

CDROM File Video Polygon Streaming

+

Ape Escape - Polygon Streaming

+

Used by Ape Escape (Sony 1999) (DEMO\.STR and some STR\.STR files and +KKIIDDZZ.HED\STR\0006h and up).
+The files start with zerofilled sectors (without STR headers), followed by +sectors with STR headers with [00h]=0160h, [02h]=8001h (same values as for +MDEC), but with [10h..1Fh]=zero (without resolution/header info). And the data +at [20h] starts with something like 14h,00h,03h,FFh,2Ah,02h,00h,00h.
+That data seems to consist of polygon coordinates/attributes that are rendered +as movie frames. The texture seems to be stored elsewhere (maybe in the .ALL +files that are bundled with some .STR files).

+

Panekit - Polygon Streaming

+

Panekit STR seems to use Polygon Streaming (except 1st some Megabytes are +MDEC).

+

Aconcagua - Polygon Streaming

+

Aconcagua STR does use Polygon Streaming (except first+last movie are MDEC).

+

Cyberia (1996) (TF\STR\*.STR)

+

Cyberia is using Software-rendering for both movies and in-game graphics. That +is, PSX hardware features like MDEC, GTE, and GPU-Polygons are left all unused, +and the GPU is barely used for transferring data from CPU to VRAM.
+The STR header for software-rendered movie frames looks as so:
+

  000h 2    STR ID   (0160h)
+  002h 2    STR Type (0002h=Custom, Software rendering)
+  004h 2    Sector number within current Frame (0..num-1)
+  006h 2    Number of Sectors in this Frame    (varies)
+  008h 4    Frame Number (1=First)
+  00Ch 4    Frame Size in Bytes/4 (note: first frame in MAP*.STR is quite big)
+  010h 2    Rendering Width  (0140h)
+  012h 2    Rendering Height (00C0h)
+  014h 0Ch  Unknown (zerofilled or random garbage)
+  020h 7E0h Custom data for software rendering
+
+Note: First sector of First frame does usually have byte[22h]=88h (except +FINMUS.STR). The Custom data part is often have garbage padding (such like +ASCII strings with "c2str" command line tool usage instructions).

+

Croc 1 (CUTS\*.AN2)

+

Probably cut-scenes with polygon animations. The files seem to contain +2300h-byte data frames (plus XA-ADPCM sectors inserted here and there).
+

  000h 4     Number of remaining frames
+  ...  22FCh Unknown data (zeropadded if smaller)
+

+
 _______________ Unknown Streaming Data (Polygons or whatever) ________________
+
+

Custom STR - 3D Baseball (BIGFILE.FOO)

+

This is used for several files in 3D Baseball (BIGFILE.FOO):
+

  BIGFILE.FOO\0151h\0005h,0009h,000Fh,0017h,001Bh, 02E5h,02E9h,..,0344h,0348h
+  BIGFILE.FOO\0152h\0186h,018Ch,0192h,0198h)
+  BIGFILE.FOO\0153h\029Ah,02A0h,02A6h,02ACh)
+
+The files contain some kind of custom streaming data, with custom STR header, +and data containing increasing/decreasing bytes... maybe non-audio waveforms?
+
  000h 2    STR ID   (0160h)
+  002h 2    STR Type (0001h=Custom)
+  004h 2    Sector number within current Frame (always 0)
+  006h 2    Number of Sectors in this Frame    (always 1)
+  008h 4    Frame Number (1=First)
+  00Ch 4    Frame Size (6FAh or 77Ah, sometimes 17Ah or 1FAh or 20Ah)
+  010h 2    Unknown (280h, or sometimes 300h or 340h)
+  012h 2    Frame Time (0=First, increases with step [19h], usually +5 or +7)
+  014h 2    Unknown (280h, or sometimes 300h or 3C0h, or 0)
+  016h 1    Frame Time (same as [012h] AND FFh)
+  017h 1    Unknown (0 or 1)
+  018h 1    Unknown (40h, or 80h, or C0h)
+  019h 1    Duration? (5 or 7, or sometimes less, step for Frame Time)
+  01Ah 1    Unknown (3, or less in last some frames)
+  01Bh 5    Zerofilled
+  020h 7E0h Data (increasing/decreasing bytes... maybe non-audio waveforms?)
+

+

Army Men Air Attack 2 (MagDemo40: AMAA2\*.PMB)

+

  000h 2     STR ID   (0160h)
+  002h 2     STR Type (0000h=Custom)
+  004h 2     Sector number within current Frame (0..2)
+  006h 2     Number of Sectors in this Frame    (always 4) (3xSTR + 1xADPCM)
+  008h 4     Frame Number (1=First)
+  00Ch 4     Frame Size? (800h, despite of having 3 sectors with 7E0h each?)
+  010h 2     Unknown (00h or 01h)
+  012h 2     Unknown (A3h or ABh ... 6Ch or 7Bh ... or 43h or 49h)
+  014h 2     Sector number within current Frame (0..2) (same as [004h])
+  016h 0Ah   Zerofilled
+  020h 7E0h  Data (polygon streaming or so?)
+
+Note: The .PMB file is bundled with a .PMH file, which might contain header +info?

+

Bits Laboratory games (Charumera, and True Love Story series)

+

  Charumera                  ENDING.XA     (with dummy/zero data)
+  True Love Story            TLS\MULTI.XA  (with nonzero data)
+  True Love Story 2          TLS2\ENDING.STR and TLS2\MULTI.XA
+  True Love Story Fan Disc            ;\probably use that format, too
+  True Love Story: Remember My Heart  ;/(not verified)
+
+The STR headers have STR ID=0160h and STR Type=0001h, STR header[10h..1Fh] +contains nonsense BS video info (with BS ID=3800h, although there isn't any BS +data in the actual data part at offset 20h and up).
+The files do mainly contain XA-ADPCM sectors, plus some STR sectors in non-MDEC +format. Unknown if that STR sectors are separate channels, or if they are used +in parallel with the XA-ADPCM channel(s).
+Unknown what the STR sectors are used for (perhaps Polygon Streaming, audio +subtitles, or simple garbage padding for unused audio sectors). In some files, +the STR sectors appear to be just dummy padding (STR header plus zerofilled +data area).

+

Nightmare Project: Yakata

+

This game has normal MDEC Streams, and Special Streams in non-MDEC format (eg. +Disc1, File 0E9h-16Eh and 985h-B58h), perhaps containing Polygon Streams or +whatever.
+There are two channels (file=1/channel=00h-01h), each channel contains data +that consists of 5 sectors per frame (1xHeader plus 4xData). The sectors have +STR ID=0160h, and STR Type as follows:
+

  0000h=Whatever special, channel 0 header (sector 0)
+  0400h=Whatever special, channel 1 header (sector 1)
+  0001h=Whatever special, channel 0 data   (sector 2,4,6,8)
+  0401h=Whatever special, channel 1 data   (sector 3,5,7,9)
+

+

Eagle One: Harrier Attack STR files

+

  \*.STR            MDEC movies  ;\BS fraquant (except, demo version
+  \DATA*\*.STR      MDEC movies  ;/            on MagDemo31 uses mormal BS v2)
+  \DATA*\M*\L*.STR  Multi-language TXT files with STR header on each sector
+  \DATA*\M*\I*.STR  unknown binary data (whatever and SPU-ADPCM)
+  \LANGN.STR        unknown binary data (whatever)
+
+All of the above have STR Type=8001h (but only the MDEC movies have BS ID +3800h; the MDEC movies start with 13 zerofilled sectors that are all zeroes +without any STR/BS headers).

+

CDROM File Audio Single Samples VAG (Sony)

+

VAG audio samples

+

PSX Lightspan Online Connection CD, cdrom:\CD.TOC:\UI*\.VAG
+PSX Wipeout 2097, cdrom:\WIPEOUT2\SOUND\SAMPLES.WAD:\
.vag (version=02h)
+PSX Perfect Assassin, DATA.JFS:\AUDIO\.VAG and DATA.JFS:\SND\.VAG
+

  000h 4    File ID (usually "VAGp")
+  004h 4    Version (usually 02h, or 20h)                       (big-endian)
+  008h 4    Reserved (0) (except when ID="VAGi")                (big-endian)
+  00Ch 4    Channel Size (data size... per channel?)            (big-endian)
+  010h 4    Sample Rate (in Hertz) (eg. 5622h=22050Hz)          (big-endian)
+  014h 0Ch  Reserved (0) (except when version=2)
+  020h 10h  Name (ASCII, zeropadded)
+  ... (..)  Optional ID string (eg. "STEREO" in upper/lowercase)
+  ... (..)  Optional Padding to Data start
+  ...  ..   ADPCM Data for channel(s) (usually at offset 030h)
+
+VAG files are used on PSX, PSP, PS2, PS3, PS4. The overall 1-channel mono +format is same for consoles. But there are numerous different variants for +interleaved 2-channel stereo data.

+

VAG Filename Extensions

+
  .vag      default (eg. many PSX games)
+  .vig      2-channel with interleave=10h (eg. PS2 MX vs ATV Untamed)
+  .vas      2-channel with interleave=10h (eg. PS2 Kingdom Hearts II)
+  .swag     2-channel with interleave=filesize/2 (eg. PSP Frantix)
+  .l and .r 2-channel in l/r files (eg. PS2 Gradius V, PS2 Crash Nitro Kart)
+  .str      whatever (eg. P?? Ben10 Galactic Racing)
+  .abc      whatever (eg. PSP F1 2009 (v6), according to wiki.xentax.com)
+
+

VAG File IDs (header[000h])

+
  "VAGp"  default (eg. many PSX games)
+  "VAG1"  1-channel (eg. PS2 Metal Gear Solid 3)
+  "VAG2"  2-channel (eg. PS2 Metal Gear Solid 3)
+  "VAGi"  2-channel interleaved (eg. ?)
+  "pGAV"  little endian with extended header (eg. PS2 Jak 3, PS2 Jak X)
+  "AAAp"  extra header, followed by "VAGp" header (eg. PS2 The Red Star)
+
+

VAG Versions (header[004h])

+
  00000000h   v1.8 PC
+  00000002h   v1.3 Mac (eg. PSX Wipeout 2097, in SAMPLES.WAD)
+  00000003h   v1.6+ Mac
+  00000020h   v2.0 PC (most common, eg. PSX Perfect Assassin)
+  00000004h   ? (later games, uh when/which?)
+  00000006h   ? (vagconf, uh when/which?)
+  00020001h   v2.1 (vagconf2)   ;\with HEVAG coding instead SPU-ADPCM
+  00030000h   v3.0 (vagconf2)   ;/(eg. PS4/Vita)
+  40000000h   ? (eg. PS2 Killzone) (1-channel, little endian header)
+
+

Reserved Header entries for ID="VAGi"

+
  008h 4  Interleave (little endian) (the other header entries are big endian)
+
+

Reserved Header entries for Version=00000002h (eg. PSX Wipeout 2097)

+

This does reportedly contain some default "base" settings for the PSX SPU:
+

  014h 2  Volume left                    4Eh,82h  ;-Port 1F801C00h
+  016h 2  Volume right                   4Eh,82h  ;-Port 1F801C02h
+  018h 2  Pitch (includes fs modulation) A8h,88h  ;-Port 1F801C04h +extra bit?
+  01Ah 2  ADSR1                          00h,00h  ;-Port 1F801C08h
+  01Ch 2  ADSR2                          00h,E1h  ;-Port 1F801C0Ah
+  01Eh 2  ?                              A0h,23h  ;-Port 1F801C0xh maybe?
+

+

Reserved Header entries for Version=00000003h (according to wiki.xentax.com)

+
  01Eh 1  Number of channels (0 or 1=Mono, 2=Stereo)
+
+

Reserved Header entries for Version=00020001h and Version=00030000h

+

  01Ch 2  Zero                                      ;if non-zero: force Mono
+  01Eh 1  Number of channels (0 or 1=Mono, 2=Stereo ;if 10h..FFh: force Mono
+  01Fh 1  Zero                                      ;if non-zero: force Mono
+
+Unknown if the above "force Mono" stuff is really needed (maybe it was intended +to avoid problems with Version=00000002h, and maybe never happens in +Version=00000003h and up)?

+

VAG ADPCM Data

+

The ADPCM data uses PSX SPU-ADPCM encoding (even on PS2 and up, except PS4 with +Version=0002001h or Version=00030000h, which do use HEVAG encoding).
+SPU ADPCM Samples
+The data does usually start at offset 0030h (except, some files have extra +header data or padding at that location).
+The first 10h-byte ADPCM block is usually all zero (used to initialize the +SPU).
+2-channel (stereo) files are usually interleaved in some way.

+

VAG Endiannes

+

The file header entries are almost always big-endian (even so when used on +little endian consoles). There are a few exceptions:
+ID="VAG1" has little endian [008h]=Interleave (remaining header is big-endian).
+ID="pVAG" has (some?) header entries in little endian.
+Version=40000000h has most or all header entries in little endian (perhaps +including the version being meant to be 00000040h).

+

VAG Channels

+

VAGs can be 1-channel (mono) or 2-channel (stereo). There is no standarized way +to detect the number of channels (it can be implied in the Filename Extension, +Header ID, in Reserved Header entries, in the Name string at [020h..02Fh], in +optional stuff at [030h], or in a separate VAG Header in the middle of the +file).

+

VAG Interleave

+
  None       default (for 1-channel mono) (and separate .l .r stereo files)
+  800h       when ID="VAG2"
+  [008h]     when ID="VAGi" (little-endian 32bit header[008h])
+  1000h      when ID="pGAV" and [020h]="Ster" and this or that
+  2000h      when ID="pGAV" and [020h]="Ster" and that or this
+  10h        when filename extension=".vig"
+  10h        when Version=0002001h or Version=00030000h (and channels=2)
+  filesize/2 when filename extension=".swag"
+  6000h      when [6000h]="VAGp" (eg. PSX The Simpsons Wrestling)
+  1000h      when [1000h]="VAGp" (eg. PS2 Sikigami no Shiro)
+  ...
+
+

AAAp Header

+
  000h 4     ID "AAAp"
+  004h 2     Interleave
+  006h 2     Number of Channels (can be 1 or 2?)
+  008h 30h*N VAGp header(s) for each channel, with Version=00000020h
+  ...  ..    ADPCM Data (interleaved when multiple channels)
+
+

See also

+

http://github.com/vgmstream/vgmstream/blob/master/src/meta/vag.c ;very detailed
+http://wiki.xentax.com/index.php/VAG_Audio ;rather incomplete and perhaps wrong

+

CDROM File Audio Sample Sets VAB and VH/VB (Sony)

+

VAB vs VH/VB

+

  .VAB  contains VAB header, and ADPCM binaries   ;-all in one file
+  .VH   contains only the VAB header              ;\in two separate files
+  .VB   contains only the ADPCM binaries          ;/
+
+PSX Perfect Assassin has some v7 .VH/.VB's (in \DATA.JFS:\SND\.*)
+PSX Resident Evil 2, COMMON\DATA\
.DIE (contains .TIM+.VAB badged together)
+PSX Spider-Man, CD.HED\l2a1.vab is VAB v5 (other VABs in that game are v7)
+PSX Tenchu 2 (MagDemo35: TENCHU2\VOLUME.DAT\5\* has VAB v20h, maybe a typo)

+

VAB Header (VH)

+

  0000h 4       File ID ("pBAV")
+  0004h 4       Version (usually 7) (reportedly 6 exists, too) (5, 20h exists)
+  0008h 4       VAB ID (usually 0)
+  000Ch 4       Total .VAB filesize in bytes (or sum of .VH and .VB filesizes)
+  0010h 2       Reserved (EEEEh)
+  0012h 2       Number of Programs, minus 1 (0000h..007Fh = 1..128 programs)
+  0014h 2       Number of Tones, minus? (max 0800h?) (aka max 10h per program)
+  0016h 2       Number of VAGs, minus? (max 00FEh)
+  0018h 1       Master Volume (usually 7Fh)
+  0019h 1       Master Pan    (usually 40h)
+  001Ah 1       Bank Attribute 1 (user defined) (usually 00h)
+  001Bh 1       Bank Attribute 2 (user defined) (usually 00h)
+  001Ch 4       Reserved (FFFFFFFFh)
+  0020h 800h    Program Attributes 10h-byte per Program 00h..7Fh   (fixed size)
+  0820h P*200h  Tone Attributes 200h-byte per Program 00h..P-1  (variable size)
+  xx20h 200h    16bit VAG Sizes (div8) for VAG 00h..FFh            (fixed size)
+  xx20h (...)   ADPCM data (only in .VAB files, otherwise in separate .VB file)
+
+Program Attributes (10h-byte per Program, max 80h programs)
+
  000h 1      tones        Number of Tones in the Program (Yaroze: 4) (uh?)
+  001h 1      mvol         Master Volume   (Yaroze: 0..127)
+  002h 1      prior                        (Yaroze: N/A)
+  003h 1      mode                         (Yaroze: N/A)
+  004h 1      mpan         Master Panning  (Yaroze: 0..127)
+  005h 1      reserved0
+  006h 2      attr                         (Yaroze: N/A)
+  008h 4      reserved1
+  00Ch 4      reserved2
+
+Tone Attributes (20h-byte per Tone, max 10h tones per Program)
+
  000h 1      prior        Tone Priority   (Yaroze: 0..127, 127=highest)
+  001h 1      mode         Mode            (Yaroze: 0=Normal, 4=Reverberation)
+  002h 1      vol          Tone Volume     (Yaroze: 0..127)
+  003h 1      pan          Tone Panning    (Yaroze: 0..127)
+  004h 1      center       Centre note (in semitone units) (Yaroze: 0..127)
+  005h 1      shift        Centre note fine tuning         (Yaroze: 0..127)
+  006h 1      min          Note limit minimum value     (Yaroze: 0..127)
+  007h 1      max          Note limit maximum value     (Yaroze: 0..127)
+  008h 1      vibW                                      (Yaroze: N/A)
+  009h 1      vibT                                      (Yaroze: N/A)
+  00Ah 1      porW                                      (Yaroze: N/A)
+  00Bh 1      porT                                      (Yaroze: N/A)
+  00Ch 1      pbmin        Max? value for downwards pitchbend  (Yaroze: 0..127)
+  00Dh 1      pbmax        Max value for upwards pitchbend     (Yaroze: 0..127)
+  00Eh 1      reserved1
+  00Fh 1      reserved2
+  010h 2      ADSR1        Attack,Decay    (Yaroze: 0..127,0..15)
+  012h 2      ADSR2        Release,Sustain (Yaroze: 0..127,0..31)
+  014h 2      prog         Program number that tone belongs to (Yaroze: 0..127)
+  016h 2      vag          VAG number                          (Yaroze: 0..254)
+  018h 8      reserved
+

+

VAB Binary (VB) (ADPCM data) (to be loaded to SPU RAM)

+

This can contain max 254 "VAG files" (maybe because having two (?) reserved +8bit numbers?).
+Sony wants the total size of the ADPCM data to be max 7E000h bytes (which would +occupy most of the 512Kbyte SPU RAM, leaving little space for the echo buffer +or additional effects).
+Note: The "VAG files" inside of VAB/VB are actually raw SPU-ADPCM data, without +any VAG file header. The first 10h-byte ADPCM block is usually zerofilled.

+

CDROM File Audio Sequences SEQ/SEP (Sony)

+

SEQ - Single Sequence

+

.SEQ contains MIDI-style sequences, the samples for the instruments can be +stored in a separate .VAB file (or .VH and .VB files).
+Used by Perfect Assassin, DATA.JFS:\SND\*.SEQ (bundled with *.VH and *.VB)
+Used by Croc (MagDemo02: CROC\CROCFILE.DIR\AMBI*.BIN, MAP*.BIN, JRHYTHM.BIN)
+Used by many other games.
+

  000h 4   File ID "pQES"
+  004h 4   Version (1)                    (big endian?)
+  008h 2   Resolution per quarter note      (01h,80h)
+  00Ah 3   Tempo 24bit (8bit:16bit maybe?)  (07h,27h,0Eh)
+  00Dh 2   Rhythm (NN/NN)                   (04h,02h)
+  00Fh ... Score data, uh?    (with many MIDI KeyOn's: xx,9x,xx,xx)
+  ...  3   End of SEQ (2Fh=End of Track)    (FFh,2Fh,00h)
+
+The "Score data" seems to be more or less same as in Standard Midi Format (.smf +files), ie. containing timing values and MIDI commands/parameters.

+

SEP - Multi-Track Sequences

+

This is a simple "archive" with several SEQ-like sequences.
+

  000h 4   File ID "pQES"  ;same ID as in .SEQ files (!)
+  004h 2   Version (0)     ;value 0, and only 16bit, unlike .SEQ files
+  006h ..  1st Sequence
+  ...  ..  2nd Sequence
+  ...  ..  etc.
+
+Sequences:
+
  000h 2   Sequence ID (0000h and up)     (big endian)        ;-ID number
+  002h 2   Resolution per quarter note      (01h,80h)         ;\
+  004h 3   Tempo 24bit                      (07h,27h,0Eh)     ; as in SEQ files
+  007h 2   Rhythm (NN/NN)                   (04h,02h)         ;/
+  009h 4   Data size (big endian, from 00Dh up to including End of SEQ(
+  00Dh ... Score data, uh?                  (...)             ;\as in SEQ files
+  ...  3   End of SEQ (2Fh=End of Track)    (FFh,2Fh,00h)     ;/
+
+Used by Hear It Now (Playstation Developer's Demo) (RCUBE\RCUBE.SEP)
+Used by Rayman (SND\BIGFIX.ALL\0002)
+Used by Monster Rancher (MagDemo06, MR_DEMO\DATA\MF_DATA.OBJ\025B)
+Used by Rugrats (MagDemo19: RUGRATS\DB02\.SEP and MENU\SOUND\SEPS\.SEP)
+Used by Rugrats Studio Tour (MagDemo32: RUGRATS\DATA\SEPS\*.SEP)
+Used by Monkey Hero (MagDemo17: MONKEY\BIGFILE.PSX}*.SEP)
+Used by Pitfall 3D
+Used by Blue's Clues: Blue's Big Musical (SEPD chunks in *.TXD)

+

CDROM File Audio Other Formats

+

.SQ .HD .HD (SSsq/SShd)

+

This is a newer Sony format from 1999 (resembling the older .SEQ .VH .VB +format).
+Used by Alundra 2, Ape Escape, Arc the Lad 3, Koukidou Gensou - Gunparade +March, Omega Boost, PoPoLoCrois Monogatari II, The Legend of Dragoon, Wild Arms +2.
+

  .SQ Sequence Data (with ID "SSsq")
+  .HD Voice Header  (with ID "SShd")
+  .BD Voice Binary  (raw SPU-ADPCM, same as .VB)
+

+
Sequence Data (*.SQ)
+
  000h 2       Unknown (always 64h)
+  002h 2       Unknown (always 1E0h)
+  004h 1?      Unknown (varies)
+  005h 7       Zerofilled
+  00Ch 4       ID "SSsq"
+  010h 10h*10h Unknown Table
+  110h ..      Unknown Data
+
+
Voice Header (*.HD)
+
  000h 4     Size of the .HD file itself
+  004h 4     Size of the corresponding .BD file
+  008h 4     Zero
+  00Ch 4     ID "SShd"
+  010h 1Ch*4 Offsets to data (or FFFFFFFFh=None)
+  080h ..    Data
+
+
Voice Binary (*.BD) (same as .VB files)
+
  000h ..    SPU-ADPCM data (usually starting with zerofilled 10h-byte block)
+
+

DNSa/PMSa/FNSa/FMSa

+

There are four four file types:
+

  "DNSa"  (aka SouND backwards)         ;sequence data
+  "PMSa"  (aka SaMPles backwards)       ;samples with small header
+  "FMSa"  (aka SaMples-F... backwards)  ;samples with bigger header   ;\Legacy
+  "FNSa"  (aka SouNd-F... backwards)    ;whatever tiny file           ;/of Kain
+
+Used by several games (usually inside of BIGFILE.DAT):
+
  Akuji (MagDemo18: AKUJI\BIGFILE.DAT\*) (DNSa,PMSa)
+  Gex 2 (MagDemo08: GEX3D\BIGFILE.DAT\*) (DNSa)
+  Gex 3: Deep Cover Gecko (MagDemo20: G3\BIGFILE.DAT\*) (DNSa,PMSa)
+  Legacy of Kain 2 (MagDemo13: KAIN2\BIGFILE.DAT\*) (DNSa)
+  Legacy of Kain 2 (MagDemo26: KAIN2\BIGFILE.DAT\*) (DNSa,PMSa,FNSa,FMSa)
+  Walt Disney World Racing Tour (MagDemo35: GK\BIGFILE.DAT\*) (DNSa,PMSa)
+
+Note: The exact file format does reportedly differ in each game.

+
"PMSa" (aka SaMPles backwaords)
+
  000h 4     ID "PMSa"
+  004h 4     Total Filesize
+  008h 8     Zerofilled
+  010h ..    SPU-ADPCM data (usually starting with zerofilled 10h-byte block)
+
+
"DNSa" (aka SouND backwards)
+
  000h 4      ID "DNSa"   ;aka SND backwards
+  004h 2      Offset from DNSa+4 to 8-byte entries (can be odd)
+  006h 1      Unknown (3)
+  007h 1      Number of 8-byte entries   (N1)
+  008h 1?     Number of 10h-byte entries (N2)
+  ...  ..     Unknown (..)
+  ...  N1*8   Whatever 8-byte entries
+  ...  N2*10h Whatever 10h-byte entries
+  ...  ..     ... circa 40h 4-byte entries...?
+  ...  ..     Unknown (..)
+  ...  ..     Several blocks with ID "QESa" or "QSMa"  ;supposedly MIDI-style?
+
+
"FNSa" (aka SouNd-F... backwards)
+

These are whatever tiny files (with filesize 1Ch or 2Ch).
+

  000h 4     ID "FNSa"
+  ...  ..    Unknown
+

+
"FMSa" (aka SaMples-F... backwards)
+
  000h 4     ID "FMSa"
+  008h ..    Unknown..
+  ...  ..    SPU-ADPCM data (usually starting with zerofilled 10h-byte block)
+
+

AKAO

+

There a several games that have sound files with ID "AKAO".
+

  XXX does that include different AKAO formats... for Samples and Midi?
+
+AKAO is also used in several streaming movies:
+CDROM File Video Streaming Audio

+

Others

+

Alone in the Dark IV has MIDB and DSND chunks (which contain sound files).

+

See also

+

The page below does mention several PSX sound formats, plus some open source +& closed source tools for handling those files.
+https://github.com/loveemu/vgmdocs/blob/master/Conversion_Tools_for_Video_Game_Music.md

+

CDROM File Audio Streaming XA-ADPCM

+

Audio Streaming (XA-ADPCM)

+

Audio streaming is usually done by interleaving the .STR or .BS file's Data +sectors with XA-ADPCM audio sectors (the .STR/.BS headers don't contain any +audio info; because XA-ADPCM sectors are automatically decoded by the CDROM +controller).
+Raw XA-ADPCM files (without video) are usually have .XA file extension.

+

CDROM File Audio CD-DA Tracks

+

The eleven .SWP files in Wipeout 2097 seem to be CD-DA audio tracks.
+The one TRACK01.WAV in Alone in the Dark, too?
+Other than that, tracks can be accessed via TOC instead of filenames.

+

CDROM File Archives with Filename

+

Entrysize=08h

+
WWF Smackdown (MagDemo33: TAI\*.PAC)
+

  000h 4     ID ("DPAC")                                        ;\
+  004h 4     Unknown (100h)                                     ;
+  008h 4     Number of files (N)                                ;
+  00Ch 4     Directory Size (N*8)                               ; Header
+  010h 4     File Data area size (SIZE = Totalsize-Headersize)  ;
+  014h 4     Unknown (1)                                        ;
+  018h 7E8h  Zerofilled (padding to 800h-byte boundary)         ;
+  800h N*8   File List                                          ;
+  ...  ..    Zerofilled (padding to 800h-byte boundary)         ;/
+  ...  SIZE  File Data area                                     ;-Data area
+ File List entries:
+  000h 8     Filename ("NAME")
+  004h 2     File Offset/800h (increasing)
+  006h 2     File Size/800h
+
+The DPAC archives can contain generic files (eg .TIM) and child archives (in a +separate archive format, with ID "PAC ").

+

Entrysize=10h

+
Championship Motocross (MagDemo25: SMX\RESHEAD.BIN and RESBODY.BIN)
+

RESHEAD.BIN:
+

  000h N*10h  File List (220h bytes)
+ File List entries:
+  000h 8      Filename ("FILENAME", if shorter: terminated by 00h plus garbage)
+  008h 4      Filesize in bytes
+  00Ch 4      Offset/800h in RESBODY.BIN (increasing) (or FFFFFFFFh if Size=0)
+
+RESBODY.BIN:
+
  000h ..     File Data (referenced from RESHEAD.BIN)
+

+
One (DIRFILE.BIN\w*\sect*.bin)
+
  000h N*10h File List
+  ...  ..    File Data area
+ File List entries:
+  000h 0Ch   Filename (eg. "FILENAME 001")     ;for last entry: "END      000"
+  00Ch 4     Offset (increasing, N*10h and up) ;for last entry: zero
+
+
True Love Story 1 and 2 (TLS*\MCD.DIR and MCD.IMG)
+

MCD.DIR:
+

  000h N*10h  File List
+  ...  10h    End marker (FFh-filled)
+ File List entries:
+  000h 8      Filename (zeropadded if less than 8 chars)
+  008h 2      Zero (0000h)
+  00Ah 2      Size/800h
+  00Ch 4      Offset/800h in MCD.IMG
+ Note: Filenames are truncated to 8 chars (eg. "FOREST.T" instead "FOREST.TIM")
+
+MCD.IMG:
+
  000h ..     File Data area (encrypted in True Love Story 2)
+
+In True Love Story 2, the MCD.IMG data is encrypted as follows:
+
 init_key_by_filename(name):    ;for MCD.IMG (using filenames from MCD.DIR)
+  i=0, key0=0001h, key1=0001h, key2=0001h
+  while i<8 and name[i]<>00h
+    key0=(key0 XOR name[i])
+    key1=(key1 * name[i]) AND FFFFh
+    key2=(key2 + name[i]) AND FFFFh
+  ret
+ init_key_by_numeric_32bit_seed(seed):  ;maybe for LINEAR.IMG and PICT.IMG ?
+  key0=(seed) AND FFFFh
+  key1=(seed - (seed*77975B9h/400000000h)*89h) AND FFFFh
+  key2=(seed - (seed*9A1F7E9h/20000000000h)*3527h) AND FFFFh
+  ret
+ decrypt_data(addr,len):
+  for i=1 to len/2
+    key2=key2/2 + (key0 AND 1)*8000h
+    key0=key0/2 + (key1 AND 1)*8000h
+    key1=key1/2 + ((key1/2 OR key0) AND 1)*8000h
+    key0=((((key1+47h) AND FFFFh)/4) XOR key0)+key2+(((key1+47h)/2) AND 1)
+    halfword[addr]=halfword[addr] XOR key0, addr=addr+2
+  ret
+
+The MCD.* files don't contain any encryption flag. Below are some values that +could be used to distinguish between encrypted and unencrypted MCD archives +(though that may fail in case of any other games/versions with other values):
+
  Item                    Unencrypted   Encrypted
+  Parent Folder name      "TLS"         "TLS2"
+  First name in MCD.DIR   "BACKTILE"    "TEST.RPS"
+  First word in MCD.IMG   00000010h     074D4C8Ah
+

+
Star Wars Rebel Assault 2 (RESOURCE.*, and nested therein)
+
BallBlazer Champions (*.DAT, and nested therein)
+

The Rebel RESOURCE.* files start with name "bigEx" or "fOFS", BallBlazer *.DAT +start with "SFXbase" or "tpage", nested files start with whatever other names.
+

  000h N*10h File List
+  ...  (4)   CRC32 on above header (Top-level only, not in Nested archives)
+  ...  ..    File Data area
+  ...  (..)  Huge optional padding to xx000h-byte boundary (in BallBlazer .DAT)
+ File List entries in Top-level archives (with [0Ch].bit31=1):
+  000h 8     Filename (zeropadded if less than 8 chars)
+  008h 4     Decompressed Size (or 0=File isn't compressed)
+  00Ch 4     Offset, self-relative from current List entry (plus bit31=1)
+ File List entries in Nested archives (with [0Ch].bit31=0):
+  000h 0Ch   Filename (zeropadded if less than 12 chars)
+  00Ch 4     Offset, self-relative from current List entry (plus bit31=0)
+ Last File List entry has [00h..0Bh]=zerofilled, and Offset to end of file.
+
+Uncompressed Data Format (when List entry [08h]=0 or [0Ch].bit31=0):
+
  000h ..    Uncompressed Data
+  ...  ..    CRC32 on above Data (Top-level only, not in Nested archives)
+
+Compressed Data Format (when List entry [08h]>0 and [0Ch].bit31=1)::
+
  000h 1     Compression Method (01h=LZ/16bit, 02h=LZ/24bit)
+  001h 3     Decompressed Size (big-endian)
+  004h ..    Compressed Data
+  ...  ..    Zeropadding to 4-byte boundary
+  ...  ..    CRC32 on above bytes (method, size, compressed data, padding)
+
+CDROM File Compression RESOURCE (Star Wars Rebel Assault 2)

+

Entrysize=14h

+
Fighting Force (MagDemo01: FGHTFRCE\*.WAD)
+

  000h 4     Number of files                                  (big endian)
+  004h N*14h File List
+  ...  ..    File Data
+
+File List entries:
+
  000h 0Ch   Filename ("FILENAME.EXT", zeropadded if shorter than 12 chars)
+  00Ch 4     Filesize in bytes (can be odd)                   (big endian)
+  010h 4     Fileoffset in bytes (increasing, 4-byte aligned) (big endian)
+

+
Parappa (MagDemo01: PARAPPA\*.INT)
+
Um Jammer Lammy (MagDemo24: UJL\*.INT)
+

  0000h 2000h Folder 1
+  2000h ..    File Data for Folder 1
+  ...   2000h Folder 2
+  ...   ..    File Data for Folder 2
+  ...   2000h Folder End marker (FFFFFFFFh, plus zeropadding)
+
+Folder entries:
+
  0000h 4      Folder ID (increasing, 1,2,3, or FFFFFFFFh=End)
+  0004h 4      Number of files (max 198h) (N)
+  0008h 4      File Data Area size/800h   (S)
+  000Ch 4      Zero (0)
+  0010h N*14h  File List
+  ...   ..     Zeropadding to 2000h
+  2000h S*800h File Data Area for this folder
+
+File List entries:
+
  000h 4     Filesize in bytes
+  004h 10h   Filename (FILENAME.EXT, zeropadded)
+
+File Offsets are always 4-byte aligned (required for Um Jammer Lammy, which +contains Filesizes that aren's multiples of 4).
+Note: There can be more than one folder with same ID (ie. when having more than +198h TIM files, which won't fit into a single 2000h-byte folder).

+
Gran Turismo 1 (MagDemo10: GT\BG.DAT\, GT\COURSE.DAT\)
+
Gran Turismo 1 (MagDemo15: GT\BG.DAT\, GT\COURSE.DAT\)
+
JumpStart Wildlife Safari Field Trip (MagDemo52: DEMO\DATA.DAT\*.DAT)
+

These are child archives found inside of the main GT-ARC and DATA.DAT archives.
+

  000h 4     Number of Files (eg. 26h) (usually at least 02h or higher)
+  004h N*14h File List
+  ...  ..    File Data area
+ File List entries:
+  000h 10h   Filename ("FILENAME.EXT", zeropadded if shorter)
+  010h 4     Offset in bytes (increasing, 4-byte-aligned?)
+

+
Croc 2 (MagDemo22: CROC2\CROCII.DAT and CROCII.DIR)
+
Disney's The Emperor's New Groove (MagDemo39: ENG\KINGDOM.DIR+DAT)
+
Disney's Aladdin in Nasira's Revenge (MagDemo46: ALADDIN\ALADDIN.DIR+DAT)
+

 DIR:
+  000h 4     Number of Entries (0Eh)
+  004h N*14h File List
+ DAT:
+  000h ..    File Data (referenced from CROCII.DIR)
+
+File List entries:
+
  000h 0Ch   Filename ("FILENAME.EXT", zeropadded if shorter)
+  00Ch 4     File Size in bytes
+  010h 4     File Offset in .DAT file (800h-byte aligned, increasing)
+

+
Alice in Cyberland (ALICE.PAC, and nested .PAC, .FA, .FA2 archives)
+

  000h N*14h File List
+  ...  14h   Zerofilled (File List end marker)
+  ...  ..    File Data area
+ File List entries:
+  000h 0Ch   Filename ("FILENAME.EXT", zeropadded if shorter)
+  00Ch 4     Offset (increasing, 4-byte aligned)
+  010h 4     Filesize in bytes (can be odd, eg. for .FA2 files)
+
+PAC and FA are uncompressed, FA2 is compressed via some LZ5-variant:
+CDROM File Compression LZ5 and LZ5-variants

+
Interplay Sports Baseball 2000 (MagDemo22:BB2000\DATA\HOG.TOC\UNIFORMS\*.UNI)
+
  000h N*14h  File List (3Ch*14b bytes, unused entries are zeropadded)
+  4B0h ..     Data area (TIM files for player uniforms)
+ File List entries:
+  000h 10h    Filename ("FILENAME.EXT", zeropadded)
+  010h 4      Offset (zerobased, from begin of Data area, increasing)
+
+

Entrysize=18h

+
Invasion from Beyond (MagDemo15: IFB\*.CC)
+

  000h 0Ch   Fixed ID (always "KotJCo01Dir ") (always that same string)
+  00Ch 4     Number of Files
+  010h N*18h File List
+  ...  ..    File Data area
+
+File List entries:
+
  000h 10h   Filename ("FILENAME.EXT", zeropadded)
+  010h 4     Offset in bytes (increasing, 1-byte or 4-byte aligned)
+  014h 4     Filesize in bytes (can be odd)
+
+Note: Alignment is optional: Files in IFB\HANGAR\.CC and IFB\MAPS\.CC use +4-byte aligned offsets (but may have odd filesizes). Files in IFB\INCBINS\*.CC +don't use any alignment/padding.

+
Ghost in the Shell (MagDemo03: GITSDEMO\S01\*.FAC)
+

  000h N*18h File List (18h-bytes each)
+  ...  18h   File List end marker (zerofilled)
+  ...  ..    File Data
+
+File List entries:
+
  000h 1     Filename Checksum (sum of bytes at [001h..00Dh])
+  001h 1     Filename Length (excluding ending zeroes) (eg. 8, 9, 10, 12)
+  002h 0Ch   Filename ("FILENAME.EXT", zeropadded if less than 12 chars)
+  00Eh 2     Unknown (2000h) (maybe attr and/or ending zero for filename)
+  010h 4     Filesize in bytes (can be odd)
+  014h 4     Offset (increasing, 4-byte aligned)
+

+
Oddworld: Abe's Exodus (MagDemo17: ABE2\*.LVL)
+
Oddworld: Abe's Exodus (MagDemo21: ABE2\*.LVL and nested .IDX files)
+

  000h 4     Header Size in bytes  (2800h) (can be MUCH bigger than needed)
+  004h 4     Zero
+  008h 4     ID "Indx"
+  00Ch 4     Zero
+  010h 4     Number of Files (N)   (CEh) (can be zero=empty in .IDX files)
+  014h 4     Header Size/800h      (05h)
+  018h 4     Zero
+  01Ch 4     Zero
+  020h N*18h File List
+  ...  ..    Zeropadding to end of Headersize
+  ...  ..    File Data area
+
+File List entries (in .LVL files):
+
  000h 0Ch   Filename ("FILENAME.EXT", zeropadded if shorter)
+  00Ch 4     Offset/800h
+  010h 4     File Size/800h
+  014h 4     File Size in bytes
+
+File List entries (in .IDX files):
+
  IDX files use the same File List entry format as LVL, but the offsets
+  seem to refer to an external file with corresponding name, for example:
+    cdrom:\ABE2\CR.LVL\CR.IDX     ;directory info
+    cdrom:\ABE2\CR.MOV            ;external data (the .MOV being a .STR video)
+  XXX: That's not tested/verified, and not implemented in no$psx file viewer.
+

+
Monkey Hero (MagDemo17: MONKEY\BIGFILE.PSX and nested .PSX files)
+

  000h 4     Unknown              (6)
+  004h 4     Total Filesize       (1403800h)
+  008h 2     Unknown, Alignment?  (800h)
+  00Ah 2     Number of Files, excluding zerofilled File List entries (ACh)
+  00Ch 4     Header Size          (1800h)
+  010h 4     Unknown, Entrysize?  (18h)
+  014h 4     Unknown, Entrysize?  (18h)
+  018h N*18h File List (can contain unused zerofilled entries here and there!)
+  ...  ..    File Data area
+
+File List entries:
+
  000h 10h   Filename ("FILENAME.EXT", zeropadded)
+  010h 4     File Offset in bytes (800h-byte aligned, unusorted/not increasing)
+  014h 4     File Size in bytes
+

+
NHL Faceoff '99 (MagDemo17: FO99\*.KGB and nested *.PRM *.TMP *.ZAM)
+
NHL Faceoff 2000 (MagDemo28: FO2000\*.KGB, Z.CAT, and nested *.PRM and *.TMP)
+

  000h 4     ID "KGB",00h
+  004h 4     Number of Files         (N)
+  008h (4)   Number of Files negated (-N)   ;<-- optional, not in LITESHOW.KGB
+  ...  N*18h File List
+  ...  (..)  CBh-padding to alignment boundary (only if align=800h)
+  ...  ..    File Data area
+
+File List entries:
+
  000h 10h   Filename ("FILENAME.EXT", terminated by 00h, padded with CDh)
+  010h 4     File Size in bytes
+  014h 4     File Offset (800h-byte or 1/4-byte? aligned)
+

+
Syphon Filter 1 (MagDemo18: SYPHON\SUBWAY.FOG) (4Mbyte, namelen=10h)
+

  000h 4     Unknown (80000001h)
+  004h 4     Offset/800h to Final Padding area
+  008h 8     Zerofilled
+  010h N*18h File List
+  ...  (..)  CDh-padding to 800h-byte alignment boundary
+  ...  ..    File Data area
+  ...  800h  Some text string talking about "last-sector bug"
+  ...  40BEh Final Padding area (CDh-filled)
+
+File List entries:
+
  000h 10h   Filename ("FILENAME.EXT", terminated by 00h, padded with CDh)
+  010h 4     File Offset/800h (increasing)
+  014h 4     File Size/800h
+
+This is almost same as the newer v2 format in Syphon Filter 2 (see there for +details).

+
Centipede (MagDemo23: ARTFILES\*.ART)
+

  000h 0Fh   ID ("Art", zeropadded)             ;\
+  00Fh 1     Type or so ("?")                   ; sorts of File List entry
+  010h 4     Number of entries plus 1 (N+1)     ; for root folder
+  014h 4     Total Size in bytes (can be odd)   ;/
+  018h N*18h File List
+  ...  ...   File Data area
+ File List entries:
+  000h 0Fh   Filename ("FILENAME", zeropadded)
+  00Fh 1     Type/extension or so ("X" or "D")
+  010h 4     File Offset (unaligned, increasing)
+  014h 4     File Size in bytes (can be odd)
+
+Note: C0L7.ART includes zerofilled 18h-bytes as last File List entry, BONU.ART +doesn't have any such zerofilled entry.
+Unknown if this can have child folders (maybe in similar form as the root +folder entry).

+
Sheep Raider (MagDemo52: SDWDEMO\*.SDW)
+
Sheep Raider (MagDemo54: SDWDEMO\*.SDW)
+

  000h 4     Unknown (301h)
+  004h 4     Zero (0)
+  008h 4     Number of files (N)
+  00Ch N*18h File List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 4     Offset (800h-byte aligned, increasing)
+  004h 4     Filesize in bytes
+  008h 1     Unknown (01h)
+  009h 0Fh   Filename ("FILENAME.EXT",00h, plus garbage padding)
+
+The SDW archive contains malformed 200h*1A4h pixel TIMs.
+
  Texsize is 6900Eh, but should be 6900Ch = 200h*1A4h*2+0Ch
+  Filesize is 6A000h, but should be 69014h = 200h*1A4h*2+14h
+

+
Wing Commander III (*.LIB)
+
  000h 2     Number of Files (C9h)
+  002h N*18h File List
+  ...  (..)  Padding to 800h-byte boundary (if any, eg. in MOVIES.LIB)
+  ...  ..    File data area (800h-byte aligned, or unaligned)
+ File List entries:
+  000h 4     Filesize in bytes
+  004h 4     Offset (increasing, 800h-byte aligned, or unaligned)
+  008h 10h   Filename ("filename.ext", zeropadded)
+
+
Largo Winch - Commando SAR (LEVELS\*.DCF)
+
  000h 4     ID "DCAT"
+  004h 4     Number of Entries
+  008h N*18h File List
+  ...  ..    Zerofilled (padding to 800h-byte boundary)
+  ...  ..    File Data area
+ File List entries:
+  000h 10h   Filename ("FILENAME.EXT", terminated by 00h, plus garbage padding)
+  010h 4     Filesize in bytes
+  014h 4     Offset (increasing, 800h-byte aligned)
+
+
Policenauts (NAUTS\*.DPK)
+
  000h 4     ID "FRID"
+  004h 4     Always E0000000h
+  008h 4     Always 800h (...maybe alignment)
+  00Ch 4     Number of Entries (N)
+  010h 4     Header Size (N*18h+20h, plus padding to 800h-byte boundary)
+  014h 4     Always 18h (...maybe entry size)
+  018h 8     Zerofilled
+  020h N*18h File List
+  ...  ..    Zerofilled (padding to 800h-byte boundary)
+  ...  ..    File Data area
+ File List entries:
+  000h 0Ch   Filename ("FILENAME.EXT", zeropadded if shorter)
+  00Ch 4     Offset (increasing, 800h-byte aligned)
+  010h 4     Filesize in bytes
+  014h 4     Unknown (checksum? random?)
+
+
Actua Ice Hockey 2 (Best Sports Games Ever (demo), AH2\GAMEDATA\*.MAD)
+

  000h N*18h File List
+  ...  ..    File Data area (directly after File List, without end-code)
+ Note: There is no file-list end-marker (instead, the Offset in 1st File
+       entry does imply the end of File List).
+ File List entries:
+  000h 10h  Filename ("FILENAME.EXT", zeropadded)
+  010h 4    Offset (increasing, 4-byte aligned, or unaligned for TXT files)
+  014h 4    Filesize in bytes (or weird nonsense in SFX.MAD)
+
+There are several oddities in demo version (unknown if that's in retail, too):
+
 SFX.MAD has nonsense Filesize entries (eg. 164h for a 15150h-byte file).
+ FACES.MAD contains only one TIM file... but as 3Mbyte junk appended?
+ RINKS.MAD and TEAMS.MAD start with 0Dh,0Ah,1Ah followed by 4Mbyte junk.
+ MISCFILE.MAD contains several nested .mad files.
+ MISCFILE.MAD\panfont.mad\*.txt --> starts with FF,FE --> that's 16bit Unicode?
+

+
Muppet Monster Adventure (MagDemo37: MMA\GAMEDATA+WORLDS*\*.INF+WAD)
+

 INF:
+  000h N*18h File List
+ WAD:
+  000h ..    File Data area
+
+File List entries:
+
  000h 4     File Offset/800h in .WAD file
+  004h 4     File Size in bytes
+  008h 10h   Filename ("FILENAME.EXT", zeropadded)
+

+
Army Men Air Attack 2 (MagDemo40: AMAA2\*.PCK)
+
  000h 4     Number of entries (N)
+  004h N*18h File List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 10h   Filename ("FILENAME.EXT", zeropadded)
+  010h 4     Fileoffset (800h-byte aligned, increasing)
+  014h 4     Filesize in bytes
+
+
Mort the Chicken (MagDemo41: MORT\*.PPF and .TPF)
+
  000h 2     Type (31h=TPF with TIMs, 32=PPF with PMDs)
+  002h 2     Number of entries (N) (can be 0=None, eg. STAGE*\MORT.PPF)
+  004h 4     File List Size (N*18h)
+  008h 4     Header Size (always 14h)
+  00Ch 4     Data area Size (Filesize-14h-N*18h)
+  010h 4     Data area Offset (14h+N*18h)
+  014h N*18h File List
+  ...  ..    File Data area
+ File List entries:
+  000h 10h   Filename ("FILENAME.EXT", zeropadded)
+  010h 4     Filesize in bytes
+  014h 4     Fileoffset (from begin of Data area, increasing)
+
+
Hot Wheels Extreme Racing (MagDemo52: US_01293\VEHICLES\*.CAB)
+
  000h 4     ID "BACR" (aka RCAB backwards)
+  004h 4     Number of entries (N)
+  008h N*18h File List
+  ...  ..    File Data area
+ File List entries:
+  000h 10h   Filename ("FILENAME.EXT", zeropadded)
+  020h 4     Offset (from begin of Data area, increasing, 4-byte aligned)
+  024h 4     Filesize in bytes (can be odd)
+
+

Entrysize=19h

+
WAD Format (Wipeout 2097)
+

PSX Wipeout 2097, cdrom:\WIPEOUT2\SOUND\SAMPLES.WAD:\.vag
+PSX Wipeout 2097, cdrom:\WIPEOUT2\TRACK*\TRACK.WAD:\
.*
+PSX Wipeout 3 (MagDemo25: WIPEOUT3\*)
+

  000h 2     Number of files
+  002h N*19h Directory Entries for all files
+  ...  ..    Data for all files (without any alignment, in same order as above)
+
+Directory Entries
+
  000h 10h Filename (ASCII, can be lowercase), terminated by 00h, plus garbage
+  010h 4   Filesize in bytes  ;\maybe compressed/uncompressed, or rounded,
+  014h 4   Filesize in bytes  ;/always both same
+  018h 1   Unknown (always 00h)
+
+The filesize entry implies offset to next file.

+

Entrysize=1Ch

+
Command & Conquer, Red Alert (MagDemo05: RA\*) FAT/MIX/XA
+

  000h 4     Number of entries with location 0=MIX (M=65h)
+  000h 4     Number of entries with location 1=XA  (X=1)
+  008h M*1Ch File List for location 0=MIX
+  ...  X*1Ch File List for location 1=XA
+
+File List entries:
+
  000h 10h   Filename (terminated by 00h, padded with garbage)
+  010h 4     Offset/800h in DATA.MIX or Offset/930h DATA.XA file (increasing)
+  014h 4     Filesize in bytes
+  018h 4     File Location (0=DATA.MIX, 1=DATA.XA)
+

+
Syphon Filter 2 (MagDemo30: SYPHON\TRAIN.FOG) (2.8Mbyte, namelen=14h)
+

  000h 4     Unknown (80000001h)
+  004h 4     Offset/800h to Final Padding area
+  008h 8     Zerofilled
+  010h N*1Ch File List
+  ...  (..)  CDh-padding to 800h-byte alignment boundary
+  ...  ..    File Data area
+  ...  3394h Final Padding area (CDh-filled)
+
+File List entries:
+
  000h 14h   Filename ("FILENAME.EXT", terminated by 00h, padded with CDh)
+  014h 4     File Offset/800h (increasing)
+  018h 4     File Size/800h
+
+This is almost same as the older v1 format in Syphon Filter 1:
+
  v1 (Syphon Filter 1) has filename_len=10h (and filelist_entrysize=18h)
+  v2 (Syphon Filter 2) has filename_len=14h (and filelist_entrysize=1Ch)
+
+To detect the version: Count the length of the "ASCII chars + 00h byte + CDh +padding bytes" at offset 10h.
+Note: The FOG archive in Syphon Filter 2 demo version does contain some empty +dummy files (with intact filename, but with offset=0 and size=0).

+

Entrysize=20h

+
Colony Wars (MagDemo02: CWARS\GAME.RSC)
+
Colony Wars Venegance (MagDemo14: CWV\GAME.RSC, 8Mbyte)
+

  000h 4     Number of Files
+  004h N*20h File List
+  ...  10h   File List End: Name    (zerofilled)
+  ...  4     File List End: Offset  (total filesize, aka end of last file)
+  ...  0Ch   File List End: Padding (zerofilled)
+  ...  ..    File Data area
+
+File List entries:
+
  000h 10h   Filename ("FILENAME.EXT", terminated by 00h, padded with garbage)
+  010h 4     File Offset in bytes (increasing, 4-byte aligned)
+  014h 0Ch   Padding (garbage) (usually 800F68A0h,800F68A0h,800F68A0h)
+
+Note: Colony Wars Red Sun does also have a GAME.RSC file (but in different +format, with folder structure).

+
WarGames (MagDemo14: WARGAMES\*.DAT)
+

  000h 4     Number of Files (1C3h)
+  004h N*20h File List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+
+File List entries:
+
  000h 10h   Filename ("FILENAME.EXT", zeropadded, sorted alphabetically)
+  010h 4     File Offset/800h (unsorted, not increasing)
+  014h 4     File Size in bytes
+  018h 4     File Size/800h
+  01Ch 4     Zero
+

+
Running Wild (MagDemo15: RUNWILD\*.BIN)
+

  000h N*20h File List
+  ...  4     File List End Offset/800h (end of last file)
+  ...  4     File List End Size (zero)
+  ...  18h   File List End Name (zerofilled)
+  ...  ..    Padding to 800h-byte boundary (each 20h-byte: 01h, and 1Fh zeroes)
+  ...  ..    File Data
+
+File List entries:
+
  000h 4     Offset/800h (increasing)
+  004h 4     Filesize in bytes
+  008h 18h   Filename ("FILENAME.EXT" or ":NAME" or ":NAME:NAME", zeropadded)
+
+Files with extension .z or .Z are compressed:
+CDROM File Compression Z (Running Wild)

+
Test Drive Off-Road 3 (MagDemo27: TDOR3\TDOR3.DAT)
+

About same as the other Test Drive games, but with shorter filenames.
+

  000h N*20h  File List (1920h bytes used; with padding: 5800h bytes in total)
+  ...  ..     Zeropadding to Headersize (5800h)
+  ...  ..     File Data area
+ File List entries:
+  000h 18h    Filename ("FILENAME.EXT" or "PATH\FILENAME.EXT", zeropadded)
+  018h 4      Filesize in bytes
+  01Ch 4      File (Offset-Headersize)/800h
+
+TDOR3.DAT contains DOT1 child archives and many RNC compressed files: --> +CDROM File Compression RNC (Rob Northen Compression)

+
Tiny Tank (MagDemo23: TINYTANK\*.DSK)
+

  000h 4     ID ("TDSK")                                      ;\
+  004h 4     Number of Files (1Bh)                            ; Directory
+  008h N*20h File List                                        ;/
+  ...  4     1st File Size (same as Size entry in File List)  ;\File Data area
+  ...  ..    1st File Data                                    ; (each file os
+  ...  4     2nd File Size (same as Size entry in File List)  ; preceeded by
+  ...  ..    2nd File Data                                    ; a size entry)
+  ...  ..    etc.                                             ;/
+ File List entries:
+  000h 10h   Filename ("FILENAME.EXT", zeropadded)
+  010h 4     File Size in bytes
+  014h 4     Unknown (35xxxxxxh..372xxxxxh)
+  018h 4     Unknown (3724xxxxh) (Timestamp maybe?)
+  01Ch 4     File Offset in bytes (increasing, 4-byte aligned)
+
+Note: The File Offset points to a 32bit value containing a copy of the +Filesize, and the actual file starts at Offset+4.

+
MAG 3 (MagDemo26: MAG3\MAG3.DAT, 7Mbyte)
+
  000h N*20h  File List (B60h bytes)
+  ...  ..     Zeropadding to 800h-byte boundary
+  ...  ..     File Data area (files are AAh-padded to 800h-byte boundary)
+ File List entries:
+  000h 4      Filesize in bytes
+  004h 2      File Offset/800h (16bit) (increasing)
+  006h 1Ah    Filename ("FILENAME.EXT" or "PATH\FILENAME.EXT", zeropadded)
+
+
Play with the Teletubbies (MagDemo35: TTUBBIES\*.RES)
+

  000h 2     Zero (0000h)
+  002h 2     Number of Files (N)
+  004h 4     Data Base (N*20h+10h)
+  008h 4     Unknown (20h)  ;-maybe File List entry size?
+  00Ch 2     Unknown (10h)  ;\maybe filename length and/or header size?
+  00Eh 2     Unknown (10h)  ;/
+  010h N*20h File List
+  ...  ..    File Data area
+
+File List entries:
+
  000h 4     Zero
+  004h 4     File Offset (increasing, 4-byte aligned, relative to Data Base)
+  008h 4     File Size in bytes (can be odd)
+  00Ch 4     Zero
+  010h 10h   Filename ("FILENAME.EXT", zeropadded)
+

+
Mat Hoffman's Pro BMX (old demo) (MagDemo39: BMX\FE.WAD+STR) (uncompressed)
+
Mat Hoffman's Pro BMX (new demo) (MagDemo48: MHPB\FE.WAD+STR) (compressed)
+

 WAD:
+  000h N*20h File List
+ STR:
+  000h ..    File Data (MagDemo39: 4.5Mbyte, MagDemo48: compressed/2.8Mbyte)
+ File List entries:
+  000h 14h   Filename ("FILENAME.EXT", zeropadded)
+  014h 4     Offset in bytes, 4-byte aligned, in STR file
+  018h 4     Filesize, compressed (always rounded to multiple of 4 bytes)
+  01Ch 4     Filesize, decompressed (zero when not compressed)
+
+The decompressor is using an Inflate variant with slightly customized block +headers:
+
  - end flag is processed immediately (instead of after the block)
+  - blocktype is only 1bit wide (instead of 2bit)
+  - stored blocks have plain 16bit len (without additional 16bit inverse len)
+
+Everything else is same as described here:
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)
+Instead of "tinf_uncompress", use the function below:
+
 bmx_tinf_style_uncompress(dst,src)
+  tinf_init()                   ;init constants (needed to be done only once)
+ @@lop:
+  if tinf_getbit()=0 then goto @@done   ;end flag, 1bit
+  if tinf_getbit()=0 then               ;blocktype, 1bit
+    tinf_align_src_to_byte_boundary()
+    len=LittleEndian16bit[src], src=src+2   ;get len (without inverse len)
+    for i=0 to len-1, [dst]=[src], dst=dst+1, src=src+1, next i   ;uncompressed
+  else
+    tinf_decode_dynamic_trees(), tinf_inflate_compressed_block()  ;compressed
+  gpto @@lop
+ @@done:
+  ret
+
+Note: Apart from the MHPB\FE.WAD archive, many MHPB\*.BIN files seem to be also +compressed (unknown if that's the same compression method; and, if so, they +would lack decompressed size info).

+

Entrysize=28h

+
Demo Menu, PlayStation Magazine Demo Disc 03-54, MENU.FF
+

Used on most PlayStation Magazine Demo Discs (Disc 03-54, except Disc 01-02)
+Used on PlayStation Underground 3.1 (and maybe other issues)
+Used on Interactive CD Sampler Disc Volume 10 (maybe others, but not Vol 4,5)
+

  000h 4     Number of entries (eg. 20h or 28h)
+  004h N*28h File List
+  ...  ..    Garbage padding to 800h-byte boundary
+  ...  ..    File Data
+  ...  ..    Huge zeropadding to 200000h or 2EE000h (2048Kbyte or 3000Kbyte)
+
+File List entries:
+
  000h 20h   Filename (terminated by 00h, padded with... looks like garbage)
+  020h 4     Size/800h
+  024h 4     Offset/800h (increasing)
+
+Contains .BS, .TIM, .TXT, .VH, .VB files. The size seems to be always(?) +2048Kbytes, 2992Kbytes, 2000Kbytes, or 3000Kbytes (often using only the first +quarter, and having the remaining bytes zeropadded).

+
Test Drive 4 (MagDemo03: TD4.DAT) (headersize=2000h, used=0...h)
+
Test Drive 5 (MagDemo13: TD5.DAT) (headersize=3000h, used=1EF8h)
+
Demolition Racer (MagDemo27: DR\DD.DAT) (headersize=5000h, used=2328h)
+

This is used by several games, with different Headersizes (2000h or 3000h or +5000h), with Offsets relative to the Headersize. To detect the Headersize, skip +used entries, skip following zeropadding, then round-down to 800h-byte boundary +(in case the 1st file contains some leading zeroes).
+

  000h N*28h File List (less than 0C00h bytes used in TD4 demo)
+  ...   ..   Zeropadding to Headersize (2000h or 3000h or 5000h)
+  ...   ..   File Data
+
+File List entries:
+
  000h 20h   Filename ("PATH\FILENAME.EXT", zeropadded)
+  020h 4     Size in bytes
+  024h 4     (Offset-Headersize)/800h (increasing)
+
+TD5.DAT and DD.DAT contain DOT1 child archives and many RNC compressed files:
+CDROM File Compression RNC (Rob Northen Compression)

+
Gekido (MagDemo31: GEKIDO\GLOBAL.CD)
+

  0000h N*28h File List
+  21C0h ...   Unknown random gibberish? (23h,E8h,0Ch,1Dh,79h,C5h,24h,...)
+  4000h ...   File Data area
+
+File List entries:
+
  000h 1Ch   Filename ("\PATH\FILENAME.EXT;0", zeropadded)
+  01Ch 4     Filesize in bytes
+  020h 4     Fileoffset in bytes (4000h and up, increasing)
+  024h 4     Filechecksum (32bit sum of all bytes in the file)
+
+There is no "number of files" entry, and no "file list end marker" (though the +"random gibberish" might serve as end marker, as long it doesn't start with "\" +backslash).

+
Team Buddies (MagDemo37: BUDDIES\BUDDIES.DAT\* and nested *.BND files)
+

  000h 4     ID "BIND"
+  004h 4     Number of files (N)
+  008h N*28h File List
+  ...  ..    File Data area
+
+File List entries:
+
  000h 20h   Filename ("\FILENAME.EXT", zeropadded)
+  020h 4     File Offset (increasing, 4-byte aligned)     ;\see note
+  024h 4     File Size in bytes (always a multiple of 4)  ;/
+
+Note: There is a 4-byte gap between most files, that appears to be caused by +weird/bugged alignment handling done as so:
+
  size=((filesize+3) AND not 3)       ;size entry for curr file (plus 3)
+  offs=((filesize+4) AND not 3)+offs  ;offs entry for next file (plus 4 !!!)
+
+Namely, odd filesizes (eg. for TXT files in BUDDIES.DAT\00D2h..00D7h) are +forcefully rounded-up to 4 bytes boundary. If that rounding has occurred then +there is no additional 4-byte gap (but the 4-byte gap will appear if the +original filesize was already 4-byte aligned).

+
JumpStart Wildlife Safari Field Trip (MagDemo52: DEMO\DATA.DAT)
+
  000h 4     Number of entries (N)
+  004h 4     Number of entries (same as above)
+  008h 4     Number of entries (same as above)
+  00Ch 4     Number of entries (same as above)
+  010h N*28  File List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 20h   Filename ("\PATH\FILENAME.EXT", zeropadded)
+  020h 4     Offset/800h, from begin of Data area (increasing)
+  024h 4     Filesize in bytes
+
+

Entrysize=34h

+
Army Men: Air Attack (MagDemo28: AMAA\PAK\*.PAK)
+

  000h 4      Number of Files
+  004h N*34h  File List
+  ...  ..     Zeropadding to 4000h
+  4000h ..    File Data area
+ File List entries:
+  000h 10h    Filename ("FILENAME.EXT", zeropadded)
+  010h 4      Filesize in bytes  ;\always both same, always
+  014h 4      Filesize in bytes  ;/both multiple of 800h
+  018h 4      Zero
+  01Ch 4      Type    (07h..1Ah)
+  020h 4      Subtype (00h..01h)
+  024h 10h    Zero
+
+The used Type.Subtype values are:
+
  07h.0   .TIM (*.TIM)
+  07h.01h .TIM (HUD_*.TIM)
+  08h.0   .TIM (PSTART.TIM)
+  09h.0   .TIM (FONT.TIM)
+  0Ah.0   .SFX
+  0Eh.0   .MBL
+  10h.0   .ATR
+  11h.0   .RLC
+  13h.0   .AST
+  15h.0   .SCD
+  16h.0   .TXT (PAUSED.TXT)
+  17h.0   .TXT (OBJECT*.TXT)
+  18h.0   .BIN
+  1Ah.0   Misc (.3DO=TIM, .V=TXT, and TERRAIN.CLP .HI .LIT .MAP .PAT .POB .TER)
+

+

Entrysize=40h

+
Ninja (MagDemo13: NINJA\CUTSEQ\.WAD and NINJA\WADS\.WAD)
+
  000h 4     Number of Files (N)
+  004h 4     Size of File Data area (SIZ) (total filesize-8-N*40h)
+  008h N*40h File List
+  ...  SIZ   File Data area
+ File List entries:
+  000h 4     Filesize in bytes
+  004h 4     Fileoffset in bytes (zerobased, from begin of File Data area)
+  008h 38h   Filename, zeropadded
+
+
You Don't Know Jack (MagDemo23: YDKJ\RES\*.GLU)
+
You Don't Know Jack 2 (MagDemo41: YDKJV2\\.GLU)
+

  000h 4     ID ("GLUE")
+  004h 4     Unknown (always 400h)
+  008h 4     Number of Files (N)
+  00Ch 4     Header Size (40h+N*40h)
+  010h 30h   Zerofilled
+  040h N*40h File List
+  ...  ..    Garbage padding to alignment boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 20h   Filename ("FILENAME.EXT", zeropadded)
+  020h 4     File Offset in bytes (increasing, 800h-byte aligned)
+  024h 4     File Size in bytes
+  028h 2     File ID Number 1 (eg. 1-71 for C01.GLU-C71.GLU)
+  02Ah 2     Unknown (random, checksum, ?)
+  02Ch 4     File ID Number 2 (eg. increasing: 1, 2, 3)
+  030h 10h   Zerofilled
+
+Most .GLU files are 800h-byte aligned (except SHORTY\.GLU and THREEWAY\GLU +which use 4-byte alignment).
+The files do start on alignment boundaries, but there is no alignment padding +after end of last file.

+

Entrysize=60h

+
Army Men Air Attack 2 (MagDemo40: AMAA2\.PCK\.PAK)
+

  000h 4     Number of entries (N)
+  010h N*60h File List
+  ...  ..    Zeropadding to 2000h
+  2000h ..   File Data area
+ File List entries:
+  000h 4     Timestamp? (BFxxxxh..C0xxxxh) (or zero, in first file)
+  004h 4     Unknown (always 421C91h)
+  008h 4     Unknown (200h or 60200h)
+  00Ch 4     Filesize (uncompressed)
+  010h 4     Filesize (compressed, or 0 when not compressed)
+  014h 4     File Checksum (sum of all bytes in uncompressed file data)
+  018h 4     Unknown (random 32bit value?)
+  01Ch 10h   Filename ("FILENAME.EXT", zeropadded)
+  02Ch 4     Zerofilled
+  030h 4     Unknown (0 or 1 or 8)
+  034h 4     File Type (see below)
+  038h 8     Zerofilled
+  040h 4     Offset MSBs (Fileoffset-2000h)/800h  ;\increasing, 4-byte aligned
+  044h 4     Offset LSBs (Fileoffset AND 7FFh)    ;/(or zero when filesize=0)
+  048h 18h   Zerofilled
+
+File Type values are 07h=TIM, 0Ah=SFX, 0Eh=MBL, 10h=ATR, 13h=AST, 15h=SCD, +19h=VTB, 1Bh=DCS, 1Dh=DSS, 1Eh=STR, 1Fh=DSM, 20h=FNT, 21h=TER, 25h=PMH, +26h=Misc.
+Most of the files are SCRATCH compressed:
+CDROM File Compression LZ5 and LZ5-variants
+There are also several uncompressed files (eg. VERSION.V, *.SFX, and many of +the TERRAIN.* files).

+

Entrysize=90h

+
Grind Session (MagDemo33: GRIND\SLIP.GRV)
+
Grind Session (MagDemo36: GRIND\SLIP.GRV)
+
Grind Session (MagDemo42: GRIND\SLIP.GRV)
+
Grind Session (MagDemo45: GRIND\SLIP.GRV)
+
  000h 4     ID (A69AA69Ah)
+  004h 4     Number of files (N)
+  008h N*90h File List
+  ...  ..    File Data area
+ File List entries:
+  000h 80h   Filename ("DATA\FILENAME.EXT",00h, plus CDh-padding)
+  080h 4     File Offset in bytes (increasing, 4-byte aligned)
+  084h 4     File Size in bytes
+  088h 8     Unknown (random/checksum?)
+
+

Variable Entrysize

+
HED/WAD
+

  Used by Spider-Man (MagDemo31,40: SPIDEY\CD.HED and CD.WAD)
+  Used by Spider-Man 2 (MagDemo52: SPIDEY\CD.HED and CD.WAD)
+  Used by Tony Hawk's Pro Skater (MagDemo22: PROSKATE\CD.HED and CD.WAD)
+  Used by Apocalypse (MagDemo16: APOC\CD.HED and CD.WAD)       ;with PADBUG
+  Used by MDK (Jampack Vol. 1: MDK\CD.HED and CD.WAD)          ;without ENDCODE
+  Used by Mat Hoffman's Pro BMX (old demo) (MagDemo39: BMX\BMXCD.HED+WAD)
+
+Format of the CD.HED file:
+
  000h ..  File Entries (see below)
+  ...  (1) End code (FFh) (if any, not present in MDK)
+
+File Entry format:
+
  000h ..  Filename (ASCII, terminated by 00h, zeropadded to 4-byte boundary)
+  ...  4   Offset in CD.WAD (in bytes, usually 800h-byte aligned)
+  ...  4   Filesize (in bytes)
+
+PADBUG: Apocalypse does append 1..800h bytes alignment padding (instead of +1..7FFh or 0 bytes).

+
Dance UK (DATA.PAK)
+
  000h 4      Number of Files (N) (1ADh)
+  004h 4      Unknown (7) (maybe HeaderSize/800h, same as first Offset/800h ?)
+  008h 4      Unknown (1430h = 14h+N*0Ch, same as first Name pointer)
+  00Ch 4      Unknown (1430h = 14h+N*0Ch, same as first Name pointer)
+  010h 4      Unknown (1430h = 14h+N*0Ch, same as first Name pointer)
+  014h N*4    Name List (pointers to name strings, 1430h and up)  6B4h bytes
+  ...  N*4    Size List (filesize in bytes)                       6B4h bytes
+  ...  N*4    Offset List (Offset/800h)                           6B4h bytes
+  ...  N*var  Name Strings (ASCII strings, "folder\filename.ext",00h)
+  ...  ..     Zerofilled (padding to 800h-byte boundary)
+  ...  ..     File Data area
+
+
Kula Quest / Kula World / Roll Away (*.PAK)
+

  000h 4     Number of Files (N)
+  004h N*8   File List (2x32bit entries: Offset, Size) (unaligned, can be odd)
+  ...  N*4   File Name Offsets
+  ...  N*var File Name Strings ("FILE NN",0Ah,00h)
+  ...  ..    Garbage-padding to 4-byte boundary
+  ...  (4)   Optional extra garbage? ("MON " in ATLANTFI.PAK, MARSFI.PAK, etc.)
+  ...  ..    File Data area (ZLIB compressed, starting with big-endian 789Ch)
+
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)

+
Largo Winch - Commando SAR (NTEXTURE\.GRP and LEVELS\.DCF\*.CAT and *.GRP)
+
  000h 4     ID (12h,34h,56h,78h) (aka 12345678h in big endian)
+  004h 4     Header Size (offset to File Data area)
+  008h 4     Number of Entries (can be 0=None, eg. LEVELS\LARGO07.DCF\Z16.CAT)
+  00Ch N*var Name List (Filenames in form "FILENAME.EXT",00h)
+  ...  ..    Zeropadding to 4-byte boundary
+  ...  N*4   Size List (Filesizes in bytes)
+  ...  ..    File Data area
+
+
Jackie Chan Stuntmaster (RTARGET\GAME.GCF and LEV*.LCF)
+
  000h 4     Number of files (N) (3..EBh)                 (big-endian)
+  004h N*Var File List (list size is implied in first file offset)
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 4     File Type (ascii, .LLN .TXI .TPG .RCI .RCP .WDB .PCI .PCP .BLK)
+  004h 4     File Size (can be odd)                       (big-endian)
+  008h 4     File Offset (increasing, 800h-byte aligned)  (big-endian)
+  00Ch 4     Extra Size (0 or 4 or 8)                     (big-endian)
+  010h ..    Extra Data (if any) (32bit number, or "TEXTURES")
+
+
Syphon Filter 1 (MagDemo18: SYPHON\.HOG, SYPHON\SUBWAY.FOG\.HOG,SLF.RFF)
+
Syphon Filter 2 (MagDemo30: SYPHON\.HOG, SYPHON\TRAIN.FOG\.HOG,SLF.RFF)
+

  000h 4     Timestamp? (36xxxxxxh=v1?, 38xxxxxxh=v2?, other=SLF.RFF)
+  004h 4     Number of Files          (N)
+  008h 4     Base for Offset List  (always 14h)
+  00Ch 4     Base for String Table (v1=N*4+14h, or v2=N*4+18h)
+  010h 4     Base for File Data (end of String Table plus align 4/800h/920h)
+  014h N*4   Offsets to File(s) (increasing, first=0, relative to above [010h])
+  ... (4)    v2 only: End Offset for Last File (HOG filesize minus [010h])
+  ...  ..    String Table (filename list in form of "FILENAME.EXT",00h)
+  ...  ..    Zeropadding to 4-byte or 800h-byte boundary
+  ...  ..    File Data area
+
+There are two versions: Syphon Filter 1 (v1) and Syphon Filter 2 (v2):
+
  v1 has [0Ch]=N*4+14h (without end-of-last-file entry; use end=total_size)
+  v2 has [0Ch]=N*4+18h (and does have end-of-last-file entry)
+  v1 has STR files in ISO filesystem (not in HOG archives)
+  v2 has STR files in MOVIES.HOG (with [10h]=920h and [14h and up]=sectors)
+
+Normally, the following is common for v1/v2:
+
  v1/v2 has [10h]=data base, aligned to 4 or 800h
+  v1/v2 has [14h and up] in BYTE-offsets, relative to base=[10h]
+  v1/v2 uses HOG format in .HOG files also in SLF.RFF
+  v1/v2 has further .RFF files (but that aren't in HOG format)
+
+There are several inconsistent special cases for some v2 files:
+
  v2 MOVIE.HOG has [10h]=920h (which is meant to mean base="after 1st sector")
+  v2 MOVIE.HOG has [14h and up] in SECTOR-units, with base="after 1st sector"
+  v2 SLF.RFF does contain two HOG archives badged together (plus final padding)
+  v2 has some empty 0-byte .HOG files (at least so in demo version)
+
+Danger: The special value 920h means that headersize is one 800h-byte sector +(whereas 920h is dangerously close to REAL headersize, eg. v1 PCHAN.HOG has +headersize=908h which means one 800h-byte sector plus 108h bytes) (the 920h +thing should occur only in v2 though, since v1 has STR files stored in ISO +filesystem instead of in HOG archives).

+
Electronic Arts 32bit BIGF archives
+

  000h 4   ID "BIGF" (normal case, all big-endian, 4-byte aligned)     ;\
+           ID "BIGH" (with [04h]=little-endian instead big-endian)     ;
+           ID "BIG4" (with 40h-byte alignment padding instead 4-byte)  ;
+  004h 4   Sum of Header+Filesizes (excluding Padding's!) (big-endian) ; Header
+  008h 4   Number of entries (N)                  ;11h    (big-endian) ;
+  00Ch 4   Size of Header (including File List)   ;11Fh   (big-endian) ;
+  010h ..  File List                                                   ;/
+  ...  ..  Padding to 1/4/8-byte boundary (optional, before each file) ;\Data   ...  ..  File Data                                                   ;/
+
+File List entries (with variable length names, entries aren't 4-byte aligned):
+
  000h 4   Offset in bytes (increasing, often 4/8-byte aligned)    (big-endian)
+  004h 4   Size in bytes (can be odd, but often rounded to 4-byte) (big-endian)
+  008h ..  Filename (ASCII, terminated by 00h) ;variable length
+  Note: Filenames can be empty ("",00h) (eg. in WCWDEMO\ZSOUND.BIG)
+
+Used by PGA Tour 96, 97, 98 (*.VIV)
+Used by FIFA - Road to World Cup 98 (MOP*.BK*, Z4TBLS.BIG\.t, ZMO*.BIG\.viv)
+Used by Fifa 2000 (Best Sports demo: FIFADEMO\.BIG, *.SBK, and nested .viv)
+Used by Need for Speed 3 Hot Pursuit (*.VIV)
+Used by WCW Mayhem (MagDemo28: WCWDEMO\
.BIG) (odd filesizes & nameless +files)
+This is reportedly also used for various other Electronic Arts games for PC, +PSX, and PS2 (often with extension *.BIG, *.VIV).
+Reportedly also "BIGH" and "BIG4" exist:

+

http://wiki.xentax.com/index.php/EA_BIG_BIGF_Archive

+

Other Electronic Arts file formats (used inside or alongside big archives):

+

https://wiki.multimedia.cx/index.php/Electronic_Arts_Formats_(2) - BNK etc

+
Electronic Arts 24bit C0FB archives
+

  000h 2   ID C0FBh                (C0h,FBh)  (big-endian)      ;\
+  002h 2   Size of Header-4        (00h,15h)  (big-endian)      ; Header
+  004h 2   Number of Files         (00h,01h)  (big-endian)      ;
+  006h ..  File List                                            ;/
+  019h ..  Padding to 4-byte boundary?                          ;-Padding
+  01Ch ..  File Data                                            ;-Data
+  ...  4   "CRCF"                                               ;\
+  ...  4   Unknown (0C,00,00,00) (chunk-size little-endian?)    ; Footer
+  ...  4   Unknown (3B,2E,00,00) (checksum maybe?)              ;/
+
+File List entries (with variable length names, and unaligned 24bit values):
+
  000h 3   Offset in bytes (increasing)        ;(big-endian, 24bit)
+  004h 3   Size in bytes                       ;(big-endian, 24bit)
+  008h ..  Filename (ASCII, terminated by 00h) ;variable length
+
+Used by FIFA - Road to World Cup 98 (*.BIG)
+Used by Sled Storm (MagDemo24: ART\ZZRIDER.UNI, with 8 files insides)

+
Destruction Derby Raw (MagDemo35: DDRAW\*.PTH+.DAT, and nested therein)
+

 PTH File:
+  000h N*var File List
+ DAT File:
+  000h ..    File Data area
+
+File List entries:
+
  000h ..    Filename ("FILENAME.EXT",00h) (variable length)
+  ...  4     File Size in bytes (can be odd)
+  ...  4     File Offset in bytes in DAT file (increasing, unaligned)
+
+Caution: Filenames in PTH archives aren't sorted alphabetically (so DAT isn't +always guaranteed to be the previous entry from PTH, namely, that issue occurs +in MagDemo35: DDRAW\INGAME\NCKCARS.PTH\*.PTH+DAT).
+Caution: The whole .DAT file can be compressed: If the sum of the filesizes in +PTH file does exceed the size of the DAT file then assume compression to be +used (normally, the top-level DATs are uncompressed, and nested DATs are +compressed).
+CDROM File Compression PCK (Destruction Derby Raw)

+
SnoCross Championship Racing (MagDemo37: SNOCROSS\SNOW.TOC+.IMG)
+

 TOC:
+  000h N*var File List
+ IMG:
+  000h ..    File Data area
+
+File List entries:
+
  000h ..    Filename ("DATA\FILENAME.EXT",00h) (variable length)
+  ...  4     File Offset (increasing, 800h-byte aligned, in .IMG file)
+  ...  4     File Size in bytes
+
+Resembles DDRAW\*.PTH+.DAT (but Offset/Size are swapped, and uses 800h-align).
+Note: The archive contains somewhat corrupted TGA's:
+
  TGA[10h..11h] = 08h,08h  ;bpp=8 (okay) and attr=8 (nonsense)
+  TGA[10h..11h] = 10h,01h  ;bpp=16 (okay) and attr=1 (okay) but it's yflipped
+

+

CDROM File Archives with Offset and Size

+

Crash Team Racing (retail: BIGFILE.BIG, and MagDemo30/42: KART\SAMPLER.BIG)

+

  000h 4     Zero
+  004h 4     Number of Files (260h)
+  010h N*8   File entries
+  ...  ..    Zeropadding to 800h byte boundary
+  ...  ..    File Data
+
+File Entries:
+
  000h 4   Fileoffset/800h (increasing)
+  004h 4   Filesize in bytes
+
+Filetypes in the archive include...
+
  MDEC v2 STR's  (file 1E1h..1F8h,1FAh)
+  TIM textures  (file 01FBh..0200h and others)
+  empty files   (file 01F9h and others)
+  small archives with named entries (file B5h,124h,125h,126h and others)
+  stuff with date string and names (file 253h,256h)
+  there seem to be no nested BIG files inside of the main BIG file
+

+

Black Matrix (*.DAT)

+

  000h 4    Number of files (N) (eg. 196h)
+  004h 4    Unknown (always 0Bh) (maybe sector size shift?)
+  008h N*4  File List
+  ...  ..   Zeropadding to 800h-byte boudary
+  ...  ..   File Data
+
+File List entries:
+
  000h 2    Offset/800h (increasing)
+  002h 2    Size/800h (can be zero)
+
+The "files" might actually contain small child folders? Or the whole stuff is +just some kind of data structure, not an actual file system archive.

+

Charumera (*.CVF)

+
  000h N*4  File List
+  ...  ..   Zeropadding to 800h-byte boundary
+  ...  ..   File Data area
+ File List entries:
+  000h 1    Size/800h   (8bit)
+  001h 3    Offset/800h (24bit, increasing)
+
+

Vs (MagDemo03: THQ\*) has .CDB archives

+

  000h  N*8   File List
+  ...   ..    Zeropadding to 800h-byte boundary
+  ...   ..    File Data
+  ...   ..    Garbage padding (can be several megabytes tall)
+
+File List entries:
+
  000h 2     Offset/800h (increasing)
+  002h 2     Size/800h (same as below, rounded up to sector units)
+  004h 4     Size in bytes
+
+Note: The files may consist of multiple smaller files badged together (eg. +DISPLAY.CDB contains several TIMs per file).
+Some CDB archives have garbage padding at end of file: BIN.CDB (2Kbyte), +CSEL.CDB (80K), DISPLAY.CDB (70K), MOT.CDB (10648Kbyte). Maybe that's related +to deleted files in the Vs demo version and/or to updating the CDB archives +with newer/smaller content, but without truncating the CDB filesize +accordingly.

+

Monster Rancher (MagDemo06: MR_DEMO\*.OBJ)

+

Deception III Dark Delusion (MagDemo33: DECEPT3\K3_DAT.BIN)

+

Star Trek Invasion (MagDemo34: STARTREK\STARTREK.RES)

+

Similar as .CDB archives (but with 32bit offset, and without duplicated size).
+

  000h  N*8   File List
+  ...   4     File List end marker (00000000h)
+  ...   ..    Garbage padding to 800h-byte boundary
+  ...   ..    File Data
+
+File List entries:
+
  000h 4     Offset/800h (increasing)
+  004h 4     Size in bytes (often zero; for unused file numbers)
+
+Note: Files are usually padded with 0..7FFh bytes to 800h-byte boundary, but +STARTREK.RES does append additional 800h-byte padding after each file (ie. +800h..FFFh padding bytes in total).

+

Einhander (MagDemo08: BININDEX.BIN/BINPACK0.BIN/BINPACK1.BIN)

+

  000h X*4  File List for BINPACK0.BIN                   ;\
+  ...  ..   Zeropadding                                  ; BINPACK0
+  410h ..   Unknown (some/all of it looks like garbage)  ;/
+  800h Y*4  File List for BINPACK1.BIN                   ;\
+  ...  ..   Zeropadding                                  ; BINPACK1
+  C10h ..   Unknown (some/all of it looks like garbage)  ;/
+
+File List entries:
+
  000h 2    Offset/800h in BINPACK0.BIN or BINPACK1.BIN
+  002h 2    Size/800h
+

+

SO98 Archives (NBA Shootout '98, MagDemo10: SO98..*.MDL *.TEX *.ANI *.DAT)

+

Resembles .BZE (in terms of duplicated size entry).
+

  000h 4     Number of Files
+  004h 4     Size of File Data area (total filesize-N*0Ch-8)
+  008h N*0Ch File List
+  ...  ..    File Data area
+
+File List entries:
+
  000h 4   Offset (zerobased, from begin of File Data area)
+  004h 4   Size in bytes
+  008h 4   Size rounded to mutiple of 4-bytes
+
+.DAT contains .TIM .SEQ .VB .VH and nested SO98 archives
+.MDL contains whatever (and empty 0-byte files)
+.TEX contains .TIM
+.ANI contains whatever

+

Gran Turismo 1 (MagDemo10: GT\*.DAT) GT-ARC

+

Gran Turismo 1 (MagDemo15: GT\*.DAT) GT-ARC

+

Gran Turismo 2 (GT2.VOL\arcade\arc_fontinfo) GT-ARC

+

  000h 0Ch   ID "@(#)GT-ARC",00h,00h
+  00Ch 2     Content Type (8001h=Compressed, 0001h=Uncompressed)
+  00Eh 2     Number of Files (eg. 0Fh)
+  010h N*0Ch File List
+  ...  ..    File Data area
+ File List entries:
+  000h 4     Offset in bytes (increasing, unaligned)
+  004h 4     Compressed File Size (can be odd)  ;\both same when uncompressed
+  008h 4     Decompressed File Size             ;/(ie. when [00Ch]=0001h)
+
+MESSAGES.DAT, SOUND.DAT, TITLE.DAT which are completely uncompressed GT-ARC's. +Most other GT-ARC's contain LZ compressed files. In case of CARINF.DAT it's +vice-versa, the files are uncompressed, but the GT-ARC itself is LZ compressed +(the fileheader contains 00h,"@(#)GT-A",00h,"RC",00h,00h; it can be detected +via those bytes, but lacks info about decompressed size).
+CDROM File Compression GT-ZIP (Gran Turismo 1 and 2)

+

O.D.T. (MagDemo17: ODT\*.LNK and ODT\RSC\NTSC\ALLSOUND.SND and nested LNK's)

+

Barbie Explorer (MagDemo50: BARBIEX\*.STR and nested therein)

+

  000h 4     Number of Files (N)
+  004h N*8   File List
+  ...  ..    File Data area
+
+File List entries:
+
  000h 4     Offset in bytes (increasing, 1/4-byte? aligned)
+  004h 4     File Size in bytes (usually N*4, TXT's in ODT are padded as so)
+
+Quirk: Instead of rounding only Offsets to N*4 byte boundary, all Sizes are +rounded to N*4 bytes (eg. TXT files in ODT\RSC\NTSC\GFILES.LNK\01 with odd +number of characters are are zeropadded to N*4 bytes).
+Note: The PADBUG archives in Final Fantasy VIII (FF8) are very similar (but +have a different alignment quirk).

+

Bust A Groove (MagDemo18: BUSTGR_A\.DFS and BUSTGR_B\.DFS) (DFS)

+

Bust-A-Groove 2 (MagDemo37: BUSTAGR2\BUST2.BIN\*) (main=DF2 and child=DFS)

+

Same as in O.D.T. with extra "DFS_" ID at start of file.
+

  000h 4     ID "DFS_" (with align 4) or "DF2_" (with align 800h)
+  004h 4     Number of Files (N)
+  008h N*8   File List
+  ...  ..    File Data area
+ File List entries:
+  000h 4     Fileoffset in bytes (4-byte or 800h-byte aligned, increasing)
+  004h 4     Filesize in bytes (can be odd, eg. in BUSTGR_A\SELECT.BPE\*)
+
+The game does use uncompressed DFS archives (in .DFS files) and compressed DFS +archives (in .BPE files):
+CDROM File Compression BPE (Byte Pair Encoding)
+The game does also use .DBI files (which contain filenames and other strings, +whatever what for).

+

Monaco Grand Prix Racing Simulation 2 (MagDemo24: EXE\\.SUN)

+

Same as DFS, but with Total Filesize instead of "DFS_".
+

  000h 4     Total used filesize (excluding zeropadding to 2EE000h)
+  004h 4     Number of Files (N)
+  008h N*8   File List
+  ...  ..    File Data area
+  ...  (..)  In some files: Zeropadding to 2EE000h (3072Kbytes)
+
+File Entries:
+
  000h 4     Offset (increasing, 4-byte aligned, see note)
+  004h 4     Filesize in bytes (can be odd in Monaco)
+
+Note: The alignment in Monaco is a bit glitchy:
+
  If (Size AND 3)=0 then NextOffset=Offset+Size             ;Align4
+  If (Size AND 3)>0 then NextOffset=Offset+Size+Align800h   ;Align800h
+  Namely, Monaco has files with Size=3BC5h.
+
+The first file starts with unknown 32bit value, followed by "pBAV".

+

Rollcage (MagDemo19: ROLLCAGE\SPEED.IMG) (2Mbyte)

+

Rollcage Stage II (MagDemo31: ROLLCAGE\SPEED.IDX+SPEED.IMG) (3Kbyte+9Mbyte)

+

Sydney 2000 (MagDemo37: OLY2000\DEMO.IDX+DEMO.IMG) (1Kbyte+2Mbyte)

+

 Rollcage 1 uses a single IMG file that contains both directory and data:
+  000h 4     Header offset (0)          ;\
+  004h 4     Header size (10h+N*10h)    ; this seems to be a File List entry
+  008h 4     Header size (10h+N*10h)    ; for the header itself
+  00Ch 4     Zero                       ;/
+  010h N*10h File List                  ;-File List for actual files
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+  Number of files is "IMG[04h]/10h" (minus 1 for excluding the header itself)
+ The other titles have seaparate IDX and IMG files for directory and data:
+  SPEED.IDX = Directory (N*10h bytes File List with offsets into SPEED.IMG)
+  SPEED.IMG = File data
+  Number of files is "Filesize(SPEED.IDX)/10h"
+
+File List entries:
+
  000h 4     Fileoffset in bytes (800h-byte aligned, increasing)
+  004h 4     Filesize in bytes
+  008h 4     When compressed:   GT20 Header [004h] (decompressed size)
+             When uncompressed: Same as filesize
+  00Ch 4     When compressed:   GT20 Header [008h] (overlap, usuallly 3, or 7)
+             When uncompressed: Zero
+
+The compression related entries allow to pre-allocated the decompression buffer +(without needing to load the actual GT20 file header), and then load the +comprssed file to the top of the decompression buffer.
+CDROM File Compression GT20 and PreGT20

+

Ultimate 8 Ball (MagDemo23: POOL.DAT) (5.5Mbyte)

+

  000h 4      Number of Entries
+  004h N*0Ch  File List
+  ...  ..     Zeropadding to 800h-byte boundary
+  ...  ..     File Data area
+ File List entries:
+  000h 4      Unknown (random/checksum?)
+  004h 4      File Offset (800h-byte aligned, increasing)
+  008h 4      File Size in bytes
+
+Notes: The LAST file isn't zeropadded to 800h-byte boundary. The File List +includes some unused entries (all 0Ch-bytes zerofilled).

+

BIGFOOL - 3D Baseball (BIGFILE.FOO)

+

  000h N*0Ch  File List                                   (154h entries)
+  ...  N*4    Filename Checksums (?)                      (154h entries)
+  ...  ..     Zerofilled (padding to 800h-byte boundary)
+  ...  ..     File Data area
+
+The 1st list entry describes the current directory itself, as so:
+
  000h 4      Number of entries (including the 1st entry itself)
+  004h 4      Offset/800h (always 0, relative from begin of directory)
+  008h 4      Type        (always 3=Directory)
+
+Further list entries are Files or Subdirectories, as so:
+
  000h 4      For Files: Size in bytes, for Directories: Number of entries
+  004h 4      Offset/800h (from begin of current directory, increasing)
+  008h 4      Type        (0=File, 3=Directory)
+

+

Spec Ops - Airborne Commando (BIGFILE.CAT and nested CAT files therein)

+

  000h 4     File ID                                 (always 01h,02h,04h,08h)
+  004h 4     Maybe Version?                          (always 01h,00h,01h,00h)
+  008h 4     Header Size (18h+N*8+ArchiveNameLength)    ;eg. 4ECh
+  00Ch 4     Sector Alignment (can be 4 or 800h)
+  010h 4     Number of Files (N)                        ;eg. 99h
+  014h 4     Length of Archive Name (including ending 00h)
+  018h N*8   File entries (see below)
+  ...  ..    Archive Name, ASCII, terminated by 00h     ;eg. "bigfile.dir",00h
+  ...  ..    Zeropadding to Sector Alignment boundary
+  ...  ..    File Data
+
+File Entries:
+
  000h 4   Fileoffset (with above Sector Alignment) (increasing)
+  004h 4   Filesize in bytes
+
+Filetypes in the archive include...
+
  nested CAT archives (file 07h,0Ch,11h,16h,1Bh,20h,25h,etc)
+  empty files         (file 3Eh,5Ah-5Fh,62h-67h,etc)
+  MDEC v2 STR's       (file 95h-96h)
+  XA-ADPCM's          (inside of nested CAT, in file94h\file*)
+
+There are "strings" in some files, are those filenames, eg. Icon_xxx etc?

+

Hot Shots Golf 2 (retail: DATA\F0000.BIN, MagDemo31/42: HSG2\MINGOL2.BIN)

+

The DATA directory is 13800h bytes tall. But, the PSX kernel supports max 800h +bytes per ISO directory (so the kernel can only see the first 33 files in that +directory). The game isn't actually trying to parse the ISO directory entries, +instead, it's using the 2800h-byte offset/size list in F0000.BIN to access the +directory content:
+

  0000h+N*4 1     Sector MM in BCD      ;\based at 00:06:00 for file 0
+  0001h+N*4 1     Sector SS in BCD      ; (unused files are set to 00:00:00)
+  0002h+N*4 1     Sector FF in BCD      ;/
+  0003h+N*4 1     Size MSB in hex (Size/800h/100h)
+  2000h+N   1     Size LSB in hex (Size/800h AND FFh)
+  2800h     (..)  Data area for file 001h..590h (demo version only)
+
+Retail Version disc layout:
+
  Sector 000ADh  SCUS_944.76       ;exefile     ;\
+  Sector 00130h  SYSTEM.CNF                     ; iso root folder
+  Sector 00131h  DATA (sub-folder, 27h sectors) ;/
+  Sector 00158h  (padding)                      ;-padding to 00:06:00
+  Sector 001C2h  DATA\F0000.BIN    ;file 000h   ;\
+  Sector 001C7h  DATA\F0001.BIN    ;file 001h   ;
+  ...                                           ; iso data folder
+  Sector 00B54h  DATA\F0032.BIN    ;file 020h   ;
+  Sector 00B9Bh  DATA\F0033.BIN    ;file 021h   ;  ;\files exceeding the 800h
+  ...            ...                            ;  ; directory size limit, not
+  Sector 1A0C9h  DATA\F1907.BIN    ;file 773h   ;/ ;/accessible via PSX kernel
+  Sector 1AAF1h  DUMMY.BIN                      ;-iso root folder (padding)
+
+Demo version in Playstation Magazine is a bit different: It has only two large +.BIN files (instead of hundreds of smaller .BIN files). The directory is stored +in first 2800h bytes of MINGOL2.BIN. The MM:SS:FF offsets are numbered as if +they were located on sector 00:06:00 and up (to get the actual location: +subtract 00:06:00 and then add the starting sector number of MINGOL2.BIN).
+
  Sector 07148h  HSG2\MINGOL2.BIN  ;file 000h..590h  ;demo binary files
+  Sector 0AC1Dh  HSG2\MINGOL2X.BIN ;file 76Ch        ;demo streaming file(s)
+  Sector 0B032h  HSG2\SCUS_944.95  ;exefile          ;demo exe file
+
+Note: File 000h is a dummy entry referring to the 2800h-byte list itself +(retail file 000h has offset=00:06:00 but size=0, demo file 000h has offset and +size set to zero). File 001h is the first actual file (at offset=00:06:05, ie. +after the 2800h-byte list)

+

Threads of Fate (MagDemo33: TOF\DEWPRISM.HED+.EXE+.IMG)

+

The demo version uses "Virtual Sectors" in HED+EXE+IMG files. Apart from that, +the format is same as for the "Hidden Sectors" in retail version:
+CDROM File Archives in Hidden Sectors

+

WWF Smackdown (MagDemo33: TAI\.PAC\, and nested therein)

+

These "PAC " files are found in the main archives (which use a separate archive +format, with ID "DPAC").
+

  000h 4     ID ("PAC ")                                        ;\
+  004h 4     Number of files (N)                                ; Header
+  008h N*8   File List                                          ;/
+  ...  ..    File Data area                                     ;-Data area
+
+File List entries:
+
  000h 2     File ID (inreasing, but may skip numbers, ie. non-linear)
+  002h 3     File Offset (increasing, relative to begin of Data area)
+  005h 3     File Size
+
+Bug: TAI\C.PAC\EFFC\0001h has TWO entries with File ID=0002h.

+

Tyco R/C Racing (MagDemo36: TYCO\MAINRSRC.BFF)

+

  000h 4     Unknown (1)
+  004h 4     Filelist Offset          (800h)
+  008h 4     Filelist Size (N*8+4)    (7ACh)
+  ...  ..    Padding to 800h-byte boundary (see note)
+  800h 4     Number of files (N)      (F5h)
+  804h N*8   File List
+  ...  ..    Padding to 800h-byte boundary (see note)
+  ...  ..    File Data area
+
+File List entries:
+
  000h 4     File Offset in bytes (increasing, 800h-byte aligned)
+  004h 4     File Size in bytes
+
+Padding Note: Padding after headers & files is weirdly done in two steps:
+
  Step 1: Zeropadding to 200h-byte boundary    (first 0..1FFh bytes)
+  Step 2: Garbagepadding to 800h-byte boundary (last 0..600h bytes)
+

+

Team Buddies (MagDemo37: BUDDIES\BUDDIES.DAT)

+

  000h 2     ID ("BD")
+  002h 2     Number of files (N)
+  004h N*8   File List
+  ...  ..    Zeropadding to 3000h
+  3000h ..   File Data area
+
+File List entries:
+
  000h 4     File Offset/800h (increasing)
+  004h 4     File Size in bytes
+

+

Gundam Battle Assault 2 (DATA\*.PAC, and nested therein)

+

  000h 4     ID ("add",00h)
+  004h 4     Fixed (4)
+  008h 4     Offset to File List (usually/always 20h)
+  00Ch 4     Number of Files (N)
+  010h 4     Fixed (10h)
+  014h 0Ch   Zerofilled
+  020h N*10h File List
+  ...  ..    File Data area
+
+File List entries:
+
  000h 4     Offset (increasing, 4-byte aligned)  ;\or both zero
+  004h 4     Size (can be odd)                    ;/
+  008h 4     Unknown (0) (or 00h,10h,11h,20h,30h,40h when Offset/Size=0)
+  00Ch 4     Zero (0)
+

+

Incredible Crisis (MagDemo38: IC\*.CDB)

+

  000h 4     Number of files (N)
+  004h N*4   File List
+  ...  ..    Zeropadding to 800h-byte boundary
+
+File List entries:
+
  000h 2     File Offset/800h (increasing)
+  002h 2     File Size/800h
+

+

Ape Escape Sound Archive (MagDemo22:KIDZ\KKIIDDZZ.HED\DAT\1Bh-1Dh,49h-53h,..)

+

Ape Escape Sound Archive (MagDemo44:KIDZ\KKIIDDZZ.HED\DAT\1Bh-1Dh,4Fh-59h,..)

+
  000h 5*4   File Sizes   (can be odd) (can be 0 for 2nd and 5th file)
+  014h 5*4   File Offsets (28h and up, increasing by sizes rounded to N*10h)
+  028h ..    File Data area (first file usually/always contains "SShd")
+
+

Ultimate Fighting Championship (MagDemo38: UFC\CU00.RBB)

+

  0000h 4    ID "siff"                                  ;\Header
+  0004h 4    Total Filesize (DADB1Ch)                   ;/
+  0008h 4    ID "RSRC"                                  ;\
+  000Ch 4    String Size (70h)                          ; ASCII string
+  0010h 70h  String "RC ver1.0 Copyright",...,00h       ;/
+  0080h 4    ID "RIDX"                                  ;\
+  0084h 4    File List Size     (1F78h) (3EFh*8)        ; Directory
+  0088h N*8  File List (Offset, Size1)                  ;/
+  2000h 4    ID "EXIX"                                  ;\
+  2004h 4    Extended List Size (FBCh)  (3EFh*4)        ; Extended
+  2008h N*4  Extended List (Size2)                      ;/
+  2FC4h 4    ID "GAP0"                                  ;\Alignment Padding
+  2FC8h 4    Padding Size (2Ch)                         ; (so that next chunk
+  2FCCh 2Ch  Padding (1Ah-filled)                       ;/starts at boundary-8)
+  2FF8h 4    ID "RBB0"                                  ;\
+  2FFCh 4    File Data area Size (DAAB1Ch)              ; Data area
+  3000h ..   File Data area                             ;/
+
+File List entries (RIDX):
+
  000h 4     File Offset (increasing, 4-byte aligned, from ID "RBB0" plus 8)
+  004h 4     File Size in bytes (can be odd)
+
+Extended List entries (EXIX):
+
  000h 4     File Size in bytes (always the same size as in RIDX chunk)
+

+

Ultimate Fighting Championship (MagDemo38: UFC\CU00.RBB\183h,37Bh..3EBh)

+
  000h 4     ID "OIFF"                                  ;\Header
+  004h 4     Total Filesize                             ;/
+  008h 4     ID "TIMT" or "ANMT"                        ;\
+  00Ch 4     Size (N*4)                                 ; Directory Table
+  010h N*4   File List (offsets from begin of Data ID+8);/
+  ...  4     ID "TIMD" or "ANMD"                        ;\
+  ...  4     Data Area size (SIZ) (Filesize-18h-N*4)    ; Data area
+  ...  SIZ   Data Area                                  ;/
+
+

E.T. Interplanetary Mission (MagDemo54: MEGA\MEGA.CSH+.BIN)

+

 MEGA.CSH:
+  000h N*0Ch File List
+ MEGA.BIN:
+  000h ..    File Data area
+
+File List entries:
+
  000h 4     Offset (in MEGA.BIN file, 800h-byte aligned, increasing)
+  004h 4     Unknown (32bit id/random/checksum/whatever)
+  008h 4     Filesize in bytes
+

+

Driver 2 The Wheelman is Back (MagDemo40: DRIVER2\SOUND\\)

+
  000h 4     Number of entries (1 or more)
+  004h N*10h File List
+  ...  ..    File Data area (.VB aka SPU-ADPCM)
+ File List entries:
+  000h 4     Offset from begin of Data area, increasing
+  004h 4     Filesize in bytes
+  008h 4     Unknown (0 or 1)
+  00Ch 4     Unknown (AC44h, 0FA0h, 2EE0h, 2710h, 2B11h, 3E80h, 1F40h, etc.)
+ Note: Above AC44h might 44100Hz, or just file number 44100 decimal?
+
+

Thrasher: Skate and Destroy (MagDemo27: SKATE\ASSETS\*.ZAL) (Z-Axis)

+

Dave Mirra Freestyle BMX (MagDemo36: BMX\ASSETS\*.ZAL) (Z-Axis)

+

Dave Mirra Freestyle BMX (MagDemo46: BMX\ASSETS\*.ZAL) (Z-Axis)

+

  000h 4     ID (always 2A81511Ch)
+  004h 0Ch   Zerofilled
+  010h 1     Unknown (1)
+  011h 1     Compression Flag for all files (00h=Uncompressed, 80h=Compressed)
+  012h 2     Number of files (bit0-13?=N, bit14=Unknown, can be set)
+  014h N*0Ch File List, 12 bytes/entry      ;<-- when [11h]=00h=uncompressed
+  014h N*10h File List, 16 bytes/entry      ;<-- when [11h]=80h=compressed
+  ...  ..    File Data area
+
+File List entries (0Ch or 10h bytes per entry, depending on compression):
+
  000h 4     File ID (usually 0=first, increasing) (or 0001h,7531h,7532h,...)
+  004h 4     Offset-10h in bytes (increasing, 4h-byte aligned)
+  008h 4     Filesize, uncompressed (can be odd)
+  00Ch (4)   Filesize, compressed (can be odd)   ;<-- exists only if compressed
+
+For decompression, see:
+CDROM File Compression ZAL (Z-Axis)

+

Speed Punks (MagDemo32: SPUNKS\*.GDF)

+
  000h 4     ID "0FDG XSP" (aka PSX GDF0 backwards)
+  008h 4     Header Size (N*10h+10h)
+  00Ch 4     Number of files (N)
+  010h N*10h File List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 4     ID/Type ("MARV", "MARS", "MARD", "PMET", "COLR", "MROF")
+  004h 4     ID/Num  (usually 1 SHL N, or all zero)
+  008h 4     Offset (800h-byte aligned, increasing)
+  00Ch 4     Size in bytes
+
+

Legend of Dragoon (MagDemo34: LOD\SECT\*.BIN, and nested therein)

+
  000h 4     ID "MRG",1Ah
+  004h 4     Number of Files (eg. 0, 1, 2, 193h, 2E7h, or 1DBBh)
+  008h N*8   File List
+  ...  ..    Padding to 800h-byte boundary (8Ch-filled) (not in nested MRG's)
+  ...  ..    File Data area
+ File List entries:
+  000h 4     Offset/800h, or 4-byte aligned Offset/1 (increasing)
+  004h 4     Size (can be odd, and can be zero)
+ Size oddities:
+  Empty files in demo version have Size=0 and Offset=0.
+  Empty files in retail version have Size=0 and Offset=OffsetOfNextFile.
+  MRG archives can start or end with Empty files.
+  All files can be empty (eg. retail DRAGN0.BIN\1190h).
+  NumFiles can be zero (eg. retail DRAGN0.BIN\1111h, demo DRAGN0.BIN\10E2h).
+ Offset oddities:
+  SECT\*.BIN have Offset/800h
+  Nested MRGs have 4-byte aligned Offset/1
+  The two variants can be detected as:
+   if FirstOffset=(NumFiles*8+8) then NestedVariant
+   if FirstOffset=(NumFiles*8+8+7FFh) AND NOT 7FFh then RootVariant
+  Whereas, FirstOffset is the first NONZERO offset in file list (important
+  for demo version, which has archives that start with ZERO offsets).
+
+

RC Revenge (MagDemo37: RV2\BB\3.BBK and Retail: BB\\.BBK)

+

This does basically contain four large files (and four info blocks with info on +the content of those files).
+

  000h 4     Random/Checksum?
+  004h 4     Faded ID (FADED007h)
+  008h 4     Part 1 Offset (Sound)     (always E5Ch)
+  00Ch 4     Part 2 Offset (Texture)   (when Type=01h: Offset-E5Ch)
+  010h 4     Part 3 Offset (?)         (when Type=01h: Offset-E5Ch)
+  014h 4     Part 4 Offset (?)         (when Type=01h: Offset-E5Ch)
+  018h 4     Type (10h or 20h=Normal)  (or 01h=Special in BB\8\*.BBK)
+  01Ch B0Ch  Part 1 Info (Sound)       (when Type=01h: garbage-filled)
+  B28h 314h  Part 2 Info (Texture)
+  E3Ch 14h   Part 3 Info (?)
+  E50h 0Ch   Part 4 Info (?)
+  E5Ch ..    Part 1 Data (Sound, SPU-ADPCM data, if any)
+  ...  ..    Part 2 Data (Texture data) (starts with BDEF1222h or BDEF1111h)
+  ...  ..    Part 3 Data (?)   ;\maybe map, models, and/or whatever
+  ...  ..    Part 4 Data (?)   ;/
+
+Part 1 Info (Sound info) (if any):
+
  01Ch 4     Random/Checksum?
+  020h 4     Faded ID (FADED007h)
+  024h 4     Part 1 Size              (eg.7C7F0h)
+  028h 4     SPU Start Addr           (1010h) (for data from file offset E5Ch)
+  02Ch 4     SPU Middle Addr          (eg. 58F70h)
+  030h 4     SPU End Addr             (eg. 7D800h) (start+size)
+  034h 2     Middle entry number      (often 3Ch)
+  036h 2     Number of used entries-1 (eg. 50h means that 51h entries are used)
+  038h AF0h  Sample List (100 entries, unused ones are zerofilled)
+  914h 214h  Zerofilled (unused 1Ch-byte entries) (total is 1Ch*64h)
+ Sample List entries:
+  000h 4     SPU Offset (1010h and up) (SpuOffset=1010h is FileOffset=E5Ch)
+  004h 4     Sample Size in bytes
+  008h 4     Unknown (0)
+  00Ch 4     Unknown (0)
+  010h 4     Pitch   (400h=11025Hz, 800h=22050Hz, 2E7h=8000Hz, 8B5h=24000Hz)
+  014h 4     Unknown (0 or 1)
+  018h 4     File ID (00001F08h and up)
+
+Part 2 Info (Texture info):
+
  B28h 4     Random/Checksum?
+  B2Ch 4     Faded ID (FADED007h)
+  B30h 4     Part 2 Size      (N*16000h)  ;Width=2C0h halfwords, Height=N*64
+  B34h 4     Zero             (0h)
+  B38h 4     Some RAM Address (8010xxxxh)
+  B3Ch 4     Unknown          (eg. 195h or E3h) ;same as at [DA4h]
+  B40h 4+4   VRAM Address X,Y (140h,0)          ;maybe load target
+  B48h 4+4   VRAM Address X,Y (140h,0)          ;maybe palette base?
+  B50h 4+4   VRAM Address X,Y (xx0h,Height-40h) ;often at/near end of used area
+  B58h 4     Unknown          (eg. 1D0h or 1E0h)
+  B5Ch 4     Unknown          (eg. 1Ah or 0Dh)
+  B60h 200h  Some halfwords?  (most are FFFFh, some are 0000h)
+  D60h 40h   Zerofilled       (0)
+  DA0h 4     Unknown          (eg. 185h or E2h)
+  DA4h 4     Unknown          (eg. 195h or E3h) ;same as at [B3Ch]
+  DA8h 9x10h Special Texpages (VramX,Y, SizeX,Y, StepX,Y, Flag/Type/Num or so?)
+  E38h 4     Some RAM Address (800Axxxxh)
+
+Part 3 Info:
+
  E3Ch 4     Random/Checksum?
+  E40h 4     Faded ID (FADED007h)
+  E44h 4     Part 3 Size                  (eg. A9728h or 51264h)
+  E48h 4     RAM End Address (start+size) (eg. 801Fxxxxh) (near memtop)
+  E4Ch 4     RAM Start Address (end-size) (eg. 801xxxxxh)
+
+Part 4 Info:
+
  E50h 4     Random/Checksum?
+  E54h 4     Faded ID (FADED007h)
+  E58h 4     Part 4 Size (usually 10CCCh) (or 105E0h in demo version)
+
+Note: File CAT\RDS.CAT does also start with ID=FADED007h (but contains whatever +different stuff).

+

CDROM File Archives with Offset

+

Below are archives that start with a simple Offset list. The DOT1 and DOTLESS +types are "standard" archives used by many PSX games (although the "standard" +was probably independently created by different developers).

+

DOT1 Archives (named after the ".1" extension in R-Types)

+

Used by various titles:
+

  R-Types (CG.1, PR\PR.1, and nested inside CG.1)
+  Final Fantasy IX (nested inside FF9.IMG, FF9.IMG\DB, FF9.IMG\DB\DOT1)
+  Legend of Mana (*.EFF,*.SET,*.BTP(?) in folders SND*,SOUND,WM(?))
+  Witch of Salzburg (*.ANM/BIN/BSS/DAT/MDL/SCE)
+  Rayman (RAY\*.XXX, RAY\SND\*.ALL, and nested inside *.XXX)
+  Pandemonium II (JESTERS.PKG\0101\0008 and JESTERS.PKG\0101\000D)
+  Incredible Crisis (MagDemo38: IC\TAN_DAT.CDB\<DOTLESS>\<DOT1>\<SHIFTJIS>)
+  Various games on PlayStation Magazine Demo Discs (Disc 03-54)
+
+DOT1 (in lack of a better name) is a simple archive format that contains Number +of Entries and List with Increasing Offsets to File data.
+
  000h 4    Number of Files (N)                 (eg. 2..18)
+  004h N*4  File List (offsets to each file, increasing, aligned)
+  ...  (4)  Optional: Total filesize (aka end-offset for last list entry)
+  ...  ..   Optional: Zeropadding to alignment boundary (when alignment>4)
+  ...  ..   File Data
+
+There are four variants with different alignment (and in some cases, with an +extra entry with end-offset for last file):
+
  Align800h, no extra entry    R-Types (CG.1 and PR\PR.1)
+  Align4,    no extra entry    R-Types (nested in CG.1), FF9 (in IMG, IMG\DB)
+  Align2,    no extra entry    Incredible Crisis (IC\TAN_DAT.CDB\*\*)
+  Align800h, with extra entry  MLB 2000 (DATA.WAD)
+  Align10h,  with extra entry  Witch of Salzburg (*.ANM/BIN/BSS/DAT/MDL/SCE)
+  Align4,    with extra entry  Rayman (*.XXX, *.ALL)
+
+The files can be detected by checking [004h]=4+(N*4), 4+(N*4)+Align800h, +4+(N*4)+4, or 4+(N*4)+4+Align10h, and checking that the offsets are increasing +with correct alignment (Rayman has some empty files with same offset), and +don't exceed the total filesize. And that the alignment space is zeropadded (in +case of R-Types, only the header is 00h-padded, but files are FFh-padded).
+The detection could go wrong, especially if the archive contains very few +files, some of the nested DOT1's contain only one file (header "00000001h, +00000008h", without any further increasing offsets or padding). As workaround, +accept such files only if they have a ".1" filename extension, or if they were +found inside of a bigger DOT1, IMG, or DB archive.
+Final Fantasy IX contains some DOT1's with fewer than few entries (the file +being only 4-bytes tall, containing value NumEntries=00000000h).

+

NFL Gameday '98 (MagDemo04: GAMEDAY\*.FIL) (32bit) (with nested FIL's)

+

NFL Gameday '99 (MagDemo17: GAMEDAY\*.FIL) (32bit)

+

NFL Gameday 2000 (MagDemo27: GAMEDAY\*.FIL) (16bit and 32bit)

+

NCAA Gamebreaker '98 (MagDemo05: GBREAKER\*.FIL,*.BIN) (16bit and 32bit)

+

NCAA Gamebreaker 2000 (MagDemo27: GBREAKER\*.FIL) (16bit and 32bit)

+

FIL/32bit (with [02h]=FFFFh):
+

  000h 2    Number of Files (N)
+  002h 2    ID for 32bit version (FFFFh=32bit entries)
+  004h N*4  File List (offsets to each file, increasing, 4-byte aligned)
+  ...  ..   File Data
+
+FIL/16bit (with [02h]\<>FFFFh, eg. FLAG*.FIL and VARS\STARTUP2.FIL\0\*):
+
  000h 2    Number of Files (N)
+  002h N*2  File List (offsets to each file, increasing, 4-byte aligned)
+  ...  ..   Zeropadding to 4-byte boundary
+  ...  ..   File Data
+

+

PreSizeDOT1 (Ace Combat 2) (retail and MagDemo01: ACE2.DAT\*)

+

Like DOT1, but with Total Filesize being oddly stored at begin of file.
+

  000h 4    Total Filesize (aka end-offset for last list entry)
+  004h 4    Number of Files (N)
+  008h N*4  File List (offsets to each file, increasing, 4-byte aligned)
+  ...  ..   File Data
+
+Note: Ace Combat 2 contains PreSizeDOT1 (ACE2.DAT\02h..1Dh,36h..B2h) and normal +DOT1 archives (nested in PreSizeDOT1's and in ACE2.DAT\B3h..E1h).

+

DOT-T (somewhat same as DOT1, but with 16bit entries)

+

Armored Core (MagDemo02, AC10DEMP\*.T)
+

  000h 2    Number of Files
+  002h N*2  File List (Offset/800h to file data, increasing)
+  ...  2    Total Size/800h (end-offset for last file)
+  ...  ..   Zeropadding to 800h-byte boundary
+  ...  ..   File Data
+
+This can contain many empty 0-byte files (aka unused file numbers; though maybe +those files exist in the retail version, but not in the demo version).

+

DOTLESS Archive

+

Hot Shots Golf (MagDemo07: HSG\.DAT)
+Hot Shots Golf 2 (retail: DATA\F0000.BIN\
, MagDemo31/42: HSG2\MINGOL2.BIN\)
+Starblade Alpha (FLT\
.DAT, TEX\.DAT)
+Incredible Crisis (MagDemo38: IC\TAN_DAT.CDB\<DOTLESS>)
+

  000h N*4  Offsets to File data (increasing, usually 4-byte aligned)
+  ...  (4)  Filesize (end-offset for last file) (only in Ape Escape)
+  ...  ...  File Data
+
+Like DOT1, but without Number of Files entry (instead, the first offset does +imply the end of file list). There's no extra entry for end of last file +(instead, that's implied in the total filesize). Most files have at least 5 +entries, but HSG\TITLE0.DAT seems to contain only one entry (ie. the whole +header contains only one value, 00000004h, followed by something that looks +like raw bitmap data).
+Also used by Ape Escape (MINIGAME\
included nested ones), the Ape Escape files +do have an end-marker with last-offset (that will appear as an empty 0-byte +file at end of list when not specifically handling it). +MINIGAME\MINI2\BXTIM.BIN does also have several 0-byte files inside of the file +list.

+

Twisted Metal: Small Brawl (MagDemo54: TMSB\SHL\*.TMS)

+

  000h 4     Size of Data Area (total filesize minus 0D0h)
+  004h 4     Number of files
+  008h N*4   File List (zerobased offsets from begin of Data Area)
+  ...  ..    Zeropadding to 0D0h
+  0D0h ..    File Data Area
+
+This resembles DOT1, with an extra size entry and padding to 0D0h.

+

Ridge Racer Type 4 (MagDemo19: R4DEMO\R4.BIN, 39Mbyte)

+

Ridge Racer Type 4 (MagDemo21: R4DEMO\R4.BIN, 39Mbyte)

+

Basically, this is alike DOT1, but SECTOR numbers, and with extra entries...
+

  000h 4     Number of Files (N) (3C9h)
+  004h N*4   File List (Offset/800h)
+  ...  4     Total Size/800h                  ;<-- last offset
+  ...  4     Unknown (00,E8,82,2E)            ;<-- ??? maybe chksum*800h or so?
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+

+

Legend of Legaia (MagDemo20: LEGAIA\PROT.DAT)

+

  000h 4     Zero
+  004h 4     Number of Entries (4D3h)
+  008h N*4   File List (Offset/800h)
+  ...  4     Total Size/800h (aka end Offset/800h of last file)
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+
+The PROT.DAT does not contain filenames, however, it's bundled with CDNAME.TXT, +which appears to contain symbolic names for (some) indices:
+
  #define init_data 0           ;for file 0000h
+  #define gameover_data 1       ;for file 0001h
+  #define town01 3              ;for file 0003h
+  #define town0b 12             ;for file 000Ch
+  ...                           ;...
+  #define other6 1222           ;for file 04C6h
+  #define other7 1228           ;for file 04CCh
+
+The DAT file contains many zerofilled "dummy" files with 800h-byte size.

+

Bloody Roar 1 (MagDemo06: BL\*.DAT)

+

Bloody Roar 2 (MagDemo22: ASC,CMN,EFT,LON,SND,ST5,STU\*.DAT)

+

  000h 4     Number of Entries (N)
+  004h N*4   File List (Offset-(4+N*4), increasing) (or FFFFFFFFh=Unused entry)
+  ...  ..    File Data area
+
+Most or all files in DAT archives are PreGT20 compressed.
+CDROM File Compression GT20 and PreGT20
+Note: Unused entries can occur anywhere, eg. Bloody Roar 2 CMN\SEL01.DAT does +have both first and LAST entry marked as unused (FFFFFFFFh). Also, there may be +a lot of unused entries, eg. Bloady Roar 1 CMN\TITLE00.DAT uses only 5 of 41h +entries).

+

Klonoa (MagDemo08: KLONOA\FILE.IDX\*)

+
  000h 4     ID "OA05"
+  004h N*4   Offset List (usually/always 5 used entries, plus zeropadding)
+  030h ..    File Data area (usually/always starting at offset 30h)
+
+

C - The Contra Adventure (DATA\SND\*.SGG)

+
  000h 4    ID "SEGG"
+  004h 4    Offset to .VH file
+  008h 4    Offset to .VB file
+  00Ch 4    Number of .SEQ files (N) (usually 6Eh, or 08h in MENU.SGG)
+  010h N*4  Offsets to .SEQ files (increasing, unaligned)
+  ...  ..   SEQ files
+  ...  ..   Padding to 4-byte boundary
+  ...  ..   VH file
+  ...  ..   VB file
+
+

Ninja (MagDemo13: NINJA\VRW\*.VRW)

+

  000h 8     ID "VRAM-WAD" (here as archive ID, although same as compress ID)
+  004h N*4   File List (offsets to Data)  ;NumFiles=(FirstOffset-8)/4
+  ...  ..    Data (compressed .PAK files, which do ALSO have ID="VRAM-WAD")
+
+The compressed .PAK files are using a LZ5-variant:
+CDROM File Compression LZ5 and LZ5-variants

+

The Next Tetris (MagDemo22: TETRIS\*) has PSX.BSE (and nested therein)

+
  000h 4     Unknown (3)
+  004h 4     Total Size
+  008h 4     Number of Files (N) (max 40h, for max 40h*4 bytes in file list)
+  00Ch N*4   File List (increasing offsets, 800h-byte aligned)
+  ...  ..    Unknown (looks like garbage padding for unused File List entries)
+  10Ch 6F4h  42h-filled padding to 800h-byte boundary
+  800h ..    File Data area
+
+

Tactics Ogre (UBF*.BIN)

+

  000h 8     Fixed (88h,0,0,0,0,0,0,0)
+  008h 4     Number of Files (eg. 1Dh or 585h, including last/end file)
+  00Ch N*4   File List (increasing offsets, 800h-byte aligned)
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+
+Note: The last file is a TXT file containing "LINK-FILE END....",0Dh,0Ah,1Ah, +plus zeropadding to 800h-byte boundary.

+

Spyro the Dragon (MagDemo12: SPYRO\PETE.WAD)

+

  000h 4     Total Filesize (3E800h in Spyro)
+  004h N*8   File List      (1B0h bytes in Spyro)
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data (4-byte aligned, despite of above 800h-byte hdr padding)
+
+File List entries:
+
  000h 4     Fileoffset (increasing, 4-byte aligned)
+  004h 4     File ID? (unsorted, not increasing, used range is 000h..1FAh)
+

+

CDROM File Archives with Size

+

Disney-Pixar's Monsters, Inc. (MagDemo54: MINC\*.BZE)

+

  000h 4     Zero (0)
+  004h 4     Type/ID (27100h=160000, 2BF20h=180000, 30D40h=200000 decimal)
+  008h 4     Number of files
+  00Ch N*0Ch File List
+  ...  ..    Zeropadding to 7FCh
+  7FCh 4     Checksum (32bit sum of SIGN-EXPANDED bytes at [000h..7FBh])
+  ...  ..    File Data
+
+File List entries:
+
  000h 4     File Type/ID or so (roughly increasing, eg. 1,3,6,5,7,8,9,A,B)
+  004h 4     Filesize in bytes
+  008h 4     Filesize rounded up to multiple of 800h bytes
+

+

Bugs Bunny: Lost in Time (MagDemo25: BBLIT\*.BZZ) (without extra entry)

+

The Grinch (MagDemo40: GRINCH\*.BZZ) (with extra entry)

+

Resembles .BZE, but without the Type entry in Header.
+

  000h 4     Fixed 1 (maybe version, or compression flag)
+  004h (4)   Unknown (000xxxx0h)   ;<-- Extra in The Grinch only (not Bunny)
+  ...  4     Number of files
+  ...  N*0Ch File List
+  ...  ..    Zeropadding to 7FCh
+  7FCh 4     Checksum (32bit sum of SIGN-EXPANDED bytes at [000h..7FBh])
+  ...  ..    File Data
+
+File List entries:
+
  000h 4     File Type/ID or so (roughly increasing, eg. 1,2,3,6,5,7,8,9,A)
+  004h 4     Filesize in bytes (rounded to N*4 even if compressed data is less)
+  008h 4     Filesize rounded up to multiple of 800h bytes
+
+Files are compressed, starting with 0Bh, same as in Jersey Devil...
+CDROM File Compression BZZ
+Note: The TIM files in Bugs Bunny and The Grinch BZZ archives consists of two +TIMs badged together: A 4x4 pix dummy TIM, followed by the actual 512x125 pix +TIM (in some cases followed some extra bytes at end of file?).

+

Jersey Devil .BZZ (MagDemo10: JD\*.BZZ)

+

Resembles .BZE, but without the Type entries in Header and File List, and +without Header checksum.
+

  000h 4     Fixed 1 (maybe version, or compression flag)
+  004h 4     Number of files (4)
+  008h N*8   File List
+  ...  ..    Zeropadding to 800h-byte boundary (without checksum, unlike .BZE)
+  ...  ..    File Data
+
+File List entries:
+
  000h 4     Size in bytes
+  004h 4     Size rounded to multiple of 800h
+
+Files are compressed, starting with 0Bh, same as in Bugs Bunny...
+CDROM File Compression BZZ

+

Jackie Chan Stuntmaster (RCHARS\*.RR)

+

NBA Basketball 2000 (MagDemo28: FOXBB\*.RR)

+

  000h 2     ID ("PX")
+  002h 2     Unknown (1 or 3)
+  004h 4     Header Size (eg. 80h, 7C0h, or 1730h) (N*8+8)
+  008h N*8   File List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 4     Offset (increasing, 800h-byte aligned)
+  004h 1     Zero
+  005h 3     Filesize in bytes (24bit) (can be odd)
+
+Jackie Chan Stuntmaster does always have headersize=1730h (with many unused +entries with size=0, both in the middle & at the end of File List).

+

Bomberman World (MagDemo15: BOMBER\*.RC)

+

                XXX detect this WITH extension=".RC" check before OBJ
+                    (else type=1 could be mistaken as offs=1) (eg RC1\BP0*.RC)
+
+Resembles .OBJ but contains Filetype? instead of Offset.
+
  000h N*8   File List
+  ...  8     File List end (zerofilled)
+  ...  ..    Garbage padding to 800h-byte boundary
+
+File List entries:
+
  000h 4     Filetype (see below)
+  004h 4     Filesize in bytes
+
+There can be several files with same type in one .RC archive. Type values are:
+
  00h = End of File List (at least so when Type and Size are both zero)
+  01h = .TIM
+  02h = Unknown
+  03h = Unknown
+  05h = .VH
+  06h = .VB
+  09h = Unknown
+  0Ah = .TIM (left half of a larger image) (right half has type 01h)
+  0Bh = Unknown
+  0Ch = Unknown
+

+

Mat Hoffman's Pro BMX (new demo) (MagDemo48: MHPB\BMXCD.HED+WAD)

+

This format is used by the NEW demo version on MagDemp48 (the OLD demo version +on MagDemo39 did use Spider-Man-style HED/WAD format with filenames).
+

 HED:
+  000h 2     Number of entries (N)
+  002h N*6   File List
+ WAD:
+  000h ...   File data (at 800h-byte aligned locations)
+
+File List entries:
+
  000h 3     File ID (24bit)
+  003h 3     File Size in bytes (21bit, max 2Mbyte) (upper 3bit=unused?)
+
+Note: HED is processed at 80052AC0h in MagDemo48.

+

Madden NFL 2000 (MagDemo27: MADN00\*.DAT and nested therein)

+

Madden NFL 2001 (MagDemo39: MADN01\*.DAT and nested therein)

+

  000h 4     Header Size (N*SectorSize) (xxh, 800h, 1000h, 4800h, or 920h)
+  004h 4     Sector Size (4=ChildArchive, 800h=MainArchive, 920h=FMV/MADN00)
+  008h 4     File List entrysize (0=32bit, 1=16bit/MADN00, 4=16bit/MADN01)
+  00Ch N*2/4 File List (16bit or 32bit filesizes in bytes)
+  ...  ..    Zeropadding to SectorSize boundary
+  ...  ..    Files (with above sizes, each zeropadded to SectorSize boundary)
+
+Dummy files have filesize=1 (but they do nethertheless occupy a whole data +sector).
+Unknown why the FMV file in MADN00 is using SectorSize=920h (it appears to be +FORM2 related, although the file seems to be stored in FORM1 sectors, but the +STR movie appears to work okay despite of the odd size).

+

Croc 2 (MagDemo22: CROC2\CROCII.DIR\FESOUND.WAD)

+

Disney's The Emperor's New Groove (MagDemo39:ENG\KINGDOM.DIR\FESOUND.WAD)

+

Disney's Aladdin in Nasira's Rev. (MagDemo46:ALADDIN\ALADDIN.DIR\FESOUND.WAD)

+

  000h 4     Total Filesize-4
+  004h N*14h File List (2 entries in Croc2, 3 entries in Aladdin/Emperor)
+  ...  ..    File Data area (SPU-ADPCM( (.VB files with leading zeroes)
+ File List entries:               (Aladdin/Emperor) (Croc2)
+  000h 4     Sample Rate in Hertz (AC44h=44100Hz)   (5622h=22050Hz)
+  004h 2     Sample Rate Pitch    (1000h=44100Hz)   (0800h=22050Hz)
+  006h 2     Unknown              (7Fh)             (32h)
+  008h 4     Unknown              (1)               (8)
+  00Ch 4     Unknown              (1FC0001Fh)       (40008Fh)
+  010h 4     Filesize             (xxx0h)           (xxx0h)
+
+The number of files is implied in sum of filesizes versus total size.

+

Dino Crisis 1 and 2 (PSX\DATA\*.DAT and *.DBS and *.TEX) ("dummy header")

+

  000h 800h  File List (with 10h or 20h bytes per entry)
+  800h ..    File Data (each file is zeropadded to 800h-byte boundary)
+
+File List entrysize can be 10h or 20h bytes:
+
  Dino Crisis 1 --> always size 10h
+  Dino Crisis 2 --> usually size 20h
+  Dino Crisis 2 --> sometimes size 10h (eg. SC24.DAT, SC48.DAT, WEP_*.DAT)
+
+File List entries:
+
 File List entries, type 0 and 7:
+  000h 4     Type (0=Data (or .BS pictures), 7=CompressedData)
+  004h 4     Size
+  008h 4     RAM Addresss (80000000h..801FFFFFh)
+  00Ch 4     Zero
+  010h (10h) Zerofilled
+ File List entries, type 1 and 2 and 8:
+  000h 4     Type (1=Bitmap, 2=Palette, 8=CompressedBitmap)
+  004h 4     Size (see below Size Notes)
+  008h 2     VRAM Address X     (0..3FFh)
+  00Ah 2     VRAM Address Y     (0..1FFh) (or 280h in Dino 2 ST703.DAT)
+  00Ch 2     Width in halfwords (1..400h)
+  00Eh 2     Height             (1..200h)
+  010h (10h) Zerofilled
+ File List entries, type 3 and 4:
+  000h 4     Type (3=VoiceHeader("Gian"), 4=VoiceData(SPU-ADPCM))
+  004h 4     Size
+  008h 4     SPU Address (0..7FFF0h)
+  00Ch 2     Unknown (0..7)  ;\usually both same (or val1=0, val2>0)
+  00Eh 2     Unknown (0..7)  ;/
+  010h (10h) Zerofilled
+ File List entries, type 5 (eg. ME*.DAT):
+  000h 4     Type (5=Unknown... maybe Midi-style or so)
+  004h 4     Size
+  008h 4     Load Address (0, or on next 4-byte boundary after previous file)
+  00Ch 2     Unknown (0..2)  ;\always both same
+  00Eh 2     Unknown (0..2)  ;/
+  010h (10h) Zerofilled
+ File List entries, type 6 and 9:
+  The EXE code does also accept type 6 and 9 (type 6 is handled same as
+  type 0, and type 9 is ignored), but the actual archives don't seem to
+  contain any files with those types.
+ File List entries, padding for unused entries:
+  000h 10h   Type ("dummy header    ")
+  010h (10h) Zerofilled
+
+Size Notes:
+
 Bitmaps and Palettes can have following sizes:
+  Width*Height*2                       ;normal case
+  Width*Height*2 + Align(1000h)        ;eg. Dino Crisis 1 DOOR*.DAT
+  Width*Height*2 + Align(800h)         ;eg. Dino Crisis 2 DOOR27.DAT
+ CompressedBitmaps can have following sizes in compressed form:
+  Less than Width*Height*2             ;normal case
+  Less than Width*Height*2 + 1000h     ;eg. Dino Crisis 2 M_RESULT,ST002.DAT
+ CompressedBitmaps can have following sizes after decompression:
+  Width*Height*2 + 8                   ;normal case
+  Width*Height*2 + Align(1000h?) + 8   ;eg. Dino Crisis 2 M_RESULT,ST002.DAT
+
+Note: Dino Crisis DEMO version (MagDemo28: DINO\TRIAL.DAT) does also contain +"dummy header" DAT archives (but, unlike as in retail version, they are hidden +somewhere inside of the headerless 14Mbyte TRIAL.DAT archive).
+Type 7 and 8 are using LZSS compression:
+CDROM File Compression LZSS (Dino Crisis 1 and 2)
+Apart from LZSS, Type 4 is using SPU-ADPCM compression, and some Type 0 files +contain .BS compressed pictures (eg. Dino Crisis 2 PSX\DATA\ST*.DBS\*).

+

CDROM File Archives with Chunks

+

Chunk-based archives have chunk headers for each file, but don't have a central +directory. That's mainly useful when loading the whole archive to memory.

+

Interchange File Format (IFF)

+

IFF has been invented by Electronic Arts in 1985 on Amiga (hence using 2-byte +alignment and big-endian size values).
+IFF does mainly define a standarized file structure for use with custom +group/chunk types (it does also define some Amiga-specific standard audio/video +types, but those are barely useful on PSX).
+The files are starting with a Group Header, followed by Chunks:
+

 Group Header:
+  000h 4     Group ID ("FORM") (or "LIST" or "CAT " or "PROP")
+  004h 4     Group Size-08h (SIZ) (filesize-8) (big-endian)
+  008h 4     Group Type (4-character ASCII) (should be an unique identifier)
+  00Ch SIZ-4 Chunk(s), and/or nested Group(s)
+ Chunk Format:
+  000h 4     Chunk Type (4-character ASCII) (meaning depends on Group Type)
+  004h 4     Chunk Size (SIZ) (big-endian)
+  00Ch SIZ   Data (eg. .TIM, .VB, .VH or custom data)
+  ...  ..    Zeropadding to 2-byte boundary
+
+Used by Forsaken (MagDemo09: FORSAKEN\\.BND,MP,PCO)
+Used by Perfect Assassin (DATA.JFS\DATA\SCREEN1.LBM)
+Used by Star Wars Demolition (MagDemo39,41: STARWARS\.EXP)
+Used by Turbo Prop Racing (MagDemo11: RRACER\
.IFF, except COURSE.IFF)
+Used by Viewpoint (VIEW.DIR\.VCF,*.VCS,*.ST*) - some have wrong Size entry?
+Used by Vigilante 8 (MagDemo09: EXAMPLE\
.EXP)
+Used by Wing Commander III (*.LIB\.IFF)
+Bugs in Viewpoint: fonts\
.vcf have correct Groupsize=Filesize-8, but +screens\.vcf have incorrect Groupsize=Filesize-4, and streams\.vcf have +weirdest random Groupsize=Filesize+(-04h,+08h,+14h,+5A0h).

+

Z-Axis little-endian IFF variant

+

Unlike real IFF, these are using little-endian, and don't have a Group Type +entry. There seem to be no nested FORMs. Alignment is kept as 2-byte.
+

 Group Header:
+  000h 4     Group ID ("FORM" or "BODY")
+  004h 4     Group Size-08h (SIZ) (little-endian)
+  008h SIZ   Chunk(s)
+ Chunk Format:
+  000h 4     Chunk Type (4-character ASCII)
+  004h 4     Chunk Size (SIZ) (little-endian)
+  00Ch SIZ   Data
+  ...  ..    Zeropadding to 2-byte boundary
+
+ID "FORM" used by Thrasher: Skate and Destroy (MagDemo27: SKATE\ASSETS\.ZAL\)
+ID "FORM" used by Dave Mirra Freestyle BMX (MagDemo36,46: BMX\ASSETS\.ZAL\)
+ID "BODY" used by Colony Wars (MagDemo02: CWARS\GAME.RSC\.BND)
+ID "BODY" used by Colony Wars Venegance (MagDemo14: CWV\GAME.RSC\
.BND)

+

Alice in Cyberland little-endian IFF variant (.TPK)

+

Same as Z-Axis IFF variant, except Group IDs are different, and the Header +sizes are included in the Group/Chunk sizes.
+

 Group Header:
+  000h 4     Group ID ("hTIX","hFNT","hMBD","hHBS")
+  004h 4     Group Size (total filesize) (little-endian)
+  ...  (8)   Unknown extra (0,0,0,0,0Ch,0,0,0)   ;<-- only in "hHBS" files
+  ...  ..    Chunk(s)
+ Chunk Format:
+  000h 4     Chunk Type ("cCLT","cBIT","cSTR","cMAP","cIDX","cVAB","cSEQ")
+  004h 4     Chunk Size (SIZ) (little-endian)
+  00Ch SIZ-8 Data
+  ...  ..    Maybe Zeropadding to boundary? (Chunk Size is always N*4 anyways)
+
+ID "hTIX" used by Alice in Cyberland (ALICE.PAC\alice.tpk, csel.tpk, etc.)
+ID "hFNT" used by Alice in Cyberland (ALICE.PAC\alice.tpk, juri.tpk, etc.)
+ID "hMBD" used by Alice in Cyberland (ALICE.PAC\.FA2\.MBD)
+ID "hHBS" used by Alice in Cyberland (ALICE.PAC\0x_xx.HBS)

+

Touring Car Championship (MagDemo09: TCAR\GAME\\.BFX)

+

Jarret & LaBonte Stock Car Racing (MagDemo38: WTC\\.BFX)

+

Contains several simple chunks:
+

  000h 4     Chunksize in bytes (SIZ) (usually a multiple of 4)
+  004h SIZ   Chunkdata (eg. .TIM file or other stuff)
+
+There is no end-marker in last chunk (it simply ends at total filesize).

+

Colony Wars Venegance (MagDemo14: CWV\GAME.RSC\VAG.WAD)

+

Colony Wars Red Sun (MagDemo31: CWREDSUN\GAME.RSC\0002\VAG_WAD)

+

Contains several simple chunks with filenames:
+

  000h 0Ch   Chunk Filename ("filename.ext", zeropadded if shorter)
+  00Ch 4     Chunk Data Size in bytes (SIZ)
+  010h SIZ   Chunk Data (usually VAGp files, in VAG.WAD)
+
+There is no end-marker in last chunk (it simply ends at total filesize).
+Red Sun VAG_WAD is a bit odd: The "extension" is _WAD instead .WAD, the chunk +names include prefix "RedSun\", which leaves only 5 chars for the actual name, +causig duplicated names like "RedSun\laser" (which were supposedly meant to be +named laser1, laser2, laser3 or the like), and many of the Red Dun VAG files +contain damaged 30h-byte VAG header entries, eg. zero instead of ID "VAGp").

+

Mat Hoffman's Pro BMX (new demo) (MagDemo48: MHPB\STILLS.BIN)

+

Contains .BS files in several chunks:
+

  000h ..    Chunk(s) (.BS files with extra header info)
+  ...  4     End Marker (00000000h)
+ Chunk format:
+  000h 4     Chunk size (including whole chunk header)
+  004h 2     Bitmap Width  (eg. F0h)
+  006h 2     Bitmap Height (eg. 80h)
+  008h 2     Data Size/4 (same as (Chunksize-0Ch-filenamelen)/4)
+  00Ah 2     MDEC Size/4 (same as at Data[0])
+  00Ch ..    Filename (eg. "lsFact",00h or "bsRooftop1",00h)  ;\filename field
+  ...  ..    Filename Zeropadding to 4-byte boundary          ;/
+  ...  ..    Data (in BS v2 format) (MDEC Size/4, BS ID 3800h, etc.)
+
+Note: STILLS.BIN exists in newer BMX demo in MagDemo48 only (not in MagDemo39).

+

Ridge Racer (TEX*.TMS)

+

Ridge Racer Revolution (BIG*.TMS)

+

Ridge Racer Type 4 (MagDemo19+21: R4DEMO\R4.BIN\\)

+

  000h 4     ID (100h)
+  004h ..    Chunk(s)
+  ...  4     Zero (Chunk Size=0=End)
+  ...  ..    Optional zeropadding to 800h-byte boundary (in R4.BIN\*)
+
+Chunk Format:
+
  000h 4     Chunk Size (SIZ)
+  004h SIZ   Chunk Data (TIM file) (note: includes 0x0pix TIMs with palette)
+

+

Jet Moto 2 (MagDemo03: JETMOTO2\*.TMS)

+

Twisted Metal 2 (MagDemo50: TM2\*.TMS)

+

Contains a fileheader and .TIM files in several chunks:
+

  000h 8     ID "TXSPC",0,0,0 (aka CPSXT backwards)
+  008h 4     Timestamp? (32A5C8xxh)
+  00Ch 4     Number of Chunks (N) (can be 0=None, eg. TM2\SCREEN\ARROWS.TMS)
+  010h N*4   Unknown
+  ...  N*var Chunks
+ Chunk format:
+  000h 4     Chunk Size-4 (SIZ)
+  004h SIZ   Chunk Data (TIM file)
+

+

Princess Maker - Yumemiru Yousei (BDY\*.BD and PM.*)

+

The BDY\*.BD files do simply contain several chunks:
+

  000h ..   Chunk(s)
+
+The PM.* files do contain several "folders" with fixed size:
+
  000h ..   Chunk(s) for 1st folder              ;\Foldersizes are:
+  ...  ..   Zeropadding to Foldersize-boundary   ;  20000h (PM.DT0 and PM.PCC)
+  ...  ..   Chunk(s) for 2nd folder              ;  28000h (PM.MAP)
+  ...  ..   Zeropadding to Foldersize-boundary   ;  42000h (PM.SD0)
+  ...  ..   etc.                                 ;/
+
+Chunk Format:
+
  000h 4    Chunk ID   (800000xxh)
+  004h 4    Chunk Size (size of Data part, excluding ID+Size)
+  008h ..   Data
+
+The Data for different Chunk IDs does usually have a small header (often with +w,h,x,y entries, aka width/height, vram.x/y) followed by the actual data body:
+
  80000004h  x(2),y(2),width(2),height(2)    Bitmap 8bpp          ;PM.PCC,MAP
+  80000005h  w(2),h(2),zero(4)               Array32bit(w,h)      ;PM.MAP
+  80000006h  x(2),width(2)                   Bitmap Palette       ;PM.*
+  80000007h  x(2),y(2),w(1),h(1),zero(2)     Array8bit(w,h)       ;PM.MAP
+  80000010h  width(2),height(2),x(2),y(2)    Bitmap 16bpp         ;*.BD
+  80000012h  zero(0)                         ?                    ;*.BD
+  80000014h  x(2),y(2),width(2),height(2)    Bitmap 4bpp          ;PM.DT0
+  80000016h  x(2),y(2),w(1),h(1),n(1),3Fh(1) BitmapArray4bpp(n*2) ;PM.DT0
+  80000018h  ...                             ?                    ;PM.PCC
+  8000001Ah  zero(8)                         ?                    ;PM.PCC
+  8000001Ch  x(2),y(2),width(2),height(2)    Bitmap 1bpp flags?   ;*.BD
+  80000020h  zero(8)                         Sound .SEQ file      ;PM.SD0
+  80000021h  zero(8)                         Sound .VH file       ;PM.SD0
+  80000022h  zero(8)                         Sound .VB file       ;PM.SD0
+  80000024h  x(2),zero(6)                    ?                    ;PM.DT0\4\0
+  00000000h  Zeropadding to next folder      Zeropadding          ;PM.*
+

+

Project Horned Owl (COMDATA.BIN, DEMODATA.BIN, ROLL.BIN, ST*DATA.BIN)

+

  000h ..    Chunks
+
+Chunk Format:
+
  000h 1     Chunk Type (see below)
+  001h 3     Unknown (some flags or file ID, or zero in many files)
+  004h 4     Chunk Size (SIZ)
+  008h SIZ   Chunk Data (eg. SEQ file)
+
+Chunk Type values:
+
  02h  unknown                      ST*.BIN
+  05h  .TXT                         ROLL.BIN
+  05h  LZ-compressed TIM            DEMODATA.BIN, ST*.BIN (except ST1*.BIN)
+  06h  DOT1 with stuff and TSQ??    ST*.BIN
+  07h  .TMD                         DEMODATA.BIN, ST*.BIN (except ST1*.BIN)
+  08h  unknown                      ST*.BIN
+  09h  "PRM:"                       ST*.BIN
+  0Ah  unknown                      ST*.BIN
+  0Bh  DOT1 with stuff              ST*.BIN (except ST1*.BIN) (odd: ST3*.BIN)
+  0Ch  .SEQ                         ROLL.BIN, ST*.BIN
+  0Dh  unknown                      COMDATA.BIN
+  0Eh  unknown                      ST*.BIN
+  0Fh  DOT1 with LZ-compressed TIMs ST*.BIN
+  10h  DEFLATE-compressed TIM       COMDATA.BIN, ROLL.BIN, ST*.BIN
+  11h  DOT1 with stuff              ST*.BIN
+  Note: Type=05h can be uncompressed TXT or compressed TIM.
+
+For detection, the existing .BIN files start with following values:
+
  07 00 00 00 xx xx 00 00 41 00 00 00 ..   TMD Model ("A")
+  0C 00 00 00 xx xx 00 00 70 51 45 53 ..   SEQ Midi  ("pQES")
+  0E xx 00 00 08 00 00 00 xx xx xx xx ..   Whatever in ST7DATA.BIN (see note)
+  10 01 00 00 24 28 00 00 EC 9B 7F 70 ..   Deflated TIM in COMDATA.BIN
+  10 08 1A 00 30 0C 00 00 ED 58 4F 88 ..   Deflated TIM in ROLL.BIN
+  ST7DATA.BIN has 2 chunks with Type=0Eh, followed by SEQ chunk at offset=20h.
+
+TIMs are compressed via HornedLZ (Type=05h,0Fh) or Deflate (Type=10h).
+CDROM File Compression HornedLZ
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)
+The game's Inflate function does ignore the 2bit blocktype: All blocks must +have dynamic trees (fixed trees and uncompressed blocks aren't supported).

+

Blaster Master (DATA\.IDX, DATA\.DAT)

+

DATA\GRP.IDX, DATA\MAP.IDX, DATA\SEQ.IDX DATA\VAB.IDX:
+

  000h N*2  Chunk List (16bit Offset/800h to Part-1-Chunks in .DAT files)
+  ...  ..   Zeropadding to 800h-byte boundary
+  Notes:
+  The Chunk List can contain zeroes (as first entry at offset 0, and as
+  unused entries; in VAB.IDX those can be followed by further USED entries).
+  For 2-part DAT files, the Chunk List contains offsets for Part 1 only.
+
+DATA\SEQ.DAT:
+
  000h 4    Chunksize/800h                                           ;\
+  004h 4    Datasize in bytes                                        ; Single
+  008h 4    Always 015A5A01h or 015A5A00h                            ; Part
+  00Ch 4    Always 2803h                                             ; with
+  010h ..   Midi data .SEQ file                                      ; 1 file
+  ...  ..   Zeropadding to 800h-byte boundary                        ;/
+
+DATA\VAB.DAT:
+
  000h 4    Chunksize/800h                                           ;\
+  004h 4    Size of .VH Voice Header in bytes                        ; Single
+  008h 4    Size of .VB Voice Binary in bytes                        ; Part
+  00Ch ..   Voice Header .VH file                                    ; with
+  ...  ..   Zeropadding to 800h-byte boundary                        ; 2 files
+  ...  ..   Voice Binary .VB file                                    ;
+  ...  ..   Zeropadding to 800h-byte boundary                        ;/
+
+DATA\GRP.DAT and DATA\MAP.DAT:
+
  000h 4    Part 1 Chunksize/800h                                    ;\
+  004h 4    Size of all TIM files in bytes (can be 0=None)           ; Part 1
+  008h ..   Texture data (several TIMs appended after each other)    ;
+  ...  ..   Zeropadding to 800h-byte boundary                        ;/
+  ...  4    Number of Files (N)                                      ;\
+  ...  4    Part 2 Chunksize/800h                                    ;
+  ...  N*8  File List                                                ; Part 2
+  ...  ..   Garbage-padding to 800h-byte boundary?                   ;
+  ...  ..   File Data area (each file Garbage-padded to 800h-byte)   ;
+ File List entries:                                                  ;
+  000h 4    File Type/ID                                             ;
+  004h 4    Size in bytes                                            ;/
+
+The DAT files are chunk-based (unfortunately, each DAT file is using its own +chunk format, some of them are using 2-part chunks).
+The DAT chunks can be parsed without using the IDX file (the IDX can be helpful +for quick lookup, but even then, one will still need to parse the DAT chunk +headers to find the actual contents like TIM, SEQ, VB, VH files).

+

See also

+

CDROM File Archive Darkworks Chunks (Alone in the Dark)
+CDROM File Archive Blue Chunks (Blue's Clues)
+CDROM File Archive HED/CDF (Parasite Eve 2)
+CDROM File Compression LZSS (Serial Experiments Lain)
+CDROM File Compression SLZ/01Z (chunk-based compressed archive)

+

CDROM File Archives with Folders

+

There are several ways to implement folder-like directory trees:
+

  - Using multiple archive files nested within each other
+  - Using filenames with path string (eg. "path\filename.ext")
+
+Other than that, below are special formats with dedicated folder structures.

+

Archives with Folders

+

CDROM File Archive HUG/IDX/BIZ (Power Spike)
+CDROM File Archive TOC/DAT/LAY
+CDROM File Archive WAD (Doom)
+CDROM File Archive WAD (Cardinal Syn/Fear Effect)
+CDROM File Archive DIR/DAT (One/Viewpoint)
+CDROM File Archive HED/CDF (Parasite Eve 2)
+CDROM File Archive IND/WAD (MTV Music Generator)
+CDROM File Archive GAME.RSC (Colonly Wars Red Sun)
+CDROM File Archive BIGFILE.DAT (Soul Reaver)
+CDROM File Archive FF8 IMG (Final Fantasy VIII)
+CDROM File Archive FF9 IMG (Final Fantasy IX)
+CDROM File Archive GTFS (Gran Turismo 2)
+CDROM File Archive Nightmare Project: Yakata
+CDROM File Archive FAdj0500 (Klonoa)
+See also: PKG (a WAD.WAD variant with folders)

+

Perfect Assassin (*.JFS)

+

 Overall File Structure
+  JFS for root                                   ;\
+  JFS for 1st folder   ;\these are dupicated,    ; header with complete list
+  JFS for 2nd folder   ; also stored in below    ; of all file/folder names
+  JFS for 3rd folder   ; data area               ;
+  etc.                 ;/                        ;/
+  JFS for 1st folder, plus data for files in that folder  ;\
+  JFS for 2nd folder, plus data for files in that folder  ; data area
+  JFS for 3rd folder, plus data for files in that folder  ;
+  etc.                                                    ;/
+
+JFS Headers (0Ch+N*14h bytes)
+
  00h 4     ID "JFS",00h
+  04h 4     Size in bytes (for root: including nearby child JFS's)
+  08h 4     Number of file/folder entries in this folder (N)
+  0Ch N*14h File/Folder entries
+
+File Entries (with [10h].bit31=0):
+
  00h 12  "FILENAME.EXT" (or zeropadded if shorter)
+  0Ch 4   Offset from begin of JFS in data area (without any alignment)
+  10h 4   Size in bytes, plus 00000000h=File
+
+Folder Entries (with [10h].bit31=1):
+
  00h 12  "DIRNAME.EXT" (or zeropadded if shorter)
+  0Ch 4   Offset to child JFS in data area
+  10h 4   Offset to child JFS in header area, plus 80000000h=ChildFolder
+
+The JFS format is almost certainly unrelated to IBM's "Journaled File System".

+

Alone in the Dark The New Nightmare (FAT.BIN=Directory, and DATA.BIN=Data)

+

 FAT.BIN:
+  00h 2     Number of folders (X) (43h)
+  02h 2     Number of files   (Y) (8F0h)
+  04h 4     Unknown               (1000h)
+  08h X*10h Directory Entry 0000h..X-1 (entry 0000h is named "ROOT")
+  ..  Y*10h File Entry 0000h..Y-1
+ DATA.BIN:
+  00h ..    File Data area
+
+Directory Entries (10h bytes):
+
  00h 8    Name (terminated by 00h if less than 8 chars)
+  08h 2    First Subdirectory number (0001h and up, 0000h would be root)
+  0Ah 2    Number of Subdirectories  (0000h=None, if so above is usually 00FFh)
+  0Ch 2    First File number         (0000h and up)
+  0Eh 2    Number of files           (0000h=None, if so above is usually 00FFh)
+
+File Entries (10h bytes):
+
  00h 8    Name (terminated by 00h if less than 8 chars)
+  08h 4    Offset/800h to DATA.BIN
+  0Ch 4    Size in bytes (when compressed: decompressed size+02000000h)
+
+Compressed files (in LEVELS\\ with Size.bit25=1) can be decompressed as so:
+CDROM File Compression Darkworks
+The files include some TIM images, WxH images, binary files, and chunks:
+CDROM File Archive Darkworks Chunks (Alone in the Dark)

+

Interplay Sports Baseball 2000 (MagDemo22: BB2000\* HOG.DAT and HOG.TOC)

+

 HOG.TOC:
+  000h N*14h Folder/File List (starting with root folder)
+ HOG.DAT:
+  000h ..    File Data (referenced from HOG.TOC)
+
+Folder entries:
+
  000h 1     Type      ("D"=Directory)
+  001h 8     Name      ("FILENAME", zeropadded if shorter) (or "\" for root)
+  009h 3     Extension (usually zero for directories)
+  00Ch 4     Folder Offset/14h in .TOC file (aka 1st child file/folder index)
+  010h 4     Folder Size/14h                (aka number of child files/folders)
+
+File entries:
+
  000h 1     Type      ("F"=File)
+  001h 8     Name      ("FILENAME", zeropadded if shorter)
+  009h 3     Extension ("EXT", zeropadded if shorter)
+  00Ch 4     File Offset/800h in .DAT file (increasing)
+  010h 4     File Size in bytes
+

+

Tenchu 2 (MagDemo35: TENCHU2\VOLUME.DAT)

+

  000h 4     Unknown (demo=A0409901h, us/retail=A0617023h)
+  004h 4     Unknown (0h)
+  008h 4     Number of files   (F) (demo=B7h, us/retail=1294h)
+  00Ch 4     Number of folders (D) (demo=0Fh, us/retail=3Eh)
+  010h D*8   Folder List
+  ...  ..    Zerofilled (padding to 800h-byte boundary)
+  800h F*10h File List
+  ...  ..    Zerofilled (padding to 800h-byte boundary)
+  ...  ..    File Data area
+
+Folder List entries:
+
  000h 4     Folder ID (Random, maybe folder name checksum?)
+  004h 4     First file number in this folder (0=first, increasing)
+
+File List entries:
+
  000h 4     File Offset/800h
+  004h 4     File Size in bytes
+  008h 4     Folder ID (same as Parent Folder ID in Folder List)
+  00Ch 4     File ID (Random, maybe file name checksum?)
+

+

Blasto (MagDemo10: BLASTO\BLASTO.DAT and BLASTO\BLASTO.LFS)

+

 LFS:
+  000h N*18h File/Folder List
+ DAT:
+  000h ..    File data
+
+File entries (with [10h]=Positive):
+
  000h 10h   Filename ("FILENAME.EXT", zeropadded)
+  010h 4     Offset in bytes, in BLASTO.DAT
+  014h 4     Size in bytes
+
+Folder entries (with [10h]=Negative):
+
  000h 10h   Foldername ("DIRNAME", zeropadded)
+  010h 4     Index to first child (at Offset=(-Index)*18h in BLASTO.LFS)
+  014h 4     Zero
+
+Folder end marker (with [00h]=00h or 80h):
+
  000h 1     End marker, at end of root & child directories (00h or 80h)
+  001h 17h   Unknown
+

+

Twisted Metal 4 (MagDemo30: TM4DATA\*.MR and *.IMG)

+

These are relative small archives with hundreds of tiny chunks (with registry +style Symbol=Value assignments), and a few bigger chunks (with .mod .vab .bit +.clt files).
+

  000h 4     Fixed ID (CCCC0067h)
+  004h ..    Root Folder (with Name="Root",00h,FDh,FDh,FDh)
+ Folder Chunk format:
+  000h 1     Length of Name (including 4-byte padding)
+  001h 1     Number of Child Folders
+  002h 2     Number of Child Files
+  004h ..    Name ("name",00h, CDh-padded to 4-byte boundary; Root=FDh-padded)
+  ...  ..    Child File(s)
+  ...  ..    Child Folder(s)
+ File Chunk format:
+  000h 1     Length of filename (including 4-byte padding)
+  001h 1     Filetype           (see below)
+  002h 2     Array Size         (or FFFFh for non-array filetypes)
+  004h 4     Filesize (SIZ)     (including 4-byte padding)
+  008h 4     Decompressed Size  (or 0=Uncompressed)
+  00Ch ..    Filename/Symbol    ("name.ext",00h, CDh-padded to 4-byte boundary)
+  ...  SIZ   Data/Value         (CDh-padded to 4-byte boundary)
+
+Some filenames have trailing non-ascii characters, for example:
+
  "AXEL.MR\display\resolution\r3\Groups\Combined_Polyset",1Ah,01h,04h,00h
+  "CALYPSO.MR\display\resolution\r3\Groups\Combined_Polyset",A8h,00h, CDh,CDh
+
+Filetypes:
+
  Typ Size  Expl.
+  02h var   Text String (terminated by 00h, garbage-or-00h-padded to 4-byte)
+  03h 8     Misc (*.IMG\textures\*)                          ;\
+  03h 20h   Misc (*.MR\display\resolution\r*\Groups\*)       ; these are all
+  03h var   Misc (*.MR\display\resolution\*List)             ; filetype=03h
+  03h file  Misc (*.MR\display\*.bit) (same as type=0Ch)     ;/
+  04h 4     Numeric 32bit
+  05h 8     Numeric 4x16bit point (X,Y,Z,CDCDh)
+  06h file  Model (*.mod) (DOTLESS archive with model data)
+  0Bh 4     Numeric 32bit repeat,light
+  0Ch file  XYWH Bitmap/Palette (*.bit, *.clt) (in GAME.IMG, MENU\menu)
+  0Dh 4     Numeric 32bit delay
+  0Eh 4     Numeric 32bit color (maybe 24bit RGB plus 00h-padding?)
+  0Fh 10h   Whatever 10h-byte "pos"
+  10h file  Sony .VAB file (*.vab)
+  12h N*1   Array? (with Arraysize=0014h)
+  16h N*??  Array Text Strings (with Arraysize=0001h) (in MAIN.MR\worlds)
+  1Ah N*10h Array Guns,startpoints (RCCAR.MR\*, NEON.MR\world)
+  1Bh 4     Numeric 2x16bit (X,Y) (in MENU.MR)
+  1Ch N*4   Array lloc (in MENU.MR\menu\screens) (with Arraysize=04h or 1Fh)
+  25h 8     Whatever 8-byte (in GAME.MR\dualShock)
+  26h N*8   Array CollideArray (in GAME.MR\dualShock) (with Arraysize=4 or 6)
+
+Compressed Data (when [008h]\<>0):
+
  000h ..    ZLIB compressed data (usually starting with big-endian 789Ch)
+  (compression is used for almost all files, except VERY small ones)
+
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)

+

CDROM File Archive HUG/IDX/BIZ (Power Spike)

+

Power Spike (MagDemo43: POWER\GAME.IDX and .HUG)

+

POWER\GAME.HUG
+

  000h ..    File Data
+
+POWER\GAME.IDX
+
  000h 4     ID "HUGE"
+  004h 4     Checksum (sum of all bytes at [010h and up])
+  008h 4     Number of Folders (D) (87h)
+  00Ch 4     Number of Files   (F) (F9h)
+  010h D*1Ch Folder List (Folder 0..D-1)
+  ...  F*18h File List   (File 0..F-1)
+
+Folder List entries:
+
  000h 0Ch   Folder Name ("DIRNAME", zeropadded)
+  00Ch 4     First Child File      (or FFFFFFFFh=None)
+  010h 4     Number of Child Files (or 00000000h=None)
+  014h 4     First Child Folder    (or FFFFFFFFh=None)
+  018h 4     Next Sibling Folder   (or FFFFFFFFh=None)
+
+File List entries:
+
  000h 0Ch   File Name ("FILENAME.EXT", zeropadded if shorter than 12)
+  00Ch 4     File Checksum (sum of all bytes in file added together)
+  010h 4     File Offset/800h in GAME.HUG
+  014h 4     File Size in bytes
+
+The root entries are Folder 0 (and its siblings). That is, the root can contain +only folders (not files).
+The IDX/HUG archive contains many BIZ archives (and some TXT files).

+

Power Spike (MagDemo43: POWER\GAME.IDX\*.BIZ) (BIZ nested in IDX/HUG)

+

  000h 4     ID "BIG!"
+  004h 4     Number of entries (N)
+  008h N*1Ch File List
+  ...  ..    BIZ compressed File Data
+
+File List entries
+
  000h 10h   Filename (zeropadded)
+  010h 4     File Offset (increasing, unaligned, can be odd)
+  014h 4     File Size decompressed
+  018h 4     File Size compressed
+
+All files in the BIZ archive are BIZ compressed (unknown if it does also +support uncompressed files).
+CDROM File Compression LZ5 and LZ5-variants
+The BIZ archive seems to be solely containing PSI bitmaps (even files in +GAME.IDX\SOUND\MUSIC\*.BIZ do merely contain PSI bitmaps, not audio files).

+

CDROM File Archive TOC/DAT/LAY

+

Used in PSX Lightspan Online Connection CD (CD.TOC, CD.DAT, CD.LAY).
+

  CD.TOC contains File/Folder entries
+  CD.DAT contains the actual File bodies
+  CD.LAY devkit leftover (list of filenames to be imported from PC to TOC/DAT)
+
+The .TOC file doesn't have any file header, it does just start with the first +File/Folder folder entry in root directory. The directory chains with +file/folder entries are sorted alphabetically, each chain is terminated by a +final entry which does point to parent directory.

+

File Entries

+
  00h 4   Offset to next Sibling File/Folder/Final entry
+  04h 4   Filesize in bytes
+  08h 4   Filedata Offset/800h in CD.DAT
+  0Ch ..  Filename (ASCII, terminated by 00h)
+  ... ..  Padding to 4-byte boundary (garbage)
+
+

Folder Entries (with Filesize=FFFFFFFFh)

+
  00h 4   Offset to next Sibling File/Folder/Final entry
+  04h 4   Filesize (always FFFFFFFFh in Folder entries)
+  08h 4   Offset to first File/Folder in Child directory
+  0Ch ..  Name of Child directory (ASCII, terminated by 00h)
+  ... ..  Padding to 4-byte boundary (garbage)
+
+

Final Entries (with Name="",00h and Filesize=FFFFFFFxh)

+
  00h 4   Offset to next Sibling entry (00000000h=None)
+  04h 4   Filesize (FFFFFFFFh in child folders, FFFFFFFEh in root folder)
+  08h 4   Offset to first File/Folder in Parent directory (or to self for root)
+  0Ch 1   Empty Name ("",00h)
+  0Dh 3   Padding to 4-byte boundary (garbage)
+
+

CDROM File Archive WAD (Doom)

+

Doom, PSXDOOM\ABIN\.WAD and PSXDOOM\MAPDIR*\.WAD)

+

The .WAD format is used by Doom (for DOS, Jaguar, PSX, etc), various homebrew +Doom hacks, and some other developers have adopted the format and used .WAD in +other game engines.
+

  000h 4     ID "IWAD" (or "PWAD" for homebrew patches, or "PACK" in A.D. Cop)
+  004h 4     Number of File List entries (N) (including final ENDOFWAD entry)
+  008h 4     Offset to Directory Area (filesize-N*10h)
+  00Ch ..    File Data area
+  ...  N*10h File List
+
+File List entries:
+
  000h 4   Offset to file data (increasing by compressed size, 4-byte aligned)
+  004h 4   Filesize in bytes   (uncompressed size) (zero in ENDOFWAD file)
+  008h 8   Filename (uppercase ASCII, zeropadded if less than 8 chars)
+

+

Folders

+

The directory can contain names like F_START, F_END, P1_START, P1_END with +filesize=0 to mark begin/end of something; that stuff can be considered as +subdirectories with 1- or 2-character names.
+Notes: There are also regular files with underscores which are unrelated to +folders (eg. F_SKY01). There are also 0-byte dummy files (eg. MAP17 in first +entry MAP17.WAD). And there's a 0-byte dummy file with name ENDOFWAD in last +file list entry (at least, it's present versions with compression support).

+

LZSS Decompression

+

Compression is indicated by Filename[0].bit7=1. The compressed size is +NextFileOffset-FileOffset (that requires increasing offsets in File List, +including valid offsets for 0-byte files like F_START, F_END, ENDOFWAD).
+

  @@collect_more:
+   flagbits=[src]+100h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   flagbits=flagbits SHR 1
+   if zero then goto @@collect_more
+   if carry=0 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     disp=([src]*10h)+([src+1]/10h)+1, len=([src+1] AND 0Fh)+1, src=src+2
+     if len=1 then goto @@decompress_done
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+
+The game engine may insist on some files to be compressed or uncompressed (so +compression may be required even if the uncompressed data would be smaller).

+

More info: http://doomwiki.org/wiki/WAD

+

CDROM File Archive WAD (Cardinal Syn/Fear Effect)

+

.WAD files (Cardinal Syn/Fear Effect)

+

This format exists in two version:
+

  Old format: Without leading Header Size entry (Cardinal Syn MagDemo03: SYN\*)
+  New format: With leading Header Size entry    (eg. Fear Effect)
+
+Version detection could be done somewhat as so:
+
  if [04h]*1Ch+8 >= [00h] then OLD version
+
+For loading the Old Header, one must guess the max header size (4000h should +work, in fact, most or all Old Headers seem to be max 800h), or load more data +on the fly as needed.
+
  000h (4) Header Size (including folder/type/file directories) (new version)
+  ...  4   Number of Folders
+  ...  ..  Folder List (root)
+  ...  ..  Type Lists  (for each folder)
+  ...  ..  File Lists  (for each folder\type)
+  ...  ..  File Data   (for each folder\type\file)
+ Folder List Entries:
+  000h 14h Folder name (ASCII, zeropadded)
+  014h 4   Offset to Type List
+  018h 4   Number of different Types in this folder
+ Type List Entries:
+  000h 4   Offset to file entries (of same type, eg. .TIM files)
+  004h 4   Number of file entries (of same type, eg. .TIM files)
+  008h 4   Sum of all Filesizes with that type
+  00Ch 4   Group Type (0000000xh)
+ File List entries (Files within Type list):
+  000h 14h Name (ASCII, terminated by 00h, plus garbage padding)
+  014h 4   Offset to File Data  (seems 4-byte aligned... always?)
+  018h 4   File Type (000x00xxh)
+  01Ch 4   Filesize in bytes  ;\maybe compressed/uncompressed, or rounded,
+  020h 4   Filesize in bytes  ;/always both same
+
+Note: The Type List for one folder can contain several entries with same Group +Type, eg. Fear Effect GSHELLE.WAD\CREDIT has 5 type list entries (with +2xGroup0, 2xGroup1, 1xGroup2).

+

The Type List, Group Type and File Type stuff seems to have no function, apart +from faster look up (the types are also implied in the filename extension). +Except, Fear Effect .RMD .VB .VH have some unknown stuff encoded in File Type +bit16-19.
+Group Type is usually 0 (except for .TIM .VB .VH .MSG .SPU .OFF).
+The .TIM .VB .VH .SEQ files are using standard Sony file formats. The .PMD file +seems to be also Sony standard (except that it contains a 00000000h prefix, +then followed by the 00000042h PMD format ID).

+

Cardinal Syn Types

+
  .BGD FileType=00000001h
+  .ANM FileType=00000003h
+  .TIM FileType=00000004h (GroupType=1)
+  .SP2 FileType=00000005h
+  .PMD FileType=00000007h
+  .MOV FileType=00000008h
+  .SPR FileType=0000000Ch
+  .PVT FileType=0000000Dh
+  .DB  FileType=0000000Eh
+  .VH  FileType=00000010h (GroupType=1) ;only in OLDER demo version MagDemo03
+  .VB  FileType=00000011h (GroupType=1)
+  .MSG FileType=00000012h (GroupType=1) (actually, this is .TIM, too)
+  .KMD FileType=00000013h
+  .OC  FileType=00000018h
+  .EMD FileType=00000019h
+  .COL FileType=0000001Bh
+  .CF  FileType=0000001Ch
+  .CFB FileType=0000001Dh
+  .CL  FileType=0000001Eh
+  .SPU FileType=0000001Fh (GroupType=1) ;added in newer demo version MagDemo09
+  .OFF FileType=00000020h (GroupType=1) ;added in newer demo version MagDemo09
+  .RCT FileType=00000021h               ;added in newer demo version MagDemo09
+
+

Fear Effect Types

+
  .TIM FileType=00000000h (GroupType=1)
+  .RMD FileType=000x0001h
+  .DB  FileType=00000002h
+  .ANM FileType=00000003h
+  .SYM FileType=00000004h
+  .VB  FileType=000x0008h (GroupType=1)
+  .SEQ FileType=00000010h
+  .BIN FileType=00000012h
+  .SFX FileType=00000013h
+  .VH  FileType=000x0014h (GroupType=2)
+  .TM  FileType=00000015h
+  .NRM FileType=00000017h
+  .WPD FileType=00000018h
+
+

CDROM File Archive DIR/DAT (One/Viewpoint)

+

DIR/DAT (One/Viewpoint)

+

  Used by One (DATAFILE.BIN and DIRFILE.BIN)
+  Used by Viewpoint (VIEW.DAT and VIEW.DIR)
+
+Format of the DIR file:
+
  000h 60h Extension List (20h x 3-char ASCII, zeropadded if shorter than 3)
+  060h ..  Root Directory    (can contain folders and files)
+  ...  ..  Child Directories (can contain files) (maybe also sub-folders?)
+
+Extension List contains several uppercase 3-character ASCII extensions, in a +hex editor this will appear as a continous string of gibberish (dots=00h):
+
  In Viewpoint: "...VCSVCFBINTXTVH.VB.STRST1ST2ST3......//..."
+  In One:       "...VCTVCKSNDBINCPEINI..................//..."
+
+Directory Entries contain bitstreams with ASCII characters squeezed into 6bit +values:
+
  000h 1   Length of Filename and Extension index
+             bit7-3  File Extension Index (0..1Fh = Offset I*3 in DIR file)
+             bit2-0  Filename Length-1    (0..7 = 1..8 chars)
+  001h ..  Filename in 6bit chars (N*6+7/8 bytes = 1..6 bytes for 1..8 chars)
+             bit7-2  1st character, whole 6bit            ;\1st byte
+             bit1-0  2nd character, upper 2bit (if any)   ;/
+             bit7-4  2nd character, lower 4bit (if any)   ;\2nd byte (if any)
+             bit3-0  3rd character, upper 4bit (if any)   ;/
+             bit7-6  3rd character, lower 2bit (if any)   ;\3rd byte (if any)
+             bit5-0  4th character, whole 6bit (if any)   ;/
+             bit7-2  5th character, whole 6bit (if any)   ;\4th byte (if any)
+             bit1-0  6th character, upper 2bit (if any)   ;/
+             bit7-4  6th character, lower 4bit (if any)   ;\5th byte (if any)
+             bit3-0  7th character, upper 4bit (if any)   ;/
+             bit7-6  7th character, lower 2bit (if any)   ;\6th byte (if any)
+             bit5-0  8th character, whole 6bit (if any)   ;/
+             bitN-0  Zeropadding in LSBs of last byte     ;-zeropadding
+           The 6bit characters codes are:
+             00h..09h="0..9", 0Ah..23h="a..z", 24h="_", 25h..3Fh=Unused
+  ...  4   Filesize and End Flag
+             bit31   End of Directory Flag   (0=Not last entry, 1=Last entry)
+             bit30-0 Filesize 31bit          (or 0=Child Folder)
+  ...  4   Offset and fixed bit
+             bit31   Unknown (always 1)
+             bit30-0 File Offset in DAT file (or Folder offset in DIR file)
+

+

CDROM File Archive Darkworks Chunks (Alone in the Dark)

+

Alone in the Dark The New Nightmare (FAT.BIN\*)

+

The files in FAT.BIN are using a messy chunk format: There's no clear ID+Size +structure. There are 7 different chunk types (DRAM, DSND, MIDB, G3DB, VRAM, +WEAP, HAND), each type requires different efforts to compute the chunk size.

+

VRAM Chunks (Texture/Palette) (in various files)

+

  000h 4     ID "VRAM"
+  004h 4     With Tags (0=No, 1=Yes) (or "DRAM" when empty 4-byte chunk)
+  008h (4)   Number of Tagged items (N) (0=None)  ;\only when [4]=1
+  00Ch N*10h Tagged Item(s)                       ;/(not so in LEVELS\*\VIEW*)
+  ...  ..    Scanline Rows(s)
+  ...  4     End code (00000000h) (aka final Scanline Row with width=0)
+ Tagged Item(s) (IMG, LINE, GLOW, FLARE, BALLE, BLINK, COURIER7, BMP_xxx):
+  000h 8     Tag (ASCII, if less than 8 chars: terminate by 00h, pad by FDh)
+  008h 8     Data
+ Scanline Row(s) (bitmap scanlines and palette data):
+  000h 4     Header (bit0-8=Width, bit10-18=Y, bit20-29=X, bit9,19,30,31=?)
+  004h W*2   Data (Width*2 bytes, to be stored at VRAM(X,Y))
+
+Empty VRAM chunks can be either 4 or 10h bytes tall. The 4-byte variant is +directly followed by another chunk name (eg. "VRAMDRAM"), the 10h-byte variant +contains four words ("VRAM",WithTags=1,NumTags=0,EndCode=0).
+Note: Some files contain two VRAM chunks (eg. LEVELS\*\VIEW*).

+

G3DB Chunks (Models) (in various files)

+
  000h 4   ID "G3DB"
+  004h 4   Unknown (0, 1, or 2)
+  008h 4   Size of Data part (SIZ)
+  00Ch 4   Number of List entries (eg. 6 or 0Ah or 117Ch) (N)
+  010h SIZ Data (supposedly LibGDX models in G3DB format)
+  ...  N*4 List
+
+

DRAM Chunks (Text and Binary data) (in various files)

+
  000h 4   ID "DRAM"
+  004h 4   Size of Data part (SIZ) (can be odd)
+  008h 4   Number of List entries (N)
+  00Ch SIZ Data (raw data, and/or tags TEXT, SPC, COURIER7)
+  ...  N*4 List
+
+

WEAP Chunks (Weapons) (in WEAPON\\)

+

  000h 4   ID "WEAP"
+  004h 4   Size-10h?
+  008h ..  Data
+
+Followed by VRAM and DSND chunks.

+

HAND Chunks (Hands) (in LEFTHAND\*\HAND*)

+

  000h 4   ID "HAND"
+  004h 4   Size-0Ch?  (18h)
+  008h 8   Zerofilled
+  010h 4x4 Unknown (FFh,FF00h,xF0000h,FF3232h,FF6464h,FFDCDCh,FFFFFFh,..)
+  020h 4   Unknown (0, 1, 101h, or 201h)
+
+Followed by VRAM and G3DB chunks.

+

MIDB Chunks (Music) (in MIDI\\)

+
  000h 4      ID "MIDB"
+  004h 1      Unknown (0 or 1)
+  005h 1      Number of SEQ blocks              (1..4) (S)
+  006h 1      Number of Unknown 80h-byte blocks (1..2) (U)
+  007h U*80h  Unknown Blocks (mostly FFh-filled)
+  ...  S*Var  SEQ Block(s)
+  ...  ..     VAB Block
+ SEQ Blocks:
+  Probably some MIDI sequence data, similar to Sony's .SEQ format.
+  000h 4      Size-0Ch (can be odd)
+  004h 8      Name (zeropadded if less than 8 chars)
+  00Ch 4      ID "DSEQ"    ;\Size
+  010h ..     Data         ;/
+ VAB Blocks:
+  Apparently inspired on Sony's .VAB format (but the ID is spelled other way
+  around, Lists have variable size, and entries have different format).
+  000h 4      ID "VABp"  (this is: not pBAV, unlike normal .VAB files)
+  004h 4      Unknown (0)
+  008h 4      Unknown (0)
+  00Ch 4      Size of all SPU-ADPCM samples (SIZ)
+  010h 2      Number of List 1 entries (N1)
+  012h 2      Number of List 2 entries (N2)
+  014h 2      Number of Samples        (N3)
+  016h 6      Unused? (CCh-filled)
+  01Ch N1*10h List 1
+  ...  N2*10h List 2
+  ...  N3*2   Sample Size List (size of each SPU-ADPCM sample)
+  ...  SIZ    SPU-APDCM Sample(s)
+
+

DSND Chunks (Sounds) (in various files)

+
  000h 4   ID "DSND"
+  004h 4   Unknown (0 or 2)
+  008h ..  VAB Block (same as in MIDB chunks, see there)
+
+

Note

+

DRAM and MIDB chunks can have odd size; there isn't any alignment padding, so +all following chunks can start at unaligned locations.

+

CDROM File Archive Blue Chunks (Blue's Clues)

+

Blue's Clues: Blue's Big Musical (*.TXD)

+

  000h 4    Size of AUDD+SEPD+VABB chunks ;\for quick look-up only
+  004h 4    Size of all VRAM chunks       ; (can be ignored by chunk crawlers)
+  008h 4    Size of STGE+ANIM+FRAM chunks ;/(note: sum is total filesize-0Ch)
+  ...  ..   AUDD Chunk    (contains .VH)                  ;\
+  ...  ..   SEPD Chunk(s) (contains .SEP)                 ; sound
+  ...  ..   VABB Chunk    (contains .VB)                  ;/
+  ...  (..) VRAM Chunk(s) (not in IN\FE2.TXD)             ;-textures/palettes
+  ...  (..) STGE Chunk    (if any, not in IN\FE*.TXD)     ;-stage data?
+  ...  (..) ANIM Chunk    (if any, not in IN\FE*.TXD)     ;\animation
+  ...  (..) FRAM Chunk(s) (if any, not in IN\FE*.TXD)     ;/
+  ...  (..) Further groups with ANIM+FRAM Chunks (if any) ;-more animation(s)
+ AUDD Chunks:
+  000h 4    Chunk ID ("AUDD")
+  004h 4    Chunk Size (of whole chunk from Chunk ID and up)
+  008h 4    Compression Flag (0=Uncompressed)
+  00Ch 4    Zero
+  010h ..   VH File (Sony Voice Header, starting with ID "pBAV")
+ SEPD Chunks:
+  000h 4    Chunk ID ("SEPD")
+  004h 4    Chunk Size (of whole chunk from Chunk ID and up)
+  008h 4    Compression Flag (0=Uncompressed)
+  00Ch 2    Zero
+  00Eh 2    Number of sequences (in the SEP sequence archive)
+  010h 4    Zero
+  014h ..   SEP File (Sony Sequence archive, starting with ID "pQES")
+  ...  ..   Zeropadding to 4-byte boundary
+ VABB Chunks:
+  000h 4    Chunk ID ("VABB")
+  004h 4    Chunk Size (of whole chunk from Chunk ID and up)
+  008h 4    Compression Flag (0=Uncompressed)
+  00Ch ..   VB File (Sony Voice Binary, with raw SPU-ADPCM samples)
+ VRAM Chunks:
+  000h 4    Chunk ID ("VRAM")
+  004h 4    Chunk Size (of whole chunk from Chunk ID and up)
+  008h 4    Compression Flag (1=Compressed)
+  00Ch 2    VRAM.X
+  00Eh 2    VRAM.Y
+  010h 2    Width in halfwords
+  012h 2    Height
+  014h 4    Decompressed Size (Width*Height*2)  ;\Texture Bitmaps 8bpp
+  018h ..   Compressed Data                     ; (or Palettes, in last VRAM
+  ...  ..   Zeropadding to 4-byte boundary      ;/chunk)
+ STGE Chunks:
+  000h 4    Chunk ID ("STGE")
+  004h 4    Chunk Size (of whole chunk from Chunk ID and up)
+  008h 4    Compression Flag (0=Uncompressed)
+  00Ch ..   Unknown (stage data?)
+ ANIM Chunks:
+  000h 4    Chunk ID ("ANIM")
+  004h 4    Chunk Size (of whole chunk from Chunk ID and up)
+  008h 4    Compression Flag (0=Uncompressed)
+  00Ch ..   Unknown (animation sequence info?)
+ FRAM Chunks:
+  000h 4    Chunk ID ("FRAM")
+  004h 4    Chunk Size (of whole chunk from Chunk ID and up)
+  008h 4    Compression Flag (0=When Chunksize=14h, 1=When Chunksize>14h)
+  00Ch 1    Width in bytes
+  00Dh 1    Height
+  00Eh 6    Unknown, looks like three signed 16bit values (maybe X,Y,Z)?
+  014h (4)  Decompressed Size (Width*Height*1)  ;\Animation Frame Bitmap 8bpp
+  018h (..) Compressed Data                     ; (only if Chunksize>14h)
+  ...  (..) Zeropadding to 4-byte boundary      ;/
+
+VRAM and FRAM chunks with [08h]=1 (and Chunksize>14h) are compressed:
+CDROM File Compression Blues

+

CDROM File Archive HED/CDF (Parasite Eve 2)

+

Crazy Data Format (CDF) is used by Parasite Eve 2, on Disc 1 and 2:
+1: PE_Disk.01 Stage0.hed Stage0.cdf Stage1.cdf Stage2.cdf Stage3.cdf Inter0.str
+2: PE_Disk.02 Stage0.hed Stage0.cdf Stage3.cdf Stage4.cdf Stage5.cdf Inter1.str

+

STAGE0.HED and STAGE0.CDF

+

This uses separate header/data files. The directory is stored in STAGE0.HED:
+

  0000h 78h   Streaming List (03h entries, 28h-bytes each, all entries used)
+  0078h 1B00h File List (360h entries, 8 bytes each, all entries used)
+  1B78b 8     File List End Code (FFFFFFFFh,FFFFFFFFh)
+
+The actual data for the files (and audio stream) is stored in STAGE0.CDF.

+

STAGE1.CDF .. STAGE5.CDF

+

  0000h 800h  Root: Folder List (100h entries, 8-byte each, unused=zeropadded)
+  0800h ..    1st Folder (File/Streaming List and Data)
+  ...   ..    2nd Folder (File/Streaming List and Data)
+  ...   ..    etc.
+
+Folder List entries:
+
  000h 4  Folder ID (usually N*100+1 decimal, increasing, eg. 101,201,301,etc.)
+  004h 4  Folder Size/800h (of whole folder, with File/Stream List and Data)
+  The Folder List ends with unused/zeropadded entries with ID/Size=00000000h.
+
+Folder format:
+
  0000h 510h  File List      (A2h entries, 8-bytes each, unused=zeropadded)
+  0510h 4     Zero           (padding to decimally-minded offset 1300 aka 514h)
+  0514h 2D0h  Streaming List (12h entries, 28h-bytes each, unused=zeropadded)
+  07E4h 1Ch   Zero           (padding to end of sector)
+  0800h ...   Data (for Files, Audio streams, and sometimes also Movie streams)
+

+

File List entries (in STAGE0 and STAGE1-5)

+

  000h 4  File ID (increasing, eg. 0,1,2,3,4,etc.) (or 99) (or N*100+x)
+  004h 4  File Offset/800h in in .CDF (from begin of current Folder)
+
+For STAGE0, file list ends with ID/Offset=FFFFFFFFh at end of HED file. For +STAGE1-5, file list ends with unused/zeropadded entries with +ID/Offset=00000000h.
+The filesize can be computed as "NextOffset-CurrOffset" (at 800h-byte +resolution). Whereas, "NextOffset" can be:
+
  The offset of next File in File List (same as CurrOffset for 0-byte files)
+  The offset of next Audio stream in Streaming List
+  The offset of next Movie stream in Streaming List (if it's in .CDF, not .STR)
+  The size of the current Folder (for STAGE1-5)
+  The size of the whole .CDF file (for STAGE0)
+
+For STAGE1-5, audio streams are usually stored at the end of folder (after the +files). However, for STAGE0, audio streams are oddly inserted between file21000 +and file30100.

+

File Chunks (for files within File List)

+

Most CDF files in STAGE0 and STAGE1-5 do contain one or more chunks with +10h-byte chunk headers (this can be considered as an additional filesystem +layer, with the chunk data being the actual files).
+

  000h 1  Chunk Type (see below)
+  001h 1  End Flag (01h=More Chunks follow, FFh=Last Chunk)
+  002h 2  Unknown (usually 800h, sometimes 500h or 600h)
+            (eg. 500h in stage0\file30301\chunkX)
+            (eg. 600h in stage1\folder1201\file0\chunkXYZ)
+  004h 4  Chunk Size/800h
+  008h 4  Unknown (usually zero) (or 80xxxx00h in Chunk Type 0 files?)
+  00Ch 4  Zero (0)
+  010h .. Data (Chunk Size-10h bytes)
+
+Chunk Types:
+
  00h=Room package            .pe2pkg
+  01h=Image                   .pe2img
+  02h=CLUT                    .pe2clut
+  04h=CAP2 Text               .pe2cap2
+  05h=Room backgrounds        .bs
+  06h=SPK/MPK music program   .spk  ;stereo/mono, sound/music, single/multiple?
+  07h=ASCII text              .txt     (eg. stage0\20101..20132)
+ ;Reportedy also (but wrong):
+ ;60h=Sounds                  .pe2snd  (but nope, that's wrong, see below)
+ ;60h is a MDEC movie from Streaming List (unrelated to File List chunks),
+ ;60h is 20h-byte .STR header each 800h-bytes (occurs in "stage1\folder501")
+
+There are some chunkless files:
+
  stage0\40105...40198 are raw hMPK files without chunks
+  stage0\11000, 20213, 20214, 20300, .., 660800 and 900000 are empty 0-byte
+

+

Streaming List Movie entries (stream type 1)

+

  000h 2    Stream Type (0001h=Movie)
+  002h 2    Unknown (8000h or 0000h)
+  004h 4    Offset/800h in current Folder of .CDF file ;<-- used when [024h]=0
+  008h 4    Offset/800h in INTERx.STR file             ;<-- used when [024h]>0
+  00Ch 2    Unknown (0000h)
+  00Eh 2    Stream ID (increasing, usually starting at 64h aka 100 decimal)
+  010h 2    Stream sub.ID (usually 0, increases +1 upon multiple same IDs)
+  012h 2    Picture Width  (0140h = 320 decimal)
+  014h 2    Picture Height (00F0h = 224 decimal)
+  016h 2    Unknown (0000h)
+  018h 2    Unknown (0000h or 0018h)   maybe 24bpp or 24fps
+  01Ah 2    Unknown (73Ah or 359h or 3DCh)  (Size? but it's slighty too large?)
+  01Ch 6    Unknown (zero)
+  022h 2    Unknown (0 or 1) (often 1 when [024h]>0, but not always)
+  024h 2    Movie number in INTERx.STR, 1 and up? (or 0=Movie is in STAGEx.CDF)
+  026h 2    Unknown (0 or 1)
+
+The size of movie streams in .CDF can be computed in similar fashion as for +File List entries (see there for details).
+The size of movie streams in .STR cannot be computed easily (the next stream +isn't neccassarily stored at the next higher offset; even if it's within same +folder). As workaround, one could create a huge list with all streams from all +Folders in all STAGEx.CDFs (or scan the MDEC .STR headers in .STR file; and +check when the increasing frame number wraps to next stream).
+The dual offsets are oddly computed as: [004h]=[008h]+EndOfLastFileInFolder +(that gives the correct value in the used entry, and a nonsensical value in the +other entry).

+

Streaming List Audio entries (stream type 2)

+

  000h 2    Stream Type (0002h=Audio)
+  002h 2    Unknown (806Ah or increasing 0133h,0134h,0135h)
+  004h 4    Offset/800h in STAGEx.CDF file (increasing offsets)
+  008h 4    Unknown (0 or 13000h or E000h)
+  00Ch 2    Stage Number (0..5 = STAGE0-5)
+  00Eh 2    Stream ID (1, or increasing 3Ah,3Bh,3Ch)
+  010h 4    Stream sub.ID (usually 0Bh, increases +0Ah upon multiple same IDs)
+  014h 2    Unknown (0 or 2B0h or 3ADh or 398h) (Size/800h minus something?)
+  016h 2    Unknown (usually 20h, sometimes 0Fh)
+  018h 4    Unknown (2 or 1)              ... maybe num channels ?
+  01Ch 2+2  Unknown (0,0 or 800h,800h)
+  020h 8    Unknown (0)
+
+The size of audio streams can be computed in similar fashion as for File List +entries (see there for details).

+

Audio Stream Data (stored alongsides with file data in STAGEx.CDF file)

+

This contains a 800h-byte header a list of 32bit indices:
+

  000h 800h Whatever increasing 32bit index/timing values? FFFFFFFFh=special?
+  ;That header exists in stage0\ and stage3\folder101\
+  ;That header doesn't exist in all files (eg. not in stage1\folder301\)
+
+then followed by several chunk-like STM blocks with 10h-byte headers:
+
  000h 4  Chunk Index (increases each second chunk, from 0 and up)
+  004h 4  Number of Chunk Indices
+  008h 4  Fixed (02h,"STM")                                  ;2-channel Stream?
+  00Ch 1  Chunk Subindex (toggles 00h or 01h per each chunk) ;ch left/right?
+  00Dh 1  Chunk Size/800h
+  00Eh 4  Unknown (can be 00h, 01h, 11h, 20h, 21h)
+  00Fh 4  Unknown (can be A0h or C0h)
+  010h .. Data (Chunk Size-10h bytes) (looks like SPU-ADPCM audio)
+
+After the last STM chunk, there is more unknown stuff:
+
  000h 0   Number of ADPCM blocks?            (eg. 28h    or 49h)
+  004h 4   Size of extra data block in bytes  (eg. 13900h or 24200h)
+  008h 38h Zerofilled
+  040h 8   Zerofilled (maybe 1st sample of 1st SPU-ADPCM block)
+  048h ..  Looks like more SPU-ADPCM block(s), terminated by ADPCM end flag(s)
+  ...  ..  Zerofilled (padding to end of last 800h-byte sector)
+

+

Movie Stream Data (stored in .CDF, or in separate INTERx.STR file)

+

The movies are usually stored in INTERx.STR (except, some have them stored in +STAGEx.CDF, eg. stage1\folder501, stage1\folder801, stage2\folder2101, +stage2\folder3001).
+The data consists of standard .STR files (with 20h-byte headers on each +800h-byte sector), with the MDEC data being in huffman .BS format (with .BS +header... per frame?).
+And, supposedly interleaved with XA-ADPCM audio sectors...?

+

PE_DISK.01 and PE_DISK.02

+

The presence of these files is probably used to detect which disc is inserted. +The file content is unknown (looks like 800h-byte random values).

+

Note

+

Reportedly "Files inside archive may be compressed with custom LZSS +compression" (unknown if/when/where/really/which files).

+

CDROM File Archive IND/WAD (MTV Music Generator)

+

MTV Music Generator (IND/WAD) (MagDemo30: JESTER\WADS\ECTS.IND and .WAD)

+

ECTS.IND contains FOLDER info:
+

  0000h 20h   Name/ID ("Music 2", zeropadded)
+  0020h 4     Unknown (110000h)
+  0024h 4     Filesize-1000h (size excluding last 1000h-byte padding)
+  0028h 4     Unknown (17E0h)
+  002Ch 4     Unknown (5)
+  0030h N*10h Folder List, starting with Root in first 10h-byte
+  2CF0h 4     Small Padding (34h-filled)
+  2CF4h 1000h Final Padding (34h-filled)
+ Folder List entries that refer to Child Folders in ECTS.IND:
+  000h 8     Folder Name ("EXTRA*~*", zeropadded if less than 8) ("" for root)
+  008h 2     Self-relative Index to first Child folder (positive)
+  00Ah 2     Number of Child Folders (0..7FFFh)
+  00Ch 4     Always 0007FFFFh (19bit Offset=7FFFFh, plus 13bit Size=0000h)
+ Folder List entries that refer to File Folders in ECTS.WAD:
+  000h 8     Folder Name ("EXTRA*~*", zeropadded if less than 8)
+  008h 2     Self-relative Index to Parent folder (negative)
+  00Ah 2     Number of Child Folders (always 8000h=None)
+  00Ch 4     Offset and Size in ECTS.WAD
+ The 32bit "Offset and Size" entry consists of:
+  0-18   19bit Offset/800h in ECTS.WAD
+  19-31  13bit Size/800h-1 in ECTS.WAD
+
+ECTS.WAD contains FILE info and actual FILE data:
+
 There are several File Folders (at the locations specified in ECTS.IND).
+ The separate File Folders look as so:
+  000h 4     Number of files (N)
+  004h N*10h File List
+  ...  ..    34h-Padding to 800h-byte boundary
+  ...  ..    File Data area
+ File List entries:
+  000h 8     File Name ("NAMELIST", "ACIDWO~1", etc.) (00h-padded if shorter)
+  008h 4     Offset/800h (always from begin of WAD, not from begin of Folder)
+  00Ch 4     Filesize in bytes
+ The first file in each folder is called "NAMELIST" and contains this:
+  000h 20h   Long Name for Parent Folder (eg. "Backgrounds", zeropadded)
+  020h 20h   Long Name for this Folder   (eg. "Extra 1", zeropadded)
+  040h N*20h Long Names for all files in folder (except for NAMELIST itself)
+ For example, Long name for "ACIDWO~1" would be "Acidworld". Short names are
+ uppercase, max 8 chars, without spaces (with "~N" suffix if the long name
+ contains spaces or more than 8 chars). Many folder names are truncated to
+ one char (eg. "D" for Long name "DTex"), in such cases short names CAN be
+ lowercase (eg. "z" for  Long name "zTrans").
+ The Long Names are scattered around in the NAMELIST files in ECTS.WAD file,
+ so they aren't suitable for lookup (unless when loading all NAMELIST's).
+

+

CDROM File Archive GAME.RSC (Colonly Wars Red Sun)

+

Colony Wars Red Sun (MagDemo31: CWREDSUN\GAME.RSC, 13Mbyte)

+

  0000h 4     Offset to Bonkers List (2794h)
+  0004h F*8   Folder List                      (80h bytes, 10h entries)
+  0084h N*14h File List(s) for each folder     (2710h bytes, 1F4h entries)
+  2794h 4     Number of Bonkers     (FE3h)
+  2798h B*8   Bonkers List                     (7F18h bytes, FE3h entries)
+  A6B0h 8     Unknown (zerofilled)
+  A6B8h ..    File Data area
+
+Folder List entries:
+
  000h 4     Offset to File List for this folder   ;\both zero when empty
+  004h 4     Number of Files in this folder        ;/
+
+File List entries:
+
  000h 10h   Filename ("FILENAME_EXT", zeropadded)
+  010h 3     Index (in Bonkers list) (000h..Fxxh)
+  013h 1     Folder Number where the file is stored (00h..0Fh)
+
+Bonkers List entries:
+
  000h 4     File Offset (to Data, inreasing, 4-byte aligned, A6B8h and up)
+  004h 4     Folder Number where the file is stored (00h..0Fh)
+
+Offsets/Indices in Folder/File list are unsorted (not increasing).
+Offsets in Bonkers List are increasing (so filesizes can be computed as +size=next-curr, except, the LAST file must be computed as size=total-curr).
+There is no "number of folders entry" nor "folder list end marker", as +workaround, while crawling the folder list, search the smallest file list +offset, and treat that as folder list end offset.
+In the demo version, all File List entries for Folder 5 are pointing to files +with filesize=0, however, the Bonkers List has a lot more "hidden" entries that +are marked to belong to Folder 5 with nonzero filesize.
+Note: Older Colony Wars titles did also have a GAME.RSC file (but in different +format, without folder structure).

+

CDROM File Archive BIGFILE.DAT (Soul Reaver)

+

Legacy of Kain: Soul Reaver - BIGFILE.DAT

+

Legacy of Kain: Soul Reaver (MagDemo26: KAIN2\BIGFILE.DAT)

+

  000h 2     Number of Folders (175h in retail, 0Ah in demo)
+  002h 2     Zero
+  004h N*8   Folder List (8-byte per Folder)
+  ...  ..    Zeropadding (to 800h-byte boundary)
+  ...  ..    1st Folder (with File List, and File Data for that folder)
+  ...  ..    2nd Folder (with File List, and File Data for that folder)
+  ...  ..    3rd Folder (with File List, and File Data for that folder)
+  ...  ..    etc.
+
+Folder List entries:
+
  000h 2     Unknown (somehow randomly increases from -8000h to +7E8Fh)
+  002h 2     Number of Files in this Folder (eg. 97h)
+  004h 4     Offset to Folder (usually 800h-aligned)
+
+Folder format:
+
  000h 2     Number of Files (same value as FolderistEntry[002h]) ;\encrypted
+  002h 2     Zero                                                 ; by 16bit
+  004h N*10h File List (10h-byte per Folder)                      ; XOR value
+  ...  ..    Zeropadding (to 800h-byte boundary)                  ;/
+  ...  ..    File Data for this folder                            ;-unencrypted
+
+File List entries:
+
  000h 4     Unknown (random? filename hash? encrypted name?)
+  004h 4     File Size in bytes
+  008h 4     File Offset (usually 800h-aligned)
+  00Ch 4     Unknown (random? filename hash? encrypted name?)
+
+Encryption:
+The file header, the first some Folder headers (those in first quarter or so), +and (all?) File Data is unencrypted (aka XORed with 0000h).
+The Folder headers at higher offsets are encrypted with a 16bit XOR value. That +XOR value is derived from Subchannel Q via LibCrypt:
+CDROM Protection - LibCrypt
+When not having the Subchannel data (or when not knowing which Folders are +encrypted or unencrypted), one can simply obtain the encryption key from one of +these entries (which will be key=0000h when unencrypted):
+
  key = FileListEntry[000h] XOR FolderListEntry[002h]  ;encrypted num entries
+  key = FileListEntry[002h]                            ;encrypted Zero
+  key = FileListEntry[zeropadding, if any]             ;encrypted Zeropadding
+
+LibCrypt seems to be used only in PAL games, unknown if the Soul Reaver NTSC +version does also have some kind of encryption.

+

CDROM File Archive FF8 IMG (Final Fantasy VIII)

+

FF8 is quite a mess without clear directory structure. Apart from SYSTEM.CNF +and boot EXE, there is only one huge IMG file. There are at least two central +directories: The Root directory (usually at the start of the IMG file), and the +Fields directory (hidden in a compressed file that can be found in the Root +directory). Moreover, there are files that exist in neither of the directories +(most notably the Movies at the end of the IMG file).

+

IMG File

+

The IMG file doesn't have a unique file header, it can be best detected by +checking the filename: FF8DISCn.IMG with n=1-4 for Disc 1-4 (or only +FF8DISC1.IMG or FF8.EXE+FF8TRY.IMG for demo versions).
+The directories contain ISO sector numbers (originated from begin of the ISO +area at sector 00:02:00). Accordingly, it's best to extract data from the whole +disc image (in CUE/BIN format or the like). When having only the raw IMG file, +one most know/guess the starting sector number (eg. assume that the first Root +File is located on the sector after the Root Directory, and convert sector +numbers ISO-to-IMG accordingly).
+Another oddity is that many files contain RAM addresses (80000000h-801FFFFFh), +unknown how far that's relevant, and if there are cases where one would need to +convert RAM addresses to IMG offsets.

+

Root Directory

+

The Root Directory is found at:
+

  Offset 0000h in FF8DISCn.IMG in NTSC retail versions
+  Offset 2800h in FF8DISCn.IMG in PAL retail versions
+  Offset 0000h in FF8DISC1.IMG in french demo version
+  Offset ?????h in FF8.EXE in MagDemo23 (...maybe offset 3357Ch ?)
+  Offset 33510h in FF8.EXE in japanese demo version ?
+  Offset 33584h in FF8.EXE in other demo versions   ?
+
+For detection:
+
  if FF8DISCn.IMG starts with 000003xxh --> assume Root at IMG offset 0
+  if FF8DISCn.IMG starts with xxxxxxxxh --> assume Root at IMG offset 2800h
+  if FF8TRY.IMG starts with "SmCdReadCore" --> assume Root somewhere in EXE
+
+File List:
+
  000h N*8  File List entries
+  ...  ..   Zeropadding to end of 800h-byte sector
+
+File List entries:
+
  000h 4    ISO Sector Number (origin at 00:02:00) (unsorted, not increasing)
+  004h 4    Filesize in bytes
+
+The file list does usually end with zeropadding (unknown if that applies to all +versions; namely the Demo version might end with gibberish instead of having +800h-byte sector padding).

+

Fields Directory

+

The Fields Directory is located in Root file 0002h. First of, decompress that +file, then search the following byte sequences to find the start/end of the +directory:
+

  retail.start  040005241800bf8f1400b18f1000b08f2000bd270800e00300000000
+  retail.end    0000010002000300
+  demo.start    76DF326F34A8D0B863C8C0EC4BE817F8
+  demo.end      0000000000000000000000000000000000100010
+
+The bytes between those start/end pattern contain the Directory, with entries +in same format as Root directory:
+
  000h 4    ISO Sector Number (origin at 00:02:00)
+  004h 4    Filesize in bytes
+
+Notes: Root file 0002h is about 190Kbyte (decompressed), of which, the Fields +Directory takes up about 8Kbytes, the remaining data contains other stuff.
+The sector numbers in the Fields Directory refer to other locations in the IMG +file (not to data in Root File 0002h).

+

Movie List

+

There is no known central directory for the movies (unknown if such a thing +exists, or if the movie sector numbers are scattered around, stored in separate +files). However, a movie list can be generated by crawling the movie headers, +starting at end of IMG file:
+

  sector = NumSectors(IMG file)
+ @@lop:
+  seek(sector-1), read(buf,08h bytes)
+  if first4byte[buf+0]=("SMJ",01h), or ("SMN",01h) then
+    num_sectors=(byte[buf+5]+1)*(halfword[buf+6]+1)
+    sector=sector-num_sectors
+    AddToMovieFileList(sector, num_sectors)
+    goto @@lop
+  endif
+
+That should cover all movies, which are all at the end of the IMG file (except, +there's one more movie-like file elsewhere in the middle of IMG file, that file +has only SMN/SMR audio sectors, without any SMJ video sectors).

+

PADBUG archives

+

PADBUG archives are used in Root files 001Eh..007Fh, most of them contain two +AKAO files (except file 004Bh contains one AKAO and one TXT file).
+

  000h 4     Number of Files (N) (usually 2)
+  004h N*8   File List
+  ...  ..    File Data area
+
+File List entries:
+
  000h 4     Offset in bytes (increasing, 4-byte aligned, see Quirk)
+  004h 4     File Size in bytes (can be odd)
+
+Quirk: All files are zeropadded with 1-4 bytes to 4-byte boundary (ie. files +that do end on a 4-byte boundary will be nethertheless padded with 4 zeroes).
+Note: The PADBUG archives resemble LNK archives in O.D.T. (though those LNK +archives have a different unique 4-byte padding quirk).

+

Compression

+

CDROM File Compression LZ5 and LZ5-variants
+FF8 does reportedly also use GZIP (unknown in which files).

+

Known/unknown sectors for US version FF8DISC1.IMG

+
  root sectors:       27CBh ;\
+  field sectors:      D466h ; total known sectors: 36D13h
+  movie sectors:     270E2h ;/
+  unknown sectors:   14F49h
+  total IMG sectors: 4BC5Ch
+
+

See also

+

https://github.com/myst6re/deling/blob/master/FF8DiscArchive.cpp

+

https://ff7-mods.github.io/ff7-flat-wiki/FF8/PlaystationMedia.html

+

CDROM File Archive FF9 IMG (Final Fantasy IX)

+

Final Fantasy IX (FF9.IMG, 320Mbyte) Overall format

+
  000h Root Directory
+  800h 1st Child Folder
+  ...  2nd Child Folder
+  ...  3rd Child Folder
+  ...  ...
+  8000h ?     Last folder, with Type3, contains 1FFh x increasing 16bit numbers
+  ...  Data for files in 1st Child Folder
+  ...  Data for files in 2nd Child Folder
+  ...  Data for files in 3rd Child Folder
+  ...
+
+

IMG Root Directory

+

  000h 4     ID "FF9 "
+  004h 4     Unknown (06h on Disc 1 of 4) (maybe version, or disc id?)
+  008h 4     Number of Folder List entries (0Fh)
+  00Ch 4     Unknown (01h on Disc 1 of 4) (maybe version, or disc id?)
+                 (or Offset/800h to first file list?)
+  010h N*10h Folder List
+  ...  ..    Padding to 800h-byte boundary ("FF9 FF9 FF9 FF9 ")
+
+Folder List entries:
+
  000h 4     FolderType (2=Normal, 3=Special, 4=Last entry)
+  004h 4     Number of entries in File List (0..1FFh ?)
+  008h 4     Offset/800h to Child Folder with File List
+  00Ch 4     Offset/800h to File Data (same as 1st offs in File List) (0=Last)
+

+

IMG Child Folders (FolderType=2)

+

  000h N*8   File List entries (N=Number of files, from Root directory)
+  N*8  8     File List END entry (ID=FFFFh, Attr=FFFFh, Offs=EndOfLastFile)
+  ...  ..    Zeropadding to 800h-byte boundary
+
+File List entries:
+
  000h 2     File ID (increasing, often decimal 0,10,100, or FFFFh=Last)
+  002h 2     Attr (unknown purpose, eg. 0,2,3,4,8,21h,28h,2Fh,44h,114h,FFFFh)
+  004h 4     Offset/800h to File Data (increasing, implies end of prev entry)
+

+

IMG Child Folders (FolderType=3)

+

  000h N*2   File Offsets/800h, from File Data Offset in Root (or FFFFh=None)
+  N*2  2     End Offset for last file
+
+The filesize can be computed as (NextOffs-CurrOffs)*800h, however, one must +skip unused entries (FFFFh) to find NextOffs.

+

Nested Child Archives

+

Most of the files in FF9.IMG are DB archives, there are also some DOT1 +archives.
+CDROM File Archive FF9 DB (Final Fantasy IX)
+There are various combinations of IMG, DB, DOT1 archives nested up to 4 levels +deep:
+

  IMG\DOT1         (eg. dir01\file003C)
+  IMG\DB           (eg. dir01\file2712)
+  IMG\DB\DOT1      (eg. dir01\file2712\00-0411)
+  IMG\DB\DOT1\DOT1 (eg. dir01\file2712\00-0443\*)
+  IMG\DB\DB        (eg. dir03\file2328\1B-000*)
+

+

Folders in Root directory

+
  dir00 - Status/Menu/Battle/... -Text and random stuff.
+  dir01 - Misc Images (Logos, Fonts, World 'mini' Map images, etc).
+  dir02 - Dialog Text
+  dir03 - Map models (Mini-zidane, airships, save point moogle, tent...)
+  dir04 - Field models
+  dir05 - Monster Data (Part I, stats, names, etc).
+  dir06 - Location Data (Dungeon, Cities, etc).
+  dir07 - Monster Data (Part II, 3d models)
+  dir08 - Weapon Data (including models)
+  dir09 - Samplebanks and Sequencer Data (ie music).
+  dir0A - party members Data (including models)
+  dir0B - Sound effects
+  dir0C - World Map Data
+  dir0D - Special effects (magic, summons...)
+
+

See also

+

https://ninjatoes.blogspot.com/2020/07/

+

https://wiki.ffrtt.ru/index.php?title=Main_Page

+

CDROM File Archive GTFS (Gran Turismo 2)

+

Gran Turismo 2 (MagDemo27: GT2\GT2.VOL, GT2.VOL\arcade\arc_carlogo) - GTFS

+

  000h 4     ID "GTFS"                                             ;\
+  004h 4     Zero                                                  ;
+  008h 2     Number of 4-byte File Offset List entries (N)         ; File(0)
+  00Ah 2     Number of 20h-byte File/Folder Name List entries (F)  ;
+  00Ch 4     Zero                                                  ;
+  010h N*4   File Offset List (see below)                          ;/
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  F*20h File/Folder Name List (see below)                     ;-File(1)
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    File Data                                             ;-File(2)
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...        File Data                                             ;-File(3)
+  ...  ..    ...
+  ...        File Data                                             ;-File(N-2)
+  ...  ..    Zeropadding to 800h-byte boundary
+  EOF  0     End of File                                           ;-File(N-1)
+
+That is, for N files, numbered File(0)..File(N-1):
+
  File(0) and File(1) = Directory information
+  File(2)..File(N-2)  = Regular data files
+  File(N-1)           = Offset List entry points to the end of .VOL file
+
+File Offset List entries, in File(0):
+Contains information for all files, including File(0) and File(1), and +including an entry for File(N-1), which contains the end offset for the last +actual file, ie. for File(N-2).
+
  Bit0-10  = Number of padding bytes in last sector of this file (0..7FFh)
+  Bit11-31 = Offset/800h to first sector of this file (increasing)
+  To compute the filesize: Size=(Entry[N+1] AND FFFFF800h)-Entry[N]
+
+File/Folder Name List entries, in File(1):
+Contains information for all files, excpet File(0), File(1), File(N-1), plus +extra entries for Folders, plus ".." entries for links to Parent folders.
+
  000h 4     Unknown (379xxxxxh) (maybe timestamp?)
+  004h 2     When Flags.bit0=0: Index of File in File Offset List (2 and up)
+             When Flags.bit0=1: Index of first child in Name List, or...
+             When Flags.bit0=1: Index of 1st? parent in Name List (Name="..")
+  006h 1     Flags (bit0:0=File, 1=Directory; bit7:1=Last Child entry)
+  007h 19h   Name (ASCII, zeropadded)
+
+The game does use several archive formats: GTFS (including nested GTFS inside +of main GTFS) and WAD.WAD and DOT1.
+The game does use some GT-ZIP compressed files, and many GZIP compressed files +(albeit with corrupted/zeropadded GZIP footers; due to DOT1 filesize 4-byte +padding and (unneccessarily) GTFS 800h-byte padding).
+CDROM File Compression GT-ZIP (Gran Turismo 1 and 2)
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)
+To extract the decompressed size from the corrupted GZIP footers, one could +compute the compressed "size" (excluding the GZIP header, footer, and padding), +and search for a footer entry that is bigger than "size".
+
  size=gz_filesize
+  size=size-GzipHeader(including ExtraHeader, Filename, Comment, HeaderCrc)
+  size=size-GzipFooter(8)   ;initially assuming 8-byte footer (without padding)
+  i=gz_filesize-4
+ @@search_footer:
+  if buf[i]<size then i=i-1, size=size-1 goto @@search_footer
+  decompressed_size = buf[i]
+
+Note: Above doesn't recurse the worst-case compression ratio, where compressed +files could be slightly bigger than decompressed files.

+

CDROM File Archive Nightmare Project: Yakata

+

Nightmare Project: Yakata

+

ISO Files:
+

  CD.IMG      550Mbyte  Contains file 004h..FFFh
+  CDRTBL.DAT  32Kbyte   Alias for file 000h (File List for file 000h..FFFh)
+  FDTBL.DAT   2Kbyte    Alias for file 001h (Folder List and Disc ID)
+  SLPS_010.4* 500Kbyte  Alias for file 003h (Boot EXE)
+  SYSTEM.CNF  72bytes   Alias for file 002h (Boot Info)
+  XXXXXXXX.   27Mbyte   Padding (zerofilled)
+
+FDTBL.DAT (Folder List):
+
 FDLTBL.DAT seems to be used to divide the file list in CDRTBL.DAT into
+ separate folders. The Folder List entries are containing the first file number
+ for each folder. Empty folders have same file number as next entry.
+ The last folder contains the specified file number plus all remaining files.
+  000h 56h*2 Folder List (16bit File Numbers, increasing from 0004h to 0xxxh)
+  0ACh 748h  Zerofilled
+  7F4h 0Ah   Game ID (ASCII "SLPS1045",00h,00h; always so on Disc 1..3)
+  7FEh 2     Disc ID (1..3 = Disc 1..3)
+
+CDRTBL.DAT (File List):
+
  000h 8000h File List (1000h x 8-byte entries)
+ File List entries:
+  000h 4   Sector (MM:SS:FF:00 in BCD, increasing)  ;\all zero for
+  004h 2   Size1  (NumFramesCh1 or NumSectors)      ; unused entries
+  006h 2   Size0  (NumFramesCh0 or Zero)            ;/
+ The meaning of the Size entries depends on the file type:
+  Normal binaries:  [004h]=NumSectors     [006h]=0             (1 channel)
+  XA-ADPCM streams: [004h]=NumSectors-50h [006h]=0             (16 channels)
+  MDEC streams:     [004h]=NumFrames      [006h]=0             (audio+video)
+  Special streams:  [004h]=NumFramesCh1   [006h]=NumFramesCh0  (2 channels)
+ To determine the actual filesize, one must compute the difference between
+  sectors for current and next used file entry (or end of CD.IMG for last file;
+  or alternately assume last file to be a Normal Binary with Size=NumSectors).
+ Normal Binaries:
+  Contains single files (file=0/channel=0). Filetypes include TIM, VB, VH,
+  other/custom file formats, and DOT1 archives.
+  The DOT1 archives have 4-byte aligned offsets, but, unconventionally, with
+  some offsets set to ZERO (usually the last entry, and sometimes also other
+  entries):
+  SEQ files (Disc1:Dir08h\File173h)       ;with ZERO entries    (=uncommon)
+  SEQ files (Disc1:Dir09h\File176h..3D7h) ;with ZERO entries    (=uncommon)
+  SEQ files (Disc1:Dir0Ah\File3DAh..3E6h) ;with ZERO entries    (=uncommon)
+  TIM files (Disc1:Dir4Fh\File962h..983h) ;with ZERO entries    (=uncommon)
+  TIM files (Disc1:Dir0Ch\File414h..426h) ;without ZERO entries (=normal DOT1)
+ XA-ADPCM Streams (Disc1:Dir0Bh\File3E7h..413h):
+  These contain 16 audio streams (file=1/channel=00h-0Fh). The Size entry is
+  set to total size in sectors for all streams, minus 50h (ie. there appears
+  to be 50h sectors appended as padding before next file).
+ MDEC Streams (Disc1:Dir53h\FileBD1h..BEBh):
+  These are standard STR files with MDEC video (file=0/channel=1) and
+  XA-ADPCM (file=1/channel=1). There are 10 sectors per frame (8-9 video
+  sectors plus 1-2 audio sectors). The total filesize is NumFrames*10+Align(8)
+  sectors; the Align(8) might be there to include one final audio sector.
+ Special Streams (Disc1:Dir07h\File0E9h-16Eh and Dir50h\File985h..B58h):
+  These are custom STR files (non-MDEC format), perhaps containing Polygon
+  streams or whatever.
+  There are two channels (file=1/channel=00h-01h), each channel contains
+  data that consists of 5 sectors per frame (1xHeader plus 4xData).
+  The sectors have STR ID=0160h, and STR Type as follows:
+    0000h=Whatever special, channel 0 header (sector 0)
+    0400h=Whatever special, channel 1 header (sector 1)
+    0001h=Whatever special, channel 0 data   (sector 2,4,6,8)
+    0401h=Whatever special, channel 1 data   (sector 3,5,7,9)
+  The File List size entries contain Number of Frames for each channel (either
+  of these entries may be zero, or bigger/smaller/same than the other entry).
+  The smaller channel is padded to same size as bigger channel (ie. total
+  filesize is "max(NumFramesCh0,NumFramesCh1)*10 sectors"; though that formula
+  doesn't always hold true, for example, Disc1:Dir50h\FileA2Dh and FileB1Bh
+  are bigger or smaller than expected).
+

+

CDROM File Archive FAdj0500 (Klonoa)

+

Klonoa (MagDemo08: KLONOA\FILE.IDX+FILE.BIN)

+

 FILE.IDX
+  000h 8     ID "FAdj0500"
+  008h 38h   RAM addresses       (80xxxxxxh, 0Ch words)
+  038h 4     Zero
+  03Ch 4     RAM address         (80xxxxxxh)
+  040h N*10h File List (including Folder start/end markers)
+ FILE.BIN
+  000h ..    File Data area (split into filesizes from FILE.IDX)
+
+File List entries:
+
 Type 0 (Folder End):
+  000h 4     Type (0=Folder End)
+  000h 4     Zero
+  008h 4     RAM address         (always 801EAF8Ch)
+  00Ch 4     Zero
+ Type 1.a (Folder Start):
+  000h 4     Type (1=Folder Start)
+  000h 4     Folder Offset/800h  (offset of FIRST file in this Folder)
+  008h 4     RAM address         (always 801EAF8Ch)
+  00Ch 4     Folder Size/800h    (size of ALL files in this Folder)
+ Type 1.b (Force Offset, can occur between Files within a Folder):
+  000h 4     Type (1=Same as Folder Start)
+  000h 4     Folder Offset/800h  (offset of NEXT file in this Folder)
+  008h 4     RAM address         (always 801EAF8Ch)
+  00Ch 4     Folder Size/800h    (zero for Force Offset)
+ Type 2 (File entries, within Folder Start/End):
+  000h 4     Type (2=File)
+  004h 4     Filesize in bytes   (4-byte aligned?)
+  008h 4     RAM address 1       (80xxxxxxh, or zero)
+  00Ch 4     RAM address 2       (80xxxxxxh)
+
+File Offsets are usually 4-byte aligned (at offset+filesize from previous +entry). Except, the first file after Folder Start (and Force Offset) is +800h-byte aligned.
+The archive contains DOT1 archives, OA05 archives, Ulz compression, and TIM, +TMD, VAB, SEQ, VB files.

+

CDROM File Archives in Hidden Sectors

+

Hidden Sector Overview

+

Xenogears, Chrono Cross, and Threads of Fate contain only two files in the ISO +filesystem (SYSTEM.CNF and the boot executable). The CDROMs contain standard +ISO data in Sector 10h-16h, followed by Hidden stuff in Sector 17h and up:
+

  Sector 10h (00:02:16)  Volume Descriptor (CD001)      ;\
+  Sector 11h (00:02:17)  Volume Terminator (CD001)      ;
+  Sector 12h (00:02:18)  Path Table 1                   ;
+  Sector 13h (00:02:19)  Path Table 2                   ; standard ISO
+  Sector 14h (00:02:20)  Path Table 3                   ;
+  Sector 15h (00:02:21)  Path Table 4                   ;
+  Sector 16h (00:02:22)  Root Directory                 ;/
+  Sector 17h (00:02:23)  Hidden ID                      ;\
+  Sector 18h (00:02:24)  Hidden Directory               ; hidden directory
+  Sector ..  (00:02:xx)  Hidden Unknown                 ;/
+  Sector ..  (00:02:xx)  Hidden Files... (referenced via Hidden Directory)
+
+Note: Like normal files, all hidden entries have their last sector flagged as +SM=89h (that applies to all three Hidden ID, Directory, Unknown entries, and to +all Hidden Files). For details, see:
+CDROM XA Subheader, File, Channel, Interleave

+

Xenogears (2 discs, 1998)

+

 Sector 17h (Hidden.ID)
+  000h 0Eh  ID ("DS01_XENOGEARS"=Disc 1, or "DS02_XENOGEARS"=Disc 2)
+  00Eh 7F2h Zerofilled
+ Sector 18h..27h
+  000h N*7  File List entries
+ Sector 28h (Hidden.Unknown)
+  Seems to contain a list of 16bit indices 0000h..1037h,FFFFh in File List
+  (that, as raw list indices, regardless of the directory structure)
+  000h      Unknown 0016 0018 FFFF FFFF 01A8 FFFF FFFF FFFF  ;\
+  010h      Unknown FFFF FFFF FFFF FFFF 0A35 0A3A 0D35 0AD3  ; as so on Disc 2
+  020h      Unknown 0A22 0A2E 0A2F FFFF FFFF FFFF FFFF FFFF  ; (values<>FFFFh
+  030h      Unknown 0014 0001 0013 FFFF 0075 FFFF FFFF FFFF  ; on Disc 1
+  040h      Unknown 0C10 0C14 0C15 0C19 0F52 FFFF FFFF FFFF  ; are 5 less, eg.
+  050h      Unknown 0F4C 0B6E 0C4D 1037 0C09 0BAD FFFF FFFF  ; 0011,0013,FFFF..)
+  060h      Unknown 002E 0034 FFFF FFFF FFFF FFFF FFFF FFFF  ;
+  070h      Unknown FFFF FFFF FFFF FFFF                      ;/
+  078h 2    Disc Number      (0001h=Disc 1, 0002h=Disc 2)
+  07Ah 786h Zerofilled
+ Sector 29h 1st file
+
+File List entries:
+
  000h 3    24bit Offset (increasing sector number, or 0=special)
+  003h 4    32bit Size   (filesize in bytes, or negative or 0=special)
+
+The Offset/Size can have following meanings:
+
  offset=curr,    size=+N    file at sector=curr, size N bytes
+  offset=curr,    size=-N    begin of sub-directory, with N files
+  offset=curr,    size=0     empty file, size 0 bytes
+  offset=0,       size=0     unused file entry
+  offset=FFFFFFh, size=0     end of root-directory
+
+Notes: The Hidden.Directory size seems to be hardcoded to 10h sectors +(alternately, one could treat the sector of the 1st file entry as end of +Hidden.Directory plus Hidden.Unknown).
+Root entry 0004h and 0005h are aliases for ISO files SYSTEM.CNF and boot EXE. +There seem to be no nested sub-directories (but there are several DOT1 child +archives, in root- and sub-directories, eg. 00DCh\0000h\*).

+

Chrono Cross (2 discs, 1999,2000)

+

Threads of Fate (aka Dewprism) (1 disc, 1999,2000)

+

 Sector 17h (Hidden.ID)
+  000h 2    Disc Number      (0001h=Disc 1, 0002h=Disc 2)
+  002h 2    Number of Discs? (0002h) (always 2, even if only 1 disc)
+  004h 2+2  Sector and Size for Hidden.ID        (Sector=0017h, Size=002Ch)
+  008h 2+2  Sector and Size for Hidden.Directory (Sector=0018h, Size=60E0h)
+  00Ch 2+2  Sector and Size for Hidden.Unknown   (Sector=0025h, Size=0022h)
+  010h 10h  Zerofilled
+  020h 0Ch  Title ID ("CHRONOCROSS",00h)      ;Chrono Cross (retail)
+       09h  Title ID ("DEWPRISM",00h)         ;Threads of Fate (retail)
+       10h  Title ID ("DEWPRISM_TAIKEN",00h)  ;Threads of Fate (demo)
+  0xxh 7xxh Zerofilled (unused, since Hidden.ID has only Size=2Ch/29h/30h)
+ Sector 18h..24h (Hidden.Directory)
+  000h N*4  File List entries
+  ...  ..   Zeropadding (till Size=60E0h, aka 6200 entries)
+  ...  720h Zeropadding (till end of 800h-byte sector)
+ Sector 25h (Hidden.Unknown)
+  Seems to contain a list of 16bit indices 0000h..1791h,FFFFh in File List
+  (though many of the listed indices are unused file list entries)
+  000h 2    Disc Number      (0001h=Disc 1, 0002h=Disc 2)
+  002h 10h  Unknown 0000 1791 1777 1775 00ED 09DF FFFF 0002    ;\same on
+  012h 10h  Unknown 0025 0943 10E3 FFFF FFFF 0C77 0FD9 0FA3    ;/Disc 1+2
+  022h ..   Zerofilled (unused, since Hidden.ID has only Size=0022h)
+ Sector 26h  1st file (same as boot EXE in ISO)
+
+File List entries:
+
  0-22   Sector number
+  23     Flag (0=Normal, 1=Unused entry)
+  24-31  Number of unused bytes in last sector, div8 (0..FFh = 0..7F8h bytes)
+
+The directory is just a huge list of root files (without any folder structure; +many of the root files do contain DOT1 child archives though).
+Root entry 0000h and 0001h are aliases for ISO files boot EXE and SYSTEM.CNF.
+Filesizes can be computed as follows (that works for all entries including last +used entry; which is followed by some unused entries with bit23=1):
+
  filesize = ([addr+4]-[addr] AND 7FFFFFh)*800h - ([addr+3] AND FFh)*8
+
+Unused entries with bit23=1 have Sector pointing to end of previous file +(needed for filesize calculation). There are some zeropadded entries at end of +list (with whole 32bit zero). There are hundreds of dummy txt files (24-byte +"It's CDMAKE Dummy!",0Dh,0Ah,,0Dh,0Ah,20h and File08xxh: 8-byte "dummy",0,0,0) +although those are real used file entries, each occupying a whole separate +800h-byte sector.

+

Threads of Fate (demo version) (MagDemo33: TOF\DEWPRISM.HED+.EXE+.IMG)

+

The demo version is using the same directory format as retail version (but with +Virtual Sector numbers in HED+EXE+IMG files instead of Hidden Sectors).
+

  TOF\DEWPRISM.HED (6000h bytes)    VirtSector=1Ah,  PhysSector=A0A5h
+  TOF\DEWPRISM.EXE (97800h bytes)   VirtSector=26h,  PhysSector=A0B1h
+  TOF\DEWPRISM.IMG (19EA800h bytes) VirtSector=155h, PhysSector=A1E0h
+
+The demo's Virtual Sectors start at 1Ah (instead of 17h), to convert them to +Physical Sectors: Subtract 1Ah, then add starting Sector Number of HED file. +The HED file contains Hidden.ID, Hidden.Directory, and Hidden.Unknown.

+

CDROM File Archive HED/DAT/BNS/STR (Ape Escape)

+

Ape Escape KKIIDDZZ.HED/.DAT/.BNS/.STR

+

  000h 52Ch List for .DAT file    ;value 0000h..6FFFh = sector 0..6FFFh in DAT
+  52Ch D4h  Zerofilled
+  600h C4h  List for .BNS file    ;value 7000h..71AFh = sector 0..1AFh in BNS
+  6C4h 3Ch  Zerofilled
+  700h 50h  List for .STR file(s) ;raw CDROM sector numbers from 00:02:00
+  750h B0h  Zerofilled
+
+List entries, for all three lists (32bit values):
+
  0-19   File Offset/800h (20bit)
+  20-31  File Size/800h   (12bit)
+
+The sector numbers in DAT and BNS are basically counted from begin of the .DAT +file (which has 7000h sectors in retail version, and the .BNS file does follow +right thereafter on the next sector) (the demo version (MagDemo22: KIDZ\) has +only 105Ah sectors in .DAT, and the BNS entries at offset 600h start with 105Ah +accordingly).
+There are 29 STR files in DEMO\
.STR and STR\*.STR, and 20 of them (?) are +referenced in HED ? There are also several .ALL files in above folders.
+Note: Most of the STR files in Ape Escape contain polygon animation streams +rather than BS compressed bitmaps. Ape Escape is (c)1999 by Sony.
+
  .HED is 2048 bytes
+  .DAT is 58720256 bytes = 3800000h bytes  ;div800h would be 7000h
+  .BNS is 884736 bytes = D8000h bytes      ;div800h would be 1B0h
+  .STR's: 7D3Bh+150 = 7DD1h = sector for STR\LAB.STR
+
+Some files contain RLE compressed TIMs:
+CDROM File Compression TIM-RLE4/RLE8
+Some files contain raw headerless SPU-ADPCM (eg. DAT file 00Ah).

+

CDROM File Archive WAD.WAD, BIG.BIN, JESTERS.PKG (Crash/Herc/Pandemonium)

+

Below are two slightly different formats. WAD.WAD has unused entries +00h-filled. The PKG format has them FFh-filled, and does additionally support +Folders, and does have a trailing ASCII string. There's also a difference on +whether or not to apply alignment to empty 0-byte files.
+However, the formats can appear almost identical (unused entries, 0-byte files, +and folders are optional, without them, the only difference would be the +presence of the ASCII string; which does exist only in 800h-byte aligned PKG's +though).

+

WAD.WAD (Crash/Crash)

+

Used by Crash Bandicoot 3 (DRAGON\WAD.WAD, plus nested WADs inside of WAD.WAD)
+Used by Crash Team Racing (SPYR02\WAD.WAD, plus nested WADs inside of WAD.WAD)
+Used by Madden NFL'98 (MagDemo02: TIBURON.DAT except PORTRAIT,SPRITES,XA.DAT)
+Used by N2O (MagDemo09, N2O\PSXMAP.TRM and N2O\PSXSND.SND)
+Used by Speed Racer (MagDemo10: SPDRACER\ALL1.BIN, with 0-byte, unpadded eof)
+Used by Gran Turismo 2 (MagDemo27: GT2\GT2.OVL = 128Kbyte WAD.WAD with GZIP's)
+Used by Jonah Lomu Rugby (LOMUDEMO\SFX\.VBS, ENGLISH\.VBS)
+Used by Judge Dredd (*.CAP and *.MAD)
+Used by Spyro 2 Ripto's Rage (SPYRO2\WAD.WAD, and nested WAD's therein)
+Used by Spyro 3 Year of the Dragon (SPYRO3\WAD.WAD, and nested WAD's therein)
+Used by Men: Mutant Academy (MagDemo33: PSXDATA\WAD.WAD\*, childs in PWF)
+

  000h N*8  File List
+  ...  ..   Zeropadding to 4-byte or 800h-byte boundary (or garbage padding)
+  ...  ..   File Data...
+
+The File List can contain Files, and Unused entries:
+
  000h 4    Offset in bytes (4- or 800h-byte aligned, increasing) ;\both zero
+  004h 4    Size in bytes (always multiples of 800h bytes)        ;/when Unused
+
+The Offset in first entry implies size of the File List (the list has no +end-marker other than the following zeropadding; which doesn't always exist, +ie. not in 4-byte aligned files, and not in case of garbage padding).
+The last entry has Offset+Size+Align = Total WAD filesize (except, Speed Racer +doesn't have alignment padding after the last file).
+The WAD.WAD format doesn't have folder entries, however, it is often used with +nested WADs inside of the main WAD, which is about same as folders.
+The alignment can be 4-byte or 800h-byte: N2O uses 4-byte for the main WADs. +Madden NFL '98 uses 800h-byte for main WAD and 4-byte for child WADs (file +08h,0Ah,0Ch in TIBURON\MODEL01.DAT and file 76h in PIX01.DAT). Crash Bandicoor +3 and Crash Team Racing use 800h-byte for both main & child WADs (although +with garbage padding instead of zeropadding in child WAD headers).
+Unused entries have Offset=0, Size=0.
+Empty 0-byte files (should) have Size=0 and Offset=PrevOffs+PrevSize+Align +(except, Speed Racer has Offset=PrevOffs+PrevSize, ie. without Align for 0-byte +files).

+

X-Men: Mutant Academy (MagDemo33,50: PSXDATA\WAD.WAD)

+

This does resemble standard WAD.WAD, but with leading 800h-byte extra stuff.
+

  000h 4     ID ("PWF ")                                ;\
+  004h 4     Total Filesize (707800h)                   ;
+  008h 4     Unknown (1)                                ; extra stuff
+  00Ch 4     Number of files (N)                        ;
+  010h 7F0h  Zerofilled                                 ;/
+  800h N*8   File List                                  ;\
+  ...  ..    Zerofilled (padding to 800h-byte boundary) ; standard WAD.WAD
+  ...  ..    File Data area                             ;/
+ File List entries:
+  000h 4     File Offset in bytes (increasing, 800h-byte aligned)
+  004h 4     File Size in bytes
+
+The archive contains child archives in DOT1 format, and in standard WAD.WAD +format (without PWF header).

+

PKG (Herc/Pandemonium/UnholyWar)

+

Used by Pandemonium II (JESTERS.PKG, with Files+Folders+Unused entries)
+Used by Herc's Adventure (BIG.BIN, with Files+Unused entries, without Folders)
+Used by Unholy War (MagDemo12:CERBSAMP.PKG, with 0-byte files and nested PKG's)
+Used by 102 Dalmatians (MagDemo40: PTTR\PSXDEMO.PKG)
+

  000h N*8  File List
+  ...  ..   ASCII string (junk, but somewhat needed as nonzero end marker)
+  ...  ..   Zeropadding to 800h-byte boundary; not in 4-byte aligned nested PKG
+  ...  ..   File Data...
+
+The File List can contain Files, Folders, and Unused entries. The overall +format of the list entries is:
+
  000h 4    Offset in bytes (increasing, or 0=First child)  ;\both FFFFFFFFh
+  004h 4    Size in bytes (always nonzero)                  ;/when Unused
+
+Files and Folders do have exactly the same format, the only difference is that +Folders will have Offset=00000000h in the NEXT list entry (in other words, the +folder entry is followed by child entries, which start with Offset=0).
+Offsets for Root entries are 800h-byte aligned, relative to begin of PKG file.
+Offsets for Child entries are 4-byte aligned, relative to Parent Folder Offset.
+The last Child entry has Offset+Size+Align(4) = Parent Folder Size.
+The last Root entry has Offset+Size+Align(800h) = Total PKG filesize.
+The last Root entry is usually followed by the ASCII string (which looks like +junk, but it is useful because it equals to NextOffset=Nonzero=NoChilds).
+
<B>  Example</B>
+  00003800h,00000666h   ;root00h          (file 666h bytes, padded=800h)
+  00004000h,00000300h   ;root01h\..       (folder 300h bytes, padded=800h)
+  00000000h,000000FDh   ;root01h\child00h (file FDh bytes, padded=100h)  ;\300h
+  FFFFFFFFh,FFFFFFFFh   ;root01h\child01h (unused)                       ; byte
+  00000100h,000001FDh   ;root01h\child02h (file 1FDh bytes, padded=200h) ;/
+  00004800h,00001234h   ;root02h          (file 1234h bytes, padded=1800h)
+  00006000h,00001234h   ;root03h          (file 1234h bytes, padded=1800h)
+  FFFFFFFFh,FFFFFFFFh   ;root04h          (unused)
+  00007800h,00001234h   ;root05h          (file 1234h bytes, padded=1800h)
+  etc.
+
+Notes: Unused entries can occur in both root and child folders (except, of +course, not as first or last entry in child folders). Folders seem to occur +only in root folder (although the format would allow nested folders).
+Alternately, instead of Folders, one can use nested PKG's (the nested ones are +using 4-byte align, without ASCII string and zeropadding in header).

+

CDROM File Archive BIGFILE.BIG (Gex)

+

Gex (GXDATA\BIGFILE.BIG and nested BIG files therein)

+

  000h 4     Number of Files (eg. F4h)
+  004h 0Ch   Zero
+  010h N*10h File entries
+  ...  4     Archive ID (eg. 00000000h, FF53EC8Bh, or 83FFFFFFh)
+  ...  ..    Zeropadding to 800h byte boundary
+  ...  ..    File Data
+
+File Entries:
+
  000h 4   Archive ID (same value as in above header)
+  004h 4   Filename checksum or so (randomly ordered, not increasing)
+  008h 4   Filesize in bytes
+  00Ch 4   Fileoffset (800h-byte aligned) (increasing)
+
+Filetypes in the archive include...
+
  looks like a lot of raw data without meaningful file headers...
+  file C3h,ECh are raw SPU-ADPCM
+  file 08h,09h are nested BIG archives, but with FileEntry[00h]=FF53EC8Bh
+  file D9h,DAh are nested BIG archives, but with FileEntry[00h]=83FFFFFFh
+
+FileEntry[04h] sometimes has similar continous values (maybe caused by similar +filenames, and using a simple checksum, not CRC32).

+

CDROM File Archive BIGFILE.DAT (Gex - Enter the Gecko)

+

Gex - Enter the Gecko - BIGFILE.DAT

+

Used by Gex 2: Enter the Gecko (BIGFILE.DAT)
+Used by Gex 3: Deep Cover Gecko (MagDemo20: G3\BIGFILE.DAT) -- UNSORTED
+Used by Akuji (MagDemo18: AKUJI\BIGFILE.DAT)
+Used by Walt Disney World Racing Tour (MagDemo35: GK\BIGFILE.DAT) -- UNSORTED
+

  000h 4     Number of Files      (C0h)
+  004h N*18h File entries
+  ...  ..    Zeropadding to 800h byte boundary
+  ...  ..    File Data
+
+File Entries:
+
  000h 4     Random
+  004h 4     Filesize in bytes (uncompressed size)
+  008h 4     Filesize in bytes (compressed size, or 0=uncompressed)
+  00Ch 4     Fileoffset (800h-byte aligned) (increasing, unless UNSORTED)
+  010h 4     Random
+  014h 4     Random (or ascii in 1st file)
+
+LZ Decompression:
+
  @@collect_more:
+   flagbits=[src]+[src+1]*100h+10000h, src=src+2    ;16bit flags, unaligned
+  @@decompress_lop:
+   if dst>=dst.end then goto @@decompress_done
+   flagbits=flagbits SHR 1
+   if zero then goto @@collect_more
+   if carry=0 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     len=([src] AND 0Fh)+1), disp=([src] AND 0F0h)*10h+[src+1], src=src+2
+     if len=1 or disp=0 then goto invalid   ;weirdly, these are left unused
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+
+Filetypes in the archive include...
+
  standard TIM  (eg. file 01h,02h)
+  malformed TIM (eg. file 0Fh,14h) (with [8]=2*cx*cy+4 instead 2*cx*cy+0Ch)
+  crippled VAB  (eg. file 0Eh,13h) (with hdr=filesize-4 plus raw ADPCM samples)
+  several DNSa  (eg. file 0Dh,12h,17h,BCh) SND sound? (also used by kain)
+  PMSa          (eg. Gex 3, World Racing) (SMP spu-adpcm samples)
+  there seem to be no nested DAT files inside of the main DAT file
+
+Note: same malformed TIMs are also in Legacy of Kain (folder0004h\file0013h).

+

CDROM File Archive FF9 DB (Final Fantasy IX)

+

DB Archive

+

  000h 1   ID (DBh)
+  001h 1   Number of Types
+  002h 2   Zero (0)
+  004h N*4 Type List
+  ...  ..  File Lists & File Data for each Type
+
+Type List entries:
+
  000h 3   Offset to File List (self-relative, from current entry in Type List)
+  003h 1   Data Type (00h..1Fh)
+
+File List:
+
  000h 1   Data type (00h..1Fh) (same as in Type List)
+  001h 1   Number of Files
+  002h 2   Zero (0)
+  004h N*2 File ID List (unique ID per type) (different types may have same ID)
+  ...  ..  Zeropadding to 4-byte boundary
+  ...  N*4 Offset List (self-relative, from current entry in Offset List)
+  ...  4   End Offset  (first-relative, from first entry in Offset List)
+  ...  ..  File Data (referenced from above Offset List)
+

+

Data Types

+
  00h  Misc (DOT1 Archives, or other files)
+  01h  Unused?
+  02h  Reportedly 3D Model data (vertices,quads,triangles,texcoords)
+  03h  Reportedly 3D Animation sequences
+  04h  TIM Texture
+  05h  Reportedly Scripts (hdr="EV")              (eg. dir04\file32\1B-0001)
+  06h  ?                                          (eg. dir02\file*)
+  07h  Sound "Sequencer Data" (hdr="AKAO")        (eg. dir09\file*)
+  08h  Sound? tiny files (hdr="AKAO")             (eg. dir04\file32\1B-0001)
+  09h  Sound Samples (hdr="AKAO")                 (eg. dir0B\file*)
+  0Ah  Reportedly Field Tiles and Field Camera parameters
+  0Bh  Reportedly Field Walkmesh                  (eg. dir04\file32\1B-0001)
+  0Ch  Reportedly Battle Scene geometry           (eg. dir06\file*)
+  0Dh  ?                                          (eg. dir01\file01)
+  0Eh  Unused?
+  0Fh  Unused?
+  10h  ?                                          (eg. dir05\file*)
+  11h  ?                                          (eg. dir05\file*)
+  12h  Reportedly CLUT and TPage info for models  (eg. dir04\file32\1B-0001)
+  13h  Unused?
+  14h  ?                                          (eg. dir05\file*)
+  15h  Unused?
+  16h  ?  (eg. dir04\file32\1B-0001)
+  17h  ?  (eg. dir04\file32\1B-0000)
+  18h  Sound (hdr="AKAO")  (eg. dir04\file32\1B-0001)
+  19h  ?  (eg. dir04\file32\1B-0001)
+  1Ah  ?  (eg. dir06\file*)
+  1Bh  DB Archives (ie. further DB's nested inside of the parent DB archive)
+  1Ch  ?  (eg. dir04\file32\1B-0001)
+  1Dh  ?  (eg. dir03\file2328\1B-0001)
+  1Eh  ?  (eg. dir04\file32\1B-0001)
+  1Fh  ?  (eg. dir04\file32\1B-0001)
+  20h..FFh Unused?
+
+

CDROM File Archive Ace Combat 2 and 3

+

Ace Combat 2 (Namco 1997) (ACE2.DAT and ACE2.STH/STP)

+

There are two archives, stored in three files:
+

  ACE2.DAT Directory for Data in ACE2.DAT itself         ;normal binary data
+  ACE2.STH Directory for Data in separate ACE2.STP file  ;streaming data
+
+Directory Format:
+
  000h 4    Unknown (1)
+  004h 4    Number of entries (N)
+  008h N*8  File List
+
+File List entries (64bit):
+
  0-27   28bit Size/N (DAT=Size/4, STP=Size/800h)
+  28-31  4bit  Type or Channel Number (see below)
+  32-63  32bit Offset/800h in ACE2.STP or ACE2.DAT file
+
+The files are interleaved depending on the Type/Channel number:
+
  File    Bit28-31 Channel Sector types...             Interleave Notes
+  DAT     0        ch=0    DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1:1   data (normal)
+  DAT     2        ch=0    DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1:1   data (exe)
+  STH     0-6      ch=0-6  S.......S.......S.......S....... 1:8   stereo
+  STH     8        ch=1    vvvvvvvSvvvvvvvSvvvvvvvSvvvvvvvS 1:1   video+stereo
+  Whereas D=data, S=Stereo/Audio, v=video, .=other channels
+
+Note: The DAT file does additionally contain PreSizeDOT1 and DOT1 child +archives.
+Demo: The archives in demo version (MagDemo01: ACE2.*) contain only a handful +of files; the two EXE files in demo DAT archive are only 800h-byte dummy files, +and demo STP is corrupted: Recorded as CDROM image with 920h-byte sectors, +instead of as actual CD-XA sectors).

+

Ace Combat 3 Electrosphere (Namco 1999) (ACE.BPH/BPB and ACE.SPH/SPB)

+

There are two archives, stored in four files:
+

  ACE.BPH Directory for Data in separate ACE.BPB file  ;normal binary data
+  ACE.SPH Directory for Data in separate ACE.SPB file  ;streaming data
+
+Directory Format:
+
  000h 4    ID "AC3E" (=Ace Combat 3 Electrosphere)
+  004h 4    Type (BPH=3=Data?, SPH=1=Streaming?)
+  008h 2    BCD Month/Day?     (Japan=0427h, US=1130h)
+  00Ah 2    BCD Year (or zero) (SPH=1999h, BPH=0)
+  00Ch 4    Unknown (SPH=0, BPH/US=16CFh or BPH/JP=1484h)
+  010h 4    Number of entries (N)
+  014h N*8  File List
+
+File List entries (64bit), when Bit31=1 (normal entries):
+
  0-18   19bit Size/N           (BPH=Size/4, SPB=Size/800h)
+  19-23  5bit  Channel Number   (BPH=0, SPH=0..1Fh)
+  24-26  3bit  Channel Interval (BPH=0, SPH=1 SHL N, eg. 3=Interval 1:8)
+  27     1bit  Video Flag       (0=No, 1=Has Video sectors)
+  28     1bit  Audio Flag       (0=No, 1=Has Audio sectors)
+  29     1bit  Always 1 (except special entries with Bit31=0, see below)
+  30     1bit  Unknown (US: Always 1, Japan: 0 or 1)
+  31     1bit  Always 1 (except special entries with Bit31=0, see below)
+  32-63  32bit Offset/800h in ACE.BPB or ACE.SPB file   (or 0 when bit31=0 ?)
+
+File List entries (64bit), when Bit31=0:
+
  For unknown purpose, the normal entries with Bit31=1 are occassionally   followed by one or more entries with Bit31=0.
+  Unknown if those entries do affect the actual storage (like switching to
+  different channel numbers, or jumping to non-continous sector numbers).
+  That unknown stuff exists in Japanese version only, not in US version.
+  0-18   19bit Unknown (maybe some snippet size value in whatever units?)
+  19-23  5bit  Always 0     (instead of Channel)
+  24-27  4bit  Same as in most recent entry with Bit31=1
+  28-31  4bit  Always 5     (instead of Flags)
+  32-63  32bit Always 0     (instead of Offset)
+
+The files are interleaved depending on the Channel Interval setting (and with +types data/audio/video depending on Flags).
+
  File    Bit24-31    Sector types...                  Interval  Content
+  BPH.US  E0h         DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1:1       data
+  SPH.US  F8h         SvvvvvvvSvvvvvvvSvvvvvvvSvvvvvvv 1:1       stereo+video
+  SPH.US  FBh         S.......v.......S.......v....... 1:8       stereo+video
+  SPH.US  F3h         S.......S.......S.......S....... 1:8       stereo
+  SPH.US  F4h         S...............S............... 1:16      stereo
+  SPH.US  F5h         M............................... 1:32      mono
+  BPH.JAP E0h         DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1:1       data
+  SPH.JAP B8h,F8h     SvvvvvvvSvvvvvvvSvvvvvvvSvvvvvvv 1:1       stereo+video
+  SPH.JAP B9h         Svvv....vvvv....Svvv....vvvv.... 1:2 (4:8) stereo+video
+  SPH.JAP BAh,FAh     Mv......vv......vv......vv...... 1:4 (2:8) mono+video
+  SPH.JAP BBh,FBh     S.......v.......S.......v....... 1:8       stereo+video
+  SPH.JAP B3h,F3h     S.......S.......S.......S....... 1:8       stereo
+  SPH.JAP B5h,F5h     M............................... 1:32      mono
+  Whereas D=data, S=Stereo/Audio, M=Mono/Audio, v=Video, .=Other channels
+
+As shown above, interval 1:2 and 1:4 are grouped as 4:8 and 2:8 (ie. 4 or 2 +continous sectors per 8 sectors).
+The Subheader's Channel number is specified in the above directory entries, +Subheader's File number is fixed (0 for BPB, and 1 for SPB).
+CDROM XA Subheader, File, Channel, Interleave
+The SPB file is about 520Mbyte in both US and Japan, however, the Japanese +version does reportedly contain more movies and some storyline that is missing +in US/EU versions.
+The BPB file contains DOT1 child archives, and Ulz compressed files.
+CDROM File Compression Ulz/ULZ (Namco)
+The SPB file contains movies with non-standard STR headers (and also uncommon: +interleaved videos on different channels, at least so in the japanese version).
+Demo: The archives do also exist on the demo version (MagDemo30: AC3\*), but +the .SPB file is corrupted: Recorded as a RIFF/CDXAfmt file, instead of as +actual CD-XA sectors).

+

CDROM File Archive NSD/NSF (Crash Bandicoot 1-3)

+

NSD/NSF versions

+
  v0  Crash Bandicoot Prototype (oldest known prototype from 08 Apr 1996)
+  v1  Crash Bandicoot 1         (retail: S*\*.NSD and .NSF)
+  v2  Crash Bandicoot 2         (MagDemo02: CRASH\S0\*.NSD and .NSF)
+  v3  Crash Bandicoot 3 Warped  (MagDemo26,50: (S0\*.NSD and .NSF)
+
+

NSD

+
Overall NSD Structure (v0 contains only the Lookup entries)
+

  0000h 100h*4  Lookup Table, using index=((Filename/8000h) AND FFh) ;\
+  0400h 4       Number of Chunks in .NSF file                        ; Lookup
+  0404h 4       Number of Files in Lookup File List (N)              ;/
+  0408h 4       Level Data Filename (eg. 4F26E8DFh="DATh.L")         ;-LevelDat
+  040Ch 4       Bitmap Number of Colors (100h) (P) (0=None)          ;\
+  0410h 4       Bitmap Width    (200h or 1B0h) (X) (0=None)          ; Bitmap
+  0414h 4       Bitmap Height   (0D8h or 090h) (Y) (0=None)          ;/
+  0418h 4       Compression: Offset/800h of first uncompressed chunk ;\
+  041Ch 4       Compression: Number of compressed chunks (0..40h)    ; Compress
+  0420h 40h*4   Compression: Compressed Chunk List (0=unused entry)  ;/
+  ...   N*8     Lookup File List                                     ;-Lookup
+  ...   ..      Level Data (size/format varies, see below)           ;-LevelDat
+  ...   P*2     Bitmap Palette (16bit values, 8000h..FFFFh)          ;\Bitmap
+  ...   X*Y     Bitmap Pixels  (0D8h*200h)                           ;/
+
+There are four .NSD versions, which can be distinguished via filesize:
+
  v0  NSD Filesize=408h + N*8                           ;-Lookup only
+  v1  NSD Filesize=520h + N*8 + P*2+X*Y + 210h          ;\
+  v2  NSD Filesize=520h + N*8 + P*2+X*Y + 1DCh+S*18h    ; with extra stuff
+  v3  NSD Filesize=520h + N*8 + P*2+X*Y + 2DCh+S*18h    ;/
+
+Note: v0 is mainly used by the Crash Bandicoot prototype, but the Crash +Bandicoot 1 retail version does also have a few v0 files.

+
NSD Lookup
+

The lookup table allows to find files (by filenames) in the NSF files. It does +merely contain the NSF chunk number, so one must load/decompress that chunk to +find the file's exact size/location in that chunk.
+One can create a complete file list by scanning the whole NSF file without +using the NDS lookup table.
+

 Lookup File List entries (indexed via Lookup Table):
+  00h 4   Chunk Number in .NSF file
+  04h 4   Filename (five 6bit characters)
+
+Filenames:
+
  0     Type (always 1=Filename) (as opposed to 0=Memory Pointer)
+  1-6   5th character ;-Extension  ;\character set is:
+  7-12  4th character ;\           ; 00h..09h="0..9"
+  13-18 3rd character ; Name       ; 0Ah..23h="a..z"
+  19-24 2nd character ;            ; 24h..3Dh="A..Z"
+  25-30 1st character ;/           ;/3Eh..3Fh="_" and "!"
+  31    Always zero?
+
+Special name: 6396347Fh="NONE.!"

+
NSD Level Data
+

Level Data exists in NSD v1-v3 (v0 does also have Level Data, but it's stored +in NSF file "DAT*.L" instead of in the NSD file). There are two major versions:
+

 Level Data in NSD v1 (or NSF v0 file DAT*.L):
+  000h  4       01h                                                  ;\
+  004h  4       Level Number (xxh) (same as xx in S00000xx.NSD/NSF)  ;
+  008h  4       3807C8FBh = "s0_h.Z" ?                               ; LevelDat
+  00Ch  4       Zero                                                 ; v1
+  010h  4       Zero                                                 ;
+  014h  L*4     Namelist (40h*4)                                     ;
+  ...   4       5Ah                                                  ;
+  ...   F8h     Zerofilled                                           ;/
+ Level Data in NSD v2-v3:
+  000h  4       Number of Spawn Points (S)                           ;\
+  004h  4       Zero                                                 ;
+  008h  4       Level Number (xxh) (same as xx in S00000xx.NSD/NSF)  ; LevelDat
+  00Ch  4       Number of Objects? (can be bigger than below list)   ; v2/v3
+                  (eg. 1BDh or A5h or E4h)                           ;
+  010h  L*4     Namelist for Objects?  (v2=40h*4, or v3=80h*4)       ;
+  ...   4       Unknown, always 5Ah (maybe just list end marker?)    ;
+  ...   C8h     Zerofilled                                           ;
+  ...   S*18h   Spawn Points                                         ;/
+

+
NSD Bitmap
+

This bitmap is displayed while loading the level.

+
NSD Compression Info
+

Compression is only used in v1 (v2-v3 do also have the compression entries at +[418h..51Fh], but they are always zerofilled).
+

 Compressed Chunk List entries at [420h..51Fh]:
+  0-5   Compressed Chunk Size/800h (1..1Fh=800h..F800h bytes, 20h..3Fh=Bad?)
+  6-31  Compressed Chunk Offset/800h
+
+Note: Crash Bandicoot 1 retail does also have a few uncompressed files (either +v0 files without compression info, or v1 files with zerofilled compression +info).

+

NSF

+

NSF files consist of 64Kbyte chunks (compressed chunks are smaller, but will be +64Kbyte after decompression). Each chunk can contain one or more file(s). That +implies that all files must be smaller than 64Kbyte (larger textures or ADPCM +samples must be broken into multiple smaller files).
+All files (except Textures) are NSF Child Archives which contain one or more +smaller files/items.

+
NSF Chunk Types
+
 N*8Kbyte-Compressed-chunks:
+  000h 2    ID, always 1235h (instead of 1234h)
+  002h 2    Zero
+  004h 4    Decompressed Size (max 10000h) (usually 9xxxh..Fxxxh, often Fxxxh)
+  008h 4    Skip Size (max 40h or so, when last LZSS_len was 40h)
+  00Ch ..   Compressed data
+  ...  SK   Unused (Skip size)
+  ...  ..   Final uncompressed bytes (10000h-compressed_size-skip_size)
+ 64Kbyte-Texture-chunks:
+  000h 2    ID, always 1234h
+  002h 2    Chunk Family (1=Texture)
+  004h 4    Filename (five 6bit characters)
+  008h 4    File Type (5=Texture)
+  00Ch 4    Checksum (sum of bytes ar [0..FFFFh], with initial [0Ch]=00000000h)
+  010h ...  Zerofilled
+  020h ...  Texture data (raw VRAM data, FFE0h bytes?)
+ 64Kbyte-NonTexture-chunks:
+  000h 2    ID, always 1234h
+  002h 2    Chunk Family (0=Misc or 2..5=Sound)
+  004h 4    Chunk Number*2+1
+  008h 4    Number of Files (N) (can be 0, eg. prototype S0000003 chunk21h)
+  00Ch 4    Checksum (sum of bytes ar [0..FFFFh], with initial [0Ch]=00000000h)
+  010h N*4  File List (Offsets from ID=1234h to entries) (4-byte aligned)
+  ...  ..   Offset for end of last File
+  ...  ..   File Data (NSF Child Archives) (includes Type/Filename)
+  ...  ..   Padding to 10000h-byte boundary
+
+
NSF Child Archives
+
  000h 4    ID, always 0100FFFFh
+  004h 4    Filename (five 6bit characters)
+  008h 4    File Type (01h..04h, or 06h..15h)
+  00Ch 4    Item Count (I)
+  010h I*4  Item List (Offsets from ID=0100FFFFh to items) (...unaligned?)
+  ...  ..   Offset for end last item
+  ...  ..   Data (Items)
+
+
NSF Chunk Loading and Decompression
+

The compression is a mixup of LZSS and RLE. Compressed chunks are max F800h +bytes tall (10000h bytes after decompression).
+

  dst=chunk_buffer_64kbyte
+  if chunksize is known (from NSD file)
+    src=dest=dst+10000h-chunksize
+    diskread(fpos,src,chunksize)
+  else (when parsing raw NSF file without NSD file)
+    src=temp_buffer_64kbyte
+    diskread(fpos,src,10000h)
+  dst_start=dst, src_start=src
+  if halfword[src+00h]<>1234h then   ;check ID (1234h=raw, or 1235h=compressed)
+    dst_end=dst+word[src+04h]
+    skip_size=word[src+08h]
+    src=src+0Ch
+    while dst<dst_end
+      x=[src], src=src+1
+      if x<80h then
+        for i=0 to x-1, [dst]=[src], dst=dst+1, src=src+1, next i ;uncompressed
+      else
+        x=(x AND 7Fh)*100h+[src], src=src+1
+        disp=x/8, len=(x AND 7)+3, if len=0Ah then len=40h
+        for i=0 to len-1, [dst]=[dst-disp], dst=dst+1, next i     ;compressed
+    src=src+src_skip
+  if src<>dst then
+    while dst<dst_start+10000h, [dst]=[src], dst=dst+1, src=src+1 ;uncompressed
+  chunksize=src-src_start  ;<-- compute (when chunksize was unknown)
+  fpos=fpos+chunksize      ;<-- fileposition of next chunk
+
+As shown above, the chunk is intended to be loaded to the end of the +decompression buffer, so trailing uncompressed bytes would be already in place +without needing further relocation (despite of that intention, the actual game +code is uselessly relocating src to dst, even when src=dst).
+Note: All compressed files seem to have an uncompressed copy with same filename +in another chunk (the NSD Lookup table does probably(?) point to the compressed +variant, which should reduce CDROM loading time).

+

Filetypes

+
Filetype Summary
+

Below shows File Type, Chunk Family, Extension (5th character of filename), the +version where the type is used, 4-letter type names (as found in the EXE +files), and a more verbose description.
+

  Typ Family Ext Ver  Name Description
+  00h -      !   -    NONE Nothing
+  01h 0      V   all  SVTX Misc.Vertices
+  02h 0      G   all  TGEO Misc.Model         ;\changed format in v2-v3 ?
+  03h 0      W   all  WGEO Misc.WorldScenery  ;/
+  04h 0      S   all  SLST Misc.UnknownSLST
+  05h 01h    T   all  TPAG Texture.VRAM
+  06h 0      L   v0   LDAT Misc.LevelData     ;-stored in NSD in v1-v3
+  07h 0      Z   all  ZDAT Misc.Entity        ;-changed format in v2-v3 ?
+  08h -      -   -    CPAT Internal?
+  09h -      -   -    BINF Internal?
+  0Ah -      -   -    OPAT Internal?
+  0Bh 0      C   all  GOOL Misc.GoolBytecode
+  0Ch 02h    A   v0   ADIO OldSound.Adpcm     ;\type 0Ch
+  0Ch 03h    A   all  ADIO Sound.Adpcm        ;/
+  0Dh 0      M   all  MIDI Misc.MidiMusic     ;-changed format in v1-v3 ?
+  0Eh 04h    N   all  INST Sound.Instruments
+  0Fh 0      D   v0-1 IMAG Misc.UnknownIMAG   ;\type 0Fh
+  0Fh 0      X   v2-3 VCOL Misc.UnknownVCOL   ;/
+  10h -      -   -    LINK Internal?
+  11h 0      P   v0-1 MDAT Misc.UnknownMDAT   ;\type 11h
+  11h 0      R   v3   RAWD Misc.UnknownRAWD   ;/
+  12h 0      U   v0-1 IPAL Misc.Unknown      ;-Crash 1 only? (eg. S0000019.NSF)
+  13h 0      B   v1-3 PBAK Misc.DemoPlayback ;-eg. in MagDemo02
+  14h 0      V   v0-1 CVTX Misc.UnknownCVTX   ;\type 14h
+  14h 05h    O   v2-3 SDIO Speech.Adpcm       ;/
+  15h 0      D   v2-3 VIDO Misc.UnknownVIDO
+
+As shown above, Type 0Ch is used with family 02h/03h, and Type 0Fh,11h,14h have +two variants each (with different extensions). The Extensions do usually +corresponding with the Types (although extension V,D are used for two different +types each).

+
See also:
+

https://gist.github.com/ughman/3170834

+

https://dl.dropbox.com/s/fu29g6xn97sa4pl/crash2fileformat.html

+
Weird Note
+

"Sound entries don't need to be aligned as strictly for most (all?) emulators."
+What does that mean???
+Is there a yet unknown 16-byte DMA alignment requirement on real hardware?

+

CDROM File Archive STAGE.DIR and *.DAT (Metal Gear Solid)

+

Metal Gear Solid (MagDemo13: MGS\)
+Metal Gear Solid (MagDemo25: MGS\
)
+Metal Gear Solid (MagDemo44: MGS\) (looks same as in MagDemo13)
+Metal Gear Solid (Retail: MGS\
)

+

Summary of ISO files in MGS folder (with filesizes for different releases)

+
  File        MagDemo13/44 MagDemo25  Retail/PAL
+  .EXE        9C000h       9C800h     9D800h      ;-executable
+  STAGE.DIR   590800h      11A7800h   42AE000h    ;-main archive
+  FACE.DAT    2CA000h      3Dh (txt)  358800h     ;-face animation archive
+  ZMOVIE.STR  -            -          2D4E800h    ;-movie archive
+  DEMO.DAT    149B000h     3Dh (txt)  EC20000h    ;\DAT/SYM combos (the .SYM
+  DEMO.SYM    88h          -          -           ; files were leaked in
+  VOX.DAT     14F2000h     9F800h     B054800h    ; MagDemo13/MagDemo44 only)
+  VOX.SYM     988h         -          -           ;/
+  BRF.DAT     -            66800h     575800h     ;\whatever, unknown format(s)
+  RADIO.DAT   16CB8h       3Dh (txt)  1AA956h     ;/
+
+

STAGE.DIR:

+

  000h 4     Size of File List (N*0Ch)
+  004h N*0Ch Folder List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    Folder Data
+ Folder List entries:
+  000h 8     Foldername (zeropadded if less than 8 chars)  ;nickname=stg
+  008h 4     Offset/800h to File List
+ Folder Data (per folder):
+  000h 2     Unknown (always 1) (maybe File List size/800h?)
+  002h 2     Folder Size/800h (of whole folder, with file list plus file data)
+  004h N*8   File List
+  ...        Zeropadding to 800h-byte
+  800h       Data (for files in current folder)
+ File List entries:
+  000h 2     File ID (checksum on name)
+  002h 1     File Family (one of following chars: "cnrs")
+  003h 1     File Type   (one of following chars: "abcdeghiklmoprswz",FFh)
+  004h 4     File Size (or File Offset, when File Family="c")
+
+Combinations of Family/Type characters are:
+
  .?a    ???? if any ???? (does NOT exist on PAL disc 1)    ;nickname=azm
+  .sb    MIPS binary code  (leading)                        ;nickname=bin
+  .cc    Whatever          (eg. vr10\*, s01a\*)             ;nickname=con
+  .nd    Texture Archive   (leading) (contains PCX files)   ;nickname=dar
+  .rd    Misc Archive      (leading) (eg. init\*)           ;nickname=dar
+  .se    Sound Effects?    (trailing)                       ;nickname=efx
+  .cg    Whatever, reportedly bytecode functions            ;nickname=gcx
+  .ch    Whatever                                           ;nickname=hzm
+  .ci    Whatever          (eg. ending\*, s01a\*)           ;nickname=img
+  .ck    Whatever, model? aka "pat_xxx" files               ;nickname=kmd
+  .cl    Lights, first word = size/10h                      ;nickname=lit
+  .sm    Sound Music? Nested DOT1+DOTLESS Archives          ;nickname=mt3
+  .co    Whatever "OARa"   (eg. d16e\*, s00a\*, s02c\*)     ;nickname=oar
+  .cp    PCX bitmap        (eg. init\*)                     ;nickname=pcc
+  .cr    Whatever "sNRJ1F" (eg. roll\*)                     ;nickname=rar
+  .cs    Whatever          (eg. d16e\*, s01a\*)             ;nickname=sgt
+  .sw    Wave Archive      (trailing)                       ;nickname=wvx
+  .cz    Whatever "KMDa"   (eg. s11a, a11c, s14e, s15a)     ;nickname=zmd
+  .c,FFh End of Family="c" area                             ;nickname=dar?
+
+Files are starting on 800h-byte boundaries. Files with Family="c" are special, +they contain an Offset entries instead of a Size entries, that Offsets are +4-byte aligned (relative to the 800h-byte aligned offset of the first +Family="c" entry), the list of Family="c" entries is terminated by an entry +with Family="c" and Type=FFh (which contains the end-offset of the last +c-Family entry, aka the size of all c-Family entries).
+Note: The above 3-letter nicknames are used on some webpages (unknown why, +maybe they are derived from MGS filename extensions in the PC version).

+

FACE.DAT (face animations for video calls):

+

This contains several large blocks (supposedly one per stage, each block having +its own file list). There is no directory to find the begin of the separate +blocks, but one can slowly crawl through the file:
+

  NextBlock = CurrBlock + 4 + Offset(lastfile)+Size(lastfile) + Align800h
+
+The content of each block is:
+
  000h 4     Number of Files in this block (eg. 19h or 1Ch)
+  004h N*0Ch File List for this block
+  ...  ..    File Data for this block
+  ...  ..    Zeropadding to 800h-byte boundary (followed by next block, if any)
+ File List entries:
+  000h 2     File Type (0=Main/Eye/Mouth frames, 1=All frames are full size)
+  002h 2     File ID (name checksum?)
+  004h 4     Filesize in bytes
+  008h 4     Offset in bytes, minus 4
+
+Type 0 Files in FACE.DAT:
+
 This type use a single palette for all frames, and only the first frame is
+ full 52x89pix, the other frames contain only the update sections (eg. eyes).
+  000h 4     Offset to 200h-byte palette       (usually 20h)    ;\Main
+  004h 4     Offset to Main Bitmap (52x89pix) (usually 220h)    ;/
+  008h 4     Offset to 4th Bitmap  (usually xxxxh or 0=None)    ;\Eyes
+  00Ch 4     Offset to 5th Bitmap  (usually xxxxh or 0=None)    ;/
+  010h 4     Zero
+  014h 4     Offset to 2nd Bitmap  (usually 143Ch or 0=None)    ;\Mouth
+  018h 4     Offset to 3rd Bitmap  (usually xxxxh or 0=None)    ;/
+  01Ch 4     Zero
+  020h 200h  Palette (256 colors) ;\Main
+  220h 1218h Main Bitmap          ;/
+  1438h 4    Zero
+  143Ch ..   2nd Bitmap (if any)  ;\Mouth
+  ...   ..   3rd Bitmap (if any)  ;/
+  ...   ..   4th Bitmap (if any)  ;\Eyes
+  ...   ..   5th Bitmap (if any)  ;/
+
+Type 1 Files in FACE.DAT:
+
 This type use separate palettes for each frame, all frames are full 52x89pix.
+  000h 4     Number of frames
+  004h N*0Ch Frame List
+  ...  200h  1st Frame Palette
+  ...  1218h 1st Frame Bitmap (52x89pix)
+  ...  4     ?
+  ...  200h  2nd Frame Palette
+  ...  1218h 2nd Frame Bitmap (52x89pix)
+  ...  4     ?
+  ...  ..    3rd Frame ...
+ Frame List entries:
+  000h 4     Offset to Palette
+  004h 4     Offset to Bitmap (usually at Palette+200h)
+  008h 4     Unknown (often 000x000xh)
+
+Bitmap Format (for both Type 0 and Type 1):
+
  000h 1     Offset X (always 00h in Main Bitmap)
+  001h 1     Offset Y (always 00h in Main Bitmap)
+  002h 1     Width    (always 34h in Main Bitmap, or less in 2nd-5th bitmap)
+  003h 1     Height   (always 59h in Main Bitmap, or less in 2nd-5th bitmap)
+  004h ..    Bitmap Pixels at 8bpp (Width*Height bytes)
+

+

DEMO.DAT, DEMO.SYM

+

VOX.DAT, VOX.SYM

+

The .DAT files contain several huge blocks, found on 800h-boundaries starting +with:
+

  10 08 00 00 0x 00 00 00 ..
+
+The .SYM files (if present) contain Names and .DAT Offsets/800h for those huge +blocks in text format:
+
  "0xNNNNNNNN name",0Ah
+
+VOX.DAT does (among others) contain SPU-ADPCM chunks with 2004h bytes or less, +that is, a 1+3 byte chunk header (01h=SPU-ADPCM, 002004h=Size), plus 2000h byte +or less SPU-ADPCM data.

+

RADIO.DAT:

+

Whatever, contains chunks with text messages, chunks are about as so:
+

  000h 4   Unknown    (eg. 36h,BFh,5Eh,00h)
+  004h 4   Unknown    (eg. 03h,13h,00h,00h)
+  008h 1   Unknown    (eg. 80h)
+  009h 2   Chunk Size (eg. 0xh,xxh)          ;big-endian
+  ..   ..  Chunk Data (Chunk Size-2 bytes) (binary stuff, and text strings)
+

+

BRF.DAT:

+

Contains several "folders" in this format:
+

  000h 4   Number of files in this folder
+  004h ..  File(s)
+  ...  ..  01h-padding to 800h-byte boundary
+ Files have this format:
+  000h ..  Filename ("name.pll",00h)
+  ...  ..  Zeropadding to 4-byte boundary (aligned to begin of BRF.DAT)
+  ...  4   File data size (usually a multiple of 4)
+  ...  ..  File data
+  ...  1   Zero (00h)
+
+The above "folders" are then followed by several PCX files:
+
  000h ..  PCX file (starting with 0A,05,01,01 or 0A,05,01,08)
+  ...  ..  01h-padding to 800h-byte boundary
+
+The first part with .pll files does contain some kind of chunk sizes that could +be used to find the next entry (but that would be very slow).
+The second part with .PCX files doesn't have any chunk sizes at all (though one +could decompress the .PCX file to find the end of each file) (also one could +guess/find them by looking for 0A,05,01,01/08 on 800h-byte boundaries).

+

ZMOVIE.STR (movie archive with several STR files with subtitles)

+

CDROM File Video Streaming STR Variants

+

STAGE.DIR\\.sb - stage binary/header

+

This is the first file in most folders (except "init*" folders).
+The file contains MIPS binary program code. And, there are ascii strings near +end of .sb files, which include filenames, alike:
+

  "name.c",00h + garbage-padding to 4-byte boundary  ;<-- maybe source code?
+  "pat_lamp",00h + zero- padding to 4-byte boundary  ;<-- name for File ID !
+
+Those filenames do cover some (not all) of the name checksums in the STAGE.DIR +folder.

+

STAGE.DIR\\.cp, STAGE.DIR\\.nd.p, BRF.DAT\* - PCX bitmap files

+

MGS is using customized/corrupted PCX files as standard texture format (in +STAGE.DIR\\.cp, STAGE.DIR\\.nd\.p, and BRF.DAT\).
+For details on PCX format (and MGS-specific customizations), see:
+CDROM File Video Texture/Bitmap (PCX)
+Apart from PCX, there's also custom texture format for animated bitmaps (in +FACE.DAT), and a few TIM images (in STAGE.DIR\init*\.rd\.r)

+

STAGE.DIR\\.nd - texture archive (with .PCX files)

+

STAGE.DIR\init*\*.rd - misc archive (with misc files)

+

These archives contain several chunks in following format:
+

  000h 2     File ID (checksum on name?)
+  002h 1     File Type (one of following chars: "p" for .nd, or "kors" for .rd)
+  003h 1     Zero (00h)
+  004h 4     Chunk Size (rounded to 4-byte boundary)
+  008h ..    Chunk Data
+
+The File Type can be:
+
  .p    PCX bitmap                      ;-in *\*.nd archives
+  .k    Whatever                        ;\
+  .o    Whatever "OARa"                 ; in init*\*.rd archives
+  .a    Whatever                        ;
+  .r    Misc (TIM and other stuff)      ;/
+
+There can be 1-2 texture archives per STAGE.DIR folder (both having File +ID=0000h) (probably due to a memory size limit: the game does probably load one +archive with max 300Kbytes, relocate its contents to VRAM, then load the next +archive, if any).

+

STAGE.DIR\\.sw - wave archive

+

There can be one or more .sw files per stage folder (eg. two sw's in +"vr*\*.sw").
+

  000h 4     Unknown (800h or C00h)       ;big-endian
+  004h 4     Size of File List (N*10h)    ;big-endian
+  008h 8     Zerofilled
+  010h N*10h File List (xx,xx,xx,00,00,00,00,7F,00,00,00,0F,00,19,0A,00)
+  ...  4     Unknown (40000h or 60000h)   ;big-endian
+  ...  4     Size of SPU-ADPCM Data area  ;big-endian
+  ...  8     Zerofilled
+  ...  ..    SPU-ADPCM Data area (indexed from File List)
+ File List entries:
+  000h 4     Offset+Flags                 ;little-endian!
+               bit0-16  Offset (from begin of SPU-ADPCM Data area)
+               bit17    Unknown (0 or 1)
+               bit18    Unknown (1)
+               bit19-31 Unknown (0)
+  004h 12    Whatever (always 00,00,00,7F,00,00,00,0F,00,19,0A,00)
+
+The unknown fields might contain volume, ADSR, pitch or the like?

+

STAGE.DIR\\.se - sound effects? maybe short midi-like sequences or so?

+
  000h 80h*10h List (unused entries are 1x00000000h,3xFFFFFFFFh)
+  800h ..      Data (whatever, usually 14h or more bytes per list entry)
+ List entries:
+  000h 1       Unknown (eg. 01h,10h,20h,A0h,80h,FFh)    ;\
+  001h 1       Number of Voices? (1..3)                 ; all zero for
+  002h 1       Unknown (1 or 0)                         ; unused list entries
+  003h 1       Unknown (2 or 0 or 1)                    ;/
+  004h 4       Offset-800h for 1st Voice?               ;-FFFFFFFFh=Unused
+  008h 4       Offset-800h for 2nd Voice? (if any)      ;-FFFFFFFFh=Unused
+  00Ch 4       Offset-800h for 3rd Voice? (if any)      ;-FFFFFFFFh=Unused
+ Data:
+  Seems to contain 4-byte entries (last entry being 00,00,FE,FF).
+
+

STAGE.DIR\\.sm - whatever nested archives - sound music? mide-like?

+

This does resemble a DOT1 Parent archive with 1-4 DOTLESS Child archives. +Except, the offsets in Child archives are counted from begin of Parent archive.
+

 Data:
+  Seems to contain 4-byte entries (last entry being 00,00,FE,FF).
+

+

File IDs

+

File IDs in STAGE.DIR (and maybe elsewhere, too) are computed as so:
+

  sum=0,
+  for i=0 to len(filename)-1
+    sum=sum*20h+filename[i]          ;\or so, 16bit overflows might be
+    sum=(sum+sum/10000h) AND FFFFh   ;/cropped slightly differently
+
+Examples: "abst"=1706h, "selectvr"=8167h.
+Some filenames are empty (name="", ID=0000h).
+Some filenames do match up with the STAGE.DIR foldername.
+Some filenames do match up with strings in .sb file of current folder.
+Other filenames are unknown.

+

CDROM File Archive DRACULA.DAT (Dracula)

+

Dracula - The Resurrection - DRACULA.DAT (180Mbyte)

+

  000h 4     Zero
+  004h 4     Number of Entries (503h)
+  008h 4     Zero
+  00Ch 4     Random
+  010h 10h   Zero
+  020h N*10h File List
+  ...  ..    Zeropadding to 800h-byte boundary
+  ...  ..    Fild Data area
+
+File List entries:
+
  000h 4     Offset/800h
+  004h 4     Type (see below for info on different file types)
+  008h 4     Filesize in bytes
+  00Ch 4     Random (or 0 when Filesize=0)
+
+Most of the .DAT file consists of groups of 3 files (with type 01h/40h, 20h and +400h; of which the files with type 20h and 400h may have Size=0=empty).
+
  Type=00000001h Cubemap           ;\either one of these
+  Type=00000040h Cubemap.empty     ;/
+  Type=00000020h Cubemap.overlay?  ;\these have size=0 when unused
+  Type=00000400h Cubemap.sounds    ;/
+
+There are some general purpose files with other types at end of .DAT file:
+
  Type=00000000h Archive with TIMs         (Size=AB74h)  (" RSC3.1V")
+  Type=00000004h Unknown                   (Size=16164h) (00000064h)
+  Type=00000008h Related to DRACULA1.STR   (Size=1000h)  (" RTS1.1V")
+  Type=00001000h Unknown                   (Size=2000h)  ("BXFS1.1V")
+  Type=00008000h Unknown                   (Size=71Dh)   ("  CM1.1V")
+  Type=00020000h Unknown                   (Size=3B9h)   (" GSM0.1V")
+  Type=02000000h Unknown                   (Size=0h)     (empty)
+  Type=00000100h Related to DRACULA1.XA    (Size=1000h)  ("RAAX1.1V")
+  Type=00000010h Unknown                   (Size=450h)   (" HYP0.1V")
+  Type=00100000h Unknown                   (Size=4014h)  (" xFS1.1V") (x=A1h)
+  Type=00000080h Unknown                   (Size=258F4h) (00000010h)
+  Type=00000200h TIM (gui charset)         (Size=6E9Eh)  (TIM)
+  Type=00010000h TIM (gui buttons)         (Size=10220h) (TIM)
+  Type=00040000h Unknown                   (Size=2C4h)   (" TES0.1V")
+  Type=00002000h TIM (gui book pages)      (Size=1040h)  (TIM)
+  Type=00000800h Cubemap ;\as Type 01h,    (Size=4092Ch) (" RIV3.1V")
+  Type=00004000h Cubemap ;/but [10h,14h]=0 (Size=4092Ch) (" RIV3.1V", too)
+
+Type 01h - Cubemap:
+
  000h 8     Name, ASCII, padded with leading spaces (eg. " RIV3.1V")
+  008h 4     Something (0, 1 or 2) (unknown, this isn't number of list entries)
+  00Ch 4     Zero
+  010h 4     Offset to Ext data (ACh)                       ;\ext data
+  014h 4     Size of Ext data (eg. 0 or 84h)                ;/
+  018h 6*4   Offsets to Side 0-5                            ;\cubemap sides
+  030h 6*4   Sizes of Side 0-5 (0, 10220h, or 10820h)       ;/
+  048h 44h   Zerofilled
+  08Ch 20h   Name, ASCII (eg. "DEBUT0.VR", zeropadded)
+  0ACh ..    Ext Data (if any)
+  ...  ..    Cubemap TIM sides (if any)
+ Note: The cubemap TIMs have 100h or 400h colors (in the latter case: 100h  colors for each quarter of the 8bpp bitmap).
+ Note: The TIMs can be arranged as 3D-cubemap with six sides, or as hires
+ 2D-bitmap (composed of four TIMs, and 2 empty TIMs with size=0).
+
+Type 40h - Empty Cubemap:
+
  Same as Type 01h, but size is always 0ACh (and all seven Size entries are 0)
+
+Type 400h - Sound VAG's:
+
  000h 8     Name, ASCII, padded with leading spaces (eg. " XFS0.1V")
+  008h 4     Zero
+  00Ch 4     Number of Files (N) (max 10h)
+  010h N*10h File List (100h bytes, zeropadded when less than 10h files)
+  110h ..    File Data (VAG files)
+ File List entries:
+  000h 4     Unknown (55F0h, 255F0h or 20000h)
+  004h 4     File ID (01010000h, increasing, or other when above=2xxxxh)
+  008h 4     Offset in bytes                                ;\.VAG files
+  00Ch 4     Filesize in bytes                              ;/
+
+Type 20h - Cubemap overlays, polygons, effects or so?:
+
  000h 8      Name, ASCII, padded with leading dot (eg. ".MNA4.1V")
+  008h 4      Zero
+  00Ch 4      Random
+  010h 4      Unknown 01h
+  014h 4      Total Number of 40h-byte blocks (01h..[018h]) (H)
+  018h 4      Total Number of 120h-byte blocks (eg. 1Fh,31h) (N)
+  01Ch 4      Total Number of 1Ch-byte blocks (eg. 1Eh, 50h, F7h) (M)
+  020h 4      Unknown 0 or 1 (in file 4EAh)
+  024h 4      Unknown 01h
+  028h 6*4    Offsets to Side 0-5 (at end of file and up) (or 0)  ;\cubemap
+  040h 6*4    Sizes of Side 0-5   (10220h, or 10820h)     (or 0)  ;/sides
+  058h H*40h  40h-byte blocks
+  ...  N*120h 120h-byte blocks (related to offsets in 40h-byte blocks)
+  ...  M*1Ch  1Ch-byte blocks  (related to offsets in 120h-byte blocks)
+  ...  ..     Unknown data     (related to offsets in 1Ch-byte blocks)
+  ...  ..     Ext data         (related to Ext offsets in 40h-byte blocks)
+  FILE DOES END HERE!
+  (below is allocated in above header, but not actually stored in the file)
+  (maybe allocated as rendering buffer?)
+  ...  -      Cubemap TIM sides
+ The 40h-byte blocks are:
+  000h 20h    Name (eg. "FLAMMES", zeropadded)
+  020h 4      Unknown 01h or 00h
+  024h 4      Offset to 120h-byte blocks (usually 98h, or higher)
+  028h 4      Unknown 00h
+  02Ch 4      Number of 120h-byte blocks (01h..[018h])
+  030h 4      Unknown 01h
+  034h 4      Ext Offset                ;\usually all zero
+  038h 4      Ext Size (3C000h)         ; (except, nonzero in file 4EAh)
+  03Ch 4      Ext Random (checksum?)    ;/
+ The 120h-byte blocks are:
+  000h 18h*4  List with Offsets to 1Ch-byte blocks (usually 4 entries nonzero)
+  060h 18h*4  List with Zeroes
+  0C0h 18h*4  List with Numbers of 1Ch-byte blocks (usually max 4 entries)
+ The 1Ch-byte blocks are:
+  000h 4      Unknown 04h
+  004h 4      Width   20h or 10h
+  008h 4      Height  20h or 10h or 30h
+  00Ch 4      Unknown 60h or 10h
+  010h 4      Unknown 00h or 30h
+  014h 4      Offset to Unknown Data
+  018h 4      Size of Unknown Data (Width*Height*1)
+
+Type 00h - TIMs:
+
  000h 8      Name (" RSC3.1V")
+  008h 8      Zerofilled
+  010h 4      Number of used entries (1Fh) (max 80h)
+  014h 80h*4  Offset List    (offsets to files) (A14h and up)
+  214h 80h*4  Zero List      (zerofilled)
+  414h 80h*4  Size List      (filesizes)
+  614h 80h*4  Width List     (0Ch,18h,34h,2Ch) (in pixels)
+  814h 80h*4  Height List    (0Ch,24h,34h,2Ch)
+  A14h ..     Data (TIM files, with mouse pointers)
+

+

CDROM File Archive Croc 1 (DIR, WAD, etc.)

+

Croc 1 (MagDemo02: CROC\*) (plus more files in retail version)

+

CROCFILE.DIR and CROCFILE.1:
+

 CROCFILE.DIR:
+  000h 4     Number of Entries (N)
+  004h N*18h File List
+  ...  4     Checksum (sum of all of the above bytes)
+ CROCFILE.1:
+  000h ..    File Data (referenced from .DIR)
+ File List entries:
+  000h 0Ch   Filename ("FILENAME.EXT", zeropadded if shorter)
+  00Ch 4     File Size in bytes (can be odd) (including 8 byte for size/chksum)
+  010h 4     File Offset in .1 file (unaligned, can be odd, increasing)
+  014h 4     Zero (0)
+
+CROCFILE.DIR\MP*.MAP (and MAP files inside of MAP*.WAD and MP090-100_*.WAD):
+
  000h 4    Size-8 of whole file (or Size-0 for those in MP*.WAD)
+  004h 4    Flags? (usually 0Ch or 14h)
+  008h 1    Filename length                (including trailing 00h, if any)
+  009h ..   Filename ("P:\CROC\EDITOR\MAPS\..\*.MAP") (+00h in MAP05*.WAD)
+  ...  ..   Unknown
+  ...  1    Description length
+  ...  ..   Description (eg. "Default New Map")
+  ...  ..   Unknown
+  ...  (4)  Checksum of whole file (sum of all bytes) (not in MP*.WAD)
+
+CROCFILE.DIR\.WAD:
+
 MAP*.WAD:
+  000h 4    Size-8 of whole file
+  004h ..   MAP file(s) (each with size/checksum, same format as MP*.MAP)
+  ...  4    Checksum of whole file (sum of all of the above bytes)
+ CROC.WAD, CROCSLID.WAD, EXCLUDE.WAD, MP*.WAD, OPTIONS.WAD, SWIMCROC.WAD:
+  000h 4    Size-8 of whole file
+  004h 4    Offset-8 to SPU-ADPCM data area
+  008h ..   Data File area (model.MOD anim.ANI, bytecode.BIN, header.CVG, etc.)
+  ...  ..   SPU-ADPCM data area (if any, note in CROCSLID.WAD and OPTIONS.WAD)
+  The Data File area contains several "files" but doesn't have any directory
+  with filename/offset/size. The only way to find the separate files seems to
+  be to detect the type/filesize of each file, and then advance to next file
+  (bytecode.BIN files start with a size entry, but files like .MOD or .ANI
+  require parsing their fileheader for computing filesize).
+  Note: The PC version reportedly has .WAD files bundled with .IDX file (that
+  makes it easier to find files and filenames).
+  Note: The STRAT.DIR file contains a list of filenames used in .WAD files
+  (but lacks info on offset/size, so it isn't really useful).
+
+CROCFILE.DIR\
.BIN:
+
 Sound.BIN Files (CROCFILE.DIR\AMBI*.BIN, MAP*.BIN, JRHYTHM.BIN, REVERB.BIN):
+  000h 4    Size of .SEQ file                   ;\if any (not in REVERB.BIN)
+  004h ..   SEQ file (starting with ID "pQES")  ;/
+  ...  4    Size of .VH file                    ;\always present
+  ...  ..   VH file (starting with ID "pBAV")   ;/
+  ...  ..   VB file (sample data, SPU-ADPCM data, up to end of file)
+ Music.BIN files (MAGMUS.BIN, MUSIC.BIN):
+  000h 4      Size-8 of whole file (118h)
+  004h ..     Increasing 32bit values ;sector numbers in PACK*.STR files or so?
+  ...  4      Unknown (2EEh or 258h) (aka 750 or 600 decimal)
+  ...  ..     Zeropadding
+  11Ch 4      Checksum (sum of all of the above bytes)
+  Note: MUSIC.BIN has an extra copy (without chksum) in EXCLUDE.WAD\MUSIC.BIN
+ Ascii.BIN files (CREDITS*.BIN, MNAME.BIN):
+  000h 4      Size-8 of whole file
+  004h (2)    Type or so? (02h,01h) (only in CREDITS*.BIN, not in MNAME.BIN)
+  ...  ..     Ascii strings (each string is: len,"text string",unknown)
+  ...  4      Checksum (sum of all of the above bytes)
+ Texture.BIN files (type 4) (STILLGO.BIN, STILLST.BIN, STILLTL.BIN):
+  000h 2      Type (4=Texture/uncompressed, with 0Eh-byte list entries)
+  002h 1      Zero (maybe Extra6byte as in type 5,6 Texture.BIN files)
+  003h 2      Number of List entries (N) (always 4B0h in all three files)
+  005h 2      Number of Texture Pages (usually 2)
+  007h 2      Zero (maybe Unknown/Animation as in type 5,6 Texture.BIN files)
+  009h N*0Eh  Polygon List (?,?,?,?,?,?, x1,y1, x2,y1, x1,y2, x2,y2)
+  ...  40000h Texture Page uncompressed data (two pages, 20000h bytes each)
+  ...  4      Checksum (sum of all of the above bytes)
+ Texture.BIN files (type 5,6) (ENDTEXT*.BIN, FONT.BIN, FRONTEND.BIN,
+ OUTRO.BIN, PUBLISH.BIN, STILL*.BIN, TB*.BIN, TK*.BIN, TPAGE213.BIN):
+  000h 4      Zero (0)               (in TPAGE213.BIN: Size-8 of whole file)
+  004h 2      Type (6=Texture/RLE16) (in TPAGE213.BIN: 5=Texture/uncompressed)
+  006h 1      Extra6byte flag/size (0=None, 3=Extra6byte: TB*.BIN, TPAGE*.BIN)
+  ...  (6)    Extra6byte data (unknown purpose, only present when [006h]=3)
+  ...  2      Number of Polygon List entries (N)
+  ...  2      Number of Texture Pages (usually 1) (in TK*_ENM.BIN: usually 2)
+  ...  2      Number of Unknown Blocks (0=None, or 1,2,4,8)
+  ...  (..)   Unknown Block(s), if any
+  ...  2      Number of Animation Blocks (0=None)
+  ...  (..)   Animation Block(s), if any
+  ...  N*0Ch  Polygon List (?,?,?,?, x1,y1, x2,y1, x1,y2, x2,y2)  ;x,y or y,x?
+  ...  (4)    Texture Page compressed size (T1) ;\only when [004h]=Type=6
+  ...  (T1)   Texture Page compressed data      ;/
+  ...  (4)    Texture Page compressed size (T2) ;\only when [004h]=Type=6
+  ...  (T2)   Texture Page compressed data      ;/     and NumPages=2
+  ...  20000h Texture Page uncompressed data    ;-only when [004h]=Type=5
+  ...  4      Checksum (sum of all of the above bytes)
+  Unknown Block(s):
+  (Unknown purpose, each Unknown Block has the format shown below)
+  000h 2    Unknown (looks like some index value, different for each entry)
+  002h 2    Number of Unknown Items (eg. 1 or 2 or 4)
+  004h ..   Unknown Items (NumItems*6 bytes) (three halfwords each?)
+  Animation Block(s):
+  (This is supposedly used to update portions of the Texture Page for
+  animated textures, each Animation Block has the format shown below)
+  000h 2    Number of Bitmap Frames in this Animation (usually 8)
+  002h 2    Bitmap Width (in halfword units)
+  004h 2    Bitmap Height
+  006h 2    Unknown (1 or 3)                    ;\
+  008h 2    Unknown (C10h, CC8h, 1E8h, or xxxh) ; maybe vram X,Y address?
+  00Ah 2    Unknown (0)                         ;/
+  00Ch ..   Bitmap Frames (Width*2*Height*NumFrames bytes, uncompressed)
+  Croc 1 RLE16 compression:
+  This is using unsigned little-endian 16bit LEN/DATA pairs, LEN can be:
+   0000h..7FFFh --> Load one halfword, fill 1..8000h halfwords
+   8000h..FFFFh --> Copy 1..8000h uncompressed halfwords
+  BUG: Texture pages should be 20000h bytes (256x256 halfwords), but for
+  whatever reason, the size of decompressed data can be 1FFEAh, 1FFF0h,
+  1FFFAh, 20000h, or 20002h.
+ Bytecode.BIN (inside of .WAD files):
+  000h 4    Size of whole file
+  004h ..   Whatever bytecode (starting with initial 16bit program counter?)
+ Unknown.BIN (last 1-2 file(s) in EXCLUDE.WAD file):
+  000h 4     Number of entries (N)
+  004h N*18h Whatever
+  ...  4     Checksum (sum of above bytes)
+  Unknown purpose, retail version has one such file (with 0Ah entries), demo
+  version has two such files (with 0Ah and 4Eh entries. The files start with:
+  0A,00,00,00,00,00,00,00,00,00,64,00,00,00,EB,FF,...  ;demo+retail
+  4E,00,00,00,00,00,64,00,00,00,50,00,00,00,64,00,...  ;demo
+
+CROCFILE.DIR\.MOD
+
 Demo version has one .MOD file in CROCFILE.DIR (retail has more such files):
+  000h 2     Number of Models (N) (1 or more) (up to ECh exists)     ;\header
+  002h 2     Flags (0 or 1)                                          ;/
+  004h N*Var SubHeadersWithData  ;see below                          ;-data
+  ...  4     Checksum (sum of all of the above bytes)                ;-checksum
+  SubHeadersWithData(N*Var):
+  004h 4     Radius                                                  ;\
+  008h 48h   Bounding Box[9*8] (each 8byte are 4x16bit: X,Y,Z,0)     ; for each
+  050h 4     Number of Vertices (V)                                  ; model
+  054h V*8   Vectors (4x16bit: X,Y,Z,0)                              ;
+  ...  V*8   Normals (4x16bit: X,Y,Z,0)                              ;
+  ...  4     Number of Faces (F) (aka Polygons?)                     ;
+  ...  F*14h Faces   (8x16bit+4x8bit: X,Y,Z,0,V1,V2,V3,V4, Tex/RGB)  ;
+  ...  2     Number of collision info 1? (X)     ;\                  ;
+  ...  2     Number of collision info 2? (Y)     ; only if           ;
+  ...  X*2Ch Collision info 1?                   ; Flags.bit0=1      ;
+  ...  Y*2Ch Collision info 2?                   ;/                  ;/
+ There are further .MOD models inside of .WAD files, with slightly
+ re-arranged entries (and additional reserved/garbage fields):
+  000h 2     Number of Models (N) (1 or more) (up to ECh exists)     ;\
+  002h 2     Flags (0 or 1)                                          ; header
+  004h 4     Reserved/garbage (usually 224460h) (or 22C9F4h/22DF54h) ;/
+  008h (4)   Number of Models WITH Data arrays (M)                   ;\
+  00Ch (M*2) Model Numbers WITH Data arrays (increasing, 0..N-1)     ; ext.hdr
+  ...  (..)  Padding to 4-byte boundary (garbage, usually=M)         ;/
+  ...  N*68h Subheader(s)   ;see below                               ;-part 1
+  ...  N*Var DataArray(s)   ;see below                               ;-part 2
+  Subheaders(N*68h):
+  000h 4     Radius                                                  ;\
+  004h 48h   Bounding Box[9*8] (each 8byte are 4x16bit: X,Y,Z,0)     ; for each
+  04Ch 4     Number of Vertices (V)                                  ; model
+  050h 4     Reserved/garbage (usually 0022xxxxh)                    ;
+  054h 4     Reserved/garbage (usually 0022xxxxh)                    ;
+  058h 4     Number of Faces (F) (aka Polygons?)                     ;
+  05Ch 4     Reserved/garbage (usually 0022xxxxh)                    ;
+  060h 2     Number of collision info1? (X)                          ;
+  062h 2     Number of collision info2? (Y)                          ;
+  064h 4     Reserved/garbage (usually 0022xxxxh) or xxxxxxxxh)      ;/
+  DataArrays(N*Var) with sizes V,F,X,Y from corresponding Subheader:
+  (if ext.hdr is present, then below exists only for models listed in ext.hdr)
+  000h V*8   Vectors (4x16bit: X,Y,Z,0)                              ;\
+  ...  V*8   Normals (4x16bit: X,Y,Z,0)                              ; for each
+  ...  F*14h Faces   (8x16bit+4x8bit: X,Y,Z,0,V1,V2,V3,V4, Tex/RGB)  ; model
+  ...  X*2Ch Collision info 1?                                       ;
+  ...  Y*2Ch Collision info 2?                                       ;/
+ The ext.hdr mentioned above exists only in some .MOD files (usually in one of
+ the last chunks of MP*.WAD). Files with ext.hdr have N>1, Flags=1 (but files
+ without ext.hdr can also have those settings). Files with ext.hdr do usually
+ have uncommon garbage values at hdr[4], which isn't too helpful for detection.
+ The only way to detect models with ext.hdr seems to be to check if the ext.hdr
+ contains valid increasing entries in range 0..N-1.
+ WAD's that do contain a model with ext.hdr do usually also contain an extra
+ 100h-byte file, that file contains N bytes for model 0..N-1 (plus zeropadding
+ to 100h-byte size), the bytes are supposedly redirecting models without Data
+ Arrays to some other data source.
+ The 100h-byte files don't have any header or checksum, they contain up to 9Ch
+ entries (so there's always some zeropadding to 100h), the existing 100h-byte
+ files contain following values in first 4 bytes (as 32bit value):
+  04141401h, 0C040017h, 01010101h, 09030503h, 0A0B0A0Bh, 03020102h, 0C060900h,
+  00060501h, 04040201h, 01010203h, 01030201h, 05000302h, 0C040317h, or Zero.
+  To distinguish from other files: BIN/MAP files start with a 4-byte aligned
+  Size value; if Size=0 or (Size AND 3)>0 or Size>RemainingSize then it's
+  probably a 100h-byte file. Best also check if last some bytes are zeropadded.
+ Exceptions:
+  Retail MP090..MP100_*.WAD has model with ext.hdr, but no 100h-byte file
+  Demo MP041_00.WAD has model with ext.hdr, with zerofilled 100h-byte file
+ Note: Some models have ALL models listed in ext.hdr (which is about same as
+ not having any ext.hdr at all; except, they ARE bundled with 100h-byte file).
+
+CROCFILE.DIR\MP*.DEM
+
 Some (not all) MP*.WAD files are bundled with MP*.DEM files, supposedly
+ containing data for demonstration mode. There are two versions:
+  demo version:   size 2584h (9604 decimal) (some files with partial checksum)
+  retail version: size 0E10h (3600 decimal) (without checksum)
+
+CROCFILE.DIR\CROCWALK.ANI:
+
 Animation data, there is only one such file in CROCFILE.DIR:
+  000h 2       Value (100h)
+  002h 2       Number of Triggers (T) (2)
+  004h (T*2)   Trigger List (with 2x8bit entries: FrameNo, TriggerID)
+  ...  ..      Probably, Padding to 4-byte boundary (when T=odd)
+  ...  4       Number of entries 1 (X)
+  ...  X*18h   Whatever Array 1
+  ...  4       Number of entries 2 (Y) (usually/always 64h)
+  ...  X*Y*4   Whatever Array 2
+  ...  4       Number of entries 3 (Z) (usually/always 0Ah)
+  ...  X*Z*18h Whatever Array 3
+ There are further .ANI files inside of .WAD files:
+  000h 2       Value (100h or 200h)                         ;Animation Speed?
+  002h 2       Number of Triggers (T) (0, 1, 2, 3, 5, or 9)
+  004h 4       Garbage/Pointer (usually 224460h) (or zero)
+  008h 4       Number of entries 1 (X) (1 or more)          ;Num Frames
+  00Ch 4       Garbage/Pointer (usually 22C9F4h) (or 224460h or 22DF54h)
+  010h 4       Number of entries 2 (Y) (usually 64h) (or 0) ;Num Vertices (?)
+  014h 4       Garbage/Pointer
+  018h 4       Number of entries 3 (Z) (usually 0Ah) (or 6 or 9)
+  01Ch 4       Garbage/Pointer
+  020h (T*2)   Trigger List (with 2x8bit entries: FrameNo, TriggerID)
+  ...  ..      Padding to 4-byte boundary (garbage, usually=X)
+  ...  X*18h   Whatever Array 1
+  ...  X*4     Garbage/Pointers (0021EE74h,0021EE74h,xxx,...)
+  ...  X*Y*4   Whatever Array 2   ;Vertex 3x10bit?            ;only if Y>0
+  ...  (X*4)   Garbage/Pointers (0021EE74h,0021EE74h,xxx,...) ;only if Y>0
+  ...  X*Z*18h Whatever Array 3
+
+CROCFILE.DIR\TCLD.CVG:
+
 There is only one such file in CROCFILE.DIR:
+  000h 4      Size-8 of whole file
+  004h 4      Unknown (0)
+  008h 4      Unknown (1)
+  00Ch ..     SPU-ADPCM data
+  ...  4      Checksum (sum of all of the above bytes)
+ There are further .CVG files inside of .WAD files, these consist of two
+ parts; 0Ch-byte Headers (in the data file area), and raw SPU-ADPCM data
+ (in the spu-adpcm data area at end of the .WAD file):
+  Header(0Ch):
+  000h 4      Size+8 of data part
+  004h 4      Unknown (0)
+  008h 4      Unknown (0 or 1)
+  Data(xxxx0h):
+  000h ..     SPU-ADPCM data (starting with sixteen 00h bytes)
+
+STRAT.DIR (in retail version with extra copy in CROCFILE.DIR\STRAT.DIR):
+
 This file contains a list of filenames for files inside of .WAD files, but
+ it does NOT tell where those files are (in which WAD at which offset).
+  000h 4     Number of Entries (N)
+  004h N*xxh File List (retail=14h bytes, or demo=18h bytes per entry)
+  ...  4     Checksum (sum of all of the above bytes)
+ List entries are:
+  demo:   entrysize=18h  ;Filename(0Ch)+Size(4)+Zeroes(8)
+  retail: entrysize=14h  ;Filename(0Ch)+        Zeroes(8)
+ The list contains hundreds of filenames, with following extensions:
+  *.BIN  byte-code strategies
+  *.MOD  models
+  *.ANI  animations
+  *.CVG  spu-adpcm voice data
+ These "filenames" seem to be actually solely used as "memory handle names":
+  MemoryHandle(#1) = LoadFile("FILENAME.BIN")  ;<-- names NOT used like this
+  MemoryHandle("FILENAME.BIN") = LoadFile(#1)  ;<-- names used like this
+
+PACK*.STR (retail version only):
+
  Huge files with XA-ADPCM audio data
+
+MAGMUS.STR (demo version only):
+
  Huge mis-mastered 24Mbyte file (contains several smaller XA-ADPCM blocks,
+  accidentally stored in 800h-byte FORM1 data sectors, instead of 914h-byte
+  FORM2 audio sectors).
+
+ARGOLOGO.STR, FOXLOGO.STR
+
  MDEC movies
+
+COPYRIGHT.IMG, WARNING.IMG
+
  Raw bitmaps (25800h bytes, uncompressed, 320x240x16bpp)
+
+CUTS\
.AN2 (looks like cut-scenes with polygon-streaming):
+CDROM File Video Polygon Streaming
+Note: MOD/ANI files contain many Reserved/Garbage/Pointer entries which are +replaced by pointers after loading (the initial values seem to have no purpose; +they are aften set to constants with value 002xxxxxh which could be useful for +file type detection, but they vary in different game versions).
+See also:
+https://github.com/vs49688/CrocUtils/ (for PC version, PSX support in progress)

+

CDROM File Archive Croc 2 (DIR, WAD, etc.)

+

Croc 2 (MagDemo22: CROC2\CROCII.DIR\T*.WAD+DEM)

+

Disney's The Emperor's New Groove (MagDemo39: ENG\KINGDOM.DIR\T*.WAD+DEM)

+

Disney's Aladdin in Nasira's Rev. (MagDemo46: ALADDIN\ALADDIN.DIR\T*.WAD+DEM)

+

Alien Resurrection, and Harry Potter 1 and 2 ... slightly different format?

+

Overall .WAD format:
+

  000h 4      Total Filesize+/-xx (-4 or +800h or +1800h)
+  004h 4+4+.. XSPT Chunk        ;Textures
+  ...  4+4+.. XSPS Chunk        ;SPU-ADPCM Sound (if any, not in all .WAD's)
+  ...  4+4+.. XSPD Chunk        ;...whatever Data...?
+  ...  4+4    DNE Chunk         ;End marker (in Harry Potter: with data!)
+
+XSPT Chunk (Textures):
+
  000h 4        Chunk Name "XSPT" (aka TPSX backwards)
+  004h 4        Chunk Size (excluding 8-byte Name+Size)
+  008h 4        Chunk Flags (02h or 06h or 0Eh)  ;02h in Croc 2
+  00Ch (20h)    Name (eg. "Default new map", zeropadded)  ;\if Flags bit2=1
+  ...  (804h)   Unknown ... SAME as in XSPD chunk !!!     ;/
+  ...  4        Number of List 1 entries (N1) (xxh..xxxh) ;\
+  ...  4        Number of Texture Pages (1..4)            ; List 1 and NumPages
+  ...  N1*0Ch   List 1 Whatever (6B 2F xx 00..)           ;/
+  ...  4        Number of List 2 entries (N2) (0..xxh)    ;\
+  ...  4        Unknown (2 or 7)                          ; List 2
+  ...  N2*04h   List 2 Whatever (halfwords?) (if N2>0)    ;/
+  ...  (5*C00h) Whatever, 5*C00h, Palette+Stuff?          ;-if Flags bit3=1
+  ...  ..       RLE16 compressed Texture Pages            ;-Texture bitmap
+ RLE16 Texture notes:
+  Compressed data consists of signed little-endian 16bit LEN+DATA pairs:
+   LEN=0000h        --> invalid/unused
+   LEN=0001h..7FFFh --> copy LEN halfwords from src
+   LEN=8000h..FFFFh --> load ONE halfword as fillvalue, fill -LEN halfwords
+  Compressed size is everything up to end of XSPT chunk
+  Decompressed size is 20000h*NumTexturePages (=20000h,40000h,60000h or 80000h)
+  That is: Width=256 halfwords, height 256*NumTexturePages lines. There seems
+  to be only one RLE16 compression block for all Texture Pages, rather than one
+  RLE16 block for each Page.
+ BUG #1: Decompressed data in Aladding/Emperor does often contain only
+  1FFFEh,3FFFEh,5FFFEh,7FFFEh bytes (the decompressed data has correct size
+  when appending ONE halfword with random/zero value).
+ BUG #2: Compressed data in Croc 2 ends with a RLE16 length value (-LEN), but
+  lacks the corresponding RLE16 filldata (the decompressed data is 7FFFEh when
+  filling those LEN halfwords with random/zero values).
+
+XSPS Chunk (SPU-ADPCM Sound) (if any, isn't present in all .WAD files):
+
  000h 4      Chunk Name "XSPS" (aka SPSX backwards)       ;\
+  004h 4      Chunk Size (excluding 8-byte Name+Size)      ; header
+  008h 4      Chunk Flags (0 or 3 or 7)                    ;/
+  00Ch 4      Number of Sounds (N1) (1..xxh)               ;\always present
+  010h N1*14h Sound List                                   ;/
+  ...  (4)     VAB/VH Size                                 ;\if Flags=3 or 7
+  ...  (..)    VAB/VH Header                               ;/   (bit0 or bit1?)
+  ...  (4)     Unknown (2 or 4)                            ;-if Flags=3 or 7
+  ...  (4)     Whut (N2)                                   ;\if Flags.bit2=1
+  ...  (N2*10h) Whut List (4 words: xxh,10h,xxxx00h,xxxx0h);/
+  ...  4       Size of all Part 1 Sound Data blocks               ;\always
+  ...  ..      SPU-ADPCM Sound Data (referenced from Sound List)  ;/
+  ...  (4)     Size of all Part 2 Sound Data blocks (+8)          ;\if Flags=
+  ...  (..)    SPU-ADPCM Sound Data (referenced from Sound List?) ;    3 or 7
+  ...  (8)     Zero                                               ;/
+ Sound List entries (as in FESOUND.WAD):
+  000h 4    Sample Rate in Hertz (AC44h=44100Hz, 5622h=22050Hz, 3E80h=16000Hz)
+  004h 2    Sample Rate Pitch    (1000h=44100Hz, 0800h=22050Hz, 05CEh=16000Hz)
+  006h 2    Unknown (7Fh)
+  008h 4    Unknown (1)          (1)               (8)
+  00Ch 4    Unknown (42008Fh)    (1FC0001Fh)       (40008Fh)
+  010h 4    Filesize             (xxx0h)           (xxx0h)
+
+XSPD Chunk:
+
  000h 4     Chunk Name "XSPD" (aka DPSX backwards)
+  004h 4     Chunk Size (excluding 8-byte Name+Size)
+  008h 4     Flags-and/or-other stuff ? (eg. 00000094h or 0A801094h)
+  00Ch 804h  Unknown ... SAME as in XSPT chunk !!!
+  810h ..    Unknown ...
+
+DNE Chunk (End marker):
+
  000h 4     Chunk Name " DNE" (aka END backwards)
+  004h 4     Chunk Size (0)           (except, in Harry Potter: nonzero)
+  ...  ..    Data (usually none such) (except, in Harry Potter: with data!)
+
+Additional DEM files (always 1774h bytes) (if any, not all .WAD's have .DEM's):
+
  000h 4     Number of entries (N) (always 2EEh, aka 750 decimal)
+  004h N*8   Whatever entries... maybe data for demonstration mode?
+
+See also:
+http://wiki.xentax.com/index.php/Argonaut_WAD

+

CDROM File Archive Headerless Archives

+

Headerless Archives

+

Some games use files that contain several files badged together. For example,
+

  PSX Resident Evil 2, COMMON\DATA\*.DIE contains TIM+VAB badged together
+  PSX Resident Evil 2, COMMON\DATA\*.ITP contains 1000h-byte aligned TIMs
+  Blaster Master, DATA\MENU\*\*.PRT contains three smaller TIMs badged together
+  Blaster Master, DATA\MENU\*\*.BG contains three bigger TIMs badged together
+  Misadventures of Tron Bonne, KATWA\*.BIN contains headerless archives (with TIMs and audio)
+  Headerless BSS files contain several BS files with huge padding inbetween
+
+To some level one could detect & resolve such cases, eg. TIM contains +information about the data block size(s), if the file is bigger, then there may +be further file(s) appended.
+Some corner cases may be: Files with odd size may insert alignment padding +before next file. Archives with 800h-byte filesize resolution will have +zeropadding (or garbage) if the real size isn't a mutiple of 800h. Regardless +of that two cases, archives may use zeropadding to 800h-byte or even +10000h-byte boundaries (as workaround one could skip zeroes until reaching a +well-aligned nonzero word or double word (assuming that most files start with +nonzero values; though not always, eg. raw ADPCM or raw bitmaps).

+

CDROM File Compression

+

Compressed Bitmaps

+
  .BS used by several games (and also in most .STR videos)
+  .GIF used by Lightspan Online Connection CD
+  .JPG used by Lightspan Online Connection CD
+  .BMP with RLE4 used by Lightspan Online Connection CD (MONOFONT, PROPFONT)
+  .BMP with RLE8+Delta also used by Online Connection CD (PROPFONT\ARIA6.BMP)
+  .PCX with RLE used by Jampack Vol. 1 (MDK\CD.HED\*.pcx)
+  .PCX with RLE used by Hot Wheels Extreme Racing (MagDemo52: US_01293\MISC\*)
+  .PCX with RLE used by Metal Gear Solid (slightly corrupted PCX files)
+
+

Compressed Audio

+
  .XA uses XA-ADPCM (and also used in .STR videos)
+  .VAG .VB .VAB uses SPU-ADPCM
+
+

Compressed Files

+

CDROM File Compression LZSS (Moto Racer 1 and 2)
+CDROM File Compression LZSS (Dino Crisis 1 and 2)
+CDROM File Compression LZSS (Serial Experiments Lain)
+CDROM File Compression ZOO/LZSS
+CDROM File Compression Ulz/ULZ (Namco)
+CDROM File Compression SLZ/01Z (chunk-based compressed archive)
+CDROM File Compression LZ5 and LZ5-variants
+CDROM File Compression PCK (Destruction Derby Raw)
+CDROM File Compression GT-ZIP (Gran Turismo 1 and 2)
+CDROM File Compression GT20 and PreGT20
+CDROM File Compression HornedLZ
+CDROM File Compression LZS (Gundam Battle Assault 2)
+CDROM File Compression BZZ
+CDROM File Compression RESOURCE (Star Wars Rebel Assault 2)
+CDROM File Compression TIM-RLE4/RLE8
+CDROM File Compression RLE_16
+CDROM File Compression PIM/PRS (Legend of Mana)
+CDROM File Compression BPE (Byte Pair Encoding)
+CDROM File Compression RNC (Rob Northen Compression)
+CDROM File Compression Darkworks
+CDROM File Compression Blues
+CDROM File Compression Z (Running Wild)
+CDROM File Compression ZAL (Z-Axis)
+CDROM File Compression EA Methods
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)
+CDROM File Compression LArc/LHarc/LHA (LZS/LZH)
+CDROM File Compression UPX
+CDROM File Compression LZMA
+CDROM File Compression FLAC audio
+Some other archvies that aren't used by any PSX games, but, anyways...
+CDROM File Compression ARJ
+CDROM File Compression ARC
+CDROM File Compression RAR
+CDROM File Compression ZOO
+CDROM File Compression nCompress.Z
+CDROM File Compression Octal Oddities (TAR, CPIO, RPM)
+CDROM File Compression MacBinary, BinHex, PackIt, StuffIt, Compact Pro

+

Compressed Archives

+

Some Archives have "built-in" compression.
+CDROM File Archive WAD (Doom)
+CDROM File Archive BIGFILE.DAT (Gex - Enter the Gecko)

+

CDROM File Compression LZSS (Moto Racer 1 and 2)

+

Moto Racer 1 ("LZSS" with len+2) (MagDemo03: MRDEMO\IMG\*.TIM)

+

Moto Racer 2 ("LZSS" with len+3) (MagDemo16: MR2DEMO\IMG\*.TIM and .TPK)

+

  000h 4     ID "LZSS"
+  004h 4     Decompressed Size
+  008h ..    Compressed Data
+
+This LZSS variant is unusually using 6bit len and 10bit disp. And, there are +two versions: Moto Racer 1 uses len+2, and Moto Racer 1 uses len+3. There is no +version information in the header, one workaround is to decompress the whole +file with len+2, and, if the resulting size is too small, retry with len+3. +Observe that the attempt with len+2 may cause page faults (eg. if the sum of +len values is smaller than disp; so allocate some extra space at begin of +compression buffer, or do error checks),
+
  @@collect_more:
+   flagbits=[src]+100h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   flagbits=flagbits SHR 1
+   if zero then goto @@collect_more
+   if carry=1 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     disp=([src]+[src+1]*100h) AND 3FFh, len=([src+1]/4)+2_or_3, src=src+2
+     if disp=0 then goto @@decompress_done
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+

+

CDROM File Compression LZSS (Dino Crisis 1 and 2)

+

Dino Crisis 1 and 2 (PSX\DATA\*.DAT and *.DBS and *.TEX, File type 7,8)

+

Dino Crisis LZSS Decompression for files with type 7 and 8:
+

  @@collect_more:
+   flagbits=[src]+100h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   flagbits=flagbits SHR 1
+   if zero then goto @@collect_more
+   if carry=1 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     disp=[src]+[src+1]*100h AND FFFh, len=[src+1]/10h+2, src=src+2
+     if disp=0 then error
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   if src<src_end then goto @@decompress_lop
+   ret
+
+The compressed file & archive header don't contain any info on the +decompressed size (except, for compressed bitmaps, the archive header does +contain width/height entries, nethertheless the decompressed file is usually +BIGGER then width*height*2 (it can contain padding, plus 8 bytes).

+

CDROM File Compression LZSS (Serial Experiments Lain)

+

Serial Experiments Lain is using LZSS compression for TIMs (in SITEA.BIN, +SITEN.BIN), and for Transparency Masks (in LAPKS.BIN).

+

Serial Experiments Lain (7MB SITEA.BIN on Disc 1, 5MB SITEB.BIN on Disc 2)

+

These are huge 5-7 Mbyte files with hundreds of chunks. Each chunk contains one +compressed TIM.
+

 Each chunk is having this format:
+  000h 4     Chunk ID "napk"
+  004h 4     Decompressed size
+  008h ..    LZSS compressed TIM data
+  ...  ..    Zeropadding to 800h-byte boundary
+
+Unknown how the game is accessing chunks (there is no chunk size info, so one +would need read the whole file (or at least first 4-byte of each 800h-byte +sector) for finding chunks with ID="napk").

+

Serial Experiments Lain (LAPKS.BIN on Disc 1 and 2)

+

This a huge 14Mbyte file with 59 chunks. Each chunk contains one or more 24bpp +.BS images with black background (the images in each chunk are forming a short +animation sequence; width/height may vary because all images are cropped to +rectangles containing non-black pixels).
+

 Each chunk is having this format:
+  000h 4     Chunk ID "lapk"
+  004h 4     Chunk size (excluding 8-byte chunk header, excluding zeropadding)
+  008h 4     Number of Files in this Chunk (N)
+  00Ch N*0Ch File List
+  ...  ..    File Data (bitmaps in .BS v0 format with uncommon headers)
+  ...  ..    Zeropadding to 800h-byte boundary
+ File List entries:
+  000h 4     Offset in bytes (zerobased, from begin of File Data area)
+  004h 2     Bitmap Width/2 + some 3bit value in LSBs?
+  006h 2     Bitmap Height
+  00Ch 4     Zero
+ File Data (bitmaps in .BS v0 format with uncommon headers):
+  000h 2     Bitmap Width
+  002h 2     Bitmap Height
+  004h 2     Quant for Y1,Y2,Y3,Y4
+  006h 2     Quant for Cr,Cb
+  008h 4     Size of compressed BS Bitstream plus 4 ;Transparency at [008h]+0Ch
+  00Ch 2     Size/2 of MDEC data (after huffman decompression, without padding)
+  00Eh 2     BS Version (0) (actually MSBs of above Size, but it's always 0)
+  010h ..    BS Bitstream with DC and AC values (Huffman compressed MDEC data)
+  ...  4     Transparency Mask Decompressed Size (Width*Height*2/8) (=2bpp)
+  ...  ..    Transparency Mask LZSS-compressed data
+
+BUG: The chunksize at C3A800h is set to 4C614h but should be 4D164h (the next +chunk starts at C88000h).
+Unknown how the game is accessing chunks (crawling all chunks would be +exceptionally slow due to CDROM seek times, and won't work with the BUGGED +chunksize).

+

Decompression function

+

This LZSS variant is unusually using 8bit len and 8bit disp.
+

   dst_end=dst+[src], src=src+4   ;decompressed size
+  @@collect_more:
+   flagbits=([src] SHL 24)+800000h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   if dst=dst_end then goto @@decompress_done
+   flagbits=flagbits SHL 1    ;32bit shift with carry-out/zeroflag
+   if zero then goto @@collect_more
+   if carry=0 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     disp=[src]+1, len=[src+1]+3, src=src+2
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+

+

CDROM File Compression ZOO/LZSS

+

Jarret & LaBonte Stock Car Racing (MagDemo38: WTC\*.ZOO)

+

  0000h 4     Decompressed Size                          ;\1st sector
+  0004h 7FCh  Garbage                                    ;/
+  0800h 4     Decompressed Size (same as above)          ;\2nd sector
+  0804h 7FCh  LZSS compressed data, part 1               ;/
+  1000h 800h  LZSS compressed data, part 2               ;-3rd sector
+  1800h 800h  LZSS compressed data, part 3               ;-4th sector
+  ...   ..    etc.
+
+Note: The file format & compression method is unrelated to ZOO archives (to +distinguish between the formats: ZOO archives have [0014h]=FDC4A7DCh, the +ZOO/LZSS files have [0014h]=Garbage).
+The decompressed WTC\*.ZOO files can contain large TIMs, or chunk-based +archives (where each chunk can contain one or more small TIMs), or other stuff.

+

Decompression function

+
  decompress_file:
+   if LittleEndian32bit[src+14h]=FDC4A7DCh then goto error ;refuse ZOO archives
+   if LittleEndian32bit[src]<>LittleEndian32bit[src+800h] then goto error
+   curr=src+800h
+   src=curr+4
+  @@sector_lop:
+   call decompress_sector
+   curr=curr+800h
+   src=curr
+   if src<src_end then goto @@sector_lop
+   ret
+  ;---
+  decompress_sector:
+  @@collect_more:
+   flagbits=([src] SHL 24)+800000h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   flagbits=flagbits SHL 1    ;32bit shift with carry-out/zeroflag
+   if zero then goto @@collect_more
+   if carry=0 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     disp=[src]*100h+[src+1], src=src+2
+     if disp=FFFFh then goto @@decompress_done
+     len=(disp/800h)+3, disp=(disp AND 7FFh)+1
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+
+

CDROM File Compression Ulz/ULZ (Namco)

+

Ulz/ULZ uses fairly normal LZSS compression, unusually with variable Len/Disp +ratio, three separate data streams (flg/lz/dta), and rather weird end check in +version=0.

+

Ulz Format (Ace Combat 3 Electrosphere, Namco)

+

Ulz Format (Klonoa, MagDemo08: KLONOA\FILE.IDX\*)

+

  000h 4    ID ("Ulz",1Ah) (parts lowercase)
+  004h 3    Decompressed Size in bytes
+  007h 1    Version (0 or 2)
+  008h 3    Offset to Uncompressed data   <-- reportedly can be 0 in version=0?
+  00Bh 1    Number of Disp bits (DispBits=N, LenBits=16-N) (usually 0Ah..0Dh)
+  00Ch 4    Offset to Compressed data
+  010h ..   Compression Flags   (32bit entries)
+  ...  ..   Uncompressed data   (8bit entries)
+  ...  ..   Zeropadding to 4-byte boundary
+  ...  ..   Compressed data     (16bit entries)
+
+Most files use version=2 (eg. US:ACE.BPH\0006h\000Fh contains DOT1 with TIMs).
+Some files use version=0 (eg. US:ACE.BPH\0048h\\ contains TIMs).

+

ULZ Format (Time Crisis, Namco)

+

  000h 4    ID ("ULZ",1Ah) (all uppercase)
+  004h 2    Zero
+  006h 1    Version (0 or 2)
+  007h 1    Number of Disp bits (DispBits=N, LenBits=16-N) (usually 0Ah..0Dh)
+  008h 4    Offset to Uncompressed data
+  00Ch 4    Offset to Compressed data
+  010h 4    Decompressed Size in bytes
+  014h ..   Compression Flags   (32bit entries)
+  ...  ..   Uncompressed data   (8bit entries)
+  ...  ..   Zeropadding to 4-byte boundary
+  ...  ..   Compressed data     (16bit entries)
+
+Most files use version=2 (eg. EUR: AD*\TIM*.FHT\*)
+Some files use version=0 (eg. EUR: AD4\TIM0_0.FHT\0018h, 0019h)

+

Ulz/ULZ Decompression Function

+

  if [src+00h]="Ulz",1Ah then
+    version   = Byte[src+07h]
+    disp_bits = Byte[src+0Bh]
+    dst_end   = LittleEndian24bit[src+04h] + dst
+    src_dta   = LittleEndian24bit[src+08h] + src
+    src_lz    = LittleEndian32bit[src+0Ch] + src
+    src_flg   = src + 10h
+    add_len   = 3
+    flg_1st   = 31  ;process flag bit31 first
+  if [src+00h]="ULZ",1Ah then
+    version   = Byte[src+06h]
+    disp_bits = Byte[src+07h]
+    src_dta   = LittleEndian32bit[src+08h] + src
+    src_lz    = LittleEndian32bit[src+0Ch] + src
+    dst_end   = LittleEndian32bit[src+10h] + dst
+    src_flg   = src + 14h
+    add_len   = 2
+    flg_1st   = 0   ;process flag bit0 first
+  collected = 80000000h   ;initially empty, plus stop bit
+ @@decompress_lop:
+  if version=2 AND dst=dst_end then goto @@decompress_done
+  flag = collected AND 80000000h
+  collected=collected*2
+  if collected=0
+    collected = LittleEndian32bit[src_flg], src_flg=src_flg+4
+    if flg_1st=0 then ReverseBitOrder(collected)  ;or make custom/faster code
+    flag = collected AND 80000000h
+    if version=0 AND collected=0 then goto @@decompress_done
+    if version=0 then collected=collected*2       ;<-- has implied stop bit
+    if version=2 then collected=collected*2 + 1   ;<-- shift-in stop bit
+  if flag=0     ;compressed
+    disp = LittleEndian16bit[src_lz], src_lz=src_lz+2
+    len  = (disp SHR disp_bits) + add_len
+    disp = (disp AND ((1 shl disp_bits)-1)) + 1
+    for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+  else          ;uncompressed
+    [dst]=[src_dta], dst=dst+1, src_dta=src_dta+1
+  goto @@decompress_lop
+ @@decompress_done:
+  ret
+
+Note: Version=2 has 32 flags per 32bit. Version=0 has 31 flags and 1 stop bit +per 32bit, plus 32 null bits at end of data (which is all rather wasteful, +there's no good reason to use version=0).

+

CDROM File Compression SLZ/01Z (chunk-based compressed archive)

+

SLZ/01Z files are Chunk-based archives with one or more compressed chunk(s).
+Used by Hot Shots Golf 2 (retail: DATA\F0000.BIN\, MagDemo31/42: +HSG2\MINGOL2.BIN\)

+

SLZ/01Z chunk headers

+

The archive consists of Chunk(s) in following format:
+

  000h 3     ID (either "01Z" or "SLZ", both are used)
+  003h 1     Method (00h=Uncompressed, 01h=LZSS, 02h=LZSS+FILL)
+  004h 4     Compressed size (SIZ) (same as decompressed when Method=0)
+  008h 4     Decompressed size
+  00Ch 4     Distance to next chunk, if any (SIZ+10h+Align4, or 0=None)
+  010h SIZ   Compressed data
+

+

SLZ/01Z decompression function:

+
   method=byre[src+3]
+   len=word[src+8]
+   src=src+10h
+   if method=0 then
+     for i=1 to len, [dst]=[src], dst=dst+1, src=src+1, next i
+     goto @@decompress_done
+   dst_end = dst+len
+  @@collect_more:
+   flagbits=[src]+100h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   if method=2 AND dst=dst_end then goto @@decompress_done
+   flagbits=flagbits SHR 1
+   if zero then goto @@collect_more
+   if carry=1 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     disp=([src]+[src+1]*100h) AND 0FFFh, len=([src+1]/10h)+3, src=src+2
+     if method=1 AND disp=0 then goto @@decompress_done
+     if method=2 AND len=12h then     ;special fill mode...
+       len=disp/100h+3, val=disp AND FFh               ;len=3..12h
+       if len=3 then len=val+13h, val=[src], src=src+1 ;len=13h..112h
+       for i=1 to len, [dst]=val, dst=dst+1, next i    ;len=4..112h
+     else
+       for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+
+

CDROM File Compression LZ5 and LZ5-variants

+

Original LArc LZ5 (method "-lz5-")

+

LZ5 was used by LArc compression tool from 1988/1989, decompression is also +supported by LHarc/LHA. LZ5 is basically LZSS compression, but with some +oddities:
+

  LZ5 is often implemented with a ringbuf (instead of actual sliding window)
+  LZ5 uses absolute ringbuf indices (instead of relative sliding dest indices)
+  LZ5 requires the ringbuf to be initially prefilled with constants
+  LZ5 ringbuf is 1000h bytes tall and starts with write index FEEh
+
+LArc was discontinued in 1989, but LZ5-variants have been kept used on PSX and +Nintendo DSi; those variants are just using the raw compression, without LArc +archive headers.

+

DSi Dr. Mario (DSiware, Nintendo/Arika, 2008-2009)

+
 INFO.DAT
+  encrypted directory with filename, offset and compressed/uncompressed size
+ GAME.DAT
+  000h 4   ID "ALZ1"
+  004h ... ALZ1 Compressed data (with size as defined in INFO.DAT)
+  ...  4   ID "ALZ1"
+  ...  ... ALZ1 Compressed data (with size as defined in INFO.DAT)
+  ...
+
+

PSX Final Fantasy VII (FF7)

+

ALZ1 compression is used in various folders (ENEMY*, STAGE*, STARTUP, MAGIC, +FIELD, MINI, MOVIE, WORLD) with various filename extensions (.LZS .BSX .DAT +.MIM .TIZ .PRE .BSZ .TXZ).
+

  000h 4   Compressed Size       ;=Filesize-4
+  004h ..  ALZ1 Compressed data (Filesize-4 bytes)
+
+Detection can be more or less reliably done by checking [000h]=Filesize-4, one +could also check the filename extensions, although .DAT doesn't qualify as +unique extension.
+The file doesn't contain any info on the decompressed size, so one cannot know +the decompression buffer size without first decompressing the file.
+Note: For whatever reason, the game does also have one GZIP compressed file +(BATTLE\TITLE.BIN).

+

PSX Final Fantasy VIII (FF8)

+

About same as FF7, but detection is less reliable because there are no +filenames or extensions, and the file header is somewhat randomly set to +[000h]=(Filesize-4)+0..7, unknown why, maybe it's allocating dummy bytes to +last some compression flags.
+

  000h 4   Compressed Size+0..7  ;=(Filesize-4)+0..7
+  004h ..  ALZ1 Compressed data (Filesize-4 bytes)
+
+ALZ1 is used in four Root files (0001h,0002h,0017h,001Ah), and in many Field +files, and maybe in further files elsewhere.

+

PSX Ultimate Fighting Championship (MagDemo38: UFC\CU00.RBB\383h\*)

+
  000h 8     ID "00zLATAD" (aka DATALz00 backwards)               ;\PreHeader
+  008h 4     Total Filesize excluding PreHeader+Padding (SIZ+0Ch) ;/
+  00Ch 4     Unknown (always 1000h)                               ;\
+  010h 4     Compressed data size                       (SIZ)     ; Header
+  014h 4     Decompressed data size                               ;/
+  018h SIZ   zLATAD Compressed data                               ;-Data
+  ...  ..    Padding to 4-byte boundary                           ;-Padding
+
+

Ninja (MagDemo13: NINJA\LOADPICS\.PAK and NINJA\VRW\FOREST.VRW\)

+

  000h 8     ID "VRAM-WAD"
+  008h 4     Compressed size (Filesize-Padding-10h)
+  00Ch 4     Decompressed size       (18000h, 28000h, 40000h bytes)
+  010h ..    VRAMWAD Compressed data (192x256, 320x256, 512x256 halfwords)
+  ...  (..)  Padding to 4-byte boundary (if any, in files in .VRW archives)
+
+Observe that Ninja is using the same ID="VRAM-WAD" for .PAK files and .VRW +archives (if [008h]=Filesize-Padding-10h then it's a compressed .PAK file, +otherwise it's a .VRW archive; whereas, those .VRW archives do themselves +contain several .PAK files).

+

PSX Power Spike (MagDemo43: POWER\GAME.IDX\*.BIZ)

+

BIZ compression is used in BIZ archives (which are nested in IDX/HUG archive). +The compressed & decompressed size is stored in the BIZ archive.
+Note: Power Spike 20h-filled initial BIZ ringbuf is required for sky pixels in:
+

  MagDemo43: POWER\GAME.IDX\PERSOS\PSX\CUSTOM\\TEXTURE\NFIELD.BIZ\LPORJ.PSI
+

+

PSX Army Men Air Attack 2 (MagDemo40: AMAA2\.PCK\.PAK)

+

SCRATCH compression is used in PAK archives (which are nested in PCK archive). +The compressed & decompressed size is stored in the PAK archive.
+Note: The decompressor uses half of the 1Kbyte Scratchpad RAM at 1F800000h as +ringbuf (hence the name and unusual small 200h-byte ringbuf size).

+

Alice in Cyberland (ALICE.PAC\*.FA2)

+

  000h ..   FA2 Compressed .FA archive
+
+The decompressor is at 80093A3Ch (but the code isn't permanently in memory), +and it's by far one of the worst decompression functions in compilerland.

+

Decompression

+
   DEFAULT = ALZ1 or BIZ or LZ5
+   if DEFAULT then wr=0FEEh, mask=FFFh    ;\
+   if VRAMWAD then wr=0FEEh, mask=FFFh    ; initial ringbuf write index
+   if zLATAD  then wr=0000h, mask=FFFh    ; and ringbuf mask (size-1)
+   if SCRATCH then wr=01BEh, mask=1FFh    ;
+   if FA2     then wr=00EFh, mask=0FFh    ;/
+   if FA2     then len2=0
+   initialize_ringbuf_content (see below)
+   numbits=0
+  @@decompress_lop:
+   if dst>=dst.end then goto @@decompress_done
+   if numbits=0
+     flagbits=[src], numbits=8, src=src+1    ;8bit flags
+   numbits=numbits-1
+   if VRAMWAD or FA2 then flagbits SHL 1, else flagbits=flagbits SHR 1
+   if carry=1 then
+     dta=[src], [dst]=dta, ringbuf[wr AND mask]=dta
+     dst=dst+1, wr=wr+1, src=src+1
+   else
+     if DEFAULT then rd=[src]+([src+1]/10h)*100h), len=([src+1] AND 0Fh)+3
+     if zLATAD  then rd=[src]+([src+1] AND 0Fh)*100h), len=([src+1]/10h)+3
+     if SCRATCH then rd=[src]+([src+1]/80h)*100h), len=([src+1] AND 7Fh)+3
+     if VRAMWAD then rd=[src+1]+([src]/10h)*100h), len=([src] AND 0Fh)+3
+     if FA2     then rd=[src], len=len2, len2=0, src=src+1
+     if FA2 and len=0 then len=[src]/10h+2, len2=([src] AND 0Fh)+2, src=src+1
+     if FA2=0   then src=src+2
+     for i=1 to len   ;read ringbuf[rd] (instead of relative [dst-rd])
+       dta=ringbuf[rd AND mask], [dst]=dta, ringbuf[wr AND mask]=dta
+       dst=dst+1, wr=wr+1, rd=rd+1
+     next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+
+

Initial Ringbuf Content

+

  if ALZ1 or zLATAD then
+    ringbuf[000h..FFFh]=(00h)              ;zeroes
+  if VRAMWAD then
+    ringbuf[000h..FEDh]=(00h)              ;zeroes
+    ringbuf[FEEh..FFFh]=(uninitialized)    ;uninitialized, don't use
+  if BIZ then
+    ringbuf[000h..FEDh]=(20h)              ;ascii space
+    ringbuf[FEEh..FFFh]=(uninitialized)    ;uninitialized, don't use
+  if SCRATCH then
+    ringbuf[000h..1BFh]=(00h)              ;zeroes
+    ringbuf[1C0h..1FFh]=(uninitialized)    ;uninitialized, don't use
+  if FA2 then
+    ringbuf[000h..0FFh]=(00h)              ;zeroes
+  if LZ5 then
+    ringbuf[000h..CFFh]=(000h..CFFh)/0Dh   ;increasing, repeated 0Dh times each
+    ringbuf[D00h..DFFh]=(00h..FFh)         ;increasing
+    ringbuf[E00h..EFFh]=(FFh..00h)         ;decreasing
+    ringbuf[F00h..F7Fh]=(00h)              ;zeroes
+    ringbuf[F80h..FEDh]=(20h)              ;ascii space
+    ringbuf[FEEh..FFFh]=(should be 00h)    ;see note, better don't use
+
+Note: The last 12h bytes in LZ5 are 00h in LArc v3.33 (though unknown if that's +intended and stable), LHarc source code did accidentally set them to 20h (which +is reportedly fixed in later LHA versions).

+

CDROM File Compression PCK (Destruction Derby Raw)

+

Destruction Derby Raw (MagDemo35: DDRAW\*.PCK,EXE,DAT)

+

  000h 3     Decompressed size (24bit, little-endian)
+  003h 1     Unused (0)
+  004h ...   LZSS compressed data, starting with 30bit+2bit flags
+
+The compression is used in some ISO files, which can be detected as:
+
  [03h]=00h, [04h]=00h, [08h]="PS-X EXE"                ;DDRAW\*.EXE
+  [03h]=00h, [04h] AND FCh=00h, [08h]="BC",04h,40h,0,0  ;DDRAW\LDPICS\*.PCK
+
+The compression is also used in nested PTH+DAT archives (where the whole DAT is +compressed), which can be detected by checking if the sum of the PTH filesizes +exceeds the DAT filesize.

+

Self-decompressing GUI code in PSX BIOS for SCPH-7000 and up

+

The PSX BIOS seems to use the same LZSS format for the self-decompressing GUI +code (with GUI/decompression starting at 80030000h).

+

Decompression function

+
   dst_end=dst+LittleEndian24bit[src], src=src+4
+  @@collect_more:
+   flagbits=BigEndian32bit([src]), src=src+4
+   dispbits=14-(flagbits AND 03h), flagbits=(flagbits OR 3)-1
+   dispmask=(1 SHL dispbits)-1
+  @@decompress_lop:
+   flagbits=flagbits SHL 1    ;32bit shift with carry-out/zeroflag
+   if zero then goto @@collect_more
+   if carry=0 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     disp=BigEndian16bit[src], src=src+2
+     len=(disp SHR dispbits)+3
+     disp=(disp AND dispmask)+1
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   id dst<dst_end then goto @@decompress_lop
+  @@decompress_done:
+   ret
+
+

CDROM File Compression GT-ZIP (Gran Turismo 1 and 2)

+

BS iki Video

+

IKI is a rather uncommon variant of the .STR video format (used by Gran Turismo +1 and 2, Legend of Legaia, Legend of Dragoon, Omega Boost, Um Jammer Lammy).
+IKI videos have a custom .BS header, including some GT-ZIP compressed data:
+

  000h 2   MDEC Size/4 (after huffman decompression) (rounded to 80h/4 bytes)
+  002h 2   File ID (3800h)
+  004h 2   Bitmap Width in pixels     ;instead quant
+  006h 2   Bitmap Height in pixels    ;instead version
+  008h 2   Size of GT-ZIP compressed data (plus 2-byte alignment padding)
+  00Ah ..  GT-ZIP compressed DC/Quant values (plus 2-byte alignment padding)
+  ...  ..  Huffman compressed AC data blocks (Cr,Cb,Y1,Y2,Y3,Y4, Cr,Cb,Y1,Y2..)
+
+The number of blocks is NumBlocks=(Width+15)/16*(height+15)/16*6. The size of +the decompressed GT-ZIP data is NumBlocks*2.

+

Gran Turismo 1 (MagDemo10: GT\*.DAT) - headerless

+

Gran Turismo 1 (MagDemo15: GT\*.DAT) - headerless

+

  000h ..    Compressed Data (without header)
+
+This is used for compressing files inside of GT-ARC archives (or in one case, +for compressing the whole GT-ARC archive). The GT-ARC directory contains +additional compression info, see GT-ARC description for details.
+The file GT\GAMEFONT.DAT is also GT-ZIP compressed, but lacks any ID or info on +decompressed size, and there are at least two GAMEFONT.DAT versions (in +MagDemo10 va MagDemo15), both versions are 8000h byte when decompressed, and +compressed data starts with 00,FF,FF,00,00,00,80,00,00,01,17,07.

+

Gran Turismo 2 (MagDemo27: GT2\GT2.VOL\arcade\arc_other.tim\*) - with header

+

  000h 0Ch   ID "@(#)GT-ZIP",0,0
+  00Ch 4     Decompressed Size
+  010h ..    Compressed Data (unknown compressed size due to below padding)
+  ...  ..    Zeropadding to 4-byte boundary (when stored in DOT1 archives)
+
+This is used for compressing some files in one DOT1 archive (most other files +in Gran Turismo 2 are using GZIP compression; with corrupted/zeropadded GZIP +footers).

+

Decompression function

+
   if [src]="@(#)GT-ZIP",0,0 then dst.end=dst+[src+0Ch], src=src+10h
+  @@collect_more:
+   flagbits=[src]+100h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   if src>=src.end then goto @@decompress_done  ;(when src.end is known)
+   if dst>=dst.end then goto @@decompress_done  ;(when dst.end is known)
+   flagbits=flagbits SHR 1
+   if zero then goto @@collect_more
+   if carry=0 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     len=[src], src=src+1, disp=[src], src=src+1                 ;len, disp
+     if disp>=80h then disp=(disp-80h)*100h+[src], src=src+1     ;longer disp
+     for i=1 to (len+3), [dst]=[dst-(disp+1)], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+
+

Notes

+

Depending on the source, only the compressed or decompressed size may be known:
+

  Source                    Compressed Size           Decompressed Size
+  Compressed GAMEFONT.DAT   In ISO Filesystem         Unknown (n/a)
+  Compressed GT-ARC         In ISO Filesystem         Unknown (n/a)
+  Files in GT-ARC           In GT-ARC                 In GT-ARC
+  Files with GT-ZIP header  Unknown (due to padding)  In GT-ZIP
+  DC values in IKI videos   Unknown (due to padding)  From Width*Height
+
+Gran Turismo 1 has ID "@(#)GT-ZIP" (and "@(#)G.T-ZIPB" whatever that is) stored +in Main RAM (though unknown if/which/any files do have those IDs).
+Gran Turismo 2 has ID "@(#)GT-ZIP" in "GT2\GT2.VOL\arcade\arc_other.tim\*", +apart from that, it does mainly use GZIP compressed files.

+

CDROM File Compression GT20 and PreGT20

+

GT20 Compressed Files

+

Used by Rollcage (MagDemo19: ROLLCAGE\SPEED.IMG\*)
+Used by Rollcage Stage II (MagDemo31: ROLLCAGE\SPEED.IDX\*)
+Used by Sydney 2000 (MagDemo37: OLY2000\DEMO.IDX\* and OLY2000\GTO\*.GTO)
+Reportedly also Chill (PS1) (*.GTO)
+Reportedly also Ducati World: Racing Challenge
+Reportedly also Martian Gothic: Unification (PS1) (*.GT20)
+

  000h 4     ID ("GT20"=Compressed) (or reportedly "NOGT"=Uncompressed)
+  004h 4     Size of decompressed data in bytes
+  008h 4     Overlap for in-situ decompression (usually 3, or sometimes 7)
+  00Ch 4     Size of Leading Zeropadding in bytes (0..7FFh)
+  010h ..    Leading Zeropadding (0..7FFh bytes)
+  ...  ..    Compressed Data
+
+The Leading Zeropadding can be used to arrange the data to end on a sector +boundary (useful when loading the file in units of whole sectors, and wanting +to load it to the end of the decompression buffer).
+
 DecompressGT20:
+  src=src+word[src+0Ch]+10h      ;skip header and any leading zeropadding
+  collected=00000001h  ;end-bit
+ @@lop:
+  if GetBit=0
+    [dst]=[src], dst=dst+1, src=src+1               ;uncompressed byte
+  else
+    if GetBit=0
+      disp=byte[src]-100h, src=src+1                ;disp=(-100h..-1)
+      len=(GetBit*2)+(GetBit*1)+2                   ;len=(2..5)
+    else
+      tmp=halfword[src], src=src+2
+      disp=(tmp/8)-2000h                            ;disp=(-2000h..-1)
+      len=(tmp AND 7)+2                             ;len=(2..9)
+      if len=2
+        tmp=byte[src], src=src+1
+        if (tmp AND 80h) then disp=disp-2000h       ;disp=(-4000h..-1)
+        len=(len AND 7Fh)+2                         ;len=(2..81h)
+        if len=3 then goto decompression_done
+        if len=2 then len=halfword[src], src=src+2  ;len=(0..FFFFh)
+    for i=1 to len, [dst]=[dst+disp], dst=dst+1, next i
+  goto @@lop
+ ;---
+ GetBit:
+  collected=collected SHR 1
+  if zero then collected=(word[src] SHR 1)+80000000h, src=src+4
+  return carry (from shift right)
+
+Note: Uncompressed files can reportedly contain "NOGT" in the header, however, +Rollcage does have compressed files (with GT20 header), and raw uncompressed +files (without any NOGT header).
+https://zenhax.com/viewtopic.php?t=13175 (specs)
+See also: http://wiki.xentax.com/index.php/GT20_Archive (blurp)

+

Pre-GT20 Compressed Files

+

Used by Bloody Roar 1 (MagDemo06: BL\.DAT\)
+Used by Bloody Roar 2 (MagDemo22: ASC,CMN,EFT,LON,SND,ST5,STU\.DAT\)
+

  000h 4    Compression Method (0=None, 2=Compressed, Other=Invalid)
+  004h 4    Compressed Size (SIZ) (same as decompressed when method=0)
+  008h 4    Decompressed Size
+  00Ch SIZ  Compressed Data
+  ...  ..   Garbagepadding to 4-byte boundary (in 4-byte aligned DAT files)
+
+This is apparently on older version of what was later called GT20. The PreGT20 +decompression works as so:
+
 DecompressPreGT20:
+  src=src+0Ch                    ;skip header
+  collected=80h  ;end-bit
+ @@lop:
+  if GetBit=1
+    [dst]=[src], dst=dst+1, src=src+1               ;uncompressed byte
+  else
+    if GetBit=0
+      len=(GetBit*2)+(GetBit*1)+2                   ;len=(2..5)
+      disp=byte[src]-100h, src=src+1                ;disp=(-100h..-1)
+    else
+      tmp=bigendian_halfword[src], src=src+2
+      disp=(tmp/8)-2000h                            ;disp=(-2000h..-1)
+      len=(tmp AND 7)+2                             ;len=(2..9)
+      if len=2
+        len=byte[src]+1, src=src+1                  ;len=(1..100h)
+        if len=1 then goto decompression_done
+    for i=1 to len, [dst]=[dst+disp], dst=dst+1, next i
+  goto @@lop
+ ;---
+ GetBit:
+  collected=collected SHL 1    ;8bit shift
+  if zero then collected=(byte[src] SHL 1)+01h, src=src+1
+  return carry (from 8bit shift left)
+
+Note: Uncompressed files with Method=0 exist in Bloody Roar 2 (CMN\SEL01.DAT).
+Bloody Roar 1 (MagDemo06) has decompressor at 8016DD64h (method 0 and 2).
+Bloody Roar 2 (MagDemo22) has decompressor at 8015C8C0h (method 0 and 2).

+

CDROM File Compression HornedLZ

+

Used by Project Horned Owl (*.BIN\*) (and within self-decompressing EXE)

+

HornedLZ Detection

+

The easiest way to detect HornedLZ files is to check first 4 bytes:
+

  B3 10 00 4F ..    Compressed TIM with TIM Type=00h (4bpp without CLUT)
+  DB 10 00 3F ..    Compressed TIM with TIM Type=08h,09h,etc.
+
+Alternately, one could check the Chunktype (in the parent archive):
+
  Type=05h can be uncompressed .TXT or HornedLZ-compressed .TIM
+    (check if 2nd data byte is ASCII or 10h)
+  Type=0Fh is a DOT1 archive with HornedLZ-compressed .TIMs
+    (parse the DOT1 archive and treat its contents as compressed .TIMs)
+  Type=10h contains Deflated TIMs
+    (a completely different compression method)
+

+

DecompressHornedLZ:

+

  collected=01h  ;end-bit
+ @@lop:
+  if GetBit=1
+    [dst]=[src], dst=dst+1, src=src+1               ;uncompressed byte
+  else
+    if GetBit=1
+      tmp=[src], src=src+1
+      len=tmp/40h+2, disp=tmp or (-40h)       ;len=(2..05h), disp=(-40h..-1)
+    else
+      tmp=[src]*100h+[src+1], src=src+2
+      len=tmp/1000h+2, disp=tmp or (-1000h)   ;len=(2..11h), disp=(-1000h..-1)
+      if len=2 then
+        len=[src]+2, src=src+1                ;len=(2..101h)
+        if len=2 then goto decompression_done
+    for i=1 to len, [dst]=[dst+disp], dst=dst+1, next i
+  goto @@lop
+ ;---
+ GetBit:
+  collected=collected SHR 1
+  if zero then collected=([src] SHR 1)+80h, src=src+1
+  return carry (from shift right)
+
+Note: The end code has all bits zero, except, disp is don't care (it's usually +FFFh).

+

CDROM File Compression LZS (Gundam Battle Assault 2)

+

Gundam Battle Assault 2 (DATA\.PAC\, with ID="lzs")

+

  000h 4     ID ("lzs",00h)
+  004h 4     Zerofilled
+  008h 4     Fixed (must be 1) (method/version?)
+  00Ch 14h   Zerofilled
+  020h 2     Fixed (must be 3) (method/version?)
+  022h 2     Offset to Compressed Data minus 20h (usually 38h-20h)
+  024h 4     Decompressed Size
+  028h 2     Flagsize (must be 08h, 10h, or 20h) (usually 20h=32bit)
+  02Ah 2     Lensize  (must be 02h..07h)         (usually 05h=5bit)
+  02Ch 4     Compressed Size (total filesize, including "lzs" header)
+  030h 8     Name? (always "000000",00h,00h)
+  038h ..    Compressed data (usually at offset 38h)
+
+decompress_gundam_lzs:
+
   dst_end = dst+littleendian32bit[src+24h]
+   flg_bits = littleendian16bit[src+28h]   ;8,16,32
+   len_bits = littleendian16bit[src+2Ah]   ;2..7
+   len_mask = (1 shl len_bits)-1           ;03h..7Fh
+   src=src+littleendian16bit[src+22h]+20h
+   collected_bits=0
+  @@collect_more:
+   for i=0 to flg_bits/8-1    ;read 8bit/16bit/32bit little-endian
+     collected_bits=collected_bits+([src] SHL (i*8)), src=src+1
+   num_collected=flg_bits
+  @@decompress_lop:
+   if dst=dst_end then goto @@decompress_done
+   if num_collected=0 then goto @@collect_more
+   num_collected=num_collected-1
+   flagbits=flagbits SHR 1
+   if carry=1 then
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     temp=bigendian16bit[src], src=src+2
+     len=(temp AND len_mask)+3
+     disp=(temp SHR len_bits), if disp=0 then goto @@decompress_error
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   goto @@decompress_lop
+  @@decompress_done:
+   ret
+

+

CDROM File Compression BZZ

+

Used in .BZZ archives. Note that there are three slightly different .BZZ +archive formats (they are all using the same BZZ compression, only the BZZ +archive headers are different).
+

  Jersey Devil .BZZ (MagDemo10: JD\*.BZZ)
+  Bugs Bunny: Lost in Time (MagDemo25: BBLIT\*.BZZ)
+  The Grinch (MagDemo40: GRINCH\*.BZZ)
+
+Neither the file header nor the archive directory entries do contain any +information about the decompressed size. Best workaround might be to decompress +the file twice (without storing the output in 1st pass, to determine the size +of the decompression buffer for 2nd pass).

+

BZZ Decompression

+

The compression is fairly standard LZSS, except that it supports non-linear +length values, and it does support uncommon Len/Disp pairs like +7bitLen/9bitDisp (though usually, it does use standard 4bitLen/12bitDisp).
+

  decompress_bzz:
+   method=byte[src], src=src+1       ;method (00h..1Fh) ;usually/always 0Bh)
+   shifter  = ((method/8) and 3)     ;00h..03h                ;usually 1
+   len_bits = ((method and 7) xor 7) ;07h..00h                ;usually 4
+   len_mask = (1 shl len_bits)-1     ;7Fh..00h                ;usually 0Fh
+   threshold=len_mask/2, if threshold>07h then threshold=13h  ;usually 07h
+   for i=0 to len_mask
+     if i>threshold then len_table[i] = ((i-threshold) shl shifter)+threshold+3
+     else len_table[i] = i+3 ;method=18h max=(7Fh-13h)*8+13h+3=376h=886 decimal
+   next i                    ;method=0Hh max=(0Fh-07h)*2+07h+3=1Ah=26 decimal
+   num_flags=bigendian24bit[src]+1, src=src+3   ;NUM24+1
+  @@collect_more:
+   if src>=src_end then goto @@decompress_error
+   flagbits=[src]+100h, src=src+1    ;8bit flags
+  @@decompress_lop:
+   flagbits=flagbits SHR 1
+   if zero then goto @@collect_more
+   if carry=1 then
+     if src>=src_end then goto @@decompress_error
+     [dst]=[src], dst=dst+1, src=src+1
+   else
+     if src+1>=src_end then goto @@decompress_error
+     temp=bigendian16bit[src], src=src+2
+     len=len_table[temp AND len_mask]
+     disp=temp SHR len_bits, if disp=0 then goto @@decompress_error
+     for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+   endif
+   num_flags=num_flags-1, if num_flags>0 then goto @@decompress_lop
+  @@decompress_error:
+   ret
+
+Bug: Files can randomly contain NUM24 or NUM24+1 codes (that seems to be due to +a compressor bug or different compressor versions; the two variants are +unfortunately randomly mixed even within the same game).
+And, compressed files are padded to 4-byte boundary (making it impossible to +distinguish between "NUM24+1" and "NUM24+padding").
+
  Case 1) source has NUM24+1 codes
+           --> decode all NUM24+1 codes (otherwise output will be too small)
+  Case 2) source has NUM24 codes (and enough padding for another code)
+           --> decode all NUM24+1 codes (for compatibility with case 1)
+           --> output will have some constant garbage byte(s) appended
+           --> exception: omit last code if it contains invalid disp=0
+  Case 3) source has NUM24 codes (and not enough padding for another code)
+           --> decode only NUM24 codes (abort if NUM24+1 exceeds src_end)
+           --> output should (probably) have correct size
+           --> never exceed src_end which would be highly unstable
+

+

CDROM File Compression RESOURCE (Star Wars Rebel Assault 2)

+

Star Wars Rebel Assault 2 (RESOURCE.*\*)

+

BallBlazer Champions (*.DAT)

+

 decompression function:
+  base=src, method=[src], dst_end=dst+BigEndian24bit[src+1], src=src+4
+ @@decompress_lop:
+  if dst>=dst_end then goto @@decompress_done
+  if [src] AND 80h then
+    if method=01h then
+      len=([src]-80h)/8+3, disp=(BigEndian16bit[src] AND 7FFh)+1, src=src+2
+    else  ;method=02h
+      len=([src]-80h)+4, disp=(BigEndian16bit[src+1])+1, src=src+3
+    for i=1 to len, [dst]=[dst-disp], dst=dst+1
+  else    ;uncompressed
+    len=[src]+1, src=src+1
+    for i=1 to len, [dst]=[src], src=src+1, dst=dst+1
+  goto @@decompress_lop
+ @@decompress_done:
+  src=(src+3) AND NOT 3
+  if LittleEndian32bit[src]<>crc(base, src-base) then error
+  ret
+
+Note: Compression is (normally) used only in Top-level RESOURCE.* and *.DAT +archives (not in Nested archives). The Top-level archives do also contain some +uncompressed files (which contain data that is compressed on its own: SPU-ADPCM +audio, or encrypted BS bitmaps).

+

Special case for BallBlazer Champions

+

Normally only Top-level archives contain compression, however, there are also +some Nested archives with compression in BallBlazer Champions:
+

  STD_BBX.DAT\s*t\tp_a\*    ;\double compression, Top-level is ALSO compressed
+  BBX_INTR.DAT\data1\pics\* ;/
+  BBX_INTR.DAT\Stad\pics\*  ;\
+  BBX_INTR.DAT\Stad\wire\*  ; Nested archives with compression
+  BBX_INTR.DAT\Subtitl\*    ;
+  BBX_INTR.DAT\Subtitl\sub\*;/
+
+The Nested archives don't have any compression flag or decompressed size +entries (so there's no good way for detecting compression in nested files).

+

CDROM File Compression TIM-RLE4/RLE8

+

Ape Escape (Sony 1999) (MagDemo22: KIDZ\) has several compressed and +uncompressed TIMs in headerless archives, the archives can contain:
+

  Compressed 4bpp RLE4-TIM with uncompressed CLUT ;\only 4bpp can be compressed
+  Compressed 4bpp RLE8-TIM with uncompressed CLUT ;/
+  Uncompressed 4bpp TIM with uncompressed CLUT    ;\only this type/combinations
+  Uncompressed 8bpp TIM with uncompressed CLUT    ; are allowed if uncompressed
+  Uncompressed 16pp TIM without CLUT              ;/
+  End code 00000000h (plus more zeropadding)      ;-end of headerless archive
+
+The compression method is indicated by changing a reserved halfword in the TIM +header:
+
  hdr[02h]=Method (0000h=Uncompressed, 0001h=RLE4, 0002h=RLE8)
+
+The rest of the bytes in TIM header and in CLUT section are same as for normal +TIMs. The Bitmap section is as follows:
+Decompressed size must be computed as Width*Height*2. The Section Size entry +contains Section header size, plus compressed size, plus padding to 4-byte +boundary.
+Method=0001h (RLE4):
+
 @@decompress_lop:
+  color=[src]/10h, len=([src] AND 0Fh)+1, src=src+1
+  for i=1 to len, putpixel(color), next i               ;len=1..10h
+  if numpixels<Width*Height*4 then goto @@decompress_lop
+
+Method=0002h (RLE8):
+
 @@decompress_lop:
+  color1=[src]/10h, color2=[src] AND 0Fh, src=src+1
+  if color1=color2
+    len=[src]+2, src=src+1
+    for i=1 to len, putpixel(color1), next i            ;len=2..101h
+  else
+    putpixel(color1), if numpixels<Width*Height*4 then putpixel(color2)
+  for i=1 to len, putpixel(color)       ;len=1..10h
+  if numpixels<Width*Height*4 then goto @@decompress_lop
+
+The decompression functions in Ape Escape (MagDemo22: KIDZ\
) are found at:
+
  80078760h ape_escape_load_tim_archive
+  8007894Ch ape_escape_decompress_with_4bit_lengths
+  800789FCh ape_escape_decompress_with_8bit_lengths
+
+Examples for compressed TIMs are found at:
+
  RLE8: Ape Escape, MagDemo22: KIDZ\KKIIDDZZ.HED\DAT\file004h\1stTIM
+  RLE4: Ape Escape, MagDemo22: KIDZ\KKIIDDZZ.HED\DAT\file135h\1stTIM
+  RLE8: Ape Escape, MagDemo22: KIDZ\KKIIDDZZ.HED\DAT\file139h\1stTIM
+
+Being made by Sony, this might be an official (but late) TIM format extension, +unknown if there are any other games using that compression.

+

CDROM File Compression RLE_16

+

Apocalypse (MagDemo16: APOC\CD.HED\*.RLE)

+

Spider-Man (MagDemo31,40: SPIDEY\CD.HED\*.RLE)

+

Spider-Man 2 (MagDemo50: HARNESS\CD.HED\*.RLE)

+

  000h 8     ID "_RLE_16_"
+  008h 4     Decompressed Size (usually 3C008h) (33408h=Apocalypse warning.rle)
+  00Ch ..    RLE Compressed Data (usually a .BMR bitmap)
+
+This is using simple RLE compression with 16bit len/data units (suitable for +16bpp VRAM data). The compression ratio ranges from not so bad to very bad.

+

Decompression

+
  src=src+0Ch                                       ;skip ID and size
+ @@decompress_lop:
+  len=halfword[src], src=src+2
+  if len=0000h then goto @@decompress_done          ;end-code
+  if (len AND 8000h)=0 then
+    for i=1 to len, halfword[dst]=halfword[src], dst=dst+2, src=src+2, next i
+  else
+    fillvalue=halfword[src], src=src+2
+    for i=1 to len-8000h, halfword[dst]=fillvalue, dst=dst+2, next i
+  goto @@decompress_lop
+ @@decompress_done:
+  ret
+
+

Other RLE16 variants

+

A similar RLE16 variant is used in Croc 1, and another variant in Croc 2.
+CDROM File Archive Croc 1 (DIR, WAD, etc.)
+CDROM File Archive Croc 2 (DIR, WAD, etc.)

+

CDROM File Compression PIM/PRS (Legend of Mana)

+

Legend of Mana (.PIM/.PRS)

+

  000h 1   Unknown (always 01h) (maybe File ID or Compression method)
+  001h ..  Compressed data  ;for TIM: usually 00,10, F0,00, 00,0x, F0,00, ...
+
+Compression codes are:
+
  nn,data[nn+1]  ;nn=00..EF len=nn+1   [dst]=data[1]             ;-uncompressed
+  F0,xn                     len=n+3    [dst]=0x         ;1x4bit  ;\
+  F1,nn,xx                  len=nn+4   [dst]=xx         ;1x8bit  ;
+  F2,nn,yx                  len=nn+2   [dst]=0x,0y      ;2x4bit  ; RLE fill
+  F3,nn,xx,yy               len=nn+2   [dst]=xx,yy      ;2x8bit  ;
+  F4,nn,xx,yy,zz            len=nn+2   [dst]=xx,yy,zz   ;3x8bit  ;/
+  F5,nn,xx,data[nn+4]       len=nn+4   [dst]=xx,data[1]          ;\interleaved
+  F6,nn,xx,yy,data[nn+3]    len=nn+3   [dst]=xx,yy,data[1]       ; fill combo
+  F7,nn,xx,yy,zz,data[nn+2] len=nn+2   [dst]=xx,yy,zz,data[1]    ;/
+  F8,nn,xx                  len=nn+4   [dst]=xx    ;xx=xx+1      ;\
+  F9,nn,xx                  len=nn+4   [dst]=xx    ;xx=xx-1      ; fill with
+  FA,nn,xx,ss               len=nn+5   [dst]=xx    ;xx=xx+ss     ; signed step
+  FB,nn,xx,yy,ss ;ss=signed len=nn+3   [dst]=xx,yy ;yyxx=yyxx+ss ;/
+  FC,xx,ny                  len=n+4    [dst]=[dst-yxx-1]         ;\
+  FD,xx,nn                  len=nn+14h [dst]=[dst-xx-1]          ; LZ compress
+  FE,xn                     len=n+3    [dst]=[dst-x*8-8]         ;/
+  FF                        len=0      end                       ;-end code
+
+The compression is used for several files in Legend of Mana:
+
  BIN\*.BIN       ---> packed misc binary
+  MAP\*\FDATA.PRS ---> packed resource, whatever
+  MAP\*\MAP*.PRS  ---> packed MPD resource, "SKmapDat"
+  WM\WMTIM\*.PIM  ---> packed TIM image, 384x384x4bpp, bad compression ratio
+  WM\WMAP\*.PAT   ---> packed loaddata
+  WM\WMAP\*.PIM   ---> packed TIM image, 320x256x16bit, with UNCOMPRESSED dupe
+

+

CDROM File Compression BPE (Byte Pair Encoding)

+

Byte Pair Encoding (BPE) does replace the most common byte-pairs with bytes +that don't occur in the data. That does work best if there are unused bytes +(eg. ASCII text, or 8bpp bitmaps with less than 256 colors).

+

Bust A Groove (MagDemo18: BUSTGR_A\*.BPE)

+

Bust-A-Groove 2 (MagDemo37: BUSTAGR2\BUST2.BIN\*)

+

  000h 4     ID "BPE_"
+  004h 4     Total Filesize of compressed file including header (big-endian)
+  ...  ..    Compression block(s)
+ Each compression block contains:
+  000h ..    Dictionary info
+  ...  2     Size of compressed data (big-endian)
+  ...  ..    Compressed data
+
+The decompression function in Bust A Groove (MagDemo18) is at 80023860h, the +heap is in 1Kbyte Scratchpad RAM at 1F800208h, so heap size should be max 1F8h +bytes (assuming that the remaining Scratchpad isn't used for something else). +The fileheader lacks info about the decompressed size.

+

Legend of Dragoon (MagDemo34: LOD\OVL\.OV_ and LOD\SECT\.BIN\*)

+

  000h 4     Decompressed size (little-endian)
+  004h 4     ID "BPE",1Ah
+  008h ..    Compression block(s)
+  ...  ..    End code (00000000h) (aka last block with Blocksize=0)
+ Each compression block contains:
+  000h 4     Size of decompressed block (little-endian) (or 0=End code)
+  004h ..    Dictionary info
+  ...  ..    Compressed data
+  ...  ..    Padding to 4-byte boundary
+
+Max nesting appears to be 2Ch, the decompression function allocates a 30h-byte +heap on stack, and fetches source data in 32bit units (occupying 4 heap bytes), +the decompressor does then remove 1 byte from heap, and adds 2 bytes in case of +nested codes.

+

BPE Decompression for Bust-A-Groove and Legend of Dragoon

+
  if [src+0]="BPE_" then type=GROOVE                                    ;\
+  if [src+4]="BPE",1Ah then type=DRAGOON                                ;
+  if type=GROOVE then src_end = src+BigEndian32bit[src+4]               ; hdr
+  if type=DRAGOON then dst_end = dst+LittleEndian32bit[src+0]           ;
+  src=src+8                                                             ;/
+ @@block_lop:
+  if type=DRAGOON then                                                  ;\blk
+    dst_blk_end = dst+LittleEndian32bit[src]+4, src=src+4               ; len
+    if dst=dst_blk_end then goto @@decompress_done                      ;/
+  for i=00h to FFh, dict1[i]=i, next i                                  ;\
+  i=00h                                                                 ;
+ @@dict_lop:                                                            ; dict
+  num=[src], src=src+1                                                  ;
+  if num>7Fh then i=i+(num-7Fh), num=0, if i=100h then goto @@dict_done ;
+  for j=0 to num                                                        ;
+    a=[src], src=src+1                                                  ;
+    if a<>i then b=[src], src=src+1, dict1[i]=a, dict2[i]=a             ;
+    i=i+1                                                               ;
+  if i<100h then goto @@dict_lop                                        ;
+ @@dict_done:                                                           ;/
+  if type=GROOVE then                                                   ;\blk
+    src_blk_end = src+BigEndian16bit[src]+2, src=src+2                  ;/len
+  i=0                                                                   ;\
+ @@data_lop:                                                            ;
+  if i=0 then                                                ;\         ; data
+    if type=GROOVE and src=src_blk_end then goto @@data_done ; get data ;
+    if type=DRAGOON and dst=dst_blk_end then goto @@data_done; from src ;
+    x=[src], src=src+1                                       ; or heap  ;
+  else                                                       ;          ;
+    i=i-1, x=heap[i]                                         ;/         ;
+  a=dict1[x]                                    ;-xlat                  ;
+  if a=x then                                   ;\                      ;
+    [dst]=x, dst=dst+1                          ; output data to        ;
+  else                                          ; dst or heap           ;
+    b=dict2[x], heap[i]=b, heap[i+1]=a, i=i+2   ;/                      ;
+  goto @@data_lop                                                       ;
+ @@data_done:                                                           ;/
+  if type=GROOVE and src<src_end then goto @@block_lop                  ;\next
+  if type=DRAGOON then src=(src+3) AND not 3, goto @@block_lop          ;/blk
+ @@decompress_done:
+  if type=DRAGOON and dst<>dst_end then error
+  ret
+
+

Electronic Arts

+

Electronic Arts games support several compression methods, including a BPE +variant. That BPE variant is a bit unusual: It does have only one compression +block (with a single dictionary for the whole file), and uses escape codes for +rarely used bytes.
+CDROM File Compression EA Methods

+

CDROM File Compression RNC (Rob Northen Compression)

+

Rob Northen compression

+

Rob Northen compression (RNC) is a LZ/Huffman compression format used by +various games for PC, Amiga, PSX, Mega Drive, Game Boy, SNES and Atari Lynx.
+Most RNC compressed files come in a standard 12h-byte header:
+

  000h 3   Signature ("RNC") (short for Rob Northen Computing compression)
+  003h 1   Compression Method (01h or 02h)
+  004h 4   Size of Uncompressed Data                             ;big-endian
+  008h 4   Size of Compressed Data (SIZ)                         ;big-endian
+  00Ch 2   CRC16 on Uncompressed Data (with initial value 0000h) ;big-endian
+  00Eh 2   CRC16 on Compressed Data   (with initial value 0000h) ;big-endian
+  010h 1   Leeway (difference between compressed and uncompressed data in
+                   largest pack chunk, if larger than decompressed data)
+  011h 1   Number of pack chunks
+  012h SIZ Compressed Data
+  ... (..) Zeropadding to 800h-byte boundary-4 ;\as so in PSX Heart of Darkness
+  ... (4)  Unknown                             ;/
+
+The compressed data consists of interleaved bit- and byte-streams, the first 2 +bits of the bit stream are ignored.

+

RNC Method 1 - with custom Huffman trees

+

The bit-stream is read in 16bit units (the 1st bit being in bit0 of 1st byte).
+

  Each pack chunk contains the following:
+  * 3 Huffman trees (one for literal data sizes, one for distance values,
+    and one for length values) in the bit stream. These consist of:
+      o A 5 bit value for the amount of leaf nodes in the tree
+      o 4 bit values for each node representing their bit depth.
+  * One 16 bit value in the bitstream for the amount of subchunks in the
+    pack chunk.
+  * The subchunk data, which contains for each subchunk:
+      o A Huffman code value from the first tree in the bit stream for the
+        amount of literals in the byte stream.
+      o Literals from the byte stream.
+      o A Huffman code from the bit stream that represents the distance - 1
+        of a distance/length pair.
+      o A Huffman code from the bit stream that represents the length - 2
+        of a distance/length pair.
+
+Unknown how that works exactly (see source code for details), unknown if method +1 was used on PSX.

+

RNC Method 2 - with hardcoded Huffman trees

+

The bit-stream is read in 8bit units (the 1st bit being in bit7).
+

  0     + Byte(DATA[1])              Copy 1 Byte from Source
+  1000  + Dist + Byte(X)             Copy 4 Bytes from Dest-(Dist+X+1)
+  10010 + Dist + Byte(X)             Copy 6 Bytes from Dest-(Dist+X+1)
+  10011 + Dist + Byte(X)             Copy 7 Bytes from Dest-(Dist+X+1)
+  1010  + Dist + Byte(X)             Copy 5 Bytes from Dest-(Dist+X+1)
+  10110 + Dist + Byte(X)             Copy 8 Bytes from Dest-(Dist+X+1)
+  10111 + nnnn + Byte(DATA[12..72])  Copy nnnn*4+12 Bytes from Source
+  110   + Byte(X)                    Copy 2 Bytes from Dest-(X+1)
+  1110  + Dist + Byte(X)             Copy 3 bytes from Dest-(Dist+X+1)
+  1111  + Byte(0) + 0 + zeropadding  End of last pack chunk
+  1111  + Byte(0) + 1                End of non-last pack chunk
+  1111  + Byte(L) + Dist + Byte(X)   Copy L+8 Bytes from Dest-(Dist+X+1) ;L>00h
+
+Dist values:
+
  0      = 0000h            1000   = 0200h
+  110    = 0100h            1001   = 0300h
+  111000 = 0C00h            101000 = 0800h
+  111001 = 0D00h            101001 = 0900h
+  11101  = 0600h            10101  = 0400h
+  111100 = 0E00h            101100 = 0A00h
+  111101 = 0F00h            101101 = 0B00h
+  11111  = 0700h            10111  = 0500h
+
+The purpose of the pack chunks isn't quite clear, it might be related to memory +restrictions on old CPUs. In PSX Heart of Darkness they are chosen so that the +decompressed data is max 3000h bytes per chunk. Unknown if the next chunk may +copy data from previous chunk.

+ +

http://aminet.net/package/util/pack/RNC_ProPack - official tool & source code
+https://segaretro.org/Rob_Northen_compression - description (contains bugs)

+

RNC is used in a number of games by UK developers (notably Bullfrog and +Traveller's Tales), including Sonic 3D: Flickies' Island, Blam! Machinehead, +Dungeon Keeper 2, Magic Carpet, Syndicate and Syndicate Wars.

+

RNC in PSX Games

+
  Method 2: Demolition Racer (MagDemo27: DR\DD.DAT\*.RNC)
+  Method 2: Heart of Darkness (IMAGES\US.TIM)
+  Method 2: Jonah Lomu Rugby (LOMUDEMO\GFX\*.PAK)
+  Method 2: NBA Jam: Tournament Edition (*.RNC, headerless .BIN/.GFX archives)
+  Method 2: Test Drive 5 (MagDemo13: TD5.DAT\*.RNC)
+  Method 2: Test Drive Off-Road 3 (MagDemo27: TDOR3\TDOR3.DAT\*.rnc)
+
+

RNC in Mega Drive games

+
  3 Ninjas Kick Back
+  Addams Family
+  Addams Family Values
+  The Adventures of Mighty Max
+  Asterix and the Great Rescue
+  Asterix and the Power of the Gods
+  The Incredible Hulk
+  The Itchy & Scratchy Game (unreleased)
+  Marsupilami
+  Mortal Kombat
+  Mr. Nutz
+  Outlander
+  The Pagemaster
+  RoboCop 3
+  Spirou
+  Spot Goes to Hollywood
+  Stargate
+  Street Racer
+  Tinhead
+  Tintin in Tibet
+  World Championship Soccer II
+
+

CDROM File Compression Darkworks

+

Used by Alone in the Dark The New Nightmare (FAT.BIN\LEVELS\*\chunks)

+

Decompression

+

The decompressor is designed to hook the sector loading function: It does +decompress incoming sectors during loading, and forwards the decompressed data +to the original sector loading function. The decompressed data is temporarily +stored in two small Dict buffers (which do also serve as compression +dictionary).
+

 decompress:
+  dictsize=1000h, dict0=alloc(dictsize), dict1=alloc(dictsize)
+  src=load_next_800h_byte_sector  ;load first sector
+  dst=dict0                       ;temp dest in current dict
+  dst_base=dst                    ;memorize start of newly decompressed data
+ @@decompress_lop:
+  if [src]=00h then                                             ;\
+    esc=[src+1], src=src+1                                      ;
+    forward_to_actual_dest(source=dst_base, len=dst-dst_base)   ; escape
+    if esc=0 or esc>4 then esc=2 (or warn_invalid_escape_code)  ;
+    if esc=1 then goto @@decompress_done                        ;
+    if esc=2 or esc=4 then src=load_next_800h_byte_sector       ;
+    if esc=3 or esc=4 then swap(dict0,dict1), dst=dict0         ;
+    dst_base=dst                                                ;/
+  elseif ([src] AND 03h)=0 then                                 ;\
+    len=[src]/4+2, dat=[src+1], src=src+2                       ; fill 8bit
+    for i=1 to len, [dst]=dat, dst=dst+1                        ;/
+  elseif ([src] AND 03h)=1 then                                 ;\
+    len=[src]/4+([src+2] AND 40h)+4                             ;
+    ptr=[src+1]+([src+2] AND 3Fh)*100h                          ; LZ compressed
+    if ptr+len>dictsize then error (exceeds allocated dictsize) ;
+    if ([src+2] AND 80h) then ptr=ptr=dict1 else ptr=ptr=dict0  ;
+    src=src+3                                                   ;
+    for i=1 to len, [dst]=[ptr], ptr=ptr+1, dst=dst+1           ;/
+  elseif ([src] AND 03h)=2 then                                 ;\
+    len=[src]/4+3, dat0=[src+1], dat1=[src+2], src=src+3        ; fill 16bit
+    for i=1 to len, [dst]=dat0, [dst+1]=dat1, dst=dst+2         ;/
+  elseif ([src] AND 03h)=3 then                                 ;\
+    len=[src]/4+1, src=src+1                                    ; uncompressed
+    for i=1 to len, [dst]=[src], src=src+1, dst=dst+1           ;/
+  goto @@decompress_lop
+ @@decompress_done:
+  dealloc(dict0), dealloc(dict1)
+  ret
+
+There are one or more escape codes per sector (one to indicate the of the +sector, plus further escape codes to swap the Dict buffers whenever the current +Dict is full).
+The original decompressor is doing the forwarding in 800h-byte units, so Dict +swapping may be only done when dict0 contains a multiple of 800h bytes (aka +dictsize bytes).
+For whatever reason, there are only 4Kbyte per Dict allocated (although the +14bit LZ indices could have addressed up to 16Kbyte per Dict).

+

CDROM File Compression Blues

+

Blue's Clues: Blue's Big Musical (VRAM and FRAM chunks in *.TXD)

+

Decompression function:
+

  if LittleEndian32bit[src+08h]<>1 then error  ;compression flag
+  dst_end=dst+LittleEndian32bit[src+14h], src=src+18h, num_collected=0
+ @@decompress_lop:
+  if GetBit=1 then
+    [dst]=[src], src=src+1, dst=dst+1           ;code 1 uncompressed byte
+  elseif GetBit=1 then
+    len=[src], src=src+1                        ;code 01 fill or end code
+    if len=00h then goto @@decompress_done
+    len=len+1, fillvalue=[dst-1]
+    for i=1 to len, [dst]=fillvalue, dst=dst+1
+  else
+    len=GetBit*2+GetBit
+    if len=0 then                               ;code 0000 long LZ range
+      len=[src] AND 0Fh, disp=[src]/10h+[src+1]*10h-1000h, src=src+2
+    else                                        ;code 00xx short LZ range
+      disp=[src]-100h, src=src+1
+    len=len+1
+    for i=1 to len, [dst]=[dst+disp], dst=dst+1
+  goto @@decompress_lop
+ @@decompress_done:
+  if dst<>dst_end then error
+  ret
+ ;---
+ GetBit:
+  if num_collected=0 then collected=[src], src=src+1, num_collected=8
+  collected=collected*2
+  return (collected/100h) AND 1
+

+

CDROM File Compression Z (Running Wild)

+

Running Wild (MagDemo15: RUNWILD\.BIN\.Z and *.z)

+

  decompress_z:
+   src=src+4            ;skip 32bit decompressed size entry
+  @@reload_lop:
+   load_table1          ;table for first 9bits
+   load_table2          ;table for codes longer than 9bits
+  @@decompress_lop:
+   sym=get_symbol()
+   if sym<100h then [dst]=sym, dst=dst+1, goto @@decompress_lop
+   if sym=100h then goto @@escape
+   len=sym-0FCh                         ;change 101h..140h to 05h..44h
+   disp=((get_symbol()-101h)*40h)       ;change 101h..140h to 00h..3Fh*40h
+   disp=((get_symbol()-101h) or disp)+1 ;change 101h..140h to 00h..3Fh+above+1
+   copy len bytes from dst-disp to dst
+   goto @@decompress_lop
+  @@escape:
+   if GetBits(1)=0 then goto @@reload_lop
+   ret
+  ;-----
+  load_table1:
+   t=0
+  @@load_lop:
+   x=GetBits(10h)
+   if x and 8000h then num=1 else num=(1 shl (9-(x/400h)))
+   for i=1 to num, table1[t]=x, t=t+1, next i
+   if t<200h then goto @@load_lop
+   ret
+  ;-----
+  load_table2:
+   num=GetBits(9)*2      ;can be 0=none, max=3FEh
+   if num>0 then for i=0 to num-1, table2[i]=GetBits(9), next i
+   ret
+  ;-----
+  get_symbol:
+   ;returns a value in range 0..140h:
+   ;  00h..FFh   = data 00h..FFh   (or unused for disp codes)
+   ;  100h       = escape          (or unused for disp codes)
+   ;  101h..140h = length 05h..44h (or 6bit fraction of 12bit disp)
+   ;  141h..3FFh = would be possible for short codes, but shouldn't be used
+   x=table1[PeekBits(9)]
+   if (x and 8000h)=0 then SkipBits(x/400h), return (x and 3FFh)  ;-short code
+   SkipBits(9)   ;skip first 9 bits, and process futher bit(s)..  ;\
+   x=x-0C000h    ;change C000h..C1FFh and up to 000h..1FFh        ; long code
+  @@lop:                                                          ; (with more
+   x=table2[x*2+GetBits(1)]             ;branch node0/node1       ; than 9bit)
+   if x>=141h then x=x-141h, goto @@lop                           ;
+   return x                                                       ;/
+
+The bitstream is fetched in little endian 16bit units (the first bit is in bit7 +of second byte). PeekBits returns the next some bits without discarding them, +SkipBits does discard them, GetBits does combine PeekBits+SkipBits.
+Note: The decompression function in Running Wild (MagDemo15) is at 80029D10h.

+

CDROM File Compression ZAL (Z-Axis)

+

Thrasher: Skate and Destroy (MagDemo27: SKATE\ASSETS\*.ZAL) (Z-Axis)

+

Dave Mirra Freestyle BMX (MagDemo36: BMX\ASSETS\*.ZAL) (Z-Axis)

+

Dave Mirra Freestyle BMX (MagDemo46: BMX\ASSETS\*.ZAL) (Z-Axis)

+

ZAL compression is used in ZAL archives. The archive header contains compressed +and decompressed size for each file (and a compression flag indicating whether +the archive is compressed at all).

+

ZAL Decompression

+
  if src_len=0 then goto @@decompress_done      ;empty (without end code)
+  lzlen=0, rawlen=0
+  if [src]=10h..FFh then                                ;\special handling
+    rawlen=[src]-11h, src=src+1                         ; for code=10h..FFh
+    if rawlen<=0 then goto @@decompress_error           ;/at begin of source
+ @@decompress_lop:
+  memcopy(dst-disp,dst,lzlen)   ;copy compressed bytes
+  memcopy(src,dst,rawlen)       ;copy uncompressed bytes
+  code=[src], src=src+1
+  if code=00h..0Fh then
+    if rawlen=0   ;when OLD rawlen=0...
+      lzlen=0, rawlen=code+3                            ;\
+      if rawlen=3 then                                  ;
+        while [src]=00h, rawlen=rawlen+FFh, src=src+1   ;
+        rawlen=rawlen+[src]+0Fh, src=src+1              ;/
+    else          ;when OLD rawlen>0, and depending on OLD lzlen...
+      rawlen=code AND 03h
+      disp=code/4+[src]*4, src=src+1
+      if lzlen=0 then disp=disp+801h, lzlen=3, else then disp=disp+1h, lzlen=2
+  if code=10h..1Fh then
+    lzlen=(code AND 07h)+2
+    if lzlen=2 then
+      while [src]=00h, lzlen=lzlen+FFh, src=src+1
+      lzlen=lzlen+[src]+07h, src=src+1
+    rawlen=[src] AND 03h, disp=[src]/4+[src+1]*40h+(code/8 AND 1)*4000h+4000h
+    src=src+2
+    if disp=4000h AND code=11h then goto @@decompress_done    ;end code
+    if disp=4000h AND code<>11h then goto @@decompress_error
+  if code=20h..3Fh then
+    lzlen=code-20h+2
+    if lzlen=2 then
+      while [src]=00h, lzlen=lzlen+FFh, src=src+1
+      lzlen=lzlen+[src]+1Fh, src=src+1
+    rawlen=[src] AND 03h, disp=[src]/4+[src+1]*40h+1, src=src+2
+  if code=40h..FFh then
+    rawlen=code AND 03h
+    lzlen=(code/20h)+1
+    disp=((code/4) AND 07h)+([src]*8)+1, src=src+1
+  goto @@decompress_lop
+ @@decompress_done:
+  ret
+
+

CDROM File Compression EA Methods

+

Electronic Arts Compression Headers

+

The files start with a 16bit big-endian Method value, with following bits:
+

  0-7     ID (usually FBh) (or 31h for Method 4A31h with 16bit sizes)
+  8       Extended Header (usually 0) (or 1 for headers with extra entries)
+  9-14    Used to distinguish different methods
+  15      Extended Size (usually 0 for 24bit sizes) (or 1 for 32bit sizes)
+
+The most common Method values are:
+
  10FBh = LZSS Compression (RefPack)
+  90FBh = LZSS Compression (RefPack, with 32bit size) (not on PSX)
+  30FBh = Huffman Compression
+  32FBh = Huffman Compression with filter
+  34FBh = Huffman Compression with dual filter
+  46FBh = BPE Byte-Pair Encoding
+  4AFBh = RLE Run-Length Encoding
+  4A31h = RLE Run-Length Encoding, with 16bit size
+  C0FBh = File Archive (not a compression method)
+
+Most or all PSX files have Bit8=0, but anyways, the decompressor does support +skipping extra header entries in files with Bit8=1 (with all methods except +RLE).
+Most or all PSX files have Bit15=0, games for newer consoles can reportedly +have Method=90FBh (unknown if anything like B2FBh or CAFBh does also exist).
+Most or all PSX files have Bit0-7=FBh (supposedly short for Frank Barchard), +the 16bit mode with Bit0-7=31h is supported for Method=4A31h only (the +decompressor would also accept invalid methods like 1031h or 3431h, but doesn't +actually support 16bit mode for those).

+

Compression Formats

+

CDROM File Compression EA Methods (LZSS RefPack)
+CDROM File Compression EA Methods (Huffman)
+CDROM File Compression EA Methods (BPE)
+CDROM File Compression EA Methods (RLE)

+

Usage in PSX games

+

The compression can be used to compress whole files:
+

  PGA Tour 96, 97, 98 (*.* and *.VIV\*) (with method 10FBh)
+  Need for Speed 3 Hot Pursuit (*.Q* with method 10FBh, 30FBh, 32FBh)
+
+Or to compress texture bitmaps inside of .PSH file chunks:
+
  FIFA - Road to World Cup 98 (*.PSH chunk C0h/C1h with method 10FBh)
+  Sled Storm (MagDemo24: ART3\LOAD*.PSH chunk C0h/C1h with method 10FBh)
+  WCW Mayhem (MagDemo28: WCWDEMO\*.BIG\*.PSH with chunk C0h/C1h with 10FBh)
+
+The decompressor supports further methods (like 34FBh, 46FBh, 4AFBh), but there +aren't any files or chunks known to actually use those compression formats.

+

Note: Some compressed files are slightly larger than uncompressed files (eg. +filesizes for PGA Tour 96, 97, 98 COURSES\\.VIV\*.mis are compressed=58h, +uncompressed=50h).

+

See also

+

http://wiki.niotso.org/RefPack - LZ method

+

CDROM File Compression EA Methods (LZSS RefPack)

+

RefPack

+

  000h 2     Method (10FBh, or 11FBh,90FBh,91FBh) (big-endian)
+  ...  (3/4) Compressed size   (24bit or 32bit)   (optional)
+  ...  3/4   Uncompressed size (24bit or 32bit)   (big-endoan)
+  ...  ..    Compressed data
+
+The compression is some kind of LZSS/LZH variant (similar to Z-Axis .ZAL +files). The compressed data consists of a big-endian bit-stream (or +byte-stream, as all codes are multiples of 8bits). The Compression codes are:
+
  0ddzzzrrdddddddd                  rawlen=r(2), lzlen=z(3)+3,  disp=d(10)+1
+  10zzzzzzrrdddddddddddddd          rawlen=r(2), lzlen=z(6)+4,  disp=d(14+1
+  110dzzrrddddddddddddddddzzzzzzzz  rawlen=r(2), lzlen=z(10)+5, disp=d(17)+1
+  111rrrrr                          rawlen=r(5)*4+4, lzlen=0
+  111111rr                          rawlen=r(2), lzlen=0, endflag=1
+
+refpack_decompress:
+
  method=BigEndian16bit[src], src=src+2
+  if (method AND 100h)>0 then src=src+3+method/8000h ;compressed size, if any
+  if (method AND 8000h]=0 then dst_size=BigEndian24bit[src], src=src+3
+  if (method AND 8000h)>0 then dst_size=BigEndian32bit[src], src=src+4
+  endflag=0
+ @@decompress_lop:
+  if ([src] AND 80h)=0 then
+    rawlen=[src] AND 03h
+    lzlen=([src] AND 1Fh)/4+3
+    disp=([src] AND 60h)*8+[src+1]+1
+    src=src+2
+  elseif ([src] AND 40h)=0 then
+    rawlen=[src+1]/40h
+    lzlen=[src] AND 3Fh+4
+    disp=([src+1] AND 3Fh)*100h+[src+2]+1
+    src=src+3
+  elseif ([src] AND 20h)=0 then
+    rawlen=[src] AND 03h
+    lzlen=([src] AND 0Ch)*40h+[src+3]+5
+    disp=([src] AND 10h)*1000h+[src+1]*100h+[src+2]+1
+    src=src+4
+  elseif ([src] AND FCh)=FCh then
+    rawlen=[src] AND 03h
+    lzlen=0
+    src=src+1, endflag=1
+  else
+    rawlen=([src] AND 1Fh)*4+4
+    lzlen=0
+    src=src+1
+  for i=1 to rawlen, [dst]=[src], src=src+1, dst=dst+1, next i
+  for i=1 to lzlen, [dst]=[dst-disp], dst=dst+1, next i
+  if endflag=0 then goto @@decompress_lop
+  if (dst-dst_base)<>dst_size then error
+  ret
+

+

CDROM File Compression EA Methods (Huffman)

+

Huffman

+
  000h 2    Method (30FBh..35FBh) (big-endian)
+  ...  (3)  Extra 3 bytes (only present if Method.bit8=1)
+  ...  3    Decompressed Size     (big-endian)
+  ...  1    Escape code
+  ...  ..   Number of codes per width
+  ...  ..   Data placement for each code
+  ...  ..   Compressed Data
+
+

Huffman

+
  decompress_ea_huffman:
+   method=GetBits(16)    ;3xFBh                     ;-get method (30FBh..35FBh)
+   if method AND 100h then dummy=GetBits(24)        ;-skip extra (if any)
+   dst_size=GetBits(24)                             ;-get uncompressed size
+   ESC=GetBits(8)                                   ;-get escape code
+   huffwidth=0, huffcode=0, totalnumcodes=0         ;\
+   while (huffcode shl (10h-huffwidth))<10000h      ;
+     num=GetVarLenCode                              ; get num codes per width
+     huffwidth=huffwidth+1                          ;
+     numcodes_per_width[width]=num                  ;
+     totalnumcodes=totalnumcodes+num                ;
+     huffcode=(huffcode*2)+num                      ;/
+   for i=0 to FFh, data_defined_flags[i]=00h        ;\
+   dat=FFh, index=0                                 ;
+   while index<totalnumcodes                        ;
+     n=GetVarLenCode+1               ;-             ; get/assign data values
+     while n>0  ;search Nth notyet defined entry    ;
+       dat=(dat+1) AND FFh  ;wrap in 8bit range!    ;
+       if data_defined_flags[dat]=0 then n=n-1      ;
+     data_defined_flags[dat]=1                      ;
+     data_values[index]=dat, index=index+1          ;/
+   huffcode=0000h, index=0                          ;\
+   InitEmptyHuffTree(data_tree)                     ;
+   for width=1 to huffwidth                         ;
+     for i=1 to numcodes_per_width[width]           ; create huffman tree
+       dat=data_values[index], index=index+1        ;
+       CreateHuffCode(data_tree,dat,huffcode,width) ;
+       huffcode=huffcode+(1 shl (10h-width)         ;/
+  @@decompress_lop:                                 ;\
+   dat=GetHuffCode(data_tree)                       ;
+   if dat<>ESC                                      ;
+     [dst]=dat, dst=dst+1                           ; decompress
+   else                                             ;
+     num=GetVarLenCode                              ;
+     if num=0 then                                  ;
+       if GetBits(1)=1 then goto @@decompress_done  ;
+       [dst]=GetBits(8), dst=dst+1                  ;
+     else                                           ;
+       dat=[dst-1]                                  ;
+       for i=0 to num-1, [dst]=dat, dst=dst+1       ;
+   goto @@decompress_lop                            ;/
+  @@decompress_done:
+   if (dst-dst_base)<>dst_size then error                 ;-error check
+   dst=dst_base, x=00h, y=00h                             ;\
+   if (method AND FEFFh)=32FBh                            ; optional final
+     for i=0 to dst_size-1, x=x+[dst+i], [dst+i]=x        ; unfiltering
+   if (method AND FEFFh)=34FBh                            ;
+     for i=0 to dst_size-1, x=x+[dst+i], y=y+x, [dst+i]=y ;/
+   ret
+  ;------------------
+  GetVarLenCode:
+   num=2
+   while GetBits(1)=0, num=num+1
+   return (GetBits(num)+(1 shl num)-4)
+  GetBits(num):
+   return "num" bits, fetched from big-endian bitstream
+  GetHuffCode(data_tree):
+   ...
+  InitEmptyHuffTree(data_tree):
+   ...
+  CreateHuffCode(data_tree,dat,huffcode,width):
+   ...
+  numcodes_per_width[10h]   ;9bit numcodes per width 0..15 (entry[0]=unused)
+  data_values[100h]         ;8bit data values for up to 100h huffman codes
+  data_defined_flags[100h]  ;1bit flags for data(00h..FFh)
+
+

CDROM File Compression EA Methods (BPE)

+

Byte-Pair Encoding

+

  000h 2    Method (46FBh or 47FBh) (big-endian)
+  ...  (5)  Extra 5 bytes (only present if Method=47FBh)
+  ...  3    Decompressed Size       (big-endian)
+  ...  1    Escape code
+  ...  1    Number of Dict entries (N)
+  ...  N*3  Dict (each 3 bytes: Index,Dat1,Dat2)
+  ...  ..   Compressed Data
+
+decompress_bpe:
+
  method=BigEndian16bit[src], src=src+2
+  if method=47FBh then src=src+5
+  dst_size=BigEndian24bit[src], src=src+3
+  esc=[src], src=src+1
+  num=[src], src=src+1
+  for i=0 to FFh, dict1[i]=i    ;initially default=self (uncompressed bytes)
+  for i=1 to num, j=[src], dict1[j]=[src+1], dict2[j]=[src+2], src=src+3
+ @@decompress_lop:
+  x=[src], src=src+1
+  if x=dict1[x] then
+    if x=esc then x=[src], src=src+1, if x=00h then goto @@decompress_done
+    [dst]=x, dst=dst+1
+  else
+    heap[0]=x, i=1
+    while i>0
+      i=i-1, x=heap[i], a=dict1[x]
+      if a=x then [dst]=x, dst=dst+1                    ;\output data to
+      else b=dict2[x], heap[i]=b, heap[i+1]=a, i=i+2    ;/dst or heap
+  goto @@decompress_lop
+ @@decompress_done:
+  if (dst-dst_base)<>dst_size then error
+  ret
+

+

CDROM File Compression EA Methods (RLE)

+

Run-Length Encoding

+

  000h 2    Method (4AFBh=24bit or 4A31h=16bit) (big-endian)
+  ...  2/3  Decompressed Size (24bit or 16bit)  (big-endian)
+  ...  ..   Compressed Data
+
+Compression codes are:
+
  00h..3Fh  Copy 0..3Fh uncompressed bytes
+  40h..7Fh  Load new fillbyte and fill 0..3Fh bytes
+  80h..BFh  Use old fillbyte and fill 0..3Fh bytes (initial fillbyte=00h)
+  C0h..FFh  Copy 0..3Fh bytes with constant value in upper 4bit
+
+decompress_bpe:
+
  method=BigEndian16bit[src], src=src+2
+  if (method AND 00FFh)=31h then dst_size=BigEndian16bit[src], src=src+2
+  if (method AND 00FFh)<>31h then dst_size=BigEndian24bit[src], src=src+3
+  fillbyte=00h  ;initially zero
+ @@decompress_lop:
+  type=[src]/40h, len=[src] AND 3Fh, src=src+1, dst_size=dst_size-len
+  if type=0 then                                          ;\uncompressed bytes
+    for i=1 to len, [dst]=[src], src=src+1, dst=dst+1     ;/
+  elseif type=1 then                                      ;\
+    fillbyte=[src], src=src+1                             ; fill with new dat
+    for i=1 to len, [dst]=fillbyte, dst=dst+1             ;/
+  elseif type=2 then                                      ;\fill with old dat
+    for i=1 to len, [dst]=fillbyte, dst=dst+1             ;/
+  elseif type=3 then
+    x=[src], [dst]=x, src=src+1, dst=dst+1, x=x AND F0h
+    for i=2 to len      ;<-- or so?
+      if (i AND 1)=0 then [dst]=x+([src]/10h) dst=dst+1
+      if (i AND 1)=1 then [dst]=x+([src] AND 0Fh), dst=dst+1, src=src+1
+  if dst_size<>0 then goto @@decompress_lop
+  ret
+

+

CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)

+

Inflate/Deflate is a common (de-)compression algorithm, used by ZIP, ZLIB, and +GZIP.

+

Inflate - Core Functions
+Inflate - Initialization & Tree Creation
+Inflate - Headers and Checksums

+

PSX Disk Images

+

In PSX cdrom-images, ZLIB is used by the .CDZ cdrom-image format:
+CDROM Disk Image/Containers CDZ
+In PSX cdrom-images, Inflate is used by .PBP and .CHD cdrom-image formats:
+CDROM Disk Images PBP (Sony)
+CDROM Disk Images CHD (MAME)

+

PSX Games

+

In PSX games, ZLIB is used by:
+

  Twisted Metal 4 (MagDemo30: TM4DATA\*.MR\* and *.IMG\*)
+  Kula Quest / Kula World / Roll Away (*.PAK) (*.PAK\*)
+  (and probably more games... particulary files starting with "x")
+
+In PSX games, GZIP is used by:
+
  Final Fantasy VII (FF7) (BATTLE\TITLE.BIN)
+  Gran Turismo 2 (MagDemo27: GT2\*) (with corrupted/zeropadded GZIP footers)
+  Mat Hoffman's Pro BMX (old demo) (MagDemo39: BMX\BMXCD.HED\TITLE_H.ZLB)
+
+In PSX games, Inflate (with slightly customized block headers) is used by:
+
  Mat Hoffman's Pro BMX (new demo) (MagDemo48: MHPB\FE.WAD+STR)
+
+In PSX games, Inflate (with ignored block type, dynamic tree only) is used by:
+
  Project Horned Owl (COMDATA.BIN, DEMODATA.BIN, ROLL.BIN, ST*DATA.BIN)
+

+

Inflate - Core Functions

+

tinf_uncompress(dst,src)

+
 tinf_init()                    ;init constants (needed to be done only once)
+ tinf_align_src_to_byte_boundary()
+ repeat
+  bfinal=tinf_getbit()          ;read final block flag (1 bit)
+  btype=tinf_read_bits(2)       ;read block type (2 bits)
+  if btype=0 then tinf_inflate_uncompressed_block()
+  if btype=1 then tinf_build_fixed_trees(), tinf_inflate_compressed_block()
+  if btype=2 then tinf_decode_dynamic_trees(), tinf_inflate_compressed_block()
+  if btype=3 then ERROR         ;reserved
+ until bfinal=1
+ tinf_align_src_to_byte_boundary()
+ ret
+
+

tinf_inflate_uncompressed_block()

+
 tinf_align_src_to_byte_boundary()
+ len=LittleEndian16bit[src+0]                             ;get len
+ if LittleEndian16bit[src+2]<>(len XOR FFFFh) then ERROR  ;verify inverse len
+ src=src+4                                                ;skip len values
+ for i=0 to len-1, [dst]=[src], dst=dst+1, src=src+1, next i    ;copy block
+ ret
+
+

tinf_inflate_compressed_block()

+
 repeat
+  sym1=tinf_decode_symbol(tinf_len_tree)
+  if sym1<256
+   [dst]=sym1, dst=dst+1
+  if sym1>256
+   len  = tinf_read_bits(length_bits[sym1-257])+length_base[sym1-257]
+   sym2 = tinf_decode_symbol(tinf_dist_tree)
+   dist = tinf_read_bits(dist_bits[sym2])+dist_base[sym2]
+   for i=0 to len-1, [dst]=[dst-dist], dst=dst+1, next i
+ until sym1=256
+ ret
+
+

tinf_decode_symbol(tree)

+
 sum=0, cur=0, len=0
+ repeat                         ;get more bits while code value is above sum
+  cur=cur*2 + tinf_getbit()
+  len=len+1
+  sum=sum+tree.table[len]
+  cur=cur-tree.table[len]
+ until cur<0
+ return tree.trans[sum+cur]
+
+

tinf_read_bits(num) ;get N bits from source stream

+
 val=0
+ for i=0 to num-1, val=val+(tinf_getbit() shl i), next i
+ return val
+
+

tinf_getbit() ;get one bit from source stream

+
 bit=tag AND 01h, tag=tag/2
+ if tag=00h then tag=[src], src=src+1, bit=tag AND 01h, tag=tag/2+80h
+ return bit
+
+

tinf_align_src_to_byte_boundary()

+
 tag=01h   ;empty/end-bit (discard any bits, align src to byte-boundary)
+ ret
+
+

Inflate - Initialization & Tree Creation

+

tinf_init()

+
 tinf_build_bits_base(length_bits, length_base, 4, 3)
+ length_bits[28]=0, length_base[28]=258
+ tinf_build_bits_base(dist_bits, dist_base, 2, 1)
+ ret
+
+

tinf_build_bits_base(bits,base,delta,base_val)

+
 for i=0 to 29
+  bits[i]=min(0,i-delta)/delta
+  base[i]=base_val
+  base_val=base_val+(1 shl bits[i])
+ ret
+
+

tinf_build_fixed_trees()

+
 for i=0 to 6, tinf_len_tree.table[i]=0, next i       ;[0..6]=0   ;len tree...
+ tinf_len_tree.table[7,8,9]=24,152,112                ;[7..9]=24,152,112
+ for i=0 to 23,  tinf_len_tree.trans[i+0]  =i+256, next i  ;[0..23]   =256..279
+ for i=0 to 143, tinf_len_tree.trans[i+24] =i+0,   next i  ;[24..167] =0..143
+ for i=0 to 7,   tinf_len_tree.trans[i+168]=i+280, next i  ;[168..175]=280..287
+ for i=0 to 111, tinf_len_tree.trans[i+176]=i+144, next i  ;[176..287]=144..255
+ for i=0 to 4, tinf_dist_tree.table[i]=0, next i   ;[0..4]=0,0,0,0,0 ;\dist
+ tinf_dist_tree.table[5]=32                        ;[5]=32           ; tree
+ for i=0 to 31, tinf_dist_tree.trans[i]=i, next i  ;[0..31]=0..31    ;/
+ ret
+
+

tinf_decode_dynamic_trees()

+
 hlit  = tinf_read_bits(5)+257           ;get 5 bits HLIT (257-286)
+ hdist = tinf_read_bits(5)+1             ;get 5 bits HDIST (1-32)
+ hclen = tinf_read_bits(4)+4             ;get 4 bits HCLEN (4-19)
+ for i=0 to 18, lengths[i]=0, next i
+ for i=0 to hclen-1                      ;read lengths for code length alphabet
+  lengths[clcidx[i]]=tinf_read_bits(3)   ;get 3 bits code length (0-7)
+ tinf_build_tree(code_tree, lengths, 19) ;build code length tree
+ for num=0 to hlit+hdist-1               ;decode code lengths for dynamic trees
+  sym = tinf_decode_symbol(code_tree)
+  len=1, val=sym                         ;default (for sym=0..15)
+  if sym=16 then len=tinf_read_bits(2)+3, val=lengths[num-1] ;3..6 previous
+  if sym=17 then len=tinf_read_bits(3)+3, val=0              ;3..10 zeroes
+  if sym=18 then len=tinf_read_bits(7)+11, val=0             ;11..138 zeroes
+  for i=1 to len, lengths[num]=val, num=num+1, next i
+ tinf_build_tree(tinf_len_tree,  0,      hlit)    ;\build trees
+ tinf_build_tree(tinf_dist_tree, 0+hlit, hdist)   ;/
+ ret
+
+

tinf_build_tree(tree, first, num)

+
 for i=0 to 15, tree.table[i]=0, next i     ;clear code length count table
+ ;scan symbol lengths, and sum code length counts...
+ for i=0 to num-1, x=lengths[i+first], tree.table[x]=tree.table[x]+1, next i
+ tree.table[0]=0
+ sum=0          ;compute offset table for distribution sort
+ for i=0 to 15, offs[i]=sum, sum=sum+tree.table[i], next i
+ for i=0 to num-1  ;create code to symbol xlat table (symbols sorted by code)
+  x=lengths[i+first], if x<>0 then tree.trans[offs[x]]=i, offs[x]=offs[x]+1
+ next i
+ ret
+
+

tinf_data

+
 clcidx[0..18] = 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15   ;constants
+
+
 typedef struct TINF_TREE:
+   unsigned short table[16]     ;table of code length counts
+   unsigned short trans[288]    ;code to symbol translation table
+
+
 TINF_TREE tinf_len_tree   ;length/symbol tree
+ TINF_TREE tinf_dist_tree  ;distance tree
+ TINF_TREE code_tree       ;temporary tree (for generating the dynamic trees)
+ unsigned char lengths[288+32]   ;temporary 288+32 x 8bit ;\for dynamic tree
+ unsigned short offs[16]         ;temporary 16 x 16bit    ;/creation
+
+
 unsigned char  length_bits[30]
+ unsigned short length_base[30]
+ unsigned char  dist_bits[30]
+ unsigned short dist_base[30]
+
+

Inflate - Headers and Checksums

+

tinf_gzip_uncompress(dst, destLen, src, sourceLen)

+
 src_start=src, dst_start=dst                 ;memorize start addresses
+ if (src[0]<>1fh or src[1]<>8Bh) then ERROR   ;check id bytes
+ if (src[2]<>08h) then ERROR                  ;check method is deflate
+ flg=src[3]                                   ;get flag byte
+ if (flg AND 0E0h) then ERROR                 ;verify reserved bits
+ src=src+10                                                 ;skip base header
+ if (flg AND 04h) then src=src+2+LittleEndian16bit[src]     ;skip extra data
+ if (flg AND 08h) then repeat, src=src+1, until [src-1]=00h ;skip file name
+ if (flg AND 10h) then repeat, src=src+1, until [src-1]=00h ;skip file comment
+ hcrc=(tinf_crc32(src_start, src-src_start) & 0000ffffh))   ;calc header crc
+ if (flg AND 02h) then x=LittleEndian16bit[src], src=src+2  ;get header crc
+ if (flg AND 02h) then if x<>hcrc then ERROR                ;verify header
+ tinf_uncompress(dst, destLen, src, src_start+sourceLen-src-8)  ;----> inflate
+ crc32=LittleEndian32bit[src], src=src+4   ;get crc32 of decompressed data
+ dlen=LittleEndian32bit[src], src=src+4    ;get decompressed length
+ if (dlen<>destLen) then ERROR                              ;verify dest len
+ if (crc32<>tinf_crc32(dst_start,dlen)) then ERROR          ;verify crc32
+ ret
+
+

tinf_zlib_uncompress(dst, destLen, src, sourceLen)

+
 src_start=src, dst_start=dst         ;memorize start addresses
+ hdr=BigEndian16bit[src], src=src+2   ;get header
+ if (hdr MOD 31)<>0 then ERROR        ;check header checksum (modulo)
+ if (hdr AND 20h)>0 then ERROR        ;check there is no preset dictionary
+ if (hdr AND 0F00h)<>0800h then ERROR ;check method is deflate
+ if (had AND 0F000h)>7000h then ERROR ;check window size is valid
+ tinf_uncompress(dst, destLen, src, sourceLen-6)      ;------> inflate
+ chk=BigEndian32bit[src], src=src+4                   ;get data checksum
+ if src-src_start<>sourceLen then ERROR               ;verify src len
+ if dst-dst_start<>destLen then ERROR                 ;verify dst len
+ if a32<>tinf_adler32(dst_start,destLen)) then ERROR  ;verify data checksum
+ ret
+
+

tinf_adler32(src, length)

+
 s1=1, s2=0
+ while (length>0)
+  k=max(length,5552)    ;max length for avoiding 32bit overflow before mod
+  for i=0 to k-1, s1=s1+[src], s2=s2+s1, src=src+1, next i
+  s1=s1 mod 65521, s2=s2 mod 65521, length=length-k
+ return (s2*10000h+s1)
+
+

CDROM File Compression LArc/LHarc/LHA (LZS/LZH)

+

LHA (formerly LHarc) is an old DOS compression tool with backwards +compatibility for LArc. LHA appears to have been particulary popular in Japan, +and in the Amiga scene.
+LHA archives are used by at least one PSX game:
+

  PSX Championship Surfer (MagDemo43: HWX\*.DAT)    ;method lh5
+
+And, there are various PSX games with compression based on LArc's method lz5:
+CDROM File Compression LZ5 and LZ5-variants

+

Overall File Format

+

Default archive filename extension is .LZH for LHarc/LHA (lh*-methods), or .LZS +for LArc (lz*-methods).
+Archives can contain multiple files, and are usually terminated by a 00h-byte:
+

  LHA Header+Data for 1st file
+  LHA Header+Data for 2nd file
+  End Marker (00h)
+
+There is no central directory, one must crawl all headers to create a list of +files in the archive.
+Caution: There is a hacky test file (larc333\initial.lzs) with missing end byte +(it does just end at filesize).
+LHA Header v2 Headersize=xx00h would conflict with End Byte (as workaround, +insert a Nullbyte between Ext.Headers and Data to change Headersize to xx01h.

+

LHA Header v0 (with [14h]=00h)

+

  00h     1   Header Size (Method up to including Extended Area) (=16h+F+E)
+  01h     1   Header Checksum, sum of bytes at [02h+(0..15h+F+E)]
+  02h     5   Compression Method (eg. "-lh0-"=Uncompressed)
+  07h     4   Compressed Size
+  0Bh     4   Uncompressed Size
+  0Fh     2   Last modified time (in MS-DOS format)
+  11h     2   Last modified date (in MS-DOS format)
+  13h     1   MS-DOS File attribute (usually 20h)
+  14h     1   Header level (must be 00h for v0)
+  15h     1   Path\Filename Length
+  16h     (F) Path\Filename (eg. "PATH\FILENAME.EXT")
+                     '\' may apper in the 2nd byte of Shift_JIS, processing
+                     of Shift_JIS is indispensable when you need full
+                     implementation of reading Pathname.
+  16h+F   2   CRC16 (with initial value 0000h) on uncompressed file
+  18h+F   (E) Extended area (used by UNIX in v0)
+  18h+F+E ..  Compressed data
+
+Note: Reportedly, old LArc files don't have CRC16 (unknown if that is true, the +ONLY known version is LArc v3.33, which DOES have CRC16, if older versions +didn't have that CRC then they did perhaps behave as if E=(-2)?).

+

LHA Header v1 (with [14h]=01h)

+
  00h     1   Header Size (Method up to including 1st Ext Size) (=19h+F+E)
+  01h     1   Base Header Checksum, sum of bytes at [02h+(0..18h+F+E)]
+  02h     5   Compression Method (eg. "-lh0-"=Uncompressed)
+  07h     4   Skip size (size of all Extended Headers plus Uncompressed Size)
+  0Bh     4   Uncompressed Size
+  0Fh     2   Last modified time (in MS-DOS format)
+  11h     2   Last modified date (in MS-DOS format)
+  13h     1   Reserved     (must be 20h) (but is 02h on Amiga)
+  14h     1   Header level (must be 01h for v1)
+  15h     1   Length of Filename (or 00h when name is in Extended Header)
+  16h     (F) Filename (eg. "FILENAME.EXT; path (if any) is in Extended Header)
+  16h+F   2   CRC16 (with initial value 0000h) on uncompressed file
+  18h+F   1   Compression Tool OS ID (eg. "M"=MSDOS)
+  19h+F   (E) Extended area (unused in v1, use Ext Headers instead)
+  19h+F+E 2   Size of 1st Extended Header (0000h=None)
+  1Bh+F+E ..  Extended Header(s) (optional stuff)
+  ...     ..  Compressed data
+
+

LHA Header v2 (with [14h]=02h)

+
  00h     2   Header Size (whole Header including all Extended Headers)
+  02h     5   Compression Method (eg. "-lh0-"=Uncompressed)
+  07h     4   Compressed Size
+  0Bh     4   Uncompressed Size
+  0Fh     4   Last modified date and time (seconds since 1st Jan 1970 UTC)
+  13h     1   Reserved     (must be 20h) (but is 02h on Amiga)
+  14h     1   Header level (must be 02h for v2)
+  15h     2   CRC16 (with initial value 0000h) on uncompressed file
+  17h     1   Compression Tool OS ID (eg. "M"=MSDOS)
+  18h     2   Size of first Extended Header (0000h=None)
+  1Ah     ..  Extended Header(s) (filename and optional stuff)
+  ...     0/1 Nullbyte (End-Marker conflict: change Headersize xx00h to xx01h)
+  ...     ..  Compressed data
+
+

LHA Header v3 (with [14h]=03h)

+

Kinda non-standard (supported only in late japanese LHA beta versions): Allows +Header and Ext.Headers to exceed 64Kbyte, which is rather useless.
+

  00h     2   Word size for 32bit Header entries (always 4=32bit)
+  02h     5   Compression Method (eg. "-lh0-"=Uncompressed)
+  07h     4   Compressed Size
+  0Bh     4   Uncompressed Size
+  0Fh     4   Last modified date and time (seconds since 1st Jan 1970 UTC)
+  13h     1   Reserved     (must be 20h)
+  14h     1   Header level (must be 03h for v3)
+  15h     2   CRC16 (with initial value 0000h) on uncompressed file
+  17h     1   Compression Tool OS ID (eg. "M"=MSDOS)
+  18h     4   Header Size (whole Header including all Extended Headers)
+  1Ch     4   Size of first Extended Header (00000000h=None)
+  20h     ..  Extended Header(s) (filename and optional stuff)
+  ...     ..  Compressed data
+

+

Compression Methods

+

  Method Len    Window
+  -lz4-  -  -   -        LArc Uncompressed File
+  -lh0-  -  -   -        LHA  Uncompressed File
+  -lhd-  -  -   -        LHA  Uncompressed Directory name entry
+  -lzs-  2..17  2Kbyte   LArc LZSS-Compressed  (rare, very-very old)    ;-15bit
+  -lz5-  3..17  4Kbyte   LArc LZSS-Compressed  (LArc srandard)          ;-16bit
+  -lh1-  3..60  4Kbyte   LHA  LZHUF-Compressed (old LHA standard)
+  -lh2-  3..256 8Kbyte   LHA  Obscure test     (used in self-extractor)
+  -lh3-  3..256 8Kbyte   LHA  Obscure test     (experimental)
+  -lh4-  3..256 4Kbyte   LHA  AR002-Compressed (rare, for small RAM)    ;\4bit
+  -lh5-  3..256 8Kbyte   LHA  AR002-Compressed (new LHA standard)       ;/
+  -lh6-  3..256 32Kbyte  LHA  AR002-Compressed (rare)                   ;\
+  -lh7-  3..256 64Kbyte  LHA  AR002-Compressed (rare)                   ; 5bit
+  -lh8-  3..256 64Kbyte  LHA  AR002-Compressed (accidently same as lh7) ;
+  -lh9-  3..256 128Kbyte LHA  AR002-Compressed (unimplemented proposal) ;
+  -lha-  3..256 256Kbyte LHA  AR002-Compressed (unimplemented proposal) ;
+  -lhb-  3..256 512Kbyte LHA  AR002-Compressed (unimplemented proposal) ;
+  -lhc-  3..256 1Mbyte   LHA  AR002-Compressed (unimplemented proposal) ;
+  -lhe-  3..256 2Mbyte   LHA  AR002-Compressed (unimplemented proposal) ;
+  -lhx-  3..256 512Kbyte LHA  AR002-Compressed (rare)                   ;/
+
+Apart from above methods, there are various other custom hacks/extensions.

+

Extended Headers

+

  00h     1   Extension Type (00h..FFh, eg. 01h=Filename)
+  01h     ..  Extension Data
+  ...     2/4 Size of next Extended Header (0=None) (v1/v2=16bit, v3=32bit)
+
+Extension Type values:
+
  00h   CRC16 on whole Header with InitialValue=0000h and InitialCrcEntry=0000h
+  01h   Filename
+  02h   Directory name (with FFh instead of "\", and usually with trailing FFh)
+  3Fh   Comment (unspecified format/purpose)
+  40h   MS-DOS File attribute of MS-DOS format
+  41h   Windows FILETIME for last access, creation, and modification
+  42h   Filesize (uncompressed and compressed size, when exceeding 32bit)
+  50h   Unix Permission
+  51h   Unix User ID and Group ID
+  52h   Unix Group name
+  53h   Unix User name (owner)
+  54h   Unix Last modified time in time_t format
+  7Dh   Capsule offs/size (if the OS adds extra header/footer to the filebody)
+  7Eh   OS/2 Extended attribute
+  7Fh   Level 3 Attribute in Unix form and MS-DOS form
+  FFh   Level 3 Attribute in Unix form
+
+Note: There appears to be no MAC specific format (instead, the LHA MAC version +is including a MacBinary header in the compressed files).

+

See also

+

The site below has useful links with info about headers (see LHA Notes), source +code, and test archives:
+http://fileformats.archiveteam.org/wiki/LHA

+

CDROM File Compression UPX

+

UPX Compression (used in AmiDog's GTE test)

+

UPX is a tool for creating self-decompressing executables. It's most commonly +used for DOS/Windows EXE files, but it does also support consoles like PSX. The +PSX support was added in UPX version 1.90 beta (11 Nov 2002).
+

  000h 88h      Standard PS-X EXE header
+  088h 20h      Unknown
+  0A8h 4        ASCII ID "UPX!"
+  0ACh 1Eh      Unknown
+  0CAh 9Ah      ASCII "$info: This file is ..."
+  164h 69Ch     Zerofilled
+  800h ..       Leading zeropadding (to make below end on 800h-byte boundary)
+  ...  ..       Decompression stub
+  ...  ..       Compressed data (ending on 800h-byte boundary)
+

+

CDROM File Compression LZMA

+

LZMA is combining LZ+Huffman+Probabilities. The LZ+Huffman bitstream is rather +simple (using hardcoded huffman trees), the high compression ratio is reached +by predicting probabilities for the bitstream values (that is, the final +compressed data is smaller than the bitstream).

+

LZMA Bitstreams

+

  000h 1   Ignored byte (usually 00h, unknown purpose)
+  001h ..  Bitstream with actual compression codes
+  ...  ..  EOS end code (end of stream) (optional)
+  ...  ..  Ignored byte (present in case of Normalization after last code)
+  ...  ..  Padding to byte-boundary
+
+Apart from the bitstream, one must know several parameters (which may be +hardcoded, or stored in custom file headers in front of the bitstream):
+
  Three decompression parameters: lc, lp, pb
+  Decompressed size (required if the bitstream has no EOS end code)
+  Dictionary size (don't care when decompressing the whole file to memory)
+  Presence/Absence of EOS end code
+

+

.lzma files (LZMA_Alone format from LZMA SDK)

+

  000h 1   Parameters (((pb*5)+lp)*9)+lc  (usually 5Dh)         ;\
+  001h 4   Dictionary Size in bytes       (usually 10000h)      ; Header
+  005h 8   Decompressed Size in bytes     (or -1=Unknown)       ;/
+  00Dh 1   LZMA ignored 1st byte of bitstream (00h)             ;\LZMA
+  00Eh ..  LZMA bitstream (with optional EOS end code)          ;/
+
+The files are often starting with 5Dh,00h,00h. However, there's no real File +ID, and there's no CRC, the format is rather unsuitable for file sharing.
+The end of the bitstream is indicated by EOS end code, or by Decompressed Size +entry (or both).

+

.lz files (LZIP)

+

LZIP files can contain one or more "LZIP Members" plus optional extra data:
+

  000h ..  LZIP Member(s)
+  ...  ..  Optional extra data (if any) (eg. zeropadding or some SHA checksum)
+
+Whereas, a normal .lz file contains only one "Member", without extra data.
+Each of the "LZIP Member(s)" is having following format:
+
  000h 5   ID and version ("LZIP",01h)                          ;\LZIP Header
+  005h 1   Dictionary size (5bit+3bit code, see below)          ;/
+  006h ..  LZMA bitstream (with lc=3, lp=0, pb=2) (with EOS end code)
+  ...  4   CRC32 on uncompressed data                           ;\
+  ...  8   Size of uncompressed data                            ; LZIP Footer
+  ...  8   Size of compressed data (including header+footer)    ;/
+
+The dictionary size should be 1000h..20000000h bytes, computed as so:
+
  temp = 1 SHL (hdr[005h] AND 1Fh)
+  dict_size = temp - (temp/10h)*(hdr[005h]/20h)
+
+The LZIP format doesn't really allow to determine the uncompressed size before +decompression (one must either decompress the whole file to detect the size, or +one could try to find the Footer at end of file; which requires weird +heuristics because the LZIP manual is explicitely stating that it's valid to +append extra data after the Footer).
+http://www.nongnu.org/lzip/manual/lzip_manual.html#File-format

+

.chd (MAME compressed CDROM and HDD images)

+

The CHD format has its own headers and supports several compression methods +including LZMA. Leaving apart the CHD specific headers, the raw LZMA bitstreams +are stored as so:
+

  000h ..  LZMA bitstream (with lc=3, lp=0, pb=2) (without EOS end code)
+

+

.xz files (XZ Utils)

+

This is a slightly overcomplicated format with LZMA2 compression and optional +filters.
+CDROM File Compression XZ

+

.7z files (7-Zip archives)

+

  000h 6   ID ("7z",BCh,AFh,27h,1Ch)
+  ...  ..  ..
+
+The 7z format defines many compression methods. The ones normally used are +LZMA2 (default for 7-Zip 9.30 alpha +), LZMA (default for 7-Zip prior to 9.30 +alpha), PPMd, and bzip2.
+http://fileformats.archiveteam.org/wiki/7z

+

LZMA2 (used in .7z and .xz files)

+

LZMA2 is a container format with LZMA chunks. The LZMA function is slightly +customized: It can optionally skip some LZMA initialization steps (and thereby +re-use the dictionary/state from previous chunks). The chunks are:
+

 ChunkID=00h - Last chunk:
+  000h 1   Chunk ID (00h=End)
+ ChunkID=01h..02h - Uncompressed chunks:
+  000h 1   Chunk ID (01h=Uncompressed+ResetDictionary, 02h=Uncompressed)
+  001h 2   Uncompressed Data Size-1     (big-endian)
+  003h ..  Uncompressed Data (to be copied to destination and dictionary)
+  Note: The uncompressed data is stored in LZMA dictionary, and
+  the last uncompressed byte is updating the LZMA prevbyte.
+ ChunkID=03h..7Fh - Invalid chunks:
+  000h 1   Chunk ID (03h..7Fh=Invalid)
+ ChunkID=80h..FFh - LZMA-compressed chunks:
+  000h 1   Chunk ID (80h/A0h/C0h/E0h + Upper5bit(UncompressedSize-1))
+  001h 2   LSBs(UncompressedSize-1)       (big-endian)
+  003h 2   CompressedSize-1               (big-endian)
+  005h (1) Parameters (((pb*5)+lp)*9)+lc  (only present if ChunkID=C0h..FFh)
+  ...  ..  LZMA bitstream (without EOS end code)
+
+LZMA status gets reset depending on the Chunk ID:
+
  ChunkID  dict/prev  lc/lp/pb  state  dist[0-3]  probabilities  code/range
+  01h      reset      -         -      -          -              -
+  02h      -          -         -      -          -              -
+  80h+n    -          -         -      -          -              reset
+  A0h+n    -          -         reset  reset      reset          reset
+  C0h+n    -          reset     reset  reset      reset          reset
+  E0h+nn   reset      reset     reset  reset      reset          reset
+  (Note: Those resets occur before processing the chunk data)
+
+Note: dict/prev reset means that previous byte is assumed to be 00h (and old +dictionary content isn't used, somewhat allowing random access or multicore +decompression).
+Apart from the chunks, LZMA2 does usually contain a Dictionary Size byte:
+
  Dictionary Size byte (00h..28h = 4K,6K,8K,12K,16K,24K,..,2G,3G,4G)
+ Which can be decoded as so:
+  if (param AND 1)=0 then dict_size=1000h shl (param/2)
+  if (param AND 1)=1 then dict_size=1800h shl (param/2)
+  if param=28h then dict_size=FFFFFFFFh   ;4GB-1
+  if param>28h then error
+ In .xz files, that byte is stored alongsides with the Filter ID.
+

+

LZMA Source code

+

Compact LZMA decompression ASM code can be found here:

+

https://github.com/ilyakurdyukov/micro-lzmadec

+

Above code is for self-decompressing executables (for plain LZMA, ignore the +stuff about EXE/ELF headers). The two "static" versions are size-optimized +(they contain weird and poorly commented programming tricks, and do require +additional initialization code from "test_static.c"). For normal purposes, it's +probably better to port the 64bit fast version to 32bit (instead of dealing +with the trickery in the 32bit static version).

+

CDROM File Compression XZ

+

Overall Structure of .xz File

+

  000h ..  Stream(s)
+
+Note: To determine the total uncompressed size, one must process the file +backwards, starting at footer of last stream.

+

Stream

+
  000h 6   Header ID (FDh,"7zXZ",00h) (FDh,37h,7Ah,58h,5Ah,00h) ;\
+  006h 2   Checksum Type (0000h, 0100h, 0400h or 0A00h)         ; Header
+  008h 4   Header CRC32 on above 2 bytes                        ;/
+  00Ch ..  Compressed Block(s)                                  ;-Block(s)
+  ...  ..  Index List                                           ;-Index
+  ...  4   Footer CRC32 on below 6 bytes                        ;\
+  ...  4   Index List Size/4-1                                  ; Footer
+  ...  2   Checksum Type (must be same as in Header)            ;
+  ...  2   Footer ID ("YZ") (59h,5Ah)                           ;/
+  ...  ..  Optional Zeropadding (multiple of 4 bytes)           ;-Padding
+ Checksum Type (for Block checksums):
+  0000h=None
+  0100h=CRC32 (little-endian)
+  0400h=CRC64 (little-endian)
+  0A00h=SHA256 (big-endian)
+  Other=Reserved
+
+

Index List

+
  000h 1    Index Indicator (00h) (as opposed to 01h..FFh in Block Headers)
+  001h VL   Number of Records (must be same as number of Blocks in Stream)
+  ...  ..   Index Record(s)
+  ...  ..   Zeropadding to 4-byte boundary
+  ...  4    CRC32 on above bytes
+ Index Record:
+  000h VL   Unpadded Block Size (BlockHeader + CompressedData + 0 + Checksum)
+  ...  VL   Uncompressed Block Size
+
+

Compressed Block

+

  000h 1    Block Header Size/4-1 (01h..FFh = 8..400h bytes)           ;\
+  001h 1    Block Flags                                                ;
+  002h (VL) Compressed Size     ;present if Flags.bit6 = 1             ; Header
+  ...  (VL) Uncompressed Size   ;present if Flags.bit7 = 1             ;
+  ...  ..   Filter Info 0 (LAST filter when DECOMPRESSING)             ;
+  ...  (..) Filter Info 1       ;present if Flags.bit0-1 = 1,2,3       ;
+  ...  (..) Filter Info 2       ;present if Flags.bit0-1 = 2,3         ;
+  ...  (..) Filter Info 3       ;present if Flags.bit0-1 = 3           ;
+  ...  ..   Zeropadding to 4-byte boundary                             ;
+  ...  (..) Optional Zeropadding (multiple of 4 bytes)                 ;
+  ...  4    CRC32 on above bytes                                       ;/
+  ...  ..   Compressed Data                                            ;-Data
+  ...  ..   Zeropadding to 4-byte boundary                             ;-Pad
+  ...  (..) Checksum on uncompressed Data (None/CRC32/CRC64/SHA256)    ;-Check
+ Block Flags:
+  0-1  Number of filters-1                (0..3 = 1..4 filters)
+  2-5  Reserved (0)
+  6    Compressed Size field is present   (0=No, 1=Present)
+  7    Uncompressed Size field is present (0=No, 1=Present)
+ Filter Info:
+  000h VL   Filter ID
+  ...  VL   Size of Filter Properties
+  ...  ..   Filter Properties
+ Filter IDs:
+  03h                        Delta Filter       (with 1 byte param)
+  04h..09h                   Executable Filters (with 0 or 4 byte param)
+  21h                        LZMA2 Compression  (with 1 byte param)
+  300h..4FFh                 Reserved to ease .7z compatibility
+  20000h..7FFFFh             Reserved to ease .7z compatibility
+  2000000h..7FFFFFFh         Reserved to ease .7z compatibility
+  xxxxxxxxxxxxxxxxh          Custom Registered IDs (obtained from Lasse Collin)
+  3Frrrrrrrrrriiiih          Custom Random IDs (40bit random+16bit filterno)
+  4000000000000000h and up   Reserved for internal use (don't use in xz files)
+
+Note: The first decompression filter must be LZMA2, which reads from compressed +data stream, and writes to decompressed data (and also implies the size of +compressed/decompressed data). The other filters (if any) are unfiltering the +decompressed data.

+

Filter 21h: LZMA2 Compression Method

+

This "filter" is the actual compression method (XZ supports only one method).
+It can be combined with BCJ/Delta filters (whereas, LZMA2 must be always used +as LAST compression filter, aka FIRST decompression filter).
+

 The filter parameter is 1 byte tall:
+  Dictionary Size byte (00h..28h = 4K,6K,8K,12K,16K,24K,..,2G,3G,4G)
+ The compressed data contains:
+  LZMA2 chunks (with LZMA-compressed data and/or uncompressed data)
+

+

Filter 03h: Delta Filter

+

The filter parameter is 1 byte tall:
+

  Distance-1 (00h..FFh = distance 1..100h)
+<B> unfilter_delta(buf,len,param_byte):</B>
+  dist=byte(param)+1, i=dist   ;init dist and skip first some unfiltered bytes
+  while i<len, byte(buf[i]) = buf[i]+buf[i-dist], i=i+1
+

+

Filter 04h-09h: Executable Branch/Call/Jump (BCJ) Filters

+

These filters can replace relative jump addresses by absolute values.
+

  ID   Parameters    Alignment  Description
+  04h  0 or 4 bytes  1 byte     80x86 filter (32bit or 64bit)
+  05h  0 or 4 bytes  4 bytes    PowerPC filter (big endian)
+  06h  0 or 4 bytes  16 bytes   IA64 filter
+  07h  0 or 4 bytes  4 bytes    ARM filter (little endian)
+  08h  0 or 4 bytes  2 bytes    ARM Thumb filter (little endian)
+  09h  0 or 4 bytes  4 bytes    SPARC filter
+  0Ah,0Bh                       Inofficial hacks/proposals for ARM64?
+
+The filter parameter field can 0 or 4 bytes tall:
+
  if param_size=0 then offset=00000000h
+  if param_size=4 then offset=LittleEndian32bit(param)
+ Nonzero offsets are intended for executables with multiple sections and
+ cross-section jumps. The offset shall/must match the filter's alignment.
+<B> unfilter_bcj_x86(buf,len,offset):</B>
+  i=0, len=len-4, offset=offset+4
+  while i<len
+    x=byte[buf+i], i=i+1
+    if (x AND FEh)=E8h                     ;Opcode=E8h or E9h
+      x=LittleEndian32bit[buf+i]
+      if ((x+01000000h) AND FE000000h)=0   ;MSB=00h or FFh
+        LittleEndian32bit[buf+i]=SignExpandLower25bit(x-i-offset)
+      i=i+4
+<B> unfilter_bcj_arm(buf,len,offset):</B>
+  i=0, len=len/4, offset=(offset+8)/4
+  while i<len
+    x=LittleEndian32bit[buf+i*4]
+    if (x AND FF000000h)=EB000000h
+      LittleEndian32bit[buf+i*4]=((x-i-offset) and 00FFFFFFh)+EB000000h
+    i=i+1
+<B> unfilter_bcj_armthumb(buf,len,offset):</B>
+  i=0, len=len/2-1, offset=(offset+4)/2
+  while i<len
+    x=LittleEndian32bit[buf+i*2]
+    if (x AND F800F800h)=F800F000h
+      msw=LittleEndian16bit[buf+i*2+0] AND 7FFh
+      lsw=LittleEndian16bit[buf+i*2+2] AND 7FFh
+      x=msw*800h+lsw-i-offset
+      LittleEndian16bit[buf+i*2+0]=F000h+(7FFh and (x/800h))
+      LittleEndian16bit[buf+i*2+2]=F800h+(7FFh and (x/1))
+    i=i+1
+<B> unfilter_bcj_sparc(buf,len,offset):</B>
+  i=0, len=len/4, offset=offset/4
+  while i<len
+    x=BigEndian32bit[buf+i*4]
+    if (x AND FFC00000h)=40000000h or (x AND FFC00000h)=7FC00000h
+      x=SignExpandLower23bit(x-i-offset)
+      BigEndian32bit[buf+i*4]=(x AND 3FFFFFFFh)+40000000h
+    i=i+1
+<B> unfilter_bcj_powerpc(buf,len,offset):</B>
+  i=0, len=len/4, offset=offset/4
+  while i<len
+    x=BigEndian32bit[buf+i*4]
+    if (x AND FC000003h)=48000001h
+      BigEndian32bit[buf+i*4]=(((x/4-i-offset) AND 00FFFFFFh)*4)+48000001h
+    i=i+1
+<B> unfilter_bcj_ia64(buf,len,offset):</B>
+  i=0, len=len/10h, offset=offset/10h
+  xlat[0..1Fh]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,6,6,0,0,7,7,4,4,0,0,4,4,0,0
+  while i<len
+    flags=xlat[byte[buf] and 1Fh]       ;shared 5bit for three 41bit opcodes
+    for slot=0 to 2
+      if flags and (1 shl slot)         ;process three 41bit opcodes
+        bitbase=slot*41+5
+        hi=byte[buf+(bitbase+37)/8] shr ((bitbase+37) and 7) and 0Fh
+        lo=LittleEndian16bit[buf+(bitbase+9)/8] shr ((bitbase+9) and 7) and 07h
+        if hi=5 and lo=0
+          mid=LittleEndian32bit[buf+(bitbase+13)/8]
+          x=mid shr ((bitbase+13) and 7)
+          x=x and 8FFFFFh, if (x and 800000h) then x=x-700000h
+          x=x-i-offset
+          x=x and 1FFFFFh, if (x and 100000h) then x=x+700000h
+          mid=mid AND NOT (8FFFFFh shl ((bitbase+13) and 7))  ;strip old
+          mid=mid OR x shl ((bitbase+13) and 7))              ;place new
+          LittleEndian32bit[buf+(bitbase+13)/8]=mid           ;apply
+    i=i+1, buf=buf+10h
+

+

Cyclic Redundancy Checks (CRCs)

+

CRC32 uses 32bit (with polynomial=EDB88320h). CRC64 does basically use the same +function (with 64bit values and polynomial=C96C5795D7870F42h).

+

Endianness and Variable Length (VL) Integers

+

Little-endian is used for 16bit/32bit/64bit values (Flags, Sizes, CRCs).
+Big-endian is used for 256bit SHA256 and for values within LZMA2 chunks.
+Variable length integers (marked VL in above tables) are used for Sizes and +IDs, these values may contain max 63bit, stored in 1-9 bytes:
+

  decode_variable_len_integer:
+   i=0, num=0
+  @@lop:
+   x=[src], src=src+1, num=num+((x and 7Fh) shl i), i=i+7
+   if x AND 80h then goto @@lop
+   return num
+

+

Notes and References

+

XZ Utils for Windows is claimed to work on Win98 (that is, it will throw an +error about missing MSVCRT.DLL:___mb_cur_max_func). XZ Utils for DOS does work +on Win98.
+Official XZ file format specs for can be found at:

+

https://tukaani.org/xz/format.html

+

The BCJ filters aren't documented in XZ specs, but are defined in XZ source +code, see src\liblzma\simple\*.c). There's also this mail thread about +semi-official ARM64 filters:

+

https://www.mail-archive.com/xz-devel@tukaani.org/msg00537.html

+

CDROM File Compression FLAC audio

+

FLAC is a lossless audio compression format.

+

FLAC file format

+

  000h 4   FLAC ID ("fLaC")
+  004h ..  Metadata block with STREAMINFO
+  ...  ..  Metadata block(s) with further info (optional)
+  ...  ..  FLAC Frame(s)
+
+The whole file can be read as big-endian bitstream (although bitstream reading +is mainly required for the Frame bodies) (the Frame header/footer and Metadata +blocks are byte-aligned and can be read as byte-stream).
+Metadata Block format:
+
  1bit    Last Metadata block flag (1=Last, 0=More blocks follow)
+  7bit    Block Type (see below)
+  24bit   Size of following metadata in bytes (N)
+  N*8bit  Metadata (depending on Type)
+
+Metadata Block Types:
+
  00h = STREAMINFO
+  01h = PADDING
+  02h = APPLICATION
+  03h = SEEKTABLE
+  04h = VORBIS_COMMENT
+  05h = CUESHEET
+  06h = PICTURE
+  ..  = Reserved
+  7Fh = Invalid (to avoid confusion with a frame sync code)
+

+

FLAC METADATA_BLOCK_STREAMINFO

+
  16bit  Minimum Block size in samples (10h..FFFFh)  ;\min=max implies
+  16bit  Maximum Block size in samples (10h..FFFFh)  ;/fixed blocksize
+  24bit  Minimum Frame size in bytes (or 0=Unknown)
+  24bit  Maximum Frame size in bytes (or 0=Unknown)
+  20bit  Sample rate in Hertz (01h..9FFF6h = 1..655350 Hz)
+  3bit   Number of channels-1 (00h..07h = 1..8 channels)
+  5bit   Bits per sample-1    (03h..1Fh = 4..32 bits) (max 24bit implemented)
+  36bit  Total number of samples per channel (or 0=Unknown)
+  128bit MD5 on unencoded audio data (...in which format? endian/interleave?)
+
+

More info

+

The FLAC file format is documented here:

+

https://xiph.org/flac/format.html

+

Source code for a compact FLAC decoder can be found here:

+

https://www.nayuki.io/page/simple-flac-implementation

+

CDROM File Compression ARJ

+

ARJ archives contain several chunks

+
  Main header chunk
+  Local file chunk(s)
+  Chapter chunk(s), backup related, exist only in newer archives
+  End Marker
+
+

ARJ main "comment" header, with [00Ah]=2

+

This is stored at the begin of the archive. The format is same as for local +file header (but with file-related entries set to zero, or to global security +settings).
+

  000h 2   ARJ ID (EA60h, aka 60000 decimal)
+  002h 2   Header size (from 004h up to including Filename+Comment) (max 2600)
+  004h 1   Header size (from 004h up to including Extra Data) (1Eh+extra)
+  005h 1   Archiver version number (01h..0xh)
+  006h 1   Minimum archiver version to extract (usually 01h)
+  007h 1   Host OS
+  008h 1   ARJ Flags (bit0-7, see below)
+  009h 1   Security version (2 = current)
+  00Ah 1   File Type        (must be 2=ARJ Comment in main header)
+  00Bh 1   Reserved/Garbage (LSB of Archive creation Date/Time, same as [00Ch])
+  00Ch 4   Date/Time when archive was created
+  010h 4   Date/Time when archive was last modified
+  014h 4   Zero  (or Secured Archive size, excluding Security and Protection)
+  018h 4   Zero  (or Security envelope file position) (after End Marker)
+  01Ch 2   Zero  (or Filespec position in filename) (0) (what is that??)
+  01Eh 2   Zero  (or Security envelope size in bytes) (78h, if any)
+  020h 1   Zero  (or >2.50?: Encryption version, 0-1=Old, 2=New, 4=40bit GOST)
+  021h 1   Zero  (or >2.50?: Last chapter (eg. 4 when having chapter 1..4)
+  022h (1) Extra data: ARJ Protection factor                         ;\extra,
+  023h (1) Extra data: ARJ Flags (bit0=ALTVOLNAME, bit1=ReservedBit) ; if any
+  024h (2) Extra data: Spare bytes                                   ;/
+  ...  ..  Filename, max 500 bytes ("FILENAME.ARJ",00h)
+  ...  ..  Comment, max 2048 bytes ("ASCII Comment",00h)
+  ...  4   CRC32 on Header (from 004h up to including Comment)
+  ...  2   Size of 1st extended header (usually 0=none)
+  ...  (0) Extended Header(s?) (usually none such)
+

+

ARJ local file header, with [00Ah]=0,1,3,4

+

This occurs at the begin of each file in the archive.
+

  000h 2   ARJ ID (EA60h, aka 60000 decimal)
+  002h 2   Header size (from 004h up to including Filename+Comment) (max 2600)
+  004h 1   Header size (from 004h up to including Extra Data) (1Eh+extra)
+  005h 1   Archiver version number
+  006h 1   Minimum archiver version to extract (usually 01h)
+  007h 1   Host OS
+  008h 1   ARJ Flags (bit0,2-5)
+  009h 1   Method
+  00Ah 1   File Type (0=Binary, 1=Text, 3=Directory Name, 4=Volume Name)
+  00Bh 1   Reserved/Garbage (LSB of Archive update Date/Time?)
+  00Ch 4   Date/Time modified
+  010h 4   Filesize, compressed (max 7FFFFFFFh)
+  014h 4   Filesize, uncompressed
+  018h 4   CRC32 on uncompressed file data
+  01Ch 2   Zero  (or Filespec position in filename) (what is that??)
+  01Eh 2   File access mode (aka MSDOS file attribute) (20h=Normal)
+  020h 1   Zero  (or >2.50?: first chapter of file's lifespan)
+  021h 1   Zero  (or >2.50?: last chapter of file's lifespan)
+  022h (4) Extra data: Extended file position (maybe for split?)  ;\extra,
+  026h (4) Extra data: Date/Time accessed                  ;\ARJ  ; 0,4 or 10h
+  03Ah (4) Extra data: Date/Time created                   ; 2.62 ; bytes
+  03Eh (4) Extra data: Original file size even for volumes ;/     ;/
+  ...  ..  Filename, max 500 bytes ("PATH/FILENAME.EXT",00h)
+  ...  ..  Comment, max 2048 bytes ("ASCII Comment",00h)
+  ...  4   CRC32 on Header (from 004h up to including Comment)
+  ...  2   Size of 1st extended header (usually 0=none)
+  ...  (0) Extended Header(s?) (usually none such)
+  ...  ..  Compressed file data
+
+Entry 3Eh might be meant to contain Original Size of TEXT files (with CR,LFs), +however, the entry is just set to 00000000h in ARJ 2.75a. Or maybe it's meant +to mean size of whole file (in split-volumes)?

+

ARJ backup "chapter" header (ARJ >2.50?) (exists in 2.75a), with [00Ah]=5

+

This is rarely used and supported only in newer ARJ versions. The format is +same as for local file header (but with file-related entries being nonsense in +TECHNOTE; in practice, those nonsense values seem to be zero).
+

  000h 2   ARJ ID (EA60h, aka 60000 decimal)
+  002h 2   Header size (from 004h up to including Filename+Comment) (max 2600)
+  004h 1   Header size (from 004h up to including Extra Data) (1Eh+extra)
+  005h 1   Archiver version number (eg. 0Ah=2.75a)
+  006h 1   Minimum archiver version to extract (usually 01h)
+  007h 1   Host OS
+  008h 1   ARJ Flags (usually 00h)
+  009h 1   Method (usually 01h, although chapters have no data)  what file???
+  00Ah 1   File Type (must be 5=ARJ Chapter)
+  00Bh 1   Reserved/Garbage (LSB of Chapter Date/Time, same as [00Ch])
+  00Ch 4   Date/Time stamp created
+  010h 4   Zero  (or reportedly, ?)                              what question?
+  014h 4   Zero  (or reportedly, ?)                              what question?
+  018h 4   Zero  (or reportedly, original file's CRC32)          what file???
+  01Ch 2   Zero  (or reportedly, entryname position in filename) what file???
+  01Eh 2   Zero  (or reportedly, file access mode)               what file???
+  020h 1   Chapter range start (01h=First chapter?)              what range???
+  021h 1   Chapter range end   (contains same value as above)    what range???
+  022h (4) Extra data: Extended file position (usually none such)what extra???
+  ...  ..  Filename ("<<<001>>>",00h for First chapter)
+  ...  ..  Comment  ("",00h)
+  ...  4   CRC32 on Header (from 004h up to including Comment)
+  ...  2   Size of 1st extended header (usually 0=none)
+  ...  (0) Extended Header(s?) (usually none such)
+

+

ARJ End Marker (with [002h]=0000h)

+

This is stored at the end of the archive.
+

  000h 2   ARJ ID (EA60h, aka 60000 decimal)
+  002h 2   Header size (0=End)
+
+Note: The End Marker may be followed by PROTECT info and Security envelope.

+

ARJ Method [009h]

+
  0 = stored (uncompressed)
+  1 = compressed most (default) (Window=6800h=26Kbyte, Chars=255, Tree=31744)
+  2 = compressed medium         (Window=5000h=20Kbyte, Chars=72, Tree=30720)
+  3 = compressed less           (Window=2000h=8Kbyte, Chars=32, Tree=30720)
+  4 = compressed least/fastest  (Window=6800h? or 8000h?)
+  8 = no data, no CRC  ;\unknown if/where that is used (maybe only used
+  9 = no data          ;/internally, and never stored in actual files?)
+
+

ARJ File Type [00Ah]

+
  0 = binary file (default)
+  1 = text file (with converted line breaks, via -t1 switch)
+  2 = ARJ comment header (aka ARJ main file header)
+  3 = directory name
+  4 = volume label (aka disc name)
+  5 = ARJ chapter label (aka begin of newer backup sections)
+
+

ARJ Flags (in Main [008h])

+
  0  GARBLED
+  1  OLD_SECURED   has old signature (with signature in Main Header?)
+  1  ANSIPAGE      ANSI codepage used by ARJ32 (for what? for "FILENAME.ARJ"?)
+  2  VOLUME        presence of succeeding volume
+  3  ARJPROT
+  4  PATHSYM       archive name translated ("\" changed to "/")
+  5  BACKUP        obsolete
+  6  SECURED       has new signature (in security envelope?)
+  7  ALTNAME       dual-name archive
+
+

ARJ Flags (in Local [008h])

+
  0  GARBLED       passworded file
+  1  NOT USED
+  2  VOLUME        continued file to next volume (file is split)
+  3  EXTFILE       file starting position field (for split files)
+  4  PATHSYM       filename translated ("\" changed to "/")
+  5  BACKUP_FLAG   obsolete
+
+

ARJ Flags (in Chapter [008h])

+
  0  GARBLED                          ;\
+  1  RESERVED                         ;
+  2  VOLUME                           ; what does that mean in Chapters???
+  3  EXTFILE                          ;
+  4  PATHSYM                          ;/
+  5  BACKUP        obsolete < 2.50a   ;-how can obsolete exist in Chapters???
+  6  RESERVED
+
+

Host OS [007h]

+
  0=MSDOS, 1=PRIMOS, 2=UNIX, 3=AMIGA, 4=MACDOS (aka MAC-OS)
+  5=OS/2, 6=APPLE GS, 7=ATARI ST, 8=NEXT
+  9=VAX VMS, 10=WIN95, 11=WIN32 (aka WinNT or so?)
+
+

ARJ Method 1-3 (LHA/LZH compression)

+

These methods are same as LHA's "-lh6-" compression method (albeit the three +ARJ methods are allocating slighly less memory for the sliding window).

+

ARJ Method 4 (custom fastest compression)

+

 @@decompress_lop:
+  if dst>=dst_end then goto @@decompress_done
+  width=count_ones(max=7), len = get_bits(width) + (1 shl width)+1
+  if len=2 then
+    [dst]=get_bits(8), dst=dst+1
+  else ;len>=3
+    width=count_ones(max=4)+9, disp = get_bits(width) + (1 shl width)-1FFh
+    for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+  goto @@decompress_lop
+ @@decompress_done:
+  ret
+ ;---
+ count_ones(max):
+  num=0
+ @@lop:
+  if get_bits(1)=1 then
+    num=num+1, if num<max then goto @@lop
+  return num
+
+get_bits(N) is same as in method 1-3 (fetching N bits, MSB first, starting with +bit7 of first byte).

+

ARJ Glossary & Oddities

+

BACKUPs seem to keep old files (instead overwrting them by newer files)
+CHAPTERs seems to be a new backup type (instead of [008h].Bit5=Backup flag).
+COMMENTS can be text... with ANSI.SYS style ANSI escape codes?
+DATE/TIME stamps seem to be MSDOS format (16bit date plus 16bit time)
+EXTENDED headers seem to be unused, somewhat inspired on LHA format but with +CRC32 instead CRC16 (unknown if the "1st extended header" can be followed by +2nd, 3rd, and further extended headers in LHA fashion) (bug: older ARJ versions +are reportedly treating the extended CRC32 as 16bit value).
+GARBLED seems to refer to encrypted password protected archives.
+PROTECTED seems to mean Error Correction added in newer ARJ archives.
+SECURED seems to mean archive with signature from registered manufacturers.
+SPLIT aka VOLUMEs means large ARJ's stored in fragments on multiple disks.
+TEXT (aka [00Ah]=1 aka -t1 switch aka "C Text" aka "7-bit text") converts +linebreaks from CR,LF to LF to save memory (the uncompressed size and +uncompressed CRC32 entries refer to that converted LF format, not to the +original CR,LF format; the official name "7-bit text" is nonsense: All +characters are stored as 8bit values, not 7bit values).
+TIMEBOMB causes newer ARJ versions to refuse to work (and request the user to +check for non-existing newer updates) (eg. ARJ 2.86 is no longer working, ARJ +2.75a does still work without timebomb).

+

See also

+

The various ARJ versions include .TXT or .DOC files (notably, ARJ.TXT is user +manual, TECHNOTE.TXT contains hints on the ARJ file format). There's also an +open source version.

+

CDROM File Compression ARC

+

ARC Archives

+

ARC is an old DOS and CP/M compression tool from 1985-1990. ARC files contain +chunks in following format:
+

  000h 1     Fixed ID (1Ah)
+  001h 1     Compression Method (00h..1Fh)
+  002h 13    Filename ("FILENAME.EXT",00h) (garbage-padded if shorter)
+  00Fh 4     Filesize, compressed
+  013h 4     File Timestamp in MSDOS format
+  017h 2     CRC16 with initial value 0000h on uncompressed/decrypted file
+  019h (4)   Filesize, uncompressed  ;<-- not present for Method=1
+  ...  ..    Compressed file data (size as stored in [00Fh])
+
+The chunksize depends on the Method:
+
  Method 00h and 1Fh --> Chunksize=02h       (archive/subdir end markers)
+  Method 01h         --> Chunksize=19h+[0Fh] (old uncompressed ARC archives)
+  Others Methods     --> Chunksize=1Dh+[0Fh] (normal case)
+
+Compression Methods (aka "header versions"):
+
  00h     End-of-archive marker (1Ah,00h)
+  01h     ARC v?     Uncompressed (with short 19h-byte header)
+  02h     ARC v?     Uncompressed (with normal 1Dh-byte header)
+  03h     ARC v?     Packed    (RLE90)                   Used for small files
+  04h     ARC v?     Squeezed  (RLE90+Huffman)           Based on CP/M Squeeze
+  05h     ARC v4.00  Crunched  (OldRandomizedLZW)        Derived from LZWCOM
+  06h     ARC v4.10  Crunched  (RLE90+OldRandomizedLZW)  Alike CP/M Crunch v1.x
+  07h     ARC vBeta? Crunched  (RLE90+NewRandomizedLZW)  Leaked beta version?
+  08h     ARC v5.00  Crunched  (RLE90+ClearGap12bitLZW)  Most common ARC method
+  09h     Inofficial Squashed  (ClearGap13bitLZW)        Used by PKARC/PKPAK
+  0Ah     ARC v7.xx  Trimmed   (RLE90+LZHUF)             Based on LHArc lh1
+  0Ah     Inofficial Crushed   (RLE90+LZW/LZMW?)         PAK
+  0Bh     Inofficial Distilled (LZ77+Huffman)            PAK v2.0
+  14h-1Dh ARC v6.0 Used/reserved for Information items:
+  14h     Archive info
+  15h     Extended File info (maybe a prefix(?) for actual file entries?)
+  16h     OS-specific info
+  1Eh-27h ARC v6.0 Used/reserved for Control items:
+  1Eh     ARC v6.00 Subdir (nested ARC-like format, created by the "z" option)
+  1Fh     ARC v6.00 End-of-subdir marker (1Ah,1Fh)
+  48h     Not used in ARC  ;\Hyper archives start with 1Ah,48h or 1Ah,53h
+  53h     Not used in ARC  ;/(an unrelated format that also starts with 1Ah)
+  80h-xxh Not used in ARC  ;-Spark archives (ARC-like, with extended headers)
+
+Information items use standard 1Dh-byte headers (with [002h]="",00h, +[00Fh]=SizeOfAllItem(s), [019h]=Junk. The data part at offset 01Dh can contain +one or more item(s) in following format:
+
  000h 2     Item size (LEN)
+  002h 1     Item Subtype
+  003h ..    Item Data (LEN-3 bytes)
+
+Information item types as used by ARC 6.0:
+
  Method=14h, Subtype=0  Archive description          (eg. "Comment blah",00h)
+  Method=14h, Subtype=1  Archive creator program name (eg. "ARC 7.12 ...",00h)
+  Method=14h, Subtype=2  Archive modifier program name
+  Method=15h, Subtype=0  File description             (eg. "Comment blah",00h)
+  Method=15h, Subtype=1  File long filename (if not MS-DOS "8.3" filename)
+  Method=15h, Subtype=2  File extended date-time info (reserved)
+  Method=15h, Subtype=3  File Icon                    (reserved)
+  Method=15h, Subtype=4  File attributes (see below)  (eg. "RWHSN",00h)
+  Method=16h, Subtype=.. Operating system info        (reserved)
+
+File attributes can contain following uppercase chars:
+
  R=ReadAccess, W=WriteAccess, H=HiddenFile, 1=SystemFile, N=NetworkShareable
+

+

Sub-directories

+

Sub-directories are implemented as nested ARC files - about same as when +storing the sub-directory files in SUBDIR.ARC, and including that SUBDIR.ARC +file in the main archive with Method 02h. Except that:
+It's using Method 1Eh (instead Method 02h), with filename SUBDIR (instead +SUBDIR.ARC), and with [019h]=Nonsense (instead uncompressed size), and the +nested file ends with Method 1Fh (instead Method 00h).

+

RLE90 (run-length compression with value 90h used as escape code)

+

ARC does use raw RLE90 for small files (eg. 4-byte "aaaa"). ARC does also use +RLE90 combined with other methods (perhaps because ARC wasn't very fast, +compressing 100Kbytes could reportedly take several minutes; and without RLE90 +pre-compression it might have been yet slower).
+

  90h,00h       Output 90h, but DON'T change prevbyte    ;<-- ARC
+  90h,00h       Output 90h, and DO set prevbyte=90h      ;<-- BinHex
+  90h,00h       Output 90h, and UNKNOWN what to do       ;<-- StuffIt
+  90h,01h..03h  Output prevbyte 00h..02h times (this is not useful)
+  90h,04h..FFh  Output prevbyte 03h..FEh times (this does save memory)
+  xxh           Output xxh, and memorize prevbyte=xxh
+ arc_decompress_rle90:
+  src_end = src+src_size
+  prevbyte = <initially undefined in ARC source code>
+ @@decompress_lop:
+  if src>=src_end then goto @@decompress_done
+  x=[src], src=src+1
+  if x<>90h then
+    [dst]=x, dst=dst+1, prevbyte=x    ;output x, and memorize prevbyte=x
+  else  ;x=90h
+    x=[src], src=src+1
+    if x=00h then
+      [dst]=90h, dst=dst+1            ;output 90h, but DO NOT change prevbyte
+      if BinHex then prevbyte=90h     ;for BinHex, DO change prevbyte
+    else
+      for i=1 to x-1, [dst]=prevbyte, dst=dst+1, next i
+  goto @@decompress_lop
+
+RLE90 is used by ARC (and Spark and ArcFS), StuffIt, and BinHex (some of these +may handle "prevbyte" differently; the handling in ARC is somewhat stupid as it +cannot compress repeating 90h-bytes).

+

Squeeze

+

  000h 2    Number of Tree entries (0..100h) (when 0, assume tree=FEFFh,FEFFh)
+  002h N*4  Tree entries (16bit node0, 16bit node1)
+  ...  ..   Huffman bitstream (starting in bit0 of first byte)
+  ...  ..   Maybe supposedly padding to byte boundary?
+ The 16bit nodes are:
+  0000h..00FFh  Next Tree index
+  0100h..FEFEh  Invalid
+  FEFFh         End of compressed data
+  FF00h..FFFFh  Data values FFh..00h (these are somewhat inverted/reversed)
+ arc_decumpress_squeeze:
+  if [src]=0000h then tree=empty_tree, else tree=src+2  ;-start tree
+  InitBitstreamLsbFirst(src+2+[src]*4)                  ;-start bitstream
+ @@decompress_lop:
+  index=0000h                                           ;\
+  while index<FEFFh                                     ; huffman decode
+    index=[tree+index*4+GetBits(1)*2]                   ;/
+  if index>FEFFh then                                   ;-check end code
+    [dst]=(index XOR FFh) AND FFh), dst=dst+1           ;-store data
+    goto @@decompress_lop
+  return
+ empty_tree dw FEFFh,FEFFh   ;upen empty tree, ARC defines two 1bit END codes
+
+http://fileformats.archiveteam.org/wiki/Squeeze

+

Randomized LZW

+

 arc_decompress_randomized_lzw:
+  num_free=1000h, stack=empty, oldcode=-1
+  for i=0 to FFFh, lzw_parent[i]=EEEEh    ;mark all codes as unused
+  for i=0 to FFh, create_code(FFFFh,i)    ;codes for 00h..FFh with parent=none
+ @@decompress_lop:
+  if src>=src_end then goto @@decompress_done
+  code=GetBitsMsbFirst(12), i=code
+  if lzw_parent[i]=EEEEh then i=oldcode, push(oldbyte)  ;-for KwKwK strings
+  while lzw_parent[i]<>FFFFh, push(lzw_data[i]), i=lzw_parent[i]
+  oldbyte=lzw_data[i], [dst]=oldbyte, dst=dst+1
+  if oldcode<>-1 then create_code(oldcode,oldbyte)
+  oldcode=code
+  while stack<>empty, [dst]=pop(), dst=dst+1
+  goto @@decompress_lop
+ @@decompress_done:
+  ret
+ ;---
+ create_code(parent,data):
+  if num_free=0 then goto @@no_further_codes, else num_free=num_free-1  ;-full
+  i=(parent+data) AND 0000FFFFh                                         ;\
+  if method=7 then i=(i*3AE1h) AND FFFh         ;new "fast" randomizer  ;
+  else i=(sqr(i OR 800h)/40h) AND FFFh          ;old "slow" randomizer  ;
+  if lzw_parent[i]=EEEEh then goto @@found_free                         ; alloc
+  while lzw_sibling[i]>0000h, do i=lzw_sibling[i]    ;find chain end    ; code
+  e=i, i=(i+65h) AND FFFh     ;memorize chain end & do some random skip ;
+  while lzw_parent[i]<>EEEEh, do i=(i+1) AND FFFh    ;find a free code  ;
+  lzw_sibling[e]=i    ;weirdly, i=0 will make it behave as sibling=none ;
+ @@found_free:                                                          ;/
+  lzw_data[i]=data, lzw_parent[i]=parent, lzw_sibling[i]=0000h          ;-apply
+ @@no_further_codes:
+  ret
+
+Codes are always 12bit (unlike normal LZW that often starts with 9bit codes).
+There won't be any new codes created if the table is full, the existing codes +can be kept used if they do match the remaining data (unfortunatly this LZW +variant has no Clear code for resetting the table when they don't match).
+Instead of just using the first free entry, code allocation is using some weird +pseudo-random-sibling logic (which is totally useless and will slowdown +decompression, but compressed files do contain such randomized codes, so it +must be reproduced here).

+

ClearGap LZW

+

This is more straight non-randomized LZW with Clear codes (and weird gaps after +Clear codes). The compression (and gaps) are same as for nCompress (apart from +different headers):
+CDROM File Compression nCompress.Z
+

  ARC Method 8 with 1-byte header (0Ch) --> nCompress 3-byte header 1Fh,9Dh,8Ch
+  ARC Method 9 without header           --> nCompress 3-byte header 1Fh,9Dh,8Dh
+
+Method 8 does have 0Ch as first byte (indicating max 12bit codesize, this must +be always 0Ch, the ARC decoder supports only that value). Method 9 uses max +13bit codesize (but doesn't have any leading codesize byte).

+

LZHUF

+

This is based on LHArc lh1. Like lh1, it does have 13Ah data/len codes, and +1000h distance codes. There are two differences:
+

  Differences          LHArc method lh1        ARC method 0Ah
+  Data/len codes:      100h..139h=Len(3..3Ch)  100h=End, 101h..139h=Len(3..3Bh)
+  Initial dictionary:  20h-filled              Uninitialized
+

+

Notes

+

ARC file/directory names are alphabetically sorted, that does apply even when +adding files to an existing archive (they are inserted at alphabetically sorted +locations rather than being appended at end of archive).
+ARC files can be encrypted/garbled with password (via "g" option), the chunk +header doesn't contain any flags for indicating encrypted files (except, the +CRC16 will be wrong when not supplying the correct password).
+ARC end-marker (1Ah,00h) may be followed by additional padding bytes, or by +additional information from third-party tools:
+

  PKARC/PKPAK adds comments (starting with "PK",AAh,55h)
+  PAK adds extended records (described in PAK.DOC file in the v2.51)
+

+

See also

+

http://fileformats.archiveteam.org/wiki/ARC_(compression_format)

+

https://www.fileformat.info/format/arc/corion.htm

+

http://cd.textfiles.com/pcmedic/utils/compress/arc520s.zip - source code

+

https://github.com/ani6al/arc - source code, upgraded with method 9 and 4

+

https://entropymine.wordpress.com/2021/05/11/arcs-trimmed-compression-scheme/

+

http://www.textfiles.com/programming/FORMATS/arc-lbr.pro - benchmarks

+

CDROM File Compression RAR

+

RAR is a compression format for enthusiastic users (who love to download the +latest RAR version before being able to decompress those RAR files).

+

RAR v1.3 (March 1994, used only in RAR 1.402)

+

This format was only used by RAR 1.402, and discontinued after three months +when RAR 1.5 got released.
+

 File Header:
+  000h 4     ID "RE~^" (aka 52h,45h,7Eh,5Eh)
+  004h 2     Header Size  (usually 0007h, or bigger when Comment/Ext1 exist)
+  006h 1     Archive Flags (80h or xxh)
+  ...  (2)   Archive Comment Size   ;\Only present when ArchiveFlags.bit1=1
+  ...  (..)  Archive Comment Data   ;/
+  ...  (2)   Ext1 Size              ;\Only present when ArchiveFlags.bit5=1
+  ...  (..)  Ext1 Data              ;/
+  ...  ..    Unknown (TECHNOTE hints sth can be here, when bigger HeaderSize?)
+ Archive Flags:
+  0   Volume   (maybe related to split-volume on several floppies?)
+  1   Comment
+  2   Unknown? (non-english description is in 1.402's TECHNOTE.DOC)
+  3   Unknown? (non-english description is in 1.402's TECHNOTE.DOC)
+  4   Unknown? (non-english description is in 1.402's TECHNOTE.DOC)
+  5   EXT1
+  6   Unspecified (maybe unused)
+  7   Unspecified (maybe unused, but... it's usually 1)
+ File Data blocks:
+  000h 4     Filesize, compressed
+  004h 4     Filesize, uncompressed
+  008h 2     Checksum on uncompressed? file (sum=LeftRotate16bit(sum+byte[i])
+  00Ah 2     Header Size (usually 0015h+FilenameLength)
+  00Ch 4     File Modification Timestamp in MSDOS format
+  010h 1     File Attribute in MSDOS format (20h=Normal)
+  011h 1     Flags
+  012h 1     Version (0=0.99, 1=1.00, 2=1.30) (always 2 in public version)
+  013h 1     Filename Length
+  014h 1     Method (00h=m0a=Stored, 03h=m3a=Default) (1..5 = fastest..best)
+  ...  (2)   File Comment Length        ;\Only present if FileFlags.bit3=1
+  ...  (..)  File Comment Data          ;/
+  ...  ..    Filename ("PATH\FILENAME.EXT", without any end marker)
+  ...  ..    Unknown (TECHNOTE hints sth can be here, when bigger HeaderSize?)
+  ...  ..    Compressed file data
+ File Flags:
+  0   Unknown? (non-english description is in 1.402's TECHNOTE.DOC)
+  1   Unknown? (non-english description is in 1.402's TECHNOTE.DOC)
+  2   Unknown? (non-english description is in 1.402's TECHNOTE.DOC)
+  3   Comment  (non-english description is in 1.402's TECHNOTE.DOC)
+  4-7 Unspecified (maybe unused)
+

+

RAR 1.5 (June 1994) and newer

+

Overall Chunk Format:
+

  000h 2    Chunk Header CRC; Lower 16bit of CRC32 on [002h..HdrSize-1 or less]
+  002h 1    Chunk Type (72h..7Ah)
+  003h 2    Chunk Flags
+  005h 2    Chunk Header Size
+  007h (4)  Data block size    ;<-- Only present if Flags.bit15=1
+  ...  ..   Header values (depending on Chunk Type and Chunk Header Size)
+  ...  ..   Data block         ;<-- Only present if Flags.bit15=1
+ Chunk Types:
+  72h="r"=Marker block (with "r" being 3rd byte in ID "Rar!",1Ah)
+  73h="s"=Archive header
+  74h="t"=File header
+  75h="u"=Old style Comment header (nested within Type 73h/74h)
+  76h="v"=Old style Authenticity information
+  77h="w"=Old style Subblock
+  78h="x"=Old style Recovery record
+  79h="y"=Old style Authenticity information
+  7AH="z"=Subblock
+ Chunk Flags:
+  0-13   Flags, meaning depends on Chunk Type
+  14     If set, older RAR versions (before 1.52 or so?) will ignore the
+               block and remove it when the archive is updated. If clear, the
+               block is copied to the new archive file when the archive is
+               updated;
+               or does "older" mean older than the "archiver version"?
+  15     Data Block present (0=No, 1=Yes, with size at [007h])
+

+

Type 72h, Marker Block (MARK_HEAD)
+This 7-byte ID occurs at the begin of RAR files (or after the executable in +case of self-extracting files).
+

  000h 7       ID ("Rar!",1Ah,07h,00h) (or "Rar!",1Ah,07h,01h for RAR 5.0)
+ The above ID can be somewhat parsed as normal chunk header, as so:
+  000h 2       Faux CRC          (6152h, no actual valid CRC)
+  002h 1       Chunk Type        (72h)
+  003h 2       Faux Flags        (1A21h, no actual meaning)
+  005h 2       Chunk Header size (0007h)
+

+

Type 73h, Archive Header (MAIN_HEAD)
+

  000h 2       CRC32 AND FFFFh of fields HEAD_TYPE to RESERVED2
+  002h 1       Chunk Type: 73h
+  003h 2       Archive HeaderFlags
+  005h 2       Header size (usually 000Dh) (plus Comment Block, if any)
+  007h 2       RESERVED1 (0000h)
+  009h 4       RESERVED2 (0000011Dh)
+  ...  (..)    Comment block ;<-- only present if Flags.bit1=1
+  ...  (..)    Reserved for additional blocks
+ Archive Header Chunk Flags:
+  0     Volume attribute (archive volume) (split-volume? volume-label? what?)
+  1     Archive comment present              ;<-- used only before RAR 3.x
+          RAR 3.x uses "the separate comment block" and does not set this flag.
+  2     Archive lock attribute
+  3     Solid attribute (solid archive)
+  4     New volume naming scheme (0=Old="name.???", 1=New="name.partN.rar")
+  5     Authenticity information present     ;<-- used only before RAR 3.x
+  6     Recovery record present
+  7     Chunk headers are encrypted
+  8     First volume                         ;<-- set only by RAR 3.0 and later
+  9-13  Reserved for internal use
+  14-15 See overall Chunk Format
+

+

Type 74h, File Header (File in Archive)
+

  000h 2     CRC32 AND FFFFh on HEAD_TYPE to FILEATTR and file name
+  002h 1     Header Type: 74h
+  003h 2     Bit Flags
+  005h 2     File header full size including file name and comments
+  007h 4     Compressed file size (can be bigger than uncompressed)
+  00Bh 4     Uncompressed file size
+  00Fh 1     Operating system used for archiving
+  010h 4     CRC32 on uncompressed file
+  014h 4     File Modification Timestamp in MSDOS format
+  018h 1     RAR version needed to extract file (Major*10+Minor) (min=0Fh=1.5)
+  019h 1     Compression Method (usually 35h in RAR 1.52)
+  01Ah 2     Filename size
+  01Ch 4     File Attribute in MSDOS format (20h=Normal, Upper24bit=whatever=0)
+  ...  (..)  Comment block                      ;-Only present if Flags.bit3=1
+  ...  (4)   MSBs of compressed file size       ;\Only present if Flags.Bit8=1
+  ...  (4)   MSBs of uncompressed file size     ;/
+  ...  ..    Filename ("PATH\FILENAME.EXT")
+  ...  (..)  Filename extra fields (see Flags.bit9+bit11)
+  ...  (8)   Encryption SALT                    ;-Only present if Flags.Bit10=1
+  ...  (..)  Extended Time, variable size       ;-Only present if Flags.Bit12=1
+  ...  (..)  * other new fields may appear here.
+  ...  ..    Compressed file data
+ File Chunk Flags:
+  0     File continued from previous volume
+  1     File continued in next volume
+  2     File encrypted with password
+  3     File comment present              ;<-- used only before RAR 3.x
+          RAR 3.x uses the separate comment block and does not set this flag.
+  4     Information from previous files is used (solid flag) ;RAR 2.0 and later
+  5-7   Dictionary bits (for RAR 2.0 and later)
+  8     64bit Filesizes (for files "larger than 2Gb")
+  9     Unicode Filename, this can be in Dual or Single name form:
+          Dual name:   "NormalName",00h,"UnicodeName"   ;<-- in UTF-8 or what?
+          Single name: "UnicodeName"                    ;<-- in UTF-8
+  10    Header contains 8-byte Encryption SALT entry
+  11    Backup File (with version number ";n" appended to filename)
+  12    Extended Time field present
+  13-14 -
+  15    Data Block present (always 1=With 32bit size at [007h], or 64bit size)
+ Dictionary Bits (bit5-7)
+  00h=Dictionary Size 64 Kbyte
+  01h=Dictionary Size 128 Kbyte   ;\
+  02h=Dictionary Size 256 Kbyte   ; RAR 2.0 and up
+  03h=Dictionary Size 512 Kbyte   ;
+  04h=Dictionary Size 1024 Kbyte  ;/
+  05h=Dictionary Size 2048 Kbyte  ;\RAR ?? and up
+  06h=Dictionary Size 4096 Kbyte  ;/
+  07h=File is a directory         ;-RAR 2.0 and up
+ Operating System Indicators:
+  00h=MS DOS
+  01h=OS/2
+  02h=Windows
+  03h=Unix
+  04h=Mac OS
+  05h=BeOS
+  ??h=Android?
+ Compression Method:
+  35h=Default in RAR 1.52 (used even when file is too small to be compressed)
+  xxh=Other methods (unknown values)
+  30h=Stored (RAR 2.00 supports uncompressed small files and -m0 switch)
+  N/A=Stored (RAR 1.52 simply ignores "-m0" switch, and enforces "-m1" or so)
+

+

Type 75h, Comment block:
+

  000h 2    Header CRC of fields from HEAD_TYPE to COMM_CRC
+  002h 1    Chunk Type: 75h
+  003h 2    Chunk Flags (unknown if/which flags are used)
+  005h 2    Chunk Header size (0Eh+Compressed comment size)
+  007h 2    Uncompressed comment size
+  009h 1    RAR version needed to extract comment
+  00Ah 1    Packing Method
+  00Ch 2    Comment CRC
+  00Eh ..   Compressed comment data
+

+

Sub-formats
+The RAR format is comprised of many sub-formats that have changed over the +years. The different formats and their descriptions are as follows:
+

  * 1.3 (Does not have the RAR! signature)
+        o There is difficulty finding information regarding this sub-format.
+  * 1.5
+        o Utilizes a proprietary compression method that is not public.
+        o Considered the root model of subsequent formats.
+        o A detailed list of information can be found here.
+  * 2.0
+        o Utilizes a proprietary compression method that is not public.
+        o Based off of version 1.5 of the RAR file format.
+  * 3.0
+        o Utilizes the PPMII and Lempel-Ziv (LZSS)] algorithms.
+        o Encryption now uses cipher block chaining (AES?-CBC) instead of AES
+        o Based off of version 1.5 of the RAR file format.
+

+

See also

+

Older RAR versions did include a TECHNOTE file describing the file format of +those versions (TECHNOTE for 1.402 exist in unknown-language only, perhaps +russian, and TECHNOTE was discontinued somewhere between 2.5 and 2.9).
+There is official decompression source code for newer RAR versions.

+

CDROM File Compression ZOO

+

ZOO Archives

+
 File Header:
+  000h 20   Text Message (usually "ZOO #.## Archive.",1Ah,00h,00h)
+  014h 4    ID (FDC4A7DCh) (use this ID for detection, and ignore above text)
+  018h 4    Offset to first Chunk          (22h or 2Ah+commentsize?)
+  01Ch 4    Offset to first Chunk, negated (-22h or -2Ah-commentsize?)
+  020h 1+1  Version needed to extract (Major,Minor) (usually 1,01 or 2,00)
+  022h (1)  Archive Header Type (01h)                           ;\
+  023h (4)  Offset to Archive Comment (0=None)                  ; v2.00 and
+  027h (2)  Length of Archive Comment (0=None)                  ; up only
+  029h (1)  Version Data (01h or 03h)          "HVDATA"         ;/
+ File Chunks:
+  000h 4    ID (FDC4A7DCh)
+  004h 1    Type of directory entry (1=Old, 2=New, with extra entries)
+  005h 1    Compression method (0=Stored, 1=LZW/default, 2=LZH)
+  006h 4    Offset to next Chunk
+  00Ah 4    Offset to File Data
+  00Eh 4    File Modification Date/time in MSDOS format
+  012h 2    CRC16 on uncompressed file (with initial value 0000h)
+  014h 4    Filesize, uncompressed
+  018h 4    Filesize, compressed
+  01Ch 1+1  Version needed to extract (Major,Minor) (usually 1,00 or 2,01)
+  01Eh 1    Deleted flag (0=Normal, 1=Deleted)
+  01Fh 1    File structure (unknown purpose)
+  020h 4    Offset of comment field (0=None)
+  024h 2    Length of comment field (0=None)
+  026h 13   Short Filename ("FILENAME.EXT",00h, garbage padded if shorter)
+  033h (1)  Unknown (4Fh) (or 00h when with comment?)              ;-Type=1
+  033h (2)  Length of 038h and up (0Ah+longname+dirname)           ;\
+  035h (1)  Timezone (signed) (7Fh=Unknown)                        ;
+  036h (2)  CRC16 on Header (000h..037h+[033h], with [036h]=0000h) ;
+  038h (1)  Length of Long Filename (0=None, use Short Filename)   ;
+  039h (1)  Length of Directory name (0=None)                      ; Type=2
+  03Ah (..) Long Filename  ("longfilename.ext",00h) (if any)       ;
+  ...  (..) Directory name ("/path",00h)            (if any)       ;
+  ...  (2)  System ID (0=Unix, 1=DOS, 2=Portable) (but for DOS=0)  ;
+  ...  (3)  File Attributes (24bit)               (but for DOS=0)  ;
+  ...  (1)  Backup Flags (bit7=On, bit6=Last, bit0-3=Generation)   ;
+  ...  (2)  Backup File Version Number (for backup copies)         ;/
+  ...  5    File Leader aka Fudge Factor ("@)#(",00h)              ;\
+  ...  ..   File Data                                              ; All types
+  ...  ..   File Comment (if any) (ASCII, "Text string",0Ah)       ;/
+ Last Chunk:
+  000h 4     ID (FDC4A7DCh)
+  004h (30h) Zerofilled                                            ;-Type 1
+  004h (1)   Fixed (02h)                                           ;\
+  005h (31h) Zerofilled                                            ; Tyoe 2
+  036h (2)   CRC16 on Header (with [036h]=0000h) (always 83FCh)    ;/
+  ...  (..)  Comments may be stored here (if added after archive creation)
+  ...  (..)  Padding, if any (1Ah-filled in some files)
+
+

Notes:
+Method LZW is quite straight, the bitstream is fetched LSB first, codesize is +initially 9bit, max 13bit, with two special codes (100h=Clear, 101h=Stop), +there aren't any gaps after clear codes, the unusual part is that the bitstream +does start with a clear code.
+Method LZH is slower, requires Zoo 2.10, and is used only when specifiying "h" +option in commandline. LZH has 8Kbyte window, same as LHA's "lh5", with an +extra end marker (blocksize=0000h=end).
+Comments may be stored anywhere in the middle or at the end of the archive +(even after the zerofilled last chunk) (depending on whether the comment or +further files where last added to the archive).
+Zoo is from 1986-1991, long filenames were supported only for OSes that did +support them at that time (ie. not for DOS/Windows).
+When adding new files, Zoo defaults to maintain backups of old files in the +archive (older files are marked as "deleted" via [01Eh]=1, but are kept in the +archive; until the user issues command "P" for repacking/removing deleted +files) (Zoo 2.xx can additionally use a "generation" limit of 0..15, which +means to keep 0..15 older copies).
+All offsets are originated from begin of archive.

+

Zoo Tiny format (single-file) (commandline "z" option)

+

This format is called Tiny in Zoo source code, but isn't documented in the Zoo +manual or Zoo help screen. Tiny can contain only a single file (alike gzip). +The purpose appears to be using Tiny as temporary files when moving files from +one archive to another (without needing to decompress & recompress the +file), for example:
+

  zoo xz source.too testfile.txt     ;extract to tiny/temp file testfile.tzt
+  zoo az dest.zoo   testfile.txt     ;import from tiny/temp file testfile.tzt
+
+The tiny/temp file extensions have the middle character changed to "z" (eg. +"tzt" instead of "txt").
+Going by zoo source code, the format should look as so:
+
  000h 2   Zoo Tiny ID (07FEh)
+  002h 1   Type (01h)
+  003h 1   Compression Method
+  004h 4   Date/time in MSDOS format
+  008h 2   CRC16 on uncompressed file, or what (?)
+  00Ah 4   Filesize, uncompressed
+  00Eh 4   Filesize, compressed
+  012h 1   Major_ver
+  013h 1   Minor_ver
+  014h 2   Comment size (0=None)
+  016h 13  Short Filename
+  023h ..  File data     ... plus comment, if any?
+
+But, files from Zoo DOS version are reportedly starting with 07h,01h (instead +FEh,07h,01h).
+And, using Zoo DOS version with "z" option in Win98 does merely display "Zoo: +FATAL: I/O error or disk full."

+

Zoo Filter format (for modem streaming) (commandline "f" command)

+

This command is documented in the Zoo manual, although it isn't actually +supported in Zoo DOS version. The intended purpose is to use Zoo as a filter to +speedup modem transfers.
+Going by some information snippets, the transfer format appears to be somewhat +as so:
+

  000h 2   Zoo Filter ID (32h,5Ah)
+  ...  ..  Compressed data
+  ...  2   CRC16 on uncompressed file, or what (?)
+
+The transfer uses stdin/stdout instead of source/dest filenames (although, the +OS commandline interface may allow to assign filenames via ">" and "\<").
+There is no compression method entry (so both sides must know whether they +shall use LZW or LZH).
+Unknown if there are any transfer size entries, or LZW/LZH end codes, or maybe +the streaming is infinite (with CRCs inserted here ot there)?

+

CDROM File Compression nCompress.Z

+

nCompress is some kind of a Gzip predecessor. The program was originally called +"compress" and later renamed to "ncompress" (and sometimes called +"(n)compress"). Compressed files have uppercase ".Z" attached to their original +name.

+

nCompress.Z

+

The header is rather small and lacks info on decompressed size (ie. the one +must process the whole bitstream to determine the size, and accordingly, the +fileformat doesn't allow padding to be appended at end of file). To detect .Z +files, examine the first three bytes, and best also check that the leading 9bit +codes don't exceed num_codes (with num_codes increasing from 101h and up for +each new code).
+

  000h 2    ID (1Fh,9Dh)
+  002h 1    Mode (MaxBits(9..16) + bit7=WithClearCode) (usually 90h)
+  003h ..   ClearGap LZW compressed data (or raw LZW when mode.bit7=0)
+
+Compression is relative straight LZW, resembling 8bit GIFs, with 9bit initial +codesize, with preset codes 000h..0FFh=Data and (optional) 100h=Clear code +(there is no End code). Codes are allocated from 101h and up (100h and up if +without Clear code).
+The bitstream is fetched LSB first (starting in bit0 of first byte). The +decoder is prefetching groups of eight codes (N-bytes with eight N-bit codes), +the odd part is that Clear codes are discarding those prefetched bytes (so +Clear codes will be followed by Gaps with unused bytes).
+ClearGap LZW is also used by ARC Method 8 and 9.

+

CDROM File Compression Octal Oddities (TAR, CPIO, RPM)

+

Below are file formats with unix/linux-style octal numbers (unknown if they are +serious about using that formats, or if they do consider them as decently +amusing, or whatever).

+

Compression

+

TAR and CPIO are uncompressed archives, however, they are usually enclosed in a +compressed Gzip file (or some other compression format like nCompress, Bzip2).

+

TAR format (1979)

+

  0000h ..        TAR Chunk(s)
+  ...   400h      TAR End Marker (400h bytes zerofilled)
+  ...   ..        Zerofilled (whatever further padding)
+
+TAR Chunk format:
+
  000h 100 text   Filename ("path/filename.ext",00h)
+  064h 8   octal  Mode Flags
+  06Ch 8   octal  User ID
+  074h 8   octal  Group ID
+  07Ch 12  octal  Filesize
+  088h 12  octal  File modification time (seconds since 01 Jan 1970)
+  094h 8   octal  Header Checksum (sum of byte[0..1F3h], with [94h..9Bh]=20h)
+  09Ch 1   text   Type (00h or "0" for normal files)
+  09Dh 100 text   Whatever link name
+  101h 8   text   Tar ID (6x00h or "ustar",00h,"00" or "ustar  ",00h)
+  109h 32  text   User Name (owner)
+  129h 32  text   Group Name
+  149h 8   octal  Device major  ;\device number (when Type="4")
+  151h 8   octal  Device minor  ;/
+  159h 155 ?      Whatever prefix         ;-when ID="ustar",00h,"00" or 6x00h
+  159h 131 ?      Whatever prefix         ;\
+  1DCh 12  octal  File access time        ; when ID="ustar  ",00h
+  1E8h 12  octal  File status-change time ;/
+  1F4h 12  -      Zeropadding to 200h-byte boundary
+  200h ..  -      File data (Filesize bytes)
+  ...  ..  -      Zeropadding to 200h-byte boundary
+
+TAR numeric values are weirdly stored as octal ASCII strings, often decorated +with leading or trailing spaces. For example, 8-byte octal value 123o (53h) can +look as so (with "." meaning 00h end-byte):
+
  "0000123."  <-- normal weirdness, with leading zeroes and end-byte ("."=00h)
+  "  123 . "  <-- extra weird, leading/trailing spaces, mis-placed end-byte
+  "   123  "  <-- extra weird, leading/trailing spaces, without end-byte
+
+See also: https://www.gnu.org/software/tar/manual/html_node/Standard.html

+

CPIO Format (1977) (and MAC .PAX files)

+

  0000h ..        CPIO Chunk(s) (with actual files)
+  ...   57h       CPIO Chunk    (with filename "TRAILER!!!",00h)
+  ...   ..        Zeropadding to 200h-byte boundary (not always present)
+
+The chunks are simple, but they do exist in five weirdly different variants:
+
  Align 2, Binary, little-endian (but partial "big-endian" for 2x16bit pairs)
+  Align 2, Binary, big-endian
+  Align 1, Ascii, octal strings
+  Align 4, Ascii, hexadecimal lowercase strings, checksum=0)
+  Align 4, Ascii, hexadecimal lowercase strings, checksum=sum of bytes in file)
+
+Binary, little-or-big-endian:
+
  000h 2   binary 16bit ID (71C7h)                      ;-little-or big endian
+  002h 2   binary 16bit  dev                                    ;\
+  004h 2   binary 16bit  ino                                    ; same
+  006h 2   binary 16bit  mode                                   ; endianness
+  008h 2   binary 16bit  uid                                    ; as in ID
+  00Ah 2   binary 16bit  gid                                    ;
+  00Ch 2   binary 16bit  nlink                                  ; (but be aware
+  00Eh 2   binary 16bit  rdev                                   ; of the fixed
+  010h 2   binary 16bit File modification time, upper 16bit  ;\ ; upper/lower
+  012h 2   binary 16bit File modification time, lower 16bit  ;/ ; 16bit order
+  014h 2   binary 16bit Filename size (including ending 00h)    ; for time and
+  016h 2   binary 16bit Filesize, upper 16bit                ;\ ; filesize)
+  018h 2   binary 16bit Filesize, lower 16bit                ;/ ;/
+  01Ah ..  text   Filename, terminated by 00h ("path/filename",00h)
+  ...  ..  binary Zeropadding to 2-byte boundary
+  ...  ..  binary File data (Filesize bytes)
+  ...  ..  binary Zeropadding to 2-byte boundary
+
+Ascii/octal CPIO Chunk format:
+
  000h 6   octal  18bit ID "070707" (=71C7h)
+  006h 6   octal  18bit dev    ;\unique file id
+  00Ch 6   octal  18bit ino    ;/within archive
+  012h 6   octal  18bit Mode (file attributes)
+  018h 6   octal  18bit User ID of owner
+  01Eh 6   octal  18bit Group ID
+  024h 6   octal  18bit nlink (related to duplicated dev/ino?)
+  02Ah 6   octal  18bit rdev (system-defined info on char/blk devices)
+  030h 11  octal  33bit File modification time
+  03Bh 6   octal  18bit Filename size (including ending 00h)
+  041h 11  octal  33bit Filesize
+  04Ch ..  text   Filename, terminated by 00h ("path/filename",00h)
+  ...  ..  binary File data (Filesize bytes)
+
+Ascii/hex CPIO Chunk format:
+
  000h 6   hex    24bit ID "070701"=Without Checksum, or "070702"=With Checksum
+  006h 8   hex    32bit  ino (does that 32bit value include 16bit "dev"?)
+  00Eh 8   hex    32bit  mode
+  016h 8   hex    32bit  uid
+  01Eh 8   hex    32bit  gid
+  026h 8   hex    32bit  nlink
+  02Eh 8   hex    32bit  mtime
+  036h 8   hex    32bit Filesize
+  03Eh 8   hex    32bit  devmajor
+  046h 8   hex    32bit  devminor
+  04Eh 8   hex    32bit  rdevmajor
+  056h 8   hex    32bit  rdevminor
+  05Eh 8   hex    32bit Filename size (including ending 00h)
+  066h 8   hex    32bit Checksum, sum of all bytes in file, zero when ID=070701
+  06Eh ..  text   Filename, terminated by 00h ("path/filename",00h)
+  ...  ..  binary Zeropadding to 4-byte boundary
+  ...  ..  binary File data (Filesize bytes)
+  ...  ..  binary Zeropadding to 4-byte boundary
+
+CPIO numeric values are weird octal ASCII strings (eg. 6-byte "000123"), but, +unlike TAR, without extra oddities like spaces or end-bytes.
+https://www.systutorials.com/docs/linux/man/5-cpio/

+

RPM Format (1997) (BIG-ENDIAN)

+

RPM files contain Linux installation packages. The RPM does basically contain a +CPIO archive bundled with additional header/records with installation +information.
+

  000h 60h File Header      (officially called "Lead" instead of "Header")
+  060h ..  Signature Record (contains "Header Record" in "Signature format")
+  ...  ..  Padding          (to 8-byte boundary)
+  ...  ..  Info Record      (called "Header" and also uses "Signature format")
+  ...  ..  Archive file     (usually a GZIP compressed CPIO) (called "Payload")
+
+File Header (aka Lead) (60h bytes):
+
  000h 4    File ID (EDh,ABh,EEh,DBh)     (aka octal string "\355\253\356\333")
+  004h 1    Major version (3)
+  005h 1    Minor version (0)
+  006h 2    Type (0=Binary Package, 1=Source Package)
+  008h 2    Architecture ID (defined in ISO/IEC 23360)
+  00Ah 66   Package name, terminated by 00h
+  04Ch 2    Operating System ID (1)
+  04Eh 2    Signature Type (5)
+  050h 16   Reserved space (officially undefined, usually zerofilled)
+
+Signature/Info Records (10h+N*10h+SIZ bytes):
+
  000h 4     Record ID (8Eh,ADh,E8h,01h)  (aka octal string "\216\255\350\001")
+  004h 4     Reserved (zerofilled)        (aka octal string "\000\000\000\000")
+  008h 4     Number of Item List entries  (N)
+  00Ch 4     Size of Item Data            (SIZ)
+  010h N*10h Item List (4x32bit each: Tag, Type, Offset, Size)
+  ...  SIZ   Item Data (referenced via Offset/Size entries in above list)
+
+Item Type values:
+
  00h=NULL         Not Implemented
+  01h=CHAR         Unknown, maybe unsigned 8bit         (unaligned)
+  02h=INT8         Unknown, maybe signed 8bit           (unaligned)
+  03h=INT16        Unknown, maybe signed 16bit          (align2)
+  04h=INT32        Unknown, maybe signed 323bit         (align4)
+  05h=INT64        Reserved, maybe signed 643bit        (maybe align8)
+  06h=STRING       Variable, NUL terminated string      (unaligned)
+  07h=BIN          Unknown, reportedly 1-byte size???   (unaligned)
+  08h=STRING_ARRAY Variable, Sequence of NUL terminated strings (unaligned)
+  09h=I18NSTRING   Variable, Sequence of NUL terminated strings (unaligned)
+
+Item Tag values:
+
  There are dozens of required & optional tag values defined.
+
+RPM source code packages are often bundled with a .spec file (inside of the +CPIO archive), that .spec file contains source code in text format for creating +the RPM header/records.

+

File Extensions

+
 Basic extensions:
+  .cpio (CPIO)
+  .pax  (CPIO for MAC)
+  .rpm  (RPM installation package for RPM package manager)
+  .spec (RPM source file for creating RPM header/records)
+  .tar  (TAR, tape archive)
+ Double extensions (and short forms like tgz):
+  .tgz  short for .tar.gz  (gzip)
+  .tbz  short for .tar.bz2 (bzip2)
+  .txz  short for .tar.xz  (XZ)
+  .tlz  short for .tar.lz  (Lzip) or .tar.lzma (LZMA_Alone)
+  .tzst short for .tar.zst (zstandard)
+  .tsz  short for .tar.sz  (Sunzip)
+  .taz  short for .tar.Z   (nCompress or possibly some other compressed format)
+  .tz   short for .tar.Z   (nCompress or possibly some other compressed format)
+  .spm  short for .src.rpm (RPM source code package)
+
+

CDROM File Compression MacBinary, BinHex, PackIt, StuffIt, Compact Pro

+

Below are related to MAC filesystems (where the file body consists of separate +Data and Resource forks), and file type/creator values (resembling filename +extensions).

+

MacBinary I,II,III format (v1,v2,v3)

+

MacBinary contains a single uncompressed file, used for transferring MAC files +via network, or storing MAC files on non-MAC filesystems.
+PackIt/StuffIt archives do often have leading MacBinary headers. MacBinary +doesn't have any unique filename extension (.bin may be used, more often it's +using the same extension as the enclosed file, eg. .sit if it contains a +StuffIt archive).
+Also, archives without explicit MAC support may use MacBinary format within +compressed files (eg. LZH archives created with LHA MAC version).
+

  000h 1   Old version number, must be kept at zero for compatibility
+  001h 1   Length of filename (1..63) (though v3 says 1..31)
+  002h 63  Filename (only "length" bytes are significant)
+  041h 4   File type    (normally expressed as four characters)
+  045h 4   File creator (normally expressed as four characters)
+  049h 1   Finder flags, bit8-15 (see [065h] for bit0-7)
+  04Ah 1   Zero (must be 00h for compatibility)
+  04Bh 2   File Vertical position within its window
+  04Dh 2   File Horizontal position within its window
+  04Fh 2   File Window or folder ID
+  051h 1   Protected flag (bit0=Protected, whatever that is)
+  052h 1   Zero (must be 00h for compatibility)
+  053h 4   Filesize, Data Fork     (0=None)
+  057h 4   Filesize, Resource Fork (0=None)
+  05Bh 4   File Timestamp, creation
+  05Fh 4   File Timestamp, last modification
+  063h 27  v1:    Reserved (zerofilled)
+  063h 2   v2/v3: Length of Get Info comment (if any, usually 0000h)
+  065h 1   v2/v3: Finder Flags, bit0-7 (see [049h] for bit8-15)
+  066h 6   v2:    Reserved (zerofilled)
+  066h 4   v3:    ID ("mBIN"=MacBinary III)
+  06Ah 1   v3:    Script of file name (from fdScript field of an fxInfo record)
+  06Bh 1   v3:    Extended Finder flags (from fdXFlags field of fxInfo record)
+  06Ch 8   v2/v3: Reserved (zerofilled)
+  074h 4   v2/v3: Length of "total files" when "packed files are unpacked", uh?
+  078h 2   v2/v3: Extended Header size (reserved for future, always 0000h)
+  07Ah 1   v2/v3: MacBinary II uploader version           (81h=v2, 82h=v3)
+  07Bh 1   v2/v3: MacBinary II downloader minimum version (81h=v2)
+  07Ch 2   v2/v3: CRC16-XMODEM on [000h..07Bh]
+  07Eh 2   Reserved for computer type and OS ID (0000h)
+  ...  ..  Extended Header (if any, maybe stored here? when [078h]>0)
+  ...  ..  Padding to 80h-byte boundary
+  ...  ..  Data Fork (if any)
+  ...  ..  Padding to 80h-byte boundary
+  ...  ..  Resource Fork (if any)
+  ...  ..  Padding to 80h-byte boundary
+  ...  ..  Get Info comment (if any, usually none)
+
+CRC16-XMODEM: http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

+

BinHex 4.0 (.hqx) (ASCII, RLE90, big-endian)

+

Decoding binhex files is done via following steps (in that order):
+

  1) ASCII to BINARY conversion (similar to BASE64)
+  2) RLE90 decompression of whole file (header+data+resource+crc's)
+  3) Processing the header+data+resource from the decompressed binary
+  4) For Multipart files, repeat above steps for each part
+
+ASCII to BINARY:
+
  The file may start with some text message, comments, description. Skip any
+  such text lines until reaching a line that contains this 45-byte ID string:
+    (This file must be converted with BinHex 4.0)
+  That line should be followed by following characters (each char representing
+  6bit binary value, MSB first, first char is bit7-2 of first byte):
+    !"#$%&'()*+,-    char(21h..2Dh) --> bin(00h..0Ch)
+    0123456          char(30h..36h) --> bin(0Dh..13h)
+    89               char(38h..39h) --> bin(14h..15h)
+    @ABCDEFGHIJKLMN  char(40h..4Eh) --> bin(16h..24h)
+    PQRSTUV          char(50h..56h) --> bin(25h..2Bh)
+    XYZ[             char(58h..5Bh) --> bin(2Ch..2Fh)
+    `abcdef          char(60h..66h) --> bin(30h..36h)
+    hijklm           char(68h..6Dh) --> bin(37h..3Ch)
+    pqr              char(70h..72h) --> bin(3Dh..3Fh)
+    :                char(3Ah)      --> start/end marker
+    CR/LF            char(0Dh/0Ah)  --> linebreaks per 64 chars (CR and/or LF)
+    SPC/TAB          char(09h/20h)  --> blanks (reportedly in some files)
+
+RLE90 Decompression:
+
  RLE90 decompression is same as in ARC files, except, code 90h,00h is handled
+  differently: ARC keeps prevbyte=unchanged, BinHex sets prevbyte=90h.
+  RLE90 compression is somewhat optional: 90h must be encoded as 90h,00h,
+  but many encoders don't bother to compress repeating bytes (eg. many files
+  contain "!!!!!!!!" chars aka uncompressed 00h-filled bytes).
+  There is no way to know the decompressed size before decompression (either
+  decompress the whole file and allocate more memory as needed, or decompress
+  only the header (filename+16h bytes) and then compute decompressed size as
+  filename+16h+data+2+resource+2 bytes).
+
+Decompressed Binary (big-endian):
+
  The decompressed binary contains following data (similar as MacBinary):
+    00h   1    Length of Filename (1..63)
+    01h   ..   Filename ("FILENAME.EXT")
+    01h+N 1    Version (00h)
+    02h+N 4    File Type
+    06h+N 4    File Creator
+    0Ah+N 2    Finder Flags
+    0Ch+N 4    Filesize, uncompressed, Data Fork
+    10h+N 4    Filesize, uncompressed, Resource Fork
+    14h+N 2    Header CRC16-XMODEM on uncompressed 14h+N bytes
+    16h+N ..   Data Fork
+    ...   2    Data Fork CRC16-XMODEM on uncompressed Data Fork
+    ...   ..   Resource Fork
+    ...   2    Resource Fork CRC16-XMODEM on uncompressed Resource Fork
+    ...   ..   Padding (might reportedly occur in some files)
+  Caution: There is a document that does claim that the CRC field should be be
+  set to 0000h before CRC calculation, and that the CRC would be computed on
+  Size+2 bytes (up to including he CRC field), that appears to be nonsense,
+  the CRC is computed on Size+0 bytes, not Size+2.
+
+Multipart files:
+
  Emails or other text documents may contain multiple binhex files, if so,
+  each part should be reportedly followed by a line containing:
+    --- end of part NN ---
+  Unknown if there are any .hqx files with such multipart stuff.
+  Unknown if the next part starts with "(This file must.." or just with ":".
+
+Note: Many files with .hqx extension are actually raw .sit or .cpt files (maybe +because somebody had removed the binhex encoding without altering the filename +extension).

+

PackIt (.pit) (Macintosh) (1986) (big-endian)

+

MAC File Type,Creator IDs = "PIT ","PIT " \<-- normal (=uncompressed?)
+MAC File Type,Creator IDs = "PIT ","UPIT" \<-- other (=compressed?)
+

 Bitstream for Uncompressed File Entries:
+  32bits    Uncompressed Header[000h..003h] (Method/Crypto="PMag")
+  ..bits    Uncompressed Header[004h..061h] (uncompressed size = 5Eh)
+  ..bits    Uncompressed Data+Resource+CRC  (uncompressed size = Data+Rsrc+2)
+ Bitstream for Compressed File Entries:
+  32bits    Uncompressed Header[000h..003h] (Method/Crypto="PMa4")
+  ..bits    Compressed Huffman Tree         (for decoding following bits)
+  ..bits    Compressed Header[004h..061h]   (uncompressed size = 5Eh)
+  ..bits    Compressed Data+Resource+CRC    (uncompressed size = Data+Rsrc+2)
+  ..bits    Padding to 8bit-boundary        (byte align next File Entry)
+ Bitstream for Archive End Marker (after last file):
+  32bits    Uncompressed Header[000h..003h] (Method/Crypto="PEnd")
+ File Entry Format:
+  000h 4    Method/Crypto (usually "PMag"=Uncompressed, "PMa4"=Huffman)
+  004h 1    Filename length
+  005h 63   Filename ("FILENAME", garbage padded)
+  044h 4    File Type
+  048h 4    File Creator
+  04Ch 2    Finder flags
+  04Eh 2    Locked?
+  050h 4    Filesize, uncompressed, Data fork
+  054h 4    Filesize, uncompressed, Resource fork
+  058h 4    Timestamp, creation
+  05Ch 4    Timestamp, modification
+  060h 2    CRC16-XMODEM on [004h..05Fh]
+  ...  ..   Data Fork
+  ...  ..   Resource Fork
+  ...  2    CRC16-XMODEM on uncompressed Data+Resource forks
+ Method/Crypto:
+  "PEnd" = Archive End marker (4-byte end marker, without filename etc.)
+  "PMag" = Uncompressed
+  "PMa1" = Uncompressed, Encrypted Simple
+  "PMa2" = Uncompressed, Encrypted DES
+  "PMa3" = Uncompressed, Encrypted reserved
+  "PMa4" = Huffman
+  "PMa5" = Huffman, Encrypted Simple
+  "PMa6" = Huffman, Encrypted DES
+  "PMa7" = Huffman, Encrypted reserved
+ Decompression:       ;for PackIt (and also for StuffIt method 03h)
+  InitBitstreamMsbFirst(src)             ;-src is after "PMa4" PackIt ID
+  tree=GetMem(200h*4)                    ;-alloc tree (probably less needed)
+  num_entries=0                          ;\init tree
+  root=GetTreeEntry                      ;/
+  while dst<dst_end                      ;-decompress, till end...
+    index=root                           ;\
+    while index<FF00h                    ; huffman decode
+      index=[tree+index*4+GetBits(1)*2]  ;/
+    [dst]=index AND FFh, dst=dst+1       ;-store data
+  return
+ ;---
+ GetTreeEntry:
+  if GetBits(1)=1 then
+    return GetBits(8)+FF00h            ;-final data entry
+  else
+    index=num_entries                  ;-current index
+    num_entries=num_entries+1          ;-alloc next index
+    [tree+index*4+0*2] = GetTreeEntry  ;-recursive call for node0
+    [tree+index*4+1*2] = GetTreeEntry  ;-recursive call for node1
+    return index
+
+http://www.network172.com/early-mac-software/packit-source-code/ - official

+

StuffIt (.sit) (Macintosh) (old format) (1987) (big-endian)

+

MAC File Type,Creator IDs = "SIT!","SIT!" (version=01h).
+MAC File Type,Creator IDs = "SITD","SIT!" (version=02h).
+MAC File Type,Creator IDs = "APPL","STi0" (whatever, with ID="ST65")
+

 StuffIt Archive Header:
+  000h 4    ID ("SIT!", short for StuffIt)
+            Reportedly, there are several alternate IDs:
+              "SIT!","ST46","ST50","ST60","ST65","STin","STi2","STi3","STi4"
+            Unknown why, and if some do differ somehow (ST65 appears to be
+            same as SIT!) (for STi, the "i" might be short for it? installer?)
+  004h 2    Number of entries in root directory
+  006h 4    Total size of archive
+  00Ah 4    ID ("rLau", short for Raymond Lau)
+  00Eh 1    Version number (01h=v1.x-v1.5.x, 02h=v1.6-v4.5)
+  00Fh 7    Reserved (zerofilled)                          ;-when version=01h
+  00Fh 1    Unknown (C6h or FFh)                           ;\
+  010h 4    Offset to first root entry (16h or elsewhere!) ; when version=02h
+  014h 2    Unknown (0001h or FFFFh)                       ;/
+ File Entries:
+  000h 1    Compression method, Resource fork
+  001h 1    Compression method, Data fork
+  002h 1    Filename length (1..63 for version=01h, 1..31 for version=02h)
+  003h 1Fh  Filename ("FILENAME.EXT", garbage padding)
+  022h 20h  Filename further chars                         ;-when version=01h
+  022h 2    Filename+size CRC                              ;\
+  024h 2    Unknown (always 0000h or 0986h?)               ; when version=02h
+  026h 4    Unknown Resource fork related    ;maybe window ;
+  02Ah 4    Unknown Data fork related        ;coords ?     ;
+  02Eh 1    Unknown Data fork related                      ;
+  02Fh 1    Unknown Resource fork related                  ;
+  030h 2    Number of child entries (excluding End marker) ;
+  032h 4    Offset to previous entry                       ;
+  036h 4    Offset to next entry                           ;
+  03Ah 4    Offset to parent entry                         ;
+  03Eh 4    Offset to first child (or -1 for file entries) ;/
+  042h 4    File type     (eg. "APPL")
+  046h 4    File creator  (eg. "ACTA")
+  04Ah 2    Finder flags  (2100h)
+  04Ch 4    Creation date
+  050h 4    Modification date
+  054h 4    Filesize, uncompressed, Resource fork  (0=None)
+  058h 4    Filesize, uncompressed, Data fork      (0=None)
+  05Ch 4    Filesize, compressed, Resource fork    (0=None)
+  060h 4    Filesize, compressed, Data fork        (0=None)
+  064h 2    CRC16 on uncompressed(?) Resource fork (0=None)
+  066h 2    CRC16 on uncompressed(?) Data fork     (0=None)
+  068h 1    Pad bytes for encrypted Resource? (00h)
+  069h 1    Pad bytes for encrypted Data?     (00h)
+  06Ah 2    Unknown Data fork related     (0000h, or 0004h=Encrypted?)
+  06Ch 2    Unknown Resource fork related (0000h, or 0004h=Encrypted?)
+  06Eh 2    CRC16 on Header [000h..06Dh] with initial=0000h
+  070h ..   Compressed Data, Resource fork (if any) (size=[05Ch])
+  ...  ..   Compressed Data, Data fork     (if any) (size=[060h])
+ StuffIt Methods:
+  00h Uncompressed
+  01h RLE90        (same as... unknown if this is like BinHex, or like ARC)
+  02h ClearGap LZW (same as nCompress, 14bit, with Clear(+gap), no Stop code)
+  03h Huffman      (same as PackIt "PMa4" method)
+  05h LZHUF        (same as LHA "lh1" method)
+  06h Fixed Huffman  Segmented. PackBits, then optional Huffman coding.
+                       The set of Huffman codes is predefined, but the meaning
+                       of a code can be different in each segment
+  08h MW (Miller-Wegman, presumably LZMW)
+  0Dh LZ+Huffman   (?)                             ;-StuffIt and StuffIt5
+  0Eh Installer    (uh?)
+  0Fh Arsenic      (BWT and arithmetic coding)     ;-StuffIt5 only?
+  1xh Encrypted methods (same as above, plus encryption)
+  20h Folder start                                 ;\StuffIt (not StuffIt5)
+  21h Folder end                                   ;/
+
+Common methods are 02h,03h,0Dh (rarely also 00h,01h,05h) (and 0Fh for +StuffIt5).
+Folders have BOTH methods set to 20h. Uncompressed Data size is WHAT? (maybe +sum of all decompressed files in that folder?) Compressed Data size is size in +SIT file including 70h-byte folder end-marker. The Folder END marker has both +methods set to 21h. The Folder END marker has NONSENSE data size entries?
+When version=01h (eg. blackfor.sit), folder/file entries start at offset 16h, +and are ordered as so:
+
  Folder start
+    Child entries
+    Folder end
+  Folder start
+    Child entries
+    Folder end
+
+When version=02h (eg. cabletron.sit), folder/file entries start at offset from +archive header [010h] (which can be anywhere at offset 16h, or near end of +archive), and are ordered as specified in file header entries [022h..041h].

+

StuffIt 5 (.sit) (Macintosh, Windows) (1997) (big-endian)

+

 StuffIt Archive Header:
+  000h 82   ID "StuffIt (c)1997",...,"/StuffIt/",0Dh,0Ah,1Ah,00h)
+  052h 1    Version (always 05h)
+  053h 1    Flags (can be 00h, 10h, 80h) (bit4=what?, bit7=Encrypted)
+  054h 4    Total size of archive
+  058h 4    Offset to first entry in root directory (64h, plus Extra Data)
+  05Ch 2    Number of entries in root directory
+  05Eh 4    Same as [058h] (maybe one is 1st entry, and other is Header size)?
+  062h 2    Header CRC16 on [000h..[05xh]-1] with [062h]=0000h and initial=0
+  064h ..   Extra Data (see below)
+  ...  ..   File/Folder entries
+ Extra data can be:
+  None (when [58h]=64h)                                  ;with Flags=00h
+  05h,76h,35h,B9h,87h,11h             ;maybe 05h=Length? ;with Flags=80h=crypto
+  0Dh,A5h,A5h,"Reserved",A5h,A5h,00h) ;maybe 0Dh=Length? ;with Flags=10h=what?
+ File/Folder entries:
+  000h ..   Base Header
+  ...  ..   OS Header (depending on OS Type in Base Header)
+  ...  ..   Resource fork (if any) (MAC only, not Windows)
+  ...  ..   Data fork     (if any)
+ Base Header:
+  000h 4    ID (A5A5A5A5h) (or B4B4B4B4h=corrupted charset conversion maybe?)
+  004h 1    OS Type (1=Mac, 3=Windows)
+  005h 1    Unknown (0)
+  006h 2    Base Header size (41h)  (30h+IV?+Filename+Comment)
+  008h 1    Unknown (0) (maybe Flags MSB?)
+  009h 1    Flags (bit3=Comment, bit6=Folder, bit5=Encrypted)
+  00Ah 4    Timestamp, Creation     (Mac OS format, seconds since 1904)
+  00Eh 4    Timestamp, Modification (Mac OS format, seconds since 1904)
+  012h 4    Offset of previous entry          (0=None)
+  016h 4    Offset of next entry              (0=None)
+  01Ah 4    Offset of parent folder entry     (0=None)
+  01Eh 2    Filename size (F)
+  020h 2    Base Header CRC-16 on [000h..[006h]-1]
+  022h (4)  Offset of first child entry in folder (FFFFFFFFh=End) ;\Folder
+  026h (4)  Size of complete directory                            ; (if Flags
+  02Ah (4)  Unknown                                               ; bit6=1)
+  02Eh (2)  Number of child entries (excluding folder End marker) ;/
+  022h (4)  Data fork uncompressed size                           ;\
+  026h (4)  Data fork compressed size                             ;
+  02Ah (2)  Data fork CRC-16 (0 for method 0Fh)                   ; File
+  02Ch (2)  Data fork Unknown (0000h)                             ; (if Flags
+  02Eh (1)  Data fork compression method (00h,0Dh,0Fh)            ; bit6=0)
+  02Fh (1)  Data fork Encryption IV? size                         ;
+  ...  (..) Data fork Encryption IV? data                         ;/
+  ...  ..   File/Folder name ("FILENAME.EXT")
+  ...  (2)  Comment size (K)                                      ;\Comment
+  ...  (2)  Comment Unknown (0)                                   ; (if Flags
+  ...  (..) Comment data                                          ;/bit3=1)
+ OS Header for Mac (OS=1):
+  000h 2       Flags2 (bit0=HasResource, bit4=same as archive header [053h] ?)
+  002h 2       CRC16 on OS Header (with [002h]=0000h, initial=0)
+  004h 4       Mac OS file type     ;\
+  008h 4       Mac OS file creator  ; as so for Files
+  00Ch 2       Mac OS Finder flags  ; (seems to contain
+  00Eh 2       Mac OS Unknown       ; other stfuff/junk
+  010h 4       Mac OS Unknown       ; for Folders)
+  014h 4       Mac OS Unknown       ;
+  018h 4       Mac OS Unknown       ;
+  01Ch 4       Mac OS Unknown       ;
+  020h 4       Mac OS Unknown       ;/
+  024h (4)     Resource fork uncompressed size               ;\
+  028h (4)     Resource fork compressed size                 ; only if
+  02Ch (2)     Resource fork CRC-16 (0 for method 0Fh)       ; Flags2
+  02Eh (2)     Resource fork Unknown                         ; bit0=1
+  030h (1)     Resource fork compression method              ;
+  031h (1)     Resource fork Encryption IV? size             ;
+  ...  (..)    Resource fork Encryption IV? data             ;/
+ OS Header for Windows (OS=3):
+  000h 2       Flags 2 (bit4=same as archive header [053h] ?)
+  002h 2       CRC16 on OS Header (with [002h]=0000h, initial=0)
+  004h 4       Windows File Attribute (20h=Normal, 10h=Folder)
+  008h 08h     Windows Zerofilled
+  010h 4       Windows Timestamp last accessed?
+  014h 4       Windows Unknown (0005xxxxh)
+  018h 08h     Windows Zerofilled
+
+StuffIt 5 seems to only use 00h, 0Dh and 0Fh. See "StuffItSpecs" for +descriptions of the algorithms.

+

StuffIt X (.sitx) (Macintosh, Windows) (20xx?)

+

 StuffIt Archive Header:
+  000h 8    ID "StuffIt!" (reportedly "StuffIt?" also exists)
+  008h ..   Unknown...
+
+The StuffIt X headers are somehow compressed/compacted (there are very few 00h +bytes even when filesize entries should have zeroes in MSBs).
+https://github.com/incbee/Unarchiver/blob/master/XADMaster/XADStuffItXParser.m

+

Compact Pro aka Compactor (.cpt) (Macintosh) (1990s) (big-endian)

+

MAC File Type,Creator IDs = "PACT","CPCT".
+Compact Pro (originally called Compactor) was a MAC archiver competing with +StuffIt. There's also a DOS tool (ExtractorPC) for extracting .cpt files on PCs +(albeit released in .EXE.sit.hqx format, making it unlikely that PC users could +have used it).
+

 Archive header:
+  000h   1   File ID           (always 01h)
+  001h   1   Volume number     (01h for single-volume, Other=Unknown)
+  002h   2   Random Volume ID? (...must be same in all split volume files?)
+  004h   4   Offset to Footer  (from begin of file)
+  008h   ..  Compressed files  (resource+data fork pairs)
+  ...    ..  Footer            (directory information)
+ Footer format:
+  000h   4   CRC32 XOR FFFFFFFFh on following bytes
+  004h   2   Number of entries in root folder (including all child entries)
+  006h   1   Comment length (usually 00h=None)
+  007h   N   Comment
+  007h+N ..  File/Folder entries
+ Folder entries, with [000h].bit=1:
+  000h   1   Foldername length (N), plus bit7=Type (1=Folder)
+  001h   N   Foldername ("FOLDERNAME")
+  001h+N 2   Number of entries in this folder (including all child entries)
+ File entries, with [000h].bit=0:
+  000h   1   Filename length (N), plus bit7=Type (0=File)
+  001h   N   Filename ("FILENAME.EXT")
+  001h+N 1   Volume number (01h for single-volume, Other=Unknown)
+  002h+N 4   Offset to compressed Resource (followed by compressed Data)
+  006h+N 4   File type
+  00Ah+N 4   File creator
+  00Eh+N 4   Timestamp, creation     (seconds since 1904)
+  012h+N 4   Timestamp, modification (seconds since 1904)
+  016h+N 2   Finder flags
+  018h+N 4   CRC32 XOR FFFFFFFFh on uncompressed Resource + Data forks
+  01Ch+N 2   Method/Flags (see below)
+  01Eh+N 4   Filesize, uncompressed, Resource fork
+  022h+N 4   Filesize, uncompressed, Data fork
+  026h+N 4   Filesize, compressed, Resource fork
+  02Ah+N 4   Filesize, compressed, Data fork
+ Method/Flags:
+  0     Encryption               (0=None, 1=Encrypted, unknown how)
+  1     Method for Resource fork (0=RLE8182, 1=RLE8182+LZSSHUF)
+  2     Method for Data fork     (0=RLE8182, 1=RLE8182+LZSSHUF)
+  3-15  Unknown/unused           (0)
+ Note: RLE8182 and RLE8182+LZSSHUF are also used by Mac DiskDoubler.
+
+RLE8182 Compression:
+
 This is same as RLE90, with two-byte escape code (81h,82h instead of 90h):
+  81h,82h,00h       Output 81h,82h
+  81h,82h,01h..03h  Output prevbyte 00h..02h times (this is not useful)
+  81h,82h,04h       Output prevbyte 03h times (useful if prev=81h, next=82h)
+  81h,82h,05h..FFh  Output prevbyte 04h..FEh times (this does save memory)
+  81h,xxh           Output 81h, and then process xxh
+  81h,padding       Output 81h, at end of file (with padding<>82h)
+  xxh               Output xxh (unless it is 81h)
+ Note: prevbyte is the previous output byte (ie. that stored at [dst-1]).
+ If the uncompressed file ends with 81h, then the compressed file MUST contain
+ a dummy padding byte (the RLE decoder in macutils sets a prefix flag upon 81h,
+ but doesn't output it to dst until receiving the padding byte, which could be
+ 81h, or any value other than 82h).
+
+LZSSHUF Compression:
+
 This uses LZSS-style flag bits (to distinguish between data and len/disp),
+ combined with three Huffman trees (for data, len, disp values). The sliding
+ window is 2000h bytes (8Kbytes). The format appears to be a simplified variant
+ or LHA compression (but gets complicated by inventing weird corner cases).
+
+DecompressLzsshuf:
+
  if uncompressed_size=0 then goto @@all_done   ;-empty (eg. for unused forks)
+  [dst+0000h..1FFCh]=uninitialized              ;\
+  [dst+1FFDh..1FFFh]=00h,00h,00h                ; prefill sliding window
+  dst+dst+2000h                                 ;/
+ @@block_lop:
+  InitBitstreamMsbFirst(src)
+  GetLzsshufTree(data_tree,100h)  ;tree for data=00h..FFh
+  GetLzsshufTree(len_tree,40h)    ;tree for len=00h..3Fh (0,1 usually unused)
+  GetLzsshufTree(disp_tree,80h)   ;tree for dispUpper7bit=00h..7Fh
+  block_org=src, blocksize=0      ;block origin (after above trees)
+ @@decompress_lop:
+  if src>=src_end then goto @@all_done  ;<-- this may overshoot on padding bits
+  if out>=out_end then goto @@all_done  ;<-- more precise; if RleOnTheFly
+  if blocksize>=1FFF0h AND type=CompactPro then goto @@block_done
+  if blocksize>=0FFF0h AND type=Disc Double then goto @@block_done
+  if GetBits(1)=1 then
+    [dst]=GetHuffCode(data_tree), dst=dst+1, blocksize=blocksize+2
+  else
+    len=GetHuffCode(len_tree)+0, blocksize=blocksize+3
+    disp=GetHuffCode(disp_tree)*40h+GetBits(6), if disp=0000h then disp=2000h
+    for i=1 to len, [dst]=[dst-disp], dst=dst+1, next i
+  if RleOnTheFly then forward above byte(s) to RLE (which advances "out" ptr)
+  goto @@decompress_lop
+ @@block_done:
+  ;the decoder does prefetch data in 16bit units, and it does always have
+  ;16..31 bits prefetched, these bits are discarded at block end...
+  src=src+2+((src-block_org) AND 1) ;discard 16..31 bits (till 16bit-boundary)
+  goto @@block_lop                  ;start next block, with new trees
+ @@all_done:
+  ret
+
+GetLzsshufTree(tree,max):
+
  num=GetBits(8)*2, if num>max then goto error ;number of symbols (00h and up)
+  for i=0 to num-1, codesizes[i]=GetBits(4)    ;sizes (1..15 bits, or 0=unused)
+  lzh_explode_tree(tree,codesizes,num)         ;alike LHA trees
+  ret
+
+Minor Corner cases:
+
  Disp=0 acts as Disp=2000h (don't care when using ringbuf[index AND 1FFFh])
+  Len=0..1 could be definied in the len_tree (but are usually size=0bit=unused)
+  Unknown if disp_tree & len_tree can be empty (when using data_tree only)?
+  RLE ending with 81h,padding should only output 81h (see RLE8182 description)
+
+Incomplete Trees
+
  A few .cpt files (eg. ABC's-1.09.cpt.hqx\..\Colin's ABC's\Message.h) have
+  incomplete trees (like only one disp code, "0"=DispUpper7bit=00h, without
+  defining any further huffman codes like "1" or "1xxx").
+  This isn't much of a problem (except, one may need to remove incomplete tree
+  error checking in the "lzh_explode_tree" function).
+
+End of Last Block
+
  End of Last Block is usually determined by forwarding the LZSSHUF output
+  directly to the RLE8182 decompressor (which does then check if uncompressed
+  size is reached) (marked "RleOnTheFly" in above sample code).
+  Alternately, one could decompress in separate steps (LZSSHUF to tempbuf, and
+  then tempbuf to RLE8182), but that requires to deal with padding bits.
+    - padding seems to be 16..31 bits (?) alike at end of blocksize
+    - padding bits are (always?) zeroes, which act as flag=0=compressed
+    - compressed data occupies at least flg(1),len(1),disp(1),displsbs(6)=9bits
+  That can lead to decoding a few extra codes (with lengths up to 3Fh each),
+  so the tempbuf must have trailing space for writing that garbage padding.
+  And, those padding bits tend to translate to disp=0000h (aka disp=2000h),
+  which can cause reads from the whole sliding window, so tempbuf requires
+  2000h leading bytes to avoid page faults (not just the 3 initialized bytes).
+
+See also:
+https://github.com/dgilman/macutils/blob/master/macunpack/cpt.c - source code
+https://github.com/MacPaw/XADMaster/wiki/CompactProSpecs - confused anti-specs

+

Self-Extracting Archives (SEA)

+

The abbreviation SEA (and extension .sea) is used for several self-extracting +MAC archives. The Resource fork contains an executable (as indicated by +Type="APPL") which contains the decompressor, and the Data fork contains the +archive.
+

  MAC File Type,Creator IDs = "APPL","aust" (StuffIt).
+  MAC File Type,Creator IDs = "APPL","EXTR" (CompactPro).
+  MAC File Type,Creator IDs = "APPL","DSEA" (DiskDoubler).
+
+There are some oddities for .sea files found in internet:
+
  StuffIt .sea files: These are often raw StuffIt archives (apparently
+    somebody had removed the MacBinary header and the resource fork with
+    the decompressor).
+  CompactPro .sea files: These are often stored as MacBinary without 80h-byte
+    padding appended to the Data and Resource forks.
+    That applies to "Santa.sea" but other such files have OTHER corruptions,
+    which may include wrong Size and/or garbage in reserved MacBinary fields?
+
+Note: Not to be confused with ARC archives from System Enhancement Associates +(SEA).

+

Mac OS Data forks

+

The Data fork contains the "normal data" part of the file (eg. anything like +.TXT .DOC .GIF .JPG .WAV .ZIP .LZH .SIT .PIT .CPT etc).

+

Mac OS Resource forks

+

The Resource fork can contain executable code resources (similar to .EXE files; +with File Type="APPL"), and various other resources (fonts, icons, text strings +for dialog boxes, etc). Those resources are stored in a filesystem-style +archive and can be accessed with IDs and/or name strings.
+

 Resource fork Header:
+  000h 4    Offset to Resource Data section (from start of file) (100h)
+  004h 4    Offset to Resource Map section  (from start of file) (100h+DataSiz)
+  008h 4    Size of Resource Data section (can be 0=None)
+  00Ch 4    Size of Resource Map section
+  010h F0h  Unknown (can contain filename/type.. MAYBE just garbage padding?)
+  100h ..   Resource Data section, contains Data Record(s)
+  ...  ..   Resource Map section
+ Data Record(s) in Resource Data section (usually at offset 100h and up):
+  000h 4    Size of Data for this record
+  004h ..   Data for this record
+ Resource Map section:
+  000h 4    Offset to Resource Data section (from start of file) ;\
+  004h 4    Offset to Resource Map section  (from start of file) ; same as in
+  008h 4    Size of Resource Data section                        ; header
+  00Ch 4    Size of Resource Map section                         ;/
+  010h 4    Zero (internally used by Resource Manager, nextResourceMap)
+  014h 2    Zero (internally used by Resource Manager, fileRef)
+  016h 2    Map Attributes
+              0-4  Zero (reserved)
+              5    Zero (internally used by Resource Manager, changed)
+              6    Zero (internally used by Resource Manager, need compression)
+              7    Resource map is read-only
+              8-15 Zero (reserved)
+  018h 2    Offset to Type List (from start of resource map) (usually 1Ch ?)
+  01Ah 2    Offset to Name List (from start of resource map)
+  ...  ..   Type List
+  ...  ..   Resource List (with one or more entry for each entry in Type List)
+  ...  ..   Name List (each name consists of 8bit NameLength, plus name string)
+ Type List follows the header and contains an array of resource type records.
+  000h 2    Number of Type Records, minus one (FFFFh=None, 0000h=One, etc.)
+  002h N*8  Type Records
+ Type Record format:
+  000h 4    Resource Type (four-character constant)
+  004h 2    Number of Resource List entries, minus one (0000h=One, etc.)
+  006h 2    Offset to first Resource List entry (from start of Type List)
+ Resource List entries:
+  000h 2    Resource ID (C000h..FFFFh=Special/Owned)
+  002h 2    Offset to Resource Name (from start of Name List) (FFFFh=None)
+  004h 1    Attributes
+              0    Resource data is compressed             (0=No, 1=Compressed)
+              1    Zero (internally used by Resource Manager, changed)
+              2    Load Resource as soon as file is opened (0=No, 1=Preload)
+              3    Resource is read-only                   (0=No, 1=Protected)
+              4    Resource may not be moved in memory     (0=No, 1=Locked)
+              5    Resource may be paged out of memory     (0=No, 1=Purgeable)
+              6    Load Resource to        (0=Application heap, 1=System Heap)
+              7    Zero (reserved)
+  005h 3    Offset to Resource Data (from start of Resource Data section)
+  008h 4    Zero (internally used by Resource Manager, resourcePtr)
+ Note: Some (or all?) 16bit offsets are reportedly signed (max 32Kbyte), the
+ 24bit offsets are reportedly unsigned (max 16Mbyte).
+
+Compressed Resources (when Attributes.bit0=1)
+
 Compressed resource have a standarized header, the decompression function(s)
+ are supposed to be stored in separate "dmcp" resource (unknown if the OS is
+ also providing standard decompression functions).
+  000h 4      ID (always A89F6572h for compressed resource)
+  004h 2      Always 0012h (maybe compression header size)
+  006h 1      Type (08h=Type8, 09h=Type9)
+  007h 1      Always 01h
+  008h 4      Uncompressed resource size
+  00Ch 1      For Type8: workingBufferFractionalSize               ;\
+  00Dh 1      For Type8: expansionBufferSize                       ; Type8
+  00Eh 2      For Type8: dcmpID (ID in "dmcp" decompress resource) ;
+  010h 2      For Type8: Zero (reserved?)                          ;/
+  00Ch 2      For Type9: dcmpID (ID in "dmcp" decompress resource) ;\Type9
+  00Eh 4      For Type9: decompressor_specific_parameters_with_io  ;/
+  012h ..     Compressed Resource Data
+
+http://formats.kaitai.io/compressed_resource/

+

Owned Resources (with Resource ID=C000h..FFFFh):

+

https://github.com/kreativekorp/ksfl/wiki/Macintosh-Resource-File-Format

+

The upper 5bit (mask F800h) indicate the resource type of the owner, the middle +6bit (mask 07E0h) indicate the resource id of the owner, and the lower 5bit +(mask 001Fh) indicate the "sub-id" of the owned resource.
+

  ID MSBs    Owner Type  Notes
+  C000h      DRVR        driver or desk accessory
+  C800h      WDEF        window definition: code to draw windows
+  D000h      MDEF        menu definition: code to draw menus
+  D800h      CDEF        control definition: code to draw UI widgets
+  E000h      PDEF        printer driver
+  E800h      PACK        utility code package/library used by the Mac OS
+  F000h      cdev        control panel; owner id is set to 1
+  F800h      reserved    reserved for future use
+
+The Mac OS Resource Manager used this scheme to ensure that certain types of +programs, themselves stored in resources, could find the other resources they +needed even if the resources had to be renumbered to avoid conflicts. Utilities +such as Font/DA Mover that were used to install and remove these programs used +this scheme to ensure that all associated resources were installed or removed +as well, and renumber the resources if necessary to avoid conflicts.

+

CDROM File XYZ and Dummy/Null Files

+

Dummy/Null Files

+

Most PSX discs have huge zerofilled dummy files with about 32Mbytes, using +filenames like DUMMY, NUL, NULL, or ZNULL, this is probably done to tweak the +disc to have valid sector numbers at the end of disc (to help the drive head to +know which sector it is on).
+Of course, Sony could as well pad the discs with longer Lead-Out areas, but the +dummy files may have been needed during development with CDRs (though burning +such large files doesn't exactly speed up development).
+There are different ways to make sure that the file is at end of the disc:
+- Some CDROM burning tools may allow to specify which file is where
+- Some games have the file alphabetically sorted as last file in last folder
+- Some games have the file declared as audio track
+- Some games (additionally) have large zeropadding at end of their archive file

+

XYZ Files

+

To reduce seek times, it can make sense to have the boot files & small +files at the begin of the disc.
+Some games seem to use alphabetically sorted file/folder names to tweak Movies +and XA-audio to be located at the end of disc (eg. using ZMOVIE as folder +name).

+

CDROM Disk Images CCD/IMG/SUB (CloneCD)

+

File.IMG - 2352 (930h) bytes per sector

+

Contains the sector data, recorded at 930h bytes per sector. Unknown if other +sizes are also used/supported (like 800h bytes/sector, or even images with +mixed sizes of 800h and 930h for different tracks).

+

File.SUB - 96 (60h) bytes per sector (subchannel P..W with 96 bits each)

+

Contains subchannel data, recorded at 60h bytes per sector.
+

  00h..0Bh 12 Subchannel P (Pause-bits, usually all set, or all cleared)
+  0Ch..17h 12 Subchannel Q (ADR/Control, custom info, CRC-16-CCITT)
+  18h..5Fh .. Subchannel R..W (usually zero) (can be used for CD-TEXT)
+
+Optionally, the .SUB file can be omitted (it's needed only for discs with +non-standard subchannel data, such like copy-protected games). And, some +CloneCD disc images are bundled with an empty 0-byte .SUB file (which is about +same as completely omitting the .SUB file).

+

File.CCD - Lead-in info in text format

+

Contains Lead-in info in ASCII text format. Lines should be terminated by +0Dh,0Ah. The overall CCD filestructure is:
+

  [CloneCD]     ;File ID and version
+  [Disc]        ;Overall Disc info
+  [CDText]      ;CD-TEXT (included only if present)
+  [Session N]   ;Session(s) (numbered 1 and up)
+  [Entry N]     ;Lead-in entries (numbered 0..."TocEntries-1")
+  [TRACK N]     ;Track info (numbered 1 and up)
+
+Read on below for details on the separate sections.

+

[CloneCD]

+
  Version=3             ;-version (usually 3) (rarely 2)
+
+

[Disc]

+
  TocEntries=4          ;-number of [Entry N] fields (lead-in info blocks)
+  Sessions=1            ;-number of sessions (usually 1)
+  DataTracksScrambled=0 ;-unknown purpose (usually 0)
+  CDTextLength=0        ;-total size of 18-byte CD-TEXT chunks (usually 0)
+  CATALOG=NNNNNNNNNNNNN ;-13-digit EAN-13 barcode (included only if present)
+
+

[CDText]

+
  Entries=N       ;number of following entries (CDTextLength/18) (not /16)
+  Entry 0=80 00 NN NN NN NN NN NN NN NN NN NN NN NN NN NN   ;entry 0
+  Entry 1=80 NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN   ;entry 1
+  ...
+  Entry XX=8f NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN  ;entry N-1
+  Note: Each entry contains 16 bytes (ie. "18-byte CD-TEXT" with CRC excluded)
+  "NN NN NN.." consists of 2-digit lowercase HEX numbers (without leading "0x")
+
+

[Session 1]

+

  PreGapMode=2          ;-unknown purpose (usually 1 or 2) (or 0)
+  PreGapSubC=1          ;-unknown purpose (usually 0 or 1)
+
+Above are unknown, PreGapMode might be 0=Audio, 1=Mode1, 2=Mode2 for pregap, +though unknown for which pregap(s) of which track(s), presumably for first +track?

+

[Entry 0]

+

[Entry 0..2] are usually containing Point A0h..A2h info. [Entry 3..N] are +usually TOC info for Track 1 and up.
+

  Session=1             ;-session number that this entry belongs to (usually 1)
+  Point=0xa0            ;-point (0..63h=Track, non-BCD!) (A0h..XXh=specials) Q2
+  ADR=0x01              ;-lower 4bit of ADR/Control (usually 1)           Q0.lo
+  Control=0x04          ;-upper 4bit of ADR/Control (eg. 0=audio, 4=data) Q0.hi
+  TrackNo=0             ;-usually/always 0 (as [Entry N]'s are in Lead-in)   Q1
+  AMin=0                ;\current MSF address                                Q3
+  ASec=0                ; (dummy zero values) (actual content                Q4
+  AFrame=0              ; would be current lead-in position)                 Q5
+  ALBA=-150             ;/ALBA=((AMin*60+ASec)*75+AFrame)-PreGapSize
+  Zero=0                ;-probably reserved byte from Q channel              Q6
+  PMin=1                ;\referenced MSF address (non-BCD!), for certain     Q7
+  PSec=32               ; Point's, PMin may contain a Track number, and PSec Q8
+  PFrame=0              ; the disc type value (that without non-BCD-glitch)  Q9
+  PLBA=6750             ;/PLBA=((PMin*60+PSec)*75+PFrame)-PreGapSize
+

+

[TRACK 1] ;-track number (non-BCD) (1..99)

+
  MODE=2                ;-mode (0=Audio, 1=Mode1, 2=Mode2)
+  ISRC=XXXXXNNNNNNN     ;-12-letter/digit ISRC code (included only if present)
+  INDEX 0=N             ;-1st sector with index 0, missing EVEN if any?
+  INDEX 1=N             ;-1st sector with index 1, usually same as track's PLBA
+  INDEX 2=N             ;-1st sector with index 2, if any
+  etc.
+
+

Missing Sectors & Sector Size

+

The .CCD file doesn't define the "PreGapSize" (the number of missing sectors at +begin of first track). It seems to be simply constant "PreGapSize=150". Unless +one is supposed to calculate it as +"PreGapSize=((PMin*60+PSec)*75+PFrame)-PLBA".
+The SectorSize seems to be also constant, "SectorSize=930h".

+

Non-BCD Caution

+

All Min/Sec/Frame/Track/Index values are expressed in non-BCD, ie. they must be +converted to BCD to get the correct values (as how they are stored on real +CDs). Exceptions are cases where those bytes have other meanings: For example, +"PSec=32" does normally mean BcdSecond=32h, but for Point A0h it would mean +DiscType=20h=CD-ROM-XA).
+The Point value is also special, it is expressed in hex (0xNN), but nonetheless +it is non-BCD, ie. Point 1..99 are specified as 0x01..0x63, whilst, Point +A0h..FFh are specified as such (ie. as 0xA0..0xFF).

+

Versions

+

Version=1 doesn't seem to exist (or it is very rare). Version=2 is quite rare, +and it seems to lack the [TRACK N] entries (meaning that there is no MODE and +INDEX information, except that the INDEX 1 location can be assumed to be same +as PLBA). Version=3 is most common, this version includes [TRACK N] entries, +but often only with INDEX=1 (and up, if more indices), but without INDEX 0 (on +Track 1 it's probably missing due to pregap, on further Tracks it's missing +without reason) (so, only ways to reproduce INDEX=0 would be to guess it being +located 2 seconds before INDEX=1, or, to use the information from the separate +.SUB file, if that file is present; note: presence of index 0 is absolutely +required for some games like PSX Tomb Raider 2).

+

Entry & Points & Sessions

+

The [Entry N] fields are usually containing Point A0h,A1h,A2h, followed by +Point 1..N (for N tracks). For multiple sessions: The session is terminated by +Point B0h,C0h. The next session does then contain Point A0h,A1h,A2h, and Point +N+1..X (for further tracks). The INDEX values in the [TRACK N] entries are +originated at the begin of the corresponding session, whilst PLBA values in +[Entry N] entries are always originated at the begin of the disk.

+

CDROM Disk Images CDI (DiscJuggler)

+

Overall Format

+
  Sector Data (sector 00:00:00 and up)          ;-body
+  Number of Sessions (1 byte)     <--- located at "Filesize-Footersize"
+  Session Block for 1st session (15 bytes)      ;\
+  nnn-byte info for 1st track                   ; 1st session
+  nnn-byte info for 2nd track (if any)          ;
+  etc.                                          ;/
+  Session Block for 2nd session (15 bytes)      ;\
+  nnn-byte info for 1st track                   ; 2nd session (if any)
+  nnn-byte info for 2nd track (if any)          ;
+  etc.                                          ;/
+  etc.                                          ;-further sessions (if any)
+  Session Block for no-more-sessions (15 bytes) ;-end marker
+  nnn-byte Disc Info Block                      ;-general disc info
+  Entrypoint (4 bytes)            <--- located at "Filesize-4"
+
+

Sector Data

+

Contains Sector Data for sector 00:00:00 and up (ie. all sectors are stored in +the file, there are no missing "pregap" sectors).
+Sector Size can be 800h..990h bytes/sector (sector size may vary per track).

+

Number of Sessions (1 byte)

+
  00h   1   Number of Sessions (usually 1)
+
+

Session Block (15-bytes)

+
  00h   1   Unknown (00h)
+  01h   1   Number of Tracks in session (01h..63h) (or 00h=No More Sessions)
+  02h   7   Unknown (00h-filled)
+  09h   1   Unknown (01h)
+  0Ah   3   Unknown (00h-filled)
+  0Dh   2   Unknown (FFh,FFh)
+
+

Track/Disc Header (30h+F bytes) (used in Track Blocks and Disc Info Block)

+
  00h   12  Unknown (FFh,FFh,00h,00h,01h,00h,00h,00h,FFh,FFh,FFh,FFh)
+  0Ch   3   Unknown (DAh,0Ah,D5h or 64h,05h,2Ah) (random/id/chksum?)
+  0Fh   1   Total Number of Tracks on Disc (00h..63h) (non-BCD)
+  10h   1   Length of below Path/Filename (F)
+  11h   (F) Full Path/Filename (eg. "C:\folder\file.cdi")
+  11h+F 11  Unknown (00h-filled)
+  1Ch+F 1   Unknown (02h)
+  1Dh+F 10  Unknown (00h-filled)
+  27h+F 1   Unknown (80h)
+  28h+F 4   Unknown (00057E40h) (=360000 decimal) (disc capacity 80 minutes?)
+  2Ch+F 2   Unknown (00h,00h)
+  2Eh+F 2   Medium Type (0098h=CD-ROM, 0038h=DVD-ROM)
+
+

Track Block (E4h+F+I+T bytes)

+
  00h     30h+F Track/Disc Header (see above)
+  30h+F   02h   Number of Indices (usually 0002h) (I=Num*4)
+  32h+F   (I)   32bit Lengths (per index) (eg. 00000096h,00007044h)
+  32h+FI  04h   Number of CD-Text blocks (usually 0) (T=Num*18+VariableLen's)
+  36h+FI  (T)   CD-Text (if any) (see "mirage_parser_cdi_parse_cdtext")
+  36h+FIT 02h   Unknown (00h,00h)
+  38h+FIT 01h   Track Mode (0=Audio, 1=Mode1, 2=Mode2/Mixed)
+  39h+FIT 07h   Unknown (00h,00h,00h,00h,00h,00h,00h)
+  40h+FIT 04h   Session Number (starting at 0) (usually 00h)
+  44h+FIT 04h   Track Number   (non-BCD, starting at 0) (00h..62h)
+  48h+FIT 04h   Track Start Address (eg. 00000000h)
+  4Ch+FIT 04h   Track Length        (eg. 000070DAh)
+  50h+FIT 0Ch   Unknown (00h-filled)
+  5Ch+FIT 04h   Unknown (00000000h or 00000001h)
+  60h+FIT 04h   read_mode (0..4)
+                  0: Mode1,        800h, 2048
+                  1: Mode2,        920h, 2336
+                  2: Audio,        930h, 2352
+                  3: Raw+PQ,       940h, 2352+16 non-interleaved (P=only 1bit)
+                  4: Raw+PQRSTUVW, 990h, 2352+96 interleaved
+  64h+FIT 4     Control (Upper 4bit of ADR/Control, eg. 00000004h=Data)
+  68h+FIT 1     Unknown (00h)
+  69h+FIT 4     Track Length        (eg. 000070DAh) (same as above)
+  6Dh+FIT 4     Unknown (00h,00h,00h,00h)
+  71h+FIT 12    ISRC Code 12-letter/digit (ASCII?) string (00h-filled if none)
+  7Dh+FIT 4     ISRC Valid Flag (0=None, Other?=Yes?)
+  81h+FIT 1     Unknown (00h)
+  82h+FIT 8     Unknown (FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh)
+  8Ah+FIT 4     Unknown (00000001h)
+  8Eh+FIT 4     Unknown (00000080h)
+  92h+FIT 4     Unknown (00000002h)     (guess: maybe audio num channels??)
+  96h+FIT 4     Unknown (00000010h)      (guess: maybe audio bits/sample??)
+  9Ah+FIT 4     Unknown (0000AC44h) (44100 decimal, ie. audio sample rate?)
+  9Eh+FIT 2Ah   Unknown (00h-filled)
+  C8h+FIT 4     Unknown (FFh,FFh,FFh,FFh)
+  CCh+FIT 12    Unknown (00h-filled)
+  D8h+FIT 1       session_type  ONLY if last track of a session (else 0)
+                   (0=Audio/CD-DA, 1=Mode1/CD-ROM, 2=Mode2/CD-XA)
+  D9h+FIT 5     Unknown (00h-filled)
+  DEh+FIT 1     Not Last Track of Session Flag (0=Last Track, 1=Not Last)
+  DFh+FIT 1     Unknown (00h)
+  E0h+FIT 4        address for last track of a session? (otherwise 00,00,FF,FF)
+
+

Disc Info Block (5Fh+F+V+T bytes)

+
  00h     30h+F Track/Disc Header (see above)
+  30h+F   4     Disc Size (total number of sectors)
+  34h+F   1     Volume ID Length (V) ;\from Primary Volume Descriptor[28h..47h]
+  35h+F   (V)   Volume ID String     ;/(ISO Data discs) (unknown for Audio)
+  35h+FV  1     Unknown (00h)
+  36h+FV  4     Unknown (01h,00h,00h,00h)
+  3Ah+FV  4     Unknown (01h,00h,00h,00h)
+  3Eh+FV  13    EAN-13 Code 13-digit (ASCII?) string (00h-filled if none)
+  4Bh+FV  4     EAN-13 Valid Flag (0=None, Other?=Yes?)
+  4Fh+FV  4     CD-Text Length in bytes (T=Num*1)
+  53h+FV  (T)   CD-Text (for Lead-in) (probably 18-byte units?)
+  53h+FVT 8     Unknown (00h-filled)
+  5Bh+FVT 4     Unknown (06h,00h,00h,80h)
+
+

Entrypoint (4 bytes) (located at "Filesize-4")

+
  00h     4     Footer Size in bytes
+
+

CDROM Disk Images CUE/BIN/CDT (Cdrwin)

+

.CUE/.BIN (CDRWIN)

+

CDRWIN stores disk images in two separate files. The .BIN file contains the raw +disk image, starting at sector 00:02:00, with 930h bytes per sector, but +without any TOC or subchannel information. The .CUE file contains additional +information about the separate track(s) on the disk, in ASCII format, for +example:
+

 FILE "PATH\FILENAME.BIN" BINARY
+   TRACK 01 MODE2/2352
+     INDEX 01 00:00:00           ;real address = 00:02:00  (+2 seconds)
+   TRACK 02 AUDIO
+     PREGAP 00:02:00             ;two missing seconds      (NOT stored in .BIN)
+     INDEX 01 08:09:29           ;real address = 08:13:29  (+2 seconds +pregap)
+   TRACK 03 AUDIO
+     INDEX 00 14:00:29           ;real address = 14:04:29  (+2 seconds +pregap)
+     INDEX 01 14:02:29           ;real address = 14:06:29  (+2 seconds +pregap)
+   TRACK 04 AUDIO
+     INDEX 00 18:30:20           ;real address = 18:34:20  (+2 seconds +pregap)
+     INDEX 01 18:32:20           ;real address = 18:36:20  (+2 seconds +pregap)
+
+The .BIN file does not contain ALL sectors, as said above, the first 2 seconds +are not stored in the .BIN file. Moreover, there may be missing sectors +somewhere in the middle of the file (indicated as PREGAP in the .CUE file; +PREGAPs are usually found between Data and Audio Tracks).
+The MM:SS:FF values in the .CUE file are logical addresses in the .BIN file, +rather than physical addresses on real CDROMs. To convert the .CUE values back +to real addresses, add 2 seconds to all MM:SS:FF addresses (to compensate the +missing first 2 seconds), and, if the .CUE contains a PREGAP, then the pregap +value must be additionally added to all following MM:SS:FF addresses.
+The end address of the last track is not stored in the .CUE, instead, it can be +only calculated by converting the .BIN filesize to MM:SS:FF format and adding 2 +seconds (plus any PREGAP values) to it.

+

FILE \<filename> BINARY|MOTOTOLA..or..MOTOROLA?|AIFF|WAVE|MP3

+
  (must appear before any other commands, except CATALOG)
+  (uh, may also appear before further tracks)
+
+

FLAGS DCP 4CH PRE SCMS

+

INDEX NN MM:SS:FF

+

TRACK NN datatype

+
  AUDIO          ;930h  ;bytes 000h..92Fh
+  CDG            ;?     ;?
+  MODE1/2048     ;800h  ;bytes 010h..80Fh
+  MODE1/2352     ;930h  ;bytes 000h..92Fh
+  MODE2/2336     ;920h  ;bytes 010h..92Fh
+  MODE2/2352     ;930h  ;bytes 000h..92Fh
+  CDI/2336       ;920h  ;?
+  CDI/2352       ;930h  ;bytes 000h..92Fh
+
+

PREGAP MM:SS:FF

+

POSTGAP MM:SS:FF

+

Duration of silence at the begin (PREGAP) or end (POSTGAP) of a track. Even if +it isn't specified, the first track will always have a 2-second pregap.
+The gaps are NOT stored in the BIN file.

+

REM comment

+

Allows to insert comments/remarks (which are usually ignored). Some third-party +tools are mis-using REM to define additional information.

+

CATALOG 1234567890123

+

ISRC ABCDE1234567

+
  (ISRC must be after TRACK, and before INDEX)
+
+

PERFORMER "The Band"

+

SONGWRITER "The Writer"

+

TITLE "The Title"

+

These entries allow to define basic CD-Text info directly in the .CUE file.
+Some third-party utilites allow to define additional CD-Text info via REM +lines, eg. "REM GENRE Rock".
+Alternately, more complex CD-Text data can be stored in a separate .CDT file.

+

CDTEXTFILE "C:\LONG FILENAME.CDT"

+

Specifies an optional file which may contain CD-TEXT. The .CDT file consists of +raw 18-byte CD-TEXT fragments (which may include any type of information, +including exotic one's like a "Message" from the producer). For whatever +reason, there's a 00h-byte appended at the end of the file. Alternately to the +.CDT file, the less exotic types of CD-TEXT can be defined by PERFORMER, TITLE, +and SONGWRITER commands in the .CUE file.

+

Missing

+

Unknown if newer CUE/BIN versions do also support subchannel data.

+

Malformed .CUE files

+

Some .CCD files are bundled with uncommon/corrupted .CUE files, with entries as +so:
+

   TRACK 1 MODE2/2352   ;three spaces indent, and 1-digit track
+   INDEX 1 00:00:00     ;three spaces indent, and 1-digit index
+
+Normally, that should look as so:
+
  TRACK 01 MODE2/2352   ;two spaces indent, and 2-digit track
+    INDEX 01 00:00:00   ;four spaces indent, and 2-digit index
+
+The purpose of the malformed .CUE might be unsuccessful compatibility, or +tricking people into thinking that .CCD works better than .CUE.

+

CDROM Disk Images MDS/MDF (Alcohol 120%)

+

File.MDF - Contains sector data (optionally with sub-channel data)

+

Contains the sector data, recorded at 800h..930h bytes per sector, optionally +followed by 60h bytes subchannel data (appended at the end of each sector). The +stuff seems to be start on 00:02:00 (ie. the first 150 sectors are missing; at +least it is like so when "Session Start Sector" is -150).
+The subchannel data (if present) consists of 8 subchannels, stored in 96 bytes +(each byte containing one bit per subchannel).
+

  Bit7..0 = Subchannel P..W (in that order, eg. Bit6=Subchannel Q)
+
+The 96 bits (per subchannel) can be translated to bytes, as so:
+
  1st..8th bit  = Bit7..Bit0 of 1st byte (in that order, ie. MSB/Bit7 first)
+  9st..16th bit = Bit7..Bit0 of 2nd byte ("")
+  17th..        = etc.
+

+

File.MDS - Contains disc/lead-in info (in binary format)

+

An MDS file's structure consists of the following stuff ...
+

  Header              (58h bytes)
+  Session block(s)    (usually one 18h byte entry)
+  Data blocks         (N*50h bytes)
+  Index blocks        (usually N*8 bytes)
+  Filename blocks(s)  (usually one 10h byte entry)
+  Filename string(s)  (usually one 6 byte string)
+  Read error(s)       (usually none such)
+

+

Header (58h bytes)

+
  00h 16  File ID ("MEDIA DESCRIPTOR")
+  10h 2   Unknown (01h,03h or 01h,04h or 01h,05h) (Fileformat version?)
+  12h 2   Media Type (0=CD-ROM, 1=CD-R, 2=CD-RW, 10h=DVD-ROM, 12h=DCD-R)
+  14h 2   Number of sessions (usually 1)
+  16h 4   Unknown (02h,00h,00h,00h)
+  1Ah 2   Zero (for DVD: Length of BCA data)
+  1Ch 8   Zero
+  24h 4   Zero (for DVD: Offset to BCA data)
+  28h 18h Zero
+  40h 4   Zero (for DVD: Offset to Disc Structures)   (from begin of .MDS file)
+  44h 0Ch Zero
+  50h 4   Offset to First Session-Block (usually 58h) (from begin of .MDS file)
+  54h 4   Offset to Read errors (usually 0=None)      (from begin of .MDS file)
+
+

Session-Blocks (18h bytes)

+
  00h 4   Session Start Sector (starting at FFFFFF6Ah=-150 in first session)
+  04h 4   Session End Sector     (XXX plus 150 ?)
+  08h 2   Session number (starting at 1) (non-BCD)
+  0Ah 1   Number of Data Blocks with any Point value (Total Data Blocks)
+  0Bh 1   Number of Data Blocks with Point>=A0h      (Special Lead-In info)
+  0Ch 2   First Track Number in Session (01h..63h, non-BCD!)
+  0Eh 2   Last Track Number in Session  (01h..63h, non-BCD!)
+  10h 4   Zero
+  14h 4   Offset to First Data-Block (usually 70h) (from begin of .MDS file)
+
+

Data-Blocks (50h bytes)

+

Block 0..2 are usually containing Point A0h..A2h info. Block 3..N are usually +TOC info for Track 1 and up.
+

  00h 1   Track mode (see below for details)
+  01h 1   Number of subchannels in .MDF file (0=None, 8=Sector has +60h bytes)
+  02h 1   ADR/Control (but with upper/lower 4bit swapped, ie. MSBs=ADR!)    Q0
+  03h 1   TrackNo (usually/always 00h; as this info is in Lead-in area)     Q1
+  04h 1   Point  (Non-BCD!) (Track 01h..63h) (or A0h and up=Lead-in info)   Q2
+  05h 4   Zero (probably dummy MSF and reserved byte from Q channel)   Q3..Q6?
+  09h 1   Minute (Non-BCD!)  ;\MM:SS:FF of Point'ed track                   Q7
+  0Ah 1   Second (Non-BCD!)  ; (or disc/lead-out info when Point>=A0h)      Q8
+  0Bh 1   Frame  (Non-BCD!)  ;/                                             Q9
+
+For Point>=A0h, below 44h bytes at [0Ch..4Fh] are zero-filled
+
  0Ch 4   Offset to Index-block for this track    (from begin of .MDS file)
+  10h 2   Sector size (800h..930h) (or 860h..990h if with subchannels)
+  12h 1   Unknown (02h) (maybe number of indices?)
+  13h 11h Zero
+  24h 4   Track start sector, PLBA (00000000h=00:02:00)(or 00000096h=00:02:00?)
+  28h 8   Track start offset                      (from begin of .MDF file)
+  30h 4   Number of Filenames for this track (usually 1)
+  34h 4   Offset to Filename Block for this track (from begin of .MDS file)
+  38h 18h Zero
+
+Trackmode:
+
  (upper 4bit seem to be meaningless?)
+  00h=None (used for entries with Point=A0h..FF)
+  A9h=AUDIO       ;sector size = 2352    930h  ;bytes 000h..92Fh
+  AAh=MODE1       ;sector size = 2048    800h  ;bytes 010h..80Fh
+  ABh=MODE2       ;sector size = 2336    920h  ;bytes 010h..92Fh
+  ACh=MODE2_FORM1 ;sector size = 2048    800h  ;bytes 018h..817h (incomplete!)
+  ADh=MODE2_FORM2 ;sector size = 2324+0? 914h  ;bytes 018h..91Bh (incomplete!)
+  ADh=MODE2_FORM2 ;sector size = 2324+4? 918h  ;bytes ??..?? (contains what?)
+  ECh=MODE2       ;sector size = 2448    990h  ;(930h+60h) (with subchannels)
+

+

Index Blocks (usually 8 bytes per track)

+

  00h 4  Number of sectors with Index 0 (usually 96h or zero)
+  04h 4  Number of sectors with Index 1 (usually size of main-track area)
+
+Index blocks are usually/always 8 bytes in size (two indices per track, even +when recording a CD with more than 2 indices per track).
+The MDS file does usually contain Index blocks for \<all> Data Blocks (ie. +including unused dummy Index Blocks for Data Blocks with Point>=A0h).

+

Filename Blocks (10h bytes)

+

  00h 4  Offset to Filename (from begin of .MDS file)
+  04h 1  Filename format (0=8bit, 1=16bit characters)
+  05h 11 Zero
+
+Normally all tracks are sharing the same filename block (although theoretically +the tracks could use separate filename blocks; with different filenames).

+

Filename Strings (usually 6 bytes)

+

  00h 6  Filename, terminated by zero (usually "*.mdf",00h)
+
+Contains the filename of the of the sector data (usually "*.mdf", indicating to +use the same name as for the .mds file, but with .mdf extension).

+

Read errors aka DPM data blocks (present if errors occured during recording)

+

  00h 4   Unknown (1)
+  04h 4   Offset to following stuff
+  08h 4   Unknown (2)
+  0Ch 4   Unknown (7)
+  10h 4   Unknown (1)
+  14h 4   Number of read errors (E)
+  18h E*4 LBA's for sectors with read errors (0 and up)
+
+Instead of (or additionally to) read errors, there may be also hundreds of +Kbytes of unknown stuff appended (text strings in 8bit or 16bit format, binary +numbers, and huge zerofilled blocks).

+

Missing

+

Unknown if/how this format supports EAN-13, ISRC, CD-TEXT.

+

CDROM Disk Images NRG (Nero)

+

.NRG (NERO)

+

Nero is probably the most bloated and most popular CD recording software. The +first part of the file contains the disk image, starting at sector 00:00:00, +with 800h..930h bytes per sector. Additional chunk-based information is +appended at the end of the file, usually consisting of only four chunks: +CUES,DAOI,END!,NERO (in that order).

+

Chunk Entrypoint (in last 8/12 bytes of file)

+
  4   File ID "NERO"/"NER5"
+  4/8 Fileoffset of first chunk
+
+

Cue Sheet (summary of the Table of Contents, TOC)

+

  4   Chunk ID "CUES"/"CUEX"
+  4   Chunk size (bytes)
+
+below EIGHT bytes repeated for each track/index,
+of which, first FOUR bytes are same for both CUES and CUEX,
+
  1   ADR/Control from TOC (usually LSBs=ADR=1=fixed, MSBs=Control=Variable)
+  1   Track  (BCD) (00h=Lead-in, 01h..99h=Track N, AAh=Lead-out)
+  1   Index  (BCD) (usually 00h=pregap, 01h=actual track)
+  1   Zero
+
+next FOUR bytes for CUES,
+
  1   Zero
+  1   Minute (BCD) ;starting at 00:00:00 = 2 seconds before ISO vol. descr.
+  1   Second (BCD)
+  1   Sector (BCD)
+
+or, next FOUR four bytes for CUEX,
+
  4   Logical Sector Number (HEX) ;starting at FFFFFF6Ah (=00:00:00)
+
+Caution: Above may contain two position 00:00:00 entries: one nonsense entry +for Track 00 (lead-in), followed by a reasonable entry for Track 01, Index 00.

+

Disc at Once Information

+

  4   Chunk ID "DAOI"/"DAOX"
+  4   Chunk size (bytes)
+  4   Garbage (usually same as above Chunk size)
+  13  EAN-13 Catalog Number (13-digit ASCII) (or 00h-filled if none/unknown)
+  1   Zero
+  1   Disk type (00h=Mode1 or Audio, 20h=XA/Mode2) (and probably 10h=CD-I?)
+  1   Unknown (01h)
+  1   First track (Non-BCD) (01h..63h)
+  1   Last track  (Non-BCD) (01h..63h)
+
+below repeated for each track,
+
  12  ISRC in ASCII (eg. "USXYZ9912345") (or 00h-filled if none/unknown)
+  2   Sector size (usually 800h, 920h, or 930h) (see Mode entry for more info)
+  1   Mode:
+        0=Mode1/800h ;raw mode1 data (excluding sync+header+edc+errorinfo)
+        3=Mode2/920h ;almost full sector (exluding first 16 bytes; sync+header)
+        6=Mode2/930h ;full sector (including first 16 bytes; sync+header)
+        7=Audio/930h ;full sector (plain audio data)
+      Mode values from wikipedia:
+        00h for data                                     Mode1/800h
+        02h
+        03h for Mode 2 Form 1 data   eh? FORM1???        Mode2/920h
+        05h for raw data                                 Mode1?/930h
+        06h for raw Mode 2/form 1 data                   Mode2/930h
+        07h for audio                                    Audio/930h
+        0Fh for raw data with sub-channel                Mode1?/930h+WHAT?
+        10h for audio with sub-channel                   Audio/930h+WHAT?
+        11h for raw Mode 2/form 1 data with sub-channel  Mode2/WHAT?+WHAT?
+       Note: Some newer files do actually use different sector sizes for each
+       track (eg. 920h for the data track, and 930h for any following audio
+       tracks), older files were using the same sector size for all tracks
+       (eg. if the disk contained 930-byte Audio tracks, then Data tracks
+       were stored at the same size, rather than at 800h or 920h bytes).
+  3   Unknown (always 00h,00h,01h)
+  4/8 Fileoffset 1 (Start of Track's Pregap) (with Index=00h)
+  4/8 Fileoffset 2 (Start of actual Track) (with Index=01h and up)
+  4/8 Fileoffset 3 (End of Track) (aka begin of next track's pregap)
+

+

End of chain

+
  4   Chunk ID "END!"
+  4   Chunk size (always zero)
+
+

Track Information (contained only in Track at Once images)

+

  4     Chunk ID "TINF"/"ETNF"/"ETN2"
+  4     Chunk size (bytes)
+
+below repeated for each track,
+
  4/4/8 Track fileoffset        ;\32bit in TINF/ETNF chunks,
+  4/4/8 Track length (bytes)    ;/64bit in ETN2 chunks
+  4     Mode (should be same as in DAO chunks, see there) (implies sector size)
+  0/4/4 Start lba on disc       ;\only in ETNF/ETN2 chunks,
+  0/4/4 Unknown?                ;/not in TINF chunks
+

+

Unknown 1 (contained only in Track at Once images)

+
  4   Chunk ID "RELO"
+  4   Chunk size (bytes)
+  4   Zero
+
+

Unknown 2 (contained only in Track at Once images)

+
  4   Chunk ID "TOCT"
+  4   Chunk size (bytes)
+  1   Disk type (00h=Mode1 or Audio, 20h=XA/Mode2) (and probably 10h=CD-I?)
+  1   Zero (00h)
+
+

Session Info (begin of a session) (contained only in multi-session images)

+
  4   Chunk ID "SINF"
+  4   Chunk size (bytes)
+  4   Number of tracks in session
+
+

CD-Text (contained only in whatever images)

+

  4   Chunk ID None/"CDTX"
+  4   Chunk size (bytes) (must be a multiple of 18 bytes)
+
+below repeated for each fragment,
+
  18  Raw 18-byte CD-text data fragments
+

+

Media Type? (contained only in whatever images)

+
  4   Chunk ID "MTYP"
+  4   Chunk size (bytes)
+  4   Unknown? (00000001h for CDROM) (maybe other value for DVD)
+
+

Optional Filenames (names where the image was generated from?)

+
  4   Chunk ID "AFNM"
+  4   Chunk size (bytes)
+  ..  Track Filenames (eg. "Track1.wav",0,"Track2.wav",0)
+
+

Optional Volume name

+
  4   Chunk ID "VOLM"
+  4   Chunk size (bytes)
+  ..  Name (eg. "Audio CD",00h)
+
+

Notes

+

Newer/older .NRG files may contain 32bit/64bit values (and use "OLD"/"NEW" +chunk names) (as indicated by the "/" slashes).
+CAUTION: All 16bit/32bit/64bit values are in big endian byte-order.

+

Missing

+

Unknown if newer NRG versions do also support subchannel data.

+

CDROM Disk Image/Containers CDZ

+

.CDZ is a compressed disk image container format (developed by pSX Author, and +used only by the pSX emulator). The disk is split into 64kbyte blocks, which +allows fast random access (without needing to decompress all preceeding +sectors).
+However, the compression ratio is surprisingly bad (despite of being +specifically designed for cdrom compression, the format doesn't remove +redundant sector headers, error correction information, and EDC checksums).

+

.CDZ File Structure

+
  FileID ("CDZ",00h for cdztool v0/v1, or "CDZ",01h for cdztool v2 and up)
+  One or two Chunk(s)
+
+

.CDZ Chunk Format

+

Chunk Header in v0 (unreleased prototype):
+

  4    32bit Decompressed Size (of all blocks) (must be other than "ZLIB")
+
+Chunk Header in v1 (first released version):
+
  4    ZLIB ID ("ZLIB")
+  8    64bit Decompressed Size (of all blocks)
+
+Chunk Header in v2 and up (later versions):
+
  4    Chunk ID (eg. "CUE",00h)
+  8    Chunk Size in bytes (starting at "ZLIB" up to including Footer, if any)
+  4    ZLIB ID ("ZLIB")
+  8    64bit Decompressed Size (of all blocks)
+
+Chunk Body (same in all versions):
+
  4    Number of Blocks (N)
+  4    Block 1 Compressed Size (CS.1)
+  4    Block 1 Decompressed Size (always 00010000h, except last block)
+  CS.1 Block 1 Compressed ZLIB Data (starting with 78h,9Ch)
+  ...  ...                                     ;\
+  4    Block N Compressed Size (CS.N)          ; further block(s)
+  4    Block N Decompressed Size               ; (if any)
+  CS.N Block N Compressed ZLIB Data            ;/
+
+Chunk Footer in v0 (when above header didn't have the "ZLIB" ID):
+
  4*N       Directory Entries for N blocks     ;-this ONLY for BIN chunk
+
+Chunk Footer in v1 and up:
+
  BPD*(N-1) Directory Entries for N-1 blocks   ;\this ONLY for BIN chunk
+  1         Bytes per Directory Entry (BPD)    ;/(not for CUE/CCD/MDS)
+
+The "Compressed ZLIB Data" parts contain Deflate'd data (starting with 2-byte +ZLIB header, and ending with 4-byte ZLIB/ADLER checksum), for details see:
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)

+

.CDZ Chunks / Content

+

The chunk(s) have following content:
+

  noname+noname       --> .CUE+.BIN (cdztool v1 and below)
+  "BIN",0             --> .ISO      (cdztool v2? and up)
+  "CUE",0+"BIN",0     --> .CUE+.BIN (cdztool v2 and up)
+  "CCD",0+"BIN",0     --> .CCD+.IMG (cdztool v2 and up)
+  "CCD",0+"BIN",01h   --> .CCD+.IMG+.SUB (930h sectors, plus 60h subchannels)
+  "MDS",0+"BIN",0     --> .MDS+.MDF (cdztool v5 only)
+
+Note: cdztool doesn't actually recognize files with .ISO extension (however, +one can rename them to .BIN, and then compress them as CUE-less .BIN file).

+

Cdztool.exe Versions

+

  cdztool.exe v0, unrelased prototype
+  cdztool.exe v1, 22 May 2005, CRC32=620dbb08, 102400 bytes, pSX v1.0-5
+  cdztool.exe v2, 02 Jul 2006, CRC32=bcb29c1e, 110592 bytes, pSX v1.6
+  cdztool.exe v3, 22 Jul 2006, CRC32=4062ba82, 110592 bytes, pSX v1.7
+  cdztool.exe v4, 13 Aug 2006, CRC32=7388dd3d, 118784 bytes, pSX v1.8-11
+  cdztool.exe v5, 22 Jul 2007, CRC32=f25c1659, 155648 bytes, pSX v1.12-13
+
+Note: v0 wasn't ever released (it's only noteworthy because later versions do +have backwards compatibility for decompressing old v0 files). v1 didn't work +with all operating systems (on Win98 it just says "Error: Couldn't create +\<output>" no matter what one is doing, however, v1 does work on later +windows versions like WinXP or so?).

+

CDROM Disk Image/Containers ECM

+

ECM (Error Code Modeler by Neill Corlett) is a utility that removes +unneccessary ECC error correction and EDC error detection values from +CDROM-images. This is making the images a bit smaller, but the real size +reduction isn't gained until subsequently compressing the images via tools like +ZIP. Accordingly, these files are extremly uncomfortable to use: One most first +UNZIP them, and then UNECM them.

+

.EXT.ECM - Double extension

+

ECM can be applied to various CDROM-image formats (like .BIN, .CDI, .IMG, .ISO, +.MDF, .NRG), as indicated by the double-extension. Most commonly it's applied +to .BIN files (hence using extension .BIN.ECM).

+

Example / File Structure

+
  45 43 4D 00                                      ;FileID "ECM",00h
+  3C                                               ;Type 0, Len=10h (aka 0Fh+1)
+  00 FF FF FF FF FF FF FF FF FF FF 00 00 02 00 02  ;16 data bytes
+  02                                               ;Type 2, Len=1 (aka 00h+1)
+  00 00 08 00 00 00 00 00 00 00 00 ..... 00 00 00  ;804h data bytes
+  3C                                               ;Type 0, Len=10h (aka 0Fh+1)
+  00 FF FF FF FF FF FF FF FF FF FF 00 00 02 01 02  ;16 data bytes
+  02                                               ;Type 2, Len=1 (aka 00h+1)
+  00 00 08 00 00 00 00 00 00 00 00 ..... 00 00 00  ;804h data bytes
+  ...
+  FC FF FF FF 3F                                   ;End Code (Len=FFFFFFFFh+1)
+  NN NN NN NN                                      ;EDC (on decompressed data)
+
+

Type/Length Byte(s)

+

Type/Length is encoded in 1..5 byte(s), with "More=1" indicating that further +length byte(s) follow:
+

  1st Byte: Bit7=More, Bit6-2=LengthBit4-0, Bit1-0=Type(0..3)
+  2nd Byte: Bit7=More, Bit6-0=LengthBit5-11
+  3rd Byte: Bit7=More, Bit6-0=LengthBit12-18
+  4th Byte: Bit7=More, Bit6-0=LengthBit19-25
+  5th Byte: Bit7-6=Reserved/Zero, Bit5-0=LengthBit26-31
+
+Length=FFFFFFFFh=End Indicator
+The actual decompression LEN is: "LEN=Length+1"

+

ECM Decompression

+

Below is repeated LEN times (with LEN being the Length value plus 1):
+

  Type 0: load 1 byte, save 1 byte
+  Type 1: load 803h bytes [0Ch..0Eh,10h..80Fh], save 930h bytes [0..92Fh]
+  Type 2: load 804h bytes [14h..817h], save 920h bytes [10h..92Fh]
+  Type 3: load 918h bytes [14h..91Bh], save 920h bytes [10h..92Fh]
+
+Type 1-3 are reconstructing the missing bytes before saving. Type 2-3 are +saving only 920h bytes, so (if the original image contained full 930h byte +sectors) the missing 10h bytes must be inserted via Type 0. Type 0 can be also +used for copying whole sectors as-is (eg. Audio sectors, or Data sectors with +invalid Sync/Header/ECC/EDC values). And, Type 0 can be used to store +non-sector data (such like the chunks at the end of .NRG or .CDI files).

+

Central Mistakes

+

There's a lot of wrong with the ECM format. The two central problems are that +it doesn't support data-compression (and needs external compression tools like +zip/rar), and, that it doesn't contain a sector look-up table (meaning that +random access isn't possible unless when scanning the whole file until reaching +the desired sector).

+

Worst-case Scenario

+

As if ECM as such wouldn't be uncomfortable enough, you may expect typical ECM +users to get more things messed up. For example:
+

  A RAR file containing a 7Z file containing a ECM file containing a BIN file.
+  The BIN containing only Track 1, other tracks stored in APE files.
+  And, of course, the whole mess without including the required CUE file.
+

+

CDROM Subchannel Images

+

SBI (redump.org)

+

SBI Files start with a 4-byte FileID:
+

  4 bytes FileID ("SBI",00h)
+
+Then followed by entries as so:
+
  3 bytes real absolute MM:SS:FF address where the sub q data was bad
+  1 byte Format: the format can be 1, 2 or 3:
+  Format 1: complete 10 bytes sub q data            (Q0..Q9)
+  Format 2: 3 bytes wrong relative MM:SS:FF address (Q3..Q5)
+  Format 3: 3 bytes wrong absolute MM:SS:FF address (Q7..Q9)
+
+Note: The PSX libcrypt protection relies on bad checksums (Q10..Q11), which +will cause the PSX cdrom controller to ignore Q0..Q9 (and to keep returning +position data from most recent sector with intact checksum).
+Ironically, the SBI format cannot store the required Q10..Q11 checksum. The +trick for using SBI files with libcrypted PSX discs is to ignore the useless +Q0..Q9 data, and to assume that all sectors in the SBI file have wrong Q10..Q11 +checksums.

+

M3S (Subchannel Q Data for Minute 3) (ePSXe)

+

M3S files are containing Subchannel Q data for all sectors on Minute=03 (the +region where PSX libcrypt data is located) (there is no support for storing the +(unused) libcrypt backup copy on Minute=09). The .M3S filesize is 72000 bytes +(60 seconds * 75 sectors * 16 bytes). The 16 bytes per sector are:
+

  Q0..Q9   Subchannel Q data (normally position data)
+  Q10..Q11 Subchannel Q checksum
+  Q12..Q15 Dummy/garbage/padding (usually 00000000h or FFFFFFFFh)
+
+Unfortunately, there are at least 3 variants of the format:
+
  1. With CRC (Q0..Q11 intact) (and Q12..Q15 randomly 00000000h or FFFFFFFFh)
+  2. Without CRC (only Q0..Q9 intact, but Q10..Q15 zerofilled)
+  3. Without anything (only Q0 intact, but Q1..Q15 zerofilled)
+
+The third variant is definetly corrupt (and one should ignore such zerofilled +entries). The second variant is corrupt, too (but one might attempt to repair +them by guessing the missing checksum: if it contains normal position values +assume correct crc, if it contains uncommon values assume a libcrypted sector +with bad crc).
+The M3S format is intended for libcrypted PSX games, but, people seem to have +also recorded (corrupted) M3S files for unprotected PSX games (in so far, more +than often, the M3S files might cause problems, instead of solving them).
+Note: The odd 16-byte format with 4-byte padding does somehow resemble the "P +and Q Sub-Channel" format 'defined' in MMC-drafts; if the .M3S format was based +on the MMC stuff: then the 16th byte might contain a Subchannel P "pause" flag +in bit7.

+

CDROM Images with Subchannel Data

+

Most CDROM-Image formats can (optionally) contain subchannel recordings. The +downsides are: Storing all 8 subchannels for a full CDROM takes up about +20MBytes. And, some entries may contain 'wrong' data (read errors caused by +scratches cannot be automatically repaired since subchannels do not contain +error correction info).
+If present, the subchannel data is usually appended at the end of each sector +in the main binary file (one exception is CloneCD, which stores it in a +separate .SUB file instead of in the .IMG file).
+

  CCD/IMG/SUB (CloneCD)  P-W  60h-bytes Non-interleaved (in separate .SUB file)
+  CDI (DiscJuggler)      P-Q  10h-bytes Non-interleaved (in .CDI file)
+  ""                     P-W  60h-bytes Interleaved (in .CDI file)
+  CUE/BIN/CDT (Cdrwin)        N/A
+  ISO (single-track)          N/A
+  MDS/MDF (Alcohol 120%) P-W  60h-bytes Interleaved (in .MDF file)
+  NRG (Nero)             P-W  60h-bytes Interleaved (in .NRG file)
+
+Interleaved Subchannel format (eg. Alcohol .MDF files):
+
  00h-07h   80 C0 80 80 80 80 80 C0   ;P=FFh, Q=41h=ADR/Control, R..W=00h
+  08h-0Fh   80 80 80 80 80 80 80 C0   ;P=FFh, Q=01h=Track,       R..W=00h
+  10h-17h   80 80 80 80 80 80 80 C0   ;P=FFh, Q=01h=Index,       R..W=00h
+  18h-1Fh   80 80 80 80 80 80 80 80   ;P=FFh, Q=00h=RelMinute,   R..W=00h
+  20h-27h   80 80 80 80 80 80 80 80   ;P=FFh, Q=00h=RelSecond,   R..W=00h
+  28h-2Fh   80 80 80 80 80 80 80 80   ;P=FFh, Q=00h=RelSector,   R..W=00h
+  30h-37h   80 80 80 80 80 80 80 80   ;P=FFh, Q=00h=Reserved,    R..W=00h
+  38h-3Fh   80 80 80 80 80 80 80 80   ;P=FFh, Q=00h=AbsMinute,   R..W=00h
+  40h-47h   80 80 80 80 80 80 C0 80   ;P=FFh, Q=02h=AbsSecond,   R..W=00h
+  48h-4Fh   80 80 80 80 80 80 80 80   ;P=FFh, Q=00h=AbsSector,   R..W=00h
+  50h-57h   80 80 C0 80 C0 80 80 80   ;P=FFh, Q=28h=ChecksumMsb, R..W=00h
+  58h-5Fh   80 80 C0 C0 80 80 C0 80   ;P=FFh, Q=32h=ChecksumLsb, R..W=00h
+
+Non-Interleaved Subchannel format (eg. CloneCD .SUB files):
+
  00h-0Bh   FF FF FF FF FF FF FF FF FF FF FF FF  ;Subchannel P (Pause)
+  0Ch-17h   41 01 01 00 00 00 00 00 02 00 28 32  ;Subchannel Q (Position)
+  18h-23h   00 00 00 00 00 00 00 00 00 00 00 00  ;Subchannel R
+  24h-2Fh   00 00 00 00 00 00 00 00 00 00 00 00  ;Subchannel S
+  30h-3Bh   00 00 00 00 00 00 00 00 00 00 00 00  ;Subchannel T
+  3Ch-47h   00 00 00 00 00 00 00 00 00 00 00 00  ;Subchannel U
+  48h-53h   00 00 00 00 00 00 00 00 00 00 00 00  ;Subchannel V
+  54h-5Fh   00 00 00 00 00 00 00 00 00 00 00 00  ;Subchannel W
+
+Non-Interleaved P-Q 10h-byte Subchannel format:
+
  This is probably based on MMC protocol, which would be as crude as this:
+  The 96 pause bits are summarized in 1 bit. Pause/Checksum are optional.
+  00h-09h   41 01 01 00 00 00 00 00 02 00        ;Subchannel Q (Position)
+  0Ah-0Bh   28 32    ;<-- OPTIONAL, can be zero! ;Subchannel Q (Checksum)
+  0Ch-0Eh   00 00 00                             ;Unused padding (zero)
+  0F        80       ;<-- OPTIONAL, can be zero! ;Subchannel P (Bit7=Pause)
+

+

CDROM Disk Images PBP (Sony)

+

.PBP

+

Sony's disc image format used on PSP. Can store multi-disc images in a single +file. Supports deflate data compression and some yet unknown audio compression. +A homebrew compressor can compress whole discs with deflate (which works, but +it isn't very good to compress audio sectors that way).

+

PBP Format (rev-engineered from homebrew DBALL.PBP)

+

  000000h 4    ID (00h,"PBP")
+  000004h 4    Version? (10000h) (but, reportedly "always 100h or 1000100h")
+  000008h 4    Offset of the file PARAM.SFO (28h)
+  00000Ch 4    Offset of the file ICON0.PNG (3D8h)
+  000010h 4    Offset of the file ICON1.PMF (3D8h) or ICON1.PNG
+  000014h 4    Offset of the file PIC0.PNG  (3D8h) or UNKNOWN.PNG
+  000018h 4    Offset of the file PIC1.PNG  (3D8h) or PICT1.PNG
+  00001Ch 4    Offset of the file SND0.AT3  (3D8h)
+  000020h 4    Offset of the file DATA.PSP  (3D8h)
+  000024h 4    Offset of the file DATA.PSAR (10000h)
+  000028h ..   PARAM.SFO file (zerofilled in homebrew PBP)
+  0003D8h ..   PNG files etc  (zerofilled in homebrew PBP)
+  010000h 0Ch  ID "PSISOIMG0000"
+  01000Ch 4    PBP Size-10000h              (144740h)
+  010010h 4    PBP Size-6420h (???)         (14E320h)
+  010014h ..   Zerofilled
+  010400h 0Bh  Game ID ("_SCUS_94476" for Hot Shots Golf 2)
+  01040Bh ..   Zerofilled
+  010800h A00h TOC List    (0Ah-byte per entry) (unused entries are zerofilled)
+  011200h 20h  Zerofilled
+  011220h 4    PBP Size-D2CFh (???)         (147471h)
+  011224h 4    Zero
+  011228h 4    Unknown     (7FFh)
+  01122Ch 11h  Game Name   ("Hot Shots Golf",C2h,AEh,"2")
+  01123Dh ..   Zerofilled
+  014000h ..   Sector List (20h-byte per entry) (unused entries are zerofilled)
+  ...     ..   Zerofilled
+  110000h ..   Deflated sectors (9300h bytes after decompression)
+  15467Dh B8h  One extra compression block that is NOT in Sector List ???
+  154735h 0Bh  Weird padding with ASCII "00000000000"
+  154740h -    End of file
+ TOC List (Subchannel Q with ADR=1 during Lead-In):
+  000h 1   ADR/Control (eg. 41h=Data Track)
+  001h 1   Track       (always 00h=Lead-in for all TOC List entries)
+  002h 1   Point       (A0h, A1h, A2h, or Track 01h and up)      (BCD?)
+  003h 3   Dummy MSF   (usually 00:00:00 or weirdly 00:02:01)    (BCD?)
+  006h 1   Reserved    (00h)
+  007h 3   Actual MSF  (or TOC info for Point=A0h,A1h)           (BCD?)
+ Example TOC (DBALL.PBP):
+  41 00 A0 00 00 00 00 01 20 00   ;First Track (1) and Type (20h=CDROM-XA)
+  41 00 A1 00 00 00 00 01 00 00   ;Last Track Number (1)
+  41 00 A2 00 00 00 00 27 19 22   ;Lead-Out, uh at 27:19:22 in DBALL.PBP ???
+  41 00 01 00 02 01 00 00 02 00   ;Track 1 at 00:02:00
+  (remaining entries are zerofilled)
+ Example TOC (PSALM69.PBP):
+  01 00 01 00 02 00 00 00 00 00   ;Track 1 as audio <-- why that ???
+  01 00 02 02 37 44 00 00 00 00   ;Track 2 as audio
+  01 00 03 03 25 45 00 00 00 00   ;Track 3 as audio
+  41 00 01 00 02 01 00 00 02 00   ;Track 1 as data <-- listed last?
+  (remaining entries are zerofilled)
+  (weirdly, most MM:SS:FF values are stored in byte[3..5] instead [7..9])
+  (there are no point=A0h,A1h,A2h entries)
+ Example TOC (GOOGLE_AI_TTS.PBP):
+  01 00 01 00 02 00 00 00 00 00   ;Track 1 as audio
+  01 00 02 00 02 30 00 00 00 00   ;Track 2 as audio, but without pregap?
+  01 00 03 00 02 60 00 00 00 00   ;Track 3 as audio, but without pregap?
+  01 00 04 00 03 15 00 00 00 00   ;Track 4 as audio, but without pregap?
+  (remaining entries are zerofilled)
+ Sector List:
+  000h 4   Offset-110000h to Sector(N*10h)
+  004h 2   Compressed size of Sector(N*10h+(0..0Fh))   ;9300h=uncompressed?
+  006h 2   Zero (but, reportedly "usually 1... and 0 for the last entry")
+  008h 10h Zero (but, reportedly "first 10h bytes of SHA1 sum of 10h sectors")
+  018h 8   Zero (padding)
+
+Data Compression is using raw Deflate (without any zlib headers or the like), +and it's unfortunately just compressing the sectors as-is (without filtering +out sector headers and ECC/EDC values).
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)
+Audio Compression format is unknown:
+
  ?
+
+Multi-disc format is unknown:
+
  ?
+
+Retail files have "PGD" encryption:
+
  ?
+

+

CDROM Disk Images CHD (MAME)

+

All numbers are stored in Motorola (big-endian) byte ordering.

+

V1/V2 header (hdcomp):

+

V1/V2 contains harddisk related header entries (and apparently does't support +cdroms).
+

  000h 08h  ID "MComprHD" (MAME Compressed Hunks of Data)
+  008h 4    Header size    (4Ch=V1, 50h=V2)
+  00Ch 4    Header version (probably 01h=V1, 02h=V2)
+  010h 4    Flags (bit0=DriveHasParent, bit1=AllowWrites)
+  014h 4    Compression type (0=None, 1=ZLIB)
+  018h 4    Number of sectors per hunk
+  01Ch 4    Total number of hunks represented
+  020h 4    Number of cylinders on hard disk
+  024h 4    Number of heads on hard disk
+  028h 4    Number of sectors on hard disk
+  02Ch 10h  MD5 checksum on raw data
+  03Ch 10h  MD5 checksum on parent file
+  N/A  -    V1: Uses fixed 200h-byte Sector size
+  04Ch (4)  V2: Number of bytes per sector
+  ...  ?    Supposedly followed by map and/or data at whatever locations
+

+

V3/V4 header (chdman):

+

V3/V4 are inventing new "metadata" for info about harddisks or cdroms.
+

  000h 08h  ID "MComprHD" (MAME Compressed Hunks of Data)
+  008h 4    Header size    (78h=V3, 6Ch=V4)
+  00Ch 4    Header version (03h=V3, 04h=V4)
+  010h 4    Flags (bit0=DriveHasParent, bit1=AllowWrites)
+  014h 4    Compression type (0=None, 1=ZLIB, 2=ZLIB_PLUS) (V4: 3=AV)
+  018h 4    Total number of hunks represented    (N)       (92h)
+  01Ch 08h  Total size of all uncompressed hunks (N*2640h) (15D080h)
+  024h 08h  Offset to the first blob of metadata
+  02Ch 10h  V3: MD5 checksum on raw data                ;\
+  03Ch 10h  V3: MD5 checksum on parent file             ;
+  04Ch 4    V3: Number of bytes per hunk (2640h=990h*4) ; V3
+  050h 14h  V3: SHA1 checksum on raw data               ;
+  064h 14h  V3: SHA1 checksum on parent file            ;/
+  02Ch 4    V4: Number of bytes per hunk (2640h=990h*4) ;\
+  030h 14h  V4: SHA1 checksum on raw+meta               ; V4
+  044h 14h  V4: SHA1 checksum on raw+meta of parent     ;
+  058h 14h  V4: SHA1 checksum on raw data               ;/
+  ...  N*10h Map entries (for each hunk)
+  ...  10h   Map end marker ("EndOfListCookie",00h)
+  ...  ..    Metadata Chunk(s)
+  ...  ..    Compressed Sectors (aka hunks)
+

+

V5 header (chdman):

+
  000h 8    ID "MComprHD" (MAME Compressed Hunks of Data)
+  008h 4    Header size    (7Ch=V5)
+  00Ch 4    Header version (05h=V5)
+  010h 4    Compressor 0 (usually "cdlz"=cdrom/lzma)
+  014h 4    Compressor 1 (usually "cdzl"=cdrom/zlib)
+  018h 4    Compressor 2 (usually "cdfl"=cdrom/flac)
+  01Ch 4    Compressor 3 (usually 0=none)
+  020h 8    Total size of all uncompressed hunks    (N*4C80h-HunkPadding)
+  028h 8    Offset to Map                           (3D797h)
+  030h 8    Offset to first Metadata chunk          (7Ch)
+  038h 4    Number of bytes per hunk (512k maximum) (990h*8) (4C80h)
+  03Ch 4    Number of bytes per sector              (990h)   (30h+60h)
+  040h 14h  SHA1 on raw data
+  054h 14h  SHA1 on raw+meta
+  068h 14h  SHA1 on raw+meta of parent (0=No parent)
+  ...  ..   Metadata Chunk(s)
+  ...  ..   Padding to BytesPerHunk-boundary    ;\when uncompressed
+  ...  ..   Uncompressed Sectors (aka hunks)    ;/
+  ...  ..   Compressed Sectors (aka hunks)      ;-when compressed
+  ...  ..   Map
+
+

CHD Metadata

+
V3/V4/V5 Metadata
+

Overall Metadata chunk format:
+

  000h 4   Chunk ID (aka Blob Tag) (eg. "CHT2" for each CDROM track)
+  004h 1   Flags (00h=V3, 01h=V4/V5)  ;maybe some kind of flag/type/version?
+  005h 3   Chunk Data Size (24bit)
+  008h 8   Offset to next Chunk (or 0=Last chunk)
+  010h ..  Chunk Data (eg. "TRACK:1 TYPE:MODE2_RAW ... POSTGAP:0",00h for CHT2)
+
+There can be one or more chunks (eg. CHT2 chunk(s), one for each CDROM track).
+
  Summary of Chunk IDs and corresponding Data entries:
+  ID_______Data_______________________________________________________
+  "GDDD"   "CYLS,HEADS,SECS,BPS"         ;-hard disk standard info     ;\
+  "IDNT"   ?                             ;-hard disk identify info     ; HDD
+  "KEY "   ?                             ;-hard disk key info          ;/
+  "CIS "   ?                             ;-pcmcia CIS info             ;-PCMCIA
+  "CHCD"   94Ch-byte binary (4+99*24 bytes)                            ;\
+  "CHTR"   "TRACK TYPE SUBTYPE FRAMES"                                 ; CD-ROM
+  "CHT2"   "TRACK TYPE SUBTYPE FRAMES PREGAP PGTYPE PGSUB POSTGAP"     ;/
+  "CHGT"   ?                                                           ;\Sega
+  "CHGD"   "TRACK TYPE SUBTYPE FRAMES PAD PREGAP PGTYPE PGSUB POSTGAP" ;/GD-ROM
+  "AVAV"   "FPS WIDTH HEIGHT INTERLACED CHANNELS SAMPLERATE"           ;\AV
+  "AVLD"   ?   (A/V Laserdisc frame)                                   ;/
+

+
V3/V4/V5 Metadata in ASCII format
+

The ASCII items are separated by spaces as shown above (or commas for GDDD).
+The last item in each chunk is terminated by 00h (at least so for CHTR/CHT2).
+Most items are followed by a colon and decimal string (eg. TRACK:1), except, +TYPE,PGTYPE,SUBTYPE,PGSUB are followed by text strings (eg. TYPE:MODE2_RAW).
+

  CYLS:#          Hard disc number of cylinders
+  HEADS:#         Hard disc number of heads
+  SECS:#          Hard disc number of sectors
+  BPS:#           Hard disc bytes per sector
+  TRACK:#         CDROM current track number (1..99)
+  TYPE:string     CDROM sector type/size
+  SUBTYPE:string  CDROM subchannel info (usually "NONE")
+  FRAMES:#        CDROM number of sectors per track (with/without pregap?)
+  PAD:#           Sega GDROM only: whatever pad value?
+  PREGAP:#        CDROM ... maybe number of pregap sectors? (can be HUGE !!??)
+  PGTYPE:string   CDROM ... whatever type?                  (usually "MODE1"??)
+  PGSUB:string    CDROM ... whatever subchannel             (usually "RW"??)
+  POSTGAP:#       CDROM ... maybe number of pstgap sectors? (usually 0)
+  FPS:#.######    AV Video(?)-frames per second? with 6-digit fraction? (.avi?)
+  WIDTH:#         AV Width      (maybe in pixels?)
+  HEIGHT:#        AV Height     (maybe in pixels?) (with/without interlace?)
+  INTERLACED:#    AV Interlace  (maybe a flag that might be maybe 0 or 1?)
+  CHANNELS:#      AV Channels   (maybe audio mono/stereo or so?)
+  SAMPLERATE:#    AV Samplerate (maybe audio samplerate, maybe in Hertz?)
+ For SUBTYPE and PGSUB:
+  "RW"      60h-byte interleaved   ;normal "cooked" 96 bytes per sector
+  "RW_RAW"  60h-byte uninterleaved ;raw uninterleaved 96 bytes per sector
+  "NONE"    0-byte                 ;no subcode data stored (default)
+  (unknown how RAW and RW_RAW differ, one format does probably store 8 bits
+  for 8 subchannels per byte... but unknown which format is doing so?)
+ For TYPE and PGTYPE (and CHCD numeric type 0..7):
+  "MODE1/2048" or "MODE1"                   CHCD=0  800h-byte ;\Data Mode1
+  "MODE1/2352" or "MODE1_RAW"               CHCD=1  930h-byte ;/
+  "MODE2/2336" or "MODE2"          ;\dupe?  CHCD=2  920h-byte ;\
+  "MODE2/2336" or "MODE2_FORM_MIX" ;/       CHCD=5  920h-byte ;
+  "MODE2/2048" or "MODE2_FORM1"             CHCD=3  800h-byte ; Data Mode2
+  "MODE2/2324" or "MODE2_FORM2"             CHCD=4  914h-byte ;
+  "MODE2/2352" or "MODE2_RAW" or "CDI/2352" CHCD=6  930h-byte ;/
+  "AUDIO" (stored as big-endian samples!!!) CHCD=7  930h-byte ;-Audio CD-DA
+
+Caution:
+AUDIO sectors are conventionally stored as 16bit little-endian samples, but CHD +is storing them in big-endian (unlike formats like CUE/BIN).
+Caution:
+Older CHDMAN versions (eg. v0.146) did use nonsense "PGTYPE:MODE1" for all +tracks (including audio tracks), later versions (eg. v0.246) did fix that +issue; those newer files include a "V" prefix to indicate that the entry +contains "valid" info (eg. "PGTYPE:VAUDIO") (except, Track 1 keeps using +"PGTYPE:MODE1" without "V" and it's "MODE1" even on MODE2 discs).

+
CHCD Metadata (94Ch bytes, plus 10h-byte metadata header)
+
  000h 4     Number of tracks (N) (1..99)
+  004h N*18h Track entries
+  ...  ..    Zeropadding to 94Ch-byte size (when less than 99 tracks)
+ Track entries:
+  000h 4     Track Type       (0..7, CHCD=# in above table) (eg. 6=MODE2_RAW)
+  004h 4     Subchannel Type  (0=RW, 1=RW_RAW, 2=None)
+  008h 4     Sector Size      (800h, 914h, 920h or 930h)
+  00Ch 4     Subchannel Size  (0 or 60h)
+  010h 4     Number of Frames (aka number of sectors)
+  014h 4     Padding Frames   (0..3) (to make Total Frames a multiple of 4)
+
+

CHD Maps

+

The Maps contain info (offset, size, compression method, etc.) for the separate +compression blocks.

+
V1/V2 map format (64bit entries with 44bit+20bit):
+

  44bit     Offset to compressed data
+  20bit     Size of compressed data (or uncompressed data when size=hunksize)
+
+Unknown if offset is in upper or lower 44bit.

+
V3/V4 map entries (per hunk):
+

  000h 8    Offset to compressed data  (64bit big-endian)
+  008h 4    CRC32 on uncompressed data (32bit big-endian)
+  00Ch 3    Size of compressed data    (24bit mixed-endian: Mid, Low, High)
+  00Fh 1    Flags, indicating compression info (=whut? maybe below V34 stuff?)
+
+V34_MAP_ENTRY_FLAG_TYPE_MASK = 0x0f; // what type of hunk
+V34_MAP_ENTRY_FLAG_NO_CRC = 0x10; // no CRC is present (which CRC?)
+V3-V4 entry types
+
  V34_MAP_ENTRY_TYPE_INVALID        = 0  invalid type
+  V34_MAP_ENTRY_TYPE_COMPRESSED     = 1  standard compression
+  V34_MAP_ENTRY_TYPE_UNCOMPRESSED   = 2  uncompressed data
+  V34_MAP_ENTRY_TYPE_MINI           = 3  mini: use offset as raw data
+  V34_MAP_ENTRY_TYPE_SELF_HUNK      = 4  same as another hunk in this file
+  V34_MAP_ENTRY_TYPE_PARENT_HUNK    = 5  same as a hunk in the parent file
+  V34_MAP_ENTRY_TYPE_2ND_COMPRESSED = 6  compressed with secondary algorithm
+
+Note: Secondary algorithm is NEVER used (it seems to have been intended for +FLAC CDDA, but that was apparently never actually implemented in V3/V4).
+Blurp: Secondary algorithm is "usually FLAC CDDA" (unknown where that is +defined, and if one could also select other algorithms) ("usually FLAC" might +mean "always FLAC" for cdroms, and "not used" elsewhere).

+
V5 Map Formats
+
 V5 uncompressed map format (when [filehdr+10h]=00000000h):
+  000h N*4  Hunk List (32bit offsets: Offset/BytesPerHunk) (usually 1,2,3..)
+ V5 compressed map format (when [filehdr+10h]<>00000000h):
+  000h 4    Length of compressed map
+  004h 6    Offset of first block (48bit)     (E4h, after meta)
+  00Ah 2    CRC16 on decompressed map entries
+  00Ch 1    bits used to encode complength
+  00Dh 1    bits used to encode self-refs
+  00Eh 1    bits used to encode parent unit refs
+  00Fh 1    Reserved for future use (probably zero)
+  010h ..   Compressed Map entries (bitstream with Huffman/RLE encoding)
+ The decompressed map entries should look as shown below (one could store them
+ differently, eg. as 32bit little endian values; however, they must be stored
+ exactly as shown below when computing the CRC16 on decompressed map entries):
+  000h 1    Compression type (0..3=Codec0..3, 4=Uncompressed, 5=Self, 6=Parent)
+  001h 3    Compressed length (24bit big-endian)
+  004h 6    Offset to compressed data (48bit big-endian)
+  00Ah 2    CRC16 on decompressed data (big-endian)
+ V5 compression codecs:
+  0,0,0,0 = CHD_CODEC_NONE        ;-unused (when using less than 4 codecs)
+  "zlib" = CHD_CODEC_ZLIB         ;\
+  "lzma" = CHD_CODEC_LZMA         ; general codecs
+  "huff" = CHD_CODEC_HUFFMAN      ;
+  "flac" = CHD_CODEC_FLAC         ;/
+  "cdzl" = CHD_CODEC_CD_ZLIB      ;\
+  "cdlz" = CHD_CODEC_CD_LZMA      ; general codecs with CD frontend
+  "cdfl" = CHD_CODEC_CD_FLAC      ;/
+  "avhu" = CHD_CODEC_AVHUFF       ;-A/V codecs
+
+
Uncompressed V5 Map loading (when [filehdr+10h]=00000000h)
+
  readfile(src,NumberOfHunks*4)                            ;\
+  i=0                                                      ; load uncomoressed
+  while i<NumberOfHunks                                    ; map (needed only
+    ofs=bigendian32bit[src+i*4]*BytesPerHunk               ; for uncompressed
+    byte[map+i*0Ch+00h]=04h             ;typ=Uncompressed  ; files, which can
+    bigendian24bit[map+i*0Ch+01h]=BytesPerHunk             ; be created via
+    bigendian48bit[map+i*0Ch+04h]=ofs                      ; chdman commandline
+    bigendian16bit[map+i*0Ch+0Ah]=none  ;no crc            ; options)
+    ofs=ofs+len, i=i+1                                     ;/
+
+
Compressed V5 Map loading (when [filehdr+10h]\<>00000000h)
+

  readfile(hdr,10h)                                        ;\read map hdr and
+  readfile(src,bigendian32bit[hdr+0])                      ; compressed map
+  InitBitstream(src,BigEndianMsbFirst)                     ;/
+  i=0                                                      ;\
+  while i<10h                                              ;
+    val=GetBits(4), num=1                                  ;
+    if val=01h then                                        ; read huffman tree
+      val=GetBits(4)                                       ;
+      if val<>01h then num=GetBits(4)+3                    ;
+    for j=1 to num, codesizes[i]=val, i=i+1                ;
+  nonlzh_explode_tree(codetree,codesizes,10h)              ;/
+  i=0, typ=0, num=0                                        ;\
+  while i<NumberOfHunks                                    ;
+    if num=0                                               ; load huffman coded
+      x=GetHuffCode(codetree)                              ; map type values
+      if x=07h then      ;COMPRESSION_RLE_SMALL            ;
+        num=GetHuffCode(codetree)+03h                      ;
+      elseif x=08h then  ;COMPRESSION_RLE_LARGE            ;
+        num=GetHuffCode(codetree)*10h                      ;
+        num=GetHuffCode(codetree)+num+13h                  ;
+      else typ=x, num=1                                    ;
+    byte[map+i*0Ch+0]=typ, i=i+1, num=num-1                ;/
+  i=0, s=0, p=0             ;index,self,parent             ;\
+  o=bigendian48bit[hdr+4]   ;offset                        ; load other
+  while i<NumberOfHunks                                    ; map items
+    typ=byte[map+i*0Ch+00h], ofs=o, len=0, crc=0           ;
+    if typ<04h then len=GetBits([hdr+0Ch]), crc=GetBits(16);  ;Method 0..3
+    elseif typ=04h then len=BytesPerHunk, crc=GetBits(16)  ;  ;Uncompressed
+    elseif typ=05h then s=GetBits([hdr+0Dh]), ofs=s        ;  ;New Self
+    elseif typ=06h then p=GetBits([hdr+0Eh]), ofs=p        ;  ;New Parent
+    elseif typ=09h then typ=05h, ofs=s                     ;  ;Old Self
+    elseif typ=0Ah then typ=05h, s=s+1, ofs=s              ;  ;Old Self+1
+    elseif typ=0Bh then typ=06h, p=i*SectorsPerHunk, ofs=p ;  ;Direct Parent
+    elseif typ=0Ch then typ=06h, ofs=p                     ;  ;Old Parent
+    elseif typ=0Dh then typ=06h, p=p+SectorsPerHunk, ofs=p ;  ;Old Parent+1
+    else goto error                                        ;
+    byte[map+i*0Ch+00h]=typ                                ;
+    bigendian24bit[map+i*0Ch+01h]=len                      ;
+    bigendian48bit[map+i*0Ch+04h]=ofs                      ;
+    bigendian16bit[map+i*0Ch+0Ah]=crc                      ;
+    o=o+len, i=i+1                                         ;/
+  if bigendian16bit[hdr+0Ah]<>noncrc16(map,i*0Ch) then error ;-final crc check
+
+noncrc16: Uses the same polynomial as for CDROM subchannels, but with initial +value FFFFh (instead 0) and with final value left un-inverted (instead of +inverting it).
+nonlzh_explode_tree: Uses the same concept as for LZH/ARJ huffman trees (it's +storing only the number of bits per each codes, and the codes are then +automatically assigned). But CHD is doing that backwards: It's starting with +the biggest codes (instead of smallest codes). For example, if you have three +codes with size 1, 2, 2. The traditional standard assignment would be 0, 10, 11. +But CHD is instead assigning them as 00, 01, 1.

+

CHD Compression

+
Compression V1-V4 format 0 (uncompressed)
+
Compression V5 0,0,0,0 (uncompressed)
+

  000h ..   Uncompressed data
+
+Uncompressed format can be selected in CHD Map entries (per hunk), and in CHD +file header (per whole file).

+
Compression V1-V4 format 1 (zlib) (Generic Deflate)
+
Compression V1-V4 format 2 (zlib+) (Generic Deflate)
+
Compression V5 "zlib" (Generic Deflate)
+
  000h ..   Deflate-compressed data
+
+
Compression V5 "lzma" (Generic LZMA)
+
  000h ..   LZMA-compressed data (with lc=3, lp=0, pb=2) (without EOS end code)
+
+
Compression V5 "flac" (Generic FLAC)
+
  000h 1    Output format for 16bit samples ("L"=Little-endian, "B"=Big-endian)
+  001h ..   FLAC-compressed data frame(s)
+
+
Compression V5 "huff" (Generic Huffman)
+
  000h ..   Huffman-compressed data (small tree, large tree, plus data)
+
+
Compression V5 "cdzl" (CDROM Deflate+Delate)
+
  000h ..   ECC Flags, (SectorsPerHunk+7)/8 bytes ;little-endian, bit0=1st flag
+  ...  2/3  Size of compressed Data part (SIZ)    ;big-endian, 16bit or 24bit
+  ...  SIZ  Deflate compressed Data part          ;uncompressed=930h*N bytes
+  ...  ..   Deflate compressed Subchannel part    ;uncompressed=60h*N bytes
+
+
Compression V5 "cdlz" (CDROM LZMA+Deflate)
+
  000h ..   ECC Flags, (SectorsPerHunk+7)/8 bytes ;little-endian, bit0=1st flag
+  ...  2/3  Size of compressed Data part (SIZ)    ;big-endian, 16bit or 24bit
+  ...  SIZ  LZMA compressed Data part             ;uncompressed=930h*N bytes
+  ...  ..   Deflate compressed Subchannel part    ;uncompressed=60h*N bytes
+
+
Compression V5 "cdfl" (CDROM FLAC+Deflate)
+
  000h ..   FLAC-compressed Data Frame(s)         ;uncompressed=930h*N bytes
+  ...  ..   Deflate compressed Subchannel part    ;uncompressed=60h*N bytes
+
+
Compression V5 "avhu" (A/V mixup with Huffman and FLAC or so)
+

This isn't used on CDROMs and details are unknown/untested. It does reportedly +exist in different versions, and does combine different compression methods for +audio and video data.

+
Compression V4 format 3 (AV)
+

Unknown, maybe same/similar as "avhu".

+
Compression V3-V4 secondary compression method (FLAC CDDA)
+

CHD source code claims that V3-V4 maps support "FLAC CDDA", but it doesn't +actually seem to support that (audio discs compressed with chdman v0.145 are +merely using Deflate).

+

CHD Compression for CDROMs

+
CDROM "cdzl" and "cdlz"
+

If the sector's ECC flag is set:
+

  Fix the 0Ch-byte Sync mark at [000h..00Bh]
+  Fix the 114h-byte ECC data at [81Ch..92Fh] in relation to Mode at [00Fh]
+  Fixing just means to overwrite those values (there's no XOR-filter or so).
+  CHD doesn't filter EDC values, MM:SS:FF:Mode Sector headers, nor  Subheaders.
+
+The Size entry is 16bit (when N*990h\<10000h) or 24bit (when +N*990h>=10000h), the size entry has no real purpose, however, it may be +useful for:
+
  decompressing the subchannel part without decompressing the whole data part,
+  and for using libraries that don't return the end of the compressed data part
+

+
CDROM "cdfl"
+

There are no ECC flags (since Audio sectors don't have ECC).
+There is no size entry (one must decompress the whole FLAC part to find the +begin of the Subchannel part).
+The FLAC output is always stored in BIG-ENDIAN format (because CHD likes to use +big-endian for audio sectors, unlike formats like CUE/BIN).

+
CDROM Subchannel data
+

The Data part and Subchannel part must be interleaved after decompression (to +form 990h-byte sectors with 930h+60h bytes). The CHD map's CRC is then computed +on that interleaved data.
+Most CHD files use metadata SUBTYPE:NONE which means that the 60h-byte +subchannel data is simply zerofilled and one must replace it by default +Index/Position values (AFTER the above CRC check). The CHD metadata lacks +accurate info about Index values; the PREGAP part is supposedly meant to have +Index=0 and the remaining sectors Index=1).
+Although CHD files can contain subchannel data, CHDMAN has very limited support +for creating such files (the most practical way seems to be to convert +CCD/IMG/SUB to TOC/BIN and then convert that to CHD format).

+

CHD CDROM Sector Sizes

+

Decompressed CHD CDROM Sectors are always 990h bytes tall (930h+60h). However, +the Metadata TYPE/SUBTYPE entries may specify smaller sizes (corresponding to +the format of the original TOC/BIN or CUE/BIN image). CHD does arrange that +data as so:
+

  000h  Sector Data                    (800h, 914h, 920h or 930h bytes)
+  ...   Subchannel Data                (0 or 60h bytes)
+  ...   Zeropadding to 990h-byte size  (0..190h bytes)
+
+That is somewhat okay for V3/V4 files, but involves two design mistakes that +conflict with the V5 format:
+
  - The ECC-Filter works only for 930h-byte sectors (920h does also contain
+    ECC, but CHD can't filter that, resulting in very bad compression ratio)
+  - The last 60h-byte are supposed to be Deflate-compressed Subchannel Data
+    (but 800h..920h+60h sectors actually contain Zeropadding in that location)
+
+Note: The CHD Map CRC checks are done on the above arrangement (including +zeropadding, and any prior ECC-unfiltering).
+After the CRC check, one most relocate the Sector/Subchannel parts to their +actual locations (and replace zeropadding by actual Sync marks, header, +sub-header, ECC/EDC, and Subchannel data as needed).

+

CHD Compression Methods

+
Deflate
+

This is raw Deflate (despite of being called "zlib" in chd headers and source +code; there aren't any ZLIB headers nor Adler checksums). V1-V4 does +distinguish between "zlib" and "zlib+" (both are using normal Deflate) (V3/V4 +are always using "zlib+") (the "+" does probably just mean that file was +compressed with improved compression ratio).
+CDROM File Compression ZIP/GZIP/ZLIB (Inflate/Deflate)

+
LZMA
+

This contains a raw LZMA bitstream (without .lzma or .lz headers). The LZMA +bitstream starts with 8 ignored bits, if Normalization occurs after last +compression code, then it will also end with 8 ignored bits (those ignored bits +aren't CHD-specific, they do also occur in other LZMA-based formats).
+CDROM File Compression LZMA

+
FLAC
+

The data consists of raw FLAC Frames (without FLAC file header or FLAC metadata +blocks), the format is always signed 16bit/stereo (NumChannels=2 +SampleDepth=16), the sample rate is don't care for compression purposes (the +FLAC Frame headers have it set to 09h=44100Hz).
+Each FLAC Frame starts with a 14bit Sync mark (3FFEh), and ends with 16bit CRC. +There are usually several FLAC frames per CHD hunk (one must decompress all +FLAC frames, until reaching the decompressed hunk size).
+Each FLAC Frame contains Left samples, followed by Right samples. After +decompression, CHD does store them in interleaved form (L,R,L,R,etc.)
+CDROM File Compression FLAC audio

+
Huffman
+

This is using some custom CHD-specific Huffman compression.
+

 decompress_chd_huffman_hunk:
+  InitBitstream(src,BigEndianMsbFirst)                               ;-init
+  codesizes[0..17h]=00h                     ;initially all unused    ;\
+  codesizes[0]=GetBits(3)                   ;get first entry         ;
+  i=GetBits(3)+1                            ;leading unused entries  ; small
+ @@small_tree_lop:                                                   ; tree
+  val=GetBits(3)                                                     ;
+  if val=07h then goto @@small_tree_done    ;trailing unused entries ;
+  codesizes[i]=val, i=i+1                   ;apply entry             ;
+  if i<18h then goto @@small_tree_lop                                ;
+ @@small_tree_done:                                                  ;
+  nonlzh_explode_tree(codetree,codesizes,18h)                        ;/
+  data=00h                                                           ;\
+ @@large_tree_lop:                                                   ;
+  val=GetHuffCode(codetree)-1               ;using small tree codes  ; large
+  if val>=00h then                                                   ; tree
+    data=val, codesizes[i]=data, i=i+1                               ;
+  else                                                               ;
+    len=GetBits(3)+2                                                 ;
+    if len=7+2 then len=GetBits(8)+7+2                               ;
+    for n=1 to len, codesizes[i]=datal, i=i+1                        ;
+  if i<100h then goto @@large_tree_lop                               ;
+  nonlzh_explode_tree(codetree,codesizes,100h)                       ;/
+  for n=1 to decompressed_size                                       ;\data
+    [dst]=GetHuffCode(codetree), dst=dst+1  ;using large tree codes  ;/
+

+

CHD Notes

+
Track/Hunk Padding and Missing Index0 sectors
+

A normal CDROM contains a series of sectors. The CHD format is violating that +in several ways: It's removing Index0/Pregap sectors, and it's instead +inserting dummy/padding sectors between tracks.
+

  Track        <---- Track1---------> <---- Track2---------> <--End-->
+  Section      Index0 IndexN TrackPad Index0 IndexN TrackPad HunkPad
+  Real Disc    Yes    Yes    -        Yes    Yes    -        -
+  CHD Header   -      Yes    Yes      -      Yes    Yes      -
+  CHD Data     -      Yes    Yes      -      Yes    Yes      Yes
+
+That is, the critical parts are:
+
  Index0/pregap:  Metadata PREGAP:sectors isn't stored in compressed data
+  Track padding:  Metadata FRAMES:sectors is rounded up to N*4 sectors
+  Hunk padding:   The last hunk is additionally rounded up to hunksize
+
+Missing Index0 might be a problem if a disc contains nonzero data between +tracks (like audio discs with applause in Index0 periods).
+Track padding is total nonsense. The final hunk padding makes sense (but +confusingly that extra padding isn't included in the uncompressed size entry in +CHD header).

+
Parent references
+

Parent files are only used for writeable media like harddisks. The idea is to +store the original installation and operating system in a readonly Parent file, +and to store changes that file in a writeable Child file.
+Unknown what determines which parent belongs to which child, and if parents can +be nested with other grandparents. Anyways, Parents aren't needed for CDROMs +(except, one could theoretically store CDROM patches in child files).

+
Self references
+

This can be used to reference to another identical hunk in the same file (eg. +zerofilled sectors or other duplicated data). There are some restrictions for +CDROMs: Data sector headers contain increasing sector numbers, so there won't +be any identical sectors. However, Audio sectors can be identical (unless they +are stored with subchannel info, which does also contain increasing sector +numbers).

+
Mini
+

Mini is only used in V3/V4 maps. It does apparently store the "data" directly +in the 8-byte Map offset field.
+

  XXX Unknown what kind of "data" that is
+  (probably "normal compressed data", that happens to be 8 bytes or smaller).
+
+Mini isn't used in V5 because the compressed V5 map doesn't contain any offset +fields (and things like zerofilled sectors could be as well encoded as Self +instead of Mini).

+
CHDMAN versions
+

CHD files can (cannot) be generated with the CHDMAN.EXE tool:
+

  chdman hdr meta  features/requirements/bugs/quirks/failures...
+  v0.58  -   -     -   ;-CHD didn't exist in older MAME versions
+  v0.59  V1  -     -   ;\
+  v0.71  V2  -     -   ; supports harddisk CHD files only, not cdrom
+  v0.78  V3  xxxx  -   ;/
+  v0.81  V3  CHCD  bad ;-crashes after creating the CHD file header
+  v0.90  V3  CHCD  ok  ;\
+  v0.110 V3  CHCD  ok  ; requires cdrdao TOC/BIN as input (CUE/BIN does crash)
+  v0.111 V3  CHTR  ok  ; (warning: BIN filenames may not contain space chars!)
+  v0.112 V3  CHTR  bug ;    ;\works, but compression is somewhat bugged (files
+  v0.118 V3  CHTR  bug ;    ;/are BIGGER instead of SMALLER after compression)
+  v0.120 V3  CHTR  ok  ;
+  v0.130 V3  CHTR  ok  ;
+  v0.131 V4  CHTR  ok  ;/
+  v0.140 V4  CHT2  ok  ;\requires "unicows.dll" (=Quintessential Media Player)
+  v0.145 V4  CHT2  ok  ;/
+  v0.146 V5  CHT2  bad ;\says output file already exists (crashes on -f force)
+  v0.154 V5  CHT2  bad ;/
+  v0.155 V5  CHT2  bad ;\crashes instantly (shortly before CreateEventW)
+  v0.160 V5  CHT2  bad ;/
+  v0.161 V5  CHT2  bad ;\says output file already exists (crashes on -f force)
+  v0.169 V5  CHT2  bad ;/
+  v0.170 V5  CHT2  bad ;\missing KERNEL32.DLL:AddVectoredExceptionHandler
+  v0.217 V5  CHT2  bad ;/
+  v0.218 V5  CHT2  bad ;\requires "newer version of windows" (64bit)
+  v0.247 V5  CHT2  bad ;/
+
+Note: The compression tool was originally called HDCOMP (V1/V2), and later +renamed to CHDMAN (V3/V4/V5).

+
References
+

CHD source code (see files cdrom.*, chd*.*, etc):

+

https://github.com/mamedev/mame/tree/master/src/lib/util

+

CHDMAN commandline tool for generating chd files:

+

https://github.com/mamedev/mame/blob/master/src/tools/chdman.cpp

+

CHD decompression clone with useful comments:

+

https://github.com/SnowflakePowered/chd-rs/tree/master/chd-rs/src

+

CHD format reverse-engineering thread:

+

http://www.psxdev.net/forum/viewtopic.php?f=70&t=3980

+

CDROM Disk Images Other Formats

+

.ISO - A raw ISO9660 image (can contain a single data track only)

+

Contains raw sectors without any sub-channel information (and thus it's +restricted to the ISO filesystem region only, and cannot contain extras like +additional audio tracks or additional sessions). The image should start at +00:02:00 (although I wouldn't be surprised if some \<might> start at +00:00:00 or so). Obviously, all sectors must have the same size, either 800h or +930h bytes (if the image contains only Mode1 or Mode2/Form1 sectors then 800h +bytes would usually enough; if it contains one or more Mode2/Form2 sectors then +all sectors should be 930h bytes).
+Handling .ISO files does thus require to detect the image's sector size, and to +search the sector that contains the first ISO Volume Descriptor. In case of +800h byte sectors it may be additionally required to detect if it is a Mode1 or +Mode2/Form1 image; for PSX images (and any CD-XA images) it'd be Mode2.

+

.C2D

+

Something. Can contain compressed or uncompressed CDROM-images. Fileformat and +compression ratio are unknown. Also unknown if it allows random-access.
+Some info on (uncompressed) .C2D files can be found in libmirage source code.

+

.ISZ - compressed ISO file with 800h-byte sectors (UltraISO)

+

This contains a compressed ISO filesystem, without supporting any CD-specific +features like Tracks, FORM2 sectors, or CD-DA Audio.

+

http://www.ezbsystems.com/isz/iszspec.txt

+

The format might be suitable for PC CDROMs, but it's useless for PSX CDROMs.

+

.MDX

+

Reportedly a "compressed" MDS/MDF file, supported by Daemon Tools.
+Other info says that MDX is just MDS/MDF merged into a single file, without +mentioning any kind of "compression" support.
+Basically... Daemon Tools is Adware that can merge MDS+MDF into one MDX file... +with additional Advertising?
+However, the MDS+MDF format is completely different than MDX format:
+

  000h 10h  ID ("MEDIA DESCRIPTOR") (weirdly, same as in Alcohol .MDS)
+  010h 2    Unknown (02h,01h) (maybe version or so)
+  012h 1Ah  Copyright string (A9h," 2000-2015 Disc Soft Ltd.")
+  02Ch 4    Unknown (FFFFFFFFh)
+  030h 4    Offset to Unknown Footer (322040h) (N*800h+40h)
+  034h 4    Unknown (0)
+  038h 4    Unknown (B0h)
+  03Ch 4    Unknown (0)
+  040h N*800h  Sector Data
+  322040h 270h Unknown (Advertising IDs? CRCs? Encrypted CUE sheet? Garbage?)
+

+

.CU2/.BIN

+

Custom format used by PSIO (an SD-card based CDROM-drive emulator connected to +PSX expansion port). The .CU2 file is somewhat intended to be smaller and +easier to parse than normal .CUE files, the drawback is that it's kinda +non-standard, and doesn't support INDEX and ADSR information. A sample .CUE +file looks as so:
+

  ntracks 3
+  size      39:33:17
+  data1     00:02:00
+  track02   31:36:46
+  track03   36:03:17
+  ;(insert 2 blanks lines here, and insert 1 leading space in next line)
+  trk end 39:37:17
+
+All track numbers and MM:SS:FF values are decimal. The ASCII strings should be +as shown above, but they are simple ignored by the PSIO firmware (eg. using +"popcorn666" instead of "size" or "track02" should also work). The first track +should be marked "data1", but PSIO ignores that string, too (it does always +treat track 1 as data, and track 2-99 as audio; thus not supporting PSX games +with multiple data tracks). The "trk end" value should be equal to the "size" +value plus 4 seconds (purpose is unknown, PSIO does just ignore the "trk end" +value).
+CU2 creation seems to require CDROM images in "CUE/BIN redump.org format" (with +separate BIN files for each track), the CUE is then converted to a CU3 file +(which is used only temporarily), until the whole stuff is finally converted to +a CU2 file (and with all tracks in a single BIN file). Tools like RD2PSIO (aka +redump2psio) or PSIO's own SYSCON.ZIP might help on doing some of those steps +automatically.
+Alongsides, PSIO uses a "multidisc.lst" file... for games that require more +than one CDROM disc?

+

CD Image File Format (Xe - Multi System Emulator)

+

This is a rather crude file format, used only by the Xe Emulator. The files are +meant to be generated by a utility called CDR (CD Image Ripper), which, in +practice merely displays an "Unable to read TOC." error message.
+The overall file structure is, according to "Xe User's Manual":
+

  header: 200h bytes header (see below)
+  data:   990h bytes per sector (2352 Main, 96 Sub), 00:00:00->Lead Out
+
+The header "definition" from the "Xe User's Manual" is as unclear as this:
+
  000h   00
+  001h   00
+  002h   First Track
+  003h   Last Track
+  004h   Track 1 (ADR << 4) | CTRL              ;\
+  005h   Track 1 Start Minutes                  ; Track 1
+  006h   Track 1 Start Seconds                  ;
+  007h   Track 1 Start Frames                   ;/
+  ...     ...                                   ;-Probably Further Tracks (?)
+  n+0    Last Track Start Minutes               ;\
+  n+1    Last Track Start Seconds               ; Last Track
+  n+2    Last Track Start Frames                ;
+  n+3    Last Track (ADR << 4) | CTRL           ;/
+  n+4    Lead-Out Track Start Minutes           ;\
+  n+5    Lead-Out Track Start Seconds           ; Lead-Out
+  n+6    Lead-Out Track Start Frames            ;
+  n+7    Lead-Out Track (ADR << 4) | CTRL       ;/
+  ...    00
+  1FFh   00
+
+Unknown if MM:SS:FF values and/or First+Last Track numbers are BCD or non-BCD.
+Unknown if Last track is separately defined even if there is only ONE track.
+Unknown if Track 2 and up include ADR/Control (and if yes: where?).
+Unknown if ADR/Control is really meant to be \<before> MM:SS:FF on Track +1.
+Unknown if ADR/Control is really meant to be \<after> MM:SS:FF on +Last+Lead-Out.
+Unknown if this format does have a file extension (if yes: which?).
+Unknown if subchannel data is meant to be interleaved or not.
+The format supports only around max 62 tracks (in case each track is 4 bytes).
+There is no support for "special" features like multi-sessions, cd-text.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cdrominternalinfoonpsxcdromcontroller/index.html b/cdrominternalinfoonpsxcdromcontroller/index.html new file mode 100644 index 0000000..91d192d --- /dev/null +++ b/cdrominternalinfoonpsxcdromcontroller/index.html @@ -0,0 +1,5705 @@ + + + + + + + + + + + + + + + + + + + + + + CDROM Internal Info on PSX CDROM Controller - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

CDROM Internal Info on PSX CDROM Controller

+

PSX software can access the CDROM via Port 1F801800h..1F801803h (as described +in the previous chapters). The following chapters describe the inner workings +of the PSX CDROM controller - this information is here for curiosity only - +normally PSX software cannot gain control of those lower-level stuff (although +some low level registers can be manipulated via Test commands, but that will +usually conflict with normal operation).

+

Motorola MC68HC05 (8bit single-chip CPU)

+

The Playstation CDROM drive is controlled by a MC68HC05 8bit CPU with on-chip +I/O ports and on-chip BIOS ROM. There is no way to reprogram that BIOS, nor to +tweak it to execute custom code in RAM.
+CDROM Internal HC05 Instruction Set
+CDROM Internal HC05 On-Chip I/O Ports
+CDROM Internal HC05 I/O Port Usage in PSX
+CDROM Internal HC05 Motorola Selftest Mode
+The PSX can read HC05 I/O Ports and RAM via Test Commands:
+CDROM - Test Commands - Read HC05 SUB-CPU RAM and I/O Ports

+

Decoder/FIFO (CXD1199BQ or CXD1815Q)

+

This chip handles error correction and ADPCM decoding, and acts as some sort of +FIFO interface between main/sub CPUs and incoming cdrom sector data. On the +MIPS Main CPU it is controlled via Port 1F801800h..1F801803h.
+CDROM Controller I/O Ports
+On the HC05 Sub CPU it is controlled via Port A (data in/out), Port E +(address/index), and Port D (read/write/select signals); the HC05 doesn't have +external address/data bus, so one must manually access the CXD1815Q via those +ports.
+CDROM Internal CXD1815Q Sub-CPU Configuration Registers
+CDROM Internal CXD1815Q Sub-CPU Sector Status Registers
+CDROM Internal CXD1815Q Sub-CPU Address Registers
+CDROM Internal CXD1815Q Sub-CPU Misc Registers
+The PSX can read/write the Decoder I/O Ports and SRAM via Test commands:
+CDROM - Test Commands - Read/Write Decoder RAM and I/O Ports
+The sector buffer used in the PSX is 32Kx8 SRAM. Old PU-7 boards are using +CXD1199BQ chips, later boards are using CXD1815Q, and even later boards have +the stuff intergrated in the SPU. Note: The CXD1199BQ/CXD1815Q are about 99% +same as described in CXD1199AQ datasheet.

+

Signal Processor and Servo Amplifier

+

Older PSX mainboards are using two separate chips:
+CDROM Internal Commands CX(0x..3x) - CXA1782BR Servo Amplifier
+CDROM Internal Commands CX(4x..Ex) - CXD2510Q Signal Processor
+Later PSX mainboards have the above intergrated in a single chip, with some +extended features:
+CDROM Internal Commands CX(0x..Ex) - CXD2545Q Servo/Signal Combo
+Later version is CXD1817R (Servo/Signal/Decoder Combo).
+Even later PSX mainboards have it integrated in the Sound Chip: CXD2938Q +(SPU+CDROM) with some changed bits and New SCEx transfer:
+CDROM Internal Commands CX(0x..Ex) - CXD2938Q Servo/Signal/SPU Combo
+Finally, PM-41(2) boards are using a CXD2941R chip (SPU+CDROM+SPU_RAM), unknown +if/how far the CDROM part of that chip differs from CXD2938Q.
+Some general notes:
+CDROM Internal Commands CX(xx) - Notes
+CDROM Internal Commands CX(xx) - Summary of Used CX(xx) Commands
+The PSX can manipulate the CX(..) registers via some test commands:
+CDROM - Test Commands - Test Drive Mechanics
+Note: Datasheets for CXD2510Q/CXA1782BR/CXD2545Q do exist.

+

CDROM Pinouts

+

Pinouts - DRV Pinouts
+Pinouts - HC05 Pinouts

+

CDROM Internal HC05 Instruction Set

+

ALU, Load/Store, Jump/Call

+

  Opcode      Clk HINZC Name Syntax
+  x6 ...      2-5 --NZ- LDA  MOV  A,<op>      ;A=op
+  xE ...      2-5 --NZ- LDX  MOV  X,<op>      ;X=op
+  x7 ...      4-6 --NZ- STA  MOV  <op>,A      ;op=A
+  xF ...      4-6 --NZ- STX  MOV  <op>,X      ;op=X
+  xC ...      2-4 ----- JMP  JMP  <op>        ;PC=op
+  xD ...      5-7 ----- JSR  CALL <op>        ;[SP]=PC, PC=op
+  xB ...      2-5 H-NZC ADD  ADD  A,<op>      ;A=A+op
+  x9 ...      2-5 H-NZC ADC  ADC  A,<op>      ;A=A+op+C
+  x0 ...      2-5 --NZC SUB  SUB  A,<op>      ;A=A-op
+  x2 ...      2-5 --NZC SBC  SBC  A,<op>      ;A=A-op-C
+  x4 ...      2-5 --NZ- AND  AND  A,<op>      ;A=A AND op
+  xA ...      2-5 --NZ- ORA  OR   A,<op>      ;A=A OR op
+  x8 ...      2-5 --NZ- EOR  XOR  A,<op>      ;A=A XOR op
+  x1 ...      2-5 --NZC CMP  CMP  A,<op>      ;A-op
+  x3 ...      2-5 --NZC CPX  CMP  X,<op>      ;X-op
+  x5 ...      2-5 --NZ- BIT  TEST A,<op>      ;A AND op
+  A7,AF,AC = Reserved (no STA/STX/JMP with immediate operand)
+
+Operands can be...
+
  Opcode      Clk ALU/LDA/LDX      Clk STA/STX          Clk JMP/CALL
+  Ax nn         2 cmd r,nn           - N/A              -/6 call relative (BSR)
+  Bx nn         3 cmd r,[nn]         4 mov [nn],r       2/5 cmd nn
+  Cx nn mm      4 cmd r,[nnmm]       5 mov [nnmm],r     3/6 cmd nnmm
+  Dx nn mm      5 cmd r,[X+nnmm]     6 mov [X+nnmm],r   4/7 cmd X+nnmm
+  Ex nn         4 cmd r,[X+nn]       5 mov [X+nn],r     3/6 cmd X+nn
+  Fx            3 cmd r,[X]          4 mov [X],r        2/5 cmd X
+

+

Read-Modify-Write

+

  Opcode      Clk HINZC Name Syntax
+  xC ...      3-6 --NZ- INC  INC op      ;increment   ;op=op+1
+  xA ...      3-6 --NZ- DEC  DEC op      ;decrement   ;op=op-1
+  xF ...      3-6 --01- CLR  ??  op,00h  ;clear       ;op=op AND 00h
+  x3 ...      3-6 --NZ1 COM  NOT op      ;complement  ;op=op XOR FFh
+  x0 ...      3-6 --NZC NEG  NEG op      ;negate      ;op=00h-op
+  x9 ...      3-6 --NZC ROL  RCL op      ;rotate left through carry
+  x6 ...      3-6 --NZC ROR  RCR op      ;rotate right through carry
+  x8 ...      3-6 --NZC LSL  SHL op      ;shift left logical
+  x4 ...      3-6 --0ZC LSR  SHR op      ;shift right logical
+  x7 ...      3-6 --NZC ASR  SAR op      ;shift right arithmetic
+  xD ...      3-5 --NZ- TST  TEST op,FFh ;test for negative or zero (AND FFh?)
+  x1,x2,x5,xB,xE = Reserved (except for: 42 = MUL)
+
+Operands can be...
+
  Opcode      Clk RMW          Clk CLR                Clk TST
+  3x nn         5 cmd [nn]       5 MOV [nn],00h         4 TEST [nn],0FFh
+  4x            3 cmd A          3 MOV A,00h,slow       3 TEST A,0FFh,slow
+  5x            3 cmd X          3 MOV X,00h,slow       3 TEST X,0FFh
+  6x nn         6 cmd [X+nn]     6 MOV [X+nn],00h       5 TEST [X+nn],0FFh
+  7x            5 cmd [X]        5 MOV [X],00h          4 TEST [X],0FFh
+
+CLR includes a dummy-read-cycle, whilst TST does omit the dummy-write cycle.
+The ",slow" RMW opcodes are smaller, but slower than equivalent ALU opcodes.

+

Bit Manipulation and Bit Test with Relative Jump (to $+3+/-dd)

+
  Opcode      Clk HINZC Name  Syntax
+  00h+i*2 nn dd 5 ----C BRSET JNZ [nn].i,dest  ;C=[nn].i, branch if set
+  01h+i*2 nn dd 5 ----C BRCLR JZ  [nn].i,dest  ;C=[nn].i, branch if clear
+  10h+i*2 nn    5 ----- BSET  SET [nn].i       ;set [nn].i
+  11h+i*2 nn    5 ----- BCLR  RES [nn].i       ;clear [nn].i
+
+

Branch (Relative jump to $+2+/-nn)

+
  Opcode      Clk HINZC Name    Syntax
+  20 nn         3 ----- BRA     JR  nn      ;branch always
+  21 nn         3 ----- BRN     NUL nn      ;branch never
+  22 nn         3 ----- BHI     JA  nn      ;if C=0 and Z=0, higher        ?
+  23 nn         3 ----- BLS     JBE nn      ;if C=1 or Z=1, lower or same  ?
+  24 nn         3 ----- BCC/BHS JNC/JAE nn  ;if C=0, carry clear, higher.same
+  25 nn         3 ----- BCS/BLO JC/JB nn    ;if C=1, carry set, lower
+  26 nn         3 ----- BNE     JNZ/JNE nn  ;if Z=0, not equal / not zero
+  27 nn         3 ----- BEQ     JZ/JE nn    ;if Z=1, equal / zero
+  28 nn         3 ----- BHCC    JNH nn      ;if H=0, half-carry clear
+  29 nn         3 ----- BHCS    JH  nn      ;if H=1, half-carry set
+  2A nn         3 ----- BPL     JNS nn      ;if S=0, plus / not signed
+  2B nn         3 ----- BMI     JS  nn      ;if S=1, minus / signed
+  2C nn         3 ----- BMC     JEI nn      ;if I=0, interrupt mask clear
+  2D nn         3 ----- BMS     JDI nn      ;if I=1, interrupt mask set
+  2E nn         3 ----- BIL     JIL nn      ;if XX=LO, interrupt line low
+  2F nn         3 ----- BIH     JIH nn      ;if XX=HI, interrupt line high
+  AD nn         6 ----- BSR     CALL relative nn  ;branch to subroutine always
+
+

Control/Misc

+

  Opcode      Clk HINZC Name Syntax
+  9D            2 ----- NOP  NOP            ;no operation
+  97            2 ----- TAX  MOV X,A        ;transfer A to X
+  9F            2 ----- TXA  MOV A,X        ;transfer X to A
+  9C            2 ----- RSP  MOV SP,00FFh   ;reset stack pointer (SP=00FFh)
+  42           11 0---0 MUL  MUL X,A        ;X:A=X*A (unsigned multiply)
+  81            6 ----- RTS  RET            ;return from subroutine
+  80            9 xxxxx RTI  RETI           ;return from interrupt
+  99            2 ----1 SEC  STC            ;set carry flag
+  98            2 ----0 CLC  CLC            ;clear carry flag
+  9B            2 -1--- SEI  DI             ;set interrupt mask (disable ints)
+  9A            2 -0--- CLI  EI             ;clear interrupt mask (enable ints)
+  8E          ..2 -0--- STOP STOP           ;?
+  8F          ..2 -0--- WAIT WAIT           ;?
+  83           10 -1--- SWI  SWI            ;software interrupt ...? PC=[FFFCh]
+  <IRQ>         ? ????? Interrupt           ;?                       PC=[FFFxh]
+  <RESET>       ? ????? Reset               ;?                       PC=[FFFEh]
+  82,84..8D,90..96,9E = Reserved
+
+MUL isn't supported in original "M146805 CMOS" family (MUL is used/supported in +PSX cdrom controller).

+

Registers

+
  A   8bit  accumulator
+  X   8bit  index register
+  SP  6bit  stack pointer (range 00C0h..00FFh)
+  PC  16bit program pointer (range 0000h..FFFFh)
+  CCR 5bit  condition code register (flags) (111HINZC)
+
+

Pushed on IRQ are:

+
  SP.highest PC.lo
+             PC.hi
+             X
+             A
+  SP.lowest  Flags (CCR, 5bit condition code register) (111HINZC)
+
+

Addressing Modes

+

  nn       immediate             ;00h..FFh
+  [nn]     direct address        ;[0000h..00FFh]
+  [nnmm]   extended address      ;[0000h..FFFFh]
+  [X]      indexed, no offset    ;[0000h..00FFh]
+  [X+nn]   indexed, 8bit offset  ;[0000h..01FEh]
+  [X+nnmm] indexed, 16bit offset ;[0000h..FFFFh]
+  [nn].i   bit                   ;[0000h..00FFh].bit0..7
+  dd       relative              ;$+2..3+(-80h..+7Fh)
+
+Notes:
+
  operand "X+nn" performs an unsigned addition, and can address 0000h..01FEh.
+  16bit operands (nnmm) are encoded in BIG-ENDIAN format (same for pushed PC).
+

+

Exception Vectors

+

Exception vectors are 16bit BIG-ENDIAN values at FFF0h-FFFFh (or at FFE0h-FFEFh +when running in Motorola Bootstrap mode).
+

  Vector Prio Usage
+  FFF0h  7=lo TBI Vector (Timebase)
+  FFF2h  6    SSPI Vector (SPI bus)     (SPI1 and SPI2)
+  FFF4h  5    Timer 2 Interrupt Vector  (Timer 2 Input/Compare)
+  FFF6h  4    Timer 1 Interrupt Vector  (Timer 1 Input/Compare/Overflow)
+  FFF8h  3    KWI Vector (Key Wakeup)   (KWI0..7 pins)
+  FFFAh  2    External Interrupt Vector (/IRQ1 and /IRQ2 pins)
+  FFFCh  none Software Interrupt Vector (SWI opcode)            ;\regardless of
+  FFFEh  1=hi Reset Vector              (/RESET signal and COP) ;/CPU's "I"
+

+

Directives/Pseudos (used by a22i assembler; in no$psx utility menu)

+
  .hc05         select HC05 instruction set (default would be .mips)
+  .nocash       select nocash syntax (default would be .native opcode names)
+  db ...        define 8bit byte(s), or quoted ascii strings
+  dw ...        define 16bit word(s) in BIG ENDIAN (for HC05 exception vectors)
+  org nnnn      change origin for following opcodes
+  end           end of file
+  mov c,[nn].i  alias for "jnz [nn].i,$+3" (dummy jump & set carry=[nn].i)
+
+

CDROM Internal HC05 On-Chip I/O Ports

+

HC05 Port 3Eh - MISC - Miscellaneous Register (R/W)

+

  0    OPTM  Option Map Select (bank-switching for Port 00h..0Fh)
+  1    FOSCE Fast (Main) Oscillator Enable (0=Disable OSC, 1=Normal)
+  2-3  SYS   System Clock Select (0=OSC/2, 1=OSC/4, 2=OSC/64, 3=XOSC/2)
+  4-5  -     Not used (0)
+  6    STUP  XOSC Time Up Flag   (R)
+  7    FTUP  OSC Time Up Flag    (R)   (0=Busy, 1=Ready/Good/Stable)
+
+Note: For PSX, OSC is 4.0000MHz (PU-7/PU-8), 4.2336MHz (PU-18 and up). SysClk +is usually set to OSC/2, ie. around 2MHz.

+

HC05 Port OPTM=0:00h - PORTA - Port A Data Register (R/W)

+

HC05 Port OPTM=0:01h - PORTB - Port B Data Register (R)

+

HC05 Port OPTM=0:02h - PORTC - Port C Data Register (R/W)

+

HC05 Port OPTM=0:03h - PORTD - Port D Data Register (R/W)

+

HC05 Port OPTM=0:04h - PORTE - Port E Data Register (R/W)

+

HC05 Port OPTM=0:05h - PORTF - Port F Data Register (R) (undoc: R/W)

+

These are general purpose I/O ports (controlling external pins). Some ports are +Input-only, and some can be optionally used for special things (like IRQs, +SPI-bus, or as Timer input/output).
+

  PA.0-7  PAn   Port A Bit0..7 Input/Output            (0=Low, 1=High) (R/W)
+  PB.0-7  PBn   Port B Bit0..7 Input        /KWI0..7   (0=Low, 1=High) (R)
+  PC.0    PC0   Port C Bit0    Input/Output /SDI1 (SPI)(0=Low, 1=High) (R/W)
+  PC.1    PC1   Port C Bit1    Input/Output /SDO1 (SPI)(0=Low, 1=High) (R/W)
+  PC.2    PC2   Port C Bit2    Input/Output /SCK1 (SPI)(0=Low, 1=High) (R/W)
+  PC.3    PC3   Port C Bit3    Input/Output /TCAP (T1) (0=Low, 1=High) (R/W)
+  PC.4    PC4   Port C Bit4    Input/Output /EVI  (T2) (0=Low, 1=High) (R/W)
+  PC.5    PC5   Port C Bit5    Input/Output /EVO  (T2) (0=Low, 1=High) (R/W)
+  PC.6    PC6   Port C Bit6    Input/Output /IRQ2      (0=Low, 1=High) (R/W)
+  PC.7    PC7   Port C Bit7    Input/Output /IRQ1      (0=Low, 1=High) (R/W)
+  PD.0-7  PDn   Port D Bit0..7 Input/Output            (0=Low, 1=High) (R/W)
+  PE.0-7  PEn   Port E Bit0..7 Input/Output            (0=Low, 1=High) (R/W)
+  PF.0-7  PFn   Port F Bit0..7 Input/Undoc  A/D-input  (0=Low, 1=High) (R)(R/W)
+

+

HC05 Port OPTM=1:00h - DDRA - Port A Data Direction Register (R/W)

+

HC05 Port OPTM=1:02h - DDRC - Port C Data Direction Register (R/W)

+

HC05 Port OPTM=1:03h - DDRD - Port D Data Direction Register (R/W)

+

HC05 Port OPTM=1:04h - DDRE - Port E Data Direction Register (R/W)

+

HC05 Port OPTM=1:05h - DDRF - Port F Data Direction Register (undoc)

+

  DDRX.0-7  DDRXn Port X Data Direction Bit0..7 (0=Input, 1=Output) (R/W)
+
+Officially, there are no DDRB and DDRF registers (Port B and F are always +Inputs). Although, actually, Motorola's Bootstrap RAM \<does> manipulate +DDRF.

+

HC05 Port OPTM=1:08h - RCR1 - Resistor Control Register 1 (R/W)

+

HC05 Port OPTM=1:09h - RCR2 - Resistor Control Register 2 (R/W)

+
  RCR1.0    RAL   Port A.Bit0-3 Pullup Resistors (0=Off, 1=On)
+  RCR1.1    RAH   Port A.Bit4-7 Pullup Resistors (0=Off, 1=On)
+  RCR1.2    RBL   Port B.Bit0-3 Pullup Resistors (0=Off, 1=On)
+  RCR1.3    RBH   Port B.Bit4-7 Pullup Resistors (0=Off, 1=On)
+  RCR1.4    RGL   Port G.Bit0-3 Pullup Resistors (0=Off, 1=On) ;\
+  RCR1.5    RGH   Port G.Bit4-7 Pullup Resistors (0=Off, 1=On) ; on chips
+  RCR1.6    RHL   Port H.Bit0-3 Pullup Resistors (0=Off, 1=On) ; with Port G,H
+  RCR1.7    RHH   Port H.Bit4-7 Pullup Resistors (0=Off, 1=On) ;/
+  RCR2.0-7  RCn   Port C.Bit0-7 Pullup Resistors (0=Off, 1=On)
+
+

HC05 Port OPTM=1:0Ah - WOM1 - Open Drain Output Control Register 1 (R/W)

+

HC05 Port OPTM=1:0Bh - WOM2 - Open Drain Output Control Register 2 (R/W)

+
  WOM1.0   AWOML Port A.Bit0-3 Open Drain Mode when DDR=1 (0=No, 1=Open Drain)
+  WOM1.1   AWOMH Port A.Bit4-5 Open Drain Mode when DDR=1 (0=No, 1=Open Drain)
+  WOM1.2   GWOML Port G.Bit0-3 Open Drain Mode when DDR=1 (0=No, 1=Open Drain)
+  WOM1.3   GWOMH Port G.Bit4-5 Open Drain Mode when DDR=1 (0=No, 1=Open Drain)
+  WOM1.4   HWOML Port H.Bit0-3 Open Drain Mode when DDR=1 (0=No, 1=Open Drain)
+  WOM1.5   HWOMH Port H.Bit4-5 Open Drain Mode when DDR=1 (0=No, 1=Open Drain)
+  WOM1.6-7 -     Not used (0)
+  WOM2.0-5 CWOMn Port C.Bit0..5 Open Drain Mode when DDR=1 (0=No, 1=Open Drain)
+  WOM2.6-7 -     Not used (always both bits set)
+
+

==== Interrupts =====

+

HC05 Port OPTM=0:08h - INTCR - Interrupt Control Register (R/W)

+
  0-1  -     Not used (0)
+  2    IRQ2S IRQ2 Select Edge-Sensitive Only (0=LowLevelAndNegEdge, 1=NegEdge)
+  3    IRQ1S IRQ1 Select Edge-Sensitive Only (0=LowLevelAndNegEdge, 1=NegEdge)
+  4    KWIE  Key Wakeup Interrupt Enable (0=Disable, 1=Enable)
+  5    -     Not used (0)
+  6    IRQ2E IRQ2 Interrupt Enable (0=Disable, 1=Enable)
+  7    IRQ1E IRQ1 Interrupt Enable (0=Disable, 1=Enable)
+
+

HC05 Port OPTM=0:09h - INTSR - Interrupt Status Register (R and W)

+
  0    RKWIF Reset Key Wakeup Interrupt Flag (0=No Change, 1=Reset) (W)
+  1    -     Not used (0)
+  2    RIRQ2 Reset IRQ2 Interrupt Flag       (0=No Change, 1=Reset) (W)
+  3    RIRQ1 Reset IRQ1 Interrupt Flag       (0=No Change, 1=Reset) (W)
+  4    KWIF  Key Wakeup Interrupt Flag (PB/KWI)       (0=No, 1=IRQ) (R)
+  5    -     Not used (0)
+  6    IRQ2F IRQ2 Interrupt Flag (PC6)                (0=No, 1=IRQ) (R)
+  7    IRQ1F IRQ1 Interrupt Flag (PC7)                (0=No, 1=IRQ) (R)
+
+

HC05 Port OPTM=1:0Eh - KWIE - Key Wakeup Interrupt Enable Register (R/W)

+
  0-7  KWIEn Port B.Bit0..7 Key Wakeup Interrupt Enable (0=Disable, 1=Enable)
+
+

==== SPI Bus ====

+

HC05 Port OPTM=0:0Ah - SPCR1 - Serial Peripheral Control Register 1 (R/W)

+
  0    SPRn  SPI Clock Rate (0=ProcessorClock/2, 1=ProcessorClock/16)
+  1-3  -     Not used (0)
+  4    MSTRn SPI Master Mode Select      (0=Slave/SCK.In, 1=Master/SCK.Out)
+  5    DORDn SPI Data Transmission Order         (0=MSB First, 1=LSB First)
+  6    SPEn  SPI Enable (SPI1:PortC, SPI2:PortG) (0=Disable, 1=Enable)
+  7    SPIEn SPI Interrupt Enable (... ack HOW?) (0=Disable, 1=Enable)
+
+

HC05 Port OPTM=0:0Bh - SPSR1 - Serial Peripheral Status Register 1 (R)

+

  0-5  -     Not used (0)
+  6    DCOLn SPI Data Collision Occurred         (0=No, 1=Collision)
+  7    SPIFn SPI Transfer Complete Flag          (0=Busy, 1=Complete) (R)
+
+Note: SPSR1.7 appears to be reset after reading SPSR1 (probably same for +SPSR1.6, and maybe also same for whatever SPI IRQ signal).

+

HC05 Port OPTM=0:0Ch - SPDR1 - Serial Peripheral Data Register 1 (R/W)

+
  0-7  BITn  Data to be sent / being received
+
+

==== Time Base / Config ====

+

HC05 Port 10h - TBCR1 - Time Base Control Register 1 (R/W)

+
  0-1  T2R   Timer2 Prescaler (0=SysClk, 1=SysClk/4, 2=SysClk/32, 3=SysClk/256)
+  2-3  T3R   PWM Prescaler    (0=CLK3, 1=CLK3/2, 2=CLK3/8, 3=Timer2compare)
+  4-6  -     Not used (0)
+  7    TBCLK Time Base Clock (0=XOSC, 1=OSC/128) ;<-- write-able only ONCE
+
+

HC05 Port 11h - TBCR2 - Time Base Control Register 2 (R/W, some bits R or W)

+
  0    COPC  COP Clear 2bit COP timeout divider (0=No Change, 1=Clear) (W)
+  1    COPE  COP Enable                          ;<-- write-able only ONCE
+  2    -     Not used (0)
+  3    RTBIF Reset Time Base Interrupt Flag (0=No Change, 1=Clear TBIF) (W)
+  4-5  TBR   Time Base Interrupt Rate (0=TBCLK/128, 1=/4096, 2=/8192, 3=/16384)
+  6    TBIE  Time Base Interrupt Enable (0=Disable, 1=Enable)
+  7    TBIF  Time Base Interrupt Flag   (0=No, 1=IRQ)        (R)
+
+

HC05 Port OPTM=1:0Fh - MOSR - Mask Option Status Register (R)

+

  0-4  -     Not used (0)
+  5    XOSCR XOSC Feedback Resistor (0=None, 1=Implemented)
+  6    OSCR  OSC Feedback Resistor  (0=None, 1=Implemented)
+  7    RSTR  /RESET Pullup Resistor (0=None, 1=Implemented)
+
+Reading this register returns A0h (on PSX/PSone with 52pin chips).

+

==== Timer 1 ====

+

HC05 Port 12h - TCR - Timer 1 Control Register (R/W)

+
  0    OLVL  Output Level on TCMP pin on Compare Match? (0=Low, 1=High)
+  1    IEDG  Input Edge on TCAP pin (0=NegativeEdge, 1=PositiveEdge)
+  2-4  -     Not used (0)
+  5    TOIE  Timer Overflow Interrupt Enable (0=Disable, 1=Enable)
+  6    OC1IE Output Compare Interrupt Enable (0=Disable, 1=Enable)
+  7    ICIE  Input Capture Interrupt Enable  (0=Disable, 1=Enable)
+
+

HC05 Port 13h - TSR - Timer 1 Status Register (R)

+
  0-4  -     Not used (0)
+  5    TOF   Timer Overflow Flag (0=No, 1=Yes) (R) ;clear by Port 19h access
+  6    OC1F  Output Compare Flag (0=No, 1=Yes) (R) ;clear by Port 17h access
+  7    ICF   Input Capture Flag  (0=No, 1=Yes) (R) ;clear by Port 15h access
+
+

HC05 Port 14h - ICH - Timer 1 Input Capture High (undoc)

+

HC05 Port 15h - ICL - Timer 1 Input Capture Low (undoc)

+
  0-15 Capture Value
+
+

HC05 Port 16h - OC1H - Timer 1 Output Compare 1 High (undoc)

+

HC05 Port 17h - OC1H - Timer 1 Output Compare 1 Low (undoc)

+
  0-15 Compare Value
+
+

HC05 Port 18h - TCNTH - Timer 1 Counter 1 High (undoc)

+

HC05 Port 19h - TCNTL - Timer 1 Counter 1 Low (undoc)

+
  0-15 Counter
+
+

HC05 Port 1Ah - ACNTH - Alternate Counter High (undoc)

+

HC05 Port 1Bh - ACNTL - Alternate Counter Low (undoc)

+
  0-15 Alternate Counter (uh, what?)
+
+

==== Timer 2 ====

+

HC05 Port 1Ch - TCR2 - Timer 2 Control Register (R/W)

+
  0    OL2   Timer Output 2 Edge (0=Falling, 1=Rising)
+  1    OE2   Timer Output 2 Enable (EVO) (0=Disable, 1=Enable)
+  2    IL2   Timer Input 2 Edge/Level (0=Low/Falling, 1=High/Rising)
+  3    IM2   Timer Input 2 Mode Select for EVI (0=EventMode, 1=GatedByCLK2)
+  4    T2CLK Timer 2 Clock Select (0=CLK2 from Prescaler, 1=EXCLK from EVI)
+  5    -     Not used (0)
+  6    OC2IE Output Compare 2 Interrupt Enable    (0=Disable, 1=Enable)
+  7    TI2IE Timer Input 2 Interrupt Enable (EVI) (0=Disable, 1=Enable)
+
+

HC05 Port 1Dh - TSR2 - Timer 2 Status Register (R/W)

+
  0-1  -     Not used (0)
+  2    ROC2F Reset Output Compare 2 Interrupt Flag (0=No Change, 1=Clear) (W)
+  3    RTI2F Reset Timer Input 2 Interrupt Flag    (0=No Change, 1=Clear) (W)
+  4-5  -     Not used (0)
+  6    OC2F  Output Compare 2 Interrupt Flag    (0=No, 1=Yes) (R)
+  7    TI2F  Timer Input 2 Interrupt Flag (EVI) (0=No, 1=Yes) (R)
+
+

HC05 Port 1Eh - OC2 - Timer 2 Output Compare Register (R/W)

+
  0-7  Compare Value ("Transferred to buffer on certain events?")
+
+

HC05 Port 1Fh - TCNT2 - Timer 2 Counter Register (R) (W=Set Counter to 01h)

+
  0-7  Counter Value, incremented at T2R (set to 01h on Compare Matches)
+
+

==== Reserved ====

+

HC05 Port 3Fh - Unknown/Unused

+

Reading this port via Sony's test command returns 20h (same as openbus), but +reading it via Motorola's selftest function returns 00h (unlike openbus), so it +seems to have some unknown/undocumented function; bit5 might indicate selftest +mode, or it might reflect initialization of whatever other ports.

+

HC05 Port OPTM=0:06h..07h,0Dh..0Fh - Reserved

+

HC05 Port OPTM=1:01h,06h..07h,0Ch..0Dh - Reserved

+

HC05 Port 20h..3Dh - Reserved

+

These ports are unused/reserved. Trying to read them on a PSone does return 20h +(possibly the prefetched next opcode value from the RAM test command). Other +HC05 variants contain some extra features in these ports:
+CDROM Internal HC05 On-Chip I/O Ports - Extras
+The PSX CDROM BIOS doesn't use any of these ports - execpt, it is writing +[20h]=2Eh (possibly to disable unused LCD hardware; which might be actually +present in the huge 80pin HC05 chips on old PU-7 mainboards).

+

HC05 Openbus

+

Openbus values can be read from invalid memory locations, on PSX with 52pin +chips:
+

  I/O bank 0:    0:06h..07h, 0:0Dh..0Fh
+  I/O bank 1:    1:01h, 1:06h..07h, 1:0Ch..0Dh, and upper 4bit of 1:05h
+  Unbanked I/O:  20h..3Dh
+  Unused Memory: 0240h..0FFFh, 5000h..FDFFh
+
+The returned openbus value depends on the opcode's memory operand:
+
  [nn],[mmnn],[nn+x],[mmnn+x] --> returns LAST byte of current opcode (=nn)
+  [x]                         --> returns FIRST byte of following opcode
+

+

CDROM Internal HC05 On-Chip I/O Ports - Extras

+

HC05 Port OPTM=0:0Dh - SPCR2 - Serial Peripheral Control Register 2 (R/W)

+

HC05 Port OPTM=0:0Eh - SPSR2 - Serial Peripheral Status Register 2 (R)

+

HC05 Port OPTM=0:0Fh - SPDR2 - Serial Peripheral Data Register 2 (R/W)

+

This is a second SPI channel, works same as first SPI channel, but using the +lower 3bits of Port G (instead of Port C) for the SPI signals.

+

HC05 Port OPTM=0:06h - PORTG - Port G Data Register (R/W)

+

HC05 Port OPTM=0:07h - PORTH - Port H Data Register (R/W)

+

HC05 Port 3Ch - PORTJ - Port J Data Register (R/W)

+
  PG.0    PG0   Port G Bit0    Input/Output /SDI2      (0=Low, 1=High) (R/W)
+  PG.1    PG1   Port G Bit1    Input/Output /SDO2      (0=Low, 1=High) (R/W)
+  PG.2    PG2   Port G Bit2    Input/Output /SCK2      (0=Low, 1=High) (R/W)
+  PG.3    PG3   Port G Bit3    Input/Output /TCMP      (0=Low, 1=High) (R/W)
+  PG.4    PG4   Port G Bit4    Input/Output /PWM0      (0=Low, 1=High) (R/W)
+  PG.5    PG5   Port G Bit5    Input/Output /PWM1      (0=Low, 1=High) (R/W)
+  PG.6    PG6   Port G Bit6    Input/Output /PWM2      (0=Low, 1=High) (R/W)
+  PG.7    PG7   Port G Bit7    Input/Output /PWM3      (0=Low, 1=High) (R/W)
+  PH.0-7  PHn   Port H Bit0..7 Input/Output            (0=Low, 1=High) (R/W)
+  PJ.0-3  PJn   Port J Bit0..3 Output                  (0=Low, 1=High) (R/W)
+  PJ.4-7  -     Not used (0)
+
+

HC05 Port OPTM=1:06h - DDRG - Port G Data Direction Register (R/W)

+

HC05 Port OPTM=1:07h - DDRH - Port H Data Direction Register (R/W)

+
  0-7  DDRXn Port X Data Direction Bit0..7 (0=Input, 1=Output) (R/W)
+
+

HC05 Port 20h - LCDCR - LCD Control Register (R/W)

+
  0    -     Not used (0)
+  1    PDH   Select Port D (H) (0=FP35-FP38 pins, 1=PD7-PD4 pins)
+  2    PEL   Select Port E (L) (0=FP31-FP34 pins, 1=PE3-PE0 pins)
+  3    PEH   Select Port E (H) (0=FP27-FP30 pins, 1=PE7-PE4 pins)
+  4    -     Not used (0)
+  5-6  DUTY  LCD Duty Select (...)
+  7    LCDE  LCD Output Enable BP and FP pins (0=Disable, 1=Enable)
+
+

HC05 Port 21h..34h - LCDDR1..20 - LCD Data Register 1..20 (R/W)

+
  0-3  First Data Unit  ;\Fourty 4bit LCD values (in the twenty registers)
+  4-7  Second Data Unit ;/(some duties use only the LSBs of that 4bit values)
+
+

HC05 Port 34h - PWMCR - PWM Pulse Width Modulation Control Register (R/W)

+
  0-3  CH0-3 PWM Channel 0..3 on Port G.Bit4-7 Enable (0=Disable, 1=Enable)
+  4-7  -     Not used (0)
+
+

HC05 Port 35h - PWMCNT - PWM Counter Register (R) (W=Set Counter to FFh)

+
  0-7  PWM Counter, incremented at PHI2 (range 01h..FFh)
+
+

HC05 Port 36h - PWMDR0 - PWM Duty Register 0 (R/W)

+

HC05 Port 37h - PWMDR1 - PWM Duty Register 1 (R/W)

+

HC05 Port 38h - PWMDR2 - PWM Duty Register 2 (R/W)

+

HC05 Port 39h - PWMDR3 - PWM Duty Register 3 (R/W)

+
  0-7  Duty (N cycles High, 255-N cycles Low)
+
+

HC05 Port 3Ah - ADR - A/D Data Register (R)

+
  0-3  A/D Conversion result (probably unsigned, 00h=Lowest, FFh=Max voltage?)
+
+

HC05 Port 3Bh - ADSCR - A/D Status and Control Register (R/W)

+
  0-3  CH0-3 A/D Channel (0..7=PortF.Bit0-7, 8..0Fh=Reserved/Vref/FactorTest)
+  4    -     Not used (0)
+  5    ADON  A/D Charge Pump enable (0=Disable, 1=Enable)
+  6    ADRC  A/D RC Oscillator On (0=Normal/Use CPU Clock, 1=Use RC Clock)
+  7    COCO  A/D Conversion Complete (0=Busy, 1=Complete) (R)
+
+

HC05 Port 3Dh - PCR - Program Control Register (R/W) (for EPROM version)

+
  0    PGM   EPROM Program Command (0=Normal, 1=Apply Programming Power)
+  1    ELAT  EPROM Latch Control (0=Normal/Read, 1=Latch/Write)
+  2-7  RES   Reserved for Factory Testing (always 0 in user mode)
+
+

CDROM Internal HC05 I/O Port Usage in PSX

+

Port A - Data (indexed via Port E)

+
  porta.0-7 i/o  CXD1815Q.Data (indexed via Port E)
+  porta.0   in   debug.dta.serial.in  ;\normally unused (exists in early bios)
+  porta.1   out  debug.dta.serial.out ; (prototype/debug_status stuff)
+  porta.2   out  debug.clk.serial.out ;/(with portc.5 = debug.select)
+
+

Port B - Inputs

+
  portb.0   in   F-BIAS  ;unused
+  portb.1   in   SCEx input (serial 250 baud, received via 1000Hz timer2 irq)
+  portb.2   in   LMTSW  aka /POS0        ;\pos0 and door switches
+  portb.3   in   DOOR   aka SHELL_OPEN   ;/
+  portb.4   in   TEST2
+  portb.5   in   TEST1 (CL316) enter test mode (instead of mainloop)
+  portb.6   in   COUT   ;<-- unused, extra pin, not "SENSE=COUT"
+  portb.7   in   CXD2510Q.SENSE ;-from CXD2510Q (and forwarded from CXA1782BR)
+
+

Port C - Inputs/Outputs

+
  portc.0   in   CXD2510Q.SUBQ  ;\
+  portc.1   in?  NC (SPI.OUT)   ; used via SPDR1 to receive SPI bus SUBQ data
+  portc.2   out  CXD2510Q.SQCK  ;/
+  portc.3   out  SPEED
+  portc.4   out    ="SPEED XOR 1"  ... AL/TE ... or CG ... or MIRR ?
+  portc.5   out  ROMSEL: debug.select   (or "SCLK" on later boards???)
+  portc.6   in   CXD1815Q.XINT/IRQ2 ;unused (instead INTSTS bits are polled)
+  portc.7   in   CXD2510Q.SCOR/IRQ1 ;used via polling INTSR.7 (not as irq)
+
+

Port D - Outputs

+
  portd.0   out  NC             ;-unused (always 1)
+  portd.1   out  CXD2510Q.DATA  ;\serial bus for CXD2510Q
+  portd.2   out  CXD2510Q.XLAT  ; (and also forwarded to CXA1782BR)
+  portd.3   out  CXD2510Q.CLOK  ;/
+  portd.4   out  CXD1815Q.DECCS ;\
+  portd.5   out  CXD1815Q.DECWR ; control for data/index on Port A/E
+  portd.6   out  CXD1815Q.DECRD ;/
+  portd.7   out  LDON  ... IC723.Pin11 ... maybe "laser on" ?
+
+

Port E - Index (for data on Port A)

+
  porte.0-4 out  CXD1815Q.Index (for data on Port A)
+  porte.5   out  NC, not used
+  porte.6   out  NC, see "idx_4xh" maybe test signal ???
+  porte.7   out? NC, TEST? configured as OUTPUT... but used as INPUT?
+
+

Port F - Motorola Bootstrap Serial I/O (not used in cdrom bios)

+
  portf.0   out  NC, TX         ;\
+  portf.1   in   NC, RX         ; not used by sony's cdrom bios
+  portf.2   out  NC, RTS        ; (but used by motorola's bootstrap rom)
+  portf.3   out  NC, DTR        ;/
+  portf.0   in   Serial Data In  (from daughterboard)  ;\
+  portf.1   out  Serial Data Out   (to daughterboard)  ; usage in SCPH-5903
+  portf.2   out  Serial Clock Out  (to daughterboard)  ; (PSX with Video CD)
+  portf.3   out  Audio/Video Select (0=Normal, 1=VCD)  ;/
+  portf.4-7 -    NC, not used (probably pins don't even exist)
+
+

Other HC05 I/O Ports

+

  SPI 1   - used for receiving SUBQ (via Port C)
+  IRQ 1   - used for latching/polling SUBQ's "SCOR" (not used as interrupt)
+  IRQ 2   - connects to CXD1815Q.XINT, but isn't actually used at all
+  Timer 1 - unused
+  Timer 2 - generates 1000Hz interrupts (for 250 baud "SCEx" string transfers)
+  DDRx    - data directions for Port A-F (as listed above)
+
+Note: The PSX has the HC05 clocked via 4.00MHz oscillator (older boards), or +via 4.3MHz signal from SPU (newer boards); internally, the HC05 is clocked at +half of those frequencies (ie. around 2 MHz).

+

CDROM Internal HC05 Motorola Selftest Mode

+

52-pin HC05 chips (newer psx cdrom controllers)

+

52-pin chips are used on LATE-PU-8 boards, and on later boards ranging from +PU-18 up to PM-41(2).
+CDROM Internal HC05 Motorola Selftest Mode (52pin chips)

+

80-pin HC05 chips (older psx cdrom controllers)

+

80-pin chips are used PU-7, EARLY-PU-8, and PU-9 boards.
+CDROM Internal HC05 Motorola Selftest Mode (80pin chips)

+

32-pin HC05 chips (joypad/mouse)

+

Sony's Digital Joypad and Mouse are using 32pin chips (with TQFP-32 package), +which are probably containing Motorola HC05 CPUs, too. Unknown if/how those +chips can be switched into bootstrap/dumping modes.

+

Pinouts

+

Pinouts - HC05 Pinouts

+

CDROM Internal HC05 Motorola Selftest Mode (52pin chips)

+

Motorola Bootstrap ROM

+

The Motorola MC68HC05 chips are including a small bootstrap ROM which gets +activated upon /RESET when having two pins strapped to following levels:
+

  Pin30 PortC.6 (/IRQ2) (/XINT) ----> wire to 3.5V (VCC)
+  Pin31 PortC.7 (/IRQ1) (SCOR)  ----> wire to 7V (2xVCC)
+
+Moreover, two pins are needed on /RESET for selecting a specific test mode:
+
  Pin16 PortB.0 ----> ModeSelectBit0 (0=GND, 1=3.5V)
+  Pin17 PortB.1 ----> ModeSelectBit1 (0=GND, 1=3.5V)
+
+The selectable four modes are:
+
  Mode0: Jump to RAM Address 0040h (useless when RAM is empty)
+  Mode1: Semifunctional Selftest (useless)
+  Mode2: Upload 200h bytes to RAM & jump to 0040h (allows fast/custom dumping)
+  Mode3: Download ROM as ASCII hexdump (nice, but very slow)
+
+The upload/download functions are using following additional pins:
+
  Pin50 PortF.0 ----> TX output (11bytes: 0Dh,0Ah," AAAA DD ")
+  Pin51 PortF.1 <---- RX input  (1byte: "!" to request next 11 bytes)
+  Pin52 PortF.2 ----> RTS output or so (not needed)
+  Pin1  PortF.3 ----> DTR output or so (not needed)
+  Ground ------------ GND for RX/TX
+
+RX/TX are RS232-like serial signals (but using other voltages, 0=0V and +1=3.5V). Transfer format is 8-N-1, ie. one startbit(0), 8 databits LSB first, +no parity, one stopbit(1). Baudrate is OSC/2/208 (ie. 9616 bps for 4.000MHz, or +10176 bps for 4.2336MHz clock derived from CXD2545Q/CXD2938Q).
+Note: Above pins may vary on some chips (namely on chips that don't have +PortF). The pins for entering bootstrap mode (PortC in this case) should be +described in datasheets; but transfer protocol and mode selection (PortB) and +transmission (PortF) aren't officially documented.

+

Mode2: Upload 200h bytes to RAM & jump to 0040h

+

This mode is very simple and powerful: After /RESET, you send 200h bytes to the +RX input (without any response on TX output), the bytes are stored at +0040h..023Fh in RAM, and the chip jumps to 0040h after transferring the last +byte. The uploaded program can contain a custum highspeed dumping function, or +perform hardware tests, etc. A custom dumping function for PSX/PSone can be +found at:
+

  http://www.psxdev.net/forum/viewtopic.php?f=70&t=557
+
+After uploading the 200h-byte dumping function it will respond by send 4540h +bytes (containing some ASCII string, the 16.5Kbyte ROM image, plus dumps for +RAM and (banked) I/O port region, plus openbus tests for unused memory and I/O +regions.

+

Wiring for Mode2 on PSX/PSone consoles with 52-pin HC05 chips

+

                            .------------ pin31, PC7, SCOR, cut the connection
+                   39       |   27               to Signal Processor,
+                 .-----------------.             then wire Pin31 to 7.5V
+              40 |                 | 26
+                 |  C nnnn         |
+                 |  SC4309nnPB     |
+                 |  G63C 185       |
+  pin50, TX <--- |                 | ---- pin17, PB1, SCEX, wire to 3.5V,
+  pin51, RX ---> |                 |                  for Mode2 Selection
+              52 | O               | 14
+                 '-----------------'
+                   1            13
+
+Good places to pick 3.5V and 7.5V from nice solder pads are:
+
  CN602.Pin1  = 7.5V     ;\on PSX boards (with either 5pin or
+  CN602.Pin3  = 3.5V     ;/               7pin CN602 connectors)
+  IC601.Pin1  = 7.5V     ;-on PSone boards (3pin 78M05 voltage regulator)
+  IC102.Pin32 = 3.5V     ;-on PSone boards (32pin Main BIOS ROM chip)
+
+The SCOR trace on Pin31, connects to Signal Processor...
+
  CXD2510Q.Pin63  (eg. on PU-8 boards)   ;\
+  CXD2545Q.Pin74  (eg. on PU-18 boards)  ; either one of these, depending
+  CXD1817R.Pin49  (eg. on PU-20 boards)  ; on which chipset you have
+  CXD2938Q.Pin77  (eg. on PM-41 boards)  ;
+  CXD2941R.Pin85  (eg. PM-41(2) boards)  ;/
+
+cut that trace (preferably on the PCB between two vias or test points, so you +can later repair it easily) (better don't try to lift Pin31, it breaks off +easily)
+Note: Mode2 also requires Pin16=Low, and Pin30=High (but PSX/PSone boards +should have those pins at that voltages anyways).

+

Mode3: Download ROM as ASCII hexdump

+

This mode is very slow and not too powerful. But it may useful if you can't get +Mode2 working for whatever reason. Wiring for Mode3 is same as above, plus +PortB.0=3.5V. In this mode, the chip will send one 0Dh,0Ah," AAAA DD " string +immediately after /RESET (with 16bit address "AAAA" (initially 1000h), and 8bit +data "DD"). Thereafter the chip will wait for incoming commands:
+

  4-digit ASCII HEX address --> change address, and return 0Dh,0Ah," AAAA DD "
+  chr(00h) --> increment address, and return 0Dh,0Ah," AAAA DD "
+  chr(07h) --> jump to current address (not so useful)
+  other characters --> same as chr(00h)
+  All digits/characters sent to RX input will produce an echo on TX output.
+
+Basic setup would be wiring RX to GND (the chip will treat that as infinite +stream of start bits with chr(00h), so it will respond by sending data from +increasing addresses automatically; the increment wraps from 4FFFh to FE00h +(skipping the gap between Main ROM and Bootstrap ROM), and also wraps from +FFFFh to 0000h; transfer is ultraslow: 13 characters needed per dumped byte: +chr(00h) to chip, chr(00h) echo from chip, and 0Dh,0Ah," AAAA DD " from chip.

+

CDROM Internal HC05 Motorola Selftest Mode (80pin chips)

+

80pin Sony 4246xx chips

+

And for anyone else planning to try this, these are the connections:
+

  Pin PortC
+  46  PC7/IRQ1 (SCOR) disconnect from PCB, then wire the pin to Vtst (7.6V)
+  45  PC6/IRQ2 (/XINT) wire to Vdd (3.5V) (you have to solder to the pin)
+
+In bootstrap mode, Port A is used as follows:
+
  Pin PortA DDRA Usage
+  23  PA0   in   RXD
+  24  PA1   out  TXD
+  25  PA2   in   -
+  26  PA3   in   Testmode.bit0 (GND=0, 3.5V=1)
+  27  PA4   in   Testmode.bit1 (GND=0, 3.5V=1)
+  28  PA5   in   Testmode.bit2 (GND=0, 3.5V=1)
+  29  PA6   out  RTS (don't care)
+  30  PA7   out  -
+
+The selectable testmodes are:
+
  PA5 PA4 PA3  Effect
+  0   x   x    Jump to 0040h      ;\
+  1   0   0    Test (complex)     ; not so useful
+  1   0   1    Test (simple loop) ;/
+  1   1   0    ROM Dump 4200h bytes (plain binary, non-ASCII)
+  1   1   1    RAM Upload 100h bytes to 0040h..013Fh, then jump to 0040h
+
+RX/TX are plain binary (non-ASCII), baudrate is 9600 (when using 4.000MHz +oscillator), transfer format is 8,N,2 (aka 8,N,1 with an extra pause bit).

+

Wiring for Upload/Download on PSX consoles with 80-pin HC05 chips

+

                  .------------ pin46, PC7/IRQ1, SCOR, cut & wire to 7.5V
+                  |.----------- pin45, PC6/IRQ2, wire to 3.5V
+         60       ||  41
+       .-----------------.
+    61 |               o | 40
+       |  Sony Computer  |           ,----- pin28, PA5, wire to 3.5V
+       |  Entertainment  | _________/  ,--- pin27, PA4, wire to 3.5V
+       |  Inc. (C) E35D  | ==========='---- pin26, PA3, mode select
+       |     4246xx 185  | ----> pin24, PA1, TXD (for ROM dump)
+       |                 | <---- pin23, PA0, RXD (for RAM upload)
+    80 | O               | 21
+       '-----------------'
+         1            20
+
+Good places to pick 3.5V and 7.5V from nice solder pads are:
+
  CN602.Pin1  = 7.5V     ;\on PSX boards (with 7pin CN602 connectors)
+  CN602.Pin3  = 3.5V     ;/
+
+Credits to TriMesh for finding the 80pin chip's bootstrap signals.

+

Other 80pin chips

+

DTL-H100x uses 80pin chip with onchip PROM (chip text "(M) MC68HC705L15", +instead of "Sony [...] 4246xx"), wiring for serial dumping on that is unknown +(the bootstrap ROM may be a little different because it should contain PROM +burning functions). PU-9 boards boards seem to use a similar PROM (with some +sticker on it).
+DTL-H2000 uses 80pin CXP82300 chip with socketed piggyback 32pin EPROM - that +chip is a Sony SPC700 CPU, not a Motorola HC05 CPU. Accordingly there's no +Motorola Bootstrap mode in it, but of course one can simply dump the EPROM with +standard eprom utilities, as done by TriMesh).

+

CDROM Internal CXD1815Q Sub-CPU Configuration Registers

+

00h - DRVIF - Drive Interface (W)

+
  0-1 "L"     Reserved (should be 0)
+  2   LSB 1st CD DSP DATA order               (0=MSB first, 1=LSB first)
+  3-4 BCK MD  CD DSP Number of BCLKs per WCLK (0=16, 1=24, 2=32, 3=Reserved)
+  5   BCK RED Strobe DATA on BLCK Edge        (0=Falling Edge, 1=Rising Edge)
+  6   LCH LOW Channel on LRCK=Low             (0=Right, 1=Left)
+  7   C2PL1st      ... C2PO lower byte 1st
+
+

01h - CONFIG 1 - Configuration 1 (W)

+
  0   HCLKDIS  HCLK Pin Output (0=8.4672MHz, 1=Disable; Fixed Low)
+  1   CLKDIS   CLK Pin Output (0=16.9344MHz, 1=Disable; Fixed Low)
+  2   9BITRAM  SRAM Databus width (0=8bit/normal, 1=9bit)
+  3-4 RAM SZ   SRMA Address bus (0=32K, 1=64K, 2=128K, 3=Reserved)
+  5   PRTYCTL      ... Priority Control
+  6   XSLOW    Number of clock cycles per DMA cycle (0=12, 1=4) (for SRAM)
+  7   "L"      Reserved (should be 0)
+
+

02h - CONFIG 2 - Configuration 2 (W)

+
  0   "L"      Reserved (should be 0)
+  1   DACODIS        .... DAC Out Disable
+  2   DAMIXEN  Digital Audio Mixer Enable (0=Attentuator/Mixer for CD-DA, 1=No)
+  3   SMBF2    Number of Sound Map Buffer Surfaces (0=Three, 1=Two)
+  4   SPMCTL   Sound Parameter Majority Control (0=?)  ;\for ADPCM params
+  5   SPECTL   Sound Parameter Error Control    (0=?)  ;/
+  6-7 "L"      Reserved (should be 0)
+
+

03h - DECCTL - Decoder Control (W)

+
  0-2 DECMD    Decoder Mode (0-7)
+                 0 or 1  Decoder Disable            ;-disable sector reading
+                 2 or 3  Monitor-only Mode          ;\no error correction
+                 4       Write-only Mode            ;/
+                 5       Real-time Correction Mode  ;\with error correction
+                 6       Repeat Correction Mode     ;/
+                 7       CD-DA Mode                 ;-audio
+  3   AUTODIST Auto Distinction (0=Use MODESEL/FORMSEL bits, 1=Use Sector Hdr)
+               (Error Correction is done according to above MODE/FORM values)
+  4   FORMSEL  Form Select (0=FORM1, 1=FORM2) (must be 0 for MODE1)
+  5   MODESEL  Mode Select (0=MODE1, 1=MODE2)
+  6   ECCSTR   ECC Strategy (0=Normal, 1=Use Error Flags; requires 9bit SRAM)
+  7   ENDLADR  Enable Drive Last Address    ...
+
+

07h - CHPCTL - Chip Control (W)

+
  0   "L"      Reserved (should be 0)
+  1   DBLSPD   Double Speed Mode (0=Normal, 1=Double) (init CD DSP first)
+  2   RPSTART  Repeat Correction Start (0=No, 1=Start) (automatically cleared)
+  3   SWOPEN   Sync Window Open (0=SyncControlledByIC, 1=OpenDetectionWindow)
+  4   CD-DA    CD-DA Play     (0=No, 1=Playback CD-DA as audio)
+  5   CDDAMUTE CD-DA Mute     (0=Normal, 1=Mute CD-DA Audio)
+  6   RTMUTE   Real-time Mute (0=Normal, 1=Mute CDROM ADPCM)
+  7   SMMUTE   Sound Map Mute (0=Normal, 1=Mute Sound Map ADPCM)
+
+

CDROM Internal CXD1815Q Sub-CPU Sector Status Registers

+

00h - ECCSTS - ECC Status (R)

+
  0 CFORM   FORM assumed by Error Correction (0=FORM1, 1=FORM2)
+  1 CMODE   MODE assumed by Error Correction (0=MODE1, 1=MODE2)
+  2 ECCOK   ECC Okay (0=Bad, 1=Okay)
+  3 EDCOK   EDC Okay (0=Bad, 1=Okay)
+  4 CORDONE Correction Done (0=None, 1=Error occurred and was corrected)
+  5 CORINH  Correction Inhibit (0=Okay,1=AUTODIST couldn't determine MODE/FORM)
+  6 ERINBLK Erasure in Block (0=Okay, 1=At least 1 byte is wrong & uncorrected)
+  7 EDCALL0 EDC all-zero  (0=No/EDC Exists, 1=Yes/All four EDC bytes are 00h)
+
+

01h - DECSTS - Decoder Status (R)

+
  0   NOSYNC   No Sync       (0=Okay, 1=Sector Sync Mark Missing)
+  1   SHRTSCT  Short Sector  (0=Okay, 1=Sector Sync Mark within Sector Data)
+  2-4 -        Reserved (undefined)
+  5   RTADPBSY Real-time ADPCM Busy (0=No, 1=Busy/playback)
+  6-7 -        Reserved (undefined)
+
+

02h - HDRFLG - Header/Subheader Error Flags for HDR/SHDR registers (R)

+

  0 CI      Error in 4th Subheader byte (Coding Info) (0=Okay, 1=Error)
+  1 SUBMODE Error in 3rd Subheader byte (Submode)     (0=Okay, 1=Error)
+  2 CHANNEL Error in 2nd Subheader byte (Channel)     (0=Okay, 1=Error)
+  3 FILE    Error in 1st Subheader byte (File)        (0=Okay, 1=Error)
+  4 MODE    Error in 4th Header byte (MODE)           (0=Okay, 1=Error)
+  5 BLOCK   Error in 3rd Header byte (FF)             (0=Okay, 1=Error)
+  6 SEC     Error in 2nd Header byte (SS)             (0=Okay, 1=Error)
+  7 MIN     Error in 1st Header byte (MM)             (0=Okay, 1=Error)
+
+Error flags for current sector are probably stored straight in this register +(ie. these flags are probably available even without using 9bit SRAM).
+Or maybe not... if the chip supports receiving newer sectors during +time-consuming error corrections... then those newer would need to be stored in +SRAM, and would thus require 9bit SRAM for the error flags?

+

03h - HDR - Header Bytes (R)

+
  1st read: 1st Header byte (MM)
+  2nd read: 2nd Header byte (SS)
+  3rd read: 3rd Header byte (FF)
+  4th read: 4th Header byte (MODE)
+
+

04h - SHDR - Subheader Bytes (R)

+

  1st read: 1st Subheader byte (File)
+  2nd read: 2nd Subheader byte (Channel)
+  3rd read: 3rd Subheader byte (Submode) (SM)
+  4th read: 4th Subheader byte (Coding Info) (CI)
+
+The contents of the HDRFLG, HDR, SHDR registers indicate:
+
      (1) The corrected value in the real-time correction or
+          repeat correction mode
+      (2) Value of the raw data from the drive in the monitor-only
+          or write-only mode
+    The CMOME? and CMODE bits (bits 1, 0) of ECCSTS indicate the FORM and MODE
+    of the sector the decoder has discriminated by the raw data from the drive.
+    Due to erroneous correction, the values of these bits may be at variance
+    with those of the HDR register MODE byte and SHDR register submode byte
+    bit5.
+

+

Unknown when 1st..4th read indices are reset for HDR and SHDR (maybe on access +to certain I/O ports, or maybe anytime when receiving a new sector), also +unknown what happens on 5th read and up.

+

CDROM Internal CXD1815Q Sub-CPU Address Registers

+

Drive Address -- used for storing incoming CDROM sectors in Buffer RAM
+Host Address -- used for transferring Buffer RAM to (or from) Main CPU
+ADPCM Address -- used for Real-time ADPCM audio output from Buffer RAM

+

05h - CMADR - Drive Current Minute Address (R)

+

  0-6   CMADR    Address bit10-16 (in 1Kbyte steps)
+  7     -        Reserved (undefined)
+
+Indicates the start address of the most recently decoded sector (called "Minute +Address" because it points to the MM byte of the MM:SS:FF:MODE sector header). +Normally, CMADR should be forwarded to Host:
+
  HADR = (CMADR AND 7Fh)*400h+offset
+  HXFR = length OR 4000h
+
+Whereas, offset would be usually 00h, 04h, or 0Ch (to start reading from the +begin of the sector, or to skip 4-byte MODE1 header, or 12-byte MODE2 header). +And length would be usually 800h (normal data sector), or 924h (entire sector, +excluding the leading 12 sync-bytes). Length bit14 is undocumented/reserved, +but the PSX CDROM BIOS does set that bit for whatever reason.
+Alternately, the sector can be forwarded to the Real-time ADPCM decoder:
+
  ADPMNT = (CMADR AND 7Fh) OR 80h
+

+

19h - ADPMNT - ADPCM "MNT" Address (W)

+
  0-6   ADPxxx  ADPCM source Address bit10-16 (in 1Kbyte-steps)
+  7     RTADPEN Real-time ADPCM Enable (0=Disable, 1=Enable Real-time ADPCM)
+
+

04h - DLADR-L, Drive Last Address, bit0-7 (W)

+

05h - DLADR-M, Drive Last Address, bit8-15 (W)

+

06h - DLADR-H, Drive Last Address, bit16 (W)

+
  0-16  DLADR  Addr. bit0-16     ...
+  17-23 "L"    Reserved (should be 0)
+
+

10h - DADRC-L - Drive Address Counter, bit0-7 (W)

+

11h - DADRC-M - Drive Address Counter, bit8-15 (W)

+

12h - DADRC-H - Drive Address Counter, bit16 (W)

+
  0-16  DADRC    Incrementing Drive-to-Buffer Write Address, bit0-16
+  17-23 "L"      Reserved (should be 0)
+
+

0Eh - DADRC-L - Drive Address Counter, Bit0-7 (R)

+

0Fh - DADRC-M - Drive Address Counter, Bit8-15 (R)

+
  0-15  DADRC Address bit0-15  ;bit16 is in Port 0Bh            ...
+
+

0Ch - HXFR-L - Host Transfer Length, bit0-7 (W)

+

0Dh - HXFR-H - Host Transfer Length, bit8-11 and stuff (W)

+
  0-11  HXFR     number of data bytes, bit0-11 (0..FFFh)       ...
+  12    HADR.16  HADR  bit16
+  13    "L"      Reserved (should be 0)
+  14    "L" ??   Reserved (should be 0)   ;<-- XXX but on PSX: Always 1 !?!
+                                          ;    seems to Disable INT8 ?!!!
+  15    DISHXFRC Disable HXFRC (0=Use HXFRC, 1=Disable, Infinite-or-Zero Len?)
+
+

0Eh - HADR-L - Host Transfer Address, bit0-7 (W)

+

0Fh - HADR-M - Host Transfer Address, bit8-15 (W)

+
  0-15  HADR     Addr. bit0-15  ;bit16 in Port 0Dh    ...
+
+

0Ah - HXFRC-L - Host Transfer Remain Counter, bit0-7 (R)

+

0Bh - HXFRC-H - Host Transfer Remain Counter, bit8-11, and other bits (R)

+
  0-11  HXFRC Host Transfer Counter bit0-11 (number of remaining bytes)
+  12    HADRC bit16  ;MSB of Port 0Ch/0Dh
+  13    DADRC bit16  ;MSB of Port 0Eh/0Fh
+  14-15 -     Reserved (undefined) (usually both bits set)
+
+

0Ch - HADRC-L - Host Transfer Address Counter, bit0-7 (R)

+

0Dh - HADRC-M - Host Transfer Address Counter, bit8-15 (R)

+

  0-15  HADRC Address bit0-15  ;bit16 is in Port 0Bh
+
+"This counter keeps the addresses which write or read the data with host +into/from the buffer.
+When data from the host is written into the buffer or data to the host is read +from the buffer, the HADRC value is output from MA0 to 16. HADRC is incremented +each time one byte of data from the drive is read from the buffer (BFRD is +high) or written into the buffer (BFWR is high)."

+

Note

+

When reading from SRAM, data seems to go through a 8-byte data fifo, the HXFRC +(remain) and HADRC (addr) values aren't aware of that FIFO (ie. if there's data +in the fifo, then addr will be 8 bigger and remain 8 smaller than what has +arrived at the host).

+

Unclear Notes

+

"If sound map data is to be transferred before the data is transferred +(immediately after the host has set the BFRD and BFWR bits (bits 7 and 6) of +the HCHPCTL register high)":
+

  900h is loaded into HXFRC
+  and 600Ch, 6A0Ch, or 740Ch is loaded into HADRC
+  (at least, supposedly, above addresses , for cases when using 32K SRAM)
+
+"At any other time":
+
  HADR and HXFR are loaded into HADRC and HXFRC
+
+Unknown what the above crap is trying to say exactly.
+"At any other time" does apparently refer to cases when transfers get started +(whilst during transfer, the address/remain values are obviously +increasing/decreasing).
+For sound map, theoretically, the SMEN bit should be set, but above does +somewhat suggest that BFRD or BFWR (or actually: both BFRD and BFWR) need to be +set...?

+

Sector Buffer Memory Map (32Kx8 SRAM)

+
  0000h 1st Sector (at 0000h..0923h) (unused gap at 0924h..0BFFh)
+  0C00h 2nd Sector (at 0C00h..1523h) (unused gap at 1524h..17FFh)
+  1800h 3rd Sector (at 1800h..2123h) (unused gap at 2124h..23FFh)
+  2400h 4th Sector (at 2400h..2D23h) (unused gap at 2D24h..2FFFh)
+  3000h 5th Sector (at 3000h..3923h) (unused gap at 3924h..3BFFh)
+  3C00h 6th Sector (at 3C00h..4523h) (unused gap at 4524h..47FFh)
+  4800h 7th Sector (at 4800h..5123h) (unused gap at 5124h..53FFh)
+  5400h 8th Sector (at 5400h..5D23h) (unused gap at 5D24h..5FFFh)
+  6000h Soundmap ADPCM Buffer (at 600Ch..690Bh) (gaps at 6000h and 690Ch)
+  6A00h Soundmap ADPCM Buffer (at 6A0Ch..730Bh) (gaps at 6A00h and 730Ch)
+  7400h Soundmap ADPCM Buffer (at 740Ch..7D0Bh) (gaps at 7400h and 7D0Ch)
+  7E00h Unknown/Unused
+
+

CDROM Internal CXD1815Q Sub-CPU Misc Registers

+

16h - HIFCTL - Host Interface Control (W)

+
  0-2  HINT    Request Host Interrupt (INT1..INT7, or 0=None/No change)
+  3-7  "L"     Reserved (should be 0)
+
+

11h - HIFSTS - Host Interface Status (R)

+
  0-2 HINTSTS  Pending Host Interrupt (INT1..INT7, or 0=None/All acknowledged)
+  3   DMABUSY  DMA Busy (0=Data FIFO Empty and HXFRC=0, 1=Data Transfer Busy)
+  4   PRMRRDY  Parameter Read Ready (0=Parameter FIFO Empty, 1=Ready/Not Empty)
+  5   RSLEMPT  Result Empty         (0=Response FIFO Not Empty, 1=Empty)
+  6   RSLWRDY  Result Write Ready   (0=Response FIFO Full, 1=Ready/Not Full)
+  7   BUSYSTS  Command Busy Status  (0=Command Not Empty, 1=Ack'ed by CLRBUSY)
+
+

0Ah - CLRCTL - Clear Control (W)

+
  0   RESYNC   Sync with CD DSP (0=No change, 1=Resync, eg. after speed change)
+  1-3 "L"      Reserved (should be 0)
+  4   RTADPCLR Abort Real-time ADPCM (0=No Change, 1=Abort; when ADPMNT.7=0)
+  5   CLRRSLT  Clear Reply FIFO     (0=No change, 1=Acknowledge; clear FIFO)
+  6   CLRBUSY  Acknowledge Command  (0=No change, 1=Acknowledge; clear BUSYSTS)
+  7   CHPRST   Chip Reset           (0=No change, 1=Do Chip Initialization)
+
+

07h - INTSTS - Interrupt Status (R) - (0=No, 1=IRQ)

+

09h - INTMSK - Interrupt Mask (W) - (0=Disable, 1=Enable)

+

0Bh - CLRINT - Clear Interrupt Status (W) - (0=No change, 1=Clear/Ack)

+
  0   HCRISD   Host Chip Reset Issued
+  1   HSTCMND  Host Command                ...
+  2   DECINT   Decoder Interrupt           ..
+  3   HDMACMP  Host DMA Complete           .   <-- PSX: used for retry ?!?!!!
+  4   RTADPEND Real-time ADPCM end
+  5   RSLTEMPT Result Empty
+  6   DECTOUT  Decoder Time Out
+  7   DRVOVRN  Drive Overrun
+
+

12h - HSTPRM - Host Parameter (R)

+

  0-7  Param FIFO (check HIFSTS.4 to see if the FIFO is empty)
+
+HIFSTS.4 goes off when all bytes read.
+Said to have 8-byte FIFO in CXD1199AQ datasheet.
+But, PSX has 16-byte Parameter FIFO...!?!

+

13h - HSTCMD - Host Command (R)

+

  0-7  Command (check INTSTS.1 or HIFSTS.7 to see if a command was sent)
+
+Command should be ack'ed via CLRINT.1 and CLRCTL.6.

+

17h - RESULT - Response FIFO (W)

+

  0-7  Data (has 8-byte FIFO)
+
+Said to have 8-byte FIFO in CXD1199AQ datasheet.
+But, PSX has 16-byte Response FIFO...!?!

+

08h - ADPCI - ADPCM Coding Information (R)

+

  0   S/M      ADPCM Stereo/Mono        (0=Mono, 1=Stereo)
+  1   -        Reserved (undefined)
+  2   FS       ADPCM Sampling Frequency (0=37.8kHz, 1=18.9kHz)
+  3   -        Reserved (undefined)
+  4   BITLNGTH ADPCM Sample Bit Length  (0=Normal/4bit, 1=8bit)
+  5   ADPBUSY  ADPCM Decoding           (0=No, 1=Yes/Busy)
+  6   EMPHASIS ADPCM Emphasis           (0=Normal/Off, 1=On)
+  7   MUTE     DA Data is Muted (uh?)   (0=No, 1=Yes/Muted)
+
+Unknown if ADPCI is affected by configurations by Main-CPU's Sound Map ADPCM or +by Sub-CPU's Real-time ADPCM (or by both)?
+Note: Bit5,7 are semi-undocumented in the datasheet (mentioned in the ADPCI +description, but missing in overall register summary).

+

1Bh - RTCI - Real-time ADPCM Coding Information (W)

+
  0    S/M      ADPCM Stereo/Mono        (0=Mono, 1=Stereo)
+  1    "L"      Reserved (should be 0)
+  2    FS       ADPCM Sampling Frequency (0=37.8kHz, 1=18.9kHz)
+  3    "L"      Reserved (should be 0)
+  4    BITLNGTH ADPCM Sample Bit Length  (0=Normal/4bit, 1=8bit)
+  5    "L"      Reserved (should be 0)
+  6    EMPHASIS ADPCM Emphasis           (0=Normal/Off, 1=On)
+  7    "L"      Reserved (should be 0)
+
+

06h,09h,10h,14h..1Fh - Reserved (R)

+

  0-7  Reserved (undefined)
+
+Of these, 09h and 10h are officially unused/reserved. And addresses 06h and +14h..1Fh aren't officially mentioned to exist at all.
+Trying to read these registers on a PSone returns Data=C0h for 06h, 09h, 10h, +15h-16h, 18h-1Fh, and Data=FFh for 14h, and Data=DEh for 17h.

+

08h,13h-15h,18h,1Ah,1Ch-1Fh - Reserved (W)

+

  0-7  Reserved (should be 00h) (or don't write at all)
+
+Of these, 09h,13h-15h,18h,1Ah are officially unused/reserved. And addresses +1Ch-1Fh aren't officially mentioned to exist at all.

+

CDROM Internal Commands CX(0x..3x) - CXA1782BR Servo Amplifier

+

CXA1782BR - CX(0x) - Focus Servo Control - "FZC" FocusZeroCross at SENS pin

+

  23-20 4bit  Command (00h)
+  19    1bit  FS4 Focus Servo (0=Off, 1=On)
+  18    1bit  FS3 DEFECT
+  17    1bit  FS2 Enable Focus Search Voltage (0=Off, 1=On)
+  16    1bit  FS1 Select Focus Search Voltage (0=Falling, 1=Rising)
+  15-0  16bit Unused (don't care)
+
+For Focus Search: Keep FS1=on, and toggle FS2 on and off (this will generate a +waveform, and SENS will indicate when reaching a good focus voltage).

+

CXA1782BR - CX(1x) - Tracking/Brake/Sled - "DEFECT" at SENS pin

+

  23-20 4bit  Command (01h)
+  19    1bit  TG1,TG2 ON/OFF Tracking Servo Gain Up/Normal (hmmm?)
+  18    1bit  Brake Circuit ON/OFF
+  17-16 2bit  PS Sled Kick Height (0=+/-1, 1=+/-2, 2=Undoc, 3="Don't use"?)
+  15-0  16bit Unused (don't care)
+
+Note: The PSX CDROM BIOS does use the "Undoc" setting (ie. bit17=1), but the +effect is undoc/unknown?
+Note: CX(1x) works different on CXD2545Q (some bits are moved around, and the +"SledKickHeight" bits are renamed to "SledKickLevel" and moved to different/new +CX(3X) commands.

+

CXA1782BR - CX(2x) - Tracking and Sled Servo Control - "TZC" at SENS pin

+
  23-20 4bit  Command (02h)
+  19-18 2bit  Tracking Control (0=Off, 1=Servo On, 2=F-Jump, 3=R-Jump) ;TM1,3,4
+  17-16 2bit  Sled Control     (0=Off, 1=Servo On, 2=F-Fast, 3=R-Fast) ;TM2,5,6
+  15-0  16bit Unused (don't care)
+
+

CXA1782BR - CX(3x) - "Automatic Adjustment Comparator Output" at SENS pin

+

  23-20 4bit  Command (03h)
+  19    1bit  Value to be adjusted (0=Balance, 1=Gain)
+  18-16 3bit  New Balance or Gain value (depending on above bit)
+  15-0  16bit Unused (don't care)
+
+Note: CX(3x) is extended and works very different on CXD2545Q.

+

CXA1782BR Command 4x..7x - "HIGH-Z" at SENS pin

+
  N-N   4bit  Command (04h..07h)
+
+

CXA1782BR Command 8x..Fx - "UNSPECIFIED???" at SENS pin

+
  N-N   4bit  Command (08h..0Fh)
+
+

Note

+

The Servo Amplifier isn't directly connected to the CPU. Instead, it's +connected as a slave device to the Signal Processor. There are two ways to +access the Servo Amplifier:
+1) The CPU can send CX(0X..3X) commands to the Signal Processor (which will +then forward them to the Servo Amplifier).
+2) The Signal Processor can send CX(0X..3X) commands to the Servo Amplifier +(this happens during CX(4xxx) Auto Sequence command).

+

CDROM Internal Commands CX(4x..Ex) - CXD2510Q Signal Processor

+

CXD2510Q - CX(4xxx) - Auto Sequence

+

  23-20 4bit  Command (4)
+  19-16 4bit  AS3-0 Auto Sequence Command (see below)
+  15-12 4bit  MT3-0 Max Timer Value (N timer units, or 0=Invalidate Timer)
+  11    1bit  LSSL  Timer Units     (0=2.9ms, 1=186ms) (for above MT value)
+  10-8  3bit  Unused (zero)
+  7-0   8bit  Unused (don't care)
+
+Values for AS (Auto Sequence Command):
+
  00h     Cancel
+  04h/05h Forward/Reverse Fine Search   ;<--sends CX(25h) ;\these do internally
+  07h     Focus-On                      ;<--sends CX(02h) ; send commands to
+  08h/09h Forward/Reverse 1 Track Jump  ;\                ; CXA1782BR
+  0Ah/0Bh Forward/Reverse 10 Track Jump ;   sends CX(25h) ; and, auto sequence
+  0Ch/0Dh Forward/Reverse 2N Track Jump ;/                ;/is interrupted?
+  0Eh/0Fh Forward/Reverse 1N Track Move ;<--CXD2545Q only(Reserved on CXD2510Q)
+  01h..03h,06h = Reserved
+

+

CXD2510Q - CX(5x) - Blind,Brake,Overflow Timer

+
  23-20 4bit  Command (5)
+  19-16 4bit  TR3-0 Timer (N*0.022ms for Blind/Overflow, N*0.045ms for Brake)
+  15-8  8bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+

CXD2510Q - CX(6xx) - SledKick,Brake,Kick Timer

+
  23-20 4bit  Command (6)
+  19-16 4bit  SD3-0 Timer KICK.D (N*2.9ms for Fine Search? else N*1.45ms?)
+  15-12 4bit  KF3-0 Timer KICK.F (N*0.09ms)
+  11-8  4bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+

CXD2510Q - CX(7xxxx) - Track jump count setting (for Auto Sequence Command)

+
  23-20 4bit  Command (7)
+  19-4  16bit Track Jump Count Setting (0..65535) for Command 4x
+  3-0   4bit  Unused (don't care)
+
+

CXD2510Q - CX(8xx) - MODE Specification

+
  23-20 4bit  Command (8)
+  19    1bit  CDROM        (0=Audio, 1=CDROM; no average and pre-value stuff)
+  18    1bit  DOUT Mute    (0=Not muted, 1=Mute DOUT)
+  17    1bit  D.out Mute-F (0=Not muted, 1=Mute DA)
+  16    1bit  WSEL         (0=Enhanced Sync Window, 1=Enhanced Anti-Rolling)
+  15    1bit  VCO SEL      (0=Double Correction, 1=Quadruple Correction)
+  14    1bit  ASHS         (0=Double Correction, 1=Quadruple Correction)
+  13    1bit  SOCT         (0=Output SubQ to SQSO, 1=Output Each? to SQSO)
+  12    1bit  Unused (zero)
+  11-8  4bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+

CXD2510Q - CX(9xx) - Function Specification

+
  23-20 4bit  Command (9)
+  19    1bit  DCLV ON-OFF (complex stuff, related to gain and frequencies)
+  18    1bit  DSPB ON-OFF (0=Normal Speed, 1=Double Speed; fixed pitch)
+  17    1bit  ASEQ ON-OFF (select output on SENS pin)
+  16    1bit  DPLL ON-OFF (0=Analog RFPLL, 1=Digital RFPLL)
+  15-14 1bit  Bilingual Audio (0=Stereo, 1=RightOnly, 2=LeftOnly, 3=Mute)
+  13    1bit  FLFC (normally 0)
+  12    1bit  Unused (zero)
+  11-8  4bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+

CXD2510Q - CX(Axx) - Audio Control

+

  23-20 4bit  Command (0Ah)
+  19    1bit  Vari Up   (write 1-then-0 to increase pitch by +0.1%)
+  18    1bit  Vari Down (write 1-then-0 to decrease pitch by -0.1%)
+  17    1bit  Mute (0=Not muted; unless muted elsewhere, 1=Mute & Peak=0)
+  16    1bit  ATT  (0=Attentuation off, 1=Minus 12 dB)
+  15-14 2bit  PCT  (0=Normal, 1=LevelMeter, 2=PeakMeter, 3=Normal) (0-1=QuadC2)
+  13-12 2bit  Unused (zero)
+  11-8  4bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+Normal: SQSO outputs... WHAT?
+PeakMeter: SQSO outputs highest peak ever on any channel (bit15: usually 0)
+LevelMeter: SQSO outputs recent peak (with bit15 toggled: 0=Right, 1=Left)

+

CXD2510Q - CX(Bxxxx) - Traverse Monitor Counter Setting

+
  23-20 4bit  Command (0Bh)
+  19-4  16bit Traverse Monitor Count (used when monitored by COMP and COUT) (?)
+  3-0   4bit  Unused (don't care)
+
+

CXD2510Q - CX(Cxx) - Spindle Servo Coefficient Setting

+
  23-20 4bit  Command (0Ch)
+  19-18 2bit  Gain MDP for CLVP mode (0=-6db, 1=0dB, 1=+6dB, 3=Reserved)
+  17-16 2bit  Gain MDS for CLVS/CLVP (0=-12dB, 1=-6dB, 2=0dB, 3=Reserved)
+  15    1bit  Zero (zero)
+  14    1bit  Gain DCLV0 overall gain (0=0dB, 1=+6dB
+  13-12 2bit  Unused (zero)
+  11-8  4bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+

CXD2510Q - CX(Dx) - CLV Control

+
  23-20 4bit  Command (0Dh)
+  19    1bit  DCLV PWM MD Digital CLV PWM mode  (0=Use MDS+MDP, 1=Ternary MDP)
+  18    1bit  TB Bottom Hold in CLVS/CLVH modes (0=At cycle RFCK/32, 1=RFCK/16)
+  17    1bit  TP Peak Hold in CLVS mode         (0=At cycle RFCK/4, 1=RFCK/2)
+  16    1bit  Gain CLVS for CLVS mode (0=0dB, 1=+6dB)(always +6dB in CLVP mode)
+  15-8  8bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+

CXD2510Q - CX(Ex) - CLV Mode

+

  23-20 4bit  Command (0Eh)
+  19-16 4bit  CM3-0
+  15-8  8bit  Unused (don't care on CXD2510Q, zero on CXD2545Q)
+  7-0   8bit  Unused (don't care)
+
+Values for CM (CLV Mode):
+
  00h Stop  Spindle Motor Stop mode
+  06h CLVA  Automatic CLVS/CLVP switching mode, normally used for playback
+  08h Kick  Spindle Motor Forward rotation mode
+  0Ah Brake Spindle Motor Reverse rotation mode
+  0Ch CLVH  Peak hold at 34kHz
+  0Eh CLVS  Rough Servo Mode, RF-PLL related
+  0Fh CLVP  PLL Servo mode
+

+

N/A - CX(F) - Reserved

+
  23-0  N/A  Don't use
+
+

SUBQ Output

+

 80bit subq
+ 15bit peak level (lsb first) (absolute/unsigned value)
+ 1bit  peak l/r flag (aka appears as "MSB" of peak level)
+
+L/R is toggled after each SUBQ reading, however the PSX Report mode does +usually forward SUBQ only every 10 frames, so it stays stuck in one setting +(but may toggle after one second; ie. every 75 frames). And, peak is reset +after each read, so 9 of the 10 frames are lost.

+

CXD2510Q - SENS output

+

  Index         ASEQ=0  ASEQ=1   ;<-- ASEQ can be set via CX(9xx)
+  0X            HighZ   SEIN (FZC)                     ;\aka SENS output
+  1X            HighZ   SEIN (A.S)    ... aka DEFECT   ; from CXA1782BR
+  2X            HighZ   SEIN (T.Z.C)  ... aka TZC      ; forwarded through
+  3X            HighZ   SEIN (SSTOP)  ... aka Gain/Bal ;/CXD2510Q
+  4X            HighZ   XBUSY
+  5X            HighZ   FOK
+  6X            HighZ   SEIN (HighZ)
+  AX            GFS     GFS
+  BX            COMP    COMP
+  CX            COUT    COUT
+  EX            /OV64   /OV64
+  7X-9X,DX,FX   HighZ   0
+
+Whereas,
+
 FZC    Focus Zero Cross
+ DEFECT Defect?
+ TZC    Tracking Zero Cross
+ SSTOP  Gain or Balance adjust reached wanted level
+ XBUSY  Low while the auto sequencer operation is busy
+ FOK    High for "focus OK" (same as FOK pin)
+ GFS    High when the played back frame sync is obtained with correct timing
+ COMP   Measures the number of tracks set with Reg B. High when Reg B is
+          latched, low when the initial Reg B number is input by CNIN
+ COUT   Measures the number of tracks set with Reg B. High when Reg B is
+          latched, toggles each time the Reg B number is input by CNIN. While
+          $44 and $45 are being executed, toggles with each CNIN 8-count
+          instead of the Reg B number
+ OV64   Low when filtered EFM signal is lengthened by 64 channel clock
+          pulses or more
+

+

CDROM Internal Commands CX(0x..Ex) - CXD2545Q Servo/Signal Combo

+

CXD2545Q - CX(0x) and CX(2x) - same as CXA1782BR Servo Amplifier

+

CDROM Internal Commands CX(0x..3x) - CXA1782BR Servo Amplifier

+

CXD2545Q - CX(4x..Ex) - same as CXD2510Q Signal Processor

+

CDROM Internal Commands CX(4x..Ex) - CXD2510Q Signal Processor
+One small difference is that the CXD2545Q supports a new "M Track Move" +function as part of the CX(4xxx) command. And, some "don't care" bits are now +reserved (ie. some commands need to be padded with additional leading "0" +bits).

+

CXD2545Q - CX(1x) - Anti Shock/Brake/Tracking Gain/Filter

+
  23-20 4bit  Command (01h)
+  19    1bit  Anti Shock (0=Off, 1=On)
+  18    1bit  Brake      (0=Off, 1=On)
+  17    1bit  Tracking Gain (0=Normal, 1=Up)
+  16    1bit  Tracking Gain Filter (0=Select 1, 1=Select 2)
+  15-0  16bit Unused (don't care)
+
+

CXD2545Q - CX(30..33) - Sled Kick Level

+
  23-20 4bit  Command (03h)
+  19-18 2bit  Subcommand (0)
+  17-16 2bit  Sled Kick Level (0=+/-1, 1=+/-2, 2=+/-3, 3=+/-4)
+  15-0  16bit Unused (don't care)
+
+

CXD2545Q - CX(34xxxx) - Write to Coefficient RAM

+

  23-16 8bit  Command (34h)
+  15    1bit  Zero (0)
+  14-8  7bit  Address (00h..4Fh = Select Coefficient K00..K4F)
+  7-0   8bit  Data    (00h..FFh = New value)
+  PLUS  8bit  Eight more bits on PSone (!)
+
+Allows to change the default preset coefficient values,
+CDROM Internal Coefficients (for CXD2545Q)

+

CXD2545Q - CX(34Fxxx) - Write to Special Register

+
  23-12 12bit Command (34Fh)
+  11-10 2bit  Index (0=TRVSC, 1=FBIAS, 2=?, 3=?)
+  9-0   10bit Data (for FBIAS: bit0=don't care)
+
+

CXD2545Q - CX(35xxxx) - FOCUS SEARCH SPEED/VOLTAGE/AUTO GAIN

+
  23-16 8bit  Command (35h)
+  15-14 2bit  FT  Focus Search-up speed 1
+  13-8  6bit  FS  Focus Search limit voltage (default 011000b) (+/-1.875V)
+  7     1bit  FTZ Focus Search-up speed 2
+  6-0   7bit  FG  AGF Convergence Gain Setting (default 0101101b)
+
+

CXD2545Q - CX(36xxxx) - DTZC/TRACK JUMP VOLTAGE/AUTO GAIN

+
  23-16 8bit  Command (36h)
+  15    1bit  Zero (0)
+  14    1bit  DTZC DTZC Delay (0=4.25us/Default, 1=8.5us)
+  13-8  6bit  TJ   Track Jump voltage (default 001110b) (+/-1.09V)
+  7     1bit  Zero (0)
+  6-0   7bit  TG   AGT Convergence Gain Setting (default 0101110b)
+
+

CXD2545Q - CX(37xxxx) - FZSL/SLED MOVE/Voltage/AUTO GAIN

+
  23-16 8bit  Command (37h)
+  15-14 2bit  FZS              XXX pg. 84
+  13-8  6bit  SM    Sled Move Voltage
+  7     1bit  AGS
+  6     1bit  AGJ
+  5     1bit  AGGF
+  4     1bit  AGGT
+  3     1bit  AGV1
+  2     1bit  AGV2
+  1     1bit  AGHS
+  0     1bit  AGHT
+
+

CXD2545Q - CX(38xxxx) - Level/Auto Gain/DFSW (Initialize)

+

  23-16 8bit  Command (38h)
+  15    1bit  VCLM VC level measurement on/off
+  14    1bit  VCLC VC level compensation for FCS_In Register on/off
+  13    1bit  FLM  Focus zero level measurement on/off
+  12    1bit  FLC0 Focus zero level compensation for FZC Register on/off
+  11    1bit  RFLM RF zero level measurement on/off
+  10    1bit  RFLC RF zero level compensation on/off
+  9     1bit  AGF  Focus automatic gain adjustment on/off
+  8     1bit  AGT  Tracking automatic gain adjustment on/off
+  7     1bit  DFSW Defect switch disable (1=disable defect measurement)
+  6     1bit  LKSW Lock switch (1=disable sled free-running prevention)
+  5     1bit  TBLM Traverse center measurement on/off
+  4     1bit  TCLM Tracking zero level measurement on/off
+  3     1bit  FLC1 Focus zero level compensation for FCS_In Register on/off
+  2     1bit  TLC2 Traverse center compensation on/off
+  1     1bit  TLC1 Tracking zero level compensation on/off
+  0     1bit  TLC0 VC level compensation for TRK/SLD_In register on/off
+
+VCLM,FLM,RFLM,TCLM are accepted every 2.9ms.

+

CXD2545Q - CX(39xx) - Select internal RAM/Registers for serial readout

+

  23-16 8bit  Command (39h)
+  15    1bit  DAC Serial data readout DAC mode on/off
+  14-8  7bit  SD  Serial readout data select (see below)
+  7-0   8bit  Unused (don't care)
+
+Serial Readout Addresses:
+
  Addr    Data  Content
+  00h     8bit  VC input signal
+  01h     8bit  SE input signal
+  02h     8bit  TE input signal
+  03h     8bit  FE input signal
+  04h-07h 9bit  TE AVRG register (mirrored to 04h-07h)
+  08h-0Bh 9bit  FE AVRG register (mirrored to 08h-0Bh)
+  0Ch-0Fh 9bit  VC AVRG register (mirrored to 0Ch-0Fh)
+  12h     8bit  RFDC envelope (peak)
+  13h     8bit  RFDC envelope (bottom)
+  1Ch     9bit  TRVSC register
+  1Dh     9bit  FBIAS register
+  1Eh     8bit  RFDC input signal
+  1Fh     8bit  RF AVRG register
+  20h-3Fh 16bit Data RAM        (M00-M1F)
+  40h-7Fh 8bit  Coefficient RAM (K00-K3F) (note: K40-K4F cannot be read out)
+

+

CXD2545Q - CX(3Ax000) - Focus BIAS addition enable

+
  23-16 8bit  Command (3Ah)
+  15    1bit  Zero (0)
+  14    1bit  FBON: FBIAS register addition (0=off, 1=Add FBIAS to FCS)
+  13-0  14bit Zero (0)
+
+

CXD2545Q - CX(3Bxxxx) - Operation for MIRR/DFCT/FOK

+
  23-16 8bit  Command (3Bh)
+  15-14 2bit  SFO  FOK Slice Level (...depends on SFOX)
+  13-12 2bit  SDF  DFCT Slice Level (0=89mV, 1=134mV, 2=179mV, 3=224mV)
+  11-10 2bit  MAX  DFCT Maximum Time (0=No Limit, 1=2ms, 2=2.36ms, 3=2.72ms)
+  9     1bit  SFOX FOK Slice Level (...depends on SFO)
+  8     1bit  BTF  Bottom Hold Double-Speed Count-Up mode for MIRR (0=off)
+  7-6   2bit  D2V  Peak Hold 2 for DFCT (0=22.05kHz, 1=44.1, 2=88.2, 3=176.4)
+  5-4   2bit  D1V  Peak Hold 1 for DFCT (0=176.4kHz, 1=352.8, 2=705.6, 3=1411)
+  3-0   4bit  Zero (0)
+
+

CXD2545Q - CX(3Cxxxx) - TZC for COUT SLCT HPTZC (Default)

+
  23-16 8bit  Command (3Ch)
+  15-0  16bit Unused (don't care)
+
+

CXD2545Q - CX(3Dxxxx) - TZC for COUT SLCT DTZC

+
  23-16 8bit  Command (3Dh)
+  15-0  16bit Unused (don't care)
+
+

CXD2545Q - CX(3Exxxx) - Filter

+
  23-16 8bit  Command (3Eh)
+  15-14 2bit  F1NDM FCS servo filter 1st stage (1=normal, 2=down)
+  13-12 2bit  F3NUM FCS servo filter 3rd stage (1=normal, 2=up)
+  11-10 2bit  T1NDM TRK servo filter 1st stage (1=normal, 2=down)
+  9-8   2bit  T3NUM TRK servo filter 3rd stage (1=normal, 2=up)
+  7     1bit  DFIS  FCS hold filter input extraction node (0=M05, 1=M04)
+  6     1bit  TLCD  Mask TLC2 set by D2 of CX(38) only when FOK low
+  5     1bit  RFLP  Pass signal from RFDC pin through low-pass-filter
+  4-0   5bit  Zero (0)
+
+

CXD2545Q - CX(3Fxxxx) - Others

+
  23-16 8bit  Command (3Fh)          ... XXX pg. 89
+  15-14 2bit  Unused (0)
+  13-12 2bit  XTD
+  11    1bit  Unused (0)
+  10-8  3bit  DRR
+  7     1bit  Unused (0)
+  6     1bit  ASFG
+  5     1bit  Unused (0)
+  4     1bit  LPAS
+  3-2   2bit  SRO
+  1-0   2bit  Unused (0)
+
+

CXD2545Q feedback on 39xx: see pg. 77 (eg. 390C = VC AVRG)

+

XXX

+

CXD2545Q - SENS output

+

  Index          ASEQ=0  ASEQ=1           Length
+  $0X            Z       FZC              -
+  $1X            Z       AS               -
+  $2X            Z       TZC              -
+  $38            Z       AGOK*1           -
+  $38            Z       XAVEBSY*1        -
+  $30-37,$3A-3F  Z       SSTP             -
+  $3904          Z       TE Avrg Reg.     9 bit
+  $3908          Z       FE Avrg Reg.     9 bit
+  $390C          Z       VC Avrg Reg.     9 bit
+  $391C          Z       TRVSC Reg.       9 bit
+  $391D          Z       FB Reg.          9 bit
+  $391F          Z       RFDC Avrg Reg.   8 bit
+  $4X            Z       XBUSY            -
+  $5X            Z       FOK              -
+  $6X            Z       0                -
+  $AX            GFS     GFS              -
+  $BX            COMP    COMP             -
+  $CX            COUT    COUT             -
+  $EX            OV64    OV64             -
+  $7X-9X,DX,FX   Z       0                -
+
+*1 $38 outputs AGOK during AGT and AGF command settings, and XAVEBSY during +AVRG measurement.
+SSTP is output in all other cases.

+

CDROM Internal Commands CX(0x..Ex) - CXD2938Q Servo/Signal/SPU Combo

+

Most commands are same as on CXD2545Q. New/changed commands are:

+

CXD2938Q - CX(349xxxxx) - New SCEx

+

Older PSX consoles have received the "SCEx" string at 250 baud via HC05 +PortB.bit1, which allowed modchips to injected faked "SCEx" signals to that +pin. To prevent that, the CXD2938Q contains some new 32bit commands that allow +to receive somewhat encrypted "SCEx" strings via SPI bus. The used commands +are:
+

  CX(34910000) NewScexStopReading
+  CX(3491xy80) NewScexRandomKey(xy)
+  CX(34920000) NewScexFlushResyncOrSo
+  CX(34944A00) NewScexInitValue1
+  CX(3498C000) NewScexInitValue2
+  CX(349C1000) NewScexThis   ;\inverse  ;\use CX(3C2080) for COUT selection
+  CX(349D1000) NewScexThat   ;/of COUT  ;/
+
+The relevant command is NewScexRandomKey(xy) which does send a random value +(x=01h..0Fh, and y=01h), and does then receive a 12-byte response via SPI bus +(which is normally used to receive SUB-Q data).
+
  1st byte: Unknown/unused (normally ADR/Control) ;\these should be probably
+  2nd byte: Unknown/unused (normally Track)       ; set to some invalid values
+  3rd byte: Unknown/unused (normally Index/Point) ;/to avoid SUB-Q confusion
+  4th..10th byte: SCEx data or Dummy bytes (depending on xy.bit7..1)
+  11th..12th byte: Unknown/unused (normally Audio Peak level)
+
+The 12-byte packet does contain one SCEx character encoded in 4th..10th byte +corresponding to Flags in "xy" bit 7..1 (in that order):
+All bytes with Flag=1 are ORed together to compute a Character byte (those +bytes could be all set to 53h for "S", or if more than one flag is set, it +could be theoretically split to something like 41h and 12h).
+All bytes with Flag=0 are ORed together to compute a Dummy byte. If the +Character byte is same as the Dummy byte, then it gets destroyed by setting +Character=00h (to avoid that, one could set all dummies to 00h, or set one or +more dummies to FFh, for example).
+Finally, "xy" bit0=0 indicates that the resulting character byte is inverted +(XORed by FFh), however, the CDROM BIOS does always use bit0=1, so the +inversion feature is never used.
+For the whole SCEx string, there must be at least one 00h byte inserted between +each character (or some Char=Dummy mismatch, which results in Char=00h either), +and there should be a few more 00h bytes preceeding the first character ("S").
+Note: Modchips didn't bother to reproduce that new SCEx transfers, instead they +have simply bypassed it by injecting the 250 baud SCEx string to some analog +lower level signal.

+

CXD2938Q - CX(3Bxxxx) - Some Changed Bits

+

Same as in older version, but initialized slightly differently: CXD2545Q used +CX(3B2250) whilst CXD2938Q is using CX(3B7250).

+

CXD2938Q - CX(3Cxxxx) - TzcCoutSelect with New/Changed Extra Bits

+

The CXD2545Q used two 8bit commands, CX(3C) and CX(3D), for TzcOut selection, +which are now replaced by a single 24bit command, CX(3Cxxxx), and which do +include a new mode related to New SCEx.
+

  CXD2545Q   CXD2938Q
+  CX(3C)     CX(3C0080) TzcCoutSelectHPTZC;\ <--formerly CX(3C)
+  -          CX(3C2080) TzcCoutSelectSCEX ;  <--special NewScex mode
+  CX(3D)     CX(3C4080) TzcCoutSelectDTZC ;/ <--formerly CX(3D)
+

+

CXD2938Q - CX(8xxxxx) - Disc Mode with New/Changed Extra Bits

+

Command CX(8xx) has been 12bit wide on CXD2545Q, and is now expanded 24bit +width (with some changed/unknown bits).
+

  CXD2545Q   CXD2938Q
+  CX(8180)   CX(810408) MODE = Audio (CD-DA)
+  CX(8120)   CX(812400) MODE = Audio (CD-DA) (manual SPI bus access)
+  CX(8980)   CX(890408) MODE = CDROM (Data)
+  -          CX(898000) MODE = CDROM (Data) (used on RESET)
+

+

CXD2938Q - CX(9xx000) - Normal/Double Speed with New Extra Bits

+

Command CX(9xx) has been 12bit wide on CXD2545Q (with bit12=reserved/zero), and +is now expanded 24bit width (with bit12=unknown/one and bit11-0=unknown/zero).

+

CXD2938Q - CX(Dx0000) and CX(Ex0000) - New Zero Padding

+

Commands CX(Dx) and CX(Ex) have been 8bit wide on CXD2545Q, and are now +zeropadded to 24bit width, ie. CX(Dx0000) and CX(Ex0000). Unknown if the extra +bits are hiding any extra features. In practice, the CDROM BIOS is always +setting them zero (except in some test commands which are accidently still +using the old 8bit form, resulting in garbage in lower 16bits).

+

CDROM Internal Commands CX(xx) - Notes

+

Serial Command Transmission (for Signal Processor and Servo Amplifier)

+

Commands are sent serially LSB first via DATA,CLOK,XLAT pins: DATA+CLOK are +used to send commands to the chip, command execution is then applied by +dragging XLAT low for a moment.
+Commands can be up to 24bits in length, but unused LSBs (the "don't care" bits) +can be omitted; the PSX BIOS clips the length to 8bit/16bit where possible (due +to the LSB-first transfer order, the chip does treat the most recently +transferred bit as MSB=bit23, and there's no need to transfer the LSBs if they +aren't used).
+Aside from being used as command number, the four most recently transferred +bits are also used to select SENS status feedback (for the SENS selection it +doesn't matter if the four bits were terminated by XLAT or not).

+

Sled Motor / Track Jumps / Tracking

+

The Sled motor moves the drive head to the current read position. On a Compact +Disc, the term "Track" does normally refer to Audio tracks (songs). But the +drive hardware uses the terms "Track" and "Tracking" for different purposes:
+Tracking appears to refer to moving the Optics via magnets (ie. moving only the +laser/lens, without actually moving the whole sled) (this is done for fine +adjustments, and it seems to happen more or less automatically; emulators can +just return increasing sectors without needing to handle special tracking +commands).
+Track jumps refer to moving the entire Sled, one "track" is equal to one spiral +winding (1.6 micrometers). One winding contains between 9 sectors on innermost +windings, and 22.5 sectors on outermost windings (the PSX cdrom bios is +translating the sector-distance to non-linear track-distance, and emulators +must undo that translation; otherwise the sled doesn't arrive at the intended +location; the cdrom bios will retry seeking a couple of times and eventually +settle down at the desired location - but it will timeout if the sled emulation +is too inaccurate).
+The PSX hardware uses two mechanisms for moving the Sled:
+Command CX(4xxx) Forward/Reverse Track Jump: allows to move the sled by +1..131070 tracks (ie. max 210 millimeters), and the hardware does stop +automatically after reaching the desired distance.
+Command CX(2x) Forward/Reverse Fast Sled: moves the sled continously until it +gets stopped by another command (in this mode, software can watch the COUT +signal, which gets toggled each "N" tracks; whereas "N" can be selected via +Command CX(Bxxxx), which is configured to N=100h in PSX).
+The PSX cdrom bios is issuing another Fast Sled command (in opposite direction) +after Fast Sled commands, emulators must somehow interprete this as "sled +slowdown" (rather than as actually moving the sled in opposite direction, which +could move the sled miles away from the target). For some reason vC1 BIOS is +using a relative short slowdown period, whilst vC2/vC3 are using much longer +slowdown periods (probably related to different SledKickHeight aka +SledKickLevel settings and/or to different Sled Move Voltage settings).

+

Focus / Gain / Balance

+

The hardware includes commands for adjusting & measuring +focus/gain/balance. Emulators can just omit that stuff, and can always +signalize good operation (except that one should emulate failures for Disc +Missing; and eventually also for cases like Laser=Off, or Spindle=Stopped).
+Focus does obviously refer to moving the lens up/down. Gain does probably refer +to reflection level/laser intensity. Balance might refer to tracking +adjustments or so.

+

CDROM Internal Commands CX(xx) - Summary of Used CX(xx) Commands

+

The PSX CDROM BIOS versions vC1, vC2, and vC3 are using following CX() +commands:
+

<B>  <--vC1-->  <--vC2-->  <--vC3--></B>
+<B>  CXD2510Q   CXD2545Q   CXD2938Q</B>
+  CX(00)     CX(00)     CX(00)     AllFocusSwitchesOff
+  CX(02)     CX(02)     CX(02)     FocusSearchVoltageFalling
+  CX(03)     CX(03)     CX(03)     FocusSearchVoltageRising ;ForTestOnly
+  CX(08)     CX(08)     CX(08)     FocusServoOn
+  CX(0C)     CX(0C)     CX(0C)     FocusServoOnAndDefectOn ;diff.usage vC# ?
+  -----
+  CX(11)     -          -          SledKickHeight2
+  CX(12)     -          -          SledKickHeightInvalid
+  CX(19)     -          -          TrackingGainAndSledKickHeight2
+  CX(1D)     -          -          TrackingGainBrakeAndSledKickHeight2
+  CX(1E)     -          -          TrackingGainBrakeAndSledKickHeightInvalid
+  -----
+  -          CX(11)     CX(11)     AntiShockOff            ;\
+  -          CX(13)     CX(13)     AntiShockOffGainUp      ;
+  -          CX(17)     CX(17)     AntiShockOffGainUpBrake ;/
+  -----
+  CX(20)     CX(20)     CX(20)     SledAndTrackingOff
+  CX(21)     CX(21)     CX(21)     SledServoOn          ;ForTestOnly
+  CX(22)     CX(22)     CX(22)     SledFastForward
+  CX(23)     CX(23)     CX(23)     SledFastReverse
+  CX(24)     -          -          TrackingServoOn
+  CX(25)     CX(25)     CX(25)     SledAndTrackingServoOn
+  -          CX(26)     CX(26)     SledFastForwardAndTrackingServoOn
+  CX(28)     CX(28)     CX(28)     TrackingForwardJump  ;ForTestOnly
+  CX(2C)     CX(2C)     CX(2C)     TrackingReverseJump  ;ForTestOnly
+  -----
+  CX(30+n)   -          -          BalanceAdjust(0..7)
+  CX(38+n)   -          -          GainAdjust(0..7)
+  -----
+  -          CX(30)     CX(30)     SetSledKickLevel1       ;\
+  -          CX(31)     CX(31)     SetSledKickLevel2       ;
+  -          CX(32)     CX(32)     SetSledKickLevel3       ;/
+  -----
+  -          CX(3400E6) CX(3400E6) SetK00toE6hSledInputGain            ;def=E0h
+  -          CX(340730) CX(340730) SetK07to30hSledAutoGain       ;blah ;def=30h
+  -          CX(34114A) CX(34114A) SetK11to4AhFocusOutputGain          ;def=32h
+  -          CX(341330) CX(341330) SetK13to30hFocusAutoGain      ;blah ;def=30h
+  -          CX(341D6F) CX(341D6F) SetK1Dto6FhTrackingLowBoostFilterAL ;def=44h
+  -          CX(341F64) CX(341F64) SetK1Fto64hTrackingLowBoostFilterBL ;def=5Eh
+  -          CX(342220) CX(342220) SetK22to20hTrackingOutputGain       ;def=18h
+  -          CX(342330) CX(342330) SetK23to30hTrackingAutoGain   ;blah ;def=30h
+  -          CX(342D28) CX(342D28) SetK2Dto28hFocusGainDownOutputGain  ;def=1Bh
+  -          CX(343E70) CX(343E70) SetK3Eto70hTrackingGainUpOutputGain ;def=57h
+  -          -          CX(34910000) NewScexStopReading      ;\
+  -          -          CX(3491x180) NewScexRandomKey(x)     ;
+  -          -          CX(34920000) NewScexFlushResyncOrSo  ; SCEX SPECIAL
+  -          -          CX(34944A00) NewScexInitValue1       ; see also:
+  -          -          CX(3498C000) NewScexInitValue2       ; CX(3C2080)
+  -          -          CX(349C1000) NewScexThis   ;\inverse ;
+  -          -          CX(349D1000) NewScexThat   ;/of COUT ;/
+  -          CX(34F000) CX(34F000) SetTRVSCto000h
+  -          CX(34Fxxx) CX(34Fxxx) SetFBIAStoNNNh
+  -----
+  -          CX(3740AA) CX(3740AA) SetSMto00h      ;\set SM to 0,6,7,9
+  -          CX(3746AA) CX(3746AA) SetSMto06h      ; (sled move voltage)
+  -          CX(3747AA) CX(3747AA) SetSMto07h      ; (and init several
+  -          CX(3749AA) CX(3749AA) SetSMto09h      ;/fixed settings)
+  -----
+  -          CX(380010) CX(380010) ModeMeasureTrackingZeroLevel ;\Measure modes
+  -          CX(380800) CX(380800) ModeMeasureRfZeroLevel       ; (accepted
+  -          CX(382000) CX(382000) ModeMeasureFocusZeroLevel    ; every 2.9ms)
+  -          CX(388000) CX(388000) ModeMeasureVcLevel           ;/
+  -          CX(38140A) CX(38140A) ModeCompensate
+  -          CX(38140E) CX(38140E) ModeCompensateAndTraverseCenter
+  -          CX(38148A) CX(38148A) ModeCompensateAndDefectOff
+  -          CX(38148E) CX(38148E) ModeCompensateAndDefectOffTraverseCenter
+  -          CX(3814AA) CX(3814AA) ModeCompensateAndStuffAndMeasureTraverse ;!
+  -          CX(38150A) CX(38150A) ModeCompensateAndTrackingAutoGain
+  -          CX(38150E) CX(38150E) ModeCompensateAndTrackingAutoGain
+  -          CX(38160A) CX(38160A) ModeCompensateAndFocusAutoGain
+  -----
+  -          CX(391E)   -          SenseRFDCinputSignalWithoutDAC  ;\rather
+  -          CX(3983)   -          SenseFEinputSignalWithDAC       ;/unused
+  -          CX(399C)   -          SenseTRVSCregisterWithDAC       ;\only if
+  -          CX(399D)   -          SenseFBIASregisterWithDAC       ;/TEST1=LOW
+  -----
+  -          CX(3A0000) CX(3A0000) FocusBiasAdditionOff            ;\
+  -          CX(3A4000) CX(3A4000) FocusBiasAdditionOn             ;/
+  -          CX(3B2250)!CX(3B7250)!InitOperationForMirrDfctFok <-- vC2/vC3 DIFF
+  -          CX(3C)  !!!CX(3C0080) TzcCoutSelectHPTZC;\ <--formerly CX(3C)
+  -          -       !!!CX(3C2080) TzcCoutSelectSCEX ;  <--special NewScex mode
+  -          CX(3D)  !!!CX(3C4080) TzcCoutSelectDTZC ;/ <--formerly CX(3D)
+  -          CX(3E0000) CX(3E0000) InitFilterBits                  ;\
+  -          CX(3E0008) CX(3E0008) InitFilterBitsInvalid           ;/
+  -          CX(3F0008) CX(3F0008) InitOtherStuff                  ;-
+  -----
+  CX(4000)   CX(4000)   CX(4000)   AutoSeqCancel
+  CX(4700)   CX(4700)   CX(4700)   AutoSeqFocusOn
+  CX(4800)   CX(4800)   CX(4800)   Forward1track
+  CX(4900)   CX(4900)   CX(4900)   Reverse1track
+  CX(4C00)   CX(4C00)   CX(4C00)   Forward2Ntrack
+  CX(4D00)   CX(4D00)   CX(4D00)   Reverse2Ntrack
+  -----
+  CX(54)     CX(54)     CX(54)     BlindBrakeOverflowTimer=4
+  CX(5A)     CX(5A)     CX(5A)     BlindBrakeOverflowTimer=A
+  CX(6100)   CX(6100)   CX(6100)   SledKickBrakeKickTimer
+  CX(70xxx0) CX(70xxx0) CX(70xxx0) TrackJumpCountSetting
+  CX(8180)   CX(8180)!!!CX(810408) MODE = Audio (CD-DA)
+  -          CX(8120)!!!CX(812400) MODE = Audio (CD-DA) (manual SPI bus access)
+  -          -          CX(810000/UNUSED)
+  -          -          CX(812000/UNUSED)
+  CX(8980)   CX(8980)   CX(890408) MODE = CDROM (Data)
+  -          -          CX(898000) MODE = CDROM (Data) (used on RESET)
+  CX(9B00)   CX(9B00)!!!CX(9B1000) NormalSpeed
+  CX(9F00)   CX(9F00)!!!CX(9F1000) DoubleSpeed
+  CX(A040)   CX(A040)   CX(A040)   Attentuation Off
+  CX(A140)   CX(A140)   CX(A140)   Attentuation -12 dB
+  CX(B01000) CX(B01000) CX(B01000) TraverseMonitorCounterSetting
+  CX(C600)   CX(C600)   CX(C600)   SpindleServoCoefficientSetting
+  CX(D7)     CX(D7)     CX(D70000) ClvControl (fixed)
+  CX(E0)     CX(E0)     CX(E00000) SpindleMotorStop
+  -          -          CX(E02000) <-- aka bugged CX(E0) with CRAP=2000h
+  CX(E6)     CX(E6)     CX(E60000) AutomaticNormal
+  CX(E8)     CX(E8)     CX(E80000) SpindleMotorForward
+  -          -          CX(E8crap) <-- aka bugged CX(E8) with CRAP=xxxxh
+  CX(EA)     CX(EA)     CX(EA0000) SpindleMotorReverse
+  -          -          CX(EAcrap) <-- aka bugged CX(EA) with CRAP=xxxxh
+  CX(EE)     CX(EE)     CX(EE0000) RoughServo
+  -----
+  CX(F)      CX(F)      CX(F)      Unused (N/A)
+  -----
+  CX(Xx)     CX(Xx)     CX(Xx)       ;\
+  CX(Xxxx)   CX(Xxxx)   CX(Xxxx)     ; TestCommand (cmd_19h_50h)
+  CX(Xxxxxx) CX(Xxxxxx) CX(Xxxxxx)   ;
+  -          -          CX(Xxxxxxxx) ;/
+  -          CX(Xxxxxx) CX(Xxxxxx) SerialSense, CX(Xxxx) with extra 8bit junk
+
+Note: for vC2, some CX(38xxxx) values may differ depending on +"set_mid_lsb_to_140Eh".
+For vC2, CX(Dx) and CX(Ex) should be officially zero-padded to CX(Dx00) and +CX(Ex00), but the vC2 BIOS doesn't do that, it still uses short 8bit form.
+For vC2, CX(Dx) and CX(Ex) should be apparently zero-padded to CX(Dx0000) and +CX(Ex0000), at least, the vC3 BIOS is doing so (except on some test comannds +that do still use the CX(Ex) short form).

+

Used Sense Values

+
  sense(30)  SEIN.BAL       ;vC2: SSTP
+  sense(38)  SEIN.GAIN      ;vC2: AGOK(AGT/AGF) or XAVEBSY(AVRG) or SSTP(else?)
+  sense(40)  XBUSY (low=AutoSeqBusy)
+  sense(50)  FOK   (high=FokusOkay)
+  sense(A0)  GFS   (high=GoodFrameSync, ie. CorrectPlaybackSpeed)
+  sense(C5)  COUT  (toggles each 100h 'tracks') (100h=selected via CX(B01000))
+  sense(EA)  /OV64 (low=EFM too long?)
+
+

CDROM Internal Coefficients (for CXD2545Q)

+

The CXD2545Q contains Preset Coefficients in internal ROM, which are copied to +internal Coefficient RAM shortly after Reset. CX(34xxxx) allows to change those +RAM settings, and CX(39xxxx) allows to readout some of those values serially.

+

CXD2545Q - Coefficient Preset Values

+
  Addr Val Expl.
+  K00  E0  Sled input gain
+  K01  81  Sled low boost filter A-H
+  K02  23  Sled low boost filter A-L
+  K03  7F  Sled low boost filter B-H
+  K04  6A  Sled low boost filter B-L
+  K05  10  Sled output gain
+  K06  14  Focus input gain
+  K07  30  Sled auto gain
+  K08  7F  Focus high cut filter A
+  K09  46  Focus high cut filter B
+  K0A  81  Focus low boost filter A-H
+  K0B  1C  Focus low boost filter A-L
+  K0C  7F  Focus low boost filter B-H
+  K0D  58  Focus low boost filter B-L
+  K0E  82  Focus phase compensate filter A
+  K0F  7F  Focus defect hold gain
+  K10  4E  Focus phase compensate filter B
+  K11  32  Focus output gain
+  K12  20  Anti shock input gain
+  K13  30  Focus auto gain
+  K14  80  HPTZC / Auto Gain High pass filter A
+  K15  77  HPTZC / Auto Gain High pass filter B
+  K16  80  Anti shock high pass filter A
+  K17  77  HPTZC / Auto Gain low pass filter B
+  K18  00  Fix (should not change this preset value)
+  K19  F1  Tracking input gain
+  K1A  7F  Tracking high cut filter A
+  K1B  3B  Tracking high cut filter B
+  K1C  81  Tracking low boost filter A-H
+  K1D  44  Tracking low boost filter A-L
+  K1E  7F  Tracking low boost filter B-H
+  K1F  5E  Tracking low boost filter B-L
+  K20  82  Tracking phase compensate filter A
+  K21  44  Tracking phase compensate filter B
+  K22  18  Tracking output gain
+  K23  30  Tracking auto gain
+  K24  7F  Focus gain down high cut filter A
+  K25  46  Focus gain down high cut filter B
+  K26  81  Focus gain down low boost filter A-H
+  K27  3A  Focus gain down low boost filter A-L
+  K28  7F  Focus gain down low boost filter B-H
+  K29  66  Focus gain down low boost filter B-L
+  K2A  82  Focus gain down phase compensate filter A
+  K2B  44  Focus gain down defect hold gain
+  K2C  4E  Focus gain down phase compensate filter B
+  K2D  1B  Focus gain down output gain
+  K2E  00  Not used
+  K2F  00  Not used
+  K30  80  Fix (should not change this preset value)
+  K31  66  Anti shock low pass filter B
+  K32  00  Not used
+  K33  7F  Anti shock high pass filter B-H
+  K34  6E  Anti shock high pass filter B-L
+  K35  20  Anti shock filter comparate gain
+  K36  7F  Tracking gain up2 high cut filter A
+  K37  3B  Tracking gain up2 high cut filter B
+  K38  80  Tracking gain up2 low boost filter A-H
+  K39  44  Tracking gain up2 low boost filter A-L
+  K3A  7F  Tracking gain up2 low boost filter B-H
+  K3B  77  Tracking gain up2 low boost filter B-L
+  K3C  86  Tracking gain up phase compensate filter A
+  K3D  0D  Tracking gain up phase compensate filter B
+  K3E  57  Tracking gain up output gain
+  K3F  00  Not used
+  K40  04  Tracking hold filter input gain
+  K41  7F  Tracking hold filter A-H
+  K42  7F  Tracking hold filter A-L
+  K43  79  Tracking hold filter B-H
+  K44  17  Tracking hold filter B-L
+  K45  6D  Tracking hold filter output gain
+  K46  00  Not used
+  K47  00  Not used
+  K48  02  Focus hold filter input gain
+  K49  7F  Focus hold filter A-H
+  K4A  7F  Focus hold filter A-L
+  K4B  79  Focus hold filter B-H
+  K4C  17  Focus hold filter B-L
+  K4D  54  Focus hold filter output gain
+  K4E  00  Not used
+  K4F  00  Not used
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cdromvideocdsvcd/index.html b/cdromvideocdsvcd/index.html new file mode 100644 index 0000000..1c92f90 --- /dev/null +++ b/cdromvideocdsvcd/index.html @@ -0,0 +1,2409 @@ + + + + + + + + + + + + + + + + + + + + + + + + CDROM Video CDs (VCD) - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

CDROM Video CDs (VCD)

+

VCDs are Video CDs with MPEG compression, yielding a playtime of 72 minutes per +disc (whole movies usually being stored on two CDs). VCDs are popular in asia +(as opposed to VHS tapes used in western world).

+

VCDs on Playstation

+

For the Playstation, the asian SCPH-5903 model includes a special daughterboard +with MPEG decoding hardware for playing VCDs.
+CDROM - Video CD Commands
+Pinouts - VCD Pinouts
+Without that hardware it has been widely believed to be impossible to play VCDs +on Playstations, although, as of 2017, it turned out that the Playstation's CPU +and MDEC decoder are fast enough for that purpose (when skipping B-frames, +rendering the movie in monochrome without colors, and reducing audio output to +11kHz/mono).

+

ISO Filesystem (Track 1)

+

VCD ISO Basic Files (INFO, ENTRIES, AVSEQnn, ISO Filesystem)
+VCD ISO Playback Control PBC Files (PSD, LOT, ITEMnnnn)
+VCD ISO Search Files (SCANDATA, SEARCH, TRACKS, SPICONTX)
+VCD ISO Misc files (CAPTnn, AUDIOnn, KARINFO, PICTURES, CDI)

+

MPEG Streams (Track 2 and up)

+

VCD MPEG-1 Multiplex Stream
+VCD MPEG-1 Video Stream
+XXX MPEG-1 Macroblocks
+VCD MP2 Audio Stream

+

VCD Versions & Variants

+

XXX

+

VCD ISO Basic Files (INFO, ENTRIES, AVSEQnn, ISO Filesystem)

+

Primary Volume Descriptor (00:02:16)

+

VCDs are having a standard ISO Primary Volume Descriptor, with some VCD +specific entries:
+

  008h 32  System Identifier (always "CD-RTOS CD-BRIDGE" for VCDs)
+  028h 32  Volume Identifier (often nonsense, eg. "" or "__" or "VolumeLabel")
+  23Eh 128 Application Identifier ("CDI/CDI_APPL.VCD;1" or "CDI/CDI_VCD.APP;1")
+  400h 8   CD-XA Identifying Signature ("CD-XA001" for PSX and VCD)
+
+There are some more differences to normal CDROMs:
+
  VCDs are using MODE2 (with 800h-byte and 914h-byte sectors)
+  MPEG videos are on extra data tracks (outside of the ISO area on Track 1)
+  Files in VCD or SVCD folders use fixed sectors numbers (00:04:00 and up)
+  All 16bit/32bit values in files in VCD,SVCD,EXT,etc are BIG-ENDIAN
+
+Due to the fixed sector numbers, VCDs players can completely ignore the ISO +filesystem with filenames and folders, and just address everything via sector +numbers (though accessing files in EXT and CDI folders seem to require using +the filesystem).

+

VCD\INFO.VCD or SVCD\INFO.SVD (00:04:00) (800h bytes, one sector)

+

  000h 8    ID "VIDEO_CD" for VCD (or "SUPERVCD"/"HQ-VCD  " for SVCD)
+  008h 1    Version             ;Version Major (01h) (or 02h for VCD 2.0)
+  009h 1    System Profile Tag  ;Version Minor (00h) (or 01h for VCD 1.1 or HQ)
+  00Ah 16   Album ID/Desc (name in ASCII, padded with SPC) (usually empty)
+  01Ah 2    Total Number of CDs in Album (1..N) ;\usually always 1,1 (even
+  01Ch 2    Number of this CD in Album   (1..N) ;/for movies with 2 discs)
+  01Eh 13   PAL Flags, 98x1bit, for each Track? (0=NTSC, 1=PAL)
+  02Bh 1    InfoStatusFlags (see below)
+ Below is usually zero-filled when not using PBC
+  02Ch 4    Size of PSD.VCD file (or PSD.SVD?) (0=None)
+  030h 3    First segment addr MM:SS:00 in BCD    (00:02:00 ???)
+  033h 1    Offset Multiplier for "PsdOffset" values in PSD.VCD (must be 8)
+  034h 2    Number of ListIDs in LOT.VCD file (1..7FFFh, plus 1 in some discs)
+  036h 2    Number of ITEMnnnn.DAT files (plus nonsense in some discs?)
+ Below is usually zero-filled (maybe exists on SVCD only?)
+  038h 1980 SegmentContent[1..1980] (b0-1=Audio, b2-4=Video, b5=Cont, b6-7=OGT)
+  7F4h 5*2  volume start time[0]: 5x16bit  ;aka playing_time[5] in seconds (?)
+  7FEh 2    Reserved (0)
+
+InfoStatusFlags at [02Bh] describes certain characteristics of the disc:
+
  bit0   Reserved, must be zero
+  bit1-2 Restriction (0=No, 1..3=Restricted category 1..3) (eg. "not for kids")
+  bit3   Special Information is encoded in the pictures, uh?
+  bit4   MPEG User Data is used for Closed Caption (user_data_cc) (0=No, 1=Yes)
+  bit5   Next Disc with PBC     (0=Start at ListID#1, 1=Start at ListID#2)
+  bit6   Next Disc without PBC  (0=Start at Track #2, 1=Start at Track #3)
+  bit7   Extended PBC available (0=No, 1=Yes... aka EXT\PSD_X exists?)
+
+Note: Bit5/6 are used only if the next disc has the same Album ID (eg. the +feature allows to skip copyright messages if the same message was already shown +on another disc).
+First_segment_addr: The location of the first sector of the Segment Play Item +Area [that is... the first ITEMnnnn.DAT file?], in the form mm:ss:00. Must be +00:00:00 if PSD size is zero. If PSD size is nonzero, but no segments used: +Usually set to 00:02:00.

+

VCD\ENTRIES.VCD or SVCD\ENTRIES.SVD (00:04:01) (800h bytes, one sector)

+

  000h 8     ID "ENTRYVCD" for VCD and SVCD (or "ENTRYSVD" for VCD30)
+  008h 1     Version               ;\same as in INFO.VCD/SVD
+  009h 1     System Profile Tag    ;/
+  00Ah 2     Number of Entries/Chapters (1..500)
+  00Ch 4*500 Entry[N] (Track 02h..99h, and MM:SS:FF) (all 4 bytes in BCD)
+  7DCh 36    Reserved (0)
+
+Version;
+
  0x02 --- VCD2.0
+  0x01 --- SVCD, should be same as version in INFO.SVD
+
+Sys_prof_tag;
+
  0x01 if VCD1.1
+  0x00 else
+

+

MPEGAV\AVSEQnn.DAT (pointers to max 98 MPEG-1 Tracks, nn=01..98) (for VCDs)

+

MPEG2\AVSEQnn.MPG (pointers to max 98 MPEG-2 Tracks, nn=01..98) (for SVCDs)

+

MPEGAV\AVSEQnn.MPG (pointers to WHATEVER) (as so on some SVCDs or VCD30?)

+

These filesystem entries contain pointers to the video tracks (that is, outside +of the ISO area on Track 1).
+Commercially made SVCDs can reportedly contain 7 folders: Autorun, Data, Ext, +Mpegav, Segment, Svcd and Vmp (ie. there's no MPEG2 folder on all SVCDs? though +that MPEGAV folder is said to contain a .MPG file instead of .DAT file).

+

VCD ISO Playback Control PBC Files (PSD, LOT, ITEMnnnn)

+

Playback Control (PBC) is an optional feature that allows to define menues, +pictures or text pages (whereas all those is internally just consisting of MPEG +compressed bitmaps; rather than of text characters).
+Presence of the PBC feature is indicated by PSD.VCD filesize entry (in +INFO.VCD) being nonzero. PBC seems to be supported by most VCDs (except older +discs from around 1997), however, many VCDs are merely including a single +PlayList entry for the movie track, without any further menues/extras.

+

VCD\PSD.VCD or SVCD\PSD.SVD (00:04:34 and up) (max 256 sectors)

+

The Descriptors in this file can be considered as being "program code". The +program is usually stuck on "executing" the current descriptor (eg. playing a +movie, or showing a selection menu) without automatically increasing the +program counter. Actual program flow occurs only if the user presses a button +(or upon selection timeouts), causing the program to "goto" to a new PsdOffset. +And, something does probably happen upon end-of-track/item... maybe that does +automatically trigger the Next button handler?
+

<B> PsdPlayListDescriptor (14+2*N bytes):</B>
+  00h 1   Type (10h=PlayList)
+  01h 1   Number of Items (noi)     ;for Start-of-Movie and Numeric-Input?
+  02h 2   ListID for this Descriptor (1..7FFFh)
+  04h 2   PsdOffset for Prev button                 (FFFFh=Disable)
+  06h 2   PsdOffset for Next button                 (FFFFh=Disable)
+  08h 2   PsdOffset for Return/back button          (FFFFh=Disable)
+  0Ah 2   Play time in 1/15s (=max 72.8 minutes) (or 0000h=full item)
+  0Ch 1   Delay time in "1s/10s" units after ;<-- uh, after? after what?
+  0Dh 1   Auto pause time in "1s/10s" units (used for each item in list if
+          the auto pause flag in a sector is true) [WHAT is that? Trigger bit?]
+  0Eh 2*N ItemID[N]  ;item number (0..599 or 1000..2979)
+          Entry 0 is for "start of movie" (usually 0002h=Track 2)
+          Entry 1..N-1 is for numeric input ?
+<B> PsdSelectionListDescriptor (20+2*N bytes, or 36+6*N bytes):</B>
+  00h      1   Type (18h=SELECTION_LIST, or 1Ah=EXT_SELECTION_LIST)
+  01h      1   Flags (bit0=SelectionArea, bit1=CommandList, bit2-7=Reserved)
+  02h      1   nos     <-- aka Number of Numeric-input selections ?
+  03h      1   bsn     <-- ?
+  04h      2   ListID for this Descriptor (1..7FFFh)
+  06h      2   PsdOffset for Prev button
+  08h      2   PsdOffset for Next button
+  0Ah      2   PsdOffset for Return/back button
+  0Ch      2   PsdOffset for Default button (uh, what is that?)
+  0Eh      2   PsdOffset for Timeout
+  10h      1   totime  <-- aka Timeout Time maybe? in WHAT units?
+  11h      1   loop    <-- aka ?
+  12h      2   itemid  <-- aka Item to be displayed during the selection?
+  14h      2*N PsdOffset[N] for Numeric-input ?
+ Below only for SVCDs (with Type=18h), or for Extended VCDs (with Type=1Ah):
+ (14h+2*N) 4   Area for Prev    (x1,y1,x2,y2)  ;\these extra entries exist for
+ (18h+2*N) 4   Area for Next    (x1,y1,x2,y2)  ; SVCDs with Type=18h, and
+ (1Ch+2*N) 4   Area for Return  (x1,y1,x2,y2)  ; Extended VCDs with Type=1Ah
+ (20h+2*N) 4   Area for Default (x1,y1,x2,y2)  ; (but do NOT exist for
+ (24h+2*N) 4*N Area[N]          (x1,y1,x2,y2)  ;/older VCDs with Type=18h)
+<B> PsdEndListDescriptor (8 bytes)</B>
+  00h 1     Type (1Fh=EndList)
+  01h 1     Next_disc   ;00h to stop PBC or NNh to switch to disc no NN (BCD!?)
+  02h 2     Item (0 or 1000..2979, should be still image, eg. Change Disc pic)
+  04h 4     Reserved (0)
+  N/A -     This descriptor doesn't have a ListID (unlike as other descriptors)
+<B> PsdCommandListDescriptor (5+2*N bytes)</B>
+  00h 1     Type (20h=CommandList)
+  01h 2     Command_count
+  03h 2     ListID for this Descriptor (1..7FFFh)
+  05h 2*N   command[EMPTY_ARRAY_SIZE]  ;uh, WHAT is a command?
+<B> PsdAlignmentPadding (after each list entry)</B>
+  00h 0..7  Padding to next 8-byte PsdOffset boundary (00h-filled)
+
+Delay values in "1s/10s" units (for PlayList[0Ch,0Dh]):
+
  1..60   --> wait "N" seconds
+  61..254 --> wait "(N-60)*10+60" seconds
+  255     --> wait infinite
+
+Item numbers (0..599 or 1000..2979) can be:
+
  0..1        - Play nothing
+  2..99       - Play Track 2..99 (TOC tracks, for AVSEQnn.DAT and AUDIOnn.DAT?)
+  100..599    - Play Entry 1..500 from table in ENTRIES file up to end of track
+  600..999    - Reserved
+  1000..2979  - Play SPI Segment Play Item 1..1980 (ITEMnnnn.DAT file)
+  2980..65535 - Reserved
+
+PsdOffset values can be:
+
  0..N   Offset within PSD.VCD file, in 8-byte units
+  FFFDh  PSD_OFS_MULTI_DEF_NO_NUM ;\uh, what is that?
+  FFFEh  PSD_OFS_MULTI_DEF        ;/
+  FFFFh  PSD_OFS_DISABLED         ;-no function assigned to the button
+
+For whatever reason, some PsdOffsets are specified as ListID (lid), these +ListID values must be translated to actual PsdOffset via the ListID Offset +Table (aka LOT.VCD/LOT.SVD file).

+

VCD\LOT.VCD or SVCD\LOT.SVD (00:04:02..33) (64Kbyte, 32 sectors)

+

The ListID Offset Table (LOT) allows to translate ListIDs to PsdOffsets. The +file is always 64Kbyte in size (unused entries should be set to FFFFh).
+The PSD.VCD file does also assign ListIDs to each descriptor (ie. instead of +using the LOT.VCD file, one could also scan all descriptors in PSD.VCD when +searching a specific ListID).
+

  0000h 2       Reserved (0)
+  0002h 2*7FFFh PsdOffset[1..7FFFh]  ;for ListID 1..7FFFh
+
+Note: ListID#1 is used as entrypoint to PSD.VCD when inserting a new disc (or +when inserting another disc of the SAME movie, the entrypoint can be ListID#2, +depending on the Next Disc flag in INFO.VCD).

+

SEGMENT\ITEMnnnn.DAT (Pictures, Menu screens) (nnnn=0001..1980)

+

These files contain Pictures/Menu screens referenced from PSD.VCD. The files +seem to be stored in FORM2 sectors (not FORM1). Unknown if the files are +located on Track 1.
+The content of the files seems to resemble short MPEG video clips (with only +one picture frame, or eventually with a few frames for short animations, +including audio in some cases). Still images are said to be allowed to use +twice the resolution of MPEG videos.

+

EXT\PSD_X.VCD or EXT\PSD_X.SVD (extended version of PSD.VCD)

+

EXT\LOT_X.VCD or EXT\LOT_X.SVD (extended version of LOT.VCD)

+

The "extended" files are often identical to the normal PSD/LOT files. The +difference is that, if disc uses SelectionLists, then PSD should use the normal +descriptor (18h), and PSD_X should use the extended descriptor (1Ah), the +latter one seems to be intended to allow to highlight the current menu +selection (particulary useful when using +/- buttons instead of Numeric Keypad +input). Note: Nethertheless, Muppets from Space uses descriptor 18h in PSD_X.
+Unknown if SVCDs do really have "extended" files, too (theoretically the VCD +extension should be a default feature for SVCDs).

+

Playback Control Issues

+

Although PBC was intended as "nice extra feature", many VCDs are containing +faulty PSD files. In general, VCD players should either leave PBC unsupported +(or at the very least, provide an option for disabling it).
+Red Dragon from 2003 uses extended selection lists, but crops PSD_X.VCD to the +same filesize as PSD.VCD.
+Muppets from Space from 1999 assigns weird functions to Prev/Next buttons (Next +wraps from Last Track to First Track, but Prev doesn't wrap from First to Last; +default Non-PBC Prev/Next functions are more user friendly).
+Sony's SCPH-5903 console refuses to display the HH:MM:SS playback time when +using PBC (instead it does only display a "PBC" logo).

+

VCD ISO Search Files (SCANDATA, SEARCH, TRACKS, SPICONTX)

+

Below files can help searching I-frames, and provide some info about the +content of Tracks and Segments.
+Essentially, searching I-frames is possible without these files - however, if +present, then the files may be useful in two cases: For discs with variable +bitrates (which isn't allowed on VCDs though), and, for CDROM firmwares that +don't support "inaccurate" seeking (like telling it to start reading anywhere +NEAR some MM:SS:FF value, so one could skip sectors till reaching an I-frame) +(ie. if the firmware insists on a "accurate" seek position, then it's best to +give it a known I-frame address).

+

Caution: Overlapping Sectors (!?!)

+

Reportedly the new SVCD files TRACKS.SVD and SEARCH.DAT are on these sectors:
+

  TRACKS_SVD_SECTOR = (PSD_VCD_SECTOR+1)    ;aka 2nd sector in PSD.SVD?
+  SEARCH_DAT_SECTOR = (TRACKS_SVD_SECTOR+1) ;aka 3rd..Nth sector in PSD.SVD?
+
+If that's correct, then the files would overlap with PSD.SVD (when PSD.SVD is +bigger than one sector), that would be weird, but possible (ie. the "PsdOffset" +in PSD.SVD would need to "skip" the region used by those two files).

+

EXT\SCANDATA.DAT (12+3*N bytes for VCD 2.0) (or 16+3*N+2*X+3*Y+3*Z for SVCD)

+

This file fulfills much the same purpose of the SEARCH.DAT file except that +this file is mandatory only if the System Profile Tag of the INFO.SVD file is +0x01 (HQ-VCD) and also that it contains sector addresses also for each video +Segment Play Items in addition to the regular MPEG tracks.
+

 SCANDATA.DAT Format for VCD 2.0 (12+3*N bytes):
+  000h 8    ID "SCAN_VCD"
+  008h 1    Version (02h for VCD 2.0)
+  009h 1    Reserved (0)
+  00Ah 2    Number of scan points (in 0.5s units) (max FFFFh = ca. 9.1 hours)
+  00Ch 3*N  Scan Point[0..N-1]  ;MM:SS:FF of closest I-frame
+ SCANDATA.DAT Format for SVCD (16+3*N+2*X+3*Y+3*Z bytes):
+  000h 8    ID "SCAN_VCD"
+  008h 1    Version (01h for SVCD)
+  009h 1    Reserved (0)
+  00Ah 2    scandata_count ;number of 3-byte entries in the table
+  00Ch 2    track_count    ;number of MPEG tracks on disc
+  00Eh 2    spi_count      ;number of consecutively recorded play item segments
+                           ; (as opposed to the number of segment play items).
+  010h 3*N  msf_t cum_playtimes[N]  ;cumulative playing time up to track N.
+                                    ; (track time just wraps at 99:59:74)
+  xxxh 2*X  spi_indexes[X]          ;Indexes into the following scandata table
+  xxxh 2    mpegtrack_start_index   ;Index into the following scandata table
+                                    ; (where the MPEG track scan points start)
+  xxxh 3*Y  The scandata table... [Y]  ;8bit Track Number and 16bit Index
+                uint8_t  track_num;      /* Track number as in TOC
+                uint16_t table_offset;   /* Index into scandata table
+  xxxh 3*Z  msf_t scandata_table[Z]  ;MM:SS:FF
+

+

SVCD\SEARCH.DAT (13+3*N bytes)

+

This file defines where the scan points are. It covers all mpeg tracks +together. A scan point at time T is the nearest I-picture in the MPEG stream to +the given time T. Scan points are given at every half-second for the entire +duration of the disc.
+

  000h 8    ID "SEARCHSV"
+  008h 1    Version (01h)
+  009h 1    Reserved (0)
+  00Ah 2    Number of scan points
+  00Ch 1    Time_interval (in units of 0.5 seconds) (must be 01h)
+  00Dh 3*N  Scan Point[0..N-1]  ;MM:SS:FF of closest I-frame
+
+Note: This SVCD file is about same as the old EXT\SCANDATA.DAT file on VCDs +(with one extra entry for Time Interval). Whilst, SVCDs are storing some +different stuff in EXT\SCANDATA.DAT (despite of the identical filename).

+

SVCD\TRACKS.SVD (11+4*N bytes) (or rarely:11+5*N bytes)

+

The TRACKS.SVD file contains a series of structures, one for each track, which +indicates the track's playing time (in sectors, not actually real time) and +contents.
+SVCD\TRACKS.SVD is a mandatory file which describes the numbers and types of +MPEG tracks on the disc.
+

 SVCD\TRACKS.SVD Format for SVCD (11+4*N bytes):
+  000h 8   ID "TRACKSVD"
+  008h 1   Version (01h)
+  009h 1   Reserved (0)
+  00Ah 1   Number of MPEG tracks (N)
+  00Bh 3*N Track playing_time[N]  (MM:SS:FF, in BCD)(in sectors, not real time)
+  0xxh 1*N TrackContent[N]  ;bit0-1=Audio,bit2-4=Video,bit5=Reserved,bit6-7=OGT
+ SVCD\TRACKS.SVD Format for VCD30 (11+5*N bytes) (some sort of SVCD-prototype):
+  000h 8   ID "TRACKSVD"
+  008h 1   Version (01h)
+  009h 1   Reserved (0)
+  00Ah 1   Number of MPEG tracks (N)
+  00Bh 5*N Cum_Playing_time and Content (MM:SS:FF in BCD, and OGT, Audio)
+

+

SVCD\SPICONTX.SVD (1000h bytes, two sectors)

+

Unknown if/when/where/why this file exists, possibly only on VCD30?
+Note: The same info can be stored in INFO.SVD at offsets [038h..7F3h].
+

  0000h 8       ID "SPICONSV"
+  0008h 1       Version (01h)
+  0009h 1       Reserved (0)
+  000Ah 2*1980  Segment Content[1..1980] (1st byte=OGT, 2nd byte=Audio)
+  0F82h 126     Reserved (0)
+

+

Content Flags for Segments and Tracks

+

For SVCD\INFO.SVD and SVCD\TRACKS.SVD (on SVCD) these are encoded in 1 byte:
+

  bit0-1  Audio characteristics:
+            0 = No MPEG audio stream
+            1 = One MPEG1 or MPEG2 audio stream without extension
+            2 = Two MPEG1 or MPEG2 audio streams without extension
+            3 = One MPEG2 multi-channel audio stream with extension
+  bit2-4  Video characteristics:
+            In TRACKS.SVD this must be 0,3,7 (no still pictures)
+            0 = No MPEG video data
+            1 = NTSC still picture
+            2 = NTSC Reserved (NTSC still pic hires?)
+            3 = NTSC motion picture
+            4 = Reserved
+            5 = PAL still picture
+            6 = PAL Reserved (PAL still pic hires?)
+            7 = PAL motion picture
+  bit5    Indicates segment is continuation of an item
+            In TRACKS.SVD this must be 0 (reserved)
+            0 = First or only segment of item
+            1 = Second or later segment of item
+  bit6-7  Overlay Graphics/Text (OGT):
+            0 = No OGT substream
+            1 = Sub-stream 0 available
+            2 = Sub-stream 0 & 1 available
+            3 = All OGT sub-substreams available
+
+For SPICONTX.SVD and SVCD\TRACKS.SVD (on VCD30) these are encoded in 2 bytes:
+
  1st byte = Audio characteristics        ;\probably same values as
+  2nd byte = Overlay Graphics/Text (OGT)  ;/in above bitfields?
+

+

VCD ISO Misc files (CAPTnn, AUDIOnn, KARINFO, PICTURES, CDI)

+

EXT\CAPTnn.DAT (Closed Caption data, aka subtitles) (SVCD only?)

+

VCDs with subtitles are usually/always having the subtitles encoded directly in +the picture frames (ie. in the MPEG macroblocks, rather than using the Closed +Caption feature).
+These CAPTnn.DAT files are intended for Closed Captions (eg. subtitles in +different languages and/or for deaf people).
+Alternately, the "user_data_cc" flag in INFO.VCD?/INFO.SVD can indicate to +store Closed Captions in MPEG User Data (with START_CODE=000001B2h=User Data) +instead of in EXT\CAPTnn.DAT. Either way, the format of those Closed Captions +is unknown.
+Moreover, Content can be flagged to have Overlay Graphics/Text (OGT), whatever +that is: it might be related to Closed Captions.
+Note: Reportedly CAPTnn.DAT can exist on VCDs and SVCDs (although the same +person reported that VCDs do not support subtitles, so that info sounds wrong).

+

CDDA\AUDIOnn.DAT (pointers to uncompressed CD Audio Tracks)

+

These filesystem entries contain pointers to uncompressed audio tracks tracks +(that is, outside of the ISO area on Track 1).
+Most VCDs don't have audio tracks (though some VCDs do contain empty CDDA +folders).
+Maybe the feature is occassionally used the other way around: Music discs +containing VCD clips as bonus feature?

+

KARAOKE\KARINFO.xxx (whatever)

+

The KARAOKE folder exists on many VCDs (about 50%), but it's usually/always +empty on all discs.
+Reportedly the folder can contain "KARINFO.xxx" files, but the purpose/format +of that files is unknown.
+Reportedly there are Midi VCDs (MVCDs) for karaoke, maybe those discs have +"KARINFO.xxx" files(?)

+

PICTURES\*.* (whatever)

+

Unknown purpose. The PICTURES folder has been spotted on one VCD (Wallace and +Gromit), but the folder was just empty.

+

CDI\*.* (some kind of GUI/driver for Philips CDI Players)

+

The CDI folder is some relict for Philips CDI Players, it isn't used by normal +VCD players, however, the CDI folder & files are included on most or all +VCDs.
+The path/name for the CDI executable is stored at offset 23Eh in the ISO +Primary Volume Descriptor (usually "CDI/CDI_APPL.VCD;1" or "CDI/CDI_VCD.APP;1") +(or accidentally "CDI_CDI_VCD.APP;1" on homebrew Nero discs).
+The files in the CDI folder are usually just some standard files (without any +customizations), however, there are some different revisions of these files:
+

<B> Revision A (spotted on two discs from 1997 and 1999):</B>
+  CDI_APPL.VCD   80702 bytes, 04-Mar-1996, CRC32=AE8FC5D0h  ;executable
+  VCD_BACK.DYV   92572 bytes, 18-Jul-1995, CRC32=00693E5Eh  ;whatever?
+  VCD_BTN.C8     93719 bytes, 18-Jul-1995, CRC32=FF0A636Ah  ;whatever?
+<B> Revision B (spotted on a disc from 2003):</B>
+  CDI_VCD.APP    20648 bytes, 00-Nul-0000  CRC32=DC885F70h  ;executable
+  CDI_FONT.FNT  145388 bytes, 00-Nul-0000  CRC32=FB4D63F4h  ;font?
+  CDI_ALL.RTF        ? bytes,              CRC32=?          ;realtimefile?
+  CDI_BUM.RTF        ? bytes,              CRC32=?          ;realtimefile?
+<B> Revision C (spotted on a disc from 2006, and homebrews from 2001 and 2017):</B>
+  CDI_VCD.APP   102400 bytes, 00-Nul-0000  CRC32=E91E128Dh  ;executable
+  CDI_VCD.CFG      193 bytes, 00-Nul-0000  CRC32=D1C6F7ADh  ;config/ascii
+  CDI_TEXT.FNT   13616 bytes, 00-Nul-0000  CRC32=BDC55E86h  ;font?
+  CDI_IMAG.RTF 1510028 bytes, 00-Nul-0000  CRC32=(RIFF)     ;realtimefile?
+
+CDI_VCD.CFG is some ASCII text file (with uncommon 0Dh,0Dh,0Ah line breaks), +the file could be customized to change things like GUI colors, but most or all +discs seem to contain the same file with CRC32=D1C6F7ADh. Note: The CFG file is +missing on the homebrew DemoVCD.
+CDI_IMAG.RTF is seen as 1510028 byte file under windows (that is, with a +windows RIFF header, and with data area containing the whole 930h bytes from +each sector; this includes the MM:SS:FF values from the sector header, so the +RTF file may look slightly different depending on which sectors it has been +stored on, although the files are usually exactly same apart from those +MM:SS:FF values). Note: The RTF file is cropped to 1324220 bytes (instead of +1510028) on the homebrew DemoVCD (apart from that, the file is same as normal).
+CDI_ALL.RTF and CDI_BUM.RTF cannot be read/copied under Windows 7 (which is +weirdly reporting them to use an "invalid MS-DOS function"; some people also +reported having CDI_IMAG.RTF files with similar problems). The reason is +unknown, maybe windows doesn't fully support the CD filesystem, or some VCDs +are violating the filesystem specs, or whatever... maybe windows is +mis-identifying certain RTF files as Rich Text Format files and tries to +prevent virus-infections by throwing a faked "MS-DOS" error message.

+

VCD MPEG-1 Multiplex Stream

+

Multiplex Stream & Sector Boundaries

+

The Multiplex stream is some higher level stream, intended to help to +distinguish between Audio- and Video-streams (which are enclosed in the +Multiplex stream). MPEG's are somewhat organized in "sectors", with sector size +varying for normal .mpg files and VCDs:
+

  VCD discs   --> Sector Size = 914h bytes (the discs MODE2/FORM2 sector size)
+  .mpg files  --> Sector Size = 800h bytes (regardless of physical sector size)
+
+Sectors are always beginning with a Multiplex Packet (and Multiplex Packets are +never crossing sector boundaries). If the amount of video data exceeds the +sector size, then it's split into several Multiplex packets, whereas, that may +happen anywhere in the video stream (ie. there can be Multiplex Headers +occurring even in the middle of Video packet).

+

MPEG-1 Multiplex Pack (sector header) (12 bytes)

+

The Pack Header is found at the begin of the stream (on VCDs, it's also found +at the begin of each sector). The SCR values might help on identifying the +current playback position, and, with the bitrate value, this could be also used +to compute the distance to another position (though there are other ways to +determine the position/bitrate, so the Pack is kinda useless).
+

 32bit PACK_START_CODE (000001BAh)                                      ;-4byte
+  2bit Fixed (00b for MPEG-1) (would be 01b for MPEG-2)                 ;\
+  2bit Fixed (10b)                                                      ;
+  3bit System Clock Reference, bit32-30  ;\                             ;
+  1bit Marker (1)                        ; System Clock Reference (SCR) ;
+ 15bit System Clock Reference, bit29-15  ; (intended Time,              ; 5byte
+  1bit Marker (1)                        ; in 90kHz clock cycles)       ;
+ 15bit System Clock Reference, bit14-0   ;/                             ;
+  1bit Marker (1)                                                       ;/
+  1bit Marker (1)                                                       ;\
+ 22bit Multiplex Rate (total bitrate of the stream, in 400bit/s units)  ; 3byte
+  1bit Marker (1)                                                       ;/
+

+

MPEG-1 Multiplex System Header (12+N*3 bytes)(optionally)(at start of stream)

+

The System Header is usally found after the first Pack at the begin of the +stream.
+

 32bit SYSTEM_HEADER_START_CODE (000001BBh)                             ;\6byte
+ 16bit Header Length minus 6 (in bytes) (0006h+N*3)                     ;/
+  1bit Marker (1)                                                       ;\
+ 22bit Rate bound (max multiplex rate of all packs in the stream,       ; 3byte
+  1bit Marker (1)                              in 400bit/s units)       ;/
+  6bit Audio Bound (max number of audio streams in this ISO stream)     ;\
+  1bit Fixed Flag (1=Fixed bitrate)                                     ; 1byte
+  1bit CSPS Flag  (1=Constrained)                                       ;/
+  1bit System Audio Lock Flag  XXX                                      ;\
+  1bit System Video Lock Flag  XXX                                      ; 1byte
+  1bit Marker (1)                                                       ;
+  5bit Video Bound (max number of video streams in this ISO stream)     ;/
+  8bit Reserved (FFh)                                                   ;-1byte
+
+Followed by N*3 bytes for the streams (each with first bit=set):
+
  8bit Stream ID (C0h..DFh=Audio, E0h..EFh=Video)                       ;\
+  2bit Fixed (11b)                                                      ; 3byte
+  1bit STD buffer scale (0=Mul128/audio, 1=Mul1024/video)               ;
+ 13bit STD buffer size  (largest required buffer over all packets)      ;/
+
+Terminated by a value with first bit=cleared (eg. next 000001xxh value).

+

MPEG-1 Multiplex Video/Audio/Special Packets (7..24 bytes, plus data)

+

These packets are encapsulating the lower-level Video/Audio streams.
+

  32bit  START (000001xxh BDh-BFh=Special, C0h-DFh=Audio, E0h-EFh=Video);\6byte
+  16bit  Packet Length minus 6 (in bytes) (1..18, plus data)            ;/
+
+If (and while) next two bits are 11b (0..16 padding bytes):
+
  (2bit) Fixed (11b, indicates presence of stuffing)       ;\optional 0..16byte
+  (6bit) Fixed (111111b)                                   ;/
+
+If next two bits are 01b (buffer size info):
+
  (2bit) Fixed (01b, indicates presence of buffer size)        ;\
+  (1bit) STD Buffer Scale (0=Mul128/audio, 1=Mul1024/video)    ; optional 2byte
+ (13bit) STD Buffer Size (for decoding, in above scale units)  ;/
+
+Always:
+
   2bit  Fixed (00b, indicates no further stuffing/buffer info);\
+   1bit  PTS Flag (Presentation Time Stamp)                    ; 0.5 bytes
+   1bit  DTS Flag (Decoding Time Stamp)                        ;/
+
+If PTS Flag set:
+
  (3bit) Presentation Time Stamp, bit32-30       ;\
+  (1bit) Marker (1)                              ; optional 4.5 bytes
+ (15bit) Presentation Time Stamp, bit29-15       ; (time when to output the
+  (1bit) Marker (1)                              ; the packet to audio/video
+ (15bit) Presentation Time Stamp, bit14-0        ; hardware, in 90kHz cycles)
+  (1bit) Marker (1)                              ;/
+
+If DTS Flag set (in this case PTS Flag must be also set):
+
  (4bit) Fixed (0001b)                           ;\
+  (3bit) Decoding Time Stamp, bit32-30           ; optional 5 bytes
+  (1bit) Marker (1)                              ; (recommended time when
+ (15bit) Decoding Time Stamp, bit29-15           ; to decode the block,
+  (1bit) Marker (1)                              ; in 90kHz cycles)
+ (15bit) Decoding Time Stamp, bit14-0            ;
+  (1bit) Marker (1)                              ;/
+
+If PTS and DTS Flags are both zero:
+
  (4bit) Fixed (1111b)                           ;-optional 0.5 bytes
+
+Always:
+
  ...  packet data bytes                         ;-data...(not crossing sector)
+
+Note: The first Multiplex Video Packet would usually start with a Sequence +Header Code (000001B3h), and the first Multiplex Audio Packet should always +start with an Audio Sync Word (FFFh).
+However, the size of the Multiplex packets does usually differ from the size of +the packets in the audio/video stream, so new Multiplex Packets may occur +anywhere in the middle of those streams (eg. in the middle of a video slice, +the next Multiplex Video packet would then begin with the remaining slice +bytes, rather than with a 000001xxh code; it's also possible that a Multiplex +Audio packet gets inserted in the middle of the video slice).
+The best (or easiest) way to get continous data for the lower level streams +might be to memcopy the data from Multiplex packets to separate Audio & +Video buffers.

+

MPEG-1 Multiplex End Code (4 bytes)

+

 32bit END_CODE (000001B9h)                                             ;-4byte
+
+This should occur at the end of the video. On a VCD it does also occur at the +end of each video track.

+

VCD MPEG-1 Video Stream

+

The Video stream is part of the Multiplex stream, meaning that the Video +packets preceeded (and interrupted) by Multiplex headers. Ie. before processing +the Video packets, one must first extract the video snippets from the Multiplex +stream (see previous chapter).

+

MPEG-1 Video Sequence Header (12, 76, or 140 bytes, ie. 12+N*64)

+

  32bit SEQUENCE_HEADER_CODE (000001B3h)                        ;-4byte
+  12bit Width in pixels  (1..4095)                              ;\3byte
+  12bit Height in pixels (1..2800, for max AFh slices)          ;/
+   4bit Aspect Ratio (01h..0Eh, see below)                      ;\1byte
+   4bit Framerate    (01h..08h, see below)                      ;/
+  18bit Bitrate (in 400bit/s units, 3FFFFh=variable rate)       ;\
+   1bit Marker (1)                                              ; 3byte
+  10bit VBV (required decoding memory size, in "16 kB" units)   ; +6bit
+   1bit Constrained Parameter Flag                              ;/
+   1bit Load Intra Q Matrix      (0=No, use Standard Matrix, 1=Yes, Custom)
+
+Next 64byte only when above bit was set:
+
 (64byte) Intra Quantizer Matrix (64 x 8bit, unsigned) (in zigzag order)
+   1bit Load Non-Intra Q Matrix  (0=No, use Standard Matrix, 1=Yes, Custom)
+
+Next 64byte only when above bit was set:
+
 (64byte) Non-Intra Quantizer Matrix (64 x 8bit, unsigned) (in zigzag order)
+
+Aspect Ratio values:
+
  0     -       ;forbidden
+  1     1.0     ;square pixels
+  2     0.6735  ;0.6735
+  3     0.7031  ;16:9, 625 line, PAL
+  4     0.7615  ;0.7615
+  5     0.8055  ;0.8055
+  6     0.8437  ;16:9, 525 line, NTSC
+  7     0.8935  ;0.8935
+  8     0.9157  ;4:3, 625 line, PAL, CCIR601
+  9     0.9815  ;0.9815
+  10    1.0255  ;1.0255
+  11    1.0695  ;1.0695
+  12    1.0950  ;4:3, 525 line, NTSC, CCIR601
+  13    1.1575  ;1.1575
+  14    1.2015  ;1.2015
+  15    -       ;reserved
+
+Frame Rate values:
+
  0     -                     ;forbidden
+  1     23.976 (24000/1001)   ;NTSC encapsulated film rate
+  2     24.0                  ;Standard international cinema film rate
+  3     25.0                  ;PAL  video frame rate (625/50)
+  4     29.97  (30000/1001)   ;NTSC video frame rate
+  5     30.0                  ;NTSC video frame rate drop-frame (525/60)
+  6     50.0                  ;PAL  double frame rate/progressive
+  7     59.94  (60000/1001)   ;NTSC double frame rate
+  8     60.0                  ;NTSC double frame rate drop-frame
+  9-15  -                     ;reserved
+

+

MPEG-1 Video Group of Pictures (GOP) (8 bytes) XXX...

+
 32bit GROUP_START_CODE (000001B8h)
+  1bit Drop Frame (1=drop this frame; for reducing 30 fps to 29.97 fps)
+  5bit Time Code Hours   (0..23)
+  6bit Time Code Minutes (0..59)
+  1bit Marker (1)
+  6bit Time Code Seconds (0..59)
+  6bit Time Code Picture (0..59)
+  1bit Closed GOP
+  1bit Broken Link
+
+

MPEG-1 Video Picture Header XXX...

+

  32bit  PICTURE_START_CODE (00000100h)                           ;\
+  10bit  Temporal Reference (display order, 0..3FFh)              ; 61bit
+   3bit  Coding Type (0=Invalid, 1=I, 2=P, 3=B, 4=D, 5-7=Reserved);
+  16bit  VBV Delay (in 90kHz cycles, FFFFh=variable bitrate)      ;/
+
+If Coding Type is 2 or 3 (P-Frame or B-Frame):
+
  (1bit) full fel forward vector   (0=half pix, 1=full pix)     ;\optional 4bit
+  (3bit) forward f code            (0=invalid, 1..7=0..6bits)   ;/
+
+If Coding Type is 3 (B-Frame):
+
  (1bit) full backward vector                                   ;\optional 4bit
+  (3bit) backward f code                                        ;/
+
+If (and while) next bit is set:
+
  (1bit) Fixed (1, indicates presence of Extra Info)            ;\opt. N*9bit
+  (8bit) Extra Information                                      ;/
+
+End of Extra:
+
   1bit  Fixed (0, indicates no further Extra Info)             ;-1bit
+ 0-7bit  Padding to byte boundary (0)                           ;-0..7bit
+
+Coding Type values:
+
  0  Forbidden
+  1  I - Intra Coded                      (full image)
+  2  P - Predictive Coded                 (based on prev I or P frame)
+  3  B - Bidirectionally Predictive Coded (based on prev+next I or P frame)
+  4  D - DC Intra Coded                   (don't care, lowres thumbnail)
+  5  Reserved
+  6  Reserved
+  7  Reserved
+

+

Frame Order

+

  DISPLAY ORDER:
+  I B B B P B B B P B B B P B B B I B B B P B B B P B B B P B B B ...
+  |       |_______|_______|       |       |_______|_______|
+  |               |               |               |
+  I-Frame         P-frames        I-Frame         P-frames
+
+The B-fames require to know the next P- (or I-) frame in advance, for that +reason, the frames are stored as "PBBB" (although being played as "BBBP"):
+
  STORAGE ORDER:
+  I P B B B P B B B P B B B I B B B P B B B P B B B P B B B ...
+  | |_______|_______|       |       |_______|_______|
+  |         |               |               |
+  I-Frame   P-frames        I-Frame         P-frames
+

+

MPEG-1 Video Slice

+

Slices are containing the actual 16x16 pixel Macro Blocks. Usually a Slice +contains one horizontal line - although, theoretically, it could be longer or +shorter, ie. a slice could wrap to next line, or a line could be split into +several slices (with the leading "MBA Increment" value greater than 1 to define +the horizontal start offset).
+

  32bit  PACK_START_CODE (000001xxh; xx=01h..AFh; vertical index) ;-4byte
+   5bit  Quantizer Scale (1..31) (may be later changed by blocks) ;-5bit
+
+If (and while) next bit is set:
+
  (1bit) Fixed (1, indicates presence of Extra Info)              ;\opt. N*9bit
+  (8bit) Extra Information                                        ;/
+
+End of Extra:
+
   1bit  Fixed (0, indicates no further Extra Info)               ;-1bit
+
+If (and while) next 23bit are nonzero (ie. until next 000001xxh):
+
   ...   Macroblock (within horizontal line)                      ;...
+
+Final padding:
+
 0-7bit  Padding to byte boundary (0)                             ;-0..7bit
+

+

MPEG-1 Video Group/Sequence Extension Data (reserved)

+

MPEG-1 Video User Data (optional)

+

 32bit START_CODE (000001B2h=User Data, 000001B5h=Extension Data)       ;-4byte
+   ... data (end is signaled by presence of next 000001xxh code)        ;-data
+
+User Data can contain Closed Captions (see flag in VCD\INFO.VCD or +SVCD\INFO.SVD).
+User Data contains 11h-byte "Created with Nero" in some homebrew discs.

+

MPEG-1 Video Sequence End Code (4 bytes)

+
  32bit SEQUENCE_END_CODE (000001B7h)                                   ;-4byte
+
+

MPEG-1 Video 4:2:0 Macroblock

+

         N*11bit  Macroblock_address_increase escape/stuffing codes (if any)
+         1..11bit Macroblock_address_increase
+         1-6bit   Macroblock_type
+         5bit     Quantizer_scale
+         ...      Motion_vector
+         3-9bit   Coded_block_pattern
+         ...      Block(i)
+
+Aka...
+
  Addr Incr
+  Type
+  Motion Vector
+  QScale
+  CBP
+  Block b0 (Y1)
+  Block b1 (Y2)
+  Block b2 (Y3)
+  Block b3 (Y4)
+  Block b4 (Cb)
+  Block b5 (Cr)
+

+

VCD MP2 Audio Stream

+

VCD video discs and .mpg movie files are having the MP2 Audio Stream enclosed +in the Multiplex stream (whilst .mp2 audio files may contain raw MP2 data +without Multiplex stream).

+

Each MP2 frame is starting with a FFFh syncword (which is always located on a +byte boundary). Unfortunately, the value FFFh can also occur anywhere in the +audio data (eg. a 16bit sample with value 3FFCh).
+So, when starting mid-stream, one will need some guessing when searching a +valid syncword. The best method is to compute the frame size (based on the +supposed frame header), and then to check if supposed frame begins AND ends +with a sync word. Moreover, one could check for invalid sample rate values in +the frame header, or invalid "groupings" in the frame's data part.
+VCDs are conventionally having three audio frames encoded in one CDROM sector, +so the first syncword can be simply found right after the multiplex packet +header (though that might differ in some cases: VCD2.0 allows different audio +bitrates, and a CDROM sector could be theoretically shared for Audio and Video +data).

+

Overall MP2 Frame Format

+
  Header (32bit)
+  Optional CRC (16bit) (or 0bit if none)
+  Allocation Information
+  Scale Factor Selector Information
+  Scale Factors
+  Data
+
+

MP2 Header

+
  12bit Syncword (FFFh)                                         ;\
+  1bit  Revision (0=MPEG-2, 1=MPEG-1)                           ; 2 bytes
+  2bit  Layer (2=Audio LayerII)                   ;for VCDs     ;
+              (3=LayerI, 1=LayerIII, 0=reserved)  ;not on VCDs  ;
+  1bit  Protection_bit (1=no crc)                               ;/
+  4bit  Bitrate_index (1..14)                                   ;\
+          (0=free format, 15=reserved)                          ;
+  2bit  Sampling_frequency                                      ; 1 byte
+  1bit  Padding_bit                                             ;
+  1bit  Private_bit                                             ;/
+  2bit  Mode                                                    ;\
+  2bit  Mode_extension (aka bound)                              ;
+  1bit  Copyright                                               ; 1 byte
+  1bit  Original/home                                           ;
+  2bit  Emphasis                                                ;/
+
+

MP2 Checksum (optional)

+
  16bit CRC
+
+

Allocation Information

+

Scale Factor Selector Information

+

Scale Factors

+

Data

+
  XXX...
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cheatdevices/index.html b/cheatdevices/index.html new file mode 100644 index 0000000..99bdf8b --- /dev/null +++ b/cheatdevices/index.html @@ -0,0 +1,2861 @@ + + + + + + + + + + + + + + + + + + + + + + + + Cheat Devices - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Cheat Devices

+

Action Replay, GameShark, Gamebuster, GoldFinger, Equalizer (Datel/clones)

+

The Datel devices exist in various official/cloned hardware revisions, the DB25 +connector requires a special Comms Link ISA card (or a "FiveWire" mod for +making it compatible with normal PC parallel ports). Later "PAR3" models are +said to not require Comms Link, and do thus probably work directly with normal +parallel ports).
+Cheat Devices - Datel I/O
+Cheat Devices - Datel DB25 Comms Link Protocol
+Cheat Devices - Datel Chipset Pinouts
+Cheat Devices - Datel Cheat Code Format

+

Xplorer/Xploder/X-Terminator (FCD/Blaze)

+

The FCD/Blaze devices are all same hardware-wise (with some cosmetic PCB +revisions, and with extra SRAM and bigger FLASH installed in some carts). The +DB25 connector can be directly connected to a PC parallel port.
+Cheat Devices - Xplorer Memory and I/O Map
+Cheat Devices - Xplorer DB25 Parallel Port Function Summary
+Cheat Devices - Xplorer DB25 Parallel Port Command Handler
+Cheat Devices - Xplorer DB25 Parallel Port Low Level Transfer Protocol
+Cheat Devices - Xplorer Versions
+Cheat Devices - Xplorer Chipset Pinouts
+Cheat Devices - Xplorer Cheat Code Format
+Cheat Devices - Xplorer Cheat Code and ROM-Image Decryption

+

FLASH Chips (for both Xplorer and Datel)

+

Cheat Devices - FLASH/EEPROMs

+

http://gamehacking.org/faqs/hackv500c.html - cheat code formats
+http://doc.kodewerx.org/hacking_psx.html - cheat code formats
+http://xianaix.net/museum.htm - around 64 bios versions
+http://www.murraymoffatt.com/playstation-xplorer.html - xplorer bioses

+

Separating between Gameshark and Xplorer Codes

+
  First Digit  Usage
+  3,8          Same for Gameshark & Xplorer (for Xplorer: can be encrypted)
+  1,2,C,D,E    Gameshark
+  4,6,7,9,B,F  Xplorer
+  0,5          Meaning differs for Gameshark & Xplorer
+  A            Unused
+
+

Codebreaker
+Megacom Power Replay III Game Enhancer

+

Cheat Devices - Datel I/O

+

Datel Memory and I/O Map (for PAR2 or so)

+
  1F000000h-1F01FFFFh R/W Flash (first 128K)
+  1F020010h           R   Comms Link STB pin state (bit0)
+  1F020018h           R   Switch Setting (bit0: 0=Off, 1=On)
+  1F040000h-1F05FFFFh R/W Flash (second 128K) + feedback area (see below)
+  1F060000h           R   Comms Link data in (byte)
+  1F060008h           W   Comms Link data out (byte, pulses ACK to Comms Link)
+
+

Datel PAR1

+

Original PAR1 might have supported only 128K FLASH (?) if so, the I/O ports are +probably same as above, but without the "second 128K" FLASH area.

+

Datel PAR3

+

The PAR3 version is said to work with parallel ports (not needing the Comms +Link IDA card), and said to support more FLASH with bankswitching, so the I/O +ports must work somehow entirely different as described above.
+Some notes from a (poorly translated) japanese document:
+PAR3 Memory:
+

  1f000000-1f01ffff ROM. Change in bank switching.
+  1f020000-1f03ffff ROM. Change in bank switching.
+  1f040000-1f05ffff whopping RAM. It is able to use.
+  1f060000-1f06003f I/O. Intently mirror to the subsequent 1f07ffff.
+
+PAR3 I/O:
+
  1f060000 for reception. (1f060000 use only.) All bytes same treatment like.
+             It is 01h in the state that does not connected anything.
+  1f060008 for transmission. (1f060008 use only.) This is ffh in the state
+             that does not connected anything.
+  1f060010 during data reception it will stand the least significant bit.
+             Usually is fe.
+  1f060018 state of the push button. In not pressed and fefefefefefefefe,
+             it will Ost ffffffffffffffff.
+  1f060020 I think 1f060020 unused. It is ffffffffffffffff.
+  1f060028 I think 1f060028 unused. It is ffffffffffffffff.
+  1f060030 bank switching. 1 put and run-time of the ROM, and changes to the
+             3's and the start-up of the ROM.
+  1f060038 would be what? It is lbu. Like there is a meaning bits 0 and 1.
+             It was fcfcfcfcfcfcfcfc. I think that it is bank cult.
+

+ +

Boot Command Handler

+

The Boot Command Handler is executed once at Pre-Boot, and also (at least in +some firmware versions) once before displaying the GUI. Following command(s) +can be sent from PC side:
+

  Repeatedly send 8bit "W", until receiving "R"
+  Repeatedly send 8bit "B", until receiving "W"
+  Send 8bit command "X" (upload/exec) or "U" (upload/flash), and receive ECHO
+  Send 32bit ADDRESS,  and receive ECHO or "BX" (bad command)
+  Send 32bit LENGTH,   and receive ECHO
+  Send DATA[LENGTH],   and receive ECHO
+  Send 16bit CHECKSUM, and receive ECHO
+  (for upload/flash and if checksum was good, PSX will now BURN ADDR,LENGTH)
+  Send 16bit DUMMY, and receive "OK"/"BC"/"BF" (okay, bad chksum, bad flash)
+  (for upload/exec and if checksum was good, PSX will now CALL ADDR)
+  (thereafter, PAR2.0 and up will reboot via jmp BFC00000h)
+
+Data is always transferred as byte-pair (send one byte, receive one byte), +16bit/32bit values are transferred MSB first (with ECHO after each byte).
+The upload/exec command is supported by both Datel and Caetla, the upload/flash +command is supported by Datel only (but it's totally bugged in PAR1.99, and +might also have upwards compatiblity issues in later versions, so it's better +to upload a custom flash function via upload/exec instead of using +upload/flash).
+The 16bit checksum is all DATA[len] bytes added together, and then ANDed with +0FFFh (ie. actually only 12bit wide).

+ +

There must be some further command handler(s) after the Boot Command Handler, +with support for additional cheat related commands, and (at least in Caetla) +with support for uploading EXE files with Kernel functions installed (the Boot +Command Handler at Pre-Boot time can also upload EXE code, but doesn't have +Kernel installed).
+Original Datel commands for Menu/Game mode are unknown. The Caetla commands are +documented in japanese, and there are also two english translations:
+http://www.psxdev.net/forum/viewtopic.php?f=49&t=370 - good (though +incomplete)
+http://www.psxdev.net/forum/viewtopic.php?f=53&t=462#p6849 - very bad +(beware)

+

Cheat Devices - Datel Chipset Pinouts

+

There appear to be numerous Datel hardware revisions (and possibly numerous +Datel clones). So this chapter is unlikely to cover all hardware revisions.
+

 PSX Expansion cards:
+  PCB              Controller         FLASH      DB25  spotted by
+  DATEL REF 1215   GAL + 74HC245      128K+128K  yes   Type79
+  DATEL REF 1288   DATEL ASIC1        256K       yes   nocash
+  DATEL xxx?       GAL + PIC + HC245  128K       yes   CharlesMacD
+  noname?          GAL + 74HC245      256K+0K    yes   Type79
+  DATEL REF 1324   lots of chips?     lots?      no    CyrusDevX
+  DATEL REF 1326   lots of chips?     lots?      yes   Type79
+  PS-121 ZISAN     GAL + PIC? + HC245 128K       yes   Kryptonick
+ Comms Link ISA cards:
+  PCB                              Chipset                     spotted by
+  DATEL COMMS LINK, XXX?           blurry SMD chipset?         lowres photo
+  DATEL REF 1113, IBM SATURN LINK  1x74HC74, 2x74HC373, 1xXXX? Type79
+  EMS, PCCOM                       1x74HC74, 2x74HC373, 1xXXX? jokergameth
+ DIY Alternatives to Comms Link
+  FiveWire    ;simple hardware mod for use with parallel ports, for SPP/EPP
+  FreeWing    ;parallel port adaptor, lots of 74xxx TTL chips, for SPP/EPP
+  ExStand     ;parallel port adaptor, lots of 74xxx TTL chips, for EPP
+  CommLinkUSB ;USB adaptor, Buy-and-Diy technology (adafruit/teensy based)
+

+

DATEL REF1288 board (with DATEL ASIC1 chip)

+

The ASIC1 chip is found in this hardware:
+

  Label: "EQUALIZER, EVEN THE ODDS" (sticker on outside of case)
+  Case:  "DATEL ENGLAND" (printed inside of case)
+  PCB:   "DATEL REF1288 SONY SONYPSX2meg"
+  U:  44pin "DATEL, ASIC1, A8B1944A, 9832"       ;custom logic chip
+  U:  32pin "SST, 29EE020, 150-4C-NH, 981918-D"  ;256Kx8 EEPROM
+  U:  8pin  "83BA, LM78L, 05ACM"                 ;5V voltage regulator
+  CN: 25pin DB25 connector (for Comms Link ISA card)
+  CN: 68pin PSX expansion port connector
+  SW: 3pin  Switch
+
+The ASIC1 is basically same as the PAL/GAL on other boards, with the 74HC245 +transceiver intergrated; the ASIC1 is using a 44pin PLCC package, with pin1 +being upper-middle, and pin7 being upper-left. Pinouts are:
+
  7  D0           18 DB25.2.DATA0    29 D0 (same as pin7)    40 A3
+  8  D1           19 DB25.3.DATA1    30 EERPROM./WE          41 A4
+  9  D2           20 DB25.4.DATA2    31 /WR                  42 /EXP
+  10 GND          21 GND             32 GND                  43 GND
+  11 D3           22 DB25.5.DATA3    33 /RD                  44 A17
+  12 D4           23 DB25.6.DATA4    34 /MODE ("jumper")     1  A18
+  13 D5           24 DB25.7.DATA5    35 VCC                  2  GND
+  14 VCC          25 VCC             36 DB25.11.ACK          3  VCC
+  15 D6           26 DB25.8.DATA6    37 ?                    4  EEPROM./OE
+  16 VCC          27 DB25.9.DATA7    38 VCC                  5  DB25.10.STB
+  17 D7           28 EEPROM./CS      39 ?                    6  SWITCH
+
+D0 is wired to both pin7 and pin29. The /MODE pin is NC (but could be GNDed via +the two solder points in middle of the PCB). The SWITCH has 10K pullup (can can +get GNDed depending on switch setting).

+

PALCE20V8 Cuthbert Action Replay schematic (from hitmen webpage)

+
  1-NC         8-NC         15-NC                    22-NC
+  2-FBIN       9-CPU.A4     16-GNDed                 23-FLASH./WE
+  3-CPU.A17    10-CPU./EXP  17-DB25.pin10 (PAR.STB)  24-FBOUT
+  4-CPU./WR    11-CPU.A3    18-FLASH./CS             25-FLASH./OE (and BUF.DIR)
+  5-CPU./RD    12-CPU.A5    19-DB25.pin11 (PAR.ACK)  26-BUF./EN
+  6-CPU.A18    13-SWITCH    20-CPU.D0                27-unused
+  7-CPU.A20    14-GND       21-FLASH.A17             28-VCC
+
+

Charles MacDonald Game Shark schematic

+

  1-FBIN       7-CPU.A4.NC?    13-GNDed       19-FLASH./WE
+  2-PIC.RC1    8-CPU./EXP.NC?  14-PAR.STB     20-FBOUT
+  3-CPU./WR    9-CPU.A3        15-PIC.RA0     21-BUF.DIR
+  4-CPU./RD    10-CPU.A2       16-PAR.ACK     22-BUF./OE
+  5-CPU.A18    11-SWITCH       17-CPU.D0      23-PIC.RC0
+  6-CPU.A17    12-GND          18-FLASH./OE   24-VCC
+
+Uhm, schematic shows "PAR.ACK" instead of "BUF.DIR" as transceiver direction?
+The 24pin PAL in Charles schematic does actually seem to be a 28pin PLCC GAL in +actual hardware (which has four NC pins, hence the 24pin notation in the +schematic).
+The three PIC pins connect to a 28pin PIC16C55 microprocessor (unknown +purpose). Most of the PIC pins are NC (apart from the above three signals, plus +supply, plus OSC ... derived from some oscillator located "behind" the DB25 +connector?).

+

Charles MacDonald Gold Finger schematic

+

  1-FBIN       6-CPU.A17       11-CPU.A2     16-FBOUT
+  2-SWITCH     7-CPU.A4.NC?    12-PAR.ACK    17-CPU.A20
+  3-CPU./WR    8-CPU./EXP.NC?  13-CPU.D0     18-PAR.STB
+  4-CPU./RD    9-CPU.A3        14-FLASH./OE  19-BUF./OE
+  5-CPU.A18    10-GND          15-FLASH./WE  20-VCC
+
+Note: This is a datel clone, without "BUF.DIR" signal (instead, the transceiver +DIR pin is wired to "PAR.ACK"; it's probably functionally same as real datel +hardware, assuming that "PAR.ACK" is only a short pulse during writing; then +reading should be possible anytime else).

+ +

PAL
+

  1-/STATUS    7-ISA.A6        13-JP2        19-NC
+  2-ISA.A1     8-ISA.A7        14-ISA.A9     20-PCWR
+  3-ISA.A2     9-ISA.A8        15-NC         21-/PCRD
+  4-ISA.A3     10-ISA.AEN      16-ISA./IOW   22-NC
+  5-ISA.A4     11-JP1          17-/IRQ       23-ISA./IOR
+  6-ISA.A5     12-GND          18-ISA.D0     24-VCC
+
+The JP1/JP2 pins allow to select Port 300h,310h,320h,330h via two jumpers. The +/IRQ pin could be forward to ISA./IRQ2..7 via six jumpers (but the feature is +ununsed and the six jumpers aren't installed at all).

+

DB25 Connector

+
  Pin  Parallel Port   CommsLink (PC)        cable         PAR (PSX)
+  1    /STB    ---->   "strobe" ----.---o-------------o--    -- NC
+  2-9  DATA <-/---->   DATA     <-- | --o-------------o-------> DATA
+  10   /ACK    <----   "strobe" ----'---o-------------o-------> "strobe"
+  11   BUSY    <----   "ack"    <-------o-------------o-------- "ack"
+  12   PE      <----   NC       --    --o-------------o--    -- NC
+  13   SLCT    <----   NC       --    --o-------------o--    -- NC
+  14   /AUTOLF ---->   NC       --    --o-------------o--.  .-- GNDed
+  15   /ERROR  <----   NC       --    --o-------------o--.  .-- GNDed
+  16   /INIT   ---->   NC       --    --o-------------o--.  .-- GNDed
+  17   /SELECT ---->   GNDed    --.  .--o-------------o--.  .-- GNDed
+  18-25 GND    -----   GND      --'--'--o-------------o--'--'-- GND
+
+

nocash FiveWire mod (for connecting datel expansion cart to parallel port)

+
  disconnect DB25.pin14,15,16,17 from GND (may require to desolder the DB25)
+  repair any GND connections that were "routed through" above pins
+  wire DB25.pin1./STB    to DB25.pin10./ACK
+  wire DB25.pin16./INIT  to PSX.EXPANSION.pin2./RESET
+  wire DB25.pin15./ERROR to PSX.EXPANSION.pin28.A20
+  wire DB25.pin13.SLCT   to PSX.EXPANSION.pin62.A21
+  wire DB25.pin12.PE     to PSX.EXPANSION.pin29.A22
+
+

Cheat Devices - Datel Cheat Code Format

+

PSX Gameshark Code Format

+
  30aaaaaa 00dd   ;-8bit Write  [aaaaaa]=dd
+  80aaaaaa dddd   ;-16bit Write [aaaaaa]=dddd
+
+

Below for v2.2 and up only

+
  D0aaaaaa dddd   ;-16bit/Equal     If dddd=[aaaaaa] then (exec next code)
+  D1aaaaaa dddd   ;-16bit/NotEqual  If dddd<>[aaaaaa] then (exec next code)
+  D2aaaaaa dddd   ;-16bit/Less      If dddd<[aaaaaa] then (exec next code)
+  D3aaaaaa dddd   ;-16bit/Greater   If dddd>[aaaaaa] then (exec next code)
+  E0aaaaaa 00dd   ;-8bit/Equal      If dd=[aaaaaa] then (exec next code)
+  E1aaaaaa 00dd   ;-8bit/NotEqual   If dd<>[aaaaaa] then (exec next code)
+  E2aaaaaa 00dd   ;-8bit/Less       If dd<[aaaaaa] then (exec next code)
+  E3aaaaaa 00dd   ;-8bit/Greater    If dd>[aaaaaa] then (exec next code)
+  10aaaaaa dddd   ;-16bit Increment [aaaaaa]=[aaaaaa]+dddd
+  11aaaaaa dddd   ;-16bit Decrement [aaaaaa]=[aaaaaa]-dddd
+  20aaaaaa 00dd   ;-8bit Increment  [aaaaaa]=[aaaaaa]+dd
+  21aaaaaa 00dd   ;-8bit Decrement  [aaaaaa]=[aaaaaa]-dd
+
+

Below for v2.41 and up only

+
  D4000000 dddd   ;-Buttons/If  If dddd=JoypadButtons then (exec next code)
+  D5000000 dddd   ;-Buttons/On  If dddd=JoypadButtons then (turn on all codes)
+  D6000000 dddd   ;-Buttons/Off If dddd=JoypadButtons then (turn off all codes)
+  C0aaaaaa dddd   ;-If/On       If dddd=[aaaaaa] (turn on all codes)
+
+

Below probably v2.41, too (though other doc claims for v2.2)

+
  5000nnbb dddd   ;\Slide Code aka Patch Code aka Serial Repeater
+  aaaaaaaa ??ee   ;/for i=0 to nn-1, [aaaaaaaa+(i*bb)]=dddd+(i*??ee), next i
+  00000000 0000   ;-Dummy (do nothing?) needed between slides (CD version only)
+
+

Below probably v2.41, too (though other doc claims for ALL versions)

+
  C1000000 nnnn   ;-Delays activation of codes by nnnn (4000-5000 = 20-30 sec)
+  C2ssssss nnnn   ;\Copy ssss bytes from 80ssssss to 80tttttt
+  80tttttt 0000   ;/
+
+

Below from Caetla .341 release notes

+

These are probably caetla-specific, not official Datel-codes. In fact, Caetla +.341 itself might be an inofficial hacked version of Caetla .34 (?) so below +might be totally inofficial stuff:
+

  C3aaaaaa 0000     ;\Indirect 8bit Write  [[aaaaaa]+bbbb]=dd
+  9100bbbb 000000dd ;/
+  C3aaaaaa 0001     ;\Indirect 16bit Write [[aaaaaa]+bbbb]=dddd (Tomb Raider 2)
+  9100bbbb 0000dddd ;/
+  C3aaaaaa 0002     ;\Indirect 32bit Write [[aaaaaa]+bbbb]=dddddddd
+  9100bbbb dddddddd ;/
+  FFFFFFFF 0001     ;-Optional prefix for GameShark 2.2 codes(force non-caetla)
+  12aaaaaa dddddddd ;-32bit Increment [aaaaaa]=[aaaaaa]+dddddddd
+  22aaaaaa dddddddd ;-32bit Decrement [aaaaaa]=[aaaaaa]-dddddddd
+

+

Notes

+

A maximum of 30 increment/decrement codes can be used at a time.
+A maximum of 60 conditionals can be used at a time (this includes Cx codes).
+Increment/decrement codes should (must?) be used with conditionals.
+Unknown if greater/less conditionals are signed or unsigned.
+Unclear if greater/less compare dddd by [aaaaaa], or vice-versa.
+Unknown if 16bit codes do require memory alignment.

+

Cheat Devices - Xplorer Memory and I/O Map

+

Xplorer Memory Map

+

  1F000000h-1F03FFFFh.RW  First 256K of FLASH (fixed mapping)
+  1F040000h-1F05FFFFh.RW  Map-able: 2x128K FLASH or 4x128K SRAM (if any)
+  1F060000h-1F060007h.xx  I/O Ports
+  1F060008h-1F06FFFFh     Mirrors of I/O at 1F060000h..1F060007h
+  1F070000h-1F07FFFFh     Unused (open bus)
+
+FLASH can be 256Kbyte (normal), or 512Kbyte (in FX versions). When programming +FLASH chips: Observe that the carts can be fitted with chips from different +manufacturers, and, Xplorer carts can have either one or two 256K chips, or one +512K chip.
+SRAM can be 0Kbyte (normal/none), or 128Kbyte (in FX versions). The PCB +supports max 512K SRAM (but there aren't any carts having that much memory +installed).

+

Xplorer I/O Map

+
  1F005555h.W  FLASH Cmd 1st/3rd byte ;\for first FLASH chip
+  1F002AAAh.W  FLASH Cmd 2nd byte     ;/
+  1F045555h.W  FLASH Cmd 1st/3rd byte ;\for 2nd FLASH chip (if any)
+  1F042AAAh.W  FLASH Cmd 2nd byte     ;/
+  1F060000h.R  I/O - Switch Setting (bit0: 0=Off, 1=On)
+  1F060001h.R  I/O - 8bit Data from PC (bit0-7)
+  1F060001h.W  I/O - 8bit Latch (Data to PC, and Memory Mapping)
+                 0  DB25.pin13.SLCT   ;\
+                 1  DB25.pin12.PE     ; used for data to PC
+                 2  DB25.pin11.BUSY   ;/
+                 3  DB25.pin10./ACK   ;-used for handshake to PC
+                 4  Memory Mapping (0=EEPROM, 1=SRAM)
+                 5  Memory Mapping (EEPROM A17 when A18=1)
+                 6  Memory Mapping (SRAM A17 or SRAM CE2)
+                 7  Memory Mapping (SRAM A18 or NC)
+  1F060002h.R  I/O - Handshake from PC (bit0)   (DB25.pin17./SEL)
+  1F060005h.W  I/O - Unknown (used by Xplorer v4.52, set to 03h)
+  1F060006h.R  I/O - Unknown (used by Xplorer v4.52, bit0 used)
+  1F060007h.R  I/O - Unknown (used by Xplorer v4.52, bit0 used)
+
+

Cheat Devices - Xplorer DB25 Parallel Port Function Summary

+

Xplorer Parallel Port Commands (from PC side)

+

  GetByteByAddr32       Tx(5702h,Addr32), Rx(Data8)
+  OldMenuBuReadFile     Tx(5703h), TxFilename, RxDataFFEEh
+  OldMenuBuDeleteFile   Tx(5704h), TxFilename
+  OldMenuBuWriteFile    Tx(5705h), TxFilename, TxFiledata
+  OldMenuBuGetFileHdr   Tx(5706h), TxFilename, Rx(00h,00h), RxTurbo, Rx(02h)
+  OldMenuBuOpenEvents   Tx(5707h)
+  SetCop0Breakpoint     Tx(5708h,Addr32,Mask32,Ctrl32)   ;Menu: Dummy?
+  OldMenuBuCopyFile     Tx(5709h), TxFilename  ;to other memcard
+  OldMenuBuFormat       Tx(570Ah,Port8)
+  OldMenuBuGetStatus2x  Tx(570Bh), Rx(Stat8,Stat8)  ;\different in old/new
+  NewMenuBuGetStatus1x  Tx(570Bh,Port8), Rx(Stat8)  ;/
+  MenuGetSetFlag        Tx(570Ch), Rx(Flag8)   ;get old flg, then set flg=01h
+  NewMenuBuReadSector   Tx(570Dh,Port8,Sector16), Rx(Data[80h])
+  NewMenuBuWriteSector  Tx(570Eh,Port8,Sector16,Data[80h])
+  NewRawExecute         Tx(570Fh,Addr32)                 ;call Addr
+  MidMenuBuggedExecJump Tx(5710h,ORra32,ORgp32,ORsp32,pc32) ;aka r31,r28,r29,pc
+  MidMenuSendComment    Tx(5711h,Len8,AsciiMessage[Len])
+  NewMenuFillVram       Tx(5712h,Xloc32,Yloc32,Xsiz32,Ysiz32,FillValue32)
+  NewGetVram            Tx(5713h,Xloc32,Yloc32), Rx(Data[800h]) ;32x32pix
+  NewGetSetIrqMask      Tx(5714h), Rx(OldMask16), Tx(NewMask16) ;Menu: Dummy
+  NewSetVram            Tx(5715h,Xloc8,Yloc8,Data[800h]) ;X/Y=div32 ;32x32pix
+  NewMenuGetFlgAndOrVal Tx(5716h), Rx(00h, or 01h,Val32)             ;\
+  NewMenuGetTwoValues   Tx(5717h), Rx(Val32,Val32)                   ;
+  NewMenu...            Tx(5718h), ...                               ;
+  NewMenuGet2kGarbage   Tx(5719h,Dummy32), Rx(Garbage[800h])         ; whatever
+  NewMenuGetSomeValue   Tx(571Ah), Rx(Val32)                         ;
+  NewMenu...            Tx(571Bh,Data[4])  ;similar to 5763h         ;
+  NewMenuNoLongerSupp.  Tx(571Ch)    ;probably WAS supported someday ;/
+  GameAddCheatCode      Tx(5741h,Addr32,Data16), Rx(Index8)
+  MenuReBootKernel      Tx(5742h)              ;jumps to BFC00000h
+  GameDelCheatCode      Tx(5744h,Index8)
+  GetMem                Tx(5747h,Addr32,Len32), Rx(Data[Len]), TxRxChksum
+  Lock/Freeze           Tx(574Ch)
+  OldMenuBuGetDirectory Tx(574Dh), RxTurbo
+  MenuTestDB25Handshake Tx(574Eh), ...
+  MenuOptimalGetMem     Tx(574Fh,Addr32,Len32), RxFaster(Data[Len]), TxRxChksum
+  OldMenuGetWhatever    Tx(5750h), RxDataFFEEh                       ;-whatever
+  Release/Unfreeze      Tx(5752h)
+  SetMem                Tx(5753h,Addr32,Len32,Data[Len]), TxRxChksum
+  TurboGetMem           Tx(5754h,Addr32,Len32), RxFast(Data[Len]), TxRxChksum
+  MenuSetMemAndBurnFirm Tx(5755h,Addr32,Len32,Data[Len]), TxRxChksum ;burnFlash
+  GetStateGameOrMenu    Tx(5757h), Rx(47h=Game, or 58h=Menu)
+  SetMemAndExecute      Tx(5758h,Addr32,Len32,Data[Len]), TxRxChksum ;call Addr
+  NewMenu...            Tx(5763h,Val32)    ;similar to 571Bh         ;-whatever
+  GetByteByAddr24       Tx(5767h,Addr24), Rx(Data8)
+  NewMenuBuggedExecJump Tx(577Ah,ORra32,ORgp32,ORsp32,pc32)  ;formerly 5710h
+  NewMenuFlashAndReboot Tx(57C7h,Dest32,Len32,DataXorD3h[Len])
+
+Function names starting with "Game/Menu" and/or "New/Mid/Old" are working only +in Game/Menu mode, or only in New/Old xplorer firmware versions (new commands +exist in v4.52, old commands exist in v1.091, mid commands exist in v2.005, but +neither in v1.091 nor v4.52, unknown when those new/mid/old commands have been +added/removed exactly, in which specific versions).

+

The only useful command is SetMemAndExecute, which works in ALL versions, and +which can be used to do whatever one wants to do (unfortunately, most of the +official & inoffical tools are relying on other weird commands, which are +working only with specific xplorer firmware versions).

+

Cheat Devices - Xplorer DB25 Parallel Port Command Handler

+

The command handler is called once and then during booting, during xplorer GUI, +and during Game execution.
+Each call to the command handler does allow to execute ONLY ONE command, +however, the "Freeze" command can be used to force the xplorer to stay in the +command handler, so one can send MORE commands, until leaving the command +handler by sending the "Unfreeze" command.
+The command handling can vary depending on current boot phase (see below +cautions on Pre-Boot, Mid-Boot, and In-Game phases).

+

Pre-Boot Handler

+

This is called shortly after the kernel has done some basic initialization, and +after the xplorer has relocated its EEPROM content to RAM (which means it may +called about a second after reset when using official PSX kernel and Xplorer +Firmware).
+

  OLD Explorer Firmware: Call command handler ONCE (in MENU mode)
+  NEW Explorer Firmware: Call command handler TWICE (in MENU mode)
+  if SWITCH=ON or [80000030h]="WHB." then
+    NEW Explorer Firmware: Call command handler ONCE AGAIN (in MENU mode)
+    Install Mid-Boot hook
+  endif
+
+Observe that the Kernel function vectors at A0h, B0h, and C0h aren't installed +at this point. If you want to upload an EXE with Kernel vectors installed: send +THREE dummy commands (eg. Unfreeze) to skip the above early command handling. +On the other hand, the ReBootKernel command can be used if you WANT to upload +something during Pre-Boot (the ReBootKernel command works only in MENU mode +though, ie. during Xplorer GUI, but not during Game).

+

Mid-Boot Handler (Xplorer GUI)

+

The Xplorer GUI is called only if the Pre-Boot handler has installed it (eg. if +the SWITCH was ON). The handler is called alongsides with joypad reading (which +does NOT take place during the Xplorer intro, so there will be a long dead spot +between Pre-Boot and Mid-Boot command handling).
+

  Call command handler ONCE (in MENU mode) alongsides with each joypad read
+
+Observe that the GUI may have smashed various parts of the Kernel +initialization, so you can upload EXE files, and can use Kernel functions, but +the EXE won't get booted in same state as when booting from CDROM. The boot +state can also vary dramatically depending on the Xplorer Firmware version.

+

Post-Boot Handler (at start of CDROM booting)

+

This is called when starting CDROM booting.
+

  Install GAME mode hook for the B(17h) ReturnFromException() handler
+  OLD Explorer Firmware: Call command handler ONCE (still in MENU mode)
+  NEW Explorer Firmware: Call command handler ONCE (already in GAME mode)
+

+

In-Game Handler (after CDROM booting) (...probably also DURING booting?)

+

This is called via the hooked B(17h) ReturnFromException() handler.
+

  if SWITCH=ON
+    Call command handler ONCE (in GAME mode) upon each B(17h)
+    And, process game cheat codes (if any) upon each B(17h)
+  endif
+
+Observe that GAME mode doesn't support all commands. And, above will work only +if the game does use B(17h), eg. when using non-kernel exception handling, or +if it has crashed, or disabled exceptions. Some internal kernel functions are +using ReturnFromException() directly (without going through the indirect B(17h) +function table entry; so the hook cannot trap such direct returns).

+

Cheat Devices - Xplorer DB25 Parallel Port Low Level Transfer Protocol

+

All 16bit/24bit/32bit parameters are transferred MSB first.

+

Tx(Data) - transmit data byte(s)

+
  Output 8bit data to DATA0-7     (DB25.pin2-9)        ;-Send Data (D0-D7)
+  Output /SEL=HIGH                (DB25.pin17)         ;\Handshake High
+  Wait until /ACK=HIGH            (DB25.pin10)         ;/
+  Output /SEL=LOW                 (DB25.pin17)         ;\Handshake Low
+  Wait until /ACK=LOW             (DB25.pin10)         ;/
+
+

Rx(Data) - receive data byte(s)

+
  Wait until /ACK=HIGH            (DB25.pin10)         ;\
+  Get 3bit from SLCT,PE,BUSY      (DB25.pin13,12,11)   ; 1st Part (D6,D7,HIGH)
+  Output /SEL=HIGH                (DB25.pin17)         ;/
+  Wait until /ACK=LOW             (DB25.pin10)         ;\
+  Get 3bit from SLCT,PE,BUSY      (DB25.pin13,12,11)   ; 2nd Part (D3,D4,D5)
+  Output /SEL=LOW                 (DB25.pin17)         ;/
+  Wait until /ACK=HIGH            (DB25.pin10)         ;\
+  Get 3bit from SLCT,PE,BUSY      (DB25.pin13,12,11)   ; 3rd Part (D0,D1,D2)
+  Output /SEL=HIGH                (DB25.pin17)         ;/
+  Wait until /ACK=LOW             (DB25.pin10)         ;\4th Part (ver,LOW,LOW)
+  Get 3bit from SLCT,PE,BUSY      (DB25.pin13,12,11)   ;  (ver=LOW  for v1.091)
+  Output /SEL=LOW                 (DB25.pin17)         ;/ (ver=HIGH for v4.52)
+  Wait until all 4bits LOW        (DB25.pin13,12,11,10);-xlink95 fails if not
+
+

RxFast(Data) for TurboGetMem - slightly faster than normal Rx(Data)

+

First, for invoking the Turbo transfer:
+

  Wait for BUSY=LOW               (DB25.pin11)
+  Output DATA = 00h               (DB25.pin2-9)
+  Wait for BUSY=HIGH              (DB25.pin11)
+  Output DATA = ECh               (DB25.pin2-9)
+
+Thereafter, receive the actual Data byte(s) as so:
+
  Wait for /ACK transition        (DB25.pin10)         ;\
+  Get 3bit from SLCT,PE,BUSY      (DB25.pin13,12,11)   ; 1st Part (D6,D7,LOW)
+  Output DATA = 02h               (DB25.pin2-9)        ;/
+  Wait for /ACK transition        (DB25.pin10)         ;\
+  Get 3bit from SLCT,PE,BUSY      (DB25.pin13,12,11)   ; 2nd Part (D3,D4,D5)
+  Output DATA = 04h               (DB25.pin2-9)        ;/
+  Wait for /ACK transition        (DB25.pin10)         ;\
+  Get 3bit from SLCT,PE,BUSY      (DB25.pin13,12,11)   ; 3rd Part (D0,D1,D2)
+  Output DATA = 01h               (DB25.pin2-9)        ;/
+
+The /ACK transitions can be sensed by polling the parallel port IRQ flag on PC +side.

+

RxFaster(Data) for OptimalGetMem - much faster than normal Rx(Data)

+

First, for invoking the Turbo transfer:
+

  Output DATA = 00h  ;<-- crap    (DB25.pin2-9)        ;-BUGGY, but REQUIRED
+
+Thereafter, receive the actual Data byte(s) as so:
+
  Get 4bit from SLCT,PE,BUSY,/ACK (DB25.pin13,12,11,10);\1st Part (D4,D5,D6,D7)
+  Output DATA = 00h               (DB25.pin2-9)        ;/
+  Get 4bit from SLCT,PE,BUSY,/ACK (DB25.pin13,12,11,10);\2nd Part (D0,D1,D2,D3)
+  Output DATA = 01h               (DB25.pin2-9)        ;/
+
+BUG: The first received byte will be garbage with upper and lower 4bit both +containing the lower 4bits (the bugged firmware does explicitely want DATA=00h +before transfer, although DATA=00h is also 'confirming' that the upper 4bit can +be 'safely' replaced by lower 4bit).

+

TxRxChksum for SetMem/GetMem functions

+

  Tx(chkMsb), Rx(chkMsb), Tx(chkLsb), Rx(chkLsb), Rx("OK" or "CF" or "BG")
+
+The 16bit checksum is all bytes in Data[Len] added together. The two final +response bytes should be "OK"=Okay, or, if the transmitted chksum didn't match, +either "CF"=ChecksumFail (for SetMem functions) or "BG"=BadGetChecksum (for +GetMem functions). MenuSetMemAndBurnFirm is a special case with three response +codes: "OF"=FlashOkay, "CF"=ChecksumFail, "FF"=FlashWriteFail.

+

TxFilename for Memcard (bu) functions

+

  Rx(Addr32), Tx(Addr32,Len32,Data[Len]), TxRxChksum
+
+This is internally using the standard "SetMem" function; preceeded by +Rx(Addr32). Whereas Addr is the target address for the filename (just pass the +Rx'ed address to the Tx part), Len should be max 38h, Data should be the +filename with ending zero (eg. "bu10:name",00h).

+

TxFiledata for Memcard (bu) WriteFile

+

  Rx(Filename[26h])                       ;-name from TxFilename, echo'ed back
+  Rx(Addr32)                              ;-buffer address for fragments
+  Tx(NumFragments8)                       ;-number of fragments
+  Tx(Addr32,Len32,Data[Len]), TxRxChksum  ;<-- repeat this for each fragment
+  Rx(FileHandle8)                         ;-ending dummy byte (filehandle)
+
+This is also using the standard "SetMem" function, plus some obscure extra's. +The filedata is split into fragments, Len should be max 2000h per fragment.

+

RxDataFFEEh for Memcard (bu) ReadFile and GetWhatever

+

  Rx(FFEEh,"W",Len32,Data[Len]  ;<-- can be repeated for several fragments
+  Rx(FFEEh,"CA")                ;<-- End Code (after last fragment)
+
+Memcard ReadFile does transfer N fragments of Len=2000h (depending on +filesize). The GetWhatever function transfers one fragment with Len=80h, +followed by N*6 fragments with Len=40Ah.

+

RxTurbo for Memcard (bu) GetDirectory/GetFileHeader functions

+

  Rx(Addr32), Tx(Addr32,Len32), RxFast(Data[Len]), TxRxChksum
+
+This is internally using the standard "TurboGetMem" function; preceeded by +Rx(Addr32). Whereas Addr is the source address of the actual data (just pass +the Rx'ed address to the Tx part).
+For GetDirectoy, Len should be max 800h (actual/data data is only 4B0h bytes, +ie. 258h bytes per memcard, aka 28h bytes per directory entry). For +GetFileHeader, Len should be max 80h.

+

Cheat Devices - Xplorer Versions

+

Xplorer names

+
  Xploder (Germany/USA)
+  Xplorer (England/Spain/Netherlands)
+  X-Terminator (Japan)
+
+

Xplorer suffices

+

  V1/V2/V3  normal boards   (256K EEPROM, no SRAM, no DB25 resistor)
+  FX/DX     extended boards (512K EEPROM, 128K SRAM, with DB25 resistor)
+  PRO       meaningless suffix
+
+The V1/V2/V3 suffix does just indicate the pre-installed firmware version (so +that suffices become meaningless after software upgrades).
+The FX suffix (or DX in japan) indicates that the PCB contains more memory and +an extra resistor (the memory/resistor are intended for use with the "X-Assist" +add-on device).

+

Xplorer PCB types

+
  1) PXT6     ;original board
+  2) Nameless ;with alternate solder pads for smaller SRAM/GAL
+  3) PXT6-3   ;with alternate solder pads for smaller SRAM/GAL and 2nd EEPROM
+
+

Xplorer Compatibility Issues

+

The three PCB versions are functionally identical, and do differ only by +cosmetic changes for alternate/smaller chip packages.
+However, some things that can make difference in functionality are the +installed components and installed firmware version:
+

 - FX carts have some extra components & more memory installed.
+   (needed for "bigger" firmwares, mainly needed for the X-Assist add-on)
+ - FLASH chips from different manufacturers can occassionally cause problems
+   (eg. older software not knowing how to program newer FLASH chips).
+ - DB25 transfer protocol has some changed commands in each firmware version
+   (and most transfer tools tend to rely on such commands, so most tools will
+   fail unless the cart is flashed with a certain firmware version).
+

+

X-Assist add-on for Xplorer carts

+

The X-Assist is a quity huge clumsy controller with DPAD, plus 4 buttons, plus +small LCD screen. The thing connects to the Xplorer's DB25 connector, allowing +to enter/search cheat codes without using a PC.
+The device works only with "FX" Xplorer boards (which contain an extra resistor +for outputting supply power on the DB25 connector, plus more memory which is +somewhat intended for use by the X-Assist thing).

+

Cheat Devices - Xplorer Chipset Pinouts

+

Xplorer Pinout GAL20V8 (generic array logic)

+

  1  IN0  (DB25.pin17./SEL)
+  2  IN1  (PSX.pin14.A0)
+  3  IN2  (PSX.pin48.A1)
+  4  IN3  (PSX.pin15.A2)
+  5  IN4  (74373.pin15.Q5)
+  6  IN5  (PSX.pin4./EXP)
+  7  IN6  (74373.pin12.Q4)
+  8  IN7  (PSX.pin26.A16) (EEPROM.pin2.A16) (SRAM.pin2.A16) (10000h)
+  9  IN8  (PSX.pin60.A17)                                   (20000h)
+  10 IN9  (PSX.pin27.A18) (EEPROM.pin1.A18 or NC)           (40000h)
+  11 IN10 (PSX.pin30./RD)
+  12 GND
+  ---
+  13 IN11 (GND)
+  14 IN12 (/SWITCH_ON)
+  15 IO   (74373.pin11.LE)
+  16 IO   (PSX.pin6.D0)
+  17 IO   (SRAM./CE.pin22)
+  18 IO   (EEPROM2./CE.pin22) (for 2nd EEPROM chip, if any)
+  19 IO   (EEPROM1./CE.pin22) (for 1st EEPROM chip)
+  20 IO   (NC)                       (reportedly has wire?)
+  21 IO   (EEPROM.pin30.A17)         (reportedly A14 ?)
+  22 IO   (74245.pin19./E)
+  23 IN13 (PSX.pin64./WR) (SRAM.29, EEPROM.31)
+  24 VCC
+
+The GALs are programmed nearly identical for all Xplorer versions, some small +differences are: One or two EEPROM chip selects (depending on EEPROM chipset), +and extra ports at 1F060005h, 1F060006h, 1F060007h (used in v4.52).
+Note: The 28pin PLCC GAL has same pinout as the 24pin chip, but with four NC +pins inserted (at pin 1,8,15,22, whereof, there is a wire routed "through" pin +8, so that pin isn't literally NC).

+

Xplorer Pinout 74373 (8bit tristate latch)

+
  1  /OE (GND)
+  2  Q0  (DB25.pin13.SLCT)
+  3  D0  (PSX)
+  4  D1  (PSX)
+  5  Q1  (DB25.pin12.PE)
+  6  Q2  (DB25.pin11.BUSY)
+  7  D2  (PSX)
+  8  D3  (PSX)
+  9  Q3  (DB25.pin10./ACK)
+  10 GND
+  11 LE  (GAL.pin15.LatchEnable)
+  12 Q4  (GAL.pin7)             (0=EEPROM, 1=SRAM)
+  13 D4  (PSX)
+  14 D5  (PSX)
+  15 Q5  (GAL.pin5)             (EEPROM bank 2/3)
+  16 Q6  (SRAM.pin30.A17 or CE2)
+  17 D6  (PSX)
+  18 D7  (PSX)
+  19 Q7  (SRAM.pin1.A18 or NC)
+  20 VCC
+
+

Xplorer Pinout 74245 (8bit bus transceiver)

+
  1  DIR (GNDed)
+  2  D7  (PSX)
+  3  D6  (PSX)
+  4  D5  (PSX)
+  5  D4  (PSX)
+  6  D3  (PSX)
+  7  D2  (PSX)
+  8  D1  (PSX)
+  9  D0  (PSX)
+  10 GND
+  11 D0  (DB25.pin2)
+  12 D1  (DB25.pin3)
+  13 D2  (DB25.pin4)
+  14 D3  (DB25.pin5)
+  15 D4  (DB25.pin6)
+  16 D5  (DB25.pin7)
+  17 D6  (DB25.pin8)
+  18 D7  (DB25.pin9)
+  19 /E  (GAL.pin22)
+  20 VCC
+
+

Xplorer Pinout 7805 (voltage regulator)

+
  1 5V   (VCC)
+  2 GND  (GND)
+  3 7.5V (PSX.pin18,52)
+
+

Xplorer Pinout SWITCH (on/off)

+
  OFF  NC
+  COM  PAL.pin14 (with 10K pull-up to VCC)
+  ON   GND
+
+

Xplorer Pinout DB25 (parallel/printer port)

+
  1  In  /STB  (NC)
+  2  In  DATA0 (74245.pin11)
+  3  In  DATA1 (74245.pin12)
+  4  In  DATA2 (74245.pin13)
+  5  In  DATA3 (74245.pin14)
+  6  In  DATA4 (74245.pin15)
+  7  In  DATA5 (74245.pin16)
+  8  In  DATA6 (74245.pin17)
+  9  In  DATA7 (74245.pin18)
+  10 Out /ACK  (74373.Q3)
+  11 Out BUSY  (74373.Q2)
+  12 Out PE    (74373.Q1)
+  13 Out SLCT  (74373.Q0)
+  ---
+  14 In  /LF   (NC)
+  15 Out /ERR  (VCC via 0.47ohm) (installed only on carts with SRAM)
+  16 In  /INIT (NC)
+  17 In  /SEL  (GAL.IN0.pin1)
+  18..25 GND   (Ground)
+
+

EEPROM.pin1 is NC on 256Kx8 chip (however it is wired to A18 for use with +512Kx8 chips).
+EEPROM.pin30 is A17 from GAL.pin21 (not from PSX.A17), accordingly GAL.pin21 is +EEPROM.A17 (not A14).
+Boards with solder pads for TWO EEPROMs are leaving A18 not connected on the +2nd EEPROM (but do connect A18 to the first EEPROM, so one could either use one +512K chip or two 256K chips).
+DB25.pin15./ERR is VCC via 0.47ohm (installed only on carts with SRAM, intended +as supply for the X-ASSIST thing).
+SRAM (if any) is wired to GAL.pin17 (/CE), 74373.Q6 (A17 or CE2), 74373.Q7 (A18 +or NC), other SRAM pins are wired straight to D0-D7, A0-A16, /RD, /WR.
+VCC is 5V, derived from a 7805 voltage converter (with 7.5V used as input).
+Existing boards seem to have 128K SRAM (if any), so SRAM A17/A18 aren't +actually used (unless a board would have 512K SRAM), however, for 128K SRAMs +one should switch SRAM CE2 (aka A17) high.

+

Cheat Devices - Xplorer Cheat Code Format

+

PSX Xplorer/Xploder Code Format

+

  3taaaaaa 00dd  ;-8bit write  [aaaaaa]=dd
+  8taaaaaa dddd  ;-16bit write [aaaaaa]=dddd
+  00aaaaaa dddd  ;-32bit write [aaaaaa]=0000dddd  <-- not "0taaaaaa dddd" ?
+  4t000000 000x  ;-Slow Motion (delay "x" whatever/ns,us,ms,frames?)
+  7taaaaaa dddd  ;-IF [aaaaaa]=dddd then <execute following code>
+  9taaaaaa dddd  ;-IF [aaaaaa]<>dddd then <execute following code>
+  Ftaaaaaa dddd  ;-IF [aaaaaa]=dddd then activate "other selected" codes (uh?)
+  5taaaaaa ?nnn  ;\
+  d0d1d2d3 d4d5  ; write "?nnn" bytes to [aaaaaa]  ;ordered d0,d1,d2... ?
+  d6d7d8.. ....  ;/
+  6t000000 nnnn  ;\COP0 hardware breakpoint
+  aaaaaaaa cccc  ; aaaaaaaa=break_address, mmmmmmmm=break_mask
+  mmmmmmmm d0d1  ; nnnn=num_bytes (d0,d1,d2,etc.), cccc=break_type (see below)
+  d2d3d4.. ....  ;/
+  B?nnbbbb eeee  ;\Slide/Patch Code, with unclear end: "end=?nn+/-1" ?
+  10aaaaaa dddd  ;/for i=0 to end, [aaaaaa+(i*bbbb)]=dddd+(i*eeee), next i
+  C0aaaaaa dddd  ;-garbage/mirror of 70aaaaaa dddd ?  ;\or maybe meant to be
+  D0aaaaaa dddd  ;-garbage/mirror of 70aaaaaa dddd ?  ;/same as on GameShark?
+
+The second code digit (t) contains encryption type (bit0-2), and a "default +on/off" flag (bit3: 0=on, 1=off; whatever that means, it does probably require +WHATEVER actions to enable codes that are "off"; maybe via the Ftaaaaaa dddd +code).

+

break_type (cccc) (aka MSBs of cop0r7 DCIC register)

+

  E180 (instruction gotton by CPU but not yet implemented) (uh, gotton what?)
+  EE80 (data to be read or written)  ;<--looks okay
+  E680 (data to be read)             ;<--looks okay
+  EA80 (data to be wrtten)           ;<--looks okay
+  EF80 (instruction)   ;<-- looks crap, should be probably E180
+
+The CPU supports one data breakpoint and one instruction breakpoint (though +unknown if the Xplorer does support to use both simultaneously, or if it does +allow only one of them to be used).
+If the break_type/address/mask to match up with CPU's memory access actions... +then "something" does probably happen (maybe executing a sub-function that +consists of the d0,d1,d2,etc-bytes, if so, maybe at a fixed/unknown memory +address, or maybe at some random address; which would require relocatable +code).

+

Notes

+

The "Slide" code shall be used only with even addresses, unknown if other +16bit/32bit codes do also require aligned addresses.

+

Cheat Devices - Xplorer Cheat Code and ROM-Image Decryption

+

decrypt_xplorer_cheat_code:

+
  key  = x[0] and 07h              ;'''''''' AABBCCDD EEFF '''''''';
+  x[0] = x[0] xor key              ;         / / /  \  \ \         ;
+  if key=0                         ; x[0] --' / /    \  \ '-- x[5] ;
+    ;unencrypted (keep as is)      ; x[1] ---' /      \  '--- x[4] ;
+  elseif key=4                     ; x[2] ----'        '----- x[3] ;
+    x[1] = x[1] xor (025h)         ;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;
+    x[2] = x[2] xor (0FAh + (x[1] and 11h))
+    x[3] = x[3] xor (0C0h + (x[2] and 11h) + (x[1] xor 12h))
+    x[4] = x[4] xor (07Eh + (x[3] and 11h) + (x[2] xor 12h) + x[1])
+    x[5] = x[5] xor (026h + (x[4] and 11h) + (x[3] xor 12h) + x[2] + x[1])
+  elseif key=5
+    x[1] = (x[1] + 057h)  ;"W"ayne
+    x[2] = (x[2] + 042h)  ;"B"eckett
+    x[3] = (x[3] + 031h)  ;"1"
+    x[4] = (x[4] + 032h)  ;"2"
+    x[5] = (x[5] + 033h)  ;"3"
+  elseif key=6
+    x[1] = (x[1] + 0ABh) xor 01h
+    x[2] = (x[2] + 0ABh) xor 02h
+    x[3] = (x[3] + 0ABh) xor 03h
+    x[4] = (x[4] + 0ABh) xor 04h
+    x[5] = (x[5] + 0ABh) xor 05h
+  elseif key=7
+    x[5] = x[5] + 0CBh
+    x[4] = x[4] + 0CBh + (x[5] and 73h)
+    x[3] = x[3] + 05Ah + (x[4] and 73h) - (x[5] xor 90h)
+    x[2] = x[2] + 016h + (x[3] and 73h) - (x[4] xor 90h) + x[5]
+    x[1] = x[1] + 0F5h + (x[2] and 73h) - (x[3] xor 90h) + x[4] + x[5]
+  else
+    error ;(key=1,2,3)
+  endif
+
+

decrypt_xplorer_fcd_rom_image:

+
  for i=0 to romsize-1
+    x=45h
+    y=(i and 37h) xor 2Ch
+    if (i and 001h)=001h then x=x xor 01h
+    if (i and 002h)=002h then x=x xor 01h
+    if (i and 004h)=004h then x=x xor 06h
+    if (i and 008h)=008h then x=x xor 04h
+    if (i and 010h)=010h then x=x xor 18h
+    if (i and 020h)=020h then x=x xor 30h
+    if (i and 040h)=040h then x=x xor 60h
+    if (i and 080h)=080h then x=x xor 40h
+    if (i and 100h)=100h then x=x xor 80h
+    if (i and 006h)=006h then x=x xor 0ch
+    if (i and 00Eh)=00Eh then x=x xor 08h
+    if (i and 01Fh)>=016h then x=x-10h
+    rom[i]=(rom[i] XOR x)+y
+  next i
+
+

Cheat Devices - FLASH/EEPROMs

+

FLASH/EEPROM Commands

+

Below commands should work on all chips (for write: page size may vary, eg. 1 +byte, 128 bytes, or 256 bytes). Some chips do have some extra commands (eg. an +alternate older get id command, or sector erase commands, or config commands), +but those extras aren't needed for basic erase/write operations.
+

  [5555h]=AAh, [2AAAh]=55h, [5555h]=A0h, [addr..]=byte(s)  ;write page
+  [5555h]=AAh, [2AAAh]=55h, [5555h]=90h, id=[0000h..0001h] ;enter id mode
+  [5555h]=AAh, [2AAAh]=55h, [5555h]=F0h                    ;exit id mode
+  [5555h]=AAh, [2AAAh]=55h, [5555h]=80h                    ;erase chip, step 1
+  [5555h]=AAh, [2AAAh]=55h, [5555h]=10h                    ;erase chip, step 2
+
+Above addresses are meant to be relative to the chip's base address (ie. +"5555h" would be 1F005555h in PSX expansion ROM area, or, if there are two +flash chips, then it would be 1F045555h for the 2nd chip in xplorer and datel +carts; whereas, that region is using bank switching in xplorer carts, so one +must output some FLASH address bits I/O ports, and the others via normal CPU +address bus; whilst datel carts have noncontinous FLASH areas at 1F000000h and +1F040000h, with a gap at 1F020000h).
+Observe that the chips will output status info (instead of FLASH data) during +write/erase/id mode (so program code using those commands must execute in RAM, +not in FLASH memory).

+

FLASH/EEPROM Wait Busy

+

Waiting is required after chip erase and page write (after writing the last +byte at page end), and on some chips it's also required after enter/exit id +mode. Some chips indicate busy state via a toggle bit (bit6 getting inverted on +each 2nd read), and/or by outputting a value different than the written data, +and/or do require hardcoded delays (eg. AM29F040). Using the following 3-step +wait mechanism should work with all chips:
+

  Wait 10us (around 340 cpu cycles on PSX)   ;-step 1, hardcoded delay
+  Wait until [addr]=[addr]                   ;-step 2, check toggle bit
+  Wait until [addr]=data                     ;-step 3, check data
+
+Whereas, "addr" should be the last written address (or 0000h for erase and +enter/exit id mode). And "data" should be the last written data (or FFh for +erase, or "don't care" for enter/exit id mode).

+

Board and Chip Detection

+

First of, one should detect the expansion board type, this can be done as so:
+

  Enter Chip ID mode (at 1F000000h)
+  Compare 400h bytes at 1F000000h vs 1F020000h
+  If different --> assume Datel PAR1/PAR2 hardware
+  If same --> assume Xplorer hardware (or Datel PAR3, whatever that is)
+  Exit Chip ID mode (at 1F000000h)
+
+Next, detect the Chip ID for the (first) FLASH chip:
+
  Enter Chip ID mode (at 1F000000h)
+  Read the two ID bytes (at 1F00000xh)
+  Exit Chip ID mode (at 1F000000h)
+
+Finally, one needs to check if there's a second FLASH chip, there are two such +cases:
+
  If cart=xplorer AND 1st_chip=256K --> might have a 2nd 256K chip
+  If cart=datel   AND 1st_chip=128K --> might have a 2nd 128K chip
+
+In both cases, the 2nd chip would be mapped at 1F400000h, and one can test the +following four combinations:
+
  Enter Chip ID (at 1F000000h) and Enter Chip ID (at 1F400000h) ;id1+id2
+  Exit  Chip ID (at 1F000000h) and Enter Chip ID (at 1F400000h) ;id2
+  Exit  Chip ID (at 1F400000h) and Enter Chip ID (at 1F000000h) ;id1
+  Exit  Chip ID (at 1F400000h) and Exit  Chip ID (at 1F000000h) ;none
+
+For each combination compare 400h bytes at 1F000000h vs 1F400000h.
+
  If they are all same --> there is only one chip (mirrored to both areas)
+  If different --> 1F400000h is either garbage, or a 2nd chip
+
+In the latter case, do Chip ID detection at 1F400000h to see if there's really +another chip there, and which type it is (if present, then it should be usually +the same type as the 1st chip; and if it's not present, then there might be +just open bus garbage instead of valid ID values).

+

FLASH/EEPROM Chip IDs

+

  ChipID  Kbyte Page Maker/Name         ;notes
+  1Fh,D5h 128K  128  ATMEL AT29C010A    ;xplorer/prototypes?
+  1Fh,35h 128K  128  ATMEL AT29LV010A   ;-
+  1Fh,DAh 256K  256  ATMEL AT29C020     ;xplorer
+  1Fh,BAh 256K  256  ATMEL AT29BV020    ;xplorer
+  1Fh,A4h 512K  256  ATMEL AT29C040A    ;xplorer
+  1Fh,C4h 512K  256  ATMEL AT29xV040A   ;-
+  BFh,07h 128K  128  SST SST29EE010     ;-
+  BFh,08h 128K  128  SST SST29xE010     ;-
+  BFh,22h 128K  128  SST SST29EE010A    ;-
+  BFh,23h 128K  128  SST SST29xE010A    ;-
+  BFh,10h 256K  128  SST SST29EE020     ;xplorer
+  BFh,12h 256K  128  SST SST29xE020     ;xplorer
+  BFh,24h 256K  128  SST SST29EE020A    ;-
+  BFh,25h 256K  128  SST SST2xEE020A    ;-
+  BFh,04h 512K  256  SST SST28SF040     ;said to be used in "AR/GS Pro"
+  DAh,C1h 128K  128  WINBOND W29EE01x   ;-
+  DAh,45h 256K  128  WINBOND W29C020    ;-
+  DAh,46h 512K  256  WINBOND W29C040    ;xplorer
+  01h,A4h 512K    1  AMD AM29F040       ;nocash psone bios (intact console)
+  20h,20h 128K    1  ST M29F010B        ;nocash psone bios (broken console)
+  31h,B4h 128K   ??  CATALYST CAT28F010 ;NEEDS VPP=12V !!! ("PS-121 ZISAN")
+
+The above Atmel/SST/Winbond chips are commonly used in Datel or Xplorer carts +(or both). The CATALYST chip is used in some Datel clones (but seems to require +12 volts, meaning that it can't be properly programmed on PSX, nethertheless, +it's reportedly working "well enough" to encounter flash corruption upon +programming attempts). The two ST/AMD chips aren't really common in PSX world +(except that I've personally used them in my PSones).

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/controller-pinout.jpg b/controller-pinout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a201dea67435ad716401eef9e233b9341d874877 GIT binary patch literal 41704 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 + + + + + + + + + + + + + + + + + + + + + + Controllers and Memory Cards - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Controllers and Memory Cards

+

Controllers/Memory Cards

+

Controller and Memory Card Overview
+Controller and Memory Card Signals
+Controller and Memory Card Multitap Adaptor

+

Controllers

+

Controllers - Communication Sequence
+Controllers - Standard Digital/Analog Controllers
+Controllers - Mouse
+Controllers - Racing Controllers
+Controllers - Lightguns
+Controllers - Configuration Commands
+Controllers - Vibration/Rumble Control
+Controllers - Analog Buttons (Dualshock2)
+Controllers - Dance Mats
+Controllers - Pop'n Controllers
+Controllers - Densha de Go! / Jet de Go! Controllers
+Controllers - Fishing Controllers
+Controllers - PS2 DVD Remote
+Controllers - I-Mode Adaptor (Mobile Internet)
+Controllers - Additional Inputs
+Controllers - Misc

+

Memory Cards

+

Memory Card Read/Write Commands
+Memory Card Data Format
+Memory Card Images
+Memory Card Notes

+

Pocketstation (Memory Card with built-in LCD screen and buttons)

+

Pocketstation

+

Pinouts

+

Pinouts - Controller Ports and Memory-Card Ports

+

Controller and Memory Card Overview

+

Controllers and memory cards connect to the console using a serial protocol and +are accessed through SIO0 registers:
+Serial Interfaces (SIO)
+The protocol used is similar to standard SPI, with no start/stop bytes and no +parity (even though SIO0 has support for it). Unlike typical SPI, only one byte +is transferred at a time and a separate wire (/ACK) is used by the device to +signal the PS1 that it is ready to exchange the next byte. For more details see:
+Controller and Memory Card Signals

+

Device addressing

+

Each controller port and its respective memory card slot are wired in parallel, +and the /CSn signals select both the controller and the memory card when +asserted. This selection is narrowed down through a simple addressing scheme, +where the first byte sent by the console after asserting /CSn is the address of +the device that shall reply. All devices must keep the DAT line idle before +receiving this byte. Once the address is sent, the device that was addressed +shall pull /ACK low to signal its presence and start exchanging bytes.
+The following addresses are known to be used:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DeviceAddress
Standard controller01h
Yaroze Access Card21h
PS2 multitap (incompatible with PS1)21h
PS2 DVD remote receiver61h
Memory card81h
+

DSR (/ACK) Controller and Memory Card - Byte Received Interrupt

+

Gets set after receiving a data byte - that only if an /ACK has been received +from the peripheral (ie. there will be no IRQ if the peripheral fails to send +an /ACK, or if there's no peripheral connected at all).
+

  Actually, DSR means "more-data-request",
+  accordingly, it does NOT get triggered after receiving the LAST byte.
+
+I_STAT.7 is edge triggered (that means it can be acknowledge before or after +acknowledging SIO0_STAT.9). However, SIO0_STAT.9 is NOT edge triggered (that +means it CANNOT be acknowledged while the external /IRQ input is still low; ie. +one must first wait until SIO0_STAT.7=0, and then set SIO0_CTRL.4=1) (this is +apparently a hardware glitch; note: the LOW duration is circa 100 clock +cycles).

+

/IRQ10 (/IRQ) Controller - Lightpen Interrupt

+

Pin 8 on Controller Port. Routed directly to the Interrupt Controller (at +1F80107xh). There are no status/enable bits in the SIO0_registers (at +1F80104xh).

+

Plugging and Unplugging Cautions

+

During plugging and unplugging, the Serial Data line may be dragged LOW for a +moment; this may also affect other connected devices because the same Data line +is shared for all controllers and memory cards (for example, connecting a +joypad in slot 1 may corrupt memory card accesses in slot 2).
+Moreover, the Sony Mouse does power-up with /ACK=LOW, and stays stuck in that +state until it is accessed at least once (by at least sending one 01h byte to +its controller port); this will also affect other devices (as a workaround one +should always access BOTH controller ports; even if a game uses only one +controller, and, code that waits for /ACK=HIGH should use timeouts).

+

Emulation Note

+

After sending a byte, the Kernel waits 100 cycles or so, and does THEN +acknowledge any old IRQ7, and does then wait for the new IRQ7. Due to that +bizarre coding, emulators can't trigger IRQ7 immediately within 0 cycles after +sending the byte.

+

BIOS Functions

+

Controllers can be probably accessed via InitPad and StartPad functions,
+BIOS Joypad Functions
+Memory cards can be accessed by the filesystem (with device names "bu00:" +(slot1) and "bu10:" (slot2) or so). Before using that device names, it seems to +be required to call InitCard, StartCard, and _bu_init (?).

+

Synchronous I/O

+

The data is transferred in units of bytes, via separate input and output lines. +So, when sending byte, the hardware does simultaneously receive a response +byte.
+One exception is the address byte (which selects either the controller, +or the memory card) until that byte has been sent, neither the controller nor +memory card are selected (and so the first "response" byte should be ignored; +probably containing more or less stable high-z levels).
+The other exception is, when you have send all command bytes, and still want to +receive further data, then you'll need to send dummy command bytes (should be +usually 00h) to receive the response bytes.

+

Controller and Memory Card Signals

+

Overview

+
        ____                                                              _____
+  /CS       \____________________________________________________________/
+        ______        ____        ____        ____        ____        _________
+  SCK         ||||||||    ||||||||    ||||||||    ||||||||    ||||||||
+        ____                                                              _____
+  MOSI      '=[ Addr ]====[ Cmd  ]====[ Tap  ]====[Param ]====[Param ]==='
+
+  MISO  ---------------===[ IDlo ]====[ IDhi ]====[ Data ]====[ Data ]===------
+        _______________   _________   _________   _________   _________________
+  /ACK                 |_|         |_|         |_|         |_|
+
+--- High impedance
+=== Any state (don't care)
+
+

Address byte (01h) being sent

+
        ____
+  /CS       \__________________________________________________________________
+        ______   _   _   _   _   _   _   _   __________________   _   _   _   _
+  SCK         |_| |_| |_| |_| |_| |_| |_| |_|                  |_| |_| |_| |_|
+        __________                                                  ___
+  MOSI          1 |_0___0___0___0___0___0___0____________________0_| 1 |_0___0_
+                                                               ____
+  MISO  -----------------------------------------------======='  1 |_0___0___0_
+        ______________________________________________     ____________________
+  /ACK                                                |___|
+
+--- High impedance
+=== Any state (don't care)
+
+

Notes:

+
    +
  • All bytes are sent LSB first.
  • +
  • The standard baud rate used by the kernel is ~250 kHz. Some controllers and + memory cards may work with faster rates, but others will not.
  • +
  • The clock polarity is high-when-idle (sometimes referred to as CPOL=1). Each + bit is output on a falling clock edge and sampled by the other end on the + rising clock edge that follows it (CPHA=1).
  • +
  • The device has to pull /ACK low for at least 2 µs to request the host to + transfer another byte. Once the last byte of the packet is transferred, the + device shall no longer pulse /ACK.
  • +
  • The kernel's controller driver will time out if /ACK is not pulled low by the + device within 100 µs from the last SCK pulse. It will also ignore /ACK pulses + sent within the first 2-3 µs (100 cycles) of the last SCK pulse.
  • +
  • Devices should not respond immediately when /CS is asserted, but should wait + for the address byte to be sent and only send an /ACK pulse back and start + replying with data if the address matches.
  • +
+

Controller and Memory Card Multitap Adaptor

+

SCPH-1070 (Multitap)

+

The Multitap is an external adaptor that allows to connect 4 controllers, and 4 +memory cards to one controller port. When using two adaptors (one on each +slot), up to 8 controllers and 8 memory cards can be used.

+

Multitap Controller Access

+

Normally joypad reading is done by sending this bytes to the pad:
+

  01 42 00 00 ..   ;normal read
+
+And with the multitap, there are even two different ways how to access extra +pads:
+
  01 42 01 00 ..   ;method 1: receive special ID and data from ALL four pads
+  0n 42 00 00 ..   ;method 2: receive data from pad number "n" (1..4)
+
+The first method seems to be the more commonly used one (and its special ID is +also good for detecting the multitap); see below for details.
+The second method works more like "normal" reads, among other it's allowing to +transfer more than 4 halfwords per slot (unknown if any existing games are +using that feature).
+The IRQ10 signal (for Konami Lightguns) is simply wired to all four slots via +small resistors (without special logic for activating/deactivating the IRQ on +certain slots).

+

Multitap Controller Access, Method 1 Details

+

Below LONG response is activated by sending "01h" as third command byte; +observe that sending that byte does NOT affect the current response. Instead, +it does request that the NEXT command shall return special data, as so:
+

  Halfword 0      --> Controller ID for MultiTap (5A80h=Multitap)
+  Halfword 1..4   --> Player A (Controller ID, Buttons, Analog Inputs, if any)
+  Halfword 5..8   --> Player B (Controller ID, Buttons, Analog Inputs, if any)
+  Halfword 9..12  --> Player C (Controller ID, Buttons, Analog Inputs, if any)
+  Halfword 13..16 --> Player D (Controller ID, Buttons, Analog Inputs, if any)
+
+With this method, the Multitap is always sending 4 halfwords per slot (padded +with FFFFh values for devices like Digital Joypads and Mice; which do use less +than 4 halfwords); for empty slots it's padding all 4 halfwords with FFFFh.
+Sending the request is possible ONLY if there is a controller in Slot A (if +controller Slot A is empty then the Slot A access aborts after the FIRST byte, +and it's thus impossible to send the request in the THIRD byte).
+Sending the request works on access to Slot A, trying to send another request +during the LONG response is glitchy (for whatever strange reason); one must +thus REPEATEDLY do TWO accesses: one dummy Slot A access (with the request), +followed by the long Slot A+B+C+D access.
+
  Previous access had REQ=0 and returned Slot A data ---> returns Slot A data
+  Previous access had REQ=0 and returned Slot A-D data -> returns Slot A data
+  Previous access had REQ=1 and returned Slot A data ---> returns Slot A-D data
+  Previous access had REQ=1 and returned Slot A-D data -> returns garbage
+  Previous access had REQ=1 and returned garbage -------> returns Slot A-D data
+
+In practice:
+Toggling REQ on/off after each command: Returns responses toggling between +normal Slot A data and long Slot A+B+C+D data.
+Sending REQ=1 in ALL commands: Returns responses toggling between Garbage and +long Slot A+B+C+D data.
+Both of the above is working (one needs only the Slot A+B+C+D part, and it +doesn't matter if the other part is Slot A, or Garbage; as long as the software +is able/aware of ignoring the Garbage). Garbage response means that the +multitap returns ONLY four bytes, like so: Hiz,80h,5Ah,LSB (ie. the leading +HighZ byte, the 5A80h Multitap ID, and the LSB of the Slot A controller ID), +and aborts transfer after that four bytes.

+

Multitap Memory Card Access

+

Normally memory card access is done by sending this bytes to the card:
+

  80 xx .. ..      ;normal access
+
+And with the multitap, memory cards can be accessed as so:
+
  8n xx .. ..      ;access memory card in slot "n" (1..4)
+
+That's the way how its done in Silent Hill. Although for the best of confusion, +it doesn't actually work in that game (probably the developer has just linked +in the multitap library, without actually supporting the multitap at higher +program levels).

+

Multitap Games

+

  Bomberman / Bomberman Party Edition (requires Multitap on Port 2 instead of 1)
+  Bomberman World
+  Breakout: Off the Wall Fun
+  Circuit Breakers
+  Crash Team Racing
+  FIFA series soccer games
+  Frogger
+  Gauntlet: Dark Legacy
+  Hot Shots Golf 2 & 3
+  Jigsaw Island: Japan Graffiti / Jigsaw Madness (requires Multitap on Port 2 instead of 1)
+  NBA Live (any year) (up to 8 players with two multitaps)
+  Need For Speed 3
+  Need For Speed 5
+  Poy Poy (4 players hitting each other with rocks and trees)
+  Running Wild
+  S.C.A.R.S. (requires Multitap on Port 2 instead of 1)
+  Zen Nippon Pro Wrestling: Ouja no Tamashii (requires Multitap on Port 2 instead of 1)
+
+Most Multitap games supporting up to 4 or 5 controllers require the device to be plugged into Port 1, but a small number of games strangely require the device to be plugged into Port 2 instead.

+

Multitap Versions

+

                   .------.
+   SCPH-1070       |      |        SCPH-111
+   (gray case)     |      |        (white case)
+   (for PSX)       |    D |        (for PSone)
+                   |      |                   .----------------.
+        cable      |      |        cable     .'   D        C   '.
+            ''--.. |    C |         '''--..__|                  |
+                  \|      |                  |                  |
+  .----------------'      |                  '.   A        B   .'
+  |                       |                   '----------------'
+  |                       |
+  |    A        B        /
+  '---------------------'
+
+The cable connects to one of the PSX controller ports (which also carries the +memory card signals). The PSX memory card port is left unused (and is blocked +by a small edge on the Multitap's plug).

+

MultiTap Parsed Controller IDs

+

Halfword 0 is parsed (by the BIOS) as usually, ie. the LSB is moved to MSB, and +LSB is replaced by status byte (so ID 5A80h becomes 8000h=Multitap/okay, or +xxFFh=bad). Halfwords 1,5,9,13 are NOT parsed (neither by the BIOS nor by the +Multitap hardware), however, some info in the internet is hinting that Sony's +libraries might be parsing these IDs too (so for example 5A41h would become +4100h=DigitalPad/okay, or xxFFh=bad).

+

Power Supply

+

The Multitap is powered by the PSX controller port. Unknown if there are any +power supply restrictions (up to eight controllers and eight cards may scratch +some limits, especially when doing things like activating rumble on all +joypads). However, the Multitap hardware itself doesn't do much on supply +restrictions (+3.5V is passed through something; maybe some fuse, loop, or 1 +ohm resistor or so) (and +7.5V is passed without any restrictions).

+

PS2 multitap

+

Sony made a multitap adapter for the PS2, however it is not compatible with the +PS1 as it plugs into both the controller and memory card ports (which are not +wired in parallel on the PS2). The protocol is also different: rather than +modifying packets it seems to act as a mostly-passive port multiplexer, +accepting switching commands with address 61h. Unknown if the PS2 multitap is +backwards compatible with the SCPH-1070 protocol.

+

See also

+

Pinouts - Component List and Chipset Pin-Outs for Multitap, SCPH-1070

+

Controllers - Communication Sequence

+

Controller Communication Sequence

+

  Send Reply Comment
+  01h  Hi-Z  Controller address
+  42h  idlo  Receive ID bit0..7 (variable) and Send Read Command (ASCII "B")
+  TAP  idhi  Receive ID bit8..15 (usually/always 5Ah)
+  MOT  swlo  Receive Digital Switches bit0..7
+  MOT  swhi  Receive Digital Switches bit8..15
+  --- transfer stops here for digital pad (or analog pad in digital mode) ---
+  00h  adc0  Receive Analog Input 0 (if any) (eg. analog joypad or mouse)
+  00h  adc1  Receive Analog Input 1 (if any) (eg. analog joypad or mouse)
+  --- transfer stops here for analog mouse ----------------------------------
+  00h  adc2  Receive Analog Input 2 (if any) (eg. analog joypad)
+  00h  adc3  Receive Analog Input 3 (if any) (eg. analog joypad)
+  --- transfer stops here for analog pad (in analog mode) -------------------
+  --- transfer stops here for nonstandard devices (steering/twist/paddle) ---
+
+The TAP byte should be usually zero, unless one wants to activate Multitap +(multi-player mode), for details, see
+Controller and Memory Card Multitap Adaptor
+The two MOT bytes are meant to control the rumble motors (for normal non-rumble +controllers, that bytes should be 00h), however, the MOT bytes have no effect +unless rumble is enabled via config commands, for details, see
+Controllers - Configuration Commands
+Controllers - Vibration/Rumble Control

+

Controller ID (Halfword Number 0)

+

  0-3  Number of following halfwords (01h..0Fh=1..15, or 00h=16 halfwords)
+  4-7  Controller Type (or currently selected Controller Mode)
+  8-15 Fixed (5Ah)
+
+Known 16bit ID values are:
+
  xx00h=N/A                 (initial buffer value from InitPad BIOS function)
+  5A12h=Mouse               (two button mouse)
+  5A23h=NegCon              (steering twist/wheel/paddle)
+  5A31h=Konami Lightgun     (IRQ10-type)
+  5A41h=Digital Pad         (or analog pad/stick in digital mode; LED=Off)
+  5A53h=Analog Stick        (or analog pad in "flight mode"; LED=Green)
+  5A63h=Namco Lightgun      (Cinch-type)
+  5A73h=Analog Pad          (in normal analog mode; LED=Red)
+  5A7xh=Dualshock2          (with variable number of inputs enabled)
+  5A79h=Dualshock2          (with all analog/digital inputs enabled)
+  5A80h=Multitap            (multiplayer adaptor) (when activated)
+  5A96h=Keyboard            (rare lightspan keyboard)
+  5AE3h=Jogcon              (steering dial)
+  5AE8h=Keyboard/Sticks     (rare homebrew keyboard/segasticks adaptor)
+  5AF3h=Config Mode         (when in config mode; see rumble command 43h)
+  FFFFh=High-Z              (no controller connected, pins floating High-Z)
+
+The PS2 DVD remote receiver identifies as either 5A41h (i.e. a digital +controller) when polled using standard controller commands, or 5A12h when using +address 61h to access the IR functionality.

+

Controllers - Standard Digital/Analog Controllers

+
       ___                      ___           ___                      ___
+    __/_L_\__   Analog Pad   __/_R_\__     __/_L_\__  Digital Pad   __/_R_\__
+   /    _    \--------------/         \   /    _    \--------------/         \
+  |   _| |_   |            |     /\    | |   _| |_   |            |     /\    |
+  |  |_ X _|  |SEL      STA|  []    () | |  |_ X _|  |            |  []    () |
+  |    |_|  ___   ANALOG   ___   ><    | |    |_|    |  SEL  STA  |     ><    |
+  |\______ / L \   LED    / R \ ______/| |\_________/--------------\_________/|
+  |       | Joy |--------| Joy |       | |       |                    |       |
+  |      / \___/          \___/ \      | |      /                      \      |
+   \____/                        \____/   \____/                        \____/
+
+

Standard Controllers

+
  __Halfword 0 (Controller Info)_______________________________________________
+  0-15  Controller Info  (5A41h=digital, 5A73h=analog/pad, 5A53h=analog/stick)
+  __Halfword 1 (Digital Switches)______________________________________________
+  0   Select Button    (0=Pressed, 1=Released)
+  1   L3/Joy-button    (0=Pressed, 1=Released/None/Disabled) ;analog mode only
+  2   R3/Joy-button    (0=Pressed, 1=Released/None/Disabled) ;analog mode only
+  3   Start Button     (0=Pressed, 1=Released)
+  4   Joypad Up        (0=Pressed, 1=Released)
+  5   Joypad Right     (0=Pressed, 1=Released)
+  6   Joypad Down      (0=Pressed, 1=Released)
+  7   Joypad Left      (0=Pressed, 1=Released)
+  8   L2 Button        (0=Pressed, 1=Released) (Lower-left shoulder)
+  9   R2 Button        (0=Pressed, 1=Released) (Lower-right shoulder)
+  10  L1 Button        (0=Pressed, 1=Released) (Upper-left shoulder)
+  11  R1 Button        (0=Pressed, 1=Released) (Upper-right shoulder)
+  12  /\ Button        (0=Pressed, 1=Released) (Triangle, upper button)
+  13  () Button        (0=Pressed, 1=Released) (Circle, right button)
+  14  >< Button        (0=Pressed, 1=Released) (Cross, lower button)
+  15  [] Button        (0=Pressed, 1=Released) (Square, left button)
+  __Halfword 2 (Right joystick) (analog pad/stick in analog mode only)_________
+  0-7   adc0 RightJoyX (00h=Left, 80h=Center, FFh=Right)
+  8-15  adc1 RightJoyY (00h=Up,   80h=Center, FFh=Down)
+  __Halfword 3 (Left joystick) (analog pad/stick in analog mode only)__________
+  0-7   adc2 LeftJoyX  (00h=Left, 80h=Center, FFh=Right)
+  8-15  adc3 LeftJoyY  (00h=Up,   80h=Center, FFh=Down)
+  __Further Halfword(s) (Dualshock2 only, and only if enabled)_________________
+  0-7   ..   Analog Button (if enabled) (00h=Released, FFh=Max Pressure)
+  8-15  ..   Analog Button (if enabled) (00h=Released, FFh=Max Pressure)
+  ..    ..   ..
+
+

Analog Mode Note

+

On power-up, the controllers are in digital mode (with analog inputs disabled). +Analog mode can be (de-)activated manually by pushing the Analog button. +Alternately, analog mode can be (de-)activated by software via rumble +configuration commands (though that's supported only on newer pads; those with +two rumble motors). It is essential that emulators and any third-party hardware have a way of manually toggling analog mode, similar to original analog controllers, as certain games like Gran Turismo 1 will not attempt to enter analog mode on their own, even if they support analog controls and detect an analog controller.
+Since analog pads boot in digital mode and will return the same ID byte as digital controllers, the most common way of distinguishing between the 2 is to send a Dualshock-only command (Typically command 43h - enter/exit config mode) and seeing how the controller responds to it.
+The analog sticks are mechanically restricted to a "circular field of motion" +(most joypads can reach "min/max" values only in "straight" horizontal or +vertical directions, but not in "diagonal" directions).

+

Analog Joypad Range

+
               ...''''''''''...
+       ____ .''________________''._____       ___ 00h
+      |  .''                      ''.  |
+      |.'                            '.|      ___ 10h
+      .'                              '.
+     :|                                |:
+    : |                                | :    ___ 60h
+   .' |            .''''''.            | '.
+   :  |          .'        '.          |  :
+   :  |          :          :          |  :   ___ 80h
+   :  |          :          :          |  :
+   :  |          '.        .'          |  :
+   '. |            '......'            | .'   ___ A0h
+    : |                                | :
+     :|                                |:
+      '.                              .'      ___ F0h
+      |'.                            .'|
+      |__'..______________________..'__|      ___ FFh
+      .     '..                ..'     .
+     00h       '''..........'''       FFh
+
+

   Big Circle   --> Mechanically possible field of motion
+   Square Area  --> Digitally visible 8bit field of motion
+   Small Circle --> Resting position when releasing the joystick
+
+Example min/center/max values for three different pads:
+
  SCPH-1150          Min=(00,00), Mid: (72..90,79..AC), Max=(FF,FF) at 25'C
+  SCPH-1200          Min=(0E,0E), Mid: (6C..8A,75..79), Max=(ED,ED) at 16'C
+  SCPH-110           Min=(11,11), Mid: (8A..9F,70..96), Max=(FD,FD) at 16'C
+
+Values may vary for other pads and/or different temperatures.

+

Dual Analog Pad in LED=Green Mode

+

Basically same as normal analog LED=Red mode, with following differences:
+

  ID is 5A53h (identifying itself as analog stick) (rather than analog pad)
+  Left/right joy-buttons disabled (as for real analog stick, bits are always 1)
+  Some buttons are re-arranged: bit9=L1 bit10=[] bit11=/\ bit12=R1 bit15=R2
+
+Concerning the button names, the real analog-stick does NOT have re-arranged +buttons (eg. it's L1 button is in bit10), however, concerning the button +locations, the analog stick's buttons are arranged completely differently as on +analog pads (so it might be rather uncomfortable to play analog stick games on +analog pads in LED=Red mode; the LED=Green mode is intended to solve that +problem).
+Might be useful for a few analog-stick games like MechWarrior 2, Ace Combat 2, +Descent Maximum, and Colony Wars. In most other cases the feature is rather +confusing (that's probably why the LED=Green mode wasn't implemented on the +Dual Shock).

+

See also

+

Pinouts - Component List and Chipset Pin-Outs for Digital Joypad, SCPH-1080
+Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1150
+Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1200
+Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-110

+

Controllers - Mouse

+

Sony Mouse Controller

+
  __Halfword 0 (Controller Info)________________
+  0-15  Controller Info  (5A12h=Mouse)
+  __Halfword 1 (Mouse Buttons)__________________
+  0-7   Not used         (All bits always 1)
+  8-9   Unknown          (Seems to be always 0) (maybe SNES-style sensitivity?)
+  10    Right Button     (0=Pressed, 1=Released)
+  11    Left Button      (0=Pressed, 1=Released)
+  12-15 Not used         (All bits always 1)
+  __Halfword 2 (Mouse Motion Sensors)___________
+  0-7   Horizontal Motion (-80h..+7Fh = Left..Right) (00h=No motion)
+  8-15  Vertical Motion   (-80h..+7Fh = Up..Down)    (00h=No motion)
+
+

Sony Mouse Hardware Bug on Power-On

+

On Power-on (or when newly connecting it), the Sony mouse does draw /ACK to LOW +on power-on, and does then hold /ACK stuck in the LOW position.
+For reference: Normal controllers and memory cards set /ACK=LOW only for around +100 clk cycles, and only after having received a byte from the console.
+The /ACK pin is shared for both controllers and both memory cards, so the stuck +/ACK is also "blocking" all other connected controllers/cards. To release the +stuck /ACK signal: Send a command (at least one 01h byte) to both controller +slots.

+

Sony Mouse Compatible Games

+

  3D Lemmings
+  Alien Resurrection
+  Area 51
+  Ark of Time
+  Atari Anniversary Edition
+  Atlantis: The Lost Tales
+  Breakout: Off the Wall Fun
+  Broken Sword: The Shadow of the Templars
+  Broken Sword II: The Smoking Mirror
+  Clock Tower: The First Fear
+  Clock Tower II: The Struggle Within
+  Command & Conquer: Red Alert
+  Command & Conquer: Red Alert - Retaliation
+  Constructor (Europe)
+  Die Hard Trilogy
+  Die Hard Trilogy 2: Viva Las Vegas
+  Discworld
+  Discworld II: Missing Presumed...!?
+  Discworld Noir
+  Dune 2000
+  Final Doom
+  Galaxian 3
+  Ghoul Panic
+  Klaymen Klaymen: Neverhood no Nazon (Japan)
+  Lemmings and Oh No! More Lemmings
+  Monopoly
+  Music 2000
+  Myst
+  Neorude (Japan)
+  Perfect Assassin
+  Policenauts (Japan)
+  Puchi Carat
+  Quake II
+  Railroad Tycoon II
+  Rescue Shot
+  Risk
+  Riven: The Sequel to Myst
+  RPG Maker
+  Sentinel Returns
+  SimCity 2000
+  Syndicate Wars
+  Tempest 2000 (Tempest X3)
+  Theme Aquarium (Japan)
+  Transport Tycoon
+  Warhammer: Dark Omen
+  Warzone 2100
+  X-COM: Enemy Unknown
+  X-COM: Terror from the Deep
+  Z
+
+Note: There are probably many more mouse compatible games.
+Certain games, mostly FPS games such as Quake II and Doom, have players plug a standard digital/analog pad in port 1 +and a mouse in port 2. This way, players can use the mouse for aiming and shooting, while the pad can be used for moving, reloading, and so on.

+

Sony Mouse Component List

+

PCB "TD-T41V/\, MITSUMI"
+Component Side:
+

  1x 3pin   4.00MHz "[M]4000A, 85 2"
+  2x 2pin   button (left/right)
+  1x 8pin   connector (to cable with shield and 7 wires)
+  1x 3pin   "811, T994I"
+  2x 3pin   photo transistor (black)  ;\or so, no idea which one is
+  2x 2pin   photo diode (transparent) ;/sender and which is sensor
+  1x 2pin   electrolyt capacitor 16V, 10uF
+
+Solder/SMD Side:
+
  1x 32pin  "(M), SC442116, FB G22K, JSAA815B"
+  1x 14pin  "BA10339F, 817 L67" (Quad Comparator)
+  2x 3pin   "LC" (amplifier for photo diodes)
+  1x 3pin   "24-" (looks like a dual-diode or so)
+  plus many SMD resistors/capacitors
+
+Cable:
+
  PSX.Controller.Pin1 DAT   ---- brown  -- Mouse.Pin4
+  PSX.Controller.Pin2 CMD   ---- red    -- Mouse.Pin3
+  PSX.Controller.Pin3 +7.5V ---- N/A
+  PSX.Controller.Pin4 GND   ---- orange -- Mouse.Pin7 GND (G)
+  PSX.Controller.Pin5 +3.5V ---- yellow -- Mouse.Pin1
+  PSX.Controller.Pin6 /CSn  ---- green  -- Mouse.Pin5
+  PSX.Controller.Pin7 SCK   ---- blue   -- Mouse.Pin2
+  PSX.Controller.Pin8 /IRQ  ---- N/A
+  PSX.Controller.Pin9 /ACK  ---- purple -- Mouse.Pin6
+  PSX.Controller.Shield -------- shield -- Mouse.Pin8 GND (SHIELD)
+

+

PS/2 and USB Mouse Adaptors

+

Some keyboard adaptors are also including a mouse adaptor feature (either by +simulating normal Sony Mouse controller data, or via more uncommon ways like +using the PSX expansion port).
+Controllers - Keyboards

+

RS232 Mice

+

Below is some info on RS232 serial mice. That info isn't directly PSX related +as the PSX normally doesn't support those mice.
+With some efforts, one can upgrade the PSX SIO port to support RS232 voltages, +and with such a modded console one could use RS232 mice (in case one wants to +do that).
+The nocash PSX bios can map a RS232 mouse to a spare controller slot (thereby +simulating a Sony mouse), that trick may work with various PSX games.

+

Standard Serial Mouse

+

A serial mouse should be read at 1200 bauds, 7 data bits, no parity, 1 stop bit +(7N1) with DTR and RTS on. For best compatibility, the mouse should output 2 +stop bits (so it could be alternately also read as 7N2 or 8N1). When the mouse +gets moved, or when a button gets pressed/released, the mouse sends 3 or 4 +characters:
+

  __First Character____________________
+  6    First Character Flag (1)
+  5    Left Button  (1=Pressed)
+  4    Right Button (1=Pressed)
+  2-3  Upper 2bit of Vertical Motion
+  0-1  Upper 2bit of Horizontal Motion
+  __Second Character___________________
+  6    Non-first Character Flag (0)
+  5-0  Lower 6bit of Horizontal Motion
+  __Third Character____________________
+  6    Non-first Character Flag (0)
+  5-0  Lower 6bit of Vertical Motion
+  __Fourth Character (if any)__________
+  6    Non-first Character Flag (0)
+  5    Middle Button (1=Pressed)
+  4    Unused ???
+  3-0  Wheel  ???
+
+Additionally, the mouse outputs a detection character (when switching RTS (or +DTR?) off and on:
+
  "M" = Two-Button Mouse (aka "Microsoft" mouse)
+  "3" = Three-Button Mouse (aka "Logitech" mouse)
+  "Z" = Mouse-Wheel
+
+Normally, the detection response consist of a single character (usually "M"), +though some mice have the "M" followed by 11 additional characters of garbage +or version information (these extra characters have bit6=0, so after detection, +one should ignore all characters until receiving the first data character with +bit6=1).

+

Mouse Systems Serial Mouse (rarely used)

+

Accessed at 1200 bauds, just like standard serial mouse, but with 8N1 instead +7N1, and with different data bytes.
+

  __First Byte_________________________
+  7-3  First Byte Code (10000b)
+  2    Left? Button   (0=Pressed)
+  1    Middle? Button (0=Pressed)
+  0    Right? Button  (0=Pressed)
+  __Second Byte________________________
+  7-0  Horizontal Motion (X1)
+  __Third Byte_________________________
+  7-0  Vertical Motion   (Y1)
+  __Fourth Byte________________________
+  7-0  Horizontal Motion (X2)
+  __Fifth Byte_________________________
+  7-0  Vertical Motion   (Y2)
+
+The strange duplicated 8bit motion values are usually simply added together, +ie. X=X1+X2 and Y=Y1+Y2, producing 9bit motion values.

+

Notes

+

The Sony Mouse connects directly to the PSX controller port. Alternately serial +RS232 mice can be connected to the SIO port (with voltage conversion adaptor) +(most or all commercial games don't support SIO mice, nor does the original +BIOS do so, however, the nocash BIOS maps SIO mice to unused controller slots, +so they can be used even with commercial games; if the game uses BIOS functions +to read controller data).
+Serial Mice (and maybe also the Sony mouse) do return raw mickeys, so effects +like double speed threshold must (should) be implemented by software. Mice are +rather rarely used by PSX games. The game "Perfect Assassin" includes +ultra-crude mouse support, apparently without threshold, and without properly +matching the cursor range to the screen resolution.

+

Controllers - Racing Controllers

+

neGcon Racing Controller (Twist) (NPC-101/SLPH-00001/SLEH-0003)

+

  __Halfword 0 (Controller Info)_______________________________________________
+  0-15  Controller Info  (5A23h=neGcon)
+  __Halfword 1 (Digital Switches)______________________________________________
+  0-2   Not used       (always 1)       (would be Select, L3, R3 on other pads)
+  3     Start Button   (0=Pressed, 1=Released)
+  4     Joypad Up      (0=Pressed, 1=Released)
+  5     Joypad Right   (0=Pressed, 1=Released)
+  6     Joypad Down    (0=Pressed, 1=Released)
+  7     Joypad Left    (0=Pressed, 1=Released)
+  8-10  Not used       (always 1)       (would be L2, R2, L1 on other pads)
+  11    R Button       (0=Pressed, 1=Released) (would be R1 on other pads)
+  12    B Button       (0=Pressed, 1=Released) (would be /\ on other pads)
+  13    A Button       (0=Pressed, 1=Released) (would be () on other pads)
+  14-15 Not used       (always 1)              (would be ><, [] on other pads)
+  __Halfword 2 (Right joystick) (analog pad/stick in analog mode only)_________
+  0-7   Steering Axis    (00h=Left, 80h=Center, FFh=Right) (or vice-versa?)
+  8-15  Analog I button  (00h=Out ... FFh=In)  (Out=released, in=pressed?)
+  __Halfword 3 (Left joystick) (analog pad/stick in analog mode only)__________
+  0-7   Analog II button (00h=Out ... FFh=In)  (Out=released, in=pressed?)
+  8-15  Analog L button  (00h=Out ... FFh=In)  (Out=released, in=pressed?)
+
+The Twist controller works like a paddle or steering wheel, but doesn't have a +wheel or knob, instead, it can be twisted: To move into one direction (=maybe +right?), turn its right end away from you (or its left end towards you). For +the opposite direction (=maybe left?), do it vice-versa.
+
     _____         _  _         _____                              ____
+    |__L__\_______/ || \_______/__R__|                            /    \
+   /    _   namco   ||   neGcon       \                          /      \
+  |   _| |_         ||            B    |                        |       |
+  |  |_ X _|    ....||....     II   A  | .... Rotation Axis ... | ...  \|/
+  |    |_|          ||            I    |                        |
+  |        START    ||                 |                         \
+  |       ________  ||  ________       |                          \__\
+  |      /        \_||_/        \      |                             /
+   \____/                        \____/
+

+

Namco Volume Controller (a paddle with two buttons) (SLPH-00015)

+

This is a cut-down variant of the neGcon, just a featureless small box. It does +have the same ID value as neGcon (ID=5A23h), but, it excludes most digital, and +all analog buttons.
+

   _______
+  | namco |      Halfword 1 (digital buttons):
+  |       |      Bit3  Button A (0=Pressed) (aka neGcon Start button)
+  | A   B |      Bit13 Button B (0=Pressed) (aka neGcon A button aka () button)
+  |       |      Other bits     (not used, always 1)
+  |   _   |      Halfword 2 and 3 (analog inputs):
+  |  (_)  |      Steering Axis  (00h..FFh)  (as for neGcon)
+  |_______|      Analog I,II,L button values (not used, always 00h)
+

+

SANKYO N.ASUKA aka Nasca Pachinco Handle (SLPH-00007)

+

Another cut-down variant of the neGcon (with ID=5A23h, too). But, this one +seems to have only one button. Unlike Namco's volume controller it doesn't look +featureless. It looks pretty much as shown in the ascii-arts image below. Seems +to be supported by several irem titles. No idea what exactly it is used for, +it's probably not a sewing machine controller, nor an electronic amboss.
+

   ____ ____     Halfword 1 (digital buttons):
+  |   /   _ \    Bit12 Button   (0=Pressed) (aka neGcon B button aka /\ button)
+  |_ /   (_) )   Other bits     (not used, always 1)
+  |_|___    /\   Halfword 2 and 3 (analog inputs):
+   ____|   |_    Steering Axis  (00h..FFh)  (as for neGcon)
+  |__________|   Analog I,II,L button values (not used, always 00h)
+

+

Mad Catz Steering Wheel (SLEH-0006)

+

A neGcon compatible controller. The Twist-feature has been replaced by a +steering wheel (can be turned by 270 degrees), and the analog I and II buttons +by foot pedals. The analog L button has been replaced by a digital button (ie. +in neGcon mode, the last byte of the controller data can be only either 00h or +FFh). When not using the pedals, the I/II buttons on the wheel can be used +(like L button, they aren't analog though).
+

        __________________________
+       /   ____________________   \    Stick
+      /   /                    \   \    ___        Brakes  Gas
+     /   (                      )   \  (   )         II     I
+    /  I  \                    /  A  \  \ /          ___   ___
+   / /\ II \____________MODE__/  B /\ \  |          |   | |   |
+  | |  \ L  _                   R /  | | |          |!!!|_|!!!|___
+  | |   ) _| |_   MadCatz        (   | |_|_        /|!!!| |!!!|  /
+  | |  | |_ X _|                  |  | | | |      / |___| |___| /
+  | |  |   |_|                    |  | |  /      / =========== /
+  | |   \         SEL STA        /   | | /      / =========== /
+   \ \__/ ______________________ \__/ / /      /_____________/
+    \____/                      \____/_/
+       |___________________________|
+

+

Unlike the neGon, the controller has Select, >\< and [] buttons, and a +second set of L/R buttons (at the rear-side of the wheel) (no idea if L1/R1 or +L2/R2 are at front?). Aside from the neGcon mode, the controller can be also +switched to Digital mode (see below for button chart).

+

MadCatz Dual Force Racing Wheel

+

Same as above, but with a new Analog mode (additionally to Digital and neGcon +modes). The new mode is for racing games that support only Analog Joypads +(instead of neGcon). Additionally it supports vibration feedback.

+

MadCatz MC2 Vibration compatible Racing Wheel and Pedals

+

Same as above, but with a redesigned wheel with rearranged buttons, the digital +pad moved to the center of the wheel, the L/R buttons at the rear-side of the +wheel have been replaced by 2-way butterfly buttons ("pull towards user" acts +as normal, the new "push away from user" function acts as L3/R3).
+

            ____________________
+           /  ________________  \   ___ Stick      Brakes  Gas
+          /  /       MC2      \  \ (   )             ___   ___
+         /  /__________________\  \ \ /             |   | |   |
+        |    A ()    _|_    I ><   | |              |!!!|_|!!!|___
+        |   B /\ _    |    _ II [] | |             /|!!!| |!!!|  /
+     ___|  L2   / \  STA  / \ R2   |_|_           / |___| |___| /
+    /    \     /   | SEL |   \    /    \         / =========== /
+   /  ____\    |___|     |___|   /____  \       / =========== /
+  /__/     \____________________/     \__\     /_____________/
+

+

MadCatz Button Chart

+

  Mode     Buttons...................... Gas Brake Stick Wheel
+  Digital  >< [] () /\ L1 R1 L2 R2 L1 R1 ><  ()    L1/R1 lt/rt
+  Analog   >< [] () /\ L1 R1 L2 R2 L3 R3 UP  DN    L1/R1 LT/RT
+  Negcon   I  II A  B  L  R  L  R  L  R  I   II    up/dn Twist
+
+Whereas, lt/rt/up/dn=Digital Pad, UP/DN=Left Analog Pad Up/Down, LT/RT=Right +Analog Pad Left/Right. Analog mode is supported only by the Dual Force and MC2 +versions, L3/R3 only by the MC2 version.

+

Namco Jogcon (NPC-105/SLEH-0020/SLPH-00126/SLUH-00059)

+

  __Halfword 0 (Controller Info)___________________
+  0-15  Controller Info  (5AE3h=Jogcon in Jogcon mode) (ie. not Digital mode)
+ halfword1: buttons: same as digital pad
+ halfword2:
+   0    unknown (uh, this isn't LSB of rotation?)
+   1-15 dial rotation (signed offset since last read?) (or absolute position?)
+ halfword3:
+   0    flag: dial was turned left  (0=no, 1=yes)
+   1    flag: dial was turned right (0=no, 1=yes)
+   2-15 unknown
+
+Rotations of the dial are recognized by an optical sensor (so, unlike +potentiometers, the dial can be freely rotated; by more than 360 degrees). The +dial is also connected to a small motor, giving it a real force-feedback effect +(unlike all other PSX controllers which merely have vibration feedback). +Although that's great, the mechanics are reportedly rather cheap and using the +controller doesn't feel too comfortable. The Jogcon is used only by Ridge Racer +4 for PS1 (and Ridge Racer 5 for PS2), and Breakout - Off the Wall Fun.
+The Mode button probably allows to switch between Jogcon mode and Digital Pad +mode (similar to the Analog button on other pads), not sure if the mode can be +also changed by software via configuration commands...? Unknown how the motor +is controlled; probably somewhat similar to vibration motors, ie. by the M1 +and/or M2 bytes, but there must be also a way to select clockwise and +anticlockwise direction)...? The controller does reportedly support config +command 4Dh (same as analog rumble).
+
       ___       ________       ___
+    __/_L_\__   /        \   __/_R_\__
+   /    _    \ / LED MODE \-/         \
+  |   _| |_   | SEL    STA |     /\    |
+  |  |_ X _|  |  ________  |  []    () |
+  |    |_|    | /        \ |     ><    |
+  |\_________/\/          \/\__ ______/|
+  |       |   |   JOGCON   |   |       |
+  |       |   |    DIAL    |   |       |
+  |       |    \          /    |       |
+  |       |     \________/     |       |
+  |       |                    |       |
+  |       |                    |       |
+   \_____/                      \_____/
+

+

Controllers - Lightguns

+

There are two different types of PSX lightguns (which are incompatible with +each other).

+

Namco Lightgun (GunCon)

+

Namco's Cinch-based lightguns are extracting Vsync/Hsync timings from the video +signal (via a cinch adaptor) (so they are working completely independed of +software timings).
+Controllers - Lightguns - Namco (GunCon)

+

Konami Lightgun (IRQ10)

+

Konami's IRQ10-based lightguns are using the lightgun input on the controller +slot (which requires IRQ10/timings being properly handled at software side).
+Controllers - Lightguns - Konami Justifier/Hyperblaster (IRQ10)
+The IRQ10-method is reportedly less accurate (although that may be just due to +bugs at software side).

+

Third-Party Lightguns

+

There are also a lot of unlicensed lightguns which are either IRQ10-based, or +Cinch-based, or do support both.
+For example, the Blaze Scorpion supports both IRQ10 and Cinch, and it does +additionally have a rumble/vibration function; though unknown how that rumble +feature is accessed, and which games are supporting it).

+

Lightgun Games

+

Controllers - Lightguns - PSX Lightgun Games

+

Compatibilty Notes (IRQ10 vs Cinch, PAL vs NTSC, Calibration)

+

Some lightguns are reportedly working only with PAL or only with NTSC games +(unknown which guns, and unknown what is causing problems; the IRQ10 method +should be quite hardware independed, the GunCon variant, too, although +theoretically, some GunCon guns might have problems to extract Vsync/Hsync from +either PAL or NTSC composite signals).
+Lightguns from different manufacturers are reportedly returning slightly +different values, so it would be recommended to include a calibration function +in the game, using at least one calibration point (that would also resolve +different X/Y offsets caused by modifying GP1 display control registers).
+Lightguns are needing to sense light from the cathode ray beam; as such they +won't work on regions of the screen that contain too dark/black graphics.

+

Controllers - Lightguns - Namco (GunCon)

+

GunCon Cinch-based Lightguns (Namco)

+

  __Halfword 0 (Controller Info)___________________
+  0-15  Controller Info  (5A63h=Namco Lightgun; GunCon/Cinch Type)
+  __Halfword 1 (Buttons)___________________________
+  0-2   Not used              (All bits always 1)
+  3     Button A (Left Side)  (0=Pressed, 1=Released) ;aka Joypad Start
+  4-12  Not used              (All bits always 1)
+  13    Trigger Button        (0=Pressed, 1=Released) ;aka Joypad O-Button
+  14    Button B (Right Side) (0=Pressed, 1=Released) ;aka Joypad X-Button
+  15    Not used              (All bits always 1)
+  __Halfword 2 (X)_________________________________
+  0-15  8MHz clks since HSYNC (01h=Error, or 04Dh..1CDh)
+  __Halfword 3 (Y)_________________________________
+  0-15  Scanlines since VSYNC (05h/0Ah=Error, PAL=20h..127h, NTSC=19h..F8h)
+
+Caution: The gun should be read only shortly after begin of VBLANK.

+

Error/Busy Codes

+

Coordinates X=0001h, Y=0005h indicates "unexpected light":
+

  ERROR: Sensed light during VSYNC (eg. from a Bulb or Sunlight).
+
+Coordinates X=0001h, Y=000Ah indicates "no light", this can mean either:
+
  ERROR: no light sensed at all (not aimed at screen, or screen too dark).
+  BUSY: no light sensed yet (when trying to read gun during rendering).
+
+To avoid the BUSY error, one should read the gun shortly after begin of VBLANK +(ie. AFTER rendering, but still BEFORE vsync). Doing that isn't as simple as +one might think:
+On a NTSC console, time between VBLANK and VSYNC is around 30000 cpu clks, +reading the lightgun (or analog joypads) takes around 15000 cpu clks. So, +reading two controllers within that timeframe may be problematic (and reading +up to eight controllers via multitaps would be absolutely impossible). As a +workaround, one may arrange the read-order to read lightguns at VBLANK (and +joypads at later time). If more than one lightgun is connected, then one may +need to restrict reading to only one (or maybe: max two) guns per frame.

+

Minimum Brightness

+

Below are some average minimum brightness values, the gun may be unable to +return position data near/below that limits (especially coordinates close to +left screen border are most fragile). The exact limits may vary from gun to +gun, and will also depend on the TV Set's brightness setting.
+

  666666h Minimum Gray
+  770000h Minimum Blue
+  007700h Minimum Green
+  000099h Minimum Red
+
+The gun does also work with mixed colors (eg. white bold text on black +background works without errors, but the returned coordinates are a bit "jumpy" +in that case; returning the position of the closest white pixels).
+BUG: On a plain RED screen, aiming at Y>=00F0h, the gun is randomly +returning either Y, or Y-80h (that error occurs in about every 2nd frame, ie. +at 50% chance). It's strange... no idea what is causing that effect.

+

Coordinates

+

The coordinates are updated in all frames (as opposed to some lightguns which +do update them only when pulling the trigger).
+The absolute min/max coordinates may vary from TV set to TV set (some may show +a few more pixels than others). The relation of the gun's Screen Coodinates to +VRAM Coordinates does (obviously) depend on where the VRAM is located on the +screen; ie. on the game's GP1(06h) and GP1(07h) settings.
+Vertical coordinates are counted in scanlines (ie. equal to pixels). Horizontal +coordinates are counted in 8MHz units (which would equal a resolution of 385 +pixels; which can be, for example, converted to 320 pixel resolution as +X=X*320/385).

+

Misinformation (from bugged homebrew source code)

+
  __Halfword 2 (X)_________________________________
+  0-7   X-Coordinate  (actual: see X-Offset)             ;\with unspecified
+  8-15  X-Offset      (00h: X=X-80, Nonzero: X=X-80+220) ;/dotclock?
+  __Halfword 3 (Y)_________________________________
+  0-7   Y-Coordinate  (actual: Y=Y-25) (but then, max is only 230, not 263 ?)
+  8-15  Pad ID        (uh, what id?) (reportedly too dark/bright error flag?)
+
+

Namco Lightgun Drawing

+
           _-_______________________--_
+  ----->  |    namco            \\\\   \    Namco G-Con 45 (light gray) (cinch)
+  sensor   |............ .. .....\\\\...|_
+          |_ :          :..   _____      _\
+            |  O        :__../  )))|    (
+             \__________/  |_\____/|     \
+               :               :   |      |
+               :               :   |      |  NPC-103
+         A-Button (Left)   Trigger |      |  SLPH-00034/SLEH-0007/SLUH-00035
+         B-Button (Right)          |______|
+
+

See also

+

Pinouts - Component List and Chipset Pin-Outs for Namco Lightgun, NPC-103

+

Controllers - Lightguns - Konami Justifier/Hyperblaster (IRQ10)

+

Overall IRQ10-Based Lightgun Access

+

  Send  01h 42h 00h x0h 00h
+  Reply HiZ 31h 5Ah buttons
+
+The purpose of the "x0h" byte is probably to enable IRQ10 (00h=off, 10h=on), +this would allow to access more than one lightgun (with only one per frame +having the IRQ enabled).

+

Standard IRQ10-based Lightguns (Konami)

+

The Controller Data simply consists of the ID and buttons states:
+

  __Halfword 0 (Controller Info)___________________
+  0-15  Controller Info  (5A31h=Konami Lightgun; Timer/IRQ10 type)
+  __Halfword 1 (Buttons)
+  0-2   Not used                 (All bits always 1)
+  3     Start Button (Left Side) (0=Pressed, 1=Released)  ;aka Joypad Start
+  4-13  Not used                 (All bits always 1)
+  14    Back Button  (Rear End)  (0=Pressed, 1=Released)  ;aka Joypad X-Button
+  15    Trigger Button           (0=Pressed, 1=Released)  ;aka Joypad []-Button
+
+The coordinates aren't part of the controller data, instead they must be read +from Timer 0 and 1 upon receiving IRQ10 (see IRQ10 Notes below).

+

Konami Lightgun Drawing

+
     __                 ______ _
+   _|__\_______________/  ___ \ \   Konami Justifier/Hyperblaster (light green)
+  |   _______________ __ /   \ \ \
+  |__|   _ _ _ _     |==|    O| \O\ .... Back Button (Rear End)
+     |__:_:_:_:_:__  |___\__ /  ( (
+                   |_|  ) \  :   \ \
+      Trigger ......  \___/| :...|.|.... Start Button (Left Side)
+                           |     | |
+                           |     | | SLPH-00013/SLPH-00014/SLEH-0005/SLUH-00017
+                          /     _|_|
+                          \___--
+
+

Konami IRQ10 Notes

+

The PSX does have a lightgun input (Pin 8 of the controller), but, Sony did +apparently "forget" to latch the current cathode ray beam coordinates by +hardware when sensing the lightgun signal (quite strange, since that'd be a +simple, inexpensive, and very obvious feature for a gaming console).
+Instead, the lightgun signal triggers IRQ10, and the interrupt handler is +intended to "latch" the coordinates by software (by reading Timer 0 and 1 +values, which must configured to be synchronized with the GPU).
+That method requires IRQ handling to be properly implemented in software +(basically, IRQs should not be disabled for longer periods, and DMA transfers +should not block the bus for longer periods). In practice, most programmers +probably don't realize how to do that, to the worst, Sony seems to have +delivered a slightly bugged library (libgun) to developers.
+For details on Timers, see:
+Timers
+In some consoles, IRQ10 seems to be routed through a Secondary IRQ Controller, +see:
+EXP2 DTL-H2000 I/O Ports

+

IRQ10 Priority

+

For processing IRQ10 as soon as possible, it should be assigned higher priority +than all other IRQs (ie. when using the SysEnqIntRP BIOS function, it should be +the first/newest element in priority chain 0). The libgun stuff assigns an even +higher priority by patching the BIOS exception handler, causing IRQ10 to be +processed shortly before processing the priority chains (the resulting IRQ +priority isn't actually higher as when using 1st element of chain 0; the main +difference is that it skips some time consuming code which pushes registers +R4..R30). For details on that patch, see:
+BIOS Patches
+Even if IRQ10 has highest priority, execution of (older) other IRQs may cause a +new IRQ10 to be executed delayed (because IRQs are disabled during IRQ +handling), to avoid that problem: Best don't enable any other IRQs except IRQ0 +and IRQ10, or, if you need other IRQs, best have them enabled only during +Vblank (there are no scanlines drawn during vblank, so IRQ10 should never +trigger during that period). DMAs might also slow down IRQ execution, so best +use them only during Vblank, too.

+

IRQ10 Timer Reading

+

To read the current timer values the IRQ10 handler would be required to be +called \<immediately> after receiving the IRQ10 signal, which is more or +less impossible; if the main program is trying to read a mul/div/gte result +while the mul/div/gte operation is still busy may stop the CPU for some dozens +of clock cycles, and active DMA transfers or cache hits and misses in the IRQ +handler may cause different timings, moreover, timings may become completely +different if IRQs are disabled (eg. while another IRQ is processed).
+However, IRQ10 does also get triggered in the next some scanlines, so the first +IRQ10 is used only as a notification that the CPU should watch out for further +IRQ10's. Ie. the IRQ10 handler should disable all DMAs, acknowledge IRQ10, and +then enter a waitloop that waits for the IRQ10 bit in I_STAT to become set +again (or abort if a timeout occurs) and then read the timers, reportedly like +so:
+

  IF NTSC then X=(Timer0-140)*0.198166, Y=Timer1
+  IF PAL  then X=(Timer0-140)*0.196358, Y=Timer1
+
+No idea why PAL/NTSC should use different factors, that factors are looking +quite silly/bugged, theoretically, the pixel-to-clock ratio should be the +exactly same for PAL and NTSC...?
+Mind that reading Timer values in Dotclock/Hblank mode is unstable, for Timer1 +this can be fixed by the read-retry method, for Timer0 this could be done too, +but one would need to subtract the retry-time to get a correct coordinate; +alternately Timer0 can run at system clock (which doesn't require read-retry), +but it must be then converted to video clock (mul 11, div 7), and then from +video clock to dot clock (eg. div 8 for 320-pixel mode).
+Above can be repeated for the next some scanlines (allowing to take the medium +values as result, and/or to eliminate faulty values which are much bigger or +smaller than the other values). Once when you have collected enough values, +disable IRQ10, so it won't trigger on further scanlines within the current +frame.

+

IRQ10 Bugs

+

BUG: The "libgun" library doesn't acknowledge the old IRQ10 \<immediately> +before waiting for a new IRQ10, so the timer values after sensing the new IRQ10 +are somewhat random (especially for the first processed scanline) (the library +allows to read further IRQ10's in further scanlines, which return more stable +results).
+No idea how many times IRQ10 gets typically repeated? Sporting Clays allocates +a buffer for up to 20 scanlines (which would cause pretty much of a slowdown +since the CPU is just waiting during that period) (nethertheless, the game uses +only the first timer values, ie. the bugged libgun-random values).

+

Unknown if/how two-player games (with 2 lightguns) are working with the IRQ10 +method... if IRQ10 is generated ONLY after pressing the trigger button, then it +may work, unless both players have Trigger pressed at the same time... and, +maybe one can enable/disable the lightguns by whatever commmand being sent to +the controller (presumably that "x0h" byte, see above), so that gun 1 generates +IRQ10 only in each second frame, and gun 2 only in each other frame...?

+

Controllers - Lightguns - PSX Lightgun Games

+

PSX Lightgun Games

+

Some games are working only with IRQ10 or only with Cinch, some games support +both methods:
+

  Area 51 (Mesa Logic/Midway) (IRQ10)
+  Crypt Killer (Konami) (IRQ10)
+  Die Hard Trilogy 1: (Probe Entertainment) (IRQ10)
+  Die Hard Trilogy 2: Viva Las Vegas (n-Space) (IRQ10/Cinch)
+  Elemental Gearbolt (Working Designs) (IRQ10/Cinch)
+  Extreme Ghostbusters: Ultimate Invasion (LSP) (Cinch)
+  Galaxian 3 (Cinch)
+  Ghoul Panic (Namco) (Cinch)
+  Gunfighter: The Legend of Jesse James (Rebellion) (Cinch)
+  Judge Dredd (Gremlin) (Cinch)
+  Lethal Enforcers 1-2 (Konami) (IRQ10)
+  Maximum Force (Midway) (IRQ10/Cinch)
+  Mighty Hits Special (Altron) (EU/JPN) (Cinch)
+  Moorhuhn series (Phenomedia) (Cinch)
+  Point Blank 1-3 (Namco) (Cinch)
+  Project Horned Owl (Sony) (IRQ10)
+  Rescue Shot (Namco) (Cinch)
+  Resident Evil: Gun Survivor (Capcom) (JPN/PAL versions) (Cinch)
+  Silent Hill (IRQ10) ("used for an easter egg")
+  Simple 1500 Series Vol.024 - The Gun Shooting (unknown type)
+  Simple 1500 Series Vol.063 - The Gun Shooting 2 (unknown type)
+  Snatcher (IRQ10)
+  Sporting Clays (Charles Doty) (homebrew with buggy source code) (IRQ10/Cinch)
+  Star Wars Rebel Assault II (IRQ10)
+  Time Crisis, and Time Crisis 2: Project Titan (Namco) (Cinch)
+
+Note: The RPG game Dragon Quest Monsters does also contain IRQ10 lightgun code +(though unknown if/when/where the game does use that code).

+

Controllers - Configuration Commands

+

Some controllers can be switched from Normal Mode to Config Mode. The Config +Mode was invented for activating the 2nd rumble motor in SCPH-1200 analog +joypads. Additionally, the Config commands can switch between analog/digital +inputs (without needing to manually press the Analog button), activate more +analog inputs (on Dualshock2), and read some type/status bytes.

+

Normal Mode

+

  42h "B" Read Buttons (and analog inputs when in analog mode)
+  43h "C" Enter/Exit Configuration Mode (stay normal, or enter)
+
+Transfer length in Normal Mode is 5 bytes (Digital mode), or 9 bytes (Analog +mode), or up to 21 bytes (Dualshock2).

+

Configuration Mode

+

  40h "@" Unused, or Dualshock2: Get/Set ButtonAttr?
+  41h "A" Unused, or Dualshock2: Get Reply Capabilities
+  42h "B" Read Buttons AND analog inputs (even when in digital mode)
+  43h "C" Enter/Exit Configuration Mode (stay config, or exit)
+  44h "D" Set LED State (analog mode on/off)
+  45h "E" Get LED State (and Type/constants)
+  46h "F" Get Variable Response A (depending on incoming bit)
+  47h "G" Get whatever values (response HiZ F3h 5Ah 00h 00h 02h 00h 01h 00h)
+  48h "H" Unknown (response HiZ F3h 5Ah 00h 00h 00h 00h 01h 00h)
+  49h "I" Unused
+  4Ah "J" Unused
+  4Bh "K" Unused
+  4Ch "L" Get Variable Response B (depending on incoming bit)
+  4Dh "M" Get/Set RumbleProtocol
+  4Eh "N" Unused
+  4Fh "O" Unused, or Dualshock2: Set ReplyProtocol
+
+Transfer length in Config Mode is always 9 bytes.

+

Normal Mode - Command 42h "B" - Read Buttons (and analog inputs when enabled)

+

  Send  01h 42h 00h xx  yy  (00h 00h 00h 00h) (...)
+  Reply HiZ id  5Ah buttons ( analog-inputs ) (dualshock2 buttons...)
+
+The normal read command, see Standard Controller chapter for details on buttons +and analog inputs. The xx/yy bytes have effect only if rumble is unlocked; use +Command 43h to enter config mode, and Command 4Dh to unlock rumble. Command 4Dh +has billions of combinations, among others allowing to unlock only one of the +two motors, and to exchange the xx/yy bytes, however, with the default values, +xx/yy are assigned like so:
+
  yy.bit0-7 ---> Left/Large Motor M1 (analog slow/fast) (00h=stop, FFh=fastest)
+  xx.bit0   ---> Right/small Motor M2 (digital on/off)  (0=off, 1=on)
+
+The Left/Large motor starts spinning at circa min=50h..60h, and, once when +started keeps spinning downto circa min=38h. The exact motor start boundary +depends on the current position of the weight (if it's at the "falling" side, +then gravity helps starting), and also depends on external movements (eg. it +helps if the user or the other rumble motor is shaking the controller), and may +also vary from controller to controller, and may also depend on the room +temperature, dirty or worn-out mechanics, etc.

+

Normal Mode - Command 43h "C" - Enter/Exit Configuration Mode

+

  Send  01h 43h 00h xx  00h (zero padded...)   (...)
+  Reply HiZ id  5Ah buttons (analog inputs...) (dualshock2 buttons...)
+
+When issuing command 43h from inside normal mode, the response is same as for +command 42h (button data) (and analog inputs when in analog mode) (but without +M1 and M2 parameters). While in config mode, the ID bytes are always "F3h 5Ah" +(instead of the normal analog/digital ID bytes).
+
  xx=00h Stay in Normal mode
+  xx=01h Enter Configuration mode
+
+Caution: Additionally to activating configuration commands, entering config +mode does also activate a Watchdog Timer which does reset the controller if +there's been no communication for about 1 second or so. The watchdog timer +remains active even when returning to normal mode via Exit Config command. The +reset does disable and lock rumble motors, and switches the controller to +Digital Mode (with LED=off, and analog inputs disabled). To prevent this, be +sure to keep issuing joypad reads even when not needing user input (eg. while +loading data from CDROM).
+Caution 2: A similar reset occurs when the user pushes the Analog button; this +is causing rumble motors to be stopped and locked, and of course, the +analog/digital state gets changed.
+Caution 3: If config commands were used, and the user does then push the analog +button, then the 5Ah-byte gets replaced by 00h (ie. responses change from "HiZ +id 5Ah ..." to "HiZ id 00h ...").

+

Config Mode - Command 42h "B" - Read Buttons AND analog inputs

+

  Send  01h 42h 00h M2  M1  00h 00h 00h 00h
+  Reply HiZ F3h 5Ah buttons  analog-inputs
+
+Same as command 42h in normal mode, but with forced analog response (ie. analog +inputs and L3/R3 buttons are returned even in Digital Mode with LED=Off).

+

Config Mode - Command 43h "C" - Enter/Exit Configuration Mode

+

  Send  01h 43h 00h xx  00h 00h 00h 00h 00h
+  Reply HiZ F3h 5Ah 00h 00h 00h 00h 00h 00h
+
+Equivalent to command 43h in normal mode, but returning 00h bytes rather than +button data, can be used to return to normal mode.
+
  xx=00h Enter Normal mode (Exit Configuration mode)
+  xx=01h Stay in Configuration mode
+
+Back in normal mode, the rumble motors (if they were enabled) can be controlled +with normal command 42h.

+

Config Mode - Command 44h "D" - Set LED State (analog mode on/off)

+

  Send  01h 44h 00h Led Key 00h 00h 00h 00h
+  Reply HiZ F3h 5Ah 00h 00h Err 00h 00h 00h
+
+The Led byte can be:
+
  When Led=00h      --> Digital mode, with LED=Off
+  When Led=01h      --> Analog mode, with LED=On/red
+  When Led=02h..FFh --> Ignored (and, in case of dualshock2: set Err=FFh)
+
+The Key byte can be:
+
  When Key=00h..02h --> Unlock (allow user to push Analog button)
+  When Key=03h      --> Lock (stay in current mode, ignore Analog button)
+  When Key=04h..FFh --> Acts same as (Key AND 03h)
+
+The Err byte is usually 00h (except, Dualshock2 sets Err=FFh upon Led=02h..FFh; +older PSX/PSone controllers don't do that).

+

Config Mode - Command 45h "E" - Get LED State (and Type/constants)

+

  Send  01h 45h 00h 00h 00h 00h 00h 00h 00h
+  Reply HiZ F3h 5Ah Typ 02h Led 02h 01h 00h
+
+Returns two interesting bytes:
+
  Led: Current LED State (00h=Off, 01h=On/red)
+  Typ: Controller Type (01h=PSX/Analog Pad, 03h=PS2/Dualshock2)
+
+The other bytes might indicate the number of rumble motors, analog sticks, or +version information, or so.

+

Config Mode - Command 46h "F" - Get Variable Response A

+

  Send  01h 46h 00h ii  00h 00h 00h 00h 00h
+  Reply Hiz F3h 5Ah 00h 00h cc  dd  ee  ff
+
+When ii=00h --> returns cc,dd,ee,ff = 01h,02h,00h,0ah
+When ii=01h --> returns cc,dd,ee,ff = 01h,01h,01h,14h
+Otherwise --> returns cc,dd,ee,ff = all zeroes
+Note: This is called PadInfoAct in official docs, ii is the actuator (aka +motor) and the last response byte contains its current drain (10 or 20 units). +Whereas, Sony inisits that controllers should never exceed 60 units (eg. when +having more than 2 joypads connected to multitaps).

+

Config Mode - Command 47h "G" - Get whatever values

+

  Send  01h 47h 00h 00h 00h 00h 00h 00h 00h
+  Reply HiZ F3h 5Ah 00h 00h 02h 00h 01h 00h
+
+Purpose unknown.

+

Config Mode - Command 4Ch "L" - Get Variable Response B

+

  Send  01h 4Ch 00h ii  00h 00h 00h 00h 00h
+  Reply Hiz F3h 5Ah 00h 00h 00h dd  00h 00h
+
+When ii=00h --> returns dd=04h.
+When ii=01h --> returns dd=07h.
+Otherwise --> returns dd=00h.

+

Config Mode - Command 48h "H" - Unknown (response HiZ F3h 5Ah 4x00h 01h 00h)

+

  Send  01h 48h 00h ii  00h 00h 00h 00h 00h
+  Reply HiZ F3h 5Ah 00h 00h 00h 00h ee  00h
+
+When ii=00h..01h --> returns ee=01h.
+Otherwise --> returns ee=00h.
+Purpose unknown. The command does not seem to be used by any games.

+

Config Mode - Command 4Dh "M" - Get/Set RumbleProtocol

+

Controllers - Vibration/Rumble Control

+

Config Mode - Command 40h "@" Dualshock2: Get/Set ButtonAttr?

+

Config Mode - Command 41h "A" Dualshock2: Get Reply Capabilities

+

Config Mode - Command 4Fh "O" Dualshock2: Set ReplyProtocol

+

Controllers - Analog Buttons (Dualshock2)

+

Config Mode - Command 49h "I" - Unused

+

Config Mode - Command 4Ah "J" - Unused

+

Config Mode - Command 4Bh "K" - Unused

+

Config Mode - Command 4Eh "N" - Unused

+

Config Mode - Command 40h "@" - Unused (except, used by Dualshock2)

+

Config Mode - Command 41h "A" - Unused (except, used by Dualshock2)

+

Config Mode - Command 4Fh "O" - Unused (except, used by Dualshock2)

+

  Send  01h 4xh 00h 00h 00h 00h 00h 00h 00h
+  Reply HiZ F3h 5Ah 00h 00h 00h 00h 00h 00h
+
+These commands do return a bunch of 00h bytes. These commands do not seem to be +used by any games (apart from the Dualshock2 commands being used by Dualshock2 +games).

+

Note

+

Something called "Guitar Hero controller" does reportedly also support Config +commands. Unknown if that thing does have the same inputs & rumble motors +as normal analog PSX joypads, and if it does return special type values.

+

Controllers - Vibration/Rumble Control

+

Rumble (aka "Vibration Function") is basically controlled by two previously +unused bytes of the standard controller Read command.
+There are two methods to control the rumble motors, the old method is very +simple (but supports only one motor), the new method envolves a bunch of new +configuration commands (and supports two motors).
+

  SCPH-1150  DualAnalog Pad with 1 motor                  ;-old rumble method
+  SCPH-1200  DualAnalog Pad with 2 motors, PSX-design     ;\new rumble method
+  SCPH-110   DualAnalog Pad with 2 motors, PSone-design   ;/
+  SCPH-10010 DualAnalog Pad with 2 motors, PS2/Dualshock2 ;-plus analog buttons
+  Blaze Scorpion Lightgun with rumble      ;\unknow how to control rumble
+  Fishing controllers with rumble          ;/
+  SCPH-1180 Analog Pad without rumble      ;\unknow if there're config commands
+  SCPH-1110 Analog Stick without rumble    ;/for analog mode (probably not)
+

+

Old Method, one motor, no config commands (SCPH-1150, SCPH-1200, SCPH-110)

+

The SCPH-1150 doesn't support any special config commands, instead, rumble is +solely done via the normal joypad read command:
+

  Send  01h 42h 00h xx  yy  (00h 00h 00h 00h)
+  Reply HiZ id  5Ah buttons ( analog-inputs )
+
+The rumble motor is simply controlled by three bits in the xx/yy bytes:
+
  xx --> must be 40h..7Fh            (ie. bit7=0, bit6=1) ;\switches motor on
+  yy --> must be 01h,03h,...,FDh,FFh (ie. bit0=1)         ;/
+
+The motor control is digital on/off (no analog slow/fast), recommended values +would be yyxx=0140h=on, and yyxx=0000h=off.
+LED state is don't care (rumble works with led OFF, RED, and GREEN). In absence +of config commands, the LED can be controlled only manually (via Analog +button), the current LED state is implied in the controller "id" byte.
+For backwards compatibility, the above old method does also work on SCPH-1200 +and SCPH-110 (for controlling the right/small motor), alternately those newer +pads can use the config commands (for gaining access to both motors).

+

New Method, two motors, with config commands (SCPH-1200, SCPH-110)

+

For using the new rumble method, one must unlock the new rumble mode, for that +purpose Sony has invented a "slightly" overcomplicated protocol with not less +than 16 new commands (the rumble relevant commands are 43h and 4Dh, also, +command 44h may be useful for activating analog inputs by software, and, once +when rumble is unlocked, command 42h is used to control the rumble motors). +Anyways, here's the full command set...
+Controllers - Configuration Commands
+And, the rumble-specific config command is described below...

+

Config Mode - Command 4Dh "M" - Get/Set RumbleProtocol

+

  Send  01h 4Dh 00h aa  bb  cc  dd  ee  ff     ;<-- set NEW aa..ff values
+  Reply Hiz F3h 5Ah aa  bb  cc  dd  ee  ff     ;<-- returns OLD aa..ff values
+
+Bytes aa,bb,cc,dd,ee,ff control the meaning of the 4th,5th,6th,7th,8th,9th +command byte in the controller read command (Command 42h).
+
  00h      = Map Right/small Motor (Motor M2) to bit0 of this byte
+  01h      = Map Left/Large Motor (Motor M1) to bit0-7 of this byte
+  02h..FEh = Unknown (can be mapped, maybe for extra motors/outputs)
+  FFh      = Map nothing to this byte
+
+In practice, one would usually send either one of these command/values:
+
  Send  01h 4Dh 00h 00h 01h FFh FFh FFh FFh    ;enable new method (two motors)
+  Send  01h 4Dh 00h FFh FFh FFh FFh FFh FFh    ;disable motor control
+
+Alternately, one could swap the motors by swapping values in aa/bb. Or one +could map the motors anywhere to cc/dd/ee/ff (this will increase the command +length in digital mode, hence changing digital mode ID from 41h to 42h or 43h). +Or, one could map further rumble motors or other outputs to the six bytes (if +any such controller would exist).
+In the initial state, aa..ff are all FFh, and the controller does then use the +old rumble control method (with only one motor). However, that old method gets +disabled once when having messed with config commands (unknown if/how one can +re-enable the old method by software).

+

Unknown Dualshock2 Vibration

+

Dualshock2 does reportedly have "two more levels of vibration", unknown what +that means and if it's used by any PSX or PS2 games... it might refer to the +small motor which usually has only 2 levels (on/off) and might have 4 levels +(fast/med/slow/off) on dualshock2... but, if so, it's unknown how to +control/unlock that feature.
+Also, the PSone controller (SCPH-110) appear to have been released shortly +after Dualshock2, unknown if that means that it might have that feature, too.

+

Note

+

Rumble is a potentially annoying feature, so games that do support rumble +should also include an option to disable it.

+

Controllers - Analog Buttons (Dualshock2)

+

Dualshock2 has three new commands (40h,41h,4Fh) for configuring analog buttons. +Additionally, Command 45h does return a different type byte for Dualshock2.
+Dualshock2 is a PS2 controller. However, it can be also used with PSX games +(either by connecting the controller to a PSX console, or by playing a PSX game +on a PS2 console).
+The analog button feature is reportedly rarely used by PS2 games (and there +aren't any PSX games known to use it).

+

Config Mode - Command 40h "@" Dualshock2: Get/Set ButtonAttr?

+

  Send  01h 40h 00h Idx Val 00h 00h 00h 00h  ;<-- Set NEW Val, array[Idx]=Val
+  Reply HiZ F3h 5Ah 00h 00h Val 00h 00h 00h  ;<-- Old Val (or FFh when Idx>0Bh)
+
+Allows to change twelve 3bit values (with Idx=00h..0Bh, and Val=00h..03h). +Default is Val=02h. Purpose is unknown, the 12 values might be related to the +12 analog buttons, but there is no noticable difference between Val=0,1,2,3. +Maybe it does have some subtle effects on things like...
+
  Digital button sensitivity, or Analog button sensitivity, or
+  Analog button bit-depth/conversion speed, or something else?
+

+

Config Mode - Command 41h "A" Dualshock2: Get Reply Capabilities

+

  Send  01h 41h 00h 00h 00h 00h 00h 00h 00h
+  Reply HiZ F3h 5Ah FFh FFh 03h 00h 00h 00h
+
+This seems to return a constant bitmask indicating which reply bytes can be +enabled/disabled via Command 4Fh (ie. 3FFFFh = 18 bits).

+

Config Mode - Command 4Fh "O" Dualshock2: Set ReplyProtocol

+

  Send  01h 41h 00h aa  bb  cc  dd  ee  ff
+  Reply HiZ F3h 5Ah 00h 00h 00h 00h 00h 00h
+
+This can output some 48bit value (bit0=aa.bit0, bit47=ff.bit7), used to +enable/disable Reply bytes in the controller read command (Command 42h).
+
  -      HighZ                   (always transferred)      1st byte
+  -      ID/Mode/Len             (always transferred)      2nd byte
+  -      5Ah                     (always transferred)      3rd byte
+  0      LSB of digital buttons  (0=No, 1=Yes)             4th byte
+  1      MSB of digital buttons  (0=No, 1=Yes)             5th byte
+  2      RightJoyX               (0=No, 1=Yes)             6th byte
+  3      RightJoyY               (0=No, 1=Yes)             7th byte
+  4      LeftJoyX                (0=No, 1=Yes)             8th byte
+  5      LeftJoyY                (0=No, 1=Yes)             9th byte
+  6      DPAD Right              (0=No, 1=Yes) button 00h  10th byte
+  7      DPAD Left               (0=No, 1=Yes) button 01h  11th byte
+  8      DPAD Uup                (0=No, 1=Yes) button 02h  12th byte
+  9      DPAD Down               (0=No, 1=Yes) button 03h  13th byte
+  10     Button /\               (0=No, 1=Yes) button 04h  14th byte
+  11     Button ()               (0=No, 1=Yes) button 05h  15th byte
+  12     Button ><               (0=No, 1=Yes) button 06h  16th byte
+  13     Button []               (0=No, 1=Yes) button 07h  17th byte
+  14     Button L1               (0=No, 1=Yes) button 08h  18th byte
+  15     Button R1               (0=No, 1=Yes) button 09h  19th byte
+  16     Button L2               (0=No, 1=Yes) button 0Ah  20th byte
+  17     Button R2               (0=No, 1=Yes) button 0Bh  21st byte
+  18-39  Must be 0 (otherwise command is ignored)
+  40-47  Unknown (no effect?)
+
+Usually, one would use one of the following command/values:
+
  Send  01h 41h 00h 03h 00h 00h 00h 00h 00h  Digital buttons
+  Send  01h 41h 00h 3Fh 00h 00h 00h 00h 00h  Digital buttons + analog sticks
+  Send  01h 41h 00h FFh FFh 03h 00h 00h 00h  Enable all 18 input bytes
+
+The transfer order is 1st..21st byte as shown above (unless some bits are +cleared, eg. if bit0-5=0 and bit6=1 then DPAD Right would appear as 4th byte +instead of 10th byte). The command length increases/decreases depening on the +number of enabled bits. The transfer length is always 3+N*2 bytes (including a +00h padding byte when the number of enabled bits is odd). The analog mode ID +byte changes depending on number of halfwords.
+CAUTION: Sending Command 44h does RESET the Command 4Fh setting (either to +DigitalMode=000003h or AnalogMode=00003Fh; same happens when toggling mode via +Analog button).

+

Note: Some Dualshock2 Config Mode commands do occassionally send 00h, 5Ah, or +FFh as last (9th) reply byte (unknown if that is some error/status thing, or +garbage).

+

Analog Button Sensitivity

+

The pressure sensors are rather imprecise and results may vary on various +factors, including the pressure angle.
+

  00h       Button released
+  01h..2Fh  Normal (soft) pressure
+  30h..FEh  Medium pressure
+  FFh       Hard pressure
+
+Software can safely distinguish between soft and hard pressure.
+Medium pressure is less predictably: The values do not increase linearily, it's +difficult to apply a specific amount of medium pressure (such like 80h..9Fh), +increasing pressure may sometimes jump from 24h to FFh, completely skipping the +medium range.
+Relying on the medium range might work for accelleration buttons (where the +user could still adjust the pressure when the accelleration is too high or too +low); but it would be very bad practice to assign irreversible actions to +medium pressure (such like Soft=Load, Medium=Save, Hard=Quit).

+

Digital Button Sensitivity

+

Digital inputs are converting the analog inputs as so:
+

  Analog=00h      --> not pressed
+  Analog=01h..FFh --> pressed (no matter if soft, medium, or hard pressure)
+
+Digital inputs are working even when also having analog input enabled for the +same button.

+

See also

+

[https://gist.github.com/scanlime/5042071] - tech (=mentions unknown details) +[https://store.curiousinventor.com/guides/PS2/] - guide (=omits unknown stuff)

+

Controllers - Dance Mats

+

PSX Dance Mats are essentially normal joypads with uncommonly arranged buttons, +the huge mats are meant to be put on the floor, so the user could step on them.

+

Dance Mat vs Joypad Compatibility

+

There are some differences to normal joypads: First of, the L1/L2/R1/R2 +shoulder buttons are missing in most variants. And, the mats are allowing to +push Left+Right and Up+Down at once, combinations that aren't mechanically +possible on normal joypads (some dancing games do actually require those +combinations, whilst some joypad games may get confused on them).

+

Dance Mat Unknown Things

+

Unknown if the mat was sold in japan, and if so, with which SLPH/SCPH number.
+Unknown if the mat's middle field is also having a button assigned.
+Unknown if the mat is having a special controller ID, or if there are other +ways to detect mats (the mats are said to be compatible with skateboard games, +so the mats are probably identifying themselves as normal digital joypad; +assuming that those skateboard games haven't been specifically designed for +mats).

+

Dance Mat Games

+

  D.D.R. Dance Dance Revolution 2nd Remix
+  (and maybe whatever further games)
+
+The mats can be reportedly also used with whatever skateboard games.

+

Dance Mat Variants

+

There is the US version (DDR Dance Pad, SLUH-00071), and a slightly different +European version (Official Dance Mat, SLEH-00023: shiny latex style with +perverted colors, and Start/Select arranged differently). The japanese version +(RU017) resembles the US version, but without Triangle/Square symbols drawn in +lower left/right edges.
+And there is a handheld version (with additional L1/L2/R2/R1 buttons; maybe +unlicensed; produced as MINI DDR, and also as Venom Mini Dance Pad).

+
   US Version (white/black/red/blue)         Handheld Version (blue/gray)
+    __________.---------.___________          _____/ MINI  \_____
+   |          \         /           |        |      D.D.R.       |
+   |  SELECT   '-------'    START   |        |L1 L2 SEL STA R2 R1|
+   |------------.------.------------|        | ___    ___    ___ |
+   |  .''''.   /        \   .''''.  |        || X |  | ^ |  | O ||
+   | |  \/  | |    /\    | | .''. | |        ||___|  |___|  |___||
+   | |  /\  | |   /..\   | | '..' | |        | ___   .---.   ___ |
+   |  '....'  '.   ||   .'  '....'  |        || < | |Stay | | > ||
+   | .-------. .''''''''. .-------. |        ||___| |Cool!| |___||
+   |/   /|   .'          '.   |\   \|        | ___   '___'   ___ |
+   |   / |-- |            | --| \   |        || []|  | v |  | /\||
+   |   \ |-- | Stay Cool! | --| /   |        ||___|  |___|  |___||
+   |\   \|   '.          .'   |/   /|        |___________________|
+   | '-------' '........' '-------' |
+   |  .''''.  .'   ||   '.  .''''.  |        Gothic Dance Mat (black/silver)
+   | |  /\  | |   \''/   | | |''| | |         _.----------._
+   | | /__\ | |    \/    | | |..| | |        | \ SEL  STA / | This one
+   |  '....'   \        /   '....'  |        |  '--------'  | wasn't ever
+   '------------'------'------------'        | .----------. | produced,
+                                             | |  .''''.  | | as cool as
+   European Version (pink/blue/yellow)       | | |  /\  | | | it could have
+    __________.---------.___________         | | | /..\ | | | been, the lame
+   |          \ SEL STA /           |        | |  '.||.'  | | marketing
+   |           '-------'            |        | +----------+ | people didn't
+   |----------.----------.----------|        | |  .''''.  | | even think
+   |  .''''.  |  .''''.  |  .''''.  |        | | |  /\  | | | about it.
+   | |  \/  | | |  /\  | | | .''. | |        | | | /..\ | | |
+   | |  /\  | | | /..\ | | | '..' | |        | |  '.||.'  | |
+   |  '....'  |  '.||.'  |  '....'  |        | +----------+ |
+   |----------+-..    ..-+----------|        | |  .'||'.  | |
+   |  .'/|'.  /   ''''   \  .'|\'.  |        | | | \''/ | | |
+   | | / |--|/            \|--| \ | |        | | |  \/  | | |
+   | | \ |--|\            /|--| / | |        | |  '....'  | |
+   |  '.\|.'  \   ....   /  '.|/.'  |        | +----------+ |
+   |----------+-''    ''-+----------|        | |  .'||'.  | |
+   |  .''''.  |  .'||'.  |  .''''.  |        | | | \''/ | | |
+   | |  /\  | | | \''/ | | | |''| | |        | | |  \/  | | |
+   | | /__\ | | |  \/  | | | |..| | |        | |  '....'  | |
+   |  '....'  |  '....'  |  '....'  |        | '----------' '
+   '----------|----------|----------'        '--------------'
+
+

Stay Cool?

+

Despite of the "Stay Cool!" slogan, the mat wasn't very cool - not at all! It +offered only two steps back-and-forth, and also allowed to do extremly uncool +side-steps. Not to mention that it would melt when dropping a burning cigarette +on it. Stay Away!

+

Controllers - Pop'n Controllers

+

Controllers used for Konami's Pop'n Music series. At least a few different +versions of the controller (Pop'n Controller, Pop'n Controller 2, larger +arcade-size version, possibly others and in different color variations) have +been released for the PS1 and PS2. Unknown if the controllers released in the +PS2 era have any additional commands not present in the original Pop'n +Controller, but they are supposedly fully compatible with PS1 Pop'n Music games.

+

Pop'n Controllers report as digital controllers (ID byte 41h), but the left, +right, and down d-pad controls are not connected to any physical buttons and are +always reported as pressed (in the first transferred button byte, bits 5-7 are +always 0). Pop'n Music games check these bits to determine if a Pop'n Controller +is connected and will change the in-game controls accordingly if so.

+

Controllers - Densha de Go! / Jet de Go! Controllers

+

Controllers used for Taito's Densha de Go! and Jet de Go! series. Unknown what +method is being used by Densha de Go! and Jet de Go! games for detecting these +controllers.

+
    +
  • The workings of Densha de Go! PSX controllers have been extensively researched + in the ddgo-controller-docs + repo.
  • +
  • The Jet de Go! PSX controller comes in gray and black color. It seems to work + the same as an analog controller and supports vibration. The steering wheel is + mapped to the left stick (wheel rotation as horizontal, wheel raise/lower as + vertical axis). The thrust throttle seems mapped to the right stick Y-axis + full range (so half throttle matches vertically centered right stick).
  • +
+

Controllers - Fishing Controllers

+

The fishing rods are (next to lightguns) some of the more openly martial +playstation controllers - using the credo that "as long as you aren't using +dynamite: it's okay to kill them cause they don't have any feelings."

+

PSX Fishing Controller Games

+
  Action Bass (Syscom Entertainment) (1999) (SLPH-00100)
+  Bass Landing (ASCII/agetec) (1999) (SLPH-00100, SLUH-00063)
+  Bass Rise, Fishing Freaks (Bandai) (1999) (BANC-0001)
+  Bass Rise Plus, Fishing Freaks (Bandai) (2000) (BANC-0001, SLPH-00100)
+  Breath of Fire IV (Capcom) (SLUH-00063)
+  Championship Bass (EA Sports) (2000) (SLUH-00063)
+  Fish On! Bass (Pony Canyon) (1999) (BANC-0001, SLPH-00100)
+  Fisherman's Bait 2/Exiting Bass2 - Big Ol'Bass(Konami)(SLPH-00100,SLUH-00063)
+  Fishing Club: (series with 3 titles) (have "headset-logo" on back?)
+  Lake Masters II (1999) (Dazz/Nexus) (SLPH-00100)
+  Lake Masters Pro (1999) (Dazz/Nexus) (BANC-0001, SLPH-00100)
+  Let's Go Bassfishing!: Bass Tsuri ni Ikou! (Banpresto) (1999) (SLPH-00100)
+  Matsukata Hiroki no World Fishing (BPS The Choice) (1999) (SLPH-00100)
+  Murakoshi Seikai-Bakuchou Nihon Rettou (Victor) (SLPH-00100)
+  Murakoshi Masami-Bakuchou Nippon Rettou:TsuriConEdition (1999) (SLPH-00100)
+  Pakuchikou Seabass Fishing (JP, 03/25/99) (Victor) (SLPH-00100)
+  Perfect Fishing: Bass Fishing (2000) (Seta) (yellow/green logo)
+  Perfect Fishing: Rock Fishing (2000) (Seta) (yellow/green logo)
+  Oyaji no Jikan: Nechan, Tsuri Iku De! (2000) (Visit) (BANC-0001, SLPH-00100)
+  Reel Fishing II / Fish Eyes II (2000)(Natsume/Victor)(SLPH-00100, SLUH-00063)
+  Simple 1500 Series Vol. 29: The Tsuri (2000) (yellow/green logo)
+  Suizokukan Project: Fish Hunter e no Michi (1999)(Teichiku)(SLPH-00100)
+  Super Bass Fishing (1999) (King) (BANC-0001, SLPH-00100, yellow/green logo)
+  Super Black Bass X2 (2000) (Starfish) (SLPH-00100)
+  Tsuwadou Keiryuu Mizuumihen (Best Edition)(2000) (ASCII PS1+PS2 controllers?)
+  Tsuwadou Seabass Fishing (PlayStation the Best) (1999) (Oz Club) (SLPH-00100)
+  Uki Uki Tsuri Tengoku Nagami/Uokami Densetsu Oe (2000) (Teichiku)(SLPH-00100)
+  Umi no Nushi Tsuri-Takarajima ni Mukatte (1999)(Victor)(BANC-0001,SLPH-00100)
+  Winning Lure (Hori) (2000) (for Hori HPS-97 controller)  AKA HPS-98 ?
+
+

Logos on CD Covers

+

US Fishing games should have a "SLUH-00063" logo. European Fishing games don't +have any fishing logos; apparently fishing controllers haven't been officially +released/supported in Europe.
+Japanese Fishing games can have a bunch of logos: Usually BANC-0001 or +SLPH-00100 (or both).
+Moreover, some japanese games have a yellow/green fishing logo with japanese +text (found on Perfect Fishing: Bass Fishing, Perfect Fishing: Rock Fishing, +Simple 1500 Series Vol. 29: The Tsuri, Super Bass Fishing) (unknown if that +logo refer to other special hardware, or if it means the "normal" BANC-0001 or +SLPH-00100 controllers.
+And Moreover, some japanese games have some sort of "headset" logos with +japanese text, these seem to have same meaning as SLPH-00100; as indicated by +photos on CD cover of Tsuwadou Keiryuu Mizuumihen (Best Edition) (2000); that +CD cover also has a "headset 2" logo, which seems to mean a newer PS2 variant +of the SLPH-00100.

+

PSX Fishing Controllers

+

  ASCII Tsuricon SLPH-00100 (also marked with a second serial, ASC-0514TR, on the packaging box)
+  ASCII Tsuricon 2 ASC-0521TR2 (has a mode switch with 3 settings. "1" is original Tsuricon mode, "2" is Tsuricon 2 mode. Unknown what the unnumbered mode does)
+  Sammy Tsuricon 2 SMY-0506FS (looks to be identical to the ASCII Tsuricon 2)
+  Sammy Tsuricon 2+ SMY-0511FS (unknown what the differences between this and the Tsuricon 2 are)
+  Agetec Bass Landing Fishing Controller SLUH-00063 (US version of ASCII's SLPH-00100 controller)
+  Bandai Fishing Controller BANC-0001 (dark gray/blue) (has less buttons than ASCII/agetec)
+  Interact Fission (light gray/blue)(similar to ASCII/agetec, 2 extra buttons?)
+  Naki (transparent blue) (looks like a clone of the ASCII/agetec controllers)
+  Hori HPS-97/HPS-98 (black/gray) (a fishing rod attached to a plastic fish)
+
+Of these, the ASCII/agetec controllers seem to be most popular (and most +commonly supported). The Bandai contoller is also supported by a couple of +games (though the Bandai controller itself seems to be quite rare). The +Interact/Naki controllers are probably just clones of the ASCII/agetec ones. +The Hori controller is quite rare (and with its string and plastic fish, it's +apparently working completely different than the other fishing controllers).

+

Tech Info (all unknown)

+

Unknown how to detect fishing controllers.
+Unknown how to read buttons, joystick, crank, motion sensors.
+Unknown how to control rumble/vibration.
+Unknown if/how Bandai differs from ASCII/agetec (aside from less buttons).
+Unknown how the Hori thing works.

+

ASCII SLPH-00100 / agetec SLUH-00063 (silver)

+
          ___
+       __|___|__
+     _|         |_     _   __
+    | |         | |   | |=|__| <--- crank handle
+    | | SEL STA | |   | |
+    | |         | |---|  \                         ASCII SLPH-00100
+    |  \       /  |---|  /                         agetec SLUH-00063
+   /  L1       R1  \  | |  __
+  |  L2  .---.  R2  | |_|=|__|
+  |     | joy |     |
+  |     |stick|     |  <------- analog thumb controlled joystick
+  | /\   '---'   >< |
+  |   []       ()   |
+   \     ASCII     /
+    '.___________.'   \___ 10 buttons (SEL,STA,L1,L2,R1,R2,/\,[],(),><)
+       \ _____ /
+        |     |           Note: many (not all) agetec controllers
+        |     |           have the >< and () buttons exchanged
+        |     |
+        |     |              Aside from the crank/buttons/joystick,
+        |     |              the controller reportedly contains:
+        |     |              some sort of motion sensors?
+        |     |              some kind of rumble/vibration?
+        |     |
+        '.___.'
+           '--...___ cable
+
+

Bandai BANC-0001 (dark gray/blue)

+
          ___
+       __|___|__
+     _|         |      _   __
+    | .---.     |\    | |=|__| <--- crank handle
+    || joy |    | |   | |
+    ||stick|    | |-#-|  \
+    | '---'     | |-#-|  /
+   / \          |  \  | |  __
+  |   |   ...   |   | |_|=|__|
+  |   |  :   :  | ()|
+  |   |O :___: O|   |   <--- two buttons: () and ><
+  |   |- |___| -| ><|        and some slide switch with I and 0 positions?
+  |   |         |   |
+   \  |  BANDAI |  /      unknown if the joystick is digital or analog
+    '._\_______/_.'
+       |       |          unknown if there are motion sensors and/or rumble
+       '.     .'
+        |     |
+        |     |
+        |     |
+        |     |
+        |     |
+        |     |
+        |     |
+        '.___.'
+           '--...___ cable
+
+

Hori HPS-97 / HPS-98 (black/gray)

+
              ....----------------O
+           .''                     \  HPS-97 (controller bundled with game)
+          _:_        \              \ HPS-98 (controller only, for HPS-96 game)
+       __|___|__      \ short        \
+     _|         |_      elastic       \
+    |             |     pole           \
+    |             |                     \    <--- string (from pole to
+    |     SW?     |     _   __           \        reel inside of fish)
+   /               \   | |=|__|           \
+  |      .---.      |  | |                 \
+  | ( ) | joy |     |--|  \                 \               ___
+  |     |stick|     |--|  /                  \             /   /
+  | ( )  '---'      |  | |  __                \     ...---''''''--.  /|
+  |                 |  |_|=|__| <--- crank     \   '               '/ |
+   \    ( ) ( )    /                 handle     '..|                  |.
+    '.___________.'                                |__________________| :
+       \       /     \                                plastic fish      :
+        |     |       joystick,                  (presumable some heavy :
+        |     |       four buttons,              stationary thing that  :
+        |     |       and a switch?              rests on floor)        :
+        |     |                                  (presumably with       :
+        |     |                                  motor-driven reel?)    :
+        |     |                                                         :
+        |     |     the two cables do probably connect                  :
+        |     |     to both of the PSX controller slots                 :
+        '.___.'                                            cable 2  ---'
+           '--...___ cable 1
+
+

Controllers - PS2 DVD Remote

+

An accessory released by Sony for the PS2, consisting of an infrared remote +control and a receiver dongle that plugs into a controller port. The remote +features all standard controller buttons (including L3/R3) as well as additional +controls for the PS2's DVD player.
+The receiver behaves very differently from any other known device: it does not +respond to any command until a button on the remote is pressed. When a valid IR +code is received it will start accepting commands for about 2000-2500 ms, then +become unresponsive again. It will initially behave as two different devices, +one with address 01h acting like a standard digital controller and the other +with address 61h exposing IR codes as received from the remote.

+

Command 04h - IR poll (and disable controller mode)

+

  Send Reply Comment
+  61h  N/A   IR receiver address
+  04h  12h   Receive ID bits 0-7, send command byte
+  00h  5Ah   Receive ID bits 8-15
+  00h  len   Receive code length (20 for DVD remote, 0 if no button is pressed)
+  00h  code  Receive code bits 16-23
+  00h  code  Receive code bits 8-15
+  00h  code  Receive code bits 0-7
+
+Returns the IR code of the currently pressed button and its length in bits, or +000000h if no button is pressed (and the receiver is still responding to +commands). Received codes seem to "stick around" for some time even after the +button has been released; when a button is held down the remote resends its code +every 45 ms, so the receiver presumably keeps returning the same code for about +50 ms as a debouncing measure.
+The code is returned LSB first and MSB aligned, i.e. it should be right-shifted +by (24 - len) bits to obtain the "raw" code as sent by the remote. For +instance:
+
  Code sent by remote (first bit after preamble to last bit):
+    0000 0000 1011 1001 0010
+  Code sent by remote (MSB to LSB):
+    0100 1001 1101 0000 0000
+  Data returned by receiver:
+    code[16:23] = 01001001
+    code[8:15]  = 11010000
+    code[0:7]   = 0000xxxx ; xxxx = (24 - len) bits of padding (all zeroes)
+  Reassembled MSB-aligned code (MSB to LSB):
+    0100 1001 1101 0000 0000 xxxx
+
+The receiver will stop acting like a digital controller and replying to address +01h after this command is sent for the first time. Command 06h can be used to +restore controller functionality (see below), unknown if there is also a +watchdog to automatically restore controller mode if no IR poll commands are +issued.

+

Command 06h, 03h - Re-enable controller mode

+
  Send Reply Comment
+  61h  N/A   IR receiver address
+  06h  12h   Receive ID bits 0-7, send command byte 1
+  03h  5Ah   Receive ID bits 8-15, send command byte 2
+  00h  ?     Receive unknown data, send padding
+  00h  ?
+  00h  ?
+  00h  ?
+
+

Command 0Fh - Unknown

+

This command exists (the receiver will keep pulling /ACK low) but its purpose is +currently unknown. It could possibly be an alternate poll command that does not +disable controller mode.

+

IR code format

+

The DVD remote always emits 20-bit IR codes. The receiver does return the length +of the code, but it's unclear if it can receive codes with lengths other than 20 +bits.
+All non-controller buttons on the remote are arranged in an 8x16 button matrix, +shown below (transposed for readability):

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ColRow 0Row 1Row 2Row 3Row 4Row 5Row 6Row 7
01PreviousSlow <<
12NextSlow >>
23Play
34Scan <<Subtitle
45Scan >>DisplayAudio
56ShuffleAngle
67
78
89TimeStop
90PauseUp
10TitleA<->BDown
11EnterDVD MenuLeft
12RepeatRight
13
14Return
15ClearProgram
+

Each button in the matrix is assigned a code as follows:
+

  code = 49D00h OR (row << 4) OR (column) ; sent LSB first
+
+  ; where row = 0..7, column = 0..15
+
+Controller buttons are handled separately and assigned different codes:
+
  code = DAD50h OR (id) ; sent LSB first
+
+  ; where id = 0..15, index of the bit that would normally represent the button
+  ; in the bitfield returned by a controller poll command
+  ; (i.e. 0=Select, 1=L3, 2=R3, 3=Start, 4=Up, 5=Right, etc.)
+
+Arrow buttons are a special case, as they are controller buttons but also have +matrix codes assigned. For those the remote alternates between both codes (see +below).

+

Low-level IR protocol

+

The remote emits IR pulses modulated with a 38 kHz carrier, as most remotes do. +Codes are sent as a 2460 µs "preamble" pulse followed by 24 data pulses, each of +which can be either 1250 µs (if the respective bit is 1) or 650 µs (if the +respective bit is 0) long. After each pulse including the preamble, the remote +waits 530 µs before sending the next pulse.
+Every code is always sent at least 3 times in a row (more if the button is held +down but not necessarily a multiple of 3), approximately every 45 ms. For arrow +buttons the matrix code is sent 3 times first, then the respective controller +button code is sent 3 times, then the sequence repeats until the button is +released (with the total number of codes sent always being a multiple of 6 in +this case).

+

Built-in IR receivers

+

In later PS2 models, Sony integrated the IR receiver into the console. Assuming +the built-in receivers used the same circuitry as the external dongle, this may +explain its weird behavior: the receiver was likely designed to be wired in +parallel with one of the controller ports, and to be unresponsive until the +remote is actually in use to avoid interfering with another controller plugged +into the same port. Whether or not the integrated receivers are connected this +way has not been confirmed.
+There is a second revision of the DVD remote with power and eject buttons, meant +to be used with the PS2 models that have a built-in receiver. Weirdly enough, +however, it seems to be incompatible with the older receiver dongle.

+

Controllers - I-Mode Adaptor (Mobile Internet)

+

The I-Mode Adaptor cable (SCPH-10180) allows to connect an I-mode compatible +mobile phone to the playstation's controller port; granting a mobile internet +connection to japanese games.

+

PSX Games for I-Mode Adaptor (Japan only)

+

  Doko Demo Issyo (PlayStation the Best release only) (Sony) 2000
+  Doko Demo Issyo Deluxe Pack (Bomber eXpress/Sony) 2001
+  Hamster Club-I (SLPS-03266) (Jorudan) 2002
+  iMode mo Issyo: Dokodemo Issho Tsuika Disc (Bomber/Sony) 2001
+  Keitai Eddy (iPC) 2000 (but, phone connects to SIO port on REAR side of PSX?)
+  Komocchi (Victor) 2001
+  Mobile Tomodachi (Hamster) 2002
+  Motto Trump Shiyouyo! i-Mode de Grand Prix (Pure Sound) 2002
+  One Piece Mansion (Capcom) 2001 (japanese version only)
+
+The supported games should have a I-Mode adaptor logo on the CD cover (the logo +depicts two plugs: the PSX controller plug, and the smaller I-Mode plug).
+Note: "Dragon Quest Monsters 1 & 2" was announced/rumoured to support +I-mode (however, its CD cover doesn't show any I-Mode adapter logo).

+

Tech Details (all unknown)

+

Unknown how to detect the thing, and how to do the actual data transfers.
+The cable does contain a 64pin chip, an oscillator, and some smaller components +(inside of the PSX controller port connector).

+

Hardware Variant

+

Keitai Eddy seems to have the phone connect to the SIO port (on rear side of +the PSX, at least it's depicted like so on the CD cover). This is apparently +something different than the SCPH-10180 controller-port cable. Unknown what it +is exactly - probably some mobile internet connection too, maybe also using +I-mode, or maybe some other protocol.

+

Controllers - Keyboards

+

There isn't any official retail keyboard for PSX, however, there is a shitload +of obscure ways to connect keyboards...

+

Sony SCPH-2000 PS/2 Keyboard/Mouse Adaptor (prototype/with cable) (undated)

+

Sony SCPH-2000 PS/2 Keyboard/Mouse Adaptor (without cable) (undated)

+

A PS/2 to PSX controller port adaptor. Maybe for educational Lightspan titles?
+There are two hardware variants of the adaptor:
+

  Adaptor with short cable to PSX-controller port (and prototype marking)
+  Adaptor without cable, directly plugged into controller port (final version?)
+
+Unknown ^how to access those adaptors, and unknown if the two versions differ +at software side. There seem to be not much more than a handful of people +owning that adaptors, and none of them seems to know how to use it, or even how +to test if it's working with existing software...
+- Keyboard reading might work with the Online Connection CD.
+- Mouse reading might work with normal mouse compatible PSX games.

+

Lightspan Online Connection CD Keyboard (1997)

+

The Online Connection CD is a web browser from the educational Lightspan +series, the CD is extremly rare (there's only one known copy of the disc).
+The thing requires a dial-up modem connected to the serial port (maybe simply +using the same RS232 adaptor as used by Yaroze). User input can be done via +joypad, or optionally, via some external keyboard (or keyboard adaptor) +hardware:
+

  Send  01h 42h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 06h
+  Reply HiZ 96h 5Ah num dat dat dat dat dat dat dat dat dat dat dat
+
+The num byte indicates number of following scancodes (can be num=FFh, maybe +when no keyboard connected?, or num=00h..0Bh for max 11 bytes, unless the last +some bytes should have other meaning, like status/mouse data or so).
+The keyboard scancodes are in "PS/2 Keyboard Scan Code Set 2" format.
+The binary contains some (unused) code for sending data to the keyboard by +changing the 4th-11th byte, and resuming normal operation by setting 4th and +11th byte back to zero:
+
  Send  ..  ..  ..  01h xxh FFh FFh FFh FFh FFh 00h ..  ..  ..  ..
+  Send  ..  ..  ..  00h ..  ..  ..  ..  ..  ..  00h ..  ..  ..  ..
+
+Maybe 4th and 11th byte are number of following bytes, with xxh being some +command, and FFh's just being bogus padding; the xxh looks more like an +incrementing value though.
+Despite of the mouse-based GUI, the browser software doesn't seem to support +mouse hardware (neither via PS/2 mice, nor PSX mice). Instead, the mouse arrow +can be merely moved via joypad's DPAD, or (in a very clumsy fashion) via +keyboard cursor keys.
+Note: The browser uses SysEnqIntRP to install some weird IRQ handler that +forcefully aborts all controller (or memory card) transfers upon Vblank. +Unknown if that's somehow required to bypass bugs in the keyboard hardware. The +feature is kinda dangerous for memory card access (especially with fast memcard +access in nocash kernel, which allows to transfer more than one sector per +frame).

+

Spectrum Emulator Keyboard Adaptor (v1/serial port) (undated)

+

Made by Anthony Ball. [http://www.sinistersoft.com/psxkeyboard]

+
  [1F801058h]=00CEh  ;SIO_MODE 8bit, no parity, 2 stop bits (8N2)
+  [1F80105Ah]=771Ch  ;SIO_CTRL rx enable (plus whatever nonsense bits)
+  [1F80105Eh]=006Ch  ;SIO_BAUD 19200 bps
+  RX   Keyboard Scancode (same ASCII-style as in later versions?)
+  CTS  Caps-Lock state
+  DSR  Num-Lock state
+
+

Spectrum Emulator Keyboard & Sega Sticks Adaptor (v2/controller port) (2000)

+

Made by Anthony Ball. [http://www.sinistersoft.com/psxkeyboard]

+

This adaptor can send pad/stick data,
+

  Send  01h 42h 00h  0h 0h
+  Reply HiZ 41h 5Ah  PadA
+
+as well as pad/sticks+keyboard data,
+
  Send  01h 42h 00h  0h 0h 0h 0h 0h 0h 0h 0h  00h 00h   0h 0h 0h 0h 0h 0h
+  Reply HiZ E8h 5Ah  PadA  PadB  PadC  PadD   Ver Lock  Buffer(0..5)
+
+The above mode(s) can be switched via ACPI Power/Sleep/Wake keys (on keyboards +that do have such keys).
+
  Version=1     ; version number
+  0  SCROLL          ; scroll lock on
+  1  NUM             ; num lock on
+  2  CAPS            ; caps lock on
+  3  DONETEST        ; keyboard has just done a selftest
+  4  EMUA            ; emulation mode a
+  5  EMUB            ; emulation mode b
+
+For whatever reason, the PS/2 scancodes are translated to ASCII-style scancode +values (with bit7=KeyUp flag):
+
  01   11 12 13 14  15 16 17 18  19 1A 1B 1C  1D 69 1F
+  60 21 22 68 24 25 5E 26 2A 28 29 5F 3D  2D  0B 0E 0F  67 2F 1E 2D
+  27  51 57 45 52 54 59 55 49 4F 50 5B 5D 0D  10 61 62  37 38 39
+  3B   41 53 44 46 47 48 4A 4B 4C 3A 40 23              34 35 36 2B
+  02 5C 5A 58 43 56 42 4E 4D 3C 3E 3F     03     63     31 32 33
+  04 05 06           20          07 08 09 0A  65 64 66  30    2E 6A
+
+BUG: The thing conflicts with memory cards: It responds to ANY byte with value +01h (it should do so only if the FIRST byte is 01h).

+

Homebrew PS/2 Keyboard/Mouse Adaptor (undated/from PSone era)

+

  Send  01h 42h 00h 00h 00h 00h 00h
+  Reply HiZ 12h 5Ah key flg dx  dy
+
+flg:
+
  bit0-1 = Always 11b (unlike Sony mouse)
+  bit2 = Left Mouse Button  (0=Pressed, 1=Released)
+  bit3 = Right Mouse Button (0=Pressed, 1=Released)
+  bit4-5 = Always 11b (like Sony mouse)
+  bit6 = Key Release  (aka F0h prefix) (0=Yes)
+  bit7 = Key Extended (aka E0h prefix) (0=Yes)
+
+Made by Simon Armstrong. This thing emulates a standard PSX Mouse (and should +thus work with most or all mouse compatible games). Additionally, it's sending +keyboard flags/scancodes via unused mouse button bits.

+

Runix hardware add-on USB Keyboard/Mouse Adaptor (2001) (PIO extension port)

+

Runix is a homebrew linux kernel for PSX, it can be considered being the holy +grail of the open source scene because nobody has successfully compiled it in +the past 16 years.
+- USB host controller SL811H driver with keyboard and mouse support;
+- RTC support.
+file: drivers/usb/sl811h.c

+

TTY Console

+

The PSX kernel allows to output "printf" debug messages via stdout. In the +opposite direction, it's supporting to receive ASCII user input via +"std_in_gets" (there isn't any software actually using that feature though, +except maybe debug consoles like DTL-H2000).

+

Controllers - Additional Inputs

+

Reset Button

+

PSX only (not PSone). Reboots the PSX via /RESET signal. Probably including for +forcefully getting through the WHOLE BIOS Intro, making it rather +useless/annoying? No idea if it clears ALL memory during reboot?

+

CDROM Shell Open

+

Status bit of the CDROM controller. Can be used to sense if the shell is opened +(and also memorizes if the shell was opened since last check; allowing to sense +possible disk changes).

+

PocketStation

+

Memory Card with built-in LCD screen and Buttons (which can be used as +miniature handheld console). However, when it is connected to the PSX, the +buttons are vanishing in the cartridge slot, so the buttons cannot be used as +additional inputs for PSX games.

+

Serial Port PSX only (not PSone)

+

With an external adaptor (voltage conversion), the serial port can be used +(among others) to connect a RS232 Serial Mouse. Although, most or all +commercial games with mouse input are probably (?) supporting only Sony's Mouse +(on the controller port) (rather than standard RS232 devices on the serial +port).

+

TTY Debug Terminal

+

If present, the external DUART can be used for external keyboard input, at the +BIOS side, this is supported as "std_in".

+

Controllers - Misc

+

Standard Controllers

+
  SCPH-1010  digital joypad (with short cable)
+  SCPH-1080  digital joypad (with longer cable)
+  SCPH-1030  mouse (with short cable)
+  SCPH-1090  mouse (with longer cable)
+  SCPH-1092  mouse (european?)
+  SCPH-1110  analog joystick
+  SCPH-1150  analog joypad (with one vibration motor, with red/green led)
+  SCPH-1180  analog joypad (without vibration motors, with red/green led)
+  SCPH-1200  analog joypad (with two vibration motors) (dualshock)
+  SCPH-110   analog joypad (with two vibration motors) (dualshock for psone)
+  SCPH-10010 dualshock2 (analog buttons, except L3/R3/Start/Select) (for ps2)
+  SCPH-1070  multitap
+
+

Special Controllers

+

  SCPH-4010 VPick (guitar-pick controller) (for Quest for Fame, Stolen Song)
+
+SLPH-0001 (nejicon)
+BANDAI "BANC-0002" - 4 Buttons (Triangle, Circle, Cross, Square) (nothing more)

+

Joystick

+
     __________                     __________
+    |          |                   |    ^     |     ^
+    | L1    R1 |                   | X <+> O  |    <+> = Digital Stick
+     \      ___| <--- L2   [] ---> |___ v    /      v
+      |    |     <--- R2   /\ --->     |    |
+   ___|    |___________________________|    |___   Not sure if all buttons
+  |   |    | SEL STA              =?=  |    |   |  are shown at their
+  |   |    |                           |    |   |  correct locations?
+  |   |    |_         []   /\         _|    |   |    (drawing is based on
+  |  _|     /    L1             R1    \     |_  |    below riddle/lyrics)
+  |  \_____/          X     O          \_____/  |
+  |   /___\      L2             R2      /___\   |
+  |                                             |
+  |                                             |
+   \___________________________________________/
+
+
 The thumb buttons on the left act as L1 and R1,
+    the trigger is L2, the pinky button is R2
+ The thumb buttons on the right act as X and O,
+    the trigger is Square and the pinky button is Triangle.
+ I find this odd as the triggers should've been L1 and R1,
+    the pinkies L2 and R2.
+ The buttons are redundantly placed on the base as large buttons like what
+    you'd see on a fight/arcade stick. Also with Start and Select.
+ There is also a physical analog mode switch,
+    not a button like on dual shock.
+
+

MX4SIO

+

The MX4SIO is a homebrew microSD card adapter for the PS2 that plugs into a +memory card slot, taking advantage of the fact that SD cards support an SPI mode +which is more or less compatible with SIO0. The adapter is completely passive +and has the card wired up as follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
uSD pinNameWired to MC pin
1D2/NC-
2D3//CS/CS
3CMD/MOSICMD/MOSI
4VCC+3.5V
5SCKSCK
6GNDGND, /ACK
7D0/MISODAT/MISO
8D1/NC-
+

Unfortunately, this design has a fatal flaw that makes it unusable as-is on the +PS1: /ACK is permanently shorted to ground, taking down the entire controller +bus. However, it should be possible to use the MX4SIO on a PS1 with custom +driver code once the MX4SIO's /ACK pin is masked out with some tape, or if no +other controllers or memory cards are plugged in.
+Note that, as SD cards do not employ the addressing scheme used by standard +controllers and memory cards, the MX4SIO should get its own dedicated /CSn pin +and not share the port with a controller (i.e. if the MX4SIO is plugged in slot +2, then controller port 2 shall be left unused).

+

Memory Card Read/Write Commands

+

Reading Data from Memory Card

+

  Send Reply Comment
+  81h  N/A   Memory card address
+  52h  FLAG  Send Read Command (ASCII "R"), Receive FLAG Byte
+  00h  5Ah   Receive Memory Card ID1
+  00h  5Dh   Receive Memory Card ID2
+  MSB  (00h) Send Address MSB  ;\sector number (0..3FFh)
+  LSB  (pre) Send Address LSB  ;/
+  00h  5Ch   Receive Command Acknowledge 1  ;<-- late /ACK after this byte-pair
+  00h  5Dh   Receive Command Acknowledge 2
+  00h  MSB   Receive Confirmed Address MSB
+  00h  LSB   Receive Confirmed Address LSB
+  00h  ...   Receive Data Sector (128 bytes)
+  00h  CHK   Receive Checksum (MSB xor LSB xor Data bytes)
+  00h  47h   Receive Memory End Byte (should be always 47h="G"=Good for Read)
+
+Non-sony cards additionally send eight 5Ch bytes after the end flag.
+When sending an invalid sector number, original Sony memory cards respond with +FFFFh as Confirmed Address (and do then abort the transfer without sending any +data, checksum, or end flag), third-party memory cards typically respond with +the sector number ANDed with 3FFh (and transfer the data for that adjusted +sector number).

+

Writing Data to Memory Card

+
  Send Reply Comment
+  81h  N/A   Memory card address
+  57h  FLAG  Send Write Command (ASCII "W"), Receive FLAG Byte
+  00h  5Ah   Receive Memory Card ID1
+  00h  5Dh   Receive Memory Card ID2
+  MSB  (00h) Send Address MSB  ;\sector number (0..3FFh)
+  LSB  (pre) Send Address LSB  ;/
+  ...  (pre) Send Data Sector (128 bytes)
+  CHK  (pre) Send Checksum (MSB xor LSB xor Data bytes)
+  00h  5Ch   Receive Command Acknowledge 1
+  00h  5Dh   Receive Command Acknowledge 2
+  00h  4xh   Receive Memory End Byte (47h=Good, 4Eh=BadChecksum, FFh=BadSector)
+
+

Get Memory Card ID Command

+

  Send Reply Comment
+  81h  N/A   Memory card address
+  53h  FLAG  Send Get ID Command (ASCII "S"), Receive FLAG Byte
+  00h  5Ah   Receive Memory Card ID1
+  00h  5Dh   Receive Memory Card ID2
+  00h  5Ch   Receive Command Acknowledge 1
+  00h  5Dh   Receive Command Acknowledge 2
+  00h  04h   Receive 04h
+  00h  00h   Receive 00h
+  00h  00h   Receive 00h
+  00h  80h   Receive 80h
+
+This command is supported only by original Sony memory cards. Not sure if all +sony cards are responding with the same values, and what meaning they have, +might be number of sectors (0400h) and sector size (0080h) or whatever.

+

Invalid Commands

+

  Send Reply Comment
+  81h  N/A   Memory card address
+  xxh  FLAG  Send Invalid Command (anything else than "R", "W", or "S")
+
+Transfer aborts immediately after the faulty command byte, or, occasionally +after one more byte (with response FFh to that extra byte).

+

FLAG Byte

+

The initial value of the FLAG byte on power-up (and when re-inserting the +memory card) is 08h.
+Bit3=1 is indicating that the directory wasn't read yet (allowing to sense +memory card changes). For some strange reason, bit3 is NOT reset when reading +from the card, but rather when writing to it. To reset the flag, games are +usually issuing a dummy write to sector number 003Fh, more or less +unneccessarily stressing the lifetime of that sector.
+Bit2=1 seems to be intended to indicate write errors, however, the write +command seems to be always finishing without setting that bit, instead, the +error flag may get set on the NEXT command.
+Note: Some (not all) non-sony cards also have Bit5 of the FLAG byte set.

+

Timings

+

IRQ7 is usually triggered circa 1500 cycles after sending a byte (counted from +the begin of the first bit), except, the last byte doesn't trigger IRQ7, and, +after the 7th byte of the Read command, an additional delay of circa 31000 +cycles occurs before IRQ7 gets triggered (that strange extra delay occurs only +on original Sony cards, not on cards from other manufacturers).
+There seems to be no extra delays in the Write command, as it seems, the data +is written on the fly, and one doesn't need to do any write-busy handling... +although, theoretically, the write shouldn't start until verifying the +checksum... so it can't be done on the fly at all...?

+

Notes

+

Responses in brackets are don't care, (00h) means usually zero, (pre) means +usually equal to the previous command byte (eg. the response to LSB is MSB).

+

Memory cards are reportedly "Flash RAM" which sounds like bullshit, might be +battery backed SRAM, or FRAM, or slower EEPROM or FLASH ROM, or vary from card +to card...?

+

Memory Card Data Format

+

Data Size

+

  Total Memory 128KB = 131072 bytes = 20000h bytes
+  1 Block 8KB = 8192 bytes = 2000h bytes
+  1 Frame 128 bytes = 80h bytes
+
+The memory is split into 16 blocks (of 8 Kbytes each), and each block is split +into 64 sectors (of 128 bytes each). The first block is used as Directory, the +remaining 15 blocks are containing Files, each file can occupy one or more +blocks.

+

Header Frame (Block 0, Frame 0)

+
  00h-01h Memory Card ID (ASCII "MC")
+  02h-7Eh Unused (zero)
+  7Fh     Checksum (all above bytes XORed with each other) (usually 0Eh)
+
+

Directory Frames (Block 0, Frame 1..15)

+

  00h-03h Block Allocation State
+            00000051h - In use ;first-or-only block of a file
+            00000052h - In use ;middle block of a file (if 3 or more blocks)
+            00000053h - In use ;last block of a file   (if 2 or more blocks)
+            000000A0h - Free   ;freshly formatted
+            000000A1h - Free   ;deleted (first-or-only block of file)
+            000000A2h - Free   ;deleted (middle block of file)
+            000000A3h - Free   ;deleted (last block of file)
+  04h-07h Filesize in bytes (2000h..1E000h; in multiples of 8Kbytes)
+  08h-09h Pointer to the NEXT block number (minus 1) used by the file
+            (ie. 0..14 for Block Number 1..15) (or FFFFh if last-or-only block)
+  0Ah-1Eh Filename in ASCII, terminated by 00h (max 20 chars, plus ending 00h)
+  1Fh     Zero (unused)
+  20h-7Eh Garbage (usually 00h-filled)
+  7Fh     Checksum (all above bytes XORed with each other)
+
+Filesize [04h..07h] and Filename [0Ah..1Eh] are stored only in the first +directory entry of a file (ie. with State=51h or A1h), other directory entries +have that bytes zero-filled.

+

Filename Notes

+

The first some letters of the filename should indicate the game to which the +file belongs, in case of commercial games this is conventionally done like so: +Two character region code:
+

  "BI"=Japan, "BE"=Europe, "BA"=America
+
+followed by 10 character game code,
+
  in "AAAA-NNNNN" form     ;for Pocketstation executables replace "-" by "P"
+
+where the "AAAA" part does imply the region too; (SLPS/SCPS=Japan, +SLUS/SCUS=America, SLES/SCES=Europe) (SCxS=Made by Sony, SLxS=Licensed by +Sony), followed by up to 8 characters,
+
  "abcdefgh"
+
+(which may identify the file if the game uses multiple files; this part often +contains a random string which seems to be allowed to contain any chars in +range of 20h..7Fh, of course it shouldn't contain "?" and "*" wildcards).

+

Broken Sector List (Block 0, Frame 16..35)

+

  00h-03h Broken Sector Number (Block*64+Frame) (FFFFFFFFh=None)
+  04h-7Eh Garbage (usually 00h-filled) (some cards have [08h..09h]=FFFFh)
+  7Fh     Checksum (all above bytes XORed with each other)
+
+If Block0/Frame(16+N) indicates that a given sector is broken, then the data +for that sector is stored in Block0/Frame(36+N).

+

Broken Sector Replacement Data (Block 0, Frame 36..55)

+
  00h-7Fh Data (usually FFh-filled, if there's no broken sector)
+
+

Unused Frames (Block 0, Frame 56..62)

+
  00h-7Fh Unused (usually FFh-filled)
+
+

Write Test Frame (Block 0, Frame 63)

+

Reportedly "write test". Usually same as Block 0 ("MC", 253 zero-bytes, plus +checksum 0Eh).

+

Title Frame (Block 1..15, Frame 0) (in first block of file only)

+

  00h-01h  ID (ASCII "SC")
+  02h      Icon Display Flag
+             11h...Icon has 1 frame  (static) (same image shown forever)
+             12h...Icon has 2 frames (animated) (changes every 16 PAL frames)
+             13h...Icon has 3 frames (animated) (changes every 11 PAL frames)
+            Values other than 11h..13h seem to be treated as corrupted file
+            (causing the file not to be listed in the bootmenu)
+  03h      Block Number (1-15)  "icon block count"  Uh?
+                   (usually 01h or 02h... might be block number within
+                   files that occupy 2 or more blocks)
+                   (actually, that kind of files seem to HAVE title frames
+                   in ALL of their blocks; not only in their FIRST block)
+                   (at least SOME seem to have such duplicated title frame,
+                   but not all?)
+  04h-43h  Title in Shift-JIS format (64 bytes = max 32 characters)
+  44h-4Fh  Reserved (00h)
+  50h-5Fh  Reserved (00h)  ;<-- this region is used for the Pocketstation
+  60h-7Fh  Icon 16 Color Palette Data (each entry is 16bit CLUT)
+
+For more info on entries [50h..5Fh], see
+Pocketstation File Header/Icons

+

Icon Frame(s) (Block 1..15, Frame 1..3) (in first block of file only)

+

  00h-7Fh  Icon Bitmap (16x16 pixels, 4bit color depth)
+
+Note: The icons are shown in the BIOS bootmenu (which appears when starting the +PlayStation without a CDROM inserted). The icons are drawn via GP0(2Ch) +command, ie. as Textured four-point polygon, opaque, with texture-blending, +whereas the 24bit blending color is 808080h (so it's quite the same as raw +texture without blending). As semi-transparency is disabled, Palette/CLUT +values can be 0000h=FullyTransparent, or 8000h=SolidBlack (the icons are +usually shown on a black background, so it doesn't make much of a difference).

+

Data Frame(s) (Block 1..15, Frame N..63; N=excluding any Title/Icon Frames)

+

  00h-7Fh  Data
+
+Note: Files that occupy more than one block are having only ONE Title area, and +only one Icon area (in the first sector(s) of their first block), the +additional blocks are using sectors 0..63 for plain data.

+

Shift-JIS Character Set (16bit) (used in Title Frames)

+

Can contain japanese or english text, english characters are encoded like so:
+

  81h,40h      --> SPC
+  81h,43h..97h --> punctuation marks
+  82h,4Fh..58h --> "0..9"
+  82h,60h..79h --> "A..Z"
+  82h,81h..9Ah --> "a..z"
+
+Titles shorter than 32 characters are padded with 00h-bytes.
+Note: The titles are \<usually> in 16bit format (even if they consist of +raw english text), however, the BIOS memory card manager does also accept 8bit +characters 20h..7Fh (so, in the 8bit form, the title could be theoretically up +to 64 characters long, but, nethertheless, the BIOS displays only max 32 +chars).
+For displaying Titles, the BIOS includes a complete Shift-JIS character set,
+BIOS Character Sets
+Shift-JIS is focused on asian languages, and does NOT include european letters +(eg. such with accent marks). Although the non-japanese PSX BIOSes DO include a +european character set, the BIOS memory card manager DOESN'T seem to translate +any title character codes to that character set region.

+

Memory Card Images

+

There are a lot of different ways to get a save from a memory card onto your +PC's hard disk, and these ways sometimes involve sticking some additional +information into a header at the beginning of the file.

+

Raw Memory Card Images (without header) (ie. usually 128K in size)

+

  SmartLink .PSM,
+  WinPSM .PS,
+  DataDeck .DDF,
+  FPSX .MCR,
+  ePSXe .MCD...
+
+don't stick any header on the data at all, so you can just read it in and treat +it like a raw memory card.

+

All of these headers contain a signature at the top of the file. The three most +common formats and their signatures are:

+
     Connectix Virtual Game Station format (.MEM): "VgsM", 64 bytes
+     PlayStation Magazine format (.PSX): "PSV", 256 bytes
+
+

some programs will OMIT any blank or unallocated blocks from the end of the +memory card -- if only three save blocks on the card are in use, for example, +saving the other twelve is pointless.

+

Xploder and Action Replay Files (54 byte header)

+

  00h..14h Filename in ASCII, terminated by 00h (max 20 chars, plus ending 00h)
+  15h..35h Title in ASCII, terminated by 00h (max 32 chars, plus ending 00h)
+  36h..    File Block(s) (starting with the Title sector)
+
+This format contains only a single file (not a whole memory card). The filename +should be the same as used in the Memory Card Directory. The title is more or +less don't care; it may be the SHIFT-JIS title from the Title Sector converted +to ASCII.

+

.MCS Files (Single Save Format)

+

MCS files consist of the 128 byte directory frame for the savefile's first block followed by all of that savefile's blocks in linked list order. When importing this format, the directory frame should be parsed for the save filename and the filesize while other fields should be ignored. The rest of the directory frame fields and any extra directory frames, in the case of multi-block saves, should be reconstructed based on the destination memory card.

+

.GME Files (usually 20F40h bytes)

+

InterAct GME format, produced by the DexDrive.
+

  000h 12   ASCII String "123-456-STD",00h
+  00Ch 4    Usually zerofilled (or meaningless garbage in some files)
+  010h 5    Always 00h,00h,01h,00h,01h
+  015h 16   Copy of Sector 0..15 byte[00h] ;"M", followed by allocation states
+  025h 16   Copy of Sector 0..15 byte[08h] ;00h, followed by next block values
+  035h 11   Usually zerofilled (or meaningless garbage in some files)
+  040h F00h Fifteen Description Strings (each one 100h bytes, padded with 00h)
+  F40h 128K Memory Card Image (128K) (unused sectors 00h or FFh filled)
+
+This is a very strange file format, no idea where it comes from. It contains a +F40h bytes header (mainly zerofilled), followed by the whole 128K of FLASH +memory (mainly zerofilled, too, since it usually contains only a small single +executable file).

+

Memory Card Notes

+

Sony PSX Memory Cards

+

Sony has manufactured only 128KByte memory cards for PSX, no bigger/smaller +ones.

+

Sony PS2 Memory Cards

+

A special case would be PS2 cards, these are bigger, but PS2 cards won't fit +into PSX cards slots (unless when cutting an extra notch in the card edge +connector), a PSX game played on a PS2 console could theoretically access PS2 +cards (if it supports the different directory structure on that cards).

+

Third Party Cards with bigger capacity

+

Some third party cards contain larger memory chips, however, the PSX +games/kernel are supporting only regular 128Kbyte cards, so the extra memory +can be used only by dividing it into several 128Kbyte memory card images.
+Selecting a different memory card image can be done by a switch or button on +the card, or via joypad key combinations (joypad/card are sharing the same +signals, so the card could watch the traffic on joypad bus, provided that the +MIPS CPU is actually reading the joypad).

+

Third Party Cards with bigger capacity and Data Compression

+

Some cards are additionally using data compression to increase the card +capacity, but that techinque is having rather bad reputation and could result +in data loss. For example, if a game has allocated four blocks on the memory +card, then it'll expect to be able to overwrite that four blocks at any time +(without needing to handle "memory card full" errors), however, if the card is +full, and if the newly written data has worse compression ratio, then the card +will be unable to store the new game position (and may have already overwritten +parts of the old game position). As a workaround, such cards may use a LED to +warn users when running low on memory (ideally, there should be always at least +128Kbytes of free memory).

+

Joytech Smart Card Adaptor

+

The smart card adaptor plugs into memory card slot, and allows to use special +credit card-shaped memory cards. There don't seem to be any special features, +ie. the hardware setup does just behave like normal PSX memory cards.

+

Datel VMEM (virtual memory card storage on expansion port)

+

The Datel/Interact VMEM exists as standalone VMEM cartridge, and some Datel +Cheat Devices do also include the VMEM feature. Either way, the VMEM connects +to expansion port, and contain some large FLASH memory, for storing multiple +memory cards on it. Unknown, how that memory is accessed (maybe it must be +copied to a regular memory card, or maybe they've somehow hooked the Kernel (or +even the hardware signals?) so that games could directly access the VMEM?

+

Passwords (instead of Memory Cards)

+

Some older games are using passwords instead of memory cards to allow the user +to continue at certain game positions. That's nice for people without memory +card, but unfortunately many of that games are restricted to it - it'd be more +user friendly to support both passwords, and, optionally, memory cards.

+

Yaroze Access Cards (DTL-H3020)

+

The Yaroze Access Card connects to memory card slot, the card resembles regular +memory cards, but it doesn't contain any storage memory. Instead, it does +merely support a very basic Access Card detection command:
+

  Send Reply Comment
+  21h  N/A?  Probably replies HighZ (ie. probably reads FFh)?
+  53h  0xh?  Replies unknown 8bit value (upper 4bit are known to be zero)?
+
+Ie. when receiving 21h as first byte, it replies by an ACK, and does then +output 0xh as response to the next byte.
+Without the Access Card, the Yaroze Bootdisc will refuse to work (the disc +contains software for transferring data to/from PC, for developing homebrew +games).

+

Pocketstation (Memory Card with built-in LCD screen and buttons)

+

Pocketstation

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cpuspecifications/index.html b/cpuspecifications/index.html new file mode 100644 index 0000000..f823b5f --- /dev/null +++ b/cpuspecifications/index.html @@ -0,0 +1,2626 @@ + + + + + + + + + + + + + + + + + + + + + + + + CPU Specifications - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

CPU Specifications

+

CPU

+

CPU Registers
+CPU Opcode Encoding
+CPU Load/Store Opcodes
+CPU ALU Opcodes
+CPU Jump Opcodes
+CPU Coprocessor Opcodes
+CPU Pseudo Opcodes

+

System Control Coprocessor (COP0)

+

COP0 - Register Summary
+COP0 - Exception Handling
+COP0 - Misc
+COP0 - Debug Registers

+

CPU Registers

+

All registers are 32bit wide.
+

  Name       Alias    Common Usage
+  R0         zero     Constant (always 0)
+  R1         at       Assembler temporary (destroyed by some assembler pseudoinstructions!)
+  R2-R3      v0-v1    Subroutine return values, may be changed by subroutines
+  R4-R7      a0-a3    Subroutine arguments, may be changed by subroutines
+  R8-R15     t0-t7    Temporaries, may be changed by subroutines
+  R16-R23    s0-s7    Static variables, must be saved by subs
+  R24-R25    t8-t9    Temporaries, may be changed by subroutines
+  R26-R27    k0-k1    Reserved for kernel (destroyed by some IRQ handlers!)
+  R28        gp       Global pointer (rarely used)
+  R29        sp       Stack pointer
+  R30        fp(s8)   Frame Pointer, or 9th Static variable, must be saved
+  R31        ra       Return address (used so by JAL,BLTZAL,BGEZAL opcodes)
+  -          pc       Program counter
+  -          hi,lo    Multiply/divide results, may be changed by subroutines
+
+R0 is always zero.
+R31 can be used as general purpose register, however, some opcodes are using it +to store the return address: JAL, BLTZAL, BGEZAL. (Note: JALR can optionally +store the return address in R31, or in R1..R30. Exceptions store the return +address in cop0r14 - EPC).

+

R29 (SP) - Full Decrementing Wasted Stack Pointer

+

The CPU doesn't explicitly have stack-related registers or opcodes, however, +conventionally, R29 is used as stack pointer (SP). The stack can be accessed +with normal load/store opcodes, which do not automatically increase/decrease +SP, so the SP register must be manually modified to (de-)allocate data.
+The PSX BIOS is using "Full Decrementing Wasted Stack".
+Decrementing means that SP gets decremented when allocating data (that's common +for most CPUs) - Full means that SP points to the first ALLOCATED word on the +stack, so the allocated memory is at SP+0 and above, free memory at SP-1 and +below, Wasted means that when calling a sub-function with N parameters, then +the caller must pre-allocate N works on stack, and the sub-function may freely +use and destroy these words; at [SP+0..N*4-1].

+

For example, "push ra,r16,r17" would be implemented as:
+

  sub  sp,20h
+  mov  [sp+14h],ra
+  mov  [sp+18h],r16
+  mov  [sp+1Ch],r17
+
+where the allocated 20h bytes have the following purpose:
+
  [sp+00h..0Fh]  wasted stack (may, or may not, be used by sub-functions)
+  [sp+10h..13h]  8-byte alignment padding (not used)
+  [sp+14h..1Fh]  pushed registers
+

+

CPU Opcode Encoding

+

Primary opcode field (Bit 26..31)

+
  00h=SPECIAL 08h=ADDI  10h=COP0 18h=N/A   20h=LB   28h=SB   30h=LWC0 38h=SWC0
+  01h=BcondZ  09h=ADDIU 11h=COP1 19h=N/A   21h=LH   29h=SH   31h=LWC1 39h=SWC1
+  02h=J       0Ah=SLTI  12h=COP2 1Ah=N/A   22h=LWL  2Ah=SWL  32h=LWC2 3Ah=SWC2
+  03h=JAL     0Bh=SLTIU 13h=COP3 1Bh=N/A   23h=LW   2Bh=SW   33h=LWC3 3Bh=SWC3
+  04h=BEQ     0Ch=ANDI  14h=N/A  1Ch=N/A   24h=LBU  2Ch=N/A  34h=N/A  3Ch=N/A
+  05h=BNE     0Dh=ORI   15h=N/A  1Dh=N/A   25h=LHU  2Dh=N/A  35h=N/A  3Dh=N/A
+  06h=BLEZ    0Eh=XORI  16h=N/A  1Eh=N/A   26h=LWR  2Eh=SWR  36h=N/A  3Eh=N/A
+  07h=BGTZ    0Fh=LUI   17h=N/A  1Fh=N/A   27h=N/A  2Fh=N/A  37h=N/A  3Fh=N/A
+
+

Secondary opcode field (Bit 0..5) (when Primary opcode = 00h)

+
  00h=SLL   08h=JR      10h=MFHI 18h=MULT  20h=ADD  28h=N/A  30h=N/A  38h=N/A
+  01h=N/A   09h=JALR    11h=MTHI 19h=MULTU 21h=ADDU 29h=N/A  31h=N/A  39h=N/A
+  02h=SRL   0Ah=N/A     12h=MFLO 1Ah=DIV   22h=SUB  2Ah=SLT  32h=N/A  3Ah=N/A
+  03h=SRA   0Bh=N/A     13h=MTLO 1Bh=DIVU  23h=SUBU 2Bh=SLTU 33h=N/A  3Bh=N/A
+  04h=SLLV  0Ch=SYSCALL 14h=N/A  1Ch=N/A   24h=AND  2Ch=N/A  34h=N/A  3Ch=N/A
+  05h=N/A   0Dh=BREAK   15h=N/A  1Dh=N/A   25h=OR   2Dh=N/A  35h=N/A  3Dh=N/A
+  06h=SRLV  0Eh=N/A     16h=N/A  1Eh=N/A   26h=XOR  2Eh=N/A  36h=N/A  3Eh=N/A
+  07h=SRAV  0Fh=N/A     17h=N/A  1Fh=N/A   27h=NOR  2Fh=N/A  37h=N/A  3Fh=N/A
+
+

Opcode/Parameter Encoding

+
  31..26 |25..21|20..16|15..11|10..6 |  5..0  |
+   6bit  | 5bit | 5bit | 5bit | 5bit |  6bit  |
+  -------+------+------+------+------+--------+------------
+  000000 | N/A  | rt   | rd   | imm5 | 0000xx | shift-imm
+  000000 | rs   | rt   | rd   | N/A  | 0001xx | shift-reg
+  000000 | rs   | N/A  | N/A  | N/A  | 001000 | jr
+  000000 | rs   | N/A  | rd   | N/A  | 001001 | jalr
+  000000 | <-----comment20bit------> | 00110x | sys/brk
+  000000 | N/A  | N/A  | rd   | N/A  | 0100x0 | mfhi/mflo
+  000000 | rs   | N/A  | N/A  | N/A  | 0100x1 | mthi/mtlo
+  000000 | rs   | rt   | N/A  | N/A  | 0110xx | mul/div
+  000000 | rs   | rt   | rd   | N/A  | 10xxxx | alu-reg
+  000001 | rs   | 00000| <--immediate16bit--> | bltz
+  000001 | rs   | 00001| <--immediate16bit--> | bgez
+  000001 | rs   | 10000| <--immediate16bit--> | bltzal
+  000001 | rs   | 10001| <--immediate16bit--> | bgezal
+  00001x | <---------immediate26bit---------> | j/jal
+  00010x | rs   | rt   | <--immediate16bit--> | beq/bne
+  00011x | rs   | N/A  | <--immediate16bit--> | blez/bgtz
+  001xxx | rs   | rt   | <--immediate16bit--> | alu-imm
+  001111 | N/A  | rt   | <--immediate16bit--> | lui-imm
+  100xxx | rs   | rt   | <--immediate16bit--> | load rt,[rs+imm]
+  101xxx | rs   | rt   | <--immediate16bit--> | store rt,[rs+imm]
+  x1xxxx | <------coprocessor specific------> | coprocessor (see below)
+
+

Coprocessor Opcode/Parameter Encoding

+
  31..26 |25..21|20..16|15..11|10..6 |  5..0  |
+   6bit  | 5bit | 5bit | 5bit | 5bit |  6bit  |
+  -------+------+------+------+------+--------+------------
+  0100nn |0|0000| rt   | rd   | N/A  | 000000 | MFCn rt,rd_dat  ;rt = dat
+  0100nn |0|0010| rt   | rd   | N/A  | 000000 | CFCn rt,rd_cnt  ;rt = cnt
+  0100nn |0|0100| rt   | rd   | N/A  | 000000 | MTCn rt,rd_dat  ;dat = rt
+  0100nn |0|0110| rt   | rd   | N/A  | 000000 | CTCn rt,rd_cnt  ;cnt = rt
+  0100nn |0|1000|00000 | <--immediate16bit--> | BCnF target ;jump if false
+  0100nn |0|1000|00001 | <--immediate16bit--> | BCnT target ;jump if true
+  0100nn |1| <--------immediate25bit--------> | COPn imm25
+  010000 |1|0000| N/A  | N/A  | N/A  | 000001 | COP0 01h  ;=TLBR, unused on PS1
+  010000 |1|0000| N/A  | N/A  | N/A  | 000010 | COP0 02h  ;=TLBWI, unused on PS1
+  010000 |1|0000| N/A  | N/A  | N/A  | 000110 | COP0 06h  ;=TLBWR, unused on PS1
+  010000 |1|0000| N/A  | N/A  | N/A  | 001000 | COP0 08h  ;=TLBP, unused on PS1
+  010000 |1|0000| N/A  | N/A  | N/A  | 010000 | COP0 10h  ;=RFE
+  1100nn | rs   | rt   | <--immediate16bit--> | LWCn rt_dat,[rs+imm]
+  1110nn | rs   | rt   | <--immediate16bit--> | SWCn rt_dat,[rs+imm]
+
+

Illegal Opcodes

+

All opcodes that are marked as "N/A" in the Primary and Secondary opcode tables +are causing a Reserved Instruction Exception (excode=0Ah).
+The unused operand bits (eg. Bit21-25 for LUI opcode) should be usually zero, +but do not necessarily trigger exceptions if set to nonzero values.

+

CPU Load/Store Opcodes

+

Load instructions

+

  lb  rt,imm(rs)    rt=[imm+rs]  ;byte sign-extended
+  lbu rt,imm(rs)    rt=[imm+rs]  ;byte zero-extended
+  lh  rt,imm(rs)    rt=[imm+rs]  ;halfword sign-extended
+  lhu rt,imm(rs)    rt=[imm+rs]  ;halfword zero-extended
+  lw  rt,imm(rs)    rt=[imm+rs]  ;word
+
+Load instructions can read from the data cache (if the data is not in the +cache, or if the memory region is uncached, then the CPU gets halted until it +has read the data) (however, the PSX doesn't have a data cache).
+Load and store instructions can generate address error exceptions if the memory address is not properly aligned (To a halfword boundary for lh/lhu/sh or a word boundary for lw/sw. lwl/lwr/swl/swr can't access misaligned address as they force align the memory address). +Additionally, accessing certain invalid memory locations will cause a bus error exception. If an exception occurs during a load instruction, the rt register is left untouched.

+

Caution - Load Delay

+

The loaded data is NOT available to the next opcode, ie. the target register +isn't updated until the next opcode has completed. So, if the next opcode tries +to read from the load destination register, then it would (usually) receive the +OLD value of that register (unless an IRQ occurs between the load and next +opcode, in that case the load would complete during IRQ handling, and so, the +next opcode would receive the NEW value).
+MFC2/CFC2 also have a 1-instruction delay until the target register is loaded with its new value (more info in the GTE section).

+

Store instructions

+

  sb  rt,imm(rs)    [imm+rs]=(rt AND FFh)   ;store 8bit
+  sh  rt,imm(rs)    [imm+rs]=(rt AND FFFFh) ;store 16bit
+  sw  rt,imm(rs)    [imm+rs]=rt             ;store 32bit
+
+Store operations are passed to the write-queue, so they can execute within a +single clock cycle (unless the write-queue was full, in that case the CPU gets +halted until there's room in the queue). For more information on the write-queue, visit this page.

+

Caution - 8/16-bit writes to certain IO registers

+

During an 8-bit or 16-bit store, all 32 bits of the GPR are placed on the bus. +As such, when writing to certain 32-bit IO registers with an 8 or 16-bit store, it will behave like a 32-bit store, using the register's full value. +The soundscope on some shells is known to rely on this, as it uses sh to write to certain DMA registers. +If this is not properly emulated, the soundscope will hang, waiting for an interrupt that will never be fired.

+

Load/Store Alignment

+

Halfword addresses must be aligned by 2, word addresses must be aligned by 4, +trying to access mis-aligned addresses will cause an exception. There's no +alignment restriction for bytes.

+

Unaligned Load/Store

+

  lwr   rt,imm(rs)     load right bits of rt from memory (usually imm+0)
+  lwl   rt,imm(rs)     load left  bits of rt from memory (usually imm+3)
+  swr   rt,imm(rs)     store right bits of rt to memory (usually imm+0)
+  swl   rt,imm(rs)     store left  bits of rt to memory (usually imm+3)
+
+There's no delay required between lwl and lwr, so you can use them directly +following eachother, eg. to load a word anywhere in memory without regard to +alignment:
+
  lwl   r2,$0003(t0)   ;\no delay required between these
+  lwr   r2,$0000(t0)   ;/(although both access r2)
+  nop                  ;-requires load delay HERE (before reading from r2)
+  and   r2,r2,0ffffh   ;-access r2 (eg. reducing it to unaligned 16bit data)
+

+

Unaligned Load/Store (Details)

+

LWR/SWR transfers the right (=lower) bits of Rt, up-to 32bit memory boundary:
+

  lwr/swr [N*4+0]     transfer whole 32bit of Rt to/from [N*4+0..3]
+  lwr/swr [N*4+1]     transfer lower 24bit of Rt to/from [N*4+1..3]
+  lwr/swr [N*4+2]     transfer lower 16bit of Rt to/from [N*4+2..3]
+  lwr/swr [N*4+3]     transfer lower  8bit of Rt to/from [N*4+3]
+
+LWL/SWL transfers the left (=upper) bits of Rt, down-to 32bit memory boundary:
+
  lwl/swl [N*4+0]     transfer upper  8bit of Rt to/from [N*4+0]
+  lwl/swl [N*4+1]     transfer upper 16bit of Rt to/from [N*4+0..1]
+  lwl/swl [N*4+2]     transfer upper 24bit of Rt to/from [N*4+0..2]
+  lwl/swl [N*4+3]     transfer whole 32bit of Rt to/from [N*4+0..3]
+
+The CPU has four separate byte-access signals, so, within a 32bit location, it +can transfer all fragments of Rt at once (including for odd 24bit amounts). The +transferred data is not zero- or sign-expanded, eg. when transferring 8bit +data, the other 24bit of Rt and [mem] will remain intact.

+

Note: The aligned variant can also misused for blocking memory access on +aligned addresses (in that case, if the address is known to be aligned, only +one of the opcodes are needed, either LWL or LWR).... Uhhhhhhhm, OR is that NOT +allowed... more PROBABLY that doesn't work?

+

CPU ALU Opcodes

+

arithmetic instructions

+

  add   rd,rs,rt         rd=rs+rt (with overflow trap)
+  addu  rd,rs,rt         rd=rs+rt
+  sub   rd,rs,rt         rd=rs-rt (with overflow trap)
+  subu  rd,rs,rt         rd=rs-rt
+  addi  rt,rs,imm        rt=rs+(-8000h..+7FFFh) (with ov.trap)
+  addiu rt,rs,imm        rt=rs+(-8000h..+7FFFh)
+
+The opcodes "with overflow trap" do trigger an exception (and leave rd +unchanged) in case of overflows.

+

comparison instructions

+
  slt   rd,rs,rt  if rs<rt (signed comparison) then rd=1 else rd=0
+  sltu  rd,rs,rt  if rs<rt (unsigned comparison) then rd=1 else rd=0
+  slti  rt,rs,imm if rs<(sign-extended immediate in range [-8000h..+7FFFh], signed comparison) then rt=1 else rt=0
+  sltiu rt,rs,imm if rs<(sign-extended immediate in range [0..7FFFh] U [FFFF8000h..FFFFFFFFh], unsigned comparison) then rt=1 else rt=0
+
+

logical instructions

+
  and  rd,rs,rt         rd = rs AND rt
+  or   rd,rs,rt         rd = rs OR  rt
+  xor  rd,rs,rt         rd = rs XOR rt
+  nor  rd,rs,rt         rd = FFFFFFFFh XOR (rs OR rt)
+  andi rt,rs,imm        rt = rs AND (0000h..FFFFh)
+  ori  rt,rs,imm        rt = rs OR  (0000h..FFFFh)
+  xori rt,rs,imm        rt = rs XOR (0000h..FFFFh)
+
+

shifting instructions

+

  sllv rd,rt,rs          rd = rt SHL (rs AND 1Fh)
+  srlv rd,rt,rs          rd = rt SHR (rs AND 1Fh)
+  srav rd,rt,rs          rd = rt SAR (rs AND 1Fh)
+  sll  rd,rt,imm         rd = rt SHL (00h..1Fh)
+  srl  rd,rt,imm         rd = rt SHR (00h..1Fh)
+  sra  rd,rt,imm         rd = rt SAR (00h..1Fh)
+  lui  rt,imm            rt = (0000h..FFFFh) SHL 16
+
+Unlike many other opcodes, shifts use 'rt' as second (not third) operand.
+The hardware does NOT generate exceptions on SHL overflows.

+

Multiply/divide

+

  mult   rs,rt           hi:lo = rs*rt (signed)
+  multu  rs,rt           hi:lo = rs*rt (unsigned)
+  div    rs,rt           lo = rs/rt, hi=rs mod rt (signed)
+  divu   rs,rt           lo = rs/rt, hi=rs mod rt (unsigned)
+  mfhi   rd              rd=hi  ;move from hi
+  mflo   rd              rd=lo  ;move from lo
+  mthi   rs              hi=rs  ;move to hi
+  mtlo   rs              lo=rs  ;move to lo
+
+The mul/div opcodes are starting the multiply/divide operation, starting takes +only a single clock cycle, however, trying to read the result from the hi/lo +registers while the mul/div operation is busy will halt the CPU until the +mul/div has completed. For multiply, the execution time depends on rs (ie. +"small*large" can be much faster than "large*small").
+
  __multu_execution_time_____________________________________________________
+  Fast  (6 cycles)   rs = 00000000h..000007FFh
+  Med   (9 cycles)   rs = 00000800h..000FFFFFh
+  Slow  (13 cycles)  rs = 00100000h..FFFFFFFFh
+  __mult_execution_time_____________________________________________________
+  Fast  (6 cycles)   rs = 00000000h..000007FFh, or rs = FFFFF800h..FFFFFFFFh
+  Med   (9 cycles)   rs = 00000800h..000FFFFFh, or rs = FFF00000h..FFFFF801h
+  Slow  (13 cycles)  rs = 00100000h..7FFFFFFFh, or rs = 80000000h..FFF00001h
+  __divu/div_execution_time________________________________________________
+  Fixed (36 cycles)  no matter of rs and rt values
+
+For example, when executing "multu 123h,12345678h" and "mflo r1", one can +insert up to six (cached) ALU opcodes, or read one value from PSX Main RAM +(which has 6 cycle access time) between the "multu" and "mflo" opcodes without +additional slowdown.
+The hardware does NOT generate exceptions on divide overflows, instead, divide +errors are returning the following values:
+
  Opcode  Rs              Rt       Hi/Remainder  Lo/Result
+  divu    0..FFFFFFFFh    0   -->  Rs            FFFFFFFFh
+  div     0..+7FFFFFFFh   0   -->  Rs            -1
+  div     -80000000h..-1  0   -->  Rs            +1
+  div     -80000000h      -1  -->  0             -80000000h
+
+For divu, the result is more or less correct (as close to infinite as +possible). For div, the results are total garbage (about furthest away from +the desired result as possible).
+Note: After accessing the lo/hi registers, there seems to be a strange rule +that one should not touch the lo/hi registers in the next 2 cycles or so... not +yet understood if/when/how that rule applies...?

+

CPU Jump Opcodes

+

jumps and branches

+

Note that the instruction following the branch will always be executed.
+

  j      dest        pc=(pc and F0000000h)+(imm26bit*4)
+  jal    dest        pc=(pc and F0000000h)+(imm26bit*4),ra=$+8
+  jr     rs          pc=rs
+  jalr (rd,)rs(,rd)  pc=rs, rd=$+8 ;see caution
+  beq    rs,rt,dest  if rs=rt  then pc=$+4+(-8000h..+7FFFh)*4
+  bne    rs,rt,dest  if rs<>rt then pc=$+4+(-8000h..+7FFFh)*4
+  bltz   rs,dest     if rs<0   then pc=$+4+(-8000h..+7FFFh)*4
+  bgez   rs,dest     if rs>=0  then pc=$+4+(-8000h..+7FFFh)*4
+  bgtz   rs,dest     if rs>0   then pc=$+4+(-8000h..+7FFFh)*4
+  blez   rs,dest     if rs<=0  then pc=$+4+(-8000h..+7FFFh)*4
+  bltzal rs,dest     if rs<0   then pc=$+4+(..)*4; ra=$+8; 
+  bgezal rs,dest     if rs>=0  then pc=$+4+(..)*4; ra=$+8;
+

+

jr/jalr can be used to jump to an unaligned address, in which case an address error (AdEL) exception will be raised on the next instruction fetch.
+Additionally, bltzal/bgezal will always place the return address in $ra, whether or not the branch is taken. Additionally, if rs is $ra, then the value used for the comparison is $ra's value before linking.

+

JALR cautions

+

Caution: The JALR source code syntax varies (IDT79R3041 specs say "jalr rs,rd", +but MIPS32 specs say "jalr rd,rs"). Moreover, JALR may not use the same +register for both operands (eg. "jalr r31,r31") (doing so would destroy the +target address; which is normally no problem, but it can be a problem if an IRQ +occurs between the JALR opcode and the following branch delay opcode; in that +case BD gets set, and EPC points "back" to the JALR opcode, so JALR is executed +twice, with destroyed target address in second execution).

+

exception opcodes

+

Unlike for jump/branch opcodes, exception opcodes are immediately executed (ie. +without executing the following opcode).
+

  syscall  imm20        generates a system call exception
+  break    imm20        generates a breakpoint exception
+
+The 20bit immediate doesn't affect the CPU (however, the exception handler may +interprete it by software; by examing the opcode bits at [epc-4]).

+

CPU Coprocessor Opcodes

+

Coprocessor Instructions (COP0..COP3)

+

  mfc# rt,rd       ;rt = cop#datRd ;data regs
+  cfc# rt,rd       ;rt = cop#cntRd ;control regs
+  mtc# rt,rd       ;cop#datRd = rt ;data regs
+  ctc# rt,rd       ;cop#cntRd = rt ;control regs
+  cop# imm25       ;exec cop# command 0..1FFFFFFh
+  lwc# rt,imm(rs)  ;cop#dat_rt = [rs+imm]  ;word
+  swc# rt,imm(rs)  ;[rs+imm] = cop#dat_rt  ;word
+  bc#f dest        ;if cop#flg=false then pc=$+disp
+  bc#t dest        ;if cop#flg=true  then pc=$+disp
+  rfe              ;return from exception (COP0)
+  tlb<xx>          ;virtual memory related (COP0), unused in the PS1
+
+Unknown if any tlb-opcodes (tlbr,tlbwi,tlbwr,tlbp) are implemented in the psx hardware?

+

Caution - Load Delay

+

When reading from a coprocessor register, the next opcode cannot use the +destination register as operand (much the same as the Load Delays that occur +when reading from memory; see there for details).
+Reportedly, the Load Delay applies for the next TWO opcodes after coprocessor +reads, but, that seems to be nonsense (the PSX does finish both COP0 and COP2 +reads after ONE opcode).

+

Caution - Store Delay

+

In some cases, a similar delay occurs when writing to a coprocessor register. +COP0 is more or less free of store delays (eg. one can read from a cop0 +register immediately after writing to it), the only known exception is the cop2 +enable bit in cop0r12.bit30 (setting that cop0 bit acts delayed, and cop2 isn't +actually enabled until after 2 clock cycles or so).
+Writing to cop2 registers has a delay of 2..3 clock cycles. In most cases, that +is probably (?) only 2 cycles, but special cases like writing to IRGB (which +does additionally affect IR1,IR2,IR3) take 3 cycles until the result arrives in +all registers).
+Note that Store Delays are counted in numbers of clock cycles (not in numbers +of opcodes). For 3 cycle delay, one must usually insert 3 cached opcodes (or +one uncached opcode).

+

CPU Pseudo Opcodes

+

Pseudo instructions (native/spasm)

+
  nop                  ;alias for sll r0,r0,0
+  move rd,rs           ;alias for addu rd,rs,r0
+  la   rx,imm32        ;load address   (alias for lui rx / addiu rx)
+  li   rx,imm32        ;load immediate (alias for lui rx / ori   rx)
+  li   rx,imm16        ;load immediate (alias for ori, range 0..FFFFh)
+  li   rx,-imm15       ;load immediate (alias for addiu, range -1..-8000h)
+  li   rx,imm16*10000h ;load immediate (alias for lui)
+  lw   rx,imm32        ;load from address (lui rx / lw rx,rx)
+  sw   rx,imm32        ;store to address  (lui r1 / sw rx,r1) (destroys r1!)
+  lb,lh,lwl,lwr,lbu,lhu;as above pseudo lw
+  sb,sh,swl,swr        ;as above pseudo sw (ie. also destroys r1!)
+  alu  rx,op           ;alias for alu  rx,rx,op
+  alu(u) rx,rx,imm     ;alias for alui(u) rx,rx,imm
+  jalr  rx             ;alias for jalr (RA,)rx(,RA)
+  subi(u) rt,rs,imm    ;alias for addi(u) rt,rs,-imm
+  beqz rx,dest         ;alias for beq rx,r0,dest
+  bnez rx,dest         ;alias for bne rx,r0,dest
+  b   dest             ;alias for beq r0,r0,dest (jump relative/spasm)
+  bra dest             ;alias for bgez r0, r0, dest
+  bal dest             ;alias for bgezal r0, r0, dest
+
+

Pseudo instructions (nocash/a22i, not present on most other assemblers)

+

  mov  rx,NNNN0000h    ;alias for lui  rx,NNNNh
+  mov  rx,0000NNNNh    ;alias for or   rx,r0,NNNNh  ;max +FFFFh
+  mov  rx,-imm15       ;alias for add  rx,r0,-NNNNh ;min -8000h
+  mov  rx,ry           ;alias for or   rx,ry,0  (or "addiu")
+  jrel dest            ;alias for blez R0,dest   ;relative jump
+  crel dest            ;alias for callns R0,dest ;relative call
+  jz   rx,dest         ;alias for je   rx,R0,dest
+  jnz  rx,dest         ;alias for jne  rx,R0,dest
+  call rx              ;alias for call rx,ret=RA
+  ret                  ;alias for jmp  ra
+  subt rt,rs,imm       ;alias for addt rt,rs,-imm
+  sub  rt,rs,imm       ;alias for add  rt,rs,-imm
+  alu  rx,op           ;alias for alu  rx,rx,op
+  neg(t) rx,ry         ;alias for sub(t) rx,R0,ry
+  not    rx,ry         ;alias for nor    rx,R0,ry
+  neg(t)/not rx        ;alias for neg(t)/not rx,rx
+  setz rx,ry           ;alias for setb rx,ry,1   (set if zero)
+  setnz rx,ry          ;alias for setb rx,R0,ry  (set if nonzero)
+  syscall/break        ;alias for syscall/break 000000h
+
+Below are pseudo instructions combined of two 32bit opcodes...
+
  movp rx,imm32        ;alias for lui  rx,imm16 -plus- or rx,rx,imm16)
+  mov(bhs)p rx,[imm32] ;load from address (lui rx,imm16 / mov rx,[rx+imm16])
+  movu [rs+imm]        ;alias for lwr/swr [rs+imm] plus lwl/swl [rs+imm+3]
+  reti                 ;alias for jmp k0 plus rfe
+
+Below are pseudo instructions combined of two or more 32bit opcodes...
+
  push rlist           ;alias for sub sp,n*4 -- mov [sp+(1..n)*4],r1..rn
+  pop  rlist           ;alias for mov r1..rn,[sp+(1..n)*4] -- add sp,n*4
+  pop  pc,rlist        ;alias for pop ra,rlist -- jmp ra
+

+

Directives (nocash)

+
  .mips          ;select MIPS instruction set (alternately .hc05 for MC68HC05)
+  .bios          ;create a .ROM file (instead of .EXE)
+  .auto_nop      ;append NOPs to jumps ;unless next opcode starts with a +
+  org imm        ;assume following code to be originated at address "imm"
+  db n(,n(..)))  ;define 8bit data values(s) or quoted ASCII strings
+  dw n(,n(..)))  ;define 16bit data values(s) (not 32bit data!)
+  dd n(,n(..)))  ;define 32bit data values(s)
+  .align imm
+  0              ;alias for immediate 0 and register R0 (whichever fits)
+
+

Directives (native)

+
  org imm        ;self-explaining (but, default=$80010000 for spasm!)
+  align imm      ;self-explaining (probably zeropadded?)
+  db n(,n(..)))  ;define 8bit data values(s) or quoted ASCII strings
+  dh n(,n(..)))  ;define 16bit data values(s)
+  dw n(,n(..)))  ;define 32bit data values(s) (not 16bit data!)
+  dcb len,value  ;fill <len> bytes by <value> (different as DCB on ARM CPUs)
+  xyz            ;define label "xyz" at current address (without colon)
+  xyz equ n      ;assign value n to xyz
+  xyz = n        ;probably same/sililar as "equ"
+  ;xyz           ;comments invoked with semicolon (spasm)
+  incbin file.bin       ;import binary file
+  include file.asm      ;import asm file
+  zero           ;alias for r0
+  >imm32         ;alias for (i-(i AND 8000h))/10000h,  and/or i/10000h ?
+  <imm32         ;alias for (i AND 0FFFFh), used for SW(+/-) and ORI(+)?
+  end       ;N/A ;no "end" or ".end" directive needed/used by spasm
+  r1 aka at ;N/A ;some assemblers may (optionally) reject to use r1/at
+
+

Syntax for unknown assembler (for pad.s)

+

It uses "0x" for HEX values (but doesn't use "$" for registers).
+It uses "#" instead of ";" for comments.
+It uses ":" for labels (fortunately).
+The assembler has at least one directive: ".byte" (equivalent to "db" on other +assemblers).
+I've no clue which assembler is used for that syntax... could that be the Psy-Q +assembler?

+

COP0 - Register Summary

+

COP0 Register Summary

+
  cop0r0-r2   - N/A
+  cop0r3      - BPC - Breakpoint on execute (R/W)
+  cop0r4      - N/A
+  cop0r5      - BDA - Breakpoint on data access (R/W)
+  cop0r6      - JUMPDEST - Randomly memorized jump address (R)
+  cop0r7      - DCIC - Breakpoint control (R/W)
+  cop0r8      - BadVaddr - Bad Virtual Address (R)
+  cop0r9      - BDAM - Data Access breakpoint mask (R/W)
+  cop0r10     - N/A
+  cop0r11     - BPCM - Execute breakpoint mask (R/W)
+  cop0r12     - SR - System status register (R/W)
+  cop0r13     - CAUSE - Describes the most recently recognised exception (R)
+  cop0r14     - EPC - Return Address from Trap (R)
+  cop0r15     - PRID - Processor ID (R)
+  cop0r16-r31 - Garbage
+  cop0r32-r63 - N/A - None such (Control regs)
+
+

COP0 - Exception Handling

+

cop0r13 - CAUSE - (Read-only, except, Bit8-9 are R/W)

+

Describes the most recently recognised exception
+

  0-1   -      Not used (zero)
+  2-6   Excode Describes what kind of exception occured:
+                 00h INT     Interrupt
+                 01h MOD     Tlb modification (none such in PSX)
+                 02h TLBL    Tlb load         (none such in PSX)
+                 03h TLBS    Tlb store        (none such in PSX)
+                 04h AdEL    Address error, Data load or Instruction fetch
+                 05h AdES    Address error, Data store
+                             The address errors occur when attempting to read
+                             outside of KUseg in user mode and when the address
+                             is misaligned. (See also: BadVaddr register)
+                 06h IBE     Bus error on Instruction fetch
+                 07h DBE     Bus error on Data load/store
+                 08h Syscall Generated unconditionally by syscall instruction
+                 09h BP      Breakpoint - break instruction
+                 0Ah RI      Reserved instruction
+                 0Bh CpU     Coprocessor unusable
+                 0Ch Ov      Arithmetic overflow
+                 0Dh-1Fh     Not used
+  7     -      Not used (zero)
+  8-15  Ip     Interrupt pending field. Bit 8 and 9 are R/W, and
+               contain the last value written to them. As long
+               as any of the bits are set they will cause an
+               interrupt if the corresponding bit is set in IM.
+  16-27 -      Not used (zero)
+  28-29 CE     Contains the coprocessor number if the exception
+               occurred because of a coprocessor instuction for
+               a coprocessor which wasn't enabled in SR.
+  30    -      Not used (zero)
+  31    BD     Is set when last exception points to the
+               branch instuction instead of the instruction
+               in the branch delay slot, where the exception
+               occurred.
+

+

cop0r12 - SR - System status register (R/W)

+
  0     IEc Current Interrupt Enable  (0=Disable, 1=Enable) ;rfe pops IUp here
+  1     KUc Current Kernel/User Mode  (0=Kernel, 1=User)    ;rfe pops KUp here
+  2     IEp Previous Interrupt Enable                       ;rfe pops IUo here
+  3     KUp Previous Kernel/User Mode                       ;rfe pops KUo here
+  4     IEo Old Interrupt Enable                        ;left unchanged by rfe
+  5     KUo Old Kernel/User Mode                        ;left unchanged by rfe
+  6-7   -   Not used (zero)
+  8-15  Im  8 bit interrupt mask fields. When set the corresponding
+            interrupts are allowed to cause an exception.
+  16    Isc Isolate Cache (0=No, 1=Isolate)
+              When isolated, all load and store operations are targetted
+              to the Data cache, and never the main memory.
+              (Used by PSX Kernel, in combination with Port FFFE0130h)
+  17    Swc Swapped cache mode (0=Normal, 1=Swapped)
+              Instruction cache will act as Data cache and vice versa.
+              Use only with Isc to access & invalidate Instr. cache entries.
+              (Not used by PSX Kernel)
+  18    PZ  When set cache parity bits are written as 0.
+  19    CM  Shows the result of the last load operation with the D-cache
+            isolated. It gets set if the cache really contained data
+            for the addressed memory location.
+  20    PE  Cache parity error (Does not cause exception)
+  21    TS  TLB shutdown. Gets set if a programm address simultaneously
+            matches 2 TLB entries.
+            (initial value on reset allows to detect extended CPU version?)
+  22    BEV Boot exception vectors in RAM/ROM (0=RAM/KSEG0, 1=ROM/KSEG1)
+  23-24 -   Not used (zero)
+  25    RE  Reverse endianness   (0=Normal endianness, 1=Reverse endianness)
+              Reverses the byte order in which data is stored in
+              memory. (lo-hi -> hi-lo)
+              (Affects only user mode, not kernel mode) (?)
+              (The bit doesn't exist in PSX ?)
+  26-27 -   Not used (zero)
+  28    CU0 COP0 Enable (0=Enable only in Kernel Mode, 1=Kernel and User Mode)
+  29    CU1 COP1 Enable (0=Disable, 1=Enable) (none in PSX)
+  30    CU2 COP2 Enable (0=Disable, 1=Enable) (GTE in PSX)
+  31    CU3 COP3 Enable (0=Disable, 1=Enable) (none in PSX)
+
+

cop0r14 - EPC - Return Address from Trap (R)

+

  0-31  Return Address from Exception
+
+This register points to the address at which an exception occured, unless BD in CAUSE is set, in which case EPC is set to the address of the exception - 4.
+Interrupts should always return to EPC+0, no matter of the BD flag. That way, +if BD=1, the branch gets executed again, that's required because EPC stores +only the current program counter, but not additionally the branch destination +address.
+Other exceptions may require to handle BD. In simple cases, when BD=0, the +exception handler may return to EPC+0 (retry execution of the opcode), or to +EPC+4 (skip the opcode that caused the exception). Note that jumps to faulty +memory locations are executed without exception, but will trigger address +errors and bus errors at the target location, ie. EPC (and BadVAddr, in case of +address errors) point to the faulty address, not to the opcode that has jumped +to that address).

+

Interrupts vs GTE Commands

+

If an interrupt occurs "on" a GTE command (cop2cmd), then the GTE command is +executed, but nethertheless, the return address in EPC points to the GTE +command. So, if the exeception handler would return to EPC as usually, then the +GTE command would be executed twice. In best case, this would be a waste of +clock cycles, in worst case it may lead to faulty result (if the results from +the 1st execution are re-used as incoming parameters in the 2nd execution). To +fix the problem, the exception handler must do:
+

  if (cause AND 7Ch)=00h                ;if excode=interrupt
+   if ([epc] AND FE000000h)=4A000000h   ;and opcode=cop2cmd
+    epc=epc+4                           ;then skip that opcode
+
+Note: The above exception handling is working only in newer PSX BIOSes, but in +very old PSX BIOSes, it is only incompletely implemented (see "BIOS Patches" +chapter for common workarounds; or write your own exception handler without +using the BIOS).
+Of course, the above exeption handling won't work in branch delays (where BD +gets set to indicate that EPC was modified) (best workaround is not to use GTE +commands in branch delays).
+Several games are known to rely on this, notably including the Crash Bandicoot trilogy, +Jinx and Spyro the Dragon, all of which will render broken geometry +if running on an emulator which doesn't emulate this, +or if the installed interrupt service routine doesn't account for it.

+

cop0cmd=10h - RFE opcode - Prepare Return from Exception

+

The RFE opcode moves some bits in cop0r12 (SR): bit2-3 are copied to bit0-1, +and bit4-5 are copied to bit2-3, all other bits (including bit4-5) are left +unchanged.
+The RFE opcode does NOT automatically jump to EPC. Instead, the exception +handler must copy EPC into a register (usually R26 aka K0), and then jump to +that address. Because of branch delays, that would look like so:
+

  mov  k0,epc  ;get return address
+  push k0      ;save epc in memory (if you expect nested exceptions)
+  ...          ;whatever (ie. process CAUSE)
+  pop  k0      ;restore from memory (if you expect nested exceptions)
+  jmp  k0      ;jump to K0 (after executing the next opcode)
+  +rfe         ;move SR bit4/5 --> bit2/3 --> bit0/1
+
+If you expect exceptions to be nested deeply, also push/pop SR. Note that +there's no way to leave all registers intact (ie. above code destroys K0).

+

cop0r8 - BadVaddr - Bad Virtual Address (R)

+

Contains the address whose reference caused an exception. Set on any MMU type +of exceptions, on references outside of kuseg (in User mode) and on any +misaligned reference. BadVaddr is updated ONLY by Address errors (Excode 04h +and 05h), all other exceptions (including bus errors) leave BadVaddr unchanged.

+

Exception Vectors (depending on BEV bit in SR register)

+

  Exception     BEV=0         BEV=1
+  Reset         BFC00000h     BFC00000h   (Reset)
+  UTLB Miss     80000000h     BFC00100h   (Virtual memory, none such in PSX)
+  COP0 Break    80000040h     BFC00140h   (Debug Break)
+  General       80000080h     BFC00180h   (General Interrupts & Exceptions)
+
+Note: Changing vectors at 800000xxh (kseg0) seems to be automatically reflected +to the instruction cache without needing to flush cache (at least it worked +SOMETIMES in my test proggy... but NOT always? ...anyways, it'd be highly +recommended to flush cache when changing any opcodes), whilst changing mirrors +at 000000xxh (kuseg) seems to require to flush cache.
+The PSX uses only the BEV=0 vectors (aside from the reset vector, the PSX BIOS +ROM doesn't contain any of the BEV=1 vectors).

+

Exception Priority

+
  Reset At any time (highest)            ;-reset
+  AdEL Memory (Load instruction)         ;\
+  AdES Memory (Store instruction)        ; memory (data load/store)
+  DBE  Memory (Load or store)            ;/
+  MOD  ALU (Data TLB)                    ;\
+  TLBL ALU (DTLB Miss)                   ; none such
+  TLBS ALU (DTLB Miss)                   ;/
+  Ovf  ALU                               ;-overflow
+  Int  ALU                               ;-interrupt
+  Sys  RD (Instruction Decode)           ;\
+  Bp   RD (Instruction Decode)           ;
+  RI   RD (Instruction Decode)           ;
+  CpU  RD (Instruction Decode)           ;/
+  TLBL I-Fetch (ITLB Miss)               ;-none such
+  AdEL IVA (Instruction Virtual Address) ;\memory (opcode fetch)
+  IBE  RD (end of I-Fetch, lowest)       ;/
+
+

COP0 - Misc

+

cop0r15 - PRID - Processor ID (R)

+

  0-7   Revision
+  8-15  Implementation
+  16-31 Not used
+
+For a Playstation with CXD8606CQ CPU, the PRID value is 00000002h.
+Unknown if/which other Playstation CPU versions have other values...?

+

cop0r6 - JUMPDEST - Randomly memorized jump address (R)

+

The is a rather strange totally useless register. After certain exceptions, the +CPU does memorize a jump destination address in the register. Once when it has +memorized an address, the register becomes locked, and the memorized value +won't change until it becomes unlocked by a new exception. Exceptions that do +unlock the register are Reset and Interrupts (cause.bit10). Exceptions that do +NOT unlock the register are syscall/break opcodes, and software generated +interrupts (eg. cause.bit8).
+In the unlocked state, the CPU does more or less randomly memorize one of the +next some jump destinations - eg. the destination from the second jump after +reset, or from a jump that occured immediately before executing the IRQ +handler, or from a jump inside of the IRQ handler, or even from a later jump +that occurs shortly after returning from the IRQ handler.
+The register seems to be read-only (although the Kernel initialization code +writes 0 to it for whatever reason).

+

cop0r0..r2, cop0r4, cop0r10, cop0r32..r63 - N/A

+

Registers 0,1,2,4,10 control virtual memory on some MIPS processors (but +there's none such in the PSX), and Registers 32..63 (aka "control registers") +aren't used in any MIPS processors. Trying to read any of these registers +causes a Reserved Instruction Exception (excode=0Ah).

+

cop0cmd=01h,02h,06h,08h - TLBR,TLBWI,TLBWR,TLBP

+

The PSX supports only one cop0cmd (cop0cmd=10h aka RFE). Trying to execute the +TLBxx opcodes causes a Reserved Instruction Exception (excode=0Ah).

+

jf/jt cop0flg,dest - conditional cop0 jumps

+

mov [mem],cop0reg / mov cop0reg,[mem] - coprocessor cop0 load/store

+

Not supported by the CPU. Trying to execute these opcodes causes a Coprocessor +Unusable Exception (excode=0Bh, ie. unlike above, not 0Ah).

+

cop0r16-r31 - Garbage

+

Trying to read these registers returns garbage (but does not trigger an +exception). When reading one of the garbage registers shortly after reading a +valid cop0 register, the garbage value is usually the same as that of the valid +register. When doing the read later on, the return value is usually 00000020h, +or when reading much later it returns 00000040h, or even 00000100h. No idea +what is causing that effect...?
+Note: The garbage registers can be accessed (without causing an exception) even +in "User mode with cop0 disabled" (SR.Bit1=1 and SR.Bit28=0); accessing any +other existing cop0 registers (or executing the rfe opcode) in that state is +causing Coprocessor Unusable Exceptions (excode=0Bh).

+

COP0 - Debug Registers

+

The COP0 debug registers seem to be PSX specific, normal R30xx CPUs like IDT's +R3041 and R3051 don't have anything similar.

+

cop0r7 - DCIC - Breakpoint control (R/W)

+

  0      Automatically set by hardware upon Any break            (R/W)
+  1      Automatically set by hardware upon BPC Code break       (R/W)
+  2      Automatically set by hardware upon BDA Data break       (R/W)
+  3      Automatically set by hardware upon BDA Data-Read break  (R/W)
+  4      Automatically set by hardware upon BDA Data-Write break (R/W)
+  5      Automatically set by hardware upon any-jump break       (R/W)
+  6-11   Not used (always zero)
+  12-13  Jump Redirection (0=Disable, 1..3=Enable) (see note)    (R/W)
+  14-15  Unknown? (R/W)
+  16-22  Not used (always zero)
+  23     Super-Master Enable 1 for bit24-29
+  24     Execution breakpoint     (0=Disabled, 1=Enabled) (see BPC, BPCM)
+  25     Data access breakpoint   (0=Disabled, 1=Enabled) (see BDA, BDAM)
+  26     Break on Data-Read       (0=No, 1=Break/when Bit25=1)
+  27     Break on Data-Write      (0=No, 1=Break/when Bit25=1)
+  28     Break on any-jump        (0=No, 1=Break on branch/jump/call/etc.)
+  29     Master Enable for bit28 (..and/or exec-break at address>=80000000h?)
+  30     Master Enable for bit24-27
+  31     Super-Master Enable 2 for bit24-29
+
+When a breakpoint address match occurs the PSX jumps to 80000040h (ie. unlike +normal exceptions, not to 80000080h). The Excode value in the CAUSE register is +set to 09h (same as BREAK opcode), and EPC contains the return address, as +usually. One of the first things to be done in the exception handler is to +disable breakpoints (eg. if the any-jump break is enabled, then it must be +disabled BEFORE jumping from 80000040h to the actual exception handler).

+

cop0r7.bit12-13 - Jump Redirection Note

+

If one or both of these bits are nonzero, then the PSX seems to check for the +following opcode sequence,
+

  mov rx,[mem]   ;load rx from memory
+  ...            ;one or more opcodes that do not change rx
+  jmp/call rx    ;jump or call to rx
+
+if it does sense that sequence, then it sets PC=[00000000h], but does not store +any useful information in any cop0 registers, namely it does not store the +return address in EPC, so it's impossible to determine which opcode has caused +the exception. For the jump target address, there are 31 registers, so one +could only guess which of them contains the target value; for "POP PC" code +it'd be usually R31, but for "JMP [vector]" code it may be any register. So far +the feature seems to be more or less unusable...?

+

cop0r5 - BDA - Breakpoint on Data Access Address (R/W)

+

cop0r9 - BDAM - Breakpoint on Data Access Mask (R/W)

+

Break condition is "((addr XOR BDA) AND BDAM)=0".

+

cop0r3 - BPC - Breakpoint on Execute Address (R/W)

+

cop0r11 - BPCM - Breakpoint on Execute Mask (R/W)

+

Break condition is "((PC XOR BPC) AND BPCM)=0".

+

Note (BREAK Opcode)

+

Additionally, the BREAK opcode can be used to create further breakpoints by +patching the executable code. The BREAK opcode uses the same Excode value (09h) +in CAUSE register. However, the BREAK opcode jumps to the normal exception +handler at 80000080h (not 80000040h).

+

Note (LibCrypt)

+

The debug registers are mis-used by "Legacy of Kain: Soul Reaver" (and maybe +also other games) for storing libcrypt copy-protection related values (ie. just +as a "hidden" location for storing data, not for actual debugging purposes).
+CDROM Protection - LibCrypt

+

Note (Cheat Devices/Expansion ROMs)

+

The Expansion ROM header supports only Pre-Boot and Post-Boot vectors, but no +Mid-Boot vector. Cheat Devices are often using COP0 breaks for Mid-Boot Hooks, +either with BPC=BFC06xxxh (break address in ROM, used in older cheat +firmwares), or with BPC=80030000h (break address in RAM aka relocated GUI +entrypoint, used in later cheat firmwares). Moreover, aside from the Mid-Boot +Hook, the Xplorer cheat device is also supporting a special cheat code that +uses the COP0 break feature.

+

Note (Datasheet)

+

Note: COP0 debug registers are described in LSI's "L64360" datasheet, chapter +14. And in their LR33300/LR33310 datasheet, chapter 4.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/css/extra.css b/css/extra.css new file mode 100644 index 0000000..74ae56e --- /dev/null +++ b/css/extra.css @@ -0,0 +1,14 @@ +@media print { + .md-typeset { + font-size: 1rem !important; + font-family: Verdana, Arial, Helvetica, sans-serif; + } + .md-typeset code { + font-size: 1em !important; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace !important; + } +} + +.md-typeset table { + white-space: nowrap; +} diff --git a/dmachannels/index.html b/dmachannels/index.html new file mode 100644 index 0000000..a827bbe --- /dev/null +++ b/dmachannels/index.html @@ -0,0 +1,1190 @@ + + + + + + + + + + + + + + + + + + + + + + + + DMA Channels - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

DMA Channels

+

DMA Register Summary

+

  1F80108xh DMA0 channel 0  MDECin  (RAM to MDEC)
+  1F80109xh DMA1 channel 1  MDECout (MDEC to RAM)
+  1F8010Axh DMA2 channel 2  GPU (lists + image data)
+  1F8010Bxh DMA3 channel 3  CDROM   (CDROM to RAM)
+  1F8010Cxh DMA4 channel 4  SPU
+  1F8010Dxh DMA5 channel 5  PIO (Expansion Port)
+  1F8010Exh DMA6 channel 6  OTC (reverse clear OT) (GPU related)
+  1F8010F0h DPCR - DMA Control register
+  1F8010F4h DICR - DMA Interrupt register
+
+These ports control DMA at the CPU-side. In most cases, you'll additionally +need to initialize an address (and transfer direction, transfer enabled, etc.) +at the remote-side (eg. at the GPU-side for DMA2).

+

1F801080h+N*10h - D#_MADR - DMA base address (Channel 0..6) (R/W)

+

  0-23  Memory Address where the DMA will start reading from/writing to
+  24-31 Not used (always zero)
+
+In SyncMode=0, the hardware doesn't update the MADR registers (it will contain +the start address even during and after the transfer) (unless Chopping is +enabled, in that case it does update MADR, same does probably also happen when +getting interrupted by a higher priority DMA channel).
+In SyncMode=1 and SyncMode=2, the hardware does update MADR (it will contain +the start address of the currently transferred block; at transfer end, it'll +hold the end-address in SyncMode=1, or the end marker in SyncMode=2)
+Notes: Address bits 0-1 are writeable, but any updated current/end addresses are +word-aligned with bits 0-1 forced to zero.
+The address counter wraps around when counting down from 000000h to FFFFFCh, +leading to words after wraparound not being written to RAM (as FFFFFCh is past +the default 8 MB main RAM region).

+

1F801084h+N*10h - D#_BCR - DMA Block Control (Channel 0..6) (R/W)

+

For SyncMode=0 (ie. for OTC and CDROM):
+

  0-15  BC    Number of words (0001h..FFFFh) (or 0=10000h words)
+  16-31 0     Not used (usually 0 for OTC, or 1 ("one block") for CDROM)
+
+For SyncMode=1 (ie. for MDEC, SPU, and GPU-vram-data):
+
  0-15  BS    Blocksize (words) ;for GPU/SPU max 10h, for MDEC max 20h
+  16-31 BA    Amount of blocks  ;ie. total length = BS*BA words
+
+For SyncMode=2 (ie. for GPU-command-lists):
+
  0-31  0     Not used (should be zero) (transfer ends at END-CODE in list)
+
+BC/BS/BA can be in range 0001h..FFFFh (or 0=10000h). For BS, take care not to +set the blocksize larger than the buffer of the corresponding unit can hold. +(GPU and SPU both have a 16-word buffer). A larger blocksize means faster +transfer.
+SyncMode=1 decrements BA to zero, SyncMode=0 with chopping enabled decrements +BC to zero (aside from that two cases, D#_BCR isn't changed during/after +transfer).

+

1F801088h+N*10h - D#_CHCR - DMA Channel Control (Channel 0..6) (R/W)

+

  0     Transfer direction (0=device to RAM, 1=RAM to device)
+  1     MADR increment per step (0=+4, 1=-4)
+  2-7   Unused
+  8     When 1:
+        -Burst mode: enable "chopping" (cycle stealing by CPU)
+        -Slice mode: Causes DMA to hang
+        -Linked-list mode: Transfer header before data?
+  9-10  Transfer mode (SyncMode)
+        0=Burst (transfer data all at once after DREQ is first asserted)
+        1=Slice (split data into blocks, transfer next block whenever DREQ is asserted)
+        2=Linked-list mode
+        3=Reserved
+  11-15 Unused
+  16-18 Chopping DMA window size (1 << N words)
+  19    Unused
+  20-22 Chopping CPU window size (1 << N cycles)
+  23    Unused
+  24    Start transfer (0=stopped/completed, 1=start/busy)
+  25-27 Unused
+  28    Force transfer start without waiting for DREQ
+  29    In forced-burst mode, pauses transfer while set.
+        In other modes, stops bit 28 from being cleared after a slice is transferred.
+        No effect when transfer was caused by a DREQ.
+  30    Perform bus snooping (allows DMA to read from -nonexistent- cache?)
+  31    Unused
+
+Bit 28 is automatically cleared upon BEGIN of the transfer, this bit needs to be +set only in SyncMode=0 (setting it in other SyncModes would force the first +block to be transferred instantly without DREQ, which isn't desired).
+Bit 24 is automatically cleared upon COMPLETION of the transfer, this bit must +be always set for all SyncModes when starting a transfer.
+For DMA6/OTC there are some restrictions, D6_CHCR has only three +read/write-able bits: 24,28,30. All other bits are read-only: bit 1 is always +1 (increment=-4), and the other bits are always 0.

+

1F8010F0h - DPCR - DMA Control Register (R/W)

+

  0-2   DMA0, MDECin  Priority      (0..7; 0=Highest, 7=Lowest)
+  3     DMA0, MDECin  Master Enable (0=Disable, 1=Enable)
+  4-6   DMA1, MDECout Priority      (0..7; 0=Highest, 7=Lowest)
+  7     DMA1, MDECout Master Enable (0=Disable, 1=Enable)
+  8-10  DMA2, GPU     Priority      (0..7; 0=Highest, 7=Lowest)
+  11    DMA2, GPU     Master Enable (0=Disable, 1=Enable)
+  12-14 DMA3, CDROM   Priority      (0..7; 0=Highest, 7=Lowest)
+  15    DMA3, CDROM   Master Enable (0=Disable, 1=Enable)
+  16-18 DMA4, SPU     Priority      (0..7; 0=Highest, 7=Lowest)
+  19    DMA4, SPU     Master Enable (0=Disable, 1=Enable)
+  20-22 DMA5, PIO     Priority      (0..7; 0=Highest, 7=Lowest)
+  23    DMA5, PIO     Master Enable (0=Disable, 1=Enable)
+  24-26 DMA6, OTC     Priority      (0..7; 0=Highest, 7=Lowest)
+  27    DMA6, OTC     Master Enable (0=Disable, 1=Enable)
+  28-30 CPU memory access priority  (0..7; 0=Highest, 7=Lowest)
+  31    No effect, should be CPU memory access enable (R/W)
+
+Initial value on reset is 07654321h. If two or more channels have the same +priority setting, then the priority is determined by the channel number +(DMA0=Lowest, DMA6=Highest, CPU=higher than DMA6?).

+

1F8010F4h - DICR - DMA Interrupt Register (R/W)

+

  0-6   Controls channel 0-6 completion interrupts in bits 24-30.
+        When 0, an interrupt only occurs when the entire transfer completes.
+        When 1, interrupts can occur for every slice and linked-list transfer.
+        No effect if the interrupt is masked by bits 16-22.
+  7-14  Unused
+  15    Bus error flag. Raised when transferring to/from an address outside of RAM. Forces bit 31. (R/W)
+  16-22 Channel 0-6 interrupt mask. If enabled, channels cause interrupts as per bits 0-6.
+  23    Master channel interrupt enable.
+  24-30 Channel 0-6 interrupt flags. (R, write 1 to reset)
+  31    Master interrupt flag (R)
+
+IRQ flags in bit (24+n) are set upon DMAn completion - but caution - they are +set ONLY if enabled in bit (16+n) (unlike interrupt flags in I_STAT, which are +always set regardless of whether the respective IRQ is masked).
+Bit 31 is a simple readonly flag that follows the following rules:
+
  IF b15=1 OR (b23=1 AND (b16-22 AND b24-30)>0) THEN b31=1 ELSE b31=0
+
+Upon 0-to-1 transition of Bit 31, the IRQ3 flag in I_STAT gets set.
+Bits 24-30 are acknowledged (reset to zero) when writing a "1" to that bits (and +additionally, IRQ3 must be acknowledged via I_STAT).

+

1F8010F8h (usually 7FFAC68Bh? or 0BFAC688h)

+
    (changes to 7FE358D1h after DMA transfer)
+
+

1F8010FCh (usually 00FFFFF7h) (...maybe OTC fill-value)

+

    (stays so even after DMA transfer)
+
+Contains strange read-only values (but not the usual "Garbage").
+Not yet tested during transfer, might be remaining length and address?

+

Commonly used DMA Control Register values for starting DMA transfers

+

  DMA0 MDEC.IN  01000201h (always)
+  DMA1 MDEC.OUT 01000200h (always)
+  DMA2 GPU      01000200h (VramRead), 01000201h (VramWrite), 01000401h (List)
+  DMA3 CDROM    11000000h (normal), 11400100h (chopped, rarely used)
+  DMA4 SPU      01000201h (write), 01000200h (read, rarely used)
+  DMA5 PIO      11150100h (System 573 ATAPI read), ? (System 573 ATAPI write)
+  DMA6 OTC      11000002h (always)
+
+XXX: DMA2 values 01000201h (VramWrite), 01000401h (List) aren't 100% confirmed +to be used by ALL existing games. All other values are always used as listed +above.

+

Linked List DMA

+

GPU commands are usually sent from RAM to GP0 using DMA2 in linked list mode. In +this mode, the DMA controller transfers words in "nodes", with the first node +starting in the address indicated by D2_MADR.
+Each node is composed of a header word (the very first word in the node) and +some extra words to be DMA'd before moving on to the next node. The node header +is formatted like this:

+
  0-23  Address of the next node (or end marker)
+  24-31 Number of extra words to transfer for this node
+
+

The transfer is stopped once an end marker is reached. On some (earlier?) CPU +revisions any address with bit 23 set will be interpreted as an end marker, +while on other revisions all bits must be set (i.e. the address must be FFFFFF). +This change was probably necessary as later CPU versions added support for up to +16 MB RAM addressing, which made addresses in the 800000-FFFFFC range valid.

+

DMA Transfer Rates

+

  DMA0 MDEC.IN     1 clk/word   ;0110h clks per 100h words ;\plus whatever
+  DMA1 MDEC.OUT    1 clk/word   ;0110h clks per 100h words ;/decompression time
+  DMA2 GPU         1 clk/word   ;0110h clks per 100h words ;-plus ...
+  DMA3 CDROM/BIOS  24 clks/word ;1800h clks per 100h words ;\plus single/double
+  DMA3 CDROM/GAMES 40 clks/word ;2800h clks per 100h words ;/speed sector rate
+  DMA4 SPU         4 clks/word  ;0420h clks per 100h words ;-plus ...
+  DMA5 PIO         20 clks/word ;1400h clks per 100h words ;-not actually used
+  DMA6 OTC         1 clk/word   ;0110h clks per 100h words ;-plus nothing
+
+MDEC decompression time is still unknown (may vary on RLE and color/mono).
+GPU polygon rendering time is unknown (may be quite slow for large polys).
+GPU vram read/write time is unknown (may vary on horizontal screen resolution).
+CDROM BIOS default is 24 clks, for some reason most games change it to 40 clks.
+SPU transfer is unknown (may have some extra delays).
+XXX is SPU really only 4 clks (theoretically SPU access should be slower)?
+PIO is only used on some arcade systems (and configured with different timings).
+OTC is just writing to RAM without extra overload.
+CDROM/SPU/PIO timings can be configured via Memory Control registers.

+

DRAM Hyper Page mode

+

DMA is using DRAM Hyper Page mode, allowing it to access DRAM rows at 1 clock +cycle per word (effectively around 17 clks per 16 words, due to required row +address loading, probably plus some further minimal overload due to refresh +cycles). This is making DMA much faster than CPU memory accesses (CPU DRAM +access takes 1 opcode cycle plus 6 waitstates, ie. 7 cycles in total)

+

CPU Operation during DMA

+

CPU is running during DMA within very strict rules. It can be kept running when +accessing only cache, scratchpad, COP0 and GTE.
+It can also make use of the 4 entry Write queue for both RAM and I/O registers, +see:
+Write queue
+Any read access from RAM or I/O registers or filling more than 4 entries into +the write queue will stall the CPU until the DMA is finished.
+Additionally, the CPU operation resumes during periods when DMA gets interrupted +(ie. after SyncMode 1 blocks, after SyncMode 2 list entries) (or in SyncMode 0 +with Chopping enabled).

+

PS2 IOP DMA

+

The PS2's IOP has an extended DMA unit with more channels, new control registers +and an additional chain mode (SyncMode=3). For more details, see:
+ps2tek - IOP DMA

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/expansionportpio/index.html b/expansionportpio/index.html new file mode 100644 index 0000000..c5e6127 --- /dev/null +++ b/expansionportpio/index.html @@ -0,0 +1,2343 @@ + + + + + + + + + + + + + + + + + + + + + + + + Expansion Port (PIO) - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Expansion Port (PIO)

+

Expansion Port can contain ROM, RAM, I/O Ports, etc. For ROM, the first 256 +bytes would contain the expansion ROM header.

+

For region 1, the CPU outputs a chip select signal (CPU Pin 98, /EXP).
+For region 2, the CPU doesn't produce a chip select signal (the region is +intended to contain multiple I/O ports, which require an address decoder +anyways, that address decoder could treat any /RD or /WR with A13=Hi and A23=Hi +and A22=Lo as access to expansion region 2 (for /WR, A22 may be ignored; +assuming that the BIOS is read-only).

+

Size/Bus-Width

+

The BIOS initalizes Expansion Region 1 to 512Kbyte with 8bit bus, and Region 2 +to 128 bytes with 8bit bus. However, the size and data bus-width of these +regions can be changed, see:
+Memory Control
+For Region 1, 32bit reads are supported even in 8bit mode (eg. 32bit opcode +fetches are automatically processed as four 8bit reads).
+For Region 2, only 8bit access seems to be supported (except that probably +16bit mode allows 16bit access), anyways, larger accesses seem to cause +exceptions... not sure if that can be disabled...?

+

Expansion 1 - EXP1 - Intended to contain ROM

+

EXP1 Expansion ROM Header

+

Expansion 2 - EXP2 - Intended to contain I/O Ports

+

EXP2 Dual Serial Port (for TTY Debug Terminal)
+EXP2 DTL-H2000 I/O Ports
+EXP2 Post Registers
+EXP2 Nocash Emulation Expansion

+

Expansion 3 - EXP3 - Intended to contain RAM

+

Not used by BIOS nor by any games. Seems to contain 1Mbyte RAM with 16bit +databus (ie. 512Kx16) in DTL-H2000.

+

Other Expansions

+

Aside from the above, the Expansion regions can be used for whatever purpose, +however, mind that the BIOS is reading from the ROM header region, and is +writing to the POST register (so 1F000000h-1F0000FFh and 1F802041h should be +used only if the hardware isn't disturbed by those accesses).
+Most arcade boards have their custom I/O registers (and sometimes game ROMs) +mapped into the EXP1 and/or EXP2 regions.

+

Missing Expansion Port

+

The expansion port is installed only on older PSX boards, newer PSX boards and +all PSone boards don't have that port. However, the CPU should still output all +expansion signals, and there should be big soldering points on the board, so +it'd be easy to upgrade the console.

+

Latched Address Bus

+

Note that A0..A23 are latched outputs, so they can be used as general purpuse +24bit outputs, provided that the system bus isn't used for other purposes (such +like /BIOS, /SPU, /CD accesses) (A0..A23 are not affected by Main RAM and GPU +addressing, nor by internal I/O ports like Timer and IRQ registers).

+

EXP1 Expansion ROM Header

+

Expansion 1 - ROM Header (accessed with 8bit databus setting)

+

  Address  Size Content
+  1F000000h 4   Post-Boot Entrypoint (eg. 1F000100h and up)
+  1F000004h 2Ch Post-Boot ID ("Licensed by Sony Computer Entertainment Inc.")
+  1F000030h 50h Post-Boot TTY Message (must contain at least one 00h byte)
+  1F000080h 4   Pre-Boot Entrypoint  (eg. 1F000100h and up)
+  1F000084h 2Ch Pre-Boot ID  ("Licensed by Sony Computer Entertainment Inc.")
+  1F0000B0h 50h Not used     (should be zero, but may contain code/data/io)
+  1F000100h ..  Code, Data, I/O Ports, etc.
+
+The entrypoints are called if their corresonding ID strings are present, return +address to BIOS is passed in R31, so the expansion ROM may return control to +BIOS, if that should be desired.
+Aside from verifying the IDs, the BIOS will also display the Post-Boot ID +string (and the following message string) via TTY (done right before calling +the Post-Boot Entrypoint).

+

Pre-Boot Function

+

The Pre-Boot function is called almost immediately after Reset, with only some +Memory Control registers initialized, the BIOS function vectors at A0h, B0h, +and C0h are NOT yet initialized, so the Pre-Boot function can't use them.

+

Post-Boot Function

+

The Post-Boot function gets called while showing the "PS" logo, but before +loading the .EXE file. The BIOS function vectors at A0h, B0h, and C0h are +already installed and can be used by the Post-Boot Function.
+Note that the Post-Boot Function is called ONLY when the "PS" logo is shown +(ie. not if the CDROM drive is empty, or if it contains an Audio CD).

+

Mid-Boot Hook

+

One common trick to hook the Kernel after BIOS initialization, but before CDROM +loading is to use the Pre-Boot handler to set a COP0 opcode fetch hardware +breakpoint at 80030000h (after returning from the Pre-Boot handler, the Kernel +will initialize important things like A0h/B0h/C0h tables, and will then break +again when starting the GUI code at 80030000h) (this trick is used by Action +Replay v2.0 and up).

+

Note

+

Expansion ROMs are most commonly used in cheat devices,
+Cheat Devices

+

EXP2 Dual Serial Port (for TTY Debug Terminal)

+

SCN2681 Dual Asynchronous Receiver/Transmitter (DUART)

+

The PSX/PSone retail BIOS contains some TTY Debug Terminal code; using an +external SCN2681 chip which can be connected to the expansion port.
+Whilst supported by all PSX/PSone retail BIOSes on software side, there aren't +any known PSX consoles/devboards/expansions actually containing DUARTs on +hardware side.

+

1F802023h/Read - RHRA - DUART Rx Holding Register A (FIFO) (R)

+

1F80202Bh/Read - RHRB - DUART Rx Holding Register B (FIFO) (R)

+

1F802023h/Write - THRA - DUART Tx Holding Register A (W)

+

1F80202Bh/Write - THRB - DUART Tx Holding Register B (W)

+

  7-0  Data (aka Character)
+
+The hardware can hold max 2 Tx characters per channel (1 in the THR register, +and one currently processed in the Tx Shift Register), and max 4 Rx characters +(3 in the RHR FIFO, plus one in the Rx Shift Register) (when receiving a 5th +character, the "old newest" value in the Rx Shift Register is lost, and the +overrun flag is set).

+

1F802020h/FirstAccess - MR1A - DUART Mode Register 1.A (R/W)

+

1F802028h/FirstAccess - MR1B - DUART Mode Register 1.B (R/W)

+

  7    RxRTS Control       (0=No, 1=Yes)
+  6    RxINT Select        (0=RxRDY, 1=FFULL)
+  5    Error Mode          (0=Char, 1=Block)
+  4-3  Parity Mode   (0=With Parity, 1=Force Parity, 2=No Parity, 3=Multidrop)
+  2    Parity Type         (0=Even, 1=Odd)
+  1-0  Bits per Character  (0=5bit, 1=6bit, 2=7bit, 3=8bit)
+
+Note: In block error mode, block error conditions must be cleared by using the +error reset command (command 4) or a receiver reset (command 2).

+

1F802020h/SecondAccess - MR2A - DUART Mode Register 2.A (R/W)

+

1F802028h/SecondAccess - MR2B - DUART Mode Register 2.B (R/W)

+

  7-6  Channel Mode       (0=Normal, 1=Auto-Echo, 2=Local loop, 3=Remote loop)
+  5    TxRTS Control      (0=No, 1=Yes) (when 1 --> OP0=RTSA / OP1=RTSB)
+  4    CTS Enable         (0=No, 1=Yes) (when 1 --> IP0=CTSA / IP1=CTSB)
+  3-0  Tx Stop Bit Length (00h..0Fh = see below)
+
+Stop Bit Lengths:
+
  0=0.563  1=0.625  2=0.688  3=0.750  4=0.813  5=0.875  6=0.938  7=1.000
+  8=1.563  9=1.625  A=1.688  B=1.750  C=1.813  D=1.875  E=1.938  F=2.000
+
+Add 0.5 to values shown for 0..7 if channel is programmed for 5 bits/char.

+

1F802021h/Write - CSRA - DUART Clock Select Register A (W)

+

1F802029h/Write - CSRB - DUART Clock Select Register B (W)

+

  7-4  Rx Clock Select  (0..0Ch=See Table, 0Dh=Timer, 0Eh=16xIP, 0Fh=1xIP)
+  3-0  Tx Clock Select  (0..0Ch=See Table, 0Dh=Timer, 0Eh=16xIP, 0Fh=1xIP)
+
+The 2681 has some sets of predefined baud rates (set1/set2 selected via ACR.7), +additionally, in BRG Test Mode, set3/set4 are used instead of set1/set2), the +baud rates for selections 00h..0Dh are:
+
  Rate 00h  01h 02h   03h   04h   05h   06h    07h  08h   09h  0Ah   0Bh  0Ch
+  Set1 50   110 134.5 200   300   600   1200   1050 2400  4800 7200  9600 38400
+  Set2 75   110 134.5 150   300   600   1200   2000 2400  4800 1800  9600 19200
+  Set3 4800 880 1076  19200 28800 57600 115200 1050 57600 4800 57600 9600 38400
+  Set4 7200 880 1076  14400 28800 57600 115200 2000 57600 4800 14400 9600 19200
+
+Selection 0Eh/0Fh are using an external clock source (derived from +IP3,IP4,IP5,IP6 pins; for TxA,RxA,TxB,RxB respectively).

+

1F802022h/Write - CRA - DUART Command Register A (W)

+

1F80202Ah/Write - CRB - DUART Command Register B (W)

+

  7    Not used    (should be 0)
+  6-4  Miscellaneous Commands (0..7 = see below)
+  3    Disable Tx  (0=No change, 1=Disable)
+  2    Enable Tx   (0=No change, 1=Enable) ;Don't use with Command 3 (Reset Rx)
+  1    Disable Rx  (0=No change, 1=Disable)
+  0    Enable Rx   (0=No change, 1=Enable) ;Don't use with Command 2 (Reset Tx)
+
+The command values for CRA (or CRB) are:
+
  0 No command          ;no effect
+  1 Reset MR pointer    ;force "FirstAccess" state for MR1A (or MR1B) access
+  2 Reset receiver      ;reset RxA (or RxB) registers, disable Rx, flush Fifo
+  3 Reset transmitter   ;reset TxA (or TxB) registers
+  4 Reset Error Flags           ;reset SRA.7-4 (or SRB.7-4) to zero
+  5 Reset Break-Change IRQ Flag ;reset ISR.2 (or ISR.6) to zero
+  6 Start break  ;after current char, pause Tx with TxDA=Low (or TxDB=Low)
+  7 Stop break   ;output one High bit, then continue Tx (ie. undo pause)
+
+Access to the upper four bits of the command register should be separated by 3 +edges of the X1 clock. A disabled transmitter cannot be loaded.

+

1F802025h/Read - ISR - DUART Interrupt Status Register (R)

+

1F802025h/Write - IMR - DUART Interrupt Mask Register (W)

+
  7    Input Port Change   (0=No, 1=Yes) (Ack via reading IPCR) ;see ACR.3-0
+  6    Break Change B      (0=No, 1=Yes) (Ack via CRB/Command5)
+  5    RxRDYB/FFULLB       (0=No, 1=Yes) (Ack via reading data) ;see MR1B.6
+  4    THRB Empty (TxRDYB) (0=No, 1=Yes) (Ack via writing data) ;same as SRB.2
+  3    Counter Ready       (0=No, 1=Yes) (Ack via CT_STOP)
+  2    Break Change A      (0=No, 1=Yes) (Ack via CRA/Command5)
+  1    RxRDYA/FFULLA       (0=No, 1=Yes) (Ack via reading data) ;see MR1A.6
+  0    THRA Empty (TxRDYA) (0=No, 1=Yes) (Ack via writing data) ;same as SRA.2
+
+

1F802021h/Read - SRA - DUART Status Register A (R)

+

1F802029h/Read - SRB - DUART Status Register B (R)

+

  7    Rx Received Break*        (0=No, 1=Yes) ;received 00h without stop bit
+  6    Rx Framing Error*         (0=No, 1=Yes) ;received data without stop bit
+  5    Rx Parity Error*          (0=No, 1=Yes) ;received data with bad parity
+  4    Rx Overrun Error          (0=No, 1=Yes) ;Rx FIFO full + RxShiftReg full
+  3    Tx Underrun  (TxEMT)      (0=No, 1=Yes) ;both TxShiftReg and THR empty
+  2    Tx THR Empty (TxRDY)      (0=No, 1=Yes) ;same as ISR.0 / ISR.4
+  1    Rx FIFO Full (FFULL)      (0=No, 1=Yes) ;set upon 3 or more characters
+  0    Rx FIFO Not Empty (RxRDY) (0=No, 1=Yes) ;set upon 1 or more characters
+
+Bit7-5 are appended to the corresponding data character in the receive FIFO. A +read of the status provides these bits (7:5) from the top of the FIFO together +with bits (4:0). These bits are cleared by a "reset error status" command. In +character mode they are discarded when the corresponding data character is read +from the FIFO. In block error mode, block error conditions must be cleared by +using the error reset command (command 4x) or a receiver reset.

+

1F802024h/Write - ACR - DUART Aux. Control Register (W)

+

  7    Select Baud Rate Generator (BRG) Set   (0=Set1/Set3, 1=Set2/Set4)
+  6-4  Counter/Timer Mode and Source          (see below)
+  3-0  IP3..IP0 Change Interrupt Enable Flags (0=Off, 1=On)
+
+Counter/Timer Mode and Clock Source Settings:
+
  Num  Mode      Clock Source
+  0h   Counter   External (IP2)
+  1h   Counter   TxCA - 1x clock of Channel A transmitter
+  2h   Counter   TxCB - 1x clock of Channel B transmitter
+  3h   Counter   Crystal or external clock (x1/CLK) divided by 16
+  4h   Timer     External (IP2)
+  5h   Timer     External (IP2) divided by 16
+  6h   Timer     Crystal or external clock (x1/CLK)
+  7h   Timer     Crystal or external clock (x1/CLK) divided by 16
+
+In Counter Mode, the Counter Ready flag is set on any underflow, and the +counter wraps to FFFFh and keeps running (but may get stopped by software).
+In Timer Mode, automatic reload occurs on any underflow, the counter flag +(which can be output to OP3) is toggled on any underflow, but the Counter Ready +flag is set only on each 2nd underflow (unlike as in Counter mode).

+

1F802024h/Read - IPCR - DUART Input Port Change Register (R)

+

  7-4  IP3..IP0 Change Occured Flags (0=No, 1=Yes)    ;auto reset after read
+  3-0  Current IP3-IP0 Input states  (0=Low, 1=High)  ;Same as IP.3-0
+
+Reading from this register automatically resets IPCR.7-4 and ISR.7.

+

1F80202Dh/Read - IP - DUART Input Port (R)

+

  7    Not used (always 1)
+  6-0  Current IP6-IP0 Input states (0=Low, 1=High)  ;LSBs = Same as IPCR.3-0
+
+IP0-6 can be used as general purpose inputs, or for following special purposes:
+
  IP6 External RxB Clock     ;see CSRB.7-4
+  IP5 External TxB Clock     ;see CSRB.3-0
+  IP4 External RxA Clock     ;see CSRA.7-4
+  IP3 External TxA Clock     ;see CSRA.3-0
+  IP2 External Timer Input   ;see AUX.6-4
+  IP1 Clear to Send B (CTSB) ;see MR2B.5
+  IP0 Clear to Send A (CTSA) ;see MR2A.5
+
+Note: The 24pin chip doesn't have any inputs, the 28pin chip has only one input +(IP2), the 40pin/44pin chips have seven inputs (IP0-IP6).

+

1F80202Eh/Write - DUART Set Output Port Bits Command (Set means Out=LOW)

+

1F80202Fh/Write - DUART Reset Output Port Bits Command (Reset means Out=HIGH)

+

  7-0  Change "OPR" OP7-OP0 Output states (0=No change, 1=Set/Reset)
+
+Note: The 24pin chip doesn't have any outputs, the 28pin chip has only two +outputs (OP0,OP1), the 40pin/44pin chips have eight outputs (OP0-OP7).

+

1F80202Dh/Write - OPCR - DUART Output Port Configuration Register (W)

+

  7    OP7      (0=OPR.7, 1=TxRDYB)
+  6    OP6      (0=OPR.6, 1=TxRDYA)
+  5    OP5      (0=OPR.5, 1=RxRDY/FFULLB)
+  4    OP4      (0=OPR.4, 1=RxRDY/FFULLA)
+  3-2  OP3      (0=OPR.3, 1=Clock/Timer Output, 2=TxCB(1x), 3=RxCB(1x))
+  1-0  OP2      (0=OPR.2, 1=TxCA(16x), 2=TxCA(1x), 3=RxCA(1x))
+
+Additionally, the OP0 and OP1 outputs are controlled via MR2A.5 and MR2B.5.

+

1F802022h/Read - - DUART Toggle Baud Rate Generator Test Mode (Read=Strobe)

+

1F80202Ah/Read - - DUART Toggle 1X/16X Test Mode (Read=Strobe)

+

  7-0  Not used (just issue a dummy-read to toggle the test mode on/off)
+
+BGR Test switches between Baud Rate Set1/Set2 and Set3/Set4.
+1X/16X Test switches between whatever...?

+

1F80202Eh/Read - CT_START - DUART Start Counter Command (Read=Strobe)

+

1F80202Fh/Read - CT_STOP - DUART Stop Counter Command (Read=Strobe)

+

  7-0  Not used (just issue a dummy-read to strobe start/stop command)
+
+Start: Forces reload (copies CTLR/CTUR to CTL/CTU), and starts the timer.
+Stop-in-Counter-Mode: Resets ISR.3, and stops the timer.
+Stop-in-Timer-Mode: Resets ISR.3, but doesn't stop the timer.

+

1F802026h/Read - CTU - DUART Counter/Timer Current Value, Upper/Bit15-8 (R)

+

1F802027h/Read - CTL - DUART Counter/Timer Current Value, Lower/Bit7-0 (R)

+

1F802026h/Write - CTUR - DUART Counter/Timer Reload Value, Upper/Bit15-8 (W)

+

1F802027h/Write - CTLR - DUART Counter/Timer Reload Value, Lower/Bit7-0 (W)

+

The CTLR/CTUR reload value is copied to CTL/CTU upon Start Counter Command. In +Timer mode (not in Counter mode), it is additionally copied automatically when +the timer undeflows.

+

1F80202Ch - N/A - DUART Reserved Register (neither R nor W)

+

Reserved.

+

Chip versions

+

The SCN2681 is manufactured with 24..44 pins, the differences are:
+

  24pin basic cut-down version          ;without IP0-1/OP0-1 = without CTS/RTS
+  28pin additional IP2,OP0,OP1,X2       ;without IP0-1 = without CTS
+  40pin additional IP0-IP6,OP0-OP7,X2   ;full version
+  44pin same as 40pin with four NC pins ;full version (SMD)
+
+Unknown which of them is supposed to be used with the PSX?
+Note: The Motorola 68681 should be the same as the Philips/Signetics 2681.

+

Notes

+

Unknown if the Interrupt signal is connected to the PSX... there seems to be no +spare IRQ for it, though it \<might> share an IRQ with whatever other +hardware...?
+The BIOS seems to use only one of the two channels; for the std_io functions:
+BIOS TTY Console (std_io)
+Aside from the external DUART, the PSX additionally contains an internal UART,
+Serial Interfaces (SIO)
+The DTL-H2000 devboard uses a non-serial "ATCONS" channel for TTY stuff,
+EXP2 DTL-H2000 I/O Ports

+

EXP2 DTL-H2000 I/O Ports

+

The DTL-H2000 contains extended 8Mbyte Main RAM (instead of normal 2Mbyte), +plus additional 1MByte RAM in Expansion Area at 1FA00000h, plus some I/O ports +at 1F8020xxh:

+

1F802000h - DTL-H2000: EXP2: - ATCONS STAT (R)

+
  0    Unknown, used for something
+  1    Unknown/unused
+  2    Unknown, used for something
+  3    TTY/Atcons TX Ready     (0=Busy, 1=Ready)
+  4    TTY/Atcons RX Available (0=None, 1=Yes)
+  5-7  Unknown/unused
+
+

1F802002h - DTL-H2000: EXP2: - ATCONS DATA (R and W)

+

  0-7  TTY/Atcons RX/TX Data
+
+TTY channel for message output (TX) and debug console keyboard input (RX). The +DTL-H2000 is using this "ATCONS" stuff instead of the DUART stuff used in +retail console BIOSes ("CONS" seems to refer to "Console", and "AT" might refer +to PC/AT or whatever).

+

1F802004h - DTL-H2000: EXP2: - 16bit - ?

+
  0-15 Data...?
+
+

1F802030h - DTL-H2000: Secondary IRQ10 Controller (IRQ Flags)

+

This register does expand IRQ10 (Lightgun) to more than one IRQ source. The +register contains only Secondary IRQ Flags (there seem to be no Secondary IRQ +Enable bits; at least not for Lightguns).
+

  0     ... used for something
+  1    Lightgun IRQ (write: 0=No change, 1=Acknowledge) (read: 0=None, 1=IRQ)
+  2-3  Unknown/unused (write: 0=Normal)
+  4     ... acknowledged at 1FA00B04h, otherwise unused
+  5     ... TTY RX ?
+  6-7  Unknown/unused (write: 0=Normal)
+  8-31 Not used by DTL-H2000 BIOS (but Lightgun games write 0 to these bits)
+
+Retail games that support IRQ10-based "Konami" Lightguns are containing code +for detecting and accessing port 1F802030h. The detection works by examining a +value in the BIOS ROM like so:
+
  IF [BFC00104h]=00002000h then Port 1F802030h does exist     (DTL-H2000)
+  IF [BFC00104h]=00002500h then Port 1F802030h does NOT exist
+  IF [BFC00104h]=00000003h then Port 1F802030h does NOT exist (default)
+  IF [BFC00104h]= <other>  then Port 1F802030h does NOT exist
+
+Normal consoles don't include Port 1F802030h, and IRQ10 is wired directly to +the controller port, and the value at [BFC00104h] is always 00000003h. +Accordingly, one cannot upgrade the console just by plugging a Secondary IRQ10 +controller to the expansion port (instead, one would need to insert the +controller between the CPU and controller plug, and to install a BIOS with +[BFC00104h]=00002000h).
+The DTL-H2000 BIOS accesses 1F802030h with 8bit load/store opcodes, however, +the Lightgun games use 32bit load/store - which is theoretically overlapping +port 1F802032h, though maybe the memory system does ignore the upper bits.

+

1F802032h - DTL-H2000: EXP2: - maybe IRQ enable?

+
  0    Used for something (CLEARED on some occassions)
+  1-3  Unknown/unused
+  4    Used for something (SET on some occassions)
+  5-7  Unknown/unused
+
+

1F802040h - DTL-H2000: EXP2: 1-byte - DIP Switch?

+

  0-7  DIP Value (00h..FFh, but should be usually 00h..02h)
+
+This register selects the DTL-H2000 boot mode, for whatever reason it's called +"DIP Switch" register, although the DTL-H2000 boards don't seem to contain any +such DIP Switches (instead, it's probably configured via some I/O ports on PC +side). Possible values are:
+
  DIP=0 --> .. long delay before TTY?   with "PSX>" prompt, throws CDROM cmds
+  DIP=1 --> .. long delay before TTY?   no "PSX>" prompt           PSY-Q?
+  DIP=2 --> .. instant TTY?             with "PSX>" prompt
+  DIP=3 --> Lockup
+  DIP=04h..FFh --> Lockup with POST=04h..FFh
+

+

1F802042h - DTL-H2000: EXP2: POST/LED (R/W)

+

EXP2 Post Registers

+

EXP2 Post Registers

+

1F802041h - POST - External 7-segment Display (W)

+

  0-3  Current Boot Status (00h..0Fh)
+  4-7  Not used by BIOS    (always set to 0)
+
+During boot, the BIOS writes incrementing values to this register, allowing to +display the current boot status on an external 7 segment display (much the same +as Port 80h used in PC BIOSes).

+

1F802042h - DTL-H2000: EXP2: POST/LED (R/W)

+

  0-7 Post/LED value
+
+8bit wide, otherwise same as POST 1F802041h on retail consoles.

+

1F802070h - POST2 - Unknown? (W) - PS2

+

Might be a configuration port, or it's another POST register (which is used +prior to writing the normal POST bytes to 1FA00000h).
+The first write to 1F802070h is 32bit, all further writes seem to be 8bit.

+

1FA00000h - POST3 - External 7-segment Display (W) - PS2

+

Similar to POST, but PS2 BIOS uses this address.

+

EXP2 Nocash Emulation Expansion

+

1F802060h Emu-Expansion ID1 "E" (R)

+

1F802061h Emu-Expansion ID2 "X" (R)

+

1F802062h Emu-Expansion ID3 "P" (R)

+

1F802063h Emu-Expansion Version (01h) (R)

+

Contains ID and Version.

+

1F802064h Emu-Expansion Enable1 "O" (R/W)

+

1F802065h Emu-Expansion Enable2 "N" (R/W)

+

Activates the Halt and Turbo Registers (when set to "ON").

+

1F802066h Emu-Expansion Halt (R)

+

When enabled (see above), doing an 8bit read from this address stops the CPU +emulation unless/until an Interrupt occurs (when "CAUSE AND SR AND FF00h" +becomes nonzero). Can be used to reduce power consumption, and to make the +emulation faster.

+

1F802067h Emu-Expansion Turbo Mode Flags (R/W)

+

When enabled (see above), writing to this register activates/deactivates +"turbo" mode, which is causing new data to arrive immediately after +acknowledging the previous interrupt.
+

  0   CDROM Turbo       (0=Normal, 1=Turbo)
+  1   Memory Card Turbo (0=Normal, 1=Turbo)
+  2   Controller Turbo  (0=Normal, 1=Turbo)
+  3-7 Reserved (must be zero)
+

+

EXP2 PCSX-Redux Emulation Expansion

+

PCSX-Redux contains some specific hardware registers for the purpose of testing and debugging. +They are located past the 1F802080h address, which means that accessing them on the real +hardware will cause an exception, unless the 1F80101Ch register has been set to +be at least twice its normal size.

+

1F802080h 4 Redux-Expansion ID "PCSX" (R)

+

Identification string. Use this to query that your binary is running under PCSX-Redux.

+

1F802080h 1 Redux-Expansion Console putchar (W)

+

Adds this character to the console output. This is an easier way to write to the console than using the BIOS.

+

1F802081h 1 Redux-Expansion Debug break (W)

+

Causes a debug breakpoint to be triggered. PCSX-Redux will pause and the user will be alerted of a software breakpoint.

+

1F802082h 1 Redux-Expansion Exit code (W)

+

Sets the exit code for the program. When in test mode, PCSX-Redux will exit with this code.

+

1F802084h 4 Redux-Expansion Notification message pointer (W)

+

Displays a pop-up message to the user with the specified string.

+

See PCSX-Redux's documentation for more details and examples.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/geometrytransformationenginegte/index.html b/geometrytransformationenginegte/index.html new file mode 100644 index 0000000..6570e3d --- /dev/null +++ b/geometrytransformationenginegte/index.html @@ -0,0 +1,2303 @@ + + + + + + + + + + + + + + + + + + + + + + + + Geometry Transformation Engine (GTE) - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Geometry Transformation Engine (GTE)

+

GTE Overview
+GTE Registers
+GTE Saturation
+GTE Opcode Summary
+GTE Coordinate Calculation Commands
+GTE General Purpose Calculation Commands
+GTE Color Calculation Commands
+GTE Division Inaccuracy

+

GTE Overview

+

GTE Operation

+

The GTE doesn't have any memory or I/O ports mapped to the CPU memory bus, +instead, it's solely accessed via coprocessor opcodes:
+

  mov  cop0r12,rt          ;-enable/disable COP2 (GTE) via COP0 status register
+  mov  cop2r0-63,rt        ;\write parameters to GTE registers
+  mov  cop2r0-31,[rs+imm]  ;/
+  mov  cop2cmd,imm25       ;-issue GTE command
+  mov  rt,cop2r0-63        ;\read results from GTE registers
+  mov  [rs+imm],cop2r0-31  ;/
+  jt   cop2flg,dest        ;-jump never  ;\implemented (no exception), but,
+  jf   cop2flg,dest        ;-jump always ;/flag seems to be always "false"
+

+

GTE Load Delay Slots

+

Using CFC2/MFC2 has a delay of 1 instruction until the GPR is loaded with its new value. +Certain games are sensitive to this, with the notable example of Tekken 2 +which will be filled with broken geometry on emulators which don't emulate this properly.
+GTE (memory-?) load and store instructions have a delay of 2 instructions, for +any GTE commands or operations accessing that register. Any? That's wrong!
+GTE instructions and functions should not be used in
+

  - Delay slots of jumps and branches
+  - Event handlers or interrupts (sounds like nonsense?) (need push/pop though)
+
+If an instruction that reads a GTE register or a GTE command is executed before +the current GTE command is finished, the CPU will hold until the instruction +has finished. The number of cycles each GTE instruction takes is shown in the +command list.

+

GTE Command Encoding (COP2 imm25 opcodes)

+

  31-25  Must be 0100101b for "COP2 imm25" instructions
+  20-24  Fake GTE Command Number (00h..1Fh) (ignored by hardware)
+  19     sf - Shift Fraction in IR registers (0=No fraction, 1=12bit fraction)
+  17-18  MVMVA Multiply Matrix    (0=Rotation. 1=Light, 2=Color, 3=Reserved)
+  15-16  MVMVA Multiply Vector    (0=V0, 1=V1, 2=V2, 3=IR/long)
+  13-14  MVMVA Translation Vector (0=TR, 1=BK, 2=FC/Bugged, 3=None)
+  11-12  Always zero                        (ignored by hardware)
+  10     lm - Saturate IR1,IR2,IR3 result (0=To -8000h..+7FFFh, 1=To 0..+7FFFh)
+  6-9    Always zero                        (ignored by hardware)
+  0-5    Real GTE Command Number (00h..3Fh) (used by hardware)
+
+The MVMVA bits are used only by the MVMVA opcode (the bits are zero for all +other opcodes).
+The "sf" and "lm" bits are usually fixed (either set, or cleared, depending on +the command) (for MVMVA, the bits are variable) (also, "sf" can be changed for +some commands like SQR) (although they are usually fixed for most other +opcodes, changing them might have some effect on some/all opcodes)?

+

GTE Data Register Summary (cop2r0-31)

+
  cop2r0-1   3xS16 VXY0,VZ0              Vector 0 (X,Y,Z)
+  cop2r2-3   3xS16 VXY1,VZ1              Vector 1 (X,Y,Z)
+  cop2r4-5   3xS16 VXY2,VZ2              Vector 2 (X,Y,Z)
+  cop2r6     4xU8  RGBC                  Color/code value
+  cop2r7     1xU16 OTZ                   Average Z value (for Ordering Table)
+  cop2r8     1xS16 IR0                   16bit Accumulator (Interpolate)
+  cop2r9-11  3xS16 IR1,IR2,IR3           16bit Accumulator (Vector)
+  cop2r12-15 6xS16 SXY0,SXY1,SXY2,SXYP   Screen XY-coordinate FIFO  (3 stages)
+  cop2r16-19 4xU16 SZ0,SZ1,SZ2,SZ3       Screen Z-coordinate FIFO   (4 stages)
+  cop2r20-22 12xU8 RGB0,RGB1,RGB2        Color CRGB-code/color FIFO (3 stages)
+  cop2r23    4xU8  (RES1)                Prohibited
+  cop2r24    1xS32 MAC0                  32bit Maths Accumulators (Value)
+  cop2r25-27 3xS32 MAC1,MAC2,MAC3        32bit Maths Accumulators (Vector)
+  cop2r28-29 1xU15 IRGB,ORGB             Convert RGB Color (48bit vs 15bit)
+  cop2r30-31 2xS32 LZCS,LZCR             Count Leading-Zeroes/Ones (sign bits)
+
+

GTE Control Register Summary (cop2r32-63)

+
  cop2r32-36 9xS16 RT11RT12,..,RT33 Rotation matrix     (3x3)        ;cnt0-4
+  cop2r37-39 3x 32 TRX,TRY,TRZ      Translation vector  (X,Y,Z)      ;cnt5-7
+  cop2r40-44 9xS16 L11L12,..,L33    Light source matrix (3x3)        ;cnt8-12
+  cop2r45-47 3x 32 RBK,GBK,BBK      Background color    (R,G,B)      ;cnt13-15
+  cop2r48-52 9xS16 LR1LR2,..,LB3    Light color matrix source (3x3)  ;cnt16-20
+  cop2r53-55 3x 32 RFC,GFC,BFC      Far color           (R,G,B)      ;cnt21-23
+  cop2r56-57 2x 32 OFX,OFY          Screen offset       (X,Y)        ;cnt24-25
+  cop2r58 BuggyU16 H                Projection plane distance.       ;cnt26
+  cop2r59      S16 DQA              Depth queing parameter A (coeff) ;cnt27
+  cop2r60       32 DQB              Depth queing parameter B (offset);cnt28
+  cop2r61-62 2xS16 ZSF3,ZSF4        Average Z scale factors          ;cnt29-30
+  cop2r63      U20 FLAG             Returns any calculation errors   ;cnt31
+
+

GTE Registers

+

Note in some functions format is different from the one that's given here.

+

Matrix Registers

+

  Rotation matrix (RT)   Light matrix (LLM)     Light Color matrix (LCM)
+  cop2r32.lsbs=RT11      cop2r40.lsbs=L11       cop2r48.lsbs=LR1
+  cop2r32.msbs=RT12      cop2r40.msbs=L12       cop2r48.msbs=LR2
+  cop2r33.lsbs=RT13      cop2r41.lsbs=L13       cop2r49.lsbs=LR3
+  cop2r33.msbs=RT21      cop2r41.msbs=L21       cop2r49.msbs=LG1
+  cop2r34.lsbs=RT22      cop2r42.lsbs=L22       cop2r50.lsbs=LG2
+  cop2r34.msbs=RT23      cop2r42.msbs=L23       cop2r50.msbs=LG3
+  cop2r35.lsbs=RT31      cop2r43.lsbs=L31       cop2r51.lsbs=LB1
+  cop2r35.msbs=RT32      cop2r43.msbs=L32       cop2r51.msbs=LB2
+  cop2r36     =RT33      cop2r44     =L33       cop2r52     =LB3
+
+Each element is 16bit (1bit sign, 3bit integer, 12bit fraction). Reading the +last elements (RT33,L33,LB3) returns the 16bit value sign-expanded to 32bit.

+

Translation Vector (TR) (Input, R/W?)

+

  cop2r37 (cnt5) - TRX - Translation vector X (R/W?)
+  cop2r38 (cnt6) - TRY - Translation vector Y (R/W?)
+  cop2r39 (cnt7) - TRZ - Translation vector Z (R/W?)
+
+Each element is 32bit (1bit sign, 31bit integer).
+Used only for MVMVA, RTPS, RTPT commands.

+

Background Color (BK) (Input?, R/W?)

+

  cop2r45 (cnt13) - RBK - Background color red component
+  cop2r46 (cnt14) - GBK - Background color green component
+  cop2r47 (cnt15) - BBK - Background color blue component
+
+Each element is 32bit (1bit sign, 19bit integer, 12bit fraction).

+

Far Color (FC) (Input?) (R/W?)

+

  cop2r53 (cnt21) - RFC - Far color red component
+  cop2r54 (cnt22) - GFC - Far color green component
+  cop2r55 (cnt23) - BFC - Far color blue component
+
+Each element is 32bit (1bit sign, 27bit integer, 4bit fraction).

+

Screen Offset and Distance (Input, R/W?)

+

  cop2r56 (cnt24) - OFX - Screen offset X
+  cop2r57 (cnt25) - OFY - Screen offset Y
+  cop2r58 (cnt26) - H   - Projection plane distance
+  cop2r59 (cnt27) - DQA - Depth queing parameter A.(coeff.)
+  cop2r60 (cnt28) - DQB - Depth queing parameter B.(offset.)
+
+The X and Y values are each 32bit (1bit sign, 15bit integer, 16bit fraction).
+The H value is 16bit unsigned (0bit sign, 16bit integer, 0bit fraction). BUG: +When reading the H register, the hardware does accidently \<sign-expand> +the \<unsigned> 16bit value (ie. values +8000h..+FFFFh are returned as +FFFF8000h..FFFFFFFFh) (this bug applies only to "mov rd,cop2r58" opcodes; the +actual calculations via RTPS/RTPT opcodes are working okay).
+The DQA value is only 16bit (1bit sign, 7bit integer, 8bit fraction).
+The DQB value is 32bit (1bit sign, 7bit integer, 24bit? fraction).
+Used only for RTPS/RTPT commands.

+

Average Z Registers (ZSF3/ZSF4=Input, R/W?) (OTZ=Result, R)

+

  cop2r61 (cnt29) ZSF3 |  0|ZSF3 1,3,12| Z3 average scale factor (normally 1/3)
+  cop2r62 (cnt30) ZSF4 |  0|ZSF4 1,3,12| Z4 average scale factor (normally 1/4)
+  cop2r7       OTZ (R) |   |OTZ 0,15, 0| Average Z value (for Ordering Table)
+
+Used only for AVSZ3/AVSZ4 commands.

+

Screen XYZ Coordinate FIFOs

+

  cop2r12 - SXY0  rw|SY0 1,15, 0|SX0 1,15, 0| Screen XY fifo (older)
+  cop2r13 - SXY1  rw|SY1 1,15, 0|SX1 1,15, 0| Screen XY fifo (old)
+  cop2r14 - SXY2  rw|SY2 1,15, 0|SX2 1,15, 0| Screen XY fifo (new)
+  cop2r15 - SXYP  rw|SYP 1,15, 0|SXP 1,15, 0| SXY2-mirror with move-on-write
+  cop2r16 - SZ0   rw|          0|SZ0 0,16, 0| Screen Z fifo (oldest)
+  cop2r17 - SZ1   rw|          0|SZ1 0,16, 0| Screen Z fifo (older)
+  cop2r18 - SZ2   rw|          0|SZ2 0,16, 0| Screen Z fifo (old)
+  cop2r19 - SZ3   rw|          0|SZ3 0,16, 0| Screen Z fifo (new)
+
+SX,SY,SZ are used as Output for RTPS/RTPT. Additionally, SX,SY are used as +Input for NCLIP, and SZ is used as Input for AVSZ3/AVSZ4.
+The SZn Fifo has 4 stages (required for AVSZ4 command), the SXYn Fifo has only +3 stages, and a special mirrored register: SXYP is a mirror of SXY2, the +difference is that writing to SXYP moves SXY2/SXY1 to SXY1/SXY0, whilst writing +to SXY2 (or any other SXYn or SZn registers) changes only the written register, +but doesn't move any other Fifo entries.

+

16bit Vectors (R/W)

+

  Vector 0 (V0)         Vector 1 (V1)       Vector 2 (V2)       Vector 3 (IR)
+  cop2r0.lsbs - VX0     cop2r2.lsbs - VX1   cop2r4.lsbs - VX2   cop2r9  - IR1
+  cop2r0.msbs - VY0     cop2r2.msbs - VY1   cop2r4.msbs - VY2   cop2r10 - IR2
+  cop2r1      - VZ0     cop2r3      - VZ1   cop2r5      - VZ2   cop2r11 - IR3
+
+All elements are signed 16bit. The IRn and VZn elements occupy a whole 32bit +register, reading these registers returns the 16bit value sign-expanded to +32bit. Note: IRn can be also indirectly accessed via IRGB/ORGB registers.

+

Color Register and Color FIFO

+

  cop2r6  - RGBC  rw|CODE |B    |G    |R    | Color/code
+  cop2r20 - RGB0  rw|CD0  |B0   |G0   |R0   | Characteristic color fifo.
+  cop2r21 - RGB1  rw|CD1  |B1   |G1   |R1   |
+  cop2r22 - RGB2  rw|CD2  |B2   |G2   |R2   |
+  cop2r23 - (RES1)  |                       | Prohibited
+
+RES1 seems to be unused... looks like an unused Fifo stage... RES1 is +read/write-able... unlike SXYP (for SXYn Fifo) it does not mirror to RGB2, nor +does it have a move-on-write function...

+

Interpolation Factor

+

  cop2r8   IR0   rw|Sign       |IR0 1, 3,12| Intermediate value 0.
+
+Used as Output for RTPS/RTPT, and as Input for various commands.

+

XX...

+
  cop2r24  MAC0  rw|MAC0 1,31,0            | Sum of products value 0
+
+

XX...

+
  cop2r25  MAC1  rw|MAC1 1,31,0            | Sum of products value 1
+  cop2r26  MAC2  rw|MAC2 1,31,0            | Sum of products value 2
+  cop2r27  MAC3  rw|MAC3 1,31,0            | Sum of products value 3
+
+

cop2r28 - IRGB - Color conversion Input (R/W)

+

Expands 5:5:5 bit RGB (range 0..1Fh) to 16:16:16 bit RGB (range 0000h..0F80h).
+

  0-4    Red   (0..1Fh) (R/W)  ;multiplied by 80h, and written to IR1
+  5-9    Green (0..1Fh) (R/W)  ;multiplied by 80h, and written to IR2
+  10-14  Blue  (0..1Fh) (R/W)  ;multiplied by 80h, and written to IR3
+  15-31  Not used (always zero) (Read only)
+
+After writing to IRGB, the result can be read from IR3 after TWO nop's, and +from IR1,IR2 after THREE nop's (for uncached code, ONE nop would work). When +using IR1,IR2,IR3 as parameters for GTE commands, similar timing restrictions +might apply... depending on when the specific commands use the parameters?

+

cop2r29 - ORGB - Color conversion Output (R)

+

Collapses 16:16:16 bit RGB (range 0000h..0F80h) to 5:5:5 bit RGB (range +0..1Fh). Negative values (8000h..FFFFh/80h) are saturated to 00h, large +positive values (1000h..7FFFh/80h) are saturated to 1Fh, there are no overflow +or saturation flags set in cop2r63 though.
+

  0-4    Red   (0..1Fh) (R)  ;IR1 divided by 80h, saturated to +00h..+1Fh
+  5-9    Green (0..1Fh) (R)  ;IR2 divided by 80h, saturated to +00h..+1Fh
+  10-14  Blue  (0..1Fh) (R)  ;IR3 divided by 80h, saturated to +00h..+1Fh
+  15-31  Not used (always zero) (Read only)
+
+Any changes to IR1,IR2,IR3 are reflected to this register (and, actually also +to IRGB) (ie. ORGB is simply a read-only mirror of IRGB).

+

cop2r30 - LZCS - Count Leading Bits Source data (R/W)

+

cop2r31 - LZCR - Count Leading Bits Result (R)

+

Reading LZCR returns the leading 0 count of LZCS if LZCS is positive and the +leading 1 count of LZCS if LZCS is negative. The results are in range 1..32.

+

cop2r63 (cnt31) - FLAG - Returns any calculation errors.

+

See GTE Saturation chapter.

+

GTE Saturation

+

Maths overflows are indicated in FLAG register. In most cases, the result is +saturated to MIN/MAX values (except MAC0,MAC1,MAC2,MAC3 which aren't +saturated). For IR1,IR2,IR3 many commands allow to select the MIN value via +"lm" bit of the GTE opcode (though not all commands, RTPS/RTPT always act as if +lm=0).

+

cop2r63 (cnt31) - FLAG - Returns any calculation errors.

+

  31   Error Flag (Bit30..23, and 18..13 ORed together) (Read only)
+  30   MAC1 Result larger than 43 bits and positive
+  29   MAC2 Result larger than 43 bits and positive
+  28   MAC3 Result larger than 43 bits and positive
+  27   MAC1 Result larger than 43 bits and negative
+  26   MAC2 Result larger than 43 bits and negative
+  25   MAC3 Result larger than 43 bits and negative
+  24   IR1 saturated to +0000h..+7FFFh (lm=1) or to -8000h..+7FFFh (lm=0)
+  23   IR2 saturated to +0000h..+7FFFh (lm=1) or to -8000h..+7FFFh (lm=0)
+  22   IR3 saturated to +0000h..+7FFFh (lm=1) or to -8000h..+7FFFh (lm=0)
+  21   Color-FIFO-R saturated to +00h..+FFh
+  20   Color-FIFO-G saturated to +00h..+FFh
+  19   Color-FIFO-B saturated to +00h..+FFh
+  18   SZ3 or OTZ saturated to +0000h..+FFFFh
+  17   Divide overflow. RTPS/RTPT division result saturated to max=1FFFFh
+  16   MAC0 Result larger than 31 bits and positive
+  15   MAC0 Result larger than 31 bits and negative
+  14   SX2 saturated to -0400h..+03FFh
+  13   SY2 saturated to -0400h..+03FFh
+  12   IR0 saturated to +0000h..+1000h
+  0-11 Not used (always zero) (Read only)
+
+Bit30-12 are read/write-able, ie. they can be set/reset by software, however, +that's normally not required - all bits are automatically reset at the begin of +a new GTE command.
+Bit31 is apparently intended for RTPS/RTPT commands, since it triggers only on +flags that are affected by these two commands, but even for that commands it's +totally useless since one could as well check if FLAG is nonzero.
+Note: Writing 32bit values to 16bit GTE registers by software does not trigger +any overflow/saturation flags (and does not do any saturation), eg. writing +12008900h (positive 32bit) to a signed 16bit register sets that register to +FFFF8900h (negative 16bit).

+

GTE Opcode Summary

+

GTE Command Summary (sorted by Real Opcode bits) (bit0-5)

+

  Opc  Name   Clk Expl.
+  00h  -          N/A (modifies similar registers than RTPS...)
+  01h  RTPS   15  Perspective Transformation single
+  0xh  -          N/A
+  06h  NCLIP  8   Normal clipping
+  0xh  -          N/A
+  0Ch  OP(sf) 6   Cross product of 2 vectors
+  0xh  -          N/A
+  10h  DPCS   8   Depth Cueing single
+  11h  INTPL  8   Interpolation of a vector and far color vector
+  12h  MVMVA  8   Multiply vector by matrix and add vector (see below)
+  13h  NCDS   19  Normal color depth cue single vector
+  14h  CDP    13  Color Depth Que
+  15h  -          N/A
+  16h  NCDT   44  Normal color depth cue triple vectors
+  1xh  -          N/A
+  1Bh  NCCS   17  Normal Color Color single vector
+  1Ch  CC     11  Color Color
+  1Dh  -          N/A
+  1Eh  NCS    14  Normal color single
+  1Fh  -          N/A
+  20h  NCT    30  Normal color triple
+  2xh  -          N/A
+  28h  SQR(sf)5   Square of vector IR
+  29h  DCPL   8   Depth Cue Color light
+  2Ah  DPCT   17  Depth Cueing triple (should be fake=08h, but isn't)
+  2xh  -          N/A
+  2Dh  AVSZ3  5   Average of three Z values
+  2Eh  AVSZ4  6   Average of four Z values
+  2Fh  -          N/A
+  30h  RTPT   23  Perspective Transformation triple
+  3xh  -          N/A
+  3Dh  GPF(sf)5   General purpose interpolation
+  3Eh  GPL(sf)5   General purpose interpolation with base
+  3Fh  NCCT   39  Normal Color Color triple vector
+
+Unknown if/what happens when using the "N/A" opcodes?

+

GTE Command Summary (sorted by Fake Opcode bits) (bit20-24)

+

The fake opcode number in bit20-24 has absolutely no effect on the hardware, it +seems to be solely used to (or not to) confuse developers. Having the opcodes +sorted by their fake numbers gives a more or less well arranged list:
+

  Fake Name   Clk Expl.
+  00h  -          N/A
+  01h  RTPS   15  Perspective Transformation single
+  02h  RTPT   23  Perspective Transformation triple
+  03h  -          N/A
+  04h  MVMVA  8   Multiply vector by matrix and add vector (see below)
+  05h  -          N/A
+  06h  DCPL   8   Depth Cue Color light
+  07h  DPCS   8   Depth Cueing single
+  08h  DPCT   17  Depth Cueing triple (should be fake=08h, but isn't)
+  09h  INTPL  8   Interpolation of a vector and far color vector
+  0Ah  SQR(sf)5   Square of vector IR
+  0Bh  -          N/A
+  0Ch  NCS    14  Normal color single
+  0Dh  NCT    30  Normal color triple
+  0Eh  NCDS   19  Normal color depth cue single vector
+  0Fh  NCDT   44  Normal color depth cue triple vectors
+  10h  NCCS   17  Normal Color Color single vector
+  11h  NCCT   39  Normal Color Color triple vector
+  12h  CDP    13  Color Depth Que
+  13h  CC     11  Color Color
+  14h  NCLIP  8   Normal clipping
+  15h  AVSZ3  5   Average of three Z values
+  16h  AVSZ4  6   Average of four Z values
+  17h  OP(sf) 6   Cross product of 2 vectors
+  18h  -          N/A
+  19h  GPF(sf)5   General purpose interpolation
+  1Ah  GPL(sf)5   General purpose interpolation with base
+  1Bh  -          N/A
+  1Ch  -          N/A
+  1Dh  -          N/A
+  1Eh  -          N/A
+  1Fh  -          N/A
+
+For the sort-effect, DCPT should use fake=08h, but Sony seems to have +accidently numbered it fake=0Fh in their devkit (giving it the same fake number +as for NCDT). Also, "Wipeout 2097" accidently uses 0140006h (fake=01h and +distorted bit18) instead of 1400006h (fake=14h) for NCLIP.

+

Additional Functions

+

The LZCS/LZCR registers offer a Count-Leading-Zeroes/Leading-Ones function.
+The IRGB/ORGB registers allow to convert between 48bit and 15bit RGB colors.
+These registers work without needing to send any COP2 commands. However, unlike +for commands (which do automatically halt the CPU when needed), one must insert +dummy opcodes between writing and reading the registers.

+

GTE Coordinate Calculation Commands

+

COP2 0180001h - 15 Cycles - RTPS - Perspective Transformation (single)

+

COP2 0280030h - 23 Cycles - RTPT - Perspective Transformation (triple)

+

RTPS performs final Rotate, translate and perspective transformation on vertex +V0. Before writing to the FIFOs, the older entries are moved one stage down. +RTPT is same as RTPS, but repeats for V1 and V2. The "sf" bit should be usually +set.
+

  IR1 = MAC1 = (TRX*1000h + RT11*VX0 + RT12*VY0 + RT13*VZ0) SAR (sf*12)
+  IR2 = MAC2 = (TRY*1000h + RT21*VX0 + RT22*VY0 + RT23*VZ0) SAR (sf*12)
+  IR3 = MAC3 = (TRZ*1000h + RT31*VX0 + RT32*VY0 + RT33*VZ0) SAR (sf*12)
+  SZ3 = MAC3 SAR ((1-sf)*12)                           ;ScreenZ FIFO 0..+FFFFh
+  MAC0=(((H*20000h/SZ3)+1)/2)*IR1+OFX, SX2=MAC0/10000h ;ScrX FIFO -400h..+3FFh
+  MAC0=(((H*20000h/SZ3)+1)/2)*IR2+OFY, SY2=MAC0/10000h ;ScrY FIFO -400h..+3FFh
+  MAC0=(((H*20000h/SZ3)+1)/2)*DQA+DQB, IR0=MAC0/1000h  ;Depth cueing 0..+1000h
+
+If the result of the "(((H*20000h/SZ3)+1)/2)" division is greater than 1FFFFh, +then the division result is saturated to +1FFFFh, and the divide overflow bit +in the FLAG register gets set; that happens if the vertex is exceeding the +"near clip plane", ie. if it is very close to the camera (SZ3\<=H/2), exactly +at the camara position (SZ3=0), or behind the camera (negative Z coordinates +are saturated to SZ3=0). For details on the division, see:
+GTE Division Inaccuracy
+For "far plane clipping", one can use the SZ3 saturation flag (MaxZ=FFFFh), or +the IR3 saturation flag (MaxZ=7FFFh) (eg. used by Wipeout 2097), or one can +compare the SZ3 value with any desired MaxZ value by software.
+Note: The command does saturate IR1,IR2,IR3 to -8000h..+7FFFh (regardless of lm +bit). When using RTP with sf=0, then the IR3 saturation flag (FLAG.22) gets set +\<only> if "MAC3 SAR 12" exceeds -8000h..+7FFFh (although IR3 is saturated +when "MAC3" exceeds -8000h..+7FFFh).

+

COP2 1400006h - 8 Cycles - NCLIP - Normal clipping

+

  MAC0 =   SX0*SY1 + SX1*SY2 + SX2*SY0 - SX0*SY2 - SX1*SY0 - SX2*SY1
+
+The sign of the result indicates whether the polygon coordinates are arranged +clockwise or anticlockwise (ie. whether the front side or backside is visible). +If the result is zero, then it's neither one (ie. the vertices are all arranged +in a straight line). Note: The GPU probably renders straight lines as invisble +0 pixel width lines?

+

COP2 158002Dh - 5 Cycles - AVSZ3 - Average of three Z values (for Triangles)

+

COP2 168002Eh - 6 Cycles - AVSZ4 - Average of four Z values (for Quads)

+

  MAC0 =  ZSF3*(SZ1+SZ2+SZ3)       ;for AVSZ3
+  MAC0 =  ZSF4*(SZ0+SZ1+SZ2+SZ3)   ;for AVSZ4
+  OTZ  =  MAC0/1000h               ;for both (saturated to 0..FFFFh)
+
+Adds three or four Z values together and multplies them by a fixed point value. +The result can be used as index in the GPU's Ordering Table (OT).
+GPU Depth Ordering
+The scaling factors would be usually ZSF3=N/30h and ZSF4=N/40h, where "N" is +the number of entries in the OT (max 10000h). SZn and OTZ are unsigned 16bit +values, for whatever reason ZSFn registers are signed 16bit values (negative +values would allow a negative result in MAC0, but would saturate OTZ to zero).

+

GTE General Purpose Calculation Commands

+

COP2 0400012h - 8 Cycles - MVMVA(sf,mx,v,cv,lm)

+

Multiply vector by matrix and vector addition.
+

  Mx = matrix specified by mx  ;RT/LLM/LCM - Rotation, light or color matrix
+  Vx = vector specified by v   ;V0, V1, V2, or [IR1,IR2,IR3]
+  Tx = translation vector specified by cv  ;TR or BK or Bugged/FC, or None
+
+Calculation:
+
  MAC1 = (Tx1*1000h + Mx11*Vx1 + Mx12*Vx2 + Mx13*Vx3) SAR (sf*12)
+  MAC2 = (Tx2*1000h + Mx21*Vx1 + Mx22*Vx2 + Mx23*Vx3) SAR (sf*12)
+  MAC3 = (Tx3*1000h + Mx31*Vx1 + Mx32*Vx2 + Mx33*Vx3) SAR (sf*12)
+  [IR1,IR2,IR3] = [MAC1,MAC2,MAC3]
+
+Multiplies a vector with either the rotation matrix, the light matrix or the +color matrix and then adds the translation vector or background color vector.
+The GTE also allows selection of the far color vector (FC), but this vector is +not added correctly by the hardware: The return values are reduced to the last +portion of the formula, ie. MAC1=(Mx13*Vx3) SAR (sf*12), and similar for MAC2 +and MAC3, nethertheless, some bits in the FLAG register seem to be adjusted as +if the full operation would have been executed. Setting Mx=3 selects a garbage +matrix (with elements -60h, +60h, IR0, RT13, RT13, RT13, RT22, RT22, RT22).

+

COP2 0A00428h+sf*80000h - 5 Cycles - SQR(sf) - Square vector

+

  [MAC1,MAC2,MAC3] = [IR1*IR1,IR2*IR2,IR3*IR3] SHR (sf*12)
+  [IR1,IR2,IR3]    = [MAC1,MAC2,MAC3]    ;IR1,IR2,IR3 saturated to max 7FFFh
+
+Calculates the square of a vector. The result is, of course, always positive, +so the "lm" flag for negative saturation has no effect.

+

COP2 170000Ch+sf*80000h - 6 Cycles - OP(sf,lm) - Cross product of 2 vectors

+

  [MAC1,MAC2,MAC3] = [IR3*D2-IR2*D3, IR1*D3-IR3*D1, IR2*D1-IR1*D2] SAR (sf*12)
+  [IR1,IR2,IR3]    = [MAC1,MAC2,MAC3]                        ;copy result
+
+Calculates the cross product of two signed 16bit vectors. Note: D1,D2,D3 are +meant to be the RT11,RT22,RT33 elements of the RT matrix "misused" as vector. +lm should be usually zero.
+The official Sony documentation refers to this opcode as the Outer Product, +but this is likely the result of a bad translation from Japanese: "外積 - gaiseki" +can be translated to "cross product", "vector product", or "outer product".

+

LZCS/LZCR registers - ? Cycles - Count-Leading-Zeroes/Leading-Ones

+

The LZCS/LZCR registers offer a Count-Leading-Zeroes/Leading-Ones function.

+

GTE Color Calculation Commands

+

COP2 0C8041Eh - 14 Cycles - NCS - Normal color (single)

+

COP2 0D80420h - 30 Cycles - NCT - Normal color (triple)

+

COP2 108041Bh - 17 Cycles - NCCS - Normal Color Color (single vector)

+

COP2 118043Fh - 39 Cycles - NCCT - Normal Color Color (triple vector)

+

COP2 0E80413h - 19 Cycles - NCDS - Normal color depth cue (single vector)

+

COP2 0F80416h - 44 Cycles - NCDT - Normal color depth cue (triple vectors)

+

In: V0=Normal vector (for triple variants repeated with V1 and V2), +BK=Background color, RGBC=Primary color/code, LLM=Light matrix, LCM=Color +matrix, IR0=Interpolation value.
+

  [IR1,IR2,IR3] = [MAC1,MAC2,MAC3] = (LLM*V0) SAR (sf*12)
+  [IR1,IR2,IR3] = [MAC1,MAC2,MAC3] = (BK*1000h + LCM*IR) SAR (sf*12)
+  [MAC1,MAC2,MAC3] = [R*IR1,G*IR2,B*IR3] SHL 4          ;<--- for NCDx/NCCx
+  [MAC1,MAC2,MAC3] = MAC+(FC-MAC)*IR0                   ;<--- for NCDx only
+  [MAC1,MAC2,MAC3] = [MAC1,MAC2,MAC3] SAR (sf*12)       ;<--- for NCDx/NCCx
+  Color FIFO = [MAC1/16,MAC2/16,MAC3/16,CODE], [IR1,IR2,IR3] = [MAC1,MAC2,MAC3]
+

+

COP2 138041Ch - 11 Cycles - CC(lm=1) - Color Color

+

COP2 1280414h - 13 Cycles - CDP(...) - Color Depth Que

+

In: [IR1,IR2,IR3]=Vector, RGBC=Primary color/code, LCM=Color matrix, +BK=Background color, and, for CDP, IR0=Interpolation value, FC=Far color.
+

  [IR1,IR2,IR3] = [MAC1,MAC2,MAC3] = (BK*1000h + LCM*IR) SAR (sf*12)
+  [MAC1,MAC2,MAC3] = [R*IR1,G*IR2,B*IR3] SHL 4
+  [MAC1,MAC2,MAC3] = MAC+(FC-MAC)*IR0                   ;<--- for CDP only
+  [MAC1,MAC2,MAC3] = [MAC1,MAC2,MAC3] SAR (sf*12)
+  Color FIFO = [MAC1/16,MAC2/16,MAC3/16,CODE], [IR1,IR2,IR3] = [MAC1,MAC2,MAC3]
+

+

COP2 0680029h - 8 Cycles - DCPL - Depth Cue Color light

+

COP2 0780010h - 8 Cycles - DPCS - Depth Cueing (single)

+

COP2 0x8002Ah - 17 Cycles - DPCT - Depth Cueing (triple)

+

COP2 0980011h - 8 Cycles - INTPL - Interpolation of a vector and far color

+

In: [IR1,IR2,IR3]=Vector, FC=Far Color, IR0=Interpolation value, CODE=MSB of +RGBC, and, for DCPL, R,G,B=LSBs of RGBC.
+

  [MAC1,MAC2,MAC3] = [R*IR1,G*IR2,B*IR3] SHL 4          ;<--- for DCPL only
+  [MAC1,MAC2,MAC3] = [IR1,IR2,IR3] SHL 12               ;<--- for INTPL only
+  [MAC1,MAC2,MAC3] = [R,G,B] SHL 16                     ;<--- for DPCS/DPCT
+  [MAC1,MAC2,MAC3] = MAC+(FC-MAC)*IR0
+  [MAC1,MAC2,MAC3] = [MAC1,MAC2,MAC3] SAR (sf*12)
+  Color FIFO = [MAC1/16,MAC2/16,MAC3/16,CODE], [IR1,IR2,IR3] = [MAC1,MAC2,MAC3]
+
+DPCT executes thrice, and reads the R,G,B values from RGB0 (ie. reads from the +Bottom of the Color FIFO, instead of from the RGBC register) (the CODE value is +kept read from RGBC as usually), so, after DPCT execution, the RGB0,RGB1,RGB2 +Fifo entries are modified.

+

COP2 190003Dh - 5 Cycles - GPF(sf,lm) - General purpose Interpolation

+

COP2 1A0003Eh - 5 Cycles - GPL(sf,?) - General Interpolation with base

+

  [MAC1,MAC2,MAC3] = [0,0,0]                            ;<--- for GPF only
+  [MAC1,MAC2,MAC3] = [MAC1,MAC2,MAC3] SHL (sf*12)       ;<--- for GPL only
+  [MAC1,MAC2,MAC3] = (([IR1,IR2,IR3] * IR0) + [MAC1,MAC2,MAC3]) SAR (sf*12)
+  Color FIFO = [MAC1/16,MAC2/16,MAC3/16,CODE], [IR1,IR2,IR3] = [MAC1,MAC2,MAC3]
+
+Note: Although the SHL in GPL is theoretically undone by the SAR, 44bit +overflows can occur internally when sf=1.

+

Details on "MAC+(FC-MAC)*IR0"

+

  [IR1,IR2,IR3] = (([RFC,GFC,BFC] SHL 12) - [MAC1,MAC2,MAC3]) SAR (sf*12)
+  [MAC1,MAC2,MAC3] = (([IR1,IR2,IR3] * IR0) + [MAC1,MAC2,MAC3])
+
+Note: Above "[IR1,IR2,IR3]=(FC-MAC)" is saturated to -8000h..+7FFFh (ie. as if +lm=0), anyways, further writes to [IR1,IR2,IR3] (within the same command) are +saturated as usually (ie. depening on lm setting).

+

Details on "(LLM*V0) SAR (sf*12)" and "(BK*1000h + LCM*IR) SAR (sf*12)"

+

Works like MVMVA command (see there), but with fixed Tx/Vx/Mx parameters, the +sf/lm bits can be changed and do affect the results (although normally both +bits should be set for use with color matrices).

+

Notes

+

The 8bit RGB values written to the top of Color Fifo are the 32bit MACn values +divided by 16, and saturated to +00h..+FFh, and of course, the older Fifo +entries are moved downwards. Note that, at the GPU side, the meaning of the RGB +values depends on whether or not texture blending is used (for untextured +polygons FFh is max brightness) (for texture blending FFh is double brightness +and 80h is normal brightness).
+The 8bit CODE value is intended to contain a GP0(20h..7Fh) Rendering command, +allowing to automatically merge the 8bit command number, with the 24bit color +value.
+The IRGB/ORGB registers allow to convert between 48bit and 15bit RGB colors.
+Although the result of the commands in this chapter is written to the Color +FIFO, some commands like GPF/GPL may be also used for other purposes (eg. to +scale or scale/translate single vertices).

+

GTE Division Inaccuracy

+

GTE Division Inaccuracy (for RTPS/RTPT commands)

+

Basically, the GTE division does (attempt to) work as so (using 33bit maths):
+

  n = (((H*20000h/SZ3)+1)/2)
+
+alternatly, below would give (almost) the same result (using 32bit maths):
+
  n = ((H*10000h+SZ3/2)/SZ3)
+
+in both cases, the result is saturated about as so:
+
  if n>1FFFFh or division_by_zero then n=1FFFFh, FLAG.Bit17=1, FLAG.Bit31=1
+
+However, the real GTE hardware is using a fast, but less accurate division +mechanism (based on Unsigned Newton-Raphson (UNR) algorithm):
+
  if (H < SZ3*2) then                            ;check if overflow
+    z = count_leading_zeroes(SZ3)                ;z=0..0Fh (for 16bit SZ3)
+    n = (H SHL z)                                ;n=0..7FFF8000h
+    d = (SZ3 SHL z)                              ;d=8000h..FFFFh
+    u = unr_table[(d-7FC0h) SHR 7] + 101h        ;u=200h..101h
+    d = ((2000080h - (d * u)) SHR 8)             ;d=10000h..0FF01h
+    d = ((0000080h + (d * u)) SHR 8)             ;d=20000h..10000h
+    n = min(1FFFFh, (((n*d) + 8000h) SHR 16))    ;n=0..1FFFFh
+  else n = 1FFFFh, FLAG.Bit17=1, FLAG.Bit31=1    ;n=1FFFFh plus overflow flag
+
+the GTE's unr_table[000h..100h] consists of following values:
+
  FFh,FDh,FBh,F9h,F7h,F5h,F3h,F1h,EFh,EEh,ECh,EAh,E8h,E6h,E4h,E3h ;\
+  E1h,DFh,DDh,DCh,DAh,D8h,D6h,D5h,D3h,D1h,D0h,CEh,CDh,CBh,C9h,C8h ; 00h..3Fh
+  C6h,C5h,C3h,C1h,C0h,BEh,BDh,BBh,BAh,B8h,B7h,B5h,B4h,B2h,B1h,B0h ;
+  AEh,ADh,ABh,AAh,A9h,A7h,A6h,A4h,A3h,A2h,A0h,9Fh,9Eh,9Ch,9Bh,9Ah ;/
+  99h,97h,96h,95h,94h,92h,91h,90h,8Fh,8Dh,8Ch,8Bh,8Ah,89h,87h,86h ;\
+  85h,84h,83h,82h,81h,7Fh,7Eh,7Dh,7Ch,7Bh,7Ah,79h,78h,77h,75h,74h ; 40h..7Fh
+  73h,72h,71h,70h,6Fh,6Eh,6Dh,6Ch,6Bh,6Ah,69h,68h,67h,66h,65h,64h ;
+  63h,62h,61h,60h,5Fh,5Eh,5Dh,5Dh,5Ch,5Bh,5Ah,59h,58h,57h,56h,55h ;/
+  54h,53h,53h,52h,51h,50h,4Fh,4Eh,4Dh,4Dh,4Ch,4Bh,4Ah,49h,48h,48h ;\
+  47h,46h,45h,44h,43h,43h,42h,41h,40h,3Fh,3Fh,3Eh,3Dh,3Ch,3Ch,3Bh ; 80h..BFh
+  3Ah,39h,39h,38h,37h,36h,36h,35h,34h,33h,33h,32h,31h,31h,30h,2Fh ;
+  2Eh,2Eh,2Dh,2Ch,2Ch,2Bh,2Ah,2Ah,29h,28h,28h,27h,26h,26h,25h,24h ;/
+  24h,23h,22h,22h,21h,20h,20h,1Fh,1Eh,1Eh,1Dh,1Dh,1Ch,1Bh,1Bh,1Ah ;\
+  19h,19h,18h,18h,17h,16h,16h,15h,15h,14h,14h,13h,12h,12h,11h,11h ; C0h..FFh
+  10h,0Fh,0Fh,0Eh,0Eh,0Dh,0Dh,0Ch,0Ch,0Bh,0Ah,0Ah,09h,09h,08h,08h ;
+  07h,07h,06h,06h,05h,05h,04h,04h,03h,03h,02h,02h,01h,01h,00h,00h ;/
+  00h    ;<-- one extra table entry (for "(d-7FC0h)/80h"=100h)    ;-100h
+
+Above can be generated as "unr_table[i]=min(0,(40000h/(i+100h)+1)/2-101h)".
+Some special cases: NNNNh/0001h uses a big multiplier (d=20000h), in practice, +this can occur only for 0000h/0001h and 0001h/0001h (due to the H\<SZ3*2 +overflow check).
+The min(1FFFFh) limit is needed for cases like FE3Fh/7F20h, F015h/780Bh, etc. +(these do produce UNR result 20000h, and are saturated to 1FFFFh, but without +setting overflow FLAG bits).

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/graphicsprocessingunitgpu/index.html b/graphicsprocessingunitgpu/index.html new file mode 100644 index 0000000..488a7b0 --- /dev/null +++ b/graphicsprocessingunitgpu/index.html @@ -0,0 +1,3653 @@ + + + + + + + + + + + + + + + + + + + + + + + + Graphics Processing Unit (GPU) - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Graphics Processing Unit (GPU)

+

The GPU can render Polygons, Lines, or Rectangles to the Drawing Buffer, and +sends the Display Buffer to the Television Set. Polygons are useful for 3D +graphics (or rotated/scaled 2D graphics), Rectangles are useful for 2D graphics +and Text output.

+

GPU I/O Ports, DMA Channels, Commands, VRAM
+GPU Render Polygon Commands
+GPU Render Line Commands
+GPU Render Rectangle Commands
+GPU Rendering Attributes
+GPU Memory Transfer Commands
+GPU Other Commands
+GPU Display Control Commands (GP1)
+GPU Status Register
+GPU Versions
+GPU Depth Ordering
+GPU Video Memory (VRAM)
+GPU Texture Caching
+GPU Timings
+GPU (MISC)

+

GPU I/O Ports, DMA Channels, Commands, VRAM

+

GPU I/O Ports (1F801810h and 1F801814h in Read/Write Directions)

+

  Port            Name    Expl.
+  1F801810h-Write GP0     Send GP0 Commands/Packets (Rendering and VRAM Access)
+  1F801814h-Write GP1     Send GP1 Commands (Display Control) (and DMA Control)
+  1F801810h-Read  GPUREAD Receive responses to GP0(C0h) and GP1(10h) commands
+  1F801814h-Read  GPUSTAT Receive GPU Status Register
+
+It (=GP0 only?) has a 64-byte (16-word) command FIFO buffer.
+Optionally, Port 1F801810h (Read/Write) can be also accessed via DMA2.
+The communication between the CPU and the GPU is a 32-bits data-only bus called +the VBUS. Aside from address line 2 being connected, in order to make the difference +between port 0 and 1, there are no other address line between the two chips.
+Thus the GPU can be seen as a blackbox that executes 32 bits commands.

+

GPU Timers / Synchronization

+

Most of the Timers are bound to GPU timings, see
+Timers
+Interrupts

+ +

  Channel                   Recommended for
+  DMA2 in Linked Mode     - Sending rendering commands  ;GP0(20h..7Fh,E1h..E6h)
+  DMA2 in Continuous Mode - VRAM transfers to/from GPU  ;GP0(A0h,C0h)
+  DMA6                    - Initializing the Link List  ;Main RAM
+
+Note: Before using DMA2, set up the DMA Direction in GP1(04h).
+DMA2 is equivalent to accessing Port 1F801810h (GP0/GPUREAD) by software.
+DMA6 just initializes data in Main RAM (not physically connected to the GPU).

+

GPU Command Summary

+

While it is probably more simple for the MIPS software to see GPU commands +as a collection of bytes, the GPU will only see 32 bits words being sent to it. +Therefore, while the Sony libraries will fill up structures to send to the GPU +using byte-level granularity, it is much more simple to see these as bitmasks +from the GPU's point of view.
+So when processing commands on GP0, the GPU will first inspect the top 3 bits +of the 32 bits command being sent. Depending on the value of these 3 bits, +further decoding of the other bits can be done.
+Commands sent to GP1 are more simple in nature to decode.
+
+Top 3 bits of a GP0 command: +

  0 (000)      Misc commands
+  1 (001)      Polygon primitive
+  2 (010)      Line primitive
+  3 (011)      Rectangle primitive
+  4 (100)      VRAM-to-VRAM blit
+  5 (101)      CPU-to-VRAM blit
+  6 (110)      VRAM-to-CPU blit
+  7 (111)      Environment commands
+
+Some GP0 commands require additional parameters, which are written (following +the initial command) as further 32bit values to GP0. The execution of the command +starts when all parameters have been received (or, in case of Polygon/Line +commands, when the first 3/2 vertices have been received).

+

The astute reader will realize that there are shared bits between primitives, such +as the gouraud shading flag.

+

Unlike all the others, the environment commands are more clear to be seen as a single +8 bits command, therefore the rest of the document will refer to them by their +full 8 bits value.

+

Clear Cache

+

  1st  Command           (01000000h)
+
+The GPU has a small texture cache, in order to reduce VRAM access. This command +flushes it, when mutating the VRAM, similar to how the CPU i-cache must be +flushed after writing new code and before executing it.
+Note that it is possible to abuse the texture cache by changing pixels in VRAM that +the GPU loaded in its cache, therefore creating weird drawing effects, but this is +only seen in some demos, and never in actual games.

+

Quick Rectangle Fill

+

  1st  Color+Command     (02BbGgRrh)  ;24bit RGB value (see note)
+  2nd  Top Left Corner   (YyyyXxxxh)  ;Xpos counted in halfwords, steps of 10h
+  3rd  Width+Height      (YsizXsizh)  ;Xsiz counted in halfwords, steps of 10h
+
+Fills the area in the frame buffer with the value in RGB. Horizontally the +filling is done in 16-pixel (32-bytes) units (see below masking/rounding).
+The "Color" parameter is a 24bit RGB value, however, the actual fill data is +16bit: The hardware linearly converts the 24bit RGB value to 15bit RGB by +dropping the lower 3 bits of each color value and additionally sets the mask bit +(bit15) to 0.
+Rectangle filling is not affected by the GP0(E6h) mask setting, acting as if +GP0(E6h).0 and GP0(E6h).1 are both zero.
+This command is typically used to do a quick clear, as it'll be faster to run +than an equivalent Render Rectangle command.

+

VRAM Overview / VRAM Addressing

+

VRAM can be 1 MB or 2 MB (not mapped to the CPU bus) (it can be read/written +only via I/O or DMA). The memory is used for:
+

  Framebuffer(s)      ;Usually 2 buffers (Drawing Area, and Display Area)
+  Texture Page(s)     ;Required when using Textures
+  Texture Palette(s)  ;Required when using 4bit/8bit Textures
+
+1 MB VRAM is laid out as 512 lines of 2048 bytes each. 2 MB VRAM (only present +on some arcade boads, not on consoles) is laid out as 1024 lines instead. It is +accessed via coordinates, ranging from (0,0)=Upper-Left to (N,1023)=Lower-Right.
+
  Unit  = 4bit  8bit  16bit  24bit   Halfwords   | Unit   = Lines
+  Width = 4096  2048  1024   682.66  1024        | Height = 512/1024
+
+The horizontal coordinates are addressing memory in +4bit/8bit/16bit/24bit/halfword units (depending on what data formats you are +using) (or a mixup thereof, eg. a halfword-base address, plus a 4bit texture +coordinate).

+

GPU Render Polygon Commands

+

When the upper 3 bits of the first GP0 command are set to 1 (001), then the command can +be decoded using the following bitfield: +

 bit number   value   meaning
+  31-29        001    polygon render
+    28         1/0    gouraud / flat shading
+    27         1/0    4 / 3 vertices
+    26         1/0    textured / untextured
+    25         1/0    semi-transparent / opaque
+    24         1/0    raw texture / modulation
+   23-0        rgb    first color value.
+

+

Subsequent data sent to GP0 to complete this command will be the vertex data for the +command. The meaning and count of these words will be altered by the initial flags +sent in the first command.

+

If doing flat rendering, no further color will be sent. If doing gouraud shading, +there will be one more color per vertex sent, and the initial color will be the +one for vertex 0.

+

If doing textured rendering, each vertex sent will also have a U/V texture coordinate +attached to it, as well as a CLUT index.

+

So each vertex data can be seen as the following set of words: +

Color      xxBBGGRR               - optional, only present for gouraud shading
+Vertex     YYYYXXXX               - required, two signed 16 bits values
+UV         ClutVVUU or PageVVUU   - optional, only present for textured polygons
+

+

The upper 16 bits of the first two UV words contain extra information. The first +word holds the Clut index. The second word contains texture page information. +Any further clut/page bits should be set to 0.

+

So for example, a solid flat blue triangle of coordinate (10, 20), (30, 40), (50, 60) +will be drawn using the following draw call data: +

200000FF
+00100020
+00300040
+00500060
+

+

And a quad with gouraud shading texture-blend will have the following structure: +

2CR1G1B1
+Yyy1Xxx1
+ClutV1U1
+00R2G2B2
+Yyy2Xxx2
+PageV2U2
+00R3G3B3
+Yyy3Xxx3
+0000V3U3
+00R4G4B4
+Yyy4Xxx4
+0000V4U4
+

+

Some combination of these flags can be seen as nonsense however, but it's important +to realize that the GPU will still process them properly. For instance, specifying +gouraud shading without modulation will force the user to send the colors for +each vertex to satisfy the GPU's state machine, without them being actually used for +the rendering.

+

Notes

+

Polygons are displayed up to \<excluding> their lower-right coordinates.
+Quads are internally processed as two triangles, the +first consisting of vertices 1,2,3, and the second of vertices 2,3,4. This is an +important detail, as splitting the quad into triangles affects the way colours +are interpolated.
+Within the triangle, the ordering of the vertices doesn't matter on +the GPU side (a front-back check, based on clockwise or anti-clockwise +ordering, can be implemented at the GTE side).
+Dither enable (in Texpage command) affects ONLY polygons that do use gouraud +shading or modulation.

+

GPU Render Line Commands

+

When the upper 3 bits of the first GP0 command are set to 2 (010), then the command can +be decoded using the following bitfield: +

 bit number   value   meaning
+  31-29        010    line render
+    28         1/0    gouraud / flat shading
+    27         1/0    polyline / single line
+    25         1/0    semi-transparent / opaque
+   23-0        rgb    first color value.
+

+

So each vertex can be seen as the following list of words: +

Color      xxBBGGRR    - optional, only present for gouraud shading
+Vertex     YYYYXXXX    - required, two signed 16 bits values
+

+

When polyline mode is active, at least two vertices must be sent to the GPU. +The vertex list is terminated by the bits 12-15 and 28-31 equaling 0x5, or +(word & 0xF000F000) == 0x50005000. The terminator value occurs on the first +word of the vertex (i.e. the color word if it's a gouraud shaded).

+

If the 2 vertices in a line overlap, then the GPU will draw a 1x1 rectangle in +the location of the 2 vertices using the colour of the first vertex.

+

Note

+

Lines are displayed up to \<including> their lower-right coordinates (ie. +unlike as for polygons, the lower-right coordinate is not excluded).
+If dithering is enabled (via Texpage command), then both monochrome and shaded +lines are drawn with dithering (this differs from monochrome polygons and +monochrome rectangles).

+

Wire-Frame

+

Poly-Lines can be used (among others) to create Wire-Frame polygons (by setting +the last Vertex equal to Vertex 1).

+

GPU Render Rectangle Commands

+

Rectangles are drawn much faster than polygons. Unlike polygons, gouraud +shading is not possible, dithering isn't applied, the rectangle must forcefully +have horizontal and vertical edges, textures cannot be rotated or scaled, and, +of course, the GPU does render Rectangles as a single entity, without splitting +them into two triangles.

+

The Rectangle command can be decoded using the following bitfield: +

 bit number   value   meaning
+  31-29        011    rectangle render
+  28-27        sss    rectangle size
+    26         1/0    textured / untextured
+    25         1/0    semi-transparent / opaque
+    24         1/0    raw texture / modulation
+   23-0        rgb    first color value.
+

+

The size parameter can be seen as the following enum:

+
  0 (00)      variable size
+  1 (01)      single pixel (1x1)
+  2 (10)      8x8 sprite
+  3 (11)      16x16 sprite
+
+

Therefore, the whole draw call can be seen as the following sequence of words: +

Color         ccBBGGRR    - command + color; color is ignored when textured
+Vertex1       YYYYXXXX    - required, indicates the upper left corner to render
+UV            ClutVVUU    - optional, only present for textured rectangles
+Width+Height  YsizXsiz    - optional, dimensions for variable sized rectangles (max 1023x511)
+

+

Unlike for Textured-Polygons, the "Texpage" must be set up separately for +Rectangles, via GP0(E1h). Width and Height can be up to 1023x511, however, the +maximum size of the texture window is 256x256 (so the source data will be +repeated when trying to use sizes larger than 256x256).

+

Texture Origin and X/Y-Flip

+

Vertex & Texcoord specify the upper-left edge of the rectangle. And, +normally, screen coords and texture coords are both incremented during +rendering the rectangle pixels.
+Optionally, X/Y-Flip bits can be set in Texpage.Bit12/13, these bits cause the +texture coordinates to be decremented (instead of incremented). The X/Y-Flip +bits do affect only Rectangles (not Polygons, nor VRAM Transfers).
+Caution: Reportedly, the X/Y-Flip feature isn't supported on old PSX consoles +(unknown which ones exactly, maybe such with PU-7 mainboards, and unknown how +to detect flipping support; except of course by reading VRAM).

+

Note

+

There are also two VRAM Transfer commands which work similar to GP0(60h) and +GP0(65h). Eventually, that commands might be even faster... although not sure +if they do use the Texture Cache?
+The difference is that VRAM Transfers do not clip to the Drawig Area boundary, +do not support fully-transparent nor semi-transparent texture pixels, and do +not convert color depths (eg. without 4bit texture to 16bit framebuffer +conversion).

+

GPU Rendering Attributes

+

Vertex (Parameter for Polygon, Line, Rectangle commands)

+

  0-10   X-coordinate (signed, -1024..+1023)
+  11-15  Not used (usually sign-extension, but ignored by hardware)
+  16-26  Y-coordinate (signed, -1024..+1023)
+  26-31  Not used (usually sign-extension, but ignored by hardware)
+
+Size Restriction: The maximum distance between two vertices is 1023 +horizontally, and 511 vertically. Polygons and lines that are exceeding that +dimensions are NOT rendered. For example, a line from Y1=-300 to Y2=+300 is NOT +rendered, a line from Y1=-100 to Y2=+400 is rendered (as far as it is within +the drawing area).
+If portions of the polygon/line/rectangle are located outside of the drawing +area, then the hardware renders only the portion that is inside of the drawing +area. Not sure if the hardware is skipping all clipped pixels at once (within a +single clock cycle), or if it's (slowly) processing them pixel by pixel?

+

Color Attribute (Parameter for all Rendering commands, except Raw Texture)

+

  0-7    Red   (0..FFh)
+  8-15   Green (0..FFh)
+  16-23  Blue  (0..FFh)
+  24-31  Command (in first paramter) (don't care in further parameters)
+
+Caution: For untextured graphics, 8bit RGB values of FFh are brightest. +However, for modulation, 8bit values of 80h are brightest (values +81h..FFh are "brighter than bright" allowing to make textures about twice as +bright as than they were originially stored in memory; of course the results +can't exceed the maximum brightness, ie. the 5bit values written to the +framebuffer are saturated to max 1Fh).

+

Texpage Attribute (Parameter for Textured-Polygons commands)

+

  0-8    Same as GP0(E1h).Bit0-8 (see there)
+  9-10   Unused (does NOT change GP0(E1h).Bit9-10)
+  11     Same as GP0(E1h).Bit11  (see there)
+  12-13  Unused (does NOT change GP0(E1h).Bit12-13)
+  14-15  Unused (should be 0)
+
+This attribute is used in all Textured-Polygons commands.

+

Clut Attribute (Color Lookup Table, aka Palette)

+

This attribute is used in all Textured Polygon/Rectangle commands. Of course, +it's relevant only for 4bit/8bit textures (don't care for 15bit textures).
+

  0-5    X coordinate X/16  (ie. in 16-halfword steps)
+  6-14   Y coordinate 0-511 (ie. in 1-line steps)  ;\on v0 GPU (max 1 MB VRAM)
+  15     Unused (should be 0)                      ;/
+  6-15   Y coordinate 0-1023 (ie. in 1-line steps) ;on v2 GPU (max 2 MB VRAM)
+
+Specifies the location of the CLUT data within VRAM.

+

GP0(E1h) - Draw Mode setting (aka "Texpage")

+

  0-3   Texture page X Base   (N*64) (ie. in 64-halfword steps)    ;GPUSTAT.0-3
+  4     Texture page Y Base 1 (N*256) (ie. 0, 256, 512 or 768)     ;GPUSTAT.4
+  5-6   Semi-transparency     (0=B/2+F/2, 1=B+F, 2=B-F, 3=B+F/4)   ;GPUSTAT.5-6
+  7-8   Texture page colors   (0=4bit, 1=8bit, 2=15bit, 3=Reserved);GPUSTAT.7-8
+  9     Dither 24bit to 15bit (0=Off/strip LSBs, 1=Dither Enabled) ;GPUSTAT.9
+  10    Drawing to display area (0=Prohibited, 1=Allowed)          ;GPUSTAT.10
+  11    Texture page Y Base 2 (N*512) (only for 2 MB VRAM)         ;GPUSTAT.15
+  12    Textured Rectangle X-Flip   (BIOS does set this bit on power-up...?)
+  13    Textured Rectangle Y-Flip   (BIOS does set it equal to GPUSTAT.13...?)
+  14-23 Not used (should be 0)
+  24-31 Command  (E1h)
+
+The GP0(E1h) command is required only for Lines, Rectangle, and +Untextured-Polygons (for Textured-Polygons, the data is specified in form of +the Texpage attribute; except that, Bits 9-10 can be changed only via GP0(E1h), +not via the Texpage attribute).
+Texture page colors setting 3 (reserved) is same as setting 2 (15bit).
+Bits 4 and 11 are the LSB and MSB of the 2-bit texture page Y coordinate. +Normally only bit 4 is used as retail consoles only have 1 MB VRAM. Setting bit +11 (Y>=512) on a retail console with a v2 GPU will result in textures +disappearing if 2 MB VRAM support was previously enabled using GP1(09h), as the +VRAM chip select will no longer be active. Bit 11 is always ignored by v0 GPUs +that do not support 2 MB VRAM.
+Note: GP0(00h) seems to be often inserted between Texpage and Rectangle +commands, maybe it acts as a NOP, which may be required between that commands, +for timing reasons...?

+

GP0(E2h) - Texture Window setting

+

  0-4    Texture window Mask X   (in 8 pixel steps)
+  5-9    Texture window Mask Y   (in 8 pixel steps)
+  10-14  Texture window Offset X (in 8 pixel steps)
+  15-19  Texture window Offset Y (in 8 pixel steps)
+  20-23  Not used (zero)
+  24-31  Command  (E2h)
+
+Mask specifies the bits that are to be manipulated, and Offset contains the new +values for these bits, ie. texture X/Y coordinates are adjusted as so:
+
  Texcoord = (Texcoord AND (NOT (Mask*8))) OR ((Offset AND Mask)*8)
+
+The area within a texture window is repeated throughout the texture page. The +data is not actually stored all over the texture page but the GPU reads the +repeated patterns as if they were there.

+

GP0(E3h) - Set Drawing Area top left (X1,Y1)

+

GP0(E4h) - Set Drawing Area bottom right (X2,Y2)

+

  0-9    X-coordinate (0..1023)
+  10-18  Y-coordinate (0..511)   ;\on v0 GPU (max 1 MB VRAM)
+  19-23  Not used (zero)         ;/
+  10-19  Y-coordinate (0..1023)  ;\on v2 GPU (max 2 MB VRAM)
+  20-23  Not used (zero)         ;/
+  24-31  Command  (Exh)
+
+Sets the drawing area corners. The Render commands GP0(20h..7Fh) are +automatically clipping any pixels that are outside of this region.

+

GP0(E5h) - Set Drawing Offset (X,Y)

+

  0-10   X-offset (-1024..+1023) (usually within X1,X2 of Drawing Area)
+  11-21  Y-offset (-1024..+1023) (usually within Y1,Y2 of Drawing Area)
+  22-23  Not used (zero)
+  24-31  Command  (E5h)
+
+If you have configured the GTE to produce vertices with coordinate "0,0" being +located in the center of the drawing area, then the Drawing Offset must be +"X1+(X2-X1)/2, Y1+(Y2-Y1)/2". Or, if coordinate "0,0" shall be the upper-left +of the Drawing Area, then Drawing Offset should be "X1,Y1". Where X1,Y1,X2,Y2 +are the values defined with GP0(E3h-E4h).

+

GP0(E6h) - Mask Bit Setting

+

  0     Set mask while drawing (0=TextureBit15, 1=ForceBit15=1)   ;GPUSTAT.11
+  1     Check mask before draw (0=Draw Always, 1=Draw if Bit15=0) ;GPUSTAT.12
+  2-23  Not used (zero)
+  24-31 Command  (E6h)
+
+When bit0 is off, the upper bit of the data written to the framebuffer is equal +to bit15 of the texture color (ie. it is set for colors that are marked as +"semi-transparent") (for untextured polygons, bit15 is set to zero).
+When bit1 is on, any (old) pixels in the framebuffer with bit15=1 are +write-protected, and cannot be overwritten by (new) rendering commands.
+The mask setting affects all rendering commands, as well as CPU-to-VRAM and +VRAM-to-VRAM transfer commands (where it acts on the separate halfwords, ie. as +for 15bit textures). However, Mask does NOT affect the Fill-VRAM command.
+This setting is used in games such as Metal Gear Solid and Silent Hill.

+

Note

+

GP0(E3h..E5h) do not take up space in the FIFO, so they are probably executed +immediately (even if there're still other commands in the FIFO). Best use them +only if you are sure that the FIFO is empty (otherwise the new Drawing Area +settings might accidentally affect older Rendering Commands in the FIFO).

+

GPU Memory Transfer Commands

+

The next three commands being described are when the high 3 bits are set to the +values 4 (100), 5 (101), and 6 (110). For them, the remaining 29 bits are ignored, +and can be set to any arbitrary value.

+

VRAM to VRAM blitting - command 4 (100)

+

  1st  Command
+  2nd  Source Coord      (YyyyXxxxh)  ;Xpos counted in halfwords
+  3rd  Destination Coord (YyyyXxxxh)  ;Xpos counted in halfwords
+  4th  Width+Height      (YsizXsizh)  ;Xsiz counted in halfwords
+
+Copies data within framebuffer. The transfer is affected by Mask setting.

+

CPU to VRAM blitting - command 5 (101)

+

  1st  Command
+  2nd  Destination Coord (YyyyXxxxh)  ;Xpos counted in halfwords
+  3rd  Width+Height      (YsizXsizh)  ;Xsiz counted in halfwords
+  ...  Data              (...)      <--- usually transferred via DMA
+
+Transfers data from CPU to frame buffer. If the number of halfwords to be sent +is odd, an extra halfword should be sent, as packets consist of 32bits words. The +transfer is affected by Mask setting.

+

VRAM to CPU blitting - command 6 (110)

+

  1st  Command                       ;\
+  2nd  Source Coord      (YyyyXxxxh) ; write to GP0 port (as usually)
+  3rd  Width+Height      (YsizXsizh) ;/
+  ...  Data              (...)       ;<--- read from GPUREAD port (or via DMA)
+
+Transfers data from frame buffer to CPU. Wait for bit27 of the status register +to be set before reading the image data. When the number of halfwords is odd, +an extra halfword is added at the end, as packets consist of 32bits words.

+

Masking and Rounding for FILL Command parameters

+

  Xpos=(Xpos AND 3F0h)                       ;range 0..3F0h, in steps of 10h
+  Ypos=(Ypos AND 1FFh)                       ;range 0..1FFh
+  Xsiz=((Xsiz AND 3FFh)+0Fh) AND (NOT 0Fh)   ;range 0..400h, in steps of 10h
+  Ysiz=((Ysiz AND 1FFh))                     ;range 0..1FFh
+
+Fill does NOT occur when Xsiz=0 or Ysiz=0 (unlike as for Copy commands). +Xsiz=400h works only indirectly: Param=400h is handled as Xsiz=0, however, +Param=3F1h..3FFh is rounded-up and handled as Xsiz=400h.

+

Note that because of the height (Ysiz) masking, a maximum of 511 rows can be +filled in a single command. Calling a fill with a full VRAM height of 512 rows +will be ineffective as the height will be masked to 0.

+

Masking for COPY Commands parameters

+

  Xpos=(Xpos AND 3FFh)                       ;range 0..3FFh
+  Ypos=(Ypos AND 1FFh)                       ;range 0..1FFh
+  Xsiz=((Xsiz-1) AND 3FFh)+1                 ;range 1..400h
+  Ysiz=((Ysiz-1) AND 1FFh)+1                 ;range 1..200h
+
+Parameters are just clipped to 10bit/9bit range, the only special case is that +Size=0 is handled as Size=max.

+

Notes

+

The coordinates for the above VRAM transfer commands are absolute framebuffer +addresses (not relative to Draw Offset, and not clipped to Draw Area).
+Non-DMA transfers seem to be working at any time, but GPU-DMA Transfers seem to +be working ONLY during V-Blank (outside of V-Blank, portions of the data appear +to be skipped, and the following words arrive at wrong addresses), unknown if +it's possible to change that by whatever configuration settings...? That +problem appears ONLY for continous DMA aka VRAM transfers (linked-list DMA aka +Ordering Table works even outside V-Blank).

+

Wrapping

+

If the Source/Dest starting points plus the width/height value exceed the +1024x512 pixel VRAM size, then the Copy/Fill operations wrap to the opposite +memory edge (without any carry-out from X to Y, nor from Y to X).

+

GPU Other Commands

+

GP0(1Fh) - Interrupt Request (IRQ1)

+

  1st  Command           (Cc000000h)                    ;GPUSTAT.24
+
+Requests IRQ1. Can be acknowledged via GP1(02h). This feature is rarely used.
+Note: The command is used by Blaze'n'Blade, but the game doesn't have IRQ1 +enabled, and the written value (1F801810h) looks more like an I/O address, +rather than like a command, so not sure if it's done intentionally, or if it is +just a bug.

+

GP0(03h) - Unknown?

+

Unknown. Doesn't seem to be used by any games. Unlike the "NOP" commands, +GP0(03h) does take up space in FIFO, so it is apparently not a NOP.

+

GP0(00h) - NOP (?)

+

This command doesn't take up space in the FIFO (eg. even if a VRAM-to-VRAM +transfer is still busy, one can send dozens of GP0(00h) commands, without the +command FIFO becoming full. So, either the command is ignored (or, if it has a +function, it is executed immediately, even while the transfer is busy).
+...
+GP0(00h) unknown, used with parameter = 08A16Ch... or rather 08FDBCh ... the +written value seems to be a bios/ram memory address, anded with 00FFFFFFh... +maybe a bios bug?
+GP0(00h) seems to be often inserted between Texpage and Rectangle commands, +maybe it acts as a NOP, which may be required between that commands, for timing +reasons...?

+

GP0(04h..1Eh,E0h,E7h..EFh) - Mirrors of GP0(00h) - NOP (?)

+

Like GP0(00h), these commands don't take up space in the FIFO. So, maybe, they +are same as GP0(00h), however, the Drawing Area/Offset commands GP0(E3h..E5h) +don't take up FIFO space either, so not taking up FIFO space doesn't +neccessarily mean that the command has no function.

+

GPU Display Control Commands (GP1)

+

GP1 Display Control Commands are sent by writing the 8bit Command number +(MSBs), and 24bit parameter (LSBs) to Port 1F801814h. Unlike GP0 commands, GP1 +commands are passed directly to the GPU (ie. they can be sent even when the +FIFO is full).

+

GP1(00h) - Reset GPU

+

  0-23  Not used (zero)
+
+Resets the GPU to the following values:
+
  GP1(01h)      ;clear fifo
+  GP1(02h)      ;ack irq (0)
+  GP1(03h)      ;display off (1)
+  GP1(04h)      ;dma off (0)
+  GP1(05h)      ;display address (0)
+  GP1(06h)      ;display x1,x2 (x1=200h, x2=200h+256*10)
+  GP1(07h)      ;display y1,y2 (y1=010h, y2=010h+240)
+  GP1(08h)      ;display mode 320x200 NTSC (0)
+  GP0(E1h..E6h) ;rendering attributes (0)
+
+Accordingly, GPUSTAT becomes 14802000h. The x1,y1 values are too small, ie. the +upper-left edge isn't visible. Note that GP1(09h) is NOT affected by the reset +command.

+

GP1(01h) - Reset Command Buffer

+

  0-23  Not used (zero)
+
+Resets the command buffer and CLUT cache.

+

GP1(02h) - Acknowledge GPU Interrupt (IRQ1)

+

  0-23  Not used (zero)                                        ;GPUSTAT.24
+
+Resets the IRQ flag in GPUSTAT.24. The flag can be set via GP0(1Fh).

+

GP1(03h) - Display Enable

+

  0     Display On/Off   (0=On, 1=Off)                         ;GPUSTAT.23
+  1-23  Not used (zero)
+
+Turns display on/off. "Note that a turned off screen still gives the flicker of +NTSC on a PAL screen if NTSC mode is selected."
+The "Off" settings displays a black picture (and still sends /SYNC signals to +the television set). (Unknown if it still generates vblank IRQs though?)

+

GP1(04h) - DMA Direction / Data Request

+

  0-1  DMA Direction (0=Off, 1=FIFO, 2=CPUtoGP0, 3=GPUREADtoCPU) ;GPUSTAT.29-30
+  2-23 Not used (zero)
+
+Notes: Manually sending/reading data by software (non-DMA) is ALWAYS possible, +regardless of the GP1(04h) setting. The GP1(04h) setting does affect the +meaning of GPUSTAT.25.

+

Display start/end

+

Specifies where the display area is positioned on the screen, and how much data +gets sent to the screen. The screen sizes of the display area are valid only if +the horizontal/vertical start/end values are default. By changing these you can +get bigger/smaller display screens. On most TV's there is some black around the +edge, which can be utilised by setting the start of the screen earlier and the +end later. The size of the pixels is NOT changed with these settings, the GPU +simply sends more data to the screen. Some monitors/TVs have a smaller display +area and the extended size might not be visible on those sets. "(Mine is +capable of about 330 pixels horizontal, and 272 vertical in 320*240 mode)"

+

GP1(05h) - Start of Display area (in VRAM)

+

  0-9   X (0-1023)    (halfword address in VRAM)  (relative to begin of VRAM)
+  10-18 Y (0-511)     (scanline number in VRAM)   (relative to begin of VRAM)
+  19-23 Not used (zero)
+
+Upper/left Display source address in VRAM. The size and target position on +screen is set via Display Range registers; target=X1,Y2; +size=(X2-X1/cycles_per_pix), (Y2-Y1).
+Unknown if using Y values in 512-1023 range is supported (with 2 MB VRAM).

+

GP1(06h) - Horizontal Display range (on Screen)

+

  0-11   X1 (260h+0)       ;12bit       ;\counted in video clock units,
+  12-23  X2 (260h+320*8)   ;12bit       ;/relative to HSYNC
+
+Specifies the horizontal range within which the display area is displayed. For +resolutions other than 320 pixels it may be necessary to fine adjust the value +to obtain an exact match (eg. X2=X1+pixels*cycles_per_pix).
+The number of displayed pixels per line is "(((X2-X1)/cycles_per_pix)+2) AND +NOT 3" (ie. the hardware is rounding the width up/down to a multiple of 4 +pixels).
+Most games are using a width equal to the horizontal resolution (ie. 256, 320, +368, 512, 640 pixels). A few games are using slightly smaller widths (probably +due to programming bugs). Pandemonium 2 is using a bigger "overscan" width +(ensuring an intact picture without borders even on mis-calibrated TV sets).
+The 260h value is the first visible pixel on normal TV Sets, this value is used +by MOST NTSC games, and SOME PAL games (see below notes on Mis-Centered PAL +games).
+Video clock unit used depends on console region, regardless of NTSC/PAL video +mode set by GP1(08h).3; see section on nominal video clocks +for values.

+

GP1(07h) - Vertical Display range (on Screen)

+

  0-9   Y1 (NTSC=88h-(240/2), (PAL=A3h-(288/2))  ;\scanline numbers on screen,
+  10-19 Y2 (NTSC=88h+(240/2), (PAL=A3h+(288/2))  ;/relative to VSYNC
+  20-23 Not used (zero)
+
+Specifies the vertical range within which the display area is displayed. The +number of lines is Y2-Y1 (unlike as for the width, there's no rounding applied +to the height). If Y2 is set to a much too large value, then the hardware stops +to generate vblank interrupts (IRQ0).
+The 88h/A3h values are the middle-scanlines on normal TV Sets, these values are +used by MOST NTSC games, and SOME PAL games (see below notes on Mis-Centered +PAL games).
+The 240/288 values are for fullscreen pictures. Many NTSC games display 240 +lines, but on most analog television sets, only 224 lines are visible (8 lines +of overscan on top and 8 lines of overscan on bottom). Many PAL games display +only 256 lines (underscan with black borders).
+Some games such as Chrono Cross will occasionally adjust these values to create +a screen shake effect, so proper emulation of this command is necessary for +those particular cases.

+

GP1(08h) - Display mode

+

  0-1   Horizontal Resolution 1     (0=256, 1=320, 2=512, 3=640) ;GPUSTAT.17-18
+  2     Vertical Resolution         (0=240, 1=480, when Bit5=1)  ;GPUSTAT.19
+  3     Video Mode                  (0=NTSC/60Hz, 1=PAL/50Hz)    ;GPUSTAT.20
+  4     Display Area Color Depth    (0=15bit, 1=24bit)           ;GPUSTAT.21
+  5     Vertical Interlace          (0=Off, 1=On)                ;GPUSTAT.22
+  6     Horizontal Resolution 2     (0=256/320/512/640, 1=368)   ;GPUSTAT.16
+  7     Flip screen horizontally    (0=Off, 1=On, v1 only)       ;GPUSTAT.14
+  8-23  Not used (zero)
+
+Note: Interlace must be enabled to see all lines in 480-lines mode (interlace +causes ugly flickering, so a non-interlaced low resolution image typically has +better quality than a high resolution interlaced image, a pretty bad example +is the intro screens shown by the BIOS). The Display Area Color Depth bit does +NOT affect GP0 draw commands, which always draw in 15 bit. However, the +Vertical Interlace flag DOES affect GP0 draw commands.
+Bit 7 is known as "reverseflag" and can reportedly be used on (v1?) +arcade/prototype GPUs to flip the screen horizontally. On a v2 GPU setting this +bit corrupts the display output, possibly due to leftovers of the v1 GPU's +screen flipping circuitry still being present.

+

GP1(10h) - Read GPU internal register

+

GP1(11h..1Fh) - Mirrors of GP1(10h), Read GPU internal register

+

After sending the command, the result can be read (immediately) from GPUREAD +register (there's no NOP or other delay required) (namely GPUSTAT.Bit27 is used +only for VRAM reads, but NOT for register reads, so do not try to wait for that +flag).
+

  0-23  Register index (via following GPUREAD)
+
+On v0 GPUs, the following indices are supported:
+
  00h-01h = Returns Nothing (old value in GPUREAD remains unchanged)
+  02h     = Read Texture Window setting  ;GP0(E2h) ;20bit/MSBs=Nothing
+  03h     = Read Draw area top left      ;GP0(E3h) ;19bit/MSBs=Nothing
+  04h     = Read Draw area bottom right  ;GP0(E4h) ;19bit/MSBs=Nothing
+  05h     = Read Draw offset             ;GP0(E5h) ;22bit
+  06h-07h = Returns Nothing (old value in GPUREAD remains unchanged)
+  08h-FFFFFFh = Mirrors of 00h..07h
+
+On v2 (and v1?) GPUs, the following indices are supported:
+
  00h-01h = Returns Nothing (old value in GPUREAD remains unchanged)
+  02h     = Read Texture Window setting  ;GP0(E2h) ;20bit/MSBs=Nothing
+  03h     = Read Draw area top left      ;GP0(E3h) ;20bit/MSBs=Nothing
+  04h     = Read Draw area bottom right  ;GP0(E4h) ;20bit/MSBs=Nothing
+  05h     = Read Draw offset             ;GP0(E5h) ;22bit
+  06h     = Returns Nothing (old value in GPUREAD remains unchanged)
+  07h     = Read GPU version (1 or 2)
+  08h     = Unknown (Returns 00000000h) (lightgun? VRAM size set via GP1(09h)?)
+  09h-0Fh = Returns Nothing (old value in GPUREAD remains unchanged)
+  10h-FFFFFFh = Mirrors of 00h..0Fh
+
+The selected data is latched in GPUREAD, the same/latched value can be read +multiple times, but, the latch isn't automatically updated when changing GP0 +registers.

+

GP1(09h) - Set VRAM size (v2)

+

  0     Allow Y coordinates in 512-1023 range (0=No/wrap to 0-511, 1=Yes)
+  1-23  Unknown (seems to have no effect)
+
+Controls whether or not GP0(E1h).bit11 can be used to reference textures in the +second half of VRAM on systems with 2 MB VRAM (possibly affects drawing/display +area commands and DMA transfers as well). The GPU has two separate chip select +outputs for the first and second half; on a retail console only the first output +is used, so enabling this feature will result in textures disappearing if +GP0(E1h).bit11 is also set.
+GP1(09h) is supported only on v2 GPUs; v0 GPUs don't support 2 MB VRAM at all +and v1 seems to use command GP1(20h) instead.

+

GP1(20h) - Set VRAM size (v1)

+

  0-23  Unknown (501h=1 MB, 504h=2 MB, or so?)
+
+Seems to be used only on v1 arcade/prototype GPUs. Regular v2 GPUs use GP1(09h) +instead of GP1(20h).

+

GP1(0Bh) - Unknown/Internal?

+

  0-10  Unknown (GPU crashes after a while when set to 274h..7FFh)
+  11-23 Unknown (seems to have no effect)
+
+The register doesn't seem to be used by any games.

+

GP1(0Ah,0Ch..0Fh,21h..3Fh) - N/A

+

Not used?

+

GP1(40h..FFh) - N/A (Mirrors)

+

Mirrors of GP1(00h..3Fh).

+

Mis-Centered PAL Games (wrong GP1(06h)/GP1(07h) settings)

+

NTSC games are typically well centered (using X1=260h, and Y1/Y2=88h+/-N).
+PAL games should be centered as X1=260h, and Y1/Y2=A3h+/-N) - these values +would be looking well on a Philips Philetta TV Set, and do also match up with +other common picture positions (eg. as used by Nintendo's SNES console).
+However, most PAL games are using completely different "random" centering +values (maybe caused by different developers trying to match the centering to +the different TV Sets) (although it looks more as if the PAL developers just +went amok: Many PAL games are even using different centerings for their Intro, +Movie, and actual Game sequences).
+In result, most PAL games are looking like crap when playing them on a real +PSX. For PSX emulators it may be recommended to ignore the GP1(06h)/GP1(07h) +centering, and instead, apply auto-centering to PAL games.
+For PAL game developers, it may be recommended to add a screen centering option +(as found in Tomb Raider 3, for example). Unknown if this is really required... +or if X1=260h, and Y1/Y2=A3h+/-N would work fine on most or all PAL TV Sets?

+

GPU Status Register

+

1F801814h - GPUSTAT - GPU Status Register (R)

+

  0-3   Texture page X Base   (N*64)                              ;GP0(E1h).0-3
+  4     Texture page Y Base 1 (N*256) (ie. 0, 256, 512 or 768)    ;GP0(E1h).4
+  5-6   Semi-transparency     (0=B/2+F/2, 1=B+F, 2=B-F, 3=B+F/4)  ;GP0(E1h).5-6
+  7-8   Texture page colors   (0=4bit, 1=8bit, 2=15bit, 3=Reserved)GP0(E1h).7-8
+  9     Dither 24bit to 15bit (0=Off/strip LSBs, 1=Dither Enabled);GP0(E1h).9
+  10    Drawing to display area (0=Prohibited, 1=Allowed)         ;GP0(E1h).10
+  11    Set Mask-bit when drawing pixels (0=No, 1=Yes/Mask)       ;GP0(E6h).0
+  12    Draw Pixels           (0=Always, 1=Not to Masked areas)   ;GP0(E6h).1
+  13    Interlace Field       (or, always 1 when GP1(08h).5=0)
+  14    Flip screen horizontally (0=Off, 1=On, v1 only)           ;GP1(08h).7
+  15    Texture page Y Base 2 (N*512) (only for 2 MB VRAM)        ;GP0(E1h).11
+  16    Horizontal Resolution 2     (0=256/320/512/640, 1=368)    ;GP1(08h).6
+  17-18 Horizontal Resolution 1     (0=256, 1=320, 2=512, 3=640)  ;GP1(08h).0-1
+  19    Vertical Resolution         (0=240, 1=480, when Bit22=1)  ;GP1(08h).2
+  20    Video Mode                  (0=NTSC/60Hz, 1=PAL/50Hz)     ;GP1(08h).3
+  21    Display Area Color Depth    (0=15bit, 1=24bit)            ;GP1(08h).4
+  22    Vertical Interlace          (0=Off, 1=On)                 ;GP1(08h).5
+  23    Display Enable              (0=Enabled, 1=Disabled)       ;GP1(03h).0
+  24    Interrupt Request (IRQ1)    (0=Off, 1=IRQ)       ;GP0(1Fh)/GP1(02h)
+  25    DMA / Data Request, meaning depends on GP1(04h) DMA Direction:
+          When GP1(04h)=0 ---> Always zero (0)
+          When GP1(04h)=1 ---> FIFO State  (0=Full, 1=Not Full)
+          When GP1(04h)=2 ---> Same as GPUSTAT.28
+          When GP1(04h)=3 ---> Same as GPUSTAT.27
+  26    Ready to receive Cmd Word   (0=No, 1=Ready)  ;GP0(...) ;via GP0
+  27    Ready to send VRAM to CPU   (0=No, 1=Ready)  ;GP0(C0h) ;via GPUREAD
+  28    Ready to receive DMA Block  (0=No, 1=Ready)  ;GP0(...) ;via GP0
+  29-30 DMA Direction (0=Off, 1=?, 2=CPUtoGP0, 3=GPUREADtoCPU)    ;GP1(04h).0-1
+  31    Drawing even/odd lines in interlace mode (0=Even or Vblank, 1=Odd)
+
+In 480-lines mode, bit31 changes per frame. And in 240-lines mode, the bit +changes per scanline. The bit is always zero during Vblank (vertical retrace +and upper/lower screen border).

+

Note

+

Further GPU status information can be retrieved via GP1(10h) and GP0(C0h).

+

Ready Bits

+

Bit28: Normally, this bit gets cleared when the command execution is busy (ie. +once when the command and all of its parameters are received), however, for +Polygon and Line Rendering commands, the bit gets cleared immediately after +receiving the command word (ie. before receiving the vertex parameters). The +bit is used as DMA request in DMA Mode 2, accordingly, the DMA would probably +hang if the Polygon/Line parameters are transferred in a separate DMA block +(ie. the DMA probably starts ONLY on command words).
+Bit27: Gets set after sending GP0(C0h) and its parameters, and stays set until +all data words are received; used as DMA request in DMA Mode 3.
+Bit26: Gets set when the GPU wants to receive a command. If the bit is cleared, +then the GPU does either want to receive data, or it is busy with a command +execution (and doesn't want to receive anything).
+Bit25: This is the DMA Request bit, however, the bit is also useful for non-DMA +transfers, especially in the FIFO State mode.

+

GPU Versions

+

Summary of GPU Differences

+

  Differences...                v0 (160-pin)            v1 (208-pin prototype)  v2 (208-pin)
+  GPU Chip                      CXD8514Q                CXD8538Q                CXD8561Q/BQ/CQ/CXD9500Q
+  Mainboard                     EARLY-PU-8 and below    Arcade boards only      LATE-PU-8 and up
+  Memory Type                   Dual-ported VRAM        Dual-ported VRAM?       Normal DRAM
+  GPUSTAT.13 when interlace=off always 0                unknown                 always 1
+  GPUSTAT.14                    always 0                screen flip             nonfunctional screen flip
+  GPUSTAT.15                    always 0                always 0?               bit1 of texpage Y base
+  GP1(10h:index3..4)            19-bit (1 MB VRAM)      22-bit (2 MB VRAM)      20-bit (2 MB VRAM)
+  GP1(10h:index7)               N/A                     00000001h version       00000002h version
+  GP1(10h:index8)               mirror of index0        00000000h zero          00000000h zero
+  GP1(10h:index9..F)            mirror of index1..7     unknown                 N/A
+  GP1(09h)                      N/A                     N/A                     VRAM size
+  GP1(20h)                      N/A                     VRAM size/settings      N/A
+  GP0(E1h).bit11                N/A                     N/A                     bit1 of texpage Y base
+  GP0(E1h).bit12/13             without x/y-flip        without x/y-flip        with x/y-flip
+  GP0(03h)                      N/A (no stored in fifo) unknown                 unknown/unused command
+  Shaded Textures               ((color/8)*texel)/2     unknown                 (color*texel)/16
+  GP0(02h) FillVram             xpos.bit0-3=0Fh=bugged  unknown                 xpos.bit0-3=ignored
+
+  dma-to-vram: doesn't work with blksiz>10h (v2 gpu works with blksiz=8C0h!)
+  dma-to-vram: MAYBE also needs extra software-handshake to confirm DMA done?
+   320*224 pix = 11800h pix = 8C00h words
+
+The CXD8538Q (v1) GPU was only ever used in some arcade boards. Among other +things, this GPU seems to use completely different drawing commands and has some +additional functionality not available on v0/v2 GPUs (reportedly GP1(08h).bit7 +can be used to flip the screen horizontally?). It may however have a smaller +texture cache or no cache at all, which would explain why the screen flipping +feature had to be removed from v2 to make room on the die for the cache.
+There is another arcade-only GPU revision, the CXD8654Q (v2b). It seems to use +the same commands as regular v2 GPUs, but the differences between v2b and v2 are +currently unknown.

+

Shaded Textures

+

The v0 GPU crops 8:8:8 bit gouraud shading color to 5:5:5 bit before multiplying +it with the texture color, resulting in rather poor graphics. For example, the +snow scence in the first level of Tomb Raider I looks a lot smoother on v2 GPUs. +This bug was presumably already fixed on the v1 prototype GPU (unconfirmed).
+The cropped colors are looking a bit as if dithering would be disabled +(although, technically dithering works fine, but due to the crippled color +input, it's always using the same dither pattern per 8 intensities, instead of +using 8 different dither patterns).

+

Memory/Rendering Timings

+

The v0 GPU uses two Dual-ported VRAM chips (each with two 16bit databusses, +one for CPU/DMA/rendering access, and one for output to the video DAC). The New +GPU uses s normal DRAM chip (with single 32bit databus).
+The exact timing differences are unknown, but the different memory types should +result in quite different timings:
+The v0 GPU might perform better on non-32bit aligned accesses, and on memory +accesses performed simultaneously with DAC output.
+On the other hand, the v2 GPU's DRAM seems to be faster in some cases (for +example, during Vblank, it's fast enough to perform DMA's with blksiz>10h, +which exceeds the GPU's FIFO size, and causes lost data on v0 GPUs).

+

X/Y-Flip and PSone 2 MB VRAM

+

The X/Y-flipping feature may be used by arcade games (provided that the arcade +board is fitted with v2 GPUs). The flipping feature does also work on retail +consoles with v2 GPUs, but PSX games should never use that feature (for +maintaining compatiblity with older PSX consoles).
+Some PSone consoles seem to be fitted with 2 MB VRAM chips (maybe because +smaller chips had not been in production anymore), but only the first 1 MB +region is accessible. However, as all PSone models use a v2 GPU which supports +2 MB VRAM, it should be possible to rewire the chip selects to make the upper +half accessible.

+

GPU Detection (and optional VRAM size switching)

+

Below is slightly customized GPU Detection function taken from Perfect Assassin +(the index7 latching works ONLY on v1/v2 GPUs, whilst v0 GPUs would leave the +latched value unchanged; as a workaround, the index4 latching is used to ensure +that the latch won't contain 000002h on v0 GPUs, assuming that index4 is never +set to 000002h).
+

  [1F801814h]=10000004h       ;GP1(10h).index4 (latch draw area bottom right)
+  [1F801814h]=10000007h       ;GP1(10h).index7 (latch GPU version, if any)
+  if ([1F801810h] AND 00FFFFFFh)=00000002h then goto @@gpu_v2
+  [1F801810h]=([1F801814h] AND 3FFFh) OR E1001000h ;change GPUSTAT via GP0(E1h)
+  dummy=[1F801810h]           ;dummy read (unknown purpose)
+  if ([1F801814h] AND 00001000h) then goto @@gpu_v1 else goto @@gpu_v0
+ ;---
+ @@gpu_v0:
+  return 0
+ ;---
+ @@gpu_v1:
+  if want_2mb_vram then [1F801814h]=20000504h  ;GP1(20h)
+  return 1
+ ;---
+ @@gpu_v2:
+  if want_2mb_vram then [1F801814h]=09000001h  ;GP1(09h)
+  return 2
+

+

GP0(02h) FillVram

+

The FillVram command does normally ignore the lower 4bit of the x-coordinate +(and software should always set those bits to zero). However, if the 4bits are +all set, then the old v0 GPU does write each 2nd pixel to wrong memory address. +For example, a 32x4 pixel fill produces following results for x=0..1Fh:
+

  0h              10h             20h             30h             40h
+  |               |               |               |               |
+  ################################                                 ;\x=00h..0Eh
+  ################################                                 ; and, x=0Fh
+  ################################                                 ; on v2 GPU
+  ################################                                 ;/
+   # # # # # # # ################## # # # # # # #                  ;\
+   # # # # # # # ################## # # # # # # #                  ; x=0Fh
+   # # # # # # # ################## # # # # # # #                  ; on v0 GPU
+   # # # # # # # ################## # # # # # # #                  ;/
+                  ################################                 ;\x=10h..1Eh
+                  ################################                 ; and, x=1Fh
+                  ################################                 ; on v2 GPU
+                  ################################                 ;/
+                   # # # # # # # ################## # # # # # # #  ;\
+                   # # # # # # # ################## # # # # # # #  ; x=1Fh
+                   # # # # # # # ################## # # # # # # #  ; on v0 GPU
+                   # # # # # # # ################## # # # # # # #  ;/
+

+

GPU Depth Ordering

+

Absent Depth Buffer

+

The PlayStation's GPU stores only RGB colors in the framebuffer (ie. unlike +modern 3D processors, it's NOT buffering Depth values; leaving apart the Mask +bit, which could be considered as a tiny 1bit "Depth" or "Priority" value). In +fact, the GPU supports only X,Y coordinates, and it's totally unaware of Z +coordinates. So, when rendering a polygon, the hardware CANNOT determine which +of the new pixels are in front/behind of the old pixels in the buffer.

+

Simple Ordering

+

The rendering simply takes place in the ordering as the data is sent to the GPU +(ie. the most distant objects should be sent first). For 2D graphics, it's +fairly easy follow that order (eg. even multi-layer 2D graphics can be using +DMA2-continous mode).

+

Depth Ordering Table (OT)

+

For 3D graphics, the ordering of the polygons may change more or less randomly +(eg. when rotating/moving the camera). To solve that problem, the whole +rendering data is usually first stored in a Depth Ordering Table (OT) in Main +RAM, and, once when all polygons have been stored in the OT, the OT is sent to +the GPU via "DMA2-linked-list" mode.

+

Initializing an empty OT (via DMA6)

+

DMA channel 6 can be used to set up an empty linked list, in which each entry +points to the previous:
+

  DPCR    - enable bits                                 ;Example=x8xxxxxxh
+  D6_MADR - pointer to the LAST table entry             ;Example=8012300Ch
+  D6_BCR  - number of list entries                      ;Example=00000004h
+  D6_CHCR - control bits (should be 11000002h)          ;Example=11000002h
+
+Each entry has a size of 00h words (upper 8bit), and a pointer to the previous +entry (lower 24bit). With the above Example values, the generated table would +look like so:
+
  [80123000h]=00FFFFFFh  ;1st entry, points to end code (xxFFFFFFh)
+  [80123004h]=00123000h  ;2nd entry, points to 1st entry
+  [80123008h]=00123004h  ;3rd entry, points to 2nd entry
+  [8012300Ch]=00123008h  ;last entry, points to 3rd entry (table entrypoint)
+

+

Inserting Entries (Passing GTE data to the OT) (by software)

+

The GTE commands AVSZ3 and AVSZ4 can be used to calculate the Average Z +coordinates of a polygon (based on its three or four Z coordinates). The result +is returned as a 16bit Z value in GTE register OTZ, the commands do also allow +to divide the result, to make it less than 16bit (the full 16bit would require +an OT of 256KBytes - for the EMPTY table, which would be a waste of memory, and +which would slowdown the DMA2/DMA6 operations) (on the other hand, a smaller +table means less depth resolution).
+

  [PacketAddr+0]      = [80123000h+OTZ*4] + (N SHL 24)   <--internal link chain
+  [PacketAddr+4..N*4] = GP0 Command(s) and Parameters    <--data (send to GP0)
+  [80123000h+OTZ*4]   = PacketAddr AND FFFFFFh           <--internal link chain
+
+If there's been already an entry (at the same OTZ index), then the new polygon +will be processed first (ie. it will appear "behind" of the old entry).
+Not sure if the packet size must be limited to max N=16 words (ie. as for the +DMA2-continous block size) (due to GP0 FIFO size limits)?

+

Sending the OT to the CPU (via DMA2-linked-list mode)

+
  1 - Wait until GPU is ready to receive commands ;GPUSTAT.28
+  2 - Enable DMA channel 2                  ;DPCR
+  3 - Set GPU to DMA cpu->gpu mode          ;[GP1]=04000002h aka GP1(04h)
+  3 - Set D2_MADR to the start of the list  ;(LAST Entry) ;Example=80123010h
+  4 - Set D2_BCR to zero                    ;(length unused, end at END-CODE)
+  5 - Set D2_CHCR to link mode, mem->GPU and dma enable   ;=01000401h
+
+

GPU Video Memory (VRAM)

+

Framebuffer

+

The framebuffer contains the image that is to be output to the Television Set. +The GPU supports 10 resolutions, with 16bit or 24bit per pixel.
+

  Resolution  16bit      24bit      |  Resolution  16bit      24bit
+  256x240     120Kbytes  180Kbytes  |  256x480     240Kbytes  360Kbytes
+  320x240     150Kbytes  225Kbytes  |  320x480     300Kbytes  450Kbytes
+  368x240     xx0Kbytes  xx0Kbytes  |  368x480     xx0Kbytes  xx0Kbytes
+  512x240     240Kbytes  360Kbytes  |  512x480     480Kbytes  720Kbytes
+  640x240     300Kbytes  450Kbytes  |  640x480     600Kbytes  900Kbytes
+
+Note: In most cases, you'll need TWO framebuffers (one being displayed, and +used as rendering target) (unless you are able to draw the whole new image +during vblank, or unless when using single-layer 2D graphics). So, resolutions +that occupy more than 512K would exceed the available 1MB VRAM when using 2 +buffers. Also, high resolutions mean higher rendering load, and less texture +memory.
+
<B>  15bit Direct Display (default) (works with polygons, lines, rectangles)</B>
+  0-4   Red       (0..31)
+  5-9   Green     (0..31)
+  10-14 Blue      (0..31)
+  15    Mask flag (0=Normal, 1=Do not allow to overwrite this pixel)
+<B>  24bit Direct Display (works ONLY with direct vram transfers)</B>
+  0-7    Red      (0..255)
+  8-15   Green    (0..255)
+  16-23  Blue     (0..255)
+
+Note: The 24bit pixels occupy 3 bytes (not 4 bytes with unused MSBs), so each 6 +bytes contain two 24bit pixels. The 24bit display mode works only with VRAM +transfer commands like GP0(A0h); the rendering commands GP0(20h..7Fh) cannot +output 24bit data. Ie. 24bit mode is used mostly for MDEC videos (and some 2D +games like Heart of Darkness).

+

Texture Bitmaps

+

A texture is an image put on a polygon or sprite. The data of a texture can be +stored in 3 different modes:
+

<B>  16bit Texture (Direct Color)             ;(One 256x256 page = 128Kbytes)</B>
+  0-4   Red       (0..31)         ;\Color 0000h        = Fully-transparent
+  5-9   Green     (0..31)         ; Color 0001h..7FFFh = Non-transparent
+  10-14 Blue      (0..31)         ; Color 8000h..FFFFh = Semi-transparent (*)
+  15    Semi-transparency Flag    ;/(*) or Non-transparent for opaque commands
+<B>  8bit Texture (256 Color Palette)         ;(One 256x256 page = 64Kbytes)</B>
+  0-7   Palette index for 1st pixel (left)
+  8-15  Palette index for 2nd pixel (right)
+<B>  4bit Texture (16 Color Palette)          ;(One 256x256 page = 32Kbytes)</B>
+  0-3   Palette index for 1st pixel (left)
+  4-7   Palette index for 2nd pixel (middle/left)
+  8-11  Palette index for 3rd pixel (middle/right)
+  12-15 Palette index for 4th pixel (right)
+
+A Texture Page is a 256x256 texel region in VRAM (the Polygon rendering +commands are using Texcoords with 8bit X,Y coordinates, so polygons cannot use +textures bigger than 256x256) (the Rectangle rendering commands with +width/height parameters could theoretically use larger textures, but the +hardware clips their texture coordinates to 8bit, too).
+The GP0(E2h) Texture Window (aka Texture Repeat) command can be used to reduce +the texture size to less than 256x256 texels.
+The Texture Pages can be located in the frame buffer on X multiples of 64 +halfwords and Y multiples of 256 lines.

+

Texture Palettes - CLUT (Color Lookup Table)

+

The clut is a the table where the colors are stored for the image data in the +CLUT modes. The pixels of those images are used as indexes to this table. The +clut is arranged in the frame buffer as a 256x1 image for the 8bit clut mode, +and a 16x1 image for the 4bit clut mode.
+

  0-4   Red       (0..31)         ;\Color 0000h        = Fully-transparent
+  5-9   Green     (0..31)         ; Color 0001h..7FFFh = Non-transparent
+  10-14 Blue      (0..31)         ; Color 8000h..FFFFh = Semi-transparent (*)
+  15    Semi-transparency Flag    ;/(*) or Non-transparent for opaque commands
+
+The clut data can be arranged in the frame buffer at X multiples of 16 +(X=0,16,32,48,etc) and anywhere in the Y range of 0-511 (0-1023 if 2 MB VRAM is +present).

+

Texture Color Black Limitations

+

On the PSX, texture color 0000h is fully-transparent, that means textures +cannot contain Black pixels. However, in some cases, Color 8000h (Black with +semi-transparent flag) can be used, depending on the rendering command:
+

  opaque command, eg. GP0(24h)      --> 8000h = Non-Transparent Black
+  semi-transp command, eg. GP0(26h) --> 8000h = Semi-Transparent Black
+
+So, with semi-transparent rendering commands, it isn't possible to use +Non-Transparent Black pixels in textures, the only workaround is to use colors +like 0001h (dark red) or 0400h (dark blue). However, on some monitors with +particularly high gamma, these colors might be clearly visible to be brighter +than black.

+

GPU Texture Caching

+

The GPU has 2 Kbyte Texture Cache
+There is also a CLUT cache that is preserved between GPU drawing commands. The +CLUT cache is invalidated when different CLUT index values are used or when +GP0(01h) is issued.
+If polygons with texture are displayed, the GPU needs to read these from the +frame buffer. This slows down the drawing process, and as a result the number +of polygons that can be drawn in a given timespan. To speed up this process the +GPU is equipped with a texture cache, so a given piece of texture needs not to +be read multiple times in succession.
+The texture cache size depends on the color mode used for the textures.
+In 4 bit CLUT mode it has a size of 64x64, in 8 bit CLUT it's 32x64 and in +15bitDirect is 32x32. A general speed up can be achieved by setting up textures +according to these sizes. For further speed gain a more precise knowledge of +how the cache works is necessary.

+

Cache blocks

+

The texture page is divided into non-overlapping cache blocks, each of a unit +size according to color mode. These cache blocks are tiled within the texture +page.
+

  +-----+-----+-----+--
+  |cache|     |     |
+  |block|     |
+  |    0|   1 |    2   ..
+  +-----+-----+--
+  |..   |     |
+

+

Cache entries

+

Each cache block is divided into 256 cache entries, which are numbered +sequentially, and are 8 bytes wide. So a cache entry holds 16 4bit clut pixels +8 8bit clut pixels, or 4 15bitdirect pixels.
+

  4bit and 8bit clut:        15bitdirect:
+  +----+----+----+----+     +----+----+----+----+----+----+----+----+
+  |   0|   1|   2|   3|     |   0|   1|   2|   3|   4|   5|   6|   7|
+  +----+----+----+----+     +----+----+----+----+----+----+----+----+
+  |   4|   5|   6|   7|     |   8|   9|   a|   b|   c|   d|   e|   f|
+  +----+----+----+----+     +----+----+----+----+----+----+----+----+
+  |   8|   9|  ..           |  10|  11|  ..
+  +----+----+--             +----+----+--
+  |   c|  ..|               |  18|  ..|
+  +----+--                  +----+--
+  |  ..                     |  ..
+
+The cache can hold only one cache entry by the same number, so if f.e. a piece +of texture spans multiple cache blocks and it has data on entry 9 of block 1, +but also on entry 9 of block 2, these cannot be in the cache at once.

+

GPU Timings

+

Nominal Video Clock

+

  NTSC video clock = 53.693175 MHz
+  PAL video clock  = 53.203425 MHz
+
+Consoles will always use the video clock for its region, regardless of the GPU +being configured in NTSC or PAL output mode, because an NTSC console lacks a PAL +reference clock and vice versa. Without modifications for an additional +oscillator for the other region, consoles may experience drift over time when +playing content from a different video region. See vertical refresh rates below.

+

Vertical Video Timings

+

  263 scanlines per field for NTSC non-interlaced
+  262.5 scanlines per field for NTSC interlaced
+
+  314 scanlines per field for PAL non-interlaced
+  312.5 scanlines per field for PAL interlaced
+
+Horizontal blanking and vertical blanking signals occur on the video output side +as expected for NTSC/PAL signals. These are not necessarily the same as the +timer/interrupt HBLANK and VBLANK.

+

Vertical Refresh Rates

+

  NTSC mode on NTSC video clock
+  Interlaced:     59.940 Hz
+  Non-interlaced: 59.826 Hz
+
+  PAL mode on PAL video clock
+  Interlaced:     50.000 Hz
+  Non-interlaced: 49.761 Hz
+
+  NTSC mode on PAL video clock
+  Interlaced:     59.393 Hz
+  Non-interlaced: 59.280 Hz
+
+  PAL mode on NTSC video clock
+  Interlaced:     50.460 Hz
+  Non-interlaced: 50.219 Hz
+
+For emulation purposes, it's recommended to use an NTSC video clock when running +NTSC content (or in NTSC mode) and a PAL clock when running PAL content (or in +PAL mode).

+

TODO: Derivations for vertical refresh rates; horizontal timing notes

+

Nocash's original GPU Timings notes:

+

Video Clock

+

The PSone/PAL video clock is the cpu clock multiplied by 11/7.
+

  CPU Clock   =  33.868800MHz (44100Hz*300h)
+  Video Clock =  53.222400MHz (44100Hz*300h*11/7)
+
+For other PSX/PSone PAL/NTSC variants, see:
+Pinouts - CLK Pinouts

+

Vertical Timings

+

  PAL:  314 scanlines per frame (13Ah)
+  NTSC: 263 scanlines per frame (107h)
+
+Timer1 can use the hblank signal as input, allowing to count scanlines (unless +the display is configured to 0 pixels width, which would cause an endless +hblank). The hblank signal is generated even during vertical blanking/retrace.

+

Horizontal Timings

+

  PAL:  3406 video cycles per scanline (or 3406.1 or so?)
+  NTSC: 3413 video cycles per scanline (or 3413.6 or so?)
+
+Dotclocks:
+
  PSX.256-pix Dotclock =  5.322240MHz (44100Hz*300h*11/7/10)
+  PSX.320-pix Dotclock =  6.652800MHz (44100Hz*300h*11/7/8)
+  PSX.368-pix Dotclock =  7.603200MHz (44100Hz*300h*11/7/7)
+  PSX.512-pix Dotclock = 10.644480MHz (44100Hz*300h*11/7/5)
+  PSX.640-pix Dotclock = 13.305600MHz (44100Hz*300h*11/7/4)
+  Namco GunCon 385-pix =  8.000000MHz (from 8.00MHz on lightgun PCB)
+
+Dots per scanline are, depending on horizontal resolution, and on PAL/NTSC:
+
  320pix/PAL: 3406/8  = 425.75 dots     320pix/NTSC: 3413/8  = 426.625 dots
+  640pix/PAL: 3406/4  = 851.5 dots      640pix/NTSC: 3413/4  = 853.25 dots
+  256pix/PAL: 3406/10 = 340.6 dots      256pix/NTSC: 3413/10 = 341.3 dots
+  512pix/PAL: 3406/5  = 681.2 dots      512pix/NTSC: 3413/5  = 682.6 dots
+  368pix/PAL: 3406/7  = 486.5714 dots   368pix/NTSC: 3413/7  = 487.5714 dots
+
+Timer0 can use the dotclock as input, however, the Timer0 input "ignores" the +fractional portions (in most cases, the values are rounded down, ie. with 340.6 +dots/line, the timer increments only 340 times/line; the only value that is +rounded up is 425.75 dots/line) (for example, due to the rounding, the timer +isn't running exactly twice as fast in 512pix/PAL mode than in 256pix/PAL +mode). The dotclock signal is generated even during horizontal/vertical +blanking/retrace.

+

Frame Rates

+
  PAL:  53.222400MHz/314/3406 = ca. 49.76 Hz (ie. almost 50Hz)
+  NTSC: 53.222400MHz/263/3413 = ca. 59.29 Hz (ie. almost 60Hz)
+
+

Note

+

Above values include "hidden" dots and scanlines (during horizontal and +vertical blanking/retrace).

+

GPU (MISC)

+

GP0(20h..7Fh) - Render Command Bits

+
  0-23  Color for (first) Vertex                   (Not for Raw-Texture)
+  24    Texture Mode      (0=Blended, 1=Raw)       (Textured-Polygon/Rect only)
+  25    Semi-transparency (0=Off, 1=On)            (All Render Types)
+  26    Texture Mapping   (0=Off, 1=On)            (Polygon/Rectangle only)
+  27-28 Rect Size   (0=Var, 1=1x1, 2=8x8, 3=16x16) (Rectangle only)
+  27    Num Vertices      (0=Triple, 1=Quad)       (Polygon only)
+  27    Num Lines         (0=Single, 1=Poly)       (Line only)
+  28    Shading           (0=Flat, 1=Gouroud)      (Polygon/Line only)
+  29-31 Primitive Type    (1=Polygon, 2=Line, 3=Rectangle)
+
+

Perspective (in-)correct Rendering

+

The PSX doesn't support perspective correct rendering: Assume a polygon to be +rotated so that it's right half becomes more distant to the camera, and it's +left half becomes closer. Due to the GTE's perspective division, the right half +should appear smaller than the left half.
+The GPU supports only linear interpolations for rendering - that is correct +concerning the X and Y screen coordinates (which are still linear to each +other, even after perspective division, since both are divided by the same +value).
+However, texture coordinates (and Gouraud shaded colors) are NOT linear to the +screen coordinates, and so, the linear interpolated PSX graphics are often +looking rather distorted, that especially for textures that contain straight +lines. For color shading the problem is less obvious (since shading is kinda +blurry anyways).

+

Perspective correct Rendering

+

For perspective correct rendering, the polygon's Z-coordinates would be needed +to be passed from the GTE to the GPU, and, the GPU would then need to use that +Z-coordinates to "undo" the perspective division for each pixel (that'd require +some additional memory, and especially a powerful division unit, which isn't +implemented in the hardware).
+As a workaround, you can try to reduce the size of your polygons (the +interpolation errors increase in the center region of larger polygons). +Reducing the size would be only required for polygons that occupy a larger +screen region (which may vary depending on the distance to the camera).
+Ie. you may check the size AFTER perspective division, if it's too large, then +break it into smaller parts (using the original coordinates, NOT the screen +coordinates), and then pass the fragments to the GTE another time.
+Again, perspective correction would be relevant only for certain textures (not +for randomly dithered textures like sand, water, fire, grass, and not for +untextured polygons, and of course not for 2D graphics, so you may exclude +those from size reduction).

+

24bit RGB to 15bit RGB Dithering (enabled in Texpage attribute)

+

For dithering, VRAM is broken to 4x4 pixel blocks, depending on the location in +that 4x4 pixel region, the corresponding dither offset is added to the 8bit +R/G/B values, the result is saturated to +00h..+FFh, and then divided by 8, +resulting in the final 5bit R/G/B values.
+

  -4  +0  -3  +1   ;\dither offsets for first two scanlines
+  +2  -2  +3  -1   ;/
+  -3  +1  -4  +0   ;\dither offsets for next two scanlines
+  +3  -1  +2  -2   ;/(same as above, but shifted two pixels horizontally)
+
+POLYGONs (triangles/quads) are dithered ONLY if they do use gouraud shading or +modulation.
+LINEs are dithered (no matter if they are mono or do use gouraud shading).
+RECTs are NOT dithered (no matter if they do use modulation or not).

+

Shading

+

The GPU has a shading function, which will scale the color of a primitive to a +specified brightness. There are 2 shading modes: Flat shading, and gouraud +shading. Flat shading is the mode in which one brightness value is specified +for the entire primitive. In Gouraud shading mode, a different brightness value +can be given for each vertex of a primitive, and the brightness between these +points is automatically interpolated.

+

Semi-transparency

+

When semi-transparency is set for a pixel, the GPU first reads the pixel it +wants to write to, and then calculates the color it will write from the 2 +pixels according to the semi-transparency mode selected. Processing speed is +lower in this mode because additional reading and calculating are necessary. +There are 4 semi-transparency modes in the GPU.
+

  B=Back  (the old pixel read from the frame buffer)
+  F=Front (the new semi-transparent pixel)
+  * 0.5 x B + 0.5 x F    ;aka B/2+F/2
+  * 1.0 x B + 1.0 x F    ;aka B+F
+  * 1.0 x B - 1.0 x F    ;aka B-F
+  * 1.0 x B +0.25 x F    ;aka B+F/4
+
+For textured primitives using 4-bit or 8-bit textures, bit 15 of each CLUT entry +acts as a semi-transparency flag and determines whether to apply semi-transparency +to the pixel or not. If the semi-transparency flag is off, the new pixel is +written to VRAM as-is.
+When using additive blending, if a channel's intensity is greater than 255, it +gets clamped to 255 rather than being masked. Similarly, if using subtractive +blending and a channel's intensity ends up being < 0, it's clamped to 0.

+

Modulation (also known as Texture Blending)

+

Modulation is a colour effect that can be applied to textured primitives. +For each pixel of the primitive it combines every colour channel of the fetched +texel with the corresponding channel of the interpolated vertex colour according +to this formula (Assuming all channels are 8-bit).
+

  finalChannel.rgb = (texel.rgb * vertexColour.rgb) / vec3(128.0)
+
+Using modulation, one can either decrease (if the vertex colour channel value is +< 128) or increase (if it's > 128) the intensity of each colour channel of the +texel, which is helpful for implementing things such as brightness effects.
+Using a vertex colour of 0x808080 (ie all channels set to 128) is equivalent to +not applying modulation to the primitive, as shown by the above formula.
+"Texture blending" is not meant to be confused with normal blending, ie an +operation that merges the backbuffer colour with the incoming pixel and draws +the resulting colour to the backbuffer. The PS1 has this capability to an extent, +using semi-transparency.

+

Draw to display enable

+

This will enable/disable any drawing to the area that is currently displayed. +Not sure yet WHY one should want to disable that?
+Also not sure HOW and IF it works... the SIZE of the display area is implied by +the screen size - which is horizontally counted in CLOCK CYCLES, so, to obtain +the size in PIXELS, the hardware would require to divide that value by the +number of cycles per pixel, depending on the current resolution...?

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/hardwarenumbers/index.html b/hardwarenumbers/index.html new file mode 100644 index 0000000..4e69f47 --- /dev/null +++ b/hardwarenumbers/index.html @@ -0,0 +1,1375 @@ + + + + + + + + + + + + + + + + + + + + + + + + Hardware Numbers - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Hardware Numbers

+

Sony's own hardware (for PSX) (can be also used with PSone)

+
  SCPH-1000 PlayStation (1994) (NTSC-J)   (with S-Video)
+  SCPH-1001 PlayStation (1995) (NTSC-U/C) (without S-Video)
+  SCPH-1002 PlayStation (199x) (PAL)      (without S-Video)
+  SCPH-1010 Digital joypad (with short cable) (1994)
+  SCPH-1020 Memory Card 1Mbits (1994)
+  SCPH-1030 2-button Mouse (with short cable) (1994)
+  SCPH-1040 Serial Link Cable
+  SCPH-1050 RGB Cable (21-pin RGB Connector)
+  SCPH-1060 RFU Cable/Adaptor (antennae connector) (NTSC-JP?) (1995)
+  SCPH-1061 RFU Cable/Adaptor (antennae connector) (NTSC-US?)
+  SCPH-1062 RFU Cable/Adaptor (antennae connector) (PAL)
+  SCPH-1070 Multitap adaptor (four controllers/memory cards on one slot) (1995)
+  SCPH-1080 Digital joypad (with longer cable) (1996)
+  SCPH-1090 2-button Mouse (with longer cable) (1998)
+  SCPH-1100 S Video Cable (1995)
+  SCPH-1110 Analog Joystick (1996)
+  SCPH-1120 RFU Adaptor (antennae connector) (NTSC-JP?) (1996)
+  SCPH-1121 RFU Adaptor (antennae connector) (NTSC-US?)
+  SCPH-1122 RFU Adaptor (antennae connector) (PAL)
+  SCPH-1130 AC Power Cord (1996)
+  SCPH-1140 AV Cable (1997)
+  SCPH-1150 Analog Joypad (with one vibration motor, with red/green led) (1997)
+  SCPH-1160 AV Adaptor (1997)
+  SCPH-1170 Memory Card Triple Pack (three Memory Cards) (1996)
+  SCPH-1180 Analog Joypad (without vibration motors, with red/green led)
+  SCPH-119X Memory Card (X=different colors) (1997)
+  SCPH-1200 Analog Joypad (with two vibration motors) (dualshock) (1997)
+  SCPH-1210 Memory Card Case (1998)
+  SCPH-2000 Keyboard/Mouse adapter (PS/2 to PSX controller port; for Lightspan)
+  SCPH-3000 PlayStation (1995) (NTSC-J) (with the S-video output removed)
+  SCPH-3500 PlayStation Fighting Box (console bundled with 2 controllers)(1996)
+  SCPH-4000 PocketStation (Memory Card with LCD-screen) (1999)
+  SCPH-4010 VPick (guitar-pick controller) (for Quest for Fame, Stolen Song)
+  SCPH-4020 Long Strap for PocketStation (1999)
+  SCPH-4030 Wrist Strap for PocketStation (1999)
+  SCPH-5000 PlayStation (cost reduced) (Japan) (1996)  ;\exists in these three
+  SCPH-5001 PlayStation (cost reduced) (North America) ; regions only (not
+  SCPH-5003 PlayStation                (Asia)          ;/in Europe)
+  SCPH-5500 PlayStation without Cinch sockets (ie. AV Multi Out only) (1996)(J)
+  SCPH-5501 "" North American version of the 5500
+  SCPH-5502 "" European version of the 5500    (shipped with 1 digital joypad)
+  SCPH-5552 Same as SCPH-5502 (but shipped with memcard and 2 digital joypads)
+  SCPH-5903 PlayStation with built-in MPEG Video-CD decoder (Asia-only)
+  SCPH-7000 PlayStation with Dualshock (1997) (Japan)
+  SCPH-7001 PlayStation with Dualshock (199x) (North America)
+  SCPH-7002 PlayStation with Dualshock (199x) (Europe)
+  SCPH-7003 PlayStation with Dualshock (199x) (Asia)
+  SCPH-7000W PlayStation (10 million model, not for sale, blue, region free)
+  SCPH-7500 PlayStation with Dualshock, cost reduced (1999) (Japan)
+  SCPH-7501 PlayStation with Dualshock, cost reduced (199x) (North America)
+  SCPH-7502 PlayStation with Dualshock, cost reduced (199x) (Europe)
+  SCPH-7503 PlayStation with Dualshock, cost reduced (199x) (Asia)
+  SCPH-9000 PlayStation without Parallel I/O port (1999) (Japan)
+  SCPH-9001 PlayStation without Parallel I/O port (199x) (North America)
+  SCPH-9002 PlayStation without Parallel I/O port (199x) (Europe)
+  SCPH-9003 PlayStation without Parallel I/O port (199x) (Asia)
+  SCPH-9903 Rare SCEx-free PSX (Property of Sony Computer Entertainment, U/C)
+  SFX-100   PlayStation Super Disc Prototype (with SNES chipset, no PSX chips)
+
+

Sony's own hardware (for PSone)

+
  SCPH-100 PSone (miniaturized PlayStation) (2000) (Japan)
+  SCPH-101 PSone (miniaturized PlayStation) (200x) (North America)
+  SCPH-102 PSone (miniaturized PlayStation) (200x) (Europe)
+  SCPH-103 PSone (miniaturized PlayStation) (200x) (Asia)
+  SCPH-102A PSone Europe (UK/AU, with A/V cable)     ;\revision of "SCPH-102"
+  SCPH-102B PSone Europe (UK, with RFU adaptor)      ; with PM-41(2) board ?
+  SCPH-102C PSone Europe (Continent, with A/V cable) ;/
+  SCPH-110 Dual Analog Pad (for PSone) (Dualshock) (2000)
+  SCPH-111 Multitap for PSone (seems to be quite rare, except in brazil)
+  SCPH-112 AC adapter for PSone (In: 110-220VAC,  Out: 7.5VDC, 2.0A, Japan)
+  SCPH-113 AC adapter for PSone (In: 120VAC/60Hz, Out: 7.5VDC, 2.0A, USA)
+  SCPH-114 AC adapter for PSone (In: 220-240VAC,  Out: 7.5VDC, 2.0A, Europe)
+  SCPH-115 AC adapter for PSone (In: 220-240VAC,  Out: 7.5VDC, 2.0A, UK)
+  SCPH-116 AC adapter for PSone (In: 220-240VAC,  Out: 7.5VDC, 2.0A, Australia)
+  SCPH-117 AC adapter for PSone (In: 110VAC,      Out: 7.5VDC, 2.0A, Asia?)
+  SCPH-120 AC adapter for PSone with LCD Screen (In: 100VAC, Out: 7.5VDC, 3.0A)
+  SCPH-130 LCD Screen for PSone (to be attached to the console) (2001)
+  SCPH-140 PSone and LCD screen combo (2001)
+  SCPH-152 LCD screen for PSone (PAL SCPH-152C)
+  SCPH-162 PSone and LCD screen (PAL SCPH-162C)
+  SCPH-170 Car Adapter for PSone from car cigarette lighter (2001)
+  SCPH-180 AV Connection Cable for LCD-screen's AV IN
+  SCPH-10180K DoCoMo I-Mode Adaptor Cable (for internet via mobile phones)
+
+

Sony's own hardware (for PS2, can be used with PSX/PSone)

+
  SCPH-10150 PS2 DVD remote
+  SCPH-10160 IR receiver dongle for PS2 DVD remote
+
+

Sony's own devkits

+
  DTL-H201A Graphic Artist Board (ISA bus) (with NTSC video out)
+  DTL-H240  PS-X RGB Cable
+  DTL-H500C Digital joypad prototype (SNES-style design, with DB9 connector)
+  DTL-H505  PS-X (Code Name) Target Box ? (PSX prototype, SCSI instead CDROM?)
+  DTL-H700  Sound Artist Board (NuBus for Mac)
+  DTL-H800  Sound Artist Board (PCI Bus for IBM) (with optical fibre sound out)
+  DTL-H1000 Debugging Station (CD-R compatible PSX console) (Japan)
+  DTL-H1001 Debugging Station (CD-R compatible PSX console) (North America)
+  DTL-H1002 Debugging Station (CD-R compatible PSX console) (Europe)
+  DTL-H1030 Mouse ?
+  DTL-H1040 Link Cable ?
+  DTL-H1050 RGB Cable ?
+  DTL-H110x Debugging Station revision? (DC-powered)
+  DTL-H120x Debugging Station revision? (AC-powered)
+  DTL-H1500 Stand-Alone Box ? With ethernet, for SGI Workstation ?
+  DTL-H2000 Dev board v1 (PSX on two ISA carts) (old pre-retail)
+  DTL-H2010 Black External CDROM Drive for DTL-H2000 (CD-R compatible)
+  DTL-H2040 Memory Box ?
+  DTL-H2050 Adaptor for Controller port ?
+  DTL-H2060 Serial Link cable
+  DTL-H2070 RGB Cable ?
+  DTL-H2080 Controller Box (joypad/memcard adaptor for DTL-H2000/DTL-xxxx?)
+  DTL-H2500 Dev board (PCI bus)
+  DTL-H2510 Gray Internal CDROM Drive for DTL-H2500/DTL-H2700 (CD-R compatible)
+  DTL-H2700 Dev board (ISA bus) (CPU, ANALYZER ...?)
+  DTL-H3000 Net Yaroze (hobby programmer dev kit) (Japan)
+  DTL-H3001 Net Yaroze (hobby programmer dev kit) (North America)
+  DTL-H3002 Net Yaroze (hobby programmer dev kit) (Europe)
+  DTL-H3020 Access Card (for yaroze)
+  DTL-H3050 Communication Cable (link port to rs232, for yaroze)
+  DTL-D2020 Documentation: BUILD CD (Manual of Programmer's Tool)
+  DTL-D2120 Documentation: (Manual of Programmer's Tool)
+  DTL-D2130 Documentation: PsyQ (Manual of Programmer's Tool)
+  DTL-D2130 Documentation: SdevTC (Manual of Programmer's Tool)
+  DTL-D2140A Documentation: Ver.1.0 (Manual of Programmer's Tool)
+  DTL-D2150A Documentation: Ver.2.0 (Manual of Programmer's Tool)
+
+

SN System / Psy-Q devkit add-ons / SCSI cards

+
  DTL-S510B Unknown (another CDROM emulator version?)
+  DTL-S2020 CD-ROM EMULATOR for DTL-H2000/DTL-H2500/DTL-H2700
+
+

Sony Licensed Hardware (Japan)

+

  SLPH-00001 Namco neGcon (white) (NPC-101), Twist controller (SLEH-0003)
+  SLPH-00002 Hori Fighting stick, digital stick with autofire/slowmotion/rumble
+  SLPH-00003 ASCII Fighter stick V, psx-shaped digital stick (SLEH-0002)
+  SLPH-00004 Sunsoft Sunstation pad, digital pad with autofire/slowmotion
+  SLPH-00005 ASCII ASCIIPAD V, digital pad with autofire/slowmotion
+  SLPH-00006 Imagineer Sandapaddo ThunderPad
+  SLPH-00007 SANKYO N.ASUKA aka Nasca Pachinco Handle, bizarre paddle
+  SLPH-00008 Spital SANGYO Programmable joystick
+  SLPH-00009 Hori Fighting commander 2way controller
+  SLPH-00010 Optec Super Pro Commander
+  SLPH-00011 Super Pro Commander Accessory / Extended memo repack memory
+  SLPH-00012 Hori Fighting Commander 10B Pad (gray), digital pad with extras
+  SLPH-00013 Konami Hyper Blaster (green)  ;\IRQ10-based Lightgun
+  SLPH-00014 Konami Hyper Blaster (black)  ;/(SLEH-0005/SLUH-00017)
+  SLPH-00015 Namco Volume controller, paddle with 2 buttons
+  SLPH-00016 Waka Up Scan Converter "[chiyo] clean! peripheral equipment?"
+  SLPH-00017 Hori Fighting Commander 10B Pad (black), digital pad with extras
+  SLPH-00018 Hori Real Arcade Stick, digital stick, small L1/L2 (HPS-10)
+  SLPH-00019 Konami Hyperstick
+  SLPH-00020 Imagineer Thunder Pad Transparent
+  SLPH-00021 Imagineer Imagegun
+  SLPH-00022 Optec AI Commander Pro, digital pad with extras / lcd display
+  SLPH-00023 Namco Joystick (SLEH-00004)
+  SLPH-00024 Optec Cockpit Wheel, analog joystick/analog pedals or so
+  SLPH-00025 Optec AI Commander Accessory (extended memo repack ZERO2 version)
+  SLPH-00026 Hori Command Stick PS (SLPH-00026 aka HPS11)
+  SLPH-00027 ASCII Grip, single-handed digital pad (SLEH-00008)
+  SLPH-00028 Hori Grip (gray) (see also: SLPH-00040, and 00086..00088)
+  SLPH-00029 Hori Horipad (clear), digital pad
+  SLPH-00030 Hori Horipad (black), digital pad
+  SLPH-00031 Hori Horipad (gray),  digital pad
+  SLPH-00032 Hori Horipad (white), digital pad
+  SLPH-00033 Hori Horipad (blue),  digital pad
+  SLPH-00034 Namco G-CON 45, Cinch-based Lightgun (SLEH-0007/SLUH-00035)
+  SLPH-00035 ASCII Fighter stick V Jr. (SLEH-00009)
+  SLPH-00036 Optec Wireless Dual Shot, digital pad with turbo button
+  SLPH-00037 ?
+  SLPH-00038 ASCII Pad V Jr., digital pad without any extras
+  SLPH-00039 ASCII Pad V2 (gray), digital pad with turbo switches (SLEH-00010)
+  SLPH-00040 Hori Grip (black)
+  SLPH-00041 ASCII Grip V
+  SLPH-00042 ASCII Grip V plus (Derby Stallion'99 supplement set), single-hand
+  SLPH-00043 ASCII Pad V2 (clear pink)
+  SLPH-00044 ASCII Pad V2 (clear white)
+  SLPH-00045 ASCII Pad V2 (clear blue)
+  SLPH-00046 ASCII Pad V2 (clear green)
+  SLPH-00047 ASCII Pad V2 (clear black)
+  SLPH-00048 ASCII Pad V2 (clear red/lead?)
+  SLPH-00049 ASCII Pad V2 (clear yellow)
+  SLPH-00050 ASCII Pad V2 (clear orange)
+  SLPH-00051 Taito Streetcar GO! Controller 2 steering "wheel?" tie toe strange
+  SLPH-00052 Koei Video Capture, Ergosoft EGWord, and Lexmark Printer bundle
+  SLPH-00053 Koei Word Processor Ergosoft September EGWORD Ver.2.00
+  SLPH-00054 Hori Zerotech Steering Controller (black)
+  SLPH-00055 Hori Grip (clear blue)
+  SLPH-00056 Hori Grip (clear pink)
+  SLPH-00057 Hori Grip (clear yellow)
+  SLPH-00058 ASCII Pad V2 (gold)
+  SLPH-00059 ASCII Pad V2 (silver)
+  SLPH-00060 ASCII Biohazard, digital pad with re-arranged buttons (SLEH-0011)
+  SLPH-00061 ASCII Pad V2 (pearl white)
+  SLPH-00062 ASCII Pad V2 (pearl blue)
+  SLPH-00063 ASCII Pad V2 (pearl pink)
+  SLPH-00064 ASCII Pad V2 (pearl green)
+  SLPH-00065 ASCII Pad V Pro, with lcd for button-combinations (ASC-0508GX)
+  SLPH-00066 ASCII Arcade Stick 3 "Ultimate"
+  SLPH-00067 ASCII Pad V2 (purple metallic)
+  SLPH-00068 ASCII Pad V2 (lead metallic)
+  SLPH-00069 Namco neGcon (black) (NPC-104), Twist controller (SLEH-0003)
+  SLPH-00070 Sankyo Pachinko FF Controller (alternate to SLPH-00007)
+  SLPH-00071 Hori Command Stick PS Custom
+  SLPH-00072 ASCII Command Pack (memory card add-on or so)
+  SLPH-00073 Optec Wireless digital set (gray)         ;\
+  SLPH-00074 Optec Wireless digital set (black)        ; pad with receiver
+  SLPH-00075 Optec Wireless digital set (clear)        ;
+  SLPH-00076 Optec Wireless digital set (clear blue)   ;
+  SLPH-00077 Optec Wireless digital set (clear black)  ;/
+  SLPH-00078 Optec Wireless digital shot (gray)        ;\
+  SLPH-00079 Optec Wireless digital shot (black)       ; extra pad for
+  SLPH-00080 Optec Wireless digital shot (clear)       ; second player
+  SLPH-00081 Optec Wireless digital shot (clear blue)  ; (without receiver)
+  SLPH-00082 Optec Wireless digital shot (clear black) ;/
+  SLPH-00083 ASCII Stick Justice controller
+  SLPH-00084 Hori ZeroTech Steering Controller (clear)
+  SLPH-00085 Hori Compact joystick (black)
+  SLPH-00086 Hori Compact joystick (clear)
+  SLPH-00087 Hori Compact joystick (clear blue)
+  SLPH-00088 Hori Multi Analog Pad (clear) or Hori Grip (pink?)
+  SLPH-00089 Hori AV Cable with selector
+  SLPH-00090 Hori Multi Analogue Pad (clear black)
+  SLPH-00091 Hori AV Multi-Out Converter
+  SLPH-00092 ASCII Pad V2 (margin green)
+  SLPH-00093 ASCII Pad V2 (margin blue)
+  SLPH-00094 ASCII Pad V2 (margin pink)
+  SLPH-00095 ASCII Pad V2 (margin orange)
+  SLPH-00096 ASCII Hyper Steering V ("high pass tear ring V controller?")
+  SLPH-00097 Hori S Cable with selector (uh, maybe S-video or so?) (HPS-36)
+  SLPH-00098 NSYSCOM Pachinko slot controller (NSC-1)
+  SLPH-00099 ASCII Pad V2 (rainbow)
+  SLPH-00100 ASCII 'Hanging' Fishing Controller, controller for fishing games
+  SLPH-00101 Optec Cockpit big shock
+  SLPH-00102 ASCII Grip V (set for mars story)
+  SLPH-00103 Hori Pad V2 (clear)
+  SLPH-00104 Hori Pad V2 (clear blue)
+  SLPH-00105 Hori Pad V2 (clear pink)
+  SLPH-00106 Hori Pad V2 (black)
+  SLPH-00107 Hori Compact Joystick (camouflage)
+  SLPH-00108 Hori Rumble Digital Pad (clear blue)
+  SLPH-00109 Hori Monoaural AV Cable
+  SLPH-00110 ASCII Pad V2 (marble)
+  SLPH-00111 ASCII Pad V2 (camouflage)
+  SLPH-00112 ASCII Pad V3
+  SLPH-00113 ASCII Pad V3 with cable reel
+  SLPH-00114 ASCII Pad V3 with V2 (pearl white) bundle
+  SLPH-00115 ASCII Pad V3 with V2 (pearl pink) bundle
+  SLPH-00116 ASCII Pad V3 with V2 (pearl blue) bundle
+  SLPH-00117 ASCII Pad V3 (blue) with V2 (pearl green) bundle
+  SLPH-00118 Hori Pad V3
+  SLPH-00119 Hori Pad V3 (white)
+  SLPH-00120 Hori Analog Rumble Pad (clear pink)
+  SLPH-00121 Hori Analog Rumble Pad (clear)
+  SLPH-00122 Hori Analog Rumble Pad (clear blue)
+  SLPH-00123 Hori Analog Rumble Pad (clear red)
+  SLPH-00124 Hori Analog Rumble Pad (clear black)
+  SLPH-00125 Hori Analog Rumble Pad (clear yellow)
+  SLPH-00126 Namco Jogcon, digital pad, steering dial (SLEH-0020/SLUH-00059)
+  SLPH-00127 ?
+  SLPH-00128 ASCII stick ZERO3
+  SLPH-00129 ASCII Pad V2 (wood grain pitch)
+  SLPH-00130 Hori Real Arcade (camouflage)
+  SLPH-00131 Hori Ehrgeiz Stick
+  SLPH-00132 ASCII Pad V3 (blue)
+  SLPH-00133 ASCII Fighter Stick V Jr. (limited edition)
+  SLPH-00134 ASCII Pad V3 (blue) with cable reel
+  SLPH-00135 ASCII Pad V3 (blue) with V2 (silver)
+  SLPH-00136 ASCII Pad V3 with V2 (purple metallic)
+  SLPH-00137 ASCII Pad V3 with V2 (gold)
+  SLPH-00138 ASCII Pad V3 with "VPRO. aka Ascii Fighter Stick V"
+  SLPH-00139 Hori Analog Rumble Pad (gray)
+  SLPH-00140 Hori Analog Rumble Pad (black)
+  SLPH-00141 Hori Analog Rumble Pad (blue)
+
+And, maybe unlicensed (they don't have official SLPH numbers, still they are +listed as official controllers on PSX CDROM back covers):
+
  ASC-05158B ASCII Beatmania Junk (similar to SLEH-0021)
+  ASC-0528T  Sammy Shakkato Tambourine
+  BANC-0001  Bandai Fishing Controller
+  BANC-0002  Bandai Kids Station
+  RU017      Konami Dance Dance Revolution Controller (Dance Mat)
+  GAE001     G.A.E. Baton stick with 2 buttons (for The Maestromusic)
+
+And whatever:
+
  RU029      Konami Beatmania IIDX
+  RU014      Konami Pop'n Music (buttons A,B,C,D,E,F,G,H,I, and Select/Start)
+  RU014-J2   Konami Pop'n Controller 2
+  RU036      Konami Pop'n Controller (Arcade Style)
+  ?          Produce! Paca Paca Passion
+  ?          Sega/Ascii Minimoni Shakatto Tambourine
+

+

Sony Licensed Hardware (Europe)

+

  SLEH-00001 Ascii Specialized Pad (similar to SLPH-00005: ASCII ASCIIPAD V)
+  SLEH-00002 Ascii Arcade Stick, psx-shaped digital stick (SLPH-00003)
+  SLEH-00003 Namco Negcon, Twist controller (SLPH-00001)
+  SLEH-00004 Namco Arcade Stick (SLPH-00023)
+  SLEH-00005 Konami Hyper Blaster, IRQ10-based Lightgun (SLPH-00014/SLUH-00017)
+  SLEH-00006 Mad Catz Steering Wheel (SLPH-?)
+  SLEH-00007 Namco G-Con 45, Cinch-based Lightgun (SLPH-00034/SLUH-00035)
+  SLEH-00008 Ascii Grip, single-handed digital pad (SLPH-00027/SLUH-00038)
+  SLEH-00009 Ascii Arcade Stick v2 (SLPH-00035)
+  SLEH-00010 Ascii Enhanced Control Pad (similar as SLEH-00001) (SLPH-00039)
+  SLEH-00011 Resident Evil Pad (aka SLPH-00060 ASCII Biohazard)
+  SLEH-00012 Reality-Quest The Glove (right-handed only) (SLUH-00045/SLPH-?)
+  SLEH-00013 CD Case (small nylon bag for fourteen CDs) (SLPH-?)
+  SLEH-00014 ?
+  SLEH-00015 PlayStation Case (bigger bag for the console) (SLPH-?)
+  SLEH-00016 PlayStation Case + Digital Joypad + Memory Card
+  SLEH-00017 ?
+  SLEH-00018 Ascii Sphere 360 (SLUH-00028/SLPH-?)
+  SLEH-00019 Interact V3 Racing Wheel (SLPH-?)
+  SLEH-00020 Namco JogCon, digital pad, steering dial (SLPH-00126/SLUH-00059)
+  SLEH-00021 Konami Beatmania Controller (SLPH-?)
+  SLEH-00022 ?
+  SLEH-00023 Official Dance Mat (RU017/SLUH-00071) (for PSone and PS2)
+  SLEH-00024 Fanatec Speedster 2 (wheel with pedals) (for PSone and PS2)
+  SLEH-00025 Mad Catz 8MB Memory Card (for PS2)
+  SLEH-00026 Olympus Eye-Trek FMD-20P Game/DVD glasses (for PS2)
+  SLEH-00027 Logitech Cordless Controller... or Eye-Trek FMD-20P, too? (PSx?)
+  SLEH-00028 ?
+  SLEH-00029 Fanatec Speedster 3 (for PS2)
+  SLEH-00030 Logitech Eye Toy (camera?) (for PS2)
+
+And, maybe unlicensed:
+
  Mad Catz Wrist Rumbler (rumble add-on for pre-dualshock controllers)
+

+

Sony Licensed Hardware (USA)

+
  SLUH-00001 Specialized Joystick (single-axis, digital?)
+  SLUH-00002 Control Pad (redesigned joypad)
+  SLUH-00003 InterAct Piranha Pad, digital pad, autofire/slowmotion
+  SLUH-00017 Konami Justifier, IRQ10-based Lightgun (Hyperblaster/SLPH-00014)
+  SLUH-00018 Enhanced Pad (joypad with whatever extra functions)
+  SLUH-00022 Analog and Digital Steering Wheel with pedals (for testdrive 4?)
+  SLUH-00026 Optec Mach 1 (gray steering/flight controller with pedals)
+  SLUH-00028 Ascii Sphere 360 (SLEH-00018)
+  SLUH-00029 Namco NPC-102 Joystick (single-axis, digital?)
+  SLUH-00031 Interact Program Pad
+  SLUH-00033 Piranha Pad (redesigned joypad)
+  SLUH-00034 NUBY Manufacturing The Heater, white lightgun (irq10 or cinch?)
+  SLUH-00035 Namco G-CON 45, Cinch-based Lightgun (SLEH-0007/SLPH-00034)
+  SLUH-00037 Arcade Stick (single-axis, digital?)
+  SLUH-00038 ASCII Grip V, single-handed digital pad (SLPH-00027/SLEH-00008)
+  SLUH-00040 System Organizer (huh? looks like... a black storage box?)
+  SLUH-00041 V3 Racing Wheel with pedals
+  SLUH-00043 GunCon (bundled with Time Crisis 1)
+  SLUH-00044 Remote Wizard (looks like wireless joypad or so)
+  SLUH-00045 Reality-Quest The Glove (right-handed only) (SLEH-00012/SLPH-?)
+  SLUH-00046 GunCon (bundled with Point Blank)
+  SLUH-00055 Aftershock Wheel with pedals
+  SLUH-00056 UltraRacer Steering Controller (grip-style)
+  SLUH-00057 EA Sports Game Pad (redesigned joypad)
+  SLUH-00058 something for point blank 2 (?) (maybe a lightgun)
+  SLUH-00059 Namco Jogcon, digital pad, steering dial (SLEH-0020/SLPH-00126)
+  SLUH-00061 MadCatz MC2 Racing Wheel (black/gray)
+  SLUH-00063 Bass Landing Fishing Reel controller
+  SLUH-00066 Sportster racing wheel
+  SLUH-00068 Jungle Book Rhythm N Groove Dance Pack
+  SLUH-00071 Konami Dance Pad (DDR Dance Pad) (RU017)
+  SLUH-00072 GunCon (bundled with Point Blank 3)
+  SLUH-00073 GunCon (bundled with Time Crisis 2 - Project Titan)
+  SLUH-00077 Logitech Cordless Controller, analog pad (ps1/ps2)
+  SLUH-00081 Logitech NetPlay Controller, pad with keyboard (usb/ps2)
+  SLUH-00083 Konami Dance Dance Revolution Controller (for PS1 and PS2)
+  SLUH-00084 NYKO iType2, pad with keyboard (usb/ps2)
+  SLUH-00085 Logitech Cordless Action Controller (for PS2)
+  SLUH-00086 Namco/Taiko Drum Master (Taiko Controller Pack) (for PS2)
+  SLUH-00088 RedOctane In the Groove Dance Pad Controller ?
+  SLUH-00090 Dance Pad (bundled with Pump It Up) (for PS2)
+
+

Sony Licensed Hardware (Asia)

+
  Unknown (if any)
+
+

Newer hardware add-ons?

+
  SCEH-0001 SingStar (USB to Microfon) (for PS2)
+
+

Note

+

Early SLEH/SLUH devices used 4-digit numbers (eg. the "official" name for +SLEH-00003 is SLEH-0003; unlike as shown in the above list).

+

Software (CDROM Game Codes)

+

  CPCS-00701 Dino Crisis 5th Anniversary Box Serial
+  DTL-NNNNN  Development Tool Licensed (Net Yaroze)
+  ESPM-NNNNN Sony Music Entertainment Japan (Music Video Discs)
+  LSP-NNNNNN Lightspan series (non-retail educational games)
+  PAPX-NNNNN Japanese Demos/Rental Editions/Taikenban
+  PBPX-NNNNN Official Playstation Sampler Discs (USA/UK)
+  PCPX-NNNNN Japanese Otameshi Discs (Samplers)
+  PEPX-NNNNN Analog Controller Service Disc
+  PUPX-NNNNN Analog controller Service Disc
+  PSRM-017100 Syphon Filter 2 Disc 2 Preview Version
+  PSXCDCLEAN Laser Clean
+  PTPX-NNNNN Aging Disk
+  SCAJ-NNNNN Sony Computer Entertainment America ... ?
+  SCED-NNNNN Sony Computer Europe Demo
+  SCES-NNNNN Sony Computer Europe Software
+  SCPM-NNNNN Sony Computer Japan ...?
+  SCPS-NNNNN Sony Computer Japan Software
+  SCUS-NNNNN Sony Computer USA Software
+  SCZS-NNNNN Sony Computer ... Software? (Fan Books)
+  SIPS-NNNNN Sony Imports ...? (All Imports to Japan)
+  SLED-NNNNN Sony Licensed Europe Demo
+  SLES-NNNNN Sony Licensed Europe Software
+  SLKA-NNNNN Sony Licensed Korea ...? (3 Korean Releases)
+  SLPM-NNNNN Sony Licensed Japan ... ?
+  SLPS-NNNNN Sony Licensed Japan Software
+  SLUS-NNNNN Sony Licensed USA Software
+  SPUS-NNNNN Sony Playstation US ...? (Playstation Picks Disc)
+
+Note: Multi-disc games have more than one game code. The game code for Disc 1 +is also printed on the CD cover, and used in memory card filenames. The +per-disk game codes are printed on the discs, and are used as boot-executable +name in SYSTEM.CNF file. There is no fixed rule for the multi-disc numbering; +some games are using increasing numbers of XNNNN or NNNNX (with X increasing +from 0 upwards), and some are randomly using values like NNNXX and NNNYY for +different discs.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..e8da0e2 --- /dev/null +++ b/index.html @@ -0,0 +1,860 @@ + + + + + + + + + + + + + + + + + + + + + + PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Home

+

IMPORTANT UPDATE

+

On the 20th of August 2022, Martin surprisingly released a new version of this documentation. While this fork will try to incorporate the changes, one important footnote that got added is the following:

+
+

I am homeless in Hamburg, please help me out!

+
+

The authors of this fork thought that this deserves more than a footnote, hence this notice here.

+

Home

+

This is a conversion/edition of Martin "nocash" Korth's Playstation specs document originally hosted at https://problemkaputt.de/psx-spx.htm. See https://github.com/psx-spx/psx-spx.github.io#readme for more details.
+You can also download this website as a single-page pdf.

+

Martin is a difficult individual to reach (see https://problemkaputt.de/email.htm, especially the part about gmail), and so far, any attempt at contacting him about collaborating on this document failed.

+

Therefore, no copyright or license have been properly acquired to republish and alter this document. However, since this repository will accept and proceed to issue corrections, amendments, and additions to the original work, the fair use and derivative work doctrine is believed to be applicable in this case.

+

An important detail to know about this current document, as well as the original from Martin, is that it isn't a clean room reverse engineering project, as some people may seem to believe or repeat. A good chunk of the original document has been either directly copy/pasted from the confidential code and documentation from Sony, or summarized and rephrased. As this document isn't clean room, any work derived from it shouldn't be considered clean, and anyone saying otherwise is misguided at best. The reference source material, code, and documentation used to make this document can be found at https://psx.arthus.net/sdk/Psy-Q/

+

To discuss the contents of this document, or hang out with likely minded people on development, hacking, and reverse engineering of Sony's first console, feel free to join the PSX.Dev Discord Server.

+

Memory Map
+I/O Map
+Graphics Processing Unit (GPU)
+Geometry Transformation Engine (GTE)
+Macroblock Decoder (MDEC)
+Sound Processing Unit (SPU)
+Interrupts
+DMA Channels
+Timers
+CDROM Drive
+CDROM File Formats
+Controllers and Memory Cards
+Pocketstation
+Serial Interfaces (SIO)
+Expansion Port (PIO)
+Memory Control
+Unpredictable Things
+CPU Specifications
+Kernel (BIOS)
+Arcade Cabinets
+Konami System 573
+Cheat Devices
+PSX Dev-Board Chipsets
+Hardware Numbers
+Pinouts
+About & Credits
+CDROM Video CDs (VCD)
+CDROM Internal Info on PSX CDROM Controller

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/interrupts/index.html b/interrupts/index.html new file mode 100644 index 0000000..cd6678e --- /dev/null +++ b/interrupts/index.html @@ -0,0 +1,963 @@ + + + + + + + + + + + + + + + + + + + + + + + + Interrupts - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Interrupts

+

1F801070h I_STAT - Interrupt status register (R=Status, W=Acknowledge)

+

1F801074h I_MASK - Interrupt mask register (R/W)

+

Status: Read I_STAT (0=No IRQ, 1=IRQ)
+Acknowledge: Write I_STAT (0=Clear Bit, 1=No change)
+Mask: Read/Write I_MASK (0=Disabled, 1=Enabled)
+

  0     IRQ0 VBLANK (PAL=50Hz, NTSC=60Hz)
+  1     IRQ1 GPU   Can be requested via GP0(1Fh) command (rarely used)
+  2     IRQ2 CDROM
+  3     IRQ3 DMA
+  4     IRQ4 TMR0  Timer 0 aka Root Counter 0 (Sysclk or Dotclk)
+  5     IRQ5 TMR1  Timer 1 aka Root Counter 1 (Sysclk or H-blank)
+  6     IRQ6 TMR2  Timer 2 aka Root Counter 2 (Sysclk or Sysclk/8)
+  7     IRQ7 Controller and Memory Card - Byte Received Interrupt
+  8     IRQ8 SIO
+  9     IRQ9 SPU
+  10    IRQ10 Controller - Lightpen Interrupt. Also shared by PIO and DTL cards.
+  11-15 Not used (always zero)
+  16-31 Garbage
+

+

Secondary IRQ10 Controller (Port 1F802030h)

+

EXP2 DTL-H2000 I/O Ports

+

Interrupt Request / Execution

+

The interrupt request bits in I_STAT are edge-triggered, ie. the get set ONLY +if the corresponding interrupt source changes from "false to true".
+If one or more interrupts are requested and enabled, ie. if "(I_STAT AND +I_MASK)=nonzero", then cop0r13.bit10 gets set, and when cop0r12.bit10 and +cop0r12.bit0 are set, too, then the interrupt gets executed.

+

Interrupt Acknowledge

+

To acknowledge an interrupt, write a "0" to the corresponding bit in I_STAT. +Most interrupts (except IRQ0,4,5,6) must be additionally acknowledged at the +I/O port that has caused them (eg. JOY_CTRL.bit4).
+Observe that the I_STAT bits are edge-triggered (they get set only on +High-to-Low, or False-to-True edges). The correct acknowledge order is:
+

  First, acknowledge I_STAT                (eg. I_STAT.bit7=0)
+  Then, acknowledge corresponding I/O port (eg. JOY_CTRL.bit4=1)
+
+When doing it vice-versa, the hardware may miss further IRQs (eg. when first +setting JOY_CTRL.4=1, then a new IRQ may occur in JOY_STAT.4 within a single +clock cycle, thereafter, setting I_STAT.7=0 would successfully reset I_STAT.7, +but, since JOY_STAT.4 is already set, there'll be no further edge, so I_STAT.7 +won't be ever set in future).

+

COP0 Interrupt Handling

+

Relevant COP0 registers are cop0r13 (CAUSE, reason flags), and cop0r12 (SR, +control flags), and cop0r14 (EPC, return address), and, cop0cmd=10h (aka RFE +opcode) is used to prepare the return from interrupts. For more info, see
+COP0 - Exception Handling

+

PSX specific COP0 Notes

+

COP0 has six hardware interrupt bits, of which, the PSX uses only cop0r13.bit10 +(the other ones, cop0r13.bit11-15 are always zero). cop0r13.bit10 is NOT a +latch, ie. it gets automatically cleared as soon as "(I_STAT AND I_MASK)=zero", +so there's no need to do an acknowledge at the cop0 side. COP0 additionally has +two software interrupt bits, cop0r13.bit8-9, which do exist in the PSX, too, +these bits are read/write-able latches which can be set/cleared manually to +request/acknowledge exceptions by software.

+

PS2 IOP interrupts

+

The PS2's IOP has the same interrupt controller as the PS1 but with more +channels. For more details, see:
+ps2tek - IOP Interrupts

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/iomap/index.html b/iomap/index.html new file mode 100644 index 0000000..7e6d761 --- /dev/null +++ b/iomap/index.html @@ -0,0 +1,1356 @@ + + + + + + + + + + + + + + + + + + + + + + + + I/O Map - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

I/O Map

+

Expansion Region 1

+
  1F000000h 80000h Expansion Region (default 512 Kbytes, max 8 MBytes)
+  1F000000h 100h   Expansion ROM Header (IDs and Entrypoints)
+
+

Scratchpad

+
  1F800000h 400h Scratchpad (1K Fast RAM) (Data Cache mapped to fixed address)
+
+

Memory Control 1

+
  1F801000h 4    Expansion 1 Base Address (usually 1F000000h)
+  1F801004h 4    Expansion 2 Base Address (usually 1F802000h)
+  1F801008h 4    Expansion 1 Delay/Size (usually 0013243Fh; 512Kbytes 8bit-bus)
+  1F80100Ch 4    Expansion 3 Delay/Size (usually 00003022h; 1 byte)
+  1F801010h 4    BIOS ROM    Delay/Size (usually 0013243Fh; 512Kbytes 8bit-bus)
+  1F801014h 4    SPU_DELAY   Delay/Size (usually 200931E1h)
+  1F801018h 4    CDROM_DELAY Delay/Size (usually 00020843h or 00020943h)
+  1F80101Ch 4    Expansion 2 Delay/Size (usually 00070777h; 128-bytes 8bit-bus)
+  1F801020h 4    COM_DELAY / COMMON_DELAY (00031125h or 0000132Ch or 00001325h)
+
+

Peripheral I/O Ports

+
  1F801040h 1/4  JOY_DATA Joypad/Memory Card Data (R/W)
+  1F801044h 4    JOY_STAT Joypad/Memory Card Status (R)
+  1F801048h 2    JOY_MODE Joypad/Memory Card Mode (R/W)
+  1F80104Ah 2    JOY_CTRL Joypad/Memory Card Control (R/W)
+  1F80104Eh 2    JOY_BAUD Joypad/Memory Card Baudrate (R/W)
+  1F801050h 1/4  SIO_DATA Serial Port Data (R/W)
+  1F801054h 4    SIO_STAT Serial Port Status (R)
+  1F801058h 2    SIO_MODE Serial Port Mode (R/W)
+  1F80105Ah 2    SIO_CTRL Serial Port Control (R/W)
+  1F80105Ch 2    SIO_MISC Serial Port Internal Register (R/W)
+  1F80105Eh 2    SIO_BAUD Serial Port Baudrate (R/W)
+
+

Memory Control 2

+
  1F801060h 4/2  RAM_SIZE (usually 00000B88h; 2MB RAM mirrored in first 8MB)
+
+

Interrupt Control

+
  1F801070h 2    I_STAT - Interrupt status register
+  1F801074h 2    I_MASK - Interrupt mask register
+
+

DMA Registers

+
  1F80108xh      DMA0 channel 0 - MDECin
+  1F80109xh      DMA1 channel 1 - MDECout
+  1F8010Axh      DMA2 channel 2 - GPU (lists + image data)
+  1F8010Bxh      DMA3 channel 3 - CDROM
+  1F8010Cxh      DMA4 channel 4 - SPU
+  1F8010Dxh      DMA5 channel 5 - PIO (Expansion Port)
+  1F8010Exh      DMA6 channel 6 - OTC (reverse clear OT) (GPU related)
+  1F8010F0h      DPCR - DMA Control register
+  1F8010F4h      DICR - DMA Interrupt register
+  1F8010F8h      unknown
+  1F8010FCh      unknown
+
+

Timers (aka Root counters)

+
  1F80110xh      Timer 0 Dotclock
+  1F80111xh      Timer 1 Horizontal Retrace
+  1F80112xh      Timer 2 1/8 system clock
+
+

CDROM Registers (Address.Read/Write.Index)

+
  1F801800h.x.x   1   CD Index/Status Register (Bit0-1 R/W, Bit2-7 Read Only)
+  1F801801h.R.x   1   CD Response Fifo (R) (usually with Index1)
+  1F801802h.R.x   1/2 CD Data Fifo - 8bit/16bit (R) (usually with Index0..1)
+  1F801803h.R.0   1   CD Interrupt Enable Register (R)
+  1F801803h.R.1   1   CD Interrupt Flag Register (R/W)
+  1F801803h.R.2   1   CD Interrupt Enable Register (R) (Mirror)
+  1F801803h.R.3   1   CD Interrupt Flag Register (R/W) (Mirror)
+  1F801801h.W.0   1   CD Command Register (W)
+  1F801802h.W.0   1   CD Parameter Fifo (W)
+  1F801803h.W.0   1   CD Request Register (W)
+  1F801801h.W.1   1   Unknown/unused
+  1F801802h.W.1   1   CD Interrupt Enable Register (W)
+  1F801803h.W.1   1   CD Interrupt Flag Register (R/W)
+  1F801801h.W.2   1   Unknown/unused
+  1F801802h.W.2   1   CD Audio Volume for Left-CD-Out to Left-SPU-Input (W)
+  1F801803h.W.2   1   CD Audio Volume for Left-CD-Out to Right-SPU-Input (W)
+  1F801801h.W.3   1   CD Audio Volume for Right-CD-Out to Right-SPU-Input (W)
+  1F801802h.W.3   1   CD Audio Volume for Right-CD-Out to Left-SPU-Input (W)
+  1F801803h.W.3   1   CD Audio Volume Apply Changes (by writing bit5=1)
+
+

GPU Registers

+
  1F801810h.Write 4   GP0 Send GP0 Commands/Packets (Rendering and VRAM Access)
+  1F801814h.Write 4   GP1 Send GP1 Commands (Display Control)
+  1F801810h.Read  4   GPUREAD Read responses to GP0(C0h) and GP1(10h) commands
+  1F801814h.Read  4   GPUSTAT Read GPU Status Register
+
+

MDEC Registers

+
  1F801820h.Write 4   MDEC Command/Parameter Register (W)
+  1F801820h.Read  4   MDEC Data/Response Register (R)
+  1F801824h.Write 4   MDEC Control/Reset Register (W)
+  1F801824h.Read  4   MDEC Status Register (R)
+
+

SPU Voice 0..23 Registers

+
  1F801C00h+N*10h 4   Voice 0..23 Volume Left/Right
+  1F801C04h+N*10h 2   Voice 0..23 ADPCM Sample Rate
+  1F801C06h+N*10h 2   Voice 0..23 ADPCM Start Address
+  1F801C08h+N*10h 4   Voice 0..23 ADSR Attack/Decay/Sustain/Release
+  1F801C0Ch+N*10h 2   Voice 0..23 ADSR Current Volume
+  1F801C0Eh+N*10h 2   Voice 0..23 ADPCM Repeat Address
+
+

SPU Control Registers

+
  1F801D80h 4  Main Volume Left/Right
+  1F801D84h 4  Reverb Output Volume Left/Right
+  1F801D88h 4  Voice 0..23 Key ON (Start Attack/Decay/Sustain) (W)
+  1F801D8Ch 4  Voice 0..23 Key OFF (Start Release) (W)
+  1F801D90h 4  Voice 0..23 Channel FM (pitch lfo) mode (R/W)
+  1F801D94h 4  Voice 0..23 Channel Noise mode (R/W)
+  1F801D98h 4  Voice 0..23 Channel Reverb mode (R/W)
+  1F801D9Ch 4  Voice 0..23 Channel ON/OFF (status) (R)
+  1F801DA0h 2  Unknown? (R) or (W)
+  1F801DA2h 2  Sound RAM Reverb Work Area Start Address
+  1F801DA4h 2  Sound RAM IRQ Address
+  1F801DA6h 2  Sound RAM Data Transfer Address
+  1F801DA8h 2  Sound RAM Data Transfer Fifo
+  1F801DAAh 2  SPU Control Register (SPUCNT)
+  1F801DACh 2  Sound RAM Data Transfer Control
+  1F801DAEh 2  SPU Status Register (SPUSTAT) (R)
+  1F801DB0h 4  CD Volume Left/Right
+  1F801DB4h 4  Extern Volume Left/Right
+  1F801DB8h 4  Current Main Volume Left/Right
+  1F801DBCh 4  Unknown? (R/W)
+
+

SPU Reverb Configuration Area

+
  1F801DC0h 2  dAPF1  Reverb APF Offset 1
+  1F801DC2h 2  dAPF2  Reverb APF Offset 2
+  1F801DC4h 2  vIIR   Reverb Reflection Volume 1
+  1F801DC6h 2  vCOMB1 Reverb Comb Volume 1
+  1F801DC8h 2  vCOMB2 Reverb Comb Volume 2
+  1F801DCAh 2  vCOMB3 Reverb Comb Volume 3
+  1F801DCCh 2  vCOMB4 Reverb Comb Volume 4
+  1F801DCEh 2  vWALL  Reverb Reflection Volume 2
+  1F801DD0h 2  vAPF1  Reverb APF Volume 1
+  1F801DD2h 2  vAPF2  Reverb APF Volume 2
+  1F801DD4h 4  mSAME  Reverb Same Side Reflection Address 1 Left/Right
+  1F801DD8h 4  mCOMB1 Reverb Comb Address 1 Left/Right
+  1F801DDCh 4  mCOMB2 Reverb Comb Address 2 Left/Right
+  1F801DE0h 4  dSAME  Reverb Same Side Reflection Address 2 Left/Right
+  1F801DE4h 4  mDIFF  Reverb Different Side Reflection Address 1 Left/Right
+  1F801DE8h 4  mCOMB3 Reverb Comb Address 3 Left/Right
+  1F801DECh 4  mCOMB4 Reverb Comb Address 4 Left/Right
+  1F801DF0h 4  dDIFF  Reverb Different Side Reflection Address 2 Left/Right
+  1F801DF4h 4  mAPF1  Reverb APF Address 1 Left/Right
+  1F801DF8h 4  mAPF2  Reverb APF Address 2 Left/Right
+  1F801DFCh 4  vIN    Reverb Input Volume Left/Right
+
+

SPU Internal Registers

+
  1F801E00h+N*04h  4 Voice 0..23 Current Volume Left/Right
+  1F801E60h      20h Unknown? (R/W)
+  1F801E80h     180h Unknown? (Read: FFh-filled) (Unused or Write only?)
+
+

Expansion Region 2 (default 128 bytes, max 8 KBytes)

+
  1F802000h      80h Expansion Region (8bit data bus, crashes on 16bit access?)
+
+

Expansion Region 2 - Dual Serial Port (for TTY Debug Terminal)

+
  1F802020h/1st    DUART Mode Register 1.A (R/W)
+  1F802020h/2nd    DUART Mode Register 2.A (R/W)
+  1F802021h/Read   DUART Status Register A (R)
+  1F802021h/Write  DUART Clock Select Register A (W)
+  1F802022h/Read   DUART Toggle Baud Rate Generator Test Mode (Read=Strobe)
+  1F802022h/Write  DUART Command Register A (W)
+  1F802023h/Read   DUART Rx Holding Register A (FIFO) (R)
+  1F802023h/Write  DUART Tx Holding Register A (W)
+  1F802024h/Read   DUART Input Port Change Register (R)
+  1F802024h/Write  DUART Aux. Control Register (W)
+  1F802025h/Read   DUART Interrupt Status Register (R)
+  1F802025h/Write  DUART Interrupt Mask Register (W)
+  1F802026h/Read   DUART Counter/Timer Current Value, Upper/Bit15-8 (R)
+  1F802026h/Write  DUART Counter/Timer Reload Value,  Upper/Bit15-8 (W)
+  1F802027h/Read   DUART Counter/Timer Current Value, Lower/Bit7-0 (R)
+  1F802027h/Write  DUART Counter/Timer Reload Value,  Lower/Bit7-0 (W)
+  1F802028h/1st    DUART Mode Register 1.B (R/W)
+  1F802028h/2nd    DUART Mode Register 2.B (R/W)
+  1F802029h/Read   DUART Status Register B (R)
+  1F802029h/Write  DUART Clock Select Register B (W)
+  1F80202Ah/Read   DUART Toggle 1X/16X Test Mode (Read=Strobe)
+  1F80202Ah/Write  DUART Command Register B (W)
+  1F80202Bh/Read   DUART Rx Holding Register B (FIFO) (R)
+  1F80202Bh/Write  DUART Tx Holding Register B (W)
+  1F80202Ch/None   DUART Reserved Register (neither R nor W)
+  1F80202Dh/Read   DUART Input Port (R)
+  1F80202Dh/Write  DUART Output Port Configuration Register (W)
+  1F80202Eh/Read   DUART Start Counter Command (Read=Strobe)
+  1F80202Eh/Write  DUART Set Output Port Bits Command (Set means Out=LOW)
+  1F80202Fh/Read   DUART Stop Counter Command (Read=Strobe)
+  1F80202Fh/Write  DUART Reset Output Port Bits Command (Reset means Out=HIGH)
+
+

Expansion Region 2 - Int/Dip/Post

+
  1F802000h 1 DTL-H2000: ATCONS STAT (R)
+  1F802002h 1 DTL-H2000: ATCONS DATA (R and W)
+  1F802004h 2 DTL-H2000: Whatever 16bit data ?
+  1F802030h 1/4 DTL-H2000: Secondary IRQ10 Flags
+  1F802032h 1 DTL-H2000: Whatever IRQ Control ?
+  1F802040h 1 DTL-H2000: Bootmode "Dip switches" (R)
+  1F802041h 1 PSX: POST (external 7 segment display, indicate BIOS boot status)
+  1F802042h 1 DTL-H2000: POST/LED (similar to POST) (other addr, 2-digit wide)
+  1F802070h 1 PS2: POST2 (similar to POST, but PS2 BIOS uses this address)
+
+

Expansion Region 2 - Nocash Emulation Expansion

+
  1F802060h Emu-Expansion ID1 "E" (R)
+  1F802061h Emu-Expansion ID2 "X" (R)
+  1F802062h Emu-Expansion ID3 "P" (R)
+  1F802063h Emu-Expansion Version (01h) (R)
+  1F802064h Emu-Expansion Enable1 "O" (R/W)
+  1F802065h Emu-Expansion Enable2 "N" (R/W)
+  1F802066h Emu-Expansion Halt (R)
+  1F802067h Emu-Expansion Turbo Mode Flags (R/W)
+
+

Expansion Region 2 - PCSX-Redux Emulation Expansion

+
  1F802080h 4 Redux-Expansion ID "PCSX" (R)
+  1F802080h 1 Redux-Expansion Console putchar (W)
+  1F802081h 1 Redux-Expansion Debug break (W)
+  1F802082h 1 Redux-Expansion Exit code (W)
+  1F802084h 4 Redux-Expansion Notification message pointer (W)
+
+

Expansion Region 3 (default 1 byte, max 2 MBytes)

+
  1FA00000h - Not used by BIOS or any PSX games
+  1FA00000h - POST3 (similar to POST, but PS2 BIOS uses this address)
+
+

BIOS Region (default 512 Kbytes, max 4 MBytes)

+
  1FC00000h 80000h   BIOS ROM (512Kbytes) (Reset Entrypoint at BFC00000h)
+
+

Memory Control 3 (Cache Control)

+
  FFFE0130h 4        Cache Control
+
+

Coprocessor Registers

+
  COP0 System Control Coprocessor           - 32 registers (not all used)
+  COP1 N/A
+  COP2 Geometry Transformation Engine (GTE) - 64 registers (most are used)
+  COP3 N/A
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/kernelbios/index.html b/kernelbios/index.html new file mode 100644 index 0000000..f8c22c4 --- /dev/null +++ b/kernelbios/index.html @@ -0,0 +1,8366 @@ + + + + + + + + + + + + + + + + + + + + + + + + Kernel (BIOS) - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Kernel (BIOS)

+

BIOS Overview
+BIOS Memory Map
+BIOS Function Summary
+BIOS File Functions
+BIOS File Execute and Flush Cache
+BIOS CDROM Functions
+BIOS Memory Card Functions
+BIOS Interrupt/Exception Handling
+BIOS Event Functions
+BIOS Event Summary
+BIOS Thread Functions
+BIOS Timer Functions
+BIOS Joypad Functions
+BIOS GPU Functions
+BIOS Memory Allocation
+BIOS Memory Fill/Copy/Compare (SLOW)
+BIOS String Functions
+BIOS Number/String/Character Conversion
+BIOS Misc Functions
+BIOS Internal Boot Functions
+BIOS More Internal Functions
+BIOS PC File Server
+BIOS TTY Console (std_io)
+BIOS Character Sets
+BIOS Control Blocks
+BIOS Versions
+BIOS Patches

+

BIOS Overview

+

BIOS CDROM Boot

+

The main purpose of the BIOS is to boot games from CDROM, unfortunately, before +doing that, it displays the Sony intro. It's also doing some copy protection +and region checks, and refuses to boot unlicensed games, or illegal copies, or +games for other regions.

+

BIOS Bootmenu

+

The bootmenu shows up when starting the Playstation without CDROM inserted. The +menu allows to play Audio CDs, and to erase or copy game positions on Memory +Cards.

+

BIOS Functions

+

The BIOS contains a number of more or less useful, and probably more or less +inefficient functions that can be used by software.
+No idea if it's easy to take full control of the CPU, ie. to do all hardware +access and interrupt handling by software, without using the BIOS at all?
+Eventually the BIOS functions for accessing the CDROM drive are important, not +sure how complicated/compatible it'd be to access the CDROM drive directly via +I/O ports... among others, there might be different drives used in different +versions of the Playstation, which aren't fully compatible with each other?

+

BIOS Memory

+

The BIOS occupies 512Kbyte ROM with 8bit address bus (so the BIOS ROM is rather +slow, for faster execution, portions of it are relocated to the first 64K of +RAM). For some very strange reason, the original PSX BIOS executes all ROM +functions in uncached ROM, which is incredible slow (nocash BIOS uses cached +ROM, which does work without problems).
+The first 64Kbyte of the 2Mbyte Main RAM are reserved for the BIOS (containing +exception handlers, jump tables, other data, and relocated code). That reserved +region does unfortunately include the "valuable" first 32Kbytes (valuable +because that memory could be accessed directly via [R0+immediate], without +needing to use R1..R31 as base register).

+

BIOS Memory Map

+

BIOS ROM Map (512Kbytes)

+
  BFC00000h Kernel Part 1  (code/data executed in uncached ROM)
+  BFC10000h Kernel Part 2  (code/data relocated to cached RAM)
+  BFC18000h Intro/Bootmenu (code/data decompressed and relocated to RAM)
+  BFC64000h Character Sets
+
+

BIOS ROM Header/Footer

+
  BFC00100h Kernel BCD date  (YYYYMMDDh)
+  BFC00104h Console Type     (see Port 1F802030h, Secondary IRQ10 Controller)
+  BFC00108h Kernel Maker/Version Strings (separated by one or more 00h bytes)
+  BFC7FF32h GUI Version/Copyright Strings (if any) (separated by one 00h byte)
+
+

BIOS RAM Map (1st 64Kbytes of RAM) (fixed addresses mainly in 1st 500h bytes)

+
  00000000h 10h    Garbage Area (see notes below)
+  00000010h 30h    Unused/reserved
+  00000040h 20h    COP0 debug-break vector (not used by Kernel) (in KSEG0)
+  00000060h 4      RAM Size (in megabytes) (2 or 8)
+  00000064h 4      Unknown (set to 00000000h)
+  00000068h 4      Unknown (set to 000000FFh)
+  0000006Ch 14h    Unused/reserved
+  00000080h 10h    Exception vector (actually in KSEG0, ie. at 80000080h)
+  00000090h 10h    Unused/reserved
+  000000A0h 10h    A(nnh) Function Vector
+  000000B0h 10h    B(nnh) Function Vector
+  000000C0h 10h    C(nnh) Function Vector
+  000000D0h 30h    Unused/reserved
+  00000100h 58h    Table of Tables (BIOS Control Blocks) (see below)
+  00000158h 28h    Unused/reserved
+  00000180h 80h    Command line argument from SYSTEM.CNF; BOOT = fname argument
+  00000200h 300h   A(nnh) Jump Table
+  00000500h ...    Kernel Code/Data (relocated from ROM)
+  0000Cxxxh ...    Unused/reserved
+  0000DF80h 80h    Used for BIOS Patches (ie. used by games, not used by BIOS)
+  0000DFFCh 4      Response value from Intro/Bootmenu
+  0000E000h 2000h  Kernel Memory; ExCBs, EvCBs, and TCBs allocated via B(00h)
+
+

User Memory (not used by Kernel)

+
  00010000h ...    Begin of User RAM (Exefile, Data, Heap, Stack, etc.)
+  001FFF00h ...    Default Stacktop (usually in KSEG0)
+  1F800000h 400h   Scratchpad (Data-Cache mis-used as Fast RAM)
+
+

Table of Tables (see BIOS Control Blocks for details)

+

Each table entry consists of two 32bit values; containing the base address, and +total size (in bytes) of the corresponding control blocks.
+

  00000100h  ExCB Exception Chain Entrypoints (addr=var, size=4*08h)
+  00000108h  PCB  Process Control Block       (addr=var, size=1*04h)
+  00000110h  TCB  Thread Control Blocks       (addr=var, size=N*C0h)
+  00000118h  -    Unused/reserved
+  00000120h  EvCB Event Control Blocks        (addr=var, size=N*1Ch)
+  00000128h  -    Unused/reserved
+  00000130h  -    Unused/reserved
+  00000138h  -    Unused/reserved
+  00000140h  FCB  File Control Blocks         (addr=fixed, size=10h*2Ch)
+  00000148h  -    Unused/reserved
+  00000150h  DCB  Device Control Blocks       (addr=fixed, size=0Ah*50h)
+
+File handles (fd=00h..0Fh) can be simply converted as fcb=[140h]+fd*2Ch.
+Event handles (event=F10000xxh) as evcb=[120h]+(event AND FFFFh)*1Ch.

+

Garbage Area at Address 00000000h

+

The first some bytes of memory address 00000000h aren't actually used by the +Kernel, except for storing some garbage at that locations. However, this +garbage is actually important for bugged games like R-Types and Fade to Black +(ie. games that do read from address 00000000h due to using uninitialized +pointers).
+Initially, the garbage area is containing a copy of the 16-byte exception +handler at address 80h, but the first 4-bytes are typically smashed (set to +00000003h from some useless dummy writes in some useless CDROM delays). Ie. the +16-bytes should have these values:
+

  [00000000h]=3C1A0000h  ;<-- but overwritten by 00000003h after soon
+  [00000004h]=275A0C80h  ;<-- or 275A0C50h (in older BIOS)
+  [00000008h]=03400008h
+  [0000000Ch]=00000000h
+
+For R-Types, the halfword at [0] must non-zero (else the game will do a DMA to +address 0, and thereby destroy kernel memory). Fade to Black does several +garbage reads from [0..9], a wrong byte value at [5] can cause the game to +crash with an invalid memory access exception upon memory card access.

+

BIOS Function Summary

+

Parameters, Registers, Stack

+

Argument(s) are passed in R4,R5,R6,R7,[SP+10h],[SP+14h],etc.
+Caution: When calling a sub-function with N parameters, the caller MUST always +allocate N words on the stack, and, although the first four parameters are +passed in registers rather than on stack, the sub-function is allowed to +use/destroy these words at [SP+0..N*4-1].
+BIOS Functions (and custom callback functions) are allowed to destroy registers +R1-R15, R24-R25, R31 (RA), and HI/LO. Registers R16-R23, R29 (SP), and R30 (FP) +must be left unchanged (if the function uses that registers, then it must +push/pop them). R26 (K0) is reserved for exception handler and should be +usually not used by other functions. R27 (K1) and R28 (GP) are left more or +less unused by the BIOS, so one can more or less freely use them for whatever +purpose.
+The return value (if any) is stored in R2 register.

+

A-Functions (Call 00A0h with function number in R9 Register)

+

  A(00h) or B(32h) open(filename,accessmode)
+  A(01h) or B(33h) lseek(fd,offset,seektype)
+  A(02h) or B(34h) read(fd,dst,length)
+  A(03h) or B(35h) write(fd,src,length)
+  A(04h) or B(36h) close(fd)
+  A(05h) or B(37h) ioctl(fd,cmd,arg)
+  A(06h) or B(38h) exit(exitcode)
+  A(07h) or B(39h) isatty(fd)
+  A(08h) or B(3Ah) getc(fd)
+  A(09h) or B(3Bh) putc(char,fd)
+  A(0Ah) todigit(char)
+  A(0Bh) atof(src)     ;Does NOT work - uses (ABSENT) cop1 !!!
+  A(0Ch) strtoul(src,src_end,base)
+  A(0Dh) strtol(src,src_end,base)
+  A(0Eh) abs(val)
+  A(0Fh) labs(val)
+  A(10h) atoi(src)
+  A(11h) atol(src)
+  A(12h) atob(src,num_dst)
+  A(13h) setjmp(buf)
+  A(14h) longjmp(buf,param)
+  A(15h) strcat(dst,src)
+  A(16h) strncat(dst,src,maxlen)
+  A(17h) strcmp(str1,str2)
+  A(18h) strncmp(str1,str2,maxlen)
+  A(19h) strcpy(dst,src)
+  A(1Ah) strncpy(dst,src,maxlen)
+  A(1Bh) strlen(src)
+  A(1Ch) index(src,char)
+  A(1Dh) rindex(src,char)
+  A(1Eh) strchr(src,char)  ;exactly the same as "index"
+  A(1Fh) strrchr(src,char) ;exactly the same as "rindex"
+  A(20h) strpbrk(src,list)
+  A(21h) strspn(src,list)
+  A(22h) strcspn(src,list)
+  A(23h) strtok(src,list)  ;use strtok(0,list) in further calls
+  A(24h) strstr(str,substr)       ;Bugged
+  A(25h) toupper(char)
+  A(26h) tolower(char)
+  A(27h) bcopy(src,dst,len)
+  A(28h) bzero(dst,len)
+  A(29h) bcmp(ptr1,ptr2,len)      ;Bugged
+  A(2Ah) memcpy(dst,src,len)
+  A(2Bh) memset(dst,fillbyte,len)
+  A(2Ch) memmove(dst,src,len)     ;Bugged
+  A(2Dh) memcmp(src1,src2,len)    ;Bugged
+  A(2Eh) memchr(src,scanbyte,len)
+  A(2Fh) rand()
+  A(30h) srand(seed)
+  A(31h) qsort(base,nel,width,callback)
+  A(32h) strtod(src,src_end) ;Does NOT work - uses (ABSENT) cop1 !!!
+  A(33h) malloc(size)
+  A(34h) free(buf)
+  A(35h) lsearch(key,base,nel,width,callback)
+  A(36h) bsearch(key,base,nel,width,callback)
+  A(37h) calloc(sizx,sizy)            ;SLOW!
+  A(38h) realloc(old_buf,new_siz)     ;SLOW!
+  A(39h) InitHeap(addr,size)
+  A(3Ah) _exit(exitcode)
+  A(3Bh) or B(3Ch) getchar()
+  A(3Ch) or B(3Dh) putchar(char)
+  A(3Dh) or B(3Eh) gets(dst)
+  A(3Eh) or B(3Fh) puts(src)
+  A(3Fh) printf(txt,param1,param2,etc.)
+  A(40h) SystemErrorUnresolvedException()
+  A(41h) LoadTest(filename,headerbuf)
+  A(42h) Load(filename,headerbuf)
+  A(43h) Exec(headerbuf,param1,param2)
+  A(44h) FlushCache()
+  A(45h) init_a0_b0_c0_vectors
+  A(46h) GPU_dw(Xdst,Ydst,Xsiz,Ysiz,src)
+  A(47h) gpu_send_dma(Xdst,Ydst,Xsiz,Ysiz,src)
+  A(48h) SendGP1Command(gp1cmd)
+  A(49h) GPU_cw(gp0cmd)   ;send GP0 command word
+  A(4Ah) GPU_cwp(src,num) ;send GP0 command word and parameter words
+  A(4Bh) send_gpu_linked_list(src)
+  A(4Ch) gpu_abort_dma()
+  A(4Dh) GetGPUStatus()
+  A(4Eh) gpu_sync()
+  A(4Fh) SystemError
+  A(50h) SystemError
+  A(51h) LoadExec(filename,stackbase,stackoffset)
+  A(52h) GetSysSp
+  A(53h) SystemError           ;PS2: set_ioabort_handler(src)
+  A(54h) or A(71h) _96_init()
+  A(55h) or A(70h) _bu_init()
+  A(56h) or A(72h) _96_remove()  ;does NOT work due to SysDeqIntRP bug
+  A(57h) return 0
+  A(58h) return 0
+  A(59h) return 0
+  A(5Ah) return 0
+  A(5Bh) dev_tty_init()                                      ;PS2: SystemError
+  A(5Ch) dev_tty_open(fcb,and unused:"path\name",accessmode) ;PS2: SystemError
+  A(5Dh) dev_tty_in_out(fcb,cmd)                             ;PS2: SystemError
+  A(5Eh) dev_tty_ioctl(fcb,cmd,arg)                          ;PS2: SystemError
+  A(5Fh) dev_cd_open(fcb,"path\name",accessmode)
+  A(60h) dev_cd_read(fcb,dst,len)
+  A(61h) dev_cd_close(fcb)
+  A(62h) dev_cd_firstfile(fcb,"path\name",direntry)
+  A(63h) dev_cd_nextfile(fcb,direntry)
+  A(64h) dev_cd_chdir(fcb,"path")
+  A(65h) dev_card_open(fcb,"path\name",accessmode)
+  A(66h) dev_card_read(fcb,dst,len)
+  A(67h) dev_card_write(fcb,src,len)
+  A(68h) dev_card_close(fcb)
+  A(69h) dev_card_firstfile(fcb,"path\name",direntry)
+  A(6Ah) dev_card_nextfile(fcb,direntry)
+  A(6Bh) dev_card_erase(fcb,"path\name")
+  A(6Ch) dev_card_undelete(fcb,"path\name")
+  A(6Dh) dev_card_format(fcb)
+  A(6Eh) dev_card_rename(fcb1,"path\name1",fcb2,"path\name2")
+  A(6Fh) ?   ;card ;[r4+18h]=00000000h  ;card_clear_error(fcb) or so
+  A(70h) or A(55h) _bu_init()
+  A(71h) or A(54h) _96_init()
+  A(72h) or A(56h) _96_remove()   ;does NOT work due to SysDeqIntRP bug
+  A(73h) return 0
+  A(74h) return 0
+  A(75h) return 0
+  A(76h) return 0
+  A(77h) return 0
+  A(78h) CdAsyncSeekL(src)
+  A(79h) return 0               ;DTL-H: Unknown?
+  A(7Ah) return 0               ;DTL-H: Unknown?
+  A(7Bh) return 0               ;DTL-H: Unknown?
+  A(7Ch) CdAsyncGetStatus(dst)
+  A(7Dh) return 0               ;DTL-H: Unknown?
+  A(7Eh) CdAsyncReadSector(count,dst,mode)
+  A(7Fh) return 0               ;DTL-H: Unknown?
+  A(80h) return 0               ;DTL-H: Unknown?
+  A(81h) CdAsyncSetMode(mode)
+  A(82h) return 0               ;DTL-H: Unknown?
+  A(83h) return 0               ;DTL-H: Unknown?
+  A(84h) return 0               ;DTL-H: Unknown?
+  A(85h) return 0               ;DTL-H: Unknown?, or reportedly, CdStop (?)
+  A(86h) return 0               ;DTL-H: Unknown?
+  A(87h) return 0               ;DTL-H: Unknown?
+  A(88h) return 0               ;DTL-H: Unknown?
+  A(89h) return 0               ;DTL-H: Unknown?
+  A(8Ah) return 0               ;DTL-H: Unknown?
+  A(8Bh) return 0               ;DTL-H: Unknown?
+  A(8Ch) return 0               ;DTL-H: Unknown?
+  A(8Dh) return 0               ;DTL-H: Unknown?
+  A(8Eh) return 0               ;DTL-H: Unknown?
+  A(8Fh) return 0               ;DTL-H: Unknown?
+  A(90h) CdromIoIrqFunc1()
+  A(91h) CdromDmaIrqFunc1()
+  A(92h) CdromIoIrqFunc2()
+  A(93h) CdromDmaIrqFunc2()
+  A(94h) CdromGetInt5errCode(dst1,dst2)
+  A(95h) CdInitSubFunc()
+  A(96h) AddCDROMDevice()
+  A(97h) AddMemCardDevice()     ;DTL-H: SystemError
+  A(98h) AddDuartTtyDevice()    ;DTL-H: AddAdconsTtyDevice ;PS2: SystemError
+  A(99h) add_nullcon_driver()
+  A(9Ah) SystemError            ;DTL-H: AddMessageWindowDevice
+  A(9Bh) SystemError            ;DTL-H: AddCdromSimDevice
+  A(9Ch) SetConf(num_EvCB,num_TCB,stacktop)
+  A(9Dh) GetConf(num_EvCB_dst,num_TCB_dst,stacktop_dst)
+  A(9Eh) SetCdromIrqAutoAbort(type,flag)
+  A(9Fh) SetMem(megabytes)
+
+Below functions A(A0h..B4h) not supported on pre-retail DTL-H2000 devboard:
+
  A(A0h) _boot()
+  A(A1h) SystemError(type,errorcode)
+  A(A2h) EnqueueCdIntr()  ;with prio=0 (fixed)
+  A(A3h) DequeueCdIntr()  ;does NOT work due to SysDeqIntRP bug
+  A(A4h) CdGetLbn(filename) ;get 1st sector number (or garbage when not found)
+  A(A5h) CdReadSector(count,sector,buffer)
+  A(A6h) CdGetStatus()
+  A(A7h) bufs_cb_0()
+  A(A8h) bufs_cb_1()
+  A(A9h) bufs_cb_2()
+  A(AAh) bufs_cb_3()
+  A(ABh) _card_info(port)
+  A(ACh) _card_load(port)
+  A(ADh) _card_auto(flag)
+  A(AEh) bufs_cb_4()
+  A(AFh) card_write_test(port)  ;CEX-1000: jump_to_00000000h
+  A(B0h) return 0               ;CEX-1000: jump_to_00000000h
+  A(B1h) return 0               ;CEX-1000: jump_to_00000000h
+  A(B2h) ioabort_raw(param)     ;CEX-1000: jump_to_00000000h
+  A(B3h) return 0               ;CEX-1000: jump_to_00000000h
+  A(B4h) GetSystemInfo(index)   ;CEX-1000: jump_to_00000000h
+  A(B5h..BFh) N/A ;jump_to_00000000h
+

+

B-Functions (Call 00B0h with function number in R9 Register)

+

  B(00h) alloc_kernel_memory(size)
+  B(01h) free_kernel_memory(buf)
+  B(02h) init_timer(t,reload,flags)
+  B(03h) get_timer(t)
+  B(04h) enable_timer_irq(t)
+  B(05h) disable_timer_irq(t)
+  B(06h) restart_timer(t)
+  B(07h) DeliverEvent(class, spec)
+  B(08h) OpenEvent(class,spec,mode,func)
+  B(09h) CloseEvent(event)
+  B(0Ah) WaitEvent(event)
+  B(0Bh) TestEvent(event)
+  B(0Ch) EnableEvent(event)
+  B(0Dh) DisableEvent(event)
+  B(0Eh) OpenTh(reg_PC,reg_SP_FP,reg_GP)
+  B(0Fh) CloseTh(handle)
+  B(10h) ChangeTh(handle)
+  B(11h) jump_to_00000000h
+  B(12h) InitPAD2(buf1,siz1,buf2,siz2)
+  B(13h) StartPAD2()
+  B(14h) StopPAD2()
+  B(15h) PAD_init2(type,button_dest,unused,unused)
+  B(16h) PAD_dr()
+  B(17h) ReturnFromException()
+  B(18h) ResetEntryInt()
+  B(19h) HookEntryInt(addr)
+  B(1Ah) SystemError  ;PS2: return 0
+  B(1Bh) SystemError  ;PS2: return 0
+  B(1Ch) SystemError  ;PS2: return 0
+  B(1Dh) SystemError  ;PS2: return 0
+  B(1Eh) SystemError  ;PS2: return 0
+  B(1Fh) SystemError  ;PS2: return 0
+  B(20h) UnDeliverEvent(class,spec)
+  B(21h) SystemError  ;PS2: return 0
+  B(22h) SystemError  ;PS2: return 0
+  B(23h) SystemError  ;PS2: return 0
+  B(24h) jump_to_00000000h
+  B(25h) jump_to_00000000h
+  B(26h) jump_to_00000000h
+  B(27h) jump_to_00000000h
+  B(28h) jump_to_00000000h
+  B(29h) jump_to_00000000h
+  B(2Ah) SystemError  ;PS2: return 0
+  B(2Bh) SystemError  ;PS2: return 0
+  B(2Ch) jump_to_00000000h
+  B(2Dh) jump_to_00000000h
+  B(2Eh) jump_to_00000000h
+  B(2Fh) jump_to_00000000h
+  B(30h) jump_to_00000000h
+  B(31h) jump_to_00000000h
+  B(32h) or A(00h) open(filename,accessmode)
+  B(33h) or A(01h) lseek(fd,offset,seektype)
+  B(34h) or A(02h) read(fd,dst,length)
+  B(35h) or A(03h) write(fd,src,length)
+  B(36h) or A(04h) close(fd)
+  B(37h) or A(05h) ioctl(fd,cmd,arg)
+  B(38h) or A(06h) exit(exitcode)
+  B(39h) or A(07h) isatty(fd)
+  B(3Ah) or A(08h) getc(fd)
+  B(3Bh) or A(09h) putc(char,fd)
+  B(3Ch) or A(3Bh) getchar()
+  B(3Dh) or A(3Ch) putchar(char)
+  B(3Eh) or A(3Dh) gets(dst)
+  B(3Fh) or A(3Eh) puts(src)
+  B(40h) cd(name)
+  B(41h) format(devicename)
+  B(42h) firstfile2(filename,direntry)
+  B(43h) nextfile(direntry)
+  B(44h) rename(old_filename,new_filename)
+  B(45h) erase(filename)
+  B(46h) undelete(filename)
+  B(47h) AddDrv(device_info)  ;subfunction for AddXxxDevice functions
+  B(48h) DelDrv(device_name_lowercase)
+  B(49h) PrintInstalledDevices()
+
+Below functions B(4Ah..5Dh) not supported on pre-retail DTL-H2000 devboard:
+
  B(4Ah) InitCARD2(pad_enable)  ;uses/destroys k0/k1 !!!
+  B(4Bh) StartCARD2()
+  B(4Ch) StopCARD2()
+  B(4Dh) _card_info_subfunc(port)  ;subfunction for "_card_info"
+  B(4Eh) _card_write(port,sector,src)
+  B(4Fh) _card_read(port,sector,dst)
+  B(50h) _new_card()
+  B(51h) Krom2RawAdd(shiftjis_code)
+  B(52h) SystemError  ;PS2: return 0
+  B(53h) Krom2Offset(shiftjis_code)
+  B(54h) _get_errno()
+  B(55h) _get_error(fd)
+  B(56h) GetC0Table
+  B(57h) GetB0Table
+  B(58h) _card_chan()
+  B(59h) testdevice(devicename)
+  B(5Ah) SystemError  ;PS2: return 0
+  B(5Bh) ChangeClearPAD(int)
+  B(5Ch) _card_status(slot)
+  B(5Dh) _card_wait(slot)
+  B(5Eh..FFh) N/A ;jump_to_00000000h    ;CEX-1000: B(5Eh..F6h) only
+  B(100h....) N/A ;garbage              ;CEX-1000: B(F7h.....) and up
+

+

C-Functions (Call 00C0h with function number in R9 Register)

+
  C(00h) EnqueueTimerAndVblankIrqs(priority) ;used with prio=1
+  C(01h) EnqueueSyscallHandler(priority)     ;used with prio=0
+  C(02h) SysEnqIntRP(priority,struc)  ;bugged, use with care
+  C(03h) SysDeqIntRP(priority,struc)  ;bugged, use with care
+  C(04h) get_free_EvCB_slot()
+  C(05h) get_free_TCB_slot()
+  C(06h) ExceptionHandler()
+  C(07h) InstallExceptionHandlers()  ;destroys/uses k0/k1
+  C(08h) SysInitMemory(addr,size)
+  C(09h) SysInitKernelVariables()
+  C(0Ah) ChangeClearRCnt(t,flag)
+  C(0Bh) SystemError  ;PS2: return 0
+  C(0Ch) InitDefInt(priority) ;used with prio=3
+  C(0Dh) SetIrqAutoAck(irq,flag)
+  C(0Eh) return 0               ;DTL-H2000: dev_sio_init
+  C(0Fh) return 0               ;DTL-H2000: dev_sio_open
+  C(10h) return 0               ;DTL-H2000: dev_sio_in_out
+  C(11h) return 0               ;DTL-H2000: dev_sio_ioctl
+  C(12h) InstallDevices(ttyflag)
+  C(13h) FlushStdInOutPut()
+  C(14h) return 0               ;DTL-H2000: SystemError
+  C(15h) _cdevinput(circ,char)
+  C(16h) _cdevscan()
+  C(17h) _circgetc(circ)    ;uses r5 as garbage txt for _ioabort
+  C(18h) _circputc(char,circ)
+  C(19h) _ioabort(txt1,txt2)
+  C(1Ah) set_card_find_mode(mode)  ;0=normal, 1=find deleted files
+  C(1Bh) KernelRedirect(ttyflag)   ;PS2: ttyflag=1 causes SystemError
+  C(1Ch) AdjustA0Table()
+  C(1Dh) get_card_find_mode()
+  C(1Eh..7Fh) N/A ;jump_to_00000000h
+  C(80h.....) N/A ;mirrors to B(00h.....)
+
+

SYS-Functions (Syscall opcode with function number in R4 aka A0 Register)

+

  SYS(00h) NoFunction()
+  SYS(01h) EnterCriticalSection()
+  SYS(02h) ExitCriticalSection()
+  SYS(03h) ChangeThreadSubFunction(addr) ;syscall with r4=03h, r5=addr
+  SYS(04h..FFFFFFFFh) calls DeliverEvent(F0000010h,4000h)
+
+The 20bit immediate in the "syscall imm" opcode is unused (should be zero).

+

BREAK-Functions (Break opcode with function number in opcode's immediate)

+

BRK opcodes may be used within devkits, however, the standard BIOS simply calls +DeliverEvent(F0000010h,1000h) and SystemError_A_40h upon any BRK opcodes (as +well as on any other unresolved exceptions).
+

  BRK(1C00h) Division by zero (commonly checked/invoked by software)
+  BRK(1800h) Division overflow (-80000000h/-1, sometimes checked by software)
+
+Below breaks are used in DTL-H2000 BIOS:
+
  BRK(1h) Whatever lockup or so?
+  BRK(101h) PCInit()   Inits the fileserver.
+  BRK(102h) PCCreat(filename, fileattributes)
+  BRK(103h) PCOpen(filename, accessmode)
+  BRK(104h) PCClose(filehandle)
+  BRK(105h) PCRead(filehandle, length, memory_destination_address)
+  BRK(106h) PCWrite(filehandle, length, memory_source_address)
+  BRK(107h) PClSeek(filehandle, file_offset, seekmode)
+  BRK(3C400h) User has typed "break" command in debug console
+
+The break functions have argument(s) in A1,A2,A3 (ie. unlike normal BIOS +functions not in A0,A1,A2), and TWO return values (in R2, and R3). These +functions require a commercial/homebrew devkit... consisting of a Data Cable +(for accessing the PC's harddisk)... and an Expansion ROM (for handling the +BREAK opcodes)... or so?

+

BIOS File Functions

+

A(00h) or B(32h) - open(filename, accessmode) - Opens a file for IO

+

  out: V0  File handle (00h..0Fh), or -1 if error.
+
+Opens a file on the target device for io. Accessmode is set like this:
+
  bit0     1=Read  ;\These bits aren't actually used by the BIOS, however, at
+  bit1     1=Write ;/least 1 should be set; won't work when all 32bits are zero
+  bit2     1=Exit without waiting for incoming data (when TTY buffer empty)
+  bit9     0=Open Existing File, 1=Create New file (memory card only)
+  bit15    1=Asynchronous mode (memory card only; don't wait for completion)
+  bit16-31 Number of memory card blocks for a new file on the memory card
+
+The PSX can have a maximum of 16 files open at any time, of which, 2 handles +are always reserved for std_io, so only 14 handles are available for actual +files. Some functions (cd, testdevice, erase, undelete, +format, firstfile2, rename) are temporarily allocating 1 filehandle +(rename tries to use 2 filehandles, but, it does accidently use only 1 +handle, too). So, for example, erase would fail if more than 13 file +handles are opened by the game.

+

A(01h) or B(33h) - lseek(fd, offset, seektype) - Move the file pointer

+

   seektype 0 = from start of file        (with positive offset)
+            1 = from current file pointer (with positive/negative offset)
+            2 = Bugs. Should be from end of file.
+
+Moves the file pointer the number of bytes in A1, relative to the location +specified by A2. Movement from the eof is incorrect. Also, movement beyond the +end of the file is not checked.

+

A(02h) or B(34h) - read(fd, dst, length) - Read data from an open file

+

  out: V0  Number of bytes actually read, -1 if failed.
+
+Reads the number of bytes from the specified open file. If length is not +specified an error is returned. Read per $0080 bytes from memory card (bu:) and +per $0800 from cdrom (cdrom:).

+

A(03h) or B(35h) - write(fd, src, length) - Write data to an open file

+

  out: V0  Number of bytes written.
+
+Writes the number of bytes to the specified open file. Write to the memory card +per $0080 bytes. Writing to the cdrom returns 0.

+

A(04h) or B(36h) - close(fd) - Close an open file

+

Returns r2=fd (or r2=-1 if failed).

+

A(08h) or B(3Ah) - getc(fd) - read one byte from file

+

  out: R2=character (sign-expanded) or FFFFFFFFh=error
+
+Internally redirects to "read(fd,tempbuf,1)". For some strange reason, the +returned character is sign-expanded; so, a return value of FFFFFFFFh could mean +either character FFh, or error.

+

A(09h) or B(3Bh) - putc(char,fd) - write one byte to file

+

Observe that "fd" is the 2nd paramter (not the 1st paramter as usually).
+

  out:  R2=Number of bytes actually written, -1 if failed
+
+Internally redirects to "write(fd,tempbuf,1)".

+

B(40h) - cd(name) - Change the current directory on target device

+

Changes the current directory on the specified device, which should be "cdrom:" +(memory cards don't support directories). The PSX supports only a current +directory, but NOT a current device (ie. after cd, the directory name may be +ommited from filenames, but the device name must be still included in all +filenames).
+

  in:  A0  Pointer to new directory path (eg. "cdrom:\path")
+
+Returns 1=okay, or 0=failed.
+The function doesn't verify if the directory exists. Caution: For cdrom, the +function does always load the path table from the disk (even if it was already +stored in RAM, so cd is causing useless SLOW read/seek delays).

+

B(42h) - firstfile2(filename,direntry) - Find first file to match the name

+

Returns r2=direntry (or r2=0 if no matching files).
+Searches for the first file to match the specified filename; the filename may +contain "?" and "*" wildcards. "*" means to ignore ALL following characters; +accordingly one cannot specify any further characters after the "*" (eg. +"DATA*" would work, but "*.DAT" won't work). "?" is meant to ignore a single +character cell. Note: The "?" wildcards (but not "*") can be used also in all +other file functions; causing the function to use the first matching name (eg. +erase "????" would erase the first matching file, not all matching files).
+Start the name with the device you want to address. (ie. pcdrv:) Different +drives can be accessed as normally by their drive names (a:, c:, huh?) if path +is omitted after the device, the current directory will be used.
+A direntry structure looks like this:
+

  00h 14h Filename, terminated with 00h
+  14h 4   File attribute (always 0 for cdrom) (50h=norm or A0h=del for card)
+  18h 4   File size
+  1Ch 4   Pointer to next direntry? (not used?)
+  20h 4   First Sector Number
+  24h 4   Reserved (not used)
+
+BUG: If "?" matches the ending 00h byte of a name, then any further characters +in the search expression are ignored (eg. "FILE?.DAT" would match to +"FILE2.DAT", but accidently also to "FILE").
+BUG: For CDROM, the BIOS includes some code that is intended to realize disk +changes during firstfile2/nextfile operations, however, that code is so bugged +that it does rather ensure that the BIOS does NOT realize new disks being +inserted during firstfile2/nextfile.
+BUG: firstfile2/nextfile is internally using a FCB. On the first call to +firstfile2, the BIOS is searching a free FCB, and does apply that as "search +fcb", but it doesn't mark that FCB as allocated, so other file functions may +accidently use the same FCB. Moreover, the BIOS does memorize that "search +fcb", and, even when starting a new search via another call to firstfile2, it +keeps using that FCB for search (without checking if the FCB is still free). A +possible workaround is not to have any files opened during firstfile2/nextfile +operations.

+

B(43h) - nextfile(direntry) - Searches for the next file to match the name

+

Returns r2=direntry (or r2=0 if no more matching files).
+Uses the settings of a previous firstfile2/nextfile command.

+

B(44h) - rename(old_filename, new_filename)

+

Returns 1=okay, or 0=failed.

+

B(45h) - erase(filename) - Delete a file on target device

+

Returns 1=okay, or 0=failed.

+

B(46h) - undelete(filename)

+

Returns 1=okay, or 0=failed.

+

B(41h) - format(devicename)

+

Erases all files on the device (ie. for formatting memory cards).
+Returns 1=okay, or 0=failed.

+

B(54h) - _get_errno()

+

Indicates the reason of the most recent file function error (open, +lseek, read, write, close, _get_error, ioctl, cd, +testdevice, erase, undelete, format, rename). Use +_get_errno() ONLY if an error has occured (the error code isn't reset to zero +by functions that are passing okay). firstfile2/nextfile do NOT affect +_get_errno(). See below list of File Error Numbers for more info.

+

B(55h) - _get_error(fd)

+

Basically same as B(54h), but allowing to specify a file handle for which error +information is to be received; accordingly it doesn't work for functions that +do use 'hidden' internal file handles (eg. erase, or unsuccessful +open). Returns FCB[18h], or FFFFFFFFh if the handle is invalid/unused.

+

A(05h) or B(37h) - ioctl(fd,cmd,arg)

+

Used only for TTY.

+

A(07h) or B(39h) - isatty(fd)

+

Returns bit1 of the file's DCB flags. That bit is set only for Duart/TTY, and +is cleared for Dummy/TTY, Memory Card, and CDROM.

+

B(59h) - testdevice(devicename)

+

Whatever. Checks the devicename, and if it's accepted, calls a device specific +function. For the existing devices (cdrom,bu,tty) that specific function simply +returns without doing anything. Maybe other devices (like printers or modems) +would do something more interesting.

+

File Error Numbers for B(54h) and B(55h)

+
  00h okay (though many successful functions leave old error code unchanged)
+  02h file not found
+  06h bad device port number (tty2 and up)
+  09h invalid or unused file handle
+  10h general error (physical I/O error, unformatted, disk changed for old fcb)
+  11h file already exists error (create/undelete/rename)
+  12h tried to rename a file from one device to another device
+  13h unknown device name
+  16h sector alignment error, or fpos>=filesize, unknown seektype or ioctl cmd
+  18h not enough free file handles
+  1Ch not enough free memory card blocks
+  FFFFFFFFh invalid or unused file handle passed to B(55h) function
+
+

BIOS File Execute and Flush Cache

+

A(41h) - LoadTest(filename, headerbuf)

+

Loads the 800h-byte exe file header to an internal sector buffer, and does then +copy bytes [10h..4Bh] of that header to headerbuf[00h..3Bh].

+

A(42h) - Load(filename, headerbuf)

+

Same as LoadTest (see there for details), but additionally loads the body +of the executable (using the size and destination address in the file header), +and does call FlushCache. The exe can be then started via Exec (this isn't +done automatically by LoadTest). Unlike "LoadExec", the +"LoadTest/Exec" combination allows to return the new exe file to return +to the old exe file (instead of restarting the boot executable).
+BUG: Uses the unstable FlushCache function (see there for details).

+

A(43h) - Exec(headerbuf, param1, param2)

+

Can be used to start a previously loaded executable. The function saves +R16,R28,R30,SP,RA in the reserved region of headerbuf (rather than on stack), +more or less slowly zerofills the memfill region specified in headerbuf, reads +the stack base and offset values and sets SP and FP to base+offset (or leaves +them unchanged if base=0), reads the GP value from headerbuf and sets GP to +that value. Then calls the excecutables entrypoint, with param1 and param2 +passed in r4,r5.
+If the executable (should) return, then R16,R28,R30,SP,RA are restored from +headerbuf, and the function returns with r2=1.

+

A(51h) - LoadExec(filename, stackbase, stackoffset)

+

This is a rather bizarre function. In short, it does load and execute the +specified file, and thereafter, it (tries to) reload and restart to boot +executable.
+Part1: Takes a copy of the filename, with some adjustments: Everything up to +the first ":" or 00h byte is copied as is (ie. the device name, if it does +exist, or otherwise the whole path\filename.ext;ver), the remaining characters +are copied and converted to uppercase (ie. the path\filename.ext;ver part, or +none if the device name didn't exist), finally, checks if a ";" exists (ie. the +version suffix), if there's none, then it appends ";1" as default version. +CAUTION: The BIOS allocates ONLY 28 bytes on stack for the copy of the +filename, that region is followed by 4 unused bytes, so the maximum length +would be 32 bytes (31 characters plus EOL) (eg. +"device:\pathname\filename.ext;1",00h).
+Part2: Enables IRQs via ExitCriticalSection, memorizes the stack base/offset +values from the previously loaded executable (which should have been the boot +executable, unless LoadExec should have been used in nested fashion), +does then use LoadTest to load the desired file, replaces the stack +base/offset values in its headerbuf by the LoadExec parameter values, and +does then execute it via Exec(headerbuf,1,0).
+Part3: If the exefile returns, or if it couldn't be loaded, then the boot file +is (unsuccessfully) attempted to be reloaded: Enables IRQs via +ExitCriticalSection, loads the boot file via LoadTest, replaces the stack +base/offset values in its headerbuf by the values memorized in Part2 (which +\<should> be the boot executable's values from SYSTEM.CNF, unless the +nesting stuff occurred), and does then execute the boot file via +Exec(headerbuf,1,0).
+Part4: If the boot file returns, or if it couldn't be loaded, then the function +looks up in a "JMP $" endless loop (normally, returning from the boot exe +causes SystemError("B",38Ch), however, after using +LoadExec, this functionality is replaced by the "JMP $" lockup.
+BUG: Uses the unstable FlushCache function (see there for details).
+BUG: Part3 accidently treats the first 4 characters of the exename as memory +address (causing an invalid memory address exception on address 6F726463h, for +"cdrom:filename.exe").

+

A(9Ch) - SetConf(num_EvCB, num_TCB, stacktop)

+

Changes the number of EvCBs and TCBs, and the stacktop. These values are usually +initialized from the settings in the SYSTEM.CNF file, so using this function +usually shouldn't ever be required.
+The function deallocates all old ExCBs, EvCBs, TCBs (so all Exception handlers, +Events, and Threads (except the current one) are lost, and all other memory +that may have been allocated via alloc_kernel_memory(size) is deallocated, too. +It does then allocate the new control blocks, and enqueue the default handlers. +Despite of the changed stacktop, the current stack pointer is kept intact, and +the function returns to the caller.

+

A(9Dh) - GetConf(num_EvCB_dst, num_TCB_dst, stacktop_dst)

+

Returns the number of EvCBs, TCBs, and the initial stacktop. There's no return +value in the R2 register, instead, the three 32bit return values are stored at +the specified "dst" addresses.

+

A(44h) - FlushCache()

+

Flushes the Code Cache, so opcodes are ensured to be loaded from RAM. This is +required when loading program code via DMA (ie. from CDROM) (the cache +controller apparently doesn't realize changes to RAM that are caused by DMA). +The LoadTest and LoadExec functions are automatically calling +FlushCache (so FlushCache is required only when loading program code via +"read" or via "CdReadSector").
+FlushCache may be also required when relocating or modifying program code by +software (the cache controller doesn't seem to realize modifications to memory +mirrors, eg. patching the exception handler at 80000080h seems to be work +without FlushCache, but patching the same bytes at 00000080h doesn't).
+Note: The PSX doesn't have a Data Cache (or actually, it has, but it's misused +as Fast RAM, mapped to a fixed memory region, and which isn't accessable by +DMA), so FlushCache isn't required for regions that contain data.
+BUG: The FlushCache function contains a handful of opcodes that do use the k0 +register without having IRQs disabled at that time, if an IRQ occurs during +those opcodes, then the k0 value gets destroyed by the exception handler, +causing FlushCache to get trapped in an endless loop.
+One workaround would be to disable all IRQs before calling FlushCache, however, +the BIOS does internally call the function without IRQs disabled, that applies +to:
+

  load_file  A(42h)
+  load_exec  A(51h)
+  add_device B(47h) (and all "add_xxx_device" functions)
+  init_card  B(4Ah)
+  and by intro/boot code
+
+for load_file/load_exec, IRQ2 (cdrom) and IRQ3 (dma) need to be enabled, so the +"disable all IRQs" workaround cannot be used for that functions, however, one +can/should disable as many IRQs as possible, ie. everything except IRQ2/IRQ3, +and all DMA interrupts except DMA3 (cdrom).

+

Executable Memory Allocation

+

LoadTest and LoadExec are simply loading the file to the address +specified in the exe file header. There's absolutely no verification whether +that memory is (or isn't) allocated via malloc, or if it is used by the boot +executable, or by the kernel, or if it does contain RAM at all.
+When using the "malloc" function combined with loading exe files, it may be +recommended not to pass all memory to InitHeap (ie. to keep a memory region +being reserved for loading executables).

+

Note

+

For more info about EXE files and their headers, see
+CDROM File Formats

+

BIOS CDROM Functions

+

General File Functions

+

CDROMs are basically accessed via normal file functions, with device name +"cdrom:" (which is an abbreviation for "cdrom0:", anyways, the port number is +ignored).
+BIOS File Functions
+BIOS File Execute and Flush Cache
+Before starting the boot executable, the BIOS automatically calls _96_init(), so +the game doesn't need to do any initializations before using CDROM file +functions.

+

Absent CD-Audio Support

+

The Kernel doesn't include any functions for playing Audio tracks. Also, +there's no BIOS function for setting the XA-ADPCM file/channel filter values. +So CD Audio can be used only by directly programming the CDROM I/O ports.

+

Asynchronous CDROM Access

+

The normal File functions are always using synchroneous access for CDROM (ie. +the functions do wait until all data is transferred) (unlike as for memory +cards, accessmode.bit15 cannot be used to activate asynchronous cdrom access).
+However, one can read files in asynchrouneous fashion via CdGetLbn, +CdAsyncSeekL, and CdAsyncReadSector. CDROM files are non-fragmented, so they +can be read simply from incrementing sector numbers.

+

A(A4h) - CdGetLbn(filename)

+

Returns the first sector number used by the file, or -1 in case of error.
+BUG: The function accidently returns -1 for the first file in the directory +(the first file should be a dummy entry for the current or parent directory or +so, so that bug isn't much of a problem), if the file is not found, then the +function accidently returns garbage (rather than -1).

+

A(A5h) - CdReadSector(count,sector,buffer)

+

Reads \<count> sectors, starting at \<sector>, and writes data to +\<buffer>. The read is done in mode=80h (double speed, 800h-bytes per +sector). The function waits until all sectors are transferred, and does then +return the number of sectors (ie. count), or -1 in case of error.

+

A(A6h) - CdGetStatus()

+

Retrieves the cdrom status via CdAsyncGetStatus(dst) (see there for details; +especially for cautions on door-open flag). The function waits until the event +indicates completion, and does then return the status byte (or -1 in case of +error).

+

A(78h) - CdAsyncSeekL(src)

+

Issues Setloc and SeekL commands. The parameter (src) is a pointer to a 3-byte +sector number (MM,SS,FF) (in BCD format).
+The function returns 0=failed, or 1=okay. Completion is indicated by events +(class=F0000003h, and spec=20h, or 8000h).

+

A(7Ch) - CdAsyncGetStatus(dst)

+

Issues a GetStat command. The parameter (dst) is a pointer to a 1-byte location +that receives the status response byte.
+The function returns 0=failed, or 1=okay. Completion is indicated by events +(class=F0000003h, and spec=20h, or 8000h).
+Caution: The command acknowledges the door-open flag, but doesn't automatically +reload the path table (which is required if a new disk is inserted); if the +door-open flag was set, one should call a function that does forcefully load +the path table (like cd).

+

A(7Eh) - CdAsyncReadSector(count,dst,mode)

+

Issues SetMode and ReadN (when mode.bit8=0), or ReadS (when mode.bit8=1) +commands. count is the number of sectors to be read, dst is the destination +address in RAM, mode.bit0-7 are passed as parameter to the SetMode command, +mode.bit8 is the ReadN/ReadS flag (as described above). The sector size (for +DMA) depends on the mode value: 918h-bytes (bit4=1, bit5=X), 924h-bytes +(bit4=0, bit5=1), or 800h-bytes (bit4,5=0).
+Before CdAsyncReadSector, the sector number should be set via +CdAsyncSeekL(src).
+The function returns 0=failed, or 1=okay. Completion is indicated by events +(class=F0000003h, and spec=20h, 80h, or 8000h).

+

A(81h) - CdAsyncSetMode(mode)

+

Similar to CdAsyncReadSector (see there for details), but issues only the +SetMode command, without any following ReadN/ReadS command.

+

A(94h) - CdromGetInt5errCode(dst1,dst2)

+

Returns the first two response bytes from the most recent INT5 error: +[dst1]=status, [dst2]=errorcode. The BIOS doesn't reset these values in case of +successful completion, so the values are quite useless.

+

A(54h) or A(71h) - _96_init()

+

A(56h) or A(72h) - _96_remove() ;does NOT work due to SysDeqIntRP bug

+

A(90h) - CdromIoIrqFunc1()

+

A(91h) - CdromDmaIrqFunc1()

+

A(92h) - CdromIoIrqFunc2()

+

A(93h) - CdromDmaIrqFunc2()

+

A(95h) - CdInitSubFunc() ;subfunction for _96_init()

+

A(9Eh) - SetCdromIrqAutoAbort(type,flag)

+

A(A2h) - EnqueueCdIntr() ;with prio=0 (fixed)

+

A(A3h) - DequeueCdIntr() ;does NOT work due to SysDeqIntRP bug

+

Internally used CDROM functions for initialization and IRQ handling.

+

BIOS Memory Card Functions

+

General File Functions

+

Memory Cards aka Backup Units (bu) are basically accessed via normal file +functions, with device names "bu00:" (Slot 1) and "bu10:" (Slot 2),
+BIOS File Functions
+Before using the file functions for memory cards, first call +InitCARD2(pad_enable), then StartCARD2(), and then _bu_init().

+

File Header, Filesize, and Sector Alignment

+

The first 100h..200h bytes (2..4 sectors) of the file must contain the title +and icon bitmap(s). For details, see:
+Memory Card Data Format
+The filesize must be a multiple of 2000h bytes (one block), the maximum size +would be 1E000h bytes (when using all 15 blocks on the memory card). The +filesize must be specified when creating the file (ie. accessmode bit9=1, and +bit16-31=number of blocks). Once when the file is created, the BIOS does NOT +allow to change the filesize (unless by deleting and re-creating the file).
+When reading/writing files, the amount of data must be a multiple of 80h bytes +(one sector), and the file position must be aligned to a 80h-byte boundary, +too. There's no restriction on fragmented files (ie. one may cross 2000h-byte +block boundaries within the file).

+

Poor Memcard Performance

+

PSX memory card accesses are typically super-slow. That, not so much because +the hardware would be slow, but rather because of improper inefficent code at +the BIOS side. The original BIOS tries to synchronize memory card accesses with +joypad accesses simply by accessing only one sector per frame (although it +could access circa two sectors). To the worst, the BIOS accesses Slot 1 only on +each second frame, and Slot 2 only each other frame (although in 99% of all +cases only one slot is accessed at once, so the access time drops to 0.5 +sectors per frame).
+Moreover, the memory card id, directory, and broken sector list do occupy 26 +sectors (although the whole information would fit into 4 or 5 sectors) (a +workaround would be to read only the first some bytes, and to skip the +additional unused bytes - though that'd also mean to skip the checksums which +are unfortunately stored at the end of the sector).
+And, anytime when opening a file (in synchronous mode), the BIOS does +additionally read sector 0 (which is totally useless, and gets especially slow +when opening a bunch of files; eg. when extracting the title/icon from all +available files on the card).

+

Asynchronous Access

+

The BIOS supports synchronous and asynchronous memory card access. Synchronous +means that the BIOS function doesn't return until the access has completed +(which means, due to the poor performance, that the function spends about 75% +of the time on inactivity) (except in nocash PSX bios, which has better +performance), whilst asynchronous access means that the BIOS function returns +immediately after invoking the access (which does then continue on interrupt +level, and does return an event when finished).
+The file "read" and "write" functions act asynchronous when accessmode +bit15 is set when opening the file. Additionally, the A(ACh) +_card_load(port) function can be used to tell the BIOS to load +the directory entries and broken sector list to its internal RAM buffers (eg. +during the games title screen, so the BIOS doesn't need to load that data once +when the game enters its memory card menu). All other functions like erase +or format always act synchronous. The open/findfirst/findnext +functions do normally complete immediately without accessing the card at all +(unless the directory wasn't yet read; in that case the directory is loading in +synchronous fashion).
+Unfortunately, the asynchronous response doesn't rely on a single callback +event, but rather on a bunch of different events which must be all allocated +and tested by the game (and of which, one event is delivered on completion) +(which one depends on whether function completed okay, or if an error +occurred).

+

Multitap Support (and Multitap Problems)

+

The BIOS does have some partial support for accessing more than two memory +cards (via Multitap adaptors). Device/port names "bu01:", "bu02:", "bu03:" +allow to access extra memory carts in slot1 (and "bu11:", "bu12:", "bu13:" in +slot2). Namely, those names will send values 82h, 83h, 84h to the memory card +slot (instead of the normal 81h value).
+However, the BIOS directory_buffer and broken_sector_list do support only two +memory cards (one in slot1 and one in slot2). So, trying to access more memory +cards may cause great data corruption (though there might be a way to get the +BIOS to reload those buffers before accessing a different memory card).
+Aside from that problem, the BIOS functions are very-very-very slow even when +accessing only two memory cards. Trying to use the BIOS to access up to eight +memory cards would be very-extremly-very slow, which would be more annoying +than useful.

+

B(4Ah) - InitCARD2(pad_enable) ;uses/destroys k0/k1 !!!

+

B(4Bh) - StartCARD2()

+

B(4Ch) - StopCARD2()

+

A(55h) or A(70h) - _bu_init()

+
  --- Below are some lower level memory card functions ---
+
+

A(ABh) - _card_info(port)

+

B(4Dh) - _card_info_subfunc(port) ;subfunction for "_card_info"

+

Can be used to check if the most recent call to _card_write has completed +okay. Issues an incomplete dummy read command (similar to B(4Fh) - +_card_read). The read command is aborted once when receiving the status +byte from the memory card (the actual data transfer is skipped).

+

A(AFh) - card_write_test(port) ;not supported by old CEX-1000 version

+

Resets the card changed flag. For some strange reason, this flag isn't +automatically reset after reading the flag, instead, the flag is reset upon +sector writes. To do that, this function issues a dummy write to sector 3Fh.

+

B(50h) - _new_card()

+

Normally any memory card read/write functions fail if the BIOS senses the card +change flag to be set. Calling this function tells the BIOS to ignore the card +change flag on the next read/write operation (the function is internally used +when loading the "MC" ID from sector 0, and when calling the card_write_test +function to acknowledge the card change flag).

+

B(4Eh) - _card_write(port,sector,src)

+

B(4Fh) - _card_read(port,sector,dst)

+

Invokes asynchronous reading/writing of a single sector. The function returns +1=okay, or 0=failed (on invalid sector numbers). The actual I/O is done on IRQ +level, completion of the I/O command transmission can be checked, among others, +via get/wait_card_status(slot) functions (with slot=port/10h).
+In case of the write function, completion of the \<transmission> does NOT +mean that the actual \<writing> has completed, instead, write errors are +indicated upon completion of the \<next sector> read/write transmission +(or, if there are no further sectors to be accessed; one can use _card_info to +verify completion of the last written sector).
+The sector number should be in range of 0..3FFh, for some strange reason, +probably a BUG, the function also accepts sector 400h. The specified sector +number is directly accessed (it is NOT parsed through the broken sector +replacement list).

+

B(5Ch) - _card_status(slot)

+

B(5Dh) - _card_wait(slot)

+

Returns the status of the most recent I/O command, possible values are:
+

  01h=ready
+  02h=busy/read
+  04h=busy/write
+  08h=busy/info
+  11h=failed/timeout (eg. when no cartridge inserted)
+  21h=failed/general error
+
+_card_status returns immediately, _card_wait waits until a non-busy +state occurs.

+

A(A7h) - bufs_cb_0()

+

A(A8h) - bufs_cb_1()

+

A(A9h) - bufs_cb_2()

+

A(AAh) - bufs_cb_3()

+

A(AEh) - bufs_cb_4()

+

These five callback functions are internally used by the BIOS, notifying other +BIOS functions about (un-)successful completion of memory card I/O commands.

+

B(58h) - _card_chan()

+

This is a subfunction for the five bufs_cb__xxx functions (indicating +whether the callback occured for a slot1 or slot2 access).

+

A(ACh) - _card_load(port)

+

Invokes asynchronous reading of the memory card directory. The function isn't +too useful because the BIOS tends to read the directory automatically in +various places in synchronous mode, so there isn't too much chance to replace +the automatic synchronous reading by asynchronous reading.

+

A(ADh) - _card_auto(flag)

+

Can be used to enable/disable auto format (0=off, 1=on). The _bu_init function +initializes auto format as disabled. If auto format is enabled, then the BIOS +does automatically format memory cards if it has failed to read the "MC" ID +bytes on sector 0. Although potentially useful, activating this feature is +rather destructive (for example, read errors on sector 0 might occur accidently +due to improperly inserted cards with dirty contacts, so it'd be better to +prompt the user whether or not to format the card, rather than doing that +automatically).

+

C(1Ah) - set_card_find_mode(mode)

+

C(1Dh) - get_card_find_mode()

+

Allows to get/set the card find mode (0=normal, 1=find deleted files), the mode +setting affects only the firstfile2/nextfile functions. All other file functions +are used fixed mode settings (always mode=0 for open, rename, +erase, and mode=1 for undelete).

+

BIOS Interrupt/Exception Handling

+

The Playstation's Kernel uses an uncredible inefficient and unstable exception +handler; which may have been believed to be very powerful and flexible.

+

Inefficiency

+

For a maximum of slowness, it does always save and restore all CPU registers +(including such that aren't used in the exception handler). It does then go +through a list of installed interrupt handlers - and executes ALL of them. For +example, a Timer0 IRQ is first passed to the Cdrom and Vblank handlers (which +must reject it, no thanks), before it does eventually reach the Timer0 handler.

+

Unstable IRQ Handling

+

A fundamental mistake in the exception handler is that it doesn't memorize the +incoming IRQ flags. So the various interrupt handlers must check Port 1F801070h +one after each other. That means, if a high priority handler has rejected IRQ +processing (because the desired IRQ flag wasn't set at that time), then a lower +priority handler may process it (assuming that the IRQ flag got set in the +meantime), and, in worst case it may even acknowledge it (so the high priority +handler does never receive it).
+To avoid such problems, there should be only ONE handler installed for each IRQ +source. However, that isn't always possible because the Kernel automatically +installs some predefined handlers. Most noteworthy, the totally bugged +DefaultInterruptHandlers is always installed (and cannot be removed), so it +does randomly trigger Events. Fortunately, it does not acknowledge the IRQs +(unless SetIrqAutoAck was used to enable that fatal behaviour).

+

B(18h) - ResetEntryInt()

+

Applies the default "Exit" structure (which consists of a pointer to +ReturnFromException, and the Kernel's exception stacktop (minus 4, for whatever +reason), and zeroes for the R16..R23,R28,R30 registers. Returns the address of +that structure.
+See HookEntryInt for details.

+

B(19h) - HookEntryInt(addr)

+

addr points to a structure (with same format as for the setjmp function):
+

  00h 4    r31/ra,pc ;usually ptr to ReturnFromException function
+  04h 4    r28/sp    ;usually exception stacktop, minus 4, for whatever reason
+  08h 4    r30/fp    ;usually 0
+  0Ch 4x8  r16..r23  ;usually 0
+  2Ch 4    r28/gp    ;usually 0
+
+The hook function is executed only if the ExceptionHandler has been fully +executed (after processing an IRQ, many interrupt handlers are calling +ReturnFromException to abort further exception handling, and thus do skip the +hook function). Once when the hook function has finished, it should execute +ReturnFromException. The hook function is called with r2=1 (that is important +if the hook address was recorded with setjmp, where it "returns" to the +setjmp caller, with r2 as "return value").

+

Priority Chains

+

The Kernel's exception handler has four priority chains, each may contain one +or more Interrupt or Exception handlers. The default handlers are:
+

  Prio Chain Content
+  0    CdromDmaIrq, CdromIoIrq, SyscallException
+  1    CardSpecificIrq, VblankIrq, Timer2Irq, Timer1Irq, Timer0Irq
+  2    PadCardIrq
+  3    DefInt
+
+The exception handler calls all handlers, starting with the first element in +the priority 0 chain (ie. usually CdromDmaIrq). The separate handlers must +check if they want to process the IRQ (eg. CdromDmaIrq would process only CDROM +DMA IRQs, but not joypad IRQs or so). If it has processed and acknowledged the +IRQ, then the handler may execute ReturnFromException, which causes the +handlers of lower priority to be skipped (if there are still other +unacknowledge IRQs pending, then the hardware will re-enter the exception +handler as soon as the RFE opcode in ReturnFromException does re-enable +interrupts).

+

C(02h) - SysEnqIntRP(priority,struc) ;bugged, use with care

+

Inserts a new element in the specified priority chain. The new element is +inserted at the begin of the chain, so (within that priority chain) the new +element has highest priority.
+

  00h 4  pointer to next element    (0=none)  ;this pointer is inserted by BIOS
+  04h 4  pointer to SECOND function (0=none)  ;executed if func1 returns r2<>0
+  08h 4  pointer to FIRST  function (0=none)  ;executed first
+  0Ch 4  Not used (usually zero)
+
+BUG: SysDeqIntRP can remove only the first element in the chain (see there for +details), so adding new chain elements may cause OTHER functions to be unable +to remove their chain elements. The BIOS seems to be occassionally +adding/removing the "CardSpecificIrq" and "PadCardIrq" (with priority 1 and 2), +so using that priorities may cause the BIOS to be unable to remove that IRQ +handlers. Using priority 0 and 3 should work (as long as the software takes +care to remove only the newest elements) (but there should be no conflicts with +the BIOS which does never remove priority 0 and 3 elements) (leaving apart that +DequeueCdIntr and _96_remove try to remove priority 0 elements, but that +functions won't work anyways; due to the same bug).

+

C(03h) - SysDeqIntRP(priority,struc) ;bugged, use with care

+

Removes the specified element from the specified priority chain.
+BUG: The function tries to search the whole chain (and to remove the element if +it finds it). However, it does only check the first element properly, and, +thereafter it reads a garbage value from an uninitialized stack location, and +acts more or less unpredictable. So, it can remove only the first element in +the chain, ie. it should be called only if you are SURE that there's no newer +element in the chain, and only if you are SURE that the element IS in the +chain.

+

SYS(01h) - EnterCriticalSection() ;syscall with r4=01h

+

Disables interrupts by clearing SR (cop0r12) Bit 2 and 10 (of which, Bit2 gets +copied to Bit0 once when returning from the syscall exception). Returns 1 if +both bits were set, returns 0 if one or both of the bits were already zero.

+

SYS(02h) - ExitCriticalSection() ;syscall with r4=02h

+

Enables interrupts by set SR (cop0r12) Bit 2 and 10 (of which, Bit2 gets copied +to Bit0 once when returning from the syscall exception). There's no return +value (all registers except SR and K0 are unchanged).

+

C(0Dh) - SetIrqAutoAck(irq,flag)

+

Specifies if the DefaultInterruptHandler shall automatically acknowledge IRQs. +The "irq" paramter is the number of the interrupt, ie. 00h..0Ah = IRQ0..IRQ10. +The "flag" value should be 0 to disable AutoAck, or non-zero to enable AutoAck. +By default, AutoAck is disabled for all IRQs.
+Mind that the DefaultInterruptHandler is totally bugged. Especially the AutoAck +feature doesn't work very well: It may cause higher priority handlers to miss +their IRQ, and it may even cause the DefaultInterruptHandler to miss its own +IRQs.

+

C(06h) - ExceptionHandler()

+

The C(06h) vector points to the exception handler, ie. to the function that is +invoked from the 4 opcodes at address 80000080h, that opcodes jump directly to +the exception handler, so patching the C(06h) vector has no effect.
+Reading the C(06h) entry can be used to let a custom 80000080h handler pass +control back to the default handler (that, by a "direct" jump, not by the usual +"MOV R9,06h / CALL 0C0h" method, which would destroy main programs R9 +register).
+Also, reading C(06h) may be useful for patching the exception handler (which +contains a bunch of NOP opcodes, which seem to be intended to insert additional +opcodes, such like debugger exception handling) (Note: some of that NOPs are +reserved for Memory Card IRQ handling).
+BUG: Early BIOS versions did try to examine a copy of cop0r13 in r2 register, +but did forgot cop0r13 to r2 (so they examined garbage), this was fixed in +newer BIOS versions, additionally, most commercial games still include patches +for compatibility with the old BIOS.

+

B(17h) - ReturnFromException()

+

Restores the CPU registers (R1-R31,HI,LO,SR,PC) (except R26/K0) from the +current TCB. This function is usually executed automatically at the end of the +ExceptionHandler, however, functions in the exception chain may call +ReturnFromException to return immediately, without processing chain elements of +lower priority.

+

C(00h) - EnqueueTimerAndVblankIrqs(priority) ;used with prio=1

+

C(01h) - EnqueueSyscallHandler(priority) ;used with prio=0

+

C(0Ch) - InitDefInt(priority) ;used with prio=3

+

Internally used to add some default IRQ and Exception handlers.

+

No Nested Exceptions

+

The Kernel doesn't support nested exceptions, that would require a decreasing +exception stack, however, the kernel saves the incoming CPU registers in the +current TCB, and an exception stack with fixed start address for internal +push/pop during exception handling. So, nesting would overwrite these values. +Do not enable IRQs, and don't trap other exceptions (like break or syscall +opcodes, or memory or overlow errors) during exception handling.
+Note: The execption stack has a fixed size of 1000h bytes (and is located +somewhere in the first 64Kbytes of memory).

+

BIOS Event Functions

+

B(08h) - OpenEvent(class, spec, mode, func)

+

Adds an event structure to the event table.
+

     class,spec - triggers if BOTH values match
+     mode - (1000h=execute function/stay busy, 2000h=no func/mark ready)
+     func - Address of callback function (0=None) (used only when mode=1000h)
+  out: R2 = Event descriptor (F1000000h and up), or FFFFFFFFh if failed
+
+Opens an event, should be called within a critical section. The return value is +used to identify the event to the other event functions. A list of event +classes, specs and modes is at the end of this section. Initially, the event is +disabled.
+Note: The desired max number of events can be specified in the SYSTEM.CNF boot +file (the default is "EVENT = 10" (which is a HEX number, ie. 16 decimal; of +which 5 events are internally used by the BIOS for CDROM functions, so, of the +16 events, only 11 events are available to the game). A bigger amount of events +will slowdown the DeliverEvent function (which always scans all EvCBs, even if +all events are disabled).

+

B(09h) - CloseEvent(event) - releases event from the event table

+

Always returns 1 (even if the event handle is unused or invalid).

+

B(0Ch) - EnableEvent(event) - Turns on event handling for specified event

+

Always returns 1 (even if the event handle is unused or invalid).

+

B(0Dh) - DisableEvent(event) - Turns off event handling for specified event

+

Always returns 1 (even if the event handle is unused or invalid).

+

B(0Ah) - WaitEvent(event)

+

Returns 0 if the event is disabled. Otherwise hangs in a loop until the event +becomes ready, and returns 1 once when it is ready (and automatically switches +the event back to busy status). Callback events (mode=1000h) do never set the +ready flag (and thus WaitEvent would hang forever).
+The main program simply hangs during the wait, so when using multiple threads, +it may be more recommended to create an own waitloop that checks TestEvent, and +to call ChangeTh when the event is busy.
+BUG: The return value is unstable (sometimes accidently returns 0=disabled if +the event status changes from not-ready to ready shortly after the function +call).

+

B(0Bh) - TestEvent(event)

+

Returns 0 if the event is busy or disabled. Otherwise, when it is ready, +returns 1 (and automatically switches the event back to busy status). Callback +events (mode=1000h) do never set the ready flag.

+

B(07h) - DeliverEvent(class, spec)

+

This function is usually called by the kernel, it triggers all events that are +enabled/busy, and that have the specified class and spec values. Depending on +the mode, either the callback function is called (mode=1000h), or the event is +marked as enabled/ready (mode=2000h).

+

B(20h) - UnDeliverEvent(class, spec)

+

This function is usually called by the kernel, undelivers all events that are +enabled/ready, and that have mode=2000h, and that have the specified class and +spec values. Undeliver means that the events are marked as enabled/busy.

+

C(04h) - get_free_EvCB_slot()

+

A subfunction for OpenEvent.

+

Event Classes

+

File Events:
+

  0000000xh memory card (for file handle fd=x)
+
+Hardware Events:
+
  F0000001h IRQ0  VBLANK
+  F0000002h IRQ1  GPU
+  F0000003h IRQ2  CDROM Decoder
+  F0000004h IRQ3  DMA controller
+  F0000005h IRQ4  RTC0 (timer0)
+  F0000006h IRQ5/IRQ6 RTC1 (timer1 or timer2)
+  F0000007h N/A   Not used (this should be timer2)
+  F0000008h IRQ7  Controller (joypad/memcard)
+  F0000009h IRQ9  SPU
+  F000000Ah IRQ10 PIO ;uh, does the PIO have an IRQ signal? (IRQ10 is joypad)
+  F000000Bh IRQ8  SIO
+  F0000010h Exception ;CPU crashed (BRK,BadSyscall,Overflow,MemoryError, etc.)
+  F0000011h memory card (lower level BIOS functions)
+  F0000012h memory card (not used by BIOS; maybe used by Sony's devkit?)
+  F0000013h memory card (not used by BIOS; maybe used by Sony's devkit?)
+
+Event Events:
+
  F1xxxxxxh event (not used by BIOS; maybe used by Sony's devkit?)
+
+Root Counter Events (Timers and Vblank):
+
  F2000000h Root counter 0 (Dotclock)                    (hardware timer)
+  F2000001h Root counter 1 (horizontal retrace?)         (hardware timer)
+  F2000002h Root counter 2 (one-eighth of system clock)  (hardware timer)
+  F2000003h Root counter 3 (vertical retrace?) (this is a software timer)
+
+User Events:
+
  F3xxxxxxh user (not used by BIOS; maybe used by games and/or Sony's devkit?)
+
+BIOS Events (including such that have nothing to do with BIOS):
+
  F4000001h memory card (higher level BIOS functions)
+  F4000002h libmath (not used by BIOS; maybe used by Sony's devkit?)
+
+Thread Events:
+
  FFxxxxxxh thread (not used by BIOS; maybe used by Sony's devkit?)
+

+

Event Specs

+
  0001h counter becomes zero
+  0002h interrupted
+  0004h end of i/o
+  0008h file was closed
+  0010h command acknowledged
+  0020h command completed
+  0040h data ready
+  0080h data end
+  0100h time out
+  0200h unknown command
+  0400h end of read buffer
+  0800h end of write buffer
+  1000h general interrupt
+  2000h new device
+  4000h system call instruction ;SYS(04h..FFFFFFFFh)
+  8000h error happened
+  8001h previous write error happened
+  0301h domain error in libmath
+  0302h range error in libmath
+
+

Event modes

+
  1000h Execute callback function, and stay busy (do NOT mark event as ready)
+  2000h Do NOT execute callback function, and mark event as ready
+
+

BIOS Event Summary

+

Below is a list of all events (class,spec values) that are delivered and/or +undelivered by the BIOS in one way or another. The BIOS does internally open +five events for cdrom (class=F0000003h with spec=10h,20h,40h,80h,8000h). The +various other class/spec's are only delivered by the BIOS (but not received by +the BIOS) (ie. a game may open/enable memory card events to receive +notifications from the BIOS).

+

CDROM Events

+
  F0000003h,10h  cdrom DMA finished (all sectors finished)
+  F0000003h,20h  cdrom ?
+  F0000003h,40h  cdrom dead feature (delivered only by unused functions)
+  F0000003h,80h  cdrom INT4 (reached end of disk)
+  F0000003h,100h         n/a ?  ;undelivered, but not opened, nor delivered
+  F0000003h,200h                ;undelivered, but not opened
+  F0000003h,8000h
+
+

Memory Card - Higher Level File/Device Events

+
  0000000xh,4     card file handle (x=fd) done okay
+  F4000001h,4     card done okay (len=0)
+  F4000001h,100h  card err busy  ;A(A9h)
+  F4000001h,2000h card err eject ;A(AAh) or unformatted (bad "MC" id)
+  F4000001h,8000h card err write ;A(A8h) or A(AEh) or general error
+
+

Memory Card - Lower Level Hardware I/O Events

+
  F0000011h,4      finished okay
+  F0000011h,100h   err busy
+  F0000011h,200h     n/a ?
+  F0000011h,2000h  err
+  F0000011h,8000h  err
+  F0000011h,8001h  err (this one is NOT undelivered!)
+
+

Timer/Vblank Events

+
  F2000000h,2   Timer0 (IRQ4)
+  F2000001h,2   Timer1 (IRQ5)
+  F2000002h,2   Timer2 (IRQ6)
+  F2000003h,2   Vblank (IRQ0) (unstable since IRQ0 is also used for joypad)
+
+

Default IRQ Handler Events (very unstable, don't use)

+
  F0000001h,1000h ;IRQ0  (VBLANK)
+  F0000002h,1000h ;IRQ1  (GPU)
+  F0000003h,1000h ;IRQ2  (CDROM)
+  F0000004h,1000h ;IRQ3  (DMA)
+  F0000005h,1000h ;IRQ4  (TMR0)
+  F0000006h,1000h ;IRQ5  (TMR1)
+  F0000006h,1000h ;IRQ6  (TMR2) (accidently uses same event as TMR1)
+  F0000008h,1000h ;IRQ7  (joypad/memcard)
+  F0000009h,1000h ;IRQ9  (SPU)
+  F000000Ah,1000h ;IRQ10 (Joypad and PIO)
+  F000000Bh,1000h ;IRQ8  (SIO)
+
+

Unresolved Exception Events

+
  F0000010h,1000h unknown exception ;neither IRQ nor SYSCALL
+  F0000010h,4000h unknown syscall   ;syscall(04h..FFFFFFFFh)
+
+

BIOS Thread Functions

+

B(0Eh) - OpenTh(reg_PC,reg_SP_FP,reg_GP)

+

Searches a free TCB, marks it as used, and stores the inital program counter +(PC), global pointer (GP aka R28), stack pointer (SP aka R29), and frame +pointer (FP aka R30) (using the same value for SP and FP). All other registers +are left uninitialized (eg. may contain values from an older closed thread, +that includes the SR register, see note).
+The return value is the new thread handle (in range FF000000h..FF000003h, +assuming that 4 TCBs are allocated) or FFFFFFFFh if there's no free TCB. The +function returns to the old current thread, use "ChangeTh" to switch to the +new thread.
+Note: The desired max number of TCBs can be specified in the SYSTEM.CNF boot +file (the default is "TCB = 4", one initially used for the boot executable, +plus 3 free threads).

+

BUG - Unitialized SR Register

+

OpenTh does NOT initialize the SR register (cop0r12) of the new thread. +Upon powerup, the bootcode zerofills the TCB memory (so, the SR of new threads +will be initially zero; ie. Kernel Mode, IRQ's disabled, and COP2 disabled). +However, when closing/reopening threads, the SR register will have the value of +the old closed thread (so it may get started with IRQs enabled, and, in worst +case, if the old thread should have switched to User Mode, even without access +to KSEG0, KSEG1 memory).
+Or, ACTUALLY, the memory is NOT zerofilled on powerup... so SR is total random?

+

B(0Fh) - CloseTh(handle)

+

Marks the TCB for the specified thread as unused. The function can be used for +any threads, including for the current thread.
+Closing the current thread doesn't terminate the current thread, so it may +cause problems once when opening a new thread, however, it should be stable to +execute the sequence "DisableInterrupts, CloseCurrentThread, +ChangeOtherThread".
+The return value is always 1 (even if the handle was already closed).

+

B(10h) - ChangeTh(handle)

+

Pauses the current thread, and activates the selected new thread (or crashes if +the specified handle was unused or invalid).
+The return value is always 1 (stored in the R2 entry of the TCB of the old +thread, so the return value will be received once when changing back to the old +thread).
+Note: The BIOS doesn't automatically switch from one thread to another. So, all +other threads remain paused until the current thread uses ChangeTh to pass +control to another thread.
+Each thread is having it's own CPU registers (R1..R31,HI,LO,SR,PC), the +registers are stored in the TCB of the old thread, and restored when switching +back to that thread. Mind that other registers (I/O Ports or GTE registers +aren't stored automatically, so, when needed, they need to be pushed/popped by +software before/after ChangeTh).

+

C(05h) - get_free_TCB_slot()

+

Subfunction for OpenTh, returns the number of the first free TCB (usually +in range 0..3) or FFFFFFFFh if there's no free TCB.

+

SYS(03h) ChangeThreadSubFunction(addr) ;syscall with r4=03h, r5=addr

+

Subfunction for ChangeTh, R5 contains the address of the new TCB, just like +all exceptions, the syscall exception is saving the CPU registers in the +current TCB, but does then apply the new TCB as current TCB, and so, it does +then enter the new thread when returning from the exception.

+

BIOS Timer Functions

+

Timers (aka Root Counters)

+

The three hardware timers aren't internally used by any BIOS functions, so they +can be freely used by the game, either via below functions, or via direct I/O +access.

+

Vblank

+

Some of the below functions are allowing to use Vblank IRQs as a fourth +"timer". However, Vblank IRQs are internally used by the BIOS for handling +joypad and memory card accesses. One could theoretically use two separate +Vblank IRQ handlers, one for joypad, and one as "timer", but the BIOS is much +too unstable for such "shared" IRQ handling (it may occassionally miss one of +the two handlers).
+So, although Vblank IRQs are most important for games, the PSX BIOS doesn't +actually allow to use them for purposes other than joypad access. A possible +workaround is to examine the status byte in one of the joypad buffers (ie. the +InitPAD2(buf1,22h,buf2,22h) buffers). Eg. a wait_for_vblank function could look +like so: set buf1[0]=55h, then wait until buf1[0]=00h or buf1[0]=FFh.

+

B(02h) - init_timer(t,reload,flags)

+

When t=0..2, resets the old timer mode by setting [1F801104h+t*16]=0000h, +applies the reload value by [1F801108h+t*16]=reload, computes the new mode:
+

  if flags.bit4=0 then mode=0048h else mode=0049h
+  if flags.bit0=0 then mode=mode OR 100h
+  if flags.bit12=1 then mode=mode OR 10h
+
+and applies it by setting [1F801104h+t*16]=mode, and returns 1. Does nothing +and returns zero for t>2.

+

B(03h) - get_timer(t)

+

Reads the current timer value: Returns halfword[1F801100h+t*16] for t=0..2. +Does nothing and returns zero for t>2.

+

B(04h) - enable_timer_irq(t)

+

B(05h) - disable_timer_irq(t)

+

Enables/disables timer or vblank interrupt enable bits in [1F801074h], bit4,5,6 +for t=0,1,2, or bit0 for t=3, or random/garbage bits for t>3. The enable +function returns 1 for t=0..2, and 0 for t=3. The disable function returns +always 1.

+

B(06h) - restart_timer(t)

+

Sets the current timer value to zero: Sets [1F801100h+t*16]=0000h and returns 1 +for t=0..2. Does nothing and returns zero for t>2.

+

C(0Ah) - ChangeClearRCnt(t,flag) ;root counter (aka timer)

+

Selects what the kernel's timer/vblank IRQ handlers shall do after they have +processed an IRQ (t=0..2: timer 0..2, or t=3: vblank) (flag=0: do nothing; or +flag=1: automatically acknowledge the IRQ and immediately return from +exception). The function returns the old (previous) flag value.

+

BIOS Joypad Functions

+

Pad Input

+

Joypads should be initialized via InitPAD2(buf1,22h,buf2,22h), and StartPAD2(). +The main program can read the pad data from the buf1/buf2 addresses (including +Status, ID1, button states, and any kind of analogue inputs). For more info on +ID1, Buttons and analogue inputs, see
+Controllers and Memory Cards
+Note: The BIOS doesn't include any functions for sending custom data to the +pads (such like for controlling rumble motors).

+

B(12h) - InitPAD2(buf1, siz1, buf2, siz2)

+

Memorizes the desired buf1/buf2 addresses, zerofills the buffers by using the +siz1/siz2 buffer size values (which should be 22h bytes each). And does some +initialization on the PadCardIrq element (but doesn't enqueue it, that must be +done by a following call to StartPAD2), and does set the "pad_enable_flag", that +flag can be also set/cleared via InitCARD2(pad_enable), where it selects if the +Pads are kept handled together with Memory Cards. buf1/buf2 are having the +following format:
+

  00h      Status (00h=okay, FFh=timeout/wrong ID2)
+  01h      ID1    (eg. 41h=digital_pad, 73h=analogue_pad, 12h=mouse, etc.)
+  02h..21h Data   (max 16 halfwords, depending on lower 4bit of ID1)
+
+Note: InitPAD2 does initially zerofill the buffers, so, until the first IRQ is +processed, the initial status is 00h=okay, with buttons=0000h (all buttons +pressed), to fix that situation, change the two status bytes to FFh after +calling InitPAD2 (or alternately, reject ID1=00h).
+Once when the PadCardIrq is enqueued via StartPAD2, and while "pad_enable_flag" +is set, the data for (both) Pad1 and Pad2 is read on Vblank interrupts, and +stored in the buffers, the IRQ handler stores up to 22h bytes in the buffer +(regardless of the siz1/siz2 values) (eg. a Multitap adaptor uses all 22h +bytes).

+

B(13h) - StartPAD2()

+

Should be used after InitPAD2. Enqueues the PadCardIrq handler, and does +additionally initialize some flags.

+

B(14h) - StopPAD2()

+

Dequeues the PadCardIrq handler. Note that this handler is also used for memory +cards, so it'll "stop" cards, too.

+

B(15h) - PAD_init2(type, button_dest, unused, unused)

+

This is an extremely bizarre and restrictive function - don't use! The function +fails unless type is 20000000h or 20000001h (the type value has no other +function). The function uses "buf1/buf2" addresses that are located somewhere +"hidden" within the BIOS variables region, the only way to read from that +internal buffers is to use the ugly "PAD_dr()" function. For +some strange reason it FFh-fills buf1/buf2, and does then call +InitPAD2(buf1,22h,buf2,22) (which does immediately 00h-fill the previously +FFh-filled buffers), and does then call StartPAD2().
+Finally, it does memorize the "button_dest" address (see +PAD_dr() for details on that value). The two unused parameters +have no function, however, they are internally written back to the stack +locations reserved for parameter 2 and 3, ie. at [SP+08h] and [SP+0Ch] on the +caller's stack, so the function MUST be called with all four parameters +allocated on stack. Return value is 2 (or 0 if type was disliked).

+

B(16h) - PAD_dr()

+

This is a very ugly function, using the internal "buf1/buf2" values from +"PAD_init2" and the "button_dest" value that was passed to that +function.
+If "button_dest" is non-zero, then this function is automatically called by the +PadCardIrq handler, and stores it's return value at [button_dest] (where it may +be read by the main program). If "button_dest" is zero, then it isn't called +automatically, and it \<can> be called manually (with return value in R2), +however, it does additionally write the return value to [button_dest], ie. to +[00000000h] in this case, destroying that memory location.
+The return value itself is useless garbage: The lower 16bit contain the pad1 +buttons, the upper 16bit the pad2 buttons, of which, both values have reversed +byte-order (ie. the first button byte in upper 8bit). The function works only +with controller IDs 41h (digital joypad) and 23h (nonstandard device). For +ID=23h, the halfword is ORed with 07C7h, and bit6,7 are then cleared if the +analogue inputs are greater than 10h. For ID=41h the data is left intact. Any +other ID values, or disconnected joypads, cause the halfword to be set to FFFFh +(same as when no buttons are pressed), that includes newer analogue pads +(unless they are switched to "digital" mode).

+

BIOS GPU Functions

+

A(48h) - SendGP1Command(gp1cmd)

+

Writes [1F801814h]=gp1cmd. There's no return value (r2 is left unchanged).

+

A(49h) - GPU_cw(gp0cmd) ;send GP0 command word

+

Calls gpu_sync(), and does then write [1F801810h]=gp0cmd. Returns the return +value from the gpu_sync() call.

+

A(4Ah) - GPU_cwp(src,num) ;send GP0 command word and parameter words

+

Calls gpu_sync(), and does then copy "num" words from [src and up] to +[1F801810h], src should usually point to a command word, followed by num-1 +parameter words. Transfer is done by software (without DMA). Always returns 0.

+

A(4Bh) - send_gpu_linked_list(src)

+

Transfer an OT via DMA. Calls gpu_sync(), and does then write +[1F801814h]=4000002h, [1F8010F4h]=0, [1F8010F0h]=[1F8010F0h] OR 800h, +[1F8010A0h]=src, [1F8010A4h]=0, [1F8010A8h]=1000401h. The function does +additionally output a bunch of TTY status messages via printf. The function +doesn't wait until the DMA is completed. There's no return value.

+

A(4Ch) - gpu_abort_dma()

+

Writes [1F8010A8h]=401h, [1F801814h]=4000000h, [1F801814h]=2000000h, +[1F801814h]=1000000h. Ie. stops GPU DMA, and issues GP1(4), GP1(2), GP1(1). +Returns 1F801814h, ie. the I/O address.

+

A(4Dh) - GetGPUStatus()

+

Reads [1F801814h] and returns that value.

+

A(46h) - GPU_dw(Xdst,Ydst,Xsiz,Ysiz,src)

+

Waits until GPUSTAT.Bit26 is set (unlike gpu_sync, which waits for Bit28), and +does then [1F801810h]=A0000000h, [1F801810h]=YdstXdst, [1F801810h]=YsizXsiz, +and finally transfers "N" words from [src and up] to [1F801810h], where "N" is +"Xsiz*Ysiz/2". The data is transferred by software (without DMA) (by code +executed in the uncached BIOS region with high waitstates, so the data transfer +is very SLOW).
+Caution: If "Xsiz*Ysiz" is odd, then the last halfword is NOT transferred, so +the GPU stays waiting for the last data value.
+Returns [SP+04h]=Ydst, [SP+08h]=Xsiz, [SP+0Ch]=Ysiz, [SP+10h]=src+N*4, and +R2=src=N*4.

+

A(47h) - gpu_send_dma(Xdst,Ydst,Xsiz,Ysiz,src)

+

Calls gpu_sync(), writes [1F801810h]=A0000000h, [1F801814h]=4000002h, +[1F8010F0h]=[1F8010F0h] OR 800h, [1F8010A0h]=src, [1F8010A4h]=N*10000h+10h +(where N="Xsiz*Ysiz/32"), [1F8010A8h]=1000201h.
+Caution: If "Xsiz*Ysiz" is not a multiple of 32, then the last halfword(s) are +NOT transferred, so the GPU stays waiting for that values.
+Returns R2=1F801810h, and [SP+04h]=Ydst, [SP+08h]=Xsiz, [SP+0Ch]=Ysiz.

+

A(4Eh) - gpu_sync()

+

If DMA is off (when GPUSTAT.Bit29-30 are zero): Waits until GPUSTAT.Bit28=1 (or +until timeout).
+If DMA is on: Waits until D2_CHCR.Bit24=0 (or until timeout), and does then +wait until GPUSTAT.Bit28=1 (without timeout, ie. may hang forever), and does +then turn off DMA via GP1(04h).
+Returns 0 (or -1 in case of timeout, however, the timeout values are very big, +so it may take a LOT of seconds before it returns).

+

BIOS Memory Allocation

+

A(33h) - malloc(size)

+

Allocates size bytes on the heap, and returns the memory handle (aka the +address of the allocated memory block). The address of the block is guaranteed +to by aligned to 4-byte memory boundaries. Size is rounded up to a multiple of +4 bytes. The address may be in KUSEG, KSEG0, or KSEG1, depending on the address +passed to InitHeap.
+Caution: The BIOS (tries to) initialize the heap size to 0 bytes (actually it +accidently overwrites that initial setting by garbage during relocation), so +any call to malloc will fail, unless InitHeap has been used to initialize the +address/size of the heap.

+

A(34h) - free(buf)

+

Deallocates the memory block. There's no return value, and no error checking. +The function simply sets [buf-4]=[buf-4] OR 00000001h, so if buf is an invalid +handle it may destroy memory at [buf-4], or trigger a memory exception (for +example, when buf=0).

+

A(37h) - calloc(sizx, sizy) ;SLOW!

+

Allocates xsiz*ysiz bytes by calling malloc(xsiz*ysiz), and, unlike malloc, it +does additionally zerofill the memory via SLOW "bzero" function. Returns the +address of the memory block (or zero if failed).

+

A(38h) - realloc(old_buf, new_size) ;SLOW!

+

If "old_buf" is zero, executes malloc(new_size), and returns r2=new_buf (or +0=failed). Else, if "new_size" is zero, executes free(old_buf), and returns +r2=garbage. Else, executes malloc(new_size), bcopy(old_buf,new_buf,new_size), +and free(old_buf), and returns r2=new_buf (or 0=failed).
+Caution: The bcopy function is SLOW, and realloc does accidently copy +"new_size" bytes from old_buf, so, if the old_size was smaller than new_size +then it'll copy whatever garbage data - in worst case, if it exceeds the top of +the 2MB RAM region, it may crash with a locked memory exception, although +that'd happen only if SetMem(2) was used to restrict RAM to 2MBs.

+

A(39h) - InitHeap(addr, size)

+

Initializes the address and size of the heap - the BIOS does not automatically +do this, so, before using the heap, InitHeap must be called by software. +Usually, the heap would be memory region between the end of the boot +executable, and the bottom of the executable's stack. InitHeap can be also used +to deallocate all memory handles (eg. when a new exe file has been loaded, it +may use it to deallocate all old memory).
+The heap is used only by malloc/realloc/calloc/free, and by the "qsort" +function.

+

B(00h) - alloc_kernel_memory(size)

+

B(01h) - free_kernel_memory(buf)

+

Same as malloc/free, but, instead of the heap, manages the 8kbyte control block +memory at A000E000h..A000FFFFh. This region is used by the kernel to allocate +ExCBs (4x08h bytes), EvCBs (N*1Ch bytes), TCBs (N*0C0h bytes), and the process +control block (1x04h bytes). Unlike the heap, the BIOS does automatically +initialize this memory region via SysInitMemory(addr,size), and does +autimatically allocate the above data (where the number of EvCBs and TCBs is as +specified in the SYSTEM.CNF file). Note: FCBs and DCBs are located elsewhere, +at fixed locations in the kernel variables area.

+

Scratchpad Note

+

The kernel doesn't include any allocation functions for the scratchpad (nor do +any kernel functions use that memory area), so the executable can freely use +the "fast" memory at 1F800000h..1F8003FFh.

+

A(9Fh) - SetMem(megabytes)

+

Changes the effective RAM size (2 or 8 megabytes) by manipulating port +1F801060h, and additionally stores the size in megabytes in RAM at [00000060h].
+Note: The BIOS bootcode accidently sets the RAM value to 2MB (which is the +correct physical memory size), but initializes the I/O port to 8MB (which +mirrors the physical 2MB within that 8MB region), so the initial values don't +match up with each other.
+Caution: Applying the correct size of 2MB may cause the "realloc" function to +crash (that function may accidently access memory above 2MB).

+

BIOS Memory Fill/Copy/Compare (SLOW)

+

Like most A(NNh) functions, below functions are executed in uncached BIOS ROM, +the ROM has very high waitstates, and the 32bit opcodes are squeezed through an +8bit bus. Moreover, below functions are restricted to process the data +byte-by-byte. So, they are very-very-very slow, don't even think about using +them.
+Of course, that applies also for most other BIOS functions. But it's becoming +most obvious for these small functions; memcpy takes circa 160 cycles per byte +(reasonable would be less than 4 cycles), and bzero takes circa 105 cycles per +byte (reasonable would be less than 1 cycles).

+

A(2Ah) - memcpy(dst, src, len)

+

Copies len bytes from [src..src+len-1] to [dst..dst+len-1]. Refuses to copy any +data when dst=00000000h or when len>7FFFFFFFh. The return value is always +the incoming "dst" value.

+

A(2Bh) - memset(dst, fillbyte, len)

+

Fills len bytes at [dst..dst+len-1] with the fillbyte value. Refuses to fill +memory when dst=00000000h or when len>7FFFFFFFh. The return value is the +incoming "dst" value (or zero, when len=0 or len>7FFFFFFFh).

+

A(2Ch) - memmove(dst, src, len) - bugged

+

Same as memcpy, but (attempts) to support overlapping src/dst regions, by using +a backwards transfer when src\<dst (and, for some reason, only when +dst>=src+len).
+BUG: The backwards variant accidently transfers len+1 bytes from [src+len..src] +down to [dst+len..dst].

+

A(2Dh) - memcmp(src1, src2, len) - bugged

+

Compares len bytes at [src1..src1+len-1] with [src2..src2+len-1], and +(attempts) to return the difference between the first mismatching bytes, ie. +[src1+N]-[src2+N], or 0 if there are no mismatches. Refuses to compare data +when src1 or src2 is 00000000h, and returns 0 in that case.
+BUG: Accidently returns the difference between the bytes AFTER the first +mismatching bytes, ie. [src1+N+1]-[src2+N+1].
+That means that a return value of 0 can mean absolutely anything: That the +memory blocks are identical, or that a mismatch has been found (but that the +NEXT byte after the mismatch does match), or that the function has failed (due +to src1 or src2 being 00000000h).

+

A(2Eh) - memchr(src, scanbyte, len)

+

Scans [src..src+len-1] for the first occurence of scanbyte. Refuses to scan any +data when src=00000000h or when len>7FFFFFFFh. Returns the address of that +first occurence, or 0 if the scanbyte wasn't found.

+

A(27h) - bcopy(src, dst, len)

+

Same as "memcpy", but with "src" and "dst" exchanged. That is, the first +parameter is "src", the refuse occurs when "src" is 00000000h, and, returns the +incoming "src" value (whilst "memcpy" uses "dst" in that places).

+

A(28h) - bzero(dst, len)

+

Same as memset, but uses 00h as fixed fillbyte value.

+

A(29h) - bcmp(ptr1, ptr2, len) - bugged

+

Same as "memcmp", with exactly the same bugs.

+

BIOS String Functions

+

A(15h) - strcat(dst, src)

+

Appends src to the end of dst. Searches the ending 00h byte in dst, and copies +src to that address, up to including the ending 00h byte in src. Returns the +incoming dst value. Refuses to do anything if src or dst is 00000000h (and +returns 0 in that case).

+

A(16h) - strncat(dst, src, maxlen)

+

Same as "strcat", but clipped to "MaxSrc=(min(0,maxlen)+1)" characters, ie. the +total length is max "length(dst)+min(0,maxlen)+1". If src is longer or equal to +"MaxSrc", then only the first "MaxSrc" chars are copied (with the last byte +being replaced by 00h). If src is shorter, then everything up to the ending 00h +byte gets copied, but without additional padding (unlike as in "strncpy").

+

A(17h) - strcmp(str1, str2)

+

Compares the strings up to including ending 00h byte. Returns 0 if they are +identical, or otherwise [str1+N]-[str2+N], where N is the location of the first +mismatch, the two bytes are sign-expanded to 32bits before doing the +subtraction. The function rejects str1/str2 values of 00000000h (and returns +0=both are zero, -1=only str1 is zero, and +1=only str2 is zero).

+

A(18h) - strncmp(str1, str2, maxlen)

+

Same as "strcmp" but stops after comparing "maxlen" characters (and returns 0 +if they did match). If the strings are shorter, then comparision stops at the +ending 00h byte (exactly as for strcmp).

+

A(19h) - strcpy(dst, src)

+

Copies data from src to dst, up to including the ending 00h byte. Refuses to +copy anything if src or dst is 00000000h. Returns the incoming dst address (or +0 if copy was refused).

+

A(1Ah) - strncpy(dst, src, maxlen)

+

Same as "strcpy", but clipped to "maxlen" characters. If src is longer or equal +to maxlen, then only the first "maxlen" chars are copied (but without appending +an ending 00h byte to dst). If src is shorter, then the remaining bytes in dst +are padded with 00h bytes.

+

A(1Bh) - strlen(src)

+

Returns the length of the string up to excluding the ending 00h byte (or 0 when +src is 00000000h).

+

A(1Ch) - index(src, char)

+

A(1Dh) - rindex(src, char)

+

A(1Eh) - strchr(src, char) ;exactly the same as "index"

+

A(1Fh) - strrchr(src, char) ;exactly the same as "rindex"

+

Scans for the first (index) or last (rindex) occurence of char in the string. +Returns the memory address of that occurence (or 0 if there's no occurence, or +if src is 00000000h). Char may be 00h (returns the end address of the string). +Note that, despite of the function names, the return value is always a memory +address, NOT an index value relative to src.

+

A(20h) - strpbrk(src, list)

+

Scans for the first occurence of a character that is contained in the list. The +list contains whatever desired characters, terminated by 00h.
+Returns the address of that occurence, or 0 if there was none. BUG: If there +was no occurence, it returns 0 only if src[0]=00h, and otherwise returns the +incoming "src" value (which is the SAME return value as when a occurence did +occur on 1st character).

+

A(21h) - strspn(src, list)

+

A(22h) - strcspn(src, list)

+

Scans for the first occurence of a character that is (strspn), or that isn't +(strcspn) contained in the list. The list contains whatever desired characters, +terminated by 00h.
+Returns the index (relative to src) of that occurence. If there was no +occurence, then it returns the length of src. That silly return values do not +actually indicate if an occurence has been found or not (unless one checks for +[src+index]=00h or so).
+***
+"The strcspn() function shall compute the length (in bytes) of the maximum +initial segment of the string pointed to by s1 which consists entirely of bytes +not from the string pointed to by s2."
+"The strspn() function shall compute the length (in bytes) of the maximum +initial segment of the string pointed to by s1 which consists entirely of bytes +from the string pointed to by s2."
+***
+Hmmmm, that'd be vice-versa?

+

A(23h) - strtok(src, list) ;first call

+

A(23h) - strtok(0, list) ;further call(s)

+

Used to split a string into fragments, list contains a list of characters that +are to be treated as separators, terminated by 00h.
+The first call copies the incoming string to a buffer in the BIOS variables +area (the buffer size is 100h bytes, so the string should be max 255 bytes +long, plus the ending 00h byte, otherwise the function destroys other BIOS +variables), it does then search the first fragment, starting at the begin of +the buffer. Further calls (with src=00000000h) are searching further fragments, +starting at the buffer address from the previous call. The internal buffer is +used only for strtok, so its contents (and the returned string fragments) +remain intact until a new first call to strtok takes place.
+The separate fragments are processed by searching the first separator, starting +at the current buffer address, the separator is then replaced by a 00h byte, +and the old buffer address is returned to the caller. Moreover, the function +tries to skip all continously following separators, until reaching a +non-separator, and does memorize that address for the next call (due to that +skipping further calls won't return empty fragments, the first call may do so +though). That skipping seems to be bugged, if list contains two or more +different characters, then additional separators aren't skipped.
+

  ",,TEXT,,,END" with list=","  returns "", "TEXT", "END"
+  ",,TEXT,,,END" with list=",." returns "", "", "TEXT", "", "", "END"
+
+Once when there are no more fragments, then 00000000h is returned.

+

A(24h) - strstr(str, substr) - buggy

+

Scans for the first occurence of substr in the string. Returns the memory +address of that occurence (or 0 if it was unable to find an occurence).
+BUG: After rejecting incomplete matches, the function doesn't fallback to the +old str address plus 1, but does rather continue at the current str address. +Eg. it doesn't find substr="aab" in str="aaab" (in that example, it does merely +realize that "aab"\<>"aaa" and then that "aab"\<>"b").

+

BIOS Number/String/Character Conversion

+

A(0Eh) - abs(val)

+

A(0Fh) - labs(val) ;exactly same as "abs"

+

Returns the absolute value (if val\<0 then R2=-val, else R2=val).

+

A(0Ah) - todigit(char)

+

Takes the incoming character, ANDed with FFh, and returns 0..9 for characters +"0..9" and 10..35 for "A..Z" or "a..z", or 0098967Fh (9,999,999 decimal) for +any other 7bit characters, or garbage for characters 80h..FFh.

+

A(25h) - toupper(char)

+

A(26h) - tolower(char)

+

Returns the incoming character, ANDed with FFh, with letters "A..Z" converted +to uppercase/lowercase format accordingly. Works only for char 00h..7Fh (some +characters in range 80h..FFh are left unchanged, others are randomly "adjusted" +by adding/subtracting 20h, and by sign-expanding the result to 32bits).

+

A(0Dh) - strtol(src, src_end, base)

+

Converts a string to a number. The function skips any leading "blank" +characters (that are, 09h..0Dh, and 20h) (ie. TAB, CR, LF, SPC, and some +others) (some characters in range 80h..FFh are accidently treated as "blank", +too).
+The incoming base value should be in range 2..11, although the function does +also accept the buggy values in range of 12..36 (for values other than 2..36 it +defaults to decimal/base10). The used numeric digits are "0..9" and "A..Z" (or +less when base is smaller than 36).
+The string may have a negative sign prefix "-" (negates the result) (a "+" is +NOT recognized; and will be treated as the end of the string). Additionally, +the string may contain prefixes "0b" (binary/base2), "0x" (hex/base16), or "o" +(octal/base8) (only "o", not "0o"), allowing to override the incoming "base" +value.
+BUG: Incoming base values greater than 11 don't work due to the prefix feature +(eg. base=16 with string "0b11" will be treated as 11 binary, and base=36 with +string "o55" will be treated as 55 octal) (the only workaround would be to +add/remove leading "0" characters, ie. "b11" or "00b11" or "0o55" would work +okay).
+Finally, the function initializes result=0, and does then process the digits as +"result=result*base+digit" (without any overflow checks) unless/until it +reaches an unknown digit (or when digit>=base) (ie. the string may end with +00h, or with any other unexpected characters).
+The function accepts both uppercase and lowercase characters (both as prefixes, +and as numeric digits). The function returns R2=result, and +[src_end]=end_address (ie. usually the address of the ending 00h byte; or of +any other unexpected end-byte). If src points to 00000000h, then the function +returns r2=0, and leaves [src_end] unchanged.

+

A(0Ch) - strtoul(src, src_end, base)

+

Same as "strtol" except that it doesn't recognize the "-" sign prefix (ie. +works only for unsigned numbers).

+

A(10h) - atoi(src)

+

A(11h) - atol(src) ;exactly same as "atoi" (but slightly slower)

+

Same as "strtol", except that it doesn't return the string end address in +[src_end], and except that it defaults to base=10, but still supports prefixes, +allowing to use base2,8,16. CAUTION: For some super bizarre reason, this +function treats "0" (a leading ZERO digit) as OCTAL prefix (unlike strtol, +which uses the "o" letter as octal prefix) (the "0x" and "0b" prefixes are +working as usually).

+

A(12h) - atob(src, num_dst)

+

Calls "strtol(str,src_end,10)", and does then exchange the two return values +(ie. sets R2=[src_end], and [num_dst]=value_32bit).

+

A(0Bh) - atof(src) ;USES (ABSENT) COP1 FPU !!!

+

A(32h) - strtod(src, src_end) ;USES (ABSENT) COP1 FPU !!!

+

These functions are intended to convert strings to floating point numbers, +however, the functions are accidently compiled for MIPS processors with COP1 +floating point unit (which is not installed in the PSX, nor does the BIOS +support a COP1 software emulation), so calling these functions will produce a +coprocessor exception, causing the PSX to lockup via A(40h) +SystemErrorUnresolvedException.

+

Note

+

On other systems (eg. 8bit computers), "abs/atoi" (integer) and "labs/atol" +(long) may act differently. However, on the Playstation, both use signed 32bit +values.

+

BIOS Misc Functions

+

A(2Fh) - rand()

+

Advances the random generator as "x=x*41C64E6Dh+3039h" (aka plus 12345 +decimal), and returns a 15bit random value "R2=(x/10000h) AND 7FFFh".

+

A(30h) - srand(seed)

+

Changes the current 32bit value of the random generator.

+

A(B4h) - GetSystemInfo(index) ;not supported by old CEX-1000 version

+

Returns a word, halfword, or string, depending on the selected index value:
+

  00h      Get Kernel BCD Date       (eg. 19951204h) (YYYYMMDDh)
+  01h      Get Kernel Flags or so    (usually/always 000000003h)
+  02h      Get Kernel Version String (eg. "CEX-3000/1001/1002 by K.S.",0)
+  03h      Get whatever halfword     (usually 0)    ;PS2: returns cop0r15
+  04h      Get whatever halfword     (usually 0)
+  05h      Get RAM Size in kilobytes (usually 2048) ;=[00000060h] SHL 10
+  06h..0Eh Get whatever halfwords    (usually 0,400h,0,200h,0,0,1,1,1)
+  0Fh      N/A (returns zero) ;PS2: returns 0000h (effectively = same as zero)
+  10h..FFFFFFFFh Not used (returns zero)
+
+Note: The Date/Version are referring to the Kernel (in the first half of the +BIOS). The Intro and Bootmenu (in the second half of the BIOS) may have a +different version, there's no function to retrieve info on that portion, +however, a version string for it can be usually found at BFC7FF32h (eg. "System +ROM Version 4.5 05/25/00 E",0) (in many bios versions, the last letter of that +string indicates the region, but not in all versions) (the old SCPH1000 does +not include that version string at all).

+

B(56h) - GetC0Table()

+

B(57h) - GetB0Table()

+

Retrieves the address of the jump lists for B(NNh) and C(NNh) functions, +allowing to patch entries in that lists (however, the BIOS does often jump +directly to the function addresses, rather than indirectly via the list, so +patching may have little effect in such cases). Note: There's no function to +retrieve the address of the A(NNh) jump list, however, that list is +usually/always at 00000200h.

+

A(31h) - qsort(base, nel, width, callback)

+

Sorts an array, using a super-slow implementation of the "quick sort" +algorithm. base is the address of the array, nel is the number of elements in +the array, width is the size in bytes of each element, callback is a function +that receives pointers to two elements which need to be compared; callback +should return return zero if the elements are identical, or a positive/negative +number to indicate which element is bigger.
+The qsort function rearranges the contents of the array, ie. depending on the +callback result, it may swap the contents of the two elements, for some bizarre +reason it doesn't swap them directly, but rather stores one of the elements +temporarily on the heap (that means, qsort works only if the heap was +initialized with InitHeap, and only if "width" bytes are free). There's no +return value.

+

A(35h) - lsearch(key, base, nel, width, callback)

+

A(36h) - bsearch(key, base, nel, width, callback)

+

Searches an element in an array (key is the pointer to the searched element, +the other parameters are same as for "qsort"). "lsearch" performs a slow linear +search in an unsorted array, by simply comparing one array element after each +other. "bsearch" assumes that the array contains sorted elements (eg. via +qsort), which is allowing to skip some elements, and to jump back and forth in +the array, until it has found the desired element (or the location where it'd +be, if it'd be in the array). Both functions return the address of the element +(or 0 if it wasn't found).

+

C(19h) - _ioabort(txt1,txt2)

+

Displays the two strings on the TTY (in some cases the BIOS does accidently +pass garbage instead of the 2nd string though). And does then execute +_ioabort_raw(1), see there for more details.

+

A(B2h) - _ioabort_raw(param) ;not supported by old CEX-1000 version

+

Executes "longjmp(ioabortbuffer,param)". Internally used to recover from +failed I/O operations, param should be nonzero to notify the setjmp caller +that the abort has occurred.

+

A(13h) - setjmp(buf)

+

This is a somewhat incomplete implementation of posix's setjmp, by storing the ABI-saved CPU registers in the specified buffer (30h bytes):
+

  00h 4    r31 (ra) (aka caller's pc)
+  04h 4    r29 (sp)
+  08h 4    r30 (fp)
+  0Ch 4x8  r16..r23
+  2Ch 4    r28 (gp)
+
+That type of buffer can be used with "_ioabort", "longjmp", and also +"HookEntryInt(addr)".
+The "setjmp" function returns 0 when called directly. However, it may return again - +to the same return address, and the same stack pointer - with another return value (which should be usually +non-zero, to indicate that the state has been restored (eg. _ioabort passes 1 as +return value).
+Also noteworthy from what a compliant setjmp implementation should be doing +is the absence of saving the state of cop0 and cop2, thus making this slightly +unsuitable for a typical coroutine system implementation.

+

A(14h) - longjmp(buf, param)

+

Restores the R16-R23,GP,SP,FP,RA registers from a previously recorded +jmp_buf buffer, and "returns" to that new RA address (rather than to the caller of the +longjmp function). The "param" value is passed as "return value" to the +code at RA, ie. usually to the caller of the original setjmp call. Noteworthy difference +from a conformant longjmp implementation is that the "param" value won't be clamped to 1 if +you pass 0 to it. So since setjmp returns 0 on the first call, the caller of longjmp must take +care that "param" is non-zero, so the callsite of setjmp can make the difference between the first +call and a rollback. See setjmp for further details.

+

A(53h) - set_ioabort_handler(src) ;PS2 only ;PSX: SystemError

+

Normally the _ioabort handler is changed only internally during booting, with +this new function, games can install their own _ioabort handler. src is pointer +to a 30h-byte "savestate" structure, which will be copied to the actual _ioabort +structure.

+

A(06h) or B(38h) - exit(exitcode)

+

Terminates the program and returns control to the BIOS; which does then lockup +itself via A(3Ah) _exit.

+

A(A0h) - _boot()

+

Performs a warmboot (resets the kernel and reboots from CDROM). Unlike the +normal coldboot procedure, it doesn't display the "\<S>" and "PS" intro +screens (and doesn't verify the "PS" logo in the ISO System Area), and, doesn't +enter the bootmenu (even if the disk drive is empty, or if it contains an Audio +disk). And, it doesn't reload the SYSTEM.CNF file, so the function works only +if the same disk is still inserted (or another disk with identical SYSTEM.CNF, +such like Disk 2 of the same game).

+

A(B5h..BFh) B(11h,24h..29h,2Ch..31h,5Eh..FFh) C(1Eh..7Fh) - N/A - Jump 0

+

These functions jump to address 00000000h. For whatever reason, that address +does usually contain a copy of the exception handler (ie. same as at address +80000080h). However, since there's no return address stored in EPC register, +the functions will likely crash when returning from the exception handler.

+

A(57h..5Ah,73h..77h,79h..7Bh,7Dh,7Fh..80h,82h..8Fh,B0h..B1h,B3h), and

+

C(0Eh..11h,14h) - N/A - Returns 0

+

No function. Simply returns with r2=00000000h.
+Reportedly, A(85h) is CdStop, but that seems to be nonsense?

+

SYS(00h) - NoFunction()

+

No function. Simply returns without changing any registers or memory locations +(except that, of course, the exception handler destroys k0).

+

SYS(04h..FFFFFFFFh) - calls DeliverEvent(F0000010h,4000h)

+

These are syscalls with invalid function number in R4. For whatever reason that +is handled by issuing DeliverEvent(F0000010h,4000h). Thereafter, the syscall +returns to the main program (ie. it doesn't cause a SystemError).

+

A(3Ah) - _exit(exitcode)

+

A(40h) - SystemErrorUnresolvedException()

+

A(A1h) - SystemError(type,errorcode) ;type "B"=Boot,"D"=Disk

+

These are used "SystemError" functions. The functions are repeatedly jumping to +themselves, causing the system to hang. Possibly useful for debugging software +which may hook that functions.

+

A(4Fh,50h,52h,53h,9Ah,9Bh) B(1Ah..1Fh,21h..23h,2Ah,2Bh,52h,5Ah) C(0Bh) - N/A

+

These are additional "SystemError" functions, but they are never used. The +functions are repeatedly jumping to themselves, causing the system to hang.

+

BRK(1C00h) - Division by zero (commonly checked/invoked by software)

+

BRK(1800h) - Division overflow (-80000000h/-1, sometimes checked by software)

+

The CPU does not generate any exceptions upon divide overflows, because of +that, the Kernel code and many games are commonly checking if the divider is +zero (by software), and, if so, execute a BRK 1C00h opcode. The default BIOS +exception handler doesn't handle BRK exceptions, and does simply redirect them +to SystemErrorUnresolvedException().

+

BIOS Internal Boot Functions

+

A(45h) - init_a0_b0_c0_vectors

+

Copies the three default four-opcode handlers for the A(NNh),B(NNh),C(NNh) +functions to A00000A0h..A00000CFh.

+

C(07h) - InstallExceptionHandlers() ;destroys/uses k0/k1

+

Copies the default four-opcode exception handler to the exception vector at +80000080h..8000008Fh, and, for whatever reason, also copies the same opcodes to +80000000h..8000000Fh.

+

C(08h) - SysInitMemory(addr,size)

+

Initializes the address (A000E000h) and size (2000h) of the allocate-able +Kernel Memory region, and, seems to deallocate any memory handles which may +have been allocated via B(00h).

+

C(09h) - SysInitKernelVariables()

+

Zerofills all Kernel variables; which are usually at [00007460h..0000891Fh].
+Note: During the boot process, the BIOS accidently overwrites the first opcode +of this function (by the last word of the A0h table), so, thereafter, this +function won't work anymore (nor would it be of any use).

+

C(12h) - InstallDevices(ttyflag)

+

Initializes the size and address of the File and Device Control Blocks (FCBs +and DCBs). Adds the TTY device by calling "KernelRedirect(ttyflag)", and the +CDROM and Memory Card devices by calling "AddCDROMDevice()" and +"AddMemCardDevice()".

+

C(1Ch) - AdjustA0Table()

+

Copies the B(32h..3Bh) and B(3Ch..3Fh) function addresses to A(00h..09h) and +A(3Bh..3Eh). Apparently Sony's compiler/linker can't insert the addresses in +the A0h table directly at compilation time, so this function is used to insert +them during execution of the boot code.

+

BIOS More Internal Functions

+

Below are mainly internally used device related subfunctions.

+

Internal Device Stuff

+
  A(5Bh) dev_tty_init()                                      ;PS2: SystemError
+  A(5Ch) dev_tty_open(fcb,and unused:"path\name",accessmode) ;PS2: SystemError
+  A(5Dh) dev_tty_in_out(fcb,cmd)                             ;PS2: SystemError
+  A(5Eh) dev_tty_ioctl(fcb,cmd,arg)                          ;PS2: SystemError
+  A(5Fh) dev_cd_open(fcb,"path\name",accessmode)
+  A(60h) dev_cd_read(fcb,dst,len)
+  A(61h) dev_cd_close(fcb)
+  A(62h) dev_cd_firstfile(fcb,"path\name",direntry)
+  A(63h) dev_cd_nextfile(fcb,direntry)
+  A(64h) dev_cd_chdir(fcb,"path")
+  A(65h) dev_card_open(fcb,"path\name",accessmode)
+  A(66h) dev_card_read(fcb,dst,len)
+  A(67h) dev_card_write(fcb,src,len)
+  A(68h) dev_card_close(fcb)
+  A(69h) dev_card_firstfile(fcb,"path\name",direntry)
+  A(6Ah) dev_card_nextfile(fcb,direntry)
+  A(6Bh) dev_card_erase(fcb,"path\name")
+  A(6Ch) dev_card_undelete(fcb,"path\name")
+  A(6Dh) dev_card_format(fcb)
+  A(6Eh) dev_card_rename(fcb1,"path\name1",fcb2,"path\name2")
+  A(6Fh) ?   ;card ;[r4+18h]=00000000h  ;card_clear_error(fcb) or so
+  A(96h) AddCDROMDevice()
+  A(97h) AddMemCardDevice()
+  A(98h) AddDuartTtyDevice()   ;PS2: SystemError
+  A(99h) add_nullcon_driver()
+  B(47h) AddDrv(device_info)  ;subfunction for AddXxxDevice functions
+  B(48h) DelDrv(device_name_lowercase)
+  B(5Bh) ChangeClearPAD(int)   ;pad AND card (ie. used also for Card)
+  C(15h) _cdevinput(circ,char)
+  C(16h) _cdevscan()
+  C(17h) _circgetc(circ)    ;uses r5 as garbage txt for _ioabort
+  C(18h) _circputc(char,circ)
+
+

Device Names

+

Device Names are case-sensitive (usually lowercase, eg. "bu" for memory cards). +In filenames, the device name may be followed by a hexadecimal 32bit +non-case-sensitive port number (eg. "bu00:" for selecting the first memory card +slot). Accordingly, the device name should not end with a hexdigit (eg. "usb:" +would be treated as device "us" with port number 0Bh).
+Standard device names are "cdrom:", "bu00:", "bu10:", "tty00:". Other, +nonstandard devices are:
+

  Castlevania is trying to access an unknown device named "sim:".
+  Caetla (a firmware replacement for Cheat Devices) supports "pcdrv:" device.
+

+

BIOS PC File Server

+

DTL-H2000

+

Below BRK's are internally used in DTL-H2000 BIOS for two devices: "mwin:" +(Message Window) and "sim:" (CDROM Sim).

+

Caetla Blurb

+

Caetla (a firmware replacement for Cheat Devices) supports "pcdrv:" device, the +SN systems (=what?) device extension to access files on the drive of the pc. +This fileserver can be accessed by using the kernel functions, with the +"pcdrv:" device name prefix to the filenames or using the SN system calls.
+The following SN system calls for the fileserver are provided. Accessed by +setting the registers and using the break command with the specified field.
+The break functions have argument(s) in A1,A2,A3 (ie. unlike normal BIOS +functions not in A0,A1,A2), and TWO return values (in V0, and V1).

+

BRK(101h) - PCInit() - Inits the fileserver

+

No parameters.

+

BRK(102h) - PCCreat(filename, fileattributes) - Creates a new file on PC

+

  out: V0  0 = success, -1 = failure
+       V1  file handle or error code if V0 is negative
+
+Attributes Bits (standard MSDOS-style):
+
  bit0     Read only file (R)
+  bit1     Hidden file    (H)
+  bit2     System file    (S)
+  bit3     Not used       (zero)
+  bit4     Directory      (D)
+  bit5     Archive file   (A)
+  bit6-31  Not used       (zero)
+

+

BRK(103h) - PCOpen(filename, accessmode) - Opens a file on the PC

+
  out: V0  0 = success, -1 = failure
+       V1  file handle or error code if V0 is negative
+
+

BRK(104h) - PCClose(filehandle) - Closes a file on the PC

+
  out: V0  0 = success, -1 = failure
+       V1  0 = success, error code if V0 is negative
+
+

BRK(105h) - PCRead(filehandle, length, memory_destination_address)

+

  out: V0  0 = success, -1 = failure
+       V1  number of read bytes or error code if V0 is negative.
+
+Note: PCRead does not stop at EOF, so if you set more bytes to read than the +filelength, the fileserver will pad with zero bytes. If you are not sure of the +filelength obtain the filelength by PClSeek (A2=0, A3=2, V1 will return the +length of the file, don't forget to reset the file pointer to the start before +calling PCread!)

+

BRK(106h) - PCWrite(filehandle, length, memory_source_address)

+
  out: V0  0 = success, -1 = failure
+       V1  number of written bytes or error code if V0 is negative.
+
+

BRK(107h) - PClSeek(filehandle, file_offset, seekmode) - Change Filepos

+

seekmode may be from 0=Begin of file, 1=Current fpos, or 2=End of file.
+

  out: V0  0 = success, -1 = failure
+       V1  file pointer
+

+

BIOS TTY Console (std_io)

+

A(3Fh) - Printf(txt,param1,param2,etc.) - Print string to console

+

  in:  A0                     Pointer to 0 terminated string
+       A1,A2,A3,[SP+10h..]    Argument(s)
+
+Prints the specified string to the TTY console. Printf does internally use +"putchar" to output the separate characters (and expands char 09h and +0Ah accordingly).
+The string can contain C-style escape codes (prefixed by "%" each):
+
  c         display ASCII character
+  s         display ASCII string
+  i,d,D     display signed Decimal number (d/i=default32bit, D=force32bit)
+  u,U       display unsigned Decimal number (u=default32bit, U=force32bit)
+  o,O       display unsigned Octal number (o=default32bit, O=force32bit)
+  p,x,X     display unsigned Hex number (p=lower/force32bit, x=lower, X=upper)
+  n         write 32bit/16bit string length to [parameter] (default32bit)
+
+Additionally, following prefixes (inserted between "%" and escape code):
+
  + or SPC  show leading plus or space character in positive signed numbers
+  NNN       fixed width (for padding or so) (first digit must be 1..9) (not 0)
+  .NNN      fixed width (for clipping or so)
+  *         variable width (using one of the parameters) (negative=ending_spc)
+  .*        variable width
+  -         force ending space padding (in case of width being specified)
+  #         show leading "0x" or "0X" (hex), or ensure 1 leading zero (octal)
+  0         show leading zero's
+  L         unknown/no effect?
+  h,l       force 16bit (h=halfword), or 32bit (l=long/word)
+
+The force32bit codes (D,U,O,p,l) are kinda useless since the PSX defaults to +32bit parameters anyways. The force16bit code (h) may be useful as "%hn" +(writeback 16bit value), otherwise it's rather useless, unless signed 16bit +parameters have garbage in upper 16bit, for unsigned 16bit parameters it +doesn't work at all (accidently sign-expands 16bit to 32bit, and then displays +that signed 32bit value as giant unsigned value). Printf supports only octal, +decimal, and hex (but not binary).

+

A(3Eh) or B(3Fh) - puts(src) - Write string to TTY

+

  in: R4=address of string (terminated by 00h)
+
+Like "printf", but doesn't resolve any "%" operands. Empty strings are handled +in a special way: If R4 points to a 00h character then nothing is output (as +one would expect it), but, if R4 is 00000000h then "\<NULL>" is output +(only that six letters; without appending any CR or LF).

+

A(3Dh) or B(3Eh) - gets(dst) - Read string from TTY (keyboard input)

+

  in: r4=dst (pointer to a 128-byte buffer) - out: r2=dst (same is incoming r4)
+
+Internally uses "getchar" to receive the separate characters (which are +thus masked by 7Fh). The received characters are stored in the buffer, and are +additionally sent back as echo to the TTY via std_out_putc.
+The following characters are handled in a special way: 09h (TAB) is replaced by +a single SPC. 08h or 7FH (BS or DEL) are removing the last character from the +buffer (unless it is empty) and send 08h,20h,08h (BS,SPC,BS) to the TTY. 0Dh or +0Ah (CR or LF) do terminate the input (append 00h to the buffer, send 0Ah to +the TTY, which is expanded to 0Dh,0Ah by the std_out_putc function, and do then +return from the gets function).
+The sequence 16h,NNh forces NNh to be stored in the buffer (even if NNh is a +special character like 00h..1Fh or 7Fh). If the buffer is full (circa max 125 +chars, plus one extra byte for the ending 00h), or if an unknown control code +in range of 00h..1Fh is received without the 16h prefix, then 07h (BELL) is +sent to the TTY.

+

A(3Bh) or B(3Ch) - getchar() - Read character from TTY

+

Reads one character from the TTY console, by internally redirecting to +"read(0,tempbuf,1)". The returned character is ANDed by 7Fh (so, to read a +fully intact 8bit character, "read(0,tempbuf,1)" must be used instead of +this function).

+

A(3Ch) or B(3Dh) - putchar(char) - Write character to TTY

+

Writes the character to the TTY console, by internally redirecting to +"write(1,tempbuf,1)". Char 09h (TAB) is expanded to one or more SPC +characters, until reaching the next tabulation boundary (every 8 characters). +Char 0Ah (LF) is expanded to 0Dh,0Ah (CR,LF). Other special characters (which +should be handled at the remote terminal side) are 08h (BS, backspace, move +cursor one position to the left), and 07h (BELL, produce a short beep sound).

+

C(13h) - FlushStdInOutPut()

+

Closes and re-opens the std_in (fd=0) and std_out (fd=1) file handles.

+

C(1Bh) - KernelRedirect(ttyflag) ;PS2: ttyflag=1 causes SystemError

+

Removes, re-mounts, and flushes the TTY device, the parameter selects whether +to mount the real DUART-TTY device (r4=1), or a Dummy-TTY device (r4=0), the +latter one sends any std_out to nowhere. Values other than r4=0 or r4=1 do +remove the device, but do not re-mount it (which might result in problems).
+Caution: Trying to use r4=1 on a PSX that does not has the DUART hardware +installed causes the BIOS to hang (so one should first detect the DUART +hardware, eg. by writing two different bytes to Port 1F802020h.1st/2nd access, +and the read and verify that two bytes).

+

Activating std_io

+

The std_io functions can be enabled via C(1Bh) KernelRedirect(ttyflag), the +BIOS is unable to detect the presence of the TTY hardware, by default the BIOS +bootcode disables std_io by setting the initial KernelRedirect value at +[A000B9B0h] to zero, this is hardcoded shortly after the POST(E) output:
+

  call    output_post_r4        ;\output POST(E)
+  +mov    r4,0Eh                ;/
+  mov     r1,0A0010000h         ;\set [0A000B9B0h]=0 ;TTY=dummy/off
+  call    reset_cont_d_3        ; and call reset_cont_d_3
+  +mov    [r1-4650h],0          ;/
+
+assuming that R28=A0010FF0h, the last 3 opcodes of above code can be replaced +by:
+
  mov     r1,1h                 ;\set [0A000B9B0h]=1 ;TTY=duart/on
+  call    reset_cont_d_3        ; and call reset_cont_d_3
+  +mov    [r28-4650h-0ff0h],r1  ;/
+
+with that patch, the BIOS bootcode (and many games) are sending debug messages +to the debug terminal, via expansion port, see:
+EXP2 Dual Serial Port (for TTY Debug Terminal)
+Note: The nocash BIOS automatically detects the DUART hardware, and activates +TTY if it is present.

+

B(49h) - PrintInstalledDevices()

+

Uses printf to display the long and short names from the DCB of the currently +installed devices. Doesn't do anything else. There's no return value.

+

Note

+

Several BIOS functions are internally using printf to output status +information, timeout, and error messages, etc. So, trying to close the TTY file +handles (fd=0 and fd=1) would cause such functions to work unstable.

+

BIOS Character Sets

+

B(51h) - Krom2RawAdd(shiftjis_code)

+

  In: r4  = 16bit Shift-JIS character code
+  Out: r2 = address in BIOS ROM of the desired character (or -1 = error)
+
+r4 should be 8140h..84BEh (charset 2), or 889Fh..9872h (charset 3).

+

B(53h) - Krom2Offset(shiftjis_code)

+

  In: r4  = 16bit Shift-JIS character code
+  Out: r2 = offset within charset (without charset base address)
+
+This is a subfunction for B(51h) Krom2RawAdd(shiftjis_code).

+

Character Sets in ROM (112Kbytes)

+

The character sets are located at BFC64000h and up, intermixed with some other +stuff:
+

  BFC64000h  Charset 1 (16x15 pix, letters with accent marks)    (NOT in JAPAN)
+  BFC65CB6h  Garbage   (four-and-a-half reverb tables, ioports, printf strings)
+  BFC66000h  Charset 2 (16x15 pix, various alphabets, english, greek, etc.)
+  BFC69D68h  Charset 3 (16x15 pix, japanese or chinese symbols or so)
+  BFC7F8DEh  Charset 4 (8x15 pix, mainly ASCII letters)
+  BFC7FE6Fh  Charset 5 (8x15 pix, additional punctuation marks)    (NOT in PS2)
+  BFC7FF32h  Version   (Version and Copyright strings)        (NOT in SCPH1000)
+  BFC7FF8Ch  Charset 6 (8x15 pix, seven-and-a-half japanese chars) (NOT in PS2)
+  BFC80000h  End       (End of 512kBYTE BIOS ROM)
+
+Charset 1 (and Garbage) is NOT included in japanese BIOSes (in the SCPH1000 +version that region contains uncompressed program code, in newer japanese +BIOSes that regions are zerofilled)
+Charset 1 symbols are as defined in JIS-X-0212 char(2661h..2B77h), and EUC-JP +char(8FA6E1h..8FABF7h).
+Version (and Copyright) string is NOT included in SCPH1000 version (that BIOS +includes further japanese 8x15 pix chars in that region).
+For charset 2 and 3 it may be recommended to use the B(51h) +Krom2RawAdd(shiftjis_code) to obtain the character addresses. Not sure if that +BIOS function (or another BIOS function) allows to retrieve charset 1, 4, 5, +and 6 addresses?
+Charset 4 is halfwidth, single-byte Shift JIS codes 21h through 7Eh. This +matches ASCII except code 5Ch which is the halfwidth yen sign (¥) and 7Eh which +is overline (‾).
+Charset 5 contains overhead/combining tilde, backslash (\), broken bar (¦), +Shift JIS codes A1h through A5h and B0h, DEh, and DFh, left double quotation +mark (“), left single quotation mark (‘), and tilde (~).
+Charset 6 is Shift JIS codes 82A5h through 82ACh, but in halfwidth, and the +last one is cut off.

+

BIOS Control Blocks

+

Exception Control Blocks (ExCB) (4 blocks of 8 bytes each)

+
  00h 4   ptr to first element of exception chain
+  04h 4   not used (zero)
+
+

Event Control Blocks (EvCB) (usually 16 blocks of 1Ch bytes each)

+
  00h 4   class  (events are triggered when class and spec match)
+  04h 4   status (0=free,1000h=disabled,2000h=enabled/busy,4000h=enabled/ready)
+  08h 4   spec   (events are triggered when class and spec match)
+  0Ch 4   mode   (1000h=execute function/stay busy, 2000h=no func/mark ready)
+  10h 4   ptr to function to be executed when ready (or 0=none)
+  14h 8   not used (uninitialized)
+
+

Thread Control Blocks (TCB) (usually 4 blocks of 0C0h bytes each)

+
  00h 4   status        (1000h=Free TCB, 4000h=Used TCB)
+  04h 4   not used      (set to 1000h by OpenTh) (not for boot executable?)
+  08h 80h r0..r31       (entries for r0/zero and r26/k0 are unused)
+  88h 4   cop0r14/epc   (aka r26/k0 and pc when returning from exception)
+  8Ch 8   hi,lo         (the mul/div registers)
+  94h 4   cop0r12/sr    (stored/restored by exception, NOT init by OpenTh)
+  98h 4   cop0r13/cause (stored when entering exception, NOT restored on exit)
+  9Ch 24h not used      (uninitialized)
+
+

Process Control Block (1 block of 4 bytes)

+

  00h 4   ptr to TCB of current thread
+
+The PSX supports only one process, and thus only one Process Control Block.

+

File Control Blocks (FCB) (16 blocks of 2Ch bytes each)

+
  00h 4  status (0=Free FCB) (nonzero=accessmode)
+  04h 4  cdrom: disk_id (checksum across path table of the corresponding disk),
+         memory card: port number (00h=slot1, 10h=slot2)
+  08h 4  transfer address (for dev_in_out function)
+  0Ch 4  transfer length  (for dev_in_out function)
+  10h 4  current file position
+  14h 4  device flags (copy of DCB[04h])
+  18h 4  error  ;used by B(55h) - _get_error(fd)
+  1Ch 4  Pointer to DCB for the file
+  20h 4  filesize
+  24h 4  logical block number (start of file) (for cdrom: at least)
+  28h 4  file control block number (simply 0..15 for FCB number 0..15)
+
+

Device Control Blocks (DCB) (10 blocks of 50h bytes each)

+
  00h 4   ptr to lower-case short name ("cdrom", "bu", "tty") (or 0=Free DCB)
+  04h 4   device flags (cdrom=14h, bu=14h, tty/dummy=1, tty/duart=3)
+  08h 4   sector size  (cdrom=800h, bu=80h, tty=1)
+  0Ch 4   ptr to upper-case long name  ("CD-ROM", "MEMORY CARD", "CONSOLE")
+  10h 4   ptr to init()                                         (TTY only)
+  14h 4   ptr to open(fcb,"path\name",accessmode)
+  18h 4   ptr to in_out(fcb,cmd)                                (TTY only)
+  1Ch 4   ptr to close(fcb)
+  20h 4   ptr to ioctl(fcb,cmd,arg)                             (TTY only)
+  24h 4   ptr to read(fcb,dst,len)
+  28h 4   ptr to write(fcb,src,len)
+  2Ch 4   ptr to erase(fcb,"path\name")
+  30h 4   ptr to undelete(fcb,"path\name")
+  34h 4   ptr to firstfile2(fcb,"path\name",direntry)
+  38h 4   ptr to nextfile(fcb,direntry)
+  3Ch 4   ptr to format(fcb)
+  40h 4   ptr to cd(fcb,"path")                            (CDROM only)
+  44h 4   ptr to rename(fcb1,"path\name1",fcb2,"path\name2")
+  48h 4   ptr to remove()
+  4Ch 4   ptr to testdevice(fcb,"path\name")
+
+

BIOS Versions

+

Kernel Versions

+

For the actual kernel, there seem to be only a few different versions. Most +PSX/PSone's are containing the version from 1995 (which is kept 1:1 the same in +all consoles; without any PAL/NTSC related customizations).
+

  28-Jul-1994  "DTL-H2000"                   ;v0.x (pre-retail devboard)
+  22-Sep-1994  "CEX-1000 KT-3  by S.O."      ;v1.0 through v2.0
+  no-new-date  "CEX-3000 KT-3  by K.S."      ;v2.1 only (old Port 1F801060h)
+  27-Jul-1995  "Konami OS by T.H."           ;Twinkle System
+  01-Sep-1995  "Konami OS by T.H."           ;Konami GV, GQ, System 573
+  04-Dec-1995  "CEX-3000/1001/1002 by K.S."  ;v2.2 through v4.5 (except v4.0)
+  29-May-1997  "CEX-7000/-7001 by K.S.    "  ;v4.0 only (new Port 1F801010h)
+  17-Jan-2000  "PS compatible mode by M.T."  ;v5.0 (Playstation 2)
+
+The date and version string can be retrieved via GetSystemInfo(index).
+The "CEX-7000/-7001" version was only "temporarily" used (when the kernel/gui +grew too large they changed the ROM size from 512K to 1024K; but did then +figure out that they could use a self-decompressing GUI to squeeze everything +into 512K; but they did accidentally still use the 1024K setting) (newer +consoles fixed that and switched back to the old version from 1995) (aside from +the different date/version string, the only changed thing is the opcode at +BFC00000h, which initializes port 1F801010h to BIOS ROM size of 1MB, instead of +512KB; no idea if that BIOS does actually contain additional data?).
+The "CEX-3000 KT-3" version is already almost same as "CEX-3000/1001/1002", +aside from version/date, the only differences are at offset BFC00014h..1Fh, and +BFC003E0h (both related to Port 1F801060h).

+

Bootmenu/Intro Versions

+

This portion was updated more often. It's customized for PAL/NTSC displays, +japanese/english language, and (maybe?) region/licence string checks. The +SCPH1000 uses uncompressed Bootmenu/Intro code with "\<S>" intro, but +without "PS" intro (or, "PS" is shown only on region matches?), newer versions +are using selfdecompressing code, with both intro screens. The GUI in older PSX +models looks like a drawing program for children, the GUI in newer PSX models +and in PSone's looks more like a modernized bathroom furniture, unknown how the +PS2 GUI looks like?
+Games are communicating only with the Kernel, so the differences in the +Bootmenu/Intro part should have little or effect on compatibility (although +some I/O ports might be initialized differently, and although some games might +(accidently) read different (garbage) values from the ROM).
+

  Ver  CRC32    Used in                      System ROM Version  Kernel
+  0.xj 18D0F7D8 DTL-H2000                    (no version string) dtlh2000
+  1.0j 3B601FC8 SCPH-1000 and DTL-H1000      (no version string) cex1000
+  1.1j 3539DEF6 SCPH-3000 and DTL-H1000H     "1.1 01/22/95"      ""
+  2.0a 55847D8C DTL-H1001                    "2.0 05/07/95 A"    ""
+  2.0e 9BB87C4B SCPH-1002 and DTL-H1002      "2.0 05/10/95 E"    ""
+  2.1j BC190209 SCPH-3500                    "2.1 07/17/95 J"    cex3000
+  2.1a AFF00F2F SCPH-1001 and DTL-H1101      "2.1 07/17/95 A"    ""
+  2.1e 86C30531 SCPH-1002 and DTL-H1102      "2.1 07/17/95 E"    ""
+  2.2j 24FC7E17 SCPH-5000 and DTL-H1200      "2.2 12/04/95 J"    cex3000/100x
+  2.2a 37157331 SCPH-1001 and DTL-H1201/3001 "2.2 12/04/95 A"    ""
+  2.2e 1E26792F SCPH-1002 and DTL-H1202/3002 "2.2 12/04/95 E"    ""
+  2.2v 446EC5B2 SCPH-5903 (VCD, 1Mbyte)      "2.2 12/04/95 J"    ""
+  2.2d DECB22F5 DTL-H1100                    "2.2 03/06/96 D"    ""
+  3.0j FF3EEB8C SCPH-5500                    "3.0 09/09/96 J"    ""
+  3.0a 8D8CB7E4 SCPH-5501/7003               "3.0 11/18/96 A"    ""
+  3.0e D786F0B9 SCPH-5502/5552               "3.0 01/06/97 E"    ""
+  4.0j EC541CD0 SCPH-7000/9000               "4.0 08/18/97 J"    cex7000
+  4.1w B7C43DAD SCPH-7000W                       ...XXX...
+  4.1a 502224B6 SCPH-7001/7501/7503/9001     "4.1 12/16/97 A"    cex3000/100x
+  4.1e 318178BF SCPH-7002/7502/9002          "4.1 12/16/97 E"    ""
+  4.3j F2AF798B SCPH-100  (PSone)            "4.3 03/11/00 J"    ""
+  4.4a 6A0E22A0 SCPH-101  (PSone)            "4.4 03/24/00 ..XXX..
+  4.4e 0BAD7EA9 SCPH-102  (PSone)            "4.4 03/24/00 E"    ""
+  4.5a 171BDCEC SCPH-101  (PSone)            "4.5 05/25/00 A"    ""
+  4.5e 76B880E5 SCPH-102  (PSone)            "4.5 05/25/00 E"    ""
+  5.0t B7EF81A9 SCPH10000 (Playstation 2)    "5.0 01/17/00 T"    PS compatible
+
+The System ROM Version string can be found at BFC7FF32h (except in v1.0).

+

v2.2j/a/e use exactly the same GUI as v2.1 (only the kernel was changed). v2.2d +is almost same as v2.2j (but with some GUI patches or so).
+v4.1 and v4.5 use exactly the same GUI code for "A" and "E" regions (the only +difference is the last byte of the version string; which does specify whether +the GUI shall use PAL or NTSC).
+v5.0 is playstation 2 bios (4MB) with more or less backwards compatible kernel.

+

Character Set Versions

+

The 16x15 pixel charsets at BFC66000h and BFC69D68h are included in all BIOSes, +however, the 16x15 portion for letters with accent marks at BFC64000h is +included only in non-japanese BIOSes, and in some newer japanese BIOSes (not +included in v4.0j, but they are included in v4.3j).
+The 8x15 pixel charset with characters 21h..7Fh is included in all BIOSes. In +the SCPH1000, this region is followed by additional 8x15 punctuation marks at +char 80h and up, however, this region is missing in PS2 BIOS. Moreover, some +BIOSes include an incomplete 8x15 japanese character set (which ends abruptly +at BF7FFFFFh), in newer BIOSes, some of theses chars are replaced by the +version string at BFC7FF32h, and, the remaining 8x15 japanese chars were +removed in the PS2 BIOS version.

+

BIOS Patches

+

The original PSX Kernel mainly consists of messy and unstable compiler +generated code, and, to the worst, the \<same> author seems to have +attempted to use assembler code in some places. In result, most commercial +games are causing a greater mess by inserting patches in the kernel code...
+Which has been a nasty surprise when making the nocash PSX bios; which +obviously wasn't compatible with these patches. The only solutions would have +been to insert hundreds of NOPs to make my bios \<exactly> as bloated as +the original bios (which I really didn't want to do), or to create +anti-patch-patches.

+

Patches and Anti-Patch-Patches

+

As shown below, all known patches are invoked by a B(56h) or B(57h) function +call. In the nocash PSX bios, these two functions are examining the following +opcodes, if the opcodes are a known patch, then the BIOS reproduces the desired +behaviour, and does then continue normal execution after those opcodes. If the +opcodes are unknown, then the BIOS simply locks up; and shows an error message +with the address of that opcodes in the TTY window; info about any such unknown +opcodes would be welcome!

+

Compatibility

+

If you want to (or need to) use patches, please use byte-identical opcodes as +commercial games do (as shown below; only the "xxxx" address digits are don't +care), so the nocash PSX bios (or other homebrewn BIOSes) can detect and +reproduce them. Or alternately, don't use the BIOS, and access I/O ports +directly, which is much better and faster anyways.

+

patch_missing_cop0r13_in_exception_handler:

+

In newer Kernel version, the exception handler reads cop0r13/cause to r2, +examines the Excode value in r2, and if the exception was caused by an +interrupt, and if the next opcode (at EPC) is a GTE/COP2 command, then it does +increment EPC by 4. The GTE commands are executed even if an interrupt occurs +simultaneously, so, without adjusting EPC, the command would be executed twice. +With some commands that'd just waste some clock cycles, with other commands it +may cause data to be written twice to the GTE FIFOs, or may re-use the result +from the 1st command execution as input to the 2nd execution.
+The old "CEX-1000 KT-3" Kernel version did examine r2, but it "forgot" to +previously load cop0r13 to r2, so it did randomly examine a garbage value. The +patch inserts the missing opcode, used in elo2 at 80033740h, and in Pandemonium +II at 8007F3FCh:
+

  240A00B0 mov  r10,0B0h                      ;\   00000000 nop
+  0140F809 call r10                           ;    00000000 nop
+  24090056 +mov  r9,56h                       ;/   241A0100 mov k0,100h
+  3C0Axxxx mov  r10,xxxx0000h                 ;\   8F5A0008 mov k0,[k0+8h]
+  3C09xxxx mov  r9,xxxx0000h                  ;    00000000 nop
+  8C420018 mov  r2,[r2+06h*4] ;=C(06h)        ;    8F5A0000 mov k0,[k0]
+  254Axxxx add  r10,xxxxh ;=@@new_data        ;    00000000 nop
+  2529xxxx add  r9,xxxxh  ;=@@new_data_end    ;/   235A0008 addt k0,8h
+          @@copy_lop:                         ;\   AF410004 mov [k0+4h],r1
+  8D430000 mov  r3,[r10]                      ;    AF420008 mov [k0+8h],r2
+  254A0004 add  r10,4h                        ;    AF43000C mov [k0+0Ch],r3
+  24420004 add  r2,4h                         ;    AF5F007C mov [k0+7Ch],ra
+  1549FFFC jne  r10,r9,@@copy_lop             ;    40026800 mov r2,cop0r13
+  AC43FFFC +mov [r2-4h],r3                    ;/   00000000 nop
+
+Alternately, same as above, but using k0/k1 instead of r10/r9, used in Ridge +Racer at 80047B14h:
+
  240A00B0 mov  r10,0B0h                      ;\     00000000 nop
+  0140F809 call r10                           ;      00000000 nop
+  24090056 +mov r9,56h                        ;/     241A0100 mov  k0,100h
+  3C1Axxxx mov  k0,xxxx0000h                  ;\     8F5A0008 mov  k0,[k0+8h]
+  3C1Bxxxx mov  k1,xxxx0000h                  ;      00000000 nop
+  8C420018 mov  r2,[r2+06h*4] ;=C(06h)        ;      8F5A0000 mov  k0,[k0]
+  275Axxxx add  k0,xxxxh  ;=@@new_data        ;      00000000 nop
+  277Bxxxx add  k1,xxxxh  ;=@@new_data_end    ;/     235A0008 addt k0,8h
+          @@copy_lop:                         ;\     AF410004 mov  [k0+4h],r1
+  8F430000 mov  r3,[k0]                       ;      AF420008 mov  [k0+8h],r2
+  275A0004 add  k0,4h                         ;      AF43000C mov  [k0+0Ch],r3
+  24420004 add  r2,4h                         ;      AF5F007C mov  [k0+7Ch],ra
+  175BFFFC jne  k0,k1,@@copy_lop              ;      40026800 mov  r2,cop0r13
+  AC43FFFC +mov [r2-4h],r3                    ;/     00000000 nop
+
+Alternately, slightly different code used in metal_gear_solid at 80095CC0h, and +in alone1 at 800A3ECCh:
+
  24090056 mov  r9,56h                        ;\
+  240A00B0 mov  r10,0B0h                      ; B(56h) GetC0Table
+  0140F809 call r10                           ;
+  00000000 +nop                               ;/
+  8C420018 mov  r2,[r2+06h*4] ;=00000C80h = exception_handler = C(06h)
+  00000000 nop
+  24420028 add  r2,28h
+  00407821 mov  r15,r2
+  3C0Axxxx lui  r10,xxxxh ;\@@ori_data        ;\
+  254Axxxx add  r10,xxxxh ;/                  ;
+  3C09xxxx lui  r9,xxxxh  ;\@@ori_data_end    ; @@ori_data:
+  2529xxxx add  r9,xxxxh  ;/                  ;  AF410004 mov [k0+4h],r1
+          @@verify_lop:                       ;  AF420008 mov [k0+8h],r2
+  8D430000 mov  r3,[r10]                      ;  AF43000C mov [k0+0Ch],r3
+  8C4B0000 mov  r11,[r2]                      ;  AF5F007C mov [k0+7Ch],ra
+  254A0004 add  r10,4h                        ;  40037000 mov r3,cop0r14
+  146B000E jne  r3,r11,@@verify_mismatch      ;  00000000 nop
+  24420004 +add r2,4h                         ;
+  1549FFFA jne  r10,r9,@@verify_lop           ;
+  00000000 +nop                               ;/
+  01E01021 mov  r2,r15
+  3C0Axxxx lui  r10,xxxxh ;\@@new_data        ;\
+  254Axxxx add  r10,xxxxh ;/                  ;
+  3C09xxxx lui  r9,xxxxh  ;\@@new_data_end    ; @@new_data:
+  2529xxxx add  r9,xxxxh  ;/                  ;  AF410004 mov [k0+4h],r1
+          @@copy_lop:                         ;  AF420008 mov [k0+8h],r2
+  8D430000 mov  r3,[r10]                      ;  40026800 mov r2,cop0r13
+  00000000 nop                                ;  AF43000C mov [k0+0Ch],r3
+  AC430000 mov  [r2],r3                       ;  40037000 mov r3,cop0r14
+  254A0004 add  r10,4h                        ;  AF5F007C mov [k0+7Ch],ra
+  1549FFFB jne  r10,r9,@@copy_lop             ;
+  24420004 +add r2,4h                         ;/
+          @@verify_mismatch:
+
+Alternately, a bugged/nonfunctional homebrew variant (used by Hitmen's +"minimum" demo):
+
  ;BUG1: 8bit "movb r6" should be 32bit "mov r6"
+  ;BUG2: @@copy_lop should transfer 6 words (not 7 words)
+  ;BUG3: and, asides, the minimum demo works only with PAL BIOS (not NTSC)
+  0xxxxxxx call xxxxxxxxh               ;\B(56h) GetC0Table
+  00000000 +nop                         ;/(mov r8,0B0h, jmp r8, +mov r9,56h)
+  3C04xxxx mov  r4,xxxx0000h  ;\@@ori_data
+  2484xxxx add  r4,xxxxh      ;/
+  90460018 movb r6,[r2+06h*4] ;BUG1 ;exception_handler = C(06h)
+  24870018 add  r7,r4,18h ;@@ori_end     ;\
+  24C50028 add  r5,r6,28h ;C(06h)+28h    ;
+  00A03021 mov  r6,r5                    ;                   @@ori_data:
+          @@verify_lop:                  ;  80086520 AF410004 mov [k0+4h],r1
+  8CA30000 mov  r3,[r5]                  ;  80086524 AF420008 mov [k0+8h],r2
+  8C820000 mov  r2,[r4]                  ;  80086528 AF43000C mov [k0+0Ch],r3
+  00000000 nop                           ;  8008652C AF5F007C mov [k0+7Ch],ra
+  1462000C jne  r3,r2,@@verify_mismatch  ;  80086530 40037000 mov r3,cop0r14
+  24840004 +add r4,4h                    ;  80086534 00000000 nop
+  1487FFFA jne  r4,r7,@@verify_lop       ;                   @@ori_end:
+  24A50004 +add r5,4h                    ;/
+  00C02821 mov  r5,r6                    ;\                  @@new_data:
+  3C04xxxx mov  r4,xxxx0000h ;\@@new_data;  80086538 AF410004 mov [k0+4h],r1
+  2484xxxx add  r4,xxxxh     ;/          ;  8008653C AF420008 mov [k0+8h],r2
+  2483001C add  r3,r4,1Ch ;@@bugged_end  ;  80086540 40026800 mov r2,cop0r13
+          @@copy_lop:                    ;  80086544 AF43000C mov [k0+0Ch],r3
+  8C820000 mov  r2,[r4]                  ;  80086548 40037000 mov r3,cop0r14
+  24840004 add  r4,4h                    ;  8008654C AF5F007C mov [k0+7Ch],ra
+  ACA20000 mov  [r5],r2                  ;                   @@new_end:
+  1483FFFC jne  r4,r3,@@copy_lop         ;  80086550 00000000 nop  ;BUG2
+  24A50004 +add r5,4h                    ;/                  @@bugged_end:
+          @@verify_mismatch:
+

+

early_card_irq_patch:

+

Because of a hardware glitch the card IRQ cannot be acknowledged while the +external IRQ signal is still LOW, making it neccessary to insert a delay that +waits until the signal gets HIGH before acknowledging the IRQ.
+The original BIOS is so inefficient that it takes hundreds of clock cycles +between the interrupt request and the IRQ acknowledge, so, normally, it doesn't +require an additional delay.
+However, the central mistake in the IRQ handler is that it doesn't memorize +which IRQ has originally triggered the interrupt. For example, it may get +triggered by a timer IRQ, but a newer card IRQ may occur during IRQ handling, +in that case, the card IRQ may get processed and acknowledged without the +required delay.
+Used in Metal Gear Solid at 8009AA5Ch, and in alone1 at 800AE2F8h:
+

  24090056 mov  r9,56h    ;\                  ;        @@new_data:
+  240A00B0 mov  r10,0B0h  ; B(56h) GetC0Table ;3C02A001 lui  r2,0A001h
+  0140F809 call r10       ;                   ;2442DFAC sub  r2,2054h
+  00000000 +nop           ;/                  ;00400008 jmp  r2 ;=@@new_cont_d
+  8C420018 mov  r2,[r2+06h*4] ;\get C(06h)    ;00000000 +nop    ;=A000DFACh
+  00000000 nop                ;/              ;00000000 nop
+  8C430070 mov  r3,[r2+70h]   ;\              ;        @@new_data_end:
+  00000000 nop                ; get           ;        @@new_cont_d:
+  3069FFFF and  r9,r3,0FFFFh  ; early_card    ;8C621074 mov  r2,[r3+1074h]
+  00094C00 shl  r9,10h        ; irq_handler   ;00000000 nop
+  8C430074 mov  r3,[r2+74h]   ;               ;30420080 and  r2,80h ;I_STAT.7
+  00000000 nop                ;               ;1040000B jz   r2,@@ret
+  306AFFFF and  r10,r3,0FFFFh ;/              ;00000000 +nop
+  012A1821 add  r3,r9,r10                     ;        @@wait_lop:
+  24620028 add  r2,r3,28h ;=early+28h         ;8C621044 mov  r2,[r3+1044h]
+  3C0Axxxx lui  r10,xxxxh ;\@@new_data        ;00000000 nop
+  254Axxxx sub  r10,xxxxh ;/                  ;30420080 and  r2,80h ;JOY_STAT.7
+  3C09xxxx lui  r9,xxxxh  ;\@@new_data_end    ;1440FFFC jnz  r2,@@wait_lop
+  2529xxxx sub  r9,xxxxh  ;/                  ;00000000 +nop
+          @@copy_lop:                         ;3C020001 lui  r2,0001h
+  8D430000 mov  r3,[r10]                      ;8C42DFFC mov  r2,[r2-2004h]
+  00000000 nop                                ;00000000 nop
+  AC430000 mov  [r2],r3                       ;00400008 jmp  r2 ;=[0000DFFCh]
+  254A0004 add  r10,4h                        ;00000000 +nop
+  1549FFFB jne  r10,r9,@@copy_lop             ;        @@ret:
+  24420004 +add r2,4h                         ;03E00008 ret
+  3C010001 lui  r1,0001h      ;\[DFFCh]=r2    ;00000000 +nop
+  0xxxxxxx call xxxxxxxxh     ; and call ...  ;
+  AC22DFFC +mov [r1-2004h],r2 ;/              ;
+
+Alternately, elo2 uses slightly different code at 8003961Ch:
+
  240A00B0 mov  r10,0B0h  ;\                  ;        @@new_data:
+  0140F809 call r10       ; B(56h) GetC0Table ;3C02xxxx lui  r2,8xxxh
+  24090056 +mov r9,56h    ;/                  ;2442xxxx sub  r2,xxxxh
+  8C420018 mov  r2,[r2+06h*4] ;\get C(06h)    ;00400008 jmp  r2 ;=@@new_cont_d
+  00000000 nop                ;/              ;00000000 +nop    ;=8xxxxxxxh
+  8C430070 mov  r3,[r2+70h]   ;\              ;00000000 nop
+  00000000 nop                ; get           ;        @@new_data_end:
+  3069FFFF and  r9,r3,0FFFFh  ; early_card    ;        @@new_cont_d:
+  8C430074 mov  r3,[r2+74h]   ; irq_handler   ;8C621074 mov  r2,[r3+1074h]
+  00094C00 shl  r9,10h        ;               ;00000000 nop
+  306AFFFF and  r10,r3,0FFFFh ;               ;30420080 and  r2,80h ;I_STAT.7
+  012A1821 add  r3,r9,r10     ;/              ;1040000B jz   r2,@@ret
+  3C0Axxxx mov  r10,xxxx0000h                 ;00000000 +nop
+  3C09xxxx mov  r9,xxxx0000h                  ;        @@wait_lop:
+  24620028 add  r2,r3,28h ;=early+28h         ;8C621044 mov  r2,[r3+1044h]
+  254Axxxx sub  r10,xxxxh ;=@@new_data        ;00000000 nop
+  2529xxxx sub  r9,xxxxh  ;=@@new_data_end    ;30420080 and  r2,80h ;JOY_STAT.7
+          @@copy_lop:                         ;1440FFFC jnz  r2,@@wait_lop
+  8D430000 mov  r3,[r10]                      ;00000000 +nop
+  254A0004 add  r10,4h                        ;3C02xxxx lui  r2,8xxxh
+  24420004 add  r2,4h                         ;8C42xxxx mov  r2,[r2-xxxxh]
+  1549FFFC jne  r10,r9,@@copy_lop             ;00000000 nop
+  AC43FFFC +mov [r2-4h],r3                    ;00400008 jmp  r2 ;=[8xxxxxxxh]
+  3C018xxx mov  r1,8xxx0000h  ;\[...]=r2,     ;00000000 +nop
+  0xxxxxxx call xxxxxxxxh     ; and call ...  ;        @@ret:
+  AC22xxxx +mov [r1+xxxxh],r2 ;/              ;03E00008 ret
+           ...                                ;00000000 +nop
+
+Note: The above @@wait_lop's should be more preferably done with timeouts (else +they may hang endless if a Sony Mouse is newly connected; the mouse does have +/ACK stuck LOW on power-up).

+

patch_uninstall_early_card_irq_handler:

+

Used to uninstall the "early_card_irq_vector" (the BIOS installs that vector +from inside of B(4Ah) InitCARD2(pad_enable), and, without patches, the BIOS +doesn't allow to uninstall it thereafter).
+Used in Breath of Fire III (SLES-01304) at 8017E790, and also in Ace Combat 2 +(SLUS-00404) at 801D23F4:
+

  240A00B0 mov  r10,0B0h          ;\
+  0140F809 call r10               ; B(56h) GetC0Table
+  24090056 +mov r9,56h            ;/
+  3C0Axxxx mov  r10,xxxx0000h
+  3C09xxxx mov  r9,xxxx0000h
+  8C420018 mov  r2,[r2+06h*4] ;=00000C80h = exception_handler = C(06h)
+  254Axxxx add  r10,xxxxh ;@@new_data
+  2529xxxx add  r9,xxxxh  ;@@new_data_end
+          @@copy_lop:             ;\  @@new_data:
+  8D430000 mov  r3,[r10]          ;    00000000 nop
+  254A0004 add  r10,4h            ;    00000000 nop
+  24420004 add  r2,4h             ;    00000000 nop
+  1549FFFC jne  r10,r9,@@copy_lop ;   @@new_data_end:
+  AC43006C +mov [r2+70h-4],r3     ;/
+
+Alternately, more inefficient, used in Blaster Master-Blasting Again +(SLUS-01031) at 80063FF4h, and Raiden DX at 80029694h:
+
  24090056 mov  r9,56h            ;\
+  240A00B0 mov  r10,0B0h          ; B(56h) GetC0Table
+  0140F809 call r10               ;
+  00000000 +nop                   ;/
+  8C420018 mov  r2,[r2+06h*4] ;=00000C80h = exception_handler = C(06h)
+  3C0Axxxx mov  r10,xxxx0000h ;\@@new_data
+  254Axxxx add  r10,xxxxh     ;/
+  3C09xxxx mov  r9,xxxx0000h  ;\@@new_data_end
+  2529xxxx add  r9,xxxxh      ;/
+          @@copy_lop:             ;\
+  8D430000 mov  r3,[r10]          ;   @@new_data:
+  00000000 nop                    ;    00000000 nop
+  AC430070 mov  [r2+70h],r3       ;    00000000 nop
+  254A0004 add  r10,4h  ;src      ;    00000000 nop
+  1549FFFB jne  r10,r9,@@copy_lop ;   @@new_data_end:
+  24420004 +add r2,4h   ;dst      ;/
+
+Note: the above code is same as "patch_install_lightgun_irq_handler", except +that it writes to r2+70h, instead of r2+80h.

+

patch_card_specific_delay:

+

Same purpose as the "early_card_irq_patch" (but for the command/status bytes +rather than for the data bytes). The patch looks buggy since it inserts the +delay AFTER the acknowledge, but it DOES work (the BIOS accidently acknowledges +the IRQ twice; and the delay occurs PRIOR to 2nd acknowledge).
+Used in Metal Gear Solid at 8009AAF0h, and in Legacy of Kain at 801A56D8h, and +in alone1 at 800AE38Ch:
+

  24090057 mov  r9,57h   ;\                   ;         @@new_data:
+  240A00B0 mov  r10,0B0h ; B(57h) GetB0Table  ; 3C08A001 lui  r8,0A001h
+  0140F809 call r10      ;/                   ; 2508DF80 sub  r8,2080h
+  00000000 +nop                               ; 0100F809 call r8 ;=A000DF80h
+  8C42016C mov  r2,[r2+5Bh*4] ;B(5Bh)         ; 00000000 +nop
+  00000000 nop                                ; 00000000 nop
+  8C4309C8 mov  r3,[r2+9C8h]  ;blah           ;         @@new_data_end:
+  3C0Axxxx lui  r10,xxxxh ;\@@new_data        ; 946F000A movh r15,[r3+0Ah]
+  254Axxxx sub  r10,xxxxh ;/                  ; 3C080000 mov  r8,0h
+  3C09xxxx lui  r9,xxxxh  ;\@@new_data_end    ; 01E2C025 or   r24,r15,r2
+  2529xxxx sub  r9,xxxxh  ;/                  ; 37190012 or   r25,r24,12h
+          @@copy_lop:                         ; A479000A movh [r3+0Ah],r25
+  8D480000 mov  r8,[r10]                      ; 24080028 mov  r8,28h
+  00000000 nop                                ;         @@wait_lop:
+  AC4809C8 mov  [r2+9C8h],r8   ;B(5Bh)+9C8h.. ; 2508FFFF sub  r8,1h
+  254A0004 add  r10,4h                        ; 1500FFFE jnz  r8,@@wait_lop
+  1549FFFB jne  r10,r9,@@copy_lop             ; 00000000 +nop
+  24420004 +add r2,4h                         ; 03E00008 ret  ;above delay is
+           ...                                ; 00000000 +nop ;in UNCACHED RAM
+
+Alternately, slightly different code used in elo2 at800396D4h, and in Resident +Evil 2 at 800910E4h:
+
  240A00B0 mov  r10,0B0h ;\                   ;         @@swap_begin:
+  0140F809 call r10      ; B(57h) GetB0Table  ; 3C088xxx lui  r8,8xxxh
+  24090057 +mov r9,57h   ;/                   ; 2508xxxx sub  r8,xxxxh
+  8C42016C mov  r2,[r2+5Bh*4] ;B(5Bh)         ; 0100F809 call r8 ;=8xxxxxxxh
+  3C0Axxxx mov  r10,xxxx0000h                 ; 00000000 +nop
+  3C09xxxx mov  r9,xxxx0000h                  ; 00000000 nop
+  8C4309C8 mov  r3,[r2+9C8h] ;blah            ;         @@swap_end:
+  254Axxxx sub  r10,xxxxh  ;=@@swap_begin     ;         ;- -  -
+  2529xxxx sub  r9,xxxxh   ;=@@swap_end       ; 00000000 nop
+          @@swap_lop:                         ; 240800C8 mov  r8,0C8h
+  8C4309C8 mov  r3,[r2+9C8h] ;B(5Bh)+9C8h..   ;         @@wait_lop:
+  8D480000 mov  r8,[r10]                      ; 2508FFFF sub  r8,1h
+  254A0004 add  r10,4h                        ; 1500FFFE jnz  r8,@@wait_lop
+  AD43FFFC mov  [r10-4h],r3                   ; 00000000 +nop
+  24420004 add  r2,4h                         ; 03E00008 ret  ;above delay is
+  1549FFFA jne  r10,r9,@@swap_lop             ; 00000000 +nop ;in CACHED RAM
+  AC4809C4 +mov [r2+9C4h],r8                  ;
+

+

patch_card_info_step4:

+

The "card_info" function sends an incomplete read command to the card; in order +to receive status information. After receiving the last byte, the function does +accidently send a further byte to the card, so the card responds by another +byte (and another IRQ7), which is not processed nor acknowledged by the BIOS. +This patch kills the opcode that sends the extra byte.
+Used in alone1 at 800AE214h:
+

  24090057 mov  r9,57h                        ;\
+  240A00B0 mov  r10,0B0h                      ; B(57h) GetB0Table
+  0140F809 call r10                           ;
+  00000000 +nop                               ;/
+  240A0009 mov  r10,9h        ;=blah
+  8C42016C mov  r2,[r2+5Bh*4] ;=B(5Bh)
+  00000000 nop
+  20431988 addt r3,r2,1988h   ;=B(5Bh)+1988h  ;\store a NOP,
+  0xxxxxxx call xxxxxxxxh                     ; and call ...
+  AC600000 +mov [r3],0        ;=nop           ;/
+

+

patch_pad_error_handling_and_get_pad_enable_functions:

+

If a transmission error occurs (or if there's no controller connected), then +the Pad handler handler does usually issue a strange chip select signal to the +OTHER controller slot, and does then execute the bizarre_pad_delay function. +The patch below overwrites that behaviour by NOPs. Purpose of the original (and +patched) behaviour is unknown.
+Used by Perfect Assassin at 800519D4h:
+

  240A00B0 mov  r10,0B0h                      ;\
+  0140F809 call r10                           ; B(57h) GetB0Table
+  24090057 +mov r9,57h                        ;/
+  8C42016C mov  r2,[r2+5Bh*4] ;=B(5Bh)
+  3C01xxxx mov  r1,xxxx0000h
+  20430884 addt r3,r2,884h    ;B(5Bh)+884h
+  AC23xxxx mov  [r1+xxxxh],r3 ;<--- SetPadEnableFlag()
+  3C01xxxx mov  r1,xxxx0000h
+  20430894 addt r3,r2,894h    ;B(5Bh)+894h
+  2409000B mov  r9,0Bh        ;len
+  AC23xxxx mov  [r1+xxxxh],r3 ;<--- ClearPadEnableFlag()
+          @@fill_lop:                         ;\
+  2529FFFF sub  r9,1h                         ;
+  AC400594 mov  [r2+594h],0   ;B(5Bh)+594h..  ; erase error handling
+  1520FFFD jnz  r9,@@fill_lop                 ;
+  24420004 +add r2,4h                         ;/
+
+Alternately, same as above, but with inefficient nops, used by Sporting Clays +at 8001B4B4h:
+
  24090057 mov  r9,57h       ;\
+  240A00B0 mov  r10,0B0h     ; B(57h) GetB0Table
+  0140F809 call r10          ;
+  00000000 +nop              ;/
+  8C42016C mov  r2,[r2+5Bh*4]
+  2409000B mov  r9,0Bh ;len
+  20430884 addt r3,r2,884h
+  3C01xxxx mov  r1,xxxx0000h
+  AC23xxxx mov  [r1+xxxxh],r3 ;<--- SetPadEnableFlag()
+  20430894 addt r3,r2,894h
+  3C01xxxx mov  r1,xxxx0000h
+  AC23xxxx mov  [r1+xxxxh],r3 ;<--- ClearPadEnableFlag()
+          @@fill_lop:         ;\
+  AC400594 mov  [r2+594h],0   ;
+  24420004 add  r2,4h         ; erase error handling
+  2529FFFF sub  r9,1h         ;
+  1520FFFC jnz  r9,@@fill_lop ;
+  00000000 +nop               ;/
+
+Alternately, same as above, but without getting PadEnable functions, used in +Pandemonium II (at 80083C94h and at 8010B77Ch):
+
  240A00B0 mov  r10,0B0h              ;\
+  0140F809 call r10                   ; B(57h) GetB0Table
+  24090057 +mov r9,57h                ;/
+  8C42016C mov  r2,[r2+5Bh*4] ;=B(5Bh)
+  2409000B mov  r9,0Bh        ;len            ;\
+          @@fill_lop:                         ;
+  2529FFFF sub  r9,1h                         ; erase error handling
+  AC400594 mov  [r2+594h],0   ;B(5Bh)+594h..  ;
+  1520FFFD jnz  r9,@@fill_lop                 ;
+  24420004 +add r2,4h                         ;/
+

+

patch_optional_pad_output:

+

The normal BIOS functions are only allowing to READ from the controllers, but +not to SEND data to them (which would be required to control Rumble motors, and +to auto-activate Analog mode without needing the user to press the Analog +button). Internally, the BIOS does include some code for sending data to the +controller, but it doesn't offer a function vector for setting up the data +source address, and, even if that would be supported, it clips the data bytes +to 00h or 01h. The patch below retrieves the required SetPadOutput function +address (in which only the src1/src2 addresses are relevant, the blah1/blah2 +values aren't used), and suppresses clipping (ie. allows to send any bytes in +range 00h..FFh).
+Used in Resident Evil 2 at 80091914h:
+

  240A00B0 mov  r10,0B0h                      ;\
+  0140F809 call r10                           ; B(57h) GetB0Table
+  24090057 +mov r9,57h                        ;/
+  8C42016C mov  r2,[r2+5Bh*4] ;B(5Bh)
+  3C0Axxxx mov  r10,xxxx0000h
+  3C09xxxx mov  r9,xxxx0000h
+  3C01xxxx mov  r1,xxxx0000h
+  204307A0 addt r3,r2,7A0h    ;B(5Bh)+7A0h
+  254Axxxx add  r10,xxxxh  ;=@@new_data
+  2529xxxx add  r9,xxxxh   ;=@@new_data_end
+  AC23xxxx mov  [r1-xxxxh],r3 ;<--- SetPadOutput(src1,blah1,src2,blah2)
+          @@double_copy_lop:                  ;\
+  8D430000 mov  r3,[r10]                      ;           @@new_data:
+  254A0004 add  r10,4h                        ;   00551024 and     r2,r21
+  AC4303D8 mov  [r2+3D8h],r3  ;<--- here      ;   00000000 nop
+  24420004 add  r2,4h                         ;   00000000 nop
+  1549FFFB jne  r10,r9,@@double_copy_lop      ;   00000000 nop
+  AC4304DC +mov [r2+4DCh],r3  ;<--- here      ;/          @@new_data_end:
+
+Alternately, more inefficient (with NOPs), used in Lemmings at 80036618h:
+
  24090057 mov  r9,57h                        ;\
+  240A00B0 mov  r10,0B0h                      ; B(57h) GetB0Table
+  0140F809 call r10                           ;
+  00000000 +nop                               ;/
+  3C0Axxxx mov  r10,xxxx0000h
+  254Axxxx add  r10,xxxxh    ;=@@new_data
+  3C09xxxx movp r9,xxxx0000h
+  2529xxxx add  r9,xxxxh     ;=@@new_data_end
+  8C42016C mov  r2,[r2+5Bh*4] ;B(5Bh)
+  00000000 nop
+  204307A0 addt r3,r2,7A0h    ;B(5Bh)+7A0h
+  3C01xxxx mov  r1,xxxx0000h
+  AC23xxxx mov  [r1+xxxxh],r3 ;<--- SetPadOutput(src1,blah1,src2,blah2)
+          @@double_copy_lop:                  ;\
+  8D430000 mov  r3,[r10]                      ;           @@new_data:
+  00000000 nop                                ;   00551024 and     r2,r21
+  AC4303D8 mov  [r2+3D8h],r3                  ;   00000000 nop
+  AC4304E0 mov  [r2+4E0h],r3                  ;   00000000 nop
+  24420004 add  r2,4h                         ;   00000000 nop
+  254A0004 add  r10,4h                        ;           @@new_data_end:
+  1549FFF9 jne  r10,r9,@@double_copy_lop      ;
+  00000000 +nop                               ;/
+

+

patch_no_pad_card_auto_ack:

+

This patch suppresses automatic IRQ0 (vblank) acknowleding in the Pad/Card IRQ +handler, that, even if auto-ack is enabled. Obviously, one could as well +disable auto-ack via B(5Bh) ChangeClearPAD(int), so this patch is total +nonsense. Used in Resident Evil 2 at 800919ACh:
+

  240A00B0 mov   r10,0B0h                      ;\
+  0140F809 call  r10                           ; B(57h) GetB0Table
+  24090057 +mov  r9,57h                        ;/
+  8C42016C mov   r2,[r2+5Bh*4] ;=B(5Bh)
+  240A0009 mov   r10,9h        ;len            ;\
+  2043062C addt  r3,r2,62Ch    ;=B(5Bh)+62Ch   ;
+          @@fill_lop:                          ;
+  254AFFFF sub   r10,1h                        ;
+  AC600000 mov   [r3],0                        ;
+  1540FFFD jnz   r10,@@fill_lop                ;
+  24630004 +add  r3,4h                         ;/
+
+Alternately, same as above, but more inefficient, used in Sporting Clays at +8001B53Ch:
+
  24090057 mov   r9,57h                        ;\
+  240A00B0 mov   r10,0B0h                      ; B(57h) GetB0Table
+  0140F809 call  r10                           ;
+  00000000 +nop                                ;/
+  240A0009 mov   r10,9h    ;len
+  8C42016C mov   r2,[r2+5Bh*4]
+  00000000 nop
+  2043062C addt  r3,r2,62Ch
+          @@fill_lop:                          ;\
+  AC600000 mov   [r3],0                        ;
+  24630004 add   r3,4h                         ;
+  254AFFFF sub   r10,1h                        ;
+  1540FFFC jnz   r10,@@fill_lop                ;
+  00000000 +nop                                ;/
+
+Either way, no matter if using the patch or if using ChangeClearPAD(int), +having auto-ack disabled allows to install a custom vblank IRQ0 handler, which +is probably desired for most games, however, mind that the PSX BIOS doesn't +actually support the same IRQ to be processed by two different IRQ handlers, +eg. the custom handler may acknowledge the IRQ even when the Pad/Card handler +didn't process it, so pad input may become bumpy.

+

patch_install_lightgun_irq_handler:

+

Used in Sporting Clays at 80027D68h (when Konami Lightgun connected):
+

  240A00B0 mov  r10,0B0h     ;\
+  0140F809 call r10          ; B(56h) GetC0Table
+  24090056 +mov r9,56h       ;/
+  3C0Axxxx mov  r10,xxxx0000h ;src
+  3C09xxxx mov  r9,xxxx0000h  ;src.end
+  8C420018 mov  r2,[r2+06h*4] ;C(06h)
+  254Axxxx add  r10,xxxxh     ;src
+  2529xxxx add  r9,xxxxh      ;src.end (=src+10h)
+          @@copy_lop:              ;\    ;        @@src:
+  8D430000 mov  r3,[r10]           ;     ;3C02xxxx mov  r2,xxxx0000h
+  254A0004 add  r10,4h             ;     ;2442xxxx add  r2,xxxxh
+  24420004 add  r2,4h              ;     ;0040F809 call r2  ;lightgun_proc
+  1549FFFC jne  r10,r9,@@copy_lop  ;     ;00000000 +nop
+  AC43007C +mov [r2+80h-4],r3      ;/             @@src_end:
+
+Alternately, same as above, but more inefficient, used in DQM (Dragon Quest +Monsters 1&2) at 80089390h (install) and 800893F8h (uninstall):
+
  24090056 mov  r9,56h        ;\
+  240A00B0 mov  r10,0B0h      ; B(56h) GetC0Table
+  0140F809 call r10           ;
+  00000000 +nop               ;/
+  8C420018 mov  r2,[r2+06h*4] ;=00000C80h = exception_handler = C(06h)
+  3C0Axxxx mov  r10,xxxx0000h ;\@@new_data (3xNOP)
+  254Axxxx add  r10,-xxxxh    ;/
+  3C09xxxx mov  r9,xxxx0000h  ;\@@new_data_end
+  2529xxxx add  r9,-xxxxh     ;/
+          @@copy_lop:             ;\
+  8D430000 mov  r3,[r10]          ; @@new_data: ;for (un-)install...
+  00000000 nop                    ; 00000000 nop / 3C02xxxx mov r2,xxxx0000h
+  AC430080 mov  [r2+80h],r3       ; 00000000 nop / 2442xxxx add r2,-xxxxh
+  254A0004 add  r10,4h            ; 00000000 nop / 0040F809 call r2  ;proc
+  1549FFFB jne  r10,r9,@@copy_lop ; @@new_data_end:
+  24420004 +add r2,4h             ;/
+
+Some lightgun games (eg. Project Horned Owl) do (additionally to above stuff) +hook the exception vector at 00000080h, the hook copies the horizontal +coordinate (timer0) to a variable in RAM, thus getting the timer0 value +"closest" to the actual IRQ execution. Doing that may eliminate some +unpredictable timing offsets that could be caused by cache hits/misses during +later IRQ handling (and may also eliminate a rather irrelevant 1-cycle +inaccuracy depending on whether EPC was pointing to a GTE opcode, and also +eliminates constant cycle offsets depending on whether early_card_irq_handler +was installed and enabled, and might eliminate timing differences for different +BIOS versions).

+

set_conf_without_realloc:

+

Used in Spec Ops Airborne Commando at 80070AE8h, and also in the homebrew game +Roll Boss Rush at 80010B68h and 8001B85Ch. Purpose is unknown (maybe to +override improperly defined .EXE headers).
+

  8C030474 mov   r3,[200h+(9Dh*4)]      ;\get ptr to A(9Dh) GetConf (done so,
+  00000000 nop                          ;/as there's no "GetA0Table" funtion)
+  94620000 movh  r2,[r3+0h] ;lui msw    ;\
+  84630004 movhs r3,[r3+4h] ;lw lsw+8   ; extract ptr to "boot_cnf_values"
+  00021400 shl   r2,10h     ;msw*10000h ; (from first 2 opcodes of GetConf)
+  2442FFF8 sub   r2,8h      ;undo +8    ;
+  00431021 add   r2,r3      ;lsw        ;/
+  AC450000 mov   [r2+0h],r5 ;num_TCB    ;\set num_EvCB,num_TCB,stacktop
+  AC440004 mov   [r2+4h],r4 ;num_EvCB   ; (unlike A(9Ch) SetConf, without
+  03E00008 ret                          ; actually reallocting anything)
+  AC460008 +mov  [r2+8h],r6 ;stacktop   ;/
+

+

Cheat Devices

+

CAETLA detects the PSX BIOS version by checksumming BFC06000h..BFC07FFFh and +does then use some hardcoded BIOS addresses based on that checksum. The reason +for doing that is probably that the Pre-Boot Expansion ROM vector is called +with the normal A0h/B0h/C0h vectors being still uninitialized.
+Problems are that the hardcoded addresses won't work with all BIOSes (eg. not +with the no$psx bios clone, probably also not with the newer PS2 BIOS), +moreover, the checksumming can fail with patched original BIOSes (eg. no$psx +allows to enable TTY debug messages and to skip the BIOS intro).
+The Cheat Firmwares are probably also hooking the Vblank handler, and maybe +also some other functions.
+ACTION REPLAY (at least later versions like 2.81) uses the Pre-Boot handler to +set a COP0 hardware breakpoint at 80030000h and does then resume normal BIOS +booting (which will then initialize important things like A0h/B0h/C0h tables, +and will then break when starting the GUI code at 80030000h).
+XPLORER searches opcode 24040385h at BFC06000h and up, and does then place a +COP0 opcode fetch breakpoint at the opcode address+10h (note: this is within a +branch delay slot, which makes COP0 emulation twice as complicated). XPLORER +does also require space in unused BIOS RAM addresses (eg. Xplorer v3.20: addr +7880h at 1F002280h, addr 017Fh at 1F006A58h).

+

Note

+

Most games include two or three patches. The only game that I've seen so far +that does NOT use any patches is Wipeout 2097.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/konamisystem573/index.html b/konamisystem573/index.html new file mode 100644 index 0000000..da46461 --- /dev/null +++ b/konamisystem573/index.html @@ -0,0 +1,13382 @@ + + + + + + + + + + + + + + + + + + + + + + + + Konami System 573 - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Konami System 573

+

The System 573 is a PlayStation-based system used in a number of Konami arcade +games from the late 90s and early 2000s, most notably Dance Dance Revolution and +other titles from the Bemani series of rhythm games.

+ +

This document is currently work-in-progress. Here is an incomplete list of +things that need more research:

+
    +
  • The BIOS and games are notoriously picky about ATAPI drives. Konami's code + shall be disassembled and tested in order to find out where and why drive + initialization fails with most drives.
  • +
  • The fishing controls I/O board has been fully reverse engineered, but + documentation for it is missing.
  • +
  • The digital I/O board's FPGA and some security cartridges have not been fully + mapped out yet.
  • +
  • The DDR stage I/O board's communication protocol is largely unknown. More + tests need to be done on real hardware and its CPLD shall be dumped if + possible.
  • +
  • The protocol used by the 573 to communicate with the e-Amusement network PCB + is currently not known.
  • +
+

Differences vs. PS1

+

Main changes

+
    +
  • Main RAM is 4 MB instead of 2 MB and VRAM is 2 MB instead of 1 MB. SPU + RAM is still 512 KB.
  • +
  • The CD-ROM drive is completely different. While the PS1's drive is fully + integrated into the motherboard and uses a custom protocol, the 573 employs a + standard ATAPI drive. It can thus boot from burned CD-Rs or even CD-RWs just + fine (as long as the drive itself is capable of reading them in the first + place), with no modifications needed to the stock hardware. There is no + provision for playing XA-ADPCM, however CD-DA playback through the drive's own + audio output (fed into the 573 motherboard via a 4-pin audio cable) is + supported and used by some games.
  • +
  • The SIO0 bus for controllers and memory cards is unused. It is broken out + to a connector, however no known I/O board uses it. Some games supported PS1 + controllers and memory cards through an adapter connected over JVS (see the + external modules section).
  • +
  • The "parallel I/O" expansion port is replaced by 2 PCMCIA slots. These + slots are wired in parallel and mapped at the same address as the internal + flash through bank switching. They are fairly limited though as they only + support 16-bit bus accesses (i.e. /CE1 and /CE2 are tied together, even + though the CPU actually exposes them as separate signals!), have no DMA and + don't expose the PCMCIA I/O and configuration space (/IORD and /IOWR are + not connected at all). This makes them incompatible with CF cards and most + PCMCIA devices.
  • +
+

Additional hardware

+
    +
  • Audio and video outputs: unlike the PS1, which outputs composite, S-video + and RGB, the 573 only outputs RGB with C-sync through the JAMMA connector and + a DB15 port compliant with the JVS specification (same pinout as VGA but not + directly compatible, as VGA normally runs at higher resolutions and uses + separate H/V sync pins). A built-in 15 watt stereo speaker amplifier is also + provided for cabinets that lack their own sound system.
  • +
  • JAMMA interface and built-in I/O ports: the 573 provides multiple digital + and analog ports for interfacing with arcade cabinet controls. Depending on + the I/O board the system came with, these signals might be broken out through + connectors on the system's case.
  • +
  • Internal 16 MB flash memory: the 573's BIOS is capable of booting either + from the CD drive or from an array of flash memory chips soldered to the + motherboard, which are also memory mapped. Most Konami games are designed to + run from flash: when attempting to run them from CD without also having them + installed, the executable on the disc will erase the flash and install the + game before starting. Most games still require the CD, in some cases a + different one, to be kept in the drive after installation as they use it for + music playback or to stream additional data.
  • +
  • PCMCIA memory card: some games shipped with additional flash memory in the + form of one or more 16 or 32 MB PCMCIA cards. Note that these are "linear" + memory mapped flash cards without any built-in controller, not CF or + ATA-compatible cards. See the BIOS section for more details on why CF cards + are not supported.
  • +
  • RTC and battery-backed 8 KB RAM: used by games to store settings, save + data and installation info (possibly including serial numbers). Unfortunately + the RTC chip is one of those all-in-one things with a battery sealed inside, + soldered directly to the motherboard.
  • +
  • JVS host: allows connection of multiple daisy chained peripherals using + the standardized JVS protocol, based on a serial (RS-485) bus. The JVS port on + the 573 was only ever "officially" used for the PS1 memory card reader module, + however some games seem to support JVS I/O boards and input devices in + addition to the built-in JAMMA connector.
  • +
  • Security cartridge: optionally installed on the 573's side, contains a + password protected EEPROM that holds factory pre-programmed data as well as + keys generated during game installation, plus in some case a 64-bit serial + number ROM. Security cartridges were bundled with most game discs as a way to + prevent copying, as the discs themselves had no other protection of any kind. + The CPU's serial port (SIO1) is also wired to the security cartridge slot.
  • +
+

Register map

+

All standard PS1 registers, with the exception of the CD-ROM drive's, are +present and accessible. System 573-specific hardware is mapped into the EXP1 +region at 0x1f000000. IRQ10 and DMA5, normally reserved for the expansion bus +(and lightguns) on a regular PS1, are used to access the ATAPI drive, while IRQ2 +and DMA3 go unused.

+

NOTE: EXP1 must be configured prior to accessing any of these registers. The +configuration value written by Konami's code to the EXP1 delay/size register at +0x1f801008 is 0x24173f47. Afterwards, all bus writes shall be 16 or 32 +bits wide. The behavior of 8-bit writes is undefined, but 8-bit reads work as +intended.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Address rangeDescription
0x1f000000-0x1f3fffffBank switched, can be mapped to flash or PCMCIA slots
0x1f400000-0x1f40000fKonami ASIC registers
0x1f480000-0x1f48000fIDE register bank 0
0x1f4c0000-0x1f4c000fIDE register bank 1
0x1f620000-0x1f623fffRTC registers and battery-backed RAM
0x1f640000-0x1f6400ffI/O board registers
0x1f500000-0x1f6a0001Other registers
+

Konami ASIC registers

+

Registers in the 0x1f400000-0x1f40000f region are handled by the Konami 056879 +I/O ASIC, consisting of a single 8-bit output port and at least six 16-bit input +ports. The same chip was used in other Konami arcade boards of the time.

+

0x1f400000 (ASIC register 0): ADC / Coin counters / Audio control

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0WData input to ADC (DI)
1WChip select to ADC (/CS)
2WData clock to ADC (CLK)
3WCoin counter 1 (1 = energize counter coil)
4WCoin counter 2 (1 = energize counter coil)
5WBuilt-in audio amplifier enable (0 = muted)
6WExternal audio input enable (0 = muted)
7WSPU DAC output enable (0 = muted)
8WJVS MCU reset output (0 = pull reset low)
9-15Unused
+

The ADC chip is an ADC0834 from TI, which uses a proprietary SPI-like protocol. +Its four inputs are wired to the ANALOG connector on the 573 motherboard. +Refer to the ADC083x datasheet for details on how to bitbang the protocol.

+

Mechanical coin counters are incremented by games whenever a coin is inserted by +setting bit 3 or 4 for a fraction of a second and then clearing them. Bit 5 +controls whether the onboard audio amp is enabled but does not affect the RCA +line level outputs, which are always enabled. Setting bit 5 has no effect +immediately as the amplifier takes about a second to turn on.

+

Bit 6 is used by games to mute audio from the CD-ROM drive or digital I/O board. +However, testing on real hardware seems to suggest it is actually some sort of +attenuation control, as the audio is still audible (albeit at a very low volume) +when the bit is cleared. Note that some games, such as GuitarFreaks, break the +CD/MP3 output to separate jacks on the front I/O panel rather than routing it +through the motherboard, making bit 6 meaningless.

+

Bit 8 resets the JVS MCU. Since the reset pin is active-low, resetting is done +by writing 0, waiting at least 10 H8 clock cycles (the BIOS waits 2 hblanks) +and writing 1 again. Resetting the MCU will clear JVSDRDY but not JVSIRDY. +As the 056879 ASIC's output register is only 8 bits wide, bit 8 is actually +handled by a discrete flip-flop on the motherboard.

+

Unknown what reading from this port does.

+

0x1f400004 (ASIC register 2): DIP switches / JVS status / Security cartridge

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-3RDIP switch 1-4 status (0 = on, 1 = off)
4-5RCurrent JVS MCU status code
6-7RCurrent JVS MCU error code
8-15RI0-I7 from security cartridge
+

The MCU status code can be one of the following values:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
CodeDescription
0Waiting for the 573 to read or write the first word of a packet
1Busy (sending a packet or waiting for a response)
2Waiting for the 573 to finish reading or writing a packet
3Unused
+

The MCU error code can be one of the following values:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
CodeDescription
0Unused
1Packet written by the 573 has an invalid checksum
2Packet written by the 573 does not start with a 0xe0 sync byte
3No error
+

Once an error is reported, the MCU will enter an endless loop and become +unresponsive. In order to clear the error the MCU must be reset using bit 8 in +register 0x1f400000.

+

The highest 8 bits read from this register are the current state of the security +cartridge's I0-I7 pins. See the security cartridge section for an explanation +of what each bit is wired to. Unknown whether reading from this register will +clear the IRDY flag, if previously set by the cartridge.

+

Bit 3 (DIP switch 4) is used by the BIOS to determine whether to boot from +flash. If set, the BIOS will attempt to search for a valid executable on the +internal flash and both PCMCIA cards prior to falling back to the CD-ROM.

+

0x1f400006 (ASIC register 3): Misc. inputs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0RData output from ADC (DO)
1RSAR status from ADC (SARS)
2RFrom SDA on security cartridge
3RSense input from JVS port
4RJVSIRDY status from JVS MCU
5RJVSDRDY status from JVS MCU
6RIRDY status from security cartridge
7RDRDY status from security cartridge
8RCoin switch input 1 (0 = coin being inserted)
9RCoin switch input 2 (0 = coin being inserted)
10RPCMCIA card 1 insertion (0 = card present)
11RPCMCIA card 2 insertion (0 = card present)
12RService button (JAMMA pin R, 0 = pressed)
13-15Unused?
+

See the security cartridge section for more details about IRDY and DRDY. In +order for bit 2 to be valid, SDA should be set as an input by clearing the +respective bit in register 0x1f500000.

+

0x1f400008 (ASIC register 4): JAMMA controls

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0RPlayer 2 joystick left (JAMMA pin X)
1RPlayer 2 joystick right (JAMMA pin Y)
2RPlayer 2 joystick up (JAMMA pin V)
3RPlayer 2 joystick down (JAMMA pin W)
4RPlayer 2 button 1 (JAMMA pin Z)
5RPlayer 2 button 2 (JAMMA pin a)
6RPlayer 2 button 3 (JAMMA pin b)
7RPlayer 2 start button (JAMMA pin U)
8RPlayer 1 joystick left (JAMMA pin 20)
9RPlayer 1 joystick right (JAMMA pin 21)
10RPlayer 1 joystick up (JAMMA pin 18)
11RPlayer 1 joystick down (JAMMA pin 19)
12RPlayer 1 button 1 (JAMMA pin 22)
13RPlayer 1 button 2 (JAMMA pin 23)
14RPlayer 1 button 3 (JAMMA pin 24)
15RPlayer 1 start button (JAMMA pin 17)
+

As buttons are active-low (wired between JAMMA pins and ground), all bits are 0 +when a button is pressed and 1 otherwise. The BIOS and games often read from +this register and discard the result as a way of (inefficiently) flush the CPU's +write queue.

+

0x1f40000a (ASIC register 5): Data from JVS MCU

+ + + + + + + + + + + + + + + +
BitsRWDescription
0-15RCurrent data word from MCU
+

This register is only valid when the JVSIRDY flag is set. After reading, a +dummy write to 0x1f520000 shall be issued to clear JVSIRDY. If the MCU has +more data available, it will update the register and set the flag again.

+

0x1f40000c (ASIC register 6): JAMMA controls / External inputs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-7Unused?
8RPlayer 1 button 4 (JAMMA pin 25)
9RPlayer 1 button 5 (JAMMA pin 26)
10RTest button (built-in and JAMMA pin 15)
11RPlayer 1 button 6
12-15Unused?
+

As buttons are active-low (wired between JAMMA pins and ground), all bits are 0 +when a button is pressed and 1 otherwise.

+

The signals for buttons 4 and 5 are wired in parallel to both JAMMA and the +EXT-IN connector, while button 6 can only be connected through EXT-IN and is +usually unused.

+

0x1f40000e (ASIC register 7): JAMMA controls / External inputs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-7Unused?
8RPlayer 2 button 4 (JAMMA pin c)
9RPlayer 2 button 5 (JAMMA pin d)
10Unused?
11RPlayer 2 button 6
12-15Unused?
+

As buttons are active-low (wired between JAMMA pins and ground), all bits are 0 +when a button is pressed and 1 otherwise.

+

The signals for buttons 4 and 5 are wired in parallel to both JAMMA and the +EXT-IN connector, while button 6 can only be connected through EXT-IN and is +usually unused.

+

IDE registers

+

The IDE interface consists of a 16-bit parallel data bus with a 3-bit address +bus and two bank select pins (/CS0 and /CS1), giving a total of sixteen +16-bit registers of which only nine are typically used. On the 573 the two IDE +banks are mapped to two separate memory regions at 0x1f480000 and 0x1f4c0000 +respectively. The IDE interrupt pin is routed into IRQ10 through the CPLD, while +all other signals on the 40-pin connector (DMA handshaking lines, status pins, +etc.) go unused.

+

Most 573 games, with the exception of those that run entirely from the internal +flash or PCMCIA cards, expect an ATAPI CD-ROM drive to be always connected and +configured as the primary (master) drive. Connecting an additional ATA hard +drive, CF card, IDE-to-SATA bridge or other device configured as secondary will +not interfere with the BIOS or games, thus homebrew games and apps can leverage +such a drive to store data separately from the currently installed game.

+

Note that IDE and ATAPI give slightly different meanings to each register. Refer +to the ATA and ATAPI specifications for more details.

+

0x1f480000 (IDE bank 0, address 0): Data

+ + + + + + + + + + + + + + + +
BitsRWDescription
0-15RWCurrent packet or data word
+

Data transfers can also be performed through DMA. See below for details.

+

0x1f480002 (IDE bank 0, address 1): Error / Features

+

When read:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0RUnusedIllegal length flag (ILI)
1RNo media flag (NM)End of media flag (EOM)
2RCommand aborted flag (ABRT)Command aborted flag (ABRT)
3RMedia change request flag (MCR)Unused
4RAddress not found flag (IDNF)SCSI sense key bit 0
5RMedia changed flag (MC)SCSI sense key bit 1
6RUncorrectable error flag (UNC)SCSI sense key bit 2
7RDMA CRC error flag (ICRC)SCSI sense key bit 3
8-15UnusedUnused
+

When written:

+ + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-7WCommand-specific feature index or flags
8-15Unused
+

0x1f480004 (IDE bank 0, address 2): Sector count

+ + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0-7WTransfer sector countUnused
8-15UnusedUnused
+

In ATA 48-bit LBA mode, bits 8-15 of the number of sectors to transfer must be +written to this register first, followed by bits 0-7.

+

In ATA CHS or 28-bit LBA mode, setting this register to 0 will cause 256 sectors +to be transferred.

+

0x1f480006 (IDE bank 0, address 3): Sector number

+ + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0-7WCHS sector index or LBA bits 0-7Unused
8-15UnusedUnused
+

In ATA 48-bit LBA mode, bits 24-31 of the target LBA must be written to this +register first, followed by bits 0-7.

+

0x1f480008 (IDE bank 0, address 4): Cylinder number low

+ + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0-7RWCHS cylinder index bits 0-7 or LBA bits 8-15Transfer chunk size bits 0-7
8-15UnusedUnused
+

In ATA 48-bit LBA mode, bits 32-39 of the target LBA must be written to this +register first, followed by bits 8-15.

+

0x1f48000a (IDE bank 0, address 5): Cylinder number high

+ + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0-7RWCHS cylinder index bits 8-15 or LBA bits 16-23Transfer chunk size bits 8-15
8-15UnusedUnused
+

In ATA 48-bit LBA mode, bits 40-47 of the target LBA must be written to this +register first, followed by bits 16-23.

+

0x1f48000c (IDE bank 0, address 6): Head number / Drive select

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0-3WCHS head index or 28-bit LBA bits 24-27Reserved (should be 0)
4RWDrive select (0 = primary, 1 = secondary)Drive select (0 = primary, 1 = secondary)
5Reserved (should be 1?)Reserved (should be 1?)
6WSector addressing mode (0 = CHS, 1 = LBA)Reserved (should be 0)
7Reserved (should be 1?)Reserved (should be 1?)
8-15UnusedUnused
+

Bits 0-3 are not used in ATA 48-bit LBA mode.

+

0x1f48000e (IDE bank 0, address 7): Status / Command

+

When read:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0RError flag (ERR)Error flag (CHK)
1RUnusedUnused
2RUnusedUnused
3RData request flag (DRQ)Data request flag (DRQ)
4RDrive write error flag (DWE)Overlapped service flag (SERV)
5RDrive fault flag (DF)Drive fault flag (DF)
6RDrive ready flag (DRDY)Drive ready flag (DRDY)
7RDrive busy flag (BSY)Drive busy flag (BSY)
8-15UnusedUnused
+

When written:

+ + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-7WCommand index
8-15Unused
+

In order to issue a command, the features, sector, cylinder and head registers +must be set up appropriately before writing the command ID to this register. +Refer to the ATA specification for a list of available commands and their +parameters.

+

DRDY is set by the drive when it is ready to execute an ATA command. Note that +ATAPI drives will not set DRDY initially, while still accepting ATAPI +commands, in order to prevent misdetection as a hard drive. Before sending any +command, a polling loop shall be used to wait until BSY is cleared.

+

DRQ is set when the drive is waiting for data to be read or written. Depending +on the drive and command, an interrupt may also be fired when DRQ goes high +after a command is issued. ERR/CHK is set if the last command executed +resulted in an error; in that case the error register will contain more +information about the cause of the error.

+

Reading from this register will acknowledge any pending drive interrupt and +deassert IRQ10. Note that, as with all PS1 interrupts, IRQ10 must additionally +be acknowledged at the interrupt controller side in order for it to fire again.

+

0x1f4c000c (IDE bank 1, address 6): Alternate status

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription (ATA)Description (ATAPI)
0RError flag (ERR)Error flag (CHK)
1RUnusedUnused
2RUnusedUnused
3RData request flag (DRQ)Data request flag (DRQ)
4RDrive write error flag (DWE)Overlapped service flag (SERV)
5RDrive fault flag (DF)Drive fault flag (DF)
6RDrive ready flag (DRDY)Drive ready flag (DRDY)
7RDrive busy flag (BSY)Drive busy flag (BSY)
8-15UnusedUnused
+

Read-only mirror of the status register at 0x1f48000e that returns the same +flags, but does not acknowledge any pending IRQ when read.

+

IDE DMA and quirks

+

DMA channel 5, normally reserved for the expansion port on a PS1, can be used to +transfer data to/from the IDE bus... with some caveats. The "correct" way to +connect an IDE drive to the PS1's DMA controller would to be to wire up DMARQ +and /DMACK from the drive directly to the respective pins on the CPU, allowing +the DMA controller to synchronize transfers to the drive's internal buffer in +chunked mode.

+

However, Konami being Konami, they did not do this on the 573. IDE drives will +instead interpret DMA reads or writes as a burst of regular ("PIO", as defined +in the ATA specification) CPU-issued reads or writes. As such, the drive shall +be configured for PIO data transfers rather than DMA using the "set features" +ATA command, and bits 9-10 in the DMA5_CHCR register shall be cleared to put +the channel in manual synchronization mode. The DRQ bit in the status register +must also be polled manually prior to starting a transfer, to ensure the drive +is ready for it.

+

RTC registers

+

The RTC is an ST M48T58. This chip behaves like an 8 KB 8-bit static RAM, wired +to the lower 8 bits of the 16-bit data bus. It must thus be accessed by +performing 16-bit bus accesses and ignoring/masking out the upper 8 bits (as +with IDE control registers).

+

The first 8184 bytes are mapped to the 0x1f620000-0x1f623fef region and are +simply battery-backed SRAM, which will retain its contents across power cycles +as long as the RTC's battery is not dead. The last 8 bytes are used as clock and +control registers.

+

The values of the clock registers are buffered: they are stored in intermediate +registers rather than being read from or written to the clock counters directly. +Bits 6 and 7 in the control register at 0x1f623ff0 are used to control +transfers between the registers and clock counters. All clock values are +returned in BCD format.

+

0x1f623ff0 (M48T58 register 0x1ff8): Calibration / Control

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-4RWUnknownCalibration offset (0-31), adjusts oscillator frequency
5RWUnknownSign bit for calibration offset (1 = positive)
6WNoRead mutex (1 = prevent buffered register updates)
7WNoWrite mutex and trigger
8-15Unused
+

The values of all buffered clock registers are updated automatically. Setting +bit 6 will disable this behavior while keeping the counters running, allowing +for the registers to be read reliably without the RTC updating them at the same +time. The bit shall be cleared after reading the registers.

+

Setting bit 7 will also halt buffered register updates, so that they can be +overwritten manually with new values. Clearing it afterwards will result in the +registers' values being copied back to the clock counters.

+

0x1f623ff2 (M48T58 register 0x1ff9): Seconds / Stop

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-3RWYesSecond units (0-9)
4-6RWYesSecond tens (0-5)
7RWUnknownStop flag (0 = clock paused, 1 = clock running)
8-15Unused
+

0x1f623ff4 (M48T58 register 0x1ffa): Minute

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-3RWYesMinute units (0-9)
4-6RWYesMinute tens (0-5)
7Reserved (must be 0)
8-15Unused
+

0x1f623ff6 (M48T58 register 0x1ffb): Hour

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-3RWYesHour units (0-9, or 0-3 if tens = 2)
4-5RWYesHour tens (0-2)
6-7Reserved (must be 0)
8-15Unused
+

Hours are always returned in 24-hour format, as there is no way to switch to +12-hour format.

+

0x1f623ff8 (M48T58 register 0x1ffc): Day of week / Century

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-2RWYesDay of week (1-7)
3Reserved (must be 0)
4RWYesCentury flag
5RWUnknownCentury flag toggling enable (1 = enabled)
6RWUnknownEnable 512 Hz clock signal output on pin 1
7Reserved (must be 0)
8-15Unused
+

The day of week register is a free-running counter incremented alongside the day +counter. There is no logic for calculating the day of the week, so it must be +updated manually when setting the time. Konami games use 1 as Sunday, 2 as +Monday and so on.

+

Bit 4 is a single-bit "counter" that gets toggled each time the year counter +overflows. It can be frozen by clearing bit 5. Konami games do not use the +century flag, as they interpret any year counter value in 70-99 range as +1970-1999 and all other values as a year after 2000.

+

0x1f623ffa (M48T58 register 0x1ffd): Day of month / Battery state

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-3RWYesDay of month units (range depends on tens and month)
4-5RWYesDay of month tens (range depends on month)
6RNoLow battery flag (1 = battery voltage is below 2.5V)
7RWUnknownBattery monitoring enable (1 = enabled)
8-15Unused
+

Bit 6 is updated when the system is power cycled, if bit 7 has previously been +set.

+

0x1f623ffc (M48T58 register 0x1ffe): Month

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-3RWYesMonth units (1-9, or 0-2 if tens = 1)
4RWYesMonth tens (0-1)
5-7Reserved (must be 0)
8-15Unused
+

0x1f623ffe (M48T58 register 0x1fff): Year

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWBufferedDescription
0-3RWYesYear units (0-9)
4-7RWYesYear tens (0-9)
8-15Unused
+

The year counter covers a full century, going from 00 to 99. On each overflow +the century flag in the day of week register is toggled.

+

Other registers

+

These registers are implemented almost entirely using 74-series logic and the +XC9536 CPLD on the main board.

+

0x1f500000: Bank switch / Security cartridge

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-5WBank number (0-47, see below)
6WSDA direction on security cartridge (0 = input/high-z)
7Unknown (goes into CPLD)
8-15Unused
+

Bit 6 controls whether SDA on the security cartridge is an input or an output. +If set, SDA will output the same logic level as D0, otherwise the pin will +be floating. Bits 0-5 are used to switch the device mapped to the 4 MB +0x1f000000-0x1f3fffff region:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BankMapped to
0Internal flash 1 (chips 31M, 27M)
1Internal flash 2 (chips 31L, 27L)
2Internal flash 3 (chips 31J, 27J)
3Internal flash 4 (chips 31H, 27H)
4-15Unused
16-31PCMCIA card slot 1
32-47PCMCIA card slot 2
48-63Unused
+

0x1f520000: JVSIRDY clear

+ + + + + + + + + + + + + + + +
BitsRWDescription
0-15Unused
+

This register is a dummy write-only port that clears the JVSIRDY flag when any +value is written to it. The flag is set by the JVS MCU whenever a new data word +is available for reading from 0x1f40000a.

+

0x1f560000: IDE reset control

+ + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0WReset pin output (0 = pull reset low)
1-15Unused
+

Since the IDE reset pin is active-low, a reset is performed by writing 0 to this +register, then waiting a few milliseconds and writing 1 again. Note that the IDE +specification also defines a way to "soft-reset" devices (e.g. to abort +execution of a command) using the SRST bit in the device control register.

+

0x1f5c0000: Watchdog clear

+ + + + + + + + + + + + + + + +
BitsRWDescription
0-15Unused
+

This register is a dummy write-only port that clears the watchdog timer embedded +in the Konami 058232 power-on reset and coin counter driver chip when any value +is written to it. The BIOS and games write to this port roughly once per frame.

+

If the watchdog is not cleared at least every 350-400 ms, it will pull the +system's reset line low for about 50 ms in order to force a reboot. The watchdog +can be disabled without affecting power-on reset by placing a jumper on S86 +(see the pinouts section).

+

0x1f600000: External outputs

+ + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-7WTo OUT0-OUT7 on EXT-OUT connector
8-15Unused
+

The lower 8 bits written to this register are latched on pins OUT0-OUT7 of the +external output connector (see the pinouts section). This connector is used by +some games to control cabinet lights without using an I/O board.

+

0x1f680000: Data to JVS MCU

+ + + + + + + + + + + + + + + +
BitsRWDescription
0-15WData word to MCU
+

In order to prevent overruns, this register shall only be accessed when +JVSDRDY is cleared. Writing to it will set JVSDRDY.

+

0x1f6a0000: Security cartridge outputs

+ + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-7WTo D0-D7 on security cartridge
8-15Unused
+

The lower 8 bits written to this register are latched on pins D0-D7 of the +cartridge slot. See the security cartridge section for an explanation of what +each pin is wired to. Bit 0 additionally controls the SDA pin when configured +as an output through the bank switch register. Writing to this register will set +the DRDY flag, which can then be cleared by the cartridge.

+

Some games may rely on reads from this register returning the last value written +to it. This behavior is unconfirmed.

+

JVS interface

+

The System 573 is equipped with a JVS host interface, allowing for connection of +I/O modules, controllers and other devices that implement the JVS protocol +commonly used in arcade cabinets.

+

JVS uses a single RS-485 bus running at 115200 bits per second, shared by all +devices. The standard JVS connector is a single USB-A port, with the data lines +used as the RS-485 differential pair and the VBUS pin as a sensing line (see +the JVS specification for details). JVS devices typically have a full size USB-B +port for connection to the host, plus optionally another USB-A port for daisy +chaining additional devices. The RS-485 bus needs to be terminated; some boards +will automatically insert a termination resistor when connected as the last node +in a daisy chain.

+

Packet format

+

A JVS packet can be up to 258 bytes long and is made up of the following fields:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ByteDescription
0Synchronization byte, must be 0xe0
1Destination address
2Length (number of payload bytes including checksum)
3-Payload
Checksum (sum of address, length and payload bytes modulo 256)
+

NOTE: when a JVS packet is sent over the RS-485 bus, any 0xd0 or 0xe0 +byte other than the synchronization byte must be escaped as 0xd0 0xcf or +0xd0 0xdf respectively, in order to allow downstream devices to reliably +determine the end of a packet. On the 573, the JVS MCU handles escaping outbound +packets and unescaping inbound packets automatically. The escaping process does +not update the length field to reflect the escaped length of the packet.

+

Refer to the JVS specification for details on the contents of standard and +vendor-specific payloads.

+

MCU communication protocol

+

The system's JVS interface is managed by a dedicated H8/3644 microcontroller, +interfaced through two 16-bit latches and handshaking lines (in a similar way to +the 8-bit ports on the security cartridge slot). The MCU's firmware is stored in +OTP ROM and consists of a simple loop that buffers the data written by the 573, +sends it, waits for a response to be received and lets the 573 read it.

+

In order to perform a JVS transaction the 573 must:

+
    +
  1. Reset the MCU through register 0x1f400000, clear JVSIRDY by writing to + 0x1f520000 then wait for the status and error codes in register + 0x1f400004 to be set to 0 and 3 respectively.
  2. +
  3. Write the packet two bytes at a time to 0x1f680000, waiting for JVSDRDY + to go low before each write. Words are little endian, so for instance the + first word of a packet with destination address 0x01 would be 0x01e0. If + the total length of the packet is odd, the last byte shall still be written + as a word (with the upper byte zeroed out).
  4. +
  5. Wait for the status code to become 1. At this point the MCU will send the + packet and wait for a response from a device on the bus.
  6. +
  7. Wait for the status code to become 0, signalling a valid response has been + received and can be read out. A timeout should be implemented here, as the + MCU will wait for a response indefinitely even if no device is present.
  8. +
  9. Read the packet, again two bytes at a time, from 0x1f40000a, waiting for + JVSIRDY to go high before each read and clearing it by writing to + 0x1f520000 after each read. The status code will be set to 2 after the + first word is read and back to 0 once no more data is available to read.
  10. +
+

The MCU does not allow for non-JVS packets to be sent as it validates the sync +byte, checksum and uses the length field to determine packet length. Responses +cannot be received without sending a packet first either. The MCU will also +insert a 200 us minimum delay between the last byte of a received packet and the +first byte of the next packet.

+

I/O boards

+

The System 573 was designed to be expanded with game-specific hardware using I/O +expansion boards mounted on top of the main board, and/or custom security +cartridges. I/O boards have access to the 16-bit system bus and are accessible +through the 0x1f640000-0x1f6400ff region.

+ +

Analog I/O board (GX700-PWB(F))

+

Used in early Bemani games such as DDR 1stMIX and 2ndMIX, as well as some +non-Bemani games. The name is misleading as the board does not deal with any +analog signals whatsoever; the name was given retroactively to distinguish it +from the digital I/O board. It provides up to 28 optoisolated open-drain outputs +typically used to control cabinet lights, split across 4 banks:

+
    +
  • Bank A (CN33): 8 outputs (A0-A7)
  • +
  • Bank B (CN34): 8 outputs (B0-B7)
  • +
  • Bank C (CN35): 8 outputs (C0-C7)
  • +
  • Bank D (CN36): 4 outputs (D0-D3)
  • +
+

Some games shipped with partially populated analog I/O boards, thus not all +banks may be available. See the game-specific information section for details on +how lights are wired up on each cabinet type.

+

0x1f640080: Bank A

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0WOutput A1 (0 = grounded)
1WOutput A3 (0 = grounded)
2WOutput A5 (0 = grounded)
3WOutput A7 (0 = grounded)
4WOutput A6 (0 = grounded)
5WOutput A4 (0 = grounded)
6WOutput A2 (0 = grounded)
7WOutput A0 (0 = grounded)
8-15Unused
+

0x1f640088: Bank B

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0WOutput B1 (0 = grounded)
1WOutput B3 (0 = grounded)
2WOutput B5 (0 = grounded)
3WOutput B7 (0 = grounded)
4WOutput B6 (0 = grounded)
5WOutput B4 (0 = grounded)
6WOutput B2 (0 = grounded)
7WOutput B0 (0 = grounded)
8-15Unused
+

0x1f640090: Bank C

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0WOutput C1 (0 = grounded)
1WOutput C3 (0 = grounded)
2WOutput C5 (0 = grounded)
3WOutput C7 (0 = grounded)
4WOutput C6 (0 = grounded)
5WOutput C4 (0 = grounded)
6WOutput C2 (0 = grounded)
7WOutput C0 (0 = grounded)
8-15Unused
+

0x1f640098: Bank D

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0WOutput D3 (0 = grounded)
1WOutput D2 (0 = grounded)
2WOutput D1 (0 = grounded)
3WOutput D0 (0 = grounded)
4-15Unused
+

Digital I/O board (GX894-PWB(B)A)

+

Used by later Bemani games, such as DDR from Solo onwards. This board features +the same 28 isolated open-drain outputs as the analog I/O board, plus a Xilinx +XCS40XL Spartan-XL FPGA and a Micronas MAS3507D audio decoder ASIC used to play +encrypted MP3 files. The FPGA has 24 MB of dedicated DRAM into which the files +are preloaded on startup, then decrypted on the fly and fed to the decoder. The +board also features 128 KB of SRAM used as a cache, RS-232 and ARCnet +transceivers for communication with other hardware and a DS2401 serial number +chip, used to prevent usage of the same security cartridge on more than one 573.

+

The vast majority of the registers provided by this board (including some but +not all light outputs) are handled by its FPGA, which requires a configuration +bitstream to be uploaded to it in order to work. Registers in the +0x1f6400f0-0x1f6400ff region are handled by a CPLD and are functional even if +no bitstream is loaded. There are several known versions of Konami's bitstream:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SHA-1 (LSB first)First used by
32d455a25eb26fe4e4b577cb0f0e3bebd0f82959Dance Dance Revolution Solo Bass Mix
a53b8906de95c34b6e3f053bd7488c888bc904b6Dance Dance Revolution 3rdMIX
450b12627b7eacd3ea3f8b0b7a16589a13010c41Mambo a Go-Go
53d0c1e3f6ae042d7d45ce889b79a12f1be5eabdMartial Beat e-Amusement
d1d0f123bbb9d5abfefbd556c366f9ded0779e41Martial Beat (leftover file 1, unused)
f354619fe1a80cabe0b774784181b3bfeff0a3e9Martial Beat (leftover file 2, unused)
+

The DDR and Mambo bitstreams all implement the same registers (listed below) and +seem to only differ in the MP3 decryption algorithm, while the unused Martial +Beat bitstreams seem to behave in a completely different way. Homebrew tools may +also load custom bitstreams, which can be developed using the Xilinx ISE +toolchain. See the pinouts section for a list of all devices connected to the +FPGA.

+

0x1f640080 (FPGA, DDR/Mambo bitstream): Magic number

+ + + + + + + + + + + + + + + +
BitsRWDescription
0-15RMagic number (0x1234)
+

This register is checked by Konami's digital I/O board driver to make sure the +bitstream was properly loaded into the FPGA.

+

0x1f640090 (FPGA, DDR/Mambo bitstream): Network board address

+ +

0x1f6400a0 (FPGA, DDR/Mambo bitstream): MP3 data start address high

+

0x1f6400a2 (FPGA, DDR/Mambo bitstream): MP3 data start address low

+

0x1f6400a4 (FPGA, DDR/Mambo bitstream): MP3 data end address high

+

0x1f6400a6 (FPGA, DDR/Mambo bitstream): MP3 data end address low

+

0x1f6400a8 (FPGA, DDR/Mambo bitstream): MP3 frame counter / Decryption key 1

+

0x1f6400aa (FPGA, DDR/Mambo bitstream): MP3 playback status

+

0x1f6400ac (FPGA, DDR/Mambo bitstream): MAS3507D I2C

+

0x1f6400ae (FPGA, DDR/Mambo bitstream): MP3 data feeder control

+

0x1f6400b0 (FPGA, DDR/Mambo bitstream): RAM write address high

+

0x1f6400b2 (FPGA, DDR/Mambo bitstream): RAM write address low

+

0x1f6400b4 (FPGA, DDR/Mambo bitstream): RAM data

+

0x1f6400b6 (FPGA, DDR/Mambo bitstream): RAM read address high

+

0x1f6400b8 (FPGA, DDR/Mambo bitstream): RAM read address low

+

0x1f6400c0 (FPGA, DDR/Mambo bitstream): Network data

+

0x1f6400c2 (FPGA, DDR/Mambo bitstream): Network output buffer size

+

0x1f6400c4 (FPGA, DDR/Mambo bitstream): Network input buffer size

+ +

0x1f6400ca (FPGA, DDR/Mambo bitstream): DAC sample counter high

+

0x1f6400cc (FPGA, DDR/Mambo bitstream): DAC sample counter low

+

0x1f6400ce (FPGA, DDR/Mambo bitstream): DAC sample counter delta

+

0x1f6400e0 (FPGA, DDR/Mambo bitstream): Bank A

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WOutput A4 (0 = grounded)
13WOutput A5 (0 = grounded)
14WOutput A6 (0 = grounded)
15WOutput A7 (0 = grounded)
+

0x1f6400e2 (FPGA, DDR/Mambo bitstream): Bank A

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WOutput A0 (0 = grounded)
13WOutput A1 (0 = grounded)
14WOutput A2 (0 = grounded)
15WOutput A3 (0 = grounded)
+

0x1f6400e4 (FPGA, DDR/Mambo bitstream): Bank B

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WOutput B4 (0 = grounded)
13WOutput B5 (0 = grounded)
14WOutput B6 (0 = grounded)
15WOutput B7 (0 = grounded)
+

0x1f6400e6 (FPGA, DDR/Mambo bitstream): Bank D

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WOutput D0 (0 = grounded)
13WOutput D1 (0 = grounded)
14WOutput D2 (0 = grounded)
15WOutput D3 (0 = grounded)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WUnknown (0 = reset?)
13WUnknown (0 = reset?)
14WUnknown (0 = reset?)
15WUnknown (0 = reset?)
+

Konami's code writes 0xf000, followed by 0x0000, a delay and 0xf000 again, +to this register after uploading the bitstream.

+

0x1f6400ea (FPGA, DDR/Mambo bitstream): Decryption key 2

+

0x1f6400ec (FPGA, DDR/Mambo bitstream): Decryption key 3

+

0x1f6400ee (FPGA, DDR/Mambo bitstream): 1-wire bus

+

When read:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12RDS2401 1-wire bus readout
13-15Unused? (see note)
+

When written:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WDrive DS2401 1-wire bus low (1 = pull low, 0 = release)
13-15Unused? (see note)
+

In addition to the DS2401 the board has an unpopulated footprint for a DS2433 +1-wire EEPROM, connected to a separate FPGA pin. Bit 13, 14 or 15 may actually +be mapped to the unused DS2433 bus.

+

0x1f6400f0 (CPLD): Unknown (unused?)

+

Konami's code does not write to this CPLD register.

+

0x1f6400f2 (CPLD): Unknown (unused?)

+

Konami's code does not write to this CPLD register.

+

0x1f6400f4 (CPLD): Unknown (reset?)

+ + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-14Unused
15WUnknown (0 = reset?)
+

Probably controls the MAS3507D or DAC's reset pin. Bit 15 is cleared before +uploading the bitstream and set again once the FPGA is initialized.

+

0x1f6400f6 (CPLD): FPGA status and control

+

When read:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12RPossibly /INIT from FPGA
13RPossibly DONE from FPGA
14RBoard identification? (always 1)
15RBoard identification? (always 0)
+

NOTE: all registers in the 0x1f6400f0-0x1f6400ff region seem to return the +same value as this register when read, possibly due to incomplete address +decoding in the CPLD. Konami's driver only ever reads from this register and +treats all other CPLD registers as write-only.

+

When written:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WPossibly /INIT to FPGA
13WPossibly DONE to FPGA
14WPossibly /PROGRAM to FPGA
15WUnused? (always 1)
+

This register is only written to 3 times when resetting the FPGA prior to +loading the bitstream. The values written are 0x8000 first, then 0xc000 and +finally 0xf000.

+

0x1f6400f8 (CPLD): FPGA bitstream upload

+ + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-14Unused
15WBit to send to the FPGA
+

Bits written to this register are sent to the FPGA's configuration interface +(DIN and CCLK pins, see the XCS40XL datasheet). There is no separate bit to +control the CCLK pin as clocking is handled automatically. The FPGA is wired +to boot in "slave serial" mode and wait for a bitstream to be loaded by the 573 +through this port.

+

All known games load the bitstream from an array embedded in the executable or a +file on the internal flash (usually named data/fpga/fpga_mp3.bin), then write +its contents to this port LSB first and monitor the FPGA status register. The +bitstream is always 330696 bits (41337 bytes) long as per the XCS40XL datasheet.

+

0x1f6400fa (CPLD): Bank C

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WOutput C0 (0 = grounded)
13WOutput C1 (0 = grounded)
14WOutput C2 (0 = grounded)
15WOutput C3 (0 = grounded)
+

0x1f6400fc (CPLD): Bank C

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WOutput C4 (0 = grounded)
13WOutput C5 (0 = grounded)
14WOutput C6 (0 = grounded)
15WOutput C7 (0 = grounded)
+

0x1f6400fe (CPLD): Bank B

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0-11Unused
12WOutput B0 (0 = grounded)
13WOutput B1 (0 = grounded)
14WOutput B2 (0 = grounded)
15WOutput B3 (0 = grounded)
+

Alternate analog I/O board (GX700-PWB(K))

+

Used by Kick & Kick. Has several optocouplers, plus a DS2401 serial number +chip and several unpopulated footprints.

+

This board is currently undocumented.

+

Fishing controller I/O board (GE765-PWB(B)A)

+

Used by the Fisherman's Bait series. Uses an NEC uPD4701 mouse/trackball chip to +track motion of the fishing reel's rotary encoders and contains PWM drivers for +the feedback motors. Along with the analog I/O board, it is the only known board +that does not have a DS2401.

+

This board is currently undocumented.

+

DDR Karaoke Mix I/O board (GX921-PWB(B))

+

Used by DDR Karaoke Mix 1 and 2. Similarly to the digital I/O board, this board +features several optoisolated light outputs, an ARCnet PHY and a DS2401 serial +number chip. It also has composite video inputs and outputs, a video encoder to +convert the 573's native RGB output to composite and additional circuitry to +superimpose it onto the video feed from an external karaoke machine. An onboard +PC16552 UART is provided to communicate with the machine (the security cartridge +also exposes SIO1).

+

This board is currently undocumented.

+

GunMania I/O board (PWB0000073070)

+

Used by GunMania and GunMania Zone Plus. Contains an RGB to S-video converter +which drives the cabinet's projector, several motor drivers, optoisolators, a +PC16552 UART and a DS2401 serial number chip. A DB25 connector on the side of +the board is used to interface to the resistive matrix used to detect bullet +shots.

+

This board is currently undocumented.

+

Hypothetical debugging board

+

There is no proof whatsoever of this board having ever existed, but the BIOS and +some games attempt to access the hardware on it. It seems to contain at least a +Fujitsu MB89371 UART and a 7-segment display, although these may have actually +been on two separate boards (or built into a prototype board used by Konami +during development).

+

The MB89371 does not have a publicly available datasheet.

+

0x1f640000: UART data

+

0x1f640002: UART control

+

0x1f640004: UART baud rate select

+

0x1f640006: UART mode

+

0x1f640010: 7-segment display

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BitsRWDescription
0WRight digit segment G (0 = on)
1WRight digit segment F (0 = on)
2WRight digit segment E (0 = on)
3WRight digit segment D (0 = on)
4WRight digit segment C (0 = on)
5WRight digit segment B (0 = on)
6WRight digit segment A (0 = on)
7Unused
8WLeft digit segment G (0 = on)
9WLeft digit segment F (0 = on)
10WLeft digit segment E (0 = on)
11WLeft digit segment D (0 = on)
12WLeft digit segment C (0 = on)
13WLeft digit segment B (0 = on)
14WLeft digit segment A (0 = on)
15Unused
+

The BIOS shell shows "00" on this display (but contains a function to show any +hexadecimal value). Kick & Kick shows an animated spinner, some other games +show error or status codes on it. This may have been meant to be a POST display +integrated into the 573 main board at some point.

+

Security cartridges

+

Most System 573 games use cartridges that plug into the slot on the right side +of the main board as an anti-piracy measure and/or to add game specific I/O +functionality (particularly for games that do not otherwise require any I/O +board). Cartridges typically contain a password protected EEPROM, used to store +game and installation information, and in some cases a DS2401 unique serial +number chip.

+ +

Electrical interface

+

All communication with the cartridge is performed through the following means:

+
    +
  • an 8-bit parallel input port (I0-I7), readable via register 0x1f400004;
  • +
  • a latched 8-bit parallel output port (D0-D7), controlled by register + 0x1f6a0000;
  • +
  • a single tristate I/O pin (SDA), which can be either configured as a + floating input or set to output the same logic level as D0 through register + 0x1f500000;
  • +
  • the CPU's SIO1 interface (TX, RX, /RTS, /CTS, /DTR, /DSR);
  • +
  • four bus handshaking lines (IRDY, DRDY, /IREQ, /DACK).
  • +
+

As all EEPROMs used in cartridges have an I2C interface rather than a parallel +one, SDA is used in combination with individual bits of the parallel I/O ports +to bitbang I2C. The SIO1 interface either goes unused or is translated to RS-232 +voltage levels and broken out to a connector on the cartridge.

+

See the pinouts section for more information on the security cartridge slot.

+

Handshaking lines

+

The cartridge slot carries two status lines unofficially known as IRDY and +DRDY plus two inputs named /IREQ and /DACK, probably meant for +synchronization with cartridges that would actually use D0-D7 and I0-I7 as a +parallel data bus rather than to bitbang serial protocols. No currently known +cartridge uses these pins.

+

DRDY is set whenever the 573 writes to the output port, even if no bits have +actually changed. The cartridge can monitor this signal to know when to read a +byte from the port and then pull /DACK low to reset it. To send a byte to the +573 the cartridge can pulse /IREQ, which will cause IRDY to go high until +the 573 accesses the input port. The 573 can read the status of IRDY (as well +as DRDY) through the Konami ASIC and wait for it to be set before reading the +next byte.

+

The cartridge I/O ports can basically be thought of as a single-byte FIFO, with +DRDY being the "TX buffer full" flag and IRDY the "RX buffer not empty" +flag. The handshaking lines are implemented using a handful of 74LS74 flip +flops.

+

NOTE: the JVS MCU also has its own handshaking lines, JVSIRDY and +JVSDRDY, which are actually used and work in pretty much the same way. See the +JVS interface section for more information on communicating with the MCU.

+

Note about RTS/CTS

+

The PS1 CPU's SIO1 UART has hardware flow control and will not transmit data +until CTS is asserted. In order to get around this most cartridges tie CTS to +RTS, allowing it to be controlled in software. Cartridges that use the serial +port (i.e. ones with a network port) have the pins tied together on the PCB, +while other cartridge types usually break them out to a shorted 2-pin jumper.

+

Some earlier games that do not use SIO1 for networking purposes redirect their +debug logging output to it (by calling the AddSIO() function provided by the +Sony SDK) if CTS and RTS are shorted on startup. On later 573 motherboard +revisions, the SIO1 pins are additionally broken out to a separate connector +(CN24) and made accessible even when a cartridge without a network port is +inserted.

+

Cartridge EEPROM types

+

Konami's security cartridge driver supports the following EEPROMs:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ManufacturerChip"Response to reset" IDCapacity
XicorX76F04119 55 aa 55 (LSB first)512 bytes
XicorX76F10019 00 aa 55 (LSB first)112 bytes
Konami/MicrochipZS01 (PIC16CE625)5a 53 00 01 (MSB first)112 bytes
+

NOTE: Konami seems to have never manufactured X76F100 cartridges, however +most games that expect an X76F041 can also use the X76F100 interchangeably. ZS01 +support was only added in later versions of the driver.

+

ZS01 protocol

+

The "ZS01" EEPROM is actually a PIC16 microcontroller that mostly replicates the +X76F100's functionality, allowing the 573 to store up to 112 bytes of data +protected by a 64-bit password. Unlike the X76F041 and X76F100, which use +plaintext commands, all communication with the ZS01 is obfuscated using a +rudimentary scrambling algorithm. A CRC16 is attached to each packet and used to +detect attempts to tamper with the obfuscation. Attempting to send too many +requests with an invalid CRC16 will cause the ZS01 to self-erase and reset the +password.

+

A ZS01 transaction can be broken down into the following steps:

+
    +
  1. +

    The 573 prepares a 12-byte packet to be sent to the ZS01, containing a + command, address and payload:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    BytesDescription
    0Command flags
    1Address bits 0-7
    2-9Payload (data for writes, response key for reads)
    10-11CRC16 of bytes 0-9, big endian
    +

    The first byte is a 3-bit bitfield encoding the command and access type:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    BitsDescription
    0Command (0 = write/erase, 1 = read)
    1Address bit 8 (unused, should be 0)
    2Access type (0 = unprivileged, 1 = privileged)
    3-7Unused? (should be 0)
    +

    The access type bit specifies whether the command is privileged. Privileged +commands require the ZS01's current password, while unprivileged commands do +not.

    +

    The address must be one of the following values:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AddressLengthPrivilegedDescription
    0x00-0x0332 bytesNoUnprivileged data area
    0x04-0x0e80 bytesYesPrivileged data area
    0xfc8 bytesNoInternal ZS01 serial number
    0xfd8 bytesNoExternal DS2401 serial number
    0xfd8 bytesYesErases data area when written (write-only)
    0xfe8 bytesYesConfiguration registers
    0xff8 bytesYesNew password (write-only)
    +

    Data is always read or written in aligned 8 byte blocks. Unprivileged areas +can be read using either a privileged or unprivileged read command, but +writing to them still requires a privileged write command.

    +
  2. +
  3. +

    If the command is a read command, a random 8-byte "response key" is + generated (typically as an MD5 hash of the current time from the RTC) and + written to the payload field; the ZS01 will later use it to encrypt the + returned data as a replay attack prevention measure. For write commands, the + payload field is populated with the 8 bytes to be written.

    +
  4. +
  5. +

    A CRC16 is calculated over the first 10 bytes of the packet and stored in + the last 2 bytes in big endian format. The CRC is computed as follows:

    +
    #define ZS01_CRC16_POLYNOMIAL 0x1021
    +
    +uint16_t zs01_crc16(const uint8_t *data, size_t length) {
    +    uint16_t crc = 0xffff;
    +
    +    for (; length; length--) {
    +        crc ^= *(data++) << 8;
    +
    +        for (int bit = 8; bit; bit--) {
    +            uint16_t temp = crc;
    +
    +            crc <<= 1;
    +            if (temp & (1 << 15))
    +                crc ^= ZS01_CRC16_POLYNOMIAL;
    +        }
    +    }
    +
    +    return (~crc) & 0xffff;
    +}
    +
    +
  6. +
  7. +

    If the command is privileged, the 573 scrambles the payload field with the + chip's currently set password, using the following algorithm:

    +
    // Note that this state is preserved across calls to zs01_scramble_payload()
    +// and must be updated when a response is received (see step 8).
    +uint8_t zs01_scrambler_state = 0;
    +
    +void zs01_scramble_payload(
    +    uint8_t *output, const uint8_t *input, size_t length,
    +    const uint8_t *password
    +) {
    +    for (; length; length--) {
    +        int value = *(input++) ^ zs01_scrambler_state;
    +        value     = (value + password[0]) & 0xff;
    +
    +        for (int i = 1; i < 8; i++) {
    +            int add   = password[i] & 0x1f;
    +            int shift = password[i] >> 5;
    +
    +            int shifted = value << shift;
    +            shifted    |= value >> (8 - shift);
    +            shifted    &= 0xff;
    +
    +            value = (shifted + add) & 0xff;
    +        }
    +
    +        zs01_scrambler_state = value;
    +        *(output++)          = value;
    +    }
    +}
    +
    +

    The CRC16 is not updated to reflect the new data. This step is skipped for +unprivileged read commands.

    +
  8. +
  9. +

    All 12 bytes of the packet are scrambled with a fixed "command key", using + the following algorithm:

    +
    static const uint8_t ZS01_COMMAND_ADD[]   = { 237, 8, 16, 11, 6, 4, 8, 30 };
    +static const uint8_t ZS01_COMMAND_SHIFT[] = {   0, 3,  2,  2, 6, 2, 2,  1 };
    +
    +void zs01_scramble_packet(
    +    uint8_t *output, const uint8_t *input, size_t length
    +) {
    +    // Unlike zs01_scramble_payload(), this state is *not* preserved across
    +    // calls.
    +    uint8_t state = 0xff;
    +
    +    output += length;
    +    input  += length;
    +
    +    for (; length; length--) {
    +        int value = *(--input) ^ state;
    +        value     = (value + ZS01_COMMAND_ADD[0]) & 0xff;
    +
    +        for (int i = 1; i < 8; i++) {
    +            int shifted = value << ZS01_COMMAND_SHIFT[i];
    +            shifted    |= value >> (8 - ZS01_COMMAND_SHIFT[i]);
    +            shifted    &= 0xff;
    +
    +            value = (shifted + ZS01_COMMAND_ADD[i]) & 0xff;
    +        }
    +
    +        state       = value;
    +        *(--output) = value;
    +    }
    +}
    +
    +
  10. +
  11. +

    The scrambled packet is sent to the ZS01, which will respond to the first 11 + bytes immediately with an I2C ACK and to the last byte with an ACK after a + short delay. The 573 then proceeds to read 12 bytes from the ZS01, issuing + an I2C ACK for each byte received up until the last one.

    +
  12. +
  13. +

    The 573 uses the response key generated in step 2 to unscramble the packet + returned by the ZS01. The unscrambling algorithm is the same one used in + step 5, applied in reverse:

    +
    void zs01_unscramble_packet(
    +    uint8_t *output, const uint8_t *input, size_t length,
    +    const uint8_t *response_key
    +) {
    +    uint8_t state = 0xff;
    +
    +    output += length;
    +    input  += length;
    +
    +    for (; length; length--) {
    +        int value      = *(--input);
    +        int last_state = state;
    +        state          = value;
    +
    +        for (int i = 1; i < 8; i++) {
    +            int add   = response_key[i] & 0x1f;
    +            int shift = response_key[i] >> 5;
    +
    +            int subtracted = (value - add) & 0xff;
    +
    +            value  = subtracted >> shift;
    +            value |= subtracted << (8 - shift);
    +            value &= 0xff;
    +        }
    +
    +        value       = (value - response_key[0]) & 0xff;
    +        *(--output) = value ^ last_state;
    +    }
    +}
    +
    +

    For write commands, the response key required to unscramble the packet is +the one sent as part of the last read command issued. For read commands, the +ZS01 may either use the key provided in the payload field or the one from +the last read command issued; Konami's code tries unscrambling responses +with both.

    +
  14. +
  15. +

    The unscrambled packet will contain the following fields:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    BytesDescription
    0Status code (0 = success, 1-5 = error)
    1New payload scrambler state
    2-9Payload (empty for writes, data for reads)
    10-11CRC16 of bytes 0-9, big endian
    +

    The 573 proceeds to compute the CRC16 of the first 10 bytes. If it does not +match the one in the packet, it will try unscrambling the packet with a +different response key (see step 7) before giving up. Otherwise, the global +zs01_scrambler_state variable from step 4 is set to the value of byte 1, +regardless of whether the status code is zero or not.

    +

    The exact meaning of non-zero status codes is currently unknown.

    +
  16. +
+

EEPROM-less cartridge variants

+

Hyper Bishi Bashi Champ 3-player cartridge (GX700-PWB(E))

+

This is the only known cartridge type that has no EEPROM (although the PCB does +have an unpopulated X76F041 footprint). It has no plastic case, as it's meant to +be enclosed in the same case as the 573 itself. It has open-drain outputs for +driving up to 12 lights, arranged as 3 banks of 4 outputs each (one bank for +each player's buttons), plus an RS-232 transceiver for SIO1. The following pins +are used:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
TXOTX to network port (via RS-232 transceiver)
RXIRX from network port (via RS-232 transceiver)
/RTSOShorted to /CTS to enable SIO1
/CTSIShorted to /RTS to enable SIO1
/DSRICartridge insertion detection (grounded)
D0OUpdates/latches bank 3 when pulsed
D1OUpdates/latches bank 2 when pulsed
D3OUpdates/latches bank 1 when pulsed
D4OData for light output 0 (green button)
D5OData for light output 1 (blue button)
D6OData for light output 2 (red button)
D7OData for light output 3 (start button)
?ODTR to network port (via RS-232 transceiver)
?IDSR from network port (via RS-232 transceiver)
+

This cartridge has three connectors:

+
    +
  • CN2 (5-pin): RS-232 port. Note that this port is not electrically isolated + and shares its ground with the 573, unlike all other cartridges with an RS-232 + connector.
  • +
  • CN3 (16-pin): breaks out the light outputs and the incoming 12V supply from + CN4.
  • +
  • CN4 (4-pin): 12V power input, connected through a short cable to CN17 on + the 573 main board.
  • +
+

X76F041 cartridge variants

+

All X76F041 cartridges use the following pins:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
/DSRICartridge insertion detection (grounded)
D0ODrives X76F041 I2C SDA when SDA is set as output
D1OX76F041 I2C SCL
D2OX76F041 chip select (/CS)
D3OX76F041 reset (RST)
SDAIOX76F041 I2C SDA readout
+

X76F041 cartridges equipped with a DS2401 additionally use the following pins:

+ + + + + + + + + + + + + + + + + + + + +
NameDirUsage
D4ODrives 1-wire bus low when pulled high
I6IDS2401 1-wire bus readout
+

Generic cartridge (GX700-PWB(D))

+

Rectangular cartridge used by the earliest 573 games and as a separate +installation key for some later games. Contains only the X76F041 EEPROM and no +DS2401, but the PCB has an unpopulated footprint for an unknown 64-pin TQFP +part.

+

Generic cartridge with DS2401 (GX894-PWB(D))

+

Rectangular cartridge similar to GX700-PWB(D) but equipped with a DS2401. The +PCB has two unpopulated SOIC footprints, one of which may possibly be for an +X76F100 or another I2C EEPROM.

+

Early serial port cartridge (GX896-PWB(A)A)

+

Seems to be an older variant of the more common GX883-PWB(D) cartridge, with +the same ports but no DS2401. As with the 3-player Bishi Bashi cartridge, it has +no case and is instead meant to sit inside the 573's own case.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
TXOTX to network port (via RS-232 transceiver)
RXIRX from network port (via RS-232 transceiver)
/RTSOShorted to /CTS to enable SIO1
/CTSIShorted to /RTS to enable SIO1
?OCTRL0 to control port
?OCTRL1 to control port
?OCTRL2 to control port
?ODTR to network port (via RS-232 transceiver)
?IDSR from network port (via RS-232 transceiver)
+

This cartridge has two connectors:

+
    +
  • CN2 (5-pin): electrically isolated RS-232 port. The transceiver is powered + by an isolated DC-DC module and all signals going from/to the 573 are + optoisolated.
  • +
  • CN3 (6-pin): three 5V logic level signals, used in some cabinets to control + lights or the speaker amplifier.
  • +
+

Serial port cartridge with DS2401 (GX883-PWB(D))

+

T-shaped cartridge with a DS2401, a "network" (RS-232) port and a "control" or +"amp box" port, commonly used by pre-ZS01 Bemani games. Uses the following pins:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
TXOTX to network port (via RS-232 transceiver)
RXIRX from network port (via RS-232 transceiver)
/RTSOShorted to /CTS to enable SIO1
/CTSIShorted to /RTS to enable SIO1
?OCTRL0 to control port
?OCTRL1 to control port
?OCTRL2 to control port
?ODTR to network port (via RS-232 transceiver)
?IDSR from network port (via RS-232 transceiver)
+

This cartridge has two connectors:

+
    +
  • Network (5-pin, unlabeled on PCB): electrically isolated RS-232 port. The + transceiver is powered by an isolated DC-DC module and all signals going + from/to the 573 are optoisolated.
  • +
  • Control/amp box (6-pin, unlabeled on PCB): three 5V logic level signals, used + in some cabinets to control lights or the speaker amplifier.
  • +
+

PunchMania cartridge (GX700-PWB(J))

+

T-shaped cartridge used only by PunchMania/Fighting Mania series. Contains an +X76F041, a DS2401 and an ADC0838 used to measure up to 8 analog inputs. The ADC +uses the following pins:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
D0OChip select to ADC (/CS), shared with X76F041 SDA
D1OData clock to ADC (CLK), shared with X76F041 SCL
D5OData input to ADC (DI)
I0IData output from ADC (DO)
I1ISAR status from ADC (SARS)
+

This cartridge has two connectors:

+
    +
  • Unknown (12-pin): analog input connector. As with the ADC built into the 573 + motherboard there seems to be no protection on the inputs, so only voltages in + 0-5V range are accepted.
  • +
  • CN4 (10-pin): unknown purpose. Seems to be always unpopulated.
  • +
+

Hyper Bishi Bashi Champ 2-player cartridge (PWB0000068819)

+

T-shaped cartridge with open-drain outputs for driving up to 8 lights, arranged +as 2 banks of 4 outputs each. Unlike the GX700-PWB(E) 3-player variant, it has +an X76F041 (but no DS2401), lacks the RS-232 port and does not seem to be +designed to be mounted inside the 573. The latches driving the light outputs use +the following pins:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
?OUpdates/latches bank 1 when pulsed
?OUpdates/latches bank 2 when pulsed
?OData for light output 0 (green button)
?OData for light output 1 (blue button)
?OData for light output 2 (red button)
?OData for light output 3 (start button)
+

This cartridge has two connectors:

+
    +
  • CN2 (16-pin): breaks out the light outputs and the incoming 12V supply from + CN3.
  • +
  • CN3 (4-pin): 12V power input, presumably connected to the power supply + externally (i.e. not through the main board).
  • +
+

Salary Man Champ cartridge (PWB0000088954)

+

T-shaped cartridge with open-drain outputs for driving up to 8 lights (although +only 6 outputs seem to be populated). Contains an X76F041, a DS2401 and two 4094 +shift registers, presumably chained. The shift registers use the following pins:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
D5OShift register clock
D6OShift register reset
D7OShift register data
+

This cartridge has two connectors:

+
    +
  • Unlabeled (16-pin): breaks out the light outputs and the incoming 12V supply.
  • +
  • Unlabeled (4-pin): 12V power input, presumably connected to the power supply + externally (i.e. not through the main board).
  • +
+

ZS01 cartridge variants

+

All ZS01 cartridges use the following pins:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
/DSRICartridge insertion detection (grounded)
D0ODrives ZS01 I2C SDA when SDA is set as output
D1OZS01 I2C SCL
D3OZS01 reset
SDAIOZS01 I2C SDA readout
+

All cartridges are fitted with a DS2401, however it is connected to a GPIO pin +on the ZS01 rather than being directly exposed to the 573. The ZS01 additionally +provides its own unique serial number, which seems to be unused by games.

+

Serial port cartridge (GE949-PWB(D)A)

+

ZS01 variant of the GX883-PWB(D) cartridge. Uses the following pins:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDirUsage
TXOTX to network port (via RS-232 transceiver)
RXIRX from network port (via RS-232 transceiver)
/RTSOShorted to /CTS to enable SIO1
/CTSIShorted to /RTS to enable SIO1
?OCTRL0 to control port
?OCTRL1 to control port
?OCTRL2 to control port
?ODTR to network port (via RS-232 transceiver)
?IDSR from network port (via RS-232 transceiver)
+

This cartridge has two connectors:

+
    +
  • Network (5-pin, unlabeled on PCB): electrically isolated RS-232 port. The + transceiver is powered by an isolated DC-DC module and all signals going + from/to the 573 are optoisolated.
  • +
  • Control/amp box (6-pin, unlabeled on PCB): three 5V logic level signals, used + in some cabinets to control lights or the speaker amplifier.
  • +
+

Stripped down serial port cartridge (GE949-PWB(D)B)

+

T-shaped cartridge that uses the same PCB as GE949-PWB(D)A but only has the +ZS01, DS2401 and supporting parts are populated. Used by games that do not need +the RS-232 interface.

+

Cartridge identifiers

+

Most games use the security cartride's EEPROM to store, among other data such as +the game code and region, a set of up to four 8-byte identifiers.

+

SID (silicon/serial ID?)

+

The serial number of the cartridge's DS2401, always present in cartridges that +have one. As per the 1-wire specification it has the following format:

+ + + + + + + + + + + + + + + + + + + + + +
BytesDescription
01-wire family code (0x01 for DS2401)
1-648-bit progressive serial number, little endian
7CRC8 of bytes 0-6
+

The CRC is computed as follows:

+
#define DS2401_CRC8_POLYNOMIAL 0x8c
+
+uint8_t ds2401_crc8(const uint8_t *data, size_t length) {
+    uint8_t crc = 0;
+
+    for (; length; length--) {
+        uint8_t value = *(data++);
+
+        for (int bit = 8; bit; bit--) {
+            uint8_t temp = crc ^ value;
+
+            value >>= 1;
+            crc   >>= 1;
+            if (temp & 1)
+                crc ^= DS2401_CRC8_POLYNOMIAL;
+        }
+    }
+
+    return crc & 0xff;
+}
+
+

Refer to the DS2401 datasheet and Maxim 1-wire documentation for more details.

+

TID (trace ID)

+

Seems to be a cartridge-type-agnostic serial number. On cartridges without a +DS2401 the trace ID is assigned by Konami at manufacture time (see the master +calendar section) and has the following format:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
BytesDescription
0Trace ID type (0x81)
1-216-bit "main" serial number, big endian
3-632-bit "sub" serial number, big endian
7Checksum (sum of bytes 0-6 xor'd with 0xff)
+

On cartridges with a DS2401 the trace ID is instead derived from the SID:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
BytesDescription
0Trace ID type (0x82)
1-2DS2401 serial number hash, big or little endian depending on game
3-6Reserved (must be 0)
7Checksum (sum of bytes 0-6 xor'd with 0xff)
+

The hash is calculated over bytes 1-6 of the SID (excluding the family code and +CRC8) using the following algorithm:

+
// Note that some games set this to 14 instead of 16.
+#define TRACE_ID_HASH_BIT_WIDTH 16
+
+uint16_t trace_id_hash(const uint8_t *data, size_t length) {
+    uint16_t hash = 0;
+
+    for (size_t i = 0; i < (length * 8); i += 8) {
+        uint8_t value = *(data++);
+
+        for (size_t j = i; j < (i + 8); j++, value >>= 1) {
+            if (value & 1)
+                hash ^= 1 << (j % TRACE_ID_HASH_BIT_WIDTH);
+        }
+    }
+
+    return hash;
+}
+
+

MID (medium ID?)

+

Seems to be some kind of cartridge type flag, possibly indicating whether the +cartridge shall be used during or after game installation, or if it was used +when performing a game upgrade and shall no longer be usable to run the game it +initially shipped with.

+ + + + + + + + + + + + + + + + + + + + + +
BytesDescription
0Cartridge type? (always 0x00, 0x01 or 0x02)
1-6Reserved (must be 0)
7Checksum (sum of bytes 0-6 xor'd with 0xff)
+

NOTE: 00 00 00 00 00 00 00 00 seems to be a valid MID value, despite +having an otherwise invalid checksum, and to have a different meaning from +00 00 00 00 00 00 00 ff.

+

XID (external ID?)

+

The serial number of the digital I/O board's DS2401, written to the cartridge +during installation by most games that use it in order to prevent reinstallation +on a different system. Has the same format as the SID. On a cartridge that has +not yet been paired to a 573 the XID is set to 00 00 00 00 00 00 00 00.

+

When finishing installation or attempting to use a cartridge with a mismatching +XID the game will display the digital I/O board's serial number as an 8-digit +value (XXXX-YYYY), generated as follows:

+
// Some games seem to only use the lower 32 bits of the DS2401's serial number,
+// while others use all 48 bits.
+size_t xid_to_string_32(char *output, const uint8_t *xid) {
+    uint32_t value = 0
+        | (xid[1] <<  0)
+        | (xid[2] <<  8)
+        | (xid[3] << 16)
+        | (xid[4] << 24);
+
+    int high = (value / 10000) % 10000;
+    int low  = value % 10000;
+
+    return sprintf(output, "%04d-%04d", high, low);
+}
+
+size_t xid_to_string_48(char *output, const uint8_t *xid) {
+    uint64_t value = 0
+        | (xid[1] <<  0)
+        | (xid[2] <<  8)
+        | (xid[3] << 16)
+        | (xid[4] << 24)
+        | (xid[5] << 32)
+        | (xid[6] << 40);
+
+    int high = (int) ((value / 10000) % 10000);
+    int low  = (int) (value % 10000);
+
+    return sprintf(output, "%04d-%04d", high, low);
+}
+
+

Cartridges for games that use the digital I/O board typically come with a blank +label onto which the 8-digit ID can be written by the operator, to help keep +track of which cartridge goes into which system after installation.

+

Note that games that use other I/O boards with a DS2401, such as Kick & Kick +and DDR Karaoke Mix, do not seem to write those boards' serial numbers to the +cartridge; they are stored in the internal flash memory instead.

+

External modules

+

Over the 573's lifetime Konami introduced several add-ons that extended its +functionality. Unlike the I/O boards, these were external to the 573 unit and +not always mandatory. Not much is currently known about any of these.

+

Relay board (GN845-PWB(A))

+

A relatively simple lamp driver board, controlled by the optoisolated outputs +from the analog or digital I/O board. Commonly mounted in a metal box alongside +audio amplifier boards in most cabinets.

+

DDR stage I/O board (GN845-PWB(B))

+

Sits between the 573 and the sensors in each stage's arrow panels in Dance +Dance Revolution cabinets. It is based on a Xilinx XC9536 CPLD and allows the +573 to check the status of a specific pressure sensor (each panel has 4 +sensors, one along each edge), in addition to ensuring DDR games can only be +played with an actual stage rather than just a joystick or buttons wired up to +the 573's JAMMA connector. Konami kept using the same board long after the 573 +was discontinued, with the last game to use it being DDR X/X2 (PC based).

+

Each stage's board communicates with the 573 over 6 wires, of which 4 are the +up/down/left/right signals going to the JAMMA connector and 2 are light outputs +from the I/O board being misused as data and clock lines (see above). The board +initially asserts the right and up signals and waits for the 573 to issue an +initialization command by bitbanging it over the light outputs. Received bits +are acknowledged by the board by echoing them on the right signal and toggling +the up signal.

+

Once initialization is done the board goes into passthrough mode, asserting the +up/down/left/right signals whenever any of the respective arrow panels' sensors +are pressed. The 573 can issue another command to retrieve the status of each +sensor separately, which is then sent by the board in serialized form over the +right and up signals. DDR games only use this command to display sensor status +in the operator menu, no commands are sent to the board during actual gameplay.

+

The initialization protocol is currently unknown. The protocol used after +initialization is partially known (see links) but needs to be verified and +documented properly.

+

PS1 controller and memory card adapter (GE885-PWB(A))

+

A ridiculously overengineered JVS board providing support for accessing PS1 +controllers and memory cards plugged into ports on the front of the cabinet. +Contains a Toshiba TMPR3904 CPU, a Xilinx XCS10XL Spartan-XL FPGA, 512 KB of RAM +and a 512 KB boot ROM; the ROM is only a small bootloader and the actual +firmware is downloaded from the 573 into RAM. There are also two connectors for +security dongles. Returns the following JVS identifier string:

+
KONAMI CO.,LTD.;White I/O;Ver1.0;White I/O PCB
+
+

Memory card support became common in later Bemani games, allowing players to +save their scores and play custom charts. GuitarFreaks is the only game known +to support external controllers through this board.

+

PunchMania 2 PCMCIA splitter (PWB0000085445)

+

Combines two 32 MB PCMCIA flash cards into the same address space, allowing them +to be accessed as if they were a single 64 MB card. Connects to the 573 through +a cable that plugs into a passive PCMCIA slot adapter. Only used by PunchMania +2.

+

e-Amusement network unit (PWB0000100991)

+

Used by some Bemani games, in particular later GuitarFreaks and DrumMania +releases. Provides networking functionality (DHCP and TCP/UDP sockets) as well +as a 10 or 20 GB IDE hard drive for storage of downloaded content. The module +contains a Toshiba TMPR3927 CPU, a Xilinx XC2S100 Spartan-2 FPGA, 16 MB of RAM, +a 512 KB boot ROM and a DP83815 PCI Ethernet MAC. As with the controller and +memory card adapter, the bulk of the firmware seems to be loaded from the 573. +Connects through PCMCIA slot 2, using the same cable and adapter as the +PunchMania PCMCIA splitter.

+

Multisession unit (GXA25-PWB(A))

+

A fairly large box containing a Toshiba TMPR3927 CPU, a Xilinx XC2S200 Spartan-2 +FPGA and four (!) hardware MP3 decoders. It comes with up to four daughterboards +installed, each of which hosts a stereo DAC and has RCA jacks for audio input +and output plus a mini-DIN connector for RS-232 communication with a cabinet. +The box also has its own ATAPI CD-ROM drive and power supply.

+

Its purpose is to enable "session mode" in later Bemani games, which allows for +the same song to be played on multiple games at the same time with the box +playing the backing tracks and routing audio between the machines. It connects +to each cabinet's 573 using RS-232, through the "network" port on the security +cartridge.

+

Master calendar

+

A JVS device used internally by Konami to initialize motherboards and security +cartridges during manufacturing. The exact hardware Konami used is unknown, but +the protocol can be inferred from game code. All games search the JVS bus on +startup and enter a "factory test" mode if any device with the following +identifier string is present:

+
KONAMI CO.,LTD.;Master Calendar;<any value>;<any value>
+
+

The game will then proceed to request the current date, time, game and region +information from the master calendar, initialize the RTC and program the +security cartridge. The master calendar also returns a unique trace ID (see the +cartridge data formats section) for each 573, used for identification purposes +on cartridges that lack a DS2401.

+

0x70: Get date and time

+

0x71: Get game region or initialization data

+

0x7c, 0x7f, 0x00: Get trace ID "main" serial number

+

0x7c, 0x80, 0x00: Get trace ID "sub" serial number

+

0x7d, 0x80, 0x10: Get next ID

+

0x7e: Set DS2401 identifiers

+

0x7f: Unknown

+

0xf0: Reset master calendar

+

BIOS

+

The System 573's BIOS is based on a slightly modified version of Sony's standard +PS1 kernel, plus a custom shell executable. The kernel identifies itself as +Konami OS by T.H. and seems to have been used across all Konami PS1-based +arcade boards. The kernels used by other manufacturers' arcade boards also +contain the same T.H. initials, possibly hinting at the fact there was a +single Sony employee in charge of providing customized kernels to all arcade +system manufacturers.

+

The only meaningful difference from the PS1 kernel is that most CD-ROM APIs, the +ISO9660 driver and the cdrom: device are missing, as the 573 lacks the PS1's +CD-ROM hardware. All other functionality, such as controller and memory card +drivers, is still present and no new functionality was added (drivers for +573-specific hardware are simply statically linked into the shell and game +executables instead).

+ +

Shell revisions

+

There seem to be either three or four different versions of the BIOS, all of +which share the same kernel but feature different shells:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ROM markingMAME ROM nameSHA-1Used by
700A01700a01.22ge1284add4aaddd5337bd7f4e27614460d52b5b48Most games
700A01700a01,gchgchmp.22g9aab8c637dd2be84d79007e52f108abe92bf29ddGachagachamp
700A01Unknown (undumped, see below)
700B01700b01.22ga2421d0a494892c0e71003c96995ce8f945064ddDancing Stage EuroMIX 2
+

700A01 is the earliest and most common version. The only difference between +the two known variants of it is that they were linked to slightly different Sony +SDK releases; Konami's own code is identical across the two. There reportedly is +a third variant that shipped on systems that came with the JVS MCU unpopulated +(presumably it would skip the check for it), however no evidence of its +existence has ever been found. The shell is stored in ROM in both variants at +0xbfc40000, in the form of a standard PS1 executable (including the header) +that gets loaded at 0x803c0000 by the kernel.

+

700B01 has a more complicated structure: it is split up into two separate +executables, one (at 0xbfc28000, loaded at 0x80010000) in charge of running +the self-test sequence and the other (at 0xbfc60000, loaded at 0x80380000) +handling CD-ROM or flash booting. The overall coding style suggests that it was +developed alongside the installers/launchers used by later Bemani games, but +dropped as the main feature it would have introduced over the 700A01 shell - +CF card support - was broken due to a PCB wiring mistake.

+

Boot sequence

+

All variants of the shell are far simpler than their PS1 counterparts, as they +lack any kind of UI (aside from a non-interactive status screen) and have no +copy protection or anti-piracy checks of any kind. Once loaded by the kernel, +they start by initializing the system bus and proceed to run a hardware +self-test. The outcome of all checks is displayed on screen, with the following +ones being performed:

+
    +
  • 22G: BIOS ROM integrity check. A checksum is calculated and compared to the + one stored at the end of the ROM;
  • +
  • 16H, 16G, 14H, 14G: main RAM read/write test (first row of chips on + the board, closest to the CPU);
  • +
  • 12H, 12G, 9H, 9G: main RAM read/write test (second row of chips on the + board, closest to the JAMMA connector);
  • +
  • 4L, 4P: VRAM read/write test. This causes the 573 to briefly display + random pixels as framebuffers are overwritten during the check;
  • +
  • 10Q: SPU RAM read/write test;
  • +
  • 18E: JVS MCU reset and status check;
  • +
  • CDR: ATAPI CD-ROM drive initialization and executable loading.
  • +
+

NOTE: 700A01 shells do not actually test 4P! The GPU starts up in 1 MB +VRAM mode by default and the shell does not enable the chip select for the +second bank, so the first VRAM chip is tested twice instead. This bug was fixed +in the 700B01 shell, which initializes the GPU correctly.

+

If any check fails the shell locks up, shows a blinking "HARDWARE ERROR... +RESET" prompt and stops clearing the watchdog after a few seconds, causing the +573 to reboot. Otherwise, the state of DIP switch 4 is checked and the shell +attempts to load an executable from four different sources in the following +order:

+
    +
  • PCMCIA flash card in slot 2 (if inserted and DIP switch 4 is on);
  • +
  • PCMCIA flash card in slot 1 (if inserted and DIP switch 4 is on);
  • +
  • Internal flash memory (if DIP switch 4 is on);
  • +
  • PSX.EXE in the root directory of the disc inserted in the CD-ROM drive. The + drive is only initialized after booting from flash or PCMCIA fails or if DIP + switch 4 is off, thus the shell will not error out if a drive is not connected + but a boot executable is present on the flash. Note that the drive must be set + up as an IDE primary/master device using the appropriate jumpers.
  • +
+

As with Sony's PS1 shell, the 573 shell's ISO9660 filesystem driver only +implements a minimal subset of the specification and may not properly support +non-8.3 file names. It also only allocates 2 KB for the disc's path table, +so the total number of directories on the disc must be kept to a minimum in +order to prevent the shell from crashing. Unlike the PS1, however, the 573 +ignores SYSTEM.CNF completely regardless of whether or not it is present on +the disc; the shell is hardcoded to always load PSX.EXE. Homebrew discs can +take advantage of this behavior to provide separate PS1 and 573 executables +instead of detecting the system type at runtime.

+

If DIP switch 4 is on, the shell expects to find a standard PS1 executable +(including the full 2048-byte header) at offset 0x24 on either the built-in +flash memory or one of the two PCMCIA flash cards, preceded by a CRC32 checksum +of it at offset 0x20. The CRC is stored in little endian format and is not +calculated on the whole executable, but rather only on bytes whose offsets are a +power of two (i.e. on bytes at 0x24 + 0, 0x24 + 1, 0x24 + 2, 0x24 + 4 +and so on). The check is implemented as follows:

+
#define EXE_CRC32_POLYNOMIAL 0xedb88320 // 0x04c11db7 bit-reversed
+
+uint32_t exe_crc32(const uint8_t *data, size_t length) {
+    size_t   offset = 0;
+    uint32_t crc    = 0xffffffff;
+
+    while (offset < length) {
+        crc ^= data[offset];
+
+        for (int bit = 8; bit; bit--) {
+            uint16_t temp = crc;
+
+            crc >>= 1;
+            if (temp & 1)
+                crc ^= EXE_CRC32_POLYNOMIAL;
+
+            if (offset)
+                offset <<= 1;
+            else
+                offset = 1;
+        }
+    }
+
+    return ~crc;
+}
+
+#define DIP_SWITCH_PTR    ((const uint32_t *) 0x1f400004)
+#define EXE_CRC32_PTR     ((const uint32_t *) 0x1f000020)
+#define EXE_HEADER_PTR    ((const uint8_t  *) 0x1f000024)
+// Offset of the "text section size" field within the executable header
+#define EXE_TEXT_SIZE_PTR ((const uint32_t *) 0x1f000040)
+
+bool is_exe_valid(void) {
+    if (*DIP_SWITCH_PTR & (1 << 3)) // 1 = DIP switch off
+        return false;
+    if (memcmp(EXE_HEADER_PTR, "PS-X EXE", 8))
+        return false;
+
+    size_t   length = 2048 + *EXE_TEXT_SIZE_PTR;
+    uint32_t crc    = exe_crc32(EXE_HEADER_PTR, length);
+
+    return (crc == *EXE_DATA_PTR);
+}
+
+

Installing a new game usually involves inserting the installation disc and +turning off DIP switch 4 in order to prevent the shell from booting the game +currently installed on the internal flash.

+

Command-line arguments

+

PS1 executables are generally launched with CPU registers $a0 and $a1 set to +zero, in order to make sure programs that interpret them as argc and argv +respectively will not crash by trying to parse invalid data. The 700A01 shell +follows this convention.

+

The 700B01 shell, however, does pass two arguments to the executable it loads. +$a0 is thus set to 2, while $a1 is set to point to an array containing +pointers to the following strings:

+
    +
  • boot.rom=700B01
  • +
  • boot.from=<device>, where <device> is one of the following:
  • +
  • flash.0 (internal flash memory)
  • +
  • flash.1 (PCMCIA flash card in slot 1)
  • +
  • flash.2 (PCMCIA flash card in slot 2)
  • +
  • ata.2 (CF card in slot 2)
  • +
  • cdrom
  • +
+

The launchers used by later Bemani games use these arguments if present to +determine where to load the main game executable from, and fall back to +autodetecting the game's installation location otherwise.

+

JVS MCU test sequence

+

The JVS MCU check is implemented in a different way between the two shell +revisions. While the 700A01 shell simply resets the MCU and validates the +status and error codes, the 700B01 self-test sequence performs 35 (!) +different checks, each validating the codes returned under different conditions. +The following tests are done:

+
    +
  1. Reset MCU, clear JVSIRDY, ensure that:
      +
    • status code = 0
    • +
    • error code = 3
    • +
    • JVSIRDY = 0
    • +
    • JVSDRDY = 0
    • +
    • incoming JVS data = 0x0000
    • +
    +
  2. +
  3. Reset MCU, write valid dummy packet header (0x00e0), ensure that:
      +
    • status code = 2
    • +
    • error code = 3
    • +
    +
  4. +
  5. Reset MCU, write invalid dummy packet header (0x001f), ensure that:
      +
    • status code = 2
    • +
    • error code = 2
    • +
    +
  6. +
  7. Reset MCU, write 16 dummy packets (0x1fe0, 0x0004, 1 << i, checksum), + for each packet ensure that:
      +
    • status code = 1
    • +
    • error code = 3
    • +
    +
  8. +
  9. Reset MCU, write 16 dummy packets (same as above) with an invalid checksum, + for each packet ensure that:
      +
    • status code = 1
    • +
    • error code = 1
    • +
    +
  10. +
+

It is currently unclear if any data is actually sent to the JVS bus during step +4, as the shell may reset the MCU it before it starts sending the packet.

+

DVD-ROM support

+

Even though neither of the shell versions was explicitly designed with DVD-ROM +support in mind, it is possible to run games from a DVD-ROM thanks to the fact +that the ATAPI commands used by the shell and games to read sectors from the +disc are medium-agnostic. Games that rely on CD-DA playback obviously cannot be +put on a DVD, however all other games (including ones that rely on the digital +I/O board for MP3 playback) will work as long as the disc is formatted as if it +were a typical 573 CD-ROM (ISO9660 with no extensions, no UDF, 8.3 file names +and a path table smaller than 2 KB).

+

NOTE: due to ATAPI incompatibility issues only a very limited number of +DVD-ROM drives will actually be recognized and work properly with the shells and +games. This is unrelated to the DVD format itself and is purely due to the fact +that, unlike CD-ROM drives, most DVD drives were manufactured after the ATAPI +specification got updated in a way that broke the 573's compatibility.

+

This accidental capability was greatly abused by bootleg Bemani "superdiscs" +that bundled multiple games on a single DVD-ROM and shipped with a modified +installation menu, allowing the user to pick which game to install. Each game on +a superdisc is patched to load its files from a subdirectory rather than from +the DVD's root.

+

Homebrew 573 software can be distributed as an ISO9660 image larger than 650 MB +meant to be burned to a DVD-R, if sacrificing PS1 compatibility and CD-DA +support is an option. In such case the image shall be distributed as an .iso +file with 2048-byte sectors, rather than the typical .bin and .cue file pair +used for PS1 games with 2352-byte Mode 2 sectors.

+

Scrapped CF card support

+

In addition to booting from "linear" memory mapped PCMCIA flash cards, the +700B01 shell features a driver for CF cards and a FAT filesystem parser that +allows it to mount a CF card inserted in PCMCIA slot 2 (via a passive +CF-to-PCMCIA adapter), search for a flash card image file and interpret its +contents as if it were an actual flash card, loading the executable directly +from it. Or at least, that would allow it to do so, had Konami not screwed up +the wiring of the PCMCIA slots.

+

CF cards can operate in three different interfacing modes: memory mapped, I/O +mapped and IDE compatibility mode. On the 573 only memory mapped mode is +accessible as the other modes require usage of I/O chip select pins that are not +connected. This mode, however, requires the host to issue 8-bit writes to the +card's 16-bit bus through the use of individual chip select lines for each byte +(/CE1 and /CE2). While the PS1's CPU does have separate lower (/WR0) and +upper (/WR1) byte write strobes that could have been easily adapted to the +appropriate signals, Konami decided to cut this specific corner and shorted +/CE1 and /CE2 on each PCMCIA slot together, making it impossible to issue a +single-byte write.

+

NOTE: later revisions of the 573 main board seem to have unpopulated jumpers +next to the PCMCIA slots that can be used to rewire the chip select signals. It +is currently unclear if these jumpers are actually sufficient to enable CF card +booting without any additional hardware or BIOS modifications.

+

BIOS mod boards

+

It is not uncommon to find 573s fitted with a bootleg BIOS "mod board" in place +of the stock 700A01 or 700B01 mask ROM. These boards used to be bundled +alongside bootleg game CD-ROMs and were apparently required in order to bypass +the "anti-piracy checks" in Konami's BIOS.

+

Of course, since neither version of the shell has any such checks, the claims +were completely misleading. The actual purpose of these boards was not to tamper +with the BIOS, but rather to piggyback on the system bus and provide a crude +authentication mechanism to the bootleg game, allowing it to verify that it was +indeed running on a 573 equipped with an appropriate mod board. In other words, +mod boards were actually the bootleggers' implementation of Konami's +security cartridge system, meant to prevent people from simply burning +copies of a bootleg CD-ROM and forcing them to buy bootleg kits from whoever +produced them instead. Oh the irony.

+

The added authentication circuitry will not create any issues with official nor +homebrew software, however most of these boards feature an additional party +trick: the shell executable is altered to load a differently named executable, +making bootleg discs unable to boot on a stock 573 and vice versa. The following +names have been found so far in modified BIOS ROMs:

+
    +
  • QSY.DXD
  • +
  • SSW.BXF
  • +
  • TSV.AXG
  • +
  • GSE.NXX
  • +
  • NSE.GXX
  • +
+

The following names have been found on unofficial game discs, but are not +confirmed to have ever been used in modified BIOS ROMs:

+
    +
  • OSE.FXX
  • +
  • QSU.DXH
  • +
  • QSX.DXE
  • +
  • QSZ.DXC
  • +
  • RSU.CXH
  • +
  • RSV.CXG
  • +
  • RSW.CXF
  • +
  • RSZ.CXC
  • +
  • SSX.BXE
  • +
  • SSY.BXD
  • +
  • TSW.AXF
  • +
  • TSX.AXE
  • +
  • TSY.AXD
  • +
  • TSZ.AXC
  • +
+

Homebrew software should thus place multiple copies of the boot executable on +the CD-ROM to ensure any BIOS, modded or not, can successfully load it. An +interesting side note is that, for any of these names, summing the ASCII codes +of each character will always yield the same result. Presumably bootleggers were +unable to find the code in charge of BIOS ROM checksum validation and found it +easier to just turn the string into random nonsense whose checksum collided with +the original one.

+

Game-specific information

+

Black case I/O connectors

+

Fisherman's Bait and a few other non-Bemani games use a 573 housed in a black +case with blue front and back panels. Unlike the gray metal cases used by other +games, this case model has no cutouts for removable front and back panels that +hold game-specific connectors and instead has a fixed set of ports exposed:

+
    +
  • Power: 2x4 Molex connector that can be used as a power input or output, + wired to CN17.
  • +
  • Option 1: DE9 connector providing four analog inputs, wired to CN3 on + the main board.
  • +
  • Option 2: DE9 connector providing six button (digital) inputs, of which + four are also exposed on the JAMMA connector. Wired to CN5 on the + motherboard.
  • +
  • Reel connector (back side): 3x3 Molex connector wired to the + GE765-PWB(B)A fishing controller I/O board. Probably missing on systems that + that did not come with Fisherman's Bait.
  • +
+

DDR I/O connectors

+

Dance Dance Revolution uses a 573 enclosed in a gray metal case, with either an +analog or digital I/O board installed. The front panel has a cutout covered by a +metal plate, which in turn holds the following connectors:

+
    +
  • 1P (10-pin white, only 7 pins used): connects to the left stage and + controls arrow lights, in addition to being used for bitbanged communication + with the stage PCB. Wired to light bank A on the I/O board.
  • +
  • 2P (10-pin orange, only 7 pins used): same as above for the right stage. + Wired to light bank B on the I/O board.
  • +
  • Unlabeled (10-pin red, only 7 pins used): connects to cabinet button and + marquee lights. Wired to light bank C.
  • +
  • Unlabeled (6-pin white, only 2 pins used): controls the inverter that drives + the neon rings around the speakers. Wired to light bank D.
  • +
+

The back panel has a similar cutout, covered by a plate with holes for the +digital I/O board's RCA networking jacks.

+

DDR light mapping

+

Dance Dance Revolution cabinets (standard 2-player ones, not Solo) have lights +wired up to the analog or digital I/O board as follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OutputConnected to
A0Player 1 up arrow
A1Player 1 down arrow
A2Player 1 left arrow
A3Player 1 right arrow
A4Data to player 1 stage I/O
A5Clock to player 1 stage I/O
A6-A7Unused
B0Player 2 up arrow
B1Player 2 down arrow
B2Player 2 left arrow
B3Player 2 right arrow
B4Data to player 2 stage I/O
B5Clock to player 2 stage I/O
B6-B7Unused
C0-C1Unused
C2Player 1 buttons
C3Player 2 buttons
C4Bottom right marquee light
C5Top right marquee light
C6Bottom left marquee light
C7Top left marquee light
D0Speaker neon
D1-D3Unused
+

Light outputs A4, A5, B4 and B5 do not actually control any lamps, but are used +to communicate with each stage's I/O board. See the external modules section +for more details.

+

DDR Solo input and light mapping

+

Dance Dance Revolution Solo cabinets, unlike 2-player cabinets, do not use a +stage I/O board to multiplex the sensors as each arrow panel only has 2 sensors +(rather than 4). Each sensor is instead wired directly to the JAMMA connector, +making use of most of the available inputs.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
JAMMA inputConnected to
Player 1 leftLeft sensor A
Player 1 rightRight sensor A
Player 1 upUp sensor A
Player 1 downDown sensor A
Player 1 button 1Up-left sensor B
Player 1 button 2Left sensor B
Player 1 button 3Down sensor B
Player 1 button 4Unused
Player 1 button 5Left button
Player 1 startStart button
Player 2 leftUp-left sensor A
Player 2 rightUp-right sensor A
Player 2 upUnused
Player 2 downUnused
Player 2 button 1Up sensor B
Player 2 button 2Right sensor B
Player 2 button 3Up-right sensor B
Player 2 button 4Unused
Player 2 button 5Right button
Player 2 startUnused (shorted?)
+

The light mapping is currently unknown. Solo cabinets have less lights compared +to their 2-player counterparts (e.g. arrow panel lamps are missing).

+

DrumMania light mapping

+

First-generation DrumMania cabinets have lights wired up to the I/O board as +follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OutputConnected to
A0-A7Unused
B0-B7Unused
C0Hi-hat
C1Snare
C2High tom
C3Low tom
C4Cymbal
C5Unused
C6Start button
C7Select button
D0Spotlight
D1Top neon
D2Unused
D3Bottom neon
+

The wiring was changed in later cabinets, which use the following mapping +instead:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OutputConnected to
A0Hi-hat
A1Snare
A2High tom
A3Low tom
A4-A7Unused
B0Spotlight
B1Bottom neon
B2Top neon
B3Unused
B4Cymbal
B5Unused
B6Start button
B7Select button
C0-C7Unused
D0-D3Unused
+

Notes

+

Homebrew guidelines

+

It is relatively easy to develop homebrew games that can run on both a System +573 and a regular PlayStation 1, or to port existing PS1 homebrew to the 573. +Nevertheless, there are some significant differences between the two systems +and a game meant to run on both shall avoid using any feature that is only +available on one. "Hybrid" PS1/573 games shall adhere to the following +guidelines:

+
    +
  • Do not use the extra RAM. With the exception of development kits and + modified units, consoles always have 2 MB of main RAM and 1 MB of VRAM. The + additional RAM on the 573 might still be useful for 573-specific purposes + such as FAT filesystem handling if an IDE hard drive is used.
  • +
  • Do not use XA-ADPCM. XA is not supported by any ATAPI drive. CD-DA is + supported by both the PS1 CD drive and ATAPI drives, however it will not work + out-of-the-box on a 573 fitted with a digital I/O board as the 4-pin CD audio + cable will not be plugged into the drive. Homebrew games that use CD-DA + should display a splash screen showing how to unplug the cable from the I/O + board and plug it into the drive (which is a quick reversible modification). + SPU audio streaming can replace XA and will work on both platforms.
  • +
  • Have separate executables for PS1 and 573. Since the PS1 BIOS parses + SYSTEM.CNF while the 573 BIOS ignores it, a disc can have two different + executables, one named PSX.EXE (which will be launched on a 573) and the + other (which will run on a PS1) referenced by SYSTEM.CNF. This makes it + easier to have two separate builds of the game rather than having to detect + system type at runtime. Additional copies of PSX.EXE with the file names + commonly used by BIOS mod boards (QSY.DXD, TSV.AXG and so on) shall also + be present.
  • +
  • Do not rely on the RTC. Most 573 boards have a dead RTC battery by now. + As the battery is sealed inside the RTC it is basically impossible to replace + without replacing the entire chip, which is something not all 573 owners can + do. RTC RAM is additionally used by some games to store security-related data + and shall not be used for saving.
  • +
  • Implement an operator/settings menu. Among other things, the menu should + allow the user to adjust the SPU's master volume, enable or disable the 573's + built-in amplifier (which has no physical volume controls), test cabinet + lights and eject the CD (as some cases hide the drive's eject button behind a + small hole or make it difficult to access otherwise).
  • +
+

Missing support for PAL mode

+

The 573 only supports 60 Hz mode (i.e. "NTSC", even though the video DAC has no +composite or S-video output so no color modulation is involved). Attempting to +switch the GPU into 50 Hz PAL mode using the GP1(0x08) command will result in +a crash, as only the NTSC clock input pin is wired up.

+

Support for 50 Hz can be added back by shorting pins 192 and 196 on the GPU +(which will give "PAL-on-NTSC" timings) or by connecting pin 192 to an external +oscillator tuned to generate a PAL clock. See the timings section of the GPU +page for more details.

+

Flash chips and PCMCIA cards

+

The PCMCIA flash cards required by most 573 games are "linear" (memory mapped) +cards consisting of one or more parallel flash memory chips wired directly to +the bus, rather than CF or ATA-compatible cards. As neither linear cards nor +parallel flash command sets are fully standardized, working with these cards may +be difficult without some prior knowledge.

+

There are two main variants of such cards:

+
    +
  • 8-bit: these contain one or more pairs of flash chips with an 8-bit data + bus each. Each pair has one chip wired to the lower byte of the data bus and + the other wired to the upper byte. Commands must thus be issued to both chips + at once by repeating the command byte (e.g. writing 0x9090 to issue the + 0x90 JEDEC ID command). Issuing 8-bit writes to a single chip is not + supported on the 573 due to the way chip select lines are wired up; see the + BIOS CF card support section for more details.
  • +
  • 16-bit: these contain flash chips with a native 16-bit bus. The chips are + simply mapped next to each other within the card's address space.
  • +
+

Konami's flash driver only supports 8-bit cards that use one of the following +chips:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ManufacturerChipCapacityManuf. IDDevice ID
FujitsuMBM29F016A2 MB0x040xad
FujitsuMBM29F017A2 MB0x040x3d
FujitsuMBM29F040A512 KB0x040xa4
Intel28F016S52 MB0x890xaa
SharpLH28F016S2 MB0x890xaa
+

Most games, including the launchers used by later Bemani games, will check the +JEDEC IDs of the cards' chips on startup and reject any unsupported chip, +even if valid game data is otherwise present on the card. This makes it +impossible to manually install a game onto an unsupported card (e.g. through +homebrew tools) without also patching the launcher in order to skip the check.

+

The 573 main board seems to always be fitted with either MBM29F016A or LH28F016S +chips. The internal flash memory is accessed using the same driver as the flash +cards and has the same caveats (having to issue commands to two chips at once +and so on).

+

Known working replacement PCMCIA cards

+

This is an incomplete list of PCMCIA flash cards that are known to work, or not +to work, with Konami's flash driver. Due to the JEDEC ID checks, only cards that +contain flash chips listed in the previous section will work.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ManufacturerModelFlash chipsCapacityBus typeManuf. IDDevice IDWorkingNotes
CentennialPM24265, FL32M-20-*-6716x 28F016S532 MB8-bit0x89890xaaaaYes
CentennialPM24276, FL32M-20-*-J5-034x 28F640J532 MB16-bit0x00890x0015No
CentennialPM24282, FL32M-20-*-S5-0316x AM29F01632 MB8-bit0x01010xadadNoSame command set as Fujitsu cards, may work with minimal game patching
Fujitsu"32MB Flash Card" (no model number)16x MBM29F016A32 MB8-bit0x04040xadadYesStock card (Konami "FLASH CARD" sticker covers Fujitsu logo)
Fujitsu"32MB Flash Card" (no model number)16x MBM29F017A32 MB8-bit0x04040x3d3dYesStock card (Konami "FLASH CARD" sticker covers Fujitsu logo)
SharpID245P0116x LH28F016S32 MB8-bit0x89890xaaaaYesStock card (Konami "FLASH CARD" sticker covers Sharp logo)
+

Note that all Centennial cards have identical labels and can only be told apart +from the model number printed on the bottom side.

+

Known working replacement drives

+

This is an incomplete list of drives that are known to work, or to be +incompatible, with the ATAPI driver Konami used in the BIOS shell and games. The +driver was likely written using an old version of the ATAPI specification as a +reference; CD-ROM drives manufactured in the late 1990s and very early 2000s +have a higher chance of being compatible than drives manufactured later, +possibly due to changes introduced in later revisions of the ATAPI specification +that broke the assumptions Konami's driver makes.

+

CD-DA playback is particularly problematic as Konami's code seems to be unable +to handle the subtle implementation differences across different drives. To add +insult to injury, some of the few drives that do work have bugs in their +subchannel handling that result in incorrect playback status data being reported +to the 573, completely breaking pre-digital-I/O Bemani titles that rely heavily +on audio timing.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ManufacturerModelTypeBIOSCD-DANotes
ASUSTeKDVD-E616P3DVDYesUnknown
CompaqCRN-8241BCDYesYesLaptop drive, has CD-DA sync issues
CreativeCD4832ECDYesNo
HitachiCDR-7930CDYesNo
LGGCE-8160BCDYesNo
LGGCR-8523BCDYesUnknown
LGGDR-8163BDVDYesYes
LGGDR-8164BDVDYesYes
LGGH22LP20DVDYesUnknown
LGGH22NP20DVDYesUnknown
LGGSA-4165BDVDNo
Lite-OnLH-18A1HDVDYesYes
Lite-OnLTD-163DVDYesUnknown
Lite-OnLTD-165HDVDYesUnknown
Lite-OnLTR-40125SCDYesUnknown
Lite-OnSHW-160P6SDVDYesUnknown
Lite-OnXJ-HD166SDVDYesUnknown
MatsushitaCR-583CDYesYesStock drive
MatsushitaCR-587CDYesYesStock drive, can't read CD-R
MatsushitaCR-589BCDYesYesStock drive
MatsushitaSR8589BDVDYesUnknown
MitsumiCRMC-FX4830TCDYesUnknown
NECCDR-1900ACDYesUnknown
NECND-2510ADVDNo
PanasonicCR-594CCDYesUnknown
PanasonicUJDA770CD?YesUnknownLaptop drive
SonyCRX217ECDYesUnknown
SonyDRU-510ADVDYesUnknown
SonyDRU-810ADVDYesUnknown
TDKAI-CDRW241040BCDYesUnknown
TDKAI-481648BCDYesUnknown
TEACCD-W552ECDYesUnknown
ToshibaTS-H292CCDYesUnknown
ToshibaXM-5702BCDYesUnknown
ToshibaXM-6102BCDYesNoHas issues with homebrew
ToshibaXM-7002BCDYesUnknownStock drive, laptop drive
+

NOTE: Konami shipped some units with a Toshiba XM-7002B laptop drive and a +passive adapter board (GX874-PWB(B)) to break out the drive's signals to a +regular 40-pin IDE connector. Laptop drives seem to have been first used by +Konami in the GXA25-PWB(A) multisession unit.

+

Bemani launcher error and status codes

+

The installers and launchers used by Bemani titles that require the digital I/O +board have an extensive error and status reporting system. Launcher messages are +easily recognizable as they are always displayed in a blue window and have a +3-digit status code, however Japanese versions of the games will show them in +Japanese with no way to switch language (short of patching the launcher; all +launcher variants contain both English and Japanese strings).

+

Below is a list of all messages in both English and Japanese, along with the +respective status codes and indices in the launcher's internal message array.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IndexTypeStatus codesDescription (English)Description (Japanese)
0Error100
Boot is not available from this device.
DEVICE=%s1
このデバイスからのブートはできません.
DEVICE=%s1
1Error101
Digital Sound PCB intialization failed.
デジタルサウンド基板の初期化に失敗しました.
2Error102
Digital Sound PCB ROM error.
デジタルサウンド基板ROMエラー.
4Error104
CD-ROM initialization failed.
CD-ROMドライブの初期化に失敗しました.
7Error107
File system mounting failed.
Please check that correct CD-ROM is in use.
ファイルシステムのマウントに失敗しました.
CD-ROMが間違っていないか確認してください.
9Error109
File system mounting failed.
Please check that correct CD-ROM is in use.
ファイルシステムのマウントに失敗しました.
CD-ROMが間違っていないか確認してください.
10Error110
File system mounting failed.
Please check that correct CD-ROM is in use.
ファイルシステムのマウントに失敗しました.
CD-ROMが間違っていないか確認してください.
11Error111
File system mounting failed.
Please check that correct CD-ROM is in use.
ファイルシステムのマウントに失敗しました.
CD-ROMが間違っていないか確認してください.
12Error112
File system mounting failed.
Please check that correct CD-ROM is in use.
ファイルシステムのマウントに失敗しました.
CD-ROMが間違っていないか確認してください.
13Error113
Disc device initialization failed.
ディスクデバイスの初期化に失敗しました.
14Error114
You are using an incorrect CD-ROM.
Replace CD-ROM to %s1 and
turn on the main power.
CD-ROMが違います.
CD-ROMを%s1に交換し,電源を
入れ直してください.
15Error115
Disc device initialization failed.
ディスクデバイスの初期化に失敗しました.
16Error116
Disc device initialization failed.
ディスクデバイスの初期化に失敗しました.
17Error117
Config file error.
FILE=%s1
ERROR=%d2, LINE=%d3, COLUMN=%d4
コンフィグファイルエラー.
FILE=%s1
ERROR=%d2, LINE=%d3, COLUMN=%d4
19Error119
You are using an incorrect CD-ROM.
Replace CD-ROM to %s1 and
turn on the main power.
CD-ROMが違います.
CD-ROMを%s1に交換し,電源を
入れ直してください.
20Error120
Cassette is not installed.
Turn off the main power and install the
correct cassette then turn the power on.
カセットがセットされていません.
電源を切り,正しいカセットをセットして
再度電源を入れてください.
21Error121
Cassette error. (%d1)
Cassette does not match this game.
Check if the cassette is for this
game (%s2)
Refer to manual for more information.
カセットエラー (%d1)
ゲームとカセットが対応していません.
カセットがこのゲーム(%s2)用のものか
確認してください.
詳しくは取り扱い説明書を参照してください.
25Error125
Boot is not available from this device.
DEVICE=%s1
このデバイスからゲームのブートはできません.
DEVICE=%s1
26Error126
Cassette error (%d1)
カセットエラー (%d1)
27Error127
Master Calendar network error.
マスターカレンダー通信エラー.
28Error128
Master Calendar network error.
マスターカレンダー通信エラー.
29Error129
Master Calendar network error.
マスターカレンダー通信エラー.
30Error130
Installation boot device error.
Installation cassette is inserted.
Turn off the power. Before turning the
power on: 1. Change the cassette to the
Operating Cassette to enter the game or
2. Set DIP-SW4 to "OFF" to install.
インストールブートデバイスエラー.
インストールカセットがセットされています.
電源を切り,ゲームを行うには運用カセットに
交換, インストールするにはDIP-SW4をOFFに
し,再度電源を入れてください.
31Error131
Installation Cassette does not correspond
to the machine.
Please use Installation Cassette marked
%s1 for installation.
インストールカセットと本体との対応がとれて
いません. 認証番号%s1が記入された
インストールカセットを用いてインストール
してください.
32Error132
Cassette error (%d1)
カセットエラー (%d1)
35Error135
This cassette is used to convert another
game. This can not be used as an operating
cassette.
このカセットはいちど次機種への
コンバージョンに使用されたものです.
運用カセットとして使用することはできません.
36Error136
Cassette error (%d1)
カセットエラー (%d1)
38Error138
File not found.
FILE=%s1
ファイルが見つかりません.
FILE=%s1
39Error139
File reading error.
FILE=%s1
ファイルリードエラー.
FILE=%s1
40Error140
File not found.
FILE=%s1
ファイルが見つかりません.
FILE=%s1
41Error141
File reading error.
FILE=%s1
ファイルリードエラー.
FILE=%s1
42Error142
File reading error.
FILE=%s1
ファイルリードエラー.
FILE=%s1
43Error143
File reading error.
FILE=%s1
ファイルリードエラー.
FILE=%s1
44Error144
File data error.
FILE=%s1
ファイルデータエラー.
FILE=%s1
45Error145
File data error.
FILE=%s1
ファイルデータエラー.
FILE=%s1
46Error146
Turn off the power and check if the Flash
Card is inserted properly.
Please turn the power on after checking.
DEVICE=%s1
電源を切り, フラッシュカードが正しくセット
されているか確認してください. 準備が整って
から再び電源を入れてください.
DEVICE=%s1
47Error147
Checksum error.  If you have the latest
CD-ROM, please replace. Turn off the
power and insert installation cassette.
Set DIP-SW4 to "OFF", then turn on the
power and reinstall CD-ROM.
チェックサムエラー. 最新のCD-ROMがあれば,
それに交換してください. 電源を切り,インス
トールカセットに交換,DIP-SW4をOFFにして
電源を入れ,再インストールしてください.
48Error148
Area specification error.
Only area specification below is available.
%s1
Check the DIP-SW of Master Calendar.
仕向地指定エラー.
本タイトルは次の仕向地のみ指定できます.
%s1
マスターカレンダーのDIP-SWを確認して
ください.
49Error149
Cassette initialization error.
The cassette is already initialized as
Operating Cassette (%s1)
Reinitialization can not be completed.
カセット初期化エラー.
カセットはすでに運用カセット(%s1)
として初期化されています.
再初期化はできません.
50Error150
Cassette initialization error.
The cassette is already initialized as
Installation Cassette (%s1)
Reinitialization can not be completed.
カセット初期化エラー.
カセットはすでにインストールカセット
(%s1)として初期化されています.
再初期化はできません.
51Error151
File not found.
FILE=%s1
ファイルが見つかりません.
FILE=%s1
52Error152
Turn off the power and check if the Flash
Card is inserted properly.
Please turn the power on after checking.
DEVICE=%s1
電源を切り, フラッシュカードが正しくセット
されているか確認してください. 準備が整って
から再び電源を入れてください.
DEVICE=%s1
53Error153
Installation failed. (%d1)
インストールに失敗しました (%d1)
54Error154
Assertion failed.
FILE=%s1
LINE=%d2
アサーションフェイル.
FILE=%s1
LINE=%d2
55Error155
Argument buffer overflow.
引数バッファオーバーフロー.
56Error156
File not found.
FILE=%s1
ファイルが見つかりません.
FILE=%s1
57Error157
File data error.
FILE=%s1
ファイルデータエラー.
FILE=%s1
58Error158
File reading error.
FILE=%s1
ファイルリードエラー.
FILE=%s1
59Error159
Security Chip error. (%d1)
This Security Chip was initialized for
another title.
セキュリティチップエラー.(%d1)
このセキュリティチップは他のタイトル用に
初期化されています.
60Error160
CD-ROM drive error
CD-ROMドライブエラー.
61Error161
RTC error
RTCエラー.
62Error162
Specification selection error
Only specification below can be
selected for this title.
%s1
Check the DIP-SW of machine.
商品仕様指定エラー.
本タイトルは次の商品仕様のみ指定できます.
%s1
本体のDIP-SWを確認してください.
64Error164
Operating Cassette is not corresponding
with the machine. Turn off the power and
replace it with Operating Cassette
No.%s1 then reboot.
運用カセットと本体との対応がとれていません.
電源を切り,認証番号%s1が記入された
運用カセットに交換して再起動してください.
66Error166
Incorrect cassette installed.
不当なカセットです.
67Error167
Security Chip initialization failed. (%d1)
セキュリティチップ初期化エラー. (%d1)
69Error169
Cannot use this security cassette
as Installation Cassette.
このセキュリティカセットはインストール
カセットとして使用することはできません.
70Error170
Cannot use this security cassette
as Installation Cassette.
このセキュリティカセットはインストール
カセットとして使用することはできません.
71Error171
This version cannot initialize a cassette.
Please replace CD-ROM to %s1
for initialize, and turn off the power.
Set DIP-SW4 to "OFF", then turn on
the power.
このバージョンはカセットを初期化できません.
初期化するにはCD-ROMを%s1に
交換して電源を切り,DIP-SW4をOFFにして
再起動してください.
72Error172
You are using an incorrect CD-ROM.
Replace CD-ROM to %s1 and
turn on the main power.
CD-ROMが違います.
CD-ROMを%s1に交換し,電源を
入れ直してください.
73Error173
Cannot use this security cassette.
このセキュリティカセットは使用できません.
74Error174
Cannot use this security cassette.
このセキュリティカセットは使用できません.
75Error175
Cassette is not corresponding with the
machine. Turn off the power and
replace it with Cassette No.%s1
then reboot.
カセットと本体との対応がとれていません.
電源を切り,認証番号%s1が記入された
カセットに交換して再起動してください.
76Error176
Cassette is not corresponding with the
machine. Turn off the power and
replace it with Cassette No.%s1
then reboot.
カセットと本体との対応がとれていません.
電源を切り,認証番号%s1が記入された
カセットに交換して再起動してください.
77Error177
Checksum error.
If you have the latest CD-ROM, please
replace. Turn off the power and set
DIP-SW4 to "OFF", then turn on
the power and reinstall CD-ROM.
チェックサムエラー.
最新のCD-ROMがあればそれに交換してください.
電源を切ってDIP-SW4をOFFにしたあと,
電源を入れて再インストールしてください.
78Error178
This cassette is used to convert another
game. This can not be used to this game.
このカセットは次機種へのコンバージョンに
使用されたものです.
この機種で再び使用することはできません.
79Error179
Boot is not available from this device.
DEVICE=%s1
このデバイスからゲームのブートはできません.
DEVICE=%s1
80Error180
You are using an incorrect CD-ROM.
Replace CD-ROM to %s1 and
turn on the main power.
CD-ROMが違います.
CD-ROMを%s1に交換し,電源を
入れ直してください.
81Error181
File system mounting failed.
Please check that correct CD-ROM is in use.
ファイルシステムのマウントに失敗しました.
CD-ROMが間違っていないか確認してください.
82Error182
File system mounting failed.
Please check that correct CD-ROM is in use.
ファイルシステムのマウントに失敗しました.
CD-ROMが間違っていないか確認してください.
83Error183
Installation boot device error.
Please turn off the power for installation,
and set DIP-SW4 to "OFF", then turn on
the power.
インストールブートデバイスエラー.
インストールするには電源を切り,DIP-SW4を
OFFにして再起動してください.
84Error184
CD-ROM drive error
CD-ROMドライブエラー.
85Error185
CD-ROM drive version update failed. (%d1)
Please call a dealer near you.
CD-ROMドライブのバージョンアップに失敗
しました. (%d1)
最寄りのサービスセンターにお問い合わせ
下さい.
86Error186
Cassette error (%d1)
カセットエラー (%d1)
87Error187
You are using the cassette of another
cabinet. Please use the correct cassette.
Please see details in operator's manual.
異なる本体向けのカセットを使用しています.
正しい本体との組み合わせで使用してください.
詳しくは取り扱い説明書を参照してください.
88Error188
You are using the cassette of another
cabinet. Please use the correct cassette.
Please see details in operator's manual.
異なる本体向けのカセットを使用しています.
正しい本体との組み合わせで使用してください.
詳しくは取り扱い説明書を参照してください.
89Error189
You are using unknown cabinet.
Check all connectors.
Please see details in operator's manual.
不明な本体を使用しています.
各コネクタが外れていないか確認してください.
詳しくは取り扱い説明書を参照してください.
90Error190
You are using unknown cabinet.
Check all connectors.
Please see details in operator's manual.
不明な本体を使用しています.
各コネクタが外れていないか確認してください.
詳しくは取り扱い説明書を参照してください.
91Error191
Non-applicable game installed.
To install this game,
%s1
shall be installed first.
異なるゲームがインストールされています.
このゲームをインストールするにはあらかじめ
%s1
がインストールされている必要があります.
92Error192
This software is for the e-Amusement
system.
The game will only work on the e-Amusement
cabinet.
このゲームソフトはe-Amusement(レンタル)用
ソフトです.
e-Amusement用筐体でのみ動作します.
93Error193
This software is not for the e-Amusement
system.
The game doesn't work on the e-Amusement
cabinet.
このゲームソフトはe-Amusement(レンタル)用
ソフトではありません.
e-Amusement用筐体では動作しません.
94Error194
Non-applicable game installed.
To install this game,
%s1
shall be installed first.
異なるゲームがインストールされています.
このゲームをインストールするにはあらかじめ
%s1
がインストールされている必要があります.
95Error195
Cassette initialization error.
The cassette is already initialized as
%s1
Reinitialization can not be completed.
カセット初期化エラー.
カセットはすでに%s1として初期化
されています. 再初期化はできません.
96Error196
Cassette initialization error.
The cassette is already initialized as
%s1
Reinitialization can not be completed.
カセット初期化エラー.
カセットはすでに%s1として初期化
されています. 再初期化はできません.
97Error197
Cassette initialization error.
The cassette is already initialized as
%s1
Reinitialization can not be completed.
カセット初期化エラー.
カセットはすでに%s1として初期化
されています. 再初期化はできません.
98Info198, 500
Installation completed.
Please write down the No.%s2
on cassette and machine. Turn off the
power and replace cassette to
%s1 then turn on the power.
インストール完了.
カセットと本体に認証番号%s2を記入
してください.電源を切ってカセットを
%s1に交換し,再度電源を入れて
ください.
99Info199, 501
Installation complete.  Please write down
the No.%s3 on cassette and machine.
Replace CD-ROM to %s1 and turn off
the power then replace cassette to
%s2. Set DIP-SW4 to "ON",
then turn on the power.
インストール完了. カセットと本体に認証番号
%s3を記入してください.
CD-ROMを%s1に交換して電源を切り,
カセットを%s2に交換し,
DIP-SW4をONにして再度電源を入れてください.
100Info200, 502
Operating cassette initialized.
The cassette was initialized as Operating
Cassette (%s1)
運用カセット初期化完了.
カセットを運用カセット(%s1)として
初期化しました.
101Info201, 503
Installation cassette initialized.
The cassette was initialized as
Installation Cassette (%s1)
インストールカセット初期化完了.
カセットをインストールカセット(%s1)
として初期化しました.
102Info202, 504
Initialized Operating Cassette
The cassette is already initialized as
Operating Cassette (%s1)
Reinitialization is not necessary.
初期化済み運用カセット.
カセットはすでに運用カセット(%s1)
として初期化されています.
再初期化の必要はありません.
103Info203, 505
Initialized Installation Cassette
The cassette is already initialized as
Installation Cassette (%s1)
Reinitialization is not necessary.
初期化済みインストールカセット.
カセットはすでにインストールカセット
(%s1)として初期化されています.
再初期化の必要はありません.
104Info204, 506
Installation completed.
Please write down the No.%s2
on cassette and machine. Turn off the
power and replace cassette to
%s1 then turn on the power.
インストール完了.
カセットと本体に認証番号%s2を記入
してください.電源を切ってカセットを
%s1に交換し,再度電源を入れて
ください.
105Info205, 507
Installation complete.  Please write down
the No.%s3 on cassette and machine.
Replace CD-ROM to %s1 and turn off
the power then replace cassette to
%s2. Set DIP-SW4 to "ON",
then turn on the power.
インストール完了. カセットと本体に認証番号
%s3を記入してください.
CD-ROMを%s1に交換して電源を切り,
カセットを%s2に交換し,
DIP-SW4をONにして再度電源を入れてください.
106Info206, 508
Installation completed.
Please write down the No.%s1
on cassette and machine.
Turn off the power, then reboot.
インストール完了.
カセットと本体に認証番号%s1を記入
してください.
電源を切って再起動してください.
107Info207, 509
Installation complete.
Please write down the No.%s2
on cassette and machine.
Replace CD-ROM to %s1 and turn off
the power.
Set DIP-SW4 to "ON", then reboot.
インストール完了.
カセットと本体に認証番号%s2を
記入してください.
CD-ROMを%s1に交換して電源を切り,
DIP-SW4をONにして再起動してください.
108Info208, 510
Security cassette initialized.
The cassette was initialized for
%s1.
セキュリティカセット初期化完了.
カセットを%s1に初期化しました.
109Info209, 511
Initialized Security Cassette
The cassette is already initialized for
%s1.
Reinitialization is not necessary.
初期化済みセキュリティカセット.
カセットはすでに%s1に初期化
されています. 再初期化の必要はありません.
110Info210, 512
SERVICE button is pressed.
To force installation, turn off the power,
change the cassette to the Installation
Cassette, and turn on the power with
pressing SERVICE switch.
サービスボタンが押されています.
強制インストールを行うには電源を切り,
インストールカセットに交換して, サービス
ボタンを押しながら電源を入れてください.
111Note211, 513, 602
CD-ROM drive version update in progress.
Please do not shut off power.
This will take a few moments.
現在CD-ROMドライブのバージョンアップを
実行しています.
電源を切らずにそのままお待ち下さい.
112Note212, 514, 603
CD-ROM drive version update completed.
CD-ROMドライブのバージョンアップが完了
しました.
113Note213, 515, 604
Starting CD-ROM drive version update.
Please do not turn off the power while
updating.
Press TEST button to begin updating.
CD-ROMドライブのバージョンアップを行います.
バージョンアップ中は絶対に電源を切らないで
下さい.
テストボタンを押すとバージョンアップを開始
します.
114Note214, 516, 605
Cleared RTC-RAM.
At Game Demo screen, press the test button
for the Test Mode and re-do the settings.

Press the Test Button for the next screen.
RTC-RAMをクリアしました.
ゲームデモが始まったらテストボタンを押して
テストモードに入り設定をやり直してください.

テストボタンを押すと次に進みます.
+

Pinouts

+ +

Main board pinouts (GX700-PWB(A))

+

Analog input port (ANALOG, CN3)

+

The inputs are wired directly to the 573's built-in ADC with no protection, so +they can only accept voltages in 0-5V range. This connector is usually used for +potentiometers and similar resistive analog controls.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
15V
25V
35V
45V
5CH0I
6GND
7CH1I
8CH2I
9CH3I
10GND
+

Digital output port (EXT-OUT, CN4)

+

Unlike the light output ports on most I/O boards, these are unisolated 5V logic +level outputs.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
15V
25V
3OUT7O
4OUT6O
5OUT5O
6OUT4O
7OUT3O
8OUT2O
9OUT1O
10OUT0O
11GND
12GND
+

Digital input port (EXT-IN, CN5)

+

Unlike EXT-OUT, this port is not a separate input port. It piggybacks on the +JAMMA button inputs instead, exposing the button 4 and 5 pins for both players +as well as a sixth button input which is not available on the JAMMA connector. +All inputs have a pullup resistor to 5V.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirJAMMA pin
15V
25V
3P1_B4I25
4P1_B5I26
5P1_B6I
6GND
7P2_B4Ic
8P2_B5Id
9P2_B6I
10GND
+

Amplified speaker output (SOUND-OUT, CN9)

+

The pinout of this connector is currently unknown.

+

Main I/O board connector (CN10)

+

Used by I/O boards to connect to the motherboard. Note that the address and data +bus are 3.3V, while all other signals are 5V as they go through the CPLD.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirPinNameDir
A15VB15V
A25VB25V
A35VB35V
A45VB45V
A55VB55V
A6/RDOB6/WR0O
A7/WR1OB7GND
A8GNDB8SYSCLKO
A9GNDB9GND
A10/RESETOB10/RESETO
A11GNDB11GND
A12/CS1OB12DMARQ5I
A13GNDB13GND
A14DMARQ5IB14/CS1O
A15/CS2OB15NC
A16/IRQ10IB16/IRQ10I
A17A22OB17A23O
A18A20OB18A21O
A19A14OB19A15O
A20A12OB20A13O
A21A6OB21A7O
A22A4OB22A5O
A23A2OB23A3O
A24A0OB24A1O
A25D14IOB25D15IO
A26D12IOB26D13IO
A27D10IOB27D11IO
A28D8IOB28D9IO
A29D6IOB29D7IO
A30D4IOB30D5IO
A31D2IOB31D3IO
A32D0IOB32D1IO
A33GNDB33GND
A34GNDB34GND
A35GNDB35GND
A363.3VB363.3V
A373.3VB373.3V
A383.3VB383.3V
A393.3VB393.3V
A403.3VB403.3V
+

Analog CD-DA/MP3 audio input (CD-DA IN, CN12)

+

Connected to either the CD-ROM drive's audio output or to CN16 on the digital +I/O board on systems equipped with a drive.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1LINI
2AGND
3AGND
4RINI
+

Security cartridge slot (CN14)

+

All signals are 5V as they go through level shifters.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirNotesPinNameDirNotes
1GND23GND
2GND24GND
3/DSRIUsually shorted to ground25MCUCLKO7.3728 MHz JVS MCU clock
4NCMay actually be /DTR?26GND
5TXO27DRDYOGoes high when 573 updates D0-D7
6RXI28SDAIO
7/RESETIOSystem reset (from watchdog)29/IREQISets IRDY when pulsed low
8GND30/DACKIClears DRDY when pulsed low
9GND31IRDYOGoes low when 573 reads I0-I7
10Key (missing pin)32Key (missing pin)
11?Not connected?33I7I
12?Not connected?34I6I
13D7O35I5I
14D6O36I4I
15D5O37I3I
16D4O38I2I
17D3O39I1I
18D2O40I0I
19D1O415V
20D0O425V
215V43/RTSOUsually shorted to /CTS
225V44/CTSIUsually shorted to /RTS
+

Power input or output (CN17)

+

Commonly used to distribute the 12V rail to security cartridges with built-in +light drivers or external modules, but it can also used instead of the JAMMA +connector to supply power to the 573. The pinout is silkscreened on the board.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinName
112V
212V
3GND
4GND
55V
65V
+

I2S digital SPU audio output (DIGITAL-AUDIO, CN19)

+

Always unpopulated. Pin 4 outputs a 16.9344 MHz master clock (system clock +divided by 2, or 44100 Hz sampling rate multiplied by 384). This port does not +output audio from the CD-DA/MP3 input, which is not routed through the SPU.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1BCLKO
2SDOUTO
3GND
4MCLKO
5LRCKO
+

Secondary I/O board connector (CN21)

+

The address lines not wired to CN10, as well as the otherwise unused SIO0 +controller and memory card bus, are broken out to this connector. No currently +known I/O board uses it. All signals are 3.3V.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirPinNameDir
A1A8OB1A9O
A2A10OB2A11O
A3A16OB3A17O
A4A18OB4A19O
A5GNDB5?
A6GNDB6?
A7GNDB7GND
A8GNDB8DOTCLKO
A9GNDB9GND
A10GNDB10/DSRI
A11GNDB11/DTR2O
A12GNDB12/DTR1O
A13GNDB13RXI
A14GNDB14TXO
A15GNDB15SCKO
+

Watchdog test header (WD-CHECK, CN22)

+

Always unpopulated. Exposes the watchdog's clear input (pulsed whenever the CPU +writes to the watchdog clear register) as well as the reset output. Injecting +pulses to forcefully clear the watchdog should work, although it's much easier +to simply disable it by placing a jumper on S86.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1WDCLRIO
2/RESETO
35V
4GND
+

GPU clock and compositing output (CN23)

+

Only present on later revisions of the main board and only populated on DDR +Karaoke Mix, which uses the semitransparency plane of the currently displayed +framebuffer as an alpha mask in order to composite the 573's output on top of +the incoming karaoke video feed.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirGPU pin
1FSCO153
2DMASKO202
3GND
+

Security cartridge serial port (CN24)

+

Only present on later revisions of the main board and always unpopulated. +Exposes the same 5V SIO1 signals as the security cartridge slot.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirCart pin
1TXO5
2RXI6
3GND
4GND
5/RTSO43
6/CTSI44
+

RGB video output (CN25)

+

Only present on later revisions of the main board and only populated on GunMania +and DDR Karaoke Mix, whose I/O boards feature RGB to S-video and composite +converters respectively. Exposes the same RGB signals as the JAMMA and DB15 +connectors.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirJAMMA pin
1GNDO
2CSYNCOP
3BOUTO13
4GOUTON
5ROUTO12
+

Watchdog configuration jumper (S86)

+

Always unpopulated. Shorting pin 1 and 2 will disable the watchdog while keeping +power-on reset functional. Pin 3 is an active-high reset output, unused by the +573.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1WDENI
2GND
3RESETO
+

JVS MCU pin mapping

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinH8 GPIODirConnected toUsage
11P9_0IUnused
12P9_1-2OKonami ASICStatus code (readable from 0x1f400004)
12P9_3-4OKonami ASICError code (readable from 0x1f400004)
16IRQ0IUnused
17-24P6_0-7OKonami ASICLow byte of value readable from 0x1f40000a
25-32P5_0-7OKonami ASICHigh byte of value readable from 0x1f40000a
34P7_3IHandshaking logicCurrent JVSDRDY status
35P7_4IHandshaking logicCurrent JVSIRDY status
36P7_5IUnused
37P7_6IUnused
38P7_7IUnused
39-46P8_0-7IBus (via latch)High byte of value written to 0x1f680000
47P2_0ORS-485 transceiverJVS driver output enable
48P2_1IRS-485 transceiverJVS serial port RX
49P2_2ORS-485 transceiverJVS serial port TX
50P3_2IUnused
51P3_1IUnused
52P3_0IUnused
53P1_0OHandshaking logic/JVSDACK (clears JVSDRDY when pulsed low)
54P1_4OHandshaking logicJVSIREQ (sets JVSIRDY when pulsed high)
55P1_5IUnused
56P1_6IUnused
57P1_7IUnused
59-2PB_7-0IBus (via latch)Low byte of value written to 0x1f680000
+

Analog I/O board pinouts (GX700-PWB(F))

+

Output banks A, B (CN33, CN34 respectively)

+

All outputs are open-drain. Pins 1 and 10 are tied together and connected to the +optocouplers' emitters.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1ACOM/BCOM
2A0/B0O
3A1/B1O
4A2/B2O
5A3/B3O
6A4/B4O
7A5/B5O
8A6/B6O
9A7/B7O
10ACOM/BCOM
+

Output bank C (CN35)

+

All outputs are open-drain. Unlike banks A and B, pin 10 is not tied to pin 1 +but is instead connected to the EMI filters' ground (FGND), isolated from the +system ground but shared across all output banks.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1CCOM
2C0O
3C1O
4C2O
5C3O
6C4O
7C5O
8C6O
9C7O
10FGND
+

Output bank D (CN36)

+

All outputs are open-drain.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1DCOM
2D0O
3D1O
4D2O
5D3O
6FGND
+

Digital I/O board pinouts (GX894-PWB(B)A)

+

Output bank C (CN10)

+

All outputs are open-drain. The optocouplers driving C0-C3 have their emitters +wired to CCOM0, while those driving C4-C7 have their emitters wired to +CCOM1.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1CCOM0
2C0O
3C1O
4C2O
5C3O
6CCOM1
7C4O
8C5O
9C6O
10C7O
+

Output bank B (CN11)

+

All outputs are open-drain. The optocouplers driving B0-B3 have their emitters +wired to BCOM0, while those driving B4-B7 have their emitters wired to +BCOM1.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1BCOM0
2B0O
3B1O
4B2O
5B3O
6BCOM1
7B4O
8B5O
9B6O
10B7O
11NC
12NC
+

Output bank A (CN12)

+

All outputs are open-drain. The optocouplers driving A0-A3 have their emitters +wired to ACOM0, while those driving A4-A7 have their emitters wired to +ACOM1.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1ACOM0
2A0O
3A1O
4A2O
5A3O
6ACOM1
7A4O
8A5O
9A6O
10A7O
11NC
12NC
13NC
+

Output bank D (CN13)

+

All outputs are open-drain.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1DCOM
2D0O
3D1O
4D2O
5D3O
+

Input bank (CN14)

+

The pinout of this connector is currently unknown.

+

RS-232 serial port (CN15)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1TXO
2RXO
3GND
4GND
5RTSO
6CTSO
7DTRO
8DSRO
+

Analog MP3 audio output (CN16)

+

Usually connected to CN12 on the main board. GuitarFreaks routes this output +to a separate set of RCA jacks on the front I/O panel instead.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1LOUTO
2AGND
3AGND
4ROUTO
+

Unknown (CN17)

+

The pinout of this connector is currently unknown.

+

I2S digital MP3 audio output (CN18)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDirFPGA pin
1MCLKO97
2BCLKO94
3SDOUTO96
4LRCKO95
5?
6?
+

XCS40XL FPGA pin mapping

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinJTAGFPGA alt.DirConnected toUsage
2170GCK1IODRAMData bus bit 4
3173IODRAMData bus bit 8
4176IODRAMData bus bit 9
5179IODRAMData bus bit 10
6182TDIUnused
7185TCKUnused
8194IODRAMData bus bit 3
9197IODRAMData bus bit 11
10200IODRAMData bus bit 2
11203IODRAMData bus bit 12
12206Unused
14212IODRAMData bus bit 1
15215IODRAMData bus bit 0
16218TMSUnused
17221IODRAMData bus bit 13
19236IODRAMData bus bit 14
20239IODRAMData bus bit 15
21242IOSRAMData bus bit 3
22245IOSRAMData bus bit 2
23248IOSRAMData bus bit 4
24251IOSRAMData bus bit 1
27254IOSRAMData bus bit 5
28257IOSRAMData bus bit 0
29260IOSRAMData bus bit 6
30263OSRAMAddress bus bit 0
31266IOSRAMData bus bit 7
32269OSRAMAddress bus bit 1
34284OSRAMChip select
35287OSRAMAddress bus bit 2
36290OSRAMAddress bus bit 10
37293OSRAMAddress bus bit 3
39299Unused
40302OSRAMOutput enable
41305OSRAMAddress bus bit 4
42308OSRAMAddress bus bit 11
43311OSRAMAddress bus bit 5
44320OSRAMAddress bus bit 9
45323OSRAMAddress bus bit 6
46326OSRAMAddress bus bit 8
47329OSRAMAddress bus bit 7
48332OSRAMAddress bus bit 13
49335GCK2OSRAMAddress bus bit 12
55342GCK3OSRAMWrite enable
56345/HDCOSRAMAddress bus bit 14
57348OSRAMAddress bus bit 16
58351OSRAMAddress bus bit 15
59354OLight bank DOutput D3
60357LDCOLight bank DOutput D2
61366IInput bankUnknown input
62369IInput bankUnknown input
63372IInput bankUnknown input
64375IInput bankUnknown input
65378
67384OLight bank DOutput D1
68387OLight bank DOutput D0
69390OLight bank ?Unknown output
70393OLight bank ?Unknown output
72396OLight bank ?Unknown output
73399OLight bank ?Unknown output
74414OLight bank ?Unknown output
75417OLight bank ?Unknown output
76420OLight bank ?Unknown output
77423/INITIOCPLDFPGA reset/status
80426OLight bank ?Unknown output
81429OLight bank ?Unknown output
82432OLight bank ?Unknown output
83435OLight bank ?Unknown output
84438OLight bank ?Unknown output
85441IRS-232 transceiverUnknown pin
87456ORS-232 transceiverUnknown pin
88459IRS-232 transceiverUnknown pin
89462ORS-232 transceiverUnknown pin
90465IRS-232 transceiverUnknown pin
92471
93474ORS-232 transceiverUnknown pin
94477OAudio DACI2S bit clock (BCLK)
95480OAudio DACI2S frame clock (LRCK)
96483OAudio DACI2S data input (SDIN)
97492OAudio DACI2S master clock (MCLK)
98495OARCnet transceiverNetwork TX enable?
99498OARCnet transceiverNetwork TX?
100501IARCnet transceiverNetwork RX
101504
102507GCK4
104DONEIOCPLDFPGA configuration status
106/PROGRAMICPLDFPGA configuration reset
107510D7IODS2433 (unpopulated)Unused 1-wire bus (open drain)
108513GCK5Unused
109516IODS24011-wire bus (open drain)
110519I573 busAddress bus bit 7
111525Unused
112534D6I573 busAddress bus bit 6
113537I573 busAddress bus bit 5
114540I573 busAddress bus bit 4
115543I573 busAddress bus bit 3
116546I573 busAddress bus bit 2
117549I573 busAddress bus bit 1
119558OUnused?
120561IO573 busData bus bit 15
122564D5IO573 busData bus bit 14
123567IO573 busData bus bit 13
124576IO573 busData bus bit 12
125579IO573 busData bus bit 11
126582IO573 busData bus bit 10
127585IO573 busData bus bit 9
128588D4IO573 busData bus bit 8
129591IO573 busData bus bit 7
132594D3IO573 busData bus bit 6
133597IO573 busData bus bit 5
134600IO573 busData bus bit 4
135603IO573 busData bus bit 3
136606IO573 busData bus bit 2
137609IO573 busData bus bit 1
138618D2IO573 busData bus bit 0
139621
141624
142627I573 busI/O board chip select
144639
145642I573 busWrite strobe (/WR0)
146645I573 busRead strobe (/RD)
147648
148651IMAS3507DMP3 data request flag (PI19)
149654D1OMAS3507DPIO chip select (/PCS)
150657IOMAS3507DI2C SDA
151666IOMAS3507DI2C SCL
152669OMAS3507DChip reset (/POR)
153672D0/DINICPLDFPGA configuration data
154675GCK6/DOUTUnused
155CCLKICPLDFPGA configuration clock
1570TDOUnused
1592IMAS3507DMaster clock ready flag (WRDY)
1605GCK7ICrystal oscillator29.45 MHz clock
1618IMAS3507DMP3 frame sync flag (PI4)
16211IMAS3507DI2S master clock (CLKO/MCLK)
16314CS1OMAS3507DMain clock input (CLKI)
16417OMAS3507DMP3 stream bit clock (SIC)
16526
16632OMAS3507DMP3 stream frame clock (SII)
16735OMAS3507DMP3 stream data input (SID)
16838IMAS3507DMP3 error flag (PI8)
16941IMAS3507DI2S bit clock (SOC/BCLK)
17144IMAS3507DI2S frame clock (SOI/LRCK)
17247IMAS3507DI2S data output (SOD/SDOUT)
17462ODRAMAddress bus bit 5
17565ODRAMAddress bus bit 6
17668ODRAMAddress bus bit 4
17771ODRAMAddress bus bit 7
17874ODRAMAddress bus bit 3
17977ODRAMAddress bus bit 8
18080ODRAMAddress bus bit 2
18183ODRAMAddress bus bit 9
18486ODRAMAddress bus bit 1
18589ODRAMAddress bus bit 10
18692ODRAMAddress bus bit 0
18795ODRAMAddress bus bit 11
18898ODRAMUnknown (22J?) pin
189101ODRAMUnknown (22J?) pin
190104ODRAMUnknown (22H?) pin
191107ODRAMUnknown (22H?) pin
193122ODRAMUnknown (22G?) pin
194125ODRAM22G CAS
196128ODRAMWrite strobe
197131ODRAM22G output enable
198134ODRAM22H CAS
199137ODRAM22H output enable
200140ODRAM22J CAS
201143ODRAM22J output enable
202152Unused
203155Unused
204158IODRAMData bus bit 7
205161IODRAMData bus bit 6
206164IODRAMData bus bit 5
207167GCK8ICrystal oscillator19.6608 MHz clock
+

The 1-wire pins have external pullup resistors, so enabling the FPGA's built-in +pullups is not necessary. The FPGA's M0, M1 and /PWRDWN pins are hardwired +to 3.3V.

+

Security cartridge pinouts

+

RS-232 "network" connector

+

Present on GX700-PWB(E), GX896-PWB(A)A, GX883-PWB(D) and GE949-PWB(D)A +cartridges. All signals use RS-232 voltage levels. Note that DTR and DSR are +not wired to the respective SIO1 pins but to the security cartridge I/O pins.

+

On the GX700-PWB(E) cartridge the signals are referenced to the 573's ground +and not isolated. On all other cartridge types, the RS-232 transceiver is +powered through an isolated DC-DC module and fully eletrically isolated from the +573; the GND pin is the transceiver's isolated ground.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1TXO
2RXI
3DTRO
4DSRI
5GND
+

"Control" or "amp box" connector

+

Present on GX896-PWB(A)A, GX883-PWB(D) and GE949-PWB(D)A cartridges. +Unlike the RS-232 connector these are unisolated 5V logic level signals driven +through open-drain buffers, with pullup resistors to 5V.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNameDir
1GND
2CTRL0O
3GND
4CTRL1O
5CTRL2O
65V
+ +

This document is the result of a joint effort consisting of years' worth of +research, brought to you by:

+
    +
  • spicyjpeg (documentation writing, software reverse engineering, testing)
  • +
  • Naoki Saito (hardware reverse engineering, schematic tracing, testing)
  • +
  • 987123879113 (digital I/O board reverse engineering, testing)
  • +
  • smf (initial reverse engineering and implementation of the 573 MAME + driver)
  • +
  • tensionvex (testing)
  • +
  • Shiz (security cartridge details)
  • +
+

Traced schematics, images, datasheets and additional resources are available in +Naoki's 573 repo. Shiz also maintains +a general documentation repo for +several arcade systems including the 573.

+

Some information has been aggregated from the following sources:

+ +

Huge thanks to the Rhythm Game Cabs Discord server and everyone who provided +valuable information about the 573!

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/macroblockdecodermdec/index.html b/macroblockdecodermdec/index.html new file mode 100644 index 0000000..b764f18 --- /dev/null +++ b/macroblockdecodermdec/index.html @@ -0,0 +1,1725 @@ + + + + + + + + + + + + + + + + + + + + + + + + Macroblock Decoder (MDEC) - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Macroblock Decoder (MDEC)

+

The MDEC is a JPEG-style Macroblock Decoder, that can decompress pictures (or a +series of pictures, for being displayed as a movie).

+

MDEC I/O Ports
+MDEC Commands
+MDEC Decompression
+MDEC Data Format

+

MDEC I/O Ports

+

1F801820h - MDEC0 - MDEC Command/Parameter Register (W)

+

  31-0  Command or Parameters
+
+Used to send command word, followed by parameter words to the MDEC (usually, +only the command word is written to this register, and the parameter words are +transferred via DMA0).

+

1F801820h.Read - MDEC Data/Response Register (R)

+

  31-0  Macroblock Data (or Garbage if there's no data available)
+
+The data is always output as a 8x8 pixel bitmap, so, when manually reading from +this register and using colored 16x16 pixel macroblocks, the data from four 8x8 +blocks must be re-ordered accordingly (usually, the data is received via DMA1, +which is doing the re-ordering automatically). For monochrome 8x8 macroblocks, +no re-ordering is needed (that works with DMA1 too).

+

1F801824h - MDEC1 - MDEC Status Register (R)

+

  31    Data-Out Fifo Empty (0=No, 1=Empty)
+  30    Data-In Fifo Full   (0=No, 1=Full, or Last word received)
+  29    Command Busy  (0=Ready, 1=Busy receiving or processing parameters)
+  28    Data-In Request  (set when DMA0 enabled and ready to receive data)
+  27    Data-Out Request (set when DMA1 enabled and ready to send data)
+  26-25 Data Output Depth  (0=4bit, 1=8bit, 2=24bit, 3=15bit)      ;CMD.28-27
+  24    Data Output Signed (0=Unsigned, 1=Signed)                  ;CMD.26
+  23    Data Output Bit15  (0=Clear, 1=Set) (for 15bit depth only) ;CMD.25
+  22-19 Not used (seems to be always zero)
+  18-16 Current Block (0..3=Y1..Y4, 4=Cr, 5=Cb) (or for mono: always 4=Y)
+  15-0  Number of Parameter Words remaining minus 1  (FFFFh=None)  ;CMD.Bit0-15
+
+If there's data in the output fifo, then the Current Block bits are always set +to the current output block number (ie. Y1..Y4; or Y for mono) (this +information is apparently passed to the DMA1 controller, so that it knows if +and how it must re-order the data in RAM). If the output fifo is empty, then +the bits indicate the currently processsed incoming block (ie. Cr,Cb,Y1..Y4; or +Y for mono).

+

1F801824h - MDEC1 - MDEC Control/Reset Register (W)

+

  31    Reset MDEC (0=No change, 1=Abort any command, and set status=80040000h)
+  30    Enable Data-In Request  (0=Disable, 1=Enable DMA0 and Status.bit28)
+  29    Enable Data-Out Request (0=Disable, 1=Enable DMA1 and Status.bit27)
+  28-0  Unknown/Not used - usually zero
+
+The data requests are required to be enabled for using DMA (and for reading the +request status flags by software). The Data-Out request acts a bit strange: It +gets set when a block is available, but, it gets cleared after reading the +first some words of that block (nethertheless, one can keep reading the whole +block, until the fifo-empty flag gets set).

+

DMA

+

MDEC decompression uses a lot of DMA channels,
+

  1) DMA3 (CDROM)    to send compressed data from CDROM to RAM
+  2) DMA0 (MDEC.In)  to send compressed data from RAM to MDEC
+  3) DMA1 (MDEC.Out) to send uncompressed macroblocks from MDEC to RAM
+  4) DMA2 (GPU)      to send uncompressed macroblocks from RAM to GPU
+
+DMA0 and DMA1 should be usually used with a blocksize of 20h words. If +necessary, the parameters for the MDEC(1) command should be padded with FE00h +halfwords to match the 20h words (40h halfwords) DMA blocksize.

+

MDEC Commands

+

MDEC(1) - Decode Macroblock(s)

+

  31-29 Command (1=decode_macroblock)
+  28-27 Data Output Depth  (0=4bit, 1=8bit, 2=24bit, 3=15bit)      ;STAT.26-25
+  26    Data Output Signed (0=Unsigned, 1=Signed)                  ;STAT.24
+  25    Data Output Bit15  (0=Clear, 1=Set) (for 15bit depth only) ;STAT.23
+  24-16 Not used (should be zero)
+  15-0  Number of Parameter Words (size of compressed data)
+
+This command is followed by one or more Macroblock parameters (usually, all +macroblocks for the whole image are sent at once).

+

MDEC(2) - Set Quant Table(s)

+

  31-29 Command (2=set_iqtab)
+  28-1  Not used (should be zero)  ;Bit25-28 are copied to STAT.23-26 though
+  0     Color   (0=Luminance only, 1=Luminance and Color)
+
+The command word is followed by 64 unsigned parameter bytes for the Luminance +Quant Table (used for Y1..Y4), and if Command.Bit0 was set, by another 64 +unsigned parameter bytes for the Color Quant Table (used for Cb and Cr).

+

MDEC(3) - Set Scale Table

+

  31-29 Command (3=set_scale)
+  28-0  Not used (should be zero)  ;Bit25-28 are copied to STAT.23-26 though
+
+The command is followed by 64 signed halfwords with 14bit fractional part, the +values should be usually/always the same values (based on the standard JPEG +constants, although, MDEC(3) allows to use other values than that constants).

+

MDEC(0) - No function

+

This command has no function. Command bits 25-28 are reflected to Status bits +23-26 as usually. Command bits 0-15 are reflected to Status bits 0-15 (similar +as the "number of parameter words" for MDEC(1), but without the "minus 1" +effect, and without actually expecting any parameters).

+

MDEC(4..7) - Invalid

+

These commands act identical as MDEC(0).

+

MDEC Decompression

+

decode_colored_macroblock ;MDEC(1) command (at 15bpp or 24bpp depth)

+
  rl_decode_block(Crblk,src,iq_uv)                 ;Cr (low resolution)
+  rl_decode_block(Cbblk,src,iq_uv)                 ;Cb (low resolution)
+  rl_decode_block(Yblk,src,iq_y), yuv_to_rgb(0,0)  ;Y1 (and upper-left Cr,Cb)
+  rl_decode_block(Yblk,src,iq_y), yuv_to_rgb(0,8)  ;Y2 (and upper-right Cr,Cb)
+  rl_decode_block(Yblk,src,iq_y), yuv_to_rgb(8,0)  ;Y3 (and lower-left Cr,Cb)
+  rl_decode_block(Yblk,src,iq_y), yuv_to_rgb(8,8)  ;Y4 (and lower-right Cr,Cb)
+
+

decode_monochrome_macroblock ;MDEC(1) command (at 4bpp or 8bpp depth)

+
  rl_decode_block(Yblk,src,iq_y), y_to_mono        ;Y
+
+

rl_decode_block(blk,src,qt)

+
  for i=0 to 63, blk[i]=0, next i   ;initially zerofill all entries (for skip)
+ @@skip:
+  n=[src], src=src+2, k=0           ;get first entry, init dest addr k=0
+  if n=FE00h then @@skip            ;ignore padding (FE00h as first halfword)
+  q_scale=(n SHR 10) AND 3Fh        ;contains scale value (not "skip" value)
+  val=signed10bit(n AND 3FFh)*qt[k] ;calc first value (without q_scale/8) (?)
+ @@lop:
+  if q_scale=0 then val=signed10bit(n AND 3FFh)*2   ;special mode without qt[k]
+  val=minmax(val,-400h,+3FFh)            ;saturate to signed 11bit range
+  val=val*scalezag[i]                    ;<-- for "fast_idct_core" only
+  if q_scale>0 then blk[zagzig[k]]=val   ;store entry (normal case)
+  if q_scale=0 then blk[k]=val           ;store entry (special, no zigzag)
+  n=[src], src=src+2                     ;get next entry (or FE00h end code)
+  k=k+((n SHR 10) AND 3Fh)+1             ;skip zerofilled entries
+  val=(signed10bit(n AND 3FFh)*qt[k]*q_scale+4)/8  ;calc value for next entry
+  if k<=63 then jump @@lop          ;should end with n=FE00h (that sets k>63)
+  idct_core(blk)
+  return (with "src" address advanced)
+
+

fast_idct_core(blk) ;fast "idct_core" version

+

Fast code with only 80 multiplications, works only if the scaletable from +MDEC(3) command contains standard values (which is the case for all known PSX +games).
+

  src=blk, dst=temp_buffer
+  for pass=0 to 1
+    for i=0 to 7
+      if src[(1..7)*8+i]=0 then      ;when src[(1..7)*8+i] are all zero:
+        dst[i*8+(0..7)]=src[0*8+i]   ;quick fill by src[0*8+i]
+      else
+        z10=src[0*8+i]+src[4*8+i], z11=src[0*8+i]-src[4*8+i]
+        z13=src[2*8+i]+src[6*8+i], z12=src[2*8+i]-src[6*8+i]
+        z12=(1.414213562*z12)-z13          ;=sqrt(2)
+        tmp0=z10+z13, tmp3=z10-z13, tmp1=z11+z12, tmp2=z11-z12
+        z13=src[3*8+i]+src[5*8+i], z10=src[3*8+i]-src[5*8+i]
+        z11=src[1*8+i]+src[7*8+i], z12=src[1*8+i]-src[7*8+i]
+        z5  =(1.847759065*(z12-z10))       ;=sqrt(2)*scalefactor[2]
+        tmp7=z11+z13
+        tmp6=(2.613125930*(z10))+z5-tmp7   ;=scalefactor[2]*2
+        tmp5=(1.414213562*(z11-z13))-tmp6  ;=sqrt(2)
+        tmp4=(1.082392200*(z12))-z5+tmp5   ;=sqrt(2)/scalefactor[2]
+        dst[i*8+0]=tmp0+tmp7, dst[i*8+7]=tmp0-tmp7
+        dst[i*8+1]=tmp1+tmp6, dst[i*8+6]=tmp1-tmp6
+        dst[i*8+2]=tmp2+tmp5, dst[i*8+5]=tmp2-tmp5
+        dst[i*8+4]=tmp3+tmp4, dst[i*8+3]=tmp3-tmp4
+      endif
+    next i
+    swap(src,dst)
+  next pass
+

+

real_idct_core(blk) ;low level "idct_core" version

+

Low level code with 1024 multiplications, using the scaletable from the MDEC(3) +command. Computes dst=src*scaletable (using normal matrix maths, but with "src" +being diagonally mirrored, ie. the matrices are processed column by column, +instead of row by column), repeated with src/dst exchanged.
+

  src=blk, dst=temp_buffer
+  for pass=0 to 1
+    for x=0 to 7
+      for y=0 to 7
+        sum=0
+        for z=0 to 7
+          sum=sum+src[y+z*8]*(scaletable[x+z*8]/8)
+        next z
+        dst[x+y*8]=(sum+0fffh)/2000h               ;<-- or so?
+      next y
+    next x
+    swap(src,dst)
+  next pass
+
+The "(sum+0fffh)/2000h" part is meant to strip fractional bits, and to round-up +the result if the fraction was BIGGER than 0.5. The hardware appears to be +working roughly like that, still the results aren't perfect.
+Maybe the real hardware is doing further roundings in other places, possibly +stripping some fractional bits before summing up "sum", possibly stripping +different amounts of bits in the two "pass" cycles, and possibly keeping a +final fraction passed on to the y_to_mono stage.

+

yuv_to_rgb(xx,yy)

+

  for y=0 to 7
+    for x=0 to 7
+      R=[Crblk+((x+xx)/2)+((y+yy)/2)*8], B=[Cbblk+((x+xx)/2)+((y+yy)/2)*8]
+      G=(-0.3437*B)+(-0.7143*R), R=(1.402*R), B=(1.772*B)
+      Y=[Yblk+(x)+(y)*8]
+      R=MinMax(-128,127,(Y+R))
+      G=MinMax(-128,127,(Y+G))
+      B=MinMax(-128,127,(Y+B))
+      if unsigned then BGR=BGR xor 808080h  ;aka add 128 to the R,G,B values
+      dst[(x+xx)+(y+yy)*16]=BGR
+    next x
+  next y
+
+Note: The exact fixed point resolution for "yuv_to_rgb" is unknown. And, +there's probably also some 9bit limit (similar as in "y_to_mono").

+

y_to_mono

+
  for i=0 to 63
+    Y=[Yblk+i]
+    Y=Y AND 1FFh                  ;clip to signed 9bit range
+    Y=MinMax(-128,127,Y)          ;saturate from 9bit to signed 8bit range
+    if unsigned then Y=Y xor 80h  ;aka add 128 to the Y value
+    dst[i]=Y
+  next i
+
+

set_iqtab ;MDEC(2) command

+
  iqtab_core(iq_y,src), src=src+64       ;luminance quant table
+  if command_word.bit0=1
+    iqtab_core(iq_uv,src), src=src+64    ;color quant table (optional)
+  endif
+
+

iqtab_core(iq,src) ;src = 64 unsigned paramter bytes

+

  for i=0 to 63, iq[i]=src[i], next i
+
+Note: For "fast_idct_core" one could precalc "iq[i]=src[i]*scalezag[i]", but +that would conflict with the RLE saturation/rounding steps (though those steps +aren't actually required, so a very-fast decoder could omit them).

+

scalefactor[0..7] = cos((0..7)*90'/8) ;for [1..7]: multiplied by sqrt(2)

+
  1.000000000, 1.387039845, 1.306562965, 1.175875602,
+  1.000000000, 0.785694958, 0.541196100, 0.275899379
+
+

zigzag[0..63] =

+
  0 ,1 ,5 ,6 ,14,15,27,28,
+  2 ,4 ,7 ,13,16,26,29,42,
+  3 ,8 ,12,17,25,30,41,43,
+  9 ,11,18,24,31,40,44,53,
+  10,19,23,32,39,45,52,54,
+  20,22,33,38,46,51,55,60,
+  21,34,37,47,50,56,59,61,
+  35,36,48,49,57,58,62,63
+
+

scalezag[0..63] (precalulated factors, for "fast_idct_core")

+
  for y=0 to 7
+   for x=0 to 7
+    scalezag[zigzag[x+y*8]] = scalefactor[x] * scalefactor[y] / 8
+   next x
+  next y
+
+

zagzig[0..63] (reversed zigzag table)

+
  for i=0 to 63, zagzig[zigzag[i]]=i, next i
+
+

set_scale_table: ;MDEC(3) command

+

This command defines the IDCT scale matrix, which should be usually/always:
+

  5A82 5A82 5A82 5A82 5A82 5A82 5A82 5A82
+  7D8A 6A6D 471C 18F8 E707 B8E3 9592 8275
+  7641 30FB CF04 89BE 89BE CF04 30FB 7641
+  6A6D E707 8275 B8E3 471C 7D8A 18F8 9592
+  5A82 A57D A57D 5A82 5A82 A57D A57D 5A82
+  471C 8275 18F8 6A6D 9592 E707 7D8A B8E3
+  30FB 89BE 7641 CF04 CF04 7641 89BE 30FB
+  18F8 B8E3 6A6D 8275 7D8A 9592 471C E707
+
+Note that the hardware does actually use only the upper 13bit of those 16bit +values. The values are choosen like so,
+
  +s0  +s0  +s0  +s0  +s0  +s0  +s0  +s0
+  +s1  +s3  +s5  +s7  -s7  -s5  -s3  -s1
+  +s2  +s6  -s6  -s2  -s2  -s6  +s6  +s2
+  +s3  -s7  -s1  -s5  +s5  +s1  +s7  -s3
+  +s4  -s4  -s4  +s4  +s4  -s4  -s4  +s4
+  +s5  -s1  +s7  +s3  -s3  -s7  +s1  -s5
+  +s6  -s2  +s2  -s6  -s6  +s2  -s2  +s6
+  +s7  -s5  +s3  -s1  +s1  -s3  +s5  -s7
+
+whereas, s0..s7 = scalefactor[0..7], multiplied by sqrt(2) (ie. by 1.414), and +multiplied by 4000h (ie. with 14bit fractional part).

+

MDEC Data Format

+

Colored Macroblocks (16x16 pixels) (in 15bpp or 24bpp depth mode)

+

Each macroblock consists of six blocks: Two low-resolution blocks with color +information (Cr,Cb) and four full-resolution blocks with luminance (grayscale) +information (Y1,Y2,Y3,Y4). The color blocks are zoomed from 8x8 to 16x16 pixel +size, merged with the luminance blocks, and then converted from YUV to RGB +format.
+

   .-----.       .-----.       .-----.         .-----.
+   |     |       |     |       |Y1|Y2|         |     |
+   | Cr  |   +   | Cb  |   +   |--+--|  ---->  | RGB |
+   |     |       |     |       |Y3|Y4|         |     |
+   '-----'       '-----'       '-----'         '-----'
+
+Native PSX files are usually containing vertically arranged Macroblocks (eg. +allowing to send them to the GPU as 16x240 portion) (JPEG-style horizontally +arranged Macroblocks would require to send the data in 16x16 pixel portions to +the GPU) (something like 320x16 won't work, since that'd require to wrap from +the bottom of the first macroblock to the top of the next macroblock).

+

Monochrome Macroblocks (8x8 pixel) (in 4bpp or 8bpp depth mode)

+

Each macroblock consist of only one block: with luminance (grayscale) +information (Y), the data comes out as such (it isn't converted to RGB).
+

   .--.         .--.
+   |Y |  ---->  |Y |
+   '--'         '--'
+
+The output is an 8x8 bitmap (not 16x16), so it'd be send to the GPU as 8x8 +pixel rectangle, or multiple blocks at once as 8x240 pixel rectangle. Since the +data isn't RGB, it should be written to Texture memory (and then it can be +forwarded to the frame buffer in form of a texture with monochrome 15bit +palette with 32 grayscales). Alternately, one could convert the 8bpp image to +24bpp by software (this would allow to use 256 grayscales).

+

Blocks (8x8 pixels)

+

An (uncompressed) block consists of 64 values, representing 8x8 pixels. The +first (upper-left) value is an absolute value (called "DC" value), the +remaining 63 values are relative to the DC value (called "AC" values). After +decompression and zig-zag reordering, the data in unfiltered horizontally and +vertically (IDCT conversion, ie. the relative "AC" values are converted to +absolute "DC" values).

+

.STR Files

+

PSX Video files are usually having file extension .STR (for "Streaming").

+

MDEC vs JPEG

+

The MDEC data format is very similar to the JPEG file format, the main +difference is that JPEG uses Huffman compressed blocks, whilst MDEC uses +Run-Length (RL) compressed blocks.
+The (uncompressed) blocks are same as in JPEGs, using the same zigzag ordering, +AC to DC conversion, and YUV to RGB conversion (ie. the MDEC hardware can be +also used to decompress JPEGs, when handling the file header and huffman +decompression by software).
+Some other differences are that MDEC has only 2 fixed-purpose quant tables, +whilst JPEGs \<can> use up to 4 general-purpose quant tables. Also, JPEGs +\<can> use other color resolutions than the 8x8 color info for 16x16 +pixels. Whereas, JPEGs \<can> do that stuff, but most standard JPEG files +aren't actually using 4 quant tables, nor higher color resolution.

+

Run-Length compressed Blocks

+

Within each block the DCT information and RLE compressed data is stored:
+

  DCT               ;1 halfword
+  RLE,RLE,RLE,etc.  ;0..63 halfwords
+  EOB               ;1 halfword
+

+

DCT (1st value)

+

DCT data has the quantization factor and the Direct Current (DC) reference.
+

  15-10 Q    Quantization factor (6 bits, unsigned)
+  9-0   DC   Direct Current reference (10 bits, signed)
+
+Contains the absolute DC value (the upper-left value of the 8x8 block).

+

RLE (Run length data, for 2nd through 64th value)

+

  15-10 LEN  Number of zero AC values to be inserted (6 bits, unsigned)
+  9-0   AC   Relative AC value (10 bits, signed)
+
+Example: AC values "000h,000h,123h" would be compressed as "(2 shl 10)+123h".

+

EOB (End Of Block)

+

Indicates the end of a 8x8 pixel block, causing the rest of the block to be +padded with zero AC values.
+

  15-0  End-code (Fixed, FE00h)
+
+EOB isn't required if the block was already fully defined (up to including +blk[63]), however, most games seem to append EOB to all blocks (although it's +just acting as dummy/padding value in case of fully defined blocks).

+

Dummy halfwords

+

Data is sent in units of words (or, when using DMA, even in units of 32-words), +which is making it neccessary to send some dummy halfwords (unless the +compressed data size should match up the transfer unit). The value FE00h can be +used as dummy value: When FE00h appears at the begin of a new block, or after +the end of block, then it is simply ignored by the hardware (if it occurs +elsewhere, then it acts as EOB end code, as described above).

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/memorycontrol/index.html b/memorycontrol/index.html new file mode 100644 index 0000000..790263c --- /dev/null +++ b/memorycontrol/index.html @@ -0,0 +1,1141 @@ + + + + + + + + + + + + + + + + + + + + + + + + Memory Control - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Memory Control

+

The Memory Control registers are initialized by the BIOS, and, normally +software doesn't need to change that settings. Some registers are useful for +expansion hardware (allowing to increase the memory size and bus width).

+

1F801000h - Expansion 1 Base Address (usually 1F000000h)

+

1F801004h - Expansion 2 Base Address (usually 1F802000h)

+

  0-23   Base Address   (Read/Write)
+  24-31  Fixed          (Read only, always 1Fh)
+
+For Expansion 1, the address is forcefully aligned to the selected expansion +size (see below), ie. if the size is bigger than 1 byte, then the lower bit(s) +of the base address are ignored.
+For Expansion 2, trying to use ANY other value than 1F802000h seems to disable +the Expansion 2 region, rather than mapping it to the specified address (ie. +Port 1F801004h doesn't seem to work).
+For Expansion 3, the address seems to be fixed (1FA00000h).

+

1F801008h - Expansion 1 Delay/Size (usually 0013243Fh) (512Kbytes, 8bit bus)

+

1F80100Ch - Expansion 3 Delay/Size (usually 00003022h) (1 byte)

+

1F801010h - BIOS ROM Delay/Size (usually 0013243Fh) (512Kbytes, 8bit bus)

+

1F801014h - SPU Delay/Size (200931E1h) (use 220931E1h for SPU-RAM reads)

+

1F801018h - CDROM Delay/Size (00020843h or 00020943h)

+

1F80101Ch - Expansion 2 Delay/Size (usually 00070777h) (128 bytes, 8bit bus)

+

  0-3   Write Delay        (00h..0Fh=01h..10h Cycles)
+  4-7   Read Delay         (00h..0Fh=01h..10h Cycles)
+  8     Recovery Period    (0=No, 1=Yes, uses COM0 timings)
+  9     Hold Period        (0=No, 1=Yes, uses COM1 timings)
+  10    Floating Period    (0=No, 1=Yes, uses COM2 timings)
+  11    Pre-strobe Period  (0=No, 1=Yes, uses COM3 timings)
+  12    Data Bus-width     (0=8bits, 1=16bits)
+  13    Auto Increment     (0=No, 1=Yes)
+  14-15 Unknown (R/W)
+  16-20 Memory Window Size (1 SHL N bytes) (0..1Fh = 1 byte ... 2 gigabytes)
+  21-23 Unknown (always zero)
+  24-27 DMA timing override
+  28    Address error flag. Write 1 to it to clear it.
+  29    DMA timing select  (0=use normal timings, 1=use bits 24-27)
+  30    Wide DMA           (0=use bit 12, 1=override to full 32 bits)
+  31    Wait               (1=wait on external device before being ready)
+
+When booting, all these registers are using the maximum cycle delays for both +reads and writes. Then, the BIOS will immediately select a faster read +access delay, resulting in a visible speed up after the first few instructions. +The effects aren't immediate however. The BIOS boots using the following instructions:

+
bfc00000    lui        $t0, 0x0013
+bfc00004    ori        $t0, 0x243f
+bfc00008    lui        $at, 0x1f80
+bfc0000c    sw         $t0, 0x1010($at)
+bfc00010    nop
+bfc00014    li         $t0, 0x0b88
+bfc00018    lui        $at, 0x1f80
+bfc0001c    sw         $t0, 0x1060($at)
+bfc00020    nop
+
+

When using a logic analyzer to monitor the boot sequence, the instruction at +bfc00014 is still read using the old timings since reset, and then the instruction +at bfc00018 is finally read using the sped up timings.

+

Reads and writes access times aren't symmetrical, and are each controlled with +their own values. By default, EXP1 will be set to 16 cycles when writing, which +is the slowest possible. If the programmer wants to write to a flash chip on +EXP1, or communicate with a computer, speeding up write access is recommended.

+

The fastest a port could go would be by setting the lowest 16 bits to zero, which +will result in 3 CPU cycles for a single byte access.

+

!CS always goes active at least one cycle before !WR or !RD go active. The various +timing changes are between all the events inside the data read/write waveform. The +whole formula for computing the total access time is fairly complex overall, and +difficult to properly describe.

+
    +
  • The pre-strobe period will add delays between the moment the data bus is set, + and the moment !CS goes active.
  • +
  • The hold period will keep the data in the data bus for some more cycles after + !WR goes inactive, and before !CS goes inactive. The accessed device is supposed + to sample the data bus during this interval.
  • +
  • The floating period will keep the data bus floating for some more cycles after + !RD goes inactive, and before !CS goes inactive. The accessed device is supposed + to stop driving the data bus during this interval. The CPU will sample the data + bus somewhere before or exactly when !CS goes inactive.
  • +
  • The recovery period will add delays between two operations.
  • +
+

The data bus width will influence if the CPU does full 16 bits reads, or only +8 bits. When doing 32 bits operations, the CPU will issue 2 16-bits operations, +or 4 8-bits operations, keeping !CS active the whole time, and strobing !WR or +!RD accordingly. When doing these sequences, the address bus will also increment +automatically between each operation, if the auto-increment bit is active.

+

This means it is possible to slightly shorten the read time of 4 bytes off the +same address by disabling auto-increment, and reading a full word. The CPU will +then read 4 bytes off the same address, and place them all into each byte of +the loaded register.

+

The DMA timing override portion will replace the access timing when doing DMA, +only if the DMA override flag is set.

+

The Wide DMA flag will enable full 32 bits DMA operations on the bus, by reusing +the low 16-bits address signals as the high 16-bits data. This means that if +the CPU is doing Wide DMA reads, the low 16-bits of the address bus will become +inputs.

+

Trying to access addresses that exceed the selected size causes a bus exception. +Maximum size would be Expansion 1 = 17h (8MB), BIOS = 16h (4MB), Expansion 2 = +0Dh (8KB), Expansion 3 = 15h (2MB). Trying to select larger sizes would overlap +the internal I/O ports, and crash the PSX. The Size bits seem to be ignored for +SPU/CDROM. The SPU timings seem to be applied for both the 200h-byte SPU region +at 1F801C00h and for the 200h-byte unknown region at 1F801E00h.

+

1F801020h - COM_DELAY / COMMON_DELAY (00031125h or 0000132Ch or 00001325h)

+

  0-3   COM0 - Recovery period cycles
+  4-7   COM1 - Hold period cycles
+  8-11  COM2 - Floating release cycles
+  12-15 COM3 - Strobe active-going edge delay
+  16-31 Unknown/unused (read: always 0000h)
+
+This register contains clock cycle offsets that can be added to the Access Time +values in Port 1F801008h..1Ch. Works (somehow) like so:
+
  1ST=0, SEQ=0, MIN=0
+  IF Use_COM0 THEN 1ST=1ST+COM0-1, SEQ=SEQ+COM0-1
+  IF Use_COM2 THEN 1ST=1ST+COM2,   SEQ=SEQ+COM2
+  IF Use_COM3 THEN MIN=COM3
+  IF 1ST<6 THEN 1ST=1ST+1   ;(somewhat like so)
+  1ST=1ST+AccessTime+2, SEQ=SEQ+AccessTime+2
+  IF 1ST<(MIN+6) THEN 1ST=(MIN+6)
+  IF SEQ<(MIN+2) THEN SEQ=(MIN+2)
+
+The total access time is the sum of First Access, plus any Sequential +Access(es), eg. for a 32bit access with 8bit bus: Total=1ST+SEQ+SEQ+SEQ.
+If the access is done from code in (uncached) RAM, then 0..4 cycles are added +to the Total value (the exact number seems to vary depending on the used COMx +values or so).

+

1F801060h - RAM_SIZE (R/W) (usually 00000B88h) (or 00000888h)

+

  0-2   Unknown (no effect)
+  3     Crashes when zero (except PU-7 and EARLY-PU-8, which <do> set bit3=0)
+  4-6   Unknown (no effect)
+  7     Delay on simultaneous CODE+DATA fetch from RAM (0=None, 1=One Cycle)
+  8     Unknown (no effect) (should be set for 8MB, cleared for 2MB)
+  9-11  Define 8MB Memory Window (first 8MB of KUSEG,KSEG0,KSEG1)
+  12-15 Unknown (no effect)
+  16-31 Unknown (Garbage)
+
+Possible values for Bit9-11 are:
+
  0 = 1MB Memory + 7MB Locked
+  1 = 4MB Memory + 4MB Locked
+  2 = 1MB Memory + 1MB HighZ + 6MB Locked
+  3 = 4MB Memory + 4MB HighZ
+  4 = 2MB Memory + 6MB Locked              ;<--- would be correct for PSX
+  5 = 8MB Memory                           ;<--- default by BIOS init
+  6 = 2MB Memory + 2MB HighZ + 4MB Locked     ;<-- HighZ = Second /RAS
+  7 = 8MB Memory
+
+The BIOS initializes this to setting 5 (8MB) (ie. the 2MB RAM repeated 4 times), +although the "correct" would be setting 4 (2MB, plus other 6MB Locked). The +remaining memory, after the first 8MB, and up to the Expansion/IO/BIOS region +seems to be always Locked.
+The HighZ regions are FFh-filled, that even when grounding data lines on the +system bus (ie. it is NOT a mirror of the PIO expansion region).
+Locked means that the CPU generates an exception when accessing that area.
+Note: Wipeout uses a BIOS function that changes RAM_SIZE to 00000888h (ie. with +corrected size of 2MB, and with the unknown Bit8 cleared). Gundam Battle +Assault 2 does actually use the "8MB" space (with stacktop in mirrored RAM at +807FFFxxh).
+Clearing bit7 causes many games to hang during CDROM loading on both EARLY-PU-8 +and LATE-PU-8 (but works on PU-18 through PM-41).

+

FFFE0130h BIU_CONFIG, Cache Control (R/W)

+

  0-2   Unknown (Read/Write)                                            (R/W)
+  3     Scratchpad Enable 1 (0=Disable, 1=Enable when Bit7 is set, too) (R/W)
+  4-5   Unknown (Read/Write)                                            (R/W)
+  6     Unknown (read=always zero)                  (R) or (W) or unused..?
+  7     Scratchpad Enable 2 (0=Disable, 1=Enable when Bit3 is set, too) (R/W)
+  8     Unknown                                                         (R/W)
+  9     Crash (0=Normal, 1=Crash if code-cache enabled)                 (R/W)
+  10    Unknown (read=always zero)                  (R) or (W) or unused..?
+  11    Code-Cache Enable (0=Disable, 1=Enable)                         (R/W)
+  12-31 Unknown                                                         (R/W)
+
+Used primarily to flush the i-cache (in combination with COP0), like so:
+
 Init Cache Step 1:
+  [FFFE0130h]=00000804h, then set cop0_sr=00010000h, then
+  zerofill each FOURTH word at [0000..0FFFh], then set cop0_sr=zero.
+ Init Cache Step 2:
+  [FFFE0130h]=00000800h, then set cop0_sr=00010000h, then
+  zerofill ALL words at [0000h..0FFFh], then set cop0_sr=zero.
+ Finish Initialization:
+  read 8 times 32bit from [A0000000h], then set [FFFE0130h]=0001E988h
+
+At least one game (TOCA World Touring Cars, SLES-02572) flushes the cache +without using code from uncached ram (KSEG1) instead of calling the BIOS +function described above. It follows this sequence: +- First, it reads the current value of the BIU register, and stores it back +with this modification: BIU = (BIU & ~0x0483) | 0x0804. With the normal +BIU value of 0x001e988, this results in writing the value 0x001e90c +- Then, it writes 0x00010000 to cop0's Status register. This order is +important, as it would otherwise not take the BIU change, and still write +to main ram instead of the i-cache region. +- At this point, it proceeds with the step 1 of the flushcache procedure +of clearing every fourth word. +- Finally, it restores both the original value of the BIU and Status +registers it had previously saved.

+

A usable version of this code +is available.

+

Note: FFFE0130h is described in LSI's "L64360" datasheet, chapter 14 (and +probably also in their LR33300/LR33310 datasheet, if it were available in +internet).

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/memorymap/index.html b/memorymap/index.html new file mode 100644 index 0000000..e49c437 --- /dev/null +++ b/memorymap/index.html @@ -0,0 +1,1047 @@ + + + + + + + + + + + + + + + + + + + + + + + + Memory Map - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Memory Map

+

Memory Map

+

  KUSEG     KSEG0     KSEG1
+  00000000h 80000000h A0000000h  2048K  Main RAM (first 64K reserved for BIOS)
+  1F000000h 9F000000h BF000000h  8192K  Expansion Region 1 (ROM/RAM)
+  1F800000h 9F800000h    --      1K     Scratchpad (D-Cache used as Fast RAM)
+  1F801000h 9F801000h BF801000h  4K     I/O Ports
+  1F802000h 9F802000h BF802000h  8K     Expansion Region 2 (I/O Ports)
+  1FA00000h 9FA00000h BFA00000h  2048K  Expansion Region 3 (SRAM BIOS region for DTL cards)
+  1FC00000h 9FC00000h BFC00000h  512K   BIOS ROM (Kernel) (4096K max)
+        FFFE0000h (in KSEG2)     0.5K   Internal CPU control registers (Cache Control)
+
+Additionally, there are a number of memory mirrors.

+

Additional Memory (not mapped to the CPU bus)

+
  1024K   VRAM (Framebuffers, Textures, Palettes) (with 2KB Texture Cache)
+  512K    Sound RAM (Capture Buffers, ADPCM Data, Reverb Workspace)
+  0.5K    CDROM controller RAM (see CDROM Test commands)
+  16.5K   CDROM controller ROM (Firmware and Bootstrap for MC68HC05 cpu)
+  32K     CDROM Buffer (IC303) (32Kx8) (BUG: only two sectors accessible?)
+  128K    External Memory Card(s) (EEPROMs)
+
+

KUSEG,KSEG0,KSEG1,KSEG2 Memory Regions

+

  Address   Name   i-Cache     Write-Queue
+  00000000h KUSEG  Yes         Yes
+  80000000h KSEG0  Yes         Yes
+  A0000000h KSEG1  No          No
+  C0000000h KSEG2  (No code)   No
+
+Kernel Memory: KSEG1 is the normal physical memory (uncached), KSEG0 is a +mirror thereof (but with cache enabled). KSEG2 is usually intended to contain +virtual kernel memory, but in the PSX it's containing Cache Control hardware registers.
+User Memory: KUSEG is intended to contain 2GB virtual memory (on extended MIPS +processors), the PSX doesn't support virtual memory, and KUSEG simply contains +a mirror of KSEG0/KSEG1 (in the first 512MB) (trying to access memory in the +remaining 1.5GB causes an exception).

+

i-Cache

+

The i-Cache can hold 4096 bytes, or 1024 instructions.
+It is only active in the cached regions (KUSEG and KSEG0).
+There are reportedly some restrictions... not sure there... eventually it is +using the LSBs of the address as cache-line number... so, for example, it +couldn't simultaneously memorize opcodes at BOTH address 80001234h, AND at +address 800F1234h (?)

+

Scratchpad

+

MIPS CPUs usually have a d-Cache, but, in the PSX, Sony has assigned it as +what's referenced as the "Scratchpad", mapped to a fixed memory location at +1F800000h..1F8003FFh, ie. it's used as Fast RAM, rather than as cache.
+There \<might> be a way to disable that behavior (via Port FFFE0130h or +so), but, the Kernel is accessing I/O ports via KUSEG, so activating Data Cache +would cause the Kernel to access cached I/O ports.
+The purpose of the scratchpad is to have a more flexible cache system available +to the programmer. Neither the kernel nor the Sony libraries will try to make use +of it, so it is therefore completely up for grabs to the programmer. A good example +would be if you were to write a piece of code that's doing a lot of CRC computation, +to use the 1KB scratchpad to initially load the CRC lookup tables, which incidentally, +is exactly 1KB large. Doing this will relieve SDRAM page changes overhead while reading +the data to checksum linearly, while also keeping the whole CRC code in the i-Cache, +hence being more optimal than what you'd get with an automatic d-Cache system.

+

Memory Mirrors

+

As described above, the 512Mbyte KUSEG, KSEG0, and KSEG1 regions are mirrors of +each other. Additional mirrors within these 512MB regions are:
+

  2MB RAM can be mirrored to the first 8MB (strangely, enabled by default)
+  512K BIOS ROM can be mirrored to the last 4MB (disabled by default)
+  Expansion hardware (if any) may be mirrored within expansion region
+  The seven DMA Control Registers at 1F8010x8h are mirrored to 1F8010xCh
+
+The size of the RAM, BIOS, Expansion regions can be configured by software, for +Expansion Region it's also possible to change base address, see:
+Memory Control
+The Scratchpad is mirrored only in KUSEG and KSEG0, but not in KSEG1.

+

Memory Exceptions

+
  Memory Error ------> Misalignments
+               (and probably also KSEG access in User mode)
+  Bus Error    ------> Unused Memory Regions (including Gaps in I/O Region)
+               (unless RAM/BIOS/Expansion mirrors are mapped to "unused" area)
+
+

Write queue

+

The MIPS CPU has a 4-words deep pass-through write queue, in order to relieve +some bus contention when writing to memory. If reading the same memory location +that just got written into the write queue, it will first be flushed before +being read back from memory.
+It is important to realize that the write queue's mechanism is only viable for +normal memory attached to the main CPU, and that any hardware register state machine +will get messed up by it.
+The typical example is the typical JEDEC standard to access flash, which usually does +the following sequence to read the ID of a flash chip: +

    base[0xAAA] = 0xAA;
+    base[0x555] = 0x55;
+    base[0xAAA] = 0x90;
+    uint8_t mnfctrID = base[0x000];
+    uint8_t deviceId = base[0x002];
+

+

In this example above, if base is located in a memory segment that has the write queue +enabled, even if the low level assembly code will do the first 3 stores before doing 2 loads, +the physical signals sent to that device through the CPU bus will be seen in the sequence: +

store(0xaaa, 0xaa)
+load(0x000)
+store(0x555, 0x55)
+load(0x002)
+store(0xaaa, 0x90)
+

+

Therefore, using KSEG1 that disables the write queue is the only way to ensure that the +operations are done in the proper way.

+

The above is valid for most of the hardware connected to the main CPU, such as the CDROM +controller, exp1, exp2, the SPU, or the GPU. Therefore, using BF80180xh to access the +CDROM registers is more correct than using 1F80180xh.

+

It is noteworthy that the Sony code will still incorrectly use KUSEG as the memory map +for all hardware registers, and they then spend a lot of time writing 4 dummy values +somewhere, in order to ensure the write queue has been flushed.

+

The SN debugger in contrast is properly using the KSEG1 memory map for all the hardware +registers, nullifying the need to flush the write queue when accessing it.

+

It's also noteworthy that doing ANY KSEG1 access (read OR write) will automatically stall +the CPU in order to flush the whole write queue before proceeding with the operation. +Therefore, all BIOS ROM operations will naturally and effectively have the write queue +disabled, as this code requires the CPU to read from KSEG1 constantly.

+

This also means that if using KUSEG for the hardware registers, another method to flush +the write queue, albeit potentially slightly less efficient, would be to simply read +the first byte located at BFC00000h. The latter is what is effectively described as the +official method to flush the write queue in the MIPS handbook. This could be potentially +useful to flush the write queue all at once, instead of flushing it word by word.

+

More Memory Info

+

For Info on Exception vectors, Unused/Garbage memory locations, I/O Ports, +Expansion ROM Headers, and Memory Waitstate Control, etc. see:
+I/O Map
+Memory Control
+EXP1 Expansion ROM Header
+BIOS Memory Map
+BIOS Memory Allocation
+COP0 - Exception Handling
+Unpredictable Things

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/pinouts/index.html b/pinouts/index.html new file mode 100644 index 0000000..a8c10ba --- /dev/null +++ b/pinouts/index.html @@ -0,0 +1,7144 @@ + + + + + + + + + + + + + + + + + + + + + + + + Pinouts - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Pinouts

+

External Connectors

+

Pinouts - Controller Ports and Memory-Card Ports
+Pinouts - Audio, Video, Power, Expansion Ports
+Pinouts - SIO Pinouts

+

Internal Pinouts

+

Pinouts - Chipset Summary
+Pinouts - CPU Pinouts
+Pinouts - GPU Pinouts (for old 160-pin GPU)
+Pinouts - GPU Pinouts (for new 208-pin GPU)
+Pinouts - SPU Pinouts
+Pinouts - DRV Pinouts
+Pinouts - VCD Pinouts
+Pinouts - HC05 Pinouts
+Pinouts - MEM Pinouts
+Pinouts - CLK Pinouts
+Pinouts - PWR Pinouts
+Pinouts - Component List and Chipset Pin-Outs for Digital Joypad, SCPH-1080
+Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1150
+Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1200
+Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-110
+Pinouts - Component List and Chipset Pin-Outs for Namco Lightgun, NPC-103
+Pinouts - Component List and Chipset Pin-Outs for Multitap, SCPH-1070
+Pinouts - Memory Cards

+

Mods/Upgrades

+

Mods - Nocash PSX-XBOO Upload
+Mods - PAL/NTSC Color Mods

+

Pinouts - Controller Ports and Memory-Card Ports

+

Controller Ports and Memory-Card Ports

+

Controller pinout

+
                   _______________________
+Memory card slot: | 9 7 6 | 5 4 3 |  2 1  |
+                  |_=_=_=_|_=_=_=_|__=_=__|
+                   _______________________
+                  | 9 8 7 | 6 5 4 | 3 2 1 |
+Controller port:  | * * * | * * * | * * * |
+                  '\______|_______|______/'
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinDirNameSIO0 pinDescription
1InDAT/MISORXSerial data from device
2OutCMD/MOSITXSerial data to device
3+7.5VSupply for rumble motors
4GNDGround
5+3.5VSupply for main logic
6Out/CSnDTRnPort select
7OutSCKSCKSerial data clock
8In/IRQ/IRQ10Lightgun IRQ (controller only)
9In/ACKDSRData acknowledge IRQ
+

/CSn are two separate signals (/CS1 for controller/memory card port 1, /CS2 for +port 2). All other signals are exactly the same on all four connectors (with the +memory card slots lacking the /IRQ pin and shield).

+

/IRQ pin

+

Most or all controllers leave pin 8 unused, the pin can be used as lightpen +input (not sure if the CPU is automatically latching a timer somewhere?), if +there's no auto-latched timer, then the interrupt would be required to be +handled as soon as possible; ie. don't disable interrupts, and don't "halt" the +CPU for longer periods (as far as I understood, the GTE can halt the CPU when +trying to read results of incomplete operations; to avoid that, one could wait +by software, eg. inserting NOPs, before reading GTE results...?)
+(Some (or maybe all?) existing psx lightguns are reportedly connected to the +Video output on the Multiout port for determining the current cathode ray +position though).

+

Pinouts - Audio, Video, Power, Expansion Ports

+

AV Multi Out (Audio/Video Port)

+

  1      RGB-Video Green
+  2      RGB-Video Red
+  3      Supply +5.0V (eg. supply for external RF adaptor)
+  4      RGB-Video Blue
+  5      Supply Ground
+  6      S-Video C (chrominance)
+  7      Composite Video (yellow cinch)
+  8      S-Video Y (luminance)                    ____________________________
+  9      Audio Left      (white cinch)           |                            |
+  10     Audio Left Ground                       | 12 11 10 9 8 7 6 5 4 3 2 1 |
+  11     Audio Right     (red cinch)             |____________________________|
+  12     Audio Right Ground
+  Shield Video Ground
+
+The standard AV-cable connects only to Pins 7,9,10,11,12,Shield (with pin 1 and +3 and Shield shortcut with each other, used for both audio and video ground).
+The plug on that cable does have additional sparings for pin 1,3,5 (though +without any metal-contacts installed in there) (pin 3,5 would be used as supply +for external RF modulators) (no idea what pin 1 could be used for though?).
+RGB displays may (or may not) be able to extract /SYNC from the Composite +signal, if that doesn't work, note that /SYNC (and separate /VSYNC, /HSYNC +signals) are found on the GPU pinouts, moreover, the GPU outputs 24bit digital +RGB.
+Not sure if a VGA monitor can be connected? The SYNC signals are there (see GPU +pinputs), but the vertical resolution is only 200/240 lines... standard VGA +displays probably support only 400/480 lines (or higher resolutions for newer +multisync SVGA displays) (as far as I know, the classic 200 lines VGA mode is +actually outputting 400 lines, with each line repeated twice).

+

Parallel Port (PIO) (Expansion Port) (CN103)

+

This port exists only on older PSX boards (not on newer PSX boards, and not on +PSone boards).
+The parallel port is used by various third-party unlicensed cheat cartridges and +VCD player addons, as well as by the PSIO optical drive emulator (see below).
+

             ________
+            |        |                            Console Rear View
+      GND ==| 1   35 |== GND                 .-------------------------.
+   /RESET  =| 2   36 |=  DACK5               |1  2  3  ... ... 32 33 34|
+    DREQ5  =| 3   37 |=  /IRQ10              |35 36 37 ... ... 66 67 68|
+     /CS0  =| 4   38 |=  /WR1                |__.-------------------.__|
+(SBEN)GND  =| 5   39 |=  GND(CS2)
+       D0  =| 6   40 |=  D1
+       D2  =| 7   41 |=  D3
+       D4  =| 8   42 |=  D5
+       D6  =| 9   43 |=  D7
+       D8  =|10   44 |=  D9
+      D10  =|11   45 |=  D11
+      D12  =|12   46 |=  D13
+      D14  =|13   47 |=  D15
+       A0  =|14   48 |=  A1
+       A2  =|15   49 |=  A3
+      GND  =|16   50 |=  GND
+    +3.5V ==|17   51 |== +3.5V
+    +7.5V ==|18   52 |== +7.5V
+      GND  =|19   53 |=  GND
+       A4  =|20   54 |=  A5
+       A6  =|21   55 |=  A7
+       A8  =|22   56 |=  A9
+      A10  =|23   57 |=  A11
+      A12  =|24   58 |=  A13
+      A14  =|25   59 |=  A15
+      A16  =|26   60 |=  A17
+      A18  =|27   61 |=  A19
+      A20  =|28   62 |=  A21
+      A22  =|29   63 |=  A23
+      /RD  =|30   64 |=  /WR0
+(/IRQ2)NC  =|31   65 |=  NC(/CS5)
+    SYSCK  =|32   66 |=  LRCK
+     BCLK  =|33   67 |=  SDIN
+      GND ==|34   68 |== GND
+            |________|
+
+On a stock console, pin 5 is ground and pins 31 and 65 are not connected. These +pins are repurposed by the PSIO's switch board to allow the PSIO to emulate the +CD-ROM drive; when pin 5 (SBEN) is high, the switch board disconnects the CPU's +/CS5 and /IRQ2 pins from the CD drive and routes them to pins 65 and 31 +respectively, allowing the PSIO to take over. Pin 39 can also be repurposed in a +similar way to allow /CS2 and thus the internal BIOS ROM to be overridden.
+For more details see:
+pcsx-redux - PIO port
+pcsx-redux - Switch Board

+

Internal Power Supply (PSX)

+

The PSX contains an internal power supply, however, like the PSone, it's only +having a "Standby" button, which merely disconnects 3.5V and 7.9V from the +mainboard. The actual power supply remains powered, and wastes energy day and +night, thanks Sony!

+

External Power Supply (PSone)

+
  Inner +7.5V DC 2.0A   (inside diameter 0.8mm)
+  Outer GND             (outside diameter 5.0mm)
+
+

Pinouts - SIO Pinouts

+

Serial Port

+

That port exists only on original Playstation (not on the PSone). The shape of +the Serial Port is identical to the 12pin Multiout (audio/video) port, but with +only 8pins.
+

  1 SIO1 In  RXD receive data    (from remote TXD)
+  2 SIO2 -   VCC +3.5VDC         (supply, eg. for voltage conversion)
+  3 SIO3 In  DSR                 (from remote DTR)           _________________
+  4 SIO4 Out TXD transmit data   (to remote RXD)            |                 |
+  5 SIO5 In  CTS clear to send   (from remote RTS)          | 8 7 6 5 4 3 2 1 |
+  6 SIO6 Out DTR                 (to remote DSR)            |_________________|
+  7 SIO7 -   GND Ground          (supply, eg. for voltage conversion)
+  8 SIO8 Out RTS request to send (to remote CTS)
+  Shield     GND Ground          (to/from remote GND)
+
+Can be used to communicate with another PSX via simple cable connection. With +an external RS232 adaptor (for voltage conversion) it could be also used to +communicate with a PC, a mouse, a modem, etc.

+

PSone Serial Port

+

The PSone doesn't have an external serial connector, however, easy to use +soldering points for serial port signals are found as cluster of 5 soldering +points (below CPU pin52), and a single soldering point (below CPU pin100), +arranged like so (on PM-41 boards) (might be different on PM-41(2) boards):
+

                     CPU70.RTS
+               CPU71.CTS   CPU74.TxD
+                     CPU72.DTR   CPU75.RxD                       CPU73.DSR
+
+The three outputs (RTS,DTR,TXD) are left floating, the RXD input is wired via a +1K ohm pull-up resistor to 3.5V, the other two inputs (CTS,DSR) are wired via +1K ohm pull-down resistors to GND.
+If you want to upgrade the PSone, remove that resistors, and then install the +PSX-style serial circuit (as shown below), or, think of a more simplified +circuit without (dis-)inverted signals.

+

PSX Serial Port Connection (PU-23 board) (missing on PM-41 board)

+

The PSX serial circuit basically consists of a few transistors, diodes, and +resistors. The relevant part is that most of the signals are inverted - +compared with RS232 signals, the CPU uses normal high/low levels (of course +with 0V and 3.5V levels, not -12V and +12V), and the signals at the serial port +socket are inverted. Ie. if you want to built a RS232 adaptor, you must either +externally undo the inversion, or, disconnect the transistors, and wire your +circuit directly to the CPU signals.
+

  SIO8    SIO6    SIO4    SIO1    SIO3    SIO5    SIO2    SIO7---GND
+    |       |       |       |       |       |      |
+  FB112   FB114   FB116   FB115   FBnnn   FBnnn    o--L102-------3.5V
+    |       |       |       |       |       |
+    |       |       o-------|-------|-------|--------diode-------GND
+    |       |       |       o-------|-------|--------diode-------GND
+    |       |       |       |       o-------|--------diode-------GND
+    |       |       |       |       |       o--------diode-------GND
+    |       |       |       |       |       |
+    |       |       |       o-------|-------|--------[1K]--------3.5V
+    |       |       |       |       o-------|--------[1K]--------3.5V
+   [22]    [22]    [22]    [22]     |       o--------[1K]--------3.5V
+    |       |       |       |       |       |
+   Q105-----|-------|-------|-------|-------|--------------------GND
+    |      Q105-----|-------|-------|-------|--------------------GND
+    |       |       |       |      Q106-----|--------------------GND
+    |       |       |       |       |      Q106------------------GND
+    |       |       |       |       |       |
+    |       |       |       |       o-------|--------[470]-------3.5V
+    |       |       |       |       |       o--------[470]-------3.5V
+    |       |       |       |       |       |
+   RTS     DTR     TxD     RxD     DSR     CTS
+  CPU70   CPU72   CPU74   CPU75   CPU73   CPU71   <-- CPU Pin Numbers
+   out     out     out     in      in      in
+
+All six signals are passed through fuses (or loops or so). The three inputs +have 1K ohm pull-ups, and diodes as protection against negative voltages, two +of the inputs are inverted via transistors, with 470 ohm pull-ups at the CPU +side, the other input is passed through 22 ohm to the CPU. The three outputs +are also passed through 22 ohm, one of them having a diode as negative voltage +protection, the other two are inverted via transistors (which may also serve as +negative voltage protection).
+Note that there is no positive voltage protection (ie. +12V inputs would do no +good, also strong -12V inputs might overheat the diodes/fuses, so if you want +to use RS232 voltages, better use a circuit for voltage conversion).

+

Serial RS232 Adaptor

+

The PSX serial port uses 0V/3.5V logic, whilst RS232 uses -5V/+5V...-15V/+15V +logic. An example circuit for converting the logic levels would be:
+

    PSX.VCC--+||--PSX.GND  PSX.GND----DSUB.5.GND----DSUB.SHIELD  DSUB.1,9----NC
+                   ______                                 ______
+  ,-----------||+-|1   16|-------PSX.VCC ,-----------||+-|1   16|-------PSX.VCC
+  | PSX.GND---||+-|2   15|-------PSX.GND | PSX.GND---||+-|2   15|-------PSX.GND
+  '---------------|3   14|----DSUB.3.TXD '---------------|3   14|--- N/A
+         ,---+||--|4   13|----DSUB.2.RXD        ,---+||--|4   13|--- N/A
+         '--------|5   12|-------PSX.RXD        '--------|5   12|--- N/A
+    PSX.GND--+||--|6   11|-------PSX.TXD   PSX.GND--+||--|6   11|--- N/A
+    DSUB.7.RTS----|7   10|--o<|--PSX.RTS   DSUB.4.DTR----|7   10|--o<|--PSX.DTR
+    DSUB.8.CTS----|8    9|--|>o--PSX.CTS   DSUB.6.DSR----|8    9|--|>o--PSX.DSR
+                  |______|                               |______|
+
+Parts List: 1 or 2 MAX232 chips (voltage conversion), 0 or 1 7400 (NAND, used +as inverter), 4 or 8 1uF/16V capacitors, 1x 10uF/16V capacitor, 1x 9pin male +SubD plug.
+The four inverters are needed only for external adapters (which need to undo +the transistor inversion on the PSX mainboard) (ie. the inverters are not +needed when when connecting the circuit directly to the PSX CPU).
+The second MAX232 chip is needed only if DTR/DSR "not ready" conditions are +required (for an "always ready" condition: DSUB.4.DTR can be wired to -8.5V, +which is available at Pin6 of the first MAX232 chip, and PSX.DSR can be wired +to +3.5V).
+With the above DSUB pin numbers, peripherals like mice or modems can be +connected directly to the circuit. For connection to another computer, use a +"null modem" cable (with crossed RXD/TXD, RTS/CTS, DTR/DSR wires).
+The circuit works with both VCC=5V (default for MAX232) and with VCC=3.5V +(resulting in slightly weaker signals, but still strong enough even for serial +mice; which are mis-using the RS232 signals as power supply).

+

Pinouts - Chipset Summary

+

PSX/PSone Mainboards

+

  Board    Expl.
+  PU-7     PSX, with AV multiout+cinch+svideo, GPU in two chips (160+64pins)
+  PU-8     PSX, with AV multiout+cinch, four 8bit Main RAM chips
+            EARLY-PU-8: "PU-8 1-658-467-11, N4" --> old chipset, resembles PU-7
+            LATE-PU-8:  "PU-8 1-658-467-22, N6" --> new chipset, other as PU-7
+  PU-9     PSX, without SCPH-number (just sticker saying "NOT FOR SALE, SONY)
+  PU-16    PSX, with extra Video CD daughterboard (for SCPH-5903)
+  PU-18    PSX, with AV multiout only, single 32bit Main RAM (instead 4x8bit)
+  PU-20    PSX, unknown if/how it differs from PU-18
+  PU-22    PSX, unknown if/how it differs from PU-18
+  PU-23    PSX, with serial port, but without expansion port
+  PM-41    PSone, older PSone, for GPU/SPU with RAM on-board (see revisions)
+  PM-41(2) PSone, newer PSone, for GPU/SPU with RAM on-chip
+
+There are at least two revisions of the "PM-41" board:
+
  PM-41, 1-679-335-21  PSone with incomplete RGB signals on multiout port
+  PM-41, 1-679-335-51  PSone with complete RGB signals on multiout port
+
+The "incomplete" board reportedly requires to solder one wire to the multiout +port to make it fully functional... though no idea which wire... looks like the ++5V supply? Also, the capacitors near multiout are arranged slightly +differently.

+

CPU chips

+

  IC103 - 208pin - "SONY CXD8530BQ"  ;seen on PU-7 board
+  IC103 - 208pin - "SONY CXD8530CQ"  ;seen on PU-7 and PU-8 boards
+  IC103 - 208pin - "SONY CXD8606Q"   ;seen in PU-18 schematic
+  IC103 - 208pin - "SONY CXD8606AQ"  ;seen on PU-xx? board
+  IC103 - 208pin - "SONY CXD8606BQ"  ;seen on PM-41, PU-23, PU-20 boards
+  IC103 - 208pin - "SONY CXD8606CQ"  ;seen on PM-41 board, too
+
+These chips contain the MIPS CPU, COP0, and COP2 (aka GTE), MDEC and DMA.

+

GPU chips - Graphics Processing Unit

+
  IC203 - 160pin - "SONY CXD8514Q"   ;seen on PU-7 and EARLY-PU-8 boards
+  IC203 - 208pin - "SONY CXD8561Q"   ;seen on LATE-PU-8 board
+  IC203 - 208pin - "SONY CXD8561BQ"  ;seen on PU-18, PU-20 boards
+  IC203 - 208pin - "SONY CXD8561CQ"  ;seen on PM-41 board
+  IC203 - 208pin - "SONY CXD9500Q"   ;with on-chip RAM ;for PM-41(2) board
+  IC21  - 208pin - "SONY CXD8538Q"   ;seen on GP-11 (namco System 11) boards
+  IC103 - 208pin - "SONY CXD8654Q"   ;seen on GP-15 (namco System 12) boards
+
+

SPU chips - Sound Processing Unit

+
  IC308 - 100pin - "SONY CXD2922Q" (SPU)               ;PU-7 and EARLY-PU-8
+  IC308 - 100pin - "SONY CXD2922BQ"(SPU)               ;EARLY-PU-8
+  IC308 - 100pin - "SONY CXD2925Q" (SPU)               ;LATE-PU-8, PU-18, PU-20
+  IC732 - 208pin - "SONY CXD2938Q" (SPU+CDROM)         ;PSone/PM-41 Board
+  IC732 - 176pin - "SONY CXD2941R" (SPU+CDROM+SPU_RAM) ;PSone/PM-41(2) Board
+  IC402 - 24pin  - "AKM AK4309VM"  (Serial 2x16bit DAC);older boards only
+  IC405 - 8pin   - "NJM2100E (TE2)" Audio Amplifier    ;PU-8 and PU-22 boards
+  IC405 - 14pin  - "NJM2174" Audio Amplifier with Mute ;later boards
+
+

IC106 CPU-RAM / Main RAM chips

+
  IC106/IC107/IC108/IC109 - NEC 424805AL-A60 (28pin, 512Kx8) (PU-8 board)
+  IC106 - "Samsung K4Q153212M-JC60" (70pin, 512Kx32) (newer boards)
+  IC106 - "Toshiba T7X16 (70pin, 512Kx32) (newer boards, too)
+
+

GPU-RAM / Video RAM chips

+

  IC201 - 64pin NEC uPD482445LGW-A70-S ;VRAM  ;\on PU-7 and EARLY-PU-8 board
+  IC202 - 64pin NEC uPD482445LGW-A70-S ;VRAM  ;/split into 2 chips !
+  IC201 - 64pin SEC KM4216Y256G-60     ;VRAM  ;\on other PU-7 board
+  IC202 - 64pin SEC KM4216Y256G-60     ;VRAM  ;/split into 2 chips !
+  IC201 - 100pin - Samsung KM4132G271BQ-10 (128Kx32x2)  ;-on later boards
+  IC201 - 100pin - Samsung K4G163222A-PC70 (256Kx32x2)  ;-on PM-41
+
+Note: The older 64pin VRAM chips are special dual-ported DRAM, the newer 100pin +VRAM chips are just regular DRAM.
+Note: The PM-41 board uses a 2MB VRAM chip (but allows to access only 1MB)
+Note: The PM-41(2) board has on-chip RAM in the GPU (no external memory chip)

+

IC310 - SPU-RAM - Sound RAM chips

+

  IC310 - 40pin - "TOSHIBA TC51V4260DJ-70"  ;seen on PU-8 board
+  IC310 - 40pin - EliteMT M11B416256A-35J (256K x 16bit)
+
+Note: The PM-41(2) board has on-chip RAM in the SPU (no external memory chip)

+

BIOS ROM

+
  IC102 - 40pin - "SONY ..."          ;seen on PU-7 & early-PU-8 board (40pin!)
+  IC102 - 44pin - "SONY M538032E-02"  ;seen on PU-16 (video CD, 1Mbyte BIOS)
+  IC102 - 32pin - "SONY M534031C-25"  ;seen on later-PU-8 board
+  IC102 - 32pin - "SONY 2022"         ;seen on PU-8 (1-658-467-23)
+  IC102 - 32pin - "SONY 2030"         ;seen on PU-18 board
+  IC102 - 32pin - "SONY M534031E-47"  ;seen on PM-41 board and PM-41(2)
+  IC102 - 32pin - "SONY M27V401D-41"  ;seen on PM-41 board, too
+
+

Oscillators and Clock Multiplier/Divider

+
  X101 - 4pin - "67.737" (NTSC, presumably)         ;PU-7 .. PU-20
+  X201 - 2pin - "17.734" (PAL) or "14.318" (NTSC)   ;PU-22 .. PM-41(2)
+  IC204 - 8pin - "2294A" (PAL) or <unknown?> (NTSC) ;PU-22 .. PM-41(2)
+
+

Voltage Converter (for +7.5V to +5.0V conversion)

+
  IC601 - 3pin - "78M05" or "78005"  ;used in PSone
+
+

Pulse-Width-Modulation Power-Control Chip

+

  IC606 16pin/10mm "TL594CD" (alternately to IC607) ;seen on PM-41 board
+  IC607 16pin/5mm  "T594"    (alternately to IC606) ;seen on PM-41 board, too
+
+The PM-41 board has locations for both IC606 and IC607, some boards have the +bigger IC606 (10mm) installed, others the smaller IC607 (5mm), both chips have +exactly the same pinouts, the only difference is the size.

+

Reset Generator

+
  IC002 - 8pin - <not installed> (would be alternately to IC003) ;\on PSone
+  IC003 - 5pin - <usually installed>                             ;/
+  IC101 - 5pin - M51957B (Reset Generator) (on PSX-power supply boards)
+
+

CDROM Chips

+

  U42   80pin    SUB-CPU (CXP82300) with piggyback EPROM ;DTL-H2000
+  IC304 80pin    SUB-CPU (MC68HC05L16) 80pin package     ;PU-7 and EARLY-PU-8
+  IC304 52pin    SUB-CPU (MC68HC05G6) 52pin package      ;LATE-PU-8 and up
+  IC305 - 100pin SONY CXD1199BQ (Decoder/FIFO)           ;PU-7
+  IC305 - 100pin SONY CXD1815Q  (Decoder/FIFO)           ;PU-8, PU-18
+  IC309 - 100pin SONY CXD2516Q  (Signal Processor)       ;PU-7 (100pin!)
+  IC309 - 80pin  SONY CXD2510Q  (Signal Processor)       ;PU-8 and DTL-H2510
+  IC702 - 48pin  SONY CXA1782BR (Servo Amplifier)        ;PU-7, PU-8
+  IC101 - 100pin SONY CXD2515Q  (=CXD2510Q+CXA1782BR)    ;DTL-H2010
+  IC701 - 100pin SONY CXD2545Q  (=CXD2510Q+CXA1782BR)    ;PU-18
+  IC720 - 144pin SONY CXD1817R  (=CXD2545Q+CXD1815Q)     ;PU-20
+  IC102 - 28pin - "BA6297AFP"           ;seen on DTL-H2010 drives
+  IC704 - 28pin - "BA6398FP"            ;seen on PU-7
+  IC722 - 28pin - "BA6397FP"            ;seen on late PU-8
+  IC722 - 28pin - "BA5947FP"            ;seen on PM-41 and various boards
+  IC722 - 28pin - "Panasonic AN8732SB"  ;seen on PM-41 board
+  ICxxx - 20pin  SONY CXA1571N    (RF Amplifier) (on DTL-H2010 drives)
+  IC703 - 20pin  SONY CXA1791N    (RF Amplifier) (on PU-18 boards)
+  IC723 - 20pin  SONY CXA2575N-T4 (RF Matrix Amplifier) (on PU-22 .. PM-41(2))
+
+Note: The SUB-CPU contains an on-chip BIOS (which does exist in at least seven +versions, plus US/JP/PAL-region variants, plus region-free debug variants).

+

RGB Chips

+
  IC207 64pin "SONY CXD2923AR" VRAM Data to Analog RGB         ;\oldest
+  IC501 24pin "SONY CXA1645M" Analog RGB to Composite          ;/
+  IC202 44pin "Philips TDA8771H" Digital RGB to Analog RGB     ;\old boards
+  IC202 44pin "Motorola MC141685FT" Digital RGB to Analog RGB  ;/
+  IC?   48pin "H7240AKV" 24bit RGB to Analog+Composite         ;-SCPH-7001?
+  IC502 48pin "SONY CXA2106R-T4" 24bit RGB to Analog+Composite ;-newer boards
+
+

MISC

+
  CDROM Drive: "KSM-440BAM" ;seen used with PM-41 board
+  IC602 5pin           "L/\1B" or "<symbol> 3DR"
+
+

Controller/Memory Card Chips

+
  U?  24pin "9625H, CFS8121"     ;SCPH-1080, digital pad (alternate?)
+  U?   ?pin "SC438001"           ;SCPH-1080, digital pad (alternate?)
+  U?  32pin "(M), SC401800"      ;SCPH-1080, digital pad
+  U?  32pin "(M), SC442116"      ;SCPH-xxxx, mouse
+  IC? 64pin "SONY CXD103, -166Q" ;SCPH-1070, multitap
+  U1  42pin "SD657, 9702K3006"   ;SCPH-1150, analog pad, single motor
+  U1  42pin "SD657, 9726K3002"   ;SCPH-1180, analog pad, without motor
+  U1  44pin "SONY CXD8771Q"      ;SCPH-1200, analog pad, two motors (PSX)
+  U1  44pin "SD707, 039 107"     ;SCPH-110,  analog pad, two motors (PSone)
+  U1  44pin "SD787A"             ;SCPH-xxx,  analog pad, two motors (PS2?)
+  U?  64pin "SONY CXD8732AQ"     ;SCPH-1020, memory card, on-chip FLASH
+  U?  XXpin other chips          ;SCPH-xxxx, memory card, external FLASH
+  U1  44pin "NAMCO103P"          ;NPC-103, namco lightgun
+
+

Pinouts - CPU Pinouts

+

CPU Pinouts (IC103)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNamePinNamePinNamePinName
1VDD53VDD105VDD157VDD
2VDD54VDD106VDD158VDD
3CRYSTALN55RAM.A11107SBUS.D0159TIMER1.CLK
4CRYSTALP56RAM.A10108SBUS.D1160TIMER0.CLK
5RAM.D3157RAM.A9109SBUS.D2161GPU.D0
6RAM.D3058RAM.A8110SBUS.D3162GPU.D1
7RAM.D2959RAM.A7111SBUS.D4163GPU.D2
8RAM.D2860RAM.A6112SBUS.D5164GPU.D3
9RAM.D2761RAM.A5113SBUS.D6165GPU.D4
10RAM.D2662RAM.A4114SBUS.D7166GPU.D5
11RAM.D2563RAM.A3115SBUS.D8167GPU.D6
12RAM.D2464RAM.A2116SBUS.D9168GPU.D7
13RAM.D2365GND117GND169GPU.D8
14VDD66VDD118VDD170GND
15GND67RAM.A1119SBUS.D10171VDD
16RAM.D2268RAM.A0120SBUS.D11172GPU.D9
17RAM.D2169/RC_NET121SBUS.D12173GPU.D10
18RAM.D2070SIO1./RTS122SBUS.D13174GPU.D11
19RAM.D1971SIO1./CTS123SBUS.D14175GPU.D12
20RAM.D1872SIO1./DTR124SBUS.D15176GPU.D13
21RAM.D1773SIO1./DSR125SBUS.A0177GPU.D14
22RAM.D1674SIO1.TX126SBUS.A1178GPU.D15
23RAM.D1575SIO1.RX127SBUS.A2179GPU.D16
24RAM.D1476/EXT_RESET128SBUS.A3180GPU.D17
25RAM.D1377SIO0./DTR2129SBUS.A4181GPU.D18
26VDD78GND130GND182GND
27GND79VDD131VDD183VDD
28RAM.D1280SIO0./DTR1132SBUS.A5184GPU.D19
29RAM.D1181SIO0./SCK133SBUS.A6185GPU.D20
30RAM.D1082SIO0./DSR134SBUS.A7186GPU.D21
31RAM.D983SIO0.TX135SBUS.A8187GPU.D22
32RAM.D884SIO0.RX136SBUS.A9188GPU.D23
33RAM.D785SBUS.DACK5_PIO137SBUS.A10189GPU.D24
34RAM.D686SBUS.DREQ5_PIO138SBUS.A11190GPU.D25
35RAM.D587SBUS.DACK4_SPU139SBUS.A12191GPU.D26
36RAM.D488SBUS.DREQ4_SPU140SBUS.A13192GPU.D27
37RAM.D389/IRQ10_PIO141SBUS.A14193GPU.D28
38VDD90/IRQ9_SPU142SBUS.A15194GPU.D29
39GND91GND143GND195GND
40RAM.D292VDD144VDD196VDD
41RAM.D193/CSHTST145SBUS.A16197GPU.D30
42RAM.D094/IRQ2_CDROM146SBUS.A17198GPU.D31
43RAM./WE95SBUS./CS5_CDROM147SBUS.A18199/IRQ0
44RAM./RAS196SBUS./CS4_SPU148SBUS.A19200GPU.DREQ2
45RAM./RAS097SBUS./CS2_BIOS149SBUS.A20201SYSCK0
46RAM./CAS398SBUS./CS0_EXP1150SBUS.A21202GPU.DACK2
47RAM./CAS299SBUS./WR1151SBUS.A22203GPU./WR
48RAM./CAS1100SBUS./WR0152SBUS.A23204GPU./RD
49RAM./CAS0101SBUS./RD153GPU.A0205GPU./CS7
50VDD102/IRQ1_GPU154SYSCK1206DSYSCK0
51GND103GND155GND207GND
52GND104GND156GND208GND
+

Pin5-68 = Main RAM bus. Pin 95-152 = System bus. Pin 102,153,159-206 = Video +bus.

+

CPU Pinout Notes

+
    +
  • On (some?) retail consoles, RAM.A11 is wired to the RAM chips' A8 line, + while RAM.A8 and RAM.A10 are left unconnected.
  • +
  • RAM./RAS1 is only used on systems with 4 or 8 MB RAM.
  • +
  • /RC_NET is tied to 3.5V, while /CSHTST (test pin?) is wired to ground.
  • +
  • SYSCK0 (33 MHz), DSYSCK0 (67 MHz) and SYSCK1 (33 MHz) are clock outputs + from the CPU to the rest of the system.
  • +
  • TIMER0.CLK is fed from the GPU's DOTCK output, while TIMER1.CLK is fed + from its HBLANK output.
  • +
  • CRYSTALP and CRYSTALN are meant to be connected to a crystal, however all + known console models feed CRYSTALP with the clock generated by an external + oscillator and leave CRYSTALN open.
  • +
  • SBUS./WR1 (upper byte write strobe) is routed to the expansion port but + otherwise left unused, as all system bus devices are either 8-bit (CD-ROM, + BIOS ROM) or only support 16-bit writes (SPU).
  • +
  • SBUS.A0-SBUS.A23 are latched outputs and are not affected by RAM and GPU + addressing.
  • +
+

Pinouts - GPU Pinouts (for old 160-pin GPU)

+

Old 160-pin GPU is used on PU-7 boards and EARLY-PU-8 boards.

+

IC203 - Sony CXD8514Q - Old 160pin GPU for use with Dual-ported VRAM

+

Unlike the later 208pin GPU's, the old 160pin GPU has less supply pins, and, it +doesn't have a 24bit RGB output (nor any other video output at all), instead, +it's used with a RGB D/A converter that reads the video data directly from the +Dual-ported VRAM chips (ie. from special RAM chips with two data busses, one +bus for GPU read/write access, and one for the RGB video output).
+

  1-VCC     21-GND  41-D16  61-D2     81-D12'a  101-GND     121-D7'b 141-GND
+  2-GND     22-D31  42-D15  62-D1     82-D11'a  102-DT/OE'b 122-D6'b 142-53MHz
+  3-/GPUCS  23-D30  43-VCC  63-D0     83-D10'a  103-DT/OE'a 123-D5'b 143-VCC
+  4-GPU.A2  24-D29  44-GND  64-GND    84-D9'a   104-/RAS    124-D4'b 144-GND
+  5-/GPURD  25-D28  45-D14  65-VCC    85-D8'a   105-/WE'a   125-D3'b 145-FSC
+  6-/GPUWR  26-D27  46-D13  66-A8'a   86-VCC    106-/WE'b   126-D2'b 146-VCC
+  7-DACK2   27-D26  47-D12  67-A7'a   87-GND    107-/SE     127-D1'b 147-GND
+  8-/RESET  28-VCC  48-D11  68-A6'a   88-D7'a   108-SC      128-D0'b 148-DOTCLK
+  9-VCC     29-GND  49-D10  69-A5'a   89-D6'a   109-VCC     129-VCC  149-VCC
+  10-GND    30-D25  50-GND  70-GND    90-D5'a   110-GND     130-GND  150-GND
+  11-SYSCK0 31-D24  51-VCC  71-A4'a   91-D4'a   111-D15'b   131-A8'b 151-MEMCK1
+  12-VCC    32-D23  52-D9   72-A3'a   92-D3'a   112-D14'b   132-A7'b 152-MEMCK2
+  13-GND    33-D22  53-D8   73-A2'a   93-D2'a   113-D13'b   133-A6'b 153-BLANK
+  14-DREQ2  34-D21  54-D7   74-A1'a   94-D1'a   114-D12'b   134-A5'b 154-/24BPP
+  15-/IRQ1  35-D20  55-D6   75-A0'a   95-D0'a   115-D11'b   135-A4'b 155-/CSYNC
+  16-HBLANK 36-VCC  56-D5   76-GND    96-VCC    116-D10'b   136-A3'b 156-/HSYNC
+  17-VBLANK 37-GND  57-D4   77-VCC    97-DSF    117-D9'b    137-A2'b 157-/VSYNC
+  18-high?  38-D19  58-D3   78-D15'a  98-/CAS'b 118-D8'b    138-A1'b 158-VCC
+  19-high?  39-D18  59-GND  79-D14'a  99-/CAS'a 119-VCC     139-A0'b 159-GND
+  20-VCC    40-D17  60-VCC  80-D13'a  100-VCC   120-GND     140-VCC  160-DSYSCK0
+
+Pin 1-63,148,160 = CPU Bus, Pin 66-139 = VRAM Bus (two chips, A and B), Pin +142-155 = Misc (CXA and RGB chips), Pin 18-19,156-157 = Test points.
+Pin 3,5,6,11,98,99,102,103,108,148,160 via 22 ohm. Pin 104,105,106 via 100 ohm. +Pin 107 via 220 ohm. Pin 155 via 2200 ohm. Pin 145 via 220+2200 ohm.
+
  151-?       ---   (mem clock?)
+  152-?             (mem clock?)
+  153-BLANK         (high in HBLANK & VBLANK)
+  154-/24BPP        (high=15bpp, low=24bpp)
+  156-/HSYNC        rate:65us=15KHz, low:3.5us
+  157-/VSYNC        rate:20ms=50Hz, low:130us=TwoLines
+

+

IC207 - SONY CXD2923AR - Digital VRAM to Analog RGB Converter (for old GPU)

+

This chip is used with the old 160pin GPU and two Dual-ported VRAM chips. The +2x16bit databus is capable of reading up to 32bits of VRAM data, and the chip +does then extract the 15bit or 24bit RGB values from that data (depending on +the GPU's current color depth).
+The RGB outputs (pin 5,7,9) seem to be passed through transistors and +capacitors... not sure how the capacitors could output constant voltage +levels... unless the RGB signals are actually some kind of edge-triggering PWM +pulses rather than real analog levels(?)
+

  1-test?  9-BLUE    17-GND     25-D0'a  33-D8'a   41-D15'a  49-D7'b   57-D13'b
+  2-test?  10-Vxx    18-MEMCK1  26-D1'a  34-D9'a   42-D0'b   50-D8'b   58-D14'b
+  3-Vxx    11-test?  19-/24BPP  27-D2'a  35-D10'a  43-D1'b   51-D9'b   59-D15'b
+  4-Vxx    12-test?  20-MEMCK2  28-D3'a  36-D11'a  44-D2'b   52-D10'b  60-GND
+  5-RED    13-test?  21-BLANK   29-D4'a  37-D12'a  45-D3'b   53-D11'b  61-GND
+  6-Vxx    14-aGND?  22-DOTCLK  30-D5'a  38-D13'a  46-D4'b   54-D12'b  62-GND
+  7-GREEN  15-aGND?  23-GND     31-D6'a  39-D14'a  47-D5'b   55-GND    63-test?
+  8-GND    16-aGND?  24-Vxx     32-D7'a  40-GND    48-D6'b   56-Vxx    64-GND
+
+Pin 5,7,9 = RGB outputs (via transistors and capacitors?), Pin 18-22 = GPU, Pin +25-59 = VRAM (chip A and B), Pin 1-2,11-13,63 = Test points.

+

IC201 - 64pin NEC uPD482445LGW-A70-S or SEC KM4216Y256G-60 (VRAM 256Kx16)

+

IC202 - 64pin NEC uPD482445LGW-A70-S or SEC KM4216Y256G-60 (VRAM 256Kx16)

+

These are special Dual-ported VRAM chips (with two data busses), the D0-D15 +pins are wired to the GPU (for read/write access), the Q0-Q15 pins are wired to +the RGB D/A converter (for sequential video output).
+

  1-VCC     9-Q2    17-D5    25-/UWE  33-GND   41-DSF  49-Q10   57-VCC
+  2-/DT/OE  10-D2   18-VCC   26-/RAS  34-A3    42-GND  50-D11   58-D14
+  3-GND     11-Q3   19-Q6    27-A8    35-A2    43-D8   51-Q11   59-Q14
+  4-Q0      12-D3   20-D6    28-A7    36-A1    44-Q8   52-GND   60-D15
+  5-D0      13-GND  21-Q7    29-A6    37-A0    45-D9   53-D12   61-Q15
+  6-Q1      14-Q4   22-D7    30-A5    38-QSF   46-Q9   54-Q12   62-GND
+  7-D1      15-D4   23-GND   31-A4    39-/CAS  47-VCC  55-D13   63-/SE
+  8-VCC     16-Q5   24-/LWE  32-VCC   40-NC    48-D10  56-Q13   64-SC
+
+The 8bit /LWE and /UWE write signals are shortcut with each other and wired to +the GPU's 16bit /WE write signal.

+

IC501 24pin "SONY CXA1645M" Analog RGB to Composite (older boards only)

+

  1-GND1  4-BIN   7-NPIN   10-SYNCIN  13-IREF  16-YOUT   19-VCC2   22-GOUT
+  2-RIN   5-NC    8-BFOUT  11-BC      14-VREF  17-YTRAP  20-CVOUT  23-ROUT
+  3-GIN   6-SCIN  9-YCLPC  12-VCC1    15-COUT  18-FO     21-BOUT   24-GND2
+
+Used only on older boards (eg. PU-7, PU-8, PU-16), newer boards generate +composite signal via 48pin IC502.
+Pin7 (NPIN): NTSC=VCC, PAL=GND. Pin6 (SCIN aka FSC): Sub Carrier aka PAL/NTSC +color clock, which can be derived from three different sources:
+
  GPU pin 145 (old 160-pin GPU)
+  GPU pin 154 (new 208-pin GPU)
+  IC204 (on later boards, eg. PSone)
+
+for the color clocks from GPU pins, the GPU does try to automatically generate +PAL or NTSC clock depending on current frame rate, which is resulting in +"wrong" color clock when chaning between 50Hz/60Hz mode).

+

Pinouts - GPU Pinouts (for new 208-pin GPU)

+

New 206-pin GPU is used LATE-PU-8 boards and up.

+

GPU Pinouts (IC203)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNamePinNamePinNamePinName
1HOST./CS53HOST.D10105GND157NTSC/PAL
2HOST.A054HOST.D9106VDD158/VSYNC
3HOST./RD55HOST.D8107SGRAM.D9159/HSYNC
4HOST./WR56HOST.D7108SGRAM.D8160DAC.B0
5HOST.DACK57HOST.D6109SGRAM.D7161DAC.B1
6/RESET58HOST.D5110SGRAM.D6162DAC.B2
7VDD59HOST.D4111SGRAM.D5163DAC.B3
8GND60GND112SGRAM.D4164GND
9/SYSCLK61VDD113GND165VDD
10VDD62HOST.D3114VDD166DAC.B4
11GND63HOST.D2115SGRAM.D3167DAC.B5
12HOST.DREQ64HOST.D1116SGRAM.D2168DAC.B6
13HOST./IRQ65HOST.D0117SGRAM.D1169DAC.B7
14HBLANK66GND118SGRAM.D0170DAC.G0
15GND67VDD119GND171DAC.G1
16VDD68PCKSL2120VDD172DAC.G2
17VBLANK69PCKSL1121SGRAM./CS1173DAC.G3
18HVHLD70PCKSL0122SGRAM./CS0174GND
19GND71TEST3123SGRAM.DSF175VDD
20GND72TEST2124SGRAM./RAS176DAC.G4
21NC73TEST1125SGRAM./CAS177DAC.G5
22VDD74TEST0126SGRAM./WE178DAC.G6
23VDD75VDD127SGRAM.DQMH179DAC.G7
24HOST.D3176GND128SGRAM.DQML180DAC.R0
25HOST.D3077SGRAM.D31129GND181DAC.R1
26HOST.D2978SGRAM.D30130VDD182DAC.R2
27HOST.D2879SGRAM.D29131MCLKOUT183DAC.R3
28HOST.D2780VDD132GND184GND
29VDD81GND133VDD185VDD
30GND82SGRAM.D28134MCLKIN186DAC.R4
31HOST.D2683SGRAM.D27135GND187DAC.R5
32HOST.D2584SGRAM.D26136VDD188DAC.R6
33HOST.D2485SGRAM.D25137SGRAM.A9189DAC.R7
34HOST.D2386SGRAM.D24138SGRAM.A8190GND
35HOST.D2287VDD139SGRAM.A7191VDD
36HOST.D2188GND140SGRAM.A6192VCLK_NTSC
37VDD89SGRAM.D23141VDD193VDD
38GND90SGRAM.D22142GND194GND
39HOST.D2091SGRAM.D21143SGRAM.A5195VDD
40HOST.D1992SGRAM.D20144SGRAM.A4196VCLK_PAL
41HOST.D1893SGRAM.D19145SGRAM.A3197VDD
42HOST.D1794SGRAM.D18146GND198GND
43VDD95SGRAM.D17147VDD199PCK
44GND96GND148SGRAM.A2200GND
45HOST.D1697VDD149SGRAM.A1201VDD
46HOST.D1598SGRAM.D16150SGRAM.A0202DMASK
47HOST.D1499SGRAM.D15151VDD203ODE2
48HOST.D13100SGRAM.D14152GND204GND
49HOST.D12101SGRAM.D13153FSC205VDD
50HOST.D11102SGRAM.D12154VDD206/DSYSCK
51VDD103SGRAM.D11155GND207GND
52GND104SGRAM.D10156CSYNC208VDD
+

Pin 77..150 = Video RAM Bus. Pin 156..189 = Video Out Bus. Other = CPU Bus. Pin +153: Sub Carrier (NC on newer boards whick pick color clock from IC204).

+

GPU Pinout Notes

+
    +
  • SGRAM./CS1 is only used on arcade boards with 2 MB VRAM (two 1 MB chips).
  • +
  • HVHLD has a 4.7k pullup to 3.5V.
  • +
  • TEST0-TEST3 are tied to 3.5V. PCKSL0-PCKSL2 (outputs possibly related to + the current resolution/pixel clock?) are left unconnected.
  • +
  • MCLKIN and MCLKOUT are tied together and wired to the DAC's clock input. + MCLKIN could possibly be an external clock input for genlocking purposes.
  • +
  • On earlier motherboards and on most arcade boards only VCLK_PAL or + VCLK_NTSC is wired up, depending on the console's region. On later boards + both are tied together and connected to a programmable clock generator, which + is preprogrammed to generate the appropriate frequency.
  • +
  • /VSYNC and /HSYNC are only connected to test points.
  • +
  • /CSYNC = (/VSYNC AND /HSYNC). BLANK = (VBLANK OR HBLANK).
  • +
  • SGRAM.DQML is wired to both DQM0 and DQM2 on the SGRAM, while + SGRAM.DQMH is wired to both DQM1 and DQM3.
  • +
  • DMASK outputs the mask/"alpha" bit of the current pixel and is used by some + arcade boards to composite the GPU's output on top of an external video + source. ODE2 indicates which field is currently being output in interlaced + mode.
  • +
+

IC202 44pin "Philips TDA8771H" Digital to Analog RGB (older boards only)

+

Region Japan+Europe: TDA8771AN
+Region America+Asia: MC151854FLTEG or so?
+

  1-IREF  6-GNDd1  11-R1   16-G4   21-B7  26-B2     31-CLK    36-OUTB  41-NC
+  2-GNDa1 7-VDDd1  12-R0   17-G3   22-B6  27-VDDd2  32-VDDa1  37-NC    42-GNDa2
+  3-R7    8-R4     13-G7   18-G2   23-B5  28-GNDd2  33-VREF   38-NC    43-VDDa4
+  4-R6    9-R3     14-G6   19-G1   24-B4  29-B1     34-NC     39-VDDa3 44-OUTR
+  5-R5    10-R2    15-G5   20-G0   25-B3  30-B0     35-VDDa2  40-OUTG
+
+Used only LATE-PU-8 boards (and PU-16, which does even have two TDA8771AH +chips: one on the mainboard, and one on the VCD daughterboard).
+Earlier boards are generating analog RGB via 64pin IC207, and later boards RGB +via 48pin IC502.

+

IC502 48pin "SONY CXA2106R-T4" - 24bit RGB video D/A converter

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PinNamePinNamePinNamePinName
1BCLAMP13NTSC/PAL25G737B3
2AGND214SYNCIN26G638B2
3ROUT15SCIN27G539B1
4GOUT16R728G440B0
5BOUT17R629G341VCLK
6YOUT18R530G242DGND
7COUT19R431G143VREFIN
8VOUT20DVDD32G044VREFOUT
9AVCC221R333B745AGND1
10YTRAP22R234B646RCRAMP
11NC23R135B547AVCC1
12POWER_SAVE24R036B448GCLAMP
+

Pin 3..8 (analogue outputs) are passed via external 75 ohm resistors.
+Pin 6,7 additionally via 220uF. Pin 8 additionally via smaller capacitor.
+Pin 10 (YTRAP) wired via 2K7 to 5.0V.
+Pin 1,44,46,48 (can) connect via capacitors to ground (only installed for 44).
+The 4.4MHz clock is obtained via 2K2 from IC204.Pin6.
+The /PAL pin can be reportedly GROUNDED to force PAL colors in NTSC mode, when +doing that, you may first want to disconnect the pin from the GPU.
+Note: Rohm BH7240AKV has same pinout (XXX but with pin7/pin8 swapped?)

+

Beware

+

Measuring in the region near GPU Pin10 is the nocash number one source for +blowing up components on the mainboard. If you want to measure that signals +while power is on, better measure them at the CPU side.

+

Pinouts - SPU Pinouts

+

IC308 - SONY CXD2922Q (SPU) (on PU-7, EARLY-PU-8 boards)

+

IC308 - SONY CXD2925Q (SPU) (on LATE-PU-8, PU-16, PU-18, PU-20 boards)

+

  1-D0    14-D11  27-A8    40-GND    53-3.5V  66-A15  79-5V    92-LRIA
+  2-D1    15-GND  28-3.5V  41-SYSCK  54-GND   67-A14  80-A3    93-DTIA
+  3-3.5V  16-D12  29-GND   42-GND    55-D7    68-A13  81-A2    94-BCIB
+  4-GND   17-D13  30-A9    43-TEST   56-D6    69-A12  82-A1    95-LRIB
+  5-D2    18-D14  31-/SPU  44-TES2   57-D5    70-A11  83-A0    96-DTIB
+  6-D3    19-D15  32-/RD   45-D15    58-D4    71-A10  84-/WE0  97-BCKO
+  7-D4    20-A1   33-/WR   46-D14    59-D3    72-A9   85-/OE0  98-LRCO
+  8-D5    21-A2   34-DACK  47-D13    60-D2    73-A8   86-/WE1  99-DATO
+  9-D6    22-A3   35-/IRQ  48-D12    61-D1    74-A7   87-/OE1  100-WCKO
+  10-D7   23-A4   36-DREQ  49-D11    62-D0    75-A6   88-GND
+  11-D8   24-A5   37-MUTE  50-D10    63-/RAS  76-A5   89-XCK
+  12-D9   25-A6   38-/RST  51-D9     64-/CAS  77-A4   90-GND
+  13-D10  26-A7   39-NC    52-D8     65-GND   78-GND  91-BCIA
+
+Pin 1..36 = MIPS-CPU bus. Pin 45..87 = SPU-RAM bus (A0,A10-A15,/WE1,OE1=NC). +Pin 91..99 = Digital serial audio in/out (A=CDROM, B=EXP, O=OUT).

+

IC732 - SONY CXD2941R (SPU+CDROM+SPU_RAM) (on PM-41(2) boards)

+
  1-DA16   23-FILO  45-LOCK  67-FSTO  89-SCSY   111-XCS   133-HD9   155-VSS5
+  2-DA15   24-FILI  46-SSTP  68-COUT  90-SCLK   112-XRD   134-HD8   156-HA1
+  3-DA14   25-PCO   47-SFDR  69-XDRST 91-SQSO   113-XWR   135-HD7   157-HA0
+  4-VDDM0  26-CLTV  48-SRDR  70-DA11  92-SENS   114-HINT  136-HD6   158-VDDM3
+  5-DA13   27-AVSSO 49-TFDR  71-DA10  93-DATA   115-XIRQ  137-VDD4  159-XCK
+  6-DA12   28-RFAC  50-TRDR  72-DA09  94-XLAT   116-VDDM2 138-HD5   160-DTIB
+  7-LRCK   29-BIAS  51-VSSM1 73-DA08  95-CLOK   117-XSCS  139-HD4   161-BCKO
+  8-WDCK   30-ASYI  52-FFDA  74-AVSMO 96-XINT   118-XHCS  140-HD3   162-LRCO
+  9-VDD0   31-AVDDO 53-FRDA  75-AVDMO 97-A4     119-XHRD  141-HD2   163-DAVDD0
+  10-VSS0  32-ASYO  54-MDP   76-DA07  98-A3     120-XHWR  142-VSS4  164-DAREFL
+  11-PSSL  33-VC    55-MDS   77-DA06  99-A2     121-DACK  143-HD1   165-AOUTL
+  12-ASYE  34-CE    56-VDD2  78-VDDM1 100-A1    122-DREQ  144-HD0   166-DAVSS0
+  13-GND   35-CEO   57-VSS2  79-DA05  101-A0    123-XRST  145-VSSM3 167-DAVSS1
+  14-C4M   36-CEI   58-MIRR  80-DA04  102-D7    124-VDD3  146-HA9   168-AOUTR
+  15-C16M  37-RFDC  59-DFCT  81-DA03  103-D6    125-SYSCK 147-HA8   169-DAREFR
+  16-FSOF  38-ADIO  60-AVSM1 82-DA02  104-D5    126-VSS3  148-HA7   170-DAVDD1
+  17-XTSL  39-AVDD1 61-AVDM1 83-DA01  105-D4    127-HD15  149-HA6   171-MUTO
+  18-VDD1  40-IGEN  62-FOK   84-WFCK  106-VSSM2 128-HD14  150-HA5   172-DATO
+  19-GND   41-AVSS1 63-PWMI  85-SCOR  107-D3    129-HD13  151-HA4   173-MTS3
+  20-VPCO1 42-TE    64-FSW   86-SBSO  108-D2    130-HD12  152-VDD5  174-MTS2
+  21-VPCO2 43-SE    65-MON   87-EXCK  109-D1    131-HD11  153-HA3   175-MTS1
+  22-VCTL  44-FE    66-ATSK  88-SQCK  110-D0    132-HD10  154-HA2   176-MTS0
+
+

IC732 - SONY CXD2938Q (SPU+CDROM) (on newer boards) (PM-41 boards)

+

  1-SCLK    27-RFAC  53-TrckR 79-/XINT 105-A0    131-3.5V   157-(tst) 183-A8
+  2-GNDed   28-GNDed 54-TrckF 80-SQCK  106-3.5V  132-D9     158-(tst) 184-A7
+  3-GNDed   29-CLTV  55-FocuR 81-SQSO  107-A1    133-D8     159-GND   185-A6
+  4-SBSO    30-PCO   56-3.5V  82-SENSE 108-A2    134-D7     160-D15   186-A5
+  5-WFCK    31-FILI  57-FocuF 83-GND   109-A3    135-D6     161-D0    187-GND
+  6-GNDed   32-FILO  58-SledR 84-GND   110-A4    136-D5     162-D14   188-A4
+  7-C16M    33-VCTL  59-SledF 85-CD.D7 111-A5    137-3.5V   163-D1    189-A3
+  8-3.5V    34-VPC02 60-NC    86-CD.D6 112-3.5V  138-D4     164-D13   190-A2
+  9-C4M     35-VPC01 61-GND   87-CD.D5 113-A6    139-D3     165-3.5V  191-A1
+  10-GNDed  36-VC    62-NC    88-CD.D4 114-A7    140-D2     166-D2    192-A0
+  11-4.3MHz 37-FE    63-GND   89-CD.D3 115-A8    141-D1     167-D12   193-3.5V
+  12-12MHz  38-SE    64-(tst) 90-CD.D2 116-A9    142-D0     168-D3    194-NC
+  13-V16M   39-TE    65-(tst) 91-CD.D1 117-/IRQ2 143-GND    169-D11   195-(tst)
+  14-DOUT   40-CE    66-note  92-CD.D0 118-/IRQ9 144-33MHzS 170-D10   196-GND
+  15-LACK   41-CEO   67-note  93-3.5V  119-/RD   145-       171-D4    197-(tst)
+  16-WDCK   42-CEI   68-(tst) 94-CD/CS 120-/WR   146-3.48V  172-D9    198-NC
+  17-3.5Ved 43-RFDC  69-3.5V  95-CD/WR 121-DMA4  147-ZZ11   173-GND   199-NC
+  18-LOCK   44-ADIO  70-(tst) 96-CD/RD 122-GND   148-GND    174-D5    200-NC
+  19-GND    45-GND   71-(tst) 97-CD.A0 123-GND   149-GND    175-D8    201-3.5V
+  20-MDS    46-IGEN  72-(tst) 98-CD.A1 124-/SPUW 150-ZZ7    176-D6    202-NC
+  21-MDP    47-AVD1  73-(tst) 99-CD.A2 125-D15   151-3.48V  177-D7    203-NC
+  22-3.5Ved 48-GNDed 74-DATA  100-GND  126-D14   152-/RES   178-/CAS  204-NC
+  23-AVDO   49-GNDed 75-XLAT  101-CDA3 127-D13   153-3.5V   179-/WE   205-GND
+  24-ASYO   50-GND   76-CLOK  102-CDA4 128-D12   154-ZZ5    180-3.5V  206-(tst)
+  25-ASYI   51-GNDed 77-SCOR  103-/CD  129-D11   155-(tst)  181-/OE   207-(tst)
+  26-BIAS   52-GNDed 78-GND   104-/SPU 130-D10   156-(tst)  182-/RAS  208-GND
+
+Pin 74..102 = SubCPU. Pin 103..144 = MainCPU. Pin 160..192 = Sound RAM Bus.
+Pin 21 and 53..59 = Drive Motor Control (IC722).
+Pin 1..47 are probably mainly CDROM related.
+Pin 39 "TE9" = IC723.Pin16 - CL709, and via 15K to SPU.39
+Pin 66 connects via 4K7 to IC723.Pin19.
+Pin 67 not connected (but there's room for an optional capacitor or resistor)
+The (tst) pins are wired to test points (but not connected to any components)

+

CXD2938Q SPU Pinout Notes

+

Pin 74,75,76,119,120 are connected via 22 ohm.
+Pin 103,104 are connected via 100 ohm.
+ZZnn = IC405 Pin nn (analog audio related, L/R/MUTE).
+Pin 103..142 = System Bus (BIOS,CPU). Pin 160..192 = Sound RAM Bus.
+Pin 178 used for both /CASL and /CASH (which are shortcut with each other).
+Pin 146 and 151 are 3.48V (another supply, not 3.5V).
+Pin 147 and 150 are connected via capacitors.
+Pin 195 and 197 testpoints are found below of the pin 206/207 testpoints.
+

 SPU155 (tst) always low         ;=maybe external audio (serial) this?
+ SPU156 (tst) 45kHz  (22us)      ;=probably 44.1kHz (ext audio sample-rate)
+ SPU157 (tst) 2777kHz  (0.36us)  ;=probably 64*44.1kHz (ext audio bit-rate)
+ SPU158 (tst) always high        ;=maybe external audio (serial) or this?
+
+SPU.Pin5 connects to MANY modchips
+SPU.Pin42 connects to ALL modchips
+SPU.Pin42 via capacitor to SPU.Pin41, and via resistor?/diode? to IC723.10

+

CXD2938Q CDROM clocks

+

  SPU197  (*) 7.35kHz (44.1kHz/6) (stable clock, maybe DESIRED drive speed)
+  SPU5    (*) 7.35kHz (44.1kHz/6) (unstable clock, maybe ACTUAL drive speed)
+  SPU15   (*) 44.1kHz (44.1kHz*1)
+  SPU16   (*) 88.2kHz (44.1kHz*2)
+  SPU206  (*) circa 2.27MHz
+  SPU70   (*) whatever clock (with SHORT low pulses)
+
+(*) these frequencies are twice as fast in double speed mode.

+

CXD2938Q CDROM signals

+
  SPU207  fastsignal?
+  SPU195  slowsignal?
+  SPU18   usually high, low during seek or spinup or so
+  SPU44   superslow hi/lo with superfast noise on it
+  SPU73   mainly LOW with occasional HIGH levels...
+  SPU71   LOW=SPIN_OK, PULSE=SPIN_UP/DOWN_OR_STOPPED
+  SPU72   similar as SPU71
+  SPU64   LOW=STOP, HI=SPIN
+  SPU68   always low...?
+  SPU65   whatever?
+  SPU75   mainly HIGH, short LOW pulses when changing speed up/down/break
+
+

CXD2938Q CDROM/SPU Testpoints (on PM-41 board)

+
                |                                       | SPU73
+                |          CXD2938Q (SPU)               |       SPU72
+                |          (on PM-41 board)             | SPU70 SPU71
+                |                                       | SPU64 SPU65 SPU68
+  SPU206 SPU207 |_______________________________________|
+   SPU197
+    SPU195                   SPU16                   SPU44
+                  SPU18 SPU5 SPU15
+                          SPU12
+
+

IC402 - 24pin AKM AK4309VM (or AK4309AVM/AK4310VM) - Serial 2x16bit DAC

+

  1-TST?  4-/PD   7-CKS    10-LRCK  13-NC?    16-AOUTL  19-GNDa  22-VREFH
+  2-VCCd  5-/RST  8-BICK   11-NC?   14-NC?    17-VCOM   20-NC?   23-VREFL
+  3-GNDd  6-MCLK  9-SDATA  12-NC?   15-AOUTR  18-VCCa   21-NC?   24-DZF?
+
+Used only on older boards (eg. PU-8), newer boards seem to have the DAC in the +208pin SPU.
+No 24pin AK4309VM datasheet exists (however it seems to be same as 20pin +AK4309B's, with four extra NC pins at pin10-14).

+

IC405 - "2174, 1047C, JRC" or "3527, 0A68" (on newer boards)

+

Called "NJM2174" in service manual. Audio Amplifier with Mute.
+

  1  GND
+  2  NC     ? via 100ohm to multiout pin 9    ;Audio Left (white cinch)
+  3  OUT-R  ?
+  4  MUTE1      ;specified as LOW = Mute
+  5  MUTE2      ;specified as HIGH = Mute
+  6  MUTEC      ;unspecified, maybe capacitor, or output based on MUTE1+MUTE2?
+  7  IN-R     via capacitor to SPU.150
+  8  BIAS
+  9  NC
+  10 NC
+  11 IN-L     via capacitor to SPU.147
+  12 OUT-L  ?
+  13 NC     ? via 100ohm to multiout pin 11   ;Audio Right (red cinch)
+  14 VCC      +5.0V (via L401)
+
+Audio amplifier, for raising the signals to 5V levels.

+

IC405 - "NJM2100E (TE2)" Audio Amplifier (on older PU-8 and PU-22 boards)

+
  1-ROUT
+  2-RIN- IC732.SPU.150
+  3-RIN+
+  4-GND
+  5-LIN+
+  6-LIN- IC732.SPU.147
+  7-LOUT
+  8-VCC 4.9V (+5.0V via L401)
+
+

Pinouts - DRV Pinouts

+

IC304 - 52pin/80pin - Motorola HC05 8bit CPU

+

Pinouts - HC05 Pinouts

+

IC305 - SONY CXD1815Q - CDROM Decoder/FIFO (used on PU-8, PU-16, PU-18)

+

  1-D0    14-/XINT 27-/HRD  40-GND   53-VDD   66-/MWR  79-GND   92-LRCO
+  2-D1    15-GND   28-VDD   41-HDRQ  54-GND   67-MDB0  80-CLK   93-WCKO
+  3-VDD   16-A0    29-GND   42-/HAC  55-MA8   68-MDB1  81-HCLK  94-BCKO
+  4-GND   17-A1    30-/HWR  43-MA0   56-MA9   69-MDB2  82-CKSL  95-MUTE
+  5-D2    18-A2    31-HD0   44-MA1   57-MA10  70-MDB3  83-RMCK  96-TD7
+  6-D3    19-A3    32-HD1   45-MA2   58-MA11  71-MDB4  84-LRCK  97-TD6
+  7-D4    20-A4    33-HD2   46-T01   59-MA12  72-MDB5  85-DATA  98-TD5
+  8-D5    21-TD0   34-HD3   47-T02   60-MA13  73-MDB6  86-BCLK  99-TD4
+  9-D6    22-/HRS  35-HD4   48-MA3   61-MA14  74-MDB7  87-C2PO  100-TD3
+  10-D7   23-/HCS  36-HD5   49-MA4   62-MA15  75-MDBP  88-EMP
+  11-/CS  24-HA0   37-HD6   50-MA5   63-MA16  76-XTL2  89-/RST
+  12-/RD  25-HA1   38-HD7   51-MA6   64-/MOE  77-XTL1  90-GND
+  13-/WR  26-HINT  39-HDP   52-MA7   65-GND   78-VDD   91-DATO
+
+Pin 1..20 to HC05 CPU, pin 22..42 to MIPS cpu, pin 43..75 to SRAM cd-buffer.
+The pinouts/registers in CXD1199AQ datasheet are about 99% same as CXD1815Q.
+Note: Parity on the 8bit data busses is NC. SRAM is 32Kx8 (A15+A16 are NC). +Later boards have this integrated in the SPU.

+

ICsss - SONY CXA1782BR - CDROM Servo Amplifier (used on PU-8 boards)

+

  1-FEO    7-FE_M   13-RA_O  19-CLK    25-FOK   31-RF_O  37-FE_BIAS 43-LPFI
+  2-FEI    8-SRCH   14-SL_P  20-XLT    26-CC2   32-RF_M  38-F       44-TEI
+  3-FDFCT  9-TGU    15-SL_M  21-DATA   27-CC1   33-LD    39-E       45-ATSC
+  4-FGD    10-TG2   16-SL_O  22-XRST   28-CB    34-PD    40-EI      46-TZC
+  5-FLB    11-FSET  17-ISET  23-C.OUT  29-CP    35-PD1   41-GND     47-TDFCT
+  6-FE_O   12-TA_M  18-VCC   24-SENS   30-RF_I  36-PD2   42-TEO     48-VC
+
+Datasheet exists. Later boards have CXA1782BR+CXD2510Q integrated in CXD2545Q, +and even later boards have it integrated in the SPU.

+

IC309 - SONY CXD2510Q - CDROM Signal Processor (used on PU-8, PU-16 boards)

+

  1-FOK   11-PDO   21-GNDa 31-WDCK        41-DA09-XPLCK 51-APTL 61-EMPH 71-DATA
+  2-FSW   12-GND   22-VLTV 32-LRCK        42-DA08-GFS   52-GND  62-WFCK 72-XLAT
+  3-MON   13-TEST0 23-VDDa 33-VDD 5V      43-DA07-RFCK  53-XTAI 63-SCOR 73-VDD
+  4-MDP   14-NC    24-RF   34-DA16-SDTA48 44-DA06-C2PO  54-XTAO 64-SBSO 74-CLOK
+  5-MDS   15-NC    25-BIAS 35-DA15-SCLK48 45-DA05-XRAOF 55-XTSL 65-EXCK 75-SEIN
+  6-LOCK  16-VPCO  26-ASYI 36-DA14-SDTA64 46-DA04-MNT3  56-FSTT 66-SQSO 76-CNIN
+  7-NC    17-VCKI  27-ASYO 37-DA13-SCLK64 47-DA03-MNT2  57-FSOF 67-SQCK 77-DATO
+  8-VCOO  18-FILO  28-ASYE 38-DA12-LRCK64 48-DA02-MNT1  58-C16M 68-MUTE 78-XLTO
+  9-VCOI  19-FILI  29-NC   39-DA11-GTOP   49-DA01-MNT0  59-MD2  69-SENS 79-CLKO
+  10-TEST 20-PCO   30-PSSL 40-DA10-XUGF   50-APTR       60-DOUT 70-XRST 80-MIRR
+
+Datasheet exists. Later boards have CXA1782BR+CXD2510Q integrated in CXD2545Q, +and even later boards have it integrated in the SPU.

+

IC701 - SONY CXD2545Q - Signal Processor + Servo Amp (used on PU-18 boards)

+

  1-SRON  14-TEST 27-TE   40-VDDa        53-DA09-XPLCK 66-FSTI 79-MUTE 92-DFCT
+  2-SRDR  15-GND  28-SE   41-VDD         54-DA08-GFS   67-FSTO 80-SENS 93-FOK
+  3-SFON  16-TES2 29-FE   42-ASYE        55-DA07-RFCK  68-FSOF 81-XRST 94-FSW
+  4-TFDR  17-TES3 30-VC   43-PSSL        56-DA06-C2PO  69-C16M 82-DIRC 95-MON
+  5-TRON  18-PDO  31-FILO 44-WDCK        57-DA05-XRAOF 70-MD2  83-SCLK 96-MDP
+  6-TRDR  19-VPCO 32-FILI 45-LRCK        58-DA04-MNT3  71-DOUT 84-DFSW 97-MDS
+  7-TFON  20-VCKI 33-PCO  46-DA16-SDTA48 59-DA03-MNT2  72-EMPH 85-ATSK 98-LOCK
+  8-FFDR  21-VDDa 34-CLTV 47-DA15-SCLK48 60-DA02-MNT1  73-WFCK 86-DATA 99-SSTP
+  9-FRON  22-IGEN 35-GNDa 48-DA14-SDTA64 61-DA01-MNT0  74-SCOR 87-XLAT 100-SFDR
+  10-FRDR 23-GNDa 36-RFAC 49-DA13-SCLK64 62-XTAI       75-SBSO 88-CLOK
+  11-FFON 24-ADIO 37-BIAS 50-DA12-LRCK64 63-XTAO       76-EXCK 89-COUT
+  12-VCOO 25-RFC  38-ASYI 51-DA11-GTOP   64-XTSL/GNDed 77-SQSO 90-VDD
+  13-VCOI 26-RFDC 39-ASYO 52-DA10-XUGF   65-GND        78-SQCK 91-MIRR
+
+Datasheet exists. The CXD2545Q combines the functionality of CXA1782BR+CXD2510Q +from older boards (later boards have it integrated in the SPU). XTAI/XTAO input +is 16.9344MHz (44.1kHz*180h), with XTSL=GND. Clock outputs are +FSTO=16.9344MHz/3, FSOF=16.9344MHz/4, C16M=16.9344MHz/1.

+

IC101 - SONY CXD2515Q - Signal Processor + Servo Amp (used on DTL-H2010)

+

Pinouts are same as CXD2545Q, except, three pins are different: Pin24=ADII +(instead of ADIO), Pin25=ADIO (instead of RFC), Pin68=C4M (instead of FSOF).

+

IC720 - 144pin SONY CXD1817R (=CXD2545Q+CXD1815Q) ;PU-20

+
  1..48 - unknown
+  49 - SCOR
+  50..144 - unknown
+
+

IC701 - 8pin chip (on bottom side, but NOT installed) (PU-7 and EARLY-PU-8)

+
  1-8 Unknown (maybe CDROM related, at least it's near other CDROM chips)
+
+

IC722 "BA5947FP" or "Panasonic AN8732SB" - IC for Compact Disc Players

+

Drive Motor related.
+

  1 to pin24,27
+  2 SPINDLE            - via 15K to SPU21
+  3 SW (ON/OFF)        - IC304.27
+  4 TRACKING FORWARD
+  5 TRACKING REVERSE
+  6 FOCUS FORWARD
+  7 FOCUS REVERSE
+  8 GND                - CN702 pin 11
+  9 NC (INTERNAL)      - via C731 (10uF) to GND
+  10 +7.5V (Pow VCC ch1,2)
+  11 FOCUS COIL (1)    - CN702 pin 15
+  12 FOCUS COIL (2)    - CN702 pin 14
+  13 TRACKING COIL (1) - CN702 pin 16
+  14 TRACKING COIL (2) - CN702 pin 13
+  15 SPINDLE MOTOR (1) - CN701 pin 4
+  16 SPINDLE MOTOR (2) - CN701 pin 3
+  17 SLED MOTOR (1)    - CN701 pin 1
+  18 SLED MOTOR (2)    - CN701 pin 2
+  19 +7.5V (Pow VCC ch3,4)
+  20 MUTE              - /RES (via 5K6)
+  21 GND
+  22 SLED REVERSE
+  23 SLED FORWARD
+  24 to pin1
+  25 via capacitors to pin1
+  26 BIAS 1.75V
+  27 to pin1
+  28 +7.5V (Pre VCC)
+
+Additionally to the above 28pins, the chip has two large grounded pins (between +pin 7/8 and 21/22) for shielding or cooling purposes.

+

IC703 - 20pin - "SONY CXA1791N" (RF Amplifier) (on PU-18 boards)

+

  1 LD       O APC amplifier output
+  2 PD       I APC amplifier input
+  3 PD1      I Input 1 for RF I-V amplifiers
+  4 PD2      I Input 2 for RF I-V amplifiers
+  5 GND/VEE  - Supply Ground
+  6 F        I Input F for I-V amplifier
+  7 E        I Input E for I-V amplifier
+  8 VR       O DC Voltage Output (VCC+VEE)/2
+  9 VC       I Center Voltage Input
+  10 NC      - NC
+  11 NC      - NC
+  12 EO      O Monitoring Output for I-V amplifier E
+  13 EI      - Gain Adjust for I-V amplifier E
+  14 TE      O Tracking Error Amplifier Output
+  15 FE_BIAS I BIAS Adjustment for Focus Error
+  16 FE      O Focus Error Amplifier Output
+  17 RFO     O RF Amplifier Output
+  18 RFI     I RF Amplifier Input
+  19 /LD_ON  I APC amplifier ON=GND, OFF=VCC
+  20 VCC     - Supply
+
+Datasheet for CXA1791N does exist. Later boards have IC703 replaced by IC723. +Older PU-7/PU-8 boards appear to have used a bunch of smaller components (8pin +chips and/or transistors) instead of 20pin RF amplifiers.

+

IC723 - 20pin - "SONY CXA2575N-T4" (RF (Matrix?) Amplifier) (PU-22..PM-41(2))

+

  1-TEIM
+  2-TEIG
+  3-VEE     GND
+  4-E       via 33K to CN702 pin 4
+  5-F       via 33K to CN702 pin 8
+  6-PD2     via 36K to CN702 pin 6
+  7-PD1     via 36K to CN702 pin 7
+  8-PD      to CN702 pin 9
+  9-LD
+  10-VC     CL710, and CN702.Pin3, and via resistor?/diode? to SPU42
+  11-LD_ON    IC304.Pin49 "LDON"  ..... XXX or is that Pin 20 "LD_ON" ?
+  12-G_CONT                                                        ;or AL/TE?
+  13-RF0    CL704, and...
+  14-RFM
+  15-FE     CL708, and...                 (maybe focus error?)
+  16-TE     CL709, and via 15K to SPU.39  (maybe tracking error?)
+  17-TE0
+  18-COMP+
+  19-MIRR   via 4K7 to SPU66
+  20-VCC    3.48V (not 3.5V)
+
+Used only on PU-22 .. PM-41(2) boards (PU-18 boards used IC703 "CXA1791N", and +even older boards... maybe had this in CXA1782BR... or maybe had it in a bunch +of 8pin NJMxxxx chips?).
+There is no CXA2575N datasheet (but maybe some signals do resemble +CXA2570N/CXA2571N/CXA1791N datasheets).

+

CN702 CDROM Data Signal socket (PU-23 and PM-41 board)

+

  1-LD     to Q701
+  2-VCC    to Q701
+  3-VC     to IC723.Pin10 (and CL710)
+  4-F-     to IC723.Pin4 (via 33K ohm)
+  5-NC     to CL776
+  6-PD2    to IC723.Pin6 (via 33K ohm)
+  7-PD1    to IC723.Pin7 (via 33K ohm)
+  8-E-     to IC723.Pin5 (via 33K ohm)
+  9-M1     to IC723.Pin8
+  10-VR    via 91 ohm to GND
+  11-GND   GND
+  12-LS    /POS0 (switch, GNDed when at head is at inner-most position)
+  13-FCS+  TRACKING COIL (2)   ;\
+  14-TRK+  FOCUS COIL (2)      ; or swapped?
+  15-TRK   FOCUS COIL (1)      ;
+  16-FCS   TRACKING COIL (1)   ;/
+
+PU-23 and PM-41 board seem to be using exactly the same Drive, the only +difference is the length (and folding) of the attached cable.

+

CN701 CDROM Motor socket (PU-8, PU-18, PU-23, PM-41 boards)

+
  1-SL-   SLED MOTOR (1)
+  2-SL+   SLED MOTOR (2)
+  3-SP+   SPINDLE MOTOR (2)
+  4-SP-   SPINDLE MOTOR (1)
+
+

CLnnn - Calibration Points (PU-23 and PM-41 boards)

+

  CL616 +7.5V (PM-41 only, not PM-23) (before power switch)
+  CL617 GND   (PM-41 only, not PM-23)
+  CL316 to IC304 pin 21
+  CL704 to IC723.Pin13
+  CL706 GND
+  CL708 to IC723.Pin15
+  CL709 to IC723.Pin16
+  CL710 to IC723.Pin10, and CN702.Pin3
+  CL711 via 1K to IC723.Pin15
+  CL776 to CN702.Pin5
+
+Probably test points for drive calibration or so.

+

Pinouts - VCD Pinouts

+

SCPH-5903 Video CD PlayStation

+

VCD Mainboard "PU-16, 1-655-191-11" Component List

+

The overall design is very close to LATE-PU-8 boards (1-658-467-2x). Changed +components are IC102/IC304 (different kernel and cdrom firmware), +C318/C325/C327 (height reduced capacitors for mounting the daughterboard above +of them). Plus some extra components: Three triple multiplexors (for switching +between PSX and VCD audio/video), and the daughterboard connector.
+

  IC102 44pin SONY, M538032E-02, JAPAN 6465401 (uncommonly big BIOS, 1Mx8)
+  IC304 52pin C 4021 SC430924PB (HC05 sub-cpu, with extra Video CD command 1Fh)
+  C318   2pin S5        ;\tantalum capacitors with lower height (instead
+  C325   2pin CA7       ; of the electrolytic capacitors on PU-8 boards)
+  C327   2pin CA7       ;/
+  ICnnn 16pin 4053C (Triple multiplexor, for Audio LRCK,BCLK,DATA) (PCB top)
+  ICnnn 16pin 4053C (Triple multiplexor, for Video FSC,CSYNC)      (PCB bottom)
+  ICnnn 16pin 2283  (Triple multiplexor, for Video R,G,B)          (PCB bottom)
+  CNnnn 30pin Connector to daughterboard                           (PCB top)
+

+

VCD Daughterboard "MP-45, 1-665-192-11" Component List

+
  IC102   3pin  TA78M05F voltage regulator (7.5V to 5V) (Toshiba)
+  IC104 120pin  CXD1852AQ Video CD decoder (Sony)
+  IC106  40pin  MB814260-70 (256Kx16 DRAM) (Fujitsu) ;see also: IC114
+  IC107  20pin  6230FV 649 115 (OSD, similar to BU6257AFV-E2) (PCB back)
+  IC109  14pin  Y2932 (TLC2932 PLL) (TI) (for RGB.DAC.CLK)
+  IC110  44pin  TDA8771AH Triple Video DAC for RGB (Philips) (PCB back)
+  IC111  64pin  CXP10224-603R 732A02E (MCU) (Sony)
+  IC112  14pin  HCT32A (74HCT32 Quad OR gate) (TI) (PCB back) (for RGB.DAC.CLK)
+  IC113   8pin  H74 7H (single D-type flip-flop; OSD clock divider) (PCB back)
+  IC114  40pin  MB814260-70 (256Kx16 DRAM) (Fujitsu) ;see also: IC106
+  CN101  30pin  Male Connector (to female 30pin socket on PU-16 mainboard)
+  X103    2pin  45.00MHz (for VCD decoder chip)
+  X104    4pin  12.000MHz (for MCU chip)
+  X105    2pin  28.636MHz (for VCD decoder chip) (8*3.579545 NTSC clock)
+
+

VCD Daughterboard Connector

+
                               .--.---.
+                         GND  / 1   2 | GND
+    (CXD1815Q.86)    CD.BCLK |  3   4 | CD.LRCK    (CXD1815Q.84)
+    (CXD1815Q.87)    CD.C2PO |  5   6 | CD.DATA    (CXD1815Q.85)
+                         GND |  7   8 | CD.SQCK    (CXD2510Q.67) CXP.31
+         (TDA.44) VIDEO.OUTR |  9  10 | CD.SQSO    (CXD2510Q.66) CXP.29
+                         GND | 11  12 | SIO.OUT    (HC05.51.PORTF1 to CXP.47)
+         (TDA.40) VIDEO.OUTG | 13  14 | SIO.IN     (HC05.50.PORTF0 from CXP.48)
+                         GND | 15  16 | SIO.CLK    (HC05.52.PORTF2 to CXP.49)
+         (TDA.36) VIDEO.OUTB | 17  18 | VIDEO.FSC  (CXD1852AQ.95)
+                         GND | 19  20 | VIDEO.CSYNC(CXD1852AQ.96)
+          (PSU.3)       3.5V | 21  22 | 3.5V       (PSU.3)
+          (PSU.1)       7.5V | 23  24 | AUDIO.FSXI (CXD1852AQ.103 to VCD)
+          (PSU.7)       /RES | 25  26 | AUDIO.DATA (CXD1852AQ.100)
+  (CXD1852AQ.102) AUDIO.BCLK | 27  28 | AUDIO.LRCK (CXD1852AQ.101)
+                         GND | 29  30 | GND
+                             '--------'
+
+

IC104 "Sony CXD1852AQ" (MPEG-1 Decoder for Video CD) (120 pin)

+

   1-GND   16-HD7   31-GND   46-MD4   61-GND   76-G/Y3  91-GND       106-XTL2O
+   2-XTL0O 17-MA3   32-MA7   47-MD11  62-/VOE  77-G/Y4  92-HSYNC     107-XTL2I
+   3-XTL0I 18-MA4   33-MA8   48-MD3   63-R/Cr0 78-G/Y5  93-VSYNC     108-VDD
+   4-VDD   19-MA2   34-/RAS  49-MD12  64-R/Cr1 79-G/Y6  94-FID/FHREF 109-C2PO
+   5-HA2   20-MA5   35-/MWE  50-MD2   65-R/Cr2 80-G/Y7  95-CBLNK/FSC 110-LRCI
+   6-HA3   21-MA1   36-/CAS2 51-MD13  66-R/Cr3 81-B/Cb0 96-CSYNC     111-DATI
+   7-HD0   22-GND   37-/CAS0 52-MD1   67-R/Cr4 82-B/Cb1 97-/SGRST    112-BCKI
+   8-HD1   23-MA6   38-MD7   53-MD14  68-R/Cr5 83-B/Cb2 98-CLK0O     113-DOIN
+   9-HD2   24-MA0   39-MD8   54-MD0   69-R/Cr6 84-B/Cb3 99-DOUT      114-/HCS
+  10-HD3   25-BC    40-MD6   55-MD15  70-R/Cr7 85-B/Cb4 100-DATO     115-/HDT
+  11-HD4   26-TCKI  41-MD9   56-OSDEN 71-G/Y0  86-B/Cb5 101-LRCO     116-HRW
+  12-HD5   27-TDI   42-MD5   57-OSDB  72-G/Y1  87-B/Cb6 102-BCKO     117-/HIRQ
+  13-HD6   28-TENA1 43-MD10  58-OSDG  73-G/Y2  88-B/Cb7 103-FSXI     118-/RST
+  14-VDD   29-TDO   44-VDD   59-OSDR  74-VDD   89-DCLK  104-VDD      119-HA0
+  15-GND   30-VST   45-GND   60-VDD   75-GND   90-VDD   105-GND      120-HA1
+
+The Hxxx pins are for the Host (the 8bit CXP CPU), the Mxxx for the RAM chips, +the R/G/B pins are 24bit RGB video. Pin36 can be /CAS2 or MA9 (and, the VCD +daughterboard has alternate solderpads for one large RAM instead of two small +RAMs).

+

IC107 "6230FV" (OSD chip, similar to BU6257AFV-E2) (20 pin)

+

   1-SIO.CLK   5-VDD      9-TEST  13-BLK2   17-OSDG
+   2-SIO./CS   6-/CKOUT  10-GND   14-VC2    18-OSDB
+   3-SIO.DTA   7-OSCOUT  11-BLK1  15-OSDEN  19-/VSYNC
+   4-/RESET    8-OSCIN   12-VC1   16-OSDR   20-/HSYNC
+
+SIO pin1/2/3 are wired to CXP pin38/37/36. OSCIN is the RGB DAC CLK divided by +two (from H74 chip pin5). OSD/SYNC on pin15-20 connect to the MPEG1 decoder +chip.
+No datasheet (but pinouts are same/similar as for BU6257AFV, documented in +several service manuals for tape decks with vcd player: HCD-V5500, +HCD-V8900/V8900AV, HCD-V909AV).

+

IC111 "Sony CXP10224-603R" (8bit SPC700 CPU) (64pin LQFP)

+

   1-PB5=TP    17-PD5=/HCS       33-AVREF=VDD             49-PG5/SCK1=HC05.PF2
+   2-PB4=TP    18-PD4=TP         34-AVDD=VDD              50-PG4=/RST.OUT
+   3-PB3=HA3   19-PD3=TP         35-PF7/AN7=TP            51-PG3/TO=TP
+   4-PB2=HA2   20-PD2=TP         36-PF6/AN6=OSD.DTA       52-PA7=TP
+   5-PB1=HA1   21-PD1=TP         37-PF5/AN5=OSD./CS       53-PA6=TP
+   6-PB0=HA0   22-PD0=TP         38-PF4/AN4=OSD.CLK       54-PA5=TP
+   7-PC7=HD7   23-MP/TEST=GND    39-PF3/AN3=GND           55-PA4=TP
+   8-PC6=HD6   24-XTAL=12MHZ     40-PF2/AN2=GND           56-VPP=VDD
+   9-PC5=HD5   25-EXTAL=12MHZ    41-PF1/AN1=GND           57-VDD=VDD
+  10-PC4=HD4   26-VSS=GND        42-PF0/AN0=10KtoGND      58-VSS=GND
+  11-PC3=HD3   27-/RST=/RES      43-PE3/PWM1=TP           59-PA3=TP
+  12-PC2=HD2   28-/CS0=VDD       44-PE2/PWM0=TP           60-PA2=TP
+  13-PC1=HD1   29-SI0=CD.SQSO    45-PE1/INT2/EC=/VSYNC    61-PA1=TP
+  14-PC0=HD0   30-SO0=TP         46-PE0/INT0=/HIRQ        62-PA0=TP
+  15-PD7=HRW   31-/SCK0=CD.SQCK  47-PG7/SI1/INT1=HC05.PF1 63-PB7=TP
+  16-PD6=/HDT  32-AVSS=GND       48-PG6/SO1=HC05.PF0      64-PB6=TP
+
+Pin 3-15,45,46,50 connect to MPEG1 decoder. Pin 36-38 to OSD. Pin 47-49 to +HC05.PortF. Pin 27 is /RESET from PSU. Pin 29,31 are SUBQ from CXD2510Q. The +"TP" pins connect to test points (but seem to be NC otherwise).
+Pinouts are same as in CXP811P24 datasheet (which uses SPC700 instruction set; +that instruction set is also used by SNES sound CPU).

+

IC109 "TLC2932" (PLL) (14pin)

+

  1-LOGIC_VDD=5V            5-FIN-B=HSYNC.PLL 9-PFD_INHIBIT=GND  13-BIAS
+  2-SELECT=5V               6-PFD_OUT         10-VCO_INHIBIT=GND 14-VCO_VDD=5V
+  3-VCO_OUT=RGB.DAC.CLK.PLL 7-LOGIC_GND=GND   11-VCO_GND=GND
+  4-FIN-A=FID/FHREF.PLL     8-NC              12-VCO_IN
+
+Used to generate the CLK for the TDA chip (that is, the dotclk, paused during +VSYNC, or so?). The same CLK, divided by two, is also used as OSD.OSCIN.

+

IC112 "74HCT32" (Quad OR gate) (14pin)

+

   1-FID/FHREF.MPEG  4-HSYNC.MPEG   8-(low)  11-RGB.DAC.CLK.TDA  7-GND
+   2-FID/FHREF.MPEG  5-HSYNC.MPEG   9-GNDed  12-RGB.DAC.CLK.PLL  14-VCC/5V
+   3-FID/FHREF.PLL   6-HSYNC.PLL   10-GNDed  13-RGB.DAC.CLK.PLL
+
+Used to sharpen the output from the PLL chip, and to level-shift signals for +the two PLL inputs from 3.5V to 5V. The input-pairs for the OR gates are +shortcut with each other, so the chip isn't actually ORing anything.

+

IC113 "H74 7H" (single D-type flip-flop; OSD clock divider) (8 pin)

+

  1-CLK   2-D   3-/Q   4-GND   5-Q   6-/RES   7-/SET   8-VCC
+
+Used to divide the RGB DAC CLK by two. CLK comes from TDA.pin31, D and /Q are +shortcut with each other, /RES and /SET are wired to VDD, and Q goes to +OSD.OSCIN.

+

ICnnn "4053C" (Triple multiplexor, for Audio LRCK,BCLK,DATA) (16pin)

+

  1-IN2B=DATA.VCD   5-IN3A=LRCK.SPU    9-SEL3=LRCK.SEL   13-IN1B=BCLK.VCD
+  2-IN2A=DATA.SPU   6-/OE=GNDed       10-SEL2=DATA.SEL   14-OUT1=BCLK.OUT
+  3-IN3B=LRCK.VCD   7-VEE=GNDed       11-SEL1=BCLK.SEL   15-OUT2=DATA.OUT
+  4-OUT3=LRCK.OUT   8-GND=GND         12-IN1A=BCLK.SPU   16-VDD=VDD/3.5V
+
+The three SEL pins are wired to HC05.PortF3, the three SPU pins are wired via +10Kohm.

+

ICnnn "4053C" (Triple multiplexor, for Video FSC,CSYNC) (16pin)

+

  1-IN2B=FSC.VCD    5-IN3A=CSYNC.PSX   9-SEL3=CSYNC.SEL  13-IN1B=GNDed
+  2-IN2A=FSC.PSX    6-/OE=GNDed       10-SEL2=FSC.SEL    14-OUT1=NCed
+  3-IN3B=CSYNC.VCD  7-VEE=GNDed       11-SEL1=DUMMY.SEL  15-OUT2=FSC.OUT
+  4-OUT3=CSYNC.OUT  8-GND=GND         12-IN1A=GNDed      16-VDD=VCC/5V
+
+The three SEL pins are wired to HC05.PortF3, the two OUTx pins are wired via +2.2Kohm.

+

ICnnn "NJM2283" (Triple multiplexor, for Video R,G,B) (16pin)

+

  1-IN1B=R.VCD      5-OUT2=G.OUT       9-IN3B=B.VCD      13-V=VCC/5V
+  2-SEL1=R.SEL      6-OUT3=B.OUT      10-GND3=81ohm/GND  14-IN2B=G.VCD
+  3-OUT1=R.OUT      7-SEL3=B.SEL      11-IN2A=G.PSX      15-GND1=GND
+  4-GND2=GND        8-IN3A=B.PSX      12-SEL2=G.SEL      16-IN1A=R.PSX
+
+The three SEL pins are wired to HC05.PortF3, the six INxx pins wired through +resistors and capacitors, the three OUTx pins are wired through capacitors.

+

Pinouts - HC05 Pinouts

+

Motorola HC05 chip versions for PSX cdrom control

+

  80pin "4246xx" - MC68HC05L16, on-chip ROM (DTL-H120x & old retail consoles)
+  80pin "MC68HC705L16CFU" - MC68HC705L16, on-chip ROM (DTL-H100x, and PU-9)
+  52pin "SC4309xx" - MC68HC05G6, on-chip ROM (newer retail consoles)
+
+The early DTL-H2000 devboard is also using a 80pin CPU (with piggyback EPROM +socket), but that CPU is a Sony CXP82300 SPC700 CPU, not a Motorola HC05 CPU.

+

IC304 - "C 3060, SC430943PB, G63C 185" (PAL/PSone) - CDROM Controller

+

Called "MC68HC05G6PB" in service manual (=8bit CPU).
+

  1  NC     NC (TEST:DTR/out) (VCD:AVSEL/out)   ;-Port F           ;PortF.Bit3
+  2  VDD    3.5V
+  3  NC     NC          ;\                                   ;maybe PortE.Bit7?
+  4  NC     NC          ; maybe MSBs of Port E               ;maybe PortE.Bit6?
+  5  NC     NC          ;/                                   ;maybe PortE.Bit5?
+  6  DECA4  SPU102      ;\                                         ;PortE.Bit4
+  7  DECA3  SPU101      ; Port E [04h], aka Address/Index          ;PortE.Bit3
+  8  DECA2  SPU99       ;                                          ;PortE.Bit2
+  9  DECA1  SPU98       ;                                          ;PortE.Bit1
+  10 DECA0  SPU97       ;/                                         ;PortE.Bit0
+  11 VSS    GND
+  12 NDLY   GND     reserved for factory test, should be wired to VDD, not GND?
+  13 /RES   /RES (via 5K6)
+  14 OSC1   4.3MHz (SPU11)(used as external clock for some modchips)(low volts)
+  15 OSC2   NC
+  16 F-BIAS         aka FOK=NC (in SCPH-5500)                      ;PortB.Bit0
+  17 CG     NC      aka CG=CG (in SCPH-5500)     ;this IS portb.1! ;PortB.Bit1
+  18 LMTSW  /POS0 (switch, GNDed when head at inner-most position) ;PortB.Bit2
+  19 DOOR   SHELL_OPEN                                             ;PortB.Bit3
+  20 TEST2  NC                                                     ;PortB.Bit4
+  21 TEST1  to CL316                                               ;PortB.Bit5
+  22 COUT               NC                                         ;PortB.Bit6
+  23 SENSE  SPU82  ;CXD2510Q.69                                    ;PortB.Bit7
+  24 SUBQ   SPU81  ;CXD2510Q.66                                    ;PortC.Bit0
+  25 NC     NC     ;NC                                             ;PortC.Bit1
+  26 SQCK   SPU80  ;CXD2510Q.67                                    ;PortC.Bit2
+  27 SPEED  IC722.Pin3 (SW)                                        ;PortC.Bit3
+  28 AL/TE         ;transisor aka MIRROR=..   (in SCPH-5500);ISN'T PortB.Bit1 !
+  29 ROMSEL        ;NC        aka ROMSEL=SCLK (in SCPH-5500)       ;PortC.Bit5
+  30 /XINT  SPU79  ;CXD1815Q.14                                    ;PortC.Bit6
+  31 SCOR   SPU77  ;CXD2510Q.63                                    ;PortC.Bit7
+  32 VDD    3.5V
+  33 DECD0  CD.D0       ;\                                         ;PortA.Bit0
+  34 DECD1  CD.D1       ;                                          ;PortA.Bit1
+  35 DECD2  CD.D2       ;                                          ;PortA.Bit2
+  36 DECD3  CD.D3       ; Port A [00h], aka Data                   ;PortA.Bit3
+  37 DECD4  CD.D4       ;                                          ;PortA.Bit4
+  38 DECD5  CD.D5       ;                                          ;PortA.Bit5
+  39 VSS    GND         ;
+  40 DECD6  CD.D6       ;                                          ;PortA.Bit6
+  41 DECD7  CD.D7       ;/                                         ;PortA.Bit7
+  42 NC     NC                                               ;maybe PortD.Bit0?
+  43 DATA   SPU74 (via 22 ohm)                                     ;PortD.Bit1
+  44 XLAT   SPU75 (via 22 ohm)                                     ;PortD.Bit2
+  45 CLOK   SPU76 (via 22 ohm)                                     ;PortD.Bit3
+  46 DECCS  SPU94                                                  ;PortD.Bit4
+  47 DECWR  SPU95                                                  ;PortD.Bit5
+  48 DECRD  SPU96                                                  ;PortD.Bit6
+  49 LDON   IC723.Pin11                                            ;PortD.Bit7
+  50 NC     NC (TEST:TX/out)  (VCD:SIO.IN/in)   ;\PortF (used by   ;PortF.Bit0
+  51 NC     NC (TEST:RX/in)   (VCD:SIO.OUT/out) ; Motorola Testmode;PortF.Bit1
+  52 NC     NC (TEST:RTS/out) (VCD:SIO.CLK/out) ;/and VCD version) ;PortF.Bit2
+
+This chip isn't connected directly to the CPU, but rather to a Fifo Interface, +which is then forwarding data to/from the CPU. On older PSX boards, that Fifo +Interface has been located in a separate chip, on newer PSX boards and PSone +boards, the Fifo stuff is contained in the SPU chip. The CDROM has a 32K +buffer, which is also implemeted at the Fifo Interface side.
+OSC input (internally HC05 is running at OSC/2, ie. around 2MHz):
+
  PU-8      4.0000MHz from separate 4.000MHz oscillator (X302)
+  PU-16     4.0000MHz from separate 4.000MHz oscillator (X302)
+  DTL-H2000 4.1900MHz from separate 4.1900MHz oscillator (SPC700, not HC05)
+  PU-18     4.2336MHz from CXD2545Q.pin68 (Servo+Signal) (FSOF=16.9344MHz/4)
+  PU-20     4.2xxxMHz from CXD1817R.pin?  (Servo+Signal+Decoder)
+  PM-41     4.2xxxMHz from CXD2938Q.pin11 (Servo+Signal+Decoder+SPU)
+

+

HC05 - 80pin version (pinout from MC68HC05L16 datasheet)

+
  1 VDD
+  2 FP28/PE6    ;\
+  3 FP29/PE5    ;
+  4 FP30/PE4    ;
+  5 FP31/PE3    ; Port E LSBs
+  6 FP32/PE2    ;
+  7 FP33/PE1    ;
+  8 FP34/PE0    ;/
+  9 FP35/PD7    ;\
+  10 FP36/PD6   ; Port D MSBs
+  11 FP37/PD5   ;
+  12 FP38/PD4   ;/
+  13 VLCD3
+  14 VLCD2
+  15 VLCD1
+  16 VSS
+  17 NDLY
+  18 XOSC1
+  19 XOSC2
+  20 /RESET
+  ---
+  21 OSC1
+  22 OSC2
+  23 PA0        ;\
+  24 PA1        ;
+  25 PA2        ;
+  26 PA3        ; Port A
+  27 PA4        ;
+  28 PA5        ;
+  29 PA6        ;
+  30 PA7        ;/
+  31 PB0/KWI0   ;\
+  32 PB1/KWI1   ;
+  33 PB2/KWI2   ;
+  34 PB3/KWI3   ; Port B
+  35 PB4/KWI4   ;
+  36 PB5/KWI5   ;
+  37 PB6/KWI6   ;
+  38 PB7/KWI7   ;/
+  39 PC0/SDI    ;\
+  40 PC1/SDO    ;
+  ---           ;
+  41 PC2/SCK    ; Port C
+  42 PC3/TCAP   ;
+  43 PC4/EVI    ;
+  44 PC5/EVO    ;
+  45 PC6/IRQ2   ;
+  46 PC7/IRQ1   ;/
+  47 VDD
+  48 BP3/PD3            ;\
+  49 BP2/PD2            ; Port D LSBs
+  50 BP1/PD1            ;
+  51 BP0 (no "PD0")     ;/
+  52 FP0
+  53 FP1
+  54 FP2
+  55 FP3
+  56 FP4
+  57 FP5
+  58 FP6
+  59 FP7
+  60 VSS
+  ---
+  61 FP8
+  62 FP9
+  63 FP10
+  64 FP11
+  65 FP12
+  66 FP13
+  67 FP14
+  68 FP15
+  69 FP16
+  70 FP17
+  71 FP18
+  72 FP19
+  73 FP20
+  74 FP21
+  75 FP22
+  76 FP23
+  77 FP24
+  78 FP25
+  79 FP26
+  80 FP27/PE7   ;- Port E MSB
+
+

HC05 - 32pin/64pin Versions

+

Sony's Digital Joypad and Mouse contain 32pin CPUs, which are probably also +HC05's:
+Pinouts - Component List and Chipset Pin-Outs for Digital Joypad, SCPH-1080
+Moreover, some old memory cards contain a 64pin Motorola SC419510FU (probably +also a HC05) with separate Atmel AT29LV010A (128Kx8 FLASH).

+

Pinouts - MEM Pinouts

+

IC102 - BIOS ROM (32pin, 512Kx8, used on LATE-PU-8 boards, and newer boards)

+

  1-A19  5-A7  9-A3   13-D0   17-D3  21-D7   25-A11  29-A14
+  2-A16  6-A6  10-A2  14-D1   18-D4  22-/CE  26-A9   30-A17     ;/CE=/BIOS
+  3-A15  7-A5  11-A1  15-D2   19-D5  23-A10  27-A8   31-A18
+  4-A12  8-A4  12-A0  16-GND  20-D6  24-/OE  28-A13  32-3.5V    ;/OE=/RD
+
+Uses standard EPROM pinouts, VCC is 3.5V though, when replacing the ROM by an +EPROM, it may be required to replace the supply by 5V. Note that, on PM-41 +boards at least, Pin 1 is connected to A19 (allowing to install a 1MB BIOS chip +on that board, however, normally, a 512KB BIOS chip is installed, and, the CPU +is generating an exception when trying to access more than 512KB, but that 512K +limit can be disabled via memory control registers).
+Datasheet for (MS-)M534031E does exist.

+

IC102 - BIOS ROM (40pin, 512Kx8, used on PU-7 boards, and EARLY-PU-8 boards)

+

  1-A18  6-A4   11-GND   16-D9   21-VCC  26-D6      31-GND(/BYTE) 36-A13
+  2-A8   7-A3   12-/OE   17-D2   22-D4   27-D14     32-A17        37-A12
+  3-A7   8-A2   13-D0    18-D10  23-D12  28-D7      33-A16        38-A11
+  4-A6   9-A1   14-D8    19-D3   24-D5   29-A0(D15) 34-A15        39-A10
+  5-A5   10-/CS 15-D1    20-D11  25-D13  30-GND     35-A14        40-A9
+
+The chip supports 8bit/16bit mode, on the PSX D0-D14 are actually wired, but +A0/D15 is wired to A0, and /BYTE is wired to GND, so 16bit mode doesn't work.
+Datasheet for MX23L4100 does exist.

+

IC102 - BIOS ROM (44pin, 1Mx8, used on P16-boards, ie. VCD console)

+

  1-NC  5-A7 9-A3   13-GND 17-D1  21-D3  25-D12 29-D14    33-/BYT 37-A14 41-A10
+  2-A19 6-A6 10-A2  14-/OE 18-D9  22-D11 26-D5  30-D7     34-A17  38-A13 42-A9
+  3-A18 7-A5 11-A1  15-D0  19-D2  23-VCC 27-D13 31-D15/A0 35-A16  39-A12 43-NC
+  4-A8  8-A4 12-/CE 16-D8  20-D10 24-D4  28-D6  32-GND    36-A15  40-A11 44-NC
+
+Pinouts are from OKI MSM538032E datasheet.

+

CPU-RAM (four 28pin chips) (older boards)

+

Unknown.
+Note: The newer 70pin RAM comes up without external /REFRESH signal, but maybe +the 28pin RAMs required refresh (the CPU has some odd delays once and when).

+

IC106 - CPU-RAM (single 70pin chip, on newer boards)

+

"Samsung K4Q153212M-JC60" (70pin, 512Kx32) (newer boards)
+"Toshiba T7X16" (70pin, 512Kx32) (newer boards, too)
+

  1-VCC   11-N.C   21-DQ15  31-A3   41-N.C   51-DQ17  61-DQ24
+  2-DQ0   12-VCC   22-N.C   32-A4   42-N.C   52-DQ18  62-DQ25
+  3-DQ1   13-DQ8   23-N.C!  33-A5   43-/OE   53-DQ19  63-DQ26
+  4-DQ2   14-DQ9   24-N.C   34-A6   44-/W    54-VSS   64-DQ27
+  5-DQ3   15-DQ10  25-N.C   35-VCC  45-/CAS3 55-DQ20  65-VSS
+  6-VCC   16-DQ11  26-N.C   36-VSS  46-/CAS2 56-DQ21  66-DQ28
+  7-DQ4   17-VCC   27-/RAS  37-A7   47-/CAS1 57-DQ22  67-DQ29
+  8-DQ5   18-DQ12  28-A0    38-A8   48-/CAS0 58-DQ23  68-DQ30
+  9-DQ6   19-DQ13  29-A1    39-A9   49-N.C   59-VSS   69-DQ31
+  10-DQ7  20-DQ14  30-A2    40-N.C  50-DQ16  60-N.C   70-VSS
+
+Notes: Pin23 must NC or VSS. In the PSone, /OE is wired to GND.
+Datasheet for K4Q153212M-JC60 does exist (the chip supports 27ns Hyper Page +mode access, which seems to be used for DMA).

+

IC106/IC107/IC108/IC109 - CPU-RAM (four 28pin chips, on PU-8, PU-18 boards)

+

SEC KM48V514BJ-6 (DRAM 512Kx8) (four pieces = 512Kx32 = 2Mbyte)
+

  1-VCC  5-DQ3   9-A9     13-A3     17-A5  21-NC    25-DQ5
+  2-DQ0  6-NC    10-A0    14-VCC    18-A6  22-/OE   26-DQ6
+  3-DQ1  7-/W    11-A1    15-GND    19-A7  23-/CAS  27-DQ7
+  4-DQ2  8-/RAS  12-A2    16-A4     20-A8  24-DQ4   28-GND
+
+Datasheet for KM48V514B-6 and BL-6 exist (though none for BJ-6). The chips +support 25ns Hyper Page mode access.

+

IC310 - SPU-RAM (512Kbyte)

+

EliteMT M11B416256A-35J (256K x 16bit) (40pin SOJ, PM-41 boards)
+Nippon Steel NN514256ALTT-50 (256K x 16bit) (40pin TSOP-II, PU-23 boards)
+Toshiba TC51V4260DJ-70 (40pin, PU-8 board) (PseudoSRAM)
+

  1-5.0V  6-5.0V   11-NC   16-A0    21-VSS  26-A8    31-I/O8   36-I/O12
+  2-I/O0  7-I/O4   12-NC   17-A1    22-A4   27-/OE   32-I/O9   37-I/O13
+  3-I/O1  8-I/O5   13-/WE  18-A2    23-A5   28-/CASH 33-I/O10  38-I/O14
+  4-I/O2  9-I/O6   14-/RAS 19-A3    24-A6   29-/CASL 34-I/O11  39-I/O15
+  5-I/O3  10-I/O7  15-NC   20-5.0V  25-A7   30-NC    35-VSS    40-VSS
+
+Note: SPU-RAM supply can be 3.5V (PU-8), or 5.0V (PU-22 and PM-41).
+Note: The /CASL and /CASH pins are shortcut with each other on the mainboard, +both wired to the /CAS pin of the SPU (ie. always accessing 16bit data at +once).
+Note: The TSOP-II package (18mm length, super-flat and with spacing between pin +10/11 and 30/31) is used on PU-23 boards. The pinouts and connections are +identical for SOJ and TSOP-II.
+Note: Nippon Steels NN514256-series is normally 256Kx4bit, nethertheless, for +some bizarre reason, their 256Kx16bit chip is marked "NN514256ALTT"... maybe +that happened accidently in the manufacturing process.
+Note: The PM-41(2) board has on-chip RAM in the SPU (no external memory chip).

+

IC303 - CDROM Buffer (32Kbyte)

+

"HM62W256LFP-7T" (SRAM 32Kx8) (PCB bottom side) (PU-8)
+"SONY CXK5V8257BTM" 32Kx8 SRAM (PU-18)
+

  1-A14  4-A6  7-A3  10-A0  13-D2   16-D4  19-D7   22-/OE  25-A8   28-VCC
+  2-A12  5-A5  8-A2  11-D0  14-GND  17-D5  20-/CS  23-A11  26-A13
+  3-A7   6-A4  9-A1  12-D1  15-D3   18-D6  21-A10  24-A9   27-/WE
+
+Used only on older boards (eg. PU-8, PU-18), newer boards seem to have that RAM +included in the 208pin SPU chip.

+

IC201 - GPU-RAM (1MByte) (or 2MByte, of which, only 1MByte is used though)

+

Samsung KM4132G271BQ-10 (128K x 32bit x 2 Banks, Synchronous Graphic RAM) 1MB
+Samsung K4G163222A-PC70 (256K x 32bit x 2 Banks, Synchronous Graphic RAM) 2MB
+

  1-DQ3   13-DQ19  25-/WE     37-N.C 49-A6    61-DQ9   73-VDDQ  85-VSS  97-DQ0
+  2-VDDQ  14-VDDQ  26-/CAS    38-N.C 50-A7    62-VSSQ  74-DQ24  86-N.C  98-DQ1
+  3-DQ4   15-VDD   27-/RAS    39-N.C 51-A8    63-DQ10  75-DQ25  87-N.C  99-VSSQ
+  4-DQ5   16-VSS   28-/CS     40-N.C 52-N.C   64-DQ11  76-VSSQ  88-N.C  100-DQ2
+  5-VSSQ  17-DQ20  29-A9(BA)  41-N.C 53-DSF   65-VDD   77-DQ26  89-N.C
+  6-DQ6   18-DQ21  30-NC(GND) 42-N.C 54-CKE   66-VSS   78-DQ27  90-N.C
+  7-DQ7   19-VSSQ  31-A0      43-N.C 55-CLK   67-VDDQ  79-VDDQ  91-N.C
+  8-VDDQ  20-DQ22  32-A1      44-N.C 56-DQM1  68-DQ12  80-DQ28  92-N.C
+  9-DQ16  21-DQ23  33-A2      45-N.C 57-DQM3  69-DQ13  81-DQ29  93-N.C
+  10-DQ17 22-VDDQ  34-A3      46-VSS 58-NC    70-VSSQ  82-VSSQ  94-N.C
+  11-VSSQ 23-DQM0  35-VDD     47-A4  59-VDDQ  71-DQ14  83-DQ30  95-N.C
+  12-DQ18 24-DQM2  36-N.C     48-A5  60-DQ8   72-DQ15  84-DQ31  96-VDD
+
+Newer boards often have 2MB VRAM installed (of which only 1MB is used, +apparently the 2MB chips became cheaper than the 1MB chips). At the chip side, +the only difference is that Pin30 became an additional address line (that, +called A8, and, accordingly, the old A8,A9 pins were renamed to A9,A10). At the +mainboard side, the connection is exactly the same for both 1MB and 2MB chips; +Pin30 is grounded on both PU-23 boards (which typically have 1MB) and PM-41 +boards (which typically have 2MB).
+Note: The PM-41(2) board has on-chip RAM in the GPU (no external memory chip).

+

Pinouts - CLK Pinouts

+

The "should-be" CPU clock is 33.868800 Hz (ie. the 44100Hz CDROM/Audio clock, +multiplied by 300h). However, the different PSX/PSone boards are using +different oscillators, multipliers and dividers, which aren't exactly reaching +that "should-be" value. The PSone are using a single oscillator for producing +CPU/GPU clocks, and for producing the TV/color signal:
+

  For PAL,  Fsc=4.43361875MHz (5^6*283.75Hz+25Hz) --> 4*Fsc=17.734MHz
+  For NTSC, Fsc=3.579545MHz   (4.5*455/572 MHz)   --> 4*Fsc=14.318MHz
+

+

PSone/PAL - IC204 8pin - "CY2081, SL-509" or "2294A, 1913"

+

Clock Multiplier/Divider
+

  1 53MHz          ;17.734MHz*3 = 53.202 MHz (?)
+  2 GND
+  3 X1 17.734MHz
+  4 X2 17.734MHz
+  5 67MHz          ;17.734MHz*3*2*7/11 = 67.711636 MHz (?)
+  6 4.4Mhz         ;17.734MHz/4 = 4.4335MHz  (?)  ;via 2K2 to IC502.pin15
+  7 3.5V
+  8 3.5V
+

+

PSone/NTSC - IC204 8pin "CY2081 SL-500" (PSone, and PSX/PU-20 and up)

+

Unknown. Uses a 14.318MHz oscillator, so multiply/divide factors must be +somehow different.
+

   3*3*7*5/2/11 = 14.3181818
+   3*3*7*7*100  = 44100
+
+The "optimal" conversion would be (hardware is barely able to do that):
+
   14.3181818 * 3*7*11*64 / (5*5*5*5*5) = 67.737600
+
+So, maybe it's doing
+
   14.3181818 * 2*2*13/11   ... or so?
+

+

PSX/PAL

+

PU-7 and PU-8 boards are using three separate oscillators:
+

  X101: 67.737MHz (div2 = CPU Clock = 33.8685MHz) (div600h = 44.1kHz audio)
+  X201: 53.20MHz (GPU Clock) (div12 = PAL color clock)
+  X302: 4.000MHz (for CDROM SUB CPU)
+
+PU-18 does have same X101/X201 as above, but doesn't seem to have X302.

+

PSX/NTSC

+

PU-7 and PU-8 boards are using three separate oscillators:
+

  X101: 67.737MHz (div2 = CPU Clock = 33.8685MHz) (div600h = 44.1kHz audio)
+  X201: 53.69MHz (GPU Clock) (div15 = NTSC color clock)
+  X302: 4.000MHz (for CDROM SUB CPU)
+
+PU-20 works more like PSone (a single oscillator, and CY2081 SL-500 divider)

+

Pinouts - PWR Pinouts

+

Voltage Summary

+
  +7.5V  Used to generate other voltages and CDROM/Joypad/MemoryCard/Expansion
+  +5.0V  Used for Multiout, IC405, and IC502, and IC602
+  +3.5V  Used for most ICs, and for Joypad/MemoryCard/Expansion
+  +3.48V Used for SPU and CDROM
+  GND    Ground, shared for all voltages
+
+

Fuses

+

There are a lot of SMD elements marked FBnnn, these are NOT fuses (at least +they don't seem to blow-up whatever you do). The actual fuses are marked PSnnn, +found near the power switch and near the power socket.

+

IC601 3pin +5.0V "78M05, RZ125, (ON)"

+
  1 +7.5V
+  2 GND
+  3 +5.0V   (used for Multiout, IC405, and IC502)
+
+

IC602 - Audio/CDROM Supply

+

Called "LP29851MX-3.5" in service manual.
+

  1 VIN    5.0V (in)
+  2 GND    GND
+  3 ON/OFF 5.0V (in)
+  4 NOISE  ?
+  5 VOUT   3.48V (out)
+

+

IC002/IC003 - Reset Generator (PM-41 board)

+

  IC002  IC003  Expl.
+  2      2      connected to Q002 (reset input?)
+  5      5      connected via capacitor to GND
+  6      1      reset-output (IC002=wired to /RES, IC003: via Q004 to /RES)
+  7      -      7.5V
+  4      3      GND
+  1,3,8  4      NC
+
+/RES is connected via 330 ohm to GPU/CPU, and via 5K6 SPU/IC722/IC304.
+Note: Either IC002 or IC003/Q004 can be installed on PM-41 boards. Most or all +boards seem to contain IC003/Q004.
+Note: PSX consoles have something similar on the Power Supply boards (IC101: +M51957B).

+

IC606/IC607 - TL594CD - Pulse-Width-Modulation Power-Control Chip

+
  1 1IN+
+  2 1IN-
+  3 FEEDBACK
+  4 DTC
+  5 CT
+  6 RT
+  7 GND
+  8 C1
+  9  E1
+  10 E2
+  11 C2
+  12 VCC
+  13 OUTPUT CTRL
+  14 REF
+  15 2IN-
+  16 2IN+
+
+

Q602

+
  x +7.5V
+  y +3.5V
+  z REG
+
+

CN602 - PU-8, PU-9 board Power Socket (to internal power supply board)

+

  1 Brown   7.5V (actually 7.69V)
+  2 Red     GND  Ground
+  3 Orange  3.5V (actually 3.48V)
+  4 Yellow  GND  Ground
+  5 White   STAND-BY (3.54V, always ON, even if power switch is off)
+  6 Blue    GND  Ground
+  7 Magenta /RES Reset input (from power-on logic and reset button)
+
+Purpose of the standy-by voltage is unknown... maybe to expansion port?

+

CN602 - PU-18, PU-23 board Power Socket (to internal power supply board)

+
  1 Brown   7.5V (actually 7.92V or so) (ie. higher than in PSone)
+  2 Red     GND  Ground
+  3 Orange  3.5V (actually 3.53V or so) (ie. quite same as PSone)
+  4 Yellow  GND  Ground
+  5 White   /RES Reset input (from power-on logic and reset button)
+
+

CN102 - Controller/memory card daughter-board connector (PU-23 board)

+
  1 /IRQ10 (/IRQ10)
+  2 /ACK (/IRQ7)
+  3 /JOY2
+  4 7.5V (or actually 7.92V)
+  5 /JOY1
+  6 DAT
+  7 GND
+  8 CMD
+  9 3.5V
+  10 CLK
+
+

Pinouts - Component List and Chipset Pin-Outs for Digital Joypad, SCPH-1080

+

Digital Joypad Component List (SCPH-1080)

+
  Case: "SONY, CONTROLLER, Sony Computer Entertainment Inc. H"
+  Case: "SCPH-1080 Made in China"
+  PCB: "CMK-PIHB /\, CFS8121-200010-01"
+  U?: 32pin "(M), SC401800, FB C37B, JSJD520C" (Motorola) (TQFP-32 package)
+  U?: 14pin "BA10339F, 528 293" (Quad Comparator) (/ACK,JOYDAT,and reset or so)
+  X?:  3pin "4.00G1f" (on PCB bottom side)
+  Z1:  2pin z-diode or so (on PCB bottom side) (+1.7V VREF for BA10339F)
+  CN?: 7pin cable to controller port (plus shield; but not connected to PCB)
+  C1   2pin   to GND and R5
+  C2   2pin capacitor for power supply input (between +3.5V and GND)
+  C3   2pin   between BA.pin8 and (via R6) BA.pin15
+  R1   2pin 1M ohm (for X1)
+  R2   2pin 2.7K
+  R3   2pin 8xK ohm?
+  R4   2pin 100K
+  R5   2pin 22K ohm
+  R6   2pin 56K ohm
+  RN1  8pin 4x200 ohm (/JOYn,JOYCMD,JOYCLK)
+  RN2  8pin 4x22K ohm (pull-ups for button bit0..3)
+  RN3  8pin 4x22K ohm (pull-ups for button bit12..15)
+  RN4  8pin 4x22K ohm (pull-ups for button bit8..11)
+  RN5  8pin 4x22K ohm (pull-ups for button bit4..7)
+
+

Digital Joypad Connection Cable:

+
  PSX.1 -------brown---- PAD.2 JOYDAT
+  PSX.2 -------orange--- PAD.6 JOYCMD
+  PSX.3 ---              NC    +7.5V
+  PSX.4 -------black---- PAD.3 GND
+  PSX.5 -------red------ PAD.4 +3.5V
+  PSX.6 -------yellow--- PAD.5 /JOYn
+  PSX.7 -------blue----- PAD.7 JOYCLK
+  PSX.8 ---              NC    /IRQ10
+  PSX.9 -------green---- PAD.1 /ACK
+  PSX.Shield --shield--- NC    (cable is shielded but isn't connected in joypad)
+
+

Digital Joypad 32pin SC401800 Chip Pin-Outs

+
  1 Bit14 SW-X
+  2 Bit13 SW-O
+  3 Bit12 SW-/\
+  4 Bit11 SW-R1 (via cable pin1, white wire)
+  5 Bit10 SW-L1 (via cable pin1, white wire)
+  6 Bit9  SW-R2 (via cable pin3, black wire)
+  7 Bit8  SW-L2 (via cable pin3, black wire)
+  8 via BA10339F.pin7 to cn.2 JOYDAT (PSX.1)
+  ---
+  9  via RN1 (200 ohm) to cn.5 /JOYn  (PSX.6)
+  10 via RN1 (200 ohm) to cn.6 JOYCMD (PSX.2)
+  11 via RN1 (200 ohm) to cn.7 JOYCLK (PSX.7)
+  12 GND to cn.3 (PSX.4)
+  13 Bit7 SW-LEFT
+  14 Bit6 SW-DOWN
+  15 Bit5 SW-RIGHT
+  16 via BA10339F.pin5 to cn.1 /ACK (PSX.9)
+  ---
+  17 Bit4 SW-UP
+  18 Bit3 SW-START
+  19 Bit2 (HI) (would be R3 on Analog Pads) ;\unused, but working button inputs
+  20 Bit1 (HI) (would be L3 on Analog Pads) ;/(each fitted with a RN2 pullup)
+  21 Bit0 SW-SELECT
+  22
+  23
+  24 wired to SC401800.pin25
+  ---
+  25 wired to SC401800.pin24
+  26 4.00MHz'a
+  27 4.00MHz'b
+  28 +3.5V to cn.4 (PSX.5)
+  29 wired to SC401800.pin32, and via 22K ohm to +3.5V, and to BA.14
+  30
+  31 Bit15 SW-[]
+  32 wired to SC401800.pin29
+
+

Digital Joypad 14pin BA10339F Chip Pin-Outs

+
  1 OUT2  CN.2 JOYDAT (PSX.1)
+  2 OUT1  CN.1 /ACK (PSX.9)
+  3 VCC   +3.5V
+  4 -IN1  +1.7V VREF via Z1 to GND
+  5 +IN1  CXD.16 /ACK
+  6 -IN2  +1.7V VREF via Z1 to GND
+  7 +IN2  CXD.8  JOYDAT
+  ---
+  8 -IN3  +1.7V VREF via Z1 to GND
+  9 +IN3      C3,R3,R4
+  10 -IN4     C1 to +3.5V
+  11 +IN4 GND
+  12 GND  GND
+  13 OUT4     NC ??
+  14 OUT3 CXD.29/32
+
+

Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1150

+

This applies for two controller versions:
+

  SCPH-1150 Analog Pad with Single Rumble Motor (japan only)
+  SCPH-1180 Analog Pad without Rumble Motor
+
+Both are using the same PCB, and the same SD657 chip. The difference is that +the motor, transistors, and some resistors aren't installed in SCPH-1180.

+

Analog Joypad Component List (SCPH-1150, single motor)

+
  Case "SONY, ANALOG, CONTROLLER, SonyCompEntInc. A, SCPH-1150 MADE IN CHINA"
+  PCB1 "DD1P09A" (mainboard with digital buttons)
+  PCB2 "DD1Q14A" (daughterboard with analog joysticks)
+  PCB3 "DD1Q15A-R" (daughterboard with R-1, R-2 buttons) (J3)
+  PCB4 "DD1Q15A-L" (daughterboard with L-1, L-2 buttons) (J2)
+  U1  42pin "SD657, 9702K3006"   (2x21pins, L=17.8mm, W=7mm, W+Pins=11mm)
+  U2   3pin "DR, 4.Z"
+  Q1   3pin "BQ03" or so (motor post-amp)
+  Q2   3pin "S6","SG","9S" or so (motor pre-amp)
+  Y1   3pin "400CMA"
+  CN1  8pin cable to PSX controller port
+  CN2  8pin ribbon cable to analog-joystick daughterboard (not so robust cable)
+  J1   2pin wires to rumble motor (in left handle) (digital, on/off)
+  J2   3pin ribbon cable to L-1, L-2 button daughterboard
+  J3   3pin ribbon cable to R-1, R-2 button daughterboard
+  LED1 4pin red/green LED (optics without mirror)
+  D1,D2 diodes
+  plus resistors/capacitors
+
+

Analog Joypad Connection Cables (SCPH-1150)

+

CN1 (cable to PSX controller port) (same for SCPH-1150 and SCPH-1200)
+

  PSX.1 -------brown---- PAD.2 JOYDAT
+  PSX.2 -------orange--- PAD.6 JOYCMD
+  PSX.3 -------magenta-- PAD.8 +7.5V
+  PSX.4 -------black---- PAD.3 GND
+  PSX.5 -------red------ PAD.4 +3.5V
+  PSX.6 -------yellow--- PAD.5 /JOYn
+  PSX.7 -------blue----- PAD.7 JOYCLK
+  PSX.8 ---              NC    /IRQ10
+  PSX.9 -------green---- PAD.1 /ACK
+  PSX.Shield --shield--- NC    (cable is shielded but isn't connected in joypad)
+
+CN2 (ribbon cable to analog-joystick daughterboard) (SCPH-1150)
+
  8 +3.5V to POT pins
+  7 Button L3 pins A,C
+  6 GND to POT pins and Button L3/R3 pins B,D
+  5 Button R3 pins A,C
+  4 Axis R_Y middle POT pin (SD657.18)
+  3 Axis R_X middle POT pin (SD657.17)
+  2 Axis L_Y middle POT pin (SD657.16)
+  1 Axis L_X middle POT pin (SD657.15)
+
+J3 (ribbon cable to R-1, R-2 button daughterboard) (SCPH-1150)
+
  1 (red)  R1
+  2 (gray) GND
+  3 (gray) R2
+
+J2 (ribbon cable to L-1, L-2 button daughterboard) (SCPH-1150)
+
  1 (red)  L1
+  2 (gray) GND
+  3 (gray) L2
+
+J1 wires to small rumble motor (SCPH-1150)
+
  1 (red)   +7.5V
+  2 (black) Q1
+

+

Analog Joypad Chipset Pin-Outs (SCPH-1150)

+

U1 42pin "SD657, 9702K3006"
+

  1  NC?
+  2  NC?
+  3  /RESET? (U2.3)
+  4  OSC
+  5  OSC
+  6  BUTTON Bit3 START SW1
+  7  BUTTON Bit2 R3 (via CN2.5)
+  8  BUTTON Bit1 L3 (via CN2.7)
+  9  BUTTON Bit0 SELECT SW3
+  10 GND
+  11 BUTTON Bit7 LEFT  SW4
+  12 BUTTON Bit6 DOWN  SW5
+  13 BUTTON Bit5 RIGHT SW6
+  14 BUTTON Bit4 UP    SW7
+  15 Analog Axis L_X (via CN2.1)
+  16 Analog Axis L_Y (via CN2.2)
+  17 Analog Axis R_X (via CN2.3)
+  18 Analog Axis R_Y (via CN2.4)
+  19 NC?
+  20 3.5V
+  21 3.5V
+  ---
+  22 BUTTON Bit15 [] SW11
+  23 BUTTON Bit14 >< SW10
+  24 BUTTON Bit13 () SW9
+  25 BUTTON Bit11 R1 (via J3.1)
+  26 BUTTON Bit12 /\ SW8
+  27 BUTTON Bit10 L1 (via J3.1)
+  28 BUTTON Bit9  R2 (via J3.3)
+  29 BUTTON Bit8  L2 (via J3.3)
+  30 PSX.2/CN1.6 JOYCMD  orange (via 220 ohm R14)
+  31 PSX.1/CN1.2.JOYDAT  brown  (via 22 ohm R13 and diode D2)
+  32 PSX.7/CN1.7 JOYCLK  blue   (via 220 ohm R12)
+  33 PSX.6/CN1.5./JOYn   yellow (via 220 ohm R11)
+  34 LED.GREEN (LED.4)
+  35 LED.RED   (LED.3)
+  36 MOTOR (via 4.7Kohm R8 to Q2, then via Q1 to motor)
+  37 NC?
+  38 NC?
+  39 PSX.9/CN1.1./ACK    green  (via 22 ohm R10)
+  40 NC?
+  41 MODE SW2 (analog button)
+  42 GND
+
+U2 (probably reset signal related)
+
  1  from 3.5V (via R1,D1,R2)
+  2  to U1.3 (/RESET?) (U2.rear contact = same as U2.pin2)
+  3  GND
+
+Q1 "BQ03" or so (motor post-amp)
+
  1  Q2.2 (via 1Kohm R7)
+  2  to Motor (-)
+  3  GND
+
+Q2 "S6","SG","9S" or so (motor pre-amp)
+
  1  SD657.36 (via 4.7Kohm R8)
+  2  Q1.1 (via 1Kohm R7) (and via 100Kohm R13 to GND)
+  3  3.5V
+

+

Motor

+

Left/Single Motor (SCPH-1150)
+

  27.5mm Total Length (18.5mm Motor, 2mm Axis, 7mm Weight/block)
+  12.0mm Width/Diameter (of Weight, and of Motor at flat side)
+

+

Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1200

+

Analog Joypad Component List (SCPH-1200, two motors)

+
  Case "SONY, ANALOG, CONTROLLER, SonyCompEntInc. H, SCPH-1200 MADE IN CHINA"
+  PCB1 "01, /\YG-H2, (r)RU" (mainboard with digital buttons)
+  PCB2 "M-29-01, YG-H3, (r)RU" (daughterboard with analog joysticks)
+  PCB3 "E, /\YG-H2, (r)RU, 01" (daughterboard with R-1, R-2 buttons) (J1)
+  PCB4 "01, W, /\YG-H2, (r)RU" (daughterboard with L-1, L-2 buttons) (J2)
+  U1 44pin "SONY, CXD8771Q 4A03, JAPAN 9840 HAL, 148896"
+  U2  4pin ",\\ 29" (PST9329) (System Reset with 2.9V detection voltage)
+  U3  8pin "2904, 8346G, JRC" (NJM2904) (Dual Operational Amplifier)
+  Q1  3pin ".Y S'" (big transistor for big M1 rumble motor)
+  Q2  3pin "Z" (small transistor for small M2 rumble motor)
+  Y1  3pin "800CMLX" or so (hides underneath of the CN2 ribbon cable)
+  CN1 8pin cable to PSX controller port
+  CN2 8pin ribbon cable to analog-joystick daughterboard
+  J1  3pin ribbon cable to R-1, R-2 button daughterboard
+  J2  3pin ribbon cable to L-1, L-2 button daughterboard
+  M1  2pin wires to left/big rumble motor (analog, slow/fast)
+  M2  2pin wires to right/small rumble motor (digital, on/off)
+  ZD1,ZD2 some Z-diodes
+  D1,D2 diodes near M1,M2 motors (these diodes aren't installed)
+  LED1  red analog mode LED (with transparent optics/light direction mirror)
+  plus resistors/capacitors
+
+

Note: There's also a different SCPH-1200 revision, which having a smaller +mainboard with analog joysticksonboard, plus a single sided PCB for the digital +buttons (that is, similar to SCPH-110, but with the single sided PCB instead of +membrane foil).

+

Analog Joypad Connection Cables (SCPH-1200)

+

CN1 (cable to PSX controller port) (same for SCPH-1150 and SCPH-1200)
+

  PSX.1 -------brown---- PAD.2 JOYDAT
+  PSX.2 -------orange--- PAD.6 JOYCMD
+  PSX.3 -------magenta-- PAD.8 +7.5V
+  PSX.4 -------black---- PAD.3 GND
+  PSX.5 -------red------ PAD.4 +3.5V
+  PSX.6 -------yellow--- PAD.5 /JOYn
+  PSX.7 -------blue----- PAD.7 JOYCLK
+  PSX.8 ---              NC    /IRQ10
+  PSX.9 -------green---- PAD.1 /ACK
+  PSX.Shield --shield--- NC    (cable is shielded but isn't connected in joypad)
+
+CN2 (ribbon cable to analog-joystick daughterboard) (SCPH-1200)
+
  1 +3.5V to POT pins
+  2 Button L3 pins C,D
+  3 GND to POT pins and Button L3/R3 pins A,B
+  4 Button R3 pins C,D
+  5 Axis R_Y middle POT pin (CXD.20)
+  6 Axis R_X middle POT pin (CXD.19)
+  7 Axis L_X middle POT pin (CXD.21)
+  8 Axis L_Y middle POT pin (CXD.22)
+
+J1 (ribbon cable to R-1, R-2 button daughterboard) (SCPH-1200)
+
  1 (red)  R1
+  2 (gray) GND
+  3 (gray) R2
+
+J2 (ribbon cable to L-1, L-2 button daughterboard) (SCPH-1200)
+
  1 (red)  L1
+  2 (gray) GND
+  3 (gray) L2
+
+M1 wires to big rumble motor (SCPH-1200)
+
  + (red)   Q1.E
+  - (black) GND
+
+M2 wires to small rumble motor (SCPH-1200)
+
  + (red)   +7.5V
+  - (black) Q2.C
+

+

Analog Joypad Chipset Pin-Outs (SCPH-1200)

+

U1 SONY CXD8771Q
+

  1 PSX.7/CN1.7 JOYCLK (via 220 ohm R2)
+  2 via R10 to U3.3 (for big M1 motor)
+  3 via R15 to Q2.B (for small M2 motor)
+  4 GND
+  5 BUTTON Bit15 []
+  6 BUTTON Bit14 ><
+  7 BUTTON Bit13 ()
+  8 BUTTON Bit12 /\
+  9 BUTTON Bit11 R1 (via J1.1)
+  10 BUTTON Bit10 L1 (via J2.1)
+  11 BUTTON Bit9 R2 (via J1.3)
+  ---
+  12 BUTTON Bit8 L2 (via J2.3)
+  13 GND
+  14 U2.Pin3 (reset)
+  15 Y1'a
+  16 Y1'b
+  17 GND
+  18 +3.5V
+  19 Analog Axis R_X via CN2.6
+  20 Analog Axis R_Y via CN2.5
+  21 Analog Axis L_X via CN2.7
+  22 Analog Axis L_Y via CN2.8
+  ---
+  23 GND
+  24 GND
+  25 GND
+  26 GND
+  27 GND
+  28 +3.5V
+  29 BUTTON Bit0 SELECT
+  30 BUTTON Bit1 L3 (via CN2.2)
+  31 BUTTON Bit2 R3 (via CN2.4)
+  32 BUTTON Bit3 START
+  33 BUTTON Bit4 UP
+  ---
+  34 BUTTON Bit5 RIGHT (aka spelled RIHGT on the PCB)
+  35 BUTTON Bit6 DOWN
+  36 BUTTON Bit7 LEFT
+  37 PSX.6/CN1.5./JOYn  (via 220 ohm R1)
+  38 ANALOG BUTTON
+  39 GND
+  40 +3.5V
+  41 /LED (to LED1, and from there via 300 ohm R6 to +3.5V)
+  42 PSX.9/CN1.1./ACK   (via 22 ohm R5)
+  43 PSX.1/CN1.2.JOYDAT (via 22 ohm R3)
+  44 PSX.2/CN1.6 JOYCMD (via 220 ohm R4)
+
+U2 PST9329 (System Reset with 2.9V detection voltage)
+
  1 NC   GND
+  2 GND  GND
+  3 Vout U1.14
+  4 VCC  +3.5V
+
+U3 NJM2904 (Dual Operational Amplifier)
+
  1 A.OUTPUT  Q1.B (big motor M1 transistor)
+  2 A.INPUT-  to R11/R12
+  3 A.INPUT+  to R10/R17
+  4 GND       PSX.4/CN1.3 GND
+  5 B.INPUT+  GND
+  6 B.INPUT-  NC?
+  7 B.OUTPUT  NC?
+  8 VCC       PSX.3/CN1.8 +7.5V
+
+Q1 (transistor for big M1 motor)
+
  E M1+
+  B U3.1 (NJM2904)
+  C +7.5V
+
+Q2 (transistor for small M2 motor)
+
  E GND
+  B via 1K ohm R15 to U1.3 (CXD), and via 100K ohm R16 to GND
+  C M2-
+

+

Motors

+
 Left/Large Motor (SCPH-1200)
+  24.0mm Total Length (12.0mm Motor, 2.5mm Axis, 9.5mm Weight/plates)
+  24.0mm Diameter (Motor), 20.0mm Diameter (Weight/plates)
+ Right/Small Motor (SCPH-1200)
+  25.4mm Total Length (18.7mm Motor, 2mm Axis, 4.7mm Weight/plates)
+  12.0mm Width/Diameter (of Weight, and of Motor at flat side)
+
+

Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-110

+

Analog Joypad Component List (SCPH-110, two motors, PSone-design)

+
  Case "SONY, ANALOG CONTROLLER, SonyCompEntInc. A, SCPH-110 MADE IN CHINA"
+  PCB1 "SA1Q22A, <PF-LP>, KPC, 7694V-0" (mainboard with joysticks onboard)
+  PCB2 "..." (membrane/foil with digital buttons)
+  U1  44pin "SD707, 039 107"" (4x11pin)
+  Q1   3pin "KA" (big transistor for left/big M1 rumble motor)
+  Q2   3pin "LG" (small transistor for right/small M2 rumble motor)
+  D1   2pin diode (for large motor, reference Z-diode with pull-up?)
+  D2   3pin dual-diode (R5/IRQ7 to GND and R3/DAT to GND)
+  CN1  9pin cable to PSX controller port
+  J1  16pin ribbon cable from membrane/foil
+  M1   2pin wires to left/big rumble motor (analog, slow/fast)
+  M2   2pin wires to right/small rumble motor (digital, on/off)
+  LED1 2pin red analog mode LED (with long legs, without mirror/optics)
+  plus resistors/capacitors
+
+

Analog Joypad Connection Cables (SCPH-110)

+

CN1 (cable to PSX controller port)
+

  1 +3.5V (logic supply)
+  2 GND3  (logic supply)
+  3 /IRQ7
+  4 /SEL
+  5 CMD
+  6 DAT
+  7 CLK
+  8 GND7  (motor supply)
+  9 +7.5V (motor supply)
+
+J1 (ribbon cable with membrane/foil with digital buttons)
+
  1 BUTTON Bit8 L2
+  2 BUTTON Bit10 L1
+  3 BUTTON Bit4 UP
+  4 BUTTON Bit5 RIGHT
+  5 BUTTON Bit6 DOWN
+  6 BUTTON Bit7 LEFT
+  7 GND3
+  8 ANALOG BUTTON
+  9 BUTTON Bit0 SELECT
+  10 BUTTON Bit3 START
+  11 BUTTON Bit15 SQUARE   []
+  12 BUTTON Bit14 CROSS    ><
+  13 BUTTON Bit13 CIRCLE   ()
+  14 BUTTON Bit12 TRIANGLE /\
+  15 BUTTON Bit11 R1
+  16 BUTTON Bit9 R2
+
+M1 wires to left/big rumble motor (SCPH-110)
+
  1 (red)   Q1
+  2 (black) GND (via some ohm)
+
+M2 wires to right/small rumble motor (SCPH-110)
+
  1 (red)   +7.5V
+  2 (black) Q2
+

+

U1 ("SD707, 039 107")

+
  1 via R9/Q2 to M2 (right/small)     (digital 0V=off, 3V=on)
+  2 via "JP1" to LED (330 ohm)
+  3 +3.5V
+  4 BUTTON Bit2 R3
+  5 vr2 RX (lt/rt)
+  6 vr1 RY (up/dn)
+  7 vr4 LX (lt/rt)
+  8 vr3 LY (up/dn)
+  9 BUTTON Bit1 L3
+  10 GND3
+  11 GND7
+  ---
+  12 via Q1 to M1 (left/large)       (1V=off, 6V=fast)
+  13 via D1/R7 to M1 (left/large)    (6.7V)
+  14 +7.5V
+  15 +7.5V
+  16 BUTTON Bit8 L2
+  17 BUTTON Bit10 L1
+  18 BUTTON Bit4 UP
+  19 BUTTON Bit5 RIGHT
+  20 BUTTON Bit6 DOWN
+  21 BUTTON Bit7 LEFT
+  22 GND3
+  ---
+  23 BUTTON Bit9 R2
+  24 BUTTON Bit11 R1
+  25 BUTTON Bit12 TRIANGLE /\
+  26 BUTTON Bit13 CIRCLE   ()
+  27 BUTTON Bit14 CROSS    ><
+  28 BUTTON Bit15 SQUARE   []
+  29 BUTTON Bit3 START
+  30 BUTTON Bit0 SELECT
+  31 ANALOG BUTTON
+  32 NC
+  33 +3.5V
+  ---
+  34 GND3
+  35 NC
+  36 via R5 to /IRQ7
+  37 via R1 to /SEL
+  38 via R4 to CMD
+  39 via R3 to DAT
+  40 via R2 to CLK
+  41 +7.5V
+  42 +7.5V
+  43 GND7
+  44 GND7
+
+

Misc

+

VR1..VR4 -- analog inputs
+R1..R5 -- signals to/from psx
+R6 ?
+R7 M1
+R8
+R9
+R10
+JP1
+C1 3.5V to GND3 (22uF)
+C2 3.5V to GND3 (U1)
+C3 VR1 to GND3
+C4 VR2 to GND3
+C5 VR3 to GND3
+C6 VR4 to GND3
+C7 M2+ to M2-
+C8 M1+ to M1-
+C9 M1 related
+S5
+S6

+

Motors

+
 Left/Large Motor (SCPH-110)
+  23.0mm Total Length (12.0mm Motor, 3mm Axis, 8.0mm Weight/plates)
+  24.0mm Diameter (Motor), 20.0mm Diameter (Weight/plates)
+ Right/Small Motor (SCPH-110)
+  25.4mm Total Length (18.7mm Motor, 2mm Axis, 4.7mm Weight/plates)
+  12.0mm Width/Diameter (of Weight, and of Motor at flat side)
+
+
  M1+ --o---Q1---o--------- U1.12
+        |   |    |          analog
+  Left  |   |    C9
+  Large |   |    |
+        |   o----o--------- 7.5V
+        |        |
+       C8       R7
+        |   D1   |          6.7V
+        o---|>|--o--------- U1.13
+        |
+  M1- --o------------------ GND7
+
+

D1 is probably a Z-diode with R7 as pull-up, creating a reference/source +voltage at U1.13 for the analog output at U1.12.

+
  M2+ --o------------------ 7.5V
+        |
+  Right |   o-------o--R9-- U1.1
+  Small |   |       |       on/off
+       C7   |       R10
+        |   |       |
+  M2- --o---Q2------o------ GND7
+                                   ___                          ___ ____
+       axis                       |   |                        /   \    \
+     __/___                 ______| m |        __.____________|__.  |    |
+   /__/__/ |               | w |  |   |       |     | | axis  |     |    |
+  |      |/  weight        |___|  |___|        \___/_/         \___/____/
+   \____/                                      weight             motor
+
+

Pinouts - Component List and Chipset Pin-Outs for Namco Lightgun, NPC-103

+

Schematic

+

http://www.nicolaselectronics.be/reverse-engineering-the-playstation-g-con45/

+

Namco Lightgun "NPC-103, (C) 1996 NAMCO LTD." Component List

+

PCB "DNP-0500A, NPC10300, namco, CMK-P3X"
+

  U1  44pin "NAMCO103P, 1611U1263, JAPAN 9847EAI, D0489AAF"
+  U2   8pin "7071, 8C19" (=BA7071F, Sync Separator IC with AFC)
+  XTAL 2pin "CSA 8.00WT"
+  PS1  3pin Light sensor with metal shielding
+  J1   9pin Connector for 9pin cable to PSX controller and GunCon plugs
+  plus resistors and capacitors, and A1,A2,B1,B2,T1,T2 wires to buttons
+
+PCB "DN-P-0501"
+
  DIP Button (with black T1,T2 wires) (trigger)
+
+PCB "DN-P-0502"
+
  Button A (with red A1,A2 wires) (left side)
+  Button B (with white B1,B2 wires) (right side)
+
+Other Components
+
  Lens (20mm)
+
+Cable Pinouts
+
  J1.Pin1 green  PSX.Controller.Pin5 +3.5V
+  J1.Pin2 brown  PSX.Controller.Pin4 GND
+  J1.Pin3 black  PSX.Controller.Pin9 /ACK/IRQ7
+  J1.Pin4 red    PSX.Controller.Pin6 /JOYn
+  J1.Pin5 yellow PSX.Controller.Pin1 JOYDAT
+  J1.Pin6 orange PSX.Controller.Pin2 JOYCMD
+  J1.Pin7 blue   PSX.Controller.Pin7 JOYCLK
+  J1.Pin8 gray   GunCon shield (GND)
+  J1.Pin9 white  GunCon composite video
+  N/A            PSX.Controller.Pin3 +7.5V
+  N/A            PSX.Controller.Pin8 /IRQ10
+  N/A            PSX.Controller Shield
+
+U1 "NAMCO103P" Pinouts (44pin, arranged as 4x11pin)
+
  1 GND    12 SYNC (from U2)                     23 3.5V   34 SW1 (A)
+  2 GND    13 3.5V                               24 3.5V   35 3.5V
+  3 GND    14 3.5V                               25 3.5V   36 3.5V
+  4 GND    15 SW3 (TRIGGER)                      26 GND    37 SW2 (B)
+  5 GND    16 JOYCLK (J1.Pin7 via 220 ohm R7)    27 GND    38 3.5V
+  6 GND    17 3.5V                               28 GND    39 3.5V
+  7 GND    18 JOYCMD (J1.Pin6 via 220 ohm R8)    29 GND    40 LIGHT (from PS1)
+  8 GND    19 JOYDAT (J1.Pin5 via 0 ohm R10)     30 -      41 GND
+  9 -      20 /JOYn (J1.Pin4 via 220 ohm R9)     31 GND    42 GND
+  10 GND   21 /ACK/IRQ7 (J1.Pin3 via 0 ohm R11)  32 GND    43 OSC 8MHz
+  11 GND   22 GND                                33 GND    44 OSC 8MHz
+
+U2 "7071" Pinouts (=BA7071F, Sync Separator IC with AFC) (2x4pin)
+
  1 VIN      = SYNC.IN from J1.Pin9 Composite Video (via C5/C6/C7/R6)
+  2 HD_OUT   = NC
+  3 GND      = GND
+  4 PD_OUT   = NC
+  5 HOSC_R   = via 100K to GND
+  6 VCC      = 3.5V
+  7 VD_OUT   = NC
+  8 SYNC_OUT = SYNC.OUT to U1.pin12 (with R4 pull-up)
+

+

Pinouts - Component List and Chipset Pin-Outs for Multitap, SCPH-1070

+

Multitap Component List

+

  Case "SONY, MULTITAP, SonyComputerEntertainmentInc, SCPH-1070 MADE IN CHINA"
+  PCB1 "SONY 1-659-343-11" (mainboard with Slot A,B, ICs, X1, PSX-cable)
+  PCB2 "SONY 1-711-414-11" (daughterboard with Slot C,D)
+  IC? 64pin "SONY JAPAN, CXD103, -166Q, 550D66E"            (smd/back side)
+  IC02 8pin "7W14, 5K" some tiny SMD chip (for JOYCLK)      (smd/back side)
+  X1   2pin "4.00G CMj" oscillator                          (front side)
+  J34  2pin fuse or 1 ohm resistor or so (for +3.5V input)  (front side)
+  Jxx  2pin normal wire bridges (except: J34 is NOT a wire) (front side)
+
+Cables from Multitap PCB1 to PCB2:
+
  1pin black wire Shield/GND (lower edge)
+  1pin black wire Shield/GND (upper edge)
+  2x8pin red/gray ribbon cable (side edge)
+  2x2pin red/gray ribbon cable (lower edge)
+  2pin red/gray ribbon cable (upper middle) (gray=+3.3V, red=+7.5V)
+
+plus a bunch of SMD capacitors and around 70 SMD resistors.

+

Multitap PSX Controller Port Cable

+
  PSX.1 -------brown------ TAP.1 JOYDAT ;via  47 ohm (R57) to CXD.35
+  PSX.2 -------orange----- TAP.2 JOYCMD ;via 220 ohm (R58) to CXD.37
+  PSX.3 -------magenta---- TAP.3 +7.5V  ;directly to +7.5V on JOY/CARD's
+  PSX.4 -------black------ TAP.4 GND    ;directly to GND
+  PSX.5 -------red-------- TAP.5 +3.5V  ;via 1 ohm or so (J34) to +3.3V
+  PSX.6 -------yellow----- TAP.6 /JOYn  ;via 220 ohm (R59) to CXD.46
+  PSX.7 -------blue------- TAP.7 JOYCLK ;via 220 ohm (R60) to IC02.pin6
+  PSX.8 -------gray------- TAP.8 /IRQ10 ;via 47 ohm (R02/R16/R30/R44) to JOY's
+  PSX.9 -------green------ TAP.9 /ACK   ;via 47 ohm (R61) to CXD.51
+  PSX.Shield --shield----- TAP.shielding.plate (GND)
+
+

Multitap CARD A/B/C/D Slots

+
  1 JOYDAT Via  47 ohm (R11/R25/R38/R5x) to CXD.18/29/60/5 (and to JOY slot)
+  2 JOYCMD Via 220 ohm (R10/R24/R39/R52) to CXD.19/30/62/6
+  3 +7.5V  Directly to PSX.3
+  4 GND    Directly to PSX.4
+  5 +3.3V  Via J34 to PSX.5 (+3.5V)
+  6 /JOYn  Via 220 ohm (R09/R2x/Rxx/R51) to CXD.11/22/52/61
+  7 JOYCLK Via 220 ohm (R08/R2x/Rxx/R50) to CXD.33/33/47/47
+  9 /ACK   Via  47 ohm (R07/R2x/Rxx/R49) to CXD.12/21/45/64
+
+

Multitap JOY A/B/C/D Slots

+
  1 JOYDAT Via  47 ohm (R06/Rxx/R34/R5x) to CXD.18/29/60/5 (and to CARD slot)
+  2 JOYCMD Via 220 ohm (R05/R19/R35/R5x) to CXD.17/28/59/4
+  3 +7.5V  Directly to PSX.3
+  4 GND    Directly to PSX.4
+  5 +3.3V  Via 1 ohm or so (J34) to PSX.5 (+3.5V)
+  6 /JOYn  Via 220 ohm (R04/R18/R32/R4x) to CXD.16/20/55/63
+  7 JOYCLK Via 220 ohm (R03/R17/R31/R45) to CXD.15/23/56/2
+  8 /IRQ10 Via  47 ohm (R02/R16/R30/R44) to PSX.8
+  9 /ACK   Via  47 ohm (R01/R15/R29/R43) to CXD.13/27/54/7
+  Shield   Directly to Shield/GND
+
+

Multitap IC02 8pin "7W14, 5K" some tiny SMD chip

+
  1
+  2
+  3
+  4 GND
+  5
+  6 via 220 ohm (R60) to PSX.7 (JOYCLK)
+  7 to CXD.Pin48
+  8 +3.3V, aka via 1 ohm (J34) to PSX.5 (+3.5V)
+
+

Multitap "SONY CXD103-166Q" Chip Pin-Outs (Multitap CPU)

+
  1 via to 10K (R63) to +3.3V, and via C13 to GND (probably power-on reset)
+  2 JOY.D.7.JOYCLK
+  3
+  4 JOY.D.2.JOYCMD
+  5 JOY/CARD.D.1.JOYDAT
+  6 CARD.D.2.JOYCMD
+  7 JOY.D.9./ACK
+  8 4MHz X1/C12
+  9 4MHz X1/C11
+  10 GND
+  11 CARD.A.6./JOYn
+  12 CARD.A.9./ACK
+  13 JOY.A.9./ACK
+  14
+  15 JOY.A.7.JOYCLK
+  16 JOY.A.6./JOYn
+  17 JOY.A.2.JOYCMD
+  18 JOY/CARD.A.1.JOYDAT
+  19 CARD.A.2.JOYCMD
+  ---
+  20 JOY.B.6./JOYn
+  21 CARD.B.9./ACK
+  22 CARD.B.6./JOYn
+  23 JOY.B.7.JOYCLK
+  24
+  25 GND
+  26 +3.3V
+  27 JOY.B.9./ACK
+  28 JOY.B.2.JOYCMD
+  29 JOY/CARD.B.1.JOYDAT
+  30 CARD.B.2.JOYCMD
+  31 GND
+  32
+  ---
+  33 CARD.A/B.7.JOYCLK
+  34
+  35 PSX.1.JOYDAT
+  36
+  37 PSX.2.JOYCMD
+  38
+  39
+  40
+  41
+  42 GND
+  43
+  44 GND
+  45 CARD.C.9./ACK
+  46 PSX.6./JOYn
+  47 CARD.C/D.7.JOYCLK
+  48 IC02.Pin7.PSX.JOYCLK
+  49
+  50
+  51 PSX.9./ACK
+  ---
+  52 CARD.C.6./JOYn
+  53
+  54 JOY.C.9./ACK
+  55 JOY.C.6./JOYn
+  56 JOY.C.7.JOYCLK
+  57 GND
+  58 +3.3V
+  59 JOY.C.2.JOYCMD
+  60 JOY/CARD.C.1.JOYDAT
+  61 CARD.D.6./JOYn
+  62 CARD.C.2.JOYCMD
+  63 JOY.D.6./JOYn
+  64 CARD.D.9./ACK
+
+

Pinouts - Memory Cards

+

Sony Playstation Memory Card (SCPH-1020)

+

The "SONY CXD8732AQ" chip is installed on memory cards with "SPC02K1020B" +boards, however, the text layer on the board says that it's an "LC86F8604A" +chip. So, the CXD8732AQ is most probably a standard LC86F8604A chip (more on +that below) with a Sony Memory Card BIOS ROM on it.
+The "SONY CXD8732AQ" comes in a huge 64pin package, but it connects only to:
+

  5 = /IRQ7   (via 22 ohm)         2 = /RESET (from U2)
+  6 = JOYCLK  (via 220 ohm)        30,31 = CF1,CF2 (12 clock pulses per 2us)
+  7 = /JOYn   (via 220 ohm)        14,16,25,32,38,39,61 = 3.5V (via 3.3 ohm)
+  12 = JOYCMD (via 220 ohm)        8,15,28,29 = GND
+  13 = JOYDAT (via 22 ohm)         All other pins = Not connected
+
+Aside from that chip, the board additionally contains some resistors, +capacitors, z-diodes (for protection against too high voltages), a 6MHz +oscillator (for the CPU), and a 5pin reset generator (on the cart edge +connector, the supply pins are slightly longer than the data signal pins, so +when inserting the cartridge, power/reset gets triggered first; the 7.5V supply +pin is left unconnected, only 3.5V are used).
+Caution: The "diagonal edge" at the upper-left of the CXD8732AQ chip is Pin 49 +(not pin 1), following the pin numbers on the board (and the Sanyo datasheet +pinouts), pin 1 is at the lower-left.

+

Sanyo LC86F8604A

+

8bit CPU with 132Kbyte EEPROM, 4Kbyte ROM, 256 bytes RAM, 2 timers, serial +port, and general purpose parallel ports. The 132K EEPROM is broken into 128K +plus 4K, the 4K might be internally used by the CPU, presumably containing the +BIOS (not too sure if it's really containing 4K EEPROM plus 4K ROM, or if it's +meant to be only either one).
+

  1=P40/A0  9=P13   17=TP0  25=VDD  33=A11  41=NC   49=A7    57=NC
+  2=/RES    10=P14  18=TP1  26=NC   34=A9   42=NC   50=A6    58=NC
+  3=TEST2   11=P15  19=TP2  27=NC   35=A8   43=NC   51=A5    59=NC
+  4=TEST1   12=P16  20=TP3  28=NC   36=A13  44=NC   52=A4    60=NC
+  5=P10     13=P17  21=TP4  29=VSS  37=A14  45=A17  53=NC    61=NC61
+  6=P11     14=/CE  22=TP5  30=CF1  38=/WE  46=A16  54=NC    62=P43/A3
+  7=P12     15=A10  23=TP6  31=CF2  39=VDD  47=A15  55=NC    63=P42/A2
+  8=VSS     16=/OE  24=TP7  32=VDD  40=EP   48=A12  56=NC    64=P41/A1
+
+Ports P10..P17 have multiple functions (I/O port, data bus, serial, etc):
+
  P10/DQ0/SEPMOD       P12/DQ2/FSI0  P14/DQ4    P16/DQ6/SI0/FSTART
+  P11/DQ1/SCLK0/FSCLK  P13/DQ3       P15/DQ5    P17/DQ7/SO0/FRW
+
+In March 1998, Sanyo has originally announced the LC86F8604A as an 8bit CPU +with "2.8V FLASH, achieved for the first time in the industry", however, +according to their datasheet, what they have finally produced is an 8bit CPU +with "3.5V EEPROM". Although, maybe the 3.5V EEPROM version came first, and the +2.8V FLASH was announced to be a later low-power version of the old chip; +namely, otherwise, it'd be everyones guess what kind of memory Sony used in +memory cards before 1998?

+

Note

+

For the actual pin-outs of the cart-edge connector, see
+Pinouts - Controller Ports and Memory-Card Ports

+

Mods - Nocash PSX-XBOO Upload

+

Nocash PSX-XBOO Connection (required)

+
  GND (BOARD)       --------- GND    (SUBD.18-25, CNTR.19-30)
+  A16 (ROM.2)       --------- SLCT   (SUBD.13, CNTR.13)     ;\
+  A17 (ROM.30)      --------- PE     (SUBD.12, CNTR.12)     ; 4bit.dta.out
+  A18 (ROM.31)      --------- /ACK   (SUBD.10, CNTR.10)     ;
+  A19 (ROM.1)       --------- BUSY   (SUBD.11, CNTR.11)     ;/
+  /RESET            ---|>|--- /INIT  (SUBD.16, CNTR.31)     ;-reset.in
+  D0..D7 (74HC541)  --------- DATA   (SUBD.2-9, CNTR.2-9)   ;\
+  Y0..Y7 (74HC541)  --------- D0..D7 (ROM.13-15,17-21)      ; 7bit.dta.in, and
+  /OE1 (74HC541.1)  --------- /EXP   (CPU.98)               ; 1bit.dta.clk.in
+  /OE2 (74HC541.19) --------- /OE    (ROM.24)               ;
+  GND  (74HC541.10) --------- GND    (BOARD)                ;
+  VCC  (74HC541.20) --------- +5V    (BOARD)                ;/
+
+

Nocash PSX-BIOS Connection (required)

+
  A0..A19 (ROM) --------- A0..A19 (EPROM)
+  D0..D7  (ROM) --------- D0..D7  (EPROM)
+  /BIOS (CPU.97)--------- /CS  (EPROM.22)
+  /OE (ROM.24)  --------- /OE  (EPROM.24)
+  +5V (BOARD)   --------- VCC  (EPROM.32)
+  GND (BOARD)   --------- GND  (EPROM.16)
+  /CS (ROM.22)  --/cut/-- /BIOS (CPU.97)
+  /CS (ROM.22)  --------- +5V  (BOARD) (direct, or via 100k ohm)
+
+

Nocash BIOS "Modchip" Feature (optional)

+

  SPU.Pin42 "data" -------|>|------ CPU.Pin149 (A20)
+  SPU.Pin5  "sync" ---------------- IC723.Pin17
+
+The nocash PSX bios outputs the "data" signal on the A20 address line, so +(aside from the BIOS chip) one only needs to install a 1N4148 diode and two +wires to unlock the CDROM. For more variants, see:
+CDROM Protection - Chipless Modchips

+

Composite NTSC/PAL Mod (optional)

+

Mods - PAL/NTSC Color Mods

+

Component List

+
  32pin socket for EPROM
+  EPROM (or FLASH)
+  74HC541 (8-bit 3-state noninverting buffer/line driver)
+  1N4148 diode (for reset signal)
+  1N4148 diode (for optional "modchip" feature)
+  36pin Centronics socket for printer cable (or 25pin dsub)
+
+

PSX-XBOO Upload BIOS

+

The required BIOS is contained in no$psx (built-in in the no$psx.exe file), the +Utility menu contains a function for creating a standalone ROM-image (file +PSX-XBOO.ROM in no$psx folder; which can be then burned to FLASH or EPROM).

+

Pinouts

+
              ______  ______                      ____  ____
+             |      \/      |                    |    \/    |
+  A19,VPP12  | 1         32 |  VCC6         /OE1 |1       20| VCC
+        A16  | 2         31 |  A18,/PGM       D0 |2       19| /OE2
+        A15  | 3         30 |  A17            D1 |3       18| Y0
+        A12  | 4         29 |  A14            D2 |4       17| Y1
+         A7  | 5         28 |  A13            D3 |5 74541 16| Y2
+         A6  | 6         27 |  A8             D4 |6       15| Y3
+         A5  | 7         26 |  A9,IDENT12     D5 |7       14| Y4
+         A4  | 8         25 |  A11            D6 |8       13| Y5
+         A3  | 9         24 |  /OE,VPP12      D7 |9       12| Y6
+         A2  | 10        23 |  A10           GND |10      11| Y7
+         A1  | 11        22 |  /CE,(/PGM)        |__________|
+         A0  | 12        21 |  D7
+         D0  | 13        20 |  D6
+         D1  | 14        19 |  D5
+         D2  | 15        18 |  D4
+        GND  | 16        17 |  D3
+             |______________|
+
+

Note

+

Instead of the above internal mod, the nocash kernel clone can be also +installed on cheat devices, which do also include DB25 connectors for parallel +port uploads, too.
+For DB25 parallel port uploads, do the following mods to the cheat device:
+

 - Datel: use the FiveWire mod to get it parallel port compatible
+ - Xplorer: simply wire DB25./INIT to EXP./RESET (with diode, if needed)
+

+

Mods - PAL/NTSC Color Mods

+

The PSX hardware is more or less capable of generating both PAL and NTSC +signals. However, it's having the bad habbit to do this automatically depending +on the game's frame rate. And worse, it's doing it regardless of whether the +board is having matching oscillators installed (eg. a PAL board in 60Hz mode +will produce NTSC encoding with faulty NTSC color clock).
+

  color encoding    PAL             NTSC
+  color clock       4.43361875MHz   3.579545MHz
+  frame rate        50Hz            60Hz
+

+

RGB Cables

+

RGB cables don't rely on composite PAL/NTSC color encoding, and thus don't need +any color mods (except, see the caution on GNDed pins for missing +53.20MHz/53.69MHz oscillators below).

+

Newer Consoles (PU-22, PU-23, PM-41, PM-41(2))

+

These consoles have 17.734MHz (PAL) or 14.318MHz (NTSC) oscillators with +constant dividers, so the color clock will be always constant, and one does +only need to change the color encoding:
+

  /PAL (IC502.pin13) ---/cut/--- /PAL (GPU.pin157)
+  /PAL (IC502.pin13) ----------- GND (PAL) or VCC (NTSC)
+
+This forces the console to be always producing the desired composite color +format (regardless of whether the GPU is in 50Hz or 60Hz mode).
+That works for NTSC games on PAL consoles (and vice-versa). However, it won't +work for NTSC consoles with PAL TV Sets (for that case it'd be easiest to +install an extra oscillator, as done on older consoles).

+

Older Consoles (PU-7, PU-8, PU-16, PU-18, PU-20)

+

These consoles have 53.20MHz (PAL) or 53.69MHz (NTSC) oscillators and the GPU +does try to change the clock divider depending on the frame rate (thereby +producing a nonsense clock signal that's neither PAL nor NTSC). Best workaround +is to install an extra 4.43361875MHz (PAL) or 3.579545MHz (NTSC) oscillator +(with internal amplifier, ie. in 4pin package, which resembles DIP14, hence the +pin 1,7,8,14 numbering):
+

  GPU ------------------/cut/--- CXA1645M.pin6  SCIN
+  GPU ------------------/cut/--- CXA1645M.pin7  /PAL
+  Osc.pin14 VCC ---------------- CXA1645M.pin12 VCC (5V)
+  Osc.pin7  GND ---------------- CXA1645M.pin1  GND
+  Osc.pin8  OUT ---------------- CXA1645M.pin6  SCIN
+  Osc.pin1  NC  --
+  GND (PAL) or VCC (NTSC) ------ CXA1645M.pin7  /PAL
+
+Caution: Many mainboards have solder pads for both 53.20MHz and 53.69MHz +oscillators, the missing oscillator is either GNDed or shortcut with the +installed oscillator (varies from board to board, usually via 0 ohm resistors +on PCB bottom side). If it's GNDed, remove that connection, and instead have it +shortcut with the installed oscillator.
+Alternately, instead of the above mods, one could also install the missing +oscillator (and remove its 0 ohm resistor), so the board will have both +53.20MHz and 53.69MHz installed; that will produce perfect PAL and NTSC signals +in 50Hz and 60Hz mode accordingly, but works only if the TV Set recognizes both +PAL and NTSC signals.

+

Notes

+

External 4.433MHz/3.579MHz osciallors won't be synchronized with the GPU frame +rate (normally you don't want them to be synchronized, but there's some small +risk that they might get close to running in sync, which could result in static +or crawling color artifacts).
+For the CXA1645 chip modded to a different console region, one should also +change one of the resistors (see datasheet), there's no noticable difference on +the TV picture though.

+

Region Checks

+

Some kernel versions contain regions checks (additionally to the SCEx check), +particulary for preventing NTSC games to run on PAL consoles, or non-japanese +games on japanese consoles. Some PAL modchips can bypass that check (by +patching the region byte in BIOS). Expansions ROMs or nocash kernel clone could +be also used to avoid such checks.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/pocketstation/index.html b/pocketstation/index.html new file mode 100644 index 0000000..3c8a8e0 --- /dev/null +++ b/pocketstation/index.html @@ -0,0 +1,5370 @@ + + + + + + + + + + + + + + + + + + + + + + + + Pocketstation - PlayStation Specifications - psx-spx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Pocketstation

+

Pocketstation Overview
+Pocketstation I/O Map
+Pocketstation Memory Map
+Pocketstation IO Video and Audio
+Pocketstation IO Interrupts and Buttons
+Pocketstation IO Timers and Real-Time Clock
+Pocketstation IO Infrared
+Pocketstation IO Memory-Control
+Pocketstation IO Communication Ports
+Pocketstation IO Power Control
+Pocketstation SWI Function Summary
+Pocketstation SWI Misc Functions
+Pocketstation SWI Communication Functions
+Pocketstation SWI Execute Functions
+Pocketstation SWI Date/Time/Alarm Functions
+Pocketstation SWI Flash Functions
+Pocketstation SWI Useless Functions
+Pocketstation BU Command Summary
+Pocketstation BU Standard Memory Card Commands
+Pocketstation BU Basic Pocketstation Commands
+Pocketstation BU Custom Pocketstation Commands
+Pocketstation File Header/Icons
+Pocketstation File Images
+Pocketstation XBOO Cable

+

Pocketstation Overview

+

Sony's Pocketstation (SCPH-4000) (1998)

+

The Pocketstation is a memory card with built-in LCD screen and buttons; aside +from using it as memory storage device, it can be also used as miniature +handheld console.

+
  CPU        ARM7TDMI (32bit RISC Processor) (variable clock, max 7.995MHz)
+  Memory     2Kbytes SRAM (battery backed), 16Kbytes BIOS ROM, 128Kbytes FLASH
+  Display    32x32 pixel LCD (black and white) (without any grayscales)
+  Sound      Mini Speaker "(12bit PCM) x 1 unit" / "8bit PCM with 12bit range"
+  Controls   5 input buttons, plus 1 reset button
+  Infrared   Bi-directional (IrDA based)
+  Connector  Playstation memory card interface
+  RTC        Battery backed Real-Time Clock with time/date function
+  Supply     CR2032 Battery (3VDC) (used in handheld mode, and for SRAM/RTC)
+    _________
+   / _______ \
+  | |       | |
+  | |  LCD  | |                                __
+  | |_______| |                Side Views     | _|
+  |\_________/|                               || <-------- Button Cover
+  |   O       |          (Closed)      (Open) ||
+  | O   O   O |    ____________          _____||  .------- Reset Button
+  |   O       |   | LCD  \____ |        | LCD \|__|_
+  |___________|   |___________||        |___________| <--- Memory card plug
+
+

The RTC Problem

+

The main problem of the Pocketstation seems to be that it tends to reset the +RTC to 1st January 1999 with time 00:00:00 whenever possible.
+The BIOS contains so many RTC-reset functions, RTC-reset buttons, RTC-reset +flags, RTC-reset communication commands, RTC-reset parameters, RTC-reset +exceptions, RTC-reset sounds, and RTC-reset animations that it seems as if Sony +actually WANTED the Time/Date to be destroyed as often as possible.
+The only possible reason for doing this is that the clock hardware is so +inaccurate that Sony must have decided to "solve" the problem at software +engineering side, by erasing the RTC values before the user could even notice +time inaccuracies.

+

CPU Specs

+

For details on the ARM7TDMI CPUs opcodes and exceptions, check GBATEK at,
+http://problemkaputt.de/gbatek.htm (or .txt)
+The GBA uses an ARM7TDMI CPU, too.

+

Thanks to Exophase, Orion, Fezzik, Dr.Hell for Pocketstation info.

+

Pocketstation I/O Map

+

Memory and Memory-Control Registers

+
  00000000h RAM        (2KB RAM) (first 512 bytes bytes reserved for kernel)
+  02000000h FLASH1     Flash ROM (virtual file-mapped addresses in this region)
+  04000000h BIOS_ROM      Kernel and GUI (16KB)
+  06000000h F_CTRL        Control of Flash ROM
+  06000004h F_STAT        Unknown?
+  06000008h F_BANK_FLG    FLASH virtual bank mapping enable flags(16 bits)(R/W)
+  0600000Ch F_WAIT1       waitstates...?
+  06000010h F_WAIT2       waitstates, and FLASH-Write-Control-and-Status...?
+  06000100h F_BANK_VAL    FLASH virtual bank mapping addresses (16 words) (R/W)
+  06000300h F_EXTRA       Extra FLASH (256 bytes, including below F_SN, F_CAL)
+  06000300h F_SN_LO       Extra FLASH Serial Number LSBs (nocash: 6BE7h)
+  06000302h F_SN_HI       Extra FLASH Serial Number MSBs (nocash: 426Ch)
+  06000304h F_?           Extra FLASH Unknown ?          (nocash: 05CAh)
+  06000306h F_UNUSED1     Extra FLASH Unused halfword    (nocash: FFFFh)
+  06000308h F_CAL         Extra FLASH LCD Calibration    (nocash: 001Ah)
+  0600030Ah F_UNUSED2     Extra FLASH Unused halfword    (nocash: FFFFh)
+  0600030Ch F_?           Extra FLASH Unknown ?          (nocash: 0010h)
+  0600030Eh F_UNUSED3     Extra FLASH Unused halfword    (nocash: FFFFh)
+  06000310h F_UNUSED4     Extra FLASH Unused (310..3FFh) (nocash: FFFFh-filled)
+  08000000h FLASH2        Flash ROM (128KB) (physical addresses in this region)
+  08002A54h F_KEY1        Flash Unlock Address 1 (W)
+  080055AAh F_KEY2        Flash Unlock Address 2 (W)
+
+

Interrupts and Timers

+
  0A000000h INT_LATCH     Interrupt hold (R)
+  0A000004h INT_INPUT     Interrupt Status (R)
+  0A000008h INT_MASK_READ Read Interrupt Mask (R)
+  0A000008h INT_MASK_SET  Set Interrupt Mask (W)
+  0A00000Ch INT_MASK_CLR  Clear Interrupt Mask (W)
+  0A000010h INT_ACK       Clear Interrupt hold (W)
+  0A800000h T0_RELOAD     Timer 0 Maximum value
+  0A800004h T0_COUNT      Timer 0 Current value
+  0A800008h T0_MODE       Timer 0 Mode
+  0A800010h T1_RELOAD     Timer 1 Maximum value
+  0A800014h T1_COUNT      Timer 1 Current value
+  0A800018h T1_MODE       Timer 1 Mode
+  0A800020h T2_RELOAD     Timer 2 Maximum value
+  0A800024h T2_COUNT      Timer 2 Current value
+  0A800028h T2_MODE       Timer 2 Mode
+  0B000000h CLK_MODE      Clock control (CPU and Timer Speed) (R/W)
+  0B000004h CLK_STOP      Clock stop (Sleep Mode)
+  0B800000h RTC_MODE      RTC Mode
+  0B800004h RTC_ADJUST    RTC Adjust
+  0B800008h RTC_TIME      RTC Time (R)
+  0B80000Ch RTC_DATE      RTC Date (R)
+
+

Communication Ports, Audio/Video

+

  0C000000h COM_MODE      Com Mode
+  0C000004h COM_STAT1     Com Status Register 1 (Bit1=Error)
+  0C000008h COM_DATA      Com RX Data (R) and TX Data (W)
+  0C000010h COM_CTRL1     Com Control Register 1
+  0C000014h COM_STAT2     Com Status Register 2 (Bit0=Ready)
+  0C000018h COM_CTRL2     Com Control Register 2
+  0C800000h IRDA_MODE     Infrared Control (R/W)
+  0C800004h IRDA_DATA     Infrared TX Data
+  0C80000Ch IRDA_MISC     Infrared Unknown/Reserved
+  0D000000h LCD_MODE      Video Control (R/W)
+  0D000004h LCD_CAL       Video Calibration (?)
+  0D000100h LCD_VRAM      Video RAM (80h bytes; 32x32bit) (R/W)
+  0D800000h IOP_CTRL      IOP control
+  0D800004h IOP_STAT      Read Current Start/Stop bits? (R)
+  0D800004h IOP_STOP      Stop bits? (W)
+  0D800008h IOP_START     Start bits? (W)
+  0D80000Ch IOP_DATA      IOP data?   (not used by bios)
+  0D800010h DAC_CTRL      DAC Control (R/W)
+  0D800014h DAC_DATA      DAC data
+  0D800020h BATT_CTRL     Battery Monitor Control
+
+BIOS and FLASH can be read only in 16bit and 32bit units (not 8bit).
+Upon reset, BIOS ROM is mirrored to address 00000000h (instead of RAM).
+For most I/O ports, it is unknown if they are (R), (W), or (R/W)...?
+I/O ports are usually accessed at 32bit width, occassionally some ports are +(alternately) accessed at 16bit width. A special case are the F_SN registers +which seem to be required to be accessed at 16bit (not 32bit).

+

Memory Access Time

+

Memory Access Time for Opcode Fetch:
+

  WRAM        1 cycle (for ARM and THUMB)
+  FLASH       2 cycles (for ARM), or 1 cycle (for THUMB)
+  BIOS        ?
+
+Memory Access Time for Data Read/Write:
+
  WRAM (and some F_xxx ports)                    1 cycle
+  VIRT/PHYS/XTRA_FLASH, BIOS, VRAM, I/O          2 cycles
+
+For data access, it doesn't matter if the access is 8bit/16bit/32bit (unlike as +for opcode fetch, where 16bit/thumb can be faster than 32bit/arm). There seems +to be no timing differences for sequential/non-sequential access.
+Additional memory waitstates can be added via F_WAIT2 (and F_WAIT1 maybe).

+

Invalid/Unused Memory Locations

+
  00000800h-00FFFFFFh  Mirrors of 00000000h-000007FFh (2K RAM)
+  01000000h-01FFFFFFh  Invalid (read causes data abort) (unused 16MB area)
+  020xxxxxh-0201FFFFh  Invalid (read causes data abort) (disabled FLASH banks)
+  02020000h-02FFFFFFh  Invalid (read causes data abort) (no Virt FLASH mirrors)
+  03000000h-03FFFFFFh  Invalid (read causes data abort) (unused 16MB area)
+  04004000h-04FFFFFFh  Mirrors of 04000000h-04003FFFh (16K BIOS)
+  05000000h-05FFFFFFh  Invalid (read causes data abort)
+  06000014h-060000FFh   Zerofilled (or maybe mirror of a ZERO port?) (F_xxx)
+  06000140h-060002FFh   Zerofilled (or maybe mirror of a ZERO port?) (F_xxx)
+  06000400h-06FFFFFFh   Zerofilled (or maybe mirror of a ZERO port?) (F_xxx)
+  07000000h-07FFFFFFh  Invalid (read causes data abort) (unused 16MB area)
+  08020000h-08FFFFFFh  Mirrors of 08000000h-0801FFFFh (128K Physical FLASH)
+  09000000h-09FFFFFFh  Invalid (read causes data abort) (unused 16MB area)
+  0A000014h-0A7FFFFFh  Mirrors of 0A000008h-0A00000Bh (INT_MASK_READ) (I_xxx)
+  0A80000Ch            Mirror of 0A800000h-0A800003h (T0_RELOAD) (T0_xxx)
+  0A80001Ch            Mirror of 0A800000h-0A800003h (T0_RELOAD) (T1_xxx)
+  0A80002Ch            Mirror of 0A800000h-0A800003h (T0_RELOAD) (T2_xxx)
+  0A800030h-0AFFFFFFh  Mirrors of 0A800000h-0A800003h (T0_RELOAD) (T_xxx)
+  0B000008h-0B7FFFFFh  Mirrors of .... ? (CLK_xxx)
+  0B800010h-0BFFFFFFh  Mirrors of 0B800008h-0B80000Bh (RTC_TIME)
+  0C00000Ch-0C00000Fh  Zero (COM_xxx)
+  0C00001Ch-0C7FFFFFh   Zerofilled (or maybe mirror of a ZERO port?) (COM_xxx)
+  0C800008h-0CFFFFFFh   ? (IRDA_xxx)
+  0D000008h-0D0000FFh   Zerofilled (or maybe mirror of a ZERO port?) (LCD_xxx)
+  0D000180h-0D7FFFFFh   Zerofilled (or maybe mirror of a ZERO port?) (LCD_xxx)
+  0D800018h             ? (DAC_xxx)
+  0D80001Ch             ? (DAC_xxx)
+  0D800024h-0DFFFFFFh   Zerofilled (or maybe mirror of a ZERO port?) (BATT_xxx)
+  0E000000h-FFFFFFFFh  Invalid (read causes data abort) (unused 3872MB area)
+
+

Unsupported 8bit Reads

+
  02000000h-0201FFFFh VIRT_FLASH   ;\
+  04000000h-04FFFFFFh BIOS_ROM     ; "garbage_byte" (see below)
+  06000300h-060003FFh EXTRA_FLASH  ;
+  08000000h-08FFFFFFh PHYS_FLASH   ;/
+  0A800001h-0AFFFFFFh Timer area, odd addresses (with A0=1) mirror to 0A800001h
+  0B800001h-0BFFFFFFh RTC area, odd addresses (with A0=1) mirror to ...?
+
+

Unsupported 16bit Reads

+
  0B800002h-0BFFFFFEh RTC area, odd addresses (with A1=1) mirror to 0B80000Ah
+
+

garbage_byte (for unsupported 8bit reads)

+

The "garbage_byte" depends on the LSBs of the read address, prefetched opcodes, +and recent data fetches:
+

  garbage_word = (prefetch OR (ramdata AND FFFFFFD0h))
+  garbage_byte = (garbage_word shr (8*(addr and 3))) AND FFh
+
+For ARM code, the "prefetch" is the 2nd next opcode after the LDRB:
+
  prefetch.bit0-31  = [curr_arm_opcode_addr+8]    ;-eg. from arm LDRB
+
+For THUMB code, the "prefetch" is the 2nd next opcode after the LDRB (no matter +if that opcode is word-aligned or not), combined with the most recent ARM +opcode prefetch (eg. from the BX opcode switched from ARM to THUMB mode; that +value may get changed on interrupts):
+
  prefetch.bit0-15  = [recent_arm_opcode_addr+8]  ;-eg. from arm BX to thumb
+  prefetch.bit16-31 = [curr_thumb_opcode_addr+4]  ;-eg. from thumb LDRB
+
+The "ramdata" is related to most recent RAM read (eg. from POP or LDR opcodes +that have read data from RAM; however, writes to RAM, or literal pool reads +from FLASH don't affect it):
+
  ramdata.bit0-31   = [recent_ram_read_addr]      ;-eg. from LDR/POP from RAM
+
+There might be some more/unknown things that affect the garbage (eg. opcode +fetches from RAM instead of FLASH, partial 8bit/16bit data reads from RAM, or +reads from I/O areas, current CPU clock speed, or unpredictable things like +temperature).
+Note: The garbage_byte is "used" by the pocketstation "Rockman" series games.

+

Pocketstation Memory Map

+

Overall Memory Map

+
  00000000h RAM      RAM (2K)   (or mirror of BIOS ROM upon reset)
+  02000000h FLASH1   Flash ROM  (virtual file-mapped addresses in this region)
+  04000000h BIOS_ROM BIOS (16K) (Kernel and GUI)
+  06000300h F_SN...  Seems to contain a bunch of additional FLASH bytes?
+  08000000h FLASH2   Flash ROM  (128K) (physical addresses in this region)
+  0D000100h LCD_VRAM Video RAM  (128 bytes) (32x32 pixels, 1bit per pixel)
+
+

00000000h..000001FFh - Kernel RAM

+

The first 200h bytes of RAM are reserved for the kernel.
+

  0000000h 20h  Exception handler opcodes (filled with LDR R15,[$+20h] opcodes)
+  0000020h 20h  Exception handler addresses (in ARM state, no THUMB bit here)
+  0000040h 80h  Sector buffer (and BU command parameter work space)
+  00000C0h 8    ComFlags (see GetPtrToComFlags(), SWI 06h for details)
+  00000C8h 2    BU Command FUNC3 Address (see GetPtrToFunc3addr() aka SWI 17h)
+  00000CAh 1    Value from BU Command_50h, reset by SWI 05h (sense_auto_com)
+  00000CBh 2    Not used
+  00000CDh 1    Old Year (BCD, 00h..99h) (for sensing wrapping to new century)
+  00000CEh 1    Alternate dir_index (when [0D0h]=0) (see SWI 15h and SWI 16h)
+  00000CFh 1    Current Century (BCD, 00h..99h) (see GetBcdDate() aka SWI 0Dh)
+  00000D0h 2    Current dir_index (for currently executed file, or 0=GUI)
+  00000D2h 2    New dir_index (PrepareExecute(flag,dir_index,param), SWI 08h)
+  00000D4h 4    New param     (PrepareExecute(flag,dir_index,param), SWI 08h)
+  00000D8h 8    Alarm Setting        (see GetPtrToAlarmSetting() aka SWI 13h)
+  00000E0h 4    Pointer to SWI table (see GetPtrToPtrToSwiTable() aka SWI 14h)
+  00000E4h 3x4  Memory Card BU Command variables
+  00000F0h 1    Memory Card FLAG byte (bit3=new_card, bit2=write_error)
+  00000F1h 1    Memory Card Error offhold (0=none, 1=once)
+  00000F2h 6    Not used
+  00000F8h 4x4  Callback Addresses (set via SetCallbacks(index,proc), SWI 01h)
+  0000108h 4    Snapshot ID (0xh,00h,"SE")
+  000010Ch 74h  IRQ and SWI stack (stacktop at 180h)
+  0000180h 80h  FIQ stack (stacktop at 200h)
+
+Although one can modify that memory, one usually shouldn't do that, or at least +one must backup and restore the old values before returning control to the GUI +or to other executables. Otherwise, the only way to restore the original values +would be to press the Reset button (which would erase the RTC time/date).

+

00000200h..000007FFh - User RAM and User stack (stacktop at 800h)

+

This region can be freely used by the game. The memory is zerofilled when the +game starts.

+

02000000h - FLASH1 - Flash ROM (virtual file-mapped addresses in this region)

+

This region usually contains the currently selected file (including its title +and icon sectors), used to execute the file in this region, mapped to continous +addresses at 2000000h and up.

+

08000000h - FLASH2 - Flash ROM (128K) (physical addresses in this region)

+

This region is used by the BIOS when reading the memory card directory (and +when writing data to the FLASH memory). The banking granularity is 2000h bytes +(one memory card block), that means that the hardware cannot map Replacement +Sectors which may be specified in the for Broken Sector List.

+

04000000h - BIOS ROM (16K) - Kernel and GUI

+

  4000000h 1E00h Begin of Kernel (usually 1E00h bytes)
+  4000014h 4     BCD Date in YYYYMMDDh format (19981023h for ALL versions)
+  4001DFCh 4     Core Kernel Version  (usually "C061" or "C110")
+  4001E00h 2200h Begin of GUI (usually 2200h bytes)
+  4003FFCh 4     Japanese GUI Version (usually "J061" or "J110")
+
+The "110" version does contain some patches, but does preserve same function +addresses as the "061" version, still it'd be no good to expect the BIOS to +contain any code/data at fixed locations (except maybe the GUI version string). +Kernel functions can be accessed via SWI Opcodes, and, from the PSX-side, via +BU Commands.

+

Bus-Width Restrictions

+

FLASH and BIOS ROM seem to be allowed to be read only in 16bit and 32bit units, +not in 8bit units? Similar restrictions might apply for some I/O ports...? RAM +can be freely read/written in 8bit, 16bit, and 32bit units.

+

Waitstates

+

Unknown if and how many waitstates are applied to the different memory regions. +The F_WAIT1 and F_WAIT2 registers seem to be somehow waitstate related. FLASH +memory does probably have a 16bit bus, so 32bit data/opcode fetches might be +slower then 16bit reads...? Similar delays might happen for other memory and +I/O regions...?

+

Pocketstation IO Video and Audio

+

0D000000h - LCD_MODE - LCD control word (R/W)

+

  0-2  Draw mode; seems to turn off bits of the screen;
+         0: All 32 rows on      ;\
+         1: First 8 rows on     ;
+         2: Second 8 rows on    ;
+         3: Third 8 rows on     ; (these are not necessarily all correct?)
+         4: Fourth 8 rows on    ;
+         5: First 16 rows on    ;
+         6: Middle 16 rows on   ;
+         7: Bottom 16 rows on   ;/
+  3    CPEN      (0=Does some weird fade out of the screen, 1=Normal)
+  4-5  Refresh rate
+         0: Makes a single blue (yes, blue, yes, on a black/white display)
+            line appear at the top or middle of the screen - don't use!
+         1: 64Hz? (might be 32Hz too, like 2)
+         2: 32Hz
+         3: 16Hz (results in less intensity on black pixels)
+  6    Display active                (0=Off, 1=On)
+  7    Rotate display by 180 degrees (0=For Handheld Mode, 1=For Docked Mode)
+  8-31 Unknown (should be zero)
+
+Software should usually set LCD_MODE.7 equal to INT_INPUT.Bit11 (docking flag). +In handheld mode, the button-side is facing towards the player, whilst in +Docked mode (when the Pocketstation is inserted into the PSX controller port), +the button-side is facing towards the PSX, so the screen coordinates become +vice-versa, which can be "undone" by the Rotation flag.

+

0D000004h - LCD_CAL - LCD Calibration (maybe contrast or so?)

+

Upon the reset, the kernel sets LCD_CAL = F_CAL AND 0000003Fh. Aside from that, +it doesn't use LCD_CAL.

+

0D000100h..D00017Fh - LCD_VRAM - 32x32 pixels, 1bit color depth (R/W)

+

This region consists of 32 words (32bit values),
+

  [D000100h]=Top, through [D00017Ch]=Bottom-most scanline
+
+The separate scanlines consist of 32bit each,
+
  Bit0=Left, through Bit31=Right-most Pixel (0=White, 1=Black)
+
+That [D000100h].Bit0=Upper-left arrangement applies if the Rotate bit in +LCD_MODE.7 is set up in the conventional way, if it is set the opposite way, +then it becomes [D00017Ch].Bit31=Upper-left.
+The LCD_VRAM area is reportedly mirrored to whatever locations?

+

0D800010h - DAC_CTRL - Audio Control (R/W)

+

  0     Audio Enable enable    (0=Off, 1=On)
+  1-31  Unknown, usually zero
+
+Note: Aside from the bit in DAC_CTRL, audio must be also enabled/disabled via +IOP_STOP/IOP_START bit5. Unknown if/which different purposes that bits have.

+

0D800014h - DAC_DATA - Audio D/A Converter

+

Unknown how many bits are passed to the D/A converter, probably bit8-15, ie. 8 +bits...?
+

  0-7   Probably unused, usually zero (or fractional part when lowered volume)
+  8-15  Signed Audio Outut Level (usually -7Fh..+7Fh) (probably -80h works too)
+  16-31 Probably unused, usually sign-expanded from bit15
+
+The Pocketstation doesn't have any square wave or noise generator (nor a sound +DMA channel). So the output levels must be written to DAC_DATA by software, +this is usually done via Timer1/IRQ-8 (to reduce CPU load caused by high audio +frequencies, it may be much more recommended to use Timer2/FIQ-13, because the +FIQ handler doesn't need to push r8-r12).
+For example, to produce a 1kHz square wave, the register must be toggled +high/low at 2kHz rate. If desired, multiple channels can be mixed by software. +High frequencies and multiple voices may require high CPU speed settings, and +thus increase battery consumption (aside from that, battery consumption is +probably increased anyways when the speaker is enabled).

+

Pocketstation IO Interrupts and Buttons

+

0A000004h - INT_INPUT - Raw Interrupt Signal Levels (R)

+

  Bit   Type    Meaning
+  0     IRQ     Button Fire     (0=Released, 1=Pressed)
+  1     IRQ     Button Right    (0=Released, 1=Pressed)
+  2     IRQ     Button Left     (0=Released, 1=Pressed)
+  3     IRQ     Button Down     (0=Released, 1=Pressed)
+  4     IRQ     Button Up       (0=Released, 1=Pressed)
+  5     ?       Unknown?        (?)
+  6     FIQ (!) COM              ;for the COM_registers?      (via /SEL Pin?)
+  7     IRQ     Timer 0
+  8     IRQ     Timer 1
+  9     IRQ     RTC (square wave) (usually 1Hz) (when RTC paused: 4096Hz)
+  10    IRQ     Battery Low     (0=Normal, 1=Battery Low)
+  11    IRQ     Docked ("IOP")  (0=Undocked, 1=Docked to PSX) (via VCC Pin?)
+  12    IRQ     Infrared Rx
+  13    FIQ (!) Timer 2
+  14-15 N/A     Not used
+
+The buttons are usually read directly from this register (rather than being +configured to trigger IRQs) (except in Sleep mode, where the Fire Button IRQ is +usually used to wakeup). Also, bit9-11 are often read from this register.
+The direction keys seem to be separate buttons, ie. unlike as on a joystick or +DPAD, Left/Right (and Up/Down) can be simultaneously pressed...?

+

0A000008h - INT_MASK_SET - Set Interrupt Mask (W)

+

0A00000Ch - INT_MASK_CLR - Clear Interrupt Mask (W)

+

0A000008h - INT_MASK_READ - Read Interrupt Mask (R)

+

  INT_MASK_SET  Enable Interrupt Flags         (0=No change, 1=Enable)   (W)
+  INT_MASK_CLR  Disable Interrupt Flags        (0=No change, 1=Disable)  (W)
+  INT_MASK_READ Current Interrupt Enable Flags (0=Disabled, 1=Enabled)   (R)
+
+The locations of the separate bits are same as in INT_INPUT (see there).

+

0A000000h - INT_LATCH - Interrupt Request Flags (R)

+

0A000010h - INT_ACK - Acknowledge Interrupts (W)

+

  INT_LATCH Latched Interrupt Requests   (0=None, 1=Interrupt Request)   (R)
+  INT_ACK   Clear Interrupt Requests     (0=No change, 1=Acknowledge)    (W)
+
+The locations of the separate bits are same as in INT_INPUT (see there).
+The interrupts seem to be edge-triggered (?), ie. when the corresponding bits +in INT_INPUT change from 0-to-1. Unknown if the request bits get set when the +corresponding interrupt is disabled in INT_MASK...?

+

ATTENTION: The GUI doesn't acknowledge Fire Button interrupts on wakeup... so, +it seems as if button interrupts are NOT latched... ie. the button "INT_LATCH" +bits seem to be just an unlatched mirror of the "INT_INPUT" bits... that might +also apply for some other interrupt...?
+However, after wakeup, the gui does DISABLE the Fire Button interrupt, MAYBE +that does automatically acknowledge it... in that case it might be latched...?

+

Reading outside the readable region (that is where exactly?) seems to mirror to +0A000008h. Enabling IRQs for the buttons seems to make it impossible to poll +them... is that really true?

+

Pocketstation IO Timers and Real-Time Clock

+

Timer and RTC interrupts

+
  INT_INPUT.7     Timer 0 IRQ    ;used as 30Hz frame rate IRQ by GUI
+  INT_INPUT.8     Timer 1 IRQ    ;used as Audio square wave IRQ by GUI
+  INT_INPUT.13    Timer 2 FIQ (this one via FIQ vector, not IRQ vector)
+  INT_INPUT.9     RTC IRQ (usually 1Hz) (or 4096Hz when RTC paused)
+
+

0A800000h - T0_RELOAD - Timer 0 Reload Value

+

0A800010h - T1_RELOAD - Timer 1 Reload Value

+

0A800020h - T2_RELOAD - Timer 2 Reload Value

+

  0-15  Reload Value (when timer becomes less than zero)
+
+Writes to this register are ignored if the timer isn't stopped?

+

0A800004h - T0_COUNT - Timer 0 Current value

+

0A800014h - T1_COUNT - Timer 1 Current value

+

0A800024h - T2_COUNT - Timer 2 Current value

+

  0-15  Current value (decrementing)
+
+Timer interrupts: The timers will automatically raise interrupts if they're +enabled, there's no need to set a bit anywhere for IRQs (but you need to enable +the respect interrupts in INT_MASK).

+

0A800008h - T0_MODE - Timer 0 Control

+

0A800018h - T1_MODE - Timer 1 Control

+

0A800028h - T2_MODE - Timer 2 Control

+

  0-1  Timer Divider (0=Div2, 1=Div32, 2=Div512, 3=Div2 too)
+  2    Timer Enable  (0=Stop, 1=Decrement)
+  3-15 Unknown (should be zero)
+
+Timers are clocked by the System Clock (usually 4MHz, when CLK_MODE=7), divided +by the above divider setting. Note that the System Clock changes when changing +the CPU speed via CLK_MODE, so Timer Divider and/or Timer Reload must be +adjusted accordingly.

+

0B800000h - RTC_MODE - RTC control word

+

  0    Pause RTC (0=Run/1Hz, 1=Pause/4096Hz)
+  1-3  Select value to be modified via RTC_ADJUST
+  4-31 Not used?
+
+The selection bits can be:
+
  00h = Second        ;\
+  01h = Minute        ;
+  02h = Hour          ; used in combination with RTC_ADJUST
+  03h = Day of Week   ; while RTC is paused
+  04h = Day           ;
+  05h = Month         ;
+  06h = Year          ;/
+  07h = Unknown       ;-usually used when RTC isn't paused
+
+When paused, the RTC IRQ bit in INT_INPUT.9 runs at 4096Hz (instead 1Hz).

+

0B800004h - RTC_ADJUST - Modify value (write only)

+

Writing a value here seems to increment the current selected parameter (by the +RTC control). What is perhaps (?) clear is that you have to wait for the RTC +interrupt signal to go low before writing to this.

+

0B800008h - RTC_TIME - Real-Time Clock Time (read only) (R)

+

  0-7   Seconds     (00h..59h, BCD)
+  8-15  Minutes     (00h..59h, BCD)
+  16-23 Hours       (00h..23h, BCD)
+  24-31 Day of week (1=Sunday, ..., 7=Saturday)
+
+Reading RTC_TIME seems to be somewhat unstable: the BIOS uses a read/retry +loop, until it has read twice the same value (although it does read the whole +32bit at once by a LDR opcode, the data is maybe passed through a 8bit or 16bit +bus; so the LSBs might be a few clock cycles older than the MSBs...?).

+

0B80000Ch - RTC_DATE - Real-Time Clock Date (read only) (R)

+

  0-7   Day     (01h..31h, BCD)
+  8-11  Month   (01h..12h, BCD)
+  16-23 Year    (00h..99h, BCD)
+  24-31 Unknown? (this is NOT used as century)
+
+Reading RTC_DATE seems to require the same read/retry method as RTC_TIME (see +there). Note: The century is stored in battery-backed RAM (in the reserved +kernel RAM region) rather than in the RTC_DATE register. The whole date, +including century, can be read via SWI 0Dh, GetBcdDate().

+

Pocketstation IO Infrared

+

The BIOS doesn't contain any IR functions (aside from doing some basic +initialization and power-down stuff).
+IR is used in Final Fantasy 8's Chocobo World (press Left/Right in the Map +screen to go to the IR menu), and in Metal Gear Solid Integral (Press Up in the +main screen), and in PDA Remote 1 & 2 (one-directional TV remote control).

+

0C800000h - IRDA_MODE - Controlling the protocol - send/recv, etc. (R/W)

+
  0    Transfer Direction  (0=Receive, 1=Transmit)
+  1    Disable IRDA        (0=Enable, 1=Disable)
+  2    Unknown (reportedly IR_SEND_READY, uh?)
+  3    Unknown (reportedly IR_RECV_READY, uh?)
+  4-31 Unknown (should be zero)
+
+

0C800004h - IRDA_DATA - Infrared TX Data

+

  0    Transmit Data in Send Direction (0=LED Off, 1=LED On)
+  1-31 Unknown (should be zero)
+
+Bits are usually encoded as long or short ON pulses, separated by short OFF +pulses. Where long is usually twice as long as short.

+

0C80000Ch - IRDA_MISC

+

Unknown? Reportedly reserved.

+

INT_INPUT.12 - IRQ - Infrared RX Interrupt

+

Seems to get triggered on raising or falling (?) edges of incoming data. The +interrupt handler seems to read the current counter value from one of the +timers (usually Timer 2, with reload=FFFFh) to determine the length of the +incoming IR pulse.

+

IR Notes

+

Mind that IR hardware usually adopts itself to the normal light conditions, so +if it receives an IR signal for a longer period, then it may treat that as the +normal light conditions (ie. as "OFF" state). To avoid that, one would usually +send a group of ON-OFF-ON-OFF pulses, instead of sending a single long ON +pulse:
+

   ___------------------___  One HIGH bit send as SINGLE-LONG-ON pulse   (BAD)
+   ___-_-_-_-_-_-_-_-_-____  One HIGH bit send as MULTIPLE-ON-OFF pulses (OK)
+
+that might be maybe done automatically by the hardware...?

+

Reportedly, Bit4 of Port 0D80000Ch (IOP_DATA) is also somewhat IR related...?

+

Pocketstation IO Memory-Control

+

06000000h - F_CTRL

+

  0-31  Unknown
+
+Written values are:
+
  00000000h  Used when disabling all virtual flash banks
+  00000001h  Used before setting new virtual bank values
+  00000002h  Used after setting virtual bank enable bits
+  03h        Replace ROM at 00000000h by RAM (used after reset)
+
+The GUI does additionally read from this register (and gets itself trapped in a +bizarre endless loop if bit0 was zero). Unknown if it's possible to re-enable +ROM at location 00000000h by writing any other values to this register?

+

06000004h F_STAT

+

  0-31  Unknown
+
+The kernel issues a dummy read from this address (before setting F_CTRL to +00000001h).

+

06000008h F_BANK_FLG ;FLASH virtual bank mapping enable flags (16 bits)(R/W)

+
  0-15   Enable physical banks 0..15 in virtual region (0=Disable, 1=Enable)
+  16-31  Unknown (should be zero)
+
+

06000100h F_BANK_VAL ;FLASH virtual bank mapping addresses (16 words)(R/W)

+

This region contains 16 words, the first word at 06000100h for physical bank 0, +the last word at 0600013Ch for physical bank 15. Each word is:
+

  0-3    Virtual bank number
+  4-31   Should be 0
+
+Unused physical banks are usually mapped to 0Fh (and are additionally disabled +in the F_BANK_FLG register).

+

0600000Ch F_WAIT1 ;waitstates...?

+

  0..3   Unknown/not tested
+  4      hangs hardware? but that bit is used in some cases!
+  5..31  Unknown/not tested
+
+Unknown, seems to control some kind of memory waitstates for FLASH (or maybe +RAM or BIOS ROM). Normally it is set to the following values:
+
  F_WAIT1=00000000h when CPU Speed = 00h..07h
+  F_WAIT1=00000010h when CPU Speed = 08h..0Fh
+
+Note: The kernels Docking/Undocking IRQ-11 handler does additionally do this: +"F_WAIT1=max(08h,(CLK_MODE AND 0Fh))" (that is a bug, what it actually wants to +do is to READ the current F_WAIT.Bit4 setting).

+

06000010h F_WAIT2 ;waitstates, and FLASH-Write-Control-and-Status...?

+

  0      no effect? but that bit is used in some cases! maybe write-enable?
+  1      hangs hardware?
+  2      no effect?           READ: indicates 0=write-busy, 1=ready?  (R)
+  3      hangs hardware?
+  4      makes FLASH slower?
+  5      makes WRAM and F_xxx as slow as other memory (0=1 cycle, 1=2 cycles)
+  6      hangs hardware? but that bit is used in some cases!
+  7      no effect?
+  8..31  Unknown/not tested
+
+Unknown, seems to control some kind of memory waitstates, maybe for another +memory region than F_WAIT1, or maybe F_WAIT2 is for writing, and F_WAIT1 for +reading or so. Normally it is set to the following values:
+
  F_WAIT2=00000000h when CPU Speed = 00h..07h  ;\same as F_WAIT1
+  F_WAIT2=00000010h when CPU Speed = 08h..0Fh  ;/
+
+In SWI 0Fh and SWI 10h it is also set to:
+
  F_WAIT2=00000021h  ;SWI 10h, FlashWritePhysical(sector,src)
+  F_WAIT2=00000041h  ;SWI 0Fh, FlashWriteSerial(serial_number)
+
+Before completion, those SWIs do additionally,
+
  wait until reading returns F_WAIT2.Bit2 = 1
+  and then set F_WAIT2=00000000h
+

+

08002A54h - F_KEY1 - Flash Unlock Address 1 (W)

+

080055AAh - F_KEY2 - Flash Unlock Address 2 (W)

+

Unlocks FLASH memory for writing. The complete flowchart for writing sector +data (or header values) is:
+

  if write_sector                               ;\
+    F_WAIT2=00000021h                           ; write enable or so
+  if write_header                               ;
+    F_WAIT2=00000041h                           ;/
+  [80055AAh]=FFAAh                              ;\
+  [8002A54h]=FF55h                              ; unlock flash
+  [80055AAh]=FFA0h                              ;/
+  if write_sector                               ;\
+    for i=0 to 3Fh                              ;
+      [8000000h+sector*80h+i*2]=src[i*2]        ; write data
+  if write_header                               ;
+    [8000000h]=new F_SN_LO value                ;
+    [8000002h]=new F_SN_HI value                ;
+    [8000008h]=new F_CAL value                  ;/
+  first, wait 4000 clock cycles                 ;\wait
+  then, wait until F_WAIT2.Bit2=1               ;/
+  F_WAIT2=00000000h                             ;-write disable or so
+
+During the write operation one can (probably?) not read data (nor opcodes) from +FLASH memory, so the above code must be executed either in RAM, or in BIOS ROM +(see SWI 03h, SWI 0Fh, SWI 10h).

+

06000300h - F_SN_LO - Serial Number LSBs

+

06000302h - F_SN_HI - Serial Number MSBs

+

06000308h - F_CAL - Calibration value for LCD

+

  0-15  Data
+
+This seems to be an additional "header" region of the FLASH memory +(additionally to the 128K of data). The F_SN registers contain a serial number +or so (purpose unknown, maybe intended as some kind of an "IP" address for more +complex infrared network applications), the two LO/HI registers must be read by +separate 16bit LDRH opcodes (not by a single 32bit LDR opcode). The F_CAL +register contains a 6bit calibration value for LCD_CAL (contrast or so?).
+Although only the above 3 halfwords are used by the BIOS, the "header" is +unlike to be 6 bytes in size, probably there are whatever number of additional +"header" locations at 06000300h and up...?
+Note: Metal Gear Solid Integral uses F_SN as some kind of copy protection (the +game refuses to run and displays "No copy" if F_SN is different as when the +pocketstation file was initially created).

+

F_BANK_VAL and F_BANK_FLG Notes

+

Observe that the physical_bank number (p) is used as array index, and that the +virtual bank number (v) is stored in that location, ie. table[p]=v, which is +unlike as one may have expected it (eg. on a 80386 CPU it'd be vice-versa: +table[v]=p).
+Due to the table[p]=v assignment, a physical block cannot be mirrored to +multiple virtual blocks, instead, multiple physical blocks can be mapped to the +same virtual block (unknown what happens in that case, maybe the data becomes +ANDed together).

+

Pocketstation IO Communication Ports

+

0C000000h - COM_MODE - Com Mode

+
  0     Data Output Enable  (0=None/HighZ, 1=Output Data Bits)
+  1     /ACK Output Level   (0=None/HighZ, 1=Output LOW)
+  2     Unknown (should be set when expecting a NEW command...?)
+  3-31  Unknown (should be zero)
+
+

0C000008h - COM_DATA - Com RX/TX Data

+
  0-7   Data (Write: to be transmitted to PSX, Read: been received from PSX)
+  8-31  Unknown
+
+

0C000004h - COM_STAT1 - Com Status Register 1 (Bit1=Error)

+

  0     Unknown
+  1     Error flag or so (0=Okay, 1=Error)
+  2-31  Unknown
+
+Seems to indicate whatever error (maybe /SEL disabled during transfer, or +timeout, or parity error or something else?) in bit1. Meaning of the other bits +is unknown. Aside from checking the error flag, the kernel does issue a dummy +read at the end of each transfer, maybe to acknowledge something, maybe the +hardware simply resets the error bit after reading (although the kernel doesn't +handle the bit like so when receiving the 1st command byte).
+Aside from the above error flag, one should check if INT_INPUT.11 becomes zero +during transfer (which indicates undocking).

+

0C000014h - COM_STAT2 - Com Status Register 2 (Bit0=Ready)

+
  0     Ready flag (0=Busy, 1=Ready) (when 8bits have been transferred)
+  1-31  Unknown
+
+

0C000010h - COM_CTRL1 - Com Control Register 1

+

  0     Unknown (should be set AT BEGIN OF A NEW command...?)
+  1     Unknown (0=Disable something, 1=Enable something)
+  2-31  Unknown (should be zero)
+
+Used values are:
+
  00000000h = unknown?  disable
+  00000002h = unknown?  enable
+  00000003h = unknown?  at BEGIN of a new command
+
+When doing the enable thing, Bit1 should be set to 0-then-1...? Bit0 might +enable the data shift register... and bit1 might be a master enable and master +acknowledge for the COM interrupt... or something else?

+

0C000018h - COM_CTRL2 - Com Control Register 2

+

  0     Unknown (should be set, probably starts or acknowledges something)
+  1     Unknown (should be set when expecting a NEW command...?)
+  2-31  Unknown (should be zero)
+
+Used values are:
+
  00000001h = unknown?  used before AND after each byte-transfer
+  00000003h = unknown?  used after LAST byte of command (and when init/reset)
+
+Maybe that two bits acknowledge the ready/error bits?

+

INT_INPUT.6 FIQ (!) COM for the COM_registers? (via /SEL Pin?)

+
  (via FIQ vector, not IRQ vector)
+
+

INT_INPUT.11 IRQ Docked ("IOP") (0=Undocked, 1=Docked to PSX)

+

Probably senses the voltage on the cartridge slots VCC Pin. Becomes zero when +Undocked (and probably also when the PSX is switched off).
+The Kernel uses IRQ-11 for BOTH sensing docking and undocking, ie. as if the +IRQ would be triggered on both 0-to-1 and 1-to-0 transistions... though maybe +that feature just relies on switch-bounce. For the same reason (switch bounce), +the IRQ-11 handler performs a delay before it checks the new INT_INPUT.11 +setting (ie. the delay skips the unstable switch bound period, and allows the +signal to stabilize).

+

IOP_START/IOP_STOP.Bit1

+

The BIOS adjusts this bit somehow in relation to communication. Unknown +when/why/how it must be used. For details on IOP_START/IOP_STOP see Power +Control chapter.

+

Opcode E6000010h (The Undefined Instruction) - Write chr(r0) to TTY

+

This opcode is used by the SN Systems emulator to write chr(r0) to a TTY style +text window. r0 can be ASCII characters 20h and up, or 0Ah for CRLF. Using that +opcode is a not too good idea because the default BIOS undef instruction +handler simply runs into an endless loop, so games that are using it (eg. +Break-Thru by Jason) won't work on real hardware. That, unless the game would +change the undef instruction vector at [04h] in Kernel RAM, either replacing it +by a MOVS R15,R14 opcode (ignore exception and return to next opcode), or by +adding exception handling that outputs the character via IR or via whatever +cable connection. Observe that an uninitialized FUNC3 accidently destroys +[04h], so first init FUNC3 handler via SWI 17h, before trying to change [04h], +moreover, mind that SWI 05h may reset FUNC3, causing the problem to reappear.
+Altogether, it'd be MUCH more stable to write TTY characters to an unused I/O +port... only problem is that it's still unknown which I/O ports are unused... +ie. which do neither trap data aborts, nor do mirror to existing ports...?

+

Pocketstation IO Power Control

+

0B000000h - CLK_MODE - Clock control (CPU and Timer Speed) (R/W)

+

  0-3  Clock Ratio (01h..08h, see below) (usually 7 = 3.99MHz)    (R/W)
+  4    Clock Change State (0=Busy, 1=Ready)                       (Read-only)
+  5-15 ?
+
+Allows to change the CPU clock (and Timer clock, which is usually one half of +the CPU clock, or less, depending on the Timer Divider). Possible values are:
+
  00h = hangs hardware    ;-don't use
+  01h = 0.063488 MHz      ;\
+  02h = 0.126976 MHz      ;
+  03h = 0.253952 MHz      ; 31*8000h / 1,2,4,8,16
+  04h = 0.507904 MHz      ;
+  05h = 1.015808 MHz      ;/
+  06h = 1.998848 MHz      ;\
+  07h = 3.997696 MHz      ; 61*8000h * 1,2,4
+  08h = 7.995392 MHz      ;/
+  09h..0Fh = same as 08h  ;-aliases
+
+Before changing CLK_MODE, F_WAIT1 and F_WAIT2 should be adjusted accordingly +(see there for details). Note that many memory regions have waitstates, the +full CPU speed can be reached mainly with code/data in WRAM.
+For emulator authors: Note that some Pocketstation software will expect bit 4 of CLK_MODE to go from 0 to 1 rather than just polling it until it's 1. For this reason, emulating bit 4 as always being 1 can very likely break.

+

0B000004h - CLK_STOP - Clock stop (Sleep Mode)

+

Stops the CPU until an interrupt occurs. The pocketstation doesn't have a +power-switch nor standby button, the closest thing to switch "power off" is to +enter sleep mode. Software should do that when the user hasn't pressed buttons +for 1-2 seconds (that, only in handheld mode, not when docked to the PSX; where +it's using the PSX power supply instead of the battery).
+

  0    Stop Clock (1=Stop)
+  1-15 ?
+
+Wakeup is usually done by IRQ-0 (Fire Button) and IRQ-11 (Docking). If alarm is +enabled, then the GUI also enables IRQ-9 (RTC), and compares RTC_TIME against +the alarm setting each time when it wakes up.
+Before writing to CLK_STOP, one should do:
+
  DAC_CTRL=0                         ;\disable sound
+  IOP_STOP=20h                       ;/
+  LCD_MODE=0                         ;-disable video
+  IRDA=whatever                      ;-disable infrared (if it was used)
+  BATT_CTRL=BATT_CTRL AND FFFFFFFCh  ;-do whatever
+  INT_MASK_SET=801h                  ;-enable Docking/Fire wakeup interrupts
+
+The GUI uses CLK_STOP only for Standby purposes (not for waiting for its 30Hz +"frame rate" timer 0 interrupt; maybe that isn't possible, ie. probably +CLK_STOP does completely disable the system clock, and thus does stop +Timer0-2...?)

+

0D800000h - IOP_CTRL - Configures whatever...? (R/W)

+

  0-3  Probably Direction for IOP_DATA bit0..3 (0=Input, 1=Output)
+  4-31 Unknown/Unused (seems to be always zero)
+
+Unknown. Set to 0000000Fh by BIOS upon reset. Aside from that, the BIOS does +never use that register.

+

0D800004h - IOP_STAT (R) - Read Current bits? -- No, seems to be always 0

+

0D800004h - IOP_STOP (W) - Set IOP_DATA Bits

+

0D800008h - IOP_START (W) - Clear IOP_DATA Bits

+

These two ports are probably accessing a single register, writing "1" bits to +IOP_STOP sets bits in that register, and writing "1" bits to IOP_START clears +bits... or vice-versa...? Writing "0" bits to either port seems to leave that +bits unchanged. The meaning of most bits is still unknown:
+

  0    Unknown, STARTED by Kernel upon reset
+  1    Red LED, Communication related (START=Whatever, STOP=Whatelse) (?)
+  2    Unknown, STARTED by Kernel upon reset
+  3    Unknown, STARTED by Kernel upon reset
+  4    Never STARTED nor STOPPED by BIOS (maybe an INPUT, read via IOP_DATA)
+  5    Sound Enable (START=On, STOP=Off)
+  6    Unknown, STOPPED by Kernel upon reset
+  7-31 Unknown, never STARTED nor STOPPED by BIOS
+
+Aside from Bit1, it's probably not neccessary to change the unknown bits...?
+Sound is usually disabled by setting IOP_STOP=00000020h. IOP_STAT is rarely +used. Although, one piece of code in the BIOS disables sound by setting +IOP_STOP=IOP_STAT OR 00000020h, that is probably nonsense, probably intended to +keep bits stopped if they are already stopped (which would happen anyways), +however, the strange code implies that reading from 0D800004h returns the +current status of the register, and that the bits in that register seem to be +0=Started, and 1=Stopped...?

+

0D80000Ch - IOP_DATA (R)

+

  0    ?
+  1    Red LED (0=On, 1=Off)
+  2    ?
+  3    ?
+  4    Seems to be always 1 (maybe Infrared input?)
+  5-31 Unknown/Unused (seems to be always zero)
+
+Unknown. Not used by the BIOS. Reportedly this register is 0010h if IR +Connection...? This register is read by Rewrite ID, and by Harvest Moon. Maybe +bit4 doesn't mean \<if> IR connection exist, but rather \<contains> +the received IR data level...?

+

0D800020h - BATT_CTRL - Battery Monitor Control?

+

Unknown. Somehow battery saving related. Upon reset, and upon leaving sleep +mode, the BIOS does set BATT_CTRL=00000000h. Before entering sleep mode, it +does set BATT_CTRL=BATT_CTRL AND FFFFFFFCh, whereas, assuming that BATT_CTRL +was 00000000h, ANDing it with FFFFFFFCh would simply leave it unchanged... +unless the hardware (or maybe a game) sets some bits in BATT_CTRL to nonzero +values...?

+

Battery Low Interrupt

+

  INT_INPUT.10    IRQ     Battery Low     (0=Normal, 1=Battery Low)
+
+Can be used to sense if the battery is low, if so, one may disable sound output +and/or reduce the CPU speed to increase the remaining battery lifetime. Unknown +how long the battery lasts, and how much the lifetime is affected by audio, +video, infrared, cpu speed, and sleep mode...?
+The pocketstation can be also powered through the VCC pin (ie. when docked to +the PSX, then it's working even if the battery is empty; or even without +battery).

+

Pocketstation SWI Function Summary

+

SWI Function Summary

+

BIOS functions can be called via SWI opcodes (from both ARM and THUMB mode) (in +ARM mode, the SWI function number is in the lower 8bit of the 24bit field; +unlike as for example on the GBA, where it'd be in the upper 8bit). Parameters +(if any) are passed in r0,r1,r2. Return value is stored in r0 (all other +registers are left unchanged).
+

  SWI 00h - Reset()   ;don't use            out: everything destroyed
+  SWI 01h - SetCallbacks(index,proc)        out: old proc
+  SWI 02h - CustomSwi2(r0..r6,r8..r10)      out: r0
+  SWI 03h - FlashWriteVirtual(sector,src)   out: 0=okay, 1=failed
+  SWI 04h - SetCpuSpeed(speed)              out: old_speed
+  SWI 05h - SenseAutoCom()                  out: garbage
+  SWI 06h - GetPtrToComFlags()              out: ptr (usually 0C0h)
+  SWI 07h - ChangeAutoDocking(flags.16-18)  out: incoming flags AND 70000h
+  SWI 08h - PrepareExecute(flag,dir_index,param)  out: dir_index (new or old)
+  SWI 09h - DoExecute(snapshot_saving_flag) out: r0=r0 (failed) or r0=param
+  SWI 0Ah - FlashReadSerial()               out: F_SN
+  SWI 0Bh - ClearComFlagsBit10()            out: new [ComFlags] (with bit10=0)
+  SWI 0Ch - SetBcdDateTime(date,time)       out: garbage (RTC_DATE/10000h)
+  SWI 0Dh - GetBcdDate()                    out: date (with century in MSBs)
+  SWI 0Eh - GetBcdTime()                    out: time and day-of-week
+  SWI 0Fh - FlashWriteSerial(serial_number) out: garbage (r0=0) ;old BIOS only!
+  SWI 10h - FlashWritePhysical(sector,src)  out: 0=okay, 1=failed
+  SWI 11h - SetComOnOff(flag)               out: garbage retadr to swi handler
+  SWI 12h - TestSnapshot(dir_index)         out: 0=normal, 1=MCX1 with 1,0,"SE"
+  SWI 13h - GetPtrToAlarmSetting()          out: ptr to alarm_setting
+  SWI 14h - GetPtrToPtrToSwiTable()         out: ptr-to-ptr to swi_table
+  SWI 15h - MakeAlternateDirIndex(flag,dir_index)  out: alt_dir_index (new/old)
+  SWI 16h - GetDirIndex()                   out: dir_index (or alternate)
+  SWI 17h - GetPtrToFunc3addr()             out: ptr to func3 address
+  SWI 18h - FlashReadWhateverByte(sector)   out: [8000000h+sector*80h+7Eh]
+  SWI 19h..FFh - garbage
+  SWI 100h..FFFFFFh - mirrors of SWI 00h..FFh
+
+The BIOS uses the same memory region for SWI and IRQ stacks, so both may not +occur simultaneously, otherwise one stack would be destroyed by the other +(normally that is no problem; IRQs are automatically disabled by the CPU during +SWI execution, SWIs aren't used from inside of default IRQ handlers, and SWIs +shouldn't be used from inside of hooked IRQ handlers).

+

Pocketstation SWI Misc Functions

+

SWI 01h - SetCallbacks(index,proc)

+

  r0=0  Set SWI 02h callback               (r1=proc, or r1=0=reset/default)
+  r0=1  Set IRQ callback                   (r1=proc, or r1=0=none/default)
+  r0=2  Set FIQ callback                   (r1=proc, or r1=0=none/default)
+  r0=3  Set Download Notification callback (r1=proc, or r1=0=bugged/default)
+
+All callbacks are called via BX opcodes (ie. proc.bit0 can be set for THUMB +code). SetCallbacks returns the old proc value (usually zero). The callbacks +are automatically reset to zero when (re-)starting an executable, or when +returning control to the GUI, so there's no need to restore the values by +software.

+

IRQ and FIQ Callbacks

+

Registers r0,r1,r12 are pushed by the kernels FIQ/IRQ handlers (so the +callbacks can use that registers without needing to push them). The FIQ handler +can additionally use r8..r11 without pushing them (the CPU uses a separate set +of r8..r12 registers in FIQ mode, nethertheless, the kernel DOES push r12 in +FIQ mode, without reason). Available stack is 70h bytes for the FIQ callback, +and 64h bytes for the IRQ callback.
+The callbacks don't receive any incoming parameters, and don't need to respond +with a return value. The callback should return to the FIQ/IRQ handler (via +normal BX r14) (ie. it should not try to return to User mode).
+The kernel IRQ handler does (after the IRQ callback) process IRQ-11 (IOP) +(which does mainly handle docking/undocking), and IRQ-9 (RTC) (which increments +the century if the year wrapped from 99h to 00h).
+And the kernel FIQ handler does (before the FIQ callback) process IRQ-6 (COM) +(which does, if ComFlags.Bit9 is set, handle bu_cmd's) (both IRQs and FIQs are +disabled, and the main program is stopped until the bu_cmd finishes, or until a +joypad command is identified irrelevant, among others that means that +sound/timer IRQs aren't processed during that time, so audio output may become +distorted when docked).
+When docked, the FIQ callback should consist of only a handful of opcodes, eg. +it may contain a simple noise, square wave generator, or software based sound +"DMA" function, but it should not contain more time-consuming code like sound +envelope processing; otherwise IRQ-6 (COM) cannot be executed fast enough to +handle incoming commands.

+

SWI 02h - CustomSwi2(r0..r6,r8..r10) out: r0

+

Calls the SWI2 callback function (which can be set via SWI 01h). The default +callback address is 00000000h (so, by default, it behaves identically as SWI +00h). Any parameters can be passed in r0..r6 and r8..r10 (the other registers +aren't passed to the callback function). Return value can be stored in r0 (all +other registers are pushed/popped by the swi handler, as usually). Available +space on the swi stack is 38h bytes.
+SWI2 can be useful to execute code in privileged mode (eg. to initialize FIQ +registers r8..r12 for a FIQ based sound engine) (which usually isn't possible +because the main program runs in non-privileged user mode).

+

SWI 04h - SetCpuSpeed(speed) out: old_speed

+

Changes the CPU speed. The BIOS uses it with values in range 01h..07h. Unknown +if value 00h can be also used? The function also handles values bigger than +07h, of which, some pieces of BIOS code look as if 08h would be the maximum +value...?
+Before setting the new speed, the function sets F_WAIT1 and F_WAIT2 to +00000000h (or to 00000010h if speed.bit3=1). After changing the speed (by +writing the parameter to CLK_MODE) it does wait until the new speed is applied +(by waiting for CLK_MODE.bit4 to become zero). The function returns the old +value of CLK_MODE, anded with 0Fh.

+

Pocketstation SWI Communication Functions

+

Communication (aka BU Commands, received from the PSX via the memory card slot) +can be handled by the pocketstations kernel even while a game is running. +However, communications are initially disabled when starting a game, so the +game should enable them via SWI 11h, and/or via calling SWI 05h once per frame.

+

SWI 11h - SetComOnOff(flag)

+

Can be used to enable/disable communication. When starting an executable, +communication is initially disabled, so it'd be a good idea to enable them +(otherwise the PSX cannot communicate with the Pocketstation while the game is +running).
+When flag=0, disables communication: Intializes the COM_registers, disables +IRQ-6 (COM), and clears ComFlags.9. When flag=1, enables communication: +Intializes the COM_registers, enables IRQ-6 (COM), sets ComFlags.9 (when +docked), or clears Sys.Flags.9 (when undocked), and sets FAST cpu_speed=7 (only +when docked). The function returns garbage (r0=retadr to swi_handler).

+

SWI 06h - GetPtrToComFlags()

+

Returns a pointer to the ComFlags word in RAM, which contains several +communication related flags (which are either modified upon docking/undocking, +or upon receiving certain bu_cmd's). The ComFlags word consists of the +following bits:
+

  0-3   Whatever (set/cleared when docked/undocked, and modified by bu_cmd's)
+  4-7   Not used (should be zero)
+  8     IRQ-11 (IOP) occurred  (set by irq handler, checked/cleared by SWI 05h)
+  9     Communication Enabled And Docked (0=No, 1=Yes; prevents DoExecute)
+  10    Reject writes to Broken Sector Region (sector 16..55)     (0=No, 1=Yes)
+  11    Start file request (set by bu_cmd_59h, processed by GUI, not by Kernel)
+  12-15 Not used (should be zero)
+  16    Automatically power-down DAC audio on insert/removal      (0=No, 1=Yes)
+  17    Automatically power-down IRDA infrared on insert/removal  (0=No, 1=Yes)
+  18    Automatically adjust LCD screen rotate on insert/removal  (0=No, 1=Yes)
+  19-27 Not used (should be zero)
+  28    Indicates if a standard bu_cmd (52h/53h/57h) was received (0=No, 1=Yes)
+  29    Set date/time request  (set by bu_cmd FUNC0, processed by BIOS)
+  30    Destroy RTC and Start GUI request  (set by bu_cmd_59h, dir_index=FFFEh)
+  31    Not used (should be zero)
+
+Bit16-18 can be changed via SWI 07h, ChangeAutoDocking(flags). Bit10 can be +cleared by SWI 0Bh, ClearComFlagsBit10().

+

SWI 07h - ChangeAutoDocking(flags.16-18)

+

  0-15  Not used (should be zero)
+  16    Automatically power-down DAC audio on insert/removal     (0=No, 1=Yes)
+  17    Automatically power-down IRDA infrared on insert/removal (0=No, 1=Yes)
+  18    Automatically adjust LCD screen rotate on insert/removal (0=No, 1=Yes)
+  19-31 Not used (should be zero)
+
+Copies bit16-18 of the incoming parameter to ComFlags.16-18, specifying how the +kernel IRQ-11 (IOP) handler shall process docking/undocking from the PSX +cartridge slot. The function returns the incoming flags value ANDed with +70000h.

+

SWI 0Bh - ClearComFlagsBit10()

+

Resets ComFlags.Bit10, ie. enables bu_cmd_57h (write_sector) to write to the +Broken Sector region in FLASH memory (sector 16..55). SWI 0Bh returns the +current ComFlags value (the new value, with bit10=0).
+Aside from calling SWI 0Bh, ComFlags.10 is also automatically cleared upon +IRQ-10 (IOP) (docking/undocking). ComFlags.10 can get set/cleared by the +Download Notification callback.

+

SWI 05h - SenseAutoCom()

+

Checks if docking/undocking has occurred (by examining ComFlags.8, which gets +set by the kernel IRQ-11 (IOP) handler). If that flag was set, then the +function does reset it, and does then reset FUNC3=0000h and [0CAh]=00h (both +only if docked, not when undocked), and, no matter if docked or undocked, it +enables communication; equivalent to SetComOnOff(1); which sets/clears +ComFlags.9. The function returns garbage (r0=whatever).
+The GUI is calling SWI 05h once per frame. The overall purpose is unknown. It's +a good idea to reset FUNC3 and to Enable Communication (although that'd be +required only when docked, not when undocked), but SWI 05h is doing that only +on (un-)docking transitions (not when it was already docked). In general, it'd +make more sense to do proper initializations via SWI 11h and SWI 17h as than +trusting SWI 05h to do the job. The only possibly useful effect is that SWI 05h +does set/clear ComFlags.9 when docked/undocked.

+

SWI 17h - GetPtrToFunc3addr()

+

Returns a pointer to a halfword in RAM which contains the FUNC3 address (for +bu_cmd_5bh and bu_cmd_5ch). The address is only 16bit, originated at 02000000h +in FLASH (ie. it can be only in the first 64K of the file), bit0 can be set for +THUMB code. The default address is zero, which behaves bugged: It accidently +sets [00000004h]=00000000h, ie. replaces the Undefined Instruction exception +vector by a "andeq r0,r0,r0" opcode, due to that NOP-like opcode, any Undefined +Instruction exceptions will run into the SWI vector at [00000008h], and +randomly execute an SWI function; with some bad luck that may execute one of +the FlashWrite functions and destroy the saved files.
+Although setting 0000h acts bugged, one should restore that setting before +returning control to GUI or other executables; otherwise the address would +still point to the FUNC3 address of the old unloaded executable, which is worse +than the bugged effect.
+The FUNC3 address is automatically reset to 0000h when (if) SWI 05h +(SenseAutoCom) senses new docking.

+

Download Notification callback

+

Can be used to mute sound during communication, see SWI 01h, +SetCallbacks(index,proc), and BU Command 5Dh for details.

+

Pocketstation SWI Execute Functions

+

SWI 08h - PrepareExecute(flag,dir_index,param)

+

dir_index should be 0=GUI, or 1..15=First block of game. When calling +DoExecute, param is passed to the entrypoint of the game or GUI in r0 register +(see notes on GUI \<param> values belows). For games, param may be +interpreted in whatever way.
+When flag=0, the function simply returns the old dir_index value. When flag=1, +the new dir_index and param values are stored in Kernel RAM (for being used by +DoExecute); the values are stored only if dir_index=0 (GUI), or if dir_index +belongs to a file with "SC" and "MCX0" or "MCX1" IDs in it's title sector. If +dir_index was accepted, then the new dir_index value is returned, otherwise the +old dir_index is returned.

+

GUI \<param> values - for PrepareExecute(1,0,param)

+

PrepareExecute(1,0,param) prepares to execute the GUI (rather than a file). +When executing the GUI, \<param> consists of the following destructive +bits:
+

  0-7  Command number (see below, MSBs=Primary command, LSBs=another dir_index)
+  8    Do not store Alarm setting in Kernel RAM (0=Normal, 1=Don't store)
+  9-31 Not used (should be zero)
+
+The command numbers can be:
+
  Command 0xh --> Erase RTC time/date
+  Command 1xh --> Enter GUI Time Screen with speaker symbol
+  Command 20h --> Enter GUI Time Screen with alarm symbol
+  Command 2xh --> Prompt for new Date/Time, then start dir_index (x)
+  Command 3xh --> Enter GUI File Selection Screen, with dir_index (x) selected
+  Command xxh --> Erase RTC time/date (same as Command 0xh)
+
+For Command 2xh and 3xh, the lower 4bit of the command (x) must be a valid +dir_index of the 1st block of a pocketstation executable, otherwise the BIOS +erases the RTC time/date. Bit8 is just a "funny" nag feature, allowing the user +to change the alarm setting, but with the changes being ignored (bit8 can be +actually useful in BU Command 59h, after FUNC2 was used for changing alarm).

+

SWI 09h - DoExecute(), or DoExecute(snapshot_saving_flag) for MCX1

+

Allows to return control to the GUI (when dir_index=0), or to start an +executable (when dir_index=1..15). Prior to calling DoExecute, parameters +should be set via PrepareExecute(1,dir_index,param), when not doing that, +DoExecute would simply restart the current executable (which may be a desired +effect in some cases).
+The "snapshot_saving_flag" can be ommited for normal (MCX0) files, that +parameter is used only for special (MCX1) files (see Snapshot Notes for +details).
+Caution: DoExecute fails (and returns r0=unchanged) when ComFlags.9=1 (which +indicates that communications are enabled, and that the Pocketstation is +believed to be docked to the PSX). ComFlags.9 can be forcefully cleared by +calling SetComOnOff(0), or it can be updated according to the current +docking-state by calling SetComOnOff(1) or SenseAutoCom().

+

SWI 16h - GetDirIndex()

+

Returns the dir_index for the currently executed file. If that value is zero, +ie. if there is no file executed, ie. if the function is called by the GUI, +then it does instead return the "alternate" dir_index (as set via SWI 15h).

+

SWI 15h - MakeAlternateDirIndex(flag,dir_index) out: alt_dir_index (new/old)

+

Applies the specified dir_index as "alternate" dir_index (for being retrieved +via SWI 16h for whatever purpose). The dir_index is applied only when flag=1, +and only if dir_index is 0=none, or if it is equal to the dir_index of the +currently executed file (ie. attempts to make other files being the "alternate" +one are rejected). If successful, the new dir_index is returned, otherwise the +old dir_index is returned (eg. if flag=0, or if the index was rejected).

+

SWI 12h - TestSnapshot(dir_index)

+

Tests if the specified file contains a load-able snapshot, ie. if it does have +the "SC" and "MCX1" IDs in the title sector, and the 01h,00h,"SE" ID in the +snapshot header. If so, it returns r0=1, and otherwise returns r0=0.

+

Snapshot Notes (MCX1 Files)

+

Snapshots are somewhat automatically loaded/saved when calling DoExecute:
+If the old file (the currently executed file) contains "SC" AND "MCX1" IDs in +the title sector, then the User Mode CPU registers and User RAM at 200h..7FFh +are automatically saved in the files snapshot region in FLASH memory, with the +snapshot_saving_flag being applied as bit0 of the 0xh,00h,"SE" ID of the +snapshot header).
+If the new file (specified in dir_index) contains load-able snapshot data (ie. +if it has "SC" and "MCX1" IDs in title sector, and 01h,00h,"SE" ID in the +snapshot region), then the BIOS starts the saved snapshot data (instead of +restarting the executable at its entrypoint). Not too sure if that feature is +really working... the snapshot loader seems to load User RAM from the wrong +sectors... and it seems to jump directly to User Mode return address... without +removing registers that are still stored on SWI stack... causing the SWI stack +to underflow after loading one or two snapshots...?

+

Pocketstation SWI Date/Time/Alarm Functions

+

SWI 0Ch - SetBcdDateTime(date,time)

+

Sets the time and date, the parameters are having the same format as SWI 0Dh +and SWI 0Eh return values (see there). The SWI 0Ch return value contains only +garbage (r0=RTC_DATE/10000h).

+

SWI 0Dh - GetBcdDate()

+

  0-7   Day     (01h..31h, BCD)
+  8-11  Month   (01h..12h, BCD)
+  16-31 Year    (0000h..9999h, BCD)
+
+Returns the current date, the lower 24bit are read from RTC_DATE, the century +in upper 8bit is read from Kernel RAM.

+

SWI 0Eh - GetBcdTime()

+

  0-7   Seconds     (00h..59h, BCD)
+  8-15  Minutes     (00h..59h, BCD)
+  16-23 Hours       (00h..23h, BCD)
+  24-31 Day of week (1=Sunday, ..., 7=Saturday)
+
+Returns the current time and day of week, read from RTC_TIME.

+

SWI 13h - GetPtrToAlarmSetting()

+

Returns a pointer to a 64bit value in Kernel RAM, the upper word (Bit32-63) +isn't actually used by the BIOS, except that, the bu_cmd FUNC3 does transfer +the whole 64bits. The meaning of the separate bits is:
+

  0-7   Alarm Minute    (00h..59h, BCD)
+  8-15  Alarm Hour      (00h..23h, BCD)
+  16    Alarm Enable    (0=Off, 1=On)
+  17    Button Lock     (0=Normal, 1=Lock) (pressing all 5 buttons in GUI)
+  18-19 Volume Shift    (0=Normal/Loud, 1=Medium/Div4, 2=Mute/Off)
+  20-22 Not used        (should be zero)
+  23    RTC Initialized (0=Not yet, 1=Yes, was initialized from within GUI)
+  24-31 Not used        (should be zero)
+  32-63 Pointer to 8x8 BIOS Charset (characters "0"..."9" plus strange symbols)
+
+The RTC hardware doesn't have a hardware-based alarm feature, instead, the +alarm values must be compared with the current time by software. Alarm is +handled only by the GUI portion of the BIOS. The Kernel doesn't do any alarm +handling, so alarm won't occur while a game is executed (unless the game +contains code that handles alarm).
+Games are usually using only the lower 16bit of the charset address, ORed with +04000000h (although the full 32bit is stored in RAM).
+
  CHR(00h..09h) = Digits "0..9"
+  CHR(0Ah) = Space " "
+  CHR(0Bh) = Colon ":"
+  CHR(0Ch) = Button Lock (used by Final Fantasy 8's Chocobo World)
+  CHR(0Dh) = Speaker Medium; or loud if followed by chr(0Eh)
+  CHR(0Eh) = Speaker Loud; to be appended to chr(0Dh)
+  CHR(0Fh) = Speaker Off
+  CHR(10h) = Battery Low (used by PocketMuuMuu's Cars)
+  CHR(11h) = Alarm Off
+  CHR(12h) = Alarm On
+  CHR(13h) = Memory Card symbol
+

+

Pocketstation SWI Flash Functions

+

SWI 10h - FlashWritePhysical(sector,src)

+

Writes 80h-bytes at src to the physical sector number (0..3FFh, originated at +08000000h), and does then compare the written data with the source data. +Returns 0=okay, or 1=failed.

+

SWI 03h - FlashWriteVirtual(sector,src)

+

The sector number (0..3FFh) is a virtual sector number (originated at +02000000h), the function uses the F_BANK_VAL settings to translate it to a +physical sector number, and does then write the 80h-bytes at src to that +location (via the FlashWritePhysical function). Returns 0=okay, or 1=failed (if +the write failed, or if the sector number exceeded the filesize aka the +virtually mapped memory region).

+

SWI 0Ah - FlashReadSerial()

+

Returns the 32bit value from the two 16bit F_SN registers (see F_SN for +details).

+

SWI 0Fh - FlashWriteSerial(serial_number) ;old BIOS only!

+

Changes the 32bit F_SN value in the "header" region of the FLASH memory. The +function also rewrites the F_CAL value (but it simply rewrites the old value, +so it's left unchanged). The function isn't used by the BIOS, no idea if it is +used by any games. No return value (always returns r0=0).
+This function is supported by the old "061" version BIOS only (the function is +padded with jump opcodes which hang the CPU in endless loops on newer "110" +version).

+

SWI 18h - FlashReadWhateverByte(sector)

+

Returns [8000000h+sector*80h+7Eh] AND 00FFh. Purpose is totally unknown... the +actual FLASH memory doesn't contain any relevant information at that locations +(eg. the in the directory sectors, that byte is unused, usually zero)... and, +reading some kind of status or manufacturer information would first require to +command the hardware to output that info...?

+

Pocketstation SWI Useless Functions

+

SWI 00h - Reset() ;don't use, destroys RTC settings

+

Reboots the pocketstation, similar as when pressing the Reset button. Don't +use! The BIOS bootcode does (without any good reason) reset the RTC registers +and alarm/century settings in RAM to Time 00:00:00, Date 01 Jan 1999, and Alarm +00:00 disabled, so, after reset, the user would need to re-enter these values.
+Aside from the annoying destroyed RTC settings, the function is rather +unstable: it does jump to address 00000000h in RAM, which should usually +redirect to 04000000h in ROM, however, most pocketstation games are programmed +in C language, where "pointer" is usually pronounced "pointer?" without much +understanding of whether/why/how to initialize that "strange things", so +there's a good probability that one of the recently executed games has +accidently destroyed the reset vector at [00000000h] in battery-backed RAM.

+

SWI 14h - GetPtrToPtrToSwiTable()

+

Returns a pointer to a word in RAM, which contains another pointer which +usually points to SWI table in ROM. Changing that word could be (not very) +useful for setting up a custom SWI table in FLASH or in RAM. When doing that, +one must restore the original setting before returning control to the GUI or to +another executable (the setting isn't automatically restored).

+

SWI service routine

+

The default SWI service routine is slightly finicky
+

push {r1-r12, lr} @ Backup SVC-mode registers
+mrs r12, spsr     @ Old CPSR in r12
+nop
+
+@ Check if we were previously in Thumb mode
+@ And adjust LR accordingly to fetch the SWI comment field
+tst r12, #0x20
+subeq lr, #2
+sub lr, #2
+
+@ Fetch the comment field
+ldrh r12, [lr]
+and r12, #0xFF
+
+@ Load function pointer for SWI handler and call it
+mov lr, #0xE0 ; Pointer to SWI table in LR
+ldr r11, [lr]
+add r11, r11, r12, lsl #2 @ r11 = &swi_table[comment]
+ldr r11, [r11] @ Get function pointer
+mov lr, pc     @ Set LR to return address
+bx r11         @ Call SWI handler
+
+@ Restore SVC regs, return from SWI service routine and restore SPSR into CPSR
+pop {r1-r12, pc}^
+
+It's important that the SWI service routine use a 16-bit load to fetch the comment field, as most memory on the Pocketstation can't be safely read using ldrb. Any custom handler needs to do the same, otherwise it won't work on real hardware. Also, for emulator developers, be wary of the last pop as it abuses an ldm edge case (S bit set with r15 in rlist - restores registers properly and then does CPSR = SPSR)

+

Pocketstation BU Command Summary

+

The Pocketstation supports the standard Memory Card commands (Read Sector, +Write Sector, Get Info), plus a couple of special commands.

+

BU Command Summary

+

  50h  Change a FUNC 03h related value or so
+  51h  N/A
+  52h  Standard Read Sector command
+  53h  Standard Get ID command
+  54h  N/A
+  55h  N/A
+  56h  N/A
+  57h  Standard Write Sector command
+  58h  Get an ID or Version value or so
+  59h  Prepare File Execution with Dir_index, and Parameter
+  5Ah  Get Dir_index, ComFlags, F_SN, Date, and Time
+  5Bh  Execute Function and transfer data from Pocketstation to PSX
+  5Ch  Execute Function and transfer data from PSX to Pocketstation
+  5Dh  Execute Custom Download Notification Function   ;via SWI 01h with r0=3
+  5Eh  Get-and-Send ComFlags.bit1,3,2
+  5Fh  Get-and-Send ComFlags.bit0
+
+Commands 5Bh and 5Ch can use the following functions:
+
  FUNC 00h - Get or Set Date/Time
+  FUNC 01h - Get or Set Memory Block
+  FUNC 02h - Get or Set Alarm/Flags
+  FUNC 03h - Custom Function 3              ;via SWI 17h, GetPtrToFunc3addr()
+  FUNC 80h..FFh - Custom Functions 80h..FFh ;via Function Table in File Header
+

+

Pocketstation BU Standard Memory Card Commands

+

For general info on the three standard memory card commands (52h, 53h, 57h), +and for info on the FLAG response value, see:
+Memory Card Read/Write Commands

+

BU Command 52h (Read Sector)

+

Works much as on normal memory cards, except that, on the Pocketstation, the +Read Sector command return 00h as dummy values; instead of the "(pre)" dummies +that occur on normal memory cards.
+The Read Sector command does reproduce the strange delay (that occurs between +5Ch and 5Dh bytes), similar as on normal original Sony memory cards, maybe +original cards did (maybe) actually DO something during that delay period, the +pocketstation BIOS simply blows up time in a wait loop (maybe for compatibility +with original cards).

+

BU Command 53h (Get ID)

+

The Get ID command (53h) returns exactly the same values as normal original +Sony memory cards.

+

BU Command 57h (Write Sector)

+

The Write Sector command has two new error codes (additonally to the normal +47h="G"=Good, 4Eh="N"=BadChecksum, FFh=BadSector responses). The new error +codes are (see below for details):
+

  FDh Reject write to Directory Entries of currently executed file
+  FEh Reject write to write-protected Broken Sector region (sector 16..55)
+
+And, like Read Sector, it returns 00h instead of "(pre)" as dummy values.

+

Write Error Code FDh (Directory Entries of currently executed file)

+

The FDh error code is intended to prevent the PSX bootmenu (or other PSX games) +to delete the currently executed file (which would crash the pocketstation - +once when the deleted region gets overwritten by a new file), because the PSX +bootmenu and normal PSX games do not recognize the new FDh error code the +pocketstation does additionally set FLAG.3 (new card), which should be +understood by all PSX programs.
+The FDh error code occurs only on directory sectors of the file (not on its +data blocks). However, other PSX games should never modify files that belong to +other games (so there should be no compatibility problem with other PSX +programs that aren't aware of the file being containing currently executed +code).
+However, the game that has created the executable pocketstation file must be +aware of that situation. If the file is broken into a Pocketstation Executable +region and a PSX Gameposition region, then it may modify the Gameposition stuff +even while the Executable is running. If the PSX want to overwrite the +executable then it must first ensure that it isn't executed (eg. by retrieving +the dir_index of the currently executed file via BU Command 5Ah, and comparing +it against the first block number in the files FCB at the PSX side; for file +handle "fd", the first block is found at "[104h]+fd*2Ch+24h" in PSX memory).

+

Write Error Code FEh (write-protected Broken Sector region, sector 16..55)

+

The write-protection is enabled by ComFlags.bit10 (which can be set/cleared via +BU Command 5Dh). That bit should be set before writing Pocketstation +excecutables (the Virtual Memory banking granularity is 2000h bytes, which +allows to map whole blocks only, but cannot map single sectors, which would be +required for files with broken sector replacements).
+Unlike Error FDh, this error code doesn't set FLAG.3 for notifying normal PSX +programs about the error (which is no problem since normally Error FEh should +never occur since ComFlags.10 is usually zero). For more info on ComFlags.10, +see SWI 0Bh aka ClearComFlagsBit10(), and BU Command 5Dh.

+

Pocketstation BU Basic Pocketstation Commands

+ +

  Send Reply Comment
+  81h  N/A   Memory Card Access
+  50h  FLAG  Send Command 50h
+  VAL  00h   Send new [0CAh], receive length of following data (00h)
+
+Might be somehow related to FUNC 03h...?

+

BU Command 58h (Get an ID or Version value or so)

+
  Send Reply Comment
+  81h  N/A   Memory Card Access
+  58h  FLAG  Send Command 58h
+  (0)  02h   Send dummy/zero, receive length of following data (02h)
+  (0)  01h   Send dummy/zero, receive whatever value           (01h)
+  (0)  01h   Send dummy/zero, receive another value            (01h)
+
+

BU Command 59h (Prepare File Execution with Dir_index, and Parameter)

+

  Send Reply Comment
+  81h  N/A   Memory Card Access
+  59h  FLAG  Send Command 59h
+  (0)  06h   Send dummy/zero, receive length of following data (06h)
+  NEW  OLD   Send new dir_index.8-15, receive old dir_index.8-15
+  NEW  OLD   Send new dir_index.0-7, receive old dir_index.0-7
+  PAR  (0)   Send exec_parameter.0-7, receive dummy/zero
+  PAR  (0)   Send exec_parameter.8-15, receive dummy/zero
+  PAR  (0)   Send exec_parameter.16-23, receive dummy/zero
+  PAR  (0)   Send exec_parameter.24-31, receive dummy/zero
+
+The new dir_index can be the following:
+
  0000h..000Fh --> Request to Start GUI or File (with above parameter bits)
+  0010h..FFFDh --> Not used, acts same as FFFFh (see below)
+  FFFEh --> Request to Destroy RTC and Start GUI (with parameter 00000000h)
+  FFFFh --> Do nothing (transfer all bytes, but don't store the new values)
+
+Upon dir_index=0000h (Start GUI) or 0001..000Fh (start file), a request flag in +ComFlags.11 is set, the GUI does handle that request, but the Kernel doesn't +handle it (so it must be handled in the game; ie. check ComFlags.11 in your +mainloop, and call DoExecute when that bit is set, there's no need to call +PrepareExecute, since that was already done by the BU Command).
+Caution: When dir_index=0000h, then \<param> should be a value that does +NOT erase the RTC time/date (eg. 10h or 20h) (most other values do erase the +RTC, see SWI 08h for details).
+Upon dir_index=FFFEh, a similar request flag is set in ComFlags.30, and, the +Kernel (not the GUI) does handle that request in its FIQ handler (however, the +request is: To reset the RTC time/date and to start the GUI with uninitialized +irq/svc stack pointers, so this unpleasant and bugged feature shouldn't ever be +used). Finally, dir_index=FFFFh allows to read the current dir_index value +(which could be also read via BU Command 5Ah).

+

BU Command 5Ah (Get Dir_index, ComFlags, F_SN, Date, and Time)

+

  Send Reply Comment
+  81h  N/A   Memory Card Access
+  5Ah  FLAG  Send Command 5Ah
+  (0)  12h   Send dummy/zero, receive length of following data (12h)
+  (0)  INDX  Send dummy/zero, receive curr_dir_index.bit8-15   (00h)
+  (0)  INDX  Send dummy/zero, receive curr_dir_index.bit0-7    (00h..0Fh)
+  (0)  FLG   Send dummy/zero, receive ComFlags.bit0            (00h or 01h)
+  (0)  FLG   Send dummy/zero, receive ComFlags.bit1            (00h or 01h)
+  (0)  FLG   Send dummy/zero, receive ComFlags.bit3            (00h or 01h)
+  (0)  FLG   Send dummy/zero, receive ComFlags.bit2            (00h or 01h)
+  (0)  SN    Send dummy/zero, receive F_SN.bit0-7              (whatever)
+  (0)  SN    Send dummy/zero, receive F_SN.bit8-15             (whatever)
+  (0)  SN    Send dummy/zero, receive F_SN.bit16-23            (whatever)
+  (0)  SN    Send dummy/zero, receive F_SN.bit24-31            (whatever)
+  (0)  DATE  Send dummy/zero, receive BCD Day                  (01h..31h)
+  (0)  DATE  Send dummy/zero, receive BCD Month                (01h..12h)
+  (0)  DATE  Send dummy/zero, receive BCD Year                 (00h..99h)
+  (0)  DATE  Send dummy/zero, receive BCD Century              (00h..99h)
+  (0)  TIME  Send dummy/zero, receive BCD Second               (00h..59h)
+  (0)  TIME  Send dummy/zero, receive BCD Minute               (00h..59h)
+  (0)  TIME  Send dummy/zero, receive BCD Hour                 (00h..23h)
+  (0)  TIME  Send dummy/zero, receive BCD Day of Week          (01h..07h)
+
+At midnight, the function may accidently return the date for the old day, and +the time for the new day.

+

BU Command 5Eh (Get-and-Send ComFlags.bit1,3,2)

+
  Send Reply Comment
+  81h  N/A   Memory Card Access
+  5Eh  FLAG  Send Command 5Eh
+  (0)  03h   Send dummy/zero, receive length of following data (03h)
+  NEW  OLD   Send new ComFlags.bit1, receive old ComFlags.bit1 (00h or 01h)
+  NEW  OLD   Send new ComFlags.bit3, receive old ComFlags.bit3 (00h or 01h)
+  NEW  OLD   Send new ComFlags.bit2, receive old ComFlags.bit2 (00h or 01h)
+
+

BU Command 5Fh (Get-and-Send ComFlags.bit0)

+
  Send Reply Comment
+  81h  N/A   Memory Card Access
+  5Fh  FLAG  Send Command 5Fh
+  (0)  01h   Send dummy/zero, receive length of following data (01h)
+  NEW  OLD   Send new ComFlags.bit0, receive old ComFlags.bit0 (00h or 01h)
+
+

Pocketstation BU Custom Pocketstation Commands

+

BU Command 5Bh (Execute Function and transfer data from Pocketstation to PSX)

+

  Send Reply Comment
+  81h  N/A   Memory Card Access
+  5Bh  FLAG  Send Command 5Bh
+  FUNC FFh   Send Function Number, receive FFh (indicating variable length)
+  (0)  LEN1  Send dummy/zero, receive length of parameters (depending on FUNC)
+  ...  (0)   Send parameters (LEN1 bytes), and receive dummy/zero
+   <-------- at this point, the function is executed for the first time
+  (0)  LEN2  Send dummy/zero, receive length of data (depending on FUNC)
+  (0)  ...   Send dummy/zero, receive data (LEN2 bytes) from pocketstation
+  (0)  FFh   Send dummy/zero, receive FFh
+   <-------- at this point, the function is executed for the second time
+
+See below for more info on the FUNC value and the corresponding functions.

+

BU Command 5Ch (Execute Function and transfer data from PSX to Pocketstation)

+

  Send Reply Comment
+  81h  N/A   Memory Card Access
+  5Ch  FLAG  Send Command 5Ch
+  FUNC FFh   Send Function Number, receive FFh (indicating variable length)
+  (0)  LEN1  Send dummy/zero, receive length of parameters (depending on FUNC)
+  ...  (0)   Send parameters (LEN1 bytes), and receive dummy/zero
+   <-------- at this point, the function is executed for the first time
+  (0)  LEN2  Send dummy/zero, receive length of data (depending on FUNC)
+  ...  (0)   Send data (LEN2 bytes) to pocketstation, receive dummy/zero
+  (0)  FFh   Send dummy/zero, receive FFh
+   <-------- at this point, the function is executed for the second time
+
+See below for more info on the FUNC value and the corresponding functions.

+

BU Command 5Dh (Execute Custom Download Notification Function)

+

Can be used to notify the GUI (or games that do support this function) about +following "download" operations (or uploads or other BU commands).
+BU commands are handled inside of the kernels FIQ handler, that means both IRQs +and FIQs are disabled during a BU command transmission, so any IRQ or FIQ based +audio frequency generators will freeze during BU commands. To avoid distorted +noise, it's best to disable sound for the duration specified in bit0-7. If the +PSX finishes before the originally specified duration has expired, then it can +resend this command with bit8=1 to notify the pocketstation that the "download" +has completed.
+

  Send Reply Comment
+  81h  N/A   Memory Card Access
+  5Dh  FLAG  Send Command 5Dh
+  (0)  03h   Send dummy/zero, receive length of following data (03h)
+  VAL  (0)   Send receive value.16-23 (whatever), receive dummy/zero
+  VAL  (0)   Send receive value.8-15 (download flags), receive dummy/zero
+  VAL  (0)   Send receive value.0-7 (download duration), receive dummy/zero
+
+The Download Notification callback address can be set via SWI 01h, +SetCallbacks(3,proc), see there for details. At kernel side, the function +execution is like so:
+
  If value.8-15 = 00h, then ComFlags.bit10=1, else ComFlags.bit10=0.
+  If download_callback<>0 then call download_callback with r0=value.0-23.
+
+In the GUI, the bu_cmd_5dh_hook/callback handles parameter bits as so (and +games should probably handle that bits in the same fashion, too):
+
  bit0-7  download duration   (in whatever units... 30Hz, RTC, seconds...?)
+  bit8    download finished   (0=no, 1=yes, cancel any old/busy duration)
+  bit9-23 not used by gui
+
+If PSX games send any of the standard commands (52h,53h,57h) to access the +memory card without using command 5Dh, then GUI automatically sets the duration +to 01h (and pauses sound only for that short duration).

+

FUNC 00h - Get or Set Date/Time (FUNC0)

+

LEN1 is 00h (no parameters), and LEN2 is 08h (eight data bytes):
+

  DATE  Get or Send BCD Day         (01h..31h)
+  DATE  Get or Send BCD Month       (01h..12h)
+  DATE  Get or Send BCD Year        (00h..99h)
+  DATE  Get or Send BCD Century     (00h..99h)
+  TIME  Get or Send BCD Second      (00h..59h)
+  TIME  Get or Send BCD Minute      (00h..59h)
+  TIME  Get or Send BCD Hour        (00h..23h)
+  TIME  Get or Send BCD Day of Week (01h..07h)
+
+At midnight, the function may accidently return the date for the old day, and +the time for the new day.

+

FUNC 01h - Get or Set Memory Block (FUNC1)

+

LEN1 is 05h (five parameters bytes):
+

  ADDR  Send Pocketstation Memory Address.bit0-7
+  ADDR  Send Pocketstation Memory Address.bit8-15
+  ADDR  Send Pocketstation Memory Address.bit16-23
+  ADDR  Send Pocketstation Memory Address.bit24-31
+  LEN2  Send Desired Data Length (00h..80h, automatically clipped to max=80h)
+
+LEN2 is variable (using the 5th byte of the above parameters):
+
  ...   Get or Send LEN2 Data byte(s), max 80h bytes
+
+Can be used to write to RAM (and eventually also to I/O ports; when you know +what you are doing). In the read direction it can read almost anything: RAM, +BIOS ROM, I/O Ports, Physical and Virtual FLASH memory. Of which, trying to +read unmapped Virtual FLASH does probably (?) cause a Data Abort exception (and +crash the Pocketstation), so that region may be read only if a file is loaded +(check that dir_index isn't zero, via BU Command 5Ah, and, take care not to +exceed the filesize of that file).
+BUG: When sending more than 2 data bytes in the PSX-to-Pocketstation direction, +then ADDR must be word-aligned (the BIOS tries to handle odd destination +addresses, but when doing that, it messes up the alignment of another internal +pointer).

+

FUNC 02h - Get or Set Alarm/Flags (FUNC2)

+

LEN1 is 00h (no parameters), and LEN2 is 08h (eight data bytes):
+

  DATA  Get or Send Alarm.bit0-7,   Alarm Minute    (00h..59h, BCD)
+  DATA  Get or Send Alarm.bit8-15,  Alarm Hour      (00h..23h, BCD)
+  DATA  Get or Send Alarm.bit16-23, Flags, see SWI 13h, GetPtrToAlarmSetting()
+  DATA  Get or Send Alarm.bit24-31, Not used (usually 00h)
+  DATA  Get or Send Alarm.bit32-39, BIOS Charset Address.0-7
+  DATA  Get or Send Alarm.bit40-47, BIOS Charset Address.8-15
+  DATA  Get or Send Alarm.bit48-55, BIOS Charset Address.16-23
+  DATA  Get or Send Alarm.bit56-63, BIOS Charset Address.24-31
+
+Changing the alarm value while the GUI is running works only with some +trickery: For a sinister reason, the GUI copies the alarm setting to User RAM +when it gets started, that copy isn't affected by FUNC2, so the GUI believes +that the old alarm setting does still apply (and writes that old values back to +Kernel RAM when leaving the GUI). The only workaround is:
+Test if the GUI is running, if so, restart it via Command 59h (with +dir_index=0, and param=0120h or similar, ie. with param.bit8 set), then execute +FUNC2, then restart the GUI again (this time with param.bit8 zero).

+

FUNC 03h - Custom Function 3 (aka FUNC3)

+

LEN1 is 04h (fixed) (four parameters bytes):
+

  VAL   Send Parameter Value.bit0-7
+  VAL   Send Parameter Value.bit8-15
+  VAL   Send Parameter Value.bit16-23
+  VAL   Send Parameter Value.bit24-31
+
+LEN2 is variable (depends on the return value of the 1st function call):
+
  ...   Get or Send LEN2 Data byte(s)
+
+The function address can be set via SWI 17h, GetPtrToFunc3addr(), see there for +details.
+Before using FUNC 03h one must somehow ensure that the desired file is loaded +(and that it does have initialized the function address via SWI 17h, otherwise +the pocketstation would crash).
+The FUNC3 address is automatically reset to 0000h when (if) SWI 05h +(SenseAutoCom) senses new docking.
+Note: The POC-XBOO circuit uses FUNC3 to transfer TTY debug messages.

+

FUNC 80h..FFh - Custom Function 80h..FFh

+

LEN1 is variable (depends on the LEN1 value in Function Table in File Header):
+

  ...   Send LEN1 Parameter Value(s), max 80h bytes (destroys Kernel when >80h)
+
+LEN2 is variable (depends on the return value of the 1st function call):
+
  ...   Get or Send LEN2 Data byte(s), max 80h bytes (clipped to max=80h)
+
+The function addresses (and LEN1 values) are stored in the Function Table FLASH +memory (see Pocketstation File Header for details).
+
      ;above LEN1 should be 00h..80h (the parameters are stored
+      ;in a 80h-byte buffer in kernel RAM, so len LEN1=81h..FFh would
+      ;destroy the kernel RAM that is located after that buffer)
+
+Before using FUNC 80h..FFh one must somehow ensure that the desired file is +loaded (ie. that the function table with the desired functions is mapped to +flash memory; otherwise the pocketstation would crash).

+

First Function Call (Pre-Data)

+

Incoming parameters on 1st Function Call:
+

  r0=flags (09h=Pre-Data to PSX, or 0Ah=Pre-Data from PSX)
+  r1=pointer to parameter buffer (which contains LEN1 bytes) (in Kernel RAM)
+
+Return Value on 1st Function Call:
+
  r0 = Pointer to 64bit memory location (or r0=00000000h=Failed)
+
+That 64bits are:
+
  0-31    BUF2 address of data buffer (src/dst)
+  32-63   LEN2 (00000000h..00000080h) (clipped to max 00000080h if bigger)
+
+dst is written in 8bit units
+src is read in 16bit units (and then split to 8bit units)

+

Second Function Call (Post-Data)

+

Incoming parameters on 2nd Function Call:
+

  r0=flags (11h=Post-Data to PSX, 12h=Post-Data from PSX; plus 04h if Bad-Data)
+  r1=pointer to data buffer (which contains LEN2 bytes) (BUF2 address)
+
+Return Value on 2nd Function Call:
+
  There's no return value required on 2nd call (although the kernel
+  functions seem to return the same stuff as on 1st call).
+

+

Function flags (r0)

+

For each function, there is only one single function vector which is called for +both To- and From-PSX, and both Pre- and Post-Data, and also on errors. The +function must decipher the flags in r0 to figure out which of that operations +it should handle:
+

  0    To-PSX   (when used by Command 5Bh)
+  1    From-PSX (when used by Command 5Ch)
+  2    Error occurred during Data transfer
+  3    Pre-Data
+  4    Post-Data
+  5-31 Not used (zero)
+
+There are only six possible flags combinations:
+
  09h Pre-Data to PSX
+  0Ah Pre-Data from PSX
+  11h Post-Data to PSX
+  12h Post-Data from PSX
+  15h Post-Bad-Data to PSX
+  16h Post-Bad-Data from PSX
+
+The kernel doesn't call FUNC 03h if the Error bit is set (ie. Post-Bad-Data +needs to be handled only by FUNC 80h..FFh, not by FUNC 03h.)

+

Pocketstation File Header/Icons

+

Pocketstation File Content

+

Pocketstation files consists of the following elements (in that order):
+

  PSX Title Sector              ;80h bytes
+  PSX Colored Icon(s)           ;(hdr[02h] AND 0Fh)*80h bytes
+  Pocketstation Saved Snapshot  ;800h bytes if hdr[52h]="MCX1", else 0 bytes
+  Pocketstation Function Table  ;(hdr[57h]*8+7Fh) AND NOT 7Fh bytes
+  Pocketstation File Viewer Mono Icon     ;hdr[50h]*80h bytes
+  Pocketstation Executable Mono Icon List ;hdr[56h]*8 bytes
+  Body (Pocketstation Executable Code/Data, PSX Game Position, Exec-Icons)
+
+The Title sector contains some information about the size of the above regions, +but not about their addresses (ie. to find a given region, one must compute the +size of the preceeding regions).

+

Special "P" Filename in Directory Sector

+

For pocketstation executables, the 7th byte of the filename must be a "P" (for +other files that location does usually contain a "-", assuming the file uses a +standard filename, eg. "BESLES-12345abcdefgh" for a Sony licensed european +title).

+

Special Pocketstation Entries in the Title Sector at [50h..5Fh]

+

  50h 2  Number of File Viewer Mono Icon Frames (or 0000h=Use Exec-Icons)
+  52h 4  Pocketstation Identifier ("MCX0"=Normal, "MCX1"=With Snapshot)
+  56h 1  Number of entries in Executable Mono Icon List (01h..FFh)
+  57h 1  Number of BU Command 5Bh/5Ch Get/Set Functions (00h..7Fh, usually 00h)
+  58h 4  Reserved (zero)
+  5Ch 4  Entrypoint in FLASH1 (ie. Fileoffset plus 02000000h) (bit0=THUMB)
+
+In normal PSX files, the region at 50h..5Fh is usually zerofilled. For more +info on the standard entries in the Title Sector (and for info on Directory +Entries), see:
+Memory Card Data Format

+

Snapshot Region (in "MCX1" Files only)

+

For a load-able snapshot the Snapshot ID must be 01h,00h,"SE", the Kernel uses +snapshots only once (after loading a snapshot, it forcefully changes the ID to +00h,00h,"SE" in FLASH memory).
+

  000h  r1..r12 (ie. without r0)
+  030h  r13_usr (sp_usr)
+  034h  r14_usr (lr_usr)
+  038h  r15     (pc)
+  03Ch  psr_fc
+  040h  Snapshot ID (0xh,00h,"SE")
+  044h  unused (3Ch bytes)
+  200h  Copy of user RAM at 200h..7FFh
+
+For MCX1 files, snapshots can be automatically loaded and saved via the SWI +09h, DoExecute function (the snapshot handling seems to be bugged though; see +SWI 09h for details).

+

Function Table (FUNC 80h..FFh)

+

The table can contain 00h..7Fh entries, for FUNC 80h..FFh. Each entry occupies +8 bytes:
+

  00h 4   LEN1 (00000000h..00000080h) (destroys Kernel RAM if bigger)
+  04h 4   Function Address (bit0 can be set for THUMB code)
+
+If the number of table entries isn't a multiple of 10h, then the table should +be zero-padded to a multiple of 80h bytes (the following File Viewer Mono Icon +data is located on the next higher 80h-byte boundary after the Function Table).
+For details see BU Commands 5Bh and 5Ch.

+

File Viewer Mono Icon

+

Animation Length (0001h..any number) (icon frames) is stored in hdr[50h], for +the File Viewer Icon, the Animation Delay is fixed (six 30Hz units per frame).
+The File Viewer Icon is shown in the Directory Viewer (which is activated when +holding the Down-button pressed for some seconds in the GUI screen with the +speaker and memory card symbols, and which shows icons for all files, including +regular PSX game positions, whose colored icons are converted without any +contrast optimizations to unidentify-able dithered monochrome icons). If the +animation length of the File Viewer Icon is 0000h, then the Directory Viewer +does instead display the first Executable Mono Icon.
+Each icon frame is 32x32 pixels with 1bit color depth (32 words, =128 bytes),
+

  1st word = top-most scanline, 31st word = bottom-most scanline
+  bit0 = left-most pixel, bit31 = right-most pixel (0=white, 1=black)
+
+A normal icon occupies 80h bytes, animated icons have more than one frame and +do occupy N*80h bytes.

+

Executable Mono Icon List

+

The number of entries in the Executable Mono Icon List is specified in hdr[56h] +(usually 01h). Each entry in the Icon List occupies 8 bytes:
+

  00h 2  Animation Length (0001h..any number) (icon frames)
+  02h 2  Animation Delay (N 30Hz units per icon frame)
+  04h 4  Address of icon frame(s) in Virtual FLASH (at 02000000h and up)
+
+The icon frame(s) can be anywhere on a word-aligned location in the file Body +(as specified in the above Address entry), the format of the frame(s) is the +same as for File Viewer Mono Icons (see there).
+The Executable Icons are shown in the Executable File Selection Menu (which +occurs when pressing Left/Right buttons in the GUI). Pressing Fire button in +that menu starts the selected executable. If the Icon List has more than 1 +entry, then pressing Up/Down buttons moves to the previous/next entry (this +just allows to view the corresponding icons, but doesn't have any other +purpose, namely, the current list index is NOT passed to the game when starting +it).
+The Executable Mono Icon List is usually zero-padded to 80h-bytes size +(although that isn't actually required, the following file Body could start at +any location).

+

Entrypoint

+

The whole file (including the header and icons) gets mapped to 02000000h and +up. The entrypoint can be anywhere in the file Body, and it gets called with a +parameter value in r0 (when started by the GUI, that parameter is always zero, +but it may be nonzero when the executable was started by a game, ie. the +\<param> from SWI 08h, PrepareExecute, or the \<param> from BU +Command 59h).
+Caution: Games (and GUI) are started with the ARM CPU running in Non-privileged +User Mode (however, there are several ways to hook IRQ/FIQ handlers, and from +there one can switch to Privileged System Mode).

+

Returning to the GUI

+

Games should always include a way to return to the GUI (eg. an option in the +game over screen, a key combination, a watchdog timer, and/or the docking +signal) (conventionally, games should prompt Exit/Continue when holding Fire +pressed for 5 seconds), otherwise it wouldn't be possible to start other games +- except by pushing the Reset button (which is no good idea since the bizarre +BIOS reset handler does reset the RTC time for whatever reason).
+The kernel doesn't pass any return address to the entrypoint (neither in R14, +nor on stack). To return control to the GUI, use SWI functions +PrepareExecute(1,0,GetDirIndex()+30h), and then DoExecute(0).

+

Pocketstation File Images

+

Pocketstation files are normally stored in standard Memory Card images,
+Memory Card Images

+

Pocketstation specific files

+

Aside from that standard formats, there are two Pocketstation specific formats, +the "SC" and "SN" variants. Both contain only the raw file, without any +Directory sectors, and thus not including a "BESLESP12345"-style filename +string. The absence of the filename means that a PSX game couldn't (re-)open +these files via filenames, so they are suitable only for "standalone" +pocketstation games.

+

Pocketstation .BIN Files ("SC" variant)

+

Contains the raw Pocketstation Executable (ie. starting with the "SC" bytes in +the title sector, followed by icons, etc.), the filesize should be padded to a +2000h-byte block boundary.

+

Pocketstation .BIN Files ("SN" variant)

+

This is a strange incomplete .BIN file variant which starts with a 4-byte ID +("SN",00h,00h), which is directly followed by executable code, without any +title sector, and without any icons.
+

  It seems as if the file (including the 4-byte ID) is intended to be
+  mapped to address 02000000h, and that the entrypoint is fixed at
+  02000004h (in ARM state).
+  Since the File doesn't have a valid file header with "SC" and "MCXn" IDs,
+  it won't be recognized by real hardware, the PSX BIOS would treat it as
+  a corrupted/deleted file, the Pocketstation BIOS would treat it as a
+  non-executable file.
+  So, that fileformat is apparently working only on whatever emulators,
+  apparently on the one developed by SN Systems.
+  If one should want to use that files on real hardware, one could add
+  a 2000h byte stub at the begin of the file; with valid headers, and
+  with a small executable that remaps the "SN" stuff to 02000000h via
+  the F_BANK_VAL registers.
+  Ah, and the "SN" files seem to access RAM at 01000000h and up, unknown
+  if RAM is mirrored to that location on real hardware, reportedly that
+  region is unused... and doesn't contain RAM...?
+    Some games use The Undefined Instruction for TTY Output.
+    Most games do strange 8bit writes to LCD_MODE+0 and LCD_MODE+1
+    The games usually don't allow to return to the GUI (except by Reset).
+
+The filesize is don't care (no padding to block, sector, word, or halfword +boundaries required).

+

Pocketstation XBOO Cable

+

This circuit allows to connect a pocketstation to PC parallel port, allowing to +upload executables to real hardware, and also allowing to download TTY debug +messages (particulary useful as the 32x32 pixel LCD screen is way too small to +display any detailed status info).

+

POC-XBOO Circuit

+

Use a standard parallel port cable (with 36pin centronics connector or 25pin DB +connector) and then build a small adaptor like this:
+

  Pin CNTR  DB25          Pocketstation          _______________________
+  ACK 10    10  --------- 1 JOYDTA              |       |       |       |
+  D0  2     2   --------- 2 JOYCMD              | 9 7 6 | 5 4 3 |  2 1  | CARD
+  GND 19-30 18-25 ------- 4 GND                 |_______|_______|_______|
+  D1  3     3   --------- 6 /JOYSEL              _______________________
+  D2  4     4   --------- 7 JOYCLK              |       |       |       |
+  PE  12    12  --------- 9 /JOYACK (/IRQ7)     | 9 8 7 | 6 5 4 | 3 2 1 | PAD
+  NC -------------------- 8 /JOYGUN (/IRQ10)     \______|_______|______/
+  NC -------------------- 3 7.5V (rumble.supply)
+  SUPPLY.5V --|>|---|>|-- 5 3.5V (VCC) (eg. PC's +5V via two 1N4001 diodes)
+  SUPPLY.0V ------------- 4 GND (not needed when same as GND on CNTR/DB25)
+
+The circuit is same as for "Direct Pad Pro" (but using a memory card connector +instead of joypad connector, and needing +5V from PC power supply instead of +using parallel port D3..D7 as supply). Note: IRQ7 is optional (for faster/early +timeout).

+

POC-XBOO Upload

+

The upload function is found in no$gba "Utility" menu. It does upload the +executable and autostart it via standard memory card/pocketstation commands +(ie. it doesn't require any special transmission software installed on the +pocketstation side).
+Notes: Upload is overwriting ALL files on the memory card, and does then +autostart the first file. Upload is done as "read and write only if different", +this provides faster transfers and higher lifetime.

+

POC-XBOO TTY Debug Messages

+

TTY output is conventionally done by executing the ARM CPU's Undefined Opcode +with an ASCII character in R0 register (for that purpose, the undef opcode +handler should simply point to a MOVS PC,LR opcode).
+That kind of TTY output works in no$gba's pocketstation emulation. It can be +also used via no$gba's POC-XBOO cable, but requires some small customization in +the executable:
+First of, the executable needs "TTY+" ID in some reserved bytes of the title +sector (telling the xboo uploader to stay in transmission mode and to keep +checking for TTY messages after the actual upload):
+

  TitleSector[58h] = "TTY+"
+
+With that ID, and with the XBOO-hardware being used, the game will be started +with with "TTY+" in R0 (notifying it that the XBOO hardware is present, and +that it needs to install special transmission handlers):
+
 ;------------------
+ .data?
+ org  200h
+ ...
+ tty_bufsiz equ 128  ;max=128=fastest (can be smaller if you are short of RAM)
+ func3_info:                                       ;\ ;\
+  func3_buf_base     dd 0   ;fixed="func3_buf"     ;  ;  func3_info+00h
+  func3_buf_len      dd 0   ;range=0..128          ;/ ;  func3_info+04h
+  func3_stack        dd 0                             ;  func3_info+08h
+  func3_buffer:      defs tty_bufsiz                  ;/ func3_info+0Ch
+ ptr_to_comflags     dd 0
+ ...
+ .code
+ ...
+ ;------------------
+ tty_wrchr:   ;in: r0=char
+  dd      0e6000010h ;=undef opcode            ;-Write chr(r0) to TTY
+  bx      lr
+ ;------------------
+ init_tty:  ;in: r0=param (from entrypoint)
+  ldr     r1,=2B595454h ;"TTY+"                ;\check if xboo-cable present
+  cmp     r1,r0                                ; (r0=incoming param from
+  beq     @@tty_by_xboo_cable                  ;/executable's entrypoint)
+ ;- - -
+  mov     r1,0                                 ;\dummy und_handler
+  ldr     r2,=0e1b0f00eh  ;=movs r15,r14       ; (just return from exception,
+  str     r2,[r1,04h]  ;und_handler            ;/for normal cable-less mode)
+  b       @@finish
+ ;---
+ @@tty_by_xboo_cable:
+  swi     17h  ;GetPtrToFunc3addr()            ;\
+  ldr     r1,=(tty_func3_handler AND 0ffffh)   ; init FUNC3 aka TTY handler
+  strh    r1,[r0]                              ;/
+  ldr     r1,=func3_info                       ;\
+  mov     r0,0                             ;\  ; mark TTY as len=empty
+  str     r0,[r1,4]        ;func3_buf_len  ;/  ; and
+  add     r0,r1,0ch ;=func3_buffer         ;\  ; init func3 base
+  str     r0,[r1,0]        ;func3_buf_base ;/  ;/
+  mov     r1,0                                 ;\
+  ldr     r2,=0e59ff018h  ;=ldr r15,[pc,NN]    ;
+  str     r2,[r1,04h]  ;und_handler            ; special xboo und_handler
+  add     r2,=tty_xboo_und_handler             ;
+  str     r2,[r1,24h]  ;und_vector             ;/
+ @@finish:
+  swi     06h ;GetPtrToComFlags()              ;\
+  ldr     r1,=ptr_to_comflags                  ; get ptr to ComFlags
+  str     r0,[r1]                              ;/
+  bx      lr
+ ;------------------
+ tty_xboo_und_handler:   ;in: r0=char
+  ldr     r13,=func3_info ;aka sp_und          ;-base address (in sp_und)
+  str     r12,[r13,8] ;func3_stack             ;-push r12
+ @@wait_if_buffer_full:                        ;\
+  ldr     r12,=ptr_to_comflags                 ; ;\exit if execute file request
+  ldr     r12,[r12]  ;ptr to ComFlags          ; ; ComFlg.Bit11 ("bu_cmd_59h"),
+  ldr     r12,[r12]  ;read ComFlags            ; ; ie. allow that flag to be
+  tst     r12,1 shl 11  ;test bit11            ; ; processed by main program,
+  bne     @@exit                               ; ;/without hanging here
+  ldrb    r12,[r13,4] ;func3_buf_len           ; wait if buffer full
+  cmp     r12,tty_bufsiz                       ; (until drained by FIQ)
+  beq     @@wait_if_buffer_full                ;/
+  mov     r12,1bh+0c0h  ;mode=und, FIQ/IRQ=off ;\disable FIQ (no COMMUNICATION
+  mov     cpsr_ctl,r12                         ;/interrupt during buffer write)
+  ldrb    r12,[r13,4]  ;func3_buf_len          ;\
+  add     r12,1        ;raise len              ; write char to buffer
+  strb    r12,[r13,4]  ;func3_buf_len          ; and raise buffer length
+  add     r12,0ch-1    ;=func3_buffer+INDEX    ;
+  strb    r0,[r13,r12] ;append char to buf     ;/
+ @@exit:
+  ldr     r12,[r13,8]  ;func3_stack            ;-pop r12
+  movs    r15,r14        ;return from exception (and restore old IRQ/FIQ state)
+ ;------------------
+ tty_func3_handler:   ;in: r0=flags, r1=ptr
+  tst     r0,10h  ;test if PRE/POST data (pre: Z, post: NZ)
+ ;ldreq   r1,[r1]   ;read 32bit param (aka the four LEN1 bytes of FUNC3)
+  ldr     r0,=func3_info   ;ptr to two 32bit values (FUNC3 return value)
+  movne   r1,0                           ;\for POST data: mark buffer empty
+  strne   r1,[r0,4] ;func3_buf_len=0     ;/
+  bx      lr                             ;-for PRE data: return r0=func3_info
+
+Usage: Call "init_tty" at the executable's entrypoint (with incoming R0 passed +on). Call "tty_wrchr" to output ASCII characters.
+Note: The TTY messages are supported only in no$gba debug version (not no$gba +gaming version).

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/psx-spx.pdf b/psx-spx.pdf new file mode 100644 index 0000000000000000000000000000000000000000..19939ddb32459fc44192be7320e38936771f6449 GIT binary patch literal 4113883 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
dI32C}Q@}kTquQ%8J*Icn~;z`az&v`J#-# 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%0A4V?Yt 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 z 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

Q*OcDN8lI_*!7R@_qQ+ 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%0Abw>vV~=X{26 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

2SbDetXgP8Hf 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 z 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

kd<37`kV5Q!JThwoak90y^o}md#yc9 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 xLRk$n?q)fZEr+JI0)Im-Ibva(vc%-6 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­NZoI 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

  • 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 z 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 Uo$QB!H+Y1IOY+p-( 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

    fv?lCa7pVgZ#4A2KI~Sf&mPv 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

    QA3Av#w%Sdb{yg0d{LvIKQOA8 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 z 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ⅅ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 knDGR_j%X1P%6-b3+H2eMnDAECy*6xsMW|iD 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

    %Mfa|5YB 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 z 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

    =eMrJx|OQ+2Bv%YIpapj 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%0A3=U6wseHw$Iv|Yb5khrEm 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 z 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 z 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

    v5Ctf!z4> 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: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∋3oj#;)($aWK<-Q%+?k@Os&Oh1>5(nV7W?Wp$54DdF#NW`9 zKCOsbbML5*_?c@gs!IhQH>~}7U%KuKjK#6WhMSjg{8^>*?E2(x| zEl+s{g{VYxl-l>t;btIRe18%~*!zlJ(eG_dtNgy3Xw20yj#BuNf&X@rKBAA1Y3SsnV2bY(3A^ulN>+J;OuCCX7U-@`dmU_qZ(W_|l(o2E{u4j=n@7 zz5uaa*NtFSdDgd-g&SV*g8jrnObmMBdN+{%O8WF+K|6^g3n# zk&qVHN1{zwmNrdbw{yfrIP5B6;7Uxf`>F!*lpozAvzTr725NRE4)L~))X zTT@JZ&*lp=7BbrHEY>1GVd=Ca2~3D>^QG&j8Z6bsGL@9ndjgN zGQ`)pj#`kpFNwW9U)Hzzx-hSa85<1H(L(E{EXMLumlH*5XV$X3J*yjmE<1|khyHQ; znA$YwlVBIi$pp}WVK=enGX?Xp`vHHg6C%DBRai>)>nMfbkY5emM=Qxb=M{K_y#J!; zL??npf{|9v9SgMHs~H>Hp2ymCXPNAo%KE*TZXpL$0q6;VlCZIi(f%kA;!eolJme@+ z)0r*`{M<}x^_)h_T?bvdGC!RKX}`{3Dth642-w=0jSBO222IsM@sOTqs8}gTl7s^p zjPsd_qtR%<{RePYR1!MaP+SzHnNJ8x)>>0gdk`rlMJfAhOxG`0lZe+wS4-haFBSDI zAmt#iYpPOwX1Vo`q3{*FY2KrrAbI6gn8{p!I98=yLcf%K16BYG#|-|3!xZos7%v#R z)XZiBzR5?`5Sdmz@_F4USuutkQ}(%etOFL1(xq5ha04Mq0e< zpBZ5xVZ4x$jOkT0m7vnlSL6cjLuFgw1p9caTu}PUfeIyh(AzD)BV!C}!JX|?yRqQi zWIL0Z)CY8^%EQ_ksAVW{#zd93Lp@)}^Wj1;?O(dr(mbTgAnsOlN zBAy|sl*mYSwpkU5!>{P>7Xls@uw0}3!-2>qwsDX~xx~Ac?m5J}AEl5!sic7~zc|;h zigkB-guLS;3s!kP>%!d%m@lKT2zC_IGr6yyZMHf-U#4r1Cyj{W;)xVu+8iTj(SVTM z?FpG;LrYELWYS`WCDlK%HALkhIfqS;k^<`_PBgtp$%JBvVZ2S=6m$unq?&A!Uxcn( z0mE5Zl!W0?KK*k}-UZZomPV`=4PX-t-YDT;;(Ov>U-lb)@5Ost#I6BMbP!rLl07ZA ze#^|&|MH!83)6B4hv)beKHY_{7oih&2xTRZa~MZqK1d|B5FQ3A@SQ+0S{x*PIV5aO zHfZXVmWX?>0^?@rSc4TIVUjyzh6i1)R~eh0t0FlmPi3W2@F+YUF24ZNi0Fx#l-%3o zjYTQda^);4UO(B0u%?ebJ~e^^Kam;7hq~jF4={ZzP%$&XK@r$-8qjk0QXXidvw&~uc_9)heNg-E&R%K=$TSUQ4n+ecw^oLsLo&#tU z6^WW`_yP9?JG9<{#$UnBnyHKl;Swm+c~g2UX~DpKL#s~LB7DNc{zE#R+gN&wqs3>E z%6COImbc|(#SOB#r?DE~s&B~)>LR^~j$5!A$Kv;}^z}ni^wG~hJ zH~;N^3SywusW=Iky+zoPA$>|R4}XHd%h7ru%q)I>ja8T^)py)%Nu_F{7KyKvH+Sf@JO4{k=fQ=U6X?F>U`9k&{#W!c^Z1Y%Gm8SIp4GwbUYfj z<@^FFt&=ZUuX)#Ju;Z6uJOuE*HLz4*0;=%G(aquzZ4z zpM@@%*6-wp*kmVWC1=15>0gQ7qB~>QfNDT4t~j=;EejNrHJh6F*1L1CX%j5=_!@7f zqd?F*vYR+iCFyEkf}kv9wiL5ZDs3Ec$6RPjm0hT=b-i!FB94SxO@16J&usdPVtdAQ-bsOWKYc$d$2bqFAk-c4w8=Zgf z(O{7pEY5UAZ)m-iPgi;OzgI=Hi(#jDt`afH+W|KU>pH#7B4?KFTbi^Bs+CmoMW>&Y zzAt}v|ExWW)HbV!FQdPhJ{9OVfT1;+)r?`6xU?waWpyKwyb5dHGI#@+CVHdvS~*&z z-d_lPR-5TAx38b2*xHqJ)WLLY0NEVMv7P<74xW)tBJeG)7UuoGIX?g&@I`0$kpzyU z^J!BNhSI%H2kRRk+&HJyKgQC8KV`+tuf0DGKilQR@N|@hzBRBszyRWx{IHLAw!K#` zs4q?uD|>#!cZ!HVQ{U44Q_-@lj1pYK<(T$6wg&j2RwJIFg>T6E8-)3f>wuFw%C z5~ieU?6QaPlw-0$5>`QpCYMP$T66qz4|bEH*pqR;RPy=o&mHE)+Y3*G!EBcrcs`$x zuJ7ulXa0-H@c1W_vGq?T1La>##wVU!yYA20+g0%V75c}kw0EA0#Q$IZnlr<9 zB^BEELPx%>dEOfsi{Au3}4(fph-p@=e<`mQ# zXLSX$Y?x3wE!=x-^^!W6S$a-5<7%X(WCn?+V^U$am>oNmN(1DwFpaFpre&~~jEn%z zcW3u|ZM*MWjjfzkPmNwLVG;{9bgrz?Z1kD!z>OpppsYS|s!*4Z$z>5Ym*L-fo5b>Q zY%$)#ALcI+l&^%jzwhZ}YI1Zu=eBw}Vbeu_QZ*r55MY$&`bz)d9N}Ixi3dMrwwmN> z>wp_t+WxdNbocvnQ;yHavmLy*XW<22!(ymY)0AfNB(f%-NelOJCu{yB5@k6XQBJ6G z^Cr@=!xc^lhLdv_RS*PO&{A(iKVhI}l%Oi>E;!y$sI*~r3~S!^?{z0xs(}Q8yFZUJ zHj}^<9@tBL8{i%9p`mY>FW$o}zHjk>MbI|XRwSt6=5;3y+jQo$3(yiMZLCNf6q|oZ z3;jM+!-{R~6=t*J?XY4Od|l+RNCYP?jr$@g_F?hxf`NPtDFk)xNh|MVlgW7n4#@~i1q14b96>c=x13L&2l7BFLGzn}x|gw$-@#vu zX$~1CYquZCKEeP1UKv<{!h1xpPXP<;L&NbSh!;~y8WhcpG~<&*ysG9`*SX*|0wGQ? z4FJLlWDNq!P%6@iQ(6bEE2WP#0AgfJiI5Vxd9o5KGH{$yYbqR^t65HB5S+r4mX?A_ zx_69qJ6S>5!gkDJW^ySJu~>dp@}EpYujyGc;2sFz?4cH%DMOS8TDa5oU7%O?Z~blO~5*l2j0?XLG1 z&2gm`EjD#`Jrd4Fi!z0|XJ5WJKTzi)Ds;C% zS4Ak}#PKaH4!O=5H^20=gP!^+D*LoU&d~#*H`?N-HufrwNUz-c1G5W+f~TSIIH3ph z3xp&{{?j2|lFz+PbHrZgkOwI4F#rR}r6kO$i=o5B>tQ&SU`!iPI2K*!z|AvxgkRJ` zki*y@D^_#TsBC6M;S$mEYD0PM&;;?k6f%LuP(g+^lcli3E|)aSYfz*HxaBu%&wWTs-szw$%)ct< zcDza?vymV2_f%=SPiEK)i)~?%94p z9kobOfZl+yGMBCn_X-EYF^8_V!O&h67!Ok+W^g*~j)&?=)Hs7-+!ZvTe6+GGVE%n9 z&*nipl*&Cj=nLyKXDQIJ&7~z0olM7vQ}0BLu^pb#djmxlmaO+xyZ#i%9&jzwaPn5a zu@qJ-;bM!=*Ab-P5bm5lMjr4ZcpHEursN*~C{Nq+kAd4a+y!Ik+Pk`uT2!-jAjB(2 zclX%lq6ME9K(la1YEFghIgQ(zr6xNYz9hmfCp84_A5F$m!FHPsI+4iN@3z_(2Se+( za2vEFhhEPxX&p2E06k=IX08t`9@-l-cF3#Z%M6~ko+^-cB_fT`iGr5vm}vFM=RnzJ z?e)OyJ42A3o zG*?bE$wN8!N3#4}?SL)QdT}XpYurt^f zwc)aL%bG;vl;G5FSaR6gO%fIyzK2p#!Uu)>|{e{f1X$~QhCj0G|YU% zI#doF91knx9$xbcVDr1CgBKmpjksy6bwGo!mAr{BelFbd`Q8tC?!MwlxYf=5DvZGp z3Yf8rLrv!Fww)4#XN&2>jaGy3b6WF9x^3nzutI-lDCDbm)o&WDWvqf!^x$m%wCP{t zJL5KL@9kELpf`!CLE0bSFUQOCIsbkYewz30XXHeSW>!|EU}L9xiqf zLx73BaeP@0bAU8);{1_gOtO$W8W@nI4XM8)YJM2bY4@9G+-TOQtvKhEzL5OVUH606 z?cw%p`0H!J@Twg$&z^bO-^>t>YYY_3z%-dkh=Vac@8`wOc+oj&sR9id<DRH>;s9>8geq1k}!g z$!-*%m_P>p>Ylz%3X1*ORezsUuSMq%xO!xyL_C>!)r_6pHC4Ds5l(FWJ+6kn@s(t) zN552Y>%IfFQS_M)+1weD$C!7 z;t8PWO4s#1idza3ED892#P2KWR7Bv_8YHC%7CN-<+RzqK zG9lMGj%H52fvJkqEQ)Qn_4ct(`zv@pP_w6>RAEOkY>DlwBkZ)r%%Ueq5bg_`FVcuY zA}MNQT%KC0`!<@2T$C?^nSu<&ce5cps#crl(6X4*n=bu!<}M*M&tXt^=BfMuv`all zbCe_+H*DxdAM0`s;D-<*lWGilj)XxVhN;!ZTrElBO_RUHsMy4uF{?38v9uV@w?&0@ z(-MEfjatR9Fq7SX?@0G^t9`SK)1<01&GPY`?=jtO7Gxftx-y3t`g=s*w4j7Zl-;GT ziXw7&-9F$f`9+a7JGUD^|-nHIJHbN+50vP;enz-xtpTK^x|ty{@h=MD6cYpRgdutSl~%`zXB8 zU!krB=*`Vc)_&fIU~NDn*^(d;*WQS8XaT}?CK?H9^JxuzaQ{V9JaE7Lxen-h@mj0R z=NDYF?PymlG0##0tVSXmGdxzyC))#&ingU{8j1o--0_0suBlaDGPe~BV>-j=CfG>dhd>#v{X4KkTfGMKEE-L^ zuv;A1;LE*tY?=1kbuw~|f&z8eRfe^Ug>p8P8K;$a*-DJxpcsV+_=>8Ju_v5fceoSR7-CVwwZLe;r%j(2*mj)Ij2bYPj_@6N1bF)B<;duJqK`lAPQ zAgt<7tVQn=C4To`M`yL7qfW;apS9^A1aErQfaJ`g4(8y#y(+YsbIIV_Wtrc2uC|eG zX-L-Kz6{YGrgG3Jm+kxgHn=@I@=Fqr8GhtJp;)L$p|R4FkkGls1!To+fwBq&h0IK2 zl_jaQ>`C#+g3G?M<>*uAthsYJ7!c?uhC}>L_&+nRG4f`DA|uSXga_$Iv8UvAM^U6o zh7{AVZaOZRk^BpTuSXZ@a9Z_7`)NXG)D`vTR642k=hsNLjU;<4W=)L2xn_4$Rz<7& z!vvWa*tB7=Vy)+M!BvQ(mUUb%3_E{LfRzx;bMMMj|6t1j(`KGn0LC6B(sFGe)TG>$ zLH?p!T}~W~3!06!gcLlP|3#NIKC{$=+{ zqkR_IDYJ(aNvh7vJwZa;{0}LPc$-RN)2=18psxIO%3s!_>UvWz6Q@!n)-##K- zsw7>Me|_eY|GWehP!|EoYxSIwBH)<)*Di`c@8R9w( z($nch>q)WlB~pudWE`diuqua>0W8;g_0-tV#gE9eS%|e|4lEI91A>o(7pOu6z>HX! z|HaGN6OZeawgnKe)F9@RQBF6uip536Vl4UVNPBt5(VU=m?t7)W>+$Mu3RBG?-1#A# zO^)$C&n6Y-Mc&aUtgLd3s&!k?ke#s8JK;U{ zIfJe->x&Q1gf&W654iN|gD=9mT49_}xfD743xi8AMq^Q?&boqA*}OEr zU|ARC^FAl=xmTS%ix;m8yTCTJYKkoE<1i=s_Hn&B19cWu=G0C0;6 zFIv_uH*q02bO-{(pn&VknfJr~W!eguHYEG>F{l$s6&XC*x< zJ{9MN!FM=wK9xK7`u@$B8T-1C>tK{I(N;ri`!fIX42Z398$pzRE}HGg<~3y;WIuy< zzu-5o_gkrn8;qzaq(-~x>$i*0-`Y^2szeA3lpw+PomwI0x{r)@H0I+T_go zu)^mweuYsue!nz#dwYKGmdKxQ*mF_r#=+siie0PBwK>j+6-D7JF(RzRMx= zWcEMc4wG_DMtG-_&6;5co@(iyTvAX_Ldu+z+ReJ%$%s={)DJC^D;G|K70;#{tE54D zMOo+$i$Uhvq8;375=1O+9_RmjUAwNt*6byAeq$?TeoV2Tv3O_-!Wo z1Ij)l%XtFr`^r)X^xEt9Q3643An+&@DkCpK*(ZjT1ud<}%YjR+i;zfQyuRv5bki~) zP_k%7Bb#i=YQz4JvL0r|AP__wFe;qz!;g?5>6>Pqh)~G(3p$X;1?p%^7ns< zJZZ#Y1;yCqK*1Rx#CJtg6N%AudJ;hFP)(Wg`H;X63>B6BA7kg#omtdv>sS@rb}F`Q z+qP}ns@S&u#-s)=)Zybx)`Az1mTh@kGPC&(k#vffjGc#>@ta;R91p4uMPB*N0tIrbVoMbloG>{ zzB#bVp@(1a+CH|hnJqY}q&Fuo1%!!dbBUt^QVqjIDA{+0^Rc9?xC$~qGJ@lEcEnwQ zmYZBp*(Fh^UnO*Q9pfY^#Zl{cSJozbvP{{?Y2qKlNW`cBa2m3a-1PUe^BHhY84t@T z0fm8lJjMWS%)d@`L2~&*g=^=Y2%^@-om3+D^lP#aF}G6q=HddsZbgL4dzdyVbTVO0dK7B=7c6rS-59F zSW*5H6H$r~BQZ!yz~=gi{9&-oth!k|KMutB(O|ZKZO!Ebc{WOgAsr^kyf7SoiHKyX z<7M}_>AcqocT{qm)UrynVBgrI=#6$CR3iKpIzB5k zxGk(z%hn-!o*HjiXG8e)1xxBy<9Nf`11#Tj@WaZydChP_r6OppN|cqq6=vox#YafR z2!KoGeAWRDoHHBIW`Q!N!kG_7>KkSTrk~?f^R?!b&G9hu4l9#<0`8gGNjIXhwEPgA zCFirhE}}FN2?Qip(<$dIHf398&v)12yU+Sb!BjR^9{lqDE`JOI=qO3B3|he^g!@59 z5J})=Jn&2QLi3=#DA_?jc|T{#3~xAd?MHRGRJIWF5P&Klxq&MQG^a*u8_ z{(Fn;?<6+p@((6bp@e-!5{4U*O=`hx8=ccO+^q603HHSKQqxEaL^RPh2yv`yHk-4E z3hpSI;|Dr`axj3LMBy0C zxk&j)3v-hhm6DrHgFVRHkc>oadU@9W* zwLlGTv1+0f_MO*>o;&Pv(RtBV1E4x#S_jssGeKc&m)ael*mQ8yA?p$%_^Pm11{ki1 zaKZMey`TaVYa-Z=1F9vyhW$VMIZiX{M3N(U{Cq@8#+N{g*oTX>6v~%c-e-)%`(>mmwQ~gu4g2 zDqD+XEhL}Q_ORL8ZMuHbp!axI=`@J@P5t^DJ+XH<T zV1alsi+!zFPbr!48o?oBuSniF*7L~t`m7y#Lm_|7(=mK|q_euEi?wx|-E1yD0lzL3 zAPx~M46ljhDF!j!KEL8wQ4sO1;v*wx+g7^q$p|{dTt&X-jv9TR$)CS6m6zQAqEwe~ zaNvUn=}mC5aSKvhOg@N)akSl6;6wj$%_g9Dj(P5l6T-C0=DMCx))Bd(kipWGRxx@Z z<0*|fw}ouU^-K2X!6A_l+Tv|`>UEA~?Q>n{ywSAhZa-Db8D$Mg+m)_|va>Yy zPQ9_8BWT(Xl7xp?q_ptx2zcp>4xc`XkR=l@dM3JU_`1Rkc%7Pn8By^vFuJ@uG~>{< zrq;k566~rCs8gLbuZ{9PS%Ka7k8Xi^wF$<2*M{*LxEYrGDQ~~GYw&W^4LQ)GMsGnB zVKJEPQ{NkFNg0@I6mM_Fw>T|Uiv^LS|I93y4woe$ zL;lFKRq50!hDK{^E@EXsz@unuoU_9;jV`EGM|*FW+ufMGRUDYu+uiiqBBd5RWfRQN z_IJ`ol45tv`VfJkhj^Ka4kU>ybsE3V_hLMOA18$2f__E1IcgD8x|zI(hJ9r zC!g&We(&n_wVroDws_fok<#PNrmcU|COWz!Mf0%K`IjcdkcPAN!F?NAWJ#g9?$w{6 zB+u~b&M^A9I>$Tq-)h{#em6Wh!OFkTXsB#HoSWiIuf{0CCRW0|k8Vy8la=pkrOV@! zsoI?q^S&XaO8RX6qfY!^CSKWC{y&{49smClulxp?zk31&LF0(W920^=!EFe~3|m_c zqEQ8Aeiq+8tOT;p4sM|wkk*WudTd$M?!Ky*rsh%nJB%N*P+~C+T9FTLM~_b;k*QzT zZhPUqxqsI_KfX53-f2i4KQ{d3bWm)`EL>ZIpp4TS%%@=uV?ag)XChIvm3_ZHj~*w_ zcH(&*xIbg~^`i;oRr3Roiz-+k0AMtji|a^_X=NzV+0fF}kKVvdAv9(H4t`%w-|vH+ zueZC;aONbi8TqzFe){B~d=+XbDukVVtX^P#^^bZ6I)}IfJD<0; z6r{e}+I^WlJj2@tZ5^d>vd?sFYFopB`+c&wx(rzV>HQ{4y)L&MOI`8OJo@M-d&A8n zpWCUpS|bAgof<<(=fw`{D46h)EQ~V;9}mUaJ3j3%*B@C~MbIC~B*`yFpf^KqbIorj z*lyvb$%07X;icVUoL1fNhb-HYKAJ4qk-Virku!}lffb4pT0`d`De|8;EZP97li(jr zVEbRz1vMrztAO;#tn;{5ktGdWX)WiAl+@kT==CRO6}`bLl9lR`<}#T~6UQqFpUEzi z#yom!*&@ntE#)u;Eh}4N!i+qa5GmbE!M_Q7<|y}nj=({W`#wa>Do=LnL(Xhwk!<(m?tqAutm6qgKE zwykcomjPFjPWb9q0f$WuX$KG@k$-q*3Udo(*2?OkMRaZ6JcdYY_x4I7&*yIl1l-oVg1!s!8QWI7@Xl082@l)4o={B%}kJ&B0nfcnMS{wahfbgtb2 z+ZJ{kz!)XZkqTh3l0?DT8`DyXP^e06b~#QX@ARjTPuld8gSQhK3oL<*a^eOJbo?!V zld}Asp)z|>5-gsJ6k;Y4h)iryN09sV6(4_Nb!m#>sYzOqGjrtD0DrR?<{sm`w2fC0 z?!K~z_Z8)!#`e!Sx*44WMTM?3{R2BrB|YKUE;aQ>=CRX7JLv_=y1 zW4;wB6$3-vb5Tkg9R`yhzEeh*+9gyW`ti^mxr%}Wr^iA-P$DF7I?Q+VIHQJIDu_ej z=Q&#QurtU!5fL!EB1wAF-yWKB*FGrTN9G!*yyTsdYUFVf6!1H3_Nij!F1Eu__c{2IW59}AT@S||u=SP{3V)L<4f;umgDIA)E4 z{6yl$I&rP^!M0wUF`0u4g&Ngft)J)+ywVko4u7c=Oq!3rSutz`FcB*)lVJPm-BEGF z%Ce9Y#PIFO*X_ry7F}PAm|O~wBK=ehQFb7Xdyz^5i&YIwkpPehb4M;}Dd90ERTzIB zYLJR;*4~tBgDxjvzSWKFv7MWXyY-DO>B3M`v<2zpQ*^EOoX(oVkg2%{EO9CHX{pD{ z#P3}1(-Oiz8A~As1ge|#96!N51~ufJM|VviqpXDxT~{-cxzsa=Iz=X&=kt2&J-&BE zBj)~XF?B@s=}YOGPO02elBguo44kYF+U!C?vb_PJz^#{akO8K;Vmhn7YtnEyOamwg zDF=>SZc?e3c4|NDQtdmJLrzrJiiLB0H!l6*A|4Wok>EDXj24@8O1ol#I2`rCJvIt( z0s(n#5jXrXsE1E`H7b;f9XtQnye?>l^Y)60ZWn3NY_G>{_%IcroZuZdFX(E0ZkAnl z%#Bxo<;7lv1eYNBpt)$LKN>VBJySrzku~X+v93IwzIgn*zgu42fi{!sdBckh4z-pm ztARC(&_%!8+oM6$n5v<4mv5kBs1f|eh=())^E~>Fm{y`$!oZ5%3Q7qF#5F?%aU6w= zgL1_rZGXgg(3H45?Ixa|Nvl@3{;?f<`*jwp22oXgyKV&MXaGw9su!Boqg@!6S>7i7 zKz`%Zzah3Q0I`BqaYDoRIta1WS+dO)+->>2NAG2Jy+cOEcfHjScJXPB!Ap9`VnXP! z+$4YEokx82TAW3(oq3f#lgLMS-lsP6uePdrMX4BAbdUibdHTki`#i40D<}1o zbLOF=teo@R%>z$WOGTSvvyUt=&>E_6Ib;uFlk3osI{sRvblTn3>FloqGhqWH=F zkCo;)qu>r+XsIm_`;nZa!MP9U4{yYyT4iInkpa{{22V`LrJ2o9ScZBOp`Nr_BuHM) zsu~b9)n>Lp)4)ZTYt4)#Vo#(+Rx=-4h6(PVzI~^_Hr1<`%q6spHkctY(<)~NXv$tQ zXdXOsGPQ%Qa4#nFm@;2iGbWqN*>M^5Q3fjnjD{4S?RT8^-#MIgkKRG>ETGWe>zA|n z(Tlc@0Tq^X8cyMLJGwUUi0(bVrS$P(6qw~=upx#niY@&!>x1NzKy364=UVFU(a9bW z;36`Wjiwj~`DTxvp7rc&xd9S%DIw5T-h@mqP2Fhth;%G^@SvM-aL{Ri3J4OH8_?<= z#@RgnRqBy8lRwrf@YD zII4w!U?hNgWJp8=oiV=}oHBsxuFae!cmB~x)9Pi;IE3u!E1U9x2{ptp3ShxZ1;t7c zQ5)v{vsHNL9OGg$9c-`*Q@jn(bP=IYf`XGFH;ZRzp@%Ypxx?Hz)JsL9@Ip-@7N znTN3Bizx86mKg>2#>I#s1PtPU_vdj3MOct!WDL&XQ*K6ngb$0D$BqL6^g{&MfujD= zjiQzV(DL_>rrXy#)bB#EkoY#Pc3)(dv;KmS^DQZu$5JV8d0_ntk{)2`QblYefojP+ zzyg>N_-i2Mu$sxLf*7jBV&;e#Z^}TFB{%7xCB0A+O6W=^?xaa|6&qvpx?P5WpwhRe zCtPDrVioWv%X|X0ifJiRSs~0;EA)W1VMBX1>VolFBg^hehlY*a<^S?@^+VAT^U3?F z{`taqhpHW^53e&Pc^#f6%n0yDy9zPaYC)RN7(X~i#?n8%*|Epon$ zg!DR7h)0&3$J?S3^k(FuOX%C0j21f}BinR>`D)%BMBx8?-AijC+x(V>gcz^E3$8Aw z6{`ci(WloD&`0kRDTrN?3HZ({<1hRJ9--sRTyDF`V9`b4wKo@W5QOzS}Zajm%gi((dn-#7Mh6F1ma-SpY$p7{}!9i{yzz$I2)BD?DtzgouvY(s%P*cKLi}+@oOP74u-&b z1h+g#Ju{G`4}Kd-YS$`yD|haskWk#kQMU@R<3n~^;9EY9s`#zZ!Lne~ znd12`VGw_=KE@uu_oLfo@DQG_`*%Uky&ysJc)?#+ysr)}yWjyLq5>r$^HP%TA6K7y zTYIa%D0boOk8dnqoHZefBS84EtU}mTiUj=lE{Ofbp)|MQNE!&c^VDb`TNoiEcR&42 z%f;|CXS*Te%r^P1LPA?whQtf*H_rchHZVlA_no$Xi222L_$mGQz}eBAeh;Yg>4wIb zhn(tihv~lJt4~8?2@cT5o@sBFRU?q^{2JSt^lJ+QNLZ{HgN_(#0K4>v?O0#dI)+bC zWx|g9>%-mX6G@SjZR~sSkC*5F4a1pV-w5^Zq|1gQhbSolie(CyoULXeMh-TPR3#{3 z6`~2R4(0W}tCe7d);g1Bmex3Rb#Sk<_y#ESZi=oHx2?9{LsX-Nqjb&{heouRd72&V znk~A$TKiNck6wCWH5noZ4Oo039dTu)UMQ{$zC3LWnl*3!Y`7s%)N<6p&4G&>Rq^cb z>Vr&V(LDt`UFrz^H$6-zgKc%{JL({SId=vto@~N=A{~{K`Ta=w-jDo^rz#pjMft|O zFnFSnfwGU=+~(d-pa1iM-(DX#FrXE{Z#o+$LNw+>4iUkZdEA3kF(ZMGJiZdFSkQLP zBF(yRxs)fM6IECPH8tNlKYx#l*d%3Oylcxe>u3om#TXmn)9AwXlIlMYM9In z6KhXH|+7$?ge->_FgEqQqa7mQl9d>(yj#9|133WR@Cb zI&Vg`x2gqyhKbvC%gSH%U6s! z&!?(j>N}#)d;?5%uTNGQN~Gw;0kcp1eX;}w5?@2fk_CG!OI@mX|IOFL_lmv6u*dN4?VNjc?fYUqM%cl1h` zPxzYF5zQYrBxl3QwaYn}`LLJLe;|fJ$fjmgUv0(P_q;zpAr;Bf97Fgb5;U;Kr5{6~ z_A=l=PjgQDj+w{am6a2gyA@-*3JECTZfKd`MlB*O7n|JrHX*eK*&D-$twdaFRVf-+ z#lE7!q8?>SL9+@MjGHZ*1lctvM}c&w5u)G|my?B&+cg{$l3S3O@CH@M^hqnb`SrH8 zvD!tPZ@4y0gKeQxvt(R7-;m_-(;&Dg3y^Z>SAsNS9(gA;SnqAAjI`FYs?GpDH|;jg zqvS2Dba2?a&4y~Iw-PqmTHR8F$vCtj2pq(>Kr2^Rl|fLt=G|9iZLbFjF9FtcPJwE}t9kL1P>%YLNY|@Rsr#pYvEHCi~EUmH~ zCHco6lz8tn60uJiJA%~t%*Ygf>C7%^imk+1U-acF53I{nM*q@Dw@Cf9&mJVA$a!Km z=RNdUEG*y&rAgmfoMwIILd5~^ipwJ z-&XnN4bO#B&o;(j8=ar&{uDmK-;ks*Amn9JW@t#P4a65E~%a)>M6b-)=p z#M@7qk!;-hCy#}(fdPL>Wd#x0%+1~t39jyZ0^83Vy4cGk}KmC{H z(WLUSocZc#dGb}`Py3^KToJ}7c>3@j`f&f&MbhMc0K?+Xx224k@K>p|47%K={t?9y zP)`x3>4H`Drj);r`PHtY;;l==1|3++&_Fen;;@El=E|mu%@+1(bNcYA(WVQ#i!ix+ z)mN(rl#G^%YP5a~JONz{93)=etdI}v8dfO4f@0xbPYHA%_yP3gP)|4)3hj~Kv0e-D z3~-IceXEDsg1Jx%m%ZG9R^zIRe?WKw-rH}~gRV?8%7bB)q=}wLUdiEoNt?;>U)sG< z0+oEiRd^C?6ffj`W~p%DTjn8k(*kqCQmG4Q4id5IJMuajj!v`p$IiPiSr?ziFHmSK)>V@#W1OF)SZlt4Md#AWkL+NuJQNz{k zu1WpHr}i-AmK!ZH;tUQ_m@%`($106;AedTeu5ba5xwRUFdg?c`h}Q?Np{)m5Mb`+l z?mTU)3goqG0aq*b!3^~72%n}#r@jAYXs$!g^$7*{Hkc(>vv&@y;Y_1eCT2AWp>g%J<2A@=rv4VDv^)oP+4nFPx=%@h7=MR;@hMwROUu9rcPG_VKP`I7;%_H$G!GE!oC6J6$Wz>Gs$zmD5V+9RY;B z*44LYq_v8sHKZ%z8*#9>MXf}jvNpQ&Z|l*om+r^@eo-K)irmbu)BUnFZmUc?|19>T z|2NA<(p~Ig#Fzlac68x;Rn3Yzs1vPLWd8T~#;fMV1{!C|Q@*n4$fM<_ID{L&lg&98 zW%miO9sRT1v;LjU+jTfl|SWl~n;w)9n4!&#A4s(** zLNV>KJ^2KE()E)?Ye##MeRI`18tO8!6&0ZTkG<-w+Df`Ewy3g~ajWH8?NXTYa59(c z)TIMO3l{%AWjtp&Vo?R#isB+dO^}pwhD{LMZhTl}T|Q~4*ZJ})f0y6WHD-vEzpyvu zJG}wzeyN5@5Q#Gyd?^=w_sprB`6Ea+J3LG250XI6o-w%G`K2k9qC=!_&E;!)R!WQi zlPue(R@9&E&aoG*bwuVw7zV>XE&x3JD{Ha%{V={+)1^sV4PopLi@JyTd*09R7L{!B5(J%K zSFTN`Y;vd4z@~I5v30{f^~u;5!Kg;V5toOc51(v-)icc=_;J)1_w_Q%55JR(RWQo` z#RVnXoT5`z1P(I7U>u)`HGp|EfD}rI9FqU`dh+xW8U23w@ozsa{d)6v`j&@)$;6Z` zVKM$_8^~DC&b`P(rkX*dYG93kNJ6V_KD|BuySsFXdBSq$p zQL@BZ%Fy9`{1yCOcVNypUu-Qs{D^hwGJDmx$KoJ)O2sEyR80oE=j)^LFF4R- z4Pay*Y{Tc)TkJQRM+~#wc93QCGg7kF@vLEs+-=MAzVs6J? zuvU3>Skwd0VJ4Xbv#l@;r(x-A0Z^pjp@>Z&O=uB%I}Qy4N;@yFW!*$@BacBV!<Mmm>mo4O^{Wc#rUqz<(~UjMMd`$DVP*^oN$Dfw(J`tn zP@~PGgtLQR#BuJAJm(hzzt8KDzxeTp64f{Yn^bZFcjy*Xmc-6M)giAfyRLbD;7Wvf zciAm`GN1gxJ*q-%il8_%ayBJ{qu4ZbK4rt2rwIdtPnPyOS&^?;c9LRd8>Zn=rR6Wu zyhP~Zv9fcIofedm_j5=maLbYpY>z!K^~4oQ#Q;8%8FEWG8nNeS2kuktjhyS8>trlDv%ia;I}}8dBMW!XIHUfKRoFf3kqL!1=1+80lcoS)$%!vu52PV_ZK2dMCwa?11?de_VT>{6@ zpwT)M1T*W>W#pl;z<8?7QJUz)Dx?Ag(?m$hh=GZ5&ewxXjr8VjO^l0wE;ekD2sO@s z-RvRoSfSycLkk|sw2;ll82Ss_6e5rMoJCWGW4yfC!52^%+93)~jS#v!9kmh%nTl59 zkGAWJx=V&e%dn!}z=^SeM$2aUYwi{{H?B^U7%%DQkXZXl_&4I95U%dOboJZu$=x77 zYj*ZLom=BRRK%kIp4M=+R?_B5EiZx`@MSP;$cYnLeIb`9QF%h6hxaRaYuT zQK<-%&BFW4!>w+B?3$)q8+8~kLu_6z!4BqBm*+MlO7=5Gxt69JCqNZ3>=zPHnLaRswo=(bguMS$0;}V}ElD zW$CKT@ju|Kj7#lG`-nf8yUJ2c!oYk2BT=RG`fp(Sk~mZS!vPP^MG$0p0Hh6?Cs#$*-nmDZ^kb^ju^g zhn|pt^Vj}GirOlw>3s3A-1JiQWvC(4s^KIYCuq)a0vVLo8k!5Az++ z*7PR`+-@xC>_5zMEHz8EXgUrsvCgZSVKITueQ>)ffH}BQt`X7E^Kh4 z+V-q7^P+`TC3K(7qlkSVJFhON+0>bNLF>V0IBGQmK_pqhP4GDp8of6CnhAx+LP}Vj@gG*^WOx{!Vsb5+S}gD_#l1Y&s9fCD1?qz_!lw>IH?#gcNn$B+1!yAx@o4b0}+{*{$Nv8PPMLvp7gJb5OkXafbuxdvZm}X*lt1ILU0p zB}ljgCz@ z{rU&2`4)^XMpHYSsAylzV!?(|7X6(3J+GOI+P$9<^-9!_ozB@Ft%0;nZG|`yh#`h? z{`#=fsXhJcKT6#HZI+dp>3>SxjW`^3F2zJFsSk=ZX0?6STrI&I!Xdcj~s?@h}X@$`_&Uw$(v~ zMbu7_gwqPw^lt{vIQXlv1ZcrkA&$#fG}GT`Psc^RuSyk{Yot(f7)X(A_$$A~OL8$MY2fgyR4^S(O)^ zmy}G?5J%BZl19++!XutlP-URVzR6-Iuv-=&PeWV`d|~fn6!XLx#u65$g6eLqxE2@q zT0cFzO<70^ob4#PA7g1Gptb|AMYwDXi=R|xvH_k1CT07`=&31-e8lE3eNVqhkuhD3T!)EJbvAS zPW!K~P4vkz0yE|*_8CE;l6|*V2#@>sXb$L`LE~!TjCjZdH{?M)Qp*fiH!*@{x@t}H z;CnfEM*=7}r4u3_x_#fT2mN1&rxYXzW^)yf<{-)rdyo3q!#(hKe(eQ4V*BQuxEpSK zSK;CeSi|qLCAMdPp%b@~vM6JVXIz5toBdnq5kaV+;ar#<&xulw!X*9!IQUCTZI`~+ z50TlVFg&eTZe%nRRb=Vej><)D(nw3Zvchy7qHx6tWkmlwYTRUWtAG%aL)Qtq58t-^dpsQk|c5GGChib?l575%w2 zmG-rTx~DXg_@`;|sPl1%uY%`OL#BZW9mNo%W?NbcL}qr|9sEv{3xZY za^qi%T&#R3(rGtc*)LXF)Zc*7xsTbW(<#rA8P1btyKQ{S8uVWY>{&FDHpa`wmFEA5 zC2NxQePES)T9`%g;2!a0<;N2u>61ir-5Kqzlq*q~N`ey55WW$1GTf80uK?Z&iAO`0 zIg!G9A)GmNkIKcx;+2REN`h~Lf2L#Im8A);qgMh#-vd&VxgMN#6`Ox$((spQy;G+Y zA;T5xsO#ax6j&9N;f3buX;{u_hom2QLNNbG$m0}U<=bW=zBs5a)#1tt(Ix4YjP#^> znqpjk#tKjZOAbvm_U!5?=mHoadP6D~Od^z7BBL_In*0n4$qZ#og%&6$rk`xQmbAoz zCOdISS4;#IBgy_m^_Yta$AwtCrtY{j32k((vZ{;M>$dF7czy9LB4*K|u2WCJAQ|Vk z8I=AiB0kYsKAtiCnLbZ!`IF3`TNhqVqTN5trJTN<;o%>t$^tz0Q*= zkM}}*n|c|Kl~0L=wEvi0gch66*ZTAO9TFAk@}GkmeoPh!DfBZ#U=JxKKm5(nF*UZ} z7BP6WYs@wf)$6b3?yj?p8(?Wk3*v_iN3{}Y!>FBTcQa#$oS3o(@R#FeCo&thY`j*- zXKOWHpPX|lkX0@3wU9z#DO&nb!~!vQy~cUQfNkcQPwar_CmkF_3wJ%8;U^|Dr`FP0!&1K3|f4MZFofyTfGvZDu-&H@c~_CXUt{3cm&Tg>x32 z#8Z3|PdDV75t@v5ihhP0MrLOuSV%R4=&77TmPNymUC(?X~9voeD4O_gM+j>;;8t0gNifO=p#xi-D79+?WUG%%JI-opk(U#}@m> zYqae_qEPNhAL%IS-X!WhUEa&plDFFFoQ|^=`h!<|*>jZ52~M;>4t;N}D!SUaoL(4; z5!1f@n`79Q(C7r!EJJ=ZRoh)dkY0OJcNHEDFgd1^eB?IVdw}V$trY`tso1qw4Z*7P zN4u&Z(C04I{?RI(gHR6_G$lLTu~R$esjd1pQ>iTR7bnSro6X57TbN$KlW6EvXn5y; zhKHQ2BcgpV0svk@H@&;Z>f`qt|Bt=TS?^hu4|SiDt{37Grw5dM@-1x|iSds8BJS&= z=5P`*WJ5fS0@IJ0dy)erP+^@W3XSx~IS&5aXiv}i&sXxVirt6(iU%so&wma`GyVErPcbk^A%8~@jdug81_4dQ<(E4xFG$X5Yac}Hv}T) ze-w-V%Rnph|BrCph&%W}IsKO(8fKWN+65FAXu_0kgZ`c%2&!q&fM7ezLC^b3=J`i1 z>XD+GN~U%OyVRdr0<`)5jCGu;GzJg4 z11`T@=hhQeJXSJ!{8ATIia6tdz$R_`Yr1Ew3xy25qx+1zqV%tJUtJCjjcn>Aw@y=_`kmM z^L5|I_9@@O!u(D^KG23UT6} zi*65JR^nQRl>X*E{L^nd&xvxEx`To^_X_8R<{|Y1<0P&`W3D_CiN@VD>Wz}|oTFd7 zXz)zt)AFHA1v81ei7vyw8FDnk(m2Jvq%$W6R>7p!J;x0tVLYSBCfd0LV^qrAv*Ck_ zYzNdAN+!w04afP}iZe$(=tF8`K@M`RdPd*0axDre%Si_5hgnYvjipj}p`<;y!R>C+ zCo`Eikj`dPk@WxymCO9CLTOxnj&+H&!^ot*ved2;2d0L)*Y)A@InUtfRYvAtX)q;9 z^<`P{rFC4g-Fmz%9!{{Liqgs9b=z&r?^O2-I|=w`n#-8Kol2WVBLBKflV~Cv{yPg! zJP6A?5!{s!FZEFf3%ehd&lS;Ri-Z(p8YuUAo+&i%+Iz$(Hg8P+qouGUTa5(3QKHK* zg8J(s%hqZihm{TOTIiB9@6Nrq03)oyaLZt&_TUWNcN+GX!GT4ieIn4#!ZnVNax28% zv9;Udx=Py#)qc3THR$Yb@%Efu+6xq|njjwy7bIX;@!Ha?R)Z)nb#kS7GzH3dqH-+=jYlA`g4!CK-@4-=76FCBqLvIrzhdh{b!e{He9d1@cS0rq z;PH9LO?`r~?UBp+e(K|~rAi7F5AjRi!475|>MR^7 zUDUC#KjLT^WmK1f+{1iix1kg}z2CQId6$OZc7#&4+GM;wVzAbg!%8%h=aOoBDV?Z}PSZUqe< z2&G}lO$Uv&GtN4YXTucDy0~}laIu^VsAzr_|=W$kHjjT z=evsbiIbU;W>+7VTEg(Ztsrfauuu0o{{D3u)v)av9jxMYK!9bEX2j zF}LtO-%!eMB%s;I6+JOnXH2lA@ZE~iGI=*8Z{@nTLa%ymn%Mu9!u#!-%qj;SH;-m& z8Qka^8q=ds=ANfL(IH85(>|fc=JG~kIrGqzT?_t3%oz_IA} zq}4Edp(dJ+BAKQEzD@SiSePsk_A1sTq${n2T-N6a>>;>Lp;lOq`!8e?YfTZoAYZm8 zY+{JoAVUNE_qI;!87apEIZBnnQAMzL_pr&dNRykNTLT%ST}cvIN|0gg%DTg#YsC{f zQXMK1Jyi>oBj$(uFzP}{K z@V?M8R1bvAXlCRhNOD(~0a_^f4{D9u>Ks z5JSH=IOAW;yj8w?_vhv^>%ERDYmMil5uxe>{fULyh#N~;tDx7O8bbo&#x~jI`|UP# zdNnCFM7kCZmtRsg>eL{k&>gHLa+A8z7&NZy#Vr5*0lj- zlks)JbgqzNuU;lSvCJ=l^fjM9tkEl1*p<%$)6T<2B9A)*;u$QX(ksT{R9HiDoLmTD z8&;j`hdC{6Va&84vA>4Sm+d<&S^7iEa+RB!tF|jSKQiM@y<`x6G-G8#A%?-3Nfj{U zwirydE-Yt;stcw!$tW&XC2Q6lzw`aEII91mxb|UB*mIY{gQ|p$|I;Si^&TU2;qlkk zj6BP&g%{hO;~u52g~C%H$$z6GkoH3BGubtcHvM6R-Cx9aH$Lk4{JGJ1f(M-ow=Fq0 zTE*E+UYEAvDS2UrY4k#qktJ2vh|hML4K&?e z>;I2Hm2-OhKj|};|81a?^?#aqIM(r-t#|KVQJy9{x zA8!}a&;R}Db{Y$l|LZL;_`f-uod37`bpF3Nn_&N!vw2{DgKz`?z0J1k^@`=spSTmD zIuO8Y{@-|`E|7XQ!pE&aU>H*^;x9*9AOrmD-LKc%yW8nD1plwIt4R_I@;HRmL3)ar zQ2Zs!IapGQi>}564l$>w~P0nOO1oB4V~^nQ^t(+?dy=6%dl6hWs!$JusB-I1gz2Bz8M zlNd@A4?4_|Cyz4e?0iL#D#!-Jh3=kySOr(2-3jq%6@Bj!$7nNWYbv&X8x`5hz9^4n%AM7pvNKEF$+`Kh@SkSKk$`v@YBzu3W|7m<1+7)H#ZDB z5pNH1ln>^B3-VNsVRz8aDNT>1E}(`Kv(Z(pD~1qB(OC{a>Xh(Qm&ycXPL;4shLJhR z{}cT(pcN0sug-}@md5&r-^|)cBopo}D8zojUAW5JO#n7rzmVqINzmf>GpaUDhm5Pp z?ev0|ZFym}Jjs0EYOH%GHUn+vq=tBa;j|vqabF-;Jdh%)s+4?!fJR#^Fpnln?71U% z|7EzGGf5z2ZDwdB2@v%iTg_@q)+?^F+-F8-JM0lvz_JxS`N5Pz5Y1X)Xu6HA?n>~@ z^pR~CfqRMd25Jshf}SC@n$!@$bt4uNm#a+!*LD7Ry47qH`a6Gx=gD7L1s-T&R5sp4V*T(W{3)4$b73frv&!WYni?N)(W8A3lF zkz*2=qQg1Lu&^XjI3&UdmlX=L$Cnc4GznX6duBZn zo8eXkAW>;kaq*jp^)9(}S-bW)bVYv+aFM`vavCYg`+8oz(f>A{C>hou!^A{f*fw*_ z>r2TIvVTGBbAN5=QE%XOOM7S%BlilQ4Lyl*X3#vPvSqi^jttm@k6XvfRYmB2t5i+( z)VPamRPE?`be`3-tWNQllTza`|J}s6m1#0gV$4{k2C70uGQowgI`n-k6Um?0alFn| z0~>ie3qyX0S26&-<(^y(y1xJC-osKtuwt&j%(O@cC&DG$9!+XghQnB?JnT1Ifdsm* zt;vFyT71U0eIqH|88bSW?bhmq9fuWi0-o|tEr-Bys@A-nefml)@?NopD_Lk=^;r_N zSbq!ZvCfft6C#AkYF-VaTJpfdP2@_)a!~UL=3hc0AZJz@@+N33rIIQshnGmfMA@n_ zTpE*vy&CFuQ>sz3NVVyx)lxo`x}B3JXI1n4jC@}EC;&vD8Ik9q*PN3he1XJ5DdM|m zmiE)H;LybYv${n&KK{}#QM;#fdUAL;oV7?l|%`+Ujo_)aE z47#Yf$NS|I!T;ZThdo;=l|9_+@M%~z(dbP16gp@bCVPs7a+R)0z{`|W zWTw;qVeB1(LGw%zsji;n2q?+)%D2RX_dWMr<~ zd#!KL;fOR$Zb^nFvDXy0fh8^c2rL3+9)stA!-k9|Kv1GVpGZj+rSrRTxWSQqlckJ2x&MhBQ`rrPS1iDTt$)5Ko3s4mQbIvZ5aOijR6*>W?l0zf zAsNgf^Q~*hW^k$^+-s71Jc(tAGeBaJ3F z2DM_Y3=j}3#C{T<@^yU&T6;8~&yWCAm(DP8j!fF?@piww;fG6bC|Ptj`7e$C1A=gB zjNTyDTY%%?PaU^d0*xl^sfVw^Ry+sn|J_O^0(M8746h^8fb(y>0gL=99J8*y@ z>P^f@K%MsQE1#Q7vTe+Q1qwy;~aS+@ef8oDrbiY^Y}${Ah82iNO009kbE~zAh99J_z`#% zNuzMc8UlWuhyh4N=FoCv?{t2sdSX?K_J#e6YxP8FEnuM-j}-Z7@%!h8N%s4y*WTz? zJ~D4*0;xw;@OC=y>>Ee7N4zw0=?x34cSA7i=3+bZ8k`M_)|R8%Fu?RnricLF{WUxm zLF;!bu+;YQYNVi=-H3iw`g+zW%XC#=*hgv8!9x85h3Pq&{w2elBkD?U`6L+m1Mfi9 zP0D0U8bGBgl3hzzV-BF|Hif~O)i&d=wolQiFtDok$;mRIbb zt75Tg1QC}-zZXS96V3{G^oO1vFNT$77gvq9ubye!OQ*&Rda!+vRc5$b%%)K@y2iA> zV;{r_evOyo6eZvU9lm%6=AjyL$B%*aha`k5=UA0JeNIvRo~TxF!e6-P8yL0qA&WnG6A_fPK|cspIbZo-4nd`9y; zUB*QZqL)_2_I|53_?H&&zn!K3fp=;h3q>guNE!^$Y04qHr9IV zVar{2Z=qkGHmXLKzbNptX?F|K==wAO7XDaJhuOdXLuiUbmI7NIomzu(FD*z=MjY=@ zuMP^VDc)h@|KSe&%{E1C9Gpz2#r$TQ$_7P%{MP$ezkNSk9!h};T6@3kigN7x$<0~; zK|JAjt#RA|@l#0iR|fJ|7Hs^y*1Z3HzI1?=O@qDr81x3K#04O4OB{4Bh=TmFrzL#c z+5&|%QH5NL1IZ7D`4{}R`=iU_VKC0`?e+Q#HCle7bMbhGi$Y~B=-)g6^cIFlSc0M@ z#r*u<8E zj8XayJUkm*u0tnWzTBAEn-1>W%N>Rnmnr8w2bs3TZf+AyYuq5%ww)g{ub0K+EgXtK zMn?AqV3=YYTFO6LQrKtwK}W5(G`Z-6)FfC zheHI5*=NZ*DwD;P8ZuC=nw5-?tGhcKD#x=EYZ5ha2X0A`DXcIa$e)Xk>?;)_NXmP* zb)FJp*CbyN3n993$k!@sSIyFP=4#4aX-A3iT?i}41R@2}Cq`X#e@Ks=MXt=-j8rsa z$z9*JKnWadlm0O(BQb0RryJ#>m;LMbE43~58cdCo3@(iD3Ze6xVR`)eMWT+1zwMJt zwAmJrDHnGx2&B6<F&c%+Mwd1dIcQkG6S$Ln$o6!9T+HI_#B$EN$|bS@F{7UV zbK39_Bm}pKHB6L;Ktqa;T6>ca=UzQIVl7|E97Nc~0MA(;Xxc2*FNAsUWg17y|6pL2Y=KDICYfi-%{AwWZ+QYWh~WxIZtKNqbxub@*kz^cOa@P0kO^oNY>eD4 zpZdaxzEH(KubMeq=@$@yYsdJo#BEbYH8?V-2Yw;46Dukt*Lw|GyB*L2(?H#5R2Bx~ zm?SfGXYdS@5Qtu9Z|lU6O{ybwA`^}D9R}?6k5D@pL>|gv^u~fPZ+Tj4C?c>hLl8b* zU~&?NsY$X?TSXU5Qv=BW$t_$C(mGX-rvy+MuVpz18UsRAW#fNiXb%`7^RT_guKN2l zfK7!YyiRi}meV-AyA+&C7us%WK{`tv6Fv|$b08l?D|Jh@x6rGFlkABwBXTCFczW*| z81OPOV8G*Mq!U(BtjEvG?Du)|K2<6>`i-bzOD+VTfF=&Se{+-HCCGFnhixPoi2!!c z=&Be4UZ=~;QAgQRpYzE*6}xp-|4Hm;G*xoQE1{R0e4L75%50_5J};?CMpi*5eJP-! zGNULrX#mnXs>US*@mjkQc${!Dei&}JRL`XY_HfM(!K6;ns?YDyg`+lsgm+4G&>iAP zLKKk7;7~Vs5Uvh6GTGi4dsixp0FeR~II$lWO z$ZDk4y?eQO>e*xZ_}GH+b$>-7(a`KEXq0r%xZ2QIy%j_=w5<1F%&n6OnoO|b59QGJ z?zZ88F0t=>*hFgw>G8w!&zP^xTmVe7T~CM>PS-|1Yux$r5Dvq@YIbuIdWu(svrKSm^jV@3*Iu|!mk3)Xa08Wz}H~{CK(-JeR);PRjSoShv z`7I4Nap3CRRT1XZyjnv_B~=L(u-pq00V_%N)`?P-@?8$$lSV6+2bjTB1P}=ps-`Ln zv~0}A4&u(7Yg(|xoJyjOIlnsIXuaY6wt{kCpb1qvw!EgMpJQps#I*_-(eJWm89Ul|r3r`Y%t56$2-o1zIWi*7Olb>mZNod7=w-aiQuK{d`iCX+BbV9C%HnHG8(LQ&#v zW7U;d?ZQi!5|*?~tFp4_Jsf$3n51&$)m*1Nu5IKu-S{qt` z0+Go|XxLA93ko;m3(6FXOZf4kTmZQ_htzXYz_>nS z6o9Aoh0I^%4i2EkerbCKYVkh6ddS0;9>MmSx;e|r3vq1K`2Ch1#as43RKxX5MthTp zI<~sE>W#_NPbkbOwNEvW*I&~p1yna6GPwYSk8c53OGs4K*%@tDbB!LIeVyiicSL4S8@ zepfer$(bXna^?wUcGX=)P|#Zo?Fy;pZr-zpTbAnJ;I_z3Gu^PGy^c}}H%>x6KAxivZeWmhJ8 z@uQF>e*;9-d$84jw}154z8JnR$uBw-p4b9VcP?8M+M4?h)3IO|E$;}FpyP+qbAhZ* z+_dKOZrr*k`*8~4W$c8^x$-0H{;ek1n0r~rEKcQs&%5N<@8;(J@ZdaCaz?UG(kk}< zlrUFUFH=nAfgWNiOiFr*XkHLF9jvUmP>3F_hYdSVRcLyBUj>JDmHw8+}lnjg|mg_ z2+~TiFjes2?FX?kWk>9-0x{WgxL1-eD4Hta(CTX|41%yw4clIlc4F#HoK}}x%MXyd zLxdXi@@_XRoraj0-uSexucSK$7(}Vor}g0NhgQVTj@+*fIF7TiCW7sh`Ko{Z&&k(`OLODlhc_Vkxbm+AP?)1Lc@S+g2fL8 zx(%$iNa)Yilr4gM)d;@X`Rm?~(9YHTf2(5uhu%z9=3nT$py>)|zkAc)V#_UjE^jv4nIjIJBH5Wy5 z+M`F=DIT1pJ6?8(&x^^63t7nEqjQ_YVI5aTsL-xUg3HlBro^z49Eu!l} zJCw1BZHXC^PCJrHbeWz^OP&3aVo6?ZUt5C%O}yV7 zy&pY-QK7;_0#zvBR{r0JO*`9P2VrtIqjUe*X^rN?`j;9En6IFSUaqm8P>9AJ%ExJb4x`hSwqgk{JtLS@cb|bnXRBT$*Ycxv$ZGP&FABX0>Nd0+T4Z$Y{@4bk z+T12(IZN35C41&D>!7&z-(c{E@ol&wVy%huiNe^x>>3Ezf*0vh{%j?QwaEHXi!(Cy zU62g$nFkbrEb0^QQU^b^6wFKX+A13mN{oBrN^Zh-g49{C7^Co%o_$hCSXI%~#}zp$ z8@VN`pPp+q91ap}jqWw=*C#j1R!6``1K4k?-_PH~bbH74@roo`SeR?$Pz+ZeETCgA zevU3ugj^qS7*aek6vxK8(ZDF&&7MRR$}l1~XhPd6z2u;Krz^=te792PSMA?Z$vDZ` zE-%Sj3Rz1m>qx9>E`9a&6f@Pdg)5VQp_sjlL#B@O)O09!5f}>KX%QsFVMPyka3amR zLRYFQ*{3;kqy)$5D%uE@m=BPU({cx8uT{~GlXX|dw4OiM7C(%==Lb15mgY6{rdQKqfIIZmJmkv|%B+qoWiV#)sJ(*3 zFVP#jVz4@zoAtS-di)ypHO(9#J)oGi_ht+wV9jSo$Z6`6-?7L=7E0eME95_Mg*M{|6S!q?SrLE@*J0<~?_-1%GYI6TH6zi4`ZGq)bXRuk% zC>yUV=2VY9LtKXgcVy->20YK6gO)q^X(4 zigvJK@^`^wZPxC!<;bvg8$84UEs-C{sJXwv%471wWbs}GT2~6XcutZds_8lNSe8{N zy-A5X5wJ(;lK+pQ$)lGDZd59A%0*H8%MG9R`-|>yrar_;@wzXd>PA*z2QN9{ zOK#Ck?6;aL64;<=K}>!Z$!s7K5Bsf!V7Qa13Aqk(1hAd9(z-IP*rCC; z3q9yO;Y?Nx>rI=cK@E{Ifb8`2GYbvq;1?-U9SxFP{VwP4TpIL-PV-iS)yNT3t;cUh zG=yjML=%e|!Fr-pQhCxcP$+kja2wH}4kX(_x+~92I|^g1{RQ{#%N%*Nme zV_*PC4vqfqFOadk^933IIThz|B12X15@7TrA$oU{q7)&_g}^uqpjZVdR$Der82p^HqQVEC7Yea-7&46D)eMOIt>zv3{J zmBKtanVYFpK#JC43Nb@FW~zyE2hdp!=cN9JJb`Ie0Q(P;%4b0rHh3jGaQv%4ZI*3z zitDUxhsXz%)&5p_7~0nUTqXT@!0vz4&RFqhAS%8v@wxdN&;TqhkICCF+bcQg-6mDt zC2GJ@d?E4gIni=LHIpY;^OJ#*X080Ud-3zxwFcg$T>9TNLyJTFZ*S%8Ij4(-bk$T96W?i_f zSS$~{TC3-JRH-D!J{+=#*mO}ZFit551Cy&_9Mweej%uT48e|_;)r-uOCoUy%$4*&O zKj+Z7#&vAC<4=T&8xe?>ITn?`zR^=oYNMx|)I@6|$gpCOz_#75Cra`UgBZe5 z9k#V+cX3wF|5)xlIdU9Cf<9P|WC?dA3Uila3K$Ay6YYAk9Ds6Jvcwa>wvV!LdG^P0 z#t&2ylMvMyJSMErb0)cg5i|8qmorC?BaWT&nl_^HoIM_-+lHi3F06;^CiQt6LY!mRR>aI zh0U2#=iB%H#@I3`esV2$y24-VGbkS7^CmYCjhu3m?HZFPN_HKqBX4qHQ-1N+vY$B` zB8Llbjt+a9<{)!b=<*d<0Mbu3u=|6roeRy19nQ&>pSi1tPGSqpk*|%4QqNOI$>dd5 za3_E?A3k)zfvZc4cUiT^m7ljeyLXEpL~$Bjq!b)ANimTe-4+()@$19-L6Lkb2&Cv0 zNrAqf&mX@(nO$%L#l3rAY#vpdDoR2%DZ|FxIYuMA>#PldY`j^{OV{?%?d1=r$R;Is zdP%cB)3g0EvXKGYb0mSeEPOo|eiY4)&eo2?OlRsIaIxrdC5p-896{e;T0>6w7hu-P z+)L%-W133jAbZSTN~wV56DqNpFb%t?ZX;~fCBJ;rH&w1iwZoFLT<=qJ4it^Y*OSnv zWNPc7u2Kn!*a^H-#QrwtKi0D4DzYSI`>zK-0Bx+iod2yt{T~`aSy}#ngwx;jP|t7OnG@YBShp{#0e-#!6n) zi)EVnqt_R%f>_w!TBQq7>%kp8KU-gJ@R3%(Z?_`qM%-c+ zt-1_XS@z!M0S1CLWpU-m0M*EiE4{cZxvU@R&fTsze?Pq}zABVPO#ZQ&_*e~;wAY6D zT#s-lqE5+Ap@*$du6y|x#JF!tEbrJVrlg2Q=-i6bfqzO{{Jw^BM)}7#Mex=;>)&X; z9d{*F7B}6=A|Jkw&wyoH#i>0zPJ#e?Cz@p|S|$bH3QQX5p=Ua78eTF6*8F4**d}Dr z&HY|kLYDvTNMaUKtj7WI%l!1$?ExY5B%1Bq z@QJ#)iM!M+yeus02%o4Oet840*UtN!DIU9M<`$sj-S9fxhSJJGprv>I%~BbqaPNU1)Tl669Gy(mSk=KE&L7} zU*}*E`?`4qCrBU1f13ETr`T41^>459`K=K~w|XMb1V~f53FeGJX+K)bYfMo_yiVpA z9}%rm!X3|PDXdtbi`2Zh^aO%wx^e1=oCTY)w_0SuJZ|0J82*K)hR+;Lmveg9I0Gun z{O+GqE^sjFw#$Ny8T15;NvwNu!;70J1}VvU2KfiWg=zWcRqW%VUiF7y_r7PBu*S5z z7d#|XZrQBNgGIT7bnv>$`foyNR>IdVk_{5-j2j6sb|K^?{LkzP(?VumA>ZXya6Qn4 zLX=XdkRX0s*fc`;m>YTN%y_mCPxaY5Pc9bUh(Vg_;`&(OS_W3Rr?8q$hjk2THHR6r zNlp3I*w!foTKyCW^2y_~!6^;;c(C|e>8K{2qfozP1Q}s7I3-UrY#Ra*rwuti3SCcr zVI}Jf&-`=HLM9;FNRtjk31Ad|gz*3zm1!se7b4gm<(;r{#Zp-eg0$w2B24N&?<{pT zc@21o6|8dMfRYgIV@)~$u&=ricoUwf1K8bb(1v8dMIjw<24WVQ-L~)N z3oE?LxV53QDof}bJE1jB8QoKR2ldpaR-8CRxxRe!qRFwYi}M0`^6tO?;OU@uuPOt5AF@AqyW>P z&_wiP;y}}NkKfD_uuqVRB)!RD4kRnM8COz^DbAixwvhqs`YcZJ>Qu0wO5?_zp-pCq9h}kO{%pEr~%#N`C90hpu#9tZ(buX?~*2k@2tk??xBy% zbx8{1s1rW<#NvCCF?n|j^jbt^-OVG*$|&rWD`-Ae12Ts~OKC^0zY`&3Y$0lTk3Z=v zSUQ5ekExJr;$^IS@iDLJlAS_R6D8z+5(3O$!3AFIlaUe?$AbmRj8`InzQ(!{VWu_+ zK~_rJ`n|#@3sEQ2Y#8T(8S^QiYVjojR>2b6nD`1kqQmoaa4x~>28C5s77xpEk+X@) zLZ*mLM-eY;}FnfV+3gU@WkxeZ&qrnF*w%hUWt5qjj4K zi`EsdknN@k+Q=4|(Goig-I*;Mae>;4ynZRuJ~LxgU;{Cif6(xP(HniuL_8qDr)Vjm zUd*B{b+><|U&Fa!E>5^(Ka0CIhbOo4uUHBH zZQCHz+o{dNYNgFu$%yLi2ohp_OYho)x7l?B%W#n@Mt(M7IBG6S)QVC&^OB$eDOhXQu{hg8Bz>~*mH&U=_j zC}LaLxzGcx+71|@y&FSN>q9(uYmohaQfH5U;NvQcC}k*>Zq`}1UH4nGcgf`5V7uBG zO!3aT=P1o~>4cm);su|UbVmzP*$rZLrG>mWSx;|0j~=pp5zI+2!%{G&JNt_Gk?p?H zg`{i41*oM=R|3(zdULzt0J&#Q=cjIf%LuY7PXJ<-*CU${LR%_`*eoRE*qc-bKg}sf z18{%&C|=6i#P-U$ZcO$Ei}YqLtTjrnTb3@QuZ%sY+&n(UdYk9FthWR8s-sH^>cF{A z(w5z*T?bSkH}L@RN0biMVU-c!N9&I;>t-JbtOXgER9LJe~e^W!b~@z+hpmF zHoH?jyhALaq#Vaf#u<4`nEDJLDu;DcK&915C|W_qe8#?tm3)*v%u@xtnCdTX?LcPA z$if7dU~ZID*T>et#-Q{yYar1*kJq+=;17>8YXFP6SAE#{Gp%u@Uwc3RD8}vSRsoFl z>h*%On|9(KMf0_vttJBlS92{|I}H7~YNU?2pyQqdPG2_{1GYd3RW>g=7d`|EgM0oxw`hx zBDUQ4zTUsL%4*CgzpMBRXT>xRbu|iu{i$ z;j&|^87WvCL7X;C!f@QvtR=hT`y19AogM%0D3xV&?_qCJ05a@s@r*Q~7kd}o@B8!M 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%0As2T;_N- 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