Clean up the CPU/ChipSet interface, and get the PC8080 Video component ready to actually do something
This commit is contained in:
parent
ac3dc76285
commit
8c5ab8d73b
19 changed files with 1210 additions and 993 deletions
|
|
@ -24,5 +24,64 @@ Assorted [Space Invaders Hardware Notes](#space-invaders-hardware-notes) are col
|
|||
Space Invaders Hardware Notes
|
||||
---
|
||||
|
||||
### Memory Map
|
||||
|
||||
0000-1FFF r ROM code
|
||||
2000-23FF rw RAM
|
||||
2400-3FFF rw bitmapped screen (224x256)
|
||||
|
||||
### I/O Map
|
||||
|
||||
00 r
|
||||
01 r control inputs
|
||||
bit 7
|
||||
bit 6 right
|
||||
bit 5 left
|
||||
bit 4 fire
|
||||
bit 3
|
||||
bit 2 1 player start
|
||||
bit 1 2 player start
|
||||
bit 0 coin slot
|
||||
02 r control inputs
|
||||
bit 7 0=display coin info
|
||||
bit 6 right 2
|
||||
bit 5 left 2
|
||||
bit 4 fire 2
|
||||
bit 3 bonus (1500,1000) / preset mode
|
||||
bit 2 1=tilt
|
||||
bit 0-1 initial lives (3,4,5,6) / (3,4)
|
||||
02 w shift count (0-7)
|
||||
03 r shifted value (low then high)
|
||||
03 w sound
|
||||
bit 4 bonus base
|
||||
bit 3 invader hit
|
||||
bit 2 base hit
|
||||
bit 1 base fire
|
||||
bit 0 saucer
|
||||
04 w value to shift
|
||||
05 w sound
|
||||
bit 5 flip video
|
||||
bit 4 saucer hit
|
||||
bit 3 invader movement 4
|
||||
bit 2 invader movement 3
|
||||
bit 1 invader movement 2
|
||||
bit 0 invader movement 1
|
||||
06 w watchdog timer clear
|
||||
|
||||
Note that, unlike most emulators, PC8080 (like PCjs) has a *[Bus](/modules/pc8080/lib/bus.js)* architecture,
|
||||
allowing components to "plug in" different kinds of memory or memory-mapped devices at different addresses,
|
||||
and to register specific functions for specific I/O ports.
|
||||
|
||||
For example, Space Invaders has 8Kb of ROM at addresses 0x0000 through 0x1FFF, which means that if any 8080 code
|
||||
attempts to write to those addresses, nothing should happen. Unfortunately, most emulators treat the entire address
|
||||
space as one contiguous array of bytes. Which means either that the ROM is susceptible to corruption *or* that every
|
||||
write operation must check the address to determine its validity, which hurts the performance of *all* writes.
|
||||
|
||||
In PC8080 (and PCjs), all writes are equally fast, and all ROMs are fully protected. An exception is made for the
|
||||
Debugger, which allows you to use the "e" command to modify ("patch") ROM code on the fly, but that is completely
|
||||
outside and independent of the 8080 code being emulated.
|
||||
|
||||
### Other Online References
|
||||
|
||||
See [Computer Archeology](http://www.computerarcheology.com/Arcade/SpaceInvaders/) for an excellent collection
|
||||
of materials on the original Space Invaders, including commented ROM disassemblies.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@
|
|||
<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" frameBuffer="0x2400" interruptRate="120" rotation="90" width="40%" pos="left" padding="8px">
|
||||
<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">
|
||||
<menu>
|
||||
<title>224x256 Screen (Rotated)</title>
|
||||
</menu>
|
||||
|
|
|
|||
Loading…
Reference in a new issue