v0.91 sources and binaries from website

This commit is contained in:
Mark Aufflick 2011-10-18 14:51:02 +11:00
parent cf770f0a3d
commit f913d80b03
54 changed files with 4590 additions and 1833 deletions

View File

@ -1,4 +1,61 @@
Changes in KEGS v0.91 since v0.90 (12/06/04)
- Fixed serious bug in engine_c.c that could cause Finder file copies to
silently corrupt data.
- Virtual Modem support--modem appears on serial port, allows outgoing
and incoming connections.
- Sockets (and Virtual Modem) supported on Windows.
- Fixed various reset bugs (where pressing Ctrl-Reset would cause infinite
beeps, etc).
- Allow user to select ROM file from config panel if not found.
- Improved Mac OS X interface: Full Screen support and error dialogs.
- Better floppy support by always having 5.25" read nearest track regardless
of head position (supports Last Gladiator game bad crack by
emulating other emulators).
Changes in KEGS v0.90 since v0.89 (10/19/04)
- Make Keypad Joystick the default joystick emulation
- Fix timezone calculation on Mac OS X for central time zone.
- Fix handling of long paths in config panel, reported by David Scruffham.
- Always call joystick_init at startup.
- Fix F2 keymappings for X Windows, to fix some issue reported by
David Wilson.
- Fixed some documentation issues reported by David Wilson.
- Fixed a bug in joystick_driver.c reported by Doug Mitton.
- Add README.a2.compatibility to discuss known issues with programs.
Changes in KEGS v0.89 since v0.88 (10/17/04)
- Make old mouse button presses disappear after .5 seconds.
- Add Keypad Joystick, along with configuration menu choices to enable it.
The keypad numbers move the joystick to the indicated direction,
with chording allowing in-between values.
The keypad '0' is button 0 and keypad '1' is button 1.
- Also add jostick scaling factor and trim adjustment.
- Allow user to increase keyboard and mouse scan rate to 240Hz from 60Hz
for some better game response.
Changes in KEGS v0.88 since v0.87 (10/13/04)
- Add configuration setting to debug halt on code red halts. Also add
configuration mode (on by default) to shadow text page 2 on ROM 01,
which is an enhancement over a real IIgs.
- Handle mac binary header on images. Handle compressed .po images.
- Fix refresh rate to 59.923Hz from 60Hz so that exactly 17030 1MHz cycles
pass in one screen refresh period.
- Enhance trace-to-file function to also write out data values stored using
the Data_log info.
- Debugger adds memory move and memory compare functions.
- Support "floating bus" where reading certain $C0xx locations returns the
current video data. This allows Bob Bishop's split-screen demos to
run and enables Drol's between-level animations to work fully.
Changes in KEGS v0.87 since v0.86 (10/05/04)
- Remove all of Jonathan Kalbfeld's and Gilles Tschopp's contributions.
All of Solaris audio is removed.
- Fix config screen not drawing correctly if emulator was currently displaying
video page 2.
- Fix STP instruction.
- Fix mouse-joystick which was halving the Y dimension.
Changes in KEGS v0.86 since v0.85 (03/23/04)
- Add patch for Solaris sound by Jonathan Kalbfeld.
- Fix so that F4 enters config panel even while running Prosel-16

280
COPYING.txt Normal file
View File

@ -0,0 +1,280 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS

View File

@ -4,8 +4,46 @@
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>2mg</string>
<string>2MG</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>2mg.icns</string>
<key>CFBundleTypeName</key>
<string>Apple II 2MG Disk Image</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>a2mg</string>
</array>
<key>CFBundleTypeRole</key>
<string>None</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>kegs</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>525.icns</string>
<key>CFBundleTypeName</key>
<string>KEGS Configuration File</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>kegs</string>
</array>
<key>CFBundleTypeRole</key>
<string>None</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>KEGSMAC</string>
<key>CFBundleName</key>
<string>KEGSMAC</string>
<key>CFBundleIconFile</key>
<string>kegsicon.icns</string>
<key>CFBundleInfoDictionaryVersion</key>
@ -13,10 +51,14 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<string>KEGS</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>CSResourcesFileMapped</key>
<true/>
<string>0.91</string>
<key>CFBundleShortVersionString</key>
<string>KEGSMAC version 0.91</string>
<key>CFBundleGetInfoString</key>
<string>KEGSMAC v0.91, Copyright 2004 Kent Dickey, http://kegs.sourceforge.net</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright 2004 Kent Dickey</string>
</dict>
</plist>

Binary file not shown.

Binary file not shown.

Binary file not shown.

123
README.a2.compatibility.txt Normal file
View File

@ -0,0 +1,123 @@
# $Id: README.a2.compatibility,v 1.2 2004/10/18 18:17:21 kentd Exp $
Flobynoid: Must disable Fast Disk Emul (hit F7 to toggle it off) since
game's loader relies on the sector order on the disk (reads 8
sectors from the start without checking headers, assumes every other
physical sector is skipped due to decode delays).
Bard's Tale II GS: Doesn't recognize any save disk as a ProDOS disk.
It's detecting a "ProDOS" disk by checking for a string on block
0 at offset 0x15e. GSOS on system 6 has moved the string to 0x162,
so disks inited under GSOS will be detected as "Not a PRODOS disk".
Just make a copy of the Bard's Tale disk image to another file and
then mount that new image and remove all the files using the Finder.
Then rename the volume and you have a working save disk.
Robotron 2084:
Robot Battle:
These cracks use a "Fastloader" which is buggy.
It tries to JMP $F3D4 and expects to hit an RTS soon.
But on a IIgs it will access some illegal memory causing a code
yellow. You can just ignore the code yellow.
Beyond Castle Wolfenstein: Make sure your disk is writeable (not compressed!)
Breakout: Has trouble loading from the cracked copy.
From the BASIC prompt, do: "CALL -151" then "C083 N C083" then
"BLOAD INTBASIC" then run breakout. Then it runs fine.
Burgertime: This is a bad crack. Loader starts the game by writing
the game entry point into $0036/$0037, and then executing a BRK
instruction. The BRK handler on an old Apple II will try to write
out a message by calling through $0036/$0037, and this will start
the game. But on a IIgs, the ROM sets the $0036/$0037 vectors
back to the default, and so we crash into the monitor instead.
Here's a memory fix and a disk-image fix: From the crack screen,
press Shift-F6 (or middle mouse button) and in the KEGS debugger
window enter: "1d0a:ea 6c 36 0" and then "g". You can make
this fix to the disk image using a sector editor and change
Track $1E sector $09 offset $0A from "60 78 A9 03" to "EA 6C 36 00"
and write it back.
Caverns of Callisto: Requires old C600 ROM in slot 6 (Slot 6==Your Card).
Championship Loderunner: Requires disk to be writeable or else it starts
the level and then jumps immediately back to the title page.
Jeopardy: Disk must be writeable or else it displays "DISK ERROR" and
then crashes into the monitor.
Drol: Needs slot 6 set to "Your Card" from the IIgs control panel
(Ctrl-Cmd-ESC, then choose "Slots").
I found Drol hard, so here are some cheats. First, the standard cheat
for Drol is to have infinite lives, this cheat is to edit the disk
image:
Track $0B, Sector $0A, byte $22 to EA EA
Track $11, Sector $0A, byte $10 to EA EA
Track $17, Sector $09, byte $B2 to EA EA
I didn't create those cheats, I got it from textfiles.com.
My cheats are for the monsters to never kill you--just run right
through them.
While playing Drol, press Shift-F6 (or middle mouse button) to
enter the KEGS debugger, and then:
0/f28:18 18 # Monsters' missiles won't kill you
0/e05:90 0c # Monsters won't kill you
Continue emulation by type "g" and then enter.
Other things, like the bird, axes, swords still kill you.
To easily solve the third screen, move your man to the far right
side on the top level, so that you are directly above the woman
on the bottom row. Fly into the air "A" and then get to the KEGS
debugger, and type:
0/c:4
and then continue with "g". Now press "Z" and you will go all
the way down and land on the woman and end the level. It's
useful to have made the two above patches so that touching monsters
won't kill you.
Two more patches that only apply to level 3, and so most be made
in memory each time you enter level 3:
6cf3:18 18 18 # Axes won't kill you
6f70:38 38 # Swords/arrows won't kill you
The bird and the guy you can't kill will still kill you. These
cheats were enough to make the game easily playable.
In the game, your death is indicated by setting location $001E to
$FF. Setting breakpoints there can let you find other cheats.
Moon Patrol: Crashes into the monitor after completing checkpoint E.
To fix the Moon Patrol/Dung beetles version, from within KEGS:
BLOAD MOON PATROL
CALL -151
1E15:EA
919G
and it will work fine.
If you have the booting version that just has Moon Patrol on it,
then from any point after the crack screen is shown, enter the
KEGS debugger (Shift-F6 or middle moust button) and then enter:
0/1e15:ea
g
and then it will play fine.
The bug is that the code executes an instruction with opcode $02,
which is a NOP on 6502, but is a COP instruction to 65816. The
COP instruction acts like BRK and will crash. The patch just
makes it a real NOP.
Microbe: Crashes upon booting.
Code at $599E tries to pull a return address off of a location
beneath the stack pointer and jump to it, but it doesn't add 1
correctly so it jumps to $5917 when it meant to jump to $5918.
On a IIgs, this causes a BRK to be executed and the game to crash.
This can be patched in memory in two places:
0/599e:ba ca 9a 7d 00 01 48 98 7d 01 01 9d 01 01 60
0/6f1d:ba ca 9a 7d 00 01 48 98 7d 01 01 9d 01 01 60
The original byte sequence for both locations is:
00/599e: ba TSX
00/599f: 7d ff 00 ADC $00ff,X
00/59a2: 85 94 STA $94
00/59a4: 98 TYA
00/59a5: 7d 00 01 ADC $0100,X
00/59a8: 85 95 STA $95
00/59aa: 6c 94 00 JMP ($0094)
You can also patch the code onto the disk image. I found
the $599E version on Track $05, Sector $06, Byte $9E.
I found the $6F1D version on the image at Track $0C, Sector $00,
at byte $1D.

View File

@ -1,5 +1,4 @@
NOTE: The build process changed as of KEGS v0.70!
# $Id: README.compile,v 1.20 2004/10/18 04:05:14 kentd Exp $
General build instructions:
--------------------------
@ -39,8 +38,11 @@ Use the vars_x86linux file with:
rm vars; ln -s vars_x86linux vars
make
KEGS assumes perl is in your path. If it is somewhere else, you need to edit
the "PERL = perl" line in the vars file and make it point to the correct place.
The resulting executable is called "xkegs".
The build scripts assume perl is in your path. If it is somewhere else,
you need to edit the "PERL = perl" line in the vars file and make it point
to the correct place.
For audio, KEGS needs access to /dev/dsp. If the permissions do not allow
KEGS to access /dev/dsp, it can fail with a cryptic error message. As root,
@ -55,11 +57,12 @@ Use the vars_linuxppc vars file by:
rm vars; ln -s vars_linuxppc vars
make
KEGS assumes perl is in your path. If it is somewhere else, you need to edit
the "PERL = perl" line in the vars file and make it point to the correct place.
The build scripts assume perl is in your path. If it is somewhere else,
you need to edit the "PERL = perl" line in the vars file and make it point
to the correct place.
Audio is currently disabled by default, but you can try turning it on
by runnning "kegs -audio 1". It sounds horrible to me, but sounds do
by runnning "xkegs -audio 1". It sounds horrible to me, but sounds do
come out.
Solaris SPARC build instructions:
@ -70,11 +73,12 @@ Use the vars_solaris vars file by:
rm vars; ln -s vars_solaris vars
make
KEGS assumes perl is in your path. If it is somewhere else, you need to edit
the "PERL = perl" line in the vars file and make it point to the correct place.
The build scripts assume perl is in your path. If it is somewhere else,
you need to edit the "PERL = perl" line in the vars file and make it point
to the correct place.
Audio is currently disabled by default, but you can try turning it on
by runnning "kegs -audio 1".
by runnning "xkegs -audio 1".
Solaris x86 build instructions:
--------------------------------
@ -84,11 +88,12 @@ Use the vars_x86solaris vars file by:
rm vars; ln -s vars_x86solaris vars
make
KEGS assumes perl is in your path. If it is somewhere else, you need to edit
the "PERL = perl" line in the vars file and make it point to the correct place.
The build scripts assume perl is in your path. If it is somewhere else,
you need to edit the "PERL = perl" line in the vars file and make it point
to the correct place.
Audio is currently disabled by default, but you can try turning it on
by runnning "kegs -audio 1".
by runnning "xkegs -audio 1".
HP-UX assembly-emulation instructions:
-------------------------------------
@ -100,14 +105,14 @@ rm vars; ln -s vars_hp vars
Edit the Makefile, and remove "engine_c.o" from the "OBJECTS1=" line at
the top. Then just type "make".
This version is quite out of date and most likely does not compile any more.
Other platform "C" build instructions:
-------------------------------------
I don't know--you tell me. If you are porting to an X-windows and
Unix-based machine, it should be easy. Start with vars_x86linux if
you are a little-endian machine, or vars_linuxppc if you are big
endian. Don't define -DKEGS_LITTLE_ENDIAN unless your processor is
little-endian (x86, Alpha). Mac, Sun, MIPS, HP, Motorola, and IBM are
big-endian.
If you are porting to an X-windows and Unix-based machine, it should be
easy. Start with vars_x86linux if you are a little-endian machine, or
vars_linuxppc if you are big endian. Don't define -DKEGS_LITTLE_ENDIAN
unless your processor is little-endian (x86, Alpha). Mac, Sun, MIPS,
HP, Motorola, and IBM are big-endian.

