	opt c- o+

clipxmin:	equ	0
clipymin:	equ	0
clipxmax:	equ	319
clipymax:	equ	479
first_ade:	equ	36
off_table:	equ	72
data_table:	equ	76
form_width:	equ	80
form_height:	equ	82
wmode:		equ	36
clip:		equ	54
xmincl:		equ	56
ymincl:		equ	58
xmaxcl:		equ	60
ymaxcl:		equ	62
xdda:		equ	64
ddainc:		equ	66
scaldir:	equ	68
mono:		equ	70
sourcex:	equ	72
sourcey:	equ	74
destx:		equ	76
desty:		equ	78
delx:		equ	80
dely:		equ	82
fbase:		equ	84
fwidth:		equ	88
style:		equ	90
litemask:	equ	92
skewmask:	equ	94
weight:		equ	96
roff:		equ	98
loff:		equ	100
scale:		equ	102
chup:		equ	104
textfg:		equ	106
scrtchp:	equ	108
scrpt2:		equ	112
textbg:		equ	114

cxmin:		equ	0
cxmax:		equ	319
cymin:		equ	0
cymax:		equ	199
NumStars	equ	80
vbl_vec:	equ	$70
key_vec:	equ	$118
hbl_vec:	equ	$120
bpwidth:	equ	320
bpheight:	equ	200
start:
	clr.l   -(SP)           ;Go into supervisor mode
        move.w  #$20,-(SP)
        trap    #1
        addq.l  #6,SP
        move.l  D0,savesup
	dc.w	$a00a

	lea	palsave,a0
	move.l	#$ff8240,a1
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+

	move.w	#4,-(sp)
	trap	#14
	addq.l	#2,sp
	move.w	d0,ressave

	move.w	#0,-(sp)	;set to low res
	move.l	#-1,-(sp)
	move.l	#-1,-(sp)
	move.w	#5,-(sp)
	trap	#14
	add.l	#12,sp
	bsr	getscrn
	bsr	plotinit
	lea	greypalette,a0
	bsr	mydocolors
	bsr	swapfont
	bsr	printcolor


mainloop:
	add.w	#512,scaler
	bsr	printcolor

	bsr	keyboard
	bra	mainloop

*************************************************
*	Swaps bytes pointed to by A0		*
*	and increments to next word		*
*************************************************
swapbytes:
	move.b	(a0),d0
	move.b	1(a0),(a0)	;swap the bytes
	move.b	d0,1(a0)
	addq.l	#2,a0
	rts

swapfont:
	lea	font,a0
	bsr	swapbytes	;swap 1st and 2nd words
	bsr	swapbytes
	lea	font+36,a0	;don't swap the name
	move.w	#25,d7
sfloop:
	bsr	swapbytes	;do rest of header
	dbf	d7,sfloop
***************************
*	Second part swaps the words of all the longs
***************************
	lea	font,a0
	move.w	68(a0),d0
	move.w	70(a0),68(a0)
	move.w	d0,70(a0)
	move.w	72(a0),d0
	move.w	74(a0),72(a0)
	move.w	d0,74(a0)
	move.w	76(a0),d0
	move.w	78(a0),76(a0)
	move.w	d0,78(a0)
	lea	font,a2
	lea	88(a2),a0
	move.l	a0,a1
	add.l	76(a2),a1	;get start address of font data
swaprest:
	bsr	swapbytes
	cmp.l	a1,a0
	bne	swaprest

	lea	font+67,a2	;flag bits
	btst	#2,(a2)
	beq.s	noswapdata
	lea	fonte,a1
swapreste:
	bsr	swapbytes
	cmp.l	a1,a0
	bne	swapreste
noswapdata:
	rts


scaler:
	dc.w	0
printcolor:
	move.l	$44e,-(sp)
	move.l	seen,$44e
	dc.w	$a000
	move.l	8*4(a2),lineatextblt

	move.l	#sc1,scrtchp(a0)
	move.w	#1000,scrpt2(a0)
*	move.w	#900,chup(a0)		;works
*			     ouslt
	move.w	#%0000000000000000,style(a0)
	move.w	#1,weight(a0)
	move.w	#$5555,litemask(a0)
	move.w	#$5555,skewmask(a0)
	move.w	#$8000,xdda(a0)
