mirror of
https://github.com/pkimpel/retro-b5500.git
synced 2026-02-12 11:17:29 +00:00
Commit DCMCP transcription as of 2013-01-01; continue development of B5500ColdLoader (cold start working).
This commit is contained in:
@@ -18595,3 +18595,109 @@ ZIPLIST: 20600380
|
||||
AGN: TALLY:=1; EOS:=TALLY; 20600450
|
||||
DUN: DS:=LIT"~"; 20600455
|
||||
ZZP(D:=SI; SI:=LOC D; DI:=CARDLOC; DS:=WDS); 20600460
|
||||
END; 20600465
|
||||
SPOUTER(NT1,SPOUTUNIT,64); 20600470
|
||||
IF P AND (UNITNO=31) THEN 20600480
|
||||
GO Z;PLIST; 20600490
|
||||
ABORT:=0; 20600500
|
||||
END LISTHECARD; 20600510
|
||||
$ POP OMIT 20600511
|
||||
P(0,0,0,0,0,0,0,0,0,0);% 20600600
|
||||
P(0,0,0,0,0,0,0,0,0,0);% 20600650
|
||||
P(0,0,0,0,0,0,0,0,0,0);% 20600700
|
||||
P(0,0,0,0); 20600750
|
||||
% DO NOT ZERO THE LAST THREE LOCALS (RETURN-MSCW, RCW, & VAL) 20600755
|
||||
RCW:=RCW & P1(..CONTROLCARD,LOD)[CTC]; 20600760
|
||||
UNITNO := CARD.[2:6]; 20600850
|
||||
IF CARD.[33:15] = 0 THEN 20600900
|
||||
BEGIN CARD.[33:15] := GETSPACE(13,0,0)+4; 20600950
|
||||
IF WAITIO(CARD INX @40000000,@15,UNITNO).[45:3] NEQ 0% 20601000
|
||||
THEN 20601050
|
||||
BEGIN LABELTABLE[UNITNO] := @114;% 20601100
|
||||
RRRMECH := NOT TWO (UNITNO) AND RRRMECH;% 20601150
|
||||
FORGETSPACE(CARD INX NOT 1);% 20601200
|
||||
KILL([MSCW]); 20601250
|
||||
END; 20601300
|
||||
END; 20601350
|
||||
COMMENT GET OWN STACK AND GET RID OF INDEPENDENT STACK;% 20601400
|
||||
COMMENT SET UP ACCUM ARRAY FOR SCAN;% 20601450
|
||||
ACCUM:=[M[SPACE(10)]]&10[8:38:10];% 20601500
|
||||
ACCUM[0] := 0;% 20601550
|
||||
IF (CCTBLWORD:=P(CCTBLWORD,DUP)&(P.[FF]+1)[CTF]).[FF]>1 THEN 20601600
|
||||
BEGIN 20601620
|
||||
IF CCTBLADDR=0 THEN SLEEP([CCTBLWORD],@77777); 20601640
|
||||
DIRECT:=[C[CCTBLWORD]]&CCTABLSZ[8:38:10]; 20601660
|
||||
END ELSE 20601680
|
||||
BEGIN 20601700
|
||||
DIRECT:=[M[T:=SPACE(CCTABLSZ)]]&CCTABLSZ[8:38:10]; 20601720
|
||||
DISKWAIT(-T,CCTABLSZ,MESSAGETABLE[3].[22:26]); 20601740
|
||||
CCTABLDDR:=T; 20601760
|
||||
END; 20601780
|
||||
CMM:=[M[GETSPACE(130,2,0)+2]]&30[8:38:10];% 20601850
|
||||
PEQN:=(31 INX (CEQN:=(31 INX(PROG:=(31 INX CMM)))));% 20601900
|
||||
% PLACE "." IN COL 73 ;% 20601950
|
||||
CARDLOC := CARD INX 0;% 20602000
|
||||
IF UNITNO=25 OR UNITNO=26 OR UNITNO=30 OR UNITNO=31 THEN 20602050
|
||||
SOURCE:=CARDLOC ELSE 20602100
|
||||
M[(SOURCE:=CARDLOC)+9] := @3277320000000000; % .". 2B XTRA SAFE20602150
|
||||
IF UNITNO GEQ 32 AND UNITCODE[UNITNO-23].[1:1] THEN 20602200
|
||||
UNITCODE[UNITNO-23]:=M[CARDLOC + 10]; 20602250
|
||||
IF UNITNO=25 OR UNITNO=31 THEN USERID:=MCP ELSE% 20602300
|
||||
BEGIN IF UNITNO=26 THEN UNITNO:=31;% 20602350
|
||||
USERID:=UNITCODE[UNITNO-23];% 20602400
|
||||
$ SET OMIT = NOT(DATACOM AND RJE ) 20602409
|
||||
END;% 20602450
|
||||
SPOUTUNIT:=( 20602460
|
||||
$ SET OMIT = NOT(PACKETS) 20602469
|
||||
IF ZIPMIX!0 AND PSEUDOMIX[ZIPMIX] GEQ 32 THEN 20602470
|
||||
PSEUDOMIX[ZIPMIX] ELSE 20602480
|
||||
IF UNITNO GEQ 32 THEN UNITNO ELSE 20602490
|
||||
$ POP OMIT 20602491
|
||||
0)&CARD[9:9:9]; 20602500
|
||||
$ SET OMIT = NOT(PACKETS) 20602509
|
||||
IF UNITNO GEQ 32 THEN 20602510
|
||||
IF PKTONLY THEN %124-20602515
|
||||
IF PSEUDO[UNITNO-32]=0 THEN 20602520
|
||||
PRINTTHECOVER(CARDLOC&CARD[9:9:9],UNITNO,PSOURCE); 20602530
|
||||
LASTSCAN:=0&1[2:47:1]; 20602540
|
||||
$ POP OMIT 20602541
|
||||
COMMENT SCAN FOR CARD WITH QUESTION MARK IN COL. 1;% 20602550
|
||||
CC: IF SCAN NEQ QUEST THEN GO TO INCSC;% 20602650
|
||||
T:=SCAN; 20602700
|
||||
CCTYPE: IF (T LSS UNLOCKV) OR (T GTR RESETV) THEN 20602800
|
||||
GO TO INCSC;% 20602850
|
||||
PPCPROCESS:=0;% %173-20602855
|
||||
PROCVAL:=0; %128-20602860
|
||||
IF CARD.[9:9] NEQ 0 THEN% 20602900
|
||||
$ SET OMIT = NOT(DATACOM AND RJE ) 20602909
|
||||
IF CCFIND THEN GO TO INCSC; 20602950
|
||||
IF (T LEQ LOAD AND (T GEQ RUNV) THEN 20603000
|
||||
BEGIN % 20603050
|
||||
M[CARDLOC - 2] := 0;% 20603100
|
||||
M[CARDLOC -1] :=10;% 20603150
|
||||
CMM[6]:= GETESPDISK & 10[18:33:15];% 20603200
|
||||
$ SET OMIT = NOT(DATACOM AND RJE ) 20603209
|
||||
DISKWAIT(CARDLOC-2,11,CMM[6] INX 0); 20603250
|
||||
END;% 20603350
|
||||
$ SET OMIT = NOT(PACKETS) 20603359
|
||||
LISTHECARD; 20603360
|
||||
$ POP OMIT 20603361
|
||||
% WRITE OUT CONTROL CARD FOR LOGGING ROUTINE% 20603400
|
||||
% BRANCH ON 1ST WORD ON CONTROL CARD% 20603450
|
||||
LIBNO:=0; 20603500
|
||||
TOG:= FALSE; 20603550
|
||||
IF UNITNO GEQ 32 THEN %780-20603560
|
||||
IF T=PACKET OR T=USER THEN ELSE %780-20603565
|
||||
IF (USERID.[1:1] AND USERID ! MCP) THEN %780-20603570
|
||||
BEGIN USERID ~ "U000000"; %780-20603575
|
||||
UNITCODE[UNIT-23] ~ USERID %780-20603580
|
||||
END; %780-20603590
|
||||
GO TO TYPE[T-UNLOCKV]; 20603600
|
||||
% COMPILER CALL OUT CARD% 20603700
|
||||
COMPILE: IF CCCOMPILE THEN GO INCSC; 20603750
|
||||
INITIALIZATION: OPTNN:=INITIALIZEIT; GO DOWN; 20603900
|
||||
BEFORETRYNEXT: IF OPTN=PERIO THEN GO TO CONTROLLER; 20604050
|
||||
TRYNEXT: IF KOUNT=@14 THEN 20604100
|
||||
IF SOURCE=(CARDLOC&1[30:45:3]) THEN 20604105
|
||||
BEGIN 20604110
|
||||
PPCPROCESS:=1; T:=SCAN; GO CONTROLA; 20604115
|
||||
|
||||
@@ -648,160 +648,192 @@ window.onload = function() {
|
||||
reader.readAsArrayBuffer(f);
|
||||
}
|
||||
|
||||
function loadBootstrap(eu, buffer) {
|
||||
/* Creates the Halt/Load Button Card image and stores it in segment 1 */
|
||||
var w = [];
|
||||
|
||||
w[ 0] = parseInt("0441341003604231", 8);
|
||||
w[ 1] = parseInt("7500000000000023", 8);
|
||||
w[ 2] = parseInt("0211001441310435", 8);
|
||||
w[ 3] = parseInt("7012700704210014", 8);
|
||||
w[ 4] = parseInt("4411005441314155", 8);
|
||||
w[ 5] = parseInt("6461106500000425", 8);
|
||||
w[ 6] = parseInt("0074013100644131", 8);
|
||||
w[ 7] = parseInt("0000006200644131", 8);
|
||||
w[ 8] = parseInt("0000006601044131", 8);
|
||||
w[ 9] = parseInt("0000007201244131", 8);
|
||||
w[10] = parseInt("0000007601444131", 8);
|
||||
w[11] = parseInt("5140000040700137", 8);
|
||||
w[12] = parseInt("5140000047700461", 8);
|
||||
w[13] = parseInt("5140000047704223", 8);
|
||||
w[14] = parseInt("7700000000000037", 8);
|
||||
w[15] = parseInt("0153020404050000", 8);
|
||||
w[16] = parseInt("0167010604410440", 8);
|
||||
w[17] = parseInt("0163010604410010", 8);
|
||||
w[18] = parseInt("0157010604410660", 8);
|
||||
w[19] = parseInt("0600017205204131", 8);
|
||||
wordsToANSI(w, 0, 30, buffer, 0);
|
||||
eu.put(buffer, 1);
|
||||
}
|
||||
|
||||
function enterFile(mfid, fid, areas, areasize, eu, buffer, directoryTop, labels, fileNr, segNr) {
|
||||
/* Enters a file into the disk directory. The loader will only create
|
||||
one directory block, so do not call this routine more than 15 times.
|
||||
Only the first row is allocated. Returns the next available segment address */
|
||||
var header = [];
|
||||
var labelx = 240-(fileNr+1)*16;
|
||||
|
||||
stringToANSI(padToLength(mfid, 7), labels, labelx+1);
|
||||
stringToANSI(padToLength(fid, 7), labels, labelx+9);
|
||||
if (labelx > 15) {
|
||||
labels[labelx-9] = 0x4C; // @114, last-entry marker
|
||||
}
|
||||
header[0] = 0x41; // BIC "11" = @0101 = 1 rec/block, 1 seg/block
|
||||
header[3] = 0x1001200; // Date: BIC "00010180" = 1980-01-01
|
||||
header[7] = areas*areasize-1;
|
||||
header[8] = areasize;
|
||||
header[9] = areas;
|
||||
header[10] = segNr;
|
||||
wordsToANSI(header, 0, 30, buffer, 0);
|
||||
eu.put(buffer, directoryTop + 18 - fileNr);
|
||||
|
||||
return segNr + areasize;
|
||||
}
|
||||
|
||||
function initializeDisk() {
|
||||
/* Performs a B5500 Cold Start by initializing the directory structure on
|
||||
the disk, overwriting (and destroying) whatever else was there before */
|
||||
var buffer = new Uint8Array(240);
|
||||
var eu = disk.transaction(euPrefix+"0", "readwrite").objectStore(euPrefix+"0");
|
||||
var eu;
|
||||
var euName = euPrefix + "0";
|
||||
var fileLabels = new Uint8Array(240);
|
||||
var fileNr = 0;
|
||||
var info = [];
|
||||
var segNr;
|
||||
var shar = [];
|
||||
var txn;
|
||||
var zeroes = new Uint8Array(240);
|
||||
var x;
|
||||
|
||||
fileLabels[14*16+7] = 0x4C; // @114, last-entry marker
|
||||
function loadBootstrap(eu, buffer) {
|
||||
/* Creates the Halt/Load Button Card image and stores it in segment 1 */
|
||||
var w = [];
|
||||
|
||||
shar[ 0] = 1; // number of shared-disk systems
|
||||
shar[ 1] = directoryTop;
|
||||
shar[ 2] = 0;
|
||||
shar[ 3] = 0;
|
||||
shar[ 4] = directoryEnd; // DIRECT deck option
|
||||
eu.put(shar, 0);
|
||||
|
||||
loadBootstrap(eu, buffer); // load the Halt/Load Button Card image
|
||||
|
||||
for (x=50; x<directoryTop; x++) {
|
||||
eu.put(zeroes, x);
|
||||
w[ 0] = parseInt("0441341003604231", 8);
|
||||
w[ 1] = parseInt("7500000000000023", 8);
|
||||
w[ 2] = parseInt("0211001441310435", 8);
|
||||
w[ 3] = parseInt("7012700704210014", 8);
|
||||
w[ 4] = parseInt("4411005441314155", 8);
|
||||
w[ 5] = parseInt("6461106500000425", 8);
|
||||
w[ 6] = parseInt("0074013100644131", 8);
|
||||
w[ 7] = parseInt("0000006200644131", 8);
|
||||
w[ 8] = parseInt("0000006601044131", 8);
|
||||
w[ 9] = parseInt("0000007201244131", 8);
|
||||
w[10] = parseInt("0000007601444131", 8);
|
||||
w[11] = parseInt("5140000040700137", 8);
|
||||
w[12] = parseInt("5140000047700461", 8);
|
||||
w[13] = parseInt("5140000047704223", 8);
|
||||
w[14] = parseInt("7700000000000037", 8);
|
||||
w[15] = parseInt("0153020404050000", 8);
|
||||
w[16] = parseInt("0167010604410440", 8);
|
||||
w[17] = parseInt("0163010604410010", 8);
|
||||
w[18] = parseInt("0157010604410660", 8);
|
||||
w[19] = parseInt("0600017205204131", 8);
|
||||
wordsToANSI(w, 0, 30, buffer, 0);
|
||||
eu.put(buffer, 1);
|
||||
}
|
||||
|
||||
info[ 0] = // option word
|
||||
// 47: use DRA
|
||||
// 46: use DRB
|
||||
pow2[47-45] + // 45: print BOJ
|
||||
pow2[47-44] + // 44: print EOJ
|
||||
pow2[47-43] + // 43: type file open
|
||||
pow2[47-42] + // 42: call TERMINATE procedure
|
||||
pow2[47-41] + // 41: initialize date @ H/L
|
||||
pow2[47-40] + // 40: initialize time @ H/L
|
||||
// 39: use only one breakout tape
|
||||
// 38: automatically print pbt
|
||||
pow2[47-37] + // 37: clear write ready status @ terminal
|
||||
pow2[47-36] + // 36: write disc. code on terminal
|
||||
pow2[47-35] + // 35: type when compiler files open & close
|
||||
pow2[47-34] + // 34: type file close
|
||||
pow2[47-33] + // 33: error msgs when progr recovery used
|
||||
pow2[47-32] + // 32: type MT retention messages
|
||||
pow2[47-31] + // 31: type library messages
|
||||
pow2[47-30] + // 30: type schedule messages
|
||||
pow2[47-29] + // 29: type file security messages
|
||||
pow2[47-28] + // 28: prevent I/O below user disk area
|
||||
pow2[47-27] + // 27: prevent disk RELEASE statement
|
||||
pow2[47-26] + // 26: printer backup disk release
|
||||
pow2[47-25] + // 25: check memory links
|
||||
pow2[47-24] + // 24: type disk error messages
|
||||
pow2[47-23] + // 23: disk logging
|
||||
pow2[47-22] + // 22: suppress library error messages
|
||||
pow2[47-21] + // 21: go to printer back-up only
|
||||
pow2[47-20] + // 20: dont stack files on PB tapes
|
||||
pow2[47-19] + // 19: print set or reset messages
|
||||
// 18: no user disk will unload expired
|
||||
pow2[47-17] + // 17: run all decks(SHAREDISK)
|
||||
// 16: olay core to ECM(AUXMEM)
|
||||
pow2[47-15] + // 15: job core estimates(STATISTICS)
|
||||
// 14: olay data to ECM(AUXMEM)
|
||||
pow2[47-13] + // 13: makes system hang on-should HL msg
|
||||
// 12: enables datacom(TSS, if not DCP)
|
||||
pow2[47-11] + // 11: library messages for CANDE
|
||||
pow2[47-10] + // 10: ZIP decks to run on batch(SHAREDISK)
|
||||
// 9: controls running of batch jobs on TSS
|
||||
// 8: UNUSED
|
||||
// 7: UNUSED
|
||||
// 6: UNUSED
|
||||
// 5: UNUSED
|
||||
// 4: UNUSED
|
||||
// 3: UNUSED
|
||||
pow2[47- 2] + // 2: Model III I/O channels
|
||||
// 1: UNUSED
|
||||
0; // 0: (flag bit)
|
||||
function enterFile(mfid, fid, areas, areasize, eu, buffer, directoryTop, labels, fileNr, segNr) {
|
||||
/* Enters a file into the disk directory. The loader will only create
|
||||
one directory block, so do not call this routine more than 15 times.
|
||||
Only the first row is allocated. Returns the next available segment address */
|
||||
var header = [];
|
||||
var labelx = 240-(fileNr+1)*16;
|
||||
|
||||
info[ 1] = 0x1001200; // Date: BIC "00010180" = 1980-01-01
|
||||
info[ 2] = config.eus; // number of EUs
|
||||
info[ 3] = 0; // not used
|
||||
info[ 4] = directoryEnd; // DIRECT deck option
|
||||
info[ 5] = 0; // last number used for control deck
|
||||
info[ 6] = 0; // first control deck queued
|
||||
info[ 7] = 0; // last control deck queued
|
||||
info[ 8] = 0; // next number available for printer backup disk
|
||||
info[ 9] = 1; // multiprocessing core factor
|
||||
info[10] = 0; // SPO stations (through info[15])
|
||||
info[11] = 0;
|
||||
info[12] = 0;
|
||||
info[13] = 0;
|
||||
info[14] = 0;
|
||||
info[15] = 0;
|
||||
info[16] = 15; // Q value for datacom input
|
||||
wordsToANSI(info, 0, 30, buffer, 0);
|
||||
eu.put(buffer, directoryTop);
|
||||
stringToANSI(padToLength(mfid, 7), labels, labelx+1);
|
||||
stringToANSI(padToLength(fid, 7), labels, labelx+9);
|
||||
if (labelx > 15) {
|
||||
stringToANSI("0000001?", labels, labelx-16); // @114, last-entry marker
|
||||
stringToANSI("00000000", labels, labelx-8);
|
||||
}
|
||||
header[0] = 0x41; // BIC "11" = @0101 = 1 rec/block, 1 seg/block
|
||||
header[3] = 0x1001200; // Date: BIC "00010180" = 1980-01-01
|
||||
header[7] = areas*areasize-1;
|
||||
header[8] = areasize;
|
||||
header[9] = areas;
|
||||
header[10] = segNr;
|
||||
wordsToANSI(header, 0, 30, buffer, 0);
|
||||
eu.put(buffer, directoryTop + 18 - fileNr);
|
||||
|
||||
segNr = directoryEnd + 1;
|
||||
segNr = enterFile("SYSTEM", "LOG", 1, 20000, eu, buffer, directoryTop, fileLabels, fileNr, segNr);
|
||||
fileNr++;
|
||||
return segNr + areasize;
|
||||
}
|
||||
|
||||
/***** Start of initializeDisk *****/
|
||||
wordsToANSI(shar, 0, 30, zeroes, 0); // create a segment buffer of zeroes
|
||||
wordsToANSI(shar, 0, 30, fileLabels, 0); // initialize the file name label block
|
||||
|
||||
// Start a transaction
|
||||
txn = disk.transaction([euName, "CONFIG"], "readwrite");
|
||||
txn.oncomplete = function(ev) {
|
||||
alert("Cold Start completed successfully");
|
||||
};
|
||||
|
||||
eu = txn.objectStore(euName);
|
||||
txn.objectStore("CONFIG").get(0).onsuccess = function(ev) {
|
||||
config = ev.target.result;
|
||||
if (!config) {
|
||||
alert("No CONFIG object in database");
|
||||
txn.abort();
|
||||
} else {
|
||||
// Initialize the directory labels segment
|
||||
stringToANSI("0000001?", fileLabels, 14*16); // @114, last-entry marker
|
||||
stringToANSI("00000000", fileLabels, 14*16+8);
|
||||
|
||||
// Initialize segment 0
|
||||
shar[ 0] = 1; // number of shared-disk systems
|
||||
shar[ 1] = directoryTop;
|
||||
shar[ 2] = 0;
|
||||
shar[ 3] = 0;
|
||||
shar[ 4] = directoryEnd; // DIRECT deck option
|
||||
wordsToANSI(shar, 0, 30, buffer, 0);
|
||||
eu.put(buffer, 0);
|
||||
|
||||
// Load the Halt Load Button Card image
|
||||
loadBootstrap(eu, buffer); // load the Halt/Load Button Card image
|
||||
|
||||
// Clean out the ESPDISK area
|
||||
for (x=50; x<directoryTop; x++) {
|
||||
eu.put(zeroes, x);
|
||||
}
|
||||
|
||||
// Initialize the DIRECTORYTOP segment
|
||||
info[ 0] = // option word
|
||||
// 47: use DRA
|
||||
// 46: use DRB
|
||||
pow2[47-45] + // 45: print BOJ
|
||||
pow2[47-44] + // 44: print EOJ
|
||||
pow2[47-43] + // 43: type file open
|
||||
pow2[47-42] + // 42: call TERMINATE procedure
|
||||
pow2[47-41] + // 41: initialize date @ H/L
|
||||
pow2[47-40] + // 40: initialize time @ H/L
|
||||
// 39: use only one breakout tape
|
||||
// 38: automatically print pbt
|
||||
pow2[47-37] + // 37: clear write ready status @ terminal
|
||||
pow2[47-36] + // 36: write disc. code on terminal
|
||||
pow2[47-35] + // 35: type when compiler files open & close
|
||||
pow2[47-34] + // 34: type file close
|
||||
pow2[47-33] + // 33: error msgs when progr recovery used
|
||||
pow2[47-32] + // 32: type MT retention messages
|
||||
pow2[47-31] + // 31: type library messages
|
||||
pow2[47-30] + // 30: type schedule messages
|
||||
pow2[47-29] + // 29: type file security messages
|
||||
pow2[47-28] + // 28: prevent I/O below user disk area
|
||||
pow2[47-27] + // 27: prevent disk RELEASE statement
|
||||
pow2[47-26] + // 26: printer backup disk release
|
||||
pow2[47-25] + // 25: check memory links
|
||||
pow2[47-24] + // 24: type disk error messages
|
||||
pow2[47-23] + // 23: disk logging
|
||||
pow2[47-22] + // 22: suppress library error messages
|
||||
pow2[47-21] + // 21: go to printer back-up only
|
||||
pow2[47-20] + // 20: dont stack files on PB tapes
|
||||
pow2[47-19] + // 19: print set or reset messages
|
||||
// 18: no user disk will unload expired
|
||||
pow2[47-17] + // 17: run all decks(SHAREDISK)
|
||||
// 16: olay core to ECM(AUXMEM)
|
||||
pow2[47-15] + // 15: job core estimates(STATISTICS)
|
||||
// 14: olay data to ECM(AUXMEM)
|
||||
pow2[47-13] + // 13: makes system hang on-should HL msg
|
||||
// 12: enables datacom(TSS, if not DCP)
|
||||
pow2[47-11] + // 11: library messages for CANDE
|
||||
pow2[47-10] + // 10: ZIP decks to run on batch(SHAREDISK)
|
||||
// 9: controls running of batch jobs on TSS
|
||||
// 8: UNUSED
|
||||
// 7: UNUSED
|
||||
// 6: UNUSED
|
||||
// 5: UNUSED
|
||||
// 4: UNUSED
|
||||
// 3: UNUSED
|
||||
pow2[47- 2] + // 2: Model III I/O channels
|
||||
// 1: UNUSED
|
||||
0; // 0: (flag bit)
|
||||
|
||||
info[ 1] = 0x1001200; // Date: BIC "00010180" = 1980-01-01
|
||||
info[ 2] = config.eus; // number of EUs
|
||||
info[ 3] = 0; // not used
|
||||
info[ 4] = directoryEnd; // DIRECT deck option
|
||||
info[ 5] = 0; // last number used for control deck
|
||||
info[ 6] = 0; // first control deck queued
|
||||
info[ 7] = 0; // last control deck queued
|
||||
info[ 8] = 0; // next number available for printer backup disk
|
||||
info[ 9] = 1; // multiprocessing core factor
|
||||
info[10] = 0; // SPO stations (through info[15])
|
||||
info[11] = 0;
|
||||
info[12] = 0;
|
||||
info[13] = 0;
|
||||
info[14] = 0;
|
||||
info[15] = 0;
|
||||
info[16] = 15; // Q value for datacom input
|
||||
wordsToANSI(info, 0, 30, buffer, 0);
|
||||
eu.put(buffer, directoryTop);
|
||||
|
||||
// Create a file entry for the system log
|
||||
segNr = directoryEnd + 1;
|
||||
segNr = enterFile("SYSTEM", "LOG", 1, 20000, eu, buffer, directoryTop, fileLabels, fileNr, segNr);
|
||||
fileNr++;
|
||||
|
||||
// Store the directory labels segment
|
||||
eu.put(fileLabels, directoryTop + 19); // write the directory block file labels
|
||||
}
|
||||
};
|
||||
|
||||
eu.put(fileLabels, directoryTop + 19); // write the directory block file labels
|
||||
}
|
||||
|
||||
function configureDatabase(ev) {
|
||||
@@ -855,6 +887,31 @@ window.onload = function() {
|
||||
alert("Database \"" + disk.name + "\" error: " + ev.target.result.error);
|
||||
}
|
||||
|
||||
function dumpDisk() {
|
||||
/* Dumps the initial and directory portions of the disk */
|
||||
var txn = disk.transaction("EU0");
|
||||
var eu = txn.objectStore("EU0");
|
||||
var range = IDBKeyRange.upperBound(directoryTop+20);
|
||||
var req = eu.openCursor(range);
|
||||
var lastKey = -1;
|
||||
|
||||
spout("===== START OF DISK DUMP =====");
|
||||
req.onsuccess = function(ev) {
|
||||
var cursor = ev.target.result;
|
||||
|
||||
if (cursor) {
|
||||
if (cursor.key-lastKey > 1) {
|
||||
spout("----- " + (cursor.key-lastKey-1) + " unallocated segments -----");
|
||||
}
|
||||
spout(cursor.key + ": " + String.fromCharCode.apply(null, cursor.value));
|
||||
lastKey = cursor.key;
|
||||
cursor.continue();
|
||||
} else {
|
||||
spout("===== END OF DISK DUMP =====");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function openDatabase(name, version) {
|
||||
/* Attempts to open the disk subsystem database for the specified "name"
|
||||
and "version". Returns the IDB database object if successful, or null if
|
||||
@@ -877,6 +934,8 @@ window.onload = function() {
|
||||
alert("Disk database opened: " + name + " #" + disk.version);
|
||||
disk.onerror = genericDBError;
|
||||
$$("ColdstartBtn").disabled = false;
|
||||
|
||||
dumpDisk(); // <<<<<<<<<<<<<< DEBUG <<<<<<<<<<<<<<<<<
|
||||
};
|
||||
|
||||
req.onupgradeneeded = configureDatabase;
|
||||
@@ -898,7 +957,8 @@ window.onload = function() {
|
||||
if (missing.length == 0) {
|
||||
return false;
|
||||
} else {
|
||||
alert("No can do... your browser does not support the following features:\n" + missing.substring(2));
|
||||
alert("No can do... your browser does not support the following features:\n" +
|
||||
missing.substring(2));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user