;CHECKSUM ANY CP/M FILE 0100 ORG 100H 0100 C31901 JMP START 0103 434B53554DID DB 'CKSUM AS OF 7/20/77',0DH,0AH,'$' ;INIT LOCAL STACK 0119 210000 START LXI H,0 011C 39 DAD SP 011D 22F401 SHLD STACK 0120 31F401 LXI SP,STACK ;PRINT ID MESSAGE 0123 110301 LXI D,ID 0126 0E09 MVI C,PRINT 0128 CD0500 CALL BDOS ;OPEN THE FILE 012B 115C00 LXI D,FCB 012E 0E0F MVI C,OPEN 0130 CD0500 CALL BDOS 0133 3C INR A 0134 C25601 JNZ LINE 0137 CD4B01 CALL ERXIT 013A 2B2B46494C DB '++FILE NOT FOUND$' 014B D1 ERXIT POP D ;GET MSG 014C 0E09 MVI C,PRINT 014E CD0500 CALL BDOS 0151 2AF401 EXIT LHLD STACK 0154 F9 SPHL ;RESTORE STACK 0155 C9 RET ;OPENED OK 0156 3E0D LINE MVI A,0DH 0158 CDC001 CALL TYPE 015B 3E0A MVI A,0AH 015D CDC001 CALL TYPE 0160 0610 MVI B,16 ;# OF HEX PER LINE 0162 C5 LOOP PUSH B ;SAVE DIGIT COUNT 0163 CDCD01 CALL FREAD 0166 B7 ORA A 0167 C27E01 JNZ CKERR 016A 218000 LXI H,80H 016D AF XRA A 016E 86 CKSLP ADD M 016F 2C INR L 0170 C26E01 JNZ CKSLP 0173 CDA301 CALL XOB 0176 C1 POP B 0177 05 DCR B 0178 C26201 JNZ LOOP 017B C35601 JMP LINE ;NON-ZERO DISK RETURN CODE 017E 3D CKERR DCR A 017F CA9801 JZ EOF 0182 CD4B01 CALL ERXIT 0185 2A2B2B4449 DB '*++DISK READ ERROR$' 0198 CD4B01 EOF CALL ERXIT 019B 0D0A2B2B45 DB 0DH,0AH,'++EOF$' 01A3 F5 XOB PUSH PSW 01A4 1F RAR 01A5 1F RAR 01A6 1F RAR 01A7 1F RAR 01A8 CDB501 CALL NIBBL 01AB F1 POP PSW 01AC CDB501 CALL NIBBL 01AF 3E20 MVI A,' ' 01B1 CDC001 CALL TYPE 01B4 C9 RET 01B5 E60F NIBBL ANI 0FH 01B7 FE0A CPI 10 01B9 DABE01 JC ISNUM 01BC C607 ADI 7 01BE C630 ISNUM ADI '0' 01C0 C5 TYPE PUSH B 01C1 D5 PUSH D 01C2 E5 PUSH H 01C3 5F MOV E,A 01C4 0E02 MVI C,WRCON 01C6 CD0500 CALL BDOS 01C9 E1 POP H 01CA D1 POP D 01CB C1 POP B 01CC C9 RET ;FILE READ 01CD 115C00 FREAD LXI D,FCB 01D0 0E14 MVI C,READ 01D2 CD0500 CALL BDOS 01D5 C9 RET ;PROG SHOULD CHECK STAT 01D6 DS 30 01F4 STACK DS 2 ; ; BDOS EQUATES (VERSION 3) ; 0001 = RDCON EQU 1 0002 = WRCON EQU 2 0009 = PRINT EQU 9 000F = OPEN EQU 15 ;0FFH=NOT FOUND 0010 = CLOSE EQU 16 ; " " 0011 = SRCHF EQU 17 ; " " 0012 = SRCHN EQU 18 ; " " 0013 = DELT EQU 19 ;NO RET CODE 0014 = READ EQU 20 ;0=OK, 1=EOF 0015 = WRITE EQU 21 ;0=OK, 1=ERR, 2=?, 0FFH=NO DIR SPC 0016 = MAKE EQU 22 ;0FFH=BAD 0017 = REN EQU 23 ;0FFH=BAD 001A = STDMA EQU 26 0005 = BDOS EQU 5 005C = FCB EQU 5CH