ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その4)ランチャーの製作 [ポケコン]
前回の記事で今回開発した PC-G850V(以降 G850 と記す)用の増設ボード EborsyEEP(RAM & シリアル EEPROM を実装)使って CP/M が安定して動作するようになったことを書きました。今回は CP/M 環境下で既存の G850 用のアプリケーションを起動できるランチャーを制作したので概要を記載したいと思います。
CP/M が動作している状態で既存のアプリケーションを起動するために G850 内蔵メモリ上で動作していた CP/M loader をメモリの後方に移動し、アプリケーション用のメモリを確保するようにしました。
下図が CP/M 起動時のメモリ配置の概要図になります。
起動時の処理の概要は
loader の末尾には backup から loader 自身をリストアする restore モジュールを配置しました。理由はゲーム終了時に リストアすることで、restore モジュールの直前までゲームで使用可能にしようと考えたためです。しかし、loader がある 5600H まで使えれば殆どのゲームが動作可能なようなので resotore 処理は実装までして、現状はゲーム終了時に動かしてはいません(暴走時に restore を起動することで復活できる場合があります)。
既存のアプリケーションは CP/M の LOAD コマンドでバイナリ変換した後、CP/M のコマンドと区別するために拡張子を ".850" にしています。このファイルを今回作成した RUN コマンドにより CP/M 上で起動することが可能になります。
また、今回のランチャーは BASIC プログラムの起動には対応していません。
G850 で動作する CP/M 上で既存プログラムのランチャーが動くことで、ゲーム等のアプリケーションを瞬時に起動できるようになり、利便性がかなり向上しました^^
Twitter(X?)に投稿した動画付きメッセージを貼っておきます。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
CP/M が動作している状態で既存のアプリケーションを起動するために G850 内蔵メモリ上で動作していた CP/M loader をメモリの後方に移動し、アプリケーション用のメモリを確保するようにしました。
下図が CP/M 起動時のメモリ配置の概要図になります。
CP/M 起動時のメモリ配置 |
|
起動時の処理の概要は
- loader 自身を 5600H 以降にコピーする。
- 未使用だった BAMK0 に loader をバックアップする。
- BE00H にブリッジ処理をコピーする。
- loader 内の IPL により EEPROM から CCP/BDOS/BIOS を読込み、BANK1 に展開する。
- CCP へジャンプし、CP/M を起動する。
loader の末尾には backup から loader 自身をリストアする restore モジュールを配置しました。理由はゲーム終了時に リストアすることで、restore モジュールの直前までゲームで使用可能にしようと考えたためです。しかし、loader がある 5600H まで使えれば殆どのゲームが動作可能なようなので resotore 処理は実装までして、現状はゲーム終了時に動かしてはいません(暴走時に restore を起動することで復活できる場合があります)。
既存のアプリケーションは CP/M の LOAD コマンドでバイナリ変換した後、CP/M のコマンドと区別するために拡張子を ".850" にしています。このファイルを今回作成した RUN コマンドにより CP/M 上で起動することが可能になります。
また、今回のランチャーは BASIC プログラムの起動には対応していません。
G850 で動作する CP/M 上で既存プログラムのランチャーが動くことで、ゲーム等のアプリケーションを瞬時に起動できるようになり、利便性がかなり向上しました^^
Twitter(X?)に投稿した動画付きメッセージを貼っておきます。
ポケコン(PC-G850V)用に開発したシリアルEEPROM&SRAMボードを使いCP/Mが安定して動いたので、CP/M上から既存のプログラムを起動できるランチャーを作ってみました
— skyriver (@wcinp) July 27, 2023
使ってみると思いの外、便利ですね^^https://t.co/dnUIvUik9X#G850 #EborsyEEP #CPM #ポケコン pic.twitter.com/xnrssMFlYk
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
ポケコン(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] [ 前へ ] 連載記事一覧 [ 次へ ]
ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その2) [ポケコン]
前回の記事で書いたように今回設計したプリント基板を JLCPCB さんに製造依頼していましたが、無事届きました。
プリント基板のアップ写真が下の写真です。緑色のレジストだと土日も製造工程が進むようなのでレジストを緑色にしました(製造日数の表示が緑レジストでは2日間で青レジストだと4日間だった)
基板周辺に若干ザラツキがあったので少しヤスったら滑らかな手触りになりました。
部品実装後の状態が下の写真になります。動作確認前なので GAL はソケットを使って実装しています。最初はうまく動かず、左上の3つのショットキーバリアダイオードを半田付けし直した関係で少し汚いですね^^;
尚、GAL 用の PLCC ソケットは半田ごてを使って半田付けしました。
下の写真がボトム面です。左下の EEP の LED が少し傾いていますね^^;
ICパッケージの刻印が読めるように撮りたかったのですが、読める状態では基板面が反射してしまったので残念ながらこの写真では刻印は読めません。
一発で動作とは行きませんでしたが、EEPROM とのやり取りができる状態になりました。下図は EEPROM の ID を読んだ際のロジアナ波形です。ビットレートは図から判るように送信/受信でそれぞれ 308Kbps/236Kbps 程です。
ロジアナのソフトウェアをバージョンアップしたので従来より見た目がかっこよくなりました。従来の方が良かった機能もあるので従来のソフトウェアも使える状態にしています。
次は CP/M の移植ですが、今回使用している EEPROM(W25Q32JV)は最小の消去単位(=書込み単位)は 4KB なのでこのバッファを BIOS 領域に配置すると CP/M のサイズが小さくなる(PC-G850は C000H-FFFFH を RAM 化できないのでただでさえ CP/M のサイズが小さい)のでバンク切替えしながらどのように効率よくハンドリングすればいいのか少し考えてみます。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
プリント基板のアップ写真が下の写真です。緑色のレジストだと土日も製造工程が進むようなのでレジストを緑色にしました(製造日数の表示が緑レジストでは2日間で青レジストだと4日間だった)
基板周辺に若干ザラツキがあったので少しヤスったら滑らかな手触りになりました。
EborsyEEP のプリント基板 |
|
部品実装後の状態が下の写真になります。動作確認前なので GAL はソケットを使って実装しています。最初はうまく動かず、左上の3つのショットキーバリアダイオードを半田付けし直した関係で少し汚いですね^^;
尚、GAL 用の PLCC ソケットは半田ごてを使って半田付けしました。
EborsyEEP のプリント基板(部品実装後のトップ面) |
|
下の写真がボトム面です。左下の EEP の LED が少し傾いていますね^^;
ICパッケージの刻印が読めるように撮りたかったのですが、読める状態では基板面が反射してしまったので残念ながらこの写真では刻印は読めません。
EborsyEEP のプリント基板(部品実装後のボトム面) |
|
一発で動作とは行きませんでしたが、EEPROM とのやり取りができる状態になりました。下図は EEPROM の ID を読んだ際のロジアナ波形です。ビットレートは図から判るように送信/受信でそれぞれ 308Kbps/236Kbps 程です。
ロジアナのソフトウェアをバージョンアップしたので従来より見た目がかっこよくなりました。従来の方が良かった機能もあるので従来のソフトウェアも使える状態にしています。
EEPROM の ID 読み取り時のロジアナ波形例 |
|
次は CP/M の移植ですが、今回使用している EEPROM(W25Q32JV)は最小の消去単位(=書込み単位)は 4KB なのでこのバッファを BIOS 領域に配置すると CP/M のサイズが小さくなる(PC-G850は C000H-FFFFH を RAM 化できないのでただでさえ CP/M のサイズが小さい)のでバンク切替えしながらどのように効率よくハンドリングすればいいのか少し考えてみます。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M [ポケコン]
「シリアルEEPROMでCP/M」の記事で書いたように 32MBit の EEPROM(W25Q32JVSIQ)で CP/M を起動できたので「ポケコン(G850)用拡張基板(その7)仮想画面でCP/M」の記事で書いた CP/M 起動のために使用しているメモリと SD カードを実装したシステムバス用拡張基板(Eborsy)を EEPROM 対応し、EborsyEEP を作ることにしました。
これにより SD カードの使用制限から解放され、また相性問題も無くなるというメリットがあります。
回路図を下図に示します。
★追記 2023/06/10 {
間違い発見!3つのショットキーバリアダイオードの方向が逆ですね^^;
⇒パターン図は問題無かったので回路図のみ修正しました
}
グランドベタ化前のパターン図が下図になります。今回は最初から動作確認用の端子を設けない小型設計にしていますが、SPI 信号だけはロジアナで解析できるように配慮しました。緑色の部分はグランドです。
下図がグランドベタ化後のトップ面のパターン図です。 GAL は PLCC パッケージにしました。トラックが結構込み合っていますね。いつものことではありますがオートルータではエラーが取れなかったのでオールマニュアルで設計しています。AIで奇麗に自動ルーティングできるようになって欲しいものですね。
下図がボトム面です。ボトム面には SRAM と シリアル EEPROM 等を配置しました。
下図が3D表示したトップ面です。朱色の立方体は G850 のシステムバス部へ接続するコネクタです。いつの間にか aitendo さんでの販売が復活していましたが、「ポケコン(G850)用拡張基板(その10)コンパクト化(その2)」の記事で書いたように以前のものとピンの曲げ方向が逆になっているので注意が必要です(このため EborsyCompact のパターンを再利用できなかったorz)。
PLCC の GAL 周辺には部品を実装しないことでソケットも付けられるように考慮しました。
下図がボトム面の3D表示です。ICの1番ピンの位置が揃っていませんが、配線がし易いように配置したためです。
JLCPCB さんへ製造依頼しました。最近、また円安なので少し心配でしたが PayPal の換金レートは145.55円/$でした(今年の1月は135.70だった)
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
これにより SD カードの使用制限から解放され、また相性問題も無くなるというメリットがあります。
回路図を下図に示します。
EborsyEEP の回路図 |
|
間違い発見!3つのショットキーバリアダイオードの方向が逆ですね^^;
⇒パターン図は問題無かったので回路図のみ修正しました
}
グランドベタ化前のパターン図が下図になります。今回は最初から動作確認用の端子を設けない小型設計にしていますが、SPI 信号だけはロジアナで解析できるように配慮しました。緑色の部分はグランドです。
EborsyEEP のパターン図(グランドベタ化前) |
|
下図がグランドベタ化後のトップ面のパターン図です。 GAL は PLCC パッケージにしました。トラックが結構込み合っていますね。いつものことではありますがオートルータではエラーが取れなかったのでオールマニュアルで設計しています。AIで奇麗に自動ルーティングできるようになって欲しいものですね。
EborsyEEP のパターン図(トップ面) |
|
下図がボトム面です。ボトム面には SRAM と シリアル EEPROM 等を配置しました。
EborsyEEP のパターン図(ボトム面) |
|
下図が3D表示したトップ面です。朱色の立方体は G850 のシステムバス部へ接続するコネクタです。いつの間にか aitendo さんでの販売が復活していましたが、「ポケコン(G850)用拡張基板(その10)コンパクト化(その2)」の記事で書いたように以前のものとピンの曲げ方向が逆になっているので注意が必要です(このため EborsyCompact のパターンを再利用できなかったorz)。
PLCC の GAL 周辺には部品を実装しないことでソケットも付けられるように考慮しました。
EborsyEEP の3D表示(トップ面) |
|
下図がボトム面の3D表示です。ICの1番ピンの位置が揃っていませんが、配線がし易いように配置したためです。
EborsyEEP の3D表示(ボトム面) |
|
JLCPCB さんへ製造依頼しました。最近、また円安なので少し心配でしたが PayPal の換金レートは145.55円/$でした(今年の1月は135.70だった)
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
ポケコン(G850)用拡張基板(その10)コンパクト化(その2) [ポケコン]
前回の記事ではポケコン (PC-G850V)用のシステムバスに接続するメモリ&TFカードを実装したメモリ拡張ボード(Eborsy)のコンパクト化(Eborsy Compact)のパターン設計について書きましたが、製造依頼した基板が届いたので部品を実装してみました。
PC-G850V のシステムバス端子用のコネクタは aitendo さんで販売していて品切れ状態が続いていましたが、また復活したようなので少し前に購入しました。
しかし基板に実装しようとするとうまく入りません。開発用 Eborsy を作ったころに購入したコネクタも残っていたので並べてみたものが下の写真です。左側が古いものです。パッと見は同じですがよく見てみると千鳥状に曲げてあるピンの曲げ方が逆になっていますorz
尚、写真では側面の溝の幅も違いますがこれはZ軸に180°回転すると同じ溝幅になります(成形の型は同じものの様です)。今回は取り合えず1個しか残っていない古い方のコネクタを使用しました。
部品実装後、最初は動かなかったのですが、基板を調べてみると SPI インターフェースの部分で使っているショットキーバリアダイオードのシルクが逆なため、実装も逆になっていました。回路を確認したところ問題ありませんでしたが、パターン設計画面でショットキーのデータをアップデートしたところ正常になりました。この部品のフットプリントはネットからダウンロードしたもので編集はしていないはずですがどうして逆になってしまったのか謎です。
部品実装後の Eborsy Compact と開発用の Eborsy を並べて撮った写真も貼っておきます。今回作成した Compact の方は名前通りかなりコンパクトになっていますね^^
下の写真はトップ面の写真です。最初は上手く動かず半田ごてで追半田したので見た目があまり綺麗じゃないですね ^^;
下の写真がボトム面です。GAL は PLCC パッケージのものを直付けしています。
CP/M が無事に立上り、BDS C でコンパイルもでき、 MBASIC で ASCIIART も動きました。
しかし、PC-850V は最後の 16KB 部分のメモリを外部 RAM に切り替えることが出来ないようなので、動作しているのは 46KB CP/M であり HI-TECH C はメモリ不足で動作しませんでした。
twitter に投稿した動画付きメッセージも貼っておきます。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
PC-G850V のシステムバス端子用のコネクタは aitendo さんで販売していて品切れ状態が続いていましたが、また復活したようなので少し前に購入しました。
しかし基板に実装しようとするとうまく入りません。開発用 Eborsy を作ったころに購入したコネクタも残っていたので並べてみたものが下の写真です。左側が古いものです。パッと見は同じですがよく見てみると千鳥状に曲げてあるピンの曲げ方が逆になっていますorz
尚、写真では側面の溝の幅も違いますがこれはZ軸に180°回転すると同じ溝幅になります(成形の型は同じものの様です)。今回は取り合えず1個しか残っていない古い方のコネクタを使用しました。
システムバス用コネクタ(左:旧タイプ、右:新タイプ) |
|
部品実装後、最初は動かなかったのですが、基板を調べてみると SPI インターフェースの部分で使っているショットキーバリアダイオードのシルクが逆なため、実装も逆になっていました。回路を確認したところ問題ありませんでしたが、パターン設計画面でショットキーのデータをアップデートしたところ正常になりました。この部品のフットプリントはネットからダウンロードしたもので編集はしていないはずですがどうして逆になってしまったのか謎です。
部品実装後の Eborsy Compact と開発用の Eborsy を並べて撮った写真も貼っておきます。今回作成した Compact の方は名前通りかなりコンパクトになっていますね^^
Eborsy Compact(左)と開発用 Eborsy(右) |
|
下の写真はトップ面の写真です。最初は上手く動かず半田ごてで追半田したので見た目があまり綺麗じゃないですね ^^;
Eborsy Compact(トップ面) |
|
下の写真がボトム面です。GAL は PLCC パッケージのものを直付けしています。
Eborsy Compact(ボトム面) |
|
CP/M が無事に立上り、BDS C でコンパイルもでき、 MBASIC で ASCIIART も動きました。
しかし、PC-850V は最後の 16KB 部分のメモリを外部 RAM に切り替えることが出来ないようなので、動作しているのは 46KB CP/M であり HI-TECH C はメモリ不足で動作しませんでした。
twitter に投稿した動画付きメッセージも貼っておきます。
ポケコン(PC-G850V)のシステムバス端子用の自作ボードの基板が届き無事動作しました^^
— skyriver (@wcinp) February 5, 2023
PLCCパッケージのGALを直付けしていますが問題ありませんでした
aitendoさんでコネクタの在庫が復活していますが以前のものとピンの曲げ方が逆だったorzhttps://t.co/8ZepGIcVXj#G850 #CPM #EborsyCompact https://t.co/V4i2RojwAt pic.twitter.com/TkFpB8kGXX
[TOP] [ 前へ ] 連載記事 [ 次へ ]