Mi fa piacere di avere indovinato ...Originariamente inviato da gygabyte017
esatto, hai indovinato.
In effetti col turbopascal7 facevo applicazioni dos a 16bit, e quindi [B800:0] funzionava...
In c++ invece è 32bit, quindi ora capisco perchè non funziona. E come posso fare a ottenere l'indirizzo fisico 0xB8000 ??
Grazie![]()
![]()
A 32 bit, diciamo cosi', e' cambiato tutto ... l'unico che puo' accedere alla memoria fisica (come ad altri device fisici) e' solamente il sistema operativo, oppure il codice che gira in un device driver in modalita' kernel.
Ma soprattutto, non e' detto che la memoria video, nei moderni sistemi, stia in quella posizione. Le console DOS "simulano" la presenza di memoria video a quell'indirizzo e poi vanno ad interfacciarsi al driver video al quale inviano le opportune istruzioni per visualizzare i dati ...
Insomma ... o continui con strumenti a 16 bit (e passi attraverso la simulazione del DOS) oppure scrivi un device driver a 32 bit.
L'alternativa e' (come ti hanno consigliato) passare attraverso le API di gestione della Console che permettono la "simulazione" di cui ti dicevo. Ma NON puoi scrivere direttamente con un puntatore nella memoria video.