Massbus Tape Controller (MT) - KS10FPGA/KS10FPGA GitHub Wiki

Massbus Tape Controller (MT)

The Massbus Tape Controller is a tape system consisting of a TM03 Tape Controller/Formatter and one or more TU77 Tape Transports. A real TM03/TU77 system reads and writes tape data in the industry standard 1600 BPI Phase Encoded (PE) or 800 BPI Non-Return-to-Zero Inverted (NRZI) mode. None of the tape controllers or transports supported by the KS10 supported 6250 BPI Group Code Recording (GCR) density.

In this implementation, the tape system is similar to a client/server system where the FPGA-based tape controller (client) requests access to tape data (read and write) via a register interface. The Console Processor (server) reads and writes standard SIMH ".tap" files, translates the data between a stream of bytes on the tape and 36-bit PDP-10 words (with some metadata on the side), and makes the data available to the FPGA-based tape controller. In this case, metadata refers to tape objects like beginning-of-tape (BOT), end-of-tape (EOT), Tape Marks (TMs).

The SIMH ".tap" format doesn't really create a distinction between PE or NRZI tape formats. The tape controller implementation extends this abstraction in a way such that tapes are always appear to be read and written in the proper format.

Once the files are stored using the Console Processor's Linux filesystem, the ".tap" files can be stored anywhere on my network.

This SIMH Tape Format is documented at http://simh.trailing-edge.com/docs/simh_magtape.pdf. The translation between bytes on the tape and 36-bit (or 32-bit) PDP-10 data is documented in the TM03 Magnetic Tape Formatter Users Guide (EK-0TM03-UG-003).

Although the DSTUA and DSTUB Magtape diagnostics support the TM02 Tape Controller/Formatter and other tape transports besides the TU77, only the TM03 and the TU77 are supported currently.

I should probably mention that I have a pair of Kennedy 9400s that have the same "Pertec" interface as the TU77 - if I wanted the full experience watching of spinning tapes. Mercifully I don't have enough FPGA pins available on the DE-10 Nano to implement the Pertec interface without some kind of an IO expander because a Pertec interface requires a LOT of pins - a standard Pertec interface has two 50-pin connectors. It might be more interesting to think about designing a generic USB-to-Pertec adapter and just plugging that into KS10 FPGA system. It also could be used for other things.

At 170 pounds each, this is not near the top of my list of things to think about.

Device Registers Summary

Each of the individual tape drives maintains some of its own state. In this context, that device state includes everything that would normally be associated with the physical tape drive. That device state includes the following registers:

MT Device Registers

Unibus Address

Massbus Address
(octal)

TU Register Name

R/W

Register Description

772440

0

MTCS1

R/W

Control and Status Register #1

772442

-

MTWC

R/W

Word Count Register

772444

-

MTBA

R/W

Bus Address Register

772446

5

MTFC

R/W

Frame Count Register

772450

-

MTCS2

R

Control and Status Register #2

772452

1

MTDS

R

Drive Status Register

772454

2

MTER

R

Error Register

772456

4

MTAS

R/W

Attention Summary Register

772460

7

MTCC

R

Check Character Register

772462

-

MTDB

R/W

Data Buffer Register

772464

3

MTMR

R/W

Maintenance Register

772466

6

MTDT

R

Drive Type Register

772470

10

MTSN

R

Serial Number Register

772472

11

MTTC

R/W

Tape Control Register

Register Set

MT Control and Status #1 Register (MTCS1)

Some of the bits in the MTCS1 Register are implemented in the RH11 Controller and some bits are implemented in the MT Device.

MT Control and Status Register #1 (MTCS1)

MT Control and Status Register #1 (MTCS1) – IO Address 772440

Bit(s)

Mnemonic

R/W

Description

15

SC

R

See RH11 controller

14

TRE

R/W

See RH11 controller

13

CPE

R

See RH11 controller

12

0

R

See RH11 controller

11

DVA

R

Drive available

Always read as 1

10

PSEL

R/W

See RH11 controller

9

A17

R/W

See RH11 controller

8

A16

R/W

See RH11 controller

7

RDY

R

See RH11 controller

6

IE

R/W

See RH controller

5-1

FUN[4:0]

R/W

Controller Function

See the section entitled Simulator Functions for a description of these functions.

FUN is only modified by writing to this field.

FUN is NOT reset by

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1') or
  2. Asserting Controller Clear (RHCS1[CLR] = '1').

Code
(octal)

Description

00

No operation

01

Unload

02

Illegal function

03

Rewind

04

Drive Clear

05-07

Illegal function

010

Read-in Preset

011

Illegal function

012

Erase

013

Write tape mark

014

Space forward

015

Space Reverse

016-023

Illegal function

024

Write check forward

025-026

Illegal function

027

Write check reverse

030

Write forward

031-033

Illegal function

034

Read forward

035-036

Illegal function

037

Read reverse

0

GO

R/W

Execute function specified in FUN field.

GO is asserted by writing a 1 with proper parity (Parity Test (MTCS2[PAT]) negated).

GO is negated when the command completes. Technically on read-back, GO is Drive Ready (MTDS[DRY]) negated.

GO is NOT reset by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1') or
  2. Asserting Controller Clear (RHCS1[CLR] = '1').

As noted above, the unit will not execute a command with incorrect parity.

MT Frame Count Register (MTFC)

The Frame Count Register counts tape events.

When writing to tapes, the Frame Count register is loaded with the two's complement of the number of frames to be written. When the Frame Count register overflows to zero, the write operation terminates.

When reading or performing a write-check operation, the Frame Count need not be specified and is automatically reset to zero for those operation. When the read or write-check operation is complete, the Frame Count Register contains the number of frames read from tape.

This register is located on the M8909 Board and is on Sheet MBI 8 of the schematic.

MT Frame Register (MTFC)

MT Frame Count Register (MTFC) – IO Address 772446

Bit(s)

Mnemonic

R/W

Description

15-0

FC

R/W

Frame Count.

The Frame Count Register operates as follows:

  1. During a data transfer operation (read/write), this register is incremented each time a tape character is transferred to or from the tape.
  2. During a space operation, this register is incremented each time a record is detected.

The contents of the Frame Count register may be read by the controller at any time; but the controller can only write into this register when the transport is not performing a space operation or data transfer operation (GO negated).

Altered by writing.

Cleared by TBD.

MT Drive Status Register (MTDS)

This register reports the status of the tape drive.

This register is located on the M8933 Board and is on the schematic Sheet TCCM7.

MT Drive Status Register (MTDS)

MT Drive Status Register (MTDS) – IO Address 772452

Bit(s)

Mnemonic

R/W

Description

15

ATA

R

Attention Active

ATA is asserted by the Tape Control Unit (TCU) under the following conditions:

  1. The selected transport is indicating that a Slave Status Change has occurred (RPDS[SLAC] = 1), or
  2. The selected transport have become ready after a non-data transfer operation, or
  3. At the completion of any command.

ATA is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command, or
  4. Writing a ‘1’ to the bit associated with this drive in the Attention Summary (MTAS) pseudo register, or
  5. Writing to MTCS1 under the following conditions:
    1. Go-bit (MTCS1[GO]) asserted, and
    2. No Parity Error (MTCS2[PAT] negated), and
    3. No Composite Error (MTDS[ERR] negated)

14

ERR

R

Composite Error

ERR is asserted by the Tape Control Unit (TCU)if any bits in MTER are asserted. This bit is combinatorially derived from those registers – clearing that bit in that register will negate ERR.

Because every bit in the Error Register (MTER) is reset by any of the following methods, the ERR bit is also negated by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

When ERR is asserted , the only command that is accepted is the Drive Clear (MTCS2[FUN] = 4) command.

13

PIP

R

Positioning in progress

PIP is asserted by the Tape Control Unit (TCU) during a Space Operation and is asserted by the selected Tape Transport during a Rewind Operation.

PIP is negated when the positioning command completes.

12

MOL

R

Media On-line

MOL is asserted by the selected Tape Transport.

MOL is asserted when the selected slave is loaded and is on-line; otherwise negated.

MOL is NOT affected by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

11

WRL

R

Write Lock

WRL is asserted by the selected Tape Transport.

On a 'real' tape drive, this would be asserted when a reel of tape without a write enable ring is loaded on the selected slave. In the KS10 FPGA, this is controlled by the MT Console Control Register which allows the operator to write protect the tape drive.

WRL is NOT affected by

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

10

EOT

