Rounded out the PC8080 portion of the tree

This commit is contained in:
Jeff Parsons 2016-05-01 15:12:52 -07:00
commit e9099c6d38
22 changed files with 154 additions and 21 deletions

View file

@ -8,9 +8,9 @@ permalink: /blog/2016/04/30/
Or rather, introducing [PC8080](/modules/pc8080/), a new 8080-based machine emulator recently added to the
PCjs Project.
Our first [8080 Test Machine](/devices/pc8080/machine/test/) loads a copy of the
Our first [8080 Test Machine](/devices/pc8080/machine/exerciser/) 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/test/8080EX1.MAC)) and intercepts the exerciser's CP/M console
(specifically, [8080EX1](/devices/pc8080/rom/exerciser/8080EX1.MAC)) and intercepts the exerciser's CP/M console
calls so that you can see its progress in the Control Panel window. It's a "headless" test machine
(no keyboard or display), so that's all you get.

View file

@ -11,8 +11,9 @@ Device Configurations
All PCjs machines are built from the following collections of devices:
* [IBM PC Devices](pc/)
* [Challenger 1P Devices](c1p/)
* 6502-based Devices (e.g., [Challenger 1P](c1p/))
* [8080-based Devices](pc8080/) (e.g., [Space Invaders](pc8080/machine/invaders/))
* [8086-based Devices](pc/) (e.g., [IBM PC, including 80286 and 80386-based compatibles](pc/machine/))
These devices are user-installable components that you would typically find in a real personal computer,
such as keyboards, disk controllers with one or more disk drives, video cards, etc.

View file

@ -9,11 +9,12 @@ redirect_from:
IBM PC Device Configurations
---
[PC Machines](machine/) are built from a collection of devices, including:
[IBM PC Machines](machine/) are built from a collection of [Devices](/devices/), including:
* CPU
* CPU (e.g., 8088, 80286, 80386)
* RAM
* [ROMs](rom/)
* ChipSets (e.g., 8259, 8253, 8237)
* [Keyboards](keyboard/)
* [Video Adapters](video/)
* Floppy Drive Controllers
@ -30,8 +31,8 @@ Complete machine configurations are constructed from those devices. A Machine C
that lists all the device components to be used. A Machine XML file can choose to configure every device itself,
or it can include pre-configured device XML files, such as those provided above or elsewhere.
For example, here's what the machine located at
[/devices/pc/machine/5150/mda/64kb/machine.xml](/devices/pc/machine/5150/mda/64kb/machine.xml) looks like:
Here's an example of [IBM 5150](/devices/pc/machine/5150/mda/64kb/)
[XML](/devices/pc/machine/5150/mda/64kb/machine.xml):
<machine id="ibm5150" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">IBM PC (Model 5150) with Monochrome Display</name>
@ -49,7 +50,7 @@ For example, here's what the machine located at
<chipset id="chipset" model="5150" sw1="01000001" sw2="11111000"/>
</machine>
All the devices are fully configured within the Machine XML file, except for the
In this example, all the devices are fully configured within the machine XML file, except for the
[Video](/docs/pcjs/video/) [XML](/devices/pc/video/ibm/mda/ibm-mda.xml),
[Floppy Disk Controller (FDC)](/docs/pcjs/fdc/) [XML](/disks/pc/compiled/samples.xml), and
[Keyboard](/docs/pcjs/keyboard/) [XML](/devices/pc/keyboard/us83-buttons-arrows.xml).

47
devices/pc8080/README.md Normal file
View file

