Je schrijft inderdaad niet zo even een BIOS, maar niet om al de redenen die jij aangeeft. Het wordt zo wel (te) erg geabrakadabriseerd.
Laat ik voorop stellen dat het onmogelijk is om jezelf eventjes in te werken als je nog geen enkele ervaring heb met het schrijven van hardware-initialisatie. Maar met genoeg tijd, geduld, volharding en geld

kun je alles bereiken wat je wilt - ben ik van mening.
Overigens bestaat een normale BIOS uit verschillende "modules" die elk een deel van de hardware voor hun rekening nemen. Als je dus een BIOS alleen maar wilt aanpassen hoef je meestal slechts 1 module te vervangen. Ook kun je ervoor kiezen een module toe te voegen, zonder verder iets aan de oorspronkelijke BIOS te veranderen. Die extra module hoeft dan alleen maar te doen wat jij extra of anders ingesteld wilt hebben. Op die manier is het nog het minst moeilijk.
Je bios vertelt welke schakeling welke interrupt request id krijgt.
<knip>
Daarbij kan je niet even Assembly programmeren.
De gangbare programmeertaal in het "wereldje" is Forth, maar ook C aangevuld met assembly is mogelijk. BASIC zou ook goed kunnen, zolang de programeertaal maar 16-bit machinecode kan produceren en je conditionele jumps en assignments zo efficient mogelijk kan uitgenereren (eindelijk weer eens iets wat BASIC wel kan

). De eisen die het schrijven van een BIOS stelt aan de programmeertaal en de programmeur zijn dan ook absoluut niet hoog.
Het "enige" (bijna?) onverkomelijke probleem is inderdaad dat je een volledige specificatie nodig hebt van de hardware om alles juist in te kunnen stellen en te initialiseren. Bovendien moet je dat ook nog op de juiste volgorde doen. Ook moet je op de hoogte zijn en blijven van eventuele "silicon bugs" in de hardware, met name de chipset wil nog wel eens problemen hebben.
Je moet met een deel van de ingeprikte hardware standaard overweg kunnen, zo moet je elke mogelijk ingeprikte processor herkennen en juist instellen (voltage, dividers, FSB) en moet je ook het ingeprikte geheugen goed herkennen en de chipset daar op instellen.
Wil je dus je BiOS programmeren moet je de sourcecode hebben van de BiOS.

Dat komt ongeveer neer op "je hebt de sourcecode van Windows nodig om een OS te schrijven". Dat is natuurlijk onzin. Je hebt flink veel hardware-kennis en ervaring nodig, datasheets, creativiteit en ja je moet kunnen een beetje kunnen programmeren...
offtopic:
Het is "BIOS", afk. van Basic Input/Output Sytem. Het staat niet voor "Built-in Operating System" o.i.d.
War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic