Aufgabenstellung: Flying Donuts
Übersetzung des folgenden Pascal Programms nach Assembler

Nachfolgend zu der Assembler "Vorlesung" Hardware und VGA Programmierung stelle ich Euch hier die dazugehörige Aufgabenstellung. Das Programm habe ich spaßeshalber Flying Donuts genannt, da die darzustellenden Sprites bei mir ein wenig den Appetit angeregt hatten. Praktisch gesehen liegt es an Euch, das nachfolgende Pascal möglichst originalgetreu in Assembler zu übersetzten. Bevor es allerdings zum großen "Rumgestöhne" kommt, bezüglich der Umsetzung der Pixel Daten für das Sprite, habe ich Euch noch ein kleines Rahmenskelett für das Assembler Programm erstellt, an dessen Aufbau ihr Euch halten solltet (nicht im gezwungenen Sinne ;)...

Das Pascal Programm:

program Flying_Donuts;

Const Bilddaten : array[1..48*48] of byte = (

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02,05,07,08,08,08,08,07,05,02,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01,
06,08,011,012,013,013,013,013,013,013,013,013,012,011,08,06,01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011,013,014,015,016,016,016,016,016,016,016,016,016,016,015,014,013,
011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011,013,014,
015,016,017,017,017,017,017,017,017,017,017,017,017,017,016,015,014,013,011,09,04,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,07,010,011,013,015,016,016,016,016,016,016,016,016,015,015,016,016,016,016,016,016,016,
016,015,013,011,010,07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,04,08,011,012,014,015,015,016,
015,015,014,014,013,013,013,013,013,013,013,013,014,014,015,015,016,015,015,014,012,011,08,04,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,04,09,011,012,013,014,014,014,014,013,013,012,012,012,011,011,011,011,011,011,012,012,012,013,013,
014,014,014,014,013,012,011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,010,011,012,013,014,013,013,013,
012,011,011,010,010,010,010,09,09,010,010,010,010,011,011,012,013,013,013,014,013,012,011,010,08,05,0,0,0,0,0,0,
0,0,0,0,0,02,09,010,011,012,013,013,013,012,012,011,011,010,010,09,09,09,09,09,09,09,09,09,09,010,010,011,
011,012,012,013,013,013,012,011,010,09,02,0,0,0,0,0,0,0,0,0,01,07,010,011,012,012,012,012,012,011,011,011,
010,010,09,09,010,011,011,012,012,011,011,010,09,09,010,010,011,011,011,012,012,012,012,012,011,010,07,01,0,0,0,0,
0,0,0,0,06,09,010,011,011,012,012,012,011,011,010,010,09,09,010,012,014,016,016,017,017,016,016,014,012,010,09,09,
010,010,011,011,012,012,012,011,011,010,09,06,0,0,0,0,0,0,0,01,08,09,010,011,012,012,012,011,011,010,09,09,
09,09,012,015,017,018,017,017,017,017,018,017,015,012,09,09,09,09,010,011,011,012,012,012,011,010,09,08,01,0,0,0,
0,0,0,07,09,010,011,011,011,011,011,011,010,010,09,09,010,013,016,016,014,012,09,08,08,09,012,014,016,016,013,010,
09,09,010,010,011,011,011,011,011,011,010,09,07,0,0,0,0,0,01,07,09,010,011,011,011,011,011,011,010,09,09,09,
013,015,014,010,05,02,0,0,0,0,02,05,010,014,015,013,09,09,09,010,011,011,011,011,011,011,010,09,07,01,0,0,
0,0,06,08,09,010,011,011,011,011,011,010,09,09,09,012,014,012,05,0,0,0,0,0,0,0,0,0,0,05,012,014,
012,09,09,09,010,011,011,011,011,011,010,09,08,06,0,0,0,0,07,09,010,010,011,011,011,011,011,010,09,08,09,012,
09,03,0,0,0,0,0,0,0,0,0,0,0,0,03,09,012,09,08,09,010,011,011,011,011,011,010,010,09,07,0,0,
0,0,08,09,010,010,011,011,011,011,010,010,08,08,010,09,03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,03,
09,010,08,08,010,010,011,011,011,011,010,010,09,08,0,0,0,03,08,09,010,010,011,011,011,010,010,09,08,08,08,05,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,08,08,09,010,010,011,011,011,010,010,09,08,03,0,
0,05,08,09,09,010,010,011,011,010,010,09,08,08,06,01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
01,06,08,08,09,010,010,011,011,010,010,09,09,08,05,0,0,05,08,09,09,010,010,011,011,010,010,09,08,07,03,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,03,07,08,09,010,010,011,011,010,010,09,09,08,05,0,
0,05,08,09,09,010,010,011,010,010,010,09,08,06,02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,02,06,08,09,010,010,010,011,010,010,09,09,08,05,0,01,06,08,09,09,010,010,011,010,010,010,09,08,05,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,09,010,010,010,011,010,010,09,09,08,06,01,
01,06,08,09,09,010,010,011,011,011,010,09,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,05,08,09,010,011,011,011,010,010,09,09,08,06,01,02,06,08,09,09,010,010,011,011,010,010,09,08,06,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,06,08,09,010,010,011,011,010,010,09,09,08,06,02,
02,06,08,09,09,010,010,011,011,010,010,09,08,06,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,06,08,09,010,010,011,011,010,010,09,09,08,06,02,01,06,08,09,09,010,010,011,011,011,010,09,08,05,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,09,010,011,011,011,010,010,09,09,08,06,01,
01,06,08,09,09,010,010,011,010,010,010,09,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,05,08,09,010,010,010,011,010,010,09,09,08,06,01,0,05,08,09,09,010,010,011,010,010,010,09,08,06,02,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02,06,08,09,010,010,010,011,010,010,09,09,08,05,0,
0,05,08,09,09,010,010,011,011,010,010,09,08,07,03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,03,07,08,09,010,010,011,011,010,010,09,09,08,05,0,0,05,08,09,09,010,010,011,011,010,010,09,08,08,06,01,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01,06,08,08,09,010,010,011,011,010,010,09,09,08,05,0,
0,03,08,09,010,010,011,011,011,010,010,09,08,08,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
05,08,08,08,09,010,010,011,011,011,010,010,09,08,03,0,0,0,08,09,010,010,011,011,011,011,010,010,08,08,010,09,
03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,03,09,010,08,08,010,010,011,011,011,011,010,010,09,08,0,0,
0,0,07,09,010,010,011,011,011,011,011,010,09,08,09,012,09,03,0,0,0,0,0,0,0,0,0,0,0,0,03,09,
012,09,08,09,010,011,011,011,011,011,010,010,09,07,0,0,0,0,06,08,09,010,011,011,011,011,011,010,09,09,09,012,
014,012,05,0,0,0,0,0,0,0,0,0,0,05,012,014,012,09,09,09,010,011,011,011,011,011,010,09,08,06,0,0,
0,0,01,07,09,010,011,011,011,011,011,011,010,09,09,09,013,015,014,09,05,02,0,0,0,0,02,05,09,014,015,013,
09,09,09,010,011,011,011,011,011,011,010,09,07,01,0,0,0,0,0,07,09,010,011,011,011,011,011,011,010,010,09,09,
010,013,016,016,014,012,09,08,08,09,012,014,016,016,013,010,09,09,010,010,011,011,011,011,011,011,010,09,07,0,0,0,
0,0,0,01,08,09,010,011,012,012,012,011,011,010,09,09,09,09,012,015,017,018,017,017,017,017,018,017,015,012,09,09,
09,09,010,011,011,012,012,012,011,010,09,08,01,0,0,0,0,0,0,0,06,09,010,011,011,012,012,012,011,011,010,010,
09,09,010,012,014,016,016,017,017,016,016,014,012,010,09,09,010,010,011,011,012,012,012,011,011,010,09,06,0,0,0,0,
0,0,0,0,01,07,010,011,012,012,012,012,012,011,011,011,010,010,09,09,010,011,011,012,012,011,011,010,09,09,010,010,
011,011,011,012,012,012,012,012,011,010,07,01,0,0,0,0,0,0,0,0,0,02,09,010,011,012,013,013,013,012,012,011,
011,010,010,09,09,09,09,09,09,09,09,09,09,010,010,011,011,012,012,013,013,013,012,011,010,09,02,0,0,0,0,0,
0,0,0,0,0,0,05,08,010,011,012,013,014,013,013,013,012,011,011,010,010,010,010,09,09,010,010,010,010,011,011,012,
013,013,013,014,013,012,011,010,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011,012,013,014,014,014,014,
013,013,012,012,012,011,011,011,011,011,011,012,012,012,013,013,014,014,014,014,013,012,011,09,04,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,04,08,011,012,014,015,015,016,015,015,014,014,013,013,013,013,013,013,013,013,014,014,015,015,
016,015,015,014,012,011,08,04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,07,010,011,013,015,016,
016,016,016,016,016,016,016,015,015,016,016,016,016,016,016,016,016,015,013,011,010,07,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,04,09,011,013,014,015,016,017,017,017,017,017,017,017,017,017,017,017,017,016,015,
014,013,011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011,
013,014,015,016,016,016,016,016,016,016,016,016,016,015,014,013,011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01,06,08,011,012,013,013,013,013,013,013,013,013,012,011,08,06,
01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,02,05,07,08,08,08,08,07,05,02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

);


