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.
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.
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.
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.
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).
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.
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.
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.