Debugger refinements
This commit is contained in:
parent
2422ff1dc0
commit
e71f8c096a
9 changed files with 111 additions and 61 deletions
|
|
@ -32,7 +32,7 @@ gems:
|
||||||
pcjs:
|
pcjs:
|
||||||
domain: pcjs.org # whereas site.url is used for linking purposes, site.pcjs.domain is used for display purposes
|
domain: pcjs.org # whereas site.url is used for linking purposes, site.pcjs.domain is used for display purposes
|
||||||
version: 1.20.8 # IMPORTANT: keep pcjs.version in sync with package.json:version
|
version: 1.20.8 # IMPORTANT: keep pcjs.version in sync with package.json:version
|
||||||
compiled: false # by default, the compiled pcjs.version scripts will be used (eg, pc.js or pc-dbg.js)
|
compiled: true # by default, the compiled pcjs.version scripts will be used (eg, pc.js or pc-dbg.js)
|
||||||
pc_scripts: # if pcjs.compiled is false, the following scripts will be included instead, in the order listed
|
pc_scripts: # if pcjs.compiled is false, the following scripts will be included instead, in the order listed
|
||||||
- /modules/shared/lib/defines.js
|
- /modules/shared/lib/defines.js
|
||||||
- /modules/shared/lib/diskapi.js
|
- /modules/shared/lib/diskapi.js
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
layout: page
|
layout: page
|
||||||
title: Machine Configurations
|
title: Machine Configurations
|
||||||
menu_title: Machines
|
menu_title: Machines
|
||||||
menu_order: 5
|
menu_order: 6
|
||||||
permalink: /devices/pc/machine/
|
permalink: /devices/pc/machine/
|
||||||
redirect_from:
|
redirect_from:
|
||||||
- /configs/pc/machines/
|
- /configs/pc/machines/
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
---
|
---
|
||||||
layout: page
|
layout: page
|
||||||
title: IBM PC Disk Archive
|
title: IBM PC Disk Archive
|
||||||
|
menu_title: Disks
|
||||||
|
menu_order: 4
|
||||||
permalink: /disks/pc/
|
permalink: /disks/pc/
|
||||||
---
|
---
|
||||||
|
|
||||||
IBM PC Disk Archive
|
IBM PC Disk Archive
|
||||||
---
|
---
|
||||||
|
|
||||||
This is a list of disks available to any of the [IBM PC Machines](/devices/pc/machine/) that use the
|
This is a list of disks available to any of the [IBM PC Machines](/devices/pc/machine/) that use our
|
||||||
[library.xml](/disks/pc/library.xml) disk configuration file.
|
[Library](/disks/pc/library.xml) XML disk configuration file.
|
||||||
|
|
||||||
For some of the disks below, we have provided more information about the software, and in some cases, machines
|
For some of the disks below, we have provided more information about the software, and in some cases, machines
|
||||||
that automatically run the software.
|
that automatically run the software.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Windows 1.03 was released in August 1986.
|
||||||
Directory listings of the six 360Kb distribution diskettes are provided below.
|
Directory listings of the six 360Kb distribution diskettes are provided below.
|
||||||
|
|
||||||
It's been noted on [WinWorld](https://winworldpc.com/product/windows-10/103) that version 1.03 disks have
|
It's been noted on [WinWorld](https://winworldpc.com/product/windows-10/103) that version 1.03 disks have
|
||||||
been found with `USER.EXE` dated either `05-22-86` *or* `08-24-86`. The latter is available as
|
been found with `USER.EXE` dated either `05-22-86` *or* `08-24-86`. The latter is available here as
|
||||||
[Windows 1.03b](../1.03b/).
|
[Windows 1.03b](../1.03b/).
|
||||||
|
|
||||||
These disks were dumped from the PCjs private collection. Differences include:
|
These disks were dumped from the PCjs private collection. Differences include:
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
layout: page
|
layout: page
|
||||||
title: Documentation
|
title: Documentation
|
||||||
menu_title: Docs
|
menu_title: Docs
|
||||||
menu_order: 6
|
menu_order: 8
|
||||||
permalink: /docs/
|
permalink: /docs/
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2731,7 +2731,10 @@ if (DEBUGGER) {
|
||||||
Debugger.prototype.toHexAddr = function(dbgAddr)
|
Debugger.prototype.toHexAddr = function(dbgAddr)
|
||||||
{
|
{
|
||||||
var ch = this.getAddrPrefix(dbgAddr);
|
var ch = this.getAddrPrefix(dbgAddr);
|
||||||
return dbgAddr.sel == null? (ch + str.toHex(dbgAddr.addr)) : (ch + this.toHexOffset(dbgAddr.off, dbgAddr.sel, dbgAddr.fAddr32));
|
/*
|
||||||
|
* TODO: Revisit the decision to check sel == null; I would rather see these decisions based on type.
|
||||||
|
*/
|
||||||
|
return (dbgAddr.type >= Debugger.ADDRTYPE.LINEAR || dbgAddr.sel == null)? (ch + str.toHex(dbgAddr.addr)) : (ch + this.toHexOffset(dbgAddr.off, dbgAddr.sel, dbgAddr.fAddr32));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -2880,40 +2883,6 @@ if (DEBUGGER) {
|
||||||
this.dumpBlocks(this.cpu.aMemBlocks, asArgs[0], this.cpu.aMemBlocks !== this.cpu.aBusBlocks);
|
this.dumpBlocks(this.cpu.aMemBlocks, asArgs[0], this.cpu.aMemBlocks !== this.cpu.aBusBlocks);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* dumpInfo(asArgs)
|
|
||||||
*
|
|
||||||
* @this {Debugger}
|
|
||||||
* @param {Array.<string>} asArgs
|
|
||||||
*/
|
|
||||||
Debugger.prototype.dumpInfo = function(asArgs)
|
|
||||||
{
|
|
||||||
var sInfo = "no information";
|
|
||||||
if (BACKTRACK) {
|
|
||||||
var sAddr = asArgs[0];
|
|
||||||
var dbgAddr = this.parseAddr(sAddr, true, true, false);
|
|
||||||
if (dbgAddr) {
|
|
||||||
var addr = this.getAddr(dbgAddr);
|
|
||||||
sInfo = '%' + str.toHex(addr) + ": " + (this.bus.getSymbol(addr, true) || sInfo);
|
|
||||||
} else {
|
|
||||||
var component, componentPrev = null;
|
|
||||||
while (component = this.cmp.getMachineComponent("Disk", componentPrev)) {
|
|
||||||
var aInfo = component.getSymbolInfo(sAddr);
|
|
||||||
if (aInfo.length) {
|
|
||||||
sInfo = "";
|
|
||||||
for (var i in aInfo) {
|
|
||||||
var a = aInfo[i];
|
|
||||||
if (sInfo) sInfo += '\n';
|
|
||||||
sInfo += a[0] + ": " + a[1] + ' ' + str.toHex(a[2], 4) + ':' + str.toHex(a[3], 4) + " len " + str.toHexWord(a[4]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
componentPrev = component;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sInfo;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getPageEntry(addrPE, lPE, fPTE)
|
* getPageEntry(addrPE, lPE, fPTE)
|
||||||
*
|
*
|
||||||
|
|
@ -2934,6 +2903,77 @@ if (DEBUGGER) {
|
||||||
return s;
|
return s;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getPageInfo(addr)
|
||||||
|
*
|
||||||
|
* @this {Debugger}
|
||||||
|
* @param {number} addr
|
||||||
|
* @return {Object|null}
|
||||||
|
*/
|
||||||
|
Debugger.prototype.getPageInfo = function(addr)
|
||||||
|
{
|
||||||
|
var pageInfo = null;
|
||||||
|
if (I386 && this.cpu.model >= X86.MODEL_80386) {
|
||||||
|
var bus = this.bus;
|
||||||
|
/*
|
||||||
|
* Here begins code remarkably similar to mapPageBlock() (with fSuppress set).
|
||||||
|
*/
|
||||||
|
pageInfo = {};
|
||||||
|
pageInfo.offPDE = (addr & X86.LADDR.PDE.MASK) >>> X86.LADDR.PDE.SHIFT;
|
||||||
|
pageInfo.addrPDE = this.cpu.regCR3 + pageInfo.offPDE;
|
||||||
|
pageInfo.blockPDE = bus.aMemBlocks[(pageInfo.addrPDE & bus.nBusMask) >>> bus.nBlockShift];
|
||||||
|
pageInfo.lPDE = pageInfo.blockPDE.readLong(pageInfo.offPDE);
|
||||||
|
pageInfo.offPTE = (addr & X86.LADDR.PTE.MASK) >>> X86.LADDR.PTE.SHIFT;
|
||||||
|
pageInfo.addrPTE = (pageInfo.lPDE & X86.PTE.FRAME) + pageInfo.offPTE;
|
||||||
|
pageInfo.blockPTE = bus.aMemBlocks[(pageInfo.addrPTE & bus.nBusMask) >>> bus.nBlockShift];
|
||||||
|
pageInfo.lPTE = pageInfo.blockPTE.readLong(pageInfo.offPTE);
|
||||||
|
pageInfo.addrPhys = (pageInfo.lPTE & X86.PTE.FRAME) + (addr & X86.LADDR.OFFSET);
|
||||||
|
//var blockPhys = bus.aMemBlocks[(addrPhys & bus.nBusMask) >>> bus.nBlockShift];
|
||||||
|
}
|
||||||
|
return pageInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dumpInfo(asArgs)
|
||||||
|
*
|
||||||
|
* @this {Debugger}
|
||||||
|
* @param {Array.<string>} asArgs
|
||||||
|
*/
|
||||||
|
Debugger.prototype.dumpInfo = function(asArgs)
|
||||||
|
{
|
||||||
|
var sInfo = "no information";
|
||||||
|
if (BACKTRACK) {
|
||||||
|
var sAddr = asArgs[0];
|
||||||
|
var dbgAddr = this.parseAddr(sAddr, true, true, false);
|
||||||
|
if (dbgAddr) {
|
||||||
|
var addr = this.getAddr(dbgAddr);
|
||||||
|
if (dbgAddr.type != Debugger.ADDRTYPE.PHYSICAL) {
|
||||||
|
var pageInfo = this.getPageInfo(addr);
|
||||||
|
if (pageInfo) {
|
||||||
|
dbgAddr.addr = pageInfo.addrPhys;
|
||||||
|
dbgAddr.type = Debugger.ADDRTYPE.PHYSICAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sInfo = this.toHexAddr(dbgAddr) + ": " + (this.bus.getSymbol(addr, true) || sInfo);
|
||||||
|
} else {
|
||||||
|
var component, componentPrev = null;
|
||||||
|
while (component = this.cmp.getMachineComponent("Disk", componentPrev)) {
|
||||||
|
var aInfo = component.getSymbolInfo(sAddr);
|
||||||
|
if (aInfo.length) {
|
||||||
|
sInfo = "";
|
||||||
|
for (var i in aInfo) {
|
||||||
|
var a = aInfo[i];
|
||||||
|
if (sInfo) sInfo += '\n';
|
||||||
|
sInfo += a[0] + ": " + a[1] + ' ' + str.toHex(a[2], 4) + ':' + str.toHex(a[3], 4) + " len " + str.toHexWord(a[4]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
componentPrev = component;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sInfo;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dumpPage(asArgs)
|
* dumpPage(asArgs)
|
||||||
*
|
*
|
||||||
|
|
@ -2956,30 +2996,18 @@ if (DEBUGGER) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
var pageInfo = this.getPageInfo(addr);
|
||||||
* Here begins the code that is remarkably similar to mapPageBlock(), with fSuppress set.
|
if (!pageInfo) {
|
||||||
*/
|
this.println("unsupported operation");
|
||||||
var bus = this.bus;
|
return;
|
||||||
var offPDE = (addr & X86.LADDR.PDE.MASK) >>> X86.LADDR.PDE.SHIFT;
|
}
|
||||||
var addrPDE = this.cpu.regCR3 + offPDE;
|
|
||||||
var blockPDE = bus.aMemBlocks[(addrPDE & bus.nBusMask) >>> bus.nBlockShift];
|
|
||||||
var lPDE = blockPDE.readLong(offPDE);
|
|
||||||
var offPTE = (addr & X86.LADDR.PTE.MASK) >>> X86.LADDR.PTE.SHIFT;
|
|
||||||
var addrPTE = (lPDE & X86.PTE.FRAME) + offPTE;
|
|
||||||
var blockPTE = bus.aMemBlocks[(addrPTE & bus.nBusMask) >>> bus.nBlockShift];
|
|
||||||
var lPTE = blockPTE.readLong(offPTE);
|
|
||||||
var addrPhys = (lPTE & X86.PTE.FRAME) + (addr & X86.LADDR.OFFSET);
|
|
||||||
//var blockPhys = bus.aMemBlocks[(addrPhys & bus.nBusMask) >>> bus.nBlockShift];
|
|
||||||
/*
|
|
||||||
* And here ends the code that is remarkably similar to mapPageBlock(), with fSuppress set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
this.println("linear PDE addr PDE PTE addr PTE physical" );
|
this.println("linear PDE addr PDE PTE addr PTE physical" );
|
||||||
this.println("--------- ---------- -------- ---------- -------- ----------");
|
this.println("--------- ---------- -------- ---------- -------- ----------");
|
||||||
var s = '%' + str.toHex(addr);
|
var s = '%' + str.toHex(addr);
|
||||||
s += " %%" + this.getPageEntry(addrPDE, lPDE);
|
s += " %%" + this.getPageEntry(pageInfo.addrPDE, pageInfo.lPDE);
|
||||||
s += " %%" + this.getPageEntry(addrPTE, lPTE, true);
|
s += " %%" + this.getPageEntry(pageInfo.addrPTE, pageInfo.lPTE, true);
|
||||||
s += " %%" + str.toHex(addrPhys);
|
s += " %%" + str.toHex(pageInfo.addrPhys);
|
||||||
this.println(s);
|
this.println(s);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ var TYPEDARRAYS = (typeof ArrayBuffer !== 'undefined');
|
||||||
* TODO: BACKTRACK support is currently completely disabled until we have a chance to investigate the problem
|
* TODO: BACKTRACK support is currently completely disabled until we have a chance to investigate the problem
|
||||||
* discussed in Bus.addBackTrackObject().
|
* discussed in Bus.addBackTrackObject().
|
||||||
*/
|
*/
|
||||||
var BACKTRACK = false;
|
var BACKTRACK = !COMPILED;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @define {boolean}
|
* @define {boolean}
|
||||||
|
|
|
||||||
|
|
@ -471,14 +471,18 @@ FileInfo.prototype.loadSegmentTable = function(offEntries, nEntries, nSegOffShif
|
||||||
this.aSegments = [];
|
this.aSegments = [];
|
||||||
this.aOrdinals = []; // this is an optional array for quick ordinal-to-segment lookup
|
this.aOrdinals = []; // this is an optional array for quick ordinal-to-segment lookup
|
||||||
|
|
||||||
if (MAXDEBUG) this.disk.println("loadSegmentTable(" + this.sPath + "," + str.toHexLong(offEntries) + "," + str.toHexWord(nEntries) + ")");
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("loadSegmentTable(" + this.sPath + "," + str.toHexLong(offEntries) + "," + str.toHexWord(nEntries) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
while (nEntries--) {
|
while (nEntries--) {
|
||||||
var offSegment = this.loadValue(offEntries) << nSegOffShift;
|
var offSegment = this.loadValue(offEntries) << nSegOffShift;
|
||||||
if (offSegment) {
|
if (offSegment) {
|
||||||
var lenSegment = this.loadValue(offEntries + 2) || 0x10000; // 0 means 64K
|
var lenSegment = this.loadValue(offEntries + 2) || 0x10000; // 0 means 64K
|
||||||
|
|
||||||
if (MAXDEBUG) this.disk.println("segment " + iSegment + ": offStart=" + str.toHexLong(offSegment) + " offEnd=" + str.toHexLong(offSegment + lenSegment));
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("segment " + iSegment + ": offStart=" + str.toHexLong(offSegment) + " offEnd=" + str.toHexLong(offSegment + lenSegment));
|
||||||
|
}
|
||||||
|
|
||||||
this.aSegments[iSegment++] = {offStart: offSegment, offEnd: offSegment + lenSegment - 1, aEntries: []};
|
this.aSegments[iSegment++] = {offStart: offSegment, offEnd: offSegment + lenSegment - 1, aEntries: []};
|
||||||
}
|
}
|
||||||
|
|
@ -520,7 +524,9 @@ FileInfo.prototype.loadEntryTable = function(offEntries, offEntriesEnd)
|
||||||
{
|
{
|
||||||
var iOrdinal = 1;
|
var iOrdinal = 1;
|
||||||
|
|
||||||
if (MAXDEBUG) this.disk.println("loadEntryTable(" + str.toHexLong(offEntries) + "," + str.toHexLong(offEntriesEnd) + ")");
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("loadEntryTable(" + str.toHexLong(offEntries) + "," + str.toHexLong(offEntriesEnd) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
while (offEntries < offEntriesEnd) {
|
while (offEntries < offEntriesEnd) {
|
||||||
|
|
||||||
|
|
@ -529,7 +535,9 @@ FileInfo.prototype.loadEntryTable = function(offEntries, offEntriesEnd)
|
||||||
if (!bEntries) break;
|
if (!bEntries) break;
|
||||||
var bSegment = w >> 8, iSegment;
|
var bSegment = w >> 8, iSegment;
|
||||||
|
|
||||||
if (MAXDEBUG) this.disk.println("bundle for segment " + bSegment + ": " + bEntries + " entries @" + str.toHex(offEntries));
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("bundle for segment " + bSegment + ": " + bEntries + " entries @" + str.toHex(offEntries));
|
||||||
|
}
|
||||||
|
|
||||||
offEntries += 2;
|
offEntries += 2;
|
||||||
|
|
||||||
|
|
@ -564,10 +572,14 @@ FileInfo.prototype.loadEntryTable = function(offEntries, offEntriesEnd)
|
||||||
offEntries += 6;
|
offEntries += 6;
|
||||||
}
|
}
|
||||||
if (!this.aSegments[iSegment]) {
|
if (!this.aSegments[iSegment]) {
|
||||||
if (MAXDEBUG) this.disk.println("invalid segment: " + iSegment);
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("invalid segment: " + iSegment);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.aSegments[iSegment].aEntries[iOrdinal] = [offEntry];
|
this.aSegments[iSegment].aEntries[iOrdinal] = [offEntry];
|
||||||
if (MAXDEBUG) this.disk.println("ordinal " + iOrdinal + ": segment=" + iSegment + " offset=" + str.toHexLong(offEntry) + " @" + str.toHex(offDebug));
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("ordinal " + iOrdinal + ": segment=" + iSegment + " offset=" + str.toHexLong(offEntry) + " @" + str.toHex(offDebug));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.aOrdinals[iOrdinal] = [iSegment, offEntry];
|
this.aOrdinals[iOrdinal] = [iSegment, offEntry];
|
||||||
iOrdinal++;
|
iOrdinal++;
|
||||||
|
|
@ -590,7 +602,9 @@ FileInfo.prototype.loadNameTable = function(offEntries, offEntriesEnd)
|
||||||
{
|
{
|
||||||
var cNames = 0;
|
var cNames = 0;
|
||||||
|
|
||||||
if (MAXDEBUG) this.disk.println("loadNameTable(" + str.toHexLong(offEntries) + (offEntriesEnd? ("," + str.toHexLong(offEntriesEnd)) : "") + ")");
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("loadNameTable(" + str.toHexLong(offEntries) + (offEntriesEnd? ("," + str.toHexLong(offEntriesEnd)) : "") + ")");
|
||||||
|
}
|
||||||
|
|
||||||
while (!offEntriesEnd || offEntries < offEntriesEnd) {
|
while (!offEntriesEnd || offEntries < offEntriesEnd) {
|
||||||
|
|
||||||
|
|
@ -618,12 +632,18 @@ FileInfo.prototype.loadNameTable = function(offEntries, offEntriesEnd)
|
||||||
var aEntries = this.aSegments[iSegment].aEntries[iOrdinal];
|
var aEntries = this.aSegments[iSegment].aEntries[iOrdinal];
|
||||||
this.disk.assert(aEntries && aEntries.length == 1);
|
this.disk.assert(aEntries && aEntries.length == 1);
|
||||||
aEntries.push(sSymbol);
|
aEntries.push(sSymbol);
|
||||||
if (MAXDEBUG) this.disk.println("segment " + iSegment + " offset " + str.toHexWord(aEntries[0]) + " ordinal " + iOrdinal + ": " + sSymbol + " @" + str.toHex(offDebug));
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage("segment " + iSegment + " offset " + str.toHexWord(aEntries[0]) + " ordinal " + iOrdinal + ": " + sSymbol + " @" + str.toHex(offDebug));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (MAXDEBUG) this.disk.println(this.sPath + ": cannot find segment " + iSegment + " (offset " + str.toHexWord(tuple[1]) + ") for symbol " + sSymbol + " with ordinal " + iOrdinal + " @" + str.toHex(offDebug));
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage(this.sPath + ": cannot find segment " + iSegment + " (offset " + str.toHexWord(tuple[1]) + ") for symbol " + sSymbol + " with ordinal " + iOrdinal + " @" + str.toHex(offDebug));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (MAXDEBUG) this.disk.println(this.sPath + ": cannot find ordinal " + iOrdinal + " for symbol " + sSymbol + " @" + str.toHex(offDebug));
|
if (DEBUG && this.disk.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
|
this.disk.printMessage(this.sPath + ": cannot find ordinal " + iOrdinal + " for symbol " + sSymbol + " @" + str.toHex(offDebug));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
offEntries += 2;
|
offEntries += 2;
|
||||||
|
|
@ -1268,7 +1288,7 @@ Disk.prototype.doneLoad = function(sURL, sDiskData, nErrorCode)
|
||||||
* conversion to a forward-compatible 'data' array.
|
* conversion to a forward-compatible 'data' array.
|
||||||
*/
|
*/
|
||||||
else {
|
else {
|
||||||
if (MAXDEBUG && this.messageEnabled()) {
|
if (DEBUG && this.messageEnabled(Messages.DISK | Messages.DATA)) {
|
||||||
var sCylinders = aDiskData.length + " track" + (aDiskData.length > 1 ? "s" : "");
|
var sCylinders = aDiskData.length + " track" + (aDiskData.length > 1 ? "s" : "");
|
||||||
var nHeads = aDiskData[0].length;
|
var nHeads = aDiskData[0].length;
|
||||||
var sHeads = nHeads + " head" + (nHeads > 1 ? "s" : "");
|
var sHeads = nHeads + " head" + (nHeads > 1 ? "s" : "");
|
||||||
|
|
|
||||||
|
|
@ -475,7 +475,7 @@ X86CPU.prototype.enablePageBlocks = function()
|
||||||
X86CPU.prototype.flushPageBlocks = function()
|
X86CPU.prototype.flushPageBlocks = function()
|
||||||
{
|
{
|
||||||
if (this.regCR0 & X86.CR0.PG) this.enablePageBlocks();
|
if (this.regCR0 & X86.CR0.PG) this.enablePageBlocks();
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* acquirePageBlock(addr)
|
* acquirePageBlock(addr)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue