lgb.hu :: Enterprise-128 :: I/O ports

Including rare hardware as well ... You can click on parts with blue background to show/hide more information.

Enterprise generally uses only 8 bit I/O addressing (full 16 bit is impossible since the highest two bits are "messed up" by Dave anyway). Enterprise bus bridge has a well designed port allocation mechanism that each cards can get a port range based on the card position or so. Unfortunately this feature was highly unknown for many people (especially in Hungary) and not so much useful without the bus bridge anyway. So it seems, that every hardware development uses some more or less fixed I/O port(s) now.

Port listing

Serial card from Mr Meszaros

Serial card designed by Mr Meszaros. The main purpose was using serial PC mouse (the Enterprise mouse - "the rat" - was rare, expensive, uncomfortable and short-live stuff). Probably it can be used for other purposes as well, of course. Enterprise has serial port, but it's software based thus not to so nice to use if for mouse, as it needs all the CPU time.

0x00	Serial card 'Meszaros'
0x01	Serial card 'Meszaros'

SID "sound card"

A relative new implementation, to be able to connect a SID sound chip (known from Commodore-64, for example) to the Enterprise.

0x08 - 0x0F

EXDOS (disk controller) card

Probably the most important and used add-on produced by the company itself, and also many clones exist.

0x10	EXDOS WD177x write command register / read status register
0x11	EXDOS WD177x track register read/writeOpps
0x12	EXDOS WD177x sector register read/write
0x13	EXDOS WD177x data register read/write
0x14	EXDOS WD177x [echo of port 0x10] write command register / read status register
0x15	EXDOS WD177x [echo of port 0x11] track register read/write
0x16	EXDOS WD177x [echo of port 0x12] sector register read/write
0x17	EXDOS WD177x [echo of port 0x13] data register read/write
0x18	EXDOS card status/control register
0x19	EXDOS card [echo of port 0x18] status/control register
0x1a	EXDOS card [echo of port 0x18] status/control register
0x1b	EXDOS card [echo of port 0x18] status/control register
0x1c	EXDOS card [echo of port 0x18] status/control register
0x1d	EXDOS card [echo of port 0x18] status/control register
0x1e	EXDOS card [echo of port 0x18] status/control register
0x1f	EXDOS card [echo of port 0x18] status/control register

Turbo EXDOS speed switching

WD177x used in EXDOS can write data in denser on higher clock as it turned out. However it is incompatible with the usual disk format, so a software switchable solution can be useful to exploit this feature. Of course it didn't exist on the original EXDOS card.

0x20	Turbo EXDOS speed switching

Not so much used, special

There is a plan to use Z180 in the Enterprise instead of Z80 by Zozo (note: Z180 is not fully Z80 compatible, for example it does not know the IX/IY register splitting into two 8 bit ones). Since Z180 has built-in I/O ports, some EXOS versions from Zozo use these ports to pre-program the Z180 I/O space not to collade with other I/O ports in the system.
0x32	Z180 configuration
0x3F	Z180 configuration

ZX Spectrum emulator card

0x40	ZX Spectrum emulator card, high byte addressHigh byte of address is stored here when NMI is generated
0x41	ZX Spectrum emulator card, low byte addressLow byte of address is stored here when NMI is generated
0x42	ZX Spectrum emulator card, dataData bus content is stored here when NMI is generated
0x43	ZX Spectrum emulator card, operation typeType of access when NMI is generated (bit 7: 1 = attribute memory write operation, 0 = I/O operation)
0x44	Spectrum emulator, write: enable emulatorSet bit 7 to turn on the emulator.

APU (AMD Am9511) "FPU" I/O ports

An experiment to add some mathematical processing power :) to the system with the AMD Am9511 chip, also named as the "APU". There is not so much a standard way to use its capabilities, you need custom softwares written for it.

0x50	APU (AMD Am9511) "FPU" read data or write data
0x51	APU (AMD Am9511) "FPU" read status or write command

RTC card from Zozosoft

Zozosoft's RTC card, supported by ZT (ZozoTools) ROM (you can have real time clock above the status line with the help of 1Hz interrupt).

0x7E	CMOS RTC/memory register select
0x7F	CMOS RTC/memory register read/write

Built-in: Nick (video chip) I/O ports

Nick has only four I/O ports; most parameters are described with an in-memory list called as the LPT (Line Parameter Table) including the video and colour mode, video memory addresses and the vsync itself too, even at scanline level if you want. The rest of the 0x80-0x8F port range contains "echoes" of the Nick registers above 0x83. Important: Nick ports are write-only! There is some odd behaviour that you can read the (Nick's) bus state on these I/O ports. In theory it can be used for some video effects. I can't say I can understand that very well though :)

