Updated PC8080 and PDPjs to support RAM images, eliminating the need for the old "writable ROM" kludge; RAM images can include their own load and exec addresses as part of the JSON file, but the RAM component can provide explicit overrides (if no load address is specified either way, the default load address is the starting RAM address)

This commit is contained in:
Jeff Parsons 2016-10-17 11:01:32 -07:00 committed by Jeff Parsons
commit 980c2ac5ab
64 changed files with 1479 additions and 1154 deletions

View file

@ -13,8 +13,8 @@ All our [8080-Based Machines](machine/) are built from a collection of devices,
* [Control Panels](panel/)
* CPU (8080)
* [Machines](machine/)
* RAM
* [ROMs](rom/)
* [RAM Images](ram/)
* [ROM Images](rom/)
* Video Adapters
Complete [machine configurations](machine/) are constructed from those devices. A machine configuration is a single XML file

View file

@ -18,7 +18,7 @@ PCjs Project.
The test machine below loads a copy of the
[8080 Exerciser](https://web.archive.org/web/20151006085348/http://www.idb.me.uk/sunhillow/8080.html)
(specifically, [8080EX1](/devices/pc8080/rom/exerciser/8080EX1.MAC)) and intercepts the exerciser's CP/M console
(specifically, [8080EX1](/devices/pc8080/ram/exerciser/8080EX1.MAC)) and intercepts the exerciser's CP/M console
calls so that you can see its progress in the Control Panel window. This is a "headless" test machine
(no keyboard or display), so that's all you get.

View file

@ -4,8 +4,7 @@
<name pos="center">8080 Exerciser Test Machine</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="romTest" addr="0x0100" size="0x1200" file="/devices/pc8080/rom/exerciser/8080EX1.json" writable="true"/>
<ram id="ramTest" addr="0x1300" size="0xED00"/>
<ram id="ram64K" addr="0x0000" size="0x10000" file="/devices/pc8080/ram/exerciser/8080EX1.json" load="0x100" exec="0x100"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger"/>
</machine>

View file

@ -4,8 +4,7 @@
<name pos="center">8080 Exerciser Preliminary Test Machine</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="romTest" addr="0x0100" size="0x0400" file="/devices/pc8080/rom/exerciser/8080PRE.json" writable="true"/>
<ram id="ramTest" addr="0x0500" size="0xFB00"/>
<ram id="ram64K" addr="0x0000" size="0x10000" file="/devices/pc8080/ram/exerciser/8080PRE.json" load="0x100" exec="0x100"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger"/>
</machine>

View file

@ -4,8 +4,7 @@
<name pos="center">8080 CPUTEST Machine</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="romTest" addr="0x0100" size="0x4B00" file="/devices/pc8080/rom/exerciser/CPUTEST.json" writable="true"/>
<ram id="ramTest" addr="0x4C00" size="0xB400"/>
<ram id="ram64K" addr="0x0000" size="0x10000" file="/devices/pc8080/ram/exerciser/CPUTEST.json" load="0x100" exec="0x100"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger"/>
</machine>

View file

@ -4,8 +4,7 @@
<name pos="center">8080 "Kelly Smith" Test Machine</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="romTest" addr="0x0100" size="0x0701" file="/devices/pc8080/rom/exerciser/TEST.json" writable="true"/>
<ram id="ramTest" addr="0x0801" size="0xF7FF"/>
<ram id="ram64K" addr="0x0000" size="0x10000" file="/devices/pc8080/ram/exerciser/TEST.json" load="0x100" exec="0x100"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger"/>
</machine>

View file

@ -4,8 +4,7 @@
<name pos="center">8080 Exerciser Test Machine</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="romTest" addr="0x0100" size="0x1200" file="/devices/pc8080/rom/exerciser/8080EX1.json" writable="true"/>
<ram id="ramTest" addr="0x1300" size="0xED00"/>
<ram id="ram64K" addr="0x0000" size="0x10000" file="/devices/pc8080/ram/exerciser/8080EX1.json" load="0x100" exec="0x100"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger"/>
</machine>

View file

@ -0,0 +1,21 @@
---
layout: page
title: 8080-Based RAM Images
permalink: /devices/pc8080/ram/
---
8080-Based RAM Images
---------------------
RAM images are added to machines by including a *<ram>* component in the machine XML configuration file
with the *file* attribute set to the filename of the image; eg:
```xml
<ram id="romH" addr="0x0000" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-H.json"/>
```
The project currently contains the following 8080-based ROMs:
* [8080 Exerciser Tests](exerciser/)
* [Space Invaders (1978)](invaders/)
* [DEC VT100 Terminal](vt100/)

View file

@ -1,7 +1,9 @@
---
layout: page
title: 8080 Exerciser Tests
permalink: /devices/pc8080/rom/exerciser/
permalink: /devices/pc8080/ram/exerciser/
redirect_from:
- /devices/pc8080/rom/exerciser/
---
8080 Exerciser Tests
@ -12,4 +14,4 @@ permalink: /devices/pc8080/rom/exerciser/
* [8080PRE](8080PRE.MAC)
Our [8080 Exerciser Test Machine](/devices/pc8080/machine/exerciser/) runs [8080EX1](8080EX1.MAC),
since it is the most comprehensive test and verifies strict compatibilty with the original Intel 8080.
since it is the most comprehensive test and verifies strict compatibility with the original Intel 8080.

View file

@ -9,10 +9,10 @@ PDP-11 Device Configurations
[PDP-11 Machines](/devices/pdp11/machine/) powered by [PDPjs](/modules/pdp11/) rely on a variety of devices and resources, including:
* [Loaders](loader/)
* [Machines](machine/)
* [Panels](panel/)
* [ROMs](rom/)
* [RAM Images](ram/)
* [ROM Images](rom/)
Our collection of sample machines includes a
[PDP-11/70 with Front Panel](/devices/pdp11/machine/1170/panel/) and [PDP-11/70 with VT100 Terminal](/devices/pdp11/machine/1170/vt100/).

View file

@ -10,3 +10,4 @@ PDP-11/20 Machine Configurations
PCjs is adding support the following PDP-11/20 configurations:
* [PDP-11/20 Test Machine](/devices/pdp11/machine/1120/test/) ([Debugger](/devices/pdp11/machine/1120/test/debugger/))
* [PDP-11/20 with 16Kb and Bootstrap Loader](/devices/pdp11/machine/1120/bootstrap/) ([Debugger](/devices/pdp11/machine/1120/bootstrap/debugger/))

View file

@ -0,0 +1,10 @@
---
layout: page
title: PDP-11/20 with 16Kb and Bootstrap Loader
permalink: /devices/pdp11/machine/1120/bootstrap/
machines:
- id: test1120
type: pdp11
---
{% include machine.html id="test1120" %}

View file

@ -0,0 +1,11 @@
---
layout: page
title: PDP-11/20 with 16Kb, Bootstrap Loader, and Debugger
permalink: /devices/pdp11/machine/1120/bootstrap/debugger/
machines:
- id: test1120
type: pdp11
debugger: true
---
{% include machine.html id="test1120" %}

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1120" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/20: 16Kb, Bootstrap Loader, Debugger</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu" model="1120" cycles="6666667"/>
<ram id="ram" addr="0x0000" size="0x4000" file="/devices/pdp11/ram/bootstrap/bootstrap.json"/>
<device id="default" type="default"/>
<device id="pc11" type="pc11"/>
<serial id="dl11" adapter="0" binding="print"/>
<panel ref="/devices/pdp11/panel/test/debugger/terminal.xml"/>
<debugger id="debugger" base="8" messages="" commands=""/>
</machine>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1120" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/20: 16Kb, Bootstrap Loader</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu" model="1120" cycles="6666667"/>
<ram id="ram" addr="0x0000" size="0x4000" file="/devices/pdp11/ram/bootstrap/bootstrap.json"/>
<device id="default" type="default"/>
<device id="pc11" type="pc11"/>
<serial id="dl11" adapter="0" binding="print"/>
<panel ref="/devices/pdp11/panel/test/terminal.xml"/>
</machine>

View file

@ -1,6 +1,6 @@
---
layout: page
title: PDP-11/20 Test Machine
title: PDP-11/20 Test Machine
permalink: /devices/pdp11/machine/1120/test/
machines:
- id: test1120

View file

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1120" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/20 Test Machine with Debugger</name>
<name pos="center">PDP-11/20 Test Machine with 56Kb and Debugger</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu" model="1120" cycles="6666667" resetAddr="0xC000"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1120" cycles="6666667"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<device id="default" type="default"/>
<device id="pc11" type="pc11"/>
<serial id="dl11" adapter="0" binding="print"/>

View file

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1120" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/20 Test Machine</name>
<name pos="center">PDP-11/20 Test Machine with 56Kb</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu" model="1120" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1120" cycles="6666667" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<device id="default" type="default"/>
<device id="pc11" type="pc11"/>
<serial id="dl11" adapter="0" binding="print"/>
<panel ref="/devices/pdp11/panel/test/terminal.xml"/>
</machine>

View file

@ -3,9 +3,8 @@
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel and Debugger</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1170" cycles="6666667"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" type="default"/>
<serial id="dl11" adapter="0" binding="print"/>

View file

@ -3,9 +3,8 @@
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" type="default"/>
<serial id="dl11" adapter="0" binding="print"/>

View file

@ -3,9 +3,8 @@
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 Test Machine with Debugger</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1170" cycles="6666667"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" type="default"/>
<serial id="dl11" adapter="0" binding="print"/>

View file

@ -3,9 +3,8 @@
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 Test Machine</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" type="default"/>
<serial id="dl11" adapter="0" binding="print"/>

View file

@ -3,9 +3,8 @@
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" type="default"/>
<serial id="dl11" adapter="0"/>

View file

@ -3,9 +3,8 @@
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" file="/devices/pdp11/rom/test/boot.json" writable="true"/>
<cpu id="cpu" model="1170" cycles="6666667" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xE000" file="/devices/pdp11/ram/bootdemo/bootdemo.json" load="0xC000" exec="0xC000"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" type="default"/>
<serial id="dl11" adapter="0"/>

View file

@ -0,0 +1,11 @@
---
layout: page
title: PDP-11 RAM Images
permalink: /devices/pdp11/ram/
---
PDP-11 RAM Images
-----------------
* [PDP-11 Boot Demo](bootdemo/)
* [PDP-11 Bootstrap Loader](bootstrap/)

View file

@ -0,0 +1,15 @@
---
layout: page
title: PDP-11 Boot Demo
permalink: /devices/pdp11/ram/bootdemo/
redirect_from:
- /devices/pdp11/rom/test/
---
PDP-11 Boot Demo
----------------
[BOOTDEMO.MAC](bootdemo.mac) is based on [BOOT.MAC](http://skn.noip.me/pdp11/boot.mac) written by [Paul Nankervis](mailto:paulnank@hotmail.com))
[BOOTDEMO.MAC](bootdemo.mac) was cross-assembled with [MACRO11](https://github.com/shattered/macro11) to produce [BOOTDEMO.LST](bootdemo.lst),
which was then processed by [FileDump](/modules/filedump/) to produce [BOOTDEMO.JSON](bootdemo.json).

View file

@ -0,0 +1,11 @@
#
# Don't have macro11? Make yourself a copy from https://github.com/shattered/macro11
#
all: bootdemo.json
bootdemo.lst: bootdemo.mac
macro11 bootdemo.mac -l bootdemo.lst
bootdemo.json: bootdemo.lst
node ../../../../modules/filedump/bin/filedump --file=bootdemo.lst --format=octal --output=bootdemo.json --overwrite

View file

@ -1,11 +1,11 @@
---
layout: page
title: PDP-11 Loaders
permalink: /devices/pdp11/loader/
title: PDP-11 Bootstrap Loader
permalink: /devices/pdp11/ram/bootstrap/
---
PDP-11 Loaders
--------------
PDP-11 Bootstrap Loader
-----------------------
The blog post "[PDP-11 Paper Tape BASIC](http://avitech.com.au/?page_id=709)" describes the *Bootstrap Loader*,
a small program used to load the *Absolute Loader*, which in turn loads the *PDP-11 BASIC Paper Tape*.

View file

@ -1,4 +1,4 @@
{"words":[
{"load":0x3FE4,"exec":0x3FE4,"words":[
0x1DC1 /*016701*/,0x0016 /*000026*/,0x15C2 /*012702*/,0x00EA /*000352*/,0x0A89 /*005211*/,0x8BC9 /*105711*/,0x80FE /*100376*/,0x9C72 /*116162*/,
0x0002 /*000002*/,0x3F00 /*037400*/,0x0AB7 /*005267*/,0xFFEE /*177756*/,0x01F5 /*000765*/,0xFF68 /*177550*/]
}
}

View file

@ -1,10 +1,10 @@
---
layout: page
title: PDP-11 ROMs
title: PDP-11 ROM Images
permalink: /devices/pdp11/rom/
---
PDP-11 ROMs
-----------
PDP-11 ROM Images
-----------------
* [Test ROM](test/) (based on [BOOT.MAC](http://skn.noip.me/pdp11/boot.mac) written by [Paul Nankervis](mailto:paulnank@hotmail.com))
Any ROM images added to the project will be stored here.

View file

@ -1,13 +0,0 @@
---
layout: page
title: PDP-11 Test ROM
permalink: /devices/pdp11/rom/test/
---
PDP-11 Test ROM
---------------
This isn't a ROM so much as a read-only image that can be loaded in RAM by the ROM component.
[BOOT.MAC](boot.mac) was cross-assembled with [MACRO11](https://github.com/shattered/macro11) to produce [BOOT.LST](boot.lst),
which was then processed by [FileDump](/modules/filedump/) to produce [BOOT.JSON](boot.json).

View file

@ -1,11 +0,0 @@
#
# Don't have macro11? Make yourself a copy from https://github.com/shattered/macro11
#
all: boot.json
boot.lst: boot.mac
macro11 boot.mac -l boot.lst
boot.json: boot.lst
node ../../../../modules/filedump/bin/filedump --file=boot.lst --format=octal --output=boot.json --overwrite