35 лет игре «Ослик» Билла Гейтса

    35 лет назад, в августе 1981 года в продажу вышла первая модель IBM PC (на фото слева) — первый массовый персональный компьютер фирмы IBM, с операционной системой PC-DOS 1.0 (MS-DOS) и интерпретатором BASIC.

    Компания Apple с любопытством наблюдала за экспериментом IBM и даже приветствовала коллег большим рекламным объявлением в газете Wall Street Journal под заголовком «Добро пожаловать, IBM. Серьёзно». Хотя Стив Джобс в те времена экономил каждый цент, но всё-таки разрешил сотрудникам купить один экземпляр IBM PС и изучить его содержимое.

    Сотрудников не слишком впечатлила аппаратная начинка IBM PC: она явно уступала мастерски сконструированной электронике Стива Возняка. С программным обеспечением дело обстояло ещё хуже: операционная система MS-DOS от Microsoft являлась клоном старой операционной системы CP/M, и даже демонстрационные программы были сделаны грубовато.

    Особенно недоумение сотрудников Apple вызвала странная игра Donkey («Ослик»), написанная на BASIC.



    В этой довольно нелепой игре с низким разрешением игрок управляет гоночным болидом на бедно отрисованной дороге, которая рывками прокручивается вниз. Нажатием пробела автомобиль дёргается в соседнюю полосу (на самом деле, срабатывает любая клавиша, не только пробел).

    Время от времени на дороге возникает серое пятно, которое символизирует собой ослика. На то, что пятно является осликом, указывала запись со счётом на экране — Водитель: 0, Ослик: 2. Если вовремя не нажать пробел, то машина врезается в ослика, и счётчик увеличивается на единицу.

    Сразиться в эту игру сейчас можно на эмуляторе оригинального IBM PC Model 5150 ROM BIOS с процессором 4,77 МГц, 64 КБ RAM, дисплеем CGA и операционной системой PC-DOS 1.0.

    Игра была ужасна, но сотрудники Apple ради интереса нашли её исходный код на языке BASIC, чтобы посмотреть, как именно она написана. Недавно этот исходный код был опубликован на Github.

    Исходный код donkey.bas (131 строчка)
    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

    С удивлением они обнаружили комментарии в начале программы, где были указаны авторы игры (из исходников на Github имена авторов убрали): Билл Гейтс и Нил Конзен (Neil Konzen). Нил Конзен — талантливый подросток, один из первых сотрудников компании Microsoft. Позже его назначили руководить разработкой второй версии Windows, после провала первой версии. Он также руководил разработкой программ Microsoft для Mac.

    Самое поразительное, что соавтором игры был сам Билл Гейтс, сооснователь компании Microsoft, и что он изъявил желание быть отмеченным в комментариях к коду.

    Спустя много лет Билл Гейтс подтвердил, что участвовал в разработке этой странной игры. Об этом он рассказал в 2001 году в своей речи на конференции TechEd, посвящённой 10-летнему юбилею Visual Basic — «самого эффективного и популярного средства разработки».

    Билл Гейтс сказал, что он со своим другом Нилом Конзеном написали игру в четыре часа утра на прототипе IBM PC, будучи запертыми вдвоём в маленькой комнате. Компания IBM настояла, что комната с прототипом компьютера была заперта на замок. Так появилась игра Donkey, «очень захватывающая» для своего времени, сказал Билл Гейтс. Она должна была демонстрировать возможности языка.

    Обладая хорошим чувством юмора, Билл Гейтс в 2001 году представил новую версию той культовой игры, сделанную в 3D на языке программирования VB.NET, чтобы показать, насколько изменился Basic за прошедшие два десятилетия.



    Игра была опубликована 21 марта 2003 года на официальном сайте Microsoft. Сейчас веб-страницы нет, но файл .exe с игрой по-прежнему лежит на сервере Microsoft.



    Игра Donkey — редкий пример настоящей программы, для которой код писал сам Билл Гейтс. Ему тогда было 25 лет.
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 51

      +7
      >> на бедно отрисованной дороге

      Идеальное же шоссе!
        +6
        Тоже не понял в чем наезд, для тех времен это была супер пупер графика. Она даже цветная была.
        0
        Эмулятор лажает — если увернуться от ослика, но вернуться после его проезда обратно — boom!
          +7
          >> Время от времени на дороге возникает коричневое пятно, которое символизирует собой ослика.
          Совсем не похоже на то, что показывает анимация.
            +19
            они даже не смотрят, что переводят, или не понимают что написано
            на видео абсолютно разборчивый ослик серого цвета!
              0
              Улыбающийся ослик!
            0
            игре с низким разрешением

            Хотя впечатление, что представленная в статье анимация — это текстовый режим, псевдографика, а не графика.
              0
              1210 PRINT "THIS PROGRAM USES GRAPHICS AND REQUIRES THAT ADAPTER."
              
                +5
                Не-не.

                «1440 SCREEN 1,0» — установка графического режима 320x200, ну и дальше всё рисуется при помощи DRAW, LINE PAINT etc (ОМГ, я это помню...)
                  +2
                  Какой-то хитрый DRAW, судя по строкам типа DRAW «BM12,1r3m+1,3d2R1ND2u1r2d4l2u1l1»
                  Я такого не видел (может это потому что мое знакомство с бейсиком ограничилось Speccy и БК1001)
                    0
                    Там не вертикальные палки перед цифрами, а буква L в нижнем регистре (двигатся влево без отрисовки). Не уверен насчёт lowercase, но всё остальное вполне соответствует рисованию в писишном бейсике.
                      +1
                      Популярная команда Draw со своим языком — указывается направление, толщина линий и количество пикселей.
                      Я совсем не помню в каком бейсике я этим пользовался, но это просто указывает как будет ходить рисующий поинтер по пикселям.

                      перейти на координаты 12,1
                      рисовать 3 пикселя вправо,
                      перейти на координаты +1, 3
                      рисовать 2 вниз, 1 вправо
                      запомнить место, рисовать 2 вниз, 1 вверх, 2 вправо, 4 вниз, 2 влево, 1 вверх, 1 влево и вернуться на запомненное место

                      Похоже на одно из колес машины
                  0
                  Ах, когда-то дешево купил на Митинском рынке весьма похожий ящик. Один флоп, один жесткий диск — странно! сделанный во Вьетнаме за 14 лет до моей покупки. Память 640 кб, но! панельки на плате были только под две линейки памяти, так что верхние 512 к были аккуратно напаяны вторым рядом. Плата — каноническая. Сказали что из Пентагона. И совсем родная клавиатура. Красота!
                    0
                    у меня досихпор такая клавиатура, только пришлось клавишу macro выковырнуть, у неё даже сканкода нет.
                      0
                      Ну как, хватало 640 килобайт-то?
                        0
                        радует что пока в клавиатуру не нужно 8Gb рама засовывать :)
                          0
                          Я «ошибся уровнем комментариев» (с) сообщество Хабра =)
                    0
                    Мило! Будучи на 10 лет моложе дядюшки Билла — написал на Бейские пару незамысловатых игрушек. Тогда в школе появились компы — ну и народ бросился ИГРАТЬ. Мне играть было скучно и жалко на игры машинного времени. Я бросился ПИСАТЬ.
                    Хотя наверное у каждого найдется что-то подобное в программистком детстве. Сейчас стало сложнее — посмотришь на творения Крайтека — и руки опускаются.
                      0
                      >на творения Крайтека
                      На Warface? :)
                        0
                        CryEngine V же.
                          0
                          Warface-ом занималось киевское отделение CryTek-а
                        0
                        https://commons.m.wikimedia.org/wiki/File:Elektronika-IM-23.jpg
                          –25
                          Сто пудов «игру» написал только школьник. Билагейц не написал ни одного оператора, но сидел рядом и нудел школьнику в ухо. Поэтому они закончилис в четыре утра. Иначе школьник написал бы это дерьмо максимум за час. Там просто писать совершенно нечего.
                            +13
                            О, специалист по программированию подтянулся.
                              +4
                              Это тот школьник и теперь у него детская травма на всю жизнь.
                              0
                              прально чё писать, зашёл бы в гугл накачал исходников…
                              ==
                              вы таки помните как писали программы в 81 году?
                                0
                                Да, помню. На Алголе первые свои программы писал на 1-м курсе. И от безделья игры на программируемом калькуляторе.
                                  0
                                  както странно ожидать аналога пакмана в указанных временых рамках за который вышепреведённый код был написан. И я бы поглядел на школьника в 81 году который писал игры после уроков (в тетрадке?)
                                    –2
                                    Речь не о сложности этой поделки, хотя для её написания на псевдоязыке Basic школьнику должно хватить 1-1.5 часов. Речь о том, что Билагейц там просто присутствовал, и максимум выступал в качестве «заказчика». Но никак не программиста.
                                      0
                                      Я думаю, в те годы Билл был вполне не против сам попрограммить, и уж Бейсик то он знал.

                                      Кроме того, стоит помнить, что школьнику никак не могло хватить 1-1.5 часов, потому что в те годы вряд ли в школах были компьютеры, во-вторых школьникам не преподавали программирование, да и свой компьютер могли себе позволить немногие.
                                        0
                                        на основании чего сделан такой вывод? (к слову БГ было тогда 26 лет)

                                        в 81 году этот, как вы выразились, «псевдоязык» считался вполне серьёзным языком программирования…

                                        И мне интересно, вы так легко отражаете знания нынешних школьников на реалии 81 года, когда компьютер стоил как автомобиль. это теперь можно взять любого школьника у которого информатика в расписании уроков есть и он вам нарисует такую игру… а тогда задача «взять и скоренько выучить простенький бейсик» подразумевала под собой доступ к компьютеру на котором этот бейсик можно было бы запустить и книжку по этому самому бейсику и было бы странно что среднестатистический школьник даже в США такой доступ запросто имел. и я уж молчу о элементарных знаниях программирования.

                                          –1
                                          Во-первых, Basic никогда не считался серьезным языком, и тем более в начале 80-х. Тогда это был вообще кошмар, а не язык, с обязательной нумерацией строк и безусловными переходами на строку с заданным номером. Ничего серьезного на этом угрёбище написать нельзя. Но это была любимая игрушка Билагейца, откопанная им в мусорном баке MIT. Если бы не лично он — Basic давно был бы на этой планете заслуженно забыт.
                                          Во-вторых, в 81-м домашние компьютеры стоили уже как велосипед. Небольшой экскурс в годы и цены: 1974 MITS Altair 8800 — $621, 1975 MOS Technology, Inc. KIM-1 — $245, 1977 Tandy Radio Shack TRS-80 — $599, 1978 Sinclair Mk14 — около $80, 1980 Sinclair ZX80 — около $200, 1981 Sinclair ZX81 — около $100, 1981 Commodore VIC-20 — менее $299. Последний был продан в количестве более миллиона штук. на всех этих компьютерах можно было программировать, в том числе и на Basic. И да — они были ОЧЕНЬ популярны у американской школоты.
                                          В-третьих, в 81-м в американских Secondary и Postsecondary школах было НАВАЛОМ более дорогих компьютеров Apple II (выпуск с 1977 года) и Commodore PET (выпуск с тоже с 1977 года), на которых школьники с конца 70-х вовсю изучали программирование. А в некоторых школах были и более серьезные машины типа PDP-11 с многозадачными ОС DEC RT-11TS и Ultrix.
                                            +1
                                            Отмечу что «как велосипед» они не стоили, доллар 81 года и доллар 2016 это совершенно разные деньги (посмотрите например на среднюю зарплату в 81 году)

                                            А может вы серьёзным языком считаете Паскаль? который от бейсика отличался разве что заумными конструкциями для объявления переменных и чудным оператором присваивания…
                                            А может вы забыли QuickBasic в те времена он не успел ещё выродиться в интерпретатор и был полноценным компилируемым языком
                                            Почему все кому не лень пихали бейсик в ПЗУ тогдашних компьютеров?
                                              0
                                              Хорошие велосипеды в те годы стоили как раз как те компьютеры. В долларовом выражении.

                                              Паскаль — это нормальный структурированный алгоритмический язык, с сильным контролем типов данных и иерархическим структурированием данных, с передачей данных по значению и по ссылке, с поддержкой модульного программирования и всеми возможностями, присущими нормальным профессиональным (но не ООП) языкам. Ничего подобного ни в одном Бейсике никогда не было (Visual Basic это уже не Basic, это испорченный Pascal). Фраза про «заумные конструкции» выдаёт чайника в как Паскале, так и в программировании вообще. Ничего заумного там не было, Паскаль — язык очень простой и достаточно эффективный.

                                              Убогость Бейсиков вообще, и QuickBasic в частности (то ещё угрёбище) не столько в том, что это интерпретаторы, а в самом синтаксисе, семантике и методиках программирования. Именно из-за них это «псеводязык». Кстати, в 80-х Бейсики уже стали компилируемыми — но не до машинного кода, а до P-кода, исполняемого виртуальной машиной. А вы не знали?..

                                              Бейсик тогда пихали все в ПЗУ, потому что у него интерпретатор был крошечных размеров. Только по этой причине, и больше ни по какой. ПЗУ в 80-х были очень маленькой ёмкости и ещё очень дорогие. И портировать крошечный интерпретатор с одной платформы на другую занимает минимум времени. А интерпретатор Бейсика помещался в 4-8 килобайт на 8-и разрядных процессорах. Что, в частности, свидетельствует о его убогости.
                                                0
                                                Кстати, в 80-х Бейсики уже стали компилируемыми — но не до машинного кода, а до P-кода, исполняемого виртуальной машиной. А вы не знали?..


                                                Вообщето QuickBasic (не Q, а Quick) был компилируемым и причём до машинного кода
                                                  0
                                                  Да, но это его не спасало. Как дерьмо ни украшай и дезодорантами не брызгай, оно дерьмом и останется…
                                  0
                                  35 лет назад, когда были только истоки программирования… Покажи нам свой шедевр кода, 2016 года?
                                    +1
                                    > 35 лет назад, когда были только истоки программирования…

                                    истоки были гораздо раньше.
                                      –2
                                      Зафлудить здесь оффтопиками на около полмиллиона строк на Си, С++, Паскале, Фортране, разных Ассемблерах?
                                        0
                                        github
                                          0
                                          Ох уж эта молодёжь со своими модными гитхабами. Только копипаста, только флоппи-диски, только хардкор!
                                            0
                                            А что исходники все находятся в частной собственности — ничего не значит?
                                              0
                                              если полмиллиона сам написал, покажи самую лучшую часть из 30 строк
                                                –1
                                                Я затрудняюсь выбрать. Они все прекрасны.
                                      +10
                                      Странно, но я не вижу в листинге кода комментария с именем Гейтца.
                                        +8
                                        Прочитав заголовок, ожидал увидеть статью про Internet Explorer.
                                          +3
                                          странная игра

                                          довольно нелепой игре

                                          Эта странная и нелепая игра — обычная «объезжайка» на реакцию — до сих пор встречается в кнопочных звонилках наряду с тетрисом и змейкой. И в Брик Геймах (не буду называть их по-народному «тетрисами», потому что уже употребил это слово в правильном значении) она тоже встречалась.
                                            0
                                            Temple Run, Subway surfers…
                                              +1
                                              интересно кто был раньше
                                              image
                                              +4
                                              … и в каждой строчке просто дичайшее презрение к Майкрософт и IBM, и щенячье обожание Эппл. Серьезно, зачем на этом ресурсе подобные статьи? Неужели с нынешней его аудиторией все настолько плохо?
                                              • UFO just landed and posted this here

                                                Only users with full accounts can post comments. Log in, please.