8(A;B ;47 Free 09 FilesR  c}E q0 \C)CC8`DCeECiD` RP h1$E ȍ @y b Y)hܭ]L]` q  DMD   u j)`0  ,p0i2 &28jJ1f02 9 g iJf0i1)xԍӭ232002XԦ`  *'  } *(L `(  L l pL[,L] C i0 } p  gފދLh ( LD 0  C  C  \i +$+0'}; $(%)  b L[C `D P^߰")(݃   $DD}G@НL]S")M T H0 G$Ș݃ b 8$}$%8(() T `$E0(0)8`$GE` P} Li 8GD }L[ PH >iJ ;  yyB } ' |L[ "E( % H$ H#`L]B  0 G LO<  ( d lH۪!A3 A }jA !B EIC Y$E0 F  < 7 JN8Ndâ!,P h0ʠJd,6 } ' r/ $ ɛ ` '  L[  l }-     }    L[L  }  '  L[   p  ` g  l }) g ' }L[) ̠,L]T-0 |LM N݃:ː6UV LM N L(TU N,)M}LL[IL3GDIɛ ɜ DI  , JȊGм  G I) GȦ=}*GG ȄI1200820I H1E 1h0hIGI2ȢI`FE 0ɛ rɛ$ l '}蚦TTUVD`M L$:;Pyȱ$` r  iȱ$/:ȱ$VWyA**⩀ / }`$***? mL]-+ȱ$ɛ m* ? g. $0f.?'@BrAsTt[ }0: gL  `$0`j`& CpCi s L0JCܢj? I#}𴽎F ގМގ& & 0 C4 08L`0   | 레L] EGȽGȽ}G | E` 8,  }EG)݀G)ȱGȱG`"!L] l!i}栠$8  (IƭIp  h,g+j? 8 ii(Lq)! }S S0$}) E9`H)N,L]8GH Lq`gNgfj****8jHi h` } 2J  &e2i`"%?&;^$IM ! ! <u hh`$}Ev옝^! 1EHFHjm GHm H`u$Ev`L=? +`!,pFE ȄD8 }q D&E`I0` i`+DOS SYSMOC.I  J ٍ = ) F)}8`Ll T!U<; Ln <JM -18    HH =}D 1 :  /1[F:M #.! 0`>C #   #`>   e}L'>/b;\I\o@ @LK~ L  % /e  L ; H}H0S0N:;=91D,1ɛK$ɛ`:;ʾ  ,ɛ}`XYȄ #`DTDRLUFFFCICLRSJ==CIYEEONSMDLNOOUAOOOARPLNCL#####PANVBNFR*),-PQORa/%<}) j ө  RES L%-, # 3 0 %   4(H 4(` }( 3  #  ZOiۨ L4RE 3 =F S Z +8!} 0+  FF % 4 4& 4(X)Y    # 4 ʤ Ȅ L"}F F LH hL4`*J 0 B B 0a   8#}    Lkl  );<  : ` 0 } T T 7̀΀$}LIl <;`<L 3   #/ ! R( 7 7   7 89i L7 ,(&  %} L480  ` Ln    `   HJJJJ h) ii0HI B V`0  ,BLV&}[J  B Vso Fhh` GH ,H hɐɀɡ)HDCȱCɛeCD먥D h'}N MSп` ED` OIH`hhXhh  nL Free FilesBreakI/O-Error 144Disk f(}ullWrite protectedFile MismatchBad FilenameAction! D O S RUN: File lock)}edDevice doneDirectory fullFile not foundBad Load FileNot DOS II+Bad HexAbort-> Source-> DestinationD1:+DOS SY}SPRACHE1.KRS ************************************** ** Die Action! Sprache +} ** ** (C)1987 by Action! User Group ** Lueneburg ** ,} ** **************************************Fuer dieses Kapit-}el wird vorausge-setzt, dass man die vorangegangenenKapitel verstanden hat!!!Beginnen wir mit den groebsten Unter-schied.}en zu Basic: 1. Es gibt keine Zeilennummern!2. Jedes Programm muss vor dem Start compiliert werden (d.h. in /} Maschinensprache uebersetzt werden und nicht wie in Basic sofort mit RUN gestarten werden.3. Action verhaelt sich ge0}genueber Basic wie ein Porsche 959 turbo zu einer ENTE. Ein Action Pro- gramm kann sogar in einem VBI (=Vertical 1}Blanc Interupt) laufen, ja sogar im Display List Inter- upt!!!.Die Gemeinsamkeiten:1. Viele Action! Befehle sind de2}n des Atari Basics identisch... (fast)2. Action! ist wie Basic relativ leicht zu erlernen.Also fangen wir an:Au3}fbau eines Action! Programms:Zuerst muessen alle Variablen ge-nannt werden und es muss angegebenwerden, von welchem Typ d4}iese seinsollen (Felder,Integer u.s.w.).Dann folgt das Programm. Das Programm besteht nur aus einzelnen Unterprg5}rammen(prozeduren)kurz: PROC.Die letze PROC im Prgrammtext ueber-nimmt dabei eine Sonderstellung ein.Diese PROC wird beim6} Programmstartnaemlich zuerst aufgerufen. Von ihraus werden dann alle anderen PROCsaufgerufen.Daraus ergibt sich, dass es7} so etwaswie GOTO bei Action! nicht gibt undauch nicht geben braucht!Strukturierte Programmierung ist hierangesagt.Bsp. 8}fuer eine PROC: PROC ZAPP() PRINTE("Atari") RETURNPROC ist dabei das Schluesselwort,dass angi9}bt ,dass nun eine PROC folgtNach PROC steht der PROCedurname unddie Angabe, wieviele Parameter ueber-geben werden sollen.:} Was Parametersind, kommt spaeter. Werden keineParameter uebergeben, dann stehenhinter dem PROCcedurnamen die Klam;}mern "()".Danach steht dann ,bzw stehen dannein/mehrere Befehle, die innerhalbder PROC ausgefuehrt werden sollen.RETURN<} gibt an , dass die PROC zuendeist. Es wird bei RETURN zu der PROCzurueckgesprungen, von der diesePROC aufgerufen wurde. H=}andelt essich dabei um die letzte PROC imProgrammtext, also die PROC die immerzuerst aufgerufen wird, dann ist dasProgram>}m beendet.Bsp. wie eine PROC von einer anderen aufgerufen wird: PROC ZAPP() PRINT("Atari - ") ?} RETURN PROC MAIN() ZAPP() PRINTE("Computer") RETURNDie Beispielprogramme koennen@}natuerlich immer in das andere Fenster uebertragen werden, soweitein anderes Fenster geoeffnet ist.Wie das geht, ist im KaA}pitel "EDITOR"erklaert. Das Bsp.programm sollte nun eigent-lich klar sein. Man sieht, dassdie einzelnen PROCs innerhalb B}desActionprogramms ,wie normale Befehlegehandhabt werden. Daraus folgtnatuerlich auch, dass z.B. der"PRINT" Befehl in ActC}ion! auch nureine PROC ist und nicht zur eigent-lichen Action! Sprache gehoert.Zu Action! gehoert: 1. die ProgrammstruktD}ur2. die Rechenanweisungen3. die Schleifen4. die Bedingungsanweisungen5. die Datentypen (Variablen,Felder)Die "PRINT" PE}ROC steuert eine Be- triebssystemroutine, die Text aufdem Bildschirm ausgibt. Es ist alsokeine PROC, die es nur in ActiF}on!gibt, da man die Betriebssystem-routinen auch von Maschinensprachebenutzen kann. BASIC benutzt dieBetriebssystemroutinG}en uebrigensauch.Fuer den weiteren Verlauf des Action!Kurses muessen dann Kapitel zu denoben genannten fuenf Punkten folH}gen.Dann folgt die Erklaerung der imAction! gespeicherten PROCs, die man benutzen kann (also PRINT,INPUT,OPEN,GRAPHICS,PLI}OT,DRAWTO u.s.w ,umnur einige zu nennen. Der Kurs geht weiter mit: SPRACHE2.KRST,OPEN,GRAPHICS,PLjSPRACHE2.KRS************************************** ** Die Action! Sprache K}** ** TEIL II:Variablen ** ** (C)19L}87 by Action! User Group ** Lueneburg ** ** M} **************************************Es gibt drei Variablengrundtypen:1. BYTE Variablen (8 Bit) (HieN}r koennen Zahlen von 0-255 oder Buchstaben gespeichert werden)2. INT(eger) Variablen (16 Bit) (Zahlen von -3276O}8 - 32768)3. CARD(inal) Variaben (16 Bit) (Zahlen von 0 - 65535)Variablennennung (DEKLaration):Die Var.DEKL. steht P}immer vor derersten PROC. (Ausnahme:nach MODULE,wird spaeter erklaert)Man nennt erst den Var.Typ und dann den Namen: Q} BYTE ZAHLMehrere Variablen des gleichen Typskoennen mit Komman getrennt werden: BYTE ZAHL1,ZAHL2ist gleich R} BYTE ZAHL1 BYTE ZAHL2Man kann die Variablen noch mit einembestimmten Wert initialisieren: BYTE ZAHLS}=[0]oder die Variable auf eine bestimmteSpeicherstelle setzen: BYTE FARBE2=710Hier ist Farbe2 auf das FarbhinterT}-grundregister in Graphics 0 gesetzt.Nun kann man im Programmtext mit FARBE2=0Adresse 710 auf 0 setzen. In BasicU} wuerde dies mit 'POKE 710,0' ge-schehen. Es gibt zwar auf einenPOKE Befehl in Action!, aber dieoben gezeigte Methode istV} wesentlichschneller, da der POKE Befehl in Action! selber eine Routine ist,undaufgerufen werden muss: 'POKE (710,0)'W}.Zusammengefasst:BYTE counter ; vereinbart counter ; als BYTE VariableBYTE i1,i2 ; vereinbarX}t i1 und ; i2 als BYTE Var.INT i1,i2 ; ... als INTegerCARD i1,i2 ; ... als CARDinalINT Z=Y}[0] ; z als INTeger und ; und initialisieren ; auf 0CARD DL=560 ; DL als CARDZ}inal ; und auf Adresse ; 560 gesetzt.weitere Beispiele:CARD DL=560,ZAP=[0],ZAP2 Der [}Aufbau des Action! Programms:BYTE FARBE2=710 ; zuerst Variablen ; nennen.PROC DEMO() ; dann die er\}ste ; PROCedure... FARBE2=0 ; ProgrammtextRETURN ; und PROCedure be- ;]} enden mit RETURNDas obige Programm kann natuerlichwieder in das andere Fenster ueber-tragen und getestet werden.Was d^}as Programm leistet sollte eigentlich klar sein.Wertzuweisungen:z.B. ist 'BUCHSTABE' als BYTE def-iniert worden ('BYTE _}BUCHSTABE')So sind moegliche Wertzuweisungen:BUCHSTABE='A ; Weist BUCHSTABE ; den ASCII Wert `} ; von A zu (65)BUCHSTABE=1 ; den Wert 1BUCHSTABE=$FF ; oder 255 in ; HEXadezimalera} ; Schreibweise... ; dann mit dem '$' ; Zeichen davor. ; b}Achtung: HEX Zahlen ; muessen GROSS ge- ; schrieben werdenBUCHSTABE=FARBE2 ; den Wert einc}er ; anderen Variablen ; (muss natuerlich ; vorher definiert d} ; worden sein!!!)BUCHSTABE=FARBE2+FARBE4 ; von mehreren ; Variablen...BUCHSTABE==+1e} ; erhoeht BUCHSTABE ; um den Wert 1 ; dasselbe wie: ; BUCHSTABE=BUCHSTABEf}+1BUCHSTABE==+5 ; erhoeht BUCHSTABE ; um den Wert 5 ; dasselbe wie: ; BUg}CHSTABE=BUCHSTABE+5Bis auf das 1. und die beiden letztenBeispiele ist es also wie in BASIC.Was ist aber wenn man Wertzuwh}eisungenzwischen unterschiedlichen Variablen-typen hat:Nehmen wir folgendes an:BYTE ICARD ZAPSchreibt manI=ZAP ...i} so wird das LSB(nieder- wertige Byte von ZAP nach I geschrieben. Wenn ZAP $FF22 ist , so ist I nachj} dieser Wertzuweisung $22. Der Action! Kurs geht weiter mit: IFTHEN.KRS$FF22 ist , so ist I nach]IFTHEN.KRS************************************** ** Die Action! Sprache * l}* ** TEIL III:Bedingungen ** ** (C)1987 m} by Action! User Group ** Lueneburg ** ** n} **************************************Dieser Kursteil erklaert die Befehlefuer Bedingungen: 1. IF...THEN. o}..(ELSE)2. FOR3. WHILE4. UNTIL1. IF...THEN...(ELSE)Mit dieser Befehlsstruktur kann manwie in Basic unter bestimmten v p}or-aussetzungen verzweigen.Man kann Variablen mit Variablenoder Variablen mit Konstanten ver-gleichen.Die einfache IF. q}..THEN Struktur ohneELSE: IF LIVES=0 THEN GAMEOVER() FIDabei ist LIVES eine VAriable undGAMEOVER eine PROCedure.Wenn r} die Var. LIVES nun gleich 0 ist,so wird die PROC GAMEOVER aufgerufen.Die gesammte IF...THEN Struktur wird mit 'FI' beend s}et (IF=FI umgekehrt!)Das ermoeglicht z.B. auch mehrere Befehle nach THEN auszufuehren z.B.: IF LIVES=0 THEN EXPLOSIO t}N() GAMEOVER() FI Weitere Moeglichkeiten fuer Be- dingungen: IF SCORE >HISCORE THEN HISCORE=SCORE u} FI IF HISCORE<=SCORE THEN HISCORE=SCORE FIDie IF...THEN...ELSE Struktur: IF LIVES=0 THEN EXPLOSI v}ON() GAMEOVER() ELSE SCORE==+BONUS FIIst in diesem Fall LIVES ungleich 0,so werden die Befehle ausgefuehrt w},die zwischen ELSE und FI stehen.(ELSE heist uebersetzt sonst/weiter) Ein Beispielprogramm:BYTE REPLY PROC O x}PTION1() PRINTE("'1' gedrueckt")RETURNPROC OPTION2() PRINT("'2' gedrueckt oder eine ") PRINTE("andere Taste")RETURNP y}ROC MENU() PRINTE("'1' oder '2'druecken!") REPLY=GETD(7) IF REPLY='1 THEN OPTION1() ELSE OPTI z}ON2() FIRETURN; Ende des ProgrammsGETD(7) liesst ein Byte von Kanal 7.Kanal 7 ist von Action! immer fuerdie Tastatur {} geoeffnet.So liesst 'REPLY=GETD(7)' den ASCIIWert einer gedrueckten Taste in REPLY ein. In Basic:GET #7,REPLY , wenn Ka |}nal 7 ge-oeffnet ist.(OPEN #7,4,0,"K:")Es gibt 3 PROCeduren in dem Besipiel-programm: 1. OPTION1()2. OPTION2()3. M }}ENU()PROCedure MENU() ruft entwederPROCedure OPTION1() oder OPTION2()auf. Man muss nun dabei beachten, dass OPTION1() u ~}nd OPTION2() im Programm-text vor MENU() definiert werden, daAction! es nicht zulaesst, erstspaeter im Programmtext defini }ertePROCeduren aufzurufen.Also nicht erst MENU() definierenund dann die beiden anderen !!!!!Die letzte im Programmtext s }tehendePROCedure wird nach einem RUN immerals erste aufgerufen, das nochmalzur Erinnerung !!! ********* SCHLEIFEN *** }******Schleifen werden dazu ,wie in Basic auch dazu benoetigt, bestimmteBefehlssequenzen zu wiederholen.Die Grundschlei }fe in Action! ist dieDO...OD Struktur.z.B.:CARD ZAEHL=[0]PROC DOOD_DEMO() DO ZAEHL==+1 PRINTCE(ZAEHL) ODRETU }RN; ENDEAlle Befehle zwischen DO und ODwerden unendlich lang wiederholt.Bei der FILE-Version von ACTION! kannman mit d }er BREAK Taste abbrechen.Bei der Cardridge Version mit BREAKoder SYSTEM RESET.Aber was nuetzt eine Schleife, wennman sie } nicht beenden kann ??...Dazu gibt es das EXIT Statement.z.B:CARD ZAEHL=[0]PROC DO_EXIT_OD_DEMO() DO ZAEHL==+1 } IF ZAEHL=51 THEN EXIT FI PRINTCE(ZAEHL) ODPRINTE("Das war's...")RETURN; ENDE Sobald ZAEHL der W }ert 51 wird diePROCedur beendet.Wenn das EXIT Statement ausgefuehrtwird ,wird das Programm nach derOD Anweisung fortgefu }ehrt.Der Kurs geht mit : LOOPS.KRSweiter.nt ausgefuehrtwird ,wird das Programm nach derOD Anweisung fortgefu 8LOOPS.KRS************************************** ** Die Action! Sprache **} ** TEIL III :SCHLEIFEN ** ** (C)1987 }by Action! User Group ** Lueneburg ** ** } **************************************Dieser Kursteil erklaert die weiterenBefehle fuer Bedingungen: 2. FO}R3. WHILE4. UNTIL2. FOR...DO...ODMit dieser Struktur kann man be-stimmen, wie oft eine Schleife durch-laufen werden s}oll. Die Syntax ist:FOR variable=start TO ende DO...ODz.B:CARD COUNTERPROC FOR_DEMO() FOR COUNTER=1 to 10 DO } PRINTE("FOR-Loop DEMO") ODRETURN; ENDEDie DO...OD Schleife wird hier genau10 mal durchlaufen.Natuertlich kann} man fuer die Startund END Werte auch Variablen ein-setzen.Wie in Basic gibt es auch einen StepBefehl:CARD COUNTERPR}OC FOR_DEMO2() FOR COUNTER=1 to 10 step 2 DO PRINTCE(COUNTER) ODRETURN; ENDEMan darf hier aber nur positi}ve Wertehinter STEP angeben, also nicht -1 oder aehnliches.Obwohl es eigentlich nutzlos ist,kannauch bei FOR DO OD Schle}ifen derEXIT Befehl benutzt werden:CARD COUNTERPROC FOR_DEMO3() FOR COUNTER=1 to 10 DO IF COUNTER=5 THEN }EXIT FI PRINTCE(COUNTER) ODRETURN; ENDEDie WHILE-Schleife:(While = solange,waehrend)Die While-Schleife hat d}ie Funktion,zunaechst zu pruefen, ob eine Schleife ausgefuehrt werden soll unddann die Laenge:z.B.:BYTE COUNTER=[0]PR}OC WHILE_DEMO() WHILE COUNTER <10 DO PRINTBE(COUNTER) COUNTER==+1 ODRETURN; ENDESOLANGE COUNTER kleiner al}s 10 ist,SOLANGE wird die Schleife ausge- fuehrt.Die formale Struktur des While Befehlist also: WHILE bedingung-erf}uellt DO ... ODWas wuerde aber passieren, wenn manCOUNTER nicht in jeder Schleife umeins erhoeht ???Richtig! Dann wuerd}e die Schleifeendlos durchlaufen werden, da dieBedingung COUNTER <10 ja IMMER er-fuellt werden wuerde. Man merke sichalso}:Bei WHILE Schleifen muss die Be-dingung irgendwann erfuellt werden,da sie sonst zur Endlosschleife wird.Die UNTIL Sch}leife:In Pascal nennt man diese Schleifen-form die REPEAT...UNTIL Schleife,also die WIEDERHOLE...BIS Schleife.In Action}! wird das UNTIL Statementjedoch wieder mit der GrundschleifeDO...OD verbunden:DO . . . UNTIL bedingung-erfuelltOD}z.B:BYTE COUNTER=[0]PROC UNTIL_DEMO() DO PRINTBE(COUNTER) COUNTER==+1 UNTIL COUNTER=10 ODRETURN; ENDED}ie Schleife wird also solange wiederholt BIS die bedingung hinterUNTIL erfuellt ist.Auch hier muss man wieder darauf acht}en, das wie im Beispiel COUNTERerhoeht wird, damit die Schleifenicht endlos durchlaufen wird.Man beachte den Unterschied }zur WHILESchleife:Die UNTIL Schleife wird mindestensEINMAL durchlaufen.Die WHILE Schleife muss NICHT un- bedingt einmal} durchlaufen werden.************************************** VERZWEIGTE BEDINGUNGEN & STRUKTUR ****************************}********** Die IF...THEN.ELSE..FI Strukturenkoennen maximal 16 mal verzweigtwerden.Z.B:BYTE I1=[1],I2=[1],I3=[1] PRO}C IF_DEMO() IF I1=1 THEN IF I2=1 THEN IF I3=1 THEN PRINTE("ALLE 1") ELSE PRINTE("NICHT ALLE 1") FI ELSE P}RINTE("NICHT ALLE 1") FI ELSE PRINTE("NICHT ALLE 1") FIRETURN; ENDEDies ist nur als Demo anzusehen. Manhaette be}sser schreiben sollen: IF I1=1 AND I2=1 AND I3=1 THEN...Doch zu den Verknuepfungen spaeter...Wenn man Action! Programme} schreibt,sollte man immer auf sogenannteStrukturierung achten. In dem obengezeigten Beispiel sind alle FI inder gleichen} Spalte zum dazuge- hoehrigen IF. Das ist uebersichtlichund man findet auch spaeter noch dieFIs zu den IFs. Man kann }natuerlichauch unstrukturiert wie in Basic schreiben :moeglichst viel in eineZeile! Doch in Action! nuetzt das weder der }Geschwindigkeit, noch spartman Speicherplatz...allenfalls imEditor ein paar Bytes. Aber die sollte man der Uebersichtlichk}eit opfern!Der Kurs geht weiter mit: PROCFUNK.KRS ein paar Bytes. Aber die sollte man der UebersichtlichkDINFO2.KRS************************************** ** Action! Info II **} ** ** (C) 1987 by Action! User Group ** } **************************************In den Beispielprogrammen werdenhaeufig PRINT Befehle einge}setzt.Diese sollen hier erlaeutert werden:PRINT fuer STRINGS:PRINT("Action!") ; druckt 'ACTION!' ; aber} ohne in die ; naechste Zeile zu ; springen. ; (in BASIC mit } ; Semikolon): ; ? "ACTION!";PRINTE("Action!"); Dasselbe jedoch ; mit Sprung in die } ; naechste Zeile.PRINTB(VARIABLE) ; druckt eine BYTE ; Variable ohne ; Spru}ng in die ; naechste ZeilePRINTBE(VARIABLE); druckt eine BYTE ; Variable ** MIT ** } ; Sprung in die ; naechste ZeileALSO: Ein 'E' als letzter Buchstabe beim PRINT Befehl is}t fuer den Sprung in die naechste Zeile !PRINTI(VARIABLE) ; druckt eine INT ; Variable PRI}NTC(VARIABLE) ; druckt eine CARD ; Variable Ebenso: PRINTIE(VARIABLE) und PRINTCE(VAR}IABLE) ; druckt eine CARD ; Variable Ebenso: PRINTIE(VARIABLE) und PRINTCE(VAR************************************** ** ** A C T I} O N E R R O R S ** ** ***********************}***************Fehler Erklaerung0 das System hat zuwenig Speicher1 Das " in einem String fehlt2 } Die DEFINE's sind verzweigt. Also:Kein DEFINE machen,was ein anderes DEFINE 'defined'3 Die Tabelle }fuer globale Variablen ist voll.4 Die Tabelle fuer lokale Variablen ist voll.5 Die Syntax der SE}T Direktive ist falsch!6 Fehler beim Deklarieren von Variablen,Proceduren u.s.w...7 Die Parameter}liste einer Procedur/Funktion ist falsch8 Die Variable ist noch nicht definiert.9 Dies ist keine }Konstante...10 Falscher Ausdruck (z.B. 10>11)11 Unbekannter Fehler. Hier kann Action! nicht weiterhelfen,d}a es den Fehler selber nicht kennt... Tritt z.B. auf, wenn man vor neuen globalen Variablen kein} MODULE schreibt.12 THEN fehlt13 FI fehlt14 Der Speicher fuer das com- pilierte Prgramm reich}t nicht mehr.15 DO fehlt16 TO fehlt17 Falsches Format von einem Aus- druck.18 Klammer(n}) nicht wieder ge- schlossen.19 OD fehlt.20 Das Action! System kann hier fuer das Programm keinen } Speicher mehr zur Verfuegung stellen. Der Editor wird beim Auftreten dieses Fehlers sehr voll sein}. Abhilfe kann hier ein compilieren von Diskette schaffen.21 Falscher Zugriff auf ein Array z.B. w}enn ein Array auf 20 Felder definiert ist kann man nicht auf Feld 40 zugreifen...22 Das geladenen File is}t zu lang Man sollte es in mehrere Unterfiles aufteilen.23 Der Ausdruck in einer IF-THEN, WHILE o}der UNTIL Struktur ist falsch...24 Die Syntax des FOR Befehls ist hier falsch...25 Falsche Anwendun}g des EXIT Befehls. Es gibt keine DO...OD Schleife aus der EXIT heraus koennte...26 Mehr als 16 Ve}rzweigungen z.B. mit IF...THEn oder Schleifen Strukturen. 16 mal ist nur moeglich...27 Falsche Syn}tax des TYPE Befehl28 Falsches RETURN61 Die Symbol TAbelle ist voll128 Die Break Taste wurde benutzt }um das Programm zu stoppen.Alle Fehlercodes ueber 128 sindI/O Fehler. Sie stimmen mit denen aus dem Atari Handbuch und a}nderenBuechern ueberein.*************************************ehler. Sie stimmen mit denen aus dem Atari Handbuch und aBjj`0uu B VBLFuE:DDuE JK V BL~uLoading Action! Lib...gDuEHI V`0u~}L,Lij0 B V`jBQDEJK V B VLE:ACTION! BY PAUL LEEK V }B V DLjklm孳  LG l E: L-uW`=} }"` `L# 3 :  @ "}Ȍ8 O "R Z "R****))g )`)`YN hh` y`L}L ۩ ` Display?Bell?Case sensitive?Trace?List?Window 1 size: Line size: Left margin: EOL char: @}`>ʈ LbACTION! (c)by Paul Lee Computer Services (PCS) April , 1985  L r }c c ! W_ u` 89ЅЅ එЊȑȥqЅȥqЅХӥ` ඍ K} LL\ Lơ    c c[8嵅嶅 c &i荙% M c]٠ AГ}  c  `F' {ө&Rፙ%A@qEg  0 Ң c M c}L!  ci 9 c c cѠLi c `Ӧd`ЦѠ ݢ cȩa c}г6 0Ц M cL! 0 Ң ච cL4ɓ  Ї$h}hLcɈ 'p⥸ KɈLơө g8hm) Lc cWL Ңee𪥠Lȑ`}H ui mh0xL ɋ))` [# ½]   c cLɉ 6}) 1Ɉ .p nL x L L~ ߻ LɐI $I=  c( )ɘ) ȱࠐరP c è LK} L Ɉ cШ F `w j   A L$a  A  c;  } ½   cLKȱ` L PɈL P b X  A dѠ LȱH}h ALС F ԧ cɉɐɖ婌 ȥ $ e©  A)   yf y}b ච ½ >Ɉȱ 3 Lե ۦ ɋܩ ۦ j    } A   Ɉ  9 H A A ˫ H h*hX&Hnȱono}hLȤH >h LɈ  L )0) 栥,,þ( ٦ɋ H ȄhL}`  Ϳ ɋ L٦Ɉ؄ චȑ 5ɋ LM L5 F ԧ ච L½ u) } / c  ` LL HH * hHd 9    9 A h` ` n }t 6`ȱ`Ȋ` ) " 6`Ȋ`ȱ``LL8堅ͣL} L L< ee`夠``PTQcRbS c … i ̪{`m}Lo}'p nPx LTɀɐ ɈDɆ $К< LT Хª) ̪   cLè ̪6}` .Њ1 дL iq /ƍ cнLǩ FƠ H ơE ߻}栤 h ȱ ) LTLƚ0`…8ݠ‘ȥL 5 c c)}pл)©L{Lϼ L K`LǼ LH / h `Ȑ ` < 5` B>)}Ċ6,b&  ˫` u`  L̪`i`暙` 5Lc) })ž) Lg ٬9c.0 & LF f cL <  eL ٬c}ܩ   LL <  R6,þOɈ1ɐ+#  p }  L)ɠڥW)F   )` I ¿  L^)@К 9㥣 І}  ½Ѐ <Ɉ"dp)ɰɘip``DɈ>) q qLD8񹅩 1}-+ վ  3 3 ȥ LKɈEׅ J վ  ơ Lv} վ   [ ½ Lv  9   n t 68 }V < )iȱi 6  " 9L Hi h i     ½LHšŢ`hhLW}L  "A  " t ( A 3 tH Lv     )x}88񹑹ȩ񹑹`  LɈɘ A `)pLa8A!0ĭ̭E Ů Ů}̭W 7hACTION! (c)by Paul Lee Computer Services lʆ &e J J}ꅆ8冨凪`ʆ ee` 9E…¥ 9` l'&&&8儨児祂}*L2&&*ń8&&L2 ` Fj`hihiHHȱȱLڧ`}膥ɠQ-ĮȐ`此į۠ŲLlȄ.70Q- Ġ7`eޠ Ȅ }e _ 嘠ƍ iť +иΦ +У +Ж꥾ +ȑȑȑɦȘ }9`5h{DObFIcIFPODdORTOeANDFORTINT"LSHMOD RSHSETDXORBYTE!CARD#CHAR ELSEaEXITSFUNCAPROCBSTEPfTHEN`TYPEFARRAY@UNT}ILXWHILEQDEFINE&ELSEIFjMODULEWRETURNRINCLUDECPOINTEREiI^I^Lࢠ]I^+ 8+ _0)?<}!'*p @+ +`ʭ) _0ILOЎ `ĝŝƝ  nP }LLJJJJ`H ڧh`¢ 护°ڱ%ȱ%E ΤL飤担C}S LI LH ¸L LHȩh L L ~L nLHhH}h L BHI V䅠L L :L HL L̤  ML Lڤ}H- դ8塪墨hL L̤ Lڤ ȹP`텠8堨塪 芨Oȩ-`PP }P棩 Ѥģ0-ģ6000:,80H & &ehe&eģ0ʥ 8堅塅` } &B V NLMȑ` MLN%B VLH y   yh)0I LE:S: }Lޤ `[\ZUVT` L LѤ) ` Lޤ ` 0}d ҥ `2)2ҩ`0)9J`@0)ӈJJJJ)`ȱ`` wȥ`}HhƣĢ`ƥĤ`Lhihi ( Τ8q}櫱ȱȱ3殤0毤 LA Ʃ, ΤLeiHH) ΤL̤Ѣ `ȱ}Ħ`膡``ťƤe8夰L Ƥ8`Ŧe}Ѡe桊LOpenDPrintElPrintDEsCloseyPrintPrintDȆInputSȌInputSDȓInp}utMDșGetDʭPutE̤PutΤPutDѤPutDEڤXIOޤPrintBPrintBEPrintBDEPrintC } PrintCE PrintCD PrintCDE  PrintI PrintID PrintIE6 PrintIDE< InputBʈInputBDʊIn }putIˈInputIDˊInputC̈InputCD̊ValBʚValI˚ValC̚StrBDStrI[ StrCL Note Poin }t4 GraphicsTDrawToȌ PositionȮ Locateʻ Plotæ SetColorΦFill RandSound }SndRst!Paddle7PTrig7StickNSTrig/Pokew PokeCȁ ZeroȊ SetBlockȐ BreakڧSCompare }dSCopyȘSCopySȯSAssignب66>?SVblr}Ǭ֬֬߬߬שׂl?NЅ`}p`dPrintF̣ hPeekCg r/zr3Al'c !#3S#BZ'O֭4H MoveBlockȳ} PrintBD߭Peekg ٻ ]uW`=} "` `}L# 3 :  @ "Ȍ8 O "}R Z "R****))g )`)`YN hh` y`LL ۩ }` Display?Bell?Case sensitive?Trace?List?Window 1 size: Line size: Left margin: EOL char: @`>ʈ }LbACTION! (c)by Paul Lee Computer Services (PCS) April , 1985 6. : BLV` } B JKIHiDiELV䄦 eRU _椤E +ƣ`𑛊} 0H8`L L² 9  P t LWError: Ԇ ؠPIPP`}/`"/ԭ` PLnH ~h:,'iԥiՠiɨɑԈȩDȩ:ɥɤ LGLʰ򅡆}ԅդ800) 0 0!Ԧՠ eԆ ٰԦդ` LLؠ L.8e膥 'eR}壐Q8SRŦQH)`h) ȭL{QI` T`TU`}TU  [L_` ` 赠`eLXYT i(`]^_`]^` ~ '}LE: BHILVߩ۩שөϥҦǤȆńƅĥ…ɤʥӆ 9!A }%) )}[^] 0 ӢtL~Ӧ` е d .Eƍ ౐ LɆéнӤ ɩЪ >}П =Ж d кƍL " L "줩L󳤙UČF}0F !LƘꤑ ²Ǧ ӵ ʰȄȱ``ō` 昩 T L :}  :ȑLL LL g L``)ͳ+  @ȳ >B>A>W }RCD~ &` `i膡`U[W'px!}OɈm  g ee + cн^ ȱL2ƍ` L* HH L*]5 Ș M c g"} ~  L'LhhL* ɁɅɦ` HHɑɑ Mhh`eHeh`Ȋ`ѡ#}l ) 00:0`H ha0{0`e澥ž=Le ~ cLɤ e$}8q膉ȱ``deldErrorEOFcolorLISTdeviceTRACE ~L ~ H !~h(`%} h L# ~ HL { ~ {LL ~ L ~ KL# #  ~` h L# ~ L&} ~Ln #L H ~ {h  ȱʝL ~  ~L hL a\( (E'}ȄĠ(((Ġ ӵ ²͍ Ѱ ²R 8` 2` not foundFind? a})H (}h  ` }8(ee(ČȱĢe)}L Substitute? for? m9; L200`@  g;` g9D` 8JJJ)*}0`BA`W i8 c  9 9 ½I Ң  c c+} c !LH c !h0A u L i 0 LBL [,} 5 䠧  M  u M KLɐmLɪeM࢐^ > L/ 5 c-} cNQȝP / Λ0B࣐ .ɣɢɡ ½ 9 L j j jLHL .}L L >/LH 0h L^hLLL L^3^/ɘ L5ɘ A /} ` * $^ kgH }E1=ADDRESSE2 FI FI FIRETURNPROC LESE_DATENBLOCK() BYTE PIXELS PIXELS=GETD(1) WHILE LAENGE>0 DO ADDRESSE1^=PI!?}XELS ERHOEHE_ADDRESSE() LAENGE==-1 IF WEITERE_PIXELS<>0 AND LAENGE>0 THEN PIXELS=GETD(1) FI ODRETURNPROC!@} LADE_BILD() DO LESE_BLOCKPARAMETER() LESE_DATENBLOCK() UNTIL ADDRESSE1>=SAVMSC+$1E00 OR ADDRESSE2>=SAVMSC+40 OD!A}RETURNPROC OEFFNE_FILE() BYTE ARRAY NAME(15) POSITION(2,3) PRINTE("- MICRO ILLUSTRATOR PICLOAD -") PUTE() PRINT("GERAE!B}T/FILENAME: ") INPUTS(NAME) CLOSE(1) OPEN(1,NAME,4,0) RETURNPROC ANTICE() BYTE POINTER DLIST BYTE WERT GRAPHICS(24)!C} DLIST=SDLSTL+3 WHILE DLIST^<>$41 DO DLIST^=DLIST^&$F0%$0E IF (DLIST^&$70)=0 THEN DLIST==+1 ELSE DLIST==+3 FI !D}ODRETURNPROC HAUPTPROCEDUR() BYTE TASTE DO GRAPHICS(0) OEFFNE_FILE() ANTICE() LESE_VORSPANN() SETZE_VARIABLENW!E}ERTE() LADE_BILD() TASTE=GETD(7) UNTIL TASTE=27 ODRETURNEFFNE_FILE() ANTICE() LESE_VORSPANN() SETZE_VARIABLENW AUP* @ %G}U@*(U@0 U@%H} U@ U@T U@( U*%I}(U@ * UU@@**UU@@ U%J}U@@ UU@@ (UU@P*UU@%K}P*UU@ PUU@)@ UUP!P%L}*(UUTP UUUU@P UUUUTP*%M}UUUUU@P* UUUUU@@**UUUUUT@*%N}UUUUUUU@**UUUUUUAU@UUUUUUAUB%O}UUUUUUUUB UUUUUUUU UUUUUUUUUU*%P}UUU@UUUUUUUU**UUUPUUUUUUUU* UUUTUUUUUUUT* UUUU%Q}@UUUUUUUT***UUUUPUUUUUUUT**UUUUUTUUUUUUUT* ?UUUUUU@UW%R}UUUUTUUUUUU@EU_UUUT*UUUUUUTUU_UUUP* UUUUUUTUU_UUU%S}P*( *UUUUUUUTUUUUUP*(UUUUUUUTUU?WP**UUUUUUUTUU?WP*%T}*UUUUUUUTUUW**UUUUUUUTUUU_***UUUUUUUhUU_U_**%U}UUUUUUUUU_U_**!UUUUUUUUUWU_**UUUUUUZUUWU_**%V}UUUUUUVUUUUWP UUUUUUZUUUUUUWP UUUUUUZQUUUUUUP %W} UUUUUUZQUUUUUUUP***UUUUUUjQUUUUUUUP **UUUUUUjQUUUUUUUPU%X}UUUUUQUUUUUUUPUUUUUPUUUUUUUPUUUUUTUUUUUUUP UUUUU%Y}TUUUUUUUP UUUUVTUUUUUUU@ *UUUUVTUUUUUU@ UUUUVUU%Z}UUUUU@ UUUVUUUUUUU@( @UVUUUUUUU@* UZUUUUUUU%[}@* UZUU]UUUU@**UZUEUUUUU**UjUEUU]UUT*%\}*UjUAUUUUP**UjUQUUU]U@*UjUPUUUUU*%]}UjUTUUUUU*UjUTUUUP*UjUUUUUB*%^} UUUPUUUJ* UUUTUU * @UUUUP@*J %_}UUUUUTB*UUUUUUUR*UUUUUUT*@P*%`}UUUUUUP@T**UUUUUU@U*UUUUUP*PU*UU%a}UUUU*UU*UUUT UUUUUUU@UU%b}UUUUUT*UUUUUUUU*PUUUUUUUUU@UUUjUU%c}UUUUUTU@UUUjUUUUUUUUUU@UUUjUUUUUUUUUUUUUjUUUUUUU%d}UUUUUUjUUUUUUUUUTUUUjUUUUUUUUUUT UUUjUUUUUUUUUUP%e} UUUZUUUUUUUUUU@ UUUZUUUUUUUUUU@0 UUUZUUUUUUUUUUU@%f}0 UUUZUUUUUUUUUUUUUUZUUUUUUUUUUT UUUUVUUUUUUUUUUUP %q})Ij5E'>RlvB&DOS SYSb *SPRACHE1KRSb!JSPRACHE2KRSbkIFTHEN KRSb"LOOPS KRSb INFO2 KRSbERRCODESTXTbiLIB COMb6KOALA ACTb>FMAN PICbMANKOALAPICb'DEMOLOADACTbGAMEONE ACTb'GAMETWO ACTbTXTCHECKACTB KOALA A B(DEMOLOADA B?GAMEONE A BSGAMETWO A B mTXTCHECKA B1wMLKURS1 WSBB/MLKURS2 WSBBMENUE WSBb PRINTOUTWSBBSCROLL OBJb KOPY COMUUUUVUUUUUUUUUUUP UUUUUUUUUUUUUUUUUPUUUUUVUUUUUUUUUUUUUP%r}UUUUAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUT UUUUUUUUUUUUUUUUUUUUTUUUUU%s}UUUUUUUUUUUUUUUPUUUUUUUUUUUUQUUUUUUUPUUUUUUUUUUUUUUUUU@UUUPUUUUUU%t}UTUUUUU<UUUUUUUUUUUPUUUUUUUUUUUUUUUU@UUUTUUUUUUUUUUU@%u}UUUP?UUUUUUUUUUTUUUPUUUUUUUUUUPUU@ZUUUUUUUUUU@UT%v}ZUUUUUUUUUTTjUUUUUUUUUPjUAUUUUUUP%w}?ZUUUUUUUU@?ZUUUUUUUUZUUUUUUUT%x}ZUUUUUUUPGEZUUUUUUU@1ZUUUUUUU?%y}EVUUUUUUUVUUUUUUTLDDVTUUUUP3V%z}UUUUUU@DLLDEUUUUUU@?UUUUUUp?|DDDEUjUUU%{}UUp1UjUUUUU|DDDDUjUUUUW11UZUUUU_%|}GGttEUZUUZUZUU_?LDEUZUVO%}}?=1UVj|tDDDGEUVGUV3<%~}tDDDDEUVTDUUQ3?twDDDtDEUUUTD%} UUUQ LDDDDGEUUUUTD1UUUUS%}4LDDDGDEUUiUUUDDG11UUUUUUDDDDDDDDUUUUUUDDD1%}UUUUUUDDtDDDDDUUUUU\DDUUUUUU?? DDDDDDGLU%}UUUTGDGUTUUQGDDDDDDDUTUUUTDGDGUTUUUQ%}1? DDDDDDDDDUTUUUDLDD|?1UTUUU1?DDtDDDDDDUPUUUDDDG%}1UQUUUDDDDDDDDDUQUUTDDDDw?UQUUU%}GDDLDDDDDUQUUTDDtDtwUUUUQDDDDDDDDDUUUUTDDDL%}UUUUQ<DDDDDDDDDUUUUDDDDDDt|UUUU%}DDDDDDDDDUUUTDDDDDDDOUQDDDDDDDDDJUTDDDDDDDG%}UQDDDDDDDDDJUDDDDDDDGVQDDDDD%}DDDDJDDGDDDDDDDDDDDDDJDDDDDDDDO1%}DDDDDDDDDJDDDDDDDDG *DDDDDDDDDDDD%}DDDDDDDDDDDDDFFDDDDDDDDD%}DDDDDDDDFjDDDDDDDDD*DDDDDDDDDDjDDDDDDDDD%}BV*DDDDDDDDDDjDDDDDDDDD$;(BVFH 4DGDG DH 1120?tLD10?1A?|twDDtDA?)}=1  ,  ?|LtDtDL D0)   1$ * ?D|DGDD# *)}* ?311    *LDGDD *  ?DLDtDtD)}GD?  *1 11 *  GDtGDGDGD *  )}!EEEDLDFD@ 1UZjZVUJD)}UZjZVU*U  UjZVUTPQUFj U  UjZ)}VUTQU*U@UTiU UUUU UVUUU UTDU)}UAU UQ )UPUUT D (7U UQ P UVZjjZVUAUVU\T DGD )} @T UVZjjZVUjUQ  *@TUVZjUZTDGDLDD D(PUZjVUQS)}( @Th UWOGDGDtDD @T U_3( EUQT U UP@)}pGDGDGDUQPT U UT@p? UEQTU UT@χG|Dt)}L DUEAPTU UP1U__W UTUUP@ wtDDD UW)}__W UPUUTP ߁ UU]UTUUT@|OGOGDU UPUP*UP)}<U@P U?U]UTUT@P@T U?UUUP*UP@"(@ U U]U*)}UQ T U UU@U/@TUW_W UB  U@ UW_W UPJ* U AU)}UT@ UAUUP U?U !UTPP@@U )}?T)UTPP@@PU @P@B U@P@P@B()}U ? *  *BPU  ** *JRTU < * *)}*UT   ***TUT? @ UTP *)}  T UP@  * *TUTP ?***UTP@ )}?*  ** UP**** UTP*)}*(*UTP@   *UT@ P@ ()}*@     *    !*!)}  * *H I* <, PU*!(s; PIC_LOADER DEMO; (C) 1987 BY ACTION USERS GROUP; BEI FILE-VERSION: ; VON DISK COMPILIEREN; NO CASE SENSITIVEDEFIN-}E POS="POSITION", PD="PRINTD", PR="PRINTE"byte array farb(0)=708byte helpkey=732; BINARY I/O ; EQUAT-}ESBYTE POINTER ICCOM, ; =$342 ICSTA, ; =$343 ICAUX1, ; =$34A ICAUX2 ; =$34BC-}ARD POINTER ICBADR, ; =$344 ICBLEN ; =$348PROC CIO=$E456(BYTE AKKU,XREG) RETURNPROC BIO(BYTE CHANNEL -} CARD ADRESS,LENGHTH BYTE COMMAND) CHANNEL==LSH 4 ICCOM=$342 ICCOM==+CHANNEL ICCOM^=C-}OMMAND ICBADR=$344 ICBADR==+CHANNEL ICBADR^=ADRESS ICBLEN=$348 ICBLEN==+CHANNEL ICBLEN^=LENGHTH-} CIO(0,CHANNEL)RETURNPROC BPUT(BYTE CHANNEL CARD ADRESS,LENGHTH) BIO(CHANNEL,ADRESS,LENGHTH,11)RETURNPROC -}BGET(BYTE CHANNEL CARD ADRESS,LENGHTH) BIO(CHANNEL,ADRESS,LENGHTH,7)RETURNPROC XIO(BYTE CHANNEL,DUMMY, -} COMMAND,AUX1,AUX2 CARD FILADR) CHANNEL==LSH 4 ICCOM=$342 ICCOM==+CHANNEL ICCOM^=COMMAND -}ICBADR=$344 ICBADR==+CHANNEL ICBADR^=FILADR ICAUX1=$34A ICAUX1==+CHANNEL ICAUX1^=AUX1 ICAUX2=$3-}4B ICAUX2==+CHANNEL ICAUX2^=AUX2 CIO(0,CHANNEL)RETURN PROC SET_COLORS()FARB(0)=66 FARB(1)=86 FARB(2)=222F-}ARB(3)=70 FARB(4)=0RETURNMODULE; ***********************************; PICGET DEMO MIT BGET BEFEHL; (C)1987 BY ACTION!-} USERS; VORTEILE:; KUERZER & SCHNELLER !!!PROC LOAD_BGET()CARD POINTER SCRADR=88 CARD I BYTE X GRAPH-}ICS(15+16) SET_COLORS() CLOSE(1) OPEN (1,"D:MAN.PIC",4,0) BGET(1,SCRADR^,7680) DO UNTIL PEEK(53279)=6 ODRETURN -}; ***********************************MODULE; PICGET DEMO MIT GETD BEFEHL; (C)1987 BY ACTION! USERSPROC LOAD_GET()CA-}RD POINTER SCRADR=88,SCREENCARD I BYTE X GRAPHICS(15+16) CLOSE(1) OPEN (1,"D:MAN.PIC",4,0) SET_COLORS()SCREEN=-}SCRADR^ FOR I=0 TO 7680 DO X=GETD(1) SCREEN^=X SCREEN==+1 OD DO UNTIL PEEK(53279)=6 ODRETURN ; ****-}*******************************MODULE; MICRO ILLUSTRATOR PICLOAD; ACTION!>>XL/XE VERSION<<; CUSTOMIZED BY A.U.G.L.BYT-}E MODE,MP,SP,LINE CARD LEN,SCST=$58,DL=$0230 BYTE POINTER ADD1,ADD2PROC L_PREBYT() BYTE CN BYTE ARRAY COL=$02C4 FOR CN= 1 TO-} 7 DO GETD(1) OD MODE=GETD(1) FOR CN= 1 TO 5 DO GETD(1) OD FOR CN=0 TO 4 DO COL(CN)=GETD(1) OD FOR CN=1 TO 9 DO GETD(1) OD-}RETURNPROC ST_V() SP=0 LINE=0 ADD1=SCST ADD2=SCST RETURNPROC R_BLPARA() BYTE HILFE HILFE=GETD(1) MP=HILFE&$80 IF (HILFE &$7-}F)=0 THEN LEN=GETD(1) LEN==*256+GETD(1) ELSE LEN=HILFE&$7F FIRETURN PROC ERHOEHE_ADDRESSE() IF MODE=2 THEN ADD1==+1 ELSE L-}INE==+1 ADD1==+80 IF LINE=96 THEN LINE=0 IF SP=0 THEN SP=1 ADD1=ADD2+40 ELSE SP=0 ADD2==+1 ADD1=ADD2 FI FI FIRETURNPROC LE-}SE_DATENBLOCK() BYTE PIXELS PIXELS=GETD(1) WHILE LEN>0 DO ADD1^=PIXELS ERHOEHE_ADDRESSE() LEN==-1 IF MP<>0 AND LEN>0 THEN PI-}XELS=GETD(1) FI ODRETURNPROC LADE_BILD() DO R_BLPARA() LESE_DATENBLOCK() UNTIL ADD1>=SCST+$1E00 OR ADD2>=SCST+40 ODRETURN-}PROC LOAD_KOALA() CLOSE(1) OPEN(1,"D:MANKOALA.PIC",4,0)GRAPHICS(31) L_PREBYT() ST_V() LADE_BILD() DO UNTIL PEEK(53279)=6 -}ODRETURN; ***********************************PROC HELP() GRAPHICS(0)helpkey=0 PR("Picload D E M O Info Menue")P-}R("Dieses Programm soll den Unterschied")PR("zwischen normal (mit GET) geladenen ")PR("und mit BGET geladenen Bildern -} ")PR("zeigen... ")PR("Man wird feststellen, dass die ")PR("mit Bget geladenen Bilder we-}sentlich ")PR("schneller geladen werden. ")PR("Die Bget Procedur gibt es in Action ")PR("normalerweise nicht. -}Deshalb haben ")PR("wir sie programmiert... ")PR(" ")PR("Nun >START< dr-}uecken") RETURN; ***********************************PROC SELECTOR() byte keyDOCLOSE (1) OPEN (1,"K:",4,0)-}GRAPHICS(1) farb(2)=0 farb(3)=12POS(1,1) PD(6,"bitte waehle aus")POS(1,6) PD(6,"1. MIT GET LADEN")POS(1,8) PD(6,"2. MIT B-}GET LADEN")POS(1,10) PD(6,"3. KOALA LOADER")POS(1,13) PD(6,"4. ") PR(": Disk muss im Laufwerk sein-}")PR(" Nach dem Laden druecken")key= getd(1) key==-48if key=1 then load_get() fiif key=2 then load_bget() -}fiif key=3 then load_koala() fiif key=4 then EXIT fiODRETURNPROC DEMO_TITLE()poke (82,2)GRAPHICS(2) farb(2)=0 PO-}S(3,2) PD(6,">> picload <<")POS(3,3) PD(6,"-------------")POS(3,4) PD(6,">> d e m o <<")PR("Copyright 1987 by Action! User-} Group")PR(">>Press >HELP< or >START<")helpkey=0 DO IF helpkey=17 THEN HELP() FIUNTIL PEEK(53279)=6 ODselector()RE-}TURN")PR(">>Press >HELP< or >START<")helpkey=0 DO IF helpkey=17 THEN HELP() FIUNTIL PEEK(53279)=6 ODselector()RE,BYTE X,Y,A,OLDA,LEVELCARD I,I2,SCORE,hiscore=[0],SPEEDBYTE COL2=709,HCOL2=53271,hcol4=53274CARD POINTER SCREEN=88BYTE AR1}RAY FARBE(0)=708PROC NOP() RETURNPROC WAIT(CARD VAL) CARD IV FOR IV=0 TO VAL DO NOP() ODRETURNproc make_sound() 1}sound(0,200,14,10) sound(1,201,14,10) sound(2,202,14,10) sound(3,203,14,10) wait(30000) poke ($D208,1)returnPROC OP(BY1}TE VAL) I=1600 I2=1560 DO I==-40 I2==+40 SETBLOCK(SCREEN^+I,40,VAL) SETBLOCK(SCREEN^+I2,40,VAL) WAIT(800) UNTIL I<=01} ODRETURN; EXPLOSION ROUTINESBYTE FUNC CH_X(BYTE CEX) IF CEX<1 OR CEX>200 THEN CEX=1 FI IF CEX>158 THEN CEX=158 FIR1}ETURN (CEX)BYTE FUNC CH_Y(BYTE CEY) IF CEY<1 OR CEY>200 THEN CEY=1 FI IF CEY>78 THEN CEY=78 FIRETURN (CEY)PROC EXPLODE1}(BYTE EX,EY,COLVAL)BYTE EXC,EXN,EYN,SA EXC=0COLOR=COLVALDO EXN=CH_X(EX-EXC) PLOT(EXN,EY) EXN=CH_X(EX-EXC) EYN=CH_Y(EY-1}EXC) PLOT(EXN,EYN) EYN=CH_Y(EY-EXC) PLOT(EX,EYN) EXN=CH_X(EX+EXC) EYN=CH_Y(EY-EXC) PLOT(EXN,EYN) EXN=CH_X(EX+EXC) PLOT(E1}XN,EY) EXN=CH_X(EX+EXC) EYN=CH_Y(EY+EXC) PLOT(EXN,EYN) EYN=CH_Y(EY+EXC) PLOT(EX,EYN) EXN=CH_X(EX-EXC) EYN=CH_Y(EY+EXC) P1}LOT(EXN,EYN) EXC==+1 COL2==-1 SA=RAND(0) SOUND(0,SA,0,10) SA=RAND(0) SOUND(1,SA,2,EXC) WAIT(700)UNTIL EXC=8OD SNDRST()1}RETURNPROC GET_STICK() A=STICK(0) IF A=15 OR A=6 OR A=5 OR A=9 OR A=10 THEN A=OLDA FI IF A=14 THEN IF OLDA=13 TH1}EN A=13 ELSE Y=CH_Y(Y-1) FI FI IF A=13 THEN IF OLDA=14 THEN A=14 IF Y>0 THEN Y==-1 FI ELSE Y=CH_Y(Y+1) FI FI 1}IF A=11 THEN IF OLDA=7 THEN A=7 ELSE X=CH_X(X-1) FI FI IF A=7 THEN IF OLDA=11 THEN A=11 IF X>0 THEN X==-1 FI EL1}SE X=CH_X(X+1) FI FIOLDA=ARETURNPROC INIT() GRAPHICS(7) POKE(752,1) POKE (710,0) MAKE_SOUND() OP(170) WAIT(3000) OP(0)1} SNDRST() COLOR=2 PLOT (0,0) DRAWTO(159,0) DRAWTO(159,79) DRAWTO(0,79) DRAWTO(0,0) X=10 Y=10 OLDA=7 SCORE=0RETURNPRO1}C SCORE_OUT()PRINT("}Your Score >") PRINTCE(SCORE)RETURNPROC PL_EXPLODE()BYTE Z FOR Z=1 TO 10 DO EXPLODE(X,Y,2)1} EXPLODE(X,Y,0) ODRETURNPROC PL_()DO COLOR=1 GET_STICK() A=LOCATE(X,Y) IF A<>0 THEN PL_EXPLODE() EXIT FI P1}LOT(X,Y) WAIT(SPEED) COL2==+1 SCORE==+1 SCORE_OUT()ODRETURNPROC TITLE()BYTE HARD3=53273,ZAPGRAPHICS(18)FARBE(0)=$8A1}FARBE(1)=$28FARBE(2)=$C8PRINTDE(6," action user group ")PRINTDE(6," presents ")PRINTDE(6," "1})PRINTDE(6," ")PRINTDE(6," ")PRINTDE(6," ")PRINTDE(6," Ԡ1} ")PRINTDE(6," ")PRINTDE(6," produced by ")PRINTDE(6," markus kretzer ")PRINTDE(6," 1} ")PRINTD(6," LEVEL :")PRINTBDE(6,LEVEL)do HARD3=RAND(0)if peek(53279)=5 then level==+1 if level=5 the1}n level=1 fi position(13,11) PRINTBDE(6,LEVEL) FOR ZAP=0 TO 254 DO SOUND(0,ZAP,14,15) SOUND(1,ZAP,14,15) SOUND(2,Z1}AP,14,15) SOUND(3,ZAP,14,15) WAIT(50) OD SNDRST() fiuntil peek(53279)=6 OR STRIG(0)=0odIF LEVEL=1 THEN SPEED=2001}0 FIIF LEVEL=2 THEN SPEED=1000 FIIF LEVEL=3 THEN SPEED=400 FIIF LEVEL=4 THEN SPEED=100 FIreturnPROC fin_pic() GRAPHIC1}S(17) farbe(0)=0 farbe(1)=0 POSITION(2,4) PRINTD(6,"YOUR SCORE :") PRINTCDE(6,SCORE) POSITION(2,8) IF SCORE>HISCORE THEN 1}HISCORE=SCORE PRINTDE(6,"YOU REACHED A NEW") PRINTDE(6," HISCORE") FI POSITION(2,14) PRINTD(6,"HISCORE :") 1}PRINTCDE(6,HISCORE) POSITION(2,18) PRINTDE(6," press start") printde(6," or button")do hcol4=rand(0) until peek1}(53279)=6 or strig(0)=0od WAIT(5000)returnPROC GAMESTART() INIT() PL_()RETURNPROC MAIN()LEVEL=1 HISCORE=0DO TIT1}LE() GAMESTART() fin_pic()ODRETURNeturnPROC GAMESTART() INIT() PL_()RETURNPROC MAIN()LEVEL=1 HISCORE=0DO TIT0(DEFINE PLAYER1="1", PLAYER2="2"BYTE X,X2,Y,Y2,A,A2,OLDA,OLDA2,LEVELBYTE WINCARD WIN1,WIN2CARD I,I2,SPEEDBYTE C5}OL2=709,HCOL2=53271,hcol4=53274CARD POINTER SCREEN=88BYTE ARRAY FARBE(0)=708PROC NOP() RETURNPROC WAIT(CARD VAL) CA5}RD IV FOR IV=0 TO VAL DO NOP() ODRETURNproc make_sound() sound(0,200,14,10) sound(1,201,14,10) sound(2,202,14,10) sou5}nd(3,203,14,10) wait(30000) poke ($D208,1)returnPROC OP(BYTE VAL) I=1600 I2=1560 DO I==-40 I2==+40 SETBLOCK(SCREEN^5}+I,40,VAL) SETBLOCK(SCREEN^+I2,40,VAL) WAIT(800) UNTIL I<=0 ODRETURN; EXPLOSION ROUTINESBYTE FUNC CH_X(BYTE CEX) I5}F CEX<1 OR CEX>200 THEN CEX=1 FI IF CEX>158 THEN CEX=158 FIRETURN (CEX)BYTE FUNC CH_Y(BYTE CEY) IF CEY<1 OR CEY>200 THEN5} CEY=1 FI IF CEY>78 THEN CEY=78 FIRETURN (CEY)PROC EXPLODE(BYTE EX,EY,COLVAL)BYTE EXC,EXN,EYN,SA EXC=0COLOR=COLVALDO5} EXN=CH_X(EX-EXC) PLOT(EXN,EY) EXN=CH_X(EX-EXC) EYN=CH_Y(EY-EXC) PLOT(EXN,EYN) EYN=CH_Y(EY-EXC) PLOT(EX,EYN) EXN=CH_X(EX5}+EXC) EYN=CH_Y(EY-EXC) PLOT(EXN,EYN) EXN=CH_X(EX+EXC) PLOT(EXN,EY) EXN=CH_X(EX+EXC) EYN=CH_Y(EY+EXC) PLOT(EXN,EYN) EYN=C5}H_Y(EY+EXC) PLOT(EX,EYN) EXN=CH_X(EX-EXC) EYN=CH_Y(EY+EXC) PLOT(EXN,EYN) EXC==+1 COL2==-1 SA=RAND(0) SOUND(0,SA,0,10) SA5}=RAND(0) SOUND(1,SA,2,EXC) WAIT(700)UNTIL EXC=8OD SNDRST()RETURNPROC GET_STICK2() A2=STICK(1) IF A2=15 OR A2=6 OR A2=5}5 OR A2=9 OR A2=10 THEN A2=OLDA2 FI IF A2=14 THEN IF OLDA2=13 THEN A2=13 ELSE Y2=CH_Y(Y2-1) FI FI IF A2=13 THE5}N IF OLDA2=14 THEN A2=14 IF Y2>0 THEN Y2==-1 FI ELSE Y2=CH_Y(Y2+1) FI FI IF A2=11 THEN IF OLDA2=7 THEN A2=7 E5}LSE X2=CH_X(X2-1) FI FI IF A2=7 THEN IF OLDA2=11 THEN A2=11 IF X2>0 THEN X2==-1 FI ELSE X2=CH_X(X2+1) FI FIOLDA2=A25}RETURNPROC GET_STICK() A=STICK(0) IF A=15 OR A=6 OR A=5 OR A=9 OR A=10 THEN A=OLDA FI IF A=14 THEN IF OLDA=13 T5}HEN A=13 ELSE Y=CH_Y(Y-1) FI FI IF A=13 THEN IF OLDA=14 THEN A=14 IF Y>0 THEN Y==-1 FI ELSE Y=CH_Y(Y+1) FI FI5} IF A=11 THEN IF OLDA=7 THEN A=7 ELSE X=CH_X(X-1) FI FI IF A=7 THEN IF OLDA=11 THEN A=11 IF X>0 THEN X==-1 FI E5}LSE X=CH_X(X+1) FI FIOLDA=ARETURNPROC INIT() GRAPHICS(7+16) POKE(752,1) MAKE_SOUND() OP(170) WAIT(3000) OP(0) SNDRST5}() COLOR=2 PLOT (0,0) DRAWTO(159,0) DRAWTO(159,79) DRAWTO(0,79) DRAWTO(0,0) X=10 Y=10 OLDA=7 X2=70 Y2=10 OLDA2=11 RET5}URNPROC PL_EXPLODE(BYTE WHICH_PLAYER)BYTE Z IF WHICH_PLAYER=0 THEN FOR Z=1 TO 10 DO EXPLODE(X,Y,2) EXP5}LODE(X,Y,0) OD ELSE FOR Z=1 TO 10 DO EXPLODE(X2,Y2,2) EXPLODE(X2,Y2,0) OD FIRETURNPROC PL_()6}DO COLOR=1 GET_STICK() A=LOCATE(X,Y) IF A<>0 THEN PL_EXPLODE(0) WIN=PLAYER2 EXIT FI PLOT(X,Y) COLOR=3 GET_STICK6}2() A=LOCATE(X2,Y2) IF A<>0 THEN PL_EXPLODE(1) WIN=PLAYER1 EXIT FI PLOT(X2,Y2) WAIT(SPEED) COL2==+1 ODRETURNPROC TI6}TLE()BYTE HARD3=53273,ZAPGRAPHICS(18)FARBE(0)=$8AFARBE(1)=$28FARBE(2)=$C8PRINTDE(6," action user group ")PRINTDE(6," 6} presents ")PRINTDE(6," ")PRINTDE(6," ")PRINTDE(6," ")PRINT6}DE(6," ")PRINTDE(6," Ԡ ")PRINTDE(6," ")PRINTDE(6," produced by "6})PRINTDE(6," markus kretzer ")PRINTDE(6," ")PRINTD(6," LEVEL :")PRINTBDE(6,LEVEL)do HARD3=RAN6}D(0)if peek(53279)=5 then level==+1 if level=5 then level=1 fi position(13,11) PRINTBDE(6,LEVEL) FOR ZAP=0 TO 254 DO 6} SOUND(0,ZAP,14,15) SOUND(1,ZAP,14,15) SOUND(2,ZAP,14,15) SOUND(3,ZAP,14,15) WAIT(50) OD SNDRST() fiuntil peek(6}53279)=6 OR STRIG(0)=0 OR STRIG(1)=0odIF LEVEL=1 THEN SPEED=2000 FIIF LEVEL=2 THEN SPEED=1000 FIIF LEVEL=3 THEN SPEED=406 }0 FIIF LEVEL=4 THEN SPEED=100 FIreturnPROC FIN_PIC() IF WIN=1 THEN WIN1==+1 FI IF WIN=2 THEN WIN2==+1 FI GRAPHICS(176 }) farbe(0)=0 farbe(1)=0 POSITION(3,3) PRINTD(6,"-------------") POSITION(3,4) PRINTD(6,"PLAYER ") PRINTBD(6,WIN) PRINT6 }DE(6," WINS") POSITION(3,5) PRINTD(6,"-------------") POSITION(2,8) PRINTDE(6,"TOTAL WINS:") POSITION(2,10) PRINTD(6,"PL6 }AYER 1 :") PRINTCD(6,WIN1) POSITION(2,12) PRINTD(6,"PLAYER 2 :") PRINTCD(6,WIN2) POSITION(2,15) PRINTDE(6,"select to cl6 }ear...") POSITION(2,18) PRINTDE(6," press start") printde(6," or button")do hcol4=rand(0) if peek(53279)=56} then win1=0 win2=0 POSITION(2,10) PRINTD(6,"PLAYER 1 :") PRINTCD(6,WIN1) PRINTD(6," ") POSITION(2,12) 6} PRINTD(6,"PLAYER 2 :") PRINTCD(6,WIN2) PRINTD(6," ") fiuntil peek(53279)=6 or strig(0)=0 or strig(1)=0odWAIT(5000)r6}eturnPROC GAMESTART() INIT() PL_()RETURNPROC MAIN()LEVEL=1 WIN1=0 WIN2=0DO SNDRST() TITLE() GAMESTART() fin_pic6}()ODRETURNMESTART() INIT() PL_()RETURNPROC MAIN()LEVEL=1 WIN1=0 WIN2=0DO SNDRST() TITLE() GAMESTART() fin_pic4; TEXTFILE CHECKER; PRUEFT, WIEVIEL ZEILEN EIN TEXT; FILE HAT; (C) 1987 BY ACTION! USERS GROUPBYTE ARRAY FNAME(20)BY:}TE reply,CONSOL=53279,help=732 card temperrBYTE ARRAY OWN_BUFFER(255)proc myERROR(byte errcode)graphics(0) poke(710:},$32)PUTE() PUTE()printe("error encountered...")error=temperrpute() BREAK()returnPROC WHOLE_DIRECTORY() DO INPU:}TMD(2,FNAME,20) PRINTE(FNAME) UNTIL EOF(2)=136 ODCLOSE (2)RETURNPROC DIR1() graphics(0) CLOSE (2) OPEN (2,("D:*.*:}"),6,0) WHOLE_DIRECTORY()RETURNPROC DIR_RAMDISK() graphics(0) CLOSE (2) OPEN (2,("D8:*.*"),6,0) WHOLE_DIRECTORY()RETU:}RNproc check()card lines graphics(0) pute() printe("Enter Filespec of Textfile") INPUTMD(0,FNAME,20) PUTE() te:}mperr=error error=myerror CLOSE(3) OPEN(3,FNAME,4,0) PUTE() PRINT("opened ") PRINTE(FNAME) PUTE() PRINTE("Please w:}ait...")lines=0 do inputMd(3,OWN_BUFFER,255) lines==+1 until eof(3)=136 od pute() print("Textlines read :") pri:}ntce(lines)returnPROC MENU()GRAPHICS(18) POKE (710,10)PRINTDE(6," textfile checker")PRINTDE(6," ")P:}RINTDE(6," (C) 1987 BY ")PRINTDE(6," ")PRINTDE(6," ")PRINTDE(6," ")PRINTDE(6," ")PRINTDE(6," :}Խ ")PRINTDE(6," νĮ ")PRINTDE(6," ")PRINTDE(6," Р ")returnproc main():}domenu()help=0 do until consol<>7 or help=17 od if consol=6 then check() fi if consol=5 then dir1() fi if c:}onsol=3 then dir_ramdisk() fi if help=17 then exit fipute() printe("press any key...")CLOSE (2) OPEN (2,("K:"),4,0):}reply=getd(2)od help=17 then exit fipute() printe("press any key...")CLOSE (2) OPEN (2,("K:"),4,0)8#&)* DOS L&&&L2& &L& &&&LV& &LA&&&L&&m&&iHH >!}hh&L[&& &L& &L&`L& & &Y&X&Y&X&`KL& &&) &&)L:' &>"} & & & HH hhe &i &LG'&) & &`LK'&IL`'&&L' &&iP&&i& &I`>#}L' & &L'Ȍ &&i(&&i&L' &&&&&&&`L' ' & &L!(&&' H'8 & &>$} & & &L( & &L( 'L'`L%( & 'XiYi&Ů&寰Xi(Yi&Ů&寰L%(`Ls(>%} L(- MICRO ILLUSTRATOR PICLOAD -( l ̤L(GERAET/FILENAME: ( (a  y(a D`L( T0>&}i(1i(((IALh)(((() (()pLT)((Le)(i((i(L(`Lm)>'} T p( ( & & "( i)i)ILm)``j)() (()pLT)((Le)(i((i(L(`Lm)<0&0xAxA `L&L& &&&&& &B&&m&& &i && &&&D&&m&&&i&&B)}&&ȑ&&H&&m&&&i&&&&ȑ&& V`&`LL& &&& &&& &` L& B*}&&&&&& &`H hL&' ''''' &B&&m'& &i && &'&D&&m'&B+}&i&&&"'ȑ!' &J & &m' & &i & & &'&K&&m'&&i&&& '' V`B,}L'BVލF`X L( T ' yL5( D:MAN.PIC(+ D(( &Щ gB-}ILl(`X- MIL( T yL( D:MAN.PIC( D '}(~(((((́((L) (((B.}(((((L(Щ gIL)`()L2),),)LL) ,)L7) "),),)Lp) ,)B/}L[),),)L)-)m,).)iHH hh,)Lu),) ,)L) ,)L)`L)$)%)Y))X()Y+)X*)`LB0}) )))#)))LT* ')&)')&) HH hhe&)i')La*))&)')`Le*"B1})ILz*()))L*%)()iP()))i))%)I`L*%)$)L*Ȍ$)*)i(()+)i))L*$)*)+)+)))*)()`L* *B2}&)')L;+()))* b*8&)&)')')#)L8+&)')L8+ *L*`L?+ ) *XiYi()Ů))寰XB3}i(Yi*)Ů+)寰L?+`L~+ yL+D:MANKOALA.PIC+ D T /) ) <+Щ gIL+`L+ TL+Picload B4}D E M O Info Menue+ lL#,$Dieses Programm soll den Unterschied+ lLS,%zwischen normal (mit GET) geladenen ,- lLB5},%und mit BGET geladenen Bildern ,] lL,%zeigen... , lL,%Man wird feststellen, dassB6} die , lL-%mit Bget geladenen Bilder wesentlich , lLC-%schneller geladen werden. - lLs-%Die BgeB7}t Procedur gibt es in Action -M lL-%normalerweise nicht. Deshalb haben -} lL-%wir sie programmiert... B8} - lL.% - lL".Nun >START< druecken. l`L.. yL9.K:.6 D TB9}  Lv.bitte waehle aus.e  L.1. MIT GET LADEN.  L.2. MIT BGET LADEN. B:}  L.3. KOALA LOADER.ة  L/4. . LA/#: Disk muss im Laufwerk sein/ lLB;}r/& Nach dem Laden druecken/K l *.8*.0*.*.IL/ (*.IL/ (*.IL/ {+*.IL/L/L..`LB<}/R w T L/ >> picload <> d e m o <<0, B=}Lk0$Copyright 1987 by Action! User Group0F lL0>>Press >HELP< or >START<0u lIL0 +Щ gIL0 +.``B>}/Copyright 1987 by Action! User Group0F lL0>>Press >HELP< or >START<0u lIL0 +Щ gIL0 +.``@&/RxATXPXL&`& L$&&& &&&O&&P&O&&P& &L_& && &L>&`Lc& ȩ  ɩ  F@}ʩ  ˩ u0 !&ҩ w`L&&&@ &&&8 &( &&&&i(&&i&&&m &ȱFA}m&&( &&m&ȱm&&(  !& &&L&`L\'X'X' X'Lu'X'XFB}'L'X'X'`L''' ͊'L''N͊'L'N''`'L' '''8'' Y'''' æ8FC}'' Y''8'' '''' æ8'' '''' æ'm' Y''8'' '''' FD}æ'm' Y'''' æ'm' Y'''m' '''' æ'm' '''' æ8'' Y'FE}''m' '''' æ'8 񦥠' '  񦥠'''  !&'IL' !`Lh) NFF} & &I &I &I &I &I L) & & &IL) &I L) &L)8 & ' & &I L * &IL) & &FG}L)8 & &L * &i ' & &I L;* &IL)* &L;*8& Y'& &IL|* &I Lj* &&Lg*8&&FH}L|*&i Y'& & &`L* T w w `& & !& & ! æ O O FI} & & &&&`L+L+}Your Score >+ && `L)+%+ %+LT+ && ' && '%+L.+`LX+ e)FJ} && & &L~+ &+L+ && æ&& !&&& *LX+`DL+ T(ȍL+ action user group + sLFK}+ presents +ߩ sL, + sL3, , sLS, ,? sFL}Ls, ,_ sL, Ԡ , sL, , sL, produced by ,FM} sL, markus kretzer ,ߩ sL- , sL-- LEVEL :- &  񦥠ТЩ gIFN}L- & &ILj- & & +ͤ+L-+ + + + 2 !&+L- !FO}Щ gI /L>- &IL-&Ѝ& &IL.&& &IL'.&& &IL;.&d&`L?. TFP} Lg. YOUR SCORE :.Z &&  &&&&L.&&&&L.YOU REACHED A NEW. sL. HIFQ}SCORE.© s L. HISCORE :. &&  L/ press start/ sL1 &&`L 2 + ,`L2&&&&& ! - 2 /L'2`Jl}`2&& L1 1Щ Щ gI /  /L>1 &&`L 2 + ,`L2&&&&& ! - 2 /L'2`H&* DOS SYS 038* SPRACHE1KRS 0325* SPRACHE2KRS 0335* IFTHEN KRS 0305* LOOPS KRS 034Nn}5* INFO2 KRS 0125* ERRCODESTXT 022s5* LIB COM 105[5* KOALA ACT 016C5* MAN PIC 062+5*No} MANKOALAPIC 0245* DEMOLOADACL"'' T2 w ̤ ̤LQ'error encountered...'< l&& ̤ ڧ`Ln'& Np}& lILn' y`L' T yL'D:*.*' D k'`L' T yL'D8:*.*'ͩ D k'`'L' T ̤Nq}L(Enter Filespec of Textfile' l& ̤&&!' ' y& D ̤Lg(opened (_ & Nr}l ̤L(Please wait...({ l''& ''IL( ̤L(Textlines read :( '' `L( T  wNs}L) textfile checker( sL') ) sLG) (C) 1987 BY )3 sLg) )SNt} sLu) )s sL) ) sL) ) sL) Խ ) sL) νĮ ˠ) sL) Nu}ˠ)ݩ sL* Р Ԡ) s`L* (I IL*IL9* 'ILF* 'ILS* 'IL`*L* ̤Lw*Nv}press any key...*f l yL*K:* D &L*`*L9* 'ILF* 'ILS* 'IL`*L* ̤Lw*LGP]^IARUKE@2@ 9A@2'A @9Rx}A@2:AR@'@-(}:;@,##(**************************##(* EinRy}weisung in die *##(* *##(* Maschinensprache der *##(* *Rz}##(* CPU 6502 Teil I *##(* * ##(*(R) 87 Action User Group* ##(*************R{}************* MA ,"@@K, @ @>.(% R|};)@>$O#(}Hallo liebes Clubmitglied,O('heute beginnen wir also den ML-Kursus.W,($Was ist eigentlicR}}h Masch.-Sprache ?W(&Masch.-Sprache ist ein logisches ver-[1()knuepfen von Befehlen aehnlich dem Basic[(%es ist leiR~}der etwas komplizierter als^0((Basic, da man nur mit Adressen arbeitet^()und man das Resultat nicht sofort sieht.YR}0((Dieses sollte aber niemanden abschreckenY($weil dieses sich schwieriger anhoert.$(als es in Wirklichkeit ist.. R}@V+(#}Das eigentliche Problem beim Prog-V(&rammieren in Maschinensprache bestehtf0((jedoch darin, das man keR}inerlei AngabenX(#ueber moegliche Programmier Fehlerf( bekommt.f/('Nun wollen wir aber zum Aufbau der CPU\((uebR}ergehen und die Funktion erklaeren !f @V.(&}Die CPU 6502 hat drei Register in dieV(#wir etwas hinein Schreiben R}koennenx#(und die wir Lesen koennen.P((Es handeln sich um die Register ,, !x(#Diese werden am meisten benoetigR}t,a,($so dass wir naeher auf sie eingehen9(wollen.a(#Man benoetigt diese Register um inS+(#andere SpeicherzeR}llen etwas hineinS(#Schreiben zu koennen oder ein Wert#(lesen zu koennen# @Z.(&}Nehmen wir ein BeispielpR}rogramm indemZ('wir den Bildschirm Rot Faerben wollen.h/('Der Basic Befehl wuerde hierzu lauten:@( POKE 710,50h(R}#Das ML-prg. wuerde dann so lauten:\(LDA #50(STA 710>(Wie wir sehen, wurde aus dem\(Basic Befehl POKE 710R},50 N%(in ML-Sprache zwei Befehle :D(1. LDA #50 : 2. STA 710N @!^-(%}Nehmen wir nun den ersten ML-BefehlR},T("(LDA #50), naeher unter die Lupe.^ @"Y.(&}Die erste beiden Buchstaben von 'LDA'Y(&also LD heissen ueberseR}tzt LOAD=Lade.#U,($Der dritte Buchstabe bezeichnet dasU($Register, (A), in dem etwas geladen$S( werden soll.1(R}Zunsammengefasst lautetS(das so: Lade das A-Register.%Y1()Das Zeichen '#' zeigt an dass das A-Reg.Y(#mit einer ZahlR} geladen werden soll.&o*("Die Zahl '50' zeigt den DezimalenS($Wert an, womit das Register geladene( werden soll.o R}@'^,($}Ubersetzt lautet der Befehl LDA #50:( dann so:^((LD) Lade das (A) reg. mit dem(m#((#) Wert (50) R}50 Dezimal.J("Dieses gilt auch fuer die anderenm(Register so ergibt sich auch:)}%(LDX #50 oder auch LDY #50 !!K(R}!Bis hierhin alles verstanden ??\( (a/ein)i)@}"@x@$*T/('}Nun wollen wir euch den zweitenR} BefehlJ((STA 710), erklaeren.T @+U-(%}Die ersten beiden Buchstaben vom ML-U(#Befehl 'STA' also ST bedeuten uR}eber,r"(setzt STOREING=Uebertrage.I("Der dritte Buchstabe kennzeichnetr($wiederum das Register in diesem fall-i(R}also das A-Register.A( Die Zahl '710' kennzeichnet diei(#Speicherzelle, indie der Inhalt vom.n'(A-Reg. uebertragen R}werden soll.S('Uebersetzt lautet der Befehl 'STA 710'n(dann folgendermassen:/g1()(ST) Ubertrage den Inhalt vom (A)R} A-Reg.]('in die Speicherzelle (710) Dezimal 710.g @0\0((}Dieser Befehl gilt auch wieder fuer die\('anderen ReR}gister so ergeben sich auch:1%%(STX 710 oder auch STY 710 !!2X(( Hast Du den Befehl verstanden ?7( (a/ein)D)R}@X"@x@C3i (}Nun eine kleine Uebung:K(&Lade das Y-Register mit dem DezimalenW6-iARR}4&(Wert 145&(Deine Eingabe =5.)@"@2$(>:,. @S6/"A&(>:,%6-&@R}/ @S7"AU@W816-%@67<,.>:,'(>:,1 @S99AR@9B:,")B:R},!@@b:&&7@<@,0LDY@b;$$7@<@,0#@b<&&7@<@,0145@R}b= @c><(((Leider ein Falsche Eingabe2 @< @$?/('}O.K. deine Eingabe war Absolut korrektR}L-A6@h2@@2@%@ @@ @/%2@R}/ @AU*("}Nun haben wir gelernt wie man dieU(&Register mit einem Wert ladet und wieBr(man sie SpeiR}chert.H((Nun wollen wir ein Demo-prg. schreiben.r(%Fuer diejenigen unter euch die einenCY/('Assembler schon besitzeR}n, laden diesenY(%Bitte in den Computer und geben dannD[0((das auf der naechsten Seite aufgefuerte[(&Prg. ein und AR}ssemblieren dieses dannE.$(auf Diskette oder Cassette.. @Fr+(#}Demoprogramm fuer einen Assembler:=( 10 *R}=1536L( 20 PLA_(30 LDA #50r(40 STA 710G_( 50 RTS7( Fuer diejenigen die noch keinen_(#AssembR}ler haben, haben wir auf derH4*("naechsten Seite ein Demoprogramm.4 @Is%(}Demoprogramm ohne Assembler:A(1R}0 FOR I=1536 TO 1542Q( 20 READ Dc( 30 POKE I,Ds( 40 NEXT IJQ)(!50 DATA 104,169,50,141,198,2,96Q(#Wenn ihrR} die Programme ErfolgreichKz.(&beendet habt, ladet Bitte den zweitenK(Teil vom ML-Kursus ein.p( Viel Erfolg mit euR}rem Demo. !!!z @L$$(}Assembler Demo - Basic DemoMO/('10 *=1536 10 FOR I=1536 TO 1542O(20 PLA R} 20 READ DNE%(30 LDA #50 30 POKE I,DE(40 STA 710 40 NEXT IOC1()50 RTS 50 DATA 104,169,5R}0,141,C(  198,2,96d$( (Taste fuer das Menue$)n AP% D:MENUE.WSB((((>>> Clubdiskette einlegenR} <<< A D:MLKURS1.WSBLDY#145nlegenPwBAIKE @2@T@2' +'0@1(1(&Schon den 1.V} Kursteil gelesen ???(J/N))"@:J,)"@:j,@9%(}BITTE erst den 1. Teil lesen/MA9 A 9V}A@2'A @9A@2:AR@'@-(}:;@,##(*****V}*********************(##(* Einweisung in die *2##(* *<##(* Maschinensprache der V}*F##(* *P##(* CPU 6502 Teil II *Z##(* *d##(*(R)'87 AcV}tion User Group*n##(**************************x MA,"@@K, A` A >V}.(% ;)@>$%%(}Herzlichen Glueckwunsch !!!!C+(#zur erfolgreichen AbsV}olvierung desC(ersten Kurses ....9 -AA6@ 9-%@@6@C2@@V}C2@%@@@   < -@6@<-@@P@72@V}72@%@@   APO-(%}Nun wollen wir uns mit Schleifen undO(Verzweigungen beV}schaeftigen.((( Also Befehle wie FOR...NEXT und( IF...THEN.Y/('Der 6502 hat Statusregister (Zustands-Y(%rV}egister.). Nach jeder Operation mitT-(%einem der Register (,,) kann sichT("dieses Statusregister veraendern."R V}AP4("}Das Statusregister setzt sich ausR(folgenden Bits zusammen:,(N = negative Flag6(V = overflow FlV}ag@(B = Break FlagJ(D = decimal FlagT(I = Interupt Flag^(Z = Zero Flagh(C = Carry FlV}agr\0((Fangen wir nun mit dem Z Bit(Zero Flag)\('an. Dieses Bit gibt Auskunft darueber,|K1()ob die zuletzt bearbeiV}tete Zahl Null istA( oder nicht.K APB.(&}Nun wollen wir dies an einem BeispielB(verdeutlichen:C/('Wir ueV}bersetzen folgende Basiczeile inC(Masch.Sprache:00((FOR I=255 TO 0 STEP-1:POKE 710,I:NEXT I<0((Fuer die VariablV}e nehmen wir das X-Reg-<(ister. AP( }10 *=1536,( 20 LDX #255,(30 SCHLEIFE STX 7100(40 DEX$V}(50 BNE SCHLEIFE0(60 BRKq/('In 10 wird als erstes die StartadresseG(des Prg. angegeben.q(%In 20 wird das X-RV}eg. mit 255 geladenS-(%In 30 steht zuerst ein sog. LABEL, zuS(!dem spaeter verzweigt werden sollW1((Ausserdem wird V}in dieser Zeile das XReg.W(!in Speicherzelle 710 geschrieben.T-(%In 40 wird das X-Reg. um 1 nach untenT("gezaehlt.(DV}EcreaseX = vermindereX)r/('Dieser Befehl hat auch Einfluss auf dasI(Zero Flag in der CPU.r($Ist naemlich das X-Reg. V}ungleich 0 ,`,($so schreibt er eine 0 in dieses Bit.6 AP`(%}Sollte der Wert des X-Reg. nach Aus-c+(#fuehrung V}des DEX Befehls jedoch denV(&Wert 0 annehmen, so wird das Zero Flagc(gesetzt.Y/('In Zeile 50 ('50 BNE SCHLEIFE') frV}agenY(%wir dieses Bit mit dem Befehl BNE ab.Y/('Dieser Befehl heisst nichts anderes,alsY(%'verzweige zum Label, wenn V}das Z-Flag&f(= 0 ist.8(#Das heisst, das solange wieder nachf((SCHLEIFE gesprungen wird, bis das Z-Flag0;-(%gesetV}zt ist, also das X-Reg. den Wert;( Null hat.:V+(#Der Raum zwischen dem LABEL und demV(&BNE Befehl darf jedoch 128 ByteV}s nichtDc(ueberschreiten.>("Dies sollte beachtet werden, da esc( sonst zu Fehlern kommen koennte.Nb AP9('}V}Ist das X-Reg. nun 0 , so wird der BNEb($Befehl von der CPU uebersprungen undX''(der naechste Befehl bearbeitet.bV+(V}#In Zeile 60 waere dies dann der BRKV(&Befehl (BRK Abk. fuer BREAK), der beimlU+(#Atari Assembler wieder in den DEBUGU(V}%Modus zurueckspringt oder bei anderenv<+(#Assemblern wieder zum Menue fuehrt.2(< AP^.(&}Hast Du den BefehV}l 'BNE' verstanden ?=( (a/ein)J)@^@tA@p,($}Nun wollen wir euch eine andere ArtS("zeigen wV}ie man verzweigen kann undp(zwar mit Befehl 'BEQ' !!U.(&Dieser Befehl des 6502 bedeutet sovielU("verzweige wenn das V}Ergebnis gleichV,($dem ist, mit dem wir es vergleichen.V(%Nehmen wir wieder ein Beispiel Prg. :p( 10 *=1536$( V}20 LDX #2558(30 SCHLEIFE DEXH( 40 CPX #40[(50 BEQ FERTIGp(60 JMP SCHLEIFE( 70 FERTIG BRK AP;,(V}$}Nun wollen wir euch mal die Befehle;( erklaeren:S+(#Der erste Befehl zeigt wie schon imS(#ersten Demoprg. die StarV}tadresse ani,($in diesem Fall also auch wieder 1536=( also Page 6.i('In Zeile 20 laden wir wieder das X-Reg.](mV}it dem Wert 255C(&in Zeile 30 setzen wir auch wieder ein](LABEL, wobei wir aberZ/('gleichzeitig das X-Reg. um 1 vermV}indernZ(&Nun in Z.40 aber sehen wir aber gegen-g,($ueber dem 1'Demoprg. einen absolutenS("Unterschied, naemlich einenV} neuen g(Befehl 'CPX' !!s(Dieser Befehl bedeutet:J(&Vergleiche das X-Register mit dem Werts($hinter dem Bef. 'CPV}