home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD1.iso / DEMOS / ?-NamelessIssue4.DMS / ?-NamelessIssue4.adf / SOFTWARE / Kurs.pp / Kurs
Encoding:
Text File  |  1991-01-14  |  18.1 KB  |  376 lines

  1. @UB  Teil -3- des Assemblerkurses von Ulf Zschukelt ...........
  2. @CO30
  3.  
  4. ReDaX -- Weiß der Teufel warum ich in der No. 3 diesen dritten Teil des
  5.          umfangreichen Kurses vergessen hatte aufzunehmen.
  6.          Hiermit hole ich dies nach.
  7.  
  8.          Infolge Platzmangel ist es mir allerdings nicht mehr möglich
  9.          das Beiwerk zu dem Kurs, also Beispielprogis usw. auf die
  10.          NameLess zu packen. Daher mein Angebot. Wer mir 1.50 DM in
  11.          Briefmarken zuschickt bekommt die Bewispielprogis für diesen
  12.          Kurs auf einer gesonderten Disk geliefert. Bei diesem Preis
  13.          lege ich, wie leicht nachzurechnen ist, drauf -- ist mir aber
  14.          die Mühe von Ulf wert. Für Leute (die es leider immer gibt)
  15.          die meinen auf diese Weise an eine billige Disk zu kommen,
  16.          ist dies nicht profitabel -- also kann ich das Angebot ruhigen
  17.          Gewissens machen, - es werden sich hier vermutlich dann nur
  18.          Programmierer mit echtem Interesse melden. Also nur zu ....
  19. @NS
  20. @CO30      
  21.               ***************************************************
  22.               *     Copyright by SSC-Software                   *
  23.               *                  c/o Ulf Zschuckelt             *
  24.               *                  Karl-Marx-Straße 1             *
  25.               *                  O-8403 Nünchritz               *
  26.               *                  BR Deutschland                 *
  27.               *                  Tel. (49) 035265-6791          *
  28.               *                                                 *
  29.               *                  Konto: 43305074                *
  30.               *                  Kreissparkasse Riesa           *
  31.               *                  BLZ 85054982                   *
  32.               *                                                 *
  33.               * Die Texte dürfen nur komplett weitergegeben     *
  34.               * oder nur mit meiner Zustimmung in anderen       *
  35.               * Serien veröffendlicht werden !                  *
  36.               * Diesen Kurs giebt es für alle kostenlos. Wer    *
  37.               * ihn gut findet und etwas damit anfangen kann,   *
  38.               * sollte mich freundlicher Weise mit neuen Pro-   *
  39.               * grammen oder finanziell unter stützen. Ich      *
  40.               * mußte für diesen Kurs viele Tage arbeiten !!!   *
  41.               ***************************************************
  42. @CO20
  43. !! Rechtschreibfehler werden z.B. im DUDEN berichtigt !!
  44.  
  45.  
  46. ASSEMBLERKURS FÜR AMIGA (TEIL 3)               Autor: Ulf Zschuckelt
  47. --------------------------------
  48.  
  49. Datum: 06.12.92
  50. Thema: Scrolldemo
  51. System: AMIGA mit OS 2.0
  52.  
  53. 1.Vorwort
  54. ---------
  55.  
  56. Die  Grundlage  für schnelle Spiele ist das schnelle Scrolling von Grafiken
  57. über den Bildschirm in alle Richtungen. Auf Grund  seiner  Hardwarestruktur
  58. ist  der  AMIGA  dazu  ohne  Probleme  sehr gut zu gebrauchen. Es muß dabei
  59. nicht, wie bei anderen Computern, das ganze  Bild  verschoben  werden.  Der
  60. Copper    kann   uns  die  Arbeit  abnehmen,  indem  er  Startadressen  des
  61. Bildschirms lädt und somit nur einen Ausschnitt auf dem Speicher zeigt.  Es
  62. wird  ein  Bild  mit  50  Hz  dargestellt ohne die CPU zu beanspruchen. Mit
  63. Hilfe des Blitters kann dann in das Bild beliebige  Grafik  ein  gearbeitet
  64. werden.    Der    Blitter    kann   wiederum  ohne  die  CPU  arbeiten.  Zu
  65. Blitter-Arbeiten kommt eventuell noch ein Kurs. Aber es soll ja  jetzt  nur
  66. am das Scrolling gehen.
  67. Nach  diesem  Teil  meines  Assemblerkurses  werde  ich  an  meinem  ersten
  68. Spielprojekt arbeiten. Später giebt es dann wieder Assemblerkurse  (Blitter
  69. usw.). Dann werden sich schon 256 Farben über den Bildschirm quälen (A1200
  70. und A4000 !!!).
  71. Das  Beispielprogramm  und das Bild (Kim.ILBM) sind gepackt. Also ein wenig
  72. Ausdauer. Die Datei "Kim" sind die reinen Bitplane-Bilddaten, die  für  den
  73. Quelltext  benötigt  werden.  Das  Scrolling  kann  auf  7 MHz AMIGAs unter
  74. Umständen mal stocken, da die Synchronisation  sehr  einfach  gemacht  ist.
  75. Das  läßt  sich  auch  noch  änder.  Das  würde  aber  den Rahmen des Kures
  76. sprengen.
  77. Alles  müßte  auch  unter  Kickstart  1.3  laufen.  Hab  es   aber    nicht
  78. ausprobiert.  Ich  wünsche  euch viel Erfolg beim Programmieren. Mal sehen,
  79. was ihr daraus macht ?!
  80.  
  81.                                       Ulf Zschuckelt
  82.  
  83.  
  84. 2.Beispielprogramm
  85. ------------------
  86.  
  87. 2.1.Grundprinzip
  88. ----------------
  89.  
  90. Das  ganze  Prinzip läuft wieder auf unseren guten alten Copper heraus. Der
  91. AMIGA hat immer eine Copperliste aktiv, in der  das  Bild  aufgebaut  wird.
  92. Wir  erstellen  uns  auch  eine  Copperliste,  die  unser  gewünschtes Bild
  93. aufbaut. Dieses Bild hat eine Größe von 640 x 512 Pixeln. Unser  Bildschirm
  94. ist  auf  320  x  256  Pixel  eingestellt,  so das wir wir nur ¼ des Bildes
  95. sehen. Um Alles sehen zukönnen mußen  wir  im  Bild  rollen.  Dies  erfolgt
  96. pixelweise  wie  beim  Scrollen großer Lanschaften in Spielen. Die Routinen
  97. sollen ja auch in einem Spiel verwendet werden.
  98. Man muß dabei nur die  Werte  in  der  Copperliste  verändern.  Der  Copper
  99. steuert dann den Bildaufbau  so,  daß  50  mal  in  der  Sekunde  das  Bild
  100. aufgebaut wird.
  101.  
  102. 2.2.Hardwaresteurung
  103. --------------------
  104.  
  105. Ich  möchte  zunächst  alle  Hardwareregister,  die  ich noch nicht erklärt
  106. haben,  erklären.  Ich  beschränke  mich  dabei  auf  die,  die   in    dem
  107. Beispielprohgramm benötigt werden.
  108.  
  109. Ab  $0e0  (plus  Basisadresse  $dff000)  beginnen  die  Zeiger  für  die  6
  110. möglichen Bitplanes. Das sind immer 4 Bytes, wobei  das  höherwertige  Wort
  111. als  erstes geschrieben wird. Hier werden die Anfangsadressen der Bitplanes
  112. des Bildes eingetragen, die sich auf der Größe des Bildes errechnen.
  113.  
  114. Die  Moduleregister für die geraden und ungeraden Bitplanes ($108 und $10a)
  115. legen fest wieviel Datenworte nach  dem  Aufbau  einer  Zeile  übersprungen
  116. werden  sollen.  Dies  ist  wichtig,  wenn  wie  in  unserem  Beispiel  ein
  117. Ausschnitt aus einem übergroßen Bild dargestellt werden soll.  Bei  solchen
  118. Bildern  beginnt  für  unseren Bildschirm die nächste Zeile erst später, da
  119. er nicht so breit ist.
  120. Die  Modulowerte  werden  getrennt  für  gerade  und  ungerade    Bitplanes
  121. eingegeben.  Dadurch  ist es uns möglich rechteckige Ausschnitte aus Bilder
  122. darzustellen.
  123.  
  124. Die DIWSTRT ($08e) und DIWSTOP ($090) legen die Position und die Größe  des
  125. Bildchirmfensters.  Um  einen  normalen  Bildschirm zu erhalten werden hier
  126. $3081 und $30c1 eingetragen.
  127.  
  128. Die DDFSTRT ($092) und DDFSTOP ($094) legen den Start  bzw.  Stop  des  DMA
  129. fest.  Es  wird  dabei  festgelegt, wann horizontal mir dem Lesen von Daten
  130. begonnen  bzw.  geendet  wird.  Für  einen normalen Bildschirm gibt es auch
  131. hier Standardwerte: $0038 und $00d0.
  132.  
  133. Um unser Bild mit einem Joystick steuern zu können. Das  erfolgt  über  das
  134. JAOYDAT1-Register  ($dff00c).  Wie  daraus  nun  die nötigen Infos gewonnen
  135. werden wird in der Erklärung zum Quelltext erläutert.
  136.  
  137. 2.3.Der Quelltext
  138. -----------------
  139.  
  140. 2.3.1 Vorprogramm
  141. -----------------
  142.  
  143. Als erstes werden alle Basepointer festgelegt.  Das  ganze  spart  kostbare
  144. Rechenzeit  beim  späteren  Aufruf  der  Werte  und  macht  es  alles etwas
  145. übersichtlicher.  Es  werden  nun  die  wichtigsten  Größen    zu    Arbeit
  146. festgelegt:
  147.  
  148.  planesize:     equ 40*256       ;Größe der Bit-Plane
  149.  picsize:       equ 80*512       ;Größe des Bildes
  150.  clsize:        equ 10*4         ;Länge der Copperliste
  151.  chip:          equ 2            ;Chip-Memory anfordern
  152.  
  153. Der  Bildschirm  hat  also eine Größe von 320 x 256 Pixel, was der normalen
  154. LO-RES-Auflösung entspricht.  In  horizontaler  Richtung  hat  ein  Byte  8
  155. Pixel,  also  ist  der  Bildschirm 40 Bytes breit und 256 Zeilen hoch. Eine
  156. Bitplane hat somit 40*256 Bytes. Das gesamte  Bild,  das  sich  im  Seicher
  157. befindet  ist  aber 640 x 512 Pixel groß. Eine Bitplane des Bildes hat eine
  158. Größe von 80*512 Bytes. Die Bilddaten und die Copperliste  müssen  sich  im
  159. Chip-Memory    befinden.    Dieser   wird  mit  Hilfe  des  Betriebssystems
  160. angefordert. Wenn  man einen AMIGA mit Fast-Memory hat, ist es möglich, daß
  161. das Programm nicht in den Fast-Memory geladen wird. Dort  ist  es  für  die
  162. Coprozessoren    des   AMIGAS  nicht  mehr  erreichbar.  Es  wird  also  in
  163. reservierten    Speicher  kopiert.  Es  wird  der  Platz  für  4  Bitplanes
  164. angefordert. Es sind dadurch 16 Farben, die in unserem Beispiel  GRaustufen
  165. sind, möglich.
  166.  
  167. Für  unsere  Copperliste  muß  auch  der  Speicher  angefordert werden. Der
  168. Copper soll den Bildaufbau steuern. Er muß also die  Bitplanezeiger  für  4
  169. Bitplanes beschreiben. Das würde ungefähr so aussehen:
  170.  
  171.  AdrPlanexH = Adresse der Plane x , Bits 16-20
  172.  AdrPlanexL = Adresse der Plane x , Bits 0-15
  173.  
  174.  move #AdrPlane1H,BPL1PTH   ;Zeiger auf Bit-plane 1 setzen
  175.  move #AdrPlane1L,BPL1PTL
  176.  move #AdrPlane2H,BPL2PTH   ;Zeiger auf Bit-plane 2 setzen
  177.  move #AdrPlane2L,BPL2PTL
  178.  move #AdrPlane3H,BPL3PTH   ;Zeiger auf Bit-plane 3 setzen
  179.  move #AdrPlane3L,BPL3PTL
  180.  move #AdrPlane4H,BPL4PTH   ;Zeiger auf Bit-plane 4 setzen
  181.  move #AdrPlane4L,BPL4PTL
  182.  wait ($ff,$fe)             ;Ende der Copperliste
  183.  
  184. Das    Programm   berechnet  unsere  Copperliste  automatisch.  Für  andere
  185. Bildgrößen müßte es eventuell nur in  der  Anzahl  der  Bitplanes  und  der
  186. Länge des zu reservierenden Speichers verändert werden.
  187.  
  188. Jetzt kommt  ein  Teil, woran sehr viele Programmieren nicht gedacht haben.
  189. Wieso denn auch ? Es läuft ja alles 1A bei ihnen. Das Problem ist, das  ich
  190. bei  vielen  Programmen Probleme habe diese vom Productivity-Modus (nur mit
  191. Multi-Syncron-Monitor) aus gut nutzen  zu  können.  Es  entsteht  dann  der
  192. absolute    Garfikmatsch,    weil   nicht  korekt  auf  den  Standard-Modus
  193. umgeschaltet wird. Alle Hardware-Hacker sollten es mal  so  versuchen,  wie
  194. ich  es  versucht habe. Ich öffnen einen Screen mit 320 x 256 Punkten und 2
  195. Farben. Das  ganze  verbraucht  zwar  etwas  Speicherplatz,  ist  aber  die
  196. sicherste  Methode  alles  für den benötigten Screen umzuschalten. Nach dem
  197. Schließen diese Screens ist man wieder in dem Bildschirmmodus, wo  man  vor
  198. dem  Start  war.  Geschwindigkeitsverlust für das später Programm bring das
  199. nicht, da dieser Bildschirm später unterdückt wird, wenn wir einen  eigenen
  200. Bildschirm aufbauen.
  201.  
  202. 2.3.2.Bildaufbau
  203. ----------------
  204.  
  205. Bevor   das  Hauptprogramm  gestartet  wird  werden  alle  im  Multitasking
  206. laufenden Programme Programme  gestoppt,  damit  die  volle  Rechenleistung
  207. ausgenutzt werden kann. Dies gesschied mit der Exec-Funktion "Forbid".
  208. In  das  Adressregister  A5 wird noch die Basisadresse der Hardwareregister
  209. $DFF000 geladen. Damit es bei dem Umstellen  auf  das  neu  Bild  nicht  zu
  210. Komplikationen  kommt  wird  der DMA-Kontroller jetzt erst einmal gesperrt.
  211. Dazu wird  in  das  DMA-Kontrollregister  ($96)  $01E0  (%0000000111100000)
  212. eingetragen. Das DMACON-Register hat folgenden Aufbau:
  213.  
  214.  Bit | Funktion
  215.  ----|---------------------------------------------------------------------
  216.  15  | SET/CLEAR 1: gesetzte Bits werden gesetzt
  217.      |           0: gesetzte Bits werden gelöscht
  218.  14  | Blitter arbeitet gerade
  219.  13  | Ergebnis der letzten Blitteroperation war 0
  220.  12  | unbelegt
  221.  11  | unbelegt
  222.  10  | Blitter hat Priorität
  223.   9  | Ist dieses Bit gelöscht werden alle anderen Bits als gelöscht ange-
  224.      | sehen
  225.   8  | BitPlane DMA
  226.   7  | Copper DMA
  227.   6  | Blitter DMA
  228.   5  | Sprite DMA
  229.   4  | Datenübertragung Disk-Amiga
  230.   3  | Soundausgabekanal #3 an
  231.   2  | Soundausgabekanal #2 an
  232.   1  | Soundausgabekanal #1 an
  233.   0  | Soundausgabekanal #0 an
  234.  
  235. Mit  dem  Befehl  werden  also  Bitplane-,  Copper-, Bitter- und Sprite DMA
  236. ausgeschaltet.
  237.  
  238. Unserer Copperliste kann jetzt gestartet werden.  Die  Anfangsadresse  wird
  239. in  das  COP1LC-Register  eingetragen  und  er  Programmzähler  des Coppers
  240. zurückgesetzt.
  241.  
  242. Damit unser Bild in den gewünschten Farben erscheint müssen  die  RGB-Werte
  243. der  16  Farben  in die Farbtabelle eingetragen werden. Die Farbewerte sind
  244. extra angegeben, da die reinen  Bilddaten  keine  Auskunft  darüber  geben.
  245. Ansonsten  würde  das  Bild  in den vorher eingestellten Farben erscheinen.
  246. Diese Bild sieht dann unter Umständen sehr merkwürdig aus.
  247.  
  248. Es  werden  die  schon  oben  besprochenen Standartwerte für den Bildschirm
  249. eingetragen.  DFFSTRT  wird  jedoch  mit  $0030  geladen.  Der Bitplane-DMA
  250. beginnt  8  Taktzyklen  eher.  Das  wird  so  gemacht,  da  ansonsten  beim
  251. horizontalen  Scrolling  am  rechten  Rand  ein schwarzer Steifen entstehen
  252. würde. Es wird ein zusetztliches Datenwort gelesen. Das Bild  ist  also  16
  253. Punkte  breiter.  Diese  16  Punkte  werden  aber  nur  beim  Feinscrolling
  254. sichtbar. Das Ganze hat noch  einen  Nachteil.  Es  werdem  dem  Sprite-DMA
  255. dadurch  8  Taktzyklen  weggenommen,  wodurch  Sprite #7 nicht mehr genutzt
  256. werden kann.
  257.  
  258. Im  Bitplane-Kontrollregister  ($100)  wird  festgelegt,  welche  Auflösung
  259. unser Bild haben soll. Es sind 320 x 256 Punkte (LO-RES)  und  4  Bitplanes
  260. (16  Farben).  In das Register wird der Wert %0100001000000000 eingetragen.
  261. Das BPLCON0 Regiser hat folgenden Aufbau:
  262.  
  263.  Bit | Funktion wenn gesetzt
  264.  ----|--------------------------------------------------------------------
  265.   15 | HIRES an (640 Punkte in X-Richtung)
  266.   14 | Die folgenden 3 Bits geben die Anzahle der Bitplanes an. Es sind
  267.   13 | Werte von 0 bis 6 möglich.
  268.   12 |
  269.   11 | HAM-Modus ein (4096 Farben)
  270.   10 | Dual-Playfield an
  271.    9 | Videoausgang Farbe an
  272.    8 | Genlock an
  273.    7 | unbenutzt
  274.    6 | SuperHires an (1280 Punkte in X-Richtung)
  275.    5 | unbenutzt
  276.    4 | unbenutzt
  277.    3 | Lightpen Eingang an
  278.    2 | Interlace an (512 Punkte in Y-Richtung)
  279.    1 | Externe Synchronisation ein
  280.    0 | unbenutzt
  281.  
  282. Normalerweise müßte jetzt noch der Modulowert mit  40  eingetragen  werden,
  283. da  der  Bildschirm  40  Bytes (320 Punkte) breit ist. Dieser Wert giebt an
  284. wieviel Bytes in  der  Bilddarstellung  weitergesprungen  werden  soll.  Da
  285. unser  ganzes  Bild  80  Bytes  breit  ist muß also 40 Bytes weiter mit der
  286. Darstellung der nächsten Zeile begonnen werden.  Es  wird  also  immer  ein
  287. rechteckiger  Bereich  aus dem übergroßen Bild dargestellt. In dem Fall des
  288. Beispielprogramms ist der Modulowert nur 38, weil ja ein zusetzliches  Wort
  289. gelesen  wird.  Es  sind  damit  schon 42 Bytes dargestellt. Bis zu nächten
  290. Zeile sind es nur noch 38 Bytes. Die Modulowerte werden  getrennt  für  die
  291. geraden  und  ungeraden  Bitplanes  eingetragen. Es ist jetzt alles für die
  292. Darstellung des Bildes eingetragen. Mit "move.w  #$8380,dmacon(a5)"  werden
  293. die  DMA-Kontroller  eingeschaltes  und  das  Bild  erscheint 50 mal in der
  294. Sekunde auf dem Bildschirm.
  295.  
  296. 2.3.3. Joystickabfrage und Scrolling
  297. ------------------------------------
  298.  
  299. Um  das  ganze  Programm  beenden  zu  können  wird  gleichzeitig  mit  der
  300. Joystickabfrage  die  linke Maustaste abgefragt. Wie das fuktioniert hatten
  301. wir schon mal abgehandelt.
  302. Das Bild soll mittels Joystick also in alle  Richtungen  gescrollt  werden.
  303. dazu  muß  das  Programm  in  4  Unterprogramme  verzweigt werden. Für jede
  304. Richtung giebt es ein eigenen Unterprogramm.
  305. Für  die  Abfrage wird der Inhalt des JOYDAT1-Registers ($DFF00C) benötigt.
  306. Die Bits 15 bis 8 enthalten die vertikale und Bits 7 bis 0 die  horizontale
  307. Position:
  308.  
  309. Bits     | 15 14 13 12 11 10  9  8  7  8  5  4  3  2  1  0
  310. ---------|-------------------------------------------------
  311. Funktion | Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
  312.  
  313. Der Joystick ist nach rechts gedrückt, wenn Bit X1 gesetzt ist.
  314. Der Joystick ist nach links gedrückt, wenn Bit Y1 gesetzt ist
  315. Der Joystick ist nach hinten gedrückt, wenn nur X0 oder nur X1 gesetzt ist
  316. Der Joystick ist nach hinten gedrückt, wenn nur Y0 oder nur Y1 gesetzt ist
  317.  
  318. Die  Joystickabfrage  ist  synchronisiert,  d.h. es wird das VPOS-Register,
  319. welches die  Elektronenstahlposition  enthält,  ständig  abgefragt  ob  das
  320. Vertikal-Blanking  erreicht  ist.  Das  ist  der  Punkt,  wo das volle Bild
  321. aufgebaut ist und der Elektronenstrahl  zum  linken  oberen  Bildschirmrand
  322. zurückkehrt.  In dieser Zeit ist es am besten das Bild zu scrollen, das der
  323. Bildschirmaufbau nicht  gestört  werden  kann,  was  sich  in  unangenehmem
  324. Blitzen  des Bildes äußern kann. Ein weiter Vorteil ist, das der Bildschirm
  325. genau 50 Punkte in der Sekunde gescrollt werden kann  und  nicht  schneller
  326. oder langsamer.
  327.  
  328. Die  Scrollroutinen  sind  recht  lang,  da  das  Bild  ja nur bis zu einem
  329. bestimmten Punkt gescrollt werden  darf.  Diese  Begrenzung  kostet  einige
  330. Befehle.
  331. Das  Scrollen  nach  oben  und  unten  ist  denkbar einfach. Der Anfang des
  332. Bildes wird nur um eine Zeile (80 Bytes)  nach  unten  oder  oben  verlegt.
  333. Diese  neu  errechneten  Anfangsadresse  der  Bitplanes  werden am Ende der
  334. Routine neu in die Copperliste eingetragen.
  335. Bei Scrollen nach rechts und links wird es schon  etwas  koplizierter.  Als
  336. erstes  kann  das  Bild  nur  Wortweise  (16  Punkte) nach rechts und links
  337. verschoben  werden,  da  der  DMA-Kontroller  nur  mit  geraden    Adressen
  338. arbeitet.    Abhilfe    schafft    das  BPLCON1-Register  ($102),  daß  ein
  339. Feinscrolling um 0 bis 15  Punkte  zuläßt.  Der  Befehl  wird  mit  in  die
  340. Copperliste  eingebunden,  damit  er  beim  Bildaufbau berücksichtigt wird.
  341. Aufbau des Registers:
  342.  
  343. Bits 4-7  4 Bits für Verschiebung der ungeraden Planes
  344. Bits 0-3  4 Bits für Verschiebung der geraden Planes
  345.  
  346. Wenn BPLCON1 mit 0 geladen ist das  Bild  nicht  verschoben.  Es  wird  als
  347. schrittweise    um    15    Pixel   verschoben.  Beim  16  Pixel  wird  das
  348. BPLCON1-Register zurückgesetzt und das Bild um ein Wort verschoben.
  349.  
  350. Wie das alles umgesetzt ist sollte man sich im Quelltext direkt  anschauen.
  351. Das  Programm  erklärt  sich  von selbst. Am Ende erfolgt der Rüchsprung in
  352. das Hauptprogramm, wo der Joystick und die Maus wieder abgefragt wird.
  353.  
  354. 2.3.4. Nachprogramm
  355. -------------------
  356.  
  357. Es folgen nun die  üblichen  Routinen  um  das  Programm  ordnungsgemäß  zu
  358. beenden.  Es  wird  die  alte  Copperliste  gestartet und alle Multitasking
  359. funktionen eingeschaltet. Der belegte Speich von der  Copperliste  und  dem
  360. Bild wird wieder für das Betriebssystem freigegeben.
  361. Der  "Umschaltscreen"  wird  geschlossen  und  als  letztes  alle benutzten
  362. Libraries. Das Datenregister D0 wird gelöscht und das  Programm  mit  "RTS"
  363. beendet.
  364.  
  365. 3.Nachwort
  366. ----------
  367.  
  368. Ich  möchte  mich  bei  allen  Leuten  bedanken, die mir bei der Erstellung
  369. diese Kurses geholfen haben. Ich hoffe meine Ideen werden  von  einigen  in
  370. neuen  Programmen  angewendet.  Wenn  ich  mit  den neuen AMIGAs (A1200 und
  371. A4000) zurechtkomme, werde ich den  Kurs  bestimmt  fortsetzen.  Bis  dahin
  372. wünsche ich euch viel Spaß und Erfolg bei euren Progammierarbeiten.
  373.  
  374. * © 1992 SSC-Software
  375. * Ulf Zschuckelt
  376.