89 lines
2.8 KiB
Plaintext
89 lines
2.8 KiB
Plaintext
- main CPU is a MC68000 running at 8 MHz.
|
|
the exact clock speed is most likely one of: 7.9872, 7.68 or 7.3728 MHz (to divide to 19200 baud)
|
|
- display is 800x1024, refreshed at 30 Hz (60 Hz interlaced).
|
|
it simply displays the 100K framebuffer from the address given in register 030.
|
|
- the host is connected through a UART running at 19200 baud.
|
|
- the keyboard is connected through a UART running at an unknown baudrate.
|
|
- the mouse is connected through some unknown circuitry.
|
|
|
|
memory map
|
|
|
|
start end purpose
|
|
0x00000 0x00008 see register 050 below
|
|
0x00008 0x40000 RAM (256K)
|
|
0x40000 ??? ROM (24K ?) (not known if mirrored)
|
|
0x60000 ??? memory mapped I/O
|
|
|
|
mmio addresses (in *octal*):
|
|
|
|
0000 16-bit mouse y
|
|
0002 16-bit mouse x
|
|
|
|
0011 8-bit terminal UART status/control (MC 6850 ACIA)
|
|
0013 8-bit terminal UART data
|
|
the software uses 2 stop bits, no parity, 8 bits; clock divided by 16
|
|
|
|
0021 8-bit mouse buttons
|
|
bit 0: rmb
|
|
bit 1: mmb
|
|
bit 2: lmb
|
|
reading clears the mouse interrupt
|
|
|
|
0025 8-bit second copy of 0021 (?)
|
|
0027 8-bit ???
|
|
only the ROM binaries contain references to 0025, 0027 in buttons.c.
|
|
the corresponding source code appears to have been deleted.
|
|
possibly some older variant of the button hardware?
|
|
|
|
0030 16-bit start address of framebuffer divided by 4 (800*1024/8 = 100K bytes)
|
|
0040 16-bit status/control register of display
|
|
bit 0: invert display
|
|
with this bit set 0 bits are white and 1 bits are black (most software does this).
|
|
|
|
0050 16-bit writing different values makes 0-8 either mapped to 0x40000 or error out (details unclear)
|
|
resets so that they map to the reset vector at 0x40000.
|
|
|
|
0056 8-bit some kind of sound-making device (standard programmable timer + piezoelectric speaker?)
|
|
0156 referenced by demo pacman.
|
|
0256
|
|
|
|
0060 8-bit keyboard status/control register (MC 6850 ACIA)
|
|
the software uses 2 stop bits, no parity, 8 bits; clock divided by 16
|
|
0062 8-bit keyboard data register
|
|
|
|
0070 16-bit? acknowledge vblank interrupt; software writes 0
|
|
|
|
tx to the keyboard sets the 7 lights and can also ring the bell.
|
|
could deduce the order of lights from diag.c.
|
|
writing 2 is used to sound the bell.
|
|
|
|
irq lines; using the 68k autovectoring
|
|
|
|
vector 1 (0x64) is vblank
|
|
vector 2 (0x68) is keyboard
|
|
vector 4 (0x70) is mouse buttons
|
|
vector 5 (0x74) is uart
|
|
|
|
MC 6850 bits:
|
|
+0 (r) status register
|
|
bit 0: receive buffer full
|
|
bit 1: transmit buffer empty
|
|
bit 2: data carrier detected (inverted)
|
|
bit 3: clear-to-send (inverted)
|
|
bit 4: framing error
|
|
bit 5: receiver overrun
|
|
bit 6: parity error
|
|
bit 7: irq active
|
|
+0 (w) control register
|
|
bit 1-0: clock divider
|
|
00: /1
|
|
01: /16
|
|
10: /64
|
|
11: master reset
|
|
bit 4-2: parity and stop bits (see datasheet)
|
|
bit 6-5:
|
|
RTS/ is high only if these bits are 10
|
|
TX interrupts are enabled only if these bits are 01
|
|
break is transmitted continuously if these bits are 11
|
|
bit 7: RX interrupt enabled
|