amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > 2.+3.Joystikknopf Signale [ - Search - New posts - Register - Login - ]

1 2 3 4 -5- 6 [ - Post reply - ]

2006-07-07, 13:55 h

Holger
Posts: 8116
User
Zitat:
Original von Ralf27:
Also wenn MaikG
code:
DEFINT a-z

genommen hat, dann sind die Integerwerte in 2Bytes codiert. Denn bei 32768 gibt es dann ein überlauf.

Das entspricht aber überhaupt nicht dem, was ich in Erinnerung habe. Meiner Erinnerung nach, definiert DEFINT ausschließlich den Datentyp für Variablen, die keinerlei Endung haben. Eine Variable, die mit & endet ist immer 4 byte integer, so wie die Endung % immer zwei byte integer und $ immer ein String ist.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-07, 14:01 h

Holger
Posts: 8116
User
Zitat:
Original von Ralf27:
Also die folgende Zeile kann ja vermutlich so nicht stimmen...
basic code:
IF DoIO&(InputIO&) THEN PRINT "Fehler4 DOIO":GOTO 1235

Also wenn ein Fehler passiert, dann wird nix mehr zurück gegeben? Und dieses Goto schmerz mir auch in denn Augen. :D Eigentlich könnte doch dieses Goto komplett verschwinden. Dann werden auch die Resourcen zurückgegeben.

Richtig, an dieser Stelle macht GOTO keinen Sinn. Und vor allem Fehler4?! Schlimm genug, daß Systemfunktionen Fehlernummern zurückgeben, die man erst mal dekodieren muß, aber seine eigene Nummer zu erfinden, an einer Stelle, an der man eh einen String-Literal im Code zu stehen hat, also ohne jede Notwendigkeit...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-07, 16:13 h

MaikG
Posts: 5172
User
>Also wenn ein Fehler passiert, dann wird nix mehr zurück gegeben?
>Und dieses Goto schmerz mir auch in denn Augen. :D Eigentlich könnte
>doch dieses Goto komplett verschwinden. Dann werden auch die
>Resourcen zurückgegeben.

Ja, ja ist ja nur ein kleiner test...


> code:
> POKEL(InputIO&+IOStdReqio_Flags%), IOF_QUICK&

>Ich kenne mich in Basic nicht mehr so aus, aber die Flags sind
>nur 1 Byte groß. Ist es da richtig POKEL zu verwenden? Ist aber
>auch egal. Wie ich inzwischen gesehen habe, kann die Zeile sowieso
>raus, weil DoIO() das Flag automatisch setzt.

IOF_Quick& steht als LONG in der exec.bc, wird also richtig sein.


War das mit dem Port Byte, mit Varptr()+3 gehts.
Naja, wiederum nicht, weil mein ursprüngliches Programm jetzt
feuer 2 und 3 nicht mehr richtig erkennt. Bei Knopf C noch
wenn man den start reinpresst, Knopf A gar nicht mehr.
Bei der Maus sind ja 0 Ohm schalter drin, beim Joypad nicht...

[ - Answer - Quote - Direct link - ]

2006-07-07, 17:05 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
IOF_Quick& steht als LONG in der exec.bc, wird also richtig sein.


NEIN.
IOF_Quick& ist eine Zahlenkonstante, ihr Wert ist 1. Deren Typ ist vollkommen irrelevant. Relevant ist der Typ des io_Flags Struktureintrags, in den Du mittels POKE reinschreibst. Und der ist byte

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-07, 17:58 h

Holger
Posts: 8116
User
So, hier ein Programm, das dem input.device sagt, daß ein Joystick am Port hängt. Man kann dann mit dem Joystick auch den Mauszeiger steuern. Es scheint auch ein Setzen auf GPCT_NOCONTROLLER zu funktionieren, allerdings habe ich jetzt noch nicht probiert, ob man ihn dann selbst reservieren kann...

Aber das könnte der richtige Weg sein.
C code:
#include <exec/types.h>
#include <devices/input.h>
#include <devices/gameport.h>

#include <clib/exec_protos.h>

#include <stdio.h>

int main(void)
{
  struct IOStdReq  *inputIO;
  struct MsgPort   *inputMP;

/*BYTE type = GPCT_NOCONTROLLER; /* keine Maus mehr vorhanden */
  BYTE type = GPCT_RELJOYSTICK; /* Joystick */

  if(inputMP = CreateMsgPort())
  {
    if(inputIO=(struct IOStdReq *)CreateExtIO(inputMP, sizeof(struct IOStdReq)))
    {
      if(!OpenDevice("input.device", 0, (struct IORequest*)inputIO, 0))
      {
        inputIO->io_Command = IND_SETMTYPE;
        inputIO->io_Data    = &type;
        inputIO->io_Length  = 1;
        DoIO((struct IORequest*)inputIO);
        if(inputIO->io_Error)
            printf("nIND_SETMTYPE failed %dn",inputIO->io_Error);
        else
        {

        /* hier machst du deine Sachen */

          type = GPCT_MOUSE; /* Besser wäre natürlich vorher alten Typ abfragen */
          inputIO->io_Command = IND_SETMTYPE;
          inputIO->io_Data    = &type;
          inputIO->io_Length  = 1;
          DoIO((struct IORequest *)inputIO);
          if(inputIO->io_Error)
              printf("n(setting back) IND_SETMTYPE failed %dn",inputIO->io_Error);
        }

        CloseDevice((struct IORequest *)inputIO);
      }
      else printf("Error: Could not open input.devicen");

      DeleteExtIO((struct IORequest *)inputIO);
    }
    else printf("Error: Could not create I/O requestn");


    DeletePort(inputMP);
  }
  else printf("Error: Could not create message portn");
}


[ - Answer - Quote - Direct link - ]

2006-07-07, 22:26 h

MaikG
Posts: 5172
User
>Aber das könnte der richtige Weg sein.

Also mit GPCT_RELJOYSTICK oder GPCT_NOCONTROLLER oder GPCT_ALLOCATED(als LONG)
gehts nicht. Ich kann den Cursor beim ersten mit dem Joystik steuern,
ich kann aber nicht die Pins von Mouseport auf 0 setzten, die sind
damit immer auf High (3,75V) egal was ich mache.

[ - Answer - Quote - Direct link - ]

2006-07-07, 23:03 h

NoImag
Posts: 1050
User
Zitat:
Original von MaikG:
War das mit dem Port Byte, mit Varptr()+3 gehts.
Naja, wiederum nicht, weil mein ursprüngliches Programm jetzt
feuer 2 und 3 nicht mehr richtig erkennt. Bei Knopf C noch
wenn man den start reinpresst, Knopf A gar nicht mehr.
Bei der Maus sind ja 0 Ohm schalter drin, beim Joypad nicht...


Kannst du das noch etwas ausführlicher erklären?

Tschüß


[ - Answer - Quote - Direct link - ]

2006-07-08, 09:29 h

MaikG
Posts: 5172
User
>Kannst du das noch etwas ausführlicher erklären?


Ich starte das Programm, die Maus ist tot. Nun starte ich mein
Programm was Eingangsseitig ja schon fertig ist, alle Signale
ausser Knopf A und C am Joypad sind Normal. A geht gar nicht,
C wenn man stark drauffrückt. Der Joypad hat solche Pads wie in
einer Fernbedienung, die haben nicht 0 Ohm, Maustasten schon.
Ich weiss jetzt nicht warum das so ist aber die Eingänge reagieren
so jetzt scheinbar nur auf fast 0 Ohm.

[ - Answer - Quote - Direct link - ]

2006-07-09, 00:41 h

NoImag
Posts: 1050
User
@MaikG:

Aber wenn du den Mausport nicht umschaltest auf Port 1, dann funktioniert es? Das macht keinen Sinn. Es ist egal, ob dein Programm oder das input.device die Pins auf digital schaltet. Der Pin für die linke Maustaste sollte überhaupt nicht betroffen sein.

Tschüß


[ - Answer - Quote - Direct link - ]

2006-07-09, 10:08 h

MaikG
Posts: 5172
User
>Aber wenn du den Mausport nicht umschaltest auf Port 1, dann
>funktioniert es?

Ja, ich meine das input.device schaltet den Pegel immer wieder
zurück, deshalb muss ich das in einem Loop reinschreiben.
Das Menü wird dann auch immer aktiviert.


>Das macht keinen Sinn. Es ist egal, ob dein Programm oder das
>input.device die Pins auf digital schaltet. Der Pin für die linke
>Maustaste sollte überhaupt nicht betroffen sein.

Ich hab jetzt nur den Ausgang für die Rechte und Mittlere Maustaste,
wie das mit der Linken geht weiss ich noch nicht.

[ - Answer - Quote - Direct link - ]

2006-07-09, 21:22 h

NoImag
Posts: 1050
User
@MaikG:

Nochmal langsam. Was funktioniert nicht, den Port 1 als Eingabe-Port zu benutzen oder den Port 0 als Ausgabe-Port zu benutzen?

Zitat:
Ich hab jetzt nur den Ausgang für die Rechte und Mittlere Maustaste,
wie das mit der Linken geht weiss ich noch nicht.


hört sich danach an, dass du den Port 0 nicht als Ausgang benutzen kannst. Habe ich dies richtig verstanden? Deine vorherige Aussage hat sich so angehört, dass du den Port 1 nicht als Eingang benutzen kannst.

Tschüß


[ - Answer - Quote - Direct link - ]

2006-07-10, 09:38 h

MaikG
Posts: 5172
User
>Nochmal langsam. Was funktioniert nicht, den Port 1 als Eingabe-Port
>zu benutzen oder den Port 0 als Ausgabe-Port zu benutzen?

Bei deinem Beispiel(Mouse<->Joy) gehen Eingangsmäßig die 2. und
3. Feuertaste nicht.
Bei Holger's Beispiel(Joy ist an Mouseport) gehen die Ausgänge
nicht(immer high),


>hört sich danach an, dass du den Port 0 nicht als Ausgang benutzen
>kannst. Habe ich dies richtig verstanden? Deine vorherige Aussage
>hat sich so angehört, dass du den Port 1 nicht als Eingang benutzen
>kannst.

Ich kann den Mausport entwender nicht als Ausgang benutzten oder
den Joyport nicht vollständig als Eingang.

[ - Answer - Quote - Direct link - ]

2006-07-10, 23:05 h

NoImag
Posts: 1050
User
@MaikG:

Dass heißt, wenn du die Maus auf Port 0 lässt (also Port 0 nicht als Ausgang benutzen kannst), dann kannst du aber Port 1 als Eingang benutzen?

Tschüß


[ - Answer - Quote - Direct link - ]

2006-07-11, 10:23 h

MaikG
Posts: 5172
User
>Dass heißt, wenn du die Maus auf Port 0 lässt (also Port 0 nicht
>als Ausgang benutzen kannst), dann kannst du aber Port 1 als
>Eingang benutzen?


Du verwirrst mich. Solange ich keine Ausgänge brauche gehen
die Eingänge vollständig. Lasse ich das input.device wie es
ist kann ich die Ausgänge in einem Loop LOW setzten, input setzt
es ständig wieder hight. Sage ich input das die Maus am Joyport
ist, gehen die 2. und 3. Taste nicht mehr am Joyport.
Sage ich input das ein Joystik am Mausport hängt und nirgens
eine Maus, gehen die Ausgänge(Mausport) gar nicht mehr auch wenn
ich diese im Loop beschreibe.

[ - Answer - Quote - Direct link - ]

2006-07-11, 18:22 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
Bei Holger's Beispiel(Joy ist an Mouseport) gehen die Ausgänge
nicht(immer high),...


Der Sinn war ja nicht, den Port abzuschalten und zu gucken, was passiert, sondern den Test zu machen, ob intuition die port-bits freigibt, damit man sie dann selber kontrollieren kann.

Ich hatte aber nicht die Zeit, das selber zu Testen, und deshalb schon mal den Stand gepostet, um den Weg aufzuzeigen.

Inzwischen hab ich den Test gemacht, Antwort: ja, wenn man intuition sagt, daß das keine Maus abgefragt werden soll, werden die Port-Bits freigegeben und können über die potgo.resource selbst belegt werden.

Hier das Programm:
C code:
#include <exec/types.h>
#include <dos/dos.h>
#include <devices/input.h>
#include <devices/gameport.h>
#include <resources/potgo.h>
#include <hardware/custom.h>

#include <clib/exec_protos.h>
#include <clib/potgo_protos.h>

#include <stdio.h>

#define OUTRY (1L<<15)
#define DATRY (1L<<14)
#define OUTRX (1L<<13)
#define DATRX (1L<<12)

#define OUTLY (1L<<11)
#define DATLY (1L<<10)
#define OUTLX (1L<< 9)
#define DATLX (1L<< 8)

struct PotgoBase *PotgoBase;
extern struct Custom custom;

int main(void)
{
  ULONG potbits;
  UWORD value;
  struct IOStdReq  *inputIO;
  struct MsgPort   *inputMP;

  BYTE type = GPCT_NOCONTROLLER;

  if(!(PotgoBase=(struct PotgoBase *)OpenResource("potgo.resource")))
  {
    printf("couldn't alloc "potgo.resource"");
    return 10;
  }

  if(inputMP = CreateMsgPort())
  {
    if(inputIO=(struct IOStdReq *)CreateExtIO(inputMP, sizeof(struct IOStdReq)))
    {
      if(!OpenDevice("input.device", 0, (struct IORequest*)inputIO, 0))
      {
        inputIO->io_Command = IND_SETMTYPE;
        inputIO->io_Data    = &type;
        inputIO->io_Length  = 1;
        DoIO((struct IORequest*)inputIO);
        if(inputIO->io_Error)
            printf("nIND_SETMTYPE failed %dn",inputIO->io_Error);
        else
        {
          potbits=AllocPotBits(OUTRY|DATRY|OUTRX|DATRX|OUTLY|DATLY|OUTLX|DATLX);

          /* Get the bits for the right and middle mouse buttons on the
           * alternate mouse port. */
          if(potbits != (OUTRY|DATRY|OUTRX|DATRX|OUTLY|DATLY|OUTLX|DATLX))
          {
            printf("Pot bits are already allocated! %lxn",potbits);
            FreePotBits(potbits);
            return 5;
          }

          /* Set all ones in the register (masked by potbits) */
          WritePotgo(0xFFFFFFFFL, potbits);

          printf("nPlug a mouse into the second port.  This program will indicate whenn");
          printf("the right or middle button (if the mouse is so equipped) is pressed.n");
          printf("Stop the program with Control-C. Press return now to begin.n");

          getchar();

          while(!(SIGBREAKF_CTRL_C & SetSignal(0L,0L)))
          /* until CTRL-C is pressed */
          {
            /* Read word at $DFF016 */
            value = custom.potinp;

            /* Show what was read (restricted to our allocated bits) */
            printf("POTINP = $%lxn",value & potbits);
          }

          FreePotBits(potbits);

          type = GPCT_MOUSE; /* Besser wäre natürlich vorher alten Typ abfragen */
          inputIO->io_Command = IND_SETMTYPE;
          inputIO->io_Data    = &type;
          inputIO->io_Length  = 1;
          DoIO((struct IORequest *)inputIO);
          if(inputIO->io_Error)
              printf("n(setting back) IND_SETMTYPE failed %dn",inputIO->io_Error);
        }

        CloseDevice((struct IORequest *)inputIO);
      }
      else printf("Error: Could not open input.devicen");

      DeleteExtIO((struct IORequest *)inputIO);
    }
    else printf("Error: Could not create I/O requestn");

    DeletePort(inputMP);
  }
  else printf("Error: Could not create message portn");
}


mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-12, 00:24 h

NoImag
Posts: 1050
User
Zitat:
Original von MaikG:
Du verwirrst mich.


Tut mir Leid, das war nicht meine Absicht. Deine Aussagen haben mich verwirrt und ich habe nur versucht, meine Verwirrung zu beseitigen. :)

Zitat:
Solange ich keine Ausgänge brauche gehen
die Eingänge vollständig. Lasse ich das input.device wie es
ist kann ich die Ausgänge in einem Loop LOW setzten, input setzt
es ständig wieder hight. Sage ich input das die Maus am Joyport
ist, gehen die 2. und 3. Taste nicht mehr am Joyport.
Sage ich input das ein Joystik am Mausport hängt und nirgens
eine Maus, gehen die Ausgänge(Mausport) gar nicht mehr auch wenn
ich diese im Loop beschreibe.


Ok, die Situation ist mir nun klar, glaube ich. Aber ich verstehe nicht was da passiert. Mit Holgers Beispiel sollte aber das Problem ja jetzt gelöst sein.

Tschüß


[ - Answer - Quote - Direct link - ]

2006-07-12, 18:13 h

MaikG
Posts: 5172
User
Okay, geht soweit aber wie kann ich das einzeln machen?

> /* Set all ones in the register (masked by potbits) */
> WritePotgo(0xFFFFFFFFL, potbits);


Also nur Taste 2 oder nur Taste 3, diese F's sind etwas undurchsichtig.

[ - Answer - Quote - Direct link - ]

2006-07-12, 18:32 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
> WritePotgo(0xFFFFFFFFL, potbits);
Also nur Taste 2 oder nur Taste 3, diese F's sind etwas undurchsichtig.


Benutz einfach die Konstanten:

#define OUTRY (1L<<15)
#define DATRY (1L<<14)
#define OUTRX (1L<<13)
#define DATRX (1L<<12)

#define OUTLY (1L<<11)
#define DATLY (1L<<10)
#define OUTLX (1L<< 9)
#define DATLX (1L<< 8 )

Dabei kannst Du mit dem 2. Parameter bestimmen, welche Bits Du verändern willst, also
WritePotgo(OUTRY|OUTRX, OUTRY|OUTRX);
setzt beide Bits des einen Ports auf Ausgang, ohne den anderen Port oder die Datenbits zu beeinflussen. Mit
WritePotgo(0, OUTRY|OUTRX);
löschst Du sie dann. Entsprechend kanns Du sie auch kombinieren, wenn Du z.B. Taste 2 und Taste 3 des einen Ports auf Ausgang und gleichzeitig die des anderen auf Eingang setzen willst:
WritePotgo(OUTRY|OUTRX, OUTRY|OUTRX|OUTLY|OUTLX);

Genauso kannst Du natürlich auch die Datenbits setzen, ohne den In/Out Status zu verändern:
WritePotgo(DATRY, DATRY);//setzt nur dieses eine Bit und läßt alle anderen in Ruhe


Genug verwirrt? :rotate:

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-12, 21:02 h

MaikG
Posts: 5172
User
>Genug verwirrt?

Bei der Hitze sowieso, ich sitz grade 2 Stunden an dem 1.Knopf:

POKEB &hBFE201 ,(PEEKB(&hBFE201) AND &b10000000) OR &b10000000
1 k$=INKEY$
IF k$=CHR$(27) THEN END
IF k$="s" THEN POKE &hBFE001, (PEEK(&hBFE001) AND 128) OR &b10000000
IF k$="u" THEN POKE &hBFE001 ,(PEEK(&hBFE001) AND 128) OR &b00000000
GOTO 1

Ich glaub das mit den Maskieren hab ich noch nicht richtig kapiert.
Auf Ausgang wird wohl gesetzt, ist dann High und lässt sich
nicht verändern.
Ist jetzt erstmal für den Joystikknopf, weil ohne Maus Programmierts sich
schlecht.

[ - Answer - Quote - Direct link - ]

2006-07-13, 13:07 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
Ich glaub das mit den Maskieren hab ich noch nicht richtig kapiert.


Scheint so.
Wenn Du ein Bit ändern und den Rest unangetastet lassen willst, lautet die Anweisung:
basic code:
VAL=1<<BitNo
IF set POKEx ADR, PEEKx(ADR) OR VAL     : REM set
ELSE   POKEx ADR, PEEKx(ADR) AND NOT VAL: REM clear

oder
basic code:
VAL=1<<BitNo
MASK=NOT VAL
IF NOT set VAL=0 :REM clear
POKEx ADR, (PEEKx(ADR) AND MASK) OR VAL : REM change, either set or clear

x mußt Du durch die jeweils richtige Breite ersetzen, B, W, L...

Lies Dir mal die Binärarithmetik an, ohne deren Verständnis wird es für Dich immer ein Rumprobieren bleiben.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-13, 15:12 h

MaikG
Posts: 5172
User
>Lies Dir mal die Binärarithmetik an, ohne deren Verständnis wird es
>für Dich immer ein Rumprobieren bleiben.

Also Binär->Dec->HEX kann ich besser als mein Lehrer damals...
Ist vielleicht eher das Shiften und AND OR XOR.
Oder der Kaliummangel :-)

[ - Answer - Quote - Direct link - ]

2006-07-13, 18:49 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
Also Binär->Dec->HEX kann ich besser als mein Lehrer damals...
Ist vielleicht eher das Shiften und AND OR XOR.
Oder der Kaliummangel :-)

Shiften, and, or, xor ist Binärarithmetik.
Das andere sind blos Konvertierungen. Die man ohne Not nicht von Hand macht, weil das ja der Compiler für einen erledigt. Ich hab das Gefühl, Dein Lehrer hat die falschen Schwerpunkte gesetzt...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-13, 23:23 h

platon42
Posts: 400
[Former member]
Zitat:
Original von Holger:
C code:
potbits=AllocPotBits(OUTRY|DATRY|OUTRX|DATRX|OUTLY|DATLY|OUTLX|DATLX);



Kurz eine Stimme aus dem Off, da ich gerade selber mit den Potgo-Registern herumexperimentiere (ICSP Programmierer für nen PIC18Fxxxx): Laut Autodocs soll man OUTRX/OUTRY/OUTLX/OUTLY *nur* dann anfordern, wenn man die Ports *ausschließlich* als Ausgang nutzt und *nicht* davon lesen will.

Was mir auch aufgefallen ist: Der Amiga ist wirklich total genial designt :-) Habe gestern herausgefunden, dass der angeblich nicht verwendete Barrelshifter von CIAB (CIAA verwendet ihn für die Tastatur) an die Parallel-Port Leitungen PaperOut und PrinterBusy gelegt ist *und* dass man den Port nicht nur als Eingang nutzen kann, sondern auch als Ausgang, wobei dann der CIAB-Timer den Takt vorgibt. Ich denke mal, wenn Dirk Conrad das gewusst hätte, dann würde der MAS Player heute eine etwas andere Pinbelegung verwenden und wäre nicht ganz so ineffizient von der Datenübertragung her...

--
--
Best Regards

Chris Hodges

[ - Answer - Quote - Direct link - ]

2006-07-14, 07:52 h

MaikG
Posts: 5172
User
>Shiften, and, or, xor ist Binärarithmetik.
>Das andere sind blos Konvertierungen. Die man ohne Not nicht von
>Hand macht, weil das ja der Compiler für einen erledigt.
>Ich hab das Gefühl, Dein Lehrer hat die falschen Schwerpunkte
>gesetzt...

10 Klasse Mathe, das war kein Studium.

[ - Answer - Quote - Direct link - ]

2006-07-14, 11:54 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
10 Klasse Mathe, das war kein Studium.


Hab ich jetzt auch nicht angenommen, aber Konvertierungen zwischen den Zahlensystemen hatten ihr ja, so klang es zumindest. Da wären Binäroperationen sinnvoller gewesen, aber gut, was weiß ich, was heutzutage in den Lehrplänen steht, gibt's da wenigstens Informatik bei 10 Klassen?

Iss aber auch egal, Du weißt ja jetzt, was Du jetzt an Wissen brauchst, und Dir irgendwie aneignen solltest.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-14, 17:54 h

MaikG
Posts: 5172
User
>Hab ich jetzt auch nicht angenommen, aber Konvertierungen zwischen
>den Zahlensystemen hatten ihr ja, so klang es zumindest.


Wir hatten umwandeln von Binär in Dezimal, mehr nicht. Und das
kann ich auch, bereits vorher schon.

>Da wären Binäroperationen sinnvoller gewesen, aber gut, was weiß
>ich, was heutzutage in den Lehrplänen steht, gibt's da wenigstens
>Informatik bei 10 Klassen?

An einer Gesamtschule ja, 7.-10. mit entsprechender Wahl des
Faches. An einem Gymnasium das ich kenne gibts von 7.-9. kein
Informatik.

>Iss aber auch egal, Du weißt ja jetzt, was Du jetzt an Wissen
>brauchst, und Dir irgendwie aneignen solltest.


Jepp, ich denke das müsste jetzt alles Funktionieren, vielen
dank an alle!

[ - Answer - Quote - Direct link - ]

2006-07-17, 10:58 h

MaikG
Posts: 5172
User
Zu früh gefreut das wiederherstellen der Mausfunktion verursacht
einen Enforcer Hit:

also


type&=GPCT_MOUSE&
POKEW(InputIO&+IORequestio_Command%), IND_SETMTYPE&
POKEL(InputIO&+IOStdReqio_Data%), VARPTR(type&)+3
POKEL(InputIO&+IOStdReqio_Length%),1&
POKEB(InputIO&+IOStdReqio_Flags%), IOF_QUICK&
IF DoIO&(InputIO&) THEN PRINT "Fehler4 DOIO"

IF deviceI&=0 THEN CloseDevice InputIO&:PRINT "Device geschlossen"

Nicht anders als bei NOCONTROLLER, klammer ich die ersten 6 Zeilen
aus kommt kein Hit. "Device geschlossen" sehe ich nicht mehr bevor
das Programm sich aufhängt.

[ - Answer - Quote - Direct link - ]

2006-07-17, 14:17 h

Holger
Posts: 8116
User
@MaikG:
So kann man ja nur raten. Zeigt denn InputIO& auch wirklich auf einen angeforderten Speicherbereich der richtigen Größe?

Stimmen die Offsets? Die Namen sind sehr ungewöhnlich, na ja und in Basic eine Variable nicht existiert, wird flugs den neue Variable mit dem Wert 0 erzeugt und das dürfte bei poke nicht so gut sein...

Ansonsten mußt Du schon mehr als diese paar Zeilen zeigen...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2006-07-17, 18:01 h

MaikG
Posts: 5172
User
>@MaikG:
>So kann man ja nur raten. Zeigt denn InputIO& auch wirklich auf
>einen angeforderten Speicherbereich der richtigen Größe?

InputIO& ist so wie es früher war, wo die Maus abgeschaltet
wurde, wie in deinem Beispiel.

>Stimmen die Offsets? Die Namen sind sehr ungewöhnlich, na ja und
>in Basic eine Variable nicht existiert, wird flugs den neue
>Variable mit dem Wert 0 erzeugt und das dürfte bei poke nicht so
>gut sein...

Na weiter oben im Programm geht es ja, mit den gleichen offsets,
die sehen unter Basic etwas anders aus, bei C definiert man
ja die größe einer Variablen am Anfang bei Basic ist das halt
mit &, %, ! usw.


>Ansonsten mußt Du schon mehr als diese paar Zeilen zeigen...

Hier ist der Anfang:

type&=GPCT_NOCONTROLLER&
portI& = CreatePort&(NULL&, NULL&)
IF portI& THEN
InputIO&=CreateExtIO&(port&,IOStdReq_sizeof%)
IF InputIO& THEN
deviceI& = OpenDevice&(SADD("input.device" + CHR$(0)), NULL&, InputIO&, NULL&)
IF deviceI&=0 THEN
POKEW(InputIO&+IORequestio_Command%), IND_SETMTYPE&
POKEL(InputIO&+IOStdReqio_Data%), VARPTR(type&)+3
POKEL(InputIO&+IOStdReqio_Length%),1&
IF DoIO&(InputIO&) THEN PRINT "Fehler4 DOIO"
ELSE PRINT "can't open input.device"
END IF


Librarys etc. sind geöffnet und Ports etc. wird nach dem Maus aktivieren
wieder geschlossen.
Ansonsten ist da noch mein Programm, was aber andere Variablen verwendet,
deswegen PortI& statt Port&.
Kann es sein das man das man extra nochmal einen Port, CreateExtIO& und
OpenDevice machen muss? Ich hab gestern im halbschlaf in den
NDK gelesen das man irgendeine Struktur nicht wiederverwenden darf.

[ - Answer - Quote - Direct link - ]

2006-07-17, 19:27 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
Na weiter oben im Programm geht es ja, mit den gleichen offsets,
die sehen unter Basic etwas anders aus, bei C definiert man
ja die größe einer Variablen am Anfang bei Basic ist das halt
mit &, %, ! usw.

Geht ja nicht um die Größe der Variablen, sondern um deren Inhalt. Basic warnt Dich ja nicht, wenn es die Variable nicht gibt, sondern erzeugt eine neue.

z.B.
POKEW(InputIO&+IORequestio_Command%), IND_SETMTYPE&

Gibt es wirklich IND_SETMTYPE& ?
Die anderen Variablen sind alle zwei-byte Integer und ausgerechnet da, wo wirklich zwei byte Integer benötigt wird, ist die Konstante plötzlich vier bytes?

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]


1 2 3 4 -5- 6 [ - Post reply - ]


amiga-news.de Forum > Programmierung > 2.+3.Joystikknopf Signale [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.