2014年8月3日日曜日

PAC2コンボカード

RAM PAC2から始まったパソピア用PAC2コンボカードは、これで一旦終了

主な機能は、以下のようになった
・128KB (64KB x 2) RAM PAC2
・SDカード (FAT対応)
・Joystickアダプタ
・漢字ROM PAC2

特徴は、不揮発メモリ(MRAM)を使ったので、純正RAM PAC2と異なり電池不要。
また、PAC拡張ユニットなしで1スロットに集約できたのも特徴

スロットの切り替えは、PAC拡張ユニットの命令がそのまま利用可能
スロット番号機能備考初代パソピアでの利用
1JoystickアダプタMSXタイプジョイスティックOUT &H1B,1
2漢字ROM PAC2
OUT &H1B,2
364KB RAM PAC2 #2 (ドライブ6)MRAM (不揮発メモリ)OUT &H1B,3
464KB RAM PAC2 #1 (ドライブ5)MRAM (不揮発メモリ)OUT &H1B,4 (デフォルト)
74KB RAM PAC2 #3 ※SRAMOUT &H1B,7

※スロット7は、SRAMのため電源OFF時にクリアされる
・SDカードアクセス時に、バッファとして使うため、メモリ内容は変更される
・フォーマットすると、4KBのRAM PAC2として利用可能
・T-BASIC7の場合、SLOT命令でドライブ切替え可能
 「SLOT 7」:ドライブ5は、4KB RAM PAC2 #3
 「SLOT 4」:ドライブ5は、64KB RAM PAC2 #1

T-BASIC7で利用する場合、特別な変更は必要ないが、
初代パソピアで利用する場合は、SLOT命令が使えないので、OUT命令で切替えが必要

SDカードの読み書きは、SLOT7のバッファを通してコマンドで制御する
戻り値もSLOT7のバッファに書き込まれる
機能コマンドパラメータ戻り値備考
MRAMのメモリ内容を
SDカードのファイルへセーブ
sv [slot] [file name][slot] : セーブ元
 5 : RAMPAC1: SLOT4: デフォルト装置番号5
 6 : RAMPAC2: SLOT3: デフォルト装置番号6
 7 : BUFFER: SLOT7
[file name] : SDカードセーブ先ファイル名
 "/"から始まった場合、絶対パス
Ok : セーブが成功した場合
(エラー文字列) : エラーが発生した場合
事前に、SDカードにファイルが存在する必要がある
ファイル名は、半角英数8.3形式
書き込み後も、タイムスタンプは更新されない
SDカードのファイルをロードld [slot] [file name][slot] : ロード先
 0 : SDカードの漢字ROMファイルをAVRに保存
 5 : RAMPAC1: SLOT4: デフォルト装置番号5
 6 : RAMPAC2: SLOT3: デフォルト装置番号6
 7 : BUFFER: SLOT7
[file name] : SDカードロード元ファイル名
 "/"から始まった場合、絶対パス
Ok : セーブが成功した場合
(エラー文字列) : エラーが発生した場合
漢字ROMは、ファイル読み込み後にフラッシュと
EEPROMに保存する
フォルダとファイルの
リストを表示
ls [path][path] : 読込元のSDカードのパスとファイル名(ファイル名 or フォルダ名)の一覧
(エラー文字列) : エラーが発生した場合
フォルダの場合は名称の最後に"/"が付く
カレントディレクトリの変更cd [path][path] : パス名(フォルダ名) : カレントフォルダ
(エラー文字列) : エラーが発生した場合
電源OFFされるまで、パスは保持される

64KBのRAM PAC2は、純正のフォーマッタでは対応できていない様子
純正フォーマッタを使わずに、フォーマット済みイメージのバイナリファイルを用意して、ld命令で各ドライブにマウントすれば64KBフルに使えるようになる。

Eagleで回路図を作ってみた。

結局、基板は2枚に。

この配線をもう一度作るのは、かなり厳しい。。
プリント基板が作れるとよいのだが。

2014年8月2日土曜日

漢字ROM組込み

ここまできたら、漢字ROMにも対応してみる。

ATmega1284Pは、128KBのフラッシュメモリ、4KBのEEPROM、16KBのSRAMを持っている。
パソピアの漢字ROMは128KBなので、漢字ROMも内蔵できるようにしてみる。

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ポート
アドレス
リード/ライト内容CAD1CAD0
18hライト漢字ROM PAC2下位アドレス8ビット LowLow
19hライト漢字ROM PAC2中位アドレス8ビット LowHigh
1Ahライト漢字ROM PAC2上位アドレス1ビット HighLow
18h-1Bhリード漢字ROM PAC2リードデータ8ビット --
上位・中位・下位の合計17ビットで128KBのアドレスを指定した後、18h~1Bhのどれかで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の方が速い