From c57e11fe97375900cd1d881184afaae7885d09e2 Mon Sep 17 00:00:00 2001 From: paul Date: Tue, 1 Jan 2013 21:54:06 +0000 Subject: [PATCH] Commit DCMCP transcription as of 2013-01-01; continue development of B5500ColdLoader (cold start working). --- SYMBOL/DCMCP.esp_m | 106 ++++++++++++ tools/B5500ColdLoader.html | 334 ++++++++++++++++++++++--------------- 2 files changed, 303 insertions(+), 137 deletions(-) diff --git a/SYMBOL/DCMCP.esp_m b/SYMBOL/DCMCP.esp_m index 9f6a096..1a60d77 100644 --- a/SYMBOL/DCMCP.esp_m +++ b/SYMBOL/DCMCP.esp_m @@ -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 diff --git a/tools/B5500ColdLoader.html b/tools/B5500ColdLoader.html index 27b3d33..f4c16af 100644 --- a/tools/B5500ColdLoader.html +++ b/tools/B5500ColdLoader.html @@ -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 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 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; } }