Introduzione alla programmazione in "Assembler"

In questo capitolo si vuole aprire una discussione su di un metodo di programmazione ormai considerato vecchio e fuori moda, diciamo non più sufficientemente redditizio ormai sorpassato da centinaia di altri linguaggi più moderni molto più complessi e difficili da apprendere.
Diciamo che nella vita ognuno fa le proprie scelte, personalmente ho preferito dedicarmi all'apprendimento del linguaggio Assembler per tanti motivi, in prima motivazione non cerco riscontri economici, poi perchè l'Assembler è il linguaggio della macchina e quindi tutti gli altri sono suoi discepoli nessuno di loro non può agire direttamente sulla macchina e quindi il codice deve essere convertito e reso comprensibile in linguaggio macchina, da qui nascono i veri problemi per i programmi di alto livello ossia la conversione in codice macchina, sicuramente oggi giorno non esistono no non esistono compilatori validi con la capacità di conversione del codice, naturalmente tutti lo convertono altrimenti la macchina non potrebbe funzionare, però in che modo lo convertono? aimè meglio non parlarne, tanti potrebbero sempre affermare che non è vero, quindi lascio a voi l'esperimento provate a disassemblare un pezzo di codice scitto con un linguaggio di alto livello e avrete la prova di quanto appena detto.
La codifica assembler agisce direttamente sulla macchina e quindi ne esalta tutte le potenzialità ma più che altro genera velocità di esecuzione, praticamente vengono eliminati quei trasferimenti continui di dati da una zona della memoria ad un'altra zona causati dalla compilazione di un linguaggio ad alto livello, nessun compilatore oggi giorno è in grado di convertire direttamente una singola istruzione in codice macchina ma ne genera più di una anzi ne genera tante troppo spesso troppe, in modo da appensantire il lavoro che deve svolgere il calcolo di una qualsiasi funzione.
I linguaggi di alto livello sono stati studiati e inventati dalle società che gesticono i sistemi operativi, non a caso un qualsiasi sistena operativo non ti permetterà "mai" di usare direttamente una pura codifica in assembler naturalmente è ovvio, loro ti avvertono dicendoti che tale operazione potrebbe causare danni irreparabili su l'intero sistema in esecuzione, posiamo anche dire che hanno ragione, però possiamo anche dire che il sistema operativo lo abbiamo comprato e pagato quindi se vogliamo possiamo anche modificarlo a nostro piacimento, oppure si potrebbe scrivere delle semplici funzioni in assembler che il sistema operativo invia direttamente sulla macchima. Però tutto questo è severamente vietato, tanto che qualsiasi sistema operativo e sparso qua e la di protezioni e di questo fatto se vogliamo scrivere codice direttamente per la macchina ne dobbiamo prendere atto fin da ora.
Quindi i programmi che oggi giorno vengono usati sotto un sistema operativo sono tutti scritti con un linguaggio di alto livello, chi si dedica a tale programmazione incontra una doppia difficoltà, innanzitutto deve conoscere bene il linguaggio di programmazione che vuole usare e al tempo stesso deve conoscere altrettanto bene il sistema operativo sul quale verrà caricato il programma una volta terminato e sicuramente lo stesso programma non funzionerà mai su due sistemi operativi diversi. Altro grosso inconveniente del linguaggio ad alto livello è che i programmi si ingrossano e più si ingrossano divetano lenti e più si ingrossano e più sono difficili da testare da controllare e quindi maggiori saranno gli errori che passeranno inosservati ma che verranno fuori a chi poi ne farà uso. In commercio ci sono programmi enormi, più grandi dello stesso sistema operativo, e il colmo è che non si capisce bene cosa facciano o a cosa servono, generalmente convertono dati in un modo e poi convertono gli stessi dati nel modo di prima, praticamente non servirebbero a nessuno, però se utilizzi quel dato sistema operativo sei "obbligato" anche a farne uso e a volte addirittura a comprarli.
Una mia impressione è che ci sia ancora molta strada da percorrere nel campo della programmazione, penso che attualmente ci troviamo ancora in una fase "primitiva", nessun programmatore famoso o meno ha visto, ha individuato quella strada che un domani porterà avanti di un passo il servizio che un calcolatore può rendere alla società, cioè la macchina potrà svolgere una semplice operazione da sola, senza l'intervento della persona che passa le sue giornate su una tastiera e digitando continuamente indirizza o comanda la macchina nel modo appropriato.
Si consideri che il calcolatore venne concepito come macchina capace di elaborare rapidamente tante informazioni e pertanto di offrire un valido aiuto al settore burocratico e aziendale, ma non solo, capace di sostituire in buona parte il lavoro cartaceo. Ora dopo 50 anni di evoluzione della macchina, calcolatori sempre più veloci e capienti, ci ritroviamo con un personale burocratico che negli anni si è moltiplicato per mille mentre il lavoro cartaceo è rimasto quello di prima in più tutti i dati si devono digitare per inviarli al database della macchina.

Ricerca della documentazione

Il primo passo che ci permetterà di introdurci nella comprensione del linguaggio "Assembler" sarà quello di andare a caccia di tutta quella documentazione della quale ha bisogno un principiante, la prima idea che mi è venuta in mente è stata di cercarmi la documentazione su internet. Su internet circolano migliaia di pagine sull'argomento assembler, si può reperire una sufficiente conoscenza per quanto riguarda: istruzioni, metodi di programmazione, codici operativi, indirizzamento della memoria e quant'altro. Non ho capito bene sinceramente come funzioni la ricerca su internet, cerca un argomento e ti appaiono delle pagine che puoi visionare o scartare, in tante pagine che ti vengono presentate sovente non hanno alcun riferimento all'argomento di ricerca alcune pagine non riportano neppure una parola della frase di ricerca che si è digitato, comunque cerca, cerca non riesci mai ad individuare esattamente quello che ti servirebbe se provi a cambiare la frase di ricerca guarda caso in maggioranza ti ritornano la pagine già visionate e scartate. Con tutto questo voglio dire che la ricerca su internet non soddisfa l'argomento in merito, si perde un sacco di tempo e alla fine si perde la pazienza.
Comunque sia su internet sono riuscito a ricavarmi una prima infarinatura di come funzioni il linguaggio assembler, e mi rivolgo a chi è interessato all'argomento di perdere un po' di tempo e dedicarsi a tale ricerca; infatti quello che più serve è capire come realmente funzioni un qualsiasi calcolatore a livello macchina, dopo di che si potrà partire con il primo codice.
Su internet il codice macchina è un vero e proprio tabù, non si trova proprio niente: porte di comunicazione, schede video, programmazione dei dischi, delle stampanti, gestione della memoria a basso livello questi argomenti sono protetti dal massimo riserbo, quel poco che si trova si riferisce a calcolatori di 30'anni fa e quindi fuori corso. Mi è venuto un grave dubbio "ci sarà forse in italia una persona che sa veramente come funziona un calcolatore dalla A alla Z ?" in italia ci sono del professoroni dell'informatica, ci sono enormi e costosissimi centri di ricerca, come mai nessuno di loro non si è mai impegnato a spiegare ai comuni mortali come funziona un calcolatore?
Di questa difficoltà nel reperire una sufficiente documentazione ne dobbiamo prendere atto se vogliamo addentrarci in una programmazione di basso livello della macchina, non possiamo inventarci codifiche a caso, ma dobbiamo seguire la giusta programmazione per ogni tipo di calcolatore.

