パピコン(PC-6001)でGAME言語 [PC-6001]
「ポケコン(PC-G850V)でGAME言語」の記事ではポケコンにGAME言語を移植しましたが、今回はパピコンにTK-80BS用のGAME80インタプリタを移植してみました。
PC-6001の実機を所有していないのでGAME言語の移植は予定していなかったのですが、今ではパソコン上でエミュレータ(PC6001V)が動くようなので実機ROM無しの状態ではありますが、GAME言語のインタプリタを移植してみました。
コンソール入出力関連の処理はN60-BASICとROM内ルーチンで互換性のあるPC-6001用互換BASICの処理をコールする形で実装しました。
画面表示は1075Hの表示ルーチンを使用していますが、この処理はバックスペースでカーソルが移動しないため(実物もそうなのでしょう)、BSキーについては内部的には1文字キャンセルしていますが画面表示上はカーソルが戻らない状態です(GAMEのエディタを使って画面上でソース編集することはあまりないと思うので今後対応するかは未定)。
その代りカーソルキーでカーソルを左右に移動して1ラインのスクリーンエディタのように使えます。
★2020/01/28 変更
BSキーとコントロールXでの入力キャンセルに対応しました。
また、キー操作としてはスペースキーでポーズ(その後任意のキーで再開)、エスケープキーで中断です。
実装方法としては拡張ROMの 4000Hからのアドレスに配置したのでこのページからダウンロードしたファイルをエミュレータで拡張ROMとして設定すれば下図のようなGAME言語のインタプリタが自動起動するはずです。
Twitterにポストした動画付きコメントも貼っておきます。
上の動画で実行しているサンプルソースは以下の通りです。VRAMの内容を参照して方向を変更しています。
今回はROMカートリッジの前半(4000H-5FFFH)に入れる想定なので元版のインタプリタのコードとワークをそれぞれ異なるオフセットで移動しました。
メモリマップの概要は以下のとおりです。
★2020/01/28 追記 Ver0.02でメモリマップにコンパイラを追加
【ダウンロード】
・GameCompV002_20200128.zip
・GAME_V001_20200127.zip(旧バージョン)
【履歴】
★2020/02/01 追記
GAMEソースをリナンバ処理するGAMEのソースリストがここにあります。
【参考にさせて頂いた主なサイト】
[TOP] [ 前へ ] 連載記事 [ 次へ ]
PC-6001の実機を所有していないのでGAME言語の移植は予定していなかったのですが、今ではパソコン上でエミュレータ(PC6001V)が動くようなので実機ROM無しの状態ではありますが、GAME言語のインタプリタを移植してみました。
コンソール入出力関連の処理はN60-BASICとROM内ルーチンで互換性のあるPC-6001用互換BASICの処理をコールする形で実装しました。
画面表示は1075Hの表示ルーチンを使用していますが、この処理はバックスペースでカーソルが移動しないため(実物もそうなのでしょう)、
★2020/01/28 変更
BSキーとコントロールXでの入力キャンセルに対応しました。
また、キー操作としてはスペースキーでポーズ(その後任意のキーで再開)、エスケープキーで中断です。
実装方法としては拡張ROMの 4000Hからのアドレスに配置したのでこのページからダウンロードしたファイルをエミュレータで拡張ROMとして設定すれば下図のようなGAME言語のインタプリタが自動起動するはずです。
PC-6001でのGAMEインタプリタ起動画面 |
|
Twitterにポストした動画付きコメントも貼っておきます。
エミュレータ環境を使ってパピコン(PC-6001)にGAME言語インタプリタを移植してみた
— skyriver (@wcinp) January 27, 2020
実機のROMが無いので実機環境で動作するのかは未確認^^;;
メモリマップのVRAM方式なのでGAME言語との相性はいいかも^^#PC6001 #GAME言語 #パピコン #PC6001Vhttps://t.co/KxE6MxkINv pic.twitter.com/eWFqGiP4Pn
上の動画で実行しているサンプルソースは以下の通りです。VRAMの内容を参照して方向を変更しています。
サンプルソース(GAME言語) |
1' PC-6001 sample source 2' ver 0.01 2020/01/27 by skyriver 100 VRAM=$8200 X=32 Y=15 O="1" 110 B=0 C=0 120 M=1 N=0 $=12 130 @ 140 @ 150 D=B E=C 160 VRAM:C*X+B)=O O=O+1 ;=O>"z" O="1" 170 B=%((B+M+X)/X) 180 C=%((C+N+Y)/Y) 190 @=(VRAM:C*X+B)<>" ") 200 B=D C=E 210 ;=M<>0 N=M M=0 #=230 220 ;=N<>0 M=-N N=0 230 B=B+M C=C+N 240 @=(VRAM:C*X+B)<>" ") |
今回はROMカートリッジの前半(4000H-5FFFH)に入れる想定なので元版のインタプリタのコードとワークをそれぞれ異なるオフセットで移動しました。
メモリマップの概要は以下のとおりです。
No. | address | content |
---|---|---|
1 | 4000-4001 | 'A'+'B'(auto exec mark) |
2 | 4002-4003 | 初期化処理のエントリアドレス |
3 | 4004 | exit処理 |
4 | 4006 | locate処理(変数Aに位置情報 High:ライン、Low:カラム) |
5 | 400C-40FF | 初期化処理など |
6 | 4100-47DF | GAMEインタプリタ本体 |
7 | 6666-7F9E | GAMEコンパイラ |
8 | 8406-84FF | GAMEインタプリタ用ワーク |
9 | 8500 | ソース保存アドレスの初期値 |
★2020/01/28 追記 Ver0.02でメモリマップにコンパイラを追加
【ダウンロード】
・GameCompV002_20200128.zip
・GAME_V001_20200127.zip(旧バージョン)
【履歴】
- Ver 0.02 2020/01/28
BSキー対応、コントロールXキー対応、コンパイラ同梱、詳細はこちらを参照 - Ver 0.01 2020/01/27 初版 公開
★2020/02/01 追記
GAMEソースをリナンバ処理するGAMEのソースリストがここにあります。
【参考にさせて頂いた主なサイト】
- 秋川藤志のページ PC-6001用互換BASIC
互換BASICの内部コール処理等 - Hashi's HomePage THE B-TYPE UNION.
N6x BASIC リファレンス-付録2:メモリマップ - ぱぴこんのこころ PC6001V
PC6001Vエミュレータに関する情報 - 戦士のカートリッジmkII 技術資料
- P6つくろうブログ ROMカートリッジについて
ROMカートリッジに関する情報
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0