From 4039255003d23115d3494ef398aa87316b3c0fe8 Mon Sep 17 00:00:00 2001 From: alpine9000 Date: Sun, 17 Apr 2016 11:09:22 +1000 Subject: [PATCH] can I display a sprite? --- 028.game2/Makefile | 5 ++++- 028.game2/assets/sprite.png | Bin 0 -> 1235 bytes 028.game2/game1.s | 30 ++++++++++++++++++++++++++++++ 028.game2/init.s | 7 ++++++- 028.game2/tilemap-copper-list.s | 9 --------- 5 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 028.game2/assets/sprite.png diff --git a/028.game2/Makefile b/028.game2/Makefile index 88237b3..d5d943b 100644 --- a/028.game2/Makefile +++ b/028.game2/Makefile @@ -11,7 +11,7 @@ NUM_COLORS=8 BOOTBLOCK_ASM=alpine_bootblock.s OBJS=out/init.o out/utils.o out/image.o out/blit.o out/joystick.o -IMAGES=foreground.png background.png panel.png +IMAGES=foreground.png background.png panel.png sprite.png IMAGEDATA=$(addprefix out/, $(IMAGES:.png=.bin)) VASM_EXTRA_ARGS=-DNUM_COLORS=$(NUM_COLORS) @@ -40,6 +40,9 @@ out/tilemap-palette.s: assets/tilemap.png out/panel.bin: assets/panel.png $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 16 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/panel --use-palette=assets/panel.pal +out/sprite.bin: assets/sprite.png + $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite --palette-offset 16 + out/foreground-map.s: foreground.tmx ../tools/mapgen/out/mapgen --depth=3 --input=foreground.tmx diff --git a/028.game2/assets/sprite.png b/028.game2/assets/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..7f74b51a49cba2f52d67fd9e5325c15c1b1c9090 GIT binary patch literal 1235 zcmV;^1T6cBP)4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%Q zfk{L`R5%f1WME+U55!~xCVVzIu0+~WC007(SCuwaX2I~L-002ovPDHLkV1i;?PR9TM literal 0 HcmV?d00001 diff --git a/028.game2/game1.s b/028.game2/game1.s index 20c2356..818b240 100644 --- a/028.game2/game1.s +++ b/028.game2/game1.s @@ -10,6 +10,8 @@ xdef foregroundScrollX xdef backgroundScrollX xdef joystick + xdef sprite + xdef deadSprite byteMap: dc.l Entry @@ -39,6 +41,7 @@ Entry: jsr PokePanelBitplanePointers jsr Init ; enable the playfield + jsr InstallSpriteColorPalette jsr InstallGreyPalette Reset: @@ -48,6 +51,7 @@ Reset: move.l #-1,frameCount MainLoop: + MOVE.W #$0024,BPLCON2(a6) add.l #1,frameCount move.l frameCount,d6 cmp.l #FOREGROUND_PLAYAREA_WIDTH_WORDS,frameCount @@ -319,6 +323,15 @@ Level3InterruptHandler: .verticalBlank: move.w #INTF_VERTB,INTREQ(a6) ; clear interrupt bit add.l #1,verticalBlankCount + move.l #sprite,SPR0PTH(a6) + move.l #deadSprite,SPR1PTH(a6) + move.l #deadSprite,SPR2PTH(a6) + move.l #deadSprite,SPR3PTH(a6) + move.l #deadSprite,SPR4PTH(a6) + move.l #deadSprite,SPR5PTH(a6) + move.l #deadSprite,SPR6PTH(a6) + move.l #deadSprite,SPR7PTH(a6) + .checkCopper: move.w INTREQR(a6),d0 and.w #INTF_COPER,d0 @@ -387,6 +400,9 @@ tileMapCopperPalettePtr: dc.l $fffffffe +InstallSpriteColorPalette: + include "out/sprite-palette.s" + rts InstallColorPalette: lea tileMapCopperPalettePtr,a1 @@ -450,6 +466,20 @@ tilemap: incbin "out/foreground.bin" backgroundTilemap: incbin "out/background.bin" + +sprite: +spriteVStart: + dc.b $94 +spriteHStart: + dc.b $60 +spriteHStop: + dc.b $a4 + dc.b 0 + DC.W $0000,$0000 ;End of sprite data + incbin "out/sprite.bin" + dc.l 0 +deadSprite: + dc.l 0 panel: incbin "out/panel.bin" map: diff --git a/028.game2/init.s b/028.game2/init.s index 2af7cc7..2fa312e 100644 --- a/028.game2/init.s +++ b/028.game2/init.s @@ -23,11 +23,16 @@ Init: ;; move.w #BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH-SCREEN_WIDTH_BYTES-2,BPL1MOD(a6) ; -2 for extra scrolling word ;; move.w #BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH-SCREEN_WIDTH_BYTES-2,BPL2MOD(a6) + + ;; setup sprites + + + ;; install copper list, then enable dma and selected interrupts lea copperList,a0 move.l a0,COP1LC(a6) move.w COPJMP1(a6),d0 - move.w #(DMAF_BLITTER|DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(a6) + move.w #(DMAF_SPRITE|DMAF_BLITTER|DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(a6) ;; move.w #PF2PRI,BPLCON2(a6) ;; move.w #(INTF_SETCLR|INTF_VERTB|INTF_INTEN),INTENA(a6) movem.l (sp)+,d0-a6 diff --git a/028.game2/tilemap-copper-list.s b/028.game2/tilemap-copper-list.s index 4c019b0..dddbc79 100644 --- a/028.game2/tilemap-copper-list.s +++ b/028.game2/tilemap-copper-list.s @@ -14,12 +14,3 @@ dc.w $19a,$d02 dc.w $19c,$999 dc.w $19e,$00f - dc.w $1a0,$ea6 - dc.w $1a2,$f76 - dc.w $1a4,$a31 - dc.w $1a6,$37 - dc.w $1a8,$19a - dc.w $1aa,$1ef - dc.w $1ac,$f70 - dc.w $1ae,$ff0 - dc.w $1b0,$fff