CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0001 0001 ; 0002 ; 0003 ;EQUATE TABLE 0004 ; 0005 ;IN-OUT FOR SNOOPY DOS 0006 ;Jan. 30, 1982 0007 ; (E000) 0008 PRGORG: EQU 0E000H ;PROGRAM ORIGIN 0009 ; (DFFF) 0010 RAM EQU 0DFFFH 0011 ; (0001) 0012 IMSAI EQU 1 ;1 Indicates active (0000) 0013 INTER EQU 0 ;0 Indicates not active (0000) 0014 TV.950 EQU 0 ;Televideo 950 monitor (0000) 0015 MX.100 EQU 0 ;Epson Mx 100 printer 0016 ; 0017 IF IMSAI 0018 ; 0019 ;Console output equates 0020 ; (0050) 0021 Sc.Stat EQU 50H ;Con. out status port (0080) 0022 SC.AND EQU 80H ;Bit Mask (0080) 0023 SC.OUT EQU 80H ;Value when ready (0051) 0024 C.Out EQU 51H ;Console output port 0025 ; 0026 ;Keyboard number 1 0027 ; (0008) 0028 I.And1 EQU 8 ;Bit mask (0008) 0029 I.Cp.1 EQU 8 ;Value when ready (0001) 0030 I.In.1 EQU 1 ;Keyboard port number (0003) 0031 I.Sin1 EQU 3 ;Status port 0032 ; 0033 ;Keyboard number 2 0034 ; (0008) 0035 I.And2 EQU 8 ;Bit mask (0008) 0036 I.Cp.2 EQU 8 ;Value when ready (0001) 0037 I.In.2 EQU 1 ;Keyboard port number (0003) 0038 I.Sin2 EQU 3 ;Status port number 0039 ; (0094) 0040 SW.Byte EQU 94H ;Switching mode char. 0041 ; 0042 ;Line printer 1 equates 0043 ; (00C0) 0044 Omask1 EQU 0C0H ;Bit mask (0080) 0045 Cmask1 EQU 80H ;Value when ready (0000) 0046 Out.1 EQU 0 ;Output port (0003) 0047 Sport1 EQU 3 ;Status port 0048 ; 0049 ;Line pririnter 2 equates 0050 ; (00C0) 0051 Omask2 EQU 0C0H ;Bit mask (0080) 0052 Cmask2 EQU 80H ;Value when ready (0000) 0053 Out.2 EQU 0 ;Output port (0003) 0054 Sport2 EQU 3 ;Status port 0055 ; 0056 ENDIF 0057 ; CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0002 0058 IF INTER 0059 ; 0060 ;Console output equates 0061 ; 0062 Sc.Stat EQU 50H ;Con Out status port 0063 SC.AND EQU 80H ;Bit mask 0064 SC.OUT EQU 80H ;Value when ready 0065 C.OUT EQU 51H ;Console output port 0066 ; 0067 ;Keyboard number 1 0068 ; 0069 I.And1 EQU 40H ;Bit mask 0070 I.Cp.1 EQU 40H ;Value when ready 0071 I.In.1 EQU 51H ;Keyboard port number 0072 I.Sin1 EQU 50H ;Status port 0073 ; 0074 ;Keyboard number 2 0075 ; 0076 I.And2 EQU 40H ;Bit mask 0077 I.Cp.2 EQU 40H ;Value when ready 0078 I.In.2 EQU 51H ;Keyboard port number 0079 I.Sin2 Equ 50H ;Status port 0080 ; 0081 SW.Byte EQU 1EH ;Character for switching 0082 ;Mode 0083 ; 0084 ;Line printer 1 equates 0085 ; 0086 Omask1 EQU 84H ;Bit mask 0087 Cmask1 EQU 80H ;Value when ready 0088 Out.1 EQU 21H ;Output port 0089 Sport1 EQU 20H ;Status port 0090 ; 0091 ;Line printer 2 equates 0092 ; 0093 Omask2 Equ 84H ;Bit mask 0094 Cmask2 EQU 80H ;Value when ready 0095 Out.2 EQU 21H ;Output port 0096 Sport2 EQU 20H ;Status port 0097 ; 0098 ENDIF 0099 ; (DFF0) 0100 STACK2: EQU RAM-0FH (DFF0) 0101 SAVESP: EQU STACK2 (DFF2) 0102 PGBUF: EQU RAM-0DH (DFF5) 0103 BRKMSG: EQU RAM-0AH (DFFA) 0104 SPEED: EQU RAM-05H (DFFB) 0105 InpBuf EQU RAM-04H (DFFD) 0106 IOBYT: EQU RAM-02H 0107 ; 0108 ;LINKAGES TO MAIN PROGRAM 0109 ; (E002) 0110 INIT1: EQU PRGORG+002H 0111 ; 0000' 0112 ORG PRGORG+1C00H 0113 ; 0114 ;BASIC IN OUT ROUTINES CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0003 0115 ; FC00 181A 0116 OUTLIN: JR OTLINE ;OUTPUT FROM LIST FC02 1824 0117 OUTPUT: JR OTPUT ;MAIN OUTPUT FC04 C379FD 0118 INPUT: JP IPUT ;JUP INPUT FC07 C39AFD 0119 STATUS: JP STATU ;JUMP TO STATUS FC0A C346FE 0120 LSTAT: JP LSTAT0 ;LIST STATUS FC0D C3AAFE 0121 IOINI JP Io.Init ;Clear the screen 0122 ; 0123 ;OUTPUTING SWITCHING ROUTINES 0124 ; FC10 ED73F0DF 0125 OUTVDM LD (SAVESP),SP;SAVE FOREIGN STACK FC14 31F0DF 0126 LD SP,STACK2 FC17 E5 0127 PUSH HL FC18 2E00 0128 LD L,0 ;SET FOR VDM FC1A 1817 0129 JR OUTPT2 0130 ; FC1C ED73F0DF 0131 OTLINE: LD (SAVESP),SP FC20 31F0DF 0132 LD SP,STACK2 FC23 E5 0133 PUSH HL FC24 2E05 0134 LD L,5 FC26 180B 0135 JR OUTPT2 0136 ; FC28 ED73F0DF 0137 OTPUT: LD (SAVESP),SP;SAVE STACK FC2C 31F0DF 0138 LD SP,STACK2 FC2F E5 0139 PUSH HL FC30 2AFDDF 0140 LD HL,(IOBYT);GET OUT BYTE IN HL 0141 ; FC33 C5 0142 OUTPT2: PUSH BC FC34 47 0143 LD B,A ;GET CHAR IN B REG FC35 D5 0144 PUSH DE FC36 F5 0145 PUSH AF FC37 CB45 0146 BIT 0,L ;TEST FOR VDM FC39 E5 0147 PUSH HL ;SAVE FROM VDM TIMER FC3A CC41FD 0148 CALL Z,VID FC3D E1 0149 POP HL ;RETRIEVE IOBYT FC3E CB55 0150 BIT 2,L ;TEST FOR LIST FC40 C489FE 0151 CALL NZ,LIST 0152 ; 0153 ;Console end of line timer 0154 ; FC43 3AFADF 0155 LD A,(SPEED) ;Get the speed facto FC46 B7 0156 OR A ;Test for a zero FC47 2812 0157 JR Z,L.End ;No delay 0158 ; 0159 ;End of a line timer 0160 ; FC49 47 0161 LD B,A ;Save constant just 0162 ;in case of a Line feed FC4A F1 0163 POP AF ;Get outputed character FC4B F5 0164 PUSH AF ;Save it again FC4C FE0A 0165 CP 0AH ;Test for a line feed FC4E 200B 0166 JR NZ,L.End ;No Delay 0167 ; 0168 ;Delay routine 0169 ; FC50 11FFFF 0170 LD DE,0FFFFH ;Delay constant #1 0171 ; CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0004 FC53 21FF20 0172 Loop.1 LD HL,20FFH ;Delay constant #2 0173 ; FC56 19 0174 Loop.2 ADD HL,DE FC57 38FD 0175 JR C,Loop.2 0176 ; FC59 10F8 0177 DJNZ Loop.1 ;Loop till B=0 0178 ; FC5B F1 0179 L.END POP AF FC5C D1 0180 POP DE FC5D C1 0181 POP BC 0182 ; FC5E E1 0183 OUTPT3 POP HL FC5F ED7BF0DF 0184 LD SP,(SAVESP);GET COLLERS STACK FC63 C9 0185 RET 0186 ; 0187 ;Force upper case letters to lower case letters 0188 ; FC64 FE61 0189 FORCE CP 61H ;Less than [ a ] FC66 D8 0190 RET C ;Yes FC67 FE7B 0191 CP 7BH ;Greater than [ z ] FC69 D0 0192 RET NC ;Yes FC6A D620 0193 SUB 20H ;Convert to Upper case FC6C C9 0194 RET 0195 ; 0196 ;MASTER SWITCHING 0197 ; FC6D CD74FC 0198 MSTSWC: CALL SET FC70 3E00 0199 LD A,00H ;Destroy switching Accum. FC72 B7 0200 OR A ;Set the zero flag FC73 C9 0201 RET ;No data 0202 ; FC74 CD1DFE 0203 SET CALL Ins ;Get the data ? FC77 28FB 0204 JR Z,SET ;No data yeat FC79 78 0205 LD A,B ;Move data to the Accum. FC7A 21FDDF 0206 LD HL,IOBYT ;Point to In-Out byte FC7D CD64FC 0207 CALL FORCE ;Change Uppers to lowers FC80 FE0E 0208 CP 0EH ;Test for a screen clear FC82 CA41FD 0209 JP Z,VID ;CLEAR SCREEN FC85 FE1B 0210 CP 1BH ;? ESCAPE FC87 CA02E0 0211 JP Z,INIT1 FC8A FE41 0212 CP 'A' FC8C 2855 0213 JR Z,CTRL.A ;Reset In/Out byte FC8E FE42 0214 CP 'B' FC90 2854 0215 JR Z,CTRL.B ;Setup list # 2 FC92 FE43 0216 CP 'C' FC94 2853 0217 JR Z,CTRL.C ;Setup List # 1 FC96 FE44 0218 CP 'D' FC98 2852 0219 JR Z,CTRL.D ;Transfer contro to 0220 ;List # 1 FC9A FE45 0221 CP 'E' FC9C 2857 0222 JR Z,CTRL.E ;Turn on the Skew FC9E FE46 0223 CP 'F' FCA0 2856 0224 JR Z,CTRL.F ;Turn off the Skew FCA2 FE47 0225 CP 'G' FCA4 2855 0226 JR Z,CTRL.G ;TURN OFF PAGE MODE FCA6 FE48 0227 CP 'H' FCA8 2854 0228 JR Z,CTRL.H ;TURN ONE PAGE MODE CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0005 FCAA FE50 0229 CP 'P' FCAC 2853 0230 JR Z,CTRL.P ;Turn on the list FCAE FE51 0231 CP 'Q' ;RESET PAGE LINE 0232 ;COUNTER? FCB0 CA36FD 0233 JP Z,Page FCB3 FE56 0234 CP 'V' FCB5 284D 0235 JR Z,CTRL.V ;Turn the terminal on FCB7 FE58 0236 CP 'X' FCB9 2850 0237 JR Z,CTRL.X ;Force uppers to lowers FCBB FE55 0238 CP 'U' FCBD 284F 0239 JR Z,CTRL.U ;No force of uppers 0240 ;to lower case letters 0241 ; FCBF FE4D 0242 CP 'M' ;Check for two form feeds FCC1 284E 0243 JR Z,CTRL.M FCC3 FE4C 0244 CP 'L' ;Check for a form feed FCC5 284F 0245 JR Z,CTRL.L FCC7 FE52 0246 CP 'R' ;Check for compressed print 0247 ;off FCC9 2850 0248 JR Z,CTRL.R FCCB FE53 0249 CP 'S' ;Test to turn on compressed 0250 ;Print FCCD 2851 0251 JR Z,CTRL.S FCCF FE59 0252 CP 'Y' ;Test to disable paper 0253 ;Detect FCD1 285A 0254 JR Z,CTRL.Y FCD3 FE5A 0255 CP 'Z' ;Test to enable paper 0256 ;Detect FCD5 284D 0257 JR Z,CTRL.Z 0258 ; 0259 ;Numbers 1-9 change speed of the display rate 0260 ;of the Terminal. 0261 ; FCD7 FE31 0262 CP 31H ;Test if too small FCD9 D8 0263 RET C ;Was too small FCDA FE3A 0264 CP 3AH ;Test if too large FCDC D0 0265 RET NC ;Was too large FCDD D631 0266 SUB 31H ;Convert to delay factors FCDF 32FADF 0267 LD (SPEED),A ;STORE FCE2 C9 0268 RET 0269 ; 0270 ;Reset In/Out byte to initial value. The terminal 0271 ;is used to display the data and its key board 0272 ;is used to get the inputs 0273 ; FCE3 3600 0274 CTRL.A LD (HL),0 FCE5 C9 0275 RET 0276 ; 0277 ;List # 2 is active when there is a list command 0278 ; FCE6 CBDE 0279 CTRL.B SET 3,(HL) ;Setup for List # 2 FCE8 C9 0280 RET 0281 ; 0282 ;List # 1 is active when there is a list command 0283 ; FCE9 CB9E 0284 CTRL.C RES 3,(HL) ;List #1 active on List FCEB C9 0285 RET CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0006 0286 ; 0287 ;Transfers control of the computer to list # 2. 0288 ;The terminal and it's key board are not active 0289 ; FCEC CBC6 0290 CTRL.D SET 0,(HL) ;Turn monitor video off FCEE CBCE 0291 SET 1,(HL) ;Switch key board inputs 0292 ;to List # 2 FCF0 CBDE 0293 SET 3,(HL) ;List # 2 active on 0294 ;a list command FCF2 CBD6 0295 SET 2,(HL) ;Turn on the list device FCF4 C9 0296 RET 0297 ; 0298 ;Disks are read or written in Skewed mode 0299 ; FCF5 CBBE 0300 CTRL.E RES 7,(HL) ;Skew is on FCF7 C9 0301 RET 0302 ; 0303 ;Disks are read or written in unskewed mode 0304 ; FCF8 CBFE 0305 CTRL.F SET 7,(HL) ;Setup for Unskew FCFA C9 0306 RET 0307 ; 0308 ;Turn off 16 line page mode 0309 ; FCFB CBEE 0310 CTRL.G SET 5,(HL) FCFD C9 0311 RET 0312 ; 0313 ;Turn on 16 line page mode FCFE CBAE 0314 CTRL.H RES 5,(HL) FD00 C9 0315 RET 0316 ; 0317 ;Turn current assigned list device on with 0318 ;terminal display active 0319 ; FD01 CBD6 0320 CTRL.P SET 2,(HL) ;Turn list device on FD03 C9 0321 RET 0322 ; 0323 ;Turn list off and display from the terminal 0324 ; FD04 CB86 0325 CTRL.V RES 0,(HL) ;Display from the 0326 ;Terminal FD06 CB8E 0327 RES 1,(HL) ;Trun terminal key board 0328 ;on FD08 CB96 0329 RES 2,(HL) ;Turn off the selected 0330 ;device FD0A C9 0331 RET 0332 ; 0333 ;Convert upper case letters to lower case letters 0334 ; FD0B CBF6 0335 CTRL.X SET 6,(HL) ;Force Upper to Lower FD0D C9 0336 RET 0337 ; 0338 ;Turn off the forcing of Upper case letters 0339 ;to Lower case letters 0340 ; FD0E CBB6 0341 CTRL.U RES 6,(HL) ;Turn off force FD10 C9 0342 RET CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0007 0343 ; FD11 060C 0344 CTRL.M LD B,0CH ;Token for a form feed FD13 CD5FFE 0345 CALL List.1 ;Output a form feed FD16 060C 0346 CTRL.L LD B,0CH ;Token for a from feed FD18 C35FFE 0347 JP List.1 ;Output the form feed 0348 ; FD1B 0612 0349 CTRL.R LD B,18 ;Token to turn off the 0350 ;compressed print FD1D C366FE 0351 Ctrl.$ JP List.2 ;Do it 0352 ; FD20 060F 0353 CTRL.S LD B,15 ;Token to turn the 0354 ;Compressed print FD22 18F9 0355 JR Ctrl.$ ;Do it 0356 ; FD24 061B 0357 CTRL.Z LD B,1BH ;Escape Char. FD26 CD66FE 0358 CALL List.2 FD29 0639 0359 LD B,'9' ;Token to turn paper 0360 ;detect on FD2B 18F0 0361 JR Ctrl.$ 0362 ; FD2D 061B 0363 CTRL.Y LD B,1BH ;Escape char FD2F CD66FE 0364 CALL List.2 FD32 0638 0365 LD B,'8' ;Token to turn off paper 0366 ;detect FD34 18E7 0367 JR Ctrl.$ 0368 ; 0369 ;Setup paganation 0370 ; FD36 21380A 0371 Page LD HL,0A38H ;56 lines per page FD39 22F2DF 0372 LD (PGBUF),HL ;Store the value FD3C 7D 0373 LD A,L ;Move lines per page FD3D 32F4DF 0374 LD (PGBUF+2),A ;Store the value FD40 C9 0375 RET 0376 ; 0377 ; 0378 ;VIDEO DISPLAY DRIVER 0379 ; FD41 78 0380 VID LD A,B FD42 FE0E 0381 CP 0EH ;Check for CTRL n FD44 2814 0382 JR Z,CLEAR ;Clear the screen FD46 FE7F 0383 CP 07FH ;Test for delete FD48 281D 0384 JR Z,BACKUP FD4A FE08 0385 CP 08H ;Test for backspace FD4C 2819 0386 JR Z,BACKUP 0387 ; FD4E DB50 0388 V.OUT IN A,Sc.Stat ;Get stats FD50 E680 0389 AND SC.AND ;Strip unwanted bits FD52 FE80 0390 CP SC.Out ;Test if Ready FD54 20F8 0391 JR NZ,V.Out ;Wait till ready 0392 ; FD56 78 0393 LD A,B ;Get outputed Char. FD57 D351 0394 OUT C.Out,A ;Output the char. FD59 C9 0395 RET 0396 ; FD5A C5 0397 CLEAR PUSH BC FD5B 061B 0398 LD B,1BH FD5D CD4EFD 0399 CALL V.OUT CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0008 FD60 062A 0400 LD B,2AH FD62 CD4EFD 0401 CALL V.OUT FD65 C1 0402 POP BC FD66 C9 0403 RET 0404 ; FD67 C5 0405 BACKUP PUSH BC FD68 0608 0406 LD B,08H FD6A CD4EFD 0407 CALL V.OUT FD6D 0620 0408 LD B,20H FD6F CD4EFD 0409 CALL V.OUT FD72 0608 0410 LD B,08H FD74 CD4EFD 0411 CALL V.OUT FD77 C1 0412 POP BC FD78 C9 0413 RET 0414 ; 0415 ;Main input routine. Inputs from buffer or from the 0416 ;the keyboard 0417 ; FD79 ED73F0DF 0418 IPUT LD (SAVESP),SP ;Save callers stack 0419 ;pointer FD7D 31F0DF 0420 LD SP,STACK2 ;Get a new stack FD80 E5 0421 PUSH HL FD81 D5 0422 PUSH DE FD82 C5 0423 PUSH BC 0424 ; FD83 3AFBDF 0425 Iput.2 LD A,(InpBuf) ;Get byte in buffer FD86 B7 0426 OR A ;Test for data FD87 2008 0427 JR NZ,Iput.3 ;There was data FD89 CDB9FD 0428 CALL Input4 ;Get the byte FD8C 28F5 0429 JR Z,Iput.2 ;No Data yet FD8E 3AFBDF 0430 LD A,(InpBuf) ;Move the input byte to 0431 ;The accumulator 0432 ; FD91 E67F 0433 Iput.3 AND 7FH ;Strip of the 7 Bit FD93 21FBDF 0434 LD HL,InpBuf ;Point to the buffer FD96 3600 0435 LD (HL),0 ;Zero the buffer FD98 1817 0436 JR Input3 ;Retreive callers stack 0437 ;and return to caller 0438 ; 0439 ;Main status and inputting routines 0440 ; FD9A ED73F0DF 0441 STATU LD (SAVESP),SP ;Save callers stack 0442 ;pointer FD9E 31F0DF 0443 LD SP,STACK2 ;Get a new stack FDA1 E5 0444 PUSH HL FDA2 D5 0445 PUSH DE FDA3 C5 0446 PUSH BC FDA4 3AFBDF 0447 LD A,(InpBuf) ;Get Buffer in Accum. FDA7 B7 0448 OR A ;Test if empty FDA8 2804 0449 JR Z,Input2 ;Check for data FDAA 3EFF 0450 LD A,0FFH ;Flag data exists FDAC 1803 0451 Jr Input3 ;Exit the routine 0452 ; FDAE CDB9FD 0453 Input2 CALL Input4 ;Get the info 0454 ; FDB1 C1 0455 Input3 POP BC FDB2 D1 0456 POP DE CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0009 FDB3 E1 0457 POP HL FDB4 ED7BF0DF 0458 LD SP,(SAVESP) ;Get callers stack 0459 ;pointer FDB8 C9 0460 RET ;Return to caller 0461 ; FDB9 CD1DFE 0462 Input4 CALL Ins ;Get Byte and flags FDBC C8 0463 RET Z ;Know keypress 0464 ; FDBD 78 0465 LD A,B ;Move the byte to Accum. FDBE CB7F 0466 BIT 7,A ;Test if 7 bit high FDC0 2842 0467 JR Z,INPUT5 ;Not a 80H input 0468 ; 0469 IF IMSAI 0470 ; FDC2 FE88 0471 CP 88H ;TEST FOR KEY F1 FDC4 2002 0472 JR NZ,X1 ;NOT F1 FDC6 3E1A 0473 LD A,1AH ;MAKE CTRL Z 0474 ; FDC8 FEA8 0475 X1 CP 0A8H ;TEST FOR KEK F2 FDCA 2002 0476 JR NZ,X2 ;NOT F1 FDCC 3E01 0477 LD A,01h ;Make ^A 0478 ; FDCE FE8A 0479 X2 CP 8AH ;TEST FOR KEY F3 FDD0 2002 0480 JR NZ,X3 ;NOT F3 FDD2 3E13 0481 LD A,13H ;Make ^S 0482 ; FDD4 FEAA 0483 X3 CP 0AAH ;TEST FOR KEY F4 FDD6 2002 0484 JR NZ,X4 ;NOT F4 FDD8 3E04 0485 LD A,04H ;MAKE ^D 0486 ; FDDA FE8C 0487 X4 CP 8CH ;TEST FOR KEY F5 FDDC 2002 0488 JR NZ,X5 ;NOT F5 FDDE 3E06 0489 LD A,06H ;MAKE CTRL F 0490 ; FDE0 FEAC 0491 X5 CP 0ACH ;TEST FOR KEY F6 FDE2 2002 0492 JR NZ,X6 ;NOT F6 FDE4 3E02 0493 LD A,02H ;Make ^B 0494 ; FDE6 FE8E 0495 X6 CP 8EH ;TEST FOR KEY F7 FDE8 2002 0496 JR NZ,X7 ;NOT F7 FDEA 3E14 0497 LD A,14H ;Make ^T 0498 ; FDEC FEAE 0499 X7 CP 0AEH ;TEST FOR KEY 8 FDEE 2002 0500 JR NZ,X8 FDF0 3E07 0501 LD A,07H ;Make ^G 0502 ; FDF2 FE98 0503 X8 CP 98H ;TEST FOR KEY ^ FDF4 2002 0504 JR NZ,X9 ;NOT ^ FDF6 3E05 0505 LD A,05H ;Make ^E 0506 ; FDF8 FE94 0507 X9 CP 94H ;TEST FOR HOME KEY FDFA 2808 0508 JR Z,INPUT5 ;Was the home key 0509 ; FDFC FE9C 0510 X10 CP 9CH ;TEST FOR DOWN ARROW FDFE 2002 0511 JR NZ,X11 ;NOT DOWN ARROW FE00 3E18 0512 LD A,18H ;Make ^X 0513 ; CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0010 0514 ENDIF ;End of IMSAI 0515 ; FE02 E67F 0516 X11 AND 7FH ;STRIP OFF PARITY BIT 0517 ; FE04 FE94 0518 INPUT5 CP SW.Byte ;Check if switching mode FE06 CA6DFC 0519 JP Z,MSTSWC ;Go to master switching FE09 21FDDF 0520 LD HL,IOBYT ;Point to info on force FE0C CB6E 0521 BIT 5,(HL) ;Test if force is required FE0E C464FC 0522 CALL NZ,FORCE ;Make lower case FE11 B7 0523 OR A ;Test for a Null or ^@ FE12 2002 0524 JR NZ,INPUT6 ;Was not zero FE14 E680 0525 AND 80H ;Make a testable 0526 ; FE16 32FBDF 0527 INPUT6 LD (InpBuf),A ;Store the input FE19 3EFF 0528 LD A,0FFH ;Flag with data FE1B B7 0529 OR A ;Clear the flags FE1C C9 0530 RET 0531 ; 0532 ;Main keyboard input routine 0533 ; FE1D 3AFDDF 0534 Ins LD A,(IOBYT) FE20 CB4F 0535 BIT 1,A ;Which keyboard FE22 200A 0536 JR NZ,Ins.2 ;Was Keyboard 2 0537 ; 0538 ;Keyboard number 1 0539 ; FE24 1608 0540 LD D,I.And1 ;Bit Mask FE26 1E08 0541 LD E,I.Cp.1 ;Value when ready FE28 2601 0542 LD H,I.In.1 ;Keyboard port number FE2A 2E03 0543 LD L,I.Sin1 ;Status port FE2C 1808 0544 JR Ins.3 0545 ; 0546 ;Keyboard number 2 0547 ; FE2E 1608 0548 Ins.2 LD D,I.And2 ;Bit Mask FE30 1E08 0549 LD E,I.Cp.2 ;Value when ready FE32 2601 0550 LD H,I.In.2 ;Keyboard port number FE34 2E03 0551 LD L,I.Sin2 ;Status port 0552 ; FE36 4D 0553 Ins.3 LD C,L ;Status port to C. Reg FE37 ED78 0554 IN A,(C) ;Input status port FE39 A2 0555 AND D ;Strip unwanted bits FE3A BB 0556 CP E ;Test if ready FE3B 2007 0557 JR NZ,Ins.4 ;Not ready 0558 ; FE3D 4C 0559 LD C,H ;Input port number to 0560 ;C Reg. FE3E ED40 0561 IN B,(C) ;Get the byte FE40 3EFF 0562 LD A,0FFH ;Flag as data FE42 B7 0563 OR A ;Set to Not Zero FE43 C9 0564 Ret 0565 ; FE44 AF 0566 Ins.4 XOR A ;Set the zero flag FE45 C9 0567 RET 0568 ; 0569 ;Lisst status routin for brake trace program 0570 ; CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0011 FE46 3AFDDF 0571 LSTAT0 LD A,(IOBYT) ;Point to which list FE49 CB5F 0572 BIT 3,A ;Test FE4B 2009 0573 JR NZ,LStat2 ;The second printer 0574 ; FE4D DB03 0575 LStat1 IN A,Sport1 ;Get port info FE4F E6C0 0576 AND Omask1 ;Strip unwanted bits off FE51 FE80 0577 CP Cmask1 ;Test if ready FE53 20F8 0578 JR NZ,LStat1 ;Wait FE55 C9 0579 RET 0580 ; FE56 DB03 0581 LStat2 IN A,Sport2 ;Get port info FE58 E6C0 0582 AND Omask2 ;Strip unwanted bits FE5A FE80 0583 CP Cmask2 ;Test if ready FE5C 20F8 0584 JR NZ,LStat2 ;Wait till ready FE5E C9 0585 RET 0586 ; 0587 ;Main list device routines 0588 ; FE5F 3AFDDF 0589 List.1 LD A,(IOBYT) ;Get the In/Out byte 0590 ; FE62 CB5F 0591 List.5 BIT 3,A ;Which list device FE64 200D 0592 JR NZ,List.3 ;Was list device # 2 0593 ; FE66 000000 0594 List.2 DB 0,0,0 ;Space for a call to the 0595 ;routine which checks for 0596 ;paper out and printer of 0597 ;line FE69 16C0 0598 LD D,Omask1 ;The output stand AND byte FE6B 1E80 0599 LD E,Cmask1 ;The value hex value of 0600 ;the printer being ready. FE6D 2600 0601 LD H,Out.1 ;The data out port number FE6F 2E03 0602 LD L,Sport1 ;The status port number FE71 180B 0603 JR List.4 0604 ; 0605 ;Port numbers and masks for list device # 2 0606 ; FE73 000000 0607 List.3 DB 0,0,0 ;Routines testing if on 0608 ;line and if there is paper FE76 16C0 0609 LD D,Omask2 FE78 1E80 0610 LD E,Cmask2 FE7A 2600 0611 LD H,Out.2 FE7C 2E03 0612 LD L,Sport2 0613 ; FE7E 4D 0614 List.4 LD C,L ;Status port to C Reg. FE7F ED78 0615 IN A,(C) ;Get the status FE81 A2 0616 AND D ;Mask unwanted bits FE82 BB 0617 CP E ;Test if ready FE83 20F9 0618 JR NZ,List.4 ;Not ready 0619 ; FE85 4C 0620 LD C,H ;Output port to C Reg FE86 ED41 0621 OUT (C),B ;Output the char. FE88 C9 0622 RET 0623 ; 0624 ;LIST ROUTINES 0625 ; FE89 CD5FFE 0626 LIST CALL List.1 ;CALL LIST STATUS 0627 ;Output the byte CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0012 FE8C 78 0628 LD A,B ;Get the outputed char. FE8D FE0A 0629 CP 0AH ;LF FE8F C0 0630 RET NZ 0631 ; 0632 ;PAGINATION ROUTINE 0633 ; FE90 21F2DF 0634 LD HL,PGBUF ;LOOK AT BUF. FE93 35 0635 DEC (HL) FE94 C0 0636 RET NZ FE95 23 0637 INC HL ;Point to spaces between 0638 ;pages FE96 7E 0639 LD A,(HL) ;Get spaces between pages FE97 B7 0640 OR A ;Test if any FE98 C8 0641 RET Z ;None to be skiped 0642 ; 0643 ;Send a form feed and rest the line counter 0644 ; FE99 060C 0645 LD B,0CH ;ASCII form feed FE9B CD5FFE 0646 Call List.1 ;Output the form feed 0647 ; FE9E 3AF4DF 0648 PGSET LD A,(PGBUF+2) ;INITAL COUNT FEA1 32F2DF 0649 LD (PGBUF),A ;RESET COUNTER FEA4 3E01 0650 LD A,1 FEA6 32F5DF 0651 LD (BRKMSG),A ;CONT BKTRAC MSG FEA9 C9 0652 RET 0653 ; 0654 Io.Init 0655 ; 0656 IF INTER 0657 ; 0658 ;Initilize the Tu-Art in/out board. 0659 ; 0660 XOR A 0661 OUT 23H,A 0662 OUT 53H,A 0663 INC A 0664 OUT 52H,A 0665 OUT 22H,A 0666 LD A,08H 0667 OUT 20H,A 0668 LD A,20H ;Set Baud for 4800 BPS 0669 OUT 50H,A 0670 ; 0671 ENDIF 0672 ; 0673 IF TV.950 0674 ; 0675 LD B,1BH ;Start escape sequence 0676 CALL VID 0677 LD B,'C' ;Conversation mode 0678 CALL VID ;Do it 0679 LD B,1BH 0680 CALL VID 0681 LD B,'d' ;Non inverted screen 0682 CALL VID 0683 ; 0684 ENDIF CROMEMCO CDOS Z80 ASSEMBLER version 02.15 PAGE 0013 0685 ; 0686 IF MX.100 ;MX 100 printer 0687 ; 0688 LD B,1BH ;Start escape sequence 0689 CALL List.2 ;Output the escape 0690 LD B,'O' ;Skip over preferations 0691 CALL List.2 0692 LD B,1BH 0693 CALL List.2 0694 LD B,'8' ;Enable data transfer when 0695 ;out of paper 0696 CALL List.2 ;Do it 0697 ; 0698 ENDIF 0699 ; FEAA AF 0700 XOR A ;Get a zero FEAB 32FBDF 0701 LD (InpBuf),A ;Set for no input FEAE C35AFD 0702 JP CLEAR 0703 ; FEB1 (0000) 0704 END Errors 0