Acorn Electron Hardware

Quick Info
CPU: Synertek 6502
Frequency: 2 MHz
RAM: 32 kB
ROM: 32 kB (768 B is overlapped by HW regs)
Graphics modes:  7 (2 of it used for text)
Max. resolution:  640x256 2 colors
Colors: 8 (but 16 palette registers)

Memory Map
0000H-7FFFH RAM - This memory is shared between system memory and video RAM
8000H-BFFFH ROM - BBC Basic
C000H-FBFFH ROM - OS (1st of 2 parts)
FC00H-FBFFH Fred - Used for hardware expansions
FD00H-FDFFH Jim - planned for memory expansions, AFAIK never used
FE00H-FEFFH Sheila - Electron hardware (ULA)
FF00H-FFFFH ROM - OS (2nd of 2 parts)

Notes:
- Video RAM is part of standard 32 kB RAM
- ROM at addresses 8000H-BFFFH could be paged out and other expansion ROMs or RAMs could be pagged in. There is the potential to page 16 different ROMs. However, two of the slots (10 and 11) are occupied by the BBC Basic. There is no difference between these two slots. Slots 8 and 9 (again both are equivalent) are occupied by the keyboard.
- ULA uses only 16 memory bytes (one of them is not used). These 16 bytes appears in every 16 byte block at addresses FE00H-FEFFH. Thus writing to FE02H is exactly the same as writing to FE32H or FEA2H etc.
- On addresses FC00H-FEFFH is copyright message, which is overlapped by hardware registers, which can be read from. On unexpanded Electron these registers are only FE00H and FE04H (nothe that there is sixteen copies of both of them). This copyright message is: "(C) 1983 Acorn Computers Ltd.Thanks are due to the following contributors to the development of the Electron (among others too numerous to mention):- Bob Austin,Astec,Harry Barman,Paul Bond,Allen Boothroyd,Ben Bridgewater,Cambridge,John Cox,Chris Curry,6502 designers,Jeremy Dion,Tim Dobson,Joe Dunn,Ferranti,Steve Furber,David Gale,Andrew Gordon,Martyn Gilbert,Lawrence Hardwick,Hermann Hauser,John Herbert,Hitachi,Andy Hopper,Paul Jephcot,Brian Jones,Chris Jordan,Computer Laboratory,Tony Mann,Peter Miller,Trevor Morris,Steve Parsons,Robin Pain,Glyn Phillips,Brian Robertson,Peter Robinson,David Seal,Kim Spence-Jones,Graham Tebby,Jon Thackray,Topexpress,Chris Turner,Hugo Tyson,John Umney,Alex van Someren,Geoff Vincent,Adrian Warner,Robin Williamson,Roger Wilson." This copyright message appears to be only on my Electron issue 4, on my Electron issue 6 addresses FC00H-FCFFH contain value FCH, FD00H-FDFFH contain value FDH and addresses FE00H-FEFFH contain values FFH.

Screen modes
  Gfx. X Gfx. Y Txt. X Txt. Y Cols Addr Pixel order
Mode 0: 640256803223000H
12345678
Mode 1: 320256403243000H
12341234
Mode 2: 1602562032163000H
12121212
Mode 3: 640200802524000H
12345678
Mode 4: 320256403225800H
12345678
Mode 5: 160256203245800H
12341234
Mode 6: 320200802526000H
12345678

Notes:
- Electron has not separate video RAM. Video RAM could be anywhere in the RAM (addresses 0000H-7FFFH), providing that the start address is divisible by 64, i.e. least significant 6 bites of start address are zeroes. Actually I never succeeded in setting screen start address below 1800H on my Electron. When, while displaying, the actual address of displayed byte reaches 8000H it is reset to its hardwired start address (see column "Addr" in the table above). This feature is used for hardware scrolling. 6502 is not powerful enough to do that in real time. For example in mode 0, when you set the screen start address to 3280H, the last line should begin at 8000H, but - because of the resetting to the hardwired start value - it actually begins at 3000H. When the address was set below 1800H the result was, that computer displayed picture from somewhere above hardwired screen start value, but there were some occasional random errors - some lines or parts were from memory below 1800H, but only in some frames.
 For example - on my issue 6 Electron, when I set mode 0 and put screen start addresses below 1800H, I got following results:
 For addresses 0000H-07C0H - the same result as if I set start addresses 3000H-37C0H.
 For addresses 0800H-0FC0H - the screen starts from these addresses (0800H-0FC0H), but when the counter reaches 1000H it is switched to 3000H and continues from there.
 For addresses 1000H-17C0H - the same result as if I set start addresses 3000H-37C0H.
 In every case, when start address was below 1800H - the very first character on the screen was showed some artifacts - as it was randomly xor-ed with some pattern. The pattern was changing every second or so.
Screen start address is set to ULA registers FE02H (lower part) and FE03H (higher part), but it has to be divided by 2. Bits A15 and A5-A0 of screen start address are ignored.
 
Screen start address0A14A13A12A11A10A9A8A7A6000000 
               FE03H → XX543210765XXXXXFE02H
- Modes 3 and 6 are so called text modes. They are not real text modes like default MS-DOS 80x25 text mode or Acorn BBC mode 7. They are like other graphic modes with one difference. After each 8 lines on the screen it produces 2 black lines. That means, that actual 200 lines looks like 248 lines (200 / 8 * 10 - 2) on the sreen. Advantage of these modes is, that they save almost 4 kB (mode 3) or 2 kB (mode 6), which is significant, because Electron has only 32 kB of RAM. Note, that 2 additional lines below every 8 lines are always black not palette color 0. So if you want to have let's say yellow text on the blue background you will get black lines disturbing the background.
- Modes are set by writing to ULA register FE07H. Bits 5, 4 and 3 are used for this purpose. Bit 5 is the most important, bit 3 is the least important. When I tried to enter non existing mode 7 there, Electron issue 6 switched to mode 4, but when counter reached 8000H it was reset to 3000H (as in mode 0) and not to 5800H as one would expect for mode 4. When mode is changed, this chane takes place immediately (in next cycle).