Code: Select all
1010
0110
----
UU10
U means unknown, it can be either 0 or 1 to the device reading the bus.
Moderator: Moderators
Code: Select all
1010
0110
----
UU10
U means unknown, it can be either 0 or 1 to the device reading the bus.
Code: Select all
ROMout
0 1
CPUout 0 0 ?
1 0 1A "bus" is made of several lines where bits travel. The address bus has 16 lines and the data bus has 8 lines. These are the paths that addresses and data use to move around. Some carts don't make use of the R/W line (it indicates whether the CPU is reading or writing), meaning they don't know the difference between reading and writing, so they output the contents of the address being accessed regardless of the operation. If it's a write operation, both the CPU and the ROM chip will try to output data into the same bus at the same time! If the values they output are different, then you have a bus conflict.WedNESday wrote:I find this setence a little crytic.
I'd agree with you because the end result should be that the actual behavior ends up different than what the mistaken programmer intended. There is too much dependent on electrical behavior between components that differ to have one accurate solution. So whatever happens on a mapper that is known to have bus conflicts, it should result in wrong behavior all the time, or wrong behavior none of the time. The reason I think it should just go with what the CPU writes is it will result in people writing programs that have bus conflicts but this is a minor issue for a new game and can easily be corrected either with one extra chip or implementing the table for register writes. Or just have an option, Bus conflicts -> CPU WINS, AND LOGIC, and whatever other options you'd want.Bregalad wrote:In all cases, I think a "AND" behaviour is probably the cleanest - if the programmer assumes that the value he writes to $8000-$ffff is what will get bankswitched he'll be wrong, and if he assumes the value in rom is what will be bankswitched he's wrong too. It's probably the most accurate electronically (see my previous answer).
Man, you are a genius !! I'd never thought of that !I just tested on unmodified GNROM, AOROM, and UNROM (Dragon Power, Battletoads, and Rygar). I had code running out of NES internal RAM writing bank selection values, then determining the bank that was set and printing it.