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,892 of 4,255    |
|    wolfgang kern to Robert Pengelly    |
|    Re: COM1 interrupt for 16-bit OS    |
|    12 Nov 23 02:14:17    |
      From: nowhere@never.at              On 12/11/2023 01:15, Robert Pengelly wrote:       > 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 ;this isn't required       > in al, dx       > nop ;NOPs wont delay       >       > mov dx, HEX (03F8) ;DX didn't change       > 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              how about a shorter variant: MOV AL,0x20 OUT AL,[0x20]              > pop dx       > pop ax       > iret              you could imply button recognition here.                     > 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?              yes the mouse send only delta X/Y coordinates w/o knowing screen limits,       so it's on you to scale and clip to the current screen mode.       __       wolfgang       btw: I don't like your awful slow detouring HLL-styled mouse callback.              --- 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