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