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

أريد الدخول الى مناطق معينة فى كارت الشاشة

مغلق
بدأه neo في 31 ديسمبر 2003 · 5 رد · 1,013 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أريد الدخول الى مناطق معينة فى كارت الشاشة

المنطق المخزن بها أشكال الحروف

بالأضافة الى كيفية عمل SWAP للـRGB PINS فى كارت الشاشة

سؤال أخر كيف يمكنني تغيير قيم العناوين فى الـINTERRUPT VECTOR TABLE

لانني أريد عمل محاكي للطابعة

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#2

السلام عليكم,

هل تريد عمل هذا وأنت تحت نضاو الدوس أو الوندوز.ففي هذا الأخير تكون الأمور صعبة ويلزمك تعلم أشياءا أخرى عتى تتمكن من برمجة الأدوات مباشرة مثل برمجة VXD أو مثيلاته.

في الدوس فعنوان القيديو يكون في b000 هذا OFFSET ولكن لست متيقنا فأنا ليست لدي ذاكرة الأرقام وبما أنني في سفر فلا يمكنني أن أراجع ملفاتي وعلى العموم يمكن أن تثر على العنوان ببحث صغير وإذا لم تفلح يمكنني أن أعطيه هنا ابتداءا من الأسبوع المقبل.

لتغيير الـINTERRUPT VECTOR TABLE يجب أن نعرف أن هذه تكون في بداية الذاكرة في 0:0 وعنا أيضا يجب التأكيد من الأرقام وتبدأ ب Interrut الأولى وكل واحدة تأخذ 4 بايت وهكذا تكون العملية سهلة الأولى تكون في 0 الثانية في 4 التي تأتيها في 8 إلى آخره والأربع بايت 2 يحنويان على السكمنت و 2 الأخرى على offset .

إلى اللقاء.

#3

أريد عمل هذه الأشياء على الدوس

و قمت بالبحث كثيرا و لكني لم أجد أي شئ

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#4

السلام عليكم,

لتغيير مجرى Interruptions يمكن تغييرها في مواقعها في الداكرة إلا أن هدا لا ينصح به ولكن يمكنك فعل دلك إدا كان ولا بد أن تفعل دلك.وهناك function 35h ل interrupt 21h تعطينا عنوان الدالة التي تتكلف ب الإنتربت التي نريدها .ونستدعيها كالتالي :

mov ah,35h هنا نعطي رقم الدالة 35h

mov al,Number of the interrupt نضع في al رقم الإنتربت التي نريدها

int 21h نستدعي الإنتربت 21

وعند رجوعها سيكون عندنا في ES سكمنت الدالة وفي BX أوفسيت الدالة المكلفة بالإنتربت المطلوبة.

وهناك أيضا الدالة رقم 25h وهي تقوم بتغيير دالة الإنتربت التي نريدها ونستدعيها كما يلي :

mov ah,25h نضع رقم الدالة

mov al, number of the interrupt we want

DS:DX نعطي هنا السكمنت والاوفسيت لدالتنا التي ستعوض الإنتربت

والطريقة في غالب الأحيان تكون كما يلي :

نستدعي الدالة 35 لتعطينا عنوان الدالة الحقيقية ونسجل هدا العنوان في مكان ما بعد هدا نستدعي الدالة 25 لنضع دالتنا الجديدة وبعد هدا وحين ننتهي من شغلنا وقبل أن نغادر البرنامج نضع الدالة الحقيقية إلى مكانه ونغادر هده الشغل الأخير سيكون طبعا إدا أردنا أن نترك الأشياء كما كانت في الأول وإدا كنا نريد أن نستخدم دالتنا فلا نقوم بالعمل الأخير.

وكما يمكن أن نقوم بوضع دالتنا على نمثال برنامج TSR ليصبح مستقرا في الداكرة وتقوم كل البرامج باستدعائه إدا ما دعت الإنتربت التي غيرناها.

وفي الكود التالي مثال يغير الإنتربت رقم 5 وحين نستدعي هده الإنتربت ستستدعي دالتنا وهده الأخيرة ستقوم فقط بكتابة رسالة على الشاشة تبين لنا أنها فعلا أخدت الأمور.

هدا كتبته بعجالة ولم أتيقن إن كانت هناك أخطاء أم لا على العموم هده توضح الطريقة المستعملة :

.MODEL SMALL


.CODE

TheSeg	dw 0 ;The original segment
TheOff	dw 0 ;The original offset
NewInt:
	jmp Deb
Msg	db "You Have Called Int 5 ,Here is the new one ",10,13,"$"
Deb:
;int 3
	mov ax,seg Msg
	mov ds,ax
	mov dx,offset Msg
	mov ah,9
	int 21h

	iret
start:


push cs	; push the code segment
pop ds	; set the ds the same as cs
;	int 3
	mov ah,35h
	mov al,5;Number of the interruption
	int 21h
	mov word ptr [TheSeg],es
	mov word ptr [TheOff],bx
	mov ax,seg NewInt
	mov ds,ax
	mov dx,offset NewInt
	mov ah,25h
	mov al,5;Number of the interruption
	int 21h

	int 5  ;We call the interrupt


;**********Wait to press a key on the 
;keybooard********************************
mov ah,7
int 21h

;*****  Restore The value of the original interruption ***
	mov ax,word ptr [TheSeg]
	mov ds,ax
	mov dx,word ptr [TheOff]
	mov ah,25h
	mov al,5;Number of the interruption
	int 21h
;************ Terminate the prog **********************
MOV AX,4C00H
INT 21h

end start

إلى اللقاء.

#5

شكرا جدا على المساعدة

و لكن سؤلى حول كارت الشاشة لم يجيب علية أحد

مضمون الموضوع أنى قمت بعمل برنامج STARTUP LOADER و أريدة يطبع رسالة بالعربي لذلك أريد تغيير المصفوفة المسؤلة عند شكل الحروف

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#6

السلام عليكم,

لم أجرب من قبل ما تكلمت عنه حول كارت الشاشة. وقد قمت في يوم ما بتجربة برمجة شيء من هدا القبيل ووضعت الرسائل بالعربية على شكل صور وبهدا تسهل الأمور لأنه يجب فقط هنا اضهار الصورة.

أتمنى لك التوفيق وإلى اللقاء.

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…