Le chiamate di sistema (System Calls)
![]()
MS-DOS gira solo su processori Intel iAPx86; nondimeno, poiché di questi ne esistono cinquanta milioni, senza dubbio MS-DOS è il sistema operativo più usato di tutti i tempi.
Il primo personal computer fu Altair, prodotto nel 1975 da una ditta
chiamata MITS di Albuquerque nel New Mexico. Esso era fornito di una CPU Intel 8080 ed aveva 256 Kbyte di RAM.
Un giovane di nome Bill Gates scrisse una versione di BASIC per Altair ed ebbe un modesto
seguito tra i primi utenti di queste macchine.
Nel giro di pochi anni, molte ditte iniziarono a costruire personal computer basati sul
chip 8080; su di questi girava un sistema operativo chiamato CP/M (Control Program
for Microcomputer) prodotto dalla Digital Research, una piccola casa produttrice della
California.
Tutti questi personal computer furono chiamati microcomputer.
Intorno al 1980, lIBM, decise che quella dei personal computer
era unarea in cui avrebbe voluto operare; per cui fece qualcosa di insolito per le
normali burocrazie e precauzioni interne: incaricò uno dei suoi manager Philipe Estridge,
di andare a Boca Raton, in Florida, duemila Km lontano da sguardi indiscreti, dalla
Corporate Headquarter nel Westchester Country, nello stato di New York, e gli disse di non
tornare senza un personal computer.
Estridge decise che il solo modo per produrre velocemente un PC era usare componenti
standard, piuttosto che progettarne propri allIBM, come la ditta aveva sempre fatto
in passato. Nel frattempo lIntel aveva prodotto due successori dell8080,
l8086 e una versione con un Bus a otto bit dell8086, l8088. Estridge scelse questultimo perché era
composto da chip che erano sostanzialmente più economici.
LIBM, per il software, fece riferimento a Bill Gates, che nel frattempo aveva messo
su una casa di software chiamata Microsoft, e gli chiese la licenza dellinterprete
BASIC da usare sul PC IBM e chiese anche se per caso avesse un sistema operativo per la
macchina.
Gates suggerì allIBM di usare il sistema operativo CP/M-86 della Digital Research,
ma, dopo aver parlato con questi ultimi, scoprì che il CP/M-86 era ancora in fase di
sviluppo e lIBM non poteva attendere.
A questo punto lIBM tornò alla Microsoft e chiese se avrebbero potuto scrivere un
sistema operativo simile al CP/M. Gates sapeva che non cera il tempo necessario per
prendere questo impegno, ma sapeva anche di una casa produttrice vicina, la Seattle
Computer Products, che aveva scritto un sistema operativo dello stesso tipo del CP/M,
chiamato 86-DOS, innanzi tutto per verificare i limiti di una memoria che aveva in
produzione ed in vendita.
La Microsoft comprò 86-DOS; nellaprile del 1981 assunse il suo autore, Tim
Paterson, per migliorarlo; cambiò il nome del sistema operativo in MS-DOS e lo vendette
allIBM.
Quando fu presentato, nellagosto del 1981, il PC IBM era dotato del suo sistema
operativo, lMS-DOS, la virtù principale è che vi poteva girare la maggior parte
del software che andava sull8080 sotto CP/M.
Se qualcuno avesse intuito che nel giro di dieci anni questo piccolo sistema, adottato
quasi casualmente, avrebbe controllato cinquanta milioni di computer, avrebbe anche
pensato di studiarlo più approfonditamente. In tutta onestà, comunque, né lIBM
né nessun altro ebbe la percezione di quanto grande sarebbe stato il successo del PC IBM
e, allinizio, pensò che sarebbe stato usato per girare con i videogiochi a casa.
Per esempio, il clock a 4.77 MHz fu scelto per essere compatibile con la frequenza dei
televisori degli Stati Uniti, in modo tale che la gente potesse usare il monitor della TV
invece che uno proprio del computer.
La cosa più giusta che lIBM fece fu di lasciare il PC come sistema aperto;
infatti il progetto completo, compresi i listati della ROM e gli schemi dei circuiti
elettrici, erano descritti nei minimi particolari in un libro disponibile presso i
rivenditori di PC. Questo significava che venditori software e hardware OEM (Original
Equipment Manufactures) potevano fare nuovi prodotti hardware e software da aggiungere al
PC e fu ciò che fecero a migliaia.
Infatti, con la disponibilità dei disegni dei circuiti e con la macchina interamente
composta da componenti disponibili in commercio, alcune ditte cominciarono a costruire e a
vendere delle copie del PC, chiamate cloni, in competizione diretta con la stessa
IBM.
Questa enorme profusione di energie e creatività portò al successo del PC e con esso al
successo dellMS-DOS.
La prima versione dellMS-DOS uscita nellagosto del 1981
con il PC IBM era la versione 1.0, occupava 12 Kbyte ed era compatibile con il CP/M. Il
codice sorgente era formato da 4000 righe di codice assembly, e il solo disco che
supportava era un floppy disk da 5" 1/4 da 160 Kbyte.
Il sistema operativo era formato da tre programmi: ibmio.com, il sistema di I/O del
disco e dei caratteri; ibmdos.com, il driver del disco e dei file; command.com,
linterprete dei comandi, una shell primitiva. A differenza di UNIX, che era stato
sempre completamente indipendente, MS-DOS ha sempre fatto uso di una ROM installata sul PC
IBM, chiamata BIOS (Basic Input Output System) che contiene i driver per i
dispositivi standard, per cui con una semplice chiamata MS-DOS può gestire
linput/output. Laddove UNIX contiene i driver per lI/O da terminale, dai
dischi ecc., MS-DOS usava per gli stessi scopi il BIOS.
La versione 1.0 utilizzava una sola directory, come il CP/M; al contrario persino la prima
versione di UNIX era fornita di un file system gerarchico. Aveva la capacità di gestire
shell script molto semplici, chiamati batch file.
Nellottobre del 1982, la Microsoft distribuì la versione 1.1 di MS-DOS, che
supportava floppy disk da 320 Kbyte.
La versione 2.0
Nel marzo del 1983, lIBM presentò il PC XT, il suo primo
personal computer fornito di un hard disk e con la nuova versione di MS-DOS, la 2.0, che
rappresentava un taglio netto con il passato. La Microsoft lo riscrisse interamente
integrandolo con molte idee prese da UNIX. Per esempio, il file system di MS-DOS fu basato
molto su quello di UNIX, con un piccolo numero di modifiche (per esempio, luso di \
al posto di / come componente separatore). Nondimeno, ora, erano presenti le
chiamate di sistema OPEN, READ, WRITE e CLOSE nella stessa forma di UNIX, utilizzando,
cioè, il descrittore di file (non presente nella versione 1.0). Era migliorata anche la
shell che poteva gestire la ridirezione dello standard input e output e supportava la
pipeline e i filtri.
Le altre possibilità erano: il formato del floppy da 360 Kbyte, i driver di dispositivi
installabili dallutente, lo spool di stampa, la possibilità di descrivere la
configurazione del sistema, la gestione della memoria e la shell personalizzata.
MS-DOS raggiunse la dimensione di 20000 righe di codice assembly
ed eliminò decisamente il CP/M, autodefinendosi il sistema operativo dominante per il PC.
Poiché lhard disk offrì la possibilità di utilizzare molte applicazioni di grosse
dimensioni, il PC XT trasferì linteresse per i personal computer dallambiente
casalingo al mondo degli affari. Piccole, medie e grandi imprese cominciarono ad
acquistare i PC.
Microsoft per le applicazioni commerciali dovette produrre la versione 2.05, che teneva
conto anche dellora, della data, della valuta e dei simboli decimali di molte
nazioni (per esempio il codice giapponese Kanji a sedici bit). Seguì a novembre dello
stesso anno la 2.1 introdotta per il PC jr, ed infine mise insieme queste due ultime
versioni sotto il nome di 2.11.
La versione 3.0
Nellagosto del 1984 lIBM portò sul mercato il PC AT, il
suo primo personal computer basato sul chip 286;
esso era fornito di una memoria di sedici Mbyte, aveva una modalità utente e kernel, una
modalità di protezione e la capacità di eseguire più programmi contemporaneamente. La
versione di MS-DOS montata sul PC AT era la 3.0 e non supportava nessuna di queste
caratteristiche, al contrario girava in una modalità che simulava l8088 ed era solo
più veloce.
Poiché il PC AT poteva utilizzare il floppy da 1.2 Mbyte, un clock a batteria tampone e
linformazione di configurazione in CMOS, fu aggiunto un supporto per questi
dispositivi. Inoltre, ora, erano supportati hard disk fino a 32 Mbyte. In più,
linterprete dei comandi (la shell) fu rimossa dal sistema operativo e realizzata in
un programma separato, in modo che gli utenti la potessero sostituire con una versione
personalizzata; tutto ciò fece aumentare le dimensioni del codice fino a 40000 righe.
La versione 3.0 fu sostituita dalla 3.1 nel novembre del 1984 con la novità di fornire un
supporto per le reti.
La successiva fu la 3.2 presentata a gennaio del 1986; essa supportava floppy da 3"
½ e la rete IBM Token Ring. Nel mese di aprile 1986 lIBM portò sul mercato il
successore della linea PC, la famiglia dei PS/2, presentata con floppy da 3" ½ da
720 Kbyte per le versioni più piccole e da 1.44 Mbyte per quelle più grandi. Il PS/2 che
era dotato della versione 3.3 supportava questi nuovi formati, altri formati
internazionali, e anche le linee seriali che operavano a 19200 bps.
Insieme con il PS/2 e la versione 3.3 di MS-DOS, lIBM e la Microsoft distribuirono
un sistema operativo completamente nuovo, chiamato OS/2
(Operating System). Secondo queste ditte, OS/2 avrebbe sostituito MS-DOS, ma ciò non
accadde mai; infatti nonostante avesse molti vantaggi, come lutilizzo completo della
memoria, lesecuzione in modalità protetta e la possibilità di adottare la
multiprogrammazione, gli utenti non furono interessati al suo uso.
Nel 1991, la Microsoft comunicò che stava disinteressandosi del tutto di OS/2, il che
irritò talmente lIBM da indurla a firmare un contratto con la Apple Computer quale
fornitore del futuro software, interrompendo i contatti commerciali con la Microsoft.
La versione 4.0
Constatando che il grosso successo atteso dellOS/2 non avvenne
mai, lIBM sorprese tutti realizzando una nuova versione di MS-DOS, la 4.0, che
successivamente la Microsoft riadattò per distribuirla ai costruttori di cloni PC. Questo
evento fece intendere allIBM che MS-DOS non stava scomparendo, così, invece di
abbandonarlo, decise di renderlo decisamente migliore. Uno dei grossi miglioramenti
introdotti in questa versione fu la capacità di gestire hard disk fino a 2 Gbyte.
Molti utenti, specialmente i principianti, nel migliore dei casi pensano che le linee di
comando siano ermetiche e nel peggiore dei casi pensano che siano ostili, probabilmente
anche peggio di UNIX, la cui shell è stata raramente ritenuta piacevole per i
principianti. Per rendere la vita più facile a queste persone, MS-DOS, a partire da
questa versione, presentò unalternativa: linterfaccia orientata al video
chiamata dosshell. Essa elenca tutti i file e le directory in finestre e permette
agli utenti di fare una notevole quantità di lavoro puntando e selezionando semplicemente
con il mouse.
Sebbene non sia uninterfaccia utente grafica ben chiara come Windows,
questo è stato il primo passo in quella direzione.
La versione 5.0
La versione 5.0 di MS-DOS fu presentata nellaprile del 1991.
Per la prima volta era fatto un uso serio della memoria estesa di cui molti proprietari di
286 e 386 avevano parecchi megabyte. Sebbene
essa avesse la restrizione che i programmi non potevano eccedere i 640 Kbyte, almeno aveva
la capacità di allocare la maggior parte dellMS-DOS stesso sulla memoria estesa, così circa 600K dei 640K erano disponibili per i
programmi utenti. Inoltre, i driver dei dispositivi scritti dagli utenti potevano essere
messi anche nella memoria estesa. Questa versione aveva anche la capacità di usare la
memoria tra 640K e 1M sulle macchine 386 per i driver dei dispositivi ed alcuni programmi
di utilità mettendo a disposizione molto di più di 640K. Supportava floppy da 2.88
Mbyte.
A partire da questa versione presentò un programma doskey (history list di UNIX)
che poteva essere installato per recepire e bufferizzare tutte le battute dei tasti;
intercettando le interruzioni da tastiera esaminava tutti i caratteri digitati prima che
essi fossero passati al sistema operativo. In questo modo si potevano usare scorciatoie ed
altri accorgimenti passando righe precedenti di comando, con o senza editing, a command.com
come se essi giungessero direttamente dalla tastiera; inoltre riciclando i comandi
precedenti, doskey, permetteva agli utenti anche di definire della macro
In origine, MS-DOS era strettamente un sistema monotasking. Comunque, dalla versione 5.0,
era possibile far partire un comando (con un doppio click sul nome di file), e poi
sospenderlo premendo CTRL + ESC. A questo punto ricompare la finestra dosshell con
il nome del programma sospeso nella finestra Lista dei processi Attivi (Active Task
List); ora lutente è libero di eseguire qualsiasi comando, compreso far partire un
altro programma, che a sua volta può essere sospeso allo stesso modo. Tutti i programmi
sospesi sono elencati in questa finestra e con un doppio click su uno di essi, il
programma prescelto riparte. Sebbene non sia la stessa cosa della multiprogrammazione
(più processi indipendenti che girano in parallelo), è una buona seconda scelta.
Questa versione offriva un programma HELP di aiuto per i nuovi utenti e molti nuovi
programmi di utilità e nuovi comandi.
Per la prima volta, la versione 5.0 di MS-DOS fu venduta nei negozi (fino a quel momento
tutte le versioni erano state vendute dai rivenditori di computer che le consegnavano
insieme alle macchine) e questo fu interpretato come unassunzione di responsabilità
da parte della Microsoft.
La versione 6.0
La versione 6.0 di MS-DOS fu presentata nel 1993, include le seguenti caratteristiche.
Comando Setup per l'installazione.
DoubleSpace, un programma integrato di compressione dischi.
MemMaker, un programma di ottimizzazione della memoria che consente di spostare in modo semplice i driver di periferica ed i programmi residenti in memoria dalla convenzionale allarea di memoria superiore.
Defrag, un nuovo programma che riorganizza i file sullhard disk per ridurre il tempo di accesso del computer ai file.
Scandisk, per rilevare e correggere errori dei dischi.
Smartdrv, comando avanzato con cache per CD-ROM.
Un nuovo comando move che sposta uno o più file da una directory o unità ad unaltra.
Il comando deltree che elimina una sottodirectory, i suoi file e tutte le directory ed i file ad essa subordinati.
MSD (Microsoft Diagnostics), che raccoglie e visualizza informazioni tecniche sul PC.
Interlnk, un programma che semplifica il trasferimento di file tra computer.
La Guida in linea sui comandi di tipo ipertestuale.
Nuovi comandi: backup per Windows, msav antivirus per MS-DOS e per Windows, undelete per Windows, choice, diskcopy in una sola passata. Occupazione 6.3 Mbyte.
La possibilità di definire più configurazioni del sistema, particolarmente utile se si condivide il computer con più utenti, la possibilità di avviare il sistema senza eseguire config.sys ed autoexec.bat: F5, di chiedere conferma per ciascun comando caricato: F8.
Attualmente è in uso la versione 6.2.
La versione 7.0
Nel 1995.
Qual è il futuro di MS-DOS?
Tecnicamente è del tutto obsoleto, però quando fu chiaro che lOS/2 non avrebbe
avuto seguito, la Microsoft fece una scelta diversa, sviluppando Windows
come interfaccia grafica orientata al mouse con MS-DOS.
Lidea fu la seguente: se non possiamo sbarazzarci di MS-DOS almeno cerchiamo di
camuffarlo. Mentre ciò è certamente vero per lutente finale, per qualsiasi altra
persona, che prova a programmare in MS-DOS, esso rimane il solito vecchio sistema e così
sarà per i prossimi anni a venire.
Daltra parte, lMS-DOS ha collezionato a questo punto una grossa quantità di
software ad alto livello; i negozi di computer, i negozi di libri e i grandi magazzini
hanno centinaia o anche migliaia di programmi sugli argomenti più vari. UNIX non ha
niente del genere.
MS-DOS è strutturato in tre livelli, come segue:
il BOS;
il kernel;
la shell, command.com.
Il BIOS è un insieme di driver di dispositivo a basso livello che
serve ad isolare MS-DOS dai particolari che riguardano lhardware. Per esempio, il
BIOS contiene le chiamate per leggere e scrivere dagli indirizzi assoluti del disco, per
leggere un carattere dalla tastiera e per scrivere un carattere sul video. Il BIOS di
solito è fornito dalle case produttrici di PC, piuttosto che dalla Microsoft e
generalmente, in parte, è posto in una ROM nel segmento appena al di sotto del limite
dello spazio degli indirizzi di 1M.
Le routine BIOS sono chiamate mediante trap per mezzo del vettore dinterruzioni
piuttosto che per mezzo di chiamate dirette di routine; ciò rende possibile al venditore
di modificare la dimensione e la posizione delle routine BIOS nei nuovi modelli, senza
dover rigenerare il sistema operativo. Il file io.sys (chiamato ibmio.com
nella versione che consegna lIBM) è un file nascosto presente su tutti i sistemi
MS-DOS. Esso è caricato immediatamente dopo che è stato fatto il boot del PC e fornisce
uninterfaccia di chiamate di routine a BIOS, per cui il kernel può accedere ai
servizi di BIOS eseguendo le chiamate di routine ad io.sys invece che generare un
trap nella ROM; inoltre questo file contiene le routine BIOS che non sono nella ROM e un
modulo chiamato sysinit che è usato per fare il boot del sistema. È importante
tenere presente che lesistenza di io.sys isola ulteriormente il kernel dai
particolari dellhardware; per esempio, il kernel non deve sapere quale vettore si
sta occupando di un certo servizio BIOS, poiché questi dettagli sono nascosti in io.sys.
Il kernel è contenuto in un altro file nascosto, msdos.sys (che lIBM ha
denominato ibmdos.com) e contiene la parte indipendente dalla macchina del sistema
operativo. Esso si occupa della gestione dei processi, della memoria e del file system e
anche di interpretare tutte le chiamate di sistema.
La terza parte è formata dalla shell, il command.com; naturalmente questo
programma non appartiene al sistema operativo è può essere cambiato dallutente. Il
command.com standard è formato da due parti, una residente, che è sempre in
memoria, ed una transiente, che è in memoria solo quando la shell è attiva.
La parte residente è posta in memoria subito dopo msdos.sys e contiene gli
interrupt 22H (Terminate Address), 23H (Ctrl-Break Handler) e 24H (Critical Error
Handler). Quando il programma è terminato, il codice di ritorno del programma stesso è
usato per determinare se il programma è sovrapposto alla parte transiente del command.com.
Se è così la parte residente ricaricherà la parte transiente dall'area indicata da comspec=;
se invece non è trovato il sistema si blocca. I messaggi di errore si trovano nella parte
residente del command.com. La routine di inizializzazione è inclusa nella parte
residente, assume il controllo durante lo startup e determina l'indirizzo dove
l'applicazione dell'utente sarà caricata; essa sarà poi sovrapposta dal primo programma
caricato.
La parte transiente è posta nella posizione finale superiore della memoria convenzionale
e i programmi utente che hanno bisogno di spazio ci possono riscrivere sopra; quando il
controllo ritorna a command.com, questi controlla se la parte transiente è
intatta, in caso contrario la ricarica. Contiene tutti i comandi interni; produce il
prompt di MS-DOS, legge i comandi dallo standard input (keyboard o file batch) e li
esegue. Per i comandi esterni costruisce una linea di comando ed una funzione exec
che carica e trasferisce il controllo al programma.
I PC con MS-DOS vengono inizializzati nel modo seguente: quando sono accesi (oppure dopo
un reset software CTRL+ALT+DEL; o un reset hardware tasto di reset sul case, in questo
caso riparte lautodiagnostica) il controllo è trasferito allindirizzo FFFF0H
dellhardware, che è sempre nella ROM e contiene un salto alla routine
dinizializzazione alla ROM di BIOS. Questa routine effettua alcuni test e, se la
macchina li passa, prova a leggere dal floppy A: nel settore di boot. Nel caso che non ci
sia alcun floppy presente nel dispositivo A:, è letto il settore principale di boot
dellhard disk (se nessuno dei due dischi è trovato, il BIOS chiama linterrupt
19H ROM BASIC o visualizza un messaggio derrore). La tabella di partizione in questo
settore informa sulla posizione delle partizioni e su quale di essa è attiva. La
partizione attiva è quindi selezionata ed il suo primo settore, il settore secondario di
boot, è letto ed eseguito. Questa procedura di boot a due passi è usata solo per i
dischi rigidi; la sua funzione è quella di permettere un boot automatico sia di MS-DOS
sia di altri sistemi operativi.
Il settore di boot legge la sua directory radice per vedere se io.sys e msdos.sys
(o ibmio.com e ibmdos.com) sono presenti, nel qual caso li legge entrambi
nella memoria e trasferisce il controllo ad io.sys.
Una volta caricato, io.sys chiama la routine di BIOS per inizializzare
lhardware, dopodiché subentra sysinit e legge config.sys per
configurare il sistema. Questo lavoro comprende lallocazione del buffer cache, il
caricamento dei driver di dispositivo e la selezione delle pagine di codice per il
linguaggio nazionale da utilizzare. Infine sysinit usa MS-DOS stesso per caricare
ed eseguire command.com, se la shell si trova in una sottodirectory oppure è usato
un processore di comando diverso questo deve essere specificato tramite il comando shell=statement
in config.sys. Esaminando tutto ciò si nota che sysinit fa lo stesso lavoro
di init in UNIX; dopo linizializzazione, il command.com legge ed
esegue autoexec.bat, che è uno shell script ordinario per permettere
allutente di fare ciò che ritiene più opportuno
Pochi comandi di base: semplicità.
Standard: si adatta a diverse configurazioni hardware.
Somiglianza con UNIX.
Vastissima disponibilità di strumenti.
Monouser Monotasking.
Scarsa protezione: non esistono password.
Directory gerarchicizzate.
Lutilizzo di MS-DOS può essere paragonato meglio
allutilizzo di una delle prime versioni di UNIX. Cè una shell, chiamata command.com,
un file system, le chiamate di sistema, i programmi di utilità ed altri aspetti che sono
spesso simili a UNIX, ma più primitivi.
Per usare MS-DOS basta accendere il computer e pochi secondi dopo compare il prompt della
shell. Non cè nessun login o password perché MS-DOS è di fatto un personal
computer; si sottintende che la macchina sia usata da una sola persona. Per la stessa
ragione, i file e le directory non hanno proprietari né bit di protezione ed inoltre non
esiste il superuser ed un utente qualsiasi può fare qualsiasi cosa.
In MS-DOS sono presenti alcune caratteristiche della shell di UNIX ed altre no.
Per far girare un programma basta digitare il nome e gli argomenti nella shell che fa una fork
di un figlio, passa gli argomenti al figlio e rimane in attesa finché il figlio non
ha finito lesecuzione ed esce. Non è possibile mettere un carattere
"&" alla fine della linea di comando per eseguire il comando in background,
daltra parte è permesso solo un comando per riga.
In MS-DOS i comandi sono divisi in due categorie: interni ed esterni. Gli
interni (circa quaranta) sono eseguiti dalla shell stessa; gli esterni sono veri e propri
programmi di utilità che di solito si trovano nella directory \dos.
La realizzazione di molti comandi nella shell rappresenta un compromesso; da un certo
punto di vista, non dovendo estrarli da un disco lento, li rende molto più veloci e,
poiché il primo PC IBM non aveva hard disk, si può considerare senza dubbio questa
ragione per cui i comandi furono inclusi nella shell. Da un altro punto di vista, tutto
quel codice rende la shell più grande e per evitare che questo problema potesse sfuggire
dalle mani, tutti i comandi interni sono stati mantenuti alle dimensioni minime possibili.
Per esempio, non cè alcuna possibilità di cancellare più file non correlati in
una sola volta.
I metacaratteri "*" e "?" sono presenti e sottintendono tutte
le stringhe ed un carattere rispettivamente, come in UNIX. Il problema è che i
metacaratteri funzionano solo per i comandi interni e non per quelli esterni (ad eccezione
di quelli che li gestiscono esplicitamente). In MS-DOS, la linea di comando è trasmessa
al programma così come è digitata, mentre in UNIX è il risultato dellespansione
della linea di comando che è passato al programma. Il risultato di tutto ciò è che gli
utenti devono ricordare quali comandi gestiscono i metacaratteri e quali non li
gestiscono; la cosa importante non è sapere chi fa lespansione ma che questa sia
fatta in modo non consistente.
Il command.com non fa distinzione tra maiuscole e minuscole.
MS-DOS ha le directory di lavoro, ma esse differiscono da quelle di UNIX in un aspetto importante: in UNIX ogni processo ha la sua propria directory di lavoro. Se un utente digita cd /usr/ast/src e poi inizia un processo, questo eredita come directory di lavoro /usr/ast/src. Se il processo poi modifica la sua directory di lavoro in /usr/ast/mail ed esce, la shell avrà come directory di lavoro ancora /usr/ast/src ed il processo successivo sarà allocato in questultima. Al contrario, in MS-DOS, la stessa sequenza di eventi lascerà il secondo processo nella directory mail poiché MS-DOS ha una sola directory di lavoro; è tenuta traccia in una variabile globale kernel, e quando questa variabile è modificata sono influenzati tutti i processi successivi e non solo quello corrente.
La ridirezione dello standard input e output funziona come in UNIX ed usa anche la stessa notazione; per loutput il default è il video e si utilizza il simbolo ">", per esempio
C> dir>pippo <CR> loutput va sul file di nome pippo
C> dir>PRN <CR> l'output va su un dispositivo periferico, la stampante
Se, invece, si utilizza il simbolo ">>" l'output è scritto dove termina il file precedente, operazione di append, per esempio
C> dir>\dev\nul <CR>
Per linput il default è la tastiera e si utilizza il simbolo "<", che preleva le informazioni da un file o da un altro dispositivo periferico.
I filtri sono usati per leggere un input e trasformarlo secondo una certa funzione, il risultato è mandato in output. I comandi sono i seguenti:
more: visualizza una pagina di video alla volta;
sort: ordinamento secondo il codice ASCII;
find: ricerca in un file una particolare stringa.
A>dir>record
A>sort<record Ordinamento crescente
A>sort/r<record Ordinamento decrescente
A>sort/+9<record Ordinamento in colonna 9
A>sort/+9<record>prn Ordinamento in colonna 9
A>find "17/02/71"record Ricerca una stringa
A>find/v "ESE1"record
A>find/c "1"record
A>find/n "BAT"record
A>find "ditta" <clienti.txt >salva.sav
A>more<record
A>more<record>prn
Sono permesse le pipeline (canalizzazione di comandi) ma sono implementate in modo diverso (con lutilizzo di file temporanei). L'output di un comando è l'input del comando successivo, per esempio
C> dir ¦ sort <CR> (pipe = alt 124).
Sono ammessi più comandi pipe sulla stessa linea, per esempio
C> dir ¦ sort ¦ more <CR>
Il prompt dallutente è un particolare simbolo, tipico di un dato ambiente, che contrariamente al cursore (quadratino o lineetta lampeggiante che si posiziona nel punto in cui andrà a collocarsi il carattere successivo), si posiziona sempre allinizio della riga per indicare la disponibilità alla ricezione di comandi. Ad esempio, nellambiente BASIC il prompt è rappresentato dal simbolo "OK", mentre in MS-DOS esso è costituito dal simbolo "[drive]:\>".
Nomi di file riservati:
AUX uguale a COM1
CLOCK$ device driver dell'orologio
COM1,2,3,4 1, 2, 3, 4 porta seriale
CON console (Keyboard: input, Display: output)
PRN uguale a LPT1
LPT1,2,3 1, 2, 3 porta parallela (stampante)
NUL Nessun dispositivo (l'output è scartato).
Altre caratteristiche prese da UNIX sono le variabili di shell e gli shell script, chiamati file batch, in MS-DOS ma sono molto più deboli di quelli usati in UNIX.
Evitano di immettere sequenze ripetitive di comandi, ed offrono la possibilità di creare delle procedure standard, in altre parole personalizzano il sistema operativo.
Hanno una struttura procedurale: call, echo, for, goto, if, pause, rem, shift.
Non sono in grado di leggere i messaggi di errore su video: sono ciechi, assumono che il comando abbia funzionato alla perfezione ed usano alla cieca il successivo.
Creazione dei file batch:
1) edit
2) copy con:[filename].BAT <CR> ------------ Ctrl z <CR>
Digitando il nome senza l'estensione, il file batch è eseguito solo se non esistono file .COM o .EXE con lo stesso nome.
Interruzione di un file batch: CTRL + C.
Collegamenti tra file batch:
TEST1.BAT
ECHO sono in TEST1
CALL TEST2
ECHO sono ancora in TEST1.
TEST2.BAT
ECHO sono in TEST2.
è possibile parametrizzare sequenze di comandi. I parametri vanno da %0 a %9 vanno specificati ad ogni richiamo. Il nome del file batch assegnato al parametro è %0.
MYFILE.BAT
copy %1 %2
type %2
type %0.bat
c>MYFILE A:prog1 B:prog2 <CR>
copy A:prog1 B:prog2
type B:prog2
type MYFILE.BAT.
ECO.BAT
ECHO %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
ECHO riferimento 1
SHIFT
ECHO %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
ECHO riferimento 2
SHIFT
ECHO %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
Chiamando il file: ECO 1 2 3 4 5 6 7 8 9 10 11 si otterrà:
ECO 1 2 3 4 5 6 7 8 9
riferimento 1
1 2 3 4 5 6 7 8 9 10
riferimento 2
2 3 4 5 6 7 8 9 10 11
1.BAT
REM uso del comando echo, è in on per default
ECHO ON
REM questo messaggio è visualizzato
ECHO OFF
REM questo messaggio non è visualizzato
ECHO questo si indipendentemente dal valore di ECHO
ECHO ON
REM ECHO è di nuovo in on
2.BAT
REM uso del comando GOTO
REM prima linea
REM seconda linea
GOTO fine
REM terza linea
: fine
REM quarta linea
Se si aspetta un parametro dopo il nome del file batch, il controllo è il seguente
IF "%1"==GOTO FINE
3.BAT
REM uso del comando IF
ECHO OFF
IF %1==rosa GOTO UNO
IF %2==profumo GOTO DUE
ECHO sei nei guai
GOTO FINE
: UNO
ECHO che pensiero gentile
GOTO FINE
: DUE
ECHO come sei romantico
: FINE
4.BAT
REM vuoi entrare in pascal (y/n)
ECHO OFF
IF %1==n GOTO FINE
turbo
: FINE
5.BAT
:LOOP
IF %1==" GOTO FINE
DIR C: %1
SHIFT ;slitta ai valori successivi
GOTO LOOP
:FINE ;
c>prova ws turbo basic
Progettare un nuovo comando che cambi il nome ad un file con un nome qualsiasi ed estensione .DA (nomefile.DA), modificando l'estensione in .A (nomefile.A).
CAMBIA.BAT:
SET nome1=%1.DA
SET nome2=%1.A
ECHO Cancello %nome2% ...
IF EXIST %nome2% DEL %nome2%
ECHO ... e chiamo %nome1%, %nome2%
REN %nome1% nome2%
MS-DOS può essere configurato in vari modi. Per esempio, gli utenti
sono liberi di installare i loro driver dinterrupt, cosa non pensabile in UNIX. La
ragione di questa disparità, naturalmente, è chiara. UNIX è un sistema timesharing, con
(potenzialmente) più utenti, per cui permettere loro di inserire codice nel kernel, in
qualsiasi momento, sarebbe un modo pericoloso di violare la sicurezza, in altre parole un
invito a distruggere il sistema. In un sistema a utente singolo che non ha alcun tipo di
sicurezza, il danno è decisamente inferiore.
Unaltra forma di configurazione da parte dellutente è la capacità di
installare i driver di dispositivo. Questi possono gestire dispositivi non standard di I/O, come i sintetizzatori di musica MIDI (Musical Instrument Digital
Interface), ed anche dispositivi standard, come memoria estesa, in modo non standard.
Questa caratteristica fornisce un alto grado di flessibilità.
Un tipo completamente differente di adattamento della configurazione riguarda larea
del linguaggio della nazione in cui è usato il computer, anche le configurazioni
tradizionali delle tastiere differiscono da nazione a nazione.
Per gestire le differenti tastiere, MS-DOS ha la capacità di mappare i codici dei tasti
prodotti dalla tastiera in caratteri differenti, dipendenti, per esempio, dal fatto che il
tasto a destra del TAB sia una "Q" (negli Stati Uniti) o una "A" (in
Francia); esso ha anche diversi file di codice di pagina (code page file)
.CPI installabili che contengono le mappe di bit per i 255 caratteri visualizzabili.
Esiste anche una chiamata di sistema per permettere ad un programma di chiedere una
struttura che contiene linformazione sui formati della data e dellora, sul
simbolo corrente, il separatore numerico ed altri oggetti che variano da nazione a
nazione. Questa informazione permette ai programmi di accettare linput e di produrre
un output nella forma desiderata dallutente, senza preoccuparsi del luogo in cui
lutente stesso vive.
La maggior parte della configurazione di MS-DOS è gestita da un file chiamato config.sys
che è letto quando parte il sistema. Esso può contenere i comandi per installare i
driver personali di dispositivo, definire il linguaggio nazionale, determinare dove
mettere il sistema operativo in memoria, allocare memoria per il buffer cache, specificare
il numero massimo di file aperti e scegliere la shell. I principali comandi sono: break,
buffers, country, devicehigh, dos, fcbs, file, install, interlnk, lastdrive, set, shell,
stacks. I principali driver di periferica sono: ansi.sys. display.sys,
dblspace.sys, emm386.sys, himem.sys, ramdrive.sys, setver.exe.
Inoltre, dopo che questo file è stato elaborato, è eseguito un batch file speciale,
sempre allavviamento del sistema, chiamato autoexec.bat per ulteriori
inizializzazioni e configurazioni. I principali comandi sono: prompt, mode, path, set.
Inoltre è utilizzato per avviare dei TSR (Terminate and Stay Resident), programmi che
sono caricati nella memoria e vi risiedono, generalmente, fino a quando non si spegne il
computer. I TSR forniti con MS-DOS sono: doskey, vsafe, smartdrv.
Questultimo ha una controparte in UNIX chiamata .profile per la Bourne-Shell
e .login per la C-Shell.
Un blocco di configurazione inizia con unintestazione di blocco [...], come nei file .INI di Windows.
CONFIG.SYS
[menu] definisce le scelte allavvio
menuitem = MS-DOS definisce una voce di menu
menuitem = WORKGROUP
menuitem = NOVELL
menuitem = PATHWORKS
menucolor = 14,1 imposta il colore del testo e di sfondo
menudefault = NOVELL,10 parte dopo 10 secondi se non si fanno scelte
[common] comandi comuni per tutte le configurazioni
DEVICEHIGH=C:\DOS\SETVER.EXE
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS
BUFFERS=10,0
FILES=40
DOS=UMB
FCBS=4,0
DOS=HIGH
COUNTRY=039,850,C:\DOS\COUNTRY.SYS
STACKS=9,256
SHELL=C:\DOS\COMMAND.COM C:\DOS\ /E:2048 /p
INSTALLHIGH=C:\DOS\SHARE.EXE
[ms-dos]
[workgroup]
[novell] comandi per la configurazione novell
INSTALLHIGH=C:\NETWARE\LSL.COM
INSTALLHIGH=C:\NETWARE\EWRK3.COM
INSTALLHIGH=C:\NETWARE\IPXODI.COM
[pathworks]
DEVICE=\TCPIP\PROTMAN.SYS /I:C:\TCPIP
DEVICE=\TCPIP\NEMM.DOS
DEVICE=\TCPIP\EWRK3.DOS
DEVICE=\TCPIP\TCPDRV.DOS /I:C:\TCPIP
LASTDRIVE=Z
AUTOEXEC.BAT
@echo off
LOADHIGH C:\DOS\SMARTDRV.EXE
LOADHIGH C:\DOS\DOSKEY.COM
LOADHIGH C:\WINDOWS\MOUSE.COM /Y
LOADHIGH C:\DOS\KEYB IT,,C:\DOS\KEYBOARD.SYS
PROMPT $p$g
PATH C:\WINDOWS;C:\;C:\DOS;C:\NETWARE;
SET TEMP=C:\DOS
GOTO %CONFIG% variabile associata alla scelta di menu
:MS-DOS
CLS
DATE
TIME
GOTO END
:WORKGROUP
CLS
GOTO END
:NOVELL
LOADHIGH C:\NETWARE\NETX.COM
F:
LOGIN STUDENTI
CLS
C:
GOTO END
:PATHWORKS
SET PATH=%PATH%;C:\TCPIP;D:PCAPP;
CALL \TCPIP\STARTNET
:END
| MS-DOS | UNIX | DESCRIZIONE |
| attrib | chmod | Visualizza o modifica gli attributi dei file |
| chdir (cd) | cd, pwd | Visualizza il nome o cambia la directory corrente |
| cls | clear | Pulisce lo schermo |
| comp | cmp | Confronta il contenuto di due file |
| copy | copy, cp | Copia uno o più file |
| date | date | Visualizza o modifica la data corrente |
| del (erase) | rm | Elimina i file specificati |
| dir | ls, lc, ll | Elenca i file e le directory |
| edit | vi | Editor |
| fc | diff | Confronta due file e ne visualizza le eventuali differenze |
| find | grep | Ricerca una determinata stringa di testo in un file |
| help | man | Manuale on-line |
| mkdir (md) | mkdir | Crea una nuova directory |
| more | more, pg | Visualizza loutput una schermata alla volta |
| lp, lpr | Stampa un file di testo | |
| rename | mv | Cambia il nome di un file |
| rmdir (rd) | rmdir | Elimina una directory |
| set | $set, %env | Visualizza, imposta o rimuove le variabili di ambiente |
| type | cat | Visualizza il contenuto di un file di testo |
Le chiamate di sistema (system calls)
Alcune delle chiamate di sistema di MS-DOS sono simili a quelle di
UNIX, ma altre sono completamente diverse.
Le chiamate di sistema sono fatte mediante un trap al kernel, con lutilizzo di un
vettore 21H e mettendo il numero della chiamata di sistema nel registro AX, poche altre
utilizzano altri vettori.
Una libreria di interfaccia delle chiamate di sistema è fornita dal C e da altri
compilatori per permettere ai programmatori di linguaggio ad alto livello di fare le
chiamate in modo opportuno come in UNIX.
Un buon numero di programmi MS-DOS scrivono sul vettore 21H un puntatore nel loro codice,
che permette loro di accettare e di ispezionare tutte le chiamate di sistema. Alcune di
queste chiamate sono gestite in maniera diversa, di solito per estendere in un qualche
modo MS-DOS; la parte rimanente consiste in un salto allindirizzo che il vettore 21H
conteneva nella prima posizione.
Sebbene sia fornita una chiamata di sistema per leggere e scrivere i vettori
dinterrupt, la tecnica non è portabile su altri sistemi o architetture e causerà
problemi se MS-DOS o i suoi successori dovessero supportare anche la multiutenza. Di fatto
è un misura di emergenza per raggiungere funzionalità o tranelli che dovrebbero essere
messi nel sistema operativo sin dallinizio. Per rendere possibili le reti, per
esempio, spesso si implementa ulteriore codice di rete con un programma TSR che accetta
tutte le chiamate di sistema e ne ispeziona ognuna per vedere se essa richiede un accesso
remoto. Quelle che lo richiedono sono gestite dal programma TSR, e quelle che non lo
richiedono sono restituite a MS-DOS.
Le chiamate al sistema permettono di scrivere programmi indipendenti dall'hardware
(MACHINE INDEPENDENT) e con compatibilità con versioni successive di MS-DOS. Sollevando
il programmatore da incombenze quali la costruzione di apposite routine per la lettura da
disco, la gestione del file system, ecc., le chiamate di sistema rendono
contemporaneamente la gestione del sistema più sicura, ed efficiente.
Categorie di system calls:
Standard character device I/O;
Memory management;
Process management;
File and directory management;
Microsoft Network calls;
Miscellaneous system functions.
C> PROMPT $E[65;112P
$E[ prompt indica che i successivi caratteri costituiscono una sequenza di escape;
65 è il codice ASCII del tasto da ridefinire (in questo caso A);
";" è l'elemento separatore tra due codici ASCII;
112 è il codice ASCII del carattere che apparirà al posto del primo (in questo caso P);
P è l'elemento che indica il termine della sequenze di escape, tra i caratteri non ci devono essere blank e/o <CR>.
Clrscr(); printf ("%c[2J",27);
gotoxy (); printf ("%c[%d;%dH",27,x,y);
In questo modo possono essere assegnati valori e stringhe di caratteri anche a quei tasti che non hanno un proprio valore specifico, tipo i tasti funzione: ins, del, alt, shift, ctrl ed i tasti del tastierino numerico. Per esempio affinché il comando dir sia lanciato premendo il tasto F10 bisogna usare la sequenza:
C>PROMPT $E[0;68;"dir";13P
in cui 0;68 è il codice ASCII del tasto F10, 13 il codice ASCII del tasto CR
Funzioni MS-DOS: spostamento cursore, clrscr, grafica. Per utilizzarle è necessario introdurre nel config.sys ed eseguire il seguente comando: device = ansi.sys.
A>prompt $E [97;109;101;108;97; P
prompt
A>a
A>prompt $E [97;97;P
prompt
Per ripristinare il prompt invece di digitarlo basta mettere a fine sequenza
$p$g: PROMPT $E[H$p$g
cursore in 0,0
C>PROMPT $E[31;1;5m CIAO MONDO PROMPT $E[37;0m$p$g
PROVA.BAT
REM assegnazione di F1
PROMPT $E [0;59;"2";13P
REM assegnazione di F2
PROMPT $E [0;60;"8";13P
PROMPT $E [H$E[K$E[7M TURBOPASCAL F1$E [8C LOTUS F2$E[24;1H COMANDO : $E[0M$E[K.
A>prompt $ E [7M$T$E[M
#include <stdio.h>
#include <conio.h>
#define GOTO(x,y) cprintf("%c[%d;%dH",27, y, x)
#define HAUT cprintf("%c[1A",27)
#define BAS printf("%c[1B",27)
#define DROITE printf("%c[1C",27)
#define GAUCHE printf("%c[1d",27)
#define SAUVE printf("%c[s",27)
#define RAPPELLE printf("%c[u",27)
#define CLS printf("%c[2J",27)
#define DLN printf("%c[K",27)
#define NORM printf("%c[0m",27)
#define SURB printf("%c[1m",27)
#define CLIG printf("%c[5m",27)
#define INVS printf("%c[7m",27)
#define SOULI printf("%c[4m",27)
int main(void)
{ CLS; NORM; printf("Voici le mode d'affichage normal,\n\n ");
SURB;printf("et voici un peu de surbrillance.\n\n");
NORM;SOULI; cprintf("Ce texte-ci est soulign ou en couleur,\n\n ");
NORM;CLIG; printf("et celui-l clignote .\n\n");
NORM;INVS;printf("On peut aussi afficher en vido inverse ...\n");
NORM;getch();return (0);
}
Permette un continuo monitoraggio dello stato della CPU e della memoria, si attiva con il seguente comando (il prompt dellambiente è il trattino, -):
c:\>debug [filename.ext] [parametri] <CR>
A (Assemble)
Assembla istruzioni mnemoniche in memoria.
C (Compare)
Confronta due aree di memoria.
D (Dump)
Visualizza il valore esadecimale ed il corrispettivo ASCII delle locazioni di memoria.
E (Enter)
Modifica il contenuto di locazioni di memoria a partire dallindirizzo specificato.
F (Fill)
Riempie un intervallo di memoria con dei valori specificati.
G (Go)
Esegue il programma fino al primo breakpoint (al massimo dieci); debug sostituisce le istruzioni allindirizzo di breakpoint con int 3H (codice operativo CCH), quando debug incontra il byte CCH lancia la routine di servizio di int 3H che arresta il run, ripristina il valore corretto e lancia automaticamente il comando R e, infine, restituisce il controllo a debug. Per disattivare lazione del breakpoint basta sostituire CCH con listruzione NOP (codice operativo 90H).
H (Hex)
Calcola e visualizza la somma e la differenza tra due numeri esadecimali.
I (Input)
Visualizza un byte da una porta specificata.
L (Load)
Carica in memoria file o settori di disco allindirizzo specificato.
M (Move)
Copia il contenuto di un blocco di memoria in un altro blocco di memoria.
N (Name)
Fornisce nomi di file per i comandi Load e Write, in pratica si specifica un FCB1 (File Control Block uno) alloffset 5CH dellarea di PSP (Program Segment Prefix).
O (Output)
Invia un byte ad una porta di output.
P (Proceed)
Si comporta come il comando Trace, ma salta le istruzioni CALL, INT, LOOP ed i prefissi di ripetizione di stringa come ununica istruzione.
Q (Quit)
Esce dallambiente debug e ritorna a MS-DOS.
R (Register)
Visualizza o modifica il contenuto dei registri e dei flag.
S (Search)
Ricerca uno o più byte in memoria.
T (Trace)
Esegue istruzioni single-step e visualizza i registri e la prossima istruzione da eseguire.
U (Unassemble)
Disassembla locazioni di memoria.
W (Write)
Registra file su disco, prima dellesecuzione del comando la coppia di registri BX:CX deve contenere la lunghezza in byte del file.
MS-DOS permette di visualizzare il contenuto di un segmento di memoria centrale, di un settore di disco oppure il contenuto di un file. Non solo è possibile visualizzare questi ambienti, ma anche intervenire a livello di byte per variare scritte, dati o qualunque altro elemento modificabile.
Per esempio in command.com può essere utile eliminare i comandi del ed erase.
Ricercare il testo da modificare (erase) tramite il comando S usando il parametro L.
C> DEBUG COMMAND.TMP
-S0LFFFF "ERASE"
Significa ricercare nell'ambito del segmento corrente, a partire dalla posizione 0 alla posizione FFFFH, la stringa ERASE.
24F7:3BAB
_D 3BA0
_E 3BAB " "
_D 3BA0
Dopo aver modificato il file in memoria centrale, è necessario memorizzarlo su dischetto con il comando W. Per disinserire il comando del per la cancellazione dei file, eseguire la medesima procedura sempre sul file temporaneo command.tmp. Quindi uscire dall'ambiente debug con il comando Q. A questo punto è necessario installare il nuovo command.com affinché i comandi del e erase non siano riconosciuti.
C>debug
_e 100 ba
_e 14f ba
_f 101 14e 20
_m 100 14f 150
_m 100 19f 1a0
_m 100 23f 240
_m 100 37f 380
_m 100 32f 600
_e 100 c9
_e 14f bb
_f 101 14e cd
_e 240 cc
_e 28f b9
_f 241 28e cd
_e 7e0 c8
_e 82f bc
_f 7e1 82e cd
_e 16f "ESEMPI DI FILE BATCH"
_e 1c6 "DA"
_e 210 "SISTEMA OPERATIVO"
_e 383 "1.ORDINAMENTO ALFABETICO DELLA DIRECTORY"
_e 423 "2.ORDINAMENTO DELLA DIRECTORY IN BASE ALLA DATA"
_e 4c3 "3.RIASSUNTO DELLO STATO DEL DISCO"
_e 563 "4.USCITA DAI FILE BATCH E RITORNO AL DOS"
_rcx
cx 0000
:730
_n batmenu.txt
_w
_q
digitare: c> debug<domanda.txt
N DOMANDA.COM
E 0100 31 C0 CD 16 30 E4
E 0106 3C 0D 74 0C 0C 20
E 010C 3C 6E 74 08 3C 73
E 0112 75 EC FE C4 FE C4
E 0118 B0 4C 86 E0 CD 21
RCX
1E
W
Q
vedelim.bat
@echo off
type %1 | more
echo eliminare %1 ? (s/n)
domanda
if errorlevel 2 erase %1
Per utilizzare il programma: c> vedelim lettera.doc.
Recupero di file cancellati, tramite luso di debug è possibile visualizzare la directory di un disco.
2886:0300 SYSTEM TXT ....$
2886:0310 ..nzi...]...$
2886:0320 ISTRUZIOTXT ....$
2886:0330 ..L8!...d...$
2886:0340 DOCUM TXT ....$
2886:0350 ..f.!.F..4..$
2886:0360 ESCAPE TXT ....$
2886:0370 ..!.J.Q...$
A partire dal quinto settore è memorizzata la lista dei nomi dei file presenti sul dischetto. In questa directory per esempio sono system.txt, istruzio.txt, docum.txt, escape.txt. L'uso dei comandi del o erase per la cancellazione elimina effettivamente le informazioni presenti sul disco. Questi comandi modificano solamente il nome dei file indicati nella directory. Il comando
C> del docum.txt <CR>
cambia il nome nella directory nel seguente modo.
2886:0300 SYSTEM TXT ....$
2886:0310 ..nzi...]...$
2886:0320 ISTRUZIOTXT ....$
$2886:0330 ..L8!...d...$
2886:0340 .OCUM TXT ....$
2886:0350 ..f.!.F..4..$
2886:0360 ESCAPE TXT ....$
2886:0370 ..J.Q...$
ossia sostituisce la prima lettera del file in questione con il carattere "."
Quando MS-DOS, nello scandire la directory, incontra dei nomi che iniziano per ".", li considera cancellati. Per recuperare il file è quindi sufficiente sostituire il carattere "." con la prima lettera del nome, tramite debug. Con il disco di sistema inserito lanciare il comando debug senza alcun parametro. è importante che nell'eseguire questa operazione non sia residente in memoria centrale alcun tipo di software come SIDEKICK o altri TSR. Inserire il comando D per visualizzare l'area di memoria centrale su cui è posizionato il debug. Digitare D fino a quando non si trova una zona libera (in cui i byte sono tutti impostati a zero). In questa zona di memoria, nell'esempio individuata dall'offset 0300 è possibile caricare l'intera directory del dischetto. Il comando usato è L nella forma:
L 300 1 5 11
dove parametri del comando L hanno il seguente significato:
300 Indirizzo della memoria centrale da cui partirà il caricamento della directory;
1 numero del drive (0 corrisponde al drive A, 1 al B, 2 al C);
5 numero del primo settore del dischetto da cui partire per il caricamento (5 è il numero del settore da cui inizia la directory);
11 numero dell'ultimo settore del dischetto da caricare in memoria centrale (11 corrisponde all'ultimo settore della directory).
Digitare il comando
L 300 1 5 11
Quindi introdurre il comando D
D 300
per visualizzare la directory.
Sulla destra in alto sono presenti i nomi dei files: .ocun.txt significa che il file docum.txt è considerato da MDS-DOS cancellato. Inserire il comando E
E 340 "D"
Per sostituire il carattere all'indirizzo 340 (prestare attenzione ad inserire la lettera nella forma maiuscola). Digitare
D 300
per visualizzare la modifica apportata. Al termine della modifica bisogna trasferire le modifiche effettuate in memoria centrale sul dischetto, il comando da inserire è W
W 300 1 5 11
Lavorare direttamente sulla directory è una operazione molto delicata, poiché una modifica errata può provocare seri danni al dischetto e rendere i file non più utilizzabili. Con il comando dir oltre ai file sono fornite altre informazioni: ext, size, data, ora; inoltre la subdirectory di appartenenza, indirizzo inizio file su disco.
L 300 1 5 11
Digitare il comando
E 34b 02
scrive in 034b il valore 02: hidden
W 300 1 5 11
in questo modo è possibile cambiare nome ad una subdirectory:
Digitare il comando
E xxxx:yyyy "nome"
dove xxxx:yyyy è l'indirizzo della prima lettera del nome della subdirectory con la stessa tecnica si cambia nome al volume.
E 0x80 "nome"
Data di costruzione della ROM
F000:FFF5 L8
Tipo di PC
F000:FFFE
FC = AT, FE = XT, ...
INTERRUPT VECTOR: int 10H _d 0000:0040 =65F0:00F0 (F000:F065)