-----------------------------------------------------------------------------
PSF (Portable Sound Format){¿ÉÒÆÖ²ÉùÒô¸ñʽ} ¹æ·¶ v1.5
by Neill Corlett
-----------------------------------------------------------------------------
Ð÷ÂÛ
------------
PSF ÊÇ°Ñ "NSF", "SID", "SPC" ºÍ "GBS" µÄ¹¦ÄÜÐÔ´ø¸øÁË´Îʱ´ú¼ÒÓûú{next-generation consoles}.
PSF ÀûÓÃÿһ¸öÓÎÏ·µÄÔʼµÄÒôÀÖÇý¶¯{É豸?}´úÂëÍêÃÀ¶ø¿ÉÐŻطÅÒôÀÖÐòÁÐ, ¶øÇҳߴ缫¼Ñ{size-efficient}{»¹ÊÇÌ«´ó}.
Ò»°ãµÄ·½·¨ÊÇ Ò»¸ö PSF Îļþ°üº¬Ò»¸ö ÓÃzlibѹËõ¹ý(zlib-compressed) µÄ³ÌÐò, Õâ¸ö³ÌÐòÈç¹ûÄÜÔÚÕæÊµµÄ¼ÒÓûúÉÏÖ´ÐÐ, Äܼòµ¥µÄ»Ø·ÅÒôÀÖ.
ÏëÖªµÀÓÐÄÄЩ¸Ä±ä, Çë²Î¿´µ×²¿µÄ±¾ÎÄÐÞÕýÀúÊ·.
-----------------------------------------------------------------------------
»ù±¾Îļþ½á¹¹
--------------------
ÿ¸ö FSF Îļþ¶¼ÓÐÏàͬµÄ»ù±¾½á¹¹, ÏÂÃæÃèÊö.
²»µ«±£ÔÚ PSF ÎļþÖÐÁ¬½Óµ½µÄÈκδóÓÚÒ»×Ö½Ú(byte)µÄÊý¾Ý. Á·Ï°Êʵ±µÄ½÷É÷.
{·ÒëµÄÀ¬»øÑ½,Tx=xT}
- Ê×ÏÈ 3¸ö×Ö½Ú: ASCII×Ö·û: "PSF" (´óСдÃô¸Ð)
- È»ºó 1×Ö½Ú: °æ±¾×Ö½Ú
°æ±¾×Ö½ÚÓÃÀ´¾ö¶¨ PSF ÎļþµÄÀàÐÍ. ËüÍêÈ«²»»áÓ°Ïìµ½ÎļþµÄ»ù±¾½á¹¹.{!²»»áÓ°ÏìÓ´!}
µ±Ç°¹«Èϵİ汾×Ö½ÚÊÇ:
0x01: Playstation (PSF1) {PS}
0x02: Playstation 2 (PSF2) {PS2}
0x11: Saturn (SSF) [ÊÔÑéÖÐ] {SS ÍÁÐÇÓ´!!}
0x12: Dreamcast (DSF) [ÊÔÑéÖÐ] {DC!!}
0x21: Nintendo 64 (USF) N64 [±£Áô]
0x41: Capcom QSound (QSF) {CPS1-QSound, CPS2-QSound, CP-ZN1-QSound, CP-ZN2-QSound, »¹ÓÐô??}
- È»ºó 4×Ö½Ú: Ô¤Áô¿Õ¼äµÄ´óС ®, little-endian ÎÞ·ûºÅ³¤ÕûÐÎ
{little-endian: µÍλ·ÅµÍ×Ö½Ú, ¸ßλ·Å¸ß×Ö½Ú(??¶Ôô??). ÀýÈç x86 ϵÁеÄÄÚ´æÊý¾Ý¸ñʽ. Ïà¶ÔÓ¦µÄ 68K ¾ÍÊÇbig-endian.}
- È»ºó 4×Ö½Ú: ѹËõ¹ýµÄ³ÌÐò³¤ (N), little-endian ÎÞ·ûºÅ³¤ÕûÐÎ
Õâ¸ö³¤¶ÈÊdzÌÐò{program data}ѹËõ{_after_}ºóµÄ³¤¶È.
- È»ºó 4×Ö½Ú: ѹËõ¹ýµÄ³ÌÐòµÄ CRC-32 Öµ, little-endian ÎÞ·ûºÅ³¤ÕûÐÎ
{CRC-32 32λѻ·ÈßÓàУ¼ì}
{!! CRC-32 !!ÓÖÊÇËü,Tx=xT×î½ü¾ÍÊÇËü¸ã²»¶¨.}
ÕâÊdzÌÐò{program data}ѹËõ{_after_}ºóµÄ CRC-32 Öµ.
Õâ¸öÊýÖµ±ØÐëÇ¿ÖÆÌî³ä, ×÷Ϊһ¸ö PSF ÎļþÈç¹ûÕâ¸öÊýÖµ²»Æ¥Åä¾ÍÒâζ×ÅÊÇË𻵵Ä.
- È»ºó R ×Ö½Ú: Ô¤Áô¿Õ¼ä
Èç¹û R ÊÇ 0 ×Ö½ÚÔòΪ¿Õ
- È»ºó N ×Ö½Ú: ѹËõ¹ýµÄ³ÌÐò, ÓÉ zlib ѹËõ¸ñʽ. {compress() ΪϺÃ×´ø(),˵²»¶¨ÊǸö zlib µÄº¯Êý.¼ÇÏÂÀ´.}
Èç¹û N ÊÇ 0 ×Ö½ÚÔòΪ¿Õ
È»ºóµÄÊý¾ÝÊÇ¿ÉÑ¡µÄ, ¿ÉÒÔÊ¡ÂÔ:
- È»ºó 5×Ö½Ú: ASCII×Ö·û: "[TAG]" (´óСдÃô¸Ð)
Èç¹ûÕâ 5×Ö½Ú²»Æ¥Åä, ÔòʣϵIJ¿·Öµ±×÷ÎÞЧµÄ, ½«±»¶ªÆú.
- ÎļþµÄÊ£Óಿ·Ö: ûÓÐѹËõµÄ ASCII ±êÇ©{TAG} Êý¾Ý.
Èç¹ûʣϵÄÊý¾Ý³¬¹ý 50,000 ×Ö½Ú, ÄÇ ±êÇ© Êý¾Ý¿ÉÒÔ±»ÇжÏ, Ò²°üÀ¨ÇгýÎļþ±¾ÉíµÄ¶àÓàÊý¾Ý. Õâ¸öÉè¼Æ¹ÊÒâµÄ.
Ϊ½«À´µÄ¼æÈÝÐÔ¿¼ÂÇ, ±êÇ©±à¼Æ÷ºÍѹËõÆ÷¿ÉÄÜ»á¼Ù¶¨ ÈκΠPSF Îļþ¶¼Ê¹ÓÃÕâ¸ö»ù±¾½á¹¹.
¿ÉÊÇ, Ô¤ÁôµÄÇøÓò±ØÐë±£³ÖÍêÕû, ûÓмٶ¨¿ÉÄÜ»áÔì³É ½âѹËõºóµÄ³ÌÐò ºÍ Ô¤ÁôµÄ²¿·Ö µÄ ¸ñʽ »ò ÄÚÈÝ ¸½½üûÓÐ Ê×ÏȺ˶Եİ汾×Ö½Ú.
{ÍêÁË~~Õâ»ØÀ¬»ø´ó·¢ÁË.Tx=xT}
ÓÐ¹Ø zlib µÄÐÅÏ¢ÇëÈ¥ http://www.gzip.org/zlib/ .
-----------------------------------------------------------------------------
±êÇ©¸ñʽ {TAG}
----------
±êÇ©ÓÉһϵÁеĵ¥ÐеĸñʽÈç ±äÁ¿=ÊýÖµ ¹¹³É, ÏñÏÂÃæµÄÀý×Ó:
title=Earth Painting
artist=Yoko Shimomura
game=Legend of Mana
year=1999
{Õâ¾ÍÊÇ´«ËµÖÐÎÒ²»ÖªµÀµÄLoM,Ãð¹þ¹þ¹þ¹þ}
±êÇ©½«±»ÏñÏÂÃæÄÇÑù·ÖÎö:
- ËùÓÐΪ 0x01-0x20 ×Ö·û½«±»¹ýÂËΪ ¿Õ¸ñ{whitespace}
- ±ØÐëûÓÐ null (0x00) ×Ö·û; Õâ´Î·¢²¼Ê±, ½ÓÊÕµ½ null ×Ö½ÚµÄÐÐΪ䶨Òå
- 0x0A ÊÇÐÂÒ»ÐеÄ×Ö·û {0x0A: ¾ÍÊÇ ASCII µÄ»»Ðзû, ·ûºÏ UNIX ±ê×¼, Win ϵÁлسµÊÇ 2¸ö×Ö½Ú, Ò»¸öÊÇ 0x0D, È»ºóÊÇ 0x0A}
- "±äÁ¿=ÊýÖµ" ÕâÑùµÄ¸½¼ÓÐпÉÒÔÔÚºóÃæ¸ú×Å
- ±äÁ¿ÃûÊÇ´óСд²»Ãô¸ÐµÄ, ±ØÐëÊǺϷ¨µÄ CÓïÑÔ±êʶ·û
- ¿Õ¸ñ ÔÚÒ»ÐÐµÄ ¿ªÊ¼/½áβ, = µÄǰ/ºó ½«±»ºöÂÔ
- ¿ÕÐн«±»ºöÂÔ
- ¶àÐбäÁ¿±ØÐëΪ Á¬ÐøµÄÐÐÇÒ¾ßÓÐÏàͬµÄ±äÁ¿Ãû. ¾ÙÀý:
comment=This is a
comment=multiple-line
comment=comment.
- ±êÇ©µÄÎı¾ÓÃϵͳĬÈϵıàÂë±íÀ´±àÂë/½âÂë.
{ÍÛAAAaaa---!!!Ϊʲô²»ÓÃUTF-8!!!Ϊʲô!!!}
±äÁ¿Ãû³öÏÖ¶àÓÚÒ»´Î, ¶àÐбäÁ¿ÁãÉ¢µÄÔÚ²»Ïà¸ÉÐÐ µÈµÈ, ÕâЩÐÐΪ¶¼Ã»Óж¨Òå.
ÒÔϵıäÁ¿ÃûÒѾԤÏȶ¨Òå:
title, artist, game, year, genre, comment, copyright
(ÕâЩÊDz»ÐèÒª¼ÓÒÔ˵Ã÷µÄ.){ÎÒÀ´YY: ±êÌâ, ÒÕÊõ¼Ò, ËùÔÚÓÎÏ·, ·¢ÐÐÄê, Á÷ÅÉ, ±¸×¢, °æÈ¨}
psfby, ssfby, dsfby, usfby, qsfby
ÕâЩÃû×ÖÊÇ´´½¨ÕâЩÎļþµÄ¸ºÔðÈË.{???} Õâ²¢²»Òâζ×ÅÕâ¸öÈËдÁËÉùÒôÇý¶¯´úÂë.{???}
{WHY!!!ËãÁË,´ó¼Ò½«¾Í×Å¿´°É.ż¾ÍËØÄÇÀ¬»ø~~}
volume
PSF Ïà¶ÔÒôÁ¿, ×÷Ϊһ¸ö¼òµ¥Ëõ·ÅϵÊý. 1.0 ÊÇĬÈϵÄ. Ëü¿ÉÒÔÊÇÈÎÒâʵÊý, °üÀ¨¸ºÊý
length
fade
Çú³¤, ½áβµ³ö³¤¶È
ÕâЩ¿ÉÒÔÊÇÒÔÏÂ3ÖÖ¸ñʽ֮һ:
Ãë.СÊý
·Ö:Ãë.СÊý
Сʱ:·Ö:Ãë.СÊý
СÊý²¿·Ö¿ÉÄܱ»ºöÂÔ. ¶ººÅÒ²¿ÉÒÔ×÷Ϊ СÊý ·ÖÀëÆ÷.{ÒëµÄֱ̫ÁË.º®~~}
ÒÔϵıäÁ¿ÃûÊDZ£ÁôµÄ, ²»¿ÉÓõÄ:
- ÈκοªÊ¼´øÓÐ Ï»®Ïß (_) µÄ
ÕâЩÊÇÔ¤Áô¸øÖÁ¹ØÖØÒªµÄ²¥·ÅÐÅÏ¢µÄ, ÀýÈç _lib ±êÇ©ÔÚ MiniPSF ÎļþÀï.
- filedir, filename, fileext ÓÐÌØ±ðµÄÒâÒåÔÚ Highly Experimental {ÓиßʵÑéÐÔ?}
{ÎļþĿ¼, ÎļþÃû, ÎļþÀ©Õ¹Ãû}
µ½Ê±ÕâЩ±äÁ¿Ò²Ðí»áÓõ½, ËüÃǽ«²»ÄÜÓÃÔÚ±êÌâ¸ñʽ×Ö·û´®ÖÐ{title format strings}.
-----------------------------------------------------------------------------
ÒÀ¿¿ °æ±¾×Ö½Ú , Ô¤Áôλ , ³ÌÐòλ ½âÊͺÜÀ§ÄÑ.
һЩ ±êÇ© Ò²ºÜÄѽâÊÍ.
²Î¿¼ÏÂÃæµÄ²¿·Ö.
-----------------------------------------------------------------------------
°æ±¾×Ö½Ú 0x01: Playstation (PSF1)
--------------------------------
³ÌÐòλ: PS-X EXE ²úÆ·¸ñʽ{consumer-format}¿ÉÖ´ÐÐÎļþ, °üº¬Í·{header}.
Ô¤Áôλ: δʹÓÃ. ¿ÉÒÔ±»ºöÂÔ, ÒÆ³ý µÈ.
{°ÝÍÐ, ÄãÊǶ¨¸ñʽµÄÈË,ÄãÀ´¾ö¶¨,²»ÒªÀ´ etc, ²»ÒªÀ´ May, Must ¶àºÃ. º®~~ËãÁË,×Ô¼ºYYҲûÓÃ.}
ÎļþÀ©Õ¹Ãû:
- psf, psf1 (¶ÀÁ¢µÄ³ÌÐò)
- minipsf, minipsf1 (³ÌÐò»Ø·ÅÒÀÀµ¶îÍâµÄ¿âÊý¾Ý)
- psflib, psf1lib (minipsf Îļþ²¥·ÅʱÐèÒªµÄ¿âÎļþ)
ÔÚ PSF1 µÄÇé¿ö, ³ÌÐòλ ÊÇÒ»¸öÔʼPlaystation¼ÒÓûúµÄ¿ÉÖ´ÐгÌÐò.
Ëü¸ºÔð³õʼ»¯ SPU, ¼ÓÔØÑù±¾, ÉèÖÃÖжÏ, µÈ. - Ò»¸ö³ÌÐòÓ¦¸Ã×öµÄÈκÎÊÂ.
ËüÔËÐÐÔÚ shell ¼¶, ÓÐÍêÈ«ÓÐȨʹÓÃÄں˺¯Êý.
ÓÐ2¸öÖØÒªµÄ PSF1 ±äÁ¿: MiniPSF ºÍ PSFLib ÉÔºóÃèÊö.
¿ÉÖ´ÐÐÎļþµÄ½âѹËõºó´óС±ØÐëСÓÚ2,033,664×Ö½Ú.
¿ÉÖ´ÐÐÎļþ±ØÐëÊDZê×¼µÄ "PS-X EXE ²úÆ·¸ñʽ", Çë²Î¿¼ÏÂÃæµÄÃèÊö.
Ê×ÏÈ 0x800 ×Ö½Ú - {Îļþ}Í·{header}
È»ºó N×Ö½Ú - Îı¾ÇøÓò
Í· ¸ñʽ:
0x000 (8×Ö½Ú): ASCII "PS-X EXE"
0x010 (4×Ö½Ú): Initial PC, little-endian ÎÞ·ûºÅ³¤ÕûÐÎ
0x018 (4×Ö½Ú): Îı¾ÇøÓò ¿ªÊ¼µØÖ·, little-endian ÎÞ·ûºÅ³¤ÕûÐÎ
0x01C (4×Ö½Ú): Îı¾ÇøÓò size, little-endian ÎÞ·ûºÅ³¤ÕûÐÎ
0x030 (4×Ö½Ú): Initial SP ($29), little-endian ÎÞ·ûºÅ³¤ÕûÐÎ
0x04C: ASCII±ê¼Ç: "Sony Computer Entertainment Inc. for North America area" (»òÀàËÆµÄΪÆäËüµØÇøµÄ±ê¼Ç) ʣϵIJ¿·Ö¶¼ÊÇ 0.
Îı¾ÇøÓò Ó¦¸ÃÊÇ 2048×Ö½Ú µÄÕûÊý±¶.
ÔÚ0x4CµÄ ASCII±ê¼Ç µÄÇøÓòÐÅÏ¢½«±»ÓÃÓÚÈ·¶¨ ÆÁĻˢÐÂÂÊ ºÍ VBlankÖÐ¶Ï ·¢ÉúƵÂÊ(NTSC vs. PAL):
"North America" = 60Hz
"Japan" = 60Hz
"Europe" = 50Hz
(Èç¹ûÕâ¶ùÓÐÎÒÓ¦¸Ã°üÀ¨µÄÆäËüµØÇøÇëÈÃÎÒÖªµÀ)
ͬÑù, Èç¹û "_refresh" ±êÇ© ³öÏÖ, ËüÖ±½ÓÈ·¶¨Ë¢ÐÂÂʵÄHzÊý.
Õâ¸ö±êÇ©¸²¸ÇÔÚ EXEÍ· µÄÇøÓòÐÅÏ¢.
µ±Ç°Ö»ÓÐ _refresh=50 ºÍ _refresh=60 ÊÇÓÐЧµØ.
-----------------------------------------------------------------------------
PSF1: MiniPSF ºÍ PSFLib
------------------------
MiniPSF ÎļþÊÇÕý¹æµÄ PSF1 Îļþ, Ëü´ÓÒ»¸ö»ò¶à¸ö ÔÚͬһ¸öĿ¼Ï嵀 PSFLib ÎļþÒýÈëÊý¾Ý.
(ΪÁË ¹²Ïí Çý¶¯´úÂë, ÉùÒô¿â, µÈ.)
PSFLib ÎļþÒ²ÊÇÒ»¸öÕý¹æµÄ PSF1 Îļþ. ËüÃÇÄܱ»ÆäËü PSFLib Îļþ"µÝ¹éµÄ"ÒýÓÃÊý¾Ý.
{RECURSIVELY "µÝ¹éµÄ"???}
Ç¡µ±µÄ ±êÇ©±äÁ¿ ±»½Ð×ö _lib, _lib2, _lib3, µÈ.
ÒÔÏÂÊÇÕýÈ·¼ÓÔØ minipsf µÄ·½·¨:
- ¼ÓÔØ EXE Êý¾Ý - this becomes the current EXE
- ¼ì²é´æÔÚµÄ "_lib" ±êÇ©.
Èç¹û´æÔÚ:
- "µÝ¹éµÄ" ´Ó¸ø¶¨µÄ¿âÎļþ¼ÓÔØ EXE Êý¾Ý
(È·¶¨"µÝ¹éµÄ"ÏÞÖÆ, ±ÜÃâ±ÀÀ£ - ÎÒÏÞÖÆËüΪ10¼¶)
- Óà _lib EXE À´Ö¸¶¨ µ±Ç°µÄ.
- ÎÒÃǽ«Óà _lib EXE À´³õʼ»¯ PC/SP.{PC/SP???}
- ÔÚ ÔÏȼÓÔØµÄ PSF EXE ÉÏÌí¼Óµ±Ç°µÄ EXE, ÓÃËüµÄÎı¾¿ªÊ¼µØÖ·ºÍÎı¾´óС.
- ¼ì²é´æÔÚµÄ "_libN" ±êÇ©, N=2 µ½¸ü¸ß(Óà "_lib%d")
- "µÝ¹éµÄ" ÔÚÔÏ鵀 EXE ÉÏ ¼ÓÔØºÍÌí¼Ó ËùÓÐÕâЩ EXE ÃÇ. µ«²»Ð޸ĵ±Ç°µÄ PC/SP.
- ÆðʼÓÚ N=2.Í£Ö¹ÓÚµÚÒ»¸ö²»´æÔڵıêÇ©Ãû.
- (Íê³É)
EXE ÃDZØÐë×ÜÊÇÏàÁÚµÄ.
µ±ÔÚÒ»¸ö EXE ÉÏÌí¼ÓÁíÒ»¸ö, Ôö¼ÓÄ¿±ê EXE µÄ ¿ªÊ¼/½áÊø µã ÊDZØÐëµÄ, Óà 0 Ìî³ä²»ÓõĿռä.
ÔÚÈκΠ_lib* ±êÇ© Àï¸ø¶¨µÄÎļþÃûÊÇ Ïà¶Ô·¾¶, Ïà¶ÔÓÚ PSF Îļþ ±¾ÉíËùÔÚµÄĿ¼.
"/"ºÍ"\"¶¼±»ÈÏΪÊÇ·¾¶µÄ·ÖÀëÆ÷.{»¹ÊÇÖ±-_-"}
¾ÙÀý:
- Èç¹û C:\Something\Demo.minipsf °üº¬ "_lib=Hello/Library.psflib"
- ÄÇô¿â½«´Ó "C:\Something\Hello\Library.psflib" ¼ÓÔØ
ÎļþÃûÖ®ÄÚ¿ÉÒÔ°üº¬¿Õ¸ñ, µ«¿ªÊ¼ºÍ½áβ²»ÄÜÓпոñ.
µ± ÎÞÂÛÊǼì²â "Ò»¸öPSF1Îļþ »¹ÊÇ Ò»¸öMiniPSFÎļþ" »¹ÊÇ ÐèÒª¸½¼ÓµÄÊý¾Ý ʱ, ÄãÓ¦¸ÃÓôæÔÚµÄ _lib* ±êÇ© À´¾ö¶¨, ʤÓÚÓÃÎļþÀ©Õ¹Ãû.
Èç¹û°üº¬ _lib »ò _lib2 ±êÇ©, ÄÇËü¾ÍÊÇÒ»¸ö MiniPSF.
ÇøÓòÐÅÏ¢ÔÚÕû¸ö _lib EXEÍ· ½«±»ºöÂÔ; Ö»ÓÐÔʼµÄ EXE µÄÇøÓòÐÅÏ¢ÔÚÈ·¶¨Ë¢ÐÂÂÊʱ±»Ê¹ÓÃ.
¾ÙÀý, Ò»¸ö "Europe area" µÄ MiniPSF, Ëü´ÓÒ»¸ö "North America area" µÄ PSFLib ÒýÈëÊý¾Ý½«±»ÈÏΪÊÇ 50Hz.
ÎÞÂÛÄÄÒ»¸ö _refresh ±êÇ©ÔÚ PSF ¼ÓÔØ¹ý³ÌÖÐÅöµ½, Ö»ÓеÚÒ»¸ö ±êÇ© ·¢»Ó×÷ÓÃ, ºöÂÔËùÓкóÀ´µÄ ±êÇ©, Ò²ºöÂÔ EXEÍ· ÇøÓòÐÅÏ¢.
Àý×Ó:
- MiniPSF ÓÐ _refresh=50, ²¢ÇÒ PSFLib ûÓÐ _refresh ±êÇ©:
50Hz ,ºöÂÔ EXEÍ·
- MiniPSF ÓÐ _refresh=50, ²¢ÇÒ PSFLib ÓÐ _refresh=60:
50Hz ,ºöÂÔ EXEÍ·
- MiniPSF ûÓÐ _refresh ±êÇ©, ²¢ÇÒ PSFLib ÓÐ _refresh=60:
60Hz ,ºöÂÔ EXEÍ·
- MiniPSF ºÍ PSFLib ¶¼Ã»ÓÐ _refresh ±êÇ©:
MiniPSF µÄ EXEÍ· ÓÃÀ´È·¶¨Ë¢ÐÂÂÊ
-----------------------------------------------------------------------------
PSF1 Ä£Äâ{·ÂÕæEmulation}±¸×¢
--------------------
ËäÈ»ËüÓë¾ßÌå¸ñʽÎÞ¹Ø, ÒÔϵÄÐÅÏ¢»¹ÊǺÜÓÐÓõÄ. ËüÖ»ÊÊÓÃÓÚ PSF1.
ÒÔÏÂÊÇÓÐÓÃµØ PSXCore0008:
- R3000 CPU
- ÖÐ¶Ï ºÍ ϵͳµ÷ÓÃ
- 2MB RAM (¾µÏñ¹á´© µÚÒ»¸ö 8MB ){???}
- 1KB Öмä½á¹ûÔÝ´æÆ÷{scratchpad}
- SPU
- DMAͨµÀ 4(SPU)
- Root counters 0, 1, 2, VBlank IRQs{???}
- È«²¿Äں˺¯Êý
ÒÔÏÂÊÇÎÞÓõÄÓ¦¸Ã²»±»Ê¹ÓúͷÃÎʵÄ:
- Òç³ö´íÎó
- ¶Ïµã
- GTE Ö¸Áî
- GPU, CDROM, SIO, µÈ. - ÓëÉùÒôÎÞ¹ØÓ²¼þ
- ÆäËü DMAͨµÀ
ÒÔÏ嵀 R3000 ´úÂëÐòÁб»Õì²âºó×÷Ϊ idle{Í£»ú}, ÔÚËÞÖ÷{Ö¸PSFÔËÐл·¾³°É}Õâ±ß¿ÉÄܲ»±»ÓÃÓÚ ±£´æ CPUʱÖÓ:
[jump or branch to the current line]{Ìø×ª »ò ·ÖÖ§ µ½ µ±Ç°ÐÐ}
nop
-----------------------------------------------------------------------------
°æ±¾×Ö½Ú 0x02: Playstation 2 (PSF2)
----------------------------------
³ÌÐòλ: δʹÓÃ. ¿ÉÒÔ±»ºöÂÔ, ÒÆ³ý µÈ.
Ô¤Áôλ: ÐéÄâÎļþϵͳ.
ÎļþÀ©Õ¹Ãû:
- psf2 (×Ô°üº¬Îļþϵͳ)
- minipsf2 (Îļþϵͳ ÒÀÀµÓÚÒ»¸ö»ò¶à¸ö psf2lib Îļþϵͳ)
- psf2lib (Îļþϵͳ Ϊ minipsf2 Îļþϵͳ Ìṩ ¶îÍâµÄÊý¾Ý)
Ò»¸ö PSF2 Îļþ ÓÉÔÚ ±£Áôλ µÄ Ò»¸ö ÐéÄâÎļþϵͳ ¶¨Î»µã ×é³É.³ÌÐòλ δʹÓÃ.
Îļþϵͳ¿ÉÄÜÓà _lib, _lib2, ... ±êÇ© ×é³É, Óë MiniPSF ºÍ PSFLib ¸ñʽÀÛËÀ.
²¥·ÅÒ»¸ö PSF2 Îļþ Ê×ÏÈ´Ó ÐéÄâÎļþϵͳ ¼ÓÔØ "psf2.irx" IOPÄ£¿é.
¼ÓÔØºÍÖ´ÐÐÕâ¸öÄ£¿éÓ¦µ±Íê³ÉËùÓбØÐëµÄÓ²¼þÉèÖúͲ¥·ÅÒôÀÖ.
PSF2 ÎļþÊÇÓÐÏ޵ĻطÅÐòÁÐÒôÀÖ, ʹÓà IOP ºÍ Ó²¼þºÏ³É(SPU2).
Èí¼þºÏ³É, ͨ³£ÓÉ EE Íê³É, ÊDz»±»¿¼ÂǵÄ.
{EE "Emotion Engine" PS2 Ö÷CPU}
_refresh ±êÇ©Äܱ»ÓÃÀ´Ö¸¶¨Ë¢ÐÂÂÊ HzÊý(50 or 60), Óë PSF1 Ïàͬ.
-----------------------------------------------------------------------------
PSF2: ÔËÐÐʱ »·¾³
-------------------------
IOPÄ£¿é ÔÚ Ò»¸ö PSF2 ¿ÉÒÔÁ¬½ÓÒÔϵĿâ.
°æ±¾×Ö½Ú ¿ÉÒÔ²»³ÙÓÚÁгöµÄ°æ±¾.
Name Ver. Name Ver. Name Ver.
-------------- -------------- --------------
dmacman 102 sifman 101 thmsgbx 101
excepman 101 ssbusc 101 thrdman 102
heaplib 101 stdio 103 thsemap 101
intrman 102 sysclib 103 thvpool 101
ioman 104 sysmem 101 timrman 103
loadcore 103 thbase 102 vblank 101
modload 106 thevent 101
sifcmd 101 thfpool 101
IOPÄ£¿é Ó¦µ±ÓÃÒÔÏ·½·¨ÔÚ PSF2 ÐéÄâÎļþϵͳ ÖзÃÎÊÎļþ:
1. »ñÈ¡ argv[0] ,ÔÚ×îÓÒÃæµÄ·ÖÀëÆ÷ºóÖ±½ÓÇжÏËü.
·ÖÀëÆ÷ ¶¨ÒåΪ ǰбÏß{³ýºÅ}, ºóбÏß{·´Ð±¸Ü}, »ò ðºÅ(/ \ :).
Õâ¸ö×Ö·û´®±ä³É "É豸ǰ׺".
2. ×·¼ÓÆÚ´ýµÄÎļþµÄÃû×Öµ½ É豸ǰ׺.
3. ʹÓýá¹û×Ö·û´®ÔÚ ±ê×¼µ÷Óà Àï, Ïñ open »ò LoadModule.
¾ÙÀý, Highly Experimental ¿ÉÄܵ÷Óà psf2.irx ´øÓÐ argv[0] Ïñ "hefile:/psf2.irx".
ÕâÖÖÇé¿ö, É豸ǰ׺ ÊÇ "hefile:/".
ÄãÓ¦µ±ÓÃÒÔϵĵ÷Óôò¿ª½Ð "test.file" µÄÎļþ:
fd = open("hefile:/test.file", O_RDONLY);
²»Í¬µÄ ²¥·ÅÆ÷{player} »ò »·¾³ Óò»Í¬µÄ É豸ǰ׺, ËùÒÔ²»×ÜÊÇÓà "hefile:/".
IOPÄ£¿é, ͨ³£, Ó¦µ±²»ÊÔͼºÍÈκÎÓëÒôÀÖ²¥·ÅÎ޹صÄÓ²¼þÁªÏµ.
ËüÃǰüÀ¨, µ«²»ÊÇÏÞÖÆ: SIF, CD/DVD, USB, iLink, ATA, ÊÖ±ú, ¼ÇÒ俨, ºÍÍøÂçÓ²¼þ.
ÕâЩӲ¼þÊÇÄ£ÄâµÄ×îСÏ޶ȵ«ÊDz»È·±£¿ÉÒÔ¹¤×÷.
IOPÄ£¿é Ó¦µ±Ê¹ÓÃ×îСÏ޶ȵÄÄÚ´æÊýÁ¿.
³É¹¦µÄʹÓà ÐéÄâÎļþϵͳ ±£³Ö´óÁ¿µÄÊý¾Ý, ʤÓÚÔÚÒ»¸ö IRXÊý¾Ýλ Éè·¨°üÀ¨ËüÃÇËùÓеÄÊý¾Ý.
-----------------------------------------------------------------------------
PSF2: ÐéÄâÎļþϵͳ¸ñʽ
-------------------------------
PSF2 ÐéÄâÎļþϵͳ ÊÇÒ»¸öÓÐĿ¼²ã´ÎµÄ ´øÓÐ ×î¶à36¸ö×Ö·ûµÄÎļþÃû.
ÎļþÃû ÊǶԴóСд²»Ãô¸ÐµÄ, ±ØÐëÊÇÓÉΨһµÄÒ»×é ASCII 32-126 ×Ö·û×é³ÉµÄÐòÁÐ, ´øÓгýÁËǰбÏß{³ýºÅ}, ºóбÏß{·´Ð±¸Ü}, »ò ðºÅ(/ \ :)µÄ×Ö·û.
°üÀ¨Â·¾¶ÔÚÄÚµÄ×ܳ¤¶È²»Äܳ¤ÓÚ255×Ö½Ú.
ËùÓÐÊýÁ¿×÷Ϊ little-endian ÎÞ·ûºÅ¸ñʽ´¢´æ. ËùÓÐÆ«ÒÆÁ¿ Ïà¶ÔÓÚ Ô¤Áôλ µÄ¿ªÊ¼.
ÆðʼÓÚ Æ«ÒÆÁ¿ 0 µÄÊǸùĿ¼.
Ŀ¼ÓÐÒÔϸñʽ:
- ¿ªÊ¼ 4×Ö½Ú: Ŀ¼Ïî µÄÊýÄ¿ (N){directory entry Ŀ¼Ïî/Ŀ¼µÇ¼ÇÏî ´ÊÒå²»Ã÷}
- È»ºó 48*N ×Ö½Ú: N Ŀ¼Ïî
N ¿ÉÒÔΪ Áã, ±íʾÕâ¸öĿ¼ÊǿյÄ.
Ŀ¼Ïî µÄ¸ñʽÈçÏÂ:
- ¿ªÊ¼ 36×Ö½Ú: ÎļþÃû. ±ØÐëÊÇ·ÇÁ㳤¶È, ±ØÐëÌí²¹ null (0x00) ×Ö·û. Èç¹ûËüÊÇÑϸñµÄÊÇ 36 ×Ö·û, ÔòûÓÐ null-ÖÕÖ¹.
- È»ºó 4×Ö½Ú: ÎļþÊý¾Ý »ò Ŀ¼ µÄÆ«ÒÆÁ¿ (O)
- È»ºó 4×Ö½Ú: ½âѹËõºóµÄ´óС (U)
- È»ºó 4×Ö½Ú: ¿é´óС (B)
Èç¹û U, B, O ¶¼ÊÇÁã, ÄÇôÈë¿Ú±»ÃèÊöΪ Á㳤¶È Îļþ.
Èç¹û U, B ¶¼ÊÇÁã, O ÊÇ·ÇÁã, ÄÇôÈë¿Ú±»ÃèÊöΪ ×ÓĿ¼.
·ñÔò, ÎļþÊý¾Ý ×÷ΪÁ¬ÐøµÄ zlibѹËõ()-¸ñʽ¿é ÐòÁд¢´æ.
- ¿ªÊ¼ 4*X ×Ö½Ú: ±í´óС. ÿ¸öÈë¿Ú°üº¬Ñ¹Ëõ¿éµÄ´óС.
X = (U + B - 1) / B;
- ÎļþµÄÊ£Óಿ·Ö: ѹËõ¿é µÄ½âѹËõ´óС±ØÐëµÈÓÚ B. ×îºóµÄÊý¾Ý¿éµÄ½âѹËõ´óС¿ÉÒÔСÓÚ B.
ËùÓÐÎļþºÍ×ÓĿ¼µÄÆ«ÒÆÁ¿±ØÐë´óÓÚËüÈë¿ÚĿ¼µÄÆ«ÒÆÁ¿.{Ã÷°×ÁËô???}
ÕâÊÇΪÁ˼òµ¥µÄÒ»ÖÂÐÔ¼ì²é.
-----------------------------------------------------------------------------
PSF2: MiniPSF2 ºÍ PSF2Lib
--------------------------
MiniPSF2Îļþ ÊÇÕý¹æ PSF2Îļþ, Ëü´ÓÔÚÏàͬĿ¼ÏµÄÒ»¸ö»ò¶à¸ö PSF2Îļþ ÀïÒýÓÃÊý¾Ý(ΪÁ˹²Ïí Çý¶¯´úÂë, ÒôÉ«¿â, µÈ.)
PSF2LibÎļþ Ò²ÊÇÒ»¸öÕý¹æµÄ PSF2Îļþ. ËüÃÇÄܱ»ÆäËü PSF2Lib Îļþ"µÝ¹éµÄ"ÒýÓÃÊý¾Ý.
Ç¡µ±µÄ ±êÇ©±äÁ¿ ±»½Ð×ö _lib, _lib2, _lib3, µÈ.
ÒÔÏÂÊÇÕýÈ·¼ÓÔØ MiniPSF2 µÄ·½·¨:
1. RECURSIVELY ´Ó ÿһ¸ö PSF2Îļþ ¿â±êÇ© µÄÃû×Ö¼ÓÔØ ÐéÄâÎļþϵͳ.
×î³õµÄ±êÇ©ÊÇ"_lib". ÆäºóµÄ±êÇ©ÊÇ"_libN", N>=2 (ʹÓà "_lib%d").
Í£Ö¹ÔÚµÚÒ»¸ö²»´æÔڵıêÇ©Ãû.
2. ¼ÓÔØ ÐéÄâÎļþϵͳ ´Óµ±Ç°µÄ PSF2Îļþ.
µ±¼ÓÔØÒ»¸öРÎļþϵͳ, ´øÓÐÏà³åÍ»{Ó¦¸ÃָͬÃû°É}ÎļþÃûµÄĿ¼Èë¿Ú½«±»¸²¸Ç(µ±È»Êµ¼ÊµÄ PSF2Îļþ ±¾Éí²»»á±»¸²¸Ç.)
ÔÚÈκΠ_lib* ±êÇ© Àï¸ø¶¨µÄÎļþÃûÊÇ Ïà¶Ô·¾¶, Ïà¶ÔÓÚ PSF2 Îļþ ±¾ÉíËùÔÚµÄĿ¼.
"/"ºÍ"\"¶¼±»ÈÏΪÊÇ·¾¶µÄ·ÖÀëÆ÷.{»¹ÊÇÖ±-_-"}
¾ÙÀý:
- Èç¹û C:\Something\Demo.minipsf2 °üº¬ "_lib=Hello/Library.psf2lib"
- ÄÇô¿â½«´Ó "C:\Something\Hello\Library.psf2lib" ¼ÓÔØ
ÎļþÃûÖ®ÄÚ¿ÉÒÔ°üº¬¿Õ¸ñ, µ«¿ªÊ¼ºÍ½áβ²»ÄÜÓпոñ.
µ± ÎÞÂÛÊǼì²â "Ò»¸öPSF2Îļþ »¹ÊÇ Ò»¸öMiniPSF2Îļþ" »¹ÊÇ ÐèÒª¸½¼ÓµÄÊý¾Ý ʱ, ÄãÓ¦¸ÃÓôæÔÚµÄ _lib* ±êÇ© À´¾ö¶¨, ʤÓÚÓÃÎļþÀ©Õ¹Ãû.
Èç¹û°üº¬ _lib »ò _lib2 ±êÇ©, ÄÇËü¾ÍÊÇÒ»¸ö MiniPSF2.
ÔÚ MiniPSF2 ºÍ PSF2Lib Àï, _refresh ±êÇ© µÄÐÐΪÓë MiniPSF ºÍ PSFLib ÐÐΪÏàͬ.
-----------------------------------------------------------------------------
°æ±¾×Ö½Ú 0x11: Saturn (SSF) [ÊÔÑéÖÐ]
--------------------------
³ÌÐòλ: Raw 68000 ÉùÒô³ÌÐò¾µÏñ.{RAW Ò»°ãÊÇָûÓÐÍ·µÄÊý¾Ý¸ñʽ}
Ô¤Áôλ: δʹÓÃ. ¿ÉÒÔ±»ºöÂÔ, ÒÆ³ý µÈ.
ÎļþÀ©Õ¹Ãû:
- ssf (¶ÀÁ¢µÄ³ÌÐò)
- minissf (³ÌÐò»Ø·ÅÒÀÀµ¶îÍâµÄ¿âÊý¾Ý)
- ssflib (minissf Îļþ²¥·ÅʱÐèÒªµÄ¿âÎļþ)
Ò»¸ö SSF µÄ ³ÌÐòλ ÓÉ4×Ö½ÚµÄ LSB-first µÄ ¼ÓÔØµØÖ· followed by Raw 68000 ³ÌÐòÊý¾Ý, ËüÊǸö ÌØ¶¨µØÖ·.
ËùÓгÌÐò¼ÓÔØºó, 68000 ´¦ÀíÆ÷ÖØÆô, È»ºó´Ó ÖØÆôÏòÁ¿{reset vector} ¿ªÊ¼Ö´ÐÐ.
68000 ³ÌÐò¸ºÔð³õʼ»¯ºÍʹÓà SCSP.
Ëü±ØÐë²»ÄÜÊÔͼ½Ó´¥ÈÎºÎÆäËü Saturn ´¦ÀíÆ÷{SH2,VDP1,VDP2,SCU,SMPC}.
"MiniSSF ºÍ SSFLib" Óë "MiniPSF ºÍ PSFLib" ¼ÓÔØ·½·¨Ïàͬ.
³ÌÐòλ ½âѹËõºó±ØÐëСÓÚ 524,292×Ö½Ú.
{LSB-first Ó¦¸ÃÊÇÖ¸ big-endless, ÒòΪ68k×åµÄϵͳ¶¼ÊÇbig-endless, Ò²¿ÉÄÜÊÇsmall-endless,Çë×Ô¼º²é×ÊÁÏ,´íÁ˱ð¹ÖÎÒ.}
{SCSP û²éµ½Ïà¹Ø×ÊÁÏ,Ó¦¸ÃÊÇÖ¸¸ºÔðÉùÒôµÄDSP »òÕß¾ÍÊÇÖ¸ Yamaha FH1 ÉùÒô´¦ÀíÆ÷}
{SS µÄÉùÒô´¦ÀíÆ÷ÊÇ 68EC000 ²»ÊDZê×¼ 68000, Ó¦¸ÃÊÇÖ¸×Ô´ø¿ØÖÆÆ÷µÄÄÇÖÖ}
{SS µÄÎĵµ×ÊÁÏÕæÊÇØÑ·¦Ñ½,ʲô¶¼²é²»µ½ >_<}
-----------------------------------------------------------------------------
°æ±¾×Ö½Ú 0x12: Dreamcast (DSF) [ÊÔÑéÖÐ]
-----------------------------
³ÌÐòλ: Raw ARM7 ÉùÒô³ÌÐò¾µÏñ.
Ô¤Áôλ: δʹÓÃ. ¿ÉÒÔ±»ºöÂÔ, ÒÆ³ý µÈ.
ÎļþÀ©Õ¹Ãû:
- dsf (¶ÀÁ¢µÄ³ÌÐò)
- minidsf (³ÌÐò»Ø·ÅÒÀÀµ¶îÍâµÄ¿âÊý¾Ý)
- dsflib (minidsf Îļþ²¥·ÅʱÐèÒªµÄ¿âÎļþ)
Ò»¸ö DSF ÎļþµÄ ³ÌÐòλ ÓÉ4×Ö½ÚµÄ LSB-first µÄ ¼ÓÔØµØÖ· followed by Raw ARM7 ³ÌÐòÊý¾Ý, ËüÊǸö ÌØ¶¨µØÖ·.
ËùÓгÌÐò¼ÓÔØºó, ARM7 ´¦ÀíÆ÷ÖØÆô, È»ºó´Ó µØÖ· 0 ¿ªÊ¼Ö´ÐÐ.
ARM7 ³ÌÐò¸ºÔð³õʼ»¯ºÍʹÓà AICA.
Ëü±ØÐë²»ÄÜÊÔͼ½Ó´¥ SH4 Ö÷ CPU.
"MiniDSF ºÍ DSFLib" Óë "MiniSSF ºÍ SSFLib" ¼ÓÔØ·½·¨Ïàͬ.
³ÌÐòλ ½âѹËõºó´óС±ØÐëСÓÚ 2,097,156×Ö½Ú.
{AICA ???}
-----------------------------------------------------------------------------
°æ±¾×Ö½Ú 0x21: Nintendo 64 (USF) [±£ÁôµÄ]
-------------------------------
µ± "Adam Gashlin µÄ USF ¸ñʽ" Íê³ÉºóÕâ¸ö°æ±¾×Ö½ÚÊDZ£Áô¸øËüµÄ.
-----------------------------------------------------------------------------
°æ±¾×Ö½Ú 0x41: Capcom QSound (QSF)
---------------------------------
³ÌÐòλ: ½ôËæµÄ¾µÏñ°üº¬ Z80³ÌÐò/Ñù±¾ROM ½âÃÜÃÜÔ¿
Ô¤ÁôΪ: δʹÓÃ. ¿ÉÒÔ±»ºöÂÔ, ÒÆ³ý µÈ.
ÎļþÀ©Õ¹Ãû:
- qsf (¶ÀÁ¢µÄ¾µÏñ)
- miniqsf (¾µÏñ»Ø·ÅʱÐèÒª¶îÍâµÄ¿âÊý¾Ý)
- qsflib (miniqsf Îļþ²¥·ÅʱÐèÒªµÄ¿âÎļþ)
QSF ÎļþµÄ³ÌÐòλ, Ò»µ©½âѹ°üº¬Ò»ÏµÁеÄÊý¾Ý¿é, ¼ûÏÂ:
3×Ö½Ú - ASCII Ãû×Ö±êÇ©
4×Ö½Ú - ÆðÊ¼Æ«ÒÆÁ¿ (LSB-first)
4×Ö½Ú - ³¤¶È (N) (LSB-first)
N×Ö½Ú - Êý¾Ý
È»ºóÊý¾Ý¼ÓÔØµ½ÓÉ ASCII ±êÇ©¶ÎÃèÊöµÄ¸ø¶¨µÄ ÆðÊ¼Æ«ÒÆÁ¿.
ÒÔϵIJ¿Î»ÕâÑù¶¨Òå:
"KEY" - Kabuki ½âÃÜÃÜÔ¿. Õâ¸ö²¿Î»Ó¦¸ÃÊÇ 11×Ö½Ú, ÄÚÈÝÈçÏÂ:
4×Ö½Ú - swap_key1 (MSB-first){MSBÊÇϺÃ×???}
4×Ö½Ú - swap_key2 (MSB-first)
2×Ö½Ú - addr_key (MSB-first)
1×Ö½Ú - xor_key
"Z80" - Z80 ³ÌÐò ROM.
"SMP" - QSound Ñù±¾ ROM.
KEYλ ûÓÐ »ò Á½¸ö swap_keys ¶¼ÊÇ Áã, Ôò¼Ù¶¨Ã»ÓмÓÃÜ.
Z80 ³ÌÐò ROM ±ØÐë²¥·ÅÆÚÍûµÄÇúÄ¿, ¶øÇÒ²»½ÓÊÜÈκÎÃüÁî¾Óɹ²ÏíÄÚ´æ.
(ͨ³£ÐèҪΪËü×öһЩ´ÎÒªµÄÖжϵ÷ÓÃÐÞ¸Ä).
"MiniQSF Óë QSFLib" Óë "MiniPSF ºÍ PSFLib" ¼ÓÔØ·½·¨Ïàͬ.
ûÓÐÔ¤Ïȶ¨Òå Z80 »ò SMP µÄÏÞÖÆ, µ« KEYλ ²»Äܳ¬¹ý 11×Ö½Ú.
-----------------------------------------------------------------------------
ÐÞÕýÀúÊ·
----------------
v1.5 (2004-05-15)
- ¸ÄÃûΪ "Portable Sound Format" {¿ÉÒÆÖ²ÉùÒô¸ñʽ}
- ¼ÓÈë QSF µÄÐÅÏ¢
- ±£Áô USF µÄ °æ±¾×Ö½Ú
v1.4 (2004-01-23)
- ¼ÓÈë SSF ºÍ DSF µÄÐÅÏ¢ [ʵÑéÐÔ]
- ¼ÓÈë NTSC Óë PAL ÐÅÏ¢ ºÍ Ϊ PSF1 ºÍ PSF2 ¼ÓÈë "_refresh" ±êÇ©{Ë¢ÐÂÂÊ?}
v1.3 (2003-05-31)
- PSF2 ¸ñʽ¸Ä±äºÍ¶¨¸å
- ÐÞÕý PSF1 ·ÂÕæ×¢ÊÍΪÁË·´Ó³ÔÚ×îеķÂÕæ´úÂëÉϵĸıä
{9ËØÄÇÄ£ÄâÁË}
v1.2 (2003-04-17)
- ±äÁ¿×Ö½Ú ²Ù×÷µÄÕýʽ»¯
- ÏêÊö½«À´ÔõÑù²Ù×÷Ò»¸ö PSF ±äÁ¿
- ËùÓпªÍ·´øÏ»®Ïß(_)µÄ±êÇ©±»±£Áô
- Various other clarifications
- ÏêÊö PSF2 ÐÅÏ¢, ÈÔ¾ÉÊÇ[ʵÑéÐÔ]µÄ
v1.1 (2003-03-11)
- һЩ PSF2 µÄ½¨ÒéÐÅÏ¢
ÐÞÕý (2003-01-24)
- ¼ÓÈë MiniPSF ºÍ PSFLib µÄÐÅÏ¢
Ôʼ°æ±¾ (?)
-----------------------------------------------------------------------------
ÔõôÕÒµ½ Neill Corlett
---------------------------
µçÓÊ: neill@neillcorlett.com
ÍøÕ¾: http://www.neillcorlett.com/
-----------------------------------------------------------------------------
==================================================

