← На главную

Оскар Толедо оживил написанную в 18 лет машинным кодом ОС для Am29000

31.07.2026 21:57 · hackernews

Оскар Толедо Г. с осени 1996 по весну 1997 года, в 18 лет, писал оконную операционную систему в 32-битном машинном коде для самодельного компьютера на Am29000. Всё уместилось на дискету, и она загружалась — в отличие от Windows 3.1 или GEM. Чип Am29000 вышел ещё в 1987-м и рекламировался как самый быстрый в мире, но для семьи Оскара он был новинкой только в 1994-м. Позже они получили образцы Am29050 от мексиканского представительства AMD — но в 1997-м AMD бросила AM29k ради K5. Компьютер G11 собрал отец: 6 MHz, 512 KB статической RAM, 128 KB EPROM, ISA-слоты, видеокарта Cirrus Logic GD5429, контроллер флоппи и старый клавиатурный чип. Оскар перенёс с Z280 инициализацию VGA, дописал декодер клавиатуры, дисковые подпрограммы и монитор с микро-ассемблером и микро-дизассемблером.

Оконную механику он придумал после книги по OS/2: там его зацепила идея конвейера сообщений и оконных классов. Алгоритм перекрытия окон он вычитал в исходниках X11R5 в файле XRegion.c — окно режется на прямоугольники, перекрытые части отбрасываются. Он упростил API, рисовал сразу в пикселях и сделал кооперативную многозадачность.

Позже он нашёл две дискеты с ранней версией системы и решил написать эмулятор Am29000. Пришлось разбираться с trap-инструкциями MULTIPLU и DIVIDU, таймером, big-endian. Сначала в эмуляторе были перепутаны PC0 и PC1 — из-за этого код прыгал не туда. Потом вылезли собственные баги: макрос RA вместо REG_A давал мусор, а в MUL и MULL знаковый бит при переполнении надо было дополнять. Флоппи-контроллер Оскар эмулировать не стал, а соорудил SCSI-прослойку: дискета представлялась системе как SCSI-устройство с номером -2. Система дошла до загрузки видеодрайвера по пути «X:/Sistema/Controladores/Video/CL-GD5429 800x600x64k» в Unicode. У Cirrus Logic GD5429 был 1 MB видеопамяти, режим 800x600 в 16-битном цвете. В qemu и pcem эмуляция чипа уже есть, но она слишком завязана на чужие структуры, поэтому Оскар написал свою по CL-GD5429 Technical Reference Manual. Эмуляция дошла до попытки стереть видеопамять. После добавления заглушки для видеокарты она прошла дальше, но упёрлась в конвертацию float в double — и дальше снова пошли круги отладки.

Читать оригинал →