R

End of Tape

EOT is asserted by the selected Tape Transport.

EOT is asserted when the EOT marker is recognized during forward tape motion.

EOT is negated when when any of the following occur:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command, or
  4. When a Rewind (MTCS2[FUN] = 3) command completes, or
  5. The EOT marker is passed over during reverse tape motion.

9

-

R

Reserved

Writes ignored.

Always read as zero.

8

DPR

R

Drive Present

DPR is asserted by the Tape Control Unit (TCU).

On a 'real' tape drive, this would be controlled by physically attaching the tape drive to the Massbus.

In the KS10 FPGA, this is controlled by the MT Console Control Register which allows the operator to remove the tape drive.

7

DRY

R

Drive Ready

DRY is asserted by the selected Tape Control Unit (TCU).

DRY is asserted at the completion of every command.

DRY is negated at the start of every valid command.

DRY is GO (MTCS1[GO]) negated.

6

SSC

R

Slave Status Change

SSC is asserted when any Tape Transport, selected or not, requires attention due to one of the following conditions:

  1. the completion of a Rewind command, or
  2. a power failure (not implemented), or
  3. the transport transitions to on-line, or
  4. the transport transitions to off-line.

Since SSC is a composite status of all slave devices, SSC is negated by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) commands to every slave device.

Note: Issuing Drive Clear (MTCS2[FUN] = 4) command to the currently selected slave device will only negate SSC if the currently selected slave is the only slave that requires attention.

5

PES

R

Phase Encoded Status

PES is asserted by the selected Tape Transport.

PES emulates the PE/NRZI formatting state off the tape. Unlike a real tape, this state is only semi-persistent because it is not written on the tape. PES, however, is not affect by the Drive Clear (MTCS2[FUN] = 4) command or the the Massbus Init signal which is good enough to pass the diagnostics.

PES is negated when the tape transport is taken off-line (or unloaded), or the tape transport is written in NRZI mode (MTTC[DEN] != 4) at BOT.

PES is asserted when the tape transport is written in PE mode (MTTC[DEN] == 4) at BOT.

PES is NOT affected by

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

Note: Writing to the tape file would create incompatabilities with SIMH which is undesirable.

4

SDWN

R

Settle Down

SDWN is asserted for 14 milliseconds by the selected Tape Transport whenever a motion command (forward, reverse, or rewind) is negated.

SDWN is used by the tape transport to delay commands that cause tape motion irection changes until after the tape stops. This delay is elided if the tape motion direction of the current command is in the same direction as the previous command.

SDWN is NOT affected by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

Note: The 14 millisecond period is defined (for the TU77) in the TU77 Magnetic Tape Transport Technical Manual Volume 2 (EK-2TUJ77-TM-002) on the bottom of Page 5-11.

3

IDB

R

Identification Burst

IDB is asserted by the selected Tape Transport.

On a tape that is formatted for PE (see the PES bit), IDB is asserted during any Read Forward, Write Forward or Space Forward operation that begins at BOT.

IDB is negated by:

  1. Any another command is issued (not at BOT), or
  2. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  3. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  4. Issuing a Drive Clear (MTCS2[FUN] = 4) commands to every slave device.

2

TM

R

Tape Mark

TM is asserted by the Tape Control Unit (TCU).

TM is asserted when a tape mark is detected and remains set until the next tape motion operation is initiated.

TM is negated by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command to every slave device.

Note: The SIMH tape format has a different mechanism for encoding Tape Marks.

1

BOT

R

Beginning of Tape

BOT is asserted by the selected Tape Transport when passing BOT (Beginning of Tape) in the reverse direction.

BOT is negated by the selected Tape Transport when passing BOT (Beginning of Tape) in the forward direction.

MOL is NOT affected by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

0

SLA

R

Slave Attention

SLA is asserted when the selected Tape Transport transitions from off-line to on-line.

If interrupts are enabled, this raises an interrupt; since SLA asserts ATA, and ATA raises an interrupt.

SLA is cleared by:

  1. Asserting IO Bridge Clear (UBASR[INI] = '1'), or
  2. Issuing a Drive Clear (MTCS2[FUN] = 4).

MT Error Register (MTER)

This register contains the error status of the addressed drive.

This register is located on the M8909 Board and is on the schematic Sheet MBI 10 and Sheet MBI 11.

MT Error Register (MTER)

MT Error Register (MTER) – IO Address 772454

Bit(s)

Mnemonic

R/W

Description

15

COR/CRC

R

Correctable Data/CRC Error

COR/CRC is set when:

  1. a tape character is used to correct the data on-the-fly in PE mode.
  2. when the CRC character generated from read back data does not agree with the CRC read from tape in NRZI mode.

COR/CRC is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

14

UNS

R

Unsafe

UNS is asserted when:

  1. MOL bit negated (MTDS[MOL] = 0), and
  2. Any command code other than Drive Clear (MTCS2[FUN] = 4) is issued, and
  3. the GO bit is asserted (MTCS1[GO] = 1).

UNS is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

13

OPI

R

Operation Incomplete

OPI is asserted when:

  1. read or space operation indicates that a tape record has not been detected within 4.3 sec from command initiation, or
  2. A write operation indicates that a read-after-write tape record has not been detected within 0.43 sec from command initiation.
  3. Can also indicate that NSG > 0.8 inches.

OPI is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

12

DTE

R

Drive Timing Error

DTE is not implemented.

Writes ignored.

Always read as zero.

11

NEF

R

Non-Executable Function

NEF is asserted when:

  1. A write operation is issued on a write-protect transport (MTDS[WRL] = 1), or
  2. A space reverse, read reverse, or write check reverse is issued when the tape is at BOT, or
  3. A space or write operation is issued when Frame Count Status is zero (MTTC[FCS] = 0), or
  4. A read or write operation is attempted with an NRZI format (MTTC[DEN] < 4) and the initial value in the Frame Count Register (MTFC) is less than 13 (two's complement).
  5. A write operation in NRZI format is issued on a PE formatted tape (MTDS[PE] = 1) when not at the beginning of tape (MTDS[BOT]).
  6. A write operation in PE format is issued on a NRZI formatted tape (MTDS[PE] = 0) when not at the beginning of tape (MTDS[BOT]).

NEF is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

Aqny conditions that create a Non-Executable Function Error causes cause the function to not execute.

10

CS/ITM

R

Correctable skew / Illegal Tape Mark

CS/ITM is asserted when:

  1. excessive but correctable skew is detected in data read back from tape in PE mode, or
  2. a bit pattern is detected on tape which has the general characteristics of an NRZI filemark.
    (specifically, two single characters separated by seven blank character spaces) but which does not contain the exact data expected in an NRZI filemark).

CS/ITM is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

9

FCE

R

Frame Count Error

FCE is asserted when a space operation has terminated and the frame counter is not cleared.

FCE is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

8

NSG

R

Non-Standard Gap

NSG is asserted after a data transfer operation and when any tape characters are read while the read head is scanning the first half of the inter-record gap.

NSG is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

7

PEF/LRC

R

PE Format Error/LRC

This bit is asserted under the following conditions:

  1. When an invalid preamble or postamble is detected in PE mode, or
  2. When the LRC character generated from readback data does not match the LRC character read from tape in NRZI mode.

PEF/LRC is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

6

INC/VPE

R

In-correctable Data / Vertical Parity Error

INC/VPE is asserted during an PE read operation when an uncorrectable error has occurred. (Not implemented)

INC/VPE is asserted during an NRZI read operation when:

  1. a vertical parity error occurs, or
  2. a frame containing all zeros and with even parity is written to the tape, or
  3. the data has occurs after the skew delay is over (not implemented).

Note: A frame containing all zeros and with even parity has no flux changes on any channel and is indistinguishable from a gap on the tape. The tape transport 'fixes' this condition by flipping a data bit and applying even parity (i.e., two bits are set).

INC/VPE is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

The SIMH tape format does not include parity and writing parity to the tape file would create incompatabilities with the SIMH which is undesirable.

This feature is tested by DSTUA TST163.

5

DPAR

R

Data Bus Parity Error

DPAR is not implemented because it is not testable. DPAR is not tested by the DSTUA diagnostics when attached to an RH11. See note in DSTUA TST67.

Writes ignored.

Always read as 0.

4

FMTE

R

Format Error

FMTE is asserted when a data transfer function is issued with an unsupported format code (MTTC[FMT]). Any conditions that create a Format Error causes cause the transfer function to not execute.

