ML }  X c0C)HCCH Mhhݩh `eCDiCD`  RPH E   * 1H0芢@) Y0.Ș`i#(PMLPRTҀ\ \b Pgi 0 Z@ $ ࠮UY   0DDԝLyntH}yiN@ )?HI   Y0`HIJH)* J j *  hJJJ)HJ   h i   }Ǎ  YS S0 i`  !"#$%&'()*+,-./0123456789:;<=>?@H J3x}Ǎj2h)1 |9 ӭ45(420 * (0241өX.`  ? *^)Lkl  }k*PE 5 LN(G 2 gh ` ghgL ( 2 L<(0d( L ^E0O +)$IC} H @8 f e h q  |_ 8cd CDL> CFa M  L< ?^)La`2' }")*F$F$F$F$F$ 5 )ШF/Șa]`efС,L>/A! A^)Za`@ ܬ/^)( }")")`$F$F$F 5$/L /aF@__(LN`ae$$%8(`()` ? % 2L< ?^)^>_f i ;g }ǤCh) qkl5\   Zc[d 4akl L>@^LZ>_ 3L kJjjj^^ e }ǹ fE]_agh`L>:$ȱ$@+[_#{ %  Խji! ai % 2 I   } J C H h  ˰ %  ;  q LZ 2  ,  H `L> ,/ % k/ q Ơ?} ѩ/ | H /L_0?MdLc 3_MfLe N`aL<L>cLdMaNL< }?"(+ըHH`Q R !   $ . FȑF! /GF \H"+0+* }! F sL>cm: J~cTF1F  *c+)5! c (, c)1JJJc(c*d} I ,0  Xi N dF4 5 ,8,0 ʩ0H 2h     i}G D JDbbFL>vij`*&!ߍ*@h ] 0 ^0`ߍ c 0l$$%}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h}`hhh&JJ ](ll  L>0 q/qcdHH 99 H H  I9 9 } NY 2H  >8 d c  qFcdL HII/ Ih8`h`Lcdc`cd`u F }E KE]L</auF a0BF/aɜɛ׽]E ;  qW  KFL FREE SECTORS C}H) *Fh ):FȽ F FCIH' 0 d  i:Fȩ/F.a`CD/08HDIC}ǐIHȰ/F`ȱ$>.+.i ȱ$:刄H !A I Hȱ$*?ȝ 2. ? [_{ ,0}-:) 0$:>WI  IТ,L>H  0hLY k i j`C ?(  0(C.` E *}ǥ! .ii  c0N EE 1 EC)0')AY)ע ? 0E088FG \dc}  (HhLcL3 ^J ^ Lrfe 0=ghecfdefa``_Z_0  _ 3LMHFhȑFȽa}F^0 ] FFL3ekfl\cZd[L3 ef7 | 40^ 0 FJJ]1FfȱFeȱF``B!08`]}EE 1 8. *D}iji( AʩLMW!)   XȌVȌY W`VVWH8 h}YaHXY8 XH hHH \h hX` *Hh I8ih( a ( a(!`L\CJfCJ}fCJfCDfC` qV  HII  INYh `h`c)8jHciPdijIjFIjFIjh` qV I }38 8H0 I  ' H L>8jY8j NYY &I &I &IHeH.eIif!}  `!.莼 2Jjj }.b Ȉ!b FG` ɩL> z  "}me H^04 \ Ȍ  8 i h !`I0 `C Y%.`DOSr SYS I #}ǩ ` kݩ.C/`WV.b۩bѤC9`CLJ G  ,F0(BԝDEI$}G V0 : , BLVDE`D1:*AR08hhJ ȱHȱIȱBȱDȱEeeHHLV)%}%  1*  ,,p-  0  &  '0   Lv)l, 0  &LD&}$1:MEM.SAVE:D1:DUP.SYSTERMUFDh1:MEM.SAVE:D1:DUP.SYSTERMUF}I)vCD1:DOS.SYS n  * \*`آ R'S )ɀ@  T))% CError lo(}kading MEM.SAV or memory!  0* a*b*c*d* R Hc*JSDc*J-=d* 0b*oʀд =}MyDOS 4)}'.53/4- Copyright 1988,˛Disks 1HD D: = D9: = =1-8.Dir of D1:-D8: *. Dir of D:A. *}PDisk Directory K. Save MemoryB. Run Cartridge L. Load MemoryC. Copy File(s)T M. Run at AddressD. Delete File(s) N. L+}@oad MEM.SAVE. Rename File(s) O. Change Config.F. Lock File(s)D 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!.}L), -0{ ПFull directory name?Z"L.Directo3}ry to be used as 'D:'? @ A(5)L.(I: 輿ȱޝL), CInvalid directory!L@( 4}(0Le-File source, destination? '( @C۩wڭ8wܭC B8'0 @(ߍeލd(DЍ( ? 8' 5}B Bȱޙ':>Ȍ(C0J* .B 9'ȱ/.* #,ɛȝ9' ߰ B |?,(0L), 'u6}Gt(9'3?&' .'Ƚ9'?&'  .و'Q?''(#( = =-->' =Q7}7 =YR_o (J(  0?B݋''BJ)`''utz0( ?(L|0L),L@nDisk to FORMAT: 8}A B(UTލ1 =(Press for Enhanced Dns)Type to Format Drive 1: =AIYZNj[R VL@L)9},D1:DUP.SYSDrive to write DOS files to? AH1:*J)2I) Z B hpI) ?<2UT:}C٩vة۩.کL;Source, Destination (Sectors)? A)((8'( A)((((( @(0% =Insert b;}oth disks, type = B( A((/( DB(( CDrives not compatible!J(j(8'Hh''<}h(ɛy CInvalid options! N@-&& N@)׍&&(&&&۩ک&&&&8* 84&&&& 848=}*8(ܭ(ݥwC, CNot enough memory! ک&&`(Mh  & >L@&i &&>}&&mm   >  &((&թԥԍ(Ս(((( ( ((Cw((?}Ǡԍ((,(0"( (( >m(m( & &("L),  ( BL4,(, =Insert DESTIN@}ATION disk, press =Nͻ I) b( 0J) @((ԭ(խ( ( (((L4Drive, new density: A}A8'ɛ CDrive unchanged.(ު90٨Ȍ(SD  qBL)xԌҭHӭ@@ ʎӆ@B}ӭ@@ :  $ӹ@hөԥX` Aˠ =RAM disk present? =NL08 =xlon C}or E type RAMdisk? =Aό  L   M   A1| =6: ' =No extra memory available!L08L7D} & & & =Use default config for 0)ȩ = =K? =NL 8 =Size(K)? ? N@FjFjFjFjE}Ǎ: =Page sequence? ? P@o* =RAM disk drive no? = 09) `9 - 9**H***) 9 Ȋ)h9 F}@@ H'h(#''/'(ɛ ? P@(@: 3 ʽ' L 8 =Duplicated sequence number!LG}7 =Wrong number of entries!L7K큅쀄 =Verify WRITEsH}G? ; =Number of File Buffers? ? N@  6 Lv),R( 4;L),Drive number or : =ɛLP99L50Ȍ(I}I =Remove drive? =Y =Is drive configurable? =YЂ =High capacity drive? =Yy =Is drive double sided? =YJ}ǩ *; =Tracks/side? ? N@#0M P( *; =Step rate? =4/ *; 4;L), =Drive size (in sectors)? ? N@K}H(h 7;L),RAM disk drive no? 8L),Verify WRITEs? ;L), =WNPp`(`(  LqBSAVE:filename,stL}art,end(,init(,run)) @TUH P@Cp` ?< P@؆8օڊ CInvalid START-END range!۩ P@ M}Dž P@ hԄՠAλȌZ B04*  0$ڍXۍY֍T׍U,0LCL C HCL@ֆ׌`Load MEN}M.SAV from what file? 0#L),L@Load from what file?) @TU&̩Z B &0&-&а&𨭻INO}ǩIZ'RV0II CNO CARTRIDGE!Ԇխ  )L>Run from what address? ?ɛP} P@ CAddress must be 1-4 hex digits! BHILV {=`hh =HH` =0{a HɛQ} {= {=h` {=L), = = pHH =hh`K: p `(((( i ɀ((L@(`(BD(0>HHR}''>I>U>I>ɛ(ɛ (>(`͈>DH(`(HI`(k5 = =( 5B( (>@S}A (J B0}((HHIIDDEE B @(CɈP(# B = =( 5BL'?(B>>((ڤ ܝHT}ݝI VL>L@(" B !B I)  B(L& R XY( @&:0H&Ϳ((&U} ( .( & ( .(ʩ(`ލD&ߍEBIʎH( V0`ԩ ؠA@ȱB@ȱ)C@ V}CError -- 128&`$8f cAԄձG/ $<68i/(Ԧ`H&եԦ&&eԅheԅԊe(iLZ@&&W}&&ԅLZ@B ? cA?*(ɛ:./2SX(0ȱ/.ɛ(ލ8'ި0X}#:Ȱ :ފ :ȱ: : sAD sAޥ`(eޅީe߅`(` @LA @TUȪ: CFile name noY}t allowed!: )  h( >0+L TUD CNot a disk file!(0` =Insert SOURCE disk, press Z}C7 =,(pӮ(A(O aB qBaB`G1(L$ b(de BJKO [}[L@O` B((*(((`ȱޙ((:>Ȍ(`D:`OS.SYS,DOS.SYShh =L),  VLI /C /C\},pLhL~F#Խ٩Յ׆  LC`David R. Eichel rel.ver.1/1/90OS.SYShh =L),  VLI /C /CS%x.hihiHHȱȱ`8Hh` &E…¦ &`L&` .&^}"Ff ee&8LO& .&_Wń児0 &&86.ń児8_}f儅充FfFf8LO& &` &`p B V8l !' Vhhl5'HHjJhh`hhl`}5' `iDiE`Hh7'`Hh`Hh` X'IHiDiE B 8'HI B 8'`ԆՄ a}ؠ0ȑ8)ȑ`H ' 'hL' 'L'L( 'L' v'L( X'HI B 8'`7'L(L5(ȱ -b} ƥĤ180* &H& & &eehe8ȥ 8堅塅` X'iDiEHIB 8'Hc}A8LA(`HxhL( X' i'JKB 8'EJ` X' B 8'`H` B VhKI JS:Dd}.EB 8'`UVT`% ҩҥ))2 ҥ`8`ƢŢ8*8 %Ţ`e}Ǒ` )ȥ`ȱ`Ƣƣ8`HhL)`y.Kqf} LT* %I*I*)I*I* @eO*iP*O*iP*iJ*O*iP*iN*ȑM*O*iP*iL*ȑK*I* g}k VO*iP*i`s(23)L* %****** Q*****`1E*ppp FoLH+h}0+LV+D:x.GR7+N+1 )0+iA4+ $)+1 (0+ [&E*eF*e * $)i}L+`L+ 0) ) ) )++LE,+ [&E*eF*eYX * L6,+Lj}+++L,+ [&+ & h)+LJ,+<+L,+ &8宅ȩ h)k}ǰL,+L,`L, 0)'R ) )A ) )} 5(`)L -----LI- - &8宅l}G )-L-} 5(-- &8嬅 a)-- (--L- - & )-L-`Lm}mǼ- ,L-New Breed Software- - E+L-proudly presents- - E+L".a challenging new puzzle game. - E+L2..1 n} - E+LJ.Gem Drop.A - E+ + Lb.``-".a challenging new puzzle game. - E+L2..1 H%&CDNOklvw} p}?"">??JKfg?rs} q}?9??FFah?nn} r} ?@4BJSWXfjr y}+?9=EF?LS@aemns z} &48@AFN\`hinv} {} !@/3;<AIW[cdhimq} |}).67;<@DQV^_cdhly }} $)1267@;?LQYZ^^cgty} ~}C $-16:GLUY^bot} } ',15BGOTY]jow }"',0=BJOTXejrw| }"@&+8=EJ@NS`emqv } !&38@DIN[`hlqv} } !.3;?DIV[cglq} }?).6:??DQV^bgly }@ $)@15:?LQ@X]bgty@} } @$@+05:@GKSX]b@os{ } @&+?05@BFNSX]@jnu }@ &+/=AHNSWeipv?{ }?!&*8DIN@[\?flqv@} }?!./?9?DIVW?`glq} }? )*237:?DQRZ[_bgly } U@P$%_+,:<NSUUU@Z[_bgly Z}}~}C9>PabfgP}} @34:;[\cd@}}..77VV_`}}_ ).23QW[\@y}$/LWt}"&*GJNS@orv}!&BEJW[^imr} @2?<@ENRUYZdhmv?z} %',-7;@U_ci} @#(26<FKQ@Z^dn?ry@}} $??@-17L??@UY_t@??}} ?@(,2G?PTZox}@#'-B@KOUj@sw}}?@"(=?@FJPe@?@nrx}?#)-7?@AEKQUX?\_?imsy}}? ?$(+/2?<@FLPSWZ?dhnt?x}??#&*-?7;AG?@KNRU_ciosvz} !%(26<BFIMPZ^cjnqux}}C  #-16=ADHKUY^e@ilps}}@ (,@137?CFPT@Y[?_gknx@} #'@+.2AKO@SUZisv{}!?%(-<FI?MP_Udno?wx@}}?!"(7AB?IJP_ij?qr@x} ?#+/2<=?CDKSWZde?jks@U@}U"#*+t}}}}~}~}~Z}}~}~}~}~}~}$'KPstxy@}}C#$EFKLmntu}} @Hhp}};Dcl}} !&/PTP6??CW@P^?}@ +?1S??Ye?jA@?}?&?,/3N?TW[v??@|}!?'*.I?ORVq?w}@?"%)D?@@UW?JMQl??@ruy?}? $??EHLgU_@?@mpt}?@).:@CGQVbhkoy}} $)5;LQ]cty}$06X^}} +?1SY}&,NUU@TUZv@|} !'(,-1IOP?TU@Yqw}@@,.@}}}}~}D~}~}~}~}~}~Z}}~}~}~}~}~}~}~}~}~}"%@36JM?[^qu}}  .2DHVZ?lp@}}C?%P)9@PPP?@?Da?@?ghl} ?}4???:;?\}@?bcg?} /??P5W@??]@?@?}*W}@?0R}@?X?@?}%?@?+M@?Su?@{} C?&G?@?No?v}?@@"#T?A?gi?}}?:cr+y+ y+L-> y+`L=7L4> %.>s+s+ILL>s++i!<}ǭ+is+ [&ees+}`+i )ms+i.>i 0e )s+L>!=}t+L ?s+IL>u+L ?s+IL>v+L ?s+IL ?w+/> es+`+0>IL?+i+is+ [&!>}Ǯees+}`+i+i+iy+ ei )L@+i+is+ [&e!?}Džes+}`+i+ih+i )`\L @@@@@M@@L/@@ @IL>@@@`Do!@}LK@E@D@ E@ [&mD@i&*G@G@LD E@ [&mD@i&*E@D@ e5E@D@ 1>!A}F@dF@L@y+ [& F@ a)F@L@ҌҭG@ILBE@LfA8E@ [&mD@i!B}G&*8E@D@ e58E@D@ 1>E@ LAE@i [&mD@i&*E@iD@ e5E@iD!C}C@ 1>D@L&B E@ [&mD@i8&*8D@E@ e58D@E@ 1>D@ LB E@!D} [&mD@iii&*D@iE@ e5D@iE@ 1>LBG@ILBk+E@LB8E@ !E} [&mD@i&*G@ @ILB8E@D@ =E@ LSCE@i [&mD@i&*G@!F}Ǡ @ILSCE@iD@ =D@LC E@ [&mD@i8&*G@ @ILC8D@E@ !G}=D@ LD E@ [&mD@iii&*G@ @ILDD@iE@ =`LD 2 a)H!H}njDDLFD k3DL3DҌ`BB BCLcDRDl+LqDLGWDXDTDSDUD UDLD UD [&mRD!I}ǥi&*VDVDLDWDXDVDWDTDUDSDUDLD^Dl+WD @ILEl+XD @I m+LE^D_DSDiTDi!J}ǥmm+i8[D [DLiE_D [D^DI m+LiE_D_DILGYDYDLE8YD a) k3YDLxEҌ!K}SDiUD[DEEUDLE UD [&mRDil+&*UDRD e5UDLE^Dl+WD @IL2Fl+XD @I !L}m+L2F^Dm+LAF^D^DILGZDUD[DdFdFUDLF UD [&mRDi&*Ml+LFUDiZDUD!M}LYFr+y+[DRD =z+XiYiz+ S2YDYD*\DYD*]D]D\D H@YDYDr+LFy+ md+*(me++q+!N}+q+++'LHG8+++'++Xi)Yi+++ 0+͋+++ ++LG++++++XiH!O}ǥYi+++ 0l+m+LG Dz+}+LGn+`LGLGGGGG GL;H G [&mGi!P}ǭ&*GGL5HGGGGGLGGGLZHGLZH DLhIGMl+LsHl+LsH DL:IGl+ G [&mG!Q}Ǭi&*GG e5m+G8GGGL2I G [&mGi&*MGL2I G [&mG!R}Dži&*GG e5Gm+GLHGGL`I G a) k3GL?IҌ`LoIiI iILI [&!S}NJmiIi&*LIj+iILtIj+LJjI jILPJ8 jIkIiI iILJJ kI [&miIi8kI!T}G [&miIi&*&*kIiI e5iILIjILIiI iILJ [&miIiHH !U}U3hh&*iI e5iILUJ`LJ~+J ͧJL KJ ͦJLK J [&mJi&*LK~+JLJ!V}JLJ`./ LK KXizYi K eKiKKK KL{LK KLK K [&mKi!W}Ǭ&*KK e5KLSKK KLK )LKKK 1>KLKKKLL k3 k3 k3 K &8宅K a)!X}KLK8KKKLDLonKK )Ki(Kiqp )LoLsrKK )Ki(Kiut ) k3 k3KLDK`!Y}DžLLЩ )++ ) k3+i+iiiiii(i઩5 [&ee!Z} )+i+iiiiii(i઩( [&ee )+![}i+iiiiii(i઩/ [&ee )+i+ii!\}iiii(i઩( [&ee )~L|L|LLO8|LЩ )8|L!]}ǥiЩ )8|LiЩ )8|Li Щ )}L2}LLN k3}LLN )~L|L a)!^}Dž |L 'LO~L )8~L~L|LLMN ) a)++ )`eiLYO 3 9QOPOD!_}Oj+OOJO+++DO  )XiŅYiLV]]]]]]]Vt )Xi텠YiLV]]]]]]]]V!w}ǩ )XiYiLV]]]]]]ܩVড )Xi=YiL&W]]]]]]]]]W )!x}GXieYiL\WWL ) +ILWILyWLWILWI!y}yLW++ 0 +`LW 0) + <(LWThanks for playing  W (LXPlease visit NBS's website!X (LOX%http://zipp!z}y.sonoma.edu/kendrick/nbs/X) (`L[X ., 6WXWXLX VO 0)/ ) $)LX D:GEMDROP.DATX ({+ (+!{}Nj+ (+ ( $)WXIL^X W``XX 6WXWXLX VO 0)/ ) $)LX D:GEMDROP.DATX ({+ (+ )8" ??<L003  0P&ff@``&& `@**;@%}}0 ?7TP@pT <22@@00 00  <06s?=7?<p=EG@NO@Y^"bj@ "nq @}%}}%} @$HQ$B.***.wuEwwEuw-==@ܗ@ؗ @WW%e&%%uA@( %}0 (( $PRB ` < <(0Ȉ 숈00 <(̌ ȈEDTT0 %}?LDLD00T<@@T<0DDt|P@DDP 4DPD<D&& `` P ?<0ܪ%}e&&$````* ?<0ܪ&&$```` ?<0ܪ"  bb ?<0ܪ}%}e ?<0ܪ&&$```` ?<0ܪ"  bb ?<0ܪ}$J??0 3 P &&f```f&`@ f*@d)}0??7TP@tT 20@@0< 00<  006s?<3?=p<=?=  "   ww{ )} 000 0&)-R.25Y^ &&bj``$ nq`})} <DCx0p|~~@~0 Then/ Happy=NO Fi Od OdReturnProc LevelEndFX(Byte YourX) Byte X,Y,B,Togl} Card Loc Loc=SC+890+(YourX LSH 1) Togl=0 For Y=0 To 10 Do For X=0 To 9 Do Blocks(Y*10+X)=0 DrawBlock(X,Y) Od } 𠛛& 7by Bill KendrickA TNew Breed Software[ uAugust & September, 1997| k5}endrick@zippy.sonoma.eduhttp://zippy.sonoma.edu/kendrick/nbs/Welcome to "Gem Drop," a fast-pacedpuzzle game for the Atar5}i 8-bitfrom New Breed Software!If you want to dive right in to thegame, feel free to skim over thecontrols listed below 5}uand try outthe game! It's simple enough tofigure out yourself!ůՠӺ [START] - Begin game Firez - B5}Oegin game [SELECT] - Choose starting level [OPTION] - Toggle controller type[ q(Atari or Sega) [ESC]u - Quit t5}^o DOSŠӺJoystick: Left / Right - Move Down / Fire - Grab gem/object Upi - Throw carried obj'5}sSega Genesis 3-button Controller: Left / Right - Move Down / BFire - Grab gem/object Up / CFire - Throw carried o5}Ibj'sKeyboard: (arrow keys, w/o [CONTROL]) Left / Right - Move DownR h- Grab gem/object Ups - Throw ca5}rried obj'sOther key controls: START - Abort SELECT - Abort OPTION - Abort [ESC] - Abort [SPACE] - Pause5}GԺThe point of the game is to grabgems (which are appearing at thetop of the screen) and then throwth5}em back up to get three or morein a vertical column. When yougrab a gem, you will also pick upany gems of the same type t5}hatare directly above it. This meansyou sometimes can't take just onegem...You can tell how many gems youare carrying 5}by looking at thelittle guy at the bottom of thescreen. If you carry none, you'llsee none. If you carry 1 or 2,you'll s5}ee gems on one or bothsides of him. If you carry 3 ormore, you'll just see a collectionof gems. (Knowing if you have mor5}ethan 3 doesn't matter, since it willdefinitely be a match anyway.)Getting a match of three or moregets rid of that colu5}mn of matchinggems, as well as any matchinggems adjacent to the column, andgems adjacent to those gems, andso on. This m5}akes for neat chainreactions!纛The more gems in a match, the higherscore you get for that match.Be warned... if 5}you always matchthree in a row, you'll finish thelevel more quickly, but... ifyou always match three in a row,you won't g5}et as high a score!You'll have to decide when it'smore important to get rid of lotsof GEMS or lots of MATCHES.纛5}When you get enough matches ("lines")you advance to the next level.The number of lines you've madeso far, and the number o5}f linesyou need to make to complete thecurrent level are listed on theleft side of the screen, below yourcurrent score.5}There are 20 unique levels total.Levels 15 through 20 become harderbecause you have twice as manydifferent gems to deal wi5}th, makinggetting matches that much moredifficult! (You'll especiallyhate one of the pieces I've created!)Note: When yo5}u first start playingGem Drop, only levels 1 through 5are available. As you advancethrough higher levels, you will thenb5}e able to select them later.(ie, if you've beaten EVERY level,you will then be able to selectany level.)纛As time 5}goes on, more gems appearat the top, pushing the rest down.You'll know whe this is about tohappen because the screen shake5}sand you'll hear a rumbling noise.If the screen fills up (the gemsgo beyond the bottom of the screen)the game ends.Whe5}Gn you return to the titlescreen, the level you were just onewill be pre-selected, so you cankeep trying. But, of course,5}your score will be reset to 0.󺛛There are also a number of non-gemobjects. To "activate" them,you must t5}hrow two or more of thesame gem onto them.Note: You CANNOT grab and carrythese special objects! Bomb - explodes, destr5} oying any /gems directly above, below,8 rand to either side of it. Wildcard - it will match any} 5} gems next to it or" :above it, often causingG nice chain-reactions! Clock - this freezes the game5} for $a moment. You still. Gget to play, but no moreQ hnew pieces will appearr for a few s5}econds. (You'll 0hear a clicking sound: Runtil the clock stops.)\ pThis gives you somez bre5}athing room!Ԡ͠кGem Drop is loosely based on theSNK Neo-Geo game "Magical Drop III."Gem Drop was written in5} OSS's Action!programming language and compiledwith a stripped-down version of thePublic Domain runtime library.(RTSCAN.C5}OM was used to determinewhich runtime functions werenecessary.)Gem Drop uses a special software-based graphics mode to p5}roduce thehigh amount of colors see on thescreen: one 20x24 5-colored textmode with one set of 5 colors andtwo character 5}set fonts, which aretoggled at every vertical blank.(This means NTSC machines (at 60cycles) will look better than PALmach5}ines (at the slower 50 cycles).)The fonts were created using myown simple font editor in BASIC.(Amazingly, I was able to 5}createthese 4-pixel, 2-bits-per-pixelgraphics using an 8-pixel, 1-bppeditor! It was pain-staking!)ŠġPlease tell5} me what you think ofthis game! Thanks!New Breed Softwarec/o Bill Kendrick7673 Melody DriveRohnert Park CA 94928 USA+5}1-707-795-1234 ext. 2kendrick@zippy.sonoma.eduhttp://zippy.sonoma.edu/kendrick/nbs/ody DriveRohnert Park CA 94928 USA+4XC@b)GEMDROP ACTbXGEMINC ACTbCGEMINTROACTbJRGEMRT ACT) For X=0 To 9 Do If Rand(10)<2 Then- ExplodeBlock(X,Y,EXPLOSION) Fi Od For B=0 To 150 Do Pause() Pause()}Ǜ Pause() Sound(0,B,0,15-B/10) Od Togl=1-Togl If Togl=0 Then PokeC(Loc,28526) ; 110,111 PokeC(Loc+40,29040)} ; 112,113 Else PokeC(Loc,29554) ; 114,115 PokeC(Loc+40,30068) ; 116,117 Fi Pause() Pause() OdReturnProc }Level15FX() Byte X,I,T Zero(53248,4) Zero(PMG,1024) Pause() MoveBlock(PMG+512+000+16+40,57344+('U-32)*8,8) MoveBlock(P}MG+512+128+16+40,57344+('H-32)*8,8) MoveBlock(PMG+512+256+16+40,57344+('O-32)*8,8) MoveBlock(PMG+512+384+16+40,57344+('H-32})*8,8) T=0 For X=0 To 230 Do Poke(53248,250-X) Poke(53249,250-X+8) Poke(53250,250-X+24) Poke(53251,250-X+32) For} I=0 To 50 Do Pause() Od SetBlock(704,4,15) Sound(0,X,4,T) If (X MOD 10)=0 Then Poke(712,T) T=15-T Fi Od} Poke(712,0) Sound(0,0,0,0) Zero(PMG,1024)ReturnProc Play() Byte X,S,K,OX,A,B,FrozCount, HappyTest,Fire,SegaFire,Act}ivity, OAct Int Clicks Card Q,Loc DrawGameScreen() InitLevel() Clicks=0 X=5 Gameover=NO OAct=0 FrozCount=0 Scr=}0 ScrH=0 DrawYou(X) Do S=STICK0 Fire=STRIG0 If PADDL0=228 And Controller=SEGA Then SegaFire=0 Else SegaFire=1 }XFi If (S<>15 Or Fire=0 Or SegaFire=0) Then OAct=1 If OAct=1 And RTCLOCK<8 Then\ aS=15e lFire=1p SegaFire=1 } Else RTCLOCK=0 Fi Else OAct=0 RTCLOCK=10 Fi K=KEY KEY=255 If S=7 Then K=7 ElseIf S=11 Then K=6}G ElseIf S=14 Or SegaFire=0 Then K=14 ElseIf S=13 Or Fire=0 Then K=15 Fi OX=X If K=28 Or CONSOL<7 Then Gameover=}VYES ElseIf K=7 Then X=X+1 If X>9 Then X=0 Fi ElseIf K=6 Then If X>0 ThenZ hX=X-1 Elsel X=9 Fi ElseI}f K=14 Then Throw(X) EraseYou(X) DrawYou(X) ElseIf K=15 Then Grab(X) EraseYou(X) DrawYou(X) ElseIf K=33} Then Poke(708,2) Poke(709,4) Poke(710,6) Poke(711,8) KEY=255 Do Until KEY=33 Or KEY=28 Or CONSOL<7 Od I}f KEY<>33 Then Gameover=YES Fi KEY=255 Poke(708,74) Poke(709,206) Poke(710,138) Poke(711,30) Fi If}v OX<>X Then EraseYou(OX) DrawYou(X) Fi If Frozen=0 Then HappyTest=HappyTest+1 If HappyTest>=100 Thenz Hap} pyTest=0 CheckHappy() DrawYou(X) Fi Clicks=Clicks+1 If Level<15 Then Q=Level*125 Else Q=(Level-10)*100}2 Fi If Clicks>4500-Q And FirstRound=1 Then6 XPoke(DL-2,96+(16*(Clicks MOD 2)))\ Sound(0,100,0,8*(Clicks MOD 2)) } Fi If Clicks>4800-Q Then# 8If FirstRound=1 Then= LSound(0,0,0,0)Q `Poke(DL-2,112)e nClicks=0s AddMore()} Else FirstRound=1 )Clicks=0- Fi Fi Else Happy=YES FrozCount=FrozCount+1 If FrozCount=60 Then} FrozCount=0 $Frozen=Frozen-1( BIf (Frozen MOD 10)=0 ThenG XFor B=0 To 15 Do^ Sound(0,(Frozen MOD 20)*10+50,1}0,15-B) Od rFi Fi Fi If LevelDone=YES Then LevelEndFX(X) Level=Level+1 If Level>20 Thenv Level=2}#0 Fi If Level>Max_Level Then' RMax_Level=Level Fi If Level=15 ThenW Level15FX() Fi InitLevel() C}licks=0 Fi Until Gameover=YES Od Zero(53248,13) Quiet() Loc=SC+880+10+(X LSH 1) PokeC(Loc,30582) ; 118,119 PokeC(}Loc+40,31096) ; 120,121 For A=0 To 254 Do Sound(0,A,10,15) SetBlock(SC+(A/12)*40+10,20,') Pause() Pause() Pause(},) Pause() Od MoveBlock(SC+131,"]]]]]]1]]]]"+1,18) MoveBlock(SC+171,"]]]]]]]"+1,18) MoveBlock(SC+211,}"]]]]]]]]]]"+1,18) MoveBlock(SC+251,"]]]]]]]"+1,18) MoveBlock(SC+291,"]]]]]]]]]]"+1,18) MoveBlo}ck(SC+331,""+1,18) MoveBlock(SC+413,"]]]]]]]]]]]"+1,16) MoveBlock(SC+453,"]]]]]]]"+1,16) }GMoveBlock(SC+493,"]]]]]]]]"+1,16) MoveBlock(SC+533,"]]]]]]"+1,16) MoveBlock(SC+573,"]]]]]]]]]"+1,1}6) MoveBlock(SC+613,""+1,16) Quiet() KEY=255 Do Until CONSOL=7 And STRIG0=1 Od Do Until KEY<255 Or C}ONSOL<7 Or STRIG0=0 Od KEY=255 Do Until CONSOL=7 And STRIG0=1 Od SETVBV(7,OLDVEC) Quiet()ReturnProc QuitApp() Gra}phics(0) Quiet() PutE() PrintE("Thanks for playing  ") PrintE("Please visit NBS's website!") PrintE("http://zipp}y.sonoma.edu/kendrick/nbs/")ReturnProc Main() Byte Quit Setup() Do Quit=Title() If Quit=NO Then Play() Grap}hics(0) Poke(559,0) Close(1) Open(1,"D:GEMDROP.DAT",8,0) PrintBDE(1,Max_Level) PrintCDE(1,HiScr) PrintBDE(1},HiScrH) Close(1) Fi Until Quit=YES Od QuitApp()Return) PrintBDE(1,Max_Level) PrintCDE(1,HiScr) PrintBDE(1@; GEMINC.ACT; Gem Drop; by Bill Kendrick; kendrick@zippy.sonoma.edu; http://zippy.sonoma.edu/kendrick/; August 17, 199}7 - Sept. 24, 1997DEFINE NO="0"DEFINE YES="1"DEFINE ATARI="0"DEFINE SEGA="1"DEFINE BOMB="5"DEFINE WILDCARD="6"DEFINE} CLOCK="7"DEFINE SCORE="0"DEFINE EXPLOSION="1"Byte Array Blocks(110),MemBuf(4096), KillsX(100),KillsY(100),ExY(4)Card} Array ScrVals(15)Byte KEY=764,CONSOL=53279, STICK0=632,STRIG0=644, COLPF4=712,PADDL0=624,RTCLOCK=20, AUDF0=53760,A}UDC0=53761Byte Level,Controller,Gameover,Frozen, Carrying,HowMany,LevelDone, FLIP,CHAddr,CIO_status,NumKills, Which}EPM,ExAnim0,ExAnim1,ExAnim2, ExAnim3,TOGL,KillScore,Lines, Max_Level,FirstRound,LinesNeeded, Happy,ScrH,HiScrHCard S}C=88Card OLDVEC,CH,PMG,DL,Scr,HiScrChar Func CIO=*(Byte dev, Card addr, size, Byte cmd, aux1, aux2)[$29$F$85$A0$86$A1$A$}A$A$A$AA$A5$A5$9D$342$A5$A3$9D$348$A5$A4$9D$349$A5$A6$F0$8$9D$34A$A5$A7$9D$34B$98$9D$345$A5$A1$9D$344$20$E456$8C CIO_stat}us $C0$88$D0$6$98$A4$A0$99 EOF $A085$60]Card Func ReadBlock=*(Byte dev, Card addr, size)[$48$A9$7$85$A5$A9$0$85$A6$A5$A3$}5$A4$D0$6$85$A0$85$A1$68$60$68$20 CIO$BD$348$85$A0$BD$349$85$A1$60]Proc Quiet() Sound(0,0,0,0) Sound(1,0,0,0) Sound(2},0,0,0) Sound(3,0,0,0)ReturnProc Setup() Int I Byte C CH=(MemBuf/1024)+1 CH=CH*1024 CHAddr=CH/256 Level=1 Cont}roller=0 If PADDL0=1 Then Controller=1 Fi Poke(53775,3) Poke(53768,0) Quiet() Close(1) Open(1,"D:GEMDROP1.FNT",4,0}) ReadBlock(1,CH,1024) Close(1) Open(1,"D:GEMDROP2.FNT",4,0) ReadBlock(1,CH+1024,1024) Close(1) PMG=CH+2048 Zero(PMG},1024) Poke(53277,3) Zero(53248,13) Poke(54279,PMG/256) PokeC(704,0) PokeC(706,0) For I=0 To 3 Do ExY(I)=0 Od TO}GL=0 Close(1) Open(1,"D:GEMDROP.DAT",4,0) Max_Level=InputBD(1) HiScr=InputCD(1) HiScrH=InputBD(1) Close(1) ScrVals(0})=0 ScrVals(1)=0 ScrVals(2)=0 ScrVals(3)=1 ScrVals(4)=2 ScrVals(5)=5 ScrVals(6)=10 ScrVals(7)=15 ScrVals(8)=20 ScrV}als(9)=25 ScrVals(10)=30 ScrVals(11)=50 ScrVals(12)=100 ScrVals(13)=100 ScrVals(14)=100ReturnProc VBLANKD() Byte Po}inter Q Byte I,CHBAS=756, 8PMCOLR0=704,PMCOLR1=705,< UPMCOLR2=706,PMCOLR3=707,Y pPMX0=53248,PMX1=53249,t PMX2=5325}0,PMX3=53251 FLIP=4-FLIP CHBAS=CHAddr+FLIP TOGL=TOGL+1 If TOGL=4 Then TOGL=0 If ExAnim0>0 Then PMCOLR0=ExAnim0} ExAnim0=ExAnim0-1 Else PMX0=0 Fi If ExAnim1>0 Then PMCOLR1=ExAnim1 ExAnim1=ExAnim1-1 Else PMX1=0 } Fi If ExAnim2>0 Then PMCOLR2=ExAnim2 ExAnim2=ExAnim2-1 Else PMX2=0 Fi If ExAnim3>0 Then PMCOLR3=}ExAnim3 ExAnim3=ExAnim3-1 Else PMX3=0 Fi Fi [$6C OLDVEC]Proc SETVBV(Byte Which,Card Addr) Card Pointer T}Gemp Byte V Temp=$216+(Which LSH 1) V=RTCLOCK+1 While V<>RTCLOCK Do oD Temp^=Addr FLIP=0ReturnProc DrawScr(Card Ad}dr, Card Scr, Byte ScrH) Byte V,I,J Card Z,SS SS=ScrH Z=10 For I=0 To 1 Do V=SS/Z Poke(Addr+I,96+V) For J=1 To }V Do SS=SS-Z Od Z=Z/10 Od SS=Scr Z=1000 For I=0 To 3 Do V=SS/Z Poke(Addr+I+2,96+V) For J=1 To V Do SS}=SS-Z Od Z=Z/10 OdReturnProc Draw2Digits(Card Addr, Byte Num) Byte Z,N Int I Z=10 N=Num For I=0 To 1 Do P}oke(Addr+I,(N/Z)+96) N=N-((N/Z)*Z) Z=Z/10 OdReturnByte Func RandBlock() Byte I If Level<15 Then I=Rand(4)+1 El}se I=Rand(4)+1 If Rand(20)<10 Then I=Rand(4)+8 Fi Fi If Rand(40)<1 Then I=4+Rand(4) FiReturn(I)Proc Pause(}) Int Z For Z=0 To 5 Do OdReturnProc DrawGameScreen() Byte A,CHBAS=756 Card VVBLKD=$224 Graphics(0) Poke(559,46}) DL=PeekC(560)+4 For A=2 To 24 Do Poke(DL+A,4) Od Poke(DL-1,68) CHBAS=CHAddr Poke(708,74) Poke(709,206) Poke(710 },138) Poke(711,30) OLDVEC=VVBLKD SETVBV(7,VBLANKD) MoveBlock(SC+2,""+1,5) SetBlock(SC+41,7,'`) MoveBlock(SC+31, }""+1,9) SetBlock(SC+72,7,'`) DrawScr(SC+72,HiScr,HiScrH) MoveBlock(SC+122,""+1,5) MoveBlock(SC+153," }"+1,5)ReturnProc DrawBlock(Byte X, Y) Card Loc,V Byte C Loc=SC+Y*80+10+(X LSH 1) C=Blocks(Y*10+X) If C=0 Then Po }keC(Loc,0) PokeC(Loc+40,0) Else V=(C LSH 2)-2 V=V+((C LSH 2)-1)*256 PokeC(Loc,V) V=C LSH 2 V=V+((C LSH 2)+1)*25 }6 PokeC(Loc+40,V) FiReturnByte Func Title() Byte Quit,Ok,CHBAS=756,HIGH,LOW Card SC=88 Graphics(18) CHBAS=ChAddr+}6 MoveBlock(SC+6,"AE"+1,8) MoveBlock(SC+87,"HIJ~"+1,6) MoveBlock(SC+127,"KLM"+1,3) Poke(SC+132,'O-Controller) HI}GH=Level/10 LOW=Level-HIGH*10 MoveBlock(CH+2032,CH+1408+(HIGH LSH 3),8) MoveBlock(CH+2040,CH+1408+(LOW LSH 3),8) Quit=N}O Ok=NO KEY=255 Do Until CONSOL=7 And STRIG0=1 Od Do If KEY=28 Then Ok=YES Quit=YES Fi If CONSOL=5 Then } Level=Level+1 If Level>Max_Level Then Level=1 Fi HIGH=Level/10 LOW=Level-HIGH*10 MoveBlock(CH+2032,CH+1408+(HIGH} LSH 3),8) MoveBlock(CH+2040,CH+1408+(LOW LSH 3),8) RTCLOCK=0 Do Until CONSOL=7 Or RTCLOCK=20 Od ElseIf CONSOL=3 T}Ghen Controller=1-Controller Poke(SC+132,'O-Controller) Do Until CONSOL=7 Or RTCLOCK=20 Od ElseIf CONSOL=6 Or STRI}G0=0 Then Ok=YES Fi Until Ok=YES Od KEY=255 Do Until CONSOL=7 And STRIG0=1 OdReturn(Quit)Proc InitLevel() Byte }X,Y,YY For Y=0 To 10 Do For X=0 To 9 Do Blocks(Y*10+X)=0 Od Od YY=Level If Level>14 Then YY=YY-9 Fi If YY>9 }Then YY=9 Fi For Y=0 To YY Do For X=0 To 9 Do Blocks(Y*10+X)=RandBlock() Od Od For Y=0 To 10 Do For X=0 To 9 Do} DrawBlock(X,Y) Od Od LevelDone=NO Carrying=0 HowMany=0 Frozen=0 FirstRound=0 If YY<6 Then Happy=YES Else H}appy=NO Fi WhichPM=0 Zero(53248,4) Lines=0 LinesNeeded=(Level*3)+2 Draw2Digits(SC+164,Lines) Draw2Digits(SC+204,Lin}esNeeded) Draw2Digits(SC+195,Level)ReturnProc EraseYou(Byte X) Zero(SC+888+(X LSH 1),6) Zero(SC+928+(X LSH 1),6)Retur}nProc DrawYou(Byte X) Card Loc,V1,V2 Loc=SC+890+(X LSH 1) If HowMany<3 Then If Happy=YES Then PokeC(Loc,27498) ;} 106,107 PokeC(Loc+40,28012) ; 108,109 Else PokeC(Loc,30582) ; 118,119 PokeC(Loc+40,31096) ; 120,121 Fi Fi If} Carrying<>0 Then V1=(Carrying LSH 2)-2 V1=V1+((Carrying LSH 2)-1)*256 V2=Carrying*4 V2=V2+((Carrying LSH 2)+1)*256}; PokeC(Loc+2,V1) PokeC(Loc+42,V2) If HowMany>=2 Then? PokeC(Loc-2,V1) PokeC(Loc+38,V2) If HowMany>=3 Then} PokeC(Loc,V1) PokeC(Loc+40,V2) Fi Fi FiReturnProc AddKill(Byte X,Y) KillsX(NumKills)=X KillsY(NumKills)=}Y NumKills=NumKills+1 If NumKills>=100 Then NumKills=99 Fi KillScore=KillScore+1 If KillScore>13 Then KillScore=13 }Ǜ FiReturnProc ExplodeBlock(Byte X,Y,Typ) WhichPM=WhichPM+1 If WhichPM=4 Then WhichPM=0 Fi Zero(PMG+512+WhichPM*128+Ex!}Y(WhichPM),8) Poke(53248+WhichPM,48+(X+5) LSH 3) If WhichPM=0 Then ExAnim0=15 ElseIf WhichPM=1 Then ExAnim1=15 ElseIf"} WhichPM=2 Then ExAnim2=15 ElseIf WhichPM=3 Then ExAnim3=15 Fi ExY(WhichPM)=16+(Y LSH 3) If Typ<>EXPLOSION Then Mo#}veBlock(PMG+512+WhichPM*128+ExY(WhichPM),CH+504+(KillScore LSH 3),8) Else MoveBlock(PMG+512+WhichPM*128+ExY(WhichPM),CH+61$}6,8) FiReturnByte Func Same(Byte A,B) Byte Match Match=NO If A=B Or (A>4 And A<8) Or B=WILDCARD Then Match=YES Fi%}GReturn(Match)Proc KillBlock(Byte X,Y) Byte B,C C=Blocks(Y*10+X) If C<>0 Then Blocks(Y*10+X)=0 DrawBlock(X,Y) E&}&xplodeBlock(X,Y,SCORE) For B=0 To 100 Do Sound(0,KillScore*20,B,10) Od AUDF0=0 AUDC0=0 If C=BOMB Then If Y>'}0 Then Blocks((Y-1)*10+X)=0$ 5DrawBlock(X,Y-1)9 nExplodeBlock(X,Y-1,EXPLOSION) Fi If Y<10 Thenr Blocks((Y+1(} )*10+X)=0 DrawBlock(X,Y+1)# WExplodeBlock(X,Y+1,EXPLOSION) Fi If X>0 Then[ nBlocks(Y*10+X-1)=0r DrawBlock(X)}-1,Y) >ExplodeBlock(X-1,Y,EXPLOSION) Fi If X<9 ThenB UBlocks(Y*10+X+1)=0Y jDrawBlock(X+1,Y)n ExplodeBlock(X+*}w1,Y,EXPLOSION) Fi ElseIf C=CLOCK Then Frozen=255 Fi If Y>0 Then If Same(Blocks((Y-1)*10+X),C)=YES Then{ Ad+}RdKill(X,Y-1) Fi Fi If Y<10 Then If Same(Blocks((Y+1)*10+X),C)=YES ThenV AddKill(X,Y+1) Fi Fi If X>0 The,}*n If Same(Blocks(Y*10+X-1),C)=YES Then. AddKill(X-1,Y) Fi Fi If X<9 Then If Same(Blocks(Y*10+X+1),C)=YES The-}n AddKill(X+1,Y) Fi Fi FiReturnProc Honk() Byte B Sound(0,50,12,10) COLPF4=72 For B=0 To 200 Do Pause().}m Od COLPF4=0 AUDF0=0 AUDC0=0ReturnProc Throw(Byte X) Int LastY Byte Y,C,Last,NextLast,B,YTop,YBot,q KX,KY,Ok,DoI/}ut If Carrying=0 Then Else Last=0 NextLast=0 LastY=-1 For Y=0 To 10 Do C=Blocks(Y*10+X) If C<>0 Theny Next0} Last=Last Last=C LastY=Y Fi Od Ok=NO If Same(Last,Carrying)=YES Then If (Same(NextLast,Carrying)=YES Or 1}HowMany>1) Then Ok=YES Fi Fi DoIt=YES YBot=LastY+1+HowMany-1 If YBot>10 Then DoIt=NO YBot=10 If Ok=2}YES Or HowMany>2 Then WDoIt=YES Fi Fi If DoIt=YES Then For B=0 To 200 Do[ pSound(0,200-B,10,10)t Pause() 3}8 Od AUDF0=0 AUDC0=0 For Y=LastY+1 To YBot Do< TBlocks(Y*10+X)=CarryingX DrawBlock(X,Y) Od Ok=NO If4} Same(Last,Carrying)=YES Then" UIf (Same(NextLast,Carrying)=YES Or HowMany>1) ThenZ aOk=YESe Fi Fi If (HowMany5} >2) Then -Ok=YES Fi If Ok=YES Then1 8YTop=0< OFor Y=0 To YBot DoT uIf Blocks(Y*10+X)<>Carrying Then{ YT6}op=Y+1 Fi Od &NumKills=0* 6KillScore=0: KAddKill(X,YBot)O ^Lines=Lines+1b Draw2Digits(SC+164,Lines)7}C B=0 Do !KX=KillsX(B)& 3KY=KillsY(B)8 JKillBlock(KX,KY)O UB=B+1Y oUntil B>=NumKills Ods Scr=Scr+Sc8}8rVals(KillScore) If Scr>=1"0( Then- 6Scr=Scr-1:0;@ LScrH=ScrH+1P TFiX qDrawScr(SC+41,Scr,ScrH)u If Scr>=9}HiScr Or ScrH>HiScrH Then )HiScr=Scr. :HiScrH=ScrH? WDrawScr(SC+72,Scr,ScrH)[ Fi Fi Carrying=0 HowMany:}=0 Else Honk() Fi Fi If Lines>=LinesNeeded Then LevelDone=YES FiReturnProc Grab(Byte X) Byte Y,C,Last,LastY;},B,Ok Last=0 LastY=0 For Y=0 To 10 Do C=Blocks(Y*10+X) If C<>0 Then Last=C LastY=Y Fi Od If Last=0 Or (La<}st>4 And Last<8) Then Honk() Else If Last<>Carrying And Carrying<>0 Then Honk() Else Carrying=Last Blocks(Las=}=tY*10+X)=0 DrawBlock(X,LastY) HowMany=HowMany+1 DoA FOk=0J XLastY=LastY-1\ mIf LastY>=0 Thenr If Blocks(L>}astY*10+X)=Last Then 0Blocks(LastY*10+X)=06 IDrawBlock(X,LastY)O TOk=1Z lHowMany=HowMany+1q tFix Fi ?} Until Ok=0 Od Fi For B=0 To 200 Do Sound(0,B,10,10) Pause() Od AUDF0=0 AUDC0=0 FiReturnProc AddMore()@} Byte X,Y,Y1 For X=0 To 9 Do If Blocks(10*10+X)<>0 Then GameOver=YES Fi Od If Gameover=NO Then For Y=0 To 9 DA}2o ; Stupid Action! Y1=10-Y For X=0 To 9 Do6 ZBlocks(Y1*10+X)=Blocks((Y1-1)*10+X)^ DrawBlock(X,Y1) Od Od FB}Zor X=0 To 9 Do Blocks(0*10+X)=RandBlock() DrawBlock(X,0) Od FiReturn1)*10+X)^ DrawBlock(X,Y1) Od Od FQ; GEMINTRO.ACT; Gem Drop Intro; by Bill Kendrick; kendrick@zippy.sonoma.edu; http://zippy.sonoma.edu/kendrick/; Sept. D}24, 1997INCLUDE "GEMRT.ACT"Byte Array Buf(19200)Byte TIMER=20PROC CIO=$E456(BYTE areg,xreg)CARD FUNC Burst(BYTE ch E} an,mode, NCARD addr,buflen) TYPE IOCB=[BYTE id,num,cmd,stat[ oCARD badr,padr,blen| B F}YTE a1,a2,a3,a4,a5,a6] IOCB POINTER iptr chan==&$07 iptr=$340+(chan LSH 4) iptr.cmd=mode iptr.blen=buflen iptr. G}badr=addr CIO(0,chan LSH 4)RETURN(iptr.blen)CARD FUNC BGet(BYTE chan CARD addr,len) CARD temp temp=Burst(chan,7,ad H}dr,len)RETURN (temp)Proc Load(Byte Which) Char Array File(20) SCopy(File,"D:x.GR7") File(3)=Which+'A Close(1) I}G Open(1,File,4,0) BGet(1,Buf+Which*3840,3840) Close(1) TIMER=0 Do Until TIMER>=20 OdReturnProc Display() Card J}J]SC=88 Byte I Graphics(23) Poke(708,4) Poke(709,8) Poke(710,14) For I=0 To 4 Doa MoveBlock(SC,Buf+I*3840,3840 K}) TIMER=0 Do  FUntil TIMER>=10 Od Od For I=0 To 15 DoJ wSound(0,I*5,0,I/2) Od For I=0 To 60 Do{ So L}und(0,200,0,15-I/4) TIMER=0$ Do Until TIMER>=2 Od OdReturnProc Setup() Graphics(0) PokeC(82,9984) PokeC(709 M}k,0) Poke(65,0) Poke(752,1) Put('})ReturnProc Write(Char Array Text) byte I For I=0 To 150 Doo Poke(709,15-I/ N}R10) Od Put('}) Position(20-Text(0)/2,12) PrintE(Text) For I=0 To 150 DoV Poke(709,I/10) OdReturnProc Main() O}Ǜ Byte KEY=764 Setup() Write("New Breed Software") Load(0) Write("proudly presents") Load(1) Write("a challe P}nging new puzzle game") Load(2) Write("") Load(3) Write("Gem Drop") Load(4) Display() TIMER=0 KEY=255 D Q}o Until KEY<255 OR TIMER>=250 OD KEY=255Return(3) Write("Gem Drop") Load(4) Display() TIMER=0 KEY=255 D5; GEMRT.ACT; ACTION! RUNTIME LIBRARY; FOR GEMDROPPROC _CPYPRM=*()SET $4EE = _CPYPRM[$85$A0$86$A1$84$A2$18$68$85$84$69$0S}3$A8$68$85$85$69$00$48$98$48$A0$01$B1$84$85$82$C8$B1$84$85$83$C8$B1$84$A8$B9$A0$00$91$82$88$10$F8$60]PROC _CHGSGN=*()[$T}85$C0$86$C1$38$A9$00$E5$C0$48$A9$00$E5$C1$AA$68$60]PROC _FIXSGN=*()[$86$C2$E0$00$10$03$20 _CHGSGN $85$82$86$83$A5$85$45$U}C2$85$C2$A6$85$10$09$A5$84$20 _CHGSGN $85$84$86$85$60]PROC _FIXRES=*()[$A5$86$A6$87$A4$C2$10$03$4C _CHGSGN$60]PROC _MUV}L=*()SET $4E8 = _MUL[$20 _FIXSGN $A9$00$85$86$85$87$A5$82$D0$04$A5$83$F0$22$A5$84$D0$04$A5$85$F0$1A$46$85$66$84$90$0D$18$W}A5$86$65$82$85$86$A5$87$65$83$85$87$06$82$26$83$38$B0$D6$4C _FIXRES]PROC _DIV=*()SET $4EA = _DIV[$20 _FIXSGN $A9$00$85$X}86$85$87$85$C1$A9$01$85$C0$A5$82$D0$04$A5$83$F0$5F$A5$84$D0$04$A5$85$F0$57$A5$82$C5$84$A5$83$E5$85$90$0F$A5$C1$30$0B$06$84Y}Ǜ$26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0$04$A5$C1$F0$36$A5$82$D0$04$A5$83$F0$2E$A5$82$C5$84$A5$83$E5$85$90$19$38$A5$82$E5$84$Z}85$82$A5$83$E5$85$85$83$A5$86$05$C0$85$86$A5$87$05$C1$85$87$46$85$66$84$46$C1$66$C0$38$B0$C2$4C_FIXRES]PROC _MODOP=*()S[}GET $4EC = _MODOP[$20 _DIV $A5$82$A6$83$60];PROC _RSHOP=*();SET $4E6 = _RSHOP;[$A4$84$F0$0A$86$86$46$86$6A$88$D0$FA;$A6$\}\86$60]PROC _LSHOP=*()SET $4E4 = _LSHOP[$A4$84$F0$0A$86$86$0A$26$86$88$D0$FA$A6$86$60]PROC _ERROU=*()[$A9$70$AA$A9$0C$]}9D$42$03$20$56$E4$8A$38$E9$10$D0$F1$6C$0A$00]PROC _ERRVEC=*()[_ERROU]PROC _DEVIC=*()[$00]MODULECARD Error=_ERRVECB^}YTE device=_DEVICPROC _GOCIO=*()[$20$56$E4$10$1A$C0$88$F0$06$68$68$98$6C _ERRVEC $48$8A$48$4A$4A$4A$4A$AA$A9$01$9D$C0$05_}$68$AA$68$60]PROC _LODCHN=*()[$C9$08$90$07$68$68$A9$86$6C _ERRVEC$0A$0A$0A$0A$AA$60]PROC _STONAM=*()[$18$69$01$9D$44$0`}3$98$69$00$9D$45$03$60]PROC _SHFTR=*()[$48$8A$A8$68$AA$AD _DEVIC $60];PROC _CLREOL=*();[$48$A9$00$85$A5$68$60]PROC _a}SETEOL=*()[$48$A9$01$85$A5$68$60]PROC _PRECON=*()[$8A$48$98$AA$68$A0$03$84$A3$A0$FD$60]PROC _DOPRNT=*()[$86$A3$84$A4$2b}0 _LODCHN $A9$00$9D$49$03$A8$B1$A3$F0$1A$9D$48$03$18$A5$A3$69$01$9D$44$03$A5$A4$69$00$9D$45$03$A9$0B$9D$42$03$20 _GOCIO $Ac}5$A5$F0$12$A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$A9$9B$20 _GOCIO $60]PROC StrC=*(CARD c, s)[$85$D4$86$D5$84$A2$20$AA$D9d}$20$E6$D8$A0$00$B1$F3$30$06$C8$91$A2$38$B0$F6$29$7F$C8$91$A2$98$A0$00$91$A2$60];PROC StrB=*(BYTE b CARD s);[$84$A3$48$8Ae}$A8$A2$00$68$4C StrC];PROC StrI=*(INT i CARD s);[$E0$00$30$03$4C StrC $49$FF$85$A2;$8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20f}Ǜ;StrC $A0$00$18$B1$A2$69$01$91$A2$A8;$88$B1$A2$C8$91$A2$88$88$D0$F7$C8$A9;$2D$91$A2$60]PROC _DOPRNC=*()[$48$20 _PRECON g}$20 StrC $68$A2$FD$A0$03$4C _DOPRNT];PROC DOPRNI=*();[$48$20 _PRECON $20 StrI $68$A2$FD$A0;$03$4C _DOPRNT];PROC PrintCh}D=*(BYTE d CARD c);[$20 _CLREOL $4C _DOPRNC];PROC PrintC=*(CARD c);[$20 _SHFTR $4C PrintCD]PROC PrintCDE=*(BYTE d CARD i}c)[$20 _SETEOL $4C _DOPRNC];PROC PrintCE=*(CARD c);[$20 _SHFTR $4C PrintCDE];PROC PrintBD=*(BYTE d, b);[$A0$00$4C Prinj}tCD];PROC PrintB=*(BYTE b);[$20 _SHFTR $4C PrintBD]PROC PrintBDE=*(BYTE d, b)[$A0$00$4C PrintCDE];PROC PrintBE=*(BYTEk} b);[$20 _SHFTR $4C PrintBDE];PROC PrintID=*(BYTE d INT i);[$20 _CLREOL $4C _DOPRNI];PROC PrintI=*(INT i);[$20 _SHFTR l}$4C PrintID];PROC PrintIDE=*(BYTE d INT i);[$20 _SETEOL $4C _DOPRNI];PROC PrintIE=*(INT i);[$20 _SHFTR $4C PrintIDE];m}GPROC PrintD=*(BYTE d CARD s);[$20 _CLREOL $4C _DOPRNT];PROC Print=*(CARD s);[$20 _SHFTR $4C PrintD]PROC PrintDE=*(BYTE n}nd CARD s)[$20 _SETEOL $4C _DOPRNT]PROC PrintE=*(CARD s)[$20 _SHFTR $4C PrintDE];PROC _HEXSTR=*();[$85$84$86$85$A9$FD$8o}5$A2$A9$03$85$A3;$A0$00$A9$05$91$A2$C8$A9$24$91$A2$A9;$00$A2$04$06$84$26$85$2A$CA$D0$F8$69;$30$C9$3A$90$02$69$06$C8$91$A2$p}C0$05;$D0$E5$60];PROC PrintF=*(CARD s,a,b,c,d,e,f,g);[$85$82$86$83$84$A2$AD _DEVIC $0A$0A;$0A$0A$85$C1$A0$00$84$87$84$C0q}$B1$82;$F0$4C$85$86$E6$C0$F0$46$A4$C0$C4$86;$F0$02$B0$3E$B1$82$C9$25$D0$3E$E6$C0;$C8$C4$86$F0$02$B0$35$B1$82$C9$25$F0;$2Fr}$C9$45$F0$29$A8$A6$87$E0$0E$B0$D4;$B5$A2$48$B5$A3$E8$E8$86$87$AA$68$C0;$43$F0$15$C0$49$F0$34$C0$48$F0$3C$C0;$53$F0$3F$38$Bs}0$1D$60$38$B0$B2$A9$9B;$A8$A6$C1$A9$00$9D$48$03$9D$49$03$A9;$0B$9D$42$03$98$20 _GOCIO $38$B0$E4;$A0$03$84$A3$A0$FD$20 StrCt} $38$B0$0F;$A0$03$84$A3$A0$FD$20 StrI $38$B0$03;$20 _HEXSTR $A9$FD$A2$03$85$84$86$85;$A6$C1$A9$00$9D$49$03$A8$B1$84$F0$B5u};$9D$48$03$18$A5$84$69$01$9D$44$03$A5;$85$69$00$9D$45$03$A9$0B$9D$42$03$20;_GOCIO $38$B0$98]PROC PutD=*(BYTE d, c)[$86$Av}0$20 _LODCHN $A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$A5$A0$20 _GOCIO$60];PROC PutDE=*(BYTE d);[$A2$9B$4C PutD]PROC Putw}=*(BYTE c)[$AA$AD _DEVIC $4C PutD]PROC PutE=*()[$A9$9B$4C Put];BYTE FUNC ValB=*(CARD a)CARD FUNC ValC=*(CARD a);INT Fx}UNC ValI=*(CARD a)[$85$A2$86$A3$A9$00$85$A0$85$A1$85$A5$A8$B1$A2$85$A4$C8$B1$A2$C9$20$F0$F9$C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$y}02$B0$31$B1$A2$38$E9$30$90$2A$C9$0A$B0$26$48$06$A0$26$A1$A5$A0$A6$A1$0A$26$A1$0A$26$A1$18$65$A0$85$A0$8A$65$A1$85$A1$18$6z}8$65$A0$85$A0$90$CD$E6$A1$38$B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85$A0$A9$00$E5$A1$85$A1$60]PROC _DOINPT=*()[$86$A4$84$A5$2{}0 _LODCHN $18$A5$A4$69$01$9D$44$03$A5$A5$69$00$9D$45$03$A5$A3$F0$18$9D$48$03$A9$00$9D$49$03$A9$05$9D$42$03$20 _GOCIO $BD$4|}8$03$F0$03$38$E9$01$A0$00$91$A4$A5$A6$F0$07$A5$A4$A6$A5$4C ValC $60]BYTE FUNC InputBD=*(BYTE d)CARD FUNC InputCD=*(BYTE }}d);INT FUNC InputID=*(BYTE d)[$48$A9$78$85$A3$A9$01$85$A6$68$A2$FD$A0$03$4C _DOINPT];BYTE FUNC InputB=*();CARD FUNC Inp~}utC=*();INT FUNC InputI=*();[$AD _DEVIC$4C InputCD];PROC InputMD=*(BYTE d CARD s BYTE l);[$48$A9$00$85$A6$68$4C _DOINPT]}G;PROC InputSD=*(BYTE d CARD s);[$48$A9$FF$85$A3$68$4C InputMD];PROC InputS=*(CARD s);[$20 _SHFTR $4C InputSD];CHAR FU}NC GetD=*(BYTE d);[$20 _LODCHN $A9$00$9D$48$03;$9D$49$03$A9$07$9D$42$03$20 _GOCIO;$85$A0$60]PROC Open=*(BYTE d CARD s BY}TE m, a)[$86$A1$20 _LODCHN $A5$A1$20 _STONAM $A5$A3$9D$4A$03$A5$A4$9D$4B$03$A9$03$9D$42$03$20 _GOCIO $8A$4A$4A$4A$4A$AA$A}9$00$9D$C0$05$60]PROC Close=*(BYTE d)[$20 _LODCHN $A9$0C$9D$42$03$20_GOCIO $60];PROC XIO=*(BYTE d,z,c,a1,a2 CARD s);[$}20 _LODCHN $98$9D$42$03$A5$A3$9D$4A;$03$A5$A4$9D$4B$03$A5$A5$A4$A6$20;_STONAM $20 _GOCIO $60];PROC Note=*(BYTE d CARD s, }o);[$86$A1$84$A2$20 _LODCHN $A9$26$9D$42;$03$20 _GOCIO $A0$00$BD$4C$03$91$A1;$BD$4E$03$91$A3$BD$4D$03$C8$91$A1$60];PROC }Point=*(BYTE d CARD s BYTE o);[$86$A1$20 _LODCHN $A5$A1$9D$4C$03$98;$9D$4D$03$A5$A3$9D$4E$03$A9$25$9D$42;$03$20 _GOCIO $60}]PROC Graphics=*(BYTE m)[$48$A2$60$A9$0C$9D$42$03$20$56$E4$68$9D$4B$03$49$10$09$0C$9D$4A$03$A9$53$85$A0$A9$3A$85$A1$A9$A}0$9D$44$03$A9$00$9D$45$03$A9$03$9D$42$03$20 _GOCIO$60];PROC SetColor=*(BYTE r, h, l);[$C9$05$B0$13$85$A0$8A$0A$0A$0A$0A$}85;$A1$98$29$0F$05$A1$A6$A0$9D$C4$02$60]PROC Position=*(CARD x BYTE y)[$85$55$86$56$84$54$60];PROC Plot=*(CARD x BYTE y});[$20 Position $A9$06$AE$FD$02$4C;PutD];PROC DrawTo=*(CARD x BYTE y);[$20 Position $A2$60$A9$11;$9D$42$03$AD$FB$02$8D$}FD$02$20 _GOCIO;$60];PROC Fill=*(CARD x BYTE y);[$20 Position $A2$60$A9$12;$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO;$60]};BYTE FUNC Locate=*(CARD x BYTE y);[$20 Position $A9$06$4C GetD]PROC Sound=*(BYTE c, p, d, v)[$C9$04$B0$25$86$A1$0A$AA$A9}$00$8D$08$D2$A9$03$8D$0F$D2$A5$A3$29$0F$85$A3$98$29$0E$0A$0A$0A$0A$05$A3$9D$01$D2$A5$A1$9D$00$D2$60];PROC SndRst=*();[$}A9$00$A2$07$9D$00$D2$CA$10$FA$60];BYTE FUNC Paddle=*(BYTE p);[$29$07$AA$BD$70$02$85$A0$60];BYTE FUNC PTrig=*(BYTE p);[$}29$07$AA$BD$7C$02$85$A0$60];BYTE FUNC Stick=*(BYTE p);[$29$03$AA$BD$78$02$85$A0$60];BYTE FUNC STrig=*(BYTE p);[$29$03$A}A$BD$84$02$85$A0$60];INT FUNC SCompare=*(CARD s1, s2);[$85$A4$86$A5$84$A2$A0$00$84$A0$84$A1;$B1$A4$85$A6$B1$A2$85$A7$C4$A}6$F0$15;$C4$A7$F0$11$C8$B1$A4$D1$A2$F0$F1$90;$03$E6$A0$60$C6$A0$C6$A1$60$A5$A6$C5;$A7$F0$F9$B0$F0$90$F1]PROC SCopy=*(CAR}GD d, s)[$85$A0$86$A1$84$A2$A0$00$B1$A2$A8$B1$A2$91$A0$C0$00$F0$04$88$38$B0$F4$60];PROC SCopyS=*(CARD d, s BYTE b, e);[$8}5$A0$86$A1$84$A2$A0$00$84$A6$B1$A2;$C5$A5$B0$02$85$A5$A5$A4$F0$15$C5$A5;$F0$02$B0$0F$A4$A4$E6$A4$B1$A2$E6$A6;$A4$A6$91$A0$}38$B0$E7$A5$A6$A0$00$91;$A0$60];PROC SAssign=*(CARD d, s BYTE b, e);[$85$A0$86$A1$84$A2$A5$A4$F0$3B$C5$A5;$F0$02$B0$35$8}5$A7$C6$A7$A0$00$84$A8;$B1$A0$85$A9$B1$A2$85$AA$A5$A7$C5$A5;$B0$15$A5$A8$C5$AA$B0$0F$E6$A8$A4$A8;$B1$A2$E6$A7$A4$A7$91$A0$}38$B0$E5$A5;$A7$C5$A9$90$04$A0$00$91$A0$60]BYTE FUNC Rand=*(BYTE r)[$85$A2$C6$A2$A9$01$C5$A2$B0$05$38$2A$38$B0$F7$85$A3$}AD$0A$D2$25$A3$C5$A2$F0$04$90$02$B0$F3$85$A0$60]PROC Poke=*(CARD a BYTE v)[$85$A0$86$A1$98$A0$00$91$A0$60]PROC PokeC=*(}CARD a, v)[$20 Poke $C8$A5$A3$91$A0$60];BYTE FUNC Peek=*(CARD a)CARD FUNC PeekC=*(CARD a)[$85$A2$86$A3$A0$00$B1$A2$85$A0}$C8$B1$A2$85$A1$60]PROC SetBlock=*(CARD a, l, v)[$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04$A5$A3$F0$16$A5$A4$91$A0$C8$D0$02$E}6$A1$C6$A2$A5$A2$C9$FF$D0$E7$C6$A3$38$B0$E2$60]PROC Zero=*(CARD a, l)[$48$A9$00$85$A4$68$4C SetBlock]PROC MoveBlock=*(}CARD d, s, l)[133 160 134 161 132 162 160 0 166 165 240 14 177 162 145 160 200 208 249 230 163 230 161 202 208 242 166} 164 240 8 177 162 145 160 200 202 208 248 96]MODULE 14 177 162 145 160 200 208 249 230 163 230 161 202 208 242 166 <"Gem Drop"A Puzzle GameBy Bill kendrickNew Breed SoftwareAugust-September, 1997 Please see "GEMDROP.TXT" for game :}documentation. Boot without BASIC. Action! cartridge is not required. Leave game disk in Drive 1 and keep it from :}xbeing write-protected. If you wish to change your disk so it skips the intro. part...  Rename "GEMINTRO.AR0" to| ":}*GEMINTRO.COM"  Rename "GEMDROP.AR1" to. "GEMDROP.AR0" This version has not been tested with any emulators and may :}not work properly with them. Please contact me (see GEMDROP.TXT) to find out if another version is available.Enjoy:}G! work properly with them. Please contact me (see GEMDROP.TXT) to find out if another version is available.Enjoy8EE