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) 

★★★★★

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

BIOS относится к системному программному обеспечению (ПО).

не софт, это hard. ПЗУ же

Если ядро linux прошить в ПЗУ это будет hard? (собственно всякие ведроиды) А какую-нибуль *RTOS?

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

Допилю свою поделку для андроида текущую.

Потом ещё подебажу шашки DOS версию и запилю на Java.

Если хочешь, могу тебя подключить в список тестеров к текущей поделке.

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

Я с тобой не согласен.

Хард - это сами логические цепи этих самих триггеров. Софт - это инструкции для этих триггеров когда им включатся и выключаться. То, что можно перезалить заменив другим содержимым - это софт. Тоже касается и сменой одного ПЗУ на ПЗУ с другими инструкциями - это софт.

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

тоесть программируемые - значит в них есть софт.

В некотором смысле сейчас многие современные процессоры тоже программируемые. Частично они хардовые, частично софтовые.

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

Ужас, поколение QBasic.

Да не то чтобы. Например, я начал читать компьютерную литературу ещё в 5-м классе, а самой моей первой книгой по программированию была книга про Паскаль. Вот такая: https://www.libex.ru/dimg/8a85.jpg . Другой вопрос, что в большинстве источников того времени писали в первую очередь именно про Basic (не конкретно про QBasic). А больше чем на том же QBasic'е я писал на Basic'ах «Сюбора», а впоследствии и на Basic'е ZX Spectrum'а. Также гонял биты на калькуляторах. Автоматически (на МК-61) и вручную (на других калькуляторах).

qb64

Как-то он у меня не взлетел. Вероятно, тем, кому нужен Basic, лучше взять что-нибудь другое. Впрочем, теперь уже гораздо лучше писать именно на Паскале, да.

saahriktu ★★★★★
()

что никогда в жизни не писал под DOS

Как ты так умудрился? В старшие классы не ходил? Или тебе уже за 60?

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

Как ты так умудрился? В старшие классы не ходил? Или тебе уже за 60?

29 мне.

Сначала всякие cmd.exe и word изучали, потом free pascal(именно fpc, а не Borland) под Windows....

И компы в школе уже мощные были, Celeron 1200 и 256 mb оперативы, никаких там 386...

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

именно fpc

Ну это печально, конечно. Хорошо хоть, не ABC.

И компы в школе уже мощные были

А это не имеет значения, турбомоскаль поныне запускают на любых, и извращаются с досбоксом, чтоб его запустить, потому что NTVDM давно не торт, а на 64-разрядных системах и вовсе не работает.

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

Впрочем, теперь уже гораздо лучше писать именно на Паскале, да.

Free Pascal до сих пор не осилил нативные 64 бита под Винду. Кому он такой нужен?

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

турбомоскаль поныне запускают на любых

Там же баг в Crt, который на современных слишком быстрых компьютерах валит всю программу, если в ней используется Crt. Был патч для Pentium Pro, но для современных компов он вроде бы не подходит. К тому же DOS приложения (в которым относится TP) на Win64 уже не поддерживаются и не запускаются.

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

слишком быстрых

Ну так для этого в досбоксе троттлинг есть :3 И это проблема много досовского софта, не только паскального. С аппаратными таймерами-то в те времена плохо было.

на Win64 уже не поддерживаются и не запускаются

Чукча не читатель?

Зато там текстовый режим выпилили. На Vista/7 подменой драйвера ещё возвращается, с 8 уже всио. А без текстового режима нафиг винда-то нужна. Ну conemu/dosbox в полноэкранном режиме умеют консольку рисовать, но это пародия же.

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

Ну так для этого в досбоксе троттлинг есть

Не хочу я никакой DOSBox.

И это проблема много досовского софта, не только паскального. С аппаратными таймерами-то в те времена плохо было.

Какого ещё? Разве у программ, скопмилированных Borland C были такие проблемы?

Чукча не читатель?

О чём это ты? Потрудись излагать свои мысли яснее.

Зато там текстовый режим выпилили.

Не знаю о чём ты и зачем это нужно, но консольные аппликации поддерживаются до сих пор даже в Windows 10. К тому же Pascal - это не только и не столько консоль. Вспомни Delphi.

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

Линуксоиды довольно далеки он языков с Algol-подобным синтаксисом и с индексацией с единицы вместо ноля. А вот написание нативных win64 приложений на достаточно простом для освоения языке всё ещё востребовано.

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

Ну так кто как. Иначе бы даже gnat'а не было. А он даже в составе GCC.

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

Не хочу я никакой DOSBox.

