Search the Community
Showing results for tags 'misc'.
-
Trying to get some cash together to buy some new games, so here's some stuff I'm sellin'. Best Offers are also cool with me Shipping may vary depending on where the parcel needs to be shipped to, apologies for the lack of understanding of shipping fees, I am new to this, we can calculate shipping in a PM if you'd like. Combined shipping is also cool with me. FAMICOM GAMES: Mickey Mouse: Fushigi no Kuni no Daibouken $5 Golf Club Birdie Rush $3 Super Mario 14 $8 Youkai Club $8 Saiyukki World 2 $14 Pro Yakyuu Family Stadium '88 $3 NES GAMES: MagMax $3 Quattro Adventure 4 in 1 $7 Pac-Man (Tengen) $5 World Games $3 Ninja Gaiden 2 $10 Adventure Island $7 Conquest of the Crystal Palace $17 Mega Man 3 $16 Super Mario Bros./Duck Hunt $5 Teenage Mutant Ninja Turtles $10 Platoon $3 Festers Quest $5 Kid Kool $8 Megaman Multicart (Contains all the original games and a ton of ROM Hacks) $30 ATARI 2600 GAMES: Vanguard $3 Bowling $3 Demons to Diamonds $3 Video Olympics $3 Super Challenge Football $3 Stampede $3 Space Jockey $3 Grand Prix $3 MISC: Famicom to NES Adapter $8 Game Genie $10 Sega Genesis Model 2 with Expansion port cover (No cables, just console) $18 If I get anything new in I will bump this thread. Thanks guys
-
Is there an 2600 emulator that can be embedded in a java program? Or is there a way to start up an emulator and load ROMs from a java program? (if in wrong forum lemme know)
-
I have a habit of checking out the 2600 programming forums every week or so, and two weeks ago I started commenting on the topic Advanced sound techniques: how do they work? My interest in this topic was mostly in sample playback. I've been messing with digital sound samples since 1990, and I was very impressed when I found out a couple years ago that the 2600 was capable of playing back decent quality sound samples. My only exposure to this was the Berzerk Voice-Enhanced, which is a thing of beauty (and a joy forever.) While responding to that topic, I mentioned if I couldn't find a decent program to translate 8-bit PCM wav files into 4-bit Atari format, I'd try writing one myself. Well, tonight after I put the kids to bed, I had a couple beers and set to work. An hour later, I had wav2atari.pl: use Getopt::Long; $result = GetOptions ("wav=s", \$wavfile, "outfile=s", \$outfile, "help", \&usage); sub usage { print "\n$0 -wav <wav_file> -outfile <out_file> -help This program reads in the specified wav file. The sound data is translated into a 4-bit Atari format that is dasm readible. Two samples are encoded into each byte of output. A comment is placed every 256 bytes to denote a new page in Atari ROM. Note that the first of the two samples goes into the lower nibble. This works optimally in Atari code. The first sample can be written directly to AUDV0, since the register will strip off the higher 4 bits automatically. Then the second sample can be written to AUDV0 after 4 LSRs. This prevents the need for temp variables and saves precious cycles during playback. The asm data is written to the specified -outfile. RIFF PCM header information is written to STDOUT. Currently only 8-bit PCM wav files are supported.\n"; exit; } #$wavfile = shift; if ($wavfile eq "") { die "ERROR: Must provide input wave file.\n"; } open (WAV, $wavfile) or die "Could not open wavfile '$wavfile'.\n"; # Read ChunkID read (WAV, $data, 4); if ($data ne "RIFF") { die "ERROR: This doesn't appear to be a RIFF PCM WAV file.\n"; } print " ChunkID = $data\n"; # Read ChunkSize read (WAV, $data, 4); $data = unpack ("V1", $data); print " ChunkSize = $data\n"; # Read Format read (WAV, $data, 4); print " Format = $data\n"; if ($data ne "WAVE") { die "ERROR: This is a RIFF file, but it doesn't appear to be a WAVE file.\n"; } # Read Subchunk1ID read (WAV, $data, 4); print " Subchunk1ID = $data\n"; # Read Subchunk1Size read (WAV, $data, 4); $data = unpack ("V1", $data); print "Subchunk1Size = $data\n"; # Read AudioFormat read (WAV, $data, 2); $data = unpack ("v1", $data); print " AudioFormat = $data\n"; # Read NumChannels read (WAV, $data, 2); $data = unpack ("v1", $data); print " NumChannels = $data\n"; # Read SampleRate read (WAV, $data, 4); $data = unpack ("V1", $data); print " SampleRate = $data\n"; # Read ByteRate read (WAV, $data, 4); $data = unpack ("V1", $data); print " ByteRate = $data\n"; # Read BlockAlign read (WAV, $data, 2); $data = unpack ("v1", $data); print " BlockAlign = $data\n"; # Read BitsPerSample read (WAV, $data, 2); $data = unpack ("v1", $data); print "BitsPerSample = $data\n"; # Read Subchunk2ID read (WAV, $data, 4); print " Subchunk2ID = $data\n"; # Read Subchunk2Size read (WAV, $data, 4); $data = unpack ("V1", $data); print "Subchunk2Size = $data\n"; # Read in all the data. $data_byte_count = 0; $page_count = 0; $output = ""; while (read (WAV, $data, 2)) { @data = unpack ("C2", $data); if ($data_byte_count % 512 == 0) { $output .= "; Page $page_count\n"; $page_count++; } # If there is an odd number of bytes in the sample, drop the last byte. if ($data[1] eq "") { print "Warning: last byte of sound data was ignored because this file\n"; print "contains an odd number of sound bytes.\n"; $data_byte_count++; last; } # Note, the first of the two bytes goes into the lower nibble. This works # optimally in Atari code. The first sample can be written directly to # AUDV0, since the register will strip off the higher 4 bits automatically. # Then the second sample can be written to AUDV0 after 4 LSRs. This prevents # the need for temp variables and saves precious cycles during playback. #strip off the lower 4 bits. $lownibble = $data[0] >> 4; #shift 4 bits to the right, effectively stripping off the lower 4 bits. $highnibble = $data[1] & 240; $condensedbyte = $highnibble + $lownibble; $output .= sprintf (" .byte #%%%08b\n", $condensedbyte); $data_byte_count += 2; } print "$data_byte_count bytes of sound data processed.\n"; close WAV; open (OUTPUT, ">$outfile"); print OUTPUT $output; close OUTPUT; I had expected this program wouldn't be too difficult to write. The guts of the program is only about 10 lines. The rest is just spitting out the RIFF header info. For those who aren't familiar with a .pl file, it's a perl script. You'll have to have a perl interpreter installed on your system to use the script. But it should be easy to translate this program into your scripting language of choice if you don't happen to use perl. My quest to get my own samples working on the Atari started on Google. I quickly found a nice spec for the PCM wave format here. Next I grabbed a small random wav from Google to use as my test subject: hello.wav I'm pretty sure this particular hello is Graham Chapman from Monty Python and the Holy Grail. All the better. After I fed this wav file through wav2atari.pl, I made some modifications to my unsound wave generation demo, and then some more tweaking, and suddenly, it worked! Hearing this sample play back correctly in a 2600 emulator is one of the most satisfying moments I've ever had programming for the 2600. The atari binary still needs work. I just threw this together, so the sample playback rates are not perfectly balanced (the delay between the low nibble sample and the high nibble sample should be exactly the same, but they're not), yet it still sounds pretty good. If I get the time and energy, I'll enhance wav2atari to work on 16-bit samples, and add a downsampling option so you can specify the output sample rate. I also need to clean up the playback asm so the delays are balanced. The zip file I'm including below contains the wav2atari.pl script, the HELLO.BIN Atari binary, the hello.asm dasm assembly file, and the original hello.wav file for comparison. Enjoy! HelloWorld.zip Here's another demo that varies the pitch of the sample: HELLO2.BIN Here's the modified source code: hello2.txt The next thing to do is get a looping 256 byte guitar wave.
-
If I had infinite free time, I would write the game Nort.exe for the 2600. In Nort.exe, you are a computer program, trying to survive deep in the bowels of the Vista Operating System. The game would consist of 4 phases: Phase one: DRM Due to an errant MD5 checksum calculation, Vista's DRM has incorrectly matched your program file with "Britney_Spears_-_Baby_One_More_Time.mp3". Your program file is now targeted for deletion. Use your tank process to destroy the DRM subprocesses and escape. Phase two: Windows Defender Windows Defender has misidentified your program as an ActiveX virus. Your program has been targeted for quarantine and deletion. You must drive your instruction cycle to out maneuver the Defender subprocesses attempting to quarantine you within their paging boundaries. Phase three: Rootkit A Sony Rootkit has installed itself on the system's boot sector. It has decided that your program was installed by a competitor, and has targeted your program file for deletion. You must escape to the safety of the L2 Cache before the rootkit's self-replicating code consumes you. Phase four: Out of Memory The Kernel has locked up, and is now consuming memory at an alarming rate. A thrashing swap file is threatening to overwrite your program. You must blast through the incoming write packets and seize control of the Kernel to prevent total system failure.
-
What kind of geek dad would I be if I didn't mention the birth of my child in an Atari blog? Corinne Marilyn Collins was born on July 1st at 7:26 AM at Chandler Regional Hospital in Arizona. She weighed 8 lbs, 2 oz, with a lot of fuzzy brown hair. Mom, dad, and baby are doing fine. Corinne has an older brother Kyle, who was born in 2004. His birth pre-dates this blog, but I have to give credit where credit is due. Here is a picture of Kyle, completing work on the 2600 game Master of Arcturus for the 2004 minicomp.
-
I'm finally doing enough development to warrant a blog. This is the first time I've ever done a blog. Hopefully things will go smoothly...First, a little bit about me. I'm 34 years old, male, and I live in Chandler AZ, USA. I took 4 assembly language courses in college at Arizona State University in the early 90s. Most of the coursework covered the 6800, which is very similar to the 6502 in the Atari. I never used any of my assembly programming skills until I began working on the Atari.I started doing Atari 2600 development in mid 2004, right around the time my first son was born. He hung out with me while I coded, and I'd talk to him and explain all the features I was adding to my code. That development turned into Master of Arcturus, which was submitted to the 2004 minigame comp as a 4k Atari 2600 cart.I took a year off of Atari work, with the MMORPG Runescape eating most of what would have been my development time. But now I'm back, and making progress on "an artistic reinterpretation" (not to be confused with a port) of the classic game Star Castle, which I decided to call Stellar Fortress. I'm also working on another game called "The Battle of Midway", but development is currently frozen on that until I get a chance to do a thorough review of the code. That code has been dormant for over a year.Most of the posts in this blog will be incremental updates of whatever projects I'm currently working on. I tend to do about 2 hours of coding per session, which translates into one update.Obsolsoft Inc is the name of my ficticious software development company.Obsolsoft's mission statement:"Expanding the future of archaic technology."