For a TM03, the only supported formats are (octal):

  1. 000 : PDP-10 Core Dump. Requires M8915 or M8915-YA Bit Fiddler board.
  2. 003 : PDP-10 Normal. Requires M8915 or M8915-YA Bit Fiddler board.
  3. 014 : PDP-11 Normal. Requires M8906 Bit Fiddler board.
  4. 016 : PDP-15 Normal. Requires M8906 Bit Fiddler board.

All other formats except those described above are unsupported and generate a Format Error.

FMTE is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

This is tested by DSTUA TST72.

3

CPAR

R

Control Bus Parity Error

CPAR is asserted when Massbus device detects a parity error on the control bus.

The KS10 FPGA does not implement parity on Massbus; but the Massbus devices do have a means to perform parity tests. In the KS10 FPGA, instead of this testing parity, this test mode simply forces parity errors.

CPAR is asserted by asserting Parity Test on the RH11 (MTCS2[PAT]) and writing to one of the following registers:

  1. Control/Status Register #1 (MTCS1)
  2. Frame Count Register (MTFC)
  3. Maintenance Register (MTMR)
  4. Tape Control Register (MTTC)

CPAR is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

This is tested by DSTUA TST6.

2

RMR

R

Register Modification Refused

RMR is asserted when the controller attempts to write into any implemented tape transport register except the Maintenance Register (MTMR) or the Attention Summary Register (MTAS) when the GO bit is asserted.

RMR is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

1

ILR

R

Illegal Register

ILR is asserted when an attempt to read or write any register with an address higher than the MTTC register.

ILR is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

0

ILF

R

Illegal Function

ILF is asserted when and illegal function (MTCS2[FUN]) is selected and GO is asserted (MTCS1[GO]).

The illegal functions are (octal, without "GO" bit): 02, 05, 06, 07, 011, 016, 017, 020, 021, 022, 023, 025, 026, 031, 032, 033, 035, and 036.

ILF is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

MT Attention Summary Register (MTAS)

The Attention Summary Pseudo Register allows the program to examine or modify the status of all tape drives in a single operation.

MT Attention Summary Register (MTAS)

MT Attention Summary (MTAS) – IO Address 772456

Bit(s)

Mnemonic

R/W

Description

15-8

-

R

Writes ignored.

Always read as zero.

7

ATA7

R/W

Attention Active on Tape 7

ATA7 reflects value of Tape 7's MTDS[ATA].

ATA7 is negated by writing 1 to Tape 7's MTDS[ATA].

6

ATA6

R/W

Attention Active on Tape 6

ATA6 reflects value of Tape 6's MTDS[ATA].

ATA6 is negated by writing 1 to Tape 6's MTDS[ATA].

5

ATA5

R/W

Attention Active on Tape 5

ATA5 reflects value of Tape 5's MTDS[ATA].

ATA5 is negated by writing 1 to Tape 5's MTDS[ATA].

4

ATA4

R/W

Attention Active on Tape 4

ATA4 reflects value of Tape 4's MTDS[ATA].

ATA4 is negated by writing 1 to Tape 4's MTDS[ATA].

3

ATA3

R/W

Attention Active on Tape 3

ATA3 reflects value of Tape 3's MTDS[ATA].

ATA3 is negated by writing 1 to Tape 3's MTDS[ATA].

2

ATA2

R/W

Attention Active on Tape 2

ATA2 reflects value of Tape 2's MTDS[ATA].

ATA2 is negated by writing 1 to Tape 2's MTDS[ATA].

1

ATA1

R/W

Attention Active on Tape 1

ATA1 reflects value of Tape 1's MTDS[ATA].

ATA1 is negated by writing 1 to Tape 1's MTDS[ATA].

0

ATA0

R/W

Attention Active on Tape 0

ATA0 reflects value of Tape 0's MTDS[ATA].

ATA0 is negated by writing 1 to Tape 0's MTDS[ATA].

MT Character Check Register (MTCC)

The check character register is a nine-bit, read-only register that permits the programmer to check the validity of a data transfer.

In NRZI mode, this register contains the CRCC for the operation.

In PE mode, at the end of a PE read operation, this register contains a "dead track" indication.

This register is located on the M8905 Board and is on the schematic Sheet MR4.

MT Character Check (MTCC)

MT Character Check (MTCC) – IO Address 772460

Bit(s)

Mnemonic

R

Description

15-9

-

R

Reserved.

Writes ignored.

Always read as zero.

8

CRCP
DTP

R

CRC Parity
Dead Track Parity

7-0

CRC
DT

R

CRC Data
Dead Track Data

MT Maintenance Register (MTMR)

The maintenance register is implemented as much as is required to pass diagnostic tests.

This register is located on the M8905 Board and is on the schematic Sheet MR5.

MT Maintenance Register (MTMR)

MT Maintenance Register (MTMR) – IO Address 772464

Bit(s)

Mnemonic

R/W

Description

15-7

MDF[8:0]

R/W

Maintenance Data Field

Contains the Longitudinal Redundancy Check Character (LRCC) of the last record after NRZI transfers.

Buffers the data generated during wraparound operations.

MDF is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

Note: The LRCC parity is reported in the low order bit of this register (MDF[0]).

6

SWC2

R

Selected Slave Clock

Writes ignored

The SWC2 clock is generated by the tape transport and depends on the tape speed. The clock rate of the SWC2 bit is:

  • 9000 Hz for 45 inch per second transports (TE16) at 200 bytes per inch
  • 7500 Hz for 75 inch per second transports (TU45) at 200 bytes per inch (clock divided by 2).
  • 6250 Hz for 125 inch per second transports (TU77) at 200 bytes per inch (clock divided by 4).

The clock dividers listed above are illustrated in the TM03 Technical Manual, in Figure 4-30.

This is tested by DSTUA TST104. The clock frequencies listed above are consistent with the values in the TIMSWC table.

5

MC

R/W

Maintenance Clock

If the GO bit is asserted and the Maintenance Opcode is one of the following:

  1. WRP1 (MTMR[MOP] = 04), or
  2. WRP2 (MTMR[MOP] = 05), or
  3. WRP3 (MTMR[MOP] = 06); then

Then the MC bit toggles each time a write to the Maintenance Register (MTMR) is performed.

Else, if the GO bit is asserted and the Maintenance Opcode is WRP0 (MTMR[MOP] = 03), the MC bit changes state after each read strobe occurs.

MC is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

4-1

MOP[3:0]

R/W

Maintenance Opcode

When the Tape Control Unit is in Maintenance Mode (MTMR[MM] = 1), this register controls the type of maintenance action to be performed.

MOP is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

Opcode
(Octal)

Remarks

00

No OP

Executing this opcode has no effect on the system.

01

IRD

Interchange Read

02

MREP

Even Parity

When this bit is set and data is sent from the Tape Controller to the RH11, the RH11 will indicate Massbus Data Bus Parity Errors (MTCS2[DPE] = 1) on all data bus (NPR) transfers and/or will indicate Massbus Control Bus Parity Errors (MTCS1[CPE] = 1) on all control bus transfers (register reads).

Note: The KS10 FPGA does not implement parity. Merely setting this bit causes CPE and DPE failures under the conditions described above. This is sufficient to pass the DSTUA parity tests.

03

WRP0

Data Wraparound, Global.

04

WRP1

Data Wraparound, Partial.

05

WRP2

Data Wraparound, Formatter Write

06

WRP3

Data Wraparound, Formatter Read

07

CROCC

Cripple Reception of OCC

010

ILCC1

In NRZI mode, suppress CRC check.

In PE mode, suppress detection of data in logical track 1.

011

ITM12

In NRZI mode, set Bit-5 of tape data.

In PE mode, suppress detection of data in logical track 1 and 2.

012

MMEOR

Maintenance Mode End of Record.

013

INCPRE

Invert Bit-1 of preamble and postamble in PE mode.

0

MM

R/W

Maintenance Mode

When MM is asserted, the Tape Control Unit enters a maintenance mode.

MM is negated under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4).

MT Drive Type Register (MTDT)

This register indicates the type of tape drive that is connected to the controller.

This register is located on the M8933 Board and is on the schematic Sheet TCCM7.

The information in the table below was extracted from the DSTUA diagnostic.

MT Drive Type Register (MTDT)

RP Drive Type Register (RPDT) – IO Address 776726

Bit(s)

Mnemonic

R/W

Drive

Register Contents

15

NSA

R

All

