[stella] New 2600 programmer's first attempt

Subject: [stella] New 2600 programmer's first attempt
From: "Scott Huggins" <shuggins@xxxxxxxxxxxxxx>
Date: Tue, 15 Feb 2000 23:59:54 -0600
After reading the Stella manual (several times) and other demo source code, I've tried to position a sprite (player 0) on scanline 95.  I'm not sure about the horizontal positioning of the Sprite, but I've written to RESP0 in the VBLANK routine.
 
Basically, the purpose of this demo is to draw a bunch of vertical lines for the playfield and position my sprite and that's about it.  It was borrowed from a post by Erik Mooney.  My sprite is a goofy looking space ship that I made.  I tried it out by re-placing the player 0 (the TANK) in the source of combat with it and compiling it.
 
Anyway, I'm getting an error where my coments indicate. Look for "<=".  This indicates my error. All I'm trying to do is load the X register (?)
 
Anyway, I'm sure the error is simple (well, I hope!) and wouldn't otherwise bother you guys....but I'm stuck. 
 
Thank you very much...from a dedicated guy *trying* to get the hang of the 2600.
 
Scott
 
----------code----------------
 
[include vcs.h etc, etc, etc.....]
 
scanctr = $91   ; variable used to count scanlines (looking for scanline 95)
                ; the Y registerwill be used to count scanlines from 191 - 0.  This
                ; variable (scanctr)
                ; will count from 0 - 191.  When Y meets scanctr, then we are at
                ; scanline 95 and it's time to draw our sprite.
 
;  *** usual initialize
Start
 
    SEI  ; Disable interrupts, if there are any.
    CLD  ; Clear BCD math bit.
    LDX  #$FF
    TXS  ; Set stack to top of RAM.
 
    LDA #0  ;Zero everything except VSYNC.
B1  STA 0,X
    DEX
    BNE B1
 
MainLoop
    JSR  VerticalBlank ;Execute the vertical blank.
    JSR  CheckSwitches ;Check console switches.
    JSR  GameCalc      ;Do calculations during Vblank
    JSR  DrawScreen    ;Draw the screen
    JSR  OverScan      ;Do more calculations during overscan
    JMP  MainLoop      ;Continue forever.
 
VerticalBlank          ;Beginning of the frame - at the end of overscan.
    LDA  #2            ;VBLANK was set at the beginning of overscan.
    STA  WSYNC 
    STA  WSYNC
    STA  WSYNC
    STA  VSYNC ;Begin vertical sync.
    STA  WSYNC ; First line of VSYNC
    STA  WSYNC ; Second line of VSYNC.
 
    LDA #44        ;Set timer to activate during the last line of VBLANK.
    STA TIM64T
;
; Now we can end the VSYNC period.
;
    LDA #0
    STA  WSYNC ; Third line of VSYNC.
    STA  VSYNC ; Writing zero to VSYNC ends vertical sync period.
    RTS
 

CheckSwitches
    LDA #0          ;Clear collision latches
    STA CXCLR       ;In a real game, we'd probably check the collision
                    ;registers before clearing them.
    LDA SWCHA       ;Read joystick 0
    STA Joystick0   ;Store for later use
    RTS
 

GameCalc
    LDA #0
    STA COLUBK  ;Background will be black.
 
    LDA Joystick0  ;Load the joystick switches
    AND #$F0    ;Only care about top four bits, which is joystick 0
    CMP #$F0    ;If top four=1111, stick centered, don't change
    BEQ NoStick
    LDA #$88    ;otherwise, make the background medium blue
    STA COLUBK
NoStick
 
    LDA #$55    ;Alternate pixels: 01010101 = $55
    STA PF0
    STA PF2     ;Store alternating bit pattern to the playfield registers
    ASL         ;Because PF1 displays in the opposite bit order from PF0
    STA PF1     ;and PF2, we need 10101010 instead of 01010101.
    LDA #1
    STA CTRLPF  ;Let's reflect the playfield just cause we feel like it
    STA RESP0   ; SCOTT
    RTS
 
 
 
DrawScreen
    LDA INTIM
    BNE DrawScreen ;Loops until the timer is done - that means we're
                   ;somewhere in the last line of vertical blank.
    STA WSYNC      ;End the current scanline - the last line of VBLANK.
    STA VBLANK     ;End the VBLANK period.  The TIA will display stuff
                   ;starting with the next scanline.  We do have 23
cycles
                   ;of horizontal blank before it displays anything.
 
    LDY #192       ;We're going to use Y to count scanlines.
 
;Everything is already set, so let's just count scanlines.
;We're at the beginning of WBLANK of the first TV line right here.
ScanLoop
    STY COLUPF     ;Keep changing the playfield color every line for some
                   ;neat-looking stripes.
    STA WSYNC      ;Wait for end of scanline
    INC scanctr    ; increment our scanline ctr
    DEY
    LDA Y
    CMP #$91         ; compare the Y register to value in memory location $91
    BEQ drawSprite   ; get rid of this if things start breaking
    BNE ScanLoop     ;Count scanlines.
    RTS
 
drawSprite    ;  I'm trying to load the 8 bytes of sprite data at end of file
       
LDX #08   ; <=  I GET A SYNTAX ERROR HERE!!!   Al I'm trying to do is load the X register with hex value 8
cont  STA WSYNC
         LDA Sprite,X
         STA GP0
         DEX
         BNE cont
         RTS
 
OverScan        ;We've got 30 scanlines to kill.
    LDX #30     ;In a real game, we'd probably be doing calculations
 
Sprite
     .byte   %11111000   ; this is a goofy looking ship
     .byte   %00100110
     .byte   %11111111
     .byte   %00111110
     .byte   %11100100
     .byte   %00101000
     .byte   %11111000
     .byte   %00000000
 

;Starting positions for PC
    org $FFFC
    .word Start
    .word Start
Current Thread