A Blitz Basic programban lehet operációs rendszert írni?
A Blitz Basic nem képes a BIOS megszakításainak meghívására, ez az egyik oka annak, hogy a válasz nem.
Egyébként pedig csak olyan nyelven lehet oprendszert írni, amely nem támaszkodik egy bizonyos oprendszerre. Tehát ha egy nyelven nem tudsz olyan programot létrehozni, amelyik nem windowsos PC-n is fut, akkor azzal technikailag nincs lehetőséged oprendszer írására.
Kezelői felületet lehet írni bármilyen általános programnyelven, akár Blitz Basicben is. Csak nem egyszerű.
Assembly, esetleg C. Ezek valók ilyen munkára.
"A Blitz Basic nem képes a BIOS megszakításainak meghívására,"
Nem bizony, már csak azért sem, mert a BIOS-nak nincsenek megszakításai.
Egyébként a BIOS-nak úgy kb. semmi köze az operációs rendszerhez.
Régen volt egy DOS nevű vacak, amely szinte csak a BIOS rutinjainak hívásából állt, de az régen volt, ma már nem létezik olyan hülye, aki a BIOS-ra építő, valós módú operációs rendszert kivánna fejleszteni.
Hát, ha valamit INT utasítással kell meghívnom, arra én megkockáztatom a megszakítás elnevezést.
Persze, tudom, ma már nem így megy a dolog, de a kompatibilitás nem haszontalan cifraság. Az UEFI támogatja a BIOS klasszikus szolgáltatásaira való hivatkozást. Az is a probléma a mostani rendszerekkel, hogy a szabványos interface-eket leszűkítve vagy megkerülve akarnak kommunikálni a perifériákkal, aztán jönnek a hibaüzenetek meg lefagyások, amikor egy eszköz mégiscsak a szabványos módon való kommunikációra lett felkészítve. A sok rövid út, ügyeskedés, trükközés, ezek is felelősök a mai rendszerek instabilitásáért.
Nem kell az oprendszernek alaplapi firmware? Egy bootolást valahol mégiscsak el kell kezdeni, nem?
Nem kell az oprendszernek alaplapi firmware?"
Nem hát! Szerencsére.
" Egy bootolást valahol mégiscsak el kell kezdeni, nem?"
Ja, de azt a bootloader intézi, ami betölti az oprét, és ráadja a vezérlést. Ennyi.
#6: szóval szerinted az oprendszer nem használja az alaplapi firmware-t. Akkor tulajdonképpen mire is valÓ? :-))
#7: a kompilálás korántsem azt jelenti, hogy a létrehozott kód oprendszer nélkül is működik. Az oprendszer épp azért van, hogy a programok használhassák a rengeteg beépített szolgáltatásukat, közvetlenül, a kódban meghívva, nem valami felületen át adogatva parancsokat.
A natív gépi kódú program nem csak a processzorral kommunikál. Sőt, egy jó programkód sokat használja az oprendszer függvényeit, ezzel teremtve meg azt a nagyon is fontos helyzetet, hogy az oprendszer cseréje, frissítése esetén is működőképes marad. Hiszen az oprendszer írójának felelőssége és kötelessége az, hogy a változatlan belépési pontok mögött úgy rendezze el az oprendszer kódját, hogy a program irányából nézve ne változzon semmi, a paraméterezés sem, csak a hívási pont mögötti kód változhat, bővülhet, javulhat. Ha a program szabályosan hívja meg az oprendszer szolgáltatásait, akkor a működése nem fog az oprendszer verzióitól függeni. Ez lenne az egész célja. És régen ezt be is tartották, a kompatibilitás alapkövetelmény volt. (Mellesleg ettől sokkal gyorsabb a fejlesztés, hiszen nem a program fejlesztőjének kell mindent újra kitalálnia. És a kód is sokkal kisebb, bár ezzel ma már szinte senki nem törődik.
Egy oprendszer viszont nem hívhatja meg egy másik oprendszer függvényeit, hiszen az a cél, hogy olyan ne is legyen. Maga a program az oprendszer, csak saját magára, és az egy szinten lejjebb levő BIOS megszakításokra támaszkodhat, valamint a még egy-két szinttel lejjebb levő processzor saját utasításainak lehetőségeire. De a kompilálás csak akkor állít elő ilyen kódot, ha a compiler kifejezett úgy van megírva, hogy az utasításokat csakis a gép saját firmware- és hardverszolgáltatásait felhasználó rutinokkal helyettesíti. Ez rendkívül ritka dolog, mert alig van rá szükség.
"#6: szóval szerinted az oprendszer nem használja az alaplapi firmware-t. Akkor tulajdonképpen mire is valÓ? :-)) "
Nem hát! Hogy használná a védett módú win vagy lin a valós módban - és csak abban - elérhető BIOS-t?
"#7: a kompilálás korántsem azt jelenti, hogy a létrehozott kód oprendszer nélkül is működik."
Nem azt jelenti, de én nem is állítottam ilyet. Csak annak lehetőségét teremti meg, hogy opre független kódot írj.
Könyörgöm, gondolkozz..
A C-ben és pascalban fejlesztett rendszereim egyike sem használ SEMMIT a library-kból, a libc-t is én írtam meg. Ez az opre fejlesztésnél így megy.
" Az oprendszer épp azért van, hogy a programok használhassák a rengeteg beépített szolgáltatásukat,"
Ja, csak nem akkor ha oprendszert akarsz írni.
" De a kompilálás csak akkor állít elő ilyen kódot, ha a compiler kifejezett úgy van megírva, hogy az utasításokat csakis a gép ..."
Lásd feljebb. Bármikor írok neked bármit mezei ansi C compilerrel lefordítom és az fut magában.
#include "vga.h"
u8bit *vga_mem ;
u8bit vga_attr ;
u16bit cur_pos ;
char *string;
inline unsigned char inb(u32bit port)
{
u8bit u1;
asm volatile ("inb %%dx,%%al":"=a"(u1):"d"(port));
return u1;
}
inline void outb(u32bit port,u8bit value)
{
asm volatile (" outb %%al,%%dx ": : "d"(port),"a"(value));
}
inline void outw(u32bit port,u32bit value)
{
asm volatile (" outw %%ax,%%dx ": : "d"(port),"a"(value));
}
void update_cursor_position(void)
{
u16bit offset = cur_pos >> 1;
outb(0x3d4,0x0f); // 3d4 = command port
outb(0x3d5,offset & 0x0ff);
outw(0x3d4,0x0e);
outb(0x3d5,offset >>8);
}
void move_cursor(u8bit x,u8bit y)
{
if(x>=80) return;
if(y>=25) return;
cur_pos = (y*160) + (x*2) ;
update_cursor_position();
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!