CPU実験室

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

#工学

メモリ構成

この拡張メモリボードの追加でi8031のアーキテクチャをフルで生かせるのですが、やはり後から下手に増築した感がぬぐえません。 横から見るとこんなふう。ドータボードが片持ちで浮いてます。 また/PSENと/OEを論理和したためバンクは別とはいえメモリの全領…

ラージモデル実行

つまりバンク切り替えはアプリが起動する前のシステムモニタ側に組み込んでおかなければなりません。モニタ自身はスモールモデルで動作しているので影響はありません。 現状はPAULMON2はi8255に対して何の初期化もしてないので手動で設定することにします。…

ラージモデル

このようにデータ空間がプログラム空間と別にアクセスできることがわかりましたが、これは絶対アドレスで強制的に参照しただけであって、変数などが外部SRAMのデータ空間から参照されたわけではありません。(smallモデルでコンパイルされているので) プロ…

バンク切り替え

拡張メモリボードにバンク切り替えの配線追加しました。 128kbyteSRAMは32kbyteづつ4バンクに分割されアドレスラインA15、A16を外部ポートから入力しバンク指定します。 またプログラム空間が選択されているとき(/PSENが0のとき)は強制的にA15、A16を0にし…

パラレルポート確認

確認用治具ができたので他のCPUボードのパラレルポートも確認しておきます。 一応自分の中の設計標準として8ビットパラレルポート×2(16本)とVCC2本、GND2本を2×10のピンヘッダへのアサインは揃えているので共通して使えます。 まずMC…

デバッグ用基板

デバッグ用LED基板にも部品を取付け。 チップ部品32個取り付けて心が折れ、仕上がったのは1枚です。 サイズは1608なのでチップ部品としてはかなり大きめで、このサイズのCR類は早くも製造中止になっているようですがシロウト作業ではこの程度が丁度良…

部品実装

基板への穴あけと切り離しをしたところ。メカ加工作業はついつい億劫なことと切り粉が出るので勢いでまとめてやってしまいます。 ここまで出来ればしめたもので安心して「お蔵入り」になっちゃうことも多々ありますが。ガンバって1枚だけ部品実装してみまし…

完成予定図

拡張メモリボードの完成時の3Dイメージです 28pinスリムソケットは実際には基板裏面に両オスピンの連結ソケットを実装し8031ボードのSRAMソケットに挿さる形になります 基板の余白に入れたものはパラレルポートのデバッグ用治具でポート出力でLEDを直接点…

基板作成

100mm×100mmの基板に4枚面付け。余ったところにおまけパタンを入れておきました つづいてフィルム出力 ここで気を付けなければならいのが、露光するときフィルム印刷面と基板感光面がぴったりと密着することです。そのため基板部品面のフィルム印刷時はミラ…

メモリ拡張ボード

拡張用ドータボードのパタンが設計完了。 この回路を組み込んでマザーボード側をリファインすればいいんですが9枚も手つかずで残っているのでちょっともったいない・・ 見た目は300mil幅→600mil幅変換アダプタのような感じです。1MbitSRAMにTSOPを使えばもう…

データメモリ拡張

プログラム空間とデータ空間はアーキテクチャ的には分離していますが実際にはアドレスバス、データバスは共用していて同時にアクセスされることはないので、何もメモリチップ自体を別に用意することはありません。 かといって32kbyte×2=64kbyte(512kbit)の…

メモリモデル

SDCCでMCS51をターゲットにコンパイルするときはメモリモデルの選択ができます。通常はsmallモデルで行えば、データ領域は8031内蔵RAM領域に取られコード効率も良いようです 例えば静的変数 char str[16] を含むソースを sdcc -mmcs51 --model-small --code-…

メモリIC

今回のMCS51ボードではSRAMに300mil幅DIPの256kbitSRAMを使っています。実装面積も減らせるし(雰囲気的に敢えて表面実装品は使わない)何よりも手持ちが結構あったような気がして基板設計をしましたが、いざ実装する段になってパーツ箱から出てきたのがこん…

C言語で8031

いままで統合環境CMPLDRV上でMCS51のコードはアセンブラASで処理していましたがCコンパイラSDCCでもうまくいきそうなのでビルド部分のバッチを差し替え、C言語に対応しました。いずれ言語選択(処理系切り替え)もドロップダウンリストで行えるようにしよう…

基板リファイン

MCS85ボードのハードデバッグはほぼ終わりましたが、もし基板をリファインして量産するとしたらやっておきたいことをメモしておきます (1)8155のタイマ割込み信号は8085のRST7.5へ直結する そのため割込み選択のジャンパポストJ5は…

割込みテスト(4)

割込みパルスは入力されているのにめったに割込みがかからない、 というか正確に10回に1回しか受付けていない状況ですが、これはもう早い話がパルス幅が狭すぎてレベル割込みに必要な幅に不足しているということです インテルのMCS-80/85 FAMILY USER'S M…

割込みテスト(3)

LEDのチカチカは最下位で75HzになっておりRST7.5の割込みは計算通り150Hzで入っていて正常に動作していると考えられます。 RST7.5はうまくいきましたが、RST6.5とRST5.5についても確認してみます。これらは割込みベクタ…

割込みテスト(2)

8155上のRAMで動作する割込みテストの例です モニタ上でユーザアプリケーションのエントリーポイントはFF00H番地に固定していますのでそこからベクタテーブルを跨いでプログラム本体startに飛びます まず8155内部の14ビットカウンタ…

割込みテスト

MCS85ボードで割込みの動作確認をしていきます。 割込み要因である8155の/TIMEROUTを74LS04で反転させて8085CPUのハードウェア割込みピンTRAP,RST5.5,RST6.5、 RST7.5、INTRのどれかにジャンパ…

8031開発環境

MCS-51(8031)ボードも統合環境CMPLDRVから操作できるようにしました 問題なのが通信ボーレートがRS232Cとしては標準的でない値なことですが、 ツールのシリアルポート初期化部分でWIN32APIに直接ボーレート31250を与えたらちゃんと設定されました ボード上…

こちらもモニタ搭載

MCS-85ボードの方にかかり切りでしたがほぼ動作も確認、開発環境も整備できたので、中途になっていたMCS-51(8031)ボードに戻ってきました。 一応メモリ、I/Oアクセスは確認できているのでシリアルが動けばモニタも載せられます。 MC…

統合環境組込み

MCS85ボードでプログラムが無事動作することが確認できたので、この後の開発がより簡単になるように統合環境「CMPLDRV」でターゲットとして選択できるように組み込みました。 ・・・といってもASアセンブラを起動するバッチを呼べるようにしただけです…

モニタ搭載

シリアル通信による1文字入力CONINと1文字出力CONOUTが出来たのでこれらを使ったモニタプログラムをROMに搭載します はじめデバッグに使ったボードに既に搭載されているモニタのシリアルI/F部分だけ差し替えれば良いと思ってたのですが、あらためてこ…

実機確認(2)

これはもう、前のオシロ波形で答えわかっちゃてるんですが、要するにROMアクセスにウェイトが挿入されちゃってるのですね。 MCS85のチップセットをメーカ推奨回路図どおり配線したので8755のREADY出力と8085のREADY入力は直結して…

実機確認

デバッグ用のボードでシリアル入出力処理のモジュールが完成したので本来のターゲットであるMCS-85ボードに移植して動作確認をしました デバッグボードでタイミングも含め充分にバグ出しを終えた1文字出力処理CONOUTです 0~255のインクリメント…

シリアル受信処理(2)

シリアル送信は単にビット列を垂れ流しにすればいいので簡単ですが、受信処理はいつ信号が来るかわからないので処理の先頭にスタートビットの待ち受け処理を入れてあります。 またこの待つにしても永久に待つか、タイムアウトを設けるかですが、人間のキー押…

シリアル受信処理

シリアル送信部がほぼできたので今度は受信処理部分をコーディングしていきます。 デバッグのため前回作って動作確認済みの8085ボードにちょっと加工をしておきます。このボードのシリアルRXライン(MAX232の12ピン)と8085CPUのSID(5ピン)をUEWで…

時間調整

1ビット分の処理が39クロック分で出来ることがわかりましたが、RS232Cでボーレート38400bpsでダイレクトに送出することを考えると このボードの原振が9.8304MHz、CPU内部クロックで4.9152MHzなので4915200/38400=128で128クロックタイムが必…

ソフトUSART

このMCS-85ボードもモニタを載せてみます。 RAMの容量は256バイトと極端に狭いですがアセンブラによる小さいコードくらいだったらDLLして遊べるようにしたいところです。 8755のROMにレジデント型のモニタを置いてホストから操作でき…

LEDチカテスト

メモリマップ、I/Oマップが確定したので実プログラムで動作確認をしていきます 8155のポートC(6bit)にLEDを接続しているのでそこにインクリメントデータを出力してチカチカさせます。 アセンブラはASでターゲットに8085を指定してお…