CPU実験室

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

68k

スイッチ交換

MC68020ボードを収納しているケースの電源スイッチが接点が腐食してるか何かで壊れていて2回路のうち片回路で配線を直し、支障はありませんがそのうち交換してやろうと思ってました。 がんばってメタコンとか使って製品っぽく作ってますがAC100Vとかヒュー…

コンパネ修理完

基板裏面の桁ドライブのトランジスタ周りを実装。 あとから拡大してみるとえらく汚い・・・ 表面にはLCDを取付けたのですがここで失敗発覚。 LCDにつながるピンヘッダは表からの実装ですがスルーホールで表のパタンと裏のランドがちゃんと接触していなか…

部品挿入

基板を切り分け、部品実装を始めました 表面 7セグLEDとLCD、押しボタンスイッチは高さの調整がいるので先ずはLEDを取付け基準にします 裏面 I/F基板に接続するコネクタ、コントラスト調整用のVRだけ付いています あとは桁ドライブ用のトランジスタ周りが残…

ビア作成完了

スルピンとハトメの打ち込み完了しました 後は面付した各基板を切り離して完成です 表と裏のパタンのアライメントがいまいちですが何とか許容できる範囲です

ビア作成(2)

ビア(スルーホール)の作成工程です 下側の8個並んだ穴を加工しますが、まず穴径を少し拡げます。 一般の部品穴は0.85mmのドリルで開けていますがそれだとこのハトメの外径0.9mmが通らないので1.05mmのドリルでさらっておきます その穴に…

ビア作成

表裏のパタンを接続する必要があるところにスルピンを打ち込んでいますが 前にも書きましたがこれがムチャクチャコストがかかるわけです サンハヤト純正のスルーホールピンBBR-001が250ショット分で2800円。1ショット当たり11円にもなるので使用箇所は最小…

久々基板作成

ガーバーまでできているのでこのまま基板業者へ外注、でよいのですが 独りよがりプロジェクトのまったく汎用性の無い基板、しかも1枚しか使わないのに 5枚10枚なんてでき上がったらもったいないという貧乏性がもたげてきて、結局内製することにしました…

コンパネ修理

きちんとケースに入れて仕上げていた68020ボードですがコンパネの16桁1行のキャラクタ液晶表示器が真っ黒に変色していて、いつか交換してやろうと思っていましたが、ここにきてやっと手を付け始めました。 とりあえずユニバーサル基板に組み立てられたコンパ…

実数計算テスト

このボードにはFPU:MC68881が載っているのでビルドスクリプトに「-m68881」を追加してFPU用の演算ライブラリを利用できるようにします。 includeファイルのmath.hを覗いてみるといろいろな組込み関数が用意されていますが おそらく一生使わないで…

68020プラットホーム(2)

内部でクロスさせたので他のボードと同じようにホストとストレートケーブルでつながるようになりました。 ただ通信ボーレートが9600bpsになっていてダウンロードやターミナル出力がかなりもっさり感があるのでこれも38400bpsに変更しておきます。 シリアルコ…

68020プラットホーム

68020を使ったボードでも動作確認しておきます 自作の中でもめずらしくちゃんと箱に入った完成度の高い作品なんですが 数年ぶりにスイッチを入れたら、まず電源が入らない・・ 普通はヒューズが飛んでるとかスイッチング電源がいかれるんでしょうがそこは問…

浮動小数点演算

time_t型のUNIX時刻表示は実はズルをしていて、本来は日本時間より9時間前の標準時UTCで読取ってlocaltime()で日本時間のtm構造体にするのが正解です。 RTCからは直接tm構造体で日本時間が読取れるのでこれをmktime()でわざわざtime_t型にする必要がないし、…

リンクエラー回避

ソースコードにprintf系の関数を使用して標準Cライブラリからリンクさせようとすると 下請けの関数が参照できずにエラーになることはわかっていますが 実際のエラーの吐出しはこんな感じです これらはメモリブロックの取得とか低水準のファイル入出力関数でO…

68040プラットホーム

GCCで68000ボードで正常動作するコードが生成できたので、まあ問題ないと思いますが68040環境でも確認しておきます 以前作った68040ボードは基板上にRTCを持っているのでそのレジスタを読み出し整形してLCDに表示するだけのテストプログラムを用意しました …

Cygwin環境でGCC(5)

単に数字を表示するだけのプログラムで10kバイト近いサイズになっているのは 周辺I/OのドライバやグラフィックLCDに表示する文字フォントデータも合わせて1個のオブジェクトとして丸ごとリンクしてしまっているからです。 関数ごとに分けてライブラリ…

Cygwin環境でGCC(4)

