AtrafNET (08-05-17), SajjadKhati (07-05-17)
درود
دوستان لطفا یک منبع واسه نوشتن برنامه در سطح سیستم و بایوس بهم بگید.
مثلا
توی borland C ++ یه برنامه واسه دسرسی به مثلا کیبورد داشته باشیم یا از این موارد
که از توابع dos استفاده میشه
همین دسترسی به ستاپ چطور نوشته شده؟
اگه pdf یا سایتی هست لطفا معرفی بفرمایید .
باتشکر.برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
AtrafNET (08-05-17), SajjadKhati (07-05-17)
سلام
کار آسونی فکر نکنم باشه دسترسی به بایوس
شاید جزء سخت ترین کارها باشه (بازم نمیدونم)
فکر کنم از سطح ++C هم بیشتر بخواد یعنی احتمالا زبونی در حد اسمبلی شاید لازم باشه که بدونن
استاد امید اسمبلی کار کرد
حالا ببینیم نظر اساتیدهایی مثل استاد امید و استاد آرمین و ... چیه؟ (من فقط گمانه زنی در این حد کردمبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید )
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
با سلام،برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط salpc برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
برنامه نویسی هر بایوس به ساختار اون مادربورد وابسته است. در نتیجه ما نمی تونیم با یک روش بایوس هر مادربوردی رو به شکل دلخواه برنامه ریزی کنیم. ولی اگر تمایل دارید با ساختار برنامه ی بایوس آشنا بشید، پیوند زیر رو مطالعه بفرمایید:
http://www.jefro.net/astrobios-8-19-03.pdf
البته پروژه ای به نام coreboot هم وجود داره که با مهندسی معکوس به بایوس چندین مدل از مادربورد ها دست پیدا کرده که بررسی اون خالی از لطف نیست. زبان متداول برای نوشتن بایوس ها سی هستش. البته بعضی از قسمت های اون نظیر فرخوانی Boot Loader شاید با اسمبلی نوشته بشه.
اون موردی که شما در مورد Keyboard یا توابع DOS می فرمایید غالبا از طریق وقفه های بایوس صورت می گیره. شما می تونید از طریق یک کد اسمبلی به واسطه ی پردازنده یک وقفه رو صدا بزنید و در رجیستر پردازنده منتظر جواب اون بمونید (در C++ هم این کار توسط کلمه ی کلیدی asm امکان پذیره). برای اطلاعات بیش تر:
BIOS and DOS Interrupts
https://www.equestionanswers.com/c/c...interrupts.php
دسترسی به تنظیمات بایوس پیچیده است. پردازنده از طریق درگاه های IO خودش مانند 70H با حافظه ی بایوس می تونه در ارتباط باشه. نکته اینجاست که در ویندوز شما از سطح یک Application نمی تونید به این درگاه ها دسترسی داشته باشید. در نتیجه باید یک درایور در سطح هسته طراحی کنید که این کار رو براتون انجام بده (البته لینوکس در این مورد آزادی عمل بیش تری به شما میده). پس از دسترسی به حافظه شما باید آدرس های حافظه رو تفسیر کنید تا درک کنید که هر آدرس حافظه شامل چه تنظیماتی از مادربورد هستش. متاسفانه این آدرس دهی ها استاندارد جامعی نداره و حتی این استاندارد بر روی دو مدل مادربورد از شرکت یکسان ممکنه متفاوت باشه. مضافا این که تقریبا هیچ شرکتی اطلاعات مربوط به آدرس دهی های خودش رو منتشر نمی کنه.
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
AMD>INTEL (08-05-17), ramin1000 (08-05-17), SajjadKhati (08-05-17), salpc (08-05-17)
سلام
با اجازه استارتر منم خیلی دوست دارم بدونم برنامه های تحت بوت رو چطوری میسازن.
منظورم مثل استارتر ارتباط با مادربورد و بایوس نیست بلکه منظورم نرم افزار های کاربری هستش که به صورت Bootable میسازن و قبل از شروع سیستم عامل اجرا میشن و عملاً به هر چیزی دسترسی دارن.
اگر منم بخوام یه برنامه ام رو قابل اجرا در محیط Boot کنم چطور و با چه زبان برنامه نویسی ممکنه؟ بیشتر منظورم برنامه های Bootable مستقل هستش نه اونایی که از یه توزیع لینوکس شخصی سازی شده استفاده میکنن.
یا حتی می دونم خنده داره سوالم ولی سیستم عامل هم خودش یه برنامه قابل اجرا در Boot حساب میشه نه؟ یعنی اگه روش ساختن برنامه قابل اجرا در Boot رو یاد بگیریم می تونیم یه سیستم عامل کوچک و شخصی در حد 4 تا امکان ساده هم شده اگه تلاش کنیم بسازیم؟
salpc (08-05-17)
بایوس ها الان به صورت ماجول های آماده شده توسط شرکتهای اصلی مثل AMI و ... عرضه میشه . شرکت های سازنده برد فقط از نظر ظاهری و یکسری موارد را به بایوس خام این شرکت ها اضافه میکنند . مخصوصا UEFI ها به دلیل گرافیکی بودن و بالا بودن حجم و ... زمان زیادی خواهد برای نوشتن .
شرکتهایی مثل AMI بیس را معرفی میکنند و شرکت های تولید کننده بردها برای محصولاتشون شخصی سازی میکنند .
حتما سایت AMI را چک کنید .
ravegoat (08-05-17), SajjadKhati (08-05-17), salpc (11-05-17)
با سلام،برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط AtrafNET برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
هر برنامه ای برای بوت شدن نیاز به یک Bootloader داره. بوت لودر متداول یه برنامه ی 512 بایتی هستش که به زبان اسمبلی نوشته میشه و هسته ی سیستم عامل یا برنامه ی شما رو روی سیستم بارگذاری می کنه. برای طراحی بوت لودر می تونید پیوند های زیر رو مطالعه بفرمایید:
https://www.codeproject.com/Articles...#_Toc231383167
https://www.codeproject.com/Articles...bly-and-C-Part
https://www.codeproject.com/Articles...bly-and-C-Part
https://www.cs.cmu.edu/~410-s07/p4/p4-boot.pdf
جواب سوال بعدی تون مثبته. برای طراحی یک سیستم عامل ساده پیوند های زیر می تونه مفید باشه:
http://www.brokenthorn.com/Resources/OSDevIndex.html
https://www.cs.bham.ac.uk/~exr/lectu...res/os-dev.pdf
http://www.instructables.com/id/Make...rating-System/
http://mikeos.sourceforge.net/
فقط برای تست این سیستم عامل ها از VM استفاده کنید.
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
AMD>INTEL (08-05-17), AtrafNET (08-05-17), ramin1000 (08-05-17), SajjadKhati (08-05-17), salpc (11-05-17)
سلام
این کد رو ببینید درسته
میخوام دسترسی به کیبورد با استفاده از توابع بایوس داشته باشم یعنی وقتی کلیدی از کیبورد بزنیم تو خروجی بنویسه و مثلا کلید capslock رو هم بزنه روشنه یا خاموش .
:}کد:KEYBOARD BIOS CALLS INT 16H This interrupt in the ROM BIOS provides for minimal character transfer from the keyboard. It is entered by first specifying the desired task to perform in the AH register. AH = 0 Get Key Returns with AH = scan code AL = ascii char, 0 = non-ascii, ie Func key AH = 1 Get status Returns with zflag = 0, valid key in queue = 1, no key in queue AH = scan code AL = ascii char, 0 = non-ascii, ie, Func key AH = 2 Get shift status Returns with AL = 7 Right shift 1 = pressed 6 Left shift 5 Ctrl 4 Alt 3 Scroll Lock 1 = on 2 Num Lock 1 Caps Lock 0 Ins Lets develop routines similar to those found in some libraries. #include <dos.h> int bioskey( cmd ) int cmd; { union REGS regs; regs.h.ah = cmd; int86( 0x14, ®s, ®s ); return( regs.x.ax ); } int kbhit() { union REGS regs; regs.h.ah = 1; int86( 0x16, ®s, ®s ); return( regs.x.cflags & 0x0040 ); /* return Z flag only */
این رو از یه سایتی پیدا کردم ولی :
من نوشتم ولی کار نکرد!! وقفه 16h رو کجا باید فراخوانی بکنم؟
البته روی سیستم عامل ویندوز xp به صورت مجازی (با نرم افزار VMware Workstation Pro )نوشتم ولی اصلا اجرا نشد و همش رو ارور میداد !! نکنه به خاطر همین مجازی بود!! نمیدونم !
اشتباه کجا هست؟
لطفا کمک کنید.
ممنون برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
صبر کنی خود مهندس آرمین میان جواب میدند .برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط salpc برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
salpc (12-05-17)
با سلام،برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط salpc برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
دوست عزیزم، اگر می فرمایید کار نکرد لطفا توضیحات بیش تری ارایه فرمایید تا بشه راهنمایی دقیق تری ارایه کرد:
- این برنامه به زبان سی هستش و به علاوه باید با کامپایلر 16 بیتی کامپایل بشه.
- برنامه های 16 بیتی اگر اشتباه نکنم تا ویندوز 95 پشتیبانی می شده و در ویندوز XP باید در حالت Compability به اجرا در بیاد.
- قبلا هم اشاره شد که ویندوز پیش از بارگذاری هسته به شکل Real اجرا میشه و پس از اون به حالت Protected در می آید. در این حالت دسترسی شما به وقفه ها سلب میشه (البته در نسخه ی قدیمی ویندوز مطمئن نیستم).
وقفه 16H توسط پاس دادن مقدار 0x16 به تابع int86 فراخوانی شده.
پی نوشت:
برنامه نویسی در این سطح آن چنان مرسوم نیست. در نتیجه تعداد افرادی که پاسخ گوی سوالات ما در این زمینه هستند کم خواهد بود. کدی که قرار داده شده در سیستم های 20 سال پیش به اجرا در می اومد. پس نسل جدید برنامه نویس ها شاید کم تر در مورد چنین کد هایی اطلاع داشته باشند. هر چه کد قدیمی تر و سطح پایین تر باشه الزاما تضمین کننده ی انتخاب یک راه حل صحیح توسط ما نیست. اگر هدف غیر از کنجکاوی پیرامون عملکرد کد ها در سطوح پایین هستش، بهتره پیرامون هدف و دور نمای کار خودمون بیش تر تحقیق کنیم تا ابزار مناسب را بر گزینیم. صرفا جهت اطلاع عملکرد این کد با چند خط کد سی شارپ بدون هیچ دردسری می تونه معادل سازی بشه.
با آرزوی موفقیت
آرمینبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
AMD>INTEL (13-05-17), SajjadKhati (13-05-17), salpc (13-05-17)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks