2014年6月4日水曜日

ATmega1284P

AVR側のロジックを書いてみる
パソピアのCSEL2をAVRのINT1に接続して、外部割込みでロジックを書いてみた。

OUTとIN命令を続けて実行すると、以下のようになった


MRAMアクセスのロジックなどいれず、単純に0を返答しているだけだが、後半のIN命令がギリギリのタイミングになっている。
CRDの場合に、MRAMの値を返答するようなロジックを入れると、間違いなくオーバーする。

原因は、外部割込みが発生してから処理が実施されるまで、最低で4clockかかること。更に、その前に実行中の命令によっては、4clock以上の待ちが発生してしまう場合がある。

そこで割り込みを諦めて、ポーリングでCSEL2待ちすることで4clockの待ち時間を減らすようにする
RAMPAC_SCAN_POLLING:
  sbic _SFR_IO_ADDR(PIND), PD2 ; PD2=0(CSEL2=Low)でスキップ ; clock=1/2,3
  rjmp RAMPAC_SCAN_POLLING ; RAMPAC12_SCAN_POLLINGへ戻る ; clock=2
  sbic _SFR_IO_ADDR(PIND), PD3 ; PD3=0(CRD=Low)でスキップ ; clock=1/2,3
  rjmp RAMPAC_NOT_READ_DATA ; RAMPAC12_NOT_READ_DATAへ ; clock=2

RAMPAC_READ_DATA:
  ;PD2=0(CSEL2=Low)でPD3=0(CRD=Low)の場合 = PasopiaのIN命令
  ・・・

RAMPAC_NOT_READ_DATA:
  ;PD2=0(CSEL2=Low)でPD4=0(CWR=Low)の場合 = PasopiaのOUT命令
  ・・・
これで、若干のロジックを入れても、IN命令の応答が間に合うようになった。
AVRのロジックでIN命令が間に合うことが確認できたので、40pin DIPソケットの横につけていた8bitバスバッファ(541)を外した

OUT &H18(下位アドレスセット)の場合、MRAMのA0-A7に接続されている574の8bitをラッチする
OUT &H19(上位アドレスセット)の場合、MRAMのA8-A15に接続されている574の8bitをラッチする
アドレスをラッチした後、MRAMから該当アドレスのデータを取得して、PortAの8bitにセットしておく。
IN命令が来た時には、PortAをOutputに切り替え、CSEL2がHighになったらPortAをInputに戻す
これで16bitアドレスのメモリ領域(64KByte)を制御できる。

MRAMの容量は128KByteなので、バンク切り替えできるようにする。
MRAMの最後のアドレスピン(A16)は、AVRのD7ピンから制御できるようにする

パソピア7は、PAC拡張ユニットを2つ接続して、PAC2スロットを7つまで拡張できる
(広告には64KBのRAM PAC2も記載されているが見たこと無い。。本当に発売されたのだろうか。。)

7スロット中、どのスロットのRAM PAC2を利用するかは、パソピア7のSLOT命令で指定する
SLOT [R1], [R2], [K], [J]
 [R1] : RAM PAC2 #1が装着されるスロット番号。ドライブ5で利用される
 [R2] : RAM PAC2 #2が装着されるスロット番号。ドライブ6で利用される
 [K] : 漢字ROM PACが装着されるスロット番号
 [J] : ジョイスティック装置が装着されるスロット番号
デフォルトは、SLOT 4, 3, 2, 1

スロット番号は、OUT &H1Bで指定される
OUT &H1Bで書き込まれたデータの7bitが0の場合、0-2bitの値がスロット番号となる。

OUT &H1B, 4の場合、スロット4が指定されたことになるので、ドライブ5で利用されるMRAMアドレス(A16=Low)を指定する
OUT &H1B, 3の場合、スロット3が指定されたことになるので、ドライブ6で利用されるMRAMアドレス(A16=Low)を指定する
これで、ドライブ番号を5 or 6を指定することで、MRAMの領域を切り替えるようになった。
初代パソピアは、ドライブ5までしか用意されていないので、ドライブ6を使いたい場合はOUT &H1B,3を直接叩いた後、FILES/LOAD/SAVEを呼ぶ必要がある

2014年5月31日土曜日

MRAM

本家のRAM PAC2は電池でメモリ内容を保持するが、電池が切れるとメモリ内容が消えてしまうのが欠点。。
そこで、電池切れの心配がない不揮発メモリ、Everspin社のMRAM(MR0A08B)を使う。
容量は1Mbit(128KByte)、アクセスタイムは35ns
シリアルSPIだと、データ読み書きが間に合わないため、パラレルインターフェイスを選ぶ。

製作にとりかかる。
まずは、基板とソケットなどを準備

20pinコネクターを取り付け。

AVRはATmega1284Pを使うので、40pin DIP用のソケットを取り付ける
AVRは、定格最大の20MHzで動かすため、5Vのまま利用。
AVR出力側のピンと20pinコネクターの間に、8bitバスバッファ(541)を挟んでおく。

32-SOICのMRAMは、変換基板に乗せてDIPに
MRAMは3.3V動作のため、レギュレータも用意する。
AVRを取り外しやすいように、40pinソケットの上にZIFソケットを乗せる

アドレスラッチ用の574を2つ用意。(I/Oポート18h用と19h用)
AVRは5V、MRAMは3.3Vなので、5Vトレラントのチップを選択。
こちらも、DIP変換基板にのせる。

20pin用が売ってなかったので、28pin用の前後を削って20pin用にした。

MRAMとATmega1284Pの間に、信号の向きを制御するバス変換(245)と、8bitバスバッファ(541)を取り付け。これらも、5Vトレラントのを使う。
20pinのDIP変換基板を手に入れたので、こちらはそのまま利用。

5VトレラントICと、ATmega1284Pをのせるとこんな感じ。
16pin x 2列のソケットに、DIP変換されたMRAMが乗る

これで基板は一旦完成。

2014年5月26日月曜日

RAM PAC2を調べてみる

16KBのRAM PAC2を分解してみる。
ラベル面にはネジが2つ。1つはラベルに隠れているが、ラベルを破いて外した。
ラベルの無い方は、蓋を固定するネジを外す。
蓋は少し横にスライドさせてから持ち上げると取れる

コネクタ側にあるツメを少し押しながら開くと、蓋が外れる

基板を外すとこんな感じ
上がラベル面。
下が電池蓋のある面

基板にピン番号が書いてあるので、配線を追ってみると、ソケットとピンの番号は以下の様子

RAM PAC2の場合、I/Oポートは以下
I/Oポート
アドレス
リード/ライト内容CAD1CAD0
18hライトRAM PAC2 下位アドレス8ビットLowLow
19hライトRAM PAC2 上位アドレス8ビットLowHigh
1AhライトRAM PAC2 ライトデータ8ビットHighLow
1BhライトRAM PAC2 PIOコントロール8ビット
(RAM PAC2 4KBのみ必要)
HighHigh
18h - 1BhリードRAM PAC2 リードデータ8ビット

RAM PAC2のサイズとアドレスの関係は、以下


ロジアナで以下の挙動を計測
OUT 19h, 00h
IN 1Ah

ピンと信号線の関係も含めて、以下のようになった

CSEL2(14pin)がLowになった時点のCAD0(12pin)とCAD1(11pin)で、I/Oポートアドレスを判別できる。
OUT命令の場合はCWR(16pin)がLow、IN命令の場合はCRD(15pin)がLowになる。
パソピア側からみて、CDB0~7の8bitはOUT命令の場合はOutput、IN命令の場合はInputとなる。CAD1/CAD0,/CSEL2/CRD/CWRは、常にOutput。
OUT命令もIN命令も、CSEL2がLowの間隔は約600ns。
IN命令の場合、もう少し早いタイミング(500nsくらい?)でCDB0~7がInputされるので、その前にメモリ内容をパソピアへ返答をしなければならない。
また、OUT命令とIN命令の間隔は2usちょっとなので、OUT命令でアドレスをセットしたあと、IN命令でパソピアへ返答するまで、この間隔以内で処理をしなければならない。

