Bill Gates Sucks? An Anti-Microsoft Easter Egg Hidden In C64 BASIC?

Поділитися
Вставка
  • Опубліковано 27 сер 2024

КОМЕНТАРІ • 390

  • @psych0naut
    @psych0naut 4 роки тому +266

    Hi Robin! Thanks for your interest in my little "Easter egg". I'm glad to see it's still getting noticed all these years, and I enjoyed your video exposé. :)

    • @8_Bit
      @8_Bit  4 роки тому +27

      It was a fun puzzle, thanks for writing it up!

    • @psych0naut
      @psych0naut 4 роки тому +20

      @@8_Bit You and your viewers might also be interested in reading my follow-up article, which is on page 6 of TPUG's Spring 2016 newsletter: www.tpug.ca/tpug-media/nl/92-Spring2016.pdf (Warning: For hard-core retrocomputing nerds only!)

    • @LordOrwell
      @LordOrwell 4 роки тому +11

      @@8_Bit man i was about to leave a rude comment about how this wasn't an easter egg and you were generating the words by seed, but then you came out and explained how it worked. Ah, pseudo-random at its best. The biggest tell though is that you had to use multiple seeds so the order you called them would affect the output.

    • @mathieuleader8601
      @mathieuleader8601 4 роки тому +2

      ooh the man himself

    • @Lord-Sméagol
      @Lord-Sméagol 4 роки тому +12

      Here is a smaller decode routine:
      0 GOTO 3:DATA 125708,33435700,17059266,0
      1 PRINT CHR$(A+64);
      2 A=INT(RND(A)*22):IF A THEN 1
      3 PRINT" ";:READ A:B=RND(-A):IF A THEN 2
      ... and an optimized searcher:
      0 T=22:A=0:L=0:B=0:INPUT B$:L=LEN(B$):DIM F(L)
      1 FOR A=0 TO L-1:F(A)=ASC(MID$(B$,A+1,1))-64:NEXT
      2 FOR B=-1 TO -99999999 STEP -1:A=RND(B)
      3 FORA=0TOL:IFINT(RND(T)*T)=F(A)THENNEXT:PRINT -B:END
      4 NEXTB
      *Line 3: IF ... THEN NEXT ' Takes advantage of the BASIC interpreter; Compilers won't like this!
      Run multiple C64's on MAME to search for several words at the same time.
      MAME doesn't appear to run C64 very fast with speed throttling turned off [F10] !
      I only get 188% [Xeon E5-2697-v2 2.7 (3.5) ] ! I get 875% on a MAME Einstein ! :)

  • @theenderman9042
    @theenderman9042 4 роки тому +128

    *at least microsoft back then wasn't begging to make microsoft account.*

    • @MetalGearHazumu
      @MetalGearHazumu 4 роки тому +5

      Please, please, please make a Microsoft account

    • @toysareforboys1
      @toysareforboys1 4 роки тому +4

      A friend asked me to set up his new Acer laptop for him, couldn't make an offline account anymore!!! Was running "Windows in S mode", wtf? Format, reload, offline account worked fine after that, zero acer garbage on there now too, just rips.

    • @samuellourenco1050
      @samuellourenco1050 4 роки тому +7

      No, M$ was busy urinating on someone else's products.

    • @technoguyx
      @technoguyx 4 роки тому +5

      they would have if the Internet had been a widespread thing back then

    • @nagash303
      @nagash303 4 роки тому +5

      microsoft is evil company, who wants to run everybody out of business, so they rule computermarket.

  • @JasonHonan
    @JasonHonan 4 роки тому +72

    Using the pseudorandom number generator to hide a string in integers reminds me a bit of Tupper's self-referential formula (a formula that, when graphed, displays the formula itself).

    • @maxarothdev7374
      @maxarothdev7374 4 роки тому +1

      I'm intregued

    • @Josh2102
      @Josh2102 4 роки тому +4

      Maxaroth Dev I think they are referring to this ua-cam.com/video/_s5RFgd59ao/v-deo.html

    • @microdesigns2000
      @microdesigns2000 4 роки тому +2

      Math inception

    • @calebfuller4713
      @calebfuller4713 3 роки тому +5

      It's actually how the developers of the original Elite game managed to fit all the planets and descriptions and other data into the limited memory of machines at the time. The entire galaxy was actually procedurally generated with a seed and a pseudo-random number generator pulling words and letters from a few short strings! They had to be careful with the initial seed to get a decent sounding set of planets - an early attempt infamously produced a planet called "Arse"...

  • @SuperVstech
    @SuperVstech 4 роки тому +32

    Back in high school in 82 the gazette magazine had a cool word processor program that seeded the random number generator with a code word, and would encode your messages. You could save and send messages to a friend with the same computer with the seed word, and they could read it...
    I was amazed back in the day.

    • @cigmorfil4101
      @cigmorfil4101 4 роки тому +11

      That's effectively how the Lorentz machine Hitler used in WW2 worked: it used a pseudo random sequence to obscure the plaintext. As long as the same code word (initial setting of the sequence) was not used it is extremely secure.
      However, by sending two similar (long enough about 5000 character) messages the bods at BP were able to work out not only the obscuring sequence for those messages but the actual (mechanical) "function" that created the obscuring sequence.
      Tommy Flowers converted that mechanical function into an electronic version, and built Colossus around it to effectively step through the seeds and check each sequence thus generated against the intercepted message, looking for possible German words.
      Tommy Flowers effectively built the first electronic pseudo random number sequence generator in a computer.

  • @ramblinevilmushroom
    @ramblinevilmushroom 4 роки тому +81

    I could tell that wasn't an Easter egg xD It made me think of a story of a kid who thought that he was unlocking secret hidden games by typing in "really long cheat codes" into his c64.

    • @MS-ho9wq
      @MS-ho9wq 3 роки тому +4

      looool

    • @calebfuller4713
      @calebfuller4713 3 роки тому +5

      Did the "cheat codes" happen to involve a bunch of hex codes that were poked into memory and CALLed? 🤣

    • @jimmyzhao2673
      @jimmyzhao2673 Рік тому +1

      @@calebfuller4713 There's an old saying in Tennessee-I know it's in Texas, probably in Tennessee-that says, 'Fool me once, shame on...shame on you. Fool me-you can't get fooled again.'

  • @jeffflowers5489
    @jeffflowers5489 4 роки тому +4

    It's been decades since I used a Commodore but I learned way back then that the best way to generate a TRUE random number is to use RND(-TI) with TI being the always-changing time value.

    • @gordontaylor2815
      @gordontaylor2815 5 місяців тому

      That plays into the idea that computers, by their nature, simply cannot produce "true randomness". The "Easter Egg" in the video is fundamentally an RNG manipulation exercise that could be modified to get pretty much whatever short phrase you wanted to generate. Using the time value would be a quick and dirty way to improve RNG that would be invisible to anyone not familiar with C64 programming.

  • @tonelemoan
    @tonelemoan 4 роки тому +8

    Fascinating. Slightly related story:
    In the April 1985 edition of an all formats computer magazine published here in Britain (can't recall the name), there was a type in program that purported to seed the RNG with values likely to produce "art" while PLOTting pixels at random co-ordinates. The screen would slowly fill with what initially looked like random dots but would slowly resolve into a message. The message? The month is a clue! It was "APRIL FOOLS!"
    A quick practical lesson on the vastness of the number space of even 2 colour low resolution microcomputer screens!
    The ASCII values where obfuscated in a similar way.
    Having an Acorn Electron at that time (the little brother of the BBC Micro) was a great challenge. Eking more from the limited RAM (32K but around 12K-22K depending on screen mode) was always desired. Similar to how Elite packed data for several galaxies of 256 star systems each into even the Electron's tiny memory.

  • @GeoffSeeley
    @GeoffSeeley 4 роки тому +16

    I learned to code (basic) on that model of PET in junior high school. I'm pretty sure I remember learning that the RND function wasn't that random :-) Good times!

  • @3DPDK
    @3DPDK 4 роки тому +38

    It's not that the RND(0) generates bad numbers, it's that it always takes the seed value from the CIA timer (or system time clock). It's possible to ask for a RND(0) value twice in a row before the system clock has "ticked" (about 30 times per second). This means the seed value will be exactly the same in both cases. There's also a problem that RND(0) will skip numbers in a given sequence; INT(RND(0)*300), if looped will *always* skip something like every fifth number from 1 to 300 - the number or pattern of skip depends on the range multiplier. *500 skips every other number and *1024 skips five numbers in a row. I had figured out once why this happens but now I can't remember. A rounding error when converting the clock seems most likely.
    The Ideal way to use RND in C-64 BASIC is to:
    10 X=RND(0)
    15 X=RND(1)* what-ever
    Line ten seeds the RNG with the CIA timer which has an extremely low probability of ever being the same number twice from one session to the next and does not require the user to input a seed value. Line 15 uses the previously generated number to seed the next value and does not suffer from sequence skip. If this is used every time (or even just periodically) that a random number is needed, it also prevents sequence cycle repetition. A truly random number comes from reading or PEEKing (54299) with voice 3 of the SID chip producing a high frequency noise wave form (voice 3 does not need to be "turned on" or outputting to the speakers to read this random number, but the voice three parameters for wave form and frequency do have to be set) . The SID used a non-biased NPN (internal) transistor to produce a true analog random wave form - collector current noise - like static on a radio or T.V.. The number retrieved is limited to 255 but by adding or multiplying several PEEKS and a bit of creative math you can get what ever range you need.This is also the fastest and easiest way to generate random numbers in ML.
    Try this for proof:
    10 ?"[shift home]"
    20 POKE 1024 + INT(RND(0)*300),1: GOTO 20 (the effect is the same without INT())
    This will fill the first 7 and a half screen lines with the letter 'A'. You will see the pattern of skips and it will change by changing the multiplier.*400, *500, *1000, etc (don't go over 1024 or you start overwriting the program and it will crash)

    • @8_Bit
      @8_Bit  4 роки тому +3

      Thanks for the clarification!

    • @Cythil
      @Cythil 4 роки тому +7

      I actually had the same sort of bug in a game I was making on a (far faster machine). I generated two random numbers one after each other but they always turned out the same. Which I found odd at first. Then I figured it was due to the code was executed so fast that the seed that I assumed was based on clock ticks was the same. So being lazy I added a little hack simply by adding a little 1ms wait between them. Worked like a charm after that. But of course was not a elegant solution to the problem but I manage to finish up my game for the class assignment at least. ^_^

    • @IvanEngler
      @IvanEngler 4 роки тому

      ultra comprehensive! thanks.

    • @3DPDK
      @3DPDK 4 роки тому

      @@Cythil BASICA, QBASIC, and a bunch of others for IBM type computers and their predecessor high level languages all had a means to use the system clock to seed and generate a random number. RANDOMIZE (TIMER) is what I think I remember in QBASIC . They all have similar problems of repeated and skipped numbers depending on how fast the system clock updated. It's strength is that you have a greater chance of being squashed by a blue whale falling out of the sky ... ;/ ... than for the timer method of ever repeating any sequence of numbers. The millisecond delay is about as good a solution as any and nobody is going to notice a 0.01 second hiccup ;)

    • @Cythil
      @Cythil 4 роки тому +1

      @@3DPDK Yeah but I would likely have just randomized a longer number and split it between the two outcomes. I have not really check which is the faster method. Though if I was making a more advanced application I would.
      But then rather then programming in a high level language (it may even have been a interpreted language.) I might as well go down in to assembly if I want it to be really optimized. (Though I have not done anything in assembly I will admit)
      But then again this was just a little school project for my game design course. And programming was not even a high priority. Just that as a game Designer you should be familiar with programming. But let the true programmers do the real implementation. Still if you going indy you likely have to be that programmer.
      Now a days the closest I come to programming is programming the robots at work which is pretty simple in comparison in many ways.

  • @evansdm2008
    @evansdm2008 4 роки тому +20

    I’ve subscribed. I like that you went to the effort to reverse his program. Funny to think that a true random number generator would contain the works of Shakespeare given the right seed. And would also contain every possible program including the number generator itself. Super weird.

    • @8_Bit
      @8_Bit  4 роки тому +4

      Thanks for the sub :) I always try to show how things work on my channel - if I can figure it out! And yes, it's bizarre to think of randomness in this way. Every person's entire life story would be there, whether they had been dead for thousands of years, or hadn't even been born yet.

    • @djosearth3618
      @djosearth3618 4 роки тому

      Woah wow!.. ;] Maybe like:
      *10 FOR infinity to andbeyond:BE=infinitesimallyinfinite:NEXT*
      *20 GOTO ∞*

    • @captainchaos3667
      @captainchaos3667 Рік тому

      I've always thought it must be a misconception, that idea that a true RNG must produce the works of Shakespeare at some point. Proof by reductio ad absurdum: a true RNG _could_ just produce a never ending string of A's.

  • @ColdRFusion
    @ColdRFusion 4 роки тому +16

    Random Number Generation & its quirks is always fascinating, love the last message!

  • @EmanueleX
    @EmanueleX 2 роки тому +2

    As soon as I heard "hidden in the random number generator" i already knew that rng manipulation was gonna happen next

  • @hugovangalen
    @hugovangalen 4 роки тому +82

    Easter eggs should be relatively simple to trigger, not with such an elaborate program -- the moment I saw the listing I knew it was a fake.
    It is comparable to searching the ROMs for certain bytes in an arbitrary string, and then writing a program to print the bytes at those addresses and saying it is a hidden message in the KERNAL.
    But it is a good joke the author pulled on so many people. :)
    It basically demonstrates that you can decode random bytes to anything you want with the right "decoder", and why trying to decrypt strong encryption without keys is futile.

    • @manuell3505
      @manuell3505 4 роки тому +3

      I once used this to let FreeBSD communicate with MS Qbasic within a MSDOS virtual machine with no communication channel to outside. Just assign a string in Basic and trace it back in the VM process space. It probably gets more difficult when both systems have different byte-standards like ASCII vs. EBCDIC.

    • @bloepje
      @bloepje 4 роки тому +4

      You should be able to find anything with the right offset and length in PI.

    • @hugovangalen
      @hugovangalen 4 роки тому +2

      @@bloepje No it does not, there are hardly any repeating numbers, so you would need additional mathematics to get something like "Aaaaaaaaaaaaaaaargh" from the number in pi. It's too irregular to get something regular out. (I know because I wasted a Sunday toying around with what I thought was an ingenious compression method... :-))

    • @mechamania
      @mechamania 4 роки тому +1

      I wondered who the arbiter of Easter Egg definitions were.

    • @hugovangalen
      @hugovangalen 4 роки тому +2

      @@mechamania The "Easter egg" term is self-defining. They should just stare you right in the face after doing something relatively simple, like hitting a certain key somewhere, poking something in a certain place, or choosing a certain path in a game.
      These convoluted steps are like: "Lay an egg. Paint it. Hide it behind a bush. Go walk to the bush. Pick it up. You have found an Easter egg."
      That's not how it works.

  • @Eightbitswide
    @Eightbitswide 4 роки тому +55

    You had me until you started changing the number to get the RULES output. Well played!

  • @raycouzens7139
    @raycouzens7139 4 роки тому +4

    Just want to say that I really enjoy your channel. I used to own a C64 and later a C128 in the 80's and early 90's, but then parted with them for later machines. I am now going retro and have ordered the parts to make a new old C64 by using an Ultimate64. I know it's not exactly the same as an original machine, but possibly has a little more future proofing. Anyway, after such a long time away from my C64 world I will be returning to it and rekindling some of that early excitement. Your videos are always interesting and very informative and encourage my yearning for these older but still interesting computers.

  • @scottfromderby
    @scottfromderby 2 роки тому +1

    did you seriously get out a PET 2001 for the camera and go out of your way to *mime* the keypresses?! I am so impressed by your dedication to the art :)

  • @junker15
    @junker15 4 роки тому +1

    Just like on the CoCo, a variant of "WAIT6502" is present in Applesoft for the Apple II (at least the 9-digit versions shipped on ROM for the II+ and later, and most likely for the LASER 128). The FAC-sized constants are present, but just encoded slightly differently to the CBM ones. It's slightly more work, but all one needs is to write a short machine language program to print the 10 bytes at $F094 (you have to exclusive-or with $87 then set the high bit of each byte).

    • @MichaelPohoreski
      @MichaelPohoreski 4 роки тому

      junker15 www.txbobsc.com/scsc/scdocumentor/EFEA.html

  • @allenhuffman
    @allenhuffman 4 роки тому +3

    Thanks again for this. I finally applied the RND trick on my Radio Shack Color Computer and have ben having fun with that.

  • @IntoTheVerticalBlank
    @IntoTheVerticalBlank 4 роки тому +1

    MOVE your hand! Stop talking! Hey Robin! keep kicking ass!

  • @andymanaus1077
    @andymanaus1077 4 роки тому +4

    Having programmed BASIC games in the mid 80s, I suspected foul play when I saw that "simple four line program". Easter eggs were nearly unheard of in the 80s due to memory constraints and I understand the fury of CBM when they found out that valuable ROM space had been wasted. Programmers today have no idea of the anguish experienced in trying to shave off a few bytes just to squeeze a game into the memory of these early micros.

  • @RCassinello
    @RCassinello 4 роки тому +6

    Reminds me of those "Bible Code" books whereby with enough brute force, you could find any hidden message you wanted to 'secretly hidden' in the old-testament.

  • @JohnnyX50
    @JohnnyX50 4 роки тому +3

    The BBC Micro has the names of the developers at the end of its ROM. I discovered this by accident back in the 90's when I did an electronics YTS scheme. We were using EPROM programmers to read and write code and me and a mate decided to lift the ROM from the BBC and bung it in the reader to see what would happen. We noticed the names in its HIMEM portion. I dont know if this was accessible with a POKE or whatever BBC BASIC used but I remember we got a proper bo###cking for 'deliberate mis-use' of equipment lol, well, I was only 16 at the time ha ha

  • @TotenBRx
    @TotenBRx 4 роки тому +2

    Library of Babel before Library of Babel

  • @chadcunnington7152
    @chadcunnington7152 4 роки тому +2

    It was definitely much easier to seed the Random Number Generator on the original classic TRS-80 Computers (Model 1 - 4), you could simply type the command, "RANDOM", and all the work was done for you
    It was a little bit more involved on the TRS-80 Color Computer, and was achieved using the inbuilt timer module, (which was a constantly changing value), and then seed the RAM against that, and, you could set this, in two very different ways
    The first was very similar to the Commodore command, as it required a negative number, and was X=RND(-TIMER)
    The second way, was by using a POKE, to seed the RND command against the Timer module, and was POKE 280, PEEK(275)
    By typing in PEEK(275) on it's own, you can see the current value of the Timer module, which is a constantly changing number, between 0 - 255, before it resets back to zero

  • @michaelstoliker971
    @michaelstoliker971 Рік тому +2

    Hi Robin, I finally subscribed to your channel as I'm adding Commodores to my collection. I saw your number of subscribers sitting at 49.9K and hoped y single subscription would push you to 50K...no such luck.

    • @8_Bit
      @8_Bit  Рік тому +1

      Thank you, looks like 17 more are needed!

  • @djosearth3618
    @djosearth3618 4 роки тому

    4:11 "(Credit for discovering this Easter egg is due to the late *F. Jacques Beurrechamp,* whose rough notes were _obtained_ from the archives of the Trammel Memorial Library in West Chester, PA and summarized by the present author.)" -Tristan Miller

  • @UberAlphaSirus
    @UberAlphaSirus 3 роки тому +1

    When you showed the easter egg program, I thought to myself, this is a monkeys and typewriter thing.

  • @mark12358
    @mark12358 4 роки тому +5

    Really a top 8-bit channel, if not "the". Great job! cheers, M

  • @kiltworm
    @kiltworm 4 роки тому +1

    Do you know why the default colours in a C64 were blue on blue? From a readability standpoint it doesn’t seem optimal. Although it feels great to see the old C64 again.

    • @jpcompton
      @jpcompton 4 роки тому +2

      The Atari 8-bit series (first released in 1979) used the blue-on-blue first and it seems like a deliberate choice by Commodore to clone that look in the C64. But you're right that on blurry, interference-prone RF output it really wasn't the best move for either platform. (One may wonder if it was a stealth effort to prod buyers into picking up a dedicated monitor as well, and that's a legitimate possibility.)

  • @nzwedjat
    @nzwedjat 4 роки тому +1

    I ran the Bill Gates one up on a new Retrogames C64 Maxi and it almost runs properly, you get a bunch of randomish characters and then GATES SUCKS or RULES, looks like the emulators implementation of the random number generator is different enough to mess with things, interesting though.

  • @alanva73
    @alanva73 4 роки тому +1

    I seem to recall an easter egg in the coco3 where if you held a certain key combo while pressing the reset it would display a picture of the Microsoft team.

    • @BaarBear
      @BaarBear 4 роки тому +1

      That was on the "CoCo 3" as I re call. Hold down the "ctrl" and "alt" keys while pressing the "reset" buttonto get a picture of "The Thre e Mugateers" as they were called.

  • @TheRetrospective
    @TheRetrospective 4 роки тому +2

    Thanks 8BS&T, I enjoy your videos tremendously. 👏🏻👍 I'll soon try reminiscing my old assembly skills too... 🤪

  • @4lpha0ne
    @4lpha0ne 6 місяців тому

    Nice one! I remember the 8-bit guy reporting about an easter egg in MS BASIC in the C64 ROM.

    • @4lpha0ne
      @4lpha0ne 6 місяців тому

      Thx for the

  • @smug8567
    @smug8567 4 роки тому +1

    I must have picked the wrong day to quit sniffing glue.

  • @alakani
    @alakani 4 роки тому +1

    Aww that CoCo! I used to have one that I picked up at a thrift store when I was a teenager. One day it disappeared and I asked my mom, and she tried to convince me that it never existed, lol. I would have went completely insane except luckily a friend was with me when I got the thing. My mom was great.

    • @8_Bit
      @8_Bit  4 роки тому +1

      That is a very strange story :) Do you think she threw it out or sold it or something?

    • @SimonQuigley
      @SimonQuigley 4 роки тому

      frinkiac.com/meme/S08E20/719684.jpg?b64lines=IFJFTUVNQkVSIFRIRSBUSU1FIEhFIEFURQogTVkgR09MREZJU0ggQU5EIFlPVSBMSUVECiBUTyBNRSBBTkQgU0FJRCBJIE5FVkVSCiBIQUQgQU5ZIEdPTERGSVNIPyBCVVQKIFdIWSdEIEkgSEFWRSBUSEUgQk9XTCwKIEJBUlQ_

    • @chadcunnington7152
      @chadcunnington7152 4 роки тому +1

      I had 7 of them, and my wife coerced me to get rid of them after we got married
      We are no longer together, btw

  • @seanrodgers1839
    @seanrodgers1839 4 місяці тому

    I had never even heard of Microsoft in the early 80s+, high school year. The VIC-20 and C-64 were great computers. I used to write machine code to go fast. It was so much faster, you have time before you get your driver's license.

  • @billkeithchannel
    @billkeithchannel 4 роки тому +2

    I own a C128 and never knew about that sys-egg.

  • @Hirpina81
    @Hirpina81 4 роки тому +1

    Thank you for the videos abou C64 Easter Eggs, they're amazing! I really am not an expert: I was a little child when a Commodre 64 appeared at home, and we have been using it for ages, above all for videogames. Once I tried to copy some program lines, from amagazine or a manual, to create a sound, and you can imagine a little girl what could do (the best things had been: I discovered colors, shapes, how change fonts from big to small, how to draw with them). But once we recieved this weird "not an egg" message. Just once. I am Italian and that time we did not know anything about Easter Eggs. So, when we read this message, we translated it literally, and we were really perplexed. What was this egg about? The sentence was lacking of too many parts to translate it properly, so we thought we got a bad gate or almost broke something; we knew pretty well how C64 worked when it got crazy, with all those @s and #'s; this time it gave us a proper sentence, but we still found it weird. It should be "Sorry, there are not hidden surprises here; please, try elsewhere". I think we could get it only with this super-long sentence. You made me remind of this singular and unique episode. - I also want to thank you about the Easter Eggs on vinyl discs: I noticed there were these weird handcarvings on brand new records, and I was really puzzled. Now, finally, I got why. And I could recognise the digital sound of Commodore 64 programs, as, once (again, only one time) I tried to listen a C64 videogame cassette on a common cassette recorder. I could hear it again! Thank you :-)

  • @CleberMag
    @CleberMag 4 роки тому +3

    :D , nice video! I remember that in the past, I and my friends put an easter egg in a tachograph build here in Brasil. But no one finds this. The Tachograph is SV-2001, built in 2001 from Seva Engenharia. I Don't remember the right version that applies.

    • @8_Bit
      @8_Bit  4 роки тому +3

      Do you remember what the easter egg did? I love these kind of secrets :)

    • @CleberMag
      @CleberMag 4 роки тому +2

      ​@@8_Bit , it prints all the staff names in diagram tape. Normally, it prints the graphic of velocity in a time period. But to get this, it's necessary to set up his velocity limit (normally used to alarm the driver that he is too fast) for one that I don't remember and press UP button for a long period.

    • @8_Bit
      @8_Bit  4 роки тому +1

      Very cool! :)

  • @troycowell7381
    @troycowell7381 4 роки тому +1

    I wonder, maybe the "Not an egg" comment was supposed to follow "Bill Gates Sucks" ? Perhaps to say "Bills Gates Sucks - Not an egg" ?? An attempt to "get that dig in" just a bit more, without being TOO Graphic about it?

  • @ianjuby
    @ianjuby 4 роки тому +6

    enjoyable as always! btw - Commodore 16?!?!??? I don't recall ever hearing of that before

    • @8_Bit
      @8_Bit  4 роки тому +8

      It was part of the ill-fated 264 series from Commodore. The C16 is the little brother to the Plus/4; both machines did very poorly as they were inferior to the C64 in many ways despite being released afterwards. en.wikipedia.org/wiki/Commodore_16

    • @jpcompton
      @jpcompton 4 роки тому +4

      @@8_Bit Stop talking about them! TED chips are frying left and right from all the explanation!

    • @geekwithsocialskills
      @geekwithsocialskills 4 роки тому +1

      @@8_Bit I recently upgraded my C16 to 64k memory, so now it runs all the Plus/4 software that requires 64k. Super easy modifcation to do.

    • @Blue_Noah
      @Blue_Noah 4 роки тому

      @@8_Bit I got a fully functional C16 some years ago =)

    • @AaronOfMpls
      @AaronOfMpls 4 роки тому

      @Ian Juby The 8-Bit Guy did an episode about the TED machines (C16, 116, Plus/4) in his Commodore History series: ua-cam.com/video/ICiZbUypMlQ/v-deo.html

  • @272zub
    @272zub 4 роки тому +1

    You always generate a string of the same length as the string you are searching for. Only then you compare them. But if any of the generated character is not what you want, all subsequent generating is just eating cpu time.
    I can't test that now, but I think optimizing that (and thus pruning the search space earlier) would bring a big improvement, especially for long words.

    • @8_Bit
      @8_Bit  4 роки тому

      Yes, I think that would be faster. Good suggestion.

    • @8bittimes
      @8bittimes 4 роки тому

      Beat me to this comment.... 😉

  • @Lion_McLionhead
    @Lion_McLionhead 4 роки тому

    Brought back memories of how unrandom the random number generator was. Games using random numbers were really frustrating.

  • @cigmorfil4101
    @cigmorfil4101 4 роки тому

    RND(0) uses TI as the seed.
    [Early] Pseudo random number generators were sequence generating functions which took the last random number as the initial value for the function to create the next pseudo random number which was then plugged back in to get the next, and so on.
    Seeding via a negative number just set the last pseudo random number to that value.
    Seeding via zero sets the last pseudo random number to a value based on TI (if not just TI itself).
    In a quick loop TI will not change much and the result is that the seeds are very close in value. The RND function possibly gives little weight to the lower bits of the seed, resulting in the clumping effect if you see. Also, "fixing" the sequence produced to generate the first 21 letters of the alphabet into words probably messed up the "randomness" of the function meaning that close seed values result in clumping - converted to letters possibly gave double letters.
    RND(0) is best used when there is an external random event to seed the function, and then not used again until the next external random event to reseed the function.
    The easiest external random event is the user pressing a key (the Applesoft deliberately (rapidly) incremented its random number seed pair whenever the GET command was used to get a character from the user, thus randomly disturbing the random number sequence).

  • @allenhuffman
    @allenhuffman 4 роки тому +3

    Fantastic. I shouldn’t have shared this with my Color Computer friends... I would have loved to have tried this trick ;)

    • @trizedlyza
      @trizedlyza 4 роки тому

      Love the CoCo and Rainbow reference. Found an archive of all the Rainbows and am really tempted to recycle the real mags at my parents house but just can't part with the bit of childhood.

  • @johng.1703
    @johng.1703 9 місяців тому

    on the commodore you can actually get it to print just about any message you like

  • @Renville80
    @Renville80 Рік тому

    While typing in the program on an emulator for the first time in years, I found it interesting that I was instinctively using the keyboard shortcuts while typing in the program (? instead of PRINT, g,o, shifted-S for GOSUB, etc.) after all these years! Almost like riding a bike - you never truly forget!

  • @MakersEase
    @MakersEase 4 роки тому +1

    This is funny... I had a C128 when I was a kid. UA-cam videos are listened to mostly while I am driving to and from work.. (so they only get half listened to...) My mind was wondering and I was thinking that I don't remember rnd being really random.. Wait - did someone find random sequences for the text they wanted?... Wait - did someone do a prank? Then I listened more intently and found out I was right! Great job!

  • @Wenlocktvdx
    @Wenlocktvdx 4 роки тому +1

    On the CoCo we used a=rnd(-timer) to seed the random number generator.

    • @Pandamad
      @Pandamad 4 роки тому

      You can do something similar on the C64 using the "ti" (time) variable. It's still not completely random.
      www.c64-wiki.com/wiki/TIME

  • @crazyknarf
    @crazyknarf 3 роки тому

    Thanks for bringing back my childhood. My very first computer was the Commodore 16.

  • @indyshadow18lg
    @indyshadow18lg 4 роки тому

    Wow. Funny how there is still interest in these old computers. I remember Rainbow magazine! Now I’m inspired to dig out my TRS-80 Color Computer! My daughter had been begging me to show her the old TRS-80 and the BASIC programs I wrote back in the day! Guess it’s time to pull it out and plug it in! 😉

  • @andlabs
    @andlabs 4 роки тому +4

    The RNG has changed over time; I immediately suspected it was not an egg and opened up VICE to test it on its PET 2001 mode with BASIC 1 and it does not work with those numbers at all. Now I'm wondering what range of machines have the same RNG... (Maybe even on non-Commodore machines, but I would need to set those up.)
    EDIT: it works on the VIC-20, Plus/4, and the C128 in 128 mode. It does not work on BASIC 4 on either the CBM-II or the CBM-II-5x0, but the output on both of these was the same as the one on the PET BASIC 1, so maybe there are only two RNGs on the Commodore machines?
    VICE doesn't have a C65 emulator, so I can't check there. I forget if the TI-99/4A has Microsoft BASIC or not (but trying to use MAME's TI-99/4A emulation frustrates me to no end). I don't know if the ZX Spectrum uses Microsoft BASIC or not.
    And for the heck of it, I tried it on MSX-BASIC 4.0 on an emulated Panasonic FS-A1ST (since that's the configuration I had set up in OpenMSX Catapult at the time). It also doesn't work there (and produces an entirely different output than any of the Commodore machines). (Catapult provides a GUI frontend that allows me to, among other things, paste large blocks of text into the emulator, so I didn't need to type everything out multiple times =P )

    • @anderszapac
      @anderszapac 4 роки тому

      I was about to do the same, but you beat me to it. For that matter, neither TI-99/4A, ZX Spectrum nor Atari 8-bit computers have a Microsoft BASIC variant, but many others do. I'd check e.g. the TRS-80 CoCo in Robin's video, possibly Oric-1 and some more, perhaps Apple II which initially came with Apple's own Integer BASIC but later was shipped with Microsoft.

    • @anderszapac
      @anderszapac 4 роки тому +2

      Some more results from emulation on the "Bill Gates sucks" test program:
      MSX BASIC 1.0
      UUJFDRIARCLBEIFJJCBELOGRDCOB
      HUSKULGTENCNTGRBA
      NKULNROECESMAMBHDSHQF
      Both Apple II and Oric Atmos (exact same output!)
      SJ
      FUNGFBPPIAFIQPNRDPT
      MISDCJKSLCSLS
      CBM BASIC 2.0/4.0/8296 as indicated above:
      LNDJIGOBQLQOATMUNNHSQCCNAFSLGBJCUGFLCTJDOMBGGGKJJPGE
      NB
      DSCJGCHFLIBTJPUNHMMUNU
      VTech Laser 500/700 (also running Microsoft BASIC)
      HIMCUSAPLMGO
      AQNUDHSJEKAGD
      LA
      For that matter, BASIC V2 in the VIC-20 and C64 supposedly is BASIC V4 but stripped down, removing the disk handling commands rather than reusing the old PET version V2. Since the RNG is different, there must be more changes to it.

    • @8_Bit
      @8_Bit  4 роки тому +1

      Nice research! Very interesting.

    • @anderszapac
      @anderszapac 4 роки тому

      On running your second program finding strings, I found that on the Oric Atmos (and thus most likely Apple II series), you will find "AN" at 22399, 31391, 40928, 41302, 42917 etc. The Oricutron emulator can run up to 64 MHz but I'm afraid it would take a lot of time to find longer strings. Perhaps there is a scripted Apple II environment similar to the Commodore BASIC environment you mentioned.

    • @acmenipponair
      @acmenipponair 4 роки тому

      Anders, you are wrong: Basic 4 was an enhanced version of Basic 2. It was with Basic 3.5 and the C116, that Commodore first time at all after the PET 2001 were making a newer CBM Basic form, after they had acknowledged, that changing their Basic would not result in another license fee for Bill Gates.
      I would say, the reason why it don't work in the Basic 4 Versions - as the computers where Basic 4 was used with the Commodore CMD 4000 series - and that series don't have a SID chip ;)

  • @TheUtuber999
    @TheUtuber999 Рік тому

    10:50 Thanks for the tip on using cbmbasic. I did a quick comparison and found that it runs about 5000 times faster than a C64, or about 500 times faster than using Vice in Warp Mode...
    Vice:
    10 t=ti
    20 forx=1to1e5:next
    30 printint((ti-t)/60)"seconds"
    ready.
    run
    117 seconds
    cbmbasic:
    10 T=TI
    20 FORX=1TO1E9/2:NEXT
    30 PRINTINT((TI-T)/60)"SECONDS"
    READY.
    RUN
    114 SECONDS
    READY.
    ?1E9/2/1E5
    5000

  • @tribemaster101
    @tribemaster101 4 роки тому +2

    "Bill Gates Sucks" LOL

  • @zaphod77
    @zaphod77 3 роки тому

    Actually that MS easter egg was a copyright trap.
    The fact that that command produces the output proves it's MS code, even though the poweron screen doesn't mention microsoft. The Xevious name trick is another such copyright trap, and caught many people with bootleg games back in the day. Even if the company name and copyright were modified, if you did the trick it printed DEAD COPY MAKING copy under NAMCO program (if it was the original rom it would print NAMCO ORIGINAL program by EVEZOO).

  • @Renville80
    @Renville80 Рік тому

    I remember reading that to seed the random number generator with an unique value every time, use -TI as the seed value.

    • @gordontaylor2815
      @gordontaylor2815 5 місяців тому

      Computers by their nature simply can't generate "true randomness" without an outside source for it. Using the time TI value was simply a quick and dirty way to constantly change the seed for the RNG.

  • @WarrenPostma
    @WarrenPostma 4 роки тому +2

    That was fun. It's been a long time since I wrote RND(-TI) in a program. In Pascal on my x86 dos box, that RND(-TI) invocation changed to Randomize() which did a timestamp based init as well.

    • @cigmorfil4101
      @cigmorfil4101 4 роки тому

      Somewhere in the back of my mind I have that, RND(-TI) = RND(0)

  • @HighestRank
    @HighestRank 4 роки тому

    Random access text editing functions from within the screen buffering? That IS the shit.

    • @8_Bit
      @8_Bit  4 роки тому

      I didn't realize how spoiled I was with Commodore's screen editor until I started using *nix, AmigaDOS, MS-DOS etc. in the late '80s and early '90s.

  • @RandolfRichardson
    @RandolfRichardson 3 роки тому

    Compiling that with PetSpeed and then running in the VICE x64 emulator with Warp mode enabled will make your search algorithm run dramatically faster. (Thanks for a great video, as this brought back plenty of fond childhood memories for me.)

  • @Games-bw5ee
    @Games-bw5ee 3 роки тому +1

    Nowadays, Microsoft's 'Easter Eggs' come in the form of forced mandatory System Updates that break your computer. _"What are they like, ay?"_

  • @aaronmicalowe
    @aaronmicalowe 4 роки тому

    I wonder if the reason why some random numbers are similar is because there was a trigonometric element to their generation. Imagine a sine wave and as it peaks and troughs the values are changing the least.

  • @andrewenglish3810
    @andrewenglish3810 4 роки тому

    Easy Script for the C64, though not made by Microsoft had an Easter egg in it. When you pressed a series of keys it would play the song that Bill Gate got the Altar to play back in the day, I think that might have been his first actual computer program. :)

    • @8_Bit
      @8_Bit  4 роки тому

      Interesting! Do you know what keys need to be pressed? I haven't found that information online with a bit searching...

  • @charlesbaldo
    @charlesbaldo 4 роки тому

    Jim Butterfield who wrote and taught plenty of Commodore software caught these eater eggs, I would not doubt if he wrote the revenge Easter egg

  • @chunk1978
    @chunk1978 4 роки тому +1

    You're C64-C looks to be in pristine condition! Retro brighted, maybe? Anyway, I miss my old C64-C and all my disks that were lost many years ago. *sigh*

    • @8_Bit
      @8_Bit  4 роки тому

      Thanks! I haven't retro-brighted any of my machines. Some of them like this 64C and the VIC-20 I've shown in other videos look great still. Other machines, especially my C-128 computers, do NOT look so good.

  • @TheAtariCreep
    @TheAtariCreep 4 роки тому +5

    WOW that's some interesting stuff!

  • @nullplan01
    @nullplan01 4 роки тому

    As I recall, the RNG seed for this algorithm was only 16 bits, right? So it can only produce 65536 different sequences. You are using base-22 digits to display a string. log(65536)/log(22) =~ 3.5, so you can find all 3 letter strings, most 4 letter strings, and then it tapers off.

  • @AZTechLabs
    @AZTechLabs 3 роки тому

    you just discovered supreme RND seed compression.

  • @CommodoreComputerMuseum
    @CommodoreComputerMuseum 4 роки тому +2

    Another very interesting video. your videos blow my mind very in depth. Keep them coming

    • @8_Bit
      @8_Bit  4 роки тому

      Thanks Bread Box! Make sure you ping me when you get that video about making a line in cassette adapter done, I'll share it on my channel community page.

  • @drsnova7313
    @drsnova7313 4 роки тому

    The first thing that came to my mind when starting the video was "what idiot back then would waste precious bytes for an easter egg message?" Apparently, I'm with Commodore on this one.

  • @halamkajohn
    @halamkajohn 4 роки тому

    Display x 4 spots or / 4 spots C64? SDGB from Europe for 50 dollars. Been 25 years since a Commodore has been built.

  • @AllanFolm
    @AllanFolm 3 роки тому

    I'm not sure this is a true easter egg. As I understand it, the RND function does not produce a true random number. The seed value determines the string of numbers, which is the same for each run. If you look long enough, you'll find a seed which produces a string of numbers which creates some apparent predetermined result. It's the equivalent of enough monkeys and enough typewriters will eventually produce a new Shakespeare.

  • @satan3959
    @satan3959 4 роки тому +2

    What would happen if you put in the killer poke on the PET emulator on VICE?

  • @JacGoudsmit
    @JacGoudsmit 4 роки тому

    I wonder if you can speed it up even further if you store each character of the string into an array of integers.
    Also I wonder if performance would change if you would remove the for-loop and just replace it with a goto-loop: start with 20 B=-1, then 100 A=RND(B) (B is already negative so no need to let BASIC negate the number), then do all the other stuff and at the end do 130 B=B-1:GOTO 100.

    • @Lord-Sméagol
      @Lord-Sméagol 4 роки тому +1

      FOR will be faster; the address of B, the STEP value in internal floating point format and the start of the loop body are all stored in the FOR control structure.
      B=B-1:GOTO 100 would need to be parsed EVERY TIME; the variable list will need to be searched for BOTH instances of B, the "-" would need to be scanned, the "1" will need to be converted from text to internal floating point format, GOTO 100 will need to find line 100, searching from the beginning of the program.

  • @Bowtie41
    @Bowtie41 4 роки тому

    So,like at 14:00,the values for "A" are just numbers leading to a word stored in memory,and if you knew a particular words value,you can just create any 3-word phrase?

    • @8_Bit
      @8_Bit  4 роки тому

      Almost, yes. Those numbers are like the "address" in the random number sequence. It isn't actually stored in memory, but the same sequence can be generated over and over. Because Commodore BASIC doesn't have a true infinite sequence of random numbers, not all words can be found in it, but many short words can be found through brute force. In my little joke at the end of the video, I couldn't find the full word "SUBSCRIBE" but I did find "SUBS" and "CRIBE" :) The same principle has been used for a long time; for example, the Atari 2600 classics Pitfall! and River Raid generated their large worlds in similar fashion, since they otherwise could never fit in a small 4K ROM.

  • @AiOinc1
    @AiOinc1 4 роки тому +1

    WAIT 6502 right? It's because Commodore got a an absolute STEAL on prices for Microsoft BASIC at the time - One time payment and they got to use it for years.
    It's also why Commodore BASIC sucked for a very long time.

  • @jack002tuber
    @jack002tuber 4 роки тому +3

    An excellent demo of how psudorandoms work. I've never seen that done before

  • @geekwithsocialskills
    @geekwithsocialskills 4 роки тому

    Very cool! I love these EasterEggs. I was unaware of the C16 one, so thanks for sharing that!

  • @n2kmasteroriginal
    @n2kmasteroriginal 4 роки тому

    I had the TRS-80 and never even noticed it was a Microsoft thing....nor knew about that easter egg. I never seen that PET model, I ended up getting the CBM Pet

    • @n2kmasteroriginal
      @n2kmasteroriginal 4 роки тому +1

      However checking out the BASIC coding you got on the screen (I'm a GW-Basic and Qbasic-er) and now im curious if that coding would show me any sort of easter eggs in those versions of basic

  • @Melds
    @Melds 4 роки тому

    It'd be fun to build a table of matches for a quick lookup of other phrases. Pretty clever trick.

  • @Magisktification
    @Magisktification 2 роки тому +2

    What a bunch of hippies! 😂😂😂

  • @DiskWizard001
    @DiskWizard001 4 роки тому +1

    Good job ! Very interesting ! Thank you. I'm long time Sinclair 128K user and yes, it remainds me of "pseudo randoming" RANDOMIZE USR 15616 - TR-DOS call :)

  • @adagas-caouchristian7875
    @adagas-caouchristian7875 4 роки тому +1

    Super cool video! Very informative and entertaining. Thank you.

  • @DaleDix
    @DaleDix 8 місяців тому

    And bill never stopped with the bugs lol

  • @bluepill8077
    @bluepill8077 2 роки тому

    I saw this message in windows as well years ago, win 95 maybe?
    I did it myself, the process was something like you go into MS word, select the font DINGBATS, type out a string of nonsense letters and symbols, then highlight the text and convert it to a normal font, and the text would then read, Bill Gates sucks 😆

  • @kelpkelp5252
    @kelpkelp5252 4 роки тому

    This is, quite frankly, astonishing.

  • @byteforever7829
    @byteforever7829 2 роки тому

    just typed it in my c64c and it worked, thats brilliant

  • @BitcoinJake09
    @BitcoinJake09 4 роки тому +2

    I'm a simple man.
    I see BASIC CODE & I click.

    • @DamianYerrick
      @DamianYerrick 4 роки тому +1

      Incidentally, if you change the RNG to SHA256, and instead of searching for a word you instead search for a given number of spaces at the start, this is exactly how Bitcoin mining works.

  • @stargazer7644
    @stargazer7644 13 днів тому

    These aren't easter eggs. This is like finding your phone number in the output of pi. I guarantee it is in there.

  • @teleradiomarvel
    @teleradiomarvel 4 роки тому +2

    it's Halloween non the April's Fool day

  • @MetalGearHazumu
    @MetalGearHazumu 4 роки тому +6

    You had me at 'CLICK SUBSC RIBE'

  • @Spherey
    @Spherey 4 роки тому +2

    bill gates is not happy

  • @doktor6495
    @doktor6495 4 роки тому +1

    My favorite easter egg is definitely 4:48 :-) Greetings, Doc64!

  • @pleromicpastry5445
    @pleromicpastry5445 4 роки тому +1

    You have such pillowy bear paws. XD

  • @steelbrotherhoodof2359
    @steelbrotherhoodof2359 2 роки тому

    is this the math coproccesor floating point thingy... ??? i thought that was merely for cosmetic.

  • @csbruce
    @csbruce 4 роки тому +2

    0:01 Wow, 243k views on the previous video! If you want another big video, you can just find another intersection point between 8-bit computers and other retro-tech.
    1:17 I think the VT-100 terminal had a Blink attribute back in the 1970s, escape sequence « ^[[5m ». 'xterm' still supports this.
    1:30 A computer found an even-worse default color combination than the C64! Black on green with thin letters produces lots of blooming.
    2:48 It's hard to understand why they gave BASIC the WAIT command for any reason other than as a vector for this Easter egg. In the rare instances where you actually want to wait for a bit change in a hardware register in BASIC, you can easily do it with a PEEK in a loop. The ROM space for the WAIT statement could have been put to better use with some other statement or function.
    4:23 Didn't you previously promise to change the cursor color to white when showing C64 code?
    5:20 At this point in the video, I was reminded of the digits of pi. Pi's sequence of digits is infinitely long and effectively random, so if you search long enough, you'll eventually find a starting position that contains any secret message you want in any encoding method you want - all baked right into the fabric of the universe!
    7:08 Your string operations will be very slow. It'd be a lot faster to unroll the comparison loop and search for a specific sequence of integers:
    10 T=22
    20 FOR B=1 TO 1E9 : A=RND(-B)
    30 IF INT(RND(A)*T) = 1 THEN IF INT(RND(A)*T) = 14 THEN PRINT B : END
    40 NEXT
    7:21 The FOR statement is only parsed once, so removing spaces from it really doesn't impact speed.
    10:36 The VICE emulator on my desktop will only "Warp" to 10× speed, so a SuperCPU at 20-MHz would run the search even faster. I suppose I could break up the search space (interleave) and run a different X64 for each hardware thread my computer has.
    11:14 Mist64 would need to recreate the RND() function, floating-point operations, and round-off errors precisely to produce exactly the same random-number sequence as Commodore BASIC.
    12:25 An efficient positive number to give RND() is π.

    • @8_Bit
      @8_Bit  4 роки тому +1

      Thanks as always for all the comments. UA-cam still thinks you're a spammer, by the way :)
      Yes, I agree that WAIT is a strange command. It's of such limited utility. Really, the only advantage is that it's much faster than a PEEK loop which might occasionally be useful. I think I saw someone use it to do a raster split in BASIC which would otherwise be impossible.
      re: white cursor, I promised to do so whenever I remembered - and I didn't this time :(
      Very interesting idea about the unrolled comparison loop. If I ever find myself searching RND() again, I will try that! And thanks for the reminder again that I don't need to crunch the FOR statements. Old habits die hard.
      cbmbasic (part of Mist64) does exactly recreate all those elements of Commodore BASIC; I used it to find the SUBSC RIBE strings.

    • @rbrtck
      @rbrtck 2 роки тому +1

      Yes, using π is much faster than 1 or any other positive integer constant because those are parsed in a more general process, while π is a predefined constant. And for some reason, using . instead of 0 is also significantly faster. It's too bad that BASIC doesn't convert all constants to floating point ahead of time like how it tokenizes the keywords. If it did that and supported real integers, it would have been a comparative speed demon.
      By the way, calling RND(0) or RND(.) is a lot faster than calling RND(1) or RND(π). This doesn't mean you should do it, however. It's just an observation.

  • @eformance
    @eformance 4 роки тому

    The C64 RNG is just a linear feedback shift register, right? So then you just need to feed it a seed that, when shifted, results in the desired byte sequence.

  • @cigmorfil4101
    @cigmorfil4101 4 роки тому

    "The PET Revealed" (second edition 1980) lists the ROM routines of the old (2000 series PETs) and new (3000 series PETs [with the proper keyboards and no internal cassette dtive). For the new ROM it lists:
    D745-D76D Microsoft joke
    The length of the perform WAIT code is given as the same for each (1B bytes); so either the jump is there or some pre-perform code does the jump.
    (Interesting change of terminology over about 40 years.)

  • @ideegeniali
    @ideegeniali 2 роки тому

    Wouldn't B% be faster than B in the for loop as well?

  • @frozenlake1215
    @frozenlake1215 4 роки тому +1

    Not quite a middle finger rendered in ASCII code but still pretty cool

  • @CommodoreComputerMuseum
    @CommodoreComputerMuseum Рік тому

    another fasinating video Robin :)