Ostatnie wiadomości

Strony: 1 2 [3] 4 5 ... 7
21
OS-Dev / Przerwania PCI
« Ostatnia wiadomość wysłana przez mangado dnia Maj 23, 2014, 01:10:26 »
Witajcie!
mam temat do rozgryzienia!
Jak w x86 poprawnie odczytać gdzie lądują w APIC-u przerwania z magistrali PCI.
Tabelki MP niby to pokazują ale...
PCI ma niby 4 przerwania #INTA, #INTB, #INTC, #INTB
Na żywym kompie okazuje się po odczytaniu tabelek MP, że taki #INTA ląduje do więcej niż jednego "pin-a" IO APIC-a!
WTF?!
Z PiCI odczytam czy to #INTA czy ..B i co, dalej się nie dowiem jakie będzie z tego irq?
O co kaman?
W sieciowie pisali, że bez ACPI i AML nie pojedziesz...
Piszta ludu co sądzita o tem?
22
Asembler / Odp: Wataszka!
« Ostatnia wiadomość wysłana przez Nevar dnia Maj 19, 2014, 12:15:22 »
Jestem zajety pisaniem OSa :D
23
Asembler / Hello Wataszka!
« Ostatnia wiadomość wysłana przez mangado dnia Maj 11, 2014, 19:42:20 »
A ty Nevar co? Co to za bumelowanie?  :P
Coś mało sie ostatnio udzielasz w osdev-ie!
Co je?
24
Asembler / Odp: Wataszka!
« Ostatnia wiadomość wysłana przez Nevar dnia Maj 03, 2014, 18:30:18 »
O kurde, no jedyne co mozna powiedziec to BRAWO !
25
Asembler / Wataszka!
« Ostatnia wiadomość wysłana przez akasei dnia Kwiecień 05, 2014, 10:53:32 »
Wataha.net prezentuje: http://wataha.net/system/latest-wataha-os-public.zip dla MS/Windows i GNU/Linux

Sprawne jądro 64 bitowe  8) (+ mbr [16 bit], bootsector [16/32/64 bit]), wielozadaniowe z wywłaszczeniem, obsługą systemu plików FAT16 (odczyt), obsługa dysku PATA IDE0 Master (odczyt), obsługa partycji (aktywnej) - na dodatek program działający jako proces "Shell", czyli powłoka systemu.

Przykładowa programy uruchamiane z powłoki (ładowane z dysku jako procesy):
- hello
- name



Podziękowania dla Mangado, za bycie odpornym na mnie  ;D
26
Asembler / Odp: Propozycja współpracy
« Ostatnia wiadomość wysłana przez mangado dnia Styczeń 08, 2014, 21:09:39 »
lukasz1235 pędzikiem zasuwa na irc.freenode.net do kanalizacji #osdev.pl!!!
27
Asembler / Odp: Propozycja współpracy
« Ostatnia wiadomość wysłana przez Nevar dnia Styczeń 07, 2014, 22:37:57 »
Czemu by nie, propozycja nadal aktualna. Przynajmniej można pogadać i zobaczymy co z tego będzie.
28
Asembler / Odp: Propozycja współpracy
« Ostatnia wiadomość wysłana przez lukasz1235 dnia Styczeń 06, 2014, 18:08:08 »
Witaj Nevar :)
Propozycja współpracy nadal aktualna? Jeśli tak to byłbym chętny dołączyć. Co prawda z czasem bywa różnie, ale w wolnej chwili postarałbym się coś skrobnąć. Może tym razem udałoby się zrobić coś konkretniejszego ;)
Pozdrawiam
lukasz1235
29
Pomoc / Odp: konwersja z liczb hex na bin
« Ostatnia wiadomość wysłana przez Nevar dnia Grudzień 04, 2013, 12:37:03 »
Co prawda nie jestem ekspertem od tego procka, ale działa to podobnie we wszystkich.

Procedura "konwersja" robi normalną zamianę liczby szesnastkowej na dziesietną.
Chodzi jak wiadomo o to, że rejestry są binarne lub szesnastkowe jezeli bierzemy grupy po 4 bity. Konwersja hex to dec to jest zmiana zapisu tak zeby miec kolejne cyfry dziesietne zapisane oddzielnie od siebie. Zwykle jest to potrzebne np jezeli chcesz podac każdą z cyfr na inną część wyświetlacza segmentowego lub po prostu wypisać na ekran w postaci znaków ASCII.
Taki zapis oddzielny cyfr oczywiscie musi się mieścić w zakresie 0-9 bo to normalny zakres dla liczb dziesietnych i szesnastkowych jednocześnie.

Reazlizowane jest to tak:

"konwersja" przyjmuje 1 parametr w rejestrze "a" - to jest liczba ktora sklada sie max z 3 znakow dziesietnych (max: 255)
"konwersja" zwraca
w dolnej czesci R5 (4bity młodsze) ilosc jednosci liczby "a"
w gornej czesci R5 (4bity starsze) ilosc dziesiatek liczby "a"
w R4 ilosc setek liczby "a"

realizowane jest to przez serie dzieleń (np a = 245)
najpierw dzielisz a / 100 -> wynik ląduje w "a", a reszta w "b", "a" ma już liczbę setek wiec leci do R4 ( 245 / 100 => a = 2, b = 45 )
potem dzielisz reszte z poprzedniego dzialania przez 10 żeby otrzymać liczbę dziesiątek
a = b ; do a reszta z poprzedniego dzielenia ( a = 45 )
a / 10 -> wynik ląduje w "a" a reszta w "b", "a" ma liczbe dziesiatek "b" ma liczbe jednosci ( 45 / 10 => a = 4, b = 5 )
dalej już jest tylko upakowanie za pomoca "swapa" i "or" jedności i dziesiątek do jednego rejestru R5
na końcu masz R4 = 0x02, R5 = 0x45
30
Pomoc / konwersja z liczb hex na bin
« Ostatnia wiadomość wysłana przez mgsm33 dnia Grudzień 03, 2013, 16:29:56 »
Witam,
mam program prostego zegara ( pod 8051), w którym dodawanie sekund czy minut polega na komendzie INC. Dane pokazywane są na portach ( P0 sec, P1 min, P2 godz) w formacie binarnym. W zasadzie rozumiem diałanie mechanizmu, natomiast nie ogarniam cześci " konwersja" - z elementami dzielenia przez 100, 10 i zamiany tetrad a akumulatorze.
Kiedy usunąłem część " konwersja" zegar działa, tylko nie liczy od 0 do 9 tylko od 0 do A. Sprawdziłem sobie steep by step w programie Edsim51.
Wstawiam ten kawałek do liczenia + skok "konwersja.  Chodzi mi o wytłumaczenie zasady działania tych bloków. Ucze się asemblera dopiero od 2 tygodni.

Dzieki za wszelką pomoc


petla:
   mov a,r0   ; przepisz rejestr R0 do akumulatora
   lcall konwersja
   mov p0,r5   ; przepisz rejestr R5 do portu P0
   mov a,r1   ; przepisz rejestro R1 do akumulatora
   lcall konwersja
   mov p1,r5   ; przepisz rejestr R5 do portu P1
   mov a,r2   ; przepisz rejestr R2 do akumulatora
   lcall konwersja
   mov p2,r5   ; przepisz rejestr R5 do portu P2
   
   inc r0      ; powiększ warość rejestru R0 o 1


   
   cjne R0,#3cH,nie ; sprawdź czy rejestr R0 ma wartość 60D ( 3CH )
            ;jesli tak
   mov R0,#0h    ; zerujemy rejestr sekund R0
   inc R1       ; powiększ wartość rejestr minut R1 o 1
   mov P0,#0h    ; zerujemy port sekund
   

   cjne R1,#3ch,nie ;sprawdzamy czy rejestr minut R1 ma wartość 60D (3CH)
   inc r2        ; powiększamy rejestr godzin R2  o 1
   mov r1,#0h     ; zerujemy rejestr R1 (minut)
   mov r0,#0h     ; zerujemy rejestr R0 (sekund)
   cjne R2,#18h,nie ; sprawdzamy czy rejestr godzin R2 ma wartość 24D
   mov R0,#0h    ; zerujemy rejestr sekund    
   mov R1,#0h    ;zerujemy rejestr minut
   mov R2,#0h    ;zerujemy rejestr godzin
   

   nie:
      jmp petla   ; jeśli nie, skok do etykiety PETLA   
      ret      ;powrót z procedury
      
   konwersja:

       clr c      ;zerujemy flagę C
                mov b,#100      ;wpisujemy do rejestru B wartość 100D
                div ab      ;dzielimy wartość akumulatora przez 100D
                mov r4,a        ;przepisujemy wartość akumulatora do R4       ;  //save MSB in R0
                clr c      ;zerujemy flagę C
                mov a,b      ; wpisujemy do akumulatora watośc rejestru B
                mov b,#10       ;wpisujemy do rejestru B wartość 10D                           ;/Divide by 10   
                div ab      ;dzielimy wartość akumulatora przez 10
                swap a      ;zamiana połówek adresu (LSB z MSB) w akumulatorze
                mov r5,a   ;przepisz zawartość akumulatora do rejestru R5
                         
                    ; //save the tens place in the Higher nibble
                mov a,b
                orl a,r5   ;suma logiczna A i R5
                mov r5,a        ;przepisz zawartość A do rejestru R5      ;// save the tens place in the Lower nibble
            
                ret      ;powrót z procedury
Strony: 1 2 [3] 4 5 ... 7