|
Subject: Re: [stella] Gas gauge - revisited From: Joe Grand <jgrand@xxxxxxxxxxxxxx> Date: Wed, 21 Mar 2001 22:57:54 -0500 |
The easiest way would be faking it with the background color, like Chris suggested.
Let's say, you'd do a defined background color change during a scannline like this:
<-- Green --><--------- normal BG color ------------> | Cycle X
Now, you'd always change the background color at the beginning of a scannline and again on cycle X. Now you can easily draw a growing red PF bar within the green bar.
Attachment:
TEST.BIN
Description: Binary data
processor 6502
include vcs.h
Temp0 = $80
MaxScr EQU $20
ORG $F800
Start: SEI ; Initialize the machine, set interrupt disable
CLD ; clear decimal mode
LDX #$FF ; start X at $FF (255d)
TXS ; transfer it to the stack
INX ; set X to $00
TXA ; transfer it to the accumulator, A
B1:
STA 0,X ; store $00 at 0+X
INX ; increment X
BNE B1 ; if X is not zero yet, go back to @1
; the above loop zeros out $00 to $FF
; at this point X is $00
LDA #$04 ; number of lines alike
STA Temp0 ;
Top: ; Start a new screen
;LDA #$05
LDA #$35
STA TIM64T ; set timer for $05*$40 = $140 (320d) clocks
; do overscan stuff here
LDA #$00 ; put $00 in A
STA PF0 ; clear out first playfield section
STA PF1 ; clear out second playfield section
STA PF2 ; clear out third playfield section
STA GRP0 ; clear out player graphic 0
STA GRP1 ; clear out player graphic 1
STA ENAM0 ; clear out missile 0
STA ENAM1 ; clear out missile 1
STA ENABL ; clear out ball
STA COLUP1 ; set player 1 to black
STA COLUP0 ; set player 0 to black
STA COLUBK ; set background to black
;wait for overscan to finish, then start blanking
B2:
LDA INTIM ; find current value of timer
BNE B2 ; if timer not zero, wait
; when we get here, A will be $00
LDY #$02 ; this is 10000010b
STY WSYNC ; wait for end of current line
STY VBLANK ; start vertical, disable latches, dump orts
; this is from the 10000010b
STY VSYNC ; start vertical sync
STY WSYNC ; send three lines while doing vertical sync
STY WSYNC
STY WSYNC
STA VSYNC ; end vertical sync
;LDA #$05 ; put $05 in A
LDA #$43
STA TIM64T ; start VBLANK timer
; Setup the playfield graphics
LDA #%10111000 ; green
STA COLUPF
JSR Blank ; do blanking stuff
STA WSYNC ; one more line for good measure
; Draw the screen
; GOAL: draw 1 2 3 4 5 6 7 8 9 0 across screen in playfield graphics
; JOE'S NEW GOAL: draw multi-colored gas gauge in playfield graphics
LDX #100 ; position drawing vertically
PreDraw:
STA WSYNC ; wait for one line to be done
DEX ; decrease X by one
BNE PreDraw ; if not done with blank space, do another line
LDX #$00
NxtLine:
STA WSYNC ; wait for line to finish
LDA #%00110100 ; red
STA COLUBK ; set background
LDA #$00
STA PF0
STA PF1
STA PF2
; First half of screen
;LDA Table1,X ; get the Xth line for playfield 0
;STA PF0 ; store it in playfield 0 register
;LDA Table2,X ; get the Xth line for playfield 1
;STA PF1 ; store it in playfield 1 register
;LDA Table3,X ; get the Xth line for playfield 2
;STA PF2 ; store it in playfield 2 register
NOP ; wait
NOP ; wait
NOP ; wait
NOP ; wait
NOP ; wait
NOP ; wait
; Second half of screen
LDA Table4,X ; get the Xth line for playfield 0
STA PF0 ; store it in playfield 0 register
LDA Table5,X ; get the Xth line for playfield 1
STA PF1 ; store it in playfield 1 register
;LDA Table6,X ; get the Xth line for playfield 2
;STA PF2 ; store it in playfield 2 register
DEC Temp0
BNE NxtLine
LDA #$04
STA Temp0 ; Temp0 is how many lines alike
INX ; increment X
CPX #$02 ; done with data yet? PF for gas gauge is only 2 bytes wide
;CPX #$08
BNE NxtLine ; if not do next line
STA WSYNC
LDA #$00 ; get ready to clear playfield
STA PF0
STA PF1
;STA PF2
STA COLUBK
LDX #71 ; get ready to finish screen (172 lines total)
Finish:
STA WSYNC ; do one line
DEX ; decrement counter
BNE Finish ; if not on last line, do another one
JMP Top ; done with this frame, go back to Top
Blank:
NOP
B3:
LDA INTIM ; find out current status of timer
BNE B3 ; if timer is zero, then done, otherwise check timer
STA WSYNC ; A is $00, kick out another line
STA VBLANK ; blank off, disable latches, remove dump
RTS
org $FE00 ; *********************** GRAPHICS DATA
;Table1: .byte $00, $00, $00, $00, $00, $00, $F0, $F0 ;PF0 left half (20 bits total)
;.word $6040
;.word $4040
;.word $00E0
;.word $0000
;Table2: .byte $00, $00, $00, $00, $00, $00, $F0, $F0 ;PF1 left half
;.word $1177
;.word $4173
;.word $0077
;.word $0000
;Table3: .byte $00, $00, $00, $00, $00, $00, $F0, $F0 ;PF2 left half
;.word $2AEA
;.word $88EE
;.word $00E8
;.word $0000
Table4: ;.byte $00, $00, $00, $00, $00, $00, $F0, $F0 ;PF0 right half (20 bits total)
.byte $F0, $F0
;.word $20E0
;.word $A0E0
;.word $00E0
;.word $0000
Table5: ;.byte $00, $00, $00, $00, $00, $00, $FC, $FC ;PF1 right half
.byte $FC, $FC
;.word $1577
;.word $1517
;.word $0017
;.word $0000
;Table6: .byte $00, $00, $00, $00, $00, $00, $00, $00 ;PF2 right half
;.word $AAEE
;.word $A8AE
;.word $00E8
;.word $0000
ORG $FFFC ; vectors for 4k cart
.word Start ; reset
.word Start ; IRQ
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] Gas gauge - revisited, Manuel Polik | Thread | Re: [stella] Gas gauge - revisited, Rob |
| RE: [stella] Qb: Final Version (2., Joe Grand | Date | [stella] Gas gauge demo, Joe Grand |
| Month |