Subject: Re: [stella] supercharger good; busted code bad From: KirkIsrael@xxxxxxxxxxxxx Date: 13 Jul 2002 22:41:58 0000 
> I only had a brief test, but I think I got "normal" behaviour. > But I think the problem might be in your constants section. I > don't think DASM allows you to specify addressing mode in > constant definitions. So "LDA FlapStenght" isn't going to load > a value of 4 into the accumulator. It's loading a value from TIA > register 4. So you should change accesses to your constants to > something like "LDA #FlapStrength". D'ohh! Thanks! That fixed it! One last mystery though... my Sprites are refelcted opposite on the 2600 relative to all 3 emus! the code below is 'correct' on the supercharged atari, backwards everywhere else... > Also you might like to read the section in the DASM manual > about the SEG pseudo opcode. It allows you to define your > variables in a more flexible way than direct equates. If > you have some code like this: How foolish will I sound if I say "there's a dasm manual?" but that technique you say sound good, I'll put in my code and 2600 101 snip ;JoustPong (in progress) 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? ;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 #6 ; CONSTGravDelay 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 #4 ; CONST: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 #4 ; CONST: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 #6 ; CONSTGravDelay 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 %00000000 STA REFP0 ;show reflected version SkipMoveLeftP0 LDA #$80 ;Right? BIT SWCHA BNE SkipMoveRightP0 LDX #$F0 LDA %00001000 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 %00000000 STA REFP1 SkipMoveLeftP1 LDA #$08 ;Right? BIT SWCHA BNE SkipMoveRightP1 LDX #$F0 LDA %00001000 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 "The desires of the heart are as crooked as corkscrews." W.H.Auden  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] supercharger good; bus, Eckhard Stolberg  Thread  RE: [stella] supercharger good; bus, Nicolás Olhaberry 
Re: [stella] supercharger good; bus, Eckhard Stolberg  Date  Re: [stella] Help Interpreting Code, Roagie 
Month 