Re: Difference between R65C02 and original 6502 (wrt 6509 emulation)

From: Jim Brain <brain_at_jbrain.com>
Date: Tue, 16 Apr 2019 21:54:10 -0500
Message-ID: <8367d7db-74b2-56a0-99de-0671f9b06aff_at_jbrain.com>
On 4/16/2019 7:47 PM, Mia Magnusson wrote:
> Den Mon, 15 Apr 2019 17:08:43 -0400 (EDT) skrev Jim Brain
> <brain_at_jbrain.com>:
>> Unfortunately, it does not work that way. I understood that the
>> $01/$1 registers are present in every bank, not just bank $0. Perhaps
>> that is a wrong assumption. As such, I also decode them to each bank.
>> (I think it has to be that way, for how else would you move from
>> execution in bank 1 to bank 0 if the registers only appear in bank
>> 0.) So, a write to any bank: $0/$1 will save new values in the banks
>> (though they will not be used until the developer moves back into
>> emulation mode).
> I might had been unclear.
>
> What I'm trying to say is that if the registers at 0 and 1 are hidden
> from read, but listens to writes, in '816 mode, everything should work
> fine as the code that switches back from '816 mode to 6509 emulation
> could just write the 0/1 registers at $F0000/$F0001 as there is no risk
> of corrupting memory for the 8088 board. With those registers written
> it's then safe to switch back from '816 mode to 6509 emulation mode and
> the registers will contain the correct values even if previous code had
> written to $x0000/$x0001.

So, the logic you feel should be implemented would be:

01_register_select = (((address[19:0] == $f0001) and (mode_816 == 1) and 
(mode_emulation == 0)) or ((address[15:0] == 1) and (mode_816 == 0)));

   // listen to $f0001 when in native 816 mode, else listen in all banks.

Jim
Received on 2020-05-29 21:32:29

Archive generated by hypermail 2.3.0.