IchigoJam Advent Calendar 2022 10日目
IchigoJam 上でTD4 のエミュレータを作ってみた。
仕様
- クロックの切り替え、およびリセットはキーボード (またはシリアル通信) で行う
R
: リセットJ
: 手動クロックに切り替えK
: 1Hzクロックに切り替えL
: 10Hzクロックに切り替え
- 入力ポート、および出力ポートはそれぞれ IN1~4 および OUT1~4 に対応する
- 手動クロックは、デフォルトで載っているボタン (BTN) を押すことで入力する
- ROM の編集機能は無い。
LET
命令などで配列の[0]
~[15]
にプログラムを入れてから実行する
プログラム
10 ' TD4 エミュレータ
20 CLS:LC4,3:?"ROM":FORI=0TO#F:LC4,4+I:?HEX$(I);" ";BIN$([I],8):NEXT:LC19,3:?"レジスタ":LC21,4:?"A":LC21,5:?"B":LC21,6:?"C":LC20,8:?"PC":LC19,11:?"ポート":LC20,12:?"IN":LC19,13:?"OUT"
30 LC19,16:?"クロック":LC21,17:?"J BTN":LC21,18:?"K 1Hz":LC21,19:?"L 10Hz":D=1:E=1:F=1:J=-1:V=1:L=3:Q=1:N=0:IFVER()<14114S=60ELSES=VER(4)
40 R=S/10:IFVER()>13207IFVER(1)=3S=S*25/96:R=R/4
50 K=0:A=0:B=0:C=0:P=0:U=0
60 IFU-VOUTU:LC23,13:?BIN$(U,4):V=U
70 IFA-DLC23,4:?BIN$(A,4):D=A
80 IFB-ELC23,5:?BIN$(B,4):E=B
90 IFC-FLC23,6:?C:F=C
100 IFP-QLC23,8:?BIN$(P,4):LC3,4+Q:?" ":LC3,4+P:?CHR$(#E1):Q=P
110 I=IN()&#F:IFI-JLC23,12:?BIN$(I,4):J=I
120 IFK-LLC20,17+L:?" ":LC20,17+K:?CHR$(#E1):L=K
130 N=N*2+!!BTN():X=INKEY()&#DF-74:IFX=8GOTO50ELSEIFX=0K=0ELSEIFX=1K=1:Y=S:T=Y:CLTELSEIFX=2K=2:Y=R:T=Y:CLT
140 IF!KANDN&3=1GOTO150ELSEIFKANDTICK()>=TT=T+Y:GOTO150ELSEGOTO110
150 IFTICK()>=32175CLT:T=Y
160 G=[P]:X=G>>6:Z=G>>4&3|X/2:W=A*!Z+B*(Z=1)+I*(Z=2)+G&#F:H=W&#F:IF!XA=H
170 IFX=1B=H
180 IFX=2U=H
190 IFX=3AND!C|G&16P=HELSEP=-~P&#F
200 C=W>>4:GOTO60
(記事に設定している通り CC BY ライセンスです)
実行結果
例のラーメンタイマーを実行した。
解説
- 10行目:タイトル
- 20行目:UI要素のうち変わらない部分の描画
- 30行目
- UI要素のうち変わらない部分の描画の続き
- 描画状態とボタン入力状態の初期化
- 環境に合わせたウェイト時間の設定 (PAL対応)
- 40行目
- 10Hzクロック用のウェイト時間の設定
- 環境に合わせたウェイト時間の設定 (IchigoJam web対応)
- 50行目:レジスタとクロック設定のリセット
- 60行目~120行目
- 変化した状態の描画
- ポートの入出力
- 130行目
- ボタンの状態の更新
- キーボード操作の受付
- 140行目:1ステップ実行するかの判定・実行
- 150行目:なるべく精度を保ちつつ
TICK()
のオーバーフローを回避する処理 - 160行目~200行目:1ステップ実行する処理
- CPUの創りかた TD4 に掲載されている回路図をもとに実装した
- 160行目:命令フェッチ、データ取得元および更新先の取得、加算、Aレジスタの更新
- 170行目:Bレジスタの更新
- 180行目:出力ポートの更新
- 190行目:プログラムカウンタの更新
- 200行目:フラグの更新
関連リンク
- CPUの創りかた | マイナビブックス
- 4ビットCPU「TD4」の出典。
- 憧れのCPUづくりが超簡単!あの4bitコンピューターTD4マシン語プログラム on FPGA MAX10
- TD4 を FPGA 上で動作させる方法の紹介。
- TD4 CPU EMULATER
- TD4 の動作を IC レベルで図示してくれる。
おわりに
※IchigoJamはjig.jpの登録商標です。
1
投稿者の人気記事
-
mikecat
さんが
2022/12/10
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する