home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / assembler-kurs / listings2 / listing6o.s < prev    next >
Text File  |  1977-12-31  |  16KB  |  444 lines

  1.  
  2. ; Listing6o.s    LINKS UND RECHTS-SCROLL EINES PLAYFIELDES, DAS
  3. ;        GRÖßER IST ALS DER BILDSCHIRM SELBST (HIER 640
  4. ;        PIXEL BREIT) RECHTE TASTE STOPPT DEN SCROLL
  5.  
  6.  
  7.     SECTION    CIPundCOP,CODE
  8.  
  9. Anfang:
  10.     move.l    4.w,a6        ; Execbase
  11.     jsr    -$78(a6)    ; Disable
  12.     lea    GfxName(PC),a1    ; Namen der Lib
  13.     jsr    -$198(a6)    ; OpenLibrary
  14.     move.l    d0,GfxBase    ;
  15.     move.l    d0,a6
  16.     move.l    $26(a6),OldCop    ; speichern die alte COP
  17.  
  18. ; Achtung! Um das Bild zu "zentrieren" müssen wir 2 Bytes weiter nach "hinten"
  19. ; pointen, damit das Pic um 16 P. nach "vorne" rückt, da es wegen des DDFSTART
  20. ; nun 16 Pixel weiter hinten beginnt (um den häßlichen Fehler außerhalb der
  21. ; sichtbaren Zone zu verlegen).
  22.  
  23.  
  24. ;    POINTEN AUF UNSERE BITPLANES
  25.  
  26.     MOVE.L    #BITPLANE-2,d0    ; in d0 kommt die Adresse des Bitplane -2,
  27.                 ; also 16 Pixel,da die ersten 16 Pixel verdeckt
  28.                 ; sind und wir sie "überspringen" müssen
  29.     LEA    BPLPOINTERS,A1    ; COP - Pointer
  30.     move.w    d0,6(a1)
  31.     swap    d0        
  32.     move.w    d0,2(a1)    
  33.  
  34.     bsr.w    Print        ; Bringt den Text auf´s Bitplane!
  35.  
  36.     move.l    #COPPERLIST,$dff080    ; COP1LC - unsere COP
  37.     move.w    d0,$dff088        ; COPJMP1 - Starten unsere COP
  38.     move.w    #0,$dff1fc        ; FMODE - Deaktiviert das AGA
  39.     move.w    #$c00,$dff106        ; BPLCON3 - Deaktiviert das AGA
  40.  
  41. mouse:
  42.     cmpi.b    #$ff,$dff006    ; Sind wir auf Zeile 255?
  43.     bne.s    mouse
  44.  
  45.     btst    #2,$dff016    ; Rechte Taste gedrückt?
  46.     beq.s    Warte        ; wenn ja, scrolle nicht
  47.  
  48.     bsr.w    MEGAScroll    ; Scrollen eines Bildes, das 640 Pixel breit
  49.                 ; ist, innerhalb eines 320 Pixel breiten Screen
  50.  
  51. Warte:
  52.     cmpi.b    #$ff,$dff006    ; Sind wir auf Zeile 255?
  53.     beq.s    Warte        
  54.  
  55.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  56.     bne.s    mouse
  57.  
  58.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  59.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  60.  
  61.     move.l    4.w,a6
  62.     jsr    -$7e(a6)    ; Enable
  63.     move.l    GfxBase(PC),a1
  64.     jsr    -$19e(a6)    ; Closelibrary 
  65.     rts
  66.  
  67.  
  68. ; DATEN
  69.  
  70. GfxName:
  71.     dc.b    "graphics.library",0,0    
  72.  
  73. GfxBase:
  74.     dc.l    0
  75.  
  76. OldCop:
  77.     dc.l    0    
  78.  
  79.  
  80. ; Die Routine Megascroll dient nur dazu, die schon gesehene Routine "Rechts:"
  81. ; 320 Mal auszuführen, danach 320 Mal die Routine "Links:", um das Bild wieder
  82. ; in die Startposition zu bringen. Dann beginnt der Zyklus von vorne. Um
  83. ; festzuhalten,wie oft die einzelnen Routinen "Rechts:" pder "Links:"ausgeführt
  84. ; wurden, verwenden wir das Word "WieOft", zu dem wir bei jedem Frame
  85. ; 1 dazuzählen. Um ein 640 Pixel großes Bild auf einem 320 Pixel großen Screen
  86. ; herumscrollen zu lassen, muß es um 320 Pixel verschoben werden:
  87. ;
  88. ;
  89. ; Am Anfang:
  90. ;     _______________________________
  91. ;    |        |        |
  92. ;    |   Bildschirm  |        |
  93. ;    | <-   320   -> |        |
  94. ;    |        |        |
  95. ;    | <- Bild im Speicher zu 640 -> |
  96. ;    |        |        |
  97. ;    |        |        |
  98. ;     -------------------------------
  99. ;
  100. ; Wenn wir 320 Pixel nach rechts gescrollt sind:
  101. ;     _______________________________
  102. ;    |        |        |
  103. ;    |        |  Bildschirm   |
  104. ;    |        | <-  320   ->  |
  105. ;    |        |        |
  106. ;    | <- Bil dim Speicher zu 640 -> |
  107. ;    |        |        |
  108. ;    |        |        |
  109. ;     -------------------------------
  110. ;
  111. ; Dann weitere 320 Pixel nach links und wir sehen wieder die ersten 320 Pixel
  112. ; des 640 breiten Bildes.
  113. ; Mit dem ersten Bit des Word RechtsLinks halten wir fest, ob wir nach links
  114. ; oder rechts gehen müssen. Um den Wert des Bit zu verändern, also von EINS
  115. ; auf NULL oder NULL auf EINS, wird der Befehl BCHG, also BIT CHANGE,
  116. ; verwendet. Wir kennen ihn schon aus einem anderen Listing.
  117.  
  118.  
  119. MEGAScroll:
  120.     addq.w    #1,WieOft    ; Signalisieren einen weiteren Durchgang
  121.     cmp.w    #320,WieOft    ; Sind wir auf 320?
  122.     bne.S    BewegNochMal    ; Wenn nicht, scrolle noch weiter
  123.     BCHG.B    #1,RechtsLinks    ; Wenn wir aber auf 320 sind, wechsle Richtung
  124.     CLR.w    WieOft        ; und setze "WieOft" auf NULL
  125.     rts
  126.  
  127. BewegNochMal:
  128.     BTST    #1,RechtsLinks    ; Müssen wir rechts oder links gehen?
  129.     BEQ.S    GehLinks
  130.     bsr.s    Rechts        ; Scrolle ein Pixel nach rechts
  131.     rts
  132.  
  133. GehLinks:
  134.     bsr.s    Links        ; Scrolle ein Pixel nach links
  135.     rts
  136.  
  137. ; Dieses Word zählt, wie oft wir Links bzw. Rechts gegangen sind.
  138.  
  139. WieOft:
  140.     DC.W    0
  141.  
  142. ; Wenn das Bit 1 von RechtsLinks auf NULL ist, dann scrollt die Routine
  143. ; nach links, wenn es auf EINS ist, dann nach rechts
  144.  
  145. RechtsLinks:
  146.     DC.W    0
  147.  
  148. ; Diese Routine scrollt ein Bitplane nach rechts, indem es auf das BPLCON1
  149. ; und den Bitplanepointers in der Copperlist einwirkt. MEINBPCON1 ist das 
  150. ; Byte des BPLCON1.
  151.  
  152. Rechts:
  153.     CMP.B    #$ff,MEINBPCON1    ; sind wir bei maximalen Scroll angelangt (15)?
  154.     BNE.s    CON1ADDA    ; wenn nicht, weiter um ein weiteres
  155.     LEA    BPLPOINTERS,A1    ; Mit diesen 4 Anweisungen holen wir aus der
  156.     move.w    2(a1),d0    ; Copperlist die Adresse, wohin das $dff0e0
  157.     swap    d0        ; gerade pointet und geben diesen Wert
  158.     move.w    6(a1),d0    ; in d0
  159.     
  160.     subq.l    #2,d0       ; pointet 16 Bit weiter nach hinten, das Bild
  161.                ; scrollt um 16 Pixel nach Rechts
  162.     clr.b    MEINBPCON1 ; löscht den Hardwarescroll des BPLCON1 ($dff102)
  163.                ; denn wir haben 16 Pixel schon mit den Bitplane-
  164.                ; Pointers "übersprungen", wir müssen wieder bei
  165.                ; NULL beginnen, um mit dem $dff102 um jeweils
  166.                ; 1 Pixel nach rechts zu gehen.
  167.     move.w    d0,6(a1)   ; kopiert das niederw. Word der Adress des Plane
  168.     swap    d0       ; vertauscht die 2 Word von d0 (z.B.: 1234 > 3412)
  169.     move.w    d0,2(a1)   ; kopiert das höherw. Word der Adresse des Plane
  170.     rts
  171.  
  172. CON1ADDA:
  173.     add.b    #$11,MEINBPCON1 ; scrolle ein Pixel nach vorne
  174.     rts
  175.  
  176.  
  177.  
  178. ;    Routine, die nach Links scrollt, identisch mit der vorherigen:
  179.  
  180. LINKS:
  181.     TST.B    MEINBPCON1    ; sind wir bei minimalen Scroll angelangt (00)?
  182.     BNE.s    CON1SUBBA    ; wenn nicht, zurück um ein weiteres
  183.  
  184.     LEA    BPLPOINTERS,A1    ; Mit diesen 4 Anweisungen holen wir aus der
  185.     move.w    2(a1),d0    ; Copperlist die Adresse, wohin das $dff0e0
  186.     swap    d0        ; gerade pointet und geben diesen Wert
  187.     move.w    6(a1),d0    ; in d0
  188.  
  189.     addq.l    #2,d0        ; pointet 16 Bit weiter nach vorne, das Bild
  190.                 ; scrollt um 16 Pixel nach Links
  191.     move.b    #$FF,MEINBPCON1    ; Hardwarescroll auf 00 (BPLCON1, $dff102)
  192.  
  193.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Adress des Plane
  194.     swap    d0        ; vertauscht die 2 Word von d0 (z.B.: 1234 > 3412)
  195.     move.w    d0,2(a1)    ; kopiert das höherw. Word der Adresse des Plane
  196.     rts
  197.  
  198. CON1SUBBA:
  199.     sub.b    #$11,MEINBPCON1 ; scrolle ein Pixel nach hinten
  200.     rts
  201.  
  202.  
  203. ;    Routine, die 8x8 Pixel große Buchstaben druckt
  204.  
  205. PRINT:
  206.     LEA    TEXT(PC),A0    ; Adresse des zu druckenden Textes in a0
  207.     LEA    BITPLANE,A3    ; Adresse des Ziel-Bitplanes in a3
  208.     MOVEQ    #25-1,D3    ; ANZAHL DER ZEILEN, DIE ZU DRUCKEN SIND -> 25
  209. PRINTZEILE:
  210.     MOVEQ    #80-1,D0    ; ANZAHL DER SPALTEN EINER ZEILE: 80 (HIRES!)
  211.  
  212. PRINTCHAR2:            
  213.     MOVEQ    #0,D2        ; Löscht D2
  214.     MOVE.B    (A0)+,D2    ; Nächster Charakter in d2
  215.     SUB.B    #$20,D2        ; ZÄHLE 32 VOM ASCII-WERT DES BUCHSTABEN WEG,
  216.                 ; SOMIT VERWANDELN WIR Z.B. DAS LEERZEICHEN
  217.                 ; (Das $20 entspricht), IN $00, DAS
  218.                 ; MALZEICHEN ($21) IN $01...
  219.     MULU.W    #8,D2        ; MULTIPLIZIERE DIE ERHALTENE ZAHL MIT 8,
  220.                 ; da die Charakter ja 8 Pixel hoch sind
  221.     MOVE.L    D2,A2
  222.     ADD.L    #FONT,A2    ; FINDE DEN GEWÜNSCHTEN BUCHSTEBEN IM FONT
  223.  
  224.                 ; DRUCKE DEN BUCHSTABEN ZEILE FÜR ZEILE
  225.     MOVE.B    (A2)+,(A3)    ; Drucke Zeile 1 des Buchstaben
  226.     MOVE.B    (A2)+,80(A3)    ; Drucke Zeile 2  "    "
  227.     MOVE.B    (A2)+,80*2(A3)    ; Drucke Zeile 3  "    "
  228.     MOVE.B    (A2)+,80*3(A3)    ; Drucke Zeile 4  "    "
  229.     MOVE.B    (A2)+,80*4(A3)    ; Drucke Zeile 5  "    "
  230.     MOVE.B    (A2)+,80*5(A3)    ; Drucke Zeile 6  "    "
  231.     MOVE.B    (A2)+,80*6(A3)    ; Drucke Zeile 7  "    "
  232.     MOVE.B    (A2)+,80*7(A3)    ; Drucke Zeile 8  "    "
  233.  
  234.     ADDQ.w    #1,A3        ; A3+1, wir gehen um 8 Bit weiter (zum
  235.                 ; nächsten Buchstaben
  236.  
  237.     DBRA    D0,PRINTCHAR2    ; DRUCKEN D0 (80) ZEICHEN PRO ZEILE
  238.  
  239.     ADD.W    #80*7,A3    ; "Return", neue Zeile
  240.  
  241.     DBRA    D3,PRINTZEILE    ; Wir drucken D3 Zeilen
  242.     RTS
  243.  
  244. TEXT:
  245.              ; Anzahl Charakter pro Zeile: 40
  246.              ;            1111111111222222222233333333334
  247.              ;   1234567890123456789012345678901234567890
  248.     dc.b    '   ERSTE ZEILE IN HIRES 640 PIXEL BREITE' ; 1a \ ZEILE 1
  249.     dc.b    '!! -- -- -- --IMMER NOCH DIE ERSTE ZEILE' ; 1b /
  250.     dc.b    '                ZWEITE ZEILE            ' ; 2  \ ZEILE 2
  251.     dc.b    'AUCH NOCH ZWEITE ZEILE                  ' ;    /
  252.     dc.b    '     /\  /                              ' ; 3
  253.     dc.b    '                                        ' ;
  254.     dc.b    '    /  \/                               ' ; 4
  255.     dc.b    '                                        ' ;
  256.     dc.b    '                                        ' ; 5
  257.     dc.b    '                                        ' ;
  258.     dc.b    '        SECHSTE ZEILE                   ' ; 6
  259.     dc.b    '                      ENDE SECHSTE ZEILE' ;
  260.     dc.b    '                                        ' ; 7
  261.     dc.b    '                                        ' ;
  262.     dc.b    '                                        ' ; 8
  263.     dc.b    '                                        ' ;
  264.     dc.b    'FABIO CIUCCI COMMUNICATION INTERNATIONAL' ; 9
  265.     dc.b    ' MARKETING TRUST TRADEMARK COPYRIGHTED  ' ;
  266.     dc.b    '                                        ' ; 10
  267.     dc.b    '                                        ' ;
  268.     dc.b    '   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
  269.     dc.b    '   DAS IST EIN TEST - 1,2,3 PROBE...    ' ;
  270.     dc.b    '                                        ' ; 12
  271.     dc.b    '                                        ' ;
  272.     dc.b    '     ICH DENKE, ALSO BIN ICH... Wer sagt' ; 13
  273.     dc.b    'e das doch noch gleich...?              ' ;
  274.     dc.b    '                                        ' ; 14
  275.     dc.b    '                                        ' ;
  276.     dc.b    '  Und so geht unser Gedicht weiter:     ' ; 15
  277.     dc.b    '                                        ' ;
  278.     dc.b    '                  ...                   ' ; 16
  279.     dc.b    '  "Mein Fraeulein! sein Sie munter,     ' ;
  280.     dc.b    '                                        ' ; 17
  281.     dc.b    '         <---                           ' ;
  282.     dc.b    '    das ist ein altes Stueck;           ' ; 18
  283.     dc.b    '                                        ' ;
  284.     dc.b    '         --->                           ' ; 19
  285.     dc.b    '    Hier vorne geht si unter            ' ;
  286.     dc.b    '                                        ' ; 20
  287.     dc.b    '         <---                           ' ;
  288.     dc.b    '   Und kehrt von hinten zurueck."       ' ; 21
  289.     dc.b    '                                        ' ;
  290.     dc.b    '         --->                           ' ; 22
  291.     dc.b    '    Ende. Na, wer hat s geschrieben?    ' ;
  292.     dc.b    '                                        ' ; 23
  293.     dc.b    '                                        ' ;
  294.     dc.b    '                                        ' ; 24
  295.     dc.b    '                                        ' ;
  296.     dc.b    ' C:\>_                                  ' ; 25
  297.     dc.b    '                                        ' ;
  298.     dc.b    '                                        ' ; 26
  299.     dc.b    '                                        ' ;
  300.  
  301.     EVEN
  302.  
  303.  
  304.  
  305.     SECTION GRAPHIC,DATA_C
  306.  
  307. COPPERLIST:
  308.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  309.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  310.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  311.     dc.w    $13e,$0000
  312.  
  313.     dc.w    $8E,$2c81    ; DiwStrt (Register mit Normalwerten)
  314.     dc.w    $90,$2cc1    ; DiwStop
  315.     dc.w    $92,$0030    ; DdfStart (wegen Scroll modifiziert)
  316.     dc.w    $94,$00d0    ; DdfStop
  317.     dc.w    $102        ; BplCon1
  318.     dc.b    0        ; hochwertiges Byte des $dff102,nicht verwendet
  319. MEINBPCON1:
  320.     dc.b    0        ; niederwertiges Byte des $dff102, verwendet
  321.     dc.w    $104,0        ; BplCon2
  322.     dc.w    $108,40-2    ; Bpl1Mod ( 40 für ein Bild, das 640 breit ist,
  323.     dc.w    $10a,40-2    ; Bpl2Mod   -2 um das DDFSTART auszugleichen)
  324.  
  325.             ; 5432109876543210
  326.     dc.w    $100,%0001001000000000  ; Bits 12 an - 1 Bitplane Lowres
  327.  
  328. BPLPOINTERS:
  329.     dc.w $e0,$0000,$e2,$0000    ;erstes  Bitplane
  330.  
  331.     dc.w    $0180,$103    ; Color0 - Hintergrund
  332.     dc.w    $0182,$4ff    ; Color1 - Schrift
  333.  
  334.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  335.  
  336. ;    Der FONT, Charakter 8x8
  337.  
  338. FONT:
  339. ;    incbin    "metal.fnt"    ; Breiter Zeichensatz
  340. ;    incbin    "normal.fnt"    ; Ähnlich dem aus dem Kickstart 1.3
  341.     incbin    "nice.fnt"    ; Schmaler Zeichensatz
  342.  
  343.     SECTION MEIPLANE,BSS_C    ; Die SECTION BSS können nur aus NULLEN
  344.                 ; bestehen!!! Man verwendet das DS.B um zu
  345.                 ; definieren, wieviele Nullen die Section
  346.                 ; enthalten soll
  347.  
  348. BITPLANE:
  349.     ds.b    80*256    ; ein Bitplane, 640x256 breit (wie Hires)
  350.  
  351.     end
  352.  
  353.  
  354. In diesem Listing ist die einzige Neuigkeit das Scrollen eines Bildes, das
  355. größer    ist  als  der  Bildschirm  selbst.  Zuerst  ein  Wort  über  die
  356. Modulo-Register:  bei  einem  Bildschirm  in  LOWRES  mit  normalen
  357. DIWSTART/DIWSTOP-  Werten  ist  das  Modulo  40, das Bild wird also als 40
  358. Bytes breit behandelt, jede Zeile hat 320 Pixel/40 Bytes.  Wenn  wir  aber
  359. ein  Bild im Speicher haben, das 640 Pixel breit ist, wie es hier der Fall
  360. ist, dann müssen wir das Modulo verändern. Denn daß das Bild  größer  ist,
  361. kratzt  den  Copper nicht die Bohne, er wird immer ein Modulo 40 annehmen,
  362. wenn es sich um LowRes handelt. Wir können dies  aber  mit  den  Registern
  363. BPL1MOD    und    BPL2MOD  ändern:  das  Modulo  wird  zum  gängigen  Modulo
  364. dazugegeben, es reicht also ein:
  365.  
  366.     dc.w    $108,40     ; Bpl1Mod (40 für ein 640 Pixel breites Bild)
  367.     dc.w    $10a,40     ; Bpl2Mod
  368.  
  369. um ans Ende einer jeden 320 Pixel breiten Zeile (40 Bytes) zu springen, um
  370. die  40  überstehenden  Bytes  zu  überspringen, und um mit der Anzeige am
  371. Anfang der nächsten Zeile zu beginnen:
  372.  
  373.  
  374.      40 Bytes     40 Bytes (jedesmal mit dem Modulo = 40 übersprungen)
  375.      _______________________________
  376.     |        |        |
  377.     |   Bildschirm  |        |
  378.     | <-   320  ->  |        |
  379.     |        |        |
  380.     | <- Bild im Speicher zu 640 -> |
  381.     |        |        |
  382.     |        |        |
  383.      -------------------------------
  384.  
  385. Nun, wo wir den rechten Teil des Bildes zu 640 Pixel auf einem  320  Pixel
  386. breiten  Schirm  angezeigt  haben,  indem  wir  einfach  die Modulo auf 40
  387. gesetzt haben, müssen wir  die  gleiche  Modifizierung  vornehmen  wie  in
  388. Listing6n.s, um den Anzeigefehler zu vermeiden. Die ersten 16 Pixel müssen
  389. versteckt werden. Dazu lassen wir den  Screen  16  Pixel  früher  starten,
  390. indem    wir  das  DDFSTART  verändern:  dc.w  $92,$30  ;  DDFSTART  =  $30
  391. (Bildschirm startet
  392.                 ; 16 Pixel früher, er verbreitert sich
  393.                 ; also auf 42 Bytes pro Zeile, 336 Pixel
  394.                 ; Breite, aber das DIWSTART "versteckt"
  395.                 ; diese ersten 16 Pixel mit dem Fehler.
  396.  
  397. Da nun der Bildschirm alle 42  Bytes  eine  neue  Zeile  nimmt,  eine  Art
  398. "RETURN", müssen wir das ausgleichen, indem wir 2 von den Modulo abziehen,
  399. die 40 waren und nun 38 werden:
  400.  
  401.     dc.w    $108,40-2  ; Bpl1Mod (40 für ein 640 breites Bild, das -2
  402.     dc.w    $10a,40-2  ; Bpl2Mod ist da, um das DDFSTART auszugleichen)
  403.  
  404. Im  Grunde  genommen  kann  man nicht sagen, daß ein Scroll von diesem Typ
  405. "schwierig"  sei,  die  einzige  Schwierigkeit  liegt  darin,    sich    das
  406. MODULO/DDFSTART/ANFANG  DES BITPLANE - System zu merken. Es gibt auch noch
  407. eine andere Neuigkeit gegenüber Listing6n.s:
  408.  
  409.  
  410. ; Achtung! Um das Bild zu "zentrieren" müssen wir 2 Bytes weiter nach "hinten"
  411. ; pointen, damit das Pic um 16 P. nach "vorne" rückt, da es wegen des DDFSTART
  412. ; nun 16 Pixel weiter hinten beginnt (um den häßlichen Fehler außerhalb der
  413. ; sichtbaren Zone zu verlegen).
  414.  
  415.  
  416. ;    POINTEN AUF UNSERE BITPLANES
  417.  
  418.     MOVE.L  #BITPLANE-2,d0  ; in d0 kommt die Adresse des Bitplane -2,
  419.                 ; also 16 P., da die ersten 16 Pixel verdeckt
  420.                 ; sind und wir sie "überspringen" müssen
  421.  
  422. Da wir ja die ersten 16 Pixel "versteckt" haben, würden  auch  die  ersten
  423. zwei  Buchstaben  vom  Text  verschwinden  (8  Pixel pro Buchstabe, 2*8=16
  424. Pixel). Aber durch Verschieben des Bildes um 16 Pixel sehen wir  auch  die
  425. ersten    16  Pixel  korrekt,  und  nicht  nach  links  verschoben  wie  in
  426. Listing6n.s. Versucht, das -2 vom "MOVE.L #BITPLANE-2,d0" zu entfernen und
  427. setzt einen ";" vor die Routine "
  428.  
  429. ;    bsr.w    MEGAScroll
  430.  
  431. um  ein  stehendes  Bild  zu haben. Ihr werdet bemerken, daß die ersten 16
  432. Pixel fehlen, und daß rechts zwei zuviel sind. Das  Pic  startet  eben  16
  433. Pixel  vor  der  Norm. Um das zu überprüfen, "enthüllen" wir die ersten 16
  434. Pixel:
  435.  
  436.     dc.w    $8e,$2c71    ; DiwStrt ($81-16=$71)
  437.  
  438. Da sind sie, die "Verschollenen"!. Setzt wieder das -2 an seinen Platz und
  439. entfernt  den  ";"  von der Routine, und ihr werdet sehen, wie der übliche
  440. Fehler "Hinterm Vorhang" passiert.
  441.  
  442.  
  443.  
  444.