Hey guys, I've been going over some of the timings for writing data from a peripheral card on to the Apple IIe bus and just when I think I have it, I get confused again. This is for an accelerator I'm working on that replaces the 6502, and it seems tobe working for all reads but some errors on the writes so I want to make sure I have it right. I'm using a IIgs for testing but want to make this work across the range of Apple IIs if possible.
In the DMA tech note for the IIe it says that the data bus is valid until Phase 0 falls, and even presents a write scenario where you can gate your write using the 7M signal and hold it *until* Phase 0 falls, but in Sather's IIe book pages 4-7 and 4-8it states a couple of times that write is held valid for some time *after* Phase 2 falls, and Phase 2 falls in worst-case 65ns after Phase 0 falls, which means I have to hold the write for some time after Phase 0 falls. I know I must be reading this
I'd like my peripheral-card read/write to work across the Apple II range so I'm wondering if anyone has any timing data on when it's safe to start fiddling with the Address and Data buses and R/W line and when they need to be held stable and valid.
You mentioned DMA so I'm thinking that's the timing you are going for.
The IIgs hardware reference says (in reference to cards that work on
other Apple II models) that they will *probably* work if they assert and remove the /DMA signal within 200 nanoseconds of the rising edge of
phase 0. It also says that normally the IIgs should be running at 1.024
MHz when performing DMAs. There are exceptions to this if you are only accessing fast ram or rom.
Also with the IIgs you need to set the DMA bank register.
If you are using a logic device (FPGA, etc.), here is a link to Alex
Freed's verilog code for DMA timing on an Apple IIe which may help:
https://sourceforge.net/p/jatcb/code/HEAD/tree/dma.v
Lastly, I like to synchronize all the clocks on the card whether or not
I'm using the 7Mz Apple clock as the system clock or a clock on the card.
Charlie
You mentioned DMA so I'm thinking that's the timing you are going for.
The IIgs hardware reference says (in reference to cards that work on
other Apple II models) that they will *probably* work if they assert and
remove the /DMA signal within 200 nanoseconds of the rising edge of
phase 0. It also says that normally the IIgs should be running at 1.024
MHz when performing DMAs. There are exceptions to this if you are only
accessing fast ram or rom.
Also with the IIgs you need to set the DMA bank register.
If you are using a logic device (FPGA, etc.), here is a link to Alex
Freed's verilog code for DMA timing on an Apple IIe which may help:
https://sourceforge.net/p/jatcb/code/HEAD/tree/dma.v
Lastly, I like to synchronize all the clocks on the card whether or not
I'm using the 7Mz Apple clock as the system clock or a clock on the card.
Charlie
Hey Charlie,
I'm new to VHDL so I was trying to trigger on both the rising/falling edges of 7M to create a counter that offsets from Phase0 rise/fall, that way I could use the counter as a point where to perform certain logic such as read and writes.
You mention the Carte Blanche; have you done a lot of prototyping with it?
Do you have any projects you're working on?
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 489 |
Nodes: | 16 (2 / 14) |
Uptime: | 09:56:23 |
Calls: | 9,665 |
Calls today: | 7 |
Files: | 13,711 |
Messages: | 6,167,294 |
Posted today: | 2 |