Type  TVScreen = Array [1..64000] of byte;
      PVScreen = ^TVScreen;

Type  MySprite = record
      x_pos    : integer;
      x_inc    : integer;
      y_pos    : integer;
      y_inc    : integer;
      end;

Function MyKeyPressed:boolean; Assembler;
Asm
   mov ax,0100h
   int 16h
   mov ax,0
   jz  @loop1
   mov ax,1
  @loop1:
End;

Procedure SetUpVirtualScreen(var myscreen:pvscreen);
Begin
     GetMem (myscreen,64000);
End;

Procedure FreeVirtualScreen(myscreen:pvscreen);
Begin
     FreeMem (myscreen,64000);
End;

Procedure ShowVirtualScreen(myscreen : pvscreen);
var cnt:word;
Begin
     for cnt:=0 to 64000-1 do
       mem[$0a000:cnt]:=Mem [seg(myscreen^):ofs(myscreen^)+cnt];
End;

Procedure ClearVirtualScreen(myscreen : pvscreen; ColorNo : Byte);
var cnt:word;
Begin
     for cnt:=0 to 64000-1 do
       Mem [seg(myscreen^):ofs(myscreen^)+cnt]:= ColorNo;
End;


Procedure ClearVGAScreen(ColorNo : Byte);
var cnt:word;
Begin
     for cnt:=0to 64000-1 do
       Mem [$0a000:cnt]:= ColorNo;
End;

Procedure SetPaletteEntry(ColorNo : Byte; R,G,B : Byte);
Begin
     Port[$3c8] := ColorNo;
     Port[$3c9] := R;
     Port[$3c9] := G;
     Port[$3c9] := B;
End;

Procedure PutPixel(myscreen : pvscreen; X,Y : Integer; Col : Byte);
Begin
     Mem [seg(myscreen^):ofs(myscreen^)+X+(Y*320)]:=Col;
End;

Procedure WaitRetrace;
var zustand:byte;
Begin
     repeat until Port[$03da] and 8 = 0;
     repeat until Port[$03da] and 8 = 8;
End;

Procedure PaintMySprite(myscreen : pvscreen; X,Y : Integer);
var cnt1,cnt2:integer;
    origin:byte;
Begin

  for cnt1:=0 to 47 do
  begin

    for cnt2:=1 to 48 do
    begin

      origin:=bilddaten[cnt1*48+cnt2];
      if origin>0 then
        putpixel(myscreen,x+cnt2-1,y,origin);
    end;
    y:=y+1;
  end;

End;

Var VScreen : PVScreen;
    Counter : Integer;

Var Sprites : array[1..5] of mysprite;

Begin

  for counter:=1 to 5 do
  begin
    sprites[counter].x_pos:=counter*40;
    sprites[counter].y_pos:=counter*20;
    sprites[counter].x_inc:=counter shr 1;
    sprites[counter].y_inc:=(6-counter) shr 1;
  end;

  asm
    mov ax,0013h
    int 10h
  end;

  setupvirtualscreen(vscreen);

  for counter:=255 downto 0 do
    setpaletteentry(counter,counter * 3,counter * 3,counter * 3);

  repeat

    clearvirtualscreen(vscreen,0);

    for counter:=1 to 5 do
    begin

      with sprites[counter] do
      begin
        paintmysprite(vscreen,x_pos,y_pos);
        paintmysprite(vscreen,x_pos,y_pos);
        inc(x_pos,x_inc);
        inc(y_pos,y_inc);
        if (x_pos>=320-48) or (x_pos<=0) then begin x_inc:=-x_inc; inc(x_pos,x_inc); end;
        if (y_pos>=200-48) or (y_pos<=0) then begin y_inc:=-y_inc; inc(y_pos,y_inc); end;
      end;

    end;

    waitretrace;

    showvirtualscreen(vscreen);

  until mykeypressed;

  freevirtualscreen(vscreen);

  asm
    mov ax,002h
    int 10h
  end;

