Numerous changes to make paper tape configurations more consistent with disk configurations. This allows all devices to share the machine-wide "autoMount" configuration object, now that the PC11 has a proper device name ("PTR"), making its properties distinguishable from those for RK11 and RL11 drives (eg, "RK0", "RL0", etc). And all the tape/disk components now use "Load" functions to connect a tape or disk to a device ("Attach" is deprecated). And finally, all tape/disk components now support operations to deposit their media directly into memory -- although in this case, the names of the operations are necessarily different: "Read" for tape images, "Boot" for disk images. The difference is partly historical convention but also reflects the fact that a "Boot" operation is more limited: paper tapes were designed to be completely loaded into memory, whereas bootable disks are designed for only the first sector to be loaded and executed. Also, paper tape images are now flagged as non-auto-starting, because they often require some user action (eg, loading another tape, setting some switches, etc), whereas disk boot sectors are flagged as auto-starting (see the fStart parameter of the loadImage() interface in the RAM component).
This commit is contained in:
parent
aa2aebd89a
commit
b54253acf9
41 changed files with 383 additions and 211 deletions
|
|
@ -481,13 +481,13 @@ CPUStatePDP11.prototype.setMMR3 = function(newMMR3)
|
|||
};
|
||||
|
||||
/**
|
||||
* setReset(addr, fReset)
|
||||
* setReset(addr, fStart)
|
||||
*
|
||||
* @this {CPUStatePDP11}
|
||||
* @param {number} addr
|
||||
* @param {boolean} [fReset] (true if called in the context of a complete reset, obviating the need to notify the Debugger)
|
||||
* @param {boolean|undefined} fStart (true if a "startable" image was just loaded, false if not)
|
||||
*/
|
||||
CPUStatePDP11.prototype.setReset = function(addr, fReset)
|
||||
CPUStatePDP11.prototype.setReset = function(addr, fStart)
|
||||
{
|
||||
this.addrReset = addr;
|
||||
|
||||
|
|
@ -495,17 +495,25 @@ CPUStatePDP11.prototype.setReset = function(addr, fReset)
|
|||
this.setPC(addr);
|
||||
this.setPSW(0);
|
||||
|
||||
if (!fReset && this.dbg) {
|
||||
/*
|
||||
* TODO: Review the decision to always stop the CPU if the Debugger is loaded. Note that
|
||||
* when stopCPU() stops a running CPU, the Debugger gets notified, so again, no need to notify it here.
|
||||
*
|
||||
* TODO: There are more serious problems to deal with if another component is slamming a new PC down
|
||||
* the CPU's throat (presumably while also dropping some new code into RAM) while the CPU was still running;
|
||||
* we should probably force a complete reset if the CPU is running, but for now, it's up to the user
|
||||
* to hit the reset button themselves.
|
||||
*/
|
||||
if (!this.stopCPU()) this.dbg.updateStatus();
|
||||
if (fStart) {
|
||||
this.autoStart();
|
||||
}
|
||||
else {
|
||||
if (this.dbg) {
|
||||
/*
|
||||
* TODO: Review the decision to always stop the CPU if the Debugger is loaded. Note that
|
||||
* when stopCPU() stops a running CPU, the Debugger gets notified, so again, no need to notify it here.
|
||||
*
|
||||
* TODO: There are more serious problems to deal with if another component is slamming a new PC down
|
||||
* the CPU's throat (presumably while also dropping some new code into RAM) while the CPU was still running;
|
||||
* we should probably force a complete reset if the CPU is running, but for now, it's up to the user
|
||||
* to hit the reset button themselves.
|
||||
*/
|
||||
if (!this.stopCPU()) this.dbg.updateStatus();
|
||||
}
|
||||
else if (fStart === false) {
|
||||
this.stopCPU();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue