Changed 11/70 machines to allocate RAM as a single chunk, and updated the 11/70 page on toggle-ins (/devices/pdp11/machine/1170/panel/debugger/README.md)
This commit is contained in:
parent
57bceb4da9
commit
d67e848973
17 changed files with 504 additions and 285 deletions
|
|
@ -4,8 +4,7 @@
|
|||
<name pos="center">PDP-11/70 Boot Monitor with Debugger</name>
|
||||
<computer id="computer" busWidth="22"/>
|
||||
<cpu id="cpu" model="1170" cycles="6666667"/>
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<ram id="ram" addr="0x10000" size="0x34000"/>
|
||||
<ram id="ram" addr="0x00000" size="0x3E000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<device id="default" type="default"/>
|
||||
<serial id="dl11" adapter="0" binding="print"/>
|
||||
<panel ref="/devices/pdp11/panel/test/debugger/terminal.xml"/>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@
|
|||
<name pos="center">PDP-11/70 Boot Monitor</name>
|
||||
<computer id="computer" busWidth="22"/>
|
||||
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<ram id="ram" addr="0x10000" size="0x34000"/>
|
||||
<ram id="ram" addr="0x00000" size="0x3E000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<device id="default" type="default"/>
|
||||
<serial id="dl11" adapter="0" binding="print"/>
|
||||
<panel ref="/devices/pdp11/panel/test/terminal.xml"/>
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ machines:
|
|||
Toggle-Ins
|
||||
----------
|
||||
|
||||
As DEC explains in its [PDP-11/70 Maintenance Service Guide](http://archive.pcjs.org/pubs/dec/pdp11/1170/PDP1170_Maintenance_Service_Guide_Apr88.pdf),
|
||||
Chapter 4: "There are several useful toggle-ins that are probably not very well known." Excerpts are listed below.
|
||||
As DEC notes in the [PDP-11/70 Maintenance Service Guide](http://archive.pcjs.org/pubs/dec/pdp11/1170/PDP1170_Maintenance_Service_Guide_Apr88.pdf),
|
||||
Chapter 4: "There are several useful toggle-ins that are probably not very well known." Excerpts are provided below.
|
||||
|
||||
### Memory Management
|
||||
|
||||
|
|
@ -38,31 +38,32 @@ Chapter 4: "There are several useful toggle-ins that are probably not very well
|
|||
Load Address 300
|
||||
Exam Display = 070707 ... Relocation works
|
||||
|
||||
With the PDPjs Debugger, the above "toggle-in" is easily entered with these commands:
|
||||
With the PDPjs Debugger, the above "toggle-in" is easily entered with the following commands (the semicolons are optional;
|
||||
they just make it easier to paste an entire set of commands into the Debugger at once):
|
||||
|
||||
e 200 012737 000400 177572 012737 070707 000200 000000
|
||||
e 300 000300
|
||||
e 17772300 077406
|
||||
e 17772340 000001
|
||||
r pc 200
|
||||
e 200 012737 000400 177572 012737 070707 000200 000000;
|
||||
e 300 000300;
|
||||
e 17772300 077406;
|
||||
e 17772340 000001;
|
||||
r pc 200;
|
||||
g
|
||||
|
||||
which should produce these results:
|
||||
|
||||
>> e 200 012737 000400 177572 012737 070707 000200 000000
|
||||
changing 000200 from 00000 to 12737
|
||||
changing 000202 from 00000 to 00400
|
||||
changing 000204 from 00000 to 77572
|
||||
changing 000206 from 00000 to 12737
|
||||
changing 000210 from 00000 to 70707
|
||||
changing 000212 from 00000 to 00200
|
||||
changing 000214 from 00000 to 00000
|
||||
changing 000200 from 000000 to 012737
|
||||
changing 000202 from 000000 to 000400
|
||||
changing 000204 from 000000 to 177572
|
||||
changing 000206 from 000000 to 012737
|
||||
changing 000210 from 000000 to 070707
|
||||
changing 000212 from 000000 to 000200
|
||||
changing 000214 from 000000 to 000000
|
||||
>> e 300 000300
|
||||
changing 000300 from 00000 to 00300
|
||||
changing 000300 from 000000 to 000300
|
||||
>> e 17772300 077406
|
||||
changing 00017772300 from 00000 to 77406
|
||||
changing 00017772300 from 000000 to 077406
|
||||
>> e 17772340 000001
|
||||
changing 00017772340 from 00000 to 00001
|
||||
changing 00017772340 from 000000 to 000001
|
||||
>> r pc 200
|
||||
updated registers:
|
||||
R0=000000 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
|
||||
|
|
@ -74,8 +75,12 @@ which should produce these results:
|
|||
R0=000000 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
|
||||
SP=000000 PC=000214 PS=000001 SW=00000000 T0 N0 Z0 V0 C1
|
||||
000214: 000000 HALT
|
||||
>> dw 300 l1
|
||||
000300 70707
|
||||
>> d 300 l1
|
||||
000300 070707
|
||||
|
||||
NOTE: By long-standing convention, all PCjs Debuggers use the "e" command to edit memory and the "d" command to dump
|
||||
memory. Don't confuse those letters with the "EXAM" and "DEP" switches on the PDP-11 Front Panel, because they perform
|
||||
*opposite* operations.
|
||||
|
||||
### Unibus Map Checkout
|
||||
|
||||
|
|
@ -85,7 +90,7 @@ which should produce these results:
|
|||
Deposit 125252 Known Data
|
||||
|
||||
Load Address 17000500
|
||||
Deposit 125252 Data Path Ok
|
||||
Examine 125252 Data Path Ok
|
||||
|
||||
Load Address 17000700
|
||||
Deposit 070707 Known Data
|
||||
|
|
@ -101,3 +106,190 @@ which should produce these results:
|
|||
|
||||
Load address 17000500 Relocates to 700
|
||||
Examine 070707 ... Relocated ok
|
||||
|
||||
The above "toggle-in" can be performed with the PDPjs Debugger as follows:
|
||||
|
||||
e 500 125252;
|
||||
d 17000500 l1;
|
||||
e 17000700 070707;
|
||||
e 17770202 000000;
|
||||
e 17770200 000200;
|
||||
e 17772516 40;
|
||||
d 17000500 l1
|
||||
|
||||
which should produce these results:
|
||||
|
||||
>> e 500 125252
|
||||
changing 000500 from 000000 to 125252
|
||||
>> d 17000500 l1
|
||||
00017000500 125252
|
||||
>> e 17000700 070707
|
||||
changing 00017000700 from 000000 to 070707
|
||||
>> e 17770202 000000
|
||||
changing 00017770202 from 000000 to 000000
|
||||
>> e 17770200 000200
|
||||
changing 00017770200 from 000000 to 000200
|
||||
>> e 17772516 40
|
||||
changing 00017772516 from 000000 to 000040
|
||||
>> d 17000500 l1
|
||||
00017000500 070707
|
||||
|
||||
If you also want to see all the hardware register activity, use the Debugger's "m bus on" command to turn bus messages on:
|
||||
|
||||
>> m bus on
|
||||
messages on: bus
|
||||
>> e 500 125252
|
||||
changing 000500 to 125252
|
||||
>> d 17000500 l1
|
||||
00017000500 125252
|
||||
>> e 17000700 070707
|
||||
changing 00017000700 to 070707
|
||||
>> e 17770202 000000
|
||||
changing 00017770202 to 000000
|
||||
UNIMAP1.writeWord(00017770202,000000)
|
||||
>> e 17770200 000200
|
||||
changing 00017770200 to 000200
|
||||
UNIMAP0.writeWord(00017770200,000200)
|
||||
>> e 17772516 40
|
||||
changing 00017772516 to 000040
|
||||
MMR3.writeWord(00017772516,000040)
|
||||
>> d 17000500 l1
|
||||
00017000500 070707
|
||||
|
||||
### Memory Clear Program
|
||||
|
||||
Use this toggle-in to clear all of memory from location 0 to system size.
|
||||
|
||||
LOCATION CONTENTS INSTRUCTIONS & NOTES
|
||||
|
||||
17772300 077406 KIPDR 0
|
||||
17772316 077406 KIPDR 7 = I/O page for program
|
||||
17772340 000000 KIPAR 0 ; Load 200 if using trap catchers
|
||||
17772356 177600 KIPAR 7 = I/O page for program
|
||||
17777700 000000 R0 = Start Virtual Address
|
||||
17777701 172340 R1 = KIPAR 0 Address
|
||||
17777702 177572 R2 = MMR0 Address
|
||||
17777703 177760 R3 = System size register Address
|
||||
17777704 172516 R4 = MMR3 Address
|
||||
17777705 Pattern R5 = Desired pattern or "0"
|
||||
17777706 177676 R6 = Stack pointer
|
||||
17777776 000000 PSW = 0
|
||||
17772240 012714 MOV #20,(R4) ; Enable 22-bit Mapping
|
||||
17772242 000020
|
||||
17772244 005212 INC (R2) ; Enable Memory Management
|
||||
17772246 010520 1$: MOV R5,(R0)+ ; Data to memory
|
||||
17772250 020027 CMP R0,#17776 ; Top of Page 0?
|
||||
17772252 017776
|
||||
17772254 003774 BLE 1$
|
||||
17772256 062711 ADD #200,(R1) ; Step Page
|
||||
17772260 000200
|
||||
17772262 021311 CMP (R3),(R1) ; Top of Memory?
|
||||
17772264 003402 BLE 2$
|
||||
17772266 005000 CLR R0 ; Start at Virtual Address 0
|
||||
17772270 000776 BR 1$
|
||||
17772272 005312 2$: DEC (R2) ; Disable Relocation
|
||||
17772274 000000 HLT
|
||||
|
||||
Load address 172240
|
||||
Start
|
||||
|
||||
The above "toggle-in" can be entered with the PDPjs Debugger as follows:
|
||||
|
||||
e 17772300 077406;
|
||||
e 17772316 077406;
|
||||
e 17772340 000000;
|
||||
e 17772356 177600;
|
||||
e 17777700 000000;
|
||||
e 17777701 172340;
|
||||
e 17777702 177572;
|
||||
e 17777703 177760;
|
||||
e 17777704 172516;
|
||||
e 17777705 123123;
|
||||
e 17777706 177676;
|
||||
e 17777776 000000;
|
||||
e 17772240 012714 000020 005212 010520 020027 017776 003774 062711;
|
||||
e 17772260 000200 021311 003402 005000 000776 005312 000000;
|
||||
r pc 172240
|
||||
|
||||
which should produce the following results when bus messages are turned on ("m bus on"):
|
||||
|
||||
>> m bus on
|
||||
messages on: bus
|
||||
>> e 17772300 077406
|
||||
changing 00017772300 to 077406
|
||||
KISDR0.writeWord(00017772300,077406)
|
||||
>> e 17772316 077406
|
||||
changing 00017772316 to 077406
|
||||
KISDR7.writeWord(00017772316,077406)
|
||||
>> e 17772340 000000
|
||||
changing 00017772340 to 000000
|
||||
KISAR0.writeWord(00017772340,000000)
|
||||
>> e 17772356 177600
|
||||
changing 00017772356 to 177600
|
||||
KISAR7.writeWord(00017772356,177600)
|
||||
>> e 17777700 000000
|
||||
changing 00017777700 to 000000
|
||||
R0SET0.writeWord(00017777700,000000)
|
||||
>> e 17777701 172340
|
||||
changing 00017777701 to 172340
|
||||
R1SET0.writeWord(00017777701,172340)
|
||||
>> e 17777702 177572
|
||||
changing 00017777702 to 177572
|
||||
R2SET0.writeWord(00017777702,177572)
|
||||
>> e 17777703 177760
|
||||
changing 00017777703 to 177760
|
||||
R3SET0.writeWord(00017777703,177760)
|
||||
>> e 17777704 172516
|
||||
changing 00017777704 to 172516
|
||||
R4SET0.writeWord(00017777704,172516)
|
||||
>> e 17777705 123123
|
||||
changing 00017777705 to 123123
|
||||
R5SET0.writeWord(00017777705,123123)
|
||||
>> e 17777706 177676
|
||||
changing 00017777706 to 177676
|
||||
R6KERNEL.writeWord(00017777706,177676)
|
||||
>> e 17777776 000000
|
||||
changing 00017777776 to 000000
|
||||
PSW.writeWord(00017777776,000000)
|
||||
>> e 17772240 012714 000020 005212 010520 020027 017776 003774 062711
|
||||
changing 00017772240 to 012714
|
||||
SISAR0.writeWord(00017772240,012714)
|
||||
changing 00017772242 to 000020
|
||||
SISAR1.writeWord(00017772242,000020)
|
||||
changing 00017772244 to 005212
|
||||
SISAR2.writeWord(00017772244,005212)
|
||||
changing 00017772246 to 010520
|
||||
SISAR3.writeWord(00017772246,010520)
|
||||
changing 00017772250 to 020027
|
||||
SISAR4.writeWord(00017772250,020027)
|
||||
changing 00017772252 to 017776
|
||||
SISAR5.writeWord(00017772252,017776)
|
||||
changing 00017772254 to 003774
|
||||
SISAR6.writeWord(00017772254,003774)
|
||||
changing 00017772256 to 062711
|
||||
SISAR7.writeWord(00017772256,062711)
|
||||
>> e 17772260 000200 021311 003402 005000 000776 005312 000000
|
||||
changing 00017772260 to 000200
|
||||
SDSAR0.writeWord(00017772260,000200)
|
||||
changing 00017772262 to 021311
|
||||
SDSAR1.writeWord(00017772262,021311)
|
||||
changing 00017772264 to 003402
|
||||
SDSAR2.writeWord(00017772264,003402)
|
||||
changing 00017772266 to 005000
|
||||
SDSAR3.writeWord(00017772266,005000)
|
||||
changing 00017772270 to 000776
|
||||
SDSAR4.writeWord(00017772270,000776)
|
||||
changing 00017772272 to 005312
|
||||
SDSAR5.writeWord(00017772272,005312)
|
||||
changing 00017772274 to 000000
|
||||
SDSAR6.writeWord(00017772274,000000)
|
||||
>> r pc 172240
|
||||
updated registers:
|
||||
R0=000000 R1=172340 R2=177572 R3=177760 R4=172516 R5=123123
|
||||
SP=177676 PC=172240 PS=000000 SW=00000000 T0 N0 Z0 V0 C0
|
||||
SISAR0.readWord(172240): 012714
|
||||
SISAR1.readWord(172242): 000020
|
||||
SISAR0.readWord(172240): 012714
|
||||
SISAR1.readWord(172242): 000020
|
||||
172240: 012714 000020 MOV #20,@R4
|
||||
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@
|
|||
<name pos="center">PDP-11/70 with Front Panel and Debugger</name>
|
||||
<computer id="computer" busWidth="22"/>
|
||||
<cpu id="cpu" model="1170" cycles="6666667"/>
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<ram id="ram" addr="0x10000" size="0x34000"/>
|
||||
<ram id="ram" addr="0x00000" size="0x3E000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<device id="default" type="default"/>
|
||||
<serial id="dl11" adapter="0" binding="print" upperCase="true"/>
|
||||
<panel ref="/devices/pdp11/panel/1170/debugger/front.xml"/>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@
|
|||
<name pos="center">PDP-11/70 with Front Panel</name>
|
||||
<computer id="computer" busWidth="22"/>
|
||||
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<ram id="ram" addr="0x10000" size="0x34000"/>
|
||||
<ram id="ram" addr="0x00000" size="0x3E000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<device id="default" type="default"/>
|
||||
<serial id="dl11" adapter="0" binding="print" upperCase="true"/>
|
||||
<panel ref="/devices/pdp11/panel/1170/front.xml"/>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@
|
|||
<name pos="center">PDP-11/70 with Front Panel</name>
|
||||
<computer id="computer" busWidth="22"/>
|
||||
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<ram id="ram" addr="0x10000" size="0x34000"/>
|
||||
<ram id="ram" addr="0x00000" size="0x3E000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<device id="default" type="default"/>
|
||||
<serial id="dl11" adapter="0"/>
|
||||
<panel ref="/devices/pdp11/panel/1170/debugger/front.xml"/>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@
|
|||
<name pos="center">PDP-11/70 with Front Panel</name>
|
||||
<computer id="computer" busWidth="22"/>
|
||||
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<ram id="ram" addr="0x10000" size="0x34000"/>
|
||||
<ram id="ram" addr="0x00000" size="0x3E000" file="/apps/pdp11/boot/monitor/PDPJSMON.json"/>
|
||||
<device id="default" type="default"/>
|
||||
<serial id="dl11" adapter="0"/>
|
||||
<panel ref="/devices/pdp11/panel/1170/front.xml"/>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<device id="rl11" type="rl11" autoMount='{RL0:{path:"/disks/dec/rl02k/RL02K-XXDP.json"}}' pos="left" width="35%" padLeft="8px" padBottom="8px">
|
||||
<device id="rl11" type="rl11" autoMount='{RL0:{path:"http://archive.pcjs.org/disks/dec/rl02k/RL02K-XXDP.json"}}' pos="left" width="35%" padLeft="8px" padBottom="8px">
|
||||
<name>Disk Drive Controls</name>
|
||||
<control type="container">
|
||||
<control type="list" binding="listDrives"/>
|
||||
<control type="list" binding="listDisks">
|
||||
<disk id="rl3" name="XXDP Diagnostics" path="/disks/dec/rl02k/RL02K-XXDP.json"/>
|
||||
<disk id="rl3" name="XXDP Diagnostics" path="http://archive.pcjs.org/disks/dec/rl02k/RL02K-XXDP.json"/>
|
||||
</control>
|
||||
<control type="button" binding="loadDrive">Load</control>
|
||||
<control type="description" binding="descDisk" padRight="8px"/>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -262,14 +262,14 @@ BusPDP11.IOController = {
|
|||
}
|
||||
if (b >= 0) {
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".readByte(" + this.dbg.toStrBase(addr) + "): " + this.dbg.toStrBase(b), true, true);
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".readByte(" + this.dbg.toStrBase(addr) + "): " + this.dbg.toStrBase(b), true, !bus.nDisableFaults);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
bus.fault(addr, PDP11.CPUERR.TIMEOUT, PDP11.ACCESS.READ_BYTE);
|
||||
b = 0xff;
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage("warning: unconverted read access to byte @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(b), true, true);
|
||||
this.dbg.printMessage("warning: unconverted read access to byte @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(b), true, !bus.nDisableFaults);
|
||||
}
|
||||
return b;
|
||||
},
|
||||
|
|
@ -336,13 +336,13 @@ BusPDP11.IOController = {
|
|||
}
|
||||
if (fWrite) {
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".writeByte(" + this.dbg.toStrBase(addr) + "," + this.dbg.toStrBase(b) + ")", true, true);
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".writeByte(" + this.dbg.toStrBase(addr) + "," + this.dbg.toStrBase(b) + ")", true, !bus.nDisableFaults);
|
||||
}
|
||||
return;
|
||||
}
|
||||
bus.fault(addr, PDP11.CPUERR.TIMEOUT, PDP11.ACCESS.WRITE_BYTE);
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage("warning: unconverted write access to byte @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(b), true, true);
|
||||
this.dbg.printMessage("warning: unconverted write access to byte @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(b), true, !bus.nDisableFaults);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -368,14 +368,14 @@ BusPDP11.IOController = {
|
|||
}
|
||||
if (w >= 0) {
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".readWord(" + this.dbg.toStrBase(addr) + "): " + this.dbg.toStrBase(w), true, true);
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".readWord(" + this.dbg.toStrBase(addr) + "): " + this.dbg.toStrBase(w), true, !bus.nDisableFaults);
|
||||
}
|
||||
return w;
|
||||
}
|
||||
bus.fault(addr, PDP11.CPUERR.TIMEOUT, PDP11.ACCESS.READ_WORD);
|
||||
w = 0xffff;
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage("warning: unconverted read access to word @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(w), true, true);
|
||||
this.dbg.printMessage("warning: unconverted read access to word @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(w), true, !bus.nDisableFaults);
|
||||
}
|
||||
return w;
|
||||
},
|
||||
|
|
@ -405,13 +405,13 @@ BusPDP11.IOController = {
|
|||
}
|
||||
if (fWrite) {
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".writeWord(" + this.dbg.toStrBase(addr) + "," + this.dbg.toStrBase(w) + ")", true, true);
|
||||
this.dbg.printMessage(afn[BusPDP11.IOHANDLER.NAME] + ".writeWord(" + this.dbg.toStrBase(addr) + "," + this.dbg.toStrBase(w) + ")", true, !bus.nDisableFaults);
|
||||
}
|
||||
return;
|
||||
}
|
||||
bus.fault(addr, PDP11.CPUERR.TIMEOUT, PDP11.ACCESS.WRITE_WORD);
|
||||
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(afn[BusPDP11.IOHANDLER.MSG_CATEGORY])) {
|
||||
this.dbg.printMessage("warning: unconverted write access to word @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(w), true, true);
|
||||
this.dbg.printMessage("warning: unconverted write access to word @" + this.dbg.toStrBase(addr) + ": " + this.dbg.toStrBase(w), true, !bus.nDisableFaults);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -896,6 +896,14 @@ BusPDP11.prototype.getByte = function(addr)
|
|||
*/
|
||||
BusPDP11.prototype.getByteDirect = function(addr)
|
||||
{
|
||||
/*
|
||||
* If bits 18-21 of addr are all set (which is implied by addr >= BusPDP11.IOPAGE_UNIBUS aka 0x3C0000),
|
||||
* then we have a 22-bit address pointing to the top 256Kb range, so we must pass the address through the
|
||||
* UNIBUS relocation map.
|
||||
*/
|
||||
if (addr >= BusPDP11.IOPAGE_UNIBUS) {
|
||||
addr = this.cpu.mapUnibus(addr);
|
||||
}
|
||||
this.fFault = false;
|
||||
this.nDisableFaults++;
|
||||
var b = this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].readByteDirect(addr & this.nBlockLimit, addr);
|
||||
|
|
@ -939,6 +947,14 @@ BusPDP11.prototype.getWord = function(addr)
|
|||
*/
|
||||
BusPDP11.prototype.getWordDirect = function(addr)
|
||||
{
|
||||
/*
|
||||
* If bits 18-21 of addr are all set (which is implied by addr >= BusPDP11.IOPAGE_UNIBUS aka 0x3C0000),
|
||||
* then we have a 22-bit address pointing to the top 256Kb range, so we must pass the address through the
|
||||
* UNIBUS relocation map.
|
||||
*/
|
||||
if (addr >= BusPDP11.IOPAGE_UNIBUS) {
|
||||
addr = this.cpu.mapUnibus(addr);
|
||||
}
|
||||
var w;
|
||||
var off = addr & this.nBlockLimit;
|
||||
var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
|
||||
|
|
@ -985,6 +1001,14 @@ BusPDP11.prototype.setByte = function(addr, b)
|
|||
*/
|
||||
BusPDP11.prototype.setByteDirect = function(addr, b)
|
||||
{
|
||||
/*
|
||||
* If bits 18-21 of addr are all set (which is implied by addr >= BusPDP11.IOPAGE_UNIBUS aka 0x3C0000),
|
||||
* then we have a 22-bit address pointing to the top 256Kb range, so we must pass the address through the
|
||||
* UNIBUS relocation map.
|
||||
*/
|
||||
if (addr >= BusPDP11.IOPAGE_UNIBUS) {
|
||||
addr = this.cpu.mapUnibus(addr);
|
||||
}
|
||||
this.fFault = false;
|
||||
this.nDisableFaults++;
|
||||
this.aMemBlocks[(addr & this.nBusMask) >>> this.nBlockShift].writeByteDirect(addr & this.nBlockLimit, b & 0xff, addr);
|
||||
|
|
@ -1030,6 +1054,14 @@ BusPDP11.prototype.setWord = function(addr, w)
|
|||
*/
|
||||
BusPDP11.prototype.setWordDirect = function(addr, w)
|
||||
{
|
||||
/*
|
||||
* If bits 18-21 of addr are all set (which is implied by addr >= BusPDP11.IOPAGE_UNIBUS aka 0x3C0000),
|
||||
* then we have a 22-bit address pointing to the top 256Kb range, so we must pass the address through the
|
||||
* UNIBUS relocation map.
|
||||
*/
|
||||
if (addr >= BusPDP11.IOPAGE_UNIBUS) {
|
||||
addr = this.cpu.mapUnibus(addr);
|
||||
}
|
||||
var off = addr & this.nBlockLimit;
|
||||
var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
|
||||
this.fFault = false;
|
||||
|
|
|
|||
|
|
@ -2867,8 +2867,8 @@ if (DEBUGGER) {
|
|||
/**
|
||||
* doDump(asArgs)
|
||||
*
|
||||
* The length parameter is interpreted as a number of bytes (or words, or dwords) to dump, and it is
|
||||
* interpreted using the current base.
|
||||
* The length parameter is interpreted as a number of bytes (or words, or dwords) to dump,
|
||||
* and it is interpreted using the current base.
|
||||
*
|
||||
* @this {DebuggerPDP11}
|
||||
* @param {Array.<string>} asArgs (formerly sCmd, [sAddr], [sLen] and [sBytes])
|
||||
|
|
@ -2941,7 +2941,7 @@ if (DEBUGGER) {
|
|||
return;
|
||||
}
|
||||
}
|
||||
if (!sAddr) sCmd = this.sCmdDumpPrev || "db";
|
||||
if (!sAddr) sCmd = this.sCmdDumpPrev || "dw";
|
||||
} else {
|
||||
this.sCmdDumpPrev = sCmd;
|
||||
}
|
||||
|
|
@ -2963,17 +2963,20 @@ if (DEBUGGER) {
|
|||
if (len > 0x10000) len = 0x10000; // prevent bad user (or variable) input from producing excessive output
|
||||
}
|
||||
|
||||
var sDump = "";
|
||||
var size = (sCmd == "dd"? 4 : (sCmd == "dw"? 2 : 1));
|
||||
/*
|
||||
* I've changed the code below to effectively make "dw" the default if only "d" is specified,
|
||||
* since this is primarily a word-oriented machine.
|
||||
*/
|
||||
var size = (sCmd == "dd"? 4 : (sCmd == "db"? 1 : 2));
|
||||
var nBytes = (size * len) || 128;
|
||||
var nLines = ((nBytes + 15) >> 4) || 1;
|
||||
|
||||
var sDump = "";
|
||||
while (nLines-- && nBytes > 0) {
|
||||
var data = 0, shift = 0, i;
|
||||
var sData = "", sChars = "";
|
||||
sAddr = this.toStrAddr(dbgAddr);
|
||||
/*
|
||||
* Dump 8 bytes per line when using base 8, and dump 16 bytes when using base 16 (or when dumping dwords).
|
||||
* Dump 8 bytes per line when using base 8, and dump 16 bytes when using base 16.
|
||||
*
|
||||
* And while we used to always call getByte() and assemble them into words or dwords as appropriate, I've
|
||||
* changed the logic below to honor "dw" by calling getWord(), since the Bus interfaces have been updated
|
||||
|
|
@ -2981,8 +2984,10 @@ if (DEBUGGER) {
|
|||
*
|
||||
* Besides, it's nice for "db" and "dw" to generate the same Bus activity that typical byte and word reads do.
|
||||
*/
|
||||
for (i = (size == 4? 16 : this.nBase); i > 0 && nBytes > 0; i--) {
|
||||
var n = 1;
|
||||
var i, n;
|
||||
var data = 0, shift = 0;
|
||||
for (i = this.nBase; i > 0 && nBytes > 0; i -= n, nBytes -= n) {
|
||||
n = 1;
|
||||
var v = size == 1? this.getByte(dbgAddr, n) : this.getWord(dbgAddr, (n = 2));
|
||||
data |= (v << (shift << 3));
|
||||
shift += n;
|
||||
|
|
@ -2992,7 +2997,6 @@ if (DEBUGGER) {
|
|||
data = shift = 0;
|
||||
}
|
||||
sChars += (v >= 32 && v < 128? String.fromCharCode(v) : '.');
|
||||
nBytes -= n;
|
||||
}
|
||||
if (sDump) sDump += '\n';
|
||||
sDump += sAddr + " " + sData + ((i == 0)? (' ' + sChars) : "");
|
||||
|
|
@ -3045,8 +3049,7 @@ if (DEBUGGER) {
|
|||
if (vNew & ~mask) {
|
||||
this.println("warning: " + str.toHex(vNew) + " exceeds " + size + "-byte value");
|
||||
}
|
||||
var vOld = fnGet.call(this, dbgAddr);
|
||||
this.println("changing " + this.toStrAddr(dbgAddr) + " from " + this.toStrBase(vOld, size) + " to " + this.toStrBase(vNew, size));
|
||||
this.println("changing " + this.toStrAddr(dbgAddr) + (this.messageEnabled(MessagesPDP11.BUS)? "" : (" from " + this.toStrBase(fnGet.call(this, dbgAddr), size))) + " to " + this.toStrBase(vNew, size));
|
||||
fnSet.call(this, dbgAddr, vNew, size);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -681,7 +681,7 @@ if (DEBUGGER) {
|
|||
var s;
|
||||
switch(this.nBase) {
|
||||
case 8:
|
||||
s = str.toOct(n, Math.round((8/3) * nBytes));
|
||||
s = str.toOct(n, nBytes * 3 - (nBytes > 2? 1 : 0));
|
||||
break;
|
||||
case 10:
|
||||
s = n.toString();
|
||||
|
|
|
|||
|
|
@ -202,9 +202,9 @@ web.getResource = function(sURL, dataPost, fAsync, done)
|
|||
|
||||
if (DEBUG) {
|
||||
/*
|
||||
* The larger resources that we put on archive.pcjs.org should also be available locally...
|
||||
* The larger resources we put on archive.pcjs.org should also be available locally...
|
||||
*/
|
||||
sURL = sURL.replace("http://archive.pcjs.org", "");
|
||||
sURL = sURL.replace(/^http:\/\/archive.pcjs.org(\/.*)\/([^\/]*)$/, "$1/archive/$2");
|
||||
}
|
||||
|
||||
if (NODE) {
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue