tunozemichanの日記 / tunozemichan's diary

SORD社のコンピューターM68やM68MXの解析についての備忘録です。This blog is a memorandum about the analysis of SORD's computers M68 and M68MX.

PASOPIA7でテープを使ってS-OS SWORDを実行する。

PASOPIA7を入手しました。またしても、なにもソフトがありませんので、S-OS SWORDを動かします。今回はFDDがありませんので、カセットテープで遊びます。

いつものように最初にイメージを置いておきます。本体だけでなくローダーも必要です。

 

LOADER.wav - Google ドライブ

SWORD.wav - Google ドライブ

 

ソフトもいくつか置いておきます。

 

ELFES2.wav - Google ドライブ

ELFES4.wav - Google ドライブ

 

ソフトの実行に必要な開始アドレス、実行アドレスのメモを置いておきます。

 

開始アドレス実行アドレス.txt - Google ドライブ

 

動かし方ですが、最初にローダーを読み込みます。と言っても2行しかないプログラムなので2秒くらいで読み終わります。ローダーの名前は「LOADS」です。

 

ローダーを実行するとS-OS SWORDを読み込みに行きますので、SWORD.WAVをセットします。大体1分30秒くらいで読み終わり、S-OS SWORDが実行されます。

 

 

以下、本文です。

 

何もない状態からS-OS SWORDを実行する

 

PASOPIA7用S-OS SWORDはOh!MZの1987年の12月号に掲載されています。まずは該当ページをスキャンして取り込みます。Program List OCRという素晴らしいソフトがあるので、これを使ってダンプファイルを読み込みます。

 

 

出来上がったダンプファイルをDumpListEditorを使って、読み取りエラーなどを修正していきます。ダンプファイル形式は、「Oh!MZ/X(MACINTO-C)」です。

 

ここから先は何でもいいのですが、私はDUMP2MOTの後、MOT2BINでバイナリファイルにしています。無駄が多いです。

 

エミュレータを使って、バイナリデータをテープデータに変換する

バイナリファイルが出来ても、PASOPIA7に読み込ませる方法がありません。PASOPIA7のモニタから手入力で入れるなど私には不可能ですので、エミュレータの力を借ります。作業の前にTBASIC7上でLOADERを書いて、テープにセーブしておきます。

 

EmuPIA7にはDebug MainCPUと言う強力なデバッガがあります。

これを起動して、バイナリファイルをメモリに流し込みます。Oh!MZの記事ではC000hから始まるので、こんな感じで実行します。ここではバイナリファイルの名前をc000.binにしました。Nコマンドでファイル名を指定して、Lコマンドで指定番地にバイナリデータをロードします。終わったらQコマンドでデバッガを終了して、エミュレータに戻ります。

 

これでメモリに入ったので、あとはTBASIC7上で

 

BSAVE#-1,"SWORD",&HC000,&2D00

 

としてセーブすれば完了です。テープデータに変換できました。

 

PASOPIA7用S-OS SWORDは、MZT形式をサポートしています。ソフトをダウンロードして、MZT形式に変換してS-OS上でロードしましたが出来ませんでした。条件を変えてみましたがダメでした。面倒なので、S-OSと同様にデバッガからメモリにロードして、S-OS上でセーブしました。

 

ロードするときは、デフォルトのデバイスをT(MZTテープデバイス)に変更(DVTを入力)して、Lコマンドで読み込みます。この時、ロードアドレスは指定しなくても動きますが、Jコマンドは当然ながら開始アドレス必須です。

 

 

 

 

SORD M23用アプリケーションのサルベージに一部成功しました。

 

ebayで、SORD M23の本体とソフトが出品されており、落札しました。本体は問題ないのですが、ソフトの方はカビていてサルベージは無理かもと思っていました。

 

今日、意を決して、M23のドライブをDOS/Vマシンに接続して吸い出しを試みました。

結果、ワープロだけはサルベージできましたが、他のPIPSIIIやBASICはダメでした。PIPSIIIが欲しかったので非常に残念です。

 

イメージ化作業機器構成

 

以下の構成とイメージ化ソフトを用いました。

 

ドライブ:TEAC FD-50C-11-U (ディップスイッチをドライブ2に設定)

DOS/Vマシン:富士通 FMV-DESK POWER SE

BIOSの設定:Bドライブを360kB 5.25インチドライブに設定

イメージ化ソフト:ImageDisk(IMD.COM) ver 1.18

IMD.COMの設定:Cylinders80、SIdes0、Double Step None、その他デフォルト

 

IMDを使ったのは、DITTやTELEDISKでは48tpiディスクとして認識されてしまい、全80トラックを読み出せなかった為です(M23のディスクは海外で言うところの1QDディスクです)。

TELEDISKについては設定方法がよくわからなかったので、もしかしたらIMDと同じように読み込み条件を設定できるのかも知れません。

また、KryoFluxにも接続してみましたが、最初のコマンド「dtc -c2」の時点で認識されませんでした。

 

以下がイメージ化に成功した、使い方がよくわからないWordProcessorの画面です。

WordProcessorのキャプチャ画面

 

SONY SMC-777でS-OS SWORDを動かしました。

SONY SMC-777を入手しました。その動機は、SMC-777のFDDであるOA-D31Vが、SORD M23Pにも用いられており、その調査の為、そして最終的には手持ちのM23をM23Pにしたいというものでした。

とは言え、せっかく手に入れたので、なにか画面に文字でも出したいとも思っていました。しかし、本体以外何もついていないものを落札したので、なにもありません。

 

そこで、S-OS SWORDです。SMC-777版はOh!MZの1986年7月号に掲載されています。

以下に詳細を説明しますが、すべてわかっている人の為に先にディスクイメージを以下に置いておきます。ソフトやゲームを適当に入れてあります。

 

SMC-777用S-OS SWORDイメージ

S_OS_SWORD_1.d88 - Google ドライブ

 

なんとかディスクイメージが出来上がりましたが、アクセスする術がありません。

PC-6601の時にl3diskexにS-OS SWORDを選択できることを思い出しました。そこで、l3diskexのdataフォルダ内にあるdisk_types.xmlに1行加えました。

 

l3diskexのDiskBasicTypesをいじる

 

具体的には、下記、1DD-70-16-1のDiskBasicTypesにX1HU-1DDを加えるだけです。

    <DiskType name="1DD-70-16-1">
        <SidesPerDisk>1</SidesPerDisk>
        <TracksPerSide>70</TracksPerSide>
        <SectorsPerTrack>16</SectorsPerTrack>
        <SectorSize>256</SectorSize>
        <Density>0x30</Density>
        <Interleave>1</Interleave>
        <DiskBasicTypes>
            <Type p="major">SMC-1DD</Type>
            <Type>X1HU-1DD</Type>
        </DiskBasicTypes>
        <DensityName>1DD</DensityName>
        <DensityName lang="ja">1DD</DensityName>
        <Description>[SMC-777]</Description>
        <Description lang="ja">[SMC-777]</Description>
    </DiskType>

 

これで、SMC-777用のS-OS SWORDのFDイメージにアクセスできるようになりました。

 

ファイルをイメージディスクに追加する

 

あとは、THE SENTINELやその他のサイトにあるMZT形式のファイルをDLして遊べます。THE SENTINELに書いてあるのですが、ここに置かれているOBJファイルの先頭18バイトは、S-OS SWORD上で実行する際には不要というかあると動かないので(ロードアドレスと実行アドレスが書いてあるので重要な情報ではある)、バイナリエディタなどでカットする必要があります。下記の例では、SAMEGAMEはロードアドレスと実行アドレスが3000hであることが分かります。これを記録して、その後、カットします。

反転している部分をカットする。

 

 

l3diskexでファイルを追加すると、以下のようなウインドウが開きます。

ロードアドレスと実行アドレスを入力する。

