1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-01-11 23:42:42 +00:00
Paul Kimpel 205a0fdd2b Commit implementation of LONGALG and LONG ARRAYs for use by B65SIM.
Commit compile card deck and listing for B65SIM.
2017-06-18 14:35:41 -07:00

128 lines
11 KiB
Plaintext

?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