2015年4月27日月曜日

パソピア7のVRAMイメージ表示

RGBイメージをパソピア7で表示する「LDVRAM (Load VRAM)」というアプリを用意しました。
ここからダウンロードできます。

LDVRAM/SVVRAMを保存したXPAC2の64KBイメージ「vram.bin」と、各アセンブラリスト「*.als」が入っています

ダウンロードしたzipファイルを展開し、「vram.bin」をSDカードに保存。
SDカードをXPAC2に装着した後、パソピア7の電源を入れます。
Slot4(ドライブ5)に展開する場合、コマンドプロンプト「CMD」を実行し、以下のコマンドを実行します。
ld 4 vram.bin

BASICにもどり、640×200ドットのスクリーンに変更し、LDVRAMを起動します。
width 80:screen 2
run"LDVRAM"

マシン語は自動で読み込まれます。
VRAMイメージを読み込みするMRAMのスロットが聞かれるので、
Select Slot Number.
[3] 64KB MRAM (DEVICE 6)
[4] 64KB MRAM (DEVICE 5)
「3」か「4」で指定します。

続いて、MRAMに読み込むRGBファイルのパスを聞かれますので、
SD Card Path Name?
SDカードからVRAMイメージを読み込む場合、RGBファイルのファイルパスを入力します。

※SDカードからファイルを読み込む場合、最初に指定したMRAMスロットのデータは、RGBファイルのデータに上書きされて消えるので注意してください。

何も入力せずにRETURNキーのみだと、SDカードからはファイルを読み込みません。

RGBファイルパスの中に###を入れると、000~255まで自動でインクリメントされ、ファイルを読み込み続けます。その場合、次に聞かれる
COUNT NUMBER (0-255)
で、カウント回数を入力します。1つのファイルしか読み込まない場合、数を入力せずRETURNキーのみを押してください。
VRAMイメージを読み込んだ後、画像が表示されます。

ファイル名に###が含まれていた場合、以下の順番で画像を繰り返し読み込みます。
(1) SDカードのRGBファイルを指定したMRAMにコピー
(2) MRAMからパソピア7のVRAMにデータ転送
(3) ファイル名の###をインクリメントして、(1)に戻る
SDカードからファイル読込みしている間にSTOPキーを押すと、中断することができます。

以下、動画です。
10年ほど前の、シアトル・ニューヨークなどの写真を読み込ませてみました。

2015年4月26日日曜日

パソピア7のVRAMイメージを作成

パソピア7のVRAMイメージを作成するWindowsアプリを作ってみました。
.NET Framework 4.0で動作する(はず)
ダウンロードはここから(2018/12/23更新)

まずEXEを起動して、右上の「...」ボタンを画像ファイルを読み込みます。
もしくは、画像をアプリの上にドラッグ&ドロップしても読み込みます。

読み込める画像フォーマットはBMP/JPEG。
パソピア7から吸い上げたVRAMイメージ(RGBファイル)も読み込むことができます。

正常に読み込んだ場合、画像が表示されます

Size欄には元画像のサイズがセットされているので、変更したい幅と高さを入力して「Resize」ボタンを押すと、そのサイズに画像がストレッチされます。

画像サイズを640x200ドットにして「Save ...」ボタンを押すと、パソピア7のVRAMイメージ(RGBファイル)に保存することができます。

但し、8色にダイレクトに減色されるので、以下のような画像になってしまいます

画像サイズを変更した後に「Reduce Color」ボタンを押すと、誤差拡散で8色に減色できます。
8色なので限界はありますが、写真の場合はこちらの方が自然かと。。
誤差拡散で8色に減色した画像はRGBファイル以外にも、BMP/PNGで保存できます。

作成したVRAMイメージ(RGBファイル)をパソピア7で表示すると、、、

パソピア7での表示については後述

2015年4月25日土曜日

パソピア7のVRAMをSDカードに保存

以前のブログでも紹介しましたが、パソピア7のVRAMアドレスは少々特殊で、

