;Note sur le fix qui recouvrerait les sprites: ;Le BIOS initialise tout le fix au tile n°0, si ce tile est rempli avec une couleur autre que la couleur 0, ;Il va recouvrir tout l'écran, et les sprites seront invisibles. ;Donc bien vérifier que le tile 0 dans le fixrom est rempli avec la couleur 0, ou remapper tout le fix avec un tile vide. SCB1 equ $0000 FIXMAP equ $7000 SCB2 equ $8000 SCB3 equ $8200 SCB4 equ $8400 RAMSTART equ $100000 PALETTES equ $400000 REG_P1CNT equ $300000 REG_DIPSW equ $300001 REG_SOUND equ $320000 REG_STATUS_A equ $320001 REG_P2CNT equ $340000 REG_STATUS_B equ $380000 REG_DISPENABL equ $3A0001 REG_DISPDSABL equ $3A0011 REG_SWPROM equ $3A0013 REG_BRDFIX equ $3A000A REG_CRTFIX equ $3A001A REG_SRAMLOCK equ $3A000C REG_SRAMUNLOCK equ $3A001C REG_PALBANK1 equ $3A000E REG_PALBANK0 equ $3A001E VRAM_ADDR equ $3C0000 VRAM_RW equ $3C0002 VRAM_MOD equ $3C0004 REG_HBLANKCNT equ $3C0006 REG_HBLANKPOS equ $3C0008 REG_IRQACK equ $3C000C VBLC equ RAMSTART FRAMECM equ RAMSTART+2 ANIFLAGS equ RAMSTART+4 INDEX equ RAMSTART+6 org $0 dc.l $0010F300 ;Valeur de SP dc.l $00C00402 ;Valeur de PC dc.l $00C00408,$00C0040E,$00C0040E,$0000034C dc.l $0000034E,$0000034E,$00C0041A,$00C00420 dc.l $0000034E,$0000034E,$00C00426,$00C00426 dc.l $00C00426,$00C0042C,$00C00426,$00C00426 dc.l $00C00426,$00C00426,$00C00426,$00C00426 dc.l $00C00426,$00C00426,$00C00432,VBlank dc.l Irq2,$00C00426,$00C00426,$00C00426 dc.l $00C00426,$00C00426,$0000056E,$0000056E dc.l $0000056E,$0000056E,$0000056E,$0000056E dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF org $0100 dc.b "NEO-GEO",$00 dc.w $0052 ;Numéro de série (Super Sidekicks) dc.l $00080000 ;Dépend du jeu dc.l $00100000 ;Pointer to debugging switch dc.w $0000 org $0114 dc.w $001B ;Premier sprite du logo NeoGeo ($D8000, adresse/128, LSB en premier) dc.l $00000200 ;Pointeur vers la config Japonaise dc.l $00000200 ;Pointeur vers la config Américaine dc.l $00000200 ;Pointeur vers la config Euro jmp Start jmp Start2 jmp Start3 jmp Start4 dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF dc.l $00000186 ; Pointeur vers les codes de sécurité org $186 dc.l $76004A6D,$0A146600,$003C206D,$0A043E2D dc.l $0A0813C0,$00300001,$32100C01,$00FF671A dc.l $30280002,$B02D0ACE,$66103028,$0004B02D dc.l $0ACF6606,$B22D0AD0,$67085088,$51CFFFD4 dc.l $36074E75,$206D0A04,$3E2D0A08,$3210E049 dc.l $0C0100FF,$671A3010,$B02D0ACE,$66123028 dc.l $0002E048,$B02D0ACF,$6606B22D,$0AD06708 dc.l $588851CF,$FFD83607 dc.w $4e75 org $200 dc.b "FURRTEK789ABCDEF" dc.l $FFFFFFFF dc.w $0364 dc.b $14,$13,$24,$01 VBlank: btst #7,$10FD80 bne DisplayedLogo move.l #$C00438, a0 jmp (a0) DisplayedLogo: movem.l d0-d7/a0-a6,-(a7) move.w #$0004,REG_IRQACK ;Acknowledge, puis cassos. move.b d0,REG_DIPSW cmp #1,ANIFLAGS bne r move.b VBLC,d5 addq #1,d5 cmp #2,d5 bne r move.b #0,d5 jsr palanim r: move.b d5,VBLC movem.l (a7)+,d0-d7/a0-a6 rte Irq2: rte Start: move.b #$01,REG_SOUND ; Musique :D jsr waitz80ready move.b #$03,REG_SOUND ; Sound on jsr wait jsr wait move.b #$07,REG_SOUND jsr wait jsr wait move.b #$25,REG_SOUND ; Play $0725 move.w #0,ANIFLAGS move.w #$2000, sr ; Status Register, interruption activées. jsr SetupPalette lea $400000+(16*2*256)-2,a0 move.w #$7FFF,(a0) ;7FFF Backdrop move.w #40*32, d0 move.w #FIXMAP, VRAM_ADDR move.w #$0001, VRAM_MOD FillMap: move.w #$0320, VRAM_RW nop nop dbra d0, FillMap lea Message, a2 move.w #22-1, d1 ; 18 lignes move.w #37-1, d0 ; 37 colonnes move.w #$0000, d6 move.w #(FIXMAP+(32*1)+4), d3 move.w d3, VRAM_ADDR ;FIXMAP+(32*X)+Y move.w #$0020, VRAM_MOD TextMap: move.w #$1300, d7 ; Palette 0, $320: tile transparent move.b (a2)+, d6 add.w d6, d7 move.w d7, VRAM_RW dbra d0, TextMap move.w #36, d0 addq #1, d3 move.w d3, VRAM_ADDR dbra d1, TextMap move.w #$0400, $3C0006 ; Vitesse autoanim move.w #$0001, VRAM_MOD move.w #SCB1+$40*31, VRAM_ADDR move.w #$0004, VRAM_RW ; 4ème tile move.w #$0100, VRAM_RW ; Palette 1 move.w #SCB2+31, VRAM_ADDR move.w #$0FFF, VRAM_RW ; Zoom X, Zoom Y move.w #SCB3+31, VRAM_ADDR move.w #((496-182)<<7)+1, VRAM_RW ; Y, hauteur move.w #SCB4+31, VRAM_ADDR move.w #$6200, VRAM_RW ; X move.l #SCB1+$40*1, a0 lea LogoMap, a1 move.l #15-1,d0 move.w #4-1,d2 move.w #$0,d3 jsr LoadSprites move.l #SCB1+$40*16, a0 lea LogoMap, a1 move.l #15-1,d0 move.w #4-1,d2 move.w #$0200,d3 jsr LoadSprites move.w #1,VRAM_MOD move.w #SCB2+1, VRAM_ADDR move.w #15-1,d0 move.w #$0FFF,d1 move.w #0,d2 jsr AttrSprites move.w #SCB3+1, VRAM_ADDR move.w #15-1,d0 move.w #(324<<7)+4,d1 ;entre 496 et 324 move.w #0,d2 jsr AttrSprites move.w #SCB4+1, VRAM_ADDR move.w #15-1,d0 move.w #48<<7,d1 move.w #$0800,d2 jsr AttrSprites move.w #SCB2+16, VRAM_ADDR move.w #15-1,d0 move.w #$0FFF,d1 move.w #0,d2 jsr AttrSprites move.w #SCB3+16, VRAM_ADDR move.w #15-1,d0 move.w #((496-122)<<7)+4,d1 move.w #0,d2 jsr AttrSprites move.w #SCB4+16, VRAM_ADDR move.w #15-1,d0 move.w #48<<7,d1 move.w #$0800,d2 jsr AttrSprites move.w #1,ANIFLAGS Loop: bra Loop wait: move.w #$1FFF,d0 waitlp: nop dbra d0,waitlp rts waitz80ready: move.b REG_SOUND,d0 cmp.b #$01,d0 bne waitz80ready rts Start2: rts Start3: rts Start4: rts LoadSprites: move.w d0,d1 move.w a0,VRAM_ADDR lineloop: move.w #$0001,VRAM_MOD move.w (a1)+, VRAM_RW ; 4ème tile move.w #$003F,VRAM_MOD move.w d3, VRAM_RW ; Palette dbra d0,lineloop add.w #2,a0 move.w a0,VRAM_ADDR move.w d1,d0 dbra d2,lineloop rts AttrSprites: move.w d1, VRAM_RW ; X add.w d2,d1 dbra d0,AttrSprites rts SetupPalette: lea PALETTES, a0 lea Palettesi, a1 move.w #PalettesSize, d7 asr.w #5, d7 ; divise par 32 (2x16 octets par palette) move.w #3, d7 DoPalette: move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ move.w (a1)+, (a0)+ dbra d7, DoPalette rts palanim: move.w #SCB1+$40*31, VRAM_ADDR move.w FRAMECM, d0 addq #1,d0 cmp.w #32+3,d0 bne stepanim move.w #03,d0 stepanim: move.w d0, FRAMECM move.w FRAMECM, VRAM_RW ; 4ème tile move.w #1, VRAM_MOD move.w #SCB2+16, VRAM_ADDR lea BounceTraj,a0 add.w INDEX,a0 move.w (a0),d1 andi.w #$00FF,d1 ori.w #$0F00,d1 move.w #15-1,d0 move.w #0,d2 jsr AttrSprites move.w #1, VRAM_MOD move.w #SCB3+1, VRAM_ADDR lea SinusY,a0 add.w INDEX,a0 move.w (a0),d1 addi.w #8,d1 asl.w #7,d1 ori.w #$0004,d1 move.w #15-1,d0 move.w #0,d2 jsr AttrSprites move.w #1, VRAM_MOD move.w #SCB4+1, VRAM_ADDR lea SinusX,a0 add.w INDEX,a0 move.w (a0),d1 addi.w #8,d1 asl.w #7,d1 move.w #15-1,d0 move.w #16<<7,d2 jsr AttrSprites ;move.w #SCB3+1, VRAM_ADDR addq.w #2,INDEX ; Toutes les valeurs sont en 16bits cmp #64*2,INDEX bne noz move.w #0,INDEX noz: rts Message: dc.b " FFFF U U RRR RRR TTTTT EEEE K K" dc.b " F U U R R R R T E K K " dc.b " FFF U U R R R R T EEE K K " dc.b " F U U RRR RRR T E KKK " dc.b " F U U R R R R T E K K " dc.b " F UU R R R R T EEEE K K" dc.b " " dc.b " -= NEOGEO ROCKS! =- " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " " dc.b " FURRTEK.ORG " Palettesi: ;Palette0 dc.w $8000 ; Blanking (toujours noir) dc.w $7BBB ; Noir dc.w $7CCC ; Gris foncé dc.w $7DDD ; Gris moyen dc.w $7EEE ; Gris clair dc.w $7FFF ; Blanc dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF ;Palette1 dc.w $0000 ; Transparent dc.w $0005 ; 1 dc.w $000A ; 2 dc.w $050F ; 3 dc.w $0A0F ; 4 dc.w $0F0A ; 5 dc.w $0F55 ; 6 dc.w $0FA0 ; 7 dc.w $0F00 dc.w $0F00 dc.w $0F00 dc.w $0F00 dc.w $0F00 dc.w $0F00 dc.w $0F00 dc.w $7DDD ; Ombre du texte ;Palette2 dc.w $8000 ; Blanking (toujours noir) dc.w $755A ; Noir dc.w $766C ; Gris foncé dc.w $777E ; Gris moyen dc.w $788F ; Gris clair dc.w $7FFF ; Blanc dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF dc.w $7FFF EndPalettes: PalettesSize size EndPalettes-Palettes BounceTraj: ;64 dc.w 249,220,196,176,158,143,129,118,107,98,89,82,75,69,63,57,53,48,44,40,36,33,29,26,24,21,18,16,14,12,9,8,8,8,9,12,14,16,18,21,24,26,29,33,36,40,44,48,53,57,63,69,75,82,89,98,107,118,129,143,158,176,196,220 SinusY: ;64 dc.w 410,418,426,434,442,450,457,464,470,476,481,485,489,492,494,495,495,495,494,492,489,485,481,476,470,464,457,450,443,435,426,418,410,401,393,385,377,369,362,355,349,343,338,334,330,327,325,324,324,324,325,327,330,334,338,343,349,355,362,369,376,384,392,401 SinusX: ;64 dc.w 40,46,52,57,62,66,69,71,71,71,69,66,62,57,52,46,40,33,27,22,17,13,10,8,8,8,10,13,17,22,27,33,39,46,52,57,62,66,69,71,71,71,69,66,62,57,52,46,40,33,27,22,17,13,10,8,8,8,10,13,17,22,27,33 LogoMap: ;15x4 dc.w $1B00,$1B01,$1B02,$1B03,$1B04,$1B05,$1B06,$1B07,$1B08,$1B09,$1B0A,$1B0B,$1B0C,$1B0D,$1B07 dc.w $1B0E,$1B0F,$1B10,$1B11,$1B12,$1B13,$1B14,$1B15,$1B16,$1B17,$1B18,$1B19,$1B1A,$1B1B,$1B1C dc.w $1B1D,$1B1E,$1B1F,$1B20,$1B21,$1B22,$1B23,$1B24,$1B25,$1B26,$1B27,$1B28,$1B29,$1B2A,$1B2B dc.w $1B2C,$1B2D,$1B2E,$1B2F,$1B30,$1B31,$1B32,$1B33,$1B34,$1B35,$1B36,$1B37,$1B38,$1B39,$1B07