CP/M RMAC ASSEM 1.1 #001 DUMP.ASM VERSION OF 27 MAY 84 RHP TITLE 'DUMP.ASM VERSION OF 27 MAY 84 RHP' F780 = CURLIN EQU 0F780H F789 = USERCMD EQU 0F789H F78F = CTRLC EQU 0F78FH 0100 ORG 100H 0100 C30E01 JMP MONT ;MONITOR ENTRY POINT ;************************************************************** ;CRLF DO CARRIAGE RETURN/LINE FEED ;************************************************************** 0103 0E0D CRLF MVI C,0DH 0105 CD0A01 CALL CHAROUC 0108 0E0A MVI C,0AH ;************************************************************** ; THIS IS THE NORMAL ENTRY POINT FOR COMMUNICATING WITH THE ; VIDIO MONITOR AS YOU WOULD A CRT. ;************************************************************** 010A 79 CHAROUC MOV A,C 010B C303F8 CHAROUT JMP 0F803H ;************************************************************** ;8080 MONITOR PROGRAM USING THE VIO FIRMWARE ;************************************************************** 010E 213E01 MONT LXI H,SIGNON 0111 CD3502 CALL MSGNC ;SIGNON MSG 0114 CD0301 PRMPT CALL CRLF 0117 3E3F MVI A,'?' 0119 CD0B01 CALL CHAROUT 011C CDB701 CALL CHIN ;GET COMMAND 011F 47 MOV B,A ;SAVE IT 0120 111401 LXI D,PRMPT 0123 D5 PUSH D ;RETURN ADDRESS 0124 2A89F7 LHLD USERCMD ;USER COMMAND TABLE 0127 7C MOV A,H 0128 B7 ORA A ;SET FLAGS 0129 78 MOV A,B ;RETRIEVE CODE 012A CA3301 JZ NUCMD ;NO USER COMMAND TABLE 012D CD4302 CALL LOOKUP ;LOOKUP IN USER TABLE 0130 C23D01 JNZ FNDCMD ;FOUND COMMAND 0133 78 NUCMD MOV A,B ;GET COMMAND AGAIN 0134 213F02 LXI H,CMDTBL ;COMAND TABLE PTR 0137 CD4302 CALL LOOKUP 013A C8 RZ ;NO ENTRY,PROMPT AGIN 013B 0601 MVI B,1 ;FOR PROT/UNPROT 013D E9 FNDCMD PCHL ;GO TO ROUTINE 013E 5220482050SIGNON DB 'R H PETERS VIO ' CP/M RMAC ASSEM 1.1 #002 DUMP.ASM VERSION OF 27 MAY 84 RHP 014D 4D4F4E4954 DB 'MONITOR 4/84',0 ;************************************************************** ;DISPLAY MEMORY "D,START,END CR" ;************************************************************** 015C CDAA01 DISP CALL SIZE ;H,L=START,B,C=SIZE 015F 3A8FF7 DISP4 LDA CTRLC ;#LINES/COLS 0162 0F RRC ;#LINES BIT IN CARRY 0163 0F RRC 0164 160C MVI D,12 0166 DA6B01 JC DISP2 0169 1618 MVI D,24 016B CD0301 DISP2 CALL CRLF 016E DB03 IN 3 0170 E602 ANI 2 ;ANY INPUT 0172 C0 RNZ ;YES,INTERRRUPT 0173 1E08 MVI E,8 0175 3A8FF7 LDA CTRLC 0178 0F RRC 0179 DA7E01 JC DISP3 017C 1E10 MVI E,16 017E CDA101 DISP3 CALL OHEXHL ;OUTPUT ASCII H,L REG 0181 7E DISP1 MOV A,M ;GET DATA BYTE 0182 CD9801 CALL OHEXB ;OUTPUT WITH TRAIL BLANK 0185 23 INX H 0186 0B DCX B 0187 78 MOV A,B 0188 B1 ORA C 0189 C8 RZ ;DONE 018A 1D DCR E 018B C28101 JNZ DISP1 ;KEEP WITH CURRENT LINE 018E 15 DCR D ;FILLED PAGE YET? 018F C26B01 JNZ DISP2 0192 CDB701 CALL CHIN ;WAIT FOR PAGE PROMT 0195 C35F01 JMP DISP4 ;************************************************************** ;OUTPUT HEX WITH TRAILING BYTE ;************************************************************** 0198 CD1D02 OHEXB CALL OHEX 019B 3E20 MVI A,' ' 019D CD0B01 CALL CHAROUT 01A0 C9 RET ;************************************************************** ;OUTPUT 16 BIT ASCII HEX FROM H,L ;************************************************************** 01A1 7C OHEXHL MOV A,H 01A2 CD1D02 CALL OHEX 01A5 7D MOV A,L 01A6 CD9801 CALL OHEXB 01A9 C9 RET CP/M RMAC ASSEM 1.1 #003 DUMP.ASM VERSION OF 27 MAY 84 RHP ;************************************************************** ;SIZE INPUTS START,END ADDR AND CONVERTS TO START ; AND SIZE IN H,L AND B,C ;************************************************************** 01AA CDDD01 SIZE CALL PARM2 ;H,L=START D,E=END 01AD F5 PUSH A 01AE 7B MOV A,E 01AF 95 SUB L ;LOW BYTE SIZE 01B0 4F MOV C,A 01B1 7A MOV A,D 01B2 9C SBB H ;HIGH BYTE SIZE 01B3 47 MOV B,A 01B4 03 INX B ;ADD 1 01B5 F1 POP A 01B6 C9 RET ;************************************************************** ;CHARACTER INPUT ROUTINES ;************************************************************** 01B7 CDC801 CHIN CALL CHIN1 01BA FE03 CPI 03 ;CRTL C? 01BC CA0E01 JZ MONT ;YES,RESET AND PROMPT 01BF CD0B01 CALL CHAROUT 01C2 FE0D CPI 0DH 01C4 CC0301 CZ CRLF ;ADD LINE FEED 01C7 C9 RET 01C8 CDD401 CHIN1 CALL CONST 01CB B7 ORA A 01CC CAC801 JZ CHIN1 01CF DB02 IN 2 ;READ PORT 2 01D1 E67F ANI 7FH ;MASK PARITY 01D3 C9 RET 01D4 DB03 CONST IN 3 ;READ STATUS PORT 01D6 E602 ANI 2 ;CHECK FOR KEYPRESS 01D8 3EFF STAT1 MVI A,0FFH ;GET READY FOR KEYPRESS 01DA C0 RNZ 01DB 2F CMA ;NO KEYPRESS 01DC C9 RET ;************************************************************** ;PARM2 READ 2 PARAMETERS 16 BITS EACH INTO H,L AND D,E ;************************************************************** 01DD CDF301 PARM2 CALL IHEX 01E0 54 MOV D,H 01E1 5D MOV E,L 01E2 FE0A CPI 0AH ;TERMINATED? 01E4 C8 RZ ;YES,USE SAME VALUE 01E5 FE2C CPI ',' 01E7 CAED01 JZ PARM3 01EA FE20 CPI ' ' 01EC C0 RNZ ;INVALID CP/M RMAC ASSEM 1.1 #004 DUMP.ASM VERSION OF 27 MAY 84 RHP 01ED EB PARM3 XCHG 01EE CDF301 CALL IHEX ;GET SECOND PARM 01F1 EB XCHG 01F2 C9 RET ;************************************************************** ;INPUT CHARS ASSUMED HEX AND CONVERT TO BINARY ;TERMINATES ON FIRST NO HEX CHAR WHICH IS LEFT ;IN A REG. H,L RETURNS WITH VALUE ;************************************************************** 01F3 210000 IHEX LXI H,0 01F6 CDB701 IHEX2 CALL CHIN ;READSCAPE CHAR? 01F9 F5 PUSH A 01FA CD0C02 CALL ASBI ;CONVERT TO BINARY 01FD D20202 JNC IHEX1 0200 F1 POP A 0201 C9 RET 0202 29 IHEX1 DAD H 0203 29 DAD H 0204 29 DAD H 0205 29 DAD H 0206 85 ADD L 0207 6F MOV L,A 0208 F1 POP A 0209 C3F601 JMP IHEX2 ;************************************************************** ;CONVERT ASCII HEX CHAR IN A-REG TO BINARY IN A REG ;RETURN WITH CARRY SET IF INVALID CHAR,RESET OTHERWISE ;************************************************************** 020C D630 ASBI SUI 30H ;REMOVE ASCII BIAS 020E D8 RC ;INVALID <0 020F FE0A CPI 10 0211 DA1B02 JC ASBI1 ;VALID 0-9 0214 D611 SUI 17 0216 D8 RC ;INVALID 0217 C60A ADI 10 0219 FE10 CPI 16 ;SET CARRY IF <0FH 021B 3F ASBI1 CMC 021C C9 RET ;************************************************************** ;OUTPUT HEX CHARS TO VIDIO FROM A REG ;************************************************************** 021D F5 OHEX PUSH PSW ;SAVE CHAR 021E 0F RRC 021F 0F RRC 0220 0F RRC 0221 0F RRC 0222 CD2602 CALL BIAS ;BINARY TO ASCII AND OUT 0225 F1 POP PSW CP/M RMAC ASSEM 1.1 #005 DUMP.ASM VERSION OF 27 MAY 84 RHP ;************************************************************** ;CONVERT BINARY TO ASCII ;************************************************************** 0226 E60F BIAS ANI 0FH ;MASK NIBBLE 0228 C690 ADI 90H 022A 27 DAA 022B CE40 ACI 40H 022D 27 DAA 022E CD0B01 CALL CHAROUT 0231 C9 RET ;************************************************************** ;OUTPUT MESSAGE PTED TO BY H,L AND TERMINATED ;BY ONE BYTE OF BINARY ZEROS ;************************************************************** 0232 CD0301 MSG CALL CRLF 0235 7E MSGNC MOV A,M 0236 B7 ORA A 0237 C8 RZ 0238 CD0B01 CALL CHAROUT 023B 23 INX H 023C C33502 JMP MSGNC 023F = CMDTBL EQU $ 023F 44 DB 'D' ;DISPLAY MEMORY 0240 5C01 DW DISP 0242 00 DB 0 ;************************************************************** ;TABLE LOOK UP ROUTINE. SEARCHES FIRST BYTE OF THREE BYTE TABLE OF ;RECORDS FOR A MATCH OR ZERO. ZERO INDICATES END OF TABLE WITH NO ;MATCH, RETURNED IN A REG.H,L LOADED WITH SECOND TWO BYTES OF TABLE ;IF MATCH FOUND. ;************************************************************** 0243 47 LOOKUP MOV B,A ;SAVE 0244 7E LOOKU1 MOV A,M ;GET FIRST BYTE OF RECORD 0245 1180F7 LXI D,CURLIN 0248 B7 ORA A 0249 C8 RZ ;DONE,NO MATCH 024A B8 CMP B ;SAME AS REQUESTED? 024B C25502 JNZ TBLUP1 ;NO 024E 23 INX H 024F 5E MOV E,M 0250 23 INX H 0251 56 MOV D,M 0252 EB XCHG 0253 B7 ORA A ;SET FLAGS 0254 C9 RET 0255 23 TBLUP1 INX H 0256 23 INX H 0257 23 INX H ;BUMP TO NEXT RECORD 0258 C34402 JMP LOOKU1 CP/M RMAC ASSEM 1.1 #006 DUMP.ASM VERSION OF 27 MAY 84 RHP 025B END