back
144 comments
Nice job. The sound effects are a bit too advanced because early IBM computers shipped with pretty simple, magnetically driven dynamic speakers.

On a related note, I’ve actually spent the last four months working on a 100% faithful adaptation of both QBasic and QuickBasic 4.5 that runs entirely in the browser on a virtual CPU and hardware abstraction layer. It’s a love letter to everyone who learned to program on Microsoft’s BASIC interpreters in the ’80s and early ’90s.

The best compliment I’ve received so far is from friends who grew up in the same era I did: when I fullscreen the browser, a few of them assumed it was a virtual machine running the real thing.

A QBasic port of the original BASIC-based DONKEY.BAS was one of the first programs I got running in it:

https://mordenstar.com/share/qbasic-core-demos

You used to be able to do surprising things with those old speakers using a timer interrupt: on an IBM XT it was possible to get 8kHz quality out of it, enough to make 4-channel MOD playback sound about as good as hearing it over a phone.

But your more typical use case was to play a single tone for some significant fraction of a second.

At my first job, our entire order-entry and inventory management system was written in QBASIC. I wish I had the source to try it out with this.

I know someone who might, if we could figure out how to get it off a DOS 5.25" floppy!

And for the slightly younger folks who have more memories of Visual Basic than QBasic, check out GAMBAS: https://gambaswiki.org/website/en/main.html
> early IBM computers shipped with pretty simple, magnetically driven dynamic speakers

Yes the PC & donkey.bas were monophonic design, but the PCjr shipped with 3-channel polyphonic sound plus a noise generator. It might have been capable of doing the sounds in this port of donkey that took “some liberties”. ;)

I remember some sound demos on the PC that emulated polyphonic sound by fast/audible switching between notes in a chord. Hey it seemed cool at the time. :P I just looked and couldn’t find any quickly enough but bumped into examples of even better true polyphony on the PC achieved by assembly hacking.

Do non-magnetically driven speakers exist?
This is fantastic! As one of those kids who spent the early 90s in QBasic, thank you!
I once heard a digitized version of "Daisy Bell" (DAISY.COM) which sings through IBM PC speaker although of poor bitrate.
Amazing. This is nostalgia heroin for me.

How far does the HAL go? Screen 12 and 13, and writing directly to VRAM? WAIT for vsync? Call absolute for mouse usage?

aw neat I'd love to try doing this for its predecessor GWBASIC (my first programming language on the Tandy 1000EX)
It runs fairly well in dosbox in a browser though right? Why port directly?
How comes the modem panel is not “shader-ized” (scanlines + distortion)?
Nibbles!
Brings back memories of GORILLA.BAS! https://en.wikipedia.org/wiki/Gorillas_(video_game)
I was more of a Nibbles[0] person. I played it with other people on my XT-class laptop in high school.

[0] https://en.wikipedia.org/wiki/Nibbles_(video_game)

For those who don't know why GORILLA.BAS is so cool... Back in the day, computers were expensive and games weren't readily available. Sometimes a parent would buy a computer for word processing or spreadsheets or take kids to the office which also had business computers. Children were curious about the computers but there wasn't really anything fun to do with them besides banging on the keyboard...

...Until you found the BASIC dialect that came with MS-DOS, that is! GORILLA.BAS was bundled with DOS and was a fun little game you could play in those computers. It's not like you could access web games on the Internet - there was no Internet!

speaking of GORILLA.BAS I made a multiplayer browser room: https://franz101.github.io/gorilla
I remember hacking GORILLA.BAS code, which was on our office computers, to randomize gravity for my opponent, the result being they could not accurately predict where their bananas would go. I was an unbeatable legend for a while.
We used to do quick tests of PC builds with GORILLA.BAS. It was later replaced by the 'Doom test'.
GORILLA and NIBBLES!
GORILLA.BAS got me into programming decades ago. I made an (admittedly partially vibe coded) homage this year: https://gameswithtony.com/gorillas/
For anyone unfamiliar with DONKEY.BAS: it’s notable for having been co-written by Bill Gates. More info on its history bere: https://en.wikipedia.org/wiki/DONKEY.BAS
2nd, the wikipedia article has some fun stuff in it
Inspired by the 45th anniversary of the IBM PC, I got my slopmachine cracking on a port of DONKEY.BAS to work in a browser. Pretty happy with the result. As a young person I remember being fascinated that you could make a game like this with so little code.
> I got my slopmachine cracking on a port

For 131 lines?

The game theory is all wrong, this is a cooperative game, either they both win or both lose. I don't see how the Donkey getting hit by a car should be classified as "Donkey wins"
Related:

Happy 45th Birthday to the IBM PC and Model F/XT

https://news.ycombinator.com/item?id=49280103

Someone gave my grandfather a Games BASICA floppy that had this and other games on it. But this copy had a few games that had been "modified". I remember in DONKEY.BAS, it would curse at you if you hit the donkey. "YOU STUPID SONOFABITCH". We thought it was hilarious. My grandfather was less pleased. He took it away from us when he found out.
I once heard the rumor that DONKEY.BAS was the last piece of code Bill Gates wrote himself at Microsoft. I wonder if it's true.
It says something about what a thoughtful development environment these early BASICs were, that you could make a full simple little game like this in only 131 lines even though they're ostensibly far less powerful than modern languages. I'm not sure if you could even get an SDL window open and game loop running in 131 lines of (non-golfed) C.

Never mind how compact, beginner-friendly, and just plain fun they were to use. It's been said countless times but I'll say it again - we've lost something over the years.

This is what got me into programming. When I was a kid, I had a shitty 386 because my father got a computer second hand from a friend (we were poor). I was playing the game and then pressed a key and it took me to the basic editor. I was confused with what I saw and started changing things. I changed a number and the size of the explosion on the banana got bigger. My best friend at the time went to computer camp and explained to me that it was code. 30 years later I'm still programming.
my car keeps hitting the donkey when switching lanes even though I'm already well past it..
> 1296 PRINT "THIS PROGRAM REQUIRES ADVANCED BASIC -- USE COMMAND 'BASICA'":COLOR 15,0,0:FOR I=1 TO 9000:NEXT: RESUME 1298

TIL there is an “Advanced Basic”. I hope the naming was tongue in cheek.

On my machine, it is flickering like _crazy_, as if it's trying to shift back and forth between two resolutions.

OSX, Firefox, browser size 3326×2830 pixels. Only happens at or around that particular size - resizing the window fixes the issue.

My perceptron can play this game, I think

https://github.com/victorqribeiro/carGamePerceptron

A greyscale photo of a donkey appears if you lose badly enough. Surely that wasn't possible in basic with 16 colors??

EDIT: That must be the easter egg mentioned in the repo.

Is it an easter egg that I can move the donkey with A/D rather than move the car with Space?
Clearly this needs to be replicated as GTA minigame.
So simple, so cool, so much fun :-)
It turned out that Dino run has deep roots
I’m partial to Gorrila.bas
Surprisingly fun!
tangential: I still remember how disappointed I was in PCs being used to a C64 (which was released in 1982) The quality of the games & sound effects was just not on the same level (C64 being much more advanced)
Ahhh I never saw donkey.bas, and only saw the Microsoft one. You know, when that company cared about being part of the industry, as opposed to being the entire industry, and really want to be 5 other industries to, as they do now.

Gorillas.bas (it's more or less like worms, except with only 1 gorilla per team)

On the plus side: it was much prettier.