CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

8086

モニタROMプログラムFIX

ボード上最後まで確認できていなかったIOP:8089、デバッグがご無沙汰していましたがちょっと進展です 8086を含めてx86系のCPUは物理アドレスの最末端、残り16バイトのところにリセットベクタが存在するのは周知ですが、実はその後ろの部…

タイマ換装

インターバルタイマはi8253を使っていますが、改良版のi8254を入手しました。同じCERDIPですが足の生え方がちょっと違います i8254の改良点はi8253にリードバックコマンドを追加してOUTピンの状態やモード設定レジスタの読み出…

LCDテスト

たぶん大丈夫だろうと思って放置していたLCDI/F部分の確認をしておきました。 LCDへの接続は他のx86ボードと同じように RS ←A1 R/W ←A2 E ←(アドレスデコード)&(IOWR | IORD) としているので内部レジスタへのアクセスは …

x86の系譜

8086基板もまだすべて動作が確認できていませんが、一応、予定していた部品が搭載されましたのでここでちょっと集合写真とってみました。 左から ・8086 ROM512kB RAM128KB クロック4.9152MHz ・80186 ROM128k…

デコーダ変更

8089のマニュアルを読み進めています。 8089をiPAX86システムに組み込むには、まず「ローカルモード」と「リモートモード」の2通りがあるようです。 ローカルモードは8086と同じローカルCPUバスに共存させる方法で今回の8086ボー…

8089

いよいよこの8086ボードも最後にして最大の難関、8089に辿り着きました これまでのところ、多少パタンミス等やらかしたところはありましたが全てのチップが正常に動作していることは確認ができましたが8089に関しては、どのように使うのかもよく…

MSCで割込み

MicroSoftCで割込みを記述してみます。 と言っても簡単でMSC/C++にはinterrupt修飾子が用意されていて、これを関数名の前に付けてあげるだけです これをコンパイルしてアセンブラファイルを出力してみると関数の入り口で全レジスタをPUSH、出口で全レジスタ…

MS/Cコーディング

LSIC-86は元々が組込み用途なのか浮動小数点演算はちょっと苦手なようで 8087コードもエミュレーションもかなり遅く感じます。 アセンブラ出力を見ても演算1行ごとにライブラリをコールしていて生成効率が悪そうです。 80286でやったように…

速度比較

浮動小数点演算の速度を8087有り無しで比べてみました プログラムの初期化部分で8087の有無の判定を行い大域変数_8087にフラグがセットされこれ以降、浮動小数点演算のたびに8087のコードかソフトエミュレーションかに分岐しますが途中でフ…

8087動作テスト

8087がコードを処理する小さいプログラムで動作を確認していきます。 8086がESCコードを検出すると/RQ・/GTピンで8087とローカルバス使用権の調停を行い、自身は次のWAIT命令をフェッチして待機中にとなります。 一方8087はコードを…

8087存在チェック

8087を実装しました。 前頁のものよりもう少しきれいなC8087(無印)があったのでそれを使ってます。 基板もほぼ埋まり、残すは8089だけになってます まず、8087が認識されているか、ですがこれは80286、80386ボードと同じように…

8087

CPUローカルバス上のデバイスを確認していきます 80x86プロセッサは80x87数値演算コプロセッサを装着することであたかもインストラクションセットに浮動小数点命令が追加されたように見えます。 ソフトウェアから見れば一緒ですが80287、…

割込み信号