テスト用ソースが問題なくコンパイルできるようなので、実際にボードに転送して動作確認できるプログラムで実験してみます まずはソース。16進コード00~FFを16×16のマトリクスで画面出力するだけのものです。 ここで画面への整形出力にprintfを使用していま…

Cygwin環境でGCC(3)

「__main」について調べてみると、どうもこれは主関数mainを呼ぶ前にメモリの初期化、 コードのコピーを行うライブラリ内関数のようです __main はメモリをセットアップし、__rt_entry はランタイム環境をセットアップします。 __main によって、…

Cygwin環境でGCC(2)

というわけでスクリプトを修正してリトライ。 $ ./gc.sh test Reading specs from /usr/local/m68k/lib/gcc/m68k-coff/3.4.2/specs Configured with: ./configure --prefix=/usr/local/m68k --target=m68k-coff --with-newlib Thread model: single gcc vers…

Cygwin環境でGCC

Cygwin上にm68k用GCCクロス環境ができたのでこれを整備しています。 まずコマンドライン入力でコンパイラは動作しているのでコンパイル、アセンブル、リンク、オブジェクト変換の一連の処理の流れをスクリプトファイルgc.shに記述 #!/bin/bash m68k-coff…

TinyBASIC移植完了

68000ボード上でTinyBASICが完全に動作するようになりました。 インタプリタなんで簡単なプログラムはさくっと入力してその場で結果がわかるのがいいです このTinyBASICにはLOAD/SAVEというコマンドが拡張されているのでホストマシンとBASICプログラムを テ…

ソース移植(4)

アドレスエラーの発生原因が判明しました。 コマンドラインを処理するサブルーチンTSTCはパラメータを呼び元にデータを直接書いてサブルーチン側でスタックポインタでアクセスするというテクニックを使っていますが次のように記述すると第2パラメータの値が…

ソース移植作業(3)

アドレス修正でバスエラーは収まり、リストの入力、ダンプが出来るようになりましたがRUNとかPRINTとかのダイレクトステートメントを実行させようとすると今度はアドレスエラーが発生してしまいます。 68000のアドレスエラー例外というのは奇数番地からコー…

ソース移植作業(2)

アセンブルしたHEXファイルをRAMへ転送し実行させると オープニングメッセージとプロンプトまで表示されます。 その後BASICステートメントを打ち込んでLISTやRUNさせようとすると 68000システムのバスエラー例外が発生してモニタへ戻ってしまいます。 モニタ…

ソース移植作業

まずAS68Kで処理したときのアセンブルエラーの除去から。 これは意外と単純で (1)ソース中の数式に括弧が使えない × DC.B 'LIS',('T'+$80) ↓ ○ DC.B 'LIS','T'+$80 (2)ラベル名に「.」が使えない × TAB1.1 DC.W LIST ↓ ○ TAB1_1 DC.W LIST (3)イミディエイト…

68000用TinyBASIC移植

8085ボード用のTinyBASICを探していたときに68000用のソースも見つけました。 これはモトローラの学習用CPUボードのために書かれているようです ヘッダ部分: ****************************************************************** * * * Tiny BASIC for the…

丸腰インベーダー

しばらくグラフィックLCDをいじっていますが、 思ったより画面リフレッシュも速く、結構使えそうです。 何となくゲームを作りはじめたらはまってしまいました。 今のところ相手からの攻撃や侵略してくる処理を作り込んでいないので 丸腰で無抵抗のインベーダ…

テトリス

前に作ったDOS画面上で動作するテトリスを移植してみました。 キー入力関数kbhit()、getch()や乱数発生のrand()を作成してライブラリに追加しています。 乱数発生ルーチンは8086アセンブラで作られていた例を見つけてきてそっくりC言語に置き換え ています。…

フォント追加

以前作った24*16ドットの数字フォントを組込みました。 これらのフォントデータは元々ラスタ方向に並んだデータでしたが 組みこむに当たってフォントイメージを90度回転させ縦切りのデータに変換してあります。 こうすることでLCDのVRAMに直接バイト転送でき…

printf実装

メカ制御などの組込み用途のシングルボードコンピュータに限れば、 接続されたIOのドライバ関数は当然作らなくてはなりませんが、 それ以外、標準ライブラリはほとんど使わなくてもなんとかなります。 せいぜいmem…系関数とstr…系関数くらいあればいいかなと…

シリアル通信の高速化

MC68901内蔵発振器用クリスタルを取りつけました。 この周波数で結構悩みました。 データシート上、MC68901に接続可能なクリスタルは2.0~4.0MHzとなっており、 おそらく2.4576MHzを想定していると思われます。 このクロックを分周するタイマが必ず÷4のプリ…