לדלג לתוכן

אינטל 8080

מתוך ויקיפדיה, האנציקלופדיה החופשית
אינטל 8080
Intel 8080
מעבד אינטל 8080 פתוח וסגור
מעבד אינטל 8080 פתוח וסגור
מידע כללי
יצרן אינטל
השקה אפריל 1974; לפני 51 שנים
הקודם אינטל 8008
הבא אינטל 8085 (אנ')
מידע טכני
תושבת DIP40
מארז DIP בעל 40 פינים
טכנולוגיית ייצור
6 μm
טרנזיסטורים 4,500 או 6,000[1]
מספר ליבות 1
קצב שעון מרבי 2 עד 3.125 מגה־הרץ
רוחב נתונים 8 סיביות
רוחב כתובת 16 סיביות
סט פקודות 8080

אינטל 8080אנגלית: Intel 8080) היה המיקרו־מעבד השני של אינטל בארכיטקטורת 8 סיביות. הוא הושק באפריל 1974 כממשיכו המשופר של אינטל 8008, אם כי ללא תאימות בינארית (אנ') עמו.[2] בתחילה נועד לשימוש במערכת משובצת מחשב כגון מחשבונים, קופות רושמות, מסופי מחשב ורובוטים תעשייתיים,[3] אך הביצועים המרשימים שלו הובילו לאימוצו גם במחשבים מוקדמים – וסייעו לפתיחת עידן המחשוב האישי.

בשונה מקודמיו – ה־4004 וה־8008 – שפותחו בהתאמה לדרישות ייעודיות של לקוחות ספציפיים (כמו ביזיקום ו־CTC), ה־8080 היה יוזמה פנימית של אינטל עצמה. כתוצאה מכך, החברה הייתה חופשית לשווק אותו לכל דורש, ללא מגבלות חוזיות או מסחריות, מה שתרם במידה רבה להפצתו הנרחבת.

לצד יתרון השיווק החופשי, המעבד החדש הציג שיפורים טכנולוגיים מרשימים לעומת קודמיו. הוא יוצר בטכנולוגיית NMOS, שאפשרה לו לפעול במהירויות גבוהות יותר ולהתממשק בקלות לרכיבי TTL (אנ') שהיו נפוצים בתעשייה. המעבר למארז של 40 פינים (לעומת 16 ב־4004 ו־18 ב־8008) הקל על חיבורו להתקנים חיצוניים. כמו כן, סט הפקודות הורחב, נוספו אופני מעינה חדשים, ורוחב אפיק הכתובת הוגדל ל־16 סיביות – מה שאִפשר גישה ל־64KB של זיכרון, פי ארבעה מה־8008, שהוגבל ל־16KB בלבד. שבבים מסייעים, כמו 8224 (יוצר תזמון) ו־8228 (בקר אפיק), שִפרו את ניהול התזמון ואת העברת הנתונים. את שיפורים אלו, רבים מהם תולדה של משוב ממשתמשים, ביצעו מהנדסי אינטל ובראשם פדריקו פַג'ין (Federico Faggin).

הצלחה משמעותית נוספת של ה־8080 נבעה מהיותו המעבד שנבחר למחשב האישי הראשון שזכה להכרה רחבה – Altair 8800. סביב מעבד זה נכתבה גם מערכת ההפעלה CP/M, שהפכה לתקן בקרב מיקרו־מחשבים בשנים הראשונות של התעשייה. שילוב זה הפך את ה־8080 לחלק בלתי נפרד ממהפכת המחשוב הביתי.

השפעתו של ה־8080 חרגה מעבר לדורו. הצלחתו הביאה לכך שגם הדור הבא של מעבדים נבנה בתאימות אליו: ה־Z80 של חברת זילוג, שפיתחו פג'ין ומסטושי שימה (Masatoshi Shima) לאחר שעזבו את אינטל, שמר על תאימות לאחור ל־8080. גם אינטל עצמה, כאשר החלה לפתח את ה־8086 בשנת 1976, שמרה על תאימות חלקית לפקודותיו – מה שאִפשר להריץ קוד ישן על חומרה חדשה.[4] בדרך זו, השפיע ה־8080 ישירות על תכנון ארכיטקטורת x86, שהמשיכה לשלוט בשוק במשך עשרות שנים לאחר מכן.

במהלך השנים הוצגו מספר גרסאות של ה־8080, ביניהן דגמים מהירים יותר כמו 8080A-1 ו־8080A-2 שפעלו בקצבים של עד 3.125 מגה־הרץ.[5] בשנת 1976 השיקה אינטל את ה־8085, גרסה מתקדמת של ה־8080 שהתבססה על טכנולוגיית ייצור חדשה. אחד החידושים הבולטים בגרסה זו היה שהמעבד נזקק למתח הפעלה אחד בלבד של 5 וולט, במקום שלושה מתחים שונים שנדרשו עבור ה־8080: -5 V‏, ‏5 V ו־12 V. שינוי זה פישט את תכנון המערכת וחסך בעלויות. בנוסף, ה־8085 תמך בקצבי שעון גבוהים יותר, והכיל שתי פקודות חדשות שהוסיף סטנלי מזור (Stanley Mazor). אף על פי שדגם זה שופר מבחינה טכנית, הוא הגיע לשוק לאחר שה־Z80 של זילוג כבר ביסס את מעמדו, ואינטל איבדה את הבכורה בשוק מעבדי ה־CP/M. אינטל חזרה להוביל רק עם הדור הבא – ה־8086 – שהציע שיפורים משמעותיים, ובהם סט פקודות מורחב, תוספת אוגרים, קצבי שעון גבוהים יותר, ובעיקר אפיק כתובת בן 20 סיביות, שאִפשר גישה למגה־בייט שלם של זיכרון – פי 16 ממה שאִפשרו ה־8080 וה־Z80.

המיקרו מעבד אינטל 8008 של אינטל נתקל בהתנגדות מצד לקוחות עקב מגבלות כמו אופן מעינה בודד, קצב שעון נמוך, מספר פינים מצומצם ומחסנית פנימית קטנה – תכונות שהגבילו את יכולות התוכנה שהיה ניתן להריץ עליו. מספר תכנונים הוצעו לשבב הבא, החל מתוספות קטנות ל־8008 ועד שינויים שורשיים בארכיטקטורה.[6] התוצאה הסופית הייתה פשרה בין ההצעות.

העבודה על אינטל 8080 החלה בקיץ 1971, כשפיתוח האינטל 4004 הסתיים וה־8008 היה עדיין בפיתוח. באותה תקופה, לאחר שנפוצו השמועות על "מעבד על שבב", החלה להתעורר התעניינות גוברת במיקרו מעבדים. פדריקו פג'ין, מתכנן ה־4004, העביר הרצאות וביקר אצל לקוחות, ששיתפו אותו בתסכוליהם מהביצועים של ה־8008 ומהארכיטקטורה שלו, במיוחד בשל קצב השעון האיטי (0.5 מגה־הרץ) שלו.[6]

באביב 1972 פג'ין הציע את השבב החדש להנהלת אינטל – אך להפתעתו ולמרבה תסכולו, ההצעה נדחתה. אינטל העדיפה לראות קודם את תגובת השוק ל־4004 ול־8008. רק בסתיו אושר הפרויקט.[6] בנובמבר של אותה שנה גייס פג'ין את מסטושי שימה מיפן, שעבד איתו על תכנון ה־4004, והטיל עליו את תכנון הלוגיקה של ה־8080. שימה עבד בשיטה שפג'ין פיתח,[7] אשר השתמשה בלוגיקה מבוססת שערי סיליקון.

ה־8080 נועד להיות מיקרו מעבד רב־שימושי, שישלב בתוך שבב אחד את הפונקציות שדרשו בעבר התקנים חיצוניים. כבר בשלב מוקדם של הפיתוח הוחלט שלא תהיה תאימות בינארית בינו ל־8008, אך כן תהיה תאימות ברמת קוד מקור (דרך טרנספיילר). השינוי הבולט ביותר היה בהעברת המחסנית לזיכרון חיצוני, כדי לאפשר ניהול טוב יותר של שגרות מבוססות מחסנית וטיפול בפסיקות.

פג'ין, שימה וסטנלי מזור החליטו להקצות שימוש ייחודי לכל זוג אוגרים, בהשראת שיטות תכנות ממערכות מיינפריים. הדבר אִפשר גם שימוש יעיל יותר בטרנזיסטורים.[8]

שימה השלים את תכנון השבב באוגוסט 1973, וייצורו החל בדצמבר.[6] אב־טיפוס הושלם בינואר 1974, אך סבל מבעיות אלקטרוניות – הפעלה באמצעות התקני TTL סטנדרטיים העלתה את מתח הקרקע, משום שזרם גבוה זרם דרך מוליך צר. אינטל כבר ייצרה 40,000 יחידות כשהבעיה התגלתה. לאחר תיקון התקלות, הוצג השבב רשמית במרץ 1974.[6] גרסת 8080A הוצגה זמן קצר לאחר מכן, וגם בה התקלה תוקנה.[9]

אינטל סיפקה סימולטור בשם INTERP/80 להרצת תוכניות PL/M (אנ') על ה־8080, אותו כתב גארי קילדל בפורטרן IV.[10][11] קיים פטנט אחד בלבד על ה־8080 שרשום על שם פג'ין, שימה ומזור.

מודל תכנות

[עריכת קוד מקור | עריכה]
דיאגרמת בלוקים של אינטל 8080
אוגרים באינטל 8080
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 (מקום סיביות)
אוגרים ראשיים
Flags A מילת מצב התוכנית (PSW)
C B B
E D D
L H H (כתובת עקיפה)
אוגרי אינדקס
SP מצביע המחסנית
מונה התוכנית
PC מונה התוכנית
אוגר הדגלים
C 1 P 0 AC 0 Z S דגלים[12]

ה־8080 של אינטל מבוסס על הארכיטקטורה של האינטל 8008, אך אינו תואם לה, לא מבחינת קוד מקור ולא מבחינת קוד בינארי. אף על פי שיש דמיון במבנה האוגרים ובגישה לפקודות, ה־8080 מוסיף שיפורים משמעותיים, כמו מיעון אמיתי של 16 סיביות, המאפשר גישה ל־64 קילו־בייט של זיכרון – לעומת 14 סיביות בלבד ב־8008. בנוסף, הוא מחליף את מחסנית הקריאות הפנימית של 7 רמות ב־8008 במצביע מחסנית (SP) בגודל 16 סיביות שמצביע לזיכרון חיצוני.

ה־8080 מגיע במארז של 40 פינים, דבר שמאפשר אפיק כתובת ברוחב של 16 סיביות ואפיק נתונים ברוחב של 8 סיביות.

למעבד יש שבעה אוגרים כלליים בגודל 8 סיביות: A (הצובר הראשי), B,‏ C,‏ D,‏ E,‏ H ו־L. ניתן להשתמש בהם כאוגרים בודדים, או בזוגות (BC,‏ DE ו־HL) בגודל 16 סיביות. הזוג HL יכול לשמש גם כצובר בגודל 16 סיביות במקרים מסוימים. בנוסף, ישנו אוגר מדומה בשם M, המייצג את התא בזיכרון שאליו מצביע HL, וניתן להשתמש בו ברוב הפקודות.

בנוסף, המעבד כולל מונה תוכנית (PC) בגודל 16 סיביות, ומצביע מחסנית (SP) בגודל 16 סיביות.

למעבד יש אוגר־מצב פנימי שמכיל דגלים המצביעים על תוצאות של פעולות אריתמטיות ולוגיות. הדגלים הם:

  • דגל הסימן (S) – דלוק אם התוצאה שלילית.
  • דגל האפס (Z) – דלוק אם התוצאה היא אפס.
  • דגל הזוגיוּת (P) – דלוק אם מספר הסיביות הדלוקות בתוצאה זוגי.
  • דגל הנֶשֶׂא (C) – דלוק אם הייתה נשיאה בחיבור או השאלה בחיסור.
  • דגל חצי־נֶשֶׂא (AC – Auxiliary Carry) – משמש בחישובי BCD (עשרוני בקידוד בינארי).

הצובר והדגלים יחד נקראים PSW (program status word – מילת מצב התוכנית), וניתן לדחוף אותם למחסנית או לשלוף אותם ממנה.

כמו ברבים ממעבדי ה־8 סיביות האחרים, כל הפקודות מקודדות בבייט יחיד (כולל מספרי אוגרים, אך לא כולל נתונים מיידיים), לצורך פשטות. לחלק מהפקודות יכולים להתלוות בייט אחד או שניים של נתונים, שיכולים להיות נתונים מיידיים, כתובת זיכרון או מספר פורט (port). בדומה למעבדים מתקדמים יותר, ישנן פקודות קריאה וחזרה אוטומטיות (CALL ו־RET, בהתאמה) לקריאות מרובות רמות לתת־שגרות ולחזרה מהן (ניתן אף לבצע אותן באופן מותנה, כמו קפיצות), וכן פקודות לשמירה ולשחזור של כל זוג אוגרים בגודל 16 סיביות במחסנית (PUSH ו־POP, בהתאמה).

עבור תת־שגרות, קיימות שמונה פקודות קריאה בגודל בייט אחד (RST – קיצור של restart), בכתובות קבועות: 00h,‏ 08h,‏ 10h,‏ ..., 38h. פקודות אלה מיועדות להפעלה על ידי חומרה חיצונית כדי לקרוא לשגרת שירות פסיקה מתאימה, אך משמשות לעיתים קרובות גם כקריאות מערכת מהירות. הפקודה הארוכה ביותר מבחינת זמן ריצה היא XTHL, אשר מחליפה בין זוג האוגרים HL לבין הערכים השמורים בכתובת שעליה מצביע המחסנית (SP) מצביע.

פקודות 8 סיביות
[עריכת קוד מקור | עריכה]

כל פעולות ה־8 סיביות עם שני אופרנדים יכולות להתבצע רק על הצובר (אוגר A). האופרנד השני יכול להיות ערך מיידי, אוגר 8 סיביות אחר, או בייט זיכרון שכתובתו נמצאת בזוג האוגרים HL. ניתן לבצע פעולות הוספה והפחתה (על ידי INX ו־DCX, בהתאמה) על כל אוגר 8 סיביות או על בייט זיכרון שכתובתו נמצאת ב־HL. ניתן להעתיק מידע באופן ישיר בין כל שני אוגרים בגודל 8 סיביות, וכן בין כל אוגרי 8 סיביות לבין בייט בזיכרון שכתובתו נמצאת ב־HL. בגלל מבנה הקידוד של הפקודה MOV (שתופסת רבע מהמרחב האפשרי של קודי הפעולות), קיימים קודי פעולה מיותרים שמעתיקים אוגר לתוך עצמו (למשל MOV B,B), אשר כמעט אינם שימושיים, פרט לצורך עיכובים זמניים בפעולת המעבד. עם זאת, הקוד הספציפי שהיה אמור לייצג את הפקודה MOV M,M משמש במקום זאת לקידוד הפקודה HLT, אשר עוצרת את ביצוע כל ההוראות עד לקבלת איפוס חיצוני או פסיקה.

פקודות 16 סיביות
[עריכת קוד מקור | עריכה]

אף על פי שה־8080 הוא מעבד של 8 סיביות בעיקרון, יש לו יכולות מוגבלות לביצוע פעולות על נתוני 16 סיביות. כל אחד משלושת זוגות האוגרים בגודל 16 סיביות (BC,‏ DE או HL — המתוארים במסמכי אינטל כ־B,‏ D ו־H, בהתאמה), או SP, יכולים להיטען בערך מיידי בגודל 16 סיביות (באמצעות פקודת LXI), להגדיל או להפחית את ערכם (באמצעות INX ו־DCX, בהתאמה), או להתווסף ל־HL (באמצעות פקודת DAD). על ידי הוספת HL לעצמו (הכפלה ב־2), ניתן לקבל את אותו אפקט כמו הזזה אריתמטית שמאלית על נתוני 16 סיביות, וזאת באמצעות פקודה אחת. הפקודה היחידה בגודל 16 סיביות שמשפיעה על דגלים היא DAD, אשר מגדירה את דגל הנשא (C), כדי לאפשר חישוב מספרים בגודל 24 או 32 סיביות (או יותר) באמצעות סדרת פקודות, הנדרשת לצורך מימוש אריתמטיקת נקודה צפה.

ניתן להעתיק את BC,‏ DE ו־HL או את PSW למחסנית ולהפך, באמצעות הפקודות PUSH ו־POP. כדי להקצות מסגרת מחסנית, ניתן להוסיף היסט ל־SP באמצעות הפקודה DAD, ולאחר מכן לעדכן את SP לערך החדש באמצעות הפקודה SPHL. קפיצה לכתובת מחושבת מתבצעת על ידי הפקודה PCHL. הפקודה LHLD טוענת נתונים ל־HL מזיכרון בכתובת ישירה, ו־SHLD שומרת את HL בזיכרון באותו אופן. הפקודה XCHG[13] מחליפה בין הערכים של זוגות האוגרים HL ו־DE. הפקודה XTHL מחליפה בין HL לבין הערך האחרון שנדחף למחסנית. אף אחת מהפקודות הללו לא נתמכה במעבד הקודם אינטל 8008.

קוד פעולה אופרנדים שם מחזורי שעון תיאור
0 1 2 3 4 5 6 7 b2 b3
0 0 0 0 0 0 0 0 NOP 4 פקודת סרק (המעבד לא עושה כלום)
1 0 0 0 RP 0 0 datlo dathi LXI rp,data 10 RP ← data
1 0 0 0 RP 0 0 STAX rp 7
(RP[14]) ← A
1 0 0 0 RP 0 0 INX rp 5 RP ← RP + 1
0 0 1 DDD 0 0 INR ddd 5/10 DDD ← DDD + 1
1 0 1 DDD 0 0 DCR ddd 5/10 DDD ← DDD - 1
0 1 1 DDD 0 0 data MVI ddd,data 7/10 DDD ← data
1 0 0 1 RP 0 0 DAD rp 10 HL ← HL + RP
0 1 0 1 RP 0 0 LDAX rp 7
A ← (RP[14])
1 1 0 1 RP 0 0 DCX rp 5 RP ← RP - 1
1 1 1 0 0 0 0 0 RLC 4 A1-7 ← A0-6; A0 ← Cy ← A7
1 1 1 1 0 0 0 0 RRC 4 A0-6 ← A1-7; A7 ← Cy ← A0
1 1 1 0 1 0 0 0 RAL 4 A1-7 ← A0-6; Cy ← A7; A0 ← Cy
1 1 1 1 1 0 0 0 RAR 4 A0-6 ← A1-7; Cy ← A0; A7 ← Cy
0 1 0 0 0 1 0 0 addrlo addrhi SHLD addr 16
(addr) ← HL
1 1 1 0 0 1 0 0 DAA 4 אם A0-3 > 9 או AC = 1 אז A ← A + 6;

אז אם A4-7 > 9 או Cy = 1 אז A ← A + 0x60

0 1 0 1 0 1 0 0 addrlo addrhi LHLD addr 16 HL ← (addr)
1 1 1 1 0 1 0 0 CMA 4 A ← ¬A
0 1 0 0 1 1 0 0 addrlo addrhi STA addr 13
(addr) ← A
1 1 1 0 1 1 0 0 STC 4 Cy ← 1
0 1 0 1 1 1 0 0 addrlo addrhi LDA addr 13 A ← (addr)
1 1 1 1 1 1 0 0 CMC 4 Cy ← ¬Cy
SSS DDD 1 0 MOV ddd,sss 5/7 DDD ← SSS
0 1 1 0 1 1 1 0 HLT 7 השהיית פעולת המעבד
SSS ALU 0 1 ADD ADC SUB SBB ANA XRA ORA CMP sss 4/7 A ← A [ALU] SSS
0 0 0 CC 1 1 Rcc (פקודת RET מותנית) 5/11 אם התנאי cc מתקיים, PC ← (SP),‏ SP ← SP + 2
1 0 0 0 RP 1 1 POP rp 10 RP ← (SP),‏ SP ← SP + 2
0 1 0 CC 1 1 addrlo addrhi Jcc addr (פקודת JMP מותנית) 10 אם התנאי cc מתקיים, PC ← addr
1 1 0 0 0 0 1 1 addrlo addrhi JMP addr 10 PC ← addr
0 0 1 CC 1 1 addrlo addrhi Ccc addr (פקודת CALL מותנית) 11/17 אם התנאי cc מתקיים, SP ← SP - 2,‏ (SP) ← PC,‏ PC ← addr
1 0 1 0 RP 1 1 PUSH rp 11 SP ← SP - 2,‏ (SP) ← RP
0 1 1 ALU 1 1 data ADI ACI SUI SBI ANI XRI ORI CPI data 7 A ← A [ALU] data
1 1 1 N 1 1 RST n 11 SP ← SP - 2,‏ (SP) ← PC,‏ PC ← N × 8
1 0 0 1 0 0 1 1 RET 10 PC ← (SP),‏ SP ← SP + 2
1 0 1 1 0 0 1 1 addrlo addrhi CALL addr 17 SP ← SP - 2,‏ (SP) ← PC,‏ PC ← addr
1 1 0 0 1 0 1 1 port OUT port 10 Port ← A
1 1 0 1 1 0 1 1 port IN port 10 A ← Port
1 1 0 0 0 1 1 1 XTHL 18 HL ↔ (SP)
1 0 0 1 0 1 1 1 PCHL 5 PC ← HL
1 1 0 1 0 1 1 1 XCHG 4 HL ↔ DE
1 1 0 0 1 1 1 1 DI 4 השבתת פסיקות
1 0 0 1 1 1 1 1 SPHL 5 SP ← HL
1 1 0 1 1 1 1 1 EI 4 אִפשור פסיקות
0 1 2 3 4 5 6 7 b2 b3 שם מחזורי שעון תיאור
מקרא:
  • SSS – אוגר מוצא
  • DDD – אוגר יעד
  • CC – תנאי
  • ALU – אחת מפעולות ה־ALU
  • RP – זוג אוגרים
  • NZ – דגל האפס כבוי
  • Z – דגל האפס דלוק
  • NC – דגל הנשא כבוי
  • C – דגל הנשא דלוק
  • PO – דגל הזוגיות כבוי
  • PE – דגל הזוגיות דלוק
  • P – דגל הסימן כבוי
  • N – דגל הסימן דלוק
קידוד לאוגרים, פקודות ALU, קודי תנאי וזוגות אוגרים בארכיטקטורת אינטל 8080
0 1 1 SSS DDD CC ALU RP
0 0 0 B NZ ADD ADI (A ← A + arg) BC
1 0 0 C Z ADC ACI (A ← A + arg + Cy) DE
0 1 0 D NC SUB SUI (A ← A - arg) HL
1 1 0 E C SBB SBI (A ← A - arg - Cy) SP או PSW
0 0 1 H PO ANA ANI (A ← A ∧ arg)
1 0 1 L PE XRA XRI (A ← A ⊻ arg)
0 1 1 M P ORA ORI (A ← A ∨ arg)
1 1 1 A N CMP CPI (A - arg)
0 1 2 SSS DDD CC ALU

מערכת קלט/פלט

[עריכת קוד מקור | עריכה]
מרחב פורטי קלט/פלט
[עריכת קוד מקור | עריכה]

ה־8080 תומך ב־256 פורטי קלט/פלט נפרדים,[15] הנגישים דרך הפקודות הייעודיות IN ו־OUT שבהן כתובת הפורט ניתנת כאופרנד.[16] יתרון שיטה זו הוא שהיא מפרידה בין תקשורת עם התקני חיצוניים לבין גישה לזיכרון, ושומרת את כל מרחב הכתובות המוגבל של המעבד – 64 קילו־בייט – עבור זכרונות ה־RAM וה־ROM.

בשונה ממערכות המשתמשות ב־I/O ממופה זיכרון (Memory-Mapped I/O), שבהן נעשה שימוש באותו מרחב כתובות הן עבור זכרונות ה־RAM וה־ROM והן עבור התקני הקלט/פלט, ה־8080 מונע התנגשות באמצעות מרחב נפרד, מה שמקל על תכנון חומרה. חיסרון שיטה זאת הוא שלעיתים יש צורך בחומרה מיוחדת שתוסיף מצבי המתנה (wait states), מאחר שהתקני קלט/פלט לרוב איטיים יותר מהזיכרון.

על אף שיש ל־8080 פקודות ייעודייות ל־I/O, בחלק ממחשבי ה־8080 הפשוטים, התקני הקלט/פלט כן ממופים כזיכרון, כלומר מטופלים כאילו היו תאי זיכרון רגילים, ופקודות הקלט/פלט הייעודיות אינן בשימוש.

במהלך פקודות I/O, המעבד מציב את כתובת הפורט (8 סיביות) הן על הבייט הגבוה והן על הבייט הנמוך של אפיק הכתובת (למשל, IN 05h תגרום להצבת הכתובת 0505h), ותכונה זו משמשת לעיתים בתכנון חומרה.

גישה זו נפוצה גם במעבדים בעלי תאימות לאחור ל־8080, כגון אינטל 8085 (אנ'), זילוג Z80 וארכיטקטורת x86.

מרחב מחסנית נפרד
[עריכת קוד מקור | עריכה]

אחת מסיביות המצב (ראו להלן) של ה־8080 מציינת האם מתבצעת גישה לנתונים מהמחסנית. הדבר מאפשר למערכות לתכנן מרחב זיכרון נפרד לחלוטין עבור המחסנית. עם זאת, תכונה זו כמעט ואינה מנוצלת בפועל.

בתחילת כל מחזור מכונה, ה־8080 מוציא דרך אפיק הנתונים בייט מצב בגודל 8 סיביות. בייט זה מציין אם מדובר בגישה לזיכרון או להתקן קלט/פלט, ואם הפעולה הנוכחית שייכת לטיפול בפסיקה.

בנוסף, מצב מערכת הפסיקות (פסיקות מאופשרות או מושבתות) מועבר דרך פין ייעודי (INTA). במערכות פשוטות שלא משתמשות בפסיקות, נעשה לעיתים שימוש בפין זה כפלט כללי – לדוגמה, במחשב הסובייטי Radio-86RK.

על מנת לגרום לפסיקה, התקן חומרה חיצוני מפעיל את הפין INT של המעבד; בתגובה, כאשר מתחיל מחזור הפקודה הבא, המעבד נכנס למצב INTA (Interrupt Acknowledge – אישור פסיקה), ובשלב זה ההתקן החיצוני מציב פקודה (בדרך כלל RST או CALL) על אפיק הנתונים.

ניתן לאפשר פסיקות עם הפקודה EI ולהשבית אותן עם הפקודה DI. לאחר קבלת הפסיקה, פסיקות נוספות מושבתות אוטומטית, ויש להפעילן מחדש מתוך שגרת הטיפול בפסיקה. המעבד אינו תומך בפסיקות בלתי ניתנות למיסוך (NMI), כלומר פסיקות שהמעבד לא יכול להתעלם מהן.

דוגמה לקוד

[עריכת קוד מקור | עריכה]

הקוד הבא בשפת אסמבלי עבור המעבדים 8080/8085 מגדיר תת-שגרה בשם memcpy, שתפקידה להעתיק בלוק של בייטים מנקודה אחת בזיכרון לנקודה אחרת. ההעתקה מתבצעת בייט אחר בייט, תוך שימוש בפעולות של 16 סיביות לצורך ניהול ההעברה והלולאה.












1000
1000
1000 78
1001 B1
1002 C8
1003 1A
1004 77
1005 13
1006 23
1007 0B
1008 78
1009 B1
100A C2 03 10
100D C9
; memcpy --
; Copy a block of memory from one location to another.
;
; Entry registers
; BC - Number of bytes to copy
; DE - Address of source data block
; HL - Address of target data block
;
; Return registers
; BC - Zero

 org 1000h ;Origin at 1000h
memcpy public
 mov a,b ;Copy register B to register A
 ora c ;Bitwise OR of A and C into register A
 rz ;Return if the zero-flag is set high.
loop: ldax d ;Load A from the address pointed by DE
 mov m,a ;Store A into the address pointed by HL
 inx d ;Increment DE
 inx h ;Increment HL
 dcx b ;Decrement BC (does not affect Flags)
 mov a,b ;Copy B to A (so as to compare BC with zero)
 ora c ;A = A | C (are both B and C zero?)
 jnz loop ;Jump to 'loop:' if the zero-flag is not set.
 ret ;Return

שימוש בפינים

[עריכת קוד מקור | עריכה]
סידור הפינים של ה־8080

ה־8080 כולל אפיק כתובת (16 פינים) ואפיק נתונים (8 פינים) נפרדים, ללא צורך בריבוב, כלומר כל הסיביות של הנתונים (8 סיביות) ושל הכתובת (16 סיביות) נמצאות בו זמנית על האפיקים. בעזרת פיני קריאה (DBIN) וכתיבה (WR), ניתן לבנות מערכות פשוטות ללא לוגיקה מורכבת. חומרה נוספת נדרשת רק לתכונות כמו מרחב I/O נפרד, פסיקות או DMA.

עם זאת, יש להגביל את מספר ההתקנים המחוברים לפינים עקב עומס חשמלי, ואפילו מערכות פשוטות נזקקות לעיתים למגברי אפיק (bus amplifier).

המעבד דורש שלושה מקורות מתח: -5V,‏ +5V ו־+12V, וכן שני אותות שעון בעלי משרעות גדולות, ושאינם חופפים. הגרסה הסובייטית של ה־8080 (КР580ВМ80А) פעלה באמצעות מתח של +5V בלבד, כאשר פין +12V מחובר ל־+5V ופין -5V לאדמה.

טבלת הפינים, מהתיעוד הנלווה לשבב, מתארת את הפינים כדלקמן:

מספר פין אות סוג הערה
1 A10 פלט סיבית 10 של אפיק הכתובת
2 GND אדמה
3 D4 דו־כיווני

אפיק נתונים דו-כיווני. המעבד גם משדר את "מצב המעבד" כאשר SYNC וגם φ1 דלוקים, ומספק מידע על פעולת המעבד כרגע:

  • D0‏ (INTA) – המעבד קורא פקודת פסיקה. בתגובה לאות פסיקה, המעבד קורא ומבצע פקודה בודדת שרירותית ומניף דגל זה. בדרך כלל, שבבים נלווים מספקים את פקודת הקריאה לתת-שגרה (RST או CALL), שמעבירה את המעבד לקוד הטיפול בפסיקה.
  • D1‏ (WO) המעבד כותב לזיכרון או לפורט. פעיל נמוך.
  • D2‏ (STACK) – המעבד ניגש למחסנית.
  • D3‏ (HLTA) – המעבד לא עושה כלום משום שהוא נעצר על ידי פקודת HLT.
  • D4‏ (OUT) – המעבד כותב נתונים לפורט.
  • D5‏ (M₁) – המעבד קורא את הבייט הראשון של פקודה.
  • D6‏ (INP) – המעבד קורא נתונים מפורט.
  • D7‏ (MEMR) – המעבד קורא נתונים מהזיכרון.
4 D5
5 D6
6 D7
7 D3
8 D2
9 D1
10 D0
11 -5 V ספק כוח של -5 וולט. זהו מקור הכוח שצריך להתחבר ראשון ולהתנתק אחרון, אחרת המעבד עלול להינזק.
12 RESET קלט אתחול – אות פעיל נמוך שמאלץ את המעבד לעבור לביצוע פקודות מהכתובת 0000h. תוכן האוגרים האחרים של המעבד אינו משתנה.
13 HOLD קלט בקשת גישה ישירה לזיכרון. המעבד מתבקש להעביר את אפיק הנתונים ואת אפיק הכתובת למצב עכבה גבוהה (האפיק "מנותק").
14 INT קלט בקשת פסיקה
15 φ2 קלט הפאזה השנייה של אות מחולל השעון (clock generator).
16 INTE פלט מאפשר פסיקות – הפין נועד לשליטה בפסיקות, אך במחשבים פשוטים שימש לעיתים כפלט של סיבית בודדת למטרות שונות. למעבד יש שתי פקודות, DI ו־EI, שמגדירות אם פין זה מוציא 0 או 1, בהתאמה.
17 DBIN פלט קריאה – המעבד קורא מהזיכרון או מפורט.
18 WR פלט קריאה – המעבד קורא מהזיכרון או מפורט. פעיל נמוך.
19 SYNC פלט פעיל גבוה. מצביע על כך שהמעבד הציב את "מילת המצב" על אפיק הנתונים. הסיביות השונות של מילה זו מספקות מידע נוסף עבור תמיכה בזיכרון ובכתובות נפרדים, פסיקות וגישה ישירה לזיכרון. יש להעביר אות זה דרך לוגיקה נוספת (לדוגמה, 8238 – בקר מערכת ומנהל אפיק) כדי שיהיה ניתן לכתוב את מילת המצב של המעבד לאוגר חיצוני.
20 +5 V ספק כוח של +5 וולט
21 HLDA פלט אישור גישה ישירה לזיכרון. המעבד מעביר את פיני הנתונים והכתובת למצב עכבה גבוהה, ומאפשר להתקן אחר לשלוט באפיק.
22 φ1 קלט הפאזה הראשונה של אות מחולל השעון (clock generator).
23 READY קלט המתן. באמצעות האות הזה ניתן להשעות את פעולת המעבד. משמש גם למצב ניפוי שגיאות שלב אחר שלב מבוסס חומרה.
24 WAIT פלט המתנה – מורה על כך שהמעבד במצב המתנה.
25 A0 פלט אפיק הכתובת
26 A1
27 A2
28 12 V ספק כוח של +12 וולט. זהו מקור המתח שצריך להתחבר אחרון ולהתנתק ראשון.
29 A3 פלט אפיק הכתובת; ניתן להעביר אותו למצב עכבה גבוהה על פי הנדרש.
30 A4
31 A5
32 A6
33 A7
34 A8
35 A9
36 A15
37 A12
38 A13
39 A14
40 A11

שבבים מסייעים

[עריכת קוד מקור | עריכה]

אחד הגורמים המרכזיים להצלחת ה־8080 היה מגוון רחב של שבבים מסייעים זמינים. שבבים אלו סיפקו פונקציות כמו תקשורת טורית, מונים ותזמון, קלט/פלט, גישה ישירה לזיכרון (DMA), ובקרת פסיקות מיתכנתת, בין היתר:

  • 8214 – יחידת בקרת פסיקות לפי עדיפות[17]
  • 8224 – יוצר אות שעון
  • 8228/8238 – בקר מערכת ומגבר אפיק
  • 8251 – בקר תקשורת
  • 8253 – טיימר עם מרווח מיתכנת
  • 8255 – ממשק התקנים היקפיים מיתכנת
  • 8257 – בקר DMA
  • 8259 – בקרת פסיקות מיתכנתת

מימוש פיזי

[עריכת קוד מקור | עריכה]

מעבד 8080 נבנה בטכנולוגיית NMOS, תוך שימוש בטרנזיסטורי מצב שיפור (enhancement mode) לא רוויים בתור עומסים.[18][19] התכנון דרש רמות מתח נוספות (+12 וולט ו־−5 וולט), בנוסף למתח הסטנדרטי של +5 וולט התואם ל־TTL.

המעבד יוצר בתהליך שערי סיליקון (אנ') עם גודל מינימלי של 6 מיקרומטרים. שכבת מתכת אחת שימשה לחיבור בין כ־4,500 הטרנזיסטורים בתכנון.[20] עבור חיבורים מסוימים שדרשו מתח גבוה יותר, נעשה שימוש בשכבת פוליסיליקון (אנ') בעלת התנגדות גבוהה יותר. גודל השבב כולו היה כ־20 מ"מ רבוע.

השפעה מסחרית

[עריכת קוד מקור | עריכה]

שימושים ויורשים

[עריכת קוד מקור | עריכה]

אינטל 8080 היה מהמעבדים המרכזיים בגל הראשון של המחשבים האישיים. הוא שימש במחשבים מוקדמים כמו Altair 8800,‏ SOL-20 ו־IMSAI 8080, שרובם הריצו את מערכת ההפעלה CP/M. השפעתו הייתה נרחבת גם בתעשייה — בין אם בשימוש במערכות אוטומטיות לתשלום בתחבורה ציבורית או בעיבוד נתונים למיקרופיש. במקביל, נעשה בו שימוש גם במחשבים חד-לוחיים ובתחום הגרפי, שם שימש בסיס למערכות הדפסה ועיבוד סרטים.

אינטל 8080 היה הבסיס למשחקי ארקייד מוקדמים, בהם המשחקים Gun Fight של Midway[21][22][23][24] ו־Space Invaders (פולשים מהחלל) של טאיטו משנת 1978 — שנחשב לאחד ממשחקי הווידאו החשובים והמצליחים בהיסטוריה.[25][26] ה־Z80 של זילוג, שהיווה שדרוג ל־8080 ותמך באותן פקודות אסמבלי, הפך לדומיננטי בשוק לצד CP/M בין השנים 1976 ל־1983, בדומה לשילוב של x86 ו־DOS בעשור שלאחר מכן. למרות הופעת דגמים חדשים, המעבד 8080 המשיך להימכר בהיקפים גבוהים גם בסוף שנות השבעים.

בהמשך, אינטל פיתחה את ה־8085 כגרסה פשוטה יותר מבחינה חשמלית של ה־8080, ולאחר מכן את אינטל 8086, שתאם לאסמבלי של קודמו אך ללא תאימות בינארית. אחריו יצא גם ה־8088, בעל ארכיטקטורת 8/16 סיביות, שנבחר על ידי IBM למחשב האישי שהושק בשנת 1981. חברת NEC פיתחה את ה־V20 — גרסה תואמת ל־8088 שתמכה גם בקבוצת הפקודות של אינטל 80186 וכללה מצב אמולציה של 8080, שאִפשר להריץ קוד שנכתב עבורו. גם ה־V30, גרסה משופרת של 8086, תמך בכך. בדרך זו, ארכיטקטורת הפקודות (ISA) של ה־8080 המשיכה להשפיע עמוקות על התפתחות עולם המחשוב.

שינוי בתעשייה

[עריכת קוד מקור | עריכה]

ה־8080 שינה באופן משמעותי את הדרך שבה נבנו מחשבים. לפני כן, מערכות מחשב שלמות היו נבנות בדרך כלל על ידי יצרניות גדולות כמו DEC,‏ HP ו־IBM. חברות אלו תכננו וייצרו את כל מרכיבי המערכת, כולל המעבד, המסופים, והתוכנה המערכתית (כגון מערכת הפעלה ומהדרים).

ה־8080 לעומת זאת, לא נועד לשמש כמערכת מחשב שלמה, אלא תוכנן להתאים למגוון רחב של יישומים. דוגמה לכך היא HP, שפיתחה את סדרת המסופים החכמים HP 2640 בהתבסס על 8080. דגם HP 2647 מהסדרה הריץ את שפת התכנות BASIC ישירות על גבי ה־8080. המוצר המסחרי הראשון של מיקרוסופט, Microsoft BASIC, נכתב במקור עבור ה־8080.

ה־8080 וה־8085 שהגיע אחריו הובילו לפיתוחו של המעבד אינטל 8086. אמנם לא הייתה ביניהם תאימות בינארית, אך ה־8086 תוכנן כך שיהיה תואם ברמת קוד המקור ל־8080.[27] תכנון זה היה הבסיס לסדרת המעבדים x86, שנותרה עד היום הארכיטקטורה המרכזית של אינטל.

חלק מהוראות המכונה הבסיסיות ומהרעיונות התכנוניים של ה־8080 ממשיכים להתקיים בארכיטקטורת x86. ביניהם ניתן למצוא את אוגרים A,‏ B,‏ C ו־D, וכן דגלים שמובילים לקפיצות מותנות (conditional jumps). ניתן אף לתרגם קוד אסמבלי של 8080 ישירות לפקודות x86, משום שרוב האלמנטים המרכזיים נותרו בעינם.

פטנט אמריקאי

[עריכת קוד מקור | עריכה]

הפטנט האמריקאי מספר 4010449, שהונפק ב־1 במרץ 1977 על שם פדריקו פג'ין, מסטושי שימה וסטנלי מזור, נקרא MOS computer employing a plurality of separate chips (מחשב MOS המשתמש במספר שבבים נפרדים). הפטנט כולל שלוש תביעות עיקריות; שתי התביעות הראשונות עוסקות במילת המצב (status word) המועברת בריבוב על גבי אפיק הנתונים. התביעה השלישית עוסקת בפקודת RST 7, שניתן להפעיל אותה פשוט על ידי העלאת רמת המתח באפיק הנתונים, כלומר הפיכת כל הסיביות באפיק הנתונים ל־1 (FFh). לשם השוואה, במעבד ה־8008 הישן, נדרש לכך מעגל בילול (jamming) מסובך יותר כדי לבצע את אותה הפעולה.

השפעה תרבותית

[עריכת קוד מקור | עריכה]
  • האסטרואיד 8080 אינטל נקרא כך כמשחק מילים, כהוקרה לתרומתה של אינטל ושל המעבד 8080 למהפכת המחשב האישי, שהשפיעה גם על תחום האסטרונומיה.
  • מספר הטלפון שפרסמה מיקרוסופט – 425-882-8080 – נבחר במכוון, כהוקרה למעבד 8080 שהיה חלק חשוב בעבודתה המוקדמת.[28]
  • גם מספרי טלפון ראשיים נוספים של אינטל כוללים לעיתים קרובות את הספרות 8080 באותו סגנון.

לקריאה נוספת

[עריכת קוד מקור | עריכה]
  • Leventhal, Lance (1978). 8080A/8085 Assembly Language Programming (1st ed.). Adam Osborne & Associates.(הקישור אינו פעיל); 495 pages
  • Miller, Alan (1981). 8080/Z80 Assembly Language – Techniques for Improved Programming (1st ed.). John Wiley & Sons. ISBN 978-0471081241.; 332 pages
  • Zaks, Rodnay; Lesea, Austin (1979). Microprocessor Interfacing Techniques (3rd ed.). Sybex. ISBN 978-0-89588-029-1.; 466 pages
  • Spracklen, Kathe (1979). Z80 and 8080 Assembly Language Programming (1st ed.). Hayden. ISBN 978-0810451674.; 180 pages

קישורים חיצוניים

[עריכת קוד מקור | עריכה]
ויקישיתוף מדיה וקבצים בנושא אינטל 8080 בוויקישיתוף

הערות שוליים

[עריכת קוד מקור | עריכה]
  1. ^ Lewnes, Ann, "The Intel386 Architecture Here to Stay", Intel Corporation, Microcomputer Solutions, July/August 1989, page 2
  2. ^ "From CPU to software, the 8080 Microcomputer is here". Electronic News. New York: Fairchild Publications. 15 באפריל 1974. pp. 44–45. {{cite news}}: (עזרה) Electronic News was a weekly trade newspaper. The same advertisement appeared in the May 2, 1974, issue of Electronics magazine.
  3. ^ ה-8008 (1972) שימש לאינטרפולציה ובקרה בקו הרובוטים התעשייתיים הכלליים הראשון של ASEA (כיום ABB (אנ')), שהוצג באוקטובר 1973.
  4. ^ Mazor, Stanley (ביוני 1978). "The Intel 8086 Microprocessor: a 16-bit Evolution of the 8080". IEEE Computer. 11 (6): 18–27. doi:10.1109/C-M.1978.218219. S2CID 16962774. ארכיון מ-19 בספטמבר 2021. {{cite journal}}: (עזרה)
  5. ^ "8080A/8080A-1/8080A-2 8-Bit N Channel Microprocessor" (PDF). Intel. ארכיון (PDF) מ-15 בנובמבר 2021. {{cite web}}: (עזרה)
  6. ^ 1 2 3 4 5 Miller, Michael. "Creating the 8080: The Processor That Started the PC Revolution". PCMag. Zaff Davis. ארכיון מ-14 בנובמבר 2021. {{cite web}}: (עזרה)
  7. ^ Faggin, Federico. "8008 and 8080 Q&A". Microprocessor Intel 4004. ארכיון מ-15 בנובמבר 2021. {{cite web}}: (עזרה)
  8. ^ Mazor, Stanley (באפריל–ביוני 2007). "Intel 8080 CPU Chip Development". IEEE Annals of the History of Computing. 29 (2): 70–73. doi:10.1109/MAHC.2007.25. S2CID 14755544. {{cite journal}}: (עזרה)
  9. ^ Shima, Masatoshi; Nishimura, Hirohiko; Ishida, Haruhisa (1979). "座談会 マイクロコンピュータの誕生 開発者 嶋 正利氏に聞く". Bit (ביפנית). 共立出版. 11 (11): 4–12. ISSN 0385-6984.
  10. ^ Kildall, Gary Arlen (1974-06-27). "High-level language simplifies microcomputer programming" (PDF). Electronics. McGraw-Hill Education: 103–109 [108]. ארכיון (PDF) מ-2021-11-14.
  11. ^ "8080 Simulator INTERP/80" (PDF). Microcomputer Software. Intel Corporation. במרץ 1975. Product Code 98-119A. MCS-516-0375/27.5K. ארכיון (PDF) מ-2023-11-25. {{cite web}}: (עזרה) (2 pages)
  12. ^ 8080 Assembly Language Programming Manual (PDF) (Rev B ed.). Intel. 1975. p. 22. {{cite book}}: (עזרה)
  13. ^ 8080 instruction encoding (אורכב 05.03.2018 בארכיון Wayback Machine). ClassicCMP.org. Retrieved on October 23, 2011.
  14. ^ 1 2 BC או DE בלבד
  15. ^ בחלק מגיליונות הנתונים של אינטל משנות ה-70 נכתב שיש 512 יציאות קלט/פלט, מכיוון שהם מתייחסים ליציאות קלט ופלט בנפרד.
  16. ^ HAYES, JOHN P. (1978). Computer Architecture and Organization. McGraw-Hill. pp. 420–423. ISBN 0-07-027363-4.
  17. ^ Intel Corporation, "8214 Priorty Interrupt Control Unit", Intel 8080 Microcomputer Systems User's Manual, September 1975, page 5-153 (אורכב 28.05.2024 בארכיון Wayback Machine) from bitsaver.org in PDF
  18. ^ similar to pull-up resistors
  19. ^ Tohya, Hirokazu (2013). Switching Mode Circuit Analysis and Design: Innovative Methodology by Novel Solitary Electromagnetic Wave Theory (באנגלית). Bentham Science Publishers. p. 4. ISBN 9781608054497. ארכיון מ-15 בנובמבר 2021. {{cite book}}: (עזרה)
  20. ^ "Intel Chips timeline" (PDF). Intel. Intel Corporation. ארכיון (PDF) מ-14 בנובמבר 2021. {{cite web}}: (עזרה)
  21. ^ "What was the first arcade game to use a microprocessor instead of discrete logic?". ארכיון מ-11 באפריל 2023. {{cite web}}: (עזרה)
  22. ^ Steve L. Kent (2001), The ultimate history of video games: from Pong to Pokémon and beyond : the story behind the craze that touched our lives and changed the world, p. 64, Prima, ISBN 0-7615-3643-4
  23. ^ Akagi, Masumi (13 באוקטובר 2006). アーケードTVゲームリスト国内•海外編(1971–2005) [Arcade TV Game List: Domestic • Overseas Edition (1971–2005)] (ביפנית). Japan: Amusement News Agency. p. 124. ISBN 978-4990251215. {{cite book}}: (עזרה)
  24. ^ "Dave Needle and Jerry Lawson - Two Early Independent Video Game Designers". 29 ביולי 2013. ארכיון מ-11 באפריל 2023. {{cite web}}: (עזרה)
  25. ^ "Space Invaders Videogame by Bally Midway (1978)". Killer List of Videogames. ארכיון מ-25 בנובמבר 2010. {{cite web}}: (עזרה)
  26. ^ Edwards, Benj. "Ten Things Everyone Should Know About Space Invaders". 1UP.com. אורכב מ-המקור ב-26 בפברואר 2009. {{cite web}}: (עזרה)
  27. ^ Morse, Stephen; Ravenel, Bruce; Mazor, Stanley; Pohlman, William (באוקטובר 1980). "Intel Microprocessors: 8008 to 8086" (PDF). IEEE Computer. 13 (10): 42–60. doi:10.1109/MC.1980.1653375. S2CID 206445851. ארכיון (PDF) מ-14 בספטמבר 2021. {{cite journal}}: (עזרה)
  28. ^ "(8080) Intel = 1958 QC = 1987 WU2 = 1989 AS5". Minor Planet Center. International Astronomical Union. ארכיון מ-25 בספטמבר 2019. {{cite web}}: (עזרה)