Linguaggio Macchina

Il "linguaggio macchina" è la base di ogni comando inviato al processore, in formato numero esadecimale, incomprensibile se non viene tradotto in semplice istruzione assembler, esso ci permette di scrivere le sequenze di numeri che verranno inviate alla macchina ed elaborate dal processore. La prima fatica sarà quindi di apprendere la numerazione esadecimale totalmente differente da quella decimale alla quale siamo abituati, però molto più efficiente e composta solamente di numeri interi, tutta l'informazione che ci serve possiamo facilmente reperirla su internet. Cerchiamo quindi di imparare bene la numerazione esadecimale che ci servirà in ogni istante del nostro lavoro.
La codifica finale che viene inviata al processore è formata da op-code, in formato esadecimale, ogni istruzione che dicitiamo in assembler biosogna poi tradurla in uno o più op-code, svariati elenchi di op-code relativi ad ogni istruzione li possiamo reperire in rete, ce da precisare che le istruzioni e relativi op-code incorporati in ogni processore sono tantissimi, i produttori di schede ne aggiungono in continuazione di tutti i gusti ultimamente ad esempio si sono aggiunte istruzioni per i linguaggi di alto livello, comunque niente paura, a noi per far girare il nostro codice ne serviranno poche.
Ci serviranno le istruzioni base del calcolatore: per il movimento dei dati in memoria, per il calcolo aritmetico delle operazioni, per i salti condizionati, per i cicli, per lo stack, in più qualche istruzione dedicata all'impostazione iniziale della macchina. Quindi con poche istruzioni di base saremo in grado di scrivere qualsiasi tipo di codice, evitando di addentrarci in istruzioni complesse, che non sono altro che l'insieme di più istruzioni, oltretutto a volte mal documentate o addirittura non documentate. Poco ma buono questo è il miglior detto ed è alla portata di tutti. Altro argomento che dovremo approfondire riguarda la dimensione della codifica dei numeri in esadecimale: un byte è il numero più piccolo che possiamo indirizzare in memoria da "0 a FF" pari a 8 bit, poi abbiamo il word da "0 a FFFF" pari a 16 bit, per ultimo il dword da "0 a FFFFFFFF" pari a 32 bit. Numeri di grandezza superiore per il momento non ci servono, magari quando saremo più grandi.... Il funzionamento di questi numeri è un po' complesso da farci l'abitudine però tutto si impara e scrivendo codice ci si affina un poco alla volta, si correggono gli errori e si procede tanto non vi preoccupate se mandate codice errato al processore tutto si blocca ma non si rovina esattamente "niente".
La conoscenza del codice macchina è molto importante per poter capire come funziona un calcolatore, su internet si trova svariata e abbondante documentazione quindi vi consiglio di andare a leggervi qualche pagina cercando di approfondire bene l'argomento e di non fermarvi solo alle pagine per principianti. Acquisita una buona sintonia con il linguaggio macchina diventa tutto più facile, per noi programmare codice da inviare al calcolatore e ci si rende conto immediatamente della validità o meno delle nostre istruzioni, quindi la nostra conoscenza si traduce in un buon risparmio di tempo e fatica, considerate solo che il codice che inviamo al calcolatore va tutto testato, all'inizio testeremo istruzione per istruzione poi quando saremo più capaci, testeremo funzione per funzione e se il nostro codice sarà troppo errato ci vorrà parecchio tempo per capire la causa del non funzionamento delle nostre istruzioni. Quando si invia codice al calcolatore e ci si aspetta una determinata risposta dalla macchina che magari non arriva o magari il calcolatore si blocca, a volte spunta il sospetto che il nostro codice sia esatto e si attribuisce la colpa al mal funzionamento della macchina, niente di più errato infatti il calcolatore è molto preciso nell'eseguire il codice e purtroppo ci dobbiamo in santa pazienza rivedere la nostra codifica nei punti errati.
In conclusione delle ultime considerazioni si evidenzia che una delle prime fasi di stesura codice sarà dedicata alla scrittura del nostro compilatore che ci permetterà di convertire il nostro codice in linguaggio macchina e mandarlo in esecuzione, un buon compilatore ci permetterà di scrivere e correggere rapidamente le nostre istruzioni, la semplicità è alla base di tutto il mio ragionamento quindi vi darò tutti i passi per costruirvi il vostro compilatore, i riferimenti saranno indizizzati per processore Intel e quindi relativa codifica in assembler, per chi vorrà utilizzare altri sistemi si dovrà convertire le istruzioni nel modo appropriato e cercarsi eventuale documentazione aggiuntiva.

Difficoltà di percorso

La strada che andremo a percorrere è tanta, quindi dobbiamo avere una buona dose di pazienza e altrettanta resistenza, chi si ferma lungo il percorso avrà solo sprecato tempo ed energie, oltretutto la nostra strada sarà tutt'altro che rettilinea ma sarà piena zeppa di curve che ci permetteranno di aggirare l'ostacolo e sovente addirittura si dovrà tornare in parte indietro e partire per una diversa direzione.
Come già ne ho parlato la maggiore difficoltà sarà nel reperire sufficiente documentazione in merito all'argomento in rete esistono migliaia di siti in tema, però hanno tutti un'insufficiente livello di conoscenza per quanto riguarda le impostazioni della macchina, queste informazioni andrebbero rilasciate dai produttori di schede o dai costruttori dei componenti del nostro calcolatore, però come ben si sa questi signori si preoccupano di vendere i loro prodotti e di non dare informazioni tecniche. Quindi bisogna arrangiarsi e perdere tantissimo tempo per cercare di capire quello che nessuno ti vuole insegnare, bisogna fare prove estenuanti finchè si ottiene un buon risultato.
La seconda difficoltà che incontreremo è rappresentata dalla enorme quantità di tipi di calcolatori in commercio, effettivamente sono tutti simili però non è possibile scrivere un solo codice per tutti quanti, ma bisogna adattare il codice per ogni tipo di scheda che si vuole programmare, o componente che si vuole mandare in esecuzione, come già accennato il codice che vi propporrò sarà relativo alle macchine "Intel" a 16 e 32 bit. Il codice da me elaborato viene testato su di una macchina un po' datata ma efficiente quanto le macchine più moderne e precisamente su un "Pentium 3" per poter far girare lo stesso codice su altri tipi di schede Intel si dovrannno apportare alcune modifiche alla prima parte del codice che comprenderà l'impostazione base del calcolatore, effettivamente non sono tante però serve sempre quel tipo di macchina per poterle testare, e naturalmente la cosa non è alla mia portata. Una volta scritto il codice di avvio della macchina si è creato quella parte di codice differente da macchina a macchina e quindi si può procedere con la scrittura del codice dei nostri programmi in base a quello che vogliamo realizzare e tale codice si può spostare liberamente su qualsiasi tipo di macchiana, semprechè incorpori una scheda di tipo Intel.
Penso che sia già un buon passo poter dire di mettere in funzione la nostra macchina con un codice scritto e testato da noi direttamente senza l'apporto di un qual si voglia "Sistema operativo" tanto come ho già detto quei signori non ci permetteranno "mai" di mandare anche una sola istruzione in assembler direttamente al processore.

