The additional memory features of the 128K/+2 are controlled to by writes to port 0x7ffd. As normal on Sinclair hardware, the port address is in fact only partially decoded and the hardware will respond to any port address with bits 1 and 15 reset. However, 0x7ffd should be used if at all possible to avoid conflicts with other hardware. 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 0x5b5c (23388) must be kept updated with the last value sent to port 0x7ffd. Reading from 0x7ffd produces no special results: floating bus values will be returned as would be returned from any other port not attached to any hardware. The byte output will be interpreted as follows: Bits 0-2: RAM page (0-7) to map into memory at 0xc000. Bit 3: Select normal (0) or shadow (1) screen to be displayed. The normal screen is in bank 5, whilst the shadow screen is in bank 7. Note that this does not affect the memory between 0x4000 and 0x7fff, which is always bank 5. 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: 0xffff +--------+--------+--------+--------+--------+--------+--------+--------+ | Bank 0 | Bank 1 | Bank 2 | Bank 3 | Bank 4 | Bank 5 | Bank 6 | Bank 7 | | | |(also at| | |(also at| | | | | | 0x8000)| | | 0x4000)| | | | | | | | | screen | | screen | 0xc000 +--------+--------+--------+--------+--------+--------+--------+--------+ | Bank 2 | Any one of these pages may be switched in. | | | | | | 0x8000 +--------+ | Bank 5 | | | | | | screen | 0x4000 +--------+--------+ | ROM 0 | ROM 1 | Either ROM may be switched in. | | | | | | | | | 0x0000 +--------+--------+ RAM banks 1,3,4,6 and most of 7 are used for the silicon disc; the rest of 7 contains editor scratchpads. An example of a typical bank switch on the 128 is: LD A,(0x5b5c) ;Previous value of port AND 0xf8 OR 4 ;Select bank 4 LD BC,0x7ffd DI LD (0x5b5c),A OUT (C),A EI The principle is the same for all bank switching: change only the bits you need to.