Stránka 1 z 1

[ASM/Pascal/C]Praca s CMOS

Odeslat příspěvekNapsal: 10. 9. 2006 08:09
od inflater
Dialogy a ostatne graficke srandy som (konecne) v tom OS dokoncil (konecne to mam za sebou) :D tak som si stiahol malu ucebnicu ASM v cestine z internetu (uz by sa aj hodilo :D ).
ATHELP 1.5 samozrejme mam, uz od vtedy, ked som napisal v ASM prvy riadok, takisto aj SYSMANa.

V ATHELPe bolo vysvetlenie ako pracovat s CMOS pocitaca. To potrebujem hlavne na zistenie systemoveho casu bez funkcii MS-DOSu a ostatne srandy.

Tak napriklad (mno dufam ci tento kod je dobry):
mov al,4 ;adresa pre "Hodina realneho casu"
out 70H,al
jmp $+2 ; a toto je potrebne pri dnesnych PC? :D
in al,71H ;a v AL by mala byt ulozena


Ale napr. ako zistit, ci ten cas je spravny?
V ATHelpe je nieco taketo:

Obrázek

Ako zistim, ze bit 2. sa rovna 0 (neplatny cas)?
Zeby

mov al,0eH ;adresa pre stavovy BYTE POSTu
out 70H,al
jmp $+2
in al,71H ;do AL alebo AX? alebo to je jedno?

cmp al,100b ;vyriesit to pomocou CMP (je 2.bit 1?),
jne @@NeplatnyCAS ;ak nie je 1tka tak....
test al, not 4 ;pocul som cosi o syntaxe TEST (mala by byt nedestruktivne AND),
jne @@NeplatnyCAS


Je ten kod spravny?
Dakujem (no mne sa nechce rozkrytovat PC, skratnut CMOS Clear Jumper a vybrat baterku na 5 minut :lol: :lol: )

inflater

Odeslat příspěvekNapsal: 10. 9. 2006 13:23
od JM
mov al,0eH ;adresa pre stavovy BYTE POSTu
out 70H,al
jmp $+2
in al,71H ;do AL alebo AX? alebo to je jedno?

cmp al,100b ;vyriesit to pomocou CMP (je 2.bit 1?),
jne @@NeplatnyCAS ;ak nie je 1tka tak....
test al, not 4 ;pocul som cosi o syntaxe TEST (mala by byt nedestruktivne AND),
jne @@NeplatnyCAS

===

in al je správně

Z jmp $+N se při překlepu může stát dost blbá chyba, na kterou překladač neupozorní. Určitě je už lepší napsat těch znaků navíc:
jmp @@hop; @@hop:
(A vestavěný asm v BP stejně jmp $+N nevezme.)

Být by to tam rozhodně mělo, ostatně 16bitový OS by přece měl chodit i na 286.

cmp al,100b //cmp je porovnani celeho byte, to s bity nemá co dělat
test al, not 4 //tím právě testuješ všechny ostatní bity

správně je test al,$04

Odeslat příspěvekNapsal: 10. 9. 2006 16:49
od inflater
Zaujimave... :D
Pri detekcii CMOS v emulatori QEMU mi zobrazilo "CMOS chyba: Chybny kontrolny sucet" :D (to bola moja naprogramovana sprava)

Riadil som sa podla tvojho

test al,$04

tak, ze si (tak si to myslim) zmenil "NOT 4" na "$04" a to iste som spravil aj ja.
Zmenil som "NOT 40" na "$40" a pouzil som najprv AX a potom AL a vysledok rovnaky. Asi som spravil niekde chybu, ze? Lebo, pravdupovediac, netestoval som to na realnej masine alebo na druhom emulatori. Tu spravu o "zlom case" OS nezobrazil - to bolo dobre zapisane.

Je to chyba emulatora alebo mna?
inflater

Odeslat příspěvekNapsal: 10. 9. 2006 17:01
od inflater
Stav vyvoja mojho OS okrem tej malej nezrovnalosti s CMOS:

Inicializaciu systemu, detekciu CMOS a vsetky ostatne srandy tykajuce sa inicializacie mam. Grafika - textova, OS dokaze menit farby "pracovnej plochy" (7 farieb), dokaze menit farby textu (15 farieb + 3 stupne intenzity) a titulkoveho pruhu okna (zas 7 farieb) - standardna unita CRT. A takisto aj nejake zvuky, z interneho chrchlatka :D . A samozrejme, slovensku a cesku diakritiku bez potreby DOS alebo divnych externych ovladacov (vsak naco sa sr*t s DISPLAY.SYS :D ) proste BIOS rulezz v real mode, to mi dufam dosvedci kazdy :wink:

Testovanie inicializacnej sekcie som robil cez emulator QEMU, pretoze Windows XP ZAKAZUJE AKEKOLVEK OUT/IN v programoch (!). (prave tam je ta CMOS chybicka)

Takisto som vytvoril aj nejake "API" pre vytvaranie aplikacii, ale, nie v tom OS (no portovat Pascal pod ten system - vsetky DOS volania by som musel presmerovat na BIOS + vela dalsieho, napr. nie je zdrojak na BP [ale je na FreePascal]). API - ako pridavne unity k systemu, aj ked nebude Open Source (ak by niekto chcel zdrojak, tak iba tym, co mi s tym systemom naozaj pomahali, napriklad ty, JM).

TODO list:

Spustanie programov EXE a COM bez DOS/Win (!),vyskusam vyuzit ASM zdrojak bootloadera od toho Rusa, ktory vie tieto operacie robit cez BIOS.

Podpora tzv. APM - vypinanie PC bez cvaknutia vypinaca, ake pozname napr. pri Windows XP. Na internete som niekde videl ASM zdrojak tohto maleho programu a vyskusam to preportovat do systemu a otestovat funkcnost (pouziva INT 15h, bios funkcie)

Vytvorit programy a doplnky - vlastne teraz sa ide naozaj dizajnovat system, uz ziadne tazke programovanie, teda, okrem manazmentu suborov (dalsi tazky oriesok :D ) asi sa spytam toho Rusa po anglicky :wink:

Sprava pamate - tak to neviem riadne, ako :D

Manazment suborov - to tiez :D

Seriova a paralelna komunikacia - zahrna hlavne tlacenie na tlaciarni a pracu s modemom (dufam ci mi na to postaci samotny Pascal aby som nemusel vsetko robit iba v ASM :D )

TO not DO list:

Ovladac mysi - naco? iba hrba programovania v text mode, a aj tak - zatial nemam dokoncenu pamat - cize ziadne TSR vojto :D

Rozsirene zvukove drivery - vsetky su zamerane uz na Win/Linux. Ak by dnes bola popularna karta AdLib s FM cipom, tak by som spravil nejaku aplikaciu na generovanie sinusoveho zvuku :D (no spomenme si na legendarny Siemens A55 - ten znel skoro ako AdLib: http://inflater.ic.cz/money.wav )
pretoze si myslim, ze origos AdLib nepotrebuje drivery, zatial co SB potrebovalo na digitalny zvuk;

Chraneny rezim/multitasking - no tak, bude to 16 bitovy OS a chcem si toho BIOSu este uzit nee? :D Aj ked ma teraz (asi) uz chtiac-nechtiac taha multitasking - no robim program Hodiny a ten ma synchronnu odozvu - mno neviem, este som to neskusal, ale pri tom algoritme si myslim ze system nebude reagovat na prikazy klavesnice ked uz pri spusteni je procesor zaplneny na 100%;

a to je asi vsetko :wink:

inflater