2022年12月28日水曜日

強制ブランキング

強制ブランキングの方法について。

NTSC信号の水平同期信号は、水平周期パルス信号(4.7us)→Breezeway(0.6us)→カラーバースト信号(2.5us)→Back Porch(1.6us)の順番タイミングになっている。
15kHz対応の液晶モニタでパソピア背景色を正しく表示するためには、水平周期パルス信号~カラーバースト信号の区間で、映像信号をカットする必要がある様子。(見つけてくれた先人の方々に多謝!)  H-SyncがLowになってからBack Porch内までの区間(7.8us~9.6us)、映像信号を強制ブランキングする仕組みを考えてみる。

テクニカルマニュアルによると、パソピア7の水平周波数は15.7kHz。
水平同期信号(4.47us)の区間でLowになる仕様。水平同期信号がHighになるタイミングから更に4.47us待つと8.94usでちょうどBack Porchの真ん中くらいのタイミングになりそう。

以前紹介した東芝純正のRGB変換アダプターでは、この強制ブランキングのタイミングをTC4538BP+可変抵抗で手動で調整する。CRTに映像を表示しながらマイナスドライバーで調整していた。

パソピアのカラー出力はDIN8ピンで、VGAコネクタは3列15ピン。
ケーブル側コネクタは以下のピン配置

パソピア本体から14MHzのクロック信号がでており、1clock=69.85nsになっている。
今回はこの信号を使って、自動でブラキング区間を決めるようにする。
クロックのカウントに、74HC590というカンターICを使ってみる。
H-SyncがLowになるとカウンターがリセットされ、Highになるとカウント開始。
64clock(=4.47us)経過するとQGピンがLow→Highに変化し、クロックカウントが停止。
これで、4.47us+4.47us=8.94usの間LowになったあとHighに戻る、という動作になる。
これとR/G/B映像信号をANDすると、ブランキング期間の映像信号が強制的にLowに落ちる

パソピアから+12Vも来ているので、レギュレータで5Vに落としてICを動かす。
考えた回路全体はこんな感じ。
若干の信号の遅延があるので、念のためR/G/B信号と一緒にH-SyncもAND回路を通してタイミングを合わせる。V-Syncの方は時間に余裕があるので直結。

基板に実装したところ。

ロジアナでタイミングを調べてみると、
上から順番にClock, H-Sync, 74HC590のQGピン, Blue信号, QGとBlue信号のAND結果。
ちゃんと水平同期信号と連動して8.94us強制ブランキングになっている。
IC動作分の遅延(0.09us程)があるが、Back Porch内に収まっている。

パソピア7実機とつなげてみると、
ちゃんと背景色が表示されるようになった!

中間色もちゃんとでたが、
CRTのように滲まないので、縦縞が目立つ...

2022年12月22日木曜日

パソピアの背景色

2011年に紹介した西田ラジオさんのS端子アダプタ、今でも重宝しています。
以前の記事にもあるように、パソピアの背景色問題に対応してもらいました。

パソピアを15kHz対応の液晶モニタにつなげた場合、背景色の問題が出る時がある。
DIN 8ピンからVGA端子3列15ピンに変換するケーブルを用意し、うちの15kHz対応液晶モニタで試したところ、やはり背景色が正しく表示されなかった。

例えばCENTURYのLCD-8000VでALPHOSを起動すると、全体的に黄色い。
下部は、27色では出ないような綺麗なグラデーションで背景色が消えていく...

純正のCRTで表示すると、青い背景色と白いニーモニック号がちゃんと表示される。
モニタの端まで綺麗に青が表示されている。

パソピアの背景色について。
初代パソピアでは、COLOR命令で背景色を指定できる。カンマの後が背景色(1=青)

パソピア7も同じようにCOLOR命令で背景色を指定できるが、

パレットコード0が背景色なので、COLOR=(0, ...)で中間色の背景色にもできる。

CENTURYのLCD-8000Vで背景色を青(1)にすると、背景は黒のまま文字色が黄色っぽく。
ピンク中間色(2,3)にすると、青と黒の縦じまになった。

NECのLCD-EA245WMiの場合、中間色(2,3)を指定しても背景は黒のまま。

ExtronのDSC 301 HDでHDMI出力も試してみた。

CENTURYのLCD-8000Vと同じ傾向。
青(1)の場合は背景黒で文字が黄色っぽく。中間色(2,3)の場合は青と黒の縦じまになった。

うちにある15kHz対応機器では、背景色が正しく出なかった。
次は、背景色問題対策の強制ブランキングについて。(続く)

2022年11月13日日曜日

パソピア7/700用のFDフォーマッタ

