الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يتم تطوير ساعة لنظام التشغيل

بدأه MohamedIBrahim في 7 يونيو 2011 · 1 رد · 1,113 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

اهلا بالشباب الكرام انا اليوم كنت اعمل على تطوير ساعة لنظام تشغيل

المهم كنت اريد بعض ارائكم حول كيف يتم برمجة ساعة النظام

تقريبا هذا ما حاولت عمله

gdt setup:
gdt_set_gate(0, 0, 0, 0, 0);
gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF);
gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);

idt setup:
idt_set_gate(0, isr0, 0x08, 0x8E);
...
idt_set_gate(31, isr31, 0x08, 0x8E);

irq remap:
remap the pic: 0-7 to 0x20 and 8-15 to 0x28
idt_set_gate(32, irq0, 0x08, 0x8E);
...
idt_set_gate(47, irq15, 0x08, 0x8E);

timer:
pit installed on 0

kb:
installed on 1

وليكون الموضوع ايضا حوار ونقاش علمى حول الوقت الحقيقى وتصميمه فى انظمة التشغيل

تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 7 يونيو 2011 في 19:08

GoodBye

#2

هذا الكود الصحيح توصلت له بعد تجارب عديدة وبعدما قرأت احد المصادر عن ذلك

PM.ASM

GLOBAL          _LGDT, _SGDT, _LIDT, _SIDT, _LTR, _STR
GLOBAL          _LCR0, _SCR0, _LCR3, _SCR3, _SCR2, _CLTS, _INVLPG
GLOBAL          _RESET

%define PARAM_1 ebp+8+4*0
%define PARAM_2 ebp+8+4*1
%define PARAM_3 ebp+8+4*2
%define PARAM_4 ebp+8+4*3

[SECTION .text]
[BITS 32]

_LGDT:
        push    ebp
        mov     ebp, esp
        mov     eax, [PARAM_1]
        lgdt    [eax]
        pop     ebp
        ret

_SGDT:
        push    ebp
        mov     ebp, esp
        mov     eax, [PARAM_1]
        sgdt    [eax]
        pop     ebp
        ret

_LIDT:
        push    ebp
        mov     ebp, esp
        mov     eax, [PARAM_1]
        lidt    [eax]
        pop     ebp
        ret

_SIDT:
        push    ebp
        mov     ebp, esp
        mov     eax, [PARAM_1]
        sidt    [eax]
        pop     ebp
        ret

_LTR:
        push    ebp
        mov     ebp, esp
        ltr     [PARAM_1]
        pop     ebp
        ret

_STR:
        xor     eax, eax
        str     ax
        ret

_LCR0:
        push    ebp
        mov     ebp, esp
        mov     eax, [PARAM_1]
        mov     cr0, eax
        jmp     short $+2
        pop     ebp
        ret

_SCR0:
        mov     eax, cr0
        ret

_LCR3:
        push    ebp
        mov     ebp, esp
        mov     eax, [PARAM_1]
        mov     cr3, eax
        pop     ebp
        ret

_SCR3:
        mov     eax, cr3
        ret

_SCR2:
        mov     eax, cr2
        ret

_CLTS:
        clts
        ret

_INVLPG:
        push    ebp
        mov     ebp, esp
        mov     eax, [PARAM_1]
        invlpg  [eax]
        pop     ebp
        ret

_RESET:
        cli
        push    dword 0
        push    dword 0
        lidt    [esp]                   ; gdtr.limit=0
        int     0                       ; triple fault and reset

وهناك ملف بلغة السى لابد ان يكون PM.h لكن الامر يعتمد فى تطويره على نوعية النوعية

الامر يعتمد فى المقام الاول على VESA

وهذا هو الكود المبدئى ويمكن للجميع ان نبدأ نقاش حول نظرية العمل

تم تعديل هذه المشاركة بواسطة MohamedIBrahim في 7 يونيو 2011 في 20:04

1

GoodBye

مواضيع مشابهة