復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第56回]
●ファイル内容比較プログラム(2)
前回からの続きです。
前回はファイル内容比較プログラム(ftst6cmp.txt)のソースリストをお見せしました。
下はそれをZASM.COMでアセンブルしてバイナリファイルが作成されたときに同時に作成されたアセンブルリストです。
2012/3/10 21:25 ftst6cmp.txt
END=8226
; BDOS TEST6 COMPARE
;2012/3/7
;
ORG $8100
FCALL=$8005
FCBWK=$803B
RECNO2=$805B
FCB=$805C
FCB2=$806C
RECNO=$807C
DMA1=$8080
DMA2=$8300
BYTECNTR=$8380
AWK=$8382
;
8100 216C80 LD HL,FCB2
8103 113B80 LD DE,FCBWK
8106 0611 LD B,11;=17
8108 7E LOOP1:LD A,(HL)
8109 12 LD (DE),A
810A 23 INC HL
810B 13 INC DE
810C 05 DEC B
810D C20881 JP NZ,LOOP1
;
8110 0E0F LD C,0F;open
8112 115C80 LD DE,FCB
8115 CD0580 CALL FCALL
8118 3C INC A;if FFH?
8119 CA7C81 JP Z,NOFILERR
;
811C 0E0F LD C,0F;open
811E 113B80 LD DE,FCBWK
8121 CD0580 CALL FCALL
8124 3C INC A;if FFH?
8125 CA7C81 JP Z,NOFILERR
;
8128 AF XOR A
8129 327C80 LD (RECNO),A
812C 325B80 LD (RECNO2),A
812F 218083 LD HL,BYTECNTR
8132 77 LD (HL),A
8133 23 INC HL
8134 77 LD (HL),A
;
8135 0E1A LOOP2:LD C,1A;DMA address set
8137 118080 LD DE,DMA1
813A CD0580 CALL FCALL
813D 0E14 LD C,14;read
813F 115C80 LD DE,FCB
8142 CD0580 CALL FCALL
8145 B7 OR A
8146 C28481 JP NZ,CMPEND;read end
;
8149 0E1A LD C,1A;DMA address set
814B 110083 LD DE,DMA2
814E CD0580 CALL FCALL
8151 0E14 LD C,14;read
8153 113B80 LD DE,FCBWK
8156 CD0580 CALL FCALL
8159 B7 OR A
815A C28481 JP NZ,CMPEND;read end
;
815D 0E80 LD C,80
815F 218080 LD HL,DMA1
8162 110083 LD DE,DMA2
8165 1A LOOP3:LD A,(DE)
8166 BE CP (HL)
8167 C48D81 CALL NZ,NOTEQ
816A 23 INC HL
816B 13 INC DE
816C E5 PUSH HL
816D 2A8083 LD HL,(BYTECNTR)
8170 23 INC HL
8171 228083 LD (BYTECNTR),HL
8174 E1 POP HL
8175 0D DEC C
8176 C26581 JP NZ,LOOP3
8179 C33581 JP LOOP2
;
817C 111982 NOFILERR:LD DE,CANTOPN
817F 0E09 LD C,09
8181 CD0580 CALL FCALL
8184 0E1A CMPEND:LD C,1A;DMA address set
8186 118080 LD DE,DMA1
8189 CD0580 CALL FCALL
818C C9 RET
;
818D C5 NOTEQ:PUSH BC
818E D5 PUSH DE
818F E5 PUSH HL
8190 2A8083 LD HL,(BYTECNTR)
8193 CDD081 CALL HEX4DP
8196 CDC381 CALL SPDP
8199 E1 POP HL
819A 7E LD A,(HL)
819B 328283 LD (AWK),A
819E D1 POP DE
819F 1A LD A,(DE)
81A0 D5 PUSH DE
81A1 E5 PUSH HL
81A2 F5 PUSH AF
81A3 3A8283 LD A,(AWK)
81A6 CDE181 CALL B2HEXDP
81A9 3E2D LD A,2D;"-"
81AB CDC581 CALL ADP
81AE F1 POP AF
81AF CDE181 CALL B2HEXDP
81B2 CDB981 CALL CRLF
81B5 E1 POP HL
81B6 D1 POP DE
81B7 C1 POP BC
81B8 C9 RET
;
;CL & LF
81B9 3E0D CRLF:LD A,0D
81BB CDC581 CALL ADP
81BE 3E0A LD A,0A
81C0 C3C581 JP ADP
;space disp
81C3 3E20 SPDP:LD A,20
;A disp
81C5 C5 ADP:PUSH BC
81C6 E5 PUSH HL
81C7 5F LD E,A
81C8 0E02 LD C,02
81CA CD0580 CALL FCALL
81CD E1 POP HL
81CE C1 POP BC
81CF C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
81D0 C5 HEX4DP:PUSH BC
81D1 E5 PUSH HL
81D2 CDFA81 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
81D5 D5 PUSH DE
81D6 EB EX DE,HL
81D7 CDEC81 CALL DEDP
81DA D1 POP DE
81DB CDEC81 CALL DEDP
81DE E1 POP HL
81DF C1 POP BC
81E0 C9 RET
;A(binary) to asckii 2bytes HEX & disp
81E1 C5 B2HEXDP:PUSH BC
81E2 E5 PUSH HL
81E3 CD0082 CALL B2HEX2
81E6 CDEC81 CALL DEDP
81E9 E1 POP HL
81EA C1 POP BC
81EB C9 RET
;
;DE(asckii 2bytes) disp
81EC D5 DEDP:PUSH DE
81ED 5A LD E,D
81EE 0E02 LD C,02
81F0 CD0580 CALL FCALL
81F3 D1 POP DE
81F4 0E02 LD C,02
81F6 CD0580 CALL FCALL
81F9 C9 RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
81FA 7C B2HEX4:LD A,H
81FB CD0082 CALL B2HEX2
81FE EB EX DE,HL
81FF 7B LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
8200 F5 B2HEX2:PUSH AF
8201 0F RRCA
8202 0F RRCA
8203 0F RRCA
8204 0F RRCA
8205 CD0F82 CALL B2HEX1
8208 57 LD D,A
8209 F1 POP AF
820A CD0F82 CALL B2HEX1
820D 5F LD E,A
820E C9 RET
;binary to hex, low 4bit to ascii 1charactor
820F E60F B2HEX1:AND 0F
8211 C630 ADD A,30
8213 FE3A CP 3A
8215 D8 RET C;0-9
8216 C607 ADD A,07;A-F
8218 C9 RET
;
8219 63616E27 CANTOPN:"can'"
821D 74206F70 "t op"
8221 656E21 "en!"
8224 0D DB 0D
8225 0A DB 0A
8226 24 DB 24;$
;
ADP =81C5 AWK =8382 B2HEX1 =820F
B2HEX2 =8200 B2HEX4 =81FA B2HEXDP =81E1
BYTECNTR =8380 CANTOPN =8219 CMPEND =8184
CRLF =81B9 DEDP =81EC DMA1 =8080
DMA2 =8300 FCALL =8005 FCB =805C
FCB2 =806C FCBWK =803B HEX4DP =81D0
LOOP1 =8108 LOOP2 =8135 LOOP3 =8165
NOFILERR =817C NOTEQ =818D RECNO =807C
RECNO2 =805B SPDP =81C3
|