640×200ドットのSCREEN 2の場合、
1文字 = 横8ビット × 縦8バイト = 8バイト
1行 = 80文字 × 8バイト = 640バイト
1プレーン = 25行 × 640バイト = 16000バイト
1画面 = 3プレーン(R/G/B) × 16000バイト = 48000バイト
データは、以下のフォーマットで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バイト) |
まずは、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 件のコメント:
コメントを投稿