Page Index:


Ports (Model I)

EBH:  Serial Port
     IN                            OUT
     (Input Data)                  (Output Data)
B7:  Data-7                        Data-7
B6:  Data-6                        Data-6
B5:  Data-5                        Data-5
B4:  Data-4                        Data-4
B3:  Data-3                        Data-3
B2:  Data-2                        Data-2
B1:  Data-1                        Data-1
B0:  Data-0                        Data-0


EAH:  Serial Port
     IN                            OUT
     (Uart Status bits)            (Uart parameters set)
B7:  1=Data Available              1=Even Parity
B6:  0=Data sent (TBMT)            WD Lngth 00=5 01=7
B5:  1=Overrun Error               WD Lngth 10=6 11=8
B4:  1=Framing Error               0=1-Stop bit
B3:  1=Parity Error                1=No Parity
B2:  unused                        1=Transmit Enable
B1:  unused                        0=DTR on
B0:  unused                        0=RTS on


E9H:  Serial Port
     IN                            OUT
     (DIP Switches??)              (Set speeds)
B7:  Parity 0=Odd                   Set Baud rate (all bits)
B6:  Wd Length 00=5 01=7            110 = 22H   150 = 44H
B5:            10=6 11=8            300 = 55H   600 = 66H
B4:  Stop bits 0=1 1=2             1200 = 77H  2400 = AAH
B3:  Parity 0=enable               4800 = 66H  9600 = EEH
B2:  unused                        Bits 0-3 = Receive Speed
B1:  unused                        Bits 4-7 = Transmit Speed
B0:  unused


E8H:  Serial Port
     IN                            OUT
     (Signals Input)               (Reset Uart)
B7:  CTS                           Any value will reset the
B6:  DSR                           Uart
B5:  0=Carrier Detected
B4:  1?=Ring Indicate
B3:  unused
B2:  unused
B1:  unused
B0:  Serial data input

Ports (Model III)

FF: Cassette unit.       I/O
F8: Printer.             I/O


F4H: Disk Drive register port.
     IN                            OUT
B7:
B6:
B5:
B4:
B3:
B2:
B1:
B0:


F3: Disk Controller DATA register.
     Same specs as for WD1791 DDEN Disk Controller.
F2: Disk SECTOR register.
     For WD1791.
F1: Disk TRACK  register.
     For WD1791.
F0: Disk COMMAND/STATUS register.
     For WD1791.



C8-CF: Hard disk controller port addresses.
   Ports C8 to CF correspond to Winchester Disk controller
chip WD1010 registers 0 through 7. Port C8 in particular
is the port used to read/write data.
   See Western Digital manual for specs.

C1: ??
C0: ??


EC: ?                    I/O

EBH:  RS-232 data in/out port
     IN                            OUT
     (Data read from line)         (Data sent to line)
B7:  Data-7                        Data-7
B6:  Data-6                        Data-6
B5:  Data-5                        Data-5
B4:  Data-4                        Data-4
B3:  Data-3                        Data-3
B2:  Data-2                        Data-2
B1:  Data-1                        Data-1
B0:  Data-0                        Data-0


EAH: RS-232 status/control
     IN                            OUT
     (Uart Status & signals)       (Set UART parameters)
B7:  1=Data Available (input)      1=Even Parity, 0=Odd
B6:  1=Data Sent (output)          : Word length 00=5 01=7
B5:  1=Overrun Error               : Word length 10=6 11=8
B4:  1=Framing Error               0=1-Stop bit, 1=2.
B3:  1=Parity Error                0=Enable parity, 1=Disable
B2:  unused                        1?=Send BREAK signal
B1:  unused                        1=DTR off
B0:  unused                        1=RTS off


E9: RS-232 software switches and speed select
     IN                            OUT
     (DIP Switches)                (Baud rate select)
B7:  Parity 0=odd 1=even           ) Xmit baud rate B4-B7
B6:  Word length 00=5 01=7         )
B5:  Word length 10=6 11=8         )
B4:  Stop bits 0=1 1=2             )
B3:  Parity 0=enable 1=disable     ) Recv baud rate B0-B3
B2:  Baud rate select #2           )
B1:  Baud rate select #1           )
B0:  Baud rate select #0           )


E8: RS-232 Signals and reset
     IN                            OUT
     (Input signals)               (Reset)
B7:  CTS                           Any value will reset the
B6:  DSR                           interface.
B5:  Carrier Detect
B4:  Ring Indicate
B3:  unused
B2:  unused
B1:  Copy of serial input pin UART
B0:    (May be bit 0 instead)

