Back to Home

35 years of the game "Donkey" Bill Gates

IBM PC · Donkey.bas · Basic · Donkey · MS-DOS · PC-DOS · Bill Gates

35 years of the game "Donkey" Bill Gates

    35 years ago, in August 1981, the first IBM PC model went on sale (pictured left) - the first mass personal computer company from IBM, with the PC-DOS 1.0 (MS-DOS) operating system and the BASIC interpreter.

    Apple watched the IBM experiment with curiosity and even greeted colleagues with a large advertisement in the Wall Street Journal under the heading “Welcome, IBM. Seriously". Although Steve Jobs in those days saved every cent, but still allowed employees to buy one copy of IBM PC and study its contents .

    The employees were not too impressed with the hardware of the IBM PC: it was clearly inferior to the expertly designed electronics of Steve Wozniak. The software was even worse: Microsoft's MS-DOS operating system was a clone of the old CP / M operating system, and even the demo programs were rude.

    Particularly bewildered by Apple employees was the strange Donkey game (Donkey) written in BASIC.



    In this rather ridiculous low-resolution game, the player controls a racing car on a poorly drawn road that scrolls jerkily down. By pressing the spacebar, the car jerks into the adjacent lane (in fact, any key is triggered, not only the spacebar).

    From time to time a gray spot appears on the road, which symbolizes a burro. The fact that the spot is a donkey was indicated by a record with an account on the screen - Driver: 0, Donkey: 2. If you do not press the space bar in time, the car crashes into a donkey, and the counter increases by one.

    You can now play this game on the emulator of the original IBM PC Model 5150 ROM BIOS with a 4.77 MHz processor, 64 KB RAM, a CGA display and PC-DOS 1.0 operating system.

    The game was terrible, but for the sake of interest, Apple employees found its BASIC source code to see how it was written. This source code was recently posted on Github .

    Source code donkey.bas (131 lines)
    940 REM The IBM Personal Computer Donkey
    950 REM Version 1.10 (C)Copyright IBM Corp 1981, 1982
    960 REM Licensed Material - Program Property of IBM
    975 DEF SEG: POKE 106,0
    980 SAMPLES$="NO"
    990 GOTO 1010
    1000 SAMPLES$="YES"
    1010 KEY OFF:SCREEN 0,1:COLOR 15,0,0:WIDTH 40:CLS:LOCATE 5,19:PRINT "IBM"
    1020 LOCATE 7,12,0:PRINT "Personal Computer"
    1030 COLOR 10,0:LOCATE 10,9,0:PRINT CHR$(213)+STRING$(21,205)+CHR$(184)
    1040 LOCATE 11,9,0:PRINT CHR$(179)+"       DONKEY        "+CHR$(179)
    1050 LOCATE 12,9,0:PRINT CHR$(179)+STRING$(21,32)+CHR$(179)
    1060 LOCATE 13,9,0:PRINT CHR$(179)+"    Version 1.1O     "+CHR$(179)
    1070 LOCATE 14,9,0:PRINT CHR$(212)+STRING$(21,205)+CHR$(190)
    1080 COLOR 15,0:LOCATE 17,4,0:PRINT "(C) Copyright IBM Corp 1981, 1982"
    1090 COLOR 14,0:LOCATE 23,7,0:PRINT "Press space bar to continue"
    1100 IF INKEY$<>"" THEN GOTO 1100
    1110 CMD$ = INKEY$
    1120 IF CMD$ = "" THEN GOTO 1110
    1130 IF CMD$ = CHR$(27) THEN GOTO 1298
    1140 IF CMD$ = " " THEN GOTO 1160
    1150 GOTO 1110
    1160 DEF SEG=0
    1170 IF (PEEK(&H410) AND &H30)<>&H30 THEN DEF SEG:GOTO 1291
    1180 WIDTH 80:CLS:LOCATE 3,1
    1190 PRINT "HOLD IT!"
    1200 PRINT "YOU'RE NOT USING THE COLOR/GRAPHICS MONITOR ADAPTER!"
    1210 PRINT "THIS PROGRAM USES GRAPHICS AND REQUIRES THAT ADAPTER."
    1220 PRINT "PRESS THE SPACE BAR TO CONTINUE."
    1230 DEF SEG
    1240 IF INKEY$<>"" THEN GOTO 1240
    1250 CMD$ = INKEY$
    1260 IF CMD$ = "" THEN GOTO 1250
    1270 IF CMD$ = CHR$(27) THEN GOTO 1298
    1280 IF CMD$ = " " THEN GOTO 1298
    1290 GOTO 1250
    1291 KEY OFF
    1292 ON ERROR GOTO 1295
    1293 PLAY "p16"
    1294 GOTO 1300
    1295 COLOR 31,0,0
    1296 PRINT "THIS PROGRAM REQUIRES ADVANCED BASIC -- USE COMMAND 'BASICA'":COLOR 15,0,0:FOR I=1 TO 9000:NEXT: RESUME 1298
    1298 ON ERROR GOTO 0
    1299 SCREEN 0,1:IF SAMPLES$="YES" THEN CHAIN"samples",1000 ELSE COLOR 7,0,0:CLS:END
    1300 REM
    1410 COLOR 0
    1420 DEFINT A-Y
    1440 SCREEN 1,0:COLOR 8,1
    1450 DIM Q%(500)
    1460 DIM D1%(150),D2%(150),C1%(200),C2%(200)
    1470 DIM DNK%(300)
    1480 GOSUB 1940
    1490 GOSUB 1780
    1500 CLS
    1510 DIM B%(300)
    1520 FOR I=2 TO 300:B%(I)=-16384+192:NEXT
    1530 B%(0)=2:B%(1)=193
    1540 REM
    1550 CX=110:CLS
    1590 LINE (0,0)-(305,199),,B
    1600 LINE (6,6)-(97,195),1,BF
    1610 LINE (183,6)-(305,195),1,BF
    1620 LOCATE 3,5:PRINT "Donkey"
    1630 LOCATE 3,29:PRINT "Driver"
    1631 LOCATE 19,25:PRINT"Press Space  ";
    1632 LOCATE 20,25:PRINT"Bar to switch";
    1633 LOCATE 21,25:PRINT"lanes        ";
    1635 LOCATE 23,25:PRINT"Press ESC    ";
    1636 LOCATE 24,25:PRINT"to exit      ";
    1640 FOR Y=4 TO 199 STEP 20:LINE(140,Y)-(140,Y+10):NEXT
    1650 CY=105:CX=105
    1660 LINE (100,0)-(100,199):LINE(180,0)-(180,199)
    1670 LOCATE 5,6:PRINT SD:LOCATE 5,31:PRINT SM
    1680 CY=CY-4:IF CY<60 THEN 2230
    1690 PUT (CX,CY),CAR%,PRESET
    1700 DX=105+42*INT(RND*2)
    1710 FOR Y=(RND*-4)*8 TO 124 STEP 6
    1720 SOUND 20000,1
    1730 A$=INKEY$:IF A$=CHR$(27) THEN 1298 ELSE POKE 106,0:IF LEN(A$)>0 THEN LINE (CX,CY)-(CX+28,CY+44),0,BF:CX=252-CX:PUT (CX,CY),CAR%,PRESET:SOUND 200,1
    1740 IF Y=>3 THEN PUT (DX,Y),DNK%,PSET
    1750 IF CX=DX AND Y+25>=CY THEN 2060
    1760 IF Y AND 3 THEN PUT (140,6),B%
    1770 NEXT:LINE (DX,124)-(DX+32,149),0,BF:GOTO 1670
    1780 CLS
    1790 DRAW "S8C3"
    1800 DRAW"BM12,1r3m+1,3d2R1ND2u1r2d4l2u1l1"
    1810 DRAW"d7R1nd2u2r3d6l3u2l1d3m-1,1l3"
    1820 DRAW"m-1,-1u3l1d2l3u6r3d2nd2r1u7l1d1l2"
    1830 DRAW"u4r2d1nd2R1U2"
    1840 DRAW"M+1,-3"
    1850 DRAW"BD10D2R3U2M-1,-1L1M-1,1"
    1860 DRAW"BD3D1R1U1L1BR2R1D1L1U1
    1870 DRAW"BD2BL2D1R1U1L1BR2R1D1L1U1
    1880 DRAW"BD2BL2D1R1U1L1BR2R1D1L1U1
    1890 LINE(0,0)-(40,60),,B
    1900 PAINT (1,1)
    1910 DIM CAR%(900)
    1920 GET(1,1)-(29,45),CAR%
    1930 RETURN
    1940 CLS
    1950 DRAW"S08"
    1960 DRAW "BM14,18"
    1970 DRAW"M+2,-4R8M+1,-1U1M+1,+1M+2,-1
    1980 DRAW"M-1,1M+1,3M-1,1M-1,-2M-1,2"
    1990 DRAW"D3L1U3M-1,1D2L1U2L3D2L1U2M-1,-1"
    2000 DRAW"D3L1U5M-2,3U1"
    2010 PAINT (21,14),3
    2020 PRESET (37,10):PRESET (40,10)
    2030 PRESET (37,11):PRESET (40,11)
    2040 GET (13,0)-(45,25),DNK%
    2050 RETURN
    2060 SD=SD+1:LOCATE 14,6:PRINT "BOOM!"
    2070 GET (DX,Y)-(DX+16,Y+25),D1%
    2080 D1X=DX:D1Y=Y:D2X=DX+17
    2090 GET (DX+17,Y)-(DX+31,Y+25),D2%
    2100 GET (CX,CY)-(CX+14,CY+44),C1%
    2110 GET (CX+15,CY)-(CX+28,CY+44),C2%
    2120 C1X=CX:C1Y=CY:C2X=CX+15
    2130 FOR P=6 TO 0 STEP -1:Z=1/(2^P):Z1=1-Z
    2140 PUT (C1X,C1Y),C1%:PUT(C2X,C1Y),C2%
    2150 PUT (D1X,D1Y),D1%:PUT(D2X,D1Y),D2%
    2160 C1X=CX*Z1:D1Y=Y*Z1:C2X=C2X+(291-C2X)*Z
    2170 D1X=DX*Z1:C1Y=C1Y+(155-C1Y)*Z:D2X=D2X+(294-D2X)*Z
    2180 PUT (C1X,C1Y),C1%:PUT(C2X,C1Y),C2%
    2190 PUT (D1X,D1Y),D1%:PUT(D2X,D1Y),D2%
    2200 SOUND 37+RND*200,4:NEXT
    2210 FOR Y=1 TO 2000:NEXT
    2220 CLS:GOTO 1540
    2230 SM=SM+1:LOCATE 7,25:PRINT "Donkey loses!"
    2240 FOR Y=1 TO 1000:NEXT
    2250 CLS:GOTO 1540

    They were surprised to find comments at the beginning of the program, where the authors of the game were indicated (the names of the authors were removed from the sources on Github): Bill Gates and Neil Konzen. Neil Konzen is a talented teenager, one of the first employees of Microsoft. He was later assigned to lead the development of the second version of Windows, after the failure of the first version. He also led the development of Microsoft programs for Mac.

    The most striking thing is that the co-author of the game was Bill Gates himself, co-founder of Microsoft, and that he expressed a desire to be noted in the comments on the code.

    Many years later, Bill Gates confirmed that he was involved in the development of this strange game. He spoke about this in 2001 in his speechat the TechEd conference dedicated to the 10th anniversary of Visual Basic - "the most effective and popular development tool."

    Bill Gates said he and his friend Neil Conzen wrote the game at four in the morning on an IBM PC prototype, locked together in a small room. IBM insisted that the prototype computer room was locked. This is how Donkey came in, “very addictive” for its time, Bill Gates said. She was supposed to demonstrate the capabilities of the language.

    With a good sense of humor, Bill Gates in 2001 introduced a new version of that iconic game made in 3D in the VB.NET programming language to show how Basic has changed over the past two decades.



    Game has been publishedMarch 21, 2003 on the official website of Microsoft. Now there is no web page, but the .exe file with the game is still on the Microsoft server .



    Donkey is a rare example of a real program for which the code was written by Bill Gates himself. He was then 25 years old.

    Read Next