Come creare la mia ROM personalizzata? Quali linguaggi di programmazione devo conoscere
È possibile creare una ROM personalizzata (memoria di sola lettura) "masterizzando" una PROM (ROM programmabile) o EPROM (PROM cancellabile) o EEPROM (PROM cancellabile elettronicamente) o EAPROM (PROM modificabile elettronicamente).
Normalmente la vostra ROM contiene linguaggio macchina grezzo per un dato processore. Per le CPU Intel™ basate su x86 questo sarebbe normalmente (o almeno inizierebbe con) il codice per la modalità "reale" (non protetta).
Nota che le varie varianti delle tecnologie PROM mostrano una progressione verso meno "sola lettura" e maggiore accesso alla riscrittura del contenuto della PROM. Le EPROM più vecchie venivano cancellate con un'esposizione temporizzata alla luce UV (ultravioletta) di intensità significativa. Essenzialmente la programmazione veniva come sciolta da loro. Le EEPROM potevano essere cancellate con un segnale elettronico sollevato su certi pin per un intervallo di tempo specificato; l'intera ROM veniva cancellata con questa procedura. Le EAPROM (Cos'è l'EAPROM?) erano modificabili in blocchi e fondamentalmente si sono evolute in quella che oggi chiamiamo "memoria flash".
Le ROM si distinguono dalle "PROM" per i metodi di fabbricazione e la scala. Le ROM sono prodotte in serie (per ogni dato BIOS o altri programmi/contenuti) mentre le PROM sono state progettate per essere programmate sul campo da un dispositivo speciale, un programmatore PROM, che è progettato per applicare un segnale ad alta tensione sulle linee ad un dato indirizzo e quindi "far saltare il fusibile" in quella posizione di bit. Le EPROM richiedevano dispositivi simili per la programmazione e una luce UV per la cancellazione.
Quando chiedete di masterizzare ROM personalizzate c'è il presupposto nascosto che la vostra intenzione sia quella di creare ROM di avvio personalizzate.
Teoricamente si potrebbe mettere qualsiasi contenuto in una ROM e mettere insieme una sorta di scheda di espansione in modo che questi dati siano mappati nello spazio degli indirizzi di una specifica architettura di computer in una specifica posizione. Ma, in pratica, c'è molto poco uso delle ROM nell'informatica generale, a parte il "codice di avvio".
Quindi, qualsiasi linguaggio di programmazione che può compilare in linguaggio macchina nativo dovrebbe essere sufficiente. Notate che questo non è così semplice come potreste pensare.
Quando compilate programmi normali per farli girare sul vostro sistema, essi vengono collegati a del codice "run-time" e di solito ad alcune librerie standard (di solito codice oggetto condiviso ... file .so su Linux, file .dynlib su MacOS X, e file .DLL su MS Windows, tra gli altri). Ma il codice che si avvia in una ROM di avvio non è in esecuzione sotto l'ambiente del sistema operativo. I presupposti, i punti di ingresso al codice, le intestazioni per gli eseguibili (ELF per Linux, COFF per alcune versioni molto vecchie di Linux e Unix, ecc.) e, naturalmente, qualsiasi riferimento a chiamate di sistema e funzioni di libreria condivisa non sono tutti validi per le ROM di avvio.
Per la maggior parte dovresti assumere che stai per scrivere codice per le PROM in C (non C++) o nel linguaggio assembly della tua architettura.
Per saperne di più sulle ROM in hardware reale, mainstream, di uso generale, potresti studiare coreboot e il suo fork, Libreboot, o TianoCore (UEFI) che sono sforzi per fornire sostituti che potresti usare sui PC (desktop e server ... per lo più?).
Un altro articolo che potresti trovare interessante sarebbe uno su come scrivere un driver seriale/TTY "panic room" da usare nel BIOS virtualizzato VMWare in assembly 8086: Crafting a BIOS from scratch. Questo dovrebbe darvi un'idea del tipo di considerazioni che incontrerete nello scrivere qualsiasi altro codice che potreste mettere in una ROM di avvio hardware. Ecco un'altra risposta a una domanda simile su StackOverflow che vale la pena leggere: Writing my own BIOS.
Questo è probabilmente un buon punto di partenza. Tenete a mente che qualsiasi tentativo di scrivere un programma pratico da inserire in una ROM sarà uno sforzo molto grande. Buona fortuna.