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

  1.  
  2. ; Listing6e.s    ÜBERLAGERUNG VON ZWEI BITPLANES MIT EINER KLEINEN
  3. ;        VERSCHIEBUNG NACH UNTEN, UM EINEN RELIEF-EFFEKT ZU ERZEUGEN
  4.  
  5.     SECTION    CIPundCOP,CODE
  6.  
  7. Anfang:
  8.     move.l    4.w,a6        ; Execbase in a6
  9.     jsr    -$78(a6)    ; Disable - stoppt das Multitasking
  10.     lea    GfxName(PC),a1    ; Adresse des Namen der zu öffnenden Lib in a1
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase    ; speichere diese Adresse in GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; hier speichern wir die Adresse der Copperlist
  15.                 ; des Betriebssystemes
  16.  
  17. ;    POINTEN AUF UNSERE BITPLANES
  18.  
  19.     MOVE.L    #BITPLANE,d0    ; in d0 kommt die Adresse des PIC
  20.     LEA    BPLPOINTERS,A1    ; Pointer in der Copperlist
  21.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Planeadresse
  22.     swap    d0        ; vertauscht die 2 word in d0 (1234 > 3412)
  23.     move.w    d0,2(a1)    ; kopiert das hochw. Word der Planeadresse
  24.  
  25. ; NOTATE IL -80!!!!
  26.  
  27.     MOVE.L    #BITPLANE-80,d0 ; in d0 kommt die Adresse des Bitplane-80,
  28.                 ; also eine Zeile nach UNTEN verschoben!! ****
  29.     LEA    BPLPOINTERS2,A1 ; Pointer in der Copperlist
  30.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Planeadresse
  31.     swap    d0        ; vertauscht die 2 word in d0 (1234 > 3412)
  32.     move.w    d0,2(a1)    ; kopiert das hochw. Word der Planeadresse
  33.     
  34.  
  35.     
  36.     move.l    #COPPERLIST,$dff080    ; COP1LC - "Zeiger" auf 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.     bsr.w    print        ; Bringt den Text auf den Bildschirm
  42.  
  43. mouse:
  44.     
  45.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  46.     bne.s    mouse        ; wenn nicht, zurück zu mouse:
  47.  
  48.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  49.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  50.  
  51.     move.l    4.w,a6
  52.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  53.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  54.                 ; (Libraries werden geöffnet UND geschlossen!)
  55.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  56.     rts
  57.  
  58. ; DATEN
  59.  
  60. GfxName:
  61.     dc.b    "graphics.library",0,0
  62.  
  63. GfxBase:        ; Hier hinein kommt die Basisadresse der graphics.lib,
  64.     dc.l    0    ; ab hier werden die Offsets gemacht
  65.  
  66. OldCop:         ; Hier hinein kommt die Adresse der Orginal-Copperlist des
  67.     dc.l    0    ; Betriebssystemes
  68.  
  69. ;    Routine, die 8x8 Pixel große Buchstaben druckt
  70.  
  71. PRINT:
  72.     LEA    TEXT(PC),A0    ; Adresse des zu schreibenden Textes in a0
  73.     LEA    BITPLANE,A3    ; Adresse des Ziel-Bitplanes in a3
  74.     MOVEQ    #25-1,D3    ; ANZAHL DER ZEILEN, DIE ZU DRUCKEN SIND -> 15
  75. PRINTZEILE:
  76.     MOVEQ    #80-1,D0    ; ANZAHL DER SPALTEN EINER ZEILE: 80 (HIRES!)
  77.  
  78. PRINTCHAR2:
  79.     MOVEQ    #0,D2        ; Löscht D2
  80.     MOVE.B    (A0)+,D2    ; Nächster Charakter in d2
  81.     SUB.B    #$20,D2        ; ZÄHLE 32 VOM ASCII-WERT DES BUCHSTABEN WEG,
  82.                 ; SOMIT VERWANDELN WIR Z.B. DAS LEERZEICHEN
  83.                 ; (Das $20 entspricht), IN $00, DAS
  84.                 ; MALZEICHEN ($21) IN $01...
  85.     MULU.W    #8,D2        ; MULTIPLIZIERE DIE ERHALTENE ZAHL MIT 8,
  86.                 ; da die Charakter ja 8 Pixel hoch sind
  87.     MOVE.L    D2,A2
  88.     ADD.L    #FONT,A2    ; FINDE DEN GEWÜNSCHTEN BUCHSTEBEN IM FONT
  89.  
  90.                 ; DRUCKE DEN BUCHSTABEN ZEILE FÜR ZEILE
  91.     MOVE.B    (A2)+,(A3)    ; Drucke Zeile 1 des Buchstaben
  92.     MOVE.B    (A2)+,80(A3)    ; Drucke Zeile 2    "    "
  93.     MOVE.B    (A2)+,80*2(A3)    ; Drucke Zeile 3  "    "
  94.     MOVE.B    (A2)+,80*3(A3)    ; Drucke Zeile 4  "    "
  95.     MOVE.B    (A2)+,80*4(A3)    ; Drucke Zeile 5  "    "
  96.     MOVE.B    (A2)+,80*5(A3)    ; Drucke Zeile 6  "    "
  97.     MOVE.B    (A2)+,80*6(A3)    ; Drucke Zeile 7  "    "
  98.     MOVE.B    (A2)+,80*7(A3)    ; Drucke Zeile 8  "    "
  99.  
  100.     ADDQ.w    #1,A3        ; A3+1, wir gehen um 8 Bit weiter (zum
  101.                 ; nächsten Buchstaben
  102.     
  103.     DBRA    D0,PRINTCHAR2    ; DRUCKEN D0 (80) ZEICHEN PRO ZEILE
  104.  
  105.     ADD.W    #80*7,A3    ; "Return", neue Zeile
  106.  
  107.     DBRA    D3,PRINTZEILE    ; Wir drucken D3 Zeilen
  108.     
  109.     RTS
  110.     
  111.  
  112. TEXT:
  113.         ; Anzahl Charakter pro Zeile: 80, also 2 von diesen zu 40!
  114.  
  115.              ;            1111111111222222222233333333334
  116.              ;   1234567890123456789012345678901234567890
  117.     dc.b    '   ERSTE ZEILE IN  HIRES 640  PIXEL  BRE' ; 1a \ ERSTE ZEILE
  118.     dc.b    'ITE!  -- -- -- --  IMMER DIE ERSTE ZEILE' ; 1b /
  119.     dc.b    '                ZWEITE ZEILE            ' ; 2  \ ZWEITE ZEILE
  120.     dc.b    'AUCH NOCH ZWEITE ZEILE                  ' ;    /
  121.     dc.b    '     /\  /                              ' ; 3
  122.     dc.b    '                                        ' ;
  123.     dc.b    '    /  \/                               ' ; 4
  124.     dc.b    '                                        ' ;
  125.     dc.b    '                                        ' ; 5
  126.     dc.b    '                                        ' ;
  127.     dc.b    '        SECHSTE ZEILE                   ' ; 6
  128.     dc.b    '                      ENDE SECHSTE ZEILE' ;
  129.     dc.b    '                                        ' ; 7
  130.     dc.b    '                                        ' ;
  131.     dc.b    '                                        ' ; 8
  132.     dc.b    '                                        ' ;
  133.     dc.b    'FABIO CIUCCI COMMUNICATION INTERNATIONAL' ; 9
  134.     dc.b    ' MARKETING TRUST TRADEMARK COPYRIGHTED  ' ;
  135.     dc.b    '                                        ' ; 10
  136.     dc.b    '                                        ' ;
  137.     dc.b    '   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
  138.     dc.b    '       TECHNISCHER SENDETEST            ' ;
  139.     dc.b    '                                        ' ; 12
  140.     dc.b    '                                        ' ;
  141.     dc.b    '     SEIN ODER NICHT SEIN, DAS IST HIER ' ; 13
  142.     dc.b    ' DIE FRAGE...                           ' ;
  143.     dc.b    '                                        ' ; 14
  144.     dc.b    '                                        ' ;
  145.     dc.b    '                                        ' ; 15
  146.     dc.b    '                                        ' ;
  147.     dc.b    '  Das Fraeulein stand am Meere          ' ; 16
  148.     dc.b    '                                        ' ;
  149.     dc.b    '                                        ' ; 17
  150.     dc.b    '                                        ' ;
  151.     dc.b    '    UnD seufzte LanG uNd Bang,          ' ; 18
  152.     dc.b    '                                        ' ;
  153.     dc.b    '                                        ' ; 19
  154.     dc.b    '                                        ' ;
  155.     dc.b    '    Es ruehrte sie so sehre,            ' ; 20
  156.     dc.b    '                                        ' ;
  157.     dc.b    '                                        ' ; 21
  158.     dc.b    '                                        ' ;
  159.     dc.b    '  der Sonnenuntergang...                ' ; 22
  160.     dc.b    '                                        ' ;
  161.     dc.b    '                                        ' ; 23
  162.     dc.b    '                                        ' ;
  163.     dc.b    '                                        ' ; 24
  164.     dc.b    '                                        ' ;
  165.     dc.b    '                                        ' ; 25
  166.     dc.b    '                                        ' ;
  167.     dc.b    '                                        ' ; 26
  168.     dc.b    '                                        ' ;
  169.  
  170.  
  171.     EVEN
  172.     
  173.     SECTION GRAPHIC,DATA_C
  174.  
  175. COPPERLIST:
  176.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  177.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  178.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  179.     dc.w    $13e,$0000
  180.  
  181.     dc.w    $8E,$2c81    ; DiwStrt (Register mit Normalwerten)
  182.     dc.w    $90,$2cc1    ; DiwStop
  183.     dc.w    $92,$003c    ; DdfStart \ HIRES...
  184.     dc.w    $94,$00d4    ; DdfStop  /
  185.     dc.w    $102,0        ; BplCon1
  186.     dc.w    $104,0        ; BplCon2
  187.     dc.w    $108,0        ; Bpl1Mod
  188.     dc.w    $10a,0        ; Bpl2Mod
  189.  
  190.             ; 5432109876543210
  191.     dc.w    $100,%1010001000000000  ; Bit 13 - 2 Bitplanes, 4 Farben HIRES
  192.  
  193. BPLPOINTERS:
  194.     dc.w $e0,$0000,$e2,$0000    ;erstes  Bitplane
  195. BPLPOINTERS2:
  196.     dc.w $e4,$0000,$e6,$0000    ;zweites Bitplane
  197.  
  198.     dc.w    $180,$103    ; Color0 - HINTERGRUND
  199.     dc.w    $182,$fff    ; Color1 - Plane 1 Normalposition, es ist das
  200.                 ; Stück, das oben "übersteht"
  201.     dc.w    $184,$345    ; Color2 - Plane 2 (nach unten verschoben)
  202.     dc.w    $186,$abc    ; Color3 - beide Plane - Überlagerung
  203.  
  204.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  205.  
  206. ;    Der FONT, Charakter 8x8
  207.  
  208. FONT:
  209. ;    incbin    "metal.fnt"    ; Breiter Zeichensatz
  210. ;    incbin    "normal.fnt"    ; Ähnlich dem aus dem Kickstart 1.3
  211.     incbin    "nice.fnt"    ; Schmaler Zeichensatz
  212.  
  213.  
  214.     SECTION MEIPLANE,BSS_C    ; Die SECTION BSS können nur aus NULLEN
  215.                 ; bestehen!!! Man verwendet das DS.B um zu
  216.                 ; definieren, wieviele Nullen die Section
  217.                 ; enthalten soll
  218.     
  219.     ds.b    80    ; Die Zeile, die "übersteht"
  220. BITPLANE:
  221.     ds.b    80*256    ; ein Bitplane HIRES 640x256
  222.  
  223.     end
  224.  
  225. Hier ein kleiner "Trick", um unsere Schrift  etwas  netter  zu  gestalten:
  226. einfach  das  zweite Bitplane aktivieren und dem ersten überlagern, jedoch
  227. um eine Zeile nach unten verschoben, um folgende Situation hervorzurufen:
  228.  
  229.  
  230.     ...###..            ...111..    ; 1 = Color1 (Hell)
  231.     ..#...#.    ...###..    ..12221.    ; 2 = Color2 (Dunkel)
  232.     ..#...#.    ..#...#.    ..3...3.    ; 3 = Color3 (Mittel)
  233.     ..#####.+    ..#...#.=    ..31113.
  234.     ..#...#.    ..#####.    ..32223.
  235.     ..#...#.    ..#...#.    ..3...3.
  236.     ..#...#.    ..#...#.    ..3...3.
  237.     ........    ..#...#.    ..2...2.
  238.             ........
  239.  
  240.     dc.w    $180,$103    ; Color0 - HINTERGRUND
  241.     dc.w    $182,$fff    ; Color1 - Plane 1 Normalposition, es ist das
  242.                 ; Stück, das oben "übersteht"
  243.     dc.w    $184,$345    ; Color2 - Plane 2 (nach unten verschoben)
  244.     dc.w    $186,$abc    ; Color3 - beide Plane - Überlagerung
  245.  
  246.  
  247. Dieser Überlagerungseffekt von gleichen Bitplanes wird oft  verwendet,  um
  248. Reliefs und Schattierungen vorzutäuschen.
  249.  
  250. Um  diesen Aspekt noch weiters hervorzuheben, wird oft auch noch zur Seite
  251. verschoben, probiert das:
  252.  
  253.     dc.w    $102,$10    ; BplCon1 - Plane 2 um ein Pixel nach rechts
  254.  
  255. (Diese Zeile kommt in der Copperlist zwischen die beiden BPLPOINTER!)
  256.  
  257. Bei kleinen Fonts verschlechtert das zwar oft die Leserbarkeit,  aber  bei
  258. großen Flächen kann es manchmal toll aussehen:
  259.  
  260.     ......
  261.     .:::::#
  262.     .:::::#
  263.     .:::::#
  264.      ######
  265.  
  266.