LINUX.ORG.RU
ФорумTalks

Собрал первую программу под DOS :)

 , , , ,


0

0

Всё началось с этой темы: Debian 2.0 (комментарий)

После своего коммента, я осознал, что никогда в жизни не писал под DOS, и даже не знаю есть ли сейчас что живое под эту платформу.

Оказывается ещё живо :) FreeDOS 1.2 - 25 декабря 2016, ну и DOSBox жив.

И даже есть несколько живых компиляторов.

1) https://github.com/open-watcom/open-watcom-v2

Очень приятно, что ребята которые его пилят, запилили Coverity Scan и Travis. Можно скачать самый новый компилятор https://github.com/open-watcom/travis-ci-ow-builds/archive/master.zip собранный под windows и linux сразу.

Огорчает лишь поддержка стандартов, частично С99 и очень частично C++11, но зато я понял, почему кто-нибудь может начать писать на С89 в 2019 году, всё-таки не все живые компиляторы осилили С99...

2) http://www.delorie.com/djgpp/ Самый настоящий gcc под DOS. Не смотря на неинформативный сайт, с очень скудной помощью: https://imgur.com/a/e5mWNN5 gcc работает. Библиотека С реализована частично, в частности нет файла complex.h, может ещё чего-нибудь нет. Но в целом работает, и не только С, но и С++ и, наверное, другие языки gcc.

И так выглядит моя первая программа под DOS: https://imgur.com/a/qEN79yP

Не знаю зачем я это написал, просто захотелось кому-нибудь рассказать...

А Linux, тут вот причём, компилятор работает под Linux:

i586-pc-msdosdjgpp-gcc -v
Using built-in specs.
COLLECT_GCC=i586-pc-msdosdjgpp-gcc
COLLECT_LTO_WRAPPER=/usr/local/djgpp/libexec/gcc/i586-pc-msdosdjgpp/8.2.0/lto-wrapper
Target: i586-pc-msdosdjgpp
Configured with: ../gnu/gcc-8.20/configure --target=i586-pc-msdosdjgpp --program-prefix=i586-pc-msdosdjgpp- --prefix=/usr/local/djgpp --disable-nls --disable-plugin --disable-lto --enable-lto --enable-libstdcxx-filesystem-ts --enable-libquadmath-support --with-gmp=/home/fsb4000/github/build-djgpp/build/djcross-gcc-8.2.0/tmpinst --with-mpfr=/home/fsb4000/github/build-djgpp/build/djcross-gcc-8.2.0/tmpinst --with-mpc=/home/fsb4000/github/build-djgpp/build/djcross-gcc-8.2.0/tmpinst --enable-version-specific-runtime-libs --enable-languages=c,c++
Thread model: single
gcc version 8.2.0 (GCC) 

★★★★★

Ответ на: комментарий от saahriktu

И в школах в 90-е QBasic очень даже преподавали, начиная именно с него.

Какой ещё QBasic на школьных компьютерах 90-х? Они даже DOS не поддержривали. В лучшем случае MSX-DOS (на Yamaha MSX-2) который несовместим и реально мог использоваться лишь на учительском компьютере. В те времена изучали Pascal, причём вовсе не Turbo/Borland. В крайнем случае встроенный Basic, но никак не QBasic.

bbk123 ★★★★★
()
Ответ на: комментарий от lenin386

Нет, она имела своё ядро и ядром DOS не пользовалась.

Ой ли? Хотя, что считать ядром, конечно. Но IO.SYS ведь Win3.x точно использовала.

CYB3R ★★★★★
()
Ответ на: комментарий от bbk123

Они даже DOS не поддержривали.

В том и суть, что поддерживали. Точно не скажу какие машины стояли в школе в 1996-1999-х годах, но в 2000-2001-м годах это точно были 286-е и 386-е машины. Так что, преподавали именно QBasic под MS DOS'ом (как и в конце 90-х). Кто успевал доделать задание играл в MS DOS'овские игры или даже запускал Windows 3.x, которая местами тоже стояла.

А Паскаль я в 2000-м году видел в местном лицее, когда учился там на «Оператора ЭВМ с элементами программирования». Вот ему там учили, да. В ВУЗе именно в учебном курсе уже был упор на C и C++.

saahriktu ★★★★★
()
Ответ на: комментарий от bbk123

Ну так железо же могло остаться с 90-х если его не заменили. Я просто не знаю заменяли его или нет. Может быть там 8086-е/8088-е стояли в 90-х. Это уже не установить. Однако, факт остаётся фактом. И в 1996-м году в школе стояли машины на которых крутился именно MS DOS, в котором запускали именно QBasic.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от bbk123

Речь шла о 90-х. Начало 2000-х нерелевантно.

сильно зависит от места, где то были телеки с понатыкаными туда спекки, атари и тд, а где то ibm стояли XTи с не телеками а мониторами, и не кассеты, а тру дискеты, некоторые даже имели жесткий диск!

в других местах во второй половине 90х уже все было достойно, с novell netware и бездисковых станций из 80386DX40/4-8Mb RAM и крутого сервера, и мониторы уже было SVGA и цветные.

alwayslate ★★
()
Ответ на: комментарий от Serg_HIS

Да, запустил на компе с FreeDOS. Текстовая графика понравилась, анимации в меню классные, правда шашки больше похожи на домино. Правда, комп свой ход так и не сделал.

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

Правда, комп свой ход так и не сделал.

Что за железо? Советуется хотябы 500 мегагерц на 6 уровень. Думает около минуты. На современных процах быстрее.

Какой уровень игры компа? На 4 уровне до появления дамок ходит в течении нескольких секунд на техже 500 мегагерцах.

Serg_HIS
()
Ответ на: комментарий от alwayslate

Вот не скажу как именно было у нас в том же 1996-м году, но, вероятно, там тоже было сетевое или терминальное. В том смысле, что тогда, да, на мониторе каждой машины был указан номер, и нужно было набирать команды с этим номером, чтобы залогиниться. Мониторы, да, были цветные, кажется, 14", наподобие такого: https://cache3.youla.io/files/images/720_720_out/59/6d/596d9b9a22a4493a486db3... . Так что, да, сидели в цветном QBasic'е, и на одном из этапов рисовали командами в цвете. И на самом первом этапе, когда объясняли назначение клавиш клавиатуры и учили редактировать тексты вообще, это делали тоже именно в QBasic'е.

saahriktu ★★★★★
()
Ответ на: комментарий от CYB3R

В принципе и на первом уровне она играет вполне интересно.

Serg_HIS
()
Ответ на: комментарий от bbk123

Они даже DOS не поддержривали

Они поддерживали МикроДОС!

В крайнем случае встроенный Basic

Я бы сказал, в основном, ибо пол-урока загружать Express Pascal было расточительно.

no-such-file ★★★★★
()
Ответ на: комментарий от lenin386

Плюсую, DOS с текущими экстендерами поддерживают 32 битные программы и почти всю память видят. Та же моя программа на С - 32 bit и вот создал виртуалку с 4096 мегабайтами памяти, вот сколько система увидела: https://imgur.com/a/f34Tu2u

fsb4000 ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Конкретно DOS/4GW по идее не нужен, он до 64 мегабайт вроде только поддерживал. А вообще такие программы нужны.

dos32a.exe для Watcom компилятора(хотя он поддерживает и DOS/4GW)

и CWSDPMI.EXE для i386-pc-msdosdjgpp-gcc

fsb4000 ★★★★★
() автор топика
Ответ на: комментарий от bbk123

Какой ещё QBasic на школьных компьютерах 90-х? Они даже DOS не поддержривали.

4.2. У нас стояли «Искры» 80х86 с цветными CGA мониторами. Учительский комп был вообще 80x286. Грузились с дискеты, да. Но бейсик был GW-Basic

tiinn ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Вот кстати решил проверить ещё раз свои слова :)

Простейший пример:

int main(void)
{
    long a = 5;
    long b = 6;
    long c = a + b;
    return 0;
}
i386-pc-msdosdjgpp-gcc -O0 -S main.c
	.file	"main.c"
	.section .text
	.globl	_main
_main:
LFB0:
	.cfi_startproc
	pushl	%ebp
	.cfi_def_cfa_offset 8
	.cfi_offset 5, -8
	movl	%esp, %ebp
	.cfi_def_cfa_register 5
	subl	$16, %esp
	movl	$5, -4(%ebp)
	movl	$6, -8(%ebp)
	movl	-4(%ebp), %edx
	movl	-8(%ebp), %eax
	addl	%edx, %eax
	movl	%eax, -12(%ebp)
	movl	$0, %eax
	leave
	.cfi_restore 5
	.cfi_def_cfa 4, 4
	ret
	.cfi_endproc
LFE0:
	.ident	"GCC: (GNU) 8.2.0"
как видно, используются регистры edx, eax и прочие 32 битные регистры...

fsb4000 ★★★★★
() автор топика
Ответ на: комментарий от lenin386

Уже начиная с Windows 2.0, там был защищённый режим, собственные драйверы и виртуальная память

Да-да, был. Вот только стартовала Win 3.x как обычное приложение, и по завершению работы попадала опять в DOS, да и

Кроме того, драйверы для некоторых устройств (включая драйверы для дисководов для компакт-дисков и доступа к сети) предоставляются MS-DOS

. Потом, большая часть дров для Win3.x накатывалась опять-же из-под DOS.

tiinn ★★★★★
()
Ответ на: комментарий от no-such-file

Вот ты смеешься, а я тут хочу спаять что-нибудь из валяющихся у меня в коробочке z80 и микросхем серии кр580 и запустить cp/m

cvs-255 ★★★★★
()
Ответ на: комментарий от tiinn

завис :(

Есть там пару багов ещё. Допилю поделку под андроид текущую, засяду перепиливать на Жабу шашки под многопоточность адаптивную. То должна будет вестчь поличиццо :)

Serg_HIS
()
Ответ на: комментарий от cvs-255

и запустить cp/m

Зачем? Для подобных компов гораздо интереснее иметь какой-нибудь forth в пзу. Ну или даже банальный бейсик.

