@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@W1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD` D  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLL&0") $G% }H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` dB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}} HE |||DDOS DOSDOS SYS }}}}CDOS SYS} 0`BDELV !B }`LVUQ   ]   TU J ]L!T  #      TU  } L ? .  t`GBJ V~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI   0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DELV䌚 !B y` ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -'}LLu DEHILV 9 .l 9 .l  `` s$B VBH(}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL)}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e*}1i1232435ޥ<<8} 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D,}UPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. LOCK F-}ILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES9!&x#!7&p))'&X*./)L''-؆莟.}R'S  vW DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i/}il ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 00}JB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE1}N !B 1L " 1 !BDED:}:1BJ|DE 1DEBH2}I 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L 3} BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWED COPYING---DN:4}# 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B5} 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#6}PdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%7} 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C}//3Hu ξL/L DRIVE TO WRITE DOS FILES TO?WRITING NEW DOS FILESTYPE "Y" TO WRITE DOS TO DRIVE 1.?}D1:DOS.SYSERROR - NOT VERSION 2 FORMAT. , &* բ( 1L `[) 0NΞ 0 L1M) 1@} L BAD LOAD FILELOAD FROM WHAT FILE?) 0 0#B 1L WHAT FILE TO LOCK?) 0 0$B 1L WHAT FILE TO UNLOCK?DUA}P DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO USE PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV. h  ,B}  `)  <0 2 2 0  ,   ,,ޢ* 1L ,K* 1 ~0 0C}FINSERT BOTH DISKS, TYPE RETURNERROR - DRIVES INCOMPATIBLE., 1 ~038  , 1L D}, &*  Lz+, 0 , 1 ~0 + Y,0!,0 ,L+ ,mm  v,"ǭE}0Ξ, 05,Lt+L +,Hh` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNF}INSERT DESTINATION DISK,TYPE RETURN`    `L,8,0( rG}L1(`ߢ) 1* 1 ~0Y`hhL S SL1) 8`NAME OF FILE TO MOVE?- 0 0|DLtH}% A., 1 <0 0 .@L# .BJ 1  DEHIB V L1 ,5 1 <0,L. I} JB|,A#Pd#DE 1 HI BDEHHII 1 B 1 , 1 <0,0Lf- B VJ},A#P, 1 <0 0L#L ߢ) 1* 1 ~0Yj383}mm ݭK}}`8}``|* ? ɛ,`|:(|/ 1L `DESTINATION CANT L}BE DOS.SYS0 0H{ $22Δ $28/L /) $2 Π $2 0 ξM}hAΞB,0 J 1 BޝDEHI,HDE 1HIHIDELSAVE-N}GIVE FILE,START,END(,INIT,RUN)O X0 1`BDEPHI V` X0H 1 L O}0 0 1L0`PLEASE TYPE 1 LETTER,0`hhL <0 1L0LA1 ,;ɛ7,"ɛ:ݦ1ݥP}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{Q}NAME TOO LONG B VL ` L1I H1EӝDL1|mDiE` V0`8d/8 i:"2!22 1R} L ERROR- 128ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uLRS:H` B V`BDEhK)I JLVUVT`H 2` BHIhLV }}~ɛ  ;} 2V} ` RUN"D:MENU*.*"  \`bW}b B V`BDEhK)I JLVUVT`H 2` BHIhLV }}~ɛ  ;} 2.= [ +'0@A0@[0@@20( ( (*( Y} Π-(0(P--(% This Disk is full of ACTION! files,Z--(%marked with the name .ACT. Also thered,,( Z}$are several .DOC documentation filesn++(#you will want to print out, AND forx,,($those of you who do not have ACTION! [}//(&yet (SHAME!), several compiled ACTION!++(#programs (marked .OBJ) that you can))(!run using the DOS BINARY LOA \}D (L)(command.(,,($ Type to begin using this disk!D2:MENUan))(!run using the DOS BINARY LOA W;ACTION! BINARY LOADER, APRIL 1984;WARREN K. SMALL 71076,407;NOTE!!! REQUIRES ATARI DOS 2.0SSET $E=$5000 SET $491=$P^}5000DEFINE DISPLAY_OFF="0", DISPLAY_ON="34", BOOT="1" BYTE KEY=764, COLDST=580, FILE_COUNT=[0], P_} CHOICE,ROW,COLCHAR ARRAY FILE_NAME(25), LOAD_NAME(15)BYTE ARRAY FILES(120), LOGO=[$00$00$00$00$00$P`}00$00$00$00$00$00$00$00$03$F0$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$0F$F0$00$00$00$00$00$0Pa}0$00$00$00$00$00$00$00$00$00$00$00$00$00$00$07$FF$FF$FF$FF$FF$C0$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$0Pb}F$FF$FF$FF$FF$FF$FF$F0$00$00$00$00$00$00$07$D9$80$00$00$00$00$00$00$00$00$F8$0F$FF$FF$FF$FF$FF$FF$FF$FE$00$00$00$00$00$03$1FPc}$80$00$00$00$00$00$00$00$0F$F8$00$00$00$0F$F8$01$FF$FF$FF$FC$00$00$00$00$03$19$80$00$00$00$00$00$00$00$7F$F0$00$00$00$3F$C0Pd}$00$01$FF$FF$FF$F0$00$00$00$03$19$80$00$00$00$00$00$00$07$FF$F0$00$00$00$FF$00$7E$00$00$FF$FF$F8$00$00$00$00$00$00$00$00$00Pe}$00$00$00$7F$FF$E0$00$00$03$FC$01$FF$80$00$00$3F$F0$00$00$00$00$07$E0$00$00$00$00$00$03$FF$FF$C0$7E$00$07$F8$00$FE$00$00$00$Pf}00$00$00$00$00$00$3F$E0$00$00$00$00$00$0F$FF$FF$81$FF$80$1F$E0$00$00$01$F8$00$00$00$00$00$00$00$FF$C0$00$00$00$00$00$3F$F8$Pg}FF$07$FF$80$7F$80$3E$00$1F$FC$03$FF$C0$00$00$00$03$FF$80$00$00$00$00$00$FF$E1$FE$1F$FF$80$FF$00$FE$00$FF$FC$7F$FF$E0$00$00$0Ph}0$1F$FF$00$00$00$00$00$03$FF$87$FC$3F$1F$83$FC$01$FC$07$F0$FF$FF$FF$E7$F0$00$00$7F$FC$00$00$00$00$00$0F$FE$0F$F0$FC$06$07$FPi}8$03$F8$3F$C0$FF$FF$FF$FF$FC$00$03$FF$F0$00$00$00$00$00$3F$F8$3F$E1$F8$00$1F$F0$0F$E0$FF$03$FF$C1$FF$FF$FE$00$0F$FF$80$00$0Pj}0$00$00$00$FF$FF$FF$C7$E0$00$3F$C0$3F$81$FC$0F$F8$07$FF$FF$FC$00$3F$FC$00$00$00$00$0F$FF$FF$FF$FF$8F$C0$00$7F$80$7F$03$F8$3FPk}$80$1F$FE$3F$F8$00$FF$E0$00$00$00$00$1F$FF$FF$FF$FF$1F$00$00$FF$01$FE$0F$C0$FE$00$7F$F0$7F$F0$03$FF$00$00$00$00$00$3F$FF$FFPl}$FF$FE$3E$01$C1$FE$03$F8$1F$83$F8$01$FF$C1$FF$C0$1F$FC$00$00$00$00$00$00$3F$F0$0F$F8$7C$07$C3$FC$0F$F0$3F$87$E0$03$FF$03$FF$Pm}00$FF$F0$00$00$00$00$00$00$FF$C0$1F$F0$7C$3F$87$F8$1F$E0$7F$FF$80$0F$FC$0F$FE$01$FF$80$00$00$00$00$00$03$FF$00$3F$E0$7F$FE$Pn}0F$F0$3F$80$FF$FC$00$3F$F0$3F$F8$0F$FE$00$00$00$00$00$00$0F$FC$00$3F$C0$7F$F8$0F$80$3F$00$FF$F0$00$7F$C0$7F$E0$1F$F8$00$00$0Po}0$00$00$00$3F$F0$00$3F$80$3F$E0$00$00$3E$00$FF$80$00$FF$00$FF$80$FF$C0$00$00$00$00$00$00$FF$C0$00$1F$00$00$00$00$00$00$00$FPp}C$00$00$7E$01$FE$00$FF$00$00$00$00$00$00$03$FF$00$00$00$00$00$00$00$00$00$00$00$00$00$00$01$F0$00$F0$00$00$00$00$00$00$0F$FPq}E$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$1C$00$00$00$00$00$00$00$1F$F8$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00Pr}$00$7F$00$00$00$00$00$00$00$3F$E0$00$00$00$00$01$FF$FF$FF$FF$FF$FF$C0$00$00$00$00$FF$00$00$00$00$00$00$00$7F$80$00$00$00$03Ps}$FF$FF$FF$FF$FF$FF$FF$FF$F0$00$00$00$FE$00$00$00$00$00$00$00$FF$00$00$00$0F$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FC$00$00$1C$00$00$Pt}00$00$00$00$00$FC$00$00$03$FF$FF$F0$00$00$00$00$0F$FF$FF$FF$FF$FF$00$00$00$00$00$00$00$00$00$00$00$01$FF$FF$F0$00$00$00$00$Pu}00$00$00$00$0F$FF$FF$F0$00$00$00$00$00$00$00$00$00$00$0F$FF$E0$00$00$00$00$00$00$00$00$00$00$00$FF$FC$00$00$00$00$00$00$00$Pv}00$00$00$0F$F8$00$00$00$00$00$00$00$00$00$00$00$00$00$FF$00$00$00$00$00$00$00];--------------------------PROC PLOT_CHAR(Pw}BYTE CH) ;PLOT LETTERS ON GR.8 SCREENBYTE CHBASE=756CARD OFFSET,INC,SCREEN=88BYTE POINTER BIT_MAP,CHARSET,SCR CHARSET=CHPx}BASE*256 CH==&127 ;MASK INVERSE VIDEO IF CH>31 AND CH<96 THEN OFFSET=(CH-32)*8 ELSEIF CH>=0 AND CH<32 THEPy}N OFFSET=(CH+64)*8 ELSE OFFSET=CH*8 FI BIT_MAP=CHARSET+OFFSET FOR INC=0 TO 7 DO SCR=SCREEPz}N+COL+(ROW+INC)*40 SCR^=BIT_MAP^ BIT_MAP==+1 ODRETURN ;END PLOT_CHAR() ;----------------------P{}-------- PROC CONVERT_NAME() ;INSERTS PERIOD BETWEEN FILENAME & EXTENSION BYTE INC=[14] WHILE INC>11 DO P|} LOAD_NAME(INC)=LOAD_NAME(INC-1) INC==-1 OD LOAD_NAME(11)='. LOAD_NAME(0)=14RETURN ;END CONVEP}}RT_NAME();------------------------------PROC LOAD_FILE() LOAD_NAME(0)=2 LOAD_NAME(1)='D LOAD_NAME(2)=': SASSIGN(LOAP~}D_NAME,FILES+CHOICE*12,3,13) CONVERT_NAME() CLOSE(1) OPEN(1,LOAD_NAME,4,0) [$4C $15C8] ;ATARI DOS 2.0S P} ;BINARY LOAD ROUTINERETURN ;END LOAD_FILE();------------------------------PROC READ_DIRECTORY()BYTE LOCK,NEXT ZERO(P}FILES,120) CLOSE(3) OPEN(3,"D:*.*",6,0) DO LOCK=GETD(3) NEXT=GETD(3) INPUTMD(3,FILE_NAME,18) P} FILE_NAME(0)=11 IF LOCK='* THEN SCOPY(FILES+FILE_COUNT*12,FILE_NAME) FILE_COUNT==+1 P} IF FILE_COUNT>9 THEN EXIT FI ELSEIF FILE_NAME(1)>='0 AND FILE_NAME(1)<='9 THEN P} EXIT FI OD CLOSE(3)RETURN ;END READ_DIRECTORY();------------------------------PROC DISPLAY_P}CHOICE() BYTE POSCHAR ARRAY LOAD="loading =>" COL=2 ROW=80+CHOICE*8 FOR POS=1 TO LOAD(0) DO PLOT_P}CHAR(LOAD(POS)) COL==+1 ODRETURN ;END DISPLAY_CHOICE() ;------------------------------ PROC DISPLAY_FIP}LES()BYTE FILENUM,POSCHAR ARRAY TITLE="disk directory", PROMPT="select" ROW=64 COL=12 FOR POS=1 TO TITLE(0) P} DO PLOT_CHAR(TITLE(POS)) COL==+1 OD ROW=80 FOR FILENUM=0 TO FILE_COUNT-1 P} DO COL=13 PLOT_CHAR(FILENUM+48) COL==+2 FOR POS=FILENUM*12+1 TO FILENUM*12+11 P} DO PLOT_CHAR(FILES(POS)) COL==+1 OD ROW==+8 P} IF ROW>152 THEN EXIT FI OD COL=16 ROW=176 FOR POS=1 TO PROMPT(0) DO P} PLOT_CHAR(PROMPT(POS)) COL==+1 ODRETURN ;END DISPLAY_FILES();------------------------------PROC RA}M7j (c)1983 Action Computer Services  B JKIHiDiELV`LM} M BLV`L-N)Nl L*N &` Fj`8冨凪` cNEӅӥ} cN`ʆǪƩ Ɛee` tNƦʆǢ &Ɛeǐ N NL_N tN'&&&8儨児}祂*L_N&&*ń8&&L_N N`hihiHHȱȱL7Nc !#3`}L*NJJJJ`H 7Nh`Hȩh NLO NLO MLO MLO MH8}`HhHh OLO BHI V䅠LO L*P MLOԆ ؠPIPP`} _PP MLO PLGP _PLP PLUPH- PP8塪墨hLP PLGP PLUP _PȹP`}텠8堨塪 _P芨Oȩ-`PP "PP棩 Ѥģ0-ģ6000:,80H }& &ehe&eģ0ʥ 8堅塅`$ IP&*i0:0i IPƦ`¢ 护}°ڱ%ȱ%E IPLQ担CS OLQI PLQH QLQ PLQ &B V ONLMȑ}` MLN%B VLOS:RE:RH O RR O Oh)0IRRLO[\ZUVT` RRR}` RLYP RL(P RLLP) ` RLYP N` 0d *Nҥ `2)2}ҩ`p`0)9S`@0)ӈJJJJ)`Ѕ`ȱ`` Sȥ`Hh}ƣĢ`ƥĤ`Ѣ TT`ȱѢĦ`膡`}`ťƤe8夰LjT Ƥ8`ŦeѠe桊LnT@ }}}}}L)WLTW'}This Program Was Written Using ACTION!W}, OLsW(c) 1983/1984 A.C.S.W^ OLW!by Action Computer Services (ACS)W} OLW"No portion of this software may beW O}LW$incorporated within or included withW OL)X#another computer program that is toX OLSXbe sold to other parties in }anyX3 OLX"manner without the express writtenX] OLXpermission of Action ComputerX OLX$Services. Under no circum}stances isX OLYthis copyright notice or othersX OL0Y$contained within this software to beY OLCYremoved.Y: O}LhY Downloaded fromYM OLY ŠŠҢYr OLY (714)772-9671Y O GPLY } Press to continueY O GPЩ SILYLY}Y O GPL2Z% ************** NOTICE **************Z O GPLaZ! Yo}u can order ACTION! and otherZ? OLZ OSS programs fromZk O GPLZ ŠŠҢZ O GPLZ } ACTION!Z OLZ BASIC XLZ OL [ MAC/65Z O GPL?[$ ŠԠΠԠ}Ӣ[ O GPLk[ Call BBS (714) 772-9671[L OL[ Voice (714) 635-2100[u O GPL[ To begin program Pres}s Ԣ[ O GPL[!P.S. Press while program[ OL\ is running for some fun!![ OЩ SIL!\`L5\T}TTTTUTUTUTUTTTTTUTUTUTUUUUUT UTUT UT UT UT UTU}TUTUTUTUTUUUUU` L\ R S S/ԥi)j)8"U#U"Ui U#U}i!U#U"U S8 U0!U18011\0\\\p\\\\ȑO\\}\\!Uȑ U\i\\i\Ȍ\\oL^\\\i\\i\\i\L]\\\}\\\\o N Ue\!Ue\\pL^\\O\\\\\ȑ\8\ \\\}\i\\i\\L[^\\A\\\\1ȑ01ԭ0ԩ!/\#U\"U\\ɁLF_\\$U}\\U\i \\i\\L_\\\\L|_\\ PN\&V\\LN_`L_~_}_~_$UT~_UTT}_}&}VTTiTTT}_)T`L____$UT_UTT_}&VTTiTTT_)=T`L}"` OL-`P:`* OLG` L023T16`= O````LWaLs`S0128`l O````L``$UT}`UTTm`Tm` LP`м`L`L`S0128`ѩ O````L>a`$UT`UTTm`Tm}` LP8````L` UP8````LZ``Ȍ` ``La UP``L`aLaL017a OLa-ge}nerated by Kaleidoscope, an ACTION! programa O O`LaTmUTmUMUTMUTTmUTmUMUTMU}T8UUUUU ULbUmUUmUMUUMUUUmUUmUMUUMUUUUUUMUI  UI}LbTJ֭TJץְLb8օ8ׅ٦ץ _֥ _ץ _֥ _LcTJحTJ٥J֥JץְLceօeׅe؅8}م _8օ8ׅe؅8م _eօ8م8؅ _8օeم8؅ _e؅8ׅ8م} _8؅eׅ8م _`LcUm U Um UM UUM U U UmU UmUMU UMU U8UUUUU} UL`d UmU UmUMU UMU UUmUUmUMUUMUUUUUUUI  UILd UJ֭ UJץְL}d8օ8ׅ٦ץ _֥ _ץ _֥ _Le UJح UJ٥J֥JץְLeeօeׅe؅8م _8օ8ׅ}e؅8م _eօ8م8؅ _8օeم8؅ _e؅8ׅ8م _8؅eׅ8} _`Le EOeee OLe = e Oee Pe eLfLe , initial = e Oee} PLf GPL)fEnter new value: f O )QeePLfQI*L~fe eL{feeee}Lfeeeee eLfeeee`Lf R GPLfEnter new values 0-65535f OLgCR} for current valuef OL&g* for initial valueg O GPL6gaXTTg3 eLQgbXUT򅤠gN eLlgcXUT}􅤠gi eLgaYTTg eLgbYUTg eLgcYUTg eLgPeriodUg }eLh PersistenceUg eLhSlowUh eLGhSymmetry(8 or 12)Uh5 e`Lkh &}W OLyhK:hv O]hVTTTTTTETTT/TTT'UU UčUUUUU}L1j]hL6i \ 2\ghfhfhUghUL1iIL1i afhghLi]hILi a c)bhbhILriUULri}UU abhI LiUULi8UUUU cghfhfhUghULifhghLiL6i (P^h^hILiL1j^}h ^h^hIpLjILjI:Lj `LjLjLiL.j^hIcL.j f]hLh R``hhHiDiELV`LMZ; Atari LOGO; Translated from the BASIC; by Leo Laporte, 10/19/83PROC fuji() BYTE top, bottom, xpos, cntr = [0] BY}TE ARRAY data = [ 37 41 43 45 46 29 48 35 49 37 50 39 51 41 52 43 53 44 54 45 55 46 55 47 56 48 57 48 57 49 58 49} 58 50 59 50 59 51 59 51 59 52 60 52 60 52 60 52 60 52 60 52 60 52 60 ] CARD x color = 1 top = 5 bottom = }61 FOR xpos = 80 TO 84 DO Plot(xpos, top) Drawto(xpos, bottom) Plot(160-xpos, top) Drawto(160-}xpos, bottom) OD FOR xpos = 86 TO 115 DO IF xpos > 90 THEN top = data(cnt}r) cntr ==+ 1 FI bottom = data(cntr) cntr ==+ 1 Plot(xpos, top) Drawto(xpos, bottom) Plo}t(160-xpos, top) Drawto(160-xpos, bottom) ODRETURNPROC letters() BYTE x,y,i CARD cntr=[0] BYTE ARRA}Y atari = [ 49 55 61 76 81 87 93 104 0 48 56 61 76 80 88 93 105 0 47 57 61 76 79 89 93 106 0 46 58 61 76 }78 90 93 107 0 45 50 54 59 67 70 77 82 86 91 93 96 103 108 0 45 49 55 59 67 70 77 81 87 91 93 96 104 108 0 45 }48 56 59 67 70 77 80 88 91 93 96 104 108 0 45 48 56 59 67 70 77 80 88 91 93 96 104 108 0 45 48 56 59 67 70 77 80 88} 91 93 96 104 108 0 45 48 56 59 67 70 77 80 88 91 93 96 103 108 0 45 59 67 70 77 91 93 107 0 45 59 67 70 77 91} 93 106 0 45 59 67 70 77 91 93 105 0 45 59 67 70 77 91 93 104 0 45 48 56 59 67 70 77 80 88 91 93 96 100 105 0} 45 48 56 59 67 70 77 80 88 91 93 96 101 106 0 45 48 56 59 67 70 77 80 88 91 93 96 102 107 0 45 48 56 59 67 70 }77 80 88 91 93 96 103 108 0 45 48 56 59 67 70 77 80 88 91 93 96 104 109 0 45 48 56 59 67 70 77 80 88 91 93 96 105 1}09 0 1 1 ] i = 66 color = 1 DO x = atari(cntr) cntr ==+ 1 IF x = 0 THEN x = 112 y }= 115 Plot(x,i) Drawto(y,i) i ==+ 1 ELSE y = atari(cntr) cntr ==+ 1 IF x = 1 AND y = 1 }THEN EXIT FI Plot(x,i) Drawto(y,i) IF x = 112 THEN i ==+ 1 FI FI ODRETURNPROC delay(BYTE }time) BYTE jifs = 20 jifs = 0 DO UNTIL (jifs >= time) ODRETURNPROC jingle() BYTE ARRAY music= [ 121} 121 121 121 91 96 108 121 0 ] BYTE note, cntr = [0] DO note = music(cntr) cntr ==+ 1 IF note =} 0 THEN EXIT FI SndRst() Delay(2) Sound(0, note, 10, 8) Delay(8) OD Delay(12) SndRst()RETURNPROC sc}roll() BYTE wsync = 54282, vcount = 54283, clr = 53270, ch = 764, cntr, chgclr = [0], i}ncclr, delay DO FOR cntr = 1 TO 4 DO incclr = chgclr FOR delay = 1 TO 9 DO OD DO } wsync = 0 clr = incclr incclr ==+ 1 UNTIL vcount & 128 OD OD chgc}lr ==+ 1 UNTIL ch <> 255 ODRETURNPROC main() Graphics(23) fuji() letters() jingle() scroll()RETUR}Nari LOGO; Translated from the BASIC; by Leo Laporte, 10/19/83PROC fuji() BYTE top, bottom, xpos, cntr = [0] BY #: 60714 Sec. 5 - Beyond BASIC...Sb: #60705-#ACTION 16-Jul-84 22:31:41Fm: RICHARD E. ERNEST 73506,1720To:} SYSOP*R.Brudzynski 74035,1550 (X)DICK, THE PROGRAM IS ON PAGE 130-132THE EXAMPLE NUMBER 4. I SURE HOPE THATYOUR RIGHT,} AND AM GLAD TO KNOW THATTHE MANUAL ISNT ALWAYS RIGHT. I KNOWWHAT THE PROBLEM IS, BUT AM NOT FARENOUGH ALONG TO CORRECT I}T. THANKS, EDDIE ERNEST* Reply: 60763(UA RE T) (D=delete): rr #: 60763 Sec. }5 - Beyond BASIC...Sb: #60714-#ACTION 17-Jul-84 02:25:07Fm: Clinton Parker 70435,625To: RICHARD E. ERNEST 73506,1}720 (X)I have never tried that one myself(look, OSS dreamed up all of thoseexamples), but I do know that at least: m}ode=InputB() ; read mode IF mode='A OR mode='a THEN;anything but A or ais wrong and should read: mode=GetD(7)} IF mode='X OR mode='x THEN ;expand listHopes this helps some. Also, while I'mon it:pg. 63 should say that * and / }are INTonly operatorspg. 123: ex. #1 is wrong, but sorrydon't remember what is wrong off thetop of my head. Comma after} level inTYPE dcl. shouldn't be there fer surr. I think there aqre other problems aswell.pg. 158 should state that Print}Edoesn't handle embedded EOL in strings.pg. 163: PutDE is like PutE and doesnot take the second argument characteras de}scribed, only channel.pg. 166: in InputMD, shouldbe at least max+2 in size since andadditional byte is needed f}or the size(first byte) and for the EOL that CIOputs at the end of the string but whichis not included in the size of the}string by ACTION!.I know that there are more typos, but Igave my list of them along withmy marked up manual to OSS. Thes}e areones I found since then and I hope thatthey will be correct in the nextprinting. - Clint* Reply: 6}0765* RR 60714 +(UA RE T): rr #: 60765 Sec. 5 - Beyond BASIC...Sb: #60763-ACTION 17-Jul-84 02:50:37Fm: RICHAR}D E. ERNEST 73506,1720To: Clinton Parker 70435,625CLINT, THANKS FOR POINTING OUT ALLTHOSE ERRORS. I WOULD HAVE GONE M}ADD IFI USED THOSE AND THEY NOT WORK. EDDIE ERNEST* RR 60714 22:31:41Fm: RICHARD E. ERNEST 73506,1720To:L-\j (c)1983 Action Computer Services  B JKIHiDiELV`Lf\} f\ BLV`HL\\l L\ &` Fj`8冨凪` \EӅӥ} \`ʆǪƩ Ɛee` ]ƦʆǢ &Ɛeǐ -] -]L\ ]'&&&8儨児}祂*L\&&*ń8&&L\ ]`hihiHHȱȱL\c !#3`}L\JJJJ`H \h`Hȩh \L^ \L^ N\L^ V\L^ \\H8}`HhHh ^L^ BHI V䅠L^ L^ f\L^Ԇ ؠPIPP`} ^P V\L^ _L^ ^L_ /_L^H- ^8塪墨hL/_ H_L^ O_L^ ^ȹP`}텠8堨塪 ^芨Oȩ-`PP ^P棩 Ѥģ0-ģ6000:,80H }& &ehe&eģ0ʥ 8堅塅`$ ^&*i0:0i ^Ʀ`¢ 护}°ڱ%ȱ%E ^L`担CS {^L`I H_L`H C`L` _L` &B V ^NLMȑ}` MLN%B VL^S:+aE:0aH u^ 3a4a >^ u^h)0I.a/aL>^[\ZUVT` ia.a/a}` paL^ caL^ iaL^) ` paL^ O]` 0d \ҥ `2)2}ҩ`҅`0)9*b`@0)ӈJJJJ)`Ѕ`ȱ`` ^bȥ`Hh}ƣĢ`ƥĤ`Ѣ b`ȱѢĦ`膡`}`ťƤe8夰Lb Ƥ8`ŦeѠe桊Lcj} H0 ~c?cUcLczcyczc muc*(mvc}c|cycJJ|ce}ciyc)ceci1yc)c}ecicmci1ycsczctc`L0d,d+d+d,d0LVd8+d+d,d,d+d`ȥ@hLnd]d\d}8\dsc -dbdad8]dtc -dddcdddcd \8adidbdjdddcd \edfd8cdad}ddbd O]gdhd\dscL1e\d^d]d_dsc`dLCesc^dtc_d\d`d^d`dLe^didjd0Lveidmedidjdm}fdjdLe_didmgdidjdmhdjd_d^d cLCe`0Le 5aYeXeLe muc*(mvceeei(eeie}Le`8`Le ]eeLf8eeeme cemeeme c8eeeme cemeeme} c8ee8ee ceme8ee c8ee8ee ceme8ee cLg8eeem}e cemeeme kd8eeeme cemeeme kd8ee8ee ceme8e }e kd8ee8ee ceme8ee kd`Lggggggggggg \8宍g }寍ggͣggg0Lhgggg egg0LKhgg \gegeigigLh8gggg } \gegei gig8ggggggLggMg gMgLhgggg eILh }`Lh ee h 5ahčhhhLxi aihhhh HHH ahh }heihhhLieIePI hEhhhiihLj ai eeL ai eeOee}0Li8ehehLieheh/ee0Lj8_ehehL'jehehhhhh0LTjh ahhhh }gLmjh ahhhh gЭILjLjhLiILjLjLi``hJKIHiDiELV`Lf\M;PICTURE.ACT ; This is a GTIA Graphics 9 DEMO;written in ACTION! language.;The program draws a picture of;eithe!}r Abe Lincoln or Mona Lisa.;The speed is approximately 6 times;faster than ATARI 8K BASIC. ; Thanks to Bruce Nelson for !}his;artwork data and the original;BASIC demo. ; -----------------------------; ******** John DeMar *********; ***!}***** 10/29/83 *********; ******** 71066, 337 *********; -----------------------------PROC drawit() BYTE y,z,n !} CARD x CARD POINTER a CARD array ld(48),md(48)ld(0)="9::;;;;<<=<============>===>>>=============>===>====>=>>=>>>@@@@"l"V}BYTE RTCLOK=20, ; addr of sys timer SAVMSCL=88, ; lsb of screen addr SAVMSCH=89, ; msb I,J,TIME ; declare%} variables CARD SCREENPROC BENCH() GRAPHICS(24) RTCLOK=0 SCREEN=SAVMSCL+256*SAVMSCH FOR I=0 TO 31 DO %} FOR J=0 TO 239 DO POKE(SCREEN+J,255) OD SCREEN==+240 OD TIME=RTCLOK GRAPHICS(0) PRINTF(%}"%E %U JIFFIES",TIME)RETURN timer SAVMSCL=88, ; lsb of screen addr SAVMSCH=89, ; msb I,J,TIME ; declare$0100 ; DISASSEMBLY OF COMPILED0110 ; ACTION! SCREEN-FILL0120 ; BENCHMARK (LISTING 7)0140 ;0)}150 ; DEFINE ADDRESS CONSTANTS0160 ; ------------------------0170 RTCLOK = 200180 SAVMSCL = 880190 SAVM)}SCH = 890200 ;0210 ; GLOBAL VARIABLE STORAGE0220 ; -----------------------0230 *= ORIGIN0240 I *=)} *+1 ; reserve 1 byte for0250 J *= *+1 ; each BYTE variable,0260 TIME *= *+10270 SCREEN *= *+2 ; 2 bytes for)} CARDs0280 ;0290 ; PROC BENCH()0300 ; ------------0310 JMP START0320 ;0330 ; If our procedure used )}local variables,0340 ; they would have been stored here.0350 ; That's why the above JMP is included.0360 ;0370 ; )}GRAPHICS(24)0380 ; ------------0390 START0400 LDA #240410 JSR GRAPHICS0420 ;0430 ; RTCLOK=0044) }0 ; --------0450 LDY #00460 STY RTCLOK0470 ;0480 ; SCREEN=SAVMSCL+256*SAVMSCH0490 ; ----)!}----------------------0500 LDA #00510 STA TEMP1+10520 LDA SAVMSCH ; move SAVMSCH into0530 STA TEMP1 ; T)"}EMP10540 LDA # >256 ; msb of multiplier0550 TAX 0560 LDA # <256 ; lsb0570 JSR MULTIPLY0580 STA TEM)#}P40590 TXA ; save (256*SAVMSCH)0600 STA TEMP4+1 ; into TEMP40610 ;0620 CLC 0630 LDA SAVMSCL ; ad)$}d SAVMSCL to0640 ADC TEMP4 ; (256*SAVMSCH) and0650 STA SCREEN ; store in SCREEN0660 LDA #00670 ADC TEM)%}P4+10680 STA SCREEN+10690 ;0700 ; FOR I=0 TO 31 DO0710 ; ----------------0720 LDY #00730 )&}STY I ; init I-loop0740 ILOOP0750 LDA #310760 CMP I ; reached limit yet?0770 BCS JINIT ; no - d)'}o another J-loop0780 JMP GETIME ; else get timing0790 ;0800 ; FOR J=0 TO 239 DO0810 ; --------------)(}---0820 JINIT0830 LDY #00840 STY J ; init J-loop0850 JLOOP0860 LDA #2390870 CMP J ; reached))} limit yet?0880 BCS DOPOKE ; no - poke another byte0890 JMP ADD240 ; else update SCREEN0900 ;0910 ; POK)*}E(SCREEN+J,255)0920 ; ------------------0930 DOPOKE0940 CLC 0950 LDA SCREEN ; add SCREEN to0960 ADC)+} J ; J, and0970 STA TEMP2 ; save in TEMP20980 LDA SCREEN+10990 ADC #01000 STA TEMP2+11010 ;1020),} LDY #2551030 LDX TEMP2+11040 LDA TEMP2 ; poke (SCREEN+J) with1050 JSR POKE ; a 2551060 ;1070 ; )-} OD (for J loop)1080 ; ---------------1090 INC J1100 JMP JLOOP1110 ;1120 ; SCREEN==+2401130).} ; ------------1140 ADD2401150 CLC 1160 LDA SCREEN ; add SCREEN and1170 ADC #240 ; 240; store res)/}ult1180 STA SCREEN ; in SCREEN1190 LDA SCREEN+11200 ADC #01210 STA SCREEN+11220 ;1230 ; OD (fo)0}r I loop)1240 ; ---------------1250 INC I1260 JMP ILOOP1270 ;1280 ; TIME=RTCLOK1290 ; -)1}----------1300 GETIME1310 LDA RTCLOK1320 STA TIME1330 ;1340 ; GRAPHICS(0)1350 ; -----------136)2}0 LDA #01370 JSR GRAPHICS1380 ;1390 ; PRINTF("%E %U JIFFIES",TIME)1400 ; ------------------------)3}----1410 JMP OVER ; skip over in-line string1420 STRING1430 .BYTE 13 ; length of string1440 .BYTE "%E %)4}U JIFFIES"1450 OVER1460 LDA #0 ; msb of TIME1470 STA TEMP3 ; into TEMP31480 LDY TIME ; lsb into Y1)5}490 LDX # >STRING ; msb of string addr1500 LDA # } Print("Level:"):PrintB(level) Print(" Men:"):PrintB(2-miss) color=3 Plot(0,0):Drawto(79,0) -?} Drawto(79,39):Drawto(0,39) Drawto(0,0) color=3 ; Plot obstacles FOR z=1 TO (level+2)*((3-miss-@})*2) DO dx=Rand(77)+1:dy=Rand(37)+1 Plot(dx,dy) OD color=1 -A} ; Plot goals FOR z=1 TO level+2 DO dx=Rand(77)+1:dy=Rand(37)+1 Plot(dx,dy) -B} OD FOR delay=1 TO 20000 DO OD ;Get your starting position DO x=Rand(-C}77)+1:y=Rand(37)+1 z=Locate(x,y) UNTIL z=0 OD color=2:Plot(x,y) ; Giv-D}e you time to find yourself FOR delay=1 TO 600 DO FOR vol=0 TO 15 DO -E} Setcolor(1,vol,vol) SOUND(0,vol*5,10,6) OD OD Setcolor(1,10,12) ;Mai-F}n game loop DO color=2 Plot(x,y) dx=Hstick(0) IF dx<>0 THEN sx=dx:sy=0 FI dy=Vstick(0) -G} IF dy<>0 THEN sy=dy:sx=0 FI x=x+sx:y=y+sy dx=Locate(x,y) FOR vol=1 TO 14 STEP 2 DO -H} Sound(0,vol*10,8,6) FOR delay=1 TO tempo DO OD OD Sndrst() IF dx=0 THEN Color=2:P-I}lot(x,y) FI ; Did you hit a goal? IF dx=1 THEN cnt==+1 color=2:Plot(x,y) -J}score==+(level*4) FOR vol=0 to 15 DO Sound(0,50,10,15-vol) FOR delay=-K}0 to 100 DO OD OD Print("}Score:"):PrintC(score) Print("High:"):PrintCE(high) -L} PrintE("|Wipeout|") Print("Level:"):PrintB(level) Print(" Men:"):PrintB(2-miss) -M} FI ; Did you hit an obstacle? IF dx=2 OR dx=3 THEN FOR vol=0 TO 15 DO Setcolor(1,4,15-v-N}ol) Sound(0,23,0,15-vol) FOR delay=0 TO 2000 DO OD OD flag=1 EXIT FI-O} ; Repeat until all goals are wiped out ; or until you've used three men UNTIL cnt=level+2 OD IF flag -P}THEN level==-1 flag=0 miss==+1 IF miss=3 THEN EXIT FI FI level==+1 OD ; Displa-Q}y score and new high score ; if there was one. Graphics(18) IF score>high THEN high=score Prin-R}tDE(6," YOU HAVE THE NEW") PRINTDE(6," HIGH SCORE!!") PRINTDE(6,"") FI PrintD(6,"your score-S} was: ") PrintCDE(6,score) PrintD(6," last level: ") PrintBDE(6,level+1) PrintDE(6,"") Print-T}DE(6," TO PLAY AGAIN") PrintDE(6," PRESS TRIGGER") WHILE Strig(0)<>0 DO ODODRETURN,dx,dy,cnt,volBYTE x,y,,eMODULE; BOUNCE from ANALOG magazine; Issue #15; in GTIA Mode 11BYTE key=764,x,y,console=53279,attract=77CARD ctrINT A1V},BPROC wallchex() IF x>78 THEN x=78 FI IF y>190 THEN y=190 FI IF x<1 THEN x=1 FI IF y<1 THEN y=1 FIRETURNPROC menu1W}() PrintE("BOUNCE from Analog Issue #15") PrintE(" in GTIA mode 11") PrintF("%E* Use stick to draw walls,%E") Prin1X}tF("* Hold trigger to erase,%E") PrintF("* Hit ESC to clear screen,%E") PrintE("* Hit SPACE to bounce.") PrintE("* ARROWS 1Y} control ball speed") Print("Press any key to continue.") key=255 While key=255 DO OD key=255 RETURNPROC drawscreen()1Z} BYTE curs=752 Graphics (0) curs=1 Menu() Graphics(11) curs=1 SetColor(4,0,4) ;SetColor(4,0,0) Color=15 Plot(0,0) 1[}DrawTo(79,0) DrawTo(79,191) Drawto(0,191) DrawTo(0,0) RETURNPROC flash() color=9 Plot(x,y) FOR ctr=0 to 300 DO OD1\} color=0 Plot(x,y) FOR ctr=0 to 300 DO ODRETURN PROC bounce() BYTE fate=53770,L=[0],PA,PB,G, kolor=[1],time=[31]}2] color=9 A=1 B=1 Plot(x,y) DO IF key=33 THEN key=255 RETURN FI WHILE Locate(x+A,y+B)<15 DO color=kolor1^} Plot(x,y) x==+A y==+B wallchex() color=9 Plot(x,y) L==+1 FOR ctr=0 to 5*time DO OD OD IF1_} key=7 THEN key=255 time==-32 FI Sound(0,L*4+20,10,8) PA=Locate(x+A,y) PB=Locate(x,y+B) FOR ctr=0 to 101`}0 DO OD SndRst() L=0 IF PA>2 AND PB>2 THEN A=-A B=-B ELSEIF PA>2 AND PB<3 THEN A=-A color=2 Plot(x,y)1a} y=y+B color=9 Plot(x,y) ELSEIF PB>2 AND PA<3 THEN B=-B color=2 Plot(x,y) x=x+A color=9 Plot (x,y1b}) ELSEIF fate>127 THEN B=-B ELSE A=-A FI kolor==+1 IF kolor>14 THEN kolor=1 FI attract=0 OD RETURNP1c}ROC draw() BYTE qq drawscreen() x=40 y=95 DO IF key=28 THEN key=255 drawscreen() ELSEIF key=33 THEN 1d} key=255 bounce() FI IF Stick(0)=15 THEN flash() ELSEIF Stick(0)=7 THEN x=x+1 ELSEIF Stick(0)=6 THEN1e} x=x+1 y=y-1 ELSEIF Stick(0)=14 THEN y=y-1 ELSEIF Stick(0)=5 THEN x=x+1 y=y+1 ELSEIF Stick1f}(0)=11 THEN x=x-1 ELSEIF Stick(0)=10 THEN x=x-1 y=y-1 ELSEIF Stick(0)=13 THEN y=y+1 ELSEIF Stic1g}k(0)=9 THEN x=x-1 y=y+1 FI wallchex() IF Strig(0)=0 THEN color=0 flash() ELSE color=151q}B'DOS SYSB*+DUP SYSBUAUTORUN SYSBXMENU B;KAL OBJBFUJI ACTBADDENUM DOCBCIRCLE OBJBEPICTURE ACTBSCRNFILLACTBSCRNFILLSRCB7WIPEOU ACTBUBOUNCE ACTBsASSEM ACTBAASSEMACTDOCB BIGSET ACTBERRTRAP ACTBREALS ACTBREALS DOCB4 FADEACT OBJBD]MENU ACTB1ST ACTBST DOC FI Plot(x,y) IF Stick(0)<>15 THEN qq=Strig(0) Sound(0,(200-x-y)*qq,8+2*qq,4) FOR ctr=0 to 1000 DO OD1r} SndRst() FIODRETURNazine; Issue #15; in GTIA Mode 11BYTE key=764,x,y,console=53279,attract=77CARD ctrINT A0 ; ASSEM.ACT - ACTION! pseudo-assembler; NOT copyrighted at any time;; Programmed by; Allen D. Doum 5t} ; Downloaded from ; THE SOFTWARE CELLAR; (714) 772-9671 ;; compiler must be CASE SENSITVE 5u}to use;assembler commandsDEFINE CODE="[",ENDC="]";single byte instructions DEFINE Brk="$00", Clc="$18",Cld="$D5v}8",Cli="$58", Clv="$B8",Dex="$CA",Dey="$88", Inx="$E8",Iny="$C8",Nop="$EA", Pha="$48",Php="$08",Pla="$685w}", Plp="$28",Rti="$40",Rts="$60", Sec="$38",Sed="$E8",Sei="$78", Tax="$AA",Tay="$A8",Tsx="$BA", T5x}xa="$8A",Txs="$9A",Tya="$98";single mode only instructionsDEFINE Bcc="$90",Bcs="$B0",Beq="$F0", Bmi="$30",Bne="$D05y}",Bpl="$10", Bvc="$50",Bvs="$70",Jsr="$20";other instructions require addressing modes (below)DEFINE Adc="$61+",An5z}d="$21+",Asl="$02+", Bit="$20+",Cmp="$C1+",Cpx="$E0+", Cpy="$C0+",Dec="$C2+",Eor="$41+", Inc="$E2+",Jmp=5{}"$40+",Lda="$A1+", Ldx="$A2+",Ldy="$A0+",Lsr="$42+", Ora="$01+",Rol="$22+",Ror="$62+", Sbc="$E1+",Sta="$5|}81+",Stx="$82+", Sty="$80+";mode operations - use following above DEFINE PZ ="$04", ;page zero PZi="$14", ;5}}page zero indexed PZx="$14", ;page zero index X PZy="$14", ;page zero index Y IN ="$2C", ;indirect 5~} INx="$00", ;X indirect INy="$10", ;Y indirect AB ="$0C", ;absolute ABx="$1C", ;absolute X ABy="5}$18", ;absolute Y (expt LDX) ABi="$1C", ;Ldx absolute Y AC ="$08", ;accumutator IM ="$08", ;immediate (e5}xpt below) IMi="$00" ;immediate (Ldy,Ldx,Cpy,Cpx) at any time;; Programmed by; Allen D. Doum 4;; ASSEM.DOC - d0cumentation for; ASSEM.ACT; NOT copyrighted at any time.;; Programmed by; Allen D.9} Doum ;; Downloaded from ; THE SOFTWARE CELLAR; (714) 772-9671;; ASSEM.ACT is a psuedo-as9}sembler; designed as a coding and; documentation aid for machine; language coding within the; ACTION! programming languag9}e.; Use of ASSEM will require ; knowledge of machine language and; the ACTION! language.; I recommend:; PROGRAMMING T9}HE 6502; by Rodney Zaks (Sybex); IMPORTANT: The ACTION! compiler; should be set to CASE SENSITIVE: Y; ASSEM.ACT wi9}ll NOT work otherwise.; ACTION! compiler will flag ; incorrectly spelled op-codes and; addess codes. It will NOT flag; i9}nvalid combinations or addresses. ; "ASSEM.ACT" is the recommend file; name for the psuedo-assembler.; This documenta9}tion file contains ; "TWO56", an example program. Just; compile this file and RUN. The ; START button will return you to t9}he; ACTION! moniter. ; For the instuctions below you; should print a copy of ASSEM to; refer to. ; Example #1:;1 INC9}LUDE "D1:ASSEM.ACT";2 BYTE a,b,result;3 CODE;4 Lda AB a ;3 1st addend;5 Clc ;1 clear carry;9}6 Adc AB b ;3 2nd addend;7 Sta AB result ;3 store sum;8 ENDC; IN example #1 line one loads ASSEM.; The9} word "CODE" in line three; starts ASSEM; the word "ENDC" in; line eight stops it.; Lines four thru seven contain ; psued9}o-assember instuctions that; the ACTION! compiler will convert; to machine language.; Sytax of ASSEM may be free-form.; 9}However, that misses the point.; The syntax of the example is ; recommended.; (1) Each block of ASSEM code; should 9}be indented within; a CODE - ENDC pair.; (2) Each line should have only; one instuction.; (3) Op-codes should9} appear in a; single column.; (4) Addessing codes (if required); appear after the op code; separated by a9} space.; (5) Arguments follow op-codes and; addressing codes separated by; a space. Arguments can be ; a 9}variable name or a numeric; constant. HEX values may be; used, but negative numbers may; not. Arguments may9} take the; form "x+n" where x is a; numeric constant or a variable; and n is a numeric constant.; (6) Eac9}h instruction should have; a comment which begins with ; the number of bytes used in; the instruction (1,2,9}3); (7) Additional comments may (and; should) follow the byte count.; ADDRESSING notes:; For absolute, page zero,9} and all; indexed and indirect modes an ; ACTION variable name or a numeric ; address may be used as an argument.; POINT9}ER values and array names; should used with caution since the; value of the pointer will be ; change, not where the pointe9}r; points. If an array is to be used; by ASSEM (but not in the ACTION; code itself) it may be defined as; follows:; Exa9}mple #2; BYTE xarray = [ 0 1 2 3 4 5 6 ]; BYTE index ; CODE; Ldx AB index ;3; Lda ABx xarray ;3; ENDC9}; This will load the accumulator with; value from "xarray" pointed to by; "index" as will: Lda AB xarray+n,; where n is a 9}numeric constant. ; Relative addressing is harder to ; use. For forward branches the; of bytes in the instuctions skipped9}; (including neither the target; nor the branch instruction itself); must be the argument. This is the; reason the the by9}te count for each; instruction should be included in; the comments. Backwards branching; should include both the target an9}d; branch instructions in its; argument, however as negative; numbers may not be used, this ; should be presented as the9} one byte; complement of the byte count.; I.E. Bne $F0 instead of Bne -16.; PROGRAMMING NOTES; Case sensitive is requir9}ed since ; the word "AND" is both an ACTION!; reserved word and an assembler ; instruction. Op-codes are all ; standard a9}ssembler instuctions; with the 1st letter capitalized; and the other two lower-case.; Addessing codes are two upper-case;9} letters that may be followed by; a single lower-case modifier. ; Without this distinction the ; instruction "Increment X"9} (Inx); would conflict with the address; code "Indirect X" (INx).; Abberations:; 1. The Ldx instruction has a ; seperat9}e address code for "Absolute; indexed Y" (ABi instead of ABy).; 2. The address code "IMi" is used; for immediate mode on f9}our; instructions (Ldx,Ldy,Cpx,Cpy).; These abberations are due to the ; nature of the 6502 machine; language and of the9}; psuedo-assembler itself.; A single mode (PZi) was included; for page zero indexed since it; covered all uses of that mod9}e.; PZx and PZy have been included for; completeness.; One final note. ASSEM is not by any; means, and is not ment to be9}, a; full assembler. It is an aid to ; documenting and coding of code; blocks. Hopefully future versions; of ASSEM (and o9}f ACTION!) will; allow expanded use.; Example #3 - Compile this file; and RUN.; TWO56 - program to output 256 colors ;9} to the screen at one time.; NOT copyrighted at any time by; Allen D. Doum or ACAOC.INCLUDE "D1:ASSEM.ACT"9} ;psuedo-assemblerMODULEBYTE dlic=$F0, ;DLI counter wsync=$D40A, ;DLI line sync sdmctl=$22F, ;DMA 9}control (shadow) dmactl=$D400, ;DMA control (hardware) nmien=$D40E, ;NMI enable consol=$D01F, ;console 9}buttons colbk=$D01A, ;backgroud color gprior=$26F ;priority & GTIA modes CARD vdslst=$200, ;DLI vector9} vvblkd=$224, ;VBI deferred vector sdlstl=$230, ;display list pointer (shadow) dlist=$D402, ;display l9}ist pointer (hardware) savvbd, ;save area VBI vector savdl ;save area display list pointer 9}BYTE POINTER screen=$8000 ;screen memoryBYTE POINTER dl=$8028 ;display listPROC builddl () ; build display list & scre9}en memory CARD POINTER c BYTE POINTER b BYTE i,i1,j;screen memory (40 bytes!) b=screen FOR i=0 TO 14 STE9}P 2 DO j=i+i LSH 4 b^=j b==+1 b^=j b==+1 i1=i+1 j=i1+i LSH 4 b^=j 9} b==+1 j=i1+i1 LSH 4 b^=j b==+1 b^=j b==+1 OD;display list ;(582 bytes!!) b=d9}l b^=$70 ;24 blank lines b==+1 b^=$70 b==+1 b^=$70 b==+1FOR i=0 TO 15 DO FOR j=0 TO 10 DO b9}^=$4F ;screen memory LMS c=b+1 c^=screen b=c+2 OD b^=$CF ;interupt call + LMS c=b+1 c^=scre9}en b=c+2OD b^=$41 ;VB jump c=b+1 c^=dlRETURNPROC VBI() ;vertical blank interruptCODE Lda IM 0 9} ;2 reset DLI counter Sta PZ dlic ;2 Jmp IN savvbd ;3 exit VBIENDCPROC DLI() ;display list interruptC9}ODE Pha ;1 save accum. Inc PZ dlic ;2 increment counter Lda PZ dlic ;2 Asl AC ;1 mul9}tiply * 16 Asl AC ;1 Asl AC ;1 Asl AC ;1 Sta AB wsync ;3 wait end of line Sta AB9} colbk ;3 change color Pla ;1 restore accum. Rti ;1 exit DLIENDCPROC goscreen() ;sets up 9}game screen sdmctl=0 ;turn off screen dmactl=0 savvbd=vvblkd ;save VBI address savdl=sdlstl ;save displa9}y list gprior=64 ;GTIA mode nmien=192 ;enable interrupts sdlstl=dl ;display list dlist=dl vdsls9}t=DLI ;display list interrupt vvblkd=VBI ;vertical blank interrupt sdmctl=$22 ;turn on screen dmactl=$229}RETURNPROC noscreen() ;restore system screen sdmctl=0 ;turn of screen dmactl=0 gprior=0 ;stop GTIA m9}ode nmien=64 ;stop DLI sdlstl=savdl ;restore display list dlist=savdl vvblkd=savvbd ;vertical blank inte9}rrupt sdmctl=$22 ;turn on screen dmactl=$22RETURN PROC two56() ;main proc builddl() goscreen() DO 9} consol=8 UNTIL consol#7 OD noscreen()RETURNy time.;; Programmed by; Allen D.8K; BIGST.ACT; copyright (c) 1984; by Action Computer Services; All Rights Reserved; This program will create a big=}; global symbol table (max 510; entries, normally 255) when run.; It will boot the cartridge as well,; so you must not ha=}ve anything in; the Editor that you want. It does; not increase the space used to; store variable names. If you want; t=}o increase this as well, you will; have to 'SET $495 = #' in the; monitor after running this program.; # is the number of =}pages you want; to be used for name storage (each; page is 256 bytes, default is 8).; You must use the correct version of=}; Cold below:; version 3.0 ACTION! ROM;PROC Cold=$A323()[]; version s 3.1 to 3.6 ACTION! ROMsPROC Cold=$A326()[]PRO=}C BigSymbolTable() CHAR bigST=$4C4 BYTE EBank=$D503 Zero($480, 255); following statement causes all; variables star=}ting with uppercase; letters to go into one half of the; global symbol table and variables; starting with lowercase letter=}s to; go into other half (255 entries in; each half). If you use mostly; uppercase variable (this includes; PROC/FUNC na=}mes) use 'M. If you; use mostly lowercase variables then; use 'm. bigST = 'a; boot cartridge with big S.T. ; Will n=}ot return. EBank = 0 Cold()RETURN by Action Computer Services; All Rights Reserved; This program will create a big<)MODULE ; CATCH.ACT; copyright (c) 1984; by Action Computer Services; All Rights Reserved; This module provides two PROA}Cs; (Catch and Throw) which can be used; for error trapping (and flow; control, yeck!) in ACTION!. To; use them, you musA}t call the Catch; PROC to indicate where you want; the program to continue when you; call Throw. When throw is called,; A}execution will continue following; the last call to Catch with the; same index as the call to Throw.; Calling Catch is simA}ilar (but not; identical) to TRAP in BASIC. It; differs in that the actual trapping; is generated by the user (by; calliA}ng Throw) and that you can; have multiple Catch'ers active at; one time. Also, you cannot Throw; to a Catcher that is no A}longer ; active (the PROC/FUNC containing; it has RETURN to it's caller). The; Throw procedure tries to check for; this A}error, but it is possible to; fool it into thinking it's OK. If; you want to solve this problem, you; can set 'c_t_sp(indA}ex)' to zero; before you return from the PROC; that contained the Catch(index).; If index is greater than 24 or; if thereA} is no matching Catch index; for the Throw, then Error will be; called with a value of CTERR; (defined below to be 71). IA}f you; setup your own Error procedure and; use Catch and Throw, your error; procedure should handle this error; as well oA}r your program will most; likely "go off the deep end".DEFINE CTERR = "71" BYTE ARRAY c_t_sp(25)=[0 0 0 0 0 0 0 0 0 0 A}0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]BYTE ARRAY c_t_hi(25), c_t_lo(25)PROC Catch(BYTE index) DEFINE TSX="$BA", TXA="$8A", A} LDYA="$AC", STAY="$99", PLA="$68", LDAY="$B9", PHA="$48" IF index>=25 THEN Error(CTERR,0,CTERR)A} FI [ LDYA index PLA STAY c_t_hi PLA STAY c_t_lo TSX TXA STAY c_t_sp LDAY c_t_lo A} PHA LDAY c_t_hi PHA ]RETURNPROC Throw(BYTE index) DEFINE TXS="$9A", PHA="$48", LDYA="$AC", STX="$8A}6", TSX="$BA", TAX="$AA", LDAY="$B9" BYTE sp=$A2; get current stack pointer [ TSX : STX sp ] IF iA}ndex>=25 OR sp+2>c_t_sp(index) THEN Error(CTERR,0,CTERR) FI [ LDYA index LDAY c_t_sp TAX TXS LDA}AY c_t_lo PHA LDAY c_t_hi PHA ]RETURNMODULE ; just in case Rights Reserved; This module provides two PRO@M;;Floating Point Routines for ACTION!;DEFINE REAL="BYTE ARRAY";; Allows declarations like REAL X(6);;; OS Equates folE}low;BYTE CIX=$00F2BYTE POINTER FR0=$D4,FR1=$E0PROC AFP =$D800 () ;OS Ascii--> Fltpt routinePROC FASC=$D8E6 ();OS Fltpt-E}-> ASCII routinePROC FPI =$D9D2 ();OS Fltpt--> IntegerPROC IFP =$D9AA ();OS Integer-->FltptPROC FADD=$DA66 ();OS Fltpt ADDE}PROC FSUB=$DA60 ()PROC FMUL=$DADB ()PROC FDIV=$DB28 ()PROC FLOG=$DECD ()PROC FLOG10=$DED1()PROC FEXP=$DDC0 ();OS e**XPE}ROC FEXP10=$DDCC();OS 10**X;; Routines to INPUT Real Numbers;PROC InputR(REAL NUM)InputS($580) POKEC($F3,$581)CIXE}=0 AFP() MoveBlock(NUM,FR0,6) RETURNPROC InputRD(BYTE channel, REAL NUM)BYTE defaultdefault=devicedevice=chaE}nnelInputR(NUM)device=defaultRETURN;; Routines to PRINT Real Numbers;PROC PrintR(REAL NUM)BYTE POINTER INBUFFMoveE}Block(FR0,NUM,6)FASC()INBUFF=PEEKC($00F3)WHILE INBUFF^<128 DO Put(INBUFF^) INBUFF==+1 ODPut(INBUFF^&127)RETURNPROC PrE}intRE(REAL NUM)PrintR(NUM)PutE()RETURNPROC PrintRD(BYTE channel, REAL NUM)BYTE defaultdefault=devicedevice=channelPrE}intR(NUM)device=defaultRETURNPROC PrintRDE(BYTE channel, REAL NUM)BYTE defaultdefault=devicedevice=channelPrintRE(NUME})device=defaultRETURN;; Routine used to make OS calls;PROC RealOPS(BYTE Operator,REAL Destination,N1,N2)MoveBlock(FE}R0,N1,6)MoveBlock(FR1,N2,6)IF Operator=1 THEN FADD() ELSEIF Operator=2 THEN FSUB() ELSEIF Operator=3 THEN FMUL() ELSEE}IF Operator=4 THEN FDIV() ELSEIF Operator=5 THEN FLOG() ELSEIF Operator=6 THEN FLOG10() ELSEIF Operator=7 THENE} FEXP() ELSEIF Operator=8 THEN FEXP10()FIMoveBlock(Destination,FR0,6)RETURN;; Routines called by user to do; FE}loating Point operations;; PROC RealADD(REAL Destination,N1,N2)RealOPS(1,Destination,N1,N2)RETURNPROC RealSUB(REAL DeE}stination,N1,N2)RealOPS(2,Destination,N1,N2)RETURNPROC RealMUL(REAL Destination,N1,N2)RealOPS(3,Destination,N1,N2)RETURE}NPROC RealDIV(REAL Destination,N1,N2)RealOPS(4,Destination,N1,N2)RETURNPROC LOG(REAL Destination,NUM)RealOPS(5,DestinaE}tion,NUM)RETURNPROC LOG10(REAL Destination,NUM)RealOPS(6,Destination,NUM)RETURNPROC EXP(REAL Destination,NUM)RealOPS(E}7,Destination,NUM)RETURNPROC EXP10(REAL Destination,NUM)RealOPS(8,Destination,NUM)RETURN;; Routine to do Real-to-InteE}ger Conversion;; =ROUND();CARD FUNC ROUND(REAL NUM)MoveBlock(FR0,NUM,6)FPI()RETURN (FR0^)E};; Routine to do Integer-to-Real Conversion;PROC Float(CARD Integer, REAL Result)CARD POINTER PP=FR0P^=IntegerIFP()E}MoveBlock(Result,FR0,6)RETURNION!;DEFINE REAL="BYTE ARRAY";; Allows declarations like REAL X(6);;; OS Equates folD"Floating Point Routines for ACTION!(tm)The purpose of these routines is to add an elementary floating pointcapability tI}o the ACTION! language by providing ACTION! syntax for makingcalls to the floating point ROM on the Atari OS board.These rI}outines should be INCLUDEd in any program needing access to floatingpoint arithmetic. PROC's are provided for the Input and I}Output of floatingpoint numbers, for conversion between floating point and integer (CARD)representations, and for the arithI}metic operations provided in the Atari OSROM.The REAL data type:REAL numbers are stored in BYTE ARRAYs of length 6. The wI}ord REAL has beenDEFINEd to mean "BYTE ARRAY". This means floating point variables can bedeclared using the following syntaI}x: REAL X(6) REAL Y(6),Z(6) ; PROC procname(REAL parameter) ; etc.Input:Two PROCI}'s are provided. Their usage is similar to the library PROC "InputS"used for character strings. PROC InputR() I} and PROC InputRD(BYTE channel,) Example: REAL X(6) InputR(X)Output:Four PROC's are proI}vided. Their usage is similar to the library PROC'sused for output of strings. PROC PrintR() and J} PROC PrintRE() and PROC PrintRD(BYTE channel,) and PROC PrintRDE(BYTE J}channel,) Example: REAL X(6) PrintR(X)Conversion:One PROC and one FUNC are provided. PROC FLOAT(J},) uses the OS IFP routine. On return, the parameter will be set to the floating point repJ}resentation of the CARD parameter. CARD FUNC ROUND() uses the OS FPI routine. The function returns the J}CARD representation of the ROUNDED (not truncated) floating point parameter.Example: CARD X REAL Y(6) J} FLOAT(X,Y) X=ROUND(Y)Arithmetic:Eight PROC's are provided. All require a REAL Destination to receive thereJ}sult, plus at least one other REAL parameter. PROC RealADD(,,) PROC RealSUB(,J},) PROC RealMUL(,,) PROC RealDIV(,,) PROC LOG(,) PROC LOG10(,) PROC EXP(,) PROC EXP10(,)Examples: CARD IJ },J REAL X,Y,Z ;Compute 355/113=3.14159 I=355 J=113 FLOAT(I,X) ;X=355.0 J } FLOAT(J,Y) ;Y=113.0 RealDIV(Z,X,Y) ;Z=X/Y PrintR(Z) ;will print 3.14159292 ; J } ; Input 2 numbers, print sum ; InputR(X) InputR(Y) RealADD(X,X,Y) ;X is destinationJ } as well as addend PrintR(X) ;will print sum X+Y s to add an elementary floating pointcapability tHI;ANZ (c)1983 ACS  B JKIHiDiELV`L_A _A BN}LV`LAAl LA &` Fj`8冨凪` AEӅӥ A`ʆǪN}Ʃ Ɛee` BƦʆǢ &Ɛeǐ &B &BLA B'&&&8儨児祂*LAN}&&*ń&&LA }B`hihiHHȱȱLAc !#3`LAJJJJ`N}H Ah`Hȩh ALC ALC GALC OALC UAH8`HhHN}h |CLC BHI V䅠LC LC _ALCԆ ؠPIPP` CP OALC DLCN} CLD #DLCH- C8塪墨hL#D `L?P "H!??N,}L^P)LyP \H[HL^P)LQ iCLPP:P 4CLPT16 cCWHi]HXHi^H.P.PN-}LQLPS0320Pթ vC6P5P?5P6PLQ^HfH]HeH4P6P5P A2P5P)6P) A3P/P/PLQN.}eHfH:P9PeHieHfHifHN4P9Pm2P:Pi-3PLQ4P 4P/PL?Q4P C5P6PLP CfH^HeH]H.N/}Pi.PLP iC0PWHieHXHifHSHInLhRVHi)VHVHL%RP0PeHieHfHifHLhRVHILHR(0PeHixeHfHifN0}HLhRVHILhR0PeHi}m`HZHYH"mV m_H*(m`HZHȑYHVLYVWэWV!VLYV m_H*(m`HWWWN?}iWWiWVLhYUH UHLYVVLY [PILYLYVLYUHLYMV mN*(mNȱ NUHN@}VN&Z&ZUHL=Z [PIL7ZL=ZUHLZVLX )F ``WL=Z [PIL7ZLibrary files. ACTION! isLSSCROLL_COLORS() BYTE WSYNC=54282, VCOUNT=54283, COLR=53274, COUNTER,CHANGECOLR=[0RB}], INCCOLR, CURSOR=752 OPEN(3,"K:",4,0) KEY=255 DO WHILE KEY=255 DO RC} FOR COUNTER=1 TO 10 DO INCCOLR=CHANGECOLR DO RD} WSYNC=0 COLR=INCCOLR INCCOLR==-1 UNTIL VCOUNT&128 RE} OD OD CHANGECOLR==+1 OD CHOICE=GETD(3) IF CHOICE>47 AND CHOICE MRM}OVEBLOCK($7308,A,8) ;a MOVEBLOCK($7318,CDE,24) ;cde MOVEBLOCK($7338,G,8) ;g MOVEBLOCK($7348,I,8) RN} ;i MOVEBLOCK($7358,KL,16) ;kl MOVEBLOCK($7370,NO,16) ;no MOVEBLOCK($7390,RST,24) ;rst MOVEBLORO}CK($73C8,Y,8) ;yRETURN ;END CHAR_SET();------------------------------PROC PLOT_LOGO()BYTE LINE,BYTCARD START,RP}NEXTLYN,SCREEN=88BYTE POINTER SCR START=12*40+7 ;OFFSET TO START OF LOGO DATA NEXTLYN=40 ;INC TO NEXT LINE FOR LIRQ}NE=0 TO 35 DO FOR BYT=0 TO 25 DO IF LOGO(LINE*26+BYT)<>0 THEN SCR=SCREEN+STARTRR}+BYT SCR^=LOGO(LINE*26+BYT)&$55 FI OD START==+NEXTLYN ODRETURN ;END PLOTRS}_LOGO();------------------------------PROC MAIN()BYTE DMA=559 DEVICE=0 POKEC($9B,$600) COLDST=BOOT ;COLDSTART ON RRT}ESET GRAPHICS(24) DMA=DISPLAY_OFF CHAR_SET() COLOR=1 SETCOLOR(1,1,0) SETCOLOR(2,1,12) SETCOLOR(4,8,5)READ_DIRECTORY()RU}PLOT_LOGO()DISPLAY_FILES() DMA=DISPLAY_ONDO SCROLL_COLORS() DISPLAY_CHOICE() LOAD_FILE()OD$E=$5000 SET $491=$Pfd(1)="9:;;;<<<<<=============>==;<<::=>>========>===>>=>>>>==>>>>>@@@@"ld(2)=":;<<<<<<<<=======>======:754533569<=>========="W}>==>>>>>>>>>>>@@@@"ld(3)=":;<<<;<;<<<=====>>==>=;5444543333337;<==>>>>=>===>>>>>>>>>>=@@@@"ld(4)=":;;;;;;<<<<<=====>=><9454"X}5555333333337;=>?>>>>>>>>?>>>>>>>==@@@@"ld(5)=":;;;;;<=<<=<====>>>=6444454443333333337:>>>>>????>??>>>>>>>>@@@@"ld(6)=":;:;"Y};;<<<<==<<==>>>8444455534333333232347:=>?>?>??>?>>>>>>>>@@@@"ld(7)=":;:;;;<<<<===<===>944444443343335::75233359?>>>>>>>>>"Z}>>>>@@@@"ld(8)="::;;;;<<<<<<=<<==954444344434338?@@@@7233457<>>>>>>=>>>>>>>>@@@@"ld(9)=":;;;;;;;;;;<<====5434444444345:@@@@"[}@@@4453245=>>>=>>>>>>>>>>@@@@"ld(10)=":;:;;;<;;;<=<<==144343334346:?@@@@@@@@>2322359>>>>>=>>>>>>>?@@@@"ld(11)=";;;;;;;<<<<<"\}=<=<54444334479=?@@@@@@@@@@8222355=>>>>>>>>>>>>>@@@@"ld(12)=";;;;;;;;;<<<<<<:448444448>?@@@@@@@@@@@@>3221378==>>>>>>>>>>>@@@"]}@"ld(13)=";;;;;;;;;;<<<<<537744475>@@@@@@@@@@@@@@?:341275=>===>>=>>>>?@@@@"ld(14)=";;;;;;;;;;;;<<:44:743579??@@@@@@@@@????>"^}=531154<>=>=>=>=>>>>@@@@"ld(15)=";;;:::;;;;;;;;936:;8548?????@?@????????=<842152<>>=======>=>@@@@"ld(16)=":;;;:::;;:;:::83:"_};<<:=>>???????????????<=<52112:=>=========>@@@@"ld(17)=":;;;;;::::::96549;<<=>>>>>>>????>>?????==<42111:===========>?@@@"ld"`}(18)=":;:;;;:::9:984459;==>?>>>>>>?????>>>?>>::9432115=======>===>>@@@"ld(19)=":;:;::::::9:64449;<=>?>>>>>????=>>>>>>=989321"a}101;=====>======@@@"ld(20)=":;;::;:::::866438<>>>>?>>=>><9756;==>=<8664211113;========>>>@@@"ld(21)=":;;::::::::7833479:<<="b}>=><:6333357<>==<743224<:212=========>>@@@"ld(22)="::;;:;:;::;:7353446548;;=:633233377<==<53223<52342;========>>@@@"ld(23)="c}"::;:::;::;;;956333333349>;6432386249=><5222::53322<=<<<<<==>=@@@"ld(24)="::;:::;:;;;;;96533344339=<;432246754;=<82237;;8563"d}<<<=<======@@@"ld(25)="9::;;:;;;;;;;<;73334545>=;<974569;:8:<=;43653;;;94;<<<<====>>@@@"ld(26)="99::::::::::;;;;434566;==<<"e}<7679:<<<<<<<54<<39==75;;;<<<<===>@@@"ld(27)="999999::::9:9:::556675<=<<<<:8:;;<<=<<<<52<==5==23<;;<<<<<===?@@"ld(28)="8999"f}999::9998999574559<<<;<<<;;;<<<<<;;824;<=;<:14<;;<;<<<===??@"ld(29)="8898999998888888589:9:<<;;;;<<;;<<<<;:8214:;<<;13<<;;;;"g}<;<<<??"ld(33)="778778887"i}7887878862312211227;:498655575328113488:;::;;;;;;;<<>??"ld(34)="777787777777787888123211269:;;:89858786536113689:::::::;;;;<"j}<>??"ld(35)="7777777777787778884142135::::::959698:55662179:::::::::;;;;<<=>?"ld(36)="66777777777778878871222699998868:9899"k}:64452579:;::9::::::;;;;=>?"ld(37)="67777777777777778861111154578983698::84433399:::::::::::::;;<<>?"ld(38)="77776776777778"l}877761212489887589687:983452599:::::::::::::;;;<>?"ld(39)="666666667777778777722211122248::969::5322489::::::::::::;:;;;<>?""m}ld(40)="666666667777778788611333689999:86677922117899999:::::;::;:;;;;>?"ld(41)="666666666777777777611114578874621225321119"n}499:9::::::::;;;;;;;>?"ld(42)="66666666677777777761011223432432211211113;68:::::::::;::;:;;;;>?"ld(43)="6666666677777777777"o}1111111211121111111126<43:::::::::;:::;;;;;>?"ld(44)="66666666667777777872001110111111111111168<219::::::::::::;;;;;>?"ld(4"p}5)="566666666677777778861010001111111111117;;:111::::::::::::;;;:;>?"ld(46)="66666666667777777888610000111111110129;;<21116:"q}::::::::;;;;;;;>?"ld(47)="566666666667777777888813000111100114;;;;<211118:;:::::::;;;;;;>?"ld(48)="566666666667777777888257"r}31000001137;;;;<921111126::;:;;;;;;;;;>?"md(0)="@@@@@3444444444554555656566565655666666666665666666655676665@@@@"md(1)="@"s}@@@@5566666666666666777777776433456778877777776666666778776@@@@"md(2)="@@@@@766777777777777888888853321123247889887988888778"t}8789987@@@@"md(3)="@@@@@778898887888888899:9932222222322379:998:999888888889998@@@@"md(4)="@@@@@78989898889999989::92212222"u}223432389:9::9:999999999:998@@@@"md(5)="@@@@@8899999:99999999:::2122222478897525:::::9::9999999::::8@@@@"md(6)="@@@@@989999"v}999:99:::::;311112248:;<<<:81::;;;:::::9:99::9::9@@@@"md(7)="@@@@@99:9:9::9:9:::::;911111247:;<<<<=<54::;<;;;:::::::::::9@@@"w}@"md(8)="@@@@@9:::::::::;:::::;111111357:<<<<<<<718;:;;;<;:::::;;:9:9@@@@"md(9)="@@@@@::9;::9:::99988681111125799;<<<;;;716"x};:;;;;;;:;::;;89:8@@@@"md(10)="@@@@@99;::::::6986564511112389::;<<<<;;9128;<;<:;::99::96786@@@@"md(11)="@@@@@78:;:;:::47555"y}64311111489:;<;<<<<<9928;<;<;;96798846733@@@@"md(12)="@@@@@778:;;::7575564221111246567758<;6780259;:<:745565656523@@@@"md(1"z}3)="@@@@@7789:9::5435433311112268533:64=83740238:9<4543254465632@@@@"md(14)="@@@@@5788999:533443331111226;<99<;6<:7:99127769"{}7354254624742@@@@"md(15)="@@@@@67888887333354321111125:<==<<9<;<<<11342752223343353333@@@@"md(16)="@@@@@6678787423334444111"|}11249;==<;:;;<<;12333742212325133233@@@@"md(17)="@@@@@6666777666666545111212479<<<;9;<<;:13133333213455111221@@@@"md(18)="@"}}@@@@45464455333343421111224689<<867:;:712223233334542121410@@@@"md(19)="@@@@@33544333322344431122135788:::54<<96112233232345"~}22223510@@@@"md(20)="@@@@@3455654223334442112123467:;:66887:313233333223322234411@@@@"md(21)="@@@@@343465443333444311213245"}79;:988:;8112234332222333333311@@@@"md(22)="@@@@@333333333333435421222345668::;;;81112244433332322222211@@@@"md(23)="@@@@@3"}444433434665443212233345568:;=;21212245333222232232011@@@@"md(24)="@@@@@3444545544554443222333444565666211112258643222232330"}111@@@@"md(25)="@@@@@4554455533333333212234455444442122112268775553333321011@@@@"md(26)="@@@@@54444544345333322122256764456"}93211122367777665433200011@@@@"md(27)="@@@@@64556555555643312122458877679;3221222568777777554211011@@@@"md(28)="@@@@@554678"}7675432222222237899989;83311222336665752334433111@@@@"md(29)="@@@@@45547:733322112232334::::9:::98322111211222132245432113@@"}@@"md(30)="@@@@@566559755432222242326:;:;;;:;;;962111122221152323432112@@@@"md(31)="@@@@@5454678::854323333535:;;;;;;;<;;;8"}222121323224432331112@@@@"md(32)="@@@@@5655687:9743223223545:;;<<<;<<<<<;321013213213654442013@@@@"md(33)="@@@@@56757867764"}22332235449;;<<<<<<=<;;932013223332565653222@@@@"md(34)="@@@@@7776688776434365224557;<<<=<==<==<:65201223333566872222@@@@"m"}d(35)="@@@@@9:98786644445687544468;;<<========<99311024335688332111@@@@"md(36)="@@@@@67655454444458:;976456;;<====>=====<;60"}2111445752132222@@@@"md(37)="@@@@@88533443444333558:9688;;===>>>>==>>==611111474433341432@@@@"md(38)="@@@@@9555354444543333"}455879;==>>>?>?>>>>>:621110177544443222@@@@"md(39)="@@@@@76665544445433333533468;>??????@>>:87752211115567666533@@@@"md(40)"}="@@@@@768873345444454434334366:>@@@><997977663221100345555553@@@@"md(41)="@@@@@75765344644554444443334476898898885646653111"}10356667553@@@@"md(42)="@@@@@7755433264644554454443444655678798465676211110576667431@@@@"md(43)="@@@@@577743334566575545533"}4344554569877525344211000244444430@@@@"md(44)="@@@@@6997434446666665654434344456536775534244421100233323330@@@@"md(45)="@@@"}@@6875544335677675754444445545545554533223311100015545440@@@@"md(46)="@@@@@7986644344456786564444355545465544432221221110036"}755651@@@@"md(47)="@@@@@8986544344555787664544455656465445322311221210007766553@@@@"md(48)="@@@@@89776443445446687644445555"}65455444333211122110003453333@@@@" n=1 WHILE n>0 DO Graphics(0) PrintE("GTIA Gra"}phics 9 DEMO") Print(" 1-LINCOLN 2-MONA LISA >") n=InputI() IF n<1 OR n>2 THEN PrintE("`Enter 1 or 2 !") FOR x"}=1 to 32767 DO OD drawit() FI Graphics(9) SetColor(4,2,0); Poke($D40E,0) ;Optional for speed-; Poke($22F,"}0) ;up w/blank screen. FOR y=24 TO 162 STEP 3 DO IF n=1 THEN a=ld((y-21)/3) ELSE a=md((y-24)/3) FI "} a=a+64 FOR x=10 TO 70 DO a=a-1 z=a^ IF z=64 THEN z=63 FI color = z Plot(x,y):Pl"}ot(x,y+1) Plot(x,y+2) OD OD; Poke($D40E,$40) ;Optional for speed-; Poke($22F,$22) ;up w/blank screen. "}n=255 WHILE n=255 DO n=Peek(764) OD Poke(764,255) ODRETURN;-----------------------------icture of;eithe mMODULE ; ST.ACT; Symbol table lister for ACTION!; compiler. Lists local variables; per PROC/FUNC and globals at end; oV}f compilation.; copyright 1983; by Action Computer Services; All Rights Reserved; version 1.0; last modified November V}6, 1983; user options:;; change Open call in SPLEnd to get; listing to go to diskDEFINE STRING = "CHAR ARRAY"DEFINE V}JMP = "$4C" ; JMP addr16TYPE INSTR=[BYTE op CARD addr]INSTR Segvec=$4C6, DCLvec=$4D4INSTR SPLvec=$4DDTYPE ENTRY =[; SV}TRING name(?) BYTE vtype CARD adr BYTE numargs; BYTE ARRAY argTypes(8)]BYTE oldDevice, curBank=$4C9BYTE pf, Zop=$8V}A, tZopCARD curproc=$8EENTRY POINTER eCHAR ARRAY cmdLine(0)=$590BYTE ARRAY bank(0)=$D500BYTE ARRAY zpage(32), temps(16)V}PROC PrintH(CARD v) PrintF("%H", v)RETURNPROC BaseType(BYTE et) et = et & $7 IF et=1 THEN Print("CHAR") ELV}SEIF et=2 THEN Print("BYTE") ELSEIF et=3 THEN Print("INT") ELSEIF et=4 THEN Print("CARD") FIRETURNBYTE FUNC GetTypeV}(BYTE et) CHAR ch BYTE pfFlag, t, oldT ENTRY POINTER next STRING name pfFlag = 0 IF et=39 THEN ; user type V}Print("TYPE=") name = e + 3 next = name + name(0) + 1 ch = '[ oldT = 0 WHILE next.vtype<128 DO et =V} next.vtype & $7 If et=0 THEN EXIT FI IF et=oldT THEN Print(", ") ELSE Put(ch) BaseV}Type(et) Put(' ) FI oldT = et Print(name) ch = ' name = next + 3 next = name + nV}ame(0) + 1 OD IF ch='[ THEN Put('[) FI Put(']) RETURN(0) FI IF et=27 THEN ; DEFINE PrintF("DEFINE = V}""%S""", e+3) RETURN(0) FI; get basic type BaseType(et); only record vars less than 128 IF et<128 THEN ; recordV} IF (et&7)=0 THEN Print("RECORD") IF (et&8)=8 THEN Print(" POINTER") FI ELSE Print(" V}record field") FI RETURN(0) FI IF et&$10 THEN ; ARRAY Print(" ARRAY") ELSEIF et&$40 THEN ; V}PROC or FUNC pfFlag = 1 IF (et&$F7)=$C0 THEN ; PROC Print("PROC") ELSE ; FUNC Print(" FUNC") FI V} FIRETURN(pfFlag)PROC PrintEntry(STRING n) DEFINE MAX = "15" BYTE i, et STRING name(MAX+1), t BYTE ARRAY argTypesV}; get the name SetBlock(name+1, MAX, '.) SCopyS(name, n, 1, MAX) name(0) = MAX; get address of entry info e = n +V} n(0) + 1 et = e.vtype IF et=$88 THEN RETURN FI ; undeclared PrintF("%S ",name) IF et=27 THEN ; DEFINE PrintV}(" ") ELSE PrintH(e.adr) FI Put(' ) IF GetType(et) THEN ; PROC or FUNC Put('() argTypes = e + 3 V}t="" FOR i = 1 TO e.numargs DO Print(t) GetType(argTypes(i)%$80) t = ", " OD Put(')) FI PuV}tE()RETURNPROC DumpST(CARD POINTER base) CARD loc, i BYTE low=loc, high=loc+1, ibest BYTE ARRAY stLow, stHigh, flagV}s(256) STRING best, worst(0)="|" Zero(flags, 256) stHigh = base^ stLow = stHigh + 256 DO best = worst FORV} i = 0 TO 255 DO high = stHigh(i) IF high#0 AND flags(i)=0 THEN low = stLow(i) IF SCompare(loc, bV}est)<0 THEN best = loc ibest = i FI FI OD IF best=worst THEN EXIT FI flags(V}ibest) = 1 PrintEntry(best) ODRETURNPROC Save(); save state of variables used by; both compiler and library routiV}nes bank(0) = 0 ; init library routines tZop = Zop MoveBlock(zpage, $B0, $1B) ; to $CA MoveBlock(temps, $5F0, 16) V} device = 5RETURNPROC Restore(); restore state of variables used by; both compiler and library routines Zop = tZop V} MoveBlock($B0, zpage, $1B) ; to $CA MoveBlock($5F0, temps, 16); device = oldDevice bank(curBank) = 0RETURNPROC SegV}End() Save() IF pf THEN ; print locals PrintF("%ELocal declarations for %S:%E", curproc) DumpST($B3) ELSE pV}f = 1 FI Restore()RETURNBYTE FUNC DclEnd() BYTE token=$C2 CARD addr1, addr2 DEFINE PLA = "$68", STA =V} "$8D", LDA = "$AD", PHA = "$48"; find out where we came from [ PLA STA addr1 PLA STV}A addr1+1 PLA STA addr2 PLA STA addr2+1 PHA LDA addr2 PHA LDA addr1+1 PHA LDA addr1 V} PHA ] IF addr2<$B000 THEN ; new MODULE SegEnd() pf = 0 FIRETURN(token)PROC SPL() ; dummy proc for call bV}elowPROC SPLEnd() BYTE nxttoken=$D3 CARD codeBase=$491, codeSize=$493 CARD nxtaddr=$C9 STRING inbuf(0)=$5C8, nameV} DEFINE PLA = "$68", STA = "$8D"; oldDevice = device Save() Close(5) Open(5, "P:", 8) IF nxttoken=30 THV}EN ; command line name = nxtaddr ELSE ; editor buffer name = inbuf FI PrintF("%E%ESymbol Table for %S%E%E", namV}e) pf = 0 ; no proc decl yet; JSR for return so that we come; back here after compilation [ PLA STA SPL+1V} PLA STA SPL+2 ] SPL = SPL + 1 ; get right address Restore() SPL() Save() IF pf THEN ; print locals V}PrintF("%ELocal declarations for %S:%E", curproc) DumpST($B3) FI PrintF("%E%EGlobal declarations:%E%E") DumpST($B1V}) PrintF("%E%ECode base = %H, code size = %U%E", codeBase, codeSize) Close(5) Restore()RETURN; only codeV} generated before Init is; allocated space. Init will be; garbage collected (well kind of).PROC Init() CARD codeBlock,V} bsize, csize, nBlock CARD POINTER cur, next CARD ARRAY codeBase=$491; link in our routines Segvec.op = JMP Segvec.V}addr = SegEnd Dclvec.op = JMP Dclvec.addr = DclEnd SPLvec.op = JMP SPLvec.addr = SPLEnd; allocate our routine so itV} won't; go away. codeBlock = codeBase^ - 4 next = $80 ; AFbase DO cur = next next = next^ UNTIL next=0 OR neV}xt=codeBlock OD IF next=0 THEN PutE() Put($FD) PrintE("I can't allocate space for your code") PrintE("You beV}tter Boot and try again!") RETURN FI; assume we can split block csize = @codeBlock-codeBlock nBlock = next^ bsiV}ze = next(1) - csize next = @codeBlock cur^ = next next^ = nBlock next(1) = bsize codeBase^ = @codeBlockRETURN oT{ Using ST.ACT is very simple. All youneed to do is: 1) boot ACTION! using Boot command in monitor. 2) RUN "ST.ACZ}T" from monitor 3) make sure you have the printer on before you compile another program.The symbol table lisZ}ting will be sent to the device specified in theOpen routine in SPLEnd in ST.ACT.This is initially the printer put youcanZ} change it to another device ifyou want to.Note that addresses given for TYPEdeclarations are the size of thattype in byZ}tes. The address field fortype fields is the byte offset withinthat type. Boot command in monitor. 2) RUN "ST.ACXN