パソピア7/700用フロッピーディスクのフォーマットプログラムを作ってみる。

BIOSでFDDを制御するためには、まずパラメータのセット(Fn#=18)が必要
・Cレジスタ:Function(Fn)#=18(FDDパラメータセット)
・HLレジスタ:Buffer先頭アドレス
・Dレジスタ:Track#
・Eレジスタ:Sector#
・Bレジスタ:Read/Write Sector数
・Aレジスタ:FDD Paramter
 - bit7:Side (0 or 1)
 - bit6-5:00...両面倍密度, 01...片面倍率度, 10...両面単密度, 11...片面単密度
 - bit4-3:00固定
 - bit2-0:装置番号-1 (0-3)

FDDパラメータセット(Fn#=18)後、以下いずれかのFn#で再びBIOSコール
・Fn#=19:Disk Read(Seek & Read)
・Fn#=20:Disk Write(Seek & Write)
・Fn#=21:Disk Write(Seek & Write with Check)
・Fn#=22:Disk Write Delete(Seek & Write Delete)
・Fn#=23:Disk Restore(Seek to Zero)
・Fn#=24:Disk Format(Seek & Write ID)
・Fn#=25:Disk Check(Check Disk Status)
BIOSコールから戻ってきた際に、キャリーフラグが立つとエラー発生。
・Aレジスタ:終了ステータス
 - "0"=30h:正常
 - "1"=31h:Not Ready
 - "8"=38h:Write Protect
 など。
エラー時のリトライは1回ずつ入れることにした。

アンフォーマットのフロッピーだと、最初にトラック毎にIDの書き込みが必要。
IDを書かずにデータ書き込みするとID errorで失敗する。

フォーマット処理フローは以下の通り
(1) 装置初期化
・Fn#18でパラメータセット
 - Aレジスタ:FDD Paramter=装置番号-1(0-3)をセット
・Fn#23でDisk Restore
 - Aレジスタ:FDD Paramter=07hをセット

(2) トラック毎にID書き込み
・Fn#=18でパラメータセット
 - HLレジスタ:ID Buffer先頭アドレス。バッファには以下104バイトを書き込んでおく
  - 1バイト目:Track#
  - 2バイト目:Side0(00h) or Side1(01h)
  - 3バイト目:Index(01h→1Ah)
  - 4バイト目:単密度(00h) or 倍密度(01h)
  →上記を26回繰り返し4バイト×26回=合計104バイト
 - Dレジスタ:Track#
 - Eレジスタ:Sector#=E5h
 - Bレジスタ:Read/Write Sector数=40h
 - Aレジスタ:FDD Paramter=装置番号-1(0-3)をセット(Side1は+80h)
・Fn#24でWrite ID
 - Aレジスタ:FDD Paramter=8Dhをセット

(3) Disk読み込みチェック
・Fn#=18でパラメータセット
 - HLレジスタ:Read Buffer先頭アドレス。
  - 読み込み用に16セクタ(最大4,096バイト)分のバッファを用意しておく
 - Dレジスタ:Track#
 - Eレジスタ:Sector#=01h
 - Bレジスタ:Read/Write Sector数=10h
 - Aレジスタ:FDD Paramter=装置番号-1(0-3)をセット(Side1は+80h)
・Fn#=23でDisk Seek & Read
 - Aレジスタ:FDD Paramter=30hをセット

(4) Track0.Side0→Track0.Side1→Track1.Side0→Track1.Side1→...
→Track34.Side0→Track34.Side1の順番で(2)(3)を繰り返し。
但しTrack18のWrite ID後、ディレクトリ・ディスク属性・FATをSide0に書き込み
・Fn#=18でパラメータセット
 - HLレジスタ:Read Buffer先頭アドレス。
  - バッファにはディレクトリ・ディスク属性・FATを書き込んでおく
 - Dレジスタ:Track#=12h
 - Eレジスタ:Sector#=01h
 - Bレジスタ:Read/Write Sector数=10h
 - Aレジスタ:FDD Paramter=装置番号-1(0-3)をセット
・Fn#=21でDisk Write with Check
 - Aレジスタは変更なし

(5) Disk Restore
・Fn#18でパラメータセット
 - Aレジスタ:FDD Paramter=装置番号-1(0-3)+80hをセット
・Fn#23で装置初期化
 - Aレジスタ:FDD Paramter=07hをセット

上記の流れで処理を組んでコンパイル。できたバイナリをBASICと組み合わせ。
パソピア7のエミュレータで確認。
うまく行ったっぽい。
エミュが作成したd88イメージをバイナリエディタで確認したが、問題なさそう。

初代パソピアT-DISK BASICでの読み書きもエミュレータで確認。
パソピア7でフォーマットしたディスクは、初代パソピアでも使えそう。

実機での動作確認はパソピア700。フォーマット、データ読書きも大丈夫そう。

FDフォーマッタのRAMPACイメージとBASICテキストをアップしました。

パソピア7と初代パソピアはエミュレータでしか確認できていないので、すぐ試せる方は試して報告してもらえると助かります。

2022年11月12日土曜日

パソピアのフロッピーフォーマット

以前の投稿で パソピアのフロッピーをイメージ化する手順をまとめたが、今回はフロッピーの内部フォーマットについて調べてみたので備忘録。
パソピアには片面ミニフロッピーもあるが、今回は両面倍密(2D)ミニフロッピーについて。

・2ヘッド:Side0, Side1
・35トラック:Track#0(外周)~#34(内周)
・1トラックあたり16セクタ:Sector#1~#16 (時計回り順)
・1セクタあたり256byte(倍密度) ※Track#0.Side0のみ128byte(単密度)
・8セクタ毎に1クラスタ。クラスタの並び順は、
 Side0.Sector1-8 → Side1.Sector1-8 → Side0.Sector9-16 → Side1.Sector9-16
 下の表の場合、セクタ順に並べたのでクラスタ順が0→2→1→3になっているのに注意。

・Track#0は未使用領域
・Track#18.Side0は、
 (a) Sector#1-12:ディレクトリ
 (b) Sector#13:ディスク属性
 (c) Sector#14-16:FAT(256byte)×3セット

初代パソピア用T-DISK BASICの場合は、以下の領域が使われている。
・Track#0.Side1.Sector#1-8:初期化ルーチン
・Track#1.Side0.Sector#2~Track#8.Side1.Sector#16:T-DISK BASICシステム
・Track#19.Side1.Sector#1~Track#34.Side1.Sector#16:漢字パターン

総容量は、2ヘッド×35トラック×16セクタ×256byte-(単密度分:16セクタ×128byte)
=284,672byte

Track#18.Side0の格納データにについて。
(a) Sector#1-12:ディレクトリ ... 16バイト毎に、ファイル情報が格納される
・0~9バイト:ファイル名
 - ファイル名に00h, FFh, 3Ah(":")は含んではならない
 - 0バイト目が00hならKILLされたファイル、FFhなら未使用
・10バイト:ファイル属性
 - 00h:ソース形式(JISコード)
 - 01h:マシン語
 - 80h:バイナリ(中間言語)形式
 - それぞれ10hを加えると書き込み禁止
・11バイト:クラスタ番号
・12~15バイト:未使用
・1セクタあたり16ファイルの情報が書き込めるので、12セクタで最大192ファイルの領域
・フォーマット直後はFFh埋め

(b) Sector#13:ディスク属性
・0バイト:ディスク属性
 - 00h:(SET 装置番号," ") 属性なし
 - 10h:(SET 装置番号,"P") 書き込み禁止(Write Protect)
 - 20h:(SET 装置番号,"E"?) EBCDIC(未使用)
 - 40h:(SET 装置番号,"R") 書き込み確認(Read after Write)
・1~255バイト:未使用(00h)
・フォーマット直後は00h埋め

(c) Sector#14-16:FAT(256byte)×3セット
・クラスタ(8セクタ)単位でFAT情報1バイトを格納
 - 00h~8Bh:Nextクラスタ番号(=FAT内ポインタ)
 - C1h~C8h:ラストクラスタ ※右4bitの1~8:有効セクタ数
 - FEh:Reserved
 - FFh:未使用クラスタ
・フォーマット直後は、0~3, 72, 74, 140~255バイトがFEh、それ以外はFFh。
 上記256バイトが、Sector#14,#15,#16に3セット書き込まれる。

FAT256バイトはクラスタ順で並んでいる。
上の表はセクタ順に並べたのでTrack#18でFEhが連続しているように見えるが、クラスタ順が入れ子になっているため、Track#18(72-75セクタ)のFATはFEh, FFh, FEh, FFhの並び。
紛らわしいので注意...

-----
(2023/1/29)表の一部が間違っていたので訂正。Track#0.Side0(Sector#1-16)が単密度

2022年10月23日日曜日

フィルムコンデンサ交換

パソピア/7の持病フィルムコンデンサ、ついに我が家の初代パソピアでも破裂。
バンッと音がして、パソピアを見てみると煙がモクモク。部屋中、焦げ臭く。

まずは、パソピアの蓋を開けて電源ユニットの取り出し。
初代パソピアは床面ネジ1本と両脇の爪を開くと上カバーが外れる(爪は折れやすいので注意)

電源ユニットから基板取り出し。

電源スイッチの蓋を取り外すと、例のフィルムコンデンサが。
破裂してフィルムがめくれあがり、焦げたカスが散らばっている。
ヒューズは2つあって両方テスターでチェックしたが、どちらも切れてなかった。

半田ごてと半田吸い取り機でコンデンサを取り外し。
左は破裂したコンデンサで、右は以前のブログで紹介した6年前に用意していたコンデンサ

コンデンサの足の間隔を合わせて、基板に取り付け。

取り付けたらこんな感じ。

基板を電源ユニットに戻して、パソピア本体に取り付け。

動作確認。
ちゃんと動きました。
よかったー。


2022年9月23日金曜日

HX-34 FDD

最後にHX-34のFDDをチェック

昔(消費税が5%の頃)ハドフで購入した3.5inch 2DD

HX-34のドライブに入れてBASICでフォーマット
無事にフォーマットできた様子。

マニュアル読んでわかったのが、起動時のキー操作でワークエリアを変えられること。
一番左が通常起動。23430バイトのワークエリア
真ん中は[CTRL]キーを押しながら起動。1ドライブ用で動作し24988バイトのワークエリア
一番右は[SHIFT]キーを押しながら起動。ディスク用のワークエリアが無くなり、28815バイトのワークエリアになる。
パソピア7みたくHow many disk drives?とは聞かれないのね...

次にMSX-DOSディスクを作ってみる。
MSXformというアプリを使って、2DDフロッピーをフォーマット。

MSX MAGAZINE 永久保存版3の付属CDに入っているMSX PLAYerのBASICをインストール
インストールが成功したら、MSX PLAYer(BASIC)を起動。
メニューでDriver1→DISK Bを選択してRestart

MSX-DOSが起動したら、copy a: h:を実行。
フォーマットした2DDフロッピーをPCに挿入して、メニューのDrive1→REAL DRIVEを選択

copy h: a:で実ドライブの2DDフロッピーにDOSファイルをコピー。
dirでファイル書き込みを確認したら、PCからフロッピーを抜いてノッチを書き込み不可に。
これでMSX-DOSフロッピーが完成。

HX-34実機に、作成したフロッピーを入れて起動。
メインメモリが64KBなのでMSX-DOS version 1.03として起動したが、ファイルもちゃんと登録されている。

一旦これでHX-34は終了。O2の横に置きました。
HX-34が東芝最後の8bitパソピア。感慨深いです。
MSXはユーザーも多くて情報がたくさんあって助かります。

2022年9月11日日曜日

HX-34でRGB出力(続き)

前回、RGB21ピンの動作確認はXRGB-2plusで行ったが、

Classic PC ClubさんのCSYNCセパレーター(混合同期分離回路)を購入したので試してみた。

今回試したモニターはCENTURYのLCD-8000VとNECのMultiSync LCD-EA245WMi。
15kHzが表示できるLCDは貴重になってきた。

説明書には、以下のように記載が。
>> 付属の DC9V アダプターは、パソコン本体からの電源供給が弱い場合や、
>> モニター入力のインピーダンスが低い場合、または AVCont 線や Ys 線が
>> 通ってないケーブルを使用する場合にご利用ください。 
前回作成したケーブルではACアダプターを取り付けないと表示されず。
前回の自作ケーブルはAVCont線とYs線をHX-34側9pinの5Vと結線でしたが、今回は11pinの5Vと接続するケーブルを作ってみる。

今回のケーブルは短めにカット。こんな感じで組み立て。
こちらで試したところ、ACアダプタなしで使えたので、この配線にすることに。
ケーブル長の問題かピン結線の問題か分からないが、念のため前回のケーブルもこの配線にピンを変更した。

Signal Type Select Switchは、HSync側に変更。
Signal Width Adjustmentは変更なし。
Frequency Adjustmentを調整するとLCDに表示されました。

LCD-EA245WMiの表示はこんな感じ。
画質はXRGB-2plusより少しブレる感じ。

もう一つ、RGB21ピン-HDMI変換アダプターの3A-XRGBHDも試してみた。
こちらは、今回・前回どちらもケーブルでもACアダプタが必要だった。
画質はこれまでの中で一番安定している(揺らぎが少ない)
3A-XRGBHD > XRGB-2plus > CSYNCセパレータ
の順(主観)

動作チェックは、HAL研のぶた丸パンツ。

動画はCSYNCセパレータで表示したもの。
空から降ってくる卵をフライパンでキャッチして土管に入れるとヒヨコなる、的なゲーム。
ハマります。