.$Qi!= $!R FJJ'1X3οߔK VrMsʚaX'v#aV8@Ro0`ր%cN84>Dxˈ:e|c<%8 r!GOOMBAGOOMBAGMBAHٟHYHdAD dT,0Q 4 4:9Q 4 4:N8Q 4 4: S 4:8  0S`H`hH`/.$Qi!= $!R FJJ'1X3οߔK VrMsʚaX'v#aV8@Ro0`ր%cN84>Dxˈ:e|c<%8 r!GOOMBAGOOMBAGMBA 0Uih7 RUD@ 0X@ q`PUUQ HAptbd5Q1QUUQl)`D` P@ @I Hps'6FTQE%In@p`P+5@;7g;#Oh(qF&PRQ oOwww.a$PcWЏ`^&'_ ?dP@*Q?piIp`5SQUEU`ߖ_p`_c~P?@G@FTtU4b_`dHpw6fP0;UhGsPpIwrF@TPAUE@?c@`@wGfaUP ?Ph`tp@ff1UU$b!o{׀(2?ulB_a{%aQbrf>)< ^ 5~C?B{A H7p6 `^Q5UU@IFtrdUQE@??faUR0U?@)A)(wJfZS00%1[1F!wpfU!U UU4AwwGf~_ @DwfaS#P`@A0PU@k_ ! T?2ifa$UEDQ$!?^%^?#I@hwttFbBEqA  wBd@Q@biq_TR0BC?ww??QbTUBU4$??dQC!?ۙA_swwbE3_Ai~$_~`1P0S$I`QiÆqw 6UT'@i `h`GGGf&A%`iݑhHq#FF]E$E~a Iqi!GOETHH#`P1a C@q@81b@r6F0`ffPFR??01?HB*i8btwa79*Q@ _ TPp#```0w%FS ?`0660SS R8 DqF6 Qy@`p?TPU4q? ~@  7 _0\/zz @0H??*kp3$$$$RSSC4FF%RteC4VG%RddC455%BBBBX=RJZ9gs{X=LJZ1gs{gCClC)C] 𵆰KN$kIHRR!B!GOys@-h$U`!!4, W@  7B  ?' xG 7(9"HBa8dI# h@C8!> - @'% x 7 / ' L '` h #@ Hx( GhCXC C2C J'PhR{3:3z;@* 9+ѐpGhC񵂰 )Hh.8PCpR(0 9 B %($EHh( "B"1# .1o0:0z!@4B Hh ))IBIIIBIIAG1hCHIh h`B@@#@Oi#B i1a)ۉ HaaI ` !@CpGhCCC!"R( KR(HQ1B !HpG0  #GK *KK#A#CETS0 \ ,!!1BCR0(۰pG0*A A"I2 "HpG@I" pG@NhH1iCA@@ 0a xA(h (ya` h 7B  ?'! 1@#BHМC` GC "JI# h@#[B EHpEI hO#'<pK $x#Cp"Cp8< $Qx9K!CQph !#B!`4I`4I3IMH`$] h`!!4,*L C8a!Lhi@Hhh (ڠ!I!IXH` 8@H8@$( 2`!4 ,L C I  IMGC2lCC `8` $M/`U/ HC(a/ / ` Ӯh/ѰI/IX` @/(/ H @O8CGC h`` G G Oh 0*2Rh"B"]GCK"hB"%0NGCB828!RGOFFONwith RONOFFSLOWMO5min10min30minOFFIIIIIIIIIIIIIIINormalTurboCrapProtGBAGBPNDS1P2PLink2PLink3PLink4PBlackGreyBlueNoneYellowGreyMulti1Multi2ZeldaMetroidAdvIslandAdvIsland2BaloonKidBatmanBatmanROTJBionicComCV AdvDr.MarioKirbyDK LandDMGMGBSGBCGBAGBAuto Goomba Pogoomba ' I" ;`AHx('@I XhF? @HAIx XiFhFiF" F;O @ 2 2 > GPowered by XGFLASH2.com 2005uChav2.2 on wC`C`B autofire: A autofire: 2`Controller: Display->Other Settings->Link TransferSleepRestartSave State->Load State->Manage SRAM->Exit Q" 6h:H;Ix X:hFiF 8H8Ox8:XhFiF 6L7Ix X6hFiF x4I X4hFiF 4H4h :XhFiF y0:XhFiF /H/x:XhFiF /H/hhFiF G Other Settings(`VSync: _`FPS-Meter: C`Autosleep: `EWRAM speed: 2Swap A-B: Autoload state: (Goomba detection: PaGame Boy:  " HIh XhFIiF 7HIx XhFfOKBa  @&60`.CH p ;pAH[#  >Np00Xp!000pp@;p#C3H&1H1A1HA(1%H&V f>Й(`]0 Z&v  # 06N<,$$ 4D=- Hh. 47?/ JGgCTCC brac#\T3:рpG H!I LhB 8hB <`x`Gg1W!"Cxx;Cx?;Cx?;CY02*ۀpG e") |"* wZ'?рG Write error! Memory full. Delete some games.1K1Oh#[<f'BC#fB7B+) #[B 5 (92>.'C.`h`=- 9*d'C'``` I02 `!Ip02B @I9 GCg^)2:p01ypG "S!H9 !7< 9< !7< }9 79 G00:00:00 - 00/00kKCIh h&1+AL! + + h)89B)) !`  Y'# ` B )"B" 0 1_Bѡh7  &.ѽB  i"2 D/"3 =( ("B" 0." )7 (" H` `GCgPush SELECT to deleteSave state:Load state:Erase SRAM:CKL(#[30 g``Hh`Hh2`HOx(8I Hh1.1"8NGg0CPCuCgCTC LjF ` (ќG  "! h-!h8BH ` 8@jF (H8@C #L!:#k LjF `  @"! h("! h 8@jF H8@GgCd#C% I NBh3B1` *I `GgCIh" J)0% )>hI`GgCH#h@pGlC( Hh/jF!(HhGPCTC(јG ") O#!";HhjF!v( "!6( g Saving.gPC(4! N(-h()!D("#[M0"#K!I H631!"H`!8Gg0!HKJ?"!GgA(< Hx8Hhw! ! -hB "RIH<// "Ah J00""RIH"GdCPCHx"Hh-jF! (hBE"R I HjF!8(zGdCPC  .MiF(`(G @&h%(B(!{%mH5hB#[B I") `%5<- M"!(h)h8BH(` 8@iF ( H8@CpC ROM not found.I(IjF! ("L#[0" IHhqHhHqHIx xCI x CI xICqHxHhO`/"! #[0"Gg0g8\_C(C_dCPC(!jF! (Jy`Ay J`y Jp!@ Jp!@ J#pI@@ pG8\_C(C_&O(C !I%=p70BjF! Z(L#[0"IHJhqHhHqHxqxyCq/`"! #[0"Gg0g8\_CC8O8J9j `%3L.S][D/7>W S BՉ-63CCBiсщ) щIaZ %KB$H!!с!C P CKBH!KBH!KBPh(Е`h(Аh8`HH8bH#CpG!`Q`сQ`gC @0&@  HKhB Hx( H! I CII#CpGC0vC CB0ӄFR) xp@Iу:Ӱɸ:Ұ 2 p Cp p p xpI@R`FpG CCXPpGR\TpG/Y@P@ KRB#BBRB[AB Z@P@Y@pGGGGG G(G0G8G CфF0 LC+@# @pB0`FpG xpI[*pG2x+ x1p2+pG/KRB#BBRB[ABpGFCˀ  xx[IR gFpGFRp@: C C  :ӁTR`FpGxG0`B @ @   !QR B0`BaB/F C ӰL;C+@рҰ xpI@+ R`FpG p@R`FpGxG--N< \/ Divide by zero///4 ,P$PP //38//1e "" \  /\ \$/< }Ϡ0\ }Ϡ@\  @0}ϠP\ // XTS4xVͫ0 FhnzZ~h2 0;.Yk  RT;h;h;h;;;T; T; = = =<<<<<===<<<<<<" =l=H=T; O-<04 +**)HAIB*@/@GPO|xt,`- .{H x@@44P,T(X$\ㄔGO 2 ZB^?O/pD-逡$ b(`4@ 0 PPQ0S$pD/XCP ` w9`9@9,C BB4Cx0@P`x404x40x4L-`ጠ匰Z @O PPQP$T0IE?@  L/xxxx h>P`@: ;;,'t,C2\+phà`àbàcàdàeàhàiàlàmàpàrà`sàtàu` àxàyà|à}ààà`bcdehilmprs`tu` xy|}wxFFFG8GhGGG H(??(@@(AA(B?(M3"o{3"o{3"o{3"o{UUUUUUUUUUUUUUUUUUZJZcUUUތk)ZcZJggU F%)YZJZcޢBk{URZJ!1sJ!!scR)祥{))Bu)ksJ!!scR)祥{))BތZsJ!!kkcB{))BȐPDBRRRRZZk{!BRZ{9RZ{9RZ{9Zk{!Bε!)99JZ9ﭥkZZB猥BRkRRRBZޜkf!BRUURBΌZR>sB3 wx#5 ZM`) UUUѩQH%GGM[jcBs{!%   @h*>` ; 8L 50@  ,$ /P-"P-p???????-???/@-L =@P 1 @@@0S@/0S@/                  @-BJRZbjrz "&.B1.07, T\ 0P@0/P00/$0/  R 0/޼ DP`l  0܀P:O-@PB A  ᠀堐cp@DA`PPP` \ EX P: O 0@-S"I 0  \0 Π0 S( 000 Q@@Ao 0!CexV4-$2X$QP$? @P,,0 R :Q0A 2 --N< \  Divide by zero!"!!"!"!!""!!"!""""!"!!""!!"!""""!!!!!!""""!"!!"!!!!!!!"!!""!!"!!!!!!!"""""!!"!!!!!!!!!!!!!0CFGNINTENDOxG[?xGbxGDxG\?xGZxGxG\xG xGxGxGexGxGqxGxGXTW@XTW@XTWXXTW$ %Ƞ B.瀀XTWX XTW2T12@XTW21TE112@XTWX\ကXTW0@2#D#@XTWČ~ B. B.XTW'1p2#!2XTW%Ƞ +LကXTWXE XTWe\2T12eT@XTWe\21TE112eT@XTWTXကXTW0L2#@#L@XTW$ PI@XTWhXTW$ &Ƞ B.瀀XTWh XTW2d12@XTW21dF112@XTWhlကXTW0E@2#@XTWXTW'1p2#!2XTW&Ƞ +LကXTWhF XTWfl2d12fd@XTWfl21dF112fd@XTWdhကXTW(0d@2E@XTW@HXTWxXTW$ 'Ƞ B.x XTWx XTW2t12@XTW21tG112@XTWx|ကXTWD QDR T"@ 22#1@XTW@T 2231@XTW@HXTW'1p2#!2XTW'Ƞ +xLကXTWxG XTWg|2t12gt@XTWg|21tG112gt@XTWtxကXTWD$ 2@XTW@HXTW|XTW$ 'Ƞ B.xG XTW||倀XTW'Ƞ + 212  B.XTW'Ƞ + 21@112  B.XTW'Ƞ B.XTW12@XTW@HXTW|'1p2#!2XTW'Ƞ +xGLကXTW|@|倀XTW2D12@XTW21DD112@XTWLကXTW22#@XTWXT@XTWXP@XTWXT@XTWXP@XTWXT@XTW'Ƞ +X\ကXTWXP@XTWT%T@XTWT&T\@XTWTP@XTWT'T\@XTWTP@XTW'Ƞ +TXကXTWT$T@XTWh`@XTWhd@XTWhd@XTWh`@XTWhd@XTW'Ƞ +hlကXTWh`@XTWd%dl@XTWd`@XTWd&d@XTWd'dl@XTWd`@XTW'Ƞ +dhကXTWd$d@XTWxp@XTWxt@XTWxp@XTWxt@XTWxt@XTW'Ƞ +x|ကXTWxp@XTWt%t|@XTWtp@XTWt&t|@XTWtp@XTWt't@XTW'Ƞ +txကXTWt$t@XTW% 'Ƞ B.瀀XTW%'Ƞ B.瀀XTW& 'Ƞ B.瀀XTW&'Ƞ B.瀀XTW' 'Ƞ B.瀀XTW'Ƞ  B.瀀XTW PI@XTW@H$ 'Ƞ B.瀀XTWD@XTWD@XTWD@XTWD@XTWD@XTWD@XTW'Ƞ +LကXTW$@02!2D@XTW$D02!2@XTW$@02!2D@XTW$D02!2@XTW$@02!2D@XTW$D02!2@XTW'Ƞ +$L02!2XTW$@02!2@XTW(!$@02!2@XTW(!$@02!2@XTW(!$@02!2@XTW(!$@02!2@XTW(!$@02!2@XTW(!$@02!2@XTW'Ƞ + (!$@02!2XTW(!$@02!2@XTW$@T02 2#!2@XTW$DT02 2#!2@XTW$@T02 2#!2@XTW$DT02 2#!2@XTW$@T02 2#!2@XTW$DT02 2#!2@XTW'Ƞ +$LT02 2#!2XTW$@T02 2#!2@XTW2##?$@2# 2#D1!2@XTW2##?$@2# 2#D1!2@XTW2##?$@2# 2#D1!2@XTW2##?$@2# 2#D1!2@XTW2##?$@2# 2#D1!2@XTW2##?$@2# 2#D1!2@XTW'Ƞ + 2##?$@2# 2#D1!2XTW2##?$@2# 2#D1!2@XTW2@1@XTW2D1@XTW2@1@XTW2D1@XTW2@1@XTW2D1@XTW'Ƞ +2L1XTW2@1@XTW0@41@XTW0D41@XTW0@41@XTW0D41@XTW0@41@XTW0D41@XTW'Ƞ +0L41XTW@1@XTW0@1@XTW0D1@XTW0@1@XTW0D1@XTW0@1@XTW0D1@XTW'Ƞ +0L1XTW0@1@XTW$T02 2#!2@XTW$T02 2#!2@XTW$T02 2#!2@XTW$T02 2#!2@XTW$T02 2#!2@XTW$T02 2#!2@XTW'Ƞ +$ T02 2#!2XTW$T02 2#!2@XTWg XTW|Ě -,XȌ,Ȍ|ĊTXXTW XTW -XTWa XTW%|ĚL|Ċ --,Ȍ ,Q XTW$L02!2XTWI|ĚL|Ċ --,Ȍ ,Q  -XTWXTW@H|Ě -,Ȍ,Ȍ|Ċ -XTWXTWXTW I|ĚL|Ċ --,Ȍ ,Qf  -XTW (!$@02!2XTWI XTW|Ě -,hȌ,Ȍ|ĊdhXTWJ XTW XTW&|ĚL|Ċ --,Ȍ ,Q XTW$LT02 2#!2XTWIOhXTWXTW}XTW 2##?$@2# 2#D1!2XTWI& $ XTW|Ě -,xȌ,Ȍ|ĊtxXTW%( $ v뀀XTW'|ĚL|Ċ --,Ȍ ,Q XTW2L1XTWI |(!|02 "2XTW' -@XTWČ$  B.XTW0L41XTWI( LXTW|Ě -,Ȍ,HȌ|ĊL0P ;XTW%( oLကXTW@XTW  $|ĚL|Ċ --,Ȍ ,Q8 XTW0L1@XTWI0s|(!x02 "2XTW|t倀XTWČ +LXTW|Ě -,Ȍ,Ȍ|Ċ -H@H$ T02 2#!2XTWI80O- ģij,F.  !#RO/#>5:5`   h/<<3   4# R $# ,/  /"P" R" B4 4@ FxGQEĊQEĊ x ĊG @ĊQEOĊ$ P P@ $ @: $  vR $ $@ H  P  X ` @ I|ĚL|Ċ --,Ȍ ,Q  -XTWPFPFh>P01// \J" 3--:--. .:::::::.TA`AlAxAA:AAAAAAAAA:B B,B8BDBPB\B:::::::::BBBBBBBBBBBBBBBB@56d6677:477778::::::::::-::::::::::::::::::::::::::::::::::::::::: \(UWQL \UWQLRead from OAM. Wrote to OAM. \J2--:----:::::::-<@H@T@`@l@:x@@@@@@@@@:A AA$A0A  ˌ  ˌLT!L t >  ˌ  +xxxxSNtuuh>Ix^Z!`@@&9_9_9_9_`?DDDD@ D H L P T X T X  PO4OdO::::(;|;;;-<;:: v  (;=L<$<!Q@-U@ nO4rOP$ P$ P$ P$ P$ (;<<: 9: =0=:+ P CSv(;\=;;?(;=<:(;=::C9@-0<<<<8$@DA$HLI -$@DHL$T?99 0Px h8Tx0`|  P 8Lt@`4PhH 4 ` |       8 P l        4 P |        @ X t       $ @ X t       <X p0\(<Pdx @l4p$`(\$THH0Lh ,Hh(Dd0d<l (ldlBDTl$ X h P$     !(!d!!!!!0"X"""""#<#T#### $ $$$$:::::::(::::8 ;;D+( )( ) ) EQ )_LOC @/)) ))TACK_PONTERorlater o "   *   *   A(A "   A(A *  de files are useable revisions. rev_Check_hardwarePff s nٙgcnܙ3>GB HiColK> <;>rͯ( aO@o@gV>OV!@O@G͛O!@O@G͛>̀!~w>0>MwD8>@! aACBJ>KOpV6#= !>6#= !Fw#x=G !|F>(= * x G@( D @x@D8AA>> "  = > /7G>/Gx>0>O!XY>!hw!D .AN .isrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrD !*fo********************************************************** mem_Set:: inc B.ski)TILE_LOCATION.skip dec c jr nz,.loop dec b jr nz,.loop ret ;*************************************************************************** ;* ;* mem_Copy - "Copy" a memory region ;* ;* input: ;* hl - pSource ;* de - pDest ;* bB****)SPR_LOCATION********************************************** mem_Copy:: inc b inc c jr .skip .loop ld a,[hl+] ld [de],a inc de .skip dec c jr nz,.loop dec b jr nz,.loop ret ;*********************************B****)MAP_LOCATION* mem_Copy - "Copy" a monochrome font from ROM to RAM ;* ;* input: ;* hl - pSource ;* de - pDest ;* bc - bytecount of Source ;* ;*************************************************************************** mem_CopyMono:: inc bBkip color.z80] ld [de],a inc de ld [de],a inc de .skip dec c jr nz,.loop dec b jr nz,.loop ret f&***HЂ )color.z80******************************************* ;* ;* mem_SetVRAM - "Set" a memory region in VRAM ;* ;* input: ;* a - value ;* hl -s: PЂИ)color.z80********************************************************************** mem_SetVRAM:: inc b inc c jr .skip .loop push {G `Ђ)color.z80 pop af ld [hl+],a ei .skip dec c jr nz,.loop dec b jr nz,.loop ret ;*********U***Ђ0)color.z80**************************** ;* ;* mem_CopyVRAM - "Copy" a memory region to or from VRAM ;* ;* input: ;* hl - pSource ;* de - pDf bc))color.z80******************************************************************** mem_CopyVRAM:: inc b inc c jr .skip .loop di ktVR)P)h0))  xZ)إ) ) dec )P1F_5)KB*_)( ) B*)P1F_4)MB)rVBK )Bd*)P1F_3)OB)p<)( )B *color.z80QB)H)( )@@@@@@@@@0)8) ).skip)MEMORY1.z80 rNR34 EQU $FF1E rAUD3HI ldh a,[rSTAT] and STATF_LCD jr z,@-4 lTAT] (( ))nd STATF_LCD [aL)*Ђ )CharLoop NR42 ( ))UD4ENV EQU rNR42 A*(Ђ ).scfin T) ).ScOff rNR42_2 EQU $FF22 rAUD4POLY EQU rNR42_2 rNR43 EQU $FF23 rAUD4GO EQU rNR43 a(')(Ђ ).scfin ldh a,[rSTAT] and STATF_LCD jr z,@-4 ldh a,[rSTAT] and STATF_LCD $a(')(Ђ )VBLANK 6 CAR( ( )) EQU 8 CART_ROM_RAM_BAT EQU 9 CART_ROM_256K EQU 0 CART_ROM_512K EQU 1 CART_ROM_1M EQU 2 CART_ROM_2M EQU 3 CART_ROM_4M EQU 4 CART_ROM_8M EQU 5 CART_ROM_16M EQU 6 CART_RAM_NONE EQU 0 CART_RA'A@`*(ЂAM_6).loop)256K EQU 3 PADF_DOWN EQU $80 PADF_UP EQU $40 PADF3a*)p)(Ђ$20 ).yloop $10 PADF_START EQU $08 PADF_SELECT EQU $04 PADF_B EQU $02 PADF_A EQU $01 PADB_DOWN EQU $7 PADB_UP EQU $6 PADB_LEFT EQU $5 PADB_RIGHT EQU $4 PADB_START EQU Max))@)(ЂEQU ).xloop EQU $1 PADB_A EQU $0 SCRN_X EQU 160 Pax))3)(ЂN_Y )_Pad) SCRN_X_B EQU 20 SCRN_Y_B EQU 18 SCRN_VX EQU 256 SCRN_VY EQU 256 SCRN_VX_B EQU 32 A *`Ђ )spbak) EQU 32 NINTENDO_LOGO: MACRO DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D DB $00,$A`Ђ00,$)GBPalette1$DD,$D9,$99 DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E ENDM ENDC @@@@@@@@@@@@@@@@@@@@@XAЂЂ@)_wait)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A*(Ђ@,3)( )@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ $7 PADB_UP EQU $6 PADB_LEFT EQU $5 PADB_RIGHT EQU $4 PADB_START EQU $3 PADB_SELECT EQU $2 PADB_B EQU $1 PADB_A EQU $0 ;**********************0B)****).loop)********* ;* ;* Screen related ;* ;*************************************************************************** SCRN_X EQU 160 ; Width of screen in pixels SCRN_Y EQU 144 ; Height of screen in pixels SCRN_X_B EQU 20 ; Width of screa>)E)ЂB ).skip) screen in bytes SCRN_VX EQU 256 ; Virtual width of screen in pixels SCRN_VY EQU 256 ; Virtual height of screen in pixels SCRN_VX_B EQU 32 ; Virtual width of screen in bytes SCRN_VY_B EQU 32 ; Virtual height of screen in bytes NIa>)D)Ђ ;*)mem_CopyMonoogo ;* (Code won't work on a real GameBoy) ;* (if next six lines are altered.) DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 DB $BB,$BB,$67,$63,$6E,$0EI`R)Ђ,$9F).skip) ENDM ENDC ;HARDWARE_INC ; -- AUD3LEN/NR31 ($FF1B) ; -- Sound length (R/W) ; -- ; -- Bit 7-0 - Sound length ; -- rNR31 EQU $FF1B rAUD3LEN EQU rNR31 ; -- ; -- AUD3LEVEL/NR32 ($FF1C) ; -- Select output level ; -- ; -- F)put ).loop) 00: 0/1 (mute) ; -- 01: 1/1 ; -- 10: 1/2 ; -- 11: 1/4 ; -- rNR32 EQU $FF1C rAUD3LEVEL EQU rNR32 ; -- ; -- AUD3LOW/NR33 ($FF1D) ; -- Frequency lo (W) ; -- ; -- see AUD1LOW for info ; -- rNR33 EQU $FF1D raXC)HJ)Ђ ;).skip)R34 ($FF1E) ; -- Frequency hi (W) ; -- ; -- see AUD1HIGH for info ; -- rNR34 EQU $FF1E rAUD3HIGH EQU rNR34 ; -- ; -- AUD4LEN/NR41 ($FF20) ; -- Sound length (R/W) ; -- ; -- Bit 5-0 - Sound length data (# 0-63) ; -- rNR41 EQU $FF20 rAUD#aXC) I)Ђ; --)mem_SetVRAM21) ; -- Envelope (R/W) ; -- ; -- see AUD1ENV for info ; -- rNR42 EQU $FF21 rAUD4ENV EQU rNR42 ; -- ; -- AUD4POLY/NR42 ($FF22) ; -- Polynomial counter (R/W) ; -- ; -- Bit 7-4 - Selection of the shi @( ))3 EQU $FF13 rAUD1LOW*I+Ђ ).skip) rNR14 EQU $FF14 rAUD1HIGH EQU rNR14 pK) ).loop) rNR21 EQU $FF16 rAUD2LEN EQU rNR21 .aG)N)Ђ ).skip)MEMORY1.z80 rNR22 EQU $FF17 rAUD2ENV EQU rNR22 rNR23 EQU $FF18 rAUD2LOW EQU rNR23  ( )) ?aG)M)Ђ$FF1)mem_CopyVRAM FI2)Ђ ).skip) rNR30 EQU $FF1A rAUD3ENA EQU rNR30 rNR31 EQU $FF1B rAUD3LEN EQU rNR31 P) ).loop) rNR32 EQU $FF1C rAUD3LEVEL EQU rNR32 rNR33 EQU $FF1D rAUD3LOW EQU rNR33 JaL)W)Ђ X( )A)(Ђ )SpriteRoutineEnd mem_SetVRAM:: inc b inc c jr .skip .loop push af di lcd_WaitVRAM pop af ldA+(Ђ ei)init_RoutineLoopop dec b jr nz,.loop ret A*(Ђ )WaitQ) mem_CopyVRAM:: inc b inc c jr .skip .loop di lcd_WaitVRAM ld a,[hl+] ld [de],a ei inc de .skip dec c jr nz,.loop dec b jr nz,.loop ret ENDC AЂ(Ђ )rP1ԛ)QU %00001000 STATF_LYCF EQU %00000100 STATF_HB EQU %00000000 STATF_VB EQU %00000001 STATF_OAM (MEMORY1_ASM STATF_LCD EQU %00000011 Bh) color.z80 %00000010 rSCY EQU $FF42 *Ђ  IF \1 > 1.1 WARN "Version \1 or later of 'memory1.asm' is required." ENDC EQU $F)rev_Check_memory1_asm rDMA EQU $FF46 )5) ldh a,[rSTAT] and STATF_LCD jr z,@-4 ldh a,[rSTAT] and STATF_LCD jr nz,@-4 cy o)lcd_WaitVRAM polynomial counter (0000-1101) ; -- freqEQUdrf*1/2^scf (not sure) ; -- Bit 3 - Selection of the polynomial counter's step ; -- 0: 15 steps ; -- 1: 7 steps ; -- Bit 2-0 - Selection of the dividing rat>)7))mem_Set f/4 001: f/8 010: f/16 011: f/24 ; -- 100: f/32 101: f/40 110: f/48 111: f/56 (fEQU4.194304 Mhz) ; -- rNR42_2 EQU $FF22 rAUD4POLY EQU rNR42_2 ; -- ; -- AUD4GO/NR43 ($FF23) ; -- (has wrong name and value (ff30) in Dr.Pan'sIu*Ђit 7).skip)t 6 - Counter/consecutive selection ; -- rNR43 EQU $FF23 rAUD4GO EQU rNR43 ; silly name! ;*************************************************************************** ;* ;* Cart related ;* ;***************************************************=)****).loop) EQU 0 CART_ROM_MBC1 EQU 1 CART_ROM_MBC1_RAM EQU 2 CART_ROM_MBC1_RAM_BAT EQU 3 IF 1.5 > 1.9 a:)A)Ђ1 or).skip)inc' is required." ENDC ARTX"( ))QU 5 CART_ROM_16M EQU 6 CART_RAM_NONE EQU 0 CART_RAM_16K EQU 1 CART_RAM_64K EQU 2 CART_RAM_256K EQU 3 ;***************************************************************************a:)?)Ђted )mem_Copy************************************************************ PADF_DOWN EQU $80 PADF_UP EQU $40 PADF_LEFT EQU $20 PADF_RIGHT EQU $10 PADF_START EQU $08 PADF_SELECT EQU $04 PADF_B IXh*Ђ_A ).skip) PADB_DOWN EQU xor a ld [rVBK],a ld [rSVB@VWXY'$|lm4'7bĢĢ"DDiH]s3p1cTWe0wo@?:<:>/?? /p/??;}  !qR. ~B6  ._ v`x|&93Gs{qY ?ȷo!}Ϡ``###m,$`xֿ^@@#A }|Ew YN?1xpǟGg?~%[?~0}n}7$Ԃ@@/-T/'//0wc s3]x BOW9Xumxp r8`C:va#@gB%sͯ@b 4!!1pefBĦ+$571Crq#K8g@g@MJF^>7)rY<ߨ HI %ʻhDz:ˣw!~O/e/00 ??? _? ??#{{w8|fv<B?m=3wx?? źϱ:} dvvdX>e !#"=1}m|d_G@@I􊚨85<<+t |G~F,qQSqsy yj8KK:ܔ!kM g >, ߳6#Zxby{z" >4u' GGC "A?D@>@DŽC3ט/~/<3px  A@l'N  hacAcgOLt*^TppKI@@@@ d C KH pζ~W7b9&%G0g@<0974>POcG!3Ѓ0=l @D"Afp !  3sB 3{u3m%S- ui$0<n`0@`l+@dC%NB@W6& iu'c@K5X ?*DID ?" x<>/8~$²H0[<??4?dIFD.GȯaR yk~[oqi}:0!aciv?``g-NZzOkx&;~>.O$tBn8s</ 6;5OļO1,;;$(` |b18 R  X@h@@?DD(O__ vt9wX ^];0 m%8>4\>, "Gd77yH!7l''~e#?Vy >ufH\N@O0x!l8:=X9q`  agO@/pP&C0WoA^S@ջxc/w'?=#?:B?' cn.߿ ̴R V 00=~W'`PQ  {nܐތ@@*C|x}n]'=`6v00#?p8W lo3n'ps?_`Ե4=>??P@? 3 ,9 vܛG<8p8ԘTD4;}d<?D~HH!?9mc0Ac{j`A ߞ}?֘ l  ??CoxgU!a`Џ! hLL! ׵r;Գ]}_t~>.?8?@s}}F $O<zw u8!ޟ9`AAw8Y 3V|| !A3[ H\@bJ~!00 ȇv \ {8þ`,>/\@$6vjB 3?M@87b6`qp0 T7??@@`;?B"J_s꽽n`ӆ7!ɀ@' _Mol2 pd m @t99 |~nXxd '%=.F<GF3I _ j( ܠP2ae#KE؀|v!u2 d 8 Ae$y''Rw< FZ|<7,1xo@ǡb   ? ]؀wWS߀NVZP o_tCoGp)^pOO3A@|!C@! h~2Ekfo? !'G1=8( /+:}lLv0x؄k ӂ^ h2!_\ \B[rA,`90_'`5g#p2!aYJC1{@XDs P<`p4S"x%5 `BB@@Ao3_ww`o w]nV*'97Rmc %y p;g4,g, 0%cyÒ&Gx 4/mUn?;{t>!g R%~pdoþ0e>vo w+ļD21fbH@n־h` ~DD=LnЫG /^W|>U<2<94KB ??jNOC߿"nB/       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~5()MVI-6E)>AI5BVIE^g6krZXofsZzsopN{7g^9()pNi5^'-H5II-R JpV/NfEfkzwqN7gfsVywj{rNzobOJ'%ZWH-Eh9h1IA.NEbONPZEkyooRpRkw^RYsfPJ{Zg5H%pJ=E%g=NRAIIVNRfEgs^ONo{^Rzwk0Fy{fd 5V9E(1i5.NEL^IMf^.NAZyogN7k{ZVzsoPJ8oj{J-c=% J%MA.RE/R^LZAV7kf/J5kw^rVzs^AkZwJ1Y_d9.F!!MANNA.NM^r^ERXkf/Ngs{PN7k{Z.J7o^{9sH)i1=AG)-NAONj5 Job9AbxsKfIfwPRrRYsf9k.R{6K-9IJ%'!.JAQNi5EPV=5f6gw9Z JkrNYoZ18o JqVP>-XG!qJc55I/NRJ5E.NM5b4kYs9j/NsqJgZw1ZXs/FqBI%WSA-F5I/JQJi5 F9JA^5ojj1Zw FrRkZ{5PNgo^5W-_WAI)50FIrJH1E.J9ApRfVi-b FXo5oVwH%ORo9 1N!(!c=J-I0J9H-ION5i5ORVjI-VJk=6kPNVI%PNfA/:7[H%!5?II-QFE-()=5I=Z.Nk1Z/N7sAgqRwH-.Rf=PBoH%E>I%I-=QFM)ENh5h1NNZA1.REf=7kPNZI)M^^50:j)W=R:J%k1IPR9H)EJ5h5MNEI9gINN9^OJzs(!IO^NNq>j)X_5I)N1E9IH-9IE9MNRE5pNAbi5rZEs'! JM^5pF(%{o1E'1A5IH)=Eh19NNEW1PNAf5V FgEO^H-.>'%5M)!i)5Ai5')Ah1J5ONA_j1J=o^'%0NW1=-V)%G)99C.J)k991'-=j-i9H-A9 JJ) J9PRIci-=H-,^R>&!z_-6(!J)0:k55&-==I)')9PNA)%EZ5'%Av[i-i-A5rJ&!w[%='!j)1/6l9')AFj)H-=QF9!9I-/J!=H)RFi5E'%!G%S2%9I--5l5')Ig5/FH1N=9()=i1-J1!')i1A'!&&%(!s25:;I)l55j1').i1A)R9i11A'%&-j-!9N()G!(%215I%15k)%9i)P>G-0J9R =9')!.BG-^ h1=!&!=j-Q:J)51)'%/J-7W()/BV9% B1RFF-!=h-Q&!-Q:))i)12-%*()I)%Fi57O!AH-pR![-')i-=E'!'%B5>!11k)'!')i-J!=pJG-%h1I'-'%g)&-h1qFA:'!-=j-j)51P:!I!)H)&)Ah1N!9H))!')G1!Fh-9 -1I)B(!1-0: '%'-9%h19'-()5'-=!')-(!%=Sg-(!j)).(!)12H)%'-g1(%%i11G-(-9h1BH)g1'%!qJ1k'!)'6-J%!-1H)%-G- ')19I-H)AH15G15'%qJ'%h1 !i)%1j-P>'%1j)Q6%'-G)&1')1i-FH-95.:H)g1!3Sh5!i).2dI-5!()1-r6!')'-g1'%g)'-1H)-H1/:H)g1%5'% F XW-I)QB1 -06I)'%i--'-%'-G%f-(!H)1h-f1()h-A')_11H%F-i)2)-G-1"%'-!'-h1'%'--I)-'%RF-g=I)1r2I%'%1Q6-')1c'))%&1-G)1&)&i1Bc-j-QJ!)-())%r61> !:'-)H-(!&)1H-&! FkI%j-QB!!1I)5!/>1J!%PJI)G15'%&)g-1dF)N1c9H)F!I)1-5i-qF!1!h1'%= Bf-%!F)8[1'!=9KI-!9-/B%=Zj-Q.(!87')h1&1H)9G)I'!  PBX_i)=JI)i19')!-16I)5'%N')g-&-h5!1 J')&! f0B-W1.F99Nj)J%')i-c'%H-'%'-f-h1G-i1'%&! /Bj-V!_=j-!/>5rF I%!i1 k!'-'%g-&-i1F-1'%& G%P>j-7SVi-91RPF8_5>j) ')1'%-G-9')h1!G%qFX[)!Vk=.J[kN8_BqF5i%qN&-g-()1i5'%02I%Y7qB1c'%No/BN[c7SkJPB_V9)F)1F1&%'-%/6_:/>6S-&!S/:oj-cqF9*5qB- =Oj'%f-'-h-F- !'!-.!oB JcH%FzWh)k)0>7S5Jc1 [G-k!&-1h1e)'!')!1)5N'!pB_'%-0B5JB96[pFB()g1%f-I-1%!G%!)(H%5H%JBcF)!91.J!9%:"'% H-'-%G%%'%!-h)G!5!FQ2)F9i-N!f-H%'-B'% 2!1&)F)G-A'%-2i%N1'!N6_j%'!25;%G-I)G% '%9qR'%9 Bi1!-J1V1g-p6-(!WSx[/2['!61Z3'G-5'% /BV'%.B7[Rw%-J5R)6G%J-8[qBzSI%H)r2O%'%'-G%g- qFH![BNJ_oJ55SFG)'!1(!qFI%1(%:-_!&-))h- Q:7Sk).:4Oq>F!-FNg1G!H-.:(![-(!F(nB-O%5-Fi) q>6O[-F=z_&%51P>=&%G-N6)SI!1P>XWi)56SOFrBrByWJ(!P:J)f-&)-!f-9!-B(!d 5O0>O16NqFYS1>!):I%!%)f-')G%!1.:)7W J-0:OJ!1q>JrF:j)''%'!%)g)')!F)'!.6(!Bj!B1qB)J)6r>-j)6'%'i5&!&-+2g-&%-:VI%)J!/:)QBI)J!5BJ'!J)&)!f-&$)%0>j)Yc I%:H!6j%H%-J%5%G) &%j)1BJ!1Fd (!! J))k)6>-'%h1!'!')=H%R >WG)1k)>j)/6Q:-i-'%!9&)QF)yo1*I2d%-((!J%q:1Oi)6N)5'!G)G%!-1J'!d)2 j)6)!6q>)KP:B-I%5:KG)-6!&!G-9I%Rd*%/6J!B-Op>w-Q>K/6j)0:F11'!MJ1!!9I!rJd  J)1>J%/2KWB-q:OO6-q>K>1i-pF!H%c1/>d J!K!q>J1!q>J1k%q:1J-KB_I%WrF{8gw{=I% 9+)BW06-rFP6NK!0:B11Fr>6O-Ss0B9c{RJ&)- l!2 >2G!F[P61J>WS/6F6SrBBg6S!ZkV- rNR22 EQU $FF17 rAUD2ENV EQU rNR22 rNR23 EQU $FF18 rAUD2LOW EQU rNR23  ( )) ?aG)M)Ђ$FF1)mem_CopyVRAM FI2)Ђ ).skip) rNR30 EQU $FF1A rAUD3ENA EQU rNR30 rNR31 EQU $FF1B rAUD3LEN EQU rNR31 P) ).loop) rNR32 EQU $FF1C rAUD3LEVEL EQU rNR32 rNR33 EQU $FF1D rAUD3LOW EQU rNR33 JaL)W)Ђ X( )A)(Ђ )SpriteRoutineEnd mem_SetVRAM:: inc b inc c jr .skip .loop push af di lcd_WaitVRAM pop af ldA+(Ђ ei)init_RoutineLoopop dec b jr nz,.loop ret A*(Ђ )WaitQ) mem_CopyVRAM:: inc b inc c jr .skip .loop di lcd_WaitVRAM ld a,[hl+] ld [de],a ei inc de .skip dec c jr nz,.loop dec b jr nz,.loop ret ENDC AЂ(Ђ )rP1ԛ)QU %00001000 STATF_LYCF EQU %00000100 STATF_HB EQU %00000000 STATF_VB EQU %00000001 STATF_OAM (MEMORY1_ASM STATF_LCD EQU %00000011 Bh) color.z80 %00000010 rSCY EQU $FF42 *Ђ  IF \1 > 1.1 WARN "Version \1 or later of 'memory1.asm' is required." ENDC EQU $F)rev_Check_memory1_asm rDMA EQU $FF46 )5) ldh a,[rSTAT] and STATF_LCD jr z,@-4 ldh a,[rSTAT] and STATF_LCD jr nz,@-4 cy o)lcd_WaitVRAM polynomial counter (0000-1101) ; -- freqEQUdrf*1/2^scf (not sure) ; -- Bit 3 - Selection of the polynomial counter's step ; -- 0: 15 steps ; -- 1: 7 steps ; -- Bit 2-0 - Selection of the dividing rat>)7))mem_Set f/4 001: f/8 010: f/16 011: f/24 ; -- 100: f/32 101: f/40 110: f/48 111: f/56 (fEQU4.194304 Mhz) ; -- rNR42_2 EQU $FF22 rAUD4POLY EQU rNR42_2 ; -- ; -- AUD4GO/NR43 ($FF23) ; -- (has wrong name and value (ff30) in Dr.Pan'sIu*Ђit 7).skip)t 6 - Counter/consecutive selection ; -- rNR43 EQU $FF23 rAUD4GO EQU rNR43 ; silly name! ;*************************************************************************** ;* ;* Cart related ;* ;***************************************************=)****).loop) EQU 0 CART_ROM_MBC1 EQU 1 CART_ROM_MBC1_RAM EQU 2 CART_ROM_MBC1_RAM_BAT EQU 3 IF 1.5 > 1.9 a:)A)Ђ1 or).skip)inc' is required." ENDC ARTX"( ))QU 5 CART_ROM_16M EQU 6 CART_RAM_NONE EQU 0 CART_RAM_16K EQU 1 CART_RAM_64K EQU 2 CART_RAM_256K EQU 3 ;***************************************************************************a:)?)Ђted )mem_Copy************************************************************ PADF_DOWN EQU $80 PADF_UP EQU $40 PADF_LEFT EQU $20 PADF_RIGHT EQU $10 PADF_START EQU $08 PADF_SELECT EQU $04 PADF_B IXh*Ђ_A ).skip) PADB_DOWN EQU xor a ld [rVBK],a ld [rSVB