640×200ドットのSCREEN 2の場合、
1文字 = 横8ビット × 縦8バイト = 8バイト
1行 = 80文字 × 8バイト = 640バイト
1プレーン = 25行 × 640バイト = 16000バイト
1画面 = 3プレーン(R/G/B) × 16000バイト = 48000バイト

XPAC2には、64KB×2のMRAMエリアがあるので、MRAMを経由してVRAMデータをSDカードに保存してみる。
データは、以下のフォーマットでR/G/Bの順番に保存します。
0000h



3E7Fh
REDのVRAMデータ
(16000バイト)
3E80h

3FFFh
Filler (384バイト)
4000h



7E7Fh
GREENのVRAMデータ
(16000バイト)
7E80h

7FFFh
Filler (384バイト)
8000h



BE7Fh
BLUEのVRAMデータ
(16000バイト)
8E80h

BFFFh
Filler (384バイト)
各プレーンで384バイトの隙間が出来てしまうが、そのまま空けて保存します。

まずは、640×200ドットのスクリーンに変更

以下プログラムを入力して実行
10 'XPAC2 Save VRAM to RAMPAC2 (C) 2015 zak
20 CLEAR ,&HEFFF
30 S=&HF000:E=&HF0A2
40 IF PEEK(S)=&HC5 THEN 100
50 FOR I=S TO E
60   READ A$
70   POKE I,VAL("&H"+A$)
80 NEXT I
100 PRINT"Select Slot Number."
110 PRINT"[3] 64KB MRAM (DEVICE 6)"
120 PRINT"[4] 64KB MRAM (DEVICE 5)"
130 INPUT A$:IF A$<"3" OR A$>"4" GOTO 130
140 POKE E-2,ASC(A$)
150 INPUT "SD Card Path Name";A$
160 FOR I=0 TO 255
170   B$=MID$(A$,I+1,1)
180   IF B$="" THEN POKE E+I,0:GOTO 210
190   POKE E+I,ASC(B$)
200 NEXT I
210 CALL S
220 OUT &H1B,7:OUT &H19,0
230 FOR I=0 TO 255
240   OUT &H18,I
250   C=INP(&H1A)
260   IF (C=0) OR (I=0 AND CHR$(C)="O") THEN END
270   PRINT CHR$(C);
280 NEXT I
300 DATA C5,D5,E5,F5,F3,DB,22,E6,03,F6,04,D3,3C,3E,03,D3
310 DATA 0F,3A,A0,F0,D6,30,D3,1B,11,00,00,3E,08,D3,0D,3E
320 DATA 22,D3,0C,CD,79,F0,3E,44,D3,0C,CD,79,F0,3E,11,D3
330 DATA 0C,CD,79,F0,DB,22,E6,03,D3,3C,3E,02,D3,0F,FB,3A
340 DATA A2,F0,B7,28,2F,3E,07,D3,1B,11,00,00,21,9D,F0,0E
350 DATA 19,ED,51,0E,18,ED,59,7E,B7,28,09,23,D3,1A,1C,20
360 DATA F4,14,20,EB,3E,0F,D3,1B,3E,0F,3D,20,FD,DB,1A,F6
370 DATA 01,3C,28,F9,F1,E1,D1,C1,C9,21,00,80,0E,19,ED,51
380 DATA 0E,18,ED,59,3E,BE,BC,20,05,3E,80,BD,28,0A,7E,23
390 DATA D3,1A,1C,20,ED,14,20,E4,1E,00,14,14,C9,53,56,20
400 DATA 20,20,00

マシン語で直接入力する場合は、以下のチェックサムになります。

実行すると、保存するMRAMのスロット番号を聞かれるので、保存先のスロット番号を入力
SDカードにも保存する場合は、SDカードに49152バイトのデータを用意しておき、そのファイルへのパスを入力します。

指定したスロット番号のMRAMにVRAMデータが書込まれ、SDカードパスを指定していれば、MRAMに書き込んだデータが指定したファイルに書込みされます。

