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

  1.  
  2. ; Listing5m2.s    "SCHLIESSEN"  DES VIDEOFENSTERS MIT DEN DIWSTART/STOP ($8e/$90)
  3.  
  4.     SECTION  CIPundCOP,CODE
  5.  
  6. Anfang:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - stoppt das Multitasking
  9.     lea    GfxName(PC),a1    ; Adresse des Namen der zu öffnenden Library
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; speichere diese Adresse in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; hier speichern wir die Adresse der Copperlist
  14.             ; des Betriebssystemes (immer auf $26 nach GfxBase)
  15.  
  16. ;    POINTEN AUF UNSERE BITPLANES
  17.  
  18.     MOVE.L    #PIC,d0        ; in d0 kommt die Adresse unserer PIC
  19.     LEA    BPLPOINTERS,A1    ; in a1 kommt die Adresse der Bitplane-
  20. ; Pointer der Copperlist
  21.     MOVEQ    #2,D1        ; Anzahl der Bitplanes -1 (hier sind es 3)
  22.                 ; für den DBRA - Zyklus
  23.  
  24. POINTBP:
  25.     move.w    d0,6(a1)    ; kopiert das niederwertige Word der Plane-
  26.                 ; Adresse ins richtige Word der Copperlist
  27.     swap    d0        ; vertauscht die 2 Word in d0 (1234 > 3412)
  28.  
  29.     move.w    d0,2(a1)    ; kopiert das hochwertige Word der Adresse des 
  30.                 ; Plane in das richtige Word in der Copperlist
  31.     swap    d0        ; vertauscht erneut die 2 Word von d0
  32.     ADD.L    #40*256,d0    ; Zählen 10240 zu D0 dazu, -> nächstes Plane
  33.  
  34.     addq.w    #8,a1        ; zu den nächsten Bplpointers in der Cop
  35.     dbra    d1,POINTBP    ; Wiederhole D1 mal POINTBP (D1=n. bitplanes)
  36.  
  37.     move.l    #COPPERLIST,$dff080    ; COP1LC - "Zeiger" auf unsere COP
  38.     move.w    d0,$dff088        ; COPJMP1 - Starten unsere COP
  39.     move.w    #0,$dff1fc        ; FMODE - Deaktiviert das AGA
  40.     move.w    #$c00,$dff106        ; BPLCON3 - Deaktiviert das AGA
  41.  
  42. mouse:
  43.     cmpi.b    #$ff,$dff006    ; Sind wir auf Zeile 255?
  44.     bne.s    mouse        ; Wenn nicht, geh noch nicht weiter
  45.  
  46.     btst    #2,$dff016    ; wenn die rechte Maustaste gerdückt ist, dann
  47.     beq.s    Warte        ; überspringe die Scrollroutine (blockiert)
  48.  
  49.     bsr.w    DIWHORIZONTAL    ; Zeigt die Funktion des DIWSTART und DIWSTOP
  50.     bsr.w    DIWVERTIKAL    ; 
  51.  
  52. Warte:
  53.     cmpi.b    #$ff,$dff006    ; Sind wir auf Zeile 255?
  54.     beq.s    Warte        ; Wenn ja, geh nicht weiter, warte!
  55.  
  56.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  57.     bne.s    mouse        ; wenn nicht, zurück zu mouse:
  58.  
  59.     move.l    OldCop(PC),$dff080    ; Pointen auf die SystemCOP
  60.     move.w    d0,$dff088        ; starten die alte COP
  61.  
  62.  
  63.     move.l    4.w,a6
  64.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  65.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  66.                 ; (Libraries werden geöffnet UND geschlossen!)
  67.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  68.     rts
  69.  
  70. ; DATEN
  71.  
  72.  
  73.  
  74. GfxName:
  75.     dc.b    "graphics.library",0,0
  76.  
  77. GfxBase:        ; Hier hinein kommt die Basisadresse der graphics.lib,
  78.     dc.l    0    ; ab hier werden die Offsets gemacht
  79.  
  80. OldCop:            ; Hier hinein kommt die Adresse der Orginal-Copperlist
  81.     dc.l    0    ; des Betriebssystemes
  82.  
  83.  
  84.  
  85. DIWHORIZONTAL:
  86.     CMPI.B    #$FF,DIWXSTART    ; Sind wir bei maximal DIWSTART angekommen?
  87.     BEQ.S    ENDE        ; wenn ja, dann können wir nicht weiter
  88.     ADDQ.B    #2,DIWXSTART    ; wenn nicht, dann zähl 1 dazu
  89. ENDE:
  90.     TST.B    DIWXSTOP    ; Sind wir beim Minimum von DIWSTOP? ($00)?
  91.     BEQ.S    ENDE2        ; wenn ja können wir nicht noch mehr abziehen
  92.     SUBQ.B    #2,DIWXSTOP    ; wenn nicht, 1 wegzählen
  93. ENDE2:
  94.     RTS            ; Ende der Routine, Ausstieg
  95.  
  96.  
  97. DIWVERTIKAL:
  98.     CMPI.B    #$95,DIWYSTOP    ; Sind wir beim richtigen DIWSTOP angekommen?
  99.     BEQ.S    ENDE3        ; wenn ja, brauchen wir nicht weitergehen
  100.     ADDQ.B    #1,DIWYSTART    ; zählen 1 zum Start dazu
  101.     SUBQ.B    #1,DIWYSTOP    ; ziehen 1 vom Stop ab
  102. ENDE3:
  103.     RTS            ; Raus aus der Routine
  104.  
  105.     SECTION    GRAPHIC,DATA_C
  106.  
  107. COPPERLIST:
  108.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  109.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  110.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  111.     dc.w    $13e,$0000
  112.  
  113.     dc.w    $8E        ; DIWSTART - Anfang Videofenster
  114. DIWYSTART:
  115.     dc.b    $2c        ; DIWSTRT $YY
  116. DIWXSTART:
  117.     dc.b    $81        ; DIWSTRT $XX (erhöhen es bis $ff)
  118.  
  119.     dc.w    $90        ; DIWSTOP - Ende des Videofensters
  120. DIWYSTOP:
  121.     dc.b    $fe        ; DiwStop YY
  122. DIWXSTOP:
  123.     dc.b    $c1        ; DiwStop XX (verringern es bis $00)
  124.     dc.w    $92,$0038    ; DdfStart
  125.     dc.w    $94,$00d0    ; DdfStop
  126.     dc.w    $102,0        ; BplCon1
  127.     dc.w    $104,0        ; BplCon2
  128.     dc.w    $108,0        ; Bpl1Mod
  129.     dc.w    $10a,0        ; Bpl2Mod
  130.  
  131.             ; 5432109876543210
  132.     dc.w    $100,%0011001000000000    ; Bits 13 und 12 an!! (3 = %011)
  133.                     ; 3 Bitplanes Lowres, nicht Lace
  134. BPLPOINTERS:
  135.     dc.w $e0,$0000,$e2,$0000    ;Erstes     Bitplane
  136.     dc.w $e4,$0000,$e6,$0000    ;zweites Bitplane
  137.     dc.w $e8,$0000,$ea,$0000    ;drittes Bitplane
  138.  
  139.     dc.w    $0180,$000    ; color0
  140.     dc.w    $0182,$475    ; color1
  141.     dc.w    $0184,$fff    ; color2
  142.     dc.w    $0186,$ccc    ; color3
  143.     dc.w    $0188,$999    ; color4
  144.     dc.w    $018a,$232    ; color5
  145.     dc.w    $018c,$777    ; color6
  146.     dc.w    $018e,$444    ; color7
  147.  
  148.     dc.w    $ca07,$fffe
  149.     dc.w    $180,$456    ; Bemerke: Die Hintergrundfarbe wird vom
  150.                 ; Diwstart-Diwstop nicht beeinflußt
  151.  
  152.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  153.  
  154. ;    figura
  155.  
  156. PIC:
  157.     incbin    "amiga.320*256*3"    ; Hier wird das Bild im RAW-Format
  158.                     ; geladen, das wir zuvor mit dem
  159.                     ; Kefcon konvertiert haben
  160.  
  161.     end
  162.  
  163. In diesem Listing wurden sowohl die XX als auch die YY der DIWSTART und
  164. DIWSTOP verändert, um das Bild zu erwürgen.
  165.  
  166.