Hi, it's Robin. I'm a programmer, collector, and all-round enthusiast of vintage computers and video games. My videos focus on what I find interesting in the realm of 8-bit (and sometimes 4 or 16-bit) computing and gaming, whether it's about easter eggs, programming, bugs, history, game development, or whatever else. I usually go very in-depth with topics because I want to understand the how and why. There's still so much to learn and explore in these old systems.
Please note: you're of course welcome to email me, but the longer and less focused your email is, the less likely I am to respond. There's many of you, but just one of me, so requests to debug your code, or teach you assembly, or to phone you because "you just have some questions" all take a lot of time and energy that should be put into making more videos, and will probably not be answered. Sorry!
Пікірлер
Love making games on it in basic then using the C-128s basic compiler. Not pure machine language speed, but for most games it worked out pretty great! Of course the sprites were also the shiz for games.
I found out the PowerCartridge solves the LOAD mess. It just allows DRUN/DLOAD "Name" and you can use wildcards. Also you get DIR that is non destructive, unlike LOAD"$",8 and LIST
Yes, almost all utility cartridges (Epyx Fast Load, Super Snapshot, Action Replay, etc.) provide a non-destructive disk directory command, and often change the default device from 1 (cassette) to 8 (disk) which removes most of the reason for adding comma 8 after a load command. File wildcards already work fine on disk, it's cassette where they aren't supported, and Power Cartridge doesn't change that as far as I'm aware.
I saw that Basil Fawlty reference. Also, Betsy Ross was known to me because she appears in Day of the Tentacle, in a very famous puzzle that involves changing the US flag design to be used as a disguise 400 years in the future
hi I'm a 53 year old widow but I had one of these as a kid and at school. I used "Bankstreet Writer" and wrote in a different but cooperative code everytime without compiling so like ,, how what was I doing ? and how did I used to colorize the 1st my instructor had seen of color font + could make intergeres flow random non consecutive and now did I used to bust my own 16bit password so I could get my homework out? = my goal. knowing 36 ways to wipe a corrupted drives reinstall win 7- 10. + I had to learn how to undo the hood ; move the cmos pin over to reset; and hold the power button down with the battery out and pc plugged in to drain the condenser to remove a malicious power on password somehow remotely installed and took johns bitcoins. it doesn't matter because u can't do your own private in California but I'd like to not be hacked , can I use c64 for sercurity?
Two years later, I'm still a lamer!
You forgot the first Laptop, Epson HX-20 Portable Computer (released 1981, price I don't remember at the moment). Officially it could have been upgraded to 32kB RAM; but I own two special computers that were modified for the German Army, with 64kB RAM installed! But only 32kB usable at the same time, you needed to switch the memory banks with a special list of steps 😊
Not sure how it would slow things down, but with a little adjustment to the character set, you might design some mean looking little faces for the lowest or leading block of each column, and they look meaner as they get closer. Also instead of "Game Over" I would suggest "Thou Art Doomed" or something in keeping with the theme.
Is that chuck norries in BL II ? 😂
Exept you're 40 years late
Late for what?
I have been using chatgpt as a coding assistant for a long time now and what I found it is the same thing, it not only does stuff wrong it sometimes claims bugs are fixed but they are not. You end up having to fix all the bugs in it defeating the purpose.
12:35 "R is the base register" but I don't see any use of it. Even more, I removed both occurrences of it (on Vice emulator) and the "Balloons" program seems to work just the same !
Looks like you're right; that must have been leftover code from when this example was being developed and I didn't notice it wasn't being used. Good catch!
I still own my Commodore 64 64c,128d, and 128. 1581 3.5inch disk drives, 1571,1541 5.25", all programs since 1979. The 1200 baud modem, printers etc. Never found support since 1990
I'm amazed it's that fast from an interpreter, I expected it to compile the code first. He should make a compiler too, although not sure if it could be that much faster. If only this was around back in the day.
Hey Robin I realise you are not going to fix the entire code but you changed score variable then the next chapter you did not and said it was ok because you ran that chapter but the score variable was after an if then statement lol. Love the videos great work
I find the official user guide/manual and the reference guide are guilty of the same thing. Using this "dumbed down" language that isn't helpful because I'd rather it tell me the proper term along with an explanation, then suddenly it launches into unexplained code. It's definitely helpful going through it though but I need other books to actually make any sense of it.
you're using a compiler. This is not really programming in assembler
I don't use any compilers in this video. There are four versions of "hello world" in this video, written in: interpreted BASIC, Turbo Macro Pro assembler, SuperMon 64 machine language monitor, and written in machine code bytes with a BASIC loader.
Awesome series of videos, Robin! I love Le Mans as it's the only racing game I know of that uses the paddles, which I think are sadly underutilised. If you ever feel like coding another game for the C64, please consider Sega's Turbo with paddle support. John Champeau of Champ Games did an amazing version for the Atari 2600 & I would love to see this on the C64. Cheers
the 16K, was the address able memory space, ram rom, and else a addressable, rateable or not, even to, pc, mac, the maximum addressable memory, upper top limit, of address able space even on memory installed,
I'd love to play a game like that on Atari 2600. Maybe something based on Centipede. But with no centipedes. Just more and more mushrooms, descending upon you.
This game was so fun, Robin! I almost beat it on my first try :) Wish we had this in Compute's Gazette back in the day!
I was thinking about buying two of those Hyperkin Atari joysticks. Are they as good as the original CX40's? Cheers from Ottawa!
I really like them, yeah. They're a lot like CX40s but a bit more comfortable, have a longer cord (almost too long), and seem to be a bit better constructed. So yeah, I recommend them especially if the price is still reasonable like when I bought mine a few years ago.
Reminds me of "back in the day" when I hacked up "quick print" routines from the original basic ML routines, though this is obviously a full-features product rather than hacking. Even that made a massive improvement (mostly as I had no error checking at all and different calls for integer and string). Yet another opportunity to be famous wasted (lol). Well done to Aleski and thankyou for sharing this with us. I'll have to check it out.
So I'm assuming this can't run on SuperCPU since this is a different kernel and SuperCPU has its own ?
I haven't tested it on my real SuperCPU but it works fine on the VICE SuperCPU emulator. Hare Basic just patches various BASIC/C64 vectors as far as I know, so it's compatible with SuperCPU and probably other well-behaved peripherals.
11:02 Line 40. Wouldn't printing to column 40 also invoke that horrible C64 bug where the editor reacts to a 40th column print by converting the line to an 80 column logical line, thus forcing the cursor down one too many lines. And so, gaps between lines. There ought to be a way to toggle that nannying off during program execution. It's only needed for editing prior to starting the interpreter. Did they fix that in the C128 and Mega65?
40 columns would otherwise be fine as long as the print in the 40th column has a semicolon after it. The next print would continue on the next physical line, and there wouldn't be any double-spacing. The only problem would be the double-line scroll as it scrolls by logical lines, not physical lines. I think it's kept active during program execution as INPUT also uses the editor's logical lines to allow an input up to 80 columns. No idea if they changed that behaviour on the 128 and Mega65, I'd have to research that.
There must be a poke or three to disable that. There is a kludge using C='s active control codes where you get to print on the 39th column, use the back(left) cursor code, then an insert code to push the last char to occupy the 40th column. Finally you print in the 39th column again to fill the gap made by in insert.
Hello, is there any emulator in Windows or Linux for people that don't have the Commodore hardware?
Yes, look up VICE Emulator, it's very good.
Hello. Your game is cool. "descending doom". this game develops decisiveness in me. you have to decide. and choose. what to shoot and what to leave for later. the game has one bug. when I break the penultimate block at the top. I will choose left. or right. and right back to kill. the block clumps together. and the game does not detect the end of the game. I can't describe this error any other way. it's happening too fast... Regards..
Thanks. That's interesting about the bug, I haven't seen anything like that happen. So when this bug happens, the screen is completely empty of blocks and yet the game doesn't end? It sometimes takes a few seconds to detect end of game, but you're saying it continues to run indefinitely? Or are there blocks or bullets stuck on the screen that can't be shot? If you could help me understand so I can try to replicate this.
@@8_Bit on the next error. I'll wait longer. and I'll let you know.
I had to play it a few times. I managed to record a video. Regards... kzread.info/dash/bejne/fGaeo5mBZLzbZtY.html
Can you also do it with a C program compiled with cc65?
Hi Robin. Thanks for the video. Have you tried Vision Basic yet?
I haven't. I did sort-of consider buying it when it was on sale a while ago but the high cost of shipping to Canada put me off again. I think I read a newer version is coming out in a while, maybe I'll look at it then. Hare Basic appealed to me because 1) it's written by someone I've respected for many years 2) it's free 3) it's light-weight 4) it's very effective 5) it was really easy to learn 6) it co-exists with CBM BASIC really nicely 7) it works on VIC-20 and C64 8) it has no extra requirements (beyond extra RAM on VIC-20 which I already have)
@@8_Bit Great points. I decided to bite the bullet and yes the shipping to Australia was crazy. Once again thanks for the great video.
Super interesting video to watch, as always. I would have loved if C=ommodore had optimized C128 basic a bit, with true fast integers variables and other possible small things
Yeah, they really focused on adding loads of features to C128 BASIC, but didn't seem to look at optimization at all. Except of course many of the new commands did speed things up by eliminating many POKEs in certain programs. But yes, true integers would have been great.
Sorry the website is in DK = Denmark. I suspect the guy is Danish :)
It makes me wonder if there is an equivalent for Color Basic. The CoCo seems to get left in the dust. I get that the C64 is just far superior to the CoCo, but it's what I grew up with. Specifically, the CoCo2. It wasn't even the CoCo3.
My friend Ken on the channel Canadian Retro Things is very knowledgeable about the CoCo, you might want to check with him to see if he knows of anything similar.
"Descending Doom"! That would be a fantastic title for a movie! Another great episode Robin! You have a fantastic way of making going through code line-by-line interesting. Your game in a way reminds me very much of the very popular "Astrosmash!" game for Intellivision in the 1980s! I must admit, Descending Doom looks like fun! The mark of a good game is that it is fun in spite of not having fancy graphics. There are too many junk games in this world with awesome graphics. Thanks Robin!
Bit of an offtopic comment I'm afraid but how on earth have you kept your C64 so clean and neat? Mine is all yellowed with age! It still functions though, as do both of my original ZX Spectrum computers I still have from when I was a kid in the 1980s. Wonderfully durable machines, despite their cheap production costs back then!
Besides cleaning it occasionally, I haven't done anything special with it. Might mostly be luck of the draw; the yellowing of the plastic apparently depends quite a bit on the mix of chemicals used and this 64 case must have been made on a day when they had the mix perfect.
Ah gotcha! Thanks for the info, and great video on Hare Basic too, very interesting
To be honest, I would have been all over a game like this back in the day for my old TRS-80
21:40 I guess Line 77 should read "SCROLL UP (VIC 20)" ☺
I suspect you're right!
After 30 years of using real text editors, it's almost impossible to remember pressing return on every line when copying lines in the C-64 screen editor :D
Wow! That's a bit of a coincidence! I started writing a simplified (only 16-bit integer maths and limited string handling) BASIC compiler on the BBC Micro, with a syntax intentionally compatible enough to allow code to be entered in the existing BASIC editor and run in its interpreter. It compiled to an intermediate code for a dedicated virtual machine designed "in parallel" with the language; for instance, FOR and NEXT had their own single opcodes in the VM. Long variable names were supported, too; as, once the symbol table has been built up, variable names only need to be searched for at compile time, as reading a variable's value gets translated to a fixed-location memory read based on wherever the variable actually is stored. The VM was basically stack-based, but with an optimisation to save a stack push and pull when a value was specified as a right-side operand. Each instruction could potentially exist in three addressing modes: Stack (ADD on its own adds the top two numbers on the stack and leaves the total on top of the stack), Immediate (USE #&0123 places &0123 on top of the stack) or Memory (SUB &0404 subtracts the contents of address &0404 from the number on top of the stack and leaves the difference where it was). USE #&0004 places &0004 on top of the stack, USE &0424 places the contents of address &0424 on top of the stack, GET takes an operand or the value on top of the stack and places the contents of that location on top of the stack, PUT takes a value as an immediate operand, memory address or from the stack; an address from the stack; and stores the value there. PAF does the same but the other way around, Address First, for situations where the operands naturally fall that way round. It needs some more instructions adding to the VM, and I need to do more work on the instruction parser, but I think I might pick it up again now there's obviously a bit of competition in town!
Forth ? HP RPL ?
Would 10 PRINT run faster in Hare Basic?
Yes, it's actually super fast. I've had so many requests, I should have shown that!
Has anyone gotten this to work on the vic20 (VICE)? It seems to just lock up on the SYS40960.
You'll need to enable all RAM expansion on it, I think. The extra 3K and all four 8K banks for +35K RAM, 40K total.
If you mean TheVIC20 "maxi" then I think rename the file to something like HareBasic_35k.d64 and it should work. Check the manual for TheC64 / TheVIC20 if that doesn't work.
@@8_Bit Yes, thanks. 35K flag works. Put it in a cjm file,"X:vic,pal,fullheight,35k".
Thank you, I’m creating a BASIC game and can use this. I really enjoy your videos.
👍
QR code Invaders
I would argue that this is not really BASIC. Reducing the number of instructions and limiting the available variables and getting rid of all array functionality altogether hardly qualifies as something that is a BASIC interpreter much less something to get excited about. I’m pretty sure the 6502 and 65c02 have reached their limits as far as basic interpreters go. I get that it’s fun to visit our childhood machines that we learned on, but the power of these devices is so restricted and so outdated it is relatively useless in the big scheme of things. Why try and squeeze every last drop of performance out of a basic interpreter running on a 50 year old chip with very limited memory dory access when I can get a raspberry pi for dirt cheap, 1000x the compute performance, run powerBASIC on it (if I’m really stuck in basic) or any number of other languages including web servers with pho etc, that would make life easier from start to finish because I’d be programming in the same hardware from day one to launch.
That might make a good VT100 game.
Oh Robin, when will you admit that you are wrong and that the key really is called the "Run/Stop" key? 😂
I know, it literally says RUN STOP right on it! That must be its name! And I just used the "Exclamation Mark/One" key to emphasize that point! And now I will use the "Question Mark/Slash" key to ask a question: do you really say all the words and symbols on every key when you name them? :)
@@8_Bit LOL!
Amazing Video Robin! We want more Hare Basic games/tutorials!
Scary: The KZread algorithm suggested as the next video: "Solution 42" - a 4k C64 demo which mentions the 2023 screen address thing! 🙀
I didn't know about Solution 42 until yesterday when a commenter mentioned it, so I watched it and left a comment on that video. That coincidence alone amazed me! Is that enough to make the algorithm suggest that video as related??
Tried my hand at a Hare version of 10PRINT: 5 A=USR(10):END 10 RND:Z=15:GO9:C=205+A:?CHR$(C);:GETA:IFA=0THEN10 Pretty fast.. though I think the author missed a trick by having AND and OR be only logical ops rather than dual-purpose logical/bitwise the way they are in Microsoft's BASICs.
Cool, seems I really should have tried this in the video. I thought making a whole (simple) game would be good enough! ;) I think AND/OR do bitwise fine. And the STOP key works fine in Hare Basic as well so there's no need to GETA, if the only purpose of it is to stop the program. 10 RND:A=AAND1:C=205+A:?CHR$(C);:GOTO10 seems to work fine, and is very fast. The only delay seems to be scrolling the screen :)
@@8_Bit Huh, I must have had something else wrong in my test; I was getting weird answers back from AND. Glad to be wrong!
Here's a fast "10print": 5 a=usr(10):end 10 b=257:c=19789:y=2023:fori=0to1step0:x=1064:z=1024:go4:x=1984:a=32:go3 11 forz=xtoystep2:rnd:a=aandb:a=c+a:go6:next:next ...unfortunately, bloated to two lines!
@@AleksiEeben Shame about the two lines, sure, but super speedy. And I'm always happy to see an infinite loop done with STEP 0 instead of GOTO! Thanks for chiming in!
Very impressive work! "I think it's cool and that's all that matters" :) absolutely, your channel your rules but I have to say you're not the only one that thinks it's cool! So we're in the 16 bits of unused space... that explains a lot about the world today. I guess we only have until 2040 before we'll overwrite the sprite pointers and the universe will vanish? :D
Unusual and cool concept. I have regards for very simplified BASICs ( like subset of V2), exactly because it may run much faster (having , for example, static string handling and purely integer arithmetic). But even more important - it might be easier to create a very efficient compiler for such little BASIC! So, next very good step for this Hare project might be producing neat compiler, that gives small and even faster machine code! And so we can have everything, the best of all worlds! Why shouldn't we? :) One more thing I noticed - AMOS Basic for Amiga has some small and very fast internal BASIC interpreter called AMAL (animation language), executed from AMOS strings. Something like this existed in Oasis Lightning BASIC/Forth for C64, I think it was also called AMAL. This Hare thing reminds me on that concept, just using regular BASIC listing for the code.
Unless i missed it, I wish you had shown ur game in regular basic to give us an idea how truly faster Hare Basic is. Maybe u already did an example and i forget (i am watching this video over several days).
The game won't run as-is in regular Commodore BASIC as it uses some Hare-only features like the GO5 call to scroll the screen (to move the "doom" downwards a step) almost instantly. To test just now, I wrote the equivalent of GO5 in C64 BASIC as optimally as I could, and it took 5.5 seconds. So just imagine a 5.5 second pause to update the screen every time the doom drops down. Also, the ship's shot would move slower too.