@ -0,0 +1,47 @@
---
layout: page
title: 8080-Based Device Configurations
permalink: /devices/pc8080/
---
8080-Based Device Configurations
---
[8080-Based Machines](machine/) are built from a collection of devices, including:
* CPU (8080)
* RAM
* [ROMs](rom/)
* ChipSets
* Video Adapters
* [Control Panels](panel/)
Complete machine configurations are constructed from those devices. A machine configuration is a single XML file
that lists all the device components to be used. A machine XML file can choose to configure every device itself,
or it can include pre-configured device XML files, such as those provided above or elsewhere.
For example, here's what the [Space Invaders (1978)](/devices/pc8080/machine/invaders/)
[XML](/devices/pc8080/machine/invaders/machine.xml) looks like:
<?xml-stylesheet type="text/xsl" href="/versions/pc8080/1.22.0/machine.xsl"?>
<machine id="invaders" class="pc8080" border="1" pos="center" background="#FAEBD7">
<name pos="center">Space Invaders</name>
<computer id="computer" busWidth="16"/>
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="romH" addr="0x0000" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-H.json"/>
<rom id="romG" addr="0x0800" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-G.json"/>
<rom id="romF" addr="0x1000" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-F.json"/>
<rom id="romE" addr="0x1800" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-E.json"/>
<ram id="ram" addr="0x2000" size="0x2000"/>
<video id="video" screenWidth="224" screenHeight="256" bufferAddr="0x2400" bufferCols="256" bufferRows="224" bufferBits="1" interruptRate="120" rotation="90" width="40%" pos="left" padding="8px">
<menu>
<title>224x256 Screen (Rotated)</title>
</menu>
</video>
<chipset id="chipset" model="SI1978"/>
<panel ref="/devices/pc8080/panel/left.xml"/>
<debugger id="debugger" commands="s 8086"/>
</machine>
In this example, all the devices are fully configured within the machine XML file, except for the
[Control Panel](panel/) [XML](panel/left.xml).

View file

@ -0,0 +1,13 @@
---
layout: page
title: 8080-Based Machine Configurations
permalink: /devices/pc8080/machine/
---
8080-Based Machine Configurations
---
The following 8080-based machines are currently available:
* [Space Invaders (1978)](invaders/)
* [8080 Exerciser Test Machine](exerciser/)

View file

@ -1,14 +1,16 @@
---
layout: page
title: 8080 Test Machine
permalink: /devices/pc8080/machine/test/
title: 8080 Exerciser Test Machine
permalink: /devices/pc8080/machine/exerciser/
redirect_from:
- /devices/pc8080/machine/test/
machines:
- type: pc8080
id: test8080
debugger: true
---
8080 Test Machine
8080 Exerciser Test Machine
---
This is a test of [PC8080](/modules/pc8080/), a new 8080-based machine emulator being added to the

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pc8080/1.22.0/machine.xsl"?>
<machine id="test8080" class="pc8080" border="1" pos="center" background="#FAEBD7">
<name pos="center">8080 Test Machine</name>
<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/test/8080EX1.json" writable="true"/>
<rom id="romTest" addr="0x0100" size="0x1200" file="/devices/pc8080/rom/exerciser/8080EX1.json" writable="true"/>
<ram id="ramTest" addr="0x1300" size="0xED00"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger"/>

View file

@ -1,6 +1,6 @@
---
layout: page
title: Space Invaders (Under Construction)
title: Space Invaders (1978)
permalink: /devices/pc8080/machine/invaders/
machines:
- type: pc8080
@ -8,7 +8,7 @@ machines:
debugger: true
---
Space Invaders (Under Construction)
Space Invaders (1978)
---
This is a test of [PC8080](/modules/pc8080/), a new 8080-based machine emulator recently added to the

View file

@ -8,13 +8,13 @@
<rom id="romG" addr="0x0800" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-G.json"/>
<rom id="romF" addr="0x1000" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-F.json"/>
<rom id="romE" addr="0x1800" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-E.json"/>
<ram id="ram" addr="0x2000" size="0x2000"/>
<chipset id="chipset" model="SI1978"/>
<ram id="ram" addr="0x2000" size="0x0400"/>
<video id="video" screenWidth="224" screenHeight="256" bufferAddr="0x2400" bufferCols="256" bufferRows="224" bufferBits="1" interruptRate="120" rotation="90" width="40%" pos="left" padding="8px">
<menu>
<title>224x256 Screen (Rotated)</title>
</menu>
</video>
<chipset id="chipset" model="SI1978"/>
<panel ref="/devices/pc8080/panel/left.xml"/>
<debugger id="debugger" commands="s 8086"/>
</machine>

View file

@ -0,0 +1,16 @@
---
layout: page
title: 8080-Based Control Panels
permalink: /devices/pc8080/panel/
---
8080-Based Control Panels
---
[Control Panels](/docs/pcjs/panel/) are XML files that define layouts for Debugger-related controls.
The following 8080-based control panel configuration files are currently available:
- [left.xml](left.xml) (created for Space Invaders)
- [wide.xml](wide.xml) (a wider version of the above)

View file

@ -0,0 +1,18 @@
---
layout: page
title: 8080-Based ROMs
permalink: /devices/pc8080/rom/
---
8080-Based ROMs
---
ROMs are added to machines by including one *[ROM](/docs/pcjs/rom/)* component in the machine XML configuration file
for each ROM in the machine; eg:
<rom id="romH" addr="0x0000" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-H.json"/>
The project currently contains the following 8080-based ROMs:
* [Space Invaders (1978)](invaders/)
* [8080 Exerciser Tests](exerciser/)

View file

@ -0,0 +1,15 @@
---
layout: page
title: 8080 Exerciser Tests
permalink: /devices/pc8080/rom/exerciser/
---
8080 Exerciser Tests
---
* [8080EX1](8080EX1.MAC)
* [8080EXER](8080EXER.MAC)
* [8080PRE](8080PRE.MAC)
Our [8080 Exerciser Test Machine](/devices/pc8080/machine/exerciser/) runs the [8080EX1](8080EX1.MAC),
since it is the most comprehensive test, and was designed specifically for the Intel 8080.

View file

@ -0,0 +1,15 @@
---
layout: page
title: Space Invaders (1978) ROMs
permalink: /devices/pc8080/rom/invaders/
---
Space Invaders (1978) ROMs
---
The original [Space Invaders (1978)](/devices/pc8080/machine/invaders/) contains 4 2Kb ROMs:
* [INVADERS-H](INVADERS-H.json) (loaded at 0x0000)
* [INVADERS-G](INVADERS-G.json) (loaded at 0x0800)
* [INVADERS-F](INVADERS-F.json) (loaded at 0x1000)
* [INVADERS-E](INVADERS-E.json) (loaded at 0x1800)

View file

@ -17,8 +17,11 @@ Defines all the properties required for the CPU component to initialize, along w
Attributes
---
* *model* (optional; default is 8088)
* *model* (optional; default is 8088; supported values include: 8086, 8088, 80186, 80286, and 80386)
* Defines the CPU model, adjusting the CPU's capabilities accordingly.
* *stepping* (optional; if specified, it must be a 2-character string, such as "A0" or "B1")
* Defines the CPU stepping, adjusting the CPU's capabilities accordingly.
* Currently supported only on the 80386 model.
* *cycles* (optional; default is 4772727)
* Defines the simulated CPU speed in terms of cycles. The default is 4.77Mhz. The exact speed will vary, according
to the whims of JavaScript, your web browser, and your machine's overall workload.

View file

@ -12,7 +12,7 @@ Overview
PC8080 is an 8080-based Machine Emulation Module. The code is derived from [PCjs](/modules/pcjs/),
the IBM PC Emulation Module.
It is still a work-in-progress. The only demo currently available is this [8080 Test Machine](/devices/pc8080/machine/test/).
It is still a work-in-progress. See the list of available [PC8080 Machines](/devices/pc8080/machine/).
PC8080 is currently comprised of the following non-shared components, as listed in [package.json](../../package.json)
(see the *pc8080Files* property):

View file

@ -9,7 +9,9 @@ IBM PC Emulation Module (PCjs)
Overview
---
The PCjs IBM PC Emulation Module divides PC functionality into variety of logical and visual components.
The PCjs IBM PC Emulation Module is the engine underlying all our [IBM PC Machines](/devices/pc/machine/).
This module divides PC functionality into variety of logical and visual components.
In general, each JavaScript file is responsible for a single component or set of related components (eg,
[chipset.js](lib/chipset.js)). Most components represent familiar PC devices, such as video cards, disk
controllers, etc.