2009-03-15 15 views
9

Per la mia classe di linguaggio assembly, stiamo scrivendo programmi DOS usando DPMI. Sfortunatamente, non ho accesso a una macchina Windows a 32 bit tutto il tempo. Ho una macchina virtuale Debian installata su quasi tutti i computer che uso.Come si compilano i programmi DOS su Debian?

Ho installato DOSBox e DOSEMU. C'è un modo per assemblare e compilare i programmi in Linux piuttosto che in DOS? Sto usando il nasmo, quindi non sembra che abbia problemi a farlo assemblare nel formato DOS. Tuttavia, ho problemi a eseguirlo attraverso il compilatore con il mio codice C e ottenere un eseguibile DOS (utilizzando gcc o MinGW).

C'è qualche modo per fare questo o sto praticamente andando a dover installare tutti gli strumenti sotto DOS?

+0

Probabilmente dovresti forzare una catena di strumenti con il tuo VM vm. Lo so, questo fa schifo. +1 e favorito, spero di vedere una buona risposta a questo. –

+0

Prova ad usare MASM in DOSBox ... – 23ars

risposta

7

Non sono nemmeno sicuro se è possibile compilare applicazioni DOS tramite GCC. Molto tempo fa c'era una variante del compilatore gcc chiamata DJGPP (o qualcosa del genere). Non ho mai funzionato però.

Le possibilità di cross-compilare un GCC per DOS in questi giorni sono quasi pari a zero.

Ti suggerisco di provare il vecchio compilatore Watcom. È un compilatore nativo per DOS e la sua implementazione DPMI funziona anche come un fascino sotto DosBox. Anche l'interfacciamento con i file oggetto compilati NASM non è un problema (l'ho fatto un paio di anni)

Oggi il compilatore è stato reso open source e chiamato OpenWatcom.

http://www.openwatcom.org/index.php/Main_Page

+0

DJGPP è ciò che stiamo usando per compilare programmi DOS in Windows, ma è un PITA completo e totale da installare all'esterno di Windows (anche sotto DOS). –

+1

L'ho installato come i586-pc-msdosdjgpp-gcc e cross-compiling con esso usando '--cross-prefix = i586-pc-msdosdjgpp-' più funziona che non. Ho appena compilato (solo per divertimento) FFmpeg per DOS. –

3

Probabilmente il modo più semplice per andare per voi è quello di utilizzare gli strumenti standard DOS per l'attività.

DOSBOX è davvero un buon emulatore.

7

BCC è in debian, ed è in grado di produrre codice accettabile per 8080 fino a 80386. Con l'interruttore -Md per produrre un binario MS-DOS.

2

DJGPP è ridicolmente facile da installare, minimo sono necessari solo tre .zip:

  1. BNU219B.ZIP (assemblatore, linker, bibliotecario)
  2. GCC441B.ZIP (compilatore C)
  3. DJDEV204.ZIP (libc, intestazioni)

http://www.delorie.com/djgpp/getting.html

unzip *.zip -d c:\djgpp && 
set DJGPP=c:\djgpp\djgpp.env && 
path c:\djgpp\bin;%PATH% 

gcc myfile.c -o myfile.exe 

Per produrre un output compatibile con DOS, è necessario utilizzare il compilatore in DOS in DOSEMU (non DOSBox !! troppo lento e buggy, pensato solo per i giochi) o utilizzare un cross-compilatore hosted di Linux (il sito di DJ ha gli RPM per questo).

Tuttavia, se si desidera il codice a 16 bit al 100%, sarà necessario utilizzare qualcos'altro (ad es. OpenWatcom). OpenWatcom supporta anche Linux (beta !!) host e destinazione (nessuna librerie condivisa, però, IIRC), ma potrebbe essere necessario compilarlo da solo con GCC.