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 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.

Description
ROM A (8K)
ROM B (4K)
ROM C (2K)
Standard (v1) *
BBC4/DA75 aka 9639
407C
1591
Version A (v2)
B504/DA42 aka 8F46
407C
48BC
Network III Student v1
B523/DA42 aka 8F65
407C
48BC
Network III Student v2
B504/DA42 aka 8F46
407C
48BC
Network 4 Student Station
B504/DA42 aka 8F46
407C
33CB
England (50Hz)
B523/DA42 aka 8F65
407C
48AA
French
B523/DA42 aka 8F65
407C
43AD
German
B523/DA42 aka 8F65
407C
3080

*: 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.

Description
ROM A (8K)
ROM B (4K)
ROM C (2K)
Standard
B504/DA42 aka 8F46
407C/48BC
Network 4 Student Station
B504/DA42 aka 8F46
407C/33CB

ROM A (8K In All Instances):

Checksum
Alt CRC
Part No.
Description
9639
BBC4/DA75
8041364
v1.0 – First production run of US and English Model 4
8F65
B523/DA42
8048364
Model 4 and Model 4 International (Required on French, German, and Educational), and Network III Student Station v1
8F46
B504/DA42
8048364A
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:

Checksum
Alt CRC
Part No.
Description
407C
8040332
This is ROM B for every Model III and Model 4

ROM C:

Checksum
Alt CRC
Part No.
Description
1591
8048316
Generation 1, 60Hz – 1983
48BC
8042316
Generation 2, 60Hz – 1983 (can include Education and Network III Student Station v1 and v2)
33CB
8075317
Network 4 Student Station (Requires B504/DA42)

MISSING

38BC
8042316
U.S. 60Hz including Education

MISSING

48AA
8049005
English (50hz)

MISSING

3080
8049004
German (Must be used with 8049007 character generator)
43AD
8049003
French 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 A
Checksum B and C
Part No. for D ROM
Description
8F46
B:407C
C:48BC
8075369
Gate Array Model 4 and Model 4D (B and C are merged)
8F46
B:407C
C:33CB
8075370
Gate Array Model 4 and Model 4D Network 4 (B and C are merged)

ROM C/D by FRANK DURDA IV:

Checksum
Description
5C1D
Frank Durda NGA XROM v3.33 90-05-15. This is a C ROM.
Requires A:8F46 B:407C
B:407C and C:5C1A
Frank 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)
500C
Frank 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:

Checksum
Part
No.
Code
Name
Description
19B9
8044316A
M3/4
For U.S. and Kana
4A0E
8049007
M4I
For 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 v1 vs 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)