From 6ad6bd16506f180bf1a9214233bae33ccf25a299 Mon Sep 17 00:00:00 2001 From: hachti Date: Thu, 14 Dec 2006 06:47:18 +0000 Subject: [PATCH] *** empty log message *** --- programs/fortran/src/f4$dum.asm | 148 +++++ programs/fortran/src/f4$ios-b.asm | 552 ++++++++++++++++++ .../src/{fortran-corrected.asm => frtn.asm} | 0 3 files changed, 700 insertions(+) create mode 100644 programs/fortran/src/f4$dum.asm create mode 100644 programs/fortran/src/f4$ios-b.asm rename programs/fortran/src/{fortran-corrected.asm => frtn.asm} (100%) diff --git a/programs/fortran/src/f4$dum.asm b/programs/fortran/src/f4$dum.asm new file mode 100644 index 0000000..d08d948 --- /dev/null +++ b/programs/fortran/src/f4$dum.asm @@ -0,0 +1,148 @@ +* F4$DUM - DEC 10 2006 - VERSION 1 +* +* FORTRAN COMPILER DUMMY DEVICE DRIVERS AND DATA POOL INITIALISATION +* +* THIS MODULE MUST BE THE LAST ONE BEING LINKED TO THE F4 COMPILER. +* THESE ROUTINES ARE CALLED BY F4-IOS AND THE INITIALISATION ROUTINE +* IS OVERWRITTEN BY THE DATA POOL AFTER INITIALISATION. +* +* HONEYWELL X16 16 BIT COMPUTER SOFTWARE +* +* PROGRAM LENGTH: 48 WORDS +* +* THIS SOURCE IS RECREATED FROM THE EXISTING SLST FILE: +* - SLST-FRTN.IMG (WHICH ORIGINATES FROM HONEYWELL) +* +* THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) +* + SUBR F4$INI,SIZE + SUBR F4$DUM,DUM + SUBR O$LH + SUBR O$ME +* + SUBR I$AA + SUBR I$CA + SUBR I$PA + SUBR I$MA + SUBR C$6TO8,C$68 +* + SUBR O$PB + SUBR O$AB + SUBR O$MB +* + SUBR O$LA + SUBR C$8TO6,C$86 + SUBR O$MA +* + REL +* +DUM EQU * + DAC *-* + JMP* *-1 +* +O$LH EQU * +O$ME EQU * + DAC *-* + IRS *-1 + JMP* *-2 +* +* SOURCE INPUT +I$AA EQU * +I$CA EQU * +I$PA EQU * +I$MA EQU * +C$68 EQU * + DAC *-* DUMMY SOURCE INPUT + JMP* SI +* +* OBJECT OUTPUT +O$PB EQU * +O$AB EQU * +O$MB EQU * +O$MS EQU * + DAC *-* DUMMY OBJECT OUTPUT + JMP* OO +* +* LISTING OUTPUT +O$LA EQU * +C$86 EQU * +O$MA EQU * + DAC *-* DUMMY LISTING OUTPUT + JMP* LL +* +* JUMP TABLE TO APPROPRIATE DUMMY DRIVER IN F4-IOS +SI XAC F4$DUI POINTER TO DUMMY SOURCE INPUT DEVICE DRIVER +OO XAC F4$DUO POINTER TO DUMMY OBJECT OUTPUT DEVICE DRIVER +LL XAC F4$DUS POINTER TO DUMMY LISTING OUTPUT DEVICE DRIVER +* +* PURPOSE OF INI ROUTINE IS TWOFOLD: +* - INITIALIZE THE MEMORY BOUNDARIES BEING USED BY THE F4 COMPILER CODE +* AND I/O DRIVERS TO DETERMINE THE SPACE FOR THE DATA POOL +* - INITIALIZE AND LINK THE DATA POOL TO THE F4 COMPILER VIA SECTOR 0 +* +DP EQU * START OF DATA POOL +* +SIZE DAC *-* + LDA SIZE GET RETURN ADDRESS + SUB N1 MINUS 1 + STA SIZE = CALLING ADDRESS + LDA NOP + STA* SIZE REPLACE CALL BY NOP +NEXT LDA MTOP MEMORY BOUNDARY + SUB CTOP MINUS CODE LENGTH + SUB O103 ='103 + STA LO SAVE DATAPOOL SIZE + LDA* MTOP CONTENT MEM BOUNDARY + IAB => B = CONTENT MEM BOUNDARY + LDA PAT PATTERN + STA* MTOP STORE PATTERN + LDA* MTOP AND TRY TO GET IT BACK + SNZ + JMP* SIZE MEMORY SIZE = MTOP + IAB + STA* MTOP RESTORE CONTENT MEM BOUNDARY + LDA MTOP + ADD M4K INCREASE MEM BOUNDARY WITH 4K + STA MTOP + ERA UPP 16K?/20K? + SZE + JMP NEXT NO +* +* THE ADAPTION PROCESS STOPS HERE WHEN MTOP = 16K +* THE DATA POOL SIZE (LO) IS ADAPTED THEN FOR THE MTOP = 12K +* FOR A 16K MACHINE THE UPPER 4K IS NOT USED FOR THE DATAPOOL. +* TO USE THAT UPPER 4K, THE VALUE OF 'UPP' HAS TO CHANCE TO '50000 +* + JMP* SIZE YES; STOP IF MTOP = UPP +* +* WORKSPACE +* +MTOP OCT 20000 MINIMUM MEMORY TOP (8K INIT) +NOP NOP NOP OPERATION +CTOP DAC DP CODE TOP +UPP OCT 40000 16K (20K => '50000) +M4K OCT 10000 4K +PAT OCT 12525 MEMORY PATTREN +O103 OCT 103 ='103 +N1 OCT 1 +* +* +* THE FOLLOWING TABLE LINKS THE DATA POOL VIA SECTOR 0 TO THE F4 COMPILER +* +* + ABS + ORG '100 + DAC DP-4,1 (100) + DAC DP-3,1 (101) + DAC DP-2,1 (102) + DAC DP-1,1 (103) + DAC DP,1 (104) + DAC DP+1,1 (105) + DAC DP+2,1 (106) + DAC DP+3,1 (107) + DAC DP+4,1 (110) + DAC DP+5,1 (111) + DAC DP+6,1 (112) +LO DAC DP+7 (113) DATA POOL SIZE +* + END diff --git a/programs/fortran/src/f4$ios-b.asm b/programs/fortran/src/f4$ios-b.asm new file mode 100644 index 0000000..8560780 --- /dev/null +++ b/programs/fortran/src/f4$ios-b.asm @@ -0,0 +1,552 @@ +* F4$IOS-B - DEC 12 2006 - VERSION 1 +* +* FORTRAN COMPILER IO SELECTOR +* +* WHEN THE COMPILER IS STARTED, REGISTER A SPECIFIES THE DEVICES +* TO BE USED FOR SOURCE INPUT, OBJECT OUTPUT AND FOR LISTING OUTPUT. +* THE IOS SELECTOR HONORS THIS SELECTION BY ACTIVATING THE SELECTED +* DEVICES FOR THESE TASKS. +* +* THE FOLOWING OPTIONS ARE SUPPORTED: +* +* A[ 8-10] SOURCE INPUT DEVICE (1=TTY 2=CR 3=HSR 4=MAGTAPE-UNIT 1) +* A[11-13] LISTING DEVICE (0=SUP 1=TTY 2=LP 4=MAGTAPE-UNIT 2) +* A[14-16] OBJECT OUTPUT DEVICE (0=SUP 1=PTP 2=TTY 4=MAGTAPE-UNIT 2) +* THE LISTED DEVICE ALLOCATION IS SET BY F4IOS +* THIS VERSION OF F4IOS DOES NOT, WITHOUT MODIFICATION, SUPPORT OTHER +* DEVICES FOR THE SPECIFIED TASKS. +* THIS ALSO MEANS THAT TAPE UNIT 2 CAN EITHER BE USED FOR +* OBJECT OUTPUT OR FOR LISTING OUTPUT +* +* IN CASE NO DEVICE SELECTION IS SPECIFIED IN REGISTER A, A DEFAULT +* SELECTION IS MADE BY F4IOS: +* - SOURCE INPUT 3=HSR +* - LISTING OUTPUT 1=TTY +* - OBJECT OUTPUT 1=PTP +* +* F4IOS LINKS, TO SUPPORT THE SPECIFIED IO, THE DRIVERS FOR THESE DEVICES. +* HOWEVER, IF FOR INSTANCE NO MAGTAPE IS AVAILABLE IN A PARTICULAR +* INSTALLATION, THE MAGTAPE DRIVER CAN BE REPLACED BY A DUMMY DRIVER. +* THE COMPILER FOOTPRINT IN MEMORY BECOMES SMALLER THEN. DO NOT LINK +* THE MAGTAPE DRIVER IN THAT CASE. THE F4$DUM MODULE RESOLVES THE CALLS +* TO THE MAGTAPE DRIVER AND MUST BE THAT LAST MODULE TO BE LINKED. +* +* HONEYWELL X16 16 BIT COMPUTER SOFTWARE +* +* PROGRAM LENGTH: 415 WORDS +* +* THIS SOURCE IS RECREATED FROM THE EXISTING SLST FILE: +* - SLST-FRTN.IMG (WHICH ORIGINATES FROM HONEYWELL) +* +* THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) +* +* SUBR F4$INT,F4IN IO INITIALISATION ROUTINE +* SUBR F4$IN,F4SI GENERAL SOURCE INPUT ROUTINE +* SUBR F4$OUT,F4OO GENERAL OBJECT OUTPUT ROUTINE +* SUBR F4$SYM,F4LO GENERAL LISTING OUTPUT ROUTINE +* SUBR F4$END,F4EN END COMPILATION +* +* SUBR F4$DUI,IL1 DUMMY SOURCE INPUT DRIVER +* SUBR F4$DUO,OL4 DUMMY OBJECT OUTPUT DRIVER +* SUBR F4$DUS,LL9 DUMMY LISTING OUTPUT DRIVER +* + SUBR F4$INT,F4IN + SUBR F4$IN,F4SI + SUBR F4$OUT,F4OO + SUBR F4$SYM,F4LO + SUBR F4$END,F4EN +* + SUBR F4$DUI,IL1 + SUBR F4$DUO,OL4 + SUBR F4$DUS,LL9 + REL +* +******************************************************************* +* F4$INT -- INIT COMPILER DATA POOL AND STORE IO DEVICE SELECTION * +******************************************************************* +* +F4IN DAC *-* + JST SDEV SET THE SELECTED DEVICES + JST PUTR PUNCH LEADER IN CASE PTP IS OBJECT DEVICE + CALL F4$INI SET THE SIZE OF THE DATA POOL + CRA + STA SCNT SOURCE INPUT RECORD COUNTER/LINENUMBER = 0 + IRS INFL SET 1ST-TIME-CALL FLAG FOR LISTING DRIVER + JMP* F4IN +* +************************************** +* GENERAL SOURCE INPUT ROUTINE * +* CALLING SEQUENCE: * +* CALL F4$IN * +* DAC SOURCEBUFFER * +************************************** +* +F4SI DAC *-* SOURCE INPUT DRIVER + LDA* F4SI GET SOURCE BUFFER ADDRESS + STA IB1 AND STORE + STA IB2 + STA IB3 + STA IB4 + STA IB5 + STA IB6 +IL6 LDA DSRC LOAD SELECTED SOURCE DEVICE + JST SWCH JMP SWITCH + JMP IL1 0 NON + JMP IL2 1 TTY + JMP IL3 2 CR + JMP IL4 3 HSR + JMP IL5 4 MAG TAPE + JMP IL1 5 NON + JMP IL1 6 NON +* DUMMY SOURCE INPUT DEVICE DRIVER: SELECT PROPER DEVICE +IL1 LDA MO5 7 NON =-5 MESSAGE LENGTH, 5 WORDS LONG + JST PRBF + DAC MDEV MESSAGE: DEVICE? (NO DRIVER FOR REQUESTED DEVICE) + JST STOP SET DEFAULT OR NEW DEVICE SELECTION + JMP IL6 +* +IL2 CALL I$AA TTY = SOURCE INPUT DEVICE +IB1 DAC *-* SOURCE BUFFER ADDRESS + JMP IL2 EOM/EOF RETURN + JMP IL7 NORMAL RETURN +IL3 CALL I$CA CR = SOURCE INPUT DEVICE +IB2 DAC *-* SOURCE BUFFER ADDRESS + JMP IL3 EOM/EOF RETURN + JMP IL7 NORMAL RETURN +IL4 CALL I$PA HSR = SOURCE INPUT DEVICE +IB3 DAC *-* SOURCE BUFFER ADDRESS + JMP IL4 + JMP IL7 +IL5 CALL I$MA MT = SOURCE INPUT DEVICE +IB4 DAC *-* SOURCE BUFFER ADDRESS + OCT 50 BUFFER LENGTH (WORDS) + OCT 1 TAPE UNIT 1 = SOURCE DECK + JMP ERR0 RECORD NOT READABLE RETURN + JMP ERR1 END OF TAPE RETURN + JMP IL5 END OF FILE RETURN; READ NEXT FILE + CALL C$6TO8 NORMAL RETURN; CONVERT RECORD TO ASCII +IB5 DAC *-* SOURCE BUFFER ADDRESS + OCT 50 BUFFER LENGTH +IL7 LDA SCNT SOURCE RECORD COUNTER + ADD N1 =1 + SSP + STA SCNT SOURCE RECORD COUNTER + IRS F4SI SET RETURN ADDRESS + JMP* F4SI +* +************************************** +* GENERAL OBJECT OUTPUT ROUTINE * +* CALLING SEQUENCE: * +* A = OBJECT BUFFER ADDRESS * +* X = - BUFFER LENGTH (WORDS) * +* CALL F4$OUT * +************************************** +* +F4OO DAC *-* OBJECT OUTPUT DRIVER + STA OSRC EXTERNAL OBJECT BUFFER ADDRESS + LDA 0 - BUFFER LENGTH (WORDS) + TCA + STA OBFL + BUFFER LENGTH (WORDS) + STA MTBL + ADD OPTR POINTER TO OUTPUT BUFFER + ADD IFLG INDEX FLAG + STA ODES INDEXED DESTINATION +OL1 LDA* OSRC MOVE OBJECT TO INTERNAL OUTPUT BUFFER + STA* ODES + IRS 0 + JMP OL1 +OL6 LDA DOBJ + JST SWCH JMP SWITCH + JMP* F4OO 0 SUPPRESS OBJECT OUTPUT + JMP OL2 1 PTP + JMP OL3 2 TTY + JMP OL4 3 NON + JMP OL5 4 MAG TAPE + JMP OL4 5 NON + JMP OL4 6 NON +* DUMMY OBJECT OUTPUT DEVICE DRIVER: SELECT PROPER DEVICE +OL4 LDA MO5 7 NON =-5 + JST PRBF + DAC MDEV MESSAGE: DEVICE? + JST STOP SET DEFAULT OR NEW DEVICE SELECTION + JST PUTR PUNCH TRAILER IN CASE PTP IS SELECTED + JMP OL6 +* +OL2 CALL O$PB PTP = OBJECT OUTPUT DEVICE + DAC OBUF OUTPUT BUFFER ADDRESS + JMP* F4OO EXIT +OL3 CALL O$AB TTY = OBJECT OUTPUT DEVICE + DAC OBUF OUTPUT BUFFER ADDRESS + JMP* F4OO EXIT +OL5 CALL O$MB MAG TAPE = OBJECT OUTPUT DEVICE + DAC OBUF+1 BUFFER ADDRESS +MTBL OCT 0 BUFFER LENGTH (WORDS) + OCT 2 TAPE UNIT 2 = OBJECT DECK + JMP ERR1 END OF TAPE RETURN + JMP* F4OO EXIT +* +************************************** +* GENERAL LISTING OUTPUT ROUTINE * +* CALLING SEQUENCE: * +* CALL F4$SYM * +* DAC LINEBUFFER * +************************************** +* +F4LO DAC *-* LISTING OUTPUT DRIVER + LDA SPSP + STA OBUF SET LINENUMBER FIELD + STA OBUF+1 (6 CHARS) TO SPACES + STA OBUF+2 + LDA* F4LO EXTERNAL BUFFER ADDRESS + ADD ILPB +INDEX / LENGTH + STA OSRC INDEXED EXTERNAL BUFFER ADDRESS + LDA MO50 ='-50 + STA 0 X = INDEX INTO THE LINE BUFFER +LL1 LDA* OSRC MOVE LINE TO INTERNAL DRIVER BUFFER + STA LBUF,1 + IRS 0 + JMP LL1 +LL10 LDA INFL NON-ZERO WITH 1ST CALL + SNZ + JMP LL2 EQUAL 0 +* 1ST CALL OF LISTING DRIVER + LDA* F4LO EXTERNAL BUFFER ADDRESS + ERA IB6 EQUAL TO SOURCE BUFFER ADDRESS?? + SZE + JMP LEX NOT EQUAL; EXIT + LDA DLST YES; GET REQUIRED LISTING DEVICE + ERA N2 EQUAL 2 ? (LP) + SZE + JMP LL2 NOT LP + CALL O$LH YES, LP. INIT THE HEADER + DAC OBUF +LL2 LDA* F4LO EXTERNAL BUFFER ADDRESS + ERA IB6 EQUAL TO SOURCE BUFFER ADDRESS?? + SZE + JMP LL3 NO + LDA TPTR YES, EQUAL TO SOURCE BUFFER + STA TEMP TEMP = PTR TO DEC CONV TAB + LDA SCNT GET SOURCE LINE NUMBER + STA NUMB LINENUMBER TO PRINT +* WITH ZERO BEING TRUE, LEADING ZERO'S OF THE LINENUMBER ARE SUPPRESSED + IRS ZERO LEADING ZERO FLAG IS TRUE (SET TO FALSE WITH 1ST NONZERO) + JST CDIG DIGIT 1 + JST CDIG DIGIT 2 + JST CDIG DIGIT 3 + JST CDIG DIGIT 4 + JST CDIG DIGIT 5 +LL3 LDA DLST WHICH DRIVER TO OUTPUT LISTING? + JST SWCH JMP SWITCH + JMP LL4 0 SUPPRESS LISTING + JMP LL5 1 TTY + JMP LL6 2 LP + JMP LL9 3 NON + JMP LL8 4 MAG TAPE + JMP LL9 5 NON + JMP LL9 6 NON +* DUMMY LISTING OUTPUT DEVICE DRIVER: SELECT PROPER DEVICE +LL9 LDA MO5 7 NON =-5 + JST PRBF + DAC MDEV MESSAGE: DEVICE? + JST STOP SET DEFAULT OR NEW DEVICE SELECTION + JMP LL10 +* +LL5 LDA O43 TTY = LISTING OUTPUT DEVICE (35 WORDS) +LL13 STA 0 REMOVE TRAILING BLANKS + LDA OBUF,1 + ERA SPSP + SZE + JMP LL11 + LDA 0 + SNZ + JMP LL12 + SUB N1 + JMP LL13 +LL11 IRS 0 + LDA 0 + TCA A = - LENGTH (IN WORDS) OF THE LINE TO PRINT +LL12 JST PRBF PRINT THE LINE + DAC OBUF + JMP LL4 +LL6 CALL O$LA LP = LISTING OUTPUT DEVICE + DAC OBUF OUTPUT BUFFER (60 WORDS) + JMP LL4 +LL8 CALL C$8TO6 MAG TAPE = LISTING OUTPUT DEVICE (UNIT 2) + DAC OBUF OUTPUT BUFFER + OCT 50 BUFFER LENGTH (WORDS) + CALL O$MA + DAC OBUF OUTPUT BUFFER + OCT 50 BUFFER LENGTH (WORDS) + OCT 2 TAPE UNIT 2 = OBJECT DECK + JMP ERR1 EOT RETURN +LL4 CRA NORMAL RETURN + STA INFL RESET 1ST-TIME-CALL FLAG OF THE LISTING DRIVER +LEX IRS F4LO SET RETURN ADDRESS + JMP* F4LO +* +* CONVERT 1 DIGIT FOR PRINTING A 5 DIGIT LINENUMBER +* USED BY THE OUTPUT LISTING DRIVER +CDIG DAC *-* + CRA + STA 0 X=0 (COUNT=0) + LDA NUMB NUMBER (OR RESIDUAL OF NUMBER) BEING CONVERTED +CV1 SUB* TEMP TEMP = POINTER INTO CONVERSION TABLE + SPL + JMP CV2 NEGATIVE + STA NUMB STILL POSITIVE + IRS 0 COUNT + 1 + JMP CV1 +CV2 IRS TEMP TEMP = POINTER TO NEXT ITEM IN CONVERSION TABLE + LDA TPTR POINTER TO TABLE + SUB TEMP MINUS THE CURRENT POINTER TO THE TABLE + STA T1 + ADD N1 +1 + TCA + LGR 1 = INDEX IN BUFFER + IMA 0 A = COUNT + SNZ + JMP CV3 COUNT = 0 => DIGIT WOULD BE 0 +CV4 ADD O20 ='20 (TO MAKE ASCII DIGIT OF SPACE) +CV5 ALR '10 + IRS T1 + JMP CV5 + ADD OBUF,1 + STA OBUF,1 + CRA + STA ZERO RESET THE LEADING ZERO FLAG + JMP* CDIG +CV3 LDA ZERO NONZERO IF STILL LEADING ZERO'S + SZE + JMP* CDIG NONZERO, SO STILL A LEADING ZERO + JMP CV4 ZERO, SO NOT A LEADING ZERO, SO OUTPUT +* +************************************** +* STOP COMPILATION: F4$END * +************************************** +* +F4EN DAC *-* + LDA DOBJ OBJECT DEVICE? + JST PUTR PUNCH TRAILER IN CASE OF PTP + LDA DOBJ + ERA N1 PTP? + SNZ + OCP '102 YES; PTP OFF + ERA N5 OBJECT DEVICE MAGTAPE? + SNZ + JMP LE1 YES + LDA DLST LISTING DEVICE MAGTAPE? + ERA N4 + SZE + JMP LE2 NO +LE1 CALL O$ME WRITE EOF ON UNIT 2 (OBJECT OR LISTING DEVICE) + OCT 2 UNIT 2 +LE2 LDA MO6 ='-6 + JST PRBF PRINT EOJ MESSGE + DAC MEOJ + JST STOP STOP + LDA DEFT + JMP* F4EN AND RESTART +MEOJ OCT 106612 END OF JOB MESSAGE + BCI 1,EN + BCI 1,D + BCI 1,OF + BCI 1, J + BCI 1,OB +* +************************************** +* STOP AND (RE)LOAD DEVICE SELECTION * +************************************** +* CALLED BY SOURCE, OBJECT AND LISTING (DUMMY) DRIVERS OF F4-IOS +* CALLED BY F4$END (WHICH IS ALSO PART OF F4-IOS) +* +STOP DAC *-* + LDA DEFT LOAD DEFAULT DEVICE SETTINGS + HLT STOP AND POSSIBLY ADAPT THE SETTING + JST SDEV SET THE NEW DEVICE SELECTION + JMP* STOP +* +************************************************************** +* SAVE DEVICE SELECTION AS DEFINED DURING COMPILER (RE)START * +************************************************************** +* DEVICE SELECTION AS SPECIFIED IN REG-A (SOURCE, LIST, OBJECT), OR DEFAULT +* +SDEV DAC *-* SET SELECTED DEVICES + SZE + STA DEFT STORE REQUESTED DEVICES + LDA DEFT LOAD DEFAULT IF NOTHING SPECIFIED, + LRL 6 + ANA M7 + STA DSRC SOURCE DEVICE + CRA + LLL 3 + STA DLST LISTING DEVICE + CRA + LLL 3 + STA DOBJ OBJECT DEVICE + JMP* SDEV +* +****************************************************************** +* PUNCH LEADER/TRAILER IN CASE PTP IS THE SELECTED OBJECT DEVICE * +****************************************************************** +* A[14-16] = SELECTED OBJECT DEVICE +* +PUTR DAC *-* + ERA N1 =1 PUNCHER SELECTED? + SNZ + CALL O$PLDR YES; PUNCH LEADER/TRAILER + JMP* PUTR +* +************************************** +* PRINT MESSAGE FROM BUFFER ON TTY * +************************************** +* CALLING SEQUENCE: +* JST PRBF A = - MESSAGE LENGTH IN WORDS +* DAC MESSAGE +* +PRBF DAC *-* PRINT BUFFER + STA 0 X = A = - BUFFER LENGTH + LDA* PRBF BUFFER ADDRESS + IRS PRBF SET RETURN ADDRESS + STA BA STORE BUFFER ADDRESS + SKS '104 TTY READY? + JMP *-1 + OCP '104 SET OUTPUT MODE + LDA CRLF + JST PRA PRINT 2 CHARS IN A + LDA 0 + SNZ + JMP* PRBF +P1 LDA* BA GET 2 CHARS + JST PRA PRINT 2 CHARS IN A + IRS BA + IRS 0 + JMP P1 + JMP* PRBF +* +************************************** +* PRINT 2 CHARS FROM REG-A ON TTY * +************************************** +* +PRA DAC *-* + LRL '10 + OTA 4 + JMP *-1 + LLL '10 + OTA 4 + JMP *-1 + JMP* PRA +* +************************************** +* SWITCH VIA JUMP-TABLE * +************************************** +* CALLING SEQUENCE: +* LDA INDEX INTO JUMP-TABLE +* JST SWCH +* JMP -- JUMP-TABLE ENTRY 0 (INDEX 0) +* JMP -- JUMP-TABLE ENTRY 1 (INDEX 1) +* ETC +* +SWCH DAC *-* SWITCH + ADD SWCH + STA SWCH + JMP* SWCH +* +************************************** +* ERROR HANDLING ROUTINES * +************************************** +* +STRT EQU '1000 COMPILER START ADDRESS +ERR0 LDA MO2 =-2 + JST PRBF + DAC MUR MESSAGE: UR (RECORD UNREADABLE) + JMP ERR2 +ERR1 LDA MO3 =-3 + JST PRBF + DAC MEOT MESSAGE: EOT (END OF TAPE) +ERR2 JST STOP + LDA DEFT LOAD DEVICE SETTINGS (REG-A) + JMP STRT RESTART COMPILATION +* +************************************** +* F4-IOS DATA AREA * +************************************** +* +DEFT OCT 311 DEFAULT SELECTION OF IO DEVICES (I 3=HSR; L 1=TTY; O 1=PTP) +* DECIMAL CONVERION TABLE (USER FOR PRINTING NUMBERS) +DTAB OCT 23420 =10000 + OCT 1750 =1000 + OCT 144 =100 + OCT 12 =10 + OCT 1 =1 +DSRC OCT 0 SOURCE INPUT DEVICE AS SPECIFIED DURING START +DLST OCT 0 LISTING DEVICE AS SPECIFIED DURING START +DOBJ OCT 0 OBJECT OUTPUT DEVICE AS SPECIFIED DURING START +IB6 OCT 0 SOURCE BUFFER ADDRESS +SCNT OCT 0 SOURCE RECORD COUNTER +INFL OCT 0 FLAG LISTING DRIVER (NONZERO WITH 1ST-TIME-CALL) +OSRC OCT 0 POINTER TO EXTERNAL OBJECT BUFFER +BA EQU * BUFFER ADDRESS +TEMP EQU * TEMP POINTER TO DECIMAL CONVERSION TABLE +ODES OCT 0 INDEXED POINTER TO INTERNAL OBJECT BUFFER +NUMB OCT 0 TEMP STORAGE FOR LINENUMBER TO CONVERT/PRINT +ZERO OCT 0 SET TO 0 WITH 1ST NONZERO DIGIT IN LINENUMBER +T1 OCT 0 +OPTR DAC OBUF POINTER TO OUTPUT BUFFER +TPTR DAC DTAB POINTER TO DECIMAL CONVERSION TABLE +* +OBFL EQU * OUTPUT BUFFER LENGTH FOR BINARY OUTPUT (WORDS) +OBUF OCT 4 OUTPUT BUFFER (60 WORDS; MUST NOT EXCEED 60 WORDS) + OCT 300 + OCT 0 + OCT 2 + OCT 302 + BCI 3, + BCI 3,EOB + BCI 3,000300 + BCI 1, + BCI 3,000000 + BCI 1, + BCI 3,000002 + BCI 3, + BCI 3, + BCI 3, + BCI 3, + BCI 3, + BCI 3, + BCI 3, +LBUF BCI 3, END OF LISTING BUFFER + BCI 3, + BCI 3, + BCI 3, + BCI 3, + BCI 2, +* +CRLF EQU * +* MESSAGE: DRIVER? (NO DEVICE DRIVER FOR REQUESTED DEVICE) 5 WORDS LONG +MDEV OCT 106612 MESSAGE: DEVICE? + BCI 1,DE + BCI 1,VI + BCI 1,CE + BCI 1,? +* +MEOT OCT 106612 MESSAGE: EOT (END OF TAPE) + BCI 1,EO + BCI 1,T +MUR OCT 106612 MESSAGE: UR (UNREADABLE RECORD) + BCI 1,UR +MO3 OCT 177775 +MO2 OCT 177776 +M7 OCT 7 +MO6 OCT 177772 +N4 OCT 4 +N5 OCT 5 +O20 OCT 20 +O43 OCT 43 +N2 OCT 2 +MO50 OCT 177730 ='-50 +ILPB OCT 40050 INDEX LISTING BUFFER +SPSP OCT 120240 +IFLG OCT 40001 INDEX FLAG +MO5 OCT 177773 +N1 OCT 1 + END diff --git a/programs/fortran/src/fortran-corrected.asm b/programs/fortran/src/frtn.asm similarity index 100% rename from programs/fortran/src/fortran-corrected.asm rename to programs/fortran/src/frtn.asm -- 2.32.0