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 |