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,921 of 4,255    |
|    wolfgang kern to Robert Pengelly    |
|    Re: COM1 interrupt for 16-bit OS    |
|    13 Nov 23 02:28:19    |
      From: nowhere@never.at              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              --- 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