פורסם 2006 בנובמבר 719 שנים שלום רב,אסמבלי לדוס-אוקיי, אני יודע להפעיל את העכבר באסמבלי - mov ax,1 ו int 33h. אך מה הלאה? איפה נשמרים המיקום ומצב הכפתורים?תודה
פורסם 2006 בנובמבר 819 שנים יש לי כאן קוד ב- C, אבל אני מניח שתדע להשתמש בו בצורה נכונה גם בASM:#include <dos.h>//must defune variable: 'union REGS r;'int init_mouse(){ int86(0x33, &r, &r); return r.x.ax;}int mouse_x(){ r.x.ax=3; int86(0x33,&r,&r); return r.x.cx;}int mouse_y(){ r.x.ax=3; int86(0x33,&r,&r); return r.x.dx;}int mouse_button(){ r.x.ax=3; int86(0x33,&r,&r); return r.x.bx;}int mouse_onoff(int s){ r.x.ax=s; //1- on, 2- off int86(0x33, &r, &r);}void mouse_restrict(int x1,int y1,int x2,int y2){ r.x.ax=7; r.x.cx=x1; r.x.dx=x2; int86(0x33,&r,&r); r.x.cx=y1; r.x.dx=y2; int86(0x33,&r,&r);}void mouse_shape(int shape){ struct SREGS s; union REGS r1; int mask[][32]={ //hand 0xe1ff,0xe1ff,0xe1ff,0xe1ff,0xe1ff,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x1e00,0x1200, 0x1200,0x1200,0x13ff,0x1249,0x1249,0x1249, 0x9001,0x9001,0x9001,0x8001,0x8001,0x8001, 0xffff,0x0000, //arrow 0xffff,0xffff,0xe003,0xf003,0xf803,0xfc03, 0xfe03,0xfc03,0xf803,0xf043,0xe0e3,0xc1f3, 0x83fb,0x07ff,0x8fff,0xdfff,0x0000,0x0000, 0x1ffc,0x0804,0x0404,0x0204,0x0104,0x0204, 0x0444,0x08a4,0x1114,0x220c,0x4404,0x8800, 0x5000,0x2000, //hour glass 0x0000,0x0000,0x0000,0x0000,0x8001,0xc003, 0xf00f,0xfc3f,0xfc3f,0xf00f,0xc003,0x8001, 0x0000,0x0000,0x0000,0x0000,0xffff,0x8001, 0xffff,0x8001,0x4002,0x2004,0x1008,0x0240, 0x0240,0x0810,0x2004,0x4002,0x8001,0xffff, 0x8001,0xffff, //para 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0xffff,0xffff, 0xffff,0x0007,0x0007,0xeee7,0x0007,0x0007, 0xeee7,0x0007,0x0007,0xeee7,0x0007,0x0007, 0xeee7,0xeee7, //none 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000 }; r.x.ax=9; r.x.bx=0; r.x.cx=0; r.x.dx=(unsigned)&mask[shape]; segread(&s); s.es=s.ds; int86x(0x33,&r,&r1,&s);}אתה יכול גם לחפש בGOOGLE.ד.א. חבל שאי אפשר לצרף קבצי C ישירות(בלי לכווץ לWINZIP).
פורסם 2006 בנובמבר 819 שנים כמובן, כדאי לקרוא את X,Y ומצב הכפתורים בקריאה אחת בלבד ל-int 33.אחת הדרכים המקובלות היא להכניס handler פשוט לפסיקה של הtimer. ב-handler פשוט תקרא את המיקום הנוכחי של העכבר ואז תדחוף אותו למשתנים.עכשיו בתוכנית אתה יכול פשוט לקרוא את המשתנים האלה מתי שאתה רוצה והנה יש לך טיפול פשוט בעבר.יש כאן בעייה קטנה של סינכרון (בד"כ אתה רוצה לוודא שכל המשתנים נקראים ביחד או שהם לא יעודכנו בזמן העבודה איתם) אבל במקרה של שימוש פשוט בעכבר זה ממש לא נורא.
פורסם 2006 בנובמבר 819 שנים מחבר גדול..!יש סיכוי שתכניס לי פה כמה שורות קוד איך לכתוב handler לטיימר..? שוב תודה
פורסם 2006 בנובמבר 919 שנים עברו הרבה שנים מאז. אני מניח שאתה עובד ב-DOS או לפחות על x86 שרץ ב-real mode.זה אולי יעזור:ftp://hornet.madtracker.org/mirrors/hornet/code/hardware/keyboard/pxdtut6.zipב-SWAG יש הרבה מידע על תכנות low level, אבל הרוב בפסקל:ftp://ftp.gdsoft.com/pub/swag/allswags.zipמצד שני, אני כמעט בטוח שתמצא שם את מה שאתה מחפש.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.