Un po' di effetto dimagrante (da 240 a 224 bytes) del post precedente mettendoci anche un po' di colore (certo..la palette non e' bellissima)
Ho tolto anche la dipendenza dai registri a 32 bit che non era necessaria
----------------------------------------------------------------------
org 100h ; serve solo per DOS per fare i file .COM
section .data
a: dq -2.0 ; minimo reale della finestra
b: dq -1.5 ; minimo immaginario della finestra
bb: dq -1.5 ; asdasd
da: dq 0.0078125 ; incremento parte reale ((1.2-(-2))/320px delta_a
db: dq 0.015 ; incremento parte immaginaria ((1.5-1.5))/200px delta_b
limite: dq 4.0 ; condizione di fuga
section .text
global _start ;must be declared for using gcc
_start:
; inizializza il modo 13h 320x200x8bpp (256 colori) SOLO PER DOS CON VGA
mov al, 13h
int 10h
; fa puntare direttamente alla memoria video SOLO PER DOS
mov ax, 0a000h
mov es, ax
mov di,319 ; dimensione dell'asse reale in pixel sullo schermo
loop_reale:
mov dx,199 ; dimensione dell'asse immaginario in pixel sullo schermo
; calcola a = a + delta_a
fstp st0
fld qword [a] ; mette a in st0
fld qword [da] ; mette l'incremento di a in st1
fadd st0,st1 ; a+da
fstp qword [a] ; mette il risultato in a
loop_immaginario:
; calcola b = b + delta_b
;fstp st0 ; resetta lo stack della FPU
fld qword [b] ; mette b in st0
fld qword [db] ; mette l'incremento di b in st1
fadd st0,st1 ; b+db
fstp qword [b] ; mette il risultato in b
; pulisce tutto lo stack del 387 (8 registri portati a zero)
;inizia la fase di calcolo
fstp st0
fld qword [a] ; mette a nello stack
fld qword [b] ; mette b nello stack
push cx ; salva il registro cx
mov cx,255 ; in cx ci sara' il contatore dei cicli di iterazioni di calcolo. Si parte da 256
fldZ ; mette stack st3 = 0. Sara' utilizzato come parte reale z.r = 0
fldZ ; mette stack st2 = 0. Sara' utilizzato come parte immaginaria z.i = 0
fldZ ; mette stack st1 = 0. Sara' utilizzato come parte reale quadrata z.r^2 = 0
fldZ ; mette stack st0 = 0. Sara' utilizzato come parte immaginaria quadrata z.i^2 = 0
l1: ; inizia il loop di calcolo piu' interno
fsubp st1,st0 ; sottrae z.i^2- e lo mette nello stack come st0.
fadd qword [a] ; aggiunge a ad st0
fstp st3 ; prende il valore di st3 con pop
fmulp st1,st0 ; moltiplica st0 ed st1 z.r*z.i
fadd st0,st0 ; moltiplica 2*st0 facendolo come una somma st0+st0
fadd qword [b] ; aggiunge ad st0 b ovvero 2*z.r+z.i+b
fld st1 ; mette st1 in st0 ovvero z.r
fmul st0,st0 ; quadrato di z.r
fld st1 ; mette st1 in st0 ovvero z.i
fmul st0,st0 ; quadrato di z.i
fld st1
fadd st0,st1 ; somma i due quadrati z.r^2+z.i^2
fcomp qword [limite]; compara st0 con il limite di calcolo 4
fstsw ax ; passa il valore di st0 al registro ax
sahf ; mette AH nelle flags
jae fine ; se ax e' sopra il valore di 4 allora esci dal ciclo di calcolo
dec ecx ; decrementa il contatore della iterazioni di calcolo
jnz l1 ; se ecx non e' zero continua il calcolo saltando alla label l1
fine:
ffree st5
ffree st4
ffree st3
ffree st2
ffree st1
ffree st0
; stampa il colore a seconda del valore di cx
push di
push bx
push dx
mov bx,dx ; in dx c'e' la coordinata schermo immaginaria
imul bx,320 ; viene moltiplicata per 320
add bx,di ; in cx c'e' la coordinata schermo reale
mov di,bx ; ha calcolato la posizione in memoria
mov [es:di],cl
pop dx
pop bx
pop di
pop cx
ritorna:
;controlla se siamo alla fine di un loop immaginario
dec dx
cmp dx,0
jnz loop_immaginario
; resetta la variabile immaginaria
fld qword [bb]
fstp qword [b]
;controlla se siamo alla fine di un loop reale
dec di
cmp di,0
jnz loop_reale
;esce dal programma
; aspetta la pressione di un tasto (SOLO DOS)
xor ah, ah
int 16h
; Rimette in modalita' testuale (SOLO DOS)
mov ax, 0003h
int 10h
ret
Visualizzazione post con etichetta FreeDos. Mostra tutti i post
Visualizzazione post con etichetta FreeDos. Mostra tutti i post
venerdì 29 aprile 2016
giovedì 28 aprile 2016
Mandelbrot Mode 13h
Ed ora qualcosa di completamente inutile...Mandelbrot in modo 13h della VGA. Il codice di base e' quello del precedente post riadattato per la visualizzazione grafica a 320x200x256 colori
Visto che per questa visualizzazione si usa l'accesso diretto alla memoria video ed un formato di eseguibile sotto DOS si deve usare DosBox oppure FreeDos in macchina virtuale (non si puo' invece usare DosEmu perche' di fatto questo programma non emula il processore ma si appoggia sul sistema sottostante per cui ogni gestione diretta della memoria crea conflitto con il sottostante sistema operativo)
-------------------------------------------------------------------------
org 100h ; serve solo per DOS per fare i file .COM
section .data
a: dq -2.0 ; minimo reale della finestra
b: dq -1.5 ; minimo immaginario della finestra
bb: dq -1.5 ; asdasd
da: dq 0.0078125 ; incremento parte reale ((1.2-(-2))/320px delta_a
db: dq 0.015 ; incremento parte immaginaria ((1.5-1.5))/200px delta_b
limite: dq 4.0 ; condizione di fuga
cicli: dd 255 ; numero di cicli di iterazione per ogni punto
section .text
global _start ;serve a gcc
_start:
; inizializza il modo 13h 320x200x8bpp (256 colori) SOLO PER DOS CON VGA
mov al, 13h
int 10h
; fa puntare direttamente alla memoria video SOLO PER DOS
mov ax, 0a000h
mov es, ax
mov di,319 ; dimensione dell'asse reale in pixel sullo schermo
loop_reale:
mov dx,199 ; dimensione dell'asse immaginario in pixel sullo schermo
; calcola a = a + delta_a
fstp st0
fld qword [a] ; mette a in st0
fld qword [da] ; mette l'incremento di a in st1
fadd st0,st1 ; a+da
fstp qword [a] ; mette il risultato in a
loop_immaginario:
; calcola b = b + delta_b
;fstp st0 ; resetta lo stack della FPU
fld qword [b] ; mette b in st0
fld qword [db] ; mette l'incremento di b in st1
fadd st0,st1 ; b+db
fstp qword [b] ; mette il risultato in b
;inizia la fase di calcolo
fstp st0
fld qword [a] ; mette a nello stack
fld qword [b] ; mette b nello stack
push ecx ; salva il registro ecx
mov ecx,[cicli] ; in ecx ci sara' il contatore dei cicli di iterazioni di calcolo. Si parte da 256
fldZ ; mette stack st3 = 0. Sara' utilizzato come parte reale z.r = 0
fldZ ; mette stack st2 = 0. Sara' utilizzato come parte immaginaria z.i = 0
fldZ ; mette stack st1 = 0. Sara' utilizzato come parte reale quadrata z.r^2 = 0
fldZ ; mette stack st0 = 0. Sara' utilizzato come parte immaginaria quadrata z.i^2 = 0
l1: ; inizia il loop di calcolo piu' interno
fsubp st1,st0 ; sottrae z.i^2- e lo mette nello stack come st0.
fadd qword [a] ; aggiunge a ad st0
fstp st3 ; prende il valore di st3 con pop
fmulp st1,st0 ; moltiplica st0 ed st1 z.r*z.i
fadd st0,st0 ; moltiplica 2*st0 facendolo come una somma st0+st0
fadd qword [b] ; aggiunge ad st0 b ovvero 2*z.r+z.i+b
fld st1 ; mette st1 in st0 ovvero z.r
fmul st0,st0 ; quadrato di z.r
fld st1 ; mette st1 in st0 ovvero z.i
fmul st0,st0 ; quadrato di z.i
fld st1
fadd st0,st1 ; somma i due quadrati z.r^2+z.i^2
fcomp qword [limite]; compara st0 con il limite di calcolo 4
fstsw ax ; passa il valore di st0 al registro ax
sahf ; mette AH nelle flags
jae fine ; se ax e' sopra il valore di 4 allora esci dal ciclo di calcolo
dec ecx ; decrementa il contatore della iterazioni di calcolo
jnz l1 ; se ecx non e' zero continua il calcolo saltando alla label l1
fine:
ffree st5
ffree st4
ffree st3
ffree st2
ffree st1
ffree st0
cmp ecx,0 ; controlla se si e' raggiunto il limite dei cicli di iterazione
je putpixel ; se e' zero stampa uno spazio
pop ecx
ritorna:
;controlla se siamo alla fine di un loop immaginario
dec dx
cmp dx,0
jnz loop_immaginario
; resetta la variabile immaginaria
fld qword [bb]
fstp qword [b]
;controlla se siamo alla fine di un loop reale
dec di
cmp di,0
jnz loop_reale
;esce dal programma
; aspetta la pressione di un tasto (SOLO DOS)
xor ah, ah
int 16h
; Rimette in modalita' testuale (SOLO DOS)
mov ax, 0003h
int 10h
ret
putpixel: ; scrive un pixel direttamente sulla memoria VGA
push di
push bx
push dx
mov bx,dx ; in dx c'e' la coordinata schermo immaginaria
imul bx,320 ; viene moltiplicata per 320
add bx,di ; in cx c'e' la coordinata schermo reale
mov di,bx ; ha calcolato la posizione in memoria
mov dl,7
mov [es:di],dl
pop dx
pop bx
pop di
jmp ritorna
-------------------------------------------------------------------------
il programma compilato con nasm (disponibile sia per Linux che per Dos) e' lungo 240 bytes
Per correggere gli errori non si puo' fare debug sotto Linux perche' ddd (ovviamente) non riconosce il formato .COM. Per questo motivo mi sono ricostruito un ambiente di sviluppo in Freedos in macchina virtuale sotto VMWare
Visto che non e' banalissimo usare Freedos un po' di appunti su come installarlo su VMWare. Per prima cosa di monta la .iso del Cd di Freedos e si formatta il disco C:. Al termine l'installer richiede il riavvio del sistema ma ci si trova di fronte alla schermata sottostante perche' VMWare e' ripartito dal disco fisso dove non e' ancora stato installato il sistema
Da qui in poi l'installazione e' banale...rimane il problema di installare il software in un sistema come il DOS che ha pochissima confidenza con le chiavette USB ed il TCP/IP.La soluzione che ho trovato piu' semplice e' stata quella di inserire tutto il software DOS che mi serviva (Volkov Commander, Nasm e Turbo Debugger) in una cartella, convertire la cartella in un file .iso con AnyToIso ed inserire il file .iso del CD virtuale di VMWare.
Fatta partire la macchina virtuale, dal prompt di Dos, si digita (vedi questo link)
devload uide.sys /N3 /D:CDROM01
il Cdrom sara' su D: e si possono copiare il file su C:. I file copiati saranno tutti read-only per cui si deve usare il programma ATTRIB per togliere il flag
Visto che per questa visualizzazione si usa l'accesso diretto alla memoria video ed un formato di eseguibile sotto DOS si deve usare DosBox oppure FreeDos in macchina virtuale (non si puo' invece usare DosEmu perche' di fatto questo programma non emula il processore ma si appoggia sul sistema sottostante per cui ogni gestione diretta della memoria crea conflitto con il sottostante sistema operativo)
-------------------------------------------------------------------------
org 100h ; serve solo per DOS per fare i file .COM
section .data
a: dq -2.0 ; minimo reale della finestra
b: dq -1.5 ; minimo immaginario della finestra
bb: dq -1.5 ; asdasd
da: dq 0.0078125 ; incremento parte reale ((1.2-(-2))/320px delta_a
db: dq 0.015 ; incremento parte immaginaria ((1.5-1.5))/200px delta_b
limite: dq 4.0 ; condizione di fuga
cicli: dd 255 ; numero di cicli di iterazione per ogni punto
section .text
global _start ;serve a gcc
_start:
; inizializza il modo 13h 320x200x8bpp (256 colori) SOLO PER DOS CON VGA
mov al, 13h
int 10h
; fa puntare direttamente alla memoria video SOLO PER DOS
mov ax, 0a000h
mov es, ax
mov di,319 ; dimensione dell'asse reale in pixel sullo schermo
loop_reale:
mov dx,199 ; dimensione dell'asse immaginario in pixel sullo schermo
; calcola a = a + delta_a
fstp st0
fld qword [a] ; mette a in st0
fld qword [da] ; mette l'incremento di a in st1
fadd st0,st1 ; a+da
fstp qword [a] ; mette il risultato in a
loop_immaginario:
; calcola b = b + delta_b
;fstp st0 ; resetta lo stack della FPU
fld qword [b] ; mette b in st0
fld qword [db] ; mette l'incremento di b in st1
fadd st0,st1 ; b+db
fstp qword [b] ; mette il risultato in b
;inizia la fase di calcolo
fstp st0
fld qword [a] ; mette a nello stack
fld qword [b] ; mette b nello stack
push ecx ; salva il registro ecx
mov ecx,[cicli] ; in ecx ci sara' il contatore dei cicli di iterazioni di calcolo. Si parte da 256
fldZ ; mette stack st3 = 0. Sara' utilizzato come parte reale z.r = 0
fldZ ; mette stack st2 = 0. Sara' utilizzato come parte immaginaria z.i = 0
fldZ ; mette stack st1 = 0. Sara' utilizzato come parte reale quadrata z.r^2 = 0
fldZ ; mette stack st0 = 0. Sara' utilizzato come parte immaginaria quadrata z.i^2 = 0
l1: ; inizia il loop di calcolo piu' interno
fsubp st1,st0 ; sottrae z.i^2- e lo mette nello stack come st0.
fadd qword [a] ; aggiunge a ad st0
fstp st3 ; prende il valore di st3 con pop
fmulp st1,st0 ; moltiplica st0 ed st1 z.r*z.i
fadd st0,st0 ; moltiplica 2*st0 facendolo come una somma st0+st0
fadd qword [b] ; aggiunge ad st0 b ovvero 2*z.r+z.i+b
fld st1 ; mette st1 in st0 ovvero z.r
fmul st0,st0 ; quadrato di z.r
fld st1 ; mette st1 in st0 ovvero z.i
fmul st0,st0 ; quadrato di z.i
fld st1
fadd st0,st1 ; somma i due quadrati z.r^2+z.i^2
fcomp qword [limite]; compara st0 con il limite di calcolo 4
fstsw ax ; passa il valore di st0 al registro ax
sahf ; mette AH nelle flags
jae fine ; se ax e' sopra il valore di 4 allora esci dal ciclo di calcolo
dec ecx ; decrementa il contatore della iterazioni di calcolo
jnz l1 ; se ecx non e' zero continua il calcolo saltando alla label l1
fine:
ffree st5
ffree st4
ffree st3
ffree st2
ffree st1
ffree st0
cmp ecx,0 ; controlla se si e' raggiunto il limite dei cicli di iterazione
je putpixel ; se e' zero stampa uno spazio
pop ecx
ritorna:
;controlla se siamo alla fine di un loop immaginario
dec dx
cmp dx,0
jnz loop_immaginario
; resetta la variabile immaginaria
fld qword [bb]
fstp qword [b]
;controlla se siamo alla fine di un loop reale
dec di
cmp di,0
jnz loop_reale
;esce dal programma
; aspetta la pressione di un tasto (SOLO DOS)
xor ah, ah
int 16h
; Rimette in modalita' testuale (SOLO DOS)
mov ax, 0003h
int 10h
ret
putpixel: ; scrive un pixel direttamente sulla memoria VGA
push di
push bx
push dx
mov bx,dx ; in dx c'e' la coordinata schermo immaginaria
imul bx,320 ; viene moltiplicata per 320
add bx,di ; in cx c'e' la coordinata schermo reale
mov di,bx ; ha calcolato la posizione in memoria
mov dl,7
mov [es:di],dl
pop dx
pop bx
pop di
jmp ritorna
-------------------------------------------------------------------------
il programma compilato con nasm (disponibile sia per Linux che per Dos) e' lungo 240 bytes
Per correggere gli errori non si puo' fare debug sotto Linux perche' ddd (ovviamente) non riconosce il formato .COM. Per questo motivo mi sono ricostruito un ambiente di sviluppo in Freedos in macchina virtuale sotto VMWare
Turbo Debugger in FreeDos |
Visto che non e' banalissimo usare Freedos un po' di appunti su come installarlo su VMWare. Per prima cosa di monta la .iso del Cd di Freedos e si formatta il disco C:. Al termine l'installer richiede il riavvio del sistema ma ci si trova di fronte alla schermata sottostante perche' VMWare e' ripartito dal disco fisso dove non e' ancora stato installato il sistema
Si deve entrare nel Bios di VMware ed impostare l'ordine di avvio dei dispositivi...peccato che la schermata e' velocissima ed e' praticamente impossibile trovare l'attimo giusto per premere ESC all'avvio. La soluzione piu' semplice e' quella di editare il file in Documenti/My Virtual Machines/MS-DOS/MS_DOS.vmx ed aggiungere la riga
bios.bootDelay = "5000"
per ritardare il boot di 5 secondi ed avere il tempo di premere ESC
Fatta partire la macchina virtuale, dal prompt di Dos, si digita (vedi questo link)
devload uide.sys /N3 /D:CDROM01
shsucdx /D:CDROM01
il Cdrom sara' su D: e si possono copiare il file su C:. I file copiati saranno tutti read-only per cui si deve usare il programma ATTRIB per togliere il flag
venerdì 21 dicembre 2012
FreeDos in VirtualBox
Sempre piu' spesso mi capita di dover ritirare fuori dei vecchi programmi in Dos che al momento si rifiutano di girare sui moderni Windows
A questo punto (avevo gia' provato con Qemu) e' il turno di VirtualBox di far girare Freedos
Per prima cosa i settaggi di base
Ram 32 Mb
Disco fisso 200 Mb
Cd l'immagine di FreeDos 1.1
attenzione a come si imposta la scheda di rete virtuale. Per l'uso successivo e' meglio scegliere Bridged
la prima cosa da fare una volta avviata e' creare il disco C (opzione 2)
scegliendo poi "Create Dos Partition/Create Primary Dos Partition" ed Esc fino al reboot della macchina
Una volta ripartita la macchina virutale si sceglie l'opzione 1 "Install to HardDisk"
ci sara' una serie di errori di bad sector .. non c'e' da preoccuparsi
una volta riconquistato il controllo si formatta il disco fisso virtuale
si inizia l'installazione e si continua ad andare avanti fino alla scelta dei moduli in cui si aggiungono quelli net e gui
L'installazione di base e' terminata ma c'e' un ulteriore passo da fare. Non esistono le Guest Additions per Dos per cui per inserire dei programmi o dei file nella macchina virtuali questi devono essere fatti passare attraverso la rete virtuale via FTP per cui si procede alla configurazione della rete stessa e del server FTP
Per abilitare la rete virtuale si deve editare il file autoexec.bat
rimuovendo il REM all'inizio della riga che ha LH PCNTPK e rimuovendo il REM all'inizio della riga che ha DHCP (se si ha un DHCP server attivo)
Per configurare il Server Ftp si copia il file di configurazione
copy C:\FDOS\DOC\MTCP\SAMPLE.CFG C:\FDOS\MTCP.CFG
e si edita
edit C:\fdos\mtcp.cfg
cambiando i parametri
MTU 1472
e rimuovendo i REM dalle righe seguenti
ftpsrv_password_file c:\ftppass.txt
ftpsrv_log_file c:\ftpsrv.log
FTPSRV_FILEBUFFER_SIZE 16
FTPSRV_TCPBUFFER_SIZE 16
FTPSRV_PACKETS_PER_POLL 2
a questo punto si crea il file c:\ftppass.txt
edit c:\ftppass.txt
mettendo una riga come segue
luca password [none] [any] all
A questo punto (avevo gia' provato con Qemu) e' il turno di VirtualBox di far girare Freedos
Per prima cosa i settaggi di base
Ram 32 Mb
Disco fisso 200 Mb
Cd l'immagine di FreeDos 1.1
attenzione a come si imposta la scheda di rete virtuale. Per l'uso successivo e' meglio scegliere Bridged
la prima cosa da fare una volta avviata e' creare il disco C (opzione 2)
scegliendo poi "Create Dos Partition/Create Primary Dos Partition" ed Esc fino al reboot della macchina
Una volta ripartita la macchina virutale si sceglie l'opzione 1 "Install to HardDisk"
ci sara' una serie di errori di bad sector .. non c'e' da preoccuparsi
una volta riconquistato il controllo si formatta il disco fisso virtuale
si inizia l'installazione e si continua ad andare avanti fino alla scelta dei moduli in cui si aggiungono quelli net e gui
L'installazione di base e' terminata ma c'e' un ulteriore passo da fare. Non esistono le Guest Additions per Dos per cui per inserire dei programmi o dei file nella macchina virtuali questi devono essere fatti passare attraverso la rete virtuale via FTP per cui si procede alla configurazione della rete stessa e del server FTP
Per abilitare la rete virtuale si deve editare il file autoexec.bat
rimuovendo il REM all'inizio della riga che ha LH PCNTPK e rimuovendo il REM all'inizio della riga che ha DHCP (se si ha un DHCP server attivo)
Per configurare il Server Ftp si copia il file di configurazione
copy C:\FDOS\DOC\MTCP\SAMPLE.CFG C:\FDOS\MTCP.CFG
e si edita
edit C:\fdos\mtcp.cfg
cambiando i parametri
MTU 1472
e rimuovendo i REM dalle righe seguenti
ftpsrv_password_file c:\ftppass.txt
ftpsrv_log_file c:\ftpsrv.log
FTPSRV_FILEBUFFER_SIZE 16
FTPSRV_TCPBUFFER_SIZE 16
FTPSRV_PACKETS_PER_POLL 2
a questo punto si crea il file c:\ftppass.txt
edit c:\ftppass.txt
mettendo una riga come segue
luca password [none] [any] all
nb: i campi sono separati da un tabulatore
il server Ftp si lancia con il comando
ftpsrv
e dovrebbe apparire una schermata come la seguente
con Filezilla si puo' quindi interagire con il server (in questo caso all'indirizzo 10.200.3.94)
e dopo tanta fatica si puo' usare il programma DOS di cui si aveva bisogno
venerdì 14 settembre 2012
FreeDos in Qemu
Per installare FreeDos in QEmu la procedura e' abbastanza semplice
prima si crea un file della dimensione voluta del futuro C:\ (in questo caso 400 Mb) e si scarica il file fdfullcd.iso dal sito di FreeDos
dd if=/dev/zero of=freedosfile.img bs=1024 count=400000
successivamente si lancia l'emulatore indicando il supporto di installazione nel cdrom e specificando di fare il boot da D
qemu -cdrom fdfullcd.iso -hda freedosfile.img -boot d
si seguono quindi le istruzioni a schermo
Per avviare la macchina una volta terminato il processo e' sufficiente
qemu -hda freedosfile.img -boot c
Uno dei problemi con QEmu/FreeDos e' quello di non poter indicare in modo semplice una cartella condivisa tra il sistema Guest e quello Host in modo da inserire i file di installazione dei futuri programmi
Leggendo su Internet molti settano QEmu per gestire una rete virtuale ed effettuano un collegamento di rete tra Host e Guest
per me e' stata piu' semplice inserire i file dei programmi su una chiavetta USB e poi creare una immagine img della chiavetta mediante il seguente comando
dd if=/dev/sdb of=/home/luca/qemu/usb.img bs=1024
a questo punto si puo' lanciare QEmu indicando nel disco D: l'immagine della chiavetta
qemu -hda freedos.img -hdb usb.img -boot c
Nell'immagine di FreeDos completa sono inclusi molti software compreso OpenGem. Prima di poterlo utilizzare deve essere pero' installato. Per farlo si deve andare nella cartella FDos/OpenGem e far partire l'installazione
Ovviamente poter usare nell'emulatore un programma che e' stato tuo compagno per almeno 5 anni non ha prezzo e quindi via con l'installazione di Turbo Pascal 5
Per il funzionamento del Turbo Pascal 5 e' importante selezionare l'opzione 1 al boot di FreeDos
Dopo l'installazione dei dischetti il rassicurante schermo blu e bianco della IDE di Turbo Pascal
Fa abbastanza impressione vedere funzionare dopo tanto tempo l'esempio BGIDemo
Quasi quasi provo ad installare Fractint.........................
prima si crea un file della dimensione voluta del futuro C:\ (in questo caso 400 Mb) e si scarica il file fdfullcd.iso dal sito di FreeDos
dd if=/dev/zero of=freedosfile.img bs=1024 count=400000
successivamente si lancia l'emulatore indicando il supporto di installazione nel cdrom e specificando di fare il boot da D
qemu -cdrom fdfullcd.iso -hda freedosfile.img -boot d
si seguono quindi le istruzioni a schermo
Per avviare la macchina una volta terminato il processo e' sufficiente
qemu -hda freedosfile.img -boot c
Uno dei problemi con QEmu/FreeDos e' quello di non poter indicare in modo semplice una cartella condivisa tra il sistema Guest e quello Host in modo da inserire i file di installazione dei futuri programmi
Leggendo su Internet molti settano QEmu per gestire una rete virtuale ed effettuano un collegamento di rete tra Host e Guest
per me e' stata piu' semplice inserire i file dei programmi su una chiavetta USB e poi creare una immagine img della chiavetta mediante il seguente comando
dd if=/dev/sdb of=/home/luca/qemu/usb.img bs=1024
a questo punto si puo' lanciare QEmu indicando nel disco D: l'immagine della chiavetta
qemu -hda freedos.img -hdb usb.img -boot c
Prompt di FreeDos |
Open Gem |
Ovviamente poter usare nell'emulatore un programma che e' stato tuo compagno per almeno 5 anni non ha prezzo e quindi via con l'installazione di Turbo Pascal 5
Per il funzionamento del Turbo Pascal 5 e' importante selezionare l'opzione 1 al boot di FreeDos
Dopo l'installazione dei dischetti il rassicurante schermo blu e bianco della IDE di Turbo Pascal
Fa abbastanza impressione vedere funzionare dopo tanto tempo l'esempio BGIDemo
BGIDemo Turbo Pascal |
Quasi quasi provo ad installare Fractint.........................
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...