ATmega1284Pは、128KBのフラッシュメモリ、4KBのEEPROM、16KBのSRAMを持っている。
パソピアの漢字ROMは128KBなので、漢字ROMも内蔵できるようにしてみる。
SDカードから漢字ROMを読み込んで、フラッシュメモリに書き込めるようにブートローダに対応する。
プチFatFsに対応したためプログラムサイズは8KB近くになった。
ブートローダ領域は、ATmega1284P最大の4096ワード(8KB)にセットする。
LockとFuseビットは、以下のように
これで128KBのフラッシュメモリは、漢字ROM用の応用プログラム領域120KB+プログラム用のブートローダー領域8KBに分割された。
このままだと漢字ROM領域が8KB不足するので、EEPROM 4KBに圧縮して保存する。
一番圧縮がかかりやすい0x6000~0x7FFFの領域をEEPROMに保存することにする。
EEPROMに圧縮して保存されたデータは、AVR起動時に解凍されて8KBのSRAM領域に展開される
パソピアから漢字データの要求があった場合、アドレスが0x6000~0x7FFFならSRAMから、それ以外はフラッシュ領域からデータを読み込むようにする
漢字ROM PAC2の場合、I/Oポートは以下
上位・中位・下位の合計17ビットで128KBのアドレスを指定した後、18h~1Bhのどれかで8ビットデータをリードする。
続いて、漢字ROMをATmega1284Pへ書き込み。
漢字ROMの吸出しは、昔のブログを参照
使用するROMは、初代パソピア用(PA7246)、パソピア7用(PA7247)、どちらでもOK。
ラベルのシールは異なるが、ROMデータは同じっぽい。
テストプログラムを作って、パソピア7で動作確認
問題なさそう。
初代パソピア用(PA7246)は、ROM BASIC Ver1.1用のサブルーチンがテープで付属している
初代パソピア(Ver1.1)でも、サブルーチンを使って漢字表示できた
表示スピードは、やはりパソピア7の方が速い
SDカードから漢字ROMを読み込んで、フラッシュメモリに書き込めるようにブートローダに対応する。
プチFatFsに対応したためプログラムサイズは8KB近くになった。
ブートローダ領域は、ATmega1284P最大の4096ワード(8KB)にセットする。
LockとFuseビットは、以下のように
Lock Bit 11111111 |||||||+-- LB1 ||||||+--- LB2 |||||+---- BLB01 ||||+----- BLB02 |||+------ BLB11 ||+------- BLB12 ++-------- - | 0xFF 1 (非プログラム) LB1~0=11:フラッシュとEEPROMメモリに対する一般保護用施錠ビット:施錠しない 1 (非プログラム) 1 (非プログラム) BLB02~01=11:フラッシュメモリの応用領域に対する一般保護用施錠ビット:施錠しない 1 (非プログラム) 1 (非プログラム) BLB12~11=11:フラッシュメモリのブートローダー領域に対する一般保護用施錠ビット:施錠しない 1 (非プログラム) 1 (非プログラム) |
Extended 11111100 |||||||+-- BODLEVEL0 ||||||+--- BODLEVEL1 |||||+---- BODLEVEL2 +++++----- - | 0xFC 0 (プログラム) 低電圧検出(BOD)リセットの制御と検出電圧選択 111:無し,110:1.8V,101:2.7V,100:4.3V 0 (プログラム) BODLEVEL2~0=100:低電圧検出(4.3V)リセット 1 (非プログラム) 1 (非プログラム) |
High 11011000 |||||||+-- BOOTRST ||||||+--- BOOTSZ0 |||||+---- BOOTSZ1 ||||+----- EESAVE |||+------ WDTON ||+------- SPIEN |+-------- JTAGEN +--------- OCDEN | 0xD8 0 (プログラム) ブートローダーを使用。 0 (プログラム) BOOTSZ1~0=00:ブートローダ領域=4096、ページ数=32、ブートリセットアドレス=$F000 0 (プログラム) 1 (非プログラム) 消去でEEPROMを 1:消去, 0:保持 1 (非プログラム) WDTはWDTCSR(ウォッチドックタイマ制御レジスタ)で許可 0 (プログラム) シリアルプログラミング許可 1 (非プログラム) 1:JTAG禁止, 0:JTAG許可 1 (非プログラム) JTAGデバッグを 1:無効, 0:有効 |
Low 11110111 |||||||+-- CKSEL0 ||||||+--- CKSEL1 |||||+---- CKSEL2 ||||+----- CKSEL3 |||+------ SUT0 ||+------- SUT1 |+-------- CKOUT +--------- CKDIV8 | 0xF7 1 (非プログラム) CKSEL0=1,SUT1~0=11:外部クリスタル発振子、低速上昇電源 1 (非プログラム) CKSEL3~1=011:外部クロック 0.4~20MHz 1 (非プログラム) 0 (プログラム) 1 (非プログラム) 1 (非プログラム) 1 (非プログラム) システムクロック出力許可 (1:不許可) 1 (非プログラム) システムクロック8分周選択はしない |
これで128KBのフラッシュメモリは、漢字ROM用の応用プログラム領域120KB+プログラム用のブートローダー領域8KBに分割された。
このままだと漢字ROM領域が8KB不足するので、EEPROM 4KBに圧縮して保存する。
一番圧縮がかかりやすい0x6000~0x7FFFの領域をEEPROMに保存することにする。
EEPROMに圧縮して保存されたデータは、AVR起動時に解凍されて8KBのSRAM領域に展開される
パソピアから漢字データの要求があった場合、アドレスが0x6000~0x7FFFならSRAMから、それ以外はフラッシュ領域からデータを読み込むようにする
漢字ROM PAC2の場合、I/Oポートは以下
I/Oポート アドレス | リード/ライト | 内容 | CAD1 | CAD0 |
---|---|---|---|---|
18h | ライト | 漢字ROM PAC2下位アドレス8ビット | Low | Low |
19h | ライト | 漢字ROM PAC2中位アドレス8ビット | Low | High |
1Ah | ライト | 漢字ROM PAC2上位アドレス1ビット | High | Low |
18h-1Bh | リード | 漢字ROM PAC2リードデータ8ビット | - | - |
続いて、漢字ROMをATmega1284Pへ書き込み。
漢字ROMの吸出しは、昔のブログを参照
使用するROMは、初代パソピア用(PA7246)、パソピア7用(PA7247)、どちらでもOK。
ラベルのシールは異なるが、ROMデータは同じっぽい。
SDカードに吸い出した漢字ROMのデータを書き込んでおき、以下の命令でフラッシュROMとEEPROMへ書き込みできるようにした
ld 0 [file name] : SDカードの漢字ROMファイルをAVRへロード
[file name] : SDカード漢字ROMファイル名
"/"から始まった場合、絶対パス
[戻り値]
Ok : ロードが成功した場合
(エラー文字列) : エラーが発生した場合
テストプログラムを作って、パソピア7で動作確認
問題なさそう。
初代パソピア用(PA7246)は、ROM BASIC Ver1.1用のサブルーチンがテープで付属している
初代パソピア(Ver1.1)でも、サブルーチンを使って漢字表示できた
表示スピードは、やはりパソピア7の方が速い
0 件のコメント:
コメントを投稿