CP/M RMAC ASSEM 1.1 #001 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1 TITLE 'MYVIO.ASM VERSION OF 73 MAY 84 RHP' 2 3 ;************************************************************** 4 ;VIO TERMINAL FIRMWARE REQUIRES REFRESH MEMORY TO BE AT 5 ;F000 AND FIRMWARE ITSELF AT F800 6 ; COPYRIGHT IMSAI MANUFACTURING COMPANY 7 ; SAN LEANDRO, CALIFORNIA 8 ; 6/1/77 9 ;************************************************************** 10 11 F000 = REFRESH EQU 0F000H ;REFRESH MEMORY ON VIO 12 F780 = SYSRAM EQU REFRESH+780H ;SYSTEM RAM 13 F800 = VIOFM EQU 0F800H ;FIRMWARE BEGINNING 14 F7FF = CTRPORT EQU REFRESH+7FFH ;HARDWARE CONTROL WORD 15 16 F780 ORG SYSRAM 17 18 F780 00 CURLIN DB 0 ;CURRENT LINE # 0-23 19 F781 00 CURCOL DB 0 ;CURRENT COL # 0-79 20 F782 00 INVIDIO DB 0 ;INVERSE VIDIO MODE(BY CHAR) 21 F783 00 VDIMDE DB 0 ;MODE 0=GRAPHICS, NOT 0= TEXT 22 F784 00 INSRT DB 0 ;INSERTING CHARS MODE 23 F785 00 ESCCNT DB 0 ;ESCAPE CHAR COUNT 24 F786 00 ESCCDE DB 0 ;ESCAPE CODE LAST USED 25 F787 0000 USERCTR DW 0 ;USER CTR TBLE PTR, NON ZERO 26 F789 0000 USERESC DW 0 ;USER ESCAPE TBLE PTR,NON ZERO 27 F78B 0000 USERCMD DW 0 ;USER MONITOR COMMAND TABLE 28 F78D 0000 RAMPTR DW 0 ;RAM SPACE PTR WITH DIRECT I/O 29 F78F 0000 CURPTR DW 0 ;CURSOR ADDRESS 30 F791 00 PRTMD DB 0 ;PROTECTED MODE 0=NO 31 F792 00 CCUR DB 0 ;CHAR UNDER CURSOR(FOR GRAPHICS MODE) 32 F793 00 CCHAR DB 0 ;CURRENT CHARACTER TO DISPLAY 33 F794 00 CTRLC DB 0 ;CONTROL WORD AS FOLLOWS 34 ; 7 SCROLL MODE 0=SCROLL,1=WRAP 35 ; 6 UNUSED 36 ; 5 UP/LOW 0=UP,1=UP+LOW 37 ; 4 1=INVERSE VIDIO SCREEN 38 ; 3 00=BLANK,01=LOW128+INV,10=HIGH128+INV 39 ; 2 11=256 CHAR GRAPHICS 40 ; 1 #LINES 0=24,1=12 41 ; 0 #CHARS 0=80,1=40 42 F795 TAB DS 10 ;80 BITS FOR TAB CONTROL 43 F79F 0000 CLINE DW 0 ;CHARS/LINE 44 F7A1 00 LPAGE DB 0 ;LINES/PAGE-1 45 F7A2 0000 NCHARS DW 0 ;#CHARS ON DISPLAY 46 F7A4 00 PRUPRF DB 0 ;TRANSITION PROTECT FLAG 47 F7A5 00 USERF DB 0 ;ENTRY POINT FLAG 0=INIT48,1=CHAR48,2=USER 48 F7A6 0000 LASTC DW 0 ;LAST CHAR ON SCREEN PTR+1 49 50 ;************************************************************** 51 ; USER ;ENTRY POINTS 52 ;************************************************************** 53 54 F800 ORG VIOFM 55 56 F800 C327F8 JMP INIT ;INITIALIZATION POINT CP/M RMAC ASSEM 1.1 #002 MYVIO.ASM VERSION OF 73 MAY 84 RHP 57 F803 C391F8 JMP CHAROUT ;DISPLAY CHARACTER IN A 58 F806 C3F5FB JMP MONT ;MONITOR ENTRY POINT 59 F809 C389FE JMP CONST ;GET CONSOLE STATUS 60 F80C C376FE JMP CHIN1 ;GET CONSOLE DATA 61 F80F C382FE JMP PRSTAT ;GET PRINTER STATUS 62 F812 C392FE JMP PRINTA ;PRINT CHARACTER IN A 63 F815 C393FE JMP PRINTC ;PRINT CHARACTER IN C 64 F818 C390F8 JMP CHAROUC ;DISPLAY CHARACTER IN C 65 F81B 31FEF7 VIOTEST LXI SP,SYSRAM+7EH 66 F81E CD27F8 CALL INIT 67 F821 CD65FE CALL CHIN 68 F824 C321F8 JMP VIOTEST+6 ;DEMO TESTER 69 70 ;************************************************************** 71 72 F827 E5 INIT PUSH H 73 F828 D5 PUSH D 74 F829 C5 PUSH B 75 F82A F5 PUSH PSW 76 F82B 2180F7 LXI H,CURLIN ;START OF ZEROED AREA 77 F82E 061F MVI B,CLINE-CURLIN AND 0FFH 78 F830 AF XRA A 79 F831 77 INIT1 MOV M,A ;ZERO AREA 80 F832 23 INX H 81 F833 05 DCR B 82 F834 C231F8 JNZ INIT1 83 F837 2100F0 LXI H,REFRESH ;BEGIN CURSOR POS 84 F83A 228FF7 SHLD CURPTR 85 F83D 218007 LXI H,1920 ;DEFAULT CHARS/SCREEN 86 F840 22A2F7 SHLD NCHARS 87 F843 CDB2F9 CALL BLNKS ;CLEAR SCREEN AND HOME 88 F846 3E08 MVI A,8H ;DEFAULT 80X24 SCREEN TEXT MODE 89 F848 11F2F8 LXI D,BMP1 ;SET UP RETURN ADDR 90 F84B D5 PUSH D 91 92 ;SUBROUTINE TO SET HARDWARE CONTROL PORT 93 94 F84C 3294F7 SETCMD STA CTRLC 95 F84F 32FFF7 STA CTRPORT ;HARDWARE CONTROL PORT 96 F852 2F CMA 97 F853 E603 ANI 3 98 F855 0F RRC ;FINDING NCHARS ON SCREEN 99 F856 212800 LXI H,40 ;COLS/LINE 100 F859 D25DF8 JNC SETCM1 ;ENOUGH 101 F85C 29 DAD H ;COLS/LINE=80 102 F85D 229FF7 SETCM1 SHLD CLINE 103 F860 21A1F7 LXI H,LPAGE ;PT AT LINES/PAGE 104 F863 360B MVI M,11 105 F865 1F RAR 106 F866 D26BF8 JNC SETCM2 107 F869 3617 MVI M,23 108 F86B 21E001 SETCM2 LXI H,480 ;COUNT FOR 12 X 40 SCREEN 109 F86E D272F8 JNC SETCM3 110 F871 29 DAD H 111 F872 B7 SETCM3 ORA A ;SET FLAGS 112 F873 CA77F8 JZ SETCM4 CP/M RMAC ASSEM 1.1 #003 MYVIO.ASM VERSION OF 73 MAY 84 RHP 113 F876 29 DAD H 114 F877 22A2F7 SETCM4 SHLD NCHARS 115 F87A 1100F0 LXI D,REFRESH 116 F87D 19 DAD D 117 F87E 22A6F7 SHLD LASTC ;LAST CHAR ON SCREEN PTR+1 118 F881 3A94F7 LDA CTRLC ;CONTOL CODE 119 F884 E60C ANI 0CH ;MODE BITS ONLY 120 F886 EE0C XRI 0CH 121 F888 3283F7 STA VDIMDE ;0=GRAPHICS 122 123 ;CHECK CURSOR WITHIN POSSIBLE NEW BOUNDS 124 125 F88B AF ESCRET XRA A 126 F88C 3285F7 STA ESCCNT ;COUNT=0 127 F88F C9 RET ;TO LAST ADDR ON STACK, BMP1 128 129 ;************************************************************** 130 ; THIS IS THE NORMAL ENTRY POINT FOR COMMUNICATING WITH THE 131 ; VIDIO MONITOR AS YOU WOULD A CRT. 132 ;************************************************************** 133 134 F890 79 CHAROUC MOV A,C 135 136 F891 E5 CHAROUT PUSH H 137 F892 D5 PUSH D 138 F893 C5 PUSH B 139 F894 F5 PUSH PSW 140 F895 3293F7 STA CCHAR 141 F898 2A8FF7 LHLD CURPTR ;CURSOR POSITION 142 F89B 3A92F7 LDA CCUR ;CHAR UNDER CURSOR 143 F89E 77 MOV M,A ;REMOVE CURSOR 144 F89F 2193F7 LXI H,CCHAR ;PT AT CURRENT CHAR 145 F8A2 7E MOV A,M ;GET CHAR 146 F8A3 FE1B CPI 1BH ;ESCAPE CHAR? 147 F8A5 CA60F9 JZ ESCAPE 148 F8A8 3A85F7 LDA ESCCNT ;ARE WE IN ESCAPE SEQ ALREADY? 149 F8AB B7 ORA A 150 F8AC C260F9 JNZ ESCAPE ;YES 151 F8AF 7E MOV A,M ;CURRENT CHAR 152 F8B0 FE7F CPI 7FH ;DELETE CHAR (RUBOUT)? 153 F8B2 CA4FF9 JZ NOUSER1 ;YES 154 F8B5 3A83F7 LDA VDIMDE ;GRAPHICS MODE? 155 F8B8 B7 ORA A 156 F8B9 CAE9F8 JZ CHAR1 ;YES 157 F8BC 7E MOV A,M 158 F8BD FEFF CPI 0FFH ;DUMMY PAD FROM USER? 159 F8BF CAF2F8 JZ BMP1 ;YES 160 F8C2 E67F ANI 7FH ;STRIP PARITY BIT 161 F8C4 77 MOV M,A 162 F8C5 DE20 SBI 20H ;CONTROL CODE? 163 F8C7 FA3CF9 JM CONTROL ;YES 164 F8CA 3A94F7 LDA CTRLC ;CONTROL WORD 165 F8CD 47 MOV B,A ;TMP SAVE 166 F8CE E60C ANI 0CH ;MODE ONLY 167 F8D0 FE08 CPI 08H ;LOW HALF OF CHAR GEN ROM? 168 F8D2 C2E9F8 JNZ CHAR1 ;NO,UPPER HALF CP/M RMAC ASSEM 1.1 #004 MYVIO.ASM VERSION OF 73 MAY 84 RHP 169 F8D5 78 MOV A,B ;CONTROL WORD 170 F8D6 E620 ANI 20H ;UP/LOW CASE 171 F8D8 C2E9F8 JNZ CHAR1 ;LOWER OK AS IS 172 F8DB 7E MOV A,M ;CURRENT CHAR 173 F8DC DE61 SBI 61H ;LOWER CASE A 174 F8DE FAE9F8 JM CHAR1 ;NOT ALPHA 175 F8E1 DE1A SBI 7BH-61H 176 F8E3 F2E9F8 JP CHAR1 ;NOT ALPHA 177 F8E6 C65B ADI 7BH-20H ;RESTORE AND CONVERT TO UPPER CASE 178 F8E8 77 MOV M,A 179 F8E9 CD76FB CHAR1 CALL INSCHR ;INSERT CCHAR AT CURSOR POS 180 F8EC CDFAF8 CALL BMPCUR 181 F8EF CD1FFB BMP10 CALL CALPOS ;CURSOR POS 182 F8F2 CDA8FA BMP1 CALL INSCURS ;INSERT CURSOR 183 F8F5 F1 POP PSW 184 F8F6 C1 POP B 185 F8F7 D1 POP D 186 F8F8 E1 POP H 187 F8F9 C9 RET ;TO EXTERNAL WORLD 188 189 F8FA = BMPCUR EQU $ 190 F8FA CD39FB CALL BMPC ;BUMP CURSOR CHAR POSITION 191 F8FD CC0CF9 CZ BMPCUR1 ;DO LINE FEED 192 F900 3A91F7 LDA PRTMD ;PROTECT MODE? 193 F903 EB XCHG ;H,L=CURRENT CURSOR PTR 194 F904 A6 ANA M ;IS IT PROTECTED? 195 F905 FAFAF8 JM BMPCUR ;YES,SKIP PROTECTED FIELD 196 F908 C9 RET ;GO INSERT CURSOR 197 198 F909 2180F7 LFEED LXI H,CURLIN 199 F90C 34 BMPCUR1 INR M 200 F90D 3AA1F7 LDA LPAGE ;MAX LINES/PAGE 201 F910 BE CMP M ;EXCEED MAX? 202 F911 F0 RP 203 F912 35 DCR M ;LEAVE AT LAST LINE 204 205 ;************************************************************** 206 ;SCROLL UP OR WRAP AROUND AS SET BY CTRLC 207 ;************************************************************** 208 209 F913 3A94F7 SCROLL LDA CTRLC ;KIND OF SCROLL? 210 F916 E68C ANI 8CH ;LEAVE SCROLL AND MODE BITS 211 F918 FA20F9 JM SCROLL3 ;WRAP AROUND 212 F91B FE0C CPI 0CH ;GRAPHICS MODE 213 F91D C225F9 JNZ SCROLL1 ;NO, ALLOW SCROLL 214 F920 AF SCROLL3 XRA A 215 F921 77 MOV M,A ;HOME CURSOR FOR WRAP AROUND 216 F922 23 INX H 217 F923 77 MOV M,A 218 F924 C9 RET 219 220 F925 2A9FF7 SCROLL1 LHLD CLINE ;COLS/LINE 221 F928 E5 PUSH H ;SAVE COLS/LINE 222 F929 EB XCHG 223 F92A 2AA2F7 LHLD NCHARS ;# CHARS PER PAGE 224 F92D 7D MOV A,L CP/M RMAC ASSEM 1.1 #005 MYVIO.ASM VERSION OF 73 MAY 84 RHP 225 F92E 93 SUB E 226 F92F 4F MOV C,A 227 F930 44 MOV B,H 228 F931 EB XCHG 229 F932 1100F0 LXI D,REFRESH 230 F935 19 DAD D ;HL=SOURCE,DE=DEST. 231 F936 CDC9FD CALL MVCUP 232 F939 C344FA SCROLL2 JMP DLINE1 ;ERASE CURRENT LINE AND RETURN 233 234 ;************************************************************** 235 ;PROCESS CONTROL CODES 236 ;************************************************************** 237 238 F93C EB CONTROL XCHG ;D,E=CCHR PTR 239 F93D 2A87F7 LHLD USERCTR ;USER TABLE IF ANY 240 F940 7C MOV A,H 241 F941 B7 ORA A 242 !)cgηοΜ5¦" ο&$9-¬’@Q’Β…4(€€€HΠΜ€€δΠ́ Ρ δ€€€€%)h9=UMH$$ν9<Q 1UMH%94(€€€ΘΠΠ€€δΠ؁ ΘΡ€€€€% 101==-U@4(€€€ΘΠΤ€€δΠδ ΘΤαδ€€€€%)9h9 QI0$$ν=U9Q 19QId4(€€€ΘΠΨ€€δΡ €ΝδΝά€€€9=UMH%1 !H4(€€€ΘΠά€€δΡ€ΘΕΥ€€€9=UMHΔ%1a$ ± QIQ 04(€€€ΘΠΰ€€δΤȁ ΘΡ€€€€% 101==-U@4(€€€ΘΠδ€€δΤԁ Ιΰ€€€€%)h 5@Δ$$$ν9=P=U94(€€€ΘΤΐ€€δΤΰ€ΔΕΰ€€€9 QI0%1a$± 5@Δΐ$$νIQUI8IML4(€€€ΘΤΔ€€δՁԀ€€€€€€€%AUM $$$ν=8MQ ,4(€€€ΘΤΘ€€δΥ €ΔΔΰΕά€€€€%1a$± UI =04(€€€ΘΤΜ€€δՁ䀀€€€€€€%A !04(€€€ΘΤΠ€€€€€€€€€€€€€€€€€€4(€€€ΘΤΤ€€€€€€€€€€€€€€€€€€μ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨4(€€€ΘΤΨ€€€€€€€€€€€€€€€€€€νAI= MLM AMEU9 L4(€€€ΘΤά€€€€€€€€€€€€€€€€€€μ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨4(€€€ΘΤΰ€€€€€€€€€€€€€€€€€€4(€€€ΘΤδ€€δΨΐ€ΔΕΰ€€€M A%1a$± 5@Δΐ$$νIQUI8H4(€€€ΘΨΐ€€δΨ́Τ€€€€€€€€%AUM 4(€€€ΘΨΔ€€δΨЁ€€€€€€€€%a !4(€€€ΘΨΘ€€δΨΤ€ΘΔΰΥά€€€€%1a$ ±M 9P4(€€€ΘΨΜ€€δΨΰ€έ€€€€€€€€%5=X±4$$$μESCCAPE COUNT 264 F969 34 INR M ;ESCCNT=ESCCNT+1 265 F96A B7 ORA A 266 F96B C8 RZ 267 F96C 3D DCR A 268 F96D 23 INX H ;POINT TO ESCAPE CODE 269 F96E 1A LDAX D ;GET CCHAR 270 F96F C273F9 JNZ ESCAP1 ;ESCCNT>1 271 F972 77 MOV M,A ;SAVE ESCAPE CODE 272 F973 2A89F7 ESCAP1 LHLD USERESC ;USER ESCAPE TABLE PTR 273 F976 7C MOV A,H 274 F977 B7 ORA A 275 F978 1A LDAX D ;ESCCODE 276 F979 CA82F9 JZ NUESC ;NO USER DEFINED TABLE 277 F97C CD24FA CALL LOOKUP ;LOOKUP IN USERS TABLE 278 F97F C290F9 JNZ FNDESC ;FOUND ESCAPE SEQ IN USER 279 F982 3A86F7 NUESC LDA ESCCDE ;TRY AGAIN IN VIO TABLE 280 F985 E6DF ANI 0DFH ;REMOVE LOWER CASE BIT CP/M RMAC ASSEM 1.1 #006 MYVIO.ASM VERSION OF 73 MAY 84 RHP 281 F987 21D3FB LXI H,ESCTBL 282 F98A CD24FA CALL LOOKUP 283 F98D CA8BF8 JZ ESCRET ;NOT FOUND 284 F990 3A94F7 FNDESC LDA CTRLC 285 F993 114CF8 LXI D,SETCMD 286 F996 E9 PCHL 287 288 ;************************************************************** 289 ;CURSOR CONTROL 290 ;************************************************************** 291 292 F997 1B UPLINE DCX D ;D,E=CURLIN PTR 293 F998 1A BCKLNE LDAX D ;D,E=CURLIN OR CURCOL 294 F999 B7 ORA A ;SET FLAGS 295 F99A C8 RZ 296 F99B 3D DCR A ;BACK UP 1 297 F99C 12 BCKL1 STAX D 298 F99D C9 RET 299 300 F99E AF CRET XRA A 301 F99F 3284F7 STA INSRT ;REMOVE INSERT MODE 302 F9A2 C39CF9 JMP BCKL1 303 304 ;************************************************************** 305 ;TOGGLE PROTECTED MODE FLAG 306 ;************************************************************** 307 308 F9A5 2191F7 PRTECT LXI H,PRTMD ;PT AT FLAG 309 F9A8 C3AEF9 JMP INSMDE+3 ;GO TOGGLE IT 310 311 ;************************************************************** 312 ;TOGGLE INSERT MODE FLAG 313 ;************************************************************** 314 315 F9AB 2184F7 INSMDE LXI H,INSRT 316 F9AE 7E INSMD1 MOV A,M 317 F9AF 2F CMA 318 F9B0 77 MOV M,A 319 F9B1 C9 RET 320 321 ;************************************************************** 322 ;BLANK SCREEN AND HOME 323 ;************************************************************** 324 325 F9B2 2AA2F7 BLNKS LHLD NCHARS ;#CHARS ON SCREEN 326 F9B5 EB XCHG 327 F9B6 2100F0 LXI H,REFRESH 328 F9B9 3A91F7 BLNKS1 LDA PRTMD ;IN PROTECTED MODE? 329 F9BC E680 ANI 80H 330 F9BE A6 ANA M ;PROTECTED? 331 F9BF FAC4F9 JM BLNKS2 ;IS PROTECTED, DO NOT BLANK 332 F9C2 3620 MVI M,' ' 333 F9C4 23 BLNKS2 INX H 334 F9C5 1B DCX D 335 F9C6 7A MOV A,D 336 F9C7 B3 ORA E ;DONE YET? CP/M RMAC ASSEM 1.1 #007 MYVIO.ASM VERSION OF 73 MAY 84 RHP 337 F9C8 C2B9F9 JNZ BLNKS1 ;NO 338 F9CB 210000 HOME LXI H,0 339 F9CE 2280F7 SHLD CURLIN 340 F9D1 C9 RET 341 342 ;************************************************************** 343 ;BLANK FROM CURSOR TO END OF UNPROTECTED FIELD 344 ;************************************************************** 345 346 F9D2 CD01FA BLANKL CALL CHARLN ;CALC # CHARS TO END OF FIELD 347 F9D5 3A91F7 BLANKL3 LDA PRTMD ;PROTECTED MODE? 348 F9D8 B7 ORA A 349 F9D9 CAE1F9 JZ BLANKL1 ;NOT PROTECTED,SKIP CHECK 350 F9DC 7E MOV A,M ;GET CHAR 351 F9DD B7 ORA A 352 F9DE FAE4F9 JM BLANKL2 ;IS PROTECTED,DO NOT BLANK 353 F9E1 3E20 BLANKL1 MVI A,' ' 354 F9E3 77 MOV M,A ;INSERT BLANK 355 F9E4 23 BLANKL2 INX H ;NEXT CHAR 356 F9E5 0D DCR C ;COUNT 357 F9E6 C2D5F9 JNZ BLANKL3 358 F9E9 C9 RET 359 360 ;************************************************************** 361 ;TURN ON PROTECTED FIELD/TURN OFF PROT FIELD 362 ;************************************************************** 363 364 F9EA 2182F7 PROTC LXI H,INVIDIO ;PT AT INVERTED VIDIO FLAG 365 F9ED C3AEF9 JMP INSMD1 366 367 ;************************************************************** 368 ;DELETE CHAR AND SHIFT PROTECTED FIELD LEFT ONE PLACE 369 ;************************************************************** 370 371 F9F0 CD01FA DELETE CALL CHARLN 372 F9F3 2A8FF7 LHLD CURPTR ;CURSOR POSITION 373 F9F6 54 MOV D,H 374 F9F7 5D MOV E,L 375 F9F8 23 INX H 376 F9F9 CDC9FD CALL MVCUP ;SHIFT LINE LEFT ONE PLACE 377 F9FC 3E20 MVI A,' ' 378 F9FE 1B DCX D ;BACK UP ONE 379 F9FF 12 STAX D ;INSERT FINAL BLANK 380 FA00 C9 RET 381 382 ;************************************************************** 383 ;CALC # CHARS FROM CURSOR TO END OF UNPROT FIELD INCLUSIVE 384 ; RETURN H,L=CURSOR PTR 385 ;************************************************************** 386 387 FA01 3A91F7 CHARLN LDA PRTMD ;PROTECT MODE FLAG 388 FA04 E680 ANI 80H 389 FA06 57 MOV D,A ;SAVE PROTECT MODE BIT 390 FA07 2A8FF7 LHLD CURPTR ;CURSOR POSITION 391 FA0A E5 PUSH H 392 FA0B 3A81F7 LDA CURCOL CP/M RMAC ASSEM 1.1 #008 MYVIO.ASM VERSION OF 73 MAY 84 RHP 393 FA0E 5F MOV E,A ;E=CURRENT COLUMN 394 FA0F 010000 LXI B,0 ;# CHARS TO END 395 FA12 3A9FF7 CHARLN1 LDA CLINE ;COLS/LINE 396 FA15 93 SUB E 397 FA16 1C INR E 398 FA17 23 INX H 399 FA18 0C INR C ;COUNT INCREASED 400 FA19 3D DCR A ;DNE YET WITH LINE 401 FA1A CA22FA JZ CHARLN2 ;END OF LINE RETURN 402 FA1D 7E MOV A,M ;H,L=END +1 403 FA1E A2 ANA D ;PROTECTED? 404 FA1F F212FA JP CHARLN1 ;NO, KEEP GOING 405 FA22 E1 CHARLN2 POP H ;CURSOR POSITION 406 FA23 C9 RET 407 408 ;************************************************************** 409 ;TABLE LOOK UP ROUTINE. SEARCHES FIRST BYTE OF THREE BYTE TABLE OF 410 ;RECORDS FOR A MATCH OR ZERO. ZERO INDICATES END OF TABLE WITH NO 411 ;MATCH, RETURNED IN A REG.H,L LOADED WITH SECOND TWO BYTES OF TABLE 412 ;IF MATCH FOUND. 413 ;************************************************************** 414 415 FA24 47 LOOKUP MOV B,A ;SAVE 416 FA25 7E LOOKU1 MOV A,M ;GET FIRST BYTE OF RECORD 417 FA26 1180F7 LXI D,CURLIN 418 FA29 B7 ORA A 419 FA2A C8 RZ ;DONE,NO MATCH 420 FA2B B8 CMP B ;SAME AS REQUESTED? 421 FA2C C236FA JNZ TBLUP1 ;NO 422 FA2F 23 INX H 423 FA30 5E MOV E,M 424 FA31 23 INX H 425 FA32 56 MOV D,M 426 FA33 EB XCHG 427 FA34 B7 ORA A ;SET FLAGS 428 FA35 C9 RET 429 430 FA36 23 TBLUP1 INX H 431 FA37 23 INX H 432 FA38 23 INX H ;BUMP TO NEXT RECORD 433 FA39 C325FA JMP LOOKU1 434 435 ;************************************************************** 436 ;DELETE CURRENT LINE AND RETURN CURSOR 437 ;************************************************************** 438 439 FA3C CD60FA DLINE CALL NMCHM ;SET UP FOR MOVE 440 FA3F E5 PUSH H ;SAVE COLS/LINE 441 FA40 19 DAD D ;H,L=SOURCE BEGIN 442 FA41 CDC9FD CALL MVCUP 443 FA44 C1 DLINE1 POP B ;COLS/LINE 444 FA45 EB XCHG 445 FA46 C358FA JMP EN1 ;ERASE LINE 446 447 ;************************************************************** 448 ;ENTER NEW LINE AT CURSOR LINE,PUSH BOTTOM DOWN CP/M RMAC ASSEM 1.1 #009 MYVIO.ASM VERSION OF 73 MAY 84 RHP 449 ;************************************************************** 450 451 FA49 CD60FA ENLINE CALL NMCHM ;SET UP FOR MOVE 452 FA4C E5 PUSH H ;SAVE COLS/LINE 453 FA4D 19 DAD D ;H,L=SOURCE BEGIN 454 FA4E 09 DAD B ;H,L=END OF DEST+1 455 FA4F EB XCHG 456 FA50 09 DAD B ;H,L=END OF SOURCE+1 457 FA51 2B DCX H 458 FA52 1B DCX D 459 FA53 CD9AFB CALL MVCDN ;MOVE DOWN 1 LINE 460 FA56 C1 POP B 461 FA57 23 INX H 462 FA58 3620 EN1 MVI M,' ' 463 FA5A 23 INX H 464 FA5B 0D DCR C 465 FA5C C258FA JNZ EN1 466 FA5F C9 RET 467 468 FA60 AF NMCHM XRA A 469 FA61 12 STAX D ;COL=0 470 FA62 CD70FA CALL CHARSN ;#CHARS TO END OF SCREEN 471 FA65 EB XCHG ;D,E=DEST. 472 FA66 2A9FF7 LHLD CLINE ;COLS/LINE 473 FA69 7D MOV A,L ;COLS/LINE 474 FA6A 0B NMCHM1 DCX B 475 FA6B 3D DCR A 476 FA6C C26AFA JNZ NMCHM1 ;DECREASE COUNT BY ONE LINES WORTH 477 FA6F C9 RET 478 479 ;************************************************************** 480 ;CALC # CHARS TO END OF SCREEN FROM CURSOR 481 ;************************************************************** 482 483 FA70 CD1FFB CHARSN CALL CALPOS 484 FA73 E5 PUSH H ;SAVE 485 FA74 EB XCHG ;D,E=CURSOR POS 486 FA75 2AA6F7 LHLD LASTC ;LAST CHAR POSITION+1 487 FA78 7A MOV A,D 488 FA79 2F CMA 489 FA7A 57 MOV D,A 490 FA7B 7B MOV A,E 491 FA7C 2F CMA 492 FA7D 5F MOV E,A 493 FA7E 13 INX D ;COMPLIMENT D,E 494 FA7F 19 DAD D ;H,L=# CHARS TO END-1 495 FA80 E5 PUSH H 496 FA81 C1 POP B ;B,C=#CHARS TO END 497 FA82 E1 POP H ;CURRENT POSITION CURSOR 498 FA83 C9 RET 499 500 ;************************************************************** 501 ;ESCAPE CODE PROCESSING 502 ;************************************************************** 503 504 FA84 E6F3 HIGH128 ANI 0F3H CP/M RMAC ASSEM 1.1 #010 MYVIO.ASM VERSION OF 73 MAY 84 RHP 505 FA86 F604 ORI 4H 506 FA88 EB XCHG ;H,L=SETCMD ADDR 507 FA89 E9 PCHL 508 509 ;GRAPHIC MODE 256 CHAR ROM,NO INVERSE VIDIO 510 511 FA8A F60C GRAPHIC ORI 0CH 512 FA8C EB XCHG ;H,L=SETCMD ADDR 513 FA8D E9 PCHL 514 515 ;LOWER HALF OF ROM+REVERSE VIDIO 516 517 FA8E E6F3 LOW128 ANI 0F3H 518 FA90 F608 ORI 8H 519 FA92 EB XCHG ;H,L=SETCMD ADDR 520 FA93 E9 PCHL 521 ;SCROLL TOGGLE 522 FA94 EE80 SCRL XRI 80H 523 FA96 EB XCHG ;H,L=SETCMD ADDR 524 FA97 E9 PCHL 525 526 ;UPPER LOWER CASE TOGGLE 527 528 FA98 EE20 UPLOW XRI 20H 529 FA9A EB XCHG ;H,L=SETCMD ADDR 530 FA9B E9 PCHL 531 532 ;INVERSE VIDIO TOGGLE 533 534 FA9C EE10 VIDIO XRI 10H 535 FA9E EB XCHG ;H,L=SETCMD ADDR 536 FA9F E9 PCHL 537 538 ;# LINES PER PAGE SWITCH 539 540 FAA0 EE02 LINES XRI 02H 541 FAA2 EB XCHG ;H,L=SETCMD ADDR 542 FAA3 E9 PCHL 543 544 ;#COLS/LINE TOGGLE 545 546 FAA4 EE01 COLS XRI 01H 547 FAA6 EB XCHG ;H,L=SETCMD ADDR 548 FAA7 E9 PCHL 549 550 ;************************************************************** 551 ;INSERT CURSOR CHAR AT PROPER POSITION 552 ;************************************************************** 553 554 FAA8 2A8FF7 INSCURS LHLD CURPTR 555 FAAB 7E MOV A,M 556 FAAC 3292F7 STA CCUR ;SAVE CHAR UNDER CURSOR FOR GRAPHICS MODE 557 FAAF F680 ORI 80H ;BIT 7 FOR INVERSE VIDIO 558 FAB1 77 MOV M,A ;STORE BACK 559 FAB2 3A83F7 LDA VDIMDE 560 FAB5 B7 ORA A CP/M RMAC ASSEM 1.1 #011 MYVIO.ASM VERSION OF 73 MAY 84 RHP 561 FAB6 C0 RNZ ;NO GRAPHICS 562 FAB7 367F MVI M,7FH ;BLOCK FOR GRAPHICS MODE 563 FAB9 C9 RET 564 565 ;************************************************************** 566 ;CLEAR TABS 567 ;************************************************************** 568 569 FABA 2195F7 CLRTBS LXI H,TAB ;TABS BITS 570 FABD 060A MVI B,10 ;#BYTES FOR TABS 571 FABF AF XRA A 572 FAC0 77 CLRT1 MOV M,A 573 FAC1 23 INX H 574 FAC2 05 DCR B 575 FAC3 C2C0FA JNZ CLRT1 576 FAC6 C38BF8 JMP ESCRET ;PUT IN CURSOR 577 578 ;************************************************************** 579 ;SET OR CLEAR TAB TOGGLE BIT 580 ;************************************************************** 581 582 FAC9 CDD7FA SETTAB CALL FNDTB 583 FACC EE80 XRI 80H ;INVERT TAB BIT 584 FACE 0F SETD2 RRC 585 FACF 05 DCR B 586 FAD0 C2CEFA JNZ SETD2 587 FAD3 12 STAX D ;STORE TAB BYTE 588 FAD4 C38BF8 JMP ESCRET ;DO CURSOR 589 590 ;FIND TAB BIT, LEAVE IN A REG BIT 7 591 592 FAD7 3A81F7 FNDTB LDA CURCOL ;COL # 593 FADA 67 MOV H,A 594 FADB 24 INR H 595 FADC 1195F7 LXI D,TAB ;WORD PTR 596 FADF 0E08 FNDTB1 MVI C,8 ;BIT COUNTER 597 FAE1 25 FNDTB3 DCR H 598 FAE2 CAEDFA JZ FNDTDN ;FOUND IT 599 FAE5 0D DCR C ;BIT COUNTER 600 FAE6 C2E1FA JNZ FNDTB3 601 FAE9 13 INX D ;PT AT NEXT BYTE 602 FAEA C3DFFA JMP FNDTB1 603 604 FAED 1A FNDTDN LDAX D ;GET TAB BYTE BITS 605 FAEE 41 MOV B,C ;SAVE COUNT OF BITS 606 FAEF 07 FNDTB2 RLC 607 FAF0 0D DCR C 608 FAF1 C2EFFA JNZ FNDTB2 ;ROTATE UNTIL FOUND 609 FAF4 C9 RET 610 611 ;************************************************************** 612 ;TAB TO BEGINNING OF NEXT UNPROTECTED FIELD OR TAB OR HOME IF NONE 613 ;************************************************************** 614 615 FAF5 AF TABB XRA A 616 FAF6 32A4F7 STA PRUPRF ;PROTECT/UNPROTECT TRANSITION FLAG CP/M RMAC ASSEM 1.1 #012 MYVIO.ASM VERSION OF 73 MAY 84 RHP 617 FAF9 CD39FB TAB3 CALL BMPC ;BUMP CURSOR POSITION 618 FAFC C204FB JNZ TAB1 ;NO LINE FEED NECESSARY 619 FAFF 34 INR M ;BUMP LINE # 620 FB00 BE CMP M ;EXCEED LPAGE? 621 FB01 FA20F9 JM SCROLL3 ;YES,HOME AND RETURN 622 FB04 3A91F7 TAB1 LDA PRTMD ;PROTECT MODE FLAG 623 FB07 EB XCHG ;H,L PTS AT CHAR 624 FB08 A6 ANA M ;PROTECTED? 625 FB09 7E MOV A,M ;GET CHAR 626 FB0A 11A4F7 LXI D,PRUPRF ;TRANSITION FLAG 627 FB0D F214FB JP TAB2 ;NO PROTECTED FIELD 628 FB10 12 STAX D ;SET TRANSITION FLAG 629 FB11 C3F9FA JMP TAB3 630 FB14 1A TAB2 LDAX D ;GET TRANSITION FLAG 631 FB15 B7 ORA A 632 FB16 F8 RM ;UNPROT FIELD WITH TRANSITION 633 FB17 CDD7FA CALL FNDTB ;FIND TAB POSITION BIT 634 FB1A B7 ORA A ;SET FLAGS 635 FB1B F8 RM ;TAB IS SET 636 FB1C C3F9FA JMP TAB3 637 638 ;************************************************************** 639 ;CALCULATE CURSOR POSITION FROM CURLIN AND CURCOL 640 ;************************************************************** 641 642 FB1F 2A9FF7 CALPOS LHLD CLINE ;CHARS/LINE-1 643 FB22 EB XCHG 644 FB23 2A80F7 LHLD CURLIN ;L=CURLIN,H=CURCOL 645 FB26 4C MOV C,H 646 FB27 45 MOV B,L 647 FB28 2100F0 LXI H,REFRESH ;BOTTOM OF REFRESH MEMORY 648 FB2B 04 INR B 649 FB2C 05 CALPOS1 DCR B ;DONE YET 650 FB2D CA34FB JZ CALPOS2 ;YES 651 FB30 19 DAD D ;ADD ANOTHER LINE OF CHARS 652 FB31 C32CFB JMP CALPOS1 653 654 FB34 09 CALPOS2 DAD B ;ADD CURRENT COL 655 FB35 228FF7 SHLD CURPTR ;SAVE 656 FB38 C9 RET 657 658 ;************************************************************** 659 ;BMPC BUMP CURSOR 1 PLACE. ON RETURN 660 ; D,E=CURSOR POSITION 661 ; H,L=CURCOL PTR OR CURLIN PTR DEPENDING ON Z FLAG 662 ; Z FLAG=0 IF NO LINE FEED NEEDED,1 IF LINE FEED NEEDED 663 ; CURLIN AND CURCOL AND CURPTR ARE UPDATED AS IF LINE FEED 664 ; A REG =LPAGE IF LINE FEED NEEDED 665 ;************************************************************** 666 667 FB39 2A8FF7 BMPC LHLD CURPTR 668 FB3C 23 INX H 669 FB3D 228FF7 SHLD CURPTR ;UPDATE ABS CURSOR ADDRESS 670 FB40 EB XCHG ;D,E=PTR 671 FB41 2181F7 LXI H,CURCOL 672 FB44 34 INR M ;BUMP COLUMN CP/M RMAC ASSEM 1.1 #013 MYVIO.ASM VERSION OF 73 MAY 84 RHP 673 FB45 3A9FF7 LDA CLINE ;MAX COLS/LINE 674 FB48 96 SUB M ;ZERO IF EXCEED LINE 675 FB49 C0 RNZ ;OK AS IS 676 FB4A 77 MOV M,A ;COL=0 677 FB4B 2B DCX H 678 FB4C 3AA1F7 LDA LPAGE ;MAX LINES/PAGE 679 FB4F C9 RET 680 681 ;************************************************************** 682 ;ADDRESSABLE CURSOR FUNCTION 683 ;************************************************************** 684 685 FB50 2185F7 ADDCURS LXI H,ESCCNT ;PT AT ESCAPE COUNT 686 FB53 1180F7 LXI D,CURLIN ;PT AT CURRENT LINE COUNT 687 FB56 3A93F7 LDA CCHAR 688 FB59 D620 SUI 20H ;REMOVE OFFSET FOR COUNT 689 FB5B 47 MOV B,A 690 FB5C 7E MOV A,M ;GET COUNT 691 FB5D D603 SUI 3 692 FB5F F8 RM ;NO VALID NUMBS YET 693 FB60 C26CFB JNZ XADD ;X AXIS VALUE 694 695 ;Y-AXIS VALUE 696 697 FB63 3AA1F7 LDA LPAGE 698 FB66 12 XADD3 STAX D ;MAX LINE # 699 FB67 B8 CMP B 700 FB68 F8 RM 701 FB69 78 MOV A,B 702 FB6A 12 STAX D 703 FB6B C9 RET 704 705 FB6C 3600 XADD MVI M,0 ;ESCCNT=0 706 FB6E 3A9FF7 LDA CLINE ;MAX COL/LINE 707 FB71 13 INX D 708 FB72 3D DCR A 709 FB73 C366FB JMP XADD3 710 711 ;************************************************************** 712 ;INSERT CHAR AT CURSOR POSITION.EITHER WRITES OVER PREVIOS 713 ;CHAR OR PUSHES ENTIRE FIELD OVER ONE CHAR BEFORE INSERTING. 714 ;************************************************************** 715 716 FB76 2A8FF7 INSCHR LHLD CURPTR ;CURSOR ADDRESS 717 FB79 E5 PUSH H ;SAVE 718 FB7A 3A84F7 LDA INSRT ;INSERT FLAG 719 FB7D B7 ORA A 720 FB7E CA8DFB JZ INSC3 ;OVERWRITE 721 FB81 CD01FA CALL CHARLN 722 FB84 0B DCX B ;3CHARS-1 TO END 723 FB85 09 DAD B ;H,L PTS AT LAST CHAR ON LINE 724 FB86 54 MOV D,H 725 FB87 5D MOV E,L 726 FB88 1B DCX D ;D,E PTS AT SOURCE 727 FB89 EB XCHG ;H,L=SOURCE,D,E=DEST 728 FB8A CD9AFB CALL MVCDN ;MOVE CHARS RIGHT CP/M RMAC ASSEM 1.1 #014 MYVIO.ASM VERSION OF 73 MAY 84 RHP 729 FB8D E1 INSC3 POP H ;CURSOR POSITION 730 FB8E 3A82F7 LDA INVIDIO 731 FB91 E680 ANI 80H 732 FB93 47 MOV B,A ;INVERT BIT 733 FB94 3A93F7 LDA CCHAR 734 FB97 B0 ORA B ;MERGE WITH INVERT BIT 735 FB98 77 INSC4 MOV M,A 736 FB99 C9 RET 737 738 ;************************************************************** 739 ;SHIFT CHARS RIGHT FROM D,E TO H,L, B,C CHARS FROM RIGHT 740 ;************************************************************** 741 742 FB9A 79 MVCDN MOV A,C 743 FB9B B0 ORA B 744 FB9C C8 RZ ;DONE 745 FB9D 7E MOV A,M 746 FB9E 12 STAX D 747 FB9F 2B DCX H 748 FBA0 1B DCX D 749 FBA1 0B DCX B 750 FBA2 C39AFB JMP MVCDN 751 752 ; CONTROL FUNCTION JUMP TABLE 753 754 FBA5 = CTRTBL EQU $ 755 FBA5 0D DB 0DH ;CARRIAGE RETURN 756 FBA6 9EF9 DW CRET 757 FBA8 0A DB 0AH ;LINE FEED 758 FBA9 09F9 DW LFEED 759 FBAB 04 DB 04H ;DELETE LINE (CTRL D) 760 FBAC 3CFA DW DLINE 761 FBAE 05 DB 05H ;INSERT LINE (CTRL E) 762 FBAF 49FA DW ENLINE 763 FBB1 08 DB 08H ;BACK CURSOR (CTRL H) 764 FBB2 98F9 DW BCKLNE 765 FBB4 09 DB 09H ;TAB (CTRL I) 766 FBB5 F5FA DW TABB 767 FBB7 0B DB 0BH ;UP CURSOR (CTRL K) 768 FBB8 97F9 DW UPLINE 769 FBBA 0C DB 0CH ;FORWARD CURSOR (CTRL L) 770 FBBB FAF8 DW BMPCUR 771 FBBD 10 DB 10H ;PROTECTED MODE TOGGLE (CTRL P) 772 FBBE A5F9 DW PRTECT 773 FBC0 14 DB 14H ;INSERT MODE (CTRL T) 774 FBC1 ABF9 DW INSMDE 775 FBC3 15 DB 15H ;CLEAR TO EOL (CTRL U) 776 FBC4 D2F9 DW BLANKL 777 FBC6 16 DB 16H ;PROTECTED FIELDS (CTRL V) 778 FBC7 EAF9 DW PROTC 779 FBC9 1A DB 1AH ;SCREEN ERASE (CTRL Z) 780 FBCA B2F9 DW BLNKS 781 FBCC 1E DB 1EH ;HOME CURSOR (CTRL ^) 782 FBCD CBF9 DW HOME 783 FBCF 7F DB 7FH ;DELETE CHAR (RUBOUT) 784 FBD0 F0F9 DW DELETE CP/M RMAC ASSEM 1.1 #015 MYVIO.ASM VERSION OF 73 MAY 84 RHP 785 FBD2 00 DB 0 ;TERMINATOR 786 787 ; ESCAPE FUNCTION JUMP TABLE 788 789 FBD3 = ESCTBL EQU $ 790 FBD3 1D DB 1DH ;CURSOR CONTROL ('=' LESS BIT 5 LOWER CASE) 791 FBD4 50FB DW ADDCURS 792 FBD6 09 DB 09H ;CLEAR TABS 793 FBD7 BAFA DW CLRTBS 794 FBD9 43 DB 'C' ;COLS/LINE 795 FBDA A4FA DW COLS 796 FBDC 45 DB 'E' ;EXTENDED MODE UPPER 128 797 FBDD 84FA DW HIGH128 798 FBDF 47 DB 'G' ;GRAPHIC SET 799 FBE0 8AFA DW GRAPHIC 800 FBE2 49 DB 'I' ;SET TAB 801 FBE3 C9FA DW SETTAB 802 FBE5 4C DB 'L' ;LINES/PAGE 803 FBE6 A0FA DW LINES 804 FBE8 53 DB 'S' ;SCROLL TOGGLE 805 FBE9 94FA DW SCRL 806 FBEB 54 DB 'T' ;LOWER 128 BYTES OF ROM 807 FBEC 8EFA DW LOW128 808 FBEE 55 DB 'U' ;UPPER/LOWER CASE 809 FBEF 98FA DW UPLOW 810 FBF1 56 DB 'V' ;INVERSE VIDIO TOGGLE 811 FBF2 9CFA DW VIDIO 812 FBF4 00 DB 0 ;TERMINATOR 813 814 ;************************************************************** 815 ;8085 MONITOR PROGRAM USING THE VIO FIRMWARE 816 ; COPYRIGHT IMSAI MANUFACTURING COMPANY, INC. 817 ; SAN LEANDRO,CALIFORNIA 818 ; 6/7/77 819 ;************************************************************** 820 821 FBF5 31FFF7 MONT LXI SP,REFRESH+7FFH ;TOP OF MEMORY 822 FBF8 CD27F8 CALL INIT ;INIT VIO 823 FBFB 212BFC LXI H,SIGNON 824 FBFE CD1AFF CALL MSGNC ;SIGNON MSG 825 FC01 CDB4FE PRMPT CALL CRLF 826 FC04 3E3F MVI A,'?' 827 FC06 CD91F8 CALL CHAROUT 828 FC09 CD65FE CALL CHIN ;GET COMMAND 829 FC0C 47 MOV B,A ;SAVE IT 830 FC0D 1101FC LXI D,PRMPT 831 FC10 D5 PUSH D ;RETURN ADDRESS 832 FC11 2A8BF7 LHLD USERCMD ;USER COMMAND TABLE 833 FC14 7C MOV A,H 834 FC15 B7 ORA A ;SET FLAGS 835 FC16 78 MOV A,B ;RETRIEVE CODE 836 FC17 CA20FC JZ NUCMD ;NO USER COMMAND TABLE 837 FC1A CD24FA CALL LOOKUP ;LOOKUP IN USER TABLE 838 FC1D C22AFC JNZ FNDCMD ;FOUND COMMAND 839 FC20 78 NUCMD MOV A,B ;GET COMMAND AGAIN 840 FC21 2124FF LXI H,CMDTBL ;COMAND TABLE PTR CP/M RMAC ASSEM 1.1 #016 MYVIO.ASM VERSION OF 73 MAY 84 RHP 841 FC24 CD24FA CALL LOOKUP 842 FC27 C8 RZ ;NO ENTRY,PROMPT AGIN 843 FC28 0601 MVI B,1 ;FOR PROT/UNPROT 844 FC2A E9 FNDCMD PCHL ;GO TO ROUTINE 845 846 847 FC2B 5220482050SIGNON DB 'R H PETERS VIO',0 848 FC3A 4D4F4E4954 DB 'MONITOR 4/84' 849 850 ;************************************************************** 851 ;JUMP TO MEMORY "JAAAA" 852 ;CALL MEMORY WITH RETURN TO MONITOR 853 ;************************************************************** 854 855 FC48 D1 JUMP POP D ;REMOVE RETURN ADDRESS 856 FC49 CDBFFE CALL1 CALL IHEX ;GET JUMP ADDRESS 857 FC4C E9 PCHL ;DO IT 858 859 ;************************************************************** 860 ;ENTER BYTE INTO MEMORY AND MODIFY IF DESIRED 861 ;************************************************************** 862 863 FC4D CDBFFE ENTR CALL IHEX ;START ADDR 864 FC50 CDB4FE ENTR1 CALL CRLF 865 FC53 CDB8FC CALL OHEXHL ;DISPLAY ADDRESS 866 FC56 7E MOV A,M ;GET BYTE IN MEMORY 867 FC57 5F MOV E,A ;PRESET FOR IHEX 868 FC58 CDAFFC CALL OHEXB ;DISPLAY BYTE 869 FC5B EB XCHG ;D,E=ADDRESS,L=DEFAULT CHAR 870 FC5C CDC2FE CALL IHEX2 ;GET MODIFIER OR DEFAULT 871 FC5F EB XCHG ;H,L=ADDR,E=BYTE 872 FC60 73 MOV M,E 873 FC61 2B DCX H 874 FC62 FE0A CPI 0AH ;DONE? 875 FC64 C8 RZ ;YES 876 FC65 FE2D CPI '-' ;BACKWARD 877 FC67 CA50FC JZ ENTR1 ;YES 878 FC6A 23 INX H 879 FC6B 23 INX H ;DEFAULT FORWARD 880 FC6C C350FC JMP ENTR1 881 882 ;************************************************************** 883 ;DISPLAY MEMORY "D,START,END CR" 884 ;************************************************************** 885 886 FC6F CD0CFD DISP CALL SIZE ;H,L=START,B,C=SIZE 887 FC72 3A94F7 DISP4 LDA CTRLC ;#LINES/COLS 888 FC75 0F RRC ;#LINES BIT IN CARRY 889 FC76 0F RRC 890 FC77 160C MVI D,12 891 FC79 DA7EFC JC DISP2 892 FC7C 1618 MVI D,24 893 FC7E CDB4FE DISP2 CALL CRLF 894 FC81 DB03 IN 3 895 FC83 E602 ANI 2 ;ANY INPUT 896 FC85 C0 RNZ ;YES,INTERRRUPT CP/M RMAC ASSEM 1.1 #017 MYVIO.ASM VERSION OF 73 MAY 84 RHP 897 FC86 1E08 MVI E,8 898 FC88 3A94F7 LDA CTRLC 899 FC8B 0F RRC 900 FC8C DA91FC JC DISP3 901 FC8F 1E10 MVI E,16 902 FC91 CDB8FC DISP3 CALL OHEXHL ;OUTPUT ASCII H,L REG 903 FC94 7E DISP1 MOV A,M ;GET DATA BYTE 904 FC95 CDAFFC CALL OHEXB ;OUTPUT WITH TRAIL BLANK 905 FC98 23 INX H 906 FC99 0B DCX B 907 FC9A 78 MOV A,B 908 FC9B B1 ORA C 909 FC9C C8 RZ ;DONE 910 FC9D 1D DCR E 911 FC9E C294FC JNZ DISP1 ;KEEP WITH CURRENT LINE 912 FCA1 15 DCR D ;FILLED PAGE YET? 913 FCA2 C27EFC JNZ DISP2 914 FCA5 CD65FE CALL CHIN ;WAIT FOR PAGE PROMT 915 FCA8 C372FC JMP DISP4 916 917 ;************************************************************** 918 ;ALLOW ESCAPE SEQUENCES TO CONTROL 919 ;************************************************************** 920 921 FCAB CD65FE ESCAP CALL CHIN ;READ ESCAPE SEQUENCE CODE 922 FCAE C9 RET 923 924 ;************************************************************** 925 ;OUTPUT HEX WITH TRAILING BYTE 926 ;************************************************************** 927 928 FCAF CDFEFE OHEXB CALL OHEX 929 FCB2 3E20 MVI A,' ' 930 FCB4 CD91F8 CALL CHAROUT 931 FCB7 C9 RET 932 933 ;************************************************************** 934 ;OUTPUT 16 BIT ASCII HEX FROM H,L 935 ;************************************************************** 936 937 FCB8 7C OHEXHL MOV A,H 938 FCB9 CDFEFE CALL OHEX 939 FCBC 7D MOV A,L 940 FCBD CDAFFC CALL OHEXB 941 FCC0 C9 RET 942 943 ;************************************************************** 944 ;INTEL LOADER LOADS INTEL FORMAT TAPES FROM 945 ;TELETYPE (PORT 2,3) 946 ;************************************************************** 947 948 FCC1 CD65FE INTEL CALL CHIN ;READ WITHOUT ECHO 949 FCC4 DE3A SBI ':' ;RCORD MARKER? 950 FCC6 C2C1FC JNZ INTEL ;NO 951 FCC9 57 MOV D,A ;ZERO CHECKSUM 952 FCCA CDF0FC CALL IBYTE ;INPUT 2 HEX CHARS CP/M RMAC ASSEM 1.1 #018 MYVIO.ASM VERSION OF 73 MAY 84 RHP 953 FCCD B7 ORA A ;SET FLAGS 954 FCCE C8 RZ ;COUNT =0 MEANS END 955 FCCF 57 MOV D,A ;BYTE COUNT 956 FCD0 CDF0FC CALL IBYTE 957 FCD3 67 MOV H,A 958 FCD4 CDF0FC CALL IBYTE 959 FCD7 6F MOV L,A 960 FCD8 CDF0FC CALL IBYTE ;DUMMY RECORD TYPE IGNORED 961 FCDB CDF0FC DATA CALL IBYTE 962 FCDE 77 MOV M,A 963 FCDF 23 INX H 964 FCE0 15 DCR D 965 FCE1 C2DBFC JNZ DATA 966 FCE4 CDF0FC CALL IBYTE ;READ AND ADD CHECKSUM 967 FCE7 CAC1FC JZ INTEL ;OK AS IS 968 FCEA 3E43 MVI A,'C' 969 FCEC CD91F8 CALL CHAROUT ;ERROR MESSAGE 970 FCEF C9 RET 971 972 ;************************************************************** 973 ;READ 2 ASCII HEX BYTES AND CONVERT TO BINARY 974 ;************************************************************** 975 976 FCF0 CD65FE IBYTE CALL CHIN ;READ CHAR 977 FCF3 CDD8FE CALL ASBI ;CONVERT TO BINARY 978 FCF6 DAD4FD JC ERR2 979 FCF9 87 ADD A 980 FCFA 87 ADD A 981 FCFB 87 ADD A 982 FCFC 87 ADD A 983 FCFD 5F MOV E,A ;SAVE 984 FCFE CD65FE CALL CHIN 985 FD01 CDD8FE CALL ASBI 986 FD04 DAD4FD JC ERR2 ;INVALID ASCII HEX CHAR 987 FD07 83 ADD E 988 FD08 5F MOV E,A ;SAVE CHAR 989 FD09 82 ADD D ;ADD TO CHECKSUM 990 FD0A 57 MOV D,A 991 FD0B C9 RET 992 993 ;************************************************************** 994 ;SIZE INPUTS START,END ADDR AND CONVERTS TO START 995 ; AND SIZE IN H,L AND B,C 996 ;************************************************************** 997 998 FD0C CD9EFE SIZE CALL PARM2 ;H,L=START D,E=END 999 FD0F F5 PUSH A 1000 FD10 7B MOV A,E 1001 FD11 95 SUB L ;LOW BYTE SIZE 1002 FD12 4F MOV C,A 1003 FD13 7A MOV A,D 1004 FD14 9C SBB H ;HIGH BYTE SIZE 1005 FD15 47 MOV B,A 1006 FD16 03 INX B ;ADD 1 1007 FD17 F1 POP A 1008 FD18 C9 RET CP/M RMAC ASSEM 1.1 #019 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1009 1010 ;************************************************************** 1011 ;MEMORY MOVE "M SOURCE BEG,SOURCE END,DEST BEG" 1012 ;************************************************************** 1013 1014 FD19 CDC3FD MOVE CALL PARM4 ;START,END,DEST 1015 FD1C CDC9FD MOVE1 CALL MVCUP ;DO MOVE 1016 FD1F C9 RET 1017 1018 ;************************************************************** 1019 ;FILL MEMORY WITH CHAR 1020 ;************************************************************** 1021 1022 FD20 CDC3FD FILL CALL PARM4 ;START,END,FILL CHAR IN L 1023 FD23 7B MOV A,E ;FILL CHAR 1024 FD24 77 MOV M,A ;STORE IN FIRST LOCATION 1025 FD25 0B DCX B 1026 FD26 54 MOV D,H 1027 FD27 5D MOV E,L ;DEST ADDR 1028 FD28 13 INX D ;=START ADDR+1 1029 FD29 C31CFD JMP MOVE1 1030 1031 ;************************************************************** 1032 ;MEMORY TEST ROUTINE 1033 ;************************************************************** 1034 1035 FD2C CD0CFD MEMTEST CALL SIZE ;H,L=START,B,C=SIZE 1036 FD2F 0B DCX B ;B,C=SIZE-1 OR 0 1037 FD30 AF MEM2 XRA A 1038 FD31 56 MOV D,M ;SAVE CELL 1039 FD32 77 MEM1 MOV M,A 1040 FD33 BE CMP M 1041 FD34 C249FD JNZ MEMERR ;NOT GOOD 1042 FD37 3D DCR A ;NEXT PATTERN 1043 FD38 C232FD JNZ MEM1 1044 FD3B 72 MOV M,D ;RESTORE MEMORY 1045 FD3C DB03 IN 3 1046 FD3E E602 ANI 2 ;BAIL OUT? 1047 FD40 C0 RNZ ;YES 1048 FD41 23 INX H 1049 FD42 0B DCX B 1050 FD43 78 MOV A,B 1051 FD44 B1 ORA C 1052 FD45 C230FD JNZ MEM2 1053 FD48 C9 RET 1054 1055 FD49 23 MEMERR INX H ;ADJUST FOR PRNMEM 1056 FD4A 5F MOV E,A ;SAVE 1057 FD4B CDF1FE CALL PNTMEM ;PRINT ADDR,CONTENTS 1058 FD4E 7B MOV A,E ;RESTORE 1059 FD4F C3EDFE JMP SRCPNT1 ;PRINT SOULD BE 1060 1061 ;************************************************************** 1062 ;DO DIRECT INPUT/OUTPUT FROM SPECIFIED PORT 1063 ;************************************************************** 1064 CP/M RMAC ASSEM 1.1 #020 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1065 FD52 05 INPORT DCR B ;B=0=INPUT,B=1=OUTPUT 1066 FD53 CD9EFE OUTPORT CALL PARM2 ;INPUT PORT,VALUE IN H,L AND D,E 1067 FD56 78 MOV A,B ;FLAG 1068 FD57 07 RLC 1069 FD58 07 RLC 1070 FD59 07 RLC 1071 FD5A EE08 XRI 08H ;INVERT BIT 3 1072 FD5C F6D3 ORI 0D3H ;FORM I/O INST 1073 FD5E 55 MOV D,L 1074 FD5F 2A8DF7 LHLD RAMPTR ;GET AVAIL RAM PTR 1075 FD62 77 MOV M,A 1076 FD63 BE CMP M 1077 FD64 C0 RNZ ;INVALID RAM 1078 FD65 E5 PUSH H 1079 FD66 23 INX H 1080 FD67 72 MOV M,D ;PORT # 1081 FD68 23 INX H 1082 FD69 36C9 MVI M,0C9H ;RETURN 1083 FD6B 2173FD LXI H,IORET 1084 FD6E E3 XTHL ;PUT RETURN ADDRESS,GET START ADDR 1085 FD6F 78 MOV A,B 1086 FD70 B7 ORA A ;SET FLAG FOR IN OR OUT 1087 FD71 7B MOV A,E ;OUTPUT BYTE 1088 FD72 E9 PCHL 1089 1090 FD73 C0 IORET RNZ ;DONE IF OUTPUT INST 1091 FD74 CDAFFC CALL OHEXB ;PRINT VALUE IF INPUT 1092 FD77 C9 RET 1093 1094 ;************************************************************** 1095 ;SET FREE RAM PTR FOR DIRECT IO INSTS 1096 ;************************************************************** 1097 1098 FD78 CDBFFE RAMFND CALL IHEX ;GET RAM ADDR 1099 FD7B 228DF7 SHLD RAMPTR ;SAVE IN VIO RAM 1100 FD7E C9 RET 1101 1102 ;************************************************************** 1103 ;COMPARE MEMORY BLOCKS AND PRINT DIFFERENCES 1104 ;************************************************************** 1105 1106 FD7F CDC3FD CMPBLK CALL PARM4 ;START,SIZE,DEST IN HL BC,DE 1107 FD82 1A CMPBLK1 LDAX D ;DEST BYTE 1108 FD83 BE CMP M ;SAME AS SOURCE BYTE? 1109 FD84 23 INX H 1110 FD85 13 INX D 1111 FD86 CA91FD JZ CMPB1 ;YES, NO PRINT 1112 FD89 CDF1FE CALL PNTMEM ;PRINT ADDR,SOURCE DEST 1113 FD8C EB XCHG 1114 FD8D CDF4FE CALL PNTME1 ;NO CRLF 1115 FD90 EB XCHG 1116 FD91 0B CMPB1 DCX B 1117 FD92 78 MOV A,B 1118 FD93 B1 ORA C 1119 FD94 C8 RZ ;YES,RETURN 1120 FD95 DB03 IN 3 CP/M RMAC ASSEM 1.1 #021 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1121 FD97 E602 ANI 2 1122 FD99 C0 RNZ ;BAIL OUT 1123 FD9A C382FD JMP CMPBLK1 1124 1125 ;************************************************************** 1126 ;SEARCH MEMORY FOR MASKED 16 BIT VALUE 1127 ;S,FROM,TO,16BIT VALUE,16 BIT MASK 1128 ;************************************************************** 1129 1130 FD9D CDC3FD SEARCH CALL PARM4 ;START,SIZE,VALUE IN H,L B,C D,E 1131 FDA0 E5 PUSH H ;SAVE 1132 FDA1 21FFFF LXI H,-1 ;DEFAULT MASK ALL 1133 FDA4 FE0A CPI 0AH ;USER SPECIFIED MASK? 1134 FDA6 C4BFFE CNZ IHEX ;YES,READ IT INTO H,L 1135 FDA9 E3 XTHL ;MASK ON STACK,START IN H,L 1136 FDAA 7E SEARCH1 MOV A,M ;LOW BYTE 1137 FDAB E3 XTHL ;H,L=MASK VALUE 1138 FDAC A4 ANA H ;MASK HIGH BYTE 1139 FDAD BA CMP D ;IS IT CORRECT VALUE? 1140 FDAE E3 XTHL ;RESTORE START PTR 1141 FDAF 23 INX H ;BUMP PTR 1142 FDB0 C2BBFD JNZ CMP16 ;NO MATCH 1143 FDB3 7E MOV A,M ;LOW BYTE 1144 FDB4 E3 XTHL ;GET MASK IN H,L 1145 FDB5 A5 ANA L 1146 FDB6 BB CMP E 1147 FDB7 E3 XTHL ;H,L=START,STACK=MASK 1148 FDB8 CCE9FE CZ SRCPNT ;PRINT MATCH IF FOUND 1149 FDBB 0B CMP16 DCX B 1150 FDBC 78 MOV A,B 1151 FDBD B1 ORA C 1152 FDBE C2AAFD JNZ SEARCH1 1153 FDC1 C1 POP B ;REMOVE MASK VALUE 1154 FDC2 C9 RET 1155 1156 ;************************************************************** 1157 ;PARM4 INPUTS START,END,VALUE AND 1158 ;CONVERTS TO START,SIZE,VALUE IN H,L B,C AND D,E 1159 ;RESPECTIVELY 1160 ;************************************************************** 1161 1162 FDC3 CD0CFD PARM4 CALL SIZE 1163 FDC6 C3AEFE JMP PARM3 1164 1165 ;************************************************************** 1166 ;MVCUP MOVE B,C CHARS FROM H,L TO D,E FROM BOTTOM 1167 ;************************************************************** 1168 1169 FDC9 78 MVCUP MOV A,B 1170 FDCA B1 ORA C 1171 FDCB C8 RZ 1172 FDCC 7E MOV A,M 1173 FDCD 12 STAX D ;MOVE IT 1174 FDCE 0B DCX B 1175 FDCF 23 INX H 1176 FDD0 13 INX D CP/M RMAC ASSEM 1.1 #022 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1177 FDD1 C3C9FD JMP MVCUP ;KEEP GOING 1178 1179 FDD4 3E54 ERR2 MVI A,'T' ;TYPE CODE ERROR 1180 FDD6 CADFFD JZ RDRCRDS ;NO ERROR 1181 FDD9 CD91F8 CALL CHAROUT 1182 FDDC C301FC JMP PRMPT ;BAIL OUT 1183 1184 FDDF C1 RDRCRDS POP B ;EXEC 1185 FDE0 E1 POP H ;END 1186 FDE1 D1 POP D ;START 1187 FDE2 C5 PUSH B ;RETURN EXEC ADDR 1188 FDE3 E5 PUSH H ;END 1189 FDE4 D5 PUSH D ;START 1190 FDE5 7D MOV A,L 1191 FDE6 93 SUB E 1192 FDE7 6F MOV L,A 1193 FDE8 7C MOV A,H 1194 FDE9 9A SBB D 1195 FDEA 67 MOV H,A 1196 FDEB 29 DAD H 1197 FDEC 4C MOV C,H 1198 FDED 0C INR C ;RECORD COUNT TO READ 1199 FDEE CD33FE RDRCRD CALL CASIN ;TYPE CODE 1200 FDF1 FE81 RDRCRD1 CPI 81H ;ABS BINARY? 1201 FDF3 C2D4FD JNZ ERR2 ;TYPE CODE ERROR 1202 FDF6 CD33FE CALL CASIN ;BYTE COUNT 1203 FDF9 47 MOV B,A ;SAVE RECORD BYTE COUNT 1204 FDFA 210000 LXI H,0 ;0 CHECKSUM 1205 FDFD CD41FE RDATA CALL CASINCK ;READ DATA BYTE 1206 FE00 12 STAX D ;STORE IT 1207 FE01 13 INX D 1208 FE02 05 DCR B 1209 FE03 C2FDFD JNZ RDATA ;CONTINUE IF NOT DONE 1210 FE06 D5 PUSH D ;SAVE MEMORY PTR 1211 FE07 EB XCHG ;DE=CHECKSUM 1212 FE08 CD5CFE CALL CASWD ;READ TAPE CHECKSUM 1213 FE0B 65 MOV H,L 1214 FE0C 6F MOV L,A ;REVERSE BYTES 1215 FE0D 19 DAD D ;ADD TO COMPUTED CHECKSUM 1216 FE0E 7C MOV A,H 1217 FE0F B5 ORA L 1218 FE10 3E43 MVI A,'C' ;CHECKSUM ERROR 1219 FE12 C491F8 CNZ CHAROUT ;TYPE 'C' 1220 FE15 C21DFE JNZ RDATA1 1221 FE18 3E2A MVI A,'*' 1222 FE1A CD91F8 CALL CHAROUT ;TYPE * FOR GOOD RECORD 1223 FE1D D1 RDATA1 POP D ;RETRIEVE MEMORY PTR 1224 FE1E 0D DCR C ;ALL RECORDS READ YET 1225 FE1F C2EEFD JNZ RDRCRD ;NO READ ANOTHER 1226 FE22 CDB4FE CALL CRLF 1227 FE25 0E03 MVI C,3 1228 FE27 E1 LP2 POP H 1229 FE28 CDB8FC CALL OHEXHL 1230 FE2B 0D DCR C 1231 FE2C C227FE JNZ LP2 1232 FE2F F1 POP PSW ;EXEC/LOAD FLAG CP/M RMAC ASSEM 1.1 #023 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1233 FE30 1F RAR 1234 FE31 D8 RC ;DONE 1235 FE32 E9 PCHL 1236 1237 ;************************************************************** 1238 ;READ BYTE FROM CASETTE WITHOUT CHECKSUM 1239 ;************************************************************** 1240 1241 FE33 DB03 CASIN IN 3 1242 FE35 0F RRC 1243 FE36 0F RRC ;C=SERIAL READY 1244 FE37 DA01FC JC PRMPT ;BAIL OUT 1245 FE3A 0F RRC ;C=CASETTE READY 1246 FE3B D233FE JNC CASIN ;KEEP TRYING 1247 FE3E DB00 IN 0 ;DATA PORT 1248 FE40 C9 RET 1249 1250 ;************************************************************** 1251 ;CASINCK- READ BYTE WITH CHECKSUM 1252 ;************************************************************** 1253 1254 FE41 CD33FE CASINCK CALL CASIN 1255 FE44 C5 CHKSUM PUSH B 1256 FE45 4F MOV C,A ;NEW CHAR IN LOW BYTE 1257 FE46 0600 MVI B,0 1258 FE48 09 DAD B ;ADD TO CHECKSUM 1259 FE49 C1 POP B ;RESTORE 1260 FE4A C9 RET 1261 1262 ;************************************************************** 1263 ;GET CASETTE IN BYTE MODE IE READ FIRST 0E6H 1264 ;************************************************************** 1265 1266 FE4B 3E60 BYTESET MVI A,60H ;BIT MODE 1267 FE4D D303 OUT 3 1268 FE4F CD33FE BYTE1 CALL CASIN ;READ BYTE EVERY BIT TIME 1269 FE52 FEE6 CPI 0E6H ;SYNC YET 1270 FE54 C24FFE JNZ BYTE1 ;NO 1271 FE57 3E20 MVI A,20H ;BYTE MODE 1272 FE59 D303 OUT 3 1273 FE5B C9 RET 1274 1275 ;************************************************************** 1276 ;CASWD-INPUT WORD TO H,L ADD FIRST BYTE ONLY 1277 ;TO CHECKSUM 1278 ;************************************************************** 1279 1280 FE5C CD33FE CASWD CALL CASIN ;READ LOW BYTE 1281 FE5F 6F MOV L,A 1282 FE60 CD33FE CALL CASIN ;READ HIGH BYTE 1283 FE63 67 MOV H,A 1284 FE64 C9 RET 1285 1286 ;************************************************************** 1287 ;CHARACTER INPUT ROUTINES 1288 ;************************************************************** CP/M RMAC ASSEM 1.1 #024 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1289 1290 FE65 CD76FE CHIN CALL CHIN1 1291 FE68 FE03 CPI 03 ;CRTL C? 1292 FE6A CAF5FB JZ MONT ;YES,RESET AND PROMPT 1293 FE6D CD91F8 CALL CHAROUT 1294 FE70 FE0D CPI 0DH 1295 FE72 CCB4FE CZ CRLF ;ADD LINE FEED 1296 FE75 C9 RET 1297 1298 FE76 CD89FE CHIN1 CALL CONST 1299 FE79 B7 ORA A 1300 FE7A CA76FE JZ CHIN1 1301 FE7D DB02 IN 2 ;READ PORT 2 1302 FE7F E67F ANI 7FH ;MASK PARITY 1303 FE81 C9 RET 1304 1305 FE82 DB03 PRSTAT IN 3 ;READ STATUS PORT 1306 FE84 E608 ANI 8 ;CHECK THE READY BIT 1307 FE86 C38DFE JMP STAT1 1308 1309 FE89 DB03 CONST IN 3 ;READ STATUS PORT 1310 FE8B E602 ANI 2 ;CHECK FOR KEYPRESS 1311 FE8D 3EFF STAT1 MVI A,0FFH ;GET READY FOR KEYPRESS 1312 FE8F C0 RNZ 1313 FE90 2F CMA ;NO KEYPRESS 1314 FE91 C9 RET 1315 1316 FE92 4F PRINTA MOV C,A 1317 FE93 CD82FE PRINTC CALL PRSTAT 1318 FE96 B7 ORA A 1319 FE97 CA93FE JZ PRINTC 1320 FE9A 79 MOV A,C 1321 FE9B D301 OUT 1 1322 FE9D C9 RET 1323 1324 ;************************************************************** 1325 ;PARM2 READ 2 PARAMETERS 16 BITS EACH INTO H,L AND D,E 1326 ;************************************************************** 1327 1328 FE9E CDBFFE PARM2 CALL IHEX 1329 FEA1 54 MOV D,H 1330 FEA2 5D MOV E,L 1331 FEA3 FE0A CPI 0AH ;TERMINATED? 1332 FEA5 C8 RZ ;YES,USE SAME VALUE 1333 FEA6 FE2C CPI ',' 1334 FEA8 CAAEFE JZ PARM3 1335 FEAB FE20 CPI ' ' 1336 FEAD C0 RNZ ;INVALID 1337 FEAE EB PARM3 XCHG 1338 FEAF CDBFFE CALL IHEX ;GET SECOND PARM 1339 FEB2 EB XCHG 1340 FEB3 C9 RET 1341 1342 ;************************************************************** 1343 ;CRLF DO CARRIAGE RETURN/LINE FEED 1344 ;************************************************************** CP/M RMAC ASSEM 1.1 #025 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1345 1346 FEB4 3E0D CRLF MVI A,0DH 1347 FEB6 CD91F8 CALL CHAROUT 1348 FEB9 3E0A MVI A,0AH 1349 FEBB CD91F8 CALL CHAROUT 1350 FEBE C9 RET 1351 1352 ;************************************************************** 1353 ;INPUT CHARS ASSUMED HEX AND CONVERT TO BINARY 1354 ;TERMINATES ON FIRST NO HEX CHAR WHICH IS LEFT 1355 ;IN A REG. H,L RETURNS WITH VALUE 1356 ;************************************************************** 1357 1358 FEBF 210000 IHEX LXI H,0 1359 FEC2 CD65FE IHEX2 CALL CHIN ;READ CHAR 1360 FEC5 F5 PUSH A 1361 FEC6 CDD8FE CALL ASBI ;CONVERT TO BIBARY 1362 FEC9 D2CEFE JNC IHEX1 1363 FECC F1 POP A 1364 FECD C9 RET 1365 1366 FECE 29 IHEX1 DAD H 1367 FECF 29 DAD H 1368 FED0 29 DAD H 1369 FED1 29 DAD H ;ADD NEW DIGIT 1370 FED2 85 ADD L 1371 FED3 6F MOV L,A 1372 FED4 F1 POP A 1373 FED5 C3C2FE JMP IHEX2 1374 1375 ;************************************************************** 1376 ;CONVERT ASCII HEX CHAR IN A-REG TO BINARY IN A REG 1377 ;RETURN WITH CARRY SET IF INVALID CHAR,RESET OTHERWISE 1378 ;************************************************************** 1379 1380 FED8 D630 ASBI SUI 30H ;REMOVE ASCII BIAS 1381 FEDA D8 RC ;INVALID <0 1382 FEDB FE0A CPI 10 1383 FEDD DAE7FE JC ASBI1 ;VALID 0-9 1384 FEE0 D611 SUI 17 1385 FEE2 D8 RC ;INVALID 1386 FEE3 C60A ADI 10 1387 FEE5 FE10 CPI 16 ;SET CARRY IF <0FH 1388 FEE7 3F ASBI1 CMC 1389 FEE8 C9 RET 1390 1391 ;************************************************************** 1392 ;PRINT H,L AND 16 BIT MEMORY AT H,L 1393 ;************************************************************** 1394 1395 FEE9 CDF1FE SRCPNT CALL PNTMEM 1396 FEEC 7E MOV A,M ;BYTE 2 1397 FEED CDFEFE SRCPNT1 CALL OHEX 1398 FEF0 C9 RET 1399 1400 FEF1 CDB4FE PNTMEM CALL CRLF CP/M RMAC ASSEM 1.1 #026 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1401 FEF4 2B PNTME1 DCX H ;BACK UP 1 1402 FEF5 CDB8FC CALL OHEXHL 1403 FEF8 7E MOV A,M 1404 FEF9 CDAFFC CALL OHEXB 1405 FEFC 23 INX H 1406 FEFD C9 RET 1407 1408 ;************************************************************** 1409 ;OUTPUT HEX CHARS TO VIDIO FROM A REG 1410 ;************************************************************** 1411 1412 FEFE F5 OHEX PUSH PSW ;SAVE CHAR 1413 FEFF 0F RRC 1414 FF00 0F RRC 1415 FF01 0F RRC 1416 FF02 0F RRC 1417 FF03 CD0BFF CALL BIAS ;BINARY TO ASCII AND OUT 1418 FF06 F1 POP PSW 1419 FF07 CD0BFF CALL BIAS 1420 FF0A C9 RET 1421 1422 ;************************************************************** 1423 ;CONVERT BINARY TO ASCII 1424 ;************************************************************** 1425 1426 FF0B E60F BIAS ANI 0FH ;MASK NIBBLE 1427 FF0D C690 ADI 90H 1428 FF0F 27 DAA 1429 FF10 CE40 ACI 40H 1430 FF12 27 DAA 1431 FF13 CD91F8 CALL CHAROUT 1432 FF16 C9 RET 1433 1434 ;************************************************************** 1435 ;OUTPUT MESSAGE PTED TO BY H,L AND TERMINATED 1436 ;BY ONE BYTE OF BINARY ZEROS 1437 ;************************************************************** 1438 1439 FF17 CDB4FE MSG CALL CRLF 1440 FF1A 7E MSGNC MOV A,M 1441 FF1B B7 ORA A 1442 FF1C C8 RZ 1443 FF1D CD91F8 CALL CHAROUT 1444 FF20 23 INX H 1445 FF21 C31AFF JMP MSGNC 1446 1447 FF24 = CMDTBL EQU $ 1448 FF24 1B DB 1BH ;ESCAPE CODE 1449 FF25 ABFC DW ESCAP 1450 FF27 43 DB 'C' ;CALL MEMORY WITH RETURN 1451 FF28 49FC DW CALL1 1452 FF2A 44 DB 'D' ;DISPLAY MEMORY 1453 FF2B 6FFC DW DISP 1454 FF2D 45 DB 'E' ;ENTER INTO MEMORY 1455 FF2E 4DFC DW ENTR 1456 FF30 46 DB 'F' ;FILL MEMORY CP/M RMAC ASSEM 1.1 #027 MYVIO.ASM VERSION OF 73 MAY 84 RHP 1457 FF31 20FD DW FILL 1458 FF33 48 DB 'H' ;INTEL HEX LOADS 1459 FF34 C1FC DW INTEL 1460 FF36 49 DB 'I' ;INPUT FROM SPECIFIED PORT 1461 FF37 52FD DW INPORT 1462 FF39 4A DB 'J' ;JUMP TO ADDRESS 1463 FF3A 48FC DW JUMP 1464 FF3C 4D DB 'M' ;MOVE MEMORY BLOCK 1465 FF3D 19FD DW MOVE 1466 FF3F 4F DB 'O' ;OUTPUT TO SPECIFIED PORT 1467 FF40 53FD DW OUTPORT 1468 FF42 52 DB 'R' ;FREE RAM LOCATION 1469 FF43 78FD DW RAMFND 1470 FF45 53 DB 'S' ;16 BIT MASKED SEARCH 1471 FF46 9DFD DW SEARCH 1472 FF48 54 DB 'T' ;TEST MEMORY 1473 FF49 2CFD DW MEMTEST 1474 FF4B 56 DB 'V' ;COMPARE MEMORY BLOCKS 1475 FF4C 7FFD DW CMPBLK 1476 FF4E 00 DB 0 1477 1478 FF4F END CP/M RMAC ASSEM 1.1 #028 MYVIO.ASM VERSION OF 73 MAY 84 RHP ADDCURS FB50 685# 791 ASBI FED8 977 985 1361 1380# ASBI1 FEE7 1383 1388# BCKL1 F99C 297# 302 BCKLNE F998 293# 764 BIAS FF0B 1417 1419 1426# BLANKL F9D2 346# 776 BLANKL1 F9E1 349 353# BLANKL2 F9E4 352 355# BLANKL3 F9D5 347# 357 BLNKS F9B2 87 325# 780 BLNKS1 F9B9 328# 337 BLNKS2 F9C4 331 333# BMP1 F8F2 89 159 182# 249 BMP10 F8EF 181# 250 259 BMPC FB39 190 617 667# BMPCUR F8FA 180 189# 195 770 BMPCUR1 F90C 191 199# BYTE1 FE4F 1268# 1270 BYTESET FE4B 1266# CALL1 FC49 856# 1451 CALPOS FB1F 181 483 642# CALPOS1 FB2C 649# 652 CALPOS2 FB34 650 654# CASIN FE33 1199 1202 1241# 1246 1254 1268 1280 1282 CASINCK FE41 1205 1254# CASWD FE5C 1212 1280# CCHAR F793 32# 140 144 246 687 733 CCUR F792 31# 142 556 CHAR1 F8E9 156 168 171 174 176 179# CHARLN FA01 346 371 387# 721 CHARLN1 FA12 395# 404 CHARLN2 FA22 401 405# CHAROUC F890 64 134# CHAROUT F891 57 136# 827 930 969 1181 1219 1222 1293 1347 1349 1431 1443 CHARSN FA70 470 483# CHIN FE65 67 828 914 921 948 976 984 1290# 1359 CHIN1 FE76 60 1290 1298# 1300 CHKSUM FE44 1255# CLINE F79F 43# 77 102 220 395 472 642 673 706 CLRT1 FAC0 572# 575 CLRTBS FABA 569# 793 CMDTBL FF24 840 1447# CMP16 FDBB 1142 1149# CMPB1 FD91 1111 1116# CMPBLK FD7F 1106# 1475 CMPBLK1 FD82 1107# 1123 COLS FAA4 546# 795 CONST FE89 59 1298 1309# CONTROL F93C 163 238# CRET F99E 300# 756 CRLF FEB4 825 864 893 1226 1295 1346# 1400 1439 CTRLC F794 33# 94 118 164 209 284 887 898 CTRPORT F7FF 14# 95 CTRTBL FBA5 247 754# CP/M RMAC ASSEM 1.1 #029 MYVIO.ASM VERSION OF 73 MAY 84 RHP CURCOL F781 19# 252 392 592 671 CURLIN F780 18# 76 77 198 339 417 644 686 CURPTR F78F 29# 84 141 372 390 554 655 667 669 716 DATA FCDB 961# 965 DELETE F9F0 371# 784 DISP FC6F 886# 1453 DISP1 FC94 903# 911 DISP2 FC7E 891 893# 913 DISP3 FC91 900 902# DISP4 FC72 887# 915 DLINE FA3C 439# 760 DLINE1 FA44 232 443# EN1 FA58 445 462# 465 ENLINE FA49 451# 762 ENTR FC4D 863# 1455 ENTR1 FC50 864# 877 880 ERR2 FDD4 978 986 1179# 1201 ESCAP FCAB 921# 1449 ESCAP1 F973 270 272# ESCAPE F960 147 150 259# ESCCDE F786 24# 279 ESCCNT F785 23# 126 148 262 685 ESCRET F88B 125# 283 576 588 ESCTBL FBD3 281 789# FILL FD20 1022# 1457 FNDCMD FC2A 838 844# FNDCTRL F958 245 250# FNDESC F990 278 284# FNDTB FAD7 582 592# 633 FNDTB1 FADF 596# 602 FNDTB2 FAEF 606# 608 FNDTB3 FAE1 597# 600 FNDTDN FAED 598 604# GRAPHIC FA8A 511# 799 HIGH128 FA84 504# 797 HOME F9CB 338# 782 IBYTE FCF0 952 956 958 960 961 966 976# IHEX FEBF 856 863 1098 1134 1328 1338 1358# IHEX1 FECE 1362 1366# IHEX2 FEC2 870 1359# 1373 INIT F827 56 66 72# 822 INIT1 F831 79# 82 INPORT FD52 1065# 1461 INSC3 FB8D 720 729# INSC4 FB98 735# INSCHR FB76 179 716# INSCURS FAA8 182 554# INSMD1 F9AE 316# 365 INSMDE F9AB 309 315# 774 INSRT F784 22# 301 315 718 INTEL FCC1 948# 950 967 1459 INVIDIO F782 20# 364 730 IORET FD73 1083 1090# JUMP FC48 855# 1463 LASTC F7A6 48# 117 486 LFEED F909 198# 758 CP/M RMAC ASSEM 1.1 #030 MYVIO.ASM VERSION OF 73 MAY 84 RHP LINES FAA0 540# 803 LOOKU1 FA25 416# 433 LOOKUP FA24 244 248 277 282 415# 837 841 LOW128 FA8E 517# 807 LP2 FE27 1228# 1231 LPAGE F7A1 44# 103 200 678 697 MEM1 FD32 1039# 1043 MEM2 FD30 1037# 1052 MEMERR FD49 1041 1055# MEMTEST FD2C 1035# 1473 MONT FBF5 58 821# 1292 MOVE FD19 1014# 1465 MOVE1 FD1C 1015# 1029 MSG FF17 1439# MSGNC FF1A 824 1440# 1445 MVCDN FB9A 459 728 742# 750 MVCUP FDC9 231 376 442 1015 1169# 1177 NCHARS F7A2 45# 86 114 223 325 NMCHM FA60 439 451 468# NMCHM1 FA6A 474# 476 NOUSER F94C 243 246# NOUSER1 F94F 153 247# NUCMD FC20 836 839# NUESC F982 276 279# OHEX FEFE 928 938 1397 1412# OHEXB FCAF 868 904 928# 940 1091 1404 OHEXHL FCB8 865 902 937# 1229 1402 OUTPORT FD53 1066# 1467 PARM2 FE9E 998 1066 1328# PARM3 FEAE 1163 1334 1337# PARM4 FDC3 1014 1022 1106 1130 1162# PNTME1 FEF4 1114 1401# PNTMEM FEF1 1057 1112 1395 1400# PRINTA FE92 62 1316# PRINTC FE93 63 1317# 1319 PRMPT FC01 825# 830 1182 1244 PROTC F9EA 364# 778 PRSTAT FE82 61 1305# 1317 PRTECT F9A5 308# 772 PRTMD F791 30# 192 308 328 347 387 622 PRUPRF F7A4 46# 616 626 RAMFND FD78 1098# 1469 RAMPTR F78D 28# 1074 1099 RDATA FDFD 1205# 1209 RDATA1 FE1D 1220 1223# RDRCRD FDEE 1199# 1225 RDRCRD1 FDF1 1200# RDRCRDS FDDF 1180 1184# REFRESH F000 11# 12 14 83 115 229 327 647 821 SCRL FA94 522# 805 SCROLL F913 209# SCROLL1 F925 213 220# SCROLL2 F939 232# SCROLL3 F920 211 214# 621 SEARCH FD9D 1130# 1471 SEARCH1 FDAA 1136# 1152 CP/M RMAC ASSEM 1.1 #031 MYVIO.ASM VERSION OF 73 MAY 84 RHP SETCM1 F85D 100 102# SETCM2 F86B 106 108# SETCM3 F872 109 111# SETCM4 F877 112 114# SETCMD F84C 94# 285 SETD2 FACE 584# 586 SETTAB FAC9 582# 801 SIGNON FC2B 823 847# SIZE FD0C 886 998# 1035 1162 SRCPNT FEE9 1148 1395# SRCPNT1 FEED 1059 1397# STAT1 FE8D 1307 1311# SYSRAM F780 12# 16 65 TAB F795 42# 569 595 TAB1 FB04 618 622# TAB2 FB14 627 630# TAB3 FAF9 617# 629 636 TABB FAF5 615# 766 TBLUP1 FA36 421 430# UPLINE F997 292# 768 UPLOW FA98 528# 809 USERCMD F78B 27# 832 USERCTR F787 25# 239 USERESC F789 26# 272 USERF F7A5 47# VDIMDE F783 21# 121 154 559 VIDIO FA9C 534# 811 VIOFM F800 13# 54 VIOTEST F81B 65# 68 XADD FB6C 693 705# XADD3 FB66 698# 709