From f18727a49cfc6616629f104b32360089a75c4b49 Mon Sep 17 00:00:00 2001 From: DIvan2000 Date: Mon, 22 Sep 2025 23:25:17 +0400 Subject: [PATCH 1/5] Update main.c --- src/main.c | 80 +++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/main.c b/src/main.c index 6ecb2ac..3229526 100644 --- a/src/main.c +++ b/src/main.c @@ -3,59 +3,53 @@ #define MOUSE_PORT ((volatile u8*)0xA10003) #define Z80_HALT *((volatile u16*)0xA11100) -#define MOUSE_DELAY 32 +#define MOUSE_DELAY 16 static inline void delay(void) { - __asm__ volatile ( - "move.w %0,%%d0\n\t" - "1: subq.w #1,%%d0\n\t" - "bne.s 1b" - : - : "i"(MOUSE_DELAY) - : "d0" - ); + __asm__ volatile ( + "move.w %0,%%d0\n\t" + "1: subq.w #1,%%d0\n\t" + "bne.s 1b" + : + : "i"(MOUSE_DELAY) + : "d0" + ); } int main() { - VDP_setTextPlane(0); - VDP_drawText("Sega Mega Mouse RAW reader", 7, 27); + VDP_setTextPlane(0); + VDP_drawText("Sega Mega Mouse RAW reader", 7, 27); VDP_drawText("RAW nibbles:", 14,0); - u8 nibbles[16] = {0}; - s16 x = 0; - s16 y = 0; + u8 nibbles[16] = {0}; + s16 x = 0; + s16 y = 0; - char buf[40]; //буфер строки для вывода на экран + char buf[40]; //буфер строки для вывода на экран - while(TRUE) { - - SYS_doVBlankProcess(); - - VDP_clearTextArea(0, 1, 40, 13); - - - //опрос мыши - Z80_HALT = 0x0100; - *MOUSE_PORT = 0x60; delay(); + while(TRUE) { + //опрос мыши + Z80_HALT = 0x0100; + *MOUSE_PORT = 0x60; delay(); nibbles[0] = *MOUSE_PORT & 0x0F; - for(int i=1;i<10;i++) { - *MOUSE_PORT = (i&1)?0x20:0x00; - delay(); - nibbles[i] = *MOUSE_PORT & 0x0F; - delay(); - } + for(int i=1;i<10;i++) { + *MOUSE_PORT = (i&1)?0x20:0x00; + delay(); + nibbles[i] = *MOUSE_PORT & 0x0F; + delay(); + } - *MOUSE_PORT = 0x60; delay(); - Z80_HALT = 0x0000; + *MOUSE_PORT = 0x60; delay(); + Z80_HALT = 0x0000; //конец опроса мыши - // выводим нибблы на экран + //выводим нибблы на экран sprintf(buf, "%X%X%X%X %X %X %X%X %X%X", nibbles[0],nibbles[1],nibbles[2],nibbles[3],nibbles[4],nibbles[5],nibbles[6],nibbles[7],nibbles[8],nibbles[9]); VDP_drawText(buf, 13,1); - //считаем dx dy + //считаем dx dy s16 dx = (nibbles[6] << 4) | nibbles[7]; s16 dy = (nibbles[8] << 4) | nibbles[9]; if (nibbles[4]&8) dy = 255; @@ -65,13 +59,19 @@ int main() { x+=dx; y+=dy; + //ограничиваем x и y + x = (x > 9999) ? -9999 : (x < -9999 ? 9999 : x); + y = (y > 9999) ? -9999 : (y < -9999 ? 9999 : y); + //выводим на экран полезные данные sprintf(buf, "buttons: %c%c%c%c", (nibbles[5]&8&&1)+'0',(nibbles[5]&4&&1)+'0',(nibbles[5]&2&&1)+'0',(nibbles[5]&1&&1)+'0'); - VDP_drawText(buf, 2, 10); - sprintf(buf, "dx: %+04d dy: %+04d x: %+04d y: %+04d", dx,dy,x,y); VDP_drawText(buf, 2, 12); - - } + sprintf(buf, "dx: %+04d dy: %+04d x: %+05d y: %+05d", dx,dy,x,y); + VDP_drawText(buf, 2, 13); - return 0; + //конец кадра + VDP_waitVSync(); + } + + return 0; } From b0789a7bc8289311f89e15428d04fb086e555acc Mon Sep 17 00:00:00 2001 From: DIvan2000 Date: Tue, 23 Sep 2025 01:17:39 +0400 Subject: [PATCH 2/5] 1.1 --- SegaMouseRaw_1.1.bin | Bin 0 -> 131072 bytes res/fluttershy.png | Bin 0 -> 194 bytes src/main.c | 16 +++++++++++----- 3 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 SegaMouseRaw_1.1.bin create mode 100644 res/fluttershy.png diff --git a/SegaMouseRaw_1.1.bin b/SegaMouseRaw_1.1.bin new file mode 100644 index 0000000000000000000000000000000000000000..a27934b56fb171fd88ba3a510f6f2aa8e79b84a2 GIT binary patch literal 131072 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