Not Sector Addressed

Writes Ignored.

Always read as 1.

14

TAP

R

All

Tape Transport

Writes Ignored.

Always read as 1.

13

MOH

R

All

Moving Head

Writes Ignored.

Always read as 0.

12

7CH

R

All

7 Channel

Generally tape controller like the TM02/TM03 supported both 7-track and 9-track tape transports - the only significant difference between the two is the type of head. The tape transports indicates to the controller the type of drive by asserting (or negating) the "7CH" wire which is indicated by this status bit.

This design only supports 9-track devices simply because the PDP-10 SIMH tape file format stores data in 8-bit bytes. Vertical Odd Parity (the 9th bit) is not supported by SIMH because the tape file is assumed to be loss-less.

Writes Ignored.

7CH is read as 0.

I don't know if mixing 7-track and 9-track devices on a single controller was supported or not. Probably not. You can mix TU16s and TE16s on the same salve bus; but, you cannot mix TU16s and TU45s on the same slave bus.

11

DRQ

R

All

Drive Request Required.

Writes Ignored.

Always negated to indicate a single port device.

10

SPR

R

All

Slave Present

Writes Ignored.

SPR is asserted after the transport is powered-up and the selection code has been written to the Tape Control Register (MTTC[SS]) register; otherwise negated.

9-6

-

R

All

Reserved

Writes Ignored.

Always read as 0.

5

FMT

R

All

Formatter Type

Writes Ignored.

This bit is asserted for a TM03 and negated for a TM02.

4

-

R

All

Reserved

Writes Ignored.

Always read as 0.

3-0

DT

R

Drive Type

DT
(octal)

Tape Unit Type

010

Unselected slave

011

TU16

012

TU45

013

TU16/TE16

014

TU77

015

Unknown

016

Unknown

017

Unknown

MT Serial Number Register (MTSN)

The MTSN register reports the Serial Number of the tape drive. The Serial Number is hardwired to the tape drive number. The values implemented in the FPGA are the same values that SIMH uses.

This register is located on the M8908 Board (single sheet).

MT Serial Number Register (MTSN)

MT Serial Number Register (MTSN) – IO Address 772470

Bit(s)

Mnemonic

R/W

Drive

Register Contents

15-0

SN

R

0

000031

1

000032

2

000033

3

000034

4

000035

5

000036

6

000037

7

000040

MT Tape Control Register (MTTC)

This register is located on the M8905 Board and is on the schematic Sheet MR6.

MT Tape Control Register (MTTC)

MT Tape Control Register (MTTC) – IO Address 772472

Bit(s)

Mnemonic

R/W

Description

15

ACCL

R

Acceleration

Writes ignored.

The ACCL bit is asserted when the tape transport is getting up to speed or not moving.

ACCL is asserted under the following conditions:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command, or
  4. At the completion or a read or write command.

The ACCL bit is negated approximately 0.28 seconds after a Read command or Write command is initiated.

In the TM03, the ACCL is negated after 16384 clock cycles the 800 BPI clock (60 KHz).

14

FCS

R

Frame Count Status

FCS is asserted when data is written into the Frame Count
Register (MTFC).

FCS is negated when any of the following occur:

  1. FCS is negated when data the Frame Count Register
    (MTFC) overflows, indicating all of the frames have
    been transferred.
  2. Asserting IO Bridge Clear (UBACSR[INI] = '1'), or
  3. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  4. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

13

SAC

R

Slave Access Change

SAC is asserted when the Slave Select (MTTC[SS]) is modified.

SAC is negated "on the next drive set pulse" -
whatever that means...

Writes ignored.

12

EAODTE

R/W

Enable Abort On Data Transfer Errors

EAODTE is modified by writing.

EAODTE is negate when ...

When asserted, EAODTE aborts read and write operations
when any of the following errors occur:

  1. COR/CRC (MTER[COR/CRC]), or
  2. PEF/LRC (MTER[PEF/LRC]), or
  3. INC/VPE (MTER[INC/VPE]), or
  4. DPAR (MTER[DPAR]).

11

-

R/W

Reserved

Does nothing.

Altered by writes.

10-8

DEN[2:0]

R/W

Density Select

DEN is modified by writes.

DEN is NOT cleared by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

DEN[2:0]

Description

0

200 BPI NRZI (TM02/TE16/TU16).

800 BPI NRZI (TM03).

1

556 BPI NRZI (TM02/TE16/TU16).

800 BPI NRZI (TM03).

2

800 BPI NRZI (TM02/TE16/TU16).

800 BPI NRZI (TM03).

3

800 BPI NRZI.

4

1600 BPI PE.

5

Unknown.

6

Unknown.

7

Unknown.

It looks to me (I could be wrong...) that only DEN[2] selects between 800 BPI NRZI and 1600 BPI PE density with this configuration of boards - the two LSBs (DEN[1:0]) are ignored. See notes regarding the description of the density initialization associated with the Preset function.

7-4

FMT[3:0]

R/W

Format Select

FMT is modified by writes.

FMT is NOT cleared by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

Apparently the TM02/TM03 supported multiple "Bit Fiddler" boards depending on the processor and tape transport. This section describes the M8915-YA which was used with the PDP-10 and the TU-77 Tape Transport.

For additional information on Tape Formats, see:

TU16/TM02 Tape Drive System Maintenance Manual - EK-TU16-MM-002

TM03 Magnetic Tape Formatter Technical Manual - EK-0TM03-TM-002 Revised July 1979.

TOPS-10 Tape Processing Manual, AA-L412A-TB, July 1982, Section 6.1 entitled "DEC-Compatible Core Dump Mode (7- or 9-Track)" for tape formatting information.

FMT[3:0]
(octal)

Description

0

PDP-10 Core Dump (TM02/TM03)

On a 9-track tape, the PDP-10 Core Dump mode stores one 36-bit word of data in five 8-bit bytes. Note that the last frame is only half used (4-bits are always zero on reads and ignored on writes).

In the TM02, this format requires the M-TBD Bit Fiddler board.

In the TM03, this format requires the M8915 or M8915-YA Bit Fiddler board.

1

PDP-10 Seven Track (TM02 only)

6x 6-bit characters.

In the TM02, this format requires the M8914 Bit Fiddler board.

In the TM03, this format is not supported.

Because the KS10 FPGA only supports the TM03, this format is not supported.

2

PDP-10 ASCII (TM02 only)

In the TM02, this format requires the M8914 Bit Fiddler board.

In the TM03, this format is not supported.

Because the KS10 FPGA only supports the TM03, this format is not supported.

3

PDP-10 Compatibility (TM02/TM03)

On a 9-track tape, the PDP-10 ASCII (8-bit) mode stores 32-bit data in four 8-bit bytes.

On reads, the contents of the 4 LSBs of 36-bit word are undefined. The 4 LSBs either contain zeroes or copies of the parity bits depending on the tape drive and/or tape formatter.

On writes, the contents of the 4 LSBs of 36-bit word are ignored and are not written to tape.

In the TM02, this format requires the M8914 Bit Fiddler board.

In the TM03, this format requires the M8915 or M8915-YA Bit Fiddler board.

4

Reserved

5

Reserved

6

Reserved

7

Reserved

010

Reserved

011

Reserved

012

Reserved

013

Reserved

014

PDP-11 Normal

2x 8-bit characters.

In the TM02, this format is not supported.

In the TM03, this format requires the M8906 Bit Fiddler board.

In PDP-10 applications, this mode is not supported although it does not raise a Format Error (MTER[FMTE]) when selected. The Format Error is tested by DSTUA TST72.

015

PDP-11 Core Dump

4x 4-bit characters.

Not supported.

016

PDP-15 Normal

2x 8-bit characters.

This format requires the M8906 Bit Fiddler board.

In PDP-10 applications, this mode is not supported although it does not raise a Format Error (MTER[FMTE]) when selected. The Format Error is tested by DSTUA TST72.

017

Reserved

3

EVPAR

R/W

Tape Parity

When asserted in NRZI mode, even parity will be written
on tape and even parity is expected on read-back.

When negated in NRZI mode, odd parity will be written
on tape and odd parity is expected on read-back.

Odd parity is always used in PE mode.

EVPAR is modified by writing.

EVPAR is negated by TBD.

2-0

SS[2:0]

R/W

Slave Select

Specifies the unit number of the tape transport.

Modified by writing.

