2016年6月16日木曜日

アルフォスマップ 修正版

以前紹介したアルフォスマップで、1面足りないとの指摘を受けました。。

確かに1面足りなかったので、全9面をアップし直します。


















あと、アルフォスを倒さず2週目で画面が少しおかしくなる、というのも再現できました。
(アルフォスの上に、キャラクタが3つ表示されています。)
















情報、ありがとうございました。 m(_ _)m

2016年5月28日土曜日

3XVにLEDライト

買ったとき(20年以上前)から、ずっと暗いと思っていた3XVのハロゲンライト。
Amazonで\2,390のLEDライトを購入。
海外から直接送られてきた。。

まずは、アッパーカウルとライトを取り外し。

ライトにはH4バルブが取り付けてあるので、ゴムカバーとバルブを取り外す。

ハロゲンライトを取り外したら、LEDライトに付属していた土台を装着。

ゴムカバーを装着した後に、LEDライトを差し込んで固定。
これなら水も入りにくいし、ヒートシンクも外に出ている。

カウルと一緒に車体にセット。
明るくなった!!

HIDより手軽でよいのだが、耐久性とか安全性とか心配。
今のところ問題ないが、どれくらい持つのか。。

2016年2月7日日曜日

PC-U6000 Heavy Metal

高松製作所さんのUSB接続ケーブルが手に入ったので、以前のブログで紹介したHeavy Metalを動かしてみる。


Windows PCとポケコンをUSBケーブルで接続。


USBシリアル変換のデバイスドライバをインストールすると、自分の環境ではCOM3と認識されたので、APLINKSはCOM3にして仮想ドライブLを作成


エミュレータで使うかもしれないので、ROMイメージを吸出し、仮想ドライブ経由でPCに転送


今度はFDDから読み込んだHeavy MetalのイメージをPCからポケコン実機に転送

20年ぶりくらいに、ゲームを動かしてみた。

相変わらず、このゲームは素晴らしい!



フィルムコンデンサ

ブログに質問が来たので情報共有。

Twitterなどを見ていると、パソピアの電源でフィルムコンデンサが破裂する症状がある様子。
もう30年選手なので、寿命に達している固体も多いと思う。

下の写真は、初代パソピアの電源部


黄色いところがフィルムコンデンサで、0.1uFと見える。

ツイートなどを参考にさせてもらうと、EQC-UA104K 0.1uF/275Vあたりがつかえそうとのこと。

幸い、うちのパソピア達は、まだその症状に出会っていないが、念のために在庫を確保した。



2015年5月17日日曜日

Toshiba T100

以前、XPAC2の動作検証で少し紹介したT100
ebayで購入してから、あまり使っていなかったので、少し調べてみる。

箱はボロボロだったが、、

中身は綺麗。
パソピアとキー配列が違う。。

以前作成したROM吸出しプログラムで、BASIC ROMを吸い出す。
ちゃんと、T-BASIC Ver1.1と認識した

フォントROMの吸出しはできないので、昔紹介した手動打ち込みの方法でフォント作成する。
画面に全文字列を表示して、エディタを使ってプチプチ文字データを作成する。

エミュレータのROMファイルを差し替えて起動すると、問題なく起動。
ここだけだと、パソピアと区別つかない。。

ディスクを吸い出して、D88ファイルを作成。
エミュレータだと一部化けているが、CP/Mも動いた

T-DISK BASICも大丈夫

世界時計のアプリ

こんなアプリも入っていた。

これかなぁ。。

サンプルプログラムを動かしてみた。

パソピアのサンプルとちょっと違う。

XPAC2の動作確認もできたし、T100は一旦しまっておこう。

2015年5月16日土曜日

パソピア7でBIOSアクセス

パソピア7にはBIOSが搭載されているので、BIOSコールを試してみる

BIOSを呼びだす場合は、Cレジスタにファンクション番号をセットした後、0005hをコールする。
ファンクション番号によっては、各レジスタに必要なパラメータをセットしておく

BIOSコールを呼び出すBASICプログラムを用意してみました。
100 'Pasopia7 BIOS Call Test (C) 2015 zak
110 CLEAR ,&HEFFF

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