Ну жри NTVDM без эмуляции допотопных звуковых карточек.

Разве у программ, скопмилированных Borland C были такие проблемы?

У программ, опирающихся на процессорные тики. Игори, например. Так летают, шо мгновенно Game Over.

О чём это ты?

О том, что я это писал, а ты мне зачем-то это же отвечаешь.

Не знаю о чём ты и зачем это нужно

Alt+Enter жал когда-нибудь? Или предпочитаешь пялиться в мизюрное некошерное окно терминала, позорно соседящееся с гуями?

Вспомни Delphi

Речь о школах, там дельфи и раньше не особо котировали, а сейчас и подавно. А вот турбомоскаль вечен.

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

Угумсь.

program draughts;
uses Graph,Crt;
label 1;
var c:array[1..8,1..8] of Byte;
    grDriver:Integer;
    grMode:Integer;
    ErrCode:Integer;
    flg3,flg4,i,j:byte; prs:char;
    ac,cu:boolean;
    px,py,bp:byte;
function do1(posx,posy,dir:byte):byte;
var c1,c2:byte;
begin
case dir of
 1: begin posx:=posx-1; posy:=posy+1; end;
 2: begin posx:=posx+1; posy:=posy+1; end;
 3: begin posx:=posx-1; posy:=posy-1; end;
 4: begin posx:=posx+1; posy:=posy-1; end;
end;
c1:=c[posx,posy];
case dir of
 1: begin posx:=posx-1; posy:=posy+1; end;
 2: begin posx:=posx+1; posy:=posy+1; end;
 3: begin posx:=posx-1; posy:=posy-1; end;
 4: begin posx:=posx+1; posy:=posy-1; end;
end;
c2:=c[posx,posy];
if cu then begin if (c1=0) and (dir>=3) then do1:=1 else begin
if (c2=0) and (c1=1) then do1:=2 else do1:=0; end; end else begin
if (c1=0) and (dir<=2) then do1:=1 else begin
if (c2=0) and (c1=2) then do1:=2 else do1:=0; end; end;
end;
procedure movp(op:byte);
begin
case op of
 1: if (px<>1) and (py<>8) then begin px:=px-1; py:=py+1; end;
 2: if (px<>8) and (py<>8) then begin px:=px+1; py:=py+1; end;
 3: if (px<>1) and (py<>1) then begin px:=px-1; py:=py-1; end;
 4: if (px<>8) and (py<>1) then begin px:=px+1; py:=py-1; end;
end;
end;
procedure mov(op:byte);
var tmp1,tmp2,tmp3,tmp4:byte;
begin
tmp4:=do1(px,py,op);
if (tmp4>0) and (c[px,py]=byte(cu)+1) then begin
bp:=tmp4;
case op of
 1: if (px<>1) and (py<>8) then begin c[px,py]:=0;
 if tmp4=2 then c[px-1,py+1]:=0; px:=px-tmp4; py:=py+tmp4;
c[px,py]:=byte(cu)+1; tmp1:=do1(px,py,2); tmp2:=do1(px,py,3); tmp3:=do1(px,py,4);
if (tmp4=1) or ((tmp4=2) and not((tmp1=2) or (tmp2=2) or (tmp3=2))) then begin ac:=false; cu:=not(cu); end; end;
 2: if (px<>8) and (py<>8) then begin c[px,py]:=0;
 if tmp4=2 then c[px+1,py+1]:=0; px:=px+tmp4; py:=py+tmp4;
c[px,py]:=byte(cu)+1; tmp1:=do1(px,py,1); tmp2:=do1(px,py,3); tmp3:=do1(px,py,4);
if (tmp4=1) or ((tmp4=2) and not((tmp1=2) or (tmp2=2) or (tmp3=2))) then begin ac:=false; cu:=not(cu); end; end;
 3: if (px<>1) and (py<>1) then begin c[px,py]:=0;
 if tmp4=2 then c[px-1,py-1]:=0; px:=px-tmp4; py:=py-tmp4;
c[px,py]:=byte(cu)+1; tmp1:=do1(px,py,1); tmp2:=do1(px,py,2); tmp3:=do1(px,py,4);
if (tmp4=1) or ((tmp4=2) and not((tmp1=2) or (tmp2=2) or (tmp3=2))) then begin ac:=false; cu:=not(cu); end; end;
 4: if (px<>8) and (py<>1) then begin c[px,py]:=0;
 if tmp4=2 then c[px+1,py-1]:=0; px:=px+tmp4; py:=py-tmp4;
