|
Subject: [stella] test.a65 From: jvmatthe@xxxxxxxxxxxx Date: Sun, 13 Oct 1996 03:39:55 -0400 (EDT) |
; INCLUDE 2600.A65
VSync EQU $00
VBlank EQU $01
WSync EQU $02
RSync EQU $03
NuSiz0 EQU $04
NuSiz1 EQU $05
CoLuP0 EQU $06
CoLuP1 EQU $07
CoLuPf EQU $08
CoLuBk EQU $09
CtrlPf EQU $0A
RefP0 EQU $0B
RefP1 EQU $0C
Pf0 EQU $0D
Pf1 EQU $0E
Pf2 EQU $0F
ResP0 EQU $10
ResP1 EQU $11
ResM0 EQU $12
ResM1 EQU $13
ResBl EQU $14
AudC0 EQU $15
AudC1 EQU $16
AudF0 EQU $17
AudF1 EQU $18
AudV0 EQU $19
AudV1 EQU $1A
GrP0 EQU $1B
GrP1 EQU $1C
EnaM0 EQU $1D
EnaM1 EQU $1E
EnaBl EQU $1F
HMP0 EQU $20
HMP1 EQU $21
HMM0 EQU $22
HMM1 EQU $23
HMBl EQU $24
VDelP0 EQU $25
VDelP1 EQU $26
VDelBl EQU $27
ResMP0 EQU $28
ResMP1 EQU $29
HMove EQU $2A
HMClr EQU $2B
CxClr EQU $2C
CxM0P EQU $00
CxM1P EQU $01
CxP0FB EQU $02
CxP1FB EQU $03
CxM0FB EQU $04
CxM1FB EQU $05
CxBlPf EQU $06
CxPPMM EQU $07
Inpt0 EQU $08
Inpt1 EQU $09
Inpt2 EQU $0A
Inpt3 EQU $0B
Inpt4 EQU $0C
Inpt5 EQU $0D
SwchA EQU $280
SwACnt EQU $281
SwchB EQU $282
SwBCnt EQU $283
InTim EQU $284
Tim1T EQU $294
Tim8T EQU $295
Tim64T EQU $296
T1024T EQU $297
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG $80
Temp0 DS 1 ;
MaxScr EQU $20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG $1000
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
@1 STA 0,X ; store $00 at 0+X
INX ; increment X
BNE @1 ; 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
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 CoLuP0 ; set player 0 to black
STA CoLuP1 ; set player 1 to black
STA CoLuPf ; set playfield to black
STA CoLuBk ; set background to black
; wait for overscan to finish, then start blanking
@1 LDA InTim ; find current value of timer
BNE @1 ; 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
STA Tim64T ; start vblank timer
; Setup the playfield graphics
LDA #$0E ; color white
STA CoLuBk ; background is white
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
LDX #$20 ; put $20 (32d) in X
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 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
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 #$05 ; done with data yet?
BNE NxtLine ; if not do next line
LDA #$00 ; get ready to clear playfield
STA Pf0 ;
STA Pf1 ;
STA Pf2 ;
LDX #$8C ; get ready to finish screen
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Table1: DW $6040 ; 0010
; 0110
DW $4040 ; 0010
; 0010
DW $00E0 ; 0111
; 0000
Table2: DW $1177 ; 01110111
; 00010001
DW $4173 ; 01110011
; 01000001
DW $0077 ; 01110111
; 00000000
Table3: DW $2AEA ; 01010111
; 01010100
DW $88EE ; 01110111
; 00010001
DW $00E8 ; 00010111
; 00000000
Table4: DW $20E0 ; 0111
; 0100
DW $A0E0 ; 0111
; 0101
DW $00E0 ; 0111
; 0000
Table5: DW $1577 ; 01110111
; 00010101
DW $1517 ; 00010111
; 00010101
DW $0017 ; 00010111
; 00000000
Table6: DW $AAEE ; 01110111
; 01010101
DW $A8AE ; 01110101
; 00010101
DW $00E8 ; 00010111
; 00000000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Blank: NOP ; spacer
@1 LDA InTim ; find out current status of timer
BNE @1 ; 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 $17FC ; vectors for 2k cart
DW Start ; reset
DW Start ; IRQ
ORG $1FFC ; vectors for 4k cart
DW Start ; reset
DW Start ; IRQ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [stella] robbie.rom, jvmatthe | Thread | [stella] test.rom, jvmatthe |
| [stella] robbie.rom, jvmatthe | Date | [stella] test.rom, jvmatthe |
| Month |