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データの中にテキストデータも含まれてしまいます。

0 件のコメント:

コメントを投稿