c[px,py]:=byte(cu)+1; tmp1:=do1(px,py,1); tmp2:=do1(px,py,2); tmp3:=do1(px,py,3);
if (tmp4=1) or ((tmp4=2) and not((tmp1=2) or (tmp2=2) or (tmp3=2))) then begin ac:=false; cu:=not(cu); end; end;
end;
end;
end;
procedure mus;
begin
if bp=1 then begin Sound(500); Delay(100); NoSound; end;
if bp=2 then begin Sound(500); Delay(100); Sound(1000); Delay(400); NoSound; end;
bp:=0;
end;
begin
 grDriver:=Detect;
 InitGraph(grDriver, grMode, '');
 ErrCode:=GraphResult;
 If ErrCode<>grOk Then Halt(1);
 ac:=false; cu:=false; px:=1; py:=1; bp:=0;
 for i:=1 to 8 do begin
  c[i,1]:=1;
  c[i,3]:=1;
  c[i,7]:=2;
  i:=i+1;
 end;
 for i:=1 to 8 do begin
  i:=i+1;
  c[i,2]:=1;
  c[i,6]:=2;
  c[i,8]:=2;
 end;
1:SetVisualPage(128*flg3); if flg3=4 then flg3:=0 else flg3:=flg3+1;
 SetActivePage(128*flg4); if flg4=4 then flg4:=0 else flg4:=flg4+1;
 ClearDevice;
 SetColor(10);
 OutTextXY(5,5,'Current player:');
 if cu then SetFillStyle(4,12) else SetFillStyle(4,0);
 Rectangle(25,25,50,50);
 FloodFill(26,26,10);
 SetFillStyle(1,15);
 for i:=1 to 8 do begin
  Bar(20+i*60,420,79+i*60,479);
  Bar(20+i*60,300,79+i*60,359);
  Bar(20+i*60,180,79+i*60,239);
  Bar(20+i*60,60,79+i*60,119);
  i:=i+1;
 end;
 for i:=1 to 8 do begin
  i:=i+1;
  Bar(20+i*60,360,79+i*60,419);
  Bar(20+i*60,240,79+i*60,299);
  Bar(20+i*60,120,79+i*60,179);
  Bar(20+i*60,0,79+i*60,59);
 end;
 if ac then SetFillStyle(1,14) else SetFillStyle(1,6);
  Bar(20+px*60,480-py*60,79+px*60,539-py*60);
 for i:=1 to 8 do
  for j:=1 to 8 do
   if c[i,j]>0 then
    begin
     if c[i,j]=1 then SetFillStyle(4,0) else SetFillStyle(4,12);
     FillEllipse(49+i*60,509-j*60,30,30);
    end;
 mus;
 repeat until keypressed;
 prs:=ReadKey;
 case prs of
  '7': if ac then mov(1) else movp(1);
  '9': if ac then mov(2) else movp(2);
  '1': if ac then mov(3) else movp(3);
  '3': if ac then mov(4) else movp(4);
  '5': if ac then ac:=false else ac:=true;
  'q': Halt(1);
 end;
 goto 1;
end.
Всратые, конечно; я пару минут погонял и уже бажок нашёл: шашка может вылететь за доску.

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

Гм... Ну я свои хотел в 2001 году везти на чемпионат компьютерных шашек.

Шота не срослось было.

А твои хоть правила хождения и биения знают? Судя по коду они врядли считают ходы наперёд.

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

А мои даже на первом уровне (продумывание на 1 полуход) меня дрючат как дебила. Хотя я не особый игрун в шашки. Да и в шахматы тоже.

Serg_HIS
()

Если кому интересно вот ссылка на мои DOS шашки.

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

CHAPAEFF

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

над руской езыкой

Руская езыка свёщенная, шо над ней издеваццо низзя?

и мудераторами

Сами виноваты, неча было прикидываться шлангами и ломать моё понимание правил, модерации и вообще смысла существования ЛОРа.

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

там пока осталася один известный мне «баг». Он проявляется как задумчивость в ситуациях «всего один ход ЖЕ». Это наследие архитектуры упрощённой. В основном на этом и палюсь, когда тестирую на мастерах спорта по шашкам в онлайне по инету.

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

Как тебе текстовай графон в интерфейсе? :)

Думаю может запилить сохранение автоматическое настроек и ситуации последней игры?

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

Интерфейс вполне удобный. Сохранение, да, было бы супер. А то у меня комп почти сутки под DOSом молотил - я хотел доиграть партию, а тут сначала спать, потом на работу :)

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

шестой он как мастер спорта играет почти.

На восьмом троллил мегазвездатых игрунов онлайн на шашечных онлайн ресурсах.

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