Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C/C++] Errore grafica

  1. #1

    [C/C++] Errore grafica

    Utilizzando Turbo C++ ho scritto questo programma che dovrebbe stampare uno schermo bianco e dopo ritornare a Windows. Ma quando si esegue viene visualizzato uno schermo nero con alcune piccole righe di puntini colorate; quando in programma termina rimane solo uno schermo nero e in computer resta cosi! VVoVe:

    Ecco il programma:

    #include <stdio.h>
    #include <stdlib.h>

    unsigned int *vga;
    unsigned int i;

    int main()
    {
    asm{
    mov ax,0x13
    int 0x10
    };
    vga=(unsigned char *)0xA0000;
    for(i=0; i<64000; i++) vga[i]=255;
    getch();
    return EXIT_SUCCESS;
    }

    Cosa ho sbagliato? Aiuto :master:
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non puoi usare questo codice con Win32 ...

    Poteva andare su sistemi a 16 bit.

    Con Win32 non accedi alla memoria video direttamente con un puntatore.
    La gestione della memoria e' molto diversa e comunque l'accesso a quella video e' complesso ...

  3. #3
    Non ho capito quello che hai detto... :master:

    Io programmo a 16bit (Turbo C++ e x MS-DOS). Alla modalità grafica con gli interrupt ci accedo senza problemi, è la stampa del bianco e la terminazione della grafica che non mi riesce...
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Lavori a 16 bit ...?

    Ma il puntatore 0xA0000 non e' a 16 bit ...

    Quando si lavora a 16 bit, si usa la modalita' di indirizzamento della memoria segmentoffset ...

  5. #5
    Offset????

    Mi spiegheresti cos'è e come si usa o come si usa la Memoria 0xA0000 a 32 bit?
    Grazie!!!
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  6. #6
    Mi sono ricordato cosa sono gli offset!
    0xA000:0000 - 0xA000:FFFF giusto?

    ma l'unico problema è che non so come usarli!!!
    Aiutatemi (per favore)!!!
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Fallo in assembler usando i registri di segmento ...

    Inserisci in DS il segmento e utilizzi un qualsiasi registro indice per accedere alla memoria tramite l'offset.

    Se eseguito su un sistema operativo recente, la finestra DOS e' "emulata" e quindi la memoria video e' anch'essa emulata ...

    Questo tipo di programmazione e' molto obsoleta e non ha senso al giorno d'oggi ...

  8. #8
    Lo so che è obsoleta, ma voloevo creare qualche cosa di mio, invece di passare a librerire...

    Comunque la tua spiegazione è abbastanza tortuosa, mi farersi qualche esempio per schiarirmi le idee?
    grazie.
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non e' tortuosa ... e' che, scusa, non conosci gli argomenti di cui parliamo ...

    Sai cosa e' il registro DS ?

  10. #10
    Non arrabbiarti ma... non so' l'assembly, ha imparato solo ad inizializzare la grafica, credevo di poter programmare il resto in C.
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.