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で実行した方が取りこぼしが少ないです。

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

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で起動すると、スクロールも滑らかで気持ちよく操作できます。