Skip to content

Commit 3a07776

Browse files
authored
Merge pull request #71 from Martin1701/main
INT 14h, AH=2: fix port timeout
2 parents 610e664 + 96f47e0 commit 3a07776

1 file changed

Lines changed: 9 additions & 8 deletions

File tree

src/GLABIOS.ASM

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,8 @@ TURBO_TYPE = TURBO_NONE ; disable Turbo features
531531
SW1_VID = 10b ; SW1 5/6 ON/OFF Video Type CGA 80
532532
SW1_FLP = 1 ; SW1 7/8 Max # of floppy drives (0-3)
533533
; 0-based: 0=1 drive, 1=2 drives, etc
534+
POST_TEST_SEEK = 0 ; disabe floppy drive seek test
535+
CGA_SNOW_REMOVE = 0 ; disable CGA snow removal
534536
ENDIF
535537

536538
IF ARCH_TYPE EQ ARCH_EMU
@@ -6235,8 +6237,6 @@ INT_14_1 PROC
62356237
ADD DX, COM1_MCR-COM1_DATA ; DX = 3FC/2FC - Modem Control Register
62366238
MOV AL, MASK RTS OR MASK DTR ; activate DTR & RTS
62376239
OUT DX, AL ; set DTR or RTS
6238-
INC DX
6239-
INC DX ; DX = 3FE - Modem Status Register
62406240
MOV BX, DBW <MASK THRE OR MASK LBI, MASK MDSR> ; BH = line (THRE)
62416241
; BL = modem (DSR/CTS)
62426242
CALL INT_14_POLL ; poll both registers, AH = status
@@ -6267,13 +6267,12 @@ INT_14_1 ENDP
62676267
INT_14_2 PROC
62686268
PUSH DX ; save base port
62696269
ADD DX, COM1_MCR-COM1_DATA ; DX = 3FC/2FC - Modem Control Register
6270-
MOV AL, MASK DTR ; activate DTR
6271-
OUT DX, AL ; set DTR
6272-
INC DX
6273-
INC DX ; DX = 3FE/2FE - Modem Status Register
6270+
MOV AL, MASK RTS OR MASK DTR ; activate DTR & RTS
6271+
OUT DX, AL ; set DTR or RTS
62746272
MOV BX, DBW <MASK MDSR, MASK LDR> ; BH = modem (DSR), BL = line (data ready)
62756273
CALL INT_14_POLL ; poll both registers, AH = status
62766274
POP DX ; restore base port
6275+
JNZ INT_14_RW_ERR ; Jump if port timeout
62776276
AND AH, MASK LBI OR MASK LFE OR MASK LPE OR MASK LOE ; include only
62786277
; error bits in port status
62796278
IN AL, DX ; read char from buffer
@@ -6285,7 +6284,7 @@ INT_14_2 ENDP
62856284
;----------------------------------------------------------------------------;
62866285
; Input:
62876286
; DI = port index (0 based byte)
6288-
; DX = 3FE Modem Status Register
6287+
; DX = 3FC Modem Status Register
62896288
; BL = line status expected masked
62906289
; BH = modem status expected masked
62916290
; Output:
@@ -6296,6 +6295,8 @@ INT_14_2 ENDP
62966295
; Clobbers: AX, CX
62976296
;----------------------------------------------------------------------------;
62986297
INT_14_POLL PROC
6298+
INC DX
6299+
INC DX ; DX = 3FE/2FE - Modem Status Register
62996300
CALL INT_14_POLL_PORT ; first poll modem status
63006301
JNZ INT_14_POLL_RET ; jump if ZF = 0, timeout or failure occurred
63016302
XCHG BH, BL ; BH = line status
@@ -6318,7 +6319,7 @@ INT_14_POLL_LOOP:
63186319
JZ INT_14_POLL_DONE
63196320
LOOP INT_14_POLL_LOOP ; poll port 65,535 * timeout times
63206321
DEC SI ;
6321-
JNZ INT_14_POLL_LOOP ; Jump if timeout not expired
6322+
JNS INT_14_POLL_LOOP ; Jump if timeout not expired
63226323
INT_14_POLL_DONE:
63236324
POP SI
63246325
INT_14_POLL_RET:

0 commit comments

Comments
 (0)