SWEET16 is an interpreted byte-code language invented by Steve Wozniak and implemented as part of the Integer BASIC ROM in the Apple II series of computers. It was created because Wozniak needed to manipulate 16-bit pointer data in his implementation of BASIC, and the Apple II was an 8-bit computer.
- R0 – accumulator
- R12 – subroutine stack pointer
- R13 – stores the result of all comparison operations for branch testing
- R14 – status register
- R15 – program counter
The 16 virtual registers, 32 bytes in total, are located in the zero page of the Apple II's real, physical memory map (at $00–$1F), with values stored as low byte followed by high byte. The SWEET16 interpreter itself is located from $F689 to $F7FC in the Integer BASIC ROM.
According to Wozniak, the SWEET16 implementation is a model of frugal coding, taking up only about 300 bytes in memory. SWEET16 runs at about one-tenth the speed of the equivalent native 6502 code.
|Register Ops||Nonregister Ops|
|00||RTN||(Return to 6502 mode)|
|1n||SET Rn||Constant (set)||01||BR ea||(Branch always)|
|2n||LD Rn||(Load)||02||BNC ea||(Branch if No Carry)|
|3n||ST Rn||(Store)||03||BC ea||(Branch if Carry)|
|4n||LD @Rn||(Load indirect)||04||BP ea||(Branch if Plus)|
|5n||ST @Rn||(Store indirect)||05||BM ea||(Branch if Minus)|
|6n||LDD @Rn||(Load double indirect)||06||BZ ea||(Branch if Zero)|
|7n||STD @Rn||(Store double indirect)||07||BNZ ea||(Branch if NonZero)|
|8n||POP @Rn||(Pop indirect)||08||BM1 ea||(Branch if Minus 1)|
|9n||STP @Rn||(Store Pop indirect)||09||BNM1 ea||(Branch if Not Minus 1)|
|An||ADD Rn||(Add)||0A||BK ea||(Break)|
|Bn||SUB Rn||(Subtract)||0B||RS||(Return from Subroutine)|
|Cn||POPD @Rn||(Pop double indirect)||0C||BS ea||(Branch to Subroutine)|