Burning ROMs with VIC and the Promenade C1

If you are like me you may be wondering if it was/is ever possible to burn your own ROMs on a Commodore VIC-20. I made the first cartridge of my life tonight (12/9/2010). I also did it 100% using the VIC-20. The Jason-Ranheim Company (San Jose / Auburn) sold a variety of eprom related products for the VIC-20 circa 1983, and produced the Promenade C1 EPROM programmer. The Promenade C1 has been cloned by several people and is seen by many as the eprommer standard in the USA. If this motivates you then you will need a few things that are fading fast from people's memories and are hard to find on the Internet without a lot of research. I've grouped them here for your convenience:

1. Promenade C1 clone or original if you can find it on eBay. You would not need the Megabit Programmer add-on board for this project.
2. Promos 1.1 software for VIC 20 from Andrew Wiskow's site. ...As an alternative to retrieve the binary, right-click and "Save Link As..." my local copy.
3. Promos 1.x documentation from Mike Naberezny's site.
4. Auto-Start BASIC Programs document for Promos 1.1 from Mike Naberezny's site.
5. vicautostartbasic.prg from the "Auto-Start BASIC Programs" document above.
6. VIC 20 - do an eBay search
7. 8k RAM in BLK5 = $A000-$BFFF - do an eBay search for a VIC-20 8K RAM expander
8. 2764 or 2764A EPROMs - do a 'Google Shopping' web search.
9. Proto Board / empty cartridge socket*
10. UV light EPROM eraser - do an eBay search

*I sacrificed a Commodore Artist w/ stick-on label. (Sorry.) I definitely also remember my Gorf growing up as EPROM'd w/ stick-on label, so I'm going to go out on a limb and say the Commodore cartridges with metal covers and stick-on labels are likely to contain socketed EPROMs. You can use a flashlight to shine down into the top slit of the cartridge and look for a socketed EPROM before cracking the case.

STEP 0 (pre-work): Erase your EPROMs (even if they are new) using the UV Light. Let them bake 30-60 minutes depending on the age of your UV lightbulb. You'll also need to know how large your object code is in bytes (the BASIC code you want to put on the cartridge ROM). Maybe do some test and use the PRINT FRE(0) command to figure out how large your code is. Write that number down. Mine was a little under 3,500 bytes, so I just rounded up.

STEP 1: Type & RUN the program code from #5 above.


Program listing of vicautostartbasic.prg for the Vic 20

 LOAD address $1001

 1 REM VIC 20
 3 FORI=0TO66
 5 POKE40960+I,A
 7 DATA9,160,86,255,65,48,195,194
 8 DATA205,32,141,253,189,129,2,149
 9 DATA8,189,41,160,157,129,2,189
 10 DATA43,160,157,119,2,232,224,2
 11 DATA144,234,240,243,134,198,76,50
 12 DATA253,46,160,82,213,13,0,67
 13 DATA160,0,0,151,52,54,44,194
 14 DATA40,57,41,58,156,58,153,34
 15 DATA147,34,0

Converted to HTML using prgread.exe v1.45 by Lee Davison


STEP 2: Note the start of basic and write it down somewhere.


STEP 3: Poke the start of basic to 41027 ($A043).

POKE 43,67:POKE 44,160[RETURN]

STEP 4: Load your object code, but don't run it.

STEP 5: Poke back the start of basic from STEP 2 above.


STEP 7: LOAD and RUN Promos 1.1 for VIC.

STEP 8: Drop in your EPROM and latch the ZIF socket.

STEP 9: For #MEM END# below, take the size of your object code from STEP 0 above and add 41027 bytes. Where you see the "pi" sign below you are to enter that symbol from your VIC-20's keyboard.

- If you are using a 2764 EPROM, it takes 21 volts to program it. Type:
40960,#MEM END#,0,5,3[RETURN]

- If you are using a 2764A EPROM, it takes 12.5 volts to program it. Type:
40960,#MEM END#,0,6,14[RETURN]

In a few minutes your EPROM will be ready. The C1 unit will humm and vibrate during the program cycle. This is normal.

STEP 10: Tpye "Z" and hit [RETURN]. Remove your EPROM from the Promenade ZIF socket. Place it in your proto board and test it in the VIC-20 cartridge port now. To the left is my proto board (also with its own ZIF socket). Your BASIC code will automatically load and run when you start your computer. If all else fails... read the documentation.