Funzioni di base

Le prime funzioni che andremo a compilare e a discutere sono le più difficili e complesse quindi vediamo di comprenderle per bene in quanto esse ci permetteranno di mettere in esecuzione il nostro calcolatore e poi con un buon compilatore possiamo scrivere il codice dei nostri programmi e mandarlo in esecuzione. Procedendo per ordine il primo passo sarà di scrivere l'mbr per l'avvio della macchina, dopo di che volendo potremmo ad esempio utilizzare le funzioni del "Bios" ce ne sono parecchie per la gestione dei vari componenti della macchina, sono abbastanza documentate e compatibili con i vari tipi di calcolatori; hanno solo qualche difetto: ad esempio sono un po' vecchiotte, gestiscono solo un MB di memoria, sono parecchio lente e certe periferiche non le conoscono proprio vedi USB, MODEM ecc..
Penso quindi che ne useremo il meno possibile di funzioni del bios, ma ci impegneremo a fondo per capire il funzionamento delle varie parti e andremo a scrivere direttamente il codice che ci serve, le funzioni bios ci potranno tornare molto utili come esempio e ci daranno le informazioni di cui abbiamo bisogno, non essendo direttamente disponibile su internet. Per continuare dopo l'mbr si dovrà impostare la memoria protetta che ci permetterà di utilizzare tutta la memoria del nostro calcolatore, ci saranno varie funzioni da scrivere per il controllo della dimensione della memoria e del disco, si dovranno scrivere due funzioni per la lettura e scrittura del disco, si dovranno caricare i colori e cercare di capire come funziona la scheda video in dotazione che ci permetterà di mandare in esecuzione i punti del nostro video. La cosa che ho maggiormente faticato a comprendere è il funzionamento delle interruzioni che vengono regolarmente inviate dal calcolatore, tempo e tastiera, bisogna comprenderle molto bene perchè senza di esse non si riesce a combinare proprio niente si finisce sempre di bloccare la macchina e ricominciare da capo. Quindi andremo a scrivere la tabella delle interruzioni di errore che ci permetterà di far girare silenziosa e senza inceppi la nostra macchina. Se poi vogliamo guadagnarci il paradiso (sempre che esista) potremmo scivere qualche funzione per la gestione di una stampante, servirebbe pure poter leggere e scrivere un cd e magari sapere qualche cosa sulle usb, argomento molto raro e incompleto su internet.
A questo punto arrivati saremo al massimo non ci resterà che scriverci un buon compilatore e dare l'avvio a più svariati programmi di nostro interesse.

Alcune considerazioni sui Sistemi Operativi

La cosa più ovvvia che tutti possono constatare è che appena si entra in un luogo e si intravvede un calcolatore in funzione viene l'istinto di andare a curiosare che sistema operativo incorpora, e si scopre che il sistema operativo è sempre lo stesso, versione vecchia o ultima versione, ma sistema operativo sempre lo stesso. Quasi tutti gli uffici usano lo stesso sistema operativo, quasi tutte le aziende usano lo stesso sistema operativo, quasi tuttti i privati a casa comprano lo stesso sistema operativo, non parliamo poi degli uffici statali penso che sia obbligatorio usare quel sistema operativo. Non so, non volio dire se nel resto del mondo vige la stessa metodologia, comunque chi ha visitato o lavorato in altri stati può benissimo lasciare la risposta.
Spaventoso direi, a livello mondiale in prevalenza si utilizza lo stesso sistema operativo, con questo non vuol dire che non ce ne siano altri, non vuol dire che gli altri sia peggiori, a me sembra che di sistemi operativi ne esitano almeno un centinaio, e mi pare che i sistemi operativi in commercio facciano un po' tutti le stesse cose, cioè siano un po' tutti copiati l'uno dall'altro, quindi lascio ad ognuno di voi la risposta più appropriata. A mio avviso la dittatura di un unico sistema operativo non può certo giovare alla programmazione, allo sviluppo di nuovi pensieri, di nuovi ragionamenti in ambiente di programmazione. Infatti la programmazione del codice è tutta orientata è tutta indirizzata, puoi scegliere il linguaggio che più ti interessa, ma se vuoi scrivere del codice devi seguire le linee direi meglio le rotaie imposte da questa enorme ingiustizia...
Il sistema operativo ideale (naturalmente non esiste) dovrebbe essere quella parte di codice che serve per dare alla macchina le funzioni di base, per gestire i vari componenti della macchina a basso livello, per dare le impostazioni iniziali alla macchina, e basta, di li in poi dovrebbe entrare in concorrenza la capacità di esecuzione del singolo programma, quindi a seconda di quello che voglio eseguire carico il programma più adatto, il programma che più mi piace o più mi ispira. Sarebbe un metodo per creare un minimo di concorrenza senza dare tutti i proventi economici alla stessa azienda. Il sistema che attualmente più si avvicina alla mia idea può essere considerato il "Bios" tale programma potrebbe benissimo sostituire i vari sistemi operativi, ogni versione di bios che monta il calcolatore è specifico per quel tipo di processore, le varie aziende che oggi scivono il sistema di avvio possono avere tutte le capacità e la documentazione che serve per costruire le funzioni di base della macchina, creando codice eseguibile mille volte più efficiente e veloce di un qualsiasi sistema operativo. Guarda caso i Bios sono tutti scritti in assembler e semplicemente convertiti in linguaggio macchina, sono leggeri di poco codice, codice diretto sulle porte di comunicazione ai vari componenti della macchina, hanno tutti i requisiti per far funzionare bene e velocemente il calcolatore. Guarda caso i Bios non detengono protezioni, ma sono sistemi liberi da dove ogni programmatore può apprendere sempre nuove informazioni esatte e specifiche per quel tipo di calcolatore. Guarda caso, però che i vari Bios siano continuamente aggiornati, ma restano sempre e solo le vecchie funzioni non pensano o si rifiutano di seguire l'evoluzione delle macchine che si sono verificate nel corso degli anni. Altro fattore negativo risulta quindi questa dormienza da parte delle aziende che oggi giorno sopportano i vari "Bios". In conclusione un nuovo tipo di Bios potrebbe essere sufficiente per la gestione della macchina a basso livello, mentre tutto il resto dovrebbe essere a carico di chi si occupa di progettare e scrivere il codice di un programma. Si avrebbe una potenzialità enorme, gestirsi direttamente la memoria, ripartirsi il disco come meglio si vuole, gestirsi il video nel modo più appropriato e così via...

Linguaggi di Programmazione

Di linguaggi di programmazione ce ne sono troppi, complicati e pieni di regole, penso che studiarne bene solo uno sia già abbastanza faticoso o addirittura impossibile i programmatori che li adoperano generalmente ne conoscono solo una parte dell'intero pacchetto, chi li ha progettati e provvede allo sviluppo ha pensato di dare un valido aiuto al programmatore più esperto o meno, creando funzioni di ogni genere, di gestire il più possible ed in ogni parte il calcolatore, ma allontanando sempre di più il programmatore dalla vera conoscenza della macchina.
I linguaggi di programmazione hanno appesantito notevolmente il codice aumentando drasticamente i tempi di esecuzione, hanno creato una maggiore freguenza all'errore da parte di chi li usa, essendo molto complicati è più facile commettere errori che passeranno inosservati. Scrivere un programma con un linguaggio di alto livello vuol dire moltipicare il codice di dieci volte in quantità rispetto ad un programma di basso livello. I linguaggi di programmazione sono tutti legati ad un sistema operativo e non comunicanti direttamente con la macchina come dovrebbero essere. Come ho detto sono molto complicati e documentati da enormi volumi, penso che in questa società complicare le cose sia più che altro un metodo commerciale, sicuramente più dannoso che utile alla gente. Tempo addietro comprai uno di questi manuali pensando di crearmi una cultura su di un metodo di programmazione, quando lo sfogliai non ne lessi più di dieci pagine, non ci capii niente di programmazione, il tutto era orientato a giri di parole complicate che non avevano niente da insegnare alla programmazione, così pensai bene di regalarlo a qualcun'altro. Però quando andai in libreria per cercarmi un manuale sulla bassa programmazione e sul funzionamento di una macchina incontrai il più assoluto vuoto, l'argomento non era neanche trattato e ritornai a casa a mani vuote.
Si creano dibattiti e conferenze sui più svariati sistemi di programmazione si discute di tutto e di più, ma alla fine si creano solo enormi giri di parole che non giovano certo ai programmatori ad esempio "programmazione ad oggetti" non ho mai capito cosa significhi una simile frase in programmazione, sicuramente non lo sanno neppure quelli che la hanno inventata, una qualsiasi scheda elettronica è una sequenza di impulsi elettrici e non ha niente a che vedere con gli oggetti, "intelligenza artificiale" spiegatemi cosa vuol dire? fatemi vedere un programma intelligente? non si capisce perchè si falsificano termini che si riferiscono ad altre cose, l'intelligenza si attribuisce ad una persona e non a una macchina, una macchina non potrà mai fare quello che fa una persona, la macchiana quando fa una cosa fa sempre la stessa cosa e allo stesso modo se si vuole farle fare un qualcos'altro la si deve riprogrammare. Già va in discussione cosa voglia dire intelligenza quando si riferisce ad una persona, non penso che ci sia un metodo per poter dire se una persona sia più intelligente o meno, sicuramente chi ha i voti più alti non è più intelligente di chi li ha più bassi, per lo stato è più intelligente chi fa più affari e qindi traffica di più, però così non è, considerato che questa gente non solo nel passato ha creato sterminio e guerre ma anche in questi anni con l'era del capitalismo i vari condottieri o industriali o grossi commercianti hanno creato immensi danni ecologici e non solo.

Fase di avvio del programma

L'idea di questa discussione è di addentrarci in argomenti a noi più o meno sconosiuti quali il funzionamento a basso livello del nostro calcolatore e di andare alla ricerca, con tutta la documentazione reperibile su innternet o altre fonti, di un metodo di programmazione tale che ci permetta di mettere in funzione i vari organi del nostro calcolatore. Con questo non voglio dire che dobbiamo scrivere un sistema operativo, ma semplicemente dobbiamo codificare una serie di funzioni che ci permettano di far funzionare la nostra macchina.
Come detto in precedenza i calcolatori sono tutti simili nel funzionamento ma ogni scheda che vi si incorpori richiede il suo specifico codice, quindi noi dobbiamo adattare la nostra codifica al tipo di scheda che abbiamo in uso, possiamo così facilmente testare il nostro codice e piano piano si procede nella stesura delle funzioni. Possiamo seguire due strade differenti per raggiungere il nostro ideale: la prima è la più semplice, ci procuriamo un calcolatore usato non ha importanza tipo e marca basta che funzioni, ci colleghiamo un video e una tastiera e lo usiamo solamente per il nostro lavoro questo metodo ci dà ampio spazio di movimento, solo noi siamo padroni di tutta la macchina, possiamo pasticciare fin quanto ci piace senza arrecare danni ad atro codice o stistemi installati sul disco. La seconda strada è più complicata, però con un po di buona volontà, ci permetterà di raggiungere lo stesso risultato, lavorando direttamente sul calcolatore che usiamo normalmente.
Per incominciare ci sevono alcune utilità che magari già abbiamo o altrimenti andiamo a reperirle su internet; ci seve un buon editor in esadecimale che ci permetta di copiare e scrivere codice direttamente dal disco fisso, ci serve un programma di debug che ci permetta di scrivere un po' di codice in assembler che ci servirà in fase di avvio, i nostri programmi verranno codificati con codice a 32 bit, quindi il debug dovrà essere compattibile, ci servirà una piccolla calcolatrice in esadecimale per le nostre conversioni e calcoli, ci servirà un masterizzatore per cd "iso" per scrivere eventuali cd di avvio. Una cosa importante da procurarsi, che ormai la modernità ha archiviato, è un floppy che ci sarà di particolare utilità, il disco del floppy è tale quale sia in lettuta che in scrittura al disco fisso, quindi di facile maneggio e comprensione, il floppy ci servirà per definire vari dischetti di avvio che intercambiandoli si potrà facilmente passare da un sistema all'altro. Il disco del floppy è scrivibile direttamente con un editor esadecimale mentre il cd deve essere masterizzato con un apposito programma e ci rende il lavoro più difficile, ci sono ancora molti calcolatori un po' datati che montano un floppy e anche su di un nuovo calcolatore si può sempre installare. Come avrete notato la dotazione di bordo è poca e facilmente reperibile, naturalmente ci servirà una base di documentazione su interruzioni e codifica delle istruzioni, su internet si trova quella famosa lista molto vaga e incompleta, che guarda caso mai nessuno si è preoccupato di tradurla, comunque in mancanza di altro quella lista ci darà un buon aiuto e quindi possiamo ringrazziare questo signore che ha dedicato parecchio tempo gratis alla codifica della medesima.
Ritornando al discorso su quale calcolatore useremo per il nostro codice, rimane da spiegare alcune cose: qindi se praticamente useremo due calcolatori, uno esclusivamente per il nostro programma e il sencondo con eventuale sistema operativo e dotazione di bordo, non ci saranno particolari complicazioni nella fase di avvio. Se però decidiamo di utilizzare un solo calcolatore sia per il nostro programma sia con installato un sistema operativo e con dotazione di bordo, prima della fase di avvio dobbiamo fare alcune modifiche sull'intero sistema della macchina, in quanto dobbiamo ritagliarci una partizione per installare il nostro programma.
Qindi per usare un solo calcolatore si dovrà imparare come si installa un sistema operativo, poi fare un po' di copie di quanto contiene il disco fisso, a questo punto siamo pronti per le modifiche diciamo che la prima parte del disco fisso la useremo per il nostro programma mentre la seconda parte del disco la useremo per riinstallarci il sistema operativo e ricopiarci tutti gli archivi che abbiamo salvato. In poche parole quando andiamo ad installare il sistema operativo dobbiamo prevedere due partizioni una che lascieremo libera e ci sevirà per il nostro programma, l'altra partizione la useremo per installarci il sistema operativo che abbiamo in uso. Con questo metodo saremo pronti per la fase di avvio. Rimane ancora da precisare per chi utilizza come sistema operativo il "windows" che tale sistema se non viene installato all'inizio del disco fisso richiede due partizioni, quindi per il windows dobbiamo prevedere una piccola partizione di pochi Mb all'inizio del disco poi ritagliarci la partizione per il nostro programma e qindi definire il resto del disco come partizione per installare il sistema operativo.
Ci rimane a questo punto solo da impostare l'ordine di avvio, andando nella schermata del bios imposteremo come primario per il boot iniziale il disco floppy, secondario il cd e per ultimo il disco fisso; cosi inserendo un disco floppy o un cd avremo un avvio da disco esterno oppure il calcolatore si avvia normalmente da sistema operativo.

