home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   alt.os.development      Operating system development chatter      4,255 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 3,879 of 4,255   
   Robert Pengelly to wolfgang kern   
   Re: COM1 interrupt for 16-bit OS (1/3)   
   10 Nov 23 23:57:35   
   
   From: robertapengelly@gmail.com   
      
   On Saturday, 11 November 2023 at 07:50:06 UTC, wolfgang kern wrote:   
   > On 11/11/2023 07:39, Robert Pengelly wrote:    
   > > On Saturday, 11 November 2023 at 06:32:35 UTC, wolfgang kern wrote:    
   > >> On 10/11/2023 17:50, Robert Pengelly wrote:    
   > >>> Does anyone know how I get IRQ4 INT 0Ch working for a 16-bit OS? On   
   https://wiki.osdev.org/Interrupts it has "8-15 Default mapping of IRQ0-7 by   
   the BIOS at bootstrap", Is that only for 32-bit or is it for both 32 and 16   
   bit? Do I need to manipulate    
   things to get IRQ4 INT 0Ch working for 16-bit?    
   > >> old 16 bit hardware had jumpers on COM/LPT add-on boards for setup IRQ-    
   > >> number and CS aka I/O address.    
   > >> modern stuff have this all emulated in the south-bridge (in the chip-set    
   > >> on main board) and may or may not allow modification of their defaults.    
   > >>    
   > >> how much do you already know about IRQ-redirection ?    
   > >>    
   > >> it depends on your hardware if you need to modify anything.    
   > >>    
   > >> and what are you trying to achieve with IRQ4 ?    
   > >> is there any COM-port connected to it at all ? my PC don't have any.    
   > >> __    
   > >> wolfgang    
   > >    
   > >> and what are you trying to achieve with IRQ4 ?    
   > > I'm trying to figure out how to get data from a serial mouse as most of   
   the roms in pcem and 86box don't have a PS/2 option.    
   > >    
   > > I have:    
   > >    
   > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
   > > ;; 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 .setup_interrupts    
   > >    
   > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
   > > ;; 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 I got from towards the bottom of https://wiki.osdev.org/Serial_Ports   
   and converted it to assembly. That code works I'm getting 0xAE but I can't   
   seem to read data from the mouse and I can't get an interrupt to work.   
   > getting AE from previously written port may not mean much :)    
   > are you sure the mouse is connected to COM_1 and set to IRQ_4 ?    
   > how does your IRQ-routine work ?    
   > __    
   > wolfgang    
   >    
   > here some info from my RBIL-copy on port 03F8:    
   >    
   > PORT 03F8-03FF - Serial port (8250,8250A,8251,16450,16550,16550A,etc.) COM1    
   > Range: PORT 02E8h-02EFh (COM2), PORT 02F8h-02FFh (typical non-PS/2    
   > COM3), and    
   > PORT 03E8h-03EFh (typical non-PS/2 COM4)    
   > Note: chips overview:    
   > 8250 original PC, specified up to 56Kbd, but mostly runs    
   > only 9600Bd, no scratchregister, bug: sometimes shots    
   > ints without reasons    
   > 8250A, 16450, 16C451: ATs, most chips run up to 115KBd,    
   > no bug: shots no causeless ints    
   > 8250B: PC,XT,AT, pseudo bug: shots one causeless int for    
   > compatibility with 8250, runs up to 56KBd    
   > 16550, 16550N, 16550V: early PS/2, FIFO bugs    
   > 16550A,16550AF,16550AFN,16550C,16C551,16C552: PS/2, FIFO ok    
   > 82510: laptops & industry, multi emulation mode    
   > (default=16450), special-FIFO.    
   > 8251: completely different synchronous SIO chip, not compatible!    
   > SeeAlso: INT 14/AH=00h"SERIAL"    
   >    
   > 03F8 -W serial port, transmitter holding register (THR), which    
   > contains the    
   > character to be sent. Bit 0 is sent first.    
   > bit 7-0 data bits when DLAB=0 (Divisor Latch Access Bit)    
   > 03F8 R- receiver buffer register (RBR), which contains the received    
   > character. Bit 0 is received first    
   > bit 7-0 data bits when DLAB=0 (Divisor Latch Access Bit)    
   > 03F8 RW divisor latch low byte (DLL) when DLAB=1 (see #P0876)    
   > 03F9 RW divisor latch high byte (DLM) when DLAB=1 (see #P0876)    
   > 03F9 RW interrupt enable register (IER) when DLAB=0 (see #P0877)    
   > 03FA R- interrupt identification register (see #P0878)    
   > Information about a pending interrupt is stored here. When the ID    
   > register is addressed, thehighest priority interrupt is held, and    
   > no other interrupts are acknowledged until the CPU services that    
   > interrupt.    
      
   [continued in next message]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca