🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: net.micro.atari16
Article #1549

Re: (none)

#1549
From: bammi
Date: Sun, 17 Aug 1986 04:02
489 lines
10934 bytes
In article <8608161503.AA07385@ucbvax.Berkeley.EDU> TAYLOR@NOCMI.BITNET writes:
>I am having some problems using the line a sprite definition. I can draw and
>undraw the things, but getting the pointers to the definition block appears
>to have eluded me. No matter what I do to the listed registers, the sprite
>is never my sprite | Can anyone help with a little more info on these functions
>please ?
>
> thanks in anticipation
>
>      aRTy


Here is a little example from this months issue of STuser magazine that
i hope will help. The parameters are set up for a monochrome monitor, but
it should be trivial to convert to color (see comments). You will also
need asmstart.s that i am also including. Assemble  both using the
developers system, and link as follows:
	link68 sprite.68k=asmstart,sprite
	relmod sprite
----
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	asmstart.s
#	sprite.s
# This archive created: Sat Aug 16 23:59:52 1986
# By:	Jwahar R. Bammi ()
export PATH; PATH=/bin:$PATH
echo shar: extracting "'asmstart.s'" '(1959 characters)'
if test -f 'asmstart.s'
then
	echo shar: over-writing existing file "'asmstart.s'"
fi
sed 's/^X//' << \SHAR_EOF > 'asmstart.s'
X******************************************************************************
X*
X*	Assembler runtime startup for CP/M-68k.
X*	Adapted from C runtime startup from Atari.
X*
X******************************************************************************
X*
Xltpa=0			* Low TPA address
Xhtpa=4			* High TPA address
Xlcode=8			* Code segment start
Xcodelen=12		* Code segment length
Xldata=16		* Data segment start
Xdatalen=20		* Data segment length
Xlbss=24			* Bss  segment start
Xbsslen=28		* Bss  segment length
Xfreelen=32		* free segment length
Xresvd=36		* Reserved
Xfcb2=56			* 2nd parsed fcb
Xfcb1=92			* 1st parsed fcb
Xcommand=128		* Command tail
Xprtstr=9		* Print string BDOS Call
Xexit=0			* BDOS exit call
X.globl	__main
X.globl	__exit
X.globl	__base
X
X	.text
X*
X*  Must be first object file in link statement
X*
X	move.l	a7,a5		* save a7 so we can get the base page address
X	move.l	4(a5),a5	* a5=basepage address
X	move.l	a5,__base	* save for C startup
X	move.l	$c(a5),d0
X	add.l	$14(a5),d0
X	add.l	$1c(a5),d0
X	add.l	#$500,d0	* d0=basepage+textlen+datalen+bsslen
X*				  (plus 1K of user stack)
X	move.l	d0,d1
X	add.l	a5,d1		* compute stack top
X	and.l	#-2,d1		* ensure even byte boundary
X	move.l	d1,a7		* setup user stack, 1K above end of BSS
X
X	move.l	d0,-(sp)
X	move.l	a5,-(sp)
X	clr.w	-(sp)		* junk word
X	move	#$4a,-(sp)	* return excess storage
X	trap	#1
X	add.l	#12,sp
X
X
X		move.l	__base,a0		*	Load C external
X		move.l	lbss(a0),a1		*	a1 -> bss region
X		adda.l	bsslen(a0),a1		*	a1 -> 1st heap loc
X
X		move.l	a1,__break		*	Put in "break" loc
X		lea.l	command(a0),a2		*	a2 -> command line
X		move.b	(a2)+,d0		*	d0 = byte count
X		andi.l	#$ff,d0			*	clear junk
X		move.w	d0,-(a7)		*	push length
X		move.l	a2,-(a7)		*	Push commnd
X		clr.l	a6			*	Clear frame pointer
X		jsr	__main			*	call main routine
X* No Need to	jmp	__exit				call "exit"
X
X__exit:		move.w	#exit,d0		*	Exit
X		trap	#2			*		now
X
X	.bss
X	.even
X__base:		.ds.l	1			*	-> Base Page
X__break		.ds.l	1			*    first break location
X
X		.end
SHAR_EOF
if test 1959 -ne "`wc -c 'asmstart.s'`"
then
	echo shar: error transmitting "'asmstart.s'" '(should have been 1959 characters)'
fi
echo shar: extracting "'sprite.s'" '(5512 characters)'
if test -f 'sprite.s'
then
	echo shar: over-writing existing file "'sprite.s'"
fi
sed 's/^X//' << \SHAR_EOF > 'sprite.s'
X*
X* sprite demonstarator
X*
X
X*		Aline Equates
Xinit		equ	$A000		; init line a
Xdrsprite	equ	init+13		; draw sprite
Xunsprite	equ	init+12		; undraw sprite
Xshow_mou	equ	init+9		; show mouse
Xhide_mou	equ	init+10		; hide mouse
X
Xv_x_max		equ	-12		; max x pixel value
X
X*		Gemdos Equate
Xc_conin		equ	1
X
X*		Bios eqautes
Xbconout		equ	3
Xconsole		equ	2
X
X*		General equates
XCR		equ	13
XNULL		equ	0
XESC		equ	27
X
X		.text		; now that all the BS is out of the way
X
X*		Get a Key
Xkey:
X		move.w	#c_conin,-(sp)
X		trap	#1
X		addq.l	#2,sp
X		rts
X
X*		Write string in a4 - 1st byte is (count - 1)
Xwstring:
X		clr.l	d4
X		clr.l	d5
X		move.b	(a4),d4
X_wloop:
X		add.l	#1,a4
X		move.b	(a4),d5
X		move.w	d5,-(sp)
X		move.w	#console,-(sp)
X		move.w	#bconout,-(sp)
X		trap	#13
X		addq.l	#6,sp
X		dbra	d4,_wloop
X		rts
X
X*		Read a string into text
Xrstring:
X		lea	text,a3
X_rloop:
X		move.w	#c_conin,-(sp)
X		trap	#1
X		addq.l	#2,sp
X		cmp.b	#CR,d0
X		beq	_rend		; the end?
X		move.b	d0,(a3)+
X		bra	_rloop
X_rend:
X		move.b	#NULL,(a3)	; terminate string
X		rts
X
X		.globl	__main
X
X__main:
X		lea	sprite,a5
X
X		lea	scdat,a4
X		bsr	wstring
X		bsr	rstring		; get paper color
X		bsr	xint		; to int
X		move.w	d5,6(a5)	; into sprite block
X
X		lea	data1,a4
X		bsr	wstring
X		bsr	rstring		; get int color
X		bsr	xint		; to int
X		move.w  d5,8(a5)	; into sprite block
X
X		lea	data2,a4
X		bsr	wstring
X		bsr	key_v_x		; get format
X	
X		lea	data3,a4
X		bsr	wstring
X		bsr	key_d_v		; read delay type
X
X		lea	data4,a4
X		bsr	wstring
X		bsr	rstring		; get step size
X		bsr	xint		; to int
X		lea	step_siz,a3
X		move.w	d5,(a3)
X		beq	__main		; step size of 0? let him have it
X
X		lea	data5,a4
X		bsr	wstring
X
X		.dc.w	init		; Init Aline d0,a0 = addr of Aline vars
X
X		move.w	v_x_max(a0),a5
X		sub.w	#9,a5		; xlimit
X
X		.dc.w	hide_mou	; hide the critter 
X
Xsproff:
X		move.w	#0,d0
X		move.w	#16,d1
X		lea	sprite,a0
X		lea	saveblk,a2
X
Xloop:
X		movem.l d0-d2/a0-a4,-(sp)
X	
X		.dc.w	drsprite
X
X		lea	hold,a4
X		move.w	(a4),d0
X		bne	do_vblnk	; wait for Vblank
X
X		move.w	#2000,d0
Xwait:
X		dbra	d0,wait
X		bra	no_wait
X
Xdo_vblnk:
X		move.w	#37,-(sp)
X		trap	#14
X		addq.l	#2,sp
X
Xno_wait:
X		lea	saveblk,a2
X
X		.dc.w	unsprite
X
X		movem.l	(sp)+,d0-d2/a0-a4
X		lea	step_siz,a3
X		add.w	(a3),d0
X		cmp.w	a5,d0
X		ble	loop
X
X		bsr	key
X		cmp.b	#CR,d0		; CR start all over again
X		beq	__main
X		cmp.b	#'q',d0		; quit
X		beq	exit
X		bra	sproff		; do again with same parameters
X
Xexit:
X		.dc.w	show_mou
X		move.w	#0,-(sp)
X		trap	#1
X		addq.l	#2,sp
X		rts
X
X*		extract 2 digit integer in text
Xxint:
X		lea	text,a3
X		clr.l	d4
X		clr.l	d5
X		move.w	(a3),d4
X		tst.b	d4
X		bne	digit2
X		lsr	#8,d4
Xdigit2:
X		sub	#48,d4
X		move.b	d4,d5
X		lsr	#8,d4
X		beq	digit		; isnt one
X		add.l	#10,d5		; assume its a '1'
Xdigit:
X		cmp	#15,d5		; too high ?
X		bgt	error
X		rts
X
X*		general error, make him restart
Xerror:
X		addq.l	#4,sp		; pop return address
X		jmp	__main
X
X*		get format (V)di or (X)or
Xkey_v_x:
X		bsr	key
X		lea	sprite,a3
X		cmp.b	#'x',d0
X		beq	key_x
X		cmp.b	#'v',d0
X		beq	key_v
X		lea	err,a4
X		bsr	wstring
X		bra	error
Xkey_v:
X		lea	Vdi,a4
X		bsr	wstring
X		move.w	#1,4(a3)
X		rts
Xkey_x:
X		lea	Xor,a4
X		bsr	wstring
X		move.w	#-1,4(a3)
X		rts
X
X*		Get delay type (d)elay or (v)blank
Xkey_d_v:
X		bsr 	key
X		lea	hold,a5
X		cmp.b	#'d',d0
X		beq	key_d
X		cmp.b	#'v',d0
X		beq	key_vv
X		lea	err,a4
X		bsr	wstring
X		bra	error
X
Xkey_vv:
X		lea	Vblnk,a4
X		bsr	wstring
X		move.w	#1,(a5)
X		rts
Xkey_d:
X		lea	Delay,a4
X		bsr	wstring
X		move.w	#0,(a5)
X		rts
X
X
X		.data
X		.even
XVdi:		dc.b	3
X		dc.b	8,'Vdi'
X
X		.even
XXor:		dc.b	3
X		dc.b	8,'Xor'
X
X		.even
XDelay:		dc.b	5
X		dc.b	8,'Delay'
X
X		.even
XVblnk:		dc.b	6
X		dc.b	8,'Vblank'
X
Xerr:		dc.b	6
X		dc.b	8,'Error!'
X		.even
X
X		.even
X* 		sprite block
Xsprite:
X		dc.w	0,0	; x,y
X		dc.w	-1	; 1 = vdi  -1=xor
X		dc.w	0	; background color
X		dc.w	0	; foreground color
X
Xpattern:	dc.w	$ffff
X		dc.w	$03c0
X		dc.w	$ffff
X		dc.w	$0ff0
X		dc.w	$ffff
X		dc.w	$1ff8
X		dc.w	$ffff
X		dc.w	$3ffc
X		dc.w	$ffff
X		dc.w	$73ce
X		dc.w	$ffff
X		dc.w	$73ce
X		dc.w	$ffff
X		dc.w	$ffff
X		dc.w	$ffff
X		dc.w	$ffff
X		dc.w	$ffff
X		dc.w	$fbdf
X		dc.w	$ffff
X		dc.w	$f81f
X		dc.w	$ffff
X		dc.w	$ffff
X		dc.w	$ffff
X		dc.w	$67e6
X		dc.w	$ffff
X		dc.w	$300c
X		dc.w	$ffff
X		dc.w	$1ff8
X		dc.w	$ffff
X		dc.w	$0420
X		dc.w	$ffff
X		dc.w	$1818
X
X		.even
Xscdat:
X		dc.b	131	; unsigned of course
X		dc.b	ESC,'E'	; cls
X		dc.b	ESC,'b',1	; black ink
X		dc.b	ESC,'c',0	; white paper
X		dc.b	ESC,'Y!*'	; goto 1,10
X		dc.b	ESC,'p'		; inv video
X		dc.b	'Sprite demonstrator'
X		dc.b	ESC,'Y%%pap_col(0-15)'	; at 5,5
X		dc.b	ESC,'q'		; normal
X		dc.b	ESC,'Y)%ink_col(0-15)'	; at 9,5
X		dc.b	ESC,'Y-%format(XOR/VDI)' ; at 13,5
X		dc.b	ESC,'Y1%sync(delay/vblnk)' ; at 17,5
X		dc.b	ESC,'Y5%step_size(1-15)'   ; at 21,5
X		dc.b	ESC,'Y&&'		   ; cursor to 6,6
X
Xdata1:
X		dc.b	41
X		dc.b	ESC,'Y%%pap_col(0-15)'	; at 5,5
X		dc.b	ESC,'p'		; inverse
X		dc.b	ESC,'Y)%ink_col(0-15)'	; at 9,5
X		dc.b	ESC,'q'		; normal
X		dc.b	ESC,'Y*&'	; 10, 6
X
Xdata2:
X		dc.b	43
X		dc.b	ESC,'Y)%ink_col(0-15)'	; at 9,5
X		dc.b	ESC,'p'		; inverse
X		dc.b	ESC,'Y-%format(XOR/VDI)' ; at 13,5
X		dc.b	ESC,'q'		; normal
X		dc.b	ESC,'Y.&'	; 14, 6
X
Xdata3:
X		dc.b	47
X		dc.b	ESC,'Y-%format(XOR/VDI)' ; at 13,5
X		dc.b	ESC,'p'		; inverse
X		dc.b	ESC,'Y1%sync(delay/vblnk)' ; at 17,5
X		dc.b	ESC,'q'		; normal
X		dc.b	ESC,'Y2&'	; 
X
Xdata4:
X		dc.b	47
X		dc.b	ESC,'Y1%sync(delay/vblnk)' ; at 17,5
X		dc.b	ESC,'p'		; inverse
X		dc.b	ESC,'Y5%step_size(1-15)'   ; at 21,5
X		dc.b	ESC,'q'		; normal
X		dc.b	ESC,'Y6&'	; 
X
Xdata5:
X		dc.b	22
X		dc.b	ESC,'Y5%step_size(1-15)'   ; at 21,5
X		dc.b	ESC,'Y  '	; 
X* vars
X		.bss
X		.even
Xsaveblk:	ds.b	74	; for mono
X* saveblk:	ds.b	266	; for color
X
Xstep_siz:	ds.w	1
Xhold:		ds.w	1
Xtext:		ds.w	8
X
X		end
SHAR_EOF
if test 5512 -ne "`wc -c 'sprite.s'`"
then
	echo shar: error transmitting "'sprite.s'" '(should have been 5512 characters)'
fi
#	End of shell archive
exit 0

-- 
					Jwahar R. Bammi
 		        Usenet:  .....!decvax!cwruecmp!bammi
		        CSnet:  bammi@case         Arpa:  bammi%case@csnet-relay
			CompuServe:  71515,155
Technical Details
Message-ID: <1556@cwruecmp.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!watmath!clyde!caip!cbmvax!amiga!pyramid!decwrl!decvax!cwruecmp!bammi
References: <8608161503.AA07385@ucbvax.Berkeley.EDU>

Show Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: arc1-ca.pugleaf.net!utzoo!watmath!clyde!caip!cbmvax!amiga!pyramid!decwrl!decvax!cwruecmp!bammi
From: bammi@cwruecmp.UUCP
Newsgroups: net.micro.atari16
Subject: Re: (none)
Message-ID: <1556@cwruecmp.UUCP>
Date: Sun, 17-Aug-86 00:02:41 EDT
Article-I.D.: cwruecmp.1556
Posted: Sun Aug 17 00:02:41 1986
Date-Received: Tue, 19-Aug-86 07:47:08 EDT
References: <8608161503.AA07385@ucbvax.Berkeley.EDU>
Reply-To: bammi@cwruecmp.UUCP (Jwahar R. Bammi)
Organization: CWRU Dept. Comp. Eng., Cleveland OH
Lines: 489