Il primo programma

Il primo programma che andiamo a codificare senza dubbi lo possiamo considerare il più difficile per tanti motivi: difficile perchè è il primo e quindi ci saranno parecchie cose da apprendere, ci saranno molte funzioni da testare che richiederanno molto tempo e buona volontà, ci saranno nuove regole da apprendere e cercare di capire il reale funzionamento di un calcolatore. Difficile da capire perchè il mio orientamento è esclusivamente rivolto al "linguaggio macchina" quindi niente linguaggi di alto livello e niente compilatori di sistema, le nostre regole ce le detteremo strada facendo in base alla esperienza e livello di programmazione che si riuscirà ad acquisire.
Difficile spopratutto perchè partiamo da zero, abbiamo a disposione solamente un calcolatore e una tastiera per poter digitare il codice e testarlo, il primo programma comprende una serie di funzioni per l'impostazione della macchina quindi una parte di codice che ci permetta di impostare un ambiente grafico e un editor di testo per la scittura delle future istruzioni. Difficile perchè la documentazione in merito è molto scarsa sull'argomento molto superficiale, quindi da soli dobbiamo arrangiarci e magari inventarci quello che ci serve ma non si trova, non è che possiamo saltare dei pezzi di codice perchè non troviamo la documentazione, altrimenti il nostro calcolatore resterà a faccia nera....
Il primo programma che andiamo a codificare rappresenta un buon traguardo se riusciremo a portarlo a termine quindi a tutti coloro che hanno intenzione di cimentarsi in tale progetto auguro "un buon lavoro".

Con poche operazioni passiamo dal modo reale al modo protetto, quindi ci siamo impadroniti di tutta la memoria del calcolatore e di conseguenza avremo la possibilità di far girare i nostri programmi totalmente in memoria per complessi o grandi che siano. Un accesso lineare alle locazioni della memoria consente un'esecuzione molto veloce evitando giri o controlli inutili, quindi tutti i nostri programmi saranno insuperabili nel tempo di esecuzione.
Quindi andiamo ad inviare la nostra tabella dei colori che ci permetterà di impostare i colori e le sfumature come meglio crediamo in base al tipo di scheda video che faremo uso.
Il nostro primo programma farà uso della "riga di comando" nella parte bassa del video verrà evidenziata una striscia di colore diverso nella quale sarà possibile impostare i vari comandi di turno, quindi niente puntatori e niente finestre di dialogo (penso che i vari sitemi operativi ci abbiano fatto venire il mal di pancia a furia di usare tutti e sempre gli stessi metodi...) si ritorna ai principi della programmazione dove tutti i comandi si impartivano da riga di comando.
Con poche operazioni impostiamo le scritte di base sulla linea di comando, quindi definiamo un colore di sfondo e andiamo a dipingere l'intero video, a tale punto abbiamo definito il nostro modello base di programmazione: niente paginazione, niente controlli inutili, niente puntatori, niente codice complesso ma solo codice in assembler. Possiamo dire di aver realizzato il nostro primo programma che in una frazione di secondo tramite l'mbr specifico si installerà sulla macchina dando un colore al video ed una linea di comando dalla quale si potranno impostare i vari comandi.
Con la prima parte del programma "Avvio" ci siamo scrollati di dosso la dittatura dei sistemi operativi, ora posssiamo organizzarci la programmazione nella massima libertà, nella seconda parte del nostro programma andiamo a programmare un piccolo e semplice compilatore che provvederà a convertire le varie istruzioni dei nostri programmi in linguaggio- macchina.
Non sarà un compilatore di marca, ne di grandi dimensioni ma sarà sufficiente per la stesura del nostro codice, esso è composto da un editor di testo e dal codice di compilazione. Viviamo in un tempo di quantistica dove tutto quello che è grande sembra che sia migliore, quindi si tende a gonfiare il proprio lavoro per far credere che sia il migliore, l'industria moderna produce grandi quantità di prodotti per la maggiore di qualità molto scadente tutti simili e di poca durata, ben migliori erano i prodotti dei vecchi artigiani ormai soffocati e annientati dall'industria.....
Quindi vediamo di programmare un buon compilatore che ci seguirà in ogni fase dei nostri esperimenti, sarà come detto un compilatore leggero però molto efficace e veloce che ci permetterà di testare sovente i nostri programmi senza perdite di tempo, sarà un compilatore facile da usare e di massima precisione che in una frazione di secondo ci ritonerà le istruzioni digitate compilate e assemblate pronte al collaudo.

