ML}  X c0C)HCCH Mhhݩh `eCDiCD`  RWH   * 1H0芢@) Y0.Ș`i#(PMRR\ \b Pgi 0 @ $ ࠮UY   0DDԝLH}iN@ )?HI   Y0`HIJH)* J j *  hJJJ)HJ   h i   }  YS S0 i`ϣ߳ϣ߳H J3x}j2h)1 |9 ӭ45(420 *(0241өX.`  J *^)Lkl  }v*PE 5 LN(G = gh ` ghgL ( = LG(0d( L ^E0O +)$IC} H K8 f e h |  _ 8cd CDLI CFa M  LG J^)La`2' }")*F$F$F$F$F$ 5 )ШF/Șa]`efС,LI/A! L^)Za`@ ܬ/^)( }")")`$F$F$F 5$/L /aF@__(LN`ae$$%8(`()` J 0 =LG J^)^>_f t Fg }Ch) |kl5\   Zc[d ?akl LI@^Le>_ >L vJjjj^^ e } fE]_agh`LI:$ȱ$@+[_#{ 0  Խji! ai 0 = I   } U C H h  ˰ 0  F  | Le =  ,  S `LI ,/ 0 v/ | Ơ?} ѩ/  S /L_0?MdLc >_MfLe N`aLGLIcLdMaNLG }J"(+ըHH`Q R !   $ . FȑF! /GF \H"+0+* }! F sLIcm: J~cTF1F  *c+)5! c (, c)1JJJc(c*d} I ,0  Xi Y dF4 5 ,8,0 ʩ0H =h     i} D UDbbFLIvij`*&!ߍ*@h ] 0 ^0`ߍ c 0l$$%}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h}`hhh&JJ ](ll  LI0 |/qcdHH 99 H H  I9 9 } NY =H  I8 d c  |FcdL HII/ Ih8`h`Lcdc`cd`u F }E KE]LG/auF a0BF/aɜɛ׽]E F  |W  KFL FREE SECTORS C}H) *Fh ):FȽ F FCIH' H0 1h0d  i:Fȩ/F.a`CD/}08HDICIHȰ/F`ȱ$>.+.i ȱ$:刄H !A T Hȱ$*?ȝ 2. ? [_}{ ,0-:) 0$:>WI  IТ,LIH  0hLd v i j`C ?(  0(C.` }E 5! .ii  c0N EE < PC)0')AY)ע ? 0E088FG \}dc  (HhLcL3 ^J ^ L}fe 0=ghecfdefa``_Z_0  _ >LXH}FhȑFȽaF^0 ] FFL>ekfl\cZd[L> ef7  ?0^ 0 FJJ]1FfȱFeȱF``B}!08`]EE < 8. 5D}iji( LʩLXW!)   XȌVȌY W`VVW}H8 hYaHXY8 XH hHH \h hX` 5Hh I8ih( l ( l(!`}L\CJfCJfCJfCDfC` |V  HII  INYh `h`c)8jHciPdijIjFIjFIjh` | }V I38 8H0 I  ' H LI8jY8j NYY &I &I &IHeH.!}eIif  `!.莼 2Jjj }.b Ȉ!b FG` ɩLI z "} e H^04 \ Ȍ  8 i h !`I0 `C Y0.`DOS #}SYS I  ` vݩ.C/`WV.b۩bѤC9`CLU R  ,F0(Bߝ$}DEI V0 : , BLVDE`D1:*AR28hhJ ȱHȱIȱBȱDȱEeeHHL%}V)  1*  ,,p-  0  &  '0   L)l, 0 &} &LD1:MEM.SAVE:D1:DUP.SYSSYS,DOS.SYShh =L4,  VLT :C :}T)CD1:DOS.SYS n  * \*`آ R'S )ɀ@  _))% CError lo(}ading MEM.SAV or memory!  0* l*m*n*o* R Hn*JSDn*J-=o* 0m*ʈд =}MYDOS 4)}.53/3- Copyright 1988,˛Disks 1S- 4R D: = D1:ˢ = =1-8.Dir of D1:-D8: *. Dir of D:A. *}Disk Directory K. Save MemoryB. Run Cartridge L. Load MemoryC. Copy File(s) M. Run at AddressD. Delete File(s) N. L+}oad MEM.SAVE. Rename File(s) O. Change Config.F. Lock File(s) P. Set DensityG. Unlock File(s) Q. Make DirectoryH. Wr,}ite DOS Files R. Pick DirectoryI. Initialize Disk S. Set RAMdisk #J. Duplicate Disk V. Set Verify Flag  @-}( 0  =Select Item ( for menu):@  =ɛL)1L,*L,:W@ ,,L=No such item!.}L4,-0{ ПFull directory name?Z"L.Directo3}ry to be used as 'D:'? @ A(5)L.(I: ȱޝL4, CInvalid directory!L@( 4})0Lp-File source, destination? '( @C۩ڭ8邅ܭC BC'0 @(ߍeލd)DЍ) ? C' 5}B Bȱޙ':>Ȍ)C0J* .B D'ȱ/.* #,ɛȝD' ߰ B ?,(0L4, 'u6}t)D'3?&' .'ȽD'?&'  .ٓ'Q?''(#) = =-->' =Q7} =YR_o (J)  0?Cݖ''BU)`''utz0( "?(L0L4,L@nDisk to FORMAT: 8}A B)UTލ1 =(Press for Enhanced Dns)Type to Format Drive 1: =AIYZNj[R VL@L49},D1:DUP.SYSDrive to write DOS files to? AH1:*U)2T) Z B hpT) J<2UT:}C٩ة۩.کL;Source, Destination (Sectors)? A)((C'( A)((((( @(0% =Insert b;}oth disks, type = B( A((/( OB(( CDrives not compatible!J)j)C'Hs''<}h(ɛy CInvalid options! Y@-&& Y@)׍&&(&&&۩ک&&&&8* C4&&&& C48=}*8)ܭ)ݥɂC, CNot enough memory! ک&&`(Mh  & >L@&i &&>}&&mm   >  &((&թԥԍ(Ս(((( ( ((C((?}ԍ((,(0"( (( >m)m) & &("L4,  ( BL4,(, =Insert DESTIN@}ATION disk, press =N T) b( 0U) @((ԭ(խ( ( (((L4Drive, new density: A}AC'ɛ CDrive unchanged.(ު90٨Ȍ(SD  |BL)xԌҭHӭ@@ ʎӆ@B}ӭ@@ :  $ӹ@hөԥX` Aˠ =RAM disk present? =NL;8 =xlon C}or E type RAMdisk? =Aό  L   M   A1| H6: ' =No extra memory available!L;8L7D} & & & =Use default config for 0)ȩ = =K? =NL8 =Size(K)? ? Y@FjFjFjFjE}: =Page sequence? ? [@o* =RAM disk drive no? = 09) `9 -9**H***) 9 Ȋ)h9 F}@@ H'h(#''/'(ɛ ? [@(@: 3 ʽ' L8 =Duplicated sequence number!LG}7 =Wrong number of entries!L7K큅쀄 =Verify WRITEsH}? &; =Number of File Buffers? ? Y@  6 L),R( ?;L4,Drive number or : =ɛL[99L60Ȍ(I} =Remove drive? =Y =Is drive configurable? =YЂ =High capacity drive? =Yy =Is drive double sided? =YJ} 5; =Tracks/side? ? Y@#0M P( 5; =Step rate? =4/ 5; ?;L4, =Drive size (in sectors)? ? Y@K}H(h B;L4,RAM disk drive no? +8L4,Verify WRITEs? &;L4, =WNPp`(`(  L|BSAVE:filename,stL}art,end(,init(,run)) @TUH [@Cp` J< [@؆8օڊ CInvalid START-END range!۩ [@ M} [@ hԄՠAȌZ B04*  0$ڍXۍY֍T׍U,0LCLC SCL@ֆ׌`Load MEN}M.SAV from what file? 0#L4,L@Load from what file?) @TU&̩Z B &0&-&а&INO}IZ'RV0II CNO CARTRIDGE!Ԇխ  )LIRun from what address? ?ɛP} [@ CAddress must be 1-4 hex digits! BHILV =`hh =HH` =0{a HɛQ} = =h` =L4, > = pHH >hh`K: p `(()( i ɀ((L@(`(BD(0>HHR}''>I>U>I>ɛ(ɛ (>(`͓>DH(`(HI`(v5 = =( @B( 3>@S}A (J B0}((HHIIDDEE B @(CɈP(#B = =( @BL2?(B>>((ڤ ܝHT}ݝI VL>L@(" B !B T)  B(L& R XY( @&:0H&()&U} ) .) & ) .)ʩ)`ލD&ߍEBIʎH( V0`ԩ ؠL@ȱM@ȱ)N@ V} CError -- 000&`$8f nAԄձG/ $<68i/(Ԧ`H&եԦ&&eԅheԅԊe(iLe@&&W}&&ԅLe@B ? nA?*(ɛ:./2SX(0ȱ/.ɛ(ލC'ި0X}#:Ȱ :ފ :ȱ: : ~AD ~Aޥ`(eޅީe߅`(` @LA @TUȪ: CFile name noY}t allowed!: )  s( >0+L TUD CNot a disk file!(0` =Insert SOURCE disk, press Z} =,(pӮ(A(O lB |BlB`1(L$ b)de BJKO [}L@O` B()*)))`ȱޙ)):>Ȍ)`D:`OS.SYS,DOS.SYShh =L4,  VLT :C :C\},pLsLF#Խ٩Յ׆  L"C`David R. Eichel rel.ver.1/1/90OS.SYShh =L4,  VLT :C :CSNOwHHEZORMNZAAZLSAHLRSMTYOPSDTFFADDNUTOTLAAL^} @ @_} !"#`}$ 56-@5IF HX=0 THEN ASSEMBLY IS IN DECIMALss;@,;@,;@,;@,;@a},;@,;@,;@,;@,;@,##@@E:206.0123456789ABCDEF&6-@b}06.000d,,(#ŠҠӺn..;@V$@,9@V,9@V,xO-@@Vc}"O67$@&@<$@,.7@<@,z5 68,-A:7@<@,,568,-A:7@,,  (d} ((Immediate LDA #15(Absolute LDA 1500(Zero page LDA 15(Accumulator ASL(Inde}irect X LDA (15X)(Indirect Y LDA (15)Y(Zero page X LDA 15X(Zero page Y LDA 15Y(Absolutef} X LDA 1500X(Absolute Y LDA 1500Y%(%( Enter all numbers in "@((g}7(1(&Addresses: Use 1536-1791 ($0600-$06FF)4(7(X(Please enter starting;(address for ML program?F4Nh}(X A/"@6. AP%6-/ A 6-A:,@ AV)B `3(Not ZPAGE or ROMi}!6(@ A 6-(} A0G((ԠҠ(("@D((e.g. #5 should be #05)G(?"@j}6-!6-@+ A@5(: ? A@ (: K A%@!(3@@ :4A(k}K A0ADD NEW PSEUDO-OPS HERE4B:,!@.7B:,&@,4FORWARD46-B4RESOLVE6-&/%@l}&@8( OKB A0;4POKE% ADDR,NUMBER (DEC)+1; A04ENDA# 6-B:,m}#6.7@<@,B-@@VB47$@&@<$@,A " AP,PRIMARY OPn}CODE CATAGORIES- 6-8,6-8,1 "6- A 6" A@?"@6-@'"o}@56-%@? AJ(6.7@,"@( A`T36.7@<@,#6-B:,34#A^p}4(A h"@Ar'"@6-%@' A|7,4X)7,4YA0$$7@<q}@,4JA  6-A:, !AUA0;-"@)"@)"@)"@;6-%@ A r}T6-P:'AV,&6-+&AV$,<"@)"@J6-%@T ApE-"@)"@)"@)"@s};6-%@E Ap!!"@)"@ Ap AP A06-A:7@,,'"@6t}-%@' A #"@)"@# A  AP7&@,4)YA@7&@,4X)Au}p6-A:7@<&@,,&'"@6-%@' A 0 AP:6-A:7@<&@,,Dv}"@ A N APXJ 6-A:,6-&&@3 6A()!A'@ ϠJ APb 6w}-%AVl A v7&@,4)YA@7&@,4XA  *ZERO Y36-A:7@<&@x},,3!AUA!!"@)"@A0"@A`1 Ap"@'6-%@$1 Ay}'"@6-%@(' A AP A0?6-A:7@<&@,,+!AU5 Ap? z}A'"@6-%@' A`;#"@)"@)"@16-%@ ; A` AP A{} '6-P:'AV,$6-&AV$'$ '"@6-%@$' A;#"@)"@)"@16-%|}@(; A  AP* A04 6-A:,> ApH AR(Ҡ A01 BYTE INSTRU}}CTIONS+ 6-%@+"@A0( A0! 6- A@(! A02 BYTE INSTRUCTIONS~}8!AV(.(Error-- >256 ($100)8 A09 %@%6-%@9"@A 0 ( } A0 6- A@( ! 6- A@(! A0 3 BYTE INSTRUCTIONS G %@%%}@36-%@G"@A00 (   A0  6- A@(   6- A@(}  ! 6- A@(! A0DECIMAL TO HEX (DE TO H$) 6.6-P:'AV,'!86-P:'@,H6}-&$@c6.7%@<%@,67@,.7%@<%@,6-&$AV$6-P:'@,46-&$@}]67B:,%@,.7%@<%@,67B:,%@,.7%@<%@,6-@$HEX TO DECIMAL (H$ }TO DE)]6-6-@/-@@C6-@:7,,&@HO!@ ]6-&@#6-$@%  6}-P:,#$p99ACCEPT HEX OPCODE INPUT AND TRANSLATE IT TO DECIMALzd7@<@,4#%6.00=67@,.7@},G APO6.#a67@,.=:,d$< 6-B:,#6.7@<@,,6.7,<0(A`Pr 4Y6.0046}7@,.7@<@,> APF6.(X67@,.=:,o67B:,%@,.)Yr$r 4)6.00467@,.}7@<@,> APF6.(X67@,.=:,o67B:,%@,.X)r$4X)4YA`p/ 6. @}/6.7@<@&,-67B:,%@,.! AP*6.=:,-$0"@&6.7@<@,0 A`, 6}.00,67@,.7@<@,- AP6.=:,*67B:,%@,.-$@@((*STARTS "6-@(6-2} A@@( ($)J@( ENDS 6-%6-@/ A@=( ($)@ NEEADC1097,AND1033,ASL3002,BCC8144,B}CS8176,BEQ8240,BIT7036,BMI8048*NEEBNE8208,BPL8016,BRK0000,BVC8080,BVS8112,CLC0024,CLD0216,CLI00884NEECLV0184,CMP1193,CPX4}224,CPY4192,DEC2198,DEX0202,DEY0136,EOR1065>NEEINC2230,INX0232,INY0200,JMP6076,JSR9032,LDA1161,LDX5162,LDY5160HNEELSR3066},NOP0234,ORA1001,PHA0072,PHP0008,PLA0104,PLP0040,ROL3034RNEEROR3098,RTI0064,RTS0096,SBC1225,SEC0056,SED0248,SEI0120,STA1129}\NEESTX2134,STY2132,TAX0170,TAY0168,TSX0186,TXA0138,TXS0154,TYA0152D:SA.BASSBC1225,SEC0056,SED0248,SEI0120,STA1129V  BHNd;;@#,;@ ,;@@ }K: +(Please choose:++(#1 - Input hex and get decimal back.++(#2 - Input decimal and get }hex back.((==>)@!! @I)!@PAp& (>:,&&@HAA,!!6.@ABCDEF }GHI!!!!!!!JKLMNO6 (HEX6-@-@B:,J3/6-$@%@:7@:7,,&@G,,&@d3 T!($ }=((! A@6.0123456789ABCDEF (DECIMAL 6-A@ (=$"-@@"6-P: }',5(7%@<%@,'6-&$56-'@  ( ( A@ D:HEXDEC.BAS-@@"6-P: d  KCCdBINARY QUIZn,6-@ 6-}A,FOR ATARI ONLY/6-P:AV$H:@,,#6-/6-A((>:A%,ATARI ONLY-@@}.P:',"@(>:,$6-&. A (>:,6-'@ ( (What is this in decimal?# "}(CORRECT# AP(SORRY, IT WAS -@A  A@ D:BINQUIZ.BASmal?# "l8K@dComplete Binary Tablei9@ ,n'6-@}6-@'6-@x!-AU!(: " *68,-@I" A`68,-@H06-%@}*&68,-@I0 A68,-@H%6-$@%!@A A`8-@}*(=:8,&@H,86-&@ 6-(+6-@6-@'6-@+ D:BINTABLE.BAS|10 *=$60020 PLA30 LDY #$0040 LOOP LDA $620,Y50 CMP #$FF60 BNE PRINT70 RTS80 PRINT STA (88),Y90 INY0100 JMP L}OOP0110 ; Our string to print goes here0120 *=$6200140 .BYTE 48,50,37,51,51,0,33,46,57,0,43,37,57,$FF0 INY0100 JMP Lkh `XL -02%33!.9+%90120 *=$6200130 120 *=$6200140 .BYTE "PRESS ANY KEY",$FF),Y90 INY0100 JMP L)10 ; Chapter 7 - Program 7.2 Atari Version20 ; For Atari XL OS only!30 *=$060040 PLA50 JMP START ; Pass up the equates(}...60 COUNTER = $55 ; This will hold our index70 STRING .BYTE "Now we can print to our screen!! =^.^= " ; Store this text s(}tring80 LENGTH = 39 ; Our string is 34 characters long.90 ;=================================0100 PRINTIT = $F2B0 ; Atari 8(}00XL moved EOUTCH from $F6A40110 ;0120 START LDA #$000130 STA COUNTER ; Load our counter0140 LDY #00150 LOOP LDY COUNT(}ER0160 LDA STRING,Y0170 JSR PRINTIT0180 LDA #LENGTH0190 CMP COUNTER0200 BNE LOOP0210 ;----------------------------(}----0220 ; Printing a character at a time...0230 LDA #$9B ; Insert to start a new line0240 JSR PRINTIT0250 JSR PR(}INTIT ; Do it again...0260 LDA #'=0270 JSR PRINTIT0280 LDA #'^0290 JSR PRINTIT0300 LDA #'.0310 JSR PRINTIT0320 (}LDA #'^0330 JSR PRINTIT0340 LDA #'=0350 JSR PRINTIT0360 LDA #$20 ; Space character...0370 JSR PRINTIT0380 LDA #'(}hL+Now we can print to our screen!! =^.^= UU 'U = ^ . ^ = ,} ; Mostly here to show you're not limited to plain text.0390 JSR PRINTIT0400 LDA #' ; Inverse space...0410 JSR PRINTIT(}0420 LDA #'͛0430 JSR PRINTIT0440 LDA #'0450 JSR PRINTIT0460 LDA #'0470 JSR PRINTIT0480 LDA #'0490 JSR PRIN(}0100 ;========================;0110 ; FIND Utility ;0120 ; Substring Search ;0130 ; for Atari BASIC 0} ;0140 ; Completely relocatable ;0150 ;========================;0160 ;0170 ;0180 ; Variables in zero page for speed01900} ;0200 SADRL =$CB ; Address0210 SADRH =$CC ; of search0220 SLENL =$CD ; Length of0230 SLENH =$CE ; search space0240 ;020}50 FNDL =$CF ; Search address0260 FNDH =$D0 ; and0270 FNDLEN =$D1 ; length0280 ;0290 FIRSTCHAR =$D20300 SINDEX =$D303100} FR0 =$D4 ; Return0320 FINDEX =$D6 ; Source index0330 TADRL =$D7 ; Temp address0340 TADRH =$D80350 ENDLOOP =$D90360 ;030}70 ; Syntax documentation0380 ;0390 ; FIND: Find Text0400 ; X=USR(FIND,A,B,C,D)0410 ; FIND: Address of utility (1536)0420}0 ; A: Where to start search0430 ; B: Where to quit seaching0440 ; C: Search string address0450 ; D: Length of search stri0}ng0460 ; X: Position found (X=0 if no match)0470 *=$06000480 ;-------------------------------------0490 ; This portion s0}ets up the parameters0500 ; for the search by pulling the values0510 ; passed by BASIC off the stack.0520 ;---------------0}----------------------0530 FIND0540 PLA ; Count byte0550 PLA ; High byte, Source start0560 STA SADRH0570 PLA ; Low b0}yte, Source start0580 STA SADRL0590 PLA ; High byte, Source end0600 STA SLENH0610 PLA ; Low byte, Source end0620 ST0}A SLENL0630 PLA ; High byte, Search string0640 STA FNDH0650 PLA ; Low byte, Search string0660 STA FNDL0670 PLA ; Hi0}gh byte, Search length0680 ; Ignore it...0690 PLA ; Low byte, Search length0700 STA FNDLEN0710 ;0720 ;----------------0}-----------------0730 ; This is the main loop. We0740 ; search through the search space0750 ; looking for the first charac0}ter0760 ; of the search string. We0770 ; look through entire 256-byte0780 ; blocks. If the first character0790 ; is found0}, we exit to a full0800 ; string comparison routine.0810 ;0820 ; If the string is never found,0830 ; we just return a zer0}o to BASIC.0840 ;---------------------------------0850 LDY #00860 LDA (FNDL),Y ; Set up first0870 STA FIRSTCHAR ; comp0}arison.0880 ;0890 LDX SLENH ; Less then 2550900 BEQ SHORT ; bytes?0910 NXTSRCH0920 LDA #255 ; Select end0930 SEARCH20}0940 STA ENDLOOP0950 LDY #00960 SEARCHLOOP0970 LDA (SADRL),Y0980 CMP FIRSTCHAR ; Found a match?0990 BEQ FOUND1 ; Y0}es...1000 NOTFOUND1010 INY ; No...1020 CPY ENDLOOP1030 BNE SEARCHLOOP ; Continue...1040 ;1050 INC SADRH ; Next bloc0}k1060 DEX ; Done?1070 BMI EXIT ; Yes...1080 BNE NXTSRCH ; Nope...1090 SHORT1100 LDA SLENL ; Set up last1110 BNE SE0}ARCH2 ; scan1120 EXIT1130 LDA #0 ; Return = 01140 STA FR01150 STA FR0+1 ; ? No string1160 RTS ; found1170 ;1180 ;-0}------------------------------1190 ; Here is where we check for a1200 ; full match, starting with the1210 ; second charact0}er of the search1220 ; string. We have to use two1230 ; "pseudo" registers in memory,1240 ; since the same Y register is10}250 ; needed to access both areas of1260 ; memory (search space & search1270 ; string).1280 ;-----------------------------0}--1290 FOUND11300 STY FR0 ; Save Y1310 STY SINDEX ; Source index1320 LDY #11330 STY FINDEX ; Find index1340 ;------0}-------------------------1350 ; We use a temporary address,1360 ; since we don't want to change1370 ; the address in SADR 0}so we can1380 ; continue the search if no1390 ; match is found.1400 ;-------------------------------1410 LDA SADRL ; Cop0}y to temp address1420 STA TADRL1430 LDA SADRH1440 STA TADRH1450 ;1460 CONTSRCH1470 ;-------------------------------0}1480 ; As long as each character1490 ; matches, we continue to1500 ; compare until we get a failed1510 ; comparison or rea0}ch the end of1520 ; the search string, which1530 ; indicates a match.1540 ;-------------------------------1550 LDY FINDE0}X1560 CPY FNDLEN ; Past end?1570 BEQ FOUND2 ; Yes: MATCH11580 LDA (FNDL),Y ; Character N1590 INC FINDEX ; No: increme0}nt1600 LDY SINDEX ; Compare to1610 INY ; source.1620 BNE SKIPINC ; Hit page boundary?1630 INC TADRH1640 SKIPINC16500} STY SINDEX ; Update1660 CMP (TADRL),Y ; Equal so far?1670 BEQ CONTSRCH ; Yes: continue1680 ; Comparison failure,1690 0}; Return to main loop.1700 LDY FR01710 CLC ; Used in place1720 BCC NOTFOUND ; of JMP (relocatable)1730 ;--------------0}-----------------1740 ; Match! =^.^=1750 ; Return address in FR0 to BASIC1760 ;-------------------------------1770 FOUND20}1780 CLC1790 LDA FR01800 ADC SADRL1810 STA FR01820 LDA SADRH1830 ADC #01840 STA FR0+11850 RTS---1770 FOUND20n}hhhhhhhhhѠυҦ٠0ԅ`ԄӠ֥˅ץ̅ؤ֤؄e˅4}i`hhhhhhhhѠυҦ٠0ԅ`ԄӠ֥˅ץ̅ؤ֤؄e˅4l" 4 OPCODELNNBTDNADDO@@ d8}ҠiQ +-@7(ԠҠ:(Q(Loading opcodes...nDD;AV$@,98}AU,9AU,;@,;@,x-AU} "68,-B:,++67$@%@<$@%88},,. 68,- 7 +-@7(ԠҠ ( (= A/(Starting Address 8}(Decimal)3= B!! )!BU5A 6-F:,6-8,++6.7$@%@<$@%8,,18}(@@(1@@77%@ABADAPA`Ap:6-@ 6-F:%8}@,,!A(:6-&AV9(@@ /( %@%9 A+( !6-@+8} A!( %@%! A#@@ (# AM(F:%@,%@@ 96.=:F:%8}@,,C AM AG(F:%@,%@@5(F:%@,G@@ 8.6.=:+F:%@,%A8}V$F:%@,,,8 A,% 6-% %6-BU6&6!BU56-@ F:B2y,"@AJ 8} ANK(7@<@%+8,!@,,7@%@$+8,!@,,N$DDBRK,1,ORA (X),2,?,0,?,0,?,0,ORA 8},2,ASL ,2,?,0,PHP,1,ORA # ,2BBASL A,1,?,0,?,0,ORA ,3,ASL ,3,?,0,BPL,-1,ORA ()Y,2,?,0,?,0CC?,0,ORA X,2,ASL X,2,?,8}0,CLC,1,ORA Y,3,?,0,?,0,?,0,ORA X,3CCASL ,2,?,0,JSR ,3,AND (X),2,?,0,?,0,BIT ,2,AND ,2,ROL ,2,?,0JJPLP,1,AND # ,2,8}ROL A,1,?,0,BIT ,3,AND ,3,ROL ,3,?,0,BMI,-1,AND ()Y,2&@@?,0,?,0,?,0,AND X,2,ROL X,2,?,0,SEC,1,AND Y,3,CLI,1,?,00CC?,8}0,AND X,3,ROL X,3,?,0,RTI,1,EOR (X),2,?,0,?,0,?,0,EOR ,2:HHLSR ,2,?,0,PHA,1,EOR # ,2,LSR ,3,?,0,JMP ,3,EOR ,3,LSR 8},3,?,0DGGBVC,-1,EOR ()Y,2,?,0,?,0,?,0,EOR X,2,LSR X,2,?,0,CLI,1,EOR Y,2N???,0,?,0,?,0,EOR X,3,LSR X,3,?,0,RTS,1,AD8}C (X),2,?,0,?,0XKK?,0,ADC ,2,ROR ,2,?,0,PLA,1,ADC # ,2,ROR A,1,?,0,JMP (),108,ADC ,3bEEROR ,3,?,0,BVS,-1,ADC ()Y,28},?,0,?,0,?,0,ADC X,2,ROR X,2,?,0lDDSEI,1,ADC Y,3,?,0,?,0,?,0,ADC X,3,ROR X,3,?,0,?,0,STA (X),2v==?,0,?,0,STY ,2,S8}TA ,2,STX ,2,?,0,DEY,1,?,0,TXA,1,?,0LLSTY ,3,STA ,3,STX ,3,?,0,BCC,-1,STA ()Y,2,?,0,?,0,STY X,2,STA X,2@@STX 8}Y,2,?,0,TYA,1,STA Y,3,TXS,1,?,0,?,0,STA X,3,?,0,?,0PPLDY # ,2,LDA (X),2,LDX # ,2,?,0,LDY ,2,LDA ,2,LDX ,2,?,0,TAY,1,8}LDA # ,2DDTAX,1,?,0,LDY ,3,LDA ,3,LDX ,3,?,0,BCS,-1,LDA ()Y,2,?,0,?,0OOLDY X,2,LDA X,2,LDX Y,2,?,0,CLV,1,LDA Y8},3,TSX,1,?,0,LDY X,3,LDA X,3IILDX Y,3,?,0,CPY # ,2,CMP (X),2,?,0,?,0,CPY ,2,CMP ,2,DEC ,2,?,0KKINY,1,CMP # ,2,D8}EX,1,?,0,CPY ,3,CMP ,3,DEC ,3,?,0,BNE,-1,CMP ()Y,2>>?,0,?,0,?,0,CMP X,2,DEC X,2,?,0,CLD,1,CMP Y,3,?,0,?,0JJ?,0,8}CMP X,3,DEC X,3,?,0,CPX # ,2,SBC (X),2,?,0,?,0,CPX ,2,SBC ,2FFINC ,2,?,0,INX,1,SBC # ,2,NOP,1,?,0,CPX ,3,SBC ,3,IN8}C ,3,?,0GGBEQ,-1,SBC (Y),2,?,0,?,0,?,0,SBC X,2,INC X,2,?,0,SED,1,SBC Y,3''?,0,?,0,?,0,SBC X,3,INC X,3,?,08} D:DASM.BASGBEQ,-1,SBC (Y),2,?,0,?,0,?,0,SBC X,2,INC X,2,?,0,SED,1,SBC Y,3''?,0,?,0,?,0,SBC X,3,INC X,3,?,08 `int to our screen!! =^.^= UU 'U = ^ . ^ = ,TIT0500 LDA #'0510 JSR PRINTIT0520 LDA #'0530 JSR PRINTIT0540 RTS0470 JSR PRINTIT0480 LDA #'0490 JSR PRIN(N10 ; Chapter 7 - Program 7.2 Atari Version20 ; For Atari OS A & B only!30 *=$060040 PLA50 JMP START ; Pass up the equa }tes...60 COUNTER = $55 ; This will hold our index70 STRING .BYTE "Now we can print to our screen!! =^.^= " ; Store this tex }t string80 LENGTH = 39 ; Our string is 34 characters long.90 ;=================================0100 PRINTIT = $F6A4 ; Atar }i OS A & B have EOUTCH at $F6A40110 ;0120 START LDA #$000130 STA COUNTER ; Load our counter0140 LDY #00150 LOOP LDY CO }UNTER0160 LDA STRING,Y0170 JSR PRINTIT0180 LDA #LENGTH0190 CMP COUNTER0200 BNE LOOP0210 ;------------------------- }-------0220 ; Printing a character at a time...0230 LDA #$9B ; Insert to start a new line0240 JSR PRINTIT0250 JSR } PRINTIT ; Do it again...0260 LDA #'=0270 JSR PRINTIT0280 LDA #'^0290 JSR PRINTIT0300 LDA #'.0310 JSR PRINTIT032 }0 LDA #'^0330 JSR PRINTIT0340 LDA #'=0350 JSR PRINTIT0360 LDA #$20 ; Space character...0370 JSR PRINTIT0380 LDA }#' ; Mostly here to show you're not limited to plain text.0390 JSR PRINTIT0400 LDA #' ; Inverse space...0410 JSR PRIN }TIT0420 LDA #'͛0430 JSR PRINTIT0440 LDA #'0450 JSR PRINTIT0460 LDA #'0470 JSR PRINTIT0480 LDA #'0490 JSR P }RINTIT0500 LDA #'0510 JSR PRINTIT0520 LDA #'0530 JSR PRINTIT0540 RTS0470 JSR PRINTIT0480 LDA #'0490 JSR P QhL+Now we can print to our screen!! =^.^= UU 'U = ^ . ^ = $} `int to our screen!! =^.^= UU 'U = ^ . ^ = $10 ; Chapter 7 - Program 7.2 Atari Version20 ; For all Atari 8-bit models30 ;==============================================<}=====40 ;50 ; This method of printing is the proper way to print60 ; output to the screen according to Atari.70 ;80 ; Fo<}r more information please see the Insight: Atari90 ; column in the January 1985 (#56) issue of Compute!0100 ;0110 ; CIO is<} used in this method and it is just0120 ; as easy to use as the undocumented method.0130 ;0140 ; In fact, it is actually e=}asier to use as it is0150 ; designed to print entire strings or buffers0160 ; instead of just one character.0170 ;0180 ;==}=================================================0190 ;0200 *=$06000210 PLA0220 JMP START ; Jump past the equates...0=}230 ;==================================================0240 ;0250 ; CIO Equates0260 IOCB0 = $03400270 IOCBCMD = $03420=}280 IOCBAL = $0344 ; Buffer address (low byte)0290 IOCBAH = $0345 ; Buffer address (high byte)0300 IOCBLEN = $03480310 C=}MDPUT = $0B0320 CIO = $E4560330 ;0340 COUNTER = $55 ; This will hold our index0350 STRING .BYTE "Now we can print to=} our screen!! =^.^= " ; Store this text string0360 LENGTH = 39 ; Our string is 34 characters long.0370 ;====================}===============================0380 ;0390 ;0400 START0410 LDX #CMDPUT0420 STX IOCBCMD ; Request output mode0430 LDA =}#STRING&2550440 STA IOCBAL ; Store the address for STRING0450 LDA #STRING/2560460 STA IOCBAH ; Store the high byte too=}0470 LDX #LENGTH0480 STX IOCBLEN ; Store length of string0490 LDX #00500 STX IOCBLEN+1 ; Zero for high byte0510 JSR = }CIO ; Call CIO...0520 ;--------------------------------------------------0530 ; Printing a character at a time...0540 PRIN= }TIT = CIO ; Use CIO for output routine0550 LDA #00560 STA IOCBLEN ; Set length to zero0570 ; CIO will now output single = }characters in accumulator when called.0580 LDA #$9B ; Insert to start a new line0590 JSR PRINTIT0600 JSR PRINTIT ;= } Do it again...0610 LDA #$FD ; Bell character0620 JSR PRINTIT0630 LDA #'=0640 JSR PRINTIT0650 LDA #'^0660 JSR PRI= }NTIT0670 LDA #'.0680 JSR PRINTIT0690 LDA #'^0700 JSR PRINTIT0710 LDA #'=0720 JSR PRINTIT0730 LDA #$20 ; Space c=}haracter...0740 JSR PRINTIT0750 LDA #' ; Mostly here to show you're not limited to plain text.0760 JSR PRINTIT0770 L=}DA #' ; Inverse space...0780 JSR PRINTIT0790 LDA #'͛0800 JSR PRINTIT0810 LDA #'0820 JSR PRINTIT0830 LDA #'084=}hL+Now we can print to our screen!! =^.^= BDE'HI VH V V V= V^ V. V^ V= V VA}0 JSR PRINTIT0850 LDA #'0860 JSR PRINTIT0870 LDA #'0880 JSR PRINTIT0890 LDA #'0900 JSR PRINTIT0910 RTS084<y V䩠 V V V V V䩡 V䩀 V`! =^.^= BDE'HI VH V V V= V^ V. V^ V= V V@)b#DOS SYSb6'DUP SYSB3]SA BASBHEXDEC BASBBINQUIZ BASBBINTABLEBASBCH3 ASMBCH3 OBJB CH7 ASMBCH7 OBJB CH7XL ASMBCH7XL OBJB%CH8 ASMBCH8 OBJBDASM BASBCH7CIO ASMBCH7CIO OBJ