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 Or rather, introducing [PC8080](/modules/pc8080/), a new 8080-based machine emulator recently added to the
PCjs Project. 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) [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 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. (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: All PCjs machines are built from the following collections of devices:
* [IBM PC Devices](pc/) * 6502-based Devices (e.g., [Challenger 1P](c1p/))
* [Challenger 1P Devices](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, 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. 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 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 * RAM
* [ROMs](rom/) * [ROMs](rom/)
* ChipSets (e.g., 8259, 8253, 8237)
* [Keyboards](keyboard/) * [Keyboards](keyboard/)
* [Video Adapters](video/) * [Video Adapters](video/)
* Floppy Drive Controllers * 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, 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. 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 Here's an example of [IBM 5150](/devices/pc/machine/5150/mda/64kb/)
[/devices/pc/machine/5150/mda/64kb/machine.xml](/devices/pc/machine/5150/mda/64kb/machine.xml) looks like: [XML](/devices/pc/machine/5150/mda/64kb/machine.xml):
<machine id="ibm5150" class="pc" border="1" pos="center" background="#FAEBD7"> <machine id="ibm5150" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">IBM PC (Model 5150) with Monochrome Display</name> <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"/> <chipset id="chipset" model="5150" sw1="01000001" sw2="11111000"/>
</machine> </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), [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 [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). [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 layout: page
title: 8080 Test Machine title: 8080 Exerciser Test Machine
permalink: /devices/pc8080/machine/test/ permalink: /devices/pc8080/machine/exerciser/
redirect_from:
- /devices/pc8080/machine/test/
machines: machines:
- type: pc8080 - type: pc8080
id: test8080 id: test8080
debugger: true 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 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 version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pc8080/1.22.0/machine.xsl"?> <?xml-stylesheet type="text/xsl" href="/versions/pc8080/1.22.0/machine.xsl"?>
<machine id="test8080" class="pc8080" border="1" pos="center" background="#FAEBD7"> <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"/> <computer id="computer" busWidth="16"/>
<cpu id="cpu8080" model="8080" cycles="2000000"/> <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"/> <ram id="ramTest" addr="0x1300" size="0xED00"/>
<panel ref="/devices/pc8080/panel/wide.xml"/> <panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger"/> <debugger id="debugger"/>

View file

@ -1,6 +1,6 @@
--- ---
layout: page layout: page
title: Space Invaders (Under Construction) title: Space Invaders (1978)
permalink: /devices/pc8080/machine/invaders/ permalink: /devices/pc8080/machine/invaders/
machines: machines:
- type: pc8080 - type: pc8080
@ -8,7 +8,7 @@ machines:
debugger: true 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 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="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="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"/> <rom id="romE" addr="0x1800" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-E.json"/>
<ram id="ram" addr="0x2000" size="0x2000"/> <ram id="ram" addr="0x2000" size="0x0400"/>
<chipset id="chipset" model="SI1978"/>
<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"> <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> <menu>
<title>224x256 Screen (Rotated)</title> <title>224x256 Screen (Rotated)</title>
</menu> </menu>
</video> </video>
<chipset id="chipset" model="SI1978"/>
<panel ref="/devices/pc8080/panel/left.xml"/> <panel ref="/devices/pc8080/panel/left.xml"/>
<debugger id="debugger" commands="s 8086"/> <debugger id="debugger" commands="s 8086"/>
</machine> </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 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. * 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) * *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 * 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. 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/), PC8080 is an 8080-based Machine Emulation Module. The code is derived from [PCjs](/modules/pcjs/),
the IBM PC Emulation Module. 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) PC8080 is currently comprised of the following non-shared components, as listed in [package.json](../../package.json)
(see the *pc8080Files* property): (see the *pc8080Files* property):

View file

@ -9,7 +9,9 @@ IBM PC Emulation Module (PCjs)
Overview 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, 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 [chipset.js](lib/chipset.js)). Most components represent familiar PC devices, such as video cards, disk
controllers, etc. controllers, etc.