Portable emulator of an Apple ][+ or //e. Written in Go. Runs Total Replay.
Go to file
Iván Izaguirre cb355a17cd Improve the option to panic on undefined softswitches 2024-03-09 20:09:12 +01:00
.circleci Use go 1.18 2022-04-18 16:17:42 +02:00
.github/workflows Fix github action 2022-05-11 22:49:37 +02:00
component Fixing lint warnings 2021-08-05 21:12:52 +02:00
configs Ralle Palaveev's ProDOS-Romcard3 2024-03-08 21:36:27 +01:00
doc Improve the option to panic on undefined softswitches 2024-03-09 20:09:12 +01:00
dockerbuild MacOS x64 builds 2024-03-04 20:47:59 +01:00
frontend Help info with F1 2024-02-13 23:39:25 +01:00
fujinet Using sonarqube 2023-09-15 17:39:21 +02:00
resources Apple II rev 0 model 2024-02-08 20:34:49 +01:00
screen Help info with F1 2024-02-13 23:39:25 +01:00
storage Change diskettes with drag and drop 2023-04-04 18:35:13 +02:00
woz_test_images Woz protections automatic tests 2022-02-26 00:05:09 +01:00
.gitignore Configuration redone 2024-01-06 21:48:23 +01:00
LICENSE Create LICENSE 2019-02-16 21:03:59 +01:00
README.md Improve the option to panic on undefined softswitches 2024-03-09 20:09:12 +01:00
a2audit_test.go Some traces for CP/M 65, test for CP/M 65 boot and some other changes 2024-01-25 22:20:22 +01:00
apple2.go Reverse 6 colors mod 2024-02-08 20:24:37 +01:00
apple2Run.go Dan ][ Controller card 2024-01-30 00:33:53 +01:00
apple2Tester.go Improve usage message and automate the inclusion in README.md 2024-02-12 20:45:52 +01:00
base64a.go ROM can be paged, refactor the Base64A ROM 2024-01-22 23:09:35 +01:00
cardBase.go Dan ][ Controller card 2024-01-30 00:33:53 +01:00
cardBrainBoard.go Remove setBase from memeryHandler, it is not needed 2024-03-04 21:36:45 +01:00
cardBrainBoard2.go Remove setBase from memeryHandler, it is not needed 2024-03-04 21:36:45 +01:00
cardBrainBoard_test.go Original BrainBoard card 2024-01-27 17:28:54 +01:00
cardBuilder.go Improve the option to panic on undefined softswitches 2024-03-09 20:09:12 +01:00
cardCat_test.go Some traces for CP/M 65, test for CP/M 65 boot and some other changes 2024-01-25 22:20:22 +01:00
cardDan2Controller.go uint8 params 2024-02-13 22:51:05 +01:00
cardDan2Controller_test.go Dan ][ Controller card 2024-01-30 00:33:53 +01:00
cardDisk2.go Card Disk II softswitches are active also on writes. CP/M 85 relies on that. 2024-01-25 18:42:59 +01:00
cardDisk2DriveStepper.go The disk continues turning for 1 second after the turn off command. Bouncing Kamungas now works. 2021-05-10 22:13:55 +02:00
cardDisk2Sequencer.go Card Disk II softswitches are active also on writes. CP/M 85 relies on that. 2024-01-25 18:42:59 +01:00
cardDisk2SequencerDrive.go Support for 4 disks on the command line. Support tyo trace track changes. 2023-09-25 20:55:06 +02:00
cardFastChip.go Better usage info 2024-02-08 22:17:14 +01:00
cardInOut.go Configuration redone 2024-01-06 21:48:23 +01:00
cardLanguage.go Configuration redone 2024-01-06 21:48:23 +01:00
cardLogger.go Configuration redone 2024-01-06 21:48:23 +01:00
cardMemoryExpansion.go Better usage info 2024-02-08 22:17:14 +01:00
cardMouse.go Fixes on the Mouse card 2024-02-12 23:24:57 +01:00
cardMultiRom.go Remove setBase from memeryHandler, it is not needed 2024-03-04 21:36:45 +01:00
cardParallelPrinter.go uint8 params 2024-02-13 22:51:05 +01:00
cardProDOSRomCard3.go Ralle Palaveev's ProDOS-Romcard3 2024-03-08 21:36:27 +01:00
cardProDOSRomDrive.go Ralle Palaveev's ProDOS-Romcard3 2024-03-08 21:36:27 +01:00
cardRGB.go Fix for the same issue on RGB card as mamedev 10975 2023-03-10 21:10:20 +01:00
cardRamWorks.go Configuration redone 2024-01-06 21:48:23 +01:00
cardSaturn.go Better usage info 2024-02-08 22:17:14 +01:00
cardSmartport.go Configuration redone 2024-01-06 21:48:23 +01:00
cardSwyft.go Remove setBase from memeryHandler, it is not needed 2024-03-04 21:36:45 +01:00
cardSwyft_test.go Some traces for CP/M 65, test for CP/M 65 boot and some other changes 2024-01-25 22:20:22 +01:00
cardThunderClockPlus.go Trace sofswitches per card 2024-01-27 17:21:54 +01:00
cardVidHD.go Better usage info 2024-02-08 22:17:14 +01:00
cardVidex.go Remove setBase from memeryHandler, it is not needed 2024-03-04 21:36:45 +01:00
characterGenerator.go Configuration redone 2024-01-06 21:48:23 +01:00
command.go Support for 4 disks on the command line. Support tyo trace track changes. 2023-09-25 20:55:06 +02:00
configuration.go Improve usage message and automate the inclusion in README.md 2024-02-12 20:45:52 +01:00
configuration_test.go Improve usage message and automate the inclusion in README.md 2024-02-12 20:45:52 +01:00
e2e_boot_test.go Dan ][ Controller card 2024-01-30 00:33:53 +01:00
e2e_woz_test.go Configuration redone 2024-01-06 21:48:23 +01:00
go.mod Update dependencies to get more undocumented opcodes from iz6502 2024-01-22 21:02:57 +01:00
go.sum Update dependencies to get more undocumented opcodes from iz6502 2024-01-22 21:02:57 +01:00
ioC0Page.go Improve the option to panic on undefined softswitches 2024-03-09 20:09:12 +01:00
keyboard.go Adding a --forceCaps flag to ensure all keypresses are in caps. Particularly useful if you are multitasking! 2020-11-03 15:01:28 +01:00
memoryManager.go Ralle Palaveev's ProDOS-Romcard3 2024-03-08 21:36:27 +01:00
memoryRange.go Some traces for CP/M 65, test for CP/M 65 boot and some other changes 2024-01-25 22:20:22 +01:00
noSlotClockDS1216.go Remove setBase from memeryHandler, it is not needed 2024-03-04 21:36:45 +01:00
resources.go Tilde expansion for path parameters is slot configuration strings 2024-03-09 19:22:04 +01:00
romX.go Configuration redone 2024-01-06 21:48:23 +01:00
setup.go Reverse 6 colors mod 2024-02-08 20:24:37 +01:00
smartPortCall.go Rename SmartPort constants 2022-10-31 22:57:18 +01:00
smartPortFujinetClock.go Imaginary Fujinet Clock device with prodos datetime format 2022-11-14 18:47:14 +01:00
smartPortFujinetNetwork.go Imaginary Fujinet Clock device 2022-11-01 16:57:45 +01:00
smartPortHardDisk.go Rename SmartPort constants 2022-10-31 22:57:18 +01:00
softSwitches2.go Simplify softswitches 2022-08-05 19:43:17 +02:00
softSwitches2e.go Simplify softswitches 2022-08-05 19:43:17 +02:00
softVideoSwitch.go Videx Videoterm 80 columns card support. Videx Soft Video Switch support 2021-03-14 18:46:52 +01:00
traceApplecorn.go Configuration redone 2024-01-06 21:48:23 +01:00
traceBuilder.go Improve the option to panic on undefined softswitches 2024-03-09 20:09:12 +01:00
traceCpm65.go Some traces for CP/M 65, test for CP/M 65 boot and some other changes 2024-01-25 22:20:22 +01:00
tracePascal.go Configuration redone 2024-01-06 21:48:23 +01:00
traceProDOS.go Configuration redone 2024-01-06 21:48:23 +01:00
trackTracer.go Support for 4 disks on the command line. Support tyo trace track changes. 2023-09-25 20:55:06 +02:00
videoSourceImpl.go Reverse 6 colors mod 2024-02-08 20:24:37 +01:00

README.md

izapple2 - Apple ][+, //e emulator

Portable emulator of an Apple II+ or //e. Written in Go.

Features

  • Models:

    • Apple ][+ with 48Kb of base RAM
    • Apple //e with 128Kb of RAM
    • Apple //e enhanced with 128Kb of RAM
    • Base64A clone with 48Kb of base RAM and paged ROM
  • Storage

    • 16 Sector 5 1/4 diskettes. Uncompressed or compressed witth gzip or zip. Supported formats:
    • 3.5 disks in PO or 2MG format
    • Hard disk in HDV or 2MG format with ProDOS and SmartPort support
  • Emulated extension cards:

    • DiskII controller (state machine based for WOZ files)
    • 16Kb Language Card
    • 256Kb Saturn RAM
    • Parallel Printer Interface card
    • 1Mb Memory Expansion Card (slinky)
    • RAMWorks style expansion Card (up to 16MB additional) (Apple //e only)
    • ThunderClock Plus real time clock
    • Apple //e 80 columns card with 64Kb extra RAM and optional RGB modes
    • No Slot Clock based on the DS1216
    • Videx Videoterm 80 column card with the Videx Soft Video Switch (Apple ][+ only)
    • SwyftCard (Apple //e only)
    • Brain Board
    • Brain Board II
    • MultiROM card
    • Dan ][ Controller card
    • ProDOS ROM card
  • Useful cards not emulating a real card

    • Bootable SmartPort / ProDOS card with the following smartport devices:
      • Block device (hard disks)
      • Fujinet network device (supports only http(s) with GET and JSON)
      • Fujinet clock (not in Fujinet upstream)
    • VidHd, limited to the ROM signature and SHR as used by Total Replay, only for //e models with 128Kb
    • FASTChip, limited to what Total Replay needs to set and clear fast mode
    • Mouse Card, emulates the entry points, not the softswitches.
    • Host console card. Maps the host STDIN and STDOUT to PR# and IN#
    • ROMXe, limited to font switching
  • Graphic modes:

    • Text 40 columns
    • Text 80 columns (Apple //e and Videx VideoTerm)
    • Low-Resolution graphics
    • Double-Width Low-Resolution graphics (Apple //e only)
    • High-Resolution graphics
    • Double-Width High-Resolution graphics (Apple //e only)
    • Super High Resolution (VidHD only)
    • Mixed mode
    • RGB card text 40 columns with 16 colors for foreground and background (mixable)
    • RGB card mode 11, mono 560x192
    • RGB card mode 12, ntsc 160*192
    • RGB card mode 13, ntsc 140*192 (regular DHGR)
    • RGB card mode 14, mix of modes 11 and 13 on the fly
  • Displays:

    • Green monochrome monitor with half width pixel support
    • NTSC Color TV (extracting the phase from the mono signal)
    • RGB for Super High Resolution and RGB card
    • ANSI Console, avoiding the SDL2 dependency
    • Debug mode: shows four panels with actual screen, page1, page2 and extra info dependant of the video mode
  • Tracing capabilities:

    • CPU execution disassembled
    • Softswitch reads and writes
    • ProDOS MLI calls
    • Apple Pascal BIOS calls
    • SmartPort commands
    • BBC MOS calls when using Applecorn
  • Other features:

    • Sound
    • Joystick support. Up to two joysticks or four paddles
    • Mouse support. No mouse capture needed
    • Adjustable speed
    • Fast disk mode to set max speed while using the disks
    • Single file executable with embedded ROMs and DOS 3.3
    • Pause (thanks a2geek)
    • Passes the A2AUDIT 1.06 tests as II+, //e, and //e Enhanced.
    • Partial pass ot the ProcessorTests for 6502 and 65c02. Failing test 6502/v1/20_55_13; flags N anv V issues with ADC; and missing some undocumented 6502 opcodes.

By default the following configuration is launched:

  • Enhanced Apple //e with 65c02 processor
  • RAMWorks card with 80 column, RGB (with Video7 modes) and 8Gb RAM in aux slot
  • Parallel print inteface in slot 1
  • VidHD card (SHR support) in slot 2
  • FASTChip Accelerator card in slot 3
  • Mouse card in slot 4
  • SmartPort card with 1 device in slot 5 (if an image is provided with -disk35)
  • DiskII controller card in slot 6
  • SmartPort card with 1 device in slot 7 (if an image is provided with -hd)

Running the emulator

No installation required. Download the single file executable izapple2xxx_xxx for linux or Mac, SDL2 graphics or console. Build from source to get the latest features.

Default mode

Execute without parameters to have an emulated Apple //e Enhanced with 128kb booting DOS 3.3 ready to run Applesoft:

casa@servidor:~$ ./izapple2sdl

DOS 3.3 started

Play games

Download a DSK or WOZ file or use an URL (Asimov is an excellent source):

casa@servidor:~$ ./izapple2sdl "https://www.apple.asimov.net/images/games/action/karateka/karateka (includes intro).dsk"

Karateka

Play the Total Replay collection

Download the excellent Total Replay compilation by a2-4am:

casa@servidor:~$ ./izapple2sdl Total\ Replay\ v4.0.hdv

Displays super hi-res box art as seen with the VidHD card.

Total Replay

Terminal mode

To run text mode right on the terminal without the SDL2 dependency, use izapple2console. It runs on the console using ANSI escape codes. Input is sent to the emulated Apple II one line at a time:

casa@servidor:~$ ./izapple2console -model 2plus

############################################
#                                          #
#                APPLE II                  #
#                                          #
#     DOS VERSION 3.3  SYSTEM MASTER       #
#                                          #
#                                          #
#            JANUARY 1, 1983               #
#                                          #
#                                          #
# COPYRIGHT APPLE COMPUTER,INC. 1980,1982  #
#                                          #
#                                          #
# ]10 PRINT "HELLO WORLD"                  #
#                                          #
# ]LIST                                    #
#                                          #
# 10  PRINT "HELLO WORLD"                  #
#                                          #
# ]RUN                                     #
# HELLO WORLD                              #
#                                          #
# ]_                                       #
#                                          #
#                                          #
############################################
Line:

Command line options

Usage:  izapple2 [file]
  file
    	path to image to use on the boot device
  -charrom string
    	rom file for the character generator (default "<internal>/Apple IIe Video Enhanced.bin")
  -cpu string
    	cpu type, can be '6502' or '65c02' (default "65c02")
  -forceCaps
    	force all letters to be uppercased (no need for caps lock!)
  -model string
    	set base model (default "2enh")
  -mods string
    	comma separated list of mods applied to the board, available mods are 'shift', 'four-colors
  -nsc string
    	add a DS1216 No-Slot-Clock on the main ROM (use 'main') or a slot ROM (default "main")
  -profile
    	generate profile trace to analyse with pprof
  -ramworks string
    	memory to use with RAMWorks card, max is 16384 (default "8192")
  -rgb
    	emulate the RGB modes of the 80col RGB card for DHGR
  -rom string
    	main rom file (default "<internal>/Apple2e_Enhanced.rom")
  -romx
    	emulate a RomX
  -s0 string
    	slot 0 configuration. (default "language")
  -s1 string
    	slot 1 configuration. (default "empty")
  -s2 string
    	slot 2 configuration. (default "vidhd")
  -s3 string
    	slot 3 configuration. (default "fastchip")
  -s4 string
    	slot 4 configuration. (default "empty")
  -s5 string
    	slot 5 configuration. (default "empty")
  -s6 string
    	slot 6 configuration. (default "diskii,disk1=<internal>/dos33.dsk")
  -s7 string
    	slot 7 configuration. (default "empty")
  -speed string
    	cpu speed in Mhz, can be 'ntsc', 'pal', 'full' or a decimal nunmber (default "ntsc")
  -trace string
    	trace CPU execution with one or more comma separated tracers (default "none")

The available pre-configured models are:
  2: Apple ][
  2e: Apple IIe
  2enh: Apple //e
  2plus: Apple ][+
  base64a: Base 64A
  swyft: swyft

The available cards are:
  brainboard: Firmware card. It has two ROM banks
  brainboard2: Firmware card. It has up to four ROM banks
  dan2sd: Apple II Peripheral Card that Interfaces to a ATMEGA328P for SD card storage
  diskii: Disk II interface card
  diskiiseq: Disk II interface card emulating the Woz state machine
  fastchip: Accelerator card for Apple IIe (limited support)
  fujinet: SmartPort interface card hosting the Fujinet
  inout: Card to test I/O
  language: Language card with 16 extra KB for the Apple ][ and ][+
  memexp: Memory expansion card
  mouse: Mouse card implementation, does not emulate a real card, only the firmware behaviour
  multirom: Multiple Image ROM card
  parallel: Card to dump to a file what would be printed to a parallel printer
  prodosromcard3: A bootable 4 MB ROM card by Ralle Palaveev
  prodosromdrive: A bootable 1 MB solid state disk by Terence Boldt
  saturn: RAM card with 128Kb, it's like 8 language cards
  smartport: SmartPort interface card
  softswitchlogger: Card to log softswitch accesses
  swyftcard: Card with the ROM needed to run the Swyftcard word processing system
  thunderclock: Clock card
  videx: Videx compatible 80 columns card
  vidhd: Firmware signature of the VidHD card to trick Total Replay to use the SHR mode

The available tracers are:
  cpm65: Trace CPM65 BDOS calls
  cpu: Trace CPU execution
  mli: Trace ProDOS MLI calls
  mos: Trace MOS calls with Applecorn skipping terminal IO
  mosfull: Trace MOS calls with Applecorn
  panicss: Panic on unimplemented softswitches
  ss: Trace sotfswiches calls
  ssreg: Trace sotfswiches registrations
  ucsd: Trace UCSD system calls

Building from source

Linux

Besides having a working Go installation, install the SDL2 developer files. Run:

git clone github.com/ivanizag/izapple2
cd izapple2/frontend/a2sdl
go build .

MacOS

With a working Go installation, run:

brew install SDL2
git clone github.com/ivanizag/izapple2
cd izapple2/frontend/a2sdl
go build .

Windows

On Windows, CGO needs a gcc compiler. Install mingw-w64 and the SDL2 developer files for mingw-64.

Run:

git clone github.com/ivanizag/izapple2
cd izapple2\frontend\a2sdl
go build .

To run in Windows, copy the file SDL2.dll on the same folder as a2sdl.exe. The latest SDL2.dll can be found in the Runtime binary for Windows 64-bit.

Use docker to cross compile for Linux and Windows

To create executables for Linux and Windows without installing Go, SDL2 or the Windows cross compilation toosl, run:

cd docker
./build.sh