Jump to content

Blogs

Our community blogs

    • 3
      entries
    • 2
      comments
    • 4542
      views

    Recent Entries

    xg4bx
    Latest Entry

    I just wanted to take a minute to apologize to the peeps on the modern gaming board. I've come off like a real asshole lately and I apologize. I brought an element of anger to the board that really doesn't have a place here and I'm sorry.

     

    Dave

    • 1
      entry
    • 0
      comments
    • 3002
      views

    Recent Entries

    Boomtown days here in Joplin. Its a local festival to celebrate the founding of this region via the lead and zinc mining.

     

    The festival is 3 days. We went on Fri and Sat.

    Friday we saw Darryl Worley

    Saturday we saw The Wille Stradlin Band and .38 Special

     

    Here are the videos we took

    http://www.youtube.com/user/edweird33

     

     

    Had a great time!!

    • 1
      entry
    • 0
      comments
    • 4308
      views

    Recent Entries

    Here is a set of ST Ram upgrades I found in a couple of systems I recently acquired. The first is a Marpet MP210A ram board with a full 4meg of ram, found in a 1040STf. The second is a Aerco easieST solderless ram board in a 520ST. It has 1mb. Would like to find documents for this to fill the other bank.

     

    • 1
      entry
    • 2
      comments
    • 6065
      views

    Recent Entries

    Introduction

     

    Recently there was some discussion if the VBXE's RGB output for the standard Atari 8-bit graphics modes, was really an improvement over the standard chroma/luma output of an Atari XE. Some said RGB was really better than Chroma/Luma while others claimed the Atari resolution of 320*240 or so pixels was too small to benefit from RGB.

     

    So I decided to take some pictures of the output so you can decide for yourself. Note that the pictures look of course a little different from real life. It is not easy to take a picture of the screen because of the 50Hz refresh frequency. If the exposure time is too short, you won't see the full screen and if the exposure time is too long, then a little movement add motion blur to the picture. But I think these pictures give a good feeling of each of three possible video outputs.

     

    For these pictures, an Atari 130XE is used with the VBXE 2 board. The 130XE was for all three video output modes connected to the same Commodore 1084S monitor. All video output modes use the same monitor settings for brightness, contrast and color.

    The video system is PAL.

     

     

    Bomb Jake - Title Screen

     

    Composite video:

    blogentry-119-127401804263_thumb.jpg

     

     

    Chroma/Luma:

    blogentry-119-12740182582_thumb.jpg

     

     

    RGB:

    blogentry-119-127401827385_thumb.jpg

     

     

     

    Bomb Jake - Title Screen - Close Up

     

    Composite video:

    blogentry-119-127401829709_thumb.jpg

     

     

    Chroma/Luma:

    blogentry-119-127401828883_thumb.jpg

     

     

    RGB:

    blogentry-119-127401824379_thumb.jpg

     

     

    Bomb Jake - In Game

    Composite video:

    blogentry-119-1274019374_thumb.jpg

     

     

    Chroma/Luma:

    blogentry-119-127401935782_thumb.jpg

     

     

    RGB:

    blogentry-119-127401938581_thumb.jpg

     

    Bomb Jake - In Game - Close Up

    Composite video:

    blogentry-119-127401941359_thumb.jpg

     

     

    Chroma/Luma:

    blogentry-119-127401940018_thumb.jpg

     

     

    RGB:

    blogentry-119-127401934593_thumb.jpg

     

     

    Note that with composite video, there seems a little shadowing in the picture. The transition from brown to blue is not immediate.

     

     

    DROL- Close Up

    Composite video:

    blogentry-119-127402072411_thumb.jpg

     

     

    Chroma/Luma:

    blogentry-119-12740207377_thumb.jpg

     

    RGB:

    blogentry-119-127402073119_thumb.jpg

     

    Note that the contrast in the colors is much better in RGB. With RGB you clearly see the red background in the author's name while the red is very faint with composite & chroma/luma.

     

     

    Amaurote

    Composite video:

    blogentry-119-127402109295_thumb.jpg

     

    Chroma/Luma:

    blogentry-119-12740210816_thumb.jpg

     

     

    RGB:

    blogentry-119-127402110481_thumb.jpg

     

     

    Amaurote - Close Up

    Composite video:

    blogentry-119-127402113065_thumb.jpg

     

    Chroma/Luma:

    blogentry-119-127402111862_thumb.jpg

     

     

    RGB:

    blogentry-119-127402106885_thumb.jpg

     

     

    Note that with composite video, you have artifacting that is causing the colors in the picture. With chroma/luma the artifacting is almost gone. With RGB there is no artifacting at all and the picture is pure black/white.

     

     

    MyDOS - Close Up

    Composite video:

    blogentry-119-127402158303_thumb.jpg

     

    Chroma/Luma:

    blogentry-119-127402156842_thumb.jpg

     

     

    RGB:

    blogentry-119-127402155657_thumb.jpg

     

     

    Note that with RGB, the character pixels are a little bigger than with chroma/luma.

     

     

    SysInfo - Small characters

    Composite video:

    blogentry-119-127402179968_thumb.jpg

     

    Chroma/Luma:

    blogentry-119-127402184345_thumb.jpg

     

     

    RGB:

    blogentry-119-127402180747_thumb.jpg

     

     

    SysInfo - Small characters - Close Up

    Composite video:

    blogentry-119-127402182456_thumb.jpg

     

    Chroma/Luma:

    blogentry-119-127402181639_thumb.jpg

     

     

    RGB:

    blogentry-119-127402183483_thumb.jpg

     

     

    Note that due to artifacting, the composite video output is hard to read. Chroma-Luma is much more readable but in my opinion the RGB output was the most readable.

     

     

    Conclusion

    It is clear the the difference between composite video and chroma/luma is great. Chroma/luma has a much better quality compared to composite video.

    The difference between chroma/luma and RGB is smaller. But in my opinion RGB output has more vivid colors, the contrast is higher and the picture is a bit sharper than with chroma/luma. So for me RGB output is the winner. Except for the case of Amaurote. In my opinion the artifacting has a positive effect on the graphics. The chroma/luma & RGB output are too sharp here.

    • 1
      entry
    • 2
      comments
    • 2590
      views

    Recent Entries

    I have one of these unit up for grabs on ebay, not an expert on these, they are rare from what I see, any input on this let me know, just listed it today!!

  1. I have a 4th grade student who is absolutely obsessed with the Doom series of games, Shadow Warrior, and Abuse. He uses DOSBOX to play them on his PC at home.

     

    Unfortunately, I cannot use these games to motivate him at school... nor should I be engaging with him in conversation about the games since they are ultra-violent. I'm wondering if anyone has some DOS game recommendations that might also be elementary school appropriate? Thanks in advance! ;)

     

    (Admittedly, I hadn't played

    or
    until tonight. I rather enjoy Abuse, but Shadow Warrior didn't really do it for me; I've never been a big fan of gory Doom-like games.)

     

    ...

     

    While I'm posting... does anyone have a GBA SP that they'd like to sell me for cheap? Currently, I let my students earn time with my Gameboy Advance, but the screen is dark and it is getting pretty battered (I've replaced the protective screen twice).

  2. My god don't know really... Working i think... The family's been growing, 2 c64, drives and printer, nothing Atari related. See you soon enough.

    • 1
      entry
    • 0
      comments
    • 3339
      views

    Recent Entries

    Someone suggested that Night Driver and Star Raiders is rare - I have the originals.

  3. Just a small portion of some of my writing....

     

    FireFly's Flight

     

    "So you don't know anythen' about the rose?" The old man searches his companion's face for recognition, just a slight twinge of remembrance. His knotted wrinkles loosen as he smiles. His teeth spotted with black flakes of chew wink at me as he spat to his side. Tobacco juice flies towards a spit bucket that once served as a coffee can for Maxwell House. Good to the last drop it gleefully promised. However in this context, Richard doesn't believe the rusted old can sitting on the warped floor board. He'd rather take his chances with the sweating can of Pabst that he was moving from one hand to the other. Just as before, the majority of the spit found its way into the coffee can. And just as before, Mr. Leathers never took his eyes off of him when he spat. The one thing about his eyes, was that they seemed to loosen up. Richard could see a barrier being chipped away, and this was a start. It was taking a long while, but it was a start. You had to give him that.

     

    "Well, no sir. I don't suppos-"

     

    "I ain't no SIR! But Gawdamn-it boy. I can't believe you haven't heard about the story of Henry and the rose." He pauses. The old man in front of Richard reaches up with a crooked hook of a finger and dives into his lip. He fishes out a moist wad of chewing tobacco and tosses it into the coffee can next to his chair. Richard exchanges the can of Pabst from his left hand in favor to his right. A light breeze is in the air. It ruffles a bit of the torn screen in front of Richard and gives him a moment to break his gaze from Old Man Leathers' stare. More or less, it gave him a reason to break away from that stare, however, he could feel Leathers' eyes looking him up and down in disbelief. And then Old Man Leathers bellowed out a hearty laugh. The laugh shook Richard, and Richard was in belief that it shook the very porch they were sitting on. He kept his eyes turned toward the gravel driveway that climbed and descended for at least a quarter of a mile before it ran into the main dirt road that people in this part of the country called Big Creek Road. Richard never saw a Big Creek anywhere, and he could barely call the trail he traveled on an actual road. In fact, he left his rental car about halfway up the driveway from here. One part of the road gave way to a mud hole that promised to eat small sedans. He figured he'd take his chances by leaving it there. Even if the shoebox was in the front seat.

     

    "Shit, boy. I really can't believe that ya' don't have a thang written down in that book of yours' right there." Leathers points at a scrapbook Richard brought during his first visit to his home. During that first visit, he was starving for information. He wrote down everything the old man was willing to share. Everything. And yet it really did not help much after all and Leathers was sharp to point that out earlier. "You ain't writin' much down these days, " he had said. And it was the truth. This story Richard was after... this adventure had turned into something more than he could imagine. It was something much biger than him, and yet he had to keep going. This visit to Leathers wasn't about putting the last piece of the puzzle together to complete the picture, it was more about finding a safety net or a padded wall.

     

    "Well. I've got to take a piss son. I'll be back and I'll tell you the story about the rose. It is nothing ol' spectacular or anything. Nothing of much to the sorts, but I think you'd find it interesting." With that Leathers rose to his feet. He used his hands to push at his legs and to push himself further up. His knees fired off like M16 shots, and his back crackled like rice paper. The boards under him moaned and creaked. They held for now, but for how many more seasons Richard would not dare venture to guess. He took the last drink of his Pabst, let out an approving belch and thudded the empty on the porch railing. Beads of the can's perspiration flew and instantly soaked into the worn wood. The screen door yelled as he opened it and it slammed to its doorframe with a thundering clap as he walked back into the house.

     

    Richard mulled over the can of Pabst and took a sip of it. He cringed at the taste, yet followed with another. The sky was starting to bruise, and the wind was picking up from the east. With it, Richard could smell the remnants of an old campfire, or perhaps someone just burning their weekly trash. Melissa and Doug were weighing heavy on his mind. He felt he needed to be somewhere else, yet he felt as though the best place for him at this moment of time was right there on Old Man Leathers' porch sipping a nasty Pabst beer and hearing some story about a rose. He felt The Tunnels calling him as well. But more so, he felt the shoe box sitting halfway down this driveway in his locked rental Kia. Just when he had the urge to just leave Old Man Leathers to his stories within stories, the screen door yelled in agony and the old man appeared again backing his way out of his house. In his arms he had a fresh pack of chewing tobacco, and a full six-pack of iced Pabst beer. Dangling from one meaty arthritic hand he held a bucket full of ice. And lastly, from his pinky, hung the carcass of what was left of the first six-pack that we started that evening. Richard smiled warmly at this man he grew fond of over the past few years, and knew he wasn't going anywhere.

     

    "You goin' to sit there like a fool and smile like a retard? Or are you going to give an old man a hand"

     

    Mr. Leathers sure knew how to make a man smile. Richard tore off the pull tab of beer can and popped it in his mouth. He placed the can on the porch railing and laughed as Mr. Leathers gave him a look of disgust. His eyes gave him away though, as this old man was just happy to have someone here to listen to his stories.

     

    Chapter Break:

     

    The Rose.

    Chapter 1

     

    Sometimes in this strange world of ours, you don't realize what you have until it is already gone. Even if it is that one thing you have to have, you don't realize its importance until it has already disappeared or is snatched from you by some inconceivable fate of someone's god or idol. What you tend to realize is the fact that its no longer yours to call your own. That is when you tend to miss it even more. Never mind the fact that it could be the best thing to ever happen to Henry in his ripened years. Never mind the fact that Ada no longer being a part of his life

     

    ...but I am Henry, dear, forever a thorn

     

    is actually a mercy upon his heart; the pain is still there. At times the pain is nothing more than missing a certain meal she once cooked. The equivalent of a splinter in your thumb so-to-speak. At other times... well... Henry likes to think of it as an earthquake. Perhaps early in the mornings you'll fell the momentary slips of the earth's plates and maybe the china in the buffet will tinkle a little bit. However, usually when those days start of with the china singing a redemption of Jingle Bells, by the afternoon that pain would build up to a point where its an explosive force that would not just topple a few china plates from their decorative perches but actually knock over the entire fucking buffet.

     

    Henry had a feeling today would be an earthquake day. His neck, stiff as starched linen, hurt as he tried to raise his hand over the heap of pillows to crunch a few of them down in order to see what time it was. He made a second attempt and then simply gave up. He knew it was no later than 7 am, so it didn't really matter what time it was. Besides, he had the same routine regardless if it was only 4 am or if it truly was 7 am. Hell it could be 2:53 am, he'd still go to the kitchen to push the start button on his coffee maker. Once Henry wakes up from his dreams, he knew he would never get back to sleep.

     

    When stretching and untangling himself from the sheets on the lonely queen sized bed (sheets she had picked out to match the shams and the curtains he reminded himself with a cringe) he noticed that his bones ached a little more and his muscles felt every bit of their sixty-four years. He pulled himself up to a sitting position with a few laborious grunts. His feet left foreign against the cold wooden floor. Wiping the sleep from his eyes he looked across the room towards the mirror on the old wash basin.

     

    The wash basin had been hers prior to the marriage. Something her mother's mother had handed down through the generations. The mirror was spotted with age in numerous places. The bottom left portion of the mirror was entirely black and unusable. Its reflection lost in time.

     

    "That dark spot there grows each time its passed down from the heartless women in your family," he had once jokingly told Ada. Now, while sitting across the room in his piss-stained boxers and staring at the useless portion of the mirror he wished to God and everything he stood for that he hadn't said that. It was a though that area of the mirror was watching him.

     

    forever a thorn...

     

    His body went through a wave of goosebumps. To his left, on his nightstand, the red numerals of his alarm clock showed 6:24 am. Turning back towards the mirror, purposely avoiding the black void, he watched as an old man focused in on him. That man looked thinly at the end of his line.

     

    Boy, he thought, the trembles are starting early this morning. I better go pack the china.

    Before all of this happened with Ada, he had considered himself a fairly young looking sixty-something year old man. But looking at the man staring back at him in the mirror brought a fear to him like no other. He knew that death was more or less on the coat tails of this haggard man and was quickly closing in for the final strike. The folds of skin beneath his eyes were slack and dark. Like meaty pendulums. The folds were plum purple and yet looked as rotten as the flesh of the plums in the dumpster thrown out behind the supermarket when a new batch would come in on the truck. He raised his hand to touch the bags under his eyes but stopped short from doing so. He feared to touch them, afraid as though his fingers would go right through the skin and he'd touch nothing but the bone (or worse yet, the bottom of his eye). Another bout of shivers went through him. Refocusing on the sick looking man staring at him, he began to notice other things as well. His hair was a messy mop the color of gray speckled with strands of his youthful brown. His eyes (his attention kept going back to them) were distant and glossy. They were

     

    purple

     

    gray with a dash of blue for taste. Ada had always told him that the color of his eyes would change with the different moods. Grayish for the times he was sad or stressed and brilliant blue for when he was happy.

     

    But the problem Henry, dear, is that I've forgotten what color of blue that was since it's been so long since you've shown it.

     

    And at that she was right. It had been a long time since he had shown that hue of blue. Furthermore, it had also been a long time since he was able to look into her own eyes and see a trusting love he once knew. He broke his gaze from that harsh reflection and rested his head on his hands. His elbows were firmly planted onto his thighs and when he removed them, there's surely be a momentary white spot from the pressure.

     

    Yep. This is routine. Same shit just happening on a different day. Except it wasn't routine. The white rose petal lying in front of the wash baisn on the floor proved it to be anything but. Henry rubbed his temples and tried to wipe the sleep from his eyes again. The rose petal remained where it was, and he would be damned if he didn't hear the china tinkering in the dining room.

     

    Chapter 2

  4. Alright! I got my supergun started!

     

    A special thank you to remowilliams for providing the TMNT board. ^_^

     

    8423_132907252859_500997859_2363792_3622230_n.jpg

     

    There's the connector itself. Here comes the board!

     

    8423_134028677859_500997859_2376484_8116051_n.jpg

     

     

    Now, how to give it power... well my weapon of choice is... a Pentium 4 power supply! You can use one of these by doing the following: Ground the green wire, so when you plug it in, it thinks that the power supply is on. When you turn on your computer, it connects these two pins, turns on the power supply, computer works. I then found +5v, +12v and -5v (only on older power supplies), and soldered them to the corresponding wires on the power supply.

     

    8423_134854112859_500997859_2383372_3105585_n.jpg

     

    What you are looking at, is a working TMNT. It turns on, the speaker is wired up (All early jamma arcade games are mono). No video driver yet (that alone is $75), but you can hear it yell COWABUNGA when you ground out the coin insert slot (aka simulating inserting a coin).

     

    What is next, is to make the controller ports, and the controllers. I decided to modify 4 Sega genesis controllers for this project. This way, if I decide to get, X-Men, I can make the appropriate cables for players 3 and 4, and we can use the same controllers. I will be modding the controllers to use direct connections, just like how the arcade likes it. Sega decided to use a microchip to control the board. Unfortunately, we need direct connections. So, the idea is to cut all the traces going to the microchip, then doing the hard wiring myself.

     

    10/20/09: Player 1 is done being wired up, player 2 is halfway done. Asked Scott for more serial cables for players 3 and 4. I am almost able to afford the video converter. After player 2 is done, I will start hacking controllers. EDIT: Player 2 is done! Hacking controllers is next!

     

    10229_157547537859_500997859_2570853_2920472_n.jpg

     

    This is the starting of wiring up player 1. Its pretty simple, trace the pin, twist and solder to the jamma harness.

     

    10229_158024847859_500997859_2574336_3070455_n.jpg

     

    Player 1 is done!

     

    10229_158259792859_500997859_2576181_6809044_n.jpg

     

    Both players are done!

     

    10/21/09: Buttons work on the Sega Genesis controller. The wires are just too short, I need to make extensions for everything, then solder those. Its best off that way, because the wires that are soldered to the board now are way too flimsy. I opted to cut the sleeve back more, and then just hot glue the cable to the controller, so it doesn't go anywhere. Controller 1 is done!

     

    8835_159087297859_500997859_2580773_8113438_n.jpg

     

    This pic is the wiring job on the controller, to make it to the pinout of the arcade.

     

    8835_159096472859_500997859_2580823_139813_n.jpg

     

    Here's the finished controller! It may look like a normal controller, but its hacked for the arcade.

     

    I got 3 of the 4 controllers made, and I got all 4 controller ports made. All I need to do is buy the video adapter, make the last controller, then the fun part, making a super nice box for it. Don't wanna have everything being loose every time you play it. ^_^

     

    03/26/10: All the controllers are now done. I just finished up the last controller. They all look the same that I have photos of, so I didn't bother taking more pics. The first controller I modded had a mushy A button... fixed that too. All it needs now is for my broke ass to gather up $40 and buy the video converter for it, and that shit is done. That is super easy to install, solder 2 wires for power, plug in the video, and play.

     

    04/05/10: Its done.

  5. So Perfect Dark is finally being re-released in March. The game will have all the features of the original N64 release plus updated, HD graphics; online capabilities; GoldenEye weapons available in multi-player; possible DLC in the future; and it now runs at a nice 60fps. I can live with this. Especially with a price of $10.

     

    • 6
      entries
    • 2
      comments
    • 21594
      views

    Recent Entries

    Hello. The purpose of this blog is to record my attempt to beat the 7800 Donkey Kong World record in one year or less. The record (according to Twin Galaxies) currently stands at 616,200. Thus, the title of this blog is the score I need (at least) to accomplish that. The reason I am doing this as a blog is because, if I make the attempt public, my usual ADD for games will not be able to take over and send me off after some other game. Also, on some level, I am kind of hoping someone reading it will comment and give me good advice I can use. And then there is the fact that while struggling away at the same agonizingly difficult game every day, it would help to pretend someone else is actually following the attempt. :) Here is how the blog is going to work. Every day, I will be playing the game at least once. Each day I will be posting both my current highest score and my highest score for the day. I will probably also post observations on the game, the attempt, and some other foolishness with each day's update. And that's it. In a year, for better or worse, the attempt and the blog are over. Not to be too cocky, but if I were 616,200, I'd start to plan my retirement.

    • 1
      entry
    • 1
      comment
    • 4282
      views

    Recent Entries

    a1t3r3g0
    Latest Entry

    What will you do in Platoon? A lot of forward thinking, a lot of jumping over tripwires and low shots, a lot of walking in a seemingly endless jungle maze, and a lot of hair-trigger shooting, but most of all you'll be dying. I found the explosives...great...now what? So let me consult Gamefaqs.com...Oh! I have to find a bridge to blow up, well that's intuitive...back to the game. I never made it to the bridge because every enemy that jumps out of the tree tops is IMPOSSIBLE to avoid resulting in massive cheap hits. Solution, a cheat, I did get a high score and that's where I got to enter HIROKUN which showed me the games ending showing a wounded soldier being evacuated by helicopter into the sunset(HIRO-KUN, turns out is the Program Director according to the credits).

     

    Do I like this game? Yes. Even though despite its cheap shots it does let you take a few hits before dying. I am also a sucker for exploring so even the jungle mazes which become repetitive and boring are forgivable. The graphics are drab green and browns but that is what it's supposed to look like. The music is dramatic and the sound effects are what you'd expect from a NES.

     

    Recommend trying? Yes.

    Out of 10? 6.

     

    a1t3r3g0

  6. I have finally rearranged my work area to include my 800XL. I have it hooked up to my iMac with SIO2OSX, so no drives are needed, and I can even print, via the software, should I need to.

    Spent half the day playing some old favourites on a real machine, with my trusty Atari joystick instead of using an emulator with my USB stick.

    Good times. Playing Boulderdash took me right back to nineteen-eighty-whatever, it's still just as challenging now as it was then.

  7. Zero One

    • 1
      entry
    • 3
      comments
    • 6580
      views

    Recent Entries

    Well, a few months ago I had my main HDD go fritz on me: the freezer trick worked, and it has been working pretty normal ever since; or at least to my knowledge it has, as this computer is kinda funky anyway.

     

    Whatever case, I checked HD Tune today to check the stats on my new 1.5 TB External HDD (for backups no less ^_^) and I discoverd a nice big red flag on my main drive:

     

    RAW READ ERROR RATE: Failed

     

    This is one of the major flags, meaning this drive could die at pretty much any moment.. or I could have another few years out of it. @_@

     

    So, I duno what to do or think. I do need a new computer, sure, but I wonder what I can do to save Maria.. she uses EIDE drives, which basically means, well, I am screwed on getting a "new" drive. Everything is SATA now...

     

    Any advice guys?

  8. After spending a couple days researching Elite, I'm convinced this game could be ported to the Atari 2600 and still retain most of its original look and feel. Here's what the original Elite looked like on the Commodore 64:

     

    gallery_5668_432_4005.png

    And here's a prototype screenshot on the Atari 2600 (this is from an emulator, not a mockup):

     

    med_gallery_5668_432_997.png

    The Bitmap

     

    The first challenge of the port is implementing a high-resolution bitmap. This can be achieved by using the 30Hz text display from Stellar Track. The 12 characters from this display provides a resolution of 12 x 8 = 96 pixels per scanline. The next question is how tall should the display be. This is defined by how large of a video buffer can be provided and maintained by the hardware. I chose a 1K buffer as a reasonable target. 1024 / 12 bytes per line = 85 scanlines. This would fit nicely in the 96 scanline resolution of a 2-scanlines-per-pixel Atari display. Using square pixels also simplifies the rendering math.

     

    To simplify the kernel code, it would be preferable to keep each column of buffer bytes in its own page. 84 x 3 = 252, so using 84 scanlines you can fit 3 1-byte columns in a single page. Multiply that by 4, and you've got 12 characters spanning 84 scanlines, so the final resolution is 96 x 84 pixels. The size of the bitmap can be seen inside the yellow border in the prototype image.

     

    The Hardware

     

    The 2600 only has 128 bytes of RAM, so it's going to need some help. The only current options for hardware that would provide a 1K RAM buffer are the Supercharger and an M-Network cartridge. The Supercharger only allows for a 6K game without multi-loading, and I don't think 6K would be sufficient to do an Elite port justice. Writes to Supercharger memory are also slower, if my conclusions from studying the Supercharger are correct.

     

    The M-Network architecture, on the other hand, is just about optimal for this scenario. The 16K of ROM provides plenty of room to make a detailed game. The 1K continuous block of RAM is perfect for the high-resolution buffer, and allows quick read and write access to the entire buffer. The extra 1K of split RAM would be useful as scratch memory for the 3D calculations, and also as extra memory to store details about your ship configuration and cargo.

     

    Another hardware consideration is the CPU. The main processor for the Commodore 64 is a MOS 6510 running at 1.02 MHz. The Atari CPU is a MOS 6507 running at 1.19 MHz. It's surprising that the Atari CPU, released in 1977, is clocked 19% faster than the Commodore CPU, which was released 5 years later in 1982. Other than the I/O port and the extra address pins, I'm not aware of any 6510 feature that would make it more powerful than a 6507. So the Atari starts out with a 19% advantage over the Commodore.

     

    The big disadvantage for the Atari is having to process the kernel. This effectively excludes 192 of the 262 scanlines from any kind of render processing, resulting in a (192/262) = 73 percent loss of processing power. So only 27% of the processor can be dedicated to rendering. When the faster Atari clock is factored in, you get 27 * 1.19 = 32 percent speed relative to the Commodore processing. So it can only handle about one third the processing load.

     

    Video Buffer Sizes

     

    The upside of the small Atari video buffer is that there are fewer pixels to render. The Commodore buffer used 256 pixels by about 140 pixels, for a total of 4480 bytes. The Atari is using less than 1024 bytes, so it has less than a quarter of the pixels to render. This matches well with the one-third processing power.

     

    Rendering

     

    The main functions needed to display the images are:

     

    3D Rotation

    Projection from a 3D object to a 2D plane

    Hidden surface removal

    Line drawing

    Circle drawing

     

    I found some online resources that could really help with these functions. The most authoritative source is one of the original authors, Ian Bell, who posted the entire source code for Elite! This source was written for a BBC Micro, which also uses a MOS 6502. The only problem is there are very few comments in the code, and it's written in some kind of BASIC wrapper around the assembly code.

     

    While googling for 6502 3D algorithms, I happened upon a great 3D tutorial written specifically for the 6502. If you scroll down to the "art of 3d" section, you'll find three links to C= Hacking issues. It's a 3 part study titled "A Different Perspective: Three-Dimensional Graphics on the C64." It includes a very detailed discussion of projections, rotations, line drawing, circle drawing, and hidden surfaces. It also provides full assembly implementations of these algorithms, and optimizing suggestions. I highly recommend it.

     

    Code Organization

     

    Using the M-Network bankswitching scheme, here's how I think the implementation would work.

     

    ROM bank 7 (slice 1)

     

    On system boot, the code would immediately bankswitch to bank 0. Bank 7 would be entirely reserved for only routines that need to access the 1K RAM buffer. This is necessary since none of the other banks can access this RAM directly, and it would be far too slow to use bank switching to set the video buffer or read it for kernel processing. So, the only code that would go here is the bit-mapped section of the kernel (which is actually very small, less than 200 bytes,) and the line drawing and circle drawing routines, which would need direct buffer writing access. Hopefully they could be squeezed into 1.5K.

     

    ROM banks 0-6 (slice 0)

     

    All the other routines, including projection, rotation, and surface removal, would go here. The only data that would have to be passed to slice 1 is an array of line and circle definitions that need to be drawn to the screen. This array could be stored in one of the 256 byte RAM sections, which are also available to slice 1. Other ROM banks would include system boot, sound effects, text display, trade interfaces, and all the 3D data for the various ships. It would also include the non-bitmapped bottom portion of the ship kernel, which would include radar and ship status meters.

     

    Concessions

     

    I think the Atari could keep up on the Video RAM drawing routines. I'm not so sure it could keep up on the 3D rendering. I don't know what the ratio of necessary compute power is between these two functions. However, there are several concessions that could be made to reduce the 3D rendering load on the Atari. The most obvious is to reduce the number of lines and polygons on the ships. For the ship displayed above, the rear of the ship consists of an 8-sided polygon, plus 4 4-sided polygons for the thrust ports. The 8-sided polygon could be reduced to a 6-sided or even 4-sided polygon (a trapezoid) and still retain the look of the original ship. The two smaller thrust ports could also be removed. Small alterations like this could save significant processing time.

     

    Another optimization is to greatly reduce the polygon count when the ship is farther away. I'm not sure if the original Elite games did this, other than turning them into dots when they are very far away. For the Atari version, any ship that is sufficiently far away can be reduced to just 4 points, essentially a pyramid, of varying shapes and sizes to match their corresponding ship.

     

    Other Platforms

     

    There are two other systems that came to mind while I was doing this study. The first is the Channel F. Oddly enough, its hardware setup is great for 3D rendering. It already has dedicated RAM for a screen buffer, and its resolution of 102 X 58 is comparable to the Atari buffer, minus the flicker. Plus, its CPU operates at 1.79 MHz, so it has the most processing power and the smallest video buffer to render. I know that video RAM access is slow in the Channel F, but this still sounds like a possibility.

     

    The other system of interest is the Vectrex. This system is begging to have an Elite port. Graphics rendering would be a breeze on this system. The Vectrex is powered by a Motorola 68A09 at 1.5 MHz, which is far more powerful than the Commodore CPU. Elite ported to this system could look better than any of the original 8-bit versions. A Google search produced no evidence of any effort to port Elite to the Vectrex.

     

    The Prototype

     

    elite_study.zip

     

    The prototype binary I'm posting here is quite simple. It doesn't contain any 3D rendering. The ship is just a static image loaded from ROM. What it does demonstrate is the size and appearance of the bitmap, and the simplicity of the kernel. The only difference between this bitmap kernel and an actual M-Network bitmap kernel is that it would point to a different location in memory, corresponding to the M-Network RAM, rather than ROM. The VideoRAM[0-11] addresses in the source would become RAM pointers.

     

    I haven't implemented this in an M-Network bankswitching scheme yet. That will require more research, since the M-Network switching method is fairly complicated.

  9. Let's take a break from looking at Action! math and take a look at procedure calls. We will start up with something that is trivially simple:

     

    Proc test()
    Return
    
    Proc main()
      Test()
    Return

     

     

    0E61: 4C 64 0E    JMP  $0E64      
    
    0E64: 60          RTS        
    
    0E65: 4C 68 0E    JMP  $0E68      
    
    0E68: 20 61 0E    JSR  $0E61      
    0E6B: 60          RTS     

     

    Our main procedure starts at 0E68 and it begins with a call to procedure Test using a JSR. The procedure Test starts at 0E61 which immediately jumps to the RTS since the procedure is empty. What I haven’t been able to figure out is why the JMP instruction is there since it doesn’t jump over anything. I have yet to find a case where it actually jumps over something.

     

    Next let’s look at how simple parameter passing is done:

     

    Proc test(byte I)
    Return
    
    Proc main()
    Test(1)
    Return

     

     

    0E88: 	  .BYTE #$00
    0E89: 4C 8C 0E    JMP  $0E8C      
    
    0E8C: 8D 88 0E    STA  $0E88      
    0E8F: 60          RTS        
    
    0E90: 4C 93 0E    JMP  $0E93      
    
    0E93: A9 01       LDA  #$01     
    0E95: 20 89 0E    JSR  $0E89      
    0E98: 60          RTS  

     

    This is the same as the first example, but now we pass a single BYTE parameter to the procedure. Here is an area where Action! does a good job at optimizing. Since there is only a single BYTE being passed it uses the most efficient way possible, it just passes it in the accumulator. At 0E93 the value 1 is loaded into the accumulator then the procedure is called. At 0E8C that value passed is stored in the local variable I. You will notice that space for this variable is allocated before the start of the procedure code, so this doesn’t answer the mystery of the JMP instruction.

  10. supercat
    Latest Entry

    Imagine that a restaurant were to announce to 100 diners--all strangers--that they would be splitting the tab. If a diner wanted to buy a $50 glass of wine, it would only cost him $0.50; on the other hand, it would also cost the other 99 diners $0.50. If the diner decided instead to have a $2 soda or a $5 glass of wine, he (and everyone else) would pay $0.02 or $0.05, respectively. What would people under such circumstances end up ordering, and what would they pay for it?

     

    Many people would dislike being in that situation, particularly with strangers. While some groups of coworkers will routinely agree to split restaurant checks without niggling over whether everyone's food cost the same, they generally don't want to be seen as unfair by their fellow workers. They will thus either seek to avoid spending substantially more than everyone else, or else offer to pick up a larger share of the total tab. In a group of strangers, however, such pressures will often not apply. If it seems as though many diners are going to have to pay $10 for other people's wine, they'll likely order wines costing around that much themselves, thus pushing the total up higher.

     

    Given a choice, most people would rather dine in a restaurant which allowed them to simply pay for their own meals, than dine in one in which they are required to pay for everyone else's. While there are some all-you-can-eat smorgasbord restaurants, the variety and quality of food is nowhere near what could be found at many pay-for-what-you-eat ones, and for good reason. Customers who are allowed to select expensive food and drink without having to pay for it are apt to do so, even if they wouldn't be willing to pay for the cost of such food and drink themselves.

     

    On the other hand, if some restauranteurs could get the government to require all restaurants to engage in "cost sharing", they'd make out like bandits. They'd be free to put whatever expensive and profitable items on the menu they wanted, secure in the knowledge that some people would buy them and everyone would have to pay for them. At first they might be limited by some restaurants' ability to limit their selections to only cheap ones, but if they could convince the government to require that all restaurants carry expensive foods and beverages, they'd be rolling in gold.

     

    A couple more observations: (1) customers of a cost-sharing business will often find the price to be much greater than what they would want to pay for the goods or services they expect to receive; (2) the quality of goods and services will often be higher than what customers would have wanted to pay for.

     

    Presently, much of what is called "health insurance" is in large measure really cost sharing. A single-payer health system would represent an even more severe form of cost sharing. Fundamentally the only way to get prices under control without restricting people's choices is going to be to increase the extent to which people pay for their own choices. Otherwise prices are guaranteed to increase exponentially until there is no choice but to ration services; rationing services will limit prices, but the variety of affordable choices will be far below what it would have been without cost sharing.

  11. HatNJ's Blog

    • 1
      entry
    • 0
      comments
    • 4347
      views

    Recent Entries

    HatNJ
    Latest Entry

    Hi was using an external blog but with the improvements here/coming Ill use Atariage's blogging system

    Im on here all the time so might as well use the goodies

  12. yuppicide
    Latest Entry

    My Mom is having a Halloween party. She does every year for her friends out in Hawaii. She told me she's making scary food. You know eyeball looking stuff, moldy looking pudding, etc.

     

    I told her she should make "boccelism" and she said "What's boccelism?". I said "You know when you eat bad food. What's scarier food than boccelism at your party! Guests will be talking about your party for years to come!"

  13. Arjak's Blog

    • 1
      entry
    • 5
      comments
    • 4840
      views

    Recent Entries

    Hello, and welcome to a series of reviews of Atari homebrew games. What I plan to do here is review an aftermarket game or piece of tech for the Atari 2600. By the way, this series is based off of a similar series by Nathan Strum.

     

    Let's get started!

     

    Review #1 - Seawolf

     

    This is the first homebrew I got after buying my first Atari some months back. It is based off of the 1976 Arcade game by Midway of the same name. However, the Atari port by Manuel Rotschkar is greatly enhanced over the original in every possible way.

     

    The first thing I noticed when I booted the game up for the first time was the amazing graphics. Everything was easily identified and vividly detailed. It reminded me of Activision's best work! There is also a cool tune that plays when the game is first booted up that really put me in the right mood. The sound effects work great and sound as close as the real thing as the 2600 can allow.

     

    The gameplay is perfectly executed, and much more fun that the original. Your job is to take out as many ships as you can, without running out of fuel or torpedoes. It sounds simple, but Manuel has added lots of wonderful new features, like several different kinds of ships, each with their own characteristics. There are battleships that take multiple hits to destroy, ones that drop depth charges, Red Cross boats that bounce your torpedoes back, etc. Every 1,000 points you get, you get a chance to refill on fuel and torpedoes. If you run out of either, you lose a life.

     

    There's a lot of strategy, too. You can bounce your torpedoes off of Red Cross Ships and into another ship, for instance. If you fire too much, you'll run out of torpedoes; but if you fire too little, you'll run out of fuel before you can get more!

     

    The game also makes great use of the Difficulty Switches. One switch controls game features. The B setting introduces new game features slowly, and the A setting throws everything at you from the start. The other switch controls who is stronger, you or the ships.

     

    All in all, this game is a real treat. I couldn't imagine it playing any better. It's loads of fun, the graphics and sounds are great, it has lots of replay value, and the gameplay is stimulating.

     

    Gameplay: 10/10

     

    Graphics: 10/10

     

    Sound: 10/10

     

    Replay Value: 10/10

     

    Fun Factor: 10/10

     

    Overall: 50/50

     

    Arjak's Thoughts: Get it. Get it NOW!

     

    This was my first homebrew, and I must say, I chose wisely. This game is spot on in every way. It has all the wonder of the great Atari classics, and is a game I could see myself playing for many years to come.

    • 2
      entries
    • 1
      comment
    • 4591
      views

    Recent Entries

    it's apparently law now that i have to state on whether i blog for corporate profit or not, and i do it for free. i state that i do this not for profit or for any corporate cobranding.. i did it for me. i guess there's a first for everything, but why me? why not someone else. it always seems to be me that has the need to come back every so often just to check up. as for my picure (sorry for the mess), it's just that at one time , i wanted to be atomic betty so bad i made a mask of her face and wore it. i did it out of love. i really did it at a time of my life when i thought i knew everything. but now, i realize i'm not free of the future. i don't think this is the last time you'll hear from me right now, though.

    • 1
      entry
    • 1
      comment
    • 3157
      views

    Recent Entries

    blogentry-24399-125337319382.jpg

     

    I have been scheduled off of work this Saturday.

    Spent some time to play Raiden IV and had gone through the practice mode to unlock everything. I have return my television to Yoko orientation now and look to return to Muramasa for the Nintendo Wii. Muramasa is a great game with beautiful art and graphics. The game play is good old fashioned 2 dimensional side scrolling platforming hack and slash. It is a Wii game but do not have motion control and is supported with several controller types with Wii Controller/nunchuck, classic controller and Gamecube controller. Digital control is supported too so I am using my Hori Gamecube controller with it great d-pad.

     

    blogentry-24399-125337303844_thumb.jpg

    blogentry-24399-125337304864_thumb.jpg

    • 1
      entry
    • 0
      comments
    • 4487
      views

    Recent Entries

    Just in case anyone's interested, in my posting here, the attached program is capable of exporting compressed images. This is useful as a full screen VBXE standard resolution would be 80640 bytes if not compressed so it's a waste of disk/cartridge space. Currently, it uses deflate on 8kb blocks, although it will not compress a block if the compressed data comes out longer. This typically gives a 1/3 reduction in file size, but files from Amiga, C64 etc. give much better compression ratios due to the smaller palette count.

     

    For instance, this 320x200 picture would be 62.5k uncompressed:

     

    blogentry-12834-125302744774.png

     

    The PNG file is 30k, and the corresponding XEF file is 26.3k (I had to change the extension to .zip to upload):

     

    dotc.zip

     

    This format is currently in the less than useful position of not having an associated viewer on the Atari (although they can be previewed through the application, choose File | Open XeFlate...). I'm working on this at the moment, but if anyone would like to save me the trouble ;) or comment on the format I'm working on, here are the details.

     

    The file is structured as follows:

     

    ***************
    * File Header *
    ***************
    Name              Length (Bytes)        Comment
    ----------------- --------------------- --------------------------------------------
    Bits Per Pixel    1                     Either 4 or 8 depending on the mode
    Graphics Mode     1                     Values:
                                             0x1F = VBXE standard
                                             0x2F = VBXE low resolution
                                             0x3F = VBXE high resolution
    Image Width       2*                    Width in bytes 
    Image Height      2*                    Height in scan lines
    Block Count       2*                    The number of blocks of data in the file
    Palette Length    2*                    The number of palette entries in the file. If zero, the
                                           laoo.act palette can be assumed if the palette is not 
                                           specified elsewhere.
    Palette Entries   3 x [Palette Length]  The palette entries as (R, G, B) three byte tuples
    
    * Low byte first
    
    Then, there are [block Count] blocks, as follows:
    
    *********
    * Block *
    *********
    
    N.B. The data is currently compressed so that each block is <= 8kb in length when uncompresssed,
    due to the 8k bank switching arrangement used by VBXE this seemed expecient!
    
    Name              Length (Bytes)        Comment
    ----------------- --------------------- --------------------------------------------
    Compression Type  1                     The compression method used:
                                             0x00 = None
                                             0x01 = Deflate
                                           Further methods will be added e.g. RLE  
    Compressed Length 2*                    The length of the block's data, in bytes,
                                           not including the 3 block header bytes.
    Data              [Compressed Length]   The block's data                                                                         
    
    * Low byte first

     

    The following C# snippet illustrates loading an XEF file into a Windows Bitmap:

     

         // Read the file header
    
         // Mode
         byte bitsPerPixel = r.ReadByte();
         byte graphicsMode = r.ReadByte();
    
         // Size
         ushort imageWidthBytes = (ushort)(r.ReadByte() | (r.ReadByte() << );
         ushort imageHeightScanLines = (ushort)(r.ReadByte() | (r.ReadByte() << );
    
         int width = imageWidthBytes * (8 / bitsPerPixel);
         int height = imageHeightScanLines;
    
         byte blockCount = r.ReadByte();
         
         // Palette (if specified - otherwise, assume the default VBXE palette)
         ushort paletteLength = (ushort)(r.ReadByte() | (r.ReadByte() << );
         Color[] palette = null;
    
         if (paletteLength > 0)
         {
           palette = new Color[paletteLength];
    
           for (int color = 0; color < paletteLength; color++)
           {
             byte red = r.ReadByte();
             byte green = r.ReadByte();
             byte blue = r.ReadByte();
    
             palette[color] = Color.FromArgb(red, green, blue);
           }
         }
         else
         {
           // Otheriwse, use whatever colors we've currently got loaded
           palette = Atari.Colors.BrushColors;
         }
    
         int x = 0;
         int y = 0;
    
         Bitmap result = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
    
         // Read the blocks
         for (int block = 0; block < blockCount; block++)
         {
           // Get the compressed length
           byte blockCompressionType = r.ReadByte();
           ushort blockLength = (ushort)(r.ReadByte() | (r.ReadByte() << );
    
           System.Diagnostics.Debug.WriteLine(string.Format("Block {0} -> {1} bytes ({2})", block + 1, blockLength, Enum.ToObject(typeof(BlockCompressionType), blockCompressionType)));
              
           byte[] compressed = r.ReadBytes(blockLength);
           byte[] decompressed = null;
           int decompressedLength = 0;
           
           // On Atari - switch in the correct bank from VBXE memory and decompress to there
    
           switch (blockCompressionType)
           {
             case 0x00:
               // Uncompressed - copy straight to VBXE bank
               decompressed = compressed;
               decompressedLength = blockLength;
               break;
             case 0x01:
               // Deflate - http://atariarea.krap.pl/x-asm/inflate.html
               decompressed = new byte[0x2000];
               using (MemoryStream ms = new MemoryStream(compressed))
               {
                 ms.Position = 0;
                 using (DeflateStream ds = new DeflateStream(ms, CompressionMode.Decompress, true))
                 {
                   decompressedLength = ds.Read(decompressed, 0, 0x2000);
                   ds.Close();
                 }
               }
               break;
           }
    
           #region Plot the data on the bitmap (obviously redundant on Atari!)
    
           for (int i = 0; i < decompressedLength; i++)
           {
             result.SetPixel(x, y, palette[decompressed[i]]);
    
             x++;
             if (x >= width)
             {
               x = 0;
               y++;
             }
           }
    
           #endregion
         }
    
         #region Set the pixel aspect ratio (or set the XDL on Atari!)
    
         switch (graphicsMode)
         {
           case 0x1F:
             // Vbxe standard
             break;
           case 0x2F:
             #region Vbxe Low Resolution - rescale to 2 x width
             Bitmap scaledUpBitmap = new Bitmap(result.Width * 2, result.Height, result.PixelFormat);
             using (Graphics graphics = Graphics.FromImage(scaledUpBitmap))
             {
               graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
               graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
               graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
               graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
               graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
               graphics.DrawImage(result, 0, 0, scaledUpBitmap.Width, scaledUpBitmap.Height);
             }
             result.Dispose();
             result = scaledUpBitmap;
             #endregion
             break;
           case 0x3F:
             #region VbxeHighResolution - rescale to 1/2 width (Windows doesn't like rectangular pixels)
             Bitmap scaledDownBitmap = new Bitmap(result.Width >> 1, result.Height, result.PixelFormat);
             using (Graphics graphics = Graphics.FromImage(scaledDownBitmap))
             {
               graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
               graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
               graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
               graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
               graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
               graphics.DrawImage(result, 0, 0, scaledDownBitmap.Width, scaledDownBitmap.Height);
             }
             result.Dispose();
             result = scaledDownBitmap;
             #endregion
             break;
         }
    
         #endregion
    
         return result;

    • 1
      entry
    • 0
      comments
    • 8044
      views

    Recent Entries

    A noted here, I got my 2 Classic USB Joystick Controllers from Legacy Engineering Group on Thursday, September 3, 2009. I ordered from Google Checkout on October 15, 2008, so they were a long time coming. L.E.G. had trouble with Google Checkout, they got many more orders than they anticipated (I think), and Curt Vendel of L.E.G. had some serious health issues that slowed him down a good bit. However, these joysticks were well worth the cost and the wait.

     

    There was no software to install. I just plugged them into my computer (running Windows XP) and was able to play games in Stella!

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...