@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}DISK OPERATING SYSTEM II VERSION (cr) 1986 by the Warriors!A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 128ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u y# - *6 7z#  #L: G ! 4 ! !D E BHI VL B T} D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pasca U}l libraryD8:lib h   8}   "   1 ;  O  R" L V}    y   n۠! L  " t   O  8L!   " W}  LJ!  " tLk h  " t9" LY" -------------------------  "  } X} t~" L" |Bitte druecken|  "  } tà" L" -------------------------  " Y}  }   =Lk hR  <# LG#D1:INFO.TXT   1 ;n# L ! " Z}LQ# LkD8:D1:D1:Ӣ B VjBНDEK J VL E:n# L ! " o y# - *6 7z#  #L: G ! 4 ! !D E BHI VL B\} D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pasca]}l libraryD8:lib h   8}   "   1 ;  O  R" L^}    y   n۠! L  " t   O  8L!   "_}  LJ!  " tLk h  " t9" LY" -------------------------  "  }`} t~" L" |Bitte druecken|  "  } tà" L" -------------------------  "a}  }   =Lk hR  <# LG#D1:INFO.TXT   1 ;n# L ! "b}LQ# Lk   =Lk hR  <# LG#D1:INFO.TXT   1 ;n# L ! " # - *6 7#  !L: G ! 4 ! !D E BHI VL Bd} D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pascae}l libraryD8:lib h}   "  tR  " t  " t  " t f} " t  " t! L!Rainbow Programm in Pascal  "  } t  " t  " t! L"|------g}------------------|  "  } t," LF"| Action! User Group |  "  } tk" L"|-----h}-------------------|  "  } t  " t  " t  " tѠ" L" ...Druecke >START<... i} "  } t  " t  " t  " t ԎL*#  " t  " tk# Ln#j}OK.  "  } tLk  " t  " t ԎL*#  " t  " tk# Ln#% ' - *6 7'  !L: G ! 4 ! !D E BHI VL Bl} D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pascam}l libraryD8:lib1 hR}   "  tJ! Lo!Dieses Programm erzeugt ein magisches  n}"% % } t! L!Quadrat.  "  } t! L!Die Addition der Zahlen in horizontaler  "'o} ' } t " L3"sowie vertikaler Richtung ergibt immer  "& & } tX" Lp"ein gleiches Ergebnis!!!p}  "  } t  " t" L"Fuer Laenge ungerade Zahlen von 1 bis 9  "' ' } t" L"q}eingeben.  "  } t  " t)# L1#LAENGE ?  "  }ܠ    8ܠ  Or}  ܠ  O  7 Rܠ  O  q  s R# L  " t  " tޠ   8ڠ ܠs}  O    8ؠ   8ޠ ޠ  O  8ࠈ ڠ  O8 I(t} ؠ  O8 I6uuޠ  O 8ޠ  Oܠ  O q  n'% Lؠ ؠu}  O  8ؠ  Oܠ  O $% Lؠ   8L%ڠ ڠ  O  8ؠ ؠ  O  v} 8ڠ  Oܠ  O % Lڠ   8ؠ  O  % Lؠ ܠ  O 8ޠ  Oܠ  Oܠ w} O  n$ L% L&Das Ergebnis:  "  } t ܠ  OII唰Li'ֈ׈؈x}و  " t ܠ  OII唰LN'ԈՈڈۈࠈ ڠ  O8y} I( ؠ  O8 I6uu O   " wڈԈۈՈ ڈۈL&؈z}و׈ ؈وL`&  " t  " t1Lkuu O   " wڈԈۈՈ ڈۈL&؈7 # - *6 7#  !L: G ! 4 ! !D E BHI VL B|} D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pasca}}l libraryD8:lib h}   "  tF! Lc!Dezimal >>> Binaer Umrechnung  " ~} } t! L!ZAHL (0 bis 32767) eingeben  "  } t    8 =  " t! L"binae}res Ergebnis:  "  } t&" L8"------------------  "  } t  " t @  8}  O  a# L   O  O  8  O  # L0   "  }  O   8L^#I   "    O  O  8   O   8Lq"  "} t  " t LkI   "    O  O  8   O   8Lq"  " y# - *6 7z#  #L: G ! 4 ! !D E BHI VL B } D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pasca }l libraryD8:lib h   8}   "   1 ;  O  R" L }    y   n۠! L  " t   O  8L!   " }  LJ!  " tLk h  " t9" LY" -------------------------  "  } } t~" L" |Bitte druecken|  "  } tà" L" -------------------------  " }  }   =Lk hR  <# LG#D1:INFO.TXT   1 ;n# L ! " }LQ# Lk   =Lk hR  <# LG#D1:INFO.TXT   1 ;n# L ! "  r" - *6 7s"  !L: G ! 4 ! !D E BHI VL B$} D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pasca$}l libraryD8:lib# h  " t5! L;!Hallo,  "  } t  " tm! L!Dies ist e$}in Pascal Program  "  } t  " t  " tǠ! L!GEBE DEINEN NAMEN EIN  "  }$} t⠋    > =  " t  " t6" L<"HALLO  "  }⠋   } t#L$}k⠋    > =  " t  " t6" L<"HALLO  "  }⠋   } t#L$ , - *6 7,  y)L: G ! 4 ! !D E BHI VL B(} D!EHI V08! !H!!I !D!E V0 `BD!EJK V` B V`error loading pasca(}l libraryD8:lib h   II唰L! 2 2  F O8(} Iuu  5 Ԍ @LV!  II唰LQ" 2 2⠋ (} F O8 Iuu  5 Ԍ @L!  II唰(}L" 2 2ڠ  F O8 Iuu  5  Ԍ @L" (} II唰L# 2 2ʠ  F O8 I6uu  8 (}  Ԍ @L#Ƞ   8Lk h  " t F  8  II唰(}L$ 2 2ʠ  F O8 I6uu O F O sr$ L.   "(}  L$*   "   Ԍ @L#  " t F F O   8 F O(}  nȠ# L Lk h F  8ڠ  F O8 Iuu (} n  F OȠ  O 8 Iuu  n R⠋  F OȠ  O(} 8 Iuu  n R' Lʠ Ƞ  O8 I6(}uu F O 8ڠ  F O8 Iuu  5  F OȠ  O (}8 Iuu  5⠋  F OȠ  O 8 Iuu(}  5Ƞ Ƞ  O  8 F  8 F F O  8 F O  nW) LȠ (}  O   8 Fʠ Ƞ  O8 I6uu O 8ڠ  F O8(} Iuu  5  F OȠ  O 8 Iuu  5(}⠋  F OȠ  O 8 Iuu  5 F F O  8 F O(}  Ǡ' LȠ  O  n% LLk= hR  " t) L) 8-QUEENS SOLUTION  (}"  } t) L) KYAN PASCAL  "  } t* L@* (C) 1987 BY ACTION! USER GROUP(}  "" " } t  " tr* L*Dieses Programm berechnet das beruehmte  "' ' } t* L*(}Acht-Damen Problem.  "  } t* L+8-Damen muessen auf einem Schachbrett  "% % } t@+ (}Lc+verteilt werden, aber ohne dass sie  "# # } t+ L+sich gegenseitig schlagen koennen !!!  "(}% % } t  " tߠ+ L+hier die Loesung...  "  } t, L>,Tippe "PASINFO" wenn das "%" P(}rompt er-  "' ' } tc, Lk,scheint.  "  } t ! $ #=Lkppe "PASINFO" wenn das "%" P(a޻LL^L1LpLǓLΓL}LRL}LLķLLLLLLLLLLfLiL]L:LOL]LɟLLLLLL{LLΑLLLğLL,}LpLwLLeLFLSL`LmLzLLzLL"LDLLLLϒL1LKLLLL LL~LLBL~LOLOL=L]LL۸LLRLLLТLݢL,}LLLLL~LFLţLңLbLvL^L4L LLȳLALL L7LߣLLLuLTL@LLL LqLFLLLCLLθLL*LL*LLa,}LL*LQLL(ʩ`ʩ` L"`X@ԩ67آ ŏiWE:  Ώ,} ŏ LR % 򺢀  #0ɛ% !lDO Sl ::#,})ߍ Һ0 ( ɺHE Һ0L( ɺ Һ0L(H ɺ Һ0 ( ɺh=Ɉɪɥ,}- MHJJJJOh)PiBi LDEHIB V[cŰűΥQD,}E V0BDE8尝H屝IHI V0 ɺlH ɺL֎hhhhXL B V`BDEJ,}K V`H BHIh V`DE BHI V`BDEHI V`Error Code - Bad Load FileFile Not,} FoundFile Name ErrorNot a Load FileInvailid Device0123456789ABCDEFH ʧh:ɛ ȱ:,}La {8 Ĕ񩛝L8PL`)`uuPL`5``,}8咅哅`Œ哰L`II唐`hhlee8`ee8ȱ`ee,}HHHȱh ʧ```hhlŒȱHȱhL ʧ`eei`e,}eiȱi``ʠ`ʠȱ`ܻݻ`ee`eeʠ`e,}eʠȱ`hhhhHH8咅哅ȥȥȥ`eeʥ`p0``L,}p`0`Lᔠ`8PL`I`)LL` L8`ʕ`8,}PL`ee`eeȵ``` Lii`,}PI`0PI`PI`0PI`ȑi,}iܻݻ»`H h rs c 5L : 5 5`ܻ ݻC c8 `U cܻݻ l`st,}op at address $ stop at line ȱ 5`˕ו &:Tcase index errorarray index error input error file ,}not open range errorarithmetic overflowpathname too long end of filecannot dispose heap overflowtoo many open filescanno,}t read from "output"cannot write to "input"ݴLݴL 0 5ץ 0 5` d',} ĖLĖHJJJJ ͖h) 0:iL5`H 5hH Ė 5h Z cL:G[s͗旧&,} - error codenon-existent devicedevice or file not opendevice timeoutdisk drive # errortoo many open disk files disk ful,}lfatal disk I/O errorinternal file # mismatchfile name error file lockedinvalid disk commanddirectory fullfile not foun,}dŻHHŻ hh`ʵ` ߘ&&& ee楒 ` ߘ&&&8厥叐厅叅挈 ` ߘ,}&&&Ŏ叐 厅叅ߥLE 8包卅 8厅叅` 8包卅,}`ʱ` 葒`hihiHHʱ`I ` j ` j ` j `,} j `ə!əL   ݜ(`LLLL`I EL|8 |8,} "8 |` '8 |LP 8I `mmM,} ) JJJJ  ` ' P`LM @ ,} @ ߢ` P қ`mmmmmmm`8,}`.....................,}...`NnnnnnnNnnnnnnNnnnnnnNnnnnnn` 򺨽򺘝`Lᔭ,}) 'ii`` қ8`8!8陰L8  `,}) )8)) )8)``ʹ,}` 8咅哅&eeeإ) 0JJJJ 0) 0JJJJ 0) 00,}Ȅ8嗨 - Ɨ Ɨ` /Lᔠ  LN+- /L 0L :L,} HH&&&&hehee&&)eee8咩哩唐, / Џ 8咅哅ʥ`,} /  L LᔅFf uu6` LL LL LL LL LL,} LLU) i) `` i`) ``Lw)sLX&0\&0V,}ee0G&0A)ee00&&&Ɣ) 8咅哅i`Lᔠ i8`,}襕ŕ ƕLĕ` L ` /Lᔠ  LѠ .e,}+- 0: V l /LL     ,}    ݡ*L?L? ) L? ,}) L?L?L? m )mL?` L9- 8m8 ,}mح- 򺑌` /  L9`>` LL LL L,}L LL LL LLю``` /Lʠ,} `Œ ƒL{ `ʵ LpLpTRUEFALSEʵLRʵL f,})  Lɟ ` 4ɻ 몭LLʠ` :` 4ɻ 몭LL ɻL,}ʠ `ɻ `  L `e ֥) 8咅哅eePLᔵ) 8,}咅哅dLᔥ m ` ֥) 8i`` ɞ` f ,})  `r`  !"#$%&'()0123456789@ABCDEFGHIPQRSTUVWXY`abcdefghipqrstuvwxy)JJJe,})e`Lᔵ8 G 8唕 / ) - . ƔE +)- JJJJ 0 ) 0 ,}i`ɚLᔵLᔵ8 / ֥) . Lצ 禩0 .  Ɣ00 LǦƔ0,} Lצi`eȵ) ĕ L) - `) 0 666666`HHʠȱhh {ʠȱ `HHʵ,}ȱhh {ʠȱ `ȱ葔Ēʠȱ `  ɻ} 5` `,}ȱ`łȱ僰٠ȱ 5Lҧ 4 ɻ ` 4 ɻ `襆ɻ`,}ɻ`HȱhLᔠņȱŇ` ` 4ɻ 5`H BDE,}HȱI VLۖh`H@i LᔩBDȱEJKJ VLۖh` ^ ʥ `,} ^ ᨠ ` ʩ 4ȥȭ ,}ȩȭ»» `ȱņȱŇؠȱ 5`H ŏh,}iiA ^ʩ ^` 8喅嗅&eeeة&&ƕ,} 8` RɻLH hɛ `,}` LᔊHBDEHȱI VhLۖ `ɛ `hihiHH,}ʠȱ`hihiHHȱȵ`hhiiHHȱʱ`hhiiHH,}葎`)` ֥挥 `)挥 `Ll EE) uE)ߍE E J ,}] ] ɟ)uI u E J M E M U M ] U ] ɭ e e e m,}  m m m m m ٭ m ѭ m e e ,}Mu`08Y&SX1ffffff33332v1A&#"uW1d!)2PQG`GF2877bwPqu EE)ߍE E f ,} ɟ Ϋv v i ]v) u ] n ]LѬW2g ee) ue)ߍev e ѯ m ѯ ,}e ev e ٯ m= e n n e e ev e e m  m ,} m m m  m  m e e vI v !v,} )v 1v 9 Mu`gC2Vs Pui$'C&rb$'DI6y79@("`yvVB xdP,}#YuYW2gqU) L e e Ϋvvivwiwe el e me)el,}8vvww e n n e x x x  ,} ܱ Ա ̱ ı x v i `"wfhhX,}ce0% )Qg1r8!67AP%e'738!S"ur2&Ih'@y%%`C!2GP  ) n mL ,}) v z ѯ` ~ ɟ Ϋv v i ] ɟ i M M U M ] U ,}] m m m  m   ,} n   v) w0 L] v Ƴ } `hXce,}Td(FHPX@)V(26FQd)w @ f"wfh`) L e e Ϋvvivwiwe el ,} e  e n θ٭v)#vivwiw w8nwnv ,} v `Bp#`p"wfhhihiHH擥ђȱHȱhLƴ8ȱȱ` ,} /L ` /`擥Œ`iipȱkeeȑȑ-}eeŃ  LᔥŊȥȥȥiiȑ`iiœ@Œ6ee-}ȱȥ8唑ȱ啑Lŕ ŔȱLȱLU8-}ȱј Lᔈј Lᔠі іȱLȱȥqȥqј?ј7-}ȱȱqȱq`qȥqŒȱœȱq-}q``舱ʕ`ۻڻ 4 H ŏBDȱ-}E JK VLۖڻ ۻ1BDEHȱI VLۖڻۻLh` I5 ` ʕ` U-}i LL JJJ )ei"%LLʱ` ]L 5 `  ` I5 -}i LLJJJ)e` I5i LL襔Œ)JJJ)e-}ŔLT` !葒 ` @ʩÕ 4ûȭĻ Lmm8- }ͻL 8iiŒ哐iûĻ:.ɛȱ:#ȑĒ- }ȩ`a {8 Ē`Lᔠ ûĻtȩeȩmȩpȥJJJJiaȥ)iaȥJJJJia- }ȥ)iaȩ`- }- }, ______________________________________ ------------- -- Pascal Info -- -------------1} ______________________________________ Es gibt folgende File-Extender: *.PAS : Pascal Quellprogramme *.OUT :1} compilierte Pascalprogramme ausser P.OUT !!!) (aber nur von KIX laden !!) 'LIB' File mu1}ss auf der gleichen Disk sein. *.DOS : compilierte Pascal Program- me, die vom Dos 2.5 geladen1} werden koennen(sind mit dem AUTOMAKE File versehen). 'LIB' File muss auf der 1} gleichen Disk sein. ACHTUNG: Kyan Pascal laeuft nur mit Dos 2.5 !!! 'LIB' File muss auf der 0XPASINFO.TXT========================================= == 9} == == == 9} == == == 9} == Pascal == =================================9}========Wer kennt das Kyan Pascal nicht. DiesesPascal duerfte wohl das beste Pascal sein, das es je fuer Atari g9}egeben hat.Es ueberzeugt durch einen recht gut ge-machten Editor (wenn er auch nicht an die Guete des Action! Editors hera9}n-kommt) und einen Super Compiler, der nicht nur schnell ist ,sondern auch ,soganz nebenbei , einen Marco-Assembler mit e9}ingebaut hat. Einen Nachteil hat das ganze System jedoch: Editor,Compilerund auch das Runtime-File, mit dem diecompilierte9}n Programme getestet werden koennen, muessen immer in den Computernachgeladen werden. Das kann auf die Dauer sehr nervend 9}und Zeitraubend sein,wenn man nur ueber einen Computer mit 64 KByte verfuegt. Es ist bei Kyan Pascal auf jeden Fall besser9}, alle Filesin die Ramdisk zu kopieren (z.B. 130XERamdisk bei DOS 2.5). Ich persoenlichmache dies mit dem Ramdiskkopierer 9}vonAction! Clubmagazin #2. Wer erinnert sich noch daran ???Es gibt, so weit ich weiss, zwei grund-legend verschiedene Ve9 }rsionen von KyanPascal. Die 1.x Versionen und die Ver-sionen ab 2.0. Zuerst waren Compiler undAssembler noch zusammen als 9!}ein File ge-liefert worden. Ab 2.0 sind Assembler und Compiler getrennt worden. Das hat folgende Vor- und Nachteile: Ein V9"}orteilist z.B. , dass man den Assembler auchohne Compiler fuer reine Maschinenpro-gramme benutzten kann.(Man muss wissen9#}, dass ein Pascal Sourcetext zunaechst in Assembler Mnemn-onics uebersetzt und dann vom Compiler in Maschinensprache ueber9$}setzt wird.)Ein Nachteil ist, dass die Files sehrlang geworden sind und eine 64 KByte Ramdisk fuer grosse Projekte einfac9%}h nicht mehr ausreicht. Nun ein wenig zum Programmieren: Es wird immer in den folgenden Schrittengearbeitet:1. Editor9&} laden/ evtl. schon vorhandes Programm von Disk laden.2. Programm schreiben/aendern u.s.w...3. Programm auf Disk spei9'}chern4. Compiler laden und Programm com- piliern. Dabei werden verschiedene Files auf die Disk geschrieben !!! We9(}nn im Programm ein Fehler entdeckt wurde , muss man wieder bei Punkt 1 beginnen( Editor laden, Programm ver- bessern9)} u.s.w....) Wenn das Programm fehlerfrei ist (von der Syntax wenigstens...) und das fertige compilierte Programm a9*}uf Disk geschrieben ist...5. ...dieses laden. Die Runtime-Library ("LIB") muss sich dabei auch auf der Disk finden9+}, denn diese wird hinzuge- laden !!! Na ja, wenn das Programm dann nicht solaeuft, wie es sollte, dann muss man9,}zum Punkt 1 zurueckkehren.Hat man nur eine normale Floppystation,also keine Ramdisk, dann kann eine Pro-grammentwicklung 9-}ziemlich langwierig sein. Doch genug der Vorrede. Beginnen wir mitPascal... Legen wir die P9.}ascaldisk (nachMoeglichkeit bitte eine Kopie) und booten den Computer...  | Es9/} geht weiter mit PASCAL1.TXT | r...  | Es8F  | Kyan Pascal Kurs |  Fuer Ver=1}sion 2.01 Version 1.x folgt Eine Information der  =2}𠠛 Alles was nun folgt, gilt fuer die Ver-sion 2.01.Ist die Disk geboot=3}et worden, so er-scheint etwa folgendes: Kyan Pascal (Copyright u.s.w... . . . Enter Command or type MENUDas "PROMT=4}" Zeichen ist hier ein '%'. Das ganze nennt sich dann "KIX Benutzer-oberflaeche". Man kann von hieraus fastalle Dos Funkti=5}onen aufrufen und noch einige Spezialfunktionen. Das KIX Systemerinnert mich immer an die CLI Benutzer-oberflaeche des AMI=6}GA. Naemlich: AlleBefehle muessen erst von Diskette ge-laden werden, bevor sie ausgefuehrt werden koennen. Das heisst fuer=7} ein Dir-ectorylisting: Erst Programm laden, dasdie Directory anzeigt. Nach dem Laden wird die Directory ausgegeben (Tippe=8} dazu :'LS'). Alles klar ???Wenn man mit einem anderen Laufwerk alsStation #1 arbeiten will, dann muss manals erstes das=9} 'User Device' mit dem 'CD' Programm von KIX aendern. Fuer dieRamdisk also z.B.: 'CD D8:' Dann wirdKIX immer versuchen, vo=:}n der Ramdisk zuladen. Sollte das File nicht auf diesemLaufwerk sein, so wird von Laufwerk #1versucht zu laden.Der Befehl=;} 'CD' gilt aber nur fuer dieeigenen Programme. Alle Kyan Files, alsoCompiler,Assembler,Editor und Library versucht Kyan Pa=<}scal immer zuerst vonRamdisk zu laden!--------------Der Editor----------------Tippen wir einmal "MENU"...Auf dem Bild-==}schirm erscheint eine Liste mit allenBefehlen des KIX Systems. -- Man tippe nun "ED" fuer den Editor und warte. We=>}nn nach dem zu ladenen Filename ge-fragt wird, tippe man "D:PASDEMO.PAS"ein. (Dazu aber bitte die Rueckseite derClubdisk e=?}inlegen, da sich dieses Pro- gramm eben dort befindet !!!)Wenn das File erfolgreich geladen wurde,ist man sofort im Edito=@}r und sieht dasProgramm. Anderenfalls wird der Fehlergenannt und nach Tastendruck ist man im Editor (ohne Programm natuerl=A}ich).Wenn man ein neues Programm erstellenwill muss man hier den neuen Filenameangeben.Zum Editormenue gelangt man mit d=B}er ESCTaste. Unter 'H' stehen z.B.: alleSonderfunktionen des Editors. Die '^'Zeichen stehen dabei fuer die CONTROLTaste.=C}Alles andere duerfte sich wohl von selbst erklaeren.----------------------------------------  =D} Das Compilieren: Zum Compilieren muss zunaechst der Editor verlassen werden: Am best=E}en mitder 'X' Funktion (Save & Exit). Das imEditor befindliche Programm wird dabei auf Disk unter dem Namen gespeichert,d=F}er in der 1. Zeile vom Editor-Menusteht. Fuer das Pascal-Demo der Club-disk muss dann die Pascal System Disk-ette (aber bi=G}tte nur die Kopie...)eingelegt werden, auf der sich die folgenden Files befinden muessen: PC : Compiler AS=H} : Assembler STDLIB.S : Library fuer AS LIB : Library fuer das Prg.(Das ist das mindeste!) Na=I}ch 'X' ist man wieder im "KIX" ('%')Nun 'PC' fuer den Compiler tippen. Wennder Compiler geladen ist, so wird man nach dem =J}zu compilierenden File gefragt.Nun einfach "PASDEMO.PAS" eintippen undschon wird compiliert...Es werden folgende Files da=K}zu auf dieDiskette geschrieben:P.OUT : Der AssemblersourcetextA.OUT : Das Pascalprogramm als Maschine=L}nprogramm, das aber das File 'LIB' hinzuladen muss.Der Assembler wird vom Pascal Compilerautomatisc=M}h nachgeladen !!!Nach dem Compilieren ist man wieder im'KIX' . Nun einfach "A.OUT" tippen: DasFile wird geladen. Anschlie=N}ssend wird auch die Runtime Library 'LIB' geladen,sofern es sich auf der Disk befindet.Sollte es weder in der Ramdisk noch=O} aufeiner 'echten' Disk sein, so wird einFehler ausgegeben.Das Demoprogramm ist sicher -- KEIN --Knueller; sollte aber =P}dazu dienen, etwasLicht ins Kyan Pascal zu bringen...Nach der Programmausfuehrung, wie solltees anders sein, ist man wiede=Q}r im 'KIX'.Der Compiler hat noch diverse Optionen:1. Debug : Zum Compilieren muss man schreiben: "PASDEMO.PAS=R} -D" Waehrend der Programmaus- fuehrung wird, im Falle eines Fehlers die Zeilen- =S} nummer im Quelltext ange- geben, wo der Fehler auftrat. Sonst wird immer nur die Speiche=T}rstelle angegeben,aber das nuetzt nicht sehr viel !2. OUTPUT Wenn das Compilierteprogramm nicht "A.O=U}UT" heissen soll. Nach "PC:" z.B:schreiben: "PASDEMO.PAS -O PASDEMO.OBJ" Man kann auch immer=V} andere Stationen angeben: "PASDEMO.PAS -O D:PASDEMO.OBJ Die anderen sol=W}lten sich von selber er-klaeren.----------------------------------------weiter mit : PASCAL2.TXTren sol<vPASCAL2.TXT  | Kyan Pascal Kurs |  AY} Mehr ueber AZ} Eine Information der  A[}𠠛 KIX hat eine ganze Reihen von Befehlen,die sich aber schnell erklaeren lassenA\}:Achtung: Die Befehle entsprechenden denFilenames auf der Kyan Disk. Diese musssich immer in LW #1 befinden, es sei,dieKIA]}X-Befehle sind bereits auf der Ram-disk!Doch zunaechst das Wichtigste:------------------------------Ein "!" in der KomA^}mandozeile wiederholtdas jeweils letzte Kommado: Wenn derCompiler also durch irgendeinen Grundausgestiegen ist(z.B.: bei fA_}alscher Fileangabe). Dann einfach "!" tippen.DerCompiler muss so nicht immer neu galadenwerden.1. CD (change device)A`}----------------------- Bestimmt die Diskettenstation fuer die sog. "Workfiles", also die Station, auf die daAa}s eigene Programm gespeichert werden soll. (Dann muss man nicht immer das Geraet vorher angeben!) Form : CD D8: Ab}oder halt andere Stationen2. PWD (print working device)------------------------------ Hat man sein "Device" verAc}gessen, ein- fach "PWD" tippen und schon wird das Device angezeigt.3. LS (list Dircetory)------------------------Ad} Directory vom "working Device" oder anderen Laufwerken, falls angegeben: Form: LS LS D8: LS *.PAAe}S4. CAT (concatenate)--------------------- Hat mehrere Funktionen:1. CAT filename : listet File auf Af} Bildschrim2. CAT filename >P: dasselbe auf Drucker3. CAT Filename >D:filename ??? na was wohlAg} ???4. CAT FILE1 FILE2 FILE3 >D:FILE4 verbindet FILE1,FILE2 und FILE3 und speichert es unter FAq}B%DOS SYSB*)DUP SYSB BSPASINFO DOSB[PASINFO OUTBcPASSEM OUTBkMSQUARE OUTB{DEZBIN OUTBPASINFO BPASDEMO OUTBQUEEN8 OUTBcLIB BINFO TXTB BPASINFO TXTB(0PASCAL1 TXTBXPASCAL2 TXTBzPASCAL3 TXTBPASCAL4 TXTBPASDEMO PASBQUEEN8 PASB PASINFO PASBPASSEM PASBMSQUARE PASBDEZBIN PASBPASKURS POWB BZERODEMOACTBMOVEDEMOACTBERRDEMO ACTBDEVDEMO ACTBGETDIR ACTBANDDEMO ACTBORDEMO ACTBXORDEMO ACTBLSHDEMO ACTBRAIN ACTB)ACTTIME ACTB'&ACTTIME COMB MBDEMO1 ACTBXBDEMO1 COMB[BDEMO1 POWB cBDEMO2 ACTBnBDEMO2 COMBqBDEMO2 OBJB tBDEMO2 POWB}ACTTIME POWB B!BEF4 KRSB#BEF5 KRS'BITS KRS2MORE KRSMORE2 KRS,=TIMER KRSiSCROLL OBJoDLIS OBJpACTKURS POWMENUE POWDLIS2 OBJ FONT OBJAT1029 POW"DEMOTEXTTXT%MAGA1 TXTILE4. Gut,ne ???5. CP (Copy)-------------- Kopiert die Files. Einfach : "CP sourcefilespec dest.filespec" einAr}geben. z.B.: CP D:LS D8:LS ; Kopiert LS in die Ramdisk6. MV (Move = Rename)------------------As}----- Form: MV oldfilename newfilename Geht natuerlich auch mit den ent- sprechenden Geraetnamen7. RM (Remove At}= Delete)------------------------- Form : RM filename8. CHMOD (Change Protection Mode)------------------------------Au}--- Kommt einem "LOCK" und "UNLOCK" gleich: LOCK: CHMOD -W filename UNLOCK: CHMOD +W filename9. FORMAT -Av}-------- Form: FORMAT drive density z.B.: FORMAT 1 S ; formatiert LW #1 in single Density Aw} FORMAT 1 D ; in medium Density10.SD (Screen Dump)------------------- Nach "SD" wird der Bildschirm auf dem Ax} Drucker ausgegeben.11.DOS------ laed DOS Menu. Zur Rueckkehr zum KIX einfach das "AUTORUN.SYS" File mit der 'Ay}L' Funktion laden.----------------------------------------weiter mit PASCAL3.TXTYS" File mit der '@hPASCAL3.TXT  | Kyan Pascal Kurs |  E{} E|} E}} Kyan Pascal Eine Information der  E~}𠠛 Das ALTE Kyan Pascal (alle Versionen mit"1" ist bei weitem nicht so gut wie dE}asneue. Es hat auch viele Fehler in derSpeicherverwaltung. Die REAL Zahlen werden auch nicht besonders genau be-rechnet..E}..Nach dem Laden hat man wieder ein ArtBenutzeroberflaeche. ("!" Funktion laeuft hier auch !!!)Hier muss man IMMER das GE}eraet angeben,von dem man Laden will.( ausser DOS).Zuerst muss man jedoch die Rueckseiteeinlegen. Am besten man tippt erstE}einmal "D:HELP". Es erscheint ein Bild mit denBefehlen. ----------------------------------------Der Editor:---------E}--Mit "D:ED" laden. Wie bei der 2.x Ver-sion muss auch hier das File angegebenwerden. (Geraet darf hier nicht verge-ssenE} werden!!!)Das Editor-Menue hat gleiche Funktionen,die aber mit anderen Tasten belegt sind.Der Editor ist nicht ganz so E}Atari- aehnlich, wie bei der neuen Version. (z.B.: SHIFT+DELETE zum Zeilen loeschenfunktioniert nicht. Das geht hier miE}t CONTROL+Y). Auch die Sonderfunktionen sind anders belegt. Die Break-Taste ist bei der alten Version mit Vorsicht zu genE}iessen.Es kann vorkommen, dass der Computerabstuerzt !!!Der Compiler:-------------Hier sind Compiler und Assembler inE} einem File. Das File "PC" ist auch dem-entsprechend laenger...Die noetigen Files zum Compilieren undStarten der ProgramE}me braucht man nur"PC" und "LIB"Laden mit "D:PC"Dann wieder Filespec eingeben. Die moeglichen Optionen stehen im HELP E}File.Das compilerte File hat normalerweiseden selben Namen, aber mit dem Extender"O".Zum Programmstart Geraet und FilenE}amendiesen Files tippen. Das 'LIB'rary Filemuss sich auf DERSELBEN Floppystationbefinden. Kyan Pascal 2.0 ist da intel-liE}genter...----------------------------------------Mit "DOS" gelangt man auch hier in dasDOS-Menue. Um wieder zur BenutzeE}rober-flaeche zurueckzukehren muss man ueberdie 'L' Funktion das File "B" laden.----------------------------------------E}  堺̴Ԡ --DzPASCAL4.TXT  | Kyan Pascal Kurs |  I} INFO's zur Clubdisk --------------------- Die Rueckseite bitte MIT I}OPTION booten.Es erscheint das DOS 2.5 Menue. Von hieraus sollte zunaechst das File: PASINFO.DOSmit der 'I}L' Option geladen werden.Ist das Programm abgelaufen, so befindetman sich im "KIX". ('%' Zeichen).Die Programme mit .DOS I}Extender koennenvom DOS geladen werden. Die mit .OUTNUR von KIX.Die .DOS Files sind mit dem AUTOMAKEFile versehen, dass I}sich auf der PascalDiskette befindet.Angenommen das compilierte Programm ist"ZAP.OUT".So muss man im KIX nur schreibenI} CAT ZAP.OUT AUTOMAKE >ZAP.DOSSo werden die Files miteinander ver-bunden.Das "CAT" Programm muss sich natuerlichauf I}der selben Disk befinden.----------------------------------------r-bunden.Das "CAT" Programm muss sich natuerlichauf HF(* DIES IST EINE PASCAL DEMOSTRATION *)(* VON DER ACTION! USER GROUP *)PROGRAM DEMO;TYPE STRING=ARRAY[1..30] OF CHAR;M}VAR NAME :STRING;BEGIN WRITELN; WRITELN('Hallo,'); WRITELN; WRITELN('Dies ist ein Pascal Program'); WRITELN; WRITELN;M} WRITELN('GEBE DEINEN NAMEN EIN'); READLN(NAME); WRITELN; WRITELN; WRITELN('HALLO ',NAME);END. ITELN; WRITELN;Lm (* PROGRAM 8-QUEENS SOLUTION *) (* KYAN PASCAL *) (* (C) 1987 BY ACTION! USER GROUP *)PROGRAQ}M Q8;VAR HD:ARRAY[-7..7] OF BOOLEAN; ND:ARRAY[2..16] OF BOOLEAN; ZEILE:ARRAY[1..8] OF BOOLEAN; POS:ARRAY[1..8] OF INTQ}EGER; SPALTE:INTEGER;PROCEDURE NEU;VAR I :INTEGER;BEGIN FOR I:=-7 TO 7 DO HD[I]:=TRUE; FOR I:=2 TO 16 DO ND[I]:=TRQ}UE; FOR I:=1 TO 8 DO ZEILE[I]:=TRUE; FOR I:=1 TO 8 DO POS[I]:=0; SPALTE:=1;END;PROCEDURE PRINTOUT;VAR I,I1:INTEGER;Q} BEGIN WRITELN; I1:=8; REPEAT FOR I:= 1 TO 8 DO IF POS[I]<>I1 THEN WRITE('.') Q} ELSE WRITE('*'); WRITELN; I1:=I1-1; UNTIL I1=0;END;PROCEDURE SETZEN;VAR ZL:INTEGER;BEGINZLQ}:=1;REPEAT IF (ZEILE[ZL]=TRUE) AND (HD[ZL-SPALTE]=TRUE) AND (ND[ZL+SPALTE]=TRUE) THEN BEGIN POS[SPALTE]:=ZL; Q}ZEILE[ZL]:=FALSE; HD[ZL-SPALTE]:=FALSE; ND[ZL+SPALTE]:=FALSE; SPALTE:=SPALTE+1; ZL:=0; END; ZL:=ZQ}L+1;IF ZL=9 THEN BEGIN REPEAT SPALTE:=SPALTE-1; ZL:=POS[SPALTE]; ZEILE[Q}ZL]:=TRUE; HD[ZL-SPALTE]:=TRUE; ND[ZL+SPALTE]:=TRUE; ZL:=ZL+1; UNTIL ZL<9; END;UNTIL Q}SPALTE=9;END;BEGIN#A LDA #0 STA 82#WRITELN;WRITELN(' 8-QUEENS SOLUTION');WRITELN(' KYANQ} PASCAL'); WRITELN(' (C) 1987 BY ACTION! USER GROUP');WRITELN;WRITELN('Dieses Programm berechnet das beruehmte');WRIQ}TELN('Acht-Damen Problem.');WRITELN('8-Damen muessen auf einem Schachbrett');WRITELN('verteilt werden, aber ohne dass sie')Q};WRITELN('sich gegenseitig schlagen koennen !!!');WRITELN;WRITELN('hier die Loesung...');WRITELN('Tippe "PASINFO" wenn daQ}s "%" Prompt er-');WRITELN('scheint.'); NEU; SETZEN; PRINTOUT;END.die Loesung...');WRITELN('Tippe "PASINFO" wenn daPK (* DRUCKT DAS PASCAL-INFO FILE AUF DEM BILDSCHIRM AUS *)program PASINFO(input,output,TXT);var TXT:FILE OF CHAR; U} line:CHAR; EOLCOUNT:integer; PROCEDURE ONE_SCREEN;(* LIEST DAS FILE VON DISKETTE UND GIBT DEN TEXT AUF EINE SU}EITE VERTEILT AUS*)BEGIN EOLCOUNT:=0; WRITE(CHR(125)); WHILE (NOT EOF(TXT)) AND (EOLCOUNT<19) DO BEGIN read(txt,lU}ine); IF ORD(LINE)=155 THEN BEGIN WRITELN; EOLCOUNT:=EOLCOUNT+1 end ELSE write(line);U} END; (* ENDWHILE *) writeln;END; (* OF PROCEDURE *)PROCEDURE WAIT_RETURN;BEGIN writeln; writeln(' U} -------------------------'); writeln(' |Bitte druecken|'); write(' -------------------------'); U}readln;end; (* ---------------------------------- *)BEGIN (* OF PROGRAM *)(* erstmal "POKE 82,0" und "POKE 752U},1 (Cursor aus) *)#a ldx #0 stx 82 inx stx 752# (* file oeffnen... *) reset(txt,'D1:INFO.TXT');WHILE NOU}T EOF(TXT) DO begin ONE_SCREEN; WAIT_RETURN;end;(* Cursor wieder anstellen *)#a ldx #0 stx 752#end.WHILE NOTs(* DEMONSTRATION ZUR EINBINDUNG VON MASCHINENSPRACHE IN PASCAL PROGRAMME*)(* ----------------------------------*)(* Y} Assembler Starten mit "#A" *)(* Assembler beenden mit "#" *)(* ----------------------------------*)PROGRAM Y}ASSTEST;VAR A:INTEGER;BEGIN WRITELN(CHR(125)); (* Bildschirm loeschen *)(* -------------------Y}---------------*)(* Assembler Starten mit "#A" *)(* ----------------------------------*)#A LDX #0 ; BildschiY}rm schwarz STX 710 INX ; Cursor abstellen STX 752 ; (POKE 752,1)#(* ----------------------------------*)(* Y} Assembler beenden mit "#" *)(* ----------------------------------*)#A LDA #7 ; linker Rand auf STA 82 ; PY}osition 7# WRITELN; WRITELN; WRITELN; WRITELN; WRITELN; WRITELN('Rainbow Programm in Pascal'); WRITELN; WRITELN; WRY}ITELN('|------------------------|'); WRITELN('| Action! User Group |'); WRITELN('|------------------------|'); WRITELNY}; WRITELN; WRITELN; WRITELN(' ...Druecke >START<...'); WRITELN; WRITELN; WRITELN;#AST LDX #0 ; fuer FarbeLOOY}P STA $D40A ; Waitsync:CPU stoppen ; bis zur naechsten ; Bildschirmzeile STX $D017 Y}; Hardware Farbregister ; fuer Farbe 1 (709) INX ; naechste Farbe bis CPX #192 ; 192 BildY}schirmzeilen BNE LOOP ; voll sind. LDA 53279 ; Taste ??? CMP #$6 BEQ OUT ; Ja! JMP STY} ; Nein! ,dann von vorneOUT NOP ; no Operation (Ha Ha!) LDX #0 ; linken Bildschirmrand STX 8Y}2 ; wieder herstellen. STX 752# WRITELN; WRITELN; WRITELN('OK.');END. ; linken Bildschirmrand STX 8XVPROGRAM MSQUARE; VAR F:ARRAY [1..20,1..20] OF INTEGER; C,L,PX,PY :INTEGER;BEGIN#a lda #0 sta 82# writeln(chr]}(125)); writeln('Dieses Programm erzeugt ein magisches'); writeln('Quadrat.'); writeln('Die Addition der Zahlen in horizon]}taler'); writeln('sowie vertikaler Richtung ergibt immer'); writeln('ein gleiches Ergebnis!!!'); writeln; writeln('Fuer L]}aenge ungerade Zahlen von 1 bis 9'); writeln('eingeben.'); writeln; repeat WRITE('LAENGE ?'); READ (L);until (l>=1) a]}nd (l<=10) and (l mod 2<>0); writeln; writeln; C:=0; PX:=L DIV 2+1 ; PY:=1;REPEAT C:=C+1; F[PX,PY]:=C; IF C MOD L=]}0 then BEGIN PY:=PY+1; IF PY>L THEN PY:=1; END ELSE BEGIN PX:=PX+1 ; PY:=PY-1 ; IF PX>L THEN PX:=1]}; IF PY<1 THEN PY:=L; END;UNTIL C=L*L; writeln('Das Ergebnis:');FOR PY:= 1 TO L DO begin writeln; FOR PX:=1 T]}O L DO WRITE (F[PX,PY]:4); end;writeln;writeln;END.s Ergebnis:');FOR PY:= 1 TO L DO begin writeln; FOR PX:=1 T\>> Bina}aer Umrechnung'); WRITELN('ZAHL (0 bis 32767) eingeben'); READLN(EINGABE); writeln; writeln('binaeres Ergebnis:'); writa}eln('------------------'); writeln; COUNTER:= 16384; WHILE COUNTER >= 1 DO BEGIN D:=EINGABE DIV COUNTER; IF D<1 Ta}HEN BEGIN WRITE('0'); COUNTER :=COUNTER DIV 2; END ELSE BEGIN WRITE ('I'); EINGABEa}:=EINGABE-COUNTER; COUNTER:=COUNTER DIV 2; END; END; writeln; writeln;END.N WRITE ('I'); EINGABE`[AY n FILEGURSYSTECOLARRADSTARCLRCORAINCOFARBMEKEFLIPSOUNFILSLADE_TXINFO_OULADE_TEXFILE_TESMEDI_e}FILESMEDI_LADEz8>AB`@I:9 9 Ad @ A2 e}v>1@WAA?;@ , ] 'U:A6e},B3h'Z D:DLIS.OBJ6-A(1@+1A @2AR@<TF6-Ue}:A`,P-%@0ZF:,"@A0d n+%@A+%@A@x##-- FARBENe} AUF 0 SETZEN --6-?:A6,\O-%@# QTO6-@ -%@#e} )6-%@!AU)6-@    Q] P A2(6-@6-F:%,(%e}11()}졠堠E-@"E(+렯-e}@( * Pascal Info *( * Pascal 1 *"( * Pascal 2 *,( * Pae}scal 3 *-( * Pascal 4(INFO)*2( * Hauptmenue *6<@+6-R:,'F:Ad,AU+)e}J%"@E)"@(%6-@T%"@a)"@)%6-@^"AU6-AUh#6-@e}#%r)"@!@)6-&@|)"@ @)6-%@6-F:%,%e}PA""=T:,")"AU1BB@d'A81M@1 +'0@e}1M@'"@#6. D:PASINFO.TXT'\'"@ #6. D:PASCAL1.TXT'\'"@#6. D:PASCAe}L2.TXT'\'"@#6. D:PASCAL3.TXT'\'"@#6. D:PASCAL4.TXT'\%"@!6. D:MENUE.POW%\e}\O< -@6@<2@@@  2M@QO]@#+e}=0@@OAR@&YY(P堮䠠e}0XX(P栠: T:,e}ApD%/]++0@/P   % ] PZ D:SCROLL.OBJ-@B:e},A5%@:7<,,  +@AVAV]A A'A  AT9A@Ke}A @t]A @? +'0@9AR@?(}6-?: Br,%Oe};@ 0@@;@QW]++0@@E0@@e}WAR@ 6-@@6(堣2-@@2(e}<=T:,"( % Q D:PASKURS.POW堣2-@@2(dACARD SCREENADR=88CARD SCREENPROC ZERODEMO()BYTE I,CONSOLE=53279GRAPHICS(0) SCREEN=SCREENADRFOR I=1 TO 11 DO PRINTE("m}-------- Action! User Group --------") PUTE() ODPRINT("-------- > START druecken < --------")SCREEN==+40*5 ZERO (SCREEm}N,40*10)DOUNTIL CONSOLE=6ODRETURNPUTE() ODPRINT("-------- > START druecken < --------")SCREEN==+40*5 ZERO (SCREEl(; MOVEBLOCK,SETBLOCK,ZERO DEMOCARD SCREENADR=88CARD SCREENBYTE ARRAY DATA(1000)BYTE HELP=732proc WAIT(CARD P1)CARD q}I1FOR I1=0 TO P1 DO IF HELP<>0 THEN EXIT FI ODRETURNPROC MOVEBLOCKDEMO()BYTE I,CONSOLE=53279GRAPHICS(0) SCREEN=SCREq}ENADRHELP=0PRINTE("-------- Action! User Group --------")PRINTE(" ")PRINTE(" Movq}eBlock- Demonstration ")PRINTE(" ")PRINTE("Dieser Text wird in ein BYTE-Array q}")PRINTE("ge'MOVE'ed und dann auf verschiedene")PRINTE("Bildschirmpositionen ge'MOVE'ed!")PRINTE(" HELP = beendenq}")MOVEBLOCK(DATA,SCREEN,40*10)ZERO(SCREEN,40*10) WAIT(50000)SETBLOCK(SCREEN,960,128) WAIT(50000)ZERO(SCREEN,960)DO q}MOVEBLOCK(SCREEN,DATA,40*10) WAIT(64000)ZERO(SCREEN,40*10)MOVEBLOCK(SCREEN+40*13,DATA,40*10) WAIT(64000)ZERO(SCREEN+40*q}13,40*10)UNTIL HELP<>0ODRETURN4000)ZERO(SCREEN,40*10)MOVEBLOCK(SCREEN+40*13,DATA,40*10) WAIT(64000)ZERO(SCREEN+40*p%PROC OURPROC() PUT(') PUTE() PUTE() PRINTE("He-Du hast die Break Taste gedrueckt!") PUTE() PUTE()RETURNPROC HAUPTPROGu}RAMM() ERROR=OURPROC DO PRINTE("-------- Action! User Group --------") PUTE()ODRETURNPUTE()RETURNPROC HAUPTPROGt`PROC DEVICEDEMO()BYTE CONSOLE=53279 GRAPHICS(2) DEVICE=6 PRINTE(" Action! User Group") POSITION(4,6) PRINTE("y}") DO UNTIL CONSOLE=6 ODRETURNRAPHICS(2) DEVICE=6 PRINTE(" Action! User Group") POSITION(4,6) PRINTE("x) BYTE ARRAY FILENAME(20)PROC GETDIR()GRAPHICS(0) PUTE() PUTE() PRINTE("렣") PUTE() CLOSE (2) O}}PEN (2,("D:*.*"),6,0) DO INPUTMD(2,FILENAME,20) PRINTE(FILENAME) UNTIL EOF(2)=136 ODCLOSE (2)RETURN(2) O|xPROC ANDDEMO()BYTE A A=0A==&1PRINTBE(A) A=1A==&1PRINTBE(a)RETURNTIL EOF(2)=136 ODCLOSE (2)RETURN(2) OOPROC ORDEMO()BYTE A A=0A==%1PRINTBE(A) A=1A==%1PRINTBE(a)RETURNTIL EOF(2)=136 ODCLOSE (2)RETURN(2) ONPROC XORDEMO()BYTE A A=255A==!255PRINTBE(A) A=255A==XOR 255PRINTBE(A) A=0A==XOR 1PRINTBE(a)RETURN(2) OvPROC LSHDEMO()CARD ABYTE I A=1 FOR I=0 TO 16 DO A==LSH (1) PRINTCE(A) ODRETURN1PRINTBE(a)RETURN(2) O`PROC RAIN()BYTE WAITSYNC=54282,VCOUNT=54283, CLR=53272,CTR,CHGCLR=[0], INCCLRGRAPHICS(0)PUTE()FOR CTR=1 TO 23} DO PRINTE("A DEMO") ODDO FOR CTR=1 TO 4 DO INCCLR=CHGCLR DO WAITSYNC=0 CLR=INCCLR INCCLR==+1 UN}TIL VCOUNT&126 OD OD CHGCLR==+1 ODRETURN INCCLR=CHGCLR DO WAITSYNC=0 CLR=INCCLR INCCLR==+1 UN3; PROGRAM : EASY INTERUPT ; 1. KEINE ACTION! PROC BENUTZEN; ALSO : KEIN PRINT, U.S.W.; 2. PARAMETERUEBERGABE MIT }NICHT ; MEHR ALS 3 BYTES; 3. KEINE MULTIPLIKATION,DIVISION; 4. SCHIEBEOPERATION RSH/LSH NUR; NOCH BEI BYTE ZAHLEN}BYTE COL4=712,MARGIN=82,CURSOR=752, RAINMEM=203,RAINMEM2=[0], WAITSYNC=$D40A,HARDCOL1=53271, KEYCODE=764,CO}L2=710,KEY, FRAME=[0],Effekt,TIMERSPEED=[1]CARD TIMER2_COUNTER=538, TIMER2_VEKTOR=552BYTE TIMER2_COUNTER_LO=538} CARD SCREENADR=88BYTE POINTER SCREEN BYTE MOVEFLAG=[0]PROC INCCOL() RAINMEM=RAINMEM2 ; FARBEN FUER } ; RAINBOW EFFEKT ; NEU SETZEN UND RAINMEM2==+1 ; WEITERZAEHLEN IF FRAME>10 AND FRAME<2}0 THEN COL4=$20 ; RAHMEN-FLASH FRAME==+1 IF FRAME =19 THEN FRAME=0 FI ELSE COL4=$10 FRAME==+1 }FI; AB HIER BEWEGUNG DES "" SCREEN^=0 ; ALTE POSITION ; LOESCHEN IF} MOVEFLAG=0 THEN SCREEN==+1 IF SCREEN=SCREENADR+39 THEN MOVEFLAG==+1 FIFIIF MOVEFLAG=1 THEN SCREEN==+40 IF} SCREEN>SCREENADR+919 THEN MOVEFLAG==+1 FIFIIF MOVEFLAG=2 THEN SCREEN==-1 IF SCREEN255 ODELSE DO WAITSYNC=1 UNTIL KEYCODE<>255 OD }FIRETURNPROC INFO_WINDOW() POSITION(2,2) MARGIN=2 PRINTE("") PRINTE("| der Ball wird im |") }PRINTE("| Timer bewegt |") PRINTE("| ------------------ |") PRINTE("|Fuer einfache Timer-|") PRINTE("|programmierung} in |") PRINTE("|Action! bitte fol- |") PRINTE("|gendes beachten: |") PRINTE("| |") PRINTE("|1.K}eine Action PROCs|") PRINTE("| benutzen |") PRINTE("| |") PRINTE("| weiter mit |") P}RINTE("")WAIT_FOR_KEY() KEYCODE=255 POSITION(19,1) MARGIN=19 PRINTE("") PRIN}TE("|Parameteruebergabe|") PRINTE("|nur mit maximal 3 |") PRINTE("|Byte (oder 1 Card |") PRINTE("|und 1 Byte). |") P}RINTE("|Intern gesehen |") PRINTE("|werden die 3 Bytes|") PRINTE("|in die 6502 Regis-|") PRINTE("|ter gespeichert. |")} PRINTE("|alle anderen in |") PRINTE("|Zero-Page Register|") PRINTE("|Das wuerde aber |") PRINTE("|Konflikte mit dem }|") PRINTE("|jeweiligen Haupt- |") PRINTE("|programm zur Folge|") PRINTE("|haben. |") PRINTE("| } |") PRINTE("|weiter mit|") PRINTE("")WAIT_FOR_KEY() KEYCODE=255 POSITION(5,13) MARGIN=5 } PRINTE("") PRINTE("|Keine Multiplikationen|") PRINTE("|und Divisionen !!! |") PRINTE("| } |") PRINTE("| weiter mit |") PRINTE("")WAIT_FOR_KEY() KEYCODE=255 POSITI}ON(21,10) MARGIN=21 PRINTE("") PRINTE("|Schieben (RSH |") PRINTE("|und LSH) nur |") PRINTE("|noch bei B}YTE |") PRINTE("|Werten !!! |") PRINTE("| |") PRINTE("| |") PRINTE("")WAIT_}FOR_KEY() KEYCODE=255returnproc newspeed() POSITION(12,9) MARGIN=12 PRINTE("") PRINTE("|Bitte Neue Ge}-|") PRINTE("|schwindigkeit |") PRINTE("|eingeben. |") PRINTE("|Tasten 1 - 9 |") PRINTE("")WAIT_FOR}_KEY() key=getd(1) key==-48 if key>=1 and KEY<=9 then timerspeed=key IF KEY>2 THEN EFFEKT=1 ELSE EFFEKT=0 } FI fi RETURNPROC WARMSTART=$E474()RETURNproc QUIT() POSITION(12,9) MARGIN=12 PRINTE("") PRINTE(}"|QUIT fuehrt |") PRINTE("|Warmstart aus |") PRINTE("|(System Reset)|") PRINTE("|ausfuehren ?? |") PRINTE("| (J/N) } |") PRINTE("")WAIT_FOR_KEY() IF KEYCODE=1 THEN KEYCODE=255 WARMSTART() FI KEYCODE=255RETURNPR }OC HAUPTPROGRAMM() EFFEKT=0 CLOSE(1) OPEN(1,"K:",4,0) GRAPHICS(0) COL2=0 SCREEN=SCREENADR ;=SCREEN=PEEKC(88) INIT_TIME!}R()DO CURSOR=1 POSITION(9,7) MARGIN=9 PRINTE("") PRINTE("| Action! User Group |") PRINTE("| "} |") PRINTE("| 'Easy Timers!' |") PRINTE("| |") PRINTE("| I>nformation |") PRI#}NTE("| G>eschwindigkeit |") PRINTE("| E>ffekt |") PRINTE("| Q>uit |") PRINTE("$}") WAIT_FOR_KEY() KEY=GETD(1) IF KEY='I OR KEY='i THEN INFO_WINDOW() FI IF KEY='E OR KEY='e THEN effekt==XOR 255 FI%} IF KEY='G OR KEY='g THEN newspeed() FI IF KEY='Q OR KEY='q THEN QUIT() FIODRETURN KEY='e THEN effekt==XOR 255 FI]Pb -- Hallo Sektor-Editor !!!  B JKIHiDiELV`L9P'} 9P BLV`LPPl LP &` Fj`8冨凪` PEӅӥ(} P`ʆǪƩ Ɛee` PƦʆǢ &Ɛeǐ Q QLP P'&&&8儨児)}祂*LP&&*ń8&&LP WQ`hihiHHȱȱLPc !#3`*}LPJJJJ`H Ph`Hȩh nPLQ wPLQ !PLQ )PLQ /PH8+}`HhHh [RLQ BHI V䅠LQ LR 9PLQԆ ؠPIPP`,} RP )PLQ RLR RLR SLRH- R8塪墨hLS SLR "SLR RȹP`-}텠8堨塪 R芨Oȩ-`PP RP棩 Ѥģ0-ģ6000:,80H .}& &ehe&eģ0ʥ 8堅塅`$ R&*i0:0i RƦ`¢ 护/}°ڱ%ȱ%E RL\T担CS NRL\TI SL\TH TL\T RL\T &B V QNLMȑ0}` MLN%B VLQS:TE:UH HR UU R HRh)0IUULR[\ZUVT` |Z ;RLZ<}Z ;R X 6URLZZ ;RL [|Parameteruebergabe|Z ;RL+[|nur mit maximal 3 |[ ;RLJ[=}|Byte (oder 1 Card |[5 ;RLi[|und 1 Byte). |[T ;RL[|Intern gesehen |[s ;RL[|werden die 3 Bytes|[ ;RL[>}|in die 6502 Regis-|[ ;RL[|ter gespeichert. |[ ;RL\|alle anderen in |[ ;RL#\|Zero-Page Register|\ ;RLB\|?}Das wuerde aber |\- ;RLa\|Konflikte mit dem |\L ;RL\|jeweiligen Haupt- |\k ;RL\|programm zur Folge|\ ;RL\|h@}aben. |\ ;RL\| |\ ;RL\|weiter mit|\ ;RL]] ;R XA}  6URLS]]: ;RLv]|Keine Multiplikationen|]] ;RL]|und Divisionen !!! |] ;RL]| B} |] ;RL]| weiter mit |] ;RL^] ;R X  6URL2^C}^! ;RLM^|Schieben (RSH |^< ;RLh^|und LSH) nur |^W ;RL^|noch bei BYTE |^r ;RL^|Werten !!! |^D} ;RL^| |^ ;RL^| |^ ;RL^^ ;R X`L_ 6U RL#_E}_ ;RL>_|Bitte Neue Ge-|_- ;RLY_|schwindigkeit |_H ;RLt_|eingeben. |_c ;RL_|Tasten 1 - 9 |_~ ;RL_F}_ ;R X RGW8GW0GWGWL_ GWL_GWPWGWL_LWL_LW``L_ 6U RL`G}` ;RL9`|QUIT fuehrt |`( ;RLT`|Warmstart aus |`C ;RLo`|(System Reset)|`^ ;RL`|ausfuehren ?? |`y ;RL`H}| (J/N) |` ;RL`` ;R XIL` t`L`LW HRL`K:` R UI}YRWXQW X 6U RLIaa2 ;RLja| Action! User Group |aS ;RLa| |aJ}t ;RLa| 'Easy Timers!' |a ;RLa| |a ;RLa| I>nformation |a ;RLb| G>eschwindigkeitK} |a ;RL0b| E>ffekt |b ;RLQb| Q>uit |b: ;RLrbb[ ;R X RGWGL}WII GWIiLb XGWIE GWIeLbLWILWGWIG GWIgLb ^GWIQ GWIqLb _La```b[ ;R X RGWG^; BDEMO1.ACT ; ohne PLA; Action! Demo fuer eine Action!; Einbindung in ein Basicprogramm; Startadresse auf $5000 setzN}en; (fuer Compilierung)SET $E=$5000SET $491=$5000; $5000 "addieren", damit es ab ; $A000 (40960) lauffaehig wirdSET O}$B5=$5000; -------------------------------; -- Programm mit den 4 Regeln !!! --; -------------------------------CARP}D SCREENADR=88BYTE POINTER SCREEN BYTE MOVEFLAG PROC MOVEBALL()CARD ZAPPER FOR ZAPPER=1 TO 4000 ; Warte- DO OD Q} ; schleife SCREEN^=0 ; Alte Position ; loeschenIF MOVEFLAG=0 THEN SCR}REEN==+1 IF SCREEN=SCREENADR+39 THEN MOVEFLAG==+1 FIFIIF MOVEFLAG=1 THEN SCREEN==+40 IF SCREEN>SCREENADR+919 THENS} MOVEFLAG==+1 FIFIIF MOVEFLAG=2 THEN SCREEN==-1 IF SCREEN fuer Listing6( fuer Menueh( nochmalr<|6-F:B2y,=@"@{}A0"@&% % D:ACTKURS.POW]( FEHLER !!!( ) A0|} D:BDEMO2.POW&% % D:ACTKURS.POW]( FEHLER !!!( ) A0 ACTTIME.POWS +'0@@A0@@SAR@h-@~}@8(Wenn das Programm beendet ist,J-@@h( RUN "D:MENUE.POW" tippen2 @[ D:ACTTIME.COM} D:ACTTIME.POWas Programm beendet ist,J-@@h( RUN "D:MENUE.POW" tippen2 @[ D:ACTTIME.COMBEF4.KRS************************************** ** ** } B E F E H L E ** ** Teil 4 ** ‚} ** (C) 1987 by Action! User Group ** *************************ƒ}*************ZERO----Syntax : ZERO(STARTADRESSE,LAENGE)Der Speicherbereich ab Startadressebis Startadresse+Laenge „}wird mit 0belegt. Ist ganz nuetzlich fuer einschnelles Bildschirmloeschen einigerBildausschnitte. STARDADRESSE kann CARD…} Variable oder Konstante sein.LAENGE:CARD Variable oder KonstanteHier ein Beispielprogramm:CARD SCREENADR=88CARD SCREE†}NPROC ZERODEMO()BYTE I,CONSOLE=53279GRAPHICS(0) SCREEN=SCREENADRFOR I=1 TO 11 DO PRINTE("-------- Action! User Group ‡}--------") PUTE() ODPRINT("-------- > START druecken < --------")SCREEN==+40*5 ; :ZEROˆ} (SCREEN,40*10)DOUNTIL CONSOLE=6ODRETURN; ----------------------------------SETBLOCK--------Aehnlich wie ZERO, a‰}ber man kann denWert bestimmen, mit dem der Speicher-bereich aufgefuellt werden soll.Syntax: SETBLOCK (STARTADRESSE,LAŠ}ENGE,WERT)STARTADRESSE und LAENGE wie gehabt.WERT muss natuerlich ein BYTE Wert sein.Ein Beispielprogramm duerfte wohl‹} nicht erforderlich sein.MOVEBLOCK---------um einen Speicherbereich in einenanderen zu kopieren.Syntax:MOVEBLOCK(Œ}ZIELAdresse,Quelladresse,L)Die Daten (so viele wie in L stehen)werden von der Quelladresse zur Ziel-adresse kopiert. Das }koennte man auchmit einer Schleife machen, aber dieseRoutine ist eine Super-Super schnelleRoutine, so dass es immer besserŽ} seinwird, diese auch zu verwenden.Die beiden Adressen koennen nun wiederCARD Variablen Konstanten sein.Das Beispiel d}azu ist auf der Disketteunter dem Namen: MOVEDEMO.ACTzu finden. In diesem Beispiel werden die ganzenSpeiche}r-verschiebe-Befehle nocheinmal benutzt!Die Anwendungsweise sollte dann end-gueltig klar sein.; ----------------------‘}------------- Peeks & Pokes Auch das geht in Action!; -----------------------------------POKE----Sy’}ntax :POKE(ADRESSE,WERT)ADRESSE MUSS dabei eine CARD Variableoder Konstante sein.WERT dagegen nur eine BYTE Zahl oderKo“}nstante.Wie in Basic wird auch hier der Wertder jeweiligen Speicheradresse zuge-ordnet.POKEC-----(soll wohl fuer POK”}E CARD stehen)Die Syntax ist dieselbe wie beim normalen POKE. Nur muss hier der WERTauch eine CARD Variable sein. (oder •}halt auch eine Konstante.Dieser Befehl ist zum bekannten DPOKEvon TurboBasic identisch. Der WERT ,der hier eine 16 BIT Za–}hl(also von 0 bis $FFFF) darstellen kannwird in LO und HI Byte aufgeteilt. Diese werden dann in die Speicherzellen von AD—}RESSE und ADRESSE+1 ge-schrieben.PEEK----ist eine FUNCtion und liest ein BYTEaus der angegebenen Adresse.Syntax :A=P˜}EEK(ADDRESSE)ADDRESSE muss hier natuerlich wiedereine CARD Variable oder eine Konstantesein.Das 'A' muss hier eine BYTE™} Variablesein, das verteht sich aber hoffent-lich auch von selbst.PEEKC-----und dasselbe nochmal fuer CARD Zahlen.'A'š} muss hier CARD Variable sein.Noch ein Wort zu den PEEKs und POKEsin Action!:Auch wenn es noch so verlockend ist,diese ›}zu benutzen, da es auf den ersten Blick leichter verstaendlichzu sein scheint, sollte man lieberVariablenbenutzen, die manœ} aufSpeicheradressen gelegt hat z.B.:"BYTE HELP=732"Statt eines "POKE(732,0)" braucht mannur "HELP=0" zu schreiben. Ich }glaube,dass genuegt, um zu zeigen, dass dieletztere Methode besser ist. Sie istschneller ,da kein Unterprogramm auf-gerufž}en werden muss, und daher auchplatzsparender.In diesem Zusammenhang sollte man auchdie POINTER beachten, die ja schon imŸ} letzten Teil erlaeutert wurden.; -----------------------------------Es geht weiter mit:   } ƵӠ ----------------------------Es geht weiter mit:  +BEF5.KRS************************************** ** ** Ƣ} B E F E H L E ** ** Teil 5 ** ƣ} ** (C) 1987 by Action! User Group ** *************************Ƥ}*************RAND----ist eine FUNCtion und liefert eineBYTE-Zufallszahl.(RANDom)Syntax : A=RAND(BEREICH-1)A muss Bƥ}YTE sein.BEREICH kann BYTE oder Konstante sein.Man beachte dass der Bereich immer -1genommen wird.RAND(0) liefert dannƦ} also eine Zahlvon o bis 255.RAND(1) waere unsinnig, da es nur0 ergeben wuerde!BREAK-----Syntax : BREAK()Stoppt dƧ}as Programm. (wie Basic STOP)das Programm kann mit dem 'P' (Pro-ceed) Kommando des Monitors fortge-setzt werdenDiese PROCƨ} liefert einen Fehler-128(Break-Taste).ERROR -----Dies ist die Action! Routine, dieangesprungen wird, wenn ein FehlerƩ}auftritt. Da man weiss, dass man die PROCedur-namen auf andere Speicheradressen setzen kann, ergibt sich hier eine wichtƪ}ige Anwendung: Der TRAP Ein Beispiel: Wir wollen ein Programmschreiben, dass auf Break-Tasten Druckeinen Fehler ausgiƫ}bt, dann aber auto-matisch weitermacht...:Dann muessen wir einfach nur ERROR mitder Adresse belegen, wo 'unsere' PROCliegƬ}t:PROC OURPROC() PUT(') PUTE() PUTE() PRINTE("He-Du hast die Break Taste gedrueckt!") PUTE() PUTE()RETURNPROC HAUPTƭ}PROGRAMM() ERROR=OURPROC DO PRINTE("-------- Action! User Group --------") PUTE()ODRETURNDen TRAP muss man unbediƮ}ngt anwenden,wenn man mit der RUNTIME Library ar-beitet, da es nicht gerade zur Gueteeines Programms zaehlt, wenn es beijƯ}edem kleineren Fehler eines Usersaussteigt. (falsche Fileangabe u.s.w.)Die Break-Taste schaltet man uebrigens so ab: POư}KE(53774,64) POKE(16,64)besser ist natuerlich die Methode ohne"POKE" !!Diese Adressen muss man nach jedem GRAPHICS BefƱ}ehl neu mit 64 belegen.Nach jedem GRAPHICS wird die BREAKTaste naemlich neu aktiviert !!!DEVICE ------ist eine ActionƲ}! Variable und legtden IOCB Kanal fest, auf den die verschiedenen I/O PROCeduren zugreifensollen, wenn keine genaue KanalnƳ}ummerangegeben wurde. Im Normalfall ist DEVICE auf 0 gesetzt. Ein PRINT Bef-ehl druckt die Buchstaben so immer auf Kanal ƴ}#0 aus, also auf den Bild-schirm, der immer Kanal 0 ist. Hier ein Beispiel: Der Kanal bei Grafik ist #6 (z.B.:GRAPHICSƵ} 2. Wenn man in GRAPHICS 2 nun etwas auf dem Bildschirm ausgeben moechte, so muesste man dies mitPRINTD(6,"...") tun. Andeƶ}rs ist es hier:PROC DEVICEDEMO()BYTE CONSOLE=53279 GRAPHICS(2) DEVICE=6 PRINTE(" Action! User Group") POSITION(4,Ʒ}6) PRINTE("") DO UNTIL CONSOLE=6 ODRETURNTRACE-----Auch dies ist wieder eine Action! Var-iable. Sie sƸ}chaltet die TRACE Funktionaus dem OPTIONS Menue ein oder aus.Trace auf 1 gesetzt schaltet ein undTrace auf 0 schaltet wieƹ}der aus. Beim Trace werden die AufgerufenenProcedurnamen auf dem Bildschirm (falls vorhanden) ausgegeben. Ich habe die ƺ}Trace-Option noch nie be-nutzt !!!Kann auch mit der SET-Direktive ge-setzt werden.LIST----Auch eine Action! Variablƻ}e. Diese steuert die LIST Option aus dem OPTIONS Menue beim compilieren.Es istnur sinnvoll, diese mit der SET Direktive zƼ}u setzen SET LIST=1 schaltet ein SET LIST=0 schaltet ausEOF---(nd f ile)Auch dies ist eine Acƽ}tion! Variable.Mit ihr kann man feststellen, ob dasEnde eines Files erreicht wurde. Syntax: A=EOF(Kanal)Dazu auch ein Bƾ}eispiel:Hier wird die Directory gelesen. Wenndie Directory zu Ende ist, steht inEOF die Zahl 136, die bedeutet, dasdas Fƿ}ile (hier die Directory) zu Endeist. :BYTE ARRAY FILENAME(20)PROC GETDIR()GRAPHICS(0) PUTE() PUTE() PRINTE("}렣") PUTE() CLOSE (2) OPEN (2,("D:*.*"),6,0) DO INPUTMD(2,FILENAME,20) PRINTE(FILENAME) UNTIL EOF}(2)=136 ;hier die Abfrage ODCLOSE (2)RETURN; -----------------------------------Das waren bis jetzt die wichtigsten}Befehle. Die Spezialbefehle fuer dieStrings folgen noch.Aber es geht erstmal weiter mit :  } ӮӠ olgen noch.Aber es geht erstmal weiter mit :  .BITS.KRS************************************** Bits,Bits und noch mehr Bits ** und Rechnen mit Action! ** } ------------------------------ ** (C) 1987 by Action! User Group ************************************** } Rechnen ---------Dieses Thema duerfte schnell abge- handelt sein, da es nur einen Rechen-operator geben k}oennte, der nicht be-kannt ist: MODNeben den normalen Rechenoperatoren+,-,/,* , die ja bakannt sind, ist MOD ein Sonderf}all. Aus diesem kann man naemlich den Rest einer Divisionberechnen: 3 MOD 2 ergibt dann 1. Verknuepfer } -------------Man kann die Action! Variablen auch mit den ganz einfachsten Operatorenmanipulieren (AND, OR u.s.w)Dies} hat nichts mit den Verknuepfernbei IF-Abfragen zu tun, sondern funk-tioniert BITweise.AND (Bitweises UND)--------------}-----Es folgt nun eine Tabelle, in der manablesen kann, welches Ergebnis man beiden 4 moeglichen Kombinationen zwischen }Bits hat: 1.Bit|2.Bit|Ergebnis -----|-----|--------- 0 | 0 | 0 0 | I | 0 } I | 0 | 0 I | I | I Man sieht,dass beide Bits auf 'I' stehen muessen, damit das Ergebnis I}wird.Das Rechenzeichen fuer AND ist '&'.Hier ein Beispiel:PROC ANDDEMO()BYTE A A=0A==&1PRINTBE(A) A=1A==&1PR}INTBE(a)RETURNOR (Bitweises ODER)------------------- 1.Bit|2.Bit|Ergebnis -----|-----|--------- } 0 | 0 | 0 0 | I | I I | 0 | I I | I | I Sobald eines der beiden} BITS auf 'I'steht ,ist auch das Ergebnis I. Das Rechenzeichen fuer OR ist '%'.Hier ein Beispiel:PROC ORDEMO()BYTE A} A=0A==%1PRINTBE(A) A=1A==%1PRINTBE(a)RETURNXOR (exclusives Oder)---------------------- 1.Bit|2.Bit|Er}gebnis -----|-----|--------- 0 | 0 | 0 0 | I | I I | 0 | I I }| I | 0Funktioniert wie das normale OR. Wennjedoch beide Bits auf I stehen, wirddas Ergebnis 0.Mit dem exclusiven O}DER kann man recht einfach alle Werte invertieren,wenn man alle BYTE Werte mit XOR 255und alle CARD Werte mit XOR 65535be}arbeitet.Das Rechenzeichen fuer das exclusiveODER kann entweder 'XOR' oder '!' sein.Hier ein Beispiel:PROC XORDEMO()B}YTE A A=255A==!255PRINTBE(A) A=255A==XOR 255PRINTBE(A) A=0A==XOR 1PRINTBE(a)RETURNAlle diese bitweisen Ope}ratoren ar-beiten sowohl mit BYTE als auch mitCARD !; ----------------------------------- Verschieben } ------------- LSH (Left Shift)----------------Alle Bits werden nach links geschoben.Aus} 00I00I00I0II wird 0I00I00I0II0Wie man sieht , wandern alle Bits umnach links. Fuer das r}echte Bit wirdeine '0' eingesetzt.Hinter LSH muss immer in Klammern an-gegeben werden, um wieviele Stellendie Bits versc}hoben werden sollen.Hier ein Beispiel, bei dem immer umeine Stelle verschoben wird: PROC LSHDEMO()CARD ABYTE I A}=1 FOR I=0 TO 16 DO A==LSH (1) PRINTCE(A) ODRETURN Eine Verschiebung um ein Bit nach links ist genauso wi}e eine Multi- plikation mit 2. (siehe DEMO)Fuer besonders schnelle Routinen sollte man eine Multiplizierung mit 2mit Vers}chieben erledigen, da in Action! beim Multiplizieren immer ein Unterprogramm aufgerufen wird.RSH (Right Shift)---------}--------Ist natuerlich genau die Umkehrung von LSH)Fuer das linke Bit wird eine 0 ein-gesetzt.Das Verschieben kann zu}m Beispiel beiPlayer-Missiles und beim Zeichensatzganz 'nette' Effekte bewirken.Hier noch einmal eine Zusammenfassung: } '&' fuer bitweises UND '%' fuer bitweises ODER '!' fuer bitweises exclusives ODER 'XOR' }dasselbe wie '!' 'LSH(Anzahl)' : Linksverschiebung 'RSH(Anzahl)' : Rechtsverschiebung ------------------------------}----- Bedingungen -------------Dies geht wieder schnell. Es handeltsich hierbei um die Vergleichsm}oeg-lichkeiten bei IF...THEN,WHILE,UNTILu.s.w.Auf Gleichheit prueft man mit dem '='Zeichen: z.B.: IF A=B THEN ... FIAbe}r das ist ja bekannt, oder???Auf Ungleichheit mit '<>' oder '#''>','<','>=', sowie '<=' sind auch allgemein bekannt und }brauchen wohlnicht erklaert zu werden.Bei allen Bedingungen gibt es auch die sog. logischen Operatoren (AND,OR)z.B.: IF} A=1 AND B=2 THEN ... FINur wenn A=1 UND b=2 ,dann wird alleshinter THEN ausgefuehrt.z.B.: IF A=1 OR B=2 THEN ... FI } Hier wird alles hinter THEN ausge-fuehrt, wenn entweder A oder B dieverlangten Werte haben oder auch beides zutrifft.K}ann man wie in Basic auch unterein-ander mischen.Es geht weiter mit: MORE.KRSn Werte haben oder auch beides zutrifft.KRMORE.KRS************************************** ** ** } ** ** ** } ! ** ************************************** Nachdem wir uns n}un schon lange mitder Action! Sprache beschaeftigt haben, kommen wir nun allmaehlich zuden "Spezialitaeten".Heute soll e}s darum gehen Action! Pro-gramme in Basic einzubauen. Der Ein-fachheit halber (wegen BLOAD und so) beschraenken wir uns er}stmal auf dasTurbo-Basic. Compiliert man ein Action! Programm,so bestimmt der Compiler die Start-adresse des Programms }selber. Aber esgibt einen Weg, die Startadresse selbst zu bestimmen. (Stand u.a auch mal im Atari Magazin). Man muss ein-}fach die Adressen $E und $491 auf diegewuenschte Startadresse setzen. Dasmacht man am besten mit dem SET Bef-ehl. Aber nic}ht den Monitorbefehl, sondern die Compilerdirektive.z.B.:SET $E=20000 SET $491=20000BYTE blablablaCARD blablablabla}PROC ZAPPER_ZAP()...Hier beginnt das Programm also beiAdresse 20000.Man muss beide Adressen auf den selbenWert se}tzen. Die $E ist direkt fuerdie Compilierung verantwortlich. Die$491 merkt sich die Anfangsadressefuer die Speicherung mit} dem Monitor-befehl "W" , und das ist ja schliess-lich auch wichtig >>> also : Am bestenbeide setzen.Drei Dinge muss man} beachten,wenn manAction! Programme in Basic benutzenwill:1. Speicherbereich:------------------- In Turbo Basic ist }der Bereich von 13865 ($3629) bis zur Displayliste fuer Basicprogramme frei. Die unterste freie Adresse fuer Ba}sicprogramme steht in "MEMLO" (743/744) (PRINT DPEEK(743) ergibt 13865) Die hoechste freie Adresse steht }in "MEMTOP" (741/742) Diese aendert sich aber ,je nach Wahl der Grafikstufe !!! Das Ende eines Basic Programms }steht in (144/145). Irgendwo ab dieser Speicherstelle bis zur Displayliste koennte dann das Action! Programm liegen}. Aber dann muesste man den Speicher "ueber den Daumen" einplanen. Des- halb ist es besser sich den Speicher zu} reservieren. In Adresse "RAMTOP" (106) steht die hoechste Page (Seite) ,die verfuegbar ist. PRINT PEEK(106)*256 erg}ibt dann im Normalfall die Endadresse des Bildschirmspeichers. Man kann sich nun Speicher reservieren, in dem man} RAMTOP heruntersetzt und sofort danach einen GRAPHICS Bef- ehl ausfuehrt. z.B.: POKE 106,160: GRAPHICS 0 } Ab 40960 bis 49152 ist fuer uns dann alles frei. (160*256 = 40960) Laden wir unser Action! Programm also irgendw}o in diesen Speicher. Hier ergibt sich nun ein weiteres Problem: Wir koennen die Action! Programme nicht ohne weite}res in diesen Speicherbereich compilieren, da die Action! Cardridge und auch die File Version gerade diesen Spei}cher belegen. Doch auch dieses laesst sich loesen, da Action! eine sog. OFFCODE-Compilierung zulaesst. Das heisst. D}ie Programme koennen in den normalen Speicherbereich compiliert werden, obwohl sie fuer einen ganz anderen Speicher}- bereich lauffaehig sind. Fuer die OFFCODE Compilierung sind die Adresse $B5/$B6 zustaendig.In diesen Adressen }muss die Differenz zwischen der eigentlichen Zielad- resse stehen und der Adresse ,ab der das Programm compiliert we}rden soll. Ein Beispiel: Das Programm soll fuer $A000 lauf- faehig gemacht werden. Gespeichert werden soll es abe }r ab $5000 also schreiben wir am Anfang des Programms: SET $E=$5000 SET $491=$5000 SET $B5=$5000 ( $ }5000+$5000 = $A000 ) Wenn diese Adresse nicht gesetzt wird, ist sie 0. Ist auch irgendwo einleuchtend , oder ??? }2. Das leidige Runtime-Problem ------------------------------ Steht keine OSS Runtime Library zur Verfuegung, so da }rf man die Action! Befehle (PRINT,INPUT u.s.w) nicht benutzen. Die schon vorge- schlagenen Runtime Loesungen auf }Clubdisk 2 und 3 kann man nicht verwenden ! Wenn man keine Runtime hat,so muss man einfach die folgende vier R}egeln beim Programmieren beachten: a) keine Action! PROCs benutzen b) Als Parameter duerfen nicht mehr als 3 Byte }uebergeben werden Ich habe aber schon Faelle er- lebt, bei denen man man nur 2 Bytes uebergeben konnte. }Man beachte dabei: Eine CARD/INT Variable hat schon 2 BYTE !!! Braucht man mehrere Bytes als Parameter, so }bleibt einem nichts anderes uebrig ,als diese in globalen Variablen zwischen- zuspeichern, oder sich eine } eigene Parameterroutine zu schreiben (kommt auch noch !) c) keine Multiplikation sowie Division d) Schieb}eoperatoren (RSH/LSH) duerfen nur noch bei BYTE VAriablen angewandt werden.Beachtet man diese 4 Regeln, so kan}nnichts passieren!3) Automatischer oder USR Start------------------------------- In den meisten Faellen speichert } man wohl das compilierte Action! Programm mit dem "W" Befehl des Monitors ab. Dabei wird am Ende des Files immer di}e INIT Adresse als letztes Segment geschrrieben. Diese INIT Adresse (738/739) zeigt dann auf die letzte PROC in eine}m Programm. Das hat zur Folge, dass das Programm nach jedem Laden aus- gefuehrt wird. Laden wir das compilierte P}rogramm unter TurboBasic mit dem BRUN oder dem BLOAD Befehl, so wird es immer sofort ausgefuehrt. Um dies zum umg}ehen, so muss man nur das letzte Segment aus dem compilierten File entfernen. Dazu muss man einfach nur den "SEGMENT} CRUNCHER" von DISK #1 laden. Als Input File- spec muss das compilierte Action! Programm eingegeben werden. Als } Output File ein anderes. Alle Segmente werden mit 'Y' auf das Output File geschrieben bis auf das letze (738 739).} Wenn dies angezeigt wird einfach 'N' druecken So einfach ist das. Haben wir das gemacht, so ist alles andere k}ein Problem mehr... Es geht weiter mit  ŲӠ dere kwMORE2.KRS************************************** ------- ** -TEIL II- *}* ------- ** ** ** } ! ** ************************************** Ein Basi!}c USR Befehl legt auf demStack Speicher immer die Anzahl derParameter, die mit USR uebergeben ab.Die Paramter bei dem USR "}Befehl ueber-gibt man uebrigens so: A=USR(STARTADR,Pmeter1,Pmeter2,...)Wir brauchen jedoch keine Parameter,doch das Bas#}ic schreibt trotzdem eine0 auf den Stack, die man mit einem PLA Befehl der CPU (Pull AKKU fromStack) vom Stack holen kann$}. Also muss irgendwo in dem Action! Pro-gramm dieser PLA Befehl untergebrachtwerden. Doch wie geht das ???Kein Problem%}:In Action! kann man Maschinenprogrammesehr einfach einbinden. Dazu gibt esdie sog. Code Blocks, die mit deneckigen Klam&}mern abgegrenzt werden.Man kann in diese Klammern natuerlichnicht die Mnemonics(wie PLA,LDA u.s.w)schreiben. Dazu muss man'} schon dieentsprechenden Zahlenwerte kennen. DerWert fuer PLA ist 104.Doch dazu ein Beispiel:PROC XY() [104] . . .(}RETURNDie 104 wird nun als CPU Befehl aus-gefuehrt. Man kann auch ganze Maschinenprogramme in den Code Blocksunter bri)}ngen:[104 169 1 ... ]Dazu einfach nur die Zahlen hinterein-anderschreiben. Man kann auch Var-iablen fuer Speicheradress*}en hier ein-setzen!!!Die [104] wird dann am besten in dieletzte PROC geschrieben. Mit einem RTS Befehl, der in Action! R+}ETURNheisst man ja sowieso immer hin-schreiben sollte, gelangt man insBasic Programm zurueck.Nun muss man nur noch die A,}nfangs-adresse der letzten PROC wissen,damitman weiss, wo der USR Befehl hin muss.Die Startadresse, die man mit denSET Be-}fehlen in die Adressen $E und$491 schreibt, ist ja NICHT Start-adresse.So geht man vor:Man compiliere das Programm und .}be-sorge sich die Adresse der letztenPROC mit dem '?' des Monitors, indemman hinschreibt: ?PROCnameDies so/}llte man gleich nach derCompilierung tun. -------------------------------------Kommen wir nun zu den Be0}ispielpro-grammen, an denen dann alles klarwerden sollte, falls es dies nochnicht ist:Alle befinden sich auf der Disk.1}BDEMO1.ACT ---------- Hier wird die Einbindung ohne USR undohne PLA durchgefuehrt. Das Programmist ab Adresse $A000 la2}uffaehig.Es soll das "" Zeichen am Bild-schirmrand umherwandern. Das Programmist unter Beruecksichtigung der 4Regeln ges3}chrieben und laeuft so ohneeine Runtime-Library.BDEMO1.COM ---------- ist das Compilat von BDEMO1.ACTBDEMO4}1.POW---------- ist das Turbo Basic Pro- gramm dazu. BDEMO1.COM wird hier ueber BRUN ge5}- laden und startet dann automatisch. -------------------------------------BDEMO2.ACT----------6} dasselbe, aber in PROC MAIN wird der PLA Befehl benutzt.BDEMO2.COM---------- 7} Compilat von BDEMO2.ACTBDEMO2.OBJ ---------- Compilat von BDEMO2.ACT aber ohne das letzt8}e Segment mit der INIT Adresse. BDEMO2.POW---------- das TurboBasic Programm 9} dazu. Der USR Befehl steht in Zeile 250. Er springt zu Adresse 41250 (Start von PROC :}MAIN )Analysiert die Programme! Sie sind alle kommentiert, so dass alles zuverstehen sein sollte... ----------------;}----------------------Es geht weiter mit :  ҮӠ <}----------Es geht weiter mit :  ҮӠ TIMER.KRS************************************** ** *>}* ** ** ** ?} ** ** ***********************@}***************Timers , was sind das eigentlich ???Timers sind nicht anderes als VBI's,deren zeitliches auftreten durA}chZaehler bestimmen kann. Doch das reicht sicher nicht als Erklaerung.VBI: heisst Vertical Blank Interupt.Ein Interupt B}ist ein normales Maschinenunterprogramm, das mit einemRTS (Return from Subroutine) Befehl enden muss. Dieses Programm wirdC} immerdann ausgefuehrt, wenn der Strahlen-ruecklauf am Bildschirm erfolgt. Das Fehrnsehbild wird immer Zeile fuerZeile aD}ufgebaut. Dies bewirkt einKathodenstrahl, der Zeile fuer Zeileden Bildschirm durchlaeuft. Fuer einenBildaufbau benoetigt dE}er Strahl 1/50tel Sekunde. Wenn der Strahl unten angelangt ist, muss er wieder an denAnfang zurueck. In dieser Zeit werdeF}nim Computer verschiedene Interuptsgestartet, die z.B.: alle Schatten-register in die entsprechenden Hard-wareregister ueG}bertragen und ver-schiedene andere Aufgaben erledigen.In dieser Zeit kann man auch eigeneInteruptprogramme ausfuehren. UH}nd genau das sind auch Timers. Mit dem Unterschied, dass sie nicht alle1/50tel Sekunde auftreten muessen,sondern, dass manI} dies in einem Zaehl-register bestimmen kann.Fuer die Timerprogrammierung sind zwei Addressen notwendig:1. Timer VektorJ} : Hier wird die An- (2 Byte) fangsaddresse des Unterprogramms ge- speichert.2K}. Timer Counter: Hier wird nach jedem (2 Byte) Interupt festgelegt, wieviele 1/50tel L} Sekunden gewartet werden soll,bis der naechste Timer ausgefuehrtM} wird. Zaehlt dann auto- matisch runter, bis er ausN} 0 steht. Dann wird die Interupt- routine gestartet.Es gibt zwei Timer: TIO}MER1VEK=550 TIMER1COUNT=536 --------------- TIMER2VEK=552 TIMER2COUNT=538Die SP}truktur eines Timerprogramms istimmer gleich:1. Hauptprogramm: a) Zaehlregister auf 0 setzten, damit zwischendurQ}ch kein evtl. schon vorhandener Timer ausge- fuehrt wird, wenn der Vektor neu gesetzt wird. b) Vektor sR}etzen: c) Zaehlregister ungleich 0 setzen, damit die Timerroutine ausge- fuehrt werden kann.Das HauptprograS}mm kann dann mit irgendetwas weiter machen:2. Timerroutine a) irgendwas... b) Zaehlregister neu setzen, damit T} diese Routine das naechstemal wieder ausgefuehrt werden kann. c) RTS und NICHT RTI, wie man vielleicht anneU}hmen koennte.Und damit das ganze noch mehr Spass macht wollen wir das ganze mal inAction! programmieren. Dabei soV}ll die Timerroutine nach den4 (hoffentlich) schon bekannten Regelnprogramiert werden. Man koennte in derTimerroutine auch W}einige Action! PROCsbenutzen, dann muesste man vor jedemInterupt aber verschiedene Zeropage-register retten und danach wieX}der zurueckholen. Das wird aber noch genauer untersucht!Ein VBI reicht fuer ca. 20000 Maschinenzyklen. Ein implizierterMY}aschinenbefehl hat z.B.: 1 Zyklus.Ein indirekter dagegen kann bis zu5 Zyklen haben. Am einfachsten zu merken ist dagegen fZ}olgendes : Inter-uptprogramme moeglichst kurz halten!!Nun mal wieder zum Demoprogramm.(ACTTIME.ACT)Dazu waere es sicher[} ganz gut,wenn dasDemo im 2. Fenster ist.Es sind zwar einige "Schnick Schnacks"mit eingebaut, aber die sollen unsnicht \}stoeren. Die PROC HAUPTPROGRAMM macht ver-schieden Voreinstellungen fuer das Programm und springt dann zur PROC"INIT_TIM]}ER".Hier wird zuerst TIMER2_COUNTER auf 0gesetzt, damit es keine Komplikationenmit einem evtl. schon vorhandenen Timer g^}ibt. TIMER2_VEKTOR wird auf INCCOL gesetzt.INCCOL ist die PROC ,in der die Timer-routine steht.TIMER2_COUNTER_LO wird a_}uf 1 gesetzt,damit der Timer nach einer 1/50telSekunde gestartet wird.TIMER2_COUNTER_LO ist dabei eine BYTEAdresse und is`}t auf 538 gesetzt. Mankoennte auch eine CARD Variable nehmen, aber dann ist der compilierteCode nachher laenger! Ausserdema} ist es schneller. Nun laeuft der Interupt. Das Haupt-programm gibt in der Zwischenzeiteinige "Windows" aus und wartb}et auf Eingaben von der Tastatur.Zur Timerroutine (PROC INCCOL):Einige Variablen fuer den Farbeneffektwerden erhoeht, dc}ie Hintergrundfarbewird auch veraendert.Der Ball bewegt sich am Bildschirm-rand. Wenn MOVEFLAG=0 ist dann bewegter sich d}nach rechts. Wenn MOVEFLAG=1ist dann nach unten. (MOVEFLAG=2 dannnach links und bei 3 nach oben) Der POINTER SCREEN beinhe}altet immer die momentane Bildschirmadresse.Nach der Ballbewegung wird TIMER2_COUNTER_LO schliesslich auf TIMERSPEED gesf}etzt. In TIMERSPEEDsteht die aktuelle Geschwindigkeit (kann vom Programm aus geaendert werden).Danach kann der RTS (RETUg}RN) erfolgen.Um den Timer vom Hauptprogramm abzu-schalten, braucht man nur TIMER2_COUNTER auf 0 zu setzten.----------h}---------------------------m Hauptprogramm abzu-schalten, braucht man nur TIMER2_COUNTER auf 0 zu setzten.----------pphLspppGNppbbbbbbbbbbbbbbbbbbbbBAp!#4)/.53%2'2/5002/'2!-- !.,%)45.'%.j}ϑ˥ LxpLp`rrst s t s0p1!&t'pps ԍk}ssLs`pqpi@pqiq`',4s tss``Μs jtL6tΜsΜs tL6tsl}`ppLtpppp pȽq p?tu쭕p`ΕppLtpΖpLtr˩̩ͩΩ vp0 B Vm}rz{tu0 V(0BDrEHI V9 muLu BLEuI/O FEHLER...6DuEHI VLtn} mu0 B V`rp˽q̠rɛ uL|ur` uu`ɀɠ`i@`8 `D:*.TXT uEHI VLtgPh3()ԩ=˩`˩`HH˽Q ԍhh@:*.TXT uEHI VLtWA_ t FILEGURSYSTECOLARRADSTARCLRCORAINCOFARBMEKEFLIPSOUNFILSLADE_TXINFO_OULADE_TEXFILE_TESMEDI_q}FILESMEDI_LADEz8?AB`AUI:9 9 Ad @ @ r}|?7A]BB@;@ , ] 'U:A6s},B3h'Z D:DLIS.OBJ6-A(1@+1A @2AR@<TF6-Ut}:A`,P-%@0ZF:,"@A0d n+%@A+%@A@x##-- FARBENu} AUF 0 SETZEN --6-?:A6,\O-%@# QTO6-@ -%@#v} )6-%@!AU)6-@    Q] P A2(6-@6-F:%,(%w}11()}堠E-@"E(+렯-x}@( * Befehle Teil 4 *( * Befehle Teil 5 *"( * Bits & Bytes *,( * Mory}e Action I. *-( * More Action II.*.( * Action! Timers */( * Timer Demo *0( * 'Bz}' Demo 1 *1( * 'B' Demo 2 *2( * Hauptmenue *6<@+6-R:,'F:Ad,AU+)J{}%"@E)"@(%6-@T%"@a)"@)%6-@^"AU6-AUh#6-@|}#%r)"@!@)6-&@|)"@ @!)6-%@6-F:%,%}}PA""=T:,")"AU1BB@d'A81M@1 +'0@~}1M@$"@ 6. D:BEF4.KRS$\$"@ 6. D:BEF5.KRS$\$"@ 6. D:BITS.KRS$\}$"@  6. D:MORE.KRS$\%"@!6. D:MORE2.KRS%\%"@!6. D:TIMER.KRS%\'"@}#6. D:ACTTIME.POW'\&"@"6. D:BDEMO1.POW&\&"@"6. D:BDEMO2.POW&\%"@!!6. D:M}ENUE.POW%\\O< -@6@<2@@@  2M@QO]@}#+=0@@OAR@&YY(P堮䠠}0XX(P栠: T:},ApD%/]++0@/P   % ] PZ D:SCROLL.OBJ}-@B:,A5%@:7<,,  +@AVAV]A A'A  AT9A}@KA @t]A @? +'0@9AR@?(}6-?: Br,}%O;@ 0@@;@QW]++0@@E0}@@WAR@ 6-@@6(堣2-@@2(}<=T:,"( % Q D:ACTKURS.POW堣2-@@2(M   MENUE.POW (B SEITE)S +'0@@A0@@SAR@}:-@@:( Bitte Clubdisk Seite #1 einlegen(1-@@1(und Feuerknopf druecken25<=T:,"}% @5% D:MENUE.POW D:MENUE.POWgen(1-@@1(und Feuerknopf druecken25<=T:,"4LhB&'ԩip˩` LYp`H l>Щ}h@~ЭЩh@>ЩЩh@$Щh@4ЩЍh@DЩh@TЩh@d}Щh@tЩh@Щ%h@Щ6h@ЩGh@Щ~Щ]h@Щ>Щt}h@~Щph@h@Щ%h@Щ6h@ЩGh@Щ~Щ]h@Щ>Щt88DDffff>`<|fl0fF68of;888>x|f<>>``~ppppw``|l`cc>66wwcc<<<<<<<<<<<0 0 ~~`0 }0`ccooo`?33sss~ffgggg`cc~ffwww``pp``pppc`oggssssss n~fflggg000ppp~gwgggg}wogggccgggccpppccggg~ffwww`ssggggggggggo>gggogsss>ggggggfl7g@`0 x}x6c6>"3DUw̻wfUD3UEUQUETUUETUQUUUUUQETEUUETU}2x2x000 <~~~<x`x`~<~}~<0~0 ~ <~~<>~v~```~fn~>20:>~fv~~f~p~>~fv~~```~fvv ~006|vw}fkc|fvvv~fvv~~fv~``~fn~>0888> >~~ffnn~fnn>ck>6f>>nfff~~~6~<~~<}~x|nf8x8fv~``~fn~>0888> >~~ffnn~fnn>ck>6f>>nfff~~~6~<~~<IP d MAXSPACTEXTTXSZAPPFLAOHNEZAPZAPPCOL_ZAPPETXPTSTARDLISENDDLISROEHREACROEHRENMESCOL_OUTXOUCOL_}IWAIT_RETURGUREOLCOLr9: }9 t: } <L==z=>4?J>>; 6-B;,6-C:, }Z D:FONT.OBJ Z D:DLIS2.OBJ 6- BH6- BH6- BH@\@}:@@D:DEMOTEXT.TXT? QC@C:,\@6- ] \]QQ48,} 112,66,0,177,2,130,48,130,2,2,2,130,130,130,130,130,130,130,130,130,130!""130,2,2,130,48,130,2,2,2,2,2F65,176,0d5}]@#+5AR@n # x-6- BPVE"*6-%@-F]AV}Ad/8A` BPV/A#@d%@b8@ BS$6-?: B2d,$AJAY}(} P$P(PJ8@ BS%@$@@7-@PP!P%P7AY@4<}P PPP=AA9 BB@d'A69A8 +% D:MENUE.POW}]T +'0@@@T((00((栠}<=T:,"" A0O11((11((}41((4QO'$( ACTION! USER GRO}UP'Q3O0($ FEUERKNOPF ODER DRUECKEN3Q5O5(($11((}.11((8QLOV.-@@}'M@+ .Q`Oj7 -@@6@&0M@4 7Q~%OAdAU%@@<.=T}:,")F:Ad,AU@AdAUQO6-6-PU:@,}P9U:@,U:@,%@@$@@&@-<6-F:%,6-%@6"AU}*@@(*6-%@66-/@"@@ 6-%@,6-/A%AU(>:,%6-%@}="@Q D:AT1029.POW/@"@@ 6-%@,6-/A%AU(>:,%6-%@+----------------------------------------Und hier noch eine "Message" fuer alle,die einen } Drucker von} Atari haben--------------------------------------------------------------------------------Fuer alle Freunde des guten Dr}ucks, auchwenn man nur 7 Nadeln an seinem Druckerzaehlen kann, haben wir jetzt ein SuperProgramm:Den:----------------}---------------------------------------------------------------- } ction riter--------------}------------------------------------------------------------------Dies ist ein Textverarbeitungsprogramm-paket (langes Wor}t, nicht wahr ???), dassuper Sonderfunktionen speziell fuer denAtari 1029 hat.Das Textprogramm:----------------- } --------------------------------------------------------------------------------Das Textverarbeitungsprogramm arbeite}tnicht in den ueblichen 40 Zeichen proZeile, sondern zeigt 80 Zeichen proZeile. Der Action! Writer arbeitet dabeiauch nic}ht seitenweise, sondern ganz"normal" , wenn man das so nennen kann.Mit den 80 Zeichen hat man sehr gutenUeberblick ueber d}en ganzen Text, doch--------------------------------------------------------------------------------damit nicht genug: In }den Text koennenSteuerzeichen eingebaut werden, die zumeinen alle Funktionen des Atari 1029 ansteuern koennen (also Unters}treichen,Breitschrift, internationale Zeichen u.s.w.Doch damit immer noch nicht genug...-------------------------------}-------------------------------------------------Ein Traum wird nun endlich, dank desAction! Writers,wahr...-------}-------------------------------------------------------------------------- verschiedene Zeichensaetze:Beliebige Zeichens}aetze koennen von Disknachgeladen werden. Es sind auch mehrereZeichensaetze in einem Text moeglich.Das besondere : Die Zei}chen koennen inIhrere Breite variieren...: ----------------------------------------------------------------------}----------Das koennen 4*7/5*7/6*7/7*7/ und auch 8*7 Matrixen sein. so hat man endlichalles unter Kotrolle. So kann man au}cheigene 5*7 Zeichensaetze nachladen. Dieshat den Vorteil, dass die Zeilenlaenge von 80 Zeichen voll erhalten bleibt.---}-----------------------------------------------------------------------------Eine wahre Freude duerfte auch die Moeglichke}it sein, Text aus-zudrucken.Und eine noch groessere Freude duerftesein, Grafiken in der Text mit einzu-bezieh}en. (ideal fuer Briefkoepfe u.s.w)--------------------------------------------------------------------------------Das Tex}tverarbeitungsprogramm hat auch alles was man braucht: - Textformattierung - Blocksatz - Zentrieren - u.v.m. }--------------------------------------------------------------------------------Das ganze hies ja Textverarbeitungspro-r}ammpaket. Dazu gehoeren auch eine SuperHardcopy (8 Formate/Labels/Inverser Druck/ Spiegeldruck) und auch ein SuperZeichens}atzeditor, mit dem man dann eigene Zeichensaetze entwerfen kann.---------------------------------------------------------}-----------------------Wer das alles nicht glaubt, der kann vomClub ein Gratisinfo mit Probeausdruckenbekommen.-----}---------------------------------------------------------------------------Das ganze kostet dann schlappe 20 DM.(incl. Di}skette, Porto u.s.w.)Das sollte wirklich nicht teuer sein.Geliefert wird es mit allen Programmen,versch. Zeichensaetzen un}d Demotexten.Ausserdem eine 25 Din A4-Seiten starkeAnleitung.------------------------------------------------------------}--------------------Wer den Action! Writer sofort haben moechte, der.schicke gleich 20 DM odereinen Scheck.---------}----------------------------------------------------------------------- Das wars! ----------}------------------------------------------------------------------ Das wars! ----------/---------- druecken ------------  }  }  (C) Jan.1988 by Action! User Group c/o Mar}kus Kretzer v.Stauffenbergstr.32 2120 Lueneburg Hotline: 04131/54315Hallo und willkommen zum }5.Clubmagazin,Erstmal wuensche ich Euch allen einfrohes neues Jahr u.s.w. Ich hoffe, Ihralle habt die Feiertage alle gut} ueber-standen und seid jetzt wieder zum Com-puter zurueckgekehrt. Nun gut ... lasstuns gleich anfangen. Mit der heutigen}Ausgabe beginnt auch der von einigenMitgliedern gewuenschte PASCALkurs. Esist heute allerdings noch mehr eine Er-klaerung }zur Bedienung des Pascal, alseine direkte Einweisung in die Spracheselbst. Aber Ihr werdet schon sehen...Der Action! Kurs }geht natuerlich weiter,obwohl wir schon fast mit der ganzen Sprache "durch" sind. Wie gesagt:fast!!!Alle anderen Kurse (6}502/PM Kurs) gehenauch weiter. Und damit sind wir beimProblem dieser Ausgabe: zu wenig Platzauf der Diskette. Ihr glaubt's} nicht ?Dann schaut in die Directorys. Diese sind so ziemlich bis oben hin voll. Es sollten eigentlich noch mehr fertigeP}rogramme mit auf die Diskette (ausserden zahlreichen DEMOS auf dieser Aus-gabe), aber der Speicherplatz auf der Disk reich}te hinten und vorne nicht. Das kommt wohl zu einen auch wegen der"etwas" ausgedehnten Vorspaenne. Aber ich glaube,diese D}iskette ist trotzdem sehr interessant und infor-mativ.Ich an dieser Stelle schon sagen, dassdie naechste Diskette dafuer }mehr Pro-gramme enthaelt. Ich werde dann auchdie Titelbilder weglassen:versprochenist versprochen. Zum Preisausschreiben}:----------------------Es sind bis jetzt 6 Einsendungen einge-gangen, die aber noch nicht mit aufdiese Diskette konnten,} da ich sie schon vor Weihnachten 87 vorbereitet habe. Die endgueltige Entscheidung, werdenn nun gewonnen haben wird, kom}mt dannauf Clubmagazin Nr.6. Schliesslichmuessen die Programme noch auf Nierenund Herz (besser :Bits und Bytes) ge-checke}d werden. Ausserdem hebt das noch die Spannung(Hae Hae..)...Dieses Preisausschreiben war natuerlichnicht das erste} und letzte. Weiterewerden folgen...----------------------------------------Nun zu allgemeinen Fragen, die bei mirangek}ommen sind...:1. Ramdisk: Das DOS auf der 1. Seite dieser Disk (Rueckseite ist 2.5 wegen Pascal Programmen) hat ja ei}ne Ram- disk. Zum Arbeiten mit der Ramdisk muss man zunaechst "8:" und RETURN tippen. Alle weiter Kommandos bezi}ehen sich dann auf die Ramdisk. Zum Initialisieren der Ramdisk einfach "FS#" und Return tippen. (nach dem Booten} ist die Ramdisk aber schon initialisiert!) Um wieder mit Laufwerk #1 zu arbeiten einfach wieder "1:" tippen.2. Ru}ntime-Lib: Die vorgestellten Run- timeloesungen auf Clubdisk #2 und #3 funktionieren sicher halbwegs, aber sind kein}e guten Loesungen. An dieser Stelle kann ich immer nur auf die OSS Runtime-Library verweisen. Wer sie noch nicht hat} ,sollte sie sich un- bedingt besorgen. Diese Library wird mittels des INCLUDE Befehls einfach in das eigene Program}m mir einge- bunden und benoetigt nur wenige Sektoren. So laufen alle Programm direkt vom DOS oder auch MicroIN}IT.3. Eine Moeglichkeit, compilierte Action Programm wieder zu "de-"compilieren gibt es nicht. Aber schaut Euch mal } den eingebauten Disassembler der neuen Action! Version an, die auf dieser Disk ist. 4. Weiss vielleicht j}emand von Euch,ob es eine TurboBasic Version gibt, bei der man mehrdimensionale Strings dim- ensionieren kann? (z.B.}: DIM A$(5,5)) Wenn ja ,bitte melden... 5. Wenn bei Action! der Error 61 (Out of Symbol Table Space) auftritt, muss} man die Symboltabelle groesser dim- ensioniert werden. Dazu im Monitor vor dem Compilieren Adresse $495 mit dem }SET Befehl erhoehen(z.B. auf 12 oder mehr.Die Voreinstellung ist 8, steht fuer die einzelnen Seiten,also 2 KByte.}Ok. Dann will ich auch mal Schluss machen, denn die Sektoren werden knapp..Ach noch was: Bitte vergesst nicht wenigstens e}ine kleine Botschaft mit aufdie Zahlkarte zu schreiben (z.B. EurenNamen).... Bis zum naechsten mal... } Euer Markus...----------Nun OPTION druecken-----------.... Bis zum naechsten mal... J