ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
| 当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.7 前へ 次へ 目次へ戻る ホームページトップへ戻る |
| ☆ルート計算プログラム ND80ZVをご購入いただいたお客様からTK−80応用プログラムを送っていただきました。 プログラムを解析する過程でND80ZV組立キットに附属しているZ80アセンブラ、Z80逆アセンブラを使います。それらのプログラムの使用例としても参考になると思います。 |
[第114回]
●ルート計算プログラム(TK−80応用プログラム)(その2)
ND80ZV組立キットをご購入いただいた北海道のM様から、TK−80応用プログラムを送っていただきました。
01〜99の範囲の整数のみですが、ルート(平方根)を求めるプログラムです。
前回はそのマシン語プログラムの16進コードをお見せしました。
戻って見ていただくのも面倒なことと思いますので下に再掲いたします。
>dm 8000,80b5 8000 06 0A 21 AC 82 AF 77 23-05 C2 06 80 CD 16 02 07 ..!ャ.ッw#.ツ..ヘ... 8010 07 07 07 21 AC 82 77 E5-CD 16 02 E1 86 77 7E 11 ...!ャ.w.ヘ....w~. 8020 F4 83 12 3E 01 32 B3 82-CD 70 80 DA 37 80 CD 90 ...>.2ウ.ヘp.レ7.ヘ. 8030 80 CD A0 80 C3 28 80 21-B4 82 06 02 11 F6 83 7E .ヘ.テ(.!エ......~ 8040 12 23 13 05 C2 3F 80 CD-C0 01 21 FA 83 11 F9 83 .#..ツ?.ヘタ.!..... 8050 1A 77 21 F9 83 11 F8 83-1A 77 21 FB 83 3E 48 77 .w!......w!..>Hw 8060 21 F8 83 3E 0E 77 21 FC-83 3E 80 B6 77 C3 00 80 !..>.w!..>.カwテ.. 8070 21 B3 82 11 AF 82 06 04-AF 1A 9E 27 12 2B 1B 05 !ウ..ッ...ッ..'.+.. 8080 C2 79 80 C9 00 00 00 00-00 00 00 00 00 00 00 00 ツy.ノ............ 8090 21 B5 82 7E C6 01 27 77-2B 7E CE 00 27 77 C9 00 !オ.~ニ.'w+~ホ.'wノ. 80A0 06 03 21 B3 82 7E C6 02-27 77 17 E6 01 2B 86 27 ..!ウ.~ニ.'w...+.' 80B0 77 05 C2 AA 80 C9 66 6F-0E 00 CD 5D 10 CD 1B 10 w.ツェ.ノfo..ヘ].ヘ.. |


8000 060A LD B,0A 8002 21AC82 LD HL,$82AC 8005 AF XOR A 8006 77 LD (HL),A 8007 23 INC HL 8008 05 DEC B 8009 C20680 JP NZ,$8006 800C CD1602 CALL $0216 800F 07 RLCA 8010 07 RLCA 8011 07 RLCA 8012 07 RLCA 8013 21AC82 LD HL,$82AC 8016 77 LD (HL),A 8017 E5 PUSH HL 8018 CD1602 CALL $0216 801B E1 POP HL 801C 86 ADD A,(HL) 801D 77 LD (HL),A 801E 7E LD A,(HL) 801F 11F483 LD DE,$83F4 8022 12 LD (DE),A 8023 3E01 LD A,01 8025 32B382 LD ($82B3),A 8028 CD7080 CALL $8070 802B DA3780 JP C,$8037 802E CD9080 CALL $8090 8031 CDA080 CALL $80A0 8034 C32880 JP $8028 8037 21B482 LD HL,$82B4 803A 0602 LD B,02 803C 11F683 LD DE,$83F6 803F 7E LD A,(HL) 8040 12 LD (DE),A 8041 23 INC HL 8042 13 INC DE 8043 05 DEC B 8044 C23F80 JP NZ,$803F 8047 CDC001 CALL $01C0 804A 21FA83 LD HL,$83FA 804D 11F983 LD DE,$83F9 8050 1A LD A,(DE) 8051 77 LD (HL),A 8052 21F983 LD HL,$83F9 8055 11F883 LD DE,$83F8 8058 1A LD A,(DE) 8059 77 LD (HL),A 805A 21FB83 LD HL,$83FB 805D 3E48 LD A,48 805F 77 LD (HL),A 8060 21F883 LD HL,$83F8 8063 3E0E LD A,0E 8065 77 LD (HL),A 8066 21FC83 LD HL,$83FC 8069 3E80 LD A,80 806B B6 OR (HL) 806C 77 LD (HL),A 806D C30080 JP $8000 8070 21B382 LD HL,$82B3 8073 11AF82 LD DE,$82AF 8076 0604 LD B,04 8078 AF XOR A 8079 1A LD A,(DE) 807A 9E SBC A,(HL) 807B 27 DAA 807C 12 LD (DE),A 807D 2B DEC HL 807E 1B DEC DE 807F 05 DEC B 8080 C27980 JP NZ,$8079 8083 C9 RET 8084 00 NOP 8085 00 NOP 8086 00 NOP 8087 00 NOP 8088 00 NOP 8089 00 NOP 808A 00 NOP 808B 00 NOP 808C 00 NOP 808D 00 NOP 808E 00 NOP 808F 00 NOP 8090 21B582 LD HL,$82B5 8093 7E LD A,(HL) 8094 C601 ADD A,01 8096 27 DAA 8097 77 LD (HL),A 8098 2B DEC HL 8099 7E LD A,(HL) 809A CE00 ADC A,00 809C 27 DAA 809D 77 LD (HL),A 809E C9 RET 809F 00 NOP 80A0 0603 LD B,03 80A2 21B382 LD HL,$82B3 80A5 7E LD A,(HL) 80A6 C602 ADD A,02 80A8 27 DAA 80A9 77 LD (HL),A 80AA 17 RLA 80AB E601 AND 01 80AD 2B DEC HL 80AE 86 ADD A,(HL) 80AF 27 DAA 80B0 77 LD (HL),A 80B1 05 DEC B 80B2 C2AA80 JP NZ,$80AA 80B5 C9 RET |
ORG $8000
Z82AC=$82AC
Z0216=$0216
Z83F4=$83F4
Z82B3=$82B3
Z82B4=$82B4
Z83F6=$83F6
Z01C0=$01C0
Z83FA=$83FA
Z83F9=$83F9
Z83F8=$83F8
Z83FB=$83FB
Z83FC=$83FC
Z82AF=$82AF
Z82B5=$82B5
Z8000:LD B,0A
LD HL,Z82AC
XOR A
Z8006:LD (HL),A
INC HL
DEC B
JP NZ,Z8006
CALL Z0216
RLCA
RLCA
RLCA
RLCA
LD HL,Z82AC
LD (HL),A
PUSH HL
CALL Z0216
POP HL
ADD A,(HL)
LD (HL),A
LD A,(HL)
LD DE,Z83F4
LD (DE),A
LD A,01
LD (Z82B3),A
Z8028:CALL Z8070
JP C,Z8037
CALL Z8090
CALL Z80A0
JP Z8028
Z8037:LD HL,Z82B4
LD B,02
LD DE,Z83F6
Z803F:LD A,(HL)
LD (DE),A
INC HL
INC DE
DEC B
JP NZ,Z803F
CALL Z01C0
LD HL,Z83FA
LD DE,Z83F9
LD A,(DE)
LD (HL),A
LD HL,Z83F9
LD DE,Z83F8
LD A,(DE)
LD (HL),A
LD HL,Z83FB
LD A,48
LD (HL),A
LD HL,Z83F8
LD A,0E
LD (HL),A
LD HL,Z83FC
LD A,80
OR (HL)
LD (HL),A
JP Z8000
Z8070:LD HL,Z82B3
LD DE,Z82AF
LD B,04
XOR A
Z8079:LD A,(DE)
SBC A,(HL)
DAA
LD (DE),A
DEC HL
DEC DE
DEC B
JP NZ,Z8079
RET
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
Z8090:LD HL,Z82B5
LD A,(HL)
ADD A,01
DAA
LD (HL),A
DEC HL
LD A,(HL)
ADC A,00
DAA
LD (HL),A
RET
NOP
Z80A0:LD B,03
LD HL,Z82B3
LD A,(HL)
ADD A,02
DAA
LD (HL),A
Z80AA:RLA
AND 01
DEC HL
ADD A,(HL)
DAA
LD (HL),A
DEC B
JP NZ,Z80AA
RET
|
;;; root program for ND80Z3
; 2010/11/08
;
ORG $8000
;
SEGCG=$01C0
KEYIN=$0216
;
LEDDP1=$83F4
LEDDP3=$83F6
;
LED1=$83F8
LED2=$83F9
LED3=$83FA
LED4=$83FB
LED5=$83FC
;
DATA1=$82AC
DATA4=$82AF
DATA8=$82B3
DATA9=$82B4
DATA10=$82B5
;
Z8000:LD B,0A
LD HL,DATA1
XOR A
Z8006:LD (HL),A
INC HL
DEC B
JP NZ,Z8006
CALL KEYIN
RLCA
RLCA
RLCA
RLCA
LD HL,DATA1
LD (HL),A
PUSH HL
CALL KEYIN
POP HL
ADD A,(HL)
LD (HL),A
LD A,(HL)
LD DE,LEDDP1
LD (DE),A
LD A,01
LD (DATA8),A
Z8028:CALL Z8070
JP C,Z8037
CALL Z8090
CALL Z80A0
JP Z8028
Z8037:LD HL,DATA9
LD B,02
LD DE,LEDDP3
Z803F:LD A,(HL)
LD (DE),A
INC HL
INC DE
DEC B
JP NZ,Z803F
CALL SEGCG
LD HL,LED3
LD DE,LED2
LD A,(DE)
LD (HL),A
LD HL,LED2
LD DE,LED1
LD A,(DE)
LD (HL),A
LD HL,LED4
LD A,48
LD (HL),A
LD HL,LED1
LD A,0E
LD (HL),A
LD HL,LED5
LD A,80
OR (HL)
LD (HL),A
JP Z8000
Z8070:LD HL,DATA8
LD DE,DATA4
LD B,04
XOR A
Z8079:LD A,(DE)
SBC A,(HL)
DAA
LD (DE),A
DEC HL
DEC DE
DEC B
JP NZ,Z8079
RET
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
Z8090:LD HL,DATA10
LD A,(HL)
ADD A,01
DAA
LD (HL),A
DEC HL
LD A,(HL)
ADC A,00
DAA
LD (HL),A
RET
NOP
Z80A0:LD B,03
LD HL,DATA8
LD A,(HL)
ADD A,02
DAA
LD (HL),A
Z80AA:RLA
AND 01
DEC HL
ADD A,(HL)
DAA
LD (HL),A
DEC B
JP NZ,Z80AA
RET
|

