レトロパソコンのインテリジェントな周辺機器を作るのに 大きな間違いに気づいてショックな今日この頃。 デコーダ・バッファは8255が入手困難な現在、手持ちのCPLD(Xilinx XC9536XL)があるのでそれでやってみようと思うのですが、困ったことにライタがありません。
ライタを作ろうにも、そのための部品が手持ちでは苦しいところです。 またしても鶏卵問題に陥りそうなのですが、悩んでいても埒が明かないので、とりあえずやれることからやってみることに。
まずは、テスト用に以前の回路を手直しして、以下のような簡単な回路を作ってみました。
入出力に対応させてありますが、とりあえずそれは気にしないでin命令に応じてLEDを点滅させてみることにしました。
AVRのプログラムは以下のとおり。
.include "m8def.inc" .org 0 rjmp RESET INTERRUPT: sbic PORTB, 4 ; 前回は点灯ならスキップ rjmp LEDON sbi PORTB, 4 ; LEDを消灯 reti LEDON: cbi PORTB, 4 ; LEDを点灯 reti RESET: ldi r24, low(RAMEND) out SPL, r24 ldi r24, high(RAMEND) out SPH, r24 ldi r24, 0x10 out DDRB, r24 cbi PORTB, 4 ; 初期状態は点灯 ldi r24, 0x02 out MCUCR, r24 ; 割り込みモード(INT0ダウンエッジ) ldi r24, 0x40 out GICR, r24 ; INT0割り込みイネーブル sei ; 割り込み許可 LOOP: rjmp LOOP
LOOPでの無限ループ中に、割り込みがかかるとINTERRUPTルーチンが走ります(INT0のベクタアドレスに直接書いています)。 割り込み条件はINT0のダウンエッジです。
INT0は回路にあるように、IORQ | RD | A7 | A6なので、これらがすべて0のとき、すなわちBASICなどで
a=inp(0)
を実行すると点滅します。
ところが、不思議なことに放っておいても(BASICのテキストモードで何もしなくても)不規則に点滅します。
割り込みの条件から考えると、0x00~0x3fのI/Oリード要求により点滅するはずなのですが...。 何かおかしいんでしょうかねぇ。
匿名
画面が真っ暗、でもカーソルは出てる状況。
探して、ここにたどり着きました。
パスワード入力で、復活!
修理に出す寸前でした。ホントにありがとう!