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

  1.  
  2. ; Listing5i.s    DURCHLAUFEN DER GESAMTEN CHIP-MEMORY MITTELS DER BITPLANEPTR
  3. ;        IN DER COPPERLIST.
  4. ;        LINKE TASTE UM SICH VORWÄRTS ZU BEWEGEN, RECHTE FÜR RÜCKWÄRTS,
  5. ;        BEIDE ZUM AUSSTEIGEN.
  6.  
  7.     SECTION    CIPundCOP,CODE
  8.  
  9. Anfang:
  10.     move.l    4.w,a6        ; Execbase in a6
  11.     jsr    -$78(a6)    ; Disable - stoppt das Multitasking
  12.     lea    GfxName(PC),a1    ; Adresse des Namen der zu öffnenden Lib in a1
  13.     jsr    -$198(a6)    ; OpenLibrary
  14.     move.l    d0,GfxBase    ; speichere diese Adresse in GfxBase
  15.     move.l    d0,a6
  16.     move.l    $26(a6),OldCop    ; hier speichern wir die Adresse der Copperlist
  17.                 ; des Betriebssystemes
  18.  
  19. ;    BEMERKUNG: hier lassen wir die Bitplanes alle auf $000000 pointen,
  20. ;    also auf den Anfang der CHIP-RAM
  21.  
  22.     move.l    #COPPERLIST,$dff080    ; COP1LC - "Zeiger" auf unsere COP
  23.     move.w    d0,$dff088        ; COPJMP1 - Starten unsere COP
  24.     move.w    #0,$dff1fc        ; FMODE - Deaktiviert das AGA
  25.     move.w    #$c00,$dff106        ; BPLCON3 - Deaktiviert das AGA
  26.  
  27. mouse:
  28.     cmpi.b    #$ff,$dff006    ; Sind wir auf Zeile 255?
  29.     bne.s    mouse        ; Wenn nicht, geh nicht weiter
  30.  
  31. Warte:
  32.     cmpi.b    #$ff,$dff006    ; Sind wir auf Zeile 255?
  33.     beq.s    Warte        ; Wenn nicht, geh nicht weiter
  34.  
  35.     btst    #2,$dff016    ; wenn die rechte Maustaste gedrückt ist,
  36.     bne.s    NichtRunter    ; gehe zu NichtRunter
  37.  
  38.     bsr.s    GehRunter    ; ansonsten auf GehRunter
  39.  
  40. NichtRunter:
  41.     btst    #6,$bfe001    ; linke Taste gedrückt?
  42.     beq.s    ScrollRauf    ; wenn ja, scrolle rauf
  43.     bra.s    mouse        ; nein? Dann wiederhole den Zyklus noch ein
  44.                 ; FRAME lang
  45.  
  46. ScrollRauf:
  47.     bsr.w    GehRauf        ; läßt das Bild nach oben scrollen
  48.  
  49.     btst    #2,$dff016    ; If both buttons are pressed, exit, or MOUSE
  50.     bne.s    mouse
  51.  
  52.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  53.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  54.  
  55.     move.l    4.w,a6
  56.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  57.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  58.                 ; (Libraries werden geöffnet UND geschlossen!)
  59.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  60.     rts
  61.  
  62. ; DATEN
  63.  
  64. GfxName:
  65.     dc.b    "graphics.library",0,0
  66.  
  67. GfxBase:        ; Hier hinein kommt die Basisadresse der graphics.lib,
  68.     dc.l    0    ; ab hier werden die Offsets gemacht
  69.  
  70. OldCop:         ; Hier hinein kommt die Adresse der Orginal-Copperlist des
  71.     dc.l    0    ; Betriebssystemes
  72.  
  73.  
  74. ;    Diese Routine bewegt das Bild nach oben und unten, indem es auf die
  75. ;    Bitplanepointers zugreift (mittels Label BPLPOINTERSin der Copperlist).
  76.  
  77. GehRunter:
  78.     LEA    BPLPOINTERS,A1    ; Mit diesen 4 Anweisungen holen wir aus der
  79.     move.w    2(a1),d0    ; Copperlist die Adresse, wohin das $dff0e0
  80.     swap    d0        ; gerade pointet und geben diesen Wert
  81.     move.w    6(a1),d0    ; in d0
  82.     
  83.     sub.l    #80*3,d0    ; subtrahieren 80*3, also 3 Zeilen, somit
  84.                 ; scrollt das Bild nach unten
  85.     bra.s    ENDE
  86.  
  87.  
  88. GehRauf:
  89.     LEA    BPLPOINTERS,A1    ; Mit diesen 4 Anweisungen holen wir aus der
  90.     move.w    2(a1),d0    ; Copperlist die Adresse, wohin das $dff0e0
  91.     swap    d0        ; gerade pointet und geben diesen Wert
  92.     move.w    6(a1),d0    ; in d0
  93.     
  94.     add.l    #80*3,d0    ; addieren 80*3, also 3 Zeilen, somit
  95.                 ; scrollt das Bild nach oben
  96.     bra.w    ENDE
  97.  
  98. ENDE:                ; WIR POINTEN AUF UNSERE BITPLANES
  99.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Adresse des Pl
  100.     swap    d0        ; vertauscht die 2 Word in d0 (1234 > 3412)
  101.     move.w    d0,2(a1)    ; kopiert ds hochw. Word der Adresse des Plane
  102.     rts
  103.  
  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,$2c81    ; DiwStrt    (Register mit Standartwerten)
  114.     dc.w    $90,$2cc1    ; DiwStop
  115.     dc.w    $92,$003c    ; DdfStart HIRES Normal
  116.     dc.w    $94,$00d5    ; DdfStop HIRES Normal
  117.     dc.w    $102,0        ; BplCon1
  118.     dc.w    $104,0        ; BplCon2
  119.     dc.w    $108,0        ; Bpl1Mod
  120.     dc.w    $10a,0        ; Bpl2Mod
  121.  
  122.             ; 5432109876543210  ; BPLCON0:
  123.     dc.w    $100,%1001001000000000  ; Bits 12 und 15 an!! 1 Bitplane
  124.                     ; Hires 640x256, nicht Interlace
  125. BPLPOINTERS:
  126.     dc.w $e0,$0000,$e2,$0000    ;erstes  Bitplane - BPL0PT
  127.  
  128.     dc.w    $0180,$000    ; color0
  129.     dc.w    $0182,$2ae    ; color1
  130.  
  131.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  132.  
  133.     end
  134.  
  135. Mit diesem simplen Programm könnt ihr den Inhalt eurer Chip-Ram sehen,  es
  136. wir ein Bitplane in HIRES angezeigt, das anfänglich auf $00000 zeigt, also
  137. dem Anfang der Chip-Ram des Amiga.  Durch  drücken  der  linken  Maustaste
  138. könnt  ihr  die  Adresse  inkrementieren  (erhöhen), mit der rechten Taste
  139. dekrementieren (in der Adresse rückwärts fahren). Damit könnt  ihr  sehen,
  140. was  sich  in  diesem  Bereich alles tummelt: Die Workbench wird erkennbar
  141. sein, der Asmone, und wenn ihr ein Spiel gespielt habt, bevor  ihr  dieses
  142. Listing testet, werdet ihr vielleicht auch noch dessen Hintergrund und die
  143. Figuren darin sehen. Ja, denn mit einem  Reset  wird  der  Speicher  nicht
  144. gelöscht, das geschiegt nur bei einem totalen Abschalten.
  145. Mit beiden Tasten könnt ihr aussteigen. Probiert,  einige  Videospiele  zu
  146. laden,  einen  Reset zu machen und zu sehen, was übrig geblieben ist. Wenn
  147. ihr den Scroll verschnellern wollt, dann müßt ihr den Wert verändern,  der
  148. zu den Bitplane dazugezählt wird. Hauptsache, es ist ein Vielfaches von 80
  149. (Ihr wißt ja, die Geschichte mit den 640 Punkten, die 80 Byte ergeben,  im
  150. Gegensatz zu den 320 horizontalen Punkten des LowRes, bei dem grade mal 40
  151. Byte pro Zeile zustande kommen).
  152. Im Listing werden 3 Zeilen pro Durchgang genommen:
  153.  
  154.     sub.l    #80*3,d0    ; subtrahieren 80*3, also 3 Zeilen
  155.  
  156. Um  den  Scroll  mit TURBO zu machen, testet ein 80*10 oder mehr. Wenn ihr
  157. aus purer Neugierde wissen  möchtet,  auf  welcher  Adresse  ein  Bitplane
  158. steht, dann steigt aus und tippt "M BPLPOINTERS":
  159.  
  160.  
  161. XXXXXX 00 E0 00 02 00 E2 10 C0 ... (00 e0 = bplpointerH, 00 e2 das andere BPLP)
  162.  
  163. oder $00E0,$0002,$00E2,$10C0 ......
  164.  
  165. In diesem Beispiel ist die Adresse $0002 10c0, oder $210c0.
  166.  
  167.