Domanda

Sto lavorando a un progetto di sistemi embedded e ho riscontrato un problema con il compilatore che è programmaticamente incorporato nell'IDE Paradigm C ++. Vorrei poter automatizzare la costruzione.

Il processore è AMD186ES. Non sto lavorando con il sistema operativo - solo roba baremetal. Devo generare codice macchina 8086 a 16 bit in modalità reale da C ++.

Il mio googling indica che G ++ può creare tale codice.

Le mie domande sono:

g ++ può essere configurato per creare questo codice macchina?

Esistono anche altri compilatori C ++ che possono farlo?

È stato utile?

Soluzione

Attualmente sto usando gnu come (parte di binutils e l'assemblatore usato per gcc) e ho assemblato con successo il codice assembly a 16 bit con il seguente:

as <file>
ld --oformat binary -Ttext 0x0 -e start <file>

con i miei file assembly che iniziano con:

.code16
.globl start
.text
start:

poiché il suo binario semplice omette le linee,

.globl start
start:

genererà semplicemente un avviso, anche se i binari piatti non hanno bisogno di un punto di ingresso.


qualcosa che ho imparato a mie spese;

-Ttext 0x0

è fondamentale, altrimenti il ??segmento .text viene spinto al di fuori dell'intervallo di indirizzamento a 16 bit (non chiedermi perché)

Personalmente sto ancora imparando l'assemblea, quindi questo è solo il mio modo, non necessariamente il migliore.


MODIFICA: se stai scrivendo il codice di avvio, dovresti cambiare

-Ttext 0x7c00

a

<*>

questo compenserà i tuoi indirizzi di memoria di 0x7c00 poiché il codice di avvio viene normalmente caricato su 0x7c00 dal BIOS.

Altri suggerimenti

La tua scommessa migliore è probabilmente OpenWatcom , che include un compilatore C ++. All'inizio della metà degli anni '90, credo che questo fosse il miglior compilatore C / C ++ in circolazione. E 'stato di provenienza aperta alcuni anni fa.

Il vostro fornitore di chip (AMD, suppongo) non ha alcun puntatore ai compilatori per il chip?

In caso contrario, potresti essere in grado di utilizzare alcuni compilatori DOS a 16 bit, ma avrai diversi potenziali grandi problemi:

  1. ottenere una libreria per il compilatore che non dipende dal BIOS o da MS-DOS
  2. debug
  3. I
  4. linker per sistemi embedded di solito hanno un supporto specifico per localizzare il codice in specifiche aree di memoria. Di solito non è incluso nei compilatori per DOS, ma potresti essere in grado di trovare una sorta di linker / localizzatore che farà il trucco per te.

Un paio di compilatori che sono ancora supportati e generano codice a 16 bit sono:

Questa ricerca su Google mostra una serie di link per impostare gcc come cross-compilatore. Per farlo puntare a qualcosa di diverso da un binario ELF standard, è possibile creare un output. Questo link discute dell'esclusione delle librerie standard e della personalizzazione del formato di output. Potrebbe essere necessario armeggiare per farlo funzionare.

In alternativa openwatcom.org ha una versione open source di Watcom Compilatore C, che potrebbe anche essere in grado di fare ciò che vuoi.

Il più recente del 2014 è Dev86 .

Esiste una patch per GCC 4.3: Nuovo back end ia16: Intel x86 a 16 bit

E eccone un aggiornamento . Nota che probabilmente non funziona molto bene, ad esempio, il post aggiornato dice: " Costruttori e distruttori sono ora supportati, ma per qualche ragione essi   funziona solo sulla configurazione alci. "

Questo contenitore Docker ne ha una build: https: // registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

Non sono ancora riuscito a creare binari DOS: Come assemblare l'assemblaggio GAS e collegarlo alla libreria Open Watcom C?

Dai un'occhiata a bcc , che è un compilatore x86 C a 16 bit. Ad esempio, ci sono anche pacchetti Debian per questo .

Non sono sicuro, ma penso che la vecchia versione di Borland c ++ sia stata in grado di farlo. puoi scaricare la versione 5.5 t: qui buona fortuna

È da molto tempo che non guardo le cose di Paradigm (sono ancora in giro?) - sei sicuro che non abbiano equivalenti da riga di comando per il compilatore? Il mio ricordo è che sono stati costruiti in cima alla toolchain del compilatore di Borland ... Quindi forse una vecchia copia dei compilatori di Borland potrebbe fare il trucco?

- Ah, guardando un po 'più in là, trovo che Paradigm sia ancora in giro (www.devtools.com) vendendo strumenti X86. (Deve essere una mucca da soldi!)

Il loro prodotto professionale include scripting ... A seconda della quantità di lavoro che prevedi di fare, potrebbe valere la pena mordere il proiettile e acquistare la loro offerta completa ...

Buona fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top