配線修正ができたので改めて割込みテストです。 結果から言うとコーディングはそのままで無事LEDチカチカはあっけなく成功しました。割込み処理が行われている際の8259各信号をプローブしてみたのが以下の波形です。 CH1: IRQ5入力(8253…

制御線ジャンパ

誤っていた/IORD,/IOWRを基板裏面のジャンパで再接続します ここまででUEWによるジャンパが5本になっています ここでちょっと怪我の功名 いままで各周辺デバイスの/WRは8288が生成する/IOWCを供給していましたがインテル系のデバ…

パタンカット

込み入った場所でパタンカットをしなければなりません 普通は2か所カッタで切れ目を入れて間のパタンを剥がす・・なんて言いますが パタン間隔の狭いところではうっかり刃が滑って隣のパタンまで傷付けかねないので ルータで削ってしまいます。 プロクソン…

配線ミス

これは大失敗! 8259の/RD、/WRと制御バスの/IORD,/IOWRがテレコになってしまってます。これでは初期化ができず動作しないわけです 何でこうなっちゃったのか・・ もともとKICADに付属のintelライブラリに含まれていた825…

割込みテスト

ここのところ割込み処理のテストをやっているのですがうまくいってません。 やろうとしていることは単純で、メインルーチンはこれだけです。 モニタROM内で8259は初期化されている前提ですが setup_intr()関数内で ①割込みタイプに対応するベクタテー…

割込みプログラム

LSIC-86で記述したモニタが動作しているので、ユーザプログラムもCで書いてデバッグを進めていきます 8259による割込み動作の確認をおこないますが、既に他の86系ボードや8085ボードでも試しているので同様に記述していきます。 先ずは割込みハンドラの本体…

割込みコントローラ

割込みコントローラ8259Aを挿入しました。 これで80系ペリフェラル4兄弟?(8251/8253/8255/8259)が揃ったことになります 地味な絵ですがインテルのCERDIPで統一感はあります。 型番の連続性からいって8257DMAコン…

モニタ搭載

ある程度ボードが正常動作していることはわかりましたが、今後の細かい確認はアセンブラレベルのコーディングでは厳しいし、シリアルが動いているのでここで一気にモニタを載せてしまいます。 今までにつくった86系ボード:V50/V53/80286/3…

シリアルテスト

8251のシステムクロックが2.4576MHz、送受信クロックTxC,RxCが614.4kHzとなるときっちり4倍な訳で規格を満たしていないのですが、イチかバチかで動作確認のコーディングをしてしまいます。 先ずは8251の初期化部分。 ダミ…

シリアルコントローラ実装

8253に続いてシリアルコントローラ8251も実装しました 8251はシステムクロックと送信・受信クロックをそれぞれ別に与えなければなりません 最初の設計ではシステムクロックはCPUクロックに同期した割り切りやすい周波数、 送受信クロックはボ…

タイマ出力

リセット後の飛び先の問題が解決したので長いプログラムを書いてもOKとなりました。8253のタイマ#0~#2を全てモード3のバイナリカウンタに設定、 分周比をそれぞれ4、6144、61440に設定するプログラムを記述します 実行時のタイマ#0…

タイマ動作確認

パラレルインターフェース8255に続いてタイマカウンタ8253を実装しました。 ところで今回多用しているCERDIPのICですが、丸ピンICソケットに非常に差しにくいのです。プラスチックDIPだとパッケージ幅とデュアルインラインの幅に多少余…

リセットベクタ

これまでの簡単なプログラムはリセットベクタFFFF0からいきなり書いて電源ONで直接実行されるようにしていましたがリセットベクタからだとメモリの終端まであと16バイトしかありません。 それより長い、複雑な処理をするにはリセットベクタにはジャ…

水晶交換

今基板に挿入してある8086CPUのマーキングを見てみると、単に「D8086」となっていてスピードオプションの添え字が無いのでクロック5MHz品のようです もっとも多少のオーバークロックは大丈夫で、実際20MHzを3分周した6.67MHzで…

LEDチカチカ

パラレルインターフェース8255を実装してテストをしてみました。 8255のポートCにLEDを接続していますのでLEDチカチカ確認になります。 最初にコントロールワードレジスタに全ポート出力設定の初期化は要りますが そのあとは今までのボードの…

I/Oアドレスデコーダ

ループの繰返し周期は2.7usでした。 現在付けている水晶は20MHz。クロックジェネレータで3分周されるので システムクロックは6.67MHzとなり18クロックサイクルでループしていることになります。 JMP$には15クロックサイクル必要となっ…

最小ループ

いつものように最小ループを最初に確認してみます。 ROMの$7FFF0番地(メモリマップ上は$FFFF0番地)が8086のリセットベクタなのでそこからJMP$($EB/$FE)を書き込み、ボードにセットします。 初めのうちは交換が容易なようにZ…

プルダウン忘れ

部品を挿入し始めた今になってちょいミスが見つかりました。 未使用、または後で使用される予定の入力ピンはプルダウンまたはプルアップしておくべきですが割込み関連のNMIとINTRに対して処理を忘れていました。 コプロセッサと調停をとる/RQ、/TE…