E4: ?                    I/O
E0: ?                    I/O
9C: ? (4p only?)         O

Model III/4 Ports

Port
Description
80H
Input: Reserved.
Output: Graphics board register.
81H
Input: Graphics board RAM read.
Output: Graphics board RAM write.
82H
Input: Reserved.
Output: Graphics board Y register.
83H
Input: Reserved.
Output: Graphics board X register.
84H
Mod 4 – various controls. 80 micro, March 84, p. 122. Input is reserved. Output:
  • Bit 0: Video memory, keyboard memory, and Model III ROM. (See Table 1)
  • Bit 1: Same as bit 0. (See Table 1)
  • Bit 2: Video display mode. 0 = 64 by 16, 1 = 80 by 24.
  • Bit 3: Reverse Video.
  • Bit 4: Ram bank select. (See Table 2)
  • Bit 5: Ram bank select. (See Table 2)
  • Bit 6: Ram bank select. (See Table 2)
  • Bit 7: Video page select (64 by 16 mode) 0 = page 0, 1 = page 1.
85H-87H
Same as 84H.
88H
CRT controller control register.
89H
CRT controller control register.
8AH
CRT controller control register.
8BH
CRT controller data register.
8CH-8FH
Graphics board select 2.
90H
Model 4 sound port. Any of the sound routines used on the Model I and Model III that uses port FFH can be changed to this and then the Model IV’s built in speaker can be used!
91H-93H
Same as 90H.
94H-BFH
Reserved.
C0H
Input: Hard disk write protect.
Output: Reserved.
C1H
Hard disk control register.
C2H-C3H
Input: Hard disk device ID register.
Output: Reserved.
C4H
Hard disk CTC channel 0.
C5H
Hard disk CTC channel 1.
C6H
Hard disk CTC channel 2.
C7H
Hard disk CTC channel 3.
C8H
Hard disk data register.
C9H
Hard disk error register.
E0H
Maskable interupt
E4H
Select NMI options/read NMI status
E8H
E9H
—— RS-232
EAH
—— ports
EBH
ECH
Write = various controls/ read = reset clock
  • Bit 7 not used
  • Bit 6 CPU clock speed [0 = 2 mhz, 1 = 4 mhz (Mod IV only)]
  • Bit 5 Video waits [0 = disable, 1 = enable]
  • Bit 4 I/O bus [0 = disable, 1 = enable]
  • Bit 3 Alt. char. [0 = disable, 1 = enable]
  • Bit 2 Double width [0 = normal, 1 = double]
  • Bit 1 Cass motor [0 = on, 1 = off]
  • Bit 0 not used

** NOTE : Ports F0H through F4H are for Model III/4 disk I/O (not Model I) **

F0H
FDC Command/Status
  • Read status
  • 80H Not ready
  • 40H Write protect
  • 20H Record type/Write fault/Head loaded
  • 10H Seek error/Record not found
  • 08H CRC error
  • 04H Track 0/lost data
  • 02H Index/DRQ
  • 01H Busy
F1H
FDC track register
F2H
FDC sector register
F3H
FDC data register
F4H
Select drive and options
F8H
Line printer addres port
  • 80H Busy
  • 40H Out of paper
  • 20H Unit select
  • 10H Fault
FFH
Cassette port

FDC commands via port F0 (Model III only)

00H
restore
80H
read sector
A0H
write normal sector
A1H
write read protect sector
C0H
read address
D0H
reset; puts FDC in mode 1
E0H
read track
F0H
write track

Table 1

Bits
1 and 0
Model III
ROMs Enabled
Video and
Keyboard Status.
0 0
Yes
Model III
0 1
No
Model III
1 0
No
Model 4 (In)
1 1
No
Model 4 (Out)

Table 2

Bits
6 5 4
Lower 32k
RAM
Upper 32K
RAM
0 0 0
Bank 0
Bank 1
0 1 0
Bank 0
Bank 2
0 1 1
Bank 0
Bank 3
1 1 0
Bank 2
Bank 1
1 1 1
Bank 3
Bank 1

Memory Mapped I/O Devices

Address
Use
3000-37DF
NO MEMORY here at all
37E0
Disk drive select latch
37E4
Cassette drive latch
37E8
Line printer data port when storing
37E8
Line printer status port when loading
37EC
Disk command register when storing
37EC
Disk status register when loading
37ED
Disk track register
37EE
Disk sector register
37EF
Disk data register
3801-3880
Keyboard memory
3C00-3FFF
Video display memory

Model III RS-232 Ports – Luis M. Garcia-Barrio

