Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
documentations:devices:6846 [2014/03/25 22:01] – [P4 and P5: Cartridge slot selection] pulkomandy | documentations:devices:6846 [2015/02/28 18:08] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | The 6846 is the main PIA chip in all machines for the TO range. It handles the tape drive, memory banks communations, 50Hz interrupt (actually programmable, | + | The 6846 is the main PIA chip in all machines for the TO range. It handles the tape drive, memory banks commutations, 50Hz interrupt (actually programmable, |
====== Register map ====== | ====== Register map ====== | ||
Line 13: | Line 13: | ||
====== Ports ====== | ====== Ports ====== | ||
- | ===== P4 and P5: Cartridge slot selection ===== | + | ===== Common ===== |
- | On TO9 and later. | + | ==== P0: Video RAM mapping ===== |
+ | This bit allows switching the video RAM page for the CPU. | ||
+ | when set to 0, the " | ||
+ | |||
+ | (on TO8/9+/8D, this is not actually wired, but the Gate Array emulates it). | ||
+ | |||
+ | ==== P1: light pen button ===== | ||
+ | This bit is an input. It allows you to read the state of the light pen " | ||
+ | ==== P3: unused. ====== | ||
+ | |||
+ | ==== P7: Tape drive input ===== | ||
+ | The data from the tape drive can be read here. The tape drive use hardware demodulation, | ||
+ | |||
+ | ==== CP2: Sound output ===== | ||
+ | This is the 1-bit sound output. Setting it to 0 and 1 alternatively, | ||
+ | |||
+ | ==== CTO: Timer output to tape port ===== | ||
+ | The timer is used as a waveform generator, and the output is sent to the tape drive to save data to tape. | ||
+ | As the tape port also has an audio input pin, connecting the two would allow to use the waveform generator for low-CPU sound and music. This has not been done, yet. | ||
+ | |||
+ | The tape format for TO machines is: | ||
+ | * To code a 1, generate 5 periods of 4.5KHz squarewave | ||
+ | * To code a 0, generate 7 periods of 6.3KHz squarewave. | ||
+ | |||
+ | The decoding is done using analogue filters set on these frequencies. A comparator between the filters output decides if the bit is a 0 or a 1. | ||
+ | |||
+ | Note this is the same timer that generates the cursor blink interrupt (at a 10Hz frequency). | ||
+ | |||
+ | ===== TO9 ===== | ||
+ | ==== P2 and P6: " | ||
+ | These two bits allows mapping of the "RAM Disk" memory (external expansion on the TO9). | ||
+ | When no internal RAM is selected ([[documentations: | ||
+ | |||
+ | ^P6^P2^PB7^PB6^PB5^PB4^PB3^Mapped memory at A000-DFFF | ||
+ | ^X ^X ^1 ^1 ^1 ^X ^X ^TO7 32K expansion mappings | ||
+ | |X |X |1 |1 |1 |1 |0 |Internal bank 0 | | ||
+ | |X |X |1 |1 |1 |0 |1 |Internal bank 1 | | ||
+ | ^X ^X ^X ^X ^0 ^1 ^1 ^TO9 extra internal RAM mappings ^ | ||
+ | |X |X |0 |0 |0 |1 |1 |Internal bank 2 | | ||
+ | |X |X |1 |0 |0 |1 |1 |Internal bank 3 | | ||
+ | |X |X |0 |1 |0 |1 |1 |Internal bank 4 | | ||
+ | |X |X |1 |1 |0 |1 |1 |Internal bank 5 | | ||
+ | ^X ^X ^1 ^1 ^1 ^1 ^1 ^TO9 external RAM mappings | ||
+ | |0 |0 |1 |1 |1 |1 |1 |RAMdisk 1 | | ||
+ | |1 |0 |1 |1 |1 |1 |1 |RAMdisk 2 | | ||
+ | |0 |1 |1 |1 |1 |1 |1 |RAMdisk 3 | | ||
+ | |1 |1 |1 |1 |1 |1 |1 |RAMdisk 4 | | ||
+ | |||
+ | ==== P4 and P5: Cartridge slot selection ===== | ||
+ | On TO9 and later, these two bits are used to switch between different mappings for the cartridge area (0000-3FFF). It allows software (un)mapping of cartridges. | ||
^P4^P5^Bank 0 ^Bank 1 ^Bank 2 ^Bank 3 ^ | ^P4^P5^Bank 0 ^Bank 1 ^Bank 2 ^Bank 3 ^ | ||
Line 28: | Line 77: | ||
* Writing to 1E02 selects bank 2 | * Writing to 1E02 selects bank 2 | ||
* ... | * ... | ||
+ | |||
+ | Monitor entry [[documentations: | ||
+ | |||
+ | ===== TO8/9+/8D ===== | ||
+ | ==== PB2: Cartridge switch ==== | ||
+ | |||
+ | Only 2 banks are available. | ||
+ | |||
+ | ==== PB4: Monitor bank switch ==== | ||
+ | |||
+ | also switches the floppy ROM banks. | ||
+ | |||
+ | ==== PB5 and CP1: keyboard link ==== | ||
+ | === Reading keyboard state === | ||
+ | The keyboard link was implemented on the TO9 using a 6850 ACIA. To save costs, it is now implemented using a bit-bang serial link driven by the PIA. | ||
+ | |||
+ | When the keyboard controller want to send a byte, it raises CP1 high. The computer acknowledges by setting PB5 low. | ||
+ | |||
+ | The serial frame is made of: | ||
+ | * CNT key state | ||
+ | * SHIFT key state | ||
+ | * 7-bit keycode of first pressed key (unlike on TO9, this is not the ASCII code). | ||
+ | |||
+ | The signalling is: | ||
+ | * 56µs high pulse for 1 bit | ||
+ | * 38µs high pulse for 0 bit | ||
+ | |||
+ | === Configuring the keyboard === | ||
+ | The computer can send commands by pulling PB5 low, waiting for CP1 to become low (acknowledge), | ||
+ | * 670µS: keyboard reset. The keyboard enter caps lock mode (led is on), and send the keymap bit (French or Export) to the computer. | ||
+ | * 1300µS: enable caps lock | ||
+ | * 1900µS: disable caps lock | ||
+ | ==== PB6: printer busy bit ==== |