|
Subject: Re: [stella] 6 digit score display and other ramblings From: Robin Harbron <macbeth@xxxxxxxxxxxxxxxxxxx> Date: Sun, 15 Mar 1998 23:48:21 -0500 |
Erik Mooney wrote:
> The standard does a wsync on each line too, but it uses every one of the
> other 71 available cycles. If we could get a look at your source, it'd be
> great.
Okay - it's just the same then - 3 cycles "spare" on each line, since
a WSYNC isn't necessary, as long as you've synced it up earlier, and
use exactly 76 cycles per line. You did mean 73, not 71 cycles above,
right? :)
> 3 instructions * 2 cycles = 2 instructions * 3 cycles, last I checked :)
> If you're somehow doing a LDX instead of LDA, the stack-pointer method is
> faster.
Ah, I see what you mean... I needed a 2 cycle instruction to get new
data in any one of the 3 registers - txs is the only one I know of
that can do that.
> If you can, we'll love you for life :) (Did anyone even get a 32-pixel
> movable sprite to work? With color changes? Using wsyncs?)
What sort of colour changes? A unique colour for every scan line? Or
something fancier? Of course, it's easy to get every 2nd 8 pixel chunk
a different colour :) Why use wsyncs if they're not necessary? Is
there
something I don't know? Or is it just to show that there's at least 3
cycles free? :)
I would think that it would be pretty easy to move a big sprite around
_if_ you wrote individual routines to handle the whole bunch of cases.
There isn't enough time left over to make one general purpose loop.
Here's the whole source, minus the vcs.h equates. Sorry about the
length, and the general sloppiness - you should see the source to
one of my C64 demos :/ Head right down to the startscore label to
see the beginning of the setup - then to mainloop for the actual
loop that does the 8 lines of score.
I know there's all sorts of suggestions that could be made - this
isn't a final product, and I'll do a lot of cleanup if this is ever
going to be included in a "real" program. This was just the result
of a couple hours of experimentation. There are many leftover
and inaccurate comments as well.
* = $1000
;my own equates
height = 8
score = $81 ; - $86 6 digits
ptr0 = $90
ptr1 = $92
ptr2 = $94
ptr3 = $96
ptr4 = $98
ptr5 = $9a
tmp = $9c
count1 = $a0
;c64 code here
jsr $0c00 ;call playbin
jmp 384
;atari code starts here
sei
cld
ldx #$ff
txs
;gfx setup
lda #0
sta colubk
;initialize score value
ldx #5
lda #4 ;5 or greater
clr1 sta score,x
clc
adc #1
dex
bpl clr1
;clear data pointers
ldx #11
lda #0
clr2 sta ptr0,x
dex
bpl clr2
lda #1
sta ctrlpf ;$a
lda #0
sta $0281;joystick inputs
sta wsync
ldy #3
pos0 dey
bne pos0
sta resp0
main
;3 lines of
lda #2;on
sta vsync
sta wsync
lda #%01000110
sta colup0;colour
sta vsync
sta wsync
sta vsync
sta wsync
lda #0;off
sta vsync
;37 lines of
ldy #37
lda #2 ;on
sta vblank
dovblank sta wsync
dey
bne dovblank
lda #0 ;off
sta vblank
lda #227
sta tim64t
startscore
;make pointers to num data
ldx #5
ldy #10
loop2 lda score,x
asl a
asl a
asl a
adc #<zero
sta ptr0,y
lda #0
adc #>zero
sta ptr0+1,y
dey
dey
dex
bpl loop2
lda #254 ;orange
sta colup0
; lda #%10001110 ;blue
sta colup1
lda #3
sta nusiz0
sta nusiz1 ;3 copies close
sta wsync
ldx #22
blah2 dex
bne blah2
sta resp0
sta wsync
ldx #22
blah1 dex
bne blah1
nop
sta resp1
sta hmclr
lda #%10100000;2 more than belo
sta hmp1
lda #%11000000;
sta hmp0
sta wsync
sta hmove
sta wsync
;draw score
lda #7
sta count1
ldx #10
pause1 dex
bne pause1
nop
nop
nop
mainloop ldy count1 ;3
lda (ptr0),y ;5
sta grp0 ;3 = 11
; sta wsync ;3 = 3
bit $00
lda (ptr1),y ;5
sta grp1 ;3
lda (ptr5),y ;5
tax ;2
txs ;2
lda (ptr2),y ;5
sta tmp ;3
lda (ptr3),y ;5
tax ;2
lda (ptr4),y ;5 = 37
ldy tmp ;3
sty grp0 ;3
stx grp1 ;3
sta grp0 ;3
tsx ;2
stx grp1 ;3 = 17
dec count1 ;5
bpl mainloop ;3 = 8
lda #0
sta grp0
sta grp1
endoframe lda intim
bne endoframe
sta wsync
;30 lines of overscan
lda #35
sta $0296
;increase score
ldx #5
scloop1 inc score,x
lda score,x
cmp #10
bne scdone
lda #0
sta score,x
dex
bpl scloop1
scdone
cont ;wait until overscan is over
lda $0284
bne cont
nop
nop
sta $02
jmp main
*= $1200
zero .byte %00111100
.byte %01100010
.byte %01010010
.byte %01010010
.byte %01001010
.byte %01001010
.byte %01000110
.byte %00111100
one .byte %01111110
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00111000
.byte %00011000
two .byte %01111110
.byte %00100000
.byte %00010000
.byte %00001000
.byte %00000100
.byte %00000010
.byte %01000010
.byte %00111100
three .byte %00111100
.byte %01000010
.byte %00000010
.byte %00011100
.byte %00011100
.byte %00000010
.byte %01000010
.byte %00111100
four .byte %00001100
.byte %00001100
.byte %00001100
.byte %01111110
.byte %01001100
.byte %00101100
.byte %00011100
.byte %00001100
five .byte %00011000
.byte %01100100
.byte %00000010
.byte %00000010
.byte %01100100
.byte %01011000
.byte %01000000
.byte %01111110
six .byte %00111100
.byte %01000010
.byte %01000010
.byte %01111100
.byte %00100000
.byte %00010000
.byte %00001000
.byte %00000100
seven .byte %00001000
.byte %00001000
.byte %00001000
.byte %00000100
.byte %00000100
.byte %00000010
.byte %00000010
.byte %01111110
eight .byte %00111100
.byte %01000010
.byte %01000010
.byte %00111100
.byte %00111100
.byte %01000010
.byte %01000010
.byte %00111100
nine .byte %00111100
.byte %00000010
.byte %00000010
.byte %00000010
.byte %00111110
.byte %01000010
.byte %01000010
.byte %00111100
*= $1ffc
.word $f000
.word $f000
--
Robin Harbron macbeth@xxxxxxxxxxx
http://www.tbaytel.net/macbeth
--
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/stella.html
Don't post pirate BINs to Stellalist. Be a programmer, not a pirate.
Write the best game, win framed autographs of famous Atari alumni!!
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] 6 digit score display , Erik Mooney | Thread | Re: [stella] 6 digit score display , Erik Mooney |
| [stella] Re: Source Code (Eckhard's, Garon Grainger | Date | Re: [stella] different 6 digit scor, Erik Mooney |
| Month |