akohlbecker wrote:
Interesting approach! Agreed that it is a lot of chips and it might be more practical to replace the 65C51 with something else (have you looked at the 16C550C in DIP?), but we're here to have fun not be practical!
If you enable receiver interrupts, you should also get interrupts for transitions on DSRB. So this means that you can have interrupt-driven communications in both directions - which is a good thing because it frees up your BIOS to do other things. I don't believe DSRB interrupts would be impacted by the bug, but your mileage may vary, I haven't tried it.
By the way, I recommend reading Rockwell's datasheet for their version of the ACIA (R6551), as it is much more detailed. Specifically, they have a recommended flow for interrupt handling, see page 6-178, Status Register Operation, below.
Yes about the fun and not practicality. Thank you so much for the BB816 videos, they have been incredibly entertaining and educational, just like the Ben Eater series. I'm putting a lot of effort into my BB816 breakout-based quad core 65816 project, Vega816, inspired by both your videos and personal encouragement that you have offered me. I was 13 when the Commodore 64 debuted, and one pleasure of this hobby is that it puts me back underneath the Christmas tree in 1983, reading the C64 Programmer's Reference Manual guide to 6510 assembly, and realizing, with a shock, that I now understood something very important about what a computer is and how it works.
People have gone to great lengths to replicate C64 elements like the SID and VIC-II (I am incorporating their work into my design, and in particular I am thinking about how a VIC-II style chip could boss the clock of my design to get done what it needs to). So why on earth shouldn't we come up with a 12 chip design that replaces the ACIA, pin for pin! We could even produce a schematic that replicates the W65C51N bug, for the purists! All of this has to be on a large circuit board that has a riser underneath it so you can pop it into any 6551 holder. And one jumper to set whether you want the transmission bug or not!
Here's a schematic with both your and Ben's ACIA circuits on it. I put an OR gate so that the ACIA can listen in on both yours and Ben's lines at once, and I fork the transmission line so that the ACIA can blast serial out over DB9 RS-232 and I2C at the same time. It is 2023, not 1983, and desperate times call for desperate measures. We need to act quickly before IBM and Apple come to dominate the PC market.
Thanks for endorsing the 16C550C, I will look into it. I've been going for new through-hole parts, because that's all I know how to solder, but I can see bending the rules to make an effective UART solution. I will also read the Rockwell datasheet you attached. I'm compelled by the idea that the DSR transitions can trigger interrupts on the receive side.
I have a Vector Pull rewrite module in schematic, with an 8to3 priority encoder, so I can have up to 8 different interrupt vectors, including a facility to turn my IRQ7 into an NMI. A programmable interrupt controller with a single memory mapped register allows software control of interrupt priority and CPU destination (for my quad core 65816 scenario).
Attachment:
Vega816-ACIA.png [ 417.27 KiB | Viewed 6887 times ]