About This Page
This page discussed the various Model I ROM’s. It is broken into 5 sections
- A chart showing the valid ROM Checksums, found either by running TEST1A on a TRSDOS v2.3 disk OR by running the program that appears at the bottom of the page
- A discussion of what ROM Checksum corresponds to what ROM version and date
- A discussion of what actually changed in the TRS-80 ROM Versions
- A program which you can type in to get your ROM Checksums if you do not have TRSDOS v2.3 (written by Dean Bear)
- A program which you can type in to dump your ROM
Valid ROM checksums for the Model I:
Level I
Level II
TEST1A/CMD, found on later versions of TRSDOS v2.3, also added the v1.3 ROM checksums.
Special Thanks to Matthew Reed who took the time to analyze the Radio Shack ROMs below and who then wrote up a wonderful explanation of the differences, and also to those who have found and dumped some previously missing ROMs including Kurt Baumgardner, Katz, and John Benson.
v1.3 was also called Level II Rev. A by Radio Shack and has the R/S L2 BASIC Message.
Model I ROMs
Cksum
Cksum
Cksum
Set?
05/15/78-05/21/78
06/05/78-06/11/78
10/23/78-11/05/78
03/19/78-03/25/79
01/07/80-01/13/80
BAD ROMs
Cksum
Cksum
Cksum
FDC1F12C
D6FD9041
Clones
Cksum
Cksum
Cksum
- Notes: Patched with TRS-80 Print Routines
- Notes: Patched with TRS-80 Print Routines
Actual Differences between Model I ROMs
Changes from ROM v1.0 to v1.1 Date 78-23 [Checksum AE60 DA45 40E0]
JR NZ,0674H
JR NZ,0676H
INC HL
JR NZ,02D1H
JR NZ,02D1H
INC HL
JP PE,1234H
JR NC,1233H
OR A
JP P,1244H
JP P,1243
NOP
NOP
SBC 00H
Changes from ROM v1.1 Date 78-23 to ROM v1.1 Date 78-44 [Checksum AE60 DA45 3E3E]
LD A,(40A9H)
B7H
OR A
C8H
RET Z
NOP
00H
NOP
00H
NOP
Changes from ROM v1.1 to ROM v1.2
SBC 00H
00H
NOP
00H
NOP
SBC C3H
C3 44 B2
JP B244H
Changes from ROM v1.2 to ROM v1.3
LD HL,0111H
LD HL,010EH
LD A,D
RLCA
JP 011CH
OR A
POP DE
POP DE
OR A
JP 20A0H
JP 2081H
NOP
SBC A,0C3H
JP B244H
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. If you have a CRC different than any above, please contact me. These programs were written by Dean Bear.
Longer Version (Runs Fast):
1 FOR I = 0 TO 23 : 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 195,154,10,201 5 POKE 16526, 240 : POKE 16527, 111 6 DIM ROM(3) : ? "M1 ROM CRCS FOR 3 CHIP SET" 7 FOR I = 0 TO 2 8 B = 16*I : C = 16*(I+1) 9 POKE 28658,B 10 POKE 28660,C 11 D = USR(0) 12 IF D<0 THEN D=D+65536 13 ROM(I) = D 14 A$ = "ROM "+CHR$(65+I)+" = " 15 GOSUB 22 16 NEXT I 17 ? "CRCS FOR 2 CHIP SET, USE A/B AND C VALUES" 18 D = ROM(0)+ROM(1) 19 A$ = "ROM A/B = " 20 GOSUB 22 21 END 22 S=16:X=2 23 IF S<D THEN X=X+1:S=S*16:GOTO 23 24 PRINT A$; 25 T=D 26 FOR L=X TO 1 STEP -1 27 N=INT(T/S) 28 A=0 29 IF N>9 THEN A=1 30 IF L<5 THEN PRINT CHR$(48+N+7*A); 31 T=T-N*S:S=S/16 32 NEXT L 33 PRINT 34 RETURN
Shorter Version (Runs MUCH Slower):
1 FOR I = 0 TO 4095 : D=D+PEEK(I) : NEXT 2 A$ = "ROM A = " 3 GOSUB 11 : D = 0 4 FOR I = 4096 TO 8191 : D=D+PEEK(I) :NEXT 5 A$ = "ROM B = " 6 GOSUB 11 : D =0 7 FOR I = 8192 TO 12287 : D=D+PEEK(I) :NEXT 8 A$ = "ROM C = " 9 GOSUB 11 10 END 11 S=16 : X=2 12 IF S<D THEN X=X+1 : S=S*16 : GOTO 12 13 PRINT A$; 14 FOR L=X TO 1 STEP -1 15 N=INT(D/S) 16 A=0 17 IF N>9 THEN A=1 18 IF L<5 THEN PRINT CHR$(48+N+7*A); 19 D=D-N*S : S=S/16 20 NEXT L 21 PRINT 22 RETURN
Quick and Dirty Way to Find Version Number
If you have a Model I and want to see which ROM version you are running, try this program written by Amardeep Chana:
10 REM V1.0 SHOULD PRINT 249
20 REM V1.1 SHOULD PRINT 215
30 REM V1.2 SHOULD PRINT 33
40 REM V1.3 SHOULD PRINT 237
50 DEFINT A-Z
60 CLS
70 PRINT "THIS WILL TAKE A FEW MINUTES."
80 FOR I=0 TO (12*1024)-1
90 Q=PEEK(I)
100 P=(Q OR P)-(Q AND P)
110 NEXT I
120 PRINT "ROM XOR SUM: "; P
130 END
How to Dump Your Model I ROM
If you have a Model I and want to dump your ROM for analysis, you can use the following program. Note, it takes about 30 minutes to run on a Model I, which is why the counters/screen updates are present. If you do not wish to key all that in, and don’t mind staring at a blank screen for 30 minutes, just don’t type in the italicized lines. Remember to use a disk with at least 13K free (and to adjust line 10 to point to that drive) or you will run out of space and have to start all over.
10 OPEN "O",1,"NEWROM/ROM"
20 FOR X = 0 TO &H2FFF
30 PRINT #1,CHR$(PEEK(X));
40 IR=IR+1 : IF IR = 614 THEN IR = 0: PC=PC+5: PRINT PC"% ...";
50 NEXT X
60 PRINT "DONE!":PRINT
70 CLOSE