Jump to content

Mallard Games

Members
  • Content Count

    102
  • Joined

  • Last visited

Community Reputation

14 Good

About Mallard Games

  • Rank
    Chopper Commander
  • Birthday June 23

Contact / Social Media

Profile Information

  • Gender
    Male
  • Location
    Dark Basement
  • Interests
    Atari 2600 Homebrew
  • Currently Playing
    Mallard Season
  • Playing Next
    It's a Secret

Recent Profile Visitors

265 profile views
  1. How do i make a .sym file, the tutorial states: Which only creates a list file and Stella is complaining about there being no symbol file to load... 🤯 UPDATE: rc7e helped me in the ZeroPage stream with getting a sym file created. The answer for anyone else who needs it is to append -s like so: dasm kernel.asm -lkernel.lst -skernel.sym -f3 -v5 -okernel.bin Now here's what I've figured out, after the button is pressed at address 5116: bmi CheckFireDone it jumps to address 506e: 506e lsr 506f lsr 5070 lsr 5071 tax 5072 cmp $1ff6,x 5075 Which is actually in the middle of my bankswitching code... Return_Code tsx lda $02,x lsr lsr lsr lsr lsr tax cmp SelectBank1,x ; bank 1 rts So it does try to bankswitch but then ends up in 109a 10a9 TitleScreen_Kernal 10a9 WaitForVblankEnd_TitleScreen 10a9 bit TIMINT 10ac bpl WaitForVblankEnd_TitleScreen 10ae ldy #31 10b0 TopPaddingLoop 10b0 sta WSYNC 10b2 dey Which makes absolutely no sense to me... UPDATE: scratch that i think i have an idea of what's going on. Short version: Super Epic Fail on my part! Now the problem is how can i change it so the jumps inside CheckState in bank 3 work? or just how do i refactor my code??? ☠️🤮☠️
  2. Question how do I emulate the fire button being pressed on player 1's controller while in the debugger?
  3. Finally got a chance to look at the source code again and could not see any glaring issues. What I thought was the code jumping into no mans land was actually a mistake on my part. In fact it is jumping into one of the Vertical Sync code. It then jumps back into bank 1. What's is very strange to me is despite the code setting the state correctly, it never jumps to the proper bank despite the bankswitching code being there like it's completely ignoring it.
  4. Yes, that's how I came to the conclusion above. Funny thing is if you look into the listing file the very last used address is: 8 4ffe 00 10 .word.w InitSystem I was exhausted today so I couldn't look into further. Hopefully tomorrow I can do some more testing and see if I can figure it out.
  5. @Flojomojo @Thomas Jentzsch @Nukey Shay @stephena @Arenafoot I can confirm the FlashAir wireless capabilities works on the Atgames Portable Frogger/Pac-Man Edition.
  6. I did everything you stated and still can't get it to transition. What's strange is despite the macro ensuring everything lines up correctly it still jumps to what seems like the middle of the input subroutine. What's strange is the pc is at 5xxx which doesn't line up what what the listing file. Source Code: https://www.dropbox.com/sh/5snzytblleo9zzi/AABhxkPUVp2V_GZmItcrLZOIa?dl=0
  7. What do you mean by By the way moved the subroutine into bank 3 and added it to the macro. Still am having issues. Source: https://www.dropbox.com/sh/d65mqk4crtc4xr3/AACJb9jisk6PcyJu-Ndw4gZja?dl=0
  8. The question is how do I align the code so it's "exactly at the address the cpu will fetch the next instruction from". Also I moved the 2 pla's up so they do execute and removed the jmp that will never execute or succeed if it does. CheckState lda GameState ; check the gamestate cmp #STATE_TITLESCREEN ; has it changed beq StateCheckDone ; if not then branch pla ; clear low byte of jump address from stack pla ; clear high byte of jump address from stack cmp SelectBank2 ; bankswitch to bank 2 StateCheckDone rts
  9. Fixed the RTS not being cancelled. CheckState lda GameState ; check the gamestate cmp #STATE_TITLESCREEN ; has it changed beq StateCheckDone ; if not then branch cmp SelectBank2 ; bankswitch to bank 2 pla ; clear low byte of jump address from stack pla ; clear high byte of jump address from stack jmp GameMode ; jump to game mode StateCheckDone rts Tried moving that bit of code so it is right above reset, and it stops the crashing but now it just sticks to the title screen. ; *********************************************************************************** ; Start of Bank 1 ; Title Screen Bank ; *********************************************************************************** seg Bank_1 ; end of uninitialized segment - start of ROM Bank 1 org $1000 ; start ROM at $1000 rorg $1000 ; start ROM at $1000 JUMP_TABLE CheckState lda GameState ; check the gamestate cmp #STATE_TITLESCREEN ; has it changed beq StateCheckDone ; if not then branch cmp SelectBank2 ; bankswitch to bank 2 pla ; clear low byte of jump address from stack pla ; clear high byte of jump address from stack jmp GameMode ; jump to game mode StateCheckDone rts ; we'll call the start of our program "Reset". Reset sei ; Disable Any Interrupts cld ; Clear BCD math bit. ldx #$FF ; put X to the top... txs ; ...and use it reset the stack pointer ; Clear RAM and all TIA registers lda #0 ; Put Zero into A, X is at $FF Clear sta 0,x ; Now, this doesn't mean what you think... dex ; decrement X (decrease X by one) bne Clear ; if the last command resulted in something ; that's "N"ot "Equal" to Zero, branch back ; to "Clear" ; ************************************************************************** ; One time initializations ; ************************************************************************** lda #BLUE sta COLUBK ; set the background color to sky blue lda #BROWN sta COLUPF ; set the playfield color to brown lda #WHITE sta COLUP1 ; set crosshair color to white lda INTIM ; get a random value from INTIM sta Random ; use it to seed the random number generator lda #STATE_TITLESCREEN ; 0 = title screen state sta GameState ; store it AttarctMode TitleScreenLoop jsr VerticalSync ; perform vertical sync jsr CheckJoystick ; check for joystick input jsr CheckState ; check if the gamestate has changed jsr TitleScreen_Kernal ; jump to title screen kernal jsr OverScan ; (3 13) jump to OverScan Routine jmp TitleScreenLoop ; jump to start of loop TitleScreen_Kernal WaitForVblankEnd_TitleScreen bit TIMINT ; load timer... bpl WaitForVblankEnd_TitleScreen ; killing time if the timer's not yet zero ldy #31 ; 16 scanline of padding on the top TopPaddingLoop: sta WSYNC ; wait for sync dey ; decrement y bne TopPaddingLoop ; loop until the top of the screen is padded 16 scanlines ldy #64 ; Y is going to hold how many lines we have to do ; ...we're going to count scanlines here. theoretically ; since this example is ass simple, we could just repeat ; the timer trick, but often its important to know ; just what scan line we're at. ldx #02 ; interlaced sta WSYNC ; We do a WSYNC just before that so we don't turn on sta VBLANK ; End the VBLANK period with the zero ;*********************** Scan line Loop ScanLoop_TitleScreen sta WSYNC ; (3 0) Wait for the previous line to finish lda pf0dataleft-1,y ; (4 4) load left pf0 data into the acumulator sta PF0 ; (3 7) and store it lda pf1dataleft-1,y ; (4 11) load left pf1 data into the acumulator sta PF1 ; (3 14) and store it lda pf2dataleft-1,y ; (4 17) load left pf2 data into the acumulator sta PF2 ; (3 21) and store it lda pf0dataright-1,y ; (4 25) load right pf0 data into the acumulator sta PF0 ; (3 28) and store it *MUST OCCUR AFTER CYCLE 28* SLEEP 3 ; (3 31) sleep for 3 cycles lda pf1dataright-1,y ; (4 35) load right pf1 data into the acumulator sta PF1 ; (3 38) and store it *MUST OCCUR AFTER CYCLE 38* SLEEP 5 ; (5 43) sleep for 5 cycles lda pf2dataright-1,y ; (4 47) load right pf2 data into the acumulator sta PF2 ; (3 50) and store it *MUST OCCUR AFTER CYCLE 50* dex ; (2 52) decrement x bne ScanLoop_TitleScreen ; (2/3 54/55) and repeat if we're not finished with all the scanlines. ldx #02 ; (2 56/57) load 2 into x register dey ; (2 58/59) subtract one off the line counter thingy bne ScanLoop_TitleScreen ; (2/3 60/61 61/62) and repeat if we're not finished with all the scanlines. sty PF0 ; clear PF0 register to prevent garbage from appearing on the screen sty PF1 ; and PF1... sty PF2 ; and PF2 just in case ldy #31 ; (2 62/63 63/64) 16 scanlines of padding on the bottom BottomPaddingLoop: sta WSYNC ; (3 0) wait for sync dey ; (2 2) decrement y bne BottomPaddingLoop ; (2/3 4/5) loop until the bottom of the screen is padded 16 scanlines rts ; ************************************* ; Data Section Follows ; ************************************* Source Code: https://www.dropbox.com/sh/zjbuabjg4i0p7c9/AAAXbjqu6ODRiGrQqi8_sR5Aa?dl=0
  10. I know the contest already ended but, I'm already subscribed.
  11. If your talking about cmp SelectBank2 ; bankswitch to bank 2 It bankswitches to the second bank where the game mode code is. The bankswitching takes so time to happen so I added the 3 nop instructions to pass the time. I have removed them since.
  12. Back again, I have some good news progress has been slow but, steady. Some minor bug fixes have been made that should improve the code a bit. Now comes the hard part, getting the game to transition from the title screen to the game mode. Here is the code I am using: CheckState lda GameState ; check the gamestate cmp #STATE_TITLESCREEN ; has it changed beq StateCheckDone ; if not then branch cmp SelectBank2 ; bandswitch to bank 2 nop nop nop jmp GameMode ; jump to game mode StateCheckDone rts It's almost exactly like the bankswitching code except it's a jump instead of jump to subroutine and there are check to see if we need to perform the jump based on what the current state of the game is. The issue is when I try to perform the bankswitch the game crashes on Stella with "Illegal Instruction". My guess is the 2600 doesn't like me abandoning the CheckState routine altogether if the game state is changed, but at that point the subroutine doesn't need to finish since the rest of the code doesn't need to execute at all. I must say in all seriousness though this is starting to hurt my head. Source: https://www.dropbox.com/sh/ku4ip913q718h0n/AABpPC0h8maEuBAL4U7dtl3Oa?dl=0
  13. Weird they both say 2.8" LCD screen on the box. Sorry about that I actually don't know much about these including what year they're from. That's why I'm asking the community for advice.
  14. Which of these 2 AtGames Flashback Portable's would you recommend I buy? 1) Atari Flashback Portable Console (80 Games Included) (eu) /retro by Atari ESRB Rating: Everyone 2.6 out of 5 stars  7 Xbox One $29.00(15 used & new offers) 2) Atari Flashback Portable Deluxe Edition - Hand Held Console by Atari 4.6 out of 5 stars  7 $29.99(5 used & new offers)
  15. Should I just go for last years model then since I can just add in any exclusive games via the SD card?
×
×
  • Create New...