*	move.w	#256*(64-16)/16,ddainc(a0)
*	move.w	#256*5,ddainc(a0)
	move.w	scaler,ddainc(a0)
	move.w	#1,scaldir(a0)

	move.w	#7,wmode(a0)
	move.w	#1,clip(a0)
	move.w	#0,xmincl(a0)
	move.w	#319,xmaxcl(a0)
	move.w	#0,ymincl(a0)
	move.w	#199,ymaxcl(a0)
	move.w	#7,textfg(a0)
	move.w	#0,textbg(a0)
	move.w	#0,destx(a0)
	move.w	#50,desty(a0)
*	move.w	#0,style(a0)
	move.w	#1,scale(a0)
	move.w	#0,mono(a0)
*	move.l	8(a1),a1
	lea	font,a1
	move.l	a1,fbase(a0)
	move.l	data_table(a1),d0
	add.l	d0,fbase(a0)
*	add.l	#282,fbase(a0)
	move.w	form_width(a1),fwidth(a0)
	move.w	form_height(a1),dely(a0)

	lea	string,a2
	lea	font,a3
	add.l	off_table(a1),a3
	moveq	#0,d0
printblit:
	moveq	#0,d0
	move.b	(a2)+,d0
	ble	tblitover
	sub.w	first_ade(a1),d0
	lsl.w	#1,d0
	move.w	0(a3,d0.w),sourcex(a0)
	move.w	2(a3,d0.w),d0
	sub.w	sourcex(a0),d0
	move.w	d0,delx(a0)
	clr.w	sourcey(a0)
	movem.l	a0-a3,-(sp)
	move.l	lineatextblt,a5
	jsr	(a5)
	movem.l	(sp)+,a0-a3
	bra	printblit
tblitover:
	move.l	(sp)+,$44e
	rts




string:	dc.b	'I am at last successful',0
	even
sc1:
	ds.b	1000
sc2:
	ds.b	1000

****************************************
keyboard:
	move.w	#$ff,-(sp)
	move.w	#$6,-(sp)
	trap	#1
	addq.l	#4,sp
	tst.l	d0
	beq	keyback
	swap	d0

	cmp.b	#16,d0		*space
	beq	gem		*yes/no
keyback:
	rts

*****************************************
*	number in d0.l			*
*	d1.l is base			*
*	d2,x cursor			*
*	d3,y cursor			*
*****************************************
prtnum:
	movem.l	d0/d1,-(sp)
	lea	posstring,a0
	add.w	#32,d3
	move.b	d3,2(a0)	
	move.b	d3,10(a0)	
	add.w	#32,d2
	move.b	d2,3(a0)
	move.b	d2,11(a0)	
	move.l	a0,-(sp)
	move.w	#9,-(sp)
	trap	#1
	addq.l	#6,sp
	movem.l	(sp)+,d0/d1

	lea	linebuffer,a0
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
loop1:
	divu	d1,d0
	swap	d0
	addi	#'0',d0
	cmpi.w	#'9',d0
	ble.s	ok
	addq.w	#7,d0
ok:
	move.b	d0,-(a0)
	clr	d0
	swap	d0
	bne	loop1
loop2:
	move.l	a0,-(sp)
	move.w	#9,-(sp)
	trap	#1
	addq.l	#6,sp
	rts


linebuffer:
	ds.l	5
digits:
	dc.b	0
posstring:	dc.b	27,'Y',0,0,' ',' ',' ',' ',27,'Y',0,0,0
	even



***********************************
mydocolors:
	move.l	#$ff8240,a1
	moveq	#15,d0
mdcloop:
	move.w	(a0)+,(a1)+
	dbf	d0,mdcloop
	rts

************get screen address***************
getscrn:move.w  #2,-(sp)
        trap    #14
        addq.l  #2,sp
        move.l  d0,seen
	rts


******************************************
*               RETURN TO GEM
gem:
*	move.b	#%11111110,$ff820a
	move.l	#$ff8240,a0
	lea	palsave,a1
	moveq	#15,d7
rspl:
	move.w	(a1)+,d0
	and.w	#$0777,d0
	move.w	d0,(a0)+
	dbf	d7,rspl

*	move.l	vblslot,a0
*	move.l	#0,(a0)

        move.w  ressave,-(sp)
        move.l  seen,-(sp)
        move.l  seen,-(sp)
        move.w  #5,-(sp)
        trap    #14
        add.l  #12,sp

	move.l  savesup,-(SP)    ;Back to user mode
        move.w  #$20,-(SP)
        trap    #1
        addq.l  #6,SP
*illegal
	clr.w	-(sp)
	trap	#1





********************************************
* Atari ST hi-speed plotting subroutine    *
* For Low-resolution mode only		   *
********************************************
plotinit:
	move.l	seen,a0
	move.b	#200,d1
	lea	ytable1,a1
iloop:
	move.l	a0,(a1)+
	adda.w	#160,a0
	subq.b	#1,d1
	bne	iloop
	rts
**********************************************
singleplot:
	movem.l d0-d5/a0-a1,-(sp)
*	move.w	pixelx,d0
	cmp.w	#cxmax,d0
	bgt	pltxit
	cmpi.w	#cxmin,d0
	blt	pltxit
	move.w	d0,d3
	andi.w	#15,d3
*	move.w	pixely,d1
	cmp.w	#cymax,d1
	bgt	pltxit
	cmpi.w	#cymin,d1
	blt	pltxit
	lsl.w	#2,d1
	move.w	pixelcolor,d2

	lsr.w	#1,d0
	and.w	#$00f8,d0
	move.w	d0,a0
	lea	ytable1,a1
	adda.l	(a1,d1.w),a0

	move.w #$8000,d4
	lsr.w d3,d4
	move.l #$80008000,d5
	lsr.l d3,d5
	eor.l #$ffffffff,d5
******************************
*    Turn off old pixel!     *
******************************
myphere:
	and.l d5,(a0)	     ;turn off old pixel
	and.l d5,4(a0)	     ;(both longwords)

******************************
* Now turn on the new pixel! *
******************************
	btst #0,d2
	beq bit2
	or.w d4,(a0)
bit2:
	btst #1,d2
	beq bit4
	or.w d4,2(a0)
bit4:
	btst #2,d2
	beq bit8
	or.w d4,4(a0)
bit8:
	btst #3,d2
	beq pltxit
	or.w d4,6(a0)
pltxit:
	movem.l (sp)+,d0-d5/a0-a1
	rts
pltxit2:
	movem.l (sp)+,d0-d5/a0-a1
	moveq	#-1,d0
	rts
pltxit3:
	movem.l (sp)+,d0-d5/a0-a1
	moveq	#-2,d0
	rts



rvsave:	dc.l	0
resave:	dc.l	0
	even
savesup:	dc.l	0
ressave:	dc.w	0
filename:	dc.l	0
greypalette:
*	incbin	'ste.pal'
	dc.w	$0000,$0222,$0444,$000f,$0fff,$000f,$000f
	dc.w	$000f,$000f,$000f,$000f,$000f,$000f,$000f,$000f,$000f
	dc.w	$000f,$000f
save_usp:
	dc.l	0
wfnc:
	dc.w	0
save_stk:
	dc.l	0
lineatextblt:	dc.l	0
pointer:	dc.l	0
pixelx:		dc.w	0
pixely:	dc.w	0
pixelcolor:	dc.w	15
flip:	dc.w	0
flip2:	dc.w	0
seen:	dc.l	0
hiden:	dc.l	0
clrbuffseen:	dc.l	0
clrbuffhiden:	dc.l	0
screen:	dc.l	0
	ds.w	160


font:
*	incbin	'caligr36.fnt'
	incbin	'vdifonts\early14.fnt'
fonte:

*	section	bss
x1:	ds.w	1
y1:	ds.w	1
x2:	ds.w	1
y2:	ds.w	1

number:	ds.w	1
palsave:
	ds.w	16
vblslot:	ds.l	1
d7emulator:	ds.w	1
ytable1:	ds.w	200