End.

Das Assembler Gerüst für die Umsetzung:
; --- Programm  Flying_Donuts

; --- Codesegment
CSEG            SEGMENT 'CODE'
         ASSUME CS:CSEG, DS:DS_1

; --- Show virtual Screen
VS_SHOW         PROC

VS_SHOW         ENDP

; --- Clear virtual Screen
VS_CLEAR        PROC

VS_CLEAR        ENDP

; --- Set Palette Entry
SET_PALETTE     PROC

farbe           EQU        [BP+10]
rot             EQU        [BP+08]
gruen           EQU        [BP+06]
blau            EQU        [BP+04]

SET_PALETTE     ENDP

; --- VGA Wait Retrace
WAIT_RETRACE    PROC

WAIT_RETRACE    ENDP

; --- Put Sprite on Virtual Screen
PUT_SPRITE      PROC

x               EQU        [BP+06]
y               EQU        [BP+04]

PUT_SPRITE      ENDP

; --- Hauptprogramm
HAUPT           PROC

HAUPT           ENDP

CSEG            ENDS

; --- Stack einrichten
SSEG          SEGMENT STACK
        DB 16384 DUP (?)
SSEG          ENDS

; --- erstes Datensegment
DS_1    SEGMENT 'DATA'

        SPRITE1_XPOS        DW 0
        SPRITE1_XINC        DW 0
        SPRITE1_YPOS        DW 0
        SPRITE1_YINC        DW 0
        SPRITE2_XPOS        DW 0
        SPRITE2_XINC        DW 0
        SPRITE2_YPOS        DW 0
        SPRITE2_YINC        DW 0
        SPRITE3_XPOS        DW 0
        SPRITE3_XINC        DW 0
        SPRITE3_YPOS        DW 0
        SPRITE3_YINC        DW 0
        SPRITE4_XPOS        DW 0
        SPRITE4_XINC        DW 0
        SPRITE4_YPOS        DW 0
        SPRITE4_YINC        DW 0
        SPRITE5_XPOS        DW 0
        SPRITE5_XINC        DW 0
        SPRITE5_YPOS        DW 0
        SPRITE5_YINC        DW 0

