Groups | Search | Server Info | Login | Register


Groups > comp.lang.asm.x86 > #8800

Help with COM1 serial port interrupt in x86 assembly

From Robert Pengelly <robertapengelly@gmail.com>
Newsgroups comp.lang.asm.x86
Subject Help with COM1 serial port interrupt in x86 assembly
Date 2023-11-10 22:22 -0800
Organization A noiseless patient Spider
Message-ID <0d2adfce-74d3-4aae-a0ec-786270c2deean@googlegroups.com> (permalink)

Show all headers | View raw


Do anyone know how I get the COM1 serial port interrupt to work in a 16-bit operating system?  I have the following:

        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; Disable all interrupts.
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03F9)
        xor     al,     al
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; Enable DLAB (set baud rate divisor).
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03FB)
        mov     al,     HEX (80)
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; Set divisor.
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03F8)
        mov     al,     HEX (03)                                                ; 3 (lo byte) 38400 baud.
        out     dx,     al
        
        mov     dx,     HEX (03F9)
        xor     al,     al                                                      ;   (hi byte)
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; 8 bits, no parity, one stop bit.
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03FB)
        mov     al,     HEX (03)
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; Enable FIF0, clear them, with 14-byte threshold.
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03FA)
        mov     al,     HEX (C7)
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; IRQs enabled, RTS/DSR set.
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03FC)
        mov     al,     HEX (0B)
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; Set in loopback mode, test the serial chip.
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03FC)
        mov     al,     HEX (1E)
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; Test serial chip (send byte 0xAE and check if serial
        ;; returns same byte).
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03F8)
        mov     al,     HEX (AE)
        out     dx,     al
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; Check if serial is faulty (i.e. not same byte as sent).
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03F8)
        xor     ax,     ax
        in      al,     dx
        
        cmp     al,     HEX (AE)
        jne     .bad
        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; If serial is not faulty set it in normal operation mode
        ;; (not-loopback with IRQs enabled and OUT#1 and OUT#2 bits enabled).
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        mov     dx,     HEX (03FC)
        mov     al,     HEX (0F)
        out     dx,     al

which as far as I can tell is the assembly equivalent of the example shown towards the bottom of https://wiki.osdev.org/Serial_Ports but I can't figure out how to get an interrupt working.

Back to comp.lang.asm.x86 | Previous | NextNext in thread | Find similar


Thread

Help with COM1 serial port interrupt in x86 assembly Robert Pengelly <robertapengelly@gmail.com> - 2023-11-10 22:22 -0800
  Re: Help with COM1 serial port interrupt in x86 assembly Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2023-11-12 00:30 +0000
    Re: Help with COM1 serial port interrupt in x86 assembly Borax Man <rotflol2@nospicedham.hotmail.com> - 2023-11-12 12:14 +1100
      Re: Help with COM1 serial port interrupt in x86 assembly Branimir Maksimovic <branimir.maksimovic@nospicedham.icloud.com> - 2023-11-13 03:11 +0000
        Re: Help with COM1 serial port interrupt in x86 assembly Terje Mathisen <terje.mathisen@nospicedham.tmsw.no> - 2023-11-13 16:30 +0100
          Re: Help with COM1 serial port interrupt in x86 assembly Borax Man <bob@nospicedham.zerosignal.strangled.net> - 2023-11-14 10:11 +0000

csiph-web