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,888 of 4,255    |
|    Robert Pengelly to wolfgang kern    |
|    Re: COM1 interrupt for 16-bit OS    |
|    11 Nov 23 16:15:06    |
      From: robertapengelly@gmail.com              On Saturday, 11 November 2023 at 23:56:50 UTC, wolfgang kern wrote:       > On 11/11/2023 18:44, Robert Pengelly wrote:        > ,,,       > > Awesome it works thanks. As for:        > >        > > and before you touch any part of the interrupt chain you should disable        > > IRQs with this single byte reserved for that, re-enable after done.        > >        > > Do you mean some like if I want to do something like:       > CLI       > mov [0x33 * 4], offset handler        > mov [0x33 * 4 + 2], segment       > ;also during write to any PIT-I/O 0x20/A0 0x21/A1        > STI       > > then I should disable the IRQ first then re-enable it after I setup the       interrupt.       > yes, this prevents IRQs in the middle of a change which would make it        > crash for sure.       > > As for the timer I'm using a handler for int 1Ch, is that bad practice or       something?       > INT 1C is a software INT called by PIC-handler, so it's fine for tests.        > But if you use it permanent your mouse is polled rather then interrupt        > driven.        >        > almost all my 16 bit IRQ-routines start with:        >        > push ax        > push ds        > in al,port ;03F8 in case of COM_1 this read releases the IRQ-pin        > mov buffer,al        > inc buffer        > cmp buffer,limit        > ja ... ;to reset count and tell received packet is complete        > cmp al,..        > jz ...        > __        > wolfgang       The INT 1Ch was just temporary until I got the interrupt working, I've now       moved the mouse stuff into INT 0Ch and it all works. Again thanks for the help       to enable interrupts. I'm not exactly sure what I want to do in INT 1C at the       moment so using it        for tests is fine for now. As for the INT 0C handler I have:              mouse_handler:               push ax        push dx                mov dx, HEX (03FD)        xor ax, ax        in al, dx        nop                test al, 0b01000000        jz mouse_handler.done                test al, 0b00000001        jz mouse_handler.done                mov dx, HEX (03F8)        xor ax, ax        in al, dx        nop                mov dx, HEX (03F8)        xor ax, ax        in al, dx        nop                mov al, 'M'        call writechr              mouse_handler.done:               mov dx, HEX (20)        mov al, HEX (20)        out dx, al                pop dx        pop ax        iret              Also, still regarding mice I also have PS/2 support using INT 15h to set       everything up and then I have:              mouse_callback:               push bp        mov bp, sp                push ax        push bx        push cx        push dx                mov al, [bp + 12]        mov bl, al        mov cl, 3        shl al, cl                sbb dh, dh        cbw                mov dl, [bp + 8]        mov al, [bp + 10]                neg dx                mov cx, cs:[mouse_y]        add dx, cx                mov cx, cs:[mouse_x]        add ax, cx                mov cs:[mouse_x], ax        mov cs:[mouse_y], dx                call writedec        mov al, ' '        call writechr        mov ax, dx        call writedec        call crlf              mouse_callback.done:               pop dx        pop cx        pop bx        pop ax        pop bp        retf              which works but I get values 0000 - FFFF from it when the screen is 80x25       initially so should I be capping the X and Y coordinates?              --- 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