no-such-file ★★★★★
()
Ответ на: комментарий от tiinn

Вот только стартовала Win 3.x как обычное приложение

Ага, только было ещё одно приложение. Loadlin. Запускало Линукс прямо из-под ДОС. Линукс - оболочка над ДОС?

lenin386 ★★★★
()
Ответ на: комментарий от fsb4000

Нет, ДОС 32-х битные программы не поддерживат. Попробуй вызови прерывание DOS из кода, расположенного выше 640к. Под ДОС можно использовать 32-х битный доступ к оперативе только для данных, и то благодаря ошибке Интел, с которой позже приняли решение держать совместимость.

lenin386 ★★★★
()
Ответ на: комментарий от alwayslate

Видимо, в разных школах обучали разному. Turbo Pascal, как я уже упоминал выше, я встречал, но не в школе и уже позже (когда учился в 10-м классе; информатика была с 7-го класса). В школе был только QBasic.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Видимо, в разных школах обучали разному. Turbo Pascal, как я уже упоминал выше, я встречал, но не в школе и уже позже (когда учился в 10-м классе; информатика была с 7-го класса). В школе был только QBasic.

а я не только про школы. в школе вообще что то типа спекки было, какие то атари, короче там еще logo было, но это все начало 90х. да, телеки были толи юность толи витязь, что то цветное что то нет.

alwayslate ★★
()
Ответ на: комментарий от lenin386

ничего не понимаю, ни о каких прерываниях не знаю.

вот собрал тесты используя Boost.Test. EXE файл занимает 19.8 мегабайт.

Работает в DOS. Там данных на 19 мегабайт нагенерировано и нет команд выше 640к?

https://imgur.com/a/rX8hMt5

fsb4000 ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

Значит, в верхнем коде нет вызовов прерываний dos. Либо, до них в данных тестах не доходит дело. Dos ничего не знает об оперативе выше 640к. Она не сможет вернуть управление.

lenin386 ★★★★
()

Эх, а я когда-то тоже дифуры решал под DOS на Фортране, в итоге написал свои окошки

Под dos extender, но на 386 эта зараза не работала почему-то, на первопне запустилась

WerNA ★★★★★
()
Последнее исправление: WerNA (всего исправлений: 1)
Ответ на: комментарий от WerNA

но на 386 эта зараза не работала почему-то, на первопне запустилась

Может твоя прога хотела математический сопроцессор? А на той мамке с 386 он не был воткнут...

Serg_HIS
()
Ответ на: комментарий от Serg_HIS

Да вроде был, но в защищённый режим не хотело. Я её продал за 4 бакса. Надо было на стену повесить :)

WerNA ★★★★★
()
Ответ на: комментарий от bbk123

У нас в школе в 1993 г. был класс с десятком AT 286 (+одна XT-шка). Стоял MS-DOS 5.0 и изучали QBasic.
Плюс был еще один старый компьютерный класс с БК-0010 (ДВК у учителя), его где-то в 1995 заменили на бездисковые 386 с выделенным сервером Netware. Что характерно, на них тоже изучали QBasic.

bigbit ★★★★★
()
Последнее исправление: bigbit (всего исправлений: 1)
Ответ на: комментарий от Serg_HIS

не забудь поставить на её ярлык нивысший приоритет исполнения

На моём целероне и без таких ухищрений нормально работает. И в Win2K и в WinNT 4.0

tiinn ★★★★★
()
Ответ на: комментарий от tiinn

Да пофиг.
Запуск из-под (и возможность выхода в) DOS - странный критерий операционной системы.
Вот WinNT до семёрочки требуют legacy bios и его прерывания (на современных материнках нужен CSM), а начиная с семёрочки умеют напрямую из efi (Шин7 - с оговоркой что нужен нормальный драйвер видеокарты, Шин8 уже просто работает).
Так выходит, Шин7 больше операционная система, чем ХР, а Шин8 - ещё больше ОС?

TheAnonymous ★★★★★
()
Ответ на: комментарий от TheAnonymous

Неа. Какая разница, откуда ОС берёт информацию для загрузчика, из BIOS или из EFI? Это hardware. А вот если система требует для своей работы DOS, то это software, и пахнет дурно.

tiinn ★★★★★
()
Ответ на: комментарий от tiinn

hardware

int10h - hardware? Если так, то все драйвера - hardware, с чего тогда претензия

Потом, большая часть дров для Win3.x накатывалась опять-же из-под DOS

какая разница, откуда ОС их берёт

TheAnonymous ★★★★★
()
Последнее исправление: TheAnonymous (всего исправлений: 1)
Ответ на: комментарий от TheAnonymous

int10h - hardware? Если так, то все драйвера - hardware

И с чего же такой вывод?

какая разница, откуда ОС их берёт

Вы хотите сказать, что ОС - это только ядро?

tiinn ★★★★★
()
Последнее исправление: tiinn (всего исправлений: 1)
Ответ на: комментарий от TheAnonymous

Ладно-ладно, а вот с чего вы взяли

int10h - hardware? Если так, то все драйвера - hardware

Вы разницу между ОЗУ и ПЗУ понимаете?

tiinn ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.