Janus IO Memory Map
AMIGA I/O MEMORY MAP
(REGISTER DESCRIPTION)
AMIGA Register | Interface / Memory | Offset Address INTERFACE |
Offset Address AMIGA |
---|---|---|---|
AMIGA INTERRUPT STATUS | read register | 1FFF1 | 7FFF1 |
PC INTERRUPT STATUS | read register | 1FFF3 | 7FFF3 |
NEGATE PC RESET | read register | 1FFF5 | 7FFF5 |
MODE REGISTER | read register / write register | 1FFF7 | 7FFF7 |
INTERRUPT MASK | read memory / write register | 1FFF9 | 7FFF9 |
PC INTERRUPT CONTROL | read memory / write register | 1FFFB | 7FFFB |
CONTROL REGISTER | read memory / write register | 1FFFD | 7FFFD |
KEYBOARD REGISTER | read memory / write register | 1FFFF | 7FFFF |
PC SIDE
System Status Register:
How to Enable/Disable Interrupts from Amiga to PC
A write access to this register (i/o location 62 hex) forces a /SYSINT interrupt on the AMIGA side
A write access to bit 6 of i/o location 379 hex enables/disables the AMIGA forced interrupts IRQ1 (keyboard), 1RQ3 (serial interface
COM2) and IRQ7 (parallel interface LPT1) as follows:
D6 | Function |
---|---|
0 | interrupts enabled |
1 | interrupts disabled |
Note:
The access to i/o location 379 hex is enabled if PARON is high. That is, the AMIGA has to write a "1" to MODE REGISTER bit 1. (See
'Amiga Mode Register.')
The following initialization routine must be used to allow an external printer card on the pc side:
- AMIGA: set MODE REGISTER bit 1 to "1" ; switch parallel interface on
- PC : set i/o location 379 hex bit 6 to "0"; keyboard and serial interr. off
- AMIGA: set MODE REGISTER bit 1 to "0" ; switch parallel interface off
Now the keyboard and the serial interface emulation is enabled, the parallel interface emulation is disabled.
HOW to Clear an Asserted Interrupt Signal
INT | Negation |
---|---|
RQ3_a | Read to i/o location 3B0 hex |
IRQ3_b | Read com2 register 2F8 hex |
IRQ7 | Read line printer status register 379 hex |
AMIGA SIDE
All registers on the memory locations 1FFF0 TO 1FFFF are only accessable from the AMIGA side.
AMIGA ACCESS: Amiga Interface Offset Address = Base Addr.
- Base Addr. + (00000 - 1FFFF) : Byte Access
- Base Addr. + (20000 - 3FFFF) : Word Access
- Base Addr. + (40000 - 5FFFF) : Graphic Access
- Base Addr. + (60000 - 7FFFF) : I/O Register Access
All Registers on the Memorylocations 1FFF0 to 1FFFF are only accessable from the AMIGA side.
Function | Description | Amiga Address | |||
---|---|---|---|---|---|
Byte | Word | Grafic | I/O | ||
Amiga Interruptstatus | read register read clears pc -> amiga ints |
1FFF1 | 7FFF1 | ||
PC Interruptstatus | read register r/o, amiga -> pc ints |
1FFF3 | 7FFF3 | ||
negate pc reset | read register r/o, strobe release pc's reset |
1FFF5 | 7FFF5 | ||
PC-Configuration Mode Register |
read register/write register give/set PC config |
1FFF7 | 7FFF7 | ||
Interrupt mask | read memory/write register r/w, enables pc int lines |
1FFF9 | 7FFF9 | ||
PC Interrupt Control | w/o, bit == 0 -> cause pc int | 1FFFB | 7FFFB | ||
Control register | read memory/write register w/o, random control lines |
1FFFD | 7FFFD | ||
Keyboard register | read memory/write register | 1FFFF | 7FFFF |
Amiga Interrupt Status Register (R/O)(1FFF1/7FFF1)
Reading this register returns the interrupt events caused on PC accesses as follows:
Bit no. | Function | |
---|---|---|
0 | Mono Video Ram | /MINT |
1 | Color Video Ram | /GINT |
2 | Mono CRT | /CRT1INT |
3 | Color CRT | /CRT2INT |
4 | Keyboard Register | /ENBKB |
5 | LPT1 Control Reg | /LPT1INT |
6 | COM2 Data Reg | /COM2INT |
7 | see PC System Status Res | /SYSINT |
The event was valid if the bit is set to " 1". After reading the register all bits turns to "0" automatically and the interrupt flag will be negated.
PC Interrupt Status Register (R/O) (1FFF3/7FFF3)
Reading this register returns the pending PC interrupts on the lower nibble. The PC interrupt is asserted as shown by the corresponding bit in the table.
Bit no. | Function | Asserted if |
---|---|---|
0 | IRQ1 (Keyboard interrupt) | 1 |
1 | IRQ3_a | 0 |
2 | IRQ3_b | 0 |
3 | IRQ7 | 0 |
4-7 | NOT USED | always HIGH |
Bit 1 and bit 2 (IRQ3_a and lRQ3_b) are externally "ORed" to IRQ3
Negate PC Reset (R/O)(1FFF5/7FFF5)
A read access to this register negates the PC reset line and allows the PC to start the boot procedure. On power-on the PC reset line is asserted (default).
Mode Register (R/W) (1FFF7/7FFF7)
Reading this register returns system configuration information
Bit no | Name | Function |
---|---|---|
0 | SERON | serial interface enabled |
1 | PARON | parallel interface enabled |
2 | KEYON | keyboard interface enable |
3 | MON | monochrome display emulation enabled |
4 | COLOR | color display emulation enabled |
5 | SEL1 | select the PC/AT memory bank, s.b. |
6 | SEL2 | select the PC/AT memory bank, s.b. |
7 | PC/AT | LOW = AT mode HIGH = PC mode |
Writing to this register sets system configuration information
Bit no. | Name | Function |
---|---|---|
0 | SERON | switch serial interface on |
1 | PARON | switch parallel interface on |
2 | KEYON | switch keyboard interface on |
3 | MON | enable monochrome display emulation |
4 | COLOR | enable color display emulation |
5 | SEL1 | select the PC/AT memory bank, s.b. |
6 | SEL2 | select the PC/AT memory bank, s.b. |
7 | /STOPCLK | LOW = disable the clock for video retrace and keyboard HIGH = enable the clock for video retrace and keyboard |
SEL2 | SEL1 | PC memory | AT memory |
---|---|---|---|
0 | 0 | not used | not used |
0 | 1 | A0000-AFFFF | A0000-AFFFF |
1 | 0 | D0000-DFFFF | D4000-DFFFF |
1 | 1 | E0000-EFFFF | not used |
Interrupt Mask Register (R/W)(1FFF9/7FFF9)
You can mask each PC interrupt event separately by writing a "1" to the corresponding bit as shown below.
Bit no. | Maskable Event (cmp. to Amiga interrupt status reg.) |
---|---|
0 | /MINT |
1 | /GINT |
2 | /CRT1INT |
3 | /CRT2INT |
4 | ENKBKB |
5 | /LPT1INT |
6 | /COM2INT |
7 | /SYSINT |
PC Interrupt Control Register (R/W) (1FFFB/7FFFB)
A PC interrupt can be forced by writing a "0" to the corresponding bit of the lower nibble except the keyboard interrupt, which can be asserted by writing a "1", as shown below:
Bit no. | Asserted PC interrupt level |
---|---|
0 | KBSTART (start keyboard shift-register) |
1 | IRQ3_a (forces interrupt IRQ3) |
2 | IRQ3_b (forces interrupt IRQ3) |
3 | IRQ7 |
Bit 1 and bit 2 (IRQ3_a and lRQ3_b) are externally "ORed" to IRQ3
Control Register (R/W)(1FFFD/7FFFD)
All control function will be done by writing a "0" to the corresponding bit Only bits 0 to 4 are used.
Bit no. | usage |
---|---|
0 | general interrupt enable to the AMIGA |
1 | general interrupt disable to the AMIGA (default) |
2 | assert the PC reset line |
3 | negate all PC interrupt levels except the keyboard interrupt |
4 | reset line printer BUSY (port 379 hex bit 7) The line printer BUSY bit will be set by writing a " 1" to bit 0 of port 37A hex from PC side. |
Keyboard Register (R/W) (1FFFF/7FFFF)
Keyboard emulation is done by writing a character to this register and then asserting a "1" to bit 0 of the PC INTERRUPT CONTROL REGISTER.
Last Update: 05.06.2022