ROM Checksums for TRS-80 Model 4

About This Page

Information from Tandy memos and technical bulletins were combined to form this list. Four things to note:

  • Analyzing the ROMs and researching for possible mistakes took a lot of the TRS-80 community out there, and I thank them all. Special thanks to George Philips and Ken Brookner for tackling the hardest issue of them ... ROM A Checksum 1591
  • Tandy preferred to provide two checksums for ROM A, which were checksums of the first 4K and the second 4K. Thanks to George Philips who figured it out, you can convert from a xxxx/yyyy checksum by adding the two together and dropping the extraneous 1 which appears before it (so, for example: BBC4/DA75 would be BBC4 + DA75, which is 19639. Drop the 1, and you get 9639).
  • ROM C uses locations $37E8 and $37E9 as a pass-through for printer information. PEEKing a ROM to dump it will not work unless the printer is off because those 2 locations will contain whatever data they contain otherwise. When MEMTEST does its CRC checks, it skips those 2 locations. Thanks also to George Philips for that info.
  • If you have any ROMs which are shown as missing, please contact me.

Official ROM Combinations:

Non-Gate Array (1st Generation Hardware).
This was set up to have 3 ROM chips - An 8K ROM A, 4K ROM B and 2K ROM C.

DescriptionROM A (8K)ROM B (4K)ROM C (2K)
Standard (v1) *BBC4/DA75 aka 9639407C1591
Version A (v2)B504/DA42 aka 8F46407C48BC
Network III Student v1B523/DA42 aka 8F65407C48BC
Network III Student v2B504/DA42 aka 8F46407C48BC
Network 4 Student StationB504/DA42 aka 8F46407C33CB
England (50Hz)B523/DA42 aka 8F65407C48AA
FrenchB523/DA42 aka 8F65407C43AD
GermanB523/DA42 aka 8F65407C3080

*: Both the Model III and Model 4 list 9639 407C 1591 as a valid ROM combination, which is somewhat baffling. That combination will run on both a Model III and a Model 4. It contains some code calling the Model 4 CRTC which runs fine on a Model 4 and is ignored on a Model III.


Gate Array (2nd Generation Hardware + Model 4D).
This was set up to have 2 8K ROM chips.

DescriptionROM A (8K)ROM B (4K)
StandardB504/DA42 aka 8F46407C/48BC aka 8938
Network 4 Student StationB504/DA42 aka 8F46407C/33CB aka 7447

ROM A (8K In All Instances):

ChecksumAlt CRCPart No.Description
9639BBC4/DA758041364v1.0 - First production run of US and English Model 4
8F65B523/DA428048364Model 4 and Model 4 International (Required on French, German, and Educational), and Network III Student Station v1
8F46B504/DA428048364A
8075364
v2.0 (a/k/a Model 4 Version A) - Subsequent Model 4 runs (including Model 4D, German, French, Gate Array, and Network III Student Station v2)

ROM B:

ChecksumPart No.Description
407C8040332This is ROM B for every Model III and Model 4

ROM C:

ChecksumPart No.Description
15918048316Generation 1, 60Hz - 1983
48BC8042316Generation 2, 60Hz - 1983 (can include Education and Network III Student Station v1 and v2)
33CB8075317Network 4 Student Station
38BC8042316U.S. 60Hz including Education
MISSING
48AA8049005English (50hz)
MISSING
30808049004German (Must be used with 8049007 character generator)
43AD8049003French AZERTY (Must be used with 8049007 character generator)
1587???????Unsure - Possibly v1 Australia 50Hz
48B2???????Unsure - Possibly v2 Australia 50Hz

ROM D:

Gate Array Model 4s and Model 4Ds contain only two ROM chips, an 8K ROM A, and then a 8K ROM D which is just ROM B and ROM C in one ROM (with 2K wasted space). The actual code in the D ROM remains the same, only the ROM size has been changed:
Checksum AChecksum B and CPart No. for D ROMDescription
8F46B:407C
C:48BC
8075369Gate Array Model 4 and Model 4D (B and C are merged)
8F46B:407C
C:33CB
8075370Gate Array Model 4 and Model 4D Network 4 (B and C are merged)

ROM C/D by FRANK DURDA IV:

