メインページに戻る

2012年7月29日 (2012年第30週)

オリンピック期間中につき、作業停滞中

予定では、とっくにインベーダーの表示に成功している筈なんですが、ついついオリンピックをみてしまい、寝不足かつ、RETROF-16作成時間不足です。
このHPを更新する時間も不足で、Qtでのプログラム(Windowsでの開発環境)作成の進捗状況も含め、書きたいことはたくさんあるのですが、詳細はオリンピック終了後にまとめて書く事になりそうです。とりあえず、今週は最新写真(7/29 22:00現在)の紹介のみです。

画像はソフトウエアで画面を赤一色にした後、画面中央に12×8ドットのパターンを主メモリからVRAMに転送してみた所です。残念ながら転送元の主メモリのアドレスが何らかの事情でズレているらしく、インベーダーのパターンになりません。インベーダーの表示は来週以降に持ち越しです。


2012年7月22日 (2012年第29週)

RETROF-16用システム記述言語 (シーくさい)

今週はRETROF-16でBASICインタプリタやインベーダーゲームなどを作成する際に用いるコンパイル言語の設計に没頭しました。コンパイル言語の詳細に関しては、別途紹介します。

インベーダの表示は来週以降に持越しです

そういう訳で、逆にハードの製造の方が殆ど進まず、VRAMに対してデータを読書きするロジックの検証もまだ未完です。
ビットとピクセルの対応がおかしいせいか、CPUがVRAMに送ったドットパターンと異なるピクセルパターンが表示されてしまいます。

更に、主メモリはクロック8MHzでも問題なく読み書きできるのですが、VRAMはクロックを2MHzまで落とさないと書き込みが不安定になります。これも原因を調査中です。


ハードの検証もこの辺りになってくると、単なる「論理」だけではなく、タイミングの問題も複雑に絡んでくるのでデバッグも大変です。

画像周りはクロックを下げたり、ステップ実行するとは不可能(速度を変えると同期が乱れ、液晶ディスプレイが表示をやめる)です。このため、デバッグは困難を極めています。


2012年7月15日 (2012年第28週)

全ICを実装した状態での通電

RETROF-16としては初めて全てのICを実装した状態での通電を行いました。
これは総電流を計測するためで、USBインタフェイスとビデオインタフェイスの制御信号線数本はまだ未配線状態です。

現時点で、USBとビデオ制御以外の機能(機械語命令)は4MHzクロックで動いています。但しチェックシート等を用いた包括的な試験を済ませたわけではないので、まだ多くの論理バグが残存していると思います。全機械語の試験はこれから行います。USBとビデオ機能の試験は更にその後になると思います。

ちなみに総電流は873mA(停止時、LED全点灯)でした。

1から100までの和の計算に成功

上記の写真は、1から100までの和を求め停止(HALT)した状態を撮影したものです。計算結果は奥のLEDに2進で表示されています。(下は露出補正拡大写真)

0001 0011 1011 1010
十進では5050を意味する。

以下が1から100までの和を求めるプログラムです。幾つかの命令はまだ動きませんので、正しく動く命令だけで組んだ為、多少の不自然さがあります。 またアセンブラ表記は独自のものです。また機械語との対応は一部当初予定したISAとは異なっているところがあります。

最終的なISA(機械語命令セット)とRETROF-16の正式なアセンブラ仕様は現在最終FIX中です。決定次第正式公開予定です。本頁左にあるISAは設計時点での「案」です。

0000 800A      LD   100 
0001 C410      ST   R10H  // R10Hは16番レジスタを意味する
0002 8000      LD   0
0003 C411      ST   R11H 
0004 9011  L1: LD   R11H   
0005 9810      ADD  R10H
0006 C411      ST   R11H
0007 D611      OUT  R11H  // LED上段にR11、下段にAccの値を表示
0008 9010      LD   R10H
0009 8C01      SUB  1
000A 4F0C      JNB  FFFFH // FFFFへジャンプするとHALTする、JNBはJCと等価
000B C410      ST   R10H
000C 0C09      JMP  L1    // 後方相対ジャンプ   JMP -9 と等価

ここまで使用したハンダ

RETROF-16の作成を決心した時に、使ったハンダの量(長さ)を測定しようという変な発想が湧きました。 そこでミューフィーダーというシャープペンシルの様にハンダを供給できる製品(千住金属工業製、秋月電子にて購入)を使い、実際に使った量を把握することにました。 現時点でリールが4つ空になり、5つ目を装着した所なので使用したのは0.6mmの4m巻き4つ、すなわち16m使ったことが判ります。

