{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: LOADERPM867)}}
====== LOADERPM867 ======
(George Source)
**Macros used:** [[george:macro:ADDRESS|ADDRESS]], [[george:macro:BXGE|BXGE]], [[george:macro:DCA|DCA]], [[george:macro:DUMP|DUMP]], [[george:macro:FINDPEREC|FINDPEREC]], [[george:macro:GELL|GELL]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GPERI|GPERI]], [[george:macro:JBUSY|JBUSY]], [[george:macro:JDISENG|JDISENG]], [[george:macro:JRIGHT|JRIGHT]], [[george:macro:JWRONG|JWRONG]], [[george:macro:LGEOG|LGEOG]], [[george:macro:MARK|MARK]], [[george:macro:NAME|NAME]]
22^= #BAS LOADPOST,0
23DW ...#SEG LOADERPM86 [M.C.D. MANN
23HF ...# ########################################################
23L4 ...#
23NM ...# (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982
23R= ...#
23TT ...# #########################################################
23YG #OPT K0LOADERPM=K0LOADER>K0KERNEL>K0ALLGEO
24D6 #LIS K0LOADERPM
24XQ #
25CB #
25X2 #
26BL # THIS SEGMENT IS ENTERED BY EXECUTIVE (VIA K0)
26W= # AT K1LOADERPM WHENEVER A SYSTEM ERROR IS DETECTED
27*W # DURING EXECUTION OF LOADER
27TG #
28*6 #
28SQ #
29#B #
29S2 # DATA WORDS FOR USE BY THE POST-MORTEM ROUTINES
2=?L #
2=R= JLXX 0 [TO CONTAIN ACCUMULATORS ...
2?=W #REP 7 [ ... AFTER A SYSTEM ERROR
2?QG 0
2#=6 JLINSTR 0 [TO CONTAIN ILLEGAL INSTR ADDRESS
2#PQ 0 [TO CONTAIN ILLEGAL INSTRUCTION
2*9B OPMSTOP BRN OPMSTOP [FOR PLUGGING K0
2*P2 OPMTYPES
2B8L 4H00NO
2BN= 4H00N
2C7W 4H00YE
2CMG 4H00Y
2D76 4H00LI
2DLQ 4H00L
2F6B 4H00MI
2FL2 4H00M
2G5L 4H00LS
2GK= 4H00LL
2H4W 4H00MS
2HJG 4H00ML
2J46 4H00DU
2JHQ 4H00D
2K3B 4H00LD
2KH2 4H00MD
2L2L 4H00RI
2LG= 4H00XL
2L^W OPMTYPEND
2MFG #GAP 4 [FOR FURTHER TYPES TO BE MENDED IN
2M^6 OPMBRNTAB
2NDQ BRN PMNO
2NYB BRN PMNO
2PD2 BRN PMYES
2PXL BRN PMYES
2QC= BRN PMLS
2QWW BRN PMLS
2RBG BRN PMLS
2RW6 BRN PMLS
2S*Q BRN PMLS
2STB BRN PMLS
2T*2 BRN PMLS
2TSL BRN PMLS
2W#= BRN PMD
2WRW BRN PMD
2X?G BRN PMD
2XR6 BRN PMD
2Y=Q BRN PMRI
2YQB BRN PMXL
2^=2 #GAP 4 [TO CORRESPOND WITH THE PM TYPE TABLE
2^PL OPMLPTYPE 2 [INTERNAL TYPE OF LP
329= ...OPMENDGEO +K19 [LAST WORD OF GEORGE TO BE PRINTED
32NW OPMCONTYPE #77 [INTERNAL TYPE OF OPERATOR'S CONSOLE
338G OPMCOMMA #34
33N6 OPMTEN 10
347Q OPMSP #20
34MB OPMLPNO -1 [UNIT NUMBER OF LP
3572 OPMSPACES 4H
35LL OPMINBUFF 8H [CONSOLE INPUT BUFFER
366= OPMBUFF 52H000A * * *
36KW 52H * * * * *
375G 17H
37K6 OPMCNTRL1 +OPMBUFF.3 [POINTER TO PRINTER BUFFER
384Q OPMHEAD 8H000AGEOR
38JB #SKI G4
3942 4HGE 4
39HL #SKI G3
3=3= 4HGE 3
3=GW 28H LOADER POST-MORTEM MARK 0 I
3?2G #OPT JLMARK=0?+37?-1
3?G6 #FID 6,11,+G4MARK
3?^Q 8HSSUE 00
3#FB #OPT JLISSUE=0?+37?-1
3#^2 #FID 6,11,+G3ISSUE/10
3*DL #FID 12,17,+G3ISSUE-(G3ISSUE/10*10)
3*Y= 8H DATE:
3BCW OPMDATE 16H TIME:
3BXG OPMTIME 8H
3CC6 OPMCNTRL2 +OPMHEAD.3
3CWQ OPMLPCNT 77
3DBB OPMCNTRL3 +OPMBROKE.3
3DW2 #
3F*L # PSEUDO-ACTIVITY BLOCK FOR OPERATOR'S CONSOLE AND LINE PRINTER
3FT= #
3G#W #REP CPPTR-CHAINADD+1
3GSG 0
3H#6 [DEVICE LIST POINTERS FOR:
3HRQ OPMCON 0 [CENTRAL CONSOLE
3J?B 0 [ REPLY WORD
3JR2 OPMLP 0 [CENTRAL LINE PRINTER
3K=L 0 [ REPLY WORD
3KQ= OPMX1 0 [FOR USE BY OCTAL ROUTINE
3L9W OPMX3 0
3LPG OPMPRLINK 0 [LINK FOR OPMPRINT ROUTINE
3M96 OPMINLINK 0 [LINK FOR OINCON ROUTINE
3MNQ OPMOUTLINK 0 [LINK FOR OUTCON ROUTINE
3N8B OPMLPLINK 0 [LINK FOR OUTLP ROUTINE
3NN2 OPMFIN 0 [LAST CORE ADDRESS TO BE PRINTED
3P7L ...OPMLAST 18*1024 [LENGTH OF LOADER
3PM= ...OPMK18 -K42 [LOADER'S CORE DATUM
3Q6W XK9PERSEC 1000/K9
3QLG XECTIME +K30+K72 [TIME IN K9'S SINCE MIDNIGHT
3R66 XECDATE +K30+K70 [DATE IN DAYS SINCE 31.12.1899
3RKQ YEARS 73050 [DATES < 2100 ONLY ALLOWED
3S5B TSFTF 365*4+1 [DIVISION CONSTANT FOR YEARS
3S*8 ...XK18 +K18
3SK2 #
3T4L # LIST OF THE NUMBER OF DAYS IN EACH MONTH
3TJ= #
3W3W 0
3WHG NDAYS 31 [JANUARY
3X36 -1 [FEBRUARY-SPECIAL (28 OR 29)
3XGQ 31 [MARCH
3Y2B 30 [APRIL
3YG2 31 [MAY
3Y^L 30 [JUNE
3^F= 31 [JULY
3^YW 31 [AUGUST
42DG 30 [SEPTEMBER
42Y6 31 [OCTOBER
43CQ 30 [NOVEMBER
43XB 31 [DECEMBER
44C2 #
44WL # LIST OF THREE CHARACTER NAMES FOR EACH MONTH
45B= #
45TW NAME 4HN JA
46*G 4HB FE
46T6 4HR MA
47#Q 4HR AP
47SB 4HY MA
48#2 4HN JU
48RL 4HL JU
49?= 4HG AU
49QW 4HP SE
4==G 4HT OC
4=Q6 4HV NO
4?9Q 4HC DE
4?PB #
4#92 # VARIOUS CONSOLE MESSAGES
4#NL #
4*8= OPMINTRO 26,26H^*^*LOADER POST-MORTEM^*^*
4*MW OPMBROKE 82,12H BROKE IN
4B7G #SKI G4
4BM6 4HGEO4
4C6Q #SKI G3
4CLB 4HGEO3
4D62 OPMBR1 40H LOADER AT ADDRESS * ^* OBEYING
4DKL OPMBR2 26H GEOERR ^*
4F5= OPMFC 12HFIXED CORE
4FJW OPMINSTR 8H INSTR
4G4G OPMQUESTN 25,25H^* POST-MORTEM REQUIRED?
4GJ6 OPMTYPEQ 26,26H^*^* TYPE OF POST-MORTEM?
4H3Q OPMNODUMP 75,43H^*^* PM DUMP NOT AVAILABLE DURING LOADER^*
4HHB 32H PM TO PRINTER TAKES 40 SECONDS
4J32 OPMOK 8,8H OK^*^*
4JGL OPMCANCEL 10,10H CANCEL^*
4K2= OPMXX 18,18H X0= * ^*
4KFW OPMFIX 28,28H^* PLEASE ENGAGE LP ^*^*
4K^G OPMNOTLP 29,29H UNIT IS NOT A PRINTER^*
4LF6 OPMWRONG 23,23H UNIT IS WRONGED^*
4LYQ OPMFINISH 32,32H^*^*POST-MORTEM FINISHED^*^*^*^*
4MDB OPMNOLP 21,21H NO LP AVAILABLE^*^*
4MY2 OPMFAIL 11,11H LP FAIL^*
4NCL #
4NX= # SUBROUTINE TO INPUT A MESSAGE FROM THE CONSOLE TO OINBUFF
4PBW # EXIT 1 - OK ; EXIT 0 - FAILED
4PWG #
4QB6 OINCON
4QTQ STO 0 OPMINLINK(2) [SAVE LINK
4R*B LDX 4 OPMSPACES(2) [SPACEFILL ...
4RT2 STO 4 OPMINBUFF(2) [ ... INPUT BUFFER
4S#L STO 4 OPMINBUFF+1(2)
4SS= LDX 3 OPMCON(2) [OPERATOR'S CONSOLE DL POINTER
4T?W LDN 4 8 [COUNT
4TRG DCA 3,STO,4,COUNT
4W?6 LDN 4 0 [READ MODE
4WQQ DCA 3,STO,4,MODE
4X=B LDN 4 OPMINBUFF(2) [ADDRESS OF INPUT BUFFER
4XQ2 DCA 3,STO,4,CTSA
4Y9L LDN 1 OPMCON-CPPTR(2) [ -> PSEUDO ACTIVITY BLOCK
4YP= GPERI 3,1,NC [INITIATE TRANSFER
4^8W OIN1 JBUSY 3,OIN1 [WAIT FOR TERMINATION
4^DN ... LDX 0 CPRW1(1)
4^NG ... SLL 0 3
4^Y# ... BNG 0 OIN2 [J IF FAILED
5286 LDX 0 OPMCON+1(2) [GET REPLY WORD
52MQ SLC 0 4
537B BPZ 0 OIN3 [J IF INPUT SUCCESSFUL
53M2 LDN 1 OPMCANCEL(2) [REPLY CANCELLED OR TOO LONG
546L CALL 0 OUTCON [CANCEL MESSAGE TO CONSOLE
54L= OIN2 LDX 0 OPMINLINK(2) [RESTORE LINK
555W EXIT 0 0 [EXIT: FAILED
55KG OIN3 LDX 0 OPMINLINK(2) [RESTORE LINK
5656 EXIT 0 1 [EXIT: OK
56JQ #
574B # SUBROUTINE TO OUTPUT A MESSAGE TO THE OPERATOR'S CONSOLE
57J2 # MESSAGE POINTED TO BY X1 ON ENTRY - CALLED VIA X0
583L # USES X1, X3 AND X4
58H= #
592W OUTCON
59GG STO 0 OPMOUTLINK(2) [SAVE LINK
5=26 LDX 3 OPMCON(2) [OPERATOR'S CONSOLE DL POINTER
5=FQ LDX 4 0(1) [COUNT
5=^B DCA 3,STO,4,COUNT
5?F2 LDN 4 1(1) [CORE ADDRESS OF MESSAGE
5?YL DCA 3,STO,4,CTSA
5#D= LDN 4 1 [WRITE MODE
5#XW DCA 3,STO,4,MODE
5*CG LDN 1 OPMCON-CPPTR(2) [ -> PSEUDO ACTIVITY BLOCK
5*X6 TC1 GPERI 3,1,NC [INITIATE TRANSFER
5BBQ TC2 JBUSY 3,TC2 [WAIT FOR TERMINATION
5BWB LDX 4 OPMCON+1(2) [GET REPLY WORD
5CB2 SRL 4 18
5CTL BNZ 4 TC1 [FAILURE...TRY AGAIN
5D*= LDX 0 OPMOUTLINK(2) [RESTORE LINK
5DSW EXIT 0 0 [TRANSFER OK
5F#G #
5FS6 # SUBROUTINE TO PRINT A LINE ON THE LINE PRINTER
5G?Q # USES X1, X3 AND X4 - CALLED VIA X0
5GRB # EXIT 0 - TRANSFER FAILURE ; EXIT 1 - OK
5H?2 #
5HQL OUTLP
5J== STO 0 OPMLPLINK(2) [SAVE LINK
5JPW LDX 3 OPMLP(2) [LP DEVICE LIST POINTER
5K9G TL1 LDX 4 OPMLPCNT(2)
5KP6 DCA 3,STO,4,COUNT [CHARACTER COUNT
5L8Q LDX 4 OPMCNTRL2(2)
5LNB DCA 3,STO,4,CTSA [PRINT BUFFER
5M82 JDISENG 3,TL4 [J IF LP NOT ENGAGED
5MML LDN 1 OPMLP-CPPTR(2) [ -> PSEUDO ACTIVITY BLOCK
5N7= GPERI 3,1,NC [INITIATE TRANSFER
5NLW TL2 JBUSY 3,TL2 [WAIT FOR TERMINATION
5NWN ... LDX 0 CPRW1(1)
5P6G ... SLL 0 3
5PB# ... BNG 0 TL3 [J IF TRANSFER FAILED
5PL6 LDX 0 OPMLPLINK(2) [RESTORE LINK
5Q5Q EXIT 0 1 [TRANSFER OK
5QKB TL3 LDX 0 OPMLPLINK(2) [RESTORE LINK
5R52 EXIT 0 0 [TRANSFER FAILURE
5RJL TL4 LDN 1 OPMFIX(2) [FIX MESSAGE ...
5S4= CALL 0 OUTCON [ ... TO THE CONSOLE
5SHW LDX 3 OPMLP(2) [RELOAD DEVICE LIST POINTER
5T3G TL5 JDISENG 3,TL5 [WAIT FOR PRINTER ENGAGE
5TH6 BRN TL1 [AND TRY AGAIN
5W2Q #
5WGB # SUBROUTINE TO STORE THE OCTAL EQUIVALENT OF X5 IN THE TWO WORDS
5X22 # POINTED TO BY X1 - USES X4 AND X5 - CALLED VIA X0
5XFL #
5X^= OCTAL
5YDW STO 1 OPMX1(2) [SAVE X1
5YYG STO 3 OPMX3(2) [SAVE X3
5^D6 LDN 3 8 [8 OCTAL CHARACTERS
5^XQ TOC1 LDN 4 0
62CB SLL 45 3 [GET A CHARACTER
62X2 DCH 4 0(1) [AND PUT IT IN THE BUFFER
63BL BCHX 1 £ [INCREMENT BUFFER POINTER
63W= BCT 3 TOC1 [AND REPEAT FOR 8 CHARACTERS
64*W LDX 3 OPMX3(2) [RESTORE X3
64TG LDX 1 OPMX1(2) [RESTORE X1
65*6 EXIT 0 0
65SQ #
66#B # SUBROUTINE TO DUMP CORE TO THE LINE PRINTER
66S2 # ON ENTRY, X6 : START ADDRESS AND OPMFIN(2) : END ADDRESS
67?L # CALLED VIA X0
67R= #
68=W OPMPRINT
68QG STO 0 OPMPRLINK(2) [SAVE LINK
69=6 PMPR1 LDX 5 6 [START ADDRESS OF THIS PRINT LINE
69PQ LDN 1 OPMBUFF+1(2) [ ... TO PRINT BUFFER
6=9B CALL 0 OCTAL [ ... IN OCTAL
6=P2 LDN 7 8 [8 CORE WORDS PER PRINT LINE
6?8L LDN 1 OPMBUFF+5(2) [PRINT BUFFER POINTER TO 1ST WORD
6?N= LDX 3 6 [FIRST WORD TO BE PRINTED ON LINE
6#7W LDN 0 7 [CHECK FOR ALL 8 WORDS ZERO
6#MG PMPR2 SMO 0
6*76 LDX 5 0(3)
6*LQ BNZ 5 PMPR3 [J IF THIS ONE IS NON-ZERO
6B6B BCT 0 PMPR2 [CHECK NEXT WORD
6BDR ... LDX 5 0(3)
6BR8 ... BZE 5 PMPR5 [ALL 8 ARE ZERO - DON'T PRINT
6C5L PMPR3 LDX 5 0(3) [PICK UP THE CORE WORD
6CK= CALL 0 OCTAL [CONVERT TO OCTAL IN PRINT BUFFER
6D4W ADN 1 3 [INCREMENT PRINT BUFFER POINTER
6DJG ADN 3 1 [ ... AND CORE POINTER
6F46 BCT 7 PMPR3 [REPEAT FOR 8 CORE WORDS
6FHQ PMPR4 CALL 0 OUTLP [AND PRINT THE LINE
6G3B BRN PMPR6 [FAILURE DURING THE TRANSFER
6GH2 PMPR5 ADN 6 8 [INCREMENT CORE POINTER
6H2L TXL 6 OPMFIN(2) [ANY MORE TO BE PRINTED?
6HG= BCS PMPR1 [YES - CONTINUE WITH NEXT LINE
6H^W LDX 0 OPMPRLINK(2) [NO - RELOAD LINK
6JFG EXIT 0 0
6J^6 PMPR6 LDX 4 OPMLP+1(2) [GET REPLY WORD
6KDQ SRL 4 18
6KYB BNZ 4 PMPR9 [J IF REAL FAILURE
6LD2 PMPR7 LDN 1 OPMFIX(2) [OTHERWISE, FIX MESSAGE ...
6LXL CALL 0 OUTCON [ ... TO CONSOLE
6MC= LDX 1 OPMLP(2) [LP DEVICE LIST POINTER
6MWW PMPR8 JDISENG 1,PMPR8 [WAIT FOR FIX
6NBG BRN PMPR4 [AND TRY AGAIN
6NW6 PMPR9 LDN 1 OPMFAIL(2) [FAIL MESSAGE ...
6P*Q CALL 0 OUTCON [ ... TO CONSOLE
6PTB BRN PMPR7 [AND TRY AGAIN
6Q*2 #
6QSL # SUBROUTINE USED BY ROUTINE WHICH CONVERTS EXECUTIVE'S TIME IN
6R#= # K9 CLOCK INTERRUPTS SINCE MIDNIGHT INTO CHARACTER FORM
6RRW #
6S?G RAGEN
6SR6 STO 5 6
6T=Q DVS 5 0(3)
6TQB STO 6 7
6W=2 SEND DVS 6 OPMTEN(2)
6WPL DCH 7 0(1)
6X9= BCHX 1 £
6XNW DCH 6 0(1)
6Y8G BCHX 1 £
6YN6 EXIT 3 1
6^7Q #
6^MB #
7272 # LOADER POST-MORTEM ENTRY POINT
72LL #
736= #
73KW K1LOADERPM
745G #
74K6 STO 2 K0 [TEMPORARILY ONLY
754Q CALL 2 £ [DATUMISE LOADER ...
75JB SBN 2 K1LOADERPM+2 [ ... POST-MORTEM
7642 STO 0 JLXX(2) [SAVE
76HL STO 1 JLXX+1(2) [ ALL
773= LDX 0 K0 [ ACCUMULATORS IN JLXX
77GW STO 0 JLXX+2(2)
782G LDN 0 3
78G6 LDN 1 JLXX+3(2)
78^Q MOVE 0 5
793^ ... LDX 1 BK18X
7968 ... BNZ 1 XOK
798C ... LDX 1 XK18
79=L ... STO 1 BK18X
79#T ...XOK ADS 1 OPMENDGEO(2)
79C4 ... ADS 1 OPMK18(2)
79FB LDX 1 GONRDUMP [GET ILLEGAL INSTRUCTION ADDRESS
79^2 SBN 1 1 [CORRECT IT
7=DL STO 1 JLINSTR(2) [AND SAVE IT
7=Y= LDX 1 0(1) [GET ILLEGAL INSTRUCTION
7?CW STO 1 JLINSTR+1(2) [AND SAVE IT TOO
7?XG LDX 0 OPMSTOP(2) [PLUG K0 IN CASE OF
7#C6 STO 0 K0 [SYSTEM ERRORS DURING PM
7#WQ FINDPEREC 1,APFOTY,OPMCONTYPE(2),PM1 [SEARCH FOR CENTRAL CONSOLE
7*BB BPZ 1 PM3 [J IF CONSOLE AVAILABLE
7*W2 PM2 BRN PM2 [OTHERWISE LOOP STOP
7B*L PM3 JWRONG 1,PM1 [IF CONSOLE WRONGED, TRY NEXT ONE
7BT= STO 1 OPMCON(2) [SAVE CONSOLE'S DEVICE LIST POINTER
7C#W LDN 1 OPMINTRO(2) [PM INTRODUCTORY MESSAGE ...
7CSG CALL 0 OUTCON [ ... TO CONSOLE
7D#6 LDX 5 JLINSTR+1(2) [IS ILLEGAL INSTRUCTION ...
7DRQ SLL 5 3
7F?B SRL 5 17 [ ... A GEOERR?
7FR2 SBN 5 #170
7G=L BNZ 5 PM3A [NO
7GQ= LDX 4 JLINSTR(2) [YES
7H9W ADN 4 1 [INSERT GEOERR ...
7HPG LDN 5 OPMBR2+2(2) [ ... INFORMATION CODE
7J96 MOVE 4 2 [ ... IN BROKE MESSAGE
7JNQ BRN PM3B
7K8B PM3A LDN 4 OPMINSTR(2) [MOVE "INSTR" ...
7KN2 LDN 5 OPMBR2(2) [ ... TO BROKE MESSAGE
7L7L MOVE 4 2
7LM= LDN 1 OPMBR2+2(2) [CONVERT ILLEGAL INSTRUCTION ...
7M6W LDX 4 JLINSTR+1(2)
7MLG LDN 3 0
7N66 LDN 5 0
7NKQ SLC 34 3
7P5B SRC 45 23
7PK2 LDN 6 3
7Q4L P1 STO 4 7 [ ... INTO A READABLE FORMAT ...
7QJ= ANDN 7 7
7R3W DCH 7 0(1)
7RHG BCHX 1 £
7S36 SLC 45 3
7SGQ BCT 6 P1
7T2B BCHX 1 £
7TG2 DCH 3 0(1)
7T^L BCHX 1 £
7WF= BCHX 1 £
7WYW SRC 45 1
7XDG LDN 6 4
7XY6 P2 SLC 45 3 [ ... IN THE "BROKE" MESSAGE
7YCQ STO 4 7
7YXB ANDN 7 7
7^C2 DCH 7 0(1)
7^WL BCHX 1 £
82B= BCT 6 P2
82TW SRC 45 12
83*G ANDN 4 3
83T6 LDN 6 #30 [ "("
84#Q DCH 6 0(1)
84SB BCHX 1 £
85#2 DCH 4 0(1)
85RL BCHX 1 £
86?= LDN 6 #31 [ ")"
86QW DCH 6 0(1)
87=G PM3B LDX 5 JLINSTR(2) [ILLEGAL INSTRUCTION ADDRESS
87Q6 TXL 5 G3DOL [BELOW LOADER'S DATUM?
889Q BCS PM3C [YES
88PB SBX 5 G3DOL [NO - DATUMISE IT
8992 BRN PM3D
89NL PM3C LDN 3 OPMFC(2) [SAY IT BROKE ...
8=8= LDN 4 OPMBROKE+4(2) [ ... IN FIXED CORE
8=MW MOVE 3 3
8?7G PM3D LDN 1 OPMBR1+5(2) [PUT ILLEGAL INSTRUCTION ...
8?M6 CALL 0 OCTAL [ ... ADDRESS IN MESSAGE
8#6Q LDX 1 XECTIME(2)
8#LB LDX 5 0(1) [PICK UP TIME IN K9'S FROM EXECUTIVE
8*62 DVS 4 XK9PERSEC(2)
8*KL LDN 1 OPMTIME(2) [WHERE TO PUT CHARACTER TIME IN BUFFE
8B5= CALL 3 RAGEN [CONVERT HOURS TO CHARACTER FORM
8BJW 3600
8C4G LDN 4 #36 [SET STOP CHARACTER
8CJ6 DCH 4 0(1) [STORE FULL STOP
8D3Q BCHX 1 £
8DHB CALL 3 RAGEN [CONVERT MINUTES TO CHARACTER FORM
8F32 60
8FGL DCH 4 0(1) [STORE FULL STOP
8G2= BCHX 1 £
8GFW LDX 7 5 [COPY SECONDS
8G^G CALL 3 SEND [AND STORE THEM
8HF6 0
8HYQ LDX 1 XECDATE(2) [PICK UP DATE FROM EXECUTIVE
8JDB LDX 7 0(1) [ (IN DAYS SINCE 31.12.1899)
8JY2 BZE 7 ZEROD [J IF ZERO SPECIFIED AS DATE
8KCL BXGE 7 YEARS(2),ZEROD [ERROR IF 0 OR > YEAR 2100
8KX= SLA 7 2 [DIVIDE BY 365*4+1 TO GET NUMBER OF
8LBW DVS 6 TSFTF(2) [ ... YEARS ALLOWING FOR LEAP YEARS
8LWG SRL 6 2
8MB6 LDX 4 7 [TEST AND J IF THIS YEAR ...
8MTQ ANDN 4 3 [ ... IS NOT A LEAP YEAR
8N*B LDN 5 28 [SET APPROPRIATE NO OF DAYS FOR FEB
8NT2 LDX 3 2
8P#L BNZ 4 NLEAP
8PS= LDN 5 29
8Q?W NLEAP SMO 3
8QRG LDX 0 NDAYS [NUMBER OF DAYS THIS MONTH
8R?6 BPZ 0 NFEB [IF FEBRUARY, TAKE 28 OR 29
8RQQ LDX 0 5
8S=B NFEB SBX 6 0
8SQ2 ADN 3 1
8T9L BPZ 6 NLEAP [J BACK IF NOT THIS MONTH
8TP= ADX 6 0
8W8W LDX 4 NAME-1(3)
8WNG ADN 6 1
8X86 DVS 5 OPMTEN(2)
8XMQ BNZ 6 STORE [J IF MORE THAN 9
8Y7B LDN 6 #20 [SET SPACE CHARACTER
8YM2 STORE LDN 3 OPMDATE(2) [WHERE TO PUT CHARACTER DATE
8^6L DCH 6 0(3) [STORE FIRST CHARACTER
8^L= BCHX 3 £
925W DCH 5 0(3) [STORE SECOND CHARACTER
92KG DSA 4 0(3) [STORE 1ST 2 CHARACTERS OF MONTH
9356 STO 4 1(3) [STORE LAST CHARACTER OF MONTH
93JQ DVS 6 OPMTEN(2)
944B TXL 7 OPMTEN(2)
94J2 BCS X10 [J IF LESS THAN YEAR 2000
953L SBN 7 10 [MINUS 100 YEARS
95H= X10 DCH 7 1(3) [STORE FIRST CHARACTER OF YEAR
962W BCHX 3 £
96GG DCH 6 1(3) [STORE SECOND CHARACTER OF YEAR
9726 BCHX 3 £
97FQ LDN 6 #20 [SPACE FILL LAST CHARACTER
97^B DCH 6 1(3)
98F2 BRN X11
98YL ZEROD LDX 0 OPMSPACES(2) [DATE ERROR : SPACE FILL DATE
99D= STO 0 OPMDATE(2)
99XW STO 0 OPMDATE+1(2)
9=CG X11 LDN 1 OPMBROKE(2) [PRINT BROKE MESSAGE ...
9=X6 CALL 0 OUTCON [ ... ON CONSOLE
9?BQ PM4 LDN 1 OPMQUESTN(2) [ASK WHETHER PM
9?WB PM5 CALL 0 OUTCON [IS REQUIRED
9#B2 PM6 CALL 0 OINCON [GET REPLY
9#TL BRN PM4 [FAILED - TRY AGAIN
9**= LDX 4 OPMINBUFF(2) [REPLY
9*SW LDN 5 0
9B#G SRC 45 12 [GET FIRST 2 CHARACTERS OF REPLY
9BS6 LDN 1 OPMTYPES(2) [COMMAND TABLE
9C?Q LDN 6 OPMTYPEND-OPMTYPES [LENGTH OF COMMAND TABLE
9CRB PM7 TXU 4 0(1) [COMPARE REPLY WITH COMMAND TABLE
9D?2 BCC PM8 [FOUND IT
9DQL ADN 1 1
9F== BCT 6 PM7
9FPW BRN PM4 [INVALID REPLY - REPEAT QUESTION
9G9G PM8 EXIT 1 OPMBRNTAB-OPMTYPES [EXECUTE BRANCH TABLE
9GP6 PMXL LDN 1 OPMOK(2) [OK MESSAGE ...
9H8Q CALL 0 OUTCON [ ... TO CONSOLE
9HNB LDN 7 8 [TO COUNT ACCUMULATORS PRINTED
9J82 LDN 6 0 [X0 FIRST
9JML PM9 SMO 6 [PICK UP EACH ACCUMULATOR
9K7= LDX 5 JLXX(2)
9KLW LDN 1 OPMXX+3(2) [CONVERT IT TO OCTAL ...
9L6G CALL 0 OCTAL [ ... AND PLACE IT IN THE MESSAGE
9LL6 LDN 1 OPMXX(2) [OUTPUT ACCUMULATOR VALUE TO CONSOLE
9M5Q CALL 0 OUTCON
9MKB ADN 6 1 [INCREMENT COUNT
9N52 DCH 6 OPMXX+2(2) [AND "X" NUMBER IN MESSAGE
9NJL BCT 7 PM9 [REPEAT FOR ALL 8 ACCUMULATORS
9P4= BRN PM94
9PHW PMLS LDN 6 4
9Q3G LDN 1 OPMINBUFF(2)
9QH6 PM90 LDCH 4 0(1) [IS "D" IN REPLY?
9R2Q SBN 4 #44
9RGB BZE 4 PMD [YES - SAY NO DUMP POSSIBLE
9S22 BCHX 1 £
9SFL BCT 6 PM90
9S^= LDN 1 OPMINBUFF(2) [NO - SEARCH FOR UNIT NUMBER
9TDW LDN 6 6
9TYG LDN 3 OPMNOTLP+3(2) [IN CASE UNIT IS NOT A LINE PRINTER
9WD6 PM91 LDCH 4 0(1) [GET CHARACTER FROM REPLY
9WXQ BCHX 1 £
9XCB TXU 4 OPMCOMMA(2) [IS IT COMMA?
9XX2 BCC PM92 [YES
9YBL BCT 6 PM91 [NO - CHECK NEXT CHARACTER
9YW= NGS 4 OPMLPNO(2) [NO UNIT SPECIFIED
9^*W BRN PM94
9^TG PM92 LDCH 4 0(1) [GET FIRST CHARACTER OF UNIT NUMBER
=2*6 TXL 4 OPMTEN(2) [IS IT NUMERIC?
=2SQ BCC PMYES [NO - REPEAT PM? QUESTION
=3#B DCH 4 0(3) [YES - PUT IT IN MESSAGE
=3S2 BCHX 1 £
=4?L BCHX 3 £
=4R= LDCH 5 0(1) [GET SECOND CHARACTER OF UNIT NUMBER
=5=W DCH 5 0(3) [AND PUT IT IN THE MESSAGE
=5QG TXU 5 OPMSP(2) [IS IT A SPACE?
=6=6 BCC PM92A [YES - END OF UNIT NUMBER
=6PQ TXL 5 OPMTEN(2) [NO - IS IT NUMERIC?
=79B BCC PMYES [NO - REPEAT PM? QUESTION
=7P2 PM92A LDN 3 OPMNOTLP+3(2) [YES - VALID UNIT NUMBER
=88L LDN 5 0
=8N= PM92B CDB 4 0(3) [CONVERT IT TO BINARY
=97W BCS PM93
=9MG BCHX 3 PM92B
==76 PM93 STO 5 OPMLPNO(2) [SAVE UNIT NUMBER OF LP
==LQ PM94 FINDPEREC 1,APFOTY,OPMLPTYPE(2),PM11 [SEARCH FOR PRINTER
=?6B BNG 1 NOLP [J IF NO LP AVAILABLE
=?L2 LDX 4 OPMLPNO(2) [PARTICULAR PRINTER WANTED?
=#5L BPZ 4 PM95 [YES - CHECK IT
=#K= JWRONG 1,PM11 [NO - BUT TRY NEXT IF WRONGED
=*4W BRN PM96
=*JG PM95 LGEOG 1,5 [GET ITS GEOG NUMBER
=B46 TXU 5 4 [HAVE WE FOUND IT?
=BHQ BCS PM11 [NO - TRY NEXT ONE
=C3B JRIGHT 1,PM96 [YES - BUT IF WRONGED, SAY SO
=CH2 LDN 1 OPMWRONG(2) [SPECIFIED PRINTER IS WRONGED
=D2L LDX 6 OPMNOTLP+3(2) [PUT UNIT NUMBER...
=DG= STO 6 OPMWRONG+3(2) [ ... IN "WRONGED" MESSAGE
=D^W CALL 0 OUTCON [AND SAY IT'S WRONGED
=FFG BRN PM4 [REPEAT PM? QUESTION
=F^6 PM96 STO 1 OPMLP(2) [SAVE ITS DEVICE LIST POINTER
=GDQ LGEOG 1,5 [GET GEOG NUMBER OF LP
=GYB LDN 4 10
=HD2 DVS 4 4
=HXL LDX 3 4
=JC= LDN 4 10
=JWW DVS 4 4
=KBG BNZ 5 PM97
=KW6 LDN 5 #20
=L*Q BNZ 4 PM97 [CONVERT IT TO CHARACTER FORM...
=LTB LDN 4 #20
=M*2 PM97 SLL 5 12
=MSL SLL 4 6
=N#= ORX 5 3
=NRW LDCT 3 #200
=P?G ORX 3 5
=PR6 ORX 3 4
=Q=Q STO 3 OPMFIX+6(2) [AND SAVE IT IN THE FIX MESSAGE
=QQB LDN 1 OPMOK(2) [SAY "OK"
=R=2 CALL 0 OUTCON
=RPL ADS 2 OPMCNTRL2(2) [DATUMISE PRINT BUFFER POINTER
=S9= CALL 0 OUTLP [PRINT HEADER LINE ...
=SNW NULL
=T8G LDN 0 1
=TN6 STO 0 OPMHEAD(2)
=W7Q CALL 0 OUTLP [ ... AND A BLANK LINE
=WMB NULL
=X72 LDX 7 OPMSPACES(2)
=XLL STO 7 OPMBR1+7(2)
=Y6= LDN 7 #41
=YKW STO 7 OPMBROKE(2)
=^5G LDX 7 OPMCNTRL3(2)
=^K6 ADX 7 2
?24Q STO 7 OPMCNTRL2(2)
?2JB LDN 7 81
?342 STO 7 OPMLPCNT(2)
?3HL CALL 0 OUTLP [PRINT "BROKE" MESSAGE
?43= NULL
?4GW LDN 0 1
?52G STO 0 OPMBROKE(2)
?5G6 CALL 0 OUTLP [AND A BLANK LINE
?5^Q NULL
?6FB LDN 7 121
?6^2 STO 7 OPMLPCNT(2)
?7DL LDX 7 OPMCNTRL1(2)
?7Y= ADX 7 2
?8CW STO 7 OPMCNTRL2(2)
?8XG LDN 6 JLXX(2) [ADDRESS OF ACCUMULATOR SAVE AREA
?9C6 LDN 7 JLXX+5(2)
?9WQ STO 7 OPMFIN(2) [ONLY 1 LINE TO BE PRINTED
?=BB CALL 0 OPMPRINT [PRINT ACCUMULATORS ON LP
?=W2 LDN 6 0 [PRINT FIRST #30000 WORDS
??*L LDX 7 OPMENDGEO(2) [ OF GEORGE ON THE LP
??T= STO 7 OPMFIN(2)
?##W CALL 0 OPMPRINT
?#SG LDN 0 1
?*#6 STO 0 OPMBUFF(2)
?*RQ CALL 0 OUTLP [ ... AND A BLANK LINE
?B?B NULL
?BR2 LDN 0 #41
?C=L STO 0 OPMBUFF(2)
?CQ= LDX 6 G3DOL [LOADER'S DATUM?
?D9W TXU 6 OPMK18(2)
?DPG BCC PM98 [YES - START DUMP AT LOADER
?F96 SBN 6 1024 [NO - L/A : START DUMP AT LOADER PM
?FNQ PM98 LDX 7 OPMLAST(2)
?G8B ADX 7 6
?GN2 STO 7 OPMFIN(2)
?H7L CALL 0 OPMPRINT
?HM= LDN 1 OPMFINISH(2) [FINISHED MESSAGE ...
?J6W CALL 0 OUTCON [ ... TO THE CONSOLE
?JLG GELL [RE-ENTER GELL
?K66 NOLP LDX 6 OPMLPNO(2)
?KKQ BPZ 6 NOLP1
?L5B LDN 1 OPMNOLP(2)
?LK2 CALL 0 OUTCON
?M4L BRN PM4
?MJ= NOLP1 LDN 1 OPMNOTLP(2)
?N3W CALL 0 OUTCON
?NHG BRN PM4
?P36 PMNO LDN 1 OPMOK(2) [NO PM REQUIRED
?PGQ CALL 0 OUTCON [SO SAY "OK"
?Q2B GELL [AND RE-ENTER GELL
?QG2 PMYES LDN 1 OPMTYPEQ(2) [ASK TYPE OF PM REQUIRED
?Q^L BRN PM5
?RF= PMD LDN 1 OPMNODUMP(2) [PM DUMP NOT AVAILABLE..
?RYW CALL 0 OUTCON [ .. DURING LOADER
?SDG BRN PMYES [ASK TYPE OF PM REQUIRED
?SY6 PMRI BRN PM4
?TCQ #
?TXB #
?WC2 K7LOADERPM [MEND AREA FOR LOADER PM
?WWL #GAP 100
?XB= #
?XTW #END
?Y*G #OVE
^^^^ ...471676610001