This section contains a list of Model III RS-232 Ports

PORT E8H (232)
Master Reset/MODEM Status Register
Any output to this port resets the Controller.
On Input:
Bit 4 — Ring Indicator
Bit 5 — Carrier Detect
Bit 6 — Data Set Ready
Bit 7 — Clear To Send

PORT E9H (233)
Config. DIP switches/Baud rate select
On Input:
Bits 0-2 Baud rate from 50 to 1200 (5=300; 7=1200)
Bit 3 — 0=Parity On; 1=Parity Off
Bit 4 — 0=1 Stop Bit; 1=2 Stop Bits
Bit 5-6 Word length ( 00=5, 01=6, 10=7, 11=8 )
Bit 7 — 0=Parity Odd; 1=Parity Even
On Output:
Bits 0-3 Receive Baud Rate (50-19200)
Bits 4-7 Transmit Baud Rate (50-19200)

PORT EAH (234)
Status and Control Register
On Input:
Bit 3 — 1=Parity Error
Bit 4 — 1=Framing Error
Bit 5 — 1=Overrun Error
Bit 6 — 1=Data Sent
Bit 7 — 1=Data Ready
On Output:
Bit 0 — Data Terminal Ready
Bit 1 — Request To Send
Bit 2 — Break
Bit 3 — Parity enable
Bit 4 — Stop bits
Bits 5-6 Word length select
Bit 7 — Parity

PORT EBH (235)
Data Register
On Input:
Received Data
On Output:
Transmit Data

Model III WD1793 Disk Controller Ports

The Model III talks to its WD1793 disk controller through the following ports:

0E4H

Bit
Write
Read
7
0/1: dis/enable INTRQ intrpt
0/1: INTRQ status: true/false
6
dis/enable DRQ interpt
0/1: DRQ status = true/false
5
N/A
0/1: Reset status = true/false

0F0H

Bit
Data Status Register
7
Not Ready
6
Write Protect
5
Read: Record Type
Write: Write Fault
4
Record Not Found
3
CRC Error
2
Data Lost
1
DRQ
0
Busy

0F1H (Read/Write) – Disk Track Register

Byte
Write
Read
N/A
Track Number
Track Number

0F2H (Read/Write) – Disk Sector Register

Byte
Write
Read
N/A
Sector Number
Sector Number

0F3H (Read/Write) – Disk Data Register

Byte
Write
Read
N/A
Data byte to be written to disk
Data byte read from disk

0F4H

Bit
Write Only
7
0 Selects FM Mode (Single Density)
1 Selects MFM Mode (Double Density)
6
0 disable wait state generation
1 enable
5
0 disable write precompensation
1 enables
4
0 select side 0
1 select side 1
3
0/1: deselect/select drive 3
2
0/1: deselect/select drive 2
1
0/1: deselect/select drive 1
0
0/1: deselect/select drive 0

Radio Shack 5/15 Meg HD Port Assignments – Bob Haynes, 10/15/87

This chart provides reference on the Western Digital Hard Disk Controller board WD1000-TB1, based on the WD1010 controller chip and WD1100 support chip. This board is used in later (white) versions of the Radio Shack 15 Meg Hard Disk (26-4155).

Earlier versions of the 15M, the 5M, and 12M hard disk systems all use a larger controller board based on the 8X300 controller chip. I’ve heard the R/S 8M hard disk also uses the 8X300 board, but that’s unconfirmed.

I have little information on the 8X300 board, but since both 15 and 5 Meg systems are known to work with the same driver/format software from at least three sources (Tandy/MISOSYS/PowerSOFT), it is assumed most of this chart also applies to the earlier 8X300 board. (one difference is noted above)

Although Radio Shack has mapped the HD access ports from C0-CFH as a standard configuration, both boards can re-map the ports to 50-5FH, 60-6FH, or 70-7FH simply by changing some jumpers. (If interested, drop a line for details.)

Special thanks to Adam Rubin, who reviewed the information to help confirm its accuracy. Comments, corrections and updates are welcome!

Radio Shack 5/15 Meg HD Port Assignments

