RE: [41CL WARP] XEQ+ oddness
Incomplete list of HP & EPROM/Flash box/modules bank switched product introduction year ...
- 1983: HP-41CX released (page 5, BS)
- 1985: HP Advantage module released (12K ROM, BS)
- 1985: CMT-10-16KB module released (16K EPROM, BS)
- 1987: ZEPROM module released (16K EPROM, BS)
- 1987: HP IR Printer Module, with two banks always in page-6
- 1987: VM Electronics HEPAX Module, with FOUR banks in one self-relocating page
- 2003: Clonix-41 module released (24K Flash, BS) / latest: Clonix-D (48K Flash, BS)
- 2004: NoVRAM module released (24K Flash & 16K FRAM, BS) / latest: NoV-64d (48K Flash & 64K FRAM, BS)
- 2005: MLDL2000 card reader module released (255 ROM banks & 63 SRAM banks, BS)
- 2011: 41CL Beta boards shipped (2MB Flash & 512K SRAM, BS) / latest: 41CL v5 (8MB Flash & 512K SRAM, BS)
- 2020: DM41X released (6MB Flash, BS)
- 2020: bank switching emails exchanged with Monte, Diego, Meindert, Håkan, Ángel & Robert
CMT-10-16KB module from Corvallis MicroTechnology: (discontinued)
- the module uses a 27C256 EPROM (256k bits = 16k of 16 bits words)
- the module is split into four 4K blocks (0 to 3) of 16 bits words
- extended 16 bits NUT instruction structure
- bits 15 to 13 must be set to zero
- bits 12 to 10 are for blocks switching
- bits 9 to 0 are for NUT instructions
- block switching is encoded in each 16 bits extended NUT instruction
- bit 12 set to 1 indicate to the module internal firmware/hardware to interpret bits 11 and 10
- bits 11 & 10 indicate the following: 00 = block 0, 01 = block 1, 10 = block 2, 11 = block 3
- bank switching can also be done with modified ENBANK instructions
- ENBANK1: 0x100 or 01 0000 0000 becomes 0001 0101 0000 0000 or 0x1500
- ENBANK2: 0x180 or 01 1000 0000 becomes 0001 1001 1000 0000 or 0x1980
- ENBANK3: 0x140 or 01 0100 0000 becomes 0001 1101 0100 0000 or 0x1D40 (not in the manual but can be extrapolated)
- ENBANK4: 0x1C0 or 01 1100 0000 (not in the manual and not supported)
- bank 1 even/lower page always contains 4K block 0
- bank 1 odd/higher page often contains 4K block 1 (at boot up, mode changes, etc)
- bank 1 odd/higher page is changed to the specified block (0 to 3) when the module encounters an instruction with block switching bits set
- bank 1 odd/higher page is changed to the specified block (1 to 3) when a modified ENBANK1 to ENBANK3 instruction is interpreted
ZEPROM module from Zengrange: (discontinued)
- ENBANK1 and ENBANK2 are supported(0x100, 0x180), ENBANK3 to ENBANK4 are not supported (0x140, 0x1C0)
- ENBANK1 activate the first 8K (even/odd pages)
- ENBANK2 activate the second 8K (even/odd pages)
- to convert a 16KB flat module to a bank switched one, they first link the even/odd pages and then remap the second 8K to bank 2.
MLDL2000 card reader module (firmware v1.51+) from Meindert Kuipers: (discontinued)
- support bank switching for all pages (0x0 to 0xF)
- even/odd pages are linked (0x4/0x5, 0x6/0x7, 0x8/0x9, 0xA/0xB, 0xC/0xD, 0xE/0xF)
- ENBANK1 to ENBANK4 are supported (0x100, 0x180, 0x140, 0x1C0)
Clonix & NoV modules from Diego Díaz:
- ENBANK1 to ENBANK4 are supported (0x100, 0x180, 0x140, 0x1C0) for Flash based pages only (NoV RAM pages does not support BS)
- support bank switching for pages 0x4 to 0xF
- before 2020: bank switching is done at module level (all the pages of all the ROMs served by the module are switched at the same time)
- since 2020: bank switching is done at page level
41CL boards from Monte Dalrymple:
- ENBANK1 to ENBANK4 are supported (aka ENROMx, 0x100, 0x180, 0x140, 0x1C0)
- page & bank mapping are done with the WCMD NEWT instruction and with the MMU (0x804xxx adresses)
- extended 16 bits NUT instruction structure
- bits 15 to 14 unused (ignored)
- bits 13 to 12 used for turbo handling (bits = this/next instruction)
- 00 = turbo execute / turbo fetch (if enabled)
- 01 = normal execute / normal fetch
- 1x = refetch, normal execute / normal fetch
- bits 11 to 10 unused (ignored)
- bits 9 to 0 are for NUT instructions
- pages that are bank switch enabled
- even/odd port pages are linked (0x8/0x9, 0xA/0xB, 0xC/0xD, 0xE/0xF)
- some lower pages are standalone (0x4, 0x6, 0x7)
- some lower pages are linked (0x3/0x5)
The 0x3/0x5 linking is required by the CX Extended Functions.
The bank is switched by code in page 3 before a jump to code in page 5.
- OS pages are not bank switch enabled (0x0, 0x1, 0x2)
DM41X from SwissMicros:
- ENBANK1 to ENBANK4 are supported (0x100, 0x180, 0x140, 0x1C0)
- support bank switching for pages 0x4 to 0xF
- OS pages are not bank switch enabled (0x0, 0x1, 0x2, 0x3)
- MOD file control module page switch definition
edit 1: typos
edit 2: added products web link
edit 3: added missing items from Ángel
edit 4: added 41CL correction from Monte
|