* Uses a 16KB ROM paged into memory at &0000.
* Uses a 8KB static RAM paged into memory at &c000-&dfff and repeats again at &e000-&ffff.
* ROM is paged into the range &0000-&3fff when the red button is pressed and the (this causes an NMI vector is executed).* When the black button is pressed, the ROM is paged into the range &0000-&3fff and executes it at &0000.(this is a reset)* This checks the BASIC ROM version, and clears the extra ram if a BASIC ROM from a CPC6128 is found. Code: 0000 f3 di ;; disable maskable interrupts 0001 0100df ld bc,0df00h ;; select upper rom 0 0004 ed49 out (c),c 0006 01817f ld bc,7f81h ;; enable upper rom (mode 1 too) 0009 ed49 out (c),c 000b 31febf ld sp,0bffeh ;; setup stack which is not initialised after reset 000e 3a02c0 ld a,(0c002h) ;; read BASIC ROM version number 0011 fe02 cp 02h ;; CPC6128? 0013 cc2e0c call z,0c2eh ;; erase extra RAM ;; this appears to set it up for a reset.. 0016 210000 ld hl,0000h 0019 e5 push hl 001a e5 push hl 001b c30038 jp 3800h ;; I think the hardware monitors for address 3800h and if found disables the ROM
* Uses NMI
* Only captures upper/lower ROM enabled state and nothing else. Doesn't capture the hardware state like the Multiface does. Code in the ROM reads the hardware state which it restores when resuming the program.* RAMDIS is asserted when ROM or RAM are active meaning no write through to ram behind. This also means that c000-ffff reads unmapped ram when ram is not actually enabled.
* Menu code is at offset &3810 and is copied into RAM at &A200.
* ram is disabled when the transtape returns to the program and can only be enabled using i/o port.
* Uses port FBF0 (write only)
FBF0 decoding is: