Jump to content

Robert M

Members
  • Content Count

    1,533
  • Joined

  • Last visited

Everything posted by Robert M

  1. [quote="davidcalgary29 I always thought "Toki" was vastly underrated. It's an excellent game on the Lynx. I agree 100%! I think Toki is an excellent platform game. The difficulty ramps very smoothly, and each level provides a unique environment. It was all I was playing for a month. I could never get past the 5 level boss, so I decided to take a break
  2. Switchblade II is an okay game. I thought it was too easy. I was able to beat it the third time I played. Things I didn't like: - They offer information in the stores for 10 credits. If you buy it you get great tidbits like: "Jump to avoid enemy shots" = duh! "Napalm is reccommended" = Napalm sucks! Never buy napalm! - It was too short/easy. - I took more damage from falling into the scattered stationary fires than I did from most enemies. - The only weapon upgrade worth taking is the Guided Missle. It rarely misses. It passes through walls! It does excellent damage. Compared to other platform games for the Lynx, I thought it was rather weak. I am still trying to beat Toki, now that is a challenge I am enjoying. Viking Child is fun and pleasantly long. I still haven't beaten that one either. Cheers!
  3. retone, 187 lbs has already been taken. Please pick a different weight. Cheers!
  4. My weight as of 5 minutes ago: 229 lbs The dreaded holiday season is approaching
  5. 1. The cartridge combat has 27 game variations, what is the minimum number of bits the combat program can use to keep track of the current variation? ANSWER: 2^5 = 32 >= 27, so 5 bits are necessary. 2. The 112 game variations for Space Invaders. ANSWER: 2^7 = 128 >= 112, so 7 bits are necessary. 3. The Atari 2600 Display is 160 pixels horizontally by 192 pixels vertically (NTSC) To position a player on the screen you must enumerate its horizontal and vertical position. How many bits are needed to store the horizontal and vertical positions of the player? ANSWER: 2^8 = 256 >= 192 >= 160, so 8 bits are needed for each horizontal or vertical position. 16 bits total. 4. In Surround the "arena" is 40 blocks wide by 20 blocks high. Each block in the playfield is either filled or empty. How many bits are needed to remember the status of the playfield? How many bits are needed to remember the horizontal and vertical position of each player? ANSWER: Since each block of the area has one of 2 states (filled or empty), we need a bit for each block. Number of Blocks = 40 * 20 = 800 bits needed for the arena. 2^6 = 64 >= 40 so 6 bits are needed to store each player's horizontal position. 2^5 = 32 > = 20 so 5 bits are needed to store each player's vertical position. This is true. For problem 3 we could enumerate all the pixels on the screen (160 x 192 = 30720 possible positions) 2^15 = 32767 >= 30720, so you could store the player's position using 15 bits instead of 16 as required for storage of separate X and Y coordinates. For problem 4 we could do the same trick for storing the player positions 2^10 = 1024 >= 800, so you could store each player's position using 10 bits instead of the 11 needed to store X and Y positions separately. You may be wondering why then would you not always use the method of storage that uses the fewest bits? The answer is that the code of the program must process the data in the format that you choose, and it is easier to write code for separate X and Y coordinates than it is to write code for single enumerated position. In assembly language programming you will find there are many tricks that can be performed by using exotic data formats. I will provide examples much later in the course. Now it is time to move on to Lesson 3 - Codes
  6. Lesson 2: Enumeration In lesson 1 we introduced the idea of a bit. We learned that a bit is the smallest piece of information in a computer. We learned that a bit can have either the value 1 or 0. We also learned that we as programmers can assign any meaning we wish to individual bits used by our program. In this lesson we will look at the important programming practice of enumeration. Let's say you want the to write a computer game where the player is picking fruit. There are 4 kinds of fruit in the game: Apples, Oranges, Bananas, and Cherries. All 4 kinds of fruit can be on the screen at the same time. Therefore, your program must keep track of each piece of fruit on the screen, and remember what kind of fruit it is so that it can draw the fruit correctly, and award the correct points to the player when they pick the fruit. The easiest way to track the different kinds of fruit is to enumerate them Apple = 0 Orange = 1 Banana = 2 Cherries = 3 All information in a computer is stored in bits so let's convert that to a bit: Apple = 0 Orange = 1 Banana = ?? Uh oh! We have run out values to enumerate our fruit because a bit can only be 0 or 1. To enumerate the fruit we will have to combine 2 bits together like this: Apple = 00 Orange = 01 Banana = 10 Cherries = 11 The 2 bits together have 4 possible combinations so we can enumerate the fruits in our program using 2 bits for each piece of fruit. What if our program needs to have 8 different kinds of fruit, how many bits do we need then? The answer is 3 bits. 3 bits together have 8 value combinations 000 001 010 011 100 101 110 111 = 8 combinations. The fomula for the number of combinations possible given N bits is: combinations = 2 ^ N = (2 to the power of N) So an enumeration of W items will require a minimum of: N = log2 (W) Exercises: ------------ Here are some real world examples of enumeration from Atari 2600 games. For each item calculate the minimum bits the program must use to keep track of the particular piece of information. 1. The catridge combat has 27 game variations, what is the minimum number of bits the combat program can use to keep track of the current variation? 2. The 112 game variations for Space Invaders. 3. The Atari 2600 Display is 160 pixels horizontally by 192 pixels vertically (NTSC) To position a player on the screen you must enumerate its horizontal and vertical position. How many bits are needed to store the horizontal and vertical positions of the player? 4. In Surround the "arena" is 40 blocks wide by 20 blocks high. Each block in the playfield is either filled or empty. How many bits are needed to remember the status of the playfield? How many bits are needed to remember the horizontal and vertical position of each player? I will post the answers in 24 hours.
  7. Alright! These are good responses. The key points that you need to take away from this exercise are: 1. The light is either on or off, there are only 2 possible conditions for the light. The light represents a single digital bit. 2. The two states of the bit can represent ANY TWO OPPOSING conditions: 1 or 0 YES or NO "The Player is alive" or "The player is Dead" "The Fire button is pressed" or "The fire button is not pressed" 3. All information in a digital computer at its lowest level is composed of bits. There is no piece of information smaller than a single bit. So how does this relate back to the questions I asked above? 1. What does it mean when the light is on? It means what ever you the programmer want it to mean is true. 2. What does it mean when the light is off? The opposing condition for the meaning you give to the bit is true. By common convention the values 1 and 0 are used to represent the states of bits. One usually means on, yes, or true. Zero usually means off, no, or false. Notice that I said "by convention" and "usually". You could just as well use "A" and "B" or "Zip" and "Zap", but this makes it hard to talk with others about bits, so we will use 1 and 0 in this class. This is the great secret of all computers and computer programming in general. When you program in assembly language you have complete control/responsibility to provide the meaning of the values of the bits that make up your program. If you want a a bit to mean "The Dragon is awake" when it is 1 and "The dragon is asleep" when it is zero, that is fine. Just understand that the meaning you give to the bit is completely your own invention and when the user pulls out cartridge with your program and puts another one in, that program will apply a completely different meaning to the EXACT SAME BIT. Alright let's move onto Lesson 2: Enumeration
  8. The footpedals are basically 3 buttons that you can map to any of the joystick directions or the firebutton. The footpedals have a pass through plug so you can plug a joystick into the pedal. Any direction/button programmed to a footpedal is no longer connected for the joystick. Example: If you map one of the footpedals to the fire button, then the firebutton on the joystick will no longer do anything, you have to push the corresponding foot pedal to "fire" So you can really use a set of footpedal with any game. I could see it being very useful for games that use 2 controllers like Raiders of the Lost Ark or Solaris. Is it better? That's debatable and it comes down to personal preference. For Thrust+ you can combine the footpedals with a driving controller. I haven't tried that yet, but I think it would work quite nicely. Cheers!
  9. Thanks everyone for your guesses so far and encouraging words. vb_master, I will be delivering my final weight in the nearest pound, so a decimal guess is bound to lose if others pick 186 and 187. I should have made this clear in the rules. I will assume your guess is 187, but feel free to change your entry one time to some other weight. Thanks,
  10. Assembly Language Programming - Lesson 1 This course assumes no prior knowledge of computer programming. While the examples given in the course are targeted at the 650X family of procesors, the ideas presented will apply to assembly language programming and often programming in general. Please feel free to posts comments or questions into the Lesson threads. If you wish to ask a private question don't hesitate to send me a PM. Materials needed: - The assembler we will be using for this course is DASM. We won't need the assembler for the first several sessions, I will provide links for downloading and installing DASM. DASM is available for DOS, Windows (in a DOS window), Amiga, and Macintosh (OS-9 or OS-X). So the development tools will be available on many platforms. Lesson 1: The Most Important Thing You Need to Know about Computers. Imagine you have a black box with a single light bulb sticking out of it. Sometimes the light is on, sometimes it is off. Please answer these questions: 1. What does it mean when the light is on? 2. What does it mean when the light is off? Until you can answer these questions, programming computers will never quite make sense. Everything else we do in this course will be built on this radical idea. Please take a moment to consider these questions, and try to answer them by responding within this thread. Please be sure to explain the reason for your answers? I will review your responses and provide a definitive answer on Tuesday evening (Central Time, U.S.A.). Hint: There are no wrong answers, its just a mental exercise to broaden your mind. Regards,
  11. Okay, Thanks to everyone for participating in Part I. It is now time for Part II. As of 5 minutes ago I weigh 230 pounds. To enter the contest, you must guess what I will weigh on June 13th, 2004 (My 35th Birthday). Each person is restricted to a single guess. If multiple people guess the same weight then the first one to have posted the guess is the winner. You can make you guess anytime from now until the contest ends, but only your first guess will count, and obviously the longer you wait the more weights will be already taken. I will post my weight every Friday until the contest closes. So If you wait to enter you may be able to guess my final weight by the progress I am making. Wait to long and someone else may take your guess. hehe. The Prize: The winner will receive $1 of Atariage store credit for every pound I lose from now until June 13th, 2004. If the winner entered part one of this contest, then they will receive an additional bonus of $5 credit. If I fail to lose at least 10 pounds by June 13, 2004. Then the first 50 people that entered the contest will each receive $5 of store credit! I am aiming for 190 lbs! Good-luck! To both of us.
  12. Look at it this way... You're losing easy access to the collection for a while, but in the long run you are gaining a Player 2. Cheers!
  13. Okay, I'll give it a go. Give me a few days to get organized. I will post the first session this weekend. Cheers!
  14. I think the best you could possibly hope foe would be 20 different colors in a single scanline. But you would need to use either the sprites or the missles to get a couple more colors. Plus you will have absolutely no time to do anything else. A more practical trick might be to just make a rapidly moving horizontal stripe of color through a title made out of Playfield graphics. That would require only 2 timed register writes per line.
  15. Dang! All I've found in the last 3 months is a badly worn BlackJack. Nice find.
  16. Hi, Andrew is doing a great job on explaining 2600 programming, but I notice that his lessons assume some familiarity with programming. Are there any complete assembly programming newbies interested in learning how to write assembly code so that you could apply Andrew's tutorials to make a 2600 game? I would start from the assumption that you know nothing about programming computers. The course would teach computer science fundamentals leading into understanding 6502 Assembly programming basics, and ending with advanced techniques and tricks for fast, small code. Who would be interested? Regards,
  17. Try PM'ing goatdan. What other games would be good candidates for massive linking? Cheers!
  18. Atari 2600 Memory Map: ---------------------- $0000-002F TIA Primary Image $0030-005F [shadow] TIA $0060-007F [shadow-partial] TIA $0080-00FF 128 bytes of RAM Primary Image (zero page image) $0100-002F [shadow] TIA $0130-005F [shadow] TIA $0160-017F [shadow-partial] TIA $0180-01FF [shadow] 128 bytes of RAM (CPU stack image) $0200-022F [shadow] TIA $0230-025F [shadow] TIA $0260-027F [shadow-partial] TIA $0280-029F 6532-PIA I/O ports and timer Primary image $02A0-02BF [shadow] 6532-PIA $02C0-02DF [shadow] 6532-PIA $02D0-02FF [shadow] 6532-PIA $0300-032F [shadow] TIA $0330-035F [shadow] TIA $0360-037F [shadow-partial] TIA $0380-039F [shadow] 6532-PIA $03A0-03BF [shadow] 6532-PIA $03C0-03DF [shadow] 6532-PIA $03E0-03FF [shadow] 6532-PIA $0400-07FF [shadow] Repeat the pattern from $0000-03FF $0800-0BFF [shadow] Repeat the pattern from $0000-03FF $0C00-0FFF [shadow] Repeat the pattern from $0000-03FF $1000-17FF Lower 2K Cartridge ROM (4K carts start here) $1800-1FFF Upper 2K Cartridge ROM (2K carts go here)
  19. Just one small comment on this lesson: I don't know if this muddies the water for newbies, but I like to think of the 6502 as having 6 registers: A, X, Y, PC, SP, ST. A, X, Y are the ones Andrew already mentioned. PC: Is a 16-bit register its points to the next address the processor is going to fetch an instruction byte from. It is automatically incremented by the processor during execution. As a programmer you can change PC with branch and jump instructions. SP: Is an 8-bit stack pointer. From the CPUs point of view the stack is located from $0100 to $01FF. In the 2600 this maps to the 128 bytes of RAM in the PIA. Note that the same 128-bytes of RAM appear in the memory map of the CPU: $0080 - $00FF, $0180-$01FF, etc. The SP register is modified when instructions push or pull data from the stack. The stack grows downward in memory as items are added so it is generally initialized to $FF. You can set the SP from the X register using TXS. You can figure out how much data is on the stack by using TSX to transfer SP to X and find the difference from the value you initialized it to. ST: Is the processor status register. When the CPU performs operations on data in A, X, or Y it sets or resets bits in ST to indicate mathematical properties of the result of the operation. A whole tutorial would be needed to explain how to understand the status flags and use them in your code for optimum efficiency. One thing worth noting here is you can push the ST register onto the stack to save the result of an operation, perform a different operation and then pop the old result off the stack to look at it. This can be handy. Also, as I stated earlier the 128 bytes of RAM repeat through the address space. The TIA registers do this as well. In short, you can point the SP register at the TIA registers and then write to the TIA by pushing data onto the stack. This technique was intended by the designers of the Atari 2600. Many registers in the TIA use bit 2 to control the register function. Bit 2 maps to the Z-bit in the ST register, so you can test for a condition and then push the ST onto the stack. The result of the operation will turn the function in the TIA on or off without you needing to look at it. Very efficient. Okay I'll shut up now. Thanks for putting these lessons together Andrew. Regards, ST: Is the
  20. Thanks for clearing that up Andrew.
  21. Hi, I am trying to make use of segments in the Gravity Ball code, but I am not sure if I am using them correctly. The first time I declare a new segment, should I put the ORG pseudo-op before or after the SEG pseudo-op? Like this: ORG $0080 SEG.U RAM ORG $F000 SEG CODE Or, like this: SEG.U RAM ORG $0080 SEG CODE ORG $F000 Thanks,
  22. Robert M

    ...

    Okay, as stated before try to grab an onion an puagt some in your Ramen for variety. Onions last a long time when refrigerated. I like to keep a bag of frozen peas around and throw some of them in the pot too. Ramen Gravy trick: - Cook the Ramen and remove from pan to drain. - Put a tablespoon of butter/margarine in the pan, and 1 Tablespoon of flour. - Stir constantly cooking on medium heat until the mixture (called a rue) is bubbling and starting to brown. - Slowly add a 1/2 cup of water and the flavor packet. If you don't add the water a little at a time you will get lumps. - Cook until it is gravy of a thickness you like. Add more water if its too thick. - Pour over noodles. Cheap stuff: - Big bags of flour. If you are willing to bake your own bread and biscuits you can make them really cheap. - Big bags of rice. - Big bags of potatoes. - Big bags of dry beans (lots of time to cook, but dirt cheap and good for you) I lived on Beans and Rice for years in college. - Bacon. Its not cheap per unit, but a little goes a long way. Cook it all and save it in the frig. Add a single slice to a dish to give it zest. Save the fat from cooking to make hashbrowns from your big bag of potatoes. Good-luck.
  23. I can think of 2 things: 1. Responsive player control. Visible lag is no good. 2. When you die, you can see that it was because of something you did or failed to do, not because the game "cheated" or blindsided you. That way you are motivated to try again because you know if you play better you will get farther.
  24. Hi Dan, You might consider moving the Summit to this place: http://www.capcom.com/nickelcity/frammap.xpml Nickel City Northbrook (Formerly Super Just Games) 555 Waukegan Rd Northbrook, IL 60062 Tel: (847) 559-8727 They have a room about the size of the room at the hotel with tables and power outlets. Its normally for kid's parties, but the owner would probably be interested in renting it for a classic gaming show that will bring in customers. You get the advantage of on site food: hot dogs, pizza, soda etc and about 100 video games many for free and none more than 20 cents to play after a $2 admission at the door. It checked it out yesterday and the place is very clean and kept very nicely. It might help draw more people to the event this year plus get some extra people just coming to play some games. Cheers!
×
×
  • Create New...