2025年3月23日日曜日

パソピア700でT-BASIC1.1

パソピア7同梱テープのB面に、T-BASIC Ver.1.1が収録されている。

パソピア700で動かしてみたら、動いた。。

パソピア7用のT-BASIC1.1は、雑誌などに掲載されていた初代パソピア(T)用のプログラムを動かすのに使っていたが、BASICのみのプログラムなら大体動くが、マシン語が含まれていると大体動かない、といった印象。

BASICプログラムの場合、T-BASIC1.1からT-BASIC7は少しの変換で移植できるので、徐々に使わなくなった。テープのロード時間も長かったし。。

ただT-BASIC7でT-BASICのゲームをすると、速度が速くてゲーム難易度が変化してしまう。
RAM PAC2を使うとロード時間が短いので、T-BASIC1.1オリジナルの速度でゲームするなら、T-BASIC1.1をロードしてから実行する方がよさそう。

パソピア700でT-BASIC1.1にして、イエローデブマリンを動かしてみた。

比較用に、エミュのT-BASIC7で動作したときの速度

「アンタ ハ エライ」、、時代を感じる

2025年3月15日土曜日

パソピア700用USB Keyboard Adaptor 【USBKey700】Rev.0.2

お待たせしました。近々、家電のケンちゃん(https://www.kadenken.com/)から
パソピア700用USB Keyboard Adaptor 【USBKey700】 Rev 0.2を発売します。
基本的な機能は、以前紹介したRev.0.1と同じです

【装着】
・USBKey700本体とmicro USB Type-Bコネクタを接続します。
・パソピア700の電源をオフにします
・USBKey700のキーボードコネクタ(Din13ピン)をパソピア700に差し込みます。
・USBポートにキーボードを装着してから、パソピア700の電源をオンして下さい。
 ※キーボードコネクタは、奥までしっかり差し込んでください。
  コネクタを抜くときは線を引っ張らず、コネクタ部分を摘まんで抜いてください。
 ※しばらくコネクタを使っていない機体の場合、接触不良がおきる場合もあります。
  その場合はコネクタを何度か抜き差ししたり、接点復活材をお試しください。

【USBキーボード】
・日本語109キーボードを用意してください。
・利用できないキーボードもあります。ご了承願います。

【キー配置】
・パソピア700オリジナル配置

・日本語109キーボードへの割り当て (※印はSHIFTキーも同時に入力されます)

【特殊キー】New!
※特殊キーはタイミングによってプログラム読み込みに失敗する場合があります。SCREEN 0での実行を推奨します。もし途中で固まった場合、Pause(STOP)キーもしくはWin+Pause(STOP)キーで通常キー入力モードに戻ります。もし本体がハングした場合は、本体リセットをお願いします

・[F9]キー: FD Format ... 2Dフロッピーディスクをフォーマットします (解説)
・[F10]キー: FD Copy ... 2Dフロッピーディスクをコピーします (解説)
 →実機でのフォーマットとコピーの動画です
※フロッピー操作をする場合は、パソピア700起動時「How many disk drives(0-4)?」で、正しいドライブ数を選択してください。

・[F12]キー: XPAC2 Command Prompt ... 入力コマンドは「CMD」と同じです
 →BASICの「CMD」と、常駐する「COM」の比較動画です。

【ファームアップデート】
・Rev.0.1をお持ちの方は、ファームアップデートでRev.0.2になります。
・ファームアップデートする場合は、必ずパソピア700からコネクタを抜いてください。
 ※そのままPC接続すると、パソピア700に電流が流れて壊れる恐れがあります。
・USBキーボードと接続しているmicro USB Type-Bコネクタも抜きます。

・プラス精密ドライバーでネジ2本を外し、蓋を開けます。
・USB Type-Aとmicro USB Type-Bのケーブルを用意し、
 基板上のBOOTSELと記載されている白いボタンを押しながら、PCと基板を接続します

・しばらくするとPCがUSBドライブとして認識します。
ここからRev.0.2のuf2ファイルをダウンロードします。ZIP形式なので解凍して下さい。
・Explorerを開き、PRI-RP2という名前のUSBドライブに、uf2ファイルをコピーします。
・コピーが成功すると、自動でUSBドライブのマウントが解除されます。
・もしRev.0.1に戻す場合は、こちらRev.0.1のuf2ファイルを利用してください。

【注意・免責事項】
本機を使用して生じたトラブル、被害、またはそれに掛かる損害などについて責任負わないものとさせて頂きます。
USBキーボードはお客様でご用意下さい。全てのUSBキーボードで動作保証するものではありません。
改良のため、予告無く仕様変更をすることがあります。
プラスチックケースは手作業で削っていますので、傷が付いていますがご了承下さい。
ご理解のほどお願い致します。

新しい情報などがあれば、https://pasopia700.blogspot.com/search/label/USBKey700サイトから公開していきます。

パソピア700を持っている人は少ないと思いますが、持っている方は是非お試しください。
特に上下キーが分離した点やバックスペースが使えるようになったのは便利だと思います。

-----
同時に家電のケンちゃん(https://www.kadenken.com/)で、以下追加販売します。



どちらも少量ですが、近いうちに通販ページに登録されると思いますので、よろしくお願いします。


2025年3月14日金曜日

USB Keyboard Adaptorからのプログラム転送

2022年5月に発売したパソピア700用USB Keyboard Adaptor Rev.0.1ですが、
内部にはRaspberry PI Picoを使っています

2022年当時は色々制限がありましたが、最新の開発環境を落としてみたところ、USB HostやPIO周りがだいぶ改善されてきました。
・USB Hub付きのキーボードが使えるようになった(但し全てではない)
・Hot Plugで落ちにくくなった(でも時々ハングする)
・PIOの命令数を31以下にしないとAssertで止まっていたのが、32命令まで動くようになった

特に最後の、PIOで1命令追加できるのは嬉しい。
せっかくなので、
push noblock
を入れてみました。パソピア700からPicoに届くKeyScan 7bitデータをFIFOに保存します。
逆方向へはKeyReturn 8bitデータを送れるので、これで双方向通信ができます。
Picoにプログラムを保存しておき、パソピア700に転送する仕組みを考えます。

パソピア700からKeyScanデータ(0Ch or 0Eh)を送り、Picoが受け取ったら、次のアドレスに移動。格納されているデータをPIOにセットします。続いてKeyScanデータ(01h)が来たらKeyReturnで8bitデータを返却、を繰り返してプログラムを転送します。

パソピア700側の転送処理です。
MEM_CTRL EQU 22h ;Memory Control
MEM_MODE EQU 3Ch ;Memory Mode
KEY_SCAN EQU 30h ; (out) KeyScan Data
KEY_RETURN EQU 31h ; (in) KeyReturn Data

ORG 0F000h
; データ読み込み処理
DATA_LOAD_START:
PUSH AF
PUSH HL
PUSH DE
PUSH BC

LD HL, ????h ; HL:転送先アドレス
LD DE, ??0Eh ; D:転送サイズHigh+1, E:次アドレス移動コマンド値(0Eh)
LD BC, ??31h ; B:転送サイズのLow, C:KeyReturnポート(31h固定)
DI
LOAD_NEXT:
LD A, E     ; E:次アドレス移動コマンド値(0Ch or 0Eh)の切替え
XOR 02h
LD E, A

RETURN_WAIT:
LD A, E
OUT (KEY_SCAN), A ; 次のアドレスに移動
IN A, (KEY_RETURN)
CP 0Fh ; Pauseキー=リセットコマンド(0Fh)が返答されたか確認
JR Z, DATA_LOAD_END
SUB E
JR NZ, RETURN_WAIT ; Picoからの応答がコマンドと一致するまで待つ

INC A
OUT (KEY_SCAN), A ; カレントアドレスのデータ出力(01h)
INI
JR NZ, LOAD_NEXT
DEC D
JR NZ, LOAD_NEXT

DATA_LOAD_END:
LD A, 0FFh
OUT (KEY_SCAN), A ;キースキャンを元に戻す
EI

POP BC
POP DE
POP HL
POP AF
RET

END
プログラム転送のキー割り当ては、f9~f12キーにしました。
キーが押されたら、USB Keyboard Adaptorが上記プログラムをBASICで打ち込みます
clear,&h????:a$="f5e5d5c521????110e??0131??f37bee025f7bd330db31fe0f280d9320f43cd330eda220e91520e63effd330fbc1d1e1f1c9":a=&h????:for i=0 to ??:poke a+i,val("&h"+mid$(a$,i*2+1,2)):next:call a\n
??の部分は転送するプログラムに応じてPico側で埋め込みます。
Picoは一文字ごとPIOに文字をセットして、パソピア700にキー入力させます。
その間もUSB Host処理を行い、Pauseキーが押されたら中断できるようにします。

前回のXPAC2コマンドプロンプトをf12キーに割り当てて、Picoから転送してみました。

BASICへのキー入力は最短1文字7msで1文字転送できますが、連続して入力すると入力を取りこぼすことがあるので、かなりウェイトを入れています。それでも、タイミングによっては取りこぼすことがあるので、もしハングした場合は「Pauseキー」 or 「Winキー+Pauseキー」を押すと復帰します(それでも復帰できない場合はリセット...)
SCREEN 0で実行した方が取りこぼしが少ないです。

ショートカットキーのような使い方ができるので、過去に作ったユーティリティを登録してみます。

実際にXPAC2コマンドプロンプトを動かしてみた動画です。
演奏前がSCREEN 0、演奏後がSCREEN 2:WIDTH 80での操作感が見れます。

ウェイトを入れれば取りこぼしが減りますが、使い勝手も落ちるので、バランスを考えて今の速度にしています。電源投入直後に実行してもらえると、万が一ハングした際に被害が少ないので、運用でカバーをお願いします。。

2025年3月12日水曜日

XPAC2のSDカード処理コマンドプロンプト

BASICで使い勝手良かったが、コマンド常駐型も作ってみたので公開。
今回はPasopia7と700専用。

以下BASICを実行すると、T-BASIC7のCOMコマンドをフックします。
100 'XPAC2 Command Prompt for Pasopia7/700 (C) 2025 zak
110 CLEAR ,&HEFFF

120 FOR I=&HF000 TO &HF0F1
130   READ A$
140   POKE I,VAL("&H"+A$)
150 NEXT I

160 H=&HF495
170 L=&HF494
180 IF PEEK(H)=&H53 AND PEEK(L)=&H84 THEN A=&HF0E3:CALL A:PRINT"COM Command Hooked." ELSE A=&HF0D7:CALL A:PRINT"COM Command Unhooked."
190 END

200 DATA F5,B7,28,05,F1,C3,84,53,F5,E5,D5,C5,3E,07,D3,1B
210 DATA 0E,05,CD,05,00,0E,2F,06,3E,CD,05,00,AF,67,57,5F
220 DATA D3,19,0E,01,CD,05,00,38,F9,FE,03,28,28,FE,08,28
230 DATA 2B,FE,0D,28,49,FE,20,38,E9,FE,F7,30,E5,47,7B,FE
240 DATA FE,30,DF,B7,20,01,60,0E,2F,CD,05,00,7B,D3,18,78
250 DATA D3,1A,1C,18,CD,C1,D1,E1,F1,C9,18,B9,7B,B7,28,C2
260 DATA 0E,06,CD,05,00,0E,2F,06,1D,CD,05,00,06,20,CD,05
270 DATA 00,06,1D,CD,05,00,0E,05,CD,05,00,1D,18,A4,0E,2F
280 DATA 06,0D,CD,05,00,06,0A,CD,05,00,7B,B7,28,87,7C,FE
290 DATA 45,28,C2,FE,65,28,BE,7B,D3,18,AF,D3,1A,57,5F,D3
300 DATA 18,3E,0F,D3,1B,0E,01,CD,05,00,FE,03,28,A7,DB,1A
310 DATA FE,F7,30,F1,0E,2F,7A,D3,19,7B,D3,18,DB,1A,B7,28
320 DATA 0A,47,CD,05,00,13,7A,D6,08,20,EB,06,0D,CD,05,00
330 DATA 06,0A,CD,05,00,18,83,F5,E5,D5,C5,21,84,53,22,94
340 DATA F4,18,0A,F5,E5,D5,C5,21,00,F0,22,94,F4,C1,D1,E1
350 DATA F1,C9
その後は「COM」コマンドでプロンプト「>」が表示され、SDコマンドの入力ができます。
1文字削除は「DEL」、終了は「e(xit)」コマンド or 「STOP」キー or 「CTRL+C」キー

RS-232C制御コマンド「COM(チャンネル番号)ON/OFF/STOP」もそのまま使えます。

常駐させずにプロンプトを利用する場合は、F008hから直接起動。
事前にCLEAR,&HEFFFを忘れずに。

バイナリからCOMフックする場合は、F0E3hをコール。
以降はCOMコマンドでプロンプト起動。

COMフックを解除する場合は、F0D7hをコール。
以降はCOMコマンドを入力してもエラーになります。


SCREEN 0で起動すると、スクロールも滑らかで気持ちよく操作できます。



2024年9月21日土曜日

Meta Fight

Xで見かけたので、パソピア7版のメタファイターを紹介。

月刊ログイン1983年11月号に掲載

Phase 1 ATTACKゾーン
4と6キーで左右に移動し、スペースバーで弾を発射
全ての敵を倒すと、次のレベルにワープ
レベル4はチャレンジステージで、敵は弾を撃ってこない。
全ての敵を倒すまでの時間で、ボーナスが決まる

Phase 2 INVATION(?)ゾーン
XキーとCキーで、発射の向きを45度ずつ変えられる

Phase 3 CAPTUREゾーン
敵は上下にいて、弾も上下から飛んでくる

Phase 4 CHAOSゾーン
8と2キーで上下にも移動できるが、敵の弾も上下左右から飛んでくる

自分が行けたのはここまで。
つたない腕ですが、動画でどうぞ

CHAOSゾーンはクリアできる気がしない。

2024年7月28日日曜日

88mk2/80SR用ゲームコントローラー

せっかくなので、ゲームコントローラーの対応も考えてみる。

PicoのUSB Hostサンプルを参考にしてBuffaloやElecomのUSB Joypadを試してみたが、パッドによってリターンデータの格納場所がバラバラで、汎用的なロジックが難しい。。

どれか1つだけ、と考えるとPicoのサンプルにあったDS4が良いのかな、と思う
こちらもPC-8001mk2SRに接続すると本体側のModifierキーが無効になるので、困った時に備えてL1(GRAPH)/L2(カナ)/R1(SHIFT)/R2(CTRL)にしておく。

USBハブでキーボードとDS4をつなげて動作確認。
同時接続しても、どちらからでも入力できることを確認。
ただ80SRの5V、電力的に大丈夫かは不明。
DUALSHOCK4は充電もするから、外部給電できるUSBハブとかの方が安全かも。

88mk2キーボードへのマッピングは以下の通り。
CAPSとカナキーは、SHIFTと同時押しでロックするようにした。
CAPSロック中はキーボード右上のCapsLock LEDが点灯、カナはScrollLock LEDが点灯。

88mk2実機が無かったので手間取ったが、なんとか動く(だろう)ものができたと思う。


余談。DS4の横にチラッと映っているやつのUSBキーボードアダプタも考えたことがあったが、キーボードから音が鳴るとか曲者なので見送っている...

2024年7月25日木曜日

PC-8801mk2用USBキーボードアダプタ

88mk2のUSBキーボードアダプタの問い合わせが来たので、少し調べてみた。

PC-8801mk2シリーズ(PC-8801mk2/SR/TR/FR/MR)のキーボードコネクタはDIN 13pinで、雄コネクタを覗き込んだ場合、左上が1pinで右下が12pin、真ん中下が13pinの並び。

13pinが5Vで外周がGND、88mk2本体から9~12pinでスキャンラインを指定し、押されたキーを1~8pinを読み取る様子。キーマトリックスは素直でシンプル。
88mk2シリーズの場合、スキャンラインは0~11まで。
キーが押されるとビットはLow(0)になり、何も押されていない場合は全ビットがHigh(1)になりFFhが返答される。

入力と出力のピンが独立してるので、余計な回路も必要なくPicoで行けそう。

ほぼDIN13コネクタとPicoを接続するのみだが、テスト基板を作成

うちには88mk2が無いので、PC-8001mk2SRで試してみる。
80SRの背面には汎用入力インターフェイスがあって、DIN 13pinのコネクタがある

基本動作はパソピア700用USBキーボードアダプタと同じ。8個のPIOで8個のリターンピンで独立して処理することで、PC本体の読み取りタイミングに間に合うように押されたキーを応答する。
少し違うのは、パソピア700はキーのスキャンタイミングがわかるピンがあるので、その1つのピンを監視していればよかったのだが、88の場合はタイミングの信号線がないので、9~12pinのどれかがLow(0)になるまでボーリングするようにした。
実際にUSBキーボードとシリアルを接続して動作確認。
結果は以下の波形。
下の4つが88mk2本体から送られてくるスキャンライン9~12pinだが、LowになってからHighになるまでの間隔が590nsくらい。
今回はポーリング処理が入っているためタイミングによるばらつきがあるが、それでもスキャン信号が届いてから200nsちょっとで返答できている。

USBキーボードでキーを押すと、ちゃんとキー入力されている。

1つ気になる点は、PC-8001mk2SR本体側のModifierキーが無効になる。
今回作成したアダプタを本体に接続すると、CTRL/SHIFT/GRAPH/カナキーがUSBキーボード側のみ有効になり、本体側のModifierキーが無効になってしまう。
仕様かもしれないが、本物の88キーボードを持っていないので確認できず。。

あと、今回88mk2版を試すにあたりPicoのUSBライブラリを最新にしたが、安定性がかなり上がった印象。USBキーボードの抜き差しをしてもハングしにくくなったし、今まで動かなかったHub付きキーボードも動くようになった。

88mk2シリーズでも動きそうだが、本体で検証できていないので...