Postavil som si printserver - doska Shuttle HOT-304, i386DX/25. Kedze 4MB bolo na Linux malo, musel som to rozsirit na 8MB (kedze doska ma SIPP sloty a mal som len SIMMky, vyrobil som z nich SIPP pridanim noziciek). Problem je v tom, ze kontrola takehoto mnozstva pamate pri POSTe trva asi 30 sekund, co zbytocne zdrzuje bootovanie (printserver sa ma zapinat a vypinat spolu s tlaciarnou). BIOS je stary (este ciernobiely), kontrola sa v nom neda vypnut. Mozne riesenia:
1. Modifikacia BIOSu - tazko realizovatelne - BIOS je v EPROM, je to AMI z r. 1990 - nie su k tomu ziadne informacie
2. HW zariadenie, co simuluje stlacenie ESC - podla coho by to zistilo, kedy to ma stlacit?
3. Nahradit video BIOS (grafiku tam netreba) a nastavit v nom warm-boot flag v RAM - idealny hack![]()
Takze som vymyslel takyto nahradny video BIOS:
Dalej nasleduju nuly az do 2048B.Kód:00000000: 55 db 055 ; ROM signature 00000001: AA db 0AA ; ROM signature 00000002: 04 db 004 ; ROM size in 512B blocks 00000003: EB01 jmps 000000006 ; jump to start 00000005: F8 db 0F8 ; checksum byte 00000006: 1E push ds 00000007: 50 push ax 00000008: 33C0 xor ax,ax 0000000A: 50 push ax 0000000B: 1F pop ds 0000000C: 3EA17204 mov ax,ds:[00472] 00000010: 3D3412 cmp ax,01234 00000013: 740C je 000000021 00000015: 3EC70672043412 mov w,ds:[00472],01234 0000001C: EA0000FFFF jmp 0FFFF:00000 00000021: 58 pop ax 00000022: 1F pop ds 00000023: CB retf
Na zaciatku su 2 bajty 55h AAh, ktore tam musia byt v kazdej pridavnej ROMke, za nimi je dlzka v 512B blokoch (mensia ako 2KB nema zmysel), za tym nasleduje instrukcia skoku na skutocny kod. Za nou je este jeden byte, ktory sluzi na to, aby mala cela ROMka 8-bitovy checksum 0.
Kod pozrie, ci je nastaveny warm-boot flag (0040h:0072h = 1234h) - ak je, tak vrati riadenie systemovemu BIOSu. Ak nie je, tak ho nastavi a restartuje system. To zabezpeci, ze systemovy BIOS nebude vykonavat dlhy post ako pri tvrdom resete.
Nefunguje to vsak so vsetkymi BIOSmi - napr. s Awardom z r. 1998 sa to stale dokola resetuje (BIOS zjavne vymazava warm-boot flag). Dolezite je, ze s tym starym AMI BIOSom to funguje.
Na skusanie som pouzil 256KB flash ROMku (mensiu som nemal) v c't flasher karte (http://www.heise.de/ct/Redaktion/ea/...r/flasheng.htm) - 2KB dlhu cast som nakopiroval 128-krat za sebou a naflashoval tam, nasledne som jumpermi na karte nastavil adresu na C0000 (adresa video BIOSu) a testoval.
V printserveri mam sietovku TP-Link TE-2009P (s nalepkou ManLi) s Realtek RTL8019AS chipom. Ma 28-pinovy socket na boot-ROM, tak som ho vyuzil na finalne riesenie2KB dlhu cast som doplnil nulami na 32KB a naprogramoval do Winbond W27C257 (pomocou Willem EPROM programatora - http://www.willem.org). Nasledne utilitou rset-8019 (ftp://210.51.181.211/cn/nic/rtl8019a...-8019(330).zip) som zapol podporu boot-ROM a nastavil na 32KB. Utilita mi vsak nedovolila nastavit adresu C0000 - pretoze ju pouziva VGA BIOS. Vyriesila to uprava utility tak, aby hladala obsadene adresy az do D0000
(zmenit 1 byte v EXE subore na offsete 37E9h z C0 na D0).