The idea drogon mentioned certainly could be exploited, yielding 64K of code space and another 64K of data space. Another person to independently arrive at this idea is forum member Hugh Aguilar, who proposed a 6502-like CPU implemented with Verilog and an FPGA. This'd make it fairly straightforward to incorporate such a feature.
The idea would also be fairly straightforward if a 65816 were used, thanks to the VPA and VDA outputs which Ed mentioned. The key point is that these identify
when a data access occurs, as opposed to code accesses and dummy cycles. In other words it's
timing information. There are two 64K spaces, and it's timing info that indicates which space should be selected. (For the record, I don't know whether this scheme really satisfies the definition of a Harvard architecture. Certainly there are Harvard machines which have separate buses that allow
simultaneous code and data accesses.)
With BigEd's and nyef''s remarks the discussion became broader -- ie, more to do with address-space expansion in general, rather than two spaces segregated on a code vs data basis.
Ed, the BBC Master you mentioned sounds like a variation on a ubiquitous mapping scheme used for 6502 / 65C02 and other CPU's -- schemes which have a bank aka page register that allows an arbitrarily large amount of memory to be accessed. But timing info is still central. Lacking VPA / VDA, the solution is to use a fraction of the address space -- 8K or 16K, perhaps -- as a window. Then a simple address decoder can detect
when the window is accessed, thus supplying the timing information. It's a
very widely used scheme, and its defining feature is its use of an address decoder to cue -- to time -- an action by the mapping hardware.
( The variation with the BBC Master... correct me if I'm wrong, please, Ed... is there's another address test also performed by the system, one which -- together with SYNC -- reveals whether or not an OS routine is executing. This yes/no result is stored until the subsequent SYNC pulse, and during the intervening interval the yes/no will determine which of two values will appear in the bank aka page register if it becomes active (ie, if the window gets touched). Clever! And challenging to explain; I hope I'm not just muddying the water. )
Thanks for the mention of my
KK Computer, nyef. Although it uses a 65C02 (and thus lacks VPA / VDA), neither is there any 8K or 16K window involved. Ie; KK doesn't use an address decoder to time actions of the mapping hardware. Instead, the mechanism is as Ed described: a state machine which tracks the lengths and cycle usages of all opcodes. One of the advantages is having blocks which are not 8K or 16k but a full 64K (as with an '816).
An earlier 'C02
machine of mine lacks KK's bells and whistles but nevertheless does use 64K blocks. In this case timing was derived basically from a shift register. In other words you don't
need a fancy state machine to go the 64K-block route.
-- Jeff
_________________
In 1988 my 65C02 got six new registers and 44 new full-speed instructions!
https://laughtonelectronics.com/Arcana/ ... mmary.html