More BACKTRACK tweaks (no effect on compiled releases)

This commit is contained in:
Jeff Parsons 2014-12-30 17:32:18 -08:00 committed by jeffpar
commit 187318cebb
29 changed files with 124 additions and 106 deletions

View file

@ -1654,9 +1654,12 @@ HTMLOut.prototype.getReadMe = function(sToken, sIndent, aParms, sPrevious)
* it would be cleaner if this replacement could be performed by getTitle(), but unfortunately,
* getTitle() is called long before any README.md is opened.
*/
var match = s.match(/^\s*<h([0-9])[^>]*>([^<]*)<\/h\1>/);
var match = s.match(/^\s*<h([0-9])[^>]*>(.*?)<\/h\1>/);
if (match) {
obj.sHTML = obj.sHTML.replace(/(<title[^>]*>)([^\|]*)\|[^<]*(<\/title>)/, "$1$2| " + match[2] + "$3");
var sTitle = match[2];
match = sTitle.match(/<a [^>]*>([^<]*)<\/a>/);
if (match) sTitle = match[1];
obj.sHTML = obj.sHTML.replace(/(<title[^>]*>)([^\|]*)\|[^<]*(<\/title>)/, "$1$2| " + sTitle + "$3");
}
/*
* We need to query the MarkOut object for any machine definitions that the current "readme"

View file

@ -50,7 +50,7 @@ if (typeof module !== 'undefined') {
/**
* Bus(cpu, dbg)
*
* The Bus component manages "physical" memory and I/O address spaces.
* The Bus component manages physical memory and I/O address spaces.
*
* The Bus component has no UI elements, so it does not require an init() handler,
* but it still inherits from the Component class and must be allocated like any
@ -174,6 +174,8 @@ function Bus(parmsBus, cpu, dbg)
*/
this.abtObjects = [];
this.cbtDeletions = 0;
this.ibtLastAlloc = -1;
this.ibtLastDelete = 0;
}
this.setReady();
@ -219,6 +221,9 @@ Bus.prototype.initMemory = function()
Bus.prototype.reset = function()
{
this.setA20(true);
if (BACKTRACK) {
this.ibtLastDelete = 0;
}
};
/**
@ -407,10 +412,8 @@ Bus.prototype.removeMemory = function(addr, size)
/**
* getByte(addr)
*
* Why does the CPU use its own getByte() (which is substantially similar to ours) instead of calling us?
*
* It certainly could, but the CPU also needs to update some BACKTRACK state. There may also be a slight
* performance advantage calling its own method vs. calling through another object (ie, the Bus object).
* The CPU could use this, but the CPU also needs to update BACKTRACK states. There may also be a slight
* performance advantage calling its own getByte() method vs. calling through another object (ie, the Bus object).
*
* @this {Bus}
* @param {number} addr is a physical (non-segmented) address
@ -438,11 +441,9 @@ Bus.prototype.getByteDirect = function(addr)
/**
* getWord(addr)
*
* Why does the CPU use its own getWord() (which is substantially similar to ours) instead of calling us?
*
* It certainly could, but the CPU also needs to update its cycle count, along with some BACKTRACK state.
* There may also be a slight performance advantage calling its own method vs. calling through another object
* (ie, the Bus object).
* The CPU could use this, but the CPU also needs to update cycle counts, along with BACKTRACK states.
* There may also be a slight performance advantage calling its own getWord() method vs. calling through another
* object (ie, the Bus object).
*
* @this {Bus}
* @param {number} addr is a physical (non-segmented) address
@ -480,10 +481,8 @@ Bus.prototype.getWordDirect = function(addr)
/**
* setByte(addr, b)
*
* Why does the CPU use its own setByte() (which is substantially similar to ours) instead of calling us?
*
* It certainly could, but the CPU also needs to update some BACKTRACK state. There may also be a slight
* performance advantage calling its own method vs. calling through another object (ie, the Bus object).
* The CPU could use this, but the CPU also needs to update BACKTRACK states. There may also be a slight
* performance advantage calling its own setByte() method vs. calling through another object (ie, the Bus object).
*
* @this {Bus}
* @param {number} addr is a physical (non-segmented) address
@ -512,11 +511,9 @@ Bus.prototype.setByteDirect = function(addr, b)
/**
* setWord(addr, w)
*
* Why does the CPU use its own setWord() (which is substantially similar to ours) instead of calling us?
*
* It certainly could, but the CPU also needs to update its cycle count, along with some BACKTRACK state.
* There may also be a slight performance advantage calling its own method vs. calling through another object
* (ie, the Bus object).
* The CPU could use this, but the CPU also needs to update cycle counts, along with BACKTRACK states.
* There may also be a slight performance advantage calling its own setWord() method vs. calling through another
* object (ie, the Bus object).
*
* @this {Bus}
* @param {number} addr is a physical (non-segmented) address
@ -561,13 +558,13 @@ Bus.prototype.setWordDirect = function(addr, w)
*
* If bto is null, then we create bto (ie, an object that wraps obj and records off).
*
* If bto is NOT null, then we verify that off is within bto's range; if not, then we must
* create a new bto and return that instead.
* If bto is NOT null, then we verify that off is within the given bto's range; if not,
* then we must create a new bto and return that instead.
*
* @this {Bus}
* @param {Object} obj
* @param {Object} bto
* @param {number} off
* @param {number} off (the offset within obj that this wrapper object is relative to)
* @return {Object|null}
*/
Bus.prototype.addBackTrackObject = function(obj, bto, off)
@ -578,24 +575,34 @@ Bus.prototype.addBackTrackObject = function(obj, bto, off)
/*
* Try the most recently created bto, on the off-chance it's what the caller needs
*/
if (cbtObjects) bto = this.abtObjects[cbtObjects-1];
if (this.ibtLastAlloc >= 0) bto = this.abtObjects[this.ibtLastAlloc];
}
if (!bto || bto.obj != obj || off < bto.off || off >= bto.off + Bus.BACKTRACK.OFF_MAX) {
var slot;
bto = {obj: obj, off: off, slot: 0, refs: 0};
var slot;
if (!this.cbtDeletions) {
slot = cbtObjects;
} else {
for (slot = 0; slot < cbtObjects; slot++) {
if (!this.abtObjects[slot]) {
for (slot = this.ibtLastDelete; slot < cbtObjects; slot++) {
var btoTest = this.abtObjects[slot];
if (!btoTest || !btoTest.refs && !this.isBackTrackWeak(slot << Bus.BACKTRACK.SLOT_SHIFT)) {
this.ibtLastDelete = slot + 1;
this.cbtDeletions--;
break;
}
}
this.assert(slot < cbtObjects);
/*
* There's no longer any guarantee that simply because cbtDeletions was non-zero that there WILL
* be an available (existing) slot, because cbtDeletions also counts weak references that may still
* be weak.
*
* this.assert(slot < cbtObjects);
*/
}
this.assert(slot < Bus.BACKTRACK.SLOT_MAX);
bto.slot = slot;
this.ibtLastAlloc = bto.slot = slot;
if (slot == cbtObjects) {
this.abtObjects.push(bto);
} else {
@ -682,7 +689,33 @@ Bus.prototype.writeBackTrack = function(addr, bti)
this.dbg.message("writeBackTrack(%" + str.toHex(addr) + ',' + str.toHex(bti) + "): previous index (" + str.toHex(btiPrev) + ") refers to object with bad ref count (" + btoPrev.refs + ")");
}
} else if (!--btoPrev.refs) {
this.abtObjects[slotPrev] = null;
/*
* We used to just slam a null into the previous slot and consider it gone, but there may still
* be "weak references" to that slot (ie, it may still be associated with a register bti).
*
* The easiest way to handle weak references is to leave the slot allocated, with the object's ref
* count sitting at zero, and change addBackTrackObject() to look for both empty slots AND non-empty
* slots with a ref count of zero; in the latter case, it should again check for weak references,
* after which we can re-use the slot if all its weak references are now gone.
*/
if (!this.isBackTrackWeak(btiPrev)) this.abtObjects[slotPrev] = null;
/*
* TODO: Consider what the appropriate trigger should be for resetting ibtLastDelete to zero;
* if we don't OCCASIONALLY set it to zero, we may never clear out obsolete weak references,
* whereas if we ALWAYS set it to zero, we may be forcing addBackTrackObject() to scan the entire
* table too often.
*
* I'd prefer to do something like this:
*
* if (this.ibtLastDelete > slotPrev) this.ibtLastDelete = slotPrev;
*
* or even this:
*
* if (this.ibtLastDelete > slotPrev) this.ibtLastDelete = 0;
*
* But neither one of those guarantees that we will at least occasionally scan the entire table.
*/
this.ibtLastDelete = 0;
this.cbtDeletions++;
}
}
@ -697,6 +730,33 @@ Bus.prototype.writeBackTrack = function(addr, bti)
}
};
/**
* isBackTrackWeak(bti)
*
* @param {number} bti
* @returns {boolean} true if the given bti is still referenced by a register, false if not
*/
Bus.prototype.isBackTrackWeak = function(bti)
{
var bt = this.cpu.backTrack;
var slot = bti >>> Bus.BACKTRACK.SLOT_SHIFT;
return (bt.btiAL >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiAH >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiBL >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiBH >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiCL >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiCH >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiDL >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiDH >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiBPLo >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiBPHi >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiSILo >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiSIHi >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiDILo >>> Bus.BACKTRACK.SLOT_SHIFT == slot ||
bt.btiDIHi >>> Bus.BACKTRACK.SLOT_SHIFT == slot
);
};
/**
* saveMemory()
*

View file

@ -532,7 +532,7 @@ ChipSet.TIMER1 = {
ChipSet.TIMER2 = {
INDEX: 2,
PORT: 0x42 // used speaker tone generation
PORT: 0x42 // used for speaker tone generation
};
ChipSet.TIMER_CTRL = {

View file

@ -849,7 +849,7 @@ CPU.prototype.calcStartTime = function()
*
* This also won't do anything about other internal delays; for example, Debugger message() calls.
* By the time the message() function has called yieldCPU(), the cost of the message has already been
* incurred, so it will be end up being charged against the instruction(s) that triggered them.
* incurred, so it will be end up being charged against the instruction(s) that triggered it.
*
* TODO: Consider calling yieldCPU() sooner from message(), so that it can arrange for the msEndThisRun
* "snapshot" to occur sooner; it's unclear, however, whether that will really improve the CPU's ability

View file

@ -1154,7 +1154,10 @@ Disk.prototype.convertClusterToSectors = function(dir)
var iCluster = dir.iCluster;
if (iCluster) {
do {
this.assert(iCluster >= DiskAPI.FAT12.CLUSNUM_MIN);
if (iCluster < DiskAPI.FAT12.CLUSNUM_MIN) {
this.assert(false);
break;
}
var lba = dir.lbaData + ((iCluster - DiskAPI.FAT12.CLUSNUM_MIN) * dir.nClusterSecs);
for (var i = 0; i < dir.nClusterSecs; i++) {
apba.push(dir.pbaVolume + lba++);

View file

@ -1,4 +1,4 @@
Byte #3, November 1975
[Byte #3, November 1975](../static/BYTE-1975-11/BYTE-1975-11.pdf)
---
![Page 1](../static/BYTE-1975-11/thumbs/BYTE-1975-11 1.jpeg "link:../static/BYTE-1975-11/pages/BYTE-1975-11 1.pdf:200:260")
@ -99,5 +99,3 @@ Byte #3, November 1975
![Page 96](../static/BYTE-1975-11/thumbs/BYTE-1975-11 96.jpeg "link:../static/BYTE-1975-11/pages/BYTE-1975-11 96.pdf:200:260")
![Page 97](../static/BYTE-1975-11/thumbs/BYTE-1975-11 97.jpeg "link:../static/BYTE-1975-11/pages/BYTE-1975-11 97.pdf:200:260")
![Page 98](../static/BYTE-1975-11/thumbs/BYTE-1975-11 98.jpeg "link:../static/BYTE-1975-11/pages/BYTE-1975-11 98.pdf:200:260")
[[Full PDF](../static/BYTE-1975-11/BYTE-1975-11.pdf)]

View file

@ -1,4 +1,4 @@
Microsoft Systems Journal, October 1986
[Microsoft Systems Journal, October 1986](../static/MSJ-1986-10/MSJ-1986-10.pdf)
---
![Page 1](../static/MSJ-1986-10/thumbs/MSJ-1986-10 1.jpeg "link:../static/MSJ-1986-10/pages/MSJ-1986-10 1.pdf:200:260")
@ -35,5 +35,3 @@ Microsoft Systems Journal, October 1986
![Page 32](../static/MSJ-1986-10/thumbs/MSJ-1986-10 32.jpeg "link:../static/MSJ-1986-10/pages/MSJ-1986-10 32.pdf:200:260")
![Page 33](../static/MSJ-1986-10/thumbs/MSJ-1986-10 33.jpeg "link:../static/MSJ-1986-10/pages/MSJ-1986-10 33.pdf:200:260")
![Page 34](../static/MSJ-1986-10/thumbs/MSJ-1986-10 34.jpeg "link:../static/MSJ-1986-10/pages/MSJ-1986-10 34.pdf:200:260")
[[Full PDF](../static/MSJ-1986-10/MSJ-1986-10.pdf)]

View file

@ -1,4 +1,4 @@
Microsoft Systems Journal, May 1987
[Microsoft Systems Journal, May 1987](../static/MSJ-1987-05/MSJ-1987-05.pdf)
---
![Page 1](../static/MSJ-1987-05/thumbs/MSJ-1987-05 1.jpeg "link:../static/MSJ-1987-05/pages/MSJ-1987-05 1.pdf:200:260")
@ -91,5 +91,3 @@ Microsoft Systems Journal, May 1987
![Page 88](../static/MSJ-1987-05/thumbs/MSJ-1987-05 88.jpeg "link:../static/MSJ-1987-05/pages/MSJ-1987-05 88.pdf:200:260")
![Page 89](../static/MSJ-1987-05/thumbs/MSJ-1987-05 89.jpeg "link:../static/MSJ-1987-05/pages/MSJ-1987-05 89.pdf:200:260")
![Page 90](../static/MSJ-1987-05/thumbs/MSJ-1987-05 90.jpeg "link:../static/MSJ-1987-05/pages/MSJ-1987-05 90.pdf:200:260")
[[Full PDF](../static/MSJ-1987-05/MSJ-1987-05.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, October 1986
[PC Tech Journal, October 1986](../static/PCTJ-1986-10/PCTJ-1986-10.pdf)
---
![Page 1](../static/PCTJ-1986-10/thumbs/PCTJ-1986-10 1.jpeg "link:../static/PCTJ-1986-10/pages/PCTJ-1986-10 1.pdf:200:260")
@ -229,5 +229,3 @@ PC Tech Journal, October 1986
![Page 226](../static/PCTJ-1986-10/thumbs/PCTJ-1986-10 226.jpeg "link:../static/PCTJ-1986-10/pages/PCTJ-1986-10 226.pdf:200:260")
![Page 227](../static/PCTJ-1986-10/thumbs/PCTJ-1986-10 227.jpeg "link:../static/PCTJ-1986-10/pages/PCTJ-1986-10 227.pdf:200:260")
![Page 228](../static/PCTJ-1986-10/thumbs/PCTJ-1986-10 228.jpeg "link:../static/PCTJ-1986-10/pages/PCTJ-1986-10 228.pdf:200:260")
[[Full PDF](../static/PCTJ-1986-10/PCTJ-1986-10.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, November 1986
[PC Tech Journal, November 1986](../static/PCTJ-1986-11/PCTJ-1986-11.pdf)
---
![Page 1](../static/PCTJ-1986-11/thumbs/PCTJ-1986-11 1.jpeg "link:../static/PCTJ-1986-11/pages/PCTJ-1986-11 1.pdf:200:260")
@ -229,5 +229,3 @@ PC Tech Journal, November 1986
![Page 226](../static/PCTJ-1986-11/thumbs/PCTJ-1986-11 226.jpeg "link:../static/PCTJ-1986-11/pages/PCTJ-1986-11 226.pdf:200:260")
![Page 227](../static/PCTJ-1986-11/thumbs/PCTJ-1986-11 227.jpeg "link:../static/PCTJ-1986-11/pages/PCTJ-1986-11 227.pdf:200:260")
![Page 228](../static/PCTJ-1986-11/thumbs/PCTJ-1986-11 228.jpeg "link:../static/PCTJ-1986-11/pages/PCTJ-1986-11 228.pdf:200:260")
[[Full PDF](../static/PCTJ-1986-11/PCTJ-1986-11.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, December 1986
[PC Tech Journal, December 1986](../static/PCTJ-1986-12/PCTJ-1986-12.pdf)
---
![Page 1](../static/PCTJ-1986-12/thumbs/PCTJ-1986-12 1.jpeg "link:../static/PCTJ-1986-12/pages/PCTJ-1986-12 1.pdf:200:260")
@ -233,5 +233,3 @@ PC Tech Journal, December 1986
![Page 230](../static/PCTJ-1986-12/thumbs/PCTJ-1986-12 230.jpeg "link:../static/PCTJ-1986-12/pages/PCTJ-1986-12 230.pdf:200:260")
![Page 231](../static/PCTJ-1986-12/thumbs/PCTJ-1986-12 231.jpeg "link:../static/PCTJ-1986-12/pages/PCTJ-1986-12 231.pdf:200:260")
![Page 232](../static/PCTJ-1986-12/thumbs/PCTJ-1986-12 232.jpeg "link:../static/PCTJ-1986-12/pages/PCTJ-1986-12 232.pdf:200:260")
[[Full PDF](../static/PCTJ-1986-12/PCTJ-1986-12.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, January 1987
[PC Tech Journal, January 1987](../static/PCTJ-1987-01/PCTJ-1987-01.pdf)
---
![Page 1](../static/PCTJ-1987-01/thumbs/PCTJ-1987-01 1.jpeg "link:../static/PCTJ-1987-01/pages/PCTJ-1987-01 1.pdf:200:260")
@ -217,5 +217,3 @@ PC Tech Journal, January 1987
![Page 214](../static/PCTJ-1987-01/thumbs/PCTJ-1987-01 214.jpeg "link:../static/PCTJ-1987-01/pages/PCTJ-1987-01 214.pdf:200:260")
![Page 215](../static/PCTJ-1987-01/thumbs/PCTJ-1987-01 215.jpeg "link:../static/PCTJ-1987-01/pages/PCTJ-1987-01 215.pdf:200:260")
![Page 216](../static/PCTJ-1987-01/thumbs/PCTJ-1987-01 216.jpeg "link:../static/PCTJ-1987-01/pages/PCTJ-1987-01 216.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-01/PCTJ-1987-01.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, February 1987
[PC Tech Journal, February 1987](../static/PCTJ-1987-02/PCTJ-1987-02.pdf)
---
![Page 1](../static/PCTJ-1987-02/thumbs/PCTJ-1987-02 1.jpeg "link:../static/PCTJ-1987-02/pages/PCTJ-1987-02 1.pdf:200:260")
@ -223,5 +223,3 @@ PC Tech Journal, February 1987
![Page 220](../static/PCTJ-1987-02/thumbs/PCTJ-1987-02 220.jpeg "link:../static/PCTJ-1987-02/pages/PCTJ-1987-02 220.pdf:200:260")
![Page 221](../static/PCTJ-1987-02/thumbs/PCTJ-1987-02 221.jpeg "link:../static/PCTJ-1987-02/pages/PCTJ-1987-02 221.pdf:200:260")
![Page 222](../static/PCTJ-1987-02/thumbs/PCTJ-1987-02 222.jpeg "link:../static/PCTJ-1987-02/pages/PCTJ-1987-02 222.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-02/PCTJ-1987-02.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, March 1987
[PC Tech Journal, March 1987](../static/PCTJ-1987-03/PCTJ-1987-03.pdf)
---
![Page 1](../static/PCTJ-1987-03/thumbs/PCTJ-1987-03 1.jpeg "link:../static/PCTJ-1987-03/pages/PCTJ-1987-03 1.pdf:200:260")
@ -215,5 +215,3 @@ PC Tech Journal, March 1987
![Page 212](../static/PCTJ-1987-03/thumbs/PCTJ-1987-03 212.jpeg "link:../static/PCTJ-1987-03/pages/PCTJ-1987-03 212.pdf:200:260")
![Page 213](../static/PCTJ-1987-03/thumbs/PCTJ-1987-03 213.jpeg "link:../static/PCTJ-1987-03/pages/PCTJ-1987-03 213.pdf:200:260")
![Page 214](../static/PCTJ-1987-03/thumbs/PCTJ-1987-03 214.jpeg "link:../static/PCTJ-1987-03/pages/PCTJ-1987-03 214.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-03/PCTJ-1987-03.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, April 1987
[PC Tech Journal, April 1987](../static/PCTJ-1987-04/PCTJ-1987-04.pdf)
---
![Page 1](../static/PCTJ-1987-04/thumbs/PCTJ-1987-04 1.jpeg "link:../static/PCTJ-1987-04/pages/PCTJ-1987-04 1.pdf:200:260")
@ -219,5 +219,3 @@ PC Tech Journal, April 1987
![Page 216](../static/PCTJ-1987-04/thumbs/PCTJ-1987-04 216.jpeg "link:../static/PCTJ-1987-04/pages/PCTJ-1987-04 216.pdf:200:260")
![Page 217](../static/PCTJ-1987-04/thumbs/PCTJ-1987-04 217.jpeg "link:../static/PCTJ-1987-04/pages/PCTJ-1987-04 217.pdf:200:260")
![Page 218](../static/PCTJ-1987-04/thumbs/PCTJ-1987-04 218.jpeg "link:../static/PCTJ-1987-04/pages/PCTJ-1987-04 218.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-04/PCTJ-1987-04.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, May 1987
[PC Tech Journal, May 1987](../static/PCTJ-1987-05/PCTJ-1987-05.pdf)
---
![Page 1](../static/PCTJ-1987-05/thumbs/PCTJ-1987-05 1.jpeg "link:../static/PCTJ-1987-05/pages/PCTJ-1987-05 1.pdf:200:260")
@ -241,5 +241,3 @@ PC Tech Journal, May 1987
![Page 238](../static/PCTJ-1987-05/thumbs/PCTJ-1987-05 238.jpeg "link:../static/PCTJ-1987-05/pages/PCTJ-1987-05 238.pdf:200:260")
![Page 239](../static/PCTJ-1987-05/thumbs/PCTJ-1987-05 239.jpeg "link:../static/PCTJ-1987-05/pages/PCTJ-1987-05 239.pdf:200:260")
![Page 240](../static/PCTJ-1987-05/thumbs/PCTJ-1987-05 240.jpeg "link:../static/PCTJ-1987-05/pages/PCTJ-1987-05 240.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-05/PCTJ-1987-05.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, June 1987
[PC Tech Journal, June 1987](../static/PCTJ-1987-06/PCTJ-1987-06.pdf)
---
![Page 1](../static/PCTJ-1987-06/thumbs/PCTJ-1987-06 1.jpeg "link:../static/PCTJ-1987-06/pages/PCTJ-1987-06 1.pdf:200:260")
@ -237,5 +237,3 @@ PC Tech Journal, June 1987
![Page 234](../static/PCTJ-1987-06/thumbs/PCTJ-1987-06 234.jpeg "link:../static/PCTJ-1987-06/pages/PCTJ-1987-06 234.pdf:200:260")
![Page 235](../static/PCTJ-1987-06/thumbs/PCTJ-1987-06 235.jpeg "link:../static/PCTJ-1987-06/pages/PCTJ-1987-06 235.pdf:200:260")
![Page 236](../static/PCTJ-1987-06/thumbs/PCTJ-1987-06 236.jpeg "link:../static/PCTJ-1987-06/pages/PCTJ-1987-06 236.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-06/PCTJ-1987-06.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, July 1987
[PC Tech Journal, July 1987](../static/PCTJ-1987-07/PCTJ-1987-07.pdf)
---
![Page 1](../static/PCTJ-1987-07/thumbs/PCTJ-1987-07 1.jpeg "link:../static/PCTJ-1987-07/pages/PCTJ-1987-07 1.pdf:200:260")
@ -231,5 +231,3 @@ PC Tech Journal, July 1987
![Page 228](../static/PCTJ-1987-07/thumbs/PCTJ-1987-07 228.jpeg "link:../static/PCTJ-1987-07/pages/PCTJ-1987-07 228.pdf:200:260")
![Page 229](../static/PCTJ-1987-07/thumbs/PCTJ-1987-07 229.jpeg "link:../static/PCTJ-1987-07/pages/PCTJ-1987-07 229.pdf:200:260")
![Page 230](../static/PCTJ-1987-07/thumbs/PCTJ-1987-07 230.jpeg "link:../static/PCTJ-1987-07/pages/PCTJ-1987-07 230.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-07/PCTJ-1987-07.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, August 1987
[PC Tech Journal, August 1987](../static/PCTJ-1987-08/PCTJ-1987-08.pdf)
---
![Page 1](../static/PCTJ-1987-08/thumbs/PCTJ-1987-08 1.jpeg "link:../static/PCTJ-1987-08/pages/PCTJ-1987-08 1.pdf:200:260")
@ -251,5 +251,3 @@ PC Tech Journal, August 1987
![Page 248](../static/PCTJ-1987-08/thumbs/PCTJ-1987-08 248.jpeg "link:../static/PCTJ-1987-08/pages/PCTJ-1987-08 248.pdf:200:260")
![Page 249](../static/PCTJ-1987-08/thumbs/PCTJ-1987-08 249.jpeg "link:../static/PCTJ-1987-08/pages/PCTJ-1987-08 249.pdf:200:260")
![Page 250](../static/PCTJ-1987-08/thumbs/PCTJ-1987-08 250.jpeg "link:../static/PCTJ-1987-08/pages/PCTJ-1987-08 250.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-08/PCTJ-1987-08.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, September 1987
[PC Tech Journal, September 1987](../static/PCTJ-1987-09/PCTJ-1987-09.pdf)
---
![Page 1](../static/PCTJ-1987-09/thumbs/PCTJ-1987-09 1.jpeg "link:../static/PCTJ-1987-09/pages/PCTJ-1987-09 1.pdf:200:260")
@ -253,5 +253,3 @@ PC Tech Journal, September 1987
![Page 250](../static/PCTJ-1987-09/thumbs/PCTJ-1987-09 250.jpeg "link:../static/PCTJ-1987-09/pages/PCTJ-1987-09 250.pdf:200:260")
![Page 251](../static/PCTJ-1987-09/thumbs/PCTJ-1987-09 251.jpeg "link:../static/PCTJ-1987-09/pages/PCTJ-1987-09 251.pdf:200:260")
![Page 252](../static/PCTJ-1987-09/thumbs/PCTJ-1987-09 252.jpeg "link:../static/PCTJ-1987-09/pages/PCTJ-1987-09 252.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-09/PCTJ-1987-09.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, October 1987
[PC Tech Journal, October 1987](../static/PCTJ-1987-10/PCTJ-1987-10.pdf)
---
![Page 1](../static/PCTJ-1987-10/thumbs/PCTJ-1987-10 1.jpeg "link:../static/PCTJ-1987-10/pages/PCTJ-1987-10 1.pdf:200:260")
@ -232,5 +232,3 @@ PC Tech Journal, October 1987
![Page 229](../static/PCTJ-1987-10/thumbs/PCTJ-1987-10 229.jpeg "link:../static/PCTJ-1987-10/pages/PCTJ-1987-10 229.pdf:200:260")
![Page 230](../static/PCTJ-1987-10/thumbs/PCTJ-1987-10 230.jpeg "link:../static/PCTJ-1987-10/pages/PCTJ-1987-10 230.pdf:200:260")
![Page 231](../static/PCTJ-1987-10/thumbs/PCTJ-1987-10 231.jpeg "link:../static/PCTJ-1987-10/pages/PCTJ-1987-10 231.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-10/PCTJ-1987-10.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, November 1987
[PC Tech Journal, November 1987](../static/PCTJ-1987-11/PCTJ-1987-11.pdf)
---
![Page 1](../static/PCTJ-1987-11/thumbs/PCTJ-1987-11 1.jpeg "link:../static/PCTJ-1987-11/pages/PCTJ-1987-11 1.pdf:200:260")
@ -264,5 +264,3 @@ PC Tech Journal, November 1987
![Page 261](../static/PCTJ-1987-11/thumbs/PCTJ-1987-11 261.jpeg "link:../static/PCTJ-1987-11/pages/PCTJ-1987-11 261.pdf:200:260")
![Page 262](../static/PCTJ-1987-11/thumbs/PCTJ-1987-11 262.jpeg "link:../static/PCTJ-1987-11/pages/PCTJ-1987-11 262.pdf:200:260")
![Page 263](../static/PCTJ-1987-11/thumbs/PCTJ-1987-11 263.jpeg "link:../static/PCTJ-1987-11/pages/PCTJ-1987-11 263.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-11/PCTJ-1987-11.pdf)]

View file

@ -1,4 +1,4 @@
PC Tech Journal, December 1987
[PC Tech Journal, December 1987](../static/PCTJ-1987-12/PCTJ-1987-12.pdf)
---
![Page 1](../static/PCTJ-1987-12/thumbs/PCTJ-1987-12 1.jpeg "link:../static/PCTJ-1987-12/pages/PCTJ-1987-12 1.pdf:200:260")
@ -243,5 +243,3 @@ PC Tech Journal, December 1987
![Page 240](../static/PCTJ-1987-12/thumbs/PCTJ-1987-12 240.jpeg "link:../static/PCTJ-1987-12/pages/PCTJ-1987-12 240.pdf:200:260")
![Page 241](../static/PCTJ-1987-12/thumbs/PCTJ-1987-12 241.jpeg "link:../static/PCTJ-1987-12/pages/PCTJ-1987-12 241.pdf:200:260")
![Page 242](../static/PCTJ-1987-12/thumbs/PCTJ-1987-12 242.jpeg "link:../static/PCTJ-1987-12/pages/PCTJ-1987-12 242.pdf:200:260")
[[Full PDF](../static/PCTJ-1987-12/PCTJ-1987-12.pdf)]

View file

@ -1,4 +1,4 @@
IBM 5150 Technical Reference, August 1981
[IBM 5150 Technical Reference, August 1981](http://minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6025005_AUG81.pdf)
---
![Page 1](../../static/5150/techref/1981-08/thumbs/IBM-5150-TECHREF 1.jpeg "link:../../static/5150/techref/1981-08/pages/IBM-5150-TECHREF 1.pdf:200:260")
@ -395,5 +395,3 @@ IBM 5150 Technical Reference, August 1981
![Page 392](../../static/5150/techref/1981-08/thumbs/IBM-5150-TECHREF 392.jpeg "link:../../static/5150/techref/1981-08/pages/IBM-5150-TECHREF 392.pdf:200:260")
![Page 393](../../static/5150/techref/1981-08/thumbs/IBM-5150-TECHREF 393.jpeg "link:../../static/5150/techref/1981-08/pages/IBM-5150-TECHREF 393.pdf:200:260")
![Page 394](../../static/5150/techref/1981-08/thumbs/IBM-5150-TECHREF 394.jpeg "link:../../static/5150/techref/1981-08/pages/IBM-5150-TECHREF 394.pdf:200:260")
[[Full PDF](http://minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6025005_AUG81.pdf)]

View file

@ -1,4 +1,4 @@
IBM 5160 Technical Reference, April 1983
[IBM 5160 Technical Reference, April 1983](http://retroarchive.org/dos/docs/ibm5160techref.pdf)
---
![Page 1](../../static/5160/techref/1983-04/thumbs/IBM-5160-TECHREF 1.jpeg "link:../../static/5160/techref/1983-04/pages/IBM-5160-TECHREF 1.pdf:200:260")
@ -624,5 +624,3 @@ IBM 5160 Technical Reference, April 1983
![Page 621](../../static/5160/techref/1983-04/thumbs/IBM-5160-TECHREF 621.jpeg "link:../../static/5160/techref/1983-04/pages/IBM-5160-TECHREF 621.pdf:200:260")
![Page 622](../../static/5160/techref/1983-04/thumbs/IBM-5160-TECHREF 622.jpeg "link:../../static/5160/techref/1983-04/pages/IBM-5160-TECHREF 622.pdf:200:260")
![Page 623](../../static/5160/techref/1983-04/thumbs/IBM-5160-TECHREF 623.jpeg "link:../../static/5160/techref/1983-04/pages/IBM-5160-TECHREF 623.pdf:200:260")
[[Full PDF](http://retroarchive.org/dos/docs/ibm5160techref.pdf)]

View file

@ -1,4 +1,4 @@
IBM 5170 Installation and Setup, March 1984
[IBM 5170 Installation and Setup, March 1984](http://minuszerodegrees.net/manuals/IBM_5170_Installation_and_Setup_1502491_MAR84.pdf)
---
![Page 1](../../static/5170/setup/thumbs/IBM-5170-SETUP 1.jpeg "link:../../static/5170/setup/pages/IBM-5170-SETUP 1.pdf:200:260")
@ -287,5 +287,3 @@ IBM 5170 Installation and Setup, March 1984
![Page 284](../../static/5170/setup/thumbs/IBM-5170-SETUP 284.jpeg "link:../../static/5170/setup/pages/IBM-5170-SETUP 284.pdf:200:260")
![Page 285](../../static/5170/setup/thumbs/IBM-5170-SETUP 285.jpeg "link:../../static/5170/setup/pages/IBM-5170-SETUP 285.pdf:200:260")
![Page 286](../../static/5170/setup/thumbs/IBM-5170-SETUP 286.jpeg "link:../../static/5170/setup/pages/IBM-5170-SETUP 286.pdf:200:260")
[[Full PDF](http://minuszerodegrees.net/manuals/IBM_5170_Installation_and_Setup_1502491_MAR84.pdf)]

View file

@ -1,4 +1,4 @@
IBM 5170 Technical Reference, March 1984
[IBM 5170 Technical Reference, March 1984](http://minuszerodegrees.net/manuals/IBM_5170_Technical_Reference_1502243_MAR84.pdf)
---
![Page 1](../../static/5170/techref/1984-03/thumbs/IBM-5170-TECHREF 1.jpeg "link:../../static/5170/techref/1984-03/pages/IBM-5170-TECHREF 1.pdf:200:260")
@ -463,5 +463,3 @@ IBM 5170 Technical Reference, March 1984
![Page 460](../../static/5170/techref/1984-03/thumbs/IBM-5170-TECHREF 460.jpeg "link:../../static/5170/techref/1984-03/pages/IBM-5170-TECHREF 460.pdf:200:260")
![Page 461](../../static/5170/techref/1984-03/thumbs/IBM-5170-TECHREF 461.jpeg "link:../../static/5170/techref/1984-03/pages/IBM-5170-TECHREF 461.pdf:200:260")
![Page 462](../../static/5170/techref/1984-03/thumbs/IBM-5170-TECHREF 462.jpeg "link:../../static/5170/techref/1984-03/pages/IBM-5170-TECHREF 462.pdf:200:260")
[[Full PDF](http://minuszerodegrees.net/manuals/IBM_5170_Technical_Reference_1502243_MAR84.pdf)]

View file

@ -1,4 +1,4 @@
IBM Enhanced Graphics Adapter
[IBM Enhanced Graphics Adapter](http://minuszerodegrees.net/oa/OA - IBM Enhanced Graphics Adapter.pdf)
---
![Page 1](../static/ega/thumbs/IBM-EGA 1.jpeg "link:../static/ega/pages/IBM-EGA 1.pdf:200:260")
@ -175,5 +175,3 @@ IBM Enhanced Graphics Adapter
![Page 172](../static/ega/thumbs/IBM-EGA 172.jpeg "link:../static/ega/pages/IBM-EGA 172.pdf:200:260")
![Page 173](../static/ega/thumbs/IBM-EGA 173.jpeg "link:../static/ega/pages/IBM-EGA 173.pdf:200:260")
![Page 174](../static/ega/thumbs/IBM-EGA 174.jpeg "link:../static/ega/pages/IBM-EGA 174.pdf:200:260")
[[Full PDF](http://minuszerodegrees.net/oa/OA - IBM Enhanced Graphics Adapter.pdf)]

View file

@ -1,4 +1,4 @@
80286 and 80287 Programmer's Reference Manual
[80286 and 80287 Programmer's Reference Manual](../../static/80286/progref/80286_and_80287_Programmers_Reference_Manual_1987.pdf)
---
![Page 1](../../static/80286/progref/thumbs/80286_and_80287_Programmers_Reference_Manual_1987 1.jpeg "link:../../static/80286/progref/pages/80286_and_80287_Programmers_Reference_Manual_1987 1.pdf:200:260")
@ -516,5 +516,3 @@
![Page 513](../../static/80286/progref/thumbs/80286_and_80287_Programmers_Reference_Manual_1987 513.jpeg "link:../../static/80286/progref/pages/80286_and_80287_Programmers_Reference_Manual_1987 513.pdf:200:260")
![Page 514](../../static/80286/progref/thumbs/80286_and_80287_Programmers_Reference_Manual_1987 514.jpeg "link:../../static/80286/progref/pages/80286_and_80287_Programmers_Reference_Manual_1987 514.pdf:200:260")
![Page 515](../../static/80286/progref/thumbs/80286_and_80287_Programmers_Reference_Manual_1987 515.jpeg "link:../../static/80286/progref/pages/80286_and_80287_Programmers_Reference_Manual_1987 515.pdf:200:260")
[[Full PDF](../../static/80286/progref/80286_and_80287_Programmers_Reference_Manual_1987.pdf)]