{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: LOADERI867)}}
====== LOADERI867 ======
(George Source)
**Macros used:** [[george:macro:DCA|DCA]], [[george:macro:FAILURE|FAILURE]], [[george:macro:FINDPEREC|FINDPEREC]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GPERI|GPERI]], [[george:macro:JBUSY|JBUSY]], [[george:macro:JDISENG|JDISENG]], [[george:macro:JENVNOT|JENVNOT]], [[george:macro:JWRONG|JWRONG]], [[george:macro:LGEOG|LGEOG]], [[george:macro:LINT|LINT]], [[george:macro:LPROP|LPROP]], [[george:macro:LTYPE|LTYPE]], [[george:macro:ON|ON]], [[george:macro:OR|OR]], [[george:macro:TABEND|TABEND]]
22FL ...#SEG LOADERI86 [M. DRUKKER
22J9 ...# ########################################################
22LS ...#
22PC ...# (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982
22S2 ...#
22WK ...# #########################################################
22^= #LIS K0LOADER
23DW #
23YG # THIS (1ST) SEGMENT OF LOADER IS ENTERED FROM GELL.
24D6 # IT CHECKS THE COMPATIBILITY OF THIS GEORGE &
24XQ # EXECUTIVE, & (G4) CHECKS THAT FIXED CORE FITS.
25CB # THEN, USING THE INFORMATION LEFT BY GELL AT
25X2 # K18-K42, IT LOADS GEORGE'S FIXED CORE FROM THE
26BL # BS DEVICE, FINALLY PASSING CONTROL TO LOADERII.
26W= #
27*W # (EFFECTIVELY IT IS LOADERI70 REWRITTEN TO THE
27TG # NEW GEORGE-EXECUTIVE INTERFACE.)
28*6 #
28SQ K1LOADERI
29#B BRN START
29S2 ... +DMETAFORM [ADDR OF SEG CONTNNG DATA FOR UTILITY PGMS
2=?L #ALT FSTABLEN=64
2=HD ...XCOPRICL 20H (C) COPR ICL 1982
2=R= K7LOADERI
2?=W ...#GAP 200 [MEND AREA THERE IS A FURTHER GAP AT
2?QG # THE FOLLOWING IS A PSEUDO ACTIVITY BLOCK TO FOOL EXEC
2#=6 #REP CPPTR-CHAINADD+1
2#PQ ... +0
2*9B GBSDL
2*P2 QGBSDL +0 [CPPTR FOR DA DEVICES
2B8L REPLYBS +0 [CPRW1
2BN= CONDL
2C7W OPCONDL +0 [CPPTR FOR OP'S CONSOLE
2CMG REPLYCON +0 [CPRW1
2D76 #
2DLQ # TABLE OF DEVICE TYPES:
2F6B TYPTAB +13,+0,+6,+26,+25,+9
2FL2 TABEND [ ^
2G5L # DUMMY GAP TO ALLOW DIFFERENTIATING
2GK= # BETWEEN 2A & 2B FDS.
2H4W # LOTS OF USEFUL WORDS:
2HJG #DEF G3DOL=19
2HPN ...XECPOINTER [POINTERS TO FDATE AND FTIME
2HWW ...#HAL FDATE,FTIME [FOR USE BY EXECUTIVE
2J46 BLSUB +0 [DEVICE SUBTYPE FOR LOADERII
2JHQ GBSTYPE +0 [OWN DEVICE CODE; SEE QNOTFDS
2K3B TYPECODE +0 [ = [GBSTYPE]+[X2]
2KH2 BLTYPE +0 [G'S DEVICE TYPE
2L2L SUBTYPES +AFDS,+BFDS,+EDS,+EMDS
2LG= TYPOPCON #77
2L^W XSURF +BSURF [BLKS/CYL ON 2B FDS.
2MFG QFOUR +4
2M^6 MASKA #37777777
2NDQ R5 +0 [
2NYB R6 +0 [ USED IN DISC
2PD2 BLDATUM [ ROUTINES.
2PXL #GAP 4 [
2QC= X6 +0 [
2QWW X1 +0 [FOR JLUFIX
2RBG SUBLINK +0
2RW6 TYPE +0
2S*Q QLINK +0
2STB JLFSDCOPY [MINI CHAPTER TABLE:
2T*2 +DLOADERFS [ 1) FSLOAD OVERLAY D-ADDRESS
2TSL ... +K19 [ 2) CORE ADDRESS FOR LOADERFS XK18 A
2W#= +LLOADERFS+LLOADERFT+2 [3) LENGTH OF FSLOAD OVERLAY
2WRW JLFSVCOPY 0,0,0 [TEMPORARY STORAGE FOR JDVAR ETC
2X?G JLGENRESFLG 0 [REPLY FROM LOADERFS:SUPPRESS GR IF 0
2XR6 JCVAR +AVARLOAD [CORE ADDRESS OF "VARIABLE" FIXED
2Y=Q JLVAR +JFCT-AVARLOAD [LENGTH OF "VARIABLE" FIXED
2YQB JDVAR +DDATUM [DRUM ADDRESS OF "VARIABLE" FIXED
2^=2 JDFIXED +DFIXED [DRUM ADDRESS OF "FIXED" FIXED
2^PL JCFIXED +J1 [DATUM OF "FIXED" FIXED IN CORE
329= BR2A
32NW JLFIXED +AVARLOAD-J1 [LENGTH OF "FIXED" FIXED
338G JLPMSIZE 0 [UPDATED BY PM AS MIN FIXED SPACE
33D# ...PMENTRY +DLOADERPM-DLOADERI+K1LOADERPM [K18X ADDED IN AT RUN-TIM
33N6
347Q PMBRN BRN (GEN1)
34*F ...XMNO +7036875 [ MAGIC NO. FOR BIN-DEC CONVERSION
34H8 ...XK18 +K18
34NY ...#OPT BLMESS=+K18-1
34QG ...#UNS G3 2A FDS 1 -> 2B FDS
4TRG # IN GBSTYPE: 2 -> EDS 3 -> EMDS
4W?6 # 4 -> HSD 5 -> SLOW DRUM
4WQQ #
4X=B STO 3 TYPE(2) [SAVE GEORGE DEVICE TYPE
4XQ2 #
4Y9L # THE FOLLOWING WORD IS NULLED OUT BY "FSLOAD COPY", "GR" AND "SAME"
4YP= # AND IS RE-INSTATED BY "FSLOAD OFF". NOTE THAT THE DEFAULT IS "O
4^8W #
4^NG K1FSLOADER
5286 BRN XK2FSLOADER
52MQ LDN 6 JDFIXED(2) [SAVE FIXED CORE'S D-ADDRESS
537B LDN 7 JLFSVCOPY(2) [AND ITS LENGTH AND CORE DATUM
53M2 MOVE 6 3
546L LDN 6 JLFSDCOPY(2) [AND REPLACE THEM WITH
54L= LDN 7 JDFIXED(2) [DETAILS OF THE FSLOAD OVERLAY
555W MOVE 6 3
55KG CALL 7 READOWN [READ DOWN "LOADERFS" AND "LOADERFT"
5656 CALL 7 £ [SET THE RETURN LINK ADDRESS IN X7
56JQ ADN 7 3 [FROM LOADERFS BACK TO LOADERI
574B LDX 6 JLFSDCOPY+1(2) ["FSLOAD" OVERLAY ENTRY ADDRESS
57J2 EXIT 6 0 [GO ACROSS TO K1LOADERFS
583L LDX 2 G3DOL [RESTORE OUR DATUM
58H= STO 6 JLGENRESFLG(2) [REMEMBER WHETHER GENERAL RESTORE NEE
592W LDN 6 JLFSVCOPY(2) [RESTORE FIXED CORE'S D-ADDRESS,
59GG LDN 7 JDFIXED(2) [LENGTH AND CORE DATUM
5=26 MOVE 6 3
5=FQ K2FSLOADER
5=^B XK2FSLOADER
5?F2 LDX 0 JLFIXED(2) [UPDATE JLVAR IF NECESSARY
5?YL ADX 0 JLVAR(2) [SO THAT THE TOTAL LENGTH OF
5#D= ADX 0 JCFIXED(2) [FIXED CORE (FROM WORD 0) IS AT
5#XW TXL 0 JLPMSIZE(2) [LEAST JLPMSIZE WORDS : NEEDED
5*CG BCC QOK [TO ALLOW GEORGE PM SUFFICIENT
5*X6 LDX 0 JLPMSIZE(2) [WORKING SPACE
5BBQ SBX 0 JLFIXED(2)
5BWB SBX 0 JCFIXED(2)
5CB2 STO 0 JLVAR(2)
5CTL QOK LDX 0 JCVAR(2) [CORE ADDRESS OF "FIXED" FIXED
5D*= ADX 0 JLVAR(2) [+ LENGTH OF "VARIABLE" FIXED
5DSW STO 0 ENDFIX [= END OF FIXED IN CORE
5F#G CALL 7 READFIX [READ DOWN "FIXED" FIXED
5FS6 LDX 7 JDVAR(2) [DRUM ADDRESS OF "VARIABLE" FIXED
5G?Q STO 7 JDFIXED(2)
5GRB LDX 7 JCVAR(2) [CORE ADDRESS OF "VARIABLE" FIXED
5H?2 STO 7 JCFIXED(2)
5HQL LDX 7 JLVAR(2) [LENGTH OF "VARIABLE" FIXED
5J== STO 7 JLFIXED(2)
5JPW CALL 7 READFIX [READ DOWN "VARIABLE" FIXED
5K9G BRN TIDYUP [AND TIDY UP
5KP6 #
5L8Q #
5LNB #
5LY8 ...READOWN
5M82 READFIX
5MML STO 7 QLINK(2)
5N7= LDX 3 TYPE(2)
5NLW TXL 3 QFOUR(2)
5P6G BCS QDISC [LOAD TO DISC
5PL6 BRN QDRUM [LOAD TO DRUM
5Q5Q #
5QKB #
5R52 #
5RJL #
5S4= # *** LOADING FROM DRUM ***
5SHW #
5T3G #
5TH6 QDRUM LDX 4 GBSTYPE(2) [GET DRUM TYPE
5W2Q SBN 4 5
5WGB LDX 5 BLDRUM(2) [GET D/L WD FROM DIRECTORY ENTRY
5X22 LDX 6 JDFIXED(2) [GET F/C DRUM DATUM
5XFL BZE 4 SDRUM [SLOW DRUM
5X^= # DEALING WITH HSD:
5YDW SRL 6 7 [CONVERT DATUM TO BLOCKS (F/C)
5YYG SRL 5 12 [EXTRACT G FILE DATUM FROM
5^D6 [DIRECTORY ENTRY
5^XQ BRN Q01
62CB # DEALING WITH SLOW DRUM:
62X2 SDRUM SRL 5 10 [EXTRACT G FILE DATUM FROM
63BL ANDN 5 #3777 [DIRECTORY ENTRY
63W= SLL 5 10 [BACK TO WDS
64*W # SET UP CONTROL AREA IN DEVICE LIST
64TG Q01 ADX 5 6 [ABS DRUM ADDR OF F/C
65*6 LDX 3 QGBSDL(2) [GET DEVICE LIST POINTER
65SQ DCA 3,STO,5,DTSA [STORE TRANSFER ADDR
66#B LDX 5 JLFIXED(2)
66S2 DCA 3,STO,5,COUNT [STORE COUNT
67?L LDX 5 JCFIXED(2)
67R= DCA 3,STO,5,CTSA [STORE CORE ADDRESS
68=W LDN 5 0
68QG DCA 3,STO,5,MODE [STORE MODE
69=6 CALL 7 TRANSFER [READ DOWN FIXED CORE
69PQ BRN WHATSLEFT [WIND UP
6=9B #
6=P2 #
6?8L # *** LOADING FROM DISC ***
6?N= #
6#7W #
6#MG QDISC
6*76 SMO TYPECODE(2) [GET REAL
6*LQ LDX 5 SUBTYPES [DEVICE SUBTYPE
6B6B STO 5 BLSUB(2) [FOR LOADERII
6BL2 LDX 5 BLFAC+1(2)
6C5L ANDX 5 MASKA(2) [START BLOCK ADDRESS OF FILE
6CK= DVS 4 BLFAC+4(2) [/BLKSPERCYL
6D4W STO 4 BLDATUM+1(2) [STORE REL BLKNO (REL.SU)
6DJG STO 5 BLDATUM(2) [ REL CYLNO
6F46 LDX 0 BLSTART(2) [GET START CYLNO OF SU
6FHQ ADS 0 BLDATUM(2) [ADD TO START CYL OF G FILE
6G3B SBN 4 1
6GH2 SBN 5 1
6H2L NGS 4 BLDATUM+3(2) [STO 1-REL.BLKNO
6HG= NGS 5 BLDATUM+2(2) [STO 1-REL.CYLNO
6H^W LDX 5 BLFAC+2(2) [LAST BLKNO. + 1...
6JFG ANDX 5 MASKA(2) [... FROM FAC
6J^6 SBN 5 1 [LAST BLKNO
6KDQ DVS 4 BLFAC+4(2) [/BLKSPERCYL
6KYB ADS 5 BLDATUM+2(2) [NO OF CYLS TO FILE
6LD2 ADS 4 BLDATUM+3(2) [DEPTH OF FILE
6LXL LDX 6 JDFIXED(2) [DRUM ADDRESS OF F/C
6MC= SRL 6 7 [/128 TO GIVE BLKNO OF START OF F/C
6MWW [RELATIVE TO START OF GEORGE FILE
6NBG DVS 5 BLDATUM+3(2) [/DEPTH OF FILE
6NW6 SBX 5 BLDATUM+3(2) [ - DEPTH OF FILE GIVES...
6P*Q NGX 6 5 [NO OF BLKS IN FIRST CYL OCCUPZED
6PTB SLL 6 7 [BY FIXED CORE, TO WORDS.
6Q*2 LDX 0 JCFIXED(2) [MOVE ...
6QSL DCA QGBSDL(2),STO,0,CTSA [DRUM F/C DATUM TO DEVICELIST
6R#= LDX 0 JDFIXED(2) [GET CORE DATUM...
6RRW STO 0 R5(2) [FOR FUTURE USE
6S?G LDX 0 JLFIXED(2) [LENGTH OF F/C IS INITIAL VALUE
6SR6 STO 0 R6(2) [OF 'WDS STILL TO BE READ DOWN'
6T=Q S4 TXL 6 R6(2)
6TQB BCC S3 [ONLY 1 MORE TRANSFER LEFT
6W=2 DCA QGBSDL(2),STO,6,COUNT [WORD COUNT FOR NEXT TRANSFER
6WPL SBS 6 R6(2) [WDS STILL TO BE READ DOWN
6X9= S5 LDX 4 R5(2) [COMING TRANSFER ADDRESS
6XNW ADS 6 R5(2) [NEXT TRANSFER ADDRESS
6Y8G STO 6 X6(2) [SAVE WHILE CALLING
6YN6 CALL 7 XCONV [CONVERT COMING TO HA FORMAT
6^7Q DCA QGBSDL(2),STO,3,DTSA [BS ADDRESS IN DEVICE LIST
6^MB LDN 7 0
7272 DCA QGBSDL(2),STO,7,MODE
72LL LDX 3 QGBSDL(2)
736= CALL 7 TRANSFER [PERFORM TRANSFER
73KW LDX 0 R6(2)
745G BZE 0 WHATSLEFT [ALL IN
74K6 LDX 6 X6(2)
754Q DCA QGBSDL(2),ADS,6,CTSA [INCREMENT CORE TRANSFER ADDRESS
75JB LDX 6 BLDATUM+3(2) [BLK DEPTH OF FILE
7642 SLL 6 7 [WORD DEPTH OF FILE
76HL BRN S4 [MORE TO DO
773= S3 LDX 0 R6(2) [REMAIDER TO BE TRANSFERRED
77GW DCA QGBSDL(2),STO,0,COUNT [PUT IN PCA IN DL
782G STOZ R6(2) [CLEAR WD COUNT
78G6 BRN S5 [GO FOR LAST TRANSFER
78^Q #
79FB #
79^2 # CONVERSION ROUTINES
7=DL #
7=Y= # 8-8-8 FORMAT EXPECTED IN X4; HANDED BACK IN X3
7?CW # IN HARDWARE FORMAT.
7?XG #
7#C6 XCONV
7#WQ #
7*BB # CHECK THAT THIS IS A DISC COMPILATION, I.E. D-ADRESS
7*W2 # OF FIXED CORE IS A MULTIPLE OF 128.
7B*L LDX 3 4
7BT= SRL 34 7
7C#W SRL 4 17
7CSG BZE 4 XCONV1
7D#6 LDN 1 XMESS7(2)
7DRQ BRN REGELL [DRUM COMPILATION
7F?B XCONV1
7FR2 LDX 4 3
7G=L DVS 3 BLDATUM+3(2) [/BLKSPERCYL
7GQ= ADX 3 BLDATUM+1(2)
7H9W ADX 4 BLDATUM(2)
7HPG XCONV2
7J96 LDX 0 TYPECODE(2)
7JNQ EXIT 0 £
7K8B BRN XAFDS
7KN2 BRN XBFDS
7L7L BRN XEDS
7LM= XEMDS
7M6W XAFDS SLL 3 12
7MLG SRC 34 12
7N66 EXIT 7 0
7NKQ XEDS
7NMN ... JENVNOT NOEMU,MEEP [J IF NOT EMULATING
7NPL ... LDX 5 3
7NRJ ... MPA 4 BLFAC+4(2) [CONVERT BACK TO BLOCKS
7NTG ... LDCT 3 #400
7NXD ... ADX 3 5
7N^B ... EXIT 7 0
7P3# ...NOEMU
7P5B SLL 3 17
7PK2 SLC 34 20
7Q4L SLL 3 2
7QJ= SLL 34 4
7R3W SLL 3 2
7RHG SLL 34 4
7S36 SLL 3 3
7SGQ SLL 34 3
7T2B EXIT 7 0
7TG2 XBFDS
7T^L LDX 0 4
7WF= LDX 4 3
7WYW DVS 3 XSURF(2)
7XDG SLL 4 9
7XY6 DEX 3 4
7YCQ LDX 3 0
7YXB SLL 3 15
7^C2 DLA 4 3
7^WL EXIT 7 0
82B= #
82TW #
83*G #
83T6 # ROUTINE TO PERFORM BS TRANSFERS
84#Q # CALLED VIA X7
84SB # ON ENTRY X3 CONTAINS POINTER TO G'S BS DEVICE LIST
85#2 #
85RL JLTRANSFER
86?= TRANSFER
86QW JDISENG 3,TR4 [UNIT NOT ENGAGED
87=G TR5 LDN 1 QGBSDL-CPPTR(2) [POINT TO PSEUDO ACTIVITY BLK
87Q6 GPERI 3,1,NC [INITIATE TRANSFER
889Q TR1 JBUSY 3,TR1 [WAIT FOR TERMINATION
88FJ ... LDX 0 CPRW1(1)
88PB ... SLL 0 3
88^8 ... BNG 0 TR2 [TRANSFER FAILURE
8992 EXIT 7 0 [OK, RETURN
89NL TR2 LDX 1 REPLYBS(2) [GET REPLY WORD
8=8= SRL 1 18
8=MW BNZ 1 TR6 [REAL FAIL
8?7G TR4 LDN 1 XMESS4(2) [... ELSE, IF JUST INOP ...
8?M6 CALL 6 UFIX [OUTPUT FIX MESSAGE
8#6Q TR3 JDISENG 3,TR3 [AND WAIT FOR RE-ENGAGE
8#LB BRN TR5 [TRY AGAIN
8*62 TR6 LDN 1 XMESS3(2) [OUTPUT FAIL MESSAGE
8*KL CALL 6 UFAIL
8B5= LDN 1 XMESS6(2) [& 'PLEASE RELOAD' MESSAGE
8BJW BRN REGELL [OUTPUT MESSAGE & GELL
8C4G #
8CJ6 # ROUTINE TO OUTPUT FIX/FAIL MESSAGE
8D3Q # CALLED VIA X6, USES X4 X5; X1 POINTS TO MESSAGE
8DHB # X3 CONTAINS BS DEVICE LIST POINTER
8F32 #
8FGL JLUFIX
8G2= UFIX
8GFW UFAIL LGEOG 3,5
8G^G STO 1 X1(2)
8HF6 ... ADN 1 3
8HYQ U1 SLC 1 2
8JDB SBN 1 1
8JY2 SRC 1 2
8KCL LDN 4 10
8KX= DVS 4 4
8LBW DCH 4 0(1)
8LWG BNZ 5 U1
8MB6 LDX 1 X1(2)
8MTQ CALL 0 OUTCON
8N*B EXIT 6 0
8NT2 #
8P#L # CONSOLE OUTPUT ROUTINE
8PS= # CALLED VIA X0 ; X1 POINTS TO MESSAGE
8Q?W #
8QRG JLOUTCON
8R?6 OUTCON
8RQQ STO 0 SUBLINK(2)
8RT* ...#UNS G3