mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-03 01:47:56 +00:00
Commit implementation of LONGALG and LONG ARRAYs for use by B65SIM.
Commit compile card deck and listing for B65SIM.
This commit is contained in:
7651
B6500-Simulator/B65SIM-COMPILE-PRT.lst
Normal file
7651
B6500-Simulator/B65SIM-COMPILE-PRT.lst
Normal file
File diff suppressed because it is too large
Load Diff
8
B6500-Simulator/B65SIM-COMPILE.card
Normal file
8
B6500-Simulator/B65SIM-COMPILE.card
Normal file
@@ -0,0 +1,8 @@
|
||||
?REMOVE B65SIM/DISK
|
||||
?COMPILE B65SIM/DISK WITH LONGALG LIBRARY
|
||||
?ALGOL FILE TAPE=SYMBOL/B65SIM SERIAL
|
||||
?ALGOL FILE NEWTAPE=NEWSYM/B65SIM SERIAL
|
||||
?DATA CARD
|
||||
$TAPE LIST SINGLE PRT
|
||||
$ 99999990
|
||||
?END
|
||||
BIN
B6500-Simulator/LONGALG-DELTA.pdf
Normal file
BIN
B6500-Simulator/LONGALG-DELTA.pdf
Normal file
Binary file not shown.
127
B6500-Simulator/LONGALG-PATCH.alg_m
Normal file
127
B6500-Simulator/LONGALG-PATCH.alg_m
Normal file
@@ -0,0 +1,127 @@
|
||||
?REMOVE LONGALG/DISK, LONGALG/NEW, NEWSYM/LONGALG 00000100
|
||||
?COMPILE LONGALG/NEW ALGOL LIBRARY 00000200
|
||||
?ALGOL STACK=1000 00000300
|
||||
?ALGOL FILE TAPE=SYMBOL/ALGOL SERIAL 00000400
|
||||
?ALGOL FILE NEWTAPE=NEWSYM/LONGALG SERIAL 00000450
|
||||
?FILE LINE = LINE BACK UP DISK 00000500
|
||||
?FILE NEWTAPE = "0CRDIMG" TAPE 00000600
|
||||
?FILE PNCH = PNCH PUNCH 00000700
|
||||
?DATA CARD 00000800
|
||||
$ TAPE CHECK NEW 00000900
|
||||
% THE SECOND COMING OF THE B-5500 LONGALG COMPILER 00001020
|
||||
% 3 JUNE 2017 00001040
|
||||
506 BLOCK: LONG APPEARS IMMEDIATELY BEFORE IDENTIFIER(NO TYPE). 00305070
|
||||
[22:1] =IF 1, THIS IS THE FINAL ROW OF A LONG ARRAY, WHICH 01106700
|
||||
WILL REQUIRE DOUBLING OF THE RAW INDEX VALUE AND 01106800
|
||||
AN EXTRA LEVEL OF INDEXING FOR LONGROWSZ-WORD ROWS. 01106900
|
||||
DEFINEV =19#, COMMENT 23; 01298000
|
||||
LONGV =20#; COMMENT 24; 01298100
|
||||
DEFINE LONGROWSZ=256#; % SIZE OF LONG-ARRAY SEGMENTED ROWS 01299300
|
||||
LASTSEQUENCE =156#, 01575000
|
||||
SORTA =666# ; 01580000
|
||||
P5, COMMENT TELLS WHETHER LONG WAS SEEN; 01589600
|
||||
<X22,"RETRO-B5500 LONGALG COMPILER MARK ", 01830000
|
||||
OCT0430000240000000, "4LONG0", %664 09214432
|
||||
0, COMMENT SORTA ; %666 09214435
|
||||
" " ; COMMENT LASTSEQUENCE,LASTSEQROW ; %667 09214440
|
||||
639STEP 3UNTIL 660,664 09214516
|
||||
STEPIT; J~K;P2~P3~P5~FALSE;GTA1[0]~0; GET7(ACCUM[1],FILID); 13080000
|
||||
BOOLEAN LLITOG,ULITOG,LONGDIM; 13450000
|
||||
ELSE IF T1=LONGV THEN 13467100
|
||||
BEGIN 13467200
|
||||
P5~TRUE; 13467300
|
||||
END 13467400
|
||||
CSZ: 13527000
|
||||
LONGDIM:= P5 AND TABLE(I)=RTBRKET; % LAST DIM OF LONG ARRAY 13527100
|
||||
IF LLITOG AND ULITOG THEN 13527200
|
||||
T~IF ADDCON=ADDC THEN 13529500
|
||||
T4+T3+1 ELSE T4-T3+1; 13529600
|
||||
IF T{0 THEN FLAG(59); 13529700
|
||||
IF NOT LONGDIM THEN 13529800
|
||||
BEGIN 13529900
|
||||
IF T>1023 THEN FLAG(59); 13530000
|
||||
EMITL(T); 13530100
|
||||
END 13530200
|
||||
ELSE 13530300
|
||||
BEGIN 13530400
|
||||
% FOR A LONG ARRAY, DOUBLE THE SIZE OF 13530500
|
||||
% THE LAST DIMENSION AND SPLIT IT INTO 13530600
|
||||
% LONGROWSZ-WORD ROWS. 13530700
|
||||
T~(2|T+LONGROWSZ-1) DIV LONGROWSZ; 13530800
|
||||
EMITL(T); % # ROWS 13530900
|
||||
EMITL(LONGROWSZ); % FINAL ROW SIZE 13531000
|
||||
IF T>1023 THEN FLAG(59); 13531100
|
||||
IF T<LONGROWSZ THEN % CHOOSE MAX SIZE 13531200
|
||||
T~LONGROWSZ; 13531300
|
||||
END; 13531400
|
||||
END;EMITL(1);EMITO(ADD); 13545000
|
||||
IF LONGDIM THEN 13545100
|
||||
BEGIN 13545200
|
||||
EMITO(DUP); 13545300
|
||||
EMITO(ADD); % DOUBLE THE SIZE 13545400
|
||||
EMITL(LONGROWSZ-1); 13545500
|
||||
EMITO(ADD); % ROUND UP TO LONGROWSZ 13545550
|
||||
EMITL(LONGROWSZ); 13545600
|
||||
EMITO(IDV); % # ROWS 13545650
|
||||
EMITL(LONGROWSZ); % FINAL ROW SIZE 13545700
|
||||
END; 13545800
|
||||
SLB: % IF LAST DIM OF LONG ARRAY, SET BIT 22 IN INFO DIMENSION WORD 13547000
|
||||
PUTNBUMP(T2 & REAL(LONGDIM)[22:47:1]); 13547100
|
||||
LBJ~LBJ+1;IF T~TABLE(I)=COMMA THEN GO TO TWO 13547200
|
||||
EMITL(LBJ+REAL(LONGDIM));EMITL(GTA1[0]); 13552000
|
||||
THEN G~GTA1[J~J-1]; 13726100
|
||||
IF NOT P5 13726200
|
||||
THEN IF P5~(G=LONGV) 13726300
|
||||
STREAMERR,DEFINEDEC,LONGERR,CALLSTATEMENT,HF,START; 14017000
|
||||
STREAMERR,DEFINEDEC,LONGERR; 14021000
|
||||
P2~P3~P5~FALSE; 14133000
|
||||
LONGERR:FLAG(506);J~J+1;GO TO REALDEC; 14136200
|
||||
PROCEDURE INDEXER(TALL,J,BYNAME); 15214020
|
||||
VALUE TALL,J,BYNAME; 15214040
|
||||
REAL TALL,J; 15214060
|
||||
BOOLEAN BYNAME; 15214080
|
||||
BEGIN COMMENT 15214100
|
||||
INDEXER HANDLES THE COMPLEXITIES OF INITIAL AND FINAL 15214120
|
||||
INDEXING OF ARRAY DIMENSIONS WHERE DOUBLE-INDEXING OF THE 15214140
|
||||
LAST DIMENSION OF A LONG ARRAY MAY BE INVOLVED. ON ENTRY, 15214160
|
||||
ASSUMES THE RAW INDEX VALUE IS AT TOP OF STACK; 15214180
|
||||
15214200
|
||||
IF BOOLEAN(TAKE(GIT(TALL)+J).[22:1]) THEN 15214220
|
||||
BEGIN % THIS IS THE LONG DIMENSION FOR A LONG ARRAY. 15214240
|
||||
EMITO(DUP); 15214260
|
||||
EMITO(ADD); % DOUBLE THE INDEX 15214280
|
||||
EMITPAIR(JUNK,ISN); % SAVE A COPY FOR THE COL INDEX 15214300
|
||||
EMITL(LONGROWSZ); 15214320
|
||||
EMITO(IDV); % COMPUTE THE SPLIT-ROW INDEX 15214340
|
||||
IF J=1 THEN 15214360
|
||||
EMITN(TALL.ADDRESS) 15214380
|
||||
ELSE 15214400
|
||||
EMITO(CDC); 15214420
|
||||
EMITO(LOD); % LOAD THE DESTINATION DESCRIPTOR15214440
|
||||
EMITV(JUNK); % RETRIEVE THE SAVED INDEX VALUE 15214460
|
||||
EMITL(LONGROWSZ); 15214480
|
||||
EMITO(RDV); % COMPUTE THE SPLIT-COL INDEX 15214500
|
||||
IF BYNAME THEN 15214520
|
||||
EMITO(CDC) 15214540
|
||||
ELSE 15214560
|
||||
EMITO(COC); 15214580
|
||||
END 15214600
|
||||
ELSE IF J=1 THEN 15214620
|
||||
IF BYNAME THEN 15214640
|
||||
EMITN(TALL.ADDRESS) 15214660
|
||||
ELSE 15214680
|
||||
EMITV(TALL.ADDRESS) 15214700
|
||||
ELSE 15214720
|
||||
IF BYNAME THEN 15214740
|
||||
EMITO(CDC) 15214760
|
||||
ELSE 15214780
|
||||
EMITO(COC); 15214800
|
||||
END INDEXER; 15214820
|
||||
INDEXER(TALL,J,TRUE); 15224000
|
||||
INDEXER(TALL,J,TRUE); 15227000
|
||||
INDEXER(TALL,J,FALSE); 15344000
|
||||
INDEXER(TALL,J,NOT SPCLMON); 15350000
|
||||
$ VOIDT 15356001 15350001
|
||||
$ 15351000
|
||||
END;END. LAST CARD ON 0CRDIMG TAPE 99999990
|
||||
?END 99999999
|
||||
@@ -1,8 +1,8 @@
|
||||
%#######################################################################00001000
|
||||
% 00001010
|
||||
% B-5700 ALGOL COMPILER 00001020
|
||||
% THE SECOND COMING OF THE B-5500 LONGALG COMPILER 00001020
|
||||
% MARK XIII.0 00001030
|
||||
% JULY 15, 1971 00001040
|
||||
% 3 JUNE 2017 00001040
|
||||
% 00001050
|
||||
%#######################################################################00001060
|
||||
% 00001070
|
||||
@@ -410,7 +410,7 @@ ERROR NUMBER ROUTINE:ERROR MESSAGE 00002000
|
||||
503 SEARCHLIB: SEPARATOR REQUIRED BETWEEN START POINT AND LENGTH. 00305040
|
||||
504 SEARCHLIB: ILLEGAL LIBRARY LENGTH. 00305050
|
||||
505 SEARCHLIB: MISSING BRACKET. 00305060
|
||||
00305070
|
||||
506 BLOCK: LONG APPEARS IMMEDIATELY BEFORE IDENTIFIER(NO TYPE). 00305070
|
||||
507 SEARCHLIB: TAPE POSITIONING ERROR. 00305080
|
||||
509 IODEC: NON-LITERAL FILE VALUE NOT GLOBAL TO FILE DECL. 00305100
|
||||
; 00306000
|
||||
@@ -599,6 +599,9 @@ COMMENT INFO FORMAT 01028000
|
||||
EACH SUCCEEDING WORD CONTAINS INFORMATION ABOUT EACH LOWER 01104000
|
||||
BOUND IN ORDER OF APPEARANCE,ONE WORD FOR EACH LOWER BOUND. 01105000
|
||||
THESE WORDS ARE MADE UP AS FOLLOWS: 01106000
|
||||
[22:1] =IF 1, THIS IS THE FINAL ROW OF A LONG ARRAY, WHICH 01106700
|
||||
WILL REQUIRE DOUBLING OF THE RAW INDEX VALUE AND 01106800
|
||||
AN EXTRA LEVEL OF INDEXING FOR LONGROWSZ-WORD ROWS. 01106900
|
||||
[23:12] =ADD OPERATOR SYLLABLE (0101) OR 01107000
|
||||
SUB OPERATOR SYLLABLE (0301) CORRESPONDING 01108000
|
||||
RESPECTIVELY TO WHETHER THE LOWER BOUND IS 01109000
|
||||
@@ -802,8 +805,10 @@ COMMENT INFO FORMAT 01028000
|
||||
FORMATV =16#, COMMENT 20; 01295000
|
||||
FILEV =17#, COMMENT 21; 01296000
|
||||
STREAMV =18#, COMMENT 22; 01297000
|
||||
DEFINEV =19#; COMMENT 23; 01298000
|
||||
DEFINEV =19#, COMMENT 23; 01298000
|
||||
LONGV =20#; COMMENT 24; 01298100
|
||||
DEFINE ADES=0#,LDES=2#,PDES=1#,CHAR=3#; 01299000
|
||||
DEFINE LONGROWSZ=256#; % SIZE OF LONG-ARRAY SEGMENTED ROWS 01299300
|
||||
REAL TIME1; 01300000
|
||||
INTEGER SCRAM; 01301000
|
||||
COMMENT SCRAM CONTAINS THE SCRAMBLE INDEX FOR THE LAST IDENTIFIER 01302000
|
||||
@@ -1241,6 +1246,7 @@ INTEGER FILENO; 01584000
|
||||
FUNCTION; 01587000
|
||||
P2, COMMENT GENERALY TELLS WHETHER OWN WAS SEEN; 01588000
|
||||
P3, COMMENT TELLS WHETHER SAVE WAS SEEN; 01589000
|
||||
P5, COMMENT TELLS WHETHER LONG WAS SEEN; 01589600
|
||||
VONF, COMMENT VALUE OR OWN FIELD OF ELBAT WORD; 01590000
|
||||
FORMALF, COMMENT FORMAL FIELD OF ELBAT WORD; 01591000
|
||||
PTOG, COMMENT TELLS THAT FORMAL PARAPART IS BEING PROCESSD;01592000
|
||||
@@ -1489,7 +1495,7 @@ PROCEDURE DATIME; 01820000
|
||||
END OF DATER; 01827000
|
||||
H:=TIME1 DIV 216000; MIN:=(TIME1 DIV 3600) MOD 60; 01828000
|
||||
WRITE(LINE[DBL], 01829000
|
||||
<X22,"BURROUGHS B-5700 ALGOL COMPILER MARK ", 01830000
|
||||
<X22,"RETRO-B5500 LONGALG COMPILER MARK ", 01830000
|
||||
"XIII.0" 01831000
|
||||
," ",A6,"DAY, ",O,", ",I2,":",A2,X1,A1,"M."//>, 01832000
|
||||
TIME(6),DATER(TIME(5)),12|REAL(Q:=H MOD 12=0)+Q, 01833000
|
||||
@@ -6921,12 +6927,13 @@ FILL INFO[2,*] WITH OCT0030000120000000, "2LB000", % THESE ENTRIES ARE 09214105
|
||||
OCT0130000000040000, "5LNGAM", OCT0000000012700000,%657 09214420
|
||||
OCT0130000000040000, "3TAN00", OCT0000000011100000,%660 09214425
|
||||
OCT2000000000004050, COMMENT POWERS OF TEN ; %663 09214430
|
||||
0, COMMENT SORTA ; %664 09214435
|
||||
" " ; COMMENT LASTSEQUENCE,LASTSEQROW ; %665 09214440
|
||||
OCT0430000240000000, "4LONG0", %664 09214432
|
||||
0, COMMENT SORTA ; %666 09214435
|
||||
" " ; COMMENT LASTSEQUENCE,LASTSEQROW ; %667 09214440
|
||||
COMMENT NOW LINK THESE ENTRIES INTO STACKHEAD; 09214500
|
||||
FOR NEXTINFO~512 STEP 2 UNTIL 534,537 STEP 3 UNTIL 546 09214510
|
||||
,567STEP 3UNTIL 603,607STEP 4UNTIL 615,618,621STEP 4UNTIL 629,632,635, 09214515
|
||||
639STEP 3UNTIL 660 09214516
|
||||
639STEP 3UNTIL 660,664 09214516
|
||||
DO PUT(TAKE(NEXTINFO)&STACKHEAD[GT2~TAKE(NEXTINFO+1)MOD 125][35:35:13], 09214520
|
||||
LASTINFO~STACKHEAD[GT2]~NEXTINFO); 09214530
|
||||
NEXTINFO ~ LASTINFO ~ LASTSEQROW | 256 + LASTSEQUENCE + 1; 09214980
|
||||
@@ -8590,7 +8597,7 @@ END DEFINEPARAM; 12166000
|
||||
DO 13078000
|
||||
BEGIN 13079000
|
||||
STOPDEFINE := TRUE ; 13079500
|
||||
STEPIT; J~K;P2~P3~FALSE;GTA1[0]~0; GET7(ACCUM[1],FILID); 13080000
|
||||
STEPIT; J~K;P2~P3~P5~FALSE;GTA1[0]~0; GET7(ACCUM[1],FILID); 13080000
|
||||
MULFID~0;TYPE~2; ENTER(FILEID); 13081000
|
||||
SAVADDRSF~ADDRSF ; 13081500
|
||||
IF SPECTOG THEN GO TO START; 13082000
|
||||
@@ -9018,7 +9025,7 @@ COMMENT 13377000
|
||||
DESC XITR ; 13447000
|
||||
BEGIN 13448000
|
||||
REAL T1,T2,T3,K,LBJ,ARPROGS,SAVEDIM,T,T4,SAVEINFO,SAVEINFO2; 13449000
|
||||
BOOLEAN LLITOG,ULITOG; 13450000
|
||||
BOOLEAN LLITOG,ULITOG,LONGDIM; 13450000
|
||||
REAL ADDCON; 13451000
|
||||
LABEL CSZ,BETA1,TWO,START,SLB,BETA2; 13452000
|
||||
ARRAYFLAG ~ TRUE; 13452100
|
||||
@@ -9037,6 +9044,10 @@ REAL ADDCON; 13451000
|
||||
IF SPECTOG THEN 13465000
|
||||
FLAG(014) 13466000
|
||||
END 13467000
|
||||
ELSE IF T1=LONGV THEN 13467100
|
||||
BEGIN 13467200
|
||||
P5~TRUE; 13467300
|
||||
END 13467400
|
||||
ELSE 13468000
|
||||
TYPEV ~REALID+T1; 13469000
|
||||
IF NOT SPECTOG THEN EMITO(MKS); SAVEINFO~NEXTINFO; 13470000
|
||||
@@ -9096,12 +9107,31 @@ TWO:IF STEPI=ADOP THEN 13474000
|
||||
AEXP; 13524000
|
||||
EMITL(JUNK); 13525000
|
||||
EMITO(ISN); 13526000
|
||||
CSZ: IF LLITOG AND ULITOG THEN 13527000
|
||||
CSZ: 13527000
|
||||
LONGDIM:= P5 AND TABLE(I)=RTBRKET; % LAST DIM OF LONG ARRAY 13527100
|
||||
IF LLITOG AND ULITOG THEN 13527200
|
||||
BEGIN 13528000
|
||||
L~ARPROGS; 13529000
|
||||
IF(T~IF ADDCON=ADDC THEN T4+T3+1 ELSE 13530000
|
||||
T4-T3+1){0 OR T>1023 THEN FLAG(59); 13531000
|
||||
EMITL(T); 13531100
|
||||
T~IF ADDCON=ADDC THEN 13529500
|
||||
T4+T3+1 ELSE T4-T3+1; 13529600
|
||||
IF T{0 THEN FLAG(59); 13529700
|
||||
IF NOT LONGDIM THEN 13529800
|
||||
BEGIN 13529900
|
||||
IF T>1023 THEN FLAG(59); 13530000
|
||||
EMITL(T); 13530100
|
||||
END 13530200
|
||||
ELSE 13530300
|
||||
BEGIN 13530400
|
||||
% FOR A LONG ARRAY, DOUBLE THE SIZE OF 13530500
|
||||
% THE LAST DIMENSION AND SPLIT IT INTO 13530600
|
||||
% LONGROWSZ-WORD ROWS. 13530700
|
||||
T~(2|T+LONGROWSZ-1) DIV LONGROWSZ; 13530800
|
||||
EMITL(T); % # ROWS 13530900
|
||||
EMITL(LONGROWSZ); % FINAL ROW SIZE 13531000
|
||||
IF T>1023 THEN FLAG(59); 13531100
|
||||
IF T<LONGROWSZ THEN % CHOOSE MAX SIZE 13531200
|
||||
T~LONGROWSZ; 13531300
|
||||
END; 13531400
|
||||
IF P3 THEN BEGIN SAVEDIM~SAVEDIM|T; 13532000
|
||||
IF SAVEDIM>MAXSAVE 13533000
|
||||
THEN MAXSAVE~SAVEDIM 13534000
|
||||
@@ -9115,16 +9145,28 @@ CSZ: IF LLITOG AND ULITOG THEN 13527000
|
||||
THEN 13542000
|
||||
BEGIN 13543000
|
||||
EMITO(XCH);EMITO(SUB) 13544000
|
||||
END;EMITL(1);EMITO(ADD) 13545000
|
||||
END;EMITL(1);EMITO(ADD); 13545000
|
||||
IF LONGDIM THEN 13545100
|
||||
BEGIN 13545200
|
||||
EMITO(DUP); 13545300
|
||||
EMITO(ADD); % DOUBLE THE SIZE 13545400
|
||||
EMITL(LONGROWSZ-1); 13545500
|
||||
EMITO(ADD); % ROUND UP TO LONGROWSZ 13545550
|
||||
EMITL(LONGROWSZ); 13545600
|
||||
EMITO(IDV); % # ROWS 13545650
|
||||
EMITL(LONGROWSZ); % FINAL ROW SIZE 13545700
|
||||
END; 13545800
|
||||
END; 13546000
|
||||
SLB:PUTNBUMP(T2);LBJ~LBJ+1;IF T~TABLE(I)=COMMA THEN GO TO TWO 13547000
|
||||
SLB: % IF LAST DIM OF LONG ARRAY, SET BIT 22 IN INFO DIMENSION WORD 13547000
|
||||
PUTNBUMP(T2 & REAL(LONGDIM)[22:47:1]); 13547100
|
||||
LBJ~LBJ+1;IF T~TABLE(I)=COMMA THEN GO TO TWO 13547200
|
||||
ELSE 13548000
|
||||
IF T!RTBRKET THEN FLAG(018); 13549000
|
||||
IF NOT SPECTOG THEN 13550000
|
||||
BEGIN 13551000
|
||||
COMMENT KEEP COUNT OF NO. OF ARRAYS DECLARED; 13551400
|
||||
NOOFARRAYS~NOOFARRAYS + GTA1[0]; 13551500
|
||||
EMITL(LBJ);EMITL(GTA1[0]); 13552000
|
||||
EMITL(LBJ+REAL(LONGDIM));EMITL(GTA1[0]); 13552000
|
||||
EMITL(REAL(P3) +2|REAL(P2)); 13553000
|
||||
EMITV(5) 13554000
|
||||
END; 13555000
|
||||
@@ -9285,6 +9327,9 @@ CNTR~0; 13689000
|
||||
THEN G~GTA1[J~J-1]; 13724000
|
||||
IF NOT P3 13725000
|
||||
THEN IF P3~(G=SAVEV) 13726000
|
||||
THEN G~GTA1[J~J-1]; 13726100
|
||||
IF NOT P5 13726200
|
||||
THEN IF P5~(G=LONGV) 13726300
|
||||
THEN G~GTA1[J~J-1] 13727000
|
||||
END; 13728000
|
||||
IF G!0 THEN FLAG(25) ELSE ENTRY(TYPE) 13729000
|
||||
@@ -9443,11 +9488,11 @@ BEGIN 14012000
|
||||
LABELDEC,DUMPDEC,LISTDEC,OUTDEC,INDEC,MONITORDEC, 14014000
|
||||
SWITCHDEC,PROCEDUREDEC,ARRAYDEC,FORMATDEC,FILEDEC, 14015000
|
||||
GOTSCHK, 14016000
|
||||
STREAMERR,DEFINEDEC,CALLSTATEMENT,HF,START; 14017000
|
||||
STREAMERR,DEFINEDEC,LONGERR,CALLSTATEMENT,HF,START; 14017000
|
||||
SWITCH DECLSW~ OWNERR,SAVERR,BOOLEANDEC,REALDEC,ALPHADEC,INTEGERDEC, 14018000
|
||||
LABELDEC,DUMPDEC,LISTDEC,OUTDEC,INDEC,MONITORDEC, 14019000
|
||||
SWITCHDEC,PROCEDUREDEC,ARRAYDEC,FORMATDEC,FILEDEC, 14020000
|
||||
STREAMERR,DEFINEDEC; 14021000
|
||||
STREAMERR,DEFINEDEC,LONGERR; 14021000
|
||||
DEFINE NLOCS=10#,LOCBEGIN=PRTI#; 14022000
|
||||
DEFINE LBP=[36:12]#; 14023000
|
||||
ARRAY TEDOC[0:7,0:127],LOCALS[0:NLOCS]; 14024000
|
||||
@@ -9579,10 +9624,11 @@ START: IF TABLE(I)!SEMICOLON 14063000
|
||||
GTA1[J]!DUMPV;ERRORTOG~TRUE; 14130000
|
||||
END; 14131000
|
||||
IF J =0 THEN GO TO CALLSTATEMENT; 14132000
|
||||
P2~P3~FALSE; 14133000
|
||||
P2~P3~P5~FALSE; 14133000
|
||||
GO TO DECLSW[GTA1[J]]; 14134000
|
||||
OWNERR:FLAG(20);J~J+1;GO TO REALDEC; 14135000
|
||||
SAVERR:FLAG(21);J~J+1;GO TO REALDEC; 14136000
|
||||
LONGERR:FLAG(506);J~J+1;GO TO REALDEC; 14136200
|
||||
STREAMERR:FLAG(22);J~J+1;GO TO PROCEDUREDEC; 14137000
|
||||
REALDEC:P3~TRUE;ENTER(REALID);GO TO START; 14138000
|
||||
ALPHADEC:P3~TRUE;ENTER(ALFAID);GO TO START; 14139000
|
||||
@@ -10351,6 +10397,47 @@ COMMENT 201 VARIABLE- A PARTIAL WORD DESIGNATOR IS NOT THE * 15122000
|
||||
IS SET TRUE IF THE VARIABLE IN 15212000
|
||||
TALL IS SPECIAL MONITORED. 15213000
|
||||
; 15214000
|
||||
PROCEDURE INDEXER(TALL,J,BYNAME); 15214020
|
||||
VALUE TALL,J,BYNAME; 15214040
|
||||
REAL TALL,J; 15214060
|
||||
BOOLEAN BYNAME; 15214080
|
||||
BEGIN COMMENT 15214100
|
||||
INDEXER HANDLES THE COMPLEXITIES OF INITIAL AND FINAL 15214120
|
||||
INDEXING OF ARRAY DIMENSIONS WHERE DOUBLE-INDEXING OF THE 15214140
|
||||
LAST DIMENSION OF A LONG ARRAY MAY BE INVOLVED. ON ENTRY, 15214160
|
||||
ASSUMES THE RAW INDEX VALUE IS AT TOP OF STACK; 15214180
|
||||
15214200
|
||||
IF BOOLEAN(TAKE(GIT(TALL)+J).[22:1]) THEN 15214220
|
||||
BEGIN % THIS IS THE LONG DIMENSION FOR A LONG ARRAY. 15214240
|
||||
EMITO(DUP); 15214260
|
||||
EMITO(ADD); % DOUBLE THE INDEX 15214280
|
||||
EMITPAIR(JUNK,ISN); % SAVE A COPY FOR THE COL INDEX 15214300
|
||||
EMITL(LONGROWSZ); 15214320
|
||||
EMITO(IDV); % COMPUTE THE SPLIT-ROW INDEX 15214340
|
||||
IF J=1 THEN 15214360
|
||||
EMITN(TALL.ADDRESS) 15214380
|
||||
ELSE 15214400
|
||||
EMITO(CDC); 15214420
|
||||
EMITO(LOD); % LOAD THE DESTINATION DESCRIPTOR15214440
|
||||
EMITV(JUNK); % RETRIEVE THE SAVED INDEX VALUE 15214460
|
||||
EMITL(LONGROWSZ); 15214480
|
||||
EMITO(RDV); % COMPUTE THE SPLIT-COL INDEX 15214500
|
||||
IF BYNAME THEN 15214520
|
||||
EMITO(CDC) 15214540
|
||||
ELSE 15214560
|
||||
EMITO(COC); 15214580
|
||||
END 15214600
|
||||
ELSE IF J=1 THEN 15214620
|
||||
IF BYNAME THEN 15214640
|
||||
EMITN(TALL.ADDRESS) 15214660
|
||||
ELSE 15214680
|
||||
EMITV(TALL.ADDRESS) 15214700
|
||||
ELSE 15214720
|
||||
IF BYNAME THEN 15214740
|
||||
EMITO(CDC) 15214760
|
||||
ELSE 15214780
|
||||
EMITO(COC); 15214800
|
||||
END INDEXER; 15214820
|
||||
PROCEDURE M4(TALL,J); 15215000
|
||||
VALUE TALL,J ; 15216000
|
||||
REAL TALL,J ; 15217000
|
||||
@@ -10361,10 +10448,10 @@ PROCEDURE M4(TALL,J); 15215000
|
||||
THEN BEGIN COMMENT TALL IS MONITORED; 15221000
|
||||
EMITV(JUNK); EMITO(XCH); 15222000
|
||||
END; 15223000
|
||||
EMITN(TALL.ADDRESS ) 15224000
|
||||
INDEXER(TALL,J,TRUE); 15224000
|
||||
END 15225000
|
||||
ELSE BEGIN COMMENT NOT THE FIRST TIME AROUND; 15226000
|
||||
EMITO(CDC); 15227000
|
||||
INDEXER(TALL,J,TRUE); 15227000
|
||||
IF TALL < 0 15228000
|
||||
THEN BEGIN COMMENT CALL SUBSCRIPT; 15229000
|
||||
EMITV(JUNK); EMITO(XCH); 15230000
|
||||
@@ -10502,19 +10589,13 @@ COMMENT ***** MONITOR FUNCTION M6 GOES BEFORE EMITO(XCH); 15310000
|
||||
IF DOTSYNTAX(T1,T2) THEN GO TO EXIT; 15341000
|
||||
IF STEPI = ASSIGNOP THEN IF P1=FS THEN GO TO LAST 15342000
|
||||
ELSE BEGIN ERR(209); GO EXIT END; 15343000
|
||||
IF J=1 THEN EMITV(TALL.ADDRESS)ELSE EMITO(COC); 15344000
|
||||
INDEXER(TALL,J,FALSE); 15344000
|
||||
END 15345000
|
||||
ELSE 15346000
|
||||
COMMENT ***** MONITOR FUNCTION M10 GOES HERE ; 15347000
|
||||
BEGIN COMMENT MONITOR FUNCTION M10; 15348000
|
||||
SPCLMON~P1 = FP OR ELCLASS } AMPERSAND; 15349000
|
||||
IF J = 1 15350000
|
||||
THEN IF SPCLMON 15351000
|
||||
THEN EMITV(TALL.ADDRESS) 15352000
|
||||
ELSE EMITN(TALL.ADDRESS) 15353000
|
||||
ELSE EMITO(IF SPCLMON 15354000
|
||||
THEN COC 15355000
|
||||
ELSE CDC); 15356000
|
||||
INDEXER(TALL,J,NOT SPCLMON); 15350000
|
||||
IF TALL < 0 15357000
|
||||
THEN BEGIN COMMENT DO NOT MONITOR AFTER ALL; 15358000
|
||||
EMITL(5); 15359000
|
||||
@@ -11052,4 +11133,4 @@ PROCEDURE JUMPS; 16431000
|
||||
TIME1 ~ TIME(1); PROGRAM; 17000000
|
||||
ENDOFITALL:END MAIN BLOCK 17000100
|
||||
END. 17001000
|
||||
END;END. LAST CARD ON 0CRDING TAPE 99999999
|
||||
END;END. LAST CARD ON 0CRDIMG TAPE 99999990
|
||||
|
||||
@@ -2,22 +2,63 @@ Burroughs B6500 Simulator and Early MCP for the B5500
|
||||
|
||||
These files were transcribed by James Fehlinger of New Jersey, US in
|
||||
mid-2014, from scans of listings provided by Al Kossow of bitsavers.org.
|
||||
Paul Kimpel assisted in proofing and debugging of the transcribed files.
|
||||
|
||||
B65SIM.alg_m
|
||||
A simulator for the Burroughs B6500 written in a variant of B5500
|
||||
Extended Algol, termed LONGALG. This variant implement a "Long
|
||||
Array" type, which appeared to the programmer to be a single-
|
||||
dimensional array, but was implemented as a two-dimensional array.
|
||||
The compiler generated code to partition the array index into column
|
||||
and row portions, and index the row and column accordingly.
|
||||
An engineering simulator for the Burroughs B6500, written in a
|
||||
variant of B5500 Extended Algol, termed LONGALG, described below.
|
||||
This simulator appears to have been built to model the "flows"
|
||||
(schematic logic and state diagrams) for the B6500 processor. It
|
||||
runs as a normal user task under the B5500 MCP.
|
||||
|
||||
B65SIM-COMPILE.card
|
||||
A card deck to compile B65SIM using the LONGALG compiler described
|
||||
below. Note that since LONGALG is not a standard compiler name, the
|
||||
compile card must specify "WITH LONGALG".
|
||||
|
||||
B65SIM-COMPILE-PRT.lst
|
||||
The listing of the B6500 Simulator (with $PRT set) produced by the
|
||||
card deck above.
|
||||
|
||||
B65ESPOL.alg_m
|
||||
An early implementation of an ESPOL cross-compiler for the B6500,
|
||||
written to run on the B5500. We believe that Don Lyle was the
|
||||
principle implementor of this compiler.
|
||||
principal implementer of this compiler.
|
||||
|
||||
B65MCP-MARK00.esp_m
|
||||
A very preliminary version of the B6500 MCP. It is notable for its
|
||||
use of ESPOL Queue structures, which eventually proved to be too
|
||||
expensive at run time, and were removed in the Mark II.0 release.
|
||||
|
||||
LONGALG.alg_m
|
||||
LONGALG is a specially modified version of the Mark XIII Algol
|
||||
compiler that supports the LONG ARRAY type required by B65SIM. We do
|
||||
not have the source for the original LONGALG, which was written no
|
||||
later than 1968, and would have been based on an earlier release
|
||||
than XIII (which is from late 1971). Support for LONG ARRAYS was
|
||||
reverse-engineered from comments in the B65SIM listing and
|
||||
implemented for XIII Algol by Paul Kimpel in June 2017.
|
||||
|
||||
LONGALG automatically doubles the declared size of the last
|
||||
dimension of a LONG ARRAY, and automatically doubles any index
|
||||
values for that last dimension when accessing elements of the array
|
||||
(thus addressing only the even-numbered words). This was done to
|
||||
implement a simulated memory array that allowed B6500 tag values to
|
||||
be stored in the odd words. In addition, a LONG ARRAY physically has
|
||||
one more dimension than is declared in the program. The last (or
|
||||
only) declared dimension is split into rows of 256 words (128
|
||||
emulated words). As many of these rows are allocated in the next-to-
|
||||
last physical dimension to accommodate the required number of rows
|
||||
for the (doubled) size of the last declared dimension.
|
||||
|
||||
LONGALG-PATCH.alg_m
|
||||
Kimpel's patch to Mark XIII Algol to produce the LONGALG compiler.
|
||||
This deck compiles LONGALG/NEW, which then must be marked as a
|
||||
compiler by the SPO command "MC LONGALG/NEW", which will also change
|
||||
the name of the file to the standard convention for compilers,
|
||||
LONGALG/DISK.
|
||||
|
||||
LONGALG-DELTA.pdf
|
||||
A PDF document showing a side-by-side comparison of LONGALG to the
|
||||
base Mark XIII source.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user