PL/M-80 COMPILER 6/11/79 PAGE 1 ISIS-II PL/M-80 V3.1 COMPILATION OF MODULE DIRECT OBJECT MODULE PLACED IN :F1:DIRECT.OBJ COMPILER INVOKED BY: PLM80 :F1:DIRECT.SRC DEBUG DATE(6/11/79) 1 DIRECT: DO; $INCLUDE (:F1:COMMON.LIT) 2 1 = DECLARE LIT LITERALLY 'LITERALLY'; 3 1 = DECLARE DECL LIT 'DECLARE'; 4 1 = DECL TRUE LIT '0FFH', = FALSE LIT '00H', = BOOLEAN LIT 'BYTE', = FOREVER LIT 'WHILE 1'; = = = /* SPECIAL ASCII CHARACTERS */ = 5 1 = DECL = NULL LIT '00H', = CNTRL$C LIT '03H', = CNTRL$E LIT '05H', = BELL LIT '07H', = BS LIT '08H', = TAB LIT '09H', = LF LIT '0AH', = VT LIT '0BH', = FF LIT '0CH', = CR LIT '0DH', = CNTRL$P LIT '010H', = CNTRL$Q LIT '011H', = CNTRL$R LIT '012H', = CNTRL$S LIT '013H', = CNTRL$W LIT '017H', = CNTRL$X LIT '018H', = CNTRL$Z LIT '01AH', = ESC LIT '01BH', = SPACE LIT '020H', = EXCLM$PT LIT '021H', = QUOTE LIT '022H', = HASH LIT '023H', = PRCNT LIT '025H', = AMPRSAND LIT '026H', = DASH LIT '02DH', = LS$THAN LIT '03CH', = GR$THAN LIT '03EH', = QMARK LIT '03FH', = LFT$BRK LIT '05BH', = RT$BRK LIT '05DH', = UP$ARW LIT '05EH', = LCA LIT '061H', = LCZ LIT '07AH', = ALT$MOD LIT '07DH', = RUBOUT LIT '07FH'; = PL/M-80 COMPILER 6/11/79 PAGE 2 $EJECT $INCLUDE (:F1:DEFIO) 6 1 = DECL KBD$STAT LIT '0C1H'; 7 1 = DECL KBD$DATA LIT '0C0H'; 8 1 = DECL KBD$RDY LIT '01H'; 9 1 = DECL SIO$STAT LIT '0F7H'; 10 1 = DECL SIO$DATA LIT '0F6H'; 11 1 = DECL SIO$RXRDY LIT '02H'; 12 1 = DECL SIO$TXRDY LIT '01H'; 13 1 = DECL CRTC LIT '10H';/*CRT OUTPUT DATA COMMAND*/ 14 1 = DECL CRTS LIT '11H';/*CRT DEVICE STATUS COMMAND*/ 15 1 = DECL KEYC LIT '12H';/*KEYBOARD INPUT DATA COMMAND*/ 16 1 = DECL KSTS LIT '13H';/*KEYBOARD DEVICE STATUS COMMAND*/ 17 1 = DECL OBF LIT '01H'; 18 1 = DECL IBF LIT '02H'; 19 1 = DECL FO LIT '04H'; 20 1 = DECL CPUC LIT '0FFH'; 21 1 = DECL DISABL LIT '0DH'; 22 1 = DECL ENABL LIT '05H'; 23 1 = DECL IOCC LIT '0C1H'; 24 1 = DECL IOCS LIT '0C1H'; 25 1 = DECL IOCO LIT '0C0H'; 26 1 = DECL IOCI LIT '0C0H'; PL/M-80 COMPILER 6/11/79 PAGE 3 $EJECT 27 1 DECL CHAR BYTE; 28 1 DECL CHR BYTE; 29 1 DECL CRFLG BYTE; 30 1 DECL MAXCNT LIT'LENGTH(TCHAR)'; 31 1 DECL TCNTIN BYTE; 32 1 DECL TCNTOUT BYTE; 33 1 DECL TCHAR(256) BYTE; 34 1 CO: PROCEDURE (ODB) EXTERNAL; 35 2 DECL ODB BYTE; 36 2 END CO; 37 1 IOCCOM: PROCEDURE (COMMAND) BYTE PUBLIC; 38 2 DECL COMMAND BYTE; 39 2 DECL STIN BYTE; 40 2 OUTPUT (CPUC) = DISABL; 41 2 DO WHILE ((INPUT (IOCS) ) AND (OBF OR IBF OR FO)) <> 0; 42 3 END; 43 2 OUTPUT (IOCS) = COMMAND; 44 2 DO WHILE (INPUT (IOCS) AND (OBF OR IBF OR FO)) <> OBF; 45 3 END; 46 2 STIN = INPUT (IOCI); 47 2 OUTPUT (CPUC) = ENABL; 48 2 RETURN (STIN); 49 2 END IOCCOM; 50 1 SCHAR: PROCEDURE (CHAR) EXTERNAL; 51 2 DECL CHAR BYTE; 52 2 END; 53 1 GETCHR: PROCEDURE; 54 2 TCNTIN = TCNTIN + 1; 55 2 TCHAR(TCNTIN) = CHR; 56 2 IF CHR = CR THEN 57 2 DO; 58 3 CRFLG = TRUE; 59 3 TCNTIN = TCNTIN + 1; 60 3 TCHAR(TCNTIN) = LF; 61 3 END; ELSE 62 2 CRFLG = FALSE; 63 2 END GETCHR; 64 1 ISCAN: PROCEDURE BYTE PUBLIC; 65 2 DO FOREVER; PL/M-80 COMPILER 6/11/79 PAGE 4 66 3 IF (INPUT(SIO$STAT) AND SIO$RXRDY) > 0 THEN 67 3 DO; 68 4 CHR = (INPUT(SIO$DATA) AND 07FH); 69 4 IF ((CHR > 0) AND ((CRFLG = FALSE) OR ((CRFLG = TRUE) AND (CHR <> LF)))) THEN 70 4 CALL GETCHR; 71 4 IF ((CRFLG = TRUE) AND (CHR = LF)) THEN CRFLG = FALSE; 73 4 END; 74 3 IF (TCNTIN - TCNTOUT) <> 0 THEN 75 3 DO; 76 4 IF (INPUT(IOCS) AND (FO OR IBF OR OBF)) = 0 THEN 77 4 DO; 78 5 TCNTOUT = TCNTOUT + 1; 79 5 CALL CO(TCHAR(TCNTOUT)); 80 5 END; 81 4 END; 82 3 IF (INPUT(IOCS) AND (FO OR IBF OR OBF)) = 0 THEN 83 3 DO; 84 4 IF((IOCCOM(KSTS)) AND KBD$RDY) > 0 THEN 85 4 DO; 86 5 RETURN(IOCCOM(KEYC) AND 07FH); 87 5 END; 88 4 END; 89 3 END; 90 2 END; 91 1 DIRECT: PROCEDURE PUBLIC; 92 2 TCNTIN = 0; 93 2 TCNTOUT = 0; 94 2 CRFLG = FALSE; 95 2 DO FOREVER; 96 3 CHAR=ISCAN; 97 3 IF CHAR=PRCNT THEN 98 3 DO; 99 4 CALL CO (CHAR); 100 4 DO WHILE CHAR <> CR; 101 5 CHAR = ISCAN; 102 5 CALL SCHAR(CHAR); 103 5 END; 104 4 RETURN; 105 4 END; 106 3 CALL SCHAR (CHAR); 107 3 DO WHILE CHAR <> CR; 108 4 CHAR = ISCAN; 109 4 CALL SCHAR (CHAR) ; 110 4 END; 111 3 END; 112 2 END DIRECT; 113 1 BAUD: PROCEDURE (BDCODEADR) BYTE PUBLIC; 114 2 DECL BDCODEADR ADDRESS; 115 2 DECL (BDCODE BASED BDCODEADR) (122) BYTE; PL/M-80 COMPILER 6/11/79 PAGE 5 116 2 DECL I BYTE; 117 2 DECL J BYTE; 118 2 DECL K BYTE; 119 2 DECL BAUD$RATES(*) BYTE DATA ('110 ',3,'300 ',3, '1200 ',4,'2400 ',4, '4800 ',4,'9600 ',4); 120 2 DECL ENTRY$LNGTH LIT '8'; 121 2 DECL MAX$BAUD LIT '6'; 122 2 DECL USRT$FCTRS(*) BYTE DATA (0CEH,04EH,04EH,04EH,04EH,04EH,0); 123 2 DECL BAUD$FCTRS(*) ADDRESS DATA (698,256,64,32,16,08,0); 124 2 DECL USRT$CMND LIT '027H'; 125 2 DECL SIO$RSET LIT '040H'; 126 2 DECL CNTR$CMND LIT '076H'; 127 2 DECL CNTR$CTRL LIT '0F3H'; 128 2 DECL CNTR LIT '0F1H'; 129 2 I,J,K = 0; 130 2 DO WHILE ((K <= LENGTH(BAUD$RATES)) AND (J < BAUD$RATES(K + ENTRY$LNGTH-1))); 131 3 IF BDCODE(J) <> BAUD$RATES(K+J) THEN 132 3 DO; 133 4 K = K + ENTRY$LNGTH; 134 4 J = 0; 135 4 END; ELSE 136 3 DO; 137 4 J = J + 1; 138 4 END; 139 3 END; 140 2 K = SHR(K,3);/* ASSUMES ENTRY$LNGTH = 8 */ 141 2 IF K >= MAX$BAUD THEN RETURN(1); 143 2 OUTPUT(CNTR$CTRL) = CNTR$CMND; 144 2 OUTPUT(CNTR) = LOW(BAUD$FCTRS(K)); 145 2 OUTPUT(CNTR) = HIGH(BAUD$FCTRS(K)); 146 2 OUTPUT(SIO$STAT) = SIO$RSET; 147 2 CALL TIME(1); 148 2 OUTPUT(SIO$STAT) = USRT$FCTRS(K); 149 2 OUTPUT(SIO$STAT) = USRT$CMND; 150 2 RETURN(0); 151 2 END BAUD; 152 1 END; EOF; MODULE INFORMATION: CODE AREA SIZE = 0259H 601D VARIABLE AREA SIZE = 010CH 268D MAXIMUM STACK SIZE = 0008H 8D 239 LINES READ PL/M-80 COMPILER 6/11/79 PAGE 6 0 PROGRAM ERROR(S) END OF PL/M-80 COMPILATION