SSブログ
English Version

ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その5)LCDのシンボル制御 [ポケコン]

 前回の記事でポケコン(PC-G850V,以降 G850 と記す)で動作する CP/M 環境内で既存のアプリケーションを起動できるランチャーの製作について書きましたが、色々なゲームで遊んでいると G850 の LCD のシンボルを非表示制御しているものとしていないものがあることに気が付きました。
 今回の CP/M 起動時でも余分なシンボルが表示されたままだったのでシンボルの表示制御についてネットで探してみましたが見つけることが出来ませんでした。

 どのようなシンボルがあるのかについては全てのシンボルを表示した状態の下の写真を見てください。

G850V で全シンボル表示状態の画面例


 余談ですが、DEGRAD の部分は DE + G + RAD の3部構成になっていて G を共用することで狭いLCDに必要な文字を詰め込んでいました。

 はじめにLCDコントローラを直接アクセスして表示データを設定する方法ですがコマンドポート(40H)に下表に従って書込み座標を設定後、データポート(41H)にデータを出力します。表中の Page address は Y / 8 の値を設定します。

LCDコントローラへの書込みアドレスの設定方法


 G850 のLCDの解像度は 144 x 48 で column アドレスとしては 0 ~ 143 の範囲なのですが、144 column に書込むことでシンボル部分の表示制御ができました。

 シンボル表示制御の調査結果を下表にまとめました。対応ビットが1で表示されます。

No.symbolpage adrcolumn adrassign bit
1RUN014402h
2PRO014408h
2TEXT014440h
3CASL114408h
4STAT214401h
52ndF214420h
6[M]214480h
7CAPS314404h
8カナ314480h
9414402h
10DE414410h
11G414440h
12RAD514401h
13CONST514404h
14PRINT514410h
15BUSY514440h
16[BATT]514480h
★修正 2023/08/14 前回の修正を元に戻した
★修正 2023/08/12 page adrを修正


 今回は CP/M 上で動くお手軽な GAME 言語を使って調べました。
 参考として全てのシンボルを非表示にする GAME 言語のソースが下記になります。

全シンボル非表示制御の例(GAME言語)
1' PC-G850V LCD 144x48(64) 2' delete all symbols 10 M=&+1 20 M:0)=$3E M:1)=$00 M:2)=$D3 M:3)=$00 M:4)=$C9 30 D=M+1 P=M+3 40 #=1000 100'** set pos X<-x,Y<-y 110 P:0)=$40 D:0)=%(X/16) >=M 120 D:0)=X/16+$10 >=M 130 D:0)=Y+$B0 >=M 140 ] 199' set A to symbole area 200 X=144 210 Y=0,5 220 !=100 230 D:0)=A P:0)=$41 >=M 240 @=Y+1 250 ] 1000 A=$FF !=200 1010 I=0,2000 "" @=I+1 1020 A=0 !=200



★追記 2023/07/30
 G850 上で単独で動作する GAME 言語を下記の記事からダウンロードできます。
 ・「ポケコン(PC-G850V)でGAME言語


[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その4)ランチャーの製作 [ポケコン]

 前回の記事で今回開発した PC-G850V(以降 G850 と記す)用の増設ボード EborsyEEP(RAM & シリアル EEPROM を実装)使って CP/M が安定して動作するようになったことを書きました。今回は CP/M 環境下で既存の G850 用のアプリケーションを起動できるランチャーを制作したので概要を記載したいと思います。

 CP/M が動作している状態で既存のアプリケーションを起動するために G850 内蔵メモリ上で動作していた CP/M loader をメモリの後方に移動し、アプリケーション用のメモリを確保するようにしました。

 下図が CP/M 起動時のメモリ配置の概要図になります。

CP/M 起動時のメモリ配置


 起動時の処理の概要は
  1. loader 自身を 5600H 以降にコピーする。
  2. 未使用だった BAMK0 に loader をバックアップする。
  3. BE00H にブリッジ処理をコピーする。
  4. loader 内の IPL により EEPROM から CCP/BDOS/BIOS を読込み、BANK1 に展開する。
  5. 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?)に投稿した動画付きメッセージを貼っておきます。