SPRITEDATA   DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02,05,07,08,08,08,08,07,05,02,0,0,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01,06,08,011,012
             DB 013,013,013,013,013,013,013,013,012,011,08,06,01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011,013,014,015,016,016,016,016,016,016,016,016,016,016,015,014,013
             DB 011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011,013,014
             DB 015,016,017,017,017,017,017,017,017,017,017,017,017,017,016,015,014,013,011,09,04,0,0,0,0,0,0,0,0,0,0,0
             DB 0,0,0,0,0,0,0,0,0,0,07,010,011,013,015,016,016,016,016,016,016,016,016,015,015,016,016,016,016,016,016,016
             DB 016,015,013,011,010,07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,04,08,011,012,014,015,015,016
             DB 015,015,014,014,013,013,013,013,013,013,013,013,014,014,015,015,016,015,015,014,012,011,08,04,0,0,0,0,0,0,0,0
             DB 0,0,0,0,0,0,0,04,09,011,012,013,014,014,014,014,013,013,012,012,012,011,011,011,011,011,011,012,012,012,013,013
             DB 014,014,014,014,013,012,011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,010,011,012,013,014,013,013,013
             DB 012,011,011,010,010,010,010,09,09,010,010,010,010,011,011,012,013,013,013,014,013,012,011,010,08,05,0,0,0,0,0,0
             DB 0,0,0,0,0,02,09,010,011,012,013,013,013,012,012,011,011,010,010,09,09,09,09,09,09,09,09,09,09,010,010,011
             DB 011,012,012,013,013,013,012,011,010,09,02,0,0,0,0,0,0,0,0,0,01,07,010,011,012,012,012,012,012,011,011,011
             DB 010,010,09,09,010,011,011,012,012,011,011,010,09,09,010,010,011,011,011,012,012,012,012,012,011,010,07,01,0,0,0,0
             DB 0,0,0,0,06,09,010,011,011,012,012,012,011,011,010,010,09,09,010,012,014,016,016,017,017,016,016,014,012,010,09,09
             DB 010,010,011,011,012,012,012,011,011,010,09,06,0,0,0,0,0,0,0,01,08,09,010,011,012,012,012,011,011,010,09,09
             DB 09,09,012,015,017,018,017,017,017,017,018,017,015,012,09,09,09,09,010,011,011,012,012,012,011,010,09,08,01,0,0,0
             DB 0,0,0,07,09,010,011,011,011,011,011,011,010,010,09,09,010,013,016,016,014,012,09,08,08,09,012,014,016,016,013,010
             DB 09,09,010,010,011,011,011,011,011,011,010,09,07,0,0,0,0,0,01,07,09,010,011,011,011,011,011,011,010,09,09,09
             DB 013,015,014,010,05,02,0,0,0,0,02,05,010,014,015,013,09,09,09,010,011,011,011,011,011,011,010,09,07,01,0,0
             DB 0,0,06,08,09,010,011,011,011,011,011,010,09,09,09,012,014,012,05,0,0,0,0,0,0,0,0,0,0,05,012,014
             DB 012,09,09,09,010,011,011,011,011,011,010,09,08,06,0,0,0,0,07,09,010,010,011,011,011,011,011,010,09,08,09,012
             DB 09,03,0,0,0,0,0,0,0,0,0,0,0,0,03,09,012,09,08,09,010,011,011,011,011,011,010,010,09,07,0,0
             DB 0,0,08,09,010,010,011,011,011,011,010,010,08,08,010,09,03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,03
             DB 09,010,08,08,010,010,011,011,011,011,010,010,09,08,0,0,0,03,08,09,010,010,011,011,011,010,010,09,08,08,08,05
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,08,08,09,010,010,011,011,011,010,010,09,08,03,0
             DB 0,05,08,09,09,010,010,011,011,010,010,09,08,08,06,01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 01,06,08,08,09,010,010,011,011,010,010,09,09,08,05,0,0,05,08,09,09,010,010,011,011,010,010,09,08,07,03,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,03,07,08,09,010,010,011,011,010,010,09,09,08,05,0
             DB 0,05,08,09,09,010,010,011,010,010,010,09,08,06,02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,02,06,08,09,010,010,010,011,010,010,09,09,08,05,0,01,06,08,09,09,010,010,011,010,010,010,09,08,05,0,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,09,010,010,010,011,010,010,09,09,08,06,01
             DB 01,06,08,09,09,010,010,011,011,011,010,09,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,0,05,08,09,010,011,011,011,010,010,09,09,08,06,01,02,06,08,09,09,010,010,011,011,010,010,09,08,06,0,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,06,08,09,010,010,011,011,010,010,09,09,08,06,02
             DB 02,06,08,09,09,010,010,011,011,010,010,09,08,06,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,0,06,08,09,010,010,011,011,010,010,09,09,08,06,02,01,06,08,09,09,010,010,011,011,011,010,09,08,05,0,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,05,08,09,010,011,011,011,010,010,09,09,08,06,01
             DB 01,06,08,09,09,010,010,011,010,010,010,09,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,0,05,08,09,010,010,010,011,010,010,09,09,08,06,01,0,05,08,09,09,010,010,011,010,010,010,09,08,06,02,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02,06,08,09,010,010,010,011,010,010,09,09,08,05,0
             DB 0,05,08,09,09,010,010,011,011,010,010,09,08,07,03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,03,07,08,09,010,010,011,011,010,010,09,09,08,05,0,0,05,08,09,09,010,010,011,011,010,010,09,08,08,06,01
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01,06,08,08,09,010,010,011,011,010,010,09,09,08,05,0
             DB 0,03,08,09,010,010,011,011,011,010,010,09,08,08,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 05,08,08,08,09,010,010,011,011,011,010,010,09,08,03,0,0,0,08,09,010,010,011,011,011,011,010,010,08,08,010,09
             DB 03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,03,09,010,08,08,010,010,011,011,011,011,010,010,09,08,0,0
             DB 0,0,07,09,010,010,011,011,011,011,011,010,09,08,09,012,09,03,0,0,0,0,0,0,0,0,0,0,0,0,03,09
             DB 012,09,08,09,010,011,011,011,011,011,010,010,09,07,0,0,0,0,06,08,09,010,011,011,011,011,011,010,09,09,09,012
             DB 014,012,05,0,0,0,0,0,0,0,0,0,0,05,012,014,012,09,09,09,010,011,011,011,011,011,010,09,08,06,0,0
             DB 0,0,01,07,09,010,011,011,011,011,011,011,010,09,09,09,013,015,014,09,05,02,0,0,0,0,02,05,09,014,015,013
             DB 09,09,09,010,011,011,011,011,011,011,010,09,07,01,0,0,0,0,0,07,09,010,011,011,011,011,011,011,010,010,09,09
             DB 010,013,016,016,014,012,09,08,08,09,012,014,016,016,013,010,09,09,010,010,011,011,011,011,011,011,010,09,07,0,0,0
             DB 0,0,0,01,08,09,010,011,012,012,012,011,011,010,09,09,09,09,012,015,017,018,017,017,017,017,018,017,015,012,09,09
             DB 09,09,010,011,011,012,012,012,011,010,09,08,01,0,0,0,0,0,0,0,06,09,010,011,011,012,012,012,011,011,010,010
             DB 09,09,010,012,014,016,016,017,017,016,016,014,012,010,09,09,010,010,011,011,012,012,012,011,011,010,09,06,0,0,0,0
             DB 0,0,0,0,01,07,010,011,012,012,012,012,012,011,011,011,010,010,09,09,010,011,011,012,012,011,011,010,09,09,010,010
             DB 011,011,011,012,012,012,012,012,011,010,07,01,0,0,0,0,0,0,0,0,0,02,09,010,011,012,013,013,013,012,012,011
             DB 011,010,010,09,09,09,09,09,09,09,09,09,09,010,010,011,011,012,012,013,013,013,012,011,010,09,02,0,0,0,0,0
             DB 0,0,0,0,0,0,05,08,010,011,012,013,014,013,013,013,012,011,011,010,010,010,010,09,09,010,010,010,010,011,011,012
             DB 013,013,013,014,013,012,011,010,08,05,0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011,012,013,014,014,014,014
             DB 013,013,012,012,012,011,011,011,011,011,011,012,012,012,013,013,014,014,014,014,013,012,011,09,04,0,0,0,0,0,0,0
             DB 0,0,0,0,0,0,0,0,04,08,011,012,014,015,015,016,015,015,014,014,013,013,013,013,013,013,013,013,014,014,015,015
             DB 016,015,015,014,012,011,08,04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,07,010,011,013,015,016
             DB 016,016,016,016,016,016,016,015,015,016,016,016,016,016,016,016,016,015,013,011,010,07,0,0,0,0,0,0,0,0,0,0
             DB 0,0,0,0,0,0,0,0,0,0,0,04,09,011,013,014,015,016,017,017,017,017,017,017,017,017,017,017,017,017,016,015
             DB 014,013,011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,04,09,011
             DB 013,014,015,016,016,016,016,016,016,016,016,016,016,015,014,013,011,09,04,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01,06,08,011,012,013,013,013,013,013,013,013,013,012,011,08,06
             DB 01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
             DB 0,0,0,02,05,07,08,08,08,08,07,05,02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

DS_1         ENDS

; --- zweites Datensegment
DS_2         SEGMENT

VSCREEN      DB 64000 DUP (0)

DS_2         ENDS

END          HAUPT ; <- That's Ego me