Y&6pHn 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 j?vu%D*Rl86|0`kKf0r@MTWN6!&|C&jS3j3^P6 Date: Tue, 23 Sep 2025 02:57:08 +0400 Subject: [PATCH 3/5] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82=D1=8C?= =?UTF-8?q?=20SegaMouseRaw=5F1.1.bin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SegaMouseRaw_1.1.bin | Bin 131072 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 SegaMouseRaw_1.1.bin diff --git a/SegaMouseRaw_1.1.bin b/SegaMouseRaw_1.1.bin deleted file mode 100644 index a27934b56fb171fd88ba3a510f6f2aa8e79b84a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131072 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

Y&6pHn z{pm6c!Xk|eOhV@UobaI;_Q1^t2$77;2MK{i9!W$9EFuIJ`6Lk`u!s;?R4R!Gfkl`I zK(RuG1#V|?k#}3{uahEyc!LxP1QvND5h1XM5Lo1sM1;U1LSRv;Bq9VBVIlxvL6LcN z1NV6YOSpg+;WlTREn*g+{BJqSeg;pH^%9iyaXn zmT)QG<4swddKx~a@TM&BFaPwXaiXlEPSK>iRX*NRUfeF2r&o*wjz~crd&Q7)u<^IRxbRi9ga*_Pw}aLhQ?$;QqIJd;tuv-b zoh3BDK28HPM2ePVoE1n$Q2i+xk#5r(sHgC549r@%pDwBnERL&cFp5zp2r+db?K9V7 zKs|t8KB!*a{Y-sK-N62Vf;gDerw9#3V5S7};C<_WZIN!=i{g|+_^vjLRxJ5 ziEbHelU2YMz3DsC|D67Hda%O&7@8?O8VeVg^k-pFW+7VBYJxe}*i_`rd^W_q>#fe* z5aLdFGdG5q%iaoS9-eXDitPnALlx>Su=9A6`DRMp11A)!-PG zF{v#I-E-|rDGJX33d@lFVU%~sp#^;S0bXHd9IT0v{|!62AH(;5)o{NB$;lkde1<+K zX%SQ(co#Y2%4O5a0njdUKEx{g)Tv1|^Xe|of?B-it-yNI#72bWFw6DA^Io_kFR$yf zzR5QQTC{I+hXxT4vF~{_j$!FSRN{hYK z^@6Fv^b5#UX0y4gIW4yRG1M~7GR=|}JKM6*vJ|eDE!Qo|=&)8#Gd|K{rE97gA8E1D zH4T2l1RSx_HN%XLv{>mn-aOqr8~6q0XUzFJe+{ZgIdhHTs_DEU3@O=tsv+;@KNaB=(9Y(@C^xC! z(H=M8zrudoAHz>?&Gh6C&L5sXDnBcKNdEo#qw}-#hvtvSACvD3t_>CjHwDM63a$%2 z8+|g5ZoNh`+GSSw$HJFLp=OC`16BQP6!^K7@QQG9GnuI8hkJ~EjT@xzVpvt2UDKsUPs5e*S5mt3FGCrl|5p5bl=4f zANW+2GN|aB)LGYc_^xh-zNVz!W=+o3zA@7xRB84F(|UG})fi76nK3VJw7qn3CscfI zLCyxH{=S}_2X;1gw(0MRFV6lT`^zlN2+fI%lV4`<8d`XD<-1X{hZYXnR^%xeWd6eQ zM&xtB*Y-R6znS~~r!Q?v82Ezn(@ke$udbWD%QjCp;`8zGDG51i?=BdAGO|yR=fLb2 zU$J%b49SSJB^I8r?N1uFta$p2?9w7nLzFFh__mFET?wx{zs*5Kj zJ-c%*&40^i+cIO2=Ziku`hPySh#&9SGbiIECDc2!_`%vevwM8y8C1JxKxx{ids2TD z(`$q8i(Px(*gs$mv)Z2SGmVoI;!$Wx16cUJ(adociouc zIeFvs0%cFzw|>pm-kLId4y^oe}tc=8)`+2}vVTOQSAK8?dea zAHI!^oBzD*@yKrj_pOIBW;E|3MV>kx;d&lyIbFVqFd6s zN%s~`J)C$danQhCe%qSFsfCkvc3S5h{A;^b^(QpXR({7bXZwFLWNlKviMF*-Rp)l0 zvk%(TJD&OG*xJEe$0sJ;d%|{h@2si^Z3pw*H@?zjW*6>x#N&Uo7yq~|X2{D6lppRG zI==sZXD7Xv?K${l*5-MkhGKEF>$1C=&3U^Mq5^CMyK?@f8g_z^oCLI{aF{~(yc!F!8-%*^1s(_lp$?n zr0qHP7_~p^wbbP7BLhGFYLtz)9sbUC{J=VOqDH?fCwsH!kk_%|2iu0j<9ve;6x3Ah z{==F_kND@f`49Sex^>rXJmBf4NgA?c&5=*`We&~VVpA4hDSG%*lVfAy>8;%lzghZ~ z=lwzDHizoMG1rO1{F?_05C6W);Ow5B+~SXv1$Niy6E9|e*7uliTb9Y@8|3l$Mt!~{ zA!$b1qn~+U|2KeE@gS4)%m?QcH3w)>V(_LRO+y3FC4HpG7SlDmJOcu(3m&+mHj zJ8bFsStqkm($ow4Jgd8Gc)7D<(o2@7lXjRKFU{+=r(c%J^T!>NYyPNf7VB*fd9=3d+9Kc14Igi`eOzcV+J0l(nzY^gv+ewc!-u`(nOkb@ zwIS>4INRZx%l2N6l%83gwSQ{A7QLF3@DJe_M3gA20X0wy?VW^&&AZM!{_ z#{b$kw={9ryt8+GxzLr|%Fh|^c{6^U+F{!?dh6?}EqzAxDm?n4%{J`)QTJ^7U6E~S zLD5~0XSv_nW1IZYh6PW!w;kSCn|0UWtpEBi-)>v-*^PUWn(c4e3lnW`M)tIAeP}pe zIALxYKlL$}D%O@{wse_aaHvPt{SHl$uPCPsnbTg&`f~M?1Bdt9`MbP*V~Uk1I?Yv; ztsWRVsc_(xmut^vO}t~j(?9TpaDManEBD$C935m{J#gNd;`D)8J4$yKuZB&sn#lw2 zPAqvFa#I^3;~7!Lx3T`5MT%} z1Q-Gg0fqoWfFZyTUvFa#I^3;~7! zLx3T`5MT%}1Q-Gg0fqoWfFZyTUv zFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyTUvFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyTUvFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyTUvFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyT zUvFa#I^3;~7!Lx3T`5MT%}1Q-Gg t0fqoWfFZyTU Date: Tue, 23 Sep 2025 03:03:14 +0400 Subject: [PATCH 4/5] refactoring --- .gitignore | 1 + inc/mouse.h | 17 ++++++++ src/main.c | 112 ++++++++++++++++++++++++++-------------------------- src/mouse.c | 54 +++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 57 deletions(-) create mode 100644 inc/mouse.h create mode 100644 src/mouse.c diff --git a/.gitignore b/.gitignore index 89f9ac0..c301112 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ out/ +*.bin diff --git a/inc/mouse.h b/inc/mouse.h new file mode 100644 index 0000000..bf41124 --- /dev/null +++ b/inc/mouse.h @@ -0,0 +1,17 @@ +#ifndef MOUSE_H +#define MOUSE_H + +#include "genesis.h" + +typedef struct { + u8 valid; // =1 если мышь (сигнатура совпала) + u8 buttons; + s16 dx; + s16 dy; + u8 nibbles[10]; // для вывода RAW +} MouseData; + +// Чтение мыши с порта +MouseData read_mouse(volatile u8* port); + +#endif diff --git a/src/main.c b/src/main.c index 62b64fc..818433a 100644 --- a/src/main.c +++ b/src/main.c @@ -1,77 +1,75 @@ #include "genesis.h" +#include "mouse.h" -#define MOUSE_PORT ((volatile u8*)0xA10003) -#define Z80_HALT *((volatile u16*)0xA11100) - -#define MOUSE_DELAY 16 - -static inline void delay(void) { - __asm__ volatile ( - "move.w %0,%%d0\n\t" - "1: subq.w #1,%%d0\n\t" - "bne.s 1b" - : - : "i"(MOUSE_DELAY) - : "d0" - ); -} +#define PORT1 ((volatile u8*)0xA10003) +#define PORT2 ((volatile u8*)0xA10005) int main() { VDP_setTextPlane(0); VDP_drawText("Sega Mega Mouse RAW reader", 7, 27); VDP_drawText("RAW nibbles:", 14,0); - u8 nibbles[16] = {0}; - s16 x = 0; - s16 y = 0; - + + s16 x1=0,y1=0, x2=0,y2=0; u8 frame = 0; - char buf[40]; //буфер строки для вывода на экран - while(TRUE) { - //опрос мыши - Z80_HALT = 0x0100; - *MOUSE_PORT = 0x60; delay(); + while(TRUE) { + MouseData m1 = read_mouse(PORT1); + sprintf(buf, "+%X%X%X%X %X %X %X%X %X%X", + m1.nibbles[0], m1.nibbles[1], m1.nibbles[2], m1.nibbles[3], + m1.nibbles[4], m1.nibbles[5], m1.nibbles[6], m1.nibbles[7], + m1.nibbles[8], m1.nibbles[9]); + VDP_clearTextArea(1,2,1,20); + VDP_drawText(buf, 1, 2 + frame%20); - nibbles[0] = *MOUSE_PORT & 0x0F; + if(m1.valid) { + x1 += m1.dx; y1 += m1.dy; + if(x1>9999) x1=-9999; else if(x1<-9999) x1=9999; + if(y1>9999) y1=-9999; else if(y1<-9999) y1=9999; + sprintf(buf, "buttons: %c%c%c%c", + ((m1.buttons>>3)&1)+'0', + ((m1.buttons>>2)&1)+'0', + ((m1.buttons>>1)&1)+'0', + ((m1.buttons>>0)&1)+'0'); + VDP_drawText(buf, 2, 23); - for(int i=1;i<10;i++) { - *MOUSE_PORT = (i&1)?0x20:0x00; - delay(); - nibbles[i] = *MOUSE_PORT & 0x0F; - delay(); + sprintf(buf, "PORT1: dx:%+04d dy:%+04d x:%+05d y:%+05d", m1.dx,m1.dy,x1,y1); + VDP_drawText(buf, 1, 24); + } else { + VDP_clearTextArea(2,23,13,1); + sprintf(buf, "PORT1: Mouse not recognized"); + VDP_drawText(buf, 1, 24); } + + MouseData m2 = read_mouse(PORT2); + sprintf(buf, "%X%X%X%X %X %X %X%X %X%X+", + m2.nibbles[0], m2.nibbles[1], m2.nibbles[2], m2.nibbles[3], + m2.nibbles[4], m2.nibbles[5], m2.nibbles[6], m2.nibbles[7], + m2.nibbles[8], m2.nibbles[9]); + VDP_clearTextArea(38,2,1,20); + VDP_drawText(buf, 24, 2 + frame%20); - *MOUSE_PORT = 0x60; delay(); - Z80_HALT = 0x0000; - //конец опроса мыши + if(m2.valid) { + x2 += m2.dx; y2 += m2.dy; + if(x2>9999) x2=-9999; else if(x2<-9999) x2=9999; + if(y2>9999) y2=-9999; else if(y2<-9999) y2=9999; - //выводим нибблы на экран - sprintf(buf, "+%X%X%X%X %X %X %X%X %X%X", nibbles[0],nibbles[1],nibbles[2],nibbles[3],nibbles[4],nibbles[5],nibbles[6],nibbles[7],nibbles[8],nibbles[9]); - VDP_clearTextArea(12,1,1,22); - VDP_drawText(buf, 12,1+frame%22); - - //считаем dx dy - s16 dx = (nibbles[6] << 4) | nibbles[7]; - s16 dy = (nibbles[8] << 4) | nibbles[9]; - if (nibbles[4]&8) dy = 255; - if (nibbles[4]&4) dx = 255; - if (nibbles[4]&2) dy = dy|0xFF00; //sign-extend to 16-bit - if (nibbles[4]&1) dx = dx|0xFF00; - x+=dx; - y+=dy; - - //ограничиваем x и y - x = (x > 9999) ? -9999 : (x < -9999 ? 9999 : x); - y = (y > 9999) ? -9999 : (y < -9999 ? 9999 : y); - - //выводим на экран полезные данные - sprintf(buf, "buttons: %c%c%c%c", (nibbles[5]&8&&1)+'0',(nibbles[5]&4&&1)+'0',(nibbles[5]&2&&1)+'0',(nibbles[5]&1&&1)+'0'); - VDP_drawText(buf, 2, 24); - sprintf(buf, "dx: %+04d dy: %+04d x: %+05d y: %+05d", dx,dy,x,y); - VDP_drawText(buf, 2, 25); + sprintf(buf, "buttons: %c%c%c%c", + ((m2.buttons>>3)&1)+'0', + ((m2.buttons>>2)&1)+'0', + ((m2.buttons>>1)&1)+'0', + ((m2.buttons>>0)&1)+'0'); + VDP_drawText(buf, 25, 23); + sprintf(buf, "PORT2: dx:%+04d dy:%+04d x:%+05d y:%+05d", m2.dx,m2.dy,x2,y2); + VDP_drawText(buf, 1, 25); + } else { + sprintf(buf, "PORT2: Mouse not recognized"); + VDP_clearTextArea(25,23,13,1); + VDP_drawText(buf, 1, 25); + } + //счётчик кадров для вывода истории нибблов frame++; diff --git a/src/mouse.c b/src/mouse.c new file mode 100644 index 0000000..d7be0a1 --- /dev/null +++ b/src/mouse.c @@ -0,0 +1,54 @@ +#include "mouse.h" + +#define MOUSE_DELAY 16 +#define Z80_HALT *((volatile u16*)0xA11100) + +static inline void delay(void) { + __asm__ volatile ( + "move.w %0,%%d0\n\t" + "1: subq.w #1,%%d0\n\t" + "bne.s 1b" + : + : "i"(MOUSE_DELAY) + : "d0" + ); +} + +MouseData read_mouse(volatile u8* port) { + u8 nibbles[16]; + MouseData md = {0}; + + Z80_HALT = 0x0100; + *port = 0x60; delay(); + + nibbles[0] = *port & 0x0F; + for(int i=1; i<10; i++) { + *port = (i&1) ? 0x20 : 0x00; + delay(); + nibbles[i] = *port & 0x0F; + delay(); + } + + *port = 0x60; delay(); + Z80_HALT = 0x0000; + + // копируем нибблы для вывода RAW + for(int i=0;i<10;i++) md.nibbles[i] = nibbles[i]; + + // проверка сигнатуры 0BFF + if (nibbles[0]==0x0 && nibbles[1]==0xB && nibbles[2]==0xF && nibbles[3]==0xF) { + md.valid = 1; + s16 dx = (nibbles[6] << 4) | nibbles[7]; + s16 dy = (nibbles[8] << 4) | nibbles[9]; + if (nibbles[4] & 8) dy = 255; + if (nibbles[4] & 4) dx = 255; + if (nibbles[4] & 2) dy |= 0xFF00; // sign-extend + if (nibbles[4] & 1) dx |= 0xFF00; + + md.dx = dx; + md.dy = dy; + md.buttons = nibbles[5]; + } + + return md; +} From 9be2aacab0adecb76961523ca453db051e008cca Mon Sep 17 00:00:00 2001 From: DIvan2000 Date: Tue, 23 Sep 2025 03:22:24 +0400 Subject: [PATCH 5/5] structure copying removed --- inc/mouse.h | 2 +- src/main.c | 6 ++++-- src/mouse.c | 35 ++++++++++++++--------------------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/inc/mouse.h b/inc/mouse.h index bf41124..46fab17 100644 --- a/inc/mouse.h +++ b/inc/mouse.h @@ -12,6 +12,6 @@ typedef struct { } MouseData; // Чтение мыши с порта -MouseData read_mouse(volatile u8* port); +void read_mouse(MouseData* dst, volatile u8* port); #endif diff --git a/src/main.c b/src/main.c index 818433a..f64fbb4 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,8 @@ int main() { char buf[40]; //буфер строки для вывода на экран while(TRUE) { - MouseData m1 = read_mouse(PORT1); + MouseData m1; + read_mouse(&m1, PORT1); sprintf(buf, "+%X%X%X%X %X %X %X%X %X%X", m1.nibbles[0], m1.nibbles[1], m1.nibbles[2], m1.nibbles[3], m1.nibbles[4], m1.nibbles[5], m1.nibbles[6], m1.nibbles[7], @@ -42,7 +43,8 @@ int main() { VDP_drawText(buf, 1, 24); } - MouseData m2 = read_mouse(PORT2); + MouseData m2; + read_mouse(&m2, PORT2); sprintf(buf, "%X%X%X%X %X %X %X%X %X%X+", m2.nibbles[0], m2.nibbles[1], m2.nibbles[2], m2.nibbles[3], m2.nibbles[4], m2.nibbles[5], m2.nibbles[6], m2.nibbles[7], diff --git a/src/mouse.c b/src/mouse.c index d7be0a1..1420cb0 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -14,41 +14,34 @@ static inline void delay(void) { ); } -MouseData read_mouse(volatile u8* port) { - u8 nibbles[16]; - MouseData md = {0}; +void read_mouse(MouseData* dst, volatile u8* port) { + + dst->valid = 0; Z80_HALT = 0x0100; *port = 0x60; delay(); - nibbles[0] = *port & 0x0F; + dst->nibbles[0] = *port & 0x0F; for(int i=1; i<10; i++) { *port = (i&1) ? 0x20 : 0x00; delay(); - nibbles[i] = *port & 0x0F; + dst->nibbles[i] = *port & 0x0F; delay(); } *port = 0x60; delay(); Z80_HALT = 0x0000; - // копируем нибблы для вывода RAW - for(int i=0;i<10;i++) md.nibbles[i] = nibbles[i]; - // проверка сигнатуры 0BFF - if (nibbles[0]==0x0 && nibbles[1]==0xB && nibbles[2]==0xF && nibbles[3]==0xF) { - md.valid = 1; - s16 dx = (nibbles[6] << 4) | nibbles[7]; - s16 dy = (nibbles[8] << 4) | nibbles[9]; - if (nibbles[4] & 8) dy = 255; - if (nibbles[4] & 4) dx = 255; - if (nibbles[4] & 2) dy |= 0xFF00; // sign-extend - if (nibbles[4] & 1) dx |= 0xFF00; + if (dst->nibbles[0]==0x0 && dst->nibbles[1]==0xB && dst->nibbles[2]==0xF && dst->nibbles[3]==0xF) { + dst->valid = 1; + dst->dx = (dst->nibbles[6] << 4) | dst->nibbles[7]; + dst->dy = (dst->nibbles[8] << 4) | dst->nibbles[9]; + if (dst->nibbles[4] & 8) dst->dy = 255; + if (dst->nibbles[4] & 4) dst->dx = 255; + if (dst->nibbles[4] & 2) dst->dy |= 0xFF00; // sign-extend + if (dst->nibbles[4] & 1) dst->dx |= 0xFF00; - md.dx = dx; - md.dy = dy; - md.buttons = nibbles[5]; + dst->buttons = dst->nibbles[5]; } - - return md; }