ISAC provides a variety of features and integrates to the 6502 offering:
- Bus Mastering
- DMA Channels and Block Transfers
- IRQ Priority Sorting and Routing
- Address Bank Switching for up to 1MiB of address space
- ISA bus expansion slots.
- Device to Device Messaging
- Vector Shadowing and Redirection
ISAC is based on a modified 6522 and uses 6502 compatible commands and signaling.
if possible, relocatable memory mirroring/shadowing may be implemented.
So we are drawing from the Intel ISA bus specification (8bit) and the IEEE P996 standard that never really got off the ground.
We are making a few declarations here, and stating some deviations from these standards:
We are probably making the bus speed faster for our systems, though this will be looked into further. ISAC may run faster than the cpu, as fast as the cpu, or on some other multiplier that syncs to the system.
The OSC pin is stated to be 14.xyz Mhz, which divides down to an old standard we are not using, therefore, we might be commandeering the OSC line as an oscillator line, with a BIOS look up of the frequency used, more research needs to be done to determine if other cards would be damaged by this change or if they can be ignored. I would say, for the ISAc chip itself, this might be 'user definable' and users or vendors can comply with whatever they choose.
According to P996, ISAC is the Permanent Master of the bus, as it has the highest bus-width. A 6502 (or 6502/6522 module similar to the W65C122S) may become the Alternative Master, until such time as a full bus width CPU module could be formed and assume these duties.
so at this point we are strictly 8bit by design.
so far I have seen the 1MiB broken up into 16 64k regions repeatedly, and those regions referred to as: Banks, Segments, and Pages, the last of which I abhor that should be about 256 or 512 words imo. Id almost call them books, though I digress. This is a logical system of arrangement as the cpu/mpu module at this point, accesses 64k of address space at a time.
ISAc will need to keep track of the several things:
- Id like 256 4K nodes on a table that map to how they are protected, mapped, assigned etc.
- So this is 4 bits 'internal' to each Book/Bank/Slot, and 4 bits external to each one, to provide 256 4K nodes across 1MiB of space.
- Where the cpu, or other devices are currently mapped to,
- the return paths for the cpu (or other devices)
- given limited register space in current cplds (ATF150x, ispMAX4000, etc), storing the return state of the cpu is difficult
- ram/device echo or shadowing tables
if the cpu is accessing Book A, and Book A doesnt have a RAM chip available to use as zero page and stack, then the cpu
would know this and only have the ability to use "shadowed RAM" from Slot 0 (or elsewhere) instead of local ram in that slot. - what devices are using what slots, at any given time
- irqs between devices and cpu
- dreq and dack signaling
- its own microcode/state-machine
it is very possible we will use a 6404 as the active controller. it should be able to easily address and control and 6522, or part of one, as well as all low bit protocols.
https://docs.google.com/spreadsheets/d/ ... id=0#gid=0
List of Resources
https://ist.uwaterloo.ca/~schepers/MJK/6502.html
https://allpinouts.org/pinouts/connectors/buses/isa/
https://www.vogons.org/viewtopic.php?t=102338
viewtopic.php?f=1&t=7178
viewtopic.php?f=1&t=1525&p=93118#p93118
https://standards.ieee.org/ieee/896.1/1268/
https://ia804607.us.archive.org/25/item ... 2_text.pdf
http://bos.asmhackers.net/docs/dma/docs/dma0.php.htm
http://bos.asmhackers.net/docs/dma/docs ... ma.php.htm
https://www.retrobrewcomputers.org/lib/ ... sa-bus.pdf
http://www.brokenthorn.com/Resources/OSDev21.html
so in the section here on the 8257,
History
meanwhile the 65816 can easily handle the whole bus with it's 16MB of Address space.
I am of a mind to use them as 'chip select' or 'bank select' and I am ok to burn a few clock cycles to change 'upper address bits with a 4 bit register' and have 16 times the normal ram. or address space. context switching, dedicated devices etc.
[*]leave unused
[*]bank or device switching
[*]use a delayed read/write operation to use an external register for the extra bits
I have Intel ISA Spec 2.01 Sep 89, It does say a Maximum of 1MB. (section 6.1)
In several other places it says, 8 bit cards use 64K, (section 6.2) and in other places (add on card focus) that only 10 address lines are used traditionally. ISA was intended by Intel to use their 8259A, and so unless we try to implement that exactly, we are going to diverge a little. in 6.3 and further it says that data is moved in 8 or 16 bit transfers. I think "using ISA" for a 6502 is probably a worthy experiment.
The primary goal here in not necessarily to use the physical ISA hardware, though that is highly appealing as it is off-the-shelf components. PC/104 and PCMCIA however are both built on top of ISA and getting it established is for the moment, as good of a buss to use as any, primarily due to future connectivity with existing standards.
so what other thoughts are there on a 6502 using an ISA physical connector or design specification (since they exist and it is well documented). a 65816 is clearly more suited to this as Rob Finch has developed such a system. what caveats and considerations are there for the ISA bus?