但し、パソピア7のVRAM Greenプレーンはテキストと共用のため、画面上に文字があった場合Greenデータの中にテキストデータも含まれてしまいます。

2015年4月14日火曜日

アルフォスをJoystickで

XPAC2を使うと、STICKやSTRIG命令などT-BASIC7で用意されているジョイスティック命令を利用することができます。

I/Oポートから直性データを取得する場合、以下のアドレスから操作します。
I/Oポートアドレス内容
19hジョイスティックアダプタ入力ポートA
1Ahジョイスティックアダプタ入力ポートB
I/Oポートを直接叩くのは、初代パソピアでも使えます。

リードするデータ内容は、デフォルト0xFFで、各ボタンが押されると、以下のビットがLowになります
bit7bit6bit5bit4bit3bit2bit1bit0
--トリガーBトリガーA右ボタン左ボタン下ボタン上ボタン

せっかくなので、Alphosでジョイスティックを利用できるようにしてみました。
以前紹介したパッチでは、純正のJOY PAC2でも動作しなかったので、全面見直し。
見直したパッチはこちら(277行目以降が、ジョイスティックのパッチ)
271 INPUT"Mnemonic? (1-255)",B:IF (B>0) AND (B<256) THEN POKE &HC80A,B-1
272 INPUT"Ground Attack? (Y/N)",C$:IF C$="N" OR C$="n" THEN POKE &HE587,0:POKE &HE588,0:POKE &HE589,0
273 INPUT"Interceptor? (Y/N)",C$:IF C$="N" OR C$="n" THEN POKE &HE590,0:POKE &HE591,0:POKE &HE592,0
274 INPUT"Sound? (Y/N)",C$:IF C$="N" OR C$="n" THEN POKE &HE596,0:POKE &HE597,0:POKE &HE598,0
275 INPUT"Endress? (Y/N)",C$:IF C$="Y" OR C$="y" THEN POKE &HE607,0
276 INPUT"High Speed? (Y/N)",C$:IF C$="Y" OR C$="y" THEN POKE &HD12D,&HC9
277 FOR I=1 TO 6:READ A$,B$:A=VAL("&H"+A$):POKE A-1,&HC3:POKE A,VAL("&H"+B$):POKE A+1,&HF1:NEXT
278 FOR A=&HF100 TO &HF1AA:READ B$:POKE A,VAL("&H"+B$):NEXT
279 OUT &H1B,1

390 DATA D2BA,56,E4AA,00,E54B,09,E5A5,12,E8F5,33,E920,46
400 DATA E5,21,AD,E4,22,31,F1,18,10,E5,21,4E,E5,22,31,F1
410 DATA 18,07,E5,21,A8,E5,22,31,F1,D3,30,DB,31,6F,DB,19
420 DATA 67,E6,03,20,02,CB,BD,7C,E6,0C,20,02,CB,BD,7D,E1
430 DATA C3,00,00,DB,31,C5,4F,DB,19,F6,F3,07,07,47,07,A0
440 DATA A1,C1,2F,C3,F7,E8,DB,31,C5,4F,DB,19,0F,0F,0F,0F
450 DATA A1,C1,2F,C3,22,E9,E5,4F,DB,19,2F,E6,3F,21,6B,F1
460 DATA 85,6F,7E,A1,32,26,EC,E1,C3,BC,D2,5F,5E,5B,5A,4F
470 DATA 4E,4B,4A,1F,1E,1B,1A,0F,0E,0B,0A,57,56,53,52,47
480 DATA 46,43,42,17,16,13,12,07,06,03,02,5D,5C,59,58,4D
490 DATA 4C,49,48,1D,1C,19,18,0D,0C,09,09,55,54,51,50,45
500 DATA 44,41,40,15,14,11,10,05,04,01,00

XPAC2の場合、Joystick1(SDカードの隣)の方にジョイスティックを接続してください。

上記のパッチを当てたALPHOSを起動。自分の好みに応じて、オプションを入力

オープニングが表示された後に、


