RDS KPF /S,LEDITD DATE 14 /10 /08 TIME 13H-12M-47S- LABEL = SCRATCH DATE = 06/10/08 PACK NBR = 002 THEO ASM LEDITD DATE 14 /10 /08 TIME 13H-13M-04S- LABEL = SCRATCH DATE = 06/10/08 PACK NBR = 002 THEO 2-PASS ASSEMBLER - NAT LAB - VERSION 7.3 01/04/80 PAGE 1 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-47S 0000 IDENT LEDIT VERSION D ASM 7.3 0001 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - OCT 2008 - V1D 0002 * ADAPTED TO RUN UNDER DOM (CR AND LP CHANNELS STILL TO DO) 0003 * 0004 * LEDIT WAS WRITTEN TO RUN WITH ONE OF THE STANDARD P800 MONITORS, WHICH 0005 * PROVIDED THE IO. THIS VERSION IS CHANGED IN SUCH A WAY THAT IT CAN RUN 0006 * A STAND ALONE PROGRAM, TO BE A TEST FOR THE P860 SIMULATOR AND ALL ITS 0007 * SUPPORTED PERIPHERALS. 0008 * 0009 * THE FOLLOWING PERIPHERALS ARE SUPPORTED: 0010 * - TTY (KEYBOARD/PRINTER) EDITOR CONTROL, RECORD INPUT/PRINT 0011 * - PTR (PAPER TAPE READER) RECORD INPUT 0012 * - CRD (CARD READER) RECORD INPUT 0013 * - PTP (PAPER TAPE PUNCH) RECORD OUTPUT 0014 * - LPT (LINE PRINTER) PRINTING 0015 * 0016 * TTY,PTR AND PTP ARE CONNECTED TO THE PROGRAMMED IO CHANNEL; THE CARD R 0017 * AND LINE PRINTER ARE CONNECTED TO A MULTIPLEX CHANNEL. 0018 * 0019 * THE SIMULATED CARD READER USES 16 BITS TO STORE CHARACTER CODES. FOR T 0020 * REAL CARD READER THE CHARACTERS ARE CODED IN 12 BIT HOLLERITH, WHICH C 0021 * ARE STORED IN THE LOWEST 12 BIT OF THE 2 BYTE CHARACTERS OF THE SIMULA 0022 * READER. THE UTILITY '2CDR.PL' CONVERTS A TEXT FILE TO CARD FILE FORMAT 0023 * (WITH A .CRD EXTENSION). THIS UTILITY EITHER CONVERTS ASCII CHARACTER 0024 * TO 2 BYTE 12-BIT HOLLERITH CHARACTER CODES OR TO 2 BYTE 8-BIT ASCII CO 0025 * SO FOR BOTH TYPES OF CONVERSION, THE SIMULATED CARD READER HAS TO HAND 0026 * 16 BIT FOR EACH CHARACTER; FOR THE 2ND TYPE HOWEVER THE CONVERSION IS 0027 * EASIER. BECAUSE THE SIMULATED CARDREADER IS CONNECTED VIA A MULTIPLEX 0028 * CHANNEL, ITS NEEDS WORD TRANSFER TO MOVE THE CHARACTERS FROM THE CARDR 0029 * CONTROL UNIT TO MEMORY. THIS PROGRAM USES THE 2ND TYPE OF CARD CHARACT 0030 * CODES, SO DOES NOT NEED THE HOLLERITH=>ASCII CONVERSION (THIS BECAUSE 0031 * THE MAIN GOAL OF THE CARD READER SUPPORT IN THIS PROGRAM IS TO TEST TH 0032 * MULTIPLEX WORD INPUT LOGIC). 0033 * 0034 ************************************************************************ 0035 * PHILIPS P800 16 BIT COMPUTER SOFTWARE. 0036 * THE PROGRAM IS CREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) 0037 ************************************************************************ 0038 * 0039 * USAGE 0040 * ===== 0041 * THE FOLLOWING COMMANDS ARE SUPPORTED BY MEANS OF THE TTY: 0042 * (WHEN # IS PRINTED ON THE TTY, A COMMAND IS EXPECTED; WHEN A . (DOT) I 0043 * PRINTED ON THE TTY, A RECORD NUMBER IS EXPECTED). 0044 * 1) R[A|P|C] 0045 * INPUT RECORDS, STARTING AT RECORD (LINE NUMBER), WHERE 'A' MEA 0046 * READING FROM THE TTY, 'P' READING FROM PTR AND 'C' READING FROM THE 0047 * PUNCHED CARD READER. READING STOPS WHEN THE 1ST TWO CHARACTERS OF A 0048 * RECORD CONTAIN THE CHARACTER COMBINATION :E (WHICH ARE THE 1ST TWO 0049 * CHARACTERS OF AN :EOS (END OF SEGMENT) OR :EOF (END OF FILE) SIGN. 0050 * TAB EXPANSION IS SUPPORTED FOR TTY AND PTR INPUT RECORDS (' ' IS TH 0051 * CHARACTER). MAXIMUM (EXPANDED) INPUT RECORD LENGTH IS 130 CHARACTER 0052 * 2) P[A|U|P| ] 0053 * OUTPUT RECORDS, STARTING WITH RECORD NUMBER AND ENDING WITH 0054 * RECORD NUMBER , WHERE 'A' MEANS THAT THE OUTPUT IS PRINTED ON 0055 * 'U' THAT OUTPUT IS PUNCHED ON THE PAPER TAPE PUNCHER, 'P' THAT OUTP 0056 * PRINTED ON THE LINE PRINTER, AND ' ' (SPACE) THAT OUTPUT IS ALSO PR PAGE 2 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-49S 0057 * ON THE LINE PRINTER BUT WITHOUT LINE NUMBERS. PUNCHED OUTPUT CAN BE 0058 * FOR INSTANCE BY THE ASSEMBLER. 0059 * 3) / 0060 * DELETE RECORD WITH RECORD NUMBER 0061 * 4) = 0062 * REPLACE RECORD WITH RECORD NUMBER 0063 * 5) < 0064 * INSERT RECORD BEFORE RECORD NUMBER 0065 * 5) ? 0066 * PRINT SINGLE RECORD WITH RECORD NUMBER ON CONSOLE (TTY) 0067 * 7) T[A|F|X|] 0068 * SET TABS: 'A' FOR RECORDS FORMATTED FOR THE ASSEMBLER, 'F' FOR RECO 0069 * FORMATTED FOR THE FORTRAN COMPILER, 'X' FOR SOME TEXT FORMAT. ANY O 0070 * CHARACTER REMOVES ANY TAB SETTING. 0071 * 8) # 0072 * PACKS THE TEXT BUFFER; WHEN RECORDS ARE DELETED, ALL RECORDS GET A 0073 * CONSECUTIVE RECORD NUMBER. 0074 * 9) $[Y|E] 0075 * THE $ CONFIRMED WITH A 'Y' DELETES ALL RECORDS FROM THE TEXT BUFFER 0076 * REINITIALIZES THE EDITOR TO RECEIVE NEW RECORDS. 0077 * THE $ CONFIRMED WITH A 'E' STOPS THE EDITOR. 0078 * 0079 * SOME COMMANDS CAN BE REPEATED BY TYPING A '.' (DOT) WHEN A NEXT COMMAN 0080 * EXPECTED. THE PREVIOUS COMMAND IS EXECUTED THEN, WHILE THE LINE NUMBER 0081 * INCREMENTED WITH 1. THESE COMMANDS ARE: /, =, <, ? (THE REPEAT COMMAND 0082 * ITSELF CAN ALSO BE REPEATED). 0083 * PAGE 3 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-50S 0084 EJECT 0085 0000 572E RF TEXT TO START ADDRESS 0086 * GENERATION DATA 0087 * MAXIMUM CORE = 16K WORDS!; MAXIMUM NUMBER OF RECORDS IS 1000 [0..999] 0088 7FFE HCOR EQU /7FFE 16K 0089 01F4 MAXL EQU 500 500 RECORDS DEFAULT [0..499] 0090 * 0091 0002 030A TX1TAB DATA /030A TEXT TAB'S: 10,20,50 0092 0004 1432 DATA /1432 0093 0006 0308 ASMTAB DATA /0308 ASSEMBLER TAB'S: 8,20,41 0094 0008 1429 DATA /1429 0095 000A 0107 FORTAB DATA /0107 FORTRAN TAB'S: 7 0096 0000 NOTAB EQU 0 NO TAB SETTING 0097 * DEFAULT TAB SETTING: EITHER NOTAB, ASMTAB, FORTAB, OTHER 0098 0006 DEFTAB EQU ASMTAB 0099 * 0100 7FFC TOPCOR EQU HCOR-2 0101 03E8 MAXL2 EQU MAXL+MAXL NUMBER OF RECORDS * 2 0102 7C14 LTABM EQU TOPCOR-MAXL2 0103 7C16 LTAB EQU LTABM+2 RECORD POINTER TABLE 0104 0009 CHAD EQU A9 CHARACTER ADDRESS 0105 000A RENU EQU A10 LINE NUMBER 0106 000B NULL EQU A11 0 0107 000C WA EQU A12 WRITE CHAR TO TTY 0108 000D RA EQU A13 READ CHAR FROM TTY 0109 000E LST EQU A14 LINKSTACK POINTER PAGE 4 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-51S 0110 EJECT 0111 * -- COMMAND TABLE 0112 0012 N EQU 18 NUMBER OF COMMANDS * 2 0113 FFEE NN EQU -N NUMBER OF COMMANDS * 2 NEGATIVE 0114 * 0115 000C 2420 CTAB DATA '$ ' KILL 0116 000E 5220 DATA 'R ' READ 0117 0010 5020 DATA 'P ' WRITE 0118 0012 2F20 DATA '/ ' DELETE 0119 0014 3D20 DATA '= ' REPLACE 0120 0016 3F20 DATA '? ' CONSOLE 0121 0018 5420 DATA 'T ' TABS 0122 001A 3C00 DATA /3C00 < INSERT 0123 001C 2320 DATA '# ' PACK 0124 * 0125 001E 007E R JTAB DATA KILL 0126 0020 0124 R DATA READ 0127 0022 01BA R DATA WRITE 0128 0024 00D4 R DATA DELETE 0129 0026 016C R DATA REPLAC 0130 0028 0206 R DATA CONS 0131 002A 018C R DATA TAB 0132 002C 00DE R DATA INSERT 0133 002E 00FA R DATA PACK PAGE 5 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-52S 0134 EJECT 0135 * -- INIT 0136 0030 20BF TEXT INH 0137 0032 BF20 MLK 14 0138 0034 RES 7 LINKSTACK 0139 0042 LSTK RES 1 0140 0044 0660 R DATA BCOR A9-CHAD (CHARACTER ADDRESS IN TEXT BUFFE 0141 0046 0000 DATA 0 A10-RENU (LINE NUMBER = POINTER INTO LIN 0142 0048 0000 DATA 0 A11-NULL 0143 004A 0258 R DATA WASR A12-WRITE CHARACTER TO TELETYPE 0144 004C 026A R DATA RASR A13-READ CHARACTER FROM TELETYPE 0145 004E 0042 R DATA LSTK A14-LINKSTACKPOINTER 0146 0050 5746 RF INIBUF INIT BUFFER 0147 * 0148 * -- COMMAND LOOP 0149 0052 F6A1 0288 R CI CF LST,NLCR 0150 0056 0600 LDK A6,0 0151 0058 8641 02C8 R ST A6,LPRFLG RESET LINEPRINTER FLAG 0152 005C 0623 LDK A6,'#' 0153 005E F693 CFR LST,WA WASR: SHOW PROMPT 0154 0060 F697 CFR LST,RA RASR => COMMAND INTO A6 0155 0062 EE21 2E20 CCK A6,'. ' REPEAT ? 0156 0066 5042 RF(0) REPEAT YES 0157 0068 8641 00B6 R ST A6,LAST SAVE COMMAND FOR REPEAT 0158 006C 8120 FFEE LDKL A1,NN COMMAND COUNTER 0159 0070 EE45 001E R NEXT CC A6,CTAB+N,A1 COMPARE COMMAND WITH TABLE 0160 0074 8844 0030 R ABI(0) JTAB+N,A1 JUMP OVER TABLE 0161 0078 1102 ADK A1,2 CHECK NEXT COMMAND 0162 007A 582A RB(0) CI NO VALID COMMAND FOUND 0163 007C 5F0E RB NEXT PAGE 6 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-54S 0164 EJECT 0165 * -- INITIALIZE MEMORY 0166 * 0167 007E 063F KILL LDK A6,'?' 0168 0080 F693 CFR LST,WA WASR 0169 0082 F697 CFR LST,RA RASR 0170 0084 EE21 5920 CCK A6,'Y ' 0171 0088 500E RF(0) INIBUF KILL ! 0172 008A EE21 4520 CCK A6,'E ' EXIT ? 0173 008E 5C3E RB(4) CI NO 0174 * EXIT 0175 0090 2840 ENB 0176 0092 2804 LKM EXIT TO MONITOR 0177 0094 0003 DATA 3 0178 0096 207F HLT 0179 * 0180 * -- KILL 0181 * -- INITIALIZE THE TEXT BUFFER 0182 0098 8120 0660 R INIBUF LDKL A1,BCOR BUFFER START 0183 009C 8184 LDR CHAD,A1 INIT CHAD 0184 009E 83A5 KL STR NULL,A1 STORE NULL 0185 00A0 1102 ADK A1,2 0186 00A2 E920 7FFC CWK A1,TOPCOR 0187 00A6 5D0A RB(5) KL 0188 00A8 5F58 RB CI PAGE 7 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-56S 0189 EJECT 0190 * -- REPEAT LAST COMMAND: VALID FOR CONSOLE PRINT, DELETE, INSERT AND RE 0191 * 0192 00AA 92A0 0002 REPEAT ADKL RENU,2 NEXT LINE 0193 00AE EAA0 03E8 CWK RENU,MAXL2 CHECK NEW RENU 0194 00B2 5E62 RB(6) CI 0195 00B4 8120 0000 LDKL A1,0 0196 00B6 LAST EQU *-2 LAST COMMAND 0197 00B8 E921 2F20 CCK A1,'/ ' DELETE ? 0198 00BC 501A RF(0) DELETE+4 0199 00BE E921 3C00 CCK A1,/3C00 INSERT ? 0200 00C2 501E RF(0) INSERT+4 0201 00C4 E921 3D20 CCK A1,'= ' REPLACE ? 0202 00C8 50A6 RF(0) REPLAC+4 0203 00CA E921 3F20 CCK A1,'? ' CONSOLE ? 0204 00CE 8820 020A R ABL(0) CONS+4 0205 00D2 5F82 RB CI PAGE 8 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-13M-57S 0206 EJECT 0207 * -- DELETE RECORD 0208 * 0209 00D4 F6A1 0468 R DELETE CF LST,LRENU READ LINENUMBER TO RENU (A10) 0210 00D8 83CB 7C16 ST NULL,LTAB,RENU CLEAR RECORD POINTER 0211 00DC 5F8C RB CI 0212 * 0213 * -- INSERT RECORD 0214 * 0215 00DE F6A1 0468 R INSERT CF LST,LRENU READ LINENUMBER TO RENU (A10) 0216 00E2 B9A0 MLK 3 0217 00E4 7FFC DATA TOPCOR 0218 00E6 7FFA DATA TOPCOR-2 0219 00E8 7C16 DATA LTAB 0220 00EA 930A ADR A3,RENU RECORD POINTER INTO RECORD TABLE 0221 00EC E90C IL CWR A1,A3 0222 00EE 5080 RF(0) REPLAC+4 INPUT RECORD 0223 00F0 8428 LDR* A4,A2 SHIFT RECORDS ABOVE NEW ONE 0224 00F2 8425 STR A4,A1 0225 00F4 1902 SUK A1,2 0226 00F6 1A02 SUK A2,2 0227 00F8 5F0E RB IL 0228 * 0229 * -- PACK 0230 * 0231 00FA 8120 7C16 PACK LDKL A1,LTAB TABLE POINTER 0232 00FE 8224 PL LDR* A2,A1 TABLE ENTRY ZERO? 0233 0100 500A RF(0) PC ZERO ENTRY FOUND; A1=POINTER 0234 0102 1102 PT ADK A1,2 0235 0104 E920 7FFC CWK A1,TOPCOR 0236 0108 5D0C RB(5) PL CHECK NEXT TABLE ENTRY 0237 010A 5FBA RB CI END OF TABLE 0238 * ZERO TABLE ENTRY; LOOK FOR A NON ZERO ONE 0239 010C 8304 PC LDR A3,A1 0240 010E 822C LDR* A2,A3 0241 0110 540A RF(4) PNZ NON ZERO ENTRY FOUND; A3=PONTER 0242 0112 1302 ADK A3,2 0243 0114 EB20 7FFC CWK A3,TOPCOR 0244 0118 5D0C RB(5) PC+2 0245 011A 5FCA CIT RB CI NO NONZERO TABLE ENTRY 0246 * NON ZERO TABLE ENTRY FOUND (A3=POINTER) AFTER A ZERO ENTRY; CHANGE 0247 011C 8225 PNZ STR A2,A1 NONZERO ENTRY; STORE CONTENT IN ZERO ENT 0248 011E 0200 LDK A2,0 0249 0120 822D STR A2,A3 MAKE FOUND NONZERO ENTRY ZERO 0250 0122 5F22 RB PT PAGE 9 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-00S 0251 EJECT 0252 * 0253 * -- READ RECORDS UNTIL :E[OS|OF] 0254 * 0255 0124 F697 READ CFR LST,RA RASR 0256 0126 EE21 4120 CCK A6,'A ' 0257 012A 5034 RF(0) TEL FROM TELETYPE 0258 012C EE21 5020 CCK A6,'P ' 0259 0130 5008 RF(0) PTAP FROM PAPERTAPE (PTR) 0260 0132 EE21 4320 CCK A6,'C ' 0261 0136 502E RF(0) CARD FROM CARD READER (CRD) 0262 0138 5FE8 RB CI 0263 * 0264 * -- PAPERTAPE 0265 * 0266 013A 8120 0294 R PTAP LDKL A1,RHSR PAPERTAPE READ 0267 013E 8141 0478 R ST A1,BYTEIN SET INPUT ROUTINE SWITCH 0268 0142 F6A1 0468 R CF LST,LRENU READ LINE NUMBER 0269 0146 F6A1 0288 R CF LST,NLCR 0270 014A F6A1 0364 R RIL CF LST,RLINE READ RECORD 0271 014E 8140 0358 R LD A1,ISTAT STATUS ? 0272 0152 5C3A RB(4) CIT :EOF, :EOS, ERROR (OR END OF TAPE) 0273 0154 92A0 0002 ADKL RENU,2 RENU=RENU+2, NEXT LINE 0274 0158 EAA0 03E8 CWK RENU,MAXL2 0275 015C 5E44 RB(6) CIT >= 0276 015E 5F16 RB RIL 0277 * 0278 * -- CONSOLE 0279 * 0280 0160 8120 026A R TEL LDKL A1,RASR CONSOLE READ 0281 0164 5F28 RB PTAP+4 0282 * 0283 * -- CARD READER 0284 * 0285 0166 8120 04FA R CARD LDKL A1,RCRD READ FROM CARD READER 0286 016A 5F2E RB PTAP+4 PAGE 10 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-03S 0287 EJECT 0288 * -- REPLACE 0289 * 0290 016C F6A1 0468 R REPLAC CF LST,LRENU READ LINE NUMBER 0291 0170 F6A1 0288 R CF LST,NLCR 0292 0174 0620 LDK A6,' ' 0293 0176 F693 CFR LST,WA WASR 0294 0178 F693 CFR LST,WA WASR 0295 017A F693 CFR LST,WA WASR 0296 017C F693 CFR LST,WA WASR 0297 * PRINT 4 BLANKS 0298 017E 8120 026A R LDKL A1,RASR TELETYPE READ 0299 0182 8141 0478 R ST A1,BYTEIN SET INPUT ROUTINE SWITCH 0300 0186 F6A1 0364 R CF LST,RLINE READ LINE 0301 018A 5F72 CIT1 RB CIT 0302 * 0303 * -- CHANGE TAB SETTING 0304 018C F697 TAB CFR LST,RA RASR 0305 018E EE21 4120 CCK A6,'A ' 0306 0192 5014 RF(0) TA 0307 0194 EE21 4620 CCK A6,'F ' 0308 0198 5014 RF(0) TF 0309 019A EE21 5820 CCK A6,'X ' 0310 019E 5014 RF(0) T1 0311 01A0 0100 LDK A1,NOTAB 0312 01A2 8141 035A R TS ST A1,TABTAB 0313 01A6 5F8E RB CIT 0314 * 0315 * ASSEMBLER TAB'S 0316 01A8 8120 0006 R TA LDKL A1,ASMTAB 0317 01AC 5F0C RB TS 0318 * FORTRAN TAB'S 0319 01AE 8120 000A R TF LDKL A1,FORTAB 0320 01B2 5F12 RB TS 0321 * TEXT TAB'S 0322 01B4 8120 0002 R T1 LDKL A1,TX1TAB 0323 01B8 5F18 RB TS PAGE 11 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-05S 0324 EJECT 0325 * -- WRITE/PRINT RECORDS FROM TO 0326 * 0327 01BA F697 WRITE CFR LST,RA RASR READ DESTINATION CHARACTER 0328 01BC 8641 01CA R ST A6,SA6 AND SAVE : A,U,P,.. 0329 01C0 F6A1 0468 R CF LST,LRENU START LINE NUMBER 0330 01C4 F6A1 043A R CF LST,DEC END LINE NUMBER 0331 01C8 8620 0000 LDKL A6,0 OUTPUT DEVICE: A,U,P,.. 0332 01CA SA6 EQU *-2 0333 01CA END EQU *-2 0334 01CC 8141 01CA R ST A1,END SAVE END LINE NUMBER 0335 01D0 EE21 5520 CCK A6,'U ' TEST DESTINATION 0336 01D4 5046 RF(0) PUNCH PUNCH PAPERTAPE ON PTP 0337 01D6 EE21 4120 CCK A6,'A ' 0338 01DA 5032 RF(0) LIST LIST ON TTY 0339 01DC EE21 5020 CCK A6,'P ' 0340 01E0 5008 RF(0) PRINT LIST ON LPT 0341 01E2 EE21 2020 CCK A6,' ' 0342 01E6 5058 RF(0) PRINTX LIST ON LPT WITHOUT LINENUMBERS 0343 01E8 5FD0 RB CIT 0344 * 0345 * -- LIST ON LINEPRINTER 0346 01EA F6A1 03E8 R PRINT CF LST,SLP SELECT LINE PRINTER OUTPUT AND START ON 0347 01EE 8520 02CC R PRL LDKL A5,BUFO+2 RESET BUFFER POINTER 0348 01F2 F6A1 040A R CF LST,PRENU RENU TO PRINT BUFFER 0349 01F6 F6A1 03A6 R CF LST,PLINE RECORD TO PRINT BUFFER 0350 01FA EAC0 01CA R CW RENU,END RENU ? 0351 01FE 5E76 RB(6) CIT1 >= 0352 0200 92A0 0002 ADKL RENU,2 RENU=RENU+2 0353 0204 5F18 RB PRL 0354 * 0355 * -- OUTPUT SINGLE RECORD ON CONSOLE 0356 0206 F6A1 0468 R CONS CF LST,LRENU READ LINENUMBER TO RENU (A10) 0357 020A 83C1 01CA R ST NULL,END END = 0 0358 * 0359 * -- LIST ON CONSOLE 0360 020E F6A1 0288 R LIST CF LST,NLCR 0361 0212 8120 0258 R LDKL A1,WASR SELECT CONSOLE OUTPUT 0362 0216 8141 0624 R ST A1,BYTOUT 0363 021A 5F2E RB PRL 0364 * 0365 * -- PUNCH (NO LINENUMBERS) 0366 021C 8120 02B8 R PUNCH LDKL A1,PHSP SELECT PTP OUTPUT 0367 0220 8141 0624 R ST A1,BYTOUT 0368 0224 F6A1 02AA R CF LST,LDTR PUNCH LEADER 0369 0228 8520 02CC R PUL LDKL A5,BUFO+2 0370 022C F6A1 03A6 R CF LST,PLINE RECORD TO PUNCH BUFFER 0371 0230 92A0 0002 ADKL RENU,2 RENU=RENU+2 0372 0234 EAC0 01CA R CW RENU,END RENU ? 0373 0238 5D12 RB(5) PUL 0374 023A F6A1 02AA R CF LST,LDTR PUNCH TRAILER 0375 023E 5FB6 RB CIT1 0376 * 0377 * -- PRINT ON LINEPRINTER WITHOUT LINENUMBERS 0378 0240 F6A1 03E8 R PRINTX CF LST,SLP SELECT LINE PRINTER OUTPUT AND START ON 0379 0244 8520 02CC R PRLX LDKL A5,BUFO+2 RESET BUFFER POINTER 0380 0248 F6A1 03A6 R CF LST,PLINE RECORD TO PRINT BUFFER PAGE 12 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-10S 0381 024C 92A0 0002 ADKL RENU,2 RENU=RENU+2 0382 0250 EAC0 01CA R CW RENU,END RENU ? 0383 0254 5D12 RB(5) PRLX 0384 0256 5FCE RB CIT1 PAGE 13 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-10S 0385 EJECT 0386 ************************************************************************ 0387 * BASIC IO SUBROUTINES (PROGRAMMED CHANNEL) 0388 ************************************************************************ 0389 * ASSIGNMENTS 0390 0010 ASR EQU /10 DEV ADDR 0391 0020 HSR EQU /20 DEV ADDR 0392 0030 HSP EQU /30 DEV ADDR 0393 0001 S EQU 1 START 0394 0000 H EQU 0 HALT 0395 * 0396 * WASR--OUTPUT ASCII FROM A6 TO TELETYPE 0397 * STATUS TO A7 0398 * 0399 0258 0700 WASR LDK A7,0 SELECT OUTPUT MODE 0400 025A 47D0 CIO A7,S,ASR 0401 025C 5C04 RB(4) *-2 0402 025E 4610 OTR A6,0,ASR OUTPUT CHAR 0403 0260 5C04 RB(4) *-2 0404 0262 4790 CIO A7,H,ASR STOP 0405 0264 4FD0 SST A7,ASR 0406 0266 5C04 RB(4) *-2 0407 0268 F03A RTN LST 0408 * 0409 * RASR--INPUT ASCII TO A6 FROM TELETYPE 0410 * STATUS TO A7 0411 * 0412 026A 0701 RASR LDK A7,1 SELECT INPUT MODE 0413 026C 47D0 CIO A7,S,ASR 0414 026E 5C04 RB(4) *-2 0415 0270 4E10 INR A6,0,ASR INPUT CHAR 0416 0272 5C04 RB(4) *-2 0417 0274 267F ANK A6,/7F MASK 7 BITS 0418 0276 4790 CIO A7,H,ASR STOP 0419 0278 4FD0 SST A7,ASR 0420 027A 5C04 RB(4) *-2 0421 027C EE21 0D20 CCK A6,/0D20 0422 0280 5404 RF(4) *+6 0423 0282 060A LDK A6,/0A REPLACE CR BY LF 0424 0284 F693 CFR LST,WA AND PRINT THE LF 0425 0286 F03A RTN LST 0426 * 0427 * NLCR--PRINT NLCR ON TELETYPE 0428 * 0429 0288 8620 0D0A NLCR LDKL A6,/0D0A NLCR 0430 028C F693 CFR LST,WA WASR 0431 028E E618 ECR A6,A6 0432 0290 F693 CFR LST,WA WASR 0433 0292 F03A RTN LST 0434 * 0435 * RHSR--READ OCTAD TO A6 FROM PTR 0436 * STATUS TO A7 0437 * 0438 0294 47E0 RHSR CIO A7,S,HSR 0439 0296 5C04 RB(4) *-2 0440 0298 4FE0 TI SST A7,HSR 0441 029A 5402 RF(4) IN NOT ACCEPTED PAGE 14 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-14S 0442 029C F03A RTN LST ACCEPTED:END OF TAPE OR ERROR 0443 029E 4E20 IN INR A6,0,HSR INPUT CHAR 0444 02A0 5C0A RB(4) TI 0445 02A2 47A0 CIO A7,H,HSR STOP 0446 02A4 4FE0 SST A7,HSR 0447 02A6 5C04 RB(4) *-2 0448 02A8 F03A RTN LST 0449 * 0450 * LDTR--PUNCH LEADER/TRAILER ON PTP 0451 * RETURN: A5,A6=0 A7=STATUS 0452 * 0453 02AA 057F LDTR LDK A5,/7F 0454 02AC 0600 LDK A6,0 0455 02AE F6A1 02B8 R CF LST,PHSP 0456 02B2 1D01 SUK A5,1 0457 02B4 5C08 RB(4) *-6 0458 02B6 F03A RTN LST 0459 * 0460 * PHSP--PUNCH OCTAD FROM A6 ON PTP 0461 * STATUS TO A7 0462 * 0463 02B8 47F0 PHSP CIO A7,S,HSP 0464 02BA 5C04 RB(4) *-2 0465 02BC 4630 OTR A6,0,HSP PUNCH 0466 02BE 5C04 RB(4) *-2 0467 02C0 47B0 CIO A7,H,HSP STOP 0468 02C2 4FF0 SST A7,HSP 0469 02C4 5C04 RB(4) *-2 0470 02C6 F03A RTN LST PAGE 15 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-16S 0471 EJECT 0472 ************************************************************************ 0473 * BUFFERS + IO ROUTINES FOR BUFFER IO 0474 ************************************************************************ 0475 02C8 0000 LPRFLG DATA 0 1 IF PRINT OUTPUT ON LINE PRINTER 0476 02CA BUFA EQU * 0477 02CA 2020 BUFO DATA /2020 TEXT OUTPUT BUFFER 0478 02CC BUFI RES 67 TEXT INPUT BUFFER 0479 * 0480 * INPUT CB 0481 0352 02CC R ICB DATA BUFI POINTER TO INPUT BUFFER 0482 0354 0082 DATA 130 MAX REQUESTED RECORD LENGTH 0483 0356 0000 ELI DATA 0 EFFECTIVE RECORD LENGTH 0484 0358 0000 ISTAT DATA 0 RESULTING STATUS 0485 035A 0006 R TABTAB DATA DEFTAB DEFAULT TAB SETTING 0486 * 0487 * OUTPUT CB 0488 035C 02CA R OCB DATA BUFO OUTPUT BUFFER 0489 035E 0000 RLO DATA 0 REQUESTED RECORD LENGTH 0490 0360 0000 DATA 0 EFFECTIVE RECORD LENGTH 0491 0362 0000 DATA 0 STATUS 0492 * PAGE 16 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-17S 0493 EJECT 0494 * RLINE -- READ A RECORD AND STORE INTO MEMORY 0495 * SLINE -- STORE A RECORD FROM INPUT BUFFER INTO MEMORY 0496 0364 F6A1 0470 R RLINE CF LST,IREC INPUT RECORD 0497 0368 8240 0356 R LD A2,ELI EFFECTIVE LENGTH 0498 * 0499 * INPUT READY; STORE RECORD INTO MEMORY 0500 036C 0100 SLINE LDK A1,0 CHAR COUNT 0501 036E 81CB 7C16 ST CHAD,LTAB,RENU STORE CHAD(A9) AS START OF LINE IN TABLE 0502 0372 E227 SCR A2,CHAD STORE EFFECTIVE LENGTH OVER CHARACTER AD 0503 0374 91A0 0001 ADKL CHAD,1 0504 0378 E908 SL CWR A1,A2 END OF RECORD? 0505 037A 5402 RF(4) *+4 0506 037C F03A RT RTN LST 0507 037E E344 02CC R LC A3,BUFI,A1 CHAR FROM BUFFER 0508 0382 E327 SCR A3,CHAD STORE OVER CHAD(A9) 0509 0384 E9A0 7C02 CWK CHAD,LTAB-20 END OF MEMORY? 0510 0388 5608 RF(6) VOL => YES 0511 038A 91A0 0001 ADKL CHAD,1 INCR CHARACTER ADDRESS 0512 038E 1101 ADK A1,1 INCR CHAR COUNT 0513 0390 5F1A RB SL 0514 * END OF MEMORY 0515 0392 0621 VOL LDK A6,'!' 0516 0394 F693 CFR LST,WA WASR 0517 0396 F693 CFR LST,WA WASR 0518 0398 F693 CFR LST,WA WASR 0519 039A 83CB 7C16 ST NULL,LTAB,RENU STORE NULL(A11) IN TABLE FOR RENU(A10) 0520 039E 96A0 0004 ADKL LST,4 ABNORMAL RETURN FROM SUBR 0521 03A2 8F20 0052 R ABL CI TO COMMAND INPUT PAGE 17 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-20S 0522 EJECT 0523 * PLINE -- RECORD TO OUTPUT BUFFER AND OUTPUT 0524 * RENU(A10) = POINTER TO RECORD 0525 * A5 = CHAR POINTER INTO BUFFER 0526 03A6 844A 7C16 PLINE LD A4,LTAB,RENU POINTER TO RECORD 0527 03AA 553A RF(5) RPL EMPTY RECORD 0528 03AC E330 LCR A3,A4 LENGTH 0529 03AE 23FF ANK A3,/FF 0530 03B0 5534 RF(5) RPL 0531 03B2 1401 PLL ADK A4,1 0532 03B4 E130 LCR A1,A4 CHAR FROM MEMORY 0533 03B6 E135 SCR A1,A5 INTO BUFFER 0534 03B8 1501 ADK A5,1 INCR OUTPUT BUFFER POINTER 0535 03BA 1B01 SUK A3,1 DECR LENGTH; READY? 0536 03BC 590C RB(1) PLL 0537 * 0538 03BE 9D20 02CA R WLINE SUKL A5,BUFO REQUESTED LENGHT 0539 03C2 8541 035E R ST A5,RLO SET REQUESTED LENGTH 0540 03C6 8140 02C8 R LD A1,LPRFLG OUTPUT ON LINEPRINTER ? 0541 03CA 5016 RF(0) XXX NO 0542 * FORM FEED IF 1ST TWO CHARS OF LINE ARE '$F' 0543 * REMAINING PART OF THAT LINE IS IGNORED 0544 03CC 8140 02CC R LD A1,BUFO+2 0545 03D0 E920 2446 CWK A1,'$F' 0546 03D4 5406 RF(4) PR 0547 03D6 F6A1 03E8 R CF LST,SLP DO A FORM FEED 0548 03DA F03A RTN LST 0549 03DC F6A1 0630 R PR CF LST,LPREC LINEPRINTER 0550 03E0 F03A RTN LST 0551 03E2 F6A1 060A R XXX CF LST,OREC TELETYPE/PUNCHER 0552 03E6 F03A RPL RTN LST 0553 * 0554 * SLP--SET LINEPRINTER AND SKIP TO A NEW PAGE 0555 03E8 0101 SLP LDK A1,1 0556 03EA 8141 02C8 R ST A1,LPRFLG SET PRINTING ON LINEPRINTER 0557 03EE 8120 0D0C LDKL A1,/0D0C TOP OF FORM 0558 03F2 8141 02CA R ST A1,BUFO SET CONTROL BYTES IN OUTPUT BUFFER 0559 03F6 0102 LDK A1,2 0560 03F8 8141 035E R ST A1,RLO SET REQUESTED LENGTH 0561 03FC F6A1 0630 R CF LST,LPREC PRINT 0562 0400 8120 2020 LDKL A1,' ' 0563 0404 8141 02CA R ST A1,BUFO RESET CONTROL BYTES 0564 0408 F03A RTN LST PAGE 18 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-23S 0565 EJECT 0566 * PRENU -- RECORD NUMBER TO OUTPUT BUFFER 0567 * A5 IS POINTER INTO BUFFER 0568 * 0569 040A 840A PRENU LDR A4,RENU GET RENU(A10) 0570 040C 0300 LDK A3,0 DIVIDE INDEX 0571 * 0572 040E 0600 CLL LDK A6,0 DIGIT=0 0573 0410 8110 CL LDR A1,A4 0574 0412 994C 0434 R SU A1,DEEL,A3 0575 0416 5206 RF(2) PCYF 0576 0418 1601 ADK A6,1 DIGIT=DIGIT+1 0577 041A 8404 LDR A4,A1 0578 041C 5F0E RB CL 0579 * 0580 041E 1630 PCYF ADK A6,/30 ASCII 0581 0420 E635 SCR A6,A5 0582 0422 1501 ADK A5,1 0583 0424 1302 ADK A3,2 0584 0426 EB20 0006 CWK A3,6 0585 042A 5A1E RB(2) CLL 0586 042C 0620 LDK A6,/20 SPACE 0587 042E E635 SCR A6,A5 0588 0430 1501 ADK A5,1 0589 0432 F03A RTN LST 0590 * 0591 0434 00C8 DEEL DATA 200 LINE NUMBERS ARE REPRESENTED * 2 0592 0436 0014 DATA 20 0593 0438 0002 DATA 2 PAGE 19 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-25S 0594 EJECT 0595 * DEC -- READ DECIMAL FROM CONSOLE INTO A1 0596 * 0597 043A 062E DEC LDK A6,'.' 0598 043C F693 CFR LST,WA WASR 0599 043E 0100 LDK A1,0 NUM=0 0600 * 0601 0440 F697 DLC CFR LST,RA RASR 0602 0442 1E30 SUK A6,/30 0603 0444 5214 RF(2) UIT 0604 0446 EE20 0009 CWK A6,9 0605 044A 510E RF(1) UIT 0606 044C 8504 LDR A5,A1 0607 044E 3D02 SLA A5,2 *4 0608 0450 9504 ADR A5,A1 *5 0609 0452 3D01 SLA A5,1 *10 0610 0454 9518 ADR A5,A6 + DEC 0611 0456 8114 LDR A1,A5 NUM 0612 0458 5F1A RB DLC 0613 * 0614 045A E920 01F4 UIT CWK A1,MAXL 0615 045E 5104 RF(1) *+6 0616 0460 3901 SLA A1,1 *2 (ALL NUMBERS * 2) 0617 0462 F03A RTN LST 0618 0464 063F LDK A6,'?' 0619 0466 5F2C RB DEC+2 0620 * 0621 * LRENU -- LINE NUMBER TO RENU 0622 * 0623 0468 F6A1 043A R LRENU CF LST,DEC 0624 046C 8284 LDR RENU,A1 0625 046E F03A RTN LST PAGE 20 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-27S 0626 EJECT 0627 ******************************************************************** 0628 * RECORD IO, REPLACING MONITOR IO * 0629 ******************************************************************** 0630 * IREC -- READ RECORD 0631 * HACK TO PROVIDE SOME OF THE MONITOR STANDARD READ FUNCTION FOR TTY AND 0632 * RECORDS END BY FINDING A OR HAVING READ THE REQUESTED LENGTH 0633 * CONTROL CHARACTERS AND ARE NOT PUT IN THE RECORD BUFFER NOR 0634 * INCLUDED IN THE EFFECTIVE RECORD LENGTH. 0635 * ICB (INPUT CONTROL BLOCK) PROVIDES INPUT PARAMETERS 0636 * 0637 0470 B940 0352 R IREC ML 2,ICB A1=BUFFER ADDRESS A2=REQ LENGHT 0638 0474 0300 LDK A3,0 CHAR COUNT = 0 0639 0476 F6A1 026A R IB CF LST,RASR READ BYTE TO A6 0640 0478 BYTEIN EQU *-2 CHAR INPUT ROUTINE 0641 047A 871C LDR A7,A7 0642 047C 542C RF(4) IEND ERROR OR EOT 0643 047E 8618 LDR A6,A6 0644 0480 580C RB(0) IB SKIP NULLS 0645 0482 EE21 0A20 CCK A6,/0A20 LINE FEED ? 0646 0486 5016 RF(0) EOL END OF LINE 0647 0488 EE21 0D20 CCK A6,/0D20 CR ? 0648 048C 5818 RB(0) IB SKIP CR'S 0649 048E EE21 5C20 CCK A6,/5C20 TAB? 0650 0492 5020 RF(0) CKCTAB 0651 0494 E625 STORE SCR A6,A1 STORE CHAR INTO BUFFER 0652 0496 1101 ADK A1,1 INCR BUFFER POINTER 0653 0498 1301 ADK A3,1 INCR CHAR COUNT 0654 049A EB08 CWR A3,A2 CHAR COUNT NE REQ LENGTH? 0655 049C 5C28 RB(4) IB 0656 049E 8160 0352 R EOL LD* A1,ICB 1ST 2 CHARS 0657 04A2 E920 3A45 CWK A1,':E' 0658 04A6 5402 RF(4) IEND 0659 04A8 0701 LDK A7,1 :EOF/:EOS 0660 04AA 8341 0356 R IEND ST A3,ELI EFFECTIVE LENGTH 0661 04AE 8741 0358 R ST A7,ISTAT STATUS 0662 04B2 F03A RTN LST 0663 * CHECK TAB SETTINGS AND EXPAND TABS 0664 04B4 8440 035A R CKCTAB LD A4,TABTAB 0665 04B8 5826 RB(0) STORE NO TAB SETTING 0666 04BA E530 LCR A5,A4 NUMBER OF TABS 0667 04BC 1401 ADK A4,1 1ST TAB 0668 04BE 8441 04F6 R ST A4,PTRTAB 0669 04C2 25FF ANK A5,/FF NUMBER OF TABS 0670 04C4 8541 04F8 R ST A5,NTABS 0671 04C8 0500 LDK A5,0 0672 04CA E460 04F6 R NT LC* A4,PTRTAB GET TAB POSITION 0673 04CE 24FF ANK A4,/FF 0674 04D0 1C01 SUK A4,1 0675 04D2 EB10 CWR A3,A4 COMPARE CHAR POSITION AND TAB POSITION 0676 04D4 520E RF(2) SETTAB < 0677 04D6 9041 04F6 R IM PTRTAB 0678 04DA 1501 ADK A5,1 0679 04DC ED40 04F8 R CW A5,NTABS 0680 04E0 5A18 RB(2) NT 0681 04E2 5F50 RB STORE 0682 * EXPAND PAGE 21 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-32S 0683 04E4 0620 SETTAB LDK A6,/20 BLANK 0684 04E6 E625 NB SCR A6,A1 INTO BUFFER 0685 04E8 1101 ADK A1,1 INCR BUFFER POINTER 0686 04EA 1301 ADK A3,1 INCR CHAR COUNT 0687 04EC EB08 CWR A3,A2 CHAR COUNT EQ REQ LENGTH? 0688 04EE 5846 RB(0) IEND YES 0689 04F0 EB10 CWR A3,A4 CHAR POSITION AT TAB POSITION? 0690 04F2 5A0E RB(2) NB NO; PUT NEXT BLANK 0691 04F4 5F80 RB IB YES, AT TAB POSITION; EXPANSION READY 0692 04F6 0000 PTRTAB DATA 0 POINTER TO TABS (STARTING WITH TAB1) 0693 04F8 0000 NTABS DATA 0 NUMBER OF TABS PAGE 22 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-32S 0694 EJECT 0695 * INPUT A CONVERTED CHARACTER FROM A PUNCHED CARD TO A6; A7 IS STATUS 0696 04FA B941 0560 R RCRD MS 2,SRC SAVE A1,A2 0697 04FE 8740 0566 R LD A7,CBPTR BUFFER CHARACTER POINTER 0698 0502 543E RF(4) GETN GET NEXT CHARACTER 0699 * PTR = 0 => NO CARD => READ CARD 0700 * INPUT A PUNCHED CARD FROM THE CARD READER 0701 0006 CR EQU /06 DEVICE ADDRESS = CHANNEL ADDRESS 0702 000C RCR EQU CR+CR CHANNEL EXTERNAL REGISTER 0703 0504 4986 TST A1,CR BUSY? 0704 0506 5C04 RB(4) *-2 0705 0508 0150 LDK A1,80 LENGTH TO READ IN WORDS 0706 050A A920 8000 ORKL A1,/8000 INPUT MODE WORDS 0707 050E 8220 056A R LDKL A2,BCARD CARD IMAGE BUFFER ADDRESS 0708 0512 710C WER A1,RCR LOAD 1ST CHANNEL REGISTER 0709 0514 720D WER A2,RCR+1 AND THE 2ND WITH THE BUFFER ADDRESS 0710 0516 41C6 CIO A1,S,CR START IO 0711 0518 5C04 RB(4) *-2 0712 * 0713 051A 4FC6 SST A7,CR 0714 051C 5C04 RB(4) *-2 READY? 0715 051E 871C LDR A7,A7 STATUS? 0716 0520 5002 RF(0) *+4 0717 0522 573A RF EXRCRD NONZERO; NO CARD? 0718 * LENGTH? 0719 0524 790C RER A1,RCR 0720 0526 21FF ANK A1,/FF 0721 0528 5002 RF(0) *+4 RECORD INPUT OK; REMOVE TRAILING BLANKS 0722 052A 207F HLT NO 80 WORDS READ => ERROR 0723 * CARD IMAGE IN BUFFER 0724 * REMOVE TRAILING BLANKS 0725 052C 019E LDK A1,158 START COMPARING LAST CHARACTER FOR A BLA 0726 052E 8244 056A R RTB LD A2,BCARD,A1 0727 0532 1A20 SUK A2,/20 BLANK ? 0728 0534 5406 RF(4) SRL NON BLANK 0729 0536 1902 SUK A1,2 0730 0538 5002 RF(0) SRL EMPTY RECORD 0731 053A 5F0E RB RTB CHECK NEXT 0732 053C 1102 SRL ADK A1,2 0733 053E 8141 0568 R ST A1,RLEN SAVE ACTUAL RECORD LENGTH TO CHECK FOR 0734 * 0735 * GET NEXT CHARACTER ROUTINE 0736 0542 8740 0566 R GETN LD A7,CBPTR CHAR POINTER 0737 0546 EF40 0568 R CW A7,RLEN END OF RECORD? 0738 054A 5406 RF(4) GN 0739 054C 060A LDK A6,/0A LF, INDICATION BUFFER END 0740 054E 0700 LDK A7,0 RESET POINTER TO INDICATE A NEXT CARD RE 0741 0550 5706 RF GN1 0742 0552 865C 056A R GN LD A6,BCARD,A7 GET CHARACTER 0743 0556 1702 ADK A7,2 INCR POINTER 0744 0558 8741 0566 R GN1 ST A7,CBPTR SAVE POINTER 0745 055C 0700 LDK A7,0 STATUS OK 0746 055E B920 EXRCRD MLK 2 RESTORE A1,A2 0747 0560 0000 SRC DATA 0 SAVED A1,A2 0748 0562 0000 DATA 0 0749 0564 F03A RTN LST 0750 * PAGE 23 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-37S 0751 0566 0000 CBPTR DATA 0 CURRENT CHAR POINTER INTO CARD BUFFER 0752 0568 0000 RLEN DATA 0 RECORD LENGTH IN CHARS (TRAILING BLANKS 0753 056A BCARD RES 80 CARD INPUT BUFFER PAGE 24 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-37S 0754 EJECT 0755 * OREC -- OUTPUT RECORD (TELETYPE AND PUNCH) 0756 * HACK TO PROVIDE (PART OF) THE MONITOR STANDARD WRITE FUNCTION: 0757 * 1ST 2 BYTES CONTROL THE CARRIAGE AND ARE IGNORED FOR TTY AND PTP AND. 0758 * AT RECORD END, CR LF ARE INSERTED AFTER THE BUFFER 0759 * OCB (OUTPUT CONTROL BLOCK) PROVIDES THE OUTPUT PARAMETERS 0760 * 0761 060A B940 035C R OREC ML 2,OCB A1=BUFFER ADDRESS A2=REQUESTED LENGTH 0762 060E 030D LDK A3,/0D PUT CRLF AT THE END OF THE BUFFER 0763 0610 8404 LDR A4,A1 BUFFER ADDRESS 0764 0612 9408 ADR A4,A2 + REQ. LENGTH 0765 0614 E331 SCR A3,A4 0766 0616 030A LDK A3,/0A 0767 0618 1401 ADK A4,1 0768 061A E331 SCR A3,A4 0769 * 0770 061C 1102 ADK A1,2 SKIP 1ST 2 BYTES (CONTROL CHARS) 0771 061E 0300 LDK A3,0 MOVED CHAR COUNT = 0 0772 0620 E624 OB LCR A6,A1 0773 0622 F6A1 0258 R CF LST,WASR 0774 0624 BYTOUT EQU *-2 OUTPUT ROUTINE 0775 0626 1101 CO ADK A1,1 INCR BUFFER POINTER 0776 0628 1301 ADK A3,1 INCR CHAR COUNT 0777 062A EB08 CWR A3,A2 CHAR COUNT NE REQ LENGTH? 0778 062C 5A0E RB(2) OB < 0779 062E F03A RTN LST PAGE 25 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-39S 0780 EJECT 0781 * LPREC -- OUTPUT RECORD (LINEPRINTER) 0782 * HACK TO PROVIDE (PART OF) THE MONITOR STANDARD/BASIC WRITE FUNCTION 0783 * 1ST 2 BYTES IN BUFFER CONTROL THE CARRIAGE (SKIP AFTER PRINT IS ASSUME 0784 * REQUESTED LENGTH INCLUDE THE 2 CONTROL BYTES. 0785 * LINEPRINTER WITH ITS CONTROL UNIT IS CONNECTED TO A MULTIPLEX CHANNEL. 0786 * OCB (OUTPUT CONTROL BLOCK) PROVIDES THE OUTPUT PARAMETERS: BUFFER ADDR 0787 * AND THE REQUESTED LENGTH (IN CHARACTERS) TO PRINT. 0788 * 0789 0007 LP EQU /07 DEVICE ADDRESS = CHANNEL ADDRESS 0790 000E RLP EQU LP+LP CHANNEL EXTERNAL REGISTER 0791 * 0792 0630 4987 LPREC TST A1,LP BUSY? 0793 0632 5C04 RB(4) *-2 0794 0634 B940 035C R ML 2,OCB A1=BUFFER ADDRESS A2=REQUESTED LENGTH 0795 * CHECK CONTROL CHARS; (WHICH IS THE STANDARD FOR SKIPPIN 0796 * A SINGLE LINE) IS REPLACED BY /0D0A. NO OTHER STANDARD WRITE SKIPPING 0797 * SUPPORTED BY THIS DRIVER. WHEN REQUIRED, HARDWARE RECOGNIZED CONTROL M 0798 * BE INSERTED IN THE 1ST 2 BYTE POSITIONS OF THE BUFFER, AND THE DRIVER 0799 * OPERATES AS BASIC WRITE: 0800 * - 0D0A SKIPS A SINGLE LINE 0801 * - 0A0A SKIPS 2 LINES 0802 * - 0D0C SKIPS TO TOP OF PAGE 0803 * 0804 0638 8324 LDR* A3,A1 0805 063A EB20 2020 CWK A3,/2020 0806 063E 5406 RF(4) MS 0807 0640 8320 0D0A LDKL A3,/0D0A 0808 0644 8325 STR A3,A1 0809 * SET MULTIPLEX WORDS (A2 IS LENGTH, A1 IS BUFFER) 0810 0646 AA20 4000 MS ORKL A2,/4000 FUNCTION IS CHARACTER OUTPUT 0811 064A 720E WER A2,RLP LOAD THE 1ST CHANNEL REGISTER 0812 064C 710F WER A1,RLP+1 AND THE 2ND WITH THE BUFFER ADDRESS 0813 064E 41C7 CIO A1,S,LP ACTIVATE 0814 0650 5C04 RB(4) *-2 0815 0652 4FC7 SST A7,LP WAIT FOR READY 0816 0654 5C04 RB(4) *-2 0817 0656 871C LDR A7,A7 0818 0658 5004 RF(0) *+6 0819 065A 207F HLT LINE PRINTER NOT OPERATING PROPERLY 0820 065C 5F2E RB LPREC RETRY 0821 065E F03A RTN LST 0822 * 0823 0660 BCOR EQU * START OF POOL 0824 * 0825 END TEXT PAGE 26 DATE 14-10-08 IDENT LEDIT VERSION D TIME 13H-14M-42S SYMBOL TABLE ASMTAB 0006 R ASR 0010 A BCARD 056A R BCOR 0660 R BUFA 02CA R BUFI 02CC R BUFO 02CA R BYTEIN 0478 R BYTOUT 0624 R CARD 0166 R CBPTR 0566 R CHAD 0009 A CI 0052 R CIT 011A R CIT1 018A R CKCTAB 04B4 R CL 0410 R CLL 040E R CO 0626 R CONS 0206 R CR 0006 A CTAB 000C R DEC 043A R DEEL 0434 R DEFTAB 0006 R DELETE 00D4 R DLC 0440 R ELI 0356 R END 01CA R EOL 049E R EXRCRD 055E R FORTAB 000A R GETN 0542 R GN 0552 R GN1 0558 R H 0000 A HCOR 7FFE A HSP 0030 A HSR 0020 A IB 0476 R ICB 0352 R IEND 04AA R IL 00EC R IN 029E R INIBUF 0098 R INSERT 00DE R IREC 0470 R ISTAT 0358 R JTAB 001E R KILL 007E R KL 009E R LAST 00B6 R LDTR 02AA R LIST 020E R LP 0007 A LPREC 0630 R LPRFLG 02C8 R LRENU 0468 R LST 000E A LSTK 0042 R LTAB 7C16 A LTABM 7C14 A MAXL 01F4 A MAXL2 03E8 A MS 0646 R N 0012 A NB 04E6 R NEXT 0070 R NLCR 0288 R NN FFEE A NOTAB 0000 A NT 04CA R NTABS 04F8 R NULL 000B A OB 0620 R OCB 035C R OREC 060A R PACK 00FA R PC 010C R PCYF 041E R PHSP 02B8 R PL 00FE R PLINE 03A6 R PLL 03B2 R PNZ 011C R PR 03DC R PRENU 040A R PRINT 01EA R PRINTX 0240 R PRL 01EE R PRLX 0244 R PT 0102 R PTAP 013A R PTRTAB 04F6 R PUL 0228 R PUNCH 021C R RA 000D A RASR 026A R RCR 000C A RCRD 04FA R READ 0124 R RENU 000A A REPEAT 00AA R REPLAC 016C R RHSR 0294 R RIL 014A R RLEN 0568 R RLINE 0364 R RLO 035E R RLP 000E A RPL 03E6 R RT 037C R RTB 052E R S 0001 A SA6 01CA R SETTAB 04E4 R SL 0378 R SLINE 036C R SLP 03E8 R SRC 0560 R SRL 053C R STORE 0494 R T1 01B4 R TA 01A8 R TAB 018C R TABTAB 035A R TEL 0160 R TEXT 0030 R TF 01AE R TI 0298 R TOPCOR 7FFC A TS 01A2 R TX1TAB 0002 R UIT 045A R VOL 0392 R WA 000C A WASR 0258 R WLINE 03BE R WRITE 01BA R XXX 03E2 R ASS.ERR. 0000 EOF PROG ELAPSED TIME: 00H-01M-47S-400MS- KPF /O DATE 14 /10 /08 TIME 13H-15M-09S- LABEL = SCRATCH DATE = 06/10/08 PACK NBR = 002 THEO LSD LSD /OBJCT INC LEDIT LKE M DATE 14 /10 /08 TIME 13H-16M-35S- LABEL = SCRATCH DATE = 06/10/08 PACK NBR = 002 THEO LEDIT 0008 VERSION D ****** START = 0038 LENGTH = 0668 REGION = 03BB EOF PROG ELAPSED TIME: 00H-00M-00S-980MS- KPF /L,LEDITD DATE 14 /10 /08 TIME 13H-16M-59S- LABEL = SCRATCH DATE = 06/10/08 PACK NBR = 002 THEO LSD RUN LEDITD DATE 14 /10 /08 TIME 13H-17M-47S- LABEL = SCRATCH DATE = 06/10/08 PACK NBR = 002 THEO PROG ELAPSED TIME: 00H-00M-00S-040MS- EXIT CODE = 00