First post, by superfury
From what I can understand in the documentation, the IRQs on the parallel port trigger in a bit weird way(combining the manual of the parallel port and various (Dosbox emulation of the DSS, DSS programmer's guide(https://archive.org/details/dss-programmers-g … age/n1/mode/2up) various other documentations(http://www.emblogic.com/blog/07/interrupts-in-parallel-port/)))?
As far as I can see, bit 7 of the data register is wired to the BSY bit on the port, causing it to be read back inverted on said port? That might be a crude detection method.
But what especially is strange, is that when the DSS buffer is full(nothing can be written anymore), ACK becomes high(bit 6 in the status becomes set). So that's a detection of a buffer that's filled.
But the documentation also says that when ACK toggles from low to high(it's raised), an IRQ is triggered?
But wouldn't you normally want an IRQ when the buffer is empty instead of full(so you can write most data, instead of nothing)? Or is an IRQ supposed to fire when ACK becomes low(which would mean that all documentation on the parallel port is flipped)?
Edit: Hmmm.... Reading https://allpinouts.org/pinouts/connectors/par … l/spp-parallel/ , it says that the ACK line is actually a NACK line? So the IRQ might be raised when ACK is raised, but the register reports it inverted? So that would mean that whenever the read out value turns from set(no ACK signal) to clear(meaning the ACK is raised), more data can be received(buffer isn't full)? And said bit is set (buffer full as the documentation on the Sound Source says it is), the ACK bit is actually cleared(lowered)? Then once the buffer has space again, the ACK signal from the device is raised again, causing the nACK to clear(buffer isn't full anymore) and an IRQ to fire?
Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io