2010/11/8 23:33 root.txt
END=80B5
;;; root program for ND80Z3
; 2010/11/08
;
ORG $8000
;
SEGCG=$01C0
KEYIN=$0216
;
LEDDP1=$83F4
LEDDP3=$83F6
;
LED1=$83F8
LED2=$83F9
LED3=$83FA
LED4=$83FB
LED5=$83FC
;
DATA1=$82AC
DATA4=$82AF
DATA8=$82B3
DATA9=$82B4
DATA10=$82B5
;
8000 060A Z8000:LD B,0A
8002 21AC82 LD HL,DATA1
8005 AF XOR A
8006 77 Z8006:LD (HL),A
8007 23 INC HL
8008 05 DEC B
8009 C20680 JP NZ,Z8006
800C CD1602 CALL KEYIN
800F 07 RLCA
8010 07 RLCA
8011 07 RLCA
8012 07 RLCA
8013 21AC82 LD HL,DATA1
8016 77 LD (HL),A
8017 E5 PUSH HL
8018 CD1602 CALL KEYIN
801B E1 POP HL
801C 86 ADD A,(HL)
801D 77 LD (HL),A
801E 7E LD A,(HL)
801F 11F483 LD DE,LEDDP1
8022 12 LD (DE),A
8023 3E01 LD A,01
8025 32B382 LD (DATA8),A
8028 CD7080 Z8028:CALL Z8070
802B DA3780 JP C,Z8037
802E CD9080 CALL Z8090
8031 CDA080 CALL Z80A0
8034 C32880 JP Z8028
8037 21B482 Z8037:LD HL,DATA9
803A 0602 LD B,02
803C 11F683 LD DE,LEDDP3
803F 7E Z803F:LD A,(HL)
8040 12 LD (DE),A
8041 23 INC HL
8042 13 INC DE
8043 05 DEC B
8044 C23F80 JP NZ,Z803F
8047 CDC001 CALL SEGCG
804A 21FA83 LD HL,LED3
804D 11F983 LD DE,LED2
8050 1A LD A,(DE)
8051 77 LD (HL),A
8052 21F983 LD HL,LED2
8055 11F883 LD DE,LED1
8058 1A LD A,(DE)
8059 77 LD (HL),A
805A 21FB83 LD HL,LED4
805D 3E48 LD A,48
805F 77 LD (HL),A
8060 21F883 LD HL,LED1
8063 3E0E LD A,0E
8065 77 LD (HL),A
8066 21FC83 LD HL,LED5
8069 3E80 LD A,80
806B B6 OR (HL)
806C 77 LD (HL),A
806D C30080 JP Z8000
8070 21B382 Z8070:LD HL,DATA8
8073 11AF82 LD DE,DATA4
8076 0604 LD B,04
8078 AF XOR A
8079 1A Z8079:LD A,(DE)
807A 9E SBC A,(HL)
807B 27 DAA
807C 12 LD (DE),A
807D 2B DEC HL
807E 1B DEC DE
807F 05 DEC B
8080 C27980 JP NZ,Z8079
8083 C9 RET
8084 00 NOP
8085 00 NOP
8086 00 NOP
8087 00 NOP
8088 00 NOP
8089 00 NOP
808A 00 NOP
808B 00 NOP
808C 00 NOP
808D 00 NOP
808E 00 NOP
808F 00 NOP
8090 21B582 Z8090:LD HL,DATA10
8093 7E LD A,(HL)
8094 C601 ADD A,01
8096 27 DAA
8097 77 LD (HL),A
8098 2B DEC HL
8099 7E LD A,(HL)
809A CE00 ADC A,00
809C 27 DAA
809D 77 LD (HL),A
809E C9 RET
809F 00 NOP
80A0 0603 Z80A0:LD B,03
80A2 21B382 LD HL,DATA8
80A5 7E LD A,(HL)
80A6 C602 ADD A,02
80A8 27 DAA
80A9 77 LD (HL),A
80AA 17 Z80AA:RLA
80AB E601 AND 01
80AD 2B DEC HL
80AE 86 ADD A,(HL)
80AF 27 DAA
80B0 77 LD (HL),A
80B1 05 DEC B
80B2 C2AA80 JP NZ,Z80AA
80B5 C9 RET
DATA1 =82AC DATA10 =82B5 DATA4 =82AF
DATA8 =82B3 DATA9 =82B4 KEYIN =0216
LED1 =83F8 LED2 =83F9 LED3 =83FA
LED4 =83FB LED5 =83FC LEDDP1 =83F4
LEDDP3 =83F6 SEGCG =01C0 Z8000 =8000
Z8006 =8006 Z8028 =8028 Z8037 =8037
Z803F =803F Z8070 =8070 Z8079 =8079
Z8090 =8090 Z80A0 =80A0 Z80AA =80AA
|