enso wrote:
When I put together my CHOCHI and DILDAR systems, I mapped IO into page $C0 - for no particular reason (maybe because of Apple ][). So far this has worked out well, but I am wondering if it's the best place for IO. Placing it higher up (maybe page $FE?) will create a bigger contiguous space. But I am wondering if it will be more difficult to port software - high pages are usually ROM.
With an FPGA it's pretty easy to put it anywhere (and even make it movable from within the 6502 system). I don't want to wind up with a whole bunch of different configurations as it creates yet another set of branches to maintain, and I am already at capacity.
Do you have any thoughts on the subject? Is there a best location that would be most compatible to your systems? Or is it hopeless to bother?
I'm a bit late on seeing this (traveled all week). Back in the 80's I opted for the memory map I'm currently using on my little CPU board. Page $FE is I/O. My reasoning was simple (for me at least); using 32KB of RAM and 32KB of ROM makes for a very simple and compact hardware design, and one page carved out for I/O can handle a lot of chips depending on how you decode it. As my early 6502 systems were the Vic-20 and C-64, having contiguous RAM was nice, so in my view I wanted the most available RAM, easy part done ($0000 - $7FFF).
So, where to put the I/O page, I opted for $FE as I always intended to have a standard JMP table in page $FF as the startup vectors are there and I like the Vic-20 kernel setup where the IRQ/BRK handler is also in page $FF and JMPs to the soft vectors in page $03. This provides a large contiguous chunk of ROM from $8000 - $FDFF which is completely flexible. In some odd way it balances out, the first two pages (zero and stack) are dedicated by the CPU design, as is the top page with the hardware vectors, taking the next page down approach, you lose two pages at each end of the overall 64K map. If you get more creative with the HW design (like Enso's FPGA) then you could configure up to 63.5KB of contiguous RAM with the top page containing a boot loader.
As for porting existing SW, I guess it depends. I was able to port the original SyMon code quickly and had it running on a Vic-20 on the first try. I just changed the 6551 base address pointing to my old expansion board which has an Async port (6551 and 1488/1489) and replaced the kernel ROM with an 8KB EEPROM. For my current two-board system, it required moving some stuff around to free up page $FE, but also worked out fine. I then ported Daryl's SbcOS over and sorta got it working (Basic didn't work).... but there a few odd bits on how the WDC assembler codes vs the assembler he used. I also took the carved downed versions he did recently for another forum member and that was fairly quick and easy. So far, so good for me, but I'm just now starting to get into the programming of it.