nikola-wan
Veteran Member
I have figured out most of the address ranges used by the 4052/4054 Tektronix Diagnostic ROM pack to calculate the ROM CRC's to match the Tektronix ROM CRC list for these computers.
The Diagnostic ROM pack instructions Appendix page B-2 has the BASIC CALL "CRC" parameter format:
CALL "CRC",A$
where A$ = xxxxyyyyzzttrrrr
xxxx = Start address in hex
yyyy = End address in hex (actually end address+1)
zz = ROM space select
00 = System ROM (B space)
01 = Constant ROM (A space)
tt = Bank Switch information
00 = Internal ROM space
20 = Slot 41 (left slot)
28 = Slot 51 (right slot on two slot backpack)
80 = Slot 61 (slot 3 on four slot backpack)
08 = Slot 71 (slot 4 on four slot backpack)
rrrr = return value for CRC in hex
One example is given:
for a ROM from 8000 to BFFF set xxxx to 8000 and yyyy to C000
The address ranges for each ROM on the 4052 or 4054 MAS board can be found in the schematics, but when their addresses are used - I couldn't get the CRC calculation to match the diagnostic ROM pack output, which does match the Tektronix 4052/4054 CRC list that Jos provides with the Diagnostic ROM Pack.
I found the address decoder ring in the Tektronix factory "CYCLE" program that I posted last year.
The CYCLE program tested the 4052/4054 or 4052A or 4054A ROM CRC's but didn't use the diagnostic ROM pack - they must have had a different ROM pack with a CALL "MEMTST".
Here is a snippet of the CYCLE program that provided me the 'Rosetta Stone' decoder for the CRC:
Here is part of the Tektronix CRC table - version 4.4 is the next to last column:
Some of the third hex values in each row match the CRC table for v4.4, although the order of the entries is a little scrambled.
The first two hex values look like start and end addresses.
Remembering that the Constant ROM is in the 64KB data space, I wrote the following program to use the Diagnostic ROM Pack CALL "CRC" to get each CRC value, and I put the tests in the same order as the Tektronix CRC table:
The program above has CRC values for the v5.1 ROMs, and here is a screenshot of my 4052 with v5.1 ROMs running the CRC Dump program:
The values check!!
I have not figured out the correct ranges for everything in the Tektronix CRC table for v5.1, the two commented lines in the program hang the computer if the REM is removed.
Some of the address ranges are larger than a single pair of ROMs, and some ranges cause the algorithm to calculate the CRC of the ODD ROM of a pair - since the 4052/4054 has sixteen bit wide system ROMs.
The Patch ROMs used in the 4052/4054 (but not the A-series) were small and the CYCLE program calculated CRCs for four sections of these Patch ROMs.
I guess the ROM designers figured if the sixteen bit checksum failed - they could check the ODD ROM checksum to see if it was the ODD ROM, if not the EVEN ROM was bad.
The Diagnostic ROM pack instructions Appendix page B-2 has the BASIC CALL "CRC" parameter format:
CALL "CRC",A$
where A$ = xxxxyyyyzzttrrrr
xxxx = Start address in hex
yyyy = End address in hex (actually end address+1)
zz = ROM space select
00 = System ROM (B space)
01 = Constant ROM (A space)
tt = Bank Switch information
00 = Internal ROM space
20 = Slot 41 (left slot)
28 = Slot 51 (right slot on two slot backpack)
80 = Slot 61 (slot 3 on four slot backpack)
08 = Slot 71 (slot 4 on four slot backpack)
rrrr = return value for CRC in hex
One example is given:
for a ROM from 8000 to BFFF set xxxx to 8000 and yyyy to C000
The address ranges for each ROM on the 4052 or 4054 MAS board can be found in the schematics, but when their addresses are used - I couldn't get the CRC calculation to match the diagnostic ROM pack output, which does match the Tektronix 4052/4054 CRC list that Jos provides with the Diagnostic ROM Pack.
I found the address decoder ring in the Tektronix factory "CYCLE" program that I posted last year.
The CYCLE program tested the 4052/4054 or 4052A or 4054A ROM CRC's but didn't use the diagnostic ROM pack - they must have had a different ROM pack with a CALL "MEMTST".
Here is a snippet of the CYCLE program that provided me the 'Rosetta Stone' decoder for the CRC:
Code:
2930 REM ***4052/54 V4.4 CRCS***
2940 RESTORE 2950
2950 DATA "C N 4601 4801 5440"
2960 DATA "C N 4600 4800 B0DB"
2970 DATA "C N 4401 4601 A7E3"
2980 DATA "C N 4400 4600 AEED"
2990 DATA "C N C001 FF01 8AF0"
3000 DATA "C N C000 FF00 3BC5"
3010 DATA "C N 8001 C001 3FE5"
3020 DATA "C N 8000 C000 7403"
3030 DATA "C N 4801 8001 95BC"
3040 DATA "C N 4800 8000 00F1"
3050 DATA "C N 4001 4401 7132"
3060 DATA "C N 4000 4400 3EAB"
3070 DATA "C N E001 FF01 1F38"
3080 DATA "C N E000 FF00 5B67"
3090 DATA "C O 0000 2000 2435"
3100 DATA "C O 0000 2000 844A"
3110 DATA "C O 2000 4000 21D8"
3120 DATA "END"
Here is part of the Tektronix CRC table - version 4.4 is the next to last column:
Some of the third hex values in each row match the CRC table for v4.4, although the order of the entries is a little scrambled.
The first two hex values look like start and end addresses.
Remembering that the Constant ROM is in the 64KB data space, I wrote the following program to use the Diagnostic ROM Pack CALL "CRC" to get each CRC value, and I put the tests in the same order as the Tektronix CRC table:
Code:
100 PRINT "***Check 4052/54 V5.1 CRCS***"
110 RESTORE
120 DATA "E000FF0001000000","2057","U810 constant ROM"
130 DATA "4000440000000000","0066","U820A patch ROM"
140 DATA "4800800000000000","494F","U820B"
150 DATA "8000C00000000000","8C30","U825"
160 REM DATA "C000FF010000000","6389","U835"
170 DATA "4001440100000000","46C9","U870A ODD FOR U820A"
180 DATA "4801800100000000","67B6","U870B ODD FOR U820B"
190 DATA "8001C00100000000","AF97","U880 ODD FOR U825"
200 REM DATA "C000FF0100000000","38E2","U885 ODD FOR U835"
210 DATA "E001FF0101000000","93A4","U893 ODD constant ROM"
220 DATA "4400460000000000","8D82","U805A/U820C"
230 DATA "4600480000000000","D064","U805B/U820D"
240 DATA "4401460100000000","C27E","U897A/U870C"
245 DATA "4601480100000000","71C4","U897B/U870D"
250 REM U897B
260 DATA "Z","Z","Z"
265 PRINT "CRC ROM"
266 PRINT "--- ---"
270 READ A$,C$,L$
280 IF A$<>"Z" THEN 310
290 PRINT "Done!"
300 END
310 CALL "CRC",A$
320 B$=SEG(A$,13,4)
330 IF B$=C$ THEN 360
340 PRINT B$;" ";L$;" ";"CRC ERROR, SHOULD BE ";C$
350 GO TO 270
360 PRINT B$;" ";L$
370 GO TO 270
The program above has CRC values for the v5.1 ROMs, and here is a screenshot of my 4052 with v5.1 ROMs running the CRC Dump program:
The values check!!
I have not figured out the correct ranges for everything in the Tektronix CRC table for v5.1, the two commented lines in the program hang the computer if the REM is removed.
Some of the address ranges are larger than a single pair of ROMs, and some ranges cause the algorithm to calculate the CRC of the ODD ROM of a pair - since the 4052/4054 has sixteen bit wide system ROMs.
The Patch ROMs used in the 4052/4054 (but not the A-series) were small and the CYCLE program calculated CRCs for four sections of these Patch ROMs.
I guess the ROM designers figured if the sixteen bit checksum failed - they could check the ODD ROM checksum to see if it was the ODD ROM, if not the EVEN ROM was bad.
Last edited: