Robin, that rant against permissiveness of sloppy practices was just beautiful. People love to 'dunk on' others for being "pedantic" but no one complains when stuff works properly because someone did their work to a high standard.
Indeed! I enjoyed the rant greatly, and was an instant thumbs up for the video, particularly at this moment when I'm tutoring someone on address decoding for 8-bit systems. He wants to design and build his own little SBC, but I'm despairing that it will ever work unless he gets his act together and starts getting pedantic, rather than just guessing what the effect might be of the circuits he's showing me.
There are too many people in the world who take a correction as an attack on their character. I think growing up learning computer programming and later going into the IT field has taught me to value corrections others might make to my work. The other edge of that sword however is that I also don't hesitate to correct mistakes that I see. So yeah...I'm with you completely. :D
Nowadays people take even greetings as an attack ;) Let them suffer from their own "unimportant" mistakes, which - surprise, surprise, suddenly become super important if it affects them, i,e. writing 1,000 instead of 1.000 is alright, no big deal, same thing, right?... unless it's their paycheck ;) No worries, Skynet will take care of them :)))
I have had discussions (some heated) about the meaning and workings of the asterisk in the LOAD command. The commodore manual says that it loads the last file loaded and if the commodore can't determine which file that is, it just loads the first file. As you said in the video. I'm glad you underlined the meaning of the asterisk.
Aww, man. After twice saying that the Asterisk loads "the first file on disk", Robin corrected himself the third time. I was so excited to jump into the comments and be pedantic on a video about being pedantic, and now I have to settle for enjoying pedantry vicariously.
This was super interesting! I always thought "*" was universal, but after Robin explained that it was the disk drive interpreting the "*" differently, it all made sense. Still learning so much 35 years on!
I didn't notice if you mentioned, but just like disk, you can provide the additional parameter for tape too and use LOAD"",1,1. That's not very common of course, as it loads the file into the address it was saved from so it is useful only for specific cases.
I have a self-made font of C64 charsets, you can create a graphics of your T-shirt. There are several undertakers for printing a customized image on a T-shirt. Do you need my font?
@@PeterMaddison2483 Oh really? It didn't work on the Commodore Amiga 500, Commodore Amiga 2000, Commodore Amiga 3000, Commodore Amiga 4000, Commodore Amiga 1200 or any of the Commodore PC machines. I don't think it worked on the Commodore PET either. 🤪
@@PeterMaddison2483that's a lie. You're a liar. Why would you lie about something so ephemeral. dopamine is free. But that doesn't mean there aren't better ways to get it.
2:25 You always teach me something! I did not know of the mixed case mode in BASIC, only knew toggle between upper and lower! Perhaps they should just print "? syntax error" on the back of the shirts they've already printed. When someone calls you on your shirt (sic), you just spin around so they can read the back. :)
Those wedges the magazines eventually develop for typing in listing certainly helped. They allowed the checksum to validate the line. Made it a lot easier, but took them forever to create that utility
I never thought about the type-in experience shaping me into the pedant I became. It might explain a lot. Sometimes I feel that it's like the person who writes something poorly is deferring the task of correcting them (in the readers mind) to the reader, representing a laziness. A computer will not accept this. Why should a reader? So put the effort in! I have even found myself correcting typos before hitting "send" on ChatGPT. Why should I make ChatGPT spend processor cycles first correcting my language before processing an answer? :D Thanks for being pedantic, Robin!
I am no less upset about the error on the T-Shirt, despite NEVER having typed in a program from a book or magazine. I would rather write an own program, no matter how much worse it will be. The idea of typing in pages and pages of code is just hideous to me. I also thought at the time that this was a cheap way to fill the magazine, without any use, because no one would ever do that. ;-) I guess I am protected by lucky genes providing me with a healthy dose of lazyness.
I grew up with the machine and could feel something was terribly wrong with the shirt but it didn't immediately click it was the case. Informative breakdown.
13:21 I used to use the space bar for the FOUND prompt until I had a game which wouldn't start properly if space was in the keyboard buffer. It drove me crazy until I realized what the issue was. I switched to C= key after that :)
Interesting that you can press those other keys to make the tape load faster. I guess Commodore said to use the Commodore key so it doesn't print anything on the screen afterwards, so it was kind of a lazy implementation. In reference to the magazine, I remember typing in from Compute's Gazette and they had a program that you could use to type in the program which gives a checksum code after every line similar to what is shown in that magazine in the video with the 2 letters at the end so you could verify there were no mistakes. It helped a lot in machine language programs.
Those checksum systems definitely helped, but this particular listing I've shown still had errors anyway; it had a bug in the program they used to generate the listings and checksums.
Damn, I _wish_ a certain children's magazine had done that in their "Basic Training" column. Few things more frustrating than typing a program in _exactly as printed_ and having it not work. 😠 I swear, it turned me _off_ programming altogether until high school, when I started messing around with TI-BASIC on my graphing calculator and basic HTML on my GeoCities website. (It didn't help that I was on a PC when I started in '93-'94, and QBASIC for MS-DOS didn't have great documentation that I could find at the time. Certainly nothing like the VIC-20 and C64 manuals I've seen in more recent retro stuff.)
I'm _so_ sick of random internet commenters referring to programmers as "lazy" when something isn't implemented as those commenters, with little knowledge or experience, think it ought to be implemented. The folks who wrote the CBM KERNAL packed in a _lot_ of good features in a fairly decent design (a _very_ good design for the time) all in a fairly small amount of memory. And they wrote it fairly quickly, too. This is all the exact opposite of lazy. Certain tricks such as reading the row, rather than trying to determine an individual keypress, save both execution time and space. You're essentially accusing the author of that bit of code of being "lazy" for not making the ROM larger and slower. So maybe these random internet commenters could take a moment to consider how much they know about the code and why it was written the way it was before slinging insults?
Just a side note you can ALWAYS load the first program by adding a : in front of the asterisk. What that tells the drive OS is to use drive zero and resets the pointer, even if the drive is a single drive like a 1541. It's a leftover from the 4040 and 8050/8250 OS. So to ALWAYS load the first program from disk "load":*",8,1" will always work. The * actually means next found not first, but since inserting a disk resets the pointers when the write protect changes that's why it loads the first, usually.
Perhaps I am not recalling correctly, I thought the * was the last file accessed, not the next. I do recall the ":' used for 1st program on disk. Disk 'speed enhancers' often came with their own set/custom commands. I used Mach-5, Jiffy Dos as well as RAM drive.
I am still confused. It is not even clear to me what "first program" means . The first that was saved (the oldest)? The first in the directory? What will be loaded when that gets scratched, or replaced? And what does "next" mean, next realtive to what? The last loaded? The previously saved? Would be worth an own episode I think.
When I was still little, my parents thought it was necessary to list the diskette's contents first and check for the full name of the first program which is why I learned rather late about LOAD"*",8,1 at all.
Great video - these things bug me too! Since we're being pedantic, I don't like the description of the command# of 1 (e.g. ",1" at the end) indicating that the data is loaded to the memory location "from which it was saved". I think it's more correct to say it causes the data to be loaded to the memory location specified in the file. In many cases, that binary file was cross compiled or generated from a graphic program, so it didn't originate from that memory location on a c64. I looked in the 1541 manual and the description of "LOADed at exactly the same memory location from which it came." is from commodore, so my nit pick is with them!
I guess I am not the only one that sees those misprints and thinks to myself, "That won't actually work". haha. Thanks! On a side note about some instructions and games including the 0: before the name. I would guess they started doing this after the Save with Replace bug was verified in the magazines and they recommended that you always use the 0: prefix. The reason is, IIRC, is that if you start your session always using the 0: when issuing commands the bug will not occur.
That's very true. Not using the drive unit specifier "0:" causes the drive to attempt to initialize the non-existent "drive unit 1". It will fail, as it should, but a very sloppy and obvious indexing bug in the DOS ROM can trigger the save-and-replace bug as well as several other less serious bugs.
When type ins started coming with error checking was a game changer, it really simplified things. The only gripe I have is that it wasn't standardized. Seems like the Ahoy magazine used a small assembler program, but I remember many using a basic loader for assembler with checksums on each DATA statement, crude, but it really cut down on hunting for that one wrong number.
I completely agree Robin! People like us were conditioned to be exact in our instructions. :) Thanks for the insight on the handling of * by the drive controller vs. using it with the tape load routines in ROM - I'd never thought about that before, but found it very interesting.
I didn't grow up using a VIC-20 or C64 so this was informative. And though I've only had limited experience in the past few years, I did know why (kinda) the first example was wrong and guessed the second one would specify the tape rather disk drive. I just didn't know that tape drives would literally try to find a program called *.
Reminds me of an NES controller t-shirt a friend had that had an egregious error, much worse than these incorrect commands-the B and A buttons were reversed! I’m wondering if it was officially licensed, since I imagine Nintendo wouldn’t have allowed such a blatant error on a licensed product.
@2:48 I saw that you mentioned on twitter that there's an alternate meaning for "blue angels". I had to google it! :D
The Blue Angels flew directly over my house multiple times last month (part of San Francisco's Fleet Week). Good golly they're loud! I assume you've seen the C64 game Blue Angel 69? Sounds like an old yahoo email address, but it's an actual game (Magic Bytes, 1989). @12:48 Cool, didn't know that certain key presses could skip the pause. My tape days were mostly VIC-20. I assume it worked there too?
re: Blue Angels, yes, I think it's a regional thing. We'll see how many people get it :) I only learned about Blue Angel 69 in the last couple weeks when someone mentioned that the Accolade game was fairly rare so I looked around online to make sure it had been imaged etc. The VIC-20 doesn't pause at all when it finds a file. It also doesn't blank the screen while loading. I assume the pause was added to the C64 when they found they had to blank the screen due to the VIC-II's cycle stealing which made the existing tape routines unreliable with the display enabled, but I haven't looked into that :)
Yes, regarding manually typing in programs, the "Accuracy is important for Survival" is totally correct. More so if you were unlucky enough that your Computer was a Sinclair ZX81 with a worn Membrane keyboard and the Sinclair 16K RAM expansion. Not only did you have the problem of losing all of your program if the slightest movement upset the connection on the RAM Pack, It also had a tendency to freeze when it overheated due to the strain during the hours of debugging errors in the program and print errors from the magazine. It was common for spaces to be incorrect and badly printed graphics characters to cause havoc when using them to denote machine code within a BASIC program (an odd quirk of ZXBASIC,)
Using the ZX printer would be poor quality black on sliver which was not easy to typeset. Using a regular printer resulted in a black and white print which would be more easily typeset and would work with any early 80s machine. But might only be able to print ASCII characters. In some cases Sinclair specific characters ended up being handwritten.
A lot of commercial tapes will only work with shiftrun or c=run, they will fail to work if you try to manually load. In the northwest of USA we called it "splat" instead of asterisk or star. Interesting to note different computer jargon based on region.
There was even a commodore disk magazine called LoadStar, referencing the name commonly used for asterisks in much of Canada and the USA. I was not aware of "splat" as a term, but it makes sense as a name for a wildcard.
Now I'm remembering that the most common time I heard "splat" was when there was a "splat" in a disk directory listing, indicating that the file was bad in some way, usually not closed properly. I think that tied in with the * looking somewhat like a squished bug, and the "splat-file" was a buggy file.
Note that * loads the LAST ACCESSED file from the floppy, loading the FIRST one is only a FALLBACK for the case there was no previous file access. Hence, it is advisable to LOAD ":*",8 . IIRC this is short for "0:*", so the first of a possible dual-drive under drive number 8. Ah, I see: 20:26.
When you started talking about being traumatized I chuckled at the hyperbole, but then when you opened the magazine at a type-in program and I physically jolted. I guess you're right. I AM traumatized!
Being in the UK and having used the ZX Spectrum 48K before getting a C64, I naturally used LOAD "" when trying to load a game from tape. Not having a Disk drive, I didn't know about using ',8,1' or even ',1' until years later Also, one of the best magazines made in the UK for programming was a series called INPUT - It had code for the C64 and VIC20, as well as the likes of the Spectrum (ZX80 & 48k) and even the BBC / Electron. If only I still had a working C64
I knew that [ Load "*",8,1 ] would give a ?syntax error, but I was wrong about why. I thought the lowercase letters were the problem, since I know that C64 BASIC uses all caps for every command. It didn't occur to me that the capital L was the issue, because I never played around with mixed case mode. After seeing your explanation though, it makes perfect sense. Also, typos and syntax errors are the main reason that I love a GUI. BAD SPELLARS OV THE WERLD UNTIE!
This is likely in part down to the C64 using PETSCII rather than ASCII. Which only has a single case when unshifted. With the ROM routines which parse the input only caring about the character codes rather than how they display.
The tape-handling code was originally put together for the PET and then moved over wholesale for later Commodore machines. That means a lot of patches and changes, and the sort of coding hack that gives the pause. And a little caveat for disk drive owners using LOAD"*",8(,1) - it doesn't automatically check for file type. So if it tries to load in a SEQ, USR or REL file as the first in the directory it can give you an error or FILE NOT FOUND. Best to use a directory editor to make your boot PRG physically the first in the directory. The C128's autoboot can also be affected by having the wrong file type. EDIT: The O instead of zero worked because there isn't a physical "drive O", it's expecting zero or 1 - another feature carried over from earlier drives.
I think I read somwhere (wish I rememebered the source) that the core of the tape code, written by Chuck Peddle himself, remained untouched, because no one could understand it and dared to touch it. It is quite slow, but very safe, thus Commodore was considered to have the best tape performance of all the early 8-bit computers (when RAM and file sizes were low and speed not a big consideration).
I'm embarrassed to say that I could not figure out what was wrong with what was printed on the T-Shirt... But then again, it's been decades since I messed around on a real C64.
IIRC, "*",8 will load the first program after a new disk is placed in the drive, OR the last program loaded if a different named one was already loaded. ":*",8 will always load the first program regardless if any other programs were loaded prior to it.
Just stumbled on this channel. I was a kid in the 80s and spent a LOT of time on the C64, but was too young and not patient enough to ever write anything other than very basic and silly programs. I did try to type in a horse racing game from Commodore Gazette once but it never worked 😅 But since those days, I’ve never really understood the LOAD command that I typed in thousands of times. This video was a real blast and I leaned something about a cherished part of my childhood. Thank you!🙏🏾
When I first saw that shirt, I thought, "it needs to be all caps. That's how I remember doing that", but I didn't know that about the C64 characters. Always learning something new about the C64. Thanks again!
My partner wanted to buy me a Commodore 64 disk load shirt and was turned away from a mixed-case offering because somebody took the time to comment on the product page that the command as written wouldn't work. She found a corrected version and now it's one of my favorite pieces of clothing. I'm surprised at how few people know what it means.
We think of the C64 as the best selling home computer, but compared to the world population, the 10 - 30 million sold units were actually not that many. Sad to think that the vast majority of people on Earth are missing out.
There are many more people without knowledge than with. There are many more people who make mistakes and still succeed than people who rarely do. This means that the history will be written by the victors - the incompetent. The only antidote is to share correct information and hope that many people see it - and to correct people when they're wrong. People like 'why' answers like this one, and you explain in detail. Kudos.
Back when we used the PET with the INTERNAL Datasette, if we also had an EXTERNAL Datasette we used ,2 to access the external unit. p.s. I also have that Telidon button…I remember seeing Telidon demoed at the CNE in Toronto, Canada.
Cool about the Telidon button; I love its design. And yes, and most (all?) later PETs supported two cassettes though of course they were both external.
Interesting. On the C64 ",2" specifies the pseudo-RS232 interface on the user port, typically used for modems. The LOAD command is illegal on those devices.
Robin i need your help as Professor of c64 ;) i got myself a c64 again c64c with 1541-2 like from the past. Just i had always a ActionReplay but now i own a final catridge 3. My Problem... i search webs, Reader manuell up and down... how to cheat with fc3 ?? I get freeze, then i go to Monitor, i change 0913 ( turrican 3) so .m 0913 the Adress i change to 60. Then enter, then x (leave monitor) now im back in Desktop. There is no key to get back in the Running Programm?? My question how to get back in the game. I find only "bar" turns your menu on again and freezer is aviable but i cant get back in the game. Is there an allmighty sys.... to switch back at the point the freeze Was made ? I remember in ActionReplay that you can change memory and just get back into the game. Else the Monitor in FinalCatridge is useless or ?
So when you X (exit) the monitor, it goes right back to the desktop, and not the "freezer menu"? Because from the freezer menu you should be able to choose Exit->RUN and the program will continue.
Was always shift+run/stop and then the Commodore key for me. It's what I read in the manual. Talking of run/stop, I notice your C64 must be a different model from mine, as the key cap on mine actually has the slash on the "RUN/STOP". I wonder if that was added later since most games I owned referred to it that way in the manual.
@@8_Bit It's a PAL C64C, likely a very late revision, as I(or more accurately, my dad, I was 5) bought it in 1988, but the system itself is likely from 1990 or so, as it is a warranty replacement.
@fattomandeibu Interesting, I'll try to keep a look-out for one. I own one PAL 64C but it doesn't have the slash on RUN/STOP. However, I know there were many variations as they continued to cost-reduce it as the years went by.
Pedantry plays an important survival role in respect of spam emails and messages. Most of these contain grammar and spelling errors. If a person doesn't care about spelling and grammar, they are far more likely to fall for a scam, especially one that simply asks you to click on what you think is a trusted web address.
Maybe it's worth to notice that LOAD"*",8 could be used to load a previously loaded program again. CBM DOS won't search the directory from thr begin if a program was already selected. The asterisk clobbs to the already loaded one again. An unexpected behavior sometimes ...
As someone who grew up with Commodore 64 and had to learn it, this was a fun flashback. The Char sets are things I played with, I also started with only a tape drive before we got a disk drive. It was great.
I am a 90s baby, so this was a bit before my time. I never learned BASIC, so your "pickiness" is incredibly useful to me. It may be obvious to some of y'all but I get so frustrated when I can't get a game to load, but it's just because it was explained to me improperly. Thank you :)
9:54 "Literally" in two senses of the meaning. 13:07 Huh? LOAD"",1 is giving the device address 1 (tape). LOAD and LOAD"" also give a relocated load, since that's the default. 15:51 I assume there can be a glitch where the waiting time is longer than 8.53 seconds if the clock wraps from 24:00:00 [sic] to 0:00:00 while waiting. 21:10 What, you couldn't just download the program from the magazine's website?
I remember being stupidly excited at being able to download the disks of all the magazines I'd bought in the 80s/early 90s somewhere around 15-20 years ago because I was finally able to play some of the games I'd tried and failed to type in correctly!
Aha, thanks, your comment got me to finally look into a bit of a mystery that I thought I had solved in my head without experiment, but I came to the wrong conclusion. The mystery was: why do cassette auto-loaders work with a parameter-less LOAD command? Many tape games do not require the user to type RUN after the initial LOAD, and they aren't relying on "Shift+RUN/STOP" either. This would only be possible with a non-relocatable load, right? And so I wrongly concluded that cassette load defaulted to non-relocatable, as if LOAD "",1,1 had been typed. But I'm wrong. LOAD or LOAD"",1 asks for a relocatable load, but (here's the thing I just learned) it's only a suggestion! Ultimately the tape header controls this. If the "tape identifier" byte in the header is a 1, then the user's suggestion is followed. If the tape identifier byte is a 3, then the user is ignored and a non-relocatable load is forced.
@@8_BitSuper interesting. I thought that the ,1,1 uses relocatable load and ,1 does not :-D Also didn't know that "*" or "PROGRAM*" etc. doesn't work for the tape louder routine.
@@MattKasdorf Command-wise it's almost the same on the PET, except the PET doesn't have the 2nd numeric parameter (the 1 in ,8,1) as it doesn't support relocated load. That was mostly added to the VIC-20 and C-64 to allow PET BASIC programs to be relocated to their respective start of BASIC memory locations. The cassette protocol and even the code is nearly the same from the PET to the VIC and 64 - apparently Chuck Peddle himself wrote the original tape code in an undocumented fit of genius and everybody else was too scared to mess with it after he left Commodore. Disk loading on the PET uses the much faster parallel IEEE-488 bus which was adapted into the cheaper serial IEC bus for the VIC-20 and C64.
Imagine someone who is unfamiliar with the C64, buying that T-shirt, then getting a C64 sometime afterwards, only to then figure out that what it says on the T-shirt doesn't actually work. If it was me, then that T-shirt would instantly plummet in emotional value. So no, I don't think you're nitpicking at all, Robin. That thing with the asterisk when loading from tape is actually rather obvious, when you think about it. I have just never thought about it until now... and you know I love that kind of stuff. - At some point in the past I began using "LOAD":*",8,1" instead. Which is suppose to always load the first file from the disc. I don't recall reading it anywhere, so someone must have told me about it. I also don't recall whether it skips a "DEL
Yes, that LOAD":*",8,1 should always load the first file. I also don't remember where I learned it. It seems to be sort of like the 0 GOTO trick that allows a "parameterless" GOTO, in that preceding the colon *should* be a drive number of 0 or 1 but it seems it can simply be omitted. This will require someone to read the CBM-DOS disassemblies but I assume specifying a drive number (even a nameless/default drive) will cause the drive to disregard any "cached" file that * would otherwise bring up and force it to load the first file from the disk. Lots of room for investigation in this area. Hopefully in the future!
I’ve been on every version of commodore since 82. I’ve also only used twin 1541’s and always used CAPS, in white, just like this. I’ve learned two things today. 😮 Okay, three things. 😂❤
I'd make that: LOAD "0:*",8,1 because of the save-with-replace bug. Got bit by it once or twice back in the day. The 1541 drive thinks it's a dual drive, and if you search for a file, it'll first check side 0 (which exists) and, if it doesn't find it, searches drive 1. Now it thinks it's looking at drive 1, and when you do a save-with-replace, it instead turns your file into a splat file, which appears in the directory as type *. It will grow and it will eat every file on your disk. There was an article about it in either Compute! or Compute's Gazette back in the day. I remain suitably paranoid about splat files and I'm terrified that no-one seems to know about it anymore And, indeed, it IS a throwback to when Commodore disk drives were dual units. They used the same ROM from those drives in the 1541, which is why the 1541 thinks it's a dual drive.
It should be fine when just loading programs, but yes, it's definitely something to be concerned about if doing saving, especially save-and-replace. I believe the 1541 ROMs were originally in the 4040 Dual drive, then modified to the 2031 single drive, then modified again to the 1541. Some of the dual drive code was removed or patched out, but not enough!
i can remember a fast load named "@" on the disk and you had to alter the filename you wanted to load with the fastloader. Maybe with a ":" in front, but i am not sure.
Yes, that would be DOS WEDGE or similar. It's loaded into memory and intercepts the commands before BASIC looks at them. So it spots the character and sends the following filename/command to the disk drive.
This sort of thing acts as a pretty convenient shibboleth for how much the people responsible for things like that shirt or that documentary actually care about the subject matter. It's not unreasonable to expect someone who's going to the trouble of actually producing products to sell have the most basic understanding of the thing those products relate to. I look at that shirt and my brain immediately goes to bootleg merchandise that misspells the name or attaches the wrong name to the picture.
"Load" I can understand, and even forgive. Modern devices these days love to be "helpful" and do stuff like automatically add punctuation and capitalize things that they think require capitalization. My devices do the same thing to me ALL THE TIME whenever posting/commenting about computer/electronics things. Usually I'm alert enough to catch them in the act, but sometimes I accidentally let one slip through. So whoever made the "Load"*",8,1" shirt may have fallen victim to this. Also capital-L is (technically) grammatically correct ("first word of a sentence should always be capitalized!") so maybe someone at the T-shirt company who was proofing the design and who doesn't know much about retrocomputing, thought "huh... that looks wrong... I'm gonna fix it!" Of course WE know that the correct version would be "lO"*",8,1" assuming your C64 is in upper/lower mode. Oh well, at least they got the ",8,1" part right. :) (unlike the second example you pointed out :) )
Yeah, I can understand the t-shirt mistake on one hand, but on the other it's a "you had ONE job" kind of thing. The t-shirt design consists of a single line, and it's not even correct. With the documentary guys, they had dozens of things going on in their 90 second trailer, with a whole bunch of camera set-ups for many shots, organizing all the props, lighting, all the editing, sound work, etc. etc. So from this perspective, the trailer guys got 99% of their work correct, and only 1% error, while the t-shirt is way worse as a percentage :) I'm not really serious about which is worse here, just offering another way of looking at it.
Used a c64 from a round 83 to 90. Never even knew it has a mixed case mode. Also started with a dataset, for the life of me I couldn't remember how to load the first file on the tape. I fared better with the disk command. Again, case threw me. But I remembered that 8 was a device ID. Didn't really know what the 1 one was for. Sometimes it was needed, sometimes it wasn't. I did not know that * could mean last loaded file though. Actually my first instinct was 8 meant the disk drive, and 1 was the drive ID on the bus, in case you had more than one daisy chained. I was one of those peeps that basically just played games ;p. Did some homework in GEOS too.
Do you mean how to make a machine language program executable from BASIC? Check out my 2nd last video "Adding Command Line-esque Parameters to C64 and C128 Programs" starting at 18:30. th-cam.com/video/HC2--B9ZhUA/w-d-xo.html
MC Frontalot's "Penny Arcade theme" has a refrain of "ell-shift O to the quote and then dollar," as a shout-out for how to load and display the directory. of course it's missing the ,8 to specify disk, and it will display a directory of the tape but only if there's no program named "$" on it.
Yes, loading the directory file "$" should be done with ,8 and not ,8,1. Using just ,8 brings the directory into regular BASIC memory so it can then be LISTed as a BASIC program. If you use ,8,1 then it will be loaded to the address specified in the file, which is $0401 which is actually the C64's screen memory. This is strange, but it actually goes back to the PET computers which had BASIC memory starting at $0401 so it worked properly there.
For the O vs 0 item. Perhaps the kernal code just assumes the character before the colon is a number, and the translate PETCII to INT routine returns zero for characters it can't convert. When I test this on my C64, it doesn't seem to matter what I put in front of the colon. Even graphics character will work there.
I believe it's 100% up to the DOS in the drive to interpret that leading drive number. I think it mattered in the earlier dual Commodore drives like the 4040 that the 1541 descended from. Probably when they made the 1540/1541 ROM (or more likely the single-disk 2031 which was made in between) they left some of the parsing code but ultimately just ignore it, or force it to 0 so it doesn't matter.
The character before the colon (and in fact all the text in the "filename" string) is interpreted solely by the DOS ROM in the disk drive. If it's a '0', it means the file is required to be on the disk in drive unit 0 (which is the one that actually exists). If it's a '1', it means the file is required to be on the disk in drive unit 1 (which doesn't exist). Any other character means the file is required to be on the disk in the last-used drive unit, which _should_ always be unit 0, but sometimes isn't due to bugs. If there is no colon, then the file is theoretically permitted to be on either drive unit.
What about the file with the empty name on Robin's tape? It couldn't be loaded just by typing LOAD"", because this loads just the next file. You have to wind forward the tape to the position and start loading there (which was the usual use to load a program on tape, according to my memory). Out of curiosity, is there a way around this?
@@8_Bit I played around with the help of the excellent "Cassette Book for the Commodore 64" by Dirk Paulissen, and came up with the following little program that in a loop opens a file, then investigates the file name in the file header in the tape buffer starting at memory location 833 (according to my testing starts with 32 for space unless the file has a name): 10 open1,1: close1 20 if peek(833)32 then 10 30 print"found file with no name" One can now rewind a bit and load the file.
I knew the issue with the disk loading command right away, but did not know that about the tape command. I've known where at least a majority of my pedantry came from.. it was definitely programming on the C64 and typing in those lengthy listings. I don't think I ever entered one of any significant size without at least a few mistakes, sometimes many. 'Precise' is correct; nothing else usually sufficed. Just a side question: I keep seeing some of the same patrons repeated across multiple videos as "New Users". Are they dropping off the list and rejoining or something? 🙂
I don't remember where I first picked up Load "*",8,1 but I do know that on many of my game floppies, that exact instruction was given on the disk label as the instruction for loading the game so it only reinforced it.
Only the tape drive can have a file with no name, the disk drive requires it. The easiest way to find a (specific) file with no name on the tape is to know the tape counter position. :-)
What everyone seems to forget is LOAD "0:×",device # (1 for tape and 8 for disk drive). The 0:× loads the first file found. If no other number is added it would load into BASIC area of memory (#800 hex), if a ,1 was added then machine code area (#801 hex). The 0:× specifier always insured a proper load.
LOAD "0:*",1 doesn't work; that's what most of this video is about. Cassette loading doesn't recognize the drive number of 0: and it also doesn't recognize * as a wildcard. For disk loading it's true that LOAD"0:*",8 will force the first file on disk to be loaded. But without an extra ,1 at the end the file will be loaded to the start of BASIC memory which is $0801. With an extra ,1 the file will be loaded to whatever 16-bit load address is specified in the file. It could be $C000, $1234, $0801, or anything else really.
I know exactly what you mean! These youngsters will never know what it meant to type in a game from a magazine and have to work through pages of DATA statements looking for the missing digit or comma that was throwing the order out and crashing the game ..... whether it was graphics in the wrong places, or music that went wrong and crashed leaving something dissonant still playing at full volume .....
Haha, funny. cut out cards from magazine pages? Clue it on a thick paper and feed it to a punch card reading device. Did anyone build such a thing (e.g. with LEGO Technik or a Fischer Technik?) I think it would be easier to build a punched tape reader. The magazine has to produce perforated pages to cut out in strips which has to be clued together ... however, the information density would be too low in comparison to a listing, and the error rate would still not be eliminated ...
When I was a kid typing in these listings I used to dream of a day when I could somehow just scan in listings without typing them in. As @jjeeeekk suggests I don't think punch cards would be practical for a magazine, but maybe some sort of barcode reader technology would have been? But in either case it seems extra hardware would be required making it a sort of niche solution. Most magazines just started offering disks by mail with the programs already saved on them as a bit of an extra profit stream.
I actually questioned this recently and broke it down to ,8,1 is for loading from disk while /1 was for loading from tape. Haven't watched this video yet but that was my generalization.
Pedantic it may be, dead on accurate it absolutely is. If you are gonna sell merch based on C64 nostalgia, at least have the goddamn common courtesy to get it right. Excellent video.
Spotted both right away. *Only because I dug my old C64 out recently and essentially made both these mistakes (and more) trying to remember the commands.
That doesn't seem to exist for the C64 (yet). I played around with the screen reader in Windows 11, but that can't read the content of a C64 emulator window. Threre are smartphoe apps that can read any text in front of the camera, so holding that in fornt of any computer screen might work? If you have a Braille keyboard for a modern PC, that should work for entering text into a C64 emulator like VICE.
I'm so happy I'm just young enough that I missed out on much of the earliest computers. My first machine was a Cc3 and my experience with it didn't progress beyond running a game... If I was a few years older I imagine I would have tried to program the thing. That looks mind twisting.
About typing programs from magazines ... yeah it is very tedious and error prone (user or publisher induced). I heard that long time ago in Britain, when they had the BBC microcomputer with the datasette, some radio stations actually sent program binary audio in certain (late) hours. You could then set up your casette recorder, and just press record just before the program is on the air. And later you could just load the program from the recorded casette. Don't know the specifics tho.
Loading tapes (shift and run stop) or just type load. To find file then load"file",1 Disk I do keyboard shortcuts.. or use a utility cartridge with shortcuts.
If you have 2 floppy drives, LOAD"*",9,1 will load from the 2nd drive. If you remove 8, it will load from the 1st drive. ,1 means Load the file into the starting address specified within the file, which is often used for machine language programs or other non-BASIC files.
I never owned nor operated a C64 but videos like this ring with me. There is little more interesting to me than how specifically old computers and their hardware work. Especially when it gets down on how the hardware really works. I'd never thought of the disk drive to actually have a processor and OS on its own. A really interesting hardware design.
The syntax errors are something nerds can talk about and noobs learn about. Decent marketing. I remember typing in a game from a magazine with a typo error. So annoying. Thank you @8-Bit Show And Tell, for these pearls of nostalgia.
I was sitting here feeling a little bit proud that the Ataris of my childhood were "better" in some little ways, ;) when I understood that Commodore can store multiple, named files on tape. I would have liked that feature! :)
Yes, as long as there weren't any files named "*" on the cassette then you could use it to essentially display a "directory" of all the files on a cassette. Even safer would be LOAD"P!0@I#D$U%Y^T&()",1 or something similar. Apologies if I've just exposed someone's favourite password.
Yes, but you would have to sit in front of the computer to skip the pauses and write down the file names before they scroll away. There are neat programs for tape directories, that scan the tape, and then present all the files with name, type, size, and even calculated tape counter positions, and also put that out on a printer.
To be even more pedantic (because pedantry is fun): LOAD"*",8,1 doesn't necessarily load the last _loaded_ file. It is _supposed_ to load the last file that was _either LOADed or SAVEd._ But, in fact, it actually loads the last file that was opened on _either channel 0 or channel 1_ in the disk drive. This can be via a LOAD or VERIFY command (both of which use disk channel 0), a SAVE command (which uses disk channel 1), or even an OPEN command (such as OPEN 1,8,0,"MYFILE,L" or OPEN 1,8,1,"NEWFILE,S"). That being said, the OPEN command is not really _supposed_ to be used with channel 0 or 1, as these are intended to be used only by the KERNAL's LOAD, VERIFY, and SAVE routines - but the C64 won't actually stop you from misusing them in this manner. Finally, if there hasn't yet been a file opened on disk channel 0 or 1, the LOAD"*",8,1 command will just treat the asterisk as a normal wildcard, which is what causes it to load the first PRG file on the disk. And while this is usually safe, it is preferable to use LOAD"0:*",8,1. If you don't use the explicit drive unit specifier ("0:"), the drive will likely make an attempt initilaize the non-existent "drive unit 1". Due to an indexing bug, this can A) corrupt one of the drive's 5 internal data buffers, and B) wrongly convince the drive that drive unit 1 actually exists snd contains a valid disk. This latter bug can potentially cause lots of drive errors, and is even related to the infamous and devastating save-and-replace bug.
Very interesting; I have vague recollections of experimenting with with some of this stuff but don't remember what I found (if anything) :) I'll take note and may return to this in the future, thanks.
Those type-in magazine listings, with errors, were a great way of learning though, fixing it was always provided more experience, as my 8-year-old brain experimented with solutions.
Your knowledge is impressive, respect! I didn't have my own, most i know (quite so for not owner) is from visits in friends houses, but only 2 wanted more than gaming. I don't know if you check comments to old videos, i wonder about one i left in video on multiply in assembly.
Off topic: I would love to see you make a video where you go over TRSE (Turbo Rascal). I feel like most TH-camrs either don't know what it is or they ignore it.
I found an hack long time ago, games with horizontal rainbow lines loader could be prevented to run automatically by keeping pressed run stop, you could even then save them on floppy
Robin, that rant against permissiveness of sloppy practices was just beautiful. People love to 'dunk on' others for being "pedantic" but no one complains when stuff works properly because someone did their work to a high standard.
Indeed! I enjoyed the rant greatly, and was an instant thumbs up for the video, particularly at this moment when I'm tutoring someone on address decoding for 8-bit systems. He wants to design and build his own little SBC, but I'm despairing that it will ever work unless he gets his act together and starts getting pedantic, rather than just guessing what the effect might be of the circuits he's showing me.
There are too many people in the world who take a correction as an attack on their character. I think growing up learning computer programming and later going into the IT field has taught me to value corrections others might make to my work. The other edge of that sword however is that I also don't hesitate to correct mistakes that I see. So yeah...I'm with you completely. :D
In our line of hobby, it's not just an attack on our character, but on our *special* character, and that's just too much.
Nowadays people take even greetings as an attack ;) Let them suffer from their own "unimportant" mistakes, which - surprise, surprise, suddenly become super important if it affects them, i,e. writing 1,000 instead of 1.000 is alright, no big deal, same thing, right?... unless it's their paycheck ;)
No worries, Skynet will take care of them :)))
I love being corrected if I am wrong. It helps me learn and grow.
That's a big problem with the Linux community. Until they get their act together, people will always stay with the devil they know.
I have had discussions (some heated) about the meaning and workings of the asterisk in the LOAD command. The commodore manual says that it loads the last file loaded and if the commodore can't determine which file that is, it just loads the first file. As you said in the video. I'm glad you underlined the meaning of the asterisk.
Maybe the shirt says "?SYNTAX ERROR" on the back? 😂
Aww, man. After twice saying that the Asterisk loads "the first file on disk", Robin corrected himself the third time. I was so excited to jump into the comments and be pedantic on a video about being pedantic, and now I have to settle for enjoying pedantry vicariously.
This was super interesting! I always thought "*" was universal, but after Robin explained that it was the disk drive interpreting the "*" differently, it all made sense. Still learning so much 35 years on!
I didn't notice if you mentioned, but just like disk, you can provide the additional parameter for tape too and use LOAD"",1,1. That's not very common of course, as it loads the file into the address it was saved from so it is useful only for specific cases.
I would love a t-shirt with "L" followed by a shifted "O" from the C64, that graphic and then the rest. Only C64 users would understand it.
Great idea.
I have a self-made font of C64 charsets, you can create a graphics of your T-shirt. There are several undertakers for printing a customized image on a T-shirt. Do you need my font?
It works for ALL commodore machines, not exclusivley the C64 🤪
@@PeterMaddison2483 Oh really? It didn't work on the Commodore Amiga 500, Commodore Amiga 2000, Commodore Amiga 3000, Commodore Amiga 4000, Commodore Amiga 1200 or any of the Commodore PC machines. I don't think it worked on the Commodore PET either. 🤪
@@PeterMaddison2483that's a lie. You're a liar. Why would you lie about something so ephemeral. dopamine is free. But that doesn't mean there aren't better ways to get it.
2:25 You always teach me something! I did not know of the mixed case mode in BASIC, only knew toggle between upper and lower!
Perhaps they should just print "? syntax error" on the back of the shirts they've already printed.
When someone calls you on your shirt (sic), you just spin around so they can read the back. :)
I never knew you could even change cases
Those wedges the magazines eventually develop for typing in listing certainly helped. They allowed the checksum to validate the line. Made it a lot easier, but took them forever to create that utility
I never thought about the type-in experience shaping me into the pedant I became. It might explain a lot. Sometimes I feel that it's like the person who writes something poorly is deferring the task of correcting them (in the readers mind) to the reader, representing a laziness. A computer will not accept this. Why should a reader? So put the effort in! I have even found myself correcting typos before hitting "send" on ChatGPT. Why should I make ChatGPT spend processor cycles first correcting my language before processing an answer? :D
Thanks for being pedantic, Robin!
I am no less upset about the error on the T-Shirt, despite NEVER having typed in a program from a book or magazine. I would rather write an own program, no matter how much worse it will be. The idea of typing in pages and pages of code is just hideous to me. I also thought at the time that this was a cheap way to fill the magazine, without any use, because no one would ever do that. ;-) I guess I am protected by lucky genes providing me with a healthy dose of lazyness.
I grew up with the machine and could feel something was terribly wrong with the shirt but it didn't immediately click it was the case. Informative breakdown.
13:21 I used to use the space bar for the FOUND prompt until I had a game which wouldn't start properly if space was in the keyboard buffer. It drove me crazy until I realized what the issue was. I switched to C= key after that :)
Interesting that you can press those other keys to make the tape load faster. I guess Commodore said to use the Commodore key so it doesn't print anything on the screen afterwards, so it was kind of a lazy implementation.
In reference to the magazine, I remember typing in from Compute's Gazette and they had a program that you could use to type in the program which gives a checksum code after every line similar to what is shown in that magazine in the video with the 2 letters at the end so you could verify there were no mistakes. It helped a lot in machine language programs.
Those checksum systems definitely helped, but this particular listing I've shown still had errors anyway; it had a bug in the program they used to generate the listings and checksums.
Damn, I _wish_ a certain children's magazine had done that in their "Basic Training" column. Few things more frustrating than typing a program in _exactly as printed_ and having it not work. 😠 I swear, it turned me _off_ programming altogether until high school, when I started messing around with TI-BASIC on my graphing calculator and basic HTML on my GeoCities website.
(It didn't help that I was on a PC when I started in '93-'94, and QBASIC for MS-DOS didn't have great documentation that I could find at the time. Certainly nothing like the VIC-20 and C64 manuals I've seen in more recent retro stuff.)
I'm _so_ sick of random internet commenters referring to programmers as "lazy" when something isn't implemented as those commenters, with little knowledge or experience, think it ought to be implemented.
The folks who wrote the CBM KERNAL packed in a _lot_ of good features in a fairly decent design (a _very_ good design for the time) all in a fairly small amount of memory. And they wrote it fairly quickly, too. This is all the exact opposite of lazy.
Certain tricks such as reading the row, rather than trying to determine an individual keypress, save both execution time and space. You're essentially accusing the author of that bit of code of being "lazy" for not making the ROM larger and slower.
So maybe these random internet commenters could take a moment to consider how much they know about the code and why it was written the way it was before slinging insults?
Back in the day it seemed every magazine program I typed in never worked. Was so frustrating. Great video Robin.
I could smell that frustration from a distance, so never typed in a program.
Just a side note you can ALWAYS load the first program by adding a : in front of the asterisk. What that tells the drive OS is to use drive zero and resets the pointer, even if the drive is a single drive like a 1541. It's a leftover from the 4040 and 8050/8250 OS. So to ALWAYS load the first program from disk "load":*",8,1" will always work. The * actually means next found not first, but since inserting a disk resets the pointers when the write protect changes that's why it loads the first, usually.
Perhaps I am not recalling correctly, I thought the * was the last file accessed, not the next. I do recall the ":' used for 1st program on disk.
Disk 'speed enhancers' often came with their own set/custom commands. I used Mach-5, Jiffy Dos as well as RAM drive.
I am still confused. It is not even clear to me what "first program" means . The first that was saved (the oldest)? The first in the directory? What will be loaded when that gets scratched, or replaced? And what does "next" mean, next realtive to what? The last loaded? The previously saved? Would be worth an own episode I think.
When I was still little, my parents thought it was necessary to list the diskette's contents first and check for the full name of the first program which is why I learned rather late about LOAD"*",8,1 at all.
Great video - these things bug me too!
Since we're being pedantic, I don't like the description of the command# of 1 (e.g. ",1" at the end) indicating that the data is loaded to the memory location "from which it was saved". I think it's more correct to say it causes the data to be loaded to the memory location specified in the file. In many cases, that binary file was cross compiled or generated from a graphic program, so it didn't originate from that memory location on a c64. I looked in the 1541 manual and the description of "LOADed at exactly the same memory location from which it came." is from commodore, so my nit pick is with them!
I agree completely, I've think I've said it a bunch of ways between different videos but "as specified in the file" seems like the best way.
I guess I am not the only one that sees those misprints and thinks to myself, "That won't actually work". haha. Thanks!
On a side note about some instructions and games including the 0: before the name. I would guess they started doing this after the Save with Replace bug was verified in the magazines and they recommended that you always use the 0: prefix. The reason is, IIRC, is that if you start your session always using the 0: when issuing commands the bug will not occur.
That's very true. Not using the drive unit specifier "0:" causes the drive to attempt to initialize the non-existent "drive unit 1". It will fail, as it should, but a very sloppy and obvious indexing bug in the DOS ROM can trigger the save-and-replace bug as well as several other less serious bugs.
When type ins started coming with error checking was a game changer, it really simplified things. The only gripe I have is that it wasn't standardized. Seems like the Ahoy magazine used a small assembler program, but I remember many using a basic loader for assembler with checksums on each DATA statement, crude, but it really cut down on hunting for that one wrong number.
I completely agree Robin! People like us were conditioned to be exact in our instructions. :) Thanks for the insight on the handling of * by the drive controller vs. using it with the tape load routines in ROM - I'd never thought about that before, but found it very interesting.
I didn't grow up using a VIC-20 or C64 so this was informative. And though I've only had limited experience in the past few years, I did know why (kinda) the first example was wrong and guessed the second one would specify the tape rather disk drive. I just didn't know that tape drives would literally try to find a program called *.
Reminds me of an NES controller t-shirt a friend had that had an egregious error, much worse than these incorrect commands-the B and A buttons were reversed! I’m wondering if it was officially licensed, since I imagine Nintendo wouldn’t have allowed such a blatant error on a licensed product.
Wow! Many small "details" I never knew that affected loads! Thank you so much for the clarification.
Happy Holidays
Charles
@2:48 I saw that you mentioned on twitter that there's an alternate meaning for "blue angels". I had to google it! :D
The Blue Angels flew directly over my house multiple times last month (part of San Francisco's Fleet Week). Good golly they're loud!
I assume you've seen the C64 game Blue Angel 69? Sounds like an old yahoo email address, but it's an actual game (Magic Bytes, 1989).
@12:48 Cool, didn't know that certain key presses could skip the pause. My tape days were mostly VIC-20. I assume it worked there too?
re: Blue Angels, yes, I think it's a regional thing. We'll see how many people get it :)
I only learned about Blue Angel 69 in the last couple weeks when someone mentioned that the Accolade game was fairly rare so I looked around online to make sure it had been imaged etc.
The VIC-20 doesn't pause at all when it finds a file. It also doesn't blank the screen while loading. I assume the pause was added to the C64 when they found they had to blank the screen due to the VIC-II's cycle stealing which made the existing tape routines unreliable with the display enabled, but I haven't looked into that :)
Just be lucky it's not Blue Waffle.
Yes, regarding manually typing in programs, the "Accuracy is important for Survival" is totally correct. More so if you were unlucky enough that your Computer was a Sinclair ZX81 with a worn Membrane keyboard and the Sinclair 16K RAM expansion. Not only did you have the problem of losing all of your program if the slightest movement upset the connection on the RAM Pack, It also had a tendency to freeze when it overheated due to the strain during the hours of debugging errors in the program and print errors from the magazine. It was common for spaces to be incorrect and badly printed graphics characters to cause havoc when using them to denote machine code within a BASIC program (an odd quirk of ZXBASIC,)
Using the ZX printer would be poor quality black on sliver which was not easy to typeset.
Using a regular printer resulted in a black and white print which would be more easily typeset and would work with any early 80s machine. But might only be able to print ASCII characters. In some cases Sinclair specific characters ended up being handwritten.
A lot of commercial tapes will only work with shiftrun or c=run, they will fail to work if you try to manually load. In the northwest of USA we called it "splat" instead of asterisk or star. Interesting to note different computer jargon based on region.
I did know a few "splat" people back in the day. I had forgotten about that, thanks for the reminder!
There was even a commodore disk magazine called LoadStar, referencing the name commonly used for asterisks in much of Canada and the USA. I was not aware of "splat" as a term, but it makes sense as a name for a wildcard.
Now I'm remembering that the most common time I heard "splat" was when there was a "splat" in a disk directory listing, indicating that the file was bad in some way, usually not closed properly. I think that tied in with the * looking somewhat like a squished bug, and the "splat-file" was a buggy file.
Note that * loads the LAST ACCESSED file from the floppy, loading the FIRST one is only a FALLBACK for the case there was no previous file access. Hence, it is advisable to LOAD ":*",8 . IIRC this is short for "0:*", so the first of a possible dual-drive under drive number 8. Ah, I see: 20:26.
When you started talking about being traumatized I chuckled at the hyperbole, but then when you opened the magazine at a type-in program and I physically jolted. I guess you're right. I AM traumatized!
Being in the UK and having used the ZX Spectrum 48K before getting a C64, I naturally used LOAD "" when trying to load a game from tape.
Not having a Disk drive, I didn't know about using ',8,1' or even ',1' until years later
Also, one of the best magazines made in the UK for programming was a series called INPUT - It had code for the C64 and VIC20, as well as the likes of the Spectrum (ZX80 & 48k) and even the BBC / Electron.
If only I still had a working C64
I knew that [ Load "*",8,1 ] would give a ?syntax error, but I was wrong about why. I thought the lowercase letters were the problem, since I know that C64 BASIC uses all caps for every command. It didn't occur to me that the capital L was the issue, because I never played around with mixed case mode. After seeing your explanation though, it makes perfect sense.
Also, typos and syntax errors are the main reason that I love a GUI.
BAD SPELLARS OV THE WERLD UNTIE!
This is likely in part down to the C64 using PETSCII rather than ASCII. Which only has a single case when unshifted. With the ROM routines which parse the input only caring about the character codes rather than how they display.
@@markevans2294 PETSCII being way better, I see ASCII as the culprit.
The tape-handling code was originally put together for the PET and then moved over wholesale for later Commodore machines. That means a lot of patches and changes, and the sort of coding hack that gives the pause. And a little caveat for disk drive owners using LOAD"*",8(,1) - it doesn't automatically check for file type. So if it tries to load in a SEQ, USR or REL file as the first in the directory it can give you an error or FILE NOT FOUND. Best to use a directory editor to make your boot PRG physically the first in the directory. The C128's autoboot can also be affected by having the wrong file type.
EDIT: The O instead of zero worked because there isn't a physical "drive O", it's expecting zero or 1 - another feature carried over from earlier drives.
I think I read somwhere (wish I rememebered the source) that the core of the tape code, written by Chuck Peddle himself, remained untouched, because no one could understand it and dared to touch it. It is quite slow, but very safe, thus Commodore was considered to have the best tape performance of all the early 8-bit computers (when RAM and file sizes were low and speed not a big consideration).
Took me way too long to see what was wrong with the t-shirt...
I'm embarrassed to say that I could not figure out what was wrong with what was printed on the T-Shirt... But then again, it's been decades since I messed around on a real C64.
IIRC, "*",8 will load the first program after a new disk is placed in the drive, OR the last program loaded if a different named one was already loaded. ":*",8 will always load the first program regardless if any other programs were loaded prior to it.
You do recall correctly:)
Just stumbled on this channel. I was a kid in the 80s and spent a LOT of time on the C64, but was too young and not patient enough to ever write anything other than very basic and silly programs. I did try to type in a horse racing game from Commodore Gazette once but it never worked 😅
But since those days, I’ve never really understood the LOAD command that I typed in thousands of times. This video was a real blast and I leaned something about a cherished part of my childhood. Thank you!🙏🏾
I never had a c64 but I always find your videos fun to watch.
I’ve seen that t-shirt. It’s maddening. I would be embarrassed to wear that shirt
21:22 I still do this to unwind sometimes. They don’t have a word for what’s wrong with me
We call it Dutch.
@@Okurka.hahaha
I almost didn't notice the t-shirt being wrong. I'm so use to the C64 being all upper case that I just ignored it. lol
My running gag back in the day was, "I wish this stupid computer would do what I WANT it to do instead of what I TELL it to do".
When I first saw that shirt, I thought, "it needs to be all caps. That's how I remember doing that", but I didn't know that about the C64 characters. Always learning something new about the C64. Thanks again!
Great video Robin! LOAD"*",1 is actually a pretty good way to find all programs stored on the tape 😃 Cheers!
My partner wanted to buy me a Commodore 64 disk load shirt and was turned away from a mixed-case offering because somebody took the time to comment on the product page that the command as written wouldn't work. She found a corrected version and now it's one of my favorite pieces of clothing. I'm surprised at how few people know what it means.
We think of the C64 as the best selling home computer, but compared to the world population, the 10 - 30 million sold units were actually not that many. Sad to think that the vast majority of people on Earth are missing out.
There are many more people without knowledge than with. There are many more people who make mistakes and still succeed than people who rarely do. This means that the history will be written by the victors - the incompetent. The only antidote is to share correct information and hope that many people see it - and to correct people when they're wrong.
People like 'why' answers like this one, and you explain in detail. Kudos.
I was really waiting for this video... thanks for explaining.
Back when we used the PET with the INTERNAL Datasette, if we also had an EXTERNAL Datasette we used ,2 to access the external unit.
p.s. I also have that Telidon button…I remember seeing Telidon demoed at the CNE in Toronto, Canada.
Cool about the Telidon button; I love its design. And yes, and most (all?) later PETs supported two cassettes though of course they were both external.
Interesting. On the C64 ",2" specifies the pseudo-RS232 interface on the user port, typically used for modems. The LOAD command is illegal on those devices.
@@8_Bit I remembered that later. #1 was on the back, and #2 was on the right (usually covered up).
Robin i need your help as Professor of c64 ;) i got myself a c64 again c64c with 1541-2 like from the past. Just i had always a ActionReplay but now i own a final catridge 3. My Problem... i search webs, Reader manuell up and down... how to cheat with fc3 ?? I get freeze, then i go to Monitor, i change 0913 ( turrican 3) so .m 0913 the Adress i change to 60. Then enter, then x (leave monitor) now im back in Desktop. There is no key to get back in the Running Programm?? My question how to get back in the game. I find only "bar" turns your menu on again and freezer is aviable but i cant get back in the game. Is there an allmighty sys.... to switch back at the point the freeze Was made ? I remember in ActionReplay that you can change memory and just get back into the game. Else the Monitor in FinalCatridge is useless or ?
So when you X (exit) the monitor, it goes right back to the desktop, and not the "freezer menu"? Because from the freezer menu you should be able to choose Exit->RUN and the program will continue.
If I remember correctly, I used LOAD"*",8: with a ":" at the end. Is it a shortcut like "L Shift i" for LIST, or is there more to it?
Was always shift+run/stop and then the Commodore key for me. It's what I read in the manual.
Talking of run/stop, I notice your C64 must be a different model from mine, as the key cap on mine actually has the slash on the "RUN/STOP". I wonder if that was added later since most games I owned referred to it that way in the manual.
I don't recall ever seeing a C64 with a slash on the RUN/STOP key! Is yours a 64C (more modern case) or a C64 (breadbin) model?
@@8_Bit It's a PAL C64C, likely a very late revision, as I(or more accurately, my dad, I was 5) bought it in 1988, but the system itself is likely from 1990 or so, as it is a warranty replacement.
@fattomandeibu Interesting, I'll try to keep a look-out for one. I own one PAL 64C but it doesn't have the slash on RUN/STOP. However, I know there were many variations as they continued to cost-reduce it as the years went by.
Pedantry plays an important survival role in respect of spam emails and messages. Most of these contain grammar and spelling errors. If a person doesn't care about spelling and grammar, they are far more likely to fall for a scam, especially one that simply asks you to click on what you think is a trusted web address.
Maybe it's worth to notice that LOAD"*",8 could be used to load a previously loaded program again. CBM DOS won't search the directory from thr begin if a program was already selected. The asterisk clobbs to the already loaded one again.
An unexpected behavior sometimes ...
As someone who grew up with Commodore 64 and had to learn it, this was a fun flashback.
The Char sets are things I played with, I also started with only a tape drive before we got a disk drive. It was great.
I am a 90s baby, so this was a bit before my time. I never learned BASIC, so your "pickiness" is incredibly useful to me. It may be obvious to some of y'all but I get so frustrated when I can't get a game to load, but it's just because it was explained to me improperly. Thank you :)
9:54 "Literally" in two senses of the meaning.
13:07 Huh? LOAD"",1 is giving the device address 1 (tape). LOAD and LOAD"" also give a relocated load, since that's the default.
15:51 I assume there can be a glitch where the waiting time is longer than 8.53 seconds if the clock wraps from 24:00:00 [sic] to 0:00:00 while waiting.
21:10 What, you couldn't just download the program from the magazine's website?
I remember being stupidly excited at being able to download the disks of all the magazines I'd bought in the 80s/early 90s somewhere around 15-20 years ago because I was finally able to play some of the games I'd tried and failed to type in correctly!
Aha, thanks, your comment got me to finally look into a bit of a mystery that I thought I had solved in my head without experiment, but I came to the wrong conclusion. The mystery was: why do cassette auto-loaders work with a parameter-less LOAD command? Many tape games do not require the user to type RUN after the initial LOAD, and they aren't relying on "Shift+RUN/STOP" either. This would only be possible with a non-relocatable load, right? And so I wrongly concluded that cassette load defaulted to non-relocatable, as if LOAD "",1,1 had been typed.
But I'm wrong. LOAD or LOAD"",1 asks for a relocatable load, but (here's the thing I just learned) it's only a suggestion! Ultimately the tape header controls this. If the "tape identifier" byte in the header is a 1, then the user's suggestion is followed. If the tape identifier byte is a 3, then the user is ignored and a non-relocatable load is forced.
@@8_BitSuper interesting. I thought that the ,1,1 uses relocatable load and ,1 does not :-D Also didn't know that "*" or "PROGRAM*" etc. doesn't work for the tape louder routine.
@@8_BitHow does tape/disk loading differ from the CBM/PETs?
@@MattKasdorf Command-wise it's almost the same on the PET, except the PET doesn't have the 2nd numeric parameter (the 1 in ,8,1) as it doesn't support relocated load. That was mostly added to the VIC-20 and C-64 to allow PET BASIC programs to be relocated to their respective start of BASIC memory locations. The cassette protocol and even the code is nearly the same from the PET to the VIC and 64 - apparently Chuck Peddle himself wrote the original tape code in an undocumented fit of genius and everybody else was too scared to mess with it after he left Commodore. Disk loading on the PET uses the much faster parallel IEEE-488 bus which was adapted into the cheaper serial IEC bus for the VIC-20 and C64.
Imagine someone who is unfamiliar with the C64, buying that T-shirt, then getting a C64 sometime afterwards, only to then figure out that what it says on the T-shirt doesn't actually work. If it was me, then that T-shirt would instantly plummet in emotional value. So no, I don't think you're nitpicking at all, Robin.
That thing with the asterisk when loading from tape is actually rather obvious, when you think about it. I have just never thought about it until now... and you know I love that kind of stuff.
- At some point in the past I began using "LOAD":*",8,1" instead. Which is suppose to always load the first file from the disc. I don't recall reading it anywhere, so someone must have told me about it. I also don't recall whether it skips a "DEL
Yes, that LOAD":*",8,1 should always load the first file. I also don't remember where I learned it. It seems to be sort of like the 0 GOTO trick that allows a "parameterless" GOTO, in that preceding the colon *should* be a drive number of 0 or 1 but it seems it can simply be omitted. This will require someone to read the CBM-DOS disassemblies but I assume specifying a drive number (even a nameless/default drive) will cause the drive to disregard any "cached" file that * would otherwise bring up and force it to load the first file from the disk. Lots of room for investigation in this area. Hopefully in the future!
I’ve been on every version of commodore since 82. I’ve also only used twin 1541’s and always used CAPS, in white, just like this. I’ve learned two things today. 😮 Okay, three things. 😂❤
I'd make that:
LOAD "0:*",8,1
because of the save-with-replace bug. Got bit by it once or twice back in the day.
The 1541 drive thinks it's a dual drive, and if you search for a file, it'll first check side 0 (which exists) and, if it doesn't find it, searches drive 1.
Now it thinks it's looking at drive 1, and when you do a save-with-replace, it instead turns your file into a splat file, which appears in the directory as type *. It will grow and it will eat every file on your disk. There was an article about it in either Compute! or Compute's Gazette back in the day. I remain suitably paranoid about splat files and I'm terrified that no-one seems to know about it anymore
And, indeed, it IS a throwback to when Commodore disk drives were dual units. They used the same ROM from those drives in the 1541, which is why the 1541 thinks it's a dual drive.
It should be fine when just loading programs, but yes, it's definitely something to be concerned about if doing saving, especially save-and-replace. I believe the 1541 ROMs were originally in the 4040 Dual drive, then modified to the 2031 single drive, then modified again to the 1541. Some of the dual drive code was removed or patched out, but not enough!
i can remember a fast load named "@" on the disk and you had to alter the filename you wanted to load with the fastloader. Maybe with a ":" in front, but i am not sure.
Yes, that would be DOS WEDGE or similar. It's loaded into memory and intercepts the commands before BASIC looks at them. So it spots the character and sends the following filename/command to the disk drive.
If I saw someone wear that shirt in public, I point, laugh, and then shout “ SYNTAX ERROR”
This sort of thing acts as a pretty convenient shibboleth for how much the people responsible for things like that shirt or that documentary actually care about the subject matter. It's not unreasonable to expect someone who's going to the trouble of actually producing products to sell have the most basic understanding of the thing those products relate to. I look at that shirt and my brain immediately goes to bootleg merchandise that misspells the name or attaches the wrong name to the picture.
"Load" I can understand, and even forgive. Modern devices these days love to be "helpful" and do stuff like automatically add punctuation and capitalize things that they think require capitalization. My devices do the same thing to me ALL THE TIME whenever posting/commenting about computer/electronics things. Usually I'm alert enough to catch them in the act, but sometimes I accidentally let one slip through. So whoever made the "Load"*",8,1" shirt may have fallen victim to this. Also capital-L is (technically) grammatically correct ("first word of a sentence should always be capitalized!") so maybe someone at the T-shirt company who was proofing the design and who doesn't know much about retrocomputing, thought "huh... that looks wrong... I'm gonna fix it!" Of course WE know that the correct version would be "lO"*",8,1" assuming your C64 is in upper/lower mode. Oh well, at least they got the ",8,1" part right. :) (unlike the second example you pointed out :) )
Yeah, I can understand the t-shirt mistake on one hand, but on the other it's a "you had ONE job" kind of thing. The t-shirt design consists of a single line, and it's not even correct. With the documentary guys, they had dozens of things going on in their 90 second trailer, with a whole bunch of camera set-ups for many shots, organizing all the props, lighting, all the editing, sound work, etc. etc. So from this perspective, the trailer guys got 99% of their work correct, and only 1% error, while the t-shirt is way worse as a percentage :)
I'm not really serious about which is worse here, just offering another way of looking at it.
do you know anything about the dragon 64 home micro ????? ??i typed in a program but it won’t work please help if you can thanks
Used a c64 from a round 83 to 90. Never even knew it has a mixed case mode. Also started with a dataset, for the life of me I couldn't remember how to load the first file on the tape. I fared better with the disk command. Again, case threw me. But I remembered that 8 was a device ID. Didn't really know what the 1 one was for. Sometimes it was needed, sometimes it wasn't. I did not know that * could mean last loaded file though.
Actually my first instinct was 8 meant the disk drive, and 1 was the drive ID on the bus, in case you had more than one daisy chained.
I was one of those peeps that basically just played games ;p. Did some homework in GEOS too.
Wonderful video, as always! 😄Thank you so much, Robin
Hey robin... Where would I find the format of a mach Lang executable?
Do you mean how to make a machine language program executable from BASIC? Check out my 2nd last video "Adding Command Line-esque Parameters to C64 and C128 Programs" starting at 18:30.
th-cam.com/video/HC2--B9ZhUA/w-d-xo.html
MC Frontalot's "Penny Arcade theme" has a refrain of "ell-shift O to the quote and then dollar," as a shout-out for how to load and display the directory. of course it's missing the ,8 to specify disk, and it will display a directory of the tape but only if there's no program named "$" on it.
I was told the LOAD"$",8 and never ,8,1 when load8ng the insex of the disc. Does it make sense?
Yes, loading the directory file "$" should be done with ,8 and not ,8,1. Using just ,8 brings the directory into regular BASIC memory so it can then be LISTed as a BASIC program. If you use ,8,1 then it will be loaded to the address specified in the file, which is $0401 which is actually the C64's screen memory. This is strange, but it actually goes back to the PET computers which had BASIC memory starting at $0401 so it worked properly there.
For the O vs 0 item. Perhaps the kernal code just assumes the character before the colon is a number, and the translate PETCII to INT routine returns zero for characters it can't convert.
When I test this on my C64, it doesn't seem to matter what I put in front of the colon. Even graphics character will work there.
I believe it's 100% up to the DOS in the drive to interpret that leading drive number. I think it mattered in the earlier dual Commodore drives like the 4040 that the 1541 descended from. Probably when they made the 1540/1541 ROM (or more likely the single-disk 2031 which was made in between) they left some of the parsing code but ultimately just ignore it, or force it to 0 so it doesn't matter.
The character before the colon (and in fact all the text in the "filename" string) is interpreted solely by the DOS ROM in the disk drive. If it's a '0', it means the file is required to be on the disk in drive unit 0 (which is the one that actually exists). If it's a '1', it means the file is required to be on the disk in drive unit 1 (which doesn't exist). Any other character means the file is required to be on the disk in the last-used drive unit, which _should_ always be unit 0, but sometimes isn't due to bugs. If there is no colon, then the file is theoretically permitted to be on either drive unit.
What about the file with the empty name on Robin's tape? It couldn't be loaded just by typing LOAD"", because this loads just the next file. You have to wind forward the tape to the position and start loading there (which was the usual use to load a program on tape, according to my memory).
Out of curiosity, is there a way around this?
I don't know of a way around it without fast-forwarding or of course tediously loading each file in order until you get to that one.
@@8_Bit I played around with the help of the excellent "Cassette Book for the Commodore 64" by Dirk Paulissen, and came up with the following little program that in a loop opens a file, then investigates the file name in the file header in the tape buffer starting at memory location 833 (according to my testing starts with 32 for space unless the file has a name):
10 open1,1: close1
20 if peek(833)32 then 10
30 print"found file with no name"
One can now rewind a bit and load the file.
I knew the issue with the disk loading command right away, but did not know that about the tape command.
I've known where at least a majority of my pedantry came from.. it was definitely programming on the C64 and typing in those lengthy listings. I don't think I ever entered one of any significant size without at least a few mistakes, sometimes many. 'Precise' is correct; nothing else usually sufficed.
Just a side question: I keep seeing some of the same patrons repeated across multiple videos as "New Users". Are they dropping off the list and rejoining or something? 🙂
I'll push more of the new patrons off the list next time I update it :)
the first thing I ever learned to write was LOAD”*”,8,1 Return
I saw your comments on Twitter. Nice to see some visuals here.
I don't remember where I first picked up Load "*",8,1 but I do know that on many of my game floppies, that exact instruction was given on the disk label as the instruction for loading the game so it only reinforced it.
The question is how do you load specifically the program with no name, when an empty string loads the next program?
Only the tape drive can have a file with no name, the disk drive requires it. The easiest way to find a (specific) file with no name on the tape is to know the tape counter position. :-)
What everyone seems to forget is LOAD "0:×",device # (1 for tape and 8 for disk drive).
The 0:× loads the first file found. If no other number is added it would load into BASIC area of memory (#800 hex), if a ,1 was added then machine code area (#801 hex). The 0:× specifier always insured a proper load.
LOAD "0:*",1 doesn't work; that's what most of this video is about. Cassette loading doesn't recognize the drive number of 0: and it also doesn't recognize * as a wildcard.
For disk loading it's true that LOAD"0:*",8 will force the first file on disk to be loaded. But without an extra ,1 at the end the file will be loaded to the start of BASIC memory which is $0801. With an extra ,1 the file will be loaded to whatever 16-bit load address is specified in the file. It could be $C000, $1234, $0801, or anything else really.
I know exactly what you mean!
These youngsters will never know what it meant to type in a game from a magazine and have to work through pages of DATA statements looking for the missing digit or comma that was throwing the order out and crashing the game ..... whether it was graphics in the wrong places, or music that went wrong and crashed leaving something dissonant still playing at full volume .....
Youngsters or people like me being way too lazy to even try that. ;-)
Is there a way for the C64 to read punch cards? Could magazines have published code that way?
Haha, funny. cut out cards from magazine pages? Clue it on a thick paper and feed it to a punch card reading device. Did anyone build such a thing (e.g. with LEGO Technik or a Fischer Technik?)
I think it would be easier to build a punched tape reader. The magazine has to produce perforated pages to cut out in strips which has to be clued together ... however, the information density would be too low in comparison to a listing, and the error rate would still not be eliminated ...
When I was a kid typing in these listings I used to dream of a day when I could somehow just scan in listings without typing them in. As @jjeeeekk suggests I don't think punch cards would be practical for a magazine, but maybe some sort of barcode reader technology would have been? But in either case it seems extra hardware would be required making it a sort of niche solution. Most magazines just started offering disks by mail with the programs already saved on them as a bit of an extra profit stream.
I actually questioned this recently and broke it down to ,8,1 is for loading from disk while /1 was for loading from tape. Haven't watched this video yet but that was my generalization.
Pedantic it may be, dead on accurate it absolutely is. If you are gonna sell merch based on C64 nostalgia, at least have the goddamn common courtesy to get it right. Excellent video.
Spotted both right away.
*Only because I dug my old C64 out recently and essentially made both these mistakes (and more) trying to remember the commands.
Whats the song at the end?
It's a track from an unreleased album from my band that I keep meaning to finish up and get done.
Why didn't they have a way to enter programs as Braille.
That doesn't seem to exist for the C64 (yet). I played around with the screen reader in Windows 11, but that can't read the content of a C64 emulator window. Threre are smartphoe apps that can read any text in front of the camera, so holding that in fornt of any computer screen might work? If you have a Braille keyboard for a modern PC, that should work for entering text into a C64 emulator like VICE.
I see you brought your A GAME.
I'm so happy I'm just young enough that I missed out on much of the earliest computers. My first machine was a Cc3 and my experience with it didn't progress beyond running a game... If I was a few years older I imagine I would have tried to program the thing.
That looks mind twisting.
About typing programs from magazines ... yeah it is very tedious and error prone (user or publisher induced). I heard that long time ago in Britain, when they had the BBC microcomputer with the datasette, some radio stations actually sent program binary audio in certain (late) hours. You could then set up your casette recorder, and just press record just before the program is on the air. And later you could just load the program from the recorded casette. Don't know the specifics tho.
Loading tapes (shift and run stop) or just type load. To find file then load"file",1
Disk I do keyboard shortcuts.. or use a utility cartridge with shortcuts.
Correct pedantry is the best kind of pedantry
I think it is trumped by correcting incorrect pedantry. When someone thinks they're right in correcting you but are hopelessly wrong.
If you have 2 floppy drives, LOAD"*",9,1 will load from the 2nd drive. If you remove 8, it will load from the 1st drive.
,1 means Load the file into the starting address specified within the file, which is often used for machine language programs or other non-BASIC files.
I never owned nor operated a C64 but videos like this ring with me. There is little more interesting to me than how specifically old computers and their hardware work.
Especially when it gets down on how the hardware really works.
I'd never thought of the disk drive to actually have a processor and OS on its own.
A really interesting hardware design.
"Logic, by its very nature, brooks no denial."- I cant remember... Ok, going back to cleaning :)
The syntax errors are something nerds can talk about and noobs learn about. Decent marketing.
I remember typing in a game from a magazine with a typo error. So annoying. Thank you @8-Bit Show And Tell, for these pearls of nostalgia.
I was sitting here feeling a little bit proud that the Ataris of my childhood were "better" in some little ways, ;) when I understood that Commodore can store multiple, named files on tape. I would have liked that feature! :)
So I can use LOAD"*",1 to find all the programs on a cassette?
Yes, as long as there weren't any files named "*" on the cassette then you could use it to essentially display a "directory" of all the files on a cassette. Even safer would be LOAD"P!0@I#D$U%Y^T&()",1 or something similar. Apologies if I've just exposed someone's favourite password.
Yes, but you would have to sit in front of the computer to skip the pauses and write down the file names before they scroll away. There are neat programs for tape directories, that scan the tape, and then present all the files with name, type, size, and even calculated tape counter positions, and also put that out on a printer.
To be even more pedantic (because pedantry is fun): LOAD"*",8,1 doesn't necessarily load the last _loaded_ file. It is _supposed_ to load the last file that was _either LOADed or SAVEd._ But, in fact, it actually loads the last file that was opened on _either channel 0 or channel 1_ in the disk drive. This can be via a LOAD or VERIFY command (both of which use disk channel 0), a SAVE command (which uses disk channel 1), or even an OPEN command (such as OPEN 1,8,0,"MYFILE,L" or OPEN 1,8,1,"NEWFILE,S"). That being said, the OPEN command is not really _supposed_ to be used with channel 0 or 1, as these are intended to be used only by the KERNAL's LOAD, VERIFY, and SAVE routines - but the C64 won't actually stop you from misusing them in this manner.
Finally, if there hasn't yet been a file opened on disk channel 0 or 1, the LOAD"*",8,1 command will just treat the asterisk as a normal wildcard, which is what causes it to load the first PRG file on the disk. And while this is usually safe, it is preferable to use LOAD"0:*",8,1. If you don't use the explicit drive unit specifier ("0:"), the drive will likely make an attempt initilaize the non-existent "drive unit 1". Due to an indexing bug, this can A) corrupt one of the drive's 5 internal data buffers, and B) wrongly convince the drive that drive unit 1 actually exists snd contains a valid disk. This latter bug can potentially cause lots of drive errors, and is even related to the infamous and devastating save-and-replace bug.
Very interesting; I have vague recollections of experimenting with with some of this stuff but don't remember what I found (if anything) :) I'll take note and may return to this in the future, thanks.
@@8_Bit Until then, I will avoid * and @ like the plague.
Those type-in magazine listings, with errors, were a great way of learning though, fixing it was always provided more experience, as my 8-year-old brain experimented with solutions.
Your knowledge is impressive, respect!
I didn't have my own, most i know (quite so for not owner) is from visits in friends houses, but only 2 wanted more than gaming.
I don't know if you check comments to old videos, i wonder about one i left in video on multiply in assembly.
Finally I good explanation of the Why Only Some Keys & Why About Eight Seconds 🎉
Off topic: I would love to see you make a video where you go over TRSE (Turbo Rascal). I feel like most TH-camrs either don't know what it is or they ignore it.
I found an hack long time ago, games with horizontal rainbow lines loader could be prevented to run automatically by keeping pressed run stop, you could even then save them on floppy