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,929 of 4,255    |
|    Robert Pengelly to wolfgang kern    |
|    Re: COM1 interrupt for 16-bit OS    |
|    13 Nov 23 01:39:28    |
      From: robertapengelly@gmail.com              On Monday, 13 November 2023 at 09:38:25 UTC, wolfgang kern wrote:       > On 13/11/2023 10:11, Robert Pengelly wrote:       > > On Monday, 13 November 2023 at 09:01:29 UTC, wolfgang kern wrote:       > >> On 13/11/2023 09:49, Robert Pengelly wrote:       > >>> On Monday, 13 November 2023 at 08:37:18 UTC, wolfgang kern wrote:       > >> ...       > >>>> 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:       > >> ...       > >>> Just as I was going to reply you sent that last message. Anyways this       seems to work:       > >>>       > >>> xor ax, ax       > >>> xor dx, dx       > >>> xor cx, cx       > >>> mov bx, offset buffer       > >>>       > >>> mov al, [bx]       > >>> and al, HEX (0C)       > >>>       > >>> mov cl, 4       > >>> shl ax, cl       > >>>       > >>> cbw       > >>>       > >>> mov cl, [bx + 2]       > >>> or ax, cx       > >>> add [mouse_y], ax       > >>>       > >>> mov al, [bx]       > >>> and al, HEX (03)       > >>>       > >>> mov cl, 6       > >>> shl ax, cl       > >>>       > >>> cbw       > >>>       > >>> mov cl, [bx + 1]       > >>> or ax, cx       > >>> add [mouse_x], ax       > >>>       > >>> but not sure if it's right or not. You did just have "CBW makes AX sign       extended from AL" so maybe the code is right.       > >> Fine so far, you rely on b7=0 in first byte which may cause errors.       > >> you could check of the first byte got a sync bit to avoid jumping mice.       > >> __       > >> wolfgang       > > I'm a little confused by :       > >       > > you rely on b7=0 in first byte which may cause errors.       > > you could check of the first byte got a sync bit to avoid jumping mice.       > >       > > You had:       > >       > > 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       > >       > > in your previous message, do you mean bit 6 (i.e. the sync bit). If you do       should I do something like:       > >       > > test al, 0x40       > > jnz .done       > >       > > before the updating code       > yes, but you can do it already in the IRQ routine.       > __       > wolfgang       >       > I posted this a few days ago:       > push ...ds,ax,bx,cx,dx       > ... ds become ptr to my data       > IN AL,port       > TEST AL,0x40       > jz skip_init       > xor bx,bx       > MOV CX,3 ;(or eight in my case)       > MOV [count],cl       > MOV [index].bx       > skip_init:       > MOV BX,[index]       > MOV [BX+buffer],AL       > INC word[index] ;or: INC BX |MOV [index],BX       > DEC byte[count]       > pop ... dx,cx,bx       > MOV AL,0x20       > out 0xA0,AL       > jnz done_it       > got_all:       > ;store/modify, update only variables, actions are done in idle queue.       > done_it:       > pop ax       > pop ds       > iret       Yeah, I have. Thanks for all the help.              --- 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