CBM-ROM documentation project

Preface

The ROMs (BASIC, KERNAL) of the various Commodore computers as well as the CBM DOS of the floppy drives are well-known today, and there are many disassemblies which try to fully document them.

This information is available in printed books as well as spread over many places on the net.

In 2010, I started taking the Commodore ROMs I found for the C64, the VIC20 and their floppy drives VIC-1540, VIC-1541, VIC-1570, VIC-1571, and the cost-reduced VIC-1571 CR from the Commodore 128 DCR which also exists as a stand-online VIC-1571 CR.

The choice of C64 and 1541 came naturally, as this is what I used back in the eigthies. The VIC 20 was chosen as I always heard that the C 64 and the VIC-20 are very similar, and I wanted to know how for these similarities went.

The 1570/1571 were also a most natural choice, as these mainly extend the 1541 drive. I was surprised when I found out that the 1571 CR is a much different beast: While Commdore "normaly" tried to make the ROMs compatible to other ones, that is, they made sure that changes in the code are added as "patches" which do not change the addresses of other routines in most cases, for the 1571 CR, this is much different: The infamous 5710 chip used there as replacement for the CIA 6526 and the WD 1770 or WD1772 chip needed special programming, especially in the WD 177x-part. The firmware writers did not bother much about backward compatibility to the 1571, which made the addresses in the range $8000-$BFFF being very different to the regular 1571. It is no surprise that many programs written for the 1571 did not work with the 1571 CR. What a pity.

I also added the 1540 as the predecessor of the 1541, as it is almost identical. I also added the 2031 LP. While this seems to be surprising, because this is an IEEE-488 parallel port drive instead of the serial interface used by the C 64, VIC 20 and the drives. Again, I was curious about the exact differences, as I always had the impression that the 2031LP and the 1540 are very similar. Having a look at the schematics in the 2031 service manual and the 1541 service manual as well into the sources, it gets obvious that the drives are 90% identical.

Used ROMs

The following ROMs were used to build the sources:

The following ROMs were used for the computers:

  • Label
  • Device
  • BASIC ROM, $A/C000-$B/DFFF
  • KERNAL ROM, $E000-$FFFF
  • Commentary
  • vic20-02
  • VIC 20
  • 901486-01
  • 901486-02
  • VIC-1001, Japanese version of VIC-20
  • vic20-06
  • VIC 20
  • 901486-01
  • 901486-06
  • NTSC-M version
  • vic20-07
  • VIC 20
  • 901486-01
  • 901486-07
  • PAL version
  • c64-01
  • C 64
  • 901226-01
  • 901227-01
  • c64-02
  • C 64
  • 901226-01
  • 901227-02
  • c64-03
  • C 64
  • 901226-01
  • 901227-03
  • In combination identical to 251913-01
  • c64-03
  • C 64
  • 251913-01
  • Identical to combination of 901226-01 and 901227-03
  • c64-sx64
  • SX 64
  • 901226-01
  • 251104-04
  • Commodore SX-64
  • c64-4064
  • 4064
  • 901226-01
  • 901246-01
  • Educator 64, PET 64
  • c64-gs
  • C 64 GS
  • 390852-01
  • Commodore 64 Games System
  • c64-jp
  • C 64
  • 901226-01
  • 906145-02
  • Japanese version of C64; in between the 901227-02 and -03 ROMs

The following ROMs were used for the drives:

  • Label
  • Device
  • ROM $8000-$BFFF
  • ROM $C000-$DFFF
  • ROM $E000-$FFFF
  • Commentary
  • 2031-01
  • VIC 2031 LP
  • 901484-03
  • 901484-05
  • 1540-01
  • VIC 1540
  • 325302-01
  • 325303-01
  • 1541-01
  • VIC 1541
  • 325302-01
  • 901229-01
  • 1541-02
  • VIC 1541
  • 325302-01
  • 901229-02
  • 1541-03
  • VIC 1541
  • 325302-01
  • 901229-03
  • 1541-05
  • VIC 1541
  • 325302-01
  • 901229-05
  • 1541-06
  • VIC 1541
  • 325302-01
  • 901229-06
  • 1541c-01
  • VIC 1541 C
  • 251968-01
  • 1541C, 1541C
  • 1541c-02
  • VIC 1541 C
  • 251968-02
  • 1541C, 1541C
  • 1541c-03
  • VIC 1541-II
  • 251968-03
  • 1541-II, 1541-II
  • 1570-01
  • VIC 1570
  • 315090-01
  • 1571-03
  • VIC 1571
  • 310654-03
  • 1571-05
  • VIC 1571
  • 310654-05
  • 1571CR-01
  • VIC 1571 CR
  • 318047-01

Getting the sources

The sources are available in different formats. You can get the git repository by cloning with git clone http://cbmrom.trikaliotis.net/ cbmrom.spiro to get the sources into the directory cbmrom.spiro/.

You can browse the git online.

You can also browse the pretty-printed sources online; either all sources combined in one big file, or each file separetely in the same structure as the git repository. You can also view the output of an assembly of each computer or drive.

Have fun!

Todos

If you want to contribute, feel free to do so. What I am especially seeking is:

  • add other sources of disassembled computer, devices...
  • Use more sophisticated features of the assembler to use less if statements, so the differences get clearer
  • Clearer presentation of the differences for the web
  • Document, document, document...
  • add additional computers and drives (C128, C16, C116, Plus4, 1551, ...) - whatever makes sense

However, if you feel you can help in any other way, just contact me!