GMC-4

レジスタ

名前サイズ説明
A 4bit Aレジスタ
B 4bit Bレジスタ
Y 4bit Yレジスタ
Z 4bit Zレジスタ
A' 4bit 補助 Aレジスタ
B' 4bit 補助 Bレジスタ
Y' 4bit 補助 Yレジスタ
Z' 4bit 補助 Zレジスタ
F 1bit 実行フラグ
PC 7bit プログラムカウンタ (0-95)

1. 実行フラグ

F 実行フラグ
1演算結果が符号なしの最大範囲(0 - 15)を超えた
0上記以外


命令一覧表

記号の説明

1. サイズ欄

Nオペランドサイズが4ビット

2. ニーモニック欄

#4ビットの即値データ
#88ビットの即値データ

3. 機能欄

KEY キー
7SEG 7セグメントLED
LED LED
BUZZER ブザー
1<<nn 回左へビットシフト
1>>nn 回右へビットシフト

4. F欄(F)

*命令の実行によりフラグは変化
11をセット

5. ステート欄

仕様書にステート・クロック数などの記載がないため、命令長×1クロックで実装


命令

(1) 転送
命令群サイズニーモニック機能 F命令長ステート補足
KA N KA A ← KEY *1N 1 F=0 キー入力あり
F=1 キー入力なし
AO N AO 7SEG ← A 11N 1
AM N AM (0x50+Y) ← A 11N 1
MA N MA A ← (0x50+Y) 11N 1
TIA N TIA # A ← # 12N 2
TIY N TIY # Y ← # 12N 2

(2) 交換
命令群サイズニーモニック機能 F命令長ステート補足
CH N CH A ⇔ B
Y ⇔ Z
11N 1
CY N CY A ⇔ Y 11N 1

(3) 算術演算
命令群サイズニーモニック機能 F命令長ステート補足
M+ N M+ A ← (0x50+Y) + A *1N 1
M- N M- A ← (0x50+#) - A *1N 1
AIA N AIA # A ← A + # *2N 2
AIY N AIY # Y ← Y + # *2N 2
CIA N CIA # if [A-#]=0 then F ← 0
else F ← 1
*2N 2
CIY N CIY # if [Y-#]=0 then F ← 0
else F ← 1
*2N 2

(4) ジャンプ
命令群サイズニーモニック機能 F命令長ステート補足
JUMP - JUMP #8 if F=1 then PC ← #8 13N 3

(5) コール
命令群サイズニーモニック機能 F命令長ステート補足
CAL - CAL RSTO 7SEG ← 0000000 12N 2
- CAL SETR LED ← LED or [1<<Y] 12N 2
- CAL RSTR LED ← LED and ~[1<<Y] 12N 2
- CAL INPT 未実装 12N 2
- CAL CMPL A ← A xor 15 12N 2
- CAL CHNG A ⇔ A'
B ⇔ B'
Y ⇔ Y'
Z ⇔ Z'
12N 2
- CAL SIFT F = 1 - [A and 1]
A = A >> 1
*2N 2 F=0 Aが奇数
F=1 Aが偶数
- CAL ENDS BUZZER ← エンド音 12N 2
- CAL ERRS BUZZER ← エラー音 12N 2
- CAL SHTS BUZZER ← ピッ 12N 2
- CAL LONS BUZZER ← ピー 12N 2
- CAL SUND BUZZER ← ドレミファ 12N 2
- CAL DSPR LED ← [(0x5f)<<4] or (0x5e)12N 2
- CAL DEM- (0x50+Y) ← DAA[(0x50+Y) - A] 12N 2
- CAL DEM+ (0x50+Y) ← DAA[(0x50+Y) + A] 12N 2


命令コードマップ

CODE 0 1 2 3 4 5 6 7 8 9 A B C D E F
KA AO CH CY AM MA M+ M- TIA AIA TIY AIY CIA CIY CAL JUMP

オペコード $E
CODE 0 1 2 3 4 5 6 7 8 9 A B C D E F
E CAL
RSTO
CAL
SETR
CAL
RSTR
CAL
INPT
CAL
CMPL
CAL
CHNG
CAL
SIFT
CAL
ENDS
CAL
ERRS
CAL
SHTS
CAL
LONS
CAL
SUND
CAL
TIMR
CAL
DSPR
CAL
DEM-
CAL
DEM+


アセンブラ仕様

GMC-001モジュールに、アセンブラを内蔵しています。
ソースファイル(ASM)を読み込むことで、デバッガからソースレベルのデバッグが可能になります。

以下の機能をサポートします。



疑似命令

疑似命令引数 説明
.ORG 00 - 5F開始アドレスを指定します。
他命令やデータと重ならない限り、何度も呼ぶことができます。
デフォルトは、00。
.DN 0 - F 1ニブルのデータを定義します。
カンマで区切ることで、複数の値を定義できます。
例).DN F, E, C


No.75 2桁×1桁の10進乗算

No.75.asm

; ---------------------------------------------------------------- 
;                                                                  
;   No.75 2桁×1桁の10進乗算                                     
;                                                                  
; ---------------------------------------------------------------- 
START:
	TIA	0
	TIY	3
	AM
	TIY	4
	AM
	TIY	5
	AM
	TIY	2
	MA

LABEL_0E:
	CH
	TIY	1

LABEL_11:
	MA
	AIY	4
	CH
	CH
	CAL	DEM+
	AIY	C
	CIY	F
	JUMP	LABEL_11
	CH
	AIA	F
	CIA	0
	JUMP	LABEL_0E
	TIY	3
	MA
	AIA	8
	JUMP	LABEL_42
	MA
	TIY	F
	AM
	TIY	4
	MA
	TIY	E
	AM
	CAL	DSPR
	TIY	5
	MA
	AO
	JUMP	$

LABEL_42:
	TIA	C
	AO
	CAL	ERRS
	JUMP	$


; ---------------------------------------------------------------- 
;   データ                                                         
; ---------------------------------------------------------------- 
	.ORG	50
	.DN	7, 2
	.DN	8
	.DN	0, 0, 0



参考資料

今回作成するにあたり、下記書籍・サイトをを参考に作成しました。
大変貴重な情報を公開していただき有難うございます。