Кіріспе
Операциялық жүйелер мен қолданбалы бағдарламалар пайдаланатын құрылғылар. BIOS жүзеге асырылымдары операциялық жүйелер мен қолданбалы бағдарламаларға IBM PC-ге үйлесімді компьютерлерде аппараттық құралдардың мүмкіндіктерін пайдалану үшін шақыруға болатын үзілістерді қамтамасыз етеді. Дәстүрлі түрде BIOS шақыруларын негізінен DOS бағдарламалары және кейбір басқа бағдарламалық жасақтамалар, мысалы, жүктегіштер (оның ішінде, көбінесе, операциялық жүйесіз тікелей жүктелетін және жұмыс істейтін салыстырмалы түрде қарапайым қолданбалы бағдарламалық жасақтама, әсіресе ойын бағдарламалық жасақтамасы) пайдаланады. BIOS x86 процессорының нақты мекенжай режимінде (Real Mode) жұмыс істейді, сондықтан BIOS-ты шақыратын бағдарламалар да нақты режимде жұмыс істеуі керек немесе BIOS-ты шақыру алдында қорғалған режимнен нақты режимге ауысып, содан кейін қайтадан қорғалған режимге ауысуы керек. Осы себепті, қазіргі заманғы операциялық жүйелер CPU-ны қорғалған режимде немесе ұзақ режимде пайдаланады, сондықтан жүйелік функцияларды қолдау үшін BIOS үзіліс шақыруларын қолданбайды, бірақ аппаратты тексеруге және жүктеу кезінде инициализациялауға BIOS үзіліс шақыруларын пайдаланады. Нақты режимде 1 МБ жад шектеуі бар, ал қазіргі заманғы жүктегіштер (мысалы, GRUB2, Windows Boot Manager) 4 ГБ жадқа қол жеткізу үшін нағыз емес режимді немесе қорғалған режимді пайдаланады (және BIOS үзіліс шақыруларын Виртуалды 8086 режимінде орындайды, бірақ тек операциялық жүйені жүктеу үшін). Барлық компьютерлерде бағдарламалық нұсқаулар қуат қосылған сәттен бастап физикалық аппаратты (экран, диск, пернетақта және т.б.) басқарады. Компьютерде BIOS, негізгі платадағы ROM-да алдын ала жүктелген, CPU-ны қайта орнатудан кейін дереу басқаруды алады, соның ішінде қоректену кезінде, аппараттық қайта орнату түймесі басылғанда немесе маңызды бағдарламалық жасақтама қатесі (үштік қате) негізгі плата тізбектерін автоматты түрде аппараттық қайта орнатуды іске қосқанда. BIOS аппаратты тексеріп, оның күйін инициализациялайды; жүктеу бағдарламасын (әдетте, операциялық жүйе жүктегіші және тарихи ROM BASIC) табады, жүктейді және орындайды; және машинада жұмыс істейтін бағдарламалық жасақтамаға негізгі аппараттық басқаруды қамтамасыз етеді, бұл әдетте операциялық жүйе (қолданбалы бағдарламалармен), бірақ тікелей жүктелетін бір бағдарламалық қосымша болуы мүмкін. IBM өз тарапынан алғашқы IBM PC модельдерін (PS/2 алдында) бағдарламалау кезінде BIOS-ты толық пайдалану үшін немесе аппаратты тікелей пайдалану үшін және BIOS-ты мүлдем болдырмау үшін қажетті барлық ақпаратты ұсынды. Бастапқыда бағдарламалаушылар аппараттық құралдың әрқайсысы үшін BIOS-ты пайдалану немесе пайдаланбау туралы шешімді өздері қабылдады. IBM бағдарламалық қамтамасыз етудің қазіргі және болашақ PC модельдерімен үйлесімділігін сақтау үшін BIOS INT (және DOS қызмет шақырулары) арқылы ғана аппараттық жабдыққа қол жеткізетін «жақсы мінез-құлық» бағдарламаларының жасалуын ынталандырды, бірақ IBM кейбір бағдарламалық жасақтаманы әзірлеушілер мен аппараттық клиенттер үшін пайдаланушы бағдарламалық жасақтамасы аппаратты тікелей басқару мүмкіндігінің қажеттілік екенін түсінді. Бұл, бір жағынан, BIOS қызметтерінің барлық аппараттық ерекшеліктер мен функцияларының маңызды бөлігін ашпауымен байланысты. Мысалы, MDA және CGA адаптерлері аппараттық прокрутканы жүзеге асыра алады, ал PC сериялық адаптері үзіліс арқылы деректерді беруге қабілетті, бірақ IBM BIOS бұл пайдалы техникалық мүмкіндіктердің ешқайсысын қолдамайды. Бүгінгі таңда жаңа компьютердегі BIOS әлі де IBM-нің IBM AT үшін (1984 жылы енгізілген) анықтаған BIOS үзіліс функциясының шақыруларының көпшілігін, сонымен қатар көптеген жаңаларын және кейбір түпнұсқаларға кеңейтулерді (мысалы, кеңейтілген параметрлер диапазоны) қолдайды, оларды түрлі басқа ұйымдар мен салалық топтар бірлесіп жариялады. Бұл, аппараттық үйлесімділіктің ұқсас дәрежесімен біріктірілген, IBM AT үшін жазылған бағдарламалардың көпшілігі бүгінгі таңда жаңа компьютерде дұрыс орындалуы мүмкін. BIOS үзілістері арқылы қол жетімді қызметтердің шектеулеріне қарамастан, олар технологиялық өзгерістерге өте пайдалы және берік болып шықты.
BIOS implementations provide interrupts that can be invoked by operating systems and application programs to use the facilities of the firmware on IBM PC compatible computers. Traditionally, BIOS calls are mainly used by DOS programs and some other software such as boot loaders (including, mostly historically, relatively simple application software that boots directly and runs without an operating system—especially game software). BIOS runs in the real address mode (Real Mode) of the x86 CPU, so programs that call BIOS either must also run in real mode or must switch from protected mode to real mode before calling BIOS and then switching back again. For this reason, modern operating systems that use the CPU in Protected mode or Long mode generally do not use the BIOS interrupt calls to support system functions, although they use the BIOS interrupt calls to probe and initialize hardware during booting. Real mode has the 1MB memory limitation, modern boot loaders (e. g. GRUB2, Windows Boot Manager) use the unreal mode or protected mode (and execute the BIOS interrupt calls in the Virtual 8086 mode, but only for OS booting) to access up to 4GB memory. In all computers, software instructions control the physical hardware (screen, disk, keyboard, etc.) from the moment the power is switched on. In a PC, the BIOS, pre loaded in ROM on the motherboard, takes control immediately after the CPU is reset, including during power up, when a hardware reset button is pressed, or when a critical software failure (a triple fault) causes the mainboard circuitry to automatically trigger a hardware reset. The BIOS tests the hardware and initializes its state; finds, loads, and runs the boot program (usually, an OS boot loader, and historical ROM BASIC); and provides basic hardware control to the software running on the machine, which is usually an operating system (with application programs) but may be a directly booting single software application. For IBM's part, they provided all the information needed to use their BIOS fully or to directly utilize the hardware and avoid BIOS completely, when programming the early IBM PC models (prior to the PS/2). From the beginning, programmers had the choice of using BIOS or not, on a per hardware peripheral basis. IBM did strongly encourage the authorship of "well behaved" programs that accessed hardware only through BIOS INT calls (and DOS service calls), to support compatibility of software with current and future PC models having dissimilar peripheral hardware, but IBM understood that for some software developers and hardware customers, a capability for user software to directly control the hardware was a requirement. In part, this was because a significant subset of all the hardware features and functions was not exposed by the BIOS services. For two examples (among many), the MDA and CGA adapters are capable of hardware scrolling, and the PC serial adapter is capable of interrupt driven data transfer, but the IBM BIOS supports neither of these useful technical features. Today, the BIOS in a new PC still supports most, if not all, of the BIOS interrupt function calls defined by IBM for the IBM AT (introduced in 1984), along with many more newer ones, plus extensions to some of the originals (e. g. expanded parameter ranges) promulgated by various other organizations and collaborative industry groups. This, combined with a similar degree of hardware compatibility, means that most programs written for an IBM AT can still run correctly on a new PC today, assuming that the faster speed of execution is acceptable (which it typically is for all but games that use CPU based timing). Despite the considerable limitations of the services accessed through the BIOS interrupts, they have proven extremely useful and durable to technological change.
BIOS шақыруларының мақсаты
BIOS үзіліс шақырулары бағдарлама талап еткен аппараттық басқару немесе I/O функцияларын орындайды, бағдарламаға жүйелік ақпаратты қайтарады немесе екеуін де орындайды. BIOS шақыруларының маңызды аспектісі – абстракция. BIOS шақырулары жалпы анықталған функцияларды орындайды, ал жүйедегі нақты аппараттық құралдарда осы функциялардың қалай орындалатынының егжей-тегжейлі мәліметтері BIOS-та жасырылады және бағдарламадан тыс қалдырылады. Мысалы, қатты дискіден дерек оқығысы келген бағдарламаға дискінің ATA, SCSI немесе SATA стандартында екенін білудің қажеті жоқ (немесе ертерек заманда ESDI, MFM немесе RLL дискісі екенін, мүмкін Seagate ST 506 контроллері, немесе Western Digital контроллерлерінің бірі, немесе басқа өндірушінің жеке контроллері бар екенін). Бағдарламаға тек оқығысы келген дискінің BIOS-тағы нөмірін және оқу немесе жазу қажетті сектордың мекенжайын көрсету жеткілікті, ал BIOS бұл жалпы сұранысты нақты дискіге қосылған контроллер арқылы тапсырманы орындау үшін қажетті қарапайым операциялар тізбегіне аударады. Бағдарлама әртүрлі қатты дискілерді (немесе дисплей адаптерлерін, порт интерфейстерін немесе нақты уақыт сағатын) басқару қағидаларын білуден босатылады. Бұл операциялық жүйелер мен қосымшаларды бағдарламалауды жеңілдетеді және бағдарламалардың көлемін азайтады, себебі BIOS-қа енген функционалдылықты әр бағдарламаға енгізудің қажеті жоқ; бағдарламаларға BIOS-қа салыстырмалы түрде қысқа шақырулар қосылады. (BIOS қолданылмаған операциялық жүйелерде операциялық жүйенің өзі ұсынатын қызмет шақырулары көбінесе осы функцияларды орындайды.) BIOS сонымен қатар компьютерлік жабдықтарды жобалаушыларды, егер бағдарламалар BIOS-ты ғана пайдалану үшін жазылған болса, жаңа жүйелерді жобалау кезінде ескі жүйелермен аппараттық үйлесімділікті сақтау қажеттілігінен босатады, бұл қолданыстағы бағдарламалық жасақтамамен үйлесімділікті сақтау үшін қажет. Мысалы, IBM PCjr-дегі пернетақта аппараттық құралы IBM PC-нің бұрынғы модельдеріндегі пернетақта аппараттық құралынан мүлдем өзгеше жұмыс істейді, бірақ пернетақтаны тек BIOS арқылы пайдаланатын бағдарламалар үшін бұл айырмашылық көрінбейді. (Бұл мәселенің екінші жағының жақсы мысалы ретінде, PCjr пайда болған кезде қолданылған көптеген ПК бағдарламалары пернетақтаны тек BIOS арқылы пайдаланбаған, сондықтан IBM PCjr-ге бастапқы IBM PC және IBM PC XT пернетақтасының аппараттық жұмыс істеуін эмуляциялау үшін аппараттық мүмкіндіктерді де қосты. Аппараттық эмуляция толық емес, сондықтан тікелей пернетақта аппараттық құралын пайдалануға тырысатын барлық бағдарламалар PCjr-де дұрыс жұмыс істемейді, бірақ тек BIOS пернетақта қызметтерін пайдаланатын бағдарламалар жұмыс істейді.) Аппараттық мүмкіндіктерге қол жеткізуден басқа, BIOS бағдарламалық жасақтамасында іске асырылған қосымша мүмкіндіктерді де ұсынады. Мысалы, BIOS сегіз мәтіндік бетке дейін бөлек курсорлық позицияларды сақтайды және TTY сияқты автоматты жол орауышымен және негізгі басқару таңбаларын (мысалы, жолдың басына оралу және жол беру) түсіндіруді қамтамасыз етеді, ал CGA үйлесімді мәтіндік дисплей аппараттық құралы тек бір ғана жаһандық дисплей курсорына ие және курсорды автоматты түрде жылжыта алмайды, курсордың орнын дисплей жадына сілтеме жасау үшін пайдалана алмайды (қай таңба ұяшығын өзгерту немесе тексеру керектігін анықтау үшін) немесе басқару таңбаларын түсіндіру мүмкіндігіне ие емес. Басқа мысал үшін, BIOS пернетақта интерфейсі түрлі ауысу күйлерін (сол және оң Shift, Ctrl және Alt) бақылау үшін көптеген пернелер мен пернелер комбинацияларын түсіндіреді, Shift + PrtScrn пернесін басқанда скриншотты сақтайды, Ctrl + Alt + Del пернесін басқанда жүйені қайта іске қосады, Caps Lock, Num Lock және Scroll Lock пернелерінің күйін қадағалайды және AT класындағы пернетақтадағы тиісті индикаторларды басқарады, сондай-ақ пернетақта үшін басқа ұқсас түсіндіру және басқару функцияларын орындайды. Керісінше, стандартты PC және PC AT пернетақтасының аппараттық мүмкіндіктері жүйеге әрбір перне басылғанда немесе босатылғанда (яғни "босатылған" күйден "басылған" күйге немесе керісінше) оқиға туралы хабарлаумен, пернетақтаның қалпына келтіруін және өзін-өзі сынап көрумен, ал AT класындағы пернетақталар үшін жүйеден пернелердің күйін өзгерту командасын орындаумен шектеледі.
BIOS шақыру: BIOS бағдарламалық жасақтамасы үзіледі
Операциялық жүйелер және басқа бағдарламалық құралдар BIOS бағдарламалық құралымен, орнатылған аппаратты басқару үшін бағдарламалық үзілістер арқылы байланысады. Бағдарламалық үзіліс – үзіліс тұжырымдамасының ерекше түрі. Үзіліс – процессорды басты бағдарламаны орындаудан тоқтатып, орнына арнайы бағдарламаны, яғни Үзіліс қызметтік ретінін (ISR) дереу орындауға бағыттайтын механизм. ISR аяқталғаннан кейін процессор басты бағдарламаны жалғастырады. x86 процессорларында үзіліс орын алғанда, шақыруға тиіс ISR, жадтағы ISR басталу нүктесінің мекенжайлары тізімінен ("үзіліс векторлары" деп аталады) ізделіп табылады: Үзіліс векторлық кестесі (IVT). Үзіліс 0-ден 255-ке дейінгі типтік нөмірімен шақырылады, ал типтік нөмірі Үзіліс векторлық кестесіне индекс ретінде қолданылады, ал кестедегі осы индекс ISR-дің мекенжайын көрсетеді, ол үзіліске жауап ретінде іске қосылады. Бағдарламалық үзіліс – бағдарламалық командамен іске қосылатын үзіліс; сондықтан бағдарламалық үзілістер кіші бағдарламалар сияқты жұмыс істейді, бірақ басты айырмашылығы – бағдарламалық үзіліс шақыруын жасайтын бағдарламаға ISR мекенжайын білудің қажеті жоқ, тек оның үзіліс нөмірін білу жеткілікті. Бұл құралымдық, үйлесімділік және жүйелік конфигурациядағы икемділік үшін артықшылықтар береді. BIOS үзіліс шақыруларын BIOS пен BIOS клиенттік бағдарламалық құралы, мысалы операциялық жүйе арасында хабар алмасу механизмі ретінде қарастыруға болады. Хабарламалар BIOS-тан деректерді немесе әрекетті сұрайды және сұралған деректерді, жай-күй туралы ақпаратты және/немесе сұралған әрекеттің нәтижесін шақырушыға қайтарады. Хабарламалар әрқайсысы өз үзіліс нөмірі бар санаттарға бөлінеді, ал көптеген санаттарда "функциялар" деп аталатын және "функция нөмірлері" арқылы анықталатын кіші санаттар бар. BIOS клиенті көптеген ақпаратты CPU тіркегіштері арқылы BIOS-қа жібереді және көптеген ақпаратты сол арқылы алады, бірақ бақылау параметрлерінің кестелері немесе дискілік операциялар үшін дискілік сектор деректері сияқты тіркегіштерге сыймайтын үлкен деректерді жадта буфер бөліп (яғни, орын бөліп) және буфердің мекенжайын тіркегіштерде жіберу арқылы жібереді. (Кейде жадтағы дерек элементтерінің бірнеше мекенжайы жадтағы дерек құрылымында берілуі мүмкін, ал осы құрылымның мекенжайы тіркегіштерде BIOS-қа жіберіледі.) Үзіліс нөмірі бағдарламалық үзіліс нұсқауының параметрі ретінде (Intel құрастыру тілінде "INT" нұсқауы) көрсетіледі, ал функция нөмірі AH тіркегіште көрсетіледі; яғни шақырушы AH тіркегішін қажетті функцияның нөміріне орнатады. Жалпы, әрбір үзіліс нөміріне сәйкес келетін BIOS қызметтері бір-бірінен тәуелсіз жұмыс істейді, бірақ бір үзіліс қызметіндегі функцияларды бір BIOS бағдарламасы басқарады және олар тәуелсіз емес. (Бұл соңғы тұжырым қайта кіруге қатысты.) BIOS бағдарламалық құралы, әдетте, сәтті болмаған жағдайда қате кодын, ал сәтті болған жағдайда жай-күй кодын және/немесе сұралған деректерді шақырушыға қайтарады. Деректердің көлемі бір биттен бастап 65,536 байтқа дейін, толық шикі дискілік секторларға (нақты режимдегі жад сегментіне сыятын ең көп көлем) жете алады. BIOS жылдар бойы көптеген түрлі компаниялармен бірнеше рет кеңейтілді және жетілдірілді, және өкінішке орай, осы эволюцияның нәтижесі BIOS функцияларының бәрі деректерді пішімдеу және жеткізу немесе нәтижелерді есеп беру үшін біркелкі конвенцияларды қолданбайды. Кейбір BIOS функциялары егжей-тегжейлі жай-күй туралы ақпаратты көрсетеді, ал басқалары тіпті сәттілік немесе сәтсіздік туралы хабарламайды, тек үнсіз қайтарады, сонда шақырушы сәттілік деп санайды (немесе нәтижені басқа жолмен тексереді). Кейде белгілі бір BIOS функциясының шақыруын белгілі бір компьютердегі BIOS қолдай ма, жоқ па, немесе шақыру параметрлерінің шектері сол компьютерде қандай екенін анықтау қиын болуы мүмкін. (Бірнеше жарамсыз функция нөмірлері немесе жарамды функция нөмірлерінің жарамсыз мәндері үшін, әсіресе IBM BIOS-тің ерте нұсқасында BIOS ештеңе істемейді және қате кодын қайтармайды; сонда шақырушы мұндай шақыруларды жасамай, осы жағдайды болдырмау немесе шақырудың тиімділігін болжайтын емес, шақырудың күтілетін әсерін оңтайлы сынау керек.) BIOS өзінің тарихында көптеген қадамдарда кеңінен дамығандықтан, белгілі бір жеткізушінің BIOS нұсқасында жарамды функция сол жеткізушінің бұрынғы немесе басқаша BIOS нұсқасында немесе кез келген жасқа ие BIOS нұсқасында басқа жеткізушіден жарамсыз болуы мүмкін. BIOS үзіліс шақырулары CPU тіркегіштеріне негізделген параметрлерді жіберуді пайдаланатындықтан, шақырулар құрастыру тілінен жасауға бағытталған және көптеген жоғары деңгейлі тілдерден (HLL) тікелей жасалмайды. Алайда, жоғары деңгейлі тіл параметрлерді жоғары деңгейлі тілде қолданылатын формадан (әдетте, стекке негізделген) BIOS-қа қажетті тіркегіштік формаға аударатын және BIOS қайтарғаннан кейін жоғары деңгейлі тіл шақыру конвенциясына қайтаратын қабылдағыш процедуралар кітапханасын ұсынуы мүмкін. C-тің кейбір нұсқаларында BIOS шақыруларын C модуліндегі құрастыру тілінің кіріктірілген нұсқауларын пайдаланып жасауға болады. Құрастыру тілінің кіріктірілген нұсқауларын қолдау ANSI C стандартына кірмейді, бірақ тілдің кеңейтілуі болып табылады; сондықтан құрастыру тілінің кіріктірілген нұсқауларын пайдаланатын C модульдері таза ANSI C стандарты модульдерінен кем тасымалданады.
directed to stop executing the main line program and immediately execute a special program, called an Interrupt Service Routine (ISR), instead. Once the ISR finishes, the CPU continues with the main program. On x86 CPUs, when an interrupt occurs, the ISR to call is found by looking it up in a table of ISR starting point addresses (called "interrupt vectors") in memory: the Interrupt vector table (IVT). An interrupt is invoked by its type number, from 0 to 255, and the type number is used as an index into the Interrupt Vector Table, and at that index in the table is found the address of the ISR that will be run in response to the interrupt. A software interrupt is simply an interrupt that is triggered by a software command; therefore, software interrupts function like subroutines, with the main difference that the program that makes a software interrupt call does not need to know the address of the ISR, only its interrupt number. This has advantages for modularity, compatibility, and flexibility in system configuration. BIOS interrupt calls can be thought of as a mechanism for passing messages between BIOS and BIOS client software such as an operating system. The messages request data or action from BIOS and return the requested data, status information, and/or the product of the requested action to the caller. The messages are broken into categories, each with its own interrupt number, and most categories contain sub categories, called "functions" and identified by "function numbers". A BIOS client passes most information to BIOS in CPU registers, and receives most information back the same way, but data too large to fit in registers, such as tables of control parameters or disk sector data for disk transfers, is passed by allocating a buffer (i. e. some space) in memory and passing the address of the buffer in registers. (Sometimes multiple addresses of data items in memory may be passed in a data structure in memory, with the address of that structure passed to BIOS in registers.) The interrupt number is specified as the parameter of the software interrupt instruction (in Intel assembly language, an "INT" instruction), and the function number is specified in the AH register; that is, the caller sets the AH register to the number of the desired function. In general, the BIOS services corresponding to each interrupt number operate independently of each other, but the functions within one interrupt service are handled by the same BIOS program and are not independent. (This last point is relevant to reentrancy.) The BIOS software usually returns to the caller with an error code if not successful, or with a status code and/or requested data if successful. The data itself can be as small as one bit or as large as 65,536 bytes of whole raw disk sectors (the maximum that will fit into one real mode memory segment). BIOS has been expanded and enhanced over the years many times by many different corporate entities, and unfortunately the result of this evolution is that not all the BIOS functions that can be called use consistent conventions for formatting and communicating data or for reporting results. Some BIOS functions report detailed status information, while others may not even report success or failure but just return silently, leaving the caller to assume success (or to test the outcome some other way). Sometimes it can also be difficult to determine whether or not a certain BIOS function call is supported by the BIOS on a certain computer, or what the limits of a call's parameters are on that computer. (For some invalid function numbers, or valid function numbers with invalid values of key parameters—particularly with an early IBM BIOS version—the BIOS may do nothing and return with no error code; then it is the [inconvenient but inevitable] responsibility of the caller either to avoid this case by not making such calls, or to positively test for an expected effect of the call rather than assuming that the call was effective. Because BIOS has evolved extensively in many steps over its history, a function that is valid in one BIOS version from some certain vendor may not be valid in an earlier or divergent BIOS version from the same vendor or in a BIOS version—of any relative age—from a different vendor.) Because BIOS interrupt calls use CPU register based parameter passing, the calls are oriented to being made from assembly language and cannot be directly made from most high level languages (HLLs). However, a high level language may provide a library of wrapper routines which translate parameters from the form (usually stack based) used by the high level language to the register based form required by BIOS, then back to the HLL calling convention after the BIOS returns. In some variants of C, BIOS calls can be made using inline assembly language within a C module. (Support for inline assembly language is not part of the ANSI C standard but is a language extension; therefore, C modules that use inline assembly language are less portable than pure ANSI standard C modules.)
: BASIC орындау
дәстүрлі түрде Option ROM-да сақталған Cassette BASIC (Microsoft ұсынған) іске қосылатын еді. Бұл шақыру әдетте BIOS жүктелу кезінде ешқандай жүктелетін дискіні анықтай алмаса қолданылатын. 1981 жылы түпнұсқа IBM PC (IBM машинасының 5150 түрі) шығарылған кезде ROM-дағы BASIC маңызды мүмкіндік болды. Commodore 64 және Apple II сияқты сол кездегі танымал жеке компьютерлерде де Microsoft Cassette BASIC ROM-да болды (бірақ Commodore өз лицензиялық нұсқасын Commodore BASIC деп атады), сондықтан IBM PC өзінің күтілетін нарығының үлкен бөлігінде BASIC-ке бәсекелес болуы керек болды. Басқа жүйелердегідей, IBM PC-нің ROM BASIC-і қарапайым дискісіз операциялық жүйе ретінде жұмыс істеді, ол пайдаланушыға бағдарламаларды жүктеуге, сақтауға және іске қосуға, сондай-ақ оларды жазуға және жетілдіруге мүмкіндік берді. (Түпнұсқа IBM PC сонымен қатар жоғарыда аталған екі бәсекелесі сияқты кассеттік интерфейс жабдығын қамтитын IBM-нің жалғыз PC моделі болды. IBM PC базалық моделінде тек 16 КиБ жедел жад және ешқандай дискілік жекпе-жек болмады [ешқандай түрі], сондықтан кассеттік интерфейс және ROM-дағы BASIC базалық модельді пайдалануға жарамды ету үшін қажет болды. 32 КиБ-тан аз жедел жады бар IBM PC дискіден жүктеле алмайды. Түпнұсқа IBM PC-дегі 8 КиБ көлеміндегі 5 ROM чипінің төртеуі BASIC-ті, ал біреуі ғана BIOS-ті қамтиды; егер 16 КиБ жедел жад орнатылса, ROM BASIC жалпы жүйелік жадтың жартысынан астамын құрайды (нақтырақ айтқанда, 4/7). Уақыт өте келе және BASIC барлық компьютерлермен бірге жеткізілмейтін болғандықтан, бұл үзіліс жай ғана жүктелетін том табылмағанын көрсететін қате хабарламаны көрсетті (әсіресе, "No ROM BASIC" немесе BIOS-тың кейінгі нұсқаларында түсіндірме хабарламалар); басқа BIOS нұсқаларында ол пайдаланушыдан жүктелетін томды енгізуді және перне басуды сұрайды, содан кейін пайдаланушы перне басканнан кейін қайтадан жүктеуге тырысу үшін bootstrap жүктеушісіне (INT 19h) оралады. Digital Rainbow 100B өзінің BIOS деп атаған, ол IBM BIOS-пен үйлеспейтін. Turbo Pascal, Turbo C және Turbo C++ INT 18-ді жадты бөлу және беттеу үшін қайта пайдаланды. Басқа бағдарламалар да осы векторды өздерінің мақсаттары үшін қайта пайдаланды.
DOS
DOS жүйелерінде IO. SYS немесе IBMBIO. COM INT 13 арқылы дискета алмасуын анықтайды, форматтау шақыруларын қадағалайды, DMA шекаралық қателерді түзетеді және алғашқы шақырудан бұрын IBM-нің ROM BIOS "01/10/84" нұсқауындағы 0xFC модельдік кодымен байланысты мәселелерді шешеді.
BIOS- ті айналып өту
Көптеген заманауи операциялық жүйелер (мысалы, Linux және Windows) бастап қосылғаннан кейін BIOS-тың ешқандай үзіліс шақыруларын қолданбайды, оның орнына аппараттық құралдармен тікелей байланыс жасауды жөн көреді. Мұны істеу үшін олар OS ядросының бір бөлігі болып табылатын, OS-пен бірге келетін немесе аппараттық өнімдерді шығарушылар ұсынатын драйверлерге сенеді. Бұл тәсілдің бірнеше себебі бар. Ең маңыздысы – қазіргі операциялық жүйелер процессормен қорғалған (немесе ұзақ) режимде жұмыс істейді, ал BIOS коды тек нақты режимде ғана орындалады. Яғни, егер қорғалған режимде жұмыс істейтін операциялық жүйе BIOS шақыруын жасағысы келсе, ол алдымен нақты режимге ауысып, содан кейін шақыруды орындап, оның аяқталуын күтіп, соңында қорғалған режимге қайта оралуы керек. Бұл өте баяу және тиімсіз болар еді. Нақты режимде (BIOS-ты қоса алғанда) жұмыс істейтін код 16 биттік сегменттелген жад адрестеуді пайдалануға байланысты 1 МБ-тан сәл астам жадқа ғана қол жеткізе алады. Сонымен қатар, BIOS әдетте кез келген міндетті орындаудың ең жылдам жолы емес. Шындығында, BIOS-тың жылдамдық шектеулері DOS дәуірінде бағдарламалардың оны айналып өтуіне себеп болды, әсіресе бейне графикасы мен жылдам тізбектік байланыс үшін. Жоғарыда аталған факторлардан басқа, BIOS функционалдығының проблемаларына анықталған функциялардың шектеулі саны, әртүрлі компьютерлерде қолдау көрсетілетін функциялардың әртүрлі жиынтығы және BIOS сапасының айырмашылықтары (яғни, кейбір BIOS толық және сенімді, ал басқалары толық емес және қателі) жатады. Өздерінің қолына алып, BIOS-қа тәуелділіктен бас тарту арқылы операциялық жүйелерді жасаушылар жүйелік бағдарламалық жасақтаманы жазу және қолдау кезінде туындайтын кейбір тәуекелдер мен қиындықтарды жоя алады. Екінші жағынан, мұндай жағдайда олар өздерінің операциялық жүйесімен жұмыс істеуі жоспарланған әр түрлі жүйелер немесе сыртқы құрылғылар үшін "тікелей" драйверлік бағдарламалық жасақтаманы ұсынуға (немесе аппараттық өндірушілерді осы драйверлерді ұсынуға көндіруге) жауапты болады. Осыдан, шағын бюджетпен жасалған ықшам операциялық жүйелер BIOS-ты жиі пайдаланатыны, ал үлкен бюджетке және көптеген бағдарламалық жасақтама инженерлеріне ие үлкен операциялық жүйелер BIOS-ты пайдаланудың орнына өз драйверлерін жазуды жөн көреді – яғни, BIOS пен қорғалған режимнің үйлесімділік проблемаларын ескерместен.