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

سؤال في المؤشرات

مغلق
بدأه gofail في 25 يناير 2007 · 11 رد · 848 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الاعزاء :

كتبت هذا الكود في التربو سي بلس بلس فلم يترجمه واورد خطأ

typedef unsigned char byte;

typedef unsigned short word;

byte *VGA=(byte *)0xA000000L; /* this points to video memory. */

word *my_clock=(word *)0x0000046C; /* this points to the 18.2hz system clock. */

ثم غيرته الى الكود التالي

char far *Vid_RAM;

FP_SEG( Vid_RAM ) = 0xA000;

FP_OFF( Vid_RAM ) = 0x0000;

ولكن لم يعمل ايضا

لاادري ما هو الخطا

ارجو تعاونكم في التوضيح علما بان البرنامج 16بت

#2

مش فاهم الكود اسف ما بقدر اساعدك بس اذا بدك بشرحلك عن البوينتر....

hackers.jpg
#3

الأخ الفاضل ...

انا جربت هذا الكود ويعمل جيداً

#include <dos.h>

int main()
{
	typedef unsigned char byte;
	typedef unsigned short word;
	byte *VGA=(byte *)0xA000000L; /* this points to video memory. */
	word *my_clock=(word *)0x0000046C; /* this points to the 18.2hz system clock. */

	char far *Vid_RAM;
//	Vid_RAM = (char far *)MK_FP(0xA000, 0x0000);

	FP_SEG( Vid_RAM ) = 0xA000;
	FP_OFF( Vid_RAM ) = 0x0000;

	return 0;
}

وشكراً

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 26 يناير 2007 في 03:17

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#4

مهندس اسامة شكرا لردك

انا لا ادري مل هو المترجم الذي ل استخدمته انت في الكمبايل

اما عندي في المترجم تربو سي بلس بلس 3 لم يترجم الكود وارد خطا عند القيمة a0000000L

اما الكود الاخر فقد قام بترجمته لكن عند التنفيذ لم يعمل البرنامج

ارجو التاكد واذا اردت ان ارفق لك البرنامج الذي اعمل عليه فانا على استعداد

تحياتي

#5

الأخ الفاضل ...

أنا أستخدمت Borland C++ 3.1 على نظام تشغيل (DOS)

أرجو أن تخبرنى ما هى رسالة الخطأ التى تظهر عندك

بالتأكيد يفضل أن ترفق الكود

لنه عمل عندى بدون مشاكل

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#6

اخي اسامه :

ارفقت لك كود البرنامج الذي اعمل عليه

واطلب منك اذا كان لديك رابط لتحميل borland c++ v3.1 ترسله لي

____.txt

#7

الأخ الفاضل ...

الملف الذى أرفقتة للاسف لا يحتوى على رسالة الخطأ

على أى حال هذا الملف بعد تعديلات بسيطة فى الكود ويعمل معى جيداً (Windows 98)

BIOSVGA.zip

كذالك قمت بتعديل السطر التالى:

byte *VGA=(byte *)0xA000000L;	 	/* this points to video memory. */
إلى
byte far *VGA=(byte far *)0xA0000000L;	 	/* this points to video memory. */

إذا لم تجد حل للمشكلة قم بإعادة بتثبيت الـ Compiler من جديد

ولا تنسى أرسال رسالة الخطأ

تأكد أنك لا تستعمل نوع (Model) للبرنامج (Small أو Tiny) لأن هذا لا يسمح بمؤشر طويل فى الذاكرة (far pointer)

أنا أستخدمت النوع (Large) "وذلك من Options ثم Compiler ثم Code generation" بالنسبة لـ BC 3.1

وشكراً

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 28 يناير 2007 في 05:37

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#8

اخي اسامة:

اشكرك كثيرا على تعاونك وتفاعلك والحمد لله الارشادات التي ذكرتها حلت

المشكلة وعمل البرنامج بشكل جيد

تمنياتي لك بالتوفيق

#9

هناك الكثير من التغييرات التي قمت انت بها في البرنامج ومنها:

اضافة الهيدر time.h

حذف المؤشر الذي يشير الى الساعة myclock*

استبداله ب clock()

لماذا كل هذه التغييرات وما هدف كل منها؟

#10

الأخ الفاضل ...

أستخدمة الدالة ()clock بدلاً من المؤقت المستخدم my_clock المعتمد على (Interrupt 8) وذلك للسهولة والدقة

فـ ()clock يعطى بالميلى ثانية (1000 مرة بالثانية) أما (Interrupt 8) فيتم تنفيذه فقط 18.2 مره بالثانية، لذلك لو تملك جهاز سريع ستجد وقت التنفيذ صفر بأستخدام (Interrupt 8) كما حدث معى - وبالتالى حذفت المؤشر الذى يشير للساعة وأستبدلتة بالدالة ()clock

ثم قمت بإضافة الهيدر time.h - لانها تحتوى تعريف هذه الدالة ()clock

وشكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#11

اشكرك كثيرا

لدي سؤال : هل تعلم الvga programming وكذلك برمجة العتاد الصلب تحت ال 16 بت

مفيد ام انه هناك طرق اخرى افضل لتعلم ذلك في ال 32 بت

#12

الأخ الفاضل ...

الأن أغلب التطبيقات تستعمل (32 بت) ، والأتجاه إلى (64 بت) - فلا تهدر وقت كثير فى الـ(16 بت) - يمكنك الأطلاع من أجل المعرفة والفهم على (16 بت) - لكن الوضع مختلف تماماً فى (32) - حيث تعمد على (Protect Mode) فى إدارة الذاكرة والتطبيقات

بخصوص برمجة العتاد - فى أدوات جاهزة من مايكروسوفت لبرمجة (Hardware) للويندوز: http://www.microsoft.com/whdc/devtools/ddk/default.mspx

وشكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

هذا الموضوع مغلق.

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