Assembler + Graphik



  • Sers,

    ich suche _EINFACHE_ tutorial, sourcecodes etc' über graphik in assembler (VGA)
    _OHNE_ pascal mit im code, nur reines assembler (x86); wie man z.b eine einfache
    linie zeichnet, oder nen kreis, nix kompliziertes!! hier im board gibts nur mist
    zum thema graphik, 'ihr' erzählt immer nur wie man mit INTERRUPTS in den modus schaltet!



  • du musst erst einmal sagen, welchen modus du verwenden willst. schließlich wird jeder modus anders prpgrammiert und jetzt code für jeden modus zu posten hätte glaube ich keinen sinn. was linie-zeichnen und kreis-zeichnen angeht: google mal nach Bresenham-Algorithmus. das hat mit der eig. grafik/VGA-programmierung nix zu tun!

    cu todo



  • hi!

    auch hier kann ich wieder "nur" C++-code posten, der aber sehr einfach zu übersetzen ist:

    void line (int x1, int y1, int x2, int y2, int col) {

    int sx, sy, s, dx, dy, e, i;

    if (x1 == x2) {
    v_line (x1, y1, y2, col);
    return;
    }
    if (y1 == y2) {
    h_line (x1, y1, x2, col);
    return;
    }

    if ((x2 - x1) > 0) sx = 1; else sx = -1;

    dx = abs(x2 - x1);
    if ((y2 - y1) > 0) sy = 1; else sy = -1;
    dy = abs(y2 - y1);

    if (dy > dx) {
    s = 1;
    swap (x1, y1);
    swap (dx, dy);
    swap (sx, sy);
    } else s = 0;

    e = (dy << 1) - dx;
    for (i = 0; i < dx; i++) {
    if (s == 1)
    set_pixel (y1, x1, col);
    else
    set_pixel (x1, y1, col);

    while (e >= 0) {
    y1 = y1 + sy;
    e = e - 2 * dx;
    }

    x1 = x1 + sx;
    e = e + 2 * dy;

    }

    set_pixel (x2, y2, col);

    }

    das mit v-line und h-line kann wahlweise auch weggelassen werden. ansonsten handelt es sich hierbei um den oben genannten bresenham-algo

    und hier der kreis 🙂

    void circle (int x_pos, int y_pos, int r, int color) {

    int x = 0, d = 2 * (1 - r), w = (int) ((float) 7 / 3);

    while (r >= 0) {

    set_pixel (x_pos + x, y_pos + r, color);
    set_pixel (x_pos + x, y_pos - r, color);
    set_pixel (x_pos - x, y_pos + r, color);
    set_pixel (x_pos - x, y_pos - r, color);

    if ((d + r) > 0) {
    r--;
    d -= (w * r) - 1;
    }

    if (x > d) {
    x++;
    d += (x << 1) + 1;
    }

    }

    }

    cu todo



  • schau mal unter www.docjunior.de unter assembler. da findest du ein wenig was.

    Bei Fragen melden.. (habs noch nicht als html-Version, sorry)

    cYa
    DjR



  • Original erstellt von DocJunioR:
    **schau mal unter www.docjunior.de unter assembler. da findest du ein wenig was.

    Bei Fragen melden.. (habs noch nicht als html-Version, sorry)

    cYa
    DjR**

    @doc

    entweder ist in deinem tut nen bug oder mein Tasm is müll..:
    push 0a000 ; mein assembler meint das es ne illegale zahl sei..

    push 0a000h ; die mag er...


Anmelden zum Antworten