English Amiga Board


Go Back   English Amiga Board > Coders > Coders. Asm / Hardware

 
 
Thread Tools
Old 02 January 2014, 06:21   #1
thec
 
Posts: n/a
Sprite positioning, vertical limit?

Hi! I'm new to this forum, I left a presentation in this thread:
http://eab.abime.net/showthread.php?t=72031

I tried to make a small effect on the Amiga today, and had to limit the displaysize a bit heightwise (at the bottom to be precise) to allow the clipping to work:
https://www.facebook.com/photo.php?v...type=2&theater

It seemed like the highest possible vstop position was $10c (#299). Since I used a screen height of 256 and display screen from $2c (44) this adds upp (256+44=300) ...

(I added the:
02 SV8 Start vertical value high bit
01 EV8 End (stop) vertical value high bit
..too when values exceeded $ff.)

Is cutting the display size of the window the way to go if you need to clip sprites at the bottom of the screen? My sprites are 32 pixels high and at the top this works great (which is no wonder since they are of course hidden by the border ranging to 0x2c).

Sorry if I'm sounding a bit dizzy, it's 6.21am after all ;-)
 
Old 02 January 2014, 12:23   #2
Toni Wilen
WinUAE developer
 
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 49
Posts: 26,573
There isn't any hard sprite vstop limits (expect register size limit). What happens when you have larger vstop? (which is much more important than seeing what happens when it works as expected )

Perhaps you have something in copper list at the end of display that breaks sprites?
Toni Wilen is offline  
Old 02 January 2014, 13:47   #3
thec
 
Posts: n/a
Floppy disk

Ok, I'm submitting my source :-) In this version the effect has the unwanted glitches :-) I'm sure I missed something since this is right now more an exercise to learn motorola assembler rather than exploring all the possibilities in the Amiga.

Code:
WIDTH=320
HEIGHT=288
BITPLANES=1
DATASIZE=(WIDTH*HEIGHT*BITPLANES)>>3 ; Bits, not Bytes.


init:
	move.l	4.w,a6 			;execbase
	clr.l	d0			;clear version nr
	move.l	#gfxname,a1
	jsr	-408(a6)		;oldopenlibrary
	move.l	d0,a1
	move.l	38(a1),oldcopper	;original copper ptr 38=first, 50=second
	jsr	-414(a6)		;close library

	move	$dff01c,oldbits		;save old bits
	move	#$7fff,$dff09a		;disable all bits in INTENA

	move.l	#copper,$dff080		;set copper data address
	move.w	#0,$dff088		;start copper list


	moveq	#0,d0
	lea	movement,a1


mainloop:
vblank:
	btst	#0,$dff005
	beq	vblank
vblank2
	btst	#0,$dff005
	bne	vblank2

	move.l	#sprite1,$dff120
	move.l	#sprite2,$dff124
	move.l	#sprite3,$dff128
	move.l	#sprite4,$dff12c
	move.l	#sprite5,$dff130
	move.l	#sprite6,$dff134
	move.l	#sprite7,$dff138
	move.l	#sprite8,$dff13c


	; set screen
	move.l	#screen,$dff0e0

	; main
	move	d0,d4
	move	#0,d1
	lea	sprite1,a2

iloop:	
	sub.w	#10,d4
	move.w	d4,d2
	
	* Check range

	cmp	#0,d2
	bge	c1
	moveq	#0,d2
c1:
	cmp	#639,d2
	ble	c2
	move	#639,d2
c2:

	* /Check range


	move.w	(a1,d2.w),d3		;fetch height value

sk0:

	moveq	#0,d5
	cmp	#$ff,d3
	ble	sk1
	bset	#2,d5
sk1:
	
	move.b	d3,(a2)			;vstart
	add	#2,a2			
	add	#$20,d3			;height of sprite

	cmp	#$ff,d3
	ble	sk2
	bset	#1,d5
	and	#$ff,d3
sk2:

	lsl	#8,d3
	move.b	d5,d3			
	move.w	d3,(a2)			;vstop+sprite control word

	add.b	#1,d1
	add.w	#sprite2-sprite1-2,a2
	cmp	#8,d1
	blo	iloop

	;/iloop
	


	add.w	#2,d0
	cmp	#320*2+20*8,d0
	blt	skip
	move	#0,d0
skip:	

	btst #6,$bfe001			;test mouse button
	bne mainloop


exit:	
	move.l	oldcopper,$dff080
	move.w	#0,$dff088		;start copper list

	or	#$c000,oldbits
	move	oldbits,$dff09a

	move.l	#$deadbeef,d0
	rts

oldbits:
	dc.w	$00
	
gfxname:
	dc.b "graphics.library",0

	EVEN