ファイルの種類をBinにして、ロードアドレスと実行アドレスを先ほどカットした18バイトに書かれていた情報に一致するように入力します。

ディスクイメージをセーブして、SMC-777のエミュレータで確認します。

 

S-OS SWORDでは、ファイルの一覧は、「D」コマンドです。

SAMEGAMEがある。

SAMEGAMEをメモリにロードします。コマンドは「L」です。「:」の後ろはロードアドレスです。

実行アドレスである3000hにジャンプします。コマンドは「J」です。

SAMEGAMEが起動しました!

 

 

NEC PC-6601でFlashFloppyを使うときの設定

NECPC-6601をだいぶ前に入手しました。このマシンは、少なくとも1枚は専用のディスクがないと何もできないという罠があります。内臓のBASICすら動かないというスパルタ仕様です。

しかし、I/Oに載ったCP/MやSWORD-OS(

http://000.la.coocan.jp/p6/sword/index.html)を移植して下さった方がいて、現在では何もないベアな状態で入手しても遊べます。

DITTなどが動く環境があり、かつ1Dか2D、2DDのディスクを持っていれば、提供されているD88形式ファイルをディスクに書いて実行することができます。

私が入手したPC-6601は不動品であちこち壊れていましたが、致命的なのがディスクの書き込みヘッドが壊れていたことです。

そこで、FDDエミュレータの出番ですが、当初HxCで動かしていましたが、FlashFloppyの方が無料なのでこちらに乗り換えました。

 

PC-6601のディスクのレイアウトは、片面、倍密度、40トラック、16セクタ/トラック、256バイト/セクタの総バイト数163840です。FlashFloppyのIMG.CFGを以下のように書きました。

[::163840]
cyls = 40
heads = 1
tracks = 0-39
secs=16
bps=256
interleave=1
mode=mfm
rpm=300
id=1
 
また、FF.CFGは、インターフェースをJapanease PCにするだけです。それ以外はデフォルトで動きます。
 
 

QC-10でFlashfloppyを使うときの設定

QC-10を入手しました。色々遊ぶためにはFDDエミュレータにしておいて損はありません。

今回、FlashFloppyを使ったのは、HxCのhfe形式では実機でエラーがでる為です。hfe形式への変換の際に、細かく設定できる方法があるのかもしれませんが、少なくともHxCFloppyEmulatorを使って、単純にExportボタンを押しただけでは生成したhfe形式ファイルは実機ではディスクエラーになります。

Flashfloppyの設定

QC-10のFDDEPSONのSD-321です。ピンアサインが見つかりませんでしたが、同じドライブしようした外付けFDDであるTF20のテクニカルマニュアルにピンアサインが載っていました。知りたいのは以下の二つです。

 

pin 2 --> N.C.

pin 34 --> \RDY

 

以上から、典型的なJapanease PCであることが分かります。

FlashFloppyのFF.CFGはこの情報があれば書けます。

interface = jppc

それ以外はデフォルトで問題ありません。

 

もっともハマったポイントは、GOTEKのジャンパピンの設定です。

JCとS0をジャンパします。これ重要です。

 

QC-10の多くのディスク、例えばCP/Mなどは最初の2トラック(0,1)の両サイドが256バイト/セクタで16セクタ/トラックであり、それ以後は512バイト/セクタ、10セクタ/トラックになっています。よってディスク1枚は、2*2*256*16 + 2*2*512*10 = 405504バイトになります。また、Skewは4になっています。

従って、FlashfloppyのIMG.CFGは以下のようになります。

 

[::405504]
cyls = 40
heads = 2
tracks = 0-1
  secs=16
  bps=256
  interleave=4
tracks = 2-39
  secs=10
  bps=512
  interleave=4

 

最初の1行はなにかというと識別子です。Flashfloppyでは名前を付けない場合、ディスクの総バイト数で識別します。

 

 

 

 

Porting CP/M-80 to SORD M68 (Part 3 : concluding part)

The final step is to write the disk write routine.

In the CP/M-80 with blocking/deblocking code, the disk write routine is a "writehst" routine.

Basically, the same code as the disk read routine can be used. The only difference is the command number.

The biggest problem is how to write commands to the DMA? Without the documentation ("X1 on the exam"), it would have been impossible to implement on our own. Below is the DMA command chain used for the SORD M68 disk write routine.

 

DMA_WRITE_COMMANDS:
    DB 16H
    DB 0C3H,0C3H,0C3H,0C3H,0C3H,0C3H
    DB 83H
    DB 79H
    DB 022H,0F6H ; host buffer address
    DB 00H,0FFH ; byte number of transfer
    DB 14H,28H,8DH
    DB 0CBH,00H ; FDC data register
    DB 9AH
    DB 0CFH,05H
    DB 0CFH,87H
 

 

It will not work correctly without the two commands (0CFH,05H) on the second line from the bottom. This section is firmly in the "X1 on the exam". Also, I found "Z80DMA Command Code Generator Z80DMA Command Generator 2019.6.19" very useful on the net. The trick to using this service is to "click the buttons that are marked by default properly". In my case, otherwise I did not get 0CFH,05H. This is a point to get stuck on.

Translated with www.DeepL.com/Translator (free version)

 

In addition, the DMA command chain for reading floppy disks is noted.

DMA_COMMANDS:
    DB 15H
    DB 0C3H,0C3H,0C3H,0C3H,0C3H,0C3H
    DB 0BBH,01H,0BFH
    DB 6DH
    DB 0CBH,0FFH,00H,02CH,010H,08DH
    DB 022H,0F6H ; host buffer address
    DB 9AH
    DB 0CFH,87H
 

 

This completes the porting of the CP/M-80 to the SORD M68. Thank you for reading.

 

SORD M68にCP/M80を移植する(その3:完結)

最後の仕上げに、ディスク書き込みルーチンを書いて、移植完了です。

ブロッキング/デブロッキングコードを取り込んだCP/M-80において、ディスク書き込みルーチンは、writehstルーチンです。

基本的に、ディスク読み込みルーチンと同じコードで問題ありません。コマンド番号が違うだけです。

最も問題になるのはDMAへのコマンドをどう書くか?です。これは「試験に出るX1」がなければ無理でした。以下に、SORD M68用ディスク書き込みルーチンに使ったDMAコマンドチェーンを記します。

DMA_WRITE_COMMANDS:
    DB 16H
    DB 0C3H,0C3H,0C3H,0C3H,0C3H,0C3H
    DB 83H
    DB 79H
    DB 022H,0F6H ; host buffer address
    DB 00H,0FFH ; byte number of transfer
    DB 14H,28H,8DH
    DB 0CBH,00H ; FDC data register
    DB 9AH
    DB 0CFH,05H
    DB 0CFH,87H
 

 

下から2行目のコマンド2つ(0CFH,05H)がないと正しく動きません。ここでハマりましたが、「試験に出るX1」には載っています。また、ネットでは「Z80DMA コマンドコード生成 Z80DMA Command Generator 2019.6.19」がとても役に立ちました。使いこなすコツは、「デフォルトでマークされているボタンも、ちゃんとクリックする」ことです。そうでないと、0CFH,05Hが出ませんでした。これはハマりポイントです。

 

おまけに読み込み時のDMAコマンドチェーンを記します。0BBH, 01H, 0BFHはよくわかりません。BOOT ROMではこう書いてあるのでそのまま踏襲しています。なくても動きそうですが...。

DMA_COMMANDS:
    DB 15H
    DB 0C3H,0C3H,0C3H,0C3H,0C3H,0C3H
    DB 0BBH,01H,0BFH
    DB 6DH
    DB 0CBH,0FFH,00H,02CH,010H,08DH
    DB 022H,0F6H ; host buffer address
    DB 9AH
    DB 0CFH,87H
 

 

これで、SORD M68へのCP/M-80の移植は完了です。読んでいただき、ありがとうございました。