home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / assembler-kurs / lektionen / lektion1.txt < prev    next >
Text File  |  1977-12-31  |  74KB  |  1,165 lines

  1.         Vollständiger Assembler-Programmierkurs
  2.             auf zwei Disketten
  3.  
  4.                 By
  5.        
  6.         Fabio Ciucci (Randy/Ram Jam) - 1994/95
  7.  
  8.  
  9. Für all jene, die jemals zu lernen versucht haben,  Demos  und  Spiele  zu
  10. schreiben,  die  die Hardware des  Amiga vollständig  ausnutzen wollen, es
  11. aber nie geschafft haben, entweder  weil die  Handbücher der  Programmier-
  12. sprachen zu schwierig oder  zu abstrakt geschrieben waren und die  Source-
  13. Codes (Programm-Listings) zu wenig dokumentiert oder zu  schwierig  waren,
  14. oder für jene, die es noch nie  versucht haben und und die es wundert, wie
  15. es zu schaffen wäre.
  16.  
  17. Ich möchte all denen danken, die materiell und  moralisch  zur  Entstehung
  18. dieser zwei Diketten beigetragen haben:
  19.  
  20. Luca  Forlizzi  (The Dark Coder/Morbid Visions)
  21. Andrea  Fasce (Executor/RAM JAM)
  22. Sirio Zuelli (PROXIMA DESIGN)
  23. Alberto Longo (Fields of Vision)
  24. Alvise Spano' (Aga/Lustrones)
  25.  
  26. Nicht  desto  weniger  jenen,  die  die   Übungen   getestet   haben   und
  27. feststellten, ob sie sie mehr oder weniger verstanden:
  28.  
  29. Andrea Scarafoni, Federico "GONZO" Stango und andere.
  30.  
  31. Zum Schluß möchte  ich  noch  meine  Freundin  Kety  grüßen,  die  darauf
  32. achtete, daß ich nicht zu viel Zeit vor dem Computer verbrachte.
  33.  
  34. In meiner Karriere als Hobbyprogrammierer kann ich einige Demos/Intros für
  35. BBS als Meine bezeichnen, zum Beispiel  "AMILINK.EXE"  für  die  Datenbank
  36. "AmigaLink"  oder  für  Clubs  wie  dem  neuen  "Amiga Expert Team". Meine
  37. größten "Werke" sind mein erstes  Demo  für  das  AGA-Chipset,  "World  of
  38. Manga", und "NAOS2, das ich für die Gruppe NOVA ACIES programmiert habe.
  39.  
  40. Ich  möchte  vorausschicken,  daß es irgendwie angebracht wäre, mindestens
  41. eine Grundkenntnis des DOS  zu  besitzen,  mindestens  gerade  soviel  wie
  42. nötig,  um  die Listings abspeichern zu können! Ihr müßtet dafür beim Kauf
  43. ein Handbuch mitbekommen haben... Kurzum, auf  den  Disks  (seien  es  nun
  44. Harddisks  oder  Floppy)  sind  die Daten als "File" gespeichert, das sind
  45. schier  endlose   Reihen  von   Ziffern,  die  zusammen  dann   z.B.   ein
  46. Graphicfile,  ein  Musikfile,  einen  ausfühbaren  File, ein  Listing usw.
  47. ergeben. Es ist außerdem darauf zu achten,  daß  eine  nagelneue  Diskette
  48. FORMATTIERT  werden  muß,  bevor man auf ihr Daten speichern kann. Ist sie
  49. einmal formattiert, kann man darauf jeden Typ von File speichern, seien es
  50. nun  Bilder  von einem Graphicprogramm oder Texte (wie den, den ihr gerade
  51. lest). Ein File kann  man von einer  Diskette auf  eine  andere  kopieren,
  52. man  kann  ihn  löschen  oder  seinen Namen ändern usw. Auf einer Diskette
  53. haben so viele Files Platz, bis sie  voll  ist  (so  ein  Wunder...),  das
  54. entspricht  in  etwa  880kB.  Das heißt, ich habe zwei Dateien zu ca 400kB
  55. platz, oder mehrere kleinere, Hauptsache sie überschreiten zusammen  nicht
  56. die  Grenze der 880kB. Des weiteren kann man auf der Disk auch ein bißchen
  57. Ordnung schaffen, imdem man sog. "Subdirectorys" anlegt, das  sind  kleine
  58. Abteilungen  in  denen  man die Files legen kann. So wäre es denkbar, eine
  59. Subdirectory "Texte" und eine  "Bilder"  anzulegen,  in  die  wir  jeweils
  60. unsere  Liebesbriefe an die Freundin geben bzw. unsere Bilder, die wir mit
  61. DPaint oder einem anderen Malprogramm  zusammengeschmiert  haben.  Es  ist
  62. ungefähr  so,  als  wäre  die  Diskette/Harddisk  wie ein Schrank, und die
  63. Subdirectorys sind  deren  Schubladen.  Nun  ist  es  aber  auch  möglich,
  64. innerhalb der Directorys noch weitere Directorys zu machen, also kann eine
  65. Subd. Files oder weitere Subdirectorys beinhalten. Um sich nun  in  dieser
  66. Struktur  fortbewegen  und verschiedene Operationen durchführen zu können,
  67. muß man einige Befehle kennen, die man über die Shell/CLI eingibt:
  68.  
  69. Dir     =  Listet alle Files / Subdir. auf dieser Diskette/
  70.        Platte bzw. in dieser Directory auf
  71. Copy    =  Kopiert ein File
  72. Delete  =  Löscht  ein File ( Geht vorsichtig mit diesem
  73.        Befehl um!)
  74. Makedir =  erzeugt eine "Schublade" (Subdir)
  75.  
  76. Eine andere Methode ist die, alles von der Workbench  aus  zu  erledeigen,
  77. dort  sind  die  File als Ikons  (Bildchen) und die Subdirs als Schubladen
  78. dargestellt. Weiters ist zu wissen, daß  der  interne  Floppydrive  "df0:"
  79. heißt, die externen "df1:", "df2:" etc. Die Harddisk heißt meistens "DH0:"
  80. oder "HD0:". Schneller geht´s, wenn man Utilities wie Directory Opus  oder
  81. DiskMaster  verwendet.  Wenn  ihr  also ein Listing geschrieben habt, dann
  82. müßt ihr es auf einer (formattierten) Diskette  oder  auf  der  Festplatte
  83. (Harddisk)  in  einer Subdir speichern. Eine weitere Sache, die ihr wissen
  84. solltet, ist, wie man eine "autoboot"-fähige Diskette herstellt. Das  sind
  85. jene  Disks,  die  automatisch nach dem Anschalten des Computers oder nach
  86. einem Reset laden, wenn sie im Laufwerk eingelegt sind. Nehmen wir mal an,
  87. wir   haben   ein   AUSFÜHRBARES   Programm  geschrieben,  das  den  Namen
  88. "Mein_Programm" trägt und dieses auf eine  Diskette  kopiert.  Um  es  nun
  89. automatisch loslegen  zu lassen, wenn wir den Computer starten, müssen wir
  90. auf der Diskette eine Subdir mit dem Namen "S" erzeugen  und  darin  einen
  91. Textfile mit dem Namen "startup-sequence" speichern, in dem eigentlich nur
  92. der Name des zu Startendem Programmes steht:
  93.  
  94. Mein_Programm
  95.  
  96. Die startup-sequence könnt ihr zum  Beispiel  mit  dem  gleichen  Programm
  97. schreiben  (editieren),  mit  dem ihr gerade diesen Text lest. Es fungiert
  98. auch als Text-Editor. Letze Sache: ihr müßt die betreffende Diskette  noch
  99. "installieren", das passiert mit dem Shell-Befehl "install":
  100.  
  101. Install df0:
  102.  
  103. Oder  "Install  df1:"  ,  wenn  die  betreffende Diskette im Laufwerk df1:
  104. liegt.
  105.  
  106. Dies vorausgeschickt, kann mit den Anmerkungen begonnen werden:
  107.  
  108. Anmerkung: Wenn ihr den Assemblerkurs auf die Harddisk installieren wollt,
  109. vergesst  nicht,  das  File  "TRASH´M-ONE16.pref"  in eure S: Directroy zu
  110. kopieren. Er befindet sich in der s: Directory der Diskette.
  111.  
  112. Anmerkung2: Wenn ihr die Listings ausdrucken wollt, beachtet, daß sie  mit
  113. dem  PowerPacker  gepackt sind. Ihr benötigt also den PowerPacker Patcher,
  114. der in diesem Kurs benötigt wurde, er befindet sich in der  Directory  "C"
  115. dieser  Diskette  und  heißt  "PP". Um ihn zu installieren müßt ihr nur in
  116. eurer LIBS: -Directory die "powerpacker.library" haben  und  "PP"  tippen.
  117. Die  Listings sind selbstentkomprimierend (A.d.Ü : tut mir leid, ich kenne
  118. kein kürzeres Wort dafür) beim Start.
  119.  
  120. In diesem Kurs werden verschiedene Argumente behandelt,  wie  der  COPPER,
  121. die  SPRITES,  der BLITTER sowie das neue AGA-Chipset und die Graphickarte
  122. Picasso II. Auf der Disk 1 sind folgende Themen enthalten: 68000,  Copper,
  123. Playfields  und Sprites. Der Blitter, AGA und der Rest sind auf Disk 2 und
  124. 3, leider noch nicht ganz vollständig.
  125.  
  126. Was die Verbreitung und Kopie dieser Diskette angeht, solltet ihr  wissen,
  127. daß  sie  GiftWare/Shareware  ist  und nicht wirklich Public Domain. Damit
  128. meine ich, daß ihr den Kurs ohne Weiters euren  Freunden  kopieren  dürft,
  129. Hauptsache,  ihr  VERKAUFT  ihn  NICHT, da die Rechte auf diesem Kurs beim
  130. Autor liegen, also bei mir, und nicht beim ersten Schlaumax, der  auf  der
  131. Arbeit eines anderen spekuliert. Es ist aber auch wahr, daß ihr ihn einzig
  132. und alleine zum Preis der einzelnen verwendeten, leeren Diskette verkaufen
  133. dürft.   Falls  ihr  es  aber  schafft,  nachher  selbstständig  etwas  zu
  134. programmieren, dann habt ihr aus meiner Arbeit  Nutzen  gezogen,  und  ihr
  135. MÜßT  mir  in  irgend  einer  Art danken, vor allem wenn ihr die reichsten
  136. Programmierer der Welt geworden seid (na ja, man kann ja  nie  wissen...).
  137.  
  138. Dieser  Dank  liegt  ganz  in  eurem Ermessen, am liebsten habe ich
  139. natürlich 10-DM-Scheine. Der rege Zufluß von Kies/Kohle würde  mich
  140. (Fabio  Ciucci)  ermutigen,  weitere  Lektionen  zu  schreiben, und
  141. meinen  Übersetzer  (Martin  De  Tomaso),  sie  ins   Deutsche   zu
  142. übersetzen. Das Geld (mindestens 10 DM) schickt ihr bitte an ihn:
  143.  
  144.         Martin De Tomaso
  145.         Nicolodistr. 24/3
  146.         39100 BOZEN
  147.         ITALY                   ; Internet: mdetomas@inf.unitn.it
  148.  
  149. Bitte habt Verständnis, daß wir aus technischen Gründen (Zeit, Uni)
  150. nicht  imstande sind, eure Listings zu verbessern, genausowenig wie
  151. auf tausenden von Zuschriften zu antworten. Stellt euch mal vor, so
  152. ca.  50 Briefe am Tag vor euch liegen zu sehen, wenn ihr in die Uni
  153. gehen müßt und euch dann auch noch die Freundin steßt.
  154. Wenn  ihr  aber  gute  und  brave  Programmierer  seid,   und   die
  155. Amiga-Szene   retten   wollt   (hey  Chaos,  Mr.Pet,  Tron,  Azure,
  156. Touchstone, Wayne Mendoza, .... where are you? On the PC scene?  ),
  157. dann  könnt  - oder MÜßT- ihr mit uns Kontakt aufnehmen. Was kostet
  158. es euch schon, ein altes Listing zu kommentieren?  Habt  ihr  nicht
  159. gesehen,  wieviele  MB an Listings die Coder auf den PC´s hergeben?
  160. Man braucht nur die CD-ROM der PARTY4 und der  ASSEMBLY94  ansehen,
  161. oder sie von Internet runterholen.
  162. Ein anderer Grund, uns anzuleuten wäre, daß ihr imstande seid,  den
  163. Kurs  GUT  ins  ENGLISCHE zu übersetzen (bzw. in irgend eine andere
  164. Sprache). In diesem Fall habt  ihr  ein  Anrecht  auf  einen  guten
  165. Prozentsatz  (30%  -  50%)  des  Profites, der von euch übersetzten
  166. Version.
  167.  
  168. Ihr würdet mir auch einen großen Gefallen machen,  wenn  ihr  diese  erste
  169. Diskette  allen  weiterkopiert,  die  ihr  kennt,  auch  wenn  euch selbst
  170. persönlich  Assembler  nicht   interessiert,  da  ihr  somit  anderen  die
  171. Möglichkeit gebt, programmieren zu lernen. Ich habe beschlossen, den ASM -
  172. Kurs (ASM=Assembler) zu schreiben, weil 10000 Personen mich  darum  baten,
  173. und  da  ich  es  aus  reinem  Spaß  tue,  ist  er  auch  in  einer  recht
  174. umstreitbaren Form geschrieben, aber den Anfängern  wird  es  so  leichter
  175. fallen,  denn wenn sie einmal "drinnen" sind, können sie immer noch selbst
  176. die Argumente  vertiefen.  Wer  hingegen  Assembler  schon  seit  längerem
  177. programmiert,  wird  die Lektionen teils lustig finden, teils auch gewisse
  178. Ungereimtheiten, deswegen rate ich denjenigen, sich  sofort  die  Listings
  179. anzuschauen:  dieser  Kurs  ist für die gedacht, die bei NULL starten. Aus
  180. eigener Erfahrung, und laut dem, was mir die zukünftigen "CODER" so sagen,
  181. liegen  die  größten Probleme in den ersten zwei oder drei Programmen, und
  182. darin alles zu verstehen, danach ist man  selbst  imstande,  fortzufahren.
  183. Ich  biete  mich  also  an,  den Personen, die nicht einmal wissen was der
  184. 68000er ist,beizubringen, Kugeln auf dem Bildschirm hin und her  zu  jagen
  185. und  dort  hüpfende  Schriften anzuzeigen. Wenn die dann Programmierer bei
  186. TEAM 17 werden wollen, reicht es, wenn sie weitermachen und dazulernen.
  187.  
  188. UM EIN SPIEL WIE GODS, PROJEKT X  ODER  ÄHNLICHES  ZU  PROGRAMMIEREN,  DAS
  189. NICHT  GERADE  EIN  FLUGSIMULATOR  IST  ODER  EIN 3D-SPIEL MIT ROTIERENDEN
  190. WÜRFELN MIT  TEXTURE-MAPPING  ODER  SINUS-TUNNELN  á  la  STARDUST  HABEN,
  191. REICHEN DIE MATHEKENNTNISSE DER MITTELSCHULE.
  192.  
  193. Damit   will   ich   jedem   aus   dem  Kopf  schalgen,  daß  er  für  die
  194. Assemblerprogrammierung des Amiga weiß Gott was  für  Mathematik  braucht.
  195. Ich  persönlich  glaube,  Mathes  hat  gar  nix damit zu tun. Wenn man ein
  196. Mathematikprogramm    schreiben    will,    ok,    dann    braucht     man
  197. Mathematikkenntnisse,  genauso  wie  wenn  man  ein Fußballspiel schreiben
  198. will, man Fußball kennen muß. Das Wichtige ist zu wissen,  wie  der  Amiga
  199. funktioniert,  seinen Prozessor kennen (beim Amiga ein Motorola 68000 oder
  200. größer), seine CustomChips (praktisch die Teile, die die Graphic  auf  den
  201. Bildschirm   bringen   und  die  Musik  spielen).  Ich  selbst  habe  eine
  202. Kunsthochschule in meiner Stadt besucht, und habe  die  ASM-Programmierung
  203. gelernt,  wenn  ich  in der Mittelschule war, es reicht also, die Zeit, in
  204. der der Amiga eingeschaltet ist, gut zu nützen, und nicht nur zu  spielen:
  205. man  muß  nicht Informatik an der Uni studieren, denn dort bringen sie dir
  206. sowieso nicht das Programmieren von Demos und Spielen auf einem Amiga bei!
  207.  
  208. Aber wieso sollte man lernen, Demos und Spiele zu programmieren?  Und  was
  209. sind  überhaupt  diese  Demos?  Also,  was Spiele sind, wissen hoffentlich
  210. alle, deswegen kann man davon ausgehen, daß diejenigen, die Spiele  selber
  211. programmieren,  es  satt haben, Spiele zu sehen, die nicht so sind wie man
  212. möchte, und man halt einmal sein eigenes machen  will,  Pixel  für  Pixel.
  213. Demo  ist  ein Synonym für "demonstration", praktisch "zeigen","beweisen",
  214. meist Graphic. Aber was zeigen, beweisen? Klarer Fall, die Power, die  der
  215. Amiga  in  sich hat und die Bravour der Programmierer. Aber da gibt´s noch
  216. mehr: die Szene. Nein, nicht die Theaterszene, die Amiga-Szene, die "AMIGA
  217. SCENE"  (englisch  ist  die  offizielle SCENE-Sprache...). Stellt euch die
  218. Musikszene  vor:  dort  gibe  es  verschiedene   Gruppen,   mit   Sängern,
  219. Schlagzeugern  etc. In der AMIGA-SCENE hingegen gibt es verschiedene CODER
  220. (Programmierer), GFX Artists (Graphiker), MUSICIANS (Musiker), die anstatt
  221. ein  "VIDEO"  als  Beitrag  zu drehen, ein Demo schreiben, das sich zu den
  222. anderen reiht, die von jemand anderem, zu einer anderen Zeit und in  einem
  223. anderen Ort geschrieben wurden, fügen. Dann gibt´s da noch die SWAPPER und
  224. die TRADER, die jeweils diese Demos tauschen  und  über  Post  oder  Modem
  225. verbreiten.  Die  produzieren  zwar  gar  nichts,  haben  aber  auch  ihre
  226. Wichtigkeit in der Szene: etwas, was nicht zirkuliert, ist so, als  ob  es
  227. nicht  existieren  würde.  Andererseits  streben sie danach, selbst CODER,
  228. Graphiker oder Musicians zu  werden,  um  selbst  einmal  bei  einem  Demo
  229. mitgewirkt  zu  haben.  Es  gibt  viele  Gruppen  in  der Amiga-Szene, die
  230. Mitglieder in der ganzen Welt haben,  vor  allem  in  Europa.  Einige  der
  231. bekanntesten Gruppen sind ANDROMEDA, BALANCE, COMPLEX, ESSENCE, FAIRLIGHT,
  232. FREEZERS, MELON DEZIGN, POLKA BROTHERS, PYGMY PROJECTS, RAM  JAM,  SANITY,
  233. SPACEBALLS...  Zu  Bemerken  ist,  daß  jedes  Mitglied  einer  Gruppe ein
  234. Pseudonym hat, ein sog.  "handle".  Kurzum,  es  sind  Künstlernamen:  zum
  235. Beispiel  heißen  sich  zwei Programmierer der ANDROMEDA "Dr. Jeckyll" und
  236. "Mr. Hyde", einer der FREEZERS heißt sich "Sputnik", und dann sind  andere
  237. von   anderen   Gruppen:Hannibal,  Dan,  Paradroid,  Dak,  Wayne  Mendoza,
  238. Performer, Bannasoft, Laxity, Vention, Psyonic, Slammer,  Tron,  Mr.  Pet,
  239. Chaos,  Lone Starr, Dr. Skull, Tsunami, Dweezil..... Der vollständige Name
  240. besteht  aus  dem  handle  und  der  Gruppe,  der  man   angehört,   z.B.:
  241. CHAOS/SANITY, DWEEZIL/STELLAR, DAK/MAD ELKS, und so weiter. Ich bin in der
  242. Szene "RANDY/RAM JAM", aber klarerweise Fabio Ciucci für alle, die mit der
  243. Szene  nichts am Hut haben, sonst wäre es wohl etwas verwirrend. Die Szene
  244. organisiert Partys, eine Art Begegnungs-Fete, wo die  Gruppen  ihre  Demos
  245. vorführen,  mit einer Art "Wettkampf" um das beste Demo, mit Bewertung und
  246. Preisen, auch in der Tausend-Mark-und-mehr-Gegend für die Gewinner. Einige
  247. Programmierer  der Szene gehen mit der Zeit über und programmieren Spiele,
  248. die Argumente liegen ja sehr nah. So ist zum Bleistift  der  Programmierer
  249. von  "BANSHEE"  Hannibal/Lemon, von "ELFMANIA" ist es Saviour/Complex, die
  250. von "STARDUST" sind DESTOP/CNCD und SCY/CNCD, und die Liste  ginge  weiter
  251. und  weiter...  Auf  jeden  Fall, auf Disk zwei ist eine ganze Lektion nur
  252. über die SCENE enthalten.
  253.  
  254. Um zur Assemblerprogrammierung zurückzukommen,  ob  ihr  nun  Spiele  oder
  255. Demos  auscodieren  wollt,  rate  ich euch wärmstens davon ab, 3D-Routinen
  256. (Routine=Teil eines Listings, eines Programmes) zu studieren, da  sie  die
  257. komplexesten und somit die schwierigsten sind, und die ich selbst schlecht
  258. verdaue,  nicht  wegen  der  Programmierart,  aber  wegen  der  grausligen
  259. Matheformeln,  die  sie  beinhalten.  Aber  Achtung!  Ihr dürft auch nicht
  260. glauben, daß  wenn  keine  Mathematik-Kenntnisse  gefragt  sind,  ihr  nun
  261. Elektronikgenies  sein  müßt  und  die  Schaltpläne des Amiga durchbüffeln
  262. müßt! Das ist nur der Fall, wenn ihr eine  Graphik-Karte  ansteuern  müßt,
  263. einen  Videodigitizer oder ähnliches. Ich versichere euch, daß ihr getrost
  264. die Figur eines Bayern auf den Bildschirm holt und dazu eine Polka spielen
  265. läßt,  ohne  zu  wissen, wo die Drähte ´rumführen!!!! Ich kenne Leute, die
  266. Assembler mit 12 gelernt haben, andere mit 30 oder 40,  ohne  sich  jemals
  267. mit  Mathematik  befaßt  zu haben und ohne Englischkenntnisse. GENAU! DENN
  268. AUCH DEN MYTHOS, PERFEKT ENGLISCH KÖNNEN ZU MÜSSEN,SCHLAGT EUCH SOFORT AUS
  269. DEM  KOPF! Ich gebe zu, englisch zu können erleichtert die Arbeit manchmal
  270. schon,  denn  die  ASM-Befehle  sind  Abkürzungen  von  Wörtern  aus   dem
  271. Englischen,  wie  SUB  und  ADD,  was  soviel wie Subtraktion und Addition
  272. heißt. Die Kenntnis der WorkBench und des  AmigaDOS  werden  euch  in  der
  273. Programmierarbeit  an  und  für  sich  nicht  recht  nützlich sein, da der
  274. Computer   in   Wirklichkeit   ziemlich   anders   funktioniert.   Einfach
  275. ausgedrückt,  sind  diese  "Überstrukturen" das Betriebssystem, die in den
  276. Kickstart-Chips lokalisiert sind, und  ohne  die  beim  Einschalten  nicht
  277. einmal  die  Bildschirmseite  angezeigt würde, die verlangt, eine Diskette
  278. einzulegen. Die Fenster, die ihr seht und verstellt, sind das Ergebnis von
  279. tausenden  Zeilen in ASM, die im Kickstart enthalten sind, zur Bestätigung
  280. reicht es aus, die Unterschiede zwischen Kick 1.3 und  2.0  anzusehen.  Es
  281. hat  sich nichts an den Disketten geändert, aber an den Kickstarts selbst.
  282. Wenn ihr Programme wie Deluxe Paint, Kontoüberwachung, Haushaltskasse oder
  283. Word-Processor schreiben wollt, also Programme, die  unter  der  Workbench
  284. laufen  sollen,  mit all ihren Fenstern, Menues, Gadgets und Multitasking,
  285. dann rate ich euch, die Programmiersprache "C" zu lernen. Sie ist für eure
  286. Art   von   Tätigkeit   besser   geeignet,  und  ihr  könnt  ohne  größere
  287. Schwierigkeiten eure Programme nach MS-DOS und  WINDOWS  konvertieren,  im
  288. Falle,  daß ihr unsere Freundin verlassen (oder verraten?) wollt. Wenn ihr
  289. aber  von  Graphicdemos  mit  springenden  Kugeln,  metallern  glizzernden
  290. Schriften  und Super-Soundtracks im Hintergrund fasziniert seid, und davon
  291. träumt, Spiele wie AGONY,LIONHEART, SHADOW OF THE BEAST, TURRICAN, APYDIA,
  292. PROJECT  X, SUPERFROG, ZOOL, GODS, CHAOS ENGINE, XENON II, LOTUS ESPRIT zu
  293. programmieren, dann sollte klar sein, daß  das  nur  in  REINEM  ASSEMBLER
  294. machbar  ist!!  Und es braucht keine speziellen Vorkenntnisse in Mathe, es
  295. reichen  die  üblichen  Additionen,  Subtraktionen,  Multiplikationen  und
  296. Divisionen, vielleicht manchmal eine Sinustabelle oder eine Kosinustabelle
  297. um zum Beispiel die Kugeln in einer gewissen Laufbahn flizzen  zu  lassen,
  298. sei  es nun eine Parabelform oder sonst eine Art von Kurve. Diese Tabellen
  299. sind nichts anderes als eine  Serie  von  Zahlen  im  Speicher,  wie  z.B.
  300. 1,2,3,5,8,10,13,15,18,23,  die  wiederum nichts anderes darstellen als die
  301. X-Position bei einer bestimmten Y-Position. Diese Serien von  Zahlen,  die
  302. Tabellen  oder  SINUSTAB,  erzeugt  der ASMONE auf Wunsch auch von selbst.
  303. Dafür gibt´s den Befehl CS, der, ohne genaues  Wissen  über  Trigonometrie
  304. und  ähnlichem  Zeug,  die  Tabelle von selbst erstellt, es reicht ihm die
  305. richtigen Parameter zu übergeben, schlimmstenfalls probiert  man  halt  so
  306. lange, bis es mehr oder weniger paßt. Solche SINUSTAB  kommen in Demos und
  307. Spielen oft vor, da viele wellenartige Bewegungen nicht in  diesem  Moment
  308. berechnet  werden.  Wenn ihr aber davon träumt, Adventurespiele wie Monkey
  309. Island  zu  schreiben  bzw.   Managerspiele,   in   denen   nur   stehende
  310. Graphicseiten  auftreten,  und  sich  darin  höchstens hie und da mal eine
  311. Figur langsam bewegt, in denen der Sinn des  Spieles  darin  besteht,  die
  312. richtigen Objekte oder Schriftzüge mit der Maus auszuwählen, dann ist auch
  313. C besser am Platz. Es wird auch leichter, es auf PC zu  konvertieren,  auf
  314. dem  man  dan leicht einen Haufen Geld verdienen kann. Andererseits wird C
  315. in  den  technischen  Hochsculen  unterrichtet,  und  sehr  gut   an   den
  316. Universitäten, also machen schon die das große Geld.
  317.  
  318. Anmerkung:  Das  Beherrschen  des  Assemblers des Amiga kann sich als sehr
  319. nützlich erweisen, wenn man in Zukunft auf ein  anderes  System  umsteigt,
  320. das  mit  dem  gleichen  Prozessor  arbeitet, eben dem 68000 von Motorola.
  321. Solche Systeme sind Apple MacIntosh und AtariST. Diese Systeme haben  aber
  322. ein  anderes Betriebssystem als das im Kickstart des Amiga enthaltene, und
  323. andere Chips für die Darstellung der Graphic und  des  Tons,  also  werden
  324. euch  die  erworbenen  Fähigkeiten  für  den Prozessor, nicht aber für das
  325. andere Betriebssystem oder die anderen Graphic/Sound-Chips zu Gute kommen.
  326. Für diese müßt ihr immer von NULL beginnen. Aber auch bei Sprachen wie dem
  327. "C" bleibt euch das Erlernen der neuern Umgebung nicht erspart.  Wenn  ihr
  328. zum  Beispiel  ein  Programm  in  C  unter der Workbench schreibt, das ein
  329. Fenster öffnet, und darin Berge zeichnet, und ihr steigt auf  PC-MSDOS  um
  330. (grober  Fehler!),  dann  könnt ihr den Teil des Programmes, der die Berge
  331. berechnet wiederverwerten, aber der Teil,  der  die  Fenster  öffnet,  die
  332. Gadgets  und ähnliches unter der Workbench verwaltet, ist zu verwerfen und
  333. komplett neu zu schreiben. Und ich versichere euch, auf ein anderes System
  334. umzusteigen und alles neu zu lernen kostet Monate wenn nich Jahre an Zeit.
  335.  
  336. Anmerkung:Ein   Programm,   das  in  68000er  Assembler  geschrieben  ist,
  337. funktioniert tadellos auf höheren Prozessoren, man muß  nur  einige  Dinge
  338. beachten.
  339.  
  340. Wenn   ihr  noch  da  seid  und  lest,  dann  heißt  das,  ihr  seid  noch
  341. unerschrocken. Also beende ich das Aufzählen der Vorzüge des  Assembler...
  342. (die  Sprache  an  und  für  sich  heißt  ASSEMBLY,  das  Programm, das es
  343. compiliert nennt  man  ASSEMBLER,  aber  einfacherweise  nennt  man  alles
  344. ASSEMBLER,  auch  die Sprache selbst). Als erstes wird Assembler immer die
  345. schnellste Sprache sein, was Geschwindigkeit  der  Programme  angeht.  Vor
  346. allem,  wenn sie gut geschrieben wurden, werden sie immer schneller laufen
  347. als mit einem  x-beliebigen  anderen  Compiler.  Weiters  kann  man  damit
  348. spezielle  Grafikeffekte  erzeugen,  die  es noch nie gegeben hat: ok, ihr
  349. könnt sie auch  mit  einem  Titler  erzeugen,  aber  halt  immer  nur  die
  350. gleichen.  Es  ist  nicht  schwer  zu  erkennen,  mit welchem Programm ein
  351. gewisser Effekt erzeugt wurde. Das gleiche gilt auch für die  Demo  Maker.
  352. Der  Beste  darunter  ist  der  TRSI  DEMOMAKER,  und  er  hat zweifelslos
  353. interessante Effekte, aber inzwischen erkennt auch ein  Kind  eine  Sache,
  354. die  mit  dem  Demomaker  gemacht wurde, weil da immer die goldene Schrift
  355. oben und unten auftaucht, und in der Mitte entweder die Kügelchen oder die
  356. Sternchen...  JETZT  REICHTS! Man kann´s schon bald nicht mehr seh´n! Aber
  357. mit Assembler kann man dauernd neue Effekte  erfinden,  die  noch  niemand
  358. gesehen  hat,  und  man  muß  sich  nicht  darauf beschränken, unter einem
  359. Dutzend Vordefinierten auszusuchen, die  schon  tausende  andere  Personen
  360. verwendet  haben  und  Privatfernsehn  damit angehäuft haben. Um euch eine
  361. Idee davon zu verschaffen, was ihr alles anstellen könnt, möchte  ich  das
  362. Demo  von  SPACEBALLS  "State  of  the Art" nennen, eines der bekanntesten
  363. Demos, weil es alle erstaunte wegen der stilisierten Mädels, die in Mitten
  364. von Spezialeffekten tanzten. Ist nicht Schwieriges zu programmieren.
  365.  
  366. Wenn  ein  Programmierer  genug Geduld hat, kann er sich auch an ein Spiel
  367. heranwagen, zuerst um es selber zu spielen, um das Spiel seiner Träume  zu
  368. kreiren,  um  zu  experimentieren, wieviele Männchen er bewegen kann, ohne
  369. Geschwindigkeitseinbußen, um die wahren Grenzen des Amiga zu finden,  und,
  370. später,  vielleicht  ein kommerzielles Spiel auf die Beine zu stellen, das
  371. auch die Mitarbeit von Grafikern und Musikern erfordert.  Weiters  braucht
  372. es  dann  noch  einen,  der  an der Werbetrommel rüttelt, denn die ist oft
  373. ausschlaggebender als der effektive Wert des  Spieles,  außer  in  einigen
  374. Fällen, in denen das Spiel einfach so toll ist, das es trotzdem zum Erfolg
  375. kommt. Wieso  nicht  ein  Spiel  für  CD32  entwickeln??  Es  reicht,  ein
  376. AGA-Spiel  zu  machen, das die 600MB einer CD ausnützt, z.B. mit einer Art
  377. von "Film", die in Echtzeit im Hintergrund geladen wird, auf der sich  ein
  378. Alles-Töten-Rambo  oder ein Raumschiff bewegt. Es ist gar nicht so schwer,
  379. ein solches Spiel zu  machen:  das  Chipset  ist  mehr  oder  weniger  das
  380. gleiche,   es   sind  nur  einige  Register  dazuzulernen,  der  Prozessor
  381. unterscheidet sich um NULL komma Josef, und die Verwaltung der CD ist noch
  382. einfacher.  Da gibt´s nämlich das "CD32 Developer Kit", zwei Disketten mit
  383. allem Nötigen, das unter den Programmierern zirkuliert. Im  Endeffekt  ist
  384. an der Schwelle zum 2000 Assembler noch an der Spitze mit dabei, und wenn,
  385. wie viele PC-Typen prophezeien, nur mehr CD´s die Welt regieren, wird auch
  386. der  Amiga  mit  seinen  CD´s aufwarten. Denn zur Zeit sind es ja noch vor
  387. allem die PC-Fanaten, die voll aufrüsten um nur noch CD-Games  zu  spielen
  388. und  sich  Slideshows von nackten Girls anzuschauen. Na ja, und wenn eines
  389. Tages ein eine Software auf CD für den  Amiga  hervorkommt,  dann  ist  es
  390. möglich, daß alles mit einem uns nicht unbekanntem Assemblerkurs begann...
  391. Wenn man dann einmal versteht, wie die Dinge in Wirklichkeit laufen,  kann
  392. man  auch  versuchen,  die  Spiele und Programme zu verändern. So habe ich
  393. einige Male ein Programm so veränert, daß es den virtuellen  Speicher  des
  394. A4000   verwendet   oder  habe  ich  gewisse  Routinen  von  PD-Programmen
  395. verändert,  so  daß  sie  schneller  liefen.  Bei  Spielen  kann  man  die
  396. sogenannten  Trainer  schreiben,  in etwa so, daß wenn Player 1 stirbt, er
  397. ein Leben dazukriegt und  ihm  somit  zur  Unsterblichkeit  verhelfen.  Um
  398. solche  Spielereien  aufzuziehen muß man aber schon einiges auf der Platte
  399. haben, und vor allem braucht es dazu eine Utility, die MS-Monitor  genannt
  400. wird.  Diese  erlaubt  das  disassemblieren  von  Maschinencode,  also das
  401. anzeigen von gewissen Teilen des Speichers, und wenn man  dann  genau  den
  402. erwischt,  in  dem  die  Leben des Player 1 stehen, ist die Sache geritzt.
  403. Besser noch sind aber die Cartridges wie die ACTION REPLAY. MS  steht  für
  404. Maschinensprache,  es  ist praktisch die Sprache, die der Prozessor direkt
  405. verwerten kann und die der Assembler erzeugt. MS ist aber für uns Menschen
  406. extrem  unverständlich, und so hat man sie in Assembler gekleidet, der uns
  407. alles sehr viel leichter macht. Diese  Operationen  sind  aber  wie  schon
  408. gesagt,  recht schwierig, und es hat auch keinen rechten Sinn, einfach auf
  409. geradewohl loszuhacken und zu versuchen, ein blaues Männchen  grün  werden
  410. zu  lassen.  Ich  habe  Typen  erlebt,  die  ihre  Zeit damit vergeudeten,
  411. blindlings  mit  MS-Monitoren  und  Cartridges  darauf  loszuschießen   um
  412. Änderungen  vorzunehmen, die eingentlich kein Mensch richtig verstand -sie
  413. selbst inklusive- nur um dann zu Behaupten, sie hätten weiß der Geier  was
  414. für  Verbesserungen  an  dem Programm/Spiel angebracht. Diese können heute
  415. immer noch nicht eine Grafik  in  Assembler  anzeigen;  im  Jargon  heißen
  416. solche Typen LAMER.
  417.  
  418. Bringen  wir  mal alles auf einen Punkt: wenn ihr einer dieser klassischen
  419. 18 jährigen, bleichgesichtigen, buckligen Jungs ohne Mädels seid, und  auf
  420. gut  Glück  mit  einem  MS-Monitor  in  den  Intimitäten eures armen Amiga
  421. rumfuchtelt, und behauptet, ein großer  Hacker  zu  sein,  dann  legt  den
  422. Monitor bei  Seite  und  folgt  mir auf den rechten Weg. Auch ich habe auf
  423. dieser lächerlichen Art und Weise begonnen (aber mit 8  Jahren,  nicht mit
  424. 18!), habe aber bemerkt, daß es zu nichts führt und somit begonnen, Bücher
  425. zu lesen ohne Seiten zu überspringen.
  426.  
  427. *Anmerkung   des   Übersetzers:  An  diesem  Punkt  werden  einige  Bücher
  428. aufgezählt, die es (nicht) wert sind, unter die Lupe genommen  zu  werden,
  429. die  meisten  jedoch  von  italienischen  Herausgebern  mit ausschließlich
  430. italienischen Auflagen. Ich zähle sie trotzdem auf und verweise auf  jene,
  431. die  in  englisch  oder deutsch zu haben sind. Hätte jemand einen Beitrag,
  432. also wenn jemand ein Buch empfehlen kann, dann bitte schreib mir!!!  Meine
  433. Adresse findest du auf der Diskette!!
  434.  
  435. "IL  MANUALE DELL´ HARDWARE DELL´AMIGA" Herausgeber IHT. Ist einen Versuch
  436. wert, eine deutsche Version zu suchen. Soll scheinbar mächtig gut sein! In
  437. ihm  werden  die  Hardware-Bausteine wie CUSTOM-CHIPS und FLOPPY unter die
  438. Lupe genommen, Register beschrieben usw. Es ist aber mehr eine  Ansammlung
  439. von  abstrakten Daten und Tabellen ohne Beispielen, aber die findet ihr ja
  440. in diesem Kurs. Für die Register braucht ihr nur im ASMONE den Befehl "=C"
  441. zu  tippen, und es kommen die Informationen über die Register $DFFXXX, sei
  442. es generell wie speziell: =C 040 gibt euch eine Zusammenfassung  über  das
  443. Register DFF040, das ist BLTCON0, ein Blitterregister.
  444.  
  445. "HARDWARE REFERENCE MANUAL" nur in englischer Version.
  446.  
  447. "ROM  KERNEL  MANUAL"  nicht  recht empfohlen für hüpfende Kugeln etc, nur
  448. wenn man in ASM unter der WorkBench programmieren möchte.
  449.  
  450. Weiters gibts dann noch das "AMIGA GURU BOOK", wenn ich nicht voll daneben
  451. liege,  in  englisch, und weiter wie "Amiga Spiele Programmierung", "Amiga
  452. Assembler Praxis" ü.ä. Ich kann sie weder empfehlen noch abraten, denn ich
  453. kenne  sie  (noch) nicht. Wenn jemand genaueres weiß, dann weiß er ja, was
  454. er zu tun hat... *Ende der Anmerkungen des Übersetzers.
  455.  
  456. Anmerkung: Wenn ihr hingegen nicht die bleichen MS-Monitor-per-Zufall-User
  457. seid,  sondern  gierige Forscher von neuen Spielen, die es zu kopieren und
  458. zu beenden gilt, und ihr Stunden damit verbringt, am Telefon zu hocken  um
  459. euch über die Neuigkeiten zu informieren, und die restlichen Stunden damit
  460. verbringt, mit XCOPY zu kopieren und  zu  spielen,  vielleicht  immer  mit
  461. eingeschaltenem Trainer um früher ans Ende zu kommen,  dann  ist  es  noch
  462. schlimmer als bucklig mit dem  MS-Monitor  zu  sein:  entweder  ihr  macht
  463. Schluß  mit  diesem atemlosen Kummer, immer auf der Suche nach Kopierbarem
  464. zu sein, oder ihr werdet immer  überspannt  und  gestresst  sein  und  nie
  465. erfahren,  wieso  sich  die  Figuren  über den Bildschirm bewegen, und ihr
  466. werdet nie erfahren, wie man sich selber einen Trainer mit Menu  und  viel
  467. Trara  macht,  und ich versichere euch, wenn ihr mal einen Trainer für ein
  468. Spiel geschrieben habt, dann kratzt euch nicht mehr, das Spiel zu beenden,
  469. sondern  nur  zu  verstehn,  wie´s  wohl  läuft!!! Das ist der Unterschied
  470. zwischen  dem  Spieler  und  dem  Erschaffer  des  Spieles,  zwischen  dem
  471. unterworfenem Volk und dem herrschendem Regime, das ihm quasi befiehlt, in
  472. schlaflosen Nächten Unmengen an Spielen zu Ende zu bringen,  entweder  mit
  473. oder  ohne  Tainer,  und egal, welche Spiele, Hauptsache, es sind Neue und
  474. Viele, wenn möglich mit XCopy kopiert (verwendet mindestens einen besseren
  475. Kopierer,  XCopy  ist  einer der schlechtesten!). P.S.: Weil wir grade von
  476. Mädels  sprachen...  Ich  habe  noch  NIE  was  von  einer  Frau  in   ASM
  477. programmiert  gesehen!!  Wenn  das  gerade eine Vertreterin des weiblichen
  478. Geschlechtes liest, dann glaube ich, ist es ein weiteres Motiv, die  Erste
  479. zu  sein!! Wenn sich ein Mädchen für anderes als Tuschel über fremde Leute
  480. und Vetrinen von Geschäften interessieren würde, und fetzige Dinge in  ASM
  481. schreiben,  dann  glaube  ich,  könnte  sie  so  manchen Boy in eine Krise
  482. versetzen, da die meisten davon bei den (weinigen) Girls, die sie  kennen,
  483. so  sehr angeben, wie gut sie den Mauspointer über den Bildschirm bewegen,
  484. und ihnen vorgaukeln, mit der NASA  in  Verbindung  zu  stehen,  weil  sie
  485. glauben,  die  versteh´n eh nicht die Bohne. Meistens können die nicht mal
  486. ´ne Diskette formattieren.
  487.  
  488. Ich möchte hier schon mal vorweg nehmen, daß die  Lektion2.TXT  mit  ihren
  489. Beispielen  die schwierigste von allen ist. Wenn ihr die überstanden habt,
  490. dann ist die Sache gelaufen. Denn schon ab Kapitel 3 beginnen wir mit  den
  491. ersten  Coppereffekten, und von da an werdet ihr schnell wie Kanonenkugeln
  492. sein. Also bitte ich  euch,  die  ersten  beiden  Lektionen  mit  Ruhe  zu
  493. verdauen,  ohne  Dinge  zu  überspringen  und -wie bei Romanen- die letzte
  494. Seite am Anfang zu lesen. Es bringt nichts.
  495.  
  496. Nun schau´n wir mal, was wir zum programmieren brauchen:
  497.  
  498. -Der ASSEMBLER ist das Programm, das die Listings mit ihren Befehlen (ADD,
  499. SUB,...),  für  den  Programmierer  lesbar, in das Äquivalente von binären
  500. Zahlen übersetzt (für den Microprozessor lesbar). So wird z.B. der  Befehl
  501. "RTS"   in   $4e75   übersetzt,  usw.  Das  macht  programmieren  halbwegs
  502. menschlich, denn stellt euch vor,  ihr  müßtet  jeden  Befehl  als  Nummer
  503. auswendig  wissen!  Das  würde programmieren in reiner MS bedeuten, es ist
  504. aber klar, daß es  viel  besser  ist,  in  ASSEMBLY  zu  tippen!  Der  nun
  505. entstandene  binäre  Code  wird  Objekt-Code  genannt  und  ist direkt vom
  506. Computer ausführbar. Man kann ihn als ausführbares File  abspeichern  oder
  507. direkt   testen.  Ach  ja,  erinnert  euch  auch,  daß  in  Assembler  die
  508. Numerierung in Hexadezimal gängig  ist!  Hex-Zahlen  sind  jene,  die  das
  509. "$"-Symbol  am  Anfang  stehen  haben.  Sie  arbeiten mit der Basis 16, im
  510. Gegensatz zum Dezimalsystem, das mit Basis  10  arbeitet,  das  heißt,  es
  511. kommen  auch  die  Buchstaben  A,B,C,D,E,F vor, wie im vorherigen Beispiel
  512. $4e75. Es ist egal, ob die Buchstaben groß oder  klein  geschrieben  sind,
  513. $4e75  ist  identisch  mit $4E75. Wenn in einem Listing "Grammatik"-Fehler
  514. vorkommen, dann weist uns der Assembler darauf hin. Denn  es  gibt  einige
  515. präzise  Regeln,  die  einzuhalten  sind.  So  z.B.  muß  ein  LABEL (oder
  516. Etikette) am Anfang einer Zeile stehen, es dürfen keine Leerzeichen  davor
  517. sein,  und  es  muß  mit  einem Doppelpunkt (:) enden. Ein korrektes Label
  518. sieht so aus:
  519.  
  520. PLUTO:
  521.  
  522. Der  Name  kann nach Belieben vergeben werden, und PLUTO geht gut, denn es
  523. beinhaltet keine komischen Zeichen wie +-=^  usw,  es  beginnt  am  Anfang
  524. einer  Zeile  und endet mit :. Labels werden im ganzen Programm an "Dinge"
  525. vergeben, und sie dienen dazu, diese Dinge zu merken, sie zu finden,  wenn
  526. man  sie sucht. Wenn man innerhalb des Programmes einer Reihe von Befehlen
  527. den Namen PLUTO gibt, und dann zu irgend einem Zeitpunkt den Befehl  gibt,
  528. Pluto  auszuführen,  dann  werden die Instruktionen darunter abgearbeitet.
  529. Genauso können wir einem Bild oder einem Musikstück ein  Label geben.  Die
  530. Labels  stellen  also die Speicherstelle dar, an der etwas liegt, genauso,
  531. wie Städtenamen die geographische Position der  selben  angibt!  Wenn  ich
  532. nach  Sidney gehen will, dann gehe ich da hin, wo das Label Sidney: steht.
  533. Erinnert euch aber, daß Labels nur uns Codern als Gedächtnisstütze dienen,
  534. der  Assembler  verwandelt dann alles in Zahlen, seien es nun Befehle oder
  535. Labels (die ja nur Speicherstellen  sind  und  somit  eine  Adresse,  eine
  536. Haus-"Nummer" haben).
  537.  
  538. Dann   gibt´s  noch  die  Befehle,  die  IMMER  von  einem  oder  mehreren
  539. Leerstellen vorangegangen werden muß,  besser  noch  von  einem  TAB,  der
  540. gleich  8 auf einen Schlag macht (es ist die Taste über CTRL), gefolgt von
  541. den Operanden.
  542.  
  543. Pluto: MOVE.L $10,$20
  544.  
  545. In diesem Fall ist MOVE.L der Befehl (oder Instruktion), während der erste
  546. Operand $10 ist und der zweite $20.  Manche  Befehle  brauchen  nur  einen
  547. Operanden, andere überhaupt keinen, z.B.:
  548.  
  549. CLR.L $10
  550.  
  551. Nur  ein  Operand.  Befehle wie RTS brauchen z.B. keinen. Dann ist da noch
  552. der Kommentar, der uns hilft, zu erinnern, was wir  gerade  tun:  er  wird
  553. immer nach einem Strichpunkt (;) geschrieben.
  554.  
  555. Pluto:  ;LABEL, stellt die Adresse von MOVE dar MOVE.L $10,$20 ;Befehl mit
  556. 2 Operanden CLR.L $10 ;Befehl mit 1 Operand RTS ;Befehl ohne Operanden
  557.  
  558. Die  Kommentare  werden  beim  assemblieren  verworfen,  also  könnt   ihr
  559. schreiben,  was  und wieviel ihr wollt, Hauptsache nach dem ;. Das war die
  560. Grammatik. Nach diesen einfachen Regeln wird das Programm erzeugt, und  ob
  561. es dann tut, was ihr wolltet, hängt dann ganz von euch ab!
  562.  
  563. -Ein  EDITOR  hingegen  ist  ein  Programm,  das euch ermöglicht, Texte zu
  564. schreiben und zu modifizieren,  in  unserem  Fall  werden  wir  damit  die
  565. Listings  schreiben,  die ja nichts anderes sind als Text, der die Befehle
  566. (Move, Sub,...) und die Kommentare enthält. Bessere  Editoren  haben  dann
  567. Such-  und  Ersetzoptionen,  mit  denen  gewisse Zeichenfolgen gesucht und
  568. ersetzt werden können. Normalerweise endet der Filename  von  ASM-Listings
  569. mit  .ASM  oder  .S. Ich bevorzuge .S, TExte, die zum lesen bestimmt sind,
  570. enden mit .TXT. Der Name des File aber  beeinflußt  in  keiner  Weise  die
  571. Funktionsweise des Assemblers, der frißt alles.
  572.  
  573. -Ein MONITOR ist in diesem Fall nicht die Glotze des Computers,sondern ein
  574. anderes Programm, das euch ermöglicht, die Inhalte des Speichers zu sehen,
  575. z.B.  was  auf  Speicherzelle $100 steht usw. Normalerweise haben Monitore
  576. auch  einen DISASSEMBLER, das Gegenteil des  Assemblers,  mit  integriert,
  577. das das Sehen des Speichers als Befehlen erlaubt. Er verwandelt also MS in
  578. Assembly, er verwandelt $4e75 in "RTS".
  579.  
  580. -Ein DEBUGGER, wortwörtlich "Entwanzer", dient dazu, ein  Programm  Befehl
  581. für  Befehl  durchzugehen  und  zu  testen.  Damit findet man meistens die
  582. Stelle, an der ein Fehler liegt.
  583.  
  584. Manchmal muß der Objektcode, um einwandfrei unter  dem  Betriebssystem  zu
  585. arbeiten,  gelinkt  werden,  denn  ein ausführbares File enthält nicht nur
  586. einen Block von Befehlen, sondern auch Angaben  darüber,  wie  er  in  den
  587. Speicher  geladen  werden soll. Das geschieht mit dem LINKER. Das gilt für
  588. .EXE  und  .COM  Files  unter  MSDOS  genauso  wie   bei   allen   anderen
  589. Betriebssystemem. Das ist auch der Grund, warum unter Atari oder MacIntosh
  590. Amigafiles  nicht  gelesen  werden,  obwohl  sie  den  gleichen  Prozessor
  591. besitzen: weil das Format eben anders ist. Speziell unter dem Amiga gibt´s
  592. die HUNKs, und um Objectcode durch Mausklick oder  Shellbefehl  ausführbar
  593. zu  machen,  müssen  sie  gelinkt  werden.  Zum  Glück  haben  die meisten
  594. Assembler den Linker eingebaut, und ihr müßt euch nicht darum sorgen!
  595.  
  596. Gut, der Assembler, der diesem Kurs beigefügt ist,  der  TRASH´M´ONE,  hat
  597. einen  Editor, einen Assembler, einen Debugger/Monitor und einen Linker!!!
  598. Alles in einem, was will man denn mehr! Es ist die modifizierte PD-Version
  599. des Asmone.
  600.  
  601. Übrigens,  zum  Editor,  ihr könnt einen Text suchen, indem ihr die Tasten
  602. AMIGA rechts+Shift+S gleichzeitig drückt, oder mit der  rechten  Maustaste
  603. aus  dem  Menue  die Option SEARCH unter dem Titel "Edit Funkt." auswählt.
  604. Nun erscheint links oben die Schrift  "Search  for:",  wo  ihr  das  -oder
  605. dieWorte  eingebt,  die ihr suchen wollt. Es kann nützlich werden, z.B. um
  606. die Stelle wiederzufinden, an der ihr aufgehört habt, zu lesen, in  diesem
  607. Fall  Zeile  592  (wird  links  unten  angezeigt), oder ihr sucht das Wort
  608. "Funkt." oder "Zeile 592" oder was euch grade einfällt.
  609.  
  610. Natürlich hätten wir normalerweise das Listing mit einem Editor  schreiben
  611. müssen und mit einem beliebigen Namen abspeichern.Dann mit einem Assembler
  612. laden, assemblieren und den Objektcode speichern. Um das Programm dann  zu
  613. guter  Letzt  testen  zu  könne,  kommt  auch  noch das linken dazu. Um es
  614. verändern zu können, wieder mit dem Editor laden, speichern, usw. bis  zur
  615. Vergasung.  Auf  den  PC-MS-Dosen  ist  das  so  der  Fall,  und ich hab´s
  616. aufgegeben, dort in  Assembly  zu  programmieren.  Aber  beim  Amiga,  mit
  617. Multitasking  kann  man gleichzeitig Editor und Assembler laden, etc. Und,
  618. als würde das noch nicht reichen, hat jemand den ruhmvollen SEKA erfunden,
  619. ähnlich  dem  jetzigem  ASMONE, der Editor, Assembler und Monitor alles in
  620. einem hatte. Dann ging die Entwicklung weiter  zum  MasterSeka,  dann  zum
  621. ASMONE  und  dann  endlos  viele,  von  Hobbyprogrammierern  modifizierte,
  622. Versionen dessen. Die zwei verbissensten Verbesserer  (die  sind  wirklich
  623. gut!) sind die TFA die den TFA ASMONE hervorgebracht haben, und DEFTRONIC,
  624. die diesen TRASH´M´ONE ins  Leben  riefen.  Ich  habe  den  von  DEFTRONIC
  625. ausgewählt,  weil  er  am  wenigsten  BUGS  (Fehler) hat, denn die meisten
  626. anderen Versionen assemblieren oft saDFSDAF SADFFDSASAD, aber man kann  es
  627. ihnen  ja nicht verübeln, denn sie tun es ja aus purem Spaß, ohne etwas zu
  628. verdienen!
  629.  
  630. Das Endergebnis ist also, daß ihr ein Listing eintippen könnt,  und  dann,
  631. mit   ESC,   zum   Assembler/Monitor  überwechseln,  und  dort  (mit  "A")
  632. assemblieren oder den Speicherinhalt ansehen, sei es nun als  Zahlen  oder
  633. als  Befehle  dargestellt, und zum Schluß -aber nicht weniger interessant-
  634. disassemblieren. Um das ausführbare File  direkt  abspeichern  zu  können,
  635. tippt "WO" in der Kommandozeile (das ist die Zeile, die ihr erreicht, wenn
  636. ihr mit ESC den Editor verlasst). Damit  keine  Verwechslungen  auftreten,
  637. stellen  wir  noch mal klar, daß es einen Unterschied zwischen Listing und
  638. Programm gibt: das Listing ist ein Text, der  die  Befehle/Anweisungen  in
  639. ASM  enthält,  und  es  ist mit jedem Editor editierbar, z.B. dem CED oder
  640. GoldED.Das Listing wird durch "W" abgespeichert. Das Programm hingegen ist
  641. das   schon   assemblierte   File,  es  ist  von  der  WorkBench/Cli/Shell
  642. ausführbar, es hat schon den Hunk angehängt etc. Abspeichern  durch  "WO".
  643. Der  Editor  im ASMONE ist also nur ein Editor wie alle anderen, ihr könnt
  644. damit auch die Startup-sequence ändern oder  einen  Brief  an  eure  Mutti
  645. schreiben.
  646.  
  647. Alsodann,  jetzt werde ich -auf meine Art- mit den Erklärungen fortfahren,
  648. wie der Computer funktioniert.
  649.  
  650. Derjenige, der alles organisiert ist  der  Prozessor,  oder  CPU  (Central
  651. Processing  Unit),  praktisch  der Boss...Er führt Befehle aus, in der Tat
  652. besitzt er ein genaues Set von Anweisungen, die er ausführen kann, nur die
  653. und keine anderen. Er geht dabei immer der Reihe nach, erst eine, dann die
  654. nächste, usw., außer man befiehlt ihm, nach weiter vorne  oder  hinten  zu
  655. springen,   oder   eine   Schleife   (Loop)  auszuführen.  Einige  Befehle
  656. (Anweisungen) sind: MOVE, das soviel bedeutet wie bewegen, hier  aber  als
  657. "kopieren"  zu interpretieren. Move $10,$20 sagt also "Kopiere das, was in
  658. $10 (Adresse/Speicherzelle) nach $20" aus. Dann CLR, Abkürzung für  Clear,
  659. also  Lösche, setze auf NULL: CLR $10 -> lösche die Adresse/Zelle $10. Als
  660. Adresse, Speicherzelle oder Zelle meine ich einen Punkt im  Speicher,  der
  661. dem Prozessor zugänglich ist.
  662.  
  663. Übrigens, der Prozessor operiert im Speicher!! Erstellen wir also eine Art
  664. "Karte" darüber:
  665.  
  666. Wenn die Befehle mit Adressen  herumhantieren,  die  kleiner  als  $200000
  667. sind,  dann  befinden wir uns im CHIP RAM. Von $000000 bis $80000 befinden
  668. sich die ersten 512kB Chip Ram, also die der alten A500  und  A2000,  wenn
  669. die  Ram aber bis $100000 weitergeht, haben wir 1MB Chip Ram, wie z.B. die
  670. A500+,  A600  oder  die  neueren  A2000.  Bei  den  A1200,   auffrisierten
  671. (erweiterten)  A500+  oder  A600 hingegen reicht die Chip Ram bis $200000.
  672. Also sind Befehle unter $200000 in der Chip Ram:
  673.  
  674. CLR.L $30000 MOVE.L $150000,$1a0000
  675.  
  676. Das waren Instruktionen, die  in  der  ChipRam  arbeiten.  Wenn  aber  mit
  677. Adressen  über  $200000 gearbeitet wird, dann befinden wir uns in der Fast
  678. Ram. Ein alter A500 mit 1MB Speicher ist in zwei Blöcke  zu  512kB  (512kB
  679. Fast + 512kB Chip) aufgeteilt:
  680.  
  681. 1)  von  $000000  bis  $80000  ;ersten  512kB  CHIP RAM 2) von $c00000 bis
  682. $c80000 ;512kB FAST RAM
  683.  
  684. Mit Utilities wie SYSINFO könnt ihr feststellen, wie  eure  Speicherblöcke
  685. verteilt sind.
  686.  
  687. Dann  existieren  noch  spezielle  Speicherzonen, wie in etwa die der ROM,
  688. also des Kickstarts. Die beginnt normalerweise bei $fc0000  für  Kick  1.2
  689. und  1.3  und  $f80000 für Kick 2.0 und 3.0. Die ROM kann im Gegensatz zur
  690. RAM nur gelesen, nicht aber überschrieben werden.  Sie  bleibt  auch  nach
  691. abschalten des Computers intakt.
  692.  
  693. Eine  extrem  wichtige  Adresse  ist  noch  $DFF000,  denn von $DFF000 bis
  694. $DFF1FE sitzen die CUSTOM CHIPS für  Grafik  und  Sound.  Um  eine  Grafik
  695. anzuzeigen  oder  Musik spielen zu lassen, muß man in die Adressen $DFFXXX
  696. die richtigen Werte schreiben, sonst passiert gar  nix.  Diese  speziellen
  697. Adressen  werden auch REGISTER genannt. Probiert mal, in der Kommandozeile
  698. (mit ESC schaltet ihr zwischen Kommandozeile und Editor  um!)  den  Befehl
  699. "=C"  einzutippen,  ihr werdet eine Zusammenfassung der Register mit ihrer
  700. Adresse erhalten. Die Zahlen sind die Adressen, 000 steht für $DFF000, 100
  701. für  $DFF100,  und  die  Namen  sind daneben geschrieben, z.B. ist $dff006
  702. VHPOSR,  und  $dff100  BPLCON0.  Diese  Adressen  kann  man  entweder  nur
  703. beschreiben  oder  nur  lesen,  z.B.  $dff006  ist nur lesbar, $dff100 nur
  704. beschreibbar. Ihr werdet zwischen Zahl und Namen entweder ein W oder ein R
  705. stehen sehen : W (write) -> nur schreiben, R (read) nur lesen. Andere sind
  706. S (strobe) oder ER (EarlyRead), wir werden sie besprechen,  wenn  wir  sie
  707. verwenden.
  708.  
  709. Weitere  Spezialadressen  befinden  sich  in der Gegend von $bfeXXX, genau
  710. gesehen von $bfe001 bis $bfef01. Sie beziehen sich auf den Chip CIAA,  der
  711. verschiedene  Dinge  beinhaltet,  wie  den  Timer  oder die Kontrolle über
  712. verschiedene Ports, z.B. den Parallelport, das ist der, an dem der Drucker
  713. hängt. Analog dazu gibt´s die CIAB, sie hängt an den Adressen $bfdXXX.
  714.  
  715. In  Erinnerung behalten müßt ihr eigentlich nur, daß wenn ihr eine Adresse
  716. vom Typ $bfeXXX, $dfdXXX oder $dffXXX seht, sie sich auf  die  CustomChips
  717. bezieht,  die  Farbänderungen  auf  dem  Bilschirm  zur  Folge haben, oder
  718. Bewegungen von Maus oder Joystick einlesen uvm.
  719.  
  720. Was die RAM angeht, sei es nun CHIP oder  FAST,  braucht  ihr  euch  nicht
  721. darum  zu  kümmern,  wo  welcher  Befehl  landet. Das erledigt für uns der
  722. ASMONE, wir müssen lediglich einige LABELs verteilen,um gewisse Stellen zu
  723. markieren,  danach  ersetzt der Assembler sie mit den realen Adresswerten.
  724. Wen´s interessiert, er  kann  danach  nachschauen,  wo  die  Instruktionen
  725. gelandet sind.
  726.  
  727. Aber  fahren wir mit den Beispielen fort: Es gibt Befehle wie ADD und SUB,
  728. die soviel wie Addition und Subtraktion bedeuten, un so bedeutet z.B.  SUB
  729. #10,ENERGIE  "ziehe  von  ENERGIE  10  ab".  Weiters  Multiplikationen und
  730. Divisionen wie MULS, MULU, DIVS und DIVU und die logischen Operationen OR,
  731. AND  NOT  und andere. JMP bedeutet JUMP ("Springe"), also springe zu einer
  732. bestimmten  Adresse  (z.B.  JMP  $40000),  JSR  hingegen  veranlasst   den
  733. Prozessor,  zu  einer Routine auf einer bestimmten Adresse zu springen und
  734. diese durchzuführen, bis er einem RTS begegnet (JSR "Jump  to  SubRoutine"
  735. ->  "Springe  zu  SubRoutine"), (RTS "Return from Subroutine" -> "Verlasse
  736. SubRoutine, kehre zurück"). RTS steht also für "komm zurück,  die  Routine
  737. ist  fertig", und die Abarbeitung des Programmes fährt nach dem JSR wieder
  738. fort. BRA tut im Wesentlichen das geliche wie JMP, BSR wie JSR. TST  heißt
  739. "Test"  (gegenüber  NULL),  es testet also eine bestimmte Adresse oder ein
  740. Register, ob es NULL ist.  Diese  Instruktion  oder  die  Instruktion  CMP
  741. ("Compare",  ->Vergleiche),  die  etwas  mit etwas Anderem vergleicht, ist
  742. normalerweise von einem sog. "Bedingtem Sprung" gefolgt: z.B. BEQ ("Branch
  743. if  Equal"  ->  "Springe wenn Bedingung erfüllt") oder BNE ("Branch if not
  744. Equal"  ->  "Springe  wenn  Bedingung  NICHT  erfüllt").   So   kann   man
  745. verschiedene Verzweigungen erzeügen, hier ein dummes Beispiel:
  746.  
  747. Anfang:  BSR  GLOCKEN  ;  BSR  ->  springt bis unter das Label "GLOCKEN" ;
  748. danache kommt er hierher zurück und führt WarteMaus aus  BSR  WarteMaus  ;
  749. Wartet,  bis  Mausknopf  gedrückt  wird  BSR  PAVAROTTI  RTS ; verläßt das
  750. Programm, kehrt zum ASMONE oder zur Workbench zurück,  jenachdem,  von  wo
  751. aus es gestartet wurde.
  752.  
  753. WarteMaus:  Hier  wird kontrolliert, ob der Mausknopf gedrückt wurde. Wenn
  754. NICHT, springt er zu WarteMaus zurück, er läuft praktisch  im  Kreis,  bis
  755. der  Mausknopf  gedrückt  wird, wie ein Hund, der versucht, seinen eigenen
  756. Schwanz  zu  fangen.  In  diesem  Fall  werden  wir  ein  "BNE  WarteMaus"
  757. verwenden.
  758.     
  759. RTS ; Ende der Subroutine, kehre unter das ; aufrufende "BRS" zurück
  760.  
  761. GLOCKEN: DingDong ; eine Routine, die "DingDong" spielt
  762.     
  763. RTS
  764.  
  765. PAVAROTTI: AAAAAAAHHHHHHHHH ; Diese Routine läßt den Pavarotti singen
  766.     
  767. RTS
  768.  
  769.  
  770. END ; zeigt das Ende des Listings an, kann man ; auch weglassen
  771.  
  772. (Was unter dem END geschrieben wird, wird vom Assembler nicht gelesen)
  773.  
  774. Also, wenn wir dieses hypotetische Programm starten würden,  dann  könnten
  775. wir sagen, daß es bei "Anfang" beginnt, und diese Routine die Hauptroutine
  776. ist, die drei UnterRoutinen (SubRoutines, Teile  eines  Programmes,  denen
  777. man  einen  Namen  gibt, z.B. PAVAROTTI) der Reihe nach aufruft: als ertes
  778. würde der Prozessor zu "GLOCKEN" springen und die Glocken  läuten  lassen,
  779. dann  findet  er  ein  RTS,  kehrt also unter das BSR GLOCKEN zurück, dort
  780. findet er aber ein weiteres BSR, das, das ihn zu  WarteMaus  bringt.  Dort
  781. bleibt  er,  bis  jemand  die  Maus  drückt  (eine  Knopf  davon, versteht
  782. sich...). Der Prozessor  kontrolliert  auch eine  Milliarde  mal,  ob  der
  783. Mausknopf  gedrückt  wurde,  und  erst,  wenn  das  eintrifft, kann er die
  784. Routine verlassen, da der Endloszyklus unterbrochen  wird,  weil  das  BNE
  785. nicht  mehr  wahr  ist.  Am  RTS  von  WarteMaus  angekommen, hüpft er zum
  786. Hauptprogramm zurück, wo ihn schon das nächste  BSR  erwartet:  PAVAROTTI.
  787. Wenn  er dann vom Pavarottikonzert zurückkommt, findet er nur mehr ein RTS
  788. vor: für ihn bedeutet das, daß er aussteigen soll,  zum  ASMONE  oder  zur
  789. Workbench, jenachdem. Das Programm ist zu ENDE.
  790.  
  791. Jetzt   erkläre   ich   euch  besser,  wie  der  Prozessor  sich  mit  den
  792. verschiedenen Befehlen verhält: Im Falle von "BEQ Label" sprechen wir  von
  793. einer  Verzweigung, denn an diesem Punkt gibt es zwei Alternativen: stellt
  794. euch einen Baum vor, so einen richtig alten und trockenen  ohne  Blättern,
  795. eine  uralte  Eiche  mit  einem knotigen Stamm, der sich an einem gewissen
  796. Punkt in zwei Äste unterteilt, und jedes der Äste verzweigt  sich  nochmal
  797. in  zwei  kleinere  Äste, und so weiter. Wenn wir nun am BEQ ankommen, ist
  798. es, als wären wir eine kleine Ameise, die am Anfang des Programmes -  also
  799. des  Stammes - gestartet ist, wo unser Ameisenhaufen START: steht. Gut, wo
  800. wir nun zur VERZWEIGUNG: gekommen sind, müssen  wir wählen,  entweder  den
  801. linken  Ast  oder  den  rechten. Diese Wahl trifft der 68000 auf Grund des
  802. Resultates einer vorherigen Bedingung, praktisch eines CMP oder eines TST:
  803.  
  804. START: ; Ameisenhaufen im Gras ... ... TST.B LABEL30 ; ist  das  Byte  von
  805. LABEL30  =  0 ??? (Beispielbedingung) BEQ RECHTERAST ; wenn ja, springe zu
  806. RECHTERAST ; wenn nicht (ungleich 0), dann fahre mit LINKERAST fort.  (das
  807. bedeutet, das Byte hatte einen Wert zwischen $01 und $FF)
  808.  
  809. ... ; Befehle von LINKERAST ... ...
  810.     
  811. RTS  ;  ENDE,  wir  steigen  aus.  Wir  haben  den  linken Ast ; genommen.
  812. RECHTERAST: ... ; Befehle vom rechten Ast... ... ... RTS ; Ende, wir haben
  813. den rechten Ast genommen.
  814.  
  815. In  diesem  Fall  verwenden  wir eine Testbedingung (TST, Vergleich mit 0,
  816. oder CMP, vergleich zwischen zwei Operatoren), gefolgt von einem BEQ (wenn
  817. ja,  springe...) oder einem BNE (wenn nicht, springe...), um entweder eine
  818. Serie von Befehlen auszuführen oder eine andere. Wir haben das  BNE  schon
  819. verwendet,  um  eine  Schleife  (LOOP)  durchzuführen, in der eine gewisse
  820. Anzahl von Instruktionen wiederholt  ausgeführt  werden,  bis  nicht  eine
  821. bestimmte  Kondition  (Bedingung)  eintrifft,  zum Beispiel der Mausdruck.
  822. Eine Schleife kann man vielleicht besser mit  einem  Roboter  vergleichen,
  823. der  immer  die gleiche Handlung ausführt, auch zig-millionen mal, ohne zu
  824. ermüden oder zu streiken:
  825.  
  826. GEH IN DIE KÜCHE, KONTROLLIERE, OB DER KUCHEN FERTIG  IST,  WENN  ER  NOCH
  827. NICHT  FERTIG  IST,  GEH  INS  WOHNZIMMER  UND  ENTLAUSE  DEN  HUND FÜR 30
  828. SEKUNDEN, DANN GEH IN DIE KÜCHE, KONTROLLIERE, OB DER KUCHEN  FERTIG  IST,
  829. WENN  ER  NOCH  NICHT FERTIG IST, GEH INS WOHNZIMMER UND ENTLAUSE DEN HUND
  830. FÜR 30 SEKUNDEN, DANN GEH IN DIE KÜCHE, KONTROLLIERE, OB DER KUCHEN FERTIG
  831. IST,  WENN  ER  NOCH NICHT FERTIG IST, GEH INS WOHNZIMMER UND ENTLAUSE DEN
  832. HUND FÜR 30 SEKUNDEN, DANN GEH IN DIE KÜCHE, KONTROLLIERE, OB  DER  KUCHEN
  833. FERTIG IST, WENN ER NOCH NICHT FERTIG IST, GEH INS WOHNZIMMER UND ENTLAUSE
  834. DEN HUND FÜR 30 SEKUNDEN, DANN
  835.  
  836. Es ist wohl recht eindeutig, daß sich ein Mensch  rebellieren  würde,  für
  837. die  Dauer eines Kuchenbackens dieses Hin und Her ertragen zu müssen. Aber
  838. der 68000 macht keinen Mucks, er wiederholt alles, bis der  Kuche  endlich
  839. gar   ist,   also   das   BEQ   eintritt,  und  der  Roboter  zur  Routine
  840. HOLIHNAUSDEMROHROHNEDIRDIEHÄNDEZUVERBRENNENUNDSTELLIHNAUFDENTISCH:.
  841.  
  842. Ihr werdet schon ahnen, daß mit einigen Verzweigungen hier  und  da,  auch
  843. innerhalb  mehr  oder  weniger  großen  LOOPs,  recht  komplexe Strukturen
  844. entstehen können. Man kann da z.B. an Programme denken,  die  das  Wachsen
  845. einer  Stadt  simulieren  und  dafür  tausende von Bedingungen in Betracht
  846. ziehen. All dies ist durch  Verzweigungen  möglich,  die  Teils  mit  sich
  847. selbst, Teils mit Schleifen verbunden sind.
  848.  
  849. Die  Äste,  also  die Brocken von Befehlen, die ausgeführt werden, nachdem
  850. ein BEQ oder ein BNE eingetreten ist, oder  einfach  weil  sie  gerade  da
  851. waren,  als der 68000 vorbeikam, werden ROUTINEN oder SUBROUTINEN genannt.
  852. Es sind also  Stücke  von  Programmen,  bestehend  aus  einer  Anzahl  von
  853. Befehlen,  die  ausgeführt  werden,  wenn  eine bestimmte Aufgabe verlangt
  854. wird, bei uns war es der Roboter, der den Kuchen aus dem Rohr holte. Diese
  855. Aufgaben  können praktisch in eine eigene Routine gelegt werden, die immer
  856. dann angesprungen wird, wenn ein Kucken aus dem Rohr  zu  holen  ist.  Die
  857. Aufgabe von Routinen liegt prinzipiell genau darin, nicht immer einen Teil
  858. des Listings neuschreiben zu müssen, wenn z.B. ein Kuchen aus dem Rohr  zu
  859. holen ist. Wir können also diese Serie von Anweisungen, die dazu notwendig
  860. sind, isoliert in eine Routine geben, ihr am Anfang  ein  Label  versetzen
  861. und  am  Ende  ein  RTS.  Geben  wir  einer  Subroutine  eine  Definition:
  862. -SUBROUTINE wird folgende  Struktur  genannt,  die  aus  einem  Block  von
  863. Befehlen  besteht,  der  von  einem  LABEL  (Belibiger  Namen, gefolgt von
  864. Doppelpunkten) vorangegangen wird und mit einem speziellem Befehl, dem RTS
  865. (ReTurn  from  Subroutine)  endet.  Sie  wird normalerweise mit einem BSR,
  866. gefolgt vom Namen der Subroutine, angesprungen. Nach abarbeiten  derselben
  867. fährt  das Programm in der Zeile unterhalb des aufrufenden BSR weiter. Das
  868. alles ist mit dem Käptn eines Unterseebootes vergleichbar, der  in  diesem
  869. Fall   das   Hauptprogramm  darstellt,  der  durch  Verteilen  von  Ordern
  870. gewissermaßen  Subroutinen  durchführt,  z.B.  wenn  er  im  Periskop  ein
  871. feindliches  Schiff sieht, wird er ein BSR TorpedosLaden durchführen, also
  872. den Befehl geben, die  Torpedos  scharf  zu  machen.  Bis  die  Subroutine
  873. TorpedosLaden nicht fertig ist, kann er nicht fortfahren. Wenn er dann die
  874. Mitteilung  erhält,  daß  diese  klar  sind,  wird  er  mit  der  Prozedur
  875. fortfahren:  BSR  SchiffLinks  und  BSR SchiffRechts, bis es nicht auf der
  876. Schußlinie zum gegnerischen Schiff liegt; das kann man mit einer  Schleife
  877. vergleichen,  die  mit  einem CMP SCHIFF,SCHUßLINIE, gefolgt von einem BNE
  878. VERSTELLUBOOT, aufgebaut ist, d.h.: "Ist das Label, die die  Position  des
  879. feindlichen  Schiffs  enthält,  gleich  mit  dem  Label,  die die Position
  880. enthält, die die Torpedos treffen werden (Schußlinie)?"  wenn  noch  nicht
  881. (BNE),  dann  verstelle  noch,  also  kehre zur Routine zurück, die zuerst
  882. erkennt, ob wir  zu  weit  links  oder  zu  weit  rechts  sind,  und  dann
  883. dementsprechend  die  Routinen  SchiffLinks oder ShiffRechts aufruft. Dies
  884. ist mit dem Loop des Roboters vergleichbar, der darauf  wartete,  daß  der
  885. Kuchen  gar  ist, nur müssen wir hier selbst aktiv die Position erreichen,
  886. wie beim WarteMaus, bei dem wir  die  Maustaste  drücken  mußten,  um  den
  887. Zyklus  zu  unterbrechen.  Wir waren bei der Zielschleife stehengeblieben:
  888. auf einmal giebt der Kommandant den Befehl, die Torpedos zu  feuern!  (BSR
  889. SCHUßEINS,  BSR  SCHUßZWEI).  BOOOOOOOOM... Es hat funktioniert... überall
  890. liegen Tote rum, Socken schwimmen auf dem Wasser, Witwen und  Waisen  sind
  891. über  ganz  Deutschland  verstreut  (in den Kriegsfilmen sterben immer die
  892. Deutschen...), ein Relikt am Meeresgrund. RUHIG BLUT! Es war nur eine gute
  893. Computersimulation!
  894.  
  895. Wenn  ihr nun in die Logik des Prozessors eingegangen seid, dann ist alles
  896. in Butter. Alles, was ihr auf dem Computer so laufen seht, sei es nun  ein
  897. Programm  für  die Wettervorhersage, ein Demo mit Kuben und Kügelchen, ein
  898. Actionspiel,  besteht  aus  Stücken  von  Programmen,  die  zyklisch  oder
  899. sequentiell (in einer Schleife oder Nacheinander) aufeinander abfolgen, je
  900. nach Ergebnis der Abfragen wie TST, CMP, BTST. Also ist jede durchgeführte
  901. Operation,  auch  wenn sie noch so kompliziert und komplex erscheint, eine
  902. Summe von einfachen Abfragen und Verzweigungen, gefolgt  von  Anweisungen.
  903. Jede  Subroutine  kann  aus  vielen,  kleineren Subroutinen bestehen, z.B.
  904. HOLDENKUCHENAUSDEMROHR:
  905.  
  906. HOLDENKUCHENAUSDEMROHR:  BSR   SchaltDasRohrAus   BSR   ÖffneDasRohr   BSR
  907. NimmDenKuchen  (Es  ist  ja  ein  Roboter,  der  verbrennt sich nicht) BSR
  908. LegDenKuchenAufDenTisch
  909.  
  910. RTS
  911.  
  912. Jede dieser SubRoutinen kann durch weitere Subroutinen aufgeteilt werden:
  913.  
  914. SchaltDasRohrAus: BSR GehZumSchalter BSR DrehIhnNachLinks
  915.  
  916. RTS
  917.  
  918. Der größte Komfort der SR (Subroutinen) liegt darin, daß man das  Programm
  919. in  logische  Teile  gliedern  kann,  die  es  somit  klarer und einfacher
  920. gestaten, und daß  man  Sammlungen  von  ihnen  anlegen  kann,  die  immer
  921. wiederverwenden  kann,  z.B. eine Joystickabfrage. Diese kann man in jedem
  922. Spiel einfügen, muß vielleicht einige leichte Änderungen daran  vornehmen,
  923. aber  die größte Arbeit ist getan. Das gleiche gilt für Musikroutinen oder
  924. SR, die ein Männchen bewegen.
  925.  
  926. Damit wollte ich euch eine Idee verschaffen, wie der arme  Prozessor  hin-
  927. und  hergejagt  wird,  je  nach  Ausgang  einer  Abfrage.  Wenn bei diesem
  928. Hinundhergehüpfe dann mal ein Fehler auftritt,  z.B.  fehlerhaft  geladene
  929. Daten  von  der  Disk  oder  wo  Programmierer versagt hat, dann tritt das
  930. mythische GURU MEDITATION  bzw.  SOFTWARE  FAILURE  in  seinem  unheimlich
  931. leuchtendem  rotem  Fenster auf. Der RAM-Speicher kann man beschreiben, er
  932. wird, wie schon gesagt, in FAST und CHIP aufgeteilt. Der Unterschied liegt
  933. darin,  daß  Grafiken  und  SOUND  unbedingt in die CHIP-RAM gelegt werden
  934. müssen, während Instruktionen für den Prozessor genausogut in FAST  wie IN
  935. CHIP  leben.  Z.B.  hat der alte A500 mit Kick 1.2 oder 1.3 512kB Ram, und
  936. wenn man ihn erweitert insgesamt 1MB, aber die ersten 512kB sind CHIP, die
  937. anderen FAST! Deswegen endet der Speicher unter DeluxePaint bei einem A500
  938. mit 1MB schneller als bei einem A500+, der den ganzen 1MB  nur  CHIP  hat.
  939. Beim  A500  sind die 512kB FastRam übrig, sie sind zum Öffnen von Fenstern
  940. ungeeignet, deswegen meldet er, daß kein Speicher mehr frei ist. Wenn  man
  941. programmiert, und versucht, Grafik in die FAST-RAM zu legen, dann passiert
  942. so ziemlich alles, aber es wird keine Grafik angezeigt. Der  Speicher  ist
  943. in  Blöcke  aufgeteilt,  beim  A500 geht er von $00000 bis $80000, und die
  944. 512kB Erweiterungsspeicher von $c00000  bis  $c80000:  das  Betriebssystem
  945. weiß  genau,  wie der Speicher verteilt ist, und es legt ein Programm, das
  946. von  der  Workbench  oder  von  der  CLI/Shell  geladen  wurde,  je   nach
  947. Anforderung  in  Chip  oder  Fast.  Danach springt der Prozessor an diesen
  948. Punkt und beginnt mit der Abarbeitung. Dem Anwender bleibt aber unklar, wo
  949. sein  Programm  hingeladen wurde und wo der Prozessor gerade arbeitet. Ich
  950. ahbe gesagt, daß der Speicher beim A500 von $00000 bis  $80000  geht,  der
  951. Speicher  ist  in  der  Tat  in  Teile zerlegt, wie eine Straße mit vielen
  952. Häusern, von denen jedes eine Adresse hat: nicht  ohne  Grund  heißen  die
  953. Adressen  (Adress, in englisch): Am Anfang der Straße ist das Haus mit der
  954. Nummer  0,  dann  Nummer  1,  usw.  Es  wird  aber  das  Hexadezimalsystem
  955. verwendet,  also  mit  Basis 16. Aber das ist kein Problem, denn unter dem
  956. ASMONE kann man jede Hexziffer sofort  konvertieren,  indem  man  den  "?"
  957. verwendet:  ?$80000  ergibt  524288  in  Dezimal,  also 512*1024, also ein
  958. halber kB, "ein halbes Kilo", multipliziert mit 1024 (->  1kB),  das  dann
  959. einen  halben Mega ergibt. $100000 hingegen ist das doppelte, probiert mal
  960. ?$80000*2 ("*" -> "Mal", multiplikation). Die Hexzahlen werden  von  einem
  961. Dollarzeichen  angeführt,  wie  ihr  gesehen  habt,  die Dezimalzahlen von
  962. nichts, die Binärzahlen von einem %. Diese Dinge  sind  von  grundlegender
  963. Bedeutung:  so,  wie  es  für die Distanz das Meter, den Dezimeter und den
  964. Zentimeter gibt, gibt es für den Speicher des BIT, das BYTE, das WORD  und
  965. das  LONGWORD.  Das  Bit  ist  die  kleinste Einheit im Speicher. Ein Byte
  966. besteht aus 8 Bit, und das ist eine Einheit,  die  eine  Adresse  besitzt:
  967. Hier  kann der Prozessor sagen: Bewege (oder besser: kopiere) das Byte aus
  968. dem Haus in der Speicherallee Nr. 10 in das Haus in der Speicherallee  Nr.
  969. 16.  In  diesem  Fall  hat  er  die  acht  Bit, die im Byte 10 (also $A in
  970. Hexadezimal) enthlaten waren, ins Byte 16  kopiert.  Um  Durcheinander  zu
  971. vermeiden, hier das Beispiel in Zeitlupe: die Bit´s können entweder 0 oder
  972. 1 sein; die Bit im Byte 10 waren : 00110110, im Byte 16 hingegen 11110010.
  973. nach  dem MOVE.B 10,16 bleibt das Byte 10, wie es war, und das Byte 16 ist
  974. nun 00110110. Das .B nach dem Move deutet an, daß nur ein Byte  verschoben
  975. wird,  also  der kleinste Teil, den wir direkt ansprechen können. Man kann
  976. auch ein MOVE.W oder ein MOVE.L einsetzen,  also  ein  WORD(.W)  oder  ein
  977. LONGWORD(.L), die nichts anderes sind als: 1 Word = 2 Byte, ein Longword =
  978. 4 Byte = 2 Word. Wenn man also ein MOVE.W 10,16 ausführt, dann werden zwei
  979. Bytes kopiert: in die Zelle (Adresse) 16 kommt das Byte von Adresse 10, in
  980. die Zelle 17 das Byte von Adresse 11. Im Falle eines MOVE.L werden 4 Bytes
  981. verstellt: 10->16, 11->17, 12->18, 13->19. Machen wir ein kleines Schema:
  982.  
  983. VOR  dem MOVE.B 16,10      08/09/10/11/12/13/14/15/16/17/18/19/20
  984.                  W  O  R  T       P  E  D  A  L
  985.  
  986. NACH dem MOVE.B 16,10      08/09/10/11/12/13/14/15/16/17/18/19/20
  987.                  P  O  R  T       P  E  D  A  L
  988.  
  989. Wenn wir ein MOVE.L 10,15  08/09/10/11/12/13/14/15/16/17/18/19/20
  990. machen                 P  O  R  T     P  O  R  T  A  L
  991.  
  992. In unserem Beispiel waren die Adressen 8, 9, 14, 15 leer, also auf NULL,
  993. während die Adressen 10-13 und 16-20 Werte (in unserem Fall Buchstaben)
  994. enthielten.
  995.  
  996. Beenden wir das Werk mit einem MOVE.W 8,10 und einem MOVE.W 10,12
  997.  
  998.                 08/09/10/11/12/13/14/15/16/17/18/19/20 
  999.                          P  O  R  T  A  L
  1000.  
  1001. Mit vier Befehlen haben wir  WORT  PEDAL  in  PORTAL  verwandelt!!  Scherz
  1002. beiseite,  fahrt  nicht  fort  bevor  ihr  nicht  in  das  echte  Hirn die
  1003. Arbeitsweise des synthetischen  Hirns  geprägt  habt!  Probiert  ein  paar
  1004. Spielchen mit den MOVE.x, das tut euch gut! Probiert zum Beispiel NEGER in
  1005. REGEN zu verwandeln, oder PAPPIS BART in BARBAPAPA,  MEIN  HAUS  in  MEINE
  1006. MAUS...
  1007.  
  1008. Erinnert  euch,daß  Prozessoranweisungen  immer an geraden Adressen stehen
  1009. müssen, wie 2, 4, 6, usw., also an WORD angepasst,  sonst  geht  alles zum
  1010. GURU...  Um  euch  die  Zweifel zu nehmen: im Speicher sind eine Reihe von
  1011. Werten hintereinander gereiht, ob es nun Prozessorbefehle sind oder  Daten
  1012. für  Grafik, Sound, SINUSTAB oder Rollschriften... Im Speicher aber liegen
  1013. sie nicht als MOVE.B 10,16 vor, das ist eine Disassemblierte  Version,  in
  1014. Wirklichkeit  sieht  dieser Befehl so aus: $13 $F9 $00 $00 $00 $0A $00 $00
  1015. $00 $10. Er besteht aus 10 Byte, wobei $13F9 in groben  Zügen  dem  MOVE.B
  1016. entspricht,  $000A  der 10 und $00010 der 13 (Hex 0A= 10 dezimal, Hex 10 =
  1017. 16 dezimal). Auf diese  Art  besitzt  jede  Operation  ein  Bytemuster  im
  1018. Speicher,  sogar  NOP,  No  Operation,  ->  keine  Operation, tut nix, hat
  1019. eines:$4e71. Vorausgreifend möchte ich sagen, daß der Prozessor, außer auf
  1020. den  Speicher  zuzugreifen,  auch noch Register besitzt: Datenregister und
  1021. Adressregister. Insgesamt sind es 16 und jedes ist ein  Longword  lang  (4
  1022. Byte).  Die  Adressregister  heißen  A0,  A1,  A2, A3, A4, A5, A6, A7, die
  1023. Datenregister D0, D1, D2, D3, D4,  D5,  D6,  D7.  Da  sich  die  Registrer
  1024. innerhalb  des  Prozessors befinden, sind sie sehr schnell, auf jeden Fall
  1025. schneller, als der Speicher. So ist die Operation MOVE.L  d0,d1  schneller
  1026. als MOVE.L $100,$200, man bevorzugt also jene, die mit Registern arbeiten. 
  1027.  
  1028. Die  ROM  -  wie  schon  gesagt- kann man nicht beschreiben, ein MOVE, das
  1029. dorthin schreibt bleibt also effektlos: ein  MOVE  auf  $FC0000  oder  auf
  1030. $F80000  ist für gar nichts gut. Es ist nur möglich, Routinen auszuführen,
  1031. die in der ROM gespeichert sind. Da aber bei jeder Version der Kick ANDERS
  1032. ist,  darf  man  ihn  NIE  DIREKT  anspringen.  Das  Betriebssystem ist so
  1033. ausgelegt, daß jede Routine,  also  Programmstück,  das  in  im  Kickstart
  1034. enthalten ist, auf die gleiche Art aufgerufen werden kann, egal, um welche
  1035. Version es sich handelt und wo im Speicher sie sich befindet: das wird mit
  1036. einem  JSR,  oder  JUMP  TO SUBROUTINE (Spring zu Adresse xxxx, dann kehre
  1037. unter das JSR zurück und fahre dort weiter), gemacht. Die  "Schrittweiten"
  1038. für  die  JSR  der  verschiedenen  SR sind fix, starten aber immer bei der
  1039. Adresse, die in Adresse 4 enthalten ist. In der Adresse  4  ist  also  die
  1040. richtige Adresse eingetragen, ab welcher sich die SR befinden, und man muß
  1041. sich IMMER daran halten, um Routinen des Kickstarts verwenden  zu  können.
  1042. Die Programme, die WorkBench-Fenster öffnen, Buchstaben auf den Bildschirm
  1043. schreiben oder Files von einer Disk lesen oder auf  eine  Disk  schreiben,
  1044. müssen jedesmal  auf  solche SR im Chip des Kick zugreifen, und ihnen z.B.
  1045. den Namen des Files übermitteln, den man öffnen möckte oder die Größe  des
  1046. Fensters...  Wenn ein Spiel, ein Programm oder ein Demo das Betriebssystem
  1047. überspringt, es also  nicht  verwendet,  dann  werden  keine  Aufrufe  zum
  1048. Kickstart  gemacht. Ein Beispiel ist das bekannte XCopy, das einen eigenen
  1049. Screen öffnet, eindeutig das Multitasking über  den  Haufen  wirft,  keine
  1050. WorkBenchfenster  hat  und auch keine Rechte-Maus-Taste-Menüs, wie sie aus
  1051. dem AmigaDOS bekannt sind. Genauso würde ein Spiel, wie ich einige  vorher
  1052. angeführt  habe, z.B. SENSIBLE SOCCER, funktionien, wenn man den Kickstart
  1053. nach dem BOOT (Start) entfernen würde, da  es  keine  Routinen  aufgerufen
  1054. werden,  die  ein  File  laden  oder ein Fenster öffnen. Die Dinge, die am
  1055. Bildschirm erscheinen, werden Eins nach dem anderen kontrolliert, und  die
  1056. Daten  werden  nicht  als  DOS-Files von der Diskette geladen, sondern als
  1057. Spuren, die direkt über den Lesekopf eingelesen werden, der wiederum  "von
  1058. Hand"  gesteuert  wird,  indem  man  an  den  verschiedenen  Pin des DRIVE
  1059. Spannung anlegt  oder  nicht  (natürlich  softwaremäßig).  Leuchtet  diese
  1060. Differenz   ein??   Zwischen   Programmen   und   Spielen,   die   dauernd
  1061. Kickstart-Routinen verwenden, deswegen  in  Multitasking  laufen  und  den
  1062. Programmen,  die  keine  Fenster  verwenden,  oder zumindest nicht die der
  1063. Workbench, und nicht mit DeluxePaint im Hintergrund  laufen,  und  die  es
  1064. nicht  erlauben,  zwischen den Applikationen umzuschalten oder einfach das
  1065. Fenster herunterzuziehen?? Kurzum, die ROM kümmert sich darum, für uns mit
  1066. der   HARDWARE   in   Kommunikation  zu  bleiben,  und  sie  führt  einige
  1067. vordefinierte Dinge  aus,  aber  wenn  wir  beschließen,  selbst  mit  der
  1068. Hardware  in Kontakt zu treten, können wir alles Mögliche tun, Hauptsache,
  1069. wir sind es im Stande!!!
  1070.  
  1071. Wir werden uns daum bemühen, Code ohne ROM-Unterstützung zu erzeugen. Aber
  1072. dann  verwenden wir nur den Prozessor? Und wie zeigt man da eine Grafik an
  1073. oder läßt Musik spielen? Mit vielen MOVE??? Jetzt kommen die  CUSTOM-CHIPS
  1074. ins Spiel!! Diese Chips heißen PAULA, AGNUS und DENISE, außerdem noch zwei
  1075. weitere, CIAA und CIAB genannt. Diese Schlaumeier  sind  dafür  zuständig,
  1076. den  Amiga  aufspielen zu lassen und die Farben auf den Schirm zu bringen.
  1077. Die meisten Register, die zu deren Kontrolle notwendig sind, befinden sich
  1078. auf  den  Adressen  zwischen $DFF000 und $DFF1FE, die anderen, die mit den
  1079. Serialund Parallelport und den Disk Drive zu tun haben, sitzen auf $BFExxx
  1080. und  $BFDxxx.  Wenn man einmal die Befehle des 68000 gelernt hat, kann man
  1081. Programme so groß wie einen Berg  schreiben,  aber  es  wird  noch  nichts
  1082. angezeigt  oder gespielt. Mit dem Prozessor muß man diese Chips ansteuern;
  1083. einer davon ist der BLITTER, der die  Aufgabe  hat,  Linien  zu  zeichnen,
  1084. Speicherstücke wie Scrolls oder Männchen auf dem Bildschirm rumzukopieren,
  1085. Flächen zu füllen (Die 3d Körper werden mit  dem  Blitter  gezeichnet  und
  1086. gefüllt;  der  Prozessor  kümmert  sich  nur  darum,  die  Koordinaten  zu
  1087. errechnen, den Rest  macht  der  Blitter).  Derjenige,  der  jedoch  alles
  1088. anzeigt und die Farben bestimmt ist der COPPER: um ein Beispiel zu machen,
  1089. $DFF180 entspricht der Farbe 0, $DFF182 der Farbe 2,  während  in  $DFF006
  1090. die  Linie  gespeichert  ist,  die  der  Elektronenstrahl  gerade  auf den
  1091. Bildschirm malt. Dieser wird 50 mal in der  Sekunde  neu  erstellt.  Diese
  1092. Register  sind  entweder  nur  zum  Lesen  oder  nur zum Schreiben: in das
  1093. Register $DFF180 kann man nur  einen  Wert  hineinschreiben,  aber  keinen
  1094. auslesen  (um  zu  erfahren,  welche Farbe gerade Farbe 0 ist...), während
  1095. $DFF006 nur lesbar ist. Um die Position des Elektronenstrahls zu verändern
  1096. gibt  es  aber  ein bestimmtes Register, genauso wie für viele andere. Mit
  1097. den Registern $BFExxx kann man die Ports kontrollieren, unter anderem  die
  1098. Maus:  z.B.  entspricht  Bit  6  der Adresse $BFE001 dem Status des linken
  1099. Mausknopfes, ob er gedrückt ist oder nicht. Man kann  dieses  Bit  mittels
  1100. Prozessors  kontrollieren  und  abwarten, bis der Mausknopf gedrückt wird,
  1101. bevor das Programm verlassen wird. Und das wird  das  erste  Beispiel  des
  1102. Kurses  sein,  das  Du analysieren kannst, indem Du Lektion1a.s ladest. Es
  1103. beinhaltet  eine  Schleife   mit   dem   68000,   die   Verwendung   eines
  1104. $DFFxxx-Registers  und  eines $BFExxx-Registers. Ladet es in einen anderen
  1105. Textbuffer, wie weiter unten erklärt.
  1106.  
  1107. Eine kleine Anmerkung, wie man den Assembler - in unserem Fall den  ASMONE
  1108. -verwendet:  Am  Anfang  wird man entscheiden, ob CHIP- oder FAST-Speicher
  1109. reserviert werden soll. Für  die  Beispiele  des  Kurses  sollte  CHIP-RAM
  1110. gewählt werden, jenachdem wieviel ihr habt, aber mindestens 250kB. Um eine
  1111. Directory oder ein anderes Laufwerk auszuwählen, tippe "V", z.B. um in die
  1112. Directory  der  Lektionen  zu  kommen,  tippt "V df0:Lektionen", um in die
  1113. Directory der Listings zu gelangen "V df0:Listings". Um nun ein Listing zu
  1114. lesen,  gibt  es den Befehl "R". Wählt ein Listing im Fenster aus. Mit ESC
  1115. wechselt man zwichen Editor und Kommandozeile. Drückt also  ESC,  und  ihr
  1116. könnt  das  Listing  verändern,  dann  nochmal, und ihr seit wieder in der
  1117. Kommandozeile, wo ihr das Listing ASSEMBLIEREN könnt. Dafür verwendet  den
  1118. Befehl  "A"  (wie  "Assemblieren"...), danach, um es auszuführen, "J", wie
  1119. "JSR"!! Ihr könnt  bis  zu  10  Texte  gleichzeitig  laden,  wenn  ihr  im
  1120. EDIT-Modus   seit,   könnt  ihr  mit  den  Tasten  F1...F10  zwischen  den
  1121. verschiedenen Textbuffern (Textfenstern) herumspringen. So  könnt  ihr  im
  1122. Ersten  die  Lektion1.TXT  laden,  im  zweiten  (F2)  das  erste Beispiel,
  1123. Listing1a.s, im Dritten (F3) das nächste (Listing1b.s) usw. Wenn  ihr  was
  1124. vergessen  habt,  könnt ihr mit F1 wieder zum Text springen und nachlesen.
  1125. Anmerkung: um  seitenweise  rauf  oder  runter  zu  gehen,  verwendet  die
  1126. Pfeiltasten  +  SHIFT,  für  die,  die keinen C64 hatten, es ist die große
  1127. Taste über ALT, die mit dem Pfeil. Nun erkläre  ich  euch,  was  passiert,
  1128. wenn  ihr "A" eingebt: das Listing (oder Source-Code) ist in stinknormalem
  1129. Textformat und besteht aus Schlüsselworten,  die  die  Befehle  sind  oder
  1130. anderen  Zeichen,  die  der  Assembler kennt. Um eine Gruppe von Befehlen,
  1131. eine "Variabel", den Beginn einer Tabelle zu kennzeichnen  oder  jeglichen
  1132. Anhaltspunkt im Listing zu haben, werden Namen mit Doppelpunkten vergeben,
  1133. eben dem LABEL oder ETIKETTEN. Der Name des Label kann beliebig  sein,  er
  1134. darf aber nicht gleich einem 68000er Befehl sein!! Beispiel:
  1135.  
  1136. WAITMOUSE:        ;das  Label
  1137.     btst  #6,$bfe001  ;Linke  Taste  gedrückt?  
  1138.     bne.s WAITMOUSE   ;wenn nicht, zurück zu  WAITMOUSE  
  1139.               ;(wiederhole  das  btst)  
  1140.     RTS           ;Ende, steig aus
  1141.  
  1142. Ich  erinnere  euch daran, daß die von Befehle mindestens einer Leerstelle
  1143. vorangegangen werden müssen. Ich  habe ein  TAB  genommen,  das  gleich  8
  1144. Leerzeichen  auf  einem  Schlag  erledigt.  Achtet  auch darauf, daß KEINE
  1145. Doppelpunkte gesetzt werden, wenn ein  LABEL aufgerufen wird, NUR wenn sie
  1146. selbst  erzeugt  wird. Also, einmal editiert wird das Listing assembliert,
  1147. das geschieht durch "A"; diese Operation läßt den ASMONE den  Text  lesen,
  1148. und  der  verwandelt  ihn  in  CODE,  den  der  68000er lesen kann. Einmal
  1149. assembliert, ist der Code in  einem  Teil  des  Speichers,  der  mit  "=R"
  1150. gelesen  werden  kann,  und mit "J" springt der Prozessor auf diesen Punkt
  1151. und führt unser Programm aus. Wenn vom ASMONE ein  Fehler  gefunden  wird,
  1152. assembliert  er  nicht  zu  Ende,  bis der Fehler nicht behoben wurde. Die
  1153. Listings, die im Kurs  enthalten  sind,  funktionieren  auch  mit  anderen
  1154. Assemblern,  wie  dem DEVPAC3 oder dem MASTERSEKA, mit allen Kickstart und
  1155. mit allen Amigas, auch denen mit dem AGA-Chipset, den A1200 und dem A4000.
  1156.  
  1157. Wenn ihr die Funktion von Listing1a.s überprüft habt, ladet "Lektion2.TXT"
  1158. in einen anderen Textbuffer (F3, z.B). Verwendet dazu "R".
  1159.  
  1160. Sollte   es   an   Speicher   mangeln,   wenn  ihr  zwischen  den  Buffern
  1161. herumschaltet, dann bedeutet das, daß ihr am Anfang (bei ALLOCATE), zuviel
  1162. reserviert  habt,  und  euch  nicht genug für die RAM DISK übrig geblieben
  1163. ist. Wählt das nächste Mal weniger aus.
  1164.  
  1165.