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

  1.  
  2. ; Listing6f.s        SCHREIBEN "ÜBER" EINEM BILD
  3.  
  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    #PIC,d0        ; in d0 kommt die Adresse von unserer PIC
  20.                 ; bzw. wo ihr erstes Bitplane beginnt
  21.  
  22.     LEA    BPLPOINTERS,A1    ; in a1 kommt die Adresse der Bitplane-
  23.                 ; Pointer der Copperlist
  24.     MOVEQ    #2,D1        ; Anzahl der Bitplanes -1 (hier sind es 3)
  25.                 ; für den DBRA - Zyklus
  26. POINTBP:
  27.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Planeadresse
  28.     swap    d0        ; vertauscht die 2 Word in d0 (1234 > 3412)
  29.     move.w    d0,2(a1)    ; kopiert das hochw. Word der Adresse des Plnae
  30.     swap    d0        ; vertauscht erneut die 2 Word von d0
  31.     ADD.L    #40*256,d0    ; + Länge Bitplane -> nächstes Bitplane
  32.     addq.w    #8,a1        ; auf zum nächsten bplpointer in der COP
  33.     dbra    d1,POINTBP    ; wiederhole D1 mal POINTBP (D1=n. bitplanes)
  34.  
  35. ;    POINTEN AUF UNSER BITPLANE
  36.  
  37.     MOVE.L    #BITPLANE,d0    ; in d0 kommt die Adresse des PIC
  38.     LEA    BPLPOINTERS2,A1 ; Pointer in der Copperlist
  39.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Planeadresse
  40.     swap    d0        ; vertauscht die 2 word in d0 (1234 > 3412)
  41.     move.w    d0,2(a1)    ; kopiert das hochw. Word der Planeadresse
  42.  
  43.     move.l    #COPPERLIST,$dff080    ; COP1LC - "Zeiger" auf unsere COP
  44.     move.w    d0,$dff088        ; COPJMP1 - Starten unsere COP
  45.     move.w    #0,$dff1fc        ; FMODE - Deaktiviert das AGA
  46.     move.w    #$c00,$dff106        ; BPLCON3 - Deaktiviert das AGA
  47.  
  48.     bsr.w    print        ; Bringt den Text auf den Bildschirm
  49.  
  50. mouse:
  51.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  52.     bne.s    mouse        ; wenn nicht, zurück zu mouse:
  53.  
  54.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  55.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  56.  
  57.     move.l    4.w,a6
  58.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  59.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  60.                 ; (Libraries werden geöffnet UND geschlossen!)
  61.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  62.     rts
  63.  
  64. ; DATEN
  65.  
  66. GfxName:
  67.     dc.b    "graphics.library",0,0    
  68.  
  69. GfxBase:        ; Hier hinein kommt die Basisadresse der graphics.lib,
  70.     dc.l    0    ; ab hier werden die Offsets gemacht
  71.  
  72. OldCop:         ; Hier hinein kommt die Adresse der Orginal-Copperlist des
  73.     dc.l    0    ; Betriebssystemes
  74.  
  75. ;    Routine, die 8x8 Pixel große Buchstaben druckt
  76.  
  77. PRINT:
  78.     LEA    TEXT(PC),A0    ; Adresse des zu schreibenden Textes in a0
  79.     LEA    BITPLANE,A3    ; Adresse des Ziel-Bitplanes in a3
  80.     MOVEQ    #26-1,D3    ; ANZAHL DER ZEILEN, DIE ZU DRUCKEN SIND -> 25
  81. PRINTZEILE:
  82.     MOVEQ    #40-1,D0    ; ANZAHL DER SPALTEN EINER ZEILE: 40 (LOWRES!)
  83.  
  84. PRINTCHAR2:            
  85.     MOVEQ    #0,D2        ; Löscht D2
  86.     MOVE.B    (A0)+,D2    ; Nächster Charakter in d2
  87.     SUB.B    #$20,D2        ; ZÄHLE 32 VOM ASCII-WERT DES BUCHSTABEN WEG,
  88.                 ; SOMIT VERWANDELN WIR Z.B. DAS LEERZEICHEN
  89.                 ; (Das $20 entspricht), IN $00, DAS
  90.                 ; MALZEICHEN ($21) IN $01...
  91.     MULU.W    #8,D2        ; MULTIPLIZIERE DIE ERHALTENE ZAHL MIT 8,
  92.                 ; da die Charakter ja 8 Pixel hoch sind
  93.     MOVE.L    D2,A2
  94.     ADD.L    #FONT,A2    ; FINDE DEN GEWÜNSCHTEN BUCHSTEBEN IM FONT
  95.  
  96.                 ; DRUCKE DEN BUCHSTABEN ZEILE FÜR ZEILE
  97.     MOVE.B    (A2)+,(A3)    ; Drucke Zeile 1 des Buchstaben
  98.     MOVE.B    (A2)+,40(A3)    ; Drucke Zeile 2  "    "
  99.     MOVE.B    (A2)+,40*2(A3)    ; Drucke Zeile 3  "    "
  100.     MOVE.B    (A2)+,40*3(A3)    ; Drucke Zeile 4  "    "
  101.     MOVE.B    (A2)+,40*4(A3)    ; Drucke Zeile 5  "    "
  102.     MOVE.B    (A2)+,40*5(A3)    ; Drucke Zeile 6  "    "
  103.     MOVE.B    (A2)+,40*6(A3)    ; Drucke Zeile 7  "    "
  104.     MOVE.B    (A2)+,40*7(A3)    ; Drucke Zeile 8  "    "
  105.  
  106.     ADDQ.w    #1,A3        ; A3+1, wir gehen um 8 Bit weiter (zum
  107.                 ; nächsten Buchstaben
  108.  
  109.     DBRA    D0,PRINTCHAR2    ; DRUCKEN D0 (80) ZEICHEN PRO ZEILE
  110.  
  111.     ADD.W    #40*7,A3    ; "Return", neue Zeile
  112.  
  113.     DBRA    D3,PRINTZEILE    ; Wir drucken D3 Zeilen
  114.     RTS
  115.  
  116.  
  117. TEXT:
  118.                 ; Anzahl Charakter pro Zeile: 80, also 2 von diesen zu 40!
  119.  
  120.  
  121.              ;            1111111111222222222233333333334
  122.              ;   1234567890123456789012345678901234567890
  123.  
  124.     dc.b    '                                        ' ; 1
  125.     dc.b    '                ZWEITE ZEILE            ' ; 2
  126.     dc.b    '     /\  /                              ' ; 3
  127.     dc.b    '    /  \/                               ' ; 4
  128.     dc.b    '                                        ' ; 5
  129.     dc.b    '        SECHSTE ZEILE                   ' ; 6
  130.     dc.b    '                                        ' ; 7
  131.     dc.b    '                                        ' ; 8
  132.     dc.b    'FABIO CIUCCI COMMUNICATION INTERNATIONAL' ; 9
  133.     dc.b    '                                        ' ; 10
  134.     dc.b    '   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
  135.     dc.b    '                                        ' ; 12
  136.     dc.b    ' -=-    ICH DENKE, ALSO BIN ICH...  -=- ' ; 13
  137.     dc.b    ' ## sagte mal jemand, aber er gefiel ## ' ; 14
  138.     dc.b    ' ///dem Cartoonzeichner nicht und   \\\ ' ; 15
  139.     dc.b    '       so wurde er ausradiert...        ' ; 16
  140.     dc.b    '                                        ' ; 17
  141.     dc.b    '  Das Fraeulein stand am Meere          ' ; 18
  142.     dc.b    '                                        ' ; 19
  143.     dc.b    '    und seufzte lang und bang,          ' ; 20
  144.     dc.b    '                                        ' ; 21
  145.     dc.b    '    ES RUEHRTE SIE SO SEHRE,            ' ; 22
  146.     dc.b    '                                        ' ; 23
  147.     dc.b    '  der Sonnenuntergang.                  ' ; 24
  148.     dc.b    '                                        ' ; 25
  149.     dc.b    '            ...                         ' ; 26
  150.  
  151.  
  152.     EVEN
  153.  
  154.     SECTION GRAPHIC,DATA_C
  155.  
  156. COPPERLIST:
  157.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  158.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  159.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  160.     dc.w    $13e,$0000
  161.  
  162.     dc.w    $8E,$2c81    ; DiwStrt (Register mit Normalwerten)
  163.     dc.w    $90,$2cc1    ; DiwStop
  164.     dc.w    $92,$0038    ; DdfStart
  165.     dc.w    $94,$00d0    ; DdfStop
  166.     dc.w    $102,0        ; BplCon1
  167.     dc.w    $104,0        ; BplCon2
  168.     dc.w    $108,0        ; Bpl1Mod
  169.     dc.w    $10a,0        ; Bpl2Mod
  170.     
  171.             ; 5432109876543210
  172.     dc.w    $100,%0100001000000000  ; Bit 14 - 4 Bitplanes, 16 Farben HIRES
  173.  
  174. BPLPOINTERS:
  175.     dc.w $e0,$0000,$e2,$0000    ;erstes  Bitplane
  176.     dc.w $e4,$0000,$e6,$0000    ;zweites Bitplane
  177.     dc.w $e8,$0000,$ea,$0000    ;drittes Bitplane
  178. BPLPOINTERS2: 
  179.     dc.w $ec,$0000,$ee,$0000    ;viertes Bitplane
  180.  
  181.     dc.w    $180,$000    ; Color0 ; Farben des Bildes, ein bißchen
  182.     dc.w    $182,$354    ; Color1 ; gedämpft
  183.     dc.w    $184,$678    ; Color2
  184.     dc.w    $186,$567    ; Color3
  185.     dc.w    $188,$455    ; Color4
  186.     dc.w    $18a,$121    ; Color5
  187.     dc.w    $18c,$455    ; Color6
  188.     dc.w    $18e,$233    ; Color7
  189.  
  190.     dc.w    $190,$d6e    ; Color8  ; Die Farben der Schrift:
  191.     dc.w    $192,$d6e    ; Color9  ; beim Überlagern würden sich
  192.     dc.w    $194,$d6e    ; Color10 ; immer andere Farben ergeben, aber
  193.     dc.w    $196,$d6e    ; Color11 ; wir geben ihnen allen den gleichen
  194.     dc.w    $198,$d6e    ; Color12 ; Wert, so ist es immer die gleiche
  195.     dc.w    $19a,$d6e    ; Color13 ; Farbe
  196.     dc.w    $19c,$d6e    ; Color14
  197.     dc.w    $19e,$d6e    ; Color15
  198.  
  199.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  200.  
  201. ;    Der FONT, Charakter 8x8
  202.  
  203. FONT:
  204. ;    incbin    "metal.fnt"    ; Breiter Zeichensatz
  205. ;    incbin    "normal.fnt"    ; Ähnlich dem aus dem Kickstart 1.3
  206.     incbin    "nice.fnt"    ; Schmaler Zeichensatz
  207.  
  208. PIC:
  209.     incbin    "amiga.320*256*3"    ; hier laden wir das Bild in RAW
  210.  
  211.  
  212.     SECTION MEIPLANE,BSS_C    ; Die SECTION BSS können nur aus NULLEN
  213.                 ; bestehen!!! Man verwendet das DS.B um zu
  214.                 ; definieren, wieviele Nullen die Section
  215.                 ; enthalten soll
  216.  
  217. BITPLANE:
  218.     ds.b    40*256    ; ein Bitplane LOWRES 320x256
  219.  
  220.     end
  221.  
  222. In diesem Beispiel haben wir das Bitplane 4 dazugenommen, auf ihm wird der
  223. Text geschrieben. Mit diesem vierten Bitplane gehen wir von 8 zu 16 Farben
  224. über, um also die Schrift in jeder Position gleichfarbig zu behalten, müßen wir
  225. alle 8 zusätzlichen Farben, die sich ergeben können, gleich sezten.
  226. Sie alle erhalten die "Textfarbe".
  227. Wenn die "neuen" 8 Farben aber ähnlich sind wie die ersten 8, nur heller,
  228. dann kann man eine Art "Transparenz" erzeugen. Denn jedesmal wenn sich das
  229. "Textplane" einem Pixel überlagert, wird eine Farbe aus dem "neuen"
  230. Repertoir angezeigt, und wenn diese gleich mit den alten ist, nur etwas heller,
  231. kommt es automatisch zu diesem Effekt.
  232. Versucht mal, die Palette der letzten 8 Farben mit dieser zu ersetzen:
  233.  
  234.     dc.w    $190,$454    ; color8  ; Die Farben der Schrift:
  235.     dc.w    $192,$7a8    ; color9  ; in diesem Fall erzeugen wir
  236.     dc.w    $194,$eef    ; color10 ; 8 verschieden Farben für die
  237.     dc.w    $196,$cde    ; color11 ; 8 Überlagerungsmöglichkeiten, die
  238.     dc.w    $198,$aab    ; color12 ; sich ergeben können- bemerkt
  239.     dc.w    $19a,$786    ; color13 ; ihr, daß sie ähnlich zu den
  240.     dc.w    $19c,$9aa    ; color14 ; ersten 8 sind, nur leuchtender:
  241.     dc.w    $19e,$789    ; color15 ; es kommt der "TRASPARENZ"-Effekt
  242.                       ; zustande
  243.  
  244.