A very complete Commodore ROM Geneology is in MICRO Issue 41, October
'81.  I have a copy in my PET Service Reference Guide, but it's 4 pages
of tables and has handwritten additions that would be difficult to OCR.
If you're a PET fan you might have this issue around anyway.
By the way, the Service Reference Guide is a priceless piece; all
schematics and test instructions, plus diagnostic cassettes and
floppies.  I have most of the Commodore "Techtopics" monthly bulletins
also.
Kai
  ----------
 From:  Larry Anderson & Diane Hare[SMTP:foxnhare@goldrush.com]
 Reply To:      classiccmp(a)u.washington.edu
 Sent:  Monday, July 21, 1997 9:48 PM
 To:    Discussion re-collecting of classic computers
 Subject:       Preliminary PET FAQ
 I figured I'd shoot this by you guys as I am getting closer to putting
 it on my web site.  I am sure I will get some good criticism from you
 all.  If you have any additions/suggestions or additional questions to
 include, let me know.
 I also plan also to add in a couple texts on disk drive usage some PET
 memory maps (gee there are barely any PET maps on the net!) and if I
 don't find a link to one, an overview of Commodore PET BASIC (applies
 to
 64 also).
 (view with a monospaced font for best results)
 THE COMMODORE PET COMPUTER
 FREQUENTLY ASKED QUESTIONS FILE - VERSION 1.0beta
 ---------------------------------------------
 BY LARRY ANDERSSON,
 COMMODORE COLLECTOR AND PET ENTHUSIAST
 ---------------------------------------------
 WHAT MODELS OF THE PET ARE THERE?
   The PET line was Commodore's first computer line after purchasing
 MOS
   Technologies the primary design of the computer (as well as its
 microprocessor,
   the 6502) was by Chuck Peddle.  The line was labeled in series' the
 first
   series, the 2001 series, the european 3000 series, and the modern
 4000
 and
   8000 series, and the final single unit 9000 series which is the
 SuperPET.
 9" display  units (40 column x 25 line character only display):
   PET 2001series:
    Original PET:
     - Steel case                - Internal 'datasette' cassette tape
 drive
     - Blue on black 9" display  - Small 'calculator style' keyboard
     - Small shipment with 4k, most with 8k RAM
     - Original ROMs
   Large Keyboard PETs (no more internal datasette drive):
    PET 2001 xN  (x=8,16,or 32 depending on amount or RAM it was
 shipped
 with)
     - Full-size key keyboard  w/PET graphic symbols imprinted on keys
     - Upgrade ROMs
     - Many steel cased, some w/molded plastic tops.
     - many with clearer green on black displays
     - Later versions had 4.0 ROMs installed
    PET 2001 xB (labeled as CBM, Commodore Business Machine)
     - Full size xx key keyboard (no graphics symbols printed on keys)
     - Upgrade ROMs (powers up in upper/lower case mode)
     - Later versions had 4.0 ROMs installed
     - Many w/molded plastic tops some steel cased.
    PET/CBM 40xx Series (PET= N keyboard/ROM, CBM= B keyboard/ROM, xx=
 RAM)
     - 4.0 ROMs
     - molded plastic top
 12" displays - updated video controller (prone to the 'killer poke')
    - internal piezo speaker, audible startup, and right margin sound.
    - 4.0 ROMs
    PET/CBM 40xx (PET= N keyboard/ROM, CBM= B keyboard/ROM, xx= RAM)
     - 40 x 25 display, upgradable to 80 columns
     - lower case availabe by CHR$(14) which also changes line spacing.
  80 column series (can be set to 40 column mode via software.)
    CBM 80xx
     - 80 x 25 display, powers-up in upper/lower case.
     - buisness xx key keyboard
     - later versions had 64k & 96k RAM expansion board options.
     - 4.0 ROMs
    PET SP9000 SuperPET (or Micro Mainframe)
     - 80 x 25 display              - 6809 co-processor board
     - 96k RAM                      - True RS-232 interface
     - Multiple charactersets (for APL, etc.)
     - Avalability of disk Based languages
 MOTHERBOARD SERIES
  2000 series(9" CRT)           3000 & 4000 series  (8" CRT)
             IEEE user tape #2             IEEE user tape #1
      +------####-####--##-+        +------####-####--##-+
      !                    #        !                   #!
      !                    #        !                   #!
      !                    # exp    !                   #! exp
      !                    # bus    !        ROMS       #! bus
      !                    #        !    F E D C A B 9  #!
      !                    #        !                   #!
      !                    !        !                    !
      !                    !        !                    !
      !          ROMS      !        !                    !
      !      F E D C A B 9 !        !                    !
      !                    !        !                    !
 tape #       RAM MEMORY   !   tape #      RAM MEMORY    !
  #1  #                    !    #2  #                    !
      +--------------------+        +--------------------+
  4000/8000 series (12" CRT)
             IEEE user tape #1
      +------####-####--##-+
      !                  # # tape
      !                  # #  #2
      !  R       exp bus # !
      !  A                #!     2000 Series
      !  M             9  #!       circa 1977/78  Max RAM - 8k
      !                A  #!       [daughterboard exp to 32k]
      !  M           R B   !
      !  E           O C   !     3000 & 4000 Series
      !  M           M D   !       circa 1979/80  Max RAM - 32k
      !  O           S E   !
      !  R             F   !     4000 & 8000 Series
      !  Y                 !       circa 1981     Max RAM - 32k*
      !                spkr!       [daughterboard exp to 96k]
      +--------------------+
 WHAT VERSION OF ROMS DO I HAVE ON MY PET?
   The PET/CBM line had three major ROM revisions as well as a few
 minor
 ones,
   you cannot reliably determine the ROMs by looking at the outside of
 the PET
   (unless it has a large monitor).  Fortunately there is an easy way
 to
   distinguish the three various versions by just turning on the
 computer.
   Depending on how your start-up message looks you can determine the
 ROM
   version:
   *** COMMODORE BASIC ***  - Original ROMs sometimes referred to as
 2.0*
 ROMs.
                              (only found in the older calculator
 keyboard style
                              PETs)  Occupy $C000-$FFFF
   ### COMMODORE BASIC ###  - Commonly known as the 'Upgrade ROMs'
 sometimes
                              referred to as 2.0 or 3.0 ROMs depending
 on
 who
                              you ask. Occupy $C000-$FFFF
   *** COMMODORE BASIC 4.0 *** - 4.0 ROMs  The only ROMs that will work
 on
                                 large-screen PETs.  Occupy $B000-$FFFF
    * Some people contend that BASIC version 1.0 never made it out of
 beta
      development and the PET line started with version 2.0 ROMs...
 Commodore
      on the other hand usually refers to the 'Upgrade ROMs' as V2, or
 2.0.
      For the sake of sanity in this FAQ I will refer to them as
 original
 and
      upgrade ROMs, and as for an opinion I will go with the company's
 numbering
      (which leaves V 3.0 out of the picture).
 WHAT ARE THE DIFFERENCES AND/OR BUGS OF MY VERSION OF BASIC?
  Original ROMs
   Commodore had not yet implemented the IEEE-488 disk routines.
 Arrays
 are
   limited to 256 elements due to a bug in firmware.  There is no
 machine
 language
   monitor nor could the PEEK command access locations above memory
 location
   49152.  The upper/lower case character set was inverted (SHIFT for
 lower
   case)  (note: reading my sources there are ALOT of bugs, will take a
 while to
   compile them)
  Upgrade ROMs
   Many Original ROM bugs were squashed.  BASIC commands and
 capabilities
 very
   much like the Commodore 64's.  Now includes a tiny ML monitor and
 IEEE-488
   disk operability.  Easter Egg - enter WAIT 6502,x to see MICROSOFT!'
 displayed
   on the screen x number of times.
  4.0 ROMs*
   Addition of direct Disk operation commands DLOAD, DSAVE, COPY,
 HEADER,
 etc.
   Ability to repeat cursor control characters by holding down keys.
 Reserved
   DOS error-channel variables: DS,DS$.  Added screen 'window'
 formatting
 control
   characters.
   * The small screen-and large screen versions of these ROMs differ
 and
   some software developed for the small-screen 4.0 ROMS crash on the
 large
   screen units.  This is due to the necessary changes made for the new
 video
   controller of the 12" display PETs.
 CAN I RUN VIC-20, 64, 128, PLUS/4, OR C-16 SOFTWARE ON MY PET?
   Maybe.  Any program that is all BASIC that does not use hi-res
 graphics or
   sound and contains no POKES should work readily on a PET.  Of course
 if it
   contains POKEs, sound commands, and Machine Language conversion will
 be
   nessasary.  If it rely on more than  one voice of sound, hi-res
 grpahics,
   programmable character sets or color, it may not be worth converting
 because
   those features aren't present on the PETs.
   NOTE: Many early VIC, 64, and Plus/4 BASIC games and programs were
 converted
         PET games.
 HOW DO I GET 64 (VIC, PLUS/4, ETC.) BASIC PROGRAMS ON MY PET?
   Unlike the later 8-bit Commodores,the PET always loads programs into
 the
   memory address they were saved at  (i.e. no loading ,8 and ,8,1 as
 on
 the
   later machines), which means BASIC programs saved on VICs, 64s,
 128s,
 etc,
   will not load in the right location on the PET to be seen by the
 BASIC
   interpreter.  PET BASIC starts at location 1025 ($0401 in hex) and
 the
 later
   Commodore machines have different, higher starting locations. (see
 table x)
  There are a couple ways to get a BASIC program to load properly into
 memory,
  Disk Track/Sector Editors:
   My preferred method of conversion is using a disk track/sector
 editing
 utility
   to change the 'load address bytes' of the file directly on the disk.
 This is
   not an easy process to 'explain' and I hope to write it up at a
 later
 time.
  BASIC Line Relocation Method:
   Here is a way to get the BASIC editor to do it for you; of course
 you
 will
   need to have an upgrade ROM or later PET (which has a ML monitor) or
 load in
   a monitor for your original ROM PET first.  It involves 'linking'
 the
 higher
   located BASIC program to a line starting in regular BASIC, when you
 delete
   that line, the editor will move your program to where it belongs in
 memory.
   1. Enter NEW to erase any programs already in memory.
   2. Enter: 0 REM
   3. LOAD the program you want converted (i.e. LOAD"program name",1
 for
 tape)
   4. When loaded, enter the machine language monitor by entering SYS
 1024
   5. display the first part of the BASIC you first typed:
      M 0401 0408
   6. Change the line-link to the memory location of the program to be
 moved;
      use cursor keys to move up and change the first two two-digit
 numbers to
      read:
      :0401 01 08 00 00 8F 00 00 00
            ^^ ^^   (for a program from a 64, otherwise, see table x)
   7. Press return to change the bytes then enter X to exit the
 monitor.
   8. Type LIST, you should see the 0 REM followed by the program.
   9. Enter 0 to delete line 0 which will move the BASIC to its proper
 place.
  10. Save the program.
   TABLE X - Load Addresses for BASIC files:
        Saved under            Start of BASIC
         Computer           load    load   change
          Model/            addr.   addr.   bytes
       configuration        dec.    hex.     to:
       -------------        ----   -----    -----
       PET/CBM              1025   $0401     N/A
       VIC-20 unex.         4097   $1001    01 10
       VIC-20 +3k           1025   $0401     N/A
       VIC-20 8k+           4609   $1201    01 12
       Commodore 64         2049   $0801    01 08
       B-128                0003   $0003      *
       Plus/4-C16           4097   $1001    01 10
       Plus/4-C16**         8193   $2001    01 20
       C128 mode            7169   $1C01    01 1C
       C128 mode**         16384   $4001    01 40
   * The BASIC RAM of the B128 is located in a separate bank of RAM
 memory,
     which starts at a VERY low address and will be difficilt to
 convert
 without
     a track/sector editor or saving it special on a B-128 itself.
   **  When hi-res GRAPHICS mode space has been allocated.
 WHAT KIND OF DRIVES CAN I USE?
   Tape Drives
     Tape Drives for the VIC, 64 and 128 work well on the PET.  In fact
 you can
     hook up 2 tape drives on the PET (the second connector is inside
 the
 case,
     on the edge of the motherboard.) and can be accessed as device #2.
     Commodore Models:
     SANYO - First drives, power supply section cut out and modified
 for
             PET datasette cable/plug.
     C2N - Box look, black or cream colored case.
     1530 - Rounded low-profile, counter & 'save' indicator light.
   Commodore IEEE-488 5.25" models
     2020 - (first drive design, bugs may be present)
     2040 - Updated ROMS, resembles a 1541 format & readbable on
 1541/71s
     4040 - Read/Write compatible with 1541/1571s.
     2031 - Read/Write compatible with 1541/1571s.
     8050 - Single Sided/Quad Density format, 512k per disk side.
     8250 - Double Sided/Quad Density format, 1mb per disk
     SFD-1001 - Same as 8250, but single drive unit.
    Commodore IEEE-488 8"
     8280 - 1 MB or 512k per Drive (little info on this one...)
    Commodore IEEE-488 Hard Disk Drives
     9060 - Five Magabyte Hard Disk Unit
     9090 - Seven Megabyte Hard Disk Unit
    3rd party
     MSD-SD1   ** The MSD SD1&2 offer both IEEE-488 and
     MSD-SD2   ** VIC/64/128/+4 Serial bus interfaces.
    Modified 1541
 PRINTERS?
   Commodore Model IEEE-488 Printers
    4022
    4023
    8023
   Some companies produced printers with IEEE-488 interface options
 (Epson was one)
 HOW CAN I GET PET PROGRAMS FROM DISK TO TAPE?
   You can just LOAD the program from tape and and SAVE them to disk
 one
 after
   another, of course, if you are using a VIC/64/128, etc. the loading
 address
   will get messed up.  Fortunately there is a wonderful fily copy
 utility
   available for PET (4.0), VIC, and Commodore 64/128, called
 'Unicopy'.
   Unicopy (written by the famous Commodore enthusiast, Jim
 Butterfield)
 allows
   you to copy from disk directly to tape.  This of course preserves
 the
 loading
   address and makes things mauch easier.  (also it performs multiple
 file copies
   instead of just one program at a time).
 HOW CAN I GET PET TAPE PROGRAMS TO DISK?
   Again you can do LOAD and SAVE as I mentioned or use a handy little
 utility I
   had discovered for the 64.  This program will automatically LOAD
 each
 file off
   of tape and subsequently SAVE it to disk and continue until you stop
 it (or a
   disk error occurs when it attempts to save a file with the same name
 as one
   already on disk, disk full, or end of tape.
 HOW DO I HEAR/PLAY SOUND ON MY PET?
   Like many other microcomputers of the time the PET was not
 originally
 designed
   to produce sound.  A few methods of sound generation have been
 developed but
   the most popular employs the use of parallel user port pin M which
 generates....
   The latest 4000/8000 (large screen PET) motherboards have a built-in
 piezo
   speaker and also have a bell sound accessible with a print: chr$(7)
    Sound Interface Diagrams here...
 WHAT ARE THE BASIC COMMANDS FOR MY PET?
   For the most part the BASIC on the 64 is identical to the upgrade
 ROM
 PETs and
   it only varys by a few commands and features between original and
 4.0
 ROMs.
   On the other hand the 'memory map', the locations you POKE numbers
 into, vary
   quite a bit between ROM revisions.  Memory Maps are available for
 all
 the
   versions...
 HOW DO I ACCESS THE PET's M/L MONITOR?
   The 'timy machine language monitor' (known as TIM to some) is
 available on all
   PETs but the original ROM version.  TIM is invoked by executing a
 BRK
   instruction by SYSing any memory location containing a zero (0),
 most
 people
   enter SYS 1024, as it almost always contains a 0.
 WHAT ARE THE COMMANDS FOR THE M/L MONITOR?
   G - Execute M/L:  G programaddress (i.e. G 033C)
   L - Load:  L "filename",dev  (i.e. L "PACMAN",08)
   S - Save:  S "filename",dev,startaddress,endaddress
              (i.e. S "FLASH ATTACK",02,027A,2000)
   R - Display Processor Registers
   X - Exit Tiny Mon
   M - Memory Display: M startaddress endaddress (i.e. M 0400 04A0)
   : - Modify Memory (supplied in memory dumps using the M command)
   ; - Modify Processor Registers (supplied in the processor register,
 P
 command)
 CAN I GET A BETTER M/L MONITOR FOR MY PET?
   Yes, there are two that I know of that are readily avaiable.  The
 most
 popular
   (and universal among the Commodore 8-bits) is Jim Butterfield's
 Supermon.
   There are versions available for all ROM revisions including
 original
 ROM PETS
   and offer a mini Assembler and Disassembler among other useful
 memory/ML
   commands.  The other, similar to Supermon is called Extramon.  There
 are other
   versions many of wich are commercial but I have little information
 on
 them.
 I HAVE A PROGRAM THAT CAN USE JOYSTICKS, WHERE CAN I GET/MAKE THEM?
   The PET was not initially designed for joysticks but a determined
 user
 had
   devised a dual-joystick interface employing the parallel port.  This
 interface
   allows you to plug in standard Atari/Commodore compatible
 joysticks....
   Interface Diagram Here
 HOW COME MY PET CAN'T READ A TAPE FROM MY PLUS/4 OR COMMODORE 16 OR
 VISA-VERSA?
   You are quite a collector, aren't you?  When Commodore designed the
 Plus/4 and
   Commodore 16 they broke alot of standards they had previously
 established for
   their 8-bits (and fortunately went back to in the C128); besides the
 plug
   designs, they changed the sound-frequency of the signals used to
 record on
   tape.  Though the the format is identical to the PET and the other
 8-bits,
   the sound is only readable on the Plus/4 and Commodore 16.  My
 sggestion would
   be to record the program on disk (1541) and then read it on a 4040
 or
 2031, or
   copy them from the 1541 to tape using a 64 or 128.
 WHAT IS THE 'KILLER POKE' AND SHOULD I WORRY ABOUT IT?
   This is THE POKE of computer lore, the command that WILL physically
 break a
   computer!  Of course other commands and methods are known that can
   potentially cause damage (usually to disks, hard drives or other
 mechanical
   units), but this is the most notable mainly because it was a command
 somewhat
   commonly used and it affects solid-state circuitry.
  History of 'the killer poke'
   When the first PETs (small 9" screen) models came out, the display
 wasnt all
   that fast.   It wasn't too long before someone learned they could
 impove the
   character printing speed via a poke to location 59458; which would
 set
 the
   video controller into a faster mode.  It was a noticible improvement
 of speed
   on programs using PRINT often, it was kind of like a free upgrade.
 It
 was
   mentioned in a few publications and used in many programs that
 relied
 on
   printing to the screen.  I had learned of the poke through Cursor
 Magazine,
   a monthly tape-based publication.  They printed the command in one
 of
 the
   'newsletter' flyers included with an issue which you could insert
 into
 their
   game "joust" to make it play faster.
   Later on, when Commodore released the larger display (14") PETs,
 they
 had
   improved display speed which made that POKE unnecessary.  An
 unfortunate side
   effect was that the POKE to 59458 still caused the already faster
 controller
   to run even faster, in fact too-fast, which could result in damaging
 the PETs
   video curcuitry when left running.  I discovered it by accident
 after
 our
   school received some large-screen 4016s.  When active, the screen
 starts to
   warp after about the third line and the display stops around the
 fifth, the
   keyboard is also unresponsive.  When a PET is in this mode, the only
 solution
   is to turn it off, quickly!  Fortunately none of the school's PETs
 were
   damaged due to this POKE.  Later Cursor Magazine published a 'fix'
 that would
   allow older PETs to use the poke and keep the large-screen units
 from
 frying.
   Unfortunately there are still many programs that do not have this
 fix.
  Prevention
   Make sure to check BASIC programs (especially games) when running
 them
 on a
   large-screen PET and be ready with the power switch when you first
 run
 it.
   I have usually found the 'killer poke' statement looking like this:
   POKE 59458,PEEK(59458)OR 32.
   The fix is to put an if-then conditional to determine if the poke is
 needed
   for the PET running the program, here is the code:
   IF PEEK(50000) THEN POKE 59458,PEEK(59458)OR 32
 CAN I HOOK UP AN EXTERNAL MONITOR TO MY PET?
   With the help of the following circuit you can get a composite
 singnal
 from
   the user port...
   Insert Video Diagram here....
 WHAT ARE THE PINOUTS SO I CAN BUILD AN IEEE-488 CABLE FOR MY PET TO MY
 DRIVE.
 WHERE CAN I GET SOFTWARE FOR MY PET?
 WHERE CAN I GET CONNECTORS THAT FIT THE USER/IEEE-488 PORTS?
 IS THERE A MODEM AVAILABLE FOR MY PET?
   I know of only one company that prosuced a modem and IEEE-488
 interface, the
   company is TNW, and I think they also built the Commoodre 8010, an
 acoustic
   modem for the PET.  I have some notes on using the device but have
 never
   actually seen one.
                 Larry Anderson
 --
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
     Visit our web page at: 
http://www.goldrush.com/~foxnhare/
 Call our BBS (Silicon Realms BBS 300-2400 baud) at: (209) 754-1363
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-