Cross Development using Crossrunner
65C816, 65C02 or 6502 assembly language using either ORCA/M or Merlin 32 assemblers.
C, using the ORCA/C ANSI C compiler.
Object Pascal, using the ORCA/Pascal compiler.
Merlin is one of the most popular Apple II assemblers, and was original written by Glen Bredon.
Merlin 32 is a free, open source, version of the assembler by Brutal Deluxe which supports Merlin 16+ syntax but runs natively on Windows, Linux and Mac OS. It can be downloaded from the Brutal Deluxe website and forks of it can be found on Github.
ORCA/M is the other main Apple II assembler, and was originally developed and sold by The Byteworks. It is still sold to this day by Juiced.GS. ORCA/M does not run natively on Windows, Linux or Mac OS. In order to cross develop with ORCA/M you need to use a compatibility layer. Crossrunner provides a compatibility layer than can be used to run ORCA/M from the Windows command line. Golden Gate is an alternative compatibility layer which also allows ORCA/M to be run from the command line.
ORCA/C and ORCA/Pascal are high level compilers that can for cross development. All three of the ORCA suite of assemblers/compilers work well together. ORCA/C and ORCA/Pascal are still being actively developed, and the latest versions of each can be found on Github.
Source Level Debugging
In addition to offering disassembly-based debugging like other emulators, Crossrunner also supports source level debugging. Step through your code line-by-line, set breakpoints, and switch between high level and low level debugging when you want.
Crossrunner also supports source level debugging/tracing through Apple IIGS ROM code (ROM 03 required) and GS/OS code. Step through the actual ROM source code, instead of disassemblies.
The Crossrunner user interface is customisable. You can add panes to display CPU registers, Ensoniq oscillator states, multiple memory views and multiple monitor views - for example Hires Page 1 and Hires Page 2.
Racing the Beam
Since Crossrunner is a cycle accurate emulator, you can use it to craft code that "races the beam". If you hover the mouse over the video counters in the Monitor pane it will show you where the beam is at.
Crossrunner can set breakpoints based on various criteria. For example, when a specified memory location is read and the value that is read is within a certain range.
Multiple breakpoint criteria can be combined, and you can even trigger scripting events when the breakpoints are hit - such as performing some logging and then automatically resuming execution.
Crossrunner has built-in support for scripting, using the Wren scripting language. The possibilities are endless. Here is an demostration of a 50 line script that prints out Applesoft commands as they are executed.