ジョイスティックの
「SELECT」 (0bit[上]と1bit[下]が同時にLow)、
「RUN」 (2bit[左]と3bit[右]が同時にLow)
を押すと、ゲームスタートです。

ゲーム中の画面

十字キーで上下左右に移動、2ボタン対応のジョイスティックの場合、ボタンの配置は
Aボタン=Zキー(BOMB)
Bボタン=Xキー(MISSILE)
ジョイスティックもテンキーも、どちらも使えるようにしました。

ハイスコアの入力画面では

左右キーで文字選択、A or Bボタンで決定になります。

MRAMは64KBあるので、Alphosの場合、全てのプログラムを保存できます。
マシン語の保存先アドレスと、サイズは以下の通りです。
alpdat &H0000, &H6800
alpmap &H9000, &H2A00
alpobj &HC800, &H2200
Joystickパッチと合わせて、MRAMから起動できるように保存しておくと快適です。

2015年4月2日木曜日

メモリダンプ・編集ソフト「EDIT」

メモリダンプ・編集ソフト「EDIT」の使い方を説明します。
BASICプログラムなので、
LOAD"EDIT"
RUN
もしくは
RUN"EDIT"
で起動します。

どのメモリ内容を表示するか選択
「Select Device (0/3/4/5/6/7)?」と聞かれるので、以下数字のどれかを指定してReturnキーを押します。
0Pasopia RAMMRAMではなく、パソピア本体のメモリ
364KB RAM PAC2 #2MRAM (不揮発メモリ) 装置番号#6
464KB RAM PAC2 #1MRAM (不揮発メモリ) 装置番号#5
58KB RAM PAC2SRAM (漢字バッファ兼用)
64KB RAM PAC2SRAM
72KB RAM PAC2SRAM (SDカードバッファ兼用)

表示開始アドレスを16進数4桁で指定します。

指定したアドレスの256バイトのメモリ内容が表示されます。
カーソル移動して、テンキーでメモリ内容を編集することも可能

キー操作
[P] 前の256バイト表示
[N] 次の256バイト表示
[INS] カーソル上移動 (-16バイト移動)
[DEL] カーソル下移動 (+16バイト移動)
[←] カーソル左移動 (-1バイト移動)
[→] カーソル右移動 (+1バイト移動)
[Q]終了

パソピア7の10キー

 
↓↑
 

 
/
(F)
7
 
8
 
9
 
*
(F)
4
 
5
 
6
 
+
(D)
1
 
2
 
3
 
-
(C)
0
 
.
(A)
RETURN
(B)

初代パソピアの10キー
INS
 

 

 
CLS
(F)
7
 
8
 
9
 

(F)
4
 
5
 
6
 

(D)
1
 
2
 
3
 
-
(C)
0
 
.
(A)
RETURN
(B)

これで、MRAMやSRAMの内容を確認・編集することができます。

2015年4月1日水曜日

XPAC2メモリのフォーマット「FORMAT」

XPAC2メモリのフォーマットプログラム「FORMAT」の使い方を説明します。

※このプログラムによって、XPAC2内のデータが初期化され消去されます。十分に注意して実行して下さい

BASICで、
LOAD"FORMAT"
RUN
もしくは
RUN"FORMAT"
で起動します。
起動すると、マシン語が自動的に書き込まれます。

「Select Slot Number」と、フォーマットするスロット番号を聞かれるので、以下数字のどれかを指定して、Returnキーを押します。
364KB RAM PAC2 #2MRAM (不揮発メモリ) 装置番号#6
464KB RAM PAC2 #1MRAM (不揮発メモリ) 装置番号#5
58KB RAM PAC2SRAM (漢字バッファ兼用)
64KB RAM PAC2SRAM
72KB RAM PAC2SRAM (SDカードバッファ兼用)

「Are you sure to format Slot x?」と確認メッセージがでるので、フォーマットを続ける場合、「Y」を入力します。

フォーマットが成功した場合、フォーマットサイズが表示されます。