1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-01-14 23:44:32 +00:00

Commit Nigel's original transcription for the SYMBOL/COOL cool/cold-start loader program.

This commit is contained in:
Paul Kimpel 2012-08-25 22:53:32 +00:00
parent e4ce9b1f2b
commit 0d2b6ca005

916
SYMBOL/COOL.esp_m Normal file
View File

@ -0,0 +1,916 @@
STARTER DECKS 00010000
MAY 1969 BY P.E.G. 00020000
$ SET OMIT = COOL 00030000
B-5500 COLD START PROGRAM 00040000
$ POP OMIT 00040050
$ SET OMIT = NOT(COOL) 00050000
B-5500 COOL START PROGRAM 00060000
$ POP OMIT 00060050
COMMENT: * TITLE: B5500/B5700 MARK XIV SYSTEM RELEASE * 00060100
* FILE ID: SYMBOL/COOL TAPE ID: SYMBOL2/FILE000 * 00060101
* THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00060102
* AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00060103
* EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00060104
* WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00060105
* BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00060106
* * 00060107
* COPYRIGHT (C) 1971, 1972 BURROUGHS CORPORATION * 00060108
* AA320206 AA386657 *; 00060109
BEGIN DEFINE P=POLISH#,M=MEMORY#; 00070000
DEFINE DEFAULTDIRECT=4500#; 00071000
DEFINE KERNELADR=1#; 00072000
DEFINE MEMDISKADR=20#; 00073000
DEFINE ESPBOTTOM=50#; 00074000
DEFINE SCN(SCN1)=SCAN(CARD,SCN1)#, 00075000
NAAME=1#, NUMBER=2#, DELIM=0#, PERCENT=4#; 00076000
REAL CORE,READBACK,LOADER,J,I,DISKTOP,CARD,TYPE,MN,YR; 00080000
REAL ESUTEMP; 00081000
$ SET OMIT = COOL 00082000
REAL LOWADR; 00083000
$ POP OMIT 00084000
ARRAY INFO[*],SHAR[*],BUFFER[*],TEMMP[*],FILEX[*]; 00090000
ARRAY FILEH[*],LABELS[*],ZERO[*],RT[*]; 00100000
INTEGER DY,LOADED,QX,XY,N,T,K,SYSNO,NUMWDS; 00120000
REAL TREAL=T; 00120010
$ SET OMIT = NOT(COOL) 00120099
BOOLEAN RD,SKEDTOG,HARD,HARC,RC,FNDERR; 00120100
$ POP OMIT 00120101
LABEL READCARD,FENCE ,ESU,DATE,FILE,USE,DKA,DKB,STOP,EXIT,TIMER00130000
,ERROR,START,TART,DIRECT,DIRECTORYTOP 00140000
,WRCLEAN,XLOADED,HANDLE,SYSTEMS; 00150000
$ SET OMIT = NOT(COOL) 00160000
DEFINE REMOVE(REMOVE1)#BEGIN REMOVER(REMOVE1); GO REMOVED END#; 00169000
LABEL QUIT,REMOVED,PUNT,ARND,LP,ON; 00170000
REAL HDRO,RTI; 00170010
DEFINE RECSIZE=HDRO.[1:14]#,BLOCKSIZE=HDRO.[15:15]#, 00170020
RECSPERBLOCK=HDRO.[30:12]#,SEGSPERBLOCK=HDRO.[42:6]#; 00170030
BOOLEAN FIRSTCARD; 00170049
$ POP OMIT 00170050
LABEL REMCD,MEMDUMP,BOMBOUT,REM,RECONSTR,GLOB; 00170100
SWITCH TYPESWITCH:=ERROR,FILE,FENCE,STOP,ESU,USE,DATE,USE,USE 00180000
,DIRECT,DIRECTORYTOP,SYSTEMS,REMCD,MEMDUMP 00190000
,REM,RECONSTR,XLOADED; % SAVE FOR LAST 00191000
ARRAY MONTHS[12]_ 0,31,59,90,120,151,181,212,243,273,304,334; 00200000
BOOLEAN SPDIO,P1IO,P2IO,PRINTWAIT; 00201000
DEFINE KERNEL=16#; % SHOULD BE NUMBER OF FIRST WORDS - 1 00201100
ARRAY FIRST[17]:=0, 00210000
"FILE0000", 00220000
"FENCE000", 00230000
"STOP0000", 00240000
"ESU00000", 00250000
"USE00000", 00260000
"DATEO000", 00270000
"TYPE0000", 00280000
"OPTN0000", 00290000
"DIRECT00", 00300000
"DRCTRYTP", 00310000
"SYSTEMS0", 00320000
"REMOVECD", 00321000
"MEMDUMP0", 00321100
"REMOVEF0", 00321200
"RECONSTR", 00321300
"_0000000"; 00330000
ARRAY OPTIONS[54] _ 0, 00340000
"DRA00000", %47, USE DRUM A
"CHECK DE","CLARED F","ILE ADDR","ESSES_ ", % 65 01035050
"NO. OF E","SUS TO B","E CHANGE","D FROM "," ",%6901035060
"________"; 01039000
ARRAY LOADBUTTON[15]_ 01040000
OCT0441000401570421, % 1 20 01050000
OCT0157000000104411, % 2 21 01060000
OCT0211001441310055, % 3 22 01070000
OCT4155124500004425, % 4 23 01080000
OCT0060013101600064, % 5 24 01090000
OCT4441010402530305, % 6 25 01100000
OCT0100023441310055, % 7 26 01110000
OCT0062011441310055, % 8 27 01120000
OCT0066013441310055, % 9 30 00113000
OCT0072015441310055, % 10 31 01140000
OCT0076017441310055, % 11 32 01150000
OCT5140000047700200, % 12 33 01160000
OCT0441100401004441, % 13 34 01170000
OCT0253010420527405, % 14 35 01180000
OCT7405005101002411; % 15 36 01190000
BOOLEAN STREAM PROCEDURE OK(B); VALUE B; 01195000
BEGIN SI:=B; L: IF SC=" " THEN BEGIN SI:=SI+1; GO L END; 01195100
IF SC="O" THEN SI:=SI+1 ELSE GO AWAY; 01195200
IF SC="K" THEN TALLY:=1; 01195300
AWAY:OK:=TALLY; 01195400
END OK; 01195500
REAL STREAM PROCEDURE DECI(V); VALUE V; 01195700
BEGIN SI:=LOC V; DI:=LOC DECI; DS:=8 DEC; 01195800
END DECI; 01195900
REAL STREAM PROCEDURE SEARCH(CARD,FIRST,N); VALUE CARD,N; 01200000
BEGIN LABEL L,EXIT; 01210000
SI:=CARD; SI:=SI-N; DI:=LOC CARD; DS:=8LIT"0"; 01220000
DI:=LOC CARD; N(DS:=CHR); 01225000
L: SI _ FIRST; SI _ SI+8; TALLY _ TALLY+1; 01230000
IF SC = "_" THEN BEGIN TALLY _ C; GO TO EXIT END; 01240000
DI _ FIRST; DI _ DI+8; FIRST _ DI; 01250000
SI:=LOC CARD; 01260000
IF 8 SC NEQ DC THEN GO L; 01270000
EXIT:SEARCH _ TALLY; 01280000
END; 01290000
REAL STREAM PROCEDURE SCAN(LSTADR,TOKEN); 01290100
BEGIN LABEL L,XXIT; LOCAL SV,SVR; 01290200
DI:=TOKEN; DS:=8LIT"00000000"; DI:=DI-8; 01290250
SI:=LSTADR; SI:=SI+5; SI:=SC; 01290300
TALLY:=3; SCAN:=TALLY; 01290400
L: IF SC=" " THEN BEGIN SI:=SI+1; GO L; END; 01290500
IF SC=ALPHA THEN 01290600
IF SC LSS "0" THEN BEGIN % ALPHA 01290700
TALLY:=7; DI:=DI+1; 01290800
7(DS:=CHR; TALLY:=TALLY+63; IF SC=ALPHA THEN ELSE JUMP OUT); 01290900
SV:=TALLY; SV(DS:=LIT" "); 01291000
TALLY:=1; SCAN:=TALLY; 01291100
END 01291200
ELSE BEGIN % NUMBER 01291300
TALLY:=0; 01291400
7(SI:=SI+1; TALLY:=TALLY+1; 01291500
IF SC=ALPHA THEN 01291600
IF SC GEQ "0" THEN ELSE JUMP OUT TO XXIT 01291700
ELSE JUMP OUT); 01291800
SV:=TALLY; SI:=SI-SV; 01291900
DS:=SV OCT; 01292000
TALLY:=2; SCAN:=TALLY; 01292100
END 01292200
ELSE 01292300
IF SC=""" THEN BEGIN 01292400
SI:=SI+1; TALLY:=7; DI:=DI+1; 01292500
8(IF SC NEQ """ THEN BEGIN DS:=CHR; TALLY:=TALLY+63; END 01292600
ELSE BEGIN SI:=SI+1; JUMP OUT; END); 01292700
IF TOGGLE THEN GO XXIT; 01292800
SV:=TALLY; SV(DS:=LIT" "); SVR:=SI; 01292900
SI:=LOC SV; SI:=SI+7; IF SC="7" THEN GO XXIT 01293000
ELSE BEGIN TALLY:=1; SCAN:=TALLY; 01293100
SI:=SVR; END; 01293200
END ELSE BEGIN 01293300
IF SC="%" THEN BEGIN TALLY:=4; SCAN:=TALLY; 01293400
GO XXIT; END; 01293500
DI:=DI+7; 01293600
DS:=CHR; 01293700
TALLY:=0; SCAN:=TALLY; 01293800
END; 01293900
XXIT: SV:=SI; SI:=LOC SV; DI:=LSTADR; DS:=WDS; 01294000
END; 01294100
REAL STREAM PROCEDURE ISOLATE(CARD); 01300000
BEGIN LABEL L,A,X,E; 01310000
LOCAL T; 01320000
SI _ CARD; SI _ SI+5; SI _ SC; 01330000
L: IF SC = " " THEN BEGIN SI _ SI+1; GO TO L END; 01340000
IF SC = """ THEN 01350000
BEGIN SI _ SI+1; 01360000
17(SI _SI+1; TALLY _ TALLY+1; 01370000
IF SC = """ THEN 01380000
BEGIN T _ SI; DI _ T; DS _ LIT " "; 01390000
JUMP OUT TO X 01400000
ENDL); 01410000
E: TALLY _ 0; GO TO X; 01420000
END; 01430000
IF SC = ALPHA THEN BEGIN 01440000
17(SI_SI+1; TALLY _ TALLY+1; 01450000
IF SC = ALPHA THEN GO TO A; 01460000
JUMP OUT TO X; A:;); 01470000
GO TO E; 01480000
END ELSE BEGIN SI _ SI+1; TALLY _ 1 END; 01490000
X: ISOLATE _ TALLY; 01500000
T _ SI; 01510000
DI _ CARD; SI _ LOC T; DS _ WDS; 01520000
END; 01530000
SAVE PROCEDURE SPECIAL(C); VALUE C; REAL C; 01540000
BEGIN IF ISOLATE(CARD) ! 1 THEN GO TO ERROR; 01550000
STREAM(C:CARD); 01560000
BEGIN SI _ CARD; SI _ SI-1; 01570000
DI _ LOC C; DI _ DI+7; 01580000
IF SC ! DC THEN TALLY _ 1; 01590000
C _ TALLY; 01600000
END; 01610000
IF P THEN GO TO ERROR; 01620000
END; 01630000
SAVE PROCEDURE IOERR(IOD); VALUE IOD; REAL IOD; FORWARD; 01640000
SAVE REAL PROCEDURE EOM; FORWARD; 01650000
% 01651000
SAVE PROCEDURE WAITFORPRINTERFINISH(U); VALUE U; REAL U; 01652000
BEGIN PRINTWAIT:=TRUE; 01653000
DO UNTIL EOM=U; 01654000
PRINTWAIT:=FALSE; 01655000
END; 01656000
SAVE PROCEDURE IO(ADDRESS,IOD); VALUE ADDRESS,IOD; REAL ADDRESS,IOD; 01660000
BEGIN REAL T; 01670000
LABEL L; 01680000
IOD _ ADDRESS INX IOD; 01690000
L: P([IOD],IIO); 01700000
T _ EOM; 01710000
IF T.[30:3] ! 0 THEN 01720000
IF QX THEN GO TO L ELSE QX := 2; 01730000
IF ADDRESS } 0 THEN 01735000
IF T.[26:4] ! 0 THEN 01740000
IF T.[29:1] AND T.[3:5]=6 AND M[ADDRESS]=@40 01751000
THEN BEGIN 01752000
M[ADDRESS]:=0; 01753000
M[ADDRESS+1]:=0; 01754000
GO L; 01755000
END 01756000
ELSE IF (T.[3:5]=22 OR T.[3:5]=26) 01757000
THEN IF T.[27:1] 01758000
THEN BEGIN 01759000
WAITFORPRINTERFINISH(T.[3:5]); 01760000
IOD:=0&T[3:3:5]&1[18:47:1] 01761000
&1[29:44:4]; 01762000
GO L; 01763000
END 01764000
ELSE WAITFORPRINTERFINISH(T.[3:5]) 01765000
ELSE IF T.[29:1] AND T.[3:5]=10 AND 01767000
M[ADDRESS]=0 01768000
THEN 01769000
ELSE BEGIN IOERR(IOD); GO L; END; 01770000
END; 01850000
SAVE PROCEDURE SPOINOUT(WHICH); VALUE WHICH; INTEGER WHICH; 01851000
BEGIN 01852000
IF SPOIO THEN 01853000
IO(MESSAGE INX ABS(WHICH),@740000000000000&WHICH[24:1:1]);01854000
END SPOINOUT; 01855000
DEFINE KEYIN(KEYIN1)=SPOINOUT(NABS(KEYIN1))#; 01856000
DEFINE SPOUT=SPOINOUT#; 01857000
SAVE PROCEDURE IOERR(IOD); VALUE IOD; REAL IOD; 01860000
BEGIN REAL T; 01870000
IOD _ IOD.[3:5]; 01890000
T _ IF IOD=30 THEN "SPO" ELSE 01900000
IF IOD=10 THEN "CRA" ELSE 01910000
IF IOD= 6 THEN "DKA" ELSE 01920000
IF IOD=22 THEN "LPA" ELSE 01921000
IF IOD=26 THEN "LPB" ELSE 01922000
IF IOD= 4 THEN "DRA" ELSE "XXX"; 01930000
STREAM(T,A_[MESSAGE[4]]); 01940000
BEGIN SI _ LOC T; SI _ SI+5; DS _ 3CHR; END; 01950000
SPOUT(4); 01960000
IF IOD =10 THEN 01970000
BEGIN DO UNTIL P(RRR).[24:1] = 0; 01980000
DO UNTIL P(RRR).[24:1]; 01990000
END ELSE 02000000
IF IOD LSS 22 THEN GO BOMBOUT; 02000100
END IOERR; 02020000
SAVE PROCEDURE DISKIO(A,C); VALUE A; 02030000
ARRAY C[*]; 02040000
REAL A; 02050000
BEGIN BOOLEAN R; 02060000
C :=C INX NOT 0; 02070000
IF R:=A.[1:1] THEN A := ABS (A); 02080000
STREAM(A,X_FLAG(C)); 02090000
BEGIN SI _ LOC A; DS _ 8 DEC END; 02100000
IF R THEN IO(C,@140360140100000&NUMWDS[8:38:10] 02110000
&((NUMWDS+29)DIV 30)[27:42:6]) ELSE 02120000
BEGIN 02130000
IO(C,@140360100100000); 02140000
M[READBACK] _ M[C]; 02150000
IO(READBACK,@140360140100000); 02160000
STREAM(READBACK:X_FLAG(C)); 02170000
BEGIN SI _ READBACK; SI _ SI+8L DI _ DI+8; 02180000
5(IF 48 SC ! DC THEN TALLY _ 1); 02190000
READBACK _ TALLY; 02200000
END; 02210000
IF P THEN IOERR(@140000000000000); 02220000
END; 02230000
END; 02240000
SAVE REAL PROCEDURE SCANWORD(TABLE); ARRAY TABLE[*]; 02250000
BEGIN REAL T; 02260000
T:=IF(M[CARD] EQV 0)=NOT 0 THEN KERNEL ELSE ISOLATE(CARD);02270000
SCANWORD:=IF T=KERNEL THEN T ELSE SEARCH(CARD,TABLE,T); 02280000
END; 02290000
SAVE REAL PROCEDURE SCANUMBER; 02300000
BEGIN REAL T; 02310000
T _ ISOLATE(CARD); 02320000
STREAM(R_0:T,CARD); 02330000
BEGIN DI_DI-T; CARD _ DI; 02340000
SI _ CARD; 02350000
DI _ LOC R; 02360000
DS _ T OCT; 02370000
END; 02380000
SCANUMBER _ P; 02390000
END; 02400000
% 02410000
$ SET OMIT = NOT(COOL) 02410500
SAVE BOOLEAN PROCEDURE LOOKFOR(L1,L2); VALUE L1,L2; REAL L1,L2; 02411000
BEGIN REAL I; LABEL XXIT; 02411100
FOR I:=0 STEP 2 UNTIL RTI DO 02411200
IF (L1 EQV RT[I])=NOT 0 OR RT[I] LSS 0 THEN 02411300
IF (L2 EQV RT[I+1])=NOT 0 OR RT[I+1] LSS 0 THEN 02411400
BEGIN LOOKFOR:=TRUE; I:=RTI; GO XXIT; END; 02411500
XXIT: 02411600
END; 02411700
$ POP OMIT 02411750
% 02411800
SAVE INTEGER PROCEDURE PACKER; 02420000
BEGIN; 02430000
STREAM (A:=[BUFFER[9]],B:=[PACKER]); 02440000
BEGIN SI := A; SI := SI + 4; 02450000
DI := B; DI := DI + 6; 02460000
4(SKIP 3 SB; 3(IF SB THEN DS:=SET ELSE SKIP DB;SKIP SB));02470000
END; 02480000
END; 02490000
% 02500000
SAVE PROCEDURE LOADERS; 02510000
BEGIN LABEL TOPPER,NXTCRD,EXIT; 02520000
INTEGER N,SIZE; 02521000
IF (TYPE=KERNEL AND LOADED) 02530000
OR (TYPE!KERNEL AND (LOADED.[46:1])) THEN 02531000
BEGIN SPOUT(9); 02540000
GO BOMBOUT; 02550000
END; 02560000
IF TYPE NEQ KERNEL THEN GO NXTCRD; 02561000
TOPERR: STREAM(B:=[BUFFER[1]],A:=N:=BUFFER[9].[6:9], 02570000
D_PACKER INX BUFFER); 02580000
BEGIN SI _B; DS _ A WDS; END; 02590000
SIZE:=SIZE+N; 02591000
NXTCRD: IO(BUFFER INX 0,@240120040000000); 02600000
IF BUFFER[0].[4:44]=0 THEN GO TO TOPPER; 02610000
SIZE:=(SIZE+29) DIV 30; 02611000
IF (TYPE=KERNEL AND (1+SIZE) GTR MEMDISKADR) THEN 02612000
BEGIN 02612100
SPOUT(36); 02612300
LOADED:=LOADED OR 2; 02612400
END ELSE 02612500
IF (TYPE!KERNEL AND (MEMDISKADR+SIZE) GTR ESPBOTTOM) THEN 02612600
BEGIN 02612700
SPOUT(32); 02612800
GO EXIT; 02612900
END; 02613000
TEMMP := BUFFER; 02620000
BUFFER := 111 INX BUFFER; 02630000
BUFFER[0] := IF TYPE=KERNEL THEN 1 ELSE DECI(MEMDISKADR); 02640000
LOADED := LOADED OR 02650000
(IF TYPE=KERNEL THEN 1 ELSE 2); 02651000
IO(BUFFER INX 0,@140000000000000&SIZE[27:42:6]); 02660000
BUFFER := TEMMP; 02670000
EXIT: 02671000
END; 02680000
$ SET OMIT = NOT COOL 02689999
SAVE PROCEDURE REMOVER(L); VALUE L; INTEGER L; 02690000
BEGIN 02700000
STREAM(A:=[LABELS[I]],X:=(L=0),L,ADR:=J-(L NEQ 0)x 02710000
((80-I) DIV 2),MONTHS); 02711000
BEGIN 55(DS:=LIT" "); DS:=LIT"_"; DI:=MONTHS; 02712000
SI:=A; X(DS:=8CHR;DS:=LIT"/"; DS:=8CHR; JUMP OUT TO RMVE);02720000
SI:=SI+ 1;DS:=7 CHR; DS:=LIT"/";SI:=SI+1;DS:=7CHR; 02720200
RMVE:DS:=9LIT" REMOVED("; 02730000
CI:=CI+L; 02730100
GO NAM; 02730120
GO HDR; 02730140
GO DECK; 02730160
NAM :DS:=8LIT"BAD NAME";GO FIN; 02730200
HDR :DS:=7LIT"BAD HDR"; GO FIN; 02730300
DECK:DS:=4LIT"DECK"; 02730400
FIN :DS:=9LIT") AT ADR="; 02730500
SI:=LOC ADR; X:=DI; DS:=8DEC; DI:=X; DS:=7FILL; 02730600
END; 02740000
LABELS[I]:=@14; 02750000
IF NOT(P1IO OR P2IO) THEN IF NOT SPOIO THEN ELSE 02751000
IO(MONTHS INX 0,@740000000000000) ELSE 02755000
IO(MONTHS INX 0,IF P1IO THEN @540070004000000 ELSE 02757000
@640070004000000); 02760000
END; 02770000
$ POP OMIT 02700001
SAVE REAL PROCEDURE EOM; 02780000
BEGIN GO TO TIMER END; 02790000
%***********************START HERE**************************** 02800000
TART :@20: QX _ 1; GO TO START; 02810000
TIMER :@22:P(INI); GO TO TIMER; % TIME INTERVAL 02820000
:@24:GO TO TIMER; % KEYBOARD REQUEST 02830000
:@25:P(22); GO GLOB; % LPA FINISHED 02840000
:@26:P(26); GO GLOB; % LPB FINISHED 02850000
:@27:P(@14,LOD,RTN); % I/O #1 FINISHED 02860000
:@30:P(@15,LOD,RTN); % I/O #2 FINISHED 02870000
:@31:P(@16,LOD,RTN); % I/O #3 FINISHED 02880000
:@32:P(@17,LOD,RTN); % I/O #4 FINISHED 02890000
:@34:GO TO TIMER; % INQUIRY REQUEST 02900000
%**********************CODE STARTS HERE************************** 02910000
START:*: P(64,STS); 02920000
DISKTOP _ -1; 02930000
NUMWDS := 30; 02940000
CORE _ P(.EOM,LOD).[33:15]+3; 02950000
STREAM(CORE); 02960000
BEGIN DS _ 8 LIT "0"; SI _ CORE; 02970000
32(DS _ 32 WDS); 02980000
END; 02990000
SHAR := [M[CORE]]&31[8:38:10]; 03000000
CORE := CORE +31; 03010000
LOADER _ CORE; 03020000
CORE _ CORE+30; 03030000
INFO _ [M[CORE]]&30[8:38:10]; 03040000
CORE _ CORE+40; 03050000
FILEH _ [M[CORE]]&30[8:38:10]; 03060000
CORE _ CORE+40; 03070000
FILEX := [M[CORE]]&450[8:38:10]; 03080000
CORE := CORE + 450; 03090000
LABELS _ [M[CORE]]&30[8:38:10]; 03100000
CORE _ CORE+40; 03110000
READBACK _ CORE; 03120000
CORE _ CORE+40; 03130000
ZERO:=[M[CORE]]&30[8:38:10]; 03130100
CORE:=CORE+40; 03130200
RT:=[M[CORE]]&300[8:38:10]; 03130300
CORE:=CORE+310; 03130400
SPOIO:=P(RRR).[22:1]; 03131000
P1IO:=P(RRR).[27:1]; 03131050
P2IO:=P(RRR).[26:1]; 03131100
$ SET OMIT = COOL 03131299
LOWADR:=99999999; % INITIALIZE 03131300
$ POP OMIT 03131401
$ SET OMIT = NOT(COOL) 03140000
DISKIO(-0,SHAR); 03150000
FOR I := 13 STEP 5 UNTIL 28 03160000
DO SHAR[I] := SHAR[I+1] := 0; %CLEAR ALL INT 03170000
INFO[0] := @40; 03180000
INFO[1] _ 0; 03185000
IO(-(INFO INX 0),@140004000000000); 03190000
SYSNO := INFO[1].[4:2]; %GET SYSTEM NUMBER 03200000
FIRSTCARD:=TRUE; 03200025
RTI:=-1; 03200030
$ POP OMIT 03200050
I _ 0; 03210000
BUFFER := [M[CORE]]&10[8:38:10]; 03230000
% 03240000
READCARD: CARD _ CORE; %READ CARD 03250000
IO(CARD,@240000040000000); 03260000
HANDLE: STREAM (C:=CARD+10); DS := 2 LIT "%-"; 03270000
TYPE:=SCANWORD(FIRST); 03280000
$ SET OMIT = NOT(COOL) 03280099
IF FIRSTCARD THEN 03280100
IF TYPE NEQ 10 AND TYPE NEQ KERNEL THEN 03280200
BEGIN 03280300
SPOUT(24); 03280400
GO TO ERROR; 03280500
END; 03280600
$ POP OMIT 03280601
GO TYPESWITCH[TYPE]; 03280700
GLOB:: IF PRINTWAIT THEN P(RTN) ELSE P(DEL); 03280800
GO TIMER; 03280900
% 03290000
ERROR:: SPOUT(2); 03300000
DO UNTIL P(RRR).[24:1] = 0; 03310000
DO UNTIL P(RRR).[24:1]; 03320000
P(64,STS); 03330000
GO READCARD; 03340000
% 03350000
MEMDUMP: 03351000
XLOADED: LOADERS; %LOAD LOADER DECK 03360000
CARD := CORE; 03370000
GO TO HANDLE; 03380000
% 03390000
REM: 03391000
$ SET OMIT = COOL 03391100
GO ERROR; 03391200
$ POP OMIT 03391300
$ SET OMIT = NOT(COOL) 03391400
CARD:=CORE; 03391500
IO(CARD,@240000040000000); 03391600
STREAM(C:=CARD+10); DS:=2LIT"%-"; 03391700
LP: IF P(SCN(HDRO)) NEQ NAAME THEN 03391900
IF HDRO NEQ "=" THEN GO ERROR 03392000
ELSE RT[RTI:=RTI+1]:=-1 03392100
IF P(SCN(HDRO)) NEQ DELIM THEN 03392300
IF RT[RTI]="STOP " THEN BEGIN RTI:=RTI-1; GO READCARD; END03392400
ELSE GO ERROR 03392500
ELSE 03392600
IF HDRO NEQ "/" THEN GO ERROR; 03392700
IF P(SCN(HDRO)) NEQ NAAME THEN 03392800
IF HDRO NEQ "=" THEN GO ERROR 03392900
ELSE RT[RTI:=RTI+1]:=-1 03393000
ELSE RT[RTI:=RTI+1]:=HDRO; 03393100
IF P(SCN(HDRO),DUP) NEQ PERCENT THEN 03393200
IF P NEQ DELIM THEN GO ERROR 03393300
ELSE GO LP 03393400
ELSE BEGIN P(DEL); GO REM; END;03393500
$ POP OMIT 03393600
% 03393700
SYSTEMS: SPECIAL ("="); 03400000
SHAR[0] := SCANUMBER ; 03410000
IF SHAR[0] GTR 4 OR SHAR[0] LSS 1 THEN 03420000
BEGIN SHAR[0] := 1; 03430000
GO TO ERROR; 03440000
END; 03450000
GO TO READCARD; 03460000
% 03470000
DIRECTORYTOP: 03480000
$ SET OMT = NOT(COOL) 03480050
IF NOT FIRSTCARD THEN 03480100
BEGIN 03480200
SPOUT(27); 03480300
GO BOMBOUT; 03480400
END; 03480500
$ POP OMIT 03480501
DISKTOP:=SCANUMBER; 03480600
J _ DISKTOP+19; 03490000
$ SET OMIT = NOT(COOL) 03500000
DISKIO(-(DISKTOP-SYSNO),INFO); 03510000
FIRSTCARD:=FALSE; 03510100
$ POP OMIT 03510101
GO TO READCARD; 03520000
% 03530000
DIRECT: INFO[4] _ SHAR[4]_SCANUMBER; 03540000
GO TO READCARD; 03550000
% 03560000
FENCE: SPECIAL("="); 03570000
INFO[19]_@100000-(P(DUP)-SCANUMBER) DIV 1024x1024; 03580000
IF INFO[19]<@20000 THEN INFO[19]_@20000 ELSE 03590000
IF INFO[19]>@70000 THEN IFNO[19]_@70000; 03600000
GO TO READCARD; 03610000
% 03620000
ESU: ESUTEMP:=SCANUMBER; 03630000
SPECIAL("%"); 03635000
GO READCARD; 03640000
% 03650000
DATE: MN _ SCANUMBER; 03660000
IF MN < 1 OR MN > 12 THEN GO TO ERROR; 03670000
SPECIAL("/"); 03680000
DY _ SCANUMBER; 03690000
SPECIAL("/"); 03700000
YR _ SCANUMBER; 03710000
DY _ MONTHS[MN-1]+DY; 03720000
IF YR MOD 4 = 0 AND (YR MOD 100 ! 0 OR YR MOD 400 = 0) 03730000
AND MN } 3 THEN DY _ DY+1; 03740000
DY _ YR MOD 100 x 1000+DY; 03750000
STREAM(D_[DY],I_[INFO[1]]); 03760000
BEGIN SI _ D; DS _ 8 DEC END; 03770000
GO READCARD; 03780000
% 03810000
USE: IF TYPE NEQ 8 THEN XY:=SCANWORD(OPTIONS) 03820000
ELSE XY:=48-SCANUMBER; 03820100
IF XY=0 THEN GO ERROR; 03830000
TREAL:=1; 03880000
FOR K:=2 STEP 1 UNTIL XY DO TREAL:=0&TREAL[1:2:46]; 03890000
INFO[0]:=INFO[0] OR TREAL; 03900000
SPECIAL("%"); 03905000
GO READCARD; 03910000
% 03920000
FILE: 03930000
$ SET OMIT = NOT(COOL) 03940000
GO TO ERROR; 03950000
$ POP OMIT 03950050
$ SET OMIT = COOL 03960000
IF P(SCN(LABELS[28-I])) NEQ NAAME THEN GO ERROR; 03971000
IF P(SCN(N)) NEQ DELIM THEN GO ERROR 03972000
ELSE IF N NEQ "/" THEN GO ERROR; 03973000
IF P(SCN(LABELS[29-I])) NEQ NAAME THEN GO ERROR; 03974000
IF DISKTOP LSS 0 THEN BEGIN SPOUT(6); GO ERROR; END; 03975000
FILEH[0]:=(*P(DUP))&30[1:34:14]&30[15:33:15]& 03975100
1[30:36:12]&1[42:42:6]; 03975200
IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03976000
IF P(SCN(FILEH[9])) NEQ NUMBER THEN GO ERROR; 03977000
IF FILEH[9] GTR 20 THEN GO ERROR; 03978000
IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03979000
IF P(SCN(FILEH[8])) NEQ NUMBER THEN GO ERROR; 03980000
IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03981000
IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03982000
ELSE IF N GTR 999 THEN GO ERROR 03983000
ELSE FILEH[3]:=-DY&DY[12:30:18]&N[2:38:10]; 03984000
IF (K:=P(SCN(N))) = PERCENT THEN 03985000
ELSE 03986000
BEGIN IF K NEQ DELIM THEN GO ERROR; 03987000
IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03988000
ELSE FILEH[0]:=(*P(DUP))& 03989000
N[1:34:14]; 03989100
K:=N; 03989200
IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03990000
IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03991000
ELSE FILEH[0]:=(*P(DUP))& 03992000
N[15:33:15]; 03992100
FILEH[0]:=(*P(DUP))&((N+29) DIV 30)[42:42:6] 03992200
&(N DIV K)[30:36:12]; 03992300
IF P(SCN(N)) NEQ PERCENT THEN GO ERROR; 03993000
END; 03994000
N:=FILEH[9]; 03996000
FOR K _ 1 STEP 1 UNTIL N DO 04180000
BEGIN CARD _ CORE; 04190000
IO(CARD,@240000040000000); 04200000
IF SCANWBRD(FIRST) ! 0 THEN GO TO ERROR; 04210000
CARD _ CORE; 04220000
FILEH[9+K] _ SCANUMBER; 04230000
SPECIAL("%"); 04240000
IF FILEH[9+K] LSS LOWADR THEN 04241000
IF FILEH[9+K] NEQ DISKTOP+4 THEN LOWADR:=FILEH[9+K]; 04245000
END; 04250000
FOR K _ K STEP 1 UNTIL 20 DO 04260000
FILEH[9+K] _ 0; 04270000
FILEH[4]:=@44; 04280200
FILEH[7] _ FILEH[8]xN-1; 04290000
I _ I+2; 04300000
DISKIO(J-(I DIV 2),FILEH); 04310000
IF I = 30 THEN 04320000
BEGIN DISKIO(J,LABELS); 04330000
J _ J+16; 04340000
I _ 0 04350000
END; 04360000
GO TO READCARD; 04370000
$ POP OMIT 04370050
RECONSTR: 04371000
$ SET OMIT = NOT COOL 04371100
RC:=HARD:=TRUE; GO READCARD; 04371200
$ SET OMIT = COOL 04371300
GO ERROR; 04371400
$ RESET OMIT 04371500
REMCD: 04372000
$ SET OMIT = NOT COOL 04372009
RD:=HARD:=TRUE; GO READCARD; 04372010
$ SET OMIT = COOL 04372015
GO TO ERROR; 04372020
$ RESET OMIT 04372021
%::::::::::::::::::::::NO MORE CARDS::::::::::::::::::::::::::::: 04380000
STOP: SHAR[4]:=INFO[4]; 04390500
INFO[16]:=15; 04395000
IF SPOIO THEN 04395100
BEGIN 04395200
SPOUT(12); 04395300
KEYIN(12); 04395400
IF NOT OK([MESSAGE[12]] INX 0) THEN 04395500
BOMBOUT:: 04395550
BEGIN STREAM(B:=[MESSAGE[12]]); 04395600
DS:=24 LIT "COOL/COLD START ABORTED_"; 04395700
SPOUT(12); 04395800
DO UNTIL FALSE; 04395900
END; 04396000
STREAM(A:=INFO[4],SV:=0,N:=(MESSAGE[27]]); 04396050
BEGIN DS:=20LIT"USER DISK BEGINS AT "; SI:=LOC A; 04396100
DS:=8DEC; SV:=DI; DI:=DI-8; DS:=7FILL; DI:=SV; 04396150
DS:=LIT"_"; 04396200
END; 04396250
SPOUT(27); 04396300
END; 04396400
$ SET OMIT = COOL 04397000
IF (INFO[4] LEQ DISKTOP OR (N:=LOWADR LSS INFO[4])) THEN 04397100
BEGIN IF SPOIO THEN 04397200
BEGIN SPOUT(62); IF N=1 THEN SPOUT(65); END; 04397300
GO BOMBOUT; 04397400
END; 04397500
IF DISKTOP < 0 THEN 04400000
BEGIN 04410000
SPOUT(6); 04420000
GO TO ERROR; 04430000
END; 04440000
$ POP OMIT 04440001
IF ESUTEMP LEQ 0 THEN 04441000
BEGIN 04441100
SPOUT(17); 04441200
GO TO ERROR; 04441300
END; 04441400
SHAR[1] _ DISKTOP; 04450000
IF SHAR[0] GTR 4 OR SHAR[0] LSS 1 THEN SHAR[0] := 1; 04460000
$ SET OMIT = NOT COOL 04470004
%********* LOOK AT SEGMENT ZERO ********** 04470005
IF SHAR[1] GTR 10000 OR SHAR[1] LSS 50 OR 04470010
SHAR[4] GTR 100000 OR SHAR[4] LSS 50 04470015
THEN BEGIN SPOUT(53); GO BOMBOUT; END; 04470020
FOR N:=C STEP 1 UNTIL 29 DO 04470030
IF P(SHAR[N],TOP,XCH,DEL) THEN ELSE 04470035
BEGIN FNDERR:=TRUE; SHAR[N]:=0; END; 04470040
FOR N:=10 STEP 5 UNTIL SHAR[0]x5+5 DO 04470045
BEGIN 04470050
IF ((SHAR[N] OR SHAR[N+1]) AND @3700000000000000) NEQ 0 04470055
THEN BEGIN FNDERR:=TRUE; SHAR[N]:=SHAR[N+1]:=0; END; 04470060
IF ((SHAR[N+3] OR SHAR[N+4]) AND @3700000000000000) NEQ 0 04470065
THEN BEGIN FNDERR:=TRUE; SHAR[N+3]:=SHAR[N+4]:=0; END; 04470070
END; 04470075
IF FNDERR THEN SPOUT(53); 04470080
%********** END OF SEGMENT ZERO EXAMINATION ********** 04470085
$ POP OMIT 04470090
DISKIO(0,SHAR); 04470095
$ SET OMIT = NOT COOL 04470099
IF ESUTEMP NEQ INFO[2] THEN 04470100
IF SPOIO THEN 04470105
BEGIN 04470110
STREAM(A:=INFO[2],D:=0,B:=ESUTEMP,C:=MESSAGE INX 69); 04470120
BEGIN DI:=DI+31; SI:=LOC A; C:=DI; DI:=LOC D; DS:=8DEC; 04470130
DI:=LOC D; DS:=7FILL; DI:=C; 8(IF SC=" " THEN SI:=SI+1 04470140
ELSE DS:=CHR); DS:=4LIT" TO "; C:=DI; DI:=LOC D; DS:=8DEC;04470150
DI:=LOC D; DS:=7FILL; DI:=C; SI:=LOC D; 8(IF SC=" " THEN 04470160
SI:=SI+1 ELSE DS:=CHR); DS:=LIT"_"; 04470170
END; 04470180
SPOUT(69); 04470200
SPOUT(14); 04470210
KEYIN(69); 04470220
IF NOT OK(MESSAGE INX 69) THEN GO BOMBOUT; 04470230
END; 04470235
$ POP OMIT 04470236
INFO[2]:=ESUTEMP; 04470240
$ SET OMIT = COOL 04480000
LABELS[28-I] _ @114; 04490000
LABELS[29-I] _ 0; 04500000
FOR I:=0 STEP 1 UNTIL(SHAR[0]-1)DO DISKIO(DISKTOP-I,INFO);04510000
$ POP OMIT 04510050
$ SET OMIT = NOT(COOL) 04520000
FOR I:=-7 STEP 1 UNTIL -4 DO DISKIO(DISKTOP+I,ZERO); 04520200
FOR I:=1 STEP 1 UNTIL 3 DO DISKIO(DISKTOP+I,ZERO); 04520300
%********** LOOK AT DIRECTORYTOP ********** 04520400
FNDERR:=FALSE; 04520450
FOR I:=0 STEP 1 UNTIL 29 DO 04520500
IF P(INFO[I],TOP,XCH,DEL) THEN ELSE 04520600
BEGIN FNDERR:=TRUE; INFO[I]:=0; END; 04520700
IF (INFO[2] DIV 100) GTR 10 OR (INFO[2] MOD 100) GTR 10 04520800
THEN BEGIN SPOUT(56); GO BOMBOUT; END; 04520900
IF INFO[8] GTR @7777 THEN 04521000
BEGIN FNDERR:=TRUE; INFO[8]:=1; END; 04521050
IF INFO[9] LSS 0 THEN 04521100
BEGIN FNDERR:=TRUE; INFO[1]:=1; END; 04521150
IF FNDERR THEN SPOUT(56); 04521175
%********** END OF DIRECTORYTOP EXAMINATION ********** 04521200
DISKIO(DISKTOP-SYSNO,INFO); 04521300
$ POP OMIT 04530050
N := ESPBOTTOM ;%START CLEAN ESPDISK 04540000
MRCLEAN: IF N LSS (DISKTOP-SHAR[0]) THEN 04550000
BEGIN ;STREAM(B:=N,X:=FILEH); 04560000
BEGIN SI:=LOC B;DS:=8 DEC;END; 04570000
P(N); 04580000
IF (N:=DISKTOP-SHAR[0]-N))GEQ 63 THEN 04590000
IO(FILEH INX 0,@14000007700000) 04600000
ELSE 04610000
IO(FILEH INX 0,@14000000000000&N[27:42:6]); 04620000
N := P + 63; 04630000
GO TO MRCLEAN; 04640000
END; 04650000
STREAM (B:=DISKTOP+1,X:=FILEH); 04660000
BEGIN SI:=LOC B;DS:=8 DEC;END; 04670000
IO(FILEH INX 0,@141320000000000 & 04680000
$ SET OMIT = NOT(COOL) 04680099
(IF RD THEN 3 ELSE 2)[30:45:3]); 04680100
$ POP OMIT 04680101
$ SET OMIT = COOL 04680199
3[30:45:3]); 04680200
$ POP OMIT 04680201
$ SET OMIT = NOT(COOL) 04685000
N_(((INFO[4]-DISKTOP+3) DIV (35/2))x16) + J; 04690000
MN:=DISKTOP +4; 04691000
YR:=INFO[4]; 04691100
TYPE:=INFO[2]x1000000; 04691200
IF P1IO OR P2IO THEN BEGIN 04691300
STREAM(M:=[MESSAGE[53]]); 04691400
DS:=25LIT"CHECK PRINTER FOR OUTPUT_"; 04691500
SPOUT(53); 04691600
END; 04691700
FOR J_J STEP 16 UNTIL N DO 04700000
BEGIN 04710000
NUMWDS := 480; 04720000
DISKIO(-(J-15),FILEX); 04730000
FOR I:=0 STEP 2 UNTIL 28 DO 04740000
BEGIN 04750000
STREAM(A:=0?D:=[LABELS[I]]); 04760000
BEGIN SI:=D;IF SC!"0" THEN TALLY:=1; 04770000
SI:=SI+8;IF SC!"0" THEN TALLY:=1; 04780000
A:=TALLY; 04790000
END; 04800000
IF P THEN REMOVE(0); 04810000
END; 04820000
FOR I_28 STEP -2 UNTIL 0 DO 04830000
IF LABELS[I]=@114 THEN GO QUIT ELSE 04840000
IF LABELS[I]!@14 THEN 04850000
IF RTI LEQ 0 THEN GO ON ELSE 04851000
IF P(LOOKFOR(LABELS[I],LABELS[I+1])) 04852000
THEN BEGIN 04853000
STREAM(A:=(LABELS[I]],B:=[MESSAGE[59]]); 04854000
BEGIN SI:=A; SI:=SI+1; DS:=7CHR; 04855000
DI:=DI+1; SI:=SI+1; DS:=7CHR; 04856000
END; 04856500
LABELS[I]:=@14; 04856600
IF NOT(P1IO OR P2IO) THEN 04856650
IF NOT SPOIO THEN ELSE 04856670
IO(MESSAGE INX 59,@740000000000000) 04856700
ELSE 04856750
IO(MESSAGE INX 59,IF P1IO THEN 04856760
@540030004000000 ELSE 04756770
@640030004000000); 04856780
END 04857000
ELSE 04858000
ON: BEGIN 04860000
IF (LABELS[I] EQV "DECK ")=NOT 0 THEN 04869000
BEGIN 04869200
IF NOT HARD THEN BEGIN 04869400
IF SPOIO THEN 04869500
BEGIN 04869550
SPOUT(20); KEYIN(20); 04869600
RD:=OK([MESSAGE[20]] INX 0); 04869800
HARD:=TRUE; 04870000
END; 04870100
END; 04870200
IF RD THEN 04870400
IF ((LABELS[I+1] AND @77000000007777) EQV 04880000
@12000000003714)=NOT 0 THEN 04890000
BEGIN 04900000
LABELS[I+1]_(P(DUP,LOD) AND 04910000
@77777777770000) OR @6060; 04920000
REMOVE(2); 04930000
END; 04935000
END; 04940000
SKEDTOG:=LABELS[I].[6:24]="FILE" AND 04941000
(LABELS[I+1] EQV "SHCEDUL")=NOT 0; 04942000
FILEH := ((NUMWDS:=Ix15)INX FILEX)&30[8:38:10];04950000
K:= 04959000
FILEH[9]:=(*[(DUP)) AND 31; 04960000
STREAM(T_0:FILEH); 04970000
BEGIN SI_FILEH; 30(IF S? THEN BEGIN TALLY_1; 04980000
JUMP OUT END ELSE SI_SI+8); T_TALLY; 04990000
END; 05000000
IF P OR(K GTR 20) THEN REMOVE(1); 05010000
FOR T:=K+9 STEP -1 UNTIL 10 DO 05020000
IF (DY:=FILEH[T]) NEQ 0 THEN 05030000
IF DY GEQ TYPE OR 05040000
(DY LEQ YR AND DY GTR MN) THEN REMOVE(1); 05050000
DY:=0; 05059000
FOR T:=10 STEP 1 UNTIL 29 DO 05060000
BEGIN 05061000
DY:=DY+(XY:=(FILEH[T] NEQ 0)); 05062000
IF T GEQ K+10 THEN IF XY THEN T:=31; 05063000
END; 05064000
IF ((T=31) OR (DY GTR K) AND NOT SKEDTOG) OR 05065000
(DY NEQ 0 AND FILEH[8]=0) THEN REMOVE(1); 05070000
%********** RECONSTRUCT BAD HEADERS ********** 05070005
IF (HDRO:=FILEH[0]).[1:14]=0 OR BLOCKSIZE=0 OR 05070010
RECSPERBLOCK=0 OR SEGSPERBLOCK=0 THEN 05070020
BEGIN 05070030
IF NOT HARC THEN BEGIN 05070040
IF SPOIO THEN 05070045
BEGIN 05070047
SPOUT(40); KEYIN(40); 05070050
RC:=OK([MESSAGE[40]] INX 0); 05070060
HARC:=TRUE; 05070070
END; 05070075
END; 05070080
IF RC THEN 05070090
BEGIN IF SEGSPERBLOCK=0 THEN 05070100
BEGIN IF RECSPERBLOCK=0 THEN 05070110
BEGIN 05070120
IF RECSIZE=0 THEN GO PUNT; 05070130
IF BLOCKSIZE=0 THEN GO PUNT; 05070140
RECSPERBLOCK:=BLOCKSIZE DIV RECSIZE; 05070150
SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30; 05070160
END 05070170
ELSE 05070180
BEGIN 05070190
IF BLOCKSIZE=0 THEN 05070200
IF RECSIZE=0 THEN GO PUNT 05070210
ELSE 05070220
BEGIN BLOCKSIZE:=RECSPERBLOCKxRECSIZE; 05070230
SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30;05070240
END 05070250
ELSE 05070260
BEGIN 05070270
RECSIZE:=BLOCKSIZE DIV RECSPERBLOCK; 05070280
SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30; 05070290
END 05070300
END 05070310
END 05070320
ELSE 05070330
BEGIN 05070340
BLOCKSIZE:=SEGSPERBLOCK x 30; 05070350
IF RECSIZE=0 THEN 05070360
IF RECSPERBLOCK=0 THEN GO PUNT 05070370
ELSE 05070380
RECSIZE:=BLOCKSIZE DIV RECSPERBLOCK 05070385
ELSE RECSPERBLOCK:=BLOCKSIZE DIV RECSIZE; 05070390
END; 05070400
FILEH[0]:=HDR0; 05070405
GO ARND; 05070410
PUNT: BLOCKSIZE:=30; 05070420
RECSIZE:=30; 05070425
RECSPERBLOCK:=1; 05070430
SEGSPERBLOCK:=1; 05070435
FILEH[0]:=HDRO; 05070440
ARND: 05070450
IF NUMWDS NEQ 0 THEN ESUTEMP:=FILEX[NUMWDS-1]; 05070452
DISKIO(J-15+(I DIV 2),FILEX[NUMWDS-1]); 05070454
IF NUMWDS NEQ 0 THEN FILEX[NUMWDS-1]:=ESUTEMP; 05070456
END; 05070460
STREAM(A:=[LABELS[I]],BS:=BLOCKSIZE,RS:=RECSIZE,RPB:=RECSPERBLOCK, 05070470
SPB:=SEGSPERBLOCK,SV:=0,B:=[MESSAGE[45]]); 05070480
BEGIN SI:=A; SI:=SI+1; DI:=B; DS:=7CHR; DI:=DI+1; SI:=SI+1; 05070490
DS:=7CHR; DI:=DI+8; SI:=LOC BS; DS:=5DEC; SV:=DI; DI:=DI-5; 05070500
DS:=4FILL; DI:=SV; DI:=DI+8; DS:=5DEC; SV:=DI; DI:=DI-5; 05070510
DS:=4FILL; DI:=SV; DI:=DI+6; DS:=4DEC; SV:=DI; DI:=DI-4; 05070520
DS:=3FILL; DI:=SV; DI:=DI+6; DS:=2DEC; DI:=DI-2; DS:=FILL; 05070530
END; 05070540
IF NOT(P1IO OR P2IO) THEN IF NOT SPOIO THEN ELSE 05070550
IO(MESSAGE INX 45,@740000000000000) ELSE 05070560
IO(MESSAGE INX 45,IF P1IO THEN @540100004000000 05070570
ELSE @640100004000000); 05070580
END; 05070590
%************* END RECONSTRUCTION CODE ********** 05070600
REMOVED: 05071000
END; 05100000
LABELS[0]_@114; 05110000
QUIT: 05120000
IF P1IO OR P2IO THEN IO(0,@440004000100000&(IF P1IO THEN 05120010
@1 ELSE @2)[4:46:2]); 05120010
$ POP OMIT 05120050
DISKIO(J,LABELS); 05130000
FOR I _ 0 STEP 1 UNTIL 29 DO INFO[I] _0; 05160000
IF SPOIO THEN 05160100
SPOUT(0); 05170000
QX _ 0; 05180000
IO(LOADER,@240000540000000); 05190000
IF QX ! 2 THEN 05200000
STREAM(L_LOADER,A_16); BEGIN SI_L; DS_20 WDS END 05210000
ELSE 05220000
STREAM(LOADBUTTON,A_@20); BEGIN SI_LOADBUTTON;DS_15 WDS END;05230000
P(0,STS,0,STF); 05240000
GO TO TART; 05250000
DO UNTIL FALSE; 05260000
END OF WARM LOADER. 05270000