Classic Computer Magazine Archive COMPUTE! ISSUE 1 / FALL 1979 / PAGE 68

PET In Transition

Jim Butterfield, Toronto

A transition issue of the PET GAZETTE is very appropriate, because the PET itself is in transition. New products and new software are going to change the nature of the machine. Old hands at PET system use will have to learn new tricks.

A lot of "old" software won't work on the new machines. Those chess and music playing programs, for example, can't make the transition in their present form. Many of the POKEs and PEEKs have shifted to new locations. SYS, USR and WAIT commands will need reworking.

The machines themselves have a few hardware changes. A new memory arrangement eliminates screen hash. The screen can no longer be blanked, so that certain special effects (explosions, etc.) are difficult to achieve. The character generator has changed, giving an unfamiliar reversal of upper and lower case. The memory expansion edge connector is physically different; it appears as if Commodore doesn't intend it to be user accessible any more. Instead, a "mother board" architecture is hinted at; and empty ROM sockets suggest that new software may be forthcoming. An assembler? New languages? It's anybody's guess right now.

Further hardware changes are rumoured. Most of the ones I hear are associated with screen format changes (80 characters? Colour? Programmable characters?)

With all these changes, what should the PET owner do? Stay with his original machine? Retrofit with the new ROM chips? Buy the new model?

My recommendation is this: upgrade with new ROMs, or buy a new unit; but either way, take the plunge. You'll want the new model if you are strong on large keyboards, green screens, and/or ROM expansion capability; otherwise, stay with your existing machines but fit the new ROM programs.

There's too much good stuff in the new software to hold back. The limit on array size is lifted; tape files behave correctly; the IEEE-488 bus works better; the built-in Machine Language Monitor is very valuable; you can now pull the computer out of a total crash without losing memory; and numerous little improvements have been made.

Commodore may introduce more ROM's in the future. But I believe that they won't tinker with lower memory (locations 0 to 1023 decimal) to any great extent. So an upgrade which is made now should last for a while.

Commercial software houses will have to wrestle with the upgrade, of course. Buyers will have to closely examine programs on sale to make sure that they are compatible with their computer model. "AC/DC" programs, which will run on any existing ROM, will be a help (I understand that such a version of Microchess will soon be available). Eventually, I believe that the upgraded ROMs will become standard, and most software will be written for them; the original ROM will fade out of the picture.

Clubs, and newsletters like The PET GAZETTE, will also need to cope with this transition. Programs and techniques will have to be carefully identified: which ROM set will they work on? Where possible, two versions will be desirable.

Eventually — hopefully — we'll all settle back into a standard machine. And then we can focus our attention fully on the main objective: making it do the jobs we want to do.

Memory locations for ROM upgrade on PET computers

Jim Butterfield, Toronto

