نمایش نتایج 1 تا 30 از 30

نام تاپیک: خواندن ورودی کاربر از کیبرد

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #9

    نقل قول: خواندن ورودی کاربر از کیبرد

    نقل قول نوشته شده توسط prpe26 مشاهده تاپیک
    1. بله
    2. چیزی که کاربر تایپ میکنه رو به صورت همزمان نشون بدم (دقیقا یه Prompt).
    در مورد چاپ کاراکتر برروی صفحه نمایش : برخی از دستگاه های ورودی / خروجی مثل صفحه نمایش به آدرس های خاصی از حافظه ی اصلی نگاشت میشوند یعنی به محض اینکه شما در آن آدرس ها داده وارد کنید تغییرات روی این دستگاه ها اعمال می شود. برای صفحه نمایش شما میتوانید از آدرس 0xB8000 برای نوشتن مستقیم برروی صفحه نمایش استفاده کنید. هر سلول در صفحه نمایش در این نگاشت شامل دو بایت کاراکتر و مشخصه ی رنگ کاراکتر میباشد. بایت اول کد کاراکتر و بایت دوم مشخصه ی رنگ.

    اگر کتاب های زبان اسمبلی را مطالعه کرده باشید قالب رنگ B RGB I RGB هشت بیتی که سه بیت کم ارزش آن یعنی RGB اول رنگ کاراکتر یا ForeColor و بیت چهارم (I) غلظت این رنگ و سه بیت RGB بعدی مشخص کننده رنگ پس زمینه یا Background Color آن سلول می باشد. بیت آخر هم اگر یک شود نمایش کاراکتر بصورت چشمک زن خواهد شد. من تو شبیه ساز ها این چشمک زدن کاراکترها را مشاهده نکردم ولی وقتی روی سخت افزار واقعی بوت شدم تاثیر آن کاملا مشهود بود.

    پس شد بایت اول کد کاراکتر و بایت دوم مشخصه ی رنگ کاراکتر. البته در مد فعلی صفحه نمایش ما 80 ستون و 25 سطر داریم و با در نظر داشتن اینکه آدرس 0xB8000 آدرس شروع است و این آدرس خطی است برای رفتن به سطر i ام و ستون j ام باید از فرمول (0xB8000 + 2 * (i*80+j استفاده کنیم.

    پس برای شروع :
    char *VideoMemory = (char *) 0xB8000;

    *(VideoMemory++) = 'H';
    *(VideoMemory++) = 15; // White on Black


    اگر بخواهید از نوع داده ای Short int یا متداول تر آن برای توسعه دهندگان uint16_t که از روی همین نوع داده ای تعریف شده برای کار با صفحه نمایش استفاده کنید باید بدانید که در کامپیوترهای ما نحوه ی ذخیره ی مقادیر بصورت little endian میباشد یعنی در ذخیره ی یک عدد دوبایتی ابتدا بایت کم ارزش ذخیره میشود و سپس بایت پر ارزش پس در این مواقع باید شماره ی کاراکتر 8 بیت کم ارزش باشد و مشخصه ی رنگ 8 بیت با ارزش.

    مثلا :
    uint16_t *VideoMemory = (uint16_t *)0xB8000;
    *(VideoMemory++) = 'H' | (15<<8);

    در مورد n\ : شما باید تابع printf خودتان را بنویسید (: . در انجام این کار کاملا مختار هستید میتواند هر طور که خواستید طراحی کنید.
    تابع printf یک تابع با تعداد ورودی نا مشخص است و پیاده سازی آن برای شما در شروع کار کمی مشکل است. فعلا میتوانید یک تابع معمولی داشته باشید که یک رشته را چاپ کند.
    پس از نوشتن شما می توانید تابعی بنویسید که بطور خودکار شما را به سطر بعدی ببرد. اگر احساس میکنید الان وقت نوشتن printf جدیدتان است شروع کنیم ؟

    البته در هنگام نوشتن برروی صفحه نمایش مشاهده میکنید که اشاره گر سر جای خود ثابت مانده. این امر طبیعی است شما برای حرکت دادن این اشاره گر باید در پورت صفحه نمایش مکان جدید اشاره گر را بنویسید.
    هر موقع علاقمند بودید وارد اون مبحث هم میشویم.

    موفق باشید
    آخرین ویرایش به وسیله reza_noei : چهارشنبه 25 آذر 1394 در 22:26 عصر

تاپیک های مشابه

  1. حرفه ای: خواندن دو کلید از کیبرد همزمان
    نوشته شده توسط hossein71 در بخش برنامه‌نویسی جاوا
    پاسخ: 1
    آخرین پست: دوشنبه 14 اسفند 1391, 18:00 عصر
  2. خواندن یک کرکتر از ورودی
    نوشته شده توسط delafarin در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 1
    آخرین پست: سه شنبه 18 اسفند 1388, 14:12 عصر
  3. سوال: خواندن فایل txt از ورودی و انجام اعمال ریاضی روی سطرهای خاصی از آن
    نوشته شده توسط mohammadbm62 در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: سه شنبه 27 مرداد 1388, 08:15 صبح
  4. سوال: خواندن فایل txt از ورودی و انجام اعمال ریاضی روی سطرهای خاصی از آن
    نوشته شده توسط mohammadbm62 در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: یک شنبه 25 مرداد 1388, 14:37 عصر
  5. استفاده از مقادیر ورودی کاربر در sql Query
    نوشته شده توسط یعقوب در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 5
    آخرین پست: یک شنبه 22 مرداد 1385, 18:55 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •