2015年5月4日月曜日

XPAC2に書き込む漢字ROMデータの作成

XPAC2は、Atmelの8ビットマイコン「ATMega1284P」を搭載しています。
このマイコンは、
・128KBフラッシュメモリ(書き換え回数 1万回)
・4KB EEPROM(書き換え回数 10万回)
・16KB SRAM
のメモリを持っています。

SDカードのFAT処理などのメイン処理(8KB)はフラッシュメモリのブートローダー領域(1E000h-1FFFFh)に書き込まれていますが、残り120KBがもったいない、、、ということで、ここに漢字ROMデータを書き込むこととします。

漢字ROMは128KBなので、8KB不足するぶんはSRAMの8KBを漢字データ領域として利用し、電源起動時にEEPROM(4KB)からデータを読み込むようにします。
まとめると、、
漢字ROMアドレスデータ保持領域備考
00000h-05FFFhフラッシュメモリ(00000h-05FFFh)
06000h-07FFFhSRAM(8KB)起動時にEEPROM(4KB)からデータをSRAMに展開
起動後は、スロット番号5でSRAMデータ読み書き可能
08000h-1FFFFhフラッシュメモリ(06000h-1DFFFh)以降のフラッシュメモリ(1E000h-1FFFFh)はブートローダー領域として使用
EEPROM(4KB)に8KBの漢字データを圧縮して保存するため、圧縮効率がよい漢字データ領域(06000h-07FFFh)をSRAMに持たせることにしました。

出荷時、EEPROMには付属ソフトが記録されており、スロット番号5で利用できます。
漢字ROMデータの一部がEEPROMに圧縮して保存されるため、漢字ROMデータを書き込むと、出荷時の付属ソフトは消えますので、ここを参考にバックアップしておいてください。


漢字ROMイメージファイルの作成方法は2つあります。

(1) 互換ROMデータを作成する
武田氏のパソピアエミュレータサイトに、互換漢字ROMデータ作成ツール(mkfont.exe)があります。
Windowsのフォントから互換漢字ROMデータ (131,072バイト)を作成できます。

(2) 漢字ROM PAC2から吸い出す
パソピア用(PA7246)とパソピア7用(PA7247)、どちらからでも同じROMデータを作成できます。

以前紹介した吸出し方法でも問題ありませんが、Wave経由なのでデータ化けなどが心配です。
せっかくSDカードがついているので、SDカードを保存する方法を考えます。

パソピア/7に漢字ROMを装着し、以下のプログラムを実行します。
10 'XPAC2 Save KanjiROM to RAM (C) 2015 zak
20 CLEAR ,&HEFFF
30 FOR I=&HF000 TO &HF02D
40 READ A$
50 POKE I,VAL("&H"+A$)
60 NEXT I
70 DEF FNF$(X)=RIGHT$("00"+HEX$(X),3)
100 PRINT"Select Save Area."
110 FOR I=1 TO 8
120 PRINT"["+HEX$(I)+"] "+FNF$((I-1)*64)+"00h-"+FNF$(I*64-1)+"FFh"
130 NEXT
140 INPUT A$:IF A$<"1" OR A$>"8" GOTO 140
150 A=VAL(A$)
160 POKE &HF02E,0
170 POKE &HF02F,&H40*((A-1) MOD 4)
180 POKE &HF030,-(A>4)
190 A=&HF000:CALL A
200 DATA C5,D5,E5,F5,3E,02,D3,1B,3A,30,F0,D3,1A,21,00,A0
210 DATA ED,5B,2E,F0,0E,19,ED,51,0E,18,ED,59,DB,1A,77,23
220 DATA 1C,20,F7,14,3E,E0,BC,20,EB,F1,E1,D1,C1,C9

「Select Save Area」でエリア番号を指定し、漢字ROMのデータ16KBをメモリに保存。カセットに保存する場合は「bsave#-1,"KANJI",&HA000,&h4000」、フロッピーディスクに保存する場合は、「bsave"KANJI*",&HA000,&h4000」を実行します。(*には、選択したエリア番号を指定する) これを1~8まで繰り返し、合計8ファイルをカセットもしくはディスクに保存します。

続いてPCを使って16384バイトのファイルを8つ作成し、SDカードに保存します。
Windows XP以降のコマンド・プロンプト上で作成する場合、以下のコマンドで作成できます。
fsutil file createnew kanji1.rom 16384
fsutil file createnew kanji2.rom 16384
fsutil file createnew kanji3.rom 16384
fsutil file createnew kanji4.rom 16384
fsutil file createnew kanji5.rom 16384
fsutil file createnew kanji6.rom 16384
fsutil file createnew kanji7.rom 16384
fsutil file createnew kanji8.rom 16384

XPAC2に8つのファイルが保存されたSDカードをセットし、パソピアに装着します。
以下のプログラムを入力し、「SAVRAM」というファイル名でXPAC2に保存します。(スロット3以外に保存します)
10 'XPAC2 Save Pasopia 64KB RAM to MRAM (C) 2015 zak
20 CLEAR ,&HEFFF
30 FOR I=&HF000 TO &HF021
40 READ A$
50 POKE I,VAL("&H"+A$)
60 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 OUT &H1B, ASC(A$)
150 A=&HF000:CALL A
200 DATA C5,E5,F5,3E,02,D3,3C,21,00,00,0E,19,ED,61,0E,18
210 DATA ED,69,7E,D3,1A,2C,20,F8,24,20,EF,AF,D3,3C,F1,E1
220 DATA C1,C9

先ほど保存した漢字ROMデータを読み込みます。
・カセットから読み込む場合は、「bload#-1,"KANJI",0」
・フロッピーディスクから読み込む場合は、「bload"KANJI*",0」
を実行します。ロードしたら「SAVRAM」を実行し、スロット3のMRAM領域にコピーします。
続いてコマンドプロンプト「CMD」から以下のコマンドを実行し、SDカードに漢字ROMデータを保存します。
sv 3 kanji1.rom
これを8回繰り返し、SDカードのkanji1.rom~kanji8.romに漢字ROMデータを記録させます。

最後にPCを使ってkanji1.rom~kanji8.romを結合、128KBの漢字ROMデータ作成します。
Windowsのコマンド・プロンプト上で結合する場合、以下のコマンドで作成できます。
copy /b kanji1.rom+kanji2.rom+kanji3.rom+kanji4.rom+kanji5.rom+kanji6.rom+kanji7.rom+kanji8.rom kanji.rom

作成した漢字ROMデータをSDカードに保存する場合、XPAC2付属のコマンドプロンプト「CMD」で漢字ROMを書き込みします。
もし漢字ROMデータが、「kanji.rom」というファイル名でSDカードに保存されている場合、
sv 2 kanji.rom
というコマンドになります。
これでATMega1284PのフラッシュメモリとEEPROMに、漢字ROMデータが保存されます。

もし出荷時のデータに戻したい場合は、ここから「eep.rom」ファイルをダウンロードして、
sv 2 eep.rom
で戻すことができます。
出荷時に保存してあるプログラムは、行番号が1桁になっていたり、無理に1行にまとめたり、読みにくくなっていますが、4KBのEEPROMに圧縮して入れなければならなかったので、このようなプログラムになってしまいました。。

0 件のコメント:

コメントを投稿