gcc & com
Hi, All!
Коллега Робин прислал мне полезную для дела Пруликса ссылку:
Как собрать досовский COM-файл компилятором GCC
https://habr.com/post/412867/
← Июнь 2018 → | ||||||
2
|
3
|
|||||
---|---|---|---|---|---|---|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
За последние 60 дней ни разу не выходила
Сайт листа:
http://prool.kharkov.org/proolix/disc-list.html
Открыт:
12-10-2004
Пре-модерация: Нет
Адрес для писем в лист: comp.soft.othos.proolix-list@subscribe.ru
Адрес
модератора: comp.soft.othos.proolix-owner@subscribe.ru
Hi, All!
Коллега Робин прислал мне полезную для дела Пруликса ссылку:
Как собрать досовский COM-файл компилятором GCC
https://habr.com/post/412867/
В MSDOS-эмуляторе операцинной системы Proolix нормально запускается
досовская "интра" https://github.com/ern0/256byte-xorlissj
(Интра или заставка - небольшая программа, написанная с целью демонстрации
каких-либо визуальных видеоэффектов и являющаяся поджанром компьютерного
искусства, так называемой "демо-сцены")
В декабре я собрал для своей ОС Proolix первую утилиту на Фортране. Hello,
world, конечно, но сам факт возможности кросс-компиляции это таки да.
Теперь в ОС возможны три языка: ProolSkript (интерпретируемый, похожий на
усеченный forth), C и Фортран (два последних в виде кросс-компилятора в
Линуксе, используется gcc и gfortran). Sorry, совсем забыл ассемблер as,
тоже в виде кросс-компилятора.
По тому же методу можно сделать и Аду (и что там еще есть в коллекции gcc)
Ссылка на гитхаб (предупреждаю, чтение моих исходников опасно для вашего
мозга, вы рискуете разбить ладонь о свой лоб)
https://github.com/prool/proolix
https://habrahabr.ru/post/343690/.com[iz-pesochnitsy]-kak-vyyti-na-put-razrabo
В 2020 году придется переделать Proolix. Intel собирается полностью
отказаться от поддержки старого BIOS и перейти на UEFI. А Пруликс
пользуется сервисом BIOS
Для Пруликса теперь можно кросс-компилировать утилиты, написанные на
ассемблере или C. Уже работают первые три системных вызова
Ссылка на репозиторий: https://github.com/prool/proolix
Очередной барьер в операционной системе Proolix взят: реализована
простейшая файловая система FoolFS (мне даже FAT было лень
программировать). Работают функции создать файл, писать в файл, удалить
файл, читать из файла.
Ссылки
github: https://github.com/prool/proolix
FoolFS: http://proolepedia.kharkov.org/index.php/FoolFS
Hi, All!
Кстати, из моих проектов на Гитхабе первое место по лайкам (8 звездочек)
занимает ОС Пруликс и игра Виртустан мад:
https://github.com/prool
Второе место сильно отстает: у "Виртустанского приложения" (которое по сути
рогалик) и еще двух мадов - Зеркало и BBS MUD по 3 звездочки
Итак, что я сегодня выяснил:
Флешки бывают двух типов: флешка как HDD и флешка как дискета. У флешки-HDD
первый физич. блок это master boot record
с таблицей partition table. А дальше идут разделы, чаще всего один. В
терминах моего Ubuntu Linux флешка как физич. устройство
это /dev/sdb, а раздел /dev/sdb2. При загрузке с такой флешки сама флешка
становится устройством 0x80 в терминах прерывания
0x13. А реальный физич. HDD - device 0x81.
Я загрузился с такой флешки (она была создана при помощи unetbootin) и
набрал команду install. И инсталлировал Пруликс на
устройство 80, то есть на эту же флешку, только в raw формате (без syslinux
и файловой системы). И смог загрузиться
с raw флешки.
Затем я сделал флешку другого типа (флешка-как-дискета). Первым блоком у
нее идет boot sector, никакой MBR нет. На такую флешку
тоже можно при помощи unetbootin установить syslinux и загрузить с нее
Proolix-l. Но при этом диск 80 - это реальный
HDD! Я этого тогда не знал и набрал команду install и инсталлировался на
устройство 80 и установил Пруликс на реальный
HDD и запортил Винду на ноуте. Но такой случайный эксперимент показал, что
установленный на реальный жесткий диск
реального компьютера Пруликс загружается и работает. (То есть загружается
ядро, пока кроме ядра у Пруликса еще ничего нет,
файловой системы нет).
А Винду я потом восстановил без проблем, так как первый цилиндр винчестера
почти не используется. MBR я восстановил,
загрузившись с CD с Виндой и вначале запустив автоматич. восст. (оно ничего
не дало), а потом выполнив
в консоли восстановления команду
bootrec /fixmbr
и потом на всякий случай
bootrec /fixboot
Винда стала нормально загружаться, но при этом в первом цилиндре (начиная с
сектора номер 1, то есть второго сектора, то есть сектора,
непосредственно следующего за MBR) осталось ядро Пруликса и никто его не
затер.
Надо еще с Линуксом поэкспериментировать, он тоже вроде как не использует
первый цилиндр
Пруль
Сабж, однако! И поменьше вам багов и мемори ликов!
А Пруликс тем временем неторопливо развивается, см. Гитхаб
https://github.com/prool/proolix
Hi, All!
Сделан простейший инсталлятор. Теперь можно загрузится с дискеты, CD или
флешки и инсталлировать командой install (сначала run ct, естественно) ядро
Пруликс на жесткий диск (если конечно жесткого диска не жалко, потому что с
НЖМД Пруликс работает как с большой дискетой, то есть затирает MBR и
рассматривает диск как одно большое блочное устройство)
https://github.com/prool/proolix/
Истинно говорю вам: вот конкурент Пруликсу:
https://geektimes.ru/post/281754/
Я окончательно поехал крышей и подумал, что писать свою операционную
систему это мелко. И начал разрабатывать свой процессор. Так как я
программист, то пока просто пишу эмулятор. Пока не буду пытаться сделать
что-то сложное с виртуальной памятью и прочими плюшками. Для тренировки
пальцев сделаю нечто 16-разрядное, с минимальным набором команд.
Впоследствии это вполне реально будет сделать в железе, например на базе
FPGA. А потом и выпустить партию в кремнии. Интел уже трепещет, наверное. Я
стану миллионером!
А всё почему: пока еду на работу и с работы в метро, мне скучно и я думаю.
И всякую херь придумываю. В трамвае проще, там можно по сторонам в окно
смотреть и отвлекаться на окружающий мiръ
Теоретики знают, что функционально полный набор команд состоит из 2 команд,
который можно объединить в одну. Но это уже брейнфак какой-то. Команд
должно быть несколько, чтобы было веселее и чтобы можно было сравнительно
легко программировать в кодах
https://github.com/prool/cpu16
https://github.com/prool/proolix/tree/58871603f29599df0285a647acaef3479699e3ce
Эта версия Proolix-lf протестирована на VDS: загрузка с ISO работает!
Мои эксперименты показали, что прога unetbootin в Ubuntu 15.10 x64 глючит,
то есть не работает (она же - последняя версия с unetbootin.github.io). При
загрузке с флешки выдается сообщение
SYSLINUX ... Peter Anvin et al
Boot error
Такие же манипуляции в Ubuntu 14.04LTS создают работоспособную флешку
* * *
unetbootin используется мной при создании загрузочных флешек Пруликса (из
образов дискеты или CD ISO image)
Несколько дней назад я реализовал в Пруликсе свой интерпретируемый язык
программирования, который назвал Прульскрипт. Язык похож на Forth
Вот его спецификация
http://proolepedia.kharkov.org/index.php/ProolScript
А ведь мой Пруликс это Unikernel <https://en.wikipedia.org/wiki/Unikernel>
Бессмысленный и беспощадный
* * *
И напоминаю ссылки на ресурсы, посвященные Пруликсу
Пруликс на github: https://github.com/prool/proolix
Официальный сайт Пруликса: http://prool.kharkov.org/proolix
Блог Пруликса: http://prool.kharkov.org/proolix/blog
* * *
Статистика: на 5 декабря 15 года у данного листа 42 подписчика
42!
http://lurkmore.to/42
Хотел на свой старый роутер DIR-100 установить какой нибудь DD-WRT (то есть
полноценный маленький Linux) и начать там разработку Пруликса
<http://github.com/prool/proolix>. Оказалось, DD-WRT или OpenWRT с DIR-100
не совместимо. На форумах советуют (не мне, а аналогичным гикам) открыть
корпус, заменить флеш-память на бОльшую, подключиться к консоли (разъем на
плате) и работать. Но это к сожалению не мой метод, я не умею паять. Хотя,
может удастся собрать DD-WRT размером в два мега? Но я пока никогда не
собирал эту прошивку
На данный момент Proolix грузится с флешки при помощи syslinux. То есть
делается файл-образ дискеты, с которого можно грузиться, например
виртуальной машиной. (Или копировать файл на реальную дискету и с нее
грузиться) Затем образ дискеты инсталлируется на флешку при помощи утилиты
unetbootin, которая инсталлирует на флешку syslinux.
Загрузка с флешки происходит так: вначале автоматически грузится syslinux,
который затем загружает образ дискеты, подменяя при этом прерывания 13h,
15h, 1ah и делая виртуальный диск.
Я как любитель всего низкоуровневого решил поэкспериментировать с прямой
загрузкой с флешки (раньше, в эпоху proolix-d вроде получалось). Как
оказалось, флешка может быть отформатирована только под файловую систему
FAT16 (но не FAT12), я начал переделывать бут-сектор. У меня есть заготовка
кода для FAT-16, но что-то она пока не работает
Наработки (пока не работающие) я сброшу на github сегодня
* * *
О, и сайт с Ralf Brown Interrupt List <http://www.ctyme.com/rbrown.htm> не
грузится. Надо искать альтернативный
<http://www.delorie.com/djgpp/doc/rbinter/ix/>
Hi, All!
Проект Proolix-l собирается в среде Linux/gcc (например в Ubuntu). А вот в
среде cygwin не собралось, хотя там тот же gcc, as, ld. Но некоторые флаги
другие
Hi, All!
Установил на своем ноутбуке с Ubuntu систему виртуализации KVM и создал там
виртуальную машину, у которой был примонтирован Proolix-d CD. И запустил
эту VM, и зашел на нее через VNC клиент Remmina. Работает, однако
Сделан зачаточный MSDOS эмулятор. Пока реализована только функция 33h
MSDOS com-файлы запускаются командой run2
Имена файлов вводятся в виде 11 символов, все буквы большие,
имя дополняется пробелами до 8 символов примерно так
ATTRIB COM
Hi, All!
Чтобы загрузить Proolix-l (который собирается в среде gcc) и посмотреть на
этот ужас есть два основных способа:
1. Взять образ загрузочной дискеты из каталога
proolix/proolix-l/src/boot-sector/diskette.img и загрузиться с него как с
дискеты в системе виртуализации, например в VirtualBox
2. Взять образ дискеты, при помощи unetbootin или аналогичной утилиты
сделать загрузочную флешку и загрузить компьютер с нее
ВНИМАНИЕ! Я НЕ ДАЮ НИКАКИХ ГАРАНТИЙ!
3. Можно еще, используя образ загрузочной дискеты, сделать загрузочный CD
ROM/DVD ROM и загрузиться с него
* * *
Музейный Proolix-d, собранный старым добрым Turbo C 2.0 тоже можно
попытаться запустить аналогично, в файловом архиве есть образы и дискеты и
сиди 2007 года сборки (CD в неровском формате .nrg), но он не работает на
новых архитектурах (а если у вас есть работающий IBM PC/XT, там ЭТО
заработает)
* * *
А еще я с удивлением увидел, что Пруликс - уже 32-разрядная ОС. Времена
архитетур с реальным режимом i8086 прошли, на современных компах всё
совместимо, но уже 32-битно, и 32-битные команды работают
* * *
Я балбес, тупо нажал кнопку четыре раза и четыре раза отправил комен к
одному из предыдущих писем. Посыпаю голову пеплом
Proolix состоит из двух проектов:
Proolix-d - хронологически первый, средой разработки является проприетарная
среда MSDOS/MS Windows и проприетарный компилятор Turbo C 2.0/tasm. Проект Д
загружался и даже как-то работал!
Proolix-l - это рефакторинг проекта Д, уже в среде Linux с использованием
компиляторов gcc/as. Этот проект я когда-то начал и временно приостановил,
там разработан только бутсектор и простейшее ядро. Цель рефакторинга:
переход на исключительно свободное ПО
Так вот, имея на рабочей машине только Ubuntu Linux я думал, как собрать
проект Д. В виртуальной машине? И вот сегодня я сделал проще - собрал все в
DOSbox. И оно собралось, правда ранее работающее ядро сразу виснет. Надо
разбираться, что я делал не так, может какие параметры компиляции или версии
tc/tasm/pklite (ядро у меня потом упаковывается при помощи pklite b
представляет собой файл формата exe, а в boot manager встроен простой
загрузчик exe файлов. На это пришлось пойти, так как по мере роста объема
кода ядро уже не умещалось в модель памяти tiny (то есть в один сегмент 64К.
Напоминаю, что ОС Proolix работает в реальном режиме процессора i8086 и
совместимых с ним)
github заработал, но всё равно надо делать бекапы
Hi, All!
За все эти месяцы эксплуатации Гитхаба сегодня (сейчас) первый случай,
когда Гитхаб не работает: стоит заставка, что он на срочном техобслуживании.
Понятно, что последние версии моих проектов есть у меня на ноутбуке, но всё
равно как-то неприятно. Делайте бекапы, господа, и я их буду делать
Hi, All!
Я выложил на Гитхаб текущее состояние проектов Proolix-d и Proolix-l
https://github.com/prool/proolix