CP/M RMAC ASSEM 1.1 #001 DUMP.ASM VERSION OF 27 MAY 84 RHP 1 TITLE 'DUMP.ASM VERSION OF 27 MAY 84 RHP' 2 3 F780 = CURLIN EQU 0F780H 4 F789 = USERCMD EQU 0F789H 5 F78F = CTRLC EQU 0F78FH 6 7 0100 ORG 100H 8 9 0100 C30E01 JMP MONT ;MONITOR ENTRY POINT 10 11 ;************************************************************** 12 ;CRLF DO CARRIAGE RETURN/LINE FEED 13 ;************************************************************** 14 15 0103 0E0D CRLF MVI C,0DH 16 0105 CD0A01 CALL CHAROUC 17 0108 0E0A MVI C,0AH 18 19 ;************************************************************** 20 ; THIS IS THE NORMAL ENTRY POINT FOR COMMUNICATING WITH THE 21 ; VIDIO MONITOR AS YOU WOULD A CRT. 22 ;************************************************************** 23 24 010A 79 CHAROUC MOV A,C 25 26 010B C303F8 CHAROUT JMP 0F803H 27 28 ;************************************************************** 29 ;8080 MONITOR PROGRAM USING THE VIO FIRMWARE 30 ;************************************************************** 31 32 010E 213E01 MONT LXI H,SIGNON 33 0111 CD3502 CALL MSGNC ;SIGNON MSG 34 0114 CD0301 PRMPT CALL CRLF 35 0117 3E3F MVI A,'?' 36 0119 CD0B01 CALL CHAROUT 37 011C CDB701 CALL CHIN ;GET COMMAND 38 011F 47 MOV B,A ;SAVE IT 39 0120 111401 LXI D,PRMPT 40 0123 D5 PUSH D ;RETURN ADDRESS 41 0124 2A89F7 LHLD USERCMD ;USER COMMAND TABLE 42 0127 7C MOV A,H 43 0128 B7 ORA A ;SET FLAGS 44 0129 78 MOV A,B ;RETRIEVE CODE 45 012A CA3301 JZ NUCMD ;NO USER COMMAND TABLE 46 012D CD4302 CALL LOOKUP ;LOOKUP IN USER TABLE 47 0130 C23D01 JNZ FNDCMD ;FOUND COMMAND 48 0133 78 NUCMD MOV A,B ;GET COMMAND AGAIN 49 0134 213F02 LXI H,CMDTBL ;COMAND TABLE PTR 50 0137 CD4302 CALL LOOKUP 51 013A C8 RZ ;NO ENTRY,PROMPT AGIN 52 013B 0601 MVI B,1 ;FOR PROT/UNPROT 53 013D E9 FNDCMD PCHL ;GO TO ROUTINE 54 55 56 013E 5220482050SIGNON DB 'R H PETERS VIO ' CP/M RMAC ASSEM 1.1 #002 DUMP.ASM VERSION OF 27 MAY 84 RHP 57 014D 4D4F4E4954 DB 'MONITOR 4/84',0 58 59 ;************************************************************** 60 ;DISPLAY MEMORY "D,START,END CR" 61 ;************************************************************** 62 63 015C CDAA01 DISP CALL SIZE ;H,L=START,B,C=SIZE 64 015F 3A8FF7 DISP4 LDA CTRLC ;#LINES/COLS 65 0162 0F RRC ;#LINES BIT IN CARRY 66 0163 0F RRC 67 0164 160C MVI D,12 68 0166 DA6B01 JC DISP2 69 0169 1618 MVI D,24 70 016B CD0301 DISP2 CALL CRLF 71 016E DB03 IN 3 72 0170 E602 ANI 2 ;ANY INPUT 73 0172 C0 RNZ ;YES,INTERRRUPT 74 0173 1E08 MVI E,8 75 0175 3A8FF7 LDA CTRLC 76 0178 0F RRC 77 0179 DA7E01 JC DISP3 78 017C 1E10 MVI E,16 79 017E CDA101 DISP3 CALL OHEXHL ;OUTPUT ASCII H,L REG 80 0181 7E DISP1 MOV A,M ;GET DATA BYTE 81 0182 CD9801 CALL OHEXB ;OUTPUT WITH TRAIL BLANK 82 0185 23 INX H 83 0186 0B DCX B 84 0187 78 MOV A,B 85 0188 B1 ORA C 86 0189 C8 RZ ;DONE 87 018A 1D DCR E 88 018B C28101 JNZ DISP1 ;KEEP WITH CURRENT LINE 89 018E 15 DCR D ;FILLED PAGE YET? 90 018F C26B01 JNZ DISP2 91 0192 CDB701 CALL CHIN ;WAIT FOR PAGE PROMT 92 0195 C35F01 JMP DISP4 93 94 ;************************************************************** 95 ;OUTPUT HEX WITH TRAILING BYTE 96 ;************************************************************** 97 98 0198 CD1D02 OHEXB CALL OHEX 99 019B 3E20 MVI A,' ' 100 019D CD0B01 CALL CHAROUT 101 01A0 C9 RET 102 103 ;************************************************************** 104 ;OUTPUT 16 BIT ASCII HEX FROM H,L 105 ;************************************************************** 106 107 01A1 7C OHEXHL MOV A,H 108 01A2 CD1D02 CALL OHEX 109 01A5 7D MOV A,L 110 01A6 CD9801 CALL OHEXB 111 01A9 C9 RET 112 CP/M RMAC ASSEM 1.1 #003 DUMP.ASM VERSION OF 27 MAY 84 RHP 113 ;************************************************************** 114 ;SIZE INPUTS START,END ADDR AND CONVERTS TO START 115 ; AND SIZE IN H,L AND B,C 116 ;************************************************************** 117 118 01AA CDDD01 SIZE CALL PARM2 ;H,L=START D,E=END 119 01AD F5 PUSH A 120 01AE 7B MOV A,E 121 01AF 95 SUB L ;LOW BYTE SIZE 122 01B0 4F MOV C,A 123 01B1 7A MOV A,D 124 01B2 9C SBB H ;HIGH BYTE SIZE 125 01B3 47 MOV B,A 126 01B4 03 INX B ;ADD 1 127 01B5 F1 POP A 128 01B6 C9 RET 129 130 ;************************************************************** 131 ;CHARACTER INPUT ROUTINES 132 ;************************************************************** 133 134 01B7 CDC801 CHIN CALL CHIN1 135 01BA FE03 CPI 03 ;CRTL C? 136 01BC CA0E01 JZ MONT ;YES,RESET AND PROMPT 137 01BF CD0B01 CALL CHAROUT 138 01C2 FE0D CPI 0DH 139 01C4 CC0301 CZ CRLF ;ADD LINE FEED 140 01C7 C9 RET 141 142 01C8 CDD401 CHIN1 CALL CONST 143 01CB B7 ORA A 144 01CC CAC801 JZ CHIN1 145 01CF DB02 IN 2 ;READ PORT 2 146 01D1 E67F ANI 7FH ;MASK PARITY 147 01D3 C9 RET 148 149 01D4 DB03 CONST IN 3 ;READ STATUS PORT 150 01D6 E602 ANI 2 ;CHECK FOR KEYPRESS 151 01D8 3EFF STAT1 MVI A,0FFH ;GET READY FOR KEYPRESS 152 01DA C0 RNZ 153 01DB 2F CMA ;NO KEYPRESS 154 01DC C9 RET 155 156 ;************************************************************** 157 ;PARM2 READ 2 PARAMETERS 16 BITS EACH INTO H,L AND D,E 158 ;************************************************************** 159 160 01DD CDF301 PARM2 CALL IHEX 161 01E0 54 MOV D,H 162 01E1 5D MOV E,L 163 01E2 FE0A CPI 0AH ;TERMINATED? 164 01E4 C8 RZ ;YES,USE SAME VALUE 165 01E5 FE2C CPI ',' 166 01E7 CAED01 JZ PARM3 167 01EA FE20 CPI ' ' 168 01EC C0 RNZ ;INVALID CP/M RMAC ASSEM 1.1 #004 DUMP.ASM VERSION OF 27 MAY 84 RHP 169 01ED EB PARM3 XCHG 170 01EE CDF301 CALL IHEX ;GET SECOND PARM 171 01F1 EB XCHG 172 01F2 C9 RET 173 174 ;************************************************************** 175 ;INPUT CHARS ASSUMED HEX AND CONVERT TO BINARY 176 ;TERMINATES ON FIRST NO HEX CHAR WHICH IS LEFT 177 ;IN A REG. H,L RETURNS WITH VALUE 178 ;************************************************************** 179 180 01F3 210000 IHEX LXI H,0 181 01F6 CDB701 IHEX2 CALL CHIN ;READSCAPE CHAR? 182 01F9 F5 PUSH A 183 01FA CD0C02 CALL ASBI ;CONVERT TO BINARY 184 01FD D20202 JNC IHEX1 185 0200 F1 POP A 186 0201 C9 RET 187 188 0202 29 IHEX1 DAD H 189 0203 29 DAD H 190 0204 29 DAD H 191 0205 29 DAD H 192 0206 85 ADD L 193 0207 6F MOV L,A 194 0208 F1 POP A 195 0209 C3F601 JMP IHEX2 196 197 ;************************************************************** 198 ;CONVERT ASCII HEX CHAR IN A-REG TO BINARY IN A REG 199 ;RETURN WITH CARRY SET IF INVALID CHAR,RESET OTHERWISE 200 ;************************************************************** 201 202 020C D630 ASBI SUI 30H ;REMOVE ASCII BIAS 203 020E D8 RC ;INVALID <0 204 020F FE0A CPI 10 205 0211 DA1B02 JC ASBI1 ;VALID 0-9 206 0214 D611 SUI 17 207 0216 D8 RC ;INVALID 208 0217 C60A ADI 10 209 0219 FE10 CPI 16 ;SET CARRY IF <0FH 210 021B 3F ASBI1 CMC 211 021C C9 RET 212 213 ;************************************************************** 214 ;OUTPUT HEX CHARS TO VIDIO FROM A REG 215 ;************************************************************** 216 217 021D F5 OHEX PUSH PSW ;SAVE CHAR 218 021E 0F RRC 219 021F 0F RRC 220 0220 0F RRC 221 0221 0F RRC 222 0222 CD2602 CALL BIAS ;BINARY TO ASCII AND OUT 223 0225 F1 POP PSW 224 CP/M RMAC ASSEM 1.1 #005 DUMP.ASM VERSION OF 27 MAY 84 RHP 225 ;************************************************************** 226 ;CONVERT BINARY TO ASCII 227 ;************************************************************** 228 229 0226 E60F BIAS ANI 0FH ;MASK NIBBLE 230 0228 C690 ADI 90H 231 022A 27 DAA 232 022B CE40 ACI 40H 233 022D 27 DAA 234 022E CD0B01 CALL CHAROUT 235 0231 C9 RET 236 237 ;************************************************************** 238 ;OUTPUT MESSAGE PTED TO BY H,L AND TERMINATED 239 ;BY ONE BYTE OF BINARY ZEROS 240 ;************************************************************** 241 242 0232 CD0301 MSG CALL CRLF 243 0235 7E MSGNC MOV A,M 244 0236 B7 ORA A 245 0237 C8 RZ 246 0238 CD0B01 CALL CHAROUT 247 023B 23 INX H 248 023C C33502 JMP MSGNC 249 250 023F = CMDTBL EQU $ 251 023F 44 DB 'D' ;DISPLAY MEMORY 252 0240 5C01 DW DISP 253 0242 00 DB 0 254 255 ;************************************************************** 256 ;TABLE LOOK UP ROUTINE. SEARCHES FIRST BYTE OF THREE BYTE TABLE OF 257 ;RECORDS FOR A MATCH OR ZERO. ZERO INDICATES END OF TABLE WITH NO 258 ;MATCH, RETURNED IN A REG.H,L LOADED WITH SECOND TWO BYTES OF TABLE 259 ;IF MATCH FOUND. 260 ;************************************************************** 261 262 0243 47 LOOKUP MOV B,A ;SAVE 263 0244 7E LOOKU1 MOV A,M ;GET FIRST BYTE OF RECORD 264 0245 1180F7 LXI D,CURLIN 265 0248 B7 ORA A 266 0249 C8 RZ ;DONE,NO MATCH 267 024A B8 CMP B ;SAME AS REQUESTED? 268 024B C25502 JNZ TBLUP1 ;NO 269 024E 23 INX H 270 024F 5E MOV E,M 271 0250 23 INX H 272 0251 56 MOV D,M 273 0252 EB XCHG 274 0253 B7 ORA A ;SET FLAGS 275 0254 C9 RET 276 277 0255 23 TBLUP1 INX H 278 0256 23 INX H 279 0257 23 INX H ;BUMP TO NEXT RECORD 280 0258 C34402 JMP LOOKU1 CP/M RMAC ASSEM 1.1 #006 DUMP.ASM VERSION OF 27 MAY 84 RHP 281 282 025B END CP/M RMAC ASSEM 1.1 #007 DUMP.ASM VERSION OF 27 MAY 84 RHP ASBI 020C 183 202# ASBI1 021B 205 210# BIAS 0226 222 229# CHAROUC 010A 16 24# CHAROUT 010B 26# 36 100 137 234 246 CHIN 01B7 37 91 134# 181 CHIN1 01C8 134 142# 144 CMDTBL 023F 49 250# CONST 01D4 142 149# CRLF 0103 15# 34 70 139 242 CTRLC F78F 5# 64 75 CURLIN F780 3# 264 DISP 015C 63# 252 DISP1 0181 80# 88 DISP2 016B 68 70# 90 DISP3 017E 77 79# DISP4 015F 64# 92 FNDCMD 013D 47 53# IHEX 01F3 160 170 180# IHEX1 0202 184 188# IHEX2 01F6 181# 195 LOOKU1 0244 263# 280 LOOKUP 0243 46 50 262# MONT 010E 9 32# 136 MSG 0232 242# MSGNC 0235 33 243# 248 NUCMD 0133 45 48# OHEX 021D 98 108 217# OHEXB 0198 81 98# 110 OHEXHL 01A1 79 107# PARM2 01DD 118 160# PARM3 01ED 166 169# PRMPT 0114 34# 39 SIGNON 013E 32 56# SIZE 01AA 63 118# STAT1 01D8 151# TBLUP1 0255 268 277# USERCMD F789 4# 41