oldcopper:
	dc.l	$00000000

	SECTION tut,DATA_C
copper:
	dc.w $1fc,0			; slow fetch mode

	dc.w $092,$38		;DMA horisontal start
	dc.w $094,$d0		;DMA horisontal stop
	dc.w $102,$00		;shift
	
	dc.w $104,36		;sprite & playfield priority 0/36
	dc.w $108,0		;modulo 1,3,5
	dc.w $10a,0		;modulo	2,4,6
	dc.w $08e,$2c81		;display window top left 
	dc.w $090,$2cc1		;display window bottom right


	dc.w $100,$1000		;BPLCON1, ..$1200
	;dc.w $0e0,0,$0e2,0

	dc.w $180,$000
	dc.w $182,$116
	dc.w $01a2,$0abd,$01a4,$0cdf,$01a6,$0568
	dc.w $01aa,$0abd,$01ac,$0cdf,$01ae,$0568
	dc.w $01b2,$0abd,$01b4,$0cdf,$01b6,$0568
	dc.w $01ba,$0abd,$01bc,$0cdf,$01be,$0568


	dc.w $7f07,$fffe
	dc.w $096,0

	

	dc.w $ffff, $fffe

dummy:	dc.w $0000,$0200
	dc.w $0000,$0000
	dc.w $0000,$0000
	dc.w 0,0

sprite1:
	dc.w $1a70,$3a00 ;vstart,hstart,vstart+lines,control
	dc.w $0000,$0000,$1ffc,$0000,$3ffe,$0000,$7fff,$0000
	dc.w $7fff,$0000,$7fff,$0000,$7fff,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$3c1e,$4221
	dc.w $4221,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7fff,$7fff,$7fff,$7fff
	dc.w $7fff,$7fff,$7fff,$7fff,$3ffe,$3ffe,$1ffc,$1ffc
	dc.w 0,0

sprite2:
	dc.w $2078,$4000
	dc.w $0000,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$3c1e,$4221
	dc.w $4221,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7fff,$7fff,$7fff,$7fff
	dc.w $7fff,$7fff,$7fff,$7fff,$3ffe,$3ffe,$1ffc,$1ffc
	dc.w 0,0

sprite3:
	dc.w $3080,$5000
	dc.w $0000,$0000,$7fff,$0000,$7fff,$0000,$7fff,$0000
	dc.w $7fff,$0000,$7fff,$0000,$7fff,$0000,$03e0,$0000
	dc.w $03e0,$0000,$03e0,$0000,$03e0,$0000,$03e0,$0000
	dc.w $03e0,$0000,$03e0,$0000,$03e0,$0000,$01c0,$0220
	dc.w $0220,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0
	dc.w $03e0,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0
	dc.w $03e0,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0
	dc.w $03e0,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0,$03e0
	dc.w 0,0

sprite4:
	dc.w $3088,$5000
	dc.w $0000,$0000,$7ffc,$0000,$7ffe,$0000,$7fff,$0000
	dc.w $7fff,$0000,$7fff,$0000,$7fff,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7fff,$0000,$3ffe,$4000
	dc.w $4000,$7ffc,$7ffe,$7ffe,$7fff,$7fff,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7fff,$7fff,$7fff,$7fff
	dc.w $7fff,$7fff,$7fff,$7fff,$7ffe,$7ffe,$7ffc,$7ffc
	dc.w 0,0

sprite5:
	dc.w $3090,$5000
	dc.w $0000,$0000,$7ffc,$0000,$7ffe,$0000,$7fff,$0000
	dc.w $7fff,$0000,$7fff,$0000,$7fff,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7fff,$0000,$3ffe,$4000
	dc.w $4000,$7ffc,$7ffe,$7ffe,$7fff,$7fff,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w 0,0	

sprite6:
	dc.w $3098,$5000
	dc.w $0000,$0000,$7fff,$0000,$7fff,$0000,$7fff,$0000
	dc.w $7fff,$0000,$7fff,$0000,$7fff,$0000,$7e00,$0000
	dc.w $7e00,$0000,$7e00,$0000,$7e00,$0000,$7e00,$0000
	dc.w $7e00,$0000,$7e00,$0000,$7fe0,$0000,$3fc0,$4020
	dc.w $4020,$7fe0,$7fe0,$7fe0,$7fe0,$7fe0,$7e00,$7e00
	dc.w $7e00,$7e00,$7e00,$7e00,$7e00,$7e00,$7e00,$7e00
	dc.w $7e00,$7e00,$7e00,$7e00,$7fff,$7fff,$7fff,$7fff
	dc.w $7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff
	dc.w 0,0

