@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@P1  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 }}}rr}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 2.?}D2: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- 165ɛ+,' 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 D4uEiͩkΩ͙kCop5j`j {j`Hi͝Νh`V}L"SYS.ORTNI:D"NUR:0,0,2.ES:?:1,257 EKOP:0.RG:0,56 EKOP p5j`j {j`Hi͝Νh`B+,|DLISADDRADDRADDLNGTHLNGTHAUXERIOC X} """"堢33묠 Y} +@%@'AY'?%6-F:A`,%F:Aa,$AV? Z}?6-F:%@,%6-F:%@,?6-%+$AV,&@(K6-P:'AV,$6-&$AVK [}236-@6-@0'6-36-@<, A,@ D:PICTURE.SYSFLA H \}A I'A R3A S?A FL›P4!6-?:C:hhhLV,<$@,4Z&6-F: ]}A E,&@Ad+AY@4+n70@70@@ ^}x*% D:SCREEN.SYS*) +) ERROR ON DISK FILE OPEN D:INTRO.SYS {F  `}a}b}???c}`?`? ?d} ? ? e}?   f} g} h}8?0??p?i}`?8j}?0?0?`k}`l}m}n}? ???`o}`8?`0?`p}q}r}s}t}u}jv}ZjjZjjڪjjw}ZjjZjjjjx}jjjjjjjy}jjjjjjz}jjjjjj{}jjjj|}jjj}}jjjj~}jjj}jjjjj}jjjjjjj}jjjjjj}jjjjjj}jjjjjj}jZjjZj֪jZj}jZjjZj}}}}UUUUUUUUUUUUUUUUUUUUUU@UUUUUUUUUUUUUUUUUUUUUU@UUUUUUUUUUUUUUUUUUUUUU@}@@@}@@@}@@|?g  ?@l`c}3w gg 3``c3 gg 3@co `` @cc`sg}`<<<>>0f<b<0~<<`ffffff>< f<~f|>`~ff|>`>f fbF>ff|`Ff0|f``<<`<`~8<~|?`|>|<0l?>|~}|0E)*QQVAADDOFFSEVVDLISLINELINEX} ;@, B$@e@$NOISY I/O ONdLINE SPECS HERE}g70@@70@@@n%6-@6-@% Bs%6-@6-@% B}x%6-@6-@% BAR@9-@9  page six utility disk C-}@C((B-@B (}>-@> $ by matt loveless and mike eggersB-@ B((}B-@B((````````````````````````````````````````   F & press to enter basicF }J ( PRESS FOR DESCRIPTIONSJ  P +  press to }run demo programsP  1AU6-@&1-@@ oF:B2y,"@}"+<0@HAVl copyright 1982 SYNAPSE SOFTWAREo"F:B2y,"@" A}F:B2y,"@"+4AR@7(Q0@@k0@@wAV% D:P}6MENU.SYS  A%D:TXTCOLRS.DMO0u#AY#DISPLAY OFF1uJF:@,!A(5@F:@},&A(JB7tF:@,5u%6-F:A4,%AV$F:A5,G6-F:A@,%AV$F:AA,V6-F:A,o'@}"P:'@,A&@:uK6-F:A,%@*6-AV$&;6-P:'AV,K6-&AV$Duo%@}%@3%@G%@@[%@o%@@u,,6."}fffffff>urr67B:,%@,.Z`<|fl0fF68of;p88pf< 8vr}r67B:,%@,.Z 0 ~~`0 0`TDDTDDTDTDDTTD@@DTPDDDDPT@T@@T$wrr67B:,%@},.ZT@T@@@T@@DDTDDTDDDTTDDTDDPPDD@@@@@TDTTDDDDTTTDDTDDDDTTDDT@@Twrr67B:,%@,.ZDD}DDPTDDTPDT@TTTDDDDDTDDDDTDDDTTDDTTDDDTT@T@`0wrr67B:,%@,.Z }6cUUUUUUUUPPPP8pp8Pxrr67B:,%@,.Z** } ** UUwwUUxrr67B:,%@,.Z<~~~<}UUUUy0067B:,%@,.0~0 ~ *y 67B:,%@,.}>:@4,y 67B:,%@,.>:@4,y67B:,%@,.*y 67B:,%@,.>:@4,y 67B:,%@,.>:@}4, y67B:,%@,.*!y 67B:,%@,.>:@4,"y67B:,%@,.*#y 67B:,%@,.>:@4,%y} 67B:,%@,.>:@4,&y67B:,%@,.**'y 67B:,%@,.>:@4,(y67B:,%@,. )y 67B:},%@,.>:@4,*y67B:,%@,.*(+y 67B:,%@,.>:@4,-y 67B:,%@,.>:@4,/y 67B:},%@,.>:@4,1y 67B:,%@,.>:@4,2y..67B:,%@,.(* * ** * * 3y 67B:,%@,.>:@}4,5y 67B:,%@,.>:@4,6y67B:,%@,.*7y 67B:,%@,.>:@4,9y 67B:,%@,.>:@4},:y67B:,%@,.*;y 67B:,%@,.>:@4,=y 67B:,%@,.>:@4,?y 67B:,%@,.>:@4,}@y67B:,%@,.*|y 67B:,%@,.*}y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,}y67B:,%@,.*y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y67B:,%@,.((y 67}B:,%@,.>:@4,y 67B:,%@,.>:@4,y""67B:,%@,. *y 67B:,%@,.>:@4,y}67B:,%@,.**y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y6}7B:,%@,.y 67B:,%@,.>:@4,y67B:,%@,.***y 67B:,%@,.>:@4,y 67B:,%}@,.>:@4,y67B:,%@,.*y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y 67B:,%@},.>:@4,y 67B:,%@,.>:@4,y67B:,%@,.**y 67B:,%@,.>:@4,y 67B:,%@},.>:@4,y67B:,%@,.* *y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y 67B:,%@},.>:@4,y 67B:,%@,.>:@4,y67B:,%@,.(*y 67B:,%@,.>:@4,y 67B:,%@},.>:@4,y67B:,%@,.*(y 67B:,%@,.>:@4,y''67B:,%@,.* ***y67B:,%}@,.y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y 67B:,%@},.>:@4,y 67B:,%@,.>:@4,y67B:,%@,.*y 67B:,%@,.>:@4,y 67B:,%@},.>:@4,y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y67B:,%@,.*y 67B:,%@},.>:@4,y 67B:,%@,.>:@4,y 67B:,%@,.>:@4,y67B:,%@,.**y 67B:,%@,}.>:@4,y67B:,%@,.y 67B:,%@,.>:@4,y67B:,%@,.**y 67B:,%@,.>:@4},y67B:,%@,.y 67B:,%@,.>:@4,z 67B:,%@,.>:@4,zMM67B:,%@,.5**} *<~~<8x8zH +AV+AY@4E0@H$Dz3%6}-F:A`,%F:Aa,$AV36-%@NzR;+ ,%+!@#,%+ ,%+!@#,%+!,G6-@J$RERRO}RXz- -"#@h- B@bz%%@@lz 6-$ D:SCREEN.SYSr KE- }AY-@@dC-C((}iAR@nC-@C((xC-@C(}(0(0(%ˠ-IMPROVES JOYSTICK READING0(0(%-BASIC COMMAN}DS TYPED FAST0(0(%-A SYSTEM STATUS INDICATOR.(.(#-TWO VERSIONS OF BANNERS/(/($}-SLOW OR PAUSE LISTINGS /(/($Š-ENHANCES CONSOLE BUTTONS/(/($̠-ALLOWS AND/OR FROM BASIC})()(Ӡ-BASIC DOS COMMANDS/(/($-SHORT TUNES FOR PROGRAMS?(-("-USED ON THIS MEN}U ?AY@4,A-@@#A(&press a number for a brief descriptionI@.@@}K:;)@I6-&@H% )!@ %6- (}AY" A}OOA A0A@APA`ApAAA))(! ˠҠ^}( ( ((5(!WHEN THIS ROUTINE IS RUNNING, THE^($JOYSTICK RETURNS A NUMBER WHICH WILLn*("ALLOW THE PROGRAMMER TO USE} SIMPLER(#ΠؠϮ INSTRUCTIONS WHICH AREn(MUCH EASIER TO PROGRAM.V(/($THE ROUTINE COMES IN THE FORMATV(}"WHICH WILL ALLOW YOU TO INSTALL ITN+(#IN YOUR BASIC PROGRAM WITH A SIMPLEN( COMMAND. THE SOURCE CODE$Z+(#LIS}TING IS WELL DOCUMENTED TO ALLOWN(EASY ACCESS TO THE PROGRAMMINGZ(METHOD.l B))(! ˠ}^( ( ((5(!WHEN THIS ROUTINE IS RUNNING, YOU^($WILL BE ABLE TO ENTER CERTAIN BASIC o*("COMMANDS WITH A} SIMPLE KEY PRESS T(%COMBINATION. FOR EXAMPLE, IF YOU WANTo(TO GO TO THE DOS MENU:L()(.. press + and } L(.. quicktyp will type R*(".. quicktyp will also press -(R( THERE ARE 13 OTHER QUICKTYP  O}+(#COMMANDS THAT YOU CAN USE, AND YOU O(CAN DEFINE YOUR OWN IF YOU WISHT B ))(! Ҡ} ^( ( (4(#WHEN THIS ROUTINE IS RUNNING, THERE^(%WILL BE A SYSTEM STATUS LINE PRINTED  r*(" THE NORMAL AT}ARI SCREEN. -(W(%among other things, you will see: Z(r(.. caps/lowr status P+(#.. inverse/regular video statu}s P( .. current cursor column and row T,($.. keyboard buffer status /(T( THERE IS ALSO A VERSION CALLED }  O+(#INFORMER II WHICH ADDS A DISPLAY OFO(AVAILABLE MEMORY IN HEXIDECIMAL< B))(! Ԡ}a( ( ((7(#THERE ARE 2 VERSIONS OF THIS BASIC a(%PROGRAM THAT WILL ALLOW YOU TO PRINT k*("FANCY VERTI}CAL OR HORIZONTAL T(%BANNERS USING JUST ABOUT ANY PRINTER.W(k(you can choose:S(.(#.. the character size } S( .. the text message T,($.. the fill character /(T( THIS ONE IS LOTS OF FUN AND} VERY++(#EDUCATIONAL. $ B))(! Ԡb( ( ((8($WHE}N YOU LIST A PROGRAM TO THEb(%SCREEN, IT GOES BY A BIT TOO FAST TO m*("READ. WITH THIS ROUTINE LOADED YOUT(%CAN} SLOW THE LISTING DOWN TO A SPEED m(COMFORTABLE FOR YOU.S(.(#YOU CAN ALSO PAUSE THE LISTING BY S( USING THE } KEY, AND YOU Q,($CAN ADJUST THE SPEED TO SUIT YOUR Q( NEEDS.   Bp))(! }Šb( ( ((8($USING THE 3 YELLOW CONSOLE KEYS ON b(%YOUR KEYBOARD GIVES YOU 7 POSSIBLE }m*("PROGRAMMING POSSIBILITIES. WITH T(% LOADED IN YOU CAN HAVE 14 m(COMBINATIONS. S(.(#YOU C}AN ALSO latch THE CONSOLE KEY S( ALLOWING YOU TO CHECK THE KEY Q,($VALUE AT A LATER TIME. THIS ROUTINE Q( IS BOTH E}DUCATIONAL AND USEFUL.  BX))(! ̠l_( ( (5($THIS UTILITY IS AIMED AT ADVANC}ED _(% PROGRAMMERS WHO HAVE FOUND vm*("THEMSELVES NEEDING TO OR T(%TWO BYTES TOGETHER BUT HAVE LAC}KED m(THE MEANS TO DO SO. U(0(% CAN BE USED TO BUILD AND EXECUTEU( TINY MACHINE LANGUAGE PROGRAMS Q,($W}HICH CAN TAKE ADVANTAGE OF THE 6502Q( PROCESSOR'S POWER. R(/($from basic run ĺ̮ for a R(b}etter look at how this works. B@))(! ӠT\( (2($THIS ROUTINE WILL ALLO}W YOU TO\(%USE CERTAIN dos COMMANDS WITHOUT ^q*("LEAVING . THIS IS REAL HANDY T(%DURING PROGRAM DEVELOPMENT. }YOU CAN n(ACCESS THE FOLLOWING:q(hj(disk directory(( rename file9( delete fileH( lock fileY( unlock fi}lej( format diskrU(0(%EXCELLENT DOCUMENTATION ON THE USE OFU( THE xio COMMANDS. " B(#))(!} Π<#\( (2($MUSICIAN WAS DESIGNED WITH THE GAME \(%PROGRAMMER IN MIND. WHILE atari HAS }F#r,($EXCELLENT SOUND CAPABILITIES, IT'S AU($LONG TASK TO TRANSLATE ACTUAL NOTES o(INTO DECIMAL NUMBERS.r(P#V-(%} IS A MACHINE LANGUAGE STRINGV($THAT PERMITS YOU TO SIMPLY PASS IT AZ#t,($STRING OF NOTES YOU WANT TO PLAY. INU($A}DDITION, YOU CAN CONTROL VOLUME ANDt(DURATION AT THE SAME TIME.d#Q()(from basic, run ĺήQ(#for a better }look at how this works% B%))(! Ӡ0%_( ( (5($THIS ROUTINE PROVIDES YOU WITH T}HE _(%LUXURY OF USING 4 TEXT COLORS ON A :%D(GRAPHICS 0 SCREEN.(A(THE FOLLOWING ARE two EXAMPLES:D(D%]!(THI}S IS NORMAL UPPER CASEA(](this is lowercase aloneN%w%(ŠϠӠŠ((Q(}$A SECOND PART OF THIS ROUTINE ALLOWSw(!TWO NEW COLORS ON SELECTED LINES.& B B' A'TAY}@4'-@#T('=INTRO =MENU =NEXT PAGE*N)F:B2y,"@)% D:SCREEN.SYS4NF:B2y},"@%>N0F:B2y,"@&6-%@0 AN B D:P6MENU.SYS`0100 .TITLE"JOYSTICK EXPANDER - (c) 1982 SYNAPSE SOFTWARE"0110 ;0120 ;0130 ; This routine sits in deferred0140 ;VBI and} overwrites the OS's joy-0150 ;stick registers. Instead of0160 ;reading numbers via STICK that0170 ;mean alot in machine }language,0180 ;but mean absolutely nothing in0190 ;BASIC, this program allows you0200 ;to read the joystick in values0210} ;ranging from 1 to 8 via STICK.0220 ;0230 ;0240 ;STICK VALUES:0250 ;0260 ; 8 1 2 | read by using:0270 ; \|/ }|0280 ; 7-- --3 | STICK(x)0290 ; /|\ |0300 ; 6 5 4 | x= STICK 0-30310 ; |0320 ; |033}0 ;0340 ; TO INITIALIZE, DO0350 ; X=USR(1536)0360 ;0370 .PAGE0380 *=$600 ;page 60390 ;========================}===================================================0400 ;0410 SETVBV=$E45C ;routine to set VBI vectors0420 XITVBV=$E462 ;E}XIT VBI VECTOR0430 STICK=$278 ;beginning of OS's joystick values0440 DVBVLK=$224 ;address of the deferred VBI vector0450} ;0460 ;===========================================================================0470 ;0480 ; PUT THE ROUTINE ONLINE04}90 ;0500 ;===========================================================================0510 ;0520 SETUP LDA DVBVLK ;save old } vector0530 STA RETADD0540 LDA DVBVLK+10550 STA RETADD+10560 LDX #UPDATE/256 ;high byte of VBI vector0570 LDY #UPDA }TE&255 ;low byte0580 LDA #7 ;use deferred vector0590 JSR SETVBV ;set VBLANK vector0600 PLA ;*** BASIC ONLY ***0610 RT }S0620 ;0630 ;0640 ;===========================================================================0650 ;0660 ; UPDATE THE J }OYSTICK REGISTERS0670 ;0680 ;===========================================================================0690 ;0700 UPDATE } LDX #$03 ;4 sticks (0-3)0710 ;0720 LOOP LDA STICK,X ;get this joystick reading0730 TAY ; -- AND --0740 LDA TABLE,Y ;us}e it to index into the table0750 STA STICK,X ;write the new value out0760 DEX0770 BPL LOOP ;if we are not finished then} branch back0780 ;0790 JMP (RETADD) ;*** GOOD-BYE ***0800 RETADD *=*+2 ;return address0810 ;0820 ;0830 .PAGE"JOYSTICK} VALUES TABLE"0840 ;===========================================================================0850 ;0860 ; TABLE OF JO}YSTICK VALUES TO0870 ; BE STUFFED INTO THE JOYSTICK0880 ; REGISTERS0890 ;0900 ;======================================}=====================================0910 ;0920 TABLE .BYTE 0,0,0,0,0 ;erroneous values return a zero0930 .BYTE 4 ;RIGHT/}BACK0940 .BYTE 2 ;RIGHT/FORWARD0950 .BYTE 3 ;RIGHT0960 .BYTE 00970 .BYTE 6 ;LEFT/BACK0980 .BYTE 8 ;LEFT/FORWARD099}0 .BYTE 7 ;LEFT1000 .BYTE 01010 .BYTE 5 ;BACK1020 .BYTE 1 ;FORWARD1030 .BYTE 0 ;CENTERED1040 .ENDed0140 ;VBI andm32700 FOR QQZ=1536 TO 1593:READ QQX:POKE QQZ,QQX:NEXT QQZ:X=USR(1536):RETURN 32701 DATA 173,36,2,141,41,6,173,37,2,141,42,6,!}162,6,160,23,169,7,32,92,228,104,96,162,3,189,120,2,168,185,4332702 DATA 6,157,120,2,202,16,243,108,41,6,0,032703 REM *** J!}OYSTICK VALUES ***32704 DATA 0,0,0,0,0,4,2,3,0,6,8,7,0,5,1,0R(1536):RETURN 32701 DATA 173,36,2,141,41,6,173,37,2,141,42,6, >($)%* \h`x+xl)+:6):RETURN 32701 DATA 173,36,2,141,41,6,173,37,2,141,42,6,$C0100 .TITLE "QUICKTYPER 2.0 -- copyright 1982 Synapse software"0110 *=$6000120 ;============================0130 ;0140 )}; QUICKTYPER 2.00150 ;0160 ; (c) 1982 SYNAPSE SOFTWARE0170 ;0180 ; This program "types" certain0190 ; commonly-us)}ed words and0200 ; commands. These commands are0210 ; "called up" by pressing0220 ; both SHIFT and CONTROL, and0230 ; )} a predetermined key.0240 ;0250 ; It utilizes both the0260 ; deferred VBLANK vector and0270 ; the keyboard vector.028)}0 ;0290 ;0300 ;===========================0310 ;0320 ; EQUATES FOLLOW0330 ;0340 ;===========================0350 CASIN)}I=$2 ;S/RESET vector for me.0360 BOOT=$9 ;CASINI ready-for-use flag0370 SETVBV=$E45C ;Set VBLANK vector rtn0380 XITVBV=$E4)}62 ;System VBLANK rtn0390 CH=$2FC ;Keycode register0400 KBCODE=$D209 ;Hardware keypress reg0410 CONSOL=$D01F ;hardware con) }sole buttons0420 SHFCTRL=$C0 ;SHIFT+CONTROL0430 VKEYBD=$208 ;O.S. Keypress vector0440 VVBLKD=$224 ;deferred VBLANK vector)!}0450 .PAGE "Initialization"0460 ;===========================0470 ;0480 ; INITIALIZE0490 ;0500 ; GRABS BOTH THE VBLANK A)"}ND0510 ; KEYPRESS VECTORS.0520 ;0530 ;===========================0540 INIT LDA #INIT&255 ;S/RESET protection0550 STA CA)#}SINI ;every S/RESET will come0560 LDA #INIT/256 ;back here so that0570 STA CASINI+1 ;I can reconnect myself0580 LDA BOO)$}T ;tell OS that I'm in charge here.0590 ORA #20600 STA BOOT0610 LDA #$04 ;check for [OPTION]0620 BIT CONSOL ;bit 3 = )%}[OPTION]0630 BNE ON0640 RTS ;if [OPTION] is pushed, then no QUICKTYPER0650 ON LDX #TYPER/256 ;Get hi addr of my rtn0660)&} LDY #TYPER&255 ;Lo addr0670 LDA #07 ;Set deferred vector0680 JSR SETVBV ;Set VBLANK vector0685 SEI ;Don't bug me whil)'}e I'm switchin' vectors0690 LDA VKEYBD ;Copy current keyboard0700 STA KEYRTN+1 ; vector to my storage0710 LDA VKEYBD+1)(} ; place so i can use0720 STA KEYRTN+2 ; it, too.0730 LDA #STARTER&255 ;Now intercept0740 STA VKEYBD ; all keypresse))}s by0750 LDA #STARTER/256 ; stealing key-0760 STA VKEYBD+1 ; board vector.0765 CLI ;Bug me now, I'm done.0770 RTS0)*}780 .PAGE "STARTER - prepares for typing"0790 ;===========================0800 ;0810 ; STARTER0820 ;0830 ; Checks a k)+}eypress against0840 ; a table of abbreviations.0850 ; If it is found there, flags0860 ; are setup so that the TYPER087),}0 ; routine will type in the0880 ; word.0890 ;0900 ;===========================0910 STARTER TXA ;Save X-Reg0920 PHA0)-}930 LDA KBCODE ;This keypress0940 CMP #SHFCTRL ;Both SHFT & CTRL down?0950 BCC EXIT1 ;Nope, not interested0960 LDA KBC).}ODE0970 LDX #LEN-1 ;Point to end of table0980 LOOP CMP TABLE,X ;Have I found what he typed?0990 BEQ FOUND ;Yes.. Prepare)/} to type1000 DEX ;No, continue loop1005 CPX #$FF ;Is table finished?1010 BNE LOOP ;No siree.. check next item1020 ;Key)0}press not valid....1030 EXIT1 PLA ;Restore X-Reg1040 TAX1050 KEYRTN JMP KEYRTN ;Let system do keypress1060 FOUND INX ;Po)1}int to start of letters1070 STX POS ;Record that for later1080 LDA DELAY ;Setup first delay1090 STA INPROG ; for typin)2}g1100 JMP EXIT11110 .PAGE "TYPER - types word"1120 ;===========================1130 ;1140 ; TYPER1150 ;1160 ; Actu)3}ally "types" the1170 ; letters in...1180 ; The typing is done during1190 ; deferred VBLANK by stuffing1200 ; the OS v)4}ariable CH with1210 ; the keycodes.1220 ;1230 ;===========================1240 TYPER LDA CH ;Keypress buffer1250 CMP #)5}$FF ; empty?1260 BNE EXIT2 ;No, dont type over it1270 LDA INPROG ;Am I busy typing?1280 BMI EXIT2 ;Hardly.. go home12)6}90 BEQ NODELAY ;Yes.. go type1300 DEC INPROG ;Am typing, but not ready1310 JMP EXIT2 ; for next char1320 NODELAY LDX P)7}OS ;Find letter to type1330 LDA TABLE,X1340 BMI DONE ;High bit on, done typing1350 STA CH ;Type letter1360 INC POS ;N)8}ext letter1370 LDA DELAY ;Delay next keypress1380 STA INPROG ; so OS can catch up1390 EXIT2 JMP XITVBV1400 DONE DEC IN)9}PROG ;Show typing done1410 BNE EXIT2 ; by making delay < 01420 .PAGE "Storage areas and tables"1430 INPROG .BYTE 01440):} POS .BYTE 01450 DELAY .BYTE 1 ;Keypress delay1460 TABLE .BYTE 204,$0C,$27,$7C ; 1470 .BY);}TE 246,$7D,$68,$22,$32,$C ;GR.0 1480 .BYTE 202,$4A,$68,$4D,$63,$6D ;PRINT1490 .BYTE 254,$7E,$7F,$50,$6A ;SAVE1500 )<}.BYTE 200,$7E,$48,$4B,$63,$7A ;SOUND1510 .BYTE 226,$6A,$63,$7A,$C ;END1520 .BYTE 225,$68,$6A,$65,$61,$27,$3C ;REM /|\)=}1530 .BYTE 207,$4A,$48,$45,$6A,$21 ;POKE1540 .BYTE 206,$4A,$6A,$6A,$45,$70 ;PEEK1550 .BYTE 237,$40,$4D,$7E,$6D,$C ;LIST)>}1570 .BYTE 232,$68,$4B,$63 ;RUN1580 .BYTE 234,$7E,$6A,$6D,$22 ;SET.1590 .BYTE 219,$4A,$68,$22,$5A,$1B ;PR.#61600 )?}.BYTE 250,$7A,$48,$7E,$C ;DOS 1610 .BYTE 231,$3A,$3F,$2D,$3F,$21 ;DATA 1620 .BYTE 128 ;END OF TABLE1630 LEN=*)@}-TABLETITLE "QUICKTYPER 2.0 -- copyright 1982 Synapse software"0110 *=$6000120 ;============================0130 ;0140 (  ,`] \O P6 `H ҢXݐhLN莎!0΍L-B}0Lb΍ '|}h"2 JhMcm~Pj~HKczjcz hjea'_PICTURE SYSb1SCREEN SYSb1P6MENU SYSbJSTICK SRCbJSTICK LSTbJSTICK OBJb(QUICKTYPSRCbAQUICKTYPARSbDQUICKTYPOBJb/GINFORMERSRCb}INFORMERARSb1INFORM2 SRCbINFORM2 ARSbBIGPRINTBASbBIGPRNT2BASbSLOWLISTSRCbSLOWLISTARSb$CONSOLE SRCbCONSOLE LSTb CONSOLE OBJb!UTIL LSTb"UTIL DMOb4MINIDOS LSTb'EMUSICIANSRCblMUSICIANLSTboMUSICIANDMOb+TXTCOLRSLSTb$TXTCOLRSDMODISK CATANGY T STA FSPOT-1,X Put it in line1430 DEX1440 BNE LOOP Check next flag1450 JMP XITVBV1460 .PAGE "Conv5r}ert binary to printable"1470 ;==========================1480 ;1490 ; CONVERT1500 ;1510 ; Converts a binary value1520 ; 5s}to printable form.1530 ;1540 ; (A) has value1550 ; (Y) has position of text1560 ;1570 ;==========================1575 ;5t}1580 CONVRT LDX #4 Up to 4x10 values1590 LOOP2 CMP MAXTBL,X Is this <= to value?1600 BCS FOUND Yes1610 DEX5u} No, next check1620 BNE LOOP21630 FOUND SEC1640 SBC MAXTBL,X Pull off tens1650 ORA #$90 Make digit 5v}printable1660 STA MESSAGE+1,Y1670 LDA CHRTBL,X Print tens digit1680 STA MESSAGE,Y1690 RTS1705w}0 .PAGE "Tables and message line"1710 ;========================1720 ;1730 ; DATA AREAS AND TABLES1740 ;1750 ;==========5x}==============1755 ;1760 DSPLST .BYTE $70,$60,$10,$42 ;Prints INFORMER line1770 .WORD MESSAGE1780 .BYTE $015y} ;Jump back to old DLIST1790 JMPADR .WORD 01800 ;1810 SHFTBL .BYTE $61,$21,$40 ;"A","a",""1820 ADRTBL .BYTE $A2,$FC,$FF 5z};Low bytes of flags addr1830 CMPTBL .BYTE 0,$FF,0 ;What flags are NOT when set1840 PRTTBL .BYTE $65,$63,$73 ;Flags repr.185{}50 MAXTBL .BYTE 0,10,20,30,40 ;Tens table1860 CHRTBL .BYTE $90,$91,$92,$93,$94 ;Printable tens1870 MESSAGE .BYTE $80,$A9,$E5|}E,$E6,$EF1880 .BYTE $F2,$ED,$E5,$F2,$80,$D61890 .BYTE $AD,$EF,$E4,$E5,$9A,$801900 LSPOT .BYTE 0 ;Mode1910 6}  ,`  \`10i1i01T U *** Ilݫ9~}Lbݲ8 `p`Ba!@ecs (֭嚀ֲ€9} ,`  \`10i1i01T U *** Ilݫ80100 .TITLE "INFORMER II -- Internal status line"0110 *=$6000120 ;==========================0130 ;0140 ; THE INFO=}RMER II0150 ; STATUS LINE CONTROLLER0160 ; (c) 1982 SYNAPSE SOFTWARE0170 ;0180 ; This routine maintains a0190 ; stat=}us line at the very top0200 ; of the display. This display0210 ; shows several things:0220 ; 1) Current CAPS/LOWR sta=}tus0230 ; 2) Inverse/non inverse0240 ; 3) Current cursor row & column0250 ; 4) Free ram in hexadecimal0260 ;0270 ;=} The above information is0280 ; updated every VBLANK. In time-0290 ; critical periods, the display0300 ; is turned o=}ff.0310 ; INFORMER will reinstate itself0320 ; when the user changes graphics0330 ; modes.0340 ;0350 ; It is designe=}d to run with0360 ; BASIC, not ASM-ED, mainly due0370 ; to the fact that the ASM-ED0380 ; cartridge wont allow deferre=}d0390 ; VBLANKS.0400 ;0410 ;0420 ;==========================0430 ;0440 SETVBV=$E45C ;Rtn to set VBL vector0450 XITVBV=}=$E462 ;System VBLANK exit routine0460 SDLST=$230 ;Vector to display list0470 CONSOL=$D01F ;hardware console buttons0480 R=}OWCUR=$54 ;Cursor row0490 COLCUR=$55 ;Cursor column0500 SHFLOK=$2BE ;CAPS/LOWR status0510 INVFLG=$2B6 ;Inverse video flag=}0520 MEMLO=$90 ;BASIC low memory addr0530 HIMEM=$2E5 ;System high mem addr0540 CASINI=$02 ;cassette boot init. vector0550 =}BOOTF=$09 ;successful boot flag0560 .PAGE "Setup system vectors"0570 ;==========================0580 ;0590 ; Put INFORM=}ER online.0600 ;0610 ;==========================0620 SETUP LDA #SETUP&255 ;high byte of init. address0630 STA CASINI064=}0 LDA #SETUP/256 ;low byte of init. address0650 STA CASINI+10660 LDA BOOTF ;tell system about cassette boot0670 ORA #$=}020680 STA BOOTF0690 LDA #$04 ;check for [OPTION]0700 BIT CONSOL0710 BNE ON0720 RTS ;if [OPTION] then don't set up =}VBI's0730 ON LDX #DOLINE/256 ;High VBL vector0740 LDY #DOLINE&255 ;Low byte0750 LDA #7 ;Use deferred vector0760 JMP SE=}TVBV ;Set VBLANK vector --- the RTS instruction of SETVBV will return control0770 .PAGE "Build a new INFORMER line"0780 ;==}=========================0790 ;0800 ; BUILD LINE0810 ;0820 ; Does two things:0830 ; 1) If the current display0840 ;=} list does not contain my0850 ; my patch, then re-patch it.0860 ; 2) Re-evaluate current ATARI0870 ; stat=}us.0880 ;0890 ;==========================0900 ;0910 ;0920 ; Modify the user's display list0930 ; such that it uses MY=} header0940 ; (which links back to his dlist)0950 ;0960 DOLINE LDA SDLST+1 ;If Hi byte of DLIST vector0970 CMP #DSPLST/=}256 ; is the same as hi byte of mine,0980 BEQ MAKELN ; then DLIST is still setup0990 ;Setup new DISPLAY-LIST header1000=} LDA SDLST ;Set DLIST jump instruction1010 CLC ; to jump to current-DLIST+31020 ADC #3 ; to avoid BLANK-8-LINES1030 =}STA JMPADR ; instructions.1040 LDA SDLST+11050 ADC #01060 STA JMPADR+11070 LDA #DSPLST&255 ;Reset DLIST vector1080 =} STA SDLST ; to point to my header1090 LDA #DSPLST/2561100 STA SDLST+11110 ;1120 ; Create the informer line1130 ;114=}0 MAKELN LDA ROWCUR ;Print cursor row1150 LDY #RSPOT-MESSAGE ;(position in status line)1160 JSR CONVRT1170 LDA COLCUR ;=}Print column1180 LDY #CSPOT-MESSAGE1190 JSR CONVRT1200 ;Find the CAPS/LOWR and INVERSE1210 ;modes.1220 LDA SHFLOK ;Ge=}t CAPS/LOWR status1230 CLC ;Convert it into an index1240 ROL A ; between 0 and 21250 ROL A ; by exploiting a1260 RO=}L A ; cute trick.1270 TAX1280 LDA SHFTBL,X ;Get visual representation1290 ORA INVFLG ;Include INVERSE, too1300 EOR #=}$80 ;Toggle inverse (line is already inverse)1310 STA LSPOT1320 ;put free ram on screen1330 SEC1340 LDA HIMEM ;subtrac=}t MEMLO from HIMEM1350 SBC MEMLO1360 TAY ;save it in Y1370 LDA HIMEM+11380 SBC MEMLO+11390 LDX #$001400 LOOP PHA ;=}save it for later1410 LSR A ;SHIFT HIGH NIBBLE DOWN1420 LSR A1430 LSR A1440 LSR A1450 JSR CB2AH ;convert binary to =}ATASCII hex1460 STA FRESPOT,X ;and output it to the screen1470 INX1480 PLA1490 AND #$0F ;mask out high nibble1500 J=}SR CB2AH1510 STA FRESPOT,X1520 INX1530 CPX #$041540 BEQ RETURN1550 TYA1560 JMP LOOP1570 RETURN JMP XITVBV ;go h=}ome to poppa1580 .PAGE "Convert binary to printable hex"1590 ;===============================1600 ;1610 ; CONVERT BINAR=}Y TO HEX1620 ; (Mike made me do it)1630 ;1640 ;===============================1650 CB2AH CMP #$0A ;Digit between 0 and=} 9?1660 BCC NUMBER ;YES!!!1670 CLC1680 ADC #$97 ;Make it A-F1690 RTS1700 NUMBER ORA #$90 ;Make it 0-91710 RTS1720=} JMP RETURN ;## UNCONDITIONAL ##1730 .PAGE "Convert binary to printable"1740 ;==========================1750 ;1760 ; C=}ONVERT1770 ;1780 ; Converts a binary value1790 ; to printable form.1800 ;1810 ; (A) has value1820 ; (Y) has positio=}n of text1830 ;1840 ;==========================1850 CONVRT LDX #4 ;Up to 4x10 values1860 LOOP2 CMP MAXTBL,X ;Is this <= t=}o value?1870 BCS FOUND ;Yes1880 DEX ;No, next check1890 BNE LOOP21900 FOUND SEC1910 SBC MAXTBL,X ;Pull off tens1920=} ORA #$90 ;Make digit printable1930 STA MESSAGE+1,Y1940 LDA CHRTBL,X ;Print tens digit1950 STA MESSAGE,Y1960 RTS197=}0 .PAGE "Tables and message line"1980 ;==========================1990 ;2000 ; DATA AREAS AND TABLES2010 ;2020 ;========}===================2030 DSPLST .BYTE $70,$60,$10,$42 ;Prints INFORMER line2040 .WORD MESSAGE2050 .BYTE $01 ;Jump back to=} old DLIST2060 JMPADR .WORD 02070 ;2080 SHFTBL .BYTE $61,$21,$40 ;"A","a",""2090 MAXTBL .BYTE 0,10,20,30,40 ;Tens table=}2100 CHRTBL .BYTE $90,$91,$92,$93,$94 ;Printable tens2110 MESSAGE .BYTE $80,$A9,$EE,$E6,$EF2120 .BYTE $F2,$ED,$E5,$F2,$80,=}$D62130 .BYTE $AD,$EF,$E4,$E5,$9A,$802140 LSPOT .BYTE 0 ;Mode2150 .BYTE $80,$D6,$B2,$802160 RSPOT .BYTE 0,0 ;Row2170 =}.BYTE $80,$80,$A3,$802180 CSPOT .BYTE 0,0 ;Column2190 .BYTE $C2,$80,$A6,$80,$842200 FRESPOT .BYTE 0,0,0,02210 .BYTE $80=}BYTE $80,$80,$A3,$802180 CSPOT .BYTE 0,0 ;Column2190 .BYTE $C2,$80,$A6,$80,$842200 FRESPOT .BYTE 0,0,0,02210 .BYTE $80<  ,`L\10i1i01T U *** I8吨呢HJJJJ A}h) LpLb i` `L8 `p`Ba!@ (֭嚀ֲ€A} ,`L\10i1i01T U *** I8吨呢HJJJJ @WX - CHARSEAMSGDATDFILLSPACEROCHARCHINTEMPTEMPCODEMSG2CHARFILFILVLFLAE}@ E}d""****************************n""*** BIGPRINT I ***x""*** (c) 19E}82 ***""*** SYNAPSE SOFTWARE ***""****************************6-F:AV,$AVE}D +@'0@@@D(@ bigprint iB(@B(@& (C) 1982 SYNAPSE E}SOFTWARE0@kG;@,;@,;A@,;@,;@,;@,YAR@E}k@e$ (}SPECIAL PRINTER CODES$ AP3 Ap(TURN PRINTER ON+-@@E}M2A@@a-@@e 2)-@@  )E} A@@AR'A@d@non-inverse upper-case\5(>:A%,"INPUT MESSAGE (10 CHARACTERS MAX).E}X( 10\" 6.6-, B6@##*TRANSLATE TO INTERNAL CODES*JTE}-@B:,^16-@:7<,,!6-+A(,16-&$A(h' @26-%@d' Ar' @6-&E}@2' A|16-%$A(6--67<,.>:,1 o (}#0@P('FILL CHARACTER E}ݽҭTcB:,"o6-@!! LETTER-FILL REQUESTED-@E}-@B:,6.7<,6-@:7<,,)A(6-@)6-&A( 6-%+$@,% 6-E}F:,! A0!"A@""*** TAKE CARE OF INVERSE ***D6- -@B:,+7<,4667<,.E}: D A@67<,. 67B:,%@,.& 0--- OUTPUT A LINE ---: Ap36.D N< E} A3<TRAP IS SO PRINTER HAS TIME TO CATCH UP!!X Bb~2()}WOULD YOU LIKE TO PRINT ANOTHER LINE=@E}]@@K:j)@~"@Apl +v6-A(6-%@:-@E}@!%6-&067<,.: A`67<,. 6-'@ $D:BIGPRINT.BASDqcd<  AMSGDATCHARSEDMCOROCHARTEMPTEMPROWDATINCHFILLSPACEWIDTLNGTBILOOVLXHARBOOI}dlBsD@1 @8I}BffBUUUd*************************n*** BII}GPRINT II ***x*** (c) 1982 ****** SYNAPSE SOFTWARE ****************************I}0@N<;@,;A,;A@,;@,;@,NAR@@(>:A%,I}((@(%BIGPRINT II (c) 1982 SYNAPSE SOFTWARE)-@@7%(>:@,)  A03 A@g-@I}@.(TURN PRINTER ON...B-@AF ](~~~~~~~~~~~~~~~~~~g A 6-F:AV,$AV.I}A@d.non-inverse upper-caseQ A`AR1-@@M(CHARACTER WIDTH 5Q .I}+ @,%+P:,,$ A. A`@ Ap-@@<(CHARACTER LENGTH 9@:&+ @,%+I}P:,,%+!@(,0 A: Ap> A-@@:(FILL CHARACTER *>; A-@I}@7(SPACE CHARACTER;"$ BB:,"$6. ,B:,"6. 6S( (1(#INPUT MESSAGE I}(100 CHARACTERS MAX).5?(+B:,,I(S A@J##*TRANSLATE TO INTERNAL CODES*T-@B:,^6-@I}:7<,,h' @26-%@d' Ar' @6-&@2' A|67<,.>:, I})-B:,@6@)6-6-@:7<,,)A(6-@)6-&A( -@@6I}@-@6-%$@%6-F:, A-@67B:,%@,.7<,  I} "A`""*** TAKE CARE OF INVERSE ***8-@B:,7<,4*67<,.. 8 A`&67I}<,. 0--- OUTPUT THIS BIT ---:-@D A3N X 6.b l v+(}ҠI} (4Y+%""*** CONVERT BIN. TO DEC. ***6-A(6-%@:-@@I}!%6-&067<,.: A67<,.6-'@ $ **** BOOP ROUTINE ***4>((PRODUI}CES AUDIBLE "BOOP" ERROR TONEHR%2A@@G2@A@@[-@@0I}_ 22@\$D:BIGPRNT2.BASLXHARBOOHf0100 .TITLE "SLOWLIST -- listing controller"0110 ;========================================0120 ; SLOWLIST0130M} ; (c) 1982 Synapse Software0140 ;0150 ;0160 ; This routine allows the BASIC0170 ;programmer to pause and/or slow01M}80 ;a program listing. The routine0190 ;works by checking the console0200 ;buttons during VBI and setting0210 ;SSFLAG accM}ordingly.0220 ;0230 ; [START] will pause the listing0240 ; as long as it is held0250 ; down.0260 ;02M}70 ; [SELECT] will slow the listing0280 ; as long as it is held0290 ; down.0300 ;0310 ;0320 ; ThisM} is a "LOAD & GO" type of0330 ;file. It may used as an0340 ;AUTORUN.SYS or may be LOADED0350 ;from DOS. To turn the routM}ine0360 ;off, simply hold down [OPTION]0370 ;and hit [SYSTEM RESET].0380 ;0390 ; location 1619 decimal is the0400 ;speeM}d byte. It may be poked0410 ;with the delay wanted at any0420 ;time.0430 ;0440 ;0450 ;=================================M}=======0460 ;0470 ; EQUATES0480 ;0490 ;========================================0500 ;0510 SETVBV=$E45C ;routine to sM}et the VBLANK vectors0520 XITVBV=$E462 ;system VBLANK exit routine0530 CONSOL=$D01F ;hardware console buttons0540 CASINI=$M}02 ;cassette boot init. vector0550 BOOTF=$09 ;successful boot flag0560 SSFLAG=$2FF ;screen start/stop flag0570 .PAGE"initM}ialization"0580 ;0590 ;0600 *=$0600 ;page six0610 SETUP LDA #SETUP&255 ;low byte of INIT. address0620 STA CASINI0630 M} LDA #SETUP/256 ;high byte0640 STA CASINI+10650 LDA BOOTF ;tell system about cassette boot0660 ORA #$020670 STA BOOTFM}0680 LDA #$04 ;check for [OPTION] button0690 BIT CONSOL0700 BNE ON0710 RTS ;if [OPTION] is pushed then don't set VBLAM}NK vectors0720 ON LDX #VBI/256 ;high VBI vector0730 LDY #VBI&255 ;low0740 LDA #7 ;use deferred vector0750 JSR SETVBV0M}760 RTS0770 .PAGE"VBI routine"0780 ;0790 ;========================================0800 ;0810 ; VBI ROUTINE0820 ;08M}30 ;========================================0840 ;0850 VBI LDA #$02 ; Deferred VBLANK vectors to here0860 BIT CONSOL ;cheM}ck for [SELECT]0870 BNE NOSELECT0880 LDA CNTR ;[SELECT] is pushed0890 BEQ RESET ;IS THE COUNTER = 00900 DEC CNTR ;NO M}--- decrement it by one0910 LDA #$01 ;make sure SSFLAG is set0920 STA SSFLAG0930 JMP XITVBV0940 RESET LDA SPEED0950 M}STA CNTR0960 LDA #$00 ;no pause this VBLANK0970 STA SSFLAG0980 JMP XITVBV0990 NOSELECT LDA #$01 ;check for [START]100M}0 AND CONSOL1010 EOR #$01 ;flip the [START] bit1020 STA SSFLAG ;set SSFLAG accordingly1030 JMP XITVBV1040 CNTR .BYTE M}01050 SPEED .BYTE 4 ;initial delay1060 .END0110 ;========================================0120 ; SLOWLIST0130L/  ,`  \`,R RLbSRLb-ILbQ}Q} ,`  \`,R RLbSRLb-ILbP0100 .TITLE "CONSOLE CONTROL VERSION 1.0"0110 ;0120 ; (c) 1982 SYNAPSE SOFTWARE0130 ;0140 ; This routine is a for maU}king0150 ;the console buttons multi-funct-0160 ;ioned. It takes the value of0170 ;the console buttons, and OR's in0180 ;U}certain bits to tell if the0190 ;shift key is also depressed.0200 ;Then it can be read from BASIC0210 ;and interpreted. TU}here is also0220 ;the option of having the values0230 ;latch so as to make reading them0240 ;easier.0250 ;0260 ;0270 ; U} To utilize these features0280 ;from BASIC, first initialize0290 ;the routine by doing this:0300 ;0310 ; BUTTONS=USR(15U}36,AEXP1)0320 ;0330 ; AEXP1=The option number0340 ;0350 ; OPTIONS:0360 ;0370 ; 0 Turns the routine off.0380 ; U} BUTTON will equal0390 ; the location of the0400 ; hardware console reg-0410 ; ister.0420 U};0430 ;0440 ; 128 Turns the routine on,0450 ; and latches the value.0460 ; BUTTON will contain047U}0 ; the value of the stor-0480 ; age location to read.0490 ;0500 ;0510 ; 1 Same as above exceptU}0520 ; values do not latch.0530 ;0540 ;0550 ;0560 ; THE BIT VALUES THAT ARE0570 ;STORED IN BUTTON CORRESPONDU}0580 ;TO THE FOLLOWING CHART:0590 ;0600 ; BIT 0 [START]0610 ; BIT 1 [SELECT]0620 ; BIT 2 [OPTIONV}]0630 ; BIT 3 [SHIFT]0640 ;0650 ;0660 ; FROM BASIC, USE THE FOLLOWING:0670 ;0680 ;0690 ; KEY=PEEK(BUTTON)07V}00 ;0710 ; KEY CORRESPONDS TO:0720 ;0730 ;0740 ;0750 ; 1 [START] PUSHED0760 ; 2 [SELECT] PUSHED0770 ; 4 [OV}PTION] PUSHED0780 ;0790 ;0800 ; If KEY is greater than 8,0810 ; then [SHIFT] is pushed.0820 ; Subtract 8 from KEY toV} find0830 ; which console button is push-0840 ; ed.0850 ;0860 ;0870 ;0880 ;0890 .PAGE "EQUATES, CONSTANTS, AND VARIV}ABLES"0900 ;===============0910 ;=== EQUATES ===0920 ;===============0930 ;0940 ;0950 CONSOL=$D01F ;HARDWARE CONSOLEV} BUTTONS0960 SKSTAT=$D20F ;SERIAL PORT/KEYBOARD STATUS0970 VALRTRN=212 ;LOCATION TO STORE USR RETURN VALUE0980 SETV}VBV=$E45C ;SET VBI VECTOR0990 SYSVBV=$E45F ;SYSTEM VBI ROUTINE1000 XITVBV=$E462 ;EXIT VBI ROUTINE1010 ;1020 ;V}1030 ;1040 ;=================1050 ;=== VARIABLES ===1060 ;=================1070 ;1080 ;BUTTONS1090 ;FLAG1100 ;1110 ;V}1120 .PAGE "INITIALIZATION"1130 *=$06001140 LDA #$001150 STA FLAG ;ZERO OUT THE FLAG1160 PLA1170 BNE INIT ;IF THEV }R IS 1+ VALUES THEN BRANCH1180 RTS ;FORGOT THE OPTION. RETURN.1190 INIT TAX1200 PLA ;THROW THE HIGH BYTE AWAY1210 PLA V };GET LOW BYTE1220 STA BUTTON ;SET IT DOWN FOR AWHILE1230 DEX ;COMPENSATE FOR REMOVING THE FIRST ARGUMENT1240 BEQ GETVBIV } ;IF ALL PARAMETERS ARE OFF THEN BRANCH1250 LOOP1 PLA ;REMOVE ALL ERRONEOUS1260 PLA ; VALUES THAT MAY HAVE1270 DEX ; V } FOUND THERE WAY INTO1280 BNE LOOP1 ; THE USR STATEMENT1290 ;1300 GETVBI BIT BUTTON1310 BEQ VBIOFF ;OPTION #01320 BMV }I VBION ;OPTION #1281330 ;1340 ;OPTION #11350 ;1360 LDA #$011370 STA FLAG1380 ;1390 VBION LDA #BUTTON/256 ;HIGH BYTV}E FOR USR RETURN1400 STA VALRTRN+11410 LDA #BUTTON&255 ;LOW BYTE1420 STA VALRTRN1430 ; grab VBI1440 LDX #VBI/256 ;HV}IGH BYTE1450 LDY #VBI&255 ;LOW BYTE1460 LDA #$07 ;DEFERRED VBI1470 JMP SETVBV ;ITS RTS WILL RETURN TO CARTRIDGE1480 ;V}1490 ;1500 VBIOFF LDA #CONSOL/256 ;HIGH BYTE FOR USR1510 STA VALRTRN+11520 LDA #CONSOL&255 ;LOW BYTE1530 STA VALRTRN1V}540 LDX #XITVBV/256 ;HIGH BYTE1550 LDY #XITVBV&255 ;LOW BYTE1560 LDA #$07 ;DEFERRED VBI1570 JMP SETVBV ;ITS RTS WILL RV}ETURN TO CARTRIDGE1580 .PAGE "VBI ROUTINE"1590 ;1600 ; THE DEFERRED VBI VECTOR POINTS1610 ;TO HERE.1620 ;1630 ;1640 V};1650 VBI LDA SKSTAT1660 AND #$08 ;AND OUT ALL BUT BIT-3 (SHIFT KEY)1670 ORA CONSOL ;OR IN CONSOLE KEYS1680 EOR #$0F ;V}SWITCH THE LOWER NIBBLE1690 LDX FLAG1700 BNE ZERO ;ARE WE IN LATCHED MODE?1710 ;---YES1720 TAX ;COPY A-REG INTO X-REGV}1730 AND #$F7 ;AND OUT SHIFT VALUE1740 BEQ EXIT ;IF NO CONSOLE KEYS THEN EXIT1750 TXA ;ELSE RETURN ORIGINAL VALUE1760 V} JMP STORE1770 ZERO TAX ;COPY A-REG INTO X-REG1780 AND #$F7 ;AND OUT SHIFT VALUE1790 BEQ STORE ;IF NO CONSOLE KEYS THEN V}STORE A ZERO1800 TXA ;OTHERWISE STORE THE ORIGINAL VALUE1810 ;1820 STORE STA BUTTON1830 EXIT JMP XITVBV1840 ;1850 ;18V}60 ;1870 FLAG *=*+11880 BUTTON *=*+11890 ;1900 ;1910 ;1920 .ENDNAPSE SOFTWARE0130 ;0140 ; This routine is a for maTG32000 FOR XX=1536 TO 1536+178:READ XXX:POKE XX,XXX:NEXT XX:RETURN 32005 DATA 169,0,141,105,6,104,208,1,96,170,104,104,141,10Z}6,6,202,240,5,104,104,202,208,251,44,106,6,240,2432010 DATA 48,5,169,1,141,105,6,169,6,133,213,169,106,133,212,162,6,160,69,Z}169,7,76,92,228,169,208,133,213,16932015 DATA 31,133,212,162,228,160,98,169,7,76,92,228,173,15,210,41,8,13,31,208,73,15,174,Z}105,6,208,9,170,4132020 DATA 247,240,13,138,76,99,6,170,41,247,240,1,138,141,106,6,76,98,228,0,0,251,243,51,246,67,6,163,246Z},5132025 DATA 246,60,246,76,228,243,56,34,83,89,83,46,79,82,84,78,73,58,68,34,78,85,82,58,48,44,48,44,50,46,69,8332030 DATAZ} 58,63,58,49,44,50,53,55,32,69,75,79,80,58,48,46,82,71,58,48,44,53,54,32,69,75,79,80,32,0,032035 REM CONSOLE (c) 1982 SYNAPSZ}E SOFTWARE32036 REM BUTTON=USR(1536,CMD) -- CMD= 0, 1, OR 128RN 32005 DATA 169,0,141,105,6,104,208,1,96,170,104,104,141,10X?hih`hhjhh,j0iթjԢEL\ЅթԢbL\) Ii ) Lc)jLb104,104,141,10\o1 DIM UTIL$(27):UTIL$="hhhhh̩`hh ԩ`":REM 㩠) Ii ) Lc)jLb104,104,141,10`M=>j | HEXINPINSSQUAWKINFUNNAMEOPRESULOPUTILBASRSRS+?@AU@Af#}A A8A8 A9  @ @ @@@I;@',26.hhhhh̩`hhf$} ԩ`I㩠 q<;@,;@ ,;@,;@,;@,S6.0123456789ABCDEFb6.>:f%}AS,q6.>:AW,##@@K:S +'0@9-@@S  f&} UTIL DEMO((  Copyright 1982 Synapse Software5( ( ( 5 ! Press at any time to exitAR@f'}C-@C (6-@6 Please choose ,, or f(}(AA  XCLUSIVE-OR# R two numbers together2  ND< Do you wish toF)@f)}6.>:,K "AU % D:SCREEN.SYSP! 4A6-@A! A Z! 4O6-@ ! A d! 4E6-@sf*}! A n  @px6.first A6- 6.second A 6- B6-?:C:,<:, "AUf/}' @0! 4H6-@! A! 4B6-@! A$! 4D6-@! A) 4Zf0}6-$.  A082-@)-@@. 2 ==-@9  Please enter thf1}e  number=?B:, @ AB% A"@"6-A:,%$L 6- -@B:,V)-@f2})7<,47<,A0`  Aj6-$%+&@, t!AUA~$?-@@ f3}5 Invalid entry, try again? A D:UTIL.DMOBASRSRS+?@AU@Ad=32700 TRAP 32727:CLOSE #1:CLOSE #2:CLOSE #3:OPEN #1,4,0,"K:":OPEN #2,4,0,"E:":CLR :DIM ZZ$(40):SETCOLOR 2,0,032701 ? " j5} ":? " |MINI-DOS|":? " "32702 ? "1) DIRECTORY":? "2) RENAME FILE":? "3) DELEj6}TE FILE":? "4) LOCK FILE":? "5) UNLOCK FILE"32703 ? "6) FORMAT DISK":? "7) EXIT TO DOS":? "8) RETURN"32704 POSITION 3,22:? j7}""32705 POSITION 4,14:? "COMMAND:";32706 GET #1,COM:IF COM<49 OR COM>56 THEN 3270632707 j8}ON COM-48 GOTO 32708,32712,32714,32718,32720,32722,32725,3272632708 SETCOLOR 2,4,2:POSITION 2,14:? "DIRECTORY--SEARCH SPECIFj9}ICATIONS":POSITION 2,15:? "D1:*.*";:INPUT #2,ZZ$32709 POSITION 2,14:? "":OPEN #3,6,0,ZZ$:? "}"32710 INPUT #3,ZZ$:IF j:}ZZ$(2,2)=" " THEN ? ZZ$:GOTO 3271032711 ? ZZ$:? :? "HIT FOR MENU":GET #1,COM:GOTO 3270032712 SETCOLOR 2,6,2:POSITIONj;} 2,14:? "RENAME--OLDNAME,NEWNAME (D1:NEW,OLD)":INPUT #2,ZZ$32713 XIO 32,#3,0,0,ZZ$:POSITION 2,16:? "---RENAMED---":FOR COM=1j<} TO 500:NEXT COM:GOTO 3270032714 SETCOLOR 2,3,2:POSITION 2,14:? "DELETE--FILESPC (D1:PROG.BAS)":INPUT #2,ZZ$32715 POSITION j=}2,16:? "PREPARING TO DELETE ";ZZ$:POSITION 3,17:? "ŠՠſٯΩ";32716 GET #1,COM:IF COM=89 THEN XIO 33,#3,0,0,ZZ$32j>}717 GOTO 3270032718 SETCOLOR 2,8,0:POSITION 2,14:? "LOCK FILE--FILESPEC (D1:PROG.SRC)":INPUT #2,ZZ$32719 XIO 35,#3,0,0,ZZ$:j?}? "---LOCKED---":FOR COM=1 TO 500:NEXT COM:GOTO 3270032720 SETCOLOR 2,8,0:POSITION 2,14:? "UNLOCK FILE--FILESPEC (D1:PROG.SRj@}C)":INPUT #2,ZZ$32721 XIO 36,#3,0,0,ZZ$:? "---UNLOCKED---":FOR COM=1 TO 500:NEXT COM:GOTO 3270032722 SETCOLOR 2,3,0:POSITIOjA}N 2,14:? "FORMAT--WHICH DRIVE (1-4)?":INPUT #2,COM32723 ? "ԠˠΠŠ";CHR$(ASC(STR$(COM))+128);"":GET #1,M:IF MjB}<>89 THEN GOTO 3270032724 ZZ$="D":ZZ$(2,2)=STR$(COM):ZZ$(3,3)=":":XIO 254,#3,0,0,ZZ$:GOTO 3270032725 DOS 32726 TRAP 40000:jC}GRAPHICS 0:END :REM change to RETURN to go back to a controlling program.32727 POSITION 2,14:? "*** ERROR #";PEEK(195):FORjD} COM=1 TO 200:NEXT COM:GOTO 32700:CLOSE #3:OPEN #1,4,0,"K:":OPEN #2,4,0,"E:":CLR :DIM ZZ$(40):SETCOLOR 2,0,032701 ? " h"0100 .TITLE"MUSICIAN -- Music Player"0110 ;================================0120 ;0130 ; MUSICIAN 1.00140 ; nF}(c) 1982 Synapse Software0150 ;0160 ; "Plays" notes given to it in0170 ; actual music notation.0180 ;0190 ; Calling fnG}ormat from BASIC is:0200 ; x=USR(ADR(MUSIC$),ADR(S$),0210 ; ADR(NOTES$),ADR(TIME$)0220 ; S$= Command string, nH}containing0230 ; notes and other commands.0240 ; NOTES$= List of sound-values0250 ; for each note, in order bynI}0260 ; octave.0270 ; TIME$= List of Tempos and0280 ; durations.0290 ;0300 ;================================03nJ}10 AUDC1=$D201 ;Control-reg for sounds0320 AUDF1=$D200 ;Tone frequency reg.0330 CLOCK=$14 ;Last byte of real-time clock034nK}0 ;0350 ; The following locations overwrite0360 ; the floating-pt registers (no harm0370 ; done).0380 ;0390 TEMPO=$D6 ;TnL}empo index number*40400 OCTAVE=$D7 ;Octave of note (3-6)0410 DURATN=$D8 ;Tone duration index0420 POS=$D9 ;Current positionnM} in string0430 ADDR=$DA ;Location of string0440 TONES=$DC ;Addr of string with note info0450 TIME=$DE ;Addr of string withnN} duration info0460 *=$600 ;for debug only; real pgm is relocatable0470 ;================================0480 ;0490 ; INnO}ITIALIZE DATABASE0500 ;0510 ; Prepares the MUSICIAN database0520 ;0530 ;================================0540 TOP LDA #0nP} ;Set default0550 STA TEMPO ; tempo,0560 STA DURATN ; and duration0570 STA POS ;While I'm here, position, too0580 LnQ}DA #2 ;Set default octave0590 STA OCTAVE0600 PLA ;Ignore argument count0610 PLA ;pick up addr of string0620 STA ADDR+nR}10630 PLA0640 STA ADDR0650 PLA ;pick up addr of tone variable0660 STA TONES+10670 PLA0680 STA TONES0690 PLA ;PinS}ck up addr of time variable0700 STA TIME+10710 PLA0720 STA TIME0730 PLA ;Ignore high-byte of volume0740 PLA ;Get lonT}w-byte of volume0750 ORA #$A0 ;combine it with distortion value0760 STA AUDC1 ; and init sound with it0770 ;===========nU}=====================0780 ;0790 ; STRING-SHREDDER0800 ;0810 ; Takes the string apart, doing0820 ; each command as it nV}comes to0830 ; it.0840 ;0850 ;================================0860 INC1 LDY POS ;Find index into string0870 INC POS ;BnW}ump it right one0880 LDA (ADDR),Y ;Get current char0890 TAX ; and save it for later0900 INY ;Over one more now0910 LnX}DA (ADDR),Y ;Get operand (if any)0920 TAY ;save it, too0930 SEC ;make operand an index (just in case)0940 SBC #$31 ; bnY}y subtracting "1"0950 ;0960 ; Handle each of the commands below0970 ;0980 CPX #$54 ;Is it a tempo cmd?0990 BNE TSTDUR nZ};nope.. try next cmd1000 ASL A ;Multiply by 4 to get1010 ASL A ; an index to the table1020 STA TEMPO ;Done..1030 TSTDn[}UR CPX #$4C ;How 'bout a duration cmd?1040 BNE TSTOCT ;no.. no luck here, either1050 STA DURATN ;Save new duration indexn\}1060 TSTOCT CPX #$4F ;An "O" for octave?1070 BNE TSTPER ;nope... next please!1080 SEC ;subtract two more to1090 SBC #$2n]} ; give total of -"3"1100 STA OCTAVE ; and save it1110 TSTPER CPX #$2E ;Is it a period?1120 BNE TSTCOM ;Nope.. try a cn^}omma1130 RTS ;wrap it up here1140 TSTCOM CPX #$2C ;Is it a delay (,)1150 BNE TSTSEM ;nope.. better be a note1160 LDA Tn_}EMPO ;get first duration for this tempo1170 CLC ; and do uncond. branch1180 BCC DELAY2 ;## UNCONDITIONAL ##1190 TSTSEM n`}CPX #$3B ;Is it a semicolon1200 BNE TSTNOTE ;Nope.....1210 LDA #5 ;Delay for 1/12 of a second1220 BNE DELAY3 ;## UNCONDna}ITIONAL ##1230 TSTNOTE CPX #$41 ;< "A"?1240 BMI INC1 ;yup.. not a note, then1250 CPX #$48 ;>"G"1260 BCS INC1 ;yup, notnb} a good note1270 TXA ;Convert note to an index1280 SEC ; by subtracting an "A"1290 SBC #$411300 ASL A ;Multiply by tnc}wo1310 CPY #$23 ;is next char a "#"?1320 BNE FLAT ;nope.. may be a flat1330 CLC ;get flat of next higher note1340 ADCnd} #31350 FLAT CPY #$2D ;is next char a "-"?1360 BNE TIMES4 ;nope..1370 CLC ;point to flat value1380 ADC #11390 TIMES4 ne}CMP #$F ;Note greater than G#?1400 BCC TIMES5 ;no..1410 LDA #1 ;yes, swing back around to A-flat1420 TIMES5 ASL A ;multinf}ply note by 41430 ASL A ; to get a table index1440 CLC ;add octave in, to get1450 ADC OCTAVE ; position of sound vlueng}1460 TAY ;prepare for LOAD1470 LDA (TONES),Y ;get actual sound value1480 STA AUDF1 ; and start note.1490 DELAY LDA TEnh}MPO ;Figure tone-duration1500 CLC ; by adding duration to tempo*41510 ADC DURATN ; to get an index1520 DELAY2 TAY ;preni}pare for LOAD1530 LDA (TIME),Y ;get actual tone-duration1540 DELAY3 LDY #0 ;reset clock to time duration1550 STY CLOCK1nj}560 WAIT CMP CLOCK ;Time up?1570 BCS WAIT ;no.. keep going1580 STY AUDF1 ;Turn sound off1590 CLC1600 BCC INC1 ;## UNCnk}ONDITIONAL ##USICIAN -- Music Player"0110 ;================================0120 ;0130 ; MUSICIAN 1.00140 ; l1 DIM NT$(56):NT$="H#L%@D!y<l5r9`/Mf2[-Q(U*"2 DIM TIME$(12):TIME$=" (>67B:,%@,.&.`,9;vr}4A0H8A #II67B:,%@,.1i-i eר܍ҥeبޠ Q*6. T3 O4 L2 G;A;F; O3 F; Ovs}4 L3 C,,.Q +@@"(4AR@N0@@@vt}h0@( MUSICIAN DEMO(  -@@6@@6vu}7@<@,.=:,@6-?:C:,23)+(LINE2<0)+(LINE2>23)+(LINE1>LINE2) THEN LINE1=1:RETURN :REM ERROR31320 FOR X=LINE1 TO LINE2:Iz}F X=0 THEN POKE DLIST,68:GOTO 3134031330 POKE DLIST+X+2,431340 NEXT X:LINE1=0:RETURN ԮĠΠě30000 POKExX&'VlQQLINELINEVAADDOFFSEVVDLISl@"A'yAwB!6AUAVBx~} A AR B) +AR@) @# 67B:,%@,.>:@4,#$ *;B,*0~}@@'0@@@' B%6-@6-@% B(%6-@ 6-@"% B~}-@26-6( <$$( text colors F$$( ~} PSS(K Z--(% THIS ~}IS PRINTED ON A MODIFIED LINEdSS(K n1(1(& ~}x;( ( ((;('MANY colors MAY BE PLACED ON THE SCREEN&&( ~}Š4(4((````````````````````````````````````````11((ˠӠ11((````````~}````````````````````````````````:( ( (:((****************************************.(.(" copyright 1982 SYNAP~}SE SOFTWARE8-@A@,F:Ad,AU86-A@, AdAU,%D:MUSICIAN.DMO0uAY~}5u%6-F:A4,%AV$F:A5,G6-F:A@,%AV$F:AA,V6-F:A,o'@"P:'@,A~}&@:uK6-F:A,%@*6-AV$&;6-P:'AV,K6-&AV$Duo%@%@3%~}@G%@@[%@o%@@u,,6."fffffff>urr6~}7B:,%@,.Z`<|fl0fF68of;p88pf< 8vrr67B:,%@,.Z~} 0 ~~`0 0`TDDTDDTDTDDTTD@@DTPDDDDPT@T@@T$wrr67B:,%@,.ZT@T@@@T@@DDT~}DDTDDDTTDDTDDPPDD@@@@@TDTTDDDDTTTDDTDDDDTTDDT@@Twrr67B:,%@,.ZDDDDPTDDTPDT@TTT~}DDDDDTDDDDTDDDTTDDTTDDDTT@T@`0wrr67B:,%@,.Z 6cUUUUUUUU~}PPPP8pp8Pxrr67B:,%@,.Z** ** UU~}wwUUxrr67B:,%@,.Z<~~~<~}UUUUy0067B:,%@,.0~0 ~ *y @ @y67B:,%@,.~}*y @ @ y%67B:,%@,.*% @"y67B:,%@,.*#y @ @&y&67B:,%@~},.**& @(y$67B:,%@,. $ @*y67B:,%@,.*(+y+ @ @! @+ @~}2yB.67B:,%@,.(* * ** * * 8 @B @6y67B:,%@,.*7y @ @:y7~}67B:,%@,.*# @- @7 @@y67B:,%@,.*|y4 67B:,%@,.** @4 ~}@y/67B:,%@,.*% @/ @y.67B:,%@,.(($ @. @y,"67B:,%@,. ~} *, @y867B:,%@,.**$ @. @8 @y$67B:,%@,.$ @y/67B:,%~}@,.***% @/ @yC67B:,%@,.*% @/ @9 @C @y067B:,%@,.*~}*& @0 @yF67B:,%@,.* *( @2 @< @F @y067B:,%@,.(*& ~}@0 @y$67B:,%@,.*($ @y''67B:,%@,.* ***yM67B:,%@,.% @~}/ @9 @C @M @yC67B:,%@,.*% @/ @9 @C @y:67B:,%@~},.*& @0 @: @y$67B:,%@,.**$ @y$67B:,%@,.$ @y&67B:~},%@,.**& @y.67B:,%@,.$ @. @zMM67B:,%@,.5** *<~~<~}8x8zE +AV+AY@4E0@z$Dz3%6-F:A`,%F:A~}a,$AV36-%@NzR;+ ,%+!@#,%+ ,%+!@#,%+!,G6-@J$RERRORXz- -"~}#@h- B@bz%%@@lz 6-$D:TXTCOLRS.DMOAUAVBx|c .BYTE $80,$D6,$B2,$801920 RSPOT .BYTE 0,0 ;Row1930 .BYTE $80,$80,$A3,$801940 CSPOT .BYTE 0,0 ;Column1950 6} .BYTE $C2,$80,$F3,$9A,$801960 FSPOT .BYTE 0,0,0 ;Flags1970 .BYTE $80,$801940 CSPOT .BYTE 0,0 ;Column1950 4Z/