PIONEER PX-7 BIOSの吸い出し

きっかけは"ePX-7" - PIONEER PX-7 emulator for Win32です。

http://homepage3.nifty.com/takeda-toshiya/msx/

ダウンロードしてドキュメントを読むと必要なBIOSは以下になるようです。

--- Internal ROM image

	BASIC.ROM	$0000-$7FFF of SLOT 0
	EXT.ROM	$4000-$5FFF of SLOT 2

ここらへんを参考にして、MAKEROM.BASを実行してみます。

http://ponrevival.blogspot.jp/2008/05/msxrom.html

PX-7に必要なBASIC.ROMはMSX.ROMをリネームするとしても、P-BASICに必要なEXT.ROMがDUMPできません。

	MSX.ROM	$0000-$7FFF of SLOT 0
	DISK.ROM	$4000-$7FFF of SLOT 3

MAKEROM.BASを改造してEXTROM.BASを作成してみました。

100 DEFINT A-Z:AD=&HD000:SZ=&HD05A:RB=&HD05F
110 DEFUSR=AD:DEFUSR1=&HD030:DEFUSR2=&HD0D0:DEFUSR3=&HD100:DEFUSR4=&HD130
120 READ D$:IF D$<>"*" THEN POKE AD,VAL("&h"+D$):AD=AD+1:GOTO 120
130 FL$(0)="BASIC   ROM":FL$(1)="MSX2    ROM":FL$(2)="MSX2P   ROM"
140 FL$(3)="MSX2EXT ROM":FL$(4)="MSX2PEXTROM":POKE SZ,&H40:POKE RB,0
240 '
250 PRINT"System ROMs":PRINT"Main ROM(1)..";:A=USR(&H80)
260 V=PEEK(&H902D):IF V>2 THEN BEEP:GOTO 670 ELSE PRINT USR1(FL$(V))
270 PRINT"Main ROM(2)..";:A=USR(&H4080):POKE RB,1:PRINT USR1(FL$(V))
280 POKE RB,0:IF V=0 THEN 300
290 PRINT"Sub ROM..";:A=USR(PEEK(&HFAF8)):PRINT USR1(FL$(V+2))
300 PRINT"Disk ROM..";:A=USR(&H4000+PEEK(&HFFA8))
310 PRINT USR1("DISK    ROM"):A=USR2(0)
430 '
440 A=USR(&H4002)
460 F$="EXT     ROM"
480 PRINT"EXT ROM..";:POKE RB,0:A$=USR1(F$)
500 PRINT F$
710 '
720 PRINT"complete!":END
730 '
740 DATA fe,02,c0,23,23,f3,7e,23,66,2e,00,01,00,40,11,00

(省略)

実機ではPX-7+HBD-F1で動作確認しています。

f:id:tanam:20141007235138p:image:w360

なおEXT.ROMは16Kではなく8Kです。

>cut EXT.ROM 0 2000
start=00000000,size=2000
crc32=a5d0c0b9,addr=0000-1fff
>copy 0 EXT.ROM

>cut BASIC.ROM 0 8000
start=00000000,size=8000
crc32=ee229390,addr=0000-7fff

f:id:tanam:20141013001734p:image:w360

OpenMSXによるとSHA1は正しいようです。

<?xml version="1.0" ?>
<!DOCTYPE msxconfig SYSTEM 'msxconfig2.dtd'>
<msxconfig>

  <info>
    <manufacturer>Pioneer</manufacturer>
    <code>PX-7</code>
    <release_year>1984?</release_year>
    <description/>
    <type>MSX</type>
  </info>

  <CassettePort/>

  <devices>

    <PPI id="ppi">
      <key_ghosting>true</key_ghosting>
      <sound>
        <volume>16000</volume>
      </sound>
      <io base="0xA8" num="4"/>
      <keyboard_type>jp_ansi</keyboard_type>
      <has_keypad>false</has_keypad>
      <key_ghosting_sgc_protected>true</key_ghosting_sgc_protected>
      <code_kana_locks>true</code_kana_locks>
      <graph_locks>false</graph_locks>
      
      
      
      
    </PPI>

    <VDP id="VDP">
      <version>TMS99X8A</version>
      <io base="0x98" num="2"/>
    </VDP>

    <PSG id="PSG">
      
      <sound>
        <volume>21000</volume>
        <balance channel="1">0</balance>
        <balance channel="2">-100</balance>
        <balance channel="3">100</balance>
      </sound>
      <io base="0xA0" num="2" type="O"/>
      <io base="0xA2" num="1" type="I"/>
    </PSG>

    <PrinterPort id="Printer Port">
      <io base="0x90" num="2"/>
    </PrinterPort>

    <primary slot="0">
      <ROM id="MSX BIOS with BASIC ROM">
        <rom>
          <filename>roms/px-7_basic-bios1.rom</filename>
          <sha1>302afb5d8be26c758309ca3df611ae69cced2821</sha1>
        </rom>
        <mem base="0x0000" size="0x8000"/>
      </ROM>
      <RAM id="Main RAM">
        <mem base="0x8000" size="0x8000"/>
      </RAM>
    </primary>

    <primary external="true" slot="1"/>

    <primary slot="2">
      <PioneerLDControl id="PBASIC">
        <rom>
          <filename>roms/px-7_pbasic.rom</filename>
          <sha1>665d805f96616e1037f1823050657b7849899283</sha1>
        </rom>
        <mem base="0x4000" size="0x4000"/>
	<device idref="ppi"/>
	<device idref="VDP"/>
      </PioneerLDControl>
    </primary>

    <primary external="true" slot="3"/>

  </devices>

</msxconfig>

(注)このページは個人的に吸い出したROMのCRCを表示するだけです。