Schema di programmazione

Non avendo più un sistema operativo che ci gestisca i vari componenti del calcolatore dovremo provvedere noi stessi all'organizzazione della macchina.
La prima parte che affronteremo con la programmazione riguarda la gestione del disco-fisso che ci permette di registrare i dati dei nostri lavori, lo scopo di questo sito come già detto non ha interessi commerciali ma bensì l'opposto ossia creare delle idee nuove in fatto di programmazione, sperimentare un qualcosa di diverso, quindi la nostra organizzazione della macchina sarà esclusivamente rivolta per poter impostare nuovi programmi sperimentali. Quindi non passeremo le giornate davanti al video per selezionare caselle di programmi altrui che per la maggiore servono per schedare gente o animali o denaro, oppure servono alla becera pubblicità o peggio ancora per gestire traffici.
In precedenza ho parlato di un elenco dei nomi, che siamo andati a registrarlo direttamente sul disco e ci permette di assegnare un nome ad ognuno dei nostri programmi, poi dobbiamo definire come è formato ogni nostro programma; ogni programma che andiamo a incominciare dobbiamo prevedere la posizione su disco-fisso dove verrà registrato e di volta in volta ricaricato per la continuazione, ogni programma sarà composto da più segmenti di codice testo e da un solo segmento di codice macchina, quindi dicitando un nome sulla linea di comando e premendo ritorno il calcolatore ci dovrà caricare in memoria il programma voluto e riportarci sul video un editor testuale che ci permetta di digitare il codice in assembler.
Una volta definita la posizione su disco dove andremo a registrare i nostri archivi di testo e di codice il più sarà fatto e si potrà avviare la programmazione sperimentale, il primo programma che andremo a digitare supponiamo di identificarlo col nome "XXX" verrà piazzato a partire dal settore "00,08,01,00" del disco-fisso e avrà la dimensione di un segmento intero, mentre a partire dal settore "00,08,01,80" avremo il codice compilato dello stesso programma per una dimensione massima di un segmento intero e così via per tutti gli altri programmi che vogliamo digitare in ordine sequenziale li dobbiamo registrare nell'elenco dei nomi composto dal nome stesso del programma e relativa posizione su disco-fisso.

Digitando sulla linea di comando "compila " seguito dal nome del programma che vogliamo digitare sarà compito del nostro programma "Avvio" provvedere ad andare a prelevare il codice testuale su disco-fisso e riportarlo in memoria, eseguire le funzioni necessarie per disegnarci un piccolo editor grafico e riportarci su video il testo del nostro programma. A questo punto si ha la possibilità sia di aggiungere nuovo testo sia di modificare il testo già esistente e a conclusione del nostro nuovo lavoro il tutto verrà compilato e registrato direttamente su disco-fisso alle locazioni definite in precedenza da un semplice compilatore che adesso chercherò di spiegarvi.
Il compilatore da me definito farà uso di istruzioni in assembler del tipo "intel" e le convertirà in linguaggio macchina, viene da precisare che le istuzioni contenute da un qualsiasi processore sono tante, direi sono un'infinità considerando che sono almeno 30 anni che non fanno altro che aggingere istruzioni, quindi ho pensato che a codificarle tutte sia una cosa lenta e inutile e ho ovviato l'inconveniente pensando di usarne solo alcune quelle che veramente servono ai nostri programmi, quindi andremo a costruire un elenco di tutte le istruzioni che ci serviranno per la compilazione dei nostri programmi e di volta in volta se ne potranno aggiungere delle altre.
Il compilatore farà uso di etichette per la codifica dei salti numerate in ordine progressivo da ":0000" a ":ffff" le etichette definiscono il tipo di salto "near" all'interno di un segmento, mentre per salti fuori segmento verranno definite istruzioni di tipo "far". Ogni istruzione occupa una riga intera e il carattere ";" segna l'inizio di un commento, i caratteri dell'istruzione saranno di tipo "minuscolo" e i numeri che ne compongono l'istruzione saranno di tipo "maiuscolo".
Poche regole per definire un compilatore facile da usare, più avanti verranno riportati dei programmi di esempio dai quali si potranno ricavare tutte le informazioni per la stesura del codice testo dei nostri programmi.
Le cose più importanti penso di averle spiegate e quello che manca sarà compito vostro di cercare di capirle ed andare a scovare da qualche parte.

Ed eccoci giunti al termine del primo programma "Avvio" con esso ci siamo costruiti il nostro ambiente di lavoro e di programmazione abbiamo a disposizione un buon editor di testo che ci permette di digitare i futuri programmi e un ambiente grafico a più pagine per poter rappresentate i nostri disegni, possiamo digitare i nostri programmi e testarli rapidamente premendo un solo tasto, ci siamo tolti la dipendenza dai vari sistemi operativi e più che altro abbiamo ridotto la programmazione ad un solo linguaggio "Assembler" il linguaggio di tutti i calcolatori del mondo unico e insostituibile ci siamo tolti di dosso tutti quei linguaggi derivati che altro non sono che un groviglio di regole e complicazioni inventati esclusivamente a scopo commerciale.

Cosa faremo da Grandi

Giunti a tale punto ci possiamo considerare ormai "Grandi" e quindi di poter fare alcune considerazioni sul da farsi per il futuro, come detto in nostro è un ambiente esclusivo alla programmazione sperimentale quindi dobbiamo decidere a quale scopo rivolgere la nostra programmazione, i campi sono infiniti ma sicuramente il più interessante è ricercare una programmazione che sia in grado di far eseguire al nostro calcolatore operazioni "ragionate". Attaulmente di simili programmi non ne esitono, si sono bruciati capitali su capitali negli ultimi 50 anni in inutili ricerche, dotti ricercatori e scienziati hanno seguito le più buie strade senza ottenere significativi risultati, effettivamente il calcolate di oggi è tale quale a quello di 50 anni addietro, sarà più veloce nell'eseguire i calcoli ma ieri come oggi mon è in grado di eseguire un semplice compito da solo.
Quindi penso che la direzione da seguire sia proprio questa, cercare di creare una serie di funzioni che una volta messe in esecuzione ci rappresentino sul video un "ragionamento" facendoci vedere di volta in volta cose diverse.
Vi auguro un "buon lavoro e altrettanta fortuna"

Alcuni esempi di programmazione diretta

Nella la prima fase abbiamo lavorato per sviluppare il nostro personale ambiente di programmazione è quindi giunto il momento di testarlo e provarlo d'ora in poi possiamo utilizzare la programmazione in "Assembler" direttamente sulla macchina compilarla e mandarla in esecuzione.
Possiamo inventarci tutti i programmi che ci interessano e mandarli in esecuzione, nel proseguimento vi propongo alcuni esempi di programmazione da me digitata e perfettamente funzionante il codice è di facile comprensione semplice nella stesura e super veloce nell'esecuzione. Come detto ogni programma che andiamo a scrivere occupa un segmento nella parte codice e più segmenti per contenere il testo quindi ad ogni nuovo programma dovremo darci un nome e una posizione su disco fisso e come spiegato in precedenza provvedere alle opportune registrazioni.

Per il primo esempio inventatevi un nome, io semplicemente userò la definizione "xxx" la posizione su disco-fisso è per il segmento impostazioni "00,08,01,00" e per il segmento codice "00,08,01,80"
Il programma "xxx" è un po' la base di tutti gli altri programmi in quanto inserendo il floppy contenente il primo mbr che vi ho illustrato automaticamente viene caricato assieme al segmento-dati e al segmento-call. Il programma ci imposta la macchina partendo dalla fase del "bios" e poi ci imposta un ambiete grafico formato da sei pagine video in orizzontale e altrettante in verticale ad una risoluzione di "800x600", quindi tramite la riga di comando possiamo digitare e compilare tutti i programmi che vogliamo provandoli direttamente sull'ambiente grafico che abbiamo installato.

Un intero segmento lo useremo per i "dati" la posizione su disco-fisso è per il segmento impostazioni "00,08,02,00" e per il segmento codice "00,08,02,80". In questo segmento ci possiamo registrare tutto quello che serve per l'esecuzione dei nostri programmi, oggi sorta di numeri, caratteri o tabelle che di volta in volta andremo ad esaminare o a copiare.

Un altro segmento lo usiamo per le "call" piazzato su disco-fisso alla posizione "00,08,03,00" e "00,08,03,80". Il segmento delle call raggruppa tutte le funzioni più importanti che sevono per la gestione della macchina e del video e viene condiviso da tutti i programmi che andremo ad eseguire.
E con questo segmento abbiamo terminato la base di preparazione ai nostri futuri programmi, il seguito viene da sè basta digitare un "compila + nome del programma" sulla riga di comando per aprire l'editor al testo del nostro codice e premendo un solo tasto si passa alla fase di compilazione. Basta digitare il nome del programma sulla linea di comando e premendo il tasto ritorno si manda in esecuzione il nostro lavoro.
Come avrete notato ho usato pochissimo codice per fare il tutto, solo il codice indispensabile e assolutamente in "assembler" facile da comprendere e da scrivere, alla faccia di tutti i sistemi in commercio i quali fanno a gara per distribuire quintali di codice completamente inutile, rallentando e complicando il lavoro del calcolatore.

Un altro passo in avanti lo facciamo scrivendo la nuova versione del nostro compilatore di "Assembler", sarà il compilatore più leggero al mondo e lo useremo per la compilazione di tutti i nostri programmi.
Il programma lo identifichiamo con il nome "base" e lo piazziamo alle locazioni del disco-fisso "00,08,04,00" e "00,08,04,80" il programma si differenzia da tutti i compilatori per la sua semplicità e velocità di compilazione con un solo passaggio il programma converte il codice testuale in codice "Linguaggio Macchina" e il tutto è già pronto per l'esecuzione ed il collaudo.

Un piccolissimo programma che ci verrà utile molto sovente è un editor esadecimale, lo mominiamo "disco" e lo piazziamo alle locazioni del disco-fisso "00,08,05,00" e "00,08,05,80" il programma ci fornisce un editor per poter scrivere dei nuneri in esadecimale in una qualsiasi locazione del disco-fisso.
Semplicissimo da usare ci carica un segmento alla volta del disco-fisso a partire dal segmento "0" fino all'ultimo segmento dello stesso disco, l'editor ci divide il segmento in pagine a scorrere della grandezza di due settori e facilmente editabili e salvabili. Questo programma lo useremo tutte le volte che ricorre l'esigenza di annotare dei numeri direttamente sul nostro disco.

Adesso andiamo a scrivere un programma che ci permetta di salvare tutti i nostri lavori direttamente su di un cd, il programma non si vuole definire come masterizzatore ma come piccola utilità per fare una copia dei dati o del codice al quale stiamo lavorando.
I masterizzatori commerciali come tutti sanno hanno la fama di bruciare interi dischetti lasciandoli al 99% vuoti, ora è il caso di dire che o si prende in giro la gente o non si è capaci a fare programmi.. Al contrario il mio programmino così banale ci permetterà di fare un centinaio di copie sequenziali sullo stesso dischetto e non solo ma ci permetterà di leggere tutto quello che è stato stampato sul dischetto a partire dal primo numero fino al termine. Quindi possiamo registare di volta il volta qello che ci serve e poi andarlo a rileggere in qualsiasi posizione del dischetto esso si trovi.
Il programma lo nominiamo "cdr" e lo piazziamo su disco-fisso alle locazioni "00,08,09,00" e "00,08,09,80"

La grafica dei punti

Dopo i primi esempi di programmazione diretta è giunta l'ora di sbilanciarci in un programma completo che ci permetterà di testare quello che abbiamo costruito in precedenza, i campi sono infiniti tutti difficili però altrettanto interessanti.
Prima di incominciare però dobbiamo fare alcune drastiche considerazioni non tanto sul metodo di programmazione ma sui limiti che ci vengono imposti dalla macchina stesssa che sono parecchi e tutti insormontabili, cercheremo di aggirarli ma sarà difficile e faticoso.
Il primo grande difetto del calcolatore che certamente non possiamo superare è la mancanza di una qualsiasi forma visiva ossia la macchina lavora completamente al buio, la memoria del calcolatore può contenere milioni di dati però non ne vede neppure uno, se vogliamo sapere cosa contiene la memoria del nostro calcolatore li dobbiano andare a leggere uno alla volta, se li vogliamo confrontare ne dobbiamo confrontare uno alla volta, se li vogliamo ragruppare ne dobbiamo spostare uno alla volta e così via, questa piccola nozione è sufficiente per capire il fallimento della macchina denominata "calcolatore".
Le persone o animali al contrario sono dotati della capacità visiva che permette, in una frazione di secondo, di collegare milioni di punti ad un semplice sguardo riusciamo a mettere insieme una intera immagine, riusciamo a definire i colori ed approssimarne la posizione, quindi l'abisso tra macchina e persona è enorme il paragone viene semplice considerando che con la programmazione dobbiamo insegnare alla macchina ad svolgere determinate funzioni.

