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,924 of 4,255    |
|    wolfgang kern to Robert Pengelly    |
|    Re: COM1 interrupt for 16-bit OS    |
|    13 Nov 23 05:16:14    |
      From: nowhere@never.at              On 13/11/2023 02:41, Robert Pengelly wrote:       > On Monday, 13 November 2023 at 01:28:24 UTC, wolfgang kern wrote:       >> On 13/11/2023 02:11, Robert Pengelly wrote:       >>> On Monday, 13 November 2023 at 00:56:18 UTC, wolfgang kern wrote:       >>       >>>>>>>>> Also, how do I scale down a number in assembly?       >>>>>>>> SHR 3 ;aka divide by 8       >>>>>>>> SHR 4 ;aka divide by 16       >>>>>>>> both rounds down, but who cares?       >>>>>>>>       >>>>>>>> odd divide values can perform with a combination of SHR and MUL or       even       >>>>>>>> with the famous awful slow DIV instruction.       >>>>>>> So I was doing it right. I have:       >>>>>>>       >>>>>>> xor ax, ax       >>>>>>> xor dx, dx       >>>>>>> xor cx, cx       >>>>>>>       >>>>>>> mov al, [buffer]       >>>>>>> and al, HEX (0C)       >>>>>>>       >>>>>>> mov dl, [buffer]       >>>>>>> and dl, HEX (03)       >>>>>>>       >>>>>>> mov cl, 4       >>>>>>> shl ax, cl       >>>>>>>       >>>>>>> mov cl, 6       >>>>>>> shl dx, cl       >>       >>>>>>> mov cl, [bx + 2]       >> when did you assign BX for point to buffer ??       >>>>>>> or ax, cx       >>>>>>> add ax, [mouse_y]       >>>>>>>       >>>>>>> mov cl, 4       >>>>>>> shr ax, cl       >>>>>>>       >>>>>>> mov cl, [bx + 1]       >>>>>>> or dx, cx       >>>>>>> add dx, [mouse_x]       >>>>>>>       >>>>>>> mov cl, 3       >>>>>>> shr dx, cl       >>>>>>>       >>>>>>> mov [mouse_x], dx       >>>>>>> mov [mouse_y], ax       >>>>>>>       >>>>>>> but I'm getting weird results, am I shifting in the right place?       >>       >>>>>> 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:       >>       >>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       >>> ;; 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?              I'll check on it but give me some more time, there are several layers of       dust on my memory and on the book shelf as well.       __       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