標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第260回]
●ADD、ADC、SUB、SBBのテストプログラムです
4本目のテストプログラムです。
2009/6/12 12:5 TEST4.TXT
END=40D2
;;; MYCPU80 TEST4
;;; ADD ADC SUB SBB
;;; 09/6/12
;
ORG $4000
;
STCK=$5000
MWK=$5001
ERBF=$6000
;
4000 310050 LXI SP,STCK
4003 0E00 MVI C,00
4005 C5 PUSH B
4006 F1 POP PSW;CLEAR FLAG REGISTER
;
; ADD
4007 CD8440 CALL MVI
;
400A 80 ADD B;DE+12=F0 S,H,P
400B F5 PUSH PSW
400C 81 ADD C;F0+34=124 P,C
400D F5 PUSH PSW
400E 82 ADD D;24+56=7A
400F F5 PUSH PSW
4010 83 ADD E;7A+78=F2 S,H
4011 F5 PUSH PSW
4012 84 ADD H;F2+9A=18C S,C
4013 F5 PUSH PSW
4014 85 ADD L;8C+BC=148 H,P,C
4015 F5 PUSH PSW
4016 87 ADD A;48+48=90 S,H,P
4017 F5 PUSH PSW
4018 E5 PUSH H
4019 210150 LXI H,MWK
401C 3670 MVI M,70
401E 86 ADD M;90+70=100 Z,P,C
401F E1 POP H
4020 F5 PUSH PSW
;ADC
4021 88 ADC B;00+12+1=13
4022 F5 PUSH PSW
4023 89 ADC C;13+34=47 P
4024 F5 PUSH PSW
4025 8A ADC D;47+56=9D S
4026 F5 PUSH PSW
4027 8B ADC E;9D+78=115 H,C
4028 F5 PUSH PSW
4029 8C ADC H;15+9A+1=B0 S,H
402A F5 PUSH PSW
402B 8D ADC L;B0+BC=16C P,C
402C F5 PUSH PSW
402D 8F ADC A;6C+6C+1=D9 S,H
402E F5 PUSH PSW
402F E5 PUSH H
4030 210150 LXI H,MWK
4033 3627 MVI M,27
4035 8E ADC M;D9+27=100 Z,H,P,C
4036 E1 POP H
4037 F5 PUSH PSW
;SUB
4038 90 SUB B;00-12=EE S,H,P,C
4039 F5 PUSH PSW
403A 91 SUB C;EE-34=BA S
403B F5 PUSH PSW
403C 92 SUB D;BA-56=64
403D F5 PUSH PSW
403E 93 SUB E;64-78=EC S,H,C
403F F5 PUSH PSW
4040 94 SUB H;EC-9A=52
4041 F5 PUSH PSW
4042 95 SUB L;52-BC=96 S,H,P,C
4043 F5 PUSH PSW
4044 97 SUB A;96-96=00 Z,P
4045 F5 PUSH PSW
4046 E5 PUSH H
4047 210150 LXI H,MWK
404A 3656 MVI M,56
404C 96 SUB M;00-56=AA S,H,P,C
404D E1 POP H
404E F5 PUSH PSW
;SBB
404F 98 SBB B;AA-12-1=97 S
4050 F5 PUSH PSW
4051 99 SBB C;97-34=63
4052 F5 PUSH PSW
4053 9A SBB D;63-56=0D H
4054 F5 PUSH PSW
4055 9B SBB E;0D-78=95 S,H,P,C
4056 F5 PUSH PSW
4057 9C SBB H;95-9A-1=FA S,H,P,C
4058 F5 PUSH PSW
4059 9D SBB L;FA-BC-1=3D H
405A F5 PUSH PSW
405B 9F SBB A;3D-3D=00 Z,P
405C F5 PUSH PSW
405D E5 PUSH H
405E 210150 LXI H,MWK
4061 3678 MVI M,78
4063 9E SBB M;00-78=88 S,H,P,C
4064 E1 POP H
4065 F5 PUSH PSW
;;;
; CHECK
4066 310060 LXI SP,ERBF
4069 210050 LXI H,STCK
406C 2B DCX H
406D 11D240 LXI D,TBL1END
4070 0640 MVI B,40
4072 1A LOOP0:LDAX D
4073 BE CMP M
4074 CA7840 JZ LOOP0_2
4077 E5 PUSH H;ERR
4078 2B LOOP0_2:DCX H
4079 1B DCX D
407A 05 DCR B
407B C27240 JNZ LOOP0
407E E5 PUSH H
407F 210000 LXI H,$0000
4082 E5 PUSH H
4083 76 HLT
;
;SUBROUTINE
4084 0612 MVI:MVI B,12
4086 0E34 MVI C,34
4088 1656 MVI D,56
408A 1E78 MVI E,78
408C 269A MVI H,9A
408E 2EBC MVI L,BC
4090 3EDE MVI A,DE
4092 C9 RET
;
;COMPARE DATA TABLE
;SBB
4093 95 DB 95
4094 88 DB 88;M
4095 44 DB 44;
4096 00 DB 00;A-A
4097 10 DB 10
4098 3D DB 3D;L
4099 95 DB 95
409A FA DB FA;H
409B 85 DB 85
409C 95 DB 95;E
409D 10 DB 10
409E 0D DB 0D;D
409F 04 DB 04
40A0 63 DB 63;C
40A1 80 DB 80
40A2 97 DB 97;B
;SUB
40A3 95 DB 95
40A4 AA DB AA;M
40A5 44 DB 44;
40A6 00 DB 00;A-A
40A7 95 DB 95
40A8 96 DB 96;L
40A9 00 DB 00
40AA 52 DB 52;H
40AB 91 DB 91
40AC EC DB EC;E
40AD 00 DB 00
40AE 64 DB 64;D
40AF 80 DB 80
40B0 BA DB BA;C
40B1 95 DB 95
40B2 EE DB EE;B
;ADC
40B3 55 DB 55
40B4 00 DB 00;M
40B5 90 DB 90;
40B6 D9 DB D9;A+A
40B7 05 DB 05
40B8 6C DB 6C;L
40B9 90 DB 90
40BA B0 DB B0;H
40BB 11 DB 11
40BC 15 DB 15;E
40BD 80 DB 80
40BE 9D DB 9D;D
40BF 04 DB 04
40C0 47 DB 47;C
40C1 00 DB 00
40C2 13 DB 13;B
;ADD
40C3 45 DB 45
40C4 00 DB 00;M
40C5 94 DB 94;
40C6 90 DB 90;A+A
40C7 15 DB 15
40C8 48 DB 48;L
40C9 81 DB 81
40CA 8C DB 8C;H
40CB 90 DB 90
40CC F2 DB F2;E
40CD 00 DB 00
40CE 7A DB 7A;D
40CF 05 DB 05
40D0 24 DB 24;C
40D1 94 DB 94
40D2 F0 TBL1END:DB F0;B
;
ERBF =6000 LOOP0 =4072 LOOP0_2 =4078
MVI =4084 MWK =5001 STCK =5000
TBL1END =40D2
基本的には今までのテストプログラムと同じです。
はじめにB〜Aの各レジスタにそれぞれ初期値をセットしておいて、B〜LおよびMとAレジスタとの間でADD、ADC、SUB、SBBを実行していきます。
命令の実行によってAレジスタには計算の結果が入れられますから、Aレジスタの値だけが変わっていきます。
その他のレジスタの値は変化しません。
今までのテストプログラムと同じように、テストプログラムの実行結果をUSB経由でパソコンに送りました。
ところでテストプログラムの最後に書いてある比較用のデータですが、こればどうやって作っているかといいますと、ひとつひとつ全部計算して作っているのです。
もちろんフラグについても同じです。
この値とこの値のADDだから結果はこうなって、フラグはこれとこれがONになって…。
という調子で全部いわば手作業で決定したものです。
コンピュータは手作業をなくして自動化(オートメーション)するための道具なのですが、その肝心かなめのプログラムの作成作業そのものは、手作業なのですねぇ。
でも、なにか、こう、もう少し、うまい工夫はないものでしょうか、ねぇ…。
いい加減疲れてきてしまいますと、なんとかして手抜きして楽にできる方法はないものかと、あれこれ考えるようになります。
おや。
いい方法があるじゃありませんか。
どうして、もっと早く思いつかなかったのでしょう。
いつも、気がつくのが、ちょいと、遅いのです。
本日は時間がなくなってしまいましたので、比較データを作成する、そのちょいといい方法につきましては、次回に説明することにいたします。
2009.6.26upload
前へ
次へ
ホームページトップへ戻る