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,923 of 4,255    |
|    wolfgang kern to wolfgang kern    |
|    Re: COM1 interrupt for 16-bit OS    |
|    13 Nov 23 09:37:14    |
      From: nowhere@never.at              On 13/11/2023 05:16, wolfgang kern wrote:       ...       >>>>>>>> So I was doing it right. I have:              >>>>>>>> xor ax, ax       >>>>>>>> xor dx, dx       >>>>>>>> xor cx, cx       >>>>>>>>       >>>>>>>> mov al, [buffer]              I'd check here for the sync bit and reset IRQ4 variables if not.              >>>>>>>> and al, HEX (0C) get b7&6 Y into b3&2 AL       >>>>>>>>       >>>>>>>> mov dl, [buffer] get b7&6 X into b1&0 DL       >>>>>>>> and dl, HEX (03)       >>>>>>>>       >>>>>>>> mov cl, 4       >>>>>>>> shl ax, cl OK b7&6 Y are correct in AL       >>>>>>>>       >>>>>>>> mov cl, 6       >>>>>>>> shl dx, cl OK b7&6 X are correct in DL              I found my hand written notes from 1980 on Serial Mice now,       two button standard:        1200 baud, No Parity, 7(or8)bit, 1 stop bit       1st byte        7 * don't care        6 == 1 sync bit        5 Right Button Down        4 Left Button Down        3 b7 Y        2 b6 Y        1 b7 X        0 b6 X       2nd byte        7 *        6 == 0        5..0 b5..0 X        3rd byte        7 *        6 ==0        5..0 b5..0 Y        assume BX points to buffer yet       >>> mov cl, [bx + 2]               AND CL, 0x7f ;can't be sure for b7==0        ;missed to sign extend AX,AL        CBW makes AX sign extended from AL        or ax, cx OK insert low 6 bits               ADD [mouse_y],AX it does a SUB if AX is negativ               mov cl, [bx + 1]        AND CX,0x7f        MOV AL,DL        CBW        OR AX,CX        ADD [mouse_x],AX       DONE:                                          >>>>>>> I'd keep mouse positions stored in pixels and only scale down for       >>>>>>> cursor       >>>>>>> updates.       >>>>>> The following code gives weird results as well:       >>>>>>       >>>>>> timer_handler:       >>>>>>       >>>>>> mov bx, cs:[mouse_x]       >>>>>> shr bx       >>>>>> shr bx       >>>>>> shr bx       >>>>>>       >>>>>> mov cx, cs:[mouse_y]       >>>>>> shr cx       >>>>>> shr cx       >>>>>> shr cx       >>>>>> shr cx       >>>>>>       >>>>>> timer_handler.move:       >>>>>>       >>>>>> mov ah, HEX (02)       >>>>>> xor bh, bh       >>>>>> mov dh, cl       >>>>>> mov dl, bl       >>>>>> int HEX (10)       >>>       >>>>>> I've removed the shifts from the irq handler but the cursor is dodgy.       >>>>> then I assume that it is off screen, so you may not clip it correct.       >>>> Can you see anything wrong with the irq handler I sent a few       >>>> messages ago? Also, can you see anything that may be wrong in:              I'll check on the following later on ...              >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Clear interrupts while we set other up.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> cli       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; We'll use the extra segment to offset the correct positions       >>>> ;; so make sure it is zero.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> xor ax, ax       >>>> mov es, ax       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Setup INT 0Ch.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov word ptr es:[HEX (0C) * 4], offset serial_handler       >>>> mov word ptr es:[HEX (0C) * 4 + 2], cs       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Set DLAB on.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov dx, HEX (03FB)       >>>> mov al, HEX (80)       >>>> out dx, al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Set baud rate (low).       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov dx, HEX (03F8)       >>>> mov al, HEX (60)       >>>> out dx, al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Set baud rate (high).       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov dx, HEX (03F9)       >>>> xor al, al       >>>> out dx, al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; 8 bits, no parity, one stop bit.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov dx, HEX (03FB)       >>>> mov al, HEX (03)       >>>> out dx, al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; FIFO Control Register.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov dx, HEX (03FC)       >>>> mov al, HEX (0B)       >>>> out dx, al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Turn on DTR, RTS and OUT2.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov dx, HEX (03FA)       >>>> mov al, HEX (C7)       >>>> out dx, al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Interrupt when data received.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> mov dx, HEX (03F9)       >>>> mov al, HEX (01)       >>>> out dx, al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Enable interrupts on IRQ4.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> in al, HEX (21)       >>>>       >>>> and al, HEX (EF)       >>>> out HEX (21), al       >>>>       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> ;; Restore interrupts.       >>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       ;;;;;;;;;;;;;;       >>>> sti       >       >> I forgot that I was using bx when I modified the code. That's been       >> fixed but still having problems, did you see anything else wrong?              YES       __       wolfgang              --- 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