Jump to content

Roy

Members
  • Content Count

    59
  • Joined

  • Last visited

Everything posted by Roy

  1. Got another question for you guys... For a few days I have been having trouble with my graphics being corrupt and random garbage being drawn on the bottom of the screen in MESS and the prosystem emulator along with sound messing up once and a while. I was looking around, and thought maybe I was having timing issues (I think?) when I came across people talking about DLIs. I added a DLI at the beginning and end of my DLL, and to see if I was putting code in the right place I incremented a debug variable to look at in the memory viewer in MESS. Before I added any additional code, it seemed some graphic glitching on my main screen disappeared, but the graphics I purposely coded in were still scrambled. I burned my program to an eprom to see what happened on real hardware, and the game runs flawlessly! (Fixed at the time of writing, just emulator header issues.) Question is: How did adding two DLIs that do nothing except increment a value, fix random junk being drawn to the bottom of the screen? I'll post the ROM I'm working on. This time, all I have is a title screen that plays music from Ms Pac Man. (I borrowed the sound engine from Atari's source code) When you push up, it kills the music and jumps to the 'playing' section of the game. Ignore the Facility 15, just a silly fake company. The first version is before I added the DLIs and the second one is without. Both have the header, so you'll need to strip it before thrown into an eprom. I can't seem to fix the header issue, so I'm posting a 48KB file that runs fine without the emulator corrupting graphics. I'm perfectly running it on a Ballblazer eprom cart with a bit of code modification. Thanks for any insight. I'm stumped how this 'fixed' my glitching. EDIT: Warning, horrible audio screeching will be heard, but sounds fine on real hardware. 7800demo DLI.a78 7800demo NO DLI.a78
  2. Awesome, that was it! Thank you!
  3. Cool, I have been looking for this information too. For the ball blazer, do you only need to add the inverter to that free spot, or do you still need to switch some address and data pins around?
  4. Thanks for the reply, I actually printed that document yesterday. That thing has been my 7800 bible so far, thanks for writing it by the way! Like you said, its way easier on the eyes.
  5. Sorry for bumping my thread again, but I finally made some progress. I decided to start from scratch using CA65, and going over all the information provided by these forums, I can finally display sprites and understand how DL & DLL's work. (For the most part. Still have a lot to learn) I would be using 7800basic, but I find I have far more fun with assembly. Next, I need to make my display lists dynamic instead of hard-coded routines. Here's a working .a78 file: 7800demo.a78 All it does is display two sprites, and move them horizontally. Though I have a question about the blue ship I made. In its display list, I'm using direct mode to specify where the graphics are, but no matter what I set the width to (This is where it specifies how many bytes to read, right?), it also shows the enemy ship sprite to the right of it. Any ideas why? Thanks again to everyone who helped me a while back! Edit: Never mind, I seem to have fixed my issue. Seems in the DL entry for bytes to fetch, it was reversed. Like to fetch 4 bytes with the palette 0, I would use #$1C instead of #$04 like I originally did... I don't quite understand this, but it works. Found out using the MESS debugger and editing the DL entries by hand. I also added dynamic DLs for the player and one enemy ship, and uploaded the new .a78 file. 7800demo.a78
  6. Bumping my year old thread for a new question! For anyone using CA65, what does your .cfg look like? I was attempting to write my own, but the .map showed that everything was not in the right spot and the file ended up too small... I'm coming back to coding for the Atari after getting a bit more experience under my belt with the NES and feel ready for a new challenge. Thanks in advance to anyone who can help! EDIT: Scratch that just got it working.
  7. Okay, thanks for the clarification. Things are beginning to make a bit more sense.
  8. Thanks for the replies everyone. I think I figured it out. Since a sprite can exist in only one or two zones as a time, you need two entries to cover both. The second entry needed if the sprite does not fit in the first zone. The holey dma is needed when the sprite address is adjusted, so the display list entry does not start displaying a totally different piece of sprite. When the sprite completely fits into the new zone, the second display list entry is no longer needed, so the code skips that section until the sprite enters a new zone. Is this thinking correct? If so, that was way less complicated than I though it to be.
  9. Thanks for the reply, Bob! I think I got what your saying about vertical movement. I guess my thinking was that DL's had to be 'static'. I'll keep going over the code and see what I can figure out!
  10. Hello, new 7800 programmer here. (Though I have a decent grasp on assembly itself.) Like others, I am trying to understand how the system displays graphics. I have a pretty good idea how the data should look, but in code samples I am looking at, there's a few things I am having a hard time visualizing. I'll use this same thread for any questions I may have in the future. PasteBin link here First, I commented a bunch of address locations with data from the build DLL section. Purely to help me see whats going on. Does all of this make up an entire screen where they essentially point to display list entries? Sorry if I am not making much sense, still getting a grasp on assembly jargon. Second, What is the section of code labeled "add DL end entry on each DL" for exactly? I know it adds an entry to the end of each DL, but I don't quite see how the code works here. I guess that dlpnt variable is throwing me off. I was under the impression that a DL was made of either 4 or 5 bytes. (Address low, palette, width, etc...) Last, I don't quite understand how a sprite defined in a display list moves on the Y axis. I have read a lot of documentation, but much of it is still over my head. Sorry again if I am not making much sense. My first assembly experience was on the NES, and it's display method was radically simpler. (To me anyway.) Thanks for taking your time to read this!
×
×
  • Create New...