SS[2:0] is NOT cleared by:

  1. Asserting IO Bridge Clear (UBACSR[INI] = '1'),
  2. Asserting Controller Clear (RHCS1[CLR] = '1'), or
  3. Issuing a Drive Clear (MTCS2[FUN] = 4) command.

Functions

The TM02/TM03/TU77 can execute the following commands:

<tr>
  <td><p align="center">027</p></td>
  <td><p align="center">Write Check Reverse</p></td>
  <td>
    <p>At the start of the Write Check Reverse operation, the contents
      of the Frame Count Register is set to zero.
    </p>
    <p>The Write Check Reverse operation does a word-by-word comparison
      between the contents of memory and the data read from tape when
      the tape is moving in the backward direction (towards BOT).
      The status registers are updated during the operation as follows:
      <ul>
        <li>The Frame Counter is incremented for every byte read from
          tape.
        </li>
        <li>The Word Counter is incremented by two for every word
          compared with memory.
        </li>
        <li>The Base Address is decremented by two for every word
          compared with memory.
        </li>
      </ul>
    </p>
    <p>Note: the number of bytes per word varies depending on the
      selected tape format and is usually either 4 bytes-per-word
      or 5 bytes-per-word.
    </p>
    <p>The Write Check Reverse operation terminates when any of the
      following conditions exist:
      <ol>
        <li>A Tape Mark is detected. In that case, assert Tape Mark
          (MTDS[TM] = 1) and position the file just before the
          tape mark, or
        </li>
        <li>An beginning-of-file is detected. In that case, assert
          Beginning-of-Tape(MTDS[BOT] = 1) and position the file at
          the beginning-of-file, or
        </li>
        <li>The Frame Count Register (MTFC) increments to zero, or</li>
        <li>The Word Count Register (MTWC) increments to zero.</li>
      </ol>
    </p>
    <p>When completed, the Write Check Reverse function asserts
      Drive Ready (MTDS[DRY] = 1) and the Frame Count Register
      contains the number of bytes (frames) read from the tape.
    </p>
    <p>If a mismatch is detected, a Write Check Error is asserted
      (MTCS2[WCE] = 1).
    </p>
    <p>Note: as far as the tape transport is concerned, a Write Check
      Reverse operation is identical to a Read Reverse operation.
    </p>
  </td>
</tr>
<tr>
  <td><p align="center">030</p></td>
  <td><p align="center">Write Forward</p></td>
  <td>
    <p>The Write Forward operation reads data from memory and
      transfers the data to the Tape File while moving the tape in
      the forward direction (towards EOT). The status registers are
      updated during the operation as follows:
      <ul>
        <li>The Frame Counter is incremented for every byte written
          from tape.
        </li>
        <li>The Word Counter is incremented by two for every word
          written to memory.
        </li>
        <li>The Base Address is incremented by two for every word written
          to memory.
        </li>
      </ul>
    </p>
    <p>Note: the number of bytes per word varies depending on the
      selected tape format and is usually  either 4 bytes-per-word
      or 5 bytes-per-word.
    </p>
    <p>The Read Forward operation terminates when any of the
      following conditions exist:
      <ol>
        <li>A Tape Mark is detected. In that case, assert Tape Mark
          (MTDS[TM] = 1) and position the file just after the tape
          mark, or
        </li>
        <li>An end-of-file is detected. In that case, assert
          End-of-Tape (MTDS[EOT] = 1) and position the file at the
          end-of-file, or
        </li>
        <li>The Frame Count Register (MTFC) increments to zero, or</li>
        <li>The Word Count Register (MTWC) increments to zero.</li>
      </ol>
    </p>
    <p>When completed, the Write Forward function asserts Drive Ready
      (MTDS[DRY] = 1).
    </p>
  </td>
</tr>
<tr>
  <td><p align="center">034</p></td>
  <td><p align="center">Read Forward</p></td>
  <td>
    <p>At the start of the Read Forward operation, the contents of the
      Frame Count Register is set to zero.
    </p>
    <p>The Read Forward operation reads data from the Tape File
      and transfers the data to memory while moving the tape in the
      forward direction (towards EOT). The status registers are
      updated during the operation as follows:
      <ul>
        <li>The Frame Counter is incremented for every byte read
          from tape.
        </li>
        <li>The Word Counter is incremented by two for every word
          written to memory.
        </li>
        <li>The Base Address is incremented by two for every word
          written to memory.
        </li>
      </ul>
    </p>
    <p>Note: the number of bytes per word varies depending on the
      selected tape format and is usually either 4 bytes-per-word
      or 5 bytes-per-word.
    </p>
    <p>The Read Forward operation terminates when any of the following
      conditions exist:
      <ol>
        <li>A Tape Mark is detected. In that case, assert Tape Mark
          (MTDS[TM] = 1) and position the file just after the tape
          mark, or
        </li>
        <li>An end-of-file is detected. In that case, assert
          End-of-Tape (MTDS[EOT] = 1) and position the file at the
          end-of-file, or
        </li>
        <li>The Word Count Register (MTWC) increments to zero.</li>
      </ol>
    </p>
    <p>When completed, the Read Forward function asserts Drive Ready
      (MTDS[DRY] = 1) and the Frame Count Register contains the
      number of bytes (frames) read from the tape.
    </p>
  </td>
</tr>
<tr>
  <td><p align="center">037</p></td>
  <td><p align="center">Read Reverse</p></td>
  <td>
    <p>At the start of the Read Read operation, the contents of the
      Frame Count Register is set to zero.
    </p>
    <p>The Read Reverse operation reads data from the Tape File and
      transfers the data to memory while moving the tape in the reverse
      direction (toward BOT). The status registers are updated during
      the operation as follows:
      <ul>
        <li>The Frame Counter is incremented for every byte read
          from tape.
        </li>
        <li>The Word Counter is incremented by two for every word
          written to memory.
        </li>
      <li>The Base Address is decremented by two for every word
        written to memory.
      </li>
      </ul>
    </p>
    <p>Note: the number of bytes per word varies depending on the
      selected tape format and is usually either 4 bytes-per-word
      or 5 bytes-per-word.
    </p>
    <p>The Read Reverse operation terminates when any of the
      following conditions exist:
      <ol>
        <li>A Tape Mark is detected. In that case, assert Tape Mark
          (MTDS[TM] = 1) and position the file just before the
          tape mark, or
        </li>
        <li>A beginning-of-file is detected. In that case, assert
          Beginning-of-Tape (MTDS[BOT] = 1) and position the file
          at the beginning-of-file, or
        </li>
        <li>The Word Count Register (MTWC) increments to zero.</li>
      </ol>
    </p>
    <p>When completed, the Read Reverse function asserts Drive Ready
      (MTDS[DRY] = 1) and the Frame Count Register contains the number
      of bytes (frames) read from the tape.
    </p>
  </td>
</tr>

Command Function Codes

Function Code
(Octal)

Operation

Description

0

No Op

Executing a No Op sets Drive Ready (MTDS[DRY]) immediately and has no other effect.

01

Unload

The unload function initiates a rewind on the selected transport, places it off-line, and unloads tape.

The rewind operation is detailed below and is not repeated here.

Note: Operator intervention is required to bring the slave back ONLINE.

03

Rewind

Rewinds to the Beginning-of-Tape (BOT) marker on selected transport.

