[stella] If it's not one thing it's another.

Subject: [stella] If it's not one thing it's another.
From: crackers@xxxxxxxx
Date: Thu, 4 Sep 1997 00:41:35 -0400 (EDT)
In article <340DE8DC.914E6B75@xxxxxxxx>, you wrote:

>This isn't a DASM error message... It's causing a GPF while attempting to
>assemble your source. You might be able to get it to run under DOS (which has
>no memory protection) but this is definately a bug in DASM.
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~

Well... the problem cleared up as mysteriously as it started. Must be a
windows 95 problem.

But now that I've got my code assembled I'm discovering another new problem.
Horizontal movement turned out to be a breeze once Bob explained it to me in
plain english.... now I'm having trouble with the vertical.

I thought the vertical movement would be a breeze but I'm getting some very
unusual results. Could someone give me their input on my code.
I'm basically trying to incorporate my old PLAYFIELD graphics programme
with a simple programme that draws a sprite on the screen and moves it around.
Doesn't seem to be working though. I thought that maybe I was using too many
cycles, but unless I've drastically miscounted (hey, I've always sucked at
math) I've got a few cycles to spare. So I'm thinking the error is in
my screen logic somewhere.



Here's the code....

~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~

	processor 6502

VSYNC	=	$00
VBLANK	=	$01
WSYNC	=	$02
COLUP0	=	$06
COLUPF 	=	$08
COLUBK	=	$09
CTRLPF	=	$0A
PF0	=	$0D
PF1	=	$0E
PF2	=	$0F
GP0	=	$1B
HMP0	=	$20
HMOVE	=	$2A
CXCLR	=	$2C
SWCHA	=	$280
INTIM	=	$284
TIM64T	=	$296

VERTPOS	=	$80	;This is the vertical position of the sprite
VERTLIN	=	$81	;This is a counter so I know what scanline I'm on
GP0SIZE	=	$82	;This is how many scan lines the sprite is
BLKSIZE	=	$83	;this is the size of a playfield block
BLOCK	=	$84	;this is the block # (blksize*(block+1)=192)

	org  $F000

start	SEI            
	CLD
	LDX  #$FF
	TXS
	LDA  #$00

zero	STA  $00,X	;zero out the machine
	DEX
	BNE  zero

	LDA  #$32	;set up some of the variables.
        STA  COLUP0	;set up sprite colour
	LDA  #$60	;set up the starting vertical position of sprite
	STA  VERTPOS

main	JSR  vertb      
	JSR  scrnvar    
	JSR  draw       
	JSR  oscan      
	JMP  main       

scrnvar	LDA  #$00	;screen variables should clean this up later...
	STA  COLUPF      
	LDA  #$4F         
	STA  COLUBK
	LDA  #$01        
	STA  CTRLPF      
	RTS

vertb	LDX  #$00	;vertical blank         
	LDA  #$02           
	STA  WSYNC         
	STA  WSYNC        
	STA  WSYNC
	STA  VSYNC        
	STA  WSYNC         
	STA  WSYNC      ;Didn't know I could do an HMOVE here, but I'm  
	STA  HMOVE	;doing HMOVE here to avoid the black line on screen
	LDA  #$2C	;is this causing my problems? I dunno. But I don't
	STA  TIM64T     ;think so because when I remove the vertical   
	LDA  #$00	;movement routines everything works fine.
	STA  CXCLR        
	LDA  #$C0	;reset the number of vertical lines.
	STA  VERTLIN
	LDA  #$1B       ;reset the number of sprite lines.
	STA  GP0SIZE
	STA  WSYNC        
	STA  VSYNC
	RTS

draw	LDA  INTIM         
	BNE  draw
	STA  WSYNC
        STA  VBLANK

load	LDX  BLOCK
	LDA  playf0,X      
	STA  PF0
	LDA  playf1,X  
	STA  PF1
	LDA  playf2,X  
	STA  PF2

grfx1	DEC  VERTLIN	;Checking to see if it's time to draw a sprite yet.
	LDA  VERTLIN
	CMP  VERTPOS
	BMI  sprite1

grfx2	STA  WSYNC	;If not then draw then scanline
	DEC  BLKSIZE	;next line of block                 
	BEQ  newblk     ;or is it time for a new block?          
	JMP  grfx1      ;get ready for next scanline    

sprite1	LDX  GP0SIZE
	BEQ  nosprt	;See if we're finished drawing the sprite.
	LDA  p0data,x	;If not then load the sprite data.
	STA  GP0        
	DEC  GP0SIZE    ;get set up for next sprite line 
	JMP  grfx2      ;go draw current scanline

