CPU実験室

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

68k

I/O初期化部分修正

ボードに電源を投入してモニタが起動するときに "** MC68000 CPU board monitor Ver2.00 **" という文字列をターミナルに送信するように作ったはずなのですが、なぜか必ず "AU♂ス・早オスケ・ムスノ〆碧ノケチチ←ゥ5)甫黒チム・スケ・≦ム・チチムチチナ" と化けていました。その後の文…

LEDのRGB制御

68000用の算術ライブラリとして32ビット乗除算の_mulsi3,_divsi3,_modsi3をアセンブラで作成。 I/Fを現状のライブラリとコンパチにしてLIBGCC.Aとそっくり置換えができます。 ところでgcc68kの処理系ではint型変数は32ビットで処理されるので、実はshort型の…

ANK文字セット実装

以前どこからか拾ってきたキャラジェネROM用の8×8ドットのANK文字フォントデータを 組みこみ、文字列表示関数を作成しました。 それにしても8ドット使うと1行15字しか表示できません。122ドットというのが妙に中途半端。 どうしてもこの画面に文字を表示した…

漢字表示

68000用にビルドされたGCCライブラリを探したがちょっと見つからず、 GNUプロジェクトからGCCのソースは手に入れたもののこれをビルドするのも 厄介そうなので一時保留。 とりあえずchar型変数を使っている限りはインラインで68000のコードを生成するので 実…

ライブラリ動作不良

簡単な数値演算処理を含むプログラムをgccでコンパイルしてみると 浮動小数点どころかintの乗算・除算もエラーになることがわかりました。 生成されたソースコードを見てみるとintの乗算・除算のとき ライブラリLIBGCC.A内の関数をコールするようになってま…

LEDのPWM制御

パラレル出力を100回アクセスするうち、そのうち何回まで「1」を出力するか という方法で3系統のPWM波形を生成させ、 それぞれのデューティを120度ずつ位相のずれた三相の三角波でモジュレーションしました。 この出力でフルカラーLEDのRGBを制御しています…

LCD描画処理

仮想VRAM上への描画関数としてset_pixel()とline()を作成し、 データが出来上がったところでデータ転送関数lcd_refresh()でLCDへ送るようにしました。 こうしてみると122×32ドットというはかなり狭い。20桁×4行キャラクタLCDと情報量は 大して変わりない感じ…

グラフィックLCD表示テスト

LCDのレジスタを叩く関数をいくつか作り、コマンドを送ってみたところ とりあえず表示は出るようになりました。 上の写真では全ページにインクリメントデータのパタンを送っています。 任意の座標にドットを描画するには、引数のX,Y座標から左右のプレーン、…

開発環境の準備

グラフィックLCDの動作確認を始めました。 そろそろ制御もややこしくなるので、開発言語をCに切り替えて続行します。 68000用のCコンパイラとして容易に入手可能なGCC-M68Kを使用します。 入手したものはDOS環境で動作するように再ビルドされているもので Wi…

モニタプログラム載せ替え

ROMに焼きこんであるモニタプログラムはDLL機能がありますが バイナリ形式しか受け付けないため、ターミナルのほかに別途ローダを立ち上げる必要がありました そこでSフォーマットHEXファイルを直接受信できるモニタに交換。 この移植もシリアル1文字入出力…

グラフィックLCD取りつけ

グラフィックLCD SG12232を基板に搭載しました。 6800系インターフェイスで動作させる予定でしたが信号線の接続をきちんと考えていませんでした。 68000の非同期バスに6800系同期バスの周辺を接続するためには/VMAでアドレスを確定させ、 /VPAをアサートする…

LED点灯テスト

モニタが完成したので、I/O動作の確認はコマンド入力で簡単にできるようになりました。 たとえばMC68901に接続したフルカラーLEDの点灯は -SE40005 E40005:00 38 ←汎用入出力ポートのの方向設定 E40006:00 . -SE40001 E40001:00 38 ←汎用入出力ポートにデー…

モニタ移植

いままで作成した68kシステムに搭載したのと同じモニタをこのボードに移植すると 今後のデバッグが楽になります。 移植と言ってもシリアルへの1文字入出力をMC68901のシリアル制御に合わせて変更するのみ で移植がすんでしまいます。 プログラムのダウンロ…

シリアル出力テスト

MC68901にクロックを供給するため再度CPLDのロジック修正を行い CPUクロック10MHzをさらに4分周した2.5MHzを生成しました。 次にシリアル通信用のボーレートクロックですがMC68901に外付けで 2.4576MHzの水晶を付けてぴったりのボーレートを発生させようとし…

I/Oへのバイトアクセス

8ビット幅のI/Oをアクセスするプログラムを書いていると どうも腑に落ちない点がありました。 8個のLEDがつながっているパラレル出力ポート74HC564はデータバスの下位D0-D7が接続されています。 ポートのアドレスは0xE00000-0xE3FFFFのイメージがあるのでど…

MFP実装

メモリテストは10時間近くランニングさせてエラー無し。 電源切るの忘れて寝てしまっただけですが。 MFP(マルチファンクションペリフェラル)MC68901回りの 配線を済ませチップを実装しました。 これのシリアル入出力が動作できるようになればモニタを…

メモリテスト

デバッグを進めていく前にボード上のSRAMが正常に読み書きできるかを 確認しておきます。 ここが異常だとスタックやサブルーチンが使えないので先に進めません。 アセンブラで自身ではRAMを使用しないメモリテストルーチンを作成しました。 256kbyteのRAM全…

パラレル出力テスト

「BRA $」実行時のデータバスの繰返し周期は1マイクロ秒つまり1MHzですが クロックは原振40MHzを4分周した10MHzを与えていてBRAの実行クロック数は 10クロックなのでちょうどです。 DSPでは分岐命令が1~2クロックで実行されることを考えると異様に長いです…

データバス観測

本当にMPUがプログラム通りのコードを実行してるのか?と疑問が沸きますが、 今実行しているのが「BRA $」でコードは"60FE"なので1回でアクセスできる 1ワードに収まってしまいます。 なので正常に動いていればデータバス上に連続して"60FE"のコードが乗っ…

ミス発見

これはコードフェッチ毎にデータバスとアドレスバスの変化を見なければならんな、 ロジアナひっぱりだしたりプロービングがめんどくさいな~ と思いながら、念のためもう一度データバスの接続をテスタで当たっていたら あっさりミスがわかりました。 データ…

電源投入

コードを焼き付けたROMをセットして電源投入しました。 電流は約350mA。 MC68000-10MHzの消費電力がデータシートでは1.5Wとなっているので 周辺を含めだいたい妥当な線みたいです。 で、うまく行けばROMに対して連続的にアクセスが発生するはずなのですが 案…

テスト用プログラム作成

まずMPU自身が動作しているかどうかを確かめるもっとも単純なプログラムを作成します。 68000はコールドスタート時に0番地から4バイトをスタックポインタに格納し 次の4番地から4バイトをプログラムカウンタに格納しそこにジャンプします。 実質プログラムは…

MPU挿入

CPLDにロジックを書き込み、とりあえずリセット信号とクロック10MHzがMPUソケットへ 供給されることを確認しただけで、少し気が早いかもしれませんが一気にMC68000を 挿入してみました。 薄々気付いてはいたんですけどMPUが横向いちゃってます。 刻印が読め…

配線一部完了

UEWによるジャンパ配線もMC68091回りと拡張バスを除いて完了。 PGAソケットの裏あたりは配線が込んでいるけど全体はわりとスッキリで済んでます。 今回パタンの引き回しミスは無いようでしたが/BERRピンを双方向信号と間違えて オープンコレクタでドライブし…

UEW配線つづき

7セグLEDデータバス、ROMアドレスバスを追加配線。 そろそろMPU回りのみを最小構成で確認できそうなので テスト用ファームを考えようと思います

UEW配線

パタンを引き回せなかったところにやっとUEWでジャンパ配線を始めました。 とりあえず今日はMPU⇔ROM間のデータバスD0-D7まで。 まだまだ先は長いな

CPLD設計変更

周辺制御のためのCPLDが入出力ピンが不足になってしまったので、 基本ロジックを練り直し。 I/O空間デコードの為に引き込んでいたアドレス線を削減し、 デコードを簡略化しました。 デコードに使うアドレス線はA23からA18の最上位6本として 000000XXXXXXXXX…

制御信号ドライバ

MPUのPGAソケットの真裏、ピンが存在しないところにオープンコレクタ バッファ74LS07を実装。 これで双方向ピンの/RESET,/HALT,/BERRをドライブします。 最初間違って74LS06を付けてしまい貼替えたのであまりきれいでないです

SRAM子基板取りつけ

子基板に組みたてていたSRAMとMPUのPGAソケットを実装。 これで挿入品は完了、と思ったがMC68901に付くシリアル通信用の水晶がまだだった

周辺ロジック設計(続き)

CPLDにさらにアドレスデコーダ、オートベクタ発生回路等を詰め込んでいったら I/Oピンを使いきってしまった! どうせパタンでは引き回しきれないし、後から機能を作りこんでピンアサインを 決めればいいと思って入たんだが見積もりが甘かったようです。 今の…