Subject: [stella] robbie.a65 From: jvmatthe@xxxxxxxxxxxx Date: Sun, 13 Oct 1996 03:38:46 -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 Temp1 DS 1 Temp2 DS 1 Temp3 DS 1 Temp4 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 #$15 ; STA Temp1 ; LDA #$00 ; STA Temp0 ; this sets up reference to Table LDA #$05 ; number of screens per frame STA Temp2 ; LDA #$30 ; number of frames facing initial direction STA Temp4 ; store it LDA #$08 ; initial direction STA Temp3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 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 #$06 ; color grey STA CoLuP0 ; make robot grey LDA #$0E ; color white STA CoLuBk ; make the background white JSR Blank ; do blanking stuff STA WSync ; one more line for good measure ; Draw the screen LDA Temp4 ; get frames facing current direction CMP #$30 ; is it $30? BNE DontTurn; if not, don't turn him LDA Temp3 ; get current direction EOR #$FF ; NOT that value STA Temp3 ; store new direction STA RefP0 ; make player face other direction LDA #$00 ; make A $00 STA Temp4 ; new numer of frames DontTurn LDX #$20 ; get ready to do $20 (32d) blank lines Loop1 STA WSync ; do one blank line DEX ; decrement counter X BNE Loop1 ; if X not $00 then do another line STA WSync ; start at end of WSync so we know where to put ; player graphic LDX #$05 ; prepare to position player graphic 0 Waitin DEX ; killin' time BNE Waitin ; keep on killin' time STA ResP0 ; start player 0 at this point in screen STA WSync ; now next line LDY #$00 ; start at line 0 of current frame Draw LDA (Temp0),Y ; indirect call to memory ; Y holds frame number of line and Temp1 and ; the following byte hold address that current ; frame data starts at STA GrP0 ; store this line of data in player graphic 0 register CPY #$09 ; are we on $09th line? BNE Onward ; if not go on to next line LDA #$00 ; set A to $00 STA CoLuP0 ; and set player graphic 0 color to black Onward STA WSync ; done with this line INY ; go to next line of graphics data CPY #$0E ; done with this frame? BNE Draw ; if not done, do another line ; note that last line of data effective cuts off ; player graphic 0 since it is a "clear" line LDX #$9E ; do rest of screen, $9E (154d) lines approx. Loop2 STA WSync ; do a line DEX ; count down BNE Loop2 ; if not at zero, do another line DEC Temp2 ; decrement number of screens on this frame BNE NextScr ; if not zero, go to next screen LDA #$05 ; set up to do 5 more frames STA Temp2 ; and store it ; now get new frame info LDA Temp0 ; get current frame address ADC #$0D ; add 14 lines to its address CMP #$38 ; have we reached end of Table? BNE StoreFr ; if not, store new frame's address LDA #$00 ; if so, start over with first frame StoreFr STA Temp0 ; NextScr DEC Temp4 ; decrement number of frames remaining facing this ; direction JMP Top ; done with this frame, go back to Top ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG $1500 ; start table at $1500 Table: DW $7838 ; 00111000 ; 01111000 DW $1878 ; 01111000 ; 00011000 DW $FF7E ; 01111110 ; 11111111 DW $99BD ; 10111101 ; 10011001 DW $7618 ; 00011000 ; 01110110 DW $9429 ; 00101001 ; 10010100 DW $006E ; 01101110 ; 00000000 DW $7838 ; 00111000 ; 01111000 DW $1878 ; 01111000 ; 00011000 DW $FF7E ; 01111110 ; 11111111 DW $99BD ; 10111101 ; 10011001 DW $3A18 ; 00011000 ; 00111010 DW $95A9 ; 10101001 ; 10010101 DW $005C ; 01011100 ; 00000000 DW $7838 ; 00111000 ; 01111000 DW $1878 ; 01111000 ; 00011000 DW $FF7E ; 01111110 ; 11111111 DW $99BD ; 10111101 ; 10011001 DW $5C18 ; 00011000 ; 01011100 DW $95A9 ; 10101001 ; 10010101 DW $003A ; 00111010 ; 00000000 DW $7838 ; 00111000 ; 01111000 DW $1878 ; 01111000 ; 00011000 DW $FF7E ; 01111110 ; 11111111 DW $99BD ; 10111101 ; 10011001 DW $6E18 ; 00011000 ; 01101110 DW $15A8 ; 10101000 ; 00010101 DW $0076 ; 01110110 ; 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] matt.rom, jvmatthe | Thread | [stella] robbie.rom, jvmatthe |
[stella] matt.rom, jvmatthe | Date | [stella] robbie.rom, jvmatthe |
Month |