paul@0 | 1 | Hardware Scrolling
|
paul@0 | 2 | ------------------
|
paul@0 | 3 |
|
paul@0 | 4 | On the standard ULA, &FE02 and &FE03 map to a 9 significant bits address with
|
paul@0 | 5 | the least significant 5 bits being zero, thus limiting the scrolling
|
paul@0 | 6 | resolution to 64 bytes. An enhanced ULA could support a resolution of 2 bytes
|
paul@0 | 7 | using the same layout of these addresses.
|
paul@0 | 8 |
|
paul@0 | 9 | |--&FE02--------------| |--&FE03--------------|
|
paul@0 | 10 | XX XX 14 13 12 11 10 09 08 07 06 XX XX XX XX XX
|
paul@0 | 11 |
|
paul@0 | 12 | XX 14 13 12 11 10 09 08 07 06 05 04 03 02 01 XX
|
paul@0 | 13 |
|
paul@0 | 14 | In practice, a resolution of 8 bytes is more useful, since the mapping of
|
paul@0 | 15 | screen memory to pixel locations is character oriented. A change in 8 bytes
|
paul@0 | 16 | would permit a scrolling resolution of 2 pixels in MODE 2, 4 pixels in MODE 1
|
paul@0 | 17 | and 5, and 8 pixels in MODE 0, 3 and 6. This resolution is actually observed
|
paul@0 | 18 | on the BBC Micro (see 18.11.2 in the BBC Microcomputer Advanced User Guide).
|
paul@0 | 19 |
|
paul@0 | 20 | Palette Definition
|
paul@0 | 21 | ------------------
|
paul@0 | 22 |
|
paul@0 | 23 | Since all memory accesses go via the ULA, an enhanced ULA could employ more
|
paul@0 | 24 | specific addresses than &FE*X to perform enhanced functions. For example, the
|
paul@0 | 25 | palette control is done using &FE*8-F and merely involves selecting predefined
|
paul@0 | 26 | colours, whereas an enhanced ULA could support the redefinition of all 16
|
paul@0 | 27 | colours using specific ranges such as &FE18-F (colours 0 to 7) and &FE28-F
|
paul@0 | 28 | (colours 8 to 15), where a single byte might provide 8 bits per pixel colour
|
paul@0 | 29 | specifications similar to those used on the Archimedes.
|
paul@0 | 30 |
|
paul@0 | 31 | Hardware Sprites
|
paul@0 | 32 | ----------------
|
paul@0 | 33 |
|
paul@0 | 34 | An enhanced ULA might provide hardware sprites, but this would be done in an
|
paul@0 | 35 | way that is incompatible with the standard ULA, since no &FE*X locations are
|
paul@0 | 36 | available for allocation. In a special ULA mode, one might allocate a pair of
|
paul@0 | 37 | locations (for example, &FE20 and &FE21) as a pair of registers referencing a
|
paul@0 | 38 | region of memory from which a sprite might be found and potentially copied
|
paul@0 | 39 | into internal RAM, with other locations (for example, &FE22 and &FE23)
|
paul@0 | 40 | providing the size of the region.
|
paul@0 | 41 |
|
paul@0 | 42 | Enhanced Graphics
|
paul@0 | 43 | -----------------
|
paul@0 | 44 |
|
paul@0 | 45 | Screen modes with different screen memory mappings, higher resolutions and
|
paul@0 | 46 | larger colour depths might be possible, but this would in most cases involve
|
paul@0 | 47 | the allocation of more screen memory, and the ULA would probably then be
|
paul@0 | 48 | obliged to page in such memory for the CPU to be able to sensibly access it
|
paul@0 | 49 | all. Merely changing the memory mappings in order to have Archimedes-style
|
paul@0 | 50 | row-oriented screen addresses (instead of character-oriented addresses) could
|
paul@0 | 51 | be done for the existing modes, but this might not be sufficiently beneficial,
|
paul@0 | 52 | especially since accessing regions of the screen would involve incrementing
|
paul@0 | 53 | pointers by amounts that are inconvenient on an 8-bit CPU.
|
paul@0 | 54 |
|
paul@0 | 55 | Enhanced Sound
|
paul@0 | 56 | --------------
|
paul@0 | 57 |
|
paul@0 | 58 | The standard ULA reserves &FE*6 for sound generation and cassette
|
paul@0 | 59 | input/output, thus making it impossible to support multiple channels within
|
paul@0 | 60 | the given framework. The BBC Micro ULA employs &FE40-&FE4F for sound control,
|
paul@0 | 61 | and an enhanced ULA could adopt this interface.
|
paul@0 | 62 |
|
paul@0 | 63 | Waveform Upload
|
paul@0 | 64 | ---------------
|
paul@0 | 65 |
|
paul@0 | 66 | As with a hardware sprite function, waveforms could be uploaded or referenced
|
paul@0 | 67 | using locations as registers referencing memory regions.
|
paul@0 | 68 |
|
paul@0 | 69 | BBC ULA Compatibility
|
paul@0 | 70 | ---------------------
|
paul@0 | 71 |
|
paul@0 | 72 | Although some new ULA functions could be defined in a way that is also
|
paul@0 | 73 | compatible with the BBC Micro, the BBC ULA is itself incompatible with the
|
paul@0 | 74 | Electron ULA: &FE00-7 is reserved for the video controller in the BBC memory
|
paul@0 | 75 | map, but controls various functions specific to the 6845 video controller;
|
paul@0 | 76 | &FE08-F is reserved for the serial controller. It therefore becomes possible
|
paul@0 | 77 | to disregard compatibility where compatibility is already disregarded for a
|
paul@0 | 78 | particular area of functionality.
|
paul@0 | 79 |
|
paul@0 | 80 | &FE20-F maps to video ULA functionality on the BBC Micro which provides
|
paul@0 | 81 | control over the palette (using address &FE21, compared to &FE07-F on the
|
paul@0 | 82 | Electron) and other system-specific functions. Since the location usage is
|
paul@0 | 83 | generally incompatible, this region could be reused for other purposes.
|