The Virtual Challenger 1P
Copyright 1998,1999 by Jeff Parsons (DoubleBit Software)


Description
===========
This program simulates an (almost) fully functional Challenger 1P,
a personal microcomputer manufactured by Ohio Scientific, beginning
sometime in 1978.

The Challenger 1P contained a 6502 CPU, 4K of RAM (expandable to 8K),
an 8K BASIC-in-ROM, a 2K system ROM, a 53-key software-polled keyboard,
input/output cassette ports, and an NTSC video output port.

To simulate the Challenger 1P, this program (C1P.EXE) contains a complete
6502 emulator (except for the limitations noted below), along with logic
to map PC keys to C1P keyboard state changes, a 256-character font that
matches the C1P's character generator, a 32x32 video display, and other
assorted bits of hardware simulation logic.

More detailed information will be provided at our Challenger 1P web site,
at http://www.doublebit.com/challenger1p.


System Requirements
===================
A PC running Microsoft Windows 95 or Windows NT 4.0 (or newer versions).


Virtual Challenger 1P Hardware
==============================
40K of RAM
8K BASIC-in-ROM
2K system ROM
53-key software-polled keyboard
2K character generator with 1K of video memory
Cassette input port (no output support yet)


Program Operation
=================
All you have to do is run C1P.EXE and type "go" at the [C1P] prompt.
The Challenger's ROMs are built in and automatically loaded.  No other
files are required, but alternate and/or additional ROMs can be loaded
as well.  There are a variety of commands available for displaying
and managing the C1P's memory, registers, cassette port, etc.  Type "?"
to obtain a list of those commands.


Challenger 1P Operation
=======================
If you've never operated a Challenger 1P, or related systems such as the
"Superboard II" or the "Compukit UK101", then you'll probably be a bit
lost.  The C1P initially displays a "D/C/W/M ?" prompt, at which point you
can press C to start BASIC with memory reinitialized, or W to start BASIC
with memory preserved, or M to start the C1P's "machine language monitor".

Press C, then press ENTER a couple times, and now you're ready to start
using BASIC.  You can even load a BASIC program from a file on your PC
into the C1P using the BASIC "LOAD" command, provided you first associate
the file with the C1P's virtual cassette port using the "cassette" command;
type "cassette/?" at the [C1P] prompt for additional help.  One important
note about the C1P's "LOAD" command though:  it's designed to ignore all
keyboard activity except the SPACEBAR while the cassette operation is in
progress, so wait until the load operation is complete, and then press
the SPACEBAR to regain control.

Note that the gaps between the edges of the C1P Video Display and the
text inside the window are normal.  The C1P system designers compensated
for television overscanning by simply restricting their character output
to approximately 25 rows and columns, and the "TERMINAL WIDTH" prompt
displayed at start-up allows you to restrict columns even further.  Since
C1P.EXE is able to display all 32 rows and columns, the gaps are more
noticeable.  You can change the vertical alignment, however, using the
"-vbias" option on the C1P command-line (try -vbias:5).  Run "C1P -?"
for additional information on command-line options.


Limitations
===========
The 6502 emulator in version 1.01a does not yet support BCD arithmetic.
Fortunately, none of the code in the BASIC and system ROMs appears to use
BCD arithmetic, so this limitation shouldn't affect normal operation.
BCD support will be added to the next release (1.02).

Similarly, any undocumented 6502 opcodes are not supported.  I wrote the
emulator from scratch, using only my semi-trusty "Programming the 6502"
manual by Rodney Zaks (copyright 1978), and my original Challenger 1P,
which fortunately is still in good working order, so if 6502 CPUs (circa
1978) had any undocumented opcodes or side-effects, C1P.EXE doesn't know
about them.

The above caveats aside however, there are currently no known bugs in the
6502 emulator.

Cassette output isn't supported yet either, but that too will be added to
the next release.


Release History
===============
1.00    07-Dec-98   Project started
1.00d   17-Dec-98   First release to the web
1.01a   10-Jan-99   Second release to the web
1.01b   17-Jan-99   Added -vscale:2 option
1.01d	??-???-99   Misc performance improvements