160 FOR I=0 TO 6
170   IF I=5 THEN PRINT"H"; ELSE IF I=6 THEN PRINT"L"; ELSE PRINT CHR$(I+65);
180   INPUT " Register &H",A$
190   POKE &HF034-I,VAL("&H"+RIGHT$("00"+A$,2))
200 NEXT I

210 A=&HF000:CALL A
220 PRINT"-----"

230 FOR I=0 TO 6
240   IF I=5 THEN PRINT"H"; ELSE IF I=6 THEN PRINT"L"; ELSE PRINT CHR$(I+65);
250   A=PEEK(&HF034-I):
260   PRINT " Register &H";RIGHT$("0"+HEX$(A),2)
270 NEXT I
280 A=PEEK(&HF035)
290 PRINT "F Register &H";RIGHT$("0"+HEX$(A),2)
300 END

310 DATA C5          :'F000 PUSH BC
320 DATA D5          :'F001 PUSH DE
330 DATA E5          :'F002 PUSH HL
340 DATA F5          :'F003 PUSH AF
350 DATA 2A,2E,F0    :'F004 LD HL,(F02Eh)
360 DATA ED,5B,30,F0 :'F007 LD DE,(F030h)
370 DATA ED,4B,32,F0 :'F00B LD BC,(F032h)
380 DATA 3A,34,F0    :'F00F LD A,(F034h)
390 DATA CD,05,00    :'F012 CALL BIOS
400 DATA 32,34,F0    :'F015 LD (F034h),A
410 DATA ED,43,32,F0 :'F018 LD (F032h),BC
420 DATA ED,53,30,F0 :'F01C LD (F030h),DE
430 DATA 22,2E,F0    :'F020 LD (F02Eh),HL
440 DATA F5          :'F023 PUSH AF
450 DATA C1          :'F024 POP BC
460 DATA 79          :'F025 LD A,C
470 DATA 32,35,F0    :'F026 LD (F035h),A
480 DATA F1          :'F029 POP AF
490 DATA E1          :'F02A POP HL
500 DATA D1          :'F02B POP DE
510 DATA C1          :'F02C POP BC
520 DATA C9          :'F02D RET
ちょっと長くなってしまいましたが、エミュレータが使える方はコピペができるので、手で打ち込むより楽で確実です。。

このプログラムを使って、BIOS経由でFDDの情報を読み込んでみます。
FAT情報がTrack18(12h), Head0, Sector1に保存されているので、その内容を読み込んでみます

まずは起動時の「How may disk drives」に、ドライブ数を指定。
FDをセットした後、上記プログラムをRUN

各レジスタにセットするパラメータを聞かれるので、A~Lレジスタの値を入力

FDDパラメータのセット(ファンクション番号18=12h)における、各レジストリの値は以下の通り。
  • A=&H00 (0-2bit:DriveNumber, 3-4bit:0, 5-6bit:DriverType, 7bit=DiskSide) 
  • B=&H10 (Read/Write SectorNumber)
  • C=&H12 (FDD Parameter Set: BIOS Function Number 18=12h)
  • D=&H12 (Track Number: 12h=18)
  • E=&H01 (Sector Number)
  • H=&HE0 (Distnation Address: HL=E000h)
  • L=&H00

Lまで入力してRETURNを押すと、BIOSコールを実行し、戻ってきたレジストリを表示して終了する

続いてディスク読み込み(ファンクション番号19=13h)を行う
パラメータは無いので、Cレジストリに13hのみセットして実行

キャリーフラグ(Fレジスタの0bit)が0なら成功、1なら失敗
Aレジスタが30h(文字の"0")の場合は成功、31h(文字の"1")の場合はNotReadyです

成功した場合は、出力先アドレス(HL)にE000hをダンプしてみるとFAT情報が書き込まれています

FAT情報には、16バイト毎に以下のファイル情報が書かれています
  • 0-8byte:ファイル名
  • 9byte:ファイル属性(BSAVEで保存したファイルは01h)
  • 10byte:クラスタ番号
  • 11-15byte:未使用(FFh)

クラスタ番号は、以下の順番で並んでいる
クラスタ番号ヘッドトラックセクタサイズD88の並び順
00018単密度:128バイト0
1118倍密度:256バイト2
20916単密度:128バイト1
31916倍密度:256バイト3
40118倍密度:256バイト4
51186
609165
719167
・・・
6801718倍密度:256バイト68
6911870
70091669
71191671
7201818倍密度:256バイト72
7311874
74091673
75191675
・・・
13603418倍密度:256バイト136
137118138
1380916137
1391916139
※セクタ番号は、0~ではなく、1~16なので注意
※トラック0・ヘッド0のみ単密度で、1セクタあたり128バイトとなる。
※D88ファイルに吸い出した場合、トラックx・ヘッド0・セクタ1~16 → トラックx・ヘッド1・セクタ1~16の順番で記録されるため、クラスタ番号と並び順が異なる

先ほどダンプしたファイル情報の場合、最初のファイルのクラスタ番号が47h(=71)なので、
トラック:17
ヘッド:1
セクタ:9-16
を見に行くと、ファイルのデータ中身が見えるはず。。

BASICのDSKI$()関数では、トラック0・ヘッド0は取得できない制限がある(ここだけ単密度だから?)ので、どうしても読みたい場合はBIOSを直接コールすると取得できるはず。

試してみると、

結果を見ると、16セクタ×128バイト(単密度)=2048(800h)バイトぶんのデータがE000h~E7FFhに書き込まれていた。


2015年5月14日木曜日

フロッピーに保存したマシン語ファイルの情報

マシン語をバックアップする場合、開始アドレスとデータサイズが必要。
フロッピーにマシン語ファイルを保存した場合、アドレスとサイズを調べるのは難しい。

5インチ2Dのアドレスとサイズを表示するプログラムをパソピア7で組んでみた。
10 'XPAC2 Machine Language File Information (C) 2015 zak
20 INPUT"Device Number? (1 or 2) ",DEVICE
30 FIELD#0,255 AS FAT$
40 FOR SECTOR=1 TO 12
50   FOR I=0 TO 15
60     T1$=DSKI$(DEVICE,0,18,SECTOR)
70     M=ASC(MID$(FAT$,I*16+1,1))
80     IF (M<>0) AND (M<>255) AND(M<>58) THEN GOSUB 130
90   NEXT I
100 NEXT SECTOR
110 END
120 'Find File
130 PRINT MID$(FAT$,I*16+1,9);" ";
140 ATTR=ASC(MID$(FAT$,I*16+10,1))
150 IF (ATTR=&H80) OR (ATTR=&H81) OR (ATTR=&H90) THEN PRINT"[BASIC]";
160 IF (ATTR=&H01) OR (ATTR=&H11) THEN PRINT"[MachineLanguage]";:GOSUB 200
170 PRINT""
180 RETURN
190 'Find Machine Language
200 CLUSTER=ASC(MID$(FAT$,I*16+11,1))
210 TRACK=CLUSTER\4
220 TSECTOR=((CLUSTER MOD 4)\2)*8+1
230 THEAD=CLUSTER MOD 2
240 FIELD#0,4 AS SIZE$
250 T2$=DSKI$(DEVICE,THEAD,TRACK,TSECTOR)
260 START=ASC(MID$(SIZE$,2,1))*256+ASC(MID$(SIZE$,1,1))
270 LAST=ASC(MID$(SIZE$,4,1))*256+ASC(MID$(SIZE$,3,1))
280 PRINT" START:&H";HEX$(START);
290 PRINT" SIZE:&H";HEX$(LAST-START);
300 RETURN

起動時の「How may disk drives」に、ドライブ数を指定。
「width 80」にしておいたほうが見やすい。

実行すると、確認するフロッピーの入っているドライブ番号を聞かれるので入力。

マシン語の場合は、開始アドレスと記録サイズが16進数で表示される。

フロッピーに保存できる最大ファイル数(192)を全てチェックするまで時間がかかるので、気長にお待ち下さい。。

これがわかれば、FDのファイルをXPAC2にデータ保存しやすくなります。