名前 | サイズ | 説明 |
---|---|---|
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) |
F |
|
N | オペランドサイズが4ビット |
# | 4ビットの即値データ |
#8 | 8ビットの即値データ |
KEY | キー |
7SEG | 7セグメントLED |
LED | LED |
BUZZER | ブザー |
1<<n | n 回左へビットシフト |
1>>n | n 回右へビットシフト |
* | 命令の実行によりフラグは変化 |
1 | 1をセット |
仕様書にステート・クロック数などの記載がないため、命令長×1クロックで実装
命令群 | サイズ | ニーモニック | 機能 | F | 命令長 | ステート | 補足 |
KA | N | KA | A ← KEY | * | 1N | 1 | F=0 キー入力あり F=1 キー入力なし |
AO | N | AO | 7SEG ← A | 1 | 1N | 1 | |
AM | N | AM | (0x50+Y) ← A | 1 | 1N | 1 | |
MA | N | MA | A ← (0x50+Y) | 1 | 1N | 1 | |
TIA | N | TIA # | A ← # | 1 | 2N | 2 | |
TIY | N | TIY # | Y ← # | 1 | 2N | 2 |
命令群 | サイズ | ニーモニック | 機能 | F | 命令長 | ステート | 補足 |
CH | N | CH | A ⇔ B Y ⇔ Z | 1 | 1N | 1 | |
CY | N | CY | A ⇔ Y | 1 | 1N | 1 |
命令群 | サイズ | ニーモニック | 機能 | 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 |
命令群 | サイズ | ニーモニック | 機能 | F | 命令長 | ステート | 補足 |
JUMP | - | JUMP #8 | if F=1 then PC ← #8 | 1 | 3N | 3 |
命令群 | サイズ | ニーモニック | 機能 | F | 命令長 | ステート | 補足 |
CAL | - | CAL RSTO | 7SEG ← 0000000 | 1 | 2N | 2 | |
- | CAL SETR | LED ← LED or [1<<Y] | 1 | 2N | 2 | ||
- | CAL RSTR | LED ← LED and ~[1<<Y] | 1 | 2N | 2 | ||
- | CAL INPT | 未実装 | 1 | 2N | 2 | ||
- | CAL CMPL | A ← A xor 15 | 1 | 2N | 2 | ||
- | CAL CHNG | A ⇔ A' B ⇔ B' Y ⇔ Y' Z ⇔ Z' | 1 | 2N | 2 | ||
- | CAL SIFT | F = 1 - [A and 1] A = A >> 1 | * | 2N | 2 | F=0 Aが奇数 F=1 Aが偶数 | |
- | CAL ENDS | BUZZER ← エンド音 | 1 | 2N | 2 | ||
- | CAL ERRS | BUZZER ← エラー音 | 1 | 2N | 2 | ||
- | CAL SHTS | BUZZER ← ピッ | 1 | 2N | 2 | ||
- | CAL LONS | BUZZER ← ピー | 1 | 2N | 2 | ||
- | CAL SUND | BUZZER ← ドレミファ | 1 | 2N | 2 | ||
- | CAL DSPR | LED ← [(0x5f)<<4] or (0x5e) | 1 | 2N | 2 | ||
- | CAL DEM- | (0x50+Y) ← DAA[(0x50+Y) - A] | 1 | 2N | 2 | ||
- | CAL DEM+ | (0x50+Y) ← DAA[(0x50+Y) + A] | 1 | 2N | 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 |
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進乗算 ; ; ---------------------------------------------------------------- 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
今回作成するにあたり、下記書籍・サイトをを参考に作成しました。
大変貴重な情報を公開していただき有難うございます。