epaell wrote: ↑Mon Jul 15, 2024 6:06 am
I ran my test with just the CPU card and it likely confirms your suspicion. The code ran at 4 MHz and dumped the last detected location of memory in to the ROM. At 8 MHz it didn't do this. The test only required the CPU board to run.
OK, I have the 6502 CPU Card + MC68B50 ACIA (on the Motorola I/O Card) running at 8MHz!
My curiosity got the better of me, so I took some time out to test my thought (2) theory, from above.
I was thrilled to find I didn't even need to go to the faster SST ROM (on ROM Expansion Card).
The CPU Card alone worked fine!
In summary, I loaded my simple "Hello 6502 World" ROM in the AT28C256 on the CPU Card, together with a WDC W65C02S CPU.
I first verified it worked at 2MHz and then 4MHz, but failed at 8MHz.
Then I modified the 6502 CPU Card PLD to relax the ROM Chip Select timing (to no longer require CLK high).
Although expecting I'd still need the faster ROM, I first tried it on the CPU Card alone, and...
Success! With the updated PLD, and still with 150ns AT28C256, I had successful serial output at 8MHz Clock!
Repeated tests showed this as a reliable test result. Awesome!
If interested, I paste below the updated PLD "Alternative" Bus Control, and Chip Select logic.
Specifically, I have removed the CLK from the "Bus Control" MREQ logic. Then I have added the CLK to CS_RAM (to replicate CS_RAM's original logic), then for CS_ROM I have added CPU_RW (so CS_ROM is now gated with CPU R/W high, instead of CLK high).
Note: I only included CPU_RW for my own comfort. This will of course mean no EEPROM writes, but you could of course also try only the Address lines driving the CS_ROM logic (for the earliest possible ROM Chip Select).
Well, I call that a SUCCESS!
Code: Select all
/*
*
* Logic: 6502 CPU Card - Bus Control
*
* ecb_mreq : ioaddr not asserted, while clk high.
* ecb_iorq : ioaddr asserted, while clk high.
* ecb_clk : clk
* ecb_rd : cpu_rw is high, while clk high.
* ecb_wr : cpu_rw is low, while clk high.
*
*/
/*
ecb_mreq = !ioaddr & clk;
ecb_iorq = ioaddr & clk;
ecb_clk = clk;
ecb_rd = cpu_rw & clk;
ecb_wr = !cpu_rw & clk;
*/
/*
*
* Logic: 6502 CPU Card - Alternative Bus Control
*
* ecb_mreq : ioaddr not asserted.
* ecb_iorq : ioaddr asserted, while clk high.
* ecb_clk : clk
* ecb_rd : cpu_rw is high, while clk high.
* ecb_wr : cpu_rw is low, while clk high.
*
*/
ecb_mreq = !ioaddr;
ecb_iorq = ioaddr & clk;
ecb_clk = clk;
ecb_rd = cpu_rw & clk;
ecb_wr = !cpu_rw & clk;
/*
* Memory Map options follow (un-comment only one!)
*/
/*
*
* Logic: 6502 CPU Card - Chip Selects for 56K RAM 8K ROM
*
* cs_rom : ROM address space (0xE000 - 0xFFFF), while ecb_mreq asserted.
* cs_ram : RAM address space (0x0000 - 0xDFFF), while ecb_mreq asserted.
* cs_spare : Unused, but assigned to replicate ecb_iorq.
*
*/
/*
cs_rom = ecb_mreq & a15 & a14 & a13;
cs_ram = ecb_mreq & !(a15 & a14 & a13);
cs_spare = ioaddr & clk;
*/
/*
*
* Logic: 6502 CPU Card - Alternative Chip Selects for 56K RAM 8K ROM
*
* cs_rom : ROM address space (0xE000 - 0xFFFF), while ecb_mreq & CPU Read asserted.
* cs_ram : RAM address space (0x0000 - 0xDFFF), while ecb_mreq & clk asserted.
* cs_spare : Unused, but assigned to replicate ecb_iorq.
*
*/
cs_rom = ecb_mreq & cpu_rw & a15 & a14 & a13;
cs_ram = ecb_mreq & clk & !(a15 & a14 & a13);
cs_spare = ioaddr & clk;