ちなみにこのミューフィーダー、結構便利です。私は使用方法の説明にある様に「使う分」だけをカチカチと出すのではなく、常に2~3cmほど出した状態で使ってます。 尚、ハンダ自体は割高になりますので、500g巻とか1kg巻きの特売品を購入してミューフィーダーのボビンに巻き直した方がお得かと思います。


2012年7月8日 (2012年第27週)

VRAMを挿入してみました

RETROF-16は256×256ドット(16色)のグラフィックディスプレイ(普通のパソコン用の液晶モニタへの信号発生回路)を装備しています(もちろんTTLのみでの実装です)。 この回路上で情報を保持するためのSRAM(VRAM)を挿してみました。まだ、VRAMの値を変化させる命令は動きませんので、電源投入時のVRAMの内容がそのまま表示されているだけですが、なにやら「画像らしき物」の表示に成功しました。

RETROF-16の最終目標である「インベーダーゲームの実現」にまた一歩近づけた気がします。

CPU自体の演算機能も試験は順調

一方、CPU自体の試験も順調に進んでいます。
RETROF-16はADD/ADC/SUB/SBB/AND/OR/XORの7種類の二項演算を有していますが、実際にその演算を行う74LS181へ与える演算指定コードは大変複雑です。ですから、機械語命令を74LS42で一度デコードした後、22本のBAT43から成るダイオードマトリクスで再度エンコードし、74LS181用の演算指定コードを作り出す実装としました。画像は機械語命令の演算指定ビット(3bit)をデコードする74LS42と実際の演算を行う74LS181の間に位置するダイオードマトリクスの実装写真です

BAT43は命令デコード用のダイオードマトリクス用として50本購入したのですが、その後「秋月のお楽しみ袋」に入っていた500本のダイオード(型番不明、1S2076Aか?)が、ダイオードマトリクスとして使える事が判り、そちらを使ったため、BAT43が大量に余りました。 演算指定用のダイオードマトリクスも、「秋月のお楽しみ袋」の物で十分だったのですが、せっかく購入したBAT43が余るのも何ですので、あえて演算指定用のダイオードマトリクスはBAT43を使いました。


2012年7月1日 (2012年第26週)

製作開始から半年が経ちました

早いもので、製作を開始してから半年が経過しました。
製作を始めた正月の時点では、「1月中にPCBのエッチングが終わり、3月中にもプログラムが動くかもしれない」と密かに思っていたのですが、大きな見込み違いでした。

思うにRETROF-8の製作経験から、「8bitが16bitになって部品数が倍になったんだから、製作時間も倍程度だろう」と安易に考えていたような気がします。
実際には、16種の命令しかない8bit機と約200種の命令がある16bit機とでは、製作そのものの時間は2倍程度ですが、トラブルが起きた時の原因究明やその修正方法の検討には桁違いの時間がかかることが解りました。もし今後、RETROF-32等を作成する機会があるならば、多少機能は抑えても徹底的に試験のしやすいアーキテクチャにしたく思います。

とりあえず、1+2=3 を確認

さて、6月末日の段階では、不安定ながらも幾つかの命令が動く様になりました。RETROF-16が初めて意味のある動作に成功したのは以下のプログラムです。
1+2の結果を基板上の仮設LEDに2進数のまま表示するだけのプログラムです。

0000 LD   1
0001 ADD  2
0002 OUT
0003 JMP 0003  // HALT命令の代わり

0003番地に置いた自分自身へのジャンプは、HALT命令が設計ミス(注)により全く機能しないので、とりあえず暴走を止めるためのコードです。

(注)インストラクションデコーダがHALT命令を検出すると、命令ステージカウンタを止める(CK入力を強制的にHにする)という方法でプログラムを先に進ませない(つまり停止)する設計でした。
しかし、「命令ステージカウンタのクロック端子を強制的にHにする」という論理自体がポジエッジとなりカウンタを進めてしまい「HALT命令を検出した」という信号が消えてしまうという不具合です。
(7月1日現在、解決策は熟考中。基板上には予備のゲートが全く無いので、苦戦中)

最新画像

アキュムレータ(74LS194)の実装も完了し、未実装は(1)VRAM、(2)VRAMバスとCPUバスのブリッジバッファ、(3)USBインタフェイスの3点のみになりました。

また、動作速度が当初設計値(2MHz)より、大幅に向上しそうなので急きょ、4MHzクロックと8MHzクロックをジャンパーピンで切替えることにしました。


写真右上の緑色の小さな部品がジャンパーピンのピンヘッダです。左はその拡大写真です。
ビデオ信号発生回路が同じ基板にありますので、
4MHzと8MHzの矩形波はその回路から引き出しました。


メインページに戻る