DEC社 TOPS-20のSNOBOL言語で8080アセンブラを作成(テスト編)

SNOBOL

SNOBOL

SNOBOL言語で8080アセンブラ

2018年4月、歴史的に貴重なDEC社 TOPS-20のSNOBOL言語で8080アセンブラ(ASM80.SNO)を作成しました。このブログでは、ASM80.SNOのテスト編を書きます。

ASM80 By SNOBOL

ASM80 By SNOBOL

ASM80.SNOの設計編とコード編は、下記ブログを参照してください。

DEC社 TOPS-20のSNOBOL言語で8080アセンブラを作成(設計編)

DEC社 TOPS-20のSNOBOL言語で8080アセンブラを作成(コード編)

8080の命令コード

昔 TK-80トレーニングキットで趣味のプログラミングしていた頃、命令コード表を見ながらハンドアセンブルしていました。

TK-80トレーニングキットで趣味のプログラミング

8080命令セットは、下記ブログを参照してください。

懐かしいインテル8080命令セットのメモ

以下、8080の命令コード(16進数)を示します。

 

8ビット転送命令

MOV命令、MVI命令、LDAX命令、STAX命令、LDA命令、STA命令の機械語命令コードを示します。

8080命令コード (1)

8080命令コード (1)

16ビット転送命令

LXI命令、MVI命令、LDLD命令、SHLD命令、SPHL命令の機械語命令コードを示します。

8080命令コード (2)

8080命令コード (2)

スタック操作命令

PUSH命令、POP命令、XTHL命令の機械語命令コードを示します。

8080命令コード (3)

8080命令コード (3)

レジスタ交換命令

XCHG命令の機械語命令コードを示します。

8080命令コード (4)

8080命令コード (4)

8ビット算術演算命令

ADD命令、ADC命令、SUB命令、SBB命令、ADI命令、ACI命令、SUI命令、SBI命令の機械語命令コードを示します。

8080命令コード (5)

8080命令コード (5)

8ビット論理演算命令

ANA命令、ORA命令、XRA命令、CMP命令、ANI命令、ORI命令、XRI命令、CPI命令の機械語命令コードを示します。

8080命令コード (6)

8080命令コード (6)

8ビット増減演算命令

INR命令、DCR命令の機械語命令コードを示します。

8080命令コード (7)

8080命令コード (7)

その他演算命令

DAA命令、CMA命令、CMC命令、STC命令の機械語命令コードを示します。

8080命令コード (8)

8080命令コード (8)

CPU制御命令

NOP命令、HLT命令、DI命令、EI命令の機械語命令コードを示します。

8080命令コード (9)

8080命令コード (9)

16ビット算術演算命令

DAD命令、INX命令、DCX命令の機械語命令コードを示します。

8080命令コード (10)

8080命令コード (10)

シフト、ローテイト命令

RLC命令、RAL命令、RRC命令、RAR命令の機械語命令コードを示します。

8080命令コード (11)

8080命令コード (11)

分岐命令

JMP命令、Jccc命令、PCHL命令の機械語命令コードを示します。

8080命令コード (12)

8080命令コード (12)

コール、リターン命令

CALL命令、Cccc命令、RET命令、Rcc命令、RST命令の機械語命令コードを示します。

8080命令コード (13)

8080命令コード (13)

入出力命令

IN命令、OUT命令の機械語命令コードを示します。

8080命令コード (14)

8080命令コード (14)

ASM80.SNOの実行

Altair 8800 simulatorでCP/Mを実行したときに使用した8080サンプルコードをASM80.SNOでアセンブルしてみます。

CP/Mシミュレータで懐かしのインテル8080アセンブラを使う

テスト用のサンプルコードを下記に示します。

ASM80.SNOでアセンブルします。

アセンブル結果の.LSTを確認します。

オブジェクトのヘキサ表示を確認すると CP/Mでアセンブルしたものと一致しています。トイプログラムレベルですが、十分に実用的だと思います。

ASM80.SNOのテスト

8080のすべての命令コードを正しくアセンブルできるか確認しました。

テスト用のコードを T.ASMに作成して、ASM80.SNOでアセンブルしました。

エラーのソースコード部分を指摘するエラーメッセージを表示しました。

リストファイルで確認します。

命令コード表と見比べて、正しくアセンブルしていることを確認しました。

まとめ

SNOBOL言語で8080アセンブラ(ASM80.SNO)を作成しました。大学4回生のときにSNOBOLでプログラミングしてから、約41年ぶりにSNOBOLでプログラミングしました。約400ステップ規模のSNOBOLでアセンブラを記述できたのは、SNOBOLの強力なパターンマッチの威力です。

 

このエントリーをはてなブックマークに追加