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