From 3e6120e0fada4456a72f2044176c47b691fa94a9 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sun, 14 Jan 2024 11:22:26 -0800 Subject: [PATCH] ACIA Driver Interrupt Handling Performance Improvements Thanks and credit to Derek Cooper, Wesley Isacks, Bill Shen, and Phillip Stevens. --- Source/HBIOS/acia.asm | 27 +++++++-------------------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/Source/HBIOS/acia.asm b/Source/HBIOS/acia.asm index 8c24da9e..ee2e4ba6 100644 --- a/Source/HBIOS/acia.asm +++ b/Source/HBIOS/acia.asm @@ -178,26 +178,13 @@ ACIA1_INT: ; ACIA_INTRCV: ; CHECK TO SEE IF SOMETHING IS ACTUALLY THERE - CALL DELAY LD C,(IY+3) ; CMD/STAT PORT TO C IN A,(C) ; GET STATUS - LD B,A - AND $01 ; ISOLATE READY BIT - JR NZ,ACIA_INTRCV1 -; -#IF FALSE - CALL PC_LT - LD A,B - CALL PRTHEXBYTE - INC C - IN A,(C) - CALL PRTHEXBYTE - CALL PC_GT - OR $FF -#ENDIF -; - RET - + RRA ; READY BIT TO CF + JR C,ACIA_INTRCV1 ; RECEIVE CHAR + XOR A ; INT NOT HANDLED, CLEAR ZF + RET ; ... AND RETURN + ; ACIA_INTRCV1: ; RECEIVE CHARACTER INTO BUFFER @@ -285,9 +272,9 @@ ACIA_IN: ACIA_IN: CALL ACIA_IST ; SEE IF CHAR AVAILABLE JR Z,ACIA_IN ; LOOP UNTIL SO - HB_DI ; AVOID COLLISION WITH INT HANDLER LD L,(IY+6) ; SET HL TO LD H,(IY+7) ; ... START OF BUFFER STRUCT + HB_DI ; AVOID COLLISION WITH INT HANDLER LD A,(HL) ; GET COUNT DEC A ; DECREMENT COUNT LD (HL),A ; SAVE UPDATED COUNT @@ -322,8 +309,8 @@ ACIA_IN2: LD (HL),E ; SAVE UPDATED TAIL PTR INC HL LD (HL),D - LD E,C ; MOVE CHAR TO RETURN TO E HB_EI ; INTERRUPTS OK AGAIN + LD E,C ; MOVE CHAR TO RETURN TO E XOR A ; SIGNAL SUCCESS RET ; AND DONE ; diff --git a/Source/ver.inc b/Source/ver.inc index 662bddc8..d232f723 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.0" +#DEFINE BIOSVER "3.5.0-dev.1" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index c689cd49..9b9c9e66 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.0" + db "3.5.0-dev.1" endm