0x80	Nick FIXBIAS (for 16 bour modes), and some other bits
0x81	Nick border color
0x82	Nick LPL (low byte of address of the LPT)
0x83	Nick LPH (high byte of address of the LPT), clocking enable, reload bits for LPT
0x84	Nick [echo of port 0x80] FIXBIAS
0x85	Nick [echo of port 0x81] border color
0x86	Nick [echo of port 0x82] LPL
0x87	Nick [echo of port 0x83] LPH
0x88	Nick [echo of port 0x80] FIXBIAS
0x89	Nick [echo of port 0x81] border color
0x8a	Nick [echo of port 0x82] LPL
0x8b	Nick [echo of port 0x83] LPH
0x8c	Nick [echo of port 0x80] FIXBIAS
0x8d	Nick [echo of port 0x81] border color
0x8e	Nick [echo of port 0x82] LPL
0x8f	Nick [echo of port 0x83] LPH

Built-in: Dave (audio, interrupt controller, memory mapper chip) I/O ports

0xa0	Dave tone channel 0 frequency low byte
0xa1	Dave tone channel 0 frequency high nybble + params
0xa2	Dave tone channel 1 frequency low byte
0xa3	Dave tone channel 1 frequency high nybble + params
0xa4	Dave tone channel 2 frequency low byte
0xa5	Dave tone channel 2 frequency high nybble + params
0xa6	Dave noise frequency, polynominal counter + misc
0xa7	Dave sync, D/A mode, and interrupt selection
0xa8	Dave tone channel 0 left volume
0xa9	Dave tone channel 1 left volume
0xaa	Dave tone channel 2 left volume
0xab	Dave noise channel left volume
0xac	Dave tone channel 0 right volume
0xad	Dave tone channel 1 right volume
0xae	Dave tone channel 2 right volume
0xaf	Dave noise channel right volume
0xb0	Dave MMU reg, page 0 (0000-3FFF) selector
0xb1	Dave MMU reg, page 1 (4000-7FFF) selector
0xb2	Dave MMU reg, page 2 (8000-BFFF) selector
0xb3	Dave MMU reg, page 3 (C000-FFFF) selectorHeart of the memory management on the Enterprise
64K Z80 address space is split into 4 * 16K pages. Enterprise-128 can have max of 4Mbyte (!) memory (both of ROM/RAM, mixed etc), that address space is split into 256 * 16K segments. Any of the segment can be mapped as any of the page.
0xb4 Dave enable/reset interrupt sources/latches 0xb5 Dave active low strobe on WR0/RD0 (keyboard row select/read)On write (WR0): Bit 0-3: Select keyboard row (only rows 0-9 have keys!) Bit 4: STROBE output for printer port Bit 5: switch off tape sound Bit 6: switch REM1 on Bit 7: switch REM2 on On read (RD0): read selected keyboard row (see above, WR0, bits 0-3) 0xb6 Dave active low strobe on WR1/RD1 On write: printer port output (full 8 bits) On read: control port (joystick) 0xb7 Dave active low strobe on WR2/RD2 0xbf Dave sysconfig register (wait states, clkdiv)

Comments"strobe on" stuffs are just signals address decoded by the Dave to have enable signals for various other chips wants to implement I/O. Thus, 0xB5 is named as "Dave active low strobe on WR0/RD0" by the Dave documentation (that is low active signal RD0 when port 0xB5 is read, and WR0 when port 0xB5 is written), but that signal then is used in a specific way on the EP board, ie, mainly for keyboard handling in this case. Dave has six signals like this, read and write "favour" for three ports, namely RD0, WR0, RD1, WR1, RD2, WR2. Each of them means reading or writing ports 0xB5, 0xB6 and 0xB7.

IDE card from Zozosoft

IDE card from Zozosoft. It allows four cards to be connected, but I don't think so it was too common.

0xe0	Possible another IDE card (see ports 0xec-0xef for the layout)
0xe1		- "" -
0xe2		- "" - 
0xe3		- "" -
0xe4	Possible another IDE card (see ports 0xec-0xef for the layout)
0xe5		- "" -
0xe6		- "" -
0xe7		- "" -
0xe8	Possible another IDE card (see ports 0xec-0xef for the layout)
0xe9		- "" -
0xea		- "" -
0xeb		- "" -
0xec	IDE data register low byte
0xed	IDE data register high byteIDE has 16 bit data bus, thus we need two 8 bit data bus port to represent it for the Z80.
0xee	IDE command register port 1Command (write) / status (read) register for
connector #1. Lower 6 bits can be read back. High two bits when read: INT and PDIAG signals of the IDE bus.
0xef	IDE command register port 0Command (write) / status (read) register for
connector #0. Lower 6 bits can be read back. High two bits when read: INT and PDIAG signals of the IDE bus.
	Command ports for the two connectors. Lower 6 bits can be read back.
	More on IDE card

External DAC

I have not so much idea, it's some kind of solution to play digitalized samples in a better quality than Dave can do (6 bits).

4 x 8bit DAC, probably to support 4 channel "MOD like" file playing (DTM files?). It's stereo, 2-2 channels for left and right.
0xf0	External DAC write
0xf1	External DAC write
0xf2	External DAC write
0xf3	External DAC write

Spectrum emulator again

See information about the Spectrum emulator above in the list. These ports are used in ZX Spectrum.

0xfe	Spectrum emulator
0xff	Spectrum emulator

Credits