The rewind function operates as follows:

  1. Before any motion begins, the TM03 checks the status of the settle-down (MTDS[SDWN]) status.
    1. If MTDS[SDWN] is negated, the transport begins rewinding immediately.
    2. If MTDS[SDWN] is asserted and the previous tape motion was in the reverse direction, the transport begins rewinding immediately.
    3. If MTDS[SDWN] is asserted and the previous tape motion was in the forward direction, the transport waits until MTDS[SDWN] is asserted before beginning to rewind. The settle-down period may be as long as 15 milliseconds.

    The MTDS[SDWN] logic described above allows the tape transport to transition between forward, stopped, and reverse tape motion with optimal timing.

    During this time, the status bits are set as follows:

    1. Drive Ready negated (MTDS[DRY] = 0), and
    2. Attention Active negated (MTDS[ATA] = 0), and
    3. Slave Status Change negated (MTDS[SSC] = 0), and
    4. Slave Attention negated (MTDS[SLA] = 0), and
    5. Settle Down determined per above (MTDS[SDWN] = 0,1), and
    6. Positioning in Progress negated (MTDS[PIP] = 0).
  2. When the tape transport recognizes the rewind command and if the tape transports is already at BOT, the TM03 will respond as follows:
    1. Drive Ready asserted (MTDS[DRY] = 1), and
    2. Attention Active asserted (MTDS[ATA] = 1), and
    3. Slave Status Change asserted (MTDS[SSC] = 1), and
    4. Slave Attention negated (MTDS[SLA] = 0), and
    5. Settle Down negated (MTDS[SDWN] = 0), and
    6. Positioning in Progress negated (MTDS[PIP] = 0), and
    7. Beginning of Tape is asserted (MTDS[BOT] = 1).
  3. When the tape transport recognizes the rewind command and if the tape transports is not at BOT, the tape transports will initiate the rewind operation and the TM03 will respond as follows:
    1. Drive Ready asserted (MTDS[DRY] = 1), and
    2. Attention Active asserted (MTDS[ATA] = 1), and
    3. Slave Status Change negated (MTDS[SSC] = 0), and
    4. Slave Attention negated (MTDS[SLA] = 0), and
    5. Settle Down negated (MTDS[SDWN] = 0), and
    6. Positioning in Progress asserted (MTDS[PIP] = 1), and
    7. Beginning of Tape is negated (MTDS[BOT] = 0).

    If interrupts are enabled, the TM03 asserting Attention Active (MTDS[ATA]) will raise an interrupt. At this point the PDP-10 can clear Attention Active, switch to a different slave transport, and do other things while the first tape drive rewinds.

    At the completion of the rewind, when the tape drive arrives at BOT, the TM03 will respond as follows:

    1. Drive Ready asserted (MTDS[DRY] = 1), and
    2. Attention Active asserted (MTDS[ATA] = 1), and
    3. Slave Status Change asserted (MTDS[SSC] = 1), and
    4. Slave Attention negated (MTDS[SLA] = 0), and
    5. Settle Down negated (MTDS[SDWN] = 0), and
    6. Positioning in Progress asserted (MTDS[PIP] = 1), and
    7. Beginning of Tape is negated (MTDS[BOT] = 0).

    If interrupts are enabled, the TM03 asserting Slave Status Change (MTDS[SSC]) will raise an interrupt. At this point the PDP-10 is notified that the rewind is complete even if it has selected a different tape drive.

04

Drive Clear

Resets the TM03 and the selected transport devices only. This does not affect unselected transport devices.

The Drive Clear function clears GO (CSR1[GO]) immediately.

010

Read-in Preset

The Read-In Preset function does the following:

  1. Modifies the Tape Control register (MTTC) as follows:
    1. Sets Slave Select to Unit 0 (MTTC[SS] = 0), and
    2. Sets Odd Parity (MTTC[EVPAR] = 0), and
    3. Sets the format select to PDP-10 core dump format (MTTC[FMT] = 0), and
    4. Sets the density to 800 BPI NRZI (MTTC[DEN] = 2); and then
  2. Causes slave 0 to rewind.

The rewind operation is detailed above and is not repeated here.

Note: The documentation that describes the density select initialization for this command is confusing and misleading. The TM03 Users Guide says that read-in preset command should set the density to "800 bit/inch NRZI". Table 2-7 in the TM03 Users Guide shows that the correct register setting for "800 bit/inch NRZI" is 3 (not 2 as described above). Initializing this register to 3 will cause DSTUA TST106 to fail. Furthermore, the schematic M8905/MR6 clearly shows this register initialized to 2.

It looks to me (I could be wrong...) that only DEN[2] selects between 800 BPI NRZI and 1600 BPI PE density with this configuration of boards. The two LSBs (DEN[1:0]) are ignored. Therefore a register setting of either 2 and 3 would select 800 BPI NRZI.

Note also: Improper sequencing may cause spurious Unsafe indications (MTER[UNS]). This will occur when a Preset command is initiated which relies on the slave select change to slave 0 for the command to be valid. In this case, the slave change must occur before other errors are checked when the command is initiated.

012

Erase

The Erase Function erases approximately 3 inches of tape.

When 800 BPI density is selected, 2400 bytes of data is erased. When 1600 BPI density is selected, 4800 bytes of data is erased.

Starting at the current position, erase the amount of tape indicated by the specified length and density as described above. If the gap that is written overwrites an existing record, the following record is shortened appropriately. The tape is positioned after the gap.

When completed, Erase does the following:

  1. Asserts Attention Active (MTDS[ATA] = 1), and
  2. Asserts Drive Ready (MTDS[DRY] = 1).

013

Write Tape Mark

Writes a special tape mark meta-data character on the selected tape transport and positions the file just after the new tape mark.

When completed, Write Tape Mark does the following:

  1. Asserts Attention Active (MTDS[ATA] = 1), and
  2. Asserts Drive Ready (MTDS[DRY] = 1).

014

Space Forward

The Space Forward command moves the tape forward (toward EOT) on the selected transport over the number of records specified by the Frame Count register. Each time a new record is detected, the Frame Counter is incremented. The Space Forward function terminates when any of the following conditions exist:

  1. A Tape Mark (TM) is detected. In that case, assert Tape Mark (MTDS[TM] = 1) and position the file just after the tape mark, or
  2. An end-of-file is detected. In that case, assert End-of-Tape (MTDS[EOT] = 1) and position the file at the end-of-file, or
  3. The contents of the Frame Counter register is incremented to zero.

When a TM or EOT is detected, the contents of the Frame Count Register indicates the number of records that were spaced over.

When completed, the Space Forward function:

  1. Asserts Attention Active (MTDS[ATA] = 1), and
  2. Asserts Drive Ready (MTDS[DRY] = 1).

015

Space Reverse

Moves the tape reverse (toward BOT) on the selected transport over the number of records specified by the Frame Count register. Each time a new record is detected, the Frame Counter is incremented. The Space Reverse function terminates when any of the following conditions exist:

  1. A Tape Mark (TM) is detected. In that case, assert Tape Mark (MTDS[TM] = 1) and the file is positioned just before the tape mark, or
  2. An beginning-of-file is detected. In that case, assert Beginning-of-Tape (MTDS[BOT] = 1) and the file is positioned at the beginning-of-file, or
  3. The contents of the Frame Counter register is incremented to zero.

When a TM or BOT is detected, the contents of the Frame Count Register indicates the number of records that were spaced over.

When completed, the Space Reverse function:

  1. Asserts Attention Active (MTDS[ATA] = 1), and
  2. Asserts Drive Ready (MTDS[DRY] = 1).

024

Write Check Forward

At the start of the Write Check Forward operation, the contents of the Frame Count Register is set to zero.

The Write Check Forward operation does a word-by-word comparison between the contents of memory and the data read from tape when the tape is moving in the forward direction (towards EOT). The status registers are updated during the operation as follows:

  • The Frame Counter is incremented for every byte read from tape.
  • The Word Counter is incremented by two for every word compared with memory.
  • The Base Address is incremented by two for every word compared with memory.

Note: the number of bytes per word varies depending on the selected tape format and is usually either 4 bytes-per-word or 5 bytes-per-word.

The Write Check Forward operation terminates when any of the following conditions exist:

  1. A Tape Mark is detected. In that case, assert Tape Mark (MTDS[TM] = 1) and position the file just after the tape mark, or
  2. An end-of-file is detected. In that case, assert End-of-Tape (MTDS[EOT] = 1) and position the file at the end-of-file, or
  3. The Frame Count Register (MTFC) increments to zero, or
  4. The Word Count Register (MTWC) increments to zero.

When completed, the Write Check Forward function asserts Drive Ready (MTDS[DRY] = 1) and the Frame Count Register contains the number of bytes (frames) read from the tape.

If a mismatch is detected, a Write Check Error is asserted (MTCS2[WCE] = 1).

Note: as far as the tape transport is concerned, a Write Check Forward operation is identical to a Read Forward operation.

MT Data Interface Register (MTDIR)

The MTDIR is a KS10 FPGA register that allows the MT hardware to interact with the console processor.

In the KS10 FPGA, the MT implementation is almost a client/server arrangement where the console processor performs all of the tape formatting and performs all of the file IO. The tape controller is implemented in the FPGA and makes file read/write requests of the console processor. The tape controller is the master. The console processor is slave.

Tape formatting includes all of the conversion between bytes-in-a-file and 36-bit words.

A general design rule, the bits in the MTDIR are either read-only or write-only. Some bits are listed as read/write but are really still exclusively read-only or write-only depending on the function being performed (or mode). This design eliminates the need for read/modify/write cycles and all the coherency issues that creates.