Il secondo grande difetto del calcolatore è la forma matematica che adotta, sappiamo tutti quanti che il calcolatore può eseguire un'operazione alla volta, non si capisce bene quanti millenni mancano prima di avere una macchina che possa eseguire più operazioni alla volta. Questo problema grava pesantemente sui nostri programmi in quanto se si appesantisce troppo il carico di operazioni da svolgere va finire che la macchina si ferma li a contare senza più darci segni di movimento facendoci pensare che si sia tutto bloccato...... però se il programma è corretto va a finire che prima o poi finisca di contare e ritorni a dare segni di movimento, però intanto noi stiamo li ad aspettare che il tempo passi.
La potenza di un calcolatore quindi non è determinabile dalla sua velocità di esecuzione delle operazioni ma bensi dalla qualità del codice che deve andare in esecuzione, quindi sta al programmatore cercare di rimediare alle carenze della macchina. Il punto di forza del processore sta nella valutazione della condizione "vero o falso" qui riusciamo ad ottenere una veloce esecuzione dei test, la macchina li può elaborare velocemente però il programmatore si trova in difficoltà quando i test aumentano, amenta pure il codice a dismisura e non si riuscirà mai a considerare tutte le condizioni delle quali si può avere bisogno.
Navigando su internet si incontrano le più svariate forme di programmazione legate ad algoritmi da capogiro a volte incomprensibili formati da grovigli di operazioni, diciamo subito che un programma legato ad un determinato algoritmo farà sempre la stessa cosa e niente altro, un programma per fare più cose quindi dovrebbe contenere più algoritmi, solo che ogni algoritmo comprende una sequenza di operazioni che rallenta l'esecuzione del programma mettendone alcuni in progressione va a finire che la macchina si blocca e noi siamo li ad aspettare............
La tecnica usata in questi anni per programmare un calcolatore sta nell'inserire su disco centinaia di programmi e all'occorrenza di richiamarne in memoria uno alla volta e mandarlo in esecuzione, e qui siamo all'età della pietra in quanto il nostro calcolatore, concepito come macchina pensante, da solo non sa fare proprio niente.........
Ha bisogno di una persona che costantemente gli insegni cosa deve fare e oltre tutto non è in grado di apprendere cosa stà facendo per utilizzarlo in avvenire, questo piccolo difetto in questi anni ha portato miglioni di operatori che passano la vita insegnando al calcolatore cosa deve fare, e percepiscono un regolare stipendio magari anche più elevato della gente che sta in produzione, quindi si è creato un impoverimento della gente e la cosa più bestiale è che tutti questi operatori o impiegati vengono sottratti al mondo della produzione industriale, artigiana o agricola e pagati con i soldi dei contribuenti e guarda caso non falliscono mai.
Si vive da decenni in uno stato di quantistica, dove tutti fanno delle cose senza minimamente assegnare un valore alle proprie azioni, si fanno le cose semplicemente per generare movimento, senza considerare che il proprio movimento può arrecare danni non solo ad altre persone ma può essere distruttivo verso la natura o verso il mondo animale. Uscire da questa situazione sarà difficile e penoso o forse impossibile però sarà obbligatorio in quanto la natura è da sempre più forte dell'essere persona o collettivo.

Dopo aver analizzato i primcipali pregi della macchina "calcolatore" abbiamo capito che forse si dovrà portare avanti un ragionamento totalmente diverso per quanto riguarda i metodi di programmazione, prendiamo come esempio un programma per il disegno grafico commerciale che si definisce "auto.." lo scarichiamo sul calcolatore e poi lo mettiamo in funzione, ci accorgiamo subito che da solo non è in grado di fare niente se vogliamo disegnare innanzi tutto dobbiamo leggerci centinaia di pagine istruttive, poi se vogliamo disegnare un punto, una linea o un testo lo dobbiamo impostare sulle relative funzioni e andare a costruire ogni singolo oggetto, quindi il tempo passa e il disegno cresce lentamente talmente lentamente che si fa prima a disegnarlo a mano come si faceva nel passato.
Allora io mi domando dove stà la funzione "auto" propagandata dagli stessi costruttori del programma???????

In conclusione l'unica strada che ci rimane è di andare alla ricerca di nuove forme di programmazione, questo vuol dire scartare tutti i metodi correnti di programmazione, considerandoli fallimentari, e impegnarci nella ricerca per lo sviluppo del codice macchina che soddisfi un minimo di controllo sul movimento della macchina in automatico, che ci permetterà nel futuro di eliminare quella persona operatore che sta li a schiacciare tasti o selezionare caselle per cercare di controllare il movimento di un calcolatore che da solo non è in grado di fare proprio niente.
Di sicuro non si potrà mai dire che un calcolatore può diventare intelligente o dire che il calcolatore può ragionare però si potrà dire che un calcolatore è in grado di esseguire un piccolo lavoro in conto proprio. Quindi alle persone resterà solo il compito di osservare il piccolo lavoro svolto dalla macchina e se considerato valido di utilizzarlo altrimenti scartarlo e passare al prossimo.

Quindi partiamo con un piccolo esempio, un programma di cad oggi giorno si utilizza per tracciare le linee di una pianta nel disegno edile, dobbiamo mettere assieme diciamo un centinaio di linee per costruirne uno intero, dobbiamo disegnare sul nostro video una linea alla volta, magari in scala, dobbiamo impostare i colori, dobbiamo distribuire una ad una le linee e i testi di quotatura, dobbiamo impostare le eventuali scritte, a tale punto abbiamo concluso il nostro lavoro.
Però anche se possiamo considerare il nostro lavoro come ottimo, in effetti abbiamo passato il tempo a costruire una sola pianta, che una sola sempre resterà, sempre resterà tale e quale, stampandola avremo sempre lo stesso disegno, se la si vorrà leggermente modificare dovremo passare altro tempo, ad esempio per spostare una porta o un muro o cambiare la dimensione di una finestra, a tale punto avremo costruito il secondo disegno diverso dal primo, la realtà però ci fa notare che per ogni disegno che voghiamo modificare ci dobbiamo passare altro tempo.
Una migliore soluzione per disegnare una pianta per il disegno edile potrebbe essere: anzichè utilizzare un programma di cad, metterci li noi stessi e scriverci un piccolissimo programma nel linguaggio della macchina che ci disegni la nostra prima pianta e poi partendo dalla medesima ci disegni un'altra pianta leggermente modificata, il nostro piccolo programma quindi sarà in grado di farci vedere sul video direttamente la nostra pianta senza l'utilizzo di funzioni per il tracciamento delle linee o altro che sia, ed in una frazione di secondo avremo la nostra pianta disegnata, ma non solo, perchè la bestialità del metodo sta nel fatto che il nostro piccolo programma sarà in grado di disegnarci altre migliaia di piante derivate dalla prima leggermente modificate, però quasi tutte diverse dalla prima. Provare per credere.......
Alla pagina "La grafica dei punti" si può vedere il risultato di un piccolissimo programma che ho scritto e vi dimostra quanto affermato in precedenza, il programma ha la dimensione di qualche centinaio di bytes, facile da scrivere e semplice nel codice, buon divertimento.........



invia E-mail