ChecksumDescription
5C1DFrank Durda NGA XROM v3.33 90-05-15. This is a C ROM.
Requires A:8F46 B:407C
B:407C and C:5C1AFrank Durda GA XDROM v3.33 89-04-01. This is a D ROM.
Requires A:8F46 and most likely uses the extra 2K for a Diagnostic ROM (TBD)
500CFrank Durda ROM C v1.24 86-01-04. This ROM was written by Frank and submitted to Radio Shack on May 5, 1985 for consideration as a catch-all ROM C that could include all other U.S. ROM C's (and replace 1591, 48BC, 33CB, 38BC) plus additional fixes. This eventually became his XROM and XDROM. This ROM had the following changes/updates:
  • Ability to boot TRSDOS 6 from a hard disk drive without the use of a start-up diskette on WD1000 or WD1010-xx hard disk controllers.
  • Ability to boot from the Network 3 or Network 4 by pressing 3 or 4 keys, respectively.
  • New Model III mode keyboard driver handles rollover correctly.
  • New keyboard driver can produce all ASCII characters. (Current version does not allow brackets, braces and other special symbols.) All keys are now repeatable.
  • Ability for a Model III mode operating system or user program to adjust the keyboard repeat rate. Previously this value was not adjustable.
  • Real-Time-Clock and Cursor Blink run properly at 2Mhz or 4Mhz. (Previously both ran twice as fast at 4Mhz, making the clock useless in Model III mode.)
  • The floppy drives timeout after a several seconds on boot-up to prevent drive and media wear. Floppy booting speed has also been increased and the noise level reduced, by using the correct step rate.
  • Screen print in Model III mode can now be initiated by CTRL + : or SHIFT + DOWN-ARROW + *. Previously you had to press LEFT-SHIFT + DOWN-ARROW + *. CTRL + : is compatable with TRSDOS 6
  • Improved interrupt handler that reduces the chance of lost RS-232 traffic at all speeds has been added. This change will also allow external I/O bus interrupts to be used while RS-232 traffic is present. (Previously this was not possible in Model III mode.)

Character Generators:

ChecksumPart
No.
Code
Name
Description
19B98044316AM3/4For U.S. and Kana
4A0E8049007M4IFor U.S. and Europe (All Model 4's)

German Keyboard:

ROMs which are not US/UK carry not only different character generators but different keyboards, making using them in an emulator somewhat difficult.
Thanks to Volker Kruckemeyer, this is the German keyboard

How to Get Your CRC's

If you do not have a DOS system, you can type in this program and get your CRC's. These programs were written by Dean Bear.
Longer Version (Runs Fast):

1 FOR I = 0 TO 38 : READ P : POKE 28656+I,P : NEXT I
2 DATA 17, 0, 0, 62, 16, 237, 71, 33, 0, 0
3 DATA 69, 26, 79, 9, 19, 237, 87, 186, 32, 247
4 DATA 24, 13, 58, 232, 55, 79, 168, 55, 63, 237
5 DATA 66, 55, 63, 237, 66, 195, 154, 10, 201
6 POKE 16526, 240 : POKE 16527, 111
7 DIM B(3): B(0)=0: B(1)=32: B(2)=48
8 DIM C(3): C(0)=32: C(1)=48: C(2)=56
9 PRINT "M3/M4 ROM CRCS FOR 3 CHIP SET"
10 FOR I = 0 TO 2
11 POKE 28658,B(I)
12 POKE 28660,C(I)
13 IF I = 2 THEN POKE 28677,0
14 D = USR(0)
15 IF D < 0 THEN D=D+65536
16 A$ = "ROM "+CHR$(65+I)+" = "
17 GOSUB 20
18 NEXT I
19 END
20 S=16:X=2
21 IF S<D THEN X=X+1:S=S*16:GOTO 21
22 PRINT A$;
23 T=D
24 FOR L=X TO 1 STEP -1
25 N=INT(T/S)
26 A=0
27 IF N > 9 THEN A=1
28 IF L < 5 THEN PRINT CHR$(48+N+7*A);
29 T=T-N*S:S=S/16
30 NEXT L
31 PRINT
32 RETURN

Shorter Version (Runs MUCH Slower):

1 FOR I = 0 TO 8191 : D=D+PEEK(I) : NEXT
2 A$ = "ROM A = "
3 GOSUB 12 : D = 0
4 FOR I = 8192 TO 12287 : D=D+PEEK(I) :NEXT
5 A$ = "ROM B = "
6 GOSUB 12 : D =0
7 FOR I = 12288 TO 14335: D=D+PEEK(I) :NEXT
8 A$ = "ROM C = "
9 X = PEEK(14312): D = D - X - X
10 GOSUB 12
11 END
12 S=16 : X=2
13 IF S<D THEN X=X+1 : S=S*16 : GOTO 13
14 PRINT A$;
15 FOR L=X TO 1 STEP -1
16 N=INT(D/S)
17 A=0
18 IF N > 9 THEN A=1
19 IF L < 5 THEN PRINT CHR$(48+N+7*A);
20 D=D-N*S : S=S/16
21 NEXT L
22 PRINT
23 RETURN

Quick Check for ROM v1 vs ROM v2

While not dispositive, George Phillips has identified quick way to see if you have v1 or v2 of the Model 4 ROM --- via the CASS prompt!

Model III

Model 4 Version 1 (Stored at 3132H; has extra space before the 03H EOL character)

Model 4 Version 2 (Stored at 05D1H; no space before the 03H EOL character)