MT Data Interface Register (MTDIR)

Bit(s)

Mnemonic

R/W

Description

63

READ

R

Tape Read Mode

READ is deprecated and should be ignored.

62

STB

R/W

Strobe

During read functions, the console processor will provide tape data from a file to the Tape Controller by asserting data onto the DATA bits and then asserting STB. Alternately STB and DATA can be asserted simultaneously in a single atomic 64-bit write operation, if that can be guaranteed. In this case, the Tape Controller automatically negates the STB signal once the data has been read. In read mode, the console processor cannot negate the STB signal once asserted.

Note: Read functions include Read Forward, Read Reverse, Write Check Forward, and Write Check Reverse.

During write functions, the Tape Controller will provide data to the console processor to write to a file, by asserting STB and asserting data on the DATA bits. When the console processor has read the data it should negate the STB signal. DATA should be ignored when STB is negated. In write mode, The console processor cannot assert STB.

Note: The only write function is Write Forward.

61

INIT

R

Initialize

INIT is deprecated and should be ignored.

60

READY

R/W

Ready

The Tape Controller in the FPGA negates the READY bit to notify the console software to process a command. When the console software has completed the command, it asserts READY.

Note: the console processor can only assert the READY bit. It cannot negate the READY bit.

The MTDS[DRY] bit reflects the state of this bit.

The MTCS1[GO] bit reflects the negated state of this bit.

59

INCFC

W

Increment Frame Counter

The console processor should assert INCFC to notify the tape controller to increment the Frame Counter.

The tape controller automatically negates the INCFC bit when the Frame Counter has been incremented.

Negating the INCFC bit has no effect.

Always read as zero.

58-56

SS[2:0]

R

Slave select

Writes ignored.

SS reflects the contents of the MTTC[SS] register.

55-53

DEN[2:0]

R

Density

Writes ignored.

DEN reflects the contents of the MTTC[DEN] register.

52-48

FUN[4:0]

R

Function

Writes ignored.

FUN reflects the contents of the MTCS1[FUN] register.

47-44

FMT[3:0]

R

Format

Writes ignored.

FMT reflects the contents of the MTTC[FMT] register.

43

WCZ

R

Word Count is Zero

Writes ignored.

WCZ is asserted when the contents of the Word Count Register is zero.

42

FCZ

W

Frame Count is Zero

Writes ignored.

FCZ is asserted when the contents of the Frame Count Register is zero.

41

SETBOT

W

Set Beginning-of-Tape

When SETBOT is asserted, the Beginning-of-Tape indication (MTDS[BOT]) will be asserted.

Negating the SETBOT bit has no effect.

Always read as zero.

40

CLRBOT

W

Clear Beginning-of-Tape

When CLRBOT is asserted, the Beginning-of-Tape indication (MTDS[BOT]) will be negated.

Negating the CLRBOT bit has no effect.

Always read as zero.

39

SETEOT

W

Set End-of-Tape

When SETEOT is asserted, the End-of-Tape indication (MTDS[EOT]) will be asserted.

Negating the SETEOT bit has no effect.

Always read as zero.

38

CLREOT

W

Clear End-of-Tape

When CLREOT is asserted, the End-of-Tape indication (MTDS[EOT]) will be negated.

Negating the CLREOT bit has no effect.

Always read as zero.

37

SETTM

W

Set Tape Mark

When SETTM is asserted, the Tape Mark indication (MTDS[TM]) will be asserted.

Negating the SETTM bit has no effect.

Always read as zero.

36

CLRTM

W

Clear Tape Mark

When CLRTM is asserted, the Tape Mark indication (MTDS[TM]) will be negated.

Negating the CLRTM bit has no effect.

Always read as zero.

35-0

DATA[0:35]

R/W

Tape Data

See operation of the STB bit above for a description of how to read and write to the DATA bits.

During read operations, DATA is write-only. During write operations, DATA is read-only.

The console processor performs all of the tape formatting which involves translating bytes on the tape into 36-bit PDP-10 words and vice-versa. The console processor supports the same formats that the DEC TM03 supports.

Note: There is an endian swap in this register.

Timing Parameters

The following timing parameters are extracted from the DSTUA diagnostic and apply to the TM03 attached to a TU77 only. Where possible, the design behind the timing parameters is documented.

MT Timing Parameters

Parameter

Tested
By
DSTUA

Requirement

TIMOPW

TST74

OPI on write

... shall be greater than 7 seconds and less than 9 seconds (8 seconds nominal)

TIMOPR

TST74

OPI on write

... shall be greater than 7 seconds and less than 9 seconds (8 seconds nominal)

TIMWAB

TST123

Write Forward Startup Delay at BOT

At BOT and when a Write Forward command is issued, the time between GO asserting and ACCL negating shall be greater than 49.3 ms and less than 55.6 ms (52.5 ms nominal).

TIMWU

TST123

Write Forward Shutdown Time at BOT

At BOT and when a Write Forward command is issued, the time between the Frame Counter overflow and SDWN asserted shall be greater than 1.97 ms and less than 2.33 ms (2.15 ms nominal).

TIMWE

TST123

Write Forward Settledown Time at BOT

At BOT and when a Write Forward command is issued, the time between the SDWN is asserted until SDWN is negated shall be greater than 8.93 ms and less than 18.8 ms (13.9 ms nominal).

TIMWAN

TST124

Write Forward Startup Delay not at BOT

When not at BOT and when a Write Forward command is issued, the time between GO asserted and ACCL negating shall be greater than 2.96 ms and less than 3.44 ms (3.2 ms nominal).

TIMRAB

TST125

Read Forward Startup Delay at BOT

At BOT and when a Read Forward command is issued, the time between GO asserted and ACCL negating shall be greater than 5.66 ms and less than 7.34 ms (6.5 ms nominal).

TIMRFU

TST125

Read Forward Shutdown Time at BOT

At BOT and when a Read Forward command is issued, the time between GO asserted and ACCL negating shall be greater than 474 us and less than 800 us (636 us nominal).

TIMRFE

TST125

Read Forward Settledown Time at BOT

At BOT and when a Read Forward command is issued, the time between the SDWN is asserted until SDWN is negated shall be greater than 8.10 ms and less than 18.9 ms (13.5 ms nominal).

TIMRAN

TST126

Read Forward Startup Delay not at BOT

When not at BOT and when a Read Forward command is issued, the time between asserting GO and ACCL negating shall be greater than 475 us and less than 775 us (625 us nominal).

TIMRRA

TST127

Read Reverse Startup Delay not at BOT

When not at BOT and when a Read Reverse command is issued, the time between asserting GO and ACCL negating shall be greater than 475 us and less than 775 us (625 us nominal).

TIMRRU

TST127

Read Reverse Shutdown Time not at BOT

When not at BOT and when a Read Reverse command is issued, the time between when the final Frame Counter value is reached and when SDWN is asserted shall be greater than 427 us and less than 703 us (565 us nominal).

TIMRRE

TST127

Read Forward Settledown Time not at BOT

When not at BOT and when a Read Reverse command is issued, the time between the SDWN is asserted until SDWN is negated shall be greater than 8.1 ms and less than 18.9 ms (13.5 ms nominal).

TSTDFR

TST130

Forward to Reverse Turn Around Time

When a Read Reverse command follows a Write Forward command, the time between the Write Forward command asserting DRY and the Read Reverse command negating ACCL shall be greater than 9.47 ms and less than 19.4 ms (14.4 ms nominal).

TIMDRF

TST131

Reverse to forward Turn Around Time

When a Read Forward command follows a Read Reverse command, the time between the Read Reverse command asserting DRY and the Read Forward command negating ACCL shall be greater than 9.57 ms and less than 19.4 ms (14.5 ms nominal).

Console Processor Software

The console processor performs tape file IO operations for the FPGA-based Tape Controller in a manner that is compatible with the SIMH ".tap" file format.

There are some fundamental differences between how a tape drive stores information and how a tape file stores information on disk drive. The SIMH "*.tap" file format attempts to minimize those differences but some still exist. Some of these differences are described in the following sections.

Beginning of Tape (BOT)

The tape is defined to be at BOT when the file pointer is at the beginning of file; or when the value returned by ftell() is zero.

End of Tape (EOT)

The Magtape has two notions of EOT: the logical EOT and the physical EOT.

The logical EOT is a sequence two tape marks and is purely a magtape storage convention. As such, the logical EOT is not relevant to this FPGA hardware design.

