Subject: [stella] supercharger good; busted code bad From: KirkIsrael@xxxxxxxxxxxxx Date: 13 Jul 2002 17:07:36 0000 
So, I got my supercharger mojo working...(though I still need to rearrange my workspace:PC's to my left, TV to my right, Atari at my feet. And I can't watch tv or have PC sounds while I'm doing the supercharger thing. Have people been able to isolate the potential "gotchas" of using a supercharger to test your code? I think I've heard some 2K and 4K images have problems, but I don't know if there's something a homebrewer can do to make it more or less likely to work via the supercharger. But I had a bigger problem: my code doesn't work on the real thing, dang it. It works great on StellaX and Z26 (!) but not via the supercharger, and not on PCAE (though it breaks differently on PCAE) Here's the code. It's still pretty small, and I thought straightforward. Could anyone who feels so inclined take a look? (You can get the bin from the game's website at http://alienbill.com/joustpong/ SNIP ; yet another moving dot by Kirk Israel processor 6502 include vcs.h org $F000 P0YPosFromBot = $80 P0VisibleLine = $81 P0DrawBuffer = $82 P0VertSpeed = $83 P1YPosFromBot = $84 P1VisibleLine = $85 P1DrawBuffer = $86 P1VertSpeed = $87 But0WasOn = $88 But1WasOn = $8A GravTimer = $8B ;CONSTANTS FlapStrength = #4; GravDelay = #6 ;How often does gravity pull 'em down? MaximumSpeed = #6 ;generic start up stuff... Start SEI CLD TXS LDX #$FF LDA #0 ClearMem STA 0,X DEX BNE ClearMem LDA #$00 STA COLUBK ;Some other initialization LDA GravDelay STA GravTimer ;initialize gravity timer (only 1 in N ticks do we pull) LDA #33 STA COLUP0 ;Set P0 Reddish LDA #66 STA COLUP1 ;Set P1 Purplish LDA #120 STA P0YPosFromBot ;P0 Initial Y Position STA P1YPosFromBot ;P1 Initial Y Position LDA #0 STA P0VertSpeed STA P1VertSpeed ;VSYNC time MainLoop LDA #2 STA VSYNC STA WSYNC STA WSYNC STA WSYNC LDA #43 STA TIM64T LDA #0 STA VSYNC CheckButton0 LDA INPT4 BMI NoButton0 ;Check to see if the button was already down LDA But0WasOn BNE Button0WasAlreadyDown ;New Button Pressed Time to Flap! LDA P0VertSpeed SEC SBC FlapStrength STA P0VertSpeed LDA #1 STA But0WasOn Button0WasAlreadyDown JMP EndButton0 NoButton0 ;button wasn't pressed, remember that LDA #0 STA But0WasOn EndButton0 CheckButton1 LDA INPT5 BMI NoButton1 ;Check to see if the button was already down LDA But1WasOn BNE Button1WasAlreadyDown ;New Button Pressed Time to Flap! LDA P1VertSpeed SEC SBC FlapStrength STA P1VertSpeed LDA #1 STA But1WasOn Button1WasAlreadyDown JMP EndButton1 NoButton1 ;button wasn't pressed, remember that LDA #0 STA But1WasOn EndButton1 ;Time to Add Gravity to Speeds of P0/P1? DEC GravTimer BNE DoneWithGravity INC P0VertSpeed INC P1VertSpeed LDA GravDelay STA GravTimer DoneWithGravity ; LDA P0YPosFromBot ; STA COLUBK ;Move the Players first, then check if hit ceiling/floor ; ; ;Add the negative of the Player 0 Vert Speed to 0 in A LDA #0 SEC SBC P0VertSpeed ;Then add the current position of p0 CLC ADC P0YPosFromBot STA P0YPosFromBot ;Add the negative of the Player 1 Vert Speed to 0 in A LDA #0 SEC SBC P1VertSpeed ;Then add the current position p1 CLC ADC P1YPosFromBot STA P1YPosFromBot ;check if player 0 hit floor LDA #10 ;10 is floor CLC CMP P0YPosFromBot BCC DoneCheckingHitFloorP0 ;we need a better bounce routine, like reducing the speed? ;speed should be positve; let's divide it my two and then ;subtract it from zero to get the new speed (i.e. a half rebound) LDA P0VertSpeed CLC ROR STA P0VertSpeed LDA #0 SEC SBC P0VertSpeed STA P0VertSpeed LDA #10 STA P0YPosFromBot ;putplayer on floor DoneCheckingHitFloorP0 ;check if player 1 hit floor LDA #10 ;10 is floor CLC CMP P1YPosFromBot BCC DoneCheckingHitFloorP1 ;we need a better bounce routine, like reducing the speed? ;speed should be positve; let's divide it my two and then ;subtract it from zero to get the new speed (i.e. a half rebound) LDA P1VertSpeed CLC ROR STA P1VertSpeed LDA #0 SEC SBC P1VertSpeed STA P1VertSpeed LDA #10 STA P1YPosFromBot ;putplayer on floor DoneCheckingHitFloorP1 ;check if player 0 hit ceiling  full rebound LDA #180 CMP P0YPosFromBot BCS DoneCheckingHitCeilingP0 LDA #0; SBC P0VertSpeed STA P0VertSpeed LDA #180 STA P0YPosFromBot DoneCheckingHitCeilingP0 ;check if player 1 hit ceiling  full rebound LDA #180 CMP P1YPosFromBot BCS DoneCheckingHitCeilingP1 LDA #0; SBC P1VertSpeed STA P1VertSpeed LDA #180 STA P1YPosFromBot DoneCheckingHitCeilingP1 ;assum horiz movement will be zero LDX #$00 LDA #$40 ;Left? BIT SWCHA BNE SkipMoveLeftP0 LDX #$10 LDA %00001000 STA REFP0 ;show reflected version SkipMoveLeftP0 LDA #$80 ;Right? BIT SWCHA BNE SkipMoveRightP0 LDX #$F0 LDA %00000000 STA REFP0 SkipMoveRightP0 STX HMP0 ;set horiz movement for player 0 ;assum horiz movement will be zero LDX #$00 LDA #$04 ;Left? BIT SWCHA BNE SkipMoveLeftP1 LDX #$10 LDA %00001000 STA REFP1 SkipMoveLeftP1 LDA #$08 ;Right? BIT SWCHA BNE SkipMoveRightP1 LDX #$F0 LDA %00000000 STA REFP1 SkipMoveRightP1 STX HMP1 ;set horiz movement for player 0 WaitForVblankEnd LDA INTIM BNE WaitForVblankEnd LDY #191 STA VBLANK STA WSYNC STA HMOVE ;main scanline loop... ScanLoop STA WSYNC LDA P0DrawBuffer STA GRP0 LDA P1DrawBuffer STA GRP1 ; here the idea is that P0VisibleLine ; is zero if the line isn't being drawn now, ; otherwise it's however many lines we have to go CheckActivatePlayer0 CPY P0YPosFromBot BNE SkipActivatePlayer0 LDA #8 ;8 lines tall STA P0VisibleLine SkipActivatePlayer0 ;turn player off then see if it should be on LDA #00 ; ;if the P0VisibleLine is non zero, ;we're drawing it ; LDX P0VisibleLine BEQ FinishPlayer0 IsPlayer0On LDA BigHeadGraphic1,X DEC P0VisibleLine FinishPlayer0 STA P0DrawBuffer ; here the idea is that P1VisibleLine ; is zero if the line isn't being drawn now, ; otherwise it's however many lines we have to go CheckActivatePlayer1 CPY P1YPosFromBot BNE SkipActivatePlayer1 LDA #8 ;8 lines tall STA P1VisibleLine SkipActivatePlayer1 ;turn player off then see if it should be on LDA #00 ; ;if the P0VisibleLine is non zero, ;we're drawing it ; LDX P1VisibleLine BEQ FinishPlayer1 IsPlayer1On LDA BigHeadGraphic1,X DEC P1VisibleLine FinishPlayer1 STA P1DrawBuffer ;now just finish counting of scanloop DEY BNE ScanLoop LDA #2 STA WSYNC STA VBLANK LDX #30 OverScanWait STA WSYNC DEX BNE OverScanWait JMP MainLoop org $FF00 BigHeadGraphic .byte %00111100 .byte %01111110 .byte %11000001 .byte %10111111 .byte %11111111 .byte %11101011 .byte %01111110 .byte %00111100 org $FFFC .word Start .word Start ;;;;THE JUNKYARD ;;See if we're going too darn fast ; LDA MaximumSpeed ; SEC ; ;;;;SBC MaximumSpeed ; Maximum Speed ; ; CMP P0VertSpeed ; BCS SpeedNotMaxxed ; ; ;; BMI SpeedNotMaxxed ;if speed  maxspeed is positive, we need to slow down ; LDA MaximumSpeed ; STA P0VertSpeed ; ;SpeedNotMaxxed SNIP  KirkIsrael@xxxxxxxxxxxxx http://kisrael.com MISTAKES "It could be that the purpose of your life is only to serve as a warning to others." Demotivators, http://www.despair.com  Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://www.biglist.com/lists/stella/
Current Thread 


< Previous  Index  Next > 

Re: [stella] "Player Graphic Creati, KirkIsrael  Thread  [stella] Help Interpreting Code, Roagie 
Re: [stella] New Song, Rob  Date  Re: [stella] Megacart, video captur, John Saeger 
Month 