[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

ポケコン(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 から分離して内部メモリに持つことにしました。この実装方法のメリットとデメリットは次のとおりです。

■メリット
 ・バッファ分 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 のバンクは未使用のままです。

addressInternal Memoryexternal memory
0000H - 7FFFHwrapping modules for system call TPA of CP/M
8000H - 9BFFHG850's ROM same as above (bank1)
A000H - B5FFHsame as aboveCCP & BDOS of CP/M (bank1)
B600H - BD7FHsame as aboveBIOS for PC-G850V (bank1)
BD80H - BDFFHsame as abovestack area
BE00H - BFFFHsame as abovebridging module
C000H - FFFFHG850's system ROM (bank0-21) ----


 Twitter に投稿した動画付きメッセージを貼っておきます。録画途中で電池切れマークが点灯して焦ったw




★追記 2023/08/06
 CP/M 版 MBASIC で asciiart.bas を実行した結果を貼っておきます。Z80 の 20MHz 環境で約1分なので G850V(8MHz)ではほぼクロック相当の時間でした。

MBASIC での asciiart.bas 実行結果


[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

デジタル式定電流放電器の制作(その11)EBL製充電池の評価 [PIC]

 ポケコンを弄っていると電池を充電する間使えなくなって不便なので予備用の充電池を購入しました。
 今までの経験から電池は日本製と決めていたのですが、先日 YouTube で見た充電池の比較テストで以外にも EBL 製の結果が良かったのです。今回は安さの誘惑に耐えられず EBL 製のものを購入しましたw

購入したEBL製ニッケル水素電池


 YouTube で見た評価をそのまま信じてしまうのもあれなので、自作の放電器ネタは久々なのですが今回購入した EBL 製電池の評価を行ってみました。放電電流は 0.5A で放電終了電圧を 1.0V に設定しました。

 また、以前作成した単4電池用のアダプタはきつかったので今回作り直しました。
 下図が、今回作成した単4電池用アダプタのCAD画面です。回転したものを切り取っているだけなので設計は簡単ですね。穴の部分に半田付け作業時に貯めていた抵抗のリードを通して電池のマイナス極が電池ホルダのマイナス側に導通するようにします。

単4電池用アダプタ(CAD画面)


 下の写真はかなり前に開発したデジタル式放電器です。右側に映っているのは単4電池を装着するためのアダプタです。

以前開発したデジタル式放電器


 下の写真は放電中の様子です。スイッチ操作で表示する電池を選択(または全チャンネル表示)が可能です。

デジタル式放電器(放電中)


 測定結果を下表に示します。この電池の仕様容量は 1100mAh ですが測定結果は仕様容量の70%弱と言ったところです。
 通常は回数を重ねるごとに眠っていた電池が活性化してくるので容量が増えるのですが、今回は3回目の測定値が電池によらず低めになりました。これは充電後に直ぐに測定したためかもしれません。1回目は購入直後に追充電していますし、2回目はすぐに放電できなかったので満充電後に時間を置いてから放電前に追充電しています。
 以前測定した百均のニッケル水素電池(VOLCANO)は数回の充放電でほぼ仕様容量になったのでお勧めかもしれません。



 それぞれの電池の放電特性の詳細を下図に示します。

 下図は1回目(購入後に直ぐに満充電した状態から放電試験実施)です。

EBL製単4電池の放電特性(1回目)


 2回目の放電で原因は不明なのですが No.2 の放電特性が暴れていますね。No.4 も後半に少し暴れています。

EBL製単4電池の放電特性(2回目)


 3回目は上記の様に早めに放電してしまいました。電圧特性を見比べると一定値の時間が短い(だらだら下がっている)のでもしかしたら既に劣化が進んでいるのかもしれません。

EBL製単4電池の放電特性(3回目)



★追記 2023/07/20
 従来使用していた TOSHIBA 製の4本の白い単4電池の容量も測定してみました。
 仕様容量が 750mAh で測定値の平均が 766mAh なので数年前に購入した(使用頻度は高くない)にもかかわらず、仕様値以上の結果でした。流石に日本製ですね。

単4 東芝製電池放電容量


 放電時の電圧/電流特性が下図になります。購入してから数年経ちますがバラツキも少ないですね。

東芝製単4電池の放電特性




[ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

はんだ吸取器の製作(その2) [3D_printer]

 前回の記事で市販の安価なはんだシュッ太郎もどきと小型ポンプを使ってはんだ吸取器を自作するための3Dプリンタで出力する部品の設計について書きましたが、今回は部品を組み立てて実際に半田吸取り試験をやってみましたので状況を記録しておきたいと思います。

 下の写真は3Dプリンタで出力した部品です。試作中にフィラメントが無くなったので途中から緑色の PETG フィラメントに変えました。透明のフィラメントで作ったのがテール部品で緑色はグリップ部品です。

3Dプリンタで出力した部品


 下の写真はグリップ部品の内面です。最初は外側の面を奇麗に出力するために外面を上にして出力していましたがサポート材を取るのが大変(指にまめができた)なので途中から内面を上にして出力するようにしました。サポート材が少ない分、出力時間が短くなります。

3Dプリンタで出力した部品(グリップ内面)


 下の写真は今回自作したはんだ吸取器(以降、チュー太郎と記す)の部品です。左端のチューブはポンプとテール部品を繋ぐためのシリコンチューブです。写真以外の部品としてポンプ用のACアダプタ(12V)とテール部品に入れるスチールたわしを使いました。

★追記 2023/07/05 {
 主要部品の購入価格(送料込み)は下記の通りで非常に安価です。
  はんだシュッ太郎もどき:645円
  バキュームポンプ:573円
  シリコンチューブ 1m:117円
}
自作はんだ吸取器(チュー太郎)の部品


 組み立てた状態が下の写真です。ポンプが収まるギリギリのサイズにしたため、組立が結構大変でした。グリップはもっと長い方が握り易いので、全体的にもっと大きくした方が良かったかも知れません。
 グリップからはポンプの排気口も出ているのでシリコンチューブを排気口に繋ぎ変えれば、簡易的な掃除として吸引した半田を吐き出すことができるかもしれません。

自作はんだ吸取器(チュー太郎)完成写真1


 下は右側の写真です。右側にはネジ穴が無いことを除けば、左側とほぼ対称な形状になっています。光る部分がある場合の写真は難しいですね^^;

自作はんだ吸取器(チュー太郎)完成写真2


 実際使ってみると 110V(36W) 用のヒーターの為か、熱量が不足気味な印象を受けました。ワット数は電圧の二乗に比例するので 100V では 30W 相当だと思います。ヒーター部分を分解して25%程度に銅線を巻いてワット数を上げるハックもできるようなので気が向いたら試してみたいと思います。

 動画付きで Twiiter に投稿したメッセージを貼っておきます。




[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー