Program Development

You have this great idea of writing a wonderful program for the Apple 1! What tools can you use to make your dream come true? Here's a list of some of the available tools. This list is by no means complete, but hopefully you'll find what you need here. If not you can always google around to find more tools.

The Way Of The WOZ

To start with I would like you to consider the way how the Woz himself wrote his programs for the Apple 1, by hand assembling his code. All you need is the programming manual for the 6502, the WOZ Monitor, a pencil and a lot of paper.
You may also need a hex-calculator to calculate your branch distances. Most PC-based desktop calculators also have a "programming" mode, which allows you to do hexadecimal calculations and conversions. However let's presume that the PC is not invented yet. Here's a small program which can be used to calculate the branch distances.

1000 ;-----------------------------
1010 ; BRANCH OFFSET CALCULATOR
1020 ;-----------------------------
1030         .OR $0280
1040 ;-----------------------------
1050 STL     .EQ $26
1060 STH     .EQ $27
1070 L       .EQ $28
1080 H       .EQ $29
1090 YSAV    .EQ $2A
1100 CR      .EQ $8D
1110 IN      .EQ $0200,$027F
1120 GETLINE .EQ $FF1A
1130 PRBYTE  .EQ $FFDC
1140 ECHO    .EQ $FFEF
1150 ;-----------------------------
1160 START
1170    LDA #0    CLEAR TEMP RESULT
1180    STA L
1190    STA H
1200    LDA #CR
1210    JSR ECHO
1220 ;
1230    JSR CONVERT
1240    LDA L     SAVE ORIGIN +2
1250    ADC #2-1  (CY=1!)
1260    STA STL
1270    LDA H
1280    ADC #0
1290    STA STH
1300    STX L     CLEAR TEMP RESULT
1310    STX H     X=0 AFTER CONVERT
1320 ;
1330    LDA IN,Y
1340    CMP #"."
1350    BNE .3    FORMAT ERROR!
1360 ;
1370    JSR CONVERT
1380    LDA L
1390    SBC STL
1400    TAY       SAVE OFFSET
1410    LDA H
1420    SBC STH
1430    TAX
1440    TYA       POS OR NEG?
1450    BPL .1    POS!
1460    INX
1470 .1
1480    TXA       H SHOULD BE 0
1490    BNE .4    RANGE ERROR!
1500 ;
1510    LDA #"="
1520    JSR ECHO
1530    TYA       PRINT RESULT
1540    JSR PRBYTE
1550 .2
1560    LDA #CR
1570    JSR ECHO
1580 .3
1590    JMP GETLINE
1600 ;
1610 .4
1620    LDA #">"  RANGE ERROR
1630    JSR ECHO
1640    BPL .2    ALWAYS TAKEN!
1650 ;-----------------------------
1660 CONVERT
1670    INY
1680    STY YSAV
1690 .1
1700    LDA IN,Y
1710    EOR #"0"
1720    CMP #9+1
1730    BCC .2    DIGIT 0..9!
1740    ADC #$88
1750    CMP #$FA
1760    BCC .4    END OF HEX!
1770 .2
1780    ASL
1790    ASL
1800    ASL
1810    ASL
1820    LDX #4
1830 .3
1840    ASL
1850    ROL L
1860    ROL H
1870    DEX
1880    BNE .3    DO ALL 4 BITS!
1890    INY
1900    BNE .1    ALWAYS!
1910 .4
1920    CPY YSAV
1930    BEQ .5    NO HEX GIVEN!
1940    RTS       X=0 CY=1
1950 .5
1960    JMP GETLINE

branch offset calculator

You can assemble this small program to just about any memory location you like using the A1-Assembler (or the compatible SB-Assembler).

You start this program by typing the following command to the WOZ Monitor prompt:

280Rorigin.destination

After which the branch offset is printed. If you don't enter the origin and destination correctly, nothing will be printed and you'll return to the WOZ Monitor prompt. If the branch offset doesn't fit in one byte you'll get a range error indication in the form of a > symbol.

280R100.133

0280: A9
=31
\

The source listing of this small program is part of the A1-Assembler download package.

Apple 1 Basic

There's another way with which you don't need any extra hardware or software. Most applications can be conveniently programmed in Basic. Basic is especially useful if you want to get fast results. I don't mean that Basic programs run faster than assembly programs, but program development will certainly be faster in Basic.

I have dedicated a separate chapter to the Apple 1 Basic.

Assembler

If you want to create your programs in Assembly there are plenty of options. If you prefer to use the Apple 1 stand-alone you even have the choice between two assemblers! Otherwise there is a virtually unlimited supply of cross assemblers available for the PC or MAC.


The Krusader

Here's the first assembler which runs on the Apple 1 (credit given where credit's due, Ken was first). Ken Wessen from down under wrote it, and by the time of this writing he has just released version 1.2 which has some very interesting new debugging features. Ken's assembler has very modest memory requirements and can co-exist with the WOZ Monitor in the same 4k memory block. Replica 1 and A-One users have this assembler available in ROM (F000R).


A1-Assembler

And this is the second assembler which runs on the Apple 1. I wrote this assembler myself. My intention was to write an assembler for the Apple 1 which was reasonably compatible with the PC versions of my SB-Assembler.
The A1-Assembler has some extra assembler related features compared to the Krusader. However to be quite honest it lacks the Krusader's new debugging features. But then again, personally I have never ever used a debugger myself.

A-One users are in luck because the A1-Assembler comes in ROM on that computer (9000R). Others may load the assembler, which requires 4k of memory, in RAM.
Replica 1 users who prefer the A1-Assembler above Apple 1 Basic can even re-program their ROM. They can also install a bigger ROM and with a small modification to the main board they can switch between Apple 1 Basic and A1-Assembler.
Original Apple 1 users need at least 8kB of memory to run the A1-Assembler. But even then the usefulness of the A1-Assembler is quite limited because that will leave only about 3kB to write your source in.
Emulator users (like the POM1) can load and run the assembler from address $9000.

I have dedicated a separate chapter for the A1-Assembler.


SB-Assembler

A more convenient way to create your programs is by writing them on a PC. Years ago I wrote my own cross assembler for the PC called the SB-Assembler. You can freely download and use it if you like. If you know the SB-Assembler already you will need little time to switch to the A1-Assembler.
The SB-Assembler comes with many different crosses, which enable you to write programs for other microprocessors as well.

For instance I wrote the A1-Assembler using my SB-Assembler. And I used the POM 1 emulator to test the software. Once the software is ready to run on real hardware you can transfer the generated code somehow.
The easiest way of course is when you can upload it using a serial connection. For that purpose the SB-Assembler can generate WOZ Monitor readable code.
If you own an original Apple 1 without a serial interface you'll have to enter the code by hand.

You can read more about the SB-Assembler elsewhere on this site.

Other Programming Platforms

I have presented you with some tools which I am familiar with. Obviously that is not all there is out there. Apart from my own SB-Assembler there are many other cross assemblers and cross compilers out there which run on a PC and can create 6502 code.
I have even heard about Forth compilers running on the Apple 1.

If you know of another useful addition to this page you can always send me an email.