I remember the 'waiting' ... all mail-order ads had in small print: 'please allow 6-8 weeks for delivery'. Do you know what 8 weeks to a kid feels like? Every time you check the mailbox, only to be disappointed , YET AGAIN
@@raginranga3494 < Pffft! 15 minutes? My two teenage sons are bored after 15 seconds whenever I try to show them "daddy's C64 video games". They usually respond with "This sucks!" lol What kids nowadays don't seem to realize, is that if it wasn't for these early machines and games, they wouldn't have all the wonderful games today. Never thought I'd sound like my dad... but I do now. ha-ha
@@BillAnt I don't ever recall having the patience. After a couple of times of waiting SEVERAL YEARS for a delivery, I decided the best option was to try to forget about deliveries so I could be happily surprised when they finally arrived. :)
I remember Ahoy! magazine. I used to bike down to the bookstore to get the latest issue, and probably check the Zellers next door at the same time for Commodore junk.
I used to love getting computer mags and books from the library, spending a day typing programs and games in to my C64, Great video mate, thumbs up :o)
Would have been nice if the publisher gave even one page to document how the program worked. Maybe they intended it as a cool little type-in demo and nothing more? The intro and outro on this were both great!
I love these code walkthroughs. I'm so buried in my job and family that I don't spend time learning to code on my c64 (ultimate 64) but these videos keep me connected with it and I really appreciate them! Thanks, Robin.
In my youth I made a very simple game in basic where the ship sprite is at the top of the screen and the obstacles are just randomly printed bubbles, using the automatic scroll for them to come at the ship. And every step peeking if a sprite collision occured. When it was running I added a very short assembly program to put a counter in a top corner of the screen. I called it "mad eyes". In higher levels the bubbles came in 2s, 3s and 4s.
I was in my 20's when the home computer craze began and I loved my c64. I spent more time creating games than playing them and I wish I would have stuck with that computer but over time I moved on to better ones and just playing games on them. I miss that c64 but lost it in a flood in 2007 (along with a huge collection of others). I bought a c64 maxi last year and while it works pretty much like the old c64 it's just not been the same. Thanks for sticking with it and bringing back some memories.
Coincidentally, I just pulled my own copy of this pamphlet out of a storage box a few days ago. (It's in pristine condition too!) I remember being quite excited about it back in the day. Thanks for the video!
The intro is wonderful. I know it takes a long time, but I really enjoyed it. Your kids are good sports :) I’ve been thinking hard and I’m fairly sure I only had Pitfall on the Atari 2600. I still find it fun to play. I’m pretty sure that’s the first time I’ve seen sei and cli set via pokes. Pretty neat. It was good to see the decimal statements deconstructed. I’ve often been on a section of Compute’s Programming the 64 and wished they had printed many of this listings as Assembly statements.
Thanks! Yes, Pitfall and especially Pitfall 2 are amazing achievements on the Atari 2600. I am now realizing I didn't give David Crane any praise in the video for those. I guess I'll have to make another Pitfall video in the future :) To be clear, those POKEs aren't quite SEI and CLI; they're temporarily disabling the source of the system interrupt in the CIA chip. From the perspective of BASIC, it's pretty much the same effect as doing SEI and CLI though.
@@8_Bit I sorta figured that. In my mind it’s easiest to think of them as sei and cli basic equivalents (ish). My 2600 is fried beyond repair. I’ll have to find a creative way to play the 2600 version.
When I read about the pamphlet, I assumed it was about modding the game (like adding your own infinite lives trainer). I'm guessing that would be even less code, but since the cartridge disables BASIC autostart it would probably be tricky.
Brilliant idea on the sentinel data value! I was recently building something using an array and I'm so spoiled by todays languages I was thinking "oh i'll just use data statements and then read them in; and then I will just calculate the length of the DIM by using LEN or something" - nope. doesn't exist. LEN = string only. So what I was doing was harder/dumber - I set a TC variable (total count of elements) to a static number in the code in the very top, so I had an explicit length to my DATA elements array. Great, but now I have to modify that line every time I add more data. The 999 or -1 trick will save me loads of time! BRILLIANT. Lines 50-80 are what I'm talking about. Now I will modify my own stuff to use a sentinel like this, and stop dogmatically using FOR loops. The modern programming I know is difficult to unlearn but fun when I realize how spoiled we are and how much we take for granted with modern programming languages of any kind compared to the OG days of BASIC. So this series of type-in, listen to Robin talk, kind of videos has been awesome for me so far. I learn so much from you because you are so curious and then explain everything in detail. This is why I keep coming back - that and your voice is soothing. I'm sort of embarrassed to admit this but I've been hearing your voice as I am reading PDFs I download from archive.org related to your videos, and somehow it helps me retain the material! Isn't that nuts? Anyway, you're doing God's work Robin! Thanks!
No need to unlearn, it's different techniques for different situations. Sentinels are common, e.g. how lines are terminated in text files, or strings in C. Counted lengths also occur, e.g. in IFF or Pascal strings. Another common form is start and end pointers, such as when using objcopy to make an object file from raw binary data. One challenge with initializing an array in BASIC if you don't know the length is that DIM should be the first reference to the array, so you'd need to read your data twice (using RESTORE), once to count the size and once to transfer it, or just size the array larger than the data.
I got a C64 as my second computer, after the Ti-99. I remember programming the "Guessing Game" in the back of the user manual. Actually, that program may in the Ti-99 book...I forget. Anyway, this is fun stuff and a good memory.
It's hard to tell on video, but it looks like that "booklet" had been machine-folded, such that it would, by coincidence, fit inside the short retail box. I also feel like I remember hearing that it was originally included as a pack-in.
In answer to the interest in coding, I regard you as an SME on commodore programming and I tend to watch your videos and follow along on my Maxi to get a feel for assembly and relearn basic
I actually fired up VICE (I sadly have never owned a Commodore 64) and typed in this program before I knew what it did. I'm curious as to if one were to type "Shift-V" repeatedly on a real C64 if they would get the same pattern that I got through the emulator. I got what could be described as "circles" or "a chain". I saw the "mountains" (which I actually though looked more like a saw blade) and just started hitting keys on my keyboard until I saw something that I liked. Great video as always Robin! Even after watching a ton of your videos, I still feel like such a noob when it comes to the iconic C64...
8mm film! Oh... had me fooled for a moment. :D That's pretty good acting for a little kid. This wouldn't work so well on Ataris. They have a rudimentary sprite system, but only a single 8-bit register to store the data of each sprite. The register has to be changed for every different scanline so you need to enable display list interrupts. It's all right in graphics modes, but in text mode, you'd only get an interrupt on every 8th scanline. I guess that's the difference between 1979 and 1982 technology. :)
Great video, Robin. I love stuff like this. I actually remember that ad from Ahoy magazine. But I never read it closely. see people this is why we should never ignore the small print when it comes to software. lol One thing really makes me laugh though, is that Activision, the big successful company back then felt the need to shake you down for that 25 cents. by the way there is a pdf copy floating around out there if you search hard enough.
Another game from my distant past.. I too would have been underwhelmed with what the program did, but also fascinated with trying to figure out how it worked. Glad I know just enough now to follow along. Back then, I think I would have been lost from the start. 🙂
Seizing the interrupts in order to change the vector is how it's done even on the Atari 8-bit, though sprite data can be held in a string because of how Atari BASIC handles strings, so the ADR of a string can be used for PMBASE and will change the bigger the program gets. Though this is easier if I used BASIC XE, which I also own.
The C64 was my first "modern" computer, and because I'm a gamer, I taught myself to use sprites. I even coded a few games in BASIC. But mostly, I designed elaborate title screens for games I never finished writing. LOL. I can never see anything through 'til the end.
Another possible hack to avoid that bug would actually be for the IRQ code to be written at $0335 ($0334--$033B are unused bytes just before the datasette buffer) and then to start the IRQ David Crane would only have to poke the high byte changing $EA to $03. This would make the IRQ call $0331 instead of $EA31. Now $0331 is a few bytes before the code so anything could happen right? Well $0331 is low byte of the load routine pointer and then right after is the two bytes for the save routine. These bytes would be default $F4, $ED, $F5, $00 - which are the opcodes NOOP $ED,X and SBC $00,X - both which actually dont do any harm. :) - So the next instruction after those at $0335 would then be the actual IRQ code. :)
They didn’t mess around in those days: “hey kids, learn to make games with this undocumented block of machine code”. Actually, the second language after BASIC I learnt as a kid was x86 assembler.
Interesting reason for that bug where the pointer was set one byte at a time where sometimes the interrupt trigges after only first byte is set. Looking at the ROM disassembly, David Crane could have moved his irq handler to memory position $0361, where it would have been safe to first set the low byte from $31 to $61 and then the high byte to $03. This is because the irq happening at $ea61 wouldnt have caused any troubles since that is the natural next step in the kernal after it checks if the cursor should be blinked. That way your fix wouldnt have been needed either. :)
why does no one use Base64 encode to save the machine code and Base64 Decode to convert the Base64 code back to assembly language that the COMMODORE C64 can understand like what was gone in the AMSTRAD Magazine to compress machine code listings.
Giving me Flash Backs on my Atari 400 and 800 Programing in Compute, and Antic.. The Fun Years of Learning Typing on the Membrane 400 Keyboard.. I so craved the Atari 800 and Floppy Drive over the Tape and Keyboard w/400 System.. My First 'Kit Computer' was the Cosmac VIP.. And the Art of Re-Programing started..
12:05 Oh, that reminds me of MegaZeux's "Super MegaZeux" (SMZX) modes, which reduces each tile's horizontal pixels from 8 to 4, but allows multiple colors (I think it is 3!) in a single tile. The graphics even look similar to Pitfall Harry here if they're viewed in standard MegaZeux graphics mode.
I remember typing in games from library books, magazines and there was a set of posters that unfolded. These ones, I had for the ZX81, had BASIC program and a bunch of HEX that had to be entered. We spent days on it then when we ran it, we got an error :-o
Hey, is that Lego LL924 at 1:33 ? That was the first Lego kit I remember getting, and I just recently re-assembled it (though with plenty of modern bricks mixed in) from the big tub-o-Legos.
Sure is, I love that ship! It's the middle in a "trinity" of LEGO spacecraft. Here's an old picture of mine with the 3 ships, plus an even bigger 4th ship I made to join the club: www.flickr.com/photos/7733465@N02/4183948390
@@8_Bit Nice! I always drooled over the bigger of the three, but never got my hands on one. I had that grey radar truck looking thing in the background too. Your addition to the club fits in nicely with the theme, like a "super heavy" version. Hard to overstate the effect Lego Space had on me growing up. :)
@@setSCEtoAUX Yes, I too thought the biggest of the three (LL928, the "Galaxy Explorer") was amazing and didn't have it as a kid; I did have the LL924 and the smallest, LL918. I went through a big LEGO resurgence once I became a father in the late '90s and early '00s (for my kids, of course!) and bought a used LL928 on eBay before the prices went crazy. And then I made LL930 based on all the patterns I could find in the official 3 sets, extrapolating what a 4th ship would have for number of plates, wings, thrusters, etc. etc. Classic Space LEGO is amazing :)
Back in the day I would have altered that key press code to do things based on specific key presses. It seems pretty easy to alter the line the sprite is drawn on so adding jumping would be easy as would making him move if a key was pressed and stand when no key is pressed. Flip the sprites to move him the other way and you have the start of something. Maybe you could do another video showing something like this? I am sure you would do it in a much more elegant way than I would.
Great video! I had the David crane ‘magic of the 2600 apps on my iPad a few years back. Fascinating. Sadly those apps have gone now. This was a cracking video 😁
Poking 240 into the VIC looks like someon's wanting to switch everything off in the interrupt mask register. There was a false rumor in the 1980s that PAL C64s would use the CIA for the regular timer interrupt but NTSC would use the VIC instead. Maybe it originated from the fact that the reset routine checks for a certain high scanline in the VIC in order to distinguish between NTSC and PAL. Maybe he had raster interrupts enabled first and was then forced to take it out again because the listing got too long for the booklet?
What a lost opportunity BASIC was. A write-only language that no child was ever going to understand. Imagine if the lingua franca of microcomputers had been an interpreted BCPL or CP/M. Or at least FORTH or LISP.
I hacked in a lot of such data listings in the mid-late 80's, from magazines or print-outs - I cannot remember a single one which would have worked from the very beginning, there were ALWAYS issues...
@@PrimeRibb69 I wish they still did this in the 90s when i was growing up i had some older books with type in programs but pcs at that time no longer had that focus on programming.
With a ZX, in that era, I would have been both elated to see something that great and disappointed after trying out 100 tweaks into the write-only machine code. I don't know if something like this was even possible with the ZX, though I remember seeing DATA listings on TV and in magazines. But, years later, it all makes sense and it's a much better experience. Btw, you mailed 25c for the postage , but they had to pay probably the 37c that you paid. So your first game programming money came from Activision.
What if you reverse the order and change line 510 to say: 510 POKE 789, 3:POKE 788,66 My guess is that it’ll randomly crash when run, as the interrupt handler will - on occasion - JMP $0331 instead of $0342. Depending on what’s at $0331->$0341, you could probably fix the bug by poking a NOP sled ($EA) there, allowing the interrupt handler to safely land on the NOP instructions! You’ll also have to poke a JMP ($4C) around the 1st two bytes (the sprite counter) as well. 😏
I forgot all of this stuff half lifetime ago because I had to program ms access to earn money in the real world around 98, 99. Then switch to Adobe acrobat, and access, then i lost my marbles and walked away from programming. This was always gibberish to me as a child once we got to the DATA parts, I never understood it and it is still mysterious to me. I just wanted to slam cheat pokes into games and stuff around. These days I am absolutely boggled by the SID chip, and just trying to figure out how to make it do it’s best, and I’ve found that they are very power hungry.
Hey can one of you programmers tell me a better way to make the sprite use the high bit I only had the sprite tutorial from this chanel and one of my sprites turns on and off because of it help plese
Huh. Only two more sprites, the 'pulled-up legs' one (used when swinging on vines), and the one for climbing ladders (which is just flipped back and forth for animation..not sure if there was a second sprite in that cycle for smoother animation), and you'd have the full set! (For the original game anyway, since the sequel adds in sprites for swimming) One other potential issue this program has..it isn't friendly towards any utilities or other widgets that also use the interrupt vector--it only presumes the default values. Simple fix, though..before changing the vector to the custom one, grab the current values and poke them in at the end of the ML where this version is hard-coded to jump to $EA31, the system default.
Has anyone tried this recently, sending a letter to the address I mean? It almost certainly doesn’t work, but I’d be interested in seeing what happened.
Does anyone here know which USB game pads (not enormous joysticks) are known to work with "theC64" machines? I sincerely hate having that enormous joystick on my desktop taking up space like that. If I could have a smaller game pad that would be best. UPDATE: I have confirmed a Logitech F310 will work. After applying the 1.5.2 update it works better but the button assignment requires some getting used to.
When I first heard of this, and saw the cover and title, I was thinking it would be a "How I Programmed Pitfall Harry!". Meaning, lots of detailed programming instructions. Oh well, I would have paid $0.25 for this back in the day if I had known about it.
I remember the 'waiting' ... all mail-order ads had in small print: 'please allow 6-8 weeks for delivery'. Do you know what 8 weeks to a kid feels like? Every time you check the mailbox, only to be disappointed , YET AGAIN
Try that waiting with kids nowadays.... yeah that's not gonna work. Only 80's kids had the patience. ;)
@@BillAnt So true, my kids are bored after 15 minutes
@@raginranga3494 < Pffft! 15 minutes? My two teenage sons are bored after 15 seconds whenever I try to show them "daddy's C64 video games". They usually respond with "This sucks!" lol What kids nowadays don't seem to realize, is that if it wasn't for these early machines and games, they wouldn't have all the wonderful games today. Never thought I'd sound like my dad... but I do now. ha-ha
@@BillAnt I don't ever recall having the patience. After a couple of times of waiting SEVERAL YEARS for a delivery, I decided the best option was to try to forget about deliveries so I could be happily surprised when they finally arrived. :)
@@BillAnt Don't show them the games, make them play them. I'm not sure it would work, but I think it would have a higher chance. :)
I remember Ahoy! magazine. I used to bike down to the bookstore to get the latest issue, and probably check the Zellers next door at the same time for Commodore junk.
“I fixed your bug, at least.” lololol I love it! Nice work!
I used to love getting computer mags and books from the library, spending a day typing programs and games in to my C64, Great video mate, thumbs up :o)
I love it that the quarter is from the right year.
It would look new though.
@@Okurka. so would the magazine, unless it was really that good. 😀
I love how when you need to calculate something you just use the Commodore basic's built in calculator!
Would have been nice if the publisher gave even one page to document how the program worked. Maybe they intended it as a cool little type-in demo and nothing more? The intro and outro on this were both great!
I love these code walkthroughs. I'm so buried in my job and family that I don't spend time learning to code on my c64 (ultimate 64) but these videos keep me connected with it and I really appreciate them! Thanks, Robin.
I really want to make Pitfall Harry moon walk and spin around to the sound of sid chip version of "beat it".
In my youth I made a very simple game in basic where the ship sprite is at the top of the screen and the obstacles are just randomly printed bubbles, using the automatic scroll for them to come at the ship. And every step peeking if a sprite collision occured. When it was running I added a very short assembly program to put a counter in a top corner of the screen. I called it "mad eyes". In higher levels the bubbles came in 2s, 3s and 4s.
I was in my 20's when the home computer craze began and I loved my c64. I spent more time creating games than playing them and I wish I would have stuck with that computer but over time I moved on to better ones and just playing games on them. I miss that c64 but lost it in a flood in 2007 (along with a huge collection of others). I bought a c64 maxi last year and while it works pretty much like the old c64 it's just not been the same. Thanks for sticking with it and bringing back some memories.
I actually sent away for this, and they didn't say it was just a 1 page flyer.. I was a tad disappointed.
Coincidentally, I just pulled my own copy of this pamphlet out of a storage box a few days ago. (It's in pristine condition too!) I remember being quite excited about it back in the day. Thanks for the video!
Having the lego space set was a nice authentic touch for your flashback! I loved those sets back in the day.
The intro is wonderful. I know it takes a long time, but I really enjoyed it. Your kids are good sports :)
I’ve been thinking hard and I’m fairly sure I only had Pitfall on the Atari 2600. I still find it fun to play.
I’m pretty sure that’s the first time I’ve seen sei and cli set via pokes. Pretty neat.
It was good to see the decimal statements deconstructed. I’ve often been on a section of Compute’s Programming the 64 and wished they had printed many of this listings as Assembly statements.
Thanks! Yes, Pitfall and especially Pitfall 2 are amazing achievements on the Atari 2600. I am now realizing I didn't give David Crane any praise in the video for those. I guess I'll have to make another Pitfall video in the future :)
To be clear, those POKEs aren't quite SEI and CLI; they're temporarily disabling the source of the system interrupt in the CIA chip. From the perspective of BASIC, it's pretty much the same effect as doing SEI and CLI though.
@@8_Bit I sorta figured that. In my mind it’s easiest to think of them as sei and cli basic equivalents (ish).
My 2600 is fried beyond repair. I’ll have to find a creative way to play the 2600 version.
Also, I just looked at Salvage Diver. That looks brutal to type!
@@MichaelDoornbos Maybe I need to type that in again, in February :)
@@8_Bit don’t forget your wrist rest ;)
Love it! C64 BASIC was my first taste of programming in the 80s, and I've been coding ever since. Thanks for this 😊
Really enjoyed the intro Robin. And enjoying that lately you post your videos publicly just in time for lunch here in Australia!
When I read about the pamphlet, I assumed it was about modding the game (like adding your own infinite lives trainer). I'm guessing that would be even less code, but since the cartridge disables BASIC autostart it would probably be tricky.
Brilliant idea on the sentinel data value! I was recently building something using an array and I'm so spoiled by todays languages I was thinking "oh i'll just use data statements and then read them in; and then I will just calculate the length of the DIM by using LEN or something" - nope. doesn't exist. LEN = string only. So what I was doing was harder/dumber - I set a TC variable (total count of elements) to a static number in the code in the very top, so I had an explicit length to my DATA elements array. Great, but now I have to modify that line every time I add more data. The 999 or -1 trick will save me loads of time! BRILLIANT. Lines 50-80 are what I'm talking about. Now I will modify my own stuff to use a sentinel like this, and stop dogmatically using FOR loops. The modern programming I know is difficult to unlearn but fun when I realize how spoiled we are and how much we take for granted with modern programming languages of any kind compared to the OG days of BASIC.
So this series of type-in, listen to Robin talk, kind of videos has been awesome for me so far. I learn so much from you because you are so curious and then explain everything in detail. This is why I keep coming back - that and your voice is soothing.
I'm sort of embarrassed to admit this but I've been hearing your voice as I am reading PDFs I download from archive.org related to your videos, and somehow it helps me retain the material! Isn't that nuts?
Anyway, you're doing God's work Robin! Thanks!
No need to unlearn, it's different techniques for different situations. Sentinels are common, e.g. how lines are terminated in text files, or strings in C. Counted lengths also occur, e.g. in IFF or Pascal strings. Another common form is start and end pointers, such as when using objcopy to make an object file from raw binary data.
One challenge with initializing an array in BASIC if you don't know the length is that DIM should be the first reference to the array, so you'd need to read your data twice (using RESTORE), once to count the size and once to transfer it, or just size the array larger than the data.
I got a C64 as my second computer, after the Ti-99. I remember programming the "Guessing Game" in the back of the user manual. Actually, that program may in the Ti-99 book...I forget. Anyway, this is fun stuff and a good memory.
It's hard to tell on video, but it looks like that "booklet" had been machine-folded, such that it would, by coincidence, fit inside the short retail box. I also feel like I remember hearing that it was originally included as a pack-in.
In answer to the interest in coding, I regard you as an SME on commodore programming and I tend to watch your videos and follow along on my Maxi to get a feel for assembly and relearn basic
I actually fired up VICE (I sadly have never owned a Commodore 64) and typed in this program before I knew what it did. I'm curious as to if one were to type "Shift-V" repeatedly on a real C64 if they would get the same pattern that I got through the emulator. I got what could be described as "circles" or "a chain". I saw the "mountains" (which I actually though looked more like a saw blade) and just started hitting keys on my keyboard until I saw something that I liked. Great video as always Robin! Even after watching a ton of your videos, I still feel like such a noob when it comes to the iconic C64...
When you change his clothes to white, he looks more like the game character from Karateka! 🤓
Totally lol
8mm film! Oh... had me fooled for a moment. :D That's pretty good acting for a little kid.
This wouldn't work so well on Ataris. They have a rudimentary sprite system, but only a single 8-bit register to store the data of each sprite. The register has to be changed for every different scanline so you need to enable display list interrupts. It's all right in graphics modes, but in text mode, you'd only get an interrupt on every 8th scanline. I guess that's the difference between 1979 and 1982 technology. :)
That bug fix to the change-the-interrupt-handler-location is neat; a very simple example of a race condition is being fixed.
I wish I could follow along, but I don't know what memory address are. When you say you use a certain address, I am lost.
Brilliant opening! Watched it twice.
Great video, Robin. I love stuff like this. I actually remember that ad from Ahoy magazine. But I never read it closely. see people this is why we should never ignore the small print when it comes to software. lol One thing really makes me laugh though, is that Activision, the big successful company back then felt the need to shake you down for that 25 cents. by the way there is a pdf copy floating around out there if you search hard enough.
But what about Salvage Diver? The greatest type-in game ever. Don't leave us hanging. I've got my C64 ready and I'm ready to begin typing....
I'm tempted to make a video about typing it in :)
Another game from my distant past.. I too would have been underwhelmed with what the program did, but also fascinated with trying to figure out how it worked. Glad I know just enough now to follow along. Back then, I think I would have been lost from the start. 🙂
Great practical attempt to bring old technology back to life
the intro is really cool !
Seizing the interrupts in order to change the vector is how it's done even on the Atari 8-bit, though sprite data can be held in a string because of how Atari BASIC handles strings, so the ADR of a string can be used for PMBASE and will change the bigger the program gets. Though this is easier if I used BASIC XE, which I also own.
The C64 was my first "modern" computer, and because I'm a gamer, I taught myself to use sprites. I even coded a few games in BASIC. But mostly, I designed elaborate title screens for games I never finished writing. LOL. I can never see anything through 'til the end.
OMG I loved Pitfall! It was so ahead of it’s time. Think I may have to dust off the 2600 :)
Just spent 8 hours learning RSI Demo Maker. This is a great way to relax!!! 😁
Another possible hack to avoid that bug would actually be for the IRQ code to be written at $0335 ($0334--$033B are unused bytes just before the datasette buffer) and then to start the IRQ David Crane would only have to poke the high byte changing $EA to $03. This would make the IRQ call $0331 instead of $EA31. Now $0331 is a few bytes before the code so anything could happen right? Well $0331 is low byte of the load routine pointer and then right after is the two bytes for the save routine. These bytes would be default $F4, $ED, $F5, $00 - which are the opcodes NOOP $ED,X and SBC $00,X - both which actually dont do any harm. :) - So the next instruction after those at $0335 would then be the actual IRQ code. :)
Hope you will talk about the new THEC64 update that just came out! Thank's for the fantastic videos so far!
They didn’t mess around in those days: “hey kids, learn to make games with this undocumented block of machine code”. Actually, the second language after BASIC I learnt as a kid was x86 assembler.
Interesting reason for that bug where the pointer was set one byte at a time where sometimes the interrupt trigges after only first byte is set. Looking at the ROM disassembly, David Crane could have moved his irq handler to memory position $0361, where it would have been safe to first set the low byte from $31 to $61 and then the high byte to $03. This is because the irq happening at $ea61 wouldnt have caused any troubles since that is the natural next step in the kernal after it checks if the cursor should be blinked. That way your fix wouldnt have been needed either. :)
Love it - that's the spirit! If you can't beat the race condition, work around it.
why does no one use Base64 encode to save the machine code and Base64 Decode to convert the Base64 code back to assembly language that the COMMODORE C64 can understand like what was gone in the AMSTRAD Magazine to compress machine code listings.
Question: are sprites always behind the BASIC text?
There's a VIC-II register that controls if sprites are in front of or behind the text; one bit for each of the 8 sprites.
you actually took the time to put all the REM lines in : - )
Ahoy magazine was great. I always enjoyed Dale Ruperts Rupert Report and Commadares. He even included my solution to a commadare in one issue.
Giving me Flash Backs on my Atari 400 and 800 Programing in Compute, and Antic..
The Fun Years of Learning Typing on the Membrane 400 Keyboard..
I so craved the Atari 800 and Floppy Drive over the Tape and Keyboard w/400 System..
My First 'Kit Computer' was the Cosmac VIP..
And the Art of Re-Programing started..
12:05 Oh, that reminds me of MegaZeux's "Super MegaZeux" (SMZX) modes, which reduces each tile's horizontal pixels from 8 to 4, but allows multiple colors (I think it is 3!) in a single tile. The graphics even look similar to Pitfall Harry here if they're viewed in standard MegaZeux graphics mode.
I remember typing in games from library books, magazines and there was a set of posters that unfolded. These ones, I had for the ZX81, had BASIC program and a bunch of HEX that had to be entered. We spent days on it then when we ran it, we got an error :-o
Hey, is that Lego LL924 at 1:33 ? That was the first Lego kit I remember getting, and I just recently re-assembled it (though with plenty of modern bricks mixed in) from the big tub-o-Legos.
Sure is, I love that ship! It's the middle in a "trinity" of LEGO spacecraft. Here's an old picture of mine with the 3 ships, plus an even bigger 4th ship I made to join the club: www.flickr.com/photos/7733465@N02/4183948390
Wow, good eye!
@@8_Bit Nice! I always drooled over the bigger of the three, but never got my hands on one. I had that grey radar truck looking thing in the background too. Your addition to the club fits in nicely with the theme, like a "super heavy" version.
Hard to overstate the effect Lego Space had on me growing up. :)
@@setSCEtoAUX Yes, I too thought the biggest of the three (LL928, the "Galaxy Explorer") was amazing and didn't have it as a kid; I did have the LL924 and the smallest, LL918. I went through a big LEGO resurgence once I became a father in the late '90s and early '00s (for my kids, of course!) and bought a used LL928 on eBay before the prices went crazy. And then I made LL930 based on all the patterns I could find in the official 3 sets, extrapolating what a 4th ship would have for number of plates, wings, thrusters, etc. etc. Classic Space LEGO is amazing :)
Back in the day I would have altered that key press code to do things based on specific key presses. It seems pretty easy to alter the line the sprite is drawn on so adding jumping would be easy as would making him move if a key was pressed and stand when no key is pressed. Flip the sprites to move him the other way and you have the start of something. Maybe you could do another video showing something like this? I am sure you would do it in a much more elegant way than I would.
Great video!
I had the David crane ‘magic of the 2600 apps on my iPad a few years back. Fascinating.
Sadly those apps have gone now. This was a cracking video 😁
excelente titulo pitfall uno de mis juegos favoritos !!! en todas las plataformas
Pls do more type in I’m new to commodore and your videos help!! 👍👍
Spending a ton of time typing and correcting errors then being underwhelmed...yup checks out for 95% of type-ins
To this day Adrian still holds a pencil in his fist when he writes. 😁
Who?
@@AnimationByDylan That's a female who died in 2002.
OP mentioned a male who still lives.
You sound like Raphie on aA Christmas Story and his Orphan Annie decoder ring. It's a **** commercial.....😆
Drink more Ovaltine lol
@@judgegroovyman 😆
Great content Robin, thanks for sharing. The disappearing belt on frame 4 is kind of disturbing though.
Hah, I wonder if I made a typo??
Poking 240 into the VIC looks like someon's wanting to switch everything off in the interrupt mask register. There was a false rumor in the 1980s that PAL C64s would use the CIA for the regular timer interrupt but NTSC would use the VIC instead. Maybe it originated from the fact that the reset routine checks for a certain high scanline in the VIC in order to distinguish between NTSC and PAL. Maybe he had raster interrupts enabled first and was then forced to take it out again because the listing got too long for the booklet?
What a lost opportunity BASIC was. A write-only language that no child was ever going to understand. Imagine if the lingua franca of microcomputers had been an interpreted BCPL or CP/M. Or at least FORTH or LISP.
Gracias !
I was going to say the F117 was anachronistic, but maiden flight was 1983. Makes me feel old. 😅
I hacked in a lot of such data listings in the mid-late 80's, from magazines or print-outs - I cannot remember a single one which would have worked from the very beginning, there were ALWAYS issues...
When games came on paper.
I learned how to type and a good amount of basic language from typing in programs from computes gazette.
@@PrimeRibb69 I wish they still did this in the 90s when i was growing up i had some older books with type in programs but pcs at that time no longer had that focus on programming.
We had Activision Club in Europe too.
With a ZX, in that era, I would have been both elated to see something that great and disappointed after trying out 100 tweaks into the write-only machine code. I don't know if something like this was even possible with the ZX, though I remember seeing DATA listings on TV and in magazines. But, years later, it all makes sense and it's a much better experience.
Btw, you mailed 25c for the postage , but they had to pay probably the 37c that you paid. So your first game programming money came from Activision.
What if you reverse the order and change line 510 to say:
510 POKE 789, 3:POKE 788,66
My guess is that it’ll randomly crash when run, as the interrupt handler will - on occasion - JMP $0331 instead of $0342. Depending on what’s at $0331->$0341, you could probably fix the bug by poking a NOP sled ($EA) there, allowing the interrupt handler to safely land on the NOP instructions! You’ll also have to poke a JMP ($4C) around the 1st two bytes (the sprite counter) as well. 😏
This sure takes me back!
That is the strangest way to hold a pencil for writing...
I did this a few times when I was a kid.
Awesome =D
Damn... I didn't know the trick to slow down listing... (I think)!
This video posted 56 seconds ago, and 58 views,13 thumbs up. Awesome video!! I had a Commodore 64. :p
My favorite type-in game was Flash Flood Freddie. :-)
I forgot all of this stuff half lifetime ago because I had to program ms access to earn money in the real world around 98, 99. Then switch to Adobe acrobat, and access, then i lost my marbles and walked away from programming.
This was always gibberish to me as a child once we got to the DATA parts, I never understood it and it is still mysterious to me.
I just wanted to slam cheat pokes into games and stuff around. These days I am absolutely boggled by the SID chip, and just trying to figure out how to make it do it’s best, and I’ve found that they are very power hungry.
Lovely video !...cheers.
Im surprised the loop didn't have the current sprite frame determined by some modulus of the X value of the sprite position..
Black Pitfall Harry instantly sounded like Samuel L Jackson in my head.
I wonder if that will work on my C64 mini?
Hello !
I'm a bit too late perhaps, but may I ask you if you can put the basic program somewhere we can download it ?
It will be very kind !
Please tell me this booklet is available online as a PDF somewhere? Or that you can scan it and make it so?
Hey can one of you programmers tell me a better way to make the sprite use the high bit I only had the sprite tutorial from this chanel and one of my sprites turns on and off because of it help plese
I wonder who and why taught the boy to handle a pen like that, there are very serious problems down there.
End titles song name plz, its great !!
end song was a jam
After 3 weeks "Those creeps stole my quarter!"😠
Huh. Only two more sprites, the 'pulled-up legs' one (used when swinging on vines), and the one for climbing ladders (which is just flipped back and forth for animation..not sure if there was a second sprite in that cycle for smoother animation), and you'd have the full set! (For the original game anyway, since the sequel adds in sprites for swimming)
One other potential issue this program has..it isn't friendly towards any utilities or other widgets that also use the interrupt vector--it only presumes the default values. Simple fix, though..before changing the vector to the custom one, grab the current values and poke them in at the end of the ML where this version is hard-coded to jump to $EA31, the system default.
How does a simple POKE 65334,0 result in a "SEI" instruction again ? im missing something here. :/
never mind. i found it. its a CIA register to disable the CIA timer interrupt source. NOT the CPUs interrupt (SEI)
I don't know if I'd be honoured or horrified to see that some of my code is being picked apart 35+ years after it was written. :-)
924 Space Cruiser!
Good eye!
Cor I could only dream of having a floppy disk drive ffs
Has anyone tried this recently, sending a letter to the address I mean? It almost certainly doesn’t work, but I’d be interested in seeing what happened.
Does anyone here know which USB game pads (not enormous joysticks) are known to work with "theC64" machines? I sincerely hate having that enormous joystick on my desktop taking up space like that. If I could have a smaller game pad that would be best. UPDATE: I have confirmed a Logitech F310 will work. After applying the 1.5.2 update it works better but the button assignment requires some getting used to.
There May be a Future for YOU! send it in!
Wow, it's almost as if you had to know assembly language just to program in BASIC on the C64
If you could, please scan that paper and upload it to archive org or a similar project before it goes lost again
When I first heard of this, and saw the cover and title, I was thinking it would be a "How I Programmed Pitfall Harry!". Meaning, lots of detailed programming instructions. Oh well, I would have paid $0.25 for this back in the day if I had known about it.
1:34 🤣
That pencil grip...
But.. there are no pits to fall into.
When Activision was cool.