EnterMice

Az EnterMice PS/2 egér és joystick illesztőt Lengyelországból Maciej Gruszecki (pear) tervezte Enterprise 64/128-as számítógéphez. Pear sokat köszönhet a spanyol GFloreznek, ő ösztönözte az EnterMice tervezésére, valamint Németh Zoltánnak (Zozo), aki az első tesztelője volt a kártyának.
Az EnterMice nagyon szép, finom egérmozgásra képes, tesztelve lett hagyományos golyós, és optikai egérrel is. Teljesen kompatibilis a BoxSoft-féle egér interface-szel, működik az eredeti, módosítás nélküli Neos egérhez használt MOUSE.XR-rel is (ld. PaintBox)! Mindkét joystickhoz van teljes értékű (azaz autofire kompatibilis) botkormány átalakító a kártyán, valamint PS/2 egér port. Beépített mikrokontroller alakítja át az egeret MSX módra, azaz a végeredmény hasonló lesz az eredeti NEOS egérhez. A különbség az, hogy kihasználva a controll port lehetőségeit, másik bemenetre lett téve az egér, így egyszerre használható a joy és az egér, valamint nem őrülnek meg a külső joyt használó programok (Például az EPDOS) az egértől. Az egér használható lesz joy módban is, ekkor átveszi a Joy 1 helyét.
Az egér akár menet közben is csatlakoztatható, ezt még a PC se tudja PS/2 porton...

Általános leírás
Ne csatlakoztassuk az interface-t, amikor a számítógép be van kapcsolva! Ha csatlakoztatás után bekapcsoláskor a számítógép nem megfelelően indul vagy szokatlanul viselkedik, azonnal ki kell kapcsolni! Ellenőrizzük, hogy az interface helyesen van-e csatlakoztatva és próbáljuk újra!
Bár az egér és a botkormányok csatlakoztathatók és kihúzhatok akkor is, amikor a számítógép be van kapcsolva, ez nem ajánlott. Biztonságosabb mindenféle csatlakoztatást kikapcsolt állapotban elvégezni. Miután a kártyát csatlakoztattuk, kapcsoljuk be a gépet! A kártya egy öntesztet hajt végre, ezt jelzi a piros és zöld led háromszori felvillanása (feltéve ha a kártyán lévő DIP-kapcsoló 3-as kapcsolója ON állásban van).
Az EnterMice kártya drivere a mouse.xr innen tölthető le.

A működési módokat a kártyán elhelyezett 5 db DIP kapcsolóval állíthatjuk:

DS1 DS2 Működési módok
ON ON EnterMice egérmód
OFF ON BoxSoft kompatibilis egérmód. Az egér bal és jobb gombja fordított állásban fog működni.
OFF OFF EnterMice joystick mód (Az egérmozgás az 1-es joystick portra van irányítva, így ez a port nem használható).
ON OFF nem használt

DS3 LED státusz
OFF LED státusz kikapcsolva
ON LED státusz bekapcsolva

DS4 Joystick emulációs mód beállítása
OFF Normál érzékenység
ON Magas érzékenység

DS5 Diagonal correction
OFF Tiltás
ON Engedélyezés

Az egérrel jelenleg használható felhasználói programok:

Az egérrel jelengeg használható játékprogramok:

Az egér driver létrehozza a mouse: nevű eszközt, melynek segítségével akár BASIC-ből is készíthetünk egérvezérelt programokat. A driver a következő rendszerváltozókat hozza létre:

180 A videocsatorna száma, melyen az egérmutató látszik. Alapértelmezése a 101 csatorna (a BASIC alapértelmezés szerint ezen a csatornán nyitja meg a grafikus videolapokat.)
181 A driver igény esetén megjeleníti a státussorban az egérmutató aktuális koordinátáit. Ez a rendszerváltozó határozza meg, a kiírás pozícióját, vagyis, hogy hányadik karaktertől kezdődjön a kiírás. Alapértelmezés: 30
182 Ha a rendszerváltozó értéke 1, az egérmutató koordinátái látszanak a státussorban, ha 0, nem. Alapértelmezés: 0, vagyis a kijelzés kikapcsolt.
183

