THE 128K/+2 SPECTRUMS The 128K machine is similar to the 48K machine, but with the extra memory, which is accessed by paging it into the top 16K of RAM, and some timing differences: * The main processor runs at 3.54690 MHz, as opposed to 3.50000 MHz. * There are 228 T-states per scanline, as opposed to 224. * There are 311 scanlines per frame, as opposed to 312. * There are 63 scanlines before the television picture, as opposed to 64. Note that this means that there are 70908 T states per frame, and the '50 Hz' interrupt occurs at 50.01 Hz, as compared with 50.08 Hz on the 48K machine. The ULA bug which causes snow when I is set to point to contended memory still occurs, and also appears to crash the machine shortly after I is set to point to contended memory. Memory When memory is being paged, interrupts should be disabled and the stack should be in an area which is not going to change. If normal interrupt code is to run, then the system variable at 5B5Ch (23388) must be kept updated with the last value sent to port 7FFDh. It is not possible to read this port. On the 128 and +2, memory is entirely controlled by port 7FFDh. The byte to output will be interpreted thus: Bits 0-2: RAM page (0-7) to map into memory at 0C000h Bit 3: Select normal (0) or shadow (1) screen. The normal screen is in bank 5 and normally appears at 4000h; the shadow screen is in bank 7 and can be switched in at 0C000h Bit 4: ROM select. ROM 0 is the 128k editor and menu system; ROM 1 contains 48k BASIC. Bit 5: If set, memory paging will be disabled and further output to this port will be ignored until the computer is reset. The memory map of these computers is: FFFFh +--------+--------+--------+--------+--------+--------+--------+--------+ | Bank 0 | Bank 1 | Bank 2 | Bank 3 | Bank 4 | Bank 5 | Bank 6 | Bank 7 | | | |(also at| | |(also at| | | | | | 8000h) | | | 4000h) | | | | | | | | | screen | | screen | C000h +--------+--------+--------+--------+--------+--------+--------+--------+ | Bank 2 | Any one of these pages may be switched in. | | | | | | 8000h +--------+ | Bank 5 | | | | | | screen | 4000h +--------+--------+ | ROM 0 | ROM 1 | Either ROM may be switched in. | | | | | | | | | 0000h +--------+--------+ RAM banks 1,3,4,6 and most of 7 are used for the silicon disc; the rest of 7 contains editor scratchpads. Memory banks 4-7 are contended, i.e. the processor shares them with the ULA. This reduces the speed of memory access in these banks. Port #FE is still contended, and port #7FFD also causes contention, although the precise details of this are not known. An example of a typical bank switch on the 128 is: LD A,(5B5Ch) ;Previous value of port AND 0F8h OR 4 ;Select bank 4 LD BC,7FFDh DI LD (5B5Ch),A OUT (C),A EI The principle is the same for all bank switching: change only the bits you need to. The contended memory timings for these machines are similar to that for the 48K machine, except that the 6,5,4,3,2,1,0,0 pattern starts at 14361 T-states after the interrupt, as opposed to 14335. Keypad The 128K machine's keypad extra editing facilities are also available via the normal keyboard: FUNCTION KEYS ----------------------------------------- Beginning of next word [E] [S] J Beginning of previous word [E] I Up ten lines [E] P Down ten lines [S] I Start of line [E] [S] 2 End of line [E] M First line [E] N Last line [E] T Screen [E] [S] 8 Delete this character [E] [S] K Delete word left [E] E Delete word right [E] W Delete to start of line [E] K Delete to end of line [E] J [E] = Extended Mode [S] = Symbol Shift Sound Chip The AY-3-8912 sound chip is a widely used one, to be found in the MSX, Vectrex, Amstrad CPC range, etc. It is controlled by two I/O ports: OUT (0FFFDh) - Select a register 0-14 IN (0FFFDh) - Read the value of the selected register OUT (0BFFDH) - Write to the selected register There's a guide to how to use the registers at this site - this is for the CPC, so the I/O commands used will be different, and on the Spectrum register 14 is used for the serial ports rather than the keyboard as on the CPC. There is also an excellent load of info on the AY chip in the techinfo.doc file accompanying the Z80 emulator. The Fuller Box also used the AY-3-8912, with port #3F used to select registers and #5F for data. The Fuller Box joysticks were connected to port #7F. The Timex TS2068 is one of the Spectrum clones and also had an AY chip, using port #F5 to select registers and #F6 for data. For a more complete list of TS2068 ports, see the TS2068 ROMs file (to be found on NVG). Typically, the AY chip is written to inside 128K games using: LD BC,#FFFD 01 FD FF OUT (C),D ED 51 LD B,#BF 06 BF OUT (C),E ED 59 To convert to a TS2068 poke a few values as follows: LD BC,#FFF5 01 F5 FF OUT (C),D ED 51 LD C,#F6 0E F6 OUT (C),E ED 59 If you've got a Fuller box, you can do the same mod, replacing F5 with 3F and F6 with 5F.