Jace (Java Apple Computer Emulator) has finally been poked and prodded
enough to be a usable emulator. It's not AppleWin, nor will it ever
try to be. But it is cross-platform friendly and runs well at least
in Linux. Most likely it runs well from any platform that has Sun
Java 6 or OpenJDK 6 or higher.
What's new:
-Better speed throttling, no more emulation lurches when sound starts/
stops. Experience is overall much smoother than before.
-Auto-accelerates when disk access is detected, so boot times and
CATALOG are a lot faster.
-Primitive joystick support (uses mouse movement for now, more options
will be forthcoming later such as keyboard mappings)
-Hard drive (HDV/2MG) support (also 800kb floppy images) for reading/
writing
-New configuration interface that allows tweaking various aspects of
the emulator -- still a work in progress but some things work. (You
have to use it to insert a hard drive image)
-Any card configuration is possible. 7 hard drive controllers? Why
not. 14 floppy drives? Go for it. (why??). Default configuration
is Slot 2: SSC, Slot 6: Disk ][, Slot 7: Mass storage
-Configuration SAVE will store settings to be automatically loaded on
next startup. Settings are saved in .jace.conf (delete this to revert
settings to defaults on next start)
-Super Serial Card emulation can optionally strip/add LF characters
for you -- useful for telnet support in some cases, but it's not
complete telnet support like Kegs has.
-Nice shiny startup help screen, with more helpful features to be
added later.
-Aspect ratio correction (Press F8)
-Paste support (shift+insert)
-Experimental console support that redirects character input/output to
stdin/stdout (doesn't work very well though) -- you can enable/disable
it from the config screen.
Download:
http://sourceforge.net/projects/java-ace (download should be 600kb or
so, if it is >700kb then it is likely an older copy)
To start: If JRE is registered with your file manager you might have
the option to start the program directly by right-clicking and telling
it to open with Java. If that option doesn't present itself, from the
commandline use:
java -jar jace.jar
Thanks to everyone here for all the useful help and code snippets
along the way, not to mention very patient testing and helpful
feedback. Big thanks to Nick and MDJ for lots of help needed to even
get this behemoth off the ground. I'll still be adding features
periodically, keep an eye on the sourceforge activity for small
progress updates.
-B
Also, if anyone has any suggestions for an ascii-art logo, I'm all for
it. Must fit within 4 lines of text, 38 columns (and of course, using
the Apple // monospace font)
Currently, I'm using this:
_ __ ___
| |/\/ _)| _/
_| / *\(_ |>_
(__/_/\_\_)|__\
-B
Best viewed with a monospaced font... ;-)
http://patorjk.com/software/taag/
.]/-\([-
. .-. .-. .-.
| |-| | |-
`-' ` ' `-' `-'
88888 db dP""b8 888888
88 dPYb dP `" 88__
o. 88 dP__Yb Yb 88""
"bodP' dP""""Yb YboodP 888888
_ __ __ ____
| | / /\ / /` | |_
\_|_| /_/--\ \_\_, |_|__
____ __ ___ ____
(_ _) /__\ / __)( ___)
.-_)( /(__)\( (__ )__)
\____)(__)(__)\___)(____)
__ __ ___ ____
_( ) / _\ / __)( __)
/ \) \/ \( (__ ) _)
\____/\_/\_/ \___)(____)
___ _ ___ ___
)_ _( )_\ / _( ) __(
_) | /( )\ ))_ | _)
)___( )_/ \_(\__( )___(
_____ _______ ______ _______
_| || _ || || ___|
| || || ---|| ___|
|_______||___|___||______||_______|
..__. __ .___
|[__]/ `[__
\__|| |\__.[___
_ _ __ ___
| | / \ / _|| __|
n_| || o |( (_ | _|
\__/ |_n_| \__||___|
__ _ __ ___
/ /.' \ ,'_/ / _/
n_/ // o // /_ / _/
\_,'/_n_/ |__//___/
_ _
| /\ / |_
\_| /--\ \_ |_
_ _ _ _
//_// `/_`
(_// //_,/_,
| \ __| __|
\ | _ \ ( _|
\__/ _/ _\ \___| ___|
_ _ ___ ___
_ | | /_\ / __|| __|
| || |/ _ \| (__ | _|
\__//_/ \_\\___||___|
____ _____ _____ _____
\_ \/ _ \/ \/ __\
---| || _ || |--|| __|
\_____/\__|__/\_____/\_____/
__ __ ___ ___
|_ \ / \ / _/| __|
_\ || /\ || \__| _|
/___||_||_| \__/|___|
__ ___
| /\ / ` |__
\__/ /~~\ \__, |___
__ __
| /\ / |_
__)/--\\__|__
_ ___ ___ ___
_ | | / \ / __| | __|
| || | | - | | (__ | _|
\__/ |_|_| \___| |___|
Stylish!
Cheers,
Nick.
The "A" on this one is reminiscent of a floppy disk. :-)
> > _ __ __ ____
> > | | / /\ / /` | |_
> > \_|_| /_/--\ \_\_, |_|__
>
> Stylish!
Almost art-deco - definitely the most polished looking of the bunch.
Great! I've put it in. Thanks for the figlets, David! I modified it
slightly to make the top of the C a character longer. The next major
checkin and build update will have this on it now. Now that things
are more or less where they will stay, I'll be a lot more comfortable
doing a write up on how the emulator functions. Probably as soon as I
fix a few obvious glaring bugs. ;-) If I work on it any more in the
near future, I might land up in the doghouse. But soon...
-B
> Jace (Java Apple Computer Emulator) has finally been poked and prodded
enough to be a usable emulator. It's not AppleWin, nor will it ever
try to be.
Hey, Linus once said:
"I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones."
So who knows! :-)
Maybe we'll "recruit" you for AppleWin 2.0 ;-)
You'll have to pry my java compiler from my cold dead hands. :-D
No, but seriously, I wouldn't work on something I couldn't compile
locally. Now, if AppleWin were a cross-platform thing then I'd
probably do some things here and there. But my environment is Linux,
and I really have no intention to install Windows to develop anything.
-B
any chance of a web-page-able applet?
Same here. (Though when I wrote Dapple, my dev environment was still
MS-DOS. xD) Honestly, I'd like if AppleWin were to go something like
SDL+Qt - it would then run on Linux as well as Windows, Windows as well as
Linux, and OSX prolly as well as both xD
-uso.
I am running jace on Mac OS X 10.6.6 (Snow Leopard.)
$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)
Java HotSpot(TM) Client VM (build 17.1-b03-307, mixed mode)
"It is a faithful cycle-accurate emulation of an apple //e computer."
http://hoop-la.ca/apple2/2011/images/screenshot2011-01-26at8.45pm.png
Well, the video is only accurate within 4 cycles for efficiency but I
can improve on that. ;-)
I just posted an updated build that fixes some configuration UI bugs
(you can now set numerical values without errors) and also fixes an
odd bug where you might BLOAD an image into memory from a hard drive
and it doesn't show up on the screen (because it wasn't triggering
memory listeners and therefore not dirtying the scanline bits...)
-B
Some in the team would like to. Lot's of work though.
Luckily, someone's done half of it:
http://linapple.sourceforge.net/
Cheers,
Nick.
"The video is only accurate within 4 cycles" explains why the video
switches at different byte boundaries than what I remember on real
hardware.
The current version of jace displays 5 bytes of graphics and 8 bytes
of text whereas this code alternates between 6 bytes of graphics and 7
bytes of text...
ORG $0300:
LDA $C050 ; 4 cycles
NOP ; 2 cycles
LDA $C051 ; 4 cycles
JMP $0300 ; 3 cycles
Note that 13 cycles is what makes the video "lock in" work. I ran
"Gorgon" because I remember Gorgon mixing hi-res and lo-res that would
move (no "lock in"), but it doesn't seem to work in jace, or the
Gorgon I downloaded doesn't do that. Here is what the screen looks
like without "lock in" ...
http://hoop-la.ca/apple2/2011/images/screenshot2011-01-27at2.43pm.png
Another difference on real hardware is that when transitioning between
graphics modes, the real Apple II fetches the byte of data from the
previous graphics mode to display in the graphics mode it is switching
to. This is a timing thing within one clock cycle. It can make for
some strange effects in the transition.
I think that the "top" command indicates that the java process is
making one of the cores 65.7% busy on my Mac which has a 2 GHz Intel
Core Duo. The fan is running.
That's an interesting thing about the video scanner I didn't know. As
for getting full cycle-accurate emulation, it's on my to-do list to
convert the video scanner to capture the bits during the horizontal
scan period and then actually draw the line during the horizontal
blanking period. That will help speed things up considerably I
think. It will be a very time-consuming rewrite of the video logic,
which is why I keep putting it off. ;-)
When you're flipping video modes, it is most likely forcing the
emulator to re-render the whole screen in full. If sound is running
as well, that could account for why it's eating up so much CPU. If it
was equally busy sitting idle at the basic prompt, I'd be heavily
disappointed. Of course, I'm overdue for another optimization round
of the code to squeeze out some more performance but for now I'm just
happy it's working.
-B