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

  1.  
  2. ; Listing6d.s    HIRES UND LOWRES IM GLEICHEN SCREEN
  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+(40*50),d0 ; in d0 kommt die Adresse von unserer PIC,
  20.                 ; hier pointen wir 50 weiter nach vorne
  21.                 ; bzw. wo ihr erstes Bitplane beginnt
  22.  
  23.     LEA    BPLPOINTERS,A1    ; in a1 kommt die Adresse der Bitplane-
  24.                 ; Pointer der Copperlist
  25.     MOVEQ    #2,D1        ; Anzahl der Bitplanes -1 (hier sind es 3)
  26.                 ; für den DBRA - Zyklus
  27. POINTBP:
  28.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Planeadresse 
  29.     swap    d0        ; vertauscht die 2 Word in d0 (1234 > 3412)
  30.     move.w    d0,2(a1)    ; kopiert das hochw. Word der Adresse des Plnae
  31.     swap    d0        ; vertauscht erneut die 2 Word von d0
  32.     ADD.L    #40*256,d0    ; + Länge Bitplane -> nächstes Bitplane
  33.     addq.w    #8,a1        ; auf zum nächsten bplpointer in der COP
  34.     dbra    d1,POINTBP    ; wiederhole D1 mal POINTBP (D1=n. bitplanes)
  35.  
  36. ;    POINTEN AUF UNSER BITPLANE
  37.  
  38.     MOVE.L    #BITPLANE,d0    ; in d0 kommt die Adresse des PIC
  39.     LEA    BPLPOINTERS2,A1 ; Pointer in der Copperlist
  40.     move.w    d0,6(a1)    ; kopiert das niederw. Word der Planeadresse
  41.     swap    d0        ; vertauscht die 2 word in d0 (1234 > 3412)
  42.     move.w    d0,2(a1)    ; kopiert das hochw. Word der Planeadresse
  43.  
  44.     move.l    #COPPERLIST,$dff080    ; COP1LC - "Zeiger" auf unsere COP
  45.     move.w    d0,$dff088        ; COPJMP1 - Starten unsere COP
  46.     move.w    #0,$dff1fc        ; FMODE - Deaktiviert das AGA
  47.     move.w    #$c00,$dff106        ; BPLCON3 - Deaktiviert das AGA
  48.  
  49.     bsr.w    print        ; Bringt den Text auf den Bildschirm
  50.  
  51. mouse:
  52.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  53.     bne.s    mouse        ; wenn nicht, zurück zu mouse:
  54.  
  55.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  56.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  57.  
  58.     move.l    4.w,a6
  59.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  60.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  61.                 ; (Libraries werden geöffnet UND geschlossen!)
  62.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  63.     rts
  64.  
  65. ; DATEN
  66.  
  67. GfxName:
  68.     dc.b    "graphics.library",0,0    
  69.  
  70. GfxBase:        ; Hier hinein kommt die Basisadresse der graphics.lib,
  71.     dc.l    0    ; ab hier werden die Offsets gemacht
  72.  
  73. OldCop:         ; Hier hinein kommt die Adresse der Orginal-Copperlist des
  74.     dc.l    0    ; Betriebssystemes
  75.  
  76. ;    Routine, die 8x8 Pixel große Buchstaben druckt
  77.  
  78. PRINT:
  79.     LEA    TEXT(PC),A0    ; Adresse des zu schreibenden Textes in a0
  80.     LEA    BITPLANE,A3    ; Adresse des Ziel-Bitplanes in a3
  81.     MOVEQ    #15-1,D3    ; ANZAHL DER ZEILEN, DIE ZU DRUCKEN SIND -> 15
  82. PRINTZEILE:
  83.     MOVEQ    #80-1,D0    ; ANZAHL DER SPALTEN EINER ZEILE: 80 (HIRES!)
  84.  
  85. PRINTCHAR2:
  86.     MOVEQ    #0,D2        ; Löscht D2
  87.     MOVE.B    (A0)+,D2    ; Nächster Charakter in d2
  88.     SUB.B    #$20,D2        ; ZÄHLE 32 VOM ASCII-WERT DES BUCHSTABEN WEG,
  89.                 ; SOMIT VERWANDELN WIR Z.B. DAS LEERZEICHEN
  90.                 ; (Das $20 entspricht), IN $00, DAS
  91.                 ; MALZEICHEN ($21) IN $01...
  92.     MULU.W    #8,D2        ; MULTIPLIZIERE DIE ERHALTENE ZAHL MIT 8,
  93.                 ; da die Charakter ja 8 Pixel hoch sind
  94.     MOVE.L    D2,A2
  95.     ADD.L    #FONT,A2    ; FINDE DEN GEWÜNSCHTEN BUCHSTEBEN IM FONT
  96.  
  97.                 ; DRUCKE DEN BUCHSTABEN ZEILE FÜR ZEILE
  98.     MOVE.B    (A2)+,(A3)    ; Drucke Zeile 1 des Buchstaben
  99.     MOVE.B    (A2)+,80(A3)    ; Drucke Zeile 2  "    "
  100.     MOVE.B    (A2)+,80*2(A3)    ; Drucke Zeile 3  "    "
  101.     MOVE.B    (A2)+,80*3(A3)    ; Drucke Zeile 4  "    "
  102.     MOVE.B    (A2)+,80*4(A3)    ; Drucke Zeile 5  "    "
  103.     MOVE.B    (A2)+,80*5(A3)    ; Drucke Zeile 6  "    "
  104.     MOVE.B    (A2)+,80*6(A3)    ; Drucke Zeile 7  "    "
  105.     MOVE.B    (A2)+,80*7(A3)    ; Drucke Zeile 8  "    "
  106.  
  107.     ADDQ.w    #1,A3        ; A3+1, wir gehen um 8 Bit weiter (zum
  108.                 ; nächsten Buchstaben
  109.  
  110.     DBRA    D0,PRINTCHAR2    ; DRUCKEN D0 (80) ZEICHEN PRO ZEILE
  111.  
  112.     ADD.W    #80*7,A3    ; "Return", neue Zeile
  113.  
  114.     DBRA    D3,PRINTZEILE    ; Wir drucken D3 Zeilen
  115.     RTS
  116.  
  117.  
  118. TEXT:
  119.              ; Anzahl Charakter pro Zeile: 80, also 2 von diesen zu 40!
  120.  
  121.              ;            1111111111222222222233333333334
  122.              ;   1234567890123456789012345678901234567890
  123.  
  124.     dc.b    '   ERSTE ZEILE IN  HIRES 640  PIXEL  BRE' ; 1a \ ERSTE ZEILE
  125.     dc.b    'ITE!  -- -- -- --  IMMER DIE ERSTE ZEILE' ; 1b /
  126.     dc.b    '                ZWEITE ZEILE            ' ; 2  \ ZWEITE ZEILE
  127.     dc.b    'AUCH NOCH ZWEITE ZEILE                  ' ;    /
  128.     dc.b    '     /\  /                              ' ; 3
  129.     dc.b    '                                        ' ;
  130.     dc.b    '    /  \/                               ' ; 4
  131.     dc.b    '                                        ' ;
  132.     dc.b    '                                        ' ; 5
  133.     dc.b    '                                        ' ;
  134.     dc.b    '        SECHSTE ZEILE                   ' ; 6
  135.     dc.b    '                      ENDE SECHSTE ZEILE' ;
  136.     dc.b    '                                        ' ; 7
  137.     dc.b    '                                        ' ;
  138.     dc.b    '                                        ' ; 8
  139.     dc.b    '                                        ' ;
  140.     dc.b    'FABIO CIUCCI COMMUNICATION INTERNATIONAL' ; 9
  141.     dc.b    ' MARKETING TRUST TRADEMARK COPYRIGHTED  ' ;
  142.     dc.b    '                                        ' ; 10
  143.     dc.b    '                                        ' ;
  144.     dc.b    '   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
  145.     dc.b    '       TECHNISCHER SENDETEST            ' ;
  146.     dc.b    '                                        ' ; 12
  147.     dc.b    '                                        ' ;
  148.     dc.b    '     SEIN ODER NICHT SEIN, DAS IST HIER ' ; 13
  149.     dc.b    ' DIE FRAGE...                           ' ;
  150.     dc.b    '                                        ' ; 14
  151.     dc.b    '                                        ' ;
  152.     dc.b    '                                        ' ; 15
  153.     dc.b    '                                        ' ;
  154.     dc.b    '  Das Fraeulein stand am Meere          ' ; 16
  155.     dc.b    '                                        ' ;
  156.     dc.b    '                                        ' ; 17
  157.     dc.b    '                                        ' ;
  158.     dc.b    '    UnD seufzte LanG uNd Bang,          ' ; 18
  159.     dc.b    '                                        ' ;
  160.     dc.b    '                                        ' ; 19
  161.     dc.b    '                                        ' ;
  162.     dc.b    '    Es ruehrte sie so sehre,            ' ; 20
  163.     dc.b    '                                        ' ;
  164.     dc.b    '                                        ' ; 21
  165.     dc.b    '                                        ' ;
  166.     dc.b    '  der Sonnenuntergang...                ' ; 22
  167.     dc.b    '                                        ' ;
  168.     dc.b    '                                        ' ; 23
  169.     dc.b    '                                        ' ;
  170.     dc.b    '                                        ' ; 24
  171.     dc.b    '                                        ' ;
  172.     dc.b    '                                        ' ; 25
  173.     dc.b    '                                        ' ;
  174.     dc.b    '                                        ' ; 26
  175.     dc.b    '                                        ' ;
  176.  
  177.     EVEN
  178.  
  179.  
  180.     SECTION GRAPHIC,DATA_C
  181.  
  182. COPPERLIST:
  183.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  184.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  185.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  186.     dc.w    $13e,$0000
  187.  
  188.     dc.w    $8E,$2c81    ; DiwStrt (Register mit Normalwerten)
  189.     dc.w    $90,$2cc1    ; DiwStop
  190.     dc.w    $92,$0038    ; DdfStart
  191.     dc.w    $94,$00d0    ; DdfStop
  192.     dc.w    $102,0        ; BplCon1
  193.     dc.w    $104,0        ; BplCon2
  194.     dc.w    $108,0        ; Bpl1Mod
  195.     dc.w    $10a,0        ; Bpl2Mod
  196.             ; 5432109876543210
  197.     dc.w    $100,%0011001000000000  ; Bit 12 und 13 an!
  198.  
  199. BPLPOINTERS:
  200.     dc.w $e0,$0000,$e2,$0000    ;erstes  Bitplane
  201.     dc.w $e4,$0000,$e6,$0000    ;zweites Btplane
  202.     dc.w $e8,$0000,$ea,$0000    ;drittes Bitplane
  203.  
  204.     dc.w    $180,$000    ; Color0
  205.     dc.w    $182,$475    ; Color1
  206.     dc.w    $184,$fff    ; Color2
  207.     dc.w    $186,$ccc    ; Color3
  208.     dc.w    $188,$999    ; Color4
  209.     dc.w    $18a,$232    ; Color5
  210.     dc.w    $18c,$777    ; Color6
  211.     dc.w    $18e,$444    ; Color7
  212.  
  213. ;    HIER WERDEN BPLCON0,FARBEN,DDFSTART/STOP UND POINTER AU DIE BITPLANES
  214. ;    NEUDEFINIERT!
  215.  
  216.     dc.w    $a007,$FFFE
  217.  
  218.     dc.w    $92,$003c    ; DdfStart HIRES
  219.     dc.w    $94,$00d4    ; DdfStop HIRES
  220.  
  221.             ; 5432109876543210
  222.     dc.w    $100,%1001001000000000  ; 1 Bitplane HIRES 640x256
  223.  
  224. BPLPOINTERS2:
  225.     dc.w $e0,$0000,$e2,$0000    ;erstes Bitplane
  226.  
  227.     dc.w    $0180,$000    ; Color0 - HINTERGRUND
  228.     dc.w    $0182,$19a    ; Color1 - SCHRIFT
  229.  
  230.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  231.  
  232. ;    Der FONT, Charakter 8x8
  233.  
  234. FONT:
  235. ;    incbin    "metal.fnt"    ; Breiter Zeichensatz
  236. ;    incbin    "normal.fnt"    ; Ähnlich dem aus dem Kickstart 1.3
  237.     incbin    "nice.fnt"    ; Schmaler Zeichensatz
  238.  
  239. PIC:
  240.     incbin    "amiga.320*256*3"    ; hier laden wir das Bild in RAW
  241.  
  242.     SECTION MEIPLANE,BSS_C    ; Die SECTION BSS können nur aus NULLEN
  243.                 ; bestehen!!! Man verwendet das DS.B um zu
  244.                 ; definieren, wieviele Nullen die Section
  245.                 ; enthalten soll
  246.  
  247. BITPLANE:
  248.     ds.b    80*256    ; ein Bitplane HIRES 640x256
  249.  
  250.     end
  251.  
  252. Man könnte auch 50 mal in einem Screen  Auflösung  wechseln,  einfach  das
  253. BPLCON0  neudefinieren,  die Farben und die Pointer auf die Bitplanes. Das
  254. kann nützlich sein, wenn mitten im Bildschirm 32 Farben nötig  sind,  z.B.
  255. um  ein Männchen  in  einem   Videospiel  zu  bewegen,  darunter,  im
  256. Kontrollfeld/Punktefeld aber nur 16 oder  vielleciht  gar  nur  4.  Dieses
  257. könnte  man  zusätzlich noch in HiRes gestalten. Man braucht nur bedenken,
  258. daß desto mehr Zeilen in HiRes sind, desto langsamer wird  die  Ausführung
  259. des  Programmes  /  Spieles.  Desto  mehr  Farben  ins Spiel kommes, desto
  260. weniger Zeit haben die Coprozessoren und der 68000 selbst. Deswegen  macht
  261. sich  der  Aufwand  bezahlt,  nur  einige  Streifen  in  HiRes oder HAM zu
  262. gestalten, und den Rest in LowRes.  Man  kann  so  einen  guten  Kompromiß
  263. zwischen Augenschmaus und Geschwindigkeit finden.
  264.  
  265.  
  266.