CPU実験室

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

Am29k

メインプログラム

割込みサービスルーチンは書けたので改めてお膳立ての部分を見直しています。しばらくぶりに29kのアセンブラをやってみるとやはりそれぞれの個性で気になる部分もでてきて、すこしでも使いやすくなるよう工夫してみました。 まず32ビット即値代入というのは…

割込みルーチン

Am29030での割込み本体のコーディングをしています 最初に割込みハンドラですが、これはADSP21xxでの割込み実験と同じ。汎用レジスタのインクリメントだけ行っています。コード内でのcountという変数は汎用レジスタGR66のエイリアスです またタイマ割込みが…

マニュアル発見

前にネットから落としたAm29030のマニュアルに落丁があるのに気付いたのですが、改めて探してみたらおそらくページはすべてありそうな別のファイルがみつかりました 左:(落丁あり)14.3Mbyte 417ページ 1993_Am29030_and_Am29035_Users_Manual.pdf 右:(…

割込み確認

いままで初めて手にしたCPUでボードを開発するときにはだいたいこんなステップで進めていました ①最小永久ループ(jump $) ②LEDチカチカ ③メモリアクセスチェック ④シリアル入出力 ⑤モニタ搭載 ⑥内蔵/外付けペリフェラル確認 ⑦割込み ⑧C言語化(コンパイラ…

仕事納め

Am29030ボードの動作がほぼOKになったので改めて記念撮影です。 これは設計開始時の3Dイメージ。あたりまえですが寸分違いありません。ただこのときは資料も少なく暗中模索で、ほんとに動くものができるかかなり不安でした。 基板裏面。ほとんど改修痕はあり…

モニタ完成

モニタコマンド分岐先の処理の実体をコーディング完了しました。 L(Load)、E(Exec)、D(Dump)とも引数無し、SRAMが存在する0xFFE00000番地が暗黙で指定されます。DumpコマンドなどはLoadコマンドが正常に動作しているかを確認するだけのデバッグ用ルーチンに…

モニタコーディング中

慣れないAm29kのアセンブラでプログラムを書いていますがかなり苦戦しています。アドレッシングモードの制限やスタックの扱いなど本来は高級言語のコンパイラがサポートする部分なのでしょうが手作業で試行錯誤している状態です。 コーディングしながら気づ…

ハンダ修正

データの化け方をよく見ると規則性があることはすぐ判ります。まず4バイトの周期を持つということは32ビット幅のデータバスに配置した4個の8ビット幅SRAMにそれぞれ対応していることになります。 読出し値がおかしいのは1個目と2個目のRAM:D31-D24、D23-D1…

SRAMデータ化け

1文字入出力ができたのでこれを使って原始モニタのコーディングを始めました。まず実装するのはL(Load)、D(Dump)、E(Exec)の3つのコマンドだけです。 オープニングメッセージ出力、コマンドプロンプト、コマンド解析・分岐はニーモニックこそ違います…

シリアルテスト(2)

ここまでくればドライバの作成は容易です。1文字入力RXCHAR、1文字出力TXCHARをさくっと記述しました。 ・・と簡単に言いましたが実は紆余曲折があって、見ての通りステータスレジスタに立つビットをテストする処理がかなり冗長な書き方になっています。もっ…

シリアルテスト

基板上に最後に残ったシリアルコントローラAm85C30のテストをやってみます。これが動けばモニタも載せられソフトデバッグも容易になります。 問題はこのデバイスが非常に高機能のうえ設定も柔軟でプログラミングがかなり必要そうなことです。今回は(という…

サブルーチン

ベリファイチェックでエラーが出るということはメモリアクセスが間に合ってないのかも?ということでマスタクロックを作っている20MHz発振器を14.7654MHzのものと交換しました。 アクセスサイクルは約270nsでクロックに比例して遅くなっていますがこれでも時…

メモリチェック(2)

前回のメモリチェックプログラムは分岐の直後にNOPを挿入する修正のほかに一部手直しがあります。SRAM自体の動作もまだ怪しいのでチェック方法を簡略化して"00"を書いた後”FF”で追記し、読みだしたとき"FF"になるか、"FF"でなかったらその値をPAに出力する、…

NOP命令

遅延分岐で暗黙に実行されてしまう命令によって影響されないようにするには、分岐命令の直後はNOPにしてしまうことが手っ取り早いでしょう。 ところがこのAm29kプロセッサにはなんとNOP命令が存在しないのです。マニュアルにはそれも言及されていてNOP相当を…

メモリチェック

パラレルI/Oが動いたので次はSRAMのチェックを行います。LEDチカチカプログラムを発展させて以下のコードになりました。 ボード上のSRAMはアドレス0xFFE00000~0xFFFFFFFFでサイズ0x200000(2Mbyte)を実装しています。このプログラムはGR64をポインタとして…

82C55入力ピン

8255への出力ができたので同じように入力も確かめてみました。プログラムは以下のようにPAのみ入力に設定したあとPAの読み取りデータをPB,PCに出力するのみです。 I/Oへの出力(STORE)時のCNTLフィールドは0x41(AS=1.SB=0,OPT='001')でも0x51(AS=1.SB=1,OP…

I/Oテスト(4)

8255へのアクセス状況を確認しておきました Ch1:/CSピン Ch2:/WRピン Ch3:PC0ピン 約4μSごとに8255へ3回書込み(PA,PB,PC)され、PC書込みごとにPC0ピンがトグルしていて期待通りの動きです ただ8255への書き込み以外の部分(単にレジスタのインクリメン…

I/Oテスト(3)

Am29030ボードの方は冷却期間おいたのでそろそろキンキンに冷えてそうなので戻ってきました。というかNS32032ボードのC言語化が浮動小数点処理で行き詰ったというのもあります。 こちらはどこまでやっていたか思い出すと外部デバイスとのI/Oでバイトアクセス…

ツール更新

Am29kでちょっとつまづいていて、冷却期間も置くため普段使っているツール類のバージョンアップしておきました。 The Macroassembler ASは頻繁に更新を繰り返しているようで、最新版を取りに行ったらバージョン自体は1.42で変わりませんがビルドが96から一気…

マニュアル落丁

Am29030に関する情報はネットから探してきた以下のマニュアルでなんとか読み解きながらすすめてきたのですが、どうもLOAD/STOREのCNTLフィールドに関する記述が見つからないのです。 全体で417ページもあるのですが、目次と突き合わせていったらチャプター3…

I/Oテスト(2)

指定したアドレスにデータをセットするためにSTORE命令を使ってみます。マニュアル上で命令フォーマットはこうなっているのですが、 ここまできて今回のCPUがRISC(Reduced Instruction Set Computer)であることを思い知らされることになりました。 インス…

I/Oテスト

ROMのアクセスがうまくいったので順番からいうと次はRAMの確認と行きたいところですが、うまくいったかダメかを外部に知らせる手段がないので先にI/Oの方をみてみます。 パラレル入出力として置いた8255で信号線の接続はピン機能そのままなのですがここで重…

ループ成功

ROMの先頭番地から「A0/00/00/00」の4バイトのコードを焼き込み、ボードを起動しました。 アドレスバスラインをオシロで触っていくとA0,A1,A2,A3がパタパタしていて残りはLレベルで安定しています。よってROMの0番地~15番地付近…

初プログラミング

ROM上のプログラムが実行できる環境ができたので、初めての29kプロセッサのプログラムを書いてみます。マニュアルでインストラクションセットをざっと見てみたのですがだいたい見慣れたニーモニックが並んでいます。RISCとはいいますがそんなにとっつきにく…

ナローアクセス

ブート時にアクセスされるROMが1個というのは本当に助かります。モニタが乗るまでのデバッグ時は何度もROMを抜き差しして焼き直さないといけないのでそれが1個と4個では断然手間が違います。 ただ今回のブートROM部分の設計がほんとにこれでよいかがちょっと…

メモリマップ

GALの設計を先にしてしまい順序が逆ですがメモリマップは以下のようなものを想定しています。 32ビット4GBの広大なアドレス空間に配置したメモリは実に1/1000以下のエリアで全体から見るとほとんどすっからかんです。 ROMは最下位アドレスに8ビット幅で1個し…

デコーダ設計

アドレスデコーダの仮設計をしておきます。CPUから出力されるアドレスバス、制御信号はとりあえず以下のように2個のGAL22V10に引き込んでおきました。 まず上側のGALでざっくりROM、RAM、I/Oのアドレス空間を決めてしまいます。 32ビットアドレスのうち上位…

部品実装ほぼ完了

ROMソケットは手持ちの黒いモールドのものを付けてしまいましたがそれほど違和感なし。ついでに入出力のボックスヘッダも取り付けてだいたい部品は載りました。 部品表もほぼ塗りつぶされました。残りのDsubはシリアルが確認できるころまでに何とかすればよ…

PLCCソケット

Am29030ボードはROMのソケットにベージュ色のを使いたくてデバッグ中断状態になっていますが、実はebayでみつけてポチっていました。送料無料で1個約40円、大丈夫なのか。 意外に早く2週間で荷物届いたのですが開けてみたら、うひゃースルーホールじゃなくて…

基板裏面

現状での基板裏面です。ハードデバッグを始めたばかりなのでまだ致命的なミスは見つかっていませんがまだまだわかりません。 黄色い四角いのはパスコンとして入れた固体タンタルコンです、 クロック周辺。X1はマスタクロック20MHzを発振するSMD部品で最短でA…