' JJJJ ?\>' L-=l>  ԠéԠˠ#~?  xDIR ERA TYPESAVEREN USERY!yO#< Ty#O 3ǯ21y_͸2y2ͽ:ķ˜1͘A͌>>͌92^ :˷¥.!_~#fow]ɭʎʥ!v"!çREAD ERRORçNO FILE^:˷#͘*~ "Ʒ"͌#>?͌͘ =_.:;<> Oƅo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6"  Ň!˶2:2a{_:˷ʖ:˷>Ľʖ:=2–!B!6#5ʖ:˷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<į2: :):>:(y2E!|"*wɍ`JX)^>EE??++ ԩ  [\ ĭ ?  JL ``LLL $Lq<`ΧԠĠڸčԠԠ͠Ԡ؍2>o:= gw8H<8H=` }Hx / hJ Leh<> > @A @A>i =<>+ LeÍڍh@(L>*// -П( ( $8` %  ZNx`. }x$50x.$50xL JJJJ`Hjf5 }h $50x`  Ȍ` Hx  -(hL(h8֩`Lx (`H݌hHhHh݌>?F؅G(jf5(  ;  R( FGj 0x j $xxH` ( Rh RL.xxH h  !"#$%&'()*+,-./0123456789:;<=>?x&& 8 , P ; ' / \ ; & ; x)*++`FGG8`0($ p,&" cI꽌ɪVɭ&Y & &Y &   꽌ɪ\8`&&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`V0 ^ *^ *>`+*xS&x'8*3IxiU ,>J>V J>V `8'x0| &HhHh V Y V '&Y V x ꪽV ' `Hh` ! ~ 3#0 Wx x ƀ Ƃ G ~ # 3x~#B!Y~ɯ2:˷=!˾ý:˷=!˾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ɯw4!Y~ʆ͌†t=ʆf ^ T ɯ2o&)|+!<ͧЯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C :ٷ:ddslO s#r:EϷ͊:==»y==»*Ww#*"͸*:G#š"͸:!پw4!iw:Z!E~=26 w ~>2!E5T*C!"C"C!w# F! w͌xѯ2͢*C ~<wʃG:٠!٦ʎì 4~ʶ¬:<ʶ$ʶïZͻЯx>2>2ͻ:!پZկ2:EϷẅ́͊Ͳ> *C ^OT *C~wD -'  -@ͦ~^*C Ox! N!Fwyxʋ>ڋ>*Cw~#+w#w+ɯ2E22i^ *C :ٷ~w~͔͔# # ::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sӖ-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5:AϾ#~$=2Ek͌ ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:مo$*C~i6iw**{#zr+s{ozg**͕** Ѿ,w͜͸Ͳ!!N#F$**O!~#O: \зSЀ*C :ٷqn& ^#V>O^"*}:*)=":O:١o"*C *C!ͮ~2~2ͦ:٦2ͮ:ЯO:فw:w |g}o*ٯ# 2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>گ*w#w*w#w'û*ڷ! J*""!N#F*^#V*~#foyx*{_zW+*x: 2 p&x~+é7ͯ2 H! >w_: ! Ͼ5ͤNkͱ¦ͱxʊ#Nx: Ϸ! ϖ2 ͤ! 5™#wO~x½p Hy<< ڷʑ :!qMD# O͐  :ϷE B 2>: Ϸb# : Ϸy! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! Ͼ Hù H H $O͐: 2 *CN# ʽY̙̥̫̱"C{2!"E9"1Aϯ22!ty)K!G_^#V*Cΐ~؃E؜إث ,&-AGMSϛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6=qf^!~2>`~2˯2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !˶ Â$$$ SUBÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yʸpsp2mÆÆf ͧÆFILE EXISTS _: É: :˷ʉ=2)ͽÉ T!@k!}|qs+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!BϾw!>2*C~=2u:B2~2wE:A*C϶w>"!""ٯ2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*٤W}_*"}o|g":ٷʑ*C6:ٷʑw:2E**E}DQ>2C0T"I !>"H>2J: !͢:d::d!s~B#1!P!J߇o~,foɷp:BB Apple ][ CP/M 56K Ver. 2.20B (C) 1980 Microsoft ;ۯ2>EE??++B#1!P!J߇o~,foɷp;ۯ2:޷;ۯ2e ]~6(*} *:޽ y(3:޷s:2G<2x/a2:oa":޷zޯ2{![:޷ <2:>sɯ2>!>2!;:*     1>2>2*"?ۯ2:08 !"Y"BT"->2:8Y"/:8Y"F~!xq!;`~0,~!M;!x~>.~8[q>:޷ 2y2!!{o!:=8 ~y!3w.y2Cɯ2>!w#w#wOa."y .:g"*"!~((5:# :*޽ :޼ $| 8g,"ޯ2!"_!ޅoN!޷((+! ~O#O:x >2ޯ2:޷*(*D*:wk*(:$_"~28 ?@wx( !;!܅ony 2$8!2E!y>>?22!ɯog"$2E!.B...X&*}(8.|8&"$պ`~(,qy2E[22G: 2:O*:P!O#~#'۹~y/:02?"2O: K*:*(0**:8'(*:08* *: 8(*7!w˹#~(=5:!( +_ywɷ+ͱ*:]lc_O{- OMG!~_ :( 6>83! ~èCfuÇKmVÉÎÓãݯ`iޓښ:ޓڦJޓڲZޓھjޓzޓߊ / !~ `66= !; !{g1:Q!͢گ22>2!"2!"͎>2M80 COM M80 COM L80 COMT CREF80 COM!"#$LIB COM&%&'()DDT65 COMH*+,-./012CPMXFR COM34SRCVT BAS 56DEFRPRPC1C1M2MPzMP2NC2NZ1PQP2PE2POQRzSR1ZQD2:DAz)DA DAXrDDsDDRrDIsDIRz-DXz1DY3*HLDOCALz5SRJXI8ACLIBACRO:@OVBVIAMErDEGOPjOPz&OPQRRAz9RARG*RIsTDRsTIR*UTR UTsUTDsUTIAGECHLz*HAz.HPz2LAz6LPOPR"OP UBLIC ~# ( X*?#"?!"?:?=2?!?>2A2A͇ (͵(a (͵(08w#!(? ( (w# w:?=2?͇: ?( ͙PЯ2 ?PͩN8!ͤH> 2(?͓L> ͓L7E0 !"#?2?2>2>=2A*?"?:>0x 2>x* !"&?:(?* CSzEQzGEz ITZITzLTz0MIzNEzPLzRKzPVCzpVS>YTE3ALLSALL1Cj?CFzLCz LDzLIzLV1M/MA?MCMPzMP2NC2NZOMMONOND1PQ PrPDsPDR2PE*PIrPIsPIRj/PL2POzPXzPYSEG1Z'AAj'AA ADBCACI"CR CX@DBR ECzECEFB"EFLEFMEFSEFWGENDzTRANSFERMAC4789:;<=DEMO MAC&>?@ABSTAT COM0CDEFGHDEMO PRNXIJKLMNOPQRSDEMO RELTDEMO COMUTRANSFERPRNuVWXYZ[\]^_`abcdTRANSFERRELe^#V#N! ; !(?"&?*#?|Ė:?(?a*!??Nwy# !?"?!? q# x( ( ;(:> :?V( M( D(X23A=A:C5D0E+M&N!OPQR UVX!?~ p:@2@%No END statem>$2(?$2%?͖:ʜ:%? :?= ͖!?~04#>$Nwy#*&?+~# ʖ3͖ A~#~"(( .*&?+"&?:?n3($ͩ/" 0ʹ9/"&?3:>(1:?(&$ͩ/"#? f: @4͖ Ix:?(Bʖ: 5:? o`(|#~! _EXzEYBFBIiISJNZEOSFSECTSEGWIiILSE ND NDC NDIF NDM NTRYz!OR QUQXjXXXITMXTXTERNALXTRNDIN LOBALkvALTvLTF2FB9FDIFFEFF:FIDN3FNBFTaM)NQNRNCz%NC8NCLUDEzNXz"NYrNDsNDRrNIsNIR"NRNXF1F2FDEFFN! HMAC"A_s# x !P"!?w$$$$"A "A!"@!B?~((O#~ $w#6 #w)M>2>2A2Y@2 ?2>2>2?2>2A2?2>!? w#<2?2?2?2?> 2>:`B2>:eB2 ?>;2?<2?!"?+"A+"?*A!!123A2?2 ?2?2A<2 ?F!(?"&?TRANSFERCOMfent:?.(o$(r[~8 x0,P0 &x8"P0 ?A## # ~~_TSZBB*BIR4BCzEBCj7CFzBECzFEDzJEIZ6ET"ET3"HLD0IMZ8LAPHLZ:RAZUB#UBT y@>*1è>1yKͶèk:>0::> :> vEͶ{õ:> :>8d񇇇@Oß :>Ĝ>1Gö:>k`Ɲ1p:>(.͟@{ԵĜ>:1ècĜ:> öEk>61KB@{ԵYPyõ:>O:>Ĝumv̜1umGuO1yõu]G01èx4,ĺɷÜ0(͜Ü0z(<Ĝ{Y! ^#N! ^#VuԜ'x1{?1u8Ĝ'1Vܜk:>͖#:@ P:>0:>emu}yaq)%-5=9!1 $,IEMU]YAQJFNV^  *&.6>jfnv~XʈHh(@`8xyʶ=(8= Wy_!  :> ky   :>ö:>ö>!{̵:>((((c:>Ĝ>1:>1>F1E{õVGk:>(- Ĝ:>Ĝ>1yBOVĜx#̜k:>Ĝ1VGk:>((( :>Ĝ :>Vܜx#̜k:>̜Gx(ĜA:?$.?_ ;OW"?͸*FAz:EAO s#rw# ?8>wG#w"?#w#w#w###w# "!?####p*AͲ<*?|>!ͤH?Symbol table full |}:>ʑ:dBʑ: ?‘*?~@‘8>>N!?F#~N *HAFB(G~TL*UIzNAXzRAY$ITLEzVSXzZXAz^XSzbYACHGR@ORRA*RITHL680807Z80?6502%COMMENT&CREF'DEPHASE(LALL;LFCOND)LIST*PASS2+PHASE,PRINTX-RADIX5REQUEST.SALLx( 2>0:>0̜o:>}(( z( ʜ :>̜:>Ĝ:>:>ÜsGc:>( ĜE>1{͵VԜ:>Ĝ:>=ĜVԜk>1kvAöVԜkvc:>(Ĝ>1ĜE>1:> 1>2>œ:><(=œ<2>ů2>x( 2>0y,P:>0700:>8O0'y1è08 :> ?0(c:>ĜP>100:>Ԝ O0yH1y1:@G«'xG *?*?Ͳ##M;zC(  lyy _W! # # x>2>2>͖#:?(:> xÖ:>_N0Jy("x :>8 x z +~(K& +Nx:> xīzĜy̜( ((++N(ĜNyÜ>*͖#x:>ēzS_ͯ> ö:>Ĝ:>(1 :>ʰ:>ʀԜk :>Ĝöc:@:@k:>̜ 83:>O(>1yCͶ2@2@è:>(>"1:>Ĝ>21:>:> 0 Ĝ:> /`Ɲ1ͶèĜk:>Ĝ>12>O8 #~ '+~w#~w#s#r#*?s#r~@w:>#~~~~#^#V#Ͳp*?x {~#z~:? *?#(:? *?~*?#~wxGð>1y1ÂuS1u]1um1um1yuO1yõy01èumOG )'/)a*+V+)++E0+\76-B7v/v/I,P,P,I,[,d,m,n,88\7.\)_.6-~6i-a-w9-;--T;K93.----,,-.&.-..,,.. ./. +a*++I,@  F"  (81oXxi{õ:>=Ĝ>1@öVܜGx#(0:>(=ĜcVܜkP:>(:>Ĝ>1kVܜx#Ĝ>1kVܜ:> Ĝ:>Ĝ>1uԜOGs7:>(>18{̵:>̜ :> 1kĜ>1cґBs:>̜('(:>/4 ( (//(&‘:A (&(x70G!JA:?Z(2?~!A "HA^#V!?A w# !?~86!?N z(a^#V#^#V#~=(?G # #~= 4#"?#~+?BA!?Aw# w#s#r(+><*!?~*A####~7#_"y,(!>~ ":?~6=/(=)=)Âͺ*&?~#"&? (oA008:87}ɷ[8a8{0}4 4 ‘ͺ*&?+"&?*&?#"&?4a8 x!? q# !?6#72>a8 w# y(0Gy2?x04$.@?_/>1yWö!@@AFwx# :>G:>7G*?#"?»>**?@Ͳ*?:gB(J`))0) 0 8!:@( :@8(6!6"6'6*#"?G:@@2@:>G*?#"? :@2@!@~( ͫ~@Ç~ʌ#~?Gxn#~W*@z(|(|ͣ'':/AO> ¤(î(>O$G|(Ͳ|(Ͳ?|(ͲW_ |( |(Ͳ|({_z87(?:/A+)*@*@\W:/AO> *@]W:/AO>:@@2@!@4~?( o0$w5y(:@2@t'}m_t'}m_t'}]_t':>(":>(7͸W( *Aw7$Gx(2@"@Ħ:>> ~0O yO:>2>@x##^#VO( #^#V"?y yff7͸"?~B8!~8:>ĺ2>##~2>x#̍#+~+&"#~+&" "#^xOB!" ~(  2@ h f:?X ͷ(:?(:? :? =:? (:B<( 23A=23A<2 ?F:A(5= :A :? &>+2@>+2@:? :?x:? :?:>(>D2@: ?(>C2@:3A (:? :? !?4:?$:3A :dB(>N!?~# : ? @:A= :A(!?~#08 > :?(> !   M&W&a&k&&&A''(&&;(E(P(](b(j(((&(((( )")B)t'zW{_t'zW{_t'zW{_*@|/W}/_:/AO>¤(î(*@|/W}/_:/AO>¤(î(t'z()t'#+}zW{_*@:/Ay&:/AO2@:/A (*?"?*@̈́'>¤(î(*@:':/Ak? =x*&?+͊ 2?*&?++"&?͊"&? G0g:> o|D( B } |B(%D( /!͊2@>A͑8) #^#V"?G-2@#^#V"@>C#^#V+~8><2@= G@>B#~ ͘:@@> >2@>A̻͑ͻ2@{2@!@"?R:>ē*?##"?:@G:@@x_:@G-*? #"?CͻBûx x(6!6**@##~#f%G%y2/A͞$(@ :@ 6̺0͓$:/AOw$G:@x4, :@( 2@>_:/AO:@(w$%x͓$G:/AO%w$#_y{ *?YG#!%_~x ͺůG|2@G%y2/A͞$$0(:/AOw$͂2/A:/AG2@O( x怱!@w*&?+N{*@2f'!4 'o $! OfXOR AND NOT MOD SHL SHR OR EQ NE LT LE GT GE LOW HIGHNUL TYPE :> :>:>Aaf'4ɯG og2@2@2?2>2@2@2@2>2>2>=2>9"@*BͲQ62$2>n$$$8w$O2@͓$=y%% (?~# ( > > O:3AyNÓL>2?:?(> N! @̓!̓*?#|+:?((*͌*?#"?:?|(>-N͌!Y@̓>SN~#NPX 8|ď>: MACRO-80 3.43 18-Sep-81 PAGE :? Q(*>#">*>#">:>ʑ:? ‘!?"?͓O'(y'( :/A  =:/A y 2@:/AO>¤(î({_zW*@\':/AO> ¤(î(\' DM!>=( ))0:/A *@:/Ay*@ͣ':/AO> ¤(î(z̺zB'|G|(|'''|/G}/O!> 07>{_zW}o|g= |g}oɯO_y$!0 8ܵO:>=ܵ<_PV' ͡ ͷ xr x:?2?=":>0:?$ *&?+~$ #"&? xr :?0]W(X!## (O(#? # !f# ~ 2>h;( ( 4&44 xf*&?4# 4# 7$ͩ/#~G İxw+0"&?Wʋ"o6"6'##"?-x(:@@x(1CͿBͿx*?++*@#:?G~w#s#r#*?s#rCͻBͻ:@2@:@(!x- z R2@*@#~2@*?@Ͳ*?:gB(!)0) 0 "?DExx0:8: ?( : ?@z̺̺$|=$yWx=z(z(#(( ( ĺ>G͓$G#"1Az  ͫ%"?"@y2/A͞$%(020A((( ((ͫ%:0A*1A!&o>g~#fo:/AO*1Aĺ(y$"?yͮ( *?% *@%{ͮ(zî(! ( ('ʹ"ʹ((:)(9+(8-(7*({/(5;(,(5_:>{0<( >( ĺ>>>>>> > > >:>(!> x(=(ͺ:>> > w͂)>w(>w:>0:>(=(#!Gk f :ko2?k fx keok" :>0}( o|(g>"! ~*?w!?"? '"!*?:?( *?:?:?x *?*?Ͳ"?"?RA>͢y8>͢CͿBͿy *?+~ڊxGW>͢#######FͿ# W>(_x GxG ɯxG 7xx!@~:>w#4 ͂N>2@͖5}S_t'}mo{m_t'}?_*?*?Ͳ:/A_ :? O > 2?m/͖#x 2?xG(:? *?*?Ͳ:?G*?"?:>-"? :? :>R:4A *:4Aȯ24A͖ *>G2?<24A2?*? *>24AG2?*? *>24cG(4 (S>(Rf<2A44 (3:A(d8 ;,<( > ( w+:A 6+͵2xĜ"A&i"A8Ø6>76*A>2A.62(' 4;4'( "(ͬ3G3 4("A/<͏2A"U2!2X2.REPT/IRP/IRPC/MACROUnterminated U2!e2X2> > :B<> ͓L> ÓL!"2̓:B<äHConditionalSymbols: Macros: !9*BͲQ6:A!"A"A*A *B+<2A2A2A*A$Ͳ0"A%<=~<=(:A<2A:A:A=2A<#~ :A?<2>Â5:>_2>W!>7~ ,>0w!>4:?ʑ2?!>(4:>=2 ?͐,z͐,z/(į:>͂=:>͂7:?(!͖W  B(?:?”+!"&?,7, "&?x(7, ~, #"&?, "&?y  # ͺ<Ĝf 4f& 4+~ x x(!?Ͳ0#6 +ͬ3&.6:ʬ3! B(ʑì3!W6×?Stack overflow, try more P switches ͔+:? ("A͆26> a6͖:̖2( (?/< ɯ/<͏:A2:>02!>4~=0!5A~ ! @~ !B#5A~# ( ( ( ( !.Ap#"?R *!P"A8"?~w#~@1~(#^#VR*? R *?{Rj*&?Ԗ#!"?"?}2?AG2?*?:4Am/:??(o& ^#V*?Ͳs#r2?*?##:>(:?(*? R2?x"(' nGkk*&?++( k ( 4(x,( ;(( "&? 2y8-fGkk1k ȸ f(4,(1u:?͵y,a*͖#x3K34;(ͷ /<Ï<:A(*A44*A~($G+( ~/_~(=G+~(6+<=(+~>.66?*AO DE͖4?5%(% :A 7"A:A=2A4& .*&?~ ($ ( ͖W3"&? >&2Am& :A >&/<2A*A~(? O+  x+~0:A*A~(? O+  x+~0<*&?͖W3 (G~# ( K3xK3G?3&?3x"&?4 ( (xK3 *&?+#~> T], z  #*&?z̜}O|G:? ͖OĜ7$ͩ/#~@w ~İwy,( @OY@;*&?+~# ( ( (#"&?(œk'œOk-xk)ĜÂ>2?A2?;2 ?5͖- (BW-~@w,͖º>2 ?>2?2?Â>22A*Ae<(*(?z<6 *A*A*A"A"A"A bk:A2A_7ů2AÂú:A(T͖:̖O y y y@ :A=2A:A<2A:A:>ù+:A#~>,!ɷ͆2"A;4O:? (*A 3y6+,Ĝ()k<Ĝw+:? $!|2̓!?44!JA>͂=:?8$!?44!q2̓!A>͂=<2*>|(͌:B<23AČ23A!1X2!1X2*>|('>,N:B<>,ēL͌:B<23AČ23A!1X2<20-R*@|(RͿ:dB(N>ǸMMNo Fatal error(s) Warning(s):?GRê0"('ĜO{(k ʑ 4 Gŷ1xx(1,(͔+>*y, uCu+:iB(z*?#"?:>Ļ*?:?GÑ)*:>:?U<2?>*͖#ͨy,(:>=+G2>:>= 2>:><2? ,2>Â͡:>ġ:>̡!>(=‚4=2,5 5 5;5!k 6w+4"55͔+:? F:>(7(PX 8|H5>:Q)0͚5>) 0͚5= D͇5E͇5 >0%x͐5x0:8 0O:8>0ͬ5y*5w+"5x*5 5Ow+4( (Bw+4(4(w+ 5 5555{=*&?͂:>:?8>?!5AG~°w# pm//œ͖e//œ͂$#~°~$w *+"?>2?!"?Í)>2?:?ÿ͖ $ͩ/~w#~d ~w,(͜wͰ~Bدw#w#w#w͖~Ժ#~(ĺy/"#?0:?2?Ux«x 2?*#?"?x?>:eB/o:>(}2eB2 ?>2>>2>ͯ2>>2>͔+2>zœ:? {=ʜҜ<2>gk͔+zœ:>{( ܜ:? {2?F$͖œ:?8>!?w#"?:>R,(: ?º*&?+P(P=2 ?*&?~#"&?!0(œk'œ͖œ'œk)œAͲ :A x *A##~#0+6e<((?e ͓L> ͓L:?  ʜ2AO4 (ʂ9Ø66!(?:AO~( #!ɷ#"A~(w͆2"A;4 ,(w+2A2Aw#wͨ;(s#r"A*A͟;s#r{_*A{̳;*Aw{(T<"A{_ͨ;zʳ;*A} }o~e<{(T<{_ͨ;{ȯw#w*As#r͍;*A͟;q#p*A{<*A"A~{_͟;{_{(T<*A*A:A *B6*A2A2A.628 (82Aã8͖Ĝ*A :A<2A?~#^#VG +͛>_ d{ e{@A! ;.7"A"A2Ae<( (?e{(]{_!~NV>###~#N> !@5 :@w!?4:?$*?~@w> > N>*>M>C>UN*?#{G#^#V#^#V"?-"?#~ R>IN!?"?͓*?6!?Ã~G#^#VRB2eB2cB2iB<2bBHů2YB͆JCiJC .I>2YB!kB]J> 2C2 C2Cy,2cBXI:YB2cB͆JC:dBeICiJC:C2_B 2^B‚I:YB@2YB!B]Jy=7͆J 7iJCI 7!B]J:YB!kB=J!B:dBIBC> =I=J:aBI:^BI:_B2aB _! w# ! wa |!yL!:ͦ*_DMç&[Begin execution]:h:f* * ͓ ~`~º@w+++ځ>GO ~+†>ʜ6 #=•* ! 2f * ~O_ +++y++:f]ͦ:q2q *_>[b0`!U 2  ~ 4!>2 2g :q2q ,/MEG@RSUXYE{ a Lç&O†2eHa2eG:q2q:'>`͕Ox¹'"c _2:t İ2U!q~w LK Hx+#L~L2fB?L2fB:]B2LL>*͓L H> ͓L: H!!H"qHo>g6 #> w:]B{L!!H~ zLavLvLAw#cL~# |L |L ºL#"qH_*qH+~ #K#"qH+~7ȷ> ͓L> ÓLD!"D!B:aBLC!"C!kB:cB$M~ ѵ!  }_|W>2 * * N* * : N͓ b* * W{_* #" " "K:eGO0ک ڊک)))ҨʞҨ)o>gvy +%Overlaying areaDataProgramæ!! ~#fo!!rO:>1P@ҕPw#2\B.\P!\Pw#5P2\B.cP!JPcP6 #\P:\B.pPw#pPpOrOʕP2O2O:O=POrOP!O"O>2O*O~P7P#"O2)MLL*ZB##:bB2]BG7!7ZS[ɩ5Z`C ~WJWJw# MJ #MJ w#`J:\B! C~ „Jw#zJK:7>ªJxʆJ|LOx=yJ[A@2CKx ڸJ CK|LÿJTJ|LT7|LY7êJLJ|LS7|LT7>êJR{ +!~G2#~ !sx+#N~': Aͦ>*b r> b:s!to>g6 7ʞʞ  ʋ:+‹#P2j2t u !  :nGO$: $" " " " * * " "I'* * BK* * :t ~w:t 2gô2g*n|##yȷ#xC~@#I" #ͺ*n|#*c~ !:g:q~ G@x k o Link-80 Vers. 3.43 Copyright (C) 1981 by Microsoft Created: 18-Sep-81 ?Command Error~b#~#  `$MFM<ʻHFM<ʵH!"FF!B~$MM w#OMwB}MF:aBUJ:B<}M N> N> N>N*DDBMDBtM:cBUJ:kB}M>͂N*CCkBMCkBtM|}Mƀ͓ '͓ '͓ 8}<2= yy7/yM7P,P#͓ '![> _!v >?b~#b!ڋ}!:!ʘ!I Not Found> b> b>2 u 2F: _<2 !~u *+"a" " " " go"_"n2 2!2!2f2h2k2l2q2m2j2e!*" " " " "K"I!" " " " 2 2 !" ?No Start Address?Loading Error?Nothing Loaded?Out of memory?Illegal Polish Exp:!•!!!2!!!2*a!7|LD7R7>êJ> %K6 #=Ky.2\BK Cx=KJK|L>Ky/y|LLcK2aB|LOKKNnK2hB\KOyK2gB\KR„K2cB\KC’K2dB2aB\KMK2iB\KI¨K2`B\KXµK>2eB\KZK2`B\KP7:bB<2bB\K|L[K0KAK:KKO!~6GL#~"K2 G<2  z6#z0: 0OF͓ ʍ Ҡ! y yBKO!I s#r! s#r! s#r͓ ھ! s#r!I s#ry! ~#fo! _!jB O O<O~=w4{ -O> N~O0O7ȷ!fOͤH@@WO> ͓L!lOͤHLDISK FULL)`iRN> N> N> N:aBUJ:B<ʒLN*D|JN#"DDwD!B>FO =RN!C>!kBRN:cBUJ:kBL*C|=wN#"CCw:B<ʥL5O*F|N#"FFøLF>B=N!=N!>N  j* s#r![ 2 ( ( j! ~# !O 2 O O j* ͓ O *͓ O s#r0`2 * * ͓ ʢ ʗ 2 [j: Œ x/Gy/O~w#~w_ [" z _z! ^#V   % 6 D O o  `i ^+V! 4* _ ! 4â ! 5 PYj ¢+^+Vj"MOp: =1<2 =O: O*K OPY7$* Y" ! *K"K* !" }2 <2 O:i* * |G}~O·V·A+++¶+¥~ y/O }VOx_  Ow#2 +w+w+w+ |2 * ͓ &O> x~@wO7c: >F: =;>G: =E>@w@w+w++?: 2 -: : =r+sO!V xͦ ͂ @͂ ͦ`͂ ͂ ͂ * ͋ > >wy .  :nQ !] * !t  Undefined Global(s) Bytes Free 2p^   ~O~>-ʣ > >/b+^+V+~b « /b`~ ! 0~ `+^+V>>b`:p<2p̦>q+r+sO!ͦO%Mult. Def. Global ~@*n+"nPYp>͒BKůx~+|N+F@•: ©:P(p: =©zOO|O: ©r#sO: ©|OjzO#c: =ʽ>Bw+r+s+r+sO*n#"n!E~#46+wxG ɯ2 ++s" ͕:7>"[?@2u ԕx 0 v C7> T6 #=Lx2t y.̕~ xo|pʑ!~ ~ ‘6R#6E#6Ly[ҳ0ڳAү:ҳØ[ʯ]ʯ@ʯ\ʯ^ʯ_ʯOp: : 2 -BK|O~_q#Vpj s #r lg  / / # |/g}/o   DM!>= ))] ] zđ z{ ͑ BK}o|gҖ : ʽ ͓ ҽ | >]bͦ: : $>2*_"!o&'   common runtime?No code can be loaded before program withcommon runtime not found, please create header file?End of file on common runtime header!oU͒zʱ͒"_p! ^#V! ͸!I͸yڷ: * * ͓ * " * 5* WF5#wx~+c6+6++r+sO*Y:X2 t-c: I: K>@w+6++r+sO:!O>.2!2^* !XͰ!u2!+‹2m! w#!ڞ ! n" " : :h!ڹ!  w#! +w2!ͰO!!?/D illegal withwÆ :pȯ2pæy i [  ~++GOŸ4 H+R I 4 yS >  * i a ͋ 7~y ~~ <</_* Ó |}! 6S#6Y#6MJ$>* * ͓ ~O~@ +^+V > v%+~v% > v%= &>~ <</O í 7g/VgV!VwE4#6 _Uw#I!b"EO<2 XP̘ʅ҅O!G N#F 2i: ʨ2iOQ(L;#$: &" *K>2 * ͓ O*K >xOc: =->@w+r+s+@?: 2 -r+sO: =* >xd/o/g ڼO~@w:k2lʁ+++~ ʁ2lq+p:lO!I>2 -}|!I s#r͓ yO!>/bͦO~W+++~b+%2nd COMMON Larger /*I" d   >0G- /}o|g x0- -  > xbV>G~#9 x~@+^+V$MEMRY$$PROG$COMNM*_O!Vw#o xڍ ~@ʍ +^+V"_! 2O! ?Start symbol - - undefinedu  ~# Ͱ REL7*n}2f:q` x:* * BK* " ͓ " " "I" " ͓ E* * * ͓ k! * * * BK* * * * * " * * BK* * " " " "I( ~w#~wPYp>͒BKx-~@: ~@w+~_q+c: =>Cw+p+ +++2!2 2 2 : 'go" " " 2f" <2 : * * * * *Kͫ_wShS! ~#foBK#: =ʫ: ¢* |ʘҢ}Ңͫp#: ¢* |Ң}Ңâ: =: cw+p+q+p+q#-Bw&͟&(%|}  Giv%> v%> v%:eU)0b) D0bA|Z}cib0:ͦ! ~#fo`0`0`>>bæRQUESTͺô* : * ͓ ~_~@+++~# * BK"" w+w+" 7ɷ77(7:P(2: ͒: ʀ2 * * DM* " *K "K* BK" " " " * " '* |•}ʮ~_!^#V* " ([j~#+"͓ R" ("!͓ R"ya": e"*aʎ"o"O͓ Ž"y*aŽ"! ͓ ҕ"!9;;;;;;͓ "͓ ڱ" z"4'7""""͓ #͓ #" p! ~s#_~rW }4: 2#͓ {_! 6)`i{ڮ! #g¨* * 6* " * * " ͬ* ͓ ҧ" ! yں! ^#V  F#fh ! ^#V ^#V ! &?Can't save object file {{ _zWI&> O&{ V&O>:v%y Y~# q&&9&>:v%G*_ >&>v%!8'ͬ'!>'ͬ'!A'ͬ'!G'ͬ'##&##ͬ'##&#ͬ'!'ͬ'!'ͬ'* "'* "'* "'*j^#V{r+s[~O@wy@+Ns+Fr{~2t [* :t w+r+s+p+q+" ~+V+^+F+N+* s@ DM!`i0`*K͓ Җ*I 0b`!0`* 0ͦ%%Bad fixup offset entry, will be ignored Value Loc Entry A E *K" *I" ! F$~R#~E#~LB$:q7$E$w+7$COMHEXn$  <&2 : ʍ$ʋ$* * ͓ ڍ$!q~ʚ$ ~$:j$: $*_j" " !&yO: !&ͅ&(%*_|%͓ %%͓ %͓ %<%z #7* "I* "K* *I 7##9#KP*I "I!* BK*I* *K z#ʼ#z#O* * " * *K BK* *K "K##PY* " * " æ#* *K #BK* * " * * " "y! ^#V^#V &! s#r Gyx ! Ns#r#?xa|W}_ x2 * 2 yoxg* " *K"K*MPY͓ ڧ"M: =½* !" * * ͓ ҽýͫ*K{OzG* * DM "'* "'* "'4'm4'͡':'d'U'd'z'܊'d'z'͊'d'z'܊'!' N#F#^#V#~#fo|} +x~+ 'xw# Ê'xw# á'~#fo4' q#p:P(* ͓ ~'[)(:X2O(*I" 2 c6+:0!2h!:hM!ͧ!ͧ! y;!* * ͓ #* "" ͓ Š!*a͓ ""yp!*a͓ ""͓ !*a͓ ڼ!!!!!!!!!!2 YxbelowaboveOrigin lontry rel. >>>>"<2h=O! 2! ^#V> yKcy?j͓ ?j͊y! w! ҃s#rÆ^#Vͬ ! p#¢* ! N#F#~#fo! ^#V  ! ~#fo͓ V! {_{_~V! ^q#VL%7Ԡ%`%: (%yO(%L%`%: Đ% <&>v%*_}v%|v% سȯv%zU%% z~#v%j%!: _w{<%2  &%"%yO #"%!%j%<%fv%%! ~+ x :m*_:m*_j >)b:  0 Start = External Public = (3*7xw#  +x~+ xw+ ": 7=̉OL: 7X ?Intersecting ҅O * ͓ <2D-: ?Oʱ: X͓ X͓ X![>,b*D&>M^#Vy !VF#~#b>(b)z{7<*z w#)0:ww:*!I))+)!?)?Segment , file not foundcan't create fileread errorDisk is full&)!N)&)!])&)ͱ)!o)&)ͱ)!z)<***™)*¥)<**<ʇ)L 0 S70 T7> R70 D7R7> > A 6 #=9 y.2̃ ixY f 0 Z <2y/y0 L720 Ol 0 [ҡ 0ڡ Aҝ :ҡ Æ O!~6G #~ ¼ î | x+# ~ 2 2: t >*G  { > G :| !} " ~G # !  !  ! ; "`*+++"*`:2*ͤ :} ; 22222222<2 ů22͢ r:ʄ oͅ a:`2 2¡ :@2!y y=7͢ 7oͅ `  7!?y :!Y !: 'o> = Y :RELCRFPRN<***<ʐ)2*!*)+)##2*w# 5* V !  CR"*!"!&"]t``9tP*#"> ]t" JG!]y yw# f P"*!&|”}~» ³# ¨»7~O  Í͆ }*s#r*xyw#*s : :2 _2 ~ *##:2G7!SS[ɩQ`` ~s s w# i #i  w#| :!i~   w#– ̓ :7> xʢ 0 Ox=y [A@2`ԃ x  a0 0  T 0 T70 Y7 P?Command error?File not found?Can't enter file 7#~#foN#F+w#wxy+͌*"*++## ~O#^#V"#^#V"#yn2͜~ #eͲ*>#*|4A>22͜> :<32Ԍ> > : ھ͜<2> ͌4&(#r#w#w#yw# "A:O>4G> + 72!"PX R|P>:*w#":<2*KB!&~ʒ}|o|g>o|g}}}""*%T]##ó*++"ê*|}  ~GO o>g6 #> w:/ !} ~ . a* * Aw# ~# 0 0 n #" _* +~ #̤ #" +~7ȷ> G > G y!"w!:ç w!"u!: ~ < < !"y{!?~   GxG; : ; "*͓ گ "*$͓ *%^#V+*{ʯ :+<2+ͨ ͨ xr ~# e * "*' "'*%^#V{ʟ r+s*͓ ʟ Ä *w#w}_|W! >?>ͬ(Out of memor! ò Command erro! ò File read erro! ò Fi#2 : ;U@L CERO7H 2:22 "JJyʈʕJ2**͓ ʬ~ĩ~/_jͷ~wßͷ~w+++r+sJ:̽~,+<2͹!ͬUnsatisfied external request(s)" yͯ@@ > G !  t DISK FULL:)  ͺͺ  ͺͺú/ ,+V+^ : Length of Data areaLength of ProgramModule ofڐ ~ 7,+++~+ng~|}!~#4¨ ͎6+w͙ xG ± ɯ2!͙ ͭ 7ͯ 1 Gͯ   ͯ 1  ͯ @7~ DM:/1^+V:-+++++;#x+;y;@" { J+~+ng~w*+r+s w@f" +1+w+w+p+q+r+s+/ 7* }̊*" +1+++: ,:-Ͳ/ >@w ҴxIJ:w+ :/;@~*!@" DM+1:  p+q+rw#w?1{:q :<1> > >*wyͧy(:q :1>6*uwͧw(|}ʲƀ)`i> > > :q :2/ !y !~#>@>>:> 7 ͹!^ *͂ ͬ!I *͂ ͹2*͓ ʚ~̃, j:A  ͂ ͺɯ2*͓ ~@Ҷļ, à:T  ͞ ͺɯ2*͓ ~@, :e  /C B ɯ;xG; #7;x;x! ~w#4Pv!" >2 *!""aay  a!͹͹**͓ O ~@ҳ® , ÝͬìSymbol Value Defined Reference"a"a>͸~w+1+r+s!zs# x>2*"0"> 2*022 m~ (!2"!6=h!26# p#6#> w#\"!2,l 2$*"*"%"2:G : !3F#N#~ :!!y~#!~6L#~6I#~6B: :!!!2!w 4#6 _ ͭ w# !( "O:!G<2!ͭ Xͭ P:d )0>) S 0>P |i }Gt x0: >PX ڇ |ą >:> '"!? ! :!O ~>/A> y > C B y :GW> !F # W> _x+s+~ wF#~# x: !>/O ü++++:-w+:!w7_ > >:!o>g6 !~6Gʞ#~ …wx+#ʖ~Ë2\ͬ>*>O> >2> >:ʬ<2> >~>#G~>+ú~#  ` / +!> =!w>!:q :F *u|=+#"uvw:??=ʧ!=ƒ!>ã_!  <~=w4{ > ~7ȷ! W~++~2!+V+^+++V+^ ~,+ ,~/_~>#7 <2ͬ!v ͹<2͹! O <2͹! O Common block(s)Entry point(s)External reference(s)2)7~  ʵ 2) ͞ ͺ/ 7~ ( ͓ ~ ~ͬ´ ó y6<&*6#w#w#6#w#w# yͷ >&8:7>I@*6#6 #w#8xc2jzn> ڋ6 #=y.8xڢʯã"yɯ**͓ ~OA: ,,++: "ͤ:=!_^#VRJ:5:($W[[0[AW:[;O8*-l>w#p#}y+>‚͖wxʒ‰y:ұ0ڱOxGÙx+N#^,>. . *4 ^*44,> *xxle not foun! ò Can't enter fil!* ò Module name/number not found in fil!U ò First module in Until clause after las! ò Library write erro>2c< >2< } ͯ  : { 8} | ~  ` `  L   m m     *   m m Lu L  `HH   hh # , +  `NEXT END$  L . ./COPYRIGHT (C) 1981, SUNRISE SOFTWARE, DDT65:>2̀;;2! !~# ">20!U "1>23!t "4!E !! " >2+*s#r!l" !6!" !6L    LDDT65 VER 1.0 (C) 1981 SUNRISE SOFT@/*%<=-^#V$% :,OxF$ =+#>2x2-#"'a:,<2-2,2#:+_<2+!" *"'##"ͼ ppyʳp?**'s#r2#w#wڣ~:-=2-2,2.>@͸p#~!G#N#~>@2/͸>2/+~F$ * ~Ÿ,:n  Lq r ` u t  ^  "' v v L[ /  ^8L'. LL' L't u ` ^ Rx w Dw x +2ɯ2 _: c< 2c!" ! w#j w: <2_!~w:#ʾ: _<2!~*w#"*/ *'~#"':= !~# !w#!X `Y = Y `F = [ `S = Z `P = ] \ ` h AW fW LYY TY LXX BX LF[ 0[ LSZ Z LP\ ]  \ ] L`C LM L WARE$. - L%] \    5! h vf L% VL% wxlDSGQLAXTUFMHIREZ/ ChhL%  a`   `  #  #  #  # 2 # H # ] \ 8 `A = W `X = ,+++~++O#N+>O+~>O:.O<2#FA2#:.G~x:*͗ !*w#k*%"w#w**͓ ~~w/_: ,~|2*FORLIB REL ݬ#$   L` `%ABORTED LAST SOURCE LOCATION=$ X Lz y >;y z '    L` `ABORTED LAST LOCATION=$ ] \ tL =| { /~ } { m} | m~ # *|DM"x}o%*:&!}o|g. z2v*xV*DMzW[:vw>n*x#"xV# xP B:RELOC.RELRELDRELOC RELW!GF"`#,* p8 w#2:$Hͼ y?=2$>@͸ɯ2$go" :"cG:-˜2"ͤڟʒʌͻͤͻ2"GO "ͻ"\c:-<Æy*%*2*͓ 7~#N#F#~ 6R#6E#6Lxģp#ģw# #N## "G:+L =  < ` =  < `s {  ' LP"s r q p p Lzn m o : o  Șe-o o -s . Șe-o  ep 0p #m n  ~#͍Ɛ':'$ͨ_ > $> $ |̈́}Ä $>.$z{ , 0 !))))o1/ ` { l  H : h 8@   2,.. 1 L<  ,  L] 8`  ` `[ W X Y \ ] Z ) *  q t r u LCLIXCLVCMPCPXCPYDECDEXDEYEORAINCINXINYJMP@JSRLDALDXLDYLSRBNOPORAPHAHPHPPLAhPLP(ROL"RORbRTI@RTS`SBCSEC8SEDSEIxSTASTX STY TAXTAYTSXTXATXSTYA??= L 1"/"0"885811/1018+/'881%/%0&87/4688/388 ( 8"""83 281118+'88%%&84483348 (88"""8 81118+'888%%84888338 +(88"+""8+ !81+118++'888+%%8-+4888+338  L 8 L$ 8` { L  o 80+ 8"i  .  L:   o Z@ m L  "' L 8 `H (- h - `- HHH- .  L . - ` ` `m (` (` ( (`` { 5- . o e?8- ȱ(` {   ;  L  o A H  ; L z H hL# LL(L`#'+29@TGaozpg#  ` ` `  `  `  `  `    `    `A ` ``   `0mmii ` ` `, `( `) ` X ` Y ` "(88  5`/+6,7-8.9` L  m, + + 8+ , `\ t q \ t q `^ i - b a ^ ) Z_ i Φ ` ^ a b ` _ iΨ ` ^ ` ` ` `8`  ` ` ` ` `8` ` ` ` `8` ` ` `8` ` S l ( `8`B88 0 ( ( {  .. /^L;ŭ nL` 3   ` ȹHH`Lr/^{  `8` TM ` ` ` ` ` 庝hhh`HHH- .  L . hhh`HHH-  L> . hhh`HHH- .  L^ ȹ. hhh` o `a{8 `HHH- . .  L 8h- hhh(`H- . h`HHH    8hhh`H ii0 h(`HJJJ h , h X h ) LL)y h , h YkfL ; U L < h 5 1;-,8 h XLLYLLLL 8`ADCaAND!ASLBCCBCSBEQBIT BMI0BNEBPLBRKBVCPBVSpCLCCLD8"""8$" 88"118 +"'888"%%8 "4888"3381(88""'"8& '811'18+'888%'%8,48883'38)(888" "8# 811 18 +'888% %848883 38*(888"("8% (8<1(18 +'888%(%8.48883(388/(88a b ` iΩ `EW FX GY H[ Z :\ ;] H(H \ 8\ ] \ ] \ i\ ] S    L%  Z IX FY G[ HH\ : ] ; W E(l % _ {  +-A % @ + m m `8` ` ` ` ` `8` ` ` ` ` `8` ` ` `8` ` ` `8` ` `8`8`  `  `  `  `  `  `  `  `  0#   ` T # mi`.mm..mmmm)JJJJ)` ` ȹ H HJ hH) h(`H h(`  ` `  L  #  8    9 \ \ \ \    [ L    S`LL\ \ T RLEٷL HH`Ll `@M]x\ m\ \ Z X Y [ HW (LW h[ X V ɚɊ VWVRWSڎ`ɉ ɍɠ` )`  5 = LC  S q CE J i :  : L LC  `) 3  9 萀 H(! I"IBBB"$I@ !BB!!!IR $$HH$$H$$B H$$$ H$H""$H  @H@$I$!@!I@ $I$IB $$$H BUUUDD"H$$A@H$$AB R   #  #  #  #  # ` o # u # { #  #  # ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `H$hLHmKmL hH  Lȹ h`Fɺ  =  L ɺ ȢΦ ..  . . /`hh 8T͢ r LC S PQ q 9 : ). E H I hiͤH PL& ΤL   LCJQjPPQ #V>2*~O+~G*^#V#^#V*V+^+V+^+F+N+V+^*^#V#N#F#^#V#^#V((`B:TRANSFER.RELDTRANSFERRELUGhE|:RUS@QI:p[VFr\*!eڌY Z H(`W h[ X Y Z H(m\ \ }\ \ ` `\ ȱ\ `ȱ\ ȱ\ `\ i\ \ \ \  N` \ \ \ \ ` [ `\ \ `Z ʎZ `Z Z `  OD$"" !I" D"A BB! A$$I HD$IBHI$$I    AD@ IH A!B B:DDT650.PRLB$IHH IH$IB @ @ @ @  !AH@H@ @H A $HD"I @H$HHH!@@ @BB !@$!$$A@U"D=$A=$B=$D=$H=$ F'=$ A'=$B'=$D'=$H'=$X=$Y=$I=$ S=$P=$  h QLYٶ -1⹶ < Hh`F A B D H F' A' B'D'H'X Y I S P ``LCȌ f PTQUQ мTUVWRSΟ  J & RiRSPQPVWVVWέ L  PQЕ LC DR8髨SH H ( W / 2hh L|  ̧`  W | ! W L =L `VWW;$$ IDHH$UUUUHD$I$AI@$ $AI@$$@B $$$ !$ "$H HI@!B!B BB$$$ $!D$ BH @B@$$ IB$I"$$$$I$I$I@B $! H$Iʘ t  8ȹ mȽ W EX FY G[ HZ ILhhZ EW FX GY H[  Ⱦ mii    L%     `' /  ` M` Q # W # ] # c # iP!p!3~( _#!"*>w2 Insert Apple DOS 3.3 disk and hit RETURN to boot: LLMop 8 T*U`Ȍ X Y 3 gɃL L L + 8`` O ` O 8``:>2̀;;2!9 "">2!. "!6 " >2*s#r#q#p#s#r#s#r* s#r#q#p#s#r#s#r*s#r#s#r*Ww_#w* !9s#r:(* * >2"*w* ^#V: **^HHHȑȑ hhh`)i LkЊ8 Lk8`)8 Lɰ i Li`ȑL8ȩ ` 8` `    `HHH hhh(` O  ` O ` O 0(`(8` JJJJi0?i0B`hhL~ɍɠɺ 8A rLCH)ih )Iia`H) hJJi`RȥS ȩ X `HȭȩhȽ     L) RINTX * INDEX REGISTERS * ENDIF IFE RGS8080 .PRINTX ! CANNOT BE DEBUGGED WITH DDT65 ! ENDIF ENDIF ; EQUATES: REGPTRZ EQU 0008H ;Z80 ADDRESS OF POINTER TO REGISTER PASS AREA VEC65 EQU 000AH ;Z80 ADDRESS OF NORMAL 6502 RETURN ٠E $$GӶı ŠȺ$ŠԠDĠRĠEŠϠEL,BC,DE,AF PRIME ASET 0 ;1 TO PASS PRIME REGISTERS: HL',BC',DE',AF' INTRFSH ASET 0 ;1 TO PASS INTERRUPT & REFRESH REGISTERS INDEX ASET 0 ;1 TO PASS IX,IY INDEX REGISTERS IF1 .PRINTX * PASSING ALL REGISTERS * IFE RGS8080 AND PRIME AND INT: "#####: ";LC;: L$e6e@::"*** End of conversion ***"eJeTL$""e^C($(,)) fhEF() C: EF C -fr C ^Cf|L$L$(C): ^IfffA$(L$,I)"DFB ":IIfK(I,L$,()): K LKf J, ` S0hh cLChheHH𪈱 Ȋ0` H h`HJJJJ h) iiLL     b AZb:  b"Input file name: ",I$b(:"Binary or text (B/T)? ",T$c2 (I$,".") I$I$".CVT""c<O$(I$,(I$,"."))"MAC",cF: TcP"Input file: "I$" Output file: "O$\cZ:tcd"I",,I$:"O",,O$cn T$"B" L$$(,)RFSH AND INDEX .PRINTX * EXCEPT: * ENDIF IFE RGS8080 .PRINTX * 8080 REGISTER SUBSET * ENDIF IFE PRIME .PRINTX * ALTERNATE REGISTERS * ENDIF IFE INTRFSH .PRINTX * INTERRUPT & REFRESH * ENDIF IFE INDEX .PI L fA$A$"$"(L$,J,)","ffA$A$"$"(L$,J,)f K A$A$(L$,(L$)K)gL$A$: J媍Я͠ϠŠӠŠҠ Ԅ $$GӶı ŠȺ$ŠԠDĠRĠEŠϠE TITLE TRANSFER - Z80 TO 6502 TRANSFER SUBTTL EQUATES, MACROS PUBLIC ITRAN ;TRANSFER INITIALIZATION ROUTINE ; VERSION SWITCHES ; ; THESE SWITCHES DETERMINE WHICH REGISTERS WILL BE PASSED RGS8080 ASET 1 ;1 TO PASS 8080 REGISTER SUBSET: SP,HJ JKdI(I,L$," "): I IJ (L$,I)()d (L$," SET ") (L$," EQU ") " eI(L$," HEX "): I #e (L$)A "VeL(L$):I(L$,()): I L$L$":": "yeL$(L$,I)":"(L$,LI)e"#,L$e,LCLCcx EFc T:L(L$)c L "cI(L$): I("*") I(";") "dI(L$," "): I d(L$,I)()4dI(I,L$," "): I Gd(L$,I)()edJ(I,L$,"'"): J JLdK(I,L$,(")): K KLd KROUTINE VEC65A EQU 000CH ;Z80 ADDRESS OF ALTERNATE 6502 RETURN ROUTINE ALTFLG EQU 000EH ;ALTERNATE/NORMAL RETURN ROUTINE FLAG TRAN EQU 000FH ;POSITION-INDEPENDENT ENTRY POINT TO TRAN1 REGPTR6 EQU 0F0FAH ;6502 ADDRESS OF PTR TO REGISTER PASS AREA POP AF EX AF,AF' ;PUT IN ALTERNATE REGISTERS ENDIF IF INTRFSH LD A,(PASSA+ZI) ;GET I & R REGISTERS LD I,A ;SET UP INTERRUPT REGISTER LD A,(PASSA+ZR) LD R,A ;SET UP REFRESH REGISTER ENDIF IF RGS8080 LD HL,(PASSA+ZAF) ;GET AING POP HL ;AND POPPING INTO HL LD (PASSA+ZAF),HL ENDIF IF INDEX LD (PASSA+ZIX),IX LD (PASSA+ZIY),IY ENDIF IF INTRFSH LD A,I ;SAVE INTERRUPT REGISTER LD (PASSA+ZI),A LD A,R ;AND REFRESH REGISTERS LD (PASSA+ZR),A ENDIF EC65 AND VEC65A ARE ; SET TO POINT TO BACK65, THE STANDARD 6502 RE-ENTRY ROUTINES. ; .Z80 ITRAN: LD HL,PASSA ;STORE ADDRESS OF REGISTER PASS AREA LD (REGPTRZ),HL ;INTO REGPTRZ LD HL,PASSA+1000H ;STORE 6502 ADDRESS OF REG PASS AREA LD (REGPTR6RSTRGS ;IF NZ, THEN RESTORE REGISTER & RETURN. Z80SUB: LD HL,TRAN1 ;MAKE SURE SUBROUTINE WILL RETURN TO TRAN1 PUSH HL ;BY PUSHING A PSEUDO-RETURN ADDRESS LD HL,(PASSA+ZPC) ;GET ADDR OF SUBROUTINE TO CALL PUSH HL ;AND SAVE ON STACK - GO VIA RET ; FROM THE PASS AREA AND THE SUBROUTINE IS CALLED. HOWEVER, IF ; ALTFLG WAS NON-ZERO, THE CODE SIMPLY DOES A RETURN TO THE Z80 ; PROGRAM THAT INITIALLY CALLED 'TRAN'; NO SUBROUTINE CALL IS ; PERFORMED. ; ; SET THE SWITCHES AT THE BEGINNING OF Z80SLT EQU 0F3DEH ;SLOT ADDRESS OF Z80 CARD GO6502 EQU 0F3D0H ;6502 SUBROUTINE CALL ADDRESS ; MACRO DEFINITION PRINTE MACRO N,MSG ;MACRO TO PRINT 'BYTES GENERATED' IF1 .PRINTX * N MSG * ENDIF ENDM SUBTTL ITRAN - TRANSFER INITIALIZAO USE VEC65 OR VEC65A OR A JR Z,NORMVEC ;USE VEC65 IF ZERO LD HL,(VEC65A) ;ELSE USE ALTERNATE 6502 ROUTINE TO EXECUTE XOR A LD (ALTFLG),A ;ALWAYS CLEAR ALTFLG JR GOVEC NORMVEC: LD HL,(VEC65) ;NORMAL 6502 ROUTINE TO EXECUTE GOVEC: LD (GO IF PRIME EX AF,AF' PUSH AF ;PUSH ALTERNATE A & FLAGS POP HL ;POP THEM INTO HL LD (PASSA+ZAFP),HL EXX ;NOW SAVE ALTERNATE REGISTERS LD (PASSA+ZHLP),HL LD (PASSA+ZDEP),DE LD (PASSA+ZBCP),BC ENDIF LD A,(ALTFLG) ;SEE WHETHER T),HL ;INTO REGPTR6 LD A,0C3H ;STORE 'JP' INSTRUCTION AT TRAN LD (TRAN),A LD HL,TRAN1 ;STORE ADDRESS FIELD LD (TRAN+1),HL LD HL,BACK65 ;ADDRESS OF NORMAL 6502 RE-ENTRY ROUTINE LD (VEC65),HL ;INTO BOTH VECTORS JUST IN CASE LD (VEC65A),HL LATER XOR A LD (ALTFLG),A ;CLEAR ALTERNATE VECTOR FLAG RSTRGS: IF PRIME LD HL,(PASSA+ZHLP) ;RESTORE PRIME REGISTERS LD DE,(PASSA+ZDEP) LD BC,(PASSA+ZBCP) EXX ;GET THEM INTO ALTERNATE REGISTERS LD HL,(PASSA+ZAFP) ;GET AF' PUSH HLTHIS PROGRAM TO DETERMINE ; WHICH REGISTERS ARE PASSED IN THE REGISTER PASS AREA. ; TRAN1: IF RGS8080 LD (PASSA+ZSP),SP ;SAVE 8080 REGISTER SUBSET LD (PASSA+ZHL),HL LD (PASSA+ZDE),DE LD (PASSA+ZBC),BC PUSH AF ;GET A & F TO HL BY PUSHTION PAGE ; ITRAN ; ; ROUTINE TO INITIALIZE TRANSFER. ITRAN SETS UP REGPTRZ ; AND REGPTR6 TO POINT TO THE REGISTER PASS AREAS. IT ALSO ; STORES A 'JP TRAN1' INSTRUCTION AT LOCATION TRAN. FINALLY, ; ALTFLG IS INITIALIZED TO ZERO, AND BOTH V6502),HL LD HL,(Z80SLT) LD (HL),A ;TURN ON 6502 AND PUT Z80 TO SLEEP IF RGS8080 LD SP,(PASSA+ZSP) ;RESTORE STACK VALUE HERE FOR PUSHES LATER ENDIF LD A,(ALTFLG) ;NOW SEE IF 6502 WANTS US TO RETURN OR A ;OR CALL A SUBROUTINE JR NZ,TER ; PASS AREA. THEN, DEPENDING ON THE STATE OF ALTFLG, THE 6502 ; ROUTINE POINTED TO BY EITHER VEC65 OR VEC65A IS CALLED. ; UPON RETURN, PASSA+ZPC IS ASSUMED TO CONTAIN THE ADDRESS OF ; A Z80 SUBROUTINE TO CALL. SO, THE Z80 REGISTERS ARE LOADED XOR A ;FLAG USING NORMAL RE-ENTRY VECTOR LD (ALTFLG),A RET SUBTTL TRAN1 - Z80 SUBROUTINE CALLER PAGE ; ; TRAN1 ; ; THIS CODE PERFORMS THE ACTUAL Z80 SUBROUTINE CALL. ON ENTRY, ; THE CONTENTS OF ALL Z80 REGISTERS ARE SAVED IN THE REGIS & FLAGS PUSH HL POP AF LD HL,(PASSA+ZHL) LD DE,(PASSA+ZDE) LD BC,(PASSA+ZBC) ENDIF IF INDEX LD IX,(PASSA+ZIX) LD IY,(PASSA+ZIY) ENDIF RET ;DISPATCH TO SUBROUTINE (OR RETURN TO CALLER) SUBTTL NORMAL 6502 RE-ENTRY CODE CMI MACRO ADDR ;CALL IF MINUS BPL *+5 JSR ADDR ENDM LDXAI MACRO WORD ;LOAD WORD IMMEDIATE INTO X,A LDA #<(WORD) LDX #>(WORD) ENDM LDAYI MACRO WORD ;LOAD WORD IMMEDIATE INTO A,Y LDY #<(WORD) LDA #>(WORD) ENDM LDYA MACRO ADDTIONS: EXTRN ITRAN ;CONTROL TRANSFER INITIALIZATION ; Z80 EQUATES: BDOS EQU 0005H ;CP/M BDOS ENTRY POINT REGPTRZ EQU 0008H ;PTR TO Z80 REGISTER SAVE AREA VEC65 EQU 000AH ;PTR TO NORMAL 6502 RE-ENTRY ROUTINE VEC65A EQU 000CH ;PTR TO ALTERN ; REGISTER OFFSETS INTO REGISTER PASS AREA: DSECT ;TO GENERATE OFFSETS ORG 0 ;RELATIVE TO ZERO ; NOTE: SPACE FOR ALL REGS MUST BE ALLOCATED FOR USE WITH DDT65 ZPC: DS 2 ;PROGRAM COUNTER REGISTER OFFSET ZAF: DS 2 ;ACCUMULATOR AND FLU 4 ;BC REGISTER ZDE EQU 6 ;DE REGISTER SUBTTL MACROS PAGE ; ; MACRO DEFINITIONS: ; ; THESE MACROS ARE INCLUDED ONLY AS EXAMPLES OF SOME USEFUL 6502 ; MACROS, ALTHOUGH NOT ALL OF THEM ARE USED IN THIS PROGRAM. ; PRINTE MACRO N,MSG ;PRINT PAGE ; ; BACK65 ; ; THIS SHORT SUBROUTINE IS USED TO RETURN TO THE INITIAL ; 'JSR $3C0' THAT WAS USED TO CALL THE Z80 SUBROUTINE. IT ; SIMPLY POPS OFF THE RETURN ADDRESS PUSHED BY THE 'JSR' AT ; $3CF (MAKING IT A 'JMP') AND RETURNS. ; ; A,X,UNCTION ESC EQU 01BH ;ESCAPE KEY CODE CR EQU 0DH ;CARRIAGE RETURN CHARACTER LF EQU 0AH ;LINE FEED CHARACTER ; 6502 EQUATES: .6502 ;(SO WE CAN USE '$' FOR HEX CONSTANTS) REGPTR6 EQU $FA ;6502 POINTER TO Z80 REG SAVE AREA GOZ80 EQU $3C0 ;ATE 6502 RE-ENTRY ROUTINE ALTFLG EQU 000EH ;ALTERNATE/NORMAL RE-ENTRY FLAG TRAN EQU 000FH ;ENTRY TO CONTROL TRANSFER LOOP GO6502 EQU 0F3D0H ;6502 SUBROUTINE CALL VECTOR Z80SLT EQU 0F3DEH ;ADDRESS OF Z80 CARD PRMSGF EQU 9 ;CP/M PRINT MESSAGE FAGS ZBC: DS 2 ;BC ZDE: DS 2 ;DE ZHL: DS 2 ;HL ZSP: DS 2 ;STACK POINTER ZAFP: DS 2 ;PRIME ACC AND FLAGS ZBCP: DS 2 ;BC' ZDEP: DS 2 ;DE' ZHLP: DS 2 ;HL' ZIX: DS 2 ;IX ZIY: DS 2 ;IY ZI: DS 1 ;INTERRUPT REGISTER ZR: DS 1 ;REFRESH REGIST A MESSAGE (SEE ITS INVOCATION) IF1 .PRINTX * N MSG * ENDIF ENDM SUB MACRO N ;SUBTRACT WITHOUT BORROW SEC SBC N ENDM JEQ MACRO ADDR ;JUMP IF EQUAL BNE *+5 JMP ADDR ENDM RNE MACRO ;RETURN IF NON-ZERO BEQ *+3 RTS ENDM TITLE DEMO SUBTTL EQUATES ; ; A SIMPLE DEMONSTRATION OF Z80 SUBROUTINE CALLING BY A 6502 PROGRAM. ; THE 6502 PROGRAM BELOW ACTUALLY PERFORMS A CP/M FUNCTION CALL TO ; PRINT A MESSAGE. ; .SALL ;SUPPRESS MACRO EXPANSION ; EXTERNAL DECLARAY & STATUS ARE UNKNOWN AFTER A RETURN. ; .6502 .PHASE *+$1000 BACK65: PLA ;POP OFF RETURN ADDR TO MAKE PLA ;'JSR' AT $3CF A 'JMP' RTS ;NOW RETURN TO ORIGINAL CALLER .DEPHASE SUBTTL REGISTER PASS AREA AND REGISTER OFFSETS PAGE ENTRY POINT TO 6502 SUBROUTINE CALLING LOOP KEYBD EQU $C000 ;LOCATION OF APPLE KEYBOARD KBDSTB EQU $C010 ;KEYBOARD STROBE BELL EQU $FBDD ;APPLE MONITOR BELL SUBROUTINE ; OFFSETS INTO Z80 REGISTER SAVE AREA: ZPC EQU 0 ;PROGRAM COUNTER ZBC EQER PASSIZ EQU $ ;SIZE OF REGISTER PASS AREA DEND ; REGISTER PASS AREA PASSA: DS PASSIZ PRINTE %($-ITRAN), SUBTTL SYMBOL TABLE END R ;LOAD WORD INTO Y,A FROM ADDRESS A LDA ADDR LDY ADDR+1 ENDM SUBTTL MAIN PROGRAM - Z80 CODE PAGE ; ; THIS CODE SIMPLY CALLS THE MAIN 6502 PROGRAM, AND BEEPS ; AFTER IT RETURNS. ; .Z80 DEMO: LD SP,(BDOS+1) ;INIT STACK POINTER TO TOP Disk AssignmentWrong CP/M Version (Requires 2.0)!9"2!T OË!]6:\:] Hr3 Ë:\ʀË͇ /ҋͺ *2!"q*"&L ͐ ͐ ͐!$p+q*#~*#N͐*##"#÷!&p+q͠*%DMͱ O O!(q*(&R CONTROL TO Z80 ; ; STORWD - STORE WORD INTO REG SAVE AREA ; ; STORES WORD IN X,A INTO Z80 REGISTER SAVE LOC POINTED TO BY Y REG. ; (X=HI,A=LO) ; STORWD: STA (REGPTR6),Y ;STORE A,X INTO REGISTER SAVE AREA INY ;WITH PTR TO REGISTER IN Y TXA F 6502 CODE ; ; THIS SIMPLY PRINTS A MESSAGE OVER AND OVER UNTIL SOMEONE HITS ; THE ESCAPE KEY ON THE APPLE KEYBOARD. ; .6502 .PHASE *+$1000 ;COMPENSATE FOR Z80 CARD ADDR OFFSET DEMO65: LDX #$FF ;INITIALIZE STACK POINTER TXS DEMLOP: LDA5536: 128 Byte Record CapacityKilobyte Drive Capacity32 Byte Directory EntriesChecked Directory EntriesRecords/ ExtentRecords/ BlockSectors/ TrackReserved Tracks is Temp R/O Disk: d:=R/OSet Indicator: d:filename.typ $R/O $R/W $SYS $DIRDisk SRESS TAX ;PUT HI BYTE INTO X TYA ;GET LOW BYTE OF PTR TO A REG LDY #ZDE ;GET PTR TO MSG INTO Z80 D,E REGS JSR STORWD LDY #ZBC ;GET BDOS COMMAND #9 - PRINT MESSAGE LDA #PRMSGF ;INTO Z80 C REGISTER STA (REGPTR6),Y LDXAI BDOS JMP OF MEMORY CALL ITRAN ;INIT Z80 SUBROUTINE CALLER MECHANISM LD HL,DEMO65 ;SET UP ENTRY POINT OF 6502 CODE LD (VEC65A),HL LD A,1 ;ALTFLG=1 FOR INITIAL ENTRY LD (ALTFLG),A CALL TRAN ;CALL THE 6502 MAIN PROGRAM LD HL,BELL ;NOW CALL TH STA (REGPTR6),Y ;STORE HI BYTE RTS ; ; MESSAGE TEXT ; MESSAGE: ASC '*** HIT "ESC" TO RING THE BELL ***' DFB CR,LF ASC '$' .DEPHASE PRINTE %(*-DEMO), SUBTTL SYMBOL TABLE END DEMO YI MESSAGE ;GET POINTER TO MESSAGE JSR PRMSG ;PRINT IT LDA KEYBD ;SEE IF HE HIT A KEY AND #$7F ;STRIP PARITY BIT (CP/M MAY HAVE EATEN CHAR) CMP #ESC ;WAS IT ESCAPE? BNE DEMLOP ;CONTINUE UNTIL HE DOES STA KBDSTB ;EAT THE CHARACTER (IF CP/tatus : DSK: d:DSK:User Status : USR:Iobyte Assign: =Bad DelimiterInvalid AssignmentBad Delimiter: Bytes Remaining On R/, Space: Invalid File Indicator** Too Many Files **File Not Found Size Recs Bytes Ext Acc65536 set to R/O InvalidCALLZ80 ;CALL BDOS AND RETURN ; ; CALLZ80 - CALL Z80 SUBROUTINE ; ; Z80 ADDRESS OF SUBROUTINE TO CALL MUST BE IN X,A (X=HI,A=LO) ; CALLZ80: LDY #ZPC ;POINT TO Z80 PC REGISTER JSR STORWD ;STORE CALL ADDRESS CONTAINED IN A,X JMP GOZ80 ;TRANSFEE 6502 BELL SUBROUTINE LD (GO6502),HL ;IN THE APPLE MONITOR WITH A 'STANDARD' LD HL,(Z80SLT) ;6502 SUBROUTINE CALL LD (HL),A ;TURN ON 6502... JP 0 ;REBOOT CP/M AFTER WE HAVE RANG THE BELL SUBTTL MAIN PROGRAM - 6502 CODE PAGE ; ; START O3 Copyright (c) 1979, Digital Research????????????CON:RDR:PUN:LST:DEV:VAL:USR:DSK:TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1:R/OR/WSYSDIRR/O R/W SYS DIR ** Aborted **Active User :Active Files: Drive Characteristics6RN TO Z80 ; ; PRMSG - PRINT A MESSAGE ; ; A,Y CONTAIN POINTER TO MESSAGE TO PRINT (A=HI, Y=LO). CHARS IN MSG ; MUST HAVE THEIR HI BITS CLEAR, AND MESSAGE MUST TERMINATE WITH A ; DOLLAR SIGN. ; PRMSG: SUB #$10 ;CONVERT 6502 ADDRESS INTO Z80 ADDM HASN'T ALREADY) ; ; RETURN TO Z80 CODE BY SETTING ALTFLG NON-ZERO. THIS TELLS TRAN ; THAT WE DON'T WANT TO DO A Z80 SUBROUTINE CALL. ; LDA #$FF ;SET ALTFLG=NON-ZERO TO TELL TRAN THAT STA ALTFLG+$1000 ;6502 CODE IS RETURNING JMP GOZ80 ;RETUL!*p+q*)O2'!,p+q*+O2'O2'O!.p+q*-LRRLR\LR" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#Wj6?\:'C:'ƀo&")!)6!"):)/)HҘ]!)6> !)ڎ*)&*)*)&*) y!)6 Ä:) 2):)<2)M*)#")/:)ҩ*)+")`*")#"]!*)!/H!")!"]*)) *)s#r!*s"s*o͊O !v6>!vQ*v&w 6`i+46)A*:'ʓ:'O!) ~2vʍ:vO!w 6,]!v6>!v*v&w ~һ*vM !v4˜8AO͐:͐ͱ*##N!ͽ"* N#F*͠"!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*) =2 I>!6:=28 :2:2 :!!29:Y T >:Y,e \>Ì !p+q*~:ʉ *N͐*#"o :͐!p+q!'"!6> **{2*́"PY! ">!+~H !6:0O͐à k͐p+q!`6>!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a4)*)& *):)2):):*)!) *)) s, >X\:)“>!d!")>!)d!")!")*++!)a*)) ^#V")]*)")*)) ^#V")]!)6> !)T*)&*)~2)*)&*)~2)O;*)) ^#V")6> !).*)&*)*)&*) w:)<2)*)) >w#6*)) w#6*)!) w#6*)%) w#6*)) N#F*)) q#p*)%) *) ~e *) * ~o&͞ *)%) q#p!)6* >!)6!)6>!)=:)!)w=*)&*)~2):>!H% - *DM ͱͷDM  ͱ* N#F 9ͱ * ^#V))DM Tͱ* ~ *} *M w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)͠Q" 8AO͐jͱͷDM͏ m  Z"l"!6>ʥ *}҆ *M ͱ*}x O͐} W͐ͱ !+s#r!+s#r#4D ͠:\ʹ :\=Oͳͩ !6!)6l :) :)=2) :] & !"}2\!h6?!!gr+s+p+q!h6>fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*lTZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqos)*)) *)) N#Fq#p*)) *)s#r*)#")!)6 J:)!)J!)6 :)<2)*)")҈q:tw͠ͱ!"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*):2͠!4 F :® )!6>!ګ ͠:O!9 DMi 8ͱ!6> !ڤ Å :2k ä  ͐:!O!Y DMi w !4C F :¿ >F : F :=229:Y= ;>9*&Y DM!+s#r#4 !s+p+q!6!66:!ڄ !6!6>!r *&**&Y i !6!4+4A :} :!4- >!699 2¨ :!4: :2!6+6>! :O!9 DMi ͱ:!O!Y DMi :2opmnU^_R ij^_lk 󅔆nmLY^^ȱ^ȱ^eȱ^e(ӊ0Цe^^SOME USEFUL 6502 ; MACROS, ALTHOUGH NOT ALL OF THEM ARE USED IN THIS PROGRAM. ; +PRINTE MACRO N,MSG ;PRINT A MESSAGE (SEE ITS INVOCATION) + IF1 502 SUBROUTINE CALL VECTOR F3DE Z80SLT EQU 0F3DEH ;ADDRESS OF Z80 CARD 0009 PRMSGF EQU 9 ;CP/M PRINT MESSAGE FUNCTION 001B ESC EQU 01BH ;ESCAPE KEY CODE 000D ٠ˍѠˠˍҠˍàԍŠҳѠ̍ҠϱРРҍŠѠōˠ̍ō̍Ѡ̍РōѠ 0000 ZPC EQU 0 ;PROGRAM COUNTER 0004 ZBC EQU 4 ;BC REGISTER 0006 ZDE EQU 6 ;DE REGISTER SUBTTL MACROS BDOS EQU 0005H ;CP/M BDOS ENTRY POINT 0008 REGPTRZ EQU 0008H ;PTR TO Z80 REGISTER SAVE AREA 000A VEC65 EQU 000AH ;PTR TO NORMAL 6502 RE-ENTRY ROUTINE 000C VEC65A EQU 000CH ;PTRԠ٠ŠЍؠԍ֠ˍҠˍРŠˠƠ٠٠ŠàōŠƍàūŠƍˠՠčѠōҠРӠ˲Ҡ̍˲٠ 00FA REGPTR6 EQU $FA ;6502 POINTER TO Z80 REG SAVE AREA 03C0 GOZ80 EQU $3C0 ;ENTRY POINT TO 6502 SUBROUTINE CALLING LOOP C000 KEYBD EQU $C000 ;LOCATION OF APPLE KEYBOARD C CR EQU 0DH ;CARRIAGE RETURN CHARACTER 000A LF EQU 0AH ;LINE FEED CHARACTER ; 6502 EQUATES: .6502 ;(SO WE CAN USE '$' FOR HEX CONSTANTS) DEMO MACRO-80 3.43 18-Sep-81 PAGE 1 TITLE DEMO SUBTTL EQUATES ; ; A SIMPLE DEMONSTRATION OF Z80 SUBROUTINE CALLING BY A 6502 PROGRAM. PAGE DEMO MACRO-80 3.43 18-Sep-81 PAGE 1-1 MACROS ; ; MACRO DEFINITIONS: ; ; THESE MACROS ARE INCLUDED ONLY AS EXAMPLES OF TO ALTERNATE 6502 RE-ENTRY ROUTINE 000E ALTFLG EQU 000EH ;ALTERNATE/NORMAL RE-ENTRY FLAG 000F TRAN EQU 000FH ;ENTRY TO CONTROL TRANSFER LOOP F3D0 GO6502 EQU 0F3D0H ;6٠ԍҠؠԍҠҍàԍҲàԠ̠Ҡ̠ˍҠˍàԍѠҍֱˍҠˍҳҠˍР˲Ԡ٠ˍ010 KBDSTB EQU $C010 ;KEYBOARD STROBE FBDD BELL EQU $FBDD ;APPLE MONITOR BELL SUBROUTINE ; OFFSETS INTO Z80 REGISTER SAVE AREA: ; EXTERNAL DECLARATIONS: EXTRN ITRAN ;CONTROL TRANSFER INITIALIZATION ; Z80 EQUATES: 0005 ; THE 6502 PROGRAM BELOW ACTUALLY PERFORMS A CP/M FUNCTION CALL TO ; PRINT A MESSAGE. ; .SALL ;SUPPRESS MACRO EXPANSION + .PRINTX * N MSG * + ENDIF ENDM +SUB MACRO N ;SUBTRACT WITHOUT BORROW + SEC + SBC N E? 1033' D0 F0 BNE DEMLOP ;CONTINUE UNTIL HE DOES 1035' 8D C010 STA KBDSTB ;EAT THE CHARACTER (IF CP/M HASN'T ALREADY) ; ; RETURN TO Z80 CODE BY SETTING ALTFLG NON-ZERO. THIS T 0012' CD 000F CALL TRAN ;CALL THE 6502 MAIN PROGRAM 0015' 21 FBDD LD HL,BELL ;NOW CALL THE 6502 BELL SUBROUTINE 0018' 22 F3D0 LD (GO6502),HL ;IN THE APPLE MONITOR WITH A 'STANDAR + JSR ADDR ENDM +LDXAI MACRO WORD ;LOAD WORD IMMEDIATE INTO X,A + LDA #<(WORD) + LDX #>(WORD) .PHASE *+$1000 ;COMPENSATE FOR Z80 CARD ADDR OFFSET 1022' A2 FF DEMO65: LDX #$FF ;INITIALIZE STACK POINTER 1024' 9A TXS 1025' +DEMLOP: LDAYI MESSAGE ;GEER IT RETURNS. ; .Z80 0000' ED 7B 0006 DEMO: LD SP,(BDOS+1) ;INIT STACK POINTER TO TOP OF MEMORY 0004' CD 0000* CALL ITRAN ;INIT Z80 SUBROUTINE CALLER MECHANIS ENDM +JEQ MACRO ADDR ;JUMP IF EQUAL + BNE *+5 + JMP ADDR ENDM + SUBTTL MAIN PROGRAM - 6502 CODE PAGE DEMO MACRO-80 3.43 18-Sep-81 PAGE 1-3 MAIN PROGRAM - 6502 CODE ; ; START OF 6502 CODE D' 001B' 2A F3DE LD HL,(Z80SLT) ;6502 SUBROUTINE CALL 001E' 77 LD (HL),A ;TURN ON 6502... 001F' C3 0000 JP 0 ;REBOOT CP/M AFTER WE HAVE RANG THE BELL ENDM +LDAYI MACRO WORD ;LOAD WORD IMMEDIATE INTO A,Y + LDY #<(WORD) + LDA #>(WORD) ENDM T POINTER TO MESSAGE 1029' 20 1040' JSR PRMSG ;PRINT IT 102C' AD C000 LDA KEYBD ;SEE IF HE HIT A KEY 102F' 29 7F AND #$7F ;STRIP PARITY BIT (CP/M MAY HAVE EATEN CHAR) 1031' C9 1B CMP #ESC ;WAS IT ESCAPM 0007' 21 1022' LD HL,DEMO65 ;SET UP ENTRY POINT OF 6502 CODE 000A' 22 000C LD (VEC65A),HL 000D' 3E 01 LD A,1 ;ALTFLG=1 FOR INITIAL ENTRY 000F' 32 000E LD (ALTFLG),A RNE MACRO ;RETURN IF NON-ZERO + BEQ *+3 + RTS ENDM +CMI MACRO ADDR ;CALL IF MINUS + BPL *+5 ; ; THIS SIMPLY PRINTS A MESSAGE OVER AND OVER UNTIL SOMEONE HITS ; THE ESCAPE KEY ON THE APPLE KEYBOARD. ; .6502 PAGE DEMO MACRO-80 3.43 18-Sep-81 PAGE 1-2 MAIN PROGRAM - Z80 CODE ; ; THIS CODE SIMPLY CALLS THE MAIN 6502 PROGRAM, AND BEEPS ; AFT +LDYA MACRO ADDR ;LOAD WORD INTO Y,A FROM ADDRESS A + LDA ADDR + LDY ADDR+1 ENDM SUBTTL MAIN PROGRAM - Z80 CODE ELLS TRAN ; THAT WE DON'T WANT TO DO A Z80 SUBROUTINE CALL. ; 1038' A9 FF LDA #$FF ;SET ALTFLG=NON-ZERO TO TELL TRAN THAT 103A' 8D 100E STA ALTFLG+$1000 ;6502 CODE IS RETURNING 000C VEC65A F3DE Z80SLT 0004 ZBC 0006 ZDE 0000 ZPC No Fatal error(s)  1022' DEMO65 001B ESC F3D0 GO6502 03C0 GOZ80 0005* IT BYTE 1065' 60 RTS ; ; MESSAGE TEXT ; 1066' 2A 2A 2A MESSAGE: ASC '*** HIT "ESC" TO RING THE BELL ***' 1069' 20 48 49 106C' 54 20 22 TAX ;PUT HI BYTE INTO X 1044' 98 TYA ;GET LOW BYTE OF PTR TO A REG 1045' A0 06 LDY #ZDE ;GET PTR TO MSG INTO Z80 D,E REGS 1047' 20 105F' JSR STORWD 104A' A0 04 L000E ALTFLG 0005 BDOS FBDD BELL 1057' CALLZ80 000D CR 1025' DEMLOP 0000' DEMO 1022' DEMO65 001B ESC F3D0 GO6502 03C0 GOZ80 0005* IT 1-4 MAIN PROGRAM - 6502 CODE ; STORWD - STORE WORD INTO REG SAVE AREA ; ; STORES WORD IN X,A INTO Z80 REGISTER SAVE LOC POINTED TO BY Y REG. ; (X=HI,A 103D' 4C 03C0 JMP GOZ80 ;RETURN TO Z80 ; ; PRMSG - PRINT A MESSAGE ; ; A,Y CONTAIN POINTER TO MESSAGE TO PRINT (A=HI, Y=LO). CHARS IN MSG DFB CR,LF 108A' 24 ASC '$' .DEPHASE + PRINTE %(*-DEMO), SUBTTL 106F' 45 53 43 1072' 22 20 54 1075' 4F 20 52 1078' 49 4E 47 107B' 20 54 48 107E' 45 20 42 1081' 45 4C 4C 1084' 20 2A 2A 1087' 2A 1088' 0D 0A DY #ZBC ;GET BDOS COMMAND #9 - PRINT MESSAGE 104C' A9 09 LDA #PRMSGF ;INTO Z80 C REGISTER 104E' 91 FA STA (REGPTR6),Y + LDXAI BDOS 1054' 4C 1057' JMP CALLZ80 ;CALL RAN C010 KBDSTB C000 KEYBD 000A LF 1066' MESSAGE 1040' PRMSG 0009 PRMSGF 00FA REGPTR6 0008 REGPTRZ 105F' STORWD 000F TRAN 000A VEC65 =LO) ; 105F' 91 FA STORWD: STA (REGPTR6),Y ;STORE A,X INTO REGISTER SAVE AREA 1061' C8 INY ;WITH PTR TO REGISTER IN Y 1062' 8A TXA 1063' 91 FA STA (REGPTR6),Y ;STORE HI ; MUST HAVE THEIR HI BITS CLEAR, AND MESSAGE MUST TERMINATE WITH A ; DOLLAR SIGN. ; 1040' +PRMSG: SUB #$10 ;CONVERT 6502 ADDRESS INTO Z80 ADDRESS 1043' AA SYMBOL TABLE END DEMO DEMO MACRO-80 3.43 18-Sep-81 PAGE S SYMBOL TABLE Macros: CMI JEQ LDAYI LDXAI LDYA PRINTE RNE SUB Symbols: 00 CALLZ80: LDY #ZPC ;POINT TO Z80 PC REGISTER 1059' 20 105F' JSR STORWD ;STORE CALL ADDRESS CONTAINED IN A,X 105C' 4C 03C0 JMP GOZ80 ;TRANSFER CONTROL TO Z80 ; DEMO MACRO-80 3.43 18-Sep-81 PAGEBDOS AND RETURN ; ; CALLZ80 - CALL Z80 SUBROUTINE ; ; Z80 ADDRESS OF SUBROUTINE TO CALL MUST BE IN X,A (X=HI,A=LO) ; 1057' A0SSXi fD "8-؉7gv" 0D  1" 0D AZ` OA0/h8 L`0*_J*L 4鐊HP@H$")L" $G QL&BP4$TE$ ENDIF ENDIF ; EQUATES: 0008 REGPTRZ EQU 0008H ;Z80 ADDRESS OF POINTER TO REGISTER PASS AREA 000A INITIALIZATION ROUTINE ; VERSION SWITCHES ; ; THESE SWITCHES DETERMINE WHICH REGISTERS WILL BE PASSED 0001 PRIME .PRINTX * ALTERNATE REGISTERS * ENDIF IFE INTRFSH .PRINTX * INTERRUPT & REFRESH * ENDIF DEX ASET 0 ;1 TO PASS IX,IY INDEX REGISTERS IF1 .PRINTX * PASSING ALL REGISTERS * IFE RGS8080 AND PRIME AND INTRFSH AND INDEX RGS8080 ASET 1 ;1 TO PASS 8080 REGISTER SUBSET: SP,HL,BC,DE,AF 0000 PRIME ASET 0 ;1 TO PASS PRIME REGISTERS: HL',BC',DE',AF' 0000 INTRFSH ASET 0 ;1 TO PASS INTERRUPT & REFRESH REGISTERS 0000 IN{͎!%" >2!"*wi C)L8 b LZ bLȊ`*** HIT "ESC" TO RING THE BELL *** $! "! ">2!"!" " 2s"SC" :( * 2* "*w{: !* 2* *[ IFE INDEX .PRINTX * INDEX REGISTERS * ENDIF IFE RGS8080 .PRINTX ! CANNOT BE DEBUGGED WITH DDT65 ! TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1 TITLE TRANSFER - Z80 TO 6502 TRANSFER SUBTTL EQUATES, MACROS PUBLIC ITRAN ;TRANSFER .PRINTX * EXCEPT: * ENDIF IFE RGS8080 .PRINTX * 8080 REGISTER SUBSET * ENDIF IFEKhh`>ġ:>̡!>(=‚4=2!" " 2s"SC" :( * 2* "*w{: !* 2* *[HE BELL *** $! "! ">2!"!" " 2s"SC" :( * 2* "*w{: !* 2* *[ VEC65 EQU 000AH ;Z80 ADDRESS OF NORMAL 6502 RETURN ROUTINE 000C VEC65A EQU 000CH ;Z80 ADDRESS OF ALTERNATE 6502 RETURN ROUTINE 000E ALTFLG EQU 000EH ;ALTERNATE/NORMAL RETURN ROUTINE FLAG 000F LL IS ; PERFORMED. ; ; SET THE SWITCHES AT THE BEGINNING OF THIS PROGRAM TO DETERMINE ; WHICH REGISTERS ARE PASSED IN THE REGISTER PASS AREA. 22 0010 LD (TRAN+1),HL 0017' 21 1079' LD HL,BACK65 ;ADDRESS OF NORMAL 6502 RE-ENTRY ROUTINE 001A' 22 000A LD (VEC65),HL ;INTO BOTH VECTORS JUST IN CASE 001D' 22 000C LD (VEC65A),HL IF1 .PRINTX * N MSG * ENDIF TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1-1 EQUATES, MACROS ENDM ; ROUTINE POINTED TO BY EITHER VEC65 OR VEC65A IS CALLED. ; UPON RETURN, PASSA+ZPC IS ASSUMED TO CONTAIN THE ADDRESS OF ; A Z80 SUBROUTINE TO CALL. SO, THE Z80 REGISTERS ARE LOADED .Z80 0000' 21 007C' ITRAN: LD HL,PASSA ;STORE ADDRESS OF REGISTER PASS AREA 0003' 22 0008 LD (REGPTRZ),HL ;INTO REGPTRZ 0006' 21 107C' LD HL,PASSA+1000H ;STORE 6502 ADDRESS OF REG PASS AREA TRAN EQU 000FH ;POSITION-INDEPENDENT ENTRY POINT TO TRAN1 F0FA REGPTR6 EQU 0F0FAH ;6502 ADDRESS OF PTR TO REGISTER PASS AREA F3DE Z80SLT EQU 0F3DEH ;SLOT ADDRESS OF Z80 CARD F3D0 PAGE TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1-3 TRAN1 - Z80 SUBROUTINE CALLER ; ; TRAN1 ; 0020' AF XOR A ;FLAG USING NORMAL RE-ENTRY VECTOR 0021' 32 000E LD (ALTFLG),A 0024' C9 RET SUBTTL TRAN1 - Z80 SUBROUTINE CALLER SUBTTL ITRAN - TRANSFER INITIALIZATION PAGE TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1-2 ITRAN - TRANSFER INITIALIZATION ; ITRA ; FROM THE PASS AREA AND THE SUBROUTINE IS CALLED. HOWEVER, IF ; ALTFLG WAS NON-ZERO, THE CODE SIMPLY DOES A RETURN TO THE Z80 ; PROGRAM THAT INITIALLY CALLED 'TRAN'; NO SUBROUTINE CA 0009' 22 F0FA LD (REGPTR6),HL ;INTO REGPTR6 000C' 3E C3 LD A,0C3H ;STORE 'JP' INSTRUCTION AT TRAN 000E' 32 000F LD (TRAN),A 0011' 21 0025' LD HL,TRAN1 ;STORE ADDRESS FIELD 0014' GO6502 EQU 0F3D0H ;6502 SUBROUTINE CALL ADDRESS ; MACRO DEFINITION PRINTE MACRO N,MSG ;MACRO TO PRINT 'BYTES GENERATED' ; THIS CODE PERFORMS THE ACTUAL Z80 SUBROUTINE CALL. ON ENTRY, ; THE CONTENTS OF ALL Z80 REGISTERS ARE SAVED IN THE REGISTER ; PASS AREA. THEN, DEPENDING ON THE STATE OF ALTFLG, THE 6502 N AT LOCATION TRAN. FINALLY, ; ALTFLG IS INITIALIZED TO ZERO, AND BOTH VEC65 AND VEC65A ARE ; SET TO POINT TO BACK65, THE STANDARD 6502 RE-ENTRY ROUTINES. ; N ; ; ROUTINE TO INITIALIZE TRANSFER. ITRAN SETS UP REGPTRZ ; AND REGPTR6 TO POINT TO THE REGISTER PASS AREAS. IT ALSO ; STORES A 'JP TRAN1' INSTRUCTIO ; 0025' TRAN1: IF RGS8080 0025' ED 73 0086' LD (PASSA+ZSP),SP ;SAVE 8080 REGISTER SUBSET 0029' 22 0084' LD (PASSA+ZHL),HL 002C' ED 53 0082' LD IF INTRFSH LD A,(PASSA+ZI) ;GET I & R REGISTERS LD I,A ;SET UP INTERRUPT REGISTER LD A,(PASSA+ZR) LD R,A ;SET UP 0051' 77 LD (HL),A ;TURN ON 6502 AND PUT Z80 TO SLEEP IF RGS8080 0052' ED 7B 0086' LD SP,(PASSA+ZSP) ;RESTORE STACK VALUE HERE FOR PUSHES LATER ENDIF IF INTRFSH LD A,I ;SAVE INTERRUPT REGISTER LD (PASSA+ZI),A LD A,R ;AND REFRESH REGISTERS LD (PASSA+ZR),A ENDIF IF PRIME LD HL,(PASSA+ZHLP) ;RESTORE PRIME REGISTERS LD DE,(PASSA+ZDEP) LD BC,(PASSA+ZBCP) EXX ;GET THEM INT,NORMVEC ;USE VEC65 IF ZERO 003F' 2A 000C LD HL,(VEC65A) ;ELSE USE ALTERNATE 6502 ROUTINE TO EXECUTE 0042' AF XOR A 0043' 32 000E LD (ALTFLG),A ;ALWAYS CLEAR ALTFLG 0046' 18 03 (PASSA+ZDE),DE 0030' ED 43 0080' LD (PASSA+ZBC),BC 0034' F5 PUSH AF ;GET A & F TO HL BY PUSHING 0035' E1 POP HL ;AND POPPING INTO HL 0036' 22 007E' LD (PASSA+ZAF),HL 005C' 21 0025' Z80SUB: LD HL,TRAN1 ;MAKE SURE SUBROUTINE WILL RETURN TO TRAN1 005F' E5 PUSH HL ;BY PUSHING A PSEUDO-RETURN ADDRESS 0060' 2A 007C' LD HL,(PASSA+ZPC) ;GET ADDR OF SUBROUTI 0056' 3A 000E LD A,(ALTFLG) ;NOW SEE IF 6502 WANTS US TO RETURN 0059' B7 OR A ;OR CALL A SUBROUTINE 005A' 20 0C JR NZ,RSTRGS ;IF NZ, THEN RESTORE REGISTER & RETURN. IF PRIME EX AF,AF' PUSH AF ;PUSH ALTERNATE A & FLAGS POP HL ;POP THEM INTO HL LD (PASSA+ZAFP),HL O ALTERNATE REGISTERS LD HL,(PASSA+ZAFP) ;GET AF' PUSH HL POP AF EX AF,AF' ;PUT IN ALTERNATE REGISTERS ENDIF JR GOVEC 0048' 2A 000A NORMVEC: LD HL,(VEC65) ;NORMAL 6502 ROUTINE TO EXECUTE 004B' 22 F3D0 GOVEC: LD (GO6502),HL 004E' 2A F3DE LD HL,(Z80SLT) ENDIF IF INDEX LD (PASSA+ZIX),IX LD (PASSA+ZIY),IY ENDIF NE TO CALL 0063' E5 PUSH HL ;AND SAVE ON STACK - GO VIA RET LATER 0064' AF XOR A 0065' 32 000E LD (ALTFLG),A ;CLEAR ALTERNATE VECTOR FLAG 0068' RSTRGS: TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1-4 TRAN1 - Z80 SUBROUTINE CALLER 0039' 3A 000E LD A,(ALTFLG) ;SEE WHETHER TO USE VEC65 OR VEC65A 003C' B7 OR A 003D' 28 09 JR Z EXX ;NOW SAVE ALTERNATE REGISTERS LD (PASSA+ZHLP),HL LD (PASSA+ZDEP),DE LD (PASSA+ZBCP),BC ENDIF REFRESH REGISTER ENDIF IF RGS8080 0068' 2A 007E' LD HL,(PASSA+ZAF) ;GET A & FLAGS 006B' E5 PUSH HL 006C' F1 POP AF TRANSFER - Z8bols: 000E ALTFLG 1079' BACK65 F3D0 GO6502 004B' GOVEC 0000 INDEX 0000 INTRFSH 0000I' ITRAN 0048' NORMVEC 007C' PASSA 001A PASSIZ 0000 PRIME 007C' D DSECT ;TO GENERATE OFFSETS D ORG 0 ;RELATIVE TO ZERO D D ; NOTE: SPACE FOR ALL REGS MUST BE ALLOCATED FOR USE WITH DDT65 ET ;DISPATCH TO SUBROUTINE (OR RETURN TO CALLER) SUBTTL NORMAL 6502 RE-ENTRY CODE PAGE TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1-6 NORMAL 6502 RE-ENTRY PASS AREA D 001A DEND ; REGISTER PASS AREA 007C' PASSA: DS PASSIZ R' AT $3CF A 'JMP' 107B' 60 RTS ;NOW RETURN TO ORIGINAL CALLER .DEPHASE SUBTTL REGISTER PASS AREA AND REGISTER OFFSETS 0 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1-5 TRAN1 - Z80 SUBROUTINE CALLER 006D' 2A 0084' LD HL,(PASSA+ZHL) 0070' ED 5B 0082' LD DE,(PASSA+ZDE) 0074' ED 4B 0080' LD BC,(PASSA+ZBC) 2 ;HL 000A D ZSP: DS 2 ;STACK POINTER 000C D ZAFP: DS 2 ;PRIME ACC AND FLAGS 000E D ZBCP: DS 2 ;BC' 0010 D ZDEP: DS 2 ;DE' 0012 D ZHLP: DS 2 ;HL' 0014 D 0000 D ZPC: DS 2 ;PROGRAM COUNTER REGISTER OFFSET 0002 D ZAF: DS 2 ;ACCUMULATOR AND FLAGS 0004 D ZBC: DS 2 ;BC 0006 D ZDE: DS 2 ;DE 0008 D ZHL: DS CODE ; ; BACK65 ; ; THIS SHORT SUBROUTINE IS USED TO RETURN TO THE INITIAL ; 'JSR $3C0' THAT WAS USED PRINTE %($-ITRAN), SUBTTL SYMBOL TABLE END TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE S SYMBOL TABLE Macros: PRINTE Sym PAGE TRANSFER - Z80 TO 6502 TRANSFER MACRO-80 3.43 18-Sep-81 PAGE 1-7 REGISTER PASS AREA AND REGISTER OFFSETS ; REGISTER OFFSETS INTO REGISTER PASS AREA: ENDIF IF INDEX LD IX,(PASSA+ZIX) LD IY,(PASSA+ZIY) ENDIF 0078' C9 R D ZIX: DS 2 ;IX 0016 D ZIY: DS 2 ;IY 0018 D ZI: DS 1 ;INTERRUPT REGISTER 0019 D ZR: DS 1 ;REFRESH REGISTER D 001A D PASSIZ EQU $ ;SIZE OF REGISTERE UNKNOWN AFTER A RETURN. ; .6502 .PHASE *+$1000 1079' 68 BACK65: PLA ;POP OFF RETURN ADDR TO MAKE 107A' 68 PLA ;'JS TO CALL THE Z80 SUBROUTINE. IT ; SIMPLY POPS OFF THE RETURN ADDRESS PUSHED BY THE 'JSR' AT ; $3CF (MAKING IT A 'JMP') AND RETURNS. ; ; A,X,Y & STATUS ARF0FA REGPTR6 0008 REGPTRZ 0001 RGS8080 0068' RSTRGS 000F TRAN 0025' TRAN1 000A VEC65 000C VEC65A F3DE Z80SLT 005C' Z80SUB 0002 ZAF 000C ZAFP 0004 ZBC 000E ZBCP 0006 ZDE 0010 ZDEP 0008 ZHL 0012 ZHLP 0018 ZI 0014 ZIX 0016 ZIY 0000 ZPC 0019 ZR 兕SѠTE$@XC_@O di( ב(" p9`v`~ q@$T +@`*M;Ovt- %r^2UX@in;Ivh4%`ITRAN!"!">2!("!|" " 2s"SC":( * 2* "*w{: !(*2**[Khh`+>*y, uCu+:iB(!|" " 2s"SC":( * 2* "*w{: !(*2**[Khh`+ 000A ZSP No Fatal error(s)  0068' RSTRGS 000F TRAN 0025' TRAN1 0012 ZHLP 0018 ZI 0014 ZIX 0016 ZIY 0000 ZPC 0019 ZR