Az egérmutató színét adja meg. Alapértelmezése: 255, de nem színkódot kell megadni. Az egyes színüzemmódokban különböző értékek adják meg, hogy a színpaletta hányadik színe legyen az egérmutató színe:

Színüzemmód renszerváltozó értéke szín
2 szín: 0 0
255 1
4 szín: 0 0
240 1
15 2
255 3
16 szín,
ATTR mód:
0 0
192 1
12 2
204 3
36 4
228 5
48 6
240 7
3 8
195 9
15 10
207 11
51 12
243 13
63 14
255 15
256 szín: 0-255 0-255
184 Az egérmutató x koordinátájának alsó byte-ját adja.
185 Az egérmutató x koordinátájának felső byte-ját adja.
186 Az egérmutató y koordinátájának alsó byte-ját adja.
187 Az egérmutató y koordinátájának felső byte-ját adja.
188 Ha az egér elsődleges gombja lenyomott állapotban van, értéke: 1, egyébként: 0.
189

Az egérmutató mozgatásának eszközét választja ki:

  • 0 - beépített botkormány (a két tűzgomb a SPACE és az ENTER),
  • 1 - EXT 1 külső botkormány,
  • 2 - EXT 2 külső botkormány (A külső botkormányokon 3 tűzgombot kezel a driver),
  • 3 - Boxsoft egér üzemmód (maximum 5 egérgombot kezel),
  • 4 - EnterMice egér üzemmód (maximum 5 egérgombot kezel),
  • 5 - Soros egér üzemmód (maximum 3 egérgombot kezel),
190 Az egér további gombjainak állapotát adja vissza. A 7. bit a második gomb, a 4. bit az ötödig gomb, a 0-3 bit a görgő állapotát adja meg. Az adott bit 1 értéke jelzi a gomb lenyomott állapotát.

A mouse: eszköz csatornájára írt vezérlő karakterekkel elérhető szolgáltatások:

Ez utóbbi funkcióval így kapjuk meg az egérmutató koordinátáit (feltételezve, hogy a mouse: eszközhöz az 1. csatorna van megnyitva):

PRINT £1:"P"
LOOK £1:XL
LOOK £1:XH
LOOK £1:YL
LOOK £1:YH
LET X=XL+256*XH
LET Y=YL+256*YH

Az egérmutató koordinátáit a rendszerváltozók használatával is lekérdezhetjük, ez azonban BASIC-ből nem üzembiztos - mert valamivel lassabb - megoldás:

ASK 184 XL
ASK 185 XH
ASK 186 YL
ASK 187 YH
LET X=(XL+256*XH)*2
LET Y=MAXY-((YL+256*YH)*2)

Ahol MAXY értéke:

Ugyanezzel az elvvel, programból is pozícionálhatjuk az egérmutatót:

LET X=INT(X/2)
LET XL=X-256*INT(X/256)
LET XH=INT(X/256)
LET Y=INT((MAX_Y-Y)/2)
LET YL=Y-256*INT(Y/256)
LET YH=INT(Y/256)
PRINT £1:"o";
SET 184,XL
SET 185,XH
SET 186,YL
SET 187,YH
PRINT £1:"O";

Példaprogram az egér használatára:

100 PROGRAM "ms_test.bas"
110 NUMERIC X,Y,LASTX,LASTY
120 LET X,Y,LASTX,LASTY=0
130 GRAPHICS HIRES 4
140 CALL MOUSE_SETUP
150 DO
160   CALL MOUSE_POS
170   LOOK £1:FIRE
180   IF FIRE THEN
190     PRINT £1:"o"; ! Pointer kikapcsolasa
200     PLOT LASTX,LASTY;X,Y
210     PRINT £1:"O"; ! Pointer bekapcsolasa
220   END IF
230   LET LASTX=X:LET LASTY=Y
240 LOOP UNTIL INKEY$=CHR$(27)
250 CLOSE £1 ! Az eger csatornajanak lezarasa befejezes elott
260 DEF MOUSE_SETUP
270   OPEN £1:"mouse:" ! Csatornanyitas az eger eszkoznek
280   SET 189,4
290   SET 180,101 ! Melyik videocsatornan legyen a pointer
300   SET 181,30  ! A koordinatak kijelzesenek pozicioja
310   SET 182,1   ! Koordinatak kijelzese a status sorban
320   SET 183,255 ! A pointer szine
330 END DEF
340 DEF MOUSE_POS ! A pointer koordinatainak lekerdezese
350   PRINT £1:"P"
360   LOOK £1:XL
370   LOOK £1:XH
380   LOOK £1:YL
390   LOOK £1:YH
400   LET X=XL+256*XH
410   LET Y=YL+256*YH
420 END DEF

A program segítségével az egér gombjának nyomva tartásával rajzolhatunk. Ha azonban "hevesebb" mozdulatokat teszünk, a BASIC lassúsága miatt a rajzolt ívek szögletessé válnak. Ezen gyorsabb programnyelv megválasztásával segíthetünk. Az egér használata Hisoft-Pascal-ból sem nehezebb:

PROGRAM mstest;
CONST CharY=20;
      v=101;
VAR x,y,maxy,lastx,lasty,f:integer;
{$F os.hpu }
{$F grafcs.hpu }
PROCEDURE Print(ch,c:char);
BEGIN
  ra:=ch;rb:=c;
  Exos(7)
END;
PROCEDURE MouseSetup;
VAR charY:integer;
BEGIN
  Poke(£15AE,Chr(6));Poke(£15AF,'mouse:');
  ra:=Chr(1);rde:=£15AE;
  Exos(1); { Csatornanyitas }
  SetVar(189,4);
  SetVar(180,v); SetVar(181,30);
  SetVar(182,1); SetVar(183,255);
  Maxy:=Chary*36-2;
END;
PROCEDURE MousePos;
VAR xl,xh,yl,yh:integer;
BEGIN
  xl:=Ask(184);xh:=Ask(185);yl:=Ask(186);yh:=Ask(187);
  x:=(xl+256*xh)*2;
  y:=MaxY-((yl+256*yh)*2)
END;
BEGIN
  GrafOn(v,1,1,40,CharY);
  Display(v,1,1,CharY);
  MouseSetup;
  REPEAT
    MousePos;
    f:=Ask(188);
    IF f=1 THEN BEGIN
      Print(Chr(1),'o');
      Draw(v,LastX,Lasty,x,y);
      Print(Chr(1),'O');
    END;
    LastX:=x;Lasty:=y
  UNTIL inch=Chr(27);
  Grafoff(1);Grafoff(v);User(£01EC)
END.

A Pascal-példában a rendszerváltozókkal kérdeztük le az egérmutató koordinátáit. Ha ezt egérkezelő csatornáján keresztül akarjuk megtenni, a program így módosul:

PROCEDURE MousePos;
VAR xl,xh,yl,yh:integer;
BEGIN
  Print(Chr(1),'P');
  xl:=Get(1);xh:=Get(1);
  yl:=Get(1);yh:=Get(1);
  x:=xl+256*xh;
  y:=yl+256*yh
END;

Ebben az esetben feleslegessé válik a MaxY változó használata.
Az egér több gombját az alábbi programrészlettel figyelhetjük:

ASK 188 A
ASK 190 B
IF (A) THEN PRINT "Main button"
IF (B BAND 128) THEN PRINT "Secondary button"
IF (B BAND 16) THEN PRINT "Middle button"
IF (B BAND 32) THEN PRINT "Fourth button"
IF (B BAND 64) THEN PRINT "Fifth button"
LET B=(B BAND 15)
IF (B BAND 8) THEN LET B=B-16
PRINT "Wheel: ";B

Az IS-BASIC JOY függvénye csak egy tűzgombot figyel a botkormányokon. Az EnterMice azonban kettőt kezel, ennek figyelésére saját függvényt kell definiálni:

100 PROGRAM "JOYFIRE2.BAS"
110 ALLOCATE 40
120 CODE FIRE=HEX$("7C,F3,D3,B5,DB,B6,FB,A5,28,04,21,00,00,C9,21,01,00,C9")
130 DO
140   LET FIRE2=USR(FIRE,4)
150   IF FIRE2 THEN PRINT "FIRE I PRESSED"
160 LOOP

Enterpress 2016 . november