Introduzione

Storia di MS-DOS

Il PC IBM

Le versioni

Implementazione del sistema

L’utilizzo di MS-DOS

La configurazione di MS-DOS

Le chiamate di sistema (System Calls)

Sequenze di Escape

Debug

Introduzione

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.

 

top.gif (1021 byte)

 

Storia di MS-dos

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.

 

top.gif (1021 byte)

 

Il PC ibm

Intorno al 1980, l’IBM, decise che quella dei personal computer era un’area 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 all’IBM, come la ditta aveva sempre fatto in passato. Nel frattempo l’Intel aveva prodotto due successori dell’8080, l’8086 e una versione con un Bus a otto bit dell’8086, l’8088. Estridge scelse quest’ultimo perché era composto da chip che erano sostanzialmente più economici.
L’IBM, 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 dell’interprete BASIC da usare sul PC IBM e chiese anche se per caso avesse un sistema operativo per la macchina.
Gates suggerì all’IBM 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 l’IBM non poteva attendere.
A questo punto l’IBM tornò alla Microsoft e chiese se avrebbero potuto scrivere un sistema operativo simile al CP/M. Gates sapeva che non c’era 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; nell’aprile del 1981 assunse il suo autore, Tim Paterson, per migliorarlo; cambiò il nome del sistema operativo in MS-DOS e lo vendette all’IBM.
Quando fu presentato, nell’agosto del 1981, il PC IBM era dotato del suo sistema operativo, l’MS-DOS, la virtù principale è che vi poteva girare la maggior parte del software che andava sull’8080 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é l’IBM né nessun altro ebbe la percezione di quanto grande sarebbe stato il successo del PC IBM e, all’inizio, 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 l’IBM 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 dell’MS-DOS.

 

top.gif (1021 byte)

 

La versione 1.0

La prima versione dell’MS-DOS uscita nell’agosto 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, l’interprete 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 l’input/output. Laddove UNIX contiene i driver per l’I/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.
Nell’ottobre 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, l’IBM 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, l’uso 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 dall’utente, 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é l’hard disk offrì la possibilità di utilizzare molte applicazioni di grosse dimensioni, il PC XT trasferì l’interesse per i personal computer dall’ambiente 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 dell’ora, 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

Nell’agosto del 1984 l’IBM 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 l’8088 ed era solo più veloce.
Poiché il PC AT poteva utilizzare il floppy da 1.2 Mbyte, un clock a batteria tampone e l’informazione di configurazione in CMOS, fu aggiunto un supporto per questi dispositivi. Inoltre, ora, erano supportati hard disk fino a 32 Mbyte. In più, l’interprete 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 l’IBM 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, l’IBM 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 l’utilizzo completo della memoria, l’esecuzione 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 l’IBM 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 dell’OS/2 non avvenne mai, l’IBM 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 all’IBM 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ò un’alternativa: l’interfaccia 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 un’interfaccia 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 nell’aprile 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 dell’MS-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 l’utente è 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 un’assunzione 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 all’area di memoria superiore.

Defrag, un nuovo programma che riorganizza i file sull’hard 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 un’altra.

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 l’OS/2 non avrebbe avuto seguito, la Microsoft fece una scelta diversa, sviluppando Windows come interfaccia grafica orientata al mouse con MS-DOS.
L’idea fu la seguente: se non possiamo sbarazzarci di MS-DOS almeno cerchiamo di camuffarlo. Mentre ciò è certamente vero per l’utente 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.
D’altra parte, l’MS-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.

top.gif (1021 byte)

 

Implementazione del sistema

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 l’hardware. 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 d’interruzioni 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 l’IBM) è un file nascosto presente su tutti i sistemi MS-DOS. Esso è caricato immediatamente dopo che è stato fatto il boot del PC e fornisce un’interfaccia 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 l’esistenza di io.sys isola ulteriormente il kernel dai particolari dell’hardware; 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 l’IBM 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 dall’utente. 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 l’autodiagnostica) il controllo è trasferito all’indirizzo FFFF0H dell’hardware, che è sempre nella ROM e contiene un salto alla routine d’inizializzazione 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 dell’hard disk (se nessuno dei due dischi è trovato, il BIOS chiama l’interrupt 19H ROM BASIC o visualizza un messaggio d’errore). 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 l’hardware, dopodiché subentra sysinit e legge config.sys per configurare il sistema. Questo lavoro comprende l’allocazione 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 l’inizializzazione, il command.com legge ed esegue autoexec.bat, che è uno shell script ordinario per permettere all’utente di fare ciò che ritiene più opportuno

top.gif (1021 byte)

 

L’utilizzo di MS-DOS

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.

L’utilizzo di MS-DOS può essere paragonato meglio all’utilizzo 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 l’esecuzione ed esce. Non è possibile mettere un carattere "&" alla fine della linea di comando per eseguire il comando in background, d’altra 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 dell’espansione 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 l’espansione 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 quest’ultima. 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 l’output il default è il video e si utilizza il simbolo ">", per esempio

C> dir>pippo <CR> l’output 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 l’input 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 l’utilizzo 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 dall’utente è 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 all’inizio della riga per indicare la disponibilità alla ricezione di comandi. Ad esempio, nell’ambiente 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%

 

top.gif (1021 byte)

 

La configurazione di ms-dos

MS-DOS può essere configurato in vari modi. Per esempio, gli utenti sono liberi di installare i loro driver d’interrupt, 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.
Un’altra forma di configurazione da parte dell’utente è 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 l’area 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 l’informazione sui formati della data e dell’ora, sul simbolo corrente, il separatore numerico ed altri oggetti che variano da nazione a nazione. Questa informazione permette ai programmi di accettare l’input e di produrre un output nella forma desiderata dall’utente, senza preoccuparsi del luogo in cui l’utente 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 all’avviamento 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.
Quest’ultimo ha una controparte in UNIX chiamata .profile per la Bourne-Shell e .login per la C-Shell.

Un blocco di configurazione inizia con un’intestazione di blocco [...], come nei file .INI di Windows.

CONFIG.SYS

[menu] definisce le scelte all’avvio

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 l’output una schermata alla volta
print 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

 

top.gif (1021 byte)

 

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 l’utilizzo 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 all’indirizzo che il vettore 21H conteneva nella prima posizione.
Sebbene sia fornita una chiamata di sistema per leggere e scrivere i vettori d’interrupt, 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 dall’inizio. 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.

 

top.gif (1021 byte)

 

SEQUENZE DI ESCAPE

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 vid‚o inverse ...\n");

NORM;getch();return (0);

}

 

top.gif (1021 byte)

 

DEBUG

Permette un continuo monitoraggio dello stato della CPU e della memoria, si attiva con il seguente comando (il prompt dell’ambiente è 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 dall’indirizzo 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 all’indirizzo 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 l’azione del breakpoint basta sostituire CCH con l’istruzione 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 all’indirizzo 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) all’offset 5CH dell’area 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 un’unica istruzione.

Q (Quit)

Esce dall’ambiente 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 dell’esecuzione 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 l’uso 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)

top.gif (1021 byte)