BBC JIM Hardware I/O Addresses ============================== JIM should be used as a 256-byte window into external RAM expansion with paging registers at &FCFF, &FCFE, &FCFD selecting b8-b15, b16-b23 and b24-b31 of the external address. +------&FCFD | +----&FCFE | | +--&FCFF | | | 00000000 +----------------+------------------+--------------+ | Torch Graduate | | | xxxx1FFF +----------------+ | | | | | xxxx3000 +----------------+ | | | Music 5000 | | | xxxx3FFF +----------------+ | | | | | xxxx5000 +----------------+ | | | Music 3000 | | | xxxx5FFF +----------------+ | | | | | | | | | Opus Challenger 3 | | | 512K | | | | | xx07FFFF +-----------------------------------+ | | | | | | CUBE BeebEx | | 1M | | | | DataCentre | | 1M | | | | | | | | | xx0FFFFF +--------------------------------------------------+ Software uses the addresses specified. Hardware responds to just enough of the address to be selected, so is reflected through the memory map, unless otherwise noted. Hardware usually resets the page select registers to zero on RESET. Reset Vector ------------ FDFE Reset vector low byte FDFF Reset vector high byte If hardware on the 1MHz bus asserts IRQ on RESET it must provide a vector at &FDFE/FF which will be jumped through with JMP (&FDFE) after the RESET code has initialised memory. Hardware-supplied code can then page memory into JIM with code in to execute. CUBE BeebEx ----------- 1M of addressing at &x00000-&xFFFFF using two address selection registers. Known systems only latch b8-b19 to give a 1M address map. DataCentre ---------- 1M of RAM at &x00000-&xFFFFF using two address selection registers. Existing systems only latch b8-b19 to give a 1M address map. All code in DataCentre RAMFS only accesses &000000-&0FFFFF. Opus Challenger 3 ----------------- 512K of RAM at &x00000-&x7FFFF using two address selection registers at &FCFE/&FCFF. Torch Graduate -------------- 32K of ROM at &xxx000-&xxx1FF using one address selection register at &FCFF. At startup page 0 of ROM is paged in and executed by the MOS via JMP (&FDFE) which then copies the ROM code into main RAM. Unknown how many bits are latched in the address register. Music 5000/3000 --------------- 2K of RAM at &xx3000-&xx3FFF (Music 5000) and &xx5000-&xx5FFF (Music 3000) using one selection register at &FCFF. Appears to latch b8-b15 to give a 64K memory map. The Music 3000 only selects &xx50xx-&xx5Fxx and the Music 5000 only selects &xx30xx-&xx3Fxx. Note that the apparent 3000/&50, 5000/&30 mismatch is the correct way around. Morley RAMdisc -------------- 1M of RAM at &xxx00000-&xxxFFFFF paged in with three non-standard address registers at &FCC0-C2. Details not fully understood so may be inaccurate. Millipede PRISMA-3 ------------------ 8K of NVRAM at &xx0000-&xx1FFF using one non-standard address selection register at &FCB7. This is used to hold display data such as a persitant palette, etc. Unknown what size the address register is. Access to JIM memory map ------------------------ Acorn documentation mentions using zero page location &EE as a paging register RAM copy. This location is also read by the keyboard scanning routines if more than two keys are held down at the same time. Also, a single location is clearly unable to store a copy of more than one 8-bit paging register. While the hardware protocol has been defined from the early Acorn/CUBE days, there doesn't appear to be any software protocol for multiple users to access the JIM memory. All software appears to assume that it is the sole user of the JIM memory, not assuming the latches are in any defined state before using them, and not leaving them in any defined state after using them - other than whatever the software set them to. This is summaried here: | Uses | Pre-access | Pre-access | Selection | Post-access | Post-access | &EE | action | assumption | action | action | state ---------+------+------------+------------+-----------+-------------+------------- RAMFS | no | nothing | none | &FCFF/FE | nothing | none ---------+------+------------+------------+-----------+-------------+------------- HADFS | | | | | | JIMDISK | no | nothing | none |&FCFF/FE/FD| nothing | none ---------+------+------------+------------+-----------+-------------+------------- *XLOAD, | | | | | | *XSAVE | no | nothing | none |&FCFF/FE/FD| nothing | none ---------+------+------------+------------+-----------+-------------+------------- Opus | ?? | ?? | ?? | &FCFF/FE | ?? | ?? ---------+------+------------+------------+-----------+-------------+------------- Music | | | | | | 3000/5000| ?? | ?? | ?? | &FCFF/FE | ?? | ?? ---------+------+------------+------------+-----------+-------------+------------- Non-Extended Memory Use ======================= In the absence of external RAM some hardware has used addresses in JIM for other purposes. FDF0-F7 Torch SASI/SCSI Hard Drive Access ----------------------------------------- Addr Write Action Read Action -------------------------------------------------------------------- FDF0 Data Out Data In FDF1 Reset Status FDF2 Select 1 Set ACK (SASI only) FDF3 Select 0 -