!`ppBN8@NPBA@^`H急 ԍЩ h@ ԍЭh@3#/2%()'(`ȱȱi悥i(` r`i(`)(( (() L`0`P`8> ` ҍ ` Lb@aģa''HH #)>>>>>>@@@@@@@@@@TDVVVvTDV V V v܀TDV V*V(tTDV*VTtTD*V VTtT w ܀T<? *(T <*|TTD*v vTt@`P`@ (0```P`[؝0``` xŦ``mp````` ހ`` `90}`)`,}@`@`P`}`)`@`8@`P`@`}0`@`P`}`P`@`P`````` ;`( "&$b$(fh`XPHD@<840( (,(  8(lDDƪ  0@P (  6 8 *6 :j6 ( 6  6 (  ,8|<<   (<<  ,8|< /<<|<2"#~~~~~~~~~~~~~~~~ 0 4><<8( 0 0<<80 p 4><88(` p<=ԩ%Lb(I(I@ԩ00 1 _ \ 4  x ;))ୄн 4`!44!#+/&4(%-54!.40)'%/.3# *5,9"9*#2/5$902%3334!244/0,!9 \ҍҍҍҥi Щi(L?<>?>>>@}<8@|8A|x|8|}  (-zLw*/"  4ԍԢԩЩЩԩԩҩҢ  \ԩЅ )ip``` @`0P`` `0``````` 4   Й p i8@>K @`7P`0`A`p``` `P LAиi&Цp x i(ޥ@.)JJ e22̐̅Т ٜ0 ƒ)$ 8-H) x hJJiDžZ`1`,`% Ŏ( x0`` ``p`ǦP`AA`<`5 ŕ. )ip`G ` )K 0`0``)&`p`p` 0`i(0`ܦ`P`]``0``ݦ00 ҽ Ɗ禉````>P`(0`Əݥ ƒ%JR)DV%\)\(\OBV'ݷ 戥?LT`L$ `![\0 i9) eХ)e מ@?h) XƖ?i Щ)73-8)?)8   I8嘅)棥)ƥ+'eg8姅8塅IP iLL0&) @ i( 8嬍ҽ, L  D` V͑ L? I` i͑`4ΐ ΐ`ƻ`ƻ` )`9 i`i))` `>`ɺ`ɒ6  810͑쪽λmi `#/094/7()#(6%23)/.0,!9%26%23)/.!.)-!4)/.#3 i  ̱ бѱL ``8өө<`LU 8ҩ`x @ҍ X` } S Nҭ`Hi ) ҅h` i }LV VLq3!6%4/$)3+H ɠh`h` }` q`LHHΗhhh@ l0&JHh)  𻭤 }8`2Ѝ  RX k0x `x ( NөۍX`4%,%490%(%8$5-0%.4%234!240!'%%.4%2%.$0!'%%.4%234!24!$$2%33%.4%2%.$!$$2%334%,%490%02/'2!-,)34).' EGAP FO PMUD XEH FO GNITSIL MARGORPi ٹ d ٹ`H\ ٹ h L30//,%2!,2%!$9!#4)6%).35&&)#)%.430!#%/.$)3+à 렠  8`ۍ `%.$,%334(!.34!24 ߩ    ͛ ! LA{  k ٹ    %8. ٹ Υ :i͜ ΞЛ_I  L ٹ`ڠ L5 ,L(l$)) )ɀ ) )) ꘬`#2%!4).',)34).' i 8޻ 0ɀ0.$\$) ٹ`K #  츰7  츰̧ͦ ! Lʶ{  w ٹ  8 %8 ٹ 孥0 0mHmh88Hh 7ͩ ͨ  Lٹ _I  LL*ڠ L D 3L@L%.$&&4!"%8%#54%4!0%&$)3+&#/094/!#",/#+33%#4/23,%.'4("2!.#("34!3%# @+ e`8` `'/,/|3!E&/73)$%$76ץ%7!3).(%Ȫ,4;34J643$,$D$0(4Ѳ'4(Ѳ'33ͳ434$54,"!  i Lٹ ٹ` ٹ ٹLٹ } Lq `Ș)L` ` (` 1 `I-L-VE?{I^NV\_n⥩Ʃ?祹]̫ -------------------------- \B548 20 F1 B9 \B54B B0 F4 \B541 \B54D 8D 9B 04 \B550 A9 12 e b . c . L 8` ` :>:;xph`P")2$3!`ppBN8@NPBA@^`H急 ԍЩ h@ ԍЭh@3#/2%()'(`ȱȱi悥i(` r`i(`)(( (() L`0`P`8> `@aģa''HH #)>>>>>>@@@@@@@@@@TDVVVvTDV V V v܀TDV V*V(tTDV*VTtTD*V VTtT w ܀T<? *(T <*|TTD*v vTt@`P`@ (0```P`[؝0``` xŦ``mp````` ހ`` `90}`)`,}@`@`P`}`)`@`8@`P`@`}0`@`P`}`P`@`P`````` ;`( "&$b$(fh`XPHD@<840( (,(  8(lDDƒ  0@P (  6 8 *6 :j6 ( 6  6 (  ,8|<<   (<<  ,8|< /<<|<2"#~~~~~~~~~~~~~~~~ 0 4><<8( 0 0<<80 p 4><88(` p<=ԩ%Lb7 lda a1 1378 cmp a2 1379 bne copyloop 1380 lda a1+1 1381 cmp a2+1 1382 bne copyloop 1383 1384 ;init a segment 1385 mwa #definit initad 1386 jsr doinit 1387 jmp ?<>?>>>@}<8@|8A|x|8|}T  4ԍԢԩЩЩԩԩҩҢ  \ԩЅ )ip``` @`0P`` `0``````` 4   Й p i8@>K @`7P`0`A`p``` `P LAиi&Цp x i(ޥ@.)JJ e22̐̅Т ٜ0 ƒ)$ 8-H) x hJJiDžZ`1`,`% Ŏ( x0`` ``p`ǦP`AA`<`5 ŕ. )ip`G ` )K 0`0``)&`p`p` 0`i(0`ܦ`P`]``0``ݦ00 ҽ Ɗ禉````>P`(0`Əݥ ƒ%JR)DV%\)\(\OBV'ݷ 戥?l`$ `![\0 i9) eХ)e מ@?h) XƖ?i Щ)73-8)?)8   I8嘅)棥)ƥ+'eg8姅8塅IP iLL0&) @ i( 8嬍ҽ, L V sta (a3),y 1446 A409 E6 C6 D0 02 E6 C7 inw a3 1447 A40F A5 C6 lda a3 1448 A411 C5 CE cmp d6 1449 A413 D0 EF bne copyloop 1450 A415 A5 C7 lda a3+1 1451 A417 C5 CF cmp d7 1452 A419 D0 E9 bne copyloop 1453 1454 ;init a segment 1455 A41B A9 B6 8D E2 02 A9 + mwa #definit initad 1456 A425 20 2B A4 jsr doinit 1457 A428 6C E0 02 jmp (runad) 1458 1459 A42B doinit: 1460 A42B 6C E2 02 jmp (initad) 1461 1462 A42E getbyte: 1463 ;check if we have a run in progress 1464 A42E A5 CA lda d2 1465 A430 D0 4E bne getrunbyte 1466 1467 ;check if we need to reload flag bits 1468 A432 06 C9 asl d1 1469 A434 D0 1A bne havebits 1470 1471 ;check if we need to reload superflag bits 1472 A436 06 CD asl d5 1473 A438 D0 09 bne havesuperbits @8 A43F A9 7F lda #$7f 1479 A441 85 CD sta d5 1480 1481 A443 havesuperbits: 1482 ;pull next superf 0 4><<8( 0 0<<80 p 4><88(` p<$0300 (_disp_rowptr),y 275 A800 60 rts 276 .endp 277 278 ;========================================================================= 279 A801 .proc _disp_clearScreen 280 A801 A9 04 85 23 mva #$04 _disp_rowptr+1 281 A805 A9 00 85 22 mva #$00 _disp_rowptr 282 A809 A2 04 ldx #$04 283 A80B xloop: 284 A80B A0 00 ldy #0 285 A80D yloop: 286 A80D 91 22 sta (_disp_rowptr),y 287 A80F C8 iny 288 A810 D0 FB bne yloop 289 A812 E6 23 inc _disp_rowptr+1 290 A814 CA dex 291 A815 D0 F4 bne xloop 292 A817 60 rts 293 .endp 294 295 ;========================================================================= 296 A818 _disp_rowaddrinit: 297 A818 00 28 50 78 A0 C8 + :24 dta <($0400 + 40*#) 298 A830 04 04 04 04 04 04 + :24 dta >($0400 + 40*#) 34 35 A848 .proc _boot 36 A848 20 00 A0 jsr _crt0init 37 A84B 20 A5 A6 jsr _disp_init 38 A84E 58 cli 39 A84F A2 00 ldx #0 40 41 A851 BA tsx 42 A852 8D 88 02 sta _exitTestS 43 44 A855 A9 C8 8D 86 02 A9 + mwa #_jam _exitTest 45 4 51 A867 org segaddrlo 52 BF00 F4 dta module_begin 58 BF81 A6 dta >module_end 59 BF82 0  w  ܋܀w ܋ ܈ ܀ܚ܀ ܘ܈ܘ܀ܐܐܘܐܐ(((2 ~SFHWIF@@@@@@@@@@@aģa''HH  @a e+MA7u1'X"àjEGOi.54\NĐv' ”^iy-z($4e4iɤo>ghY;31ulEJ=Y0J v>|j˶2(;t2 ɉ"پد7WfacmL疚$Ę2pUP 21/Gv신`q?G-laCuQZYjfrXwOF\1tQs.kZ輸4)6'HŌ2HC}O9a*ңDZUL<Ȉ)*FK%H#S7؍! c%f6H4,;!PE4d[BWgro{ WE؍>?iWM[1:"HO(d&!mzͣU[ Қ&떊16\|6A4ۂ4`Mf3mMU5e$|mi۸e:Y܄ /#XU1ٰ`\eŦXPqp 0 @afT{OlJ-aD4G ^L( lP|ҋLzE uܠ]t$,+ׇ={ҥvͦ5LUʪP>(;v_Zaq;C"t[0MwDrEH@ J5ig9@_7y"!9iҐ TxD(9k-FYpN?֙)Q]b^DbH $JL3asG6%eGbQIhtҝFrhangʈ " ‹}CQazՄ*sWj xI*$ixʔT?l>o }V,^tMvsznS&1Jvwl\3؋EKuƽx];a0 Ȥ7SnFϒ80̫+B:AQvZs,tK_g sT@@& gVL5r e#5]$Ճ*y3OM]òΟ9M Q:[+=M1!I0߆0COblknL'RVĂݔa=m)sՒp[)Y^sv<]O, AJYv`ڶXn٦4-4{f{^y粟-3l_}|T/VKG4=5=F'9 F-D@ac9+dV9P'x3պDDιA XL*±&BԐff[nG0:bK~%f4^&Q{ެ=wiU'A>.!CU_yiLŒ, fw wb Ҡx ԍԩ"ԥԥԭ@X Ҡ ԍ Ҡ`0" Ҡx ԍԍԭ(`{ ` LҠ +Press a key...0 +` `hhȊ QHH`hhȊ nHH`  LU` +`ȱ% Lv`ȦȱdG x6e…ˆà6e…&ÈX L LLx LXȵ ȵ LD_…Åx6ɥe…¥eÅÈ6ȥe…¥eÅåeąĈX L L Lc ȵ LsȵȅµɅà ŢLLLLHJJJJ h)L Ţ`lLȢ `hh¥ñL梥HHL Q +...>  +SkippedhhȊ n h@l`ȅɅʅͅĩŠ . .% . . .ǥ驶 +llN ̩̐ ȩȰ L ʥ˅¥) åJJJJiʠH) hL`` Š`0123456789ABCDEFx   (`hhh@ !! $$$`$ 0詀!HhX 1!1 - cIncorrect 15KHz cycle count (even): $%x, cIncorrect 15KHz cycle count (odd): $%x 1!- cIncorrect 64KHz cycle count (even): $%x0, cIncorrect 64KHz cycle count (odd): $%xLN腀 ԍ Ԍ X $x ԍ Ԍ X $x`HHhh@POKEY: Init timing /  ŧʅ  ԩԩ"xX@ Ҡ ! `$H $ɛ0ɜ&} !!' h`  ! L JL!  Z L("!LHH齘hh ŧ#"'"# L "#`H****)h]!"`@ `!"I"`"#p"ȑ"ȑ"ȢB"Ƚ"Ƚ"A"ȩ"ȩ"`#""#`(Px@h0X Hp Xȍ L>>3#/2%()'(>H,WyIе$qDXziX%2zϱ¢yjbFfX׹[1?qOj 6I^#3n4x45 !bbQ!i W8r쑔NseX3鐠Du)(M#"fFlziPim(H ::bremf̄]~(jiIa'"J(3PڄJ;e뺴{Vӛƻ62;"PcP+&L SûP+AG D+&;k*f6Dc`A CNTE*mAjN!;@K\C)UT=}(nNĐ):}8`JeCyTn ǟ6^3Fw1QoXᕥ3"X,hzijfE<Ѡn#; sqSܮ1G_37 o)hy rwQY#"j9+j<8ʼn9Y"XIpi%o@`)>%cdUH,QwT璔7ڤg9sHJhs")TYs/&|J`5q&yy$B=F*RTkFo[rCmϑ6g)o\Ą,n^Itܹϯ'zyI9!IIRp<:jr( aE ԪsRdk9gᆷ6tZdوDN ! Ʃ1`X5Sh%U6w.VF

˷00LܭNc!E,_  ,pm4@R1e@9&_& "U2fF(_T!3 ]H]r JGE$En2r&8 넫l`.C Xa7$iv\\M9& XQqk-䈲[O\**_#ZHoC }[<5 Ý xY= Huq$=+)Z(:69*0{і!^nxxZGʨ q'UD3>4JY9NfKξgCҵ"Ld< RWcwZFN5P;)Hf12JK˞MKRZI58Eϻts4R7\U=USnbdJd6q̧U#mk@@4PX5jLaA&+rk2qqeqs#Hc#:[4I]HBJ_fl=N\eUH15]3g3Y4°$K:٪yN S솩qi;똩3 A6He#1bLI0Yl;I=q뱷7׬ƲkO H5\" &YذHx]E"[QXaQ5A xڨ@ŇNܤG'1|DCO0Cz#NQeEyl)V qqw$6v88"((y % 27mh|($pЩU҄( 2nK}FȘa+MHBfcNqӍ=6#x> ̸((!1B+*?ubL`ރۓI#qN7킽ڊkks >? Oo*"/*9pDV.-oI(RjZZ3WW}ۍU ^CΈJi8R)ē:ED.T, `԰)m$GjEs `e;ogo\u̝SfTdFNN]П *e.Zk%E"-"4T69uUJ) ,bIkNKug[@EgS,6:mJe%Fm4iizdIg4j U^0j~h~{B`!@aΖ--O(?l FI S"צSwϦsZ1DZZGOE#htٸtU<1^pMRM]D8Rfe5G"!/ke,-@Z(FC!eͩNjMHwr8Bʼƣ5`sX9qe1A"81Q#"|P)`lLEuX_I ޝ>] lBRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRVJmU)M*3Ǣmwn<2c'q1S41q" *,Cb2 0f{|<^e&GAoKu /Bl]*mꋽz˖(K)2YR}ĜOeJ+*n,jаm`58$GѲ׌!: jg*,ԭ}'2<1"Z39JT1yuq,"ATŽGdcK <ۇTF VHNjMe&4)`@FCHB*oVAB .Ӡg@*XL XNJXRQC:썖H.X]P1(I_ Vx*s,~\4=3Ŕbd!,=P:׻Ab @). d+)iykMy.,QI"u^=q1+ݶ'٘#ML͔0uQKuz]9#8(lDDƒ>A2QrucyzG̪ #5#de5mҔRN,SjѹNebe[?URIkk[s0VV^CGQ!(~¸&-[L5ARD~`CHc*>TP] (ŧ,+31ok3Z'MNQC=u&ǂQZfuCO鞈, ġ Yo wlc*vIl2b2{DŽiCI A~~mRZT,E䂑r1QĽ v#Zk C;Q#8 akH}8BD.wxP\Кp-@ FTDr'1*%JGbǏJ-C8*#\8>-ڋW,H62/25 `@aģa''HH #)>>>>>>@@@@@@@@@@TDVVVvTDV V V v܀TDV V*V(tTDV*VTtTD*V VTtT w ܀T<? *(T <*|TTD*v vTt@`P`@ (0```P`[؝0``` xŦ``mp````` ހ`` `90}`)`,}@`@`P`}`)`@`8@`P`@`}0`@`P`}`P`@`P`````` ;`( "&$b$(fh`XPHD@<840( (,(  8(lDDƒ  0@P (  6 8 *6 :j6 ( 6  6 (  ,8|<<   (<<  ,8|< /<<|<2"#~~~~~~~~~~~~~~~~ 0 4><<8( 0 0<<80 p 4><88(` p<=ԩ%Lb P N׉e@|Rew?* 0V?>>>@}<8@|8A|x|8|}T  4ԍԢԩЩЩԩԩҩҢ  \ԩЅ )ip``` @`0P`` `0``````` 4   Й p i8@>K @`7P`0`A`p``` `P LAиi&Цp x i(ޥ@.)JJ e22̐̅Т ٜ0 ƒ)$ 8-H) x hJJiDžZ`1`,`% Ŏ( x0`` ``p`ǦP`AA`<`5 ŕ. )ip`G ` )K 0`0``)&`p`p` 0`i(0`ܦ`P`]``0``ݦ00 ҽ Ɗ禉````>P`(0`Əݥ ƒ%JR)DV%\)\(\OBV'ݷ 戥?l`$ `![\0 i9) eХ)e מ@?h) XƖ?i Щ)73-8)?)8   I8嘅)棥)ƥ+'eg8姅8塅IP iLL0&) @ i( 8嬍ҽ, L V1;IUlmg-r\fp\ b@efئf a*"!XyS ,EVE$. J|b *MBX8HX7&椤V3mH%) U@sn+0HA#`u?:J '$ fфOǦ4Aߞ|^'[~@&Eg5lZ:mUM1h̰Xaw Q[qjV`$6㻦eF>ce 2"' 8wҕ9+J+b[&kA~J.y#[o7tnr#.rޙ ^,*J(B֑j -^%_q@¬1J!JԎi)<<8( 0 0<<80 p 4><88(` p<BwWwk]ADGu"XTs36^odwylV%;x;ǝėUɇ^kD5(ls?oᖐ10# +ՄI0pWvu"Ct&!LXd?ZZ_m3 W_J c rmaZŏE7LiR1ayPr`GMwH粊LʤjL?ʏ6>L٭iVwe6w3S3Ԟ21:!Ss#C  aa1[STDzLw*/"-N` V T tZeNb[#BK7jH )!BC(<ʮe5K h)p FtFI+75QZcry2J&ZJY~)ۯ&6`@3K&i&cl)TSv?,[C;0A1qu˴((y lLÑuCl5zŕQזh6[".x!-_!Z@ ڥzWe ׭_OVAߙaV㪷KI> iMR^Twxyro@T8"]@ E/hL5H-q&VEKeꉱuRjDAS뒘Q3(?6m CcXn(Ȝ[xΞ5F`EUl;CƢ&*<-EKl3&CdnKWP@VdE1*3U="lƒ/AAB01fSKUrBa.T ۖ c)u_;MG$gn"A"D- K"覛L !;[瑑 df42@n._PXFDt5jĸAY\)HD98UԩrhҨϝUozAf$&`Ѱml5dTt4dVzEjNTtc |CRvfs1}w,]ׯWB掱k .Z"k .tnSTҰwۗPniU/kk~'Պ0?LfݛݾU֗ZZPTTL1 Pj!@](IBA6O LPMXaE^B%,IyOM,$ J HMar"FI_,ZewI􌦤QZ7V]Q; dz6bfDQF$dvq19c~ye~, $@^`7i,`ABR$M@EFhix ]m&V K25Lń`{PZD@ΖT.ɤaR$KE8D=tVt3#xyк„:$SfIM'^3V 'OAuلfHN Sd)l3j%4 (\tEqjp/lZg7vψjUV_}[>AvotFuMEY(^yP ڜA*~3 V@Z4889SDm35Tyib |§- 3 w(Z?ۏާW}GMXR/[DyKYeA9JĴ̈́Q^A>HH  ^*TC%gW rdy&bO bJ-,p%(Mm90ӝ Ġ@E~gkizMmaK=hݘej3-y6[͚YkzUFE3d;X'\ꊄ@ c\GRsBg ];+(G[ÚԘ\tptT:E P If# 0j9vzDBN9dEp' ΖNJj,sTDV*VTt9 豇]L^B &$6< P*4 &X‚&R]5P(($j-2mςլhX@TTz&.Zj%phXTՍaKLK~ֿpTBos<:0AY?ALF7I˚rNDKJ,WG /9U1U?OJBcqb;.GԐPgmq4ܩ$Q&iѪN!ZѲ])CweD ,!,qB1ԭ^b wJ6вW0 72#1A1C+YLhirl abPFFRd:|\wAL4ﺐ(E`i5BbYpmaI4v?muZ&)i|{5˪lV'] 0`J&`TDVD*VVT Vt V v܀wn]_N+t+_0z+r#E?jի[D VXal.AR @ 'Q\P4T1t؊'aAE+cXp/`9y3JDk[HZ]o"Le^ה?S!聁.ejETD*V VTtBjJ ԖbٲH  И/'9`i&h!*aSxOS+ ƫ/Cò힘uպ?}Jay=z7cHsi"U<ݟyN*yŘgsmmL$T gM4Պ!E& 2K-3'X@d!"XH*&X y1:ɕI"ЗXVB0v5Ss41b$P Ȕx *!F@haZ@nn#^{43Xݴ[[wJ@)F\hl7(:WmaAI哫1i 2#cLd%yܶEWuRvW"|AdRSOʀбo6HqRh gM˲c.`;5xppgMYHdwrBX~Ja+x!8#I ,P< 0r@p$!٫`-*2 (L)b3 [pW->c;}|0mS:v" ~$Qd+f%Yv 1T $vן{:,K!c`TQ+_JB笰?Z}\r~3 _F2#Wh\?\e&:ni@N~bB6*<0#,$ 1̌H@ɂL AE7J|d ! !. Zd Zfrt ^,^ġ=dnW,FrɸGĢ!ѹi- Sm41DV܉JhF62B`BЂl^{-4f>f>ꪪ)k'd9cMEWCYz$T"l;EA2y IJ l`P@p pcJ O5P9)I-Y]Ngy詧yj8GgM4NA& =ovC۵{s񨶤sH`v. bMjnٳKD;fI_`W}羍@emcSLZ,z:mU{MMj4hnb%4"4!D6h*ELB`D$L@2 :3j4wy-g3/0%Όrh=~ڿitGurm`((W'\L(WBE^A'h'X(E 0r7B-M 4Ԡ([a`(CbLSw 0\!1 *I R@=҉n$Ȯ FFH,BKCZ#N]#-@?VaHmݼ0jglL;:TٓYԜxbfifyTyEEx3Rw109@EWQ";"AD2b/‘,1Tup?(jl'%Xj$ŘDⓤCe#-~(J? _gvLM& ')$hdK&/_}tizj?#W.i۹6hSG5]wMـ979=0H E9} @RXP([jyȈCݽ\!KbQ864֙T y|K_H^amJaHYhk':=g4%mLC>S<+V+XR1l#%R]\]?cY뾤H$4-Tn[iŒ-5m5NUQռQQ1TDV V V v܀џk+$\[iGr]$FȾ6sŨMjr&Rrw3 61-/~omW xl{̠@'-(nAd%), vL0:*j[yKּk7|H 6ZVhQtMSU;C%aFQ*ٷydGWf%-^w} J/]]_JRNyWTDV V VZ72֎]bY4X`rEyz4<,Ȉ wzLV1B$p  SVH`e mm/+DYupϵ*qCq!ndP `* ,tp9IYhSl6d]_/OWk̨cޫ͕NKo垗6Hy%}ی;//037DMP\% R)Y a%66A0>42]BԨ)0B&$!0uFy) Wce[viHE-YPW@bO4_EI]4eiRݘz07 fIo_QSosU&:3Oڭ^c4J @^B0@吅GĀDŽf%e/y D @}RjuGcvT((ćqP+@*Ebi5 Z=o(yTM j.5%#QbJ 5Joiz~B`#>E2+{&k~%^aW9;*Z'Ʒcq"BjQ/J!L@&QIcp96)RPTF>44lAg֘c0ibD{M-U;h!Me;ED  fҔ4V>=SY`Wx- -i̅Ջ녌A(cDS\û3EN`xfٹEQmads 1.9.3 build 49 (31 Jul 11) Label table: 00 0001 GENLIBRARY 00 0001 SEGS_IN_ROM 00 0001 SEGS_LZPACK 00 C000 gtia 00 C000 m0pf 00 C001 m1pf 00 C002 m2pf 00 C003 m3pf 00 C004 p0pf 00 C005 p1pf 00 C006 p2pf 00 C007 p3pf 00 C008 m0pl 00 C009 m1pl 00 C00A m2pl 00 C00B m3pl 00 C00C p0pl 00 C00D p1pl 00 C00E p2pl 00 C00F p3pl 00 C000 hposp0 00 C001 hposp1 00 C002 hposp2 00 C003 hposp3 00 C004 hposm0 00 C005 hposm1 00 C006 hposm2 00 C007 hposm3 00 C008 sizep0 00 C009 sizep1 00 C00A sizep2 00 C00B sizep3 00 C00C sizem 00 C00D grafp0 00 C00E grafp1 00 C00F grafp2 00 C010 grafp3 00 C010 trig0 00 C011 grafm 00 C012 colpm0 00 C013 colpm1 00 C014 colpm2 00 C014 pal 00 C015 colpm3 00 C016 colpf0 00 C017 colpf1 00 C018 colpf2 00 C019 colpf3 00 C01A colbk 00 C01B prior 00 C01C vdelay 00 C01D gractl 00 C01E hitclr 00 C01F consol 00 E800 pokey 00 E800 audf1 00 E801 audc1 00 E802 audf2 00 E803 audc2 00 E804 audf3 00 E805 audc3 00 E806 audf4 00 E807 audc4 00 E808 audctl 00 E809 stimer 00 E80A random 00 E80A skres 00 E80D serout 00 E80E irqen 00 E80E irqst 00 E80F skctl 00 E80F skstat 00 D400 dmactl 00 D401 chactl 00 D402 dlistl 00 D403 dlisth 00 D404 hscrol 00 D405 vscrol 00 D407 pmbase 00 D409 chbase 00 D40A wsync 00 D40B vcount 00 D40E nmien 00 D40F nmires 00 D40F nmist 00 0000 pokmsk 00 0001 rtclok 00 0003 critic 00 0004 atract 00 0005 sdlstl 00 0006 sdlsth 00 0007 sdmctl 00 0008 pcolr0 00 0009 pcolr1 00 000A pcolr2 00 000B pcolr3 00 000C color0 00 000D color1 00 000E color2 00 000F color3 00 0010 color4 00 0200 vimirq 00 0202 vvblki 00 0204 vvblkd 00 0206 vdslst 00 0208 vkybdi 00 020A vkybdf 00 00C0 a0 00 00C2 a1 00 00C4 a2 00 00C6 a3 00 00C8 d0 00 00C9 d1 00 00CA d2 00 00CB d3 00 00CC d4 00 00CD d5 00 00CE d6 00 00CF d7 00 0280 _intsOff 00 0281 _scrnOff 00 0282 _prevIRQ 00 0284 _prevVBI 00 0286 _exitTest 00 0288 _exitTestS 00 0289 _vputchar 00 0000 CPUMODE_6502 00 0001 CPUMODE_65C02 00 0080 CPUMODE_65C816 00 028B _cpuMode 00 028C sskctl 00 028D ch 00 02E0 runad 00 02E2 initad 00 02E4 _lastMod 00 A000 _crt0init 00 A004 _crt0init.zploop 00 A00B _crt0init.dbloop 00 A029 _crt0init.detdone 00 A030 _interruptsOff 00 A047 _interruptsOff.xit 00 A048 _interruptsOn 00 A065 _interruptsOn.xit 00 A066 _screenOn 00 A0A9 _screenOn.xit 00 A0AA _screenOff 00 A0D1 _screenOff.xit 00 A0D2 _waitVBL 00 A0DF _waitFrame 00 A0E8 _waitKeyPrompt 00 A10A _resetAV 00 A12B _imprint 00 A13E _imprintf 00 A151 _print 00 A155 _print.charloop 00 A167 _print.done 00 A168 _println 00 A16E _printf 00 A176 _printf.charloop 00 A184 _printf.escaped 00 A187 _printf.nextchar 00 A18C _printf.done 00 A18D _printf.special 00 A1A4 _printf.decloop1 00 A1B1 _printf.decloop2 00 A1D1 _printf.decdigit2 00 A1DD _printf.decdigit1 00 A1E4 _printf.notdec 00 A1F0 _printf.nothex 00 A205 _printf.nothexword 00 A215 _printf.decword1 00 A228 _printf.decword2 00 A254 _printf.decword3 00 A260 _printf.decword4 00 A268 _printf.notdecword 00 A276 _printf.notchar 00 A284 _printf.strloop 00 A296 _printf.strdone 00 A299 _printf.notstr 00 A29E _printf.puthexcond 00 A2A9 _printf.puthex 00 A2BF _printf.putbyte 00 A2C5 _printf.putbyte2 00 A2C8 _jam 00 A2C8 _jam.loop 00 A2CB _waitVCount 00 A2D1 _imTestInit 00 A2E6 _imTestInit.skiploop 00 A2F2 _imTestInit.skipdone 00 A2FE _testInit 00 A313 _testInit.msg 00 A317 _testEnd 00 A31A _testRestore 00 A32A _testRestore.scrnOK 00 A34E _testPassed 00 A363 _testFailed 00 A370 _testFailed.nomsgentry 00 A388 _testFailed.msg2 00 A38A _testFailed2 00 A390 _testSkipped 00 A3B7 _loadSeg 00 A3BB _runSeg 00 A3E2 _r4C _runSeg.all_literals 00 A450 _runSeg.havebits 00 A45A _runSeg.isrun 00 A480 _runSeg.getrunbyte 00 A499 _runSeg.getrawbyte 00 A4A2 _runSeg.putwinbyte 00 A4B6 _runSeg.definit 00 A4B7 _hexdig 00 BF00 segaddrlo 00 BF80 segaddrhi 00 A4C7 _crt0init_  w  ܋܀w ܋ ܈ ܀ܚ܀ ܘ܈ܘ܀ܐܐܘܐܐ(((2 ~SFHWIF@@@@@@@@@@@aģa''HH  oz1ϸc0@ ]Zba ɨ3S 2`Ή"L\0؁s=MC8IxjI]TE1 0.0808TɣU:+#r,iA@==+ڰ+CdiYtmdWlĵ GTYM+86 Ѷ\WIaۜ20YuJr%|%R?t=<ףN;^YbI.TGٲHC(Eg+[ξl?,lc5)amU[K1MqJݤhu!i^f)4iJM F8D4 m4 DS Z1d$Tt1@ȁY&B IP EYÖлˈ/f5:-X+ Iyþ)[2]%LUO@N:f.j˥&$M_QYbB,qRԺvnIKV^>?yIa䑀u&ܗ.!Q5UM9sm>1S:IL,-eK=z]1+j3^Ļح=z@IGhWspVK͢赾&{j_?Id6+VcS*IVwWhfewnڷۓڻ7Mj1iiٿf1s9M?-=xSSףʶoJeJw^ S7P5]^c1sص50I !ڸEAҠP 4 8h T` RF81%=-?%4NaGL"I̝V|s8aFo*rb\iúi؃8˘Z-j$9G:'8ǵI=zZ_Ԯi9kdeDw^mn] ,:D(0$ZV B$ "f10BO" ķp4eX)@*E\eIڻl*m#VQM$*-*I$V98D MPjh ,mI洧dm4}rTyMж#()Y8q> (4Lij[Z⊈}#Vd'͍*$QA >fnL8ȍLte48+Ye̶0hh8\t-8XoQ٦=B`JKY"3j}O_yY_0@&YL@`y.!B @˝Mbata~M]v])5:=>30 X@˚(&LtM̢1:` 즳a}I#:Eb@\B*F,HF!jA#iBW5GW9))&$#dz-D軣 N%Oxbwh;)D=NQRnEP`c`鑁vh$:`cEe-QqY&F~4 :B]ycY{:~M>;i&iOuW-ntƻe8w)k2]}kkS]X篏7޼r( i'L < tjtDe]*k ӑ@x,`CPu@"1W9MwtV1_Zg*`fd$12I2Km%uZ\ل)=b,\ BLk:v%evG6SciMQ ; "^12XiT!eIzc !uIf P' 0g,é,:D2 ]Rb[/HO`! *L*\2 S܂#39 )C;s-e|Ej|IT (QN>O>"KAdSlcI҆0'JoȊ(sd.F2Ecp&^эU|3C8V ReAPfV. P qg>c# aG aU?zъ#sBaɯ@"&잾"]J]Dۍe$wAqŠ$VSHg ))+SZ\n?ikE^Z"}9hȒNT tLNS %._  $LHdi:o$Ř6L4j_\$`Z10 +( >|}#]<# @2FdkL5ڮ+miYN+74iv+Qؤ#!H.Ɨqc2:fRnne>N%];,pΆ =WF}Y3 N0B'8ʣ&bD8<=+1J<[>zHG%%BVmgǡN.ޤπ:jC2.0yRi 8c~t-IwCMuRDܠ:.q"OvQT1"ME*INds4?Dc_Z 4a1KDA 0؃(jB#!b d!zOI~M]ځ,Σen!Cj""&ISJ,Nӑ4j_ճ?l"V+[OCv;57Vr-c?8~rm1e:wBi{bLQ`0jMCDV d7^9IGE&Pa=⬾r rjZv;QRZf-%ebjWJa,ٵbģ*NLTRǔlۦvi-> ^’* 1 Y'P86 exI4  !O,rIQf8<90 LT&QD'&PAH`ht˄^yB!Ú(3f]L?@3jK)i㼋N `/J__DPG*.1˅af)FA"qJ`U†ACC1jea U:ddiLX R|6qZZ7Ŗ׿'0s fAyN2N@"2߳n@%%b3'̱wq ,E/lzˡuͷ67BWx\<HFi`tĦ<\v: #P OؙZnhZ6p@3ebL4eU=e/2k$*5O&B %usuV[1V@hx!}r6ϻe>CZE5WmЩ+LQ5#BD EAr vT]fb'eI+GIR[K2"VQhe4 N4,B x,T,ñ))kaSQXs}਌0>^JGPpvtߗlFg,ϊk熔*^<&qf*֥unb e_g1OZC?QzNf*ƮQo.N}=$m"vcHVPE 4l4MTj'znlȁ,e[j&s!dtv S-+%"}ۄ% vz˙YjXVF٣mҍ^Z*kRryj:HyQߙ r,{wL ؗ1gU_a b!2z6z0EVqgz.V~B|Bd /l|$Q!BӲ 'pEŴ@*u^,4,eV͛c15"賫MAҮJ)ה-O8%NaX>yޔGi\>6僵9Ss7j2ҐpcK01mCSJea$`$p+G3Q.՘Y 1B~~0U$r΍r.#v r`KL5#mk4ZѶ\uXd,luZDRk %bm-1O!GcXdxUpB nyP02W]͡tv&fEԄ. O;R2ù.b@@9Pf@!8cAd]"9҇Hm3'gNKAX3#/2%()'( `0J avɸ{OBnR%R(#Uzas+:=it^O#ZTlT!*~V2/Պy*6b]`HHT+d'M LhE$U)&FJE~E]gV5tm\6)H MB{U) ":r04hK@Daqf\@C@&9fkOLz mUEc˲k&5('!M$Qe\Ksa3ZI++5OsU.eڜpgby ̎+әm_AɸFTp# #H&lEe1<ۗ/ ~Y^sUoqCVH(Q~t'WE[9LK㊆]fFe#%-XL,0ꛠ遪1`cXH!S΅*%bhEbsI! ˦D6ei57gXsѮd72*9nH7s@agD(FC/a(YKi.7I0t/3܄Yx(y{,{!.I2lzg%vt6kӠ)C$92](h0 ^򆴸re˙JBqIygu:H+FT.n#T6:~;uרnA;iJ/CiPV)8ՎF%@I9("]C GħU$%KV &6`#~ćX0p:1b'`NZlrB?Z$UTg䇕(H45yTLcE(mD)d^B**p #>9CE!yb~LuާT)ЖO3s#3ډPAP"KFCXj@y ]d-"`jb*-*2jYkj5y^P͕FKOpXkFRpju&\)rX@ - (Fqb`47IBH%ï1:J㬦g#v_i;^lQrlz |ku3dZb>۰uCw m|8kv3R)f&}bq>%Gy{^d1V~iHd|Vl\ȭՙ;jo/g_q=M+,mKM ݱ@F\@L @h8{_uNeCՆr~ڂ XI-R#wlkq jE#b}X̬s2% aDm04s5pؿFzJ+dW S<3ebY%JZҊW1ML9])u^STO&9dY}xL: +}R4eŨd݆W!$80SUd3HP$2oV0*;]-;2B^;8r{)V*Il"]VO% T Cr0TGl;Pѳo6@L%r BM0sBa)fe$}V쵌ڟ'(\)kZ&F&)YeS*A 'ɐ=C1CIG <p*̾+LQ0M.Œx^8l sG6cE1d6;TGBdt@-ezf,Dz,iV-_q꧳k}"=0Hu.:!痫qB༠A+%q.(񇢁( l/I<;҃^yYJMy՞@%366eւIpWDFy*6W%lljߞLEpwK _2);V;6 YB!xn&+`3᝗Jbw2n5+ee '1 hy؀&k_`RhKeѫCT~5.IGR\9I{vIrl |*bC>{b:5-mjvUkaٷ[fA^ F&Tx^y ؃DIC5w(a|Y#ɑF1]>2h !B'!mL(L /Љ:JAEѸg"%>L Hb íɶBϤx ^ ƥ\cY6ǩ/ 켨KVK&դc'̧̹BgloH(aKX(]Br+ 3[S\TbYPg*'ҟl1^=@&%f{/djiU_̰⧲k}"2ßSlى޾r4"kv$%|>Hs)ߣ 5Gʩլ-H/VsLhvgşYa{ݟ}mu2Z7QV6櫓 94$8\QHŶ P^ #{OjJ4({ ; j%\ep5PEgUy*M*^*a֙zYT$1-4/)h$z3C.6[ؚ.Jm[ J K}{k%^[{8a Nuf" ȁ[ >ZQCJtżk;2*K,q`0LX-Rg:pӵCLfJ/ 4?v5E+2jZ3ۥV*I,wآYSZz/$? M/!B/=(eF(TmDMge)a ! gL((ȣ"֠cL AwB`$Mh;fKĆ'WZ`XΨqt/Ӧ{KY[A648lQvtg >w62NpDPPix%Xu/>EQ'M|ǁ¢@G\{ s}BR/ƣQsw*H@@%vfIEziT-a%꒳k}5!%F22YL`isgTpLN"NRaHp$nmkHSYf[ ӗP̷Znwe}A4dùgDYd:ԎIƚChNeN *4 ʸ  LxD+.ѧ A :1Ziu LĪXX7JMX⸤TV\|FJM}XiI0lWXoDU% JeM2G0"=I.Y㑅WّsΗVίY͇L] *b'i7&g9#:(dk֙c.1&Z+L鈂)'qBS"MHBC!i$ԦK H]*& B(Qˆdᶉg5;*] #RmA5#GP4yYGڪ0/Gi" N'yK(( Iƥ@S 5P )%<*=6ԙZfF!$\z OdK1aQ}OFufzmcdŢzCubdcBޜӐMf~ggeZHs#=Bby\>yKm8?cY[tu9̀LT l pkU*".qeXW!AB25TMHJT@!%Ke{:Hk)TAa#4jFC Yw6aArg=$mɋss6!EMvݔTmrG.Eu/6SH8jdiw;k1u6LZ$B(9`t+BRvHJ@EX>??py>.2k'g;Ă]Q8mfoL1j.XO*aU&T>J8^8־L04rв!m(\J2DQ7%6s^+jVN ecm0Rŗ>n "I tC/0`̀@ЍZ.481X-;U6W#=H )I S-: La, 0=xh 0oQy*moI/L53#/2%()'(ײ tY'| kM,1f]$d!S YY@A,QɛU9Zk۰&vH>{ەuy"kHq4R@`Р0Ca2IŶBRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRV'AzPrU{0u 0,V5&\uD6zAɶ-QJ;6|'.g2eQ> T1J쿹s(:~egR F@ ªRO74qC!113 / UA@ `$Ď<90ʤAT s6R#MM1@8 Q$dF#"A ,ȹTa/JsrUh?PKo]HܥnL0RWʄ;\+XՈ!as 0mh&4UL|JЮ\r֥\䌰ڈQTlS̴=9kTbb#M],x\:08 n#jTH@Wrf(XlpaAxQcLHRHVBcj-5ϐBG|DusvG#h(Vmi3m>IOtMZ@VgU  IeGx0)z}ʼnNWx z pa#+0`E. $@''d[o5pe&] F5f}S@4((5:BүX8(lDDƒ>))f;*mmx/P9I3:= @iޚ:(R0bP,`#"\*P8f\T2abtyax(6g@(Z*"gݲhaBؑ'J{襽\PwEQc8QȬN.pxѨy/CS*x zG7 ݣ'(* O#.3@!SD$@َѪ[ֆ~~\]rylWm;BZ qUNYc1[FYG%?9Jqj&pA+p˻0%Ye`Fdf4@ h(`*B3 Tf^vp@,aR[[cpliw\5IBt}J!trXLD|Q$+='<-L ΫPc4˥7i\o YTHER`ppBN8@NPBA@^`H急 ԍЩ h@ ԍЭh@3#/2%()'(`ȱȱi悥i(` r`i(`)(( (() L`0`P`8> `@aģa''HH #)>>>>>>@@@@@@@@@@TDVVVvTDV V V v܀TDV V*V(tTDV*VTtTD*V VTtT w ܀T<? *(T <*|TTD*v vTt@`P`@ (0```P`[؝0``` xŦ``mp````` ހ`` `90}`)`,}@`@`P`}`)`@`8@`P`@`}0`@`P`}`P`@`P`````` ;`( "&$b$(fh`XPHD@<840( (,(  8(lDDƒ  0@P (  6 8 *6 :j6 ( 6  6 (  ,8|<<   (<<  ,8|< /<<|<2"#~~~~~~~~~~~~~~~~ 0 4><<8( 0 0<<80 p 4><88(` p<=ԩ%LbfT5%%9`_$;ˏYN  $s Gq$qӯ,'Zxy~'о-pj黊l3qQ@IӆhI`H B6[eDF(ZrPE8 C"DRzC4iŒ[^hr[nME0{a6)Et}D$(f86ƵpE;gGI>4i;WQ qЮms̆rF@uɇX$?<>?>>>@}<8@|8A|x|8|}T  4ԍԢԩЩЩԩԩҩҢ  \ԩЅ )ip``` @`0P`` `0``````` 4   Й p i8@>K @`7P`0`A`p``` `P LAиi&Цp x i(ޥ@.)JJ e22̐̅Т ٜ0 ƒ)$ 8-H) x hJJiDžZ`1`,`% Ŏ( x0`` ``p`ǦP`AA`<`5 ŕ. )ip`G ` )K 0`0``)&`p`p` 0`i(0`ܦ`P`]``0``ݦ00 ҽ Ɗ禉````>P`(0`Əݥ ƒ%JR)DV%\)\(\OBV'ݷ 戥?l`$ `![\0 i9) eХ)e מ@?h) XƖ?i Щ)73-8)?)8   I8嘅)棥)ƥ+'eg8姅8塅IP iLL0&) @ i( 8嬍ҽ, L V&wDckP q04'_$CxFVNIMEr$ "xhĢj픸V\oYZ1rUҕ5`q*2)9M6GxT0HQDRCH@e*h{,4اKe&U}S$".鵦Z8v]HW-)#NnvZ-zț.4*cY1Bj2-JtJZw;g(h\TDZHVDl0ȶֳjR5f/3DAPtrr  ; e"” CK [$%$5G"55"r+Boޡ:LE;"`Bq2؎1.Yn(ec䍕lbRhV$JP5#@qIDʄ͖DN?XkWims]Mt<! mV5 1f Ega{;+Ds.)ˆFHC%kMfl"rAyP|]'Z7. )Z*]P(KR)ЋmOO85",&^ aD "~DB9cIf,,Byqtir$ :q.r Id b5th֧͗F<5S4zkQd3>͡5NNxlT39npJWW|2a"'z TQ?-YJu)vt5G%^k]Dka(0$D$xЄZQD\`"3E eнsv`tX9&~@ ehL68̭@[Z~;)P)ˊgX 3 K"CfP9T"J0`P &6xvX)^27i"N>T"pkZm"PCρs@s2X 0 4><<8( 0 0<<80 p 4><88(` p<(bID:)]&"GdLW ~Y>.o+h؛^ggOYbmU}Tm-^ynw mnA{Oݠ3@,S2 Pa X00PHNK"@)!!9y =L`kŃ H$B 4 *G!P`0S}`J 9pB.ၨMOKdy땲PzSVX RFh߮]4H-OQBIQJ5T*I%@\ㆳ>Z 'SaTGy!$Y8bEC`TDzLw*/"-N` V T tĂFN$ۓXQ$;gm|6Yx||6VU0׽OauFԌ*EW4ƚxg -@LSlBƀ2@+|/X2 `8$M\ᄙK/qyB`Gpݗ +*qޘ${,Sǥ($)(PXN{ĥ9Jh 31j:MhGMH3Dbi-&֢G C-T 3W(Ztu4(xŘJ>>d*KEL3b"lB"O`q0bxxAMyIqIF㰧s/y_(#o IE*H5eDTA8Rk# ۚFX4*8N@ZfB+Cm3';ee"g(NTr%QjuXgB$Mrb~Xy@hқxLm#o)OM$u.hŶݩH癎l*P:`F6}!z3miʪW(XP" e)5Br~Ff֗%T„.\ZN.n`v&QB1dPQ*a3uUC ='}'ՙ$N"j#x+p"Ɛj#_ :26\@B6D&(iVdKm _&dU}ZTEp` ꩭ frU&yՄ1^  W]fc8*lȢ-1U+=ZgP[3s&aIl[]_NDmOmGA`*5C(zicQga h(V+JLA?5Z Sn/jkr d1L  CSKe"e`=FdFL`kJb$ѐaPhd!-oIz!K@8e r*$Rи򸍾F:i[ L}ӊҔ~m,N`%UC[}IG3E7~ŰsF'춧-nOܶ>X7,^}oZbJ_FAvcUH`n`W^d":eB nb P5L6\MY=\Ěnp) Pb`Bmg,WV]Ѵd eqhtzK{R(gn+]aٗASe;ݱz{TsW /=eq^K-m7g[^|{WT  2MAD2BC.@cEYbl5H,7sFOTUOMu*)) AQ᫰Ȇp@a@4DEU DVnfIO.YUnK,, ,Hصf[Ŷ>߿۱i[̽t @J? 328 329 dskinv equ $e453 330 ciov equ $e456 331 siov equ $e459 332 xitvbv equ $e462 333 .endif 334 335 ;========================================================================== 336 ; LIBRARY ZP 337 ; 338 = 00C0 a0 equ $c0 339 = 00C2 a1 equ $c2 340 = 00C4 a2 equ $c4 341 = 00C6 a3 equ $c6 342 = 00C8 d0 equ $c8 343 = 00C9 d1 equ $c9 344 = 00CA d2 equ $ca 345 = 00CB d3 equ $cb 346 = 00CC d4 equ $cc 347 = 00CD d5 equ $cd 348 = 00CE d6 equ $ce 349 = 00CF d7 equ $cf 350 351 ;========================================================================== 352 ; LIBRARY VARS 353 ; 354 opt o- 355 356 .ifdef SYS5200 357 opt f- 358 .else 359 .ifdef STANDALONE 360 opt o+ 361 .endif 362 .ifdef GENLIBRARY 363 opt o+ 364 .endif 365 .endif 366 367 .ifdef SYSSAP 368 org $0280 369 .endif 370 371 .ifdef SYS5200 372 org $0280 373 .endif 374 375 .ifdef SYS800 376 org $1000 377 .endif 378 _intsOff dta 0 379 _scrnOff dta 0 380 _prevIRQ dta a(0) 381 _prevVBI dta a(0) 382 _exitTest dta a(0) 383 _exitTestS dta $ff 384 _vputchar dta a(0) 385 386 = 0000 CPUMODE_6502 = 0 387 = 0001 CPUMODE_65C02 = 1 388 = 0080 CPUMODE_65C816 = 0x80 389 _cpuMode dta 0 390 391 .ifdef SYS5200 392 sskctl dta 0 393 ch dta 0 394 395 org $02e0 396 runad dta a(0) 397 initad dta a(0) 398 .endif 399 400 .ifdef SEGS_IN_ROM 401 _lastMod dta 0 402 .e> 408 .ifdef STANDALONE 409 opt o+f+ 410 .endif 411 .ifdef GENLIBRARY 412 opt o+f+ 413 .endif 414 415 .ifdef LIBBASE 416 org LIBBASE 417 .else 418 org $4000 419 .endif 420 .endif 421 422 .ifdef SYSSAP 423 org $4000 424 .endif 425 426 ;========================================================================== 427 ; MACROS 428 ; 429 .macro _INITTEST 430 jsr _imTestInit 431 dta :1,0 432 .endm 433 434 .macro _ASSERT1 435 lda :1 436 cmp #:2 437 beq pass 438 439 sta d1 440 jsr _testFailed 441 dta :3,0 442 pass: 443 .endm 444 445 .macro _ASSERT1_DUAL 446 lda :1 447 cmp #:2 448 beq pass 449 cmp #:3 450 beq pass 451 452 sta d1 453 jsr _testFailed 454 dta :4,0 455 pass: 456 .endm 457 458 .macro _ASSERTA 459 cmp #:1 460 beq pass 461 462 sta d1 463 jsr _testFailed 464 dta :2,0 465 pass: 466 .endm 467 468 .macro _ASSERTX 469 cpx #:1 470 beq pass 471 472 stx d1 473 jsr _testFailed 474 dta :2,0 475 pass: 476 .endm 477 478 .macro _ASSERTY 479 cpy #:1 480 beq pass 481 482 sty d1 483 jsr _testFailed 484 dta :2,0 485 pass: 486 .endm 487 488 .macro _FAIL 489 jsr _testFailed 490 dta :1,0 491 .endm 492 493 .macro _SKIP 494 jsr _testSkipped 495 dta :1,0 496 .endm 4>a c"SAP",$0d,$0a 503 dta c"AUTHOR ",$22,c"Avery Lee",$22,$0d,$0a 504 dta c"NAME ",$22,c":1",$22,$0d,$0a 505 dta c"TYPE D",$0d,$0a 506 dta c"INIT 2000",$0d,$0a 507 dta c"TIME 00:",c"05",$0d,$0a 508 dta a($ffff) 509 .endif 510 .endm 511 512 ;========================================================================== 513 .nowarn .proc _crt0init 514 .ifdef SYSSAP 515 jsr _crt0init_sap 516 .endif 517 518 ;clear zero page and database 519 .ifdef SYS5200 520 A000 A2 20 ldx #$20 521 A002 A9 00 lda #0 522 A004 zploop: 523 A004 95 00 sta 0,x 524 A006 E8 inx 525 A007 D0 FB bne zploop 526 A009 A2 80 ldx #$80 527 A00B dbloop: 528 A00B 9D 00 02 sta $0200,x 529 A00E E8 inx 530 A00F D0 FA bne dbloop 531 .endif 532 533 ;detect CPU 534 A011 A0 00 ldy #CPUMODE_6502 535 A013 F8 sed 536 A014 A9 99 lda #$99 537 A016 18 clc 538 A017 69 01 adc #$01 539 A019 D8 cld 540 A01A D0 0D bne detdone 541 542 ;we have at least a 65C02... check for 65C816 543 A01C A0 01 ldy #CPUMODE_65C02 544 545 A01E 38 sec 546 opt c+ 547 A01F C2 01 rep #$01 548 A021 B0 06 bcs detdone 549 A023 E2 01 sep #$01 550 A025 90 02 bcc detdone 551 opt c- 552 553 A027 A0 80 ldy #CPUMODE_65C816 554 A029 detdone: 555 A029 8C 8B 02 sty _cpuMode 556 557 .ifdef SYS5200 558 A02C 20 C7 A4 jsr _crt0init_5200 559 .endif 560 561 .ifdef SYS800 562 ;init putchar handler 563 mwa icptl _vputchar 564 inw _vputchar 565 .endif 566 567 A02F 60 rts 568 .endp 56>tsOff 572 A030 AD 80 02 lda _intsOff 573 A033 30 12 bmi xit 574 A035 78 sei 575 A036 AD 00 02 8D 82 02 + mwa vimirq _prevIRQ 576 A042 A9 FF 8D 80 02 mva #$ff _intsOff 577 A047 xit: 578 A047 60 rts 579 .endp 580 581 ;========================================================================== 582 A048 .nowarn .proc _interruptsOn 583 A048 AD 80 02 lda _intsOff 584 A04B 10 18 bpl xit 585 A04D 78 sei 586 A04E AD 82 02 8D 00 02 + mwa _prevIRQ vimirq 587 A05A A5 00 8D 0E E8 mva pokmsk irqen 588 A05F A9 00 8D 80 02 mva #$00 _intsOff 589 A064 58 cli 590 A065 xit: 591 A065 60 rts 592 .endp 593 594 ;========================================================================== 595 A066 .nowarn .proc _screenOn 596 .ifndef SYSSAP 597 A066 AD 83#/2%()'(8 sei 603 A06F A9 00 lda #0 604 A071 8D 0A D4 sta wsync 605 A074 8D 0E D4 sta nmien 606 A077 A9 22 8D 00 D4 mva #$22 dmactl 607 A07C A5 05 8D 02 D4 A5 + mwa sdlstl dlistl 608 A086 AD 84 02 8D 02 02 + mwa _prevVBI vvblki 609 A092 A9 40 lda #$40 610 A094 8D 0E D4 sta nmien 611 A097 58 cli 612 613 A098 20 D2 A0 jsr _waitVBL 614 A09B 8D 0A D4 sta wsync 615 A09E 8D 0A D4 sta wsync 616 A0A1 20 D2 A0 jsr _waitVBL 617 .endif 618 619 A0A4 A9 00 8D 81 02 mva #$00 _scrnOff 620 A0A9 xit: 621 A0A9 60 rts 622 .endp 623 624 ;========================================================================== 625 A0AA .nowarn .proc _screenOff 626 .ifndef SYSSAP 627 A0AA AD 81 02 lda _scrnOff 628 A0AD 30 22 bmi xit 629 630 A0AF 20 D>D4 sta wsync 636 A0B9 8D 0E D4 sta nmien 637 A0BC 8D 00 D4 sta dmactl 638 A0BF AD 02 02 8D 84 02 + mwa vvblki _prevVBI 639 A0CB 28 plp 640 .endif 641 642 A0CC A9 FF 8D 81 02 mva #$ff _scrnOff 643 A0D1 xit: 644 A0D1 60 rts 645 .endp 646 647 ;========================================================================== 648 A0D2 .nowarn .proc _waitVBL 649 A0D2 A9 7B lda #123 650 A0D4 CD 0B D4 D0 FB cmp:rne vcount 651 A0D9 CD 0B D4 F0 FB cmp:req vcount 652 A0DE 60 rts 653 .endp 654 655 ;========================================================================== 656 A0DF .nowarn .proc _waitFrame 657 A0DF EE 0A D4 inc wsync 658 A0E2 EE 0A D4 inc wsync 659 A0E5 4C D2 A0 jmp _waitVBL 660 .endp 661 662 ;========================================================================== 663 A0E8 .nowarn .proc _waitKeyPrompt 664 A0E8 20 2B A1 jsr _imprint 665 A0EB 50 72 65 73 73 20 + dta c"Press a key...",0 666 .ifdef SYS5200 667 A0FA A9 FF 8D 8D 02 mva #$ff 673 lda:req ch 674 .endif 675 A104 20 2B A1 jsr _imprint 676 A107 9C 00 dta $9c,0 677 A109 60 rts 678 .endp 679 680 ;========================================================================== 681 A10A .nowarn .proc _resetAV 682 A10A A9 00 lda #0 683 A10C 8D 1D C0 sta gractl 684 A10F 8D 0D C0 sta grafp0 685 A112 8D 0E C0 sta grafp1 686 A115 8D 0F C0 sta grafp2 687 A118 8D 10 C0 sta grafp3 688 A11B 8D 11 C0 sta grafm 689 A11E 8D 01 E8 sta audc1 690 A121 8D 03 E8 sta audc2 691 A124 8D 05 E8 sta audc3 692 A127 >============================= 697 A12B .nowarn .proc _imprint 698 A12B 68 pla 699 A12C AA tax 700 A12D 68 pla 701 A12E A8 tay 702 A12F E8 inx 703 A130 D0 01 C8 sne:iny 704 A133 8A txa 705 A134 20 51 A1 jsr _print 706 A137 A5 C1 lda a0+1 707 A139 48 pha 708 A13A A5 C0 lda a0 709 A13C 48 pha 710 A13D 60 rts 711 .endp 712 713 ;========================================================================== 714 A13E .nowarn .proc _imprintf 715 A13E 68 pla 716 A13F AA tax 717 A140 68 pla 718 A141 A8 tay 719 A142 E8 inx 720 A143 D0 01 C8 sne:iny 721 A146 8A txa 722 A147 20 6E A1 jsr _printf 723 A14A A5 C1 lda a0+1 724 A14C 48 pha 725 A14D A5 C0 lda a0 726 A14F 48 pha 727 A150 60 rts 728 .endp 729 730 ;========================================================================== 731 A151 .nowarn .proc _print 732 A151 85 C0 sta a0 733 A153 84 C1 sty a0+1 734 A155 charloop: 735 A155 A0 00 ldy #0 736 A157 B1 C0 lda (a0),y 737 A159 F0 0C beq done 738 A15B E6 C0 D0 02 E6 C1 inw a0 739 A161 20 BF A2 jsr _printf.putbyte 740 A164 4C 55 A1 jmp charloop 741 A167 done: 742 A167 60 rts 743 .endp 744 745 ;========================================================================== 746 A168 .nowarn .proc _println 747 A168 20 2B A1 jsr _imprint 748 A16B 9B 00 dta $9b,0 749 A16D 60 rts 750 .endp 751 ;========================================================================== 752 A16E .nowarn .proc _printf 753 A16E 85 C0 sta a0 754 A170 84 C1 sty a0+1 755 A172 A0 00 ldy #0 756 A174 84 C8 sty d0 757 A176 charloop: 758 A176 B1 C0>? 09 beq special 763 A184 escaped: 764 A184 20 BF A2 jsr putbyte 765 A187 nextchar: 766 A187 A0 00 ldy #0 767 A189 4C 76 A1 jmp charloop 768 A18C done: 769 A18C 60 rts 770 A18D special: 771 A18D E6 C8 inc d0 772 A18F A6 C8 ldx d0 773 A191 B1 C0 lda (a0),y 774 A193 E6 C0 D0 02 E6 C1 inw a0 775 A199 C9 64 cmp #'d' 776 A19B D0 47 bne notdec 777 A19D 98 tya 778 A19E 84 C2 sty a1 779 A1A0 A0 06 ldy #6 780 A1A2 78 sei 781 A1A3 F8 sed 782 A1A4 decloop1: 783 A1A4 36 C8 rol d0,x 784 A1A6 65 C2 adc a1 785 A1A8 85 C2 sta a1 786 A1AA 88 dey 787 A1AB D0 F7 bne decloop1 788 A1AD 84 C3 sty a1+1 789 A1AF A0 02 ldy #2 790 A1B1 decloop2: 791 A1B1 36 C8 rol d0,x 792 A1B3 65 C2 adc a1 793 A1B5 85 C2 sta a1 794 A3#/2%()'(799 A1BE A5 C3 lda a1+1 800 A1C0 F0 0F beq decdigit2 801 A1C2 AA tax 802 A1C3 BD B7 A4 lda _hexdig,x 80BRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRVr 807 A1D1 decdigit2: 808 A1D1 A5 C2 lda a1 809 A1D3 C9 10 cmp #$10 810 A1D5 90 06 bcc decdigit1 811OD B7 A4 lda _hexdig,x 816 A1E1 4C 84 A1 jmp escaped 817 818 A1E4 notdec: 819 A1E4 C9 78 cmp #'x' 820 A1E6 D0 08 bne nothex 821 A1E8 B5 C8 lda d0,x 822 A1EA 20 A9 A2 jsr puthex 823 A1ED 4C 87 A1 jmp nextchar 824 825 A1F0 nothex: 826 A1F0 C9 58 cmp #'X' 827 A1F2 D0 11 bne nothexword 828 A1F4 E6 C8 inc d0 829 A1F6 B5 C9 lda d1,x 830 A1F8 20 A9 A2 jsr puthex 831 A1FB A6 C8 ldx d0 832 A1FD B5 C7 lda d0-1,x 8338(lDDƒ>1 843 A20F 85 C3 sta a1+1 844 A211 85 C4 sta a2 845 A213 78 sei 846 A214 F8 sed 847 A215 decword1: 848 A215 36 C9 rol d1,x 849 A217 A5 C2 lda a1 850 A219 65 C2 adc a1 851 A21B 85 C2 sta a1 852 A21~~ecword1 857 858 A226 A0 08 ldy #8 859 A228 decword2: 860 A228 36 C8 rol d0,x 861 A22A A5 C2 lda a1 862 A22C 65 C2 adc a1 863 A22E 85 C2 sta a1 864 A230 A5 C3 lda a1+1 865 A232 65 C3 adc a1+1 866 A234 85 C3 sta a1+1 867 A236 A5 C4 lda a2 868 A238 65 C4 adc a2 869 A23A 85 C4 sta a2 870 A23C 88 dey 871 A23D D0 E9 bne decword2 872 A23F D8 cld 873 A240 58 cli 874 875 A241 AA tax 876 A242 F0 10 beq decword3 877 A244 20 9E A2 jsr puthexcond 878 A247 A5 C3 lda a1+1 879 A249 20 A9 A2 jsr puthex 880 A24C A5 C2 lda a1 881 A24E 20 A9 A2 jsr puthex 882 A251 4C 87 A1 jmp nextchar 883 884 A254 decword3: 885 A254 A5 C3 lda a1+1 886 A256 F0 08 beq decword4 887 A258 A5 C2 lda a1 888 A25A 20 A9 A2 jsr puthex 889 A25D 4C 87 A1 jmp nextchar 890 891 A260 decword4: 892 A260 A5 C2 lda a1 893 A262 20 A9 A2 jsr puthex 894 A265 4C 87 A1 jmp nextchar 895 896 A268 notdecword: 897 A268 C9 63 cmp #'c' 898 A26A D0 0A bne notchar 899 A26C E6 C8 inc d0 900 A26E B5 C8 lda d0,x 901 A270 20 BF A2 jsr putbyte 902 A273 4C 87 A1 jmp nextchar 903 904 A276 notchar: 905 A276 C9 73 cmp #'s' 906 A278 D0 1F bne notstr 907 908 A27A E6 C8 inc d0 909 A27C B5 C8 lda d0,x 910 A27E 85 C2 sta a1 911 A280 B5 C9 lda d0+1,x 912 A282 85 C3 sta a1+1 913 914 A284 strloop: 915 A284 A0 00 ldy #0 916 A286 B1 C2 lda (a1),y 917 A288 F0 0C beq strdone 918 A28A 20 C5 A2 jsr putbyte2 919 A28D E6 C2 D0 02 E6 C3 inw a1 920 A293 4C 84 A2 jmp strloop 921 922 A296 strdone: 923 A296 4C 87 A1 jmp nextchar 924 925 A299 notstr: 926 A299 C6 C8 dec d0 927 A29B 4C 84 A1 jmp escaped 928 929 A29E puthexcond: 930 A29E C9 10 cmp #$10 931 A2A0 B0 07 bcs puthex 932 A2A2 AA tax 933 A2A3 BD B7 A4 lda _hexdig,x 934 A2A6 4C BF A2 jmp putbyte 935 A2A9 puthex: 936 A2A9 48 pha 937 A2AA 4A lsr 938 A2AB 4A lsr 939 A2AC 4A lsr 940 A2AD 4A lsr 941 A2AE AA tax 942 A2AF BD B7 A4 lda _hexdig,x 943 A2B2 20 BF A2 jsr putbyte 944 A2B5 68 pla 945 A2B6 29 0F and #$0f 946 A2B8 AA tax 947 A2B9 BD B7 A4 lda _hexdig,x 948 A2BC 4C BF A2 jmp putbyte 949 950 A2BF putbyte: 951 A2BF AA tax 952 A2C0 20 C5 A2 jsr putbyte2 953 A2C3 8A txa 954 A2C4 60 rts 955 956 A2C5 putbyte2: 957 A2C5 6C 89 02 jmp (_vputchar) 958 .endp 959 960 ;========================================================================== 961 A2C8 .nowarn .proc _jam 962 A2C8 loop: 963 A2C8 4C C8 A2 jmp loop 964 .endp 965 966 ;========================================================================== 967 A2CB .nowarn .proc _waitVCount 968 A2CB CD 0B D4 D0 FB cmp:rne vcount 969 A2D0 60 rts 970 .endp 971 972 ;========================================================================= 973 A2D1 .nowarn .proc _imTestInit 974 A2D1 68 pla 975 A2D2 85 C0 sta a0 976 A2D4 A8 tay 977 A2D5 68 pla 978 A2D6 85 C1 sta a0+1 979 980 A2D8 E6 C0 D0 02 E6 C1 inw a0 981 982 A2DE A9 00 85 C2 mva #0 a1 983 A2E2 A5 C1 85 C3 mva a0+1 a1+1 984 A2E6 skiploop: 985 A2E6 B1 C2 lda (a1),y 986 A2E8 F0 08 beq skipdone 987 A2EA C8 iny 988 A2EB D0 02 E6 C3 sne:inc a1+1 989 A2EF 4C E6 A2 jmp skiploop 990 A2F2 skipdone: 991 A2F2 A5 C3 lda a1+1 992 A2F4 48 pha 993 A2F5 98 tya 994 A2F6 48 pha 995 A2F7 A5 C0 lda a0 996 A2F9 A4 C1 ldy a0+1 997 A2FB 4C FE A2 jmp _testInit 998 .endp 999 1000 ;========================================================================= 1001 A2FE .nowarn .proc _testInit 1002 .ifdef STANDALONE 1003 pha 1004 tya 1005 pha 1006 1007 jsr _crt0init 1008 1009 pla 1010 tay 1011 pla 1012 .endif 1013 1014 A2FE 20 51 A1 jsr _print 1015 A301 20 2B A1 jsr _imprint 1016 A304 2E 2E 2E 00 dta c"...",0 1017 1018 .ifdef STANDALONE 1019 mwa #_testEnd _exitTest 1020 .else 1021 A308 EA EA EA EA EA EA + :10 nop 1022 .endif 1023 1024 A312 60 rts 1025 1026 A313 msg: 1027 A313 2E 2E 2E 00 dta c"...",0 1028 .endp 1029 1030 ;========================================================================= 1031 A317 .nowarn .proc _testEnd 1032 .ifdef SYSSAP 1033 .ifdef STANDALONE 1034 jmp _sap_testEnd 1035 .else 1036 jmp _jam 1037 .endif 1038 .else 1039 .ifdef SYS5200 1040 A317 4C C8 A2 jmp _jam 1041 .else 1042 ;wait for key 1043 sei 1044 lda #0 1045 sta nmien 1046 sta irqen 1047 mva #3 skctl 1048 mva #$40 irqen 1049 bit:rne irqst 1050 1051 ;initiate soft reset 1052 jmp ($fffc) 1053 .endif 1054 .endif 1055 .endp 1056 1057 ;========================================================================= 1058 A31A .nowarn .proc _testRestore 1059 A31A D8 cld 1060 A31B 08 php 1061 A31C 78 sei 1062 1063 ;check if the screen is off; if so, make sure we kill DLIs 1064 A31D AD 81 02 lda _scrnOff 1065 A320 F0 08 beq scrnOK 1066 1067 A322 A9 00 lda #0 1068 A324 EE 0A D4 inc wsync 1069 A327 8D 0E D4 sta nmien 1070 1071 A32A scrnOK: 1072 1073 A32A AD 8C 02 8D 0F E8 mva sskctl skctl 1074 1075 .ifdef SYSSAP 1076 ;kill PIA port A interrupt 1077 mva #$3c pactl 1078 1079 ;force kernel ROMs back _out_ 1080 mva #$38 pbctl 1081 mva #$ff portb 1082 mva #$3c pbctl 1083 mva #$82 portb 1084 .endif 1085 .ifdef SYS5200 1086 A330 A9 00 8D 1B C0 mva #$00 prior 1087 A335 A9 F8 8D 09 D4 mva #$f8 chbase 1088 A33A A9 02 8D 01 D4 mva #$02 chactl 1089 A33F A9 04 8D 1F C0 mva #$04 consol 1090 .endif 1091 .ifdef SYS800 1092 ;kill PIA port A interrupt 1093 mva #$3c pactl 1094 1095 ;force kernel ROMs back in 1096 mva #$38 pbctl 1097 mva #$00 portb 1098 mva #$3c pbctl 1099 mva #$83 portb 1100 .endif 1101 1102 A344 28 plp 1103 A345 20 48 A0 jsr _interruptsOn 1104 A348 20 66 A0 jsr _screenOn 1105 A34B 4C 0A A1 jmp _resetAV 1106 .endp 1107 1108 ;====================