עבור לתוכן

צריך עזרה ביצירת דילאי באסמבלי

Featured Replies

פורסם

אני בונה משחק "סיימון" לפרוייקט שלי באסמבלי בסביבת 8086 (16 ביט)...

וכשאני מדליק כל פעם "אור" בצבע שצריך אז תחת האמולטור (emu8086) בזמן הרצת התוכנית רואים את ההדלקה והכיבוי אבל מן הסתם אחרי ההידור לקובץ EXE\COM הפעולות נעשות כל כך מהר שבכלל לא רואים את ההדלקה והכיבוי....

רציתי לדעת אם יש איזשהי פקודה/מנגנון קטן שיוכל ליצור דילאי אונבירסלי - ככה שתחת P1 ותחת CORE2 זה ימתין את אותו הזמן...

תודה לעוזרים. :)

פורסם

	move.l #10-1,d0		 ;flash 10 times
.flash bchg #1,$bfe001
bsr _wait
dbf d0,.flash
rts

_wait move.l #50-1,d0 ;waits 1 second on PAL
.wait bsr _waitvb
dbf d0,.wait
rts

_waitvb ;waits 1/50th of a second
.1 btst #0,(_custom+vposr+1)
beq .1
.2 btst #0,(_custom+vposr+1)
bne .2
rts

נלקח מ:

http://eab.abime.net/showthread.php?t=9950

פורסם

מה קרה לך!? זה קוד לאמיגה!

על 8086 יש לך כמה אפשרויות, וכולן תלויות בחומרה.

1) להשתמש בפסיקות חומרה על מנת לספור את הזמן. אם אתה עובד ללא מערכת הפעלה זו אולי האופציה הטובה שלך.

2) תלוי במ"ה ובחומרה, יתכן שיש API או רגיסטר ממופה זכרון שיתן לך מונה זמן. זכור לי במעורפל שעל PC יש איזו כתובת שכזו.

3) אם יש כרטיס מסך, אתה יכול לבדוק את ה-vertical blank ע"י פקודות port.

4) בהנחה שקצב השעון קבוע, אתה יכול לבדוק כמה זמן לוקח למעבד לרוץ על ריק, לדוגמא אם הקוד הזה לוקח אלפית שניה:


mov cx,1000h
rep nop

אז תוכל לחזור עליו 300 פעמים על מנת להמתין 0.3 שניות.

לשיטה הזו יש חסרונות אבל לפחות היא פשוטה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים