Maustreiber

Es gibt 6 Antworten in diesem Thema, welches 3.484 mal aufgerufen wurde. Der letzte Beitrag (1. Oktober 2006 um 11:59) ist von Qualitäter.

  • Das Mausbeispielprogramm, das zu cc65 gehört, läuft nur so weit, daß ich den Zeiger sichtbar machen kann, doch der Zeiger bleibt in der Mitte stehen.

    Der Maustreiber ist aber erreichbar auf der Diskette und ohne selben steigt das Programm auch aus, so daß es das nicht sein kann?

    Wie löst man das Problem, weil ich aktuell einen Editor schreibe?

    Bem: Am cc65 scheint es nicht zu liegen, weil ich Contiki schließlich mit Mausunterstützung compeliert bekomme, auf die Idee, den zu extrahieren, möchte ich noch nicht kommen?

    Einmal editiert, zuletzt von Qualitäter (23. September 2006 um 19:32)

  • der maustreiber der beim cc65 dabei ist hat mit dem von contiki quasi nichts gemein :)

    ansonsten sollte das demoprogram aber tun....hast du das auch auf nem richtigen c64 probiert? die emulation spinnt schonmal rum.

  • Hallo sauhund,
    nett, daß Du mir schreibst.

    Bitte melde dich an, um dieses Bild zu sehen.

    So sieht es bei mir aus.

    Also einfache Dummheit kann man fast ausschließen.

    Bitte melde dich an, um diesen Link zu sehen.

    Darunter habe ich mein aktuelles Verzeichnis reingelegt.

    Makefile - Damit wird die D64 erstellt, im Vice gleich gestartet und über
    Codenet wird die veränderte binäre Datei direkt geschickt.

    offline.cpp - Keine Angst, die original.cpp ist fast C++, nur das
    Beispielprogramm nannte ich jetzt zwischenzeitlich so zum
    Testen.

    Maustreiber - Der C64er-Maustreiber.


    Läuft die D64 bei Dir?
    Wenn das Compelieren bei Dir zu einer lauffähigen Version führt, wäre der Fehler bei mir?

    Zum Königsweg, wie benutzt man die Contiki-Mausgeschichte?

    :nixwiss: :nixwiss: :nixwiss: :nixwiss: :nixwiss: :nixwiss: :nixwiss:

    Einmal editiert, zuletzt von Qualitäter (25. September 2006 um 18:50)

  • So, das hier löst das Problem Dank Contiki-Maus-Treiber:

    /*
    * Demo program for mouse of CONTIKI usage. Will work for the C64/C128/CBM510/Atari
    * and ask the programmer of contiki for what noch all.
    *
    * Helmut Reinhard Carl Hagemeier, 26.09.2006
    *
    */


    Bitte melde dich an, um diesen Link zu sehen. <stdio.h>
    Bitte melde dich an, um diesen Link zu sehen. <stdlib.h>
    Bitte melde dich an, um diesen Link zu sehen. <string.h>
    Bitte melde dich an, um diesen Link zu sehen. "ctk-mouse-arch.c"
    Bitte melde dich an, um diesen Link zu sehen. <conio.h>
    Bitte melde dich an, um diesen Link zu sehen. <dbg.h>


    Bitte melde dich an, um diesen Link zu sehen. defined(__C64__) || defined(__C128__) || defined(__CBM510__)

    /* Address of data for sprite 0 */
    Bitte melde dich an, um diesen Link zu sehen. defined(__C64__)
    # define SPRITE0_DATA 0x0340
    # define SPRITE0_PTR 0x07F8
    # define DRIVER "Maustreiber"
    Bitte melde dich an, um diesen Link zu sehen. defined(__C128__)
    # define SPRITE0_DATA 0x0E00
    # define SPRITE0_PTR 0x07F8
    # define DRIVER "c128-1351.mou"
    Bitte melde dich an, um diesen Link zu sehen. defined(__CBM510__)
    # define SPRITE0_DATA 0xF400
    # define SPRITE0_PTR 0xF3F8
    # define DRIVER "" /* Currently unavailable */
    Bitte melde dich an, um diesen Link zu sehen.

    /* The mouse sprite (an arrow) */
    static const unsigned char MouseSprite[64] = {
    0x00, 0x00, 0x00,
    0x00, 0x00, 0x00,
    0x00, 0x00, 0x00,
    0x0F, 0xE0, 0x00,
    0x0F, 0xC0, 0x00,
    0x0F, 0x80, 0x00,
    0x0F, 0xC0, 0x00,
    0x0D, 0xE0, 0x00,
    0x08, 0xF0, 0x00,
    0x00, 0x78, 0x00,
    0x00, 0x3C, 0x00,
    0x00, 0x1E, 0x00,
    0x00, 0x0F, 0x00,
    0x00, 0x07, 0x80,
    0x00, 0x03, 0x80,
    0x00, 0x00, 0x00,
    0x00, 0x00, 0x00,
    0x00, 0x00, 0x00,
    0x00, 0x00, 0x00,
    0x00, 0x00, 0x00,
    0x00, 0x00, 0x00,
    0x00
    };

    Bitte melde dich an, um diesen Link zu sehen. /* __C64__ or __C128__ */


    static void CheckError (const char* S, unsigned char Error)
    {
    /* if (Error != MOUSE_ERR_OK) {
    printf ("%s: %s(%d)\n", S, mouse_geterrormsg (Error), Error);
    exit (EXIT_FAILURE);
    }*/
    }


    static void ShowState (unsigned char Invisible)
    /* Display cursor visibility */
    {
    gotoxy (0, 6);
    cclear (40);
    gotoxy (0, 6);
    cprintf ("Mouse cursor %svisible", Invisible? "in" : "");
    }


    int main (void)
    {
    /* struct mouse_info info;*/
    unsigned char Invisible;
    unsigned char Done;

    /* Initialize the debugger */
    DbgInit (0);

    /* Output a warning about the driver that is needed */

    /* Clear the screen, set white on black */
    bordercolor (COLOR_BLACK);
    bgcolor (COLOR_BLACK);
    textcolor (COLOR_GRAY3);
    cursor (0);
    clrscr ();

    Bitte melde dich an, um diesen Link zu sehen. defined(__C64__) || defined(__C128__) || defined(__CBM510__)
    /* Copy the sprite data */
    memcpy ((void*) SPRITE0_DATA, MouseSprite, sizeof (MouseSprite));

    /* Set the VIC sprite pointer */
    *(unsigned char*)SPRITE0_PTR = SPRITE0_DATA / 64;

    /* Set the color of sprite 0 */
    Bitte melde dich an, um diesen Link zu sehen. __CBM510__
    pokebsys ((unsigned) &VIC.spr0_color, COLOR_WHITE);
    Bitte melde dich an, um diesen Link zu sehen.
    VIC.spr0_color = COLOR_WHITE;
    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    /* Load and install the mouse driver */
    ctk_mouse_init();

    /* Print a help line */
    revers (1);
    cputsxy (0, 0, "d: debug h: hide q: quit s: show ");
    revers (0);

    /* Test loop */
    Done = 0;
    ShowState (Invisible = 1);
    while (!Done) {
    if (kbhit()) {
    switch (cgetc()) {
    case 'd':
    BREAK();
    break;
    case 'h':
    ShowState (++Invisible);
    ctk_mouse_hide ();
    break;
    case 's':
    if (Invisible) {
    ShowState (--Invisible);
    ctk_mouse_show ();
    }
    break;
    case 'q':
    Done = 1;
    break;
    }
    }

    /* Get the current mouse coordinates and button states and print them */
    // mouse_info (&info);
    gotoxy (0, 2);
    cprintf ("X = %3d", ctk_mouse_x());
    gotoxy (0, 3);
    cprintf ("Y = %3d", ctk_mouse_y());
    gotoxy (0, 4);
    cprintf ("FIRE or ONE OR BOTH BUTTONS = %3d", ctk_mouse_button ());
    /* gotoxy (0, 5);
    cprintf ("RB = %c", (info.buttons & MOUSE_BTN_RIGHT)? '1' : '0');
    */
    }

    /* Uninstall and unload the mouse driver */
    // CheckError ("mouse_unload", mouse_unload ());

    /* Say goodbye */
    clrscr ();
    cputs ("Goodbye!\r\n");

    return EXIT_SUCCESS;
    }

  • Habe jetzt die Maus in meinen Editor wie geplant eingebunden.

    Doch jetzt habe ich nur noch ein weißes Viereck als Mauszeiger, mit dem ich übrigens schon den Cursor umsetzen kann :-), aber leider weiß ich nicht, wo ich das Sprite hinkopieren muß.

    Für das Beispielprogramm habe ich, weil Sprite 0 und 1 aktiviert werden, den Sprite in Speicherblock 13 und 14 kopiert. Aber jetzt bleibt der Weiße Block sogar, kopiere ich es in 15 und 16 zusätzlich.

    Den PTR für Sprite 0 und 1 habe ich auf Block 13 gesetzt und 13 korrekt beschrieben.

    Sauhund, ich weiß, daß Du ein sehr intelligenter Mensch bist?

    Also der Fehler tritt nur dann auf, wenn ich die Maus initialisiere, nachdem ich mit dem umgewandelten Plasma.c Programm den Kaiser-Zeichensatz für die Umlaute initialisere, das nach einem umgewandelten hello-world-Programm passiert.

    Findest Du den Fehler?

    Bitte melde dich an, um diesen Link zu sehen. :schreck!:

    :blah! :winke:

  • Ja, offensichtlich stellen sich auch die Daten der Sprites mit um, wechselt man zwischen den Textbildschirmen hin und her. *unschön*

    Bleibt nur den Verschiebungsvektor herauszubekommen...

  • // Move the VIC 16K block
    block = inb (&CIA2.pra);
    outb (&CIA2.pra, (block & 0xFC) | ((SCREEN1 >> 14) ^ 0x03));

    Das hier macht mich fertig, danach stimmt zwar mein Zeichensatz, allerdings finde ich nicht heraus, wohin Sprite 0 und Sprite 1 nach diesem Befehl geschrieben werden muß.

    Wer kennt die Antwort?

    Vielleicht würde es schon helfen, wenn ich wüßte, wo danach die PTRs hinzusetzen sind. hex400 addieren klappt übrigens scheins nicht?

    Einmal editiert, zuletzt von Qualitäter (1. Oktober 2006 um 12:00)