sprite7:
	dc.w $60a0,$8000
	dc.w $0000,$0000,$1ffc,$0000,$3ffe,$0000,$7fff,$0000
	dc.w $7fff,$0000,$7fff,$0000,$7fff,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7fff,$0000,$3ffe,$4001
	dc.w $4001,$7fff,$7fff,$7fff,$7fff,$7fff,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w 0,0

sprite8:
	dc.w $60a8,$8000
	dc.w $0000,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7e3f,$0000,$7e3f,$0000
	dc.w $7e3f,$0000,$7e3f,$0000,$7fff,$0000,$3ffe,$4000
	dc.w $4000,$7ffc,$7ffe,$7ffe,$7fff,$7fff,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w $7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f,$7e3f
	dc.w 0,0

movement:
	* Top
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	dc.w	$00,$00,$00,$00,$00,$00,$00,$00
	* In
	dc.w	$00,$04,$08,$0b,$0f,$13,$17,$1b
	dc.w	$1e,$22,$26,$2a,$2d,$31,$35,$38
	dc.w	$3c,$3f,$43,$46,$4a,$4d,$50,$53
	dc.w	$57,$5a,$5d,$60,$63,$66,$69,$6c
	dc.w	$6e,$71,$74,$76,$79,$7b,$7d,$80
	dc.w	$82,$84,$86,$88,$8a,$8b,$8d,$8f
	dc.w	$90,$92,$93,$94,$95,$96,$97,$98
	dc.w	$99,$9a,$9a,$9b,$9b,$9c,$9c,$9c
	* Still
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	dc.w	$9c,$9c,$9c,$9c,$9c,$9c,$9c,$9c
	* Out
	dc.w	$9c,$9c,$9c,$9c,$9d,$9d,$9e,$9e
	dc.w	$9f,$9f,$a0,$a1,$a2,$a3,$a4,$a6
	dc.w	$a7,$a8,$aa,$ab,$ad,$af,$b0,$b2
	dc.w	$b4,$b6,$b8,$ba,$bc,$bf,$c1,$c3
	dc.w	$c6,$c8,$cb,$ce,$d0,$d3,$d6,$d9
	dc.w	$dc,$de,$e1,$e5,$e8,$eb,$ee,$f1
	dc.w	$f4,$f8,$fb,$fe,$101,$105,$108,$10c
	dc.w	$10f,$113,$116,$119,$11d,$120,$124,$127
	* Bottom
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
	dc.w	$12b,$12b,$12b,$12b,$12b,$12b,$12b,$12b
movement_end:


screen:
	blk.b DATASIZE,$ff		;dcb.b

	END

Last edited by thec; 04 January 2014 at 12:44. Reason: Updated source to working version
 
Old 02 January 2014, 14:00   #4
Toni Wilen
WinUAE developer
 
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 49
Posts: 26,573
You are updating sprite pointers at line $12c, which of course won't work very well if sprites are still active

Sprite pointers are not latched like copper or audio pointers, new address will be in use immediately.

Update them during vblank, sprite pointers can be 100% safely updated from line 0 to 24 (PAL) or 0 to 19 (NTSC), lines when sprite dma is internally inhibited.
Toni Wilen is offline  
Old 03 January 2014, 00:16   #5
thec
 
Posts: n/a
I'm not sure what you mean line $12c, but if you're talking about "move.l #sprite1,$dff120" and 8 lines onward I have tried to move them around quite a bit but nothing really seems to help :-/

Thanks for replying tho.
 
Old 03 January 2014, 07:59   #6
Toni Wilen
WinUAE developer
 
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 49
Posts: 26,573
Code:
wframe:
	btst	#0,$dff005
	beq	wframe
	cmp.b	#$2c,$dff006
	bne	wframe
This waits for line $12c.
Toni Wilen is offline  
Old 04 January 2014, 12:45   #7
thec
 
Posts: n/a
Lightbulb

Quote:
Originally Posted by Toni Wilen View Post
Code:
wframe:
	btst	#0,$dff005
	beq	wframe
	cmp.b	#$2c,$dff006
	bne	wframe
This waits for line $12c.
Oh stupid me

I updated the source to a working version now, in case someone has the same problem and wants a fix... Thanks for the help, now onto new projects :-)
 
 


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
GUI positioning on multimonitor setup Dr.Venom request.UAE Wishlist 2 16 July 2012 14:58
Looking for vertical shooter amiades Looking for a game name ? 2 03 February 2012 11:43
Weird horizontal positioning with Hardwired demo Maren support.WinUAE 4 10 September 2009 16:11
I'm looking for a specific vertical shooter. Help? blackfiber Looking for a game name ? 2 30 June 2008 09:48
vertical sync flickers PiCiJi support.WinUAE 2 25 September 2004 14:34

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 23:55.

Top

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Page generated in 0.08204 seconds with 13 queries