View File

@ -1,18 +1,19 @@
KEGS: Kent's Emulated GS version 0.86
KEGS: Kent's Emulated GS version 0.91
http://kegs.sourceforge.net/
What is this?
-------------
KEGS is an Apple IIgs emulator for Mac OS X, Linux, and Win32.
The Apple IIgs was the last released computer in the Apple II line.
It first was sold in 1986.
The Apple IIgs was the most powerful computer in the Apple II line.
It first was sold in 1986. An Apple IIgs has the capability to run almost all
Apple II, Apple IIe, and Apple IIc programs.
KEGS supports all Apple IIgs graphics modes (which include all Apple //e
modes), plus plays all Apple IIgs sounds accurately. It supports
limited serial port emulation through sockets, or can use real serial ports
on Windows and Mac OS X.
serial port emulation through TCP/IP connections, or can use real
serial ports on Windows and Mac OS X.
The ROMs and GS/OS (the Apple IIgs operating system) are not included
with KEGS since they are not freely distributable. KEGS is a little
@ -20,49 +21,53 @@ user-hostile now, so if something doesn't work, let me know what went
wrong, and I'll try to help you out. See my email address at the end of
this file.
I'd like to thank Chea Chee Keong who created KEGS32, the first Windows
port of KEGS. That version, which has a better Windows-interface but which
is based on older core code, is at http://www.geocities.com/akilgard/kegs2.
KEGS features:
-------------
Fast 65816 emulation:
About 80MHz on a P4 1.7GHz or a G4 1GHz.
About 80MHz on a Pentium 4 1.7GHz or a Mac G4 1GHz.
Emulates low-level 5.25" and 3.5" drive accesses (even nibble-copiers work!).
Emulates classic Apple II sound and 32-voice Ensoniq sound.
All sound is played in 16-bit stereo at 48KHz (44100 on a Mac).
Emulates all Apple IIgs graphics modes, including border effects.
Can handle mixed-displays (superhires at the top, lores at the bottom).
Always does 60 full screen video updates per second.
Even supports 3200-color pictures.
Emulates all Apple IIgs and Apple II graphics modes, including border effects.
Can handle display changes at any time (superhires at the top, lores
at the bottom). Always does 60 full screen video updates per second.
Supports 3200-color pictures.
Mouse and joystick support.
Emulates all Apple IIgs memory "tricks" for full compatibility.
Low-level ADB keyboard and mouse emulation enables Wolfenstein 3D to run.
Clock chip emulation makes the host time available to the Apple IIgs.
Emulated battery RAM remembers control panel settings.
Limited SCC (serial port) emulation to enable PR#1/2 IN#1/2 and other
serial programs to work.
Limited SCC (serial port) emulation to enable PR#1/2 IN#1/2 and Virtual
Modem enables standard Apple terminal programs to telnet to any
internet address (or receive connections from another telnet).
KEGS by default emulates a 8MB Apple IIgs, but you can change this with
the "-mem" command line option.
KEGS by default emulates a 8MB Apple IIgs, but you can change this from
the Configuration Panel.
KEGS is so accurate, even the built-in ROM selftests pass (you must be in
2.8MHz speed mode to pass the self-tests).
2.8MHz speed mode to pass the self-tests and you must set the Configuration
Panel entry "Enable Text Page 2 shadow" to "Disabled on ROM 01" for ROM 01).
Release info:
------------
Included files:
CHANGES - Description of changes since last release
README.kegs - you're here
README.compile - Describes how to build KEGS
README.linux.rpm - Describes how to install KEGS's RPM for Linux
README.win32 - Win32 special directions
README.mac - Mac OS X special directions
INTERNALS.overview - description of how KEGS code works
INTERNALS.xdriver - Describes the xdriver.c routines for porting
INTERNALS.iwm - Describes the internal 3.5" and 5.25" disk
README.kegs.txt - you're here
README.compile.txt - Describes how to build KEGS
README.linux.rpm.txt - Describes how to install KEGS's RPM for Linux
README.win32.txt - Win32 special directions
README.mac.txt - Mac OS X special directions
README.a2.compatibility.txt - List of programs which need tweaking
src/INTERNALS.overview - description of how KEGS code works
src/INTERNALS.xdriver - Describes the xdriver.c routines for porting
src/INTERNALS.iwm - Describes the internal 3.5" and 5.25" disk
handling routines
kegs - the executable, for HP-UX 10.20+
kegs.spec - The Linux spec file for making an RPM
kegs_conf - disk image configuration info
KEGSMAC - the Mac OS X executable
kegswin.exe - the Windows executable
config.kegs - disk image configuration info
to_pro - Hard-to-use ProDOS volume creator
partls - Lists partitions on Apple-partitioned hard
drives or CD-ROMs
@ -71,9 +76,10 @@ Included files:
You need to provide:
1) Patience.
2) a ROM file called "ROM", "ROM.01" or "ROM.03" in the KEGS directory.
It can be either from a ROM 01 (131072 bytes long) or from a
ROM 03 machine (262144 bytes long.)
2) a ROM file called "ROM", "ROM.01" or "ROM.03" in the KEGS directory
(or in your home directory). It can be either from a ROM 01
(131072 bytes long) or from a ROM 03 machine (262144 bytes
long.)
3) A disk image to boot. This can be either "raw" format or 2IMG.
See discussion below. GS/OS would be best.
@ -87,10 +93,11 @@ or fc/0000 - ff/ffff from a ROM 03 GS, and put that in a file called
Running KEGS:
------------
The distribution comes in 3 parts: a source-only distribution (kegs.xxx.tar.gz),
along with two binary distributions for Mac and Windows.
The distribution comes with the full source code for all platforms in
the src/ directory, the Windows executable as kegswin.exe, and the Mac OS X
executable as KEGSMAC.
See the README.compile file for more info about compiling for Linux.
See the README.compile.txt file for more info about compiling for Linux.
On all platforms except the Mac, you must start KEGS from a terminal
window. KEGS will open a new window and use the window you started it from
@ -98,50 +105,68 @@ as a "debug" window.
On a MAC, you need to place the "config.kegs" file someplace where KEGS
can find it. The simplest place is in your home directory, so copy it there
with the Finder (or using the Terminal).
with the Finder (or using the Terminal). You can also make the directory
Library/KEGS from your home directory, and then place config.kegs there
along with the ROM file. You do not need a starting config.kegs file
on a Mac--KEGS will offer to make it for you if it cannot find one.
Start kegs by Double-clicking the KEGSMAC icon on a MAC, or by running
the executable (kegswin on Windows, and kegs on Linux). KEGSMAC can
be run by the Terminal window as well (which enables access to more debug
information) by typing: "./KEGSMAC.app/Contents/MacOS/KEGSMAC".
be run by the Terminal window on a Mac as well (which enables access to
more debug information) by typing: "./KEGSMAC.app/Contents/MacOS/KEGSMAC".
Assuming all goes well, KEGS will then boot up but probably not find any
disk images. See below for how to tell KEGS what disk images to use.
Tip: Hitting "F8" locks the mouse in the window (and hides the host cursor)
until you hit "F8" again.
Disk Images:
Configuration Panel:
-------------------
You enter the Configuration panel by pressing F4 at any time. You tell
KEGS what disk images to use through the Configuration panel. (If KEGS
couldn't find a ROM file, you will be forced into the Configuration
Panel mode until you select a valid ROM file).
To select a ROM file, select "ROM File Selection" and then select your
ROM file. If you were not forced into the panel at startup, the KEGS
found one and you can skip this step.
Disk Images
-----------
You tell KEGS what disk images to use through the Configuration panel.
The primary use of the Configuration Panel is to select disk images. To
change disk images being used, select "Disk Configuration". Each slot
and drive that can be loaded with an image is listed. "s5d1" means slot
5, drive 1. Slot 5 devices are 3.5" 800K disks, and slot 6 devices are
5.25" 140K disks. Slot 7 devices are virtual hard drives, and can be
any size at all (although ProDOS-formatted images should be less than
32MB).
You enter the Configuration panel by pressing F4 at any time. Then select,
"Disk Configuration". Each slot and drive that can be loaded with an image
is listed. "s5d1" means slot 5, drive 1. Slot 5 devices are 3.5" 800K disks,
and slot 6 devices are 5.25" 140K disks. Slot 7 devices are virtual hard
drives, and can be any size at all (although ProDOS-formatted drives
should be less than 32MB).
Just use the arrow keys to navigate to the device entry to change,
and then select it by pressing Return. A scrollable file selection
interface is presented, letting you located your image files. To
save navigation, you can press Tab to toggle between entering a path
manually, and using the selector. Press Return on ".." entries to go up
a directory level. When you find the image you want, just press Return.
Just use the arrow keys to navigate to the device entry to change, and
then select it by pressing Return. A scrollable file selection
interface is presented, letting you locate your image files. To quickly
jump to a particular path, you can press Tab to toggle between entering
a path manually, and using the file selector. Press Return on ".."
entries to go up a directory level. When you find the image you want,
just press Return.
If the image has partitions that KEGS supports, another selection
dialog will have you select which partition to mount. You will probably
only have partitions on direct devices you mount. For instance, on a
Mac, /dev/disk1 is usually the CDROM drive.
only have partitions on direct devices you mount (or on a Mac, of .dmg
images of CDs). For instance, on a Mac, /dev/disk1 can sometimes be the
CDROM drive.
KEGS can handle "raw", .dsk, .po, 2IMG, 5.25" ".nib" images, some Mac
KEGS can handle "raw", .dsk, .po, 2IMG, 5.25" ".nib" images, most Mac
Diskcopy images and partitioned images. The .dsk and .po formats you often
find on the web are really "raw" formats, and so they work fine. KEGS uses
the host file permissions to encode the read/write status of the image.
KEGS can open any image file compressed with gzip (with the extension ".gz")
automatically as a read-only disk image.
An image is the representation of an Apple IIgs disk, but in a file on
your computer. For 3.5" disks, for example, a raw image would be exactly
800K bytes long (819200 bytes). KEGS intercepts the emulated GS accesses to
800K bytes long (819200 bytes). KEGS directs the emulated GS accesses to
the image, and does the correct reads and writes of the Unix file instead.
To do "useful" things with KEGS, you need to get a bootable disk image.
@ -150,21 +175,36 @@ get Apple IIgs System 6. Unfortunately, Apple now only has .sea files which
are executable files for Macintosh only. You need a macintosh to execute
those programs, which creates Disk Copy image files with no special extensions
(and with spaces in the names). Once you get those files back to your
host machine, you can use them by listing them in kegs_conf.
host machine, you can use them by selecting them from the Configuration Panel.
You can also get Apple II programs in ".dsk" format from a variety of
sites on the internet, and these should all work on KEGS as well.
KEGS also supports partitioned devices. For instance, if you have a CD-ROM
on your computer, just pop an Apple II CD in, and KEGS can mount it, if
you have a Unix-base system (Linux, any Unix, and Mac OS X).
you have a Unix-based system (Linux, any Unix, and Mac OS X).
If you're on a Mac, be careful letting KEGS use your HFS partitions--
GSOS has many HFS bugs when it is writing.
GSOS has many HFS bugs when it is writing. Also avoid having KEGS access
an image which have mounted on your Mac at the same time (always unmount
it from your Mac before letting KEGS access it)!
If you do not have any disk mounted in s7d1, KEGS will jump into BASIC.
If you do not have any disk mounted in s7d1, KEGS will jump into the monitor.
To boot slot 6 (or slot 5), use the Apple IIgs Control Panel by pressing
Ctrl-Command-ESC.
Support for 5.25" nibblized images is read-only for now (since the
format is kinda simplistic, it's tricky for KEGS to write to it).
Just mount your image, like "disk.nib" in the kegs_conf file like
any .dsk or .po image.
format is kinda simplistic, it's tricky for KEGS to write to it since KEGS
has more information than fits in that format). Just select your image,
like "disk.nib" in the kegs_conf file like any .dsk or .po image.
In addition to changing disks, you can also just "eject" and image by
moving the cursor to select that slot/drive and then press "E". The
emulated IIgs will immediately detect changes to s5d1 and s5d2.
Care should be taken when changing images in slot 7--KEGS does not notify
GSOS that images have changed (or been ejected), and so it's best to make
changes when GSOS is not running.
Key summary:
@ -180,8 +220,8 @@ F7: Toggle fast_disk_emul on/off
F8: Toggle pointer hiding on/off.
F9: Invert the sense of the joystick.
Shift-F9: Swap x and y joystick/paddle axes.
F10: Attempt to change the a2vid_palette (only useful on 8-bit color display)
F11: Full screen mode (does not do anything yet).
F10: Attempt to change the a2vid_palette (only useful on 256-color displays)
F11: Full screen mode (only on Mac OS X).
F12: Alias of Pause/Break which is treated as Reset
F2, Alt_R, Meta_r, Menu, Print, Mode_switch, Option: Option key
@ -202,35 +242,15 @@ KEGS hides the host cursor automatically and enables special tracking
which forces the emulated cursor to follow the host cursor. If this doesn't
work right under some program, just press F8 for better compatibility.
The default joystick is the mouse position. Upper left is 0,0. Lower right
is 255,255. Press Shift-F9 to swap the X and Y axes. Press F9 to reverse
the sense of both paddles (so 0 becomes 255, etc). Swapping and
reversing are convenient with paddle-based games like "Little Brick Out"
so that the mouse will be moving like the paddle on the screen. "Little
Brick Out" is on the DOS 3.3 master disk. The joystick does not work
properly if the pointer is constrained in the window.
If you have a real joystick on Linux, start KEGS with "-joystick" and
you should be able to use it. Real joysticks should also work on Windows.
The left mouse button is the mouse button for KEGS. The right mouse
button (if you have it) or F6 toggles between four speed modes. Mode 0
(the default) means run as fast as possible. Mode 1 means run at 1MHz.
Mode 2 means run at 2.8MHz. Mode 3 means run at 8.0MHz (about the speed
of a ZipGS accelerator). Most Apple //e (or earlier) games need to be
run at 1MHz. Many Apple IIgs demos must run at 2.8MHz or they crash. Try
running ornery programs at 2.8MHz. 3200 pictures generally only display
correctly at 2.8MHz or sometimes 8.0MHz.
The middle mouse button or Shift-F6 causes KEGS to stop emulation, and enter
the debugger. You can continue with "g" then return in the debug window.
You can also disassemble memory, etc. The section "Debugging KEGS"
above describes the debugger interface a little more.
KEGS has no pop-up menus or other interactive interfaces (other than
the debug window). Input to the debug window is only acted upon when
the emulation is stopped by hitting a breakpoint or pressing the right-most
mouse button.
the debug window, and the occasional error dialogs on Mac OS X). Input to
the debug window is only acted upon when the emulation is stopped
(Shift-F6, middle mouse button, or hitting a breakpoint).
Quitting KEGS:
-------------
@ -240,6 +260,86 @@ can select Quit from the menu. Or enter ctrl-c in the debugger window.
Or press the middle-mouse button in the emulation window, and then type
"q" return in the debug window.
Command/Option keys:
-------------------
If you have a keyboard with the special Windows keys, you can
use them as the command/option keys. For those without those keys,
there are several alternatives.
The following keys are Option (closed-apple) (not all keyboards have all
keys): F2, Meta_R, Alt_R, Cancel, Print_screen, Mode_switch, Option,
or the Windows key just to the right of the spacebar. The following keys are
Command (open-apple): F1, Meta_L, Alt_L, Menu, Scroll_lock, Command,
the Windows key left of the spacebar, and the Windows key on the far right
that looks like a pull-down menu. You can use F1 and F2 if you cannot make
anything else work (especially useful if your OS is intercepting some
Alt or Command key sequences).
If you can't get any of these to work on your machine, let me know.
Note that X Windows often has other things mapped to Meta- and Alt-
key sequences, so they often don't get passed through to KEGS. So it's
best to use another key instead of Alt or Meta.
The joystick/paddle buttons are just the Command and Option keys.
Reset:
-----
The reset key is Pause/Break or F12. You must hit it with Ctrl to get it to
take effect (just like a real Apple IIgs). Ctrl-Command-Reset
forces a reboot. Ctrl-Command-Option-Reset enters selftests.
Selftests will pass if you force speed to 2.8MHz using the middle
button or F6 (and also set Enable Text Page 2 shadow = Disabled for ROM 01).
Watch out for ctrl-shift-Break--it will likely kill an X Windows session.
Also note that the Unix olvwm X window manager interprets ctrl-F12 and will
not pass it on to KEGS--you'll need to use Break for reset in that case.
Full Screen mode (MAC OS X ONLY):
----------------
KEGS can run in full screen mode--which is especially useful when letting
small kids use KEGS (but it is not really a lock, so do not let a 2 year
old bang on the keyboard while running KEGS).
Full Screen mode is toggled with F11 (or Ctrl-F11, since Expose on a Mac
is intercepting F11). If KEGS stops in the debugger for any reason,
full screen mode is toggled off automatically.
Joystick Emulation (Mouse, Keypad, or real native joystick):
------------------
The default joystick is the mouse position. Upper left is 0,0. Lower right
is 255,255. Press Shift-F9 to swap the X and Y axes. Press F9 to reverse
the sense of both paddles (so 0 becomes 255, etc). Swapping and
reversing are convenient with paddle-based games like "Little Brick Out"
so that the mouse will be moving like the paddle on the screen. "Little
Brick Out" is on the DOS 3.3 master disk. The joystick does not work
properly if the pointer is constrained in the window.
You can also select from a "Keypad Joystick" or a real joystick from
the Configuration panel. Press return on the "Joystick Configuration"
entry, and then select between Mouse Joystick, Keypad Joystick, or one
of two native joysticks. The Keypad Joystick uses your keypad number
keys as a joystick, where keypad 7 means move to the upper left, and
keypad 3 means move to the lower right. Pressing multiple keys together
averages the results, allowing finer control than just 8 directions.
Also, joystick scaling is selectable here for games which require
a greater range of motion to work correctly, along with trim adjustment
which moves the centering point. Adjusting scaling usually means you
will need to adjust the trim as well.
The left mouse button is the mouse button for KEGS. The right mouse
button (if you have it) or F6 toggles between four speed modes. Mode 0
(the default) means run as fast as possible. Mode 1 means run at 1MHz.
Mode 2 means run at 2.8MHz. Mode 3 means run at 8.0MHz (about the speed
of a ZipGS accelerator). Most Apple //e (or earlier) games need to be
run at 1MHz. Many Apple IIgs demos must run at 2.8MHz or they will not
operate correctly. Try running ornery programs at 2.8MHz. 3200 pictures
generally only display correctly at 2.8MHz or sometimes 8.0MHz.
Debugging KEGS:
--------------
@ -272,6 +372,10 @@ type:
e1/0010B
The format is "bank/address" then "B", where the B must be in caps and
the address must use lower-case hex. For Apple IIe programs, just use a
bank of 0.
To list all breakpoints, just type 'B' with no number in front of it.
To delete a breakpoint, enter its address followed by 'D', so
@ -296,27 +400,17 @@ watchpoints).
Frederic Devernay has written a nice help screen available in the
debugger when you type "h".
Useful locations for setting breakpoints:
0/3f0B - Break handler
0/c000B - Keyboard latch, programs read keys from this address
KEGS command-line option summary:
--------------------------------
-mem {mem_amt}: KEGS will use mem_amt as the amount of expansion RAM in
the IIgs. This memory is in addition to the 256KB on a ROM 01
motherboard, or 1MB on a ROM 03. The memory is in bytes,
and it will be rounded down to the nearest 64KB. "-mem 0x800000"
will use 8MB of expansion RAM (the default).
-badrd: Causes KEGS to halt on any access to invalid memory addresses.
Useful for debugging. By default, KEGS allows reads to invalid
memory since the Finder does some (especially when you open the
About window, and then close it). But KEGS warns you about these
accesses in the debug window. In general, these warnings
indicate buggy programs. If the warnings get severe, it's
a good sign you should quit KEGS and start over before the
emulated program crashes. -badrd would be the default for KEGS
if it wasn't for the Finder's About window's problem.
-ignbadacc: Causes KEGS to allow reads & writes to invalid memory
addresses without printing any warnings. Useful for running
extremely buggy programs so you don't have to see all the warning
messages scroll by.
There are others, but the Configuration panel provides a better way to
set them so they are no longer listed here.
-skip: KEGS will "skip" that many screen redraws between refreshes.
-skip 0 will do 60 frames per second, -skip 1 will do 30 fps,
-skip 5 will do 10 fps.
@ -340,7 +434,6 @@ X-Windows/Linux options
-24: KEGS will only look for a 24-bit X-Window display.
-display {machine:0.0}: Same as setting the environment variable DISPLAY.
Sends X display to {machine:0.0}.
-joystick: Will use /dev/js0 as the joystick.
-noshm: KEGS will not try to used shared memory for the X graphics display.
This will make KEGS much slower on graphics-intensive tasks,
by as much as a factor of 10! By default, -noshm causes an
@ -348,40 +441,9 @@ X-Windows/Linux options
default by specifying a -skip explicitly.
Command/Option keys:
-------------------
If you have a workstation keyboard with the new Windows keys, you can
use them as the command/option keys. This is what I use. Since many people
don't have the PC keyboard, there are several alternatives.
The following keys are Option (closed-apple) (not all keyboards have all
keys): F2, Meta_R, Alt_R, Cancel, Print_screen, Mode_switch, Option,
or the Windows key just to the right of the spacebar. The following keys are
Command (open-apple): F1, Meta_L, Alt_L, Menu, Scroll_lock, Command,
the Windows key left of the spacebar, and the Windows key on the far right
that looks like a pull-down menu. You can use F1 and F2 if you cannot make
anything else work.
If you can't get any of these to work on your machine, let me know.
Note that X Windows often has other things mapped to Meta- and Alt-
key sequences, so they often don't get passed through to KEGS. So it's
best to use another key instead of Alt or Meta.
The joystick/paddle buttons are just the Command and Option keys.
Reset:
-----
The reset key is Pause/Break or F12. You must hit it with Ctrl to get it to
take effect (just like a real Apple IIgs). Ctrl-Command-Reset
forces a reboot. Ctrl-Command-Option-Reset enters selftests.
Selftests will pass if you force speed to 2.8MHz using the middle
button. Watch out for ctrl-shift-Break--it will likely kill your
X Windows session.
Control Panel:
-------------
Apple IIgs Control Panel:
------------------------
You can get to the Apple IIgs control panel (unless some application
has locked it out) using Ctrl-Command-ESC.
@ -453,18 +515,12 @@ to $E0.
Details on config.kegs and disk images
--------------------------------------
The file "config.kegs" describes the images KEGS will use. The sample
file has all the lines commented out with '#' to show sample uses.
Remember, KEGS will boot s7d1 (unless you've changed that using the
Apple IIgs control panel), so you must put an image in that slot.
The file "config.kegs" describes the images KEGS will use. Although you
can edit the file manually, in general you can use the Configuration Panel
to make all the changes you need. This information is for reference.
Changing disks in slot 7 does not work, but you can move around
disks in slots 5 and 6. This allows you to "eject" disks and change them.
This is especially useful for multi-disk 5.25" programs.
KEGS uses the Unix permissions on raw disk images to decide how to load
it into the emulator. If the file is unreadable, it cannot load the
image (duh).
KEGS by default will boot s7d1 (unless you've changed that using the
Apple IIgs control panel), so you should put an image in that slot.
KEGS, by default, runs the IWM (3.5" and 5.25" disks) emulation in an
"approximate" mode, called "fast_disk_emul". In this mode, KEGS
@ -544,14 +600,14 @@ equivalent speed. Many games will be unplayable at the unlimited
setting. Setting the IIgs control panel speed to "slow" will slow down
to 1MHz.
Sound output has an interesting relationship to KEGS timing. KEGS must
Sound output has an important relationship to KEGS timing. KEGS must
play one second of sound per second of emulated time. Normally, this
works out exactly right. But as noted above, if KEGS can't maintain the
needed speed, it extends the emulated second. If it extends the second
to 1.4 real seconds, that means KEGS only produces 1.0 second of sound
data every 1.4 seconds--the sound breaks up!
In all cases, 1MHz to KEGS is 1.024MHz. And 2.8MHz to KEGS is 2.52MHz
In all cases, 1MHz to KEGS is 1.024MHz. And 2.8MHz to KEGS is 2.56MHz
(trying to approximate the slowdown causes by memory refresh on a real
Apple IIgs). It's just easier to say 1MHz and 2.8MHz.
@ -673,7 +729,9 @@ useful for some games.
KEGS: What works:
-----------------
Basically, just about every Apple II program works.
Basically, just about every Apple II program works. See the file
README.a2.compatibility for directions on how to make certain games/programs
work.
KEGS is EXTREMELY compatible. But, I haven't tested everything. Let
me know if you find a program which is not working correctly.
@ -696,9 +754,6 @@ the above lets it work fine. This seems to be a bug in the demo.
KEGS bugs:
---------
KEGS's serial port emulation is very limited now, and only for
adventurous souls.
On a ROM03, KEGS makes a patch to the ROM image (inside emulation, not
to the Unix file) to fix a bug in the ROM code. Both ROM01 and ROM03
are patched to enable use of more than 8MB of memory. I then patch the ROM
@ -726,39 +781,70 @@ in the debug window. However, when sound restarts, it sometimes
If your display is not using shared memory, audio defaults to off unless
you override it with "-audio 1".
SCC emulation:
-------------
SCC (Serial Port) emulation:
---------------------------
KEGS emulates the two serial ports on a IIgs as being two Unix sockets.
Port 1 (printer port) is at socket address 6501, and port 2 (modem)
is at socket address 6502.
In KEGS, from APPLESOFT, if you PR#1, all output will then be sent to
socket port 6501. You can see it by connecting to the port using
any method you like, but a simple, easy way is to use telnet. In
another Unix window, do: "telnet localhost 6501" and then you
will see all the output going to the "printer".
By default, slot 1 is emulated using a simple receive socket, and slot 2
emulates a Virtual Modem.
A Virtual Modem means KEGS acts as if a modem is on the serial port
allowing Apple II communcation programs to fully work, but connected to
internet-enabled sockets. KEGS emulates a "Hayes- Compatible" modem,
meaning it accepts "AT" commands. You can use KEGS to connect to free
telnet-BBSs, or run a BBS program on KEGS and become a telnet BBS yourself.
The two main AT commands are: ATDT for dialing out, and ATA for receiving
calls. To dial out, enter "ATDThostname", or for example,
"ATDTboycot.no-ip.com" (which is down at the moment, unfortunately).
You can also enter an IP address, like "ATDT127.0.0.1". On a Mac, to
create a telnet server to allow telnet connections (do not use over the
internet, but on a private network behind a firewall, this should be
fine), in a Terminal window type: "sudo /usr/libexec/telnetd -debug".
You must then enable telnet on port 23 through your Mac OS X Firewall in
the System Preferences->Sharing->Firewall page (just add port 23 as
open--you'll need to use the "New..." button and then select Other for
Port Name, and enter Port Number as 23). Then from KEGS in a
communications program, do "ATDT127.0.0.1", and then log-in to your Mac.
KEGS also accepts incoming "calls". Start KEGS, and initialize the
Virtual Modem with some AT command (ATZ resets all state, and is a useful
start). KEGS now has a socket port open, 6502 for slot 2, which you
can connect to using any telnet program. In a Terminal window, then
type "telnet 127.0.0.1 6502" and you will connect to KEGS. The Virtual
Modem then starts printing "RING" every 2 seconds until you answer with
"ATA". You are now connected. I have not tried BBS programs, but have
made connections with ProTERM.
On Windows XP SP2, when KEGS tries to open this incoming socket, you'll
need to enable it and click Unblock to the dialog that Windows pops up.
If you do not want incoming connections, you can block it instead.
Once connected, you can go back to talking to the Virtual Modem by
pressing + three times quickly (+++), and then not type anything for a second.
This goes back to the AT-command mode. You can now "ATH" to hang up, or
"ATO" to go back online.
On Windows, the socket code is very preliminary and there are problems
receiving connections.
KEGS also supports an older, simpler socket interface, which it defaults
to using on slot 1. In KEGS, from APPLESOFT, if you PR#1, all output will
then be sent to socket port 6501. You can see it by connecting to the
port using telnet. In another terminal window, do: "telnet localhost 6501"
and then you will see all the output going to the "printer".
Under APPLESOFT, you can PR#1 and IN#1. This gets input from the
socket also. You can type in the telnet window, it will be sent on
to the emulated IIgs. Telnet on Unix defaults to "line mode" which
buffers keys you type until you hit return. This can be a bit distracting,
and can be disabled by hitting Ctrl-] and then "mode char". This
causes a few {{ chars to show up in KEGS--just ignore this for now.
You may want to go to the F4 Config Panel and set "mask off high bit"
for serial port accesses to make PR#2 work a little nicer.
to the emulated IIgs. You may want to go to the F4 Config Panel and set
"mask off high bit" for serial port accesses to make PR#1 work a little nicer.
That's about it. Proterm and Appleworks GS can talk to the modem port
fine, but it's limited in its usefulness. I have printed from
Printshop, but it's a bit pointless since it's sending out Imagewriter
printer codes which doesn't look like anything. You can "print" from
BASIC by using something like PR#1 in KEGS and
You can "print" from BASIC by using something like PR#1 in KEGS and
"telnet localhost 6501 | tee file.out" in another window.
Feel free to let me know what doesn't work, but a lot is known not
to work. GNO's tty interface may work, but I'm having problems
testing it.
KEGS status area:
----------------
@ -875,7 +961,7 @@ Fix the Ensoniq bugs to make sound more accurate.
If you have any problems/questions/etc., just let me know.
Special thanks to Jeff Smoot of climbingwashington.com for letting me use
the picture of a keg in the Mac icon.
the picture of a keg for the Mac icon.
Kent Dickey
kadickey@alumni.princeton.edu
@ -956,21 +1042,9 @@ KEGS boots s7d1 by default. You can change this using the emulated IIgs
control panel, just like a real Apple IIgs. KEGS emulates a IIgs with
two 5.25" drives in slot 6, two 3.5" drives in slot 5, and up to 32
"hard drives" in slot 7. However, the current Configuration Panel only
lets you set through s7d11.
Config.kegs file
----------------
KEGS saves your preferences and disk image names in the file config.kegs.
KEGS searches for this file in the directory KEGS was started in, in
your home directory, or in the Resources directory (on a Mac) of the app.
It needs to find one someplace, so putting it in your home directory is
usually the easiest.
The config.kegs file is a simple text file. You need to quit KEGS before
editing the file. The BRAM data is also kept in this file, with separate
BRAM contents for ROM 01 and ROM 03 (so if you switch ROM versions, you
don't lose all your BRAM preferences).
lets you set through s7d11. ProDOS 8 can access disks up to s7d8, but GSOS
has no limit, so it's best to put HFS images past s7d8 in order to leave
more slots for ProDOS images.
If you're trying to use a real host device (CD-ROM, or hard drive, or
floppy), you should make the permissions on the /dev/disk* files something
@ -982,8 +1056,6 @@ You can do this on a Mac with:
sudo chmod 644 /dev/disk2
Running KEGS as root is NOT recommended.
The s6d* and s5d* drives support disk swapping and disk ejecting, but
the s7d* drives do not.
DO NOT RUN KEGS AS ROOT. It is not designed for this and it's almost certain
problems will ensue.

9
README.md Normal file
View File

@ -0,0 +1,9 @@
KEGS - Kent's Emulated GS
=========================
Kegs is an Apple //gs emulator for Mac OS X, Win32, Linux and Unix/X11
The latest version on the main KEGS home page is v0.91 which doesn't work on Intel Macs. In fact, only
small build changes are required, so I have forked the code to Github with my changes.
Original homepage with useful info on how to get it running is here: (http://kegs.sourceforge.net/)[http://kegs.sourceforge.net/]

View File

@ -2,13 +2,13 @@
WIN32 port of KEGS (KEGSWIN)
----------------------------
There is a different port of KEGS by akilgard called KEGS32.
You can get it from http://www.geocities.com/akilgard/kegs32.
This port is leveraged from KEGS32, but mostly a rewrite (perhaps
for the worse). The joystick code was taken without too many
modifications.
There is a different port of KEGS by Chea Chee Keong (akilgard) called
KEGS32. You can get it from http://www.geocities.com/akilgard/kegs32.
This port is leveraged from KEGS32, but mostly a rewrite (perhaps for
the worse). I am grateful for Chea for doing the windows port since I
did not know any Windows programming.
This port is alpha quality. Seriously. Don't expect much.
This port is alpha quality. Don't expect much.
This is a bare-bones Win32 port. It was compiled with Mingw2.0,
which you can download at: http://www.mingw.org/. I also had
@ -49,3 +49,4 @@ In order to compile,
You can contact me at kadickey@alumni.princeton.edu

Binary file not shown.

BIN
src/2mg.icns Normal file

Binary file not shown.

BIN
src/525.icns Normal file

Binary file not shown.

View File

@ -4,8 +4,46 @@
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>2mg</string>
<string>2MG</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>2mg.icns</string>
<key>CFBundleTypeName</key>
<string>Apple II 2MG Disk Image</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>a2mg</string>
</array>
<key>CFBundleTypeRole</key>
<string>None</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>kegs</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>525.icns</string>
<key>CFBundleTypeName</key>
<string>KEGS Configuration File</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>kegs</string>
</array>
<key>CFBundleTypeRole</key>
<string>None</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>KEGSMAC</string>
<key>CFBundleName</key>
<string>KEGSMAC</string>
<key>CFBundleIconFile</key>
<string>kegsicon.icns</string>
<key>CFBundleInfoDictionaryVersion</key>
@ -13,10 +51,14 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<string>KEGS</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>CSResourcesFileMapped</key>
<true/>
<string>0.91</string>
<key>CFBundleShortVersionString</key>
<string>KEGSMAC version 0.91</string>
<key>CFBundleGetInfoString</key>
<string>KEGSMAC v0.91, Copyright 2004 Kent Dickey, http://kegs.sourceforge.net</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright 2004 Kent Dickey</string>
</dict>
</plist>

Binary file not shown.

View File

@ -1,4 +1,4 @@
# $Id: release_makefile_base,v 1.15 2003/11/21 20:00:42 kentd Exp $
# $Id: release_makefile_base,v 1.15 2003/11/21 20:00:42 kentd Exp kentd $
OBJECTS1 = adb.o clock.o config.o dis.o engine_c.o scc.o iwm.o \
joystick_driver.o moremem.o paddles.o sim65816.o smartport.o \
@ -24,17 +24,18 @@ specials_clean:
# Mac builds:
kegsmac: $(OBJECTS) compile_time.o
$(CC) $(CCOPTS) $(LDOPTS) -arch ppc $(OBJECTS) compile_time.o $(LDFLAGS) -o kegsmac $(EXTRA_LIBS) -prebind -framework Carbon
$(CC) $(CCOPTS) $(LDOPTS) -arch ppc $(OBJECTS) compile_time.o $(LDFLAGS) -o kegsmac $(EXTRA_LIBS) -prebind -framework Carbon -framework Quicktime
mkdir -p ../KEGSMAC.app/Contents/Resources/English.lproj/main.nib
mkdir -p ../KEGSMAC.app/Contents/MacOS
mv kegsmac ../KEGSMAC.app/Contents/MacOS/KEGSMAC
echo "APPL????" > ../KEGSMAC.app/Contents/PkgInfo
cp -f Info.plist ../KEGSMAC.app/Contents/
cp -f InfoPlist.strings ../KEGSMAC.app/Contents/Resources/English.lproj/
cp -f info.nib ../KEGSMAC.app/Contents/Resources/English.lproj/main.nib
cp -f classes.nib ../KEGSMAC.app/Contents/Resources/English.lproj/main.nib
cp -f objects.xib ../KEGSMAC.app/Contents/Resources/English.lproj/main.nib
cp -f kegsicon.icns ../KEGSMAC.app/Contents/Resources/
cp -f 525.icns ../KEGSMAC.app/Contents/Resources/
cp -f 2mg.icns ../KEGSMAC.app/Contents/Resources/
touch '../KEGSMAC.app/Icon?'
# Linux for X builds:
@ -49,7 +50,7 @@ kegs.exe: $(OBJECTS) compile_time.o
# Mingw32 (native windows) builds:
kegswin.exe: $(OBJECTS) compile_time.o
$(CC) $(CCOPTS) $(LDOPTS) $(OBJECTS) compile_time.o $(LDFLAGS) -o $(NAME)$(SUFFIX) $(EXTRA_LIBS) -lwinmm -lgdi32 -ldsound -lcomctl32
$(CC) $(CCOPTS) $(LDOPTS) $(OBJECTS) compile_time.o $(LDFLAGS) -o $(NAME)$(SUFFIX) $(EXTRA_LIBS) -lwinmm -lgdi32 -ldsound -lcomctl32 -lws2_32
mv $(NAME)$(SUFFIX) ..

259
src/adb.c
View File

@ -8,12 +8,14 @@
/* You may contact the author at: kadickey@alumni.princeton.edu */
/************************************************************************/
const char rcsid_adb_c[] = "@(#)$KmKId: adb.c,v 1.63 2004-03-23 18:46:25-05 kentd Exp $";
const char rcsid_adb_c[] = "@(#)$KmKId: adb.c,v 1.73 2004-11-14 14:05:33-05 kentd Exp $";
/* adb_mode bit 3 and bit 2 (faster repeats for arrows and space/del) not done*/
#include "adb.h"
int g_fullscreen = 0;
extern int Verbose;
extern word32 g_vbl_count;
extern int g_num_lines_prev_superhires640;
@ -21,11 +23,14 @@ extern int g_num_lines_prev_superhires;
extern int g_rom_version;
extern int g_fast_disk_emul;
extern int g_limit_speed;
extern int g_irq_pending;
extern int g_swap_paddles;
extern int g_invert_paddles;
extern int g_joystick_type;
extern int g_a2vid_palette;
extern int g_config_control_panel;
extern word32 g_cfg_vbl_count;
extern double g_cur_dcycs;
extern byte *g_slow_memory_ptr;
extern byte *g_memory_ptr;
@ -84,17 +89,23 @@ int g_warp_pointer = 0;
int g_hide_pointer = 0;
int g_unhide_pointer = 0;
int g_mouse_a2_x = 0;
int g_mouse_a2_y = 0;
int g_mouse_a2_button = 0;
int g_mouse_fifo_pos = 0;
int g_mouse_raw_x = 0;
int g_mouse_raw_y = 0;
#define ADB_MOUSE_FIFO 8
int g_mouse_fifo_x[ADB_MOUSE_FIFO] = { 0 };
int g_mouse_fifo_y[ADB_MOUSE_FIFO] = { 0 };
int g_mouse_fifo_buttons[ADB_MOUSE_FIFO] = { 0 };
STRUCT(Mouse_fifo) {
double dcycs;
int x;
int y;
int buttons;
};
Mouse_fifo g_mouse_fifo[ADB_MOUSE_FIFO] = { { 0, 0, 0, 0 } };
int g_mouse_warp_x = 0;
int g_mouse_warp_y = 0;
@ -102,11 +113,6 @@ int g_mouse_warp_y = 0;
int g_adb_mouse_valid_data = 0;
int g_adb_mouse_coord = 0;
int g_adb_data_int_sent = 0;
int g_adb_mouse_int_sent = 0;
int g_adb_kbd_srq_sent = 0;
#define MAX_KBD_BUF 8
int g_key_down = 0;
@ -129,6 +135,10 @@ int g_mouse_ctl_addr = 3; /* ADB ucontroller's mouse addr*/
word32 g_virtual_key_up[4]; /* bitmask of all possible 128 a2codes */
/* indicates which keys are up=1 by bit */
int g_keypad_key_is_down[10] = { 0 };/* List from 0-9 of which keypad */
/* keys are currently pressed */
#define SHIFT_DOWN ( (g_c025_val & 0x01) )
#define CTRL_DOWN ( (g_c025_val & 0x02) )
#define CAPS_LOCK_DOWN ( (g_c025_val & 0x04) )
@ -171,6 +181,10 @@ adb_init()
g_virtual_key_up[i] = -1;
}
for(i = 0; i < 10; i++) {
g_keypad_key_is_down[i] = 0;
}
adb_reset();
}
@ -189,9 +203,9 @@ adb_reset()
g_kbd_ctl_addr = 2;
g_mouse_ctl_addr = 3;
g_adb_data_int_sent = 0;
g_adb_mouse_int_sent = 0;
g_adb_kbd_srq_sent = 0;
adb_clear_data_int();
adb_clear_mouse_int(