0000-0002 0-2 UST Jump instruction
0003 3 Search character
0004 4 Scan-between-quotes flag
0005 5 Basic input buffer pointer; # subscripts
0006 6 Default DIM flag
0007 7 Type: FF = string, 00 = numeric
0008 8 Type: 80 = integer, 00 = floating point
0009 9 DATA scan flag; LIST quote flag; memory flag
000A 10 Subscript flag; FNx flag
000B 11 0 = input; 64 = get; 152 = read
000C 12 ATN sign flag; comparison evaluation flag
000D 13 input flag; suppress output if negative
000E 14 current I/O device for prompt-suppress
0011-0012 17-18 Basic integer address (for SYS, GOTO, etc.)
0013 19 Temporary string descriptor stack pointer
0014-0015 20-21 Last temporary string vector
0016-001E 22-30 Stack of descriptors for temporary strings
001F-0020 31-32 Pointer for number transfer
0021-0022 33-34 Misc. number pointer
0023-0027 35-39 Product staging area for multiplication
0028-0029 40-41 Pointer: Start-of-Basic memory
002A-002B 42-43 Pointer: End-of-Basic, Start-of-Variables
002C-002D 44-45 Pointer: End-Of-Variables, Start-of-Arrays
002E-002F 46-47 Pointer: End-of-Arrays
0030-0031 48-49 Pointer: Bottom-of-strings (moving down)
0032-0033 50-51 Utility string pointer
0034-0035 52-53 Pointer: Limit of Basic Memory
0036-0037 54-55 Current Basic line number
0038-0039 56-57 Previous Basic line number
003A-003B 58-59 Pointer to Basic statement (for CONT)
003C-003D 60-61 Line number, current DATA line
003E-003F 62-63 Pointer to current DATA item
0040-0041 64-65 Input vector
0042-0043 66-67 Current variable name
0044-0045 68-69 Current variable address
0046-0047 70-71 Variable pointer for FOR/NEXT
0048 72 Y save register; new-operator save
004A 74 Comparison symbol accumulator
004B-004C 75-76 Misc. numeric work area
004D-0050 77-80 Work area; garbage yardstick
0051-0053 81-83 Jump vector for functions
0054-0058 84-88 Misc. numeric storage area
0059-005D 89-93 Misc. numeric storage area
005E-0063 94-99 Accumulator #1: E, M, M, M, M, S
0064 100 Series evaluation constant pointer
0065 101 Accumulator hi-order propogation word
0066-006B 102-107 Accumulator #2
006C 108 Sign comparison, primary vs. secondary
006D 109 low-order rounding byte for Acc #1
006E-006F 110-111 Cassette buffer length/Series pointer
0070-0087 112-135 Subrtn: Get Basic Char; 77, 78 = pointer
0088-008C 136-140 RND storage and work area
008D-008F 141-143 Jiffy clock for TI and TI$
0090-0091 144-145 Hardware interrupt vector
0092-0093 146-147 Break interrupt vector
0094-0095 148-149 NMI interrupt vector
0096 150 Status word ST
0097 151 Which key depressed: 255 = no key
0098 152 Shift key: 1 if depressed
0099-009A 153-154 Correction clock
009B 155 Keyswitch PIA: STOP and RVS flags
009C 156 Timing constant buffer
009D 157 Load = 0, Verify = 1
009E 158 # characters in keyboard buffer
009F 159 Screen reverse flag
00A0 160 IEEE-488 mode
00A1 161 End-of-line-for-input pointer
00A3-00A4 163-164 Cursor log (row, column)
00A5 165 PBD image for tape I/O
00A6 166 Key image
00A7 167 0 = flashing cursor, else no cursor
00A8 168 Countdown for cursor timing
00A9 169 Character under cursor
00AA 170 Cursor blink flag
00AB 171 EOT bit received
00AC 172 Input from screen/input from keyboard
00AD 173 X save flag
00AE 174 How many open files
00AF 175 Input device, normally 0
00B0 176 Output CMD device, normally 3
00B1 177 Tape character parity
00B2 178 Byte received flag
00B4 180 Tape buffer character
00B5 181 Pointer in file name transfer
00B7 183 Serial bit count
00B9 185 Cycle counter
00BA 186 Countdown for tape write
00BB 187 Tape buffer #1 count
00BC 188 Tape buffer #2 count
00BD 189 Write leader count; Read pass 1/pass 2
00BE 190 Write new byte; Read error flag
00BF 191 Write start bit; Read bit seq error
00C0 192 Pass 1 error log pointer
00C1 193 Pass 2 error correction pointer
00C2 194 0 = Scan; 1-15 = Count; $40 = Load; $80 = End
00C3 195 Checksum
00C4-00C5 196-197 Pointer to screen line
00C6 198 Position of cursor on above line
00C7-00C8 199-200 Utility pointer: tape buffer, scrolling
00C9-00CA 201-202 Tape end address/end of current program
00CB-00CC 203-204 Tape timing constants
00CD 205 00 = direct cursor, else programmed cursor
00CE 206 Timer 1 enabled for tape read; 00 = disabled
00CF 207 EOT signal received from tape
00D0 208 Read character error
00D1 209 # characters in file name
00D2 210 Current logical file number
00D3 211 Current secondary addrs, Or R/W command
00D4 212 Current device number
00D5 213 Line length (40 or 80) for screen
00D6-00D7 214-215 Start of tape buffer, address
00D8 216 Line where cursor lives
00D9 217 Last key input; buffer checksum; bit buffer
00DA-00DB 218-219 File name pointer
00DC 220 Number of keyboard INSERTs outstanding
00DD 221 Write shift word/Receive input character
00DE 222 # blocks remaining to write/read
00DF 223 Serial word buffer
00E0-00F8 224-248 Screen line table: hi order address & line wrap
00F9 249 Cassette #1 status switch
00FA 250 Cassette #2 status switch
00FB-00FC 251-252 Tape start address
0100-010A 256-266 Binary to ASCII conversion area
0100-013E 256-318 Tape read error log for correction
0100-01FF 256-511 Processor stack area
0200-0250 512-592 Basic input buffer
0251-025A 593-602 Logical file number table
025B-0264 603-612 Device number table
0265-026E 613-622 Secondary address, or R/W cmd, table
026F-0278 623-632 Keyboard input buffer
027A-0339 634-825 Tape #1 buffer
033A-03F9 826-1017 Tape #2 buffer
03FA-03FB 1018-1019 Vector for Machine Language Monitor
0400-7FFF 1024-32767 Available RAM including expansion
8000-8FFF 32768-36863 Video RAM
9000-BFFF 36864-49151 Available ROM expansion area
C000-E0F8 49152-57592 Microsoft Basic interpreter
E0F9-E7FF 57593-59391 Keyboard, Screen, Interrupt programs
E810-E813 59408-59411 PIA1-Keyboard I/O
E820-E823 59424-59427 PIA2-IEEE-488 I/O
E840-E84F 59456-59471 VIA-I/O and Timers
F000-FFFF 61440-65535 Reset, tape, diagnostic monitor