Latest Tektronix 4052 / 4054 Tape Dump Program
Latest Tektronix 4052 / 4054 Tape Dump Program
I have been using the TransEra Super Utilities ROM Pack to recover all the files from a Tektronix 4050 tape including SECRET files with a single program.
Someone may be able to decipher the Tektronix SECRET program algorithm.
I managed to decode in the 1970's the last program on the System Tape - which was a SECRET program to test DRAM memory.
I was able to read the BINARY blocks of the SECRET program file - and because the program is completely print statements until the last three lines - I wrote an equivalent BASIC program line by line, saved it as SECRET and compared with the System Tape file until the bytes matched.
The last three lines in that file were FIND X - where X was the next file on the tape, READ A$, then CALL "EXEC", A$.
Since I had the Tektronix 8002 Development System along with the 4051, I looked at the data returned on the READ - it was ASCII characters from 0 to ?, which I theorized could be ASCII HEX.
I translated the string in to HEX and manually disassembled the suspected 6800 program.
Yes it was HEX, and the program basically wrote and verified AA55 through the entire RAM address space - including the assembly program and then hung.
That's why the print statements at the beginning of the program indicated you would have to power cycle the computer after the program finished.
I then used the undocumented CALL "EXEC" command to write my own assembly programs for the Tektronix - including my own music program (PWM to the speaker), and others including dumping the Tektronix BASIC ROM to the screen and triggering the 4631 printer to print the screen, PAGE, and continue
I still have those printouts. I found that putting a RTN in the assembly program would return control to the next line in the BASIC program after the CALL "EXEC".
The program listing for my Tektronix 4050 Tape Dump program below has been uploaded to the TransEra 750 Super Utilities ROM Pack folder.
The CALL commands in the program use the Super Utilities ROM to find and read every 256 byte block on a tape and send the data to the PC using the RS232 serial interface in the backpack.
For performance, when the blocks are from an ASCII program or ASCII data file - the blocks read are simply transmitted directly over serial.
If the blocks are from a BINARY or SECRET file - the 256 bytes are converted into 512 ASCII HEX characters with the routine starting at line 590, and then the 512 HEX characters are transmitted to the PC over serial.
The Tape Dump for the Tektronix General Utilities Tape is in the Super Utilities folder:
https://github.com/mmcgraw74/Tektro...edump6_GeneralUtilitiesVol1Tape1-originaltape
I suggest you download the file and examine it with Notepad++.
The first 256 byte block of any Tektronix 4050 tape file is the file header and the file type is at a specific starting location in this block. The first number in the header is the tape file number. The last number in that line is the number of 256 byte blocks that were MARKed for this file.
You will notice that the first four files in this tape dump are SECRET programs, and there is a line of text at the beginning of the first block after the header block: "TUT TUT TUT -- THIS IS A SECRET FILE"
This is the message printed to the screen by the BASIC ROM if you attempt to READ the file from BASIC.
I have not written the BASIC program using the Super Utilities ROM PACK to restore one of my tape dumps to a blank tape - but it should not be very difficult:
Code:
Read the first character string from the file - that is the header
Extract the file number and number of 256 byte blocks
FIND that file number (0 if the tape is blank and you are MARKing FILE 1)
MARK 1,SIZE where size is 256*NumberOfBlocks
Use the Super Utilities CALL commands to write each block (including full 256 byte header block)
If another file header is READ from the dump file - extract the file number and number of blocks and MARK 1,NewFileSize and continue
Here is my current Tape Dump program listing:
**** Note: I just noticed my program uses the 4052A/4054A BASIC feature with multi-character variable names like "Bin$" Change those names to single character for 4052/4054 computers ***
Code:
100 PRINT "CAPTURE COMPLETE TAPE - Monty McGraw SEP 2019"
110 PRINT "INPUT STARTING FILE NUMBER: ";
120 INPUT B
130 B=B-1
140 REM *** PROGRAM REQUIRES TRANSERA SUPER UTILITY ROM PACK
150 REM ***
160 T$="LAST,NEW,ASC_DATA,BIN_DATA,ASC_PGM,BIN_PGM"
170 DIM T1(6),T2(6)
180 READ T1
190 READ T2
200 DATA 1,6,10,19,28,36
210 DATA 4,3,8,8,7,7
220 DIM A$(258)
230 PRINT "FILE#: ";
240 FIND B+1
250 CALL "OPEN?",G,H
260 CALL "TBACK"
270 CALL "TREAD",A$
280 CALL "FILE?",A
290 CALL "TYPE?",D,E,F
300 IF B=A THEN 530
310 REM ** JUST INCREMENT FILE NUMBER
320 A=B+1
330 B=A
335 PRINT @40:A$;
340 PRINT @40:
350 PRINT @40:
360 PRINT A;"/";
370 B=A
380 FIND A
390 CALL "OPEN?",G,H
400 CALL "TBACK"
410 CALL "TREAD",A$
420 PRINT @40:A$
430 CALL "TYPE?",D,E,F
440 F1=F+1+(F>1)*2*E
450 F$=SEG(T$,T1(F1),T2(F1))
460 PRINT F$;
470 IF D<>1 THEN 490
480 PRINT " SECRET";
490 PRINT " ";
500 CALL "TREAD",A$
510 CALL "FILE?",A
520 F1=F+1+(F>1)*2*E
530 IF F1=1 THEN 570
540 IF D=1 OR F1=4 OR F1=6 THEN 590
550 PRINT @40:A$;
560 IF A<>-1 THEN 270
570 PRINT "DONE"
580 END
590 FOR I=1 TO 256
600 Bin$=SEG(A$,I,1)
610 Bin=ASC(Bin$)
620 High=INT(Bin/16)
630 Low=Bin-High*16
640 High$=CHR(High+48+7*(High>9))
650 Low$=CHR(Low+48+7*(Low>9))
660 PRINT @40:High$;Low$;
670 NEXT I
680 GO TO 270