ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その3)CP/M起動 [ポケコン]
ポケコン(PC-G850V、以降 G850 と記す)用に開発した SRAMとシリアルEEPROMを実装した EborsyEEP 基板で EEPROM の ID 読み取りが出来たことを書いた前回記事から少しい時間が経ってしまいましたが、今回は CP/M の起動について書いてみたいと思います。
今回使用しているシリアル EEPROM(W25Q32JV) は 4M バイトのサイズで最小のイレーズ単位が 4KB なので CP/M のブロッキング/デブロッキング機能を使用する場合、BIOS で使用するバッファのサイズも 4KB にする必要があります(ドライブ構成は 2MB x 2 とした)。
EborsyEEP で実装している SRAM サイズは Eborsy と同様で、「ポケコン(G850)用拡張基板(その5)確認事項4」の記事で書いているように最後の 16KB(0xc000~0xffff)は ROM なので CP/M のメモリサイズが小さくならざるを得ません。
そこでCP/M のメモリサイズをなるべく大きくするために上記のバッファを外部メモリ上にある BIOS から分離して内部メモリに持つことにしました。この実装方法のメリットとデメリットは次のとおりです。
デメリットの2個目についてはタイマー割込みをフックして元々のタイマ処理をコール後に後処理をするのですが、元々のタイマー割込み処理の最後で割込み許可状態になることから割込みがリエントラントに入ることがあり、苦労しました。最近になって漸く安定して動くようになりました。
また、GAL 用の PLCC ソケットがプリント基板と接触不良で不安定になることがあったので、下の写真のように GAL を直付けした基板も作成しました。
因みにボトム面はこんな感じです。
CP/M 起動時の様子が下の写真で CP/M のメモリサイズは 47K になり、以前作成した Eborsy の時の 46KB より大きくできました。
また、今回は追加機能として stat コマンドでコンソール接続先をシリアル通信側に切り替えられるようにしました。G850 の標準のシリアル通信機能の速度は最高でも 9600bps で遅いので、ソフトウェアでシリアル通信機能を実現することで 19200 bps に対応しました。割込みを使っていないのでキーセンスに対応できず G850 側のキーを押すことでシリアル入力状態になるようにして対応しています。
下の写真はコンソール入出力を G850 の LCD &キーボードからシリアル通信へ切り替えた際の画面です。
切替え後は PC 側から操作できるようになります。今回の実装では PUN: と RDR: のデバイスもソフトシリアルで実装しました。
コンソールデバイスをパソコンとシリアル接続することでパソコンから普通に CP/M が使えるようになったので、LCD での縮小文字表示画面側へのエスケープシーケンス機能の実装を見合わせることにしました(80x25の仮想画面での表示位置の制御等、従来のエスケープシーケンスではカバーできない部分があるということも未実装とする一因です)。
今回実装した 47K CP/M のメモリマップは下表のとおりで、8000H - BFFFH の 0,2,3 のバンクは未使用のままです。
Twitter に投稿した動画付きメッセージを貼っておきます。録画途中で電池切れマークが点灯して焦ったw
★追記 2023/08/06
CP/M 版 MBASIC で asciiart.bas を実行した結果を貼っておきます。Z80 の 20MHz 環境で約1分なので G850V(8MHz)ではほぼクロック相当の時間でした。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
今回使用しているシリアル EEPROM(W25Q32JV) は 4M バイトのサイズで最小のイレーズ単位が 4KB なので CP/M のブロッキング/デブロッキング機能を使用する場合、BIOS で使用するバッファのサイズも 4KB にする必要があります(ドライブ構成は 2MB x 2 とした)。
EborsyEEP で実装している SRAM サイズは Eborsy と同様で、「ポケコン(G850)用拡張基板(その5)確認事項4」の記事で書いているように最後の 16KB(0xc000~0xffff)は ROM なので CP/M のメモリサイズが小さくならざるを得ません。
そこでCP/M のメモリサイズをなるべく大きくするために上記のバッファを外部メモリ上にある BIOS から分離して内部メモリに持つことにしました。この実装方法のメリットとデメリットは次のとおりです。
■メリット |
---|
・バッファ分 BIOS を小さくできるので CP/M のメモリサイズを大きくできる |
■デメリット |
・バッファアクセス時にバンク切替えとコピー処理が必要なので処理時間が余計に掛かる |
・メモリ切替え中も割込み処理をハンドルする必要があり、実装の難易度が高くなる |
デメリットの2個目についてはタイマー割込みをフックして元々のタイマ処理をコール後に後処理をするのですが、元々のタイマー割込み処理の最後で割込み許可状態になることから割込みがリエントラントに入ることがあり、苦労しました。最近になって漸く安定して動くようになりました。
また、GAL 用の PLCC ソケットがプリント基板と接触不良で不安定になることがあったので、下の写真のように GAL を直付けした基板も作成しました。
EborsyEEP(トップ面) |
|
因みにボトム面はこんな感じです。
EborsyEEP(ボトム面) |
|
CP/M 起動時の様子が下の写真で CP/M のメモリサイズは 47K になり、以前作成した Eborsy の時の 46KB より大きくできました。
EborsyEEP での CP/M 起動直後の様子 |
|
また、今回は追加機能として stat コマンドでコンソール接続先をシリアル通信側に切り替えられるようにしました。G850 の標準のシリアル通信機能の速度は最高でも 9600bps で遅いので、ソフトウェアでシリアル通信機能を実現することで 19200 bps に対応しました。割込みを使っていないのでキーセンスに対応できず G850 側のキーを押すことでシリアル入力状態になるようにして対応しています。
下の写真はコンソール入出力を G850 の LCD &キーボードからシリアル通信へ切り替えた際の画面です。
コンソール入出力をシリアル通信への切替え |
|
切替え後は PC 側から操作できるようになります。今回の実装では PUN: と RDR: のデバイスもソフトシリアルで実装しました。
パソコン側の操作画面 |
|
コンソールデバイスをパソコンとシリアル接続することでパソコンから普通に CP/M が使えるようになったので、LCD での縮小文字表示画面側へのエスケープシーケンス機能の実装を見合わせることにしました(80x25の仮想画面での表示位置の制御等、従来のエスケープシーケンスではカバーできない部分があるということも未実装とする一因です)。
今回実装した 47K CP/M のメモリマップは下表のとおりで、8000H - BFFFH の 0,2,3 のバンクは未使用のままです。
address | Internal Memory | external memory |
---|---|---|
0000H - 7FFFH | wrapping modules for system call | TPA of CP/M |
8000H - 9BFFH | G850's ROM | same as above (bank1) |
A000H - B5FFH | same as above | CCP & BDOS of CP/M (bank1) |
B600H - BD7FH | same as above | BIOS for PC-G850V (bank1) |
BD80H - BDFFH | same as above | stack area |
BE00H - BFFFH | same as above | bridging module |
C000H - FFFFH | G850's system ROM (bank0-21) | ---- |
Twitter に投稿した動画付きメッセージを貼っておきます。録画途中で電池切れマークが点灯して焦ったw
少し時間が空いてしまいましたが今回開発したポケコン(G850V)用のserial EEPROM&SRAM基板で漸くCP/Mが安定して動作しました^^
— skyriver (@wcinp) July 21, 2023
19200bpsのシリアル接続でパソコンから操作も可能
BadAppleもSDカード時よりも若干速い30fpsで再生できましたhttps://t.co/gpdoVS2ASx#G850 #EborsyEEP #CPM #ポケコン pic.twitter.com/pKgvim0wu7
★追記 2023/08/06
CP/M 版 MBASIC で asciiart.bas を実行した結果を貼っておきます。Z80 の 20MHz 環境で約1分なので G850V(8MHz)ではほぼクロック相当の時間でした。
MBASIC での asciiart.bas 実行結果 |
|
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
コメント 0