.--------------------------------------------------------------------------.
|PORT C0H - READ ONLY                |PORT C1H - R/W - HD Control Register |
|Bits 2-3 unused                     |Bits 0-2, 5-7 unused (see note 4)    |
|     0-INTRQ-Interrupt request      |     3    If set, enables controller |
|     1-HWPL-If set, at least one HD |     4    If set, resets controller  |
|            is write protected      |-------------------------------------|
|     4-WPD4-drive 4 write protected |PORT C2-C3H - READ - HD Dev. ID Reg. |
|     5-WPD3-drive 3 write protected |     C4-C7H - HD CTC Channels 0-3    |
|     6-WPD2-drive 2 write protected |     See note 1                      |
|     7-WPD1-drive 1 write protected |-------------------------------------|
|------------------------------------|PORT C8H - R/W - HD Data Register    |
|PORT C9H - READ - Error Register    |-------------------------------------|
|Bits 3,5 all reserved (zero)        |PORT C9H - WRITE - Wrt Pre-Comp Cyl. |
|     0-DAM not found (see note 2)   |The value stored here multiplied x4  |
|     1-Track 0 Error (restore cmnd) |is the RWC start cylinder number.    |
|     2-Aborted Command              |-------------------------------------|
|     4-ID Not Found Error           |PORT CAH - R/W - Sector Count        |
|     6-CRC Data Field Error         |Used only for multiple sector access |
|     7-Bad Block Detected           |don't care w/ single sector commands,|
|------------------------------------|internally decrements when used.     |
|PORT CBH - R/W - Sector number      |-------------------------------------|
|------------------------------------| PORT CDH - R/W - Cylinder MSB       |
|PORT CCH - R/W - Cylinder LSB       |   (bits 0-1 only; max cyls = 1024)  |
|--------------------------------------------------------------------------|
|PORT CEH - R/W - SDH - Sector size/Drive #/Head #                         |
|Bits 0-2  Head number  (0-7)                                              |
|     3-4  Drive number (00-11 reference DSEL1-DSEL4 respectively)         |
|     5-6  Sector size  (00=256, 01=512, 10=1024, 11=128)                  |
|     7    EXTension:   if set, ECC (Error Checking and Correction) codes  |
|                       are in use, R/W data (sector length+7 bytes) do    |
|                       not check/generate CRC.                            |
|--------------------------------------------------------------------------|
|PORT CFH - READ - Error Status Register                                   |
|Bit 0  Error (OR of bits 1-7)       Bit 4  Seek complete                  |
|    1  Command in progress              5  Write fault                    |
|    2  Reserved (0)                     6  Drive ready                    |
|    3  Data request                     7  Busy                           |
|--------------------------------------------------------------------------|
|PORT CFH - WRITE - Command Register Instruction Set - see note 3          |
|          Bits: 7 6 5 4 3 2 1 0    |            Bits: 7 6 5 4 3 2 1 0     |
|  Restore     | 0 0 0 1 d c b a    |  Read Sector   | 0 0 1 0 i m 0 0     |
|  Seek        | 0 1 1 1 d c b a    |  Write Sector  | 0 0 1 1 0 m 0 0     |
|  Scan ID     | 0 1 0 0 0 0 0 0    |  Write Format  | 0 1 0 1 0 0 0 0     |
|                                   |                                      |
| "dcba" defines step rate field:   | "i" defines interrupt enable status: |
|      0000 =  35 us.               |   0 = interrupt when data request    |
| 0001-1111 =  0.5-7.5 ms in        |       line (DRQ*) is enabled         |
|               0.5 ms steps        |   1 = interrupt at end of command    |
|                                                                          |
| "m" defines multiple sector flag: 0 = one sector, 1 = multiple sectors   |
`--------------------------------------------------------------------------'

Notes

  1. Ports C2-C7 are applicable to the Model II configuration with interface board and 8X300 controller board only. (no further information was available, sorry!)
  2. Port C9, bit 0, READ: R/S 15M HD Service Manual indicates this bit is reserved (forced zero), but WD1010-00 spec sheet indicates it is used to indicate a “DAM not found” error.
  3. Port CF, WRITE: The 4P ROM is known to send three commands to this port: 16H-restore, 20H-read one sector, 70H-seek. Draw your own conclusions re the step rate and interrupt values.
  4. Although there is no formal documentation of this, according to the schematics, port C1H bit 2 seems to be used to enable wait state support on the 8X300 controller board. I cannot absolutely confirm this, neither can I say whether the later WD-1000-TB1 board implements this function.

UART Bits

One of the minor incompatibilities between the MODEL-I and the MODEL-III lie in the way in which serial (RS-232-C) I/O is handled. they are almost, but not quite the same. This article will discuss the differences, provide patches for SCRIPSIT/LC’S serial printer driver and give some general guidelines for adapting MODEL-I serial I/O code for use on the MODEL-III.

Both the MODEL-I and the MODEL-III use four Z-80 I/O ports for the RS-232-C interface: E8H, E9H, EAH and EBH. The ports are used as follows:

E8H
Outputting any byte to this port resets the uart. This is usually done only when initializing the interface. Inputting a byte from this port places the contents of the modem status register in the a register. see the manual for Radio Shack’s RS-232-C Interface (Catalog #26-1145) for details. MODEL-I and MODEL-III use this port in exactly the same way.
E9H
Writing a byte to this port programs the baud rate generator (BRG). The high-order nybble sets the transmit baud rate and the low-order nybble sets the receive baud rate. This is the same for both MODEL-I and MODEL-III. In the MODEL-I, reading this port transfers the settings of the configuration sense switches (the eight dip switches on the RS-232 card) to the a register. these values can then be used for setting the interface to default parameters. the read function for this port is not used in the MODEL-III.
EAH
Writing to this port sets up the UART control parameters and the handshake latch. reading this port transfers the contents of the uart status register to the a register. same for both MODEL-I and MODEL-III.
EBH
Writing to this port loads the transmit data register with the contents of the a register. reading this port transfers the contents of the received data register to the a register. same for both MODEL-I AND MODEL-III.

From this we can see that the only difference between the two machines is that the MODEL-III has no dip switches to read and thus does not have to input from port E9H. A MODEL-III with the RS-232-C interface installed will automatically set up the interface for 300 baud, 8 bit word, 1 stop bit and no parity, when the system boots up. The disk version uses the SETCOM command to change these values as desired. In the MODEL-I, the RS-232-C Interface is not set up by the operating system and must be configured by the user program which will be using the interface. Some simple drivers merely read the dip switches and set the interface accordingly. programs like ST80 can also do this and additionally allow the user to over-ride these default settings with different values. In converting MODEL-I software to run on the MODEL-III, All code relating to the reading of port E9H and setting the interface accordingly must be removed.

Port Add.! D7  ! D6  ! D5  ! D4  ! D3  ! D2  ! D1  ! D0  !
=========!=====!=====!=====!=====!=====!=====!=====!=====!
E8 Write ! <---- UART  RESET & INITIALIZATION ONLY ----->!
         !           NO  DATA  BITS  REQUIRED            !  T
---------!-----!-----!-----!-----!-----!-----!-----!-----!
E8 Read  ! cts ! dsr ! cd  ! ri  !  -  !  -  ! rec !  -  !
         !     !     !     !     !     !     ! i/p !     !  R
=========!=====!=====!=====!=====!=====!=====!=====!=====!
E9 Write !   Software Baud rate settings  (see manual)   !
         !     !     !     !     !     !     !     !     !  S
---------!-----!-----!-----!-----!-----!-----!-----!-----!
E9 Read  !Parit! w/l ! w/l ! stop!Parit! Baud! Baud! Baud!
switches !ev/od!slct1!slct2! 1or2!en/di!  1  !  2  !  3  !
=========!=====!=====!=====!=====!=====!=====!=====!=====!  I
EA Write !Parit! w/l ! w/l ! stop!Parit! TX  ! DTR ! RTS !
control  !ev/od!slct1!slct2! 1or2!en/di!en/di!     !     !
---------!-----!-----!-----!-----!-----!-----!-----!-----!
EA Read  ! DAV ! TBMT!o/run!frame!Parit!  -  !  -  !  -  !  8
 Uart    !     !     !error!error!error!     !     !     !
=========!=====!=====!=====!=====!=====!=====!=====!=====!
EB Write ! <---------- 8 BIT DATA  to  UART -----------> !  0
EB Read  ! <---------- 8 BIT DATA from UART -----------> !
========='====='====='====='====='====='====='====='====='---
           D7    D6    D5    D4    D3    D2    D1    D0
=========v=====v=====v=====v=====v=====v=====v=====v=====v---
F8 Write !  -  !  -  !  -  !  -  !  -  !Uart ! DTR ! RTS !  S
         !     !     !     !     !     !Reset!     !     !
---------!-----!-----!-----!-----!-----!-----!-----!-----!  Y
F8 Read  ! <---------- 8 BIT DATA from UART -----------> !
         !     !     !     !     !     !     !     !     !  S
=========!=====!=====!=====!=====!=====!=====!=====!=====!
F9 Write ! <---------- 8 BIT DATA  to  UART -----------> !
         !     !     !     !     !     !     !     !     !  8
---------!-----!-----!-----!-----!-----!-----!-----!-----!
F9 Read  !TMBT ! CTS ! DSR ! CD  ! PE  ! FE  ! OR  ! DAV !  0
         !     !     !     !     !     !     !     !     !
========='====='====='====='====='====='====='====='====='