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

  1.  
  2. ; Listing3c2.s    ; BALKEN, DER SINKT, ERSTELLT MIT EINEM MOVE&WAIT DES COPPER
  3.         ; (UM IHN ZUM SINKEN ZU BRINGEN RECHTE MAUSTASTE)
  4.  
  5.         ; Es wurde eine Kontrolle hinzugefügt, um ab einer
  6.         ; bestimmten Zeile des Scroll anzuhalten
  7.     
  8.     
  9.     SECTION ZWEITECOP,CODE    ; auch Fast ist    OK
  10.  
  11. Anfang:
  12.     move.l    4.w,a6       ; Execbase in a6
  13.     jsr    -$78(a6)   ; Disable - stoppt das Multitasking
  14.     lea    GfxName,a1 ; Adresse des Namen der zu öffnenden Library in a1
  15.     jsr    -$198(a6)  ; OpenLibrary, Routine der EXEC, die Libraris
  16.                ; öffnet, und als Resultat in d0 die Basisadresse
  17.                 ; derselben Bibliothek liefert, ab welcher
  18.                 ; die Offsets (Distanzen) zu machen sind
  19.     move.l    d0,GfxBase    ; speichere diese Adresse in GfxBase
  20.     move.l    d0,a6
  21.     move.l    $26(a6),OldCop    ; hier speichern wir die Adresse der Copperlist
  22.                    ; des Betriebssystemes (immer auf $26 nach
  23.                    ; GfxBase)
  24.     move.l    #COPPERLIST,$dff080  ; COP1LC - "Zeiger" auf unsere COP
  25.                      ; (deren Adresse)
  26.     move.w    d0,$dff088         ; COPJMP1 - Starten unsere COP
  27. mouse:    
  28.     cmpi.b    #$ff,$dff006    ; VHPOSR - sind wir bei Zeile 255 angekommen?
  29.     bne.s    mouse        ; Wenn nicht, geh nicht weiter
  30.  
  31.     btst    #2,$dff016    ; POTINP - Rechte Maustaste gedrückt?
  32.     bne.s    Warte        ; Wenn nicht, führe BEWEGECOPPER nicht aus
  33.  
  34.     bsr.s    BewegeCopper    ; Diese Subroutine läßt das WAIT sinken!
  35.                 ; Sie wird einmal pro Frame ausgeführt.
  36.  
  37.  
  38. Warte:
  39.     cmpi.b    #$ff,$dff006    ; VHPOSR:
  40.                  ; Sind wir noch auf $FF? Wenn ja, warte auf die
  41.     beq.s    Warte         ; nächste Zeile (00). Ansonsten wird BewegeCopper
  42.  
  43.  
  44.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  45.     bne.s    mouse        ; wenn nicht, zurück zu mouse:
  46.  
  47.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  48.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  49.  
  50.     move.l    4.w,a6
  51.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  52.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  53.                 ; (Libraries werden geöffnet UND geschlossen!)
  54.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  55.     rts
  56.  
  57. ;
  58. ;    Diese kleine Routine bringt das Wait des Copper zum sinken, indem es
  59. ;    erhöht wird, bei der ersten Ausführung wird das
  60. ;
  61. ;    dc.w    $2007,$FFFE    ; Warte auf Zeile $20
  62. ;
  63. ;    so verändert werden:
  64. ;
  65. ;    dc.w    $2107,$FFFE    ; Warte auf Zeile $21! (Dannn $22,$23 ecc.)
  66. ;
  67. ;    usw. bis der Maximalwert erreicht ist, in unserem Falle $fc
  68.  
  69.  
  70. BewegeCopper:
  71.     cmpi.b    #$fc,BALKEN    ; sind wir bei Zeile $fc angekommen?
  72.     beq.s    Beendet        ; wenn ja, dann sind wir unten und stoppen
  73.     addq.b    #1,BALKEN    ; WAIT 1 verändert, Balken sinkt un eine Zeile
  74. Beendet:
  75.     rts
  76.  
  77. ;    Wenn BALKEN $fc erreicht hat, dann wird das addq übersprungen.
  78.  
  79.  
  80. ;    P.S: Zur Zeit können wir den letzten Teil des Bildschirmes noch
  81. ;    nicht erreichen (nach $FF), ich erkläre euch später warum und
  82. ;    wie es geht.
  83.  
  84.  
  85. ;    DATEN...
  86.  
  87.  
  88. GfxName:
  89.     dc.b    "graphics.library",0,0    ; Bemerkung: um Charakter in den
  90.                     ; Speicher zu geben, verwenden wir
  91.                     ; immer das dc.b und setzen sie
  92.                     ; unter "" oder '', Abschluß mit ,0
  93.  
  94.  
  95. GfxBase:        ; Hier hinein kommt die Basisadresse der graphics.library,
  96.     dc.l    0   ; ab hier werden die Offsets gemacht
  97.  
  98.  
  99.  
  100. OldCop:           ; Hier hinein kommt die Adresse der Orginal-Copperlist des
  101.     dc.l    0  ; Betriebssystemes
  102.  
  103.  
  104.     SECTION MeinCopper,DATA_C ; Dieser Befehl veranlaßt das Betriebssystem,
  105.                 ; das folgende Datensegment in die CHIP-RAM
  106.                 ; zu laden, obligatorisch.
  107.                 ; Die Cpperlist MÜSSEN in die CHIP RAM!
  108.  
  109. COPPERLIST:
  110.     dc.w    $100,$200    ; BPLCON0 - keine Bitplanes, nur Hintergrund
  111.     dc.w    $180,$004    ; COLOR0 - Beginne die COP mit DUNKELBLAU
  112.  
  113. BALKEN:
  114.     dc.w    $7907,$FFFE    ; WAIT - Warte auf Zeile $79
  115.     dc.w    $180,$600    ; COLOR0 - Hier beginnt die rote Zone : ROT auf 6
  116.  
  117.     dc.w    $FFFF,$FFFE    ; ENDE DER COPPERLIST
  118.  
  119.     end
  120.  
  121. Als Änderungen könntet ihr versuchen, das $fc in der Zeile
  122.  
  123.     cmpi.b    #$fc,BALKEN
  124.  
  125. durch andere Werte zu ersetzen, und ihr werdet bemerken, wie der Balken nur
  126. bis zum gegebenen Wert sinkt.
  127.  
  128.