Newsgroup: it.comp.lang.c++
Titolo: Accesso alla memoria

Come posso accedere direttamente alla memoria, ad esempio quella video ?
ho provato a creare un puntatore di tipo char e inizializzarlo all'indirizzo
0xB8000000 ma non funziona.
Quello che ho scritto č:
void main(void) {
    char *var = (char*) 0xB8000000;
    var = 'A';
}
ma non funziona.
Ringrazio tutti quelli che vorranno aiutarmi.
Ciao
                Pevar...

...


Sto lavorando in DOS
e il codice che ho scritto non funziona comunque, mi dice che non può
convertire un *char in un char.
Uso il compilatore Borlaland C++ 5
Ciao
            Pevar

...


Giusto, errore molto bovino.
Comunque anche così non c'è traccia di A sullo schermo.
Dov'è che sbaglio?
Ho anche provato ad accendere un pixel sullo schermo (dopo aver settato la
modalità grafica) scrivendo all'indirizzo 0xA0000000
ma niente.
Forse mi conviene inserire delle parti di codice in assembler?
Ciao e grazie
                                    Pevar...


Ciao.

}
Se ti basta lavorare in modalita` testo l'indirizzo che usi e`
corretto, se vuoi lavorare in VGA (320x200x8bit) devi usare
0xA0000000.
Cmq per la modalita` VGA devi inizializzare la grafica con:
asm {
	mov al,13h
	mov ah,00h
	int 10h
}
Per quanto riguarda il sorgente che hai proposto ti ricordo che,
se lavori su un indirizzo di tipo SEGMENTO:OFFSET devi utilizzare
il casting a char far*.
Dunque:
	void main(void) {
    		char far *var = (char far*) 0xB8000000;
    		var = 'A';
 		}
Ricordati che una locazione e` per il carattere, un'altra per gli
attributi di colore e di sfondo, e cosi` via.
-- 
Gargamella alias Massimo Lauria
"Non e` bello cio` che e` bello, ma e` bello cio` che piace... a me!"
remove *dinkyisland* from address to mail me


Questo e' un frammento di codice per le modalita' VESA
diverse dalla 320x200x256
unsigned char far * pFrameBuffer=(unsigned char far * )0xA0000000;
 // set 6400x480x256 video mode
 // set scan line length
 _asm {
            mov     ax, 04F02h      ; VESA Set mode
            mov     bx, 00101h      ; Mode 101 - 640x480x256
            int     10h
            ;cmp     ax, 0004Fh      ; Was it successful?
            ;jne     exit
            mov     ax, 04F06h      ; VESA Set logical scan line length
            mov     bl, 0
            mov     cx, 1024        ; Set so banks are an integral number
lines
            int     10h
            ;cmp     ax, 0004Fh      ; Was it successful?
            ;jne     exit
     };
Dai precedenti messaggi mi e' parso che il puntatore al frame buffer
fosse definito senza la keyword "far" o "__far".
Spero di dire una cosa ovvia, comunque:
Se si compila a 16 bit essa e' necessaria (a meno di specificare via switch
che tutti i puntatori sono FAR).
Se si compila a 32bit, dove i puntatori non subiscono la conversione
SEG:OFF,
allora il VGA frame buffer si trova a 0x000A0000
ed il frame buffer dei caratteri   in 0x000B8000.
Infatti la definizione a 16 bit A000:0000 significa
          A000<<4 + 0000 = A0000

On Wed, 27 Jan 1999 21:22:56 GMT, maxgarga@*dinkyisland*
nettaxi.com
(Gargamella) wrote:
Anzi...
	void main(void) {
    		char far *var = (char far*) 0xB8000000;
    		*var = 'A';


...


 aveva 1mb di ram il figlio di bill gates o giů di li
Secondo me se uno deve scrivere un gestionale ed inizia con istruzioni
come quella di cui sopra č segno evidente di un approccio inadeguato al
problema. E questo vale oggi come all'epoca dei 286.
EMG


prima di tutto non č a fatto un aproccio inadeguato visto che č stata
scritta una intera libreria che gestisce in questo modo l'interfaccia a
carateri e poi quando si lavorava con i 286 l'acesso diretto alla memoria
era il modo piů veloce di fare lavorare il programma tenendo conto che il
dos ha e aveva il limite dei 512kb mi diarai existevano le librerie std ansi
che si occupavano della stampa su schermo ma ha tua informazione quelle
librerie erano del tutto generiche e gestivano schede video generiche tanto
piů che la borland stessa haveva una libreria grafica che gestiva appena il
vga
figuriamoci altri tipi di schede.
ciao 
Ri...@euromedia.it



 vga figuriamoci altri tipi di schede.
Ma stavi parlando di output carattere o grafico? Io avevo capito il
primo. Per il secondo il discorso cambia abbastanza ma in generale un
gestionale non ne aveva bisogno allora e non ne ha bisogno oggi quando
tutte queste problematiche vengono gestite direttamente dalla GUI.
EMG

IL GESTIONA LE DI QUI STAVO PARLANDO IN REALTA NON ERA UN APPLICAZIONE
GESTIONALE COME SI INTENDE DI SOLITO(PROBABILMENTE MI SONO ESPRESSO MALE)
ERA UN'APPLICAZIONE CHE GENERAVA APPLICATIVI GESTIONALI E TE LO ASSICURO HO
SI FACCEVA IN C O IN BASIC. DOVEVA GESTIRE UNA INTERFACCIA GRAFICA NON MOLTO
AVANZATA MA ABBASTANZA COMPLESSA DA GESTIRE VISTO CHE PERMETEVA LA CREAZIONE
DI VERE E PROPRIE SCHERMATE DI DATI CON LA POSSIBILITA DI POSIZIONARE TASTI
E ZONE EDITABILI NON SO SE RENDO L'IDEA.
COMUNQUE SCUSA SE SCRIVO CON LE MAIUSCOLE MA SONO GIA PARTITO E NON MI VA DI
RISCRIVERE TUTTO.
NONOSTANTE TUTTE LE CRITICHE FATTE NESSUNO MI HA ANCORA FATTO VEDERE CODICE
C HARDCORE O ANCHE C++
STO ASPETTANDO.
CIAO 
RI...@EUROMEDIA.IT

 C HARDCORE O ANCHE C++
In che senso? Comunque quelle fatte non erano affatto critiche ma solo
inevitabili correzioni, dato il codice errato che hai riportato.
EMG

Sannao anche state inevitabili corezioni al mio codice ma io avevo precisato
dall'inizio che quel codice era un semplice prototipo che andava migliorato
comunque poco importa. l'importante che sia stato migliorato(forse ) ma
comunque appena avro più tempo a disposizione lo testero e vi mandero un
aversione inserita all'interno di un programma.
Sinceramente le tue corezione non mi sono stati molto utili in quanto non ho
avuto modo di testare nessuno dei codici implementati. e poi comunque io
ormai sono troppo abituato alla vita comoda del VC6
e non tratto più molto la programmazione a quei livelli. Adesso lavoro
esclusivamente con le MFC.
Vorei sapere se tu hai mai avuto a che fare con le interfacce OLE
se si gradirei sapere se è possibile creare delle classi che vengono
registrate dinamicamente ed inserite all0interno di un Script Host (jscript
o vbscript).
Vorei creare un programma che permette la creazione di finestre sotto
windows e interfacciare le varie finestre ed i rispettivi oggetti con un
Script host (vorei fare una specie di Visual Basic primordiale senza grosse
pretese.
Gradirei qualunque suggerimento nei confronto di questo discorso. Grazie.
Ri...@euromedia.it

 Vorei sapere se tu hai mai avuto a che fare con le interfacce OLE
No, mi dispiace.
EMG