8bitAVRを使う場合、1サイクル50ns(20MHz動作時)なので、結構ギリギリ。。

2014年5月24日土曜日

RAM PAC2を作ろう

PASOPIA/7にはPACスロット1と2のスロットが2つ付いている。
奥の44pinがPACスロット1で、手前の20pinがPACスロット2

PASOPIA700にはPACスロット2のみスロット化されている。

PACスロット2にはRAM PAC2や漢字ROM、ジョイスティックアダプタなどを利用できる。
RAM PAC2はメモリにデータを読み書きでき、電源をOFFしても電池でデータが保持されるため、ディスクのように外部メモリ装置として利用できる

東芝からは、4KB/16KB/32KBと3種類のRAM PAC2が用意された。下の写真は、4KBのパッケージ

カートリッジは、カセットテープのケースと同じくらいのサイズ。

PASOPIA700は横に差し込む
PASOPIA/7だとカートリッジのラベル面が手前だが、PASOPIA700だとラベル面が下面になる(電池蓋がある面が上向き)

どんな信号が出ているのかロジアナで調べるために、信号線を引き出すコネクタを作ってみた

パソピア7に、コネクターを挿してみる

RAM PAC2を挿すと、こんなかんじ

パソピア700は、こんな感じになる。
Bドライブは、挿入できなくなるが。。

コネクタに16KBのRAM PAC2を付けたまま、フォーマットしてみる
これくらいの信号線延長なら、問題なく使えそう

2014年2月7日金曜日

エレコム TK-PBL042BK 買った

エレコムの投影式キーボード TK-PBL042BKが破格だったので買ってみた。

mini BタイプのUSBケーブルが付属しているので、それで充電。
白い机に投影すると、こんなかんじ

対応機種にWindowsが含まれていないが、Bluetooth接続で試してみる

富士通のタブレットSTYLISTIC Q552/EはWindows7 32bit。
コントロールパネルの、Bluetoothデバイスの追加を見ると、TK-PBL042がいた。

コードを入れろと表示されるので、その数字をキーボードから入力。
その後、ドライバのインストールが始まり、しばらくすると準備ができました、と

キーの配置が違うので使い勝手は良くないが、一応文字の入力はできた。
ESC横のチルダ「~」が日本語キーボードの半角/全角だった。

かな入力もできたが、配置が独特なので使いにくい。。
キー音があるおかげで予想していたほど操作性は悪くなかったが、実用性は高くないと思う。

2013年11月30日土曜日

80SRでUSBキーボード

このブログで2年ほど前に紹介した、西田ラヂオさんのPC-8801mkII用USBキーボード・アダプタ。

80SRには、PORTと刻印のあるDIN13ピンコネクタがついている

USER'S GUIDEには、ジョイスティック等を接続するための入力インターフェイスで、キー入力インターフェイスと共用されている、とある。

ピンアサインを見ても、8801のキーボードと同じっぽい。

ということで、挿してみた。

いつものBUFFALOのUSBキーボードを接続

電源ON。ちゃんとLEDが点灯。

キー入力も出来た!
ちょっとタイミングがシビアで、同時に複数キー入力されてしまうことがあるが、信号は入力されている様子。

西田さんの所では、新しいPC-8801 mkII/SR/FR 用 USB キーボード・アダプタも出来たようで、ジョイスティックも使えるとのこと。進化している。。


2013年10月19日土曜日

80SRのデモ

デモテープのA面には、3つのデモプログラムが入っていた。

j80で動かしてみたので、順番に紹介。

まずはdemo1

demo2

demo3

FM音源がいい。。