1 * F4$IOS-B - DEC 12 2006 - VERSION 1
3 * FORTRAN COMPILER IO SELECTOR
5 * WHEN THE COMPILER IS STARTED, REGISTER A SPECIFIES THE DEVICES
6 * TO BE USED FOR SOURCE INPUT, OBJECT OUTPUT AND FOR LISTING OUTPUT.
7 * THE IOS SELECTOR HONORS THIS SELECTION BY ACTIVATING THE SELECTED
8 * DEVICES FOR THESE TASKS.
10 * THE FOLOWING OPTIONS ARE SUPPORTED:
12 * A[ 8-10] SOURCE INPUT DEVICE (1=TTY 2=CR 3=HSR 4=MAGTAPE-UNIT 1)
13 * A[11-13] LISTING DEVICE (0=SUP 1=TTY 2=LP 4=MAGTAPE-UNIT 2)
14 * A[14-16] OBJECT OUTPUT DEVICE (0=SUP 1=PTP 2=TTY 4=MAGTAPE-UNIT 2)
15 * THE LISTED DEVICE ALLOCATION IS SET BY F4IOS
16 * THIS VERSION OF F4IOS DOES NOT, WITHOUT MODIFICATION, SUPPORT OTHER
17 * DEVICES FOR THE SPECIFIED TASKS.
18 * THIS ALSO MEANS THAT TAPE UNIT 2 CAN EITHER BE USED FOR
19 * OBJECT OUTPUT OR FOR LISTING OUTPUT
21 * IN CASE NO DEVICE SELECTION IS SPECIFIED IN REGISTER A, A DEFAULT
22 * SELECTION IS MADE BY F4IOS:
23 * - SOURCE INPUT 3=HSR
24 * - LISTING OUTPUT 1=TTY
25 * - OBJECT OUTPUT 1=PTP
27 * F4IOS LINKS, TO SUPPORT THE SPECIFIED IO, THE DRIVERS FOR THESE DEVICES.
28 * HOWEVER, IF FOR INSTANCE NO MAGTAPE IS AVAILABLE IN A PARTICULAR
29 * INSTALLATION, THE MAGTAPE DRIVER CAN BE REPLACED BY A DUMMY DRIVER.
30 * THE COMPILER FOOTPRINT IN MEMORY BECOMES SMALLER THEN. DO NOT LINK
31 * THE MAGTAPE DRIVER IN THAT CASE. THE F4$DUM MODULE RESOLVES THE CALLS
32 * TO THE MAGTAPE DRIVER AND MUST BE THAT LAST MODULE TO BE LINKED.
34 * HONEYWELL X16 16 BIT COMPUTER SOFTWARE
36 * PROGRAM LENGTH: 415 WORDS
38 * THIS SOURCE IS RECREATED FROM THE EXISTING SLST FILE:
39 * - SLST-FRTN.IMG (WHICH ORIGINATES FROM HONEYWELL)
41 * THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL)
43 * SUBR F4$INT,F4IN IO INITIALISATION ROUTINE
44 * SUBR F4$IN,F4SI GENERAL SOURCE INPUT ROUTINE
45 * SUBR F4$OUT,F4OO GENERAL OBJECT OUTPUT ROUTINE
46 * SUBR F4$SYM,F4LO GENERAL LISTING OUTPUT ROUTINE
47 * SUBR F4$END,F4EN END COMPILATION
49 * SUBR F4$DUI,IL1 DUMMY SOURCE INPUT DRIVER
50 * SUBR F4$DUO,OL4 DUMMY OBJECT OUTPUT DRIVER
51 * SUBR F4$DUS,LL9 DUMMY LISTING OUTPUT DRIVER
64 *******************************************************************
65 * F4$INT -- INIT COMPILER DATA POOL AND STORE IO DEVICE SELECTION *
66 *******************************************************************
69 JST SDEV SET THE SELECTED DEVICES
70 JST PUTR PUNCH LEADER IN CASE PTP IS OBJECT DEVICE
71 CALL F4$INI SET THE SIZE OF THE DATA POOL
73 STA SCNT SOURCE INPUT RECORD COUNTER/LINENUMBER = 0
74 IRS INFL SET 1ST-TIME-CALL FLAG FOR LISTING DRIVER
77 **************************************
78 * GENERAL SOURCE INPUT ROUTINE *
82 **************************************
84 F4SI DAC *-* SOURCE INPUT DRIVER
85 LDA* F4SI GET SOURCE BUFFER ADDRESS
92 IL6 LDA DSRC LOAD SELECTED SOURCE DEVICE
101 * DUMMY SOURCE INPUT DEVICE DRIVER: SELECT PROPER DEVICE
102 IL1 LDA MO5 7 NON =-5 MESSAGE LENGTH, 5 WORDS LONG
104 DAC MDEV MESSAGE: DEVICE? (NO DRIVER FOR REQUESTED DEVICE)
105 JST STOP SET DEFAULT OR NEW DEVICE SELECTION
108 IL2 CALL I$AA TTY = SOURCE INPUT DEVICE
109 IB1 DAC *-* SOURCE BUFFER ADDRESS
110 JMP IL2 EOM/EOF RETURN
111 JMP IL7 NORMAL RETURN
112 IL3 CALL I$CA CR = SOURCE INPUT DEVICE
113 IB2 DAC *-* SOURCE BUFFER ADDRESS
114 JMP IL3 EOM/EOF RETURN
115 JMP IL7 NORMAL RETURN
116 IL4 CALL I$PA HSR = SOURCE INPUT DEVICE
117 IB3 DAC *-* SOURCE BUFFER ADDRESS
120 IL5 CALL I$MA MT = SOURCE INPUT DEVICE
121 IB4 DAC *-* SOURCE BUFFER ADDRESS
122 OCT 50 BUFFER LENGTH (WORDS)
123 OCT 1 TAPE UNIT 1 = SOURCE DECK
124 JMP ERR0 RECORD NOT READABLE RETURN
125 JMP ERR1 END OF TAPE RETURN
126 JMP IL5 END OF FILE RETURN; READ NEXT FILE
127 CALL C$6TO8 NORMAL RETURN; CONVERT RECORD TO ASCII
128 IB5 DAC *-* SOURCE BUFFER ADDRESS
130 IL7 LDA SCNT SOURCE RECORD COUNTER
133 STA SCNT SOURCE RECORD COUNTER
134 IRS F4SI SET RETURN ADDRESS
137 **************************************
138 * GENERAL OBJECT OUTPUT ROUTINE *
139 * CALLING SEQUENCE: *
140 * A = OBJECT BUFFER ADDRESS *
141 * X = - BUFFER LENGTH (WORDS) *
143 **************************************
145 F4OO DAC *-* OBJECT OUTPUT DRIVER
146 STA OSRC EXTERNAL OBJECT BUFFER ADDRESS
147 LDA 0 - BUFFER LENGTH (WORDS)
149 STA OBFL + BUFFER LENGTH (WORDS)
151 ADD OPTR POINTER TO OUTPUT BUFFER
153 STA ODES INDEXED DESTINATION
154 OL1 LDA* OSRC MOVE OBJECT TO INTERNAL OUTPUT BUFFER
160 JMP* F4OO 0 SUPPRESS OBJECT OUTPUT
167 * DUMMY OBJECT OUTPUT DEVICE DRIVER: SELECT PROPER DEVICE
168 OL4 LDA MO5 7 NON =-5
170 DAC MDEV MESSAGE: DEVICE?
171 JST STOP SET DEFAULT OR NEW DEVICE SELECTION
172 JST PUTR PUNCH TRAILER IN CASE PTP IS SELECTED
175 OL2 CALL O$PB PTP = OBJECT OUTPUT DEVICE
176 DAC OBUF OUTPUT BUFFER ADDRESS
178 OL3 CALL O$AB TTY = OBJECT OUTPUT DEVICE
179 DAC OBUF OUTPUT BUFFER ADDRESS
181 OL5 CALL O$MB MAG TAPE = OBJECT OUTPUT DEVICE
182 DAC OBUF+1 BUFFER ADDRESS
183 MTBL OCT 0 BUFFER LENGTH (WORDS)
184 OCT 2 TAPE UNIT 2 = OBJECT DECK
185 JMP ERR1 END OF TAPE RETURN
188 **************************************
189 * GENERAL LISTING OUTPUT ROUTINE *
190 * CALLING SEQUENCE: *
193 **************************************
195 F4LO DAC *-* LISTING OUTPUT DRIVER
196 LDA SPSP <SPACE><SPACE>
197 STA OBUF SET LINENUMBER FIELD
198 STA OBUF+1 (6 CHARS) TO SPACES
200 LDA* F4LO EXTERNAL BUFFER ADDRESS
201 ADD ILPB +INDEX / LENGTH
202 STA OSRC INDEXED EXTERNAL BUFFER ADDRESS
204 STA 0 X = INDEX INTO THE LINE BUFFER
205 LL1 LDA* OSRC MOVE LINE TO INTERNAL DRIVER BUFFER
209 LL10 LDA INFL NON-ZERO WITH 1ST CALL
212 * 1ST CALL OF LISTING DRIVER
213 LDA* F4LO EXTERNAL BUFFER ADDRESS
214 ERA IB6 EQUAL TO SOURCE BUFFER ADDRESS??
216 JMP LEX NOT EQUAL; EXIT
217 LDA DLST YES; GET REQUIRED LISTING DEVICE
218 ERA N2 EQUAL 2 ? (LP)
221 CALL O$LH YES, LP. INIT THE HEADER
223 LL2 LDA* F4LO EXTERNAL BUFFER ADDRESS
224 ERA IB6 EQUAL TO SOURCE BUFFER ADDRESS??
227 LDA TPTR YES, EQUAL TO SOURCE BUFFER
228 STA TEMP TEMP = PTR TO DEC CONV TAB
229 LDA SCNT GET SOURCE LINE NUMBER
230 STA NUMB LINENUMBER TO PRINT
231 * WITH ZERO BEING TRUE, LEADING ZERO'S OF THE LINENUMBER ARE SUPPRESSED
232 IRS ZERO LEADING ZERO FLAG IS TRUE (SET TO FALSE WITH 1ST NONZERO)
238 LL3 LDA DLST WHICH DRIVER TO OUTPUT LISTING?
240 JMP LL4 0 SUPPRESS LISTING
247 * DUMMY LISTING OUTPUT DEVICE DRIVER: SELECT PROPER DEVICE
248 LL9 LDA MO5 7 NON =-5
250 DAC MDEV MESSAGE: DEVICE?
251 JST STOP SET DEFAULT OR NEW DEVICE SELECTION
254 LL5 LDA O43 TTY = LISTING OUTPUT DEVICE (35 WORDS)
255 LL13 STA 0 REMOVE TRAILING BLANKS
267 TCA A = - LENGTH (IN WORDS) OF THE LINE TO PRINT
268 LL12 JST PRBF PRINT THE LINE
271 LL6 CALL O$LA LP = LISTING OUTPUT DEVICE
272 DAC OBUF OUTPUT BUFFER (60 WORDS)
274 LL8 CALL C$8TO6 MAG TAPE = LISTING OUTPUT DEVICE (UNIT 2)
275 DAC OBUF OUTPUT BUFFER
276 OCT 50 BUFFER LENGTH (WORDS)
278 DAC OBUF OUTPUT BUFFER
279 OCT 50 BUFFER LENGTH (WORDS)
280 OCT 2 TAPE UNIT 2 = OBJECT DECK
282 LL4 CRA NORMAL RETURN
283 STA INFL RESET 1ST-TIME-CALL FLAG OF THE LISTING DRIVER
284 LEX IRS F4LO SET RETURN ADDRESS
287 * CONVERT 1 DIGIT FOR PRINTING A 5 DIGIT LINENUMBER
288 * USED BY THE OUTPUT LISTING DRIVER
292 LDA NUMB NUMBER (OR RESIDUAL OF NUMBER) BEING CONVERTED
293 CV1 SUB* TEMP TEMP = POINTER INTO CONVERSION TABLE
296 STA NUMB STILL POSITIVE
299 CV2 IRS TEMP TEMP = POINTER TO NEXT ITEM IN CONVERSION TABLE
300 LDA TPTR POINTER TO TABLE
301 SUB TEMP MINUS THE CURRENT POINTER TO THE TABLE
305 LGR 1 = INDEX IN BUFFER
308 JMP CV3 COUNT = 0 => DIGIT WOULD BE 0
309 CV4 ADD O20 ='20 (TO MAKE ASCII DIGIT OF SPACE)
316 STA ZERO RESET THE LEADING ZERO FLAG
318 CV3 LDA ZERO NONZERO IF STILL LEADING ZERO'S
320 JMP* CDIG NONZERO, SO STILL A LEADING ZERO
321 JMP CV4 ZERO, SO NOT A LEADING ZERO, SO OUTPUT
323 **************************************
324 * STOP COMPILATION: F4$END *
325 **************************************
328 LDA DOBJ OBJECT DEVICE?
329 JST PUTR PUNCH TRAILER IN CASE OF PTP
333 OCP '102 YES; PTP OFF
334 ERA N5 OBJECT DEVICE MAGTAPE?
337 LDA DLST LISTING DEVICE MAGTAPE?
341 LE1 CALL O$ME WRITE EOF ON UNIT 2 (OBJECT OR LISTING DEVICE)
344 JST PRBF PRINT EOJ MESSGE
348 JMP* F4EN AND RESTART
349 MEOJ OCT 106612 END OF JOB MESSAGE
356 **************************************
357 * STOP AND (RE)LOAD DEVICE SELECTION *
358 **************************************
359 * CALLED BY SOURCE, OBJECT AND LISTING (DUMMY) DRIVERS OF F4-IOS
360 * CALLED BY F4$END (WHICH IS ALSO PART OF F4-IOS)
363 LDA DEFT LOAD DEFAULT DEVICE SETTINGS
364 HLT STOP AND POSSIBLY ADAPT THE SETTING
365 JST SDEV SET THE NEW DEVICE SELECTION
368 **************************************************************
369 * SAVE DEVICE SELECTION AS DEFINED DURING COMPILER (RE)START *
370 **************************************************************
371 * DEVICE SELECTION AS SPECIFIED IN REG-A (SOURCE, LIST, OBJECT), OR DEFAULT
373 SDEV DAC *-* SET SELECTED DEVICES
375 STA DEFT STORE REQUESTED DEVICES
376 LDA DEFT LOAD DEFAULT IF NOTHING SPECIFIED,
379 STA DSRC SOURCE DEVICE
382 STA DLST LISTING DEVICE
385 STA DOBJ OBJECT DEVICE
388 ******************************************************************
389 * PUNCH LEADER/TRAILER IN CASE PTP IS THE SELECTED OBJECT DEVICE *
390 ******************************************************************
391 * A[14-16] = SELECTED OBJECT DEVICE
394 ERA N1 =1 PUNCHER SELECTED?
396 CALL O$PLDR YES; PUNCH LEADER/TRAILER
399 **************************************
400 * PRINT MESSAGE FROM BUFFER ON TTY *
401 **************************************
403 * JST PRBF A = - MESSAGE LENGTH IN WORDS
406 PRBF DAC *-* PRINT BUFFER
407 STA 0 X = A = - BUFFER LENGTH
408 LDA* PRBF BUFFER ADDRESS
409 IRS PRBF SET RETURN ADDRESS
410 STA BA STORE BUFFER ADDRESS
413 OCP '104 SET OUTPUT MODE
415 JST PRA PRINT 2 CHARS IN A
419 P1 LDA* BA GET 2 CHARS
420 JST PRA PRINT 2 CHARS IN A
426 **************************************
427 * PRINT 2 CHARS FROM REG-A ON TTY *
428 **************************************
439 **************************************
440 * SWITCH VIA JUMP-TABLE *
441 **************************************
443 * LDA INDEX INTO JUMP-TABLE
445 * JMP -- JUMP-TABLE ENTRY 0 (INDEX 0)
446 * JMP -- JUMP-TABLE ENTRY 1 (INDEX 1)
454 **************************************
455 * ERROR HANDLING ROUTINES *
456 **************************************
458 STRT EQU '1000 COMPILER START ADDRESS
461 DAC MUR MESSAGE: UR (RECORD UNREADABLE)
465 DAC MEOT MESSAGE: EOT (END OF TAPE)
467 LDA DEFT LOAD DEVICE SETTINGS (REG-A)
468 JMP STRT RESTART COMPILATION
470 **************************************
472 **************************************
474 DEFT OCT 311 DEFAULT SELECTION OF IO DEVICES (I 3=HSR; L 1=TTY; O 1=PTP)
475 * DECIMAL CONVERION TABLE (USER FOR PRINTING NUMBERS)
476 DTAB OCT 23420 =10000
481 DSRC OCT 0 SOURCE INPUT DEVICE AS SPECIFIED DURING START
482 DLST OCT 0 LISTING DEVICE AS SPECIFIED DURING START
483 DOBJ OCT 0 OBJECT OUTPUT DEVICE AS SPECIFIED DURING START
484 IB6 OCT 0 SOURCE BUFFER ADDRESS
485 SCNT OCT 0 SOURCE RECORD COUNTER
486 INFL OCT 0 FLAG LISTING DRIVER (NONZERO WITH 1ST-TIME-CALL)
487 OSRC OCT 0 POINTER TO EXTERNAL OBJECT BUFFER
488 BA EQU * BUFFER ADDRESS
489 TEMP EQU * TEMP POINTER TO DECIMAL CONVERSION TABLE
490 ODES OCT 0 INDEXED POINTER TO INTERNAL OBJECT BUFFER
491 NUMB OCT 0 TEMP STORAGE FOR LINENUMBER TO CONVERT/PRINT
492 ZERO OCT 0 SET TO 0 WITH 1ST NONZERO DIGIT IN LINENUMBER
494 OPTR DAC OBUF POINTER TO OUTPUT BUFFER
495 TPTR DAC DTAB POINTER TO DECIMAL CONVERSION TABLE
497 OBFL EQU * OUTPUT BUFFER LENGTH FOR BINARY OUTPUT (WORDS)
498 OBUF OCT 4 OUTPUT BUFFER (60 WORDS; MUST NOT EXCEED 60 WORDS)
517 LBUF BCI 3, END OF LISTING BUFFER
525 * MESSAGE: DRIVER? (NO DEVICE DRIVER FOR REQUESTED DEVICE) 5 WORDS LONG
526 MDEV OCT 106612 MESSAGE: DEVICE?
532 MEOT OCT 106612 MESSAGE: EOT (END OF TAPE)
535 MUR OCT 106612 MESSAGE: UR (UNREADABLE RECORD)
546 MO50 OCT 177730 ='-50
547 ILPB OCT 40050 INDEX LISTING BUFFER
548 SPSP OCT 120240 <SPACE><SPACE>
549 IFLG OCT 40001 INDEX FLAG