Hi! I'm Michael Chicago-Wiz (chgowiz), I did the python code that you linked to, thanks for the shout out! I sure wish we had talked before I spent a couple of weeks trying to relearn PET Basic :) I'm glad you had fun and yes, it sparked my imagination and fostered a love for fantasy/CRPGs that has never gone away. Cheers!
Hi downloaded your python code but its stating ModuleNotFoundError: No module named '_curses' when I try to run it, any idea why ? Is there something wrong with the library as '_curses' doesn't seem to be in your code. Thank you
No need for those silly modern programming gadgets when your LDA (LB), y 'in here and STA $ ,x 'in there wherever you dang well please! I like playing electron traffic cop =)
When you say it sparked your imagination, that's such an understated notion that I share too. There's just something about the simple graphics of old games, especially the ones that use the plain black of the screen as a background (or lack of a background) that gets the brain firing. When your imagination has to fill in the blanks, it becomes a more personal experience. Bravo!
Hi Brian! It's great to hear from you. Dungeon was a hugely influential game for me, one of the very first that captured my imagination. I'm curious if you remember your inspiration for making this game; had you played Beneath Apple Manor before?
@@8_Bit No-- I'd played Zork which was text-based so Dungeon was my attempt at making a zork-like game that was visual. Nice to hear you still remember it!
That's fantastic - did you get the idea for the "fog of war" reveal of the dungeon from (paper) war games? It's amazing how similar Dungeon is to Rogue. I'm also curious if you did any game development afterwards. Were you the author of that Modula 2 book I showed? I also found a Coleco ADAM book written by a Brian Sawyer, was that you?
@@8_Bit I originally coded the game so you'd see the whole map from the start, but then it seemed to give it all away, so I changed it to just show your immediate surroundings so you sort of discover it as you go which is more fun-- and only involves drawing 8 characters so was fast. I haven't seen rogue but it's possible they thought the same thing-- was that later or earlier? And yes I wrote those books--you're one of the few people who ever bought them! I didn't do any more games but drifted to AI stuff, but it was AI of the 1980s and didn't really do much compared to todays AI which amazes me.
@@briansawyer2543 Rogue seems to have been released in 1980 so it seems you had the idea a year earlier, and Beneath Apple Manor (for the Apple II) was released in 1978. The developers of Beneath Apple Manor and Rogue are all on the record saying they had no knowledge of each other's games, and you're in the same situation too - it's pretty amazing really!
I just love how these text-based/low-resolution simple graphics RPGs give me more enjoyment than modern games. I think its because of the imagination needed to fill in the gaps.
when I'm playing Angband and come across these monsters that can spit acid and melt all your armor, I always stop on my tracks for a minute thinking what will I do, if I may be able to turn back and escape without waking him up, or if I try to stealth walk around him and move on without alerting him... I'm not aware of any other game that brings me that level of interaction and awe out there... Maybe "Xcom Terror From The Deep" which also features randomized maps. Dungeon crawlers rock
I learned about the Commodore Pet only a few years ago. I grew up owning a Vic-20 and making crappy little 2fps games in Basic. It blew me away to know that there was a platform _before_ the Vic-20 that was like a Vic-20 with a much, much higher resolution. Footnote: About 33% of the games I made on the Vic-20 were instantly destroyed because of the low quality of the tapes used to save them. But I managed to rescue a couple of them with painstaking editing in an audio app. If only one of those WAV-to-TAP type apps were designed to continue reading the WAV even after discovering a corrupt byte, I'd have rescued everything. Still don't know why every last one of them couldn't handle corrupt data in a format that was destined to be inherently prone to corruption. Somebody should take a modern stab at redoing those.
Congratulations to Robin with his method of visualization how the string heap is populated by means of the screen memory. This was really clever and was my high-light on this show. :)
LMAO, love the ending song. Those old dungeon crawlers really sparked the imagination. The game that really fascinated me was Dungeons of Daggorath on the COCO2. One of the first "3D" dungeon games with similar mechanics. I think that is the main problem with modern day graphics. As amazing as they are, they can also take away from the whole imagination generating simple graphics. I have noticed some simple indy games that look like some of the really old ones. I think they are popular for this very reason.
Someone made a video playing Rogue, from what I remember fairly unedited video for that livestream feel, in the middle of the video it started pouring rain outside the guy's house, the microphone captured the rain sound and provided the PERFECT ambiance sound to go along with Rogue. Really amazing video... Since then I always keep a "rain sounds" mp3 file around to listen while playing, or just to isolate external noise sometimes. Also, there's an entire genre of music called Dungeon Synth of ambient calm percussion-less music, I'm not sure if its origins have any relation to the games, but it goes well while playing too. Classics like "Depressive Silence I & II" and "Secret Stairways" are my first recommendation to newcomers.
Oh so close. 😁 I too grew up in Northern Ontario and had a teacher named Mr. Hall. He was an elementary teacher though. We played this Dungeon on our HS PETs. Um, I mean, we did homework assignments on our HS PETs.
I found a bug while reading the annotated source code. When you see gold, if you don't get it right away, but instead just move around next to it or press 5, then the potential amount of gold keeps going up. At the start, if you move 10 times next to the G, you'll get 10 gold pieces when you finally grab it. The effect is greatly compounded if you have some gold. If you have x gold already, then it will add a random amount from 1 to x to the pot for each move. The potential amount never goes down, either. I was easily able to get more than 700 billion gold pieces, enough so that the amount was displayed in scientific notation. I wish I'd known that back when we were playing this game in school.
My first computer experience was on a PET in our high school computer science class. I played lunar lander and was hooked. I took BASIC and then got a VIC20, upgraded to a C64 and in 1986 or 87 I got a C128. I learned by typing games in from magazines and then got a book on 6502 machine language and taught myself that. So glad I grew up during this time because I became a software developer.
Got my 4016 back up and running this year, the mains filter of my disk drive let out the magic smoke. The pet had video memory chip failure but after replacement and a strip and clean back up and running fine. Got a pile of disks to work through to see if they still work after being stored in the loft.? Great to see pets still being used and new hardware being made. If you visit my channel your get to see my one owner pet, I've had it since new and it has survived many house move clear outs. Keep the pet videos coming 👍
As I sit her grinning to myself like an idiot while watching, I'm struck by how absolutely useless but at the same time UTTERLY AWESOME this is. I'm absolutely fascinated by this, especially when Robin visualized how the garbage collection worked. Very nice video, thanks guys!
Someone made a video playing Rogue, from what I remember a fairly unedited video for that livestream feel. In the middle of the video it started pouring rain outside the guy's house, the microphone captured the rain sound and provided the PERFECT ambiance sound to go along with Rogue. Really amazing video... Since then I always keep a "rain sounds" mp3 file around to listen while playing, or just to isolate external noise sometimes, it's good for concentrating while working. Also, there's an entire genre of music called Dungeon Synth of ambient calm percussion-less music, I'm not sure if its origins have any relation to the games, but it goes well while playing too. Classics like "Depressive Silence I & II" and "Secret Stairways" are my first recommendation to newcomers. Very few games can evoke the same feelings that these ASCII Rogue-likes bring, the only one that comes close might be Xcom Terror From The Deep which also relies on randomized levels, the foundation of that game is really a dungeon crawler with a futuristic sci-fi coat of paint on top instead of medieval weapons.
Wow, your channel has so much content now. You've just been steadily churning it out this whole time. Excellent work, great subject choices. I'm going to watch em all. In a row.
Haha, thanks Mike! I wonder how many hours that is in total now. I think it's around 80 episodes. And then I've got more on my 2nd channel now, in case you haven't discovered that yet. Thanks for sticking around and watching!
There seems to be some lost history about early Roguelikes, and its great to see some of that fog cleared away. I used to write BASIC programs on the C64. I still have one game on tape from 1985 that uses string functions (a clone of Q-Bert). How I figured all that out at such a young age I can't imagine.
If you did it right, you could possibly display PETSCI graphics and maybe even animate with a couple of preliminary pokes and setting the values of strings. Though it would probably be gawdawful slow.. It would definitely confuse most people looking at your program listing though.
Nice video. I was able to ascend in Nethack on a Linux machine years ago! Okay I had to cheat via a scam where I would save then back up my save file. So much easier :)
Really a very cool video :) And love all the explanations. I know I mentioned on Twitter but when you re-routed the string memory into screen memory that was excellent and really helped me to understand what the garbage collection is (had often heard that term in the past).
I remember one of my first “official” computer classes in the 70s/early 80s. It was with mr Kashner at south shore middle school in Seattle, ,Washington. He has a couple of the PETs modded with a switch on the front that essentially flipped the rom chip and gave the user a completely different user interface. It also included a different rom set adding instructions that were not available in standard rom, and as such, not available to most of the class. He also had a couple machines setup with the Logo Graphics’s language which allowed you to program movements of the “turtle”. Mr. Kashner was way ahead of his time and a complete nerd’s nerd. He taught us binary base 2 math and machine language in 7th grade. Something no other teacher would try to tackle. Amazingly, I also ended up with a new Timex Sinclair from the local K-mart. Then, Atari 400xl....the. 800...then the ever expandable TI99/4a which had a cartridge slot allowing for programming in basic and access to the speech module. Programs still stored on cassette tape where you essentially hit record on the device, and then play the code out through the audio out to save the encoded sounds to the cassette. The TI had great sprite support and was super simple to program. Later moved on to Apple ][e, the ][c then the last home computer I ended up with was the Apple ][gs with sider 40 meg hard drive and a 9600 baud usrobotics modem through the Sysop deal. A steal at exactly 505 bucks! Because I ran a BBS I eventually updated the hard drive to the cartridge system with scsi interface allowing me to swap our 40 megs at a time to allow users to download stuff. Can’t remember the name of drive. But using carts was way ahead of its time. It did have drawbacks though cause if any dust got in there, you were screwed. I lost more than one whole platter of data to this issue! Great system and great memories.
30:01 That drive I believe is the petSD+ but this one here has an awesome looking custom case. I mounted mine under the 'hood' so mine does not require a case at all.
I love how you explain your garbage collection theory about what goes wrong in the different versions. You explain it so well that it’s easy to understand, but I still feel smart that I “get” it now, because you definitely kneed some knowledge to figure this out. You would be a great teacher.
Awesome, that game box actually represents the game. Funny how little CHR can go a long way, but on the NES they made some nice looking games that are very bad, or aggravating to play. Thank you for sharing.
Does anyone remember the freeware PET game "Toker", with the object being to smoke a bong as quickly as possible? It was a very popular underground program in my school and possibly got some of the stoner kids interested in programming. I remember one of the REM statements in first few lines of the listing as saying "Copy me I want to travel!"
This takes me back... The first computer game I ever played was something called "The Valley" on a green-screen Commodore PET at my school. This was back in the days when computers lived in "the computer room" and you had to book time on them! :) It looked and played similarly to this "Dungeon" game, and even though it would be considered incredibly simple BASIC-coded fare by modern standards, it was a major leap in depth and complexity over the relatively simplistic action games that I was used to playing at home on my Atari VCS.
my first roguelikes were Hack and Larn on the Amiga from about 1987. Larn was so good. The character graphics were just enough to keep the feel of the roguelikes but make it a bit easier to remember what you're looking at when you explore the dungeon.
Sweet, glad for the fixed version. :) My addiction to Rogue started on the Amiga. I got the Epyx game you have for my Amiga 1000 in early 1986 and was completely hooked! There aren't many games since that have beaten the feeling of finding the elusive Amulet of Yendor.. That took quite awhile, jeez. Brutal game. :)
For those of your viewers interested in the history of roguelikes, there's David Craddock's "Dungeon Hacks: How NetHack, Angband, and Other Roguelikes Changed the Course of Video Games". I got my (audiobook) copy cheap in a humble bundle a couple of years back, but it's still around as an ebook, too.
@17:47 You can see the same visual representation of strings in Applesoft BASIC with: HOME:POKE 104,4:POKE 1024,0 NEW HIMEM:2040 A$="CAT" B$="DOG" A$="HORSE" ? FRE(0)
I remember many many years ago in one of those great 8-bit computer magazines for the Commodore 64 (I think it was "Compute! Gazette") they were talking about garbage collection (though they may have used a different name at the time) and they had a very short BASIC program to type in (less than a dozen lines if I remember correctly) to demonstrate it. It forced a situation where the system would do a garbage collection which totally "froze" the computer for at least a full minute. They also gave several tips on how to eliminate or at least minimize garbage collection in your BASIC programs. Some languages allow you to turn off automatic garbage collection or even require you to do it yourself manually. Not doing it correctly can lead to memory leaks, which can be hard to track down or even notice except under certain situations (like the program running for a very long time).
Yes, I believe Jim Butterfield did a couple articles on the subject. I was going to get even deeper into garbage collection in this episode, but reigned it in to try to stay on the main topic. Hopefully in another video.
@@8_Bit Sounds great. I think a lot of people would find that interesting, and especially why garbage collection on those older systems was so much more crucial than today (though still necessary) because of the far more limited RAM available in the first place. I wonder how the Atari 2600, with its microscopic 128 bytes of RAM, handled GC, if at all?
@@JustWasted3HoursHere The Atari 2600 doesn't have any built-in firmware/operating system at all, the only software it executes is on the game cartridges plugged in. I'm almost certain no commercial 2600 cartridge ever implemented garbage collection; even the BASIC Programming cartridge for it didn't allow dynamic strings so there would be no need, and the tiny amount of RAM made it impractical. Coincidentally I now have a working BASIC Programming cartridge and keyboard controller pair with overlays for the Atari 2600 so I hope to make a video about it soon-ish.
Not only minutes, on a C64 using the whole BASIC memory it will take hours! The time increases in quadratic manner according to the count of non-empty strings. Try (add line numbers to use it as a program) C$=CHR(65):DIMI,A$(9600) FORI=0TO9600:A$(I)=C$:NEXT PRINT"COLLECTING..." TI$="000000":PRINTFRE(0) PRINTTI$ To shorten the run-time the warp-mode of an emulator could be helpful. ;)
@@8_Bit There are a lot snake oil tips around in magazines those days (even until today). I saw so many discussion which showed a huge misunderstanding on how useful and effective such tips are. However, if you are using strings into the hundreds you are helplessly delivered to the GC whatever you will do (even with all the things honorable Jim is telling us). In the end, the time consumption depends on the number of non-empty strings and increases quadratically. Anyone who wants a deterministic behavior for a serious application or game which handles large string arrays is urged to use an alternate implementation. Such a requirement led me to develope Super Garbage Collection back in 1985 (mentioned on www.c64-wiki.com/wiki/Garbage_Collection).
Very interesting! There are still sooo many features and underlying “interesting” implementations of the Commodore Basic, that I am only slowly starting to understand, here 35+ years later. I think there could be a great video-series in simply going through the source code, and with examples show how various parts were implemented! I would love to watch something like that!
A tip of the hat to Bill Gates for PET BASIC, one of the best of the era, and one of the only with on-screen editing. A pity some of the subsequent MS products have been kind of a letdown.
@@greendryerlint I recall the on-screen editing feature was still there in DOS - not in QBASIC but in the earlier GW-BASIC :) You're right about the other products though, that's why I left the MS world in 2002 (yes, kinda late, although I did try to leave earlier in 1997 with OS/2 WARP 4 but I couldn't run the software and games I *needed* so I went back for couple of years. OS/2 was technically far superior to Windows though).
I used to play that Dungeon game so much in my middle school computer lab PET's. Now I have to set up a PET emulator to try this. I think I remember typing in that Shark! game and Bat! game from a book or a magazine to save to a disk and play. That is some collection you have! The explanation and debugging you did brings back all kinds of memories about programming Commodore machines. Thank you!
Bat! was a lot more fun as I recall if you changed the gravity coefficient variable. I miss the way BASIC was so simple to comprehend and modify. Python captures a lot of the feel of those early days of programming.
Wow Robin. I learned many things about Commodore Basic I'd never even thought of. I didn't realise there was such a thing as garbage collection in Basic. What I wondered though: after garbage collection is finished, would the first "HOR" characters in your example be reused when you reserve another string? Thanks for the link to Chuck's channel. Almost makes me want to get a PET again :)
Nice work on patching this old game making it compatible with other BASIC versions. Made me think, maybe I should get a PET, checking ebay $1000 - $3000, well perhaps not, I guess VICE will do for now. At least I have my old HP-150 with touch screen and dual floppy drives.
The first time I put my hands on a computer was at the school, on a Apple II . Then imagine how I was hooked when I saw the first ads of the VIC 20 ! It had colors, the pet-scii graphic characters on the keyboard, one million units sold! I knew little of computers but yet I was sure that it was possible to put that graphics into my basic programs, well somehow. With the young and fresh mind of the time I was already wondering of the things I could create. Maybe the games I saw only at the arcade halls. So much more than the professional looking Apple, and so cheaper too! I also thought that it was not possible and I had doubts about its real possibilities. So, just to make sure, in 1983 my first computer was another one: the mighty Commodore 64!!! And I was already launched over the skies.
Thank you so much for fixing this bug! I remembered this game fondly from the 1970s/80s and tried several times to play it again. Though I might be misremembering things! Why did this strange "magical staircase" appear in every version I could find? Now I can play the original version again!
I loved that game and most of the Cursor offerings. My school subscribed to them and were pretty liberal about allowing copies. (though I didn't usually tell them) I still have a 3032 PET and 8050 disk, and both work well, not bad for 40 year-old electronics. I remember modding Dungeon and adding sound, a secret key to double hit points for those days you wanted to cheat, or just didn't want to lose when the game stingily didn't raise your HP, and other mods. I think I might have added a 'hyperspace' button to it at one point. I never did fix the graphics issue as my machine was not susceptible to it. Two of my other old favorites from Cursor: Miner! and Ouranos! I might have to shell out some money for a mini-PET too, though I wish it was both a little cheaper and came with a keyboard that didn't make you long for the chiclet keys of the original PET. Good work on fixing this annoyance to BASIC 4.0 users and great explanation of why the bug exists.
2:03 Modula-2… he might have bet on the wrong horse! 5:52 Maybe the "Y" means "You". 14:05 It's also why the strings from « 90 PG$="DUNGEON : NM$="15" » don't end up at the top of the heap. 15:29 More specifically, BASIC 4.0 puts two bytes after the end of each string in the heap that point back to its string descriptor. This allows garbage collection to take O(n) time instead of O(n²) time. Both algorithms find the next-highest live string in the heap and move it to the highest available space. In BASIC 2.0, each search for the next-highest live string takes O(n) time, while it essentially takes O(1) time in BASIC 4.0 since it can just follow the pointers and gap lengths. 22:16 One question is why both "DOG" and "CAT" have "c▞" as a pointer when A$ and B$ are separate variables that would be 7 bytes apart in memory. I'll assume that "▞" = 255 is a special value that indicates the string is unreferenced junk and gives the gap length in the low byte. But they shouldn't be unreferenced since A$ and B$ are both still live. Same in the game: most of the pointers point to the same descriptor, "⎼!" or "G!", despite the array elements being 3 bytes apart. Also, the game appears to POKE over some of these pointers, which which should make the garbage collection malfunction or crash if it's ever invoked. 29:10 One problem with your method is that it will reduce the amount of RAM by 1024 every time you run the program. You should at least restore the memory on exit from the program. A STOP exit would still remove this RAM from use if the user goes on to load a different program.
Aha, it's You, You, You. Now I have Blues Brothers stuck in my head. Yes, I also have questions about why those string pointers are the same. If I figure it out, I'd like to do an episode dedicated to garbage collection. Ah, good point about the RAM pointer moving down. It's true that STOPing, LOADing, and RUNing on a single boot are much more common on the PET. On the C64, especially in the game world, everybody's been trained to reset or power cycle between games. Do you have a suggestion about what the best way to deal with this is? Certainly setting the pointers back on exit is a good start.
@@8_Bit: You can increase the top-of-RAM pointer by 4 pages when the user does a clean exit (7:54 "Want to play again?"). Not much you can do about a STOP exit before loading another program. On startup, you could normalize the PEEK() value to either 4096, 8192, 16384, or 32768 (divided by 256) before subtracting 1 KB, to handle the user (or yourself when debugging) STOPping the program and then rerunning it.
@@8_Bit Could they be different numbers but rendered the same? like with the "DOG" "dog" hack but in reverse. Are some of the chrs the same at the high end maybe?
Wow, not a programmer, and never will be, but I do like how you go through and show how things are broken and then the fixes. Wish we were back in more simple times.
Well done doing this. I finally got round to playing it properly on my 4032. It still has a few other bugs. An @ sign (and other things) sometimes appears on the second line, one time I cleared the whole map of gold and enemies but it didn't end, and there is a gold bug mentioned in these comments that just increases the gold all the time. Still fun though. I added some sound effects to it to make it more interesting.
The @ is coming from line 970. It's the poke e+ax,v1 (48+32768,0). But I don't understand what's it's for, so I can't fix it. It seems to appear at the top left char on earlier PETs, then get overwritten by the "H" from HIT. I might just blank the line to get rid of it. The gold problem seems to work better by moving line 680 to the 1200 area when you actually get the gold.
Back in the day I was a big fan of Telengard. I fixed several bugs in the source code and even added a bit of additional functionality (neither of which was easy because it already used most of the memory). I wish I still had my modified code (along with the rest of my C64 discs) - I'd love to look at the changes all these years later.
The amazing thing is that in 1979, the board game Dungeon! from TSR and the Dungeons and Dragons RPG which introduced the staple gameplay concepts, were themselves only 3-4 years old.
Does anyone else remember a PET game that was kind of like this, except you were trying to get to a Sword & Jewels in the center of a maze...once you got them TONS of monsters would jump out at you. Was it called Sword Quest or something like that..???
Yes! It was indeed called Swordquest, and I played it quite a bit. This video brought back memories because it has the same fog of war effect. You could shoot magic arrows that would expose parts of the dungeon far away from you. It was written by P. O'Donovan, copyright 1979 Fantasy Games Software P.O. Box 1683 Madison, Wisconsin 53701. I managed to read it off an old cassette tape a decade or so ago, producing a .T64 tape image that runs on VICE! If you look at my channel you'll see some videos of PET software, but for some reason I didn't make one for Swordquest.
10:10 Dungeon layout revealed when the player dies? Pretty neat little bonus :) And Shift to move through walls also an interesting concept. Really cool to see how the simplicity of this genre of game seemed to stimulate the developers' creativity for what could be done more.
loved sword of fargol - you could break into it and easily figure out the varbiable he used - like str for strength or h for health or whatever it was - but it allowed us to really play it far longer than we could - the game could be quite unforgiving. By breaking into the game and changing variables it helped me understand programming more - i was only 9 years old at the time.
Unfortunately I didn't have the luck of getting into computer programming when the 8-bit systems were all around, but my family bought a 286 PC (IBM PS/1 it was) with DOS (we upgraded the crappy version to MS-DOS 5.0 which had two BASIC interpreters, the older GW-BASIC and newer QBASIC... I remember digging around NIBBLES.BAS and making the worm grow to totally insane lengths :D Me and my little sisters had some giggle filled fun playing it in 2 player mode :D
I really enjoy your coding videos. I think you and Shallan are some of the best C64 coders on TH-cam (and Twitch for Shallan). You two should pair up and code some stuff. :-)
I loved this game, I thought it was the best thing in the world at the time. We had one chicklet style pet computer with tape drive built in, then the style you are using. Shortly after i got a VIC 20 that I still have
It's just composite-out but internal. You can use a unity-gain opamp to copy the signal without affecting the original monitor, then use a USB device that takes composite for video recording to PC.
I keep hoping I’m going to find a PET cheap in one of the thrift stores I shop at from time to time. Oh, I also ordered the Vic 20 PSU I needed today. The PSU is a custom build.
If you had typed in the second A$ definition as "turtle" I was going to howl with laughter. As it was, my "turtle" and your "horse" elicited only a wry chuckle. Great episode!!
This is great, I recall being in the computer lab around 1982 and playing PET space invaders and Nightmare Park. I thought the games on the TRS80 were better though... loved Star Trek and also there was some galaxia like game for the TRS80 that I've never been able to find. The comp lab was full of people just wanting to play that game. :D
I've got a TRS-80 Model III here but not really any software for it. That PET Space Invaders was amazing for the time. I want to know who programmed it; I have a theory it was one of the HAL Laboratory guys.
@@8_Bit That would make a show unto itself! Great stuff.... all machine code right? I recall Nightmare park was in BASIC... I remember loading the tape into my C64 and changing some poke/peek addresses and I think I got it to work... long time ago! :D
@@neilloughran4437 Yes, when all the other PET games we had were BASIC, that all machine language Space Invaders stood out above all the others. It even had the attract mode with an invader coming onto the screen to change the PLAV typo to PLAY. It's suspiciously good. And yeah, Nightmare Park was BASIC and ahead of its time in some ways too.
@@8_Bit Hopefully you can find out who programmed it! Maybe some easter egg in the memory even! I used to list the contents of memory maps in my C64 and find all kinds of things back in the day... swear words in Monty on the Run for example (used to stop people entering rude words in the high score table!).
@@8_Bit just checked a PRG file for the ASCII... no easter egg as such... only readable chars I see are amongst this lot.... 1 GAME OVERˇÌLõ OêÔ∞⁄ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄġÿ¿0ÔhêãÖ}reUPJPUbmxÇàzhVD2((6@HMP X,Y)X),Y,X,YPLAVùùùùùùùùùSPACE INVADERS ˇ ....... ?MYSTERY ....... 30 POINTS ....... 20 POINTS ....... 10 POINTS TOP 1500 POINTS FOR EXTRA BASE.ˇùùùùùùùùùSPACE INVADERS KEYBOARD CCOMMANDSùùùùùùùùùùùùùùù4í-MOVE LEFT 6í-MOVE RIGHT Aí-FIRE BEAMˇ******È---flJKJKÈÚflbôbÏb˚ˇ„ˇ˘..... ?MYSTERY
I was surprised when you showed the Sinclair/timex z81 machine, did you program anything on that ? in basic perhaps. Sinclair48k was my first machine and due to the amount of great cheep games available (UK) i only played games on it. So many great z80 based micros, i would love a Sharp mz80k or even a TRS80. Thanks.
Very informative! I just found my old VIC20 in storage and pulled it out, got it working with some difficulty. Was there ever a version of Dungeon for VIC20 BASIC, or any of the other Rogue-likes? And more importantly, how does one put the programs onto a cassette? I remember in high school seeing an ad in a computer magazine for Rogue: power in my hand, people at my feet...ROGUE! lol
I don't think this Dungeon got ported to the VIC-20. Sword of Fargoal is probably the best Rogue-like for the VIC-20; I'm sure it requires a RAM expander though, probably 8 or 16K extra. There are PC tools for converting Commodore .prg files into .wav files which could then be saved on cassette, but that's a big pain. You're better off to buy a uIEC or SD2IEC type device so you can load directly off SD cards.
Back in early 2000's I transferred some programs by converting the TAP (Tape image files for Commodore computers) to WAV file and playing it with Goldwave or Winamp on my PC which was hooked to stereos where I had placed an empty cassette and pressed record before starting to play it. Wasn't that painful to me, I got all of them working on the first try. Just turn the volume on the stereo way down; I turned it right down to complete silence, it only affects the volume output from the speakers, not the recording volume. I might have been lucky getting them all done so easy.
16:59: The location vs page thing could have been explained better, because many of the rest of us may not know that the C64 had 256 pages that were 256 bytes each. I had to look that up myself. It wasn't immediately obvious that this was about changing the pointer stored at location 648 (= page 2, address 136 = 2*256 + 136 = $0288 in hex) from saying page 4 (= location 1024 = 4*256 = $0400 in hex) to saying page 60 (= location 15,360 = 60*256 = $3C00 in hex). I hope I got that right.
Yeah, the pointer, as I understand it is basically just a 16-bit integer, but then Commodore's are 8-bit machines.... You can use 16-bit values as address in BASIC with PEEK and POKE commands to address 64K of continuous RAM just as well, but the 16-bit address space can also be described to be 256 pages of 256 bytes. I don't know what if any difference does it make when dealing with calculating addresses in a program written in BASIC though as it's math capabilities are not limited to 8-bit registers.
What a fabulous mystery and satisfying solution! I've got a few questions that maybe you'll address in your episode on Commodore BASIC Garbage Collection. *①* Did the pointers at the end of the string in BASIC 4.0 also signal the end of the string as a NULL character would in C? Or, was every byte a valid character in a BASIC string and so the length still had to be kept somewhere? *②* What did BASIC store on the heap? Only variable length data types like strings and arrays? *③* I loved how you demonstrated the heap by moving video memory. That was brilliant and made understanding simple. Is it possible to do the same for the stack on a PET? *④* Does your fixed version, DUNGEON40, work with BASIC 2.0? I presume it does, but the video only shows Chuck testing BASIC 4.0. And, finally, *⑤* Did you ever beat DUNGEON? Thanks!
I can answer some of these... 1) From what I understood of the video, the string length is stored in string descriptor. According to the video this is where the pointer in the end points to. 3) I'd have to check the video again and am too lazy to do that, but didn't he actually later show the same thing on PET? 4) Someone else also asked this and he replied that yes, t does work with both versions. The second question I have no idea about - all my answers were based on the content of this very video :D
Hi! I'm Michael Chicago-Wiz (chgowiz), I did the python code that you linked to, thanks for the shout out! I sure wish we had talked before I spent a couple of weeks trying to relearn PET Basic :) I'm glad you had fun and yes, it sparked my imagination and fostered a love for fantasy/CRPGs that has never gone away.
Cheers!
I had intended to let you know I had posted the video, but you found it before I got a chance! :)
@@8_Bit The power of the Internet, someone has already made a "pull" on my python code and suggested some changes! ;) They linked me to your video.
Hi downloaded your python code but its stating ModuleNotFoundError: No module named '_curses' when I try to run it, any idea why ? Is there something wrong with the library as '_curses' doesn't seem to be in your code. Thank you
nm sorted it out.. Had to install windows-curses though pip
Small world; I used to read your OSR blog :)
Neat. I actually never really understood what garbage collection was. I had heard the name but didn't really get it.
Bill did a good job, however Commodore improved it.
No big surprise to me.
No need for those silly modern programming gadgets when your LDA (LB), y 'in here and STA $ ,x 'in there wherever you dang well please! I like playing electron traffic cop =)
There's garbage men to collect the trash in Dallas?
I also didn't understand what garbage collection it was
When you say it sparked your imagination, that's such an understated notion that I share too. There's just something about the simple graphics of old games, especially the ones that use the plain black of the screen as a background (or lack of a background) that gets the brain firing. When your imagination has to fill in the blanks, it becomes a more personal experience. Bravo!
I remember that glitch! I played Dungeon a lot in high school. When the school got the 8032 PETs, we noticed the glitch.
Hi I wrote this game a very long time ago :) Thank you for covering it, hadn't seen it in years!
Hi Brian! It's great to hear from you. Dungeon was a hugely influential game for me, one of the very first that captured my imagination. I'm curious if you remember your inspiration for making this game; had you played Beneath Apple Manor before?
@@8_Bit No-- I'd played Zork which was text-based so Dungeon was my attempt at making a zork-like game that was visual. Nice to hear you still remember it!
That's fantastic - did you get the idea for the "fog of war" reveal of the dungeon from (paper) war games? It's amazing how similar Dungeon is to Rogue. I'm also curious if you did any game development afterwards. Were you the author of that Modula 2 book I showed? I also found a Coleco ADAM book written by a Brian Sawyer, was that you?
@@8_Bit I originally coded the game so you'd see the whole map from the start, but then it seemed to give it all away, so I changed it to just show your immediate surroundings so you sort of discover it as you go which is more fun-- and only involves drawing 8 characters so was fast. I haven't seen rogue but it's possible they thought the same thing-- was that later or earlier? And yes I wrote those books--you're one of the few people who ever bought them! I didn't do any more games but drifted to AI stuff, but it was AI of the 1980s and didn't really do much compared to todays AI which amazes me.
@@briansawyer2543 Rogue seems to have been released in 1980 so it seems you had the idea a year earlier, and Beneath Apple Manor (for the Apple II) was released in 1978. The developers of Beneath Apple Manor and Rogue are all on the record saying they had no knowledge of each other's games, and you're in the same situation too - it's pretty amazing really!
I just love how these text-based/low-resolution simple graphics RPGs give me more enjoyment than modern games. I think its because of the imagination needed to fill in the gaps.
when I'm playing Angband and come across these monsters that can spit acid and melt all your armor, I always stop on my tracks for a minute thinking what will I do, if I may be able to turn back and escape without waking him up, or if I try to stealth walk around him and move on without alerting him... I'm not aware of any other game that brings me that level of interaction and awe out there... Maybe "Xcom Terror From The Deep" which also features randomized maps. Dungeon crawlers rock
Yep, like books are often better than movies based on them.
I think there's a tendency in modern games to keep adding more and more forgetting about simplicity
I learned about the Commodore Pet only a few years ago. I grew up owning a Vic-20 and making crappy little 2fps games in Basic. It blew me away to know that there was a platform _before_ the Vic-20 that was like a Vic-20 with a much, much higher resolution. Footnote: About 33% of the games I made on the Vic-20 were instantly destroyed because of the low quality of the tapes used to save them. But I managed to rescue a couple of them with painstaking editing in an audio app. If only one of those WAV-to-TAP type apps were designed to continue reading the WAV even after discovering a corrupt byte, I'd have rescued everything. Still don't know why every last one of them couldn't handle corrupt data in a format that was destined to be inherently prone to corruption. Somebody should take a modern stab at redoing those.
Chuck Hutchens is a youtuber who needs more viewers. I've been watching him for a while. His stuff is great!
I'm a fan of Chuck's, and I'm really glad he helped out with this video!
Congratulations to Robin with his method of visualization how the string heap is populated by means of the screen memory. This was really clever and was my high-light on this show. :)
LMAO, love the ending song. Those old dungeon crawlers really sparked the imagination. The game that really fascinated me was Dungeons of Daggorath on the COCO2. One of the first "3D" dungeon games with similar mechanics. I think that is the main problem with modern day graphics. As amazing as they are, they can also take away from the whole imagination generating simple graphics. I have noticed some simple indy games that look like some of the really old ones. I think they are popular for this very reason.
Robin is a lot Neil Young inspired
Someone made a video playing Rogue, from what I remember fairly unedited video for that livestream feel, in the middle of the video it started pouring rain outside the guy's house, the microphone captured the rain sound and provided the PERFECT ambiance sound to go along with Rogue. Really amazing video... Since then I always keep a "rain sounds" mp3 file around to listen while playing, or just to isolate external noise sometimes. Also, there's an entire genre of music called Dungeon Synth of ambient calm percussion-less music, I'm not sure if its origins have any relation to the games, but it goes well while playing too. Classics like "Depressive Silence I & II" and "Secret Stairways" are my first recommendation to newcomers.
I am so impressed with your knowledge, Robin!
That Dungeon game is the FIRST computer game I ever played. It's what started my whole trek down the computer programmer trail. Such memories.
Oh so close. 😁
I too grew up in Northern Ontario and had a teacher named Mr. Hall. He was an elementary teacher though.
We played this Dungeon on our HS PETs. Um, I mean, we did homework assignments on our HS PETs.
Small world! Northern Ontario as well and played Dungeon on the PET.
I found a bug while reading the annotated source code. When you see gold, if you don't get it right away, but instead just move around next to it or press 5, then the potential amount of gold keeps going up. At the start, if you move 10 times next to the G, you'll get 10 gold pieces when you finally grab it. The effect is greatly compounded if you have some gold. If you have x gold already, then it will add a random amount from 1 to x to the pot for each move. The potential amount never goes down, either. I was easily able to get more than 700 billion gold pieces, enough so that the amount was displayed in scientific notation. I wish I'd known that back when we were playing this game in school.
Thank you Chuck! Fixed it on my PET, works great!
Wow, I was born 16 days after that first CURSOR tape was released :)
My first computer experience was on a PET in our high school computer science class. I played lunar lander and was hooked. I took BASIC and then got a VIC20, upgraded to a C64 and in 1986 or 87 I got a C128. I learned by typing games in from magazines and then got a book on 6502 machine language and taught myself that. So glad I grew up during this time because I became a software developer.
Got my 4016 back up and running this year, the mains filter of my disk drive let out the magic smoke. The pet had video memory chip failure but after replacement and a strip and clean back up and running fine. Got a pile of disks to work through to see if they still work after being stored in the loft.?
Great to see pets still being used and new hardware being made. If you visit my channel your get to see my one owner pet, I've had it since new and it has survived many house move clear outs.
Keep the pet videos coming 👍
As I sit her grinning to myself like an idiot while watching, I'm struck by how absolutely useless but at the same time UTTERLY AWESOME this is. I'm absolutely fascinated by this, especially when Robin visualized how the garbage collection worked. Very nice video, thanks guys!
Useless? Now people can play Dungeon without the glitch on all BASIC 4.0 PET's.
Someone made a video playing Rogue, from what I remember a fairly unedited video for that livestream feel. In the middle of the video it started pouring rain outside the guy's house, the microphone captured the rain sound and provided the PERFECT ambiance sound to go along with Rogue. Really amazing video... Since then I always keep a "rain sounds" mp3 file around to listen while playing, or just to isolate external noise sometimes, it's good for concentrating while working. Also, there's an entire genre of music called Dungeon Synth of ambient calm percussion-less music, I'm not sure if its origins have any relation to the games, but it goes well while playing too. Classics like "Depressive Silence I & II" and "Secret Stairways" are my first recommendation to newcomers.
Very few games can evoke the same feelings that these ASCII Rogue-likes bring, the only one that comes close might be Xcom Terror From The Deep which also relies on randomized levels, the foundation of that game is really a dungeon crawler with a futuristic sci-fi coat of paint on top instead of medieval weapons.
Wow, your channel has so much content now. You've just been steadily churning it out this whole time. Excellent work, great subject choices. I'm going to watch em all. In a row.
Haha, thanks Mike! I wonder how many hours that is in total now. I think it's around 80 episodes. And then I've got more on my 2nd channel now, in case you haven't discovered that yet. Thanks for sticking around and watching!
I'm not a Commodore guy (Apple II Forever baby)... anyways, this was awesome. I love it when old programs are fixed 40 years later. Too cool.
FPBASIC is pretty similar to Commodore BASIC (they share most of their code) so maybe it could run on an Apple ][+...
There seems to be some lost history about early Roguelikes, and its great to see some of that fog cleared away. I used to write BASIC programs on the C64. I still have one game on tape from 1985 that uses string functions (a clone of Q-Bert). How I figured all that out at such a young age I can't imagine.
If you did it right, you could possibly display PETSCI graphics and maybe even animate with a couple of preliminary pokes and setting the values of strings. Though it would probably be gawdawful slow.. It would definitely confuse most people looking at your program listing though.
8:48 OMG a 2031 and an original commodore IEEE-488 cable. What a rare sight this is.
Very nice code analysis and explanation!
I love your hand. :) It has so much personality and makes your videos so enjoyable to watch.
very informative & quite interesting to see the inner workings of basic memory handling.
thank you for sharing this sweet retro past that i did not have
My friend's name was Ian, too. His Dad was the computer teacher at their high school. He had Commodore PETs in the basement!
I remember playing text games on my Vic 20. Good times!
I still remember the first time I got to play a Scott Adams game on a VIC-20, it was amazing!
Telengard was the first C-64 game I bought--similar type. Loved getting into the BASIC and making changes. Great fun and great times.
Nice video. I was able to ascend in Nethack on a Linux machine years ago! Okay I had to cheat via a scam where I would save then back up my save file.
So much easier :)
Really a very cool video :) And love all the explanations. I know I mentioned on Twitter but when you re-routed the string memory into screen memory that was excellent and really helped me to understand what the garbage collection is (had often heard that term in the past).
I remember one of my first “official” computer classes in the 70s/early 80s. It was with mr Kashner at south shore middle school in Seattle, ,Washington. He has a couple of the PETs modded with a switch on the front that essentially flipped the rom chip and gave the user a completely different user interface. It also included a different rom set adding instructions that were not available in standard rom, and as such, not available to most of the class. He also had a couple machines setup with the Logo Graphics’s language which allowed you to program movements of the “turtle”. Mr. Kashner was way ahead of his time and a complete nerd’s nerd. He taught us binary base 2 math and machine language in 7th grade. Something no other teacher would try to tackle.
Amazingly, I also ended up with a new Timex Sinclair from the local K-mart. Then, Atari 400xl....the. 800...then the ever expandable TI99/4a which had a cartridge slot allowing for programming in basic and access to the speech module. Programs still stored on cassette tape where you essentially hit record on the device, and then play the code out through the audio out to save the encoded sounds to the cassette. The TI had great sprite support and was super simple to program.
Later moved on to Apple ][e, the ][c then the last home computer I ended up with was the Apple ][gs with sider 40 meg hard drive and a 9600 baud usrobotics modem through the Sysop deal. A steal at exactly 505 bucks! Because I ran a BBS I eventually updated the hard drive to the cartridge system with scsi interface allowing me to swap our 40 megs at a time to allow users to download stuff. Can’t remember the name of drive. But using carts was way ahead of its time. It did have drawbacks though cause if any dust got in there, you were screwed. I lost more than one whole platter of data to this issue! Great system and great memories.
30:01 That drive I believe is the petSD+ but this one here has an awesome looking custom case.
I mounted mine under the 'hood' so mine does not require a case at all.
I love how you explain your garbage collection theory about what goes wrong in the different versions. You explain it so well that it’s easy to understand, but I still feel smart that I “get” it now, because you definitely kneed some knowledge to figure this out. You would be a great teacher.
Awesome, that game box actually represents the game. Funny how little CHR can go a long way, but on the NES they made some nice looking games that are very bad, or aggravating to play.
Thank you for sharing.
Does anyone remember the freeware PET game "Toker", with the object being to smoke a bong as quickly as possible? It was a very popular underground program in my school and possibly got some of the stoner kids interested in programming. I remember one of the REM statements in first few lines of the listing as saying "Copy me I want to travel!"
This takes me back... The first computer game I ever played was something called "The Valley" on a green-screen Commodore PET at my school. This was back in the days when computers lived in "the computer room" and you had to book time on them! :) It looked and played similarly to this "Dungeon" game, and even though it would be considered incredibly simple BASIC-coded fare by modern standards, it was a major leap in depth and complexity over the relatively simplistic action games that I was used to playing at home on my Atari VCS.
my first roguelikes were Hack and Larn on the Amiga from about 1987. Larn was so good. The character graphics were just enough to keep the feel of the roguelikes but make it a bit easier to remember what you're looking at when you explore the dungeon.
Sweet, glad for the fixed version. :)
My addiction to Rogue started on the Amiga. I got the Epyx game you have for my Amiga 1000 in early 1986 and was completely hooked! There aren't many games since that have beaten the feeling of finding the elusive Amulet of Yendor.. That took quite awhile, jeez. Brutal game. :)
>Ending credits song is "Rogue" from Bedford Level Experiment's album "Place Without A Computer"
badass old school punk sound
Bedford Level Experiment's :D Love the name of the band, I'll have to check it out sometime :DD
For those of your viewers interested in the history of roguelikes, there's David Craddock's "Dungeon Hacks: How NetHack, Angband, and Other Roguelikes Changed the Course of Video Games". I got my (audiobook) copy cheap in a humble bundle a couple of years back, but it's still around as an ebook, too.
Thanks for the suggestion, I just found a copy of the expanded edition from 2019. Looking forward to reading it.
so cool to see how much gaming has evolved in the past 40 years
@17:47 You can see the same visual representation of strings in Applesoft BASIC with:
HOME:POKE 104,4:POKE 1024,0
NEW
HIMEM:2040
A$="CAT"
B$="DOG"
A$="HORSE"
? FRE(0)
Very cool!
tnx for a instructive video of how it works and the fixed version. i just have to try to play it when my Pet screen is fixed again.
I remember many many years ago in one of those great 8-bit computer magazines for the Commodore 64 (I think it was "Compute! Gazette") they were talking about garbage collection (though they may have used a different name at the time) and they had a very short BASIC program to type in (less than a dozen lines if I remember correctly) to demonstrate it. It forced a situation where the system would do a garbage collection which totally "froze" the computer for at least a full minute. They also gave several tips on how to eliminate or at least minimize garbage collection in your BASIC programs.
Some languages allow you to turn off automatic garbage collection or even require you to do it yourself manually. Not doing it correctly can lead to memory leaks, which can be hard to track down or even notice except under certain situations (like the program running for a very long time).
Yes, I believe Jim Butterfield did a couple articles on the subject. I was going to get even deeper into garbage collection in this episode, but reigned it in to try to stay on the main topic. Hopefully in another video.
@@8_Bit Sounds great. I think a lot of people would find that interesting, and especially why garbage collection on those older systems was so much more crucial than today (though still necessary) because of the far more limited RAM available in the first place. I wonder how the Atari 2600, with its microscopic 128 bytes of RAM, handled GC, if at all?
@@JustWasted3HoursHere The Atari 2600 doesn't have any built-in firmware/operating system at all, the only software it executes is on the game cartridges plugged in. I'm almost certain no commercial 2600 cartridge ever implemented garbage collection; even the BASIC Programming cartridge for it didn't allow dynamic strings so there would be no need, and the tiny amount of RAM made it impractical. Coincidentally I now have a working BASIC Programming cartridge and keyboard controller pair with overlays for the Atari 2600 so I hope to make a video about it soon-ish.
Not only minutes, on a C64 using the whole BASIC memory it will take hours! The time increases in quadratic manner according to the count of non-empty strings.
Try (add line numbers to use it as a program)
C$=CHR(65):DIMI,A$(9600)
FORI=0TO9600:A$(I)=C$:NEXT
PRINT"COLLECTING..."
TI$="000000":PRINTFRE(0)
PRINTTI$
To shorten the run-time the warp-mode of an emulator could be helpful. ;)
@@8_Bit There are a lot snake oil tips around in magazines those days (even until today). I saw so many discussion which showed a huge misunderstanding on how useful and effective such tips are. However, if you are using strings into the hundreds you are helplessly delivered to the GC whatever you will do (even with all the things honorable Jim is telling us). In the end, the time consumption depends on the number of non-empty strings and increases quadratically.
Anyone who wants a deterministic behavior for a serious application or game which handles large string arrays is urged to use an alternate implementation. Such a requirement led me to develope Super Garbage Collection back in 1985 (mentioned on www.c64-wiki.com/wiki/Garbage_Collection).
Very interesting! There are still sooo many features and underlying “interesting” implementations of the Commodore Basic, that I am only slowly starting to understand, here 35+ years later. I think there could be a great video-series in simply going through the source code, and with examples show how various parts were implemented! I would love to watch something like that!
Great job Robin! It's incredible how much one can still learn from good-old Basic these days.
A tip of the hat to Bill Gates for PET BASIC, one of the best of the era, and one of the only with on-screen editing. A pity some of the subsequent MS products have been kind of a letdown.
Yes, I'm still amazed how much there is to learn from these old machines, even just within BASIC.
@@greendryerlint I recall the on-screen editing feature was still there in DOS - not in QBASIC but in the earlier GW-BASIC :) You're right about the other products though, that's why I left the MS world in 2002 (yes, kinda late, although I did try to leave earlier in 1997 with OS/2 WARP 4 but I couldn't run the software and games I *needed* so I went back for couple of years. OS/2 was technically far superior to Windows though).
I had totally forgotten about playing this game back in HS until seeing this. Thanks for the memories!
I used to play that Dungeon game so much in my middle school computer lab PET's. Now I have to set up a PET emulator to try this. I think I remember typing in that Shark! game and Bat! game from a book or a magazine to save to a disk and play. That is some collection you have! The explanation and debugging you did brings back all kinds of memories about programming Commodore machines. Thank you!
Bat! was a lot more fun as I recall if you changed the gravity coefficient variable. I miss the way BASIC was so simple to comprehend and modify. Python captures a lot of the feel of those early days of programming.
Wow Robin. I learned many things about Commodore Basic I'd never even thought of. I didn't realise there was such a thing as garbage collection in Basic. What I wondered though: after garbage collection is finished, would the first "HOR" characters in your example be reused when you reserve another string?
Thanks for the link to Chuck's channel. Almost makes me want to get a PET again :)
Definitely get a PET ;) Yes, the "HOR" would be overwritten by the next string used.
@@8_Bit A looong time ago my uncle gave me one. I had it for a while and then gave it to a friend. Dumb.
Rogue really should be called a "Dungeon-like"
EDIT: I guess they both should be "BAM-likes"
This PET is awesome! BRAND NEW!
I respect this channel
And yet, the Amulet of Yendor might easily be the rarest piece of hardware ever. As always, loving your content.
I played it at school back in the day. What a blast!
Happy to help, 8BST! :)
Nice work on patching this old game making it compatible with other BASIC versions. Made me think, maybe I should get a PET, checking ebay $1000 - $3000, well perhaps not, I guess VICE will do for now. At least I have my old HP-150 with touch screen and dual floppy drives.
PETs still sell locally for $300 or so sometimes, if you're lucky. But yeah, they're getting more expensive all the time.
The first time I put my hands on a computer was at the school, on a Apple II . Then imagine how I was hooked when I saw the first ads of the VIC 20 ! It had colors, the pet-scii graphic characters on the keyboard, one million units sold! I knew little of computers but yet I was sure that it was possible to put that graphics into my basic programs, well somehow. With the young and fresh mind of the time I was already wondering of the things I could create. Maybe the games I saw only at the arcade halls. So much more than the professional looking Apple, and so cheaper too! I also thought that it was not possible and I had doubts about its real possibilities. So, just to make sure, in 1983 my first computer was another one: the mighty Commodore 64!!! And I was already launched over the skies.
Thank you so much for fixing this bug! I remembered this game fondly from the 1970s/80s and tried several times to play it again. Though I might be misremembering things! Why did this strange "magical staircase" appear in every version I could find? Now I can play the original version again!
I loved that game and most of the Cursor offerings. My school subscribed to them and were pretty liberal about allowing copies. (though I didn't usually tell them) I still have a 3032 PET and 8050 disk, and both work well, not bad for 40 year-old electronics. I remember modding Dungeon and adding sound, a secret key to double hit points for those days you wanted to cheat, or just didn't want to lose when the game stingily didn't raise your HP, and other mods. I think I might have added a 'hyperspace' button to it at one point. I never did fix the graphics issue as my machine was not susceptible to it. Two of my other old favorites from Cursor: Miner! and Ouranos! I might have to shell out some money for a mini-PET too, though I wish it was both a little cheaper and came with a keyboard that didn't make you long for the chiclet keys of the original PET. Good work on fixing this annoyance to BASIC 4.0 users and great explanation of why the bug exists.
2:03 Modula-2… he might have bet on the wrong horse!
5:52 Maybe the "Y" means "You".
14:05 It's also why the strings from « 90 PG$="DUNGEON : NM$="15" » don't end up at the top of the heap.
15:29 More specifically, BASIC 4.0 puts two bytes after the end of each string in the heap that point back to its string descriptor. This allows garbage collection to take O(n) time instead of O(n²) time. Both algorithms find the next-highest live string in the heap and move it to the highest available space. In BASIC 2.0, each search for the next-highest live string takes O(n) time, while it essentially takes O(1) time in BASIC 4.0 since it can just follow the pointers and gap lengths.
22:16 One question is why both "DOG" and "CAT" have "c▞" as a pointer when A$ and B$ are separate variables that would be 7 bytes apart in memory. I'll assume that "▞" = 255 is a special value that indicates the string is unreferenced junk and gives the gap length in the low byte. But they shouldn't be unreferenced since A$ and B$ are both still live.
Same in the game: most of the pointers point to the same descriptor, "⎼!" or "G!", despite the array elements being 3 bytes apart. Also, the game appears to POKE over some of these pointers, which which should make the garbage collection malfunction or crash if it's ever invoked.
29:10 One problem with your method is that it will reduce the amount of RAM by 1024 every time you run the program. You should at least restore the memory on exit from the program. A STOP exit would still remove this RAM from use if the user goes on to load a different program.
Aha, it's You, You, You. Now I have Blues Brothers stuck in my head.
Yes, I also have questions about why those string pointers are the same. If I figure it out, I'd like to do an episode dedicated to garbage collection.
Ah, good point about the RAM pointer moving down. It's true that STOPing, LOADing, and RUNing on a single boot are much more common on the PET. On the C64, especially in the game world, everybody's been trained to reset or power cycle between games. Do you have a suggestion about what the best way to deal with this is? Certainly setting the pointers back on exit is a good start.
@@8_Bit: You can increase the top-of-RAM pointer by 4 pages when the user does a clean exit (7:54 "Want to play again?"). Not much you can do about a STOP exit before loading another program. On startup, you could normalize the PEEK() value to either 4096, 8192, 16384, or 32768 (divided by 256) before subtracting 1 KB, to handle the user (or yourself when debugging) STOPping the program and then rerunning it.
@@8_Bit Could they be different numbers but rendered the same? like with the "DOG" "dog" hack but in reverse. Are some of the chrs the same at the high end maybe?
I thoroughly enjoyed that!
Wow, not a programmer, and never will be, but I do like how you go through and show how things are broken and then the fixes. Wish we were back in more simple times.
You just got Chuck a new subscriber.
Well done doing this. I finally got round to playing it properly on my 4032.
It still has a few other bugs. An @ sign (and other things) sometimes appears on the second line, one time I cleared the whole map of gold and enemies but it didn't end, and there is a gold bug mentioned in these comments that just increases the gold all the time. Still fun though.
I added some sound effects to it to make it more interesting.
The @ is coming from line 970. It's the poke e+ax,v1 (48+32768,0). But I don't understand what's it's for, so I can't fix it. It seems to appear at the top left char on earlier PETs, then get overwritten by the "H" from HIT. I might just blank the line to get rid of it.
The gold problem seems to work better by moving line 680 to the 1200 area when you actually get the gold.
Notch has a great taste in TH-cam videos :D
*PLEASE* could you review all of your Cursor tapes from issue one? Many thanks.
Back in the day I was a big fan of Telengard. I fixed several bugs in the source code and even added a bit of additional functionality (neither of which was easy because it already used most of the memory). I wish I still had my modified code (along with the rest of my C64 discs) - I'd love to look at the changes all these years later.
The amazing thing is that in 1979, the board game Dungeon! from TSR and the Dungeons and Dragons RPG which introduced the staple gameplay concepts, were themselves only 3-4 years old.
In early 80's found listing of Othello writen for Pet. It worked also in C64.
Does anyone else remember a PET game that was kind of like this, except you were trying to get to a Sword & Jewels in the center of a maze...once you got them TONS of monsters would jump out at you. Was it called Sword Quest or something like that..???
Yes! It was indeed called Swordquest, and I played it quite a bit. This video brought back memories because it has the same fog of war effect. You could shoot magic arrows that would expose parts of the dungeon far away from you. It was written by P. O'Donovan, copyright 1979 Fantasy Games Software P.O. Box 1683 Madison, Wisconsin 53701. I managed to read it off an old cassette tape a decade or so ago, producing a .T64 tape image that runs on VICE! If you look at my channel you'll see some videos of PET software, but for some reason I didn't make one for Swordquest.
@@pepstein Any idea where I might find a dump of the game? I'd love to play it again - it played a big part of 7th grade :-)
@@tonymason6686 I uploaded a short video: th-cam.com/video/9CGrQSbZLKg/w-d-xo.html. I can't find the game anywhere online.
What a fantastic video tutorial! Thanks.
10:10 Dungeon layout revealed when the player dies? Pretty neat little bonus :)
And Shift to move through walls also an interesting concept. Really cool to see how the simplicity of this genre of game seemed to stimulate the developers' creativity for what could be done more.
Don't feel bad...I have some house projects that have gone on longer
Thank you. Runs on my 1979 CBM 3032. Okay it's Basic 2...
I loved everything about this video, thanks as always!
loved sword of fargol - you could break into it and easily figure out the varbiable he used - like str for strength or h for health or whatever it was - but it allowed us to really play it far longer than we could - the game could be quite unforgiving. By breaking into the game and changing variables it helped me understand programming more - i was only 9 years old at the time.
Unfortunately I didn't have the luck of getting into computer programming when the 8-bit systems were all around, but my family bought a 286 PC (IBM PS/1 it was) with DOS (we upgraded the crappy version to MS-DOS 5.0 which had two BASIC interpreters, the older GW-BASIC and newer QBASIC... I remember digging around NIBBLES.BAS and making the worm grow to totally insane lengths :D Me and my little sisters had some giggle filled fun playing it in 2 player mode :D
love these vids, great work
thanks!
Very cool video. I'm glad I came across this channel!
What about Temple of Apshai? It was released in 1979 for TRS-80 and PET, by Automated Simulations, later renamed to Epyx. :)
I still to this day fire up the C64 emu for Sword of Fargoal.
I really enjoy your coding videos. I think you and Shallan are some of the best C64 coders on TH-cam (and Twitch for Shallan). You two should pair up and code some stuff. :-)
I loved this game, I thought it was the best thing in the world at the time. We had one chicklet style pet computer with tape drive built in, then the style you are using. Shortly after i got a VIC 20 that I still have
Awesome video! Love the clunky keyboard.
I love the catchy tune at the end!!
Thanks, the whole album can be heard here: bedfordlevelexperiment.bandcamp.com/album/place-without-a-computer
@@8_Bit Thank you SO much =)
It's just composite-out but internal. You can use a unity-gain opamp to copy the signal without affecting the original monitor, then use a USB device that takes composite for video recording to PC.
This was REALLY cool! Thanks!
I'm sure you'd love Telengard for the C64. By Avalon Hill in 1983. Amazing game written mostly in C64 Basic.
Awesome work Robin. :-)
I keep hoping I’m going to find a PET cheap in one of the thrift stores I shop at from time to time. Oh, I also ordered the Vic 20 PSU I needed today. The PSU is a custom build.
If you had typed in the second A$ definition as "turtle" I was going to howl with laughter. As it was, my "turtle" and your "horse" elicited only a wry chuckle.
Great episode!!
This is great, I recall being in the computer lab around 1982 and playing PET space invaders and Nightmare Park. I thought the games on the TRS80 were better though... loved Star Trek and also there was some galaxia like game for the TRS80 that I've never been able to find. The comp lab was full of people just wanting to play that game. :D
I've got a TRS-80 Model III here but not really any software for it. That PET Space Invaders was amazing for the time. I want to know who programmed it; I have a theory it was one of the HAL Laboratory guys.
@@8_Bit That would make a show unto itself! Great stuff.... all machine code right? I recall Nightmare park was in BASIC... I remember loading the tape into my C64 and changing some poke/peek addresses and I think I got it to work... long time ago! :D
@@neilloughran4437 Yes, when all the other PET games we had were BASIC, that all machine language Space Invaders stood out above all the others. It even had the attract mode with an invader coming onto the screen to change the PLAV typo to PLAY. It's suspiciously good. And yeah, Nightmare Park was BASIC and ahead of its time in some ways too.
@@8_Bit Hopefully you can find out who programmed it! Maybe some easter egg in the memory even! I used to list the contents of memory maps in my C64 and find all kinds of things back in the day... swear words in Monty on the Run for example (used to stop people entering rude words in the high score table!).
@@8_Bit just checked a PRG file for the ASCII... no easter egg as such...
only readable chars I see are amongst this lot....
1 GAME OVERˇÌLõ OêÔ∞⁄ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄġÿ¿0ÔhêãÖ}reUPJPUbmxÇàzhVD2((6@HMP X,Y)X),Y,X,YPLAVùùùùùùùùùSPACE INVADERS
ˇ
....... ?MYSTERY
....... 30 POINTS
....... 20 POINTS
....... 10 POINTS
TOP 1500 POINTS FOR EXTRA BASE.ˇùùùùùùùùùSPACE INVADERS
KEYBOARD CCOMMANDSùùùùùùùùùùùùùùù4í-MOVE LEFT
6í-MOVE RIGHT
Aí-FIRE BEAMˇ******È---flJKJKÈÚflbôbÏb˚ˇ„ˇ˘..... ?MYSTERY
I was surprised when you showed the Sinclair/timex z81 machine, did you program anything on that ? in basic perhaps. Sinclair48k was my first machine and due to the amount of great cheep games available (UK) i only played games on it. So many great z80 based micros, i would love a Sharp mz80k or even a TRS80. Thanks.
He kind of sounds like Emo Phillips.
Very informative! I just found my old VIC20 in storage and pulled it out, got it working with some difficulty. Was there ever a version of Dungeon for VIC20 BASIC, or any of the other Rogue-likes? And more importantly, how does one put the programs onto a cassette? I remember in high school seeing an ad in a computer magazine for Rogue: power in my hand, people at my feet...ROGUE! lol
I don't think this Dungeon got ported to the VIC-20. Sword of Fargoal is probably the best Rogue-like for the VIC-20; I'm sure it requires a RAM expander though, probably 8 or 16K extra. There are PC tools for converting Commodore .prg files into .wav files which could then be saved on cassette, but that's a big pain. You're better off to buy a uIEC or SD2IEC type device so you can load directly off SD cards.
@@8_Bit Thanks! I was looking at SD2IEC and likely will get one along with a Penultimate cartridge for the RAM expander.
Back in early 2000's I transferred some programs by converting the TAP (Tape image files for Commodore computers) to WAV file and playing it with Goldwave or Winamp on my PC which was hooked to stereos where I had placed an empty cassette and pressed record before starting to play it. Wasn't that painful to me, I got all of them working on the first try. Just turn the volume on the stereo way down; I turned it right down to complete silence, it only affects the volume output from the speakers, not the recording volume.
I might have been lucky getting them all done so easy.
Nice work sir!.
16:59: The location vs page thing could have been explained better, because many of the rest of us may not know that the C64 had 256 pages that were 256 bytes each. I had to look that up myself. It wasn't immediately obvious that this was about changing the pointer stored at location 648 (= page 2, address 136 = 2*256 + 136 = $0288 in hex) from saying page 4 (= location 1024 = 4*256 = $0400 in hex) to saying page 60 (= location 15,360 = 60*256 = $3C00 in hex). I hope I got that right.
Yeah, the pointer, as I understand it is basically just a 16-bit integer, but then Commodore's are 8-bit machines.... You can use 16-bit values as address in BASIC with PEEK and POKE commands to address 64K of continuous RAM just as well, but the 16-bit address space can also be described to be 256 pages of 256 bytes. I don't know what if any difference does it make when dealing with calculating addresses in a program written in BASIC though as it's math capabilities are not limited to 8-bit registers.
Fascinating stuff!
What a fabulous mystery and satisfying solution! I've got a few questions that maybe you'll address in your episode on Commodore BASIC Garbage Collection.
*①* Did the pointers at the end of the string in BASIC 4.0 also signal the end of the string as a NULL character would in C? Or, was every byte a valid character in a BASIC string and so the length still had to be kept somewhere?
*②* What did BASIC store on the heap? Only variable length data types like strings and arrays?
*③* I loved how you demonstrated the heap by moving video memory. That was brilliant and made understanding simple. Is it possible to do the same for the stack on a PET?
*④* Does your fixed version, DUNGEON40, work with BASIC 2.0? I presume it does, but the video only shows Chuck testing BASIC 4.0.
And, finally, *⑤* Did you ever beat DUNGEON?
Thanks!
I can answer some of these...
1) From what I understood of the video, the string length is stored in string descriptor. According to the video this is where the pointer in the end points to.
3) I'd have to check the video again and am too lazy to do that, but didn't he actually later show the same thing on PET?
4) Someone else also asked this and he replied that yes, t does work with both versions.
The second question I have no idea about - all my answers were based on the content of this very video :D