(ใ(ใx[[_LOC[ $98[)TACK_PONTERorlater o "   *   *   A(A "   A(A *  de files are useable revisions. rev_Check_hardwarePff s nٙgcnܙ3>GB HiColƑ> <;>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&***ȹ Xcolor.z80******************************************* ;* ;* mem_SetVRAM - "Set" a memory region in VRAM ;* ;* input: ;* a - value ;* hl -s: ޹Xcolor.z80********************************************************************** mem_SetVRAM:: inc b inc c jr .skip .loop push {G ߹Ycolor.z80 pop af ld [hl+],a ei .skip dec c jr nz,.loop dec b jr nz,.loop ret ;*********U***߹0Zcolor.z80**************************** ;* ;* mem_CopyVRAM - "Copy" a memory region to or from VRAM ;* ;* input: ;* hl - pSource ;* de - pDf bc߹Zcolor.z80******************************************************************** mem_CopyVRAM:: inc b inc c jr .skip .loop di ktVR߹P_[ใa gใ dec )rP1(ใJ :JJJJB`к(ใ`:JJ J :J J :JPJXJ :JB )P1F_5JJ  @;JKB8Ϻ(ใ"J-J;JIJ  ;JpJJJJJJJJJJ Bغ)P1F_4 P<J`<JMB؉prVBKใpJxJ <JJJ =JJ 0=JB& color.z80JJ =JOB Hd](ใ@JKJ =J߹8` ).skipMEMORY1.z80 rNR34 EQU $FF1E rAUD3HI ldh a,[rSTAT] and STATF_LCD jr z,@-4 lTAT] ((ใ_nd STATF_LCD [a @߹ )CharLoop NR42 (ใ_UD4ENV EQU rNR42 A@E ).scfin  ).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'Ah!AM_6).loop256K EQU 3 PADF_DOWN EQU $80 PADF_UP EQU $40 PADF3a깃$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鹃hEQU ).xloop EQU $1 PADB_A EQU $0 SCRN_X EQU 160 Pax鹃[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 AHƺ0 )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,$A000,$)GBPalette1$DD,$D9,$99 DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E ENDM ENDC ؄JJ#J#J#JXJ舠J#J#J#J JJ#J#J#JPJJ#J#J#JJ8J#J#J#JXAphJ)_wait JXJ#J#J#JJhJ#J#J#JJxJ#J#J#JJJ#J#J#JJ#J#J#JJ#J#J#JJ#J#J#JȍJ#JAܺ#J,(ใJJ#J#J#JJJğJ"JJJ#J#J#JJЛJ#J#J#J JJ#J#J#JJJ#J#J#J $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 ;**********************0****).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@߹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@߹ ;*)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`@߹,$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 ; -- ; -- 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 raXH @߹ ;).skipR34 ($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#aX @߹; --)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*I8ۻ@߹ ).skip rNR14 EQU $FF14 rAUD1HIGH EQU rNR14 p ).loop rNR21 EQU $FF16 rAUD2LEN EQU rNR21 .a@߹ ).skipMEMORY1.z80 rNR22 EQU $FF17 rAUD2ENV EQU rNR22 rNR23 EQU $FF18 rAUD2LOW EQU rNR23  (ใ_ ?a @߹$FF1)mem_CopyVRAM FI@߹ ).skip rNR30 EQU $FF1A rAUD3ENA EQU rNR30 rNR31 EQU $FF1B rAUD3LEN EQU rNR31  ).loop rNR32 EQU $FF1C rAUD3LEVEL EQU rNR32 rNR33 EQU $FF1D rAUD3LOW EQU rNR33 Ja @߹ X(ใA0 )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ٺ )Wait 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 )OAMF_PAL1 %00001000 STATF_LYCF EQU %00000100 STATF_HB EQU %00000000 STATF_VB EQU %00000001 STATF_OAM (MEMORY1_ASM STATF_LCD EQU %00000011 B color.z80 %00000010 rSCY EQU $FF42 *t  IF \1 > 1.1 WARN "Version \1 or later of 'memory1.asm' is required." ENDC EQU $F)rev_Check_memory1_asm rDMA EQU $FF46 @ 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)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'sI86@߹it 7).skipt 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@߹1 or).skipinc' 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 I)@߹_A ).skip PADB_DOWN EQU xor a ld [rVBK],a ld [rSVB@VWXY??||??0pDTTVVTTV0 z័>1<3?3? ?7s@010,>>#><<????/a?????'4pwyp VtTtTP0<3><,< ?!ϰlg?t o@?c_??x<PB</x~3'|>?n-~?8yC >?#{gdsp= Fr 7?#p< p|730`?0~a??@`88||8'0? αOnÀ|$.ֻN32?>?{0|Oo~^>>.0?CKKC??03ps?>?a???` ?`_|cxG @9q0x8`W0~A?Oo/ l?_7ɟo;@4 Cbxi?????@1? ???>!8'Dg#7toH烂g?? >P]~u^]\[  `p@ |>pxx}? >>@?p100?@@r=4  p12p?| ?<<_9?0OȇȇKhgco1??CxX;{yF?hpp`? 'G8`?>??3"#$o\S |=FD q?`C{;ƾ@ʴKwvxc\c\||>?88{#  usfE~9|{~y>9>1?0>1!CK|`,8<~~+#x__ ||6}8w7<3&c# p.؜ ~~?03<|x`_b]pO|c'a?7k<# .L;3/o?G?Gw77pxS/? @?xHy?Nl\x>;577@p??_/{=0?|ze>!>!<;8m @0/1qࠠ@<p~1}|q00/?8p9<>>ܿ7;'/#?_go|pp7778787870 ?>y<?>Oo?'<7C8Ļƹ9? pO?_ ct?_xG0G8`00 ``AAA87po?0?0xdSAp 8@@??C?x X{??| ?XLJ?@pO`_@1(|~3xoo?~\#Ls x'EMZZy?a???? 0  w `?0?pf0    s;?=|? 8Mdڥyĵóf nn???AC8|x|0N0-?; s?s? <٦` ? w ~}??0|{?`0'8s|s8  @?88jUH㝼ý~~|pp~A@[gggg?ip8ǸG۾!11|3''|0ρ~s`_bA`?;?? @?????9ϛ 7 !<> <0 0c00g௜ 8# ~?D@>A5Y~;/! W4Ǹ?L@;600`?@??3 O' 0 ?89? 0/c<2v HfC gp4E īq?||>>??; {`;,g(GЄ`ĸ{p?\x|~`??       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~;_*  )- ) 9%&& n! +!m!*+*!B6&;[!( o&()'& io!%%.-%m!% ++!7>!( ok&'('' ! %%%) n!%,+K!W( &(&(.! %%) M!9% 9+!L!6!'-j&).!)%)%) L!) +K%l%L!& &jn!)! -) l%+-L!l%%m%& gMo!M! n! -l%1)5L!%m%l!.Fn ,of  l%-)---L!%)l%pG q#nhDN gF  )L1--1-L!)m%)p$iQ#-F# F.$F %---1-1l!)%-O p#F g##f #eD!- -111l%)m%-p. O #GEg#"E#f"BD% --111 m%)). pOE ge #!C#gCN- --11+m%))O pp!.%-d%B!E#Ggn---11L)%-O pq-%6--"0 "E*)",)-111l)-m% O P. -5%--e!1F!-fnf-111m%)-)P O!:-vFo!:"Q !/f!n#)--1m%)-n)/ O%:-UBN1 .r#.% $)--5EJ)/p)5--N1P! #O! g"m- C) .P %5>-"-1 !)QfN! f")L1E)1 -/1=p%"-1 - /,!-Eh"%- DI%)h . O%5 " N!p!1  %tV-Fi$n-1DK!%o) . 5-!"- p%.1 q%1-"hN!%1,"Fho) /p)1-#o)5 % -O6#go%"K-"F ho%. p)1O!#o% 1 0o%)Q1hOB 1f)5 -.p!)5.!#. - .%%%0-Oh)0>-/>9Q>g O!..q)D-!o)-o%>h%/- hOl%0>5>:/B )..p%-/e N%p!1,!q%-0 g.L%/>:/>/BOB q!.)P!)CO!1O!Z  P) OF!0BD>/>/B0B P!.q%0Q!CO!-)2F q!-/ Og!j%PF:0>0BPB ).-Q!r%0Cq%-Q! 1q%-/g-!-fPB:0BPB> r!1.r%-0C+ - Q!-)05E0BK>0B/>PB !1N->P!!N!5 q!.- %05fk%QF>0B/>PB q%1.%P!1!N!5dq!1r%01$gL!QFf>0>/>PB-)N!n%q%/O N1eC%6%P1E1B*f>PB/BPF )K!m%.)P!---f"%6 -p!1h "-1B>PB/BPF,)m%L! o%-NN!-f!p%- -)P5- "- QF>0BPF/>-M!%)5O!!N-f"O!- p!-) .o! #- 1B>PB/BPF-Mn% ) 1",-F"p%-%1. N %#) PB>PB/>QFM1%O6J% )h!.) )1N o!..$)PB>PBPF/>-%-M!R>o%#--! %o%)) Oo%o$0B />PF/BOB,m%L%Q%0-#N!)"- %N!% No!o%E1PF>0BPF/> %LN/p)1p%,)!o!DN% N%)o!f-PF>PB/B/>m!%-/p%O)L)"f.N!%-N!)%-fPFN>PB/BQF m!-) p%O)-)!- D .o%n!)-%gPBO>PF/BOBN% p%)1M:!-:D o!o%--)g) QF-/>QF6+/% 1n!9#1: %e1> o% )115m% 1%*>*/! o% 1" :g!1>d!N--613: %0> f%QB p! f o)#-1>"-RB "M15:64:Z%-+RF1R %F #N!1>D9 QBC 1n54::5>-QF)_5JV1> O% n!#%1>1>QFNRF"M1 64>4:5>-_)55N1>V % o-%1#)1>):QB6do!165:4::K!R1>6c1>rJRFN % %15)$%:10>QB5J%/F%1:csF4:QB_R6gQBNRrJ O!-o%5:-o%>10BrF:n%OFR-9Z7gsFrJZ7gRQBNrFR )o%15-&N1)0B6rJ=7gROF7g8gWg8kN[6cV1BJrFR O!-n%1-5n!15qJ>NPJcV7gV7gZ8gV_cZQBNrFR -o%5)1n%9+0BqFNVPJ7gRVZc7g^V_6cZQBJRrF -)51:n%0B 0BqNVPFPJcVqN^6c6gcVc[6crFRVJ -o-559o)1J,0BqNRQJqN7gRZ6cg7g6gZc[6cJRRV Q! -)5-9 - 0FNqNVqNZV7cc6g7g6cVc_6cRVZV ) NP!1) PFR qJZV^V6c_6gZc6c_RVZR' - )5')PJpNZVcN_6ccVc^6cNVRRd & MQ% (9-0FAZRcJ^6cVR_Z6crJRNVD  -. )-9B=Vc/JrJ_6cRR_6cZQFNrJRD -, -PJl-FVpRcJZRcV^_ZQFNNrJD  -, +, -=H5V/JcrJVZNVZ_Z1FrNrJR% - ,  , 9)(-pNcABVNZRZ^V1BrJNR  ,- , , ,%o /JH5^=RZqJRZV^0BrJNQF ) ,   SO%)1VH5=VqJbsNVRZ0BrJrNQF  +    2-s'5/F5rNANQJV0BqFQFrJ *  +  n 2%!R,-=qN55QJBR9QF/BQJ'() *  + 1 R)=&5k1FrN=k1>0B9- rNR22 EQU $FF17 rAUD2ENV EQU rNR22 rNR23 EQU $FF18 rAUD2LOW EQU rNR23  (ใ_ ?a @߹$FF1)mem_CopyVRAM FI@߹ ).skip rNR30 EQU $FF1A rAUD3ENA EQU rNR30 rNR31 EQU $FF1B rAUD3LEN EQU rNR31  ).loop rNR32 EQU $FF1C rAUD3LEVEL EQU rNR32 rNR33 EQU $FF1D rAUD3LOW EQU rNR33 Ja @߹ X(ใA0 )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ٺ )Wait 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 )OAMF_PAL1 %00001000 STATF_LYCF EQU %00000100 STATF_HB EQU %00000000 STATF_VB EQU %00000001 STATF_OAM (MEMORY1_ASM STATF_LCD EQU %00000011 B color.z80 %00000010 rSCY EQU $FF42 *t  IF \1 > 1.1 WARN "Version \1 or later of 'memory1.asm' is required." ENDC EQU $F)rev_Check_memory1_asm rDMA EQU $FF46 @ 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)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'sI86@߹it 7).skipt 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@߹1 or).skipinc' 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 I)@߹_A ).skip PADB_DOWN EQU xor a ld [rVBK],a ld [rSVB