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

  1.  
  2. ; by Fabio Ciucci - Assemblieren mit "A", ausführen mit "J"
  3.  
  4. Waitmouse:              ; diese LABEL steht als Referenzpunkt für das bne
  5.     move.w    $dff006,$dff180    ; gib den Wert von $dff006 in $dff180
  6.                 ; also von VHPOSR in COLOR00
  7.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  8.     bne.s    Waitmouse    ; wenn nicht, kehre zu Waitmouse zurück
  9.                 ; und wiederhole
  10.     rts            ; Ende, steig aus
  11.  
  12.     END
  13.  
  14. ; Anmerkung: der Befehl MOVE bedeutet soviel wie "Bewege", besser noch kopiere
  15. ; den Wert, der im ersten Operand enthalten ist, in den zweiten, in diesem Fall
  16. ; "LESE DEN WERT IN $DFF006 UND GIB IHN IN $DFF180". Das .w bedeutet, daß
  17. ; ein Word bewegt wird, also 2 Bytes -> 16 Bit (1 Byte = 8 Bit, 1 Word = 16
  18. ; Bit, 1 Longword = 32 Bit).
  19. ; Anmerkung 2: das BTST, gefolgt vom BNE dient dazu, einen Sprung im Programm
  20. ; zu machen, wenn eine Kondition eintrifft; es läßt sich so übersetzen:
  21. ; BTST = KONTROLLIERE, OB FRITZ DEN APFEL GEGESSEN HAT, UND SCHREIBE ES AUF
  22. ; EIN STÜCK PAPIER.
  23. ; BNE = DAS BNE LIEßT AUF DEM STÜCK PAPIER, OB FRITZ DEN APFEL GEGESSEN HAT,
  24. ; ER WEIß, DAß ER DAS NICHT SELBST TUN KANN, DAFÜR HAT ES IHM SEIN FREUND
  25. ; BTST GETAN... IM FALLE, DAß AUF DEM PAPIERFETZEN STEHT, DAß FRITZ DEN APFEL
  26. ; NICHT GEGESSEN HAT, DANN SPRINGE ZUR ANGEGEBENEN LABEL
  27. ; (BEI UNS BNE.S Waitmouse).
  28. ; Praktisch, wenn Fritz den Apfel nicht gegessen hat, springt der Prozessor
  29. ; zum Waitmaouse zurück und wiederhole alles; wenn er ihn hingegen gegessen
  30. ; hat, dann springe nicht zu Waitmouse, sondern fahre unter dem Befehl BNE
  31. ; fort. Hier findet er beim Beispielprogramm ein RTS, und damit ist das
  32. ; Programm zu Ende.
  33. ; Das Stück Papier, auf dem das BTST das Urteil für das BNE schreibt, heißt
  34. ; STATUS REGISTER, oder SR. Wenn statt dem BNE ein BEQ stehen würde, dann
  35. ; würde die Schleife nur solange ausgeführt, solange der Mausknopf gedrückt
  36. ; ist, und würde enden, sobald er losgelassen würde. (Das Gegenteil: Denn
  37. ; BNE bedeutet BRANCH IF NOT EQUAL, also SPRINGE, WENN NICHT GLEICH (falsch),
  38. ; während BEQ für BRANCH IF EQUAL steht, SPRINGE WENN GLEICH (wahr)).
  39. ; In der ersten Zeile wird der Wert ausgelesen, der sich in $dff006 befindet,
  40. ; also die Position des Elektronenstrahls auf dem Monitor, die sich klarerweise
  41. ; dauernd ändert ( so um die 50 mal pro Sekunde). Dieser Wert wird dann
  42. ; in die Adresse $DFF180 geschrieben, die die Farbe 0 kontrolliert, als
  43. ; Folge davon erhält man also den Bildschirm, der flackert, da die Farbe stets 
  44. ; geändert wird.
  45. ; Verifiziert, daß $DFF006 VHPOSR ist, indem ihr "=C 006" eintippt, das
  46. ; gleiche gilt für $DFF180 mit "=C 180". Diese Hilfe könnt ihr dem ASMONE
  47. ; über jedes Register aus der Reihe $DFFxxx abverlangen.
  48. ; Das Format der Farben ist das folgende: $0RGB, das Word (2 Byte) des 
  49. ; Registers ist also in RED, GREEN, BLUE aufgeteilt, mit 16 Tonalitäten
  50. ; (Farbabstufungen) pro Farbe; durch Mischen wie mit der PALETTE des
  51. ; Deluxe Paint kann man so eine der 4096 möglichen Farben auswählen
  52. ; (16x16x16=4096). Jeder Wert von Red, Green und Blue, also Rot, Grün
  53. ; und Blau, geht von 0 bis F (Hexzahlen...!). Probiert z.B. die erste 
  54. ; Zeile durch MOVE.W #$000,$DFF180 zu ersetzen: ihr werdet den Bildschirm
  55. ; in elegantes Schwarz hüllen, oder mit MOVE.W #$000e,$DFF180 , das
  56. ; ergibt ein modisches Blau, und mit MOVE.W #$cd0,$dff180 ein freches
  57. ; Gelb (Rot + Grün). Probiert selbst, die Farben zu tauschen, um zu
  58. ; kontrollieren, ob ihr den Mechanismus verstanden habt.
  59. ; #$444 = Grau, #$900 = Dunkelrot, #$e00 = helles Rot, #$0a0 Grün...
  60. ; Wenn ihr nun $dff180 durch $dff182 ersetzt, blinken nun die Schriften
  61. ; an Stelle des Hintergrundes, also das, was mit Farbe 1 (Color1) 
  62. ; "gemalt" ist.
  63. ; Der Befehl BTST kontrolliert, ob ein bestimmtes Bit an einer Adresse 0 ist
  64. ; Erinnert euch, daß die Bits von rechts nach links gelesen werden und
  65. ; daß man bei 0 startet, z.B. in einem Byte, das so aussieht:
  66. ; %01000000  Hier ist das sechste Bit auf 1:
  67. ;
  68. ; 76543210            5432109876543210
  69. ; 01000000     ein Word:    0001000000000000 <= Hier ist Bit 12 auf 1!
  70. ;
  71. ; P.S: Das erste Bit wird Bit 0 und nicht Bit 1 genannt, da darf man sich
  72. ;      nicht verfehlen, also daß das siebte Bit "Bit 6" genannt wird. Um
  73. ;      nichts falsch zu machen, gebt ev. eine Numerierung über die
  74. ;      Binärzahl.
  75. ; Das Bit 6 von $bfe001 ist der linke Mausknopf. Der Name des Registers
  76. ; ist CIAAPRA, aber das erinnert sich sowieso niemand...
  77. ; Der rechte Mausknopf hingegen befindet sich auf Bit 2 von $dff016. Testet
  78. ; mal, was passiert, wenn ihr BTST #6,$bfe001 mit BTST #2,$bfe016 ersetzt.
  79. ; Was wohl...jetzt braucht´s den rechten Mausknopf, um alles abzubrechen!
  80. ; Macht mir ja alle vorgeschlagenen Änderungen, dann übt ihr!!
  81. ; Anmerkung: Wenn ihr die Programme so speichern wollt, daß sie von
  82. ; der Shell/CLI ausführbar sind, müßt ihr nur ein "WO" tippen, nachdem
  83. ; ihr mit "A" assembliert habt. Gebt im Fenster einen Namen ein, und
  84. ; speichert es auf eine andere Diskette ab! Wehe, ihr überschreibt
  85. ; meinen Kurs!!! Schreibschutz zu!
  86. ; Wollt ihr aber das Listing abspeichern, tippt "W" (immer auf eine andere
  87. ; Diskette !!!)
  88.  
  89. ; PSPS: Habt ihr beim BNE den Suffix bemerkt? Er war weder .B, noch .W
  90. ; und auch nicht .L! Bei Befehlen wie BNE, BEQ, BSR kann man nur zwischen
  91. ; .B und .W auswählen, am Resultat ändert sich aber nichts, denn BNE.B
  92. ; tut genau das gleiche wie BNE.W. Bei diesen Befehlen ist erlaubt, ein
  93. ; .s anstelle des .B zu verwenden, es steht für SHORT (kurz), und man
  94. ; kann es nur verwenden, wenn das Label, das angesprungen werden soll,
  95. ; nicht zu "weit weg" liegt. Ansonsten ersetzt der ASMONE während des 
  96. ; assemblierens automatisch das .s in .W. Da das .S (das wie gesagt für
  97. ; .B steht, nur für solche Instruktionen in Frage kommt, glaube ich, ist
  98. ; es besser, man verwendet es. Nun wißt ihr´s, es dürften keine Probleme
  99. ; mehr auftreten.
  100. ; PSPSPS: Wenn ihr trotzdem ein .L unterschmuggelt, sieht es der ASMONE
  101. ; als .W, und assembliert es dementsprechend, andere Assembler melden
  102. ; einen Fehler. Wenn ihr vergesst, einen Suffix zu geben (BNE LABEL), 
  103. ; wird es immer als .W interpretiert. Das gleiche gilt für die anderen
  104. ; Befehle. Ein MOVE $10,$20 ergibt keinen Fehler, denn es wird als
  105. ; MOVE.W $10,$20 angeschaut. DAS BEDEUTET ABER NICHT, DAß ALLE ASSEMBLER
  106. ; GLEICH GÜTIG SIND!! Daher hängt ihn immer an, es ist auch ästhetisch
  107. ; schöner... 
  108.  
  109.