Optron #14
03 июля 1998 |
|
Kempston Mouse-2 - Determine whether the mouse. Handling buttons and coordinates.
Kempston mouse (part II) (C) Rasp The last time you, dear readers, acquainted with the interface circuit Kempston mouse. Today I'll tell you what is the mouse for a programmer - how to determine its availability, how to work with buttons and coordinates. Determination of mouse Before the software to process the signals coming from the mouse, you must determine whether there is a mouse at all. There is two ways to determine whether the mouse - with using the buttons and ports on ports coordinates. Before we dive into coding, I I want to make one remark. If the computer implemented port # FF (port attributes), it can interfere with the mouse, so it is recommended to handle it ports in those moments when in port attribute value is # FF. This occurs when the display controller constructs curb. Very useful time when building the upper edge - approximately 12-14 thousand cycles after the arrival INT'a. This time is sufficient for processing coordinates and mouse buttons, a survey keyboard and play music. So how do you determine if a mouse or No? The first way. In many programs, I seen such an option of determining whether there mouse: reads the value from the port of one coordinates (does not matter which) and compared with the value of the second coordinate, if they not equal, then the mouse is. Software is can be expressed as: EI HALT; forward to ; Constructing curb LD BC, # FBDF IN L, (C); read the X coordinate LD B, # FF IN A, (C); compare with Y CP L JR Z, no, and if equal, then the mouse Nay there ..... In this way, in my opinion, there is One drawback: if you only included computer and not move the mouse, then the counters will be read the same values - # FF, and the program will think that mouse no. You should also not exclude the possibility that in the process for counters are not set to coordinate. The probability of such a coincidence - 1 / 256 (Why so much - guess yourself ;)) The second way is also found frequently as the first. Its essence is this: read the value from the port of buttons and if there is not zero, it is considered that the mouse is. Here, however, the question may arise: if what a port is not implemented, then it will be read # FF, and then, if there is no mouse interface, the program will think that he is still there. But no. In this case, will read a value from the joystick ports - # 00, since decryption and mouse and a joystick, in the absence of a mouse, using A5 bit address bus of the processor. A if there is no joystick, then let the program thinks that the mouse is - it does not stop! Because the values at the ports of the mouse does not change. Much worse, when the program thinks there is a mouse when it is in fact does not exist. At the same time begin to take values from the joystick ports for the values of any port mouse. Begin false positives FIRE button and the poor nick has no choice but to push RESET. EI; think everything is HALT; clear LD BC, # FADF IN A, (C); read port buttons OR A; and check JR NZ, no there ..... Processing buttons Port of buttons is quite simple - # FADF, and its layout is even easier: D0 - left button D1 - right button D2 - middle button If the discharge is set to "0", the button pressed. There is one more remark. Still there is no consensus about how cocoa bits belong to the left button, and what - right. While some are just such a layout, and others - quite the opposite: D0 - right button, D1 - left. Why is it so turned out I did not know. But this things very complicated life of nick: in one Playing everything is done right, and in other - the left - awkward! In addition, user can be left-handed. That such problems do not occur, intelligent uncle invented such a thing as autoconfiguration mouse buttons. The essence is simple: the first button is pressed the button of choice, and another (opposite) - the cancel button. And here is an example implementation: ; After level D4-D6 register C , Will contain information about ; What buttons are pressed ("1" - Button , Pressed ; D6 - middle button ; D5 - Cancel button ; D4 - selection button LD A, # FA; read port IN A, (# DF); buttons CPL; proinvertirovali AND 0 MICEP EQU $ -1 , In determining whether the mouse here ; Substituted # 00 if no mouse, and # FF, And if there is LD B, A AND 4; select category ; Middle button ADD A, A; pushes it into D6 ADD A, A ADD A, A ADD A, A LD C, A JR CBUT; the transition to a procedure BUT_S EQU $ -1; autoconfiguration ; Configuration procedure is invoked only And in that case, if the button is not , Pressed And define a button, procedure changes ; Bias for transition team LD A, B AND 0; here substituted M_BUT EQU $ -1; mask selection ; Discharge buttons CP 1, fill in the register CCF; A relevant SBC A, A; discharge AND # 10; select D4 OR C LD C, A; put in C LD A, B; proceed similarly with AND 0, the cancel button S_BUT EQU $ -1 CP 1 CCF SBC A, A AND # 20; in D5 OR C LD C, A NO_BUT RET; output ; Procedure autoconfig buttons CBUT LD A, B AND 3 buttons are not pressed? JR Z, NO_BUT; if so, output RRA JR NC, $ +4; discharge corresponding LD A, 0; button is pressed will RLA; mask to select LD (M_BUT), A; main buttons XOR 3, invert the mask LD (S_BUT), A; mask cancel button XOR A; change shift LD (BUT_S), A; team transition JR BUT_S +1; Returns Processing coordinates The presence of two independent eight- Counters - the greatest advantage Kempston mouse over any other. Counters at all times consider the coordinates and we can interrogate them at any time (At least ten times during an interrupt, at least once in second). In processing the coordinates proceed as follows: at the start of the driver stored coordinates mouse and for each access to it is the difference between old and new values, which, in fact, will be offset cursor on the screen, just a few counter values are substituted in place old and the cycle can be repeated. Port addresses the origin, as I mentioned, the following: # FBDF - the X, # FFDF - coordinate Y. Conclusion Well, that's all. If you take for writing a driver, then please do not forget about two important things: to check if the mouse buttons and autoconfiguration. And if you have any questions, please call: (0322) 67-60-45, Vladimir.
Other articles:
Kempston Mouse-2 - Determine whether the mouse. Handling buttons and coordinates. |
Iron - Graphic Modes. |
Iron - Maxi-perverted "in- bambasy "PowerZX. |
Contest - your tricks and tips that may be useful not only in the Spectrum, but also in the household. |
Lit. Page - Beginning of the End. Poems: Debit and Credit. |
Advertising - Advertisements and announcements ... |
four kilobytes - The new name of the group - Steel Falcons. |
Similar articles:
В этот день... 21 November