標準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

前へ
次へ
ホームページトップへ戻る