The physical EOT on a classic Magtape drive is a length reflecting tape near the end of the tape that is sensed by the tape transport drive. In this system where the Magtape is simulated using a file, the physical EOT is indicated on read forward operations at the end-of-file (EOF). When writes are performed, the end-of-file (and therefore physical EOT) can change without indication except when the file size becomes greater than the number of bytes that the tape can store. When this file size is exceeded, the physical EOT is indicated on both read and writes.

The number of bytes that the tape can store (bytes per tape) is a function of the length of the tape (in feet) and the recording density (in bytes per inch). Common tape lengths were 800 feet, 2400 feet, and 3600 feet. This system supports recording density of 800 bytes per inch and 1600 bytes per inch. For example, a 2400 foot tape formatted at 1600 BPI can store 46,080,000 bytes.

Write operations include Erase, Write Tape Mark, and Write Forward. Read forward operations include Space Forward, Write Check Forward, and Read Forward.

When the ".tap" file is opened, the file is validated for correctness. This ensures that there is a logical EOT before the physical EOT - and therefore EOT is known.

Tape Formatting

The console processor performs all of the formatting normally associated with the Bit Fiddler section of the TM03 formatter.

For now (and maybe forever...), only the TM03 functionality is implemented in the KS10 FPGA.

The following PDP-10 tape formats are supported by the TM02 and TM03:

PDP-10 Core Dump Format

On a 9-track tape transport, the PDP-10 core dump format stores one 36-bit word of data in five 8-bit frames (8 bit of data plus one bit of parity).

On writes, the 4 low-order bits of the last frame are set to zero. On reads, the 4 low-order bits of the last frame are ignored.

This tape format was supported by both the TM02 and TM03 and is supported by the KS10 FPGA.

PDP-10 Core Dump Format

PDP-10 Seven Track Format

On a 7-track tape transport, the PDP-10 core dump format stores one 36-bit word of data in six frames where each frame stores a 6 bits of data (plus one bit of parity).

This tape format was only supported by the TM02 tape control unit and was only supported when the tape TM02 was attached to a 7-track tape transport.

Because the KS10 FPGA only implements the TM03 tape control and 9 track tape transports, this tape format is not supported.

PDP-10 Seven Track Format

PDP-10 ASCII Format

This format was also called "interchange" depending on the reference and was used for ANSI compliant ASCII interchange between the PDP-10 and 8-bit byte-oriented machines.

This format stores one 7-bit ASCII "byte" in each frame of the tape.

Bit 35 must be zero to conform to ANSI standards. Bit 35 (in a non-standard compliant use) is written into the high-order bit of the last frame of each word. The other high-order bits are set to zero on write operations. When the tape is read, all five high-order bits are ORed, and the result is stored in bit 35.

This format is only supported by the TM02 tape control unit. The KS10 FPGA only implements the TM03 and therefore this format is not implemented.

PDP-10 ASCII Format

PDP-10 Compatible Format

This format is also sometimes called "compatibility", "compat", "normal", or "eight-bit" format depending on the reference.

This format is compatible with any machine that reads and writes 8-bit bytes and I believe generally replaced the PDP-10 ASCII mode format described above. The format transfers 32-bit words.

When a read operation is performed, four 8-bit frames are read into each 36-bit word (left justified) with the remaining four low-order bits of the word set to zero. When a write operation is performed, the 32 high-order bits of the 36-bit word are written into four 8-bit frames (plus parity). The four low-order bits are ignored.

This tape format was supported by both the TM03 and is supported by the KS10 FPGA.

PDP-10 Compatible Format

PDP-11 Normal Tape Format

The TM03 formatter used by the PDP-10 also supported the PDP-11.

In PDP-10 applications, this mode is not supported although it does raise a Format Error (MTER[FMTE] asserted) when selected. The Format Error is tested by DSTUA TST72.

See MTTC[FMT[3:0]] and MTER[FMTE] bit descriptions.

PDP-15 Normal Tape Format

The TM03 formatter used by the PDP-10 also supported the PDP-15.

In PDP-10 applications, this mode is not supported although it does raise a Format Error (MTER[FMTE] asserted) when selected. The Format Error is tested by DSTUA TST72.

See MTTC[FMT[3:0]] and MTER[FMTE] bit descriptions.

RH11/TM03/TU45 Status

Diagnostic Transcripts

This section summarizes the results of executing the relevant diagnostic programs.

DSTUA Basic Device Diagnostic Results

DECSYSTEM 2020 RH11-TM02/03-TU45/TU77 BASIC DEVICE DIAGNOSTIC (DSTUA)
VERSION 0.3, SV=0.3, CPU#=2020, MCV=130, MCO=470, HO=0, KASW=003740 000000

TTY SWITCH CONTROL ? - 0,S OR Y <CR> - Y

LH SWITCHES <# OR ?> - 0
RH SWITCHES <# OR ?> - 400000
SWITCHES = 000000 400000

MEMORY MAP =
FROM     TO          SIZE/K
00000000 03777777       1024

SPECIFY TM (3=TM03,2=TM02,CR WILL TEST ALL ON-LINE DRIVES)

CONFIGURATION:
RH11#  3772440
TM03#0  TU77 #'S:  0

NOTE: ANY TAPES MOUNTED WRITE-ENABLED MAY BE WRITTEN ON.

WHAT TEST (H<CR> FOR HELP): <CR>

BASIC TEST

BASIC TEST PART 1
TST1
TST2

NOW TESTING TM03#0 USING TU77 SLAVE #0 ***********
TST3
TST4
TST5
TST6
TST7
TST10
TST11
TST12
TST13
TST13A
TST13B
TST13C
TST13D
TST13E

DSTUB Reliability Diagnostic Results

The DSTUB diagnostics will run until it finds an EOT. I often shorten this test by loading a shorter tape; i.e., a tape this is shorter than 2400 feet.

DECSYSTEM 2020 RH11-TM02/03-TU16/TU45/TU77 RELIABILITY DIAGNOSTIC(DSTUB)
VERSION 0.5, SV=0.3, CPU#=2020, MCV=130, MCO=470, HO=0, KASW=003740 000000

TTY SWITCH CONTROL ? - 0,S OR Y <CR> - Y

LH SWITCHES <# OR ?> - 0
RH SWITCHES <# OR ?> - 400000
SWITCHES = 000000 400000

MEMORY MAP =
FROM     TO          SIZE/K
00000000 03777777       1024

SPECIFY TM (3=TM03,2=TM02,CR WILL TEST ALL ON-LINE DRIVES)

CONFIGURATION:
RH11#  3772440
TM03#0  TU77 #'S:  0
   SN= 0018.


NOTE: ANY TAPES MOUNTED WRITE-ENABLED MAY BE WRITTEN ON.

WHAT TEST (H<CR> FOR HELP):
TYPE NUMBER OF PROGRAM PASSES (DECIMAL) (CR=INFINITE): 1
TST2
1600BPI RELIABILITY TEST
TM03/TU77 0/0   SN= 0018.

TST3
800BPI RELIABILITY TEST

CURRENT TEST= 3;  CURRENT BUNCH= 1.;  STATISTICS:

TM03/TU77 0/0 IN 1600BPI MODE
        RECORDS*        SERS*   HERS*   BS/DERS NR OF WDS*
WRITE:  5106.           0.      0.      0.      10238195.
RD FWD: 5104.           0.      0.      0.      10238195.
RD REV: 5104.           0.      0.      0.      10238195.
NO DEAD TRKS

TM03/TU77 0/0 IN NRZI MODE
        RECORDS*        SERS*   HERS*   BS/DERS NR OF WDS*
WRITE:  2585.           0.      0.      0.      5121560.
RD FWD: 2583.           0.      0.      0.      5121560.
RD REV: 2583.           0.      0.      0.      5121560.

SMMON CMD -

RH11/TM03/TU45 (MT) Status Summary

The MT system is a work in progress.

The diagnostic status is summarized below:

                                   DIAGNOSTIC                                  Result
------------------------------------------------------------------------------ ------
DECSYSTEM 2020 RH11-TM02/03-TU45/TU77 BASIC DEVICE DIAGNOSTIC (DSTUA)            Fail
DECSYSTEM 2020 RH11-TM02/03-TU16/TU45/TU77 RELIABILITY DIAGNOSTIC (DSTUB)      Pass

Click on the underlined Pass/Fail issues links in the table above for more information regarding status.

⚠️ **GitHub.com Fallback** ⚠️