-Added code annotations to track down which program variables are
"configurable" so that they can surface in a configuration panel later
(the config panel has yet to be written). As well as the annotations,
classes having "configurable" variables also have corresponding
"reconfigure" methods to be called when the variables in question are
changed. It makes it easier to tie things up from a coding
perspective that way.
-Major refactoring of Disk II support. Now supports two drives.
Disks now understand writes, but only the in-memory copy of the image
is updated. Once the denibblize logic is finished, should be able to
finish disk updates and have 100% disk image support. The way it
works is that the real image will be updated in a background thread
after so many milliseconds of no more "writes" to the image --
meanwhile the emulator continues. If the emulator tries to write to
the disk while it is updating the real disk, the emulation will pause
and wait for the real I/O to finish before processing the virtual I/O.
- Prodos ordering fixed, prodos disks with ".PO" extension are treated
as such. Anything else is assumed to be Dos 3.3 (I know, I know...
there are .DSK images with Prodos ordering. Sorry, let's call it a
bug for a while unless anyone wants to be added to the SVN access list
and commit some fixes for that.)
- Debug panel now hidden by default. You can toggle with F10.
- F1 and F2 insert disks into drives 1 and 2 respectively. F5 is now
the key to "brun" a binary file
- As discussed previously, read-only virtual prodos volume is
working. Writes will result in an error. Virtual filesystem is smart
enough to check physical OS for updates to directories or files. Some
bugs still remain, namely block counts are wrong. File dates are
wrong.
- Fixed mixed-mode bug affecting 80-column text not being updated at
the bottom of the screen.
- Fixed screen redraw bugs that affected folks who moved or resized
their window and only saw a big blank window after that.
Once I get the disk writes and configuration working I'll put it out
as beta. Not sure when that will be, but I'm never adverse to
accepting help or ideas. :-)
-Brendan
idea: make it easy to download and run. I really dislike
having to download program X, IDE Y, class files Z, and trying
to get em all to run together.
is there a JACE.INSTALL.EXE that we can run, and then try
JACE?
Rich
The experience is not too bad - you just download the jar, and run
with java -jar jace.jar. On any platform... not just Windows.
Another stunning achievement!
Mac OS X notes:
Note Java 1.6 required due to GroupLayout dependency.
Note generated code: 28 instances of the same Font!
Changed CardMassStorage rootPath to local directory.
Changed Fn keys to check isAltDown() for Mac.
Ran Rod's pattern on vm02 on jace for the win!
<http://sourceforge.net/projects/vm02/>
<http://java-ace.sourceforge.net/>
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
> Note Java 1.6 required due to GroupLayout dependency.
ACK! Sorry about that. Yeah, it's a really damn good layout manger
though. You might be able to use retroweaver to make an instant
backport -- I've had luck with it for other projects, though they
weren't swing projects. YMMV.
> Note generated code: 28 instances of the same Font!
Oops! I'll try to track that down pronto. With the configuration
management it will be possible to swap out fonts (in theory), so Font
should be a singleton for crying out loud. Shame on me. :-D
> Changed CardMassStorage rootPath to local directory.
Yep, and if you look the variable is annotated as @configurable. Very
soon there will be a config panel to let you select the directory that
goes there. The fact that the cards are inserted in the Apple2e class
is just a placeholder to bootstrap a configuration I prefer using.
However you can modify that to stick Disk II's in slot 5 and slot 6,
put two SSCs listening on different TCP/IP ports. Not sure why you'd
want to. But you _could_. In reality, when I get the config stuff
the way I want, you will start it up the first time and the slots will
be empty. I'm pretty certain that emulated peripherals that are said
not to work in Slot 3 will have the same limitations in the emulator,
by virtue of how the memory model works.
> Changed Fn keys to check isAltDown() for Mac.
Do the Fn keys not register unless you're holding down Alt? Or was
that for personal preference. I'm curious -- and adding decent
keyboard configuration will be the more challenging part to abstract
properly so it's good to know ahead of time what others might expect
of it.
> Ran Rod's pattern on vm02 on jace for the win!
vm02 ran? sweet! v02 was the inspiration that drove me to implement
the virtual prodos filesystem feature (because you have to compile
classes with javac on a "big" computer first) Admittedly I haven't
tried vm02 yet, but Zork runs, Airheart runs (was my real "must work"
test), the self-test is successful -- so I figured there was something
working. ;-) So what's next, Jace doing live dependency injection
into VM02 spring-style? (KIDDING!)
> <http://sourceforge.net/projects/vm02/>
> <http://java-ace.sourceforge.net/>
Which reminds me, need to make a pretty webpage for Jace and ditch the
page over at BerliOS for Apple Game Server. Only so much
freetime. :o)
Thanks for the feedback John!!!
-Brendan
> Note: If you installed Java with default options in Windows then you
> should only have to double-click on the jar to execute the emulator.
> If that fails, associate the .JAR extension with "javaw.exe" in the
> java bin directory. Should work, though I've not used Windows in
> that capacity in over two years. (i heart penguins)
>
> > Note Java 1.6 required due to GroupLayout dependency.
>
> ACK! Sorry about that. Yeah, it's a really damn good layout manger
> though. You might be able to use retroweaver to make an instant
> backport -- I've had luck with it for other projects, though they
> weren't swing projects. YMMV.
No problem; I didn't mean to seem plaintive. I might try this backport:
<https://swing-layout.dev.java.net/>
Or BoxLayout, as seen in this project's ControlPanel:
<http://sites.google.com/site/drjohnbmatthews/kineticmodel>
[...]
> > Changed Fn keys to check isAltDown() for Mac.
>
> Do the Fn keys not register unless you're holding down Alt? Or was
> that for personal preference. I'm curious -- and adding decent
> keyboard configuration will be the more challenging part to abstract
> properly so it's good to know ahead of time what others might expect
> of it.
Ah, on Mac OS X, the unmodified function keys are preset for Exposé,
etc. Using isAltDown() or isMetaDown() is a common alternative.
<http://www.apple.com/macosx/what-is-macosx/expose.html>
> Thanks for the feedback John!!!
Thanks for retro-fun!
> I might try this backport:
>
> <https://swing-layout.dev.java.net/>
This turns out to be unnecessary, as NetBeans includes
org.jdesktop.layout.GroupLayout in a library named "Swing Layout
Extensions". Just add it the project and change to the 1.5 libraries.
This article discusses how to change which layout manager is used.
http://kendes.blogspot.com/2008/03/grouplayout-converting-java-6-to-java-5.html
"If you're looking at a form in design view, go to your Inspector
panel. The very first thing in there will be something like Form
FormName. Right click that and go to properties. Change the Layout
Generation Style from Standard Java 6 Code to Swing Layout Extensions
Library."
Any trivial change to the design causes the code to be regenerated
using the chosen layout.
A more subtle problem revolves around the existing mix of heavy and
light components: Canvas and JPanel. This article discusses some of the
limitations imposed on certain implementations.
http://java.sun.com/products/jfc/tsc/articles/mixing/
I don't mean to argue for a particular version; I just wanted to see
what the tradeoffs might be.
BTW, the debugger is way cool!
Look out, soon netbeans will require JDK 6 to run. The current
version (6.8) should be downloaded at any point by anyone wanting to
stick with JDK 5. JDK 5 build targets will still be possible of
course, but you won't be able to start newer versions on 32-bit macs
without retrofitting the open source JDK to get things moving.
> A more subtle problem revolves around the existing mix of heavy and
> light components: Canvas and JPanel. This article discusses some of the
> limitations imposed on certain implementations.
Yeah, the UI is not the strong point -- I was focused on the core
emulation aspects with the idea I'd "finish" the UI later. Three
years later.... (oops).
> BTW, the debugger is way cool!
Sad thing is the debug features don't fully demonstrate what you can
do with the underlying listener framework. You can trap:
-Reads to a particular address or consecutive range of addresses
-Writes to a particular address or consecutive range of addresses
-Read or Write access to a particular address or consecutive range of
addresses
-Any memory access whatsoever
-You can also further define your listener to only do things if it
encounters specific values, etc.
In your listener you can see the "old" memory value present before a
write, and you can intercept the "new" value that will be stored and
change it if you want to. You can also look at the program counter
and see if the program counter is the same as the trapped address
(detect executable code). I put these features in to implement
softswitches and I/O cards. I also put this listener framework in
because it mimics the "cheat" feature in MAME and could be used as
such for games. (e.g. never-ending hitpoints in Ultima) It could
probably also be used to detect sneaky accesses to floppy drives via
indexed instructions if you wanted to get creative, e.g. trap reads to
c06x and log the PC so you can find hidden RWTS routines. Obviously
the user interface doesn't lend itself to let you do this, but anyone
who wants to give a go at the source can pull such a thing off rather
trivially without having to rip apart the emulator, such as breaking
apart the Disk II interface implementation to add similar traps.
-B