Jump to content

Cafeman

+AtariAge Subscriber
  • Content Count

    8,159
  • Joined

  • Last visited

Posts posted by Cafeman


  1. still can't get Player1 to display.

     

    Player0 display fine. Player 1 is another color and mapped to the same offset as Player 0, but those pixels are black (bg color) and don't display.

     

    I set my PRIOR register to $21 because I think bit 5 must be set to graft player 0 to player 1. Thus PRIOR is 0010 0001 where bit zero is a 1 to give priority over the playfield. See any prob with that?!

     

    I store the pointer for Player0 at $20,$21.

     

    I store the pointer for Player1 at $22,#23.

     

    My screen RAM starts at $1800. My pmbase is at $2000 ( edited -- I think). Player0 starts at $2400, Player1 starts at $2500. I'm in Antic E, so my player RAM is cutting into the screen RAM and I'll have to change that soon, but it shouldn't have an effect on Player1 not displaying when Player0 does, right?

     

    Any thoughts?

     

    [ 08-18-2001: Message edited by: Cafeman ]


  2. tillenterprises,

     

    Yes, thanks for pointing that out -- 5200 Pitfall 2 has mildly improved visuals, but it also has twice the game!

     

    Has anybody ever beaten that *extremely difficult* 2nd level? With the wild bats and manic jumps and scampering bugs/rats? I sure didn't, but typing this makes me feel sad because it reminds me that I ran over a defenseless racoon tonight.


  3. The above code works. I assumed it is using Player0. I want to have a Player1 address which is 256 decimal bytes (#$100 bytes) beyond Player0's, correct?

     

    It seems Player0 is at $2430. Would that make Player1 at $2530?

     

    What would really help me is to see some example code setting up the addresses for Player0 and Player1. I tried to put stuff like this:

     

    Player0 equ $31 ; defining Player0

    Player1 equ $32 ; defining Player1

    ...

     

    The thing that confuses me is that I can't see where $2430 is #$1024 bytes past a PMBASE address?! It seems like $20,$21 holds not a base address but Player0's address.


  4. Here's some snippets of my code. This is from a prior version of it, but it's pretty much the same.

     

    ; ************ Hardware Adresses ***************************

     

    DMACTL equ $D400 ;DMA Control

    sDMACTL equ $07 ;DMA Control Shadow

    PMBASE equ $D407 ;PM base address

    CHBASE equ $D409 ;Character set base

    GRACTL equ $C01D ;Graphics control

    PRIOR equ $C01B ;PM priorities

     

    ...

     

    ;************* Setup Player/Missile registers ***************

     

    lda #$3A ;Enable DMA (single line resolution/

    sta sDMACTL ;normal background)

    lda #$20 ;Set PM base address $20

    sta PMBASE

    lda #$03 ;Enable players and missiles

    sta GRACTL

    lda #$16 ;Color of player 0

    sta sCOLPM0

    ldy #$00

    lda #$00 ;Size of player 0 (pick from 0,1,3 vals)

    sta SIZEP0

    ; I'm trying to store #$30 at location $20 and

    ; to store #$24 at location $21:

    lda #$30 ;start player's memory at $2430

    sta $20 ;lo byte

    lda #$24

    sta $21 ;hi byte

    ;

    lda #$01 ;Give players priority over playfield

    sta PRIOR

     

    ...

     

    ;************ Copy player data to RAM ********************************

     

    pmloop1

     

    lda pm1,y ;Get data

    ; The following is Indirect Indexed Addressing.

    ; It stores the value of the accumulator into the address found

    ; $20 (lo byte) and $21 (hi byte), which by is incremented from the

    ; original value of $2430.

    sta ($20),y ;Write it into RAM (RWL -- it was $2430 in Dan's example)

    iny

    cpy #$08 ;Copy 8 bytes (Compare reg Y to Hex 8)

    bne pmloop1

     

    [ 08-17-2001: Message edited by: Cafeman ]


  5. I am unable to get Player1 to work, let alone graft it to Player0.

     

    Following Dan's PM example as I have been, I believe PMBASE is set to point to $20 (low byte) and $21 (high byte). I've been using this. The value stored here is initially $2430. I assume this is Player0 that I've been using.

     

    Anyway, could one of you guys show me a bit of code showing how to define the Players at the top, and simple loops or code showing how to refer to them? How do you specify the xxx+256 kind of statements? Or do you use pmbase+1024 for player0, PMbase+1536 for player1? Is that 1024 a decimal or hex number? Huh? Huh? Huh?!


  6. Bump. Still thinking about this.

     

    If you use a DLI to switch the memory pointer for a player, then you probably need to display the highest-on-screen player first, then at the DLI switch to the lower one.

     

    Game code draws Player0A and Player0B in different memory locations. Other variables store each split-player's horizontal and vertical locations. All the collisions and animation is handled in the normal game code, but during the DLI you decide which of the 2 is on top and switch pointers at that line. I imagine it would take some kind of counters set up in the game code that the DLI would check. After all, you don't have much time during DLI.

     

    During DLI you blindly switch to draw the 'lower' player. During normal game code you handle everything else, but during DLI you switch pointers. Hence, if Player0A and Player0B get on the same horizontal lines, you'll miss at least 1 frame and flicker will occur. I think?!

     

    Question: where do you put the DLI, since a DLI is invoked by setting a bit on a certain modeline? Perhaps you have the DLI bit enabled on every modeline in the display list?


  7. 5200 defender.bin -limit

     

    try the -limit option -- you need it on computers these days.

     

    Read the info .txt file that came with it. There are other options you can use (and must use at times, such as -Pengo which allows you to control Pengo.)


  8. AHA! I knew I saw a picture of SNES River Raid years ago in a magazine! I've asked all kinds of people if they had access to a picture of it, and nobody could dig one up -- I asked some recent mag editors, I asked Bill Kunkle, nobody had one.

     

    So ... what are you going to do with those prototypes? How about posting a picture of River Raid SNES, or better yet, a few pictures? Or email them to me and I'll put 'em up at my own River Raid Homage Page!!


  9. Dan, in many games the flickering only starts when sprites get on the same horizontal lines. Do you think the coder implemented both methods in that case?

     

    In other words, when he detects Player0's 2 uses getting close to one another horizontally, he branches to the every-other-frame routine instead?

     

    Otherwise, wouldn't the birds flicker all the time regardless of their position?


  10. How can you tell if you put too much processing inside a Display List Interrupt? If you take too many cycles (remembering that you basically only have the time from the end of one horizontal electron beam until it gets to the beginning of the next horizontal scanline & turns on again).

     

    What is the impact and/or effect of not being out of the DLI in time?


  11. How exactly is this done?

     

    Here is my guess. Even if I'm wrong, I'd like to talk about how best to do this since 4 players is quite limiting.

     

    Anyway, I've read that if you know that 2 objects will be on different horizontal planes, that this is the best time to split the sprite. IS it done via a DLI? IN other words, put a DLI halfway down the screen, and the DLI routine changes the player bitmap to the 2nd object, and changes its location in memory? Then at line 1, the swapping occurs again?

     

    Or perhaps it is done in conjunction with careful timing of the which scanline you are on? (note that I currently have no clue how to implement this kind of coding)? Or is there a whole other (and hopefully, Better) way?

     

    Oh btw, my first game (which is no longer titled "Firefighter") probably won't need to implement this kind of sprite/player swapping, but I'd still like to get an idea of how to do it. Like in Joust, all those birds are just 4 players?! I notice that when they get on the same horizontal plane, swapped/split players start to blink. Perhaps this is why the Pac-Man 2600 ghosts flicker? Every ghost is draw every 4th frame?

     

    Thoughts are welcome!


  12. Thanks, DEBRO!

     

    I'm working on the Player Missile side of things currently, but I will get back the redefined character sets stuff soon. It's a bit tedious to draw (on graph paper) all the redefined characters that you you need in building backgrounds and characters, isn't it.

     

    Question -- if using a character mode such as Antic mode 4, can you can still use players and missiles, which would simply overlay themselves over the bg graphics? Is this correct?


  13. Oh, and now that I've seen a DLI in action, I'm not going to use it on the 'clouds' at all. Cycling the entire cloud's color from dark to light looked better.

     

    I want the cloud to look like it is made of cloud, not grey stone. With more resolution, I can actually draw the cloud curls within the cloud body; it looked too blocky in low rez.

     

    Here's my next question though -- since this use of a DLI is tied to a specific mode line, how do you use a DLI to get more colors on a player that moves vertically?


  14. Yes, I did that on purpose.

     

    Isn't it just butt-ugly in that low resolution though! It's difficult to draw anything because you don't have small enough pixels. That's why I upgraded to Antic E -- no pictures to show of that version yet.

     

    I couldn't find the proper address of Player2, either -- I read what it should be, but I wasn't paying close enough attention and must have calculated it wrong, because the 2nd player (a lightning bolt) never displayed.

     

    Is it true that each player takes 256 bytes, and that player 1 is 256 bytes after player0 in memory?


  15. So, do you think that to get multi-colored characters, most programmer either used multiple players/missiles, or used character mode?

     

    For example in Joust, the bird is one color and its lance is probably a wide missile.

     

    I always wondered why 5200 games (such as Q*bert) had such limited colors at times on their main players. If you are in character mode, you still have the same player and its one-color limitation though, correct? So you'd have to use bg graphics using redefined characters to get more colors, and perhaps just not use Players/missiles?


  16. Just to add a possible solution to the mystery ... I think the scratchy bassy sound is caused by using the -limit option, which all new PC owners must use with the VSS DOS emulator. When I forgot to type this option, I noticed the sound was okay.

     

    I still never got any other 5200 emulators to work for some reason ...

×
×
  • Create New...