Posted: Sun Oct 31, 2010 10:27 pm
Not using a Wishbone-compliant bus prevents you from directly connecting Wishbone peripherals (e.g., vga controllers, various UARTs or other communications products), which is the OpenCores.org standard.
But, since Wishbone and 65xx buses are very nearly identical, making a bridge shouldn't be too hard. And, by nearly identical, I mean they're almost isomorphic:
* CYC_O corresponds with (VPA | VDA), where | represents binary-OR.
* STB_O is, because the bus is only 8 bits wide, the same as CYC_O.
* OE_O is R/W inverted.
* CLK_I is phase-1 (or phase-2 inverted)
* ACK_I is RDY
All that stuff about tags, multiple byte lanes, etc. you needn't concern yourself over, since you're not making a wider bus with error correction.
Overall bus timings are a little bit different, but I seem to recall only few cases where they're at all incompatible (e.g., handling of ABORT, if you support that at all, maps to Wishbone's ERR_I, yet isn't compatible with Wishbone because it's sampled on the wrong clock edge).
re: 65816 -- EF is the external emulation flag -- it's set when running in 6502 mode, and cleared otherwise. If you have external hardware that provides interrupt vectors dynamically (e.g., as the Apple IIgs does), this signal is used to determine whether to intercept $00FFEx vs. $00FFFx.
MF and XF are the M and X status indicators, indicating accumulator and index register widths. This is required knowledge if you're attempting to use external hardware to intercept opcode fetches and you need to determine how big the operand is going to be.
But, since Wishbone and 65xx buses are very nearly identical, making a bridge shouldn't be too hard. And, by nearly identical, I mean they're almost isomorphic:
* CYC_O corresponds with (VPA | VDA), where | represents binary-OR.
* STB_O is, because the bus is only 8 bits wide, the same as CYC_O.
* OE_O is R/W inverted.
* CLK_I is phase-1 (or phase-2 inverted)
* ACK_I is RDY
All that stuff about tags, multiple byte lanes, etc. you needn't concern yourself over, since you're not making a wider bus with error correction.
Overall bus timings are a little bit different, but I seem to recall only few cases where they're at all incompatible (e.g., handling of ABORT, if you support that at all, maps to Wishbone's ERR_I, yet isn't compatible with Wishbone because it's sampled on the wrong clock edge).
re: 65816 -- EF is the external emulation flag -- it's set when running in 6502 mode, and cleared otherwise. If you have external hardware that provides interrupt vectors dynamically (e.g., as the Apple IIgs does), this signal is used to determine whether to intercept $00FFEx vs. $00FFFx.
MF and XF are the M and X status indicators, indicating accumulator and index register widths. This is required knowledge if you're attempting to use external hardware to intercept opcode fetches and you need to determine how big the operand is going to be.