Mercurial > repos > ghero
diff mainboot.s68 @ 3:97ec271a513f
Bunch of changes
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 02 Sep 2013 21:22:47 -0700 |
parents | bbfa7bf69620 |
children |
line wrap: on
line diff
--- a/mainboot.s68 Tue May 01 20:43:25 2012 -0700 +++ b/mainboot.s68 Mon Sep 02 21:22:47 2013 -0700 @@ -1,4 +1,390 @@ org $FF0000 incbin security.bin Main - bra Main +;background and sprite test + +ButtonState equ $FFFFEFF0 +ButtonStateNew equ ButtonState+2 + +CRAMXferSizeCmd equ $9304 +StaticColors equ 12 + +USE_HINT equ 0 + +Start + bsr ReadPad + + btst.b #7, (ButtonState).w + bne LoadSLO + + move.l #$C00000, a4 + move.l #$c00004, a5 + + move.l #$0, a7 + + lea BgFile, a0 + bsr FileByNameSimple + + move.w #$8104, (a5) ;turn off display + move.w #$8200, (a5) ;Table A = 0000 + move.w #$8400, (a5) ;Table B = 0000 + move.w #$857C, (a5) ;Sprite Table = F800 + move.w #$8B00, (a5) ;set full screen vertical and horizontal scrolling + move.w #$8D3F, (a5) ;H Scroll = FC00 + move.w #$9001, (a5) ;64x32 scroll tables + + + + lea $200000, a0 + move.w (a0)+, d0 ;size in words + move.w (a0)+, d1 ;width in cells + move.w (a0)+, d2 ;height in cells + move.w d2, d7 + + subq #1, d0 ;adjust for 68K dbra routine + move.w #$8f02, (a5) ;autoincrement = 2 + move.l #$50200000, (a5);beginning of background tile area +CopyTiles: + move.w (a0)+, (a4) ;copy tiles to VRAM + dbra d0, CopyTiles + + move.l #$40000000, d4 ;beginning of Plane A Name table + move.l #$00800000, d5 ;delta between lines + move.w #$81, d6 + subq #1, d1 + subq #1, d2 + move.w d1, d3 +WriteNamesY: + move.l d4, (a5) + move.w d3, d1 + +WriteNamesX: + move.w d6, (a4) + addq #1, d6 + dbra d1, WriteNamesX + + add.l d5, d4 + dbra d2, WriteNamesY + + move.l #$C0000000, (a5) ;setup writes to CRAM + moveq #(StaticColors-1), d0 ;copy first 12 colors (static pallete) +CopyColors: + move.w (a0)+, (a4) + dbra d0, CopyColors + + move.w d7, d0 + lsl.w #5, d0 + subq #1, d0 + lea PalData(pc), a1 + ;sub.l #2, a0 +.copypallines: + move.l (a0)+, (a1)+ + dbra d0, .copypallines + + + move.l #$60000010, (a5) ;setup writes to VSRAM + move.w #$0, (a4) ;vscroll = 0 + + move.l #$7C000003, (a5) ;setup writes to HScroll Table FC00 + move.w #0, (a4) ;Plane A&B HScroll = 0; + move.w #0, (a4) ; + + move.l #$78000003, (a5) ;clear sprite table + move.l #0, (a4) + move.l #0, (a4) + + move.w #$8114, (a5) ;turn on DMA + + bsr InitSprites + bsr AddSprite + + move.w #$0, (a0) + + bsr LoadSpritePal + bsr InitFrameBigSprite + moveq #0, d3 + bsr ChangeFrameBigSprite + + + + + move.l #$C0180080, d5 ;setup DMA command word + + move.w #CRAMXferSizeCmd, (a5) ;set Transfer length + move.w #$9400, (a5) + + move.w #$8114, d6 + move.w #$8174, d7 + + + + lea VINT(pc), a1 ;setup VINT handler + jsr $368 + + if USE_HINT + lea HINT(pc), a1 ;setup HINT handler and turn on HINTs + jsr $314 + + move.w #$8014, (a5) + move.w #$8A00, (a5) ;HINT occurs on every line + endif + + move.w #$8174, (a5) + + + +Loop: + if USE_HINT + bra Loop + endif +WaitTop: + cmpi.b #$FF, 4(a5) + bne.s WaitTop + +LineDone: + move.b 4(a5), d0 +WaitNextLine: + cmp.b 4(a5), d0 + beq WaitNextLine + + + +HINT: + ;move.w d6, (a5) + ;move.l d5, (a5) ;start DMA + ;move.w d7, (a5) + move.l d6, (a5) + move.l d7, (a5) + move.w #CRAMXferSizeCmd, (a5) ;set Transfer length + move.w #$9400, (a5) + + if USE_HINT + rte + endif + + cmp.b #223, 4(a5) + beq WaitTop + + bra LineDone + +VINT: + move.b #1, $A12000 ;trigger interrupt on Sub CPU + if USE_HINT + move.w #$8144, (a5) + endif + bsr SpriteCopyVRAM + + bsr ReadPad + + bsr Player1Vint + + move.l PalData, d7 ;setup DMA source address + move.w #$9500, d6 + ror.l #1, d7 + move.b d7, d6 + move.w d6, (a5) + ror.l #8, d7 + move.b d7, d6 + add.w #$100, d6 + move.w d6,(a5) + ror.l #8, d7 + move.b d7, d6 + add.w #$100, d6 + and.b #$7F, d6 + move.w d6,(a5) + + ;move.l d5, (a5) ;do DMA for first line + + move.w #CRAMXferSizeCmd, (a5) ;set Transfer length + move.w #$9400, (a5) + + move.w #$8114, d6 ;VDP commands to turn screen on and off during HBlank + swap d6 + swap d5 + move.w d5, d6 + swap d5 + move.w d5, d7 + swap d7 + move.w #$8174, d7 + if USE_HINT + move.w d7, (a5) + endif + rte + +LoadSpritePal: + move.l #$C0200000, (a5) + moveq #$F, d0 + lea SpriteData, a0 +PalLoop: + move.w (a0)+, (a4) + dbra d0, PalLoop + rts + +PalAddress: + dc.l 0 + +Player1Vint: + move.b (ButtonState).w, d2 + move.b (ButtonStateNew).w, d3 + + moveq #0, d0 + move.w d0, d1 + + btst #5, d2 + bne ScrollRight + + btst #7, d2 + bne ScrollLeft + + btst #4, d3 + bne IncrementFrame + + + btst #6, d3 + bne DecrementFrame + + btst #2, d2 + beq PlayerShipNotLeft + subq #1, d0 +PlayerShipNotLeft: + + btst #3, d2 + beq PlayerShipNotRight + addq #1, d0 +PlayerShipNotRight: + + btst #0, d2 + beq PlayerShipNotDown + subq #1, d1 +PlayerShipNotDown: + + btst #1, d2 + beq PlayerShipNotUp + addq #1, d1 +PlayerShipNotUp: + + bsr MoveBigSprite + + rts +IncrementFrame: + move.w (PlayerShipFrame), d3 + addq #1, d3 + move.w d3, (PlayerShipFrame) + bsr ChangeFrameBigSprite + + rts + +DecrementFrame: + + move.w (PlayerShipFrame), d3 + subq #1, d3 + move.w d3, (PlayerShipFrame) + bsr ChangeFrameBigSprite + + rts + +ScrollRight: + move.w (ScrollValue), d0 + subq #1, d0 + move.l #$7C000003, (a5) ;setup writes to HScroll Table FC00 + move.w d0, (a4) + move.w d0, (a4) + move.w d0, (ScrollValue) + + rts + +ScrollLeft: + move.w (ScrollValue), d0 + addq #1, d0 + move.l #$7C000003, (a5) ;setup writes to HScroll Table FC00 + move.w d0, (a4) + move.w d0, (a4) + move.w d0, (ScrollValue) + + rts + + include sprites.s68 + +PlayerShipFrame: + dc.w 0 + + +ScrollValue: + dc.w 0 + +ReadPad: + move.b #$FF, $a10003 ;set TH for controller A + move.b $a10003, d0 ;CBRLUD + andi.b #$3F, d0 + move.b #0, $a10003 + move.b $a10003, d1 ;SA00UD + andi.b #$30, d1 + lsl.b #2, d1 + or.b d1, d0 ;SACBRLUD + not.b d0 + move.b (ButtonState).w, d1 + eor.b d0, d1 + and.b d0, d1 + move.b d0, (ButtonState).w + move.b d1, (ButtonStateNew).w + + rts + +FileByNameSimple: + move.b #0, $a1200e + lea $a12010, a1 +.copyname + move.b (a0), (a1)+ + tst.b (a0)+ + bne .copyname + + bset #1, $A12003; give SUB CPU control of WordRAM + +.waitready + tst.b $a1200f + beq .waitready + + + move.b #3, $a1200e + +.waitdone + cmp.b #$FF, $a1200f + beq .notfound + tst.b $a1200f + bne .waitdone + + bclr #1, $a12003; get control of WordRAM + rts + +.notfound + bra .notfound + +LoadSLO: + lea LoaderFile(pc), a0 + bsr FileByNameSimple + move.w #(.copyEnd-.copy-1), d0 + lea .copy(pc), a0 + lea ($FFFF8000).w, a1 + move.l a1, a2 +.copycopy + move.b (a0)+, (a1)+ + dbra d0, .copycopy + move.w #$2000, d0; more than enough for slo.bin + lea $200000, a0 + lea $FF0000, a1 + jmp (a2) +.copy + move.b (a0)+, (a1)+ + dbra d0, .copy + jmp $FF0000 +.copyEnd + +SpriteData: + incbin bultest.bin +BgFile: + dc.b "LOGO.BIN",0 +LoaderFile: + dc.b "SLO.BIN",0 + +PalData: +