Thanks for the replies guys! And, well, crap. I just reassembled it with two inx sp's at the start and this time I didn't get a greyscale kaleidoscope. Maybe there was some silent madness previously due to failed builds quietly trashing memory? ¯\_(ツ)_/¯ I certainly can't say I'm *angry* but... huh.
Stephen - Yes, I have a full push/pop of state. I learned that ISRs have to be side effect free the hard way. I thought of pop x, but then I can't preserve state because pop has to overwrite something, no? John - Good to know if I were literally after count-the-cycles level speed. Not quite that critical here luckily. Here's the ISR I wrote (my kingdom for even a few more characters for labels!)... the mention of RTS probably gives away what I'm actually after :P. In truth I could probably get everything I want by just using the F5FC hook to monitor space remaining in the OS buffer but where's the fun in that? rs_irqh: ; prevent side effects! inx sp inx sp push psw push b push d push h ; grab byte immediately in C8h call rsringw ; get any errors in D8h ani 0Eh sta rs_errs ; set RTS to disable incoming if we are nearly full lda ringhave cpi rbufsiz-2 jc rsihb in BAh ori 128 out BAh rsihb: pop h pop d pop b pop psw ei ; done handling IRQ, and, ret ; outey 5000! -- Erik On Tue, Jul 1, 2025 at 5:06 PM John R. Hogerhuis <[email protected]> wrote: > It's counterintuitive but if you want max serial port handling speed you > should disable the interrupt and poll. > > -- John. > > > On Tue, Jul 1, 2025, 3:37 PM Erik Keever <[email protected]> wrote: > >> Hi, >> >> I am working on an assembly program that involves the serial port hook at >> F5FC. >> >> The current code I have works by setting a JMP there to my data-received >> handler and then just returning. >> >> This is fine, but so far as I can tell from disassembling the ROM handler >> at 6DAC, after I return, the whole rest of the ROM's handler *also* >> runs. The program doesn't execute incorrectly since I've already got the >> data but I'm not suffering through writing assembly because I enjoy wasting >> lots of cycles. >> >> Now it seemed to me that since it gets to my code by >> call 0034 due to IRQ >> jmp 6DAC >> call F5FC (immediately at 6DAC) >> jmp $mycode, >> I should be able to INX SP twice to "delete" the return-to-rom address >> such that when I do RET it will return from the IRQ instead, thereby >> sidelining the ROM code completely. >> >> Except if I do this I am pointedly reminded that the 8085 does not have >> protected mode. And so my question: er... what exactly am I doing wrong >> here? >> >> -- Erik >> >
