Hallo Besucher, der Thread wurde 3,1k mal aufgerufen und enthält 6 Antworten

letzter Beitrag von Qualitäter am

Maustreiber

  • 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?

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



    So sieht es bei mir aus.


    Also einfache Dummheit kann man fast ausschließen.


    http://www.occultusactus.de/C64er/Master.tar.gz


    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:

  • 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
    *
    */




    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "ctk-mouse-arch.c"
    #include <conio.h>
    #include <dbg.h>




    #if defined(__C64__) || defined(__C128__) || defined(__CBM510__)


    /* Address of data for sprite 0 */
    #if defined(__C64__)
    # define SPRITE0_DATA 0x0340
    # define SPRITE0_PTR 0x07F8
    # define DRIVER "Maustreiber"
    #elif defined(__C128__)
    # define SPRITE0_DATA 0x0E00
    # define SPRITE0_PTR 0x07F8
    # define DRIVER "c128-1351.mou"
    #elif defined(__CBM510__)
    # define SPRITE0_DATA 0xF400
    # define SPRITE0_PTR 0xF3F8
    # define DRIVER "" /* Currently unavailable */
    #endif


    /* 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
    };


    #endif /* __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 ();


    #if 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 */
    #ifdef __CBM510__
    pokebsys ((unsigned) &VIC.spr0_color, COLOR_WHITE);
    #else
    VIC.spr0_color = COLOR_WHITE;
    #endif


    #endif


    /* 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?


    Mein Verzeichnis :schreck!:


    :blah! :winke:

  • // 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?