structure copying removed

This commit is contained in:
DIvan2000 2025-09-23 03:22:24 +04:00
parent d3d7da3d6b
commit 9be2aacab0
3 changed files with 19 additions and 24 deletions

View File

@ -12,6 +12,6 @@ typedef struct {
} MouseData;
// Чтение мыши с порта
MouseData read_mouse(volatile u8* port);
void read_mouse(MouseData* dst, volatile u8* port);
#endif

View File

@ -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],

View File

@ -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;
}