nosprt	LDA  #$00       ;if we're finished with the sprite then
	STA  GP0	;just fill the sprite with zeros.
	JMP  grfx2	;then draw the scanline.

newblk	LDA  BLOCK	;check to see if we've finished drawing the screen               
	BEQ  clear         
	DEC  BLOCK	;get ready for the next playfield block              
	LDA  #$08
	STA  BLKSIZE          
	JMP  load           

clear   LDA  #$02	;all done the screen.          
 	STA  WSYNC         
	STA  VBLANK        
	RTS

oscan   JSR  joy	;overscan. Time to read the joysticks.
	LDA  #$08	;reset the variables.
	STA  BLKSIZE	;and other stuff.
	LDA  #$17
	STA  BLOCK
	LDX  #$1E          
                  
waste	STA  WSYNC         
	DEX                
	BNE  waste            
	RTS                

joy	LDA  SWCHA	;Please don't laugh at the way I read the
	CMP  #$7F	;joysticks. I'm certain it's not the
        BEQ  right	;most efficient way, but it works for this
        CMP  #$BF	;programme and demonstrates how the joysticks
        BEQ  left	;work.
	CMP  #$EF
	BEQ  up
	CMP  #$DF
	BEQ  down
        LDA  #$00	;nothing touched, nothing changed.
        STA  HMP0
        RTS

right   LDA  #$f0	;set horizontal motion register to one pixel right
        STA  HMP0
        rts

left    LDA  #$10	;set horizontal motion register to one pixel left
        STA  HMP0
        rts

up	LDA  #$BF	;make sure we haven't gone over the top of the screen
	CMP  VERTPOS
	BMI  down	;no problem if we have, just go down instead.
	LDA  #$00
	STA  HMP0
	INC  VERTPOS	;if not then increase the vertical position
	RTS

down	LDA  #$00
	STA  HMP0
	DEC  VERTPOS	;decrease the vertical position
	RTS
   
	org  $FF00
  
playf0	.byte $00	;playfield data... you know. That "BAT"   
        .byte $00    
        .byte $00   
        .byte $00   
        .byte $00   
	.byte $00   
	.byte $00    
	.byte $00   
	.byte $00   
	.byte $00    
	.byte $00    
	.byte $20   
	.byte $20   
	.byte $70   
	.byte $f0   
	.byte $f0   
	.byte $f0   
	.byte $e0   
	.byte $e0   
	.byte $c0   
	.byte $80   
	.byte $00   
	.byte $00   
	.byte $00   
playf1	.byte $00   
	.byte $00   
	.byte $00   
	.byte $00   
	.byte $00   
	.byte $00   
	.byte $00   
	.byte $00   
	.byte $00   
	.byte $00   
	.byte $10   
	.byte $10    
	.byte $11   
	.byte $3b   
	.byte $7b   
	.byte $ff   
	.byte $ff   
	.byte $ff   
	.byte $ff   
	.byte $ff   
	.byte $ff   
	.byte $ff   
	.byte $7c   
	.byte $30   
playf2	.byte $00   
	.byte $00   
	.byte $80   
	.byte $80    
	.byte $c0   
	.byte $c0   
        .byte $c0   
	.byte $e2   
	.byte $e2   
	.byte $f2   
	.byte $fa   
	.byte $ff   
	.byte $ff   
	.byte $bf   
	.byte $bf   
	.byte $7f   
	.byte $df   
	.byte $cf   
	.byte $a7   
	.byte $93   
	.byte $71   
	.byte $38   
	.byte $0c   
	.byte $04   

p0data	.byte $00	;sprite data. Stored upside down. BIRA BIRA!
	.byte $ff
	.byte $81
	.byte $ff
	.byte $ff
	.byte $ff
	.byte $7e
	.byte $7e
	.byte $7e
	.byte $7e
	.byte $3c
	.byte $ff
	.byte $81
	.byte $ff
	.byte $ff
	.byte $e7
	.byte $66
	.byte $3c
	.byte $3c
	.byte $42
	.byte $7e
	.byte $42
	.byte $ff
	.byte $99
	.byte $66
	.byte $99
	.byte $ff
	.byte $ff

	org $FFFC
	.word start
	.word start

~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~


                                    CRACKERS
                          (Bleary eyed from hell!!!!!!)


-- 

Accordionist - Wethifl Musician - Atari 2600 Collector | /\/\
*NEW CrAB URL* http://www.hwcn.org/~ad329/crab.html ***| \^^/
Bira Bira Devotee - FES Member - Samurai Pizza Cats Fan| =\/=


--
Archives updated once/day at http://www.biglist.com/lists/stella/archives/
Unsubscribing and other info at http://www.biglist.com/lists/stella/stella.html

Current Thread