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 |