Hello all,
I hope you can help with this one because I'm out of ideas.
I'm trying to make a simple acia um6551 interface to apple IIe(clone), but apparently I'm doing something wrong. I've read a lot about 6551 on the internet.
This is the schematics I'm working on. Since Apple II has no phi2 on the slot, I've "tapped" the phi2 directly from the processor's pin. I can see the clock signal on phi2 pin on the 6551 after doing that. I'm using 1.8432 Mhz generator for the baud rate, which is connected as per the datasheet. It's not on the chematics but I've connected RESET pin of 6551 to the reset of the 6502 and also I've grounded DCD, CTS, DTR and DSR. So all should be ok, I suppose.
I've connected the 6551 through slot 5. I've written simple Basic program to set the registers and send just one char as a test, but for some reason it's not sending anything.
Even reading back the registers gives back wrong values (either 255 ot 193)
10 POKE $C502, 0b // 9600, 8N1
20 POKE $C503, 1e // no irq, no echo
30 ? PEEK($C503) // print Control register
40 ? PEEK($C502) // print Command register
50 POKE $C500, 81 // send "A" to data register
Any ideas if I'm missing something, at least in theory?
Do you have more than a single 6551 on hand? I find this IC to be "picky" on super serial cards. If you have another, try another IMHO.
Also out of curiosity do you have a simple logic probe to check pin activity as you issue commands?
I've read in a thread about A2RPI card, which uses similar setup and there they hook the /IOSEL to 74ls04 inverter and then output to PHI2 input pin of the 6551 this would actually work. So I rewired according to their schematics here:
acia.png
I tried that and connected a logic analyzer. Here are the results. Timings seems to match at first glance, but I can't seem to save new byte into the ACIA registers. In yellow I've annotated the respective pins of the um6551A
logic-annotated.png
I really don't know what's wrong.
My simple test is with Basic. The "card" is in slot 5. The first image is the result of POKE $C50b, $1e (setting the control register with 1e) . When I read it back with Peek($c50b), it returns wrong values (either 191 ot 255 ).
Here's an image without inverting /IOSEL signal.
logic-no-annotation.png
And here how it looks again with inverted /IOSEL and last line changed to tap on RW signal. Same data is being written to the same ACIA register.
Screenshot 2024-04-23 at 17.57.56.png
It appears two of the address lines were swapped :) It's now working, even managed to connect it to 3.3v uart logic after that.
IMG_9954 Large.jpeg
IMG_9955 Large.jpeg
IMG_9956 Large.jpeg