Щ`a‚(`a‚,$0400 call mem_Copy УС УЋ йDate 971026c0 ldh [rBGP],a xor a ld [VBlankDone],a ld У)ЮэffЬ sƒ ˆ‰мЬnцннй™ЛЛgcnьЬнм™ŸЛЙ3>SPACE INV DEMO$qъ " ќ љЩ * њ їЩ  ѓ№Aц њ"ћ є ёЩ  ѓ№Aц њ*ћ ђ яЩє<р@!•€Э\!щ˜Э\>РрGЏъ1Съ0С>@рA>рџ>•р@ћ!РЏ" ћ!РP>ь" њ zъ0СЭ Џъ0СЭ  њ ъz/рE&Р~рCсёйѕХх!Р<њ0СO~" њ>ъ1СсСёй NZ‚(р`‚8ф`‚™ Z`‚(р`‚Xф`‚š NC‚(р`‚xф`‚• [HL]р`‚˜ф`‚— [HL+]`‚Иф`‚– [HL-]`‚иф`‚— [HLI]`‚јф`‚– [HLD]`‚х`‚” HL‚(р`‚8х`‚ AF‚(р`‚Xх`‚ [BC]р`‚xх`‚Ž BC‚(р`‚˜х`‚‘ [DE]р`‚Их`‚ DE‚(р`‚их`‚“ [SP]р`‚јх`‚’ SP‚(р`‚ц`‚… A`‚(р`‚8ц`‚† B`‚(р`‚Xц`‚ˆ [$FF00+C]|ц`‚ˆ [C](р`‚œц`‚‡ C`‚(р`‚Мц`‚‰ D`‚(р`‚мц`‚Š E`‚(р`‚ќц`‚‹ H`‚(р`‚ч`‚Œ L`‚(р`‚)@`‚(р`‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ŒA\La‚)__TIME__€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@$2a‚xщ`‚06:29:56)__DATE__€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Bа[a‚@АVb‚Аъ`‚26 October 1997)_RS$ю`‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ыB|Уa‚€€PDєЌb‚€€)__FILE__€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€DЌгa‚(@Аb‚э`‚ si.asm‚№pa‚…a‚*Бsi.asm‚и_0‚$ю`‚Ь0э`‚$ю`‚шИ(р`‚$ю`‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"єэ`‚`!a‚ю`‚ ю`‚И"a‚,я`‚ю`‚06:29:56я`‚Ž0ё IF \1 > 1.5 WARN "Version \1 or later of 'hardware.inc' is required." ENDC D$a‚L6a‚6a‚Pя`‚26 October 1997)HARDWARE_INC€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€-- rNR31 EQU $1B rAUD3LEN EQU rNR31 ; -- ; -- AUD3LEVEL/NR32 ($FF1C) ; -- Select output level ; -- ; -- Bit 6-5 - Select output level ; -- 00: 0/1 (mute) ; -- 01: 1/1 ; -- 10: 1/2 ; -- 11: 1/4 ; -- rNR32 EQU $1C rAUD3LEVEL EQU rNR32 ; -- ; -- AUD3LOW/NR33 ($FF1D) ; -- Frequency lo (W) ; -- ; -- see AUD1LOW for info ; -- rNR33 EQU $1D rAUD3LOW EQU rNR33 ; -- ; -- AUD3HIGH/NR34 ($FF1E) ; -- Frequency hi (W) ; -- ; -- see AUD1HIGH for info ; -- rNR34 EQU $1E rAUD3HIGH EQU rNR34 ; -- ; -- AUD4LEN/NR41 ($FF20) ; -- Sound length (R/W) ; -- ; -- Bit 5-0 - Sound length data (# 0-63) ; -- rNR41 EQU $20 rAUD4LEN EQU rNR41 ; -- ; -- AUD4ENV/NR42 ($FF21) ; -- Envelope (R/W) ; -- ; -- see AUD1ENV for info ; -- rNR42 EQU $21 rAUD4ENV EQU rNR42 ; -- ; -- AUD4POLY/NR42 ($FF22) ; -- Polynomial counter (R/W) ; -- ; -- Bit 7-4 - Selection of the shift clock frequency of the (scf) ; -- 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 ratio of frequencies (drf) ; -- 000: 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 $22 rAUD4POLY EQU rNR42_2 ; -- ; -- AUD4GO/NR43 ($FF23) ; -- (has wrong name and value (ff30) in Dr.Pan's doc!) ; -- ; -- Bit 7 - Inital ; -- Bit 6 - Counter/consecutive selection ; -- rNR43 EQU $23 rAUD4GO EQU rNR43 ; silly name! ;*************************************************************************** ;* ;* Cart related ;* ;*************************************************************************** CART_ROM EQU 0 CART_ROM_MBC1 EQU 1 CART_ROM_MBC1_RAM EQU 2 CART_ROM_MBC1_RAM_BAT EQU 3 CART_ROM_MBC2 EQU 5 CART_ROM_MBC2_BAT EQU 6 CART_ROM_RAM 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_RAM_16K EQU 1 CART_RAM_64K EQU 1 CART_RAM_256K EQU 3 ;*************************************************************************** ;* ;* Keypad related ;* ;*************************************************************************** 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 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 $3 PADB_SELECT EQU $2 PADB_B EQU $1 PADB_A EQU $0 ;*************************************************************************** ;* ;* Screen related ;* ;*************************************************************************** SCRN_X EQU 160 ; Width of screen in pixels SCRN_Y EQU 144 ; Height of screen in pixels SCRN_X_B )LCDCF_BG9C00rAUD4POLYРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРB8b‚")LCDCF_OBJ8ьpДa‚(`a‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€пппџџџРРРРРРРРРРРР€€€РРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРBИђa‚#и(Лa‚(`a‚ФРлa‚(`a‚РРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРџџџџ1/1 ; -- ldh a,[rSTAT] and STATF_BUSY jr nz,@-4 @(`a‚$пa‚ WARN "Version \1 or later of 'hardware.inc' is required." ENDC HIGи(`a‚$пa‚E) ; -- Frequency hi (W) ; -- ; -- see AUD1HIGH for info ; -- rNR34 EQU $1E rAUD3HIGH EQU rNR34 ; -- ; -- AUD4LEN/NR41 ($FF20) ; -- Sound length (R/W) ; -- ; -- Bit 5-0 - Sound length data (# 0-63) ; -- rNR41 EQU $20 rAUD4LEN EQU rNR41 ; -- ; -- AUD4ENV/NR42 ($FF21) ; -- Envelope (R/W) ; -- ; -- see AUD1ENV for info ; -- rNR42 EQU $21 rAUD4ENV EQU rNR42 ; -- ; -- AUD4POLY/NR42 ($FF22) ; -- Polynomial counter (R/W) ; -- ; -- Bit 7-4 - Selection of the shift clock frequency of the (scf) ; -- 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 ratio of frequencies (drf) ; -- 000: 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 $22 rAUD4POLY EQU rNR42_2 ; -- ; -- AUD4GO/NR43 ($FF23) ; -- (has wrong name and value (ff30) in Dr.Pan's doc!) ; -- ; -- Bit 7 - Inital ; -- Bit 6 - Counter/consecutive selection ; -- rNR43 EQU $23 rAUD4GO EQU rNR43 ; silly name! ;*************************************************************************** ;* ;* Cart related ;* ;*************************************************************************** CART_ROM EQU 0 CART_ROM_MBC1 EQU 1 CART_ROM_MBC1_RAM EQU 2 CART_ROM_MBC1_RAM_BAT EQU 3 CART_ROM_MBC2 EQU 5 CART_ROM_MBC2_BAT EQU 6 CART_ROM_RAM 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_RAM_16K EQU 1 CART_RAM_64K EQU 1 CART_RAM_256K EQU 3 ;*************************************************************************** ;* ;* Keypad related ;* ;*************************************************************************** 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 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 $3 PADB_SELECT EQU $2 PADB_B EQU $1 PADB_A EQU $0 ;*************************************************************************** ;* ;* Screen related ;* ;*************************************************************************** SCRN_X EQU 160 ; Width of screen in pixels SCRN_Y EQU 144 ; Height of screen in pixels SCRN_X_B Ф(`a‚$пa‚РРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРРBифa‚РРРPrAUD3ENAРРРРРРРР EQU 20 ; Width of screen in bytes SCRN_Y_B EQU 18 ; Height of 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 NINTENDO_LOGO: MACRO ;* ;* Nintendo scrolling logo ;* (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,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E ENDM ENDC ;HARDWARE_INC rNR30 ; -- ; -- AUD3LEN/NR31 ($FF1B) ; -- Sound length (R/W) ; -- ; -- Bit 7-0 - Sound length ; €ўџўџџўџўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџƒƒƒџџўџўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€џў€џўўўўџџџўџўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€џў€џўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў€џў€џўўўўўџўџўўўўўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ|(`a‚(Лa‚est ;* bc - bytecount ;* ;*************************************************************************** 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 ;MEMORY1_ASM rNR12 EQU $12 rAUD1ENV EQU rNR12 rNR13 EQU $13 rAUD1LOW EQU rNR13 rNR14 EQU $14 rAUD1HIGH EQU rNR14 rNR21 EQU $16 rAUD2LEN EQU rNR21 )MEMORY1_ASM17 rAUD2ENV EQU rNR22 rNR23 EQU $18 rAUD2LOW EQU rNR23 rNR24 EQU $19 rAUD2HIGH EQU rNR24 D  IF \1 > 1.0 WARN "Version \1 or later of 'memory1.asm' is required." ENDC Ќ!|Єa‚$пa‚c:\A\GB\include\memory1.asm rNR31 EQU $1B rAUD3LEN EQU rNR31 šЛ Ш (`a‚$пa‚ ; Width of screen in bytes SCRN_Y_B EQU 18 ; Height of 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 NINTENDO_LOGO: MACRO ;* ;* Nintendo scrolling logo ;* (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,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E ENDM ENDC ;HARDWARE_INC rNR30 ; -- ; -- AUD3LEN/NR31 ($FF1B) ; -- Sound length (R/W) ; -- ; -- Bit 7-0 - Sound length ; -- rNR31 EQU $1B rAUD3LEN EQU rNR31 ; -- ; -- AUD3LEVEL/NR32 ($FF1C) ; -- Select output level ; -- ; -- Bit 6-5 - Select output level ; -- 00: 0/1 (mute) ; -- 01: $0,$0,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #12 db $0,$0,$0,$0,$0,$0,$0,БR$0, a‚œ a‚ Лa‚Бsi.asm‚$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #13 db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 db $0,$0,$0ВU0,$LЁa‚XЁa‚ Лa‚Бsi.asm‚0,$0,$0,$0,$0,$0,$0,$0 ; Row #14 db $0,$0,$0,$a,$b,$c,$0,$a,$b,$c,$0,$a,$b,$c,$0,$a db $b,$c,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0Цj,$0 Ђa‚Ђa‚€1Бsi.asm‚,$0,$1a,$1b,$1c,$0,$1a,$1b,$1c,$0,$1a,$1b,$1c,$0,$1a db $1b,$1c,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 еu ШЂa‚иЂa‚€$Бsi.asm‚0,$0,$0,$0 db $0,$0,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #17 db $0,$0,$0,$0,$0,$d,$e,$0,$0,$0зz,$0ˆЃa‚”Ѓa‚ Лa‚Бsi.asm‚,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #18 ; db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20 ; dс†,$2DЄa‚ Лa‚ Аca‚`Єa‚ Pha‚pЄa‚ ”La‚€†a‚(Лa‚џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў€џў€џўўўўўџўџўўўўўџўџў‚‚‚џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў€џџџџџџўџџџџџџў€џџџџџџџџџџџџџџџџџџџџџџ( 000002      ѓЏррџр&№Dў8њ>р@!E€Э !™˜Э >РрGЏъ1ъ0>@рA>рџ>•р@ћ!Џ" ћ!P>ь" њ zъ0ЭPЏъ0ЭP њ ъz/рE&~рCсёйѕХх!<њ0O~" њ>ъ1сСёйsi.asm]ь €si.asm`ѕsi.asmbј €si.asmesi.asmk si.asml si.asmzsi.asm„& €si.asm”6si.asm–9 si.asm™=si.asmB si.asmБRsi.asmВUsi.asmЦj €si.asmеu €si.asmзzsi.asmс†пџпџџџџ№џР?џџ€€џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџўџџ€€ hl,TileData+1 ld de,$8000 ld bc,$1000 call mem_Copy ; Copy tile set to memory ld hl,MapData+4 ld de,$9800 ld bc,$0400 call mem_Copy ; Copy tile map to memory ld a,$c0 ldh [rBGP],a ; Set BG default colors xor a ;Initialize interupt vars ld [VBlankDone],a ld [XOffset],a ld a,$40 ; Set LCDC Intr to LYC ldh [rSTAT],a ld a,3 ldh [rIE],a ;enable LCD interrupt ld a,%10010101 ; LCD Controller = On ldh [rLCDC],a ei ; Clear whole X offset table to 00 ld hl,XOffsetTable ld b,144 clroff1: xor a ld [hl+],a dec b jr nz,clroff1 ; Position "invaders" to the right side of screen ld hl,XOffsetTable + 8 ld b,80 clroff2: ld a,$ec ld [hl+],a dec b jr nz,clroff2 ;* Main Loop - scroll Invaders 32 pixels to the left * ;* then 32 pixels to the right & start over. * ld d,1 loop1: ld c,32 loop2: ld a,d ld [XOffset],a call VBlankWait xor a ld [XOffset],a ld b,5 loop3: call VBlankWait dec b jr nz,lo)SPR_DMAsi.asm€€€€€€€€€€€€€€€€€€€€€€€€Bф(a‚РРРШHŽa‚Ш a‚РРРРРРРРР€€€џџџпппРРРРРРРРРРРРРРРРРРРРРРРРРРРРРР€€€€€€€€€џџџппп €ЛРРРшE(`a‚$пa‚РРРРРРРРР€€€€€€€џBЙa‚џџџБsi.asm‚si.asm@@@џџџ€€€€Bм™a‚€€ STATF_VB€€€€€€€€€€€]ь€ Sa‚ф—a‚Бsi.asm‚€€€€€€B€ЛРРРпппџџџш (`a‚(Лa‚,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db `ѕ$0,\6a‚”˜a‚Бsi.asm‚; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; bј; d РSa‚D™a‚Бsi.asm‚0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #28 ; db $0,$0,$0,$0,$e0,$аSa‚є™a‚Бsi.asm‚; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #29 ; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$k ; dа_a‚Єša‚Бsi.asm‚0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #30 ; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$l 0,$ь_a‚T›a‚Бsi.asm‚; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #31 ; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$z; dœa‚ œa‚8a‚Lža‚ Лa‚Бsi.asm‚0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #5 db $0,$0,$8,$0,$8,$0,$8,$0,$8,$0,$8,$0,$8,$0,$8,$0 db $8,$0,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,„& ; аœa‚рœa‚€ Бsi.asm‚b $0,$0,$9,$0,$9,$0,$9,$0,$9,$0,$9,$0,$9,$0,$9,$0 db $9,$0,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row”6$0,a‚œa‚ Лa‚Бsi.asm‚$0,$9,$0 db $9,$0,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #8 db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0–9,$0\ža‚hža‚ 4+a‚PЄa‚  Лa‚Бsi.asm‚$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,$0 ; Row #9 db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 db $0,$0,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0™=,$0Ÿa‚$Ÿa‚ Лa‚Бsi.asm‚w #10 db $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 db $0,$0,$0,$0,$20,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 ; db $0,$0,$0,$0,$0,$0,$0,B #1дŸa‚рŸa‚  Лa‚Бsi.asm‚,$0,$0,$0,$0,$0,$0 db b,5 loop3: call VBlankWait dec b jr nz,loop3 dec c jr nz,loop2 ld a,d cpl inc a ld d,a jr loop1 VBlankWait: xor a ld [VBlankDone],a lpp1: ld a,[VBlankDone] or a jr z,lpp1 ret LCDIntr: push af push hl ldh a,[$45] ld l,a inc a cp 144 jr nz,l2947 ld a,1 l2947: ldh [$45],a ld h,XOffsetTable / 256 ld a,[hl] ldh [$43],a pop hl pop af reti VBlankIntr: push af push bc push hl ld hl,XOffsetTable + $17 ld b,60 ld a,[XOffset] ld c,a Vloop: ld a,[hl] add a,c ld [hl+],a dec b jr nz,Vloop ld a,1 ld [VBlankDone],a pop hl pop bc pop af reti €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€пппџџџРРРРРРпппџџџРРР€€€€€€џџџџџџџџџџџџџџџџџџџџџџџџ(`a‚|Єa‚ dec c jr nz,loop2 ; d = -d ld a,d cpl inc a ld d,a jr loop1 ; Wait for VBlank Interrupt to occur VBlankWait: xor a ld [VBlankDone],a lpp1: ld a,[VBlankDone] or a jr z,lpp1 ret ; LCD Interrupt Routine LCDIntr: push af push hl ldh a,[$45] ld l,a inc a cp 144 ; $90 jr nz,l2947 ld a,1 l2947: ldh [$45],a ; Set scroll X register ld h,XOffsetTable / 256 ld a,[hl] ldh [$43],a ; ScrollX = [$c000 + [$45]] pop hl pop af reti ; VBlank Interrupt Routine VBlankIntr: push af push bc push hl ld hl,XOffsetTable + $17 ld b,60 ld a,[XOffset] ld c,a Vloop: ld a,[hl] add a,c ld [hl+],a dec b jr nz,Vloop ld a,1 ld [VBlankDone],a pop hl pop bc pop af reti 8k db 1,1 ; Maker ID db 0 ; Version =0 db $e2 ; Complement check (important) dw $c40e ; Checksum (not important) INCLUDE "memory1.asm" INCLUDE "export.asm" begin: di ; The stack initializes to $FFFE xor a ;a = 0 ldh [rIF],a ;clear pending interrupts ldh [rIE],a ;disable interrupts ldh [$26],a ;kill all sounds ; Must be in VBL before turning the screen off. WaitVBL: ldh a,[rLY] ; $ff44=LCDC Y-Pos cp $90 ; $90 and bigger = in VBL jr c,WaitVBL ; Loop until it is $90 or > ld a,%00010101 ; LCD Controller = Off [No picture on screen] ; WindowBank = $9800 [Not used] ; Window = OFF ; BG Chr = $8000 ; BG Bank= $9800 ; OBJ = 8x16 ; OBJ = Off ; BG = On ldh [rLCDC],a ld €€€€€€€€€€€€