Florence is an Apple IIGS emulator originally written in Java 1.3, and now ported to Objective-C under Cocoa for Mac OS X.
Changes
1.0d2 - 21st April 2008
Finished port of IWM and threading code.
1.0d1 - 3rd April 2008
Built initial VGC support.
Name changed and versioning reset.
2.0d1 - 24th January 2008
Completed initial conversion of CPU, MMU and debugger to Objective-C under Cocoa. Now runs as an OS X native app. Not bad for only a week's work.
1.0d35 - 12th June 2002
Some more speed improvements (around 10%) for standard hires through some additional look up tables. (Lucky that memory is cheap these days)
Speed improvements overall by around 20% through debug string optimizations.
Hires wasn't displaying hi bit colours (blue and orange). Fixed.
1.0d34 - 11th June 2002
Replaced debugger button names with remote control style icons and tool tip text.
1.0d33 - 10th June 2002
Improved graphics performance by 4x with some double buffering and image caching tricks.
Emulated code running on text page wasn't fetching 8 bit bytes, causing an exception. Fixed.
New command line switch -jv to display Java version information on startup.
Time stamp now displayed on console lines.
1.0d32 - 14th April 2002
New command line switch -meter to turn on instruction metering. New meter window displays crude total instructions executed and rough instructions per second.
1.0d31 - 29th March 2002
Built framework for varying display types (text, hires, super etc.)
Added more VGC soft switches for video display mode handling.
VGC was using location $0800 for screen storage. No effect, just wasted code. Fixed.
Hires implemented. Now runs copy protected Alien Rain. Woohoo!
1.0d30 - 26th March 2002
Implemented ADB type ahead buffer (supports 256, but is equate change).
Refactored breakpoints ready for masking support.
1.0d29 - 24th March 2002
Speed improvements for VGC. Screen is now about five times faster on simple character updates.
Implemented full correct Apple IIgs key mappings in ADB, including modifiers, repeat and any key down. (Ugly in Unicode Java, but works well)
1.0d28 - 23th March 2002
5.25" support integrated into IWM.
IWM now supports everything except writing. (can read and move around on 5.25" and 3.5" nibblized images)
VGC wasn't clearing the top line of the 40 column screen correctly. Fixed.
New command line switch to load nibblized images into slots 5 and 6, drives 1 and 2.
New "[modulename]s" command in xdebugger to show status of each module. So far only IWM supported.
In a few circumstances, debugging access to I/O registers were actually triggering I/O. Fixed.
1.0d27 - 22nd March 2002
Keyboard now supported through ADB. (Can now boot to DOS 3.3, write/run Applesoft code, drop to monitor and use GS monitor etc. First time in monitor looking at memory was spooky!)
1.0d26 - 21st March 2002
Added stepper motor support for 5.25". Now boots 5.25" nibblized disk images. (Which means there's now a whole bunch of software it will run)
Now saves and restores BRAM to a file.
1.0d25 - 20th March 2002
Now reads/boots 5.25" nibblized disk images. (DOS 3.3 master boots until track seek required)
1.0d24 - 17th March 2002
Initial implementation of IWM with minimal support.
1.0d23 - 11th November 2001
Basic ADB functionality implemented. Now runs to slot 6 boot code and spins with no drive attached. Looking good.
New command line parameter -logadb turns on ADB emulation diagnostics.
Debugger now monos itself when doing a step over.
Debugger now disassembles tool call names ala GSBug.
1.0d22 - 29th October 2001
Real time clock rewritten. Now supports all functions except for time (amusing if you don't know the Apple IIgs).
New command line parameter -logclock turns on real time clock emulation diagnostics.
Xdebug switch was turning internal debugging off instead of on. Fixed.
When in run mode, debugger now "monos" itself to show that the various displays are no longer valid.
Debugger wasn't able to read from $C010 to $C01F switches. Fixed.
Debugger setting of breakpoint while CPU running wasn't updating the debugger display with the new breakpoint. Fixed.
1.0d21 - 14th October 2001
Can now set breakpoint counters instead of just defaulting to 0
1.0d20 - 10th October 2001
Changed debugger "Special" button to "Run". Breakpoints now provide the functionality of Special
Application/main class name changed from JavaA2 to AppleIIgs
1.0d19 - 9th October 2001
Breakpoints now support GSBug style counters
Register display is now larger and easier to read
1.0d18 - 7th October 2001
Moved development environment from CodeWarrior for Windows to BBEdit on Mac OS X
Implemented MVN and MVP
Added overflow support to ADC, SBC and BIT
Can now set breakpoints and watchpoints from the debugger. Breakpoints now break, watchpoints don't yet watch
Now displays version on debugger
Version and code name no longer hard coded
1.0d17 - 6th October 2001
VGC fetch from text screen exception. Fixed
1.0d16 - 30th August 2001
Moved all preferences and startup arguments into preferences object
Added -novbl argument to dummy vbl speed up
Threads are now all named appropriately
Debugger can now switch between various step/trace modes asynchronously
Added initialisation complete message
Cleaned up console displays
BRK wasn't pushing status register in native mode. Fixed
Implemented COP, RTI, STP and WDM instructions
No addressing mode instructions now disassemble neater
Added -logall argument to turn all logging options on
Refactored logging management
Re-enabled Debugger Trace now that Debugger is async (ie. it can be stopped while tracing)
Refactored Supervisor, too many changes to mention. Supervisor = console debugging interface, similar to the Apple II monitor, but external to the emulator, so it is always available. Mainly a test bed for Debugger features before moving into the Debugger, but still available via -supervisor argument at start up
Added external devo test support code
1.0d15 - 26th August 2001
Debugger stop was doing a step. Fixed
Added -debugger, -help, -loginits, -log65816, -Xdebug, -nolog and -rom romname command line arguments
Step out fixed. Two problems: Debugger display not updating, test case I was using never actually returns
Special now updates Debugger displays after the trigger fires
Operand fetch cache wasn't single touching. Fixed
ORA (d,x) didn't have an addressing mode. Fixed
ADC [d] wasn't registered as a valid instruction and didn't have an addressing mode
XCE was shortening mx on switch to native. Weird this never showed up before. Fixed
Debugger wasn't predicting mx switches for disassembly correctly. Fixed
Debugger now shows start up message
Absolute indirect addressing wasn't actually doing the direct part (COUT never calls COUT1 :-)
JMP and JSR were only getting operand, not operand result. Fixed
Absolute indexed indirect refactored
Added ROM symbols (826 to be precise) for disassembly/Debugger (see screen shot for example)
Removed wasted space in disassembly line
Generally cleaned up Debugger display
Skip wasn't updating instruction list with new location. Fixed
First cut at VGC. Supports 40 column text with C022 text/background color support
Implemented VBL with close to correct timings (standard Java won't do fractions of a millisecond, so is slightly longer than normal VBL. Could be refactored later to rectify using odd/even averaging)
Emulator now exits when main Apple IIgs window is closed
We now have a running Apple IIgs! Time for bed...
1.0d14 - 24th August 2001
Rewrote Debugger in Swing with custom JComponents. Improved speed of Debugger x10. (no shit!)
1.0d13 - 21st August 2001
JMP indirect was JMP absolute. Fixed
Debugger special trigger was stepping an extra instruction. Fixed
Now times execution blocks to nearest millisecond, although timings vary due to JVM having to deal with varying operating systems. For reset to $FC58 (on clock failure):
Win98 = 5930ms (5.93s) -- Varies between 5880ms and 6100ms
SBC was setting borrow around the wrong way. Fixed
Added simple step over support to Debugger
Adjusted some Debugger controls now that I've seen the layout on four platforms
1.0d12 - 20th August 2001
Debugger can now stop traces and step outs
For some reason PER was stack relative. Fixed
Initial implementation of dummy ADB GLU
Now fully traces from power on until GS startup failure "sliding apple" screen
1.0d11 - 10th August 2001
Fixed bug where multi-byte operands were big endian
Added "Skip" to Debugger
Added trace to "Debugger/console/both/none" option
Ten more instructions -- all main instructions complete
All opcodes implemented
All addressing modes implemented
Fixed bug where most N flag setters were setting Z
1.0d10 - 6th August 2001
Some performance improvements in addressing modes and non-critical MMU use
Now correctly touches 65816 address lines in read/write/read-modify-write modes
Fixed console output prefixes to be more consistent
Fixed "ROM not found message" to display correct ROM name
1.0d9 - 31st July 2001
Debugger now displays registers, stack, pre and post execution disassembly
1.0d8 - 30th July 2001
CPU engine now runs in its own dedicated thread
Debugger now runs in its own dedicated thread
1.0d7 - 28th July 2001
Initial cut at optional AWT based interactive debugger. Required now that the CPU engine can trace deep into the ROM.
Step / Trace / Trace out / Reset / Stop
Optional step/trace disassembly
1.0d6 - 27th July 2001
6 more addressing modes
1 more instruction
Improved Debugger
optional step disassembly
step out support
optional mmu monitor
configurable break watch point
1.0d5 - 26th July 2001
4 more instructions
First implementation of clock
MMU support for observer watchpoints (to implement I/O switches)
Fixed direct page indexed wrap problem
Debugger improvements
1.0d4 - 25th July 2001
2 more addressing modes
9 more instructions
Fixed offset problem in relative mode
Fixed roll bug in ASL
1.0d3 - 24th July 2001
5 more addressing modes
1.0d2 - 23rd July 2001
3 more addressing modes
16 more instructions
Improvements to disassembler
Bug fixes for two earlier addressing modes
Bug fixes for stack misplacement problems
1.0d1 - 22nd July 2001
Coding of initial CPU engine singleton
7 addressing modes
37 instructions
stack implemented
hardware reset and interrupt dispatching implemented
all registers implemented
Initial coding at MMU w/shadowing singleton
Coding of interactive disassembler for CPU engine
User selectable ROM
20th July 2001
Initial class design
Features
Interactive debugger -- Works like a hardware logic analyser, able to step/trace/stop/disassemble at the hardware level. Programmer functionality which is impossible to provide on a real machine. Watchpoints can accurately monitor I/O addresses for example.
External TCP/IP -- The ability for Marinetti or non-Marinetti applications to use TCP/IP functionality of the host platform, no longer depending upon network hardware required by a real machine.
Platform independence -- Runs on most platforms supporting Java 1.3. Already tested on Win32 (Windows 98/2000), Mac OS X and Linux.
Scalable performance -- Various areas of hardware and software emulation are multithreaded, automatically improving performance on multiprocessor CPUs, particularly Mac OS, where Java threads are directly mapped to OS X CPU processes.
Pluggable interface card emulation -- Third parties may emulate Apple II interface cards by developing Java plugin modules which conform to a common slot emulation API. Samples provided.
Escapes legacy environments -- Runs on multiple platforms, scales with hardware architectures, and is easily ported to C#/.NET, providing out of the box scalable Apple II emulation far into the future.