בשנת 1984 הוצגה בתערוכת CES הדגמת יכולת בשם Boing, שהביאה לעולם את מחשבי האמיגה והפכה לאחד ה"דמואים" הקלאסיים, המוכרים והחשובים בעולם המחשבים. התעלמו מכל מה שקשור למערכת ההפעלה הגרפית שמוצגת בסרטון – היא לא היתה חלק מההדגמה המקורית – והתרכזו בכדור הקופץ:
בשנת 1984, הכדור הזה היה פלא שפוצץ לאנשים את השכל. למען האמת, גם כיום – כשהמעבדים מהירים והזכרונות גדולים בשלושה סדרי גודל לערך מאלה של האמיגה – מי שינסה לתכנת הדגמה כזו בגישה נאיבית (וללא כלי עזר מתקדמים כמו OpenGL) יגלה שזו משימה קשה להפתיע. אז איך הצליחו לעשות זאת לפני כמעט שלושים שנה, ומה הרלוונטיות של הסיפור העתיק הזה לימינו?
לאחרונה התחלתי לקרוא ספר בשם "The Future Was Here", שמתאר את ההיסטוריה והחשיבות של מחשב האמיגה המיתולוגי, תוך התייחסות מבורכת לפרטים הטכניים שלו. הפרק השני של הספר מוקדש כולו ל-Boing, והוא מתאר כיצד בדיוק בוצע הפלא. בתוכנת ההדגמה הזו, כך מסתבר, אין שום דבר שמחושב בזמן אמת: הכדור, הצל והרקע חושבו וצוירו פעם אחת ויחידה בזכרון המחשב, בתחילת ההרצה, וכל השאר הושג על ידי הזזה ושינוי של בייטים ספורים בכל פעם – כולל הסיבוב-לכאורה של הכדור סביב צירו!
אשליית הסיבוב
כדי להבין איך זה ייתכן, צריך להבין קודם כל את אופן הפעולה של תצוגת האמיגה. החומרה שמנהלת את ההצגה הפיזית של הפיקסלים על גבי המסך עובדת לפי שני מקורות מידע: 1) מעין מלבן וירטואלי של פיקסלים בזיכרון המחשב, כאשר כל פיקסל כזה הוא בעצם קוד מספרי, ו-2) טבלה להמרה של הקודים המספריים לצבעים בפועל. הקשר בין ערך הפיקסל לבין הצבע שלו לא היה קבוע וברור כמו במערכות המודרניות, בהן הוא מחולק לרכיבי אדום-ירוק-כחול, אלא שרירותי: הקוד 160, לדוגמה, יכול לסמל לבן, שחור, ורוד, כחול או כל דבר אחר. יותר מזה, התצוגה השתמשה כברירת מחדל בטבלת המרה מסוימת, אך המתכנת יכול היה להגדיר בעצמו ובכל שלב את הצבע שמשויך לכל קוד.
המשמעות היא שאם המתכנת היה ממלא את המלבן הווירטואלי של הפיקסלים בערכי 160, המסך היה נצבע כולו בלבן (לצורך העניין); לאחר מכן, מספיק לשנות את הערך המתאים בטבלת ההמרה לשחור – פעולה אחת ויחידה – כדי שכל פיקסל ופיקסל על המסך יהפוך פתאום לשחור! ויזואלית, הדבר בוצע ב-1/50 של שניה, מכיוון שקצב הרענון של מסך האמיגה היה 50 הרץ, ודרש כמעט אפס מאמץ מהמעבד הראשי.
כעת, ניקח שמונה פיקסלים בשורה, ניתן להם את הערכים העוקבים 1 עד 8, ונגדיר ש-1 הוא שחור וכל הקודים האחרים, 2-8, הם לבן. כעבור רגע נגדיר את 2 כשחור ואת 1 כלבן, כעבור עוד רגע 3 יהיה השחור ו-2 יחזור להיות לבן, וכן הלאה. אם נבצע את זה מספיק מהר, תיווצר אשליית תנועה: כאילו נקודה שחורה זזה לאורך שורת הפיקסלים. אבל כמובן, זו לא חייבת להיות נקודה – אפשר לצייר קו, מלבן ועוד. הסתכלו למשל בתשומת לב על מה שקורה ל"שמיים" ברקע כאשר השחקן מתקדם במעלה עולם המשחק הזה, החל מ-1:20:
אם תסתכלו שוב על הסרטון של Boing למעלה (בסביבות 0:07), תראו שעם הפעלת התוכנית, הכדור מופיע לשניה אחת כשהוא עשוי מפסים צבעוניים דקים, במקום מלבני האדום-לבן שמוצגים בהמשך. הפסים האלה מקבילים לשמונת הפיקסלים שדיברתי עליהם קודם: כל מלבן בעיגול הורכב ממספר פסים כאלה, כל אחד בעל קוד צבע שונה, והמחשב שינה את הצבעים בפועל של הקבוצה הזו במחזוריות של אדום ולבן כדי ליצור את האשליה של סיבוב.
אשליית התנועה
ומה לגבי הקפיצה של הכדור? איך מציירים אותו במיקומים שונים על המסך בלי למחוק את הציור הקודם ולצייר מחדש במקום אחר? גם כאן נעשה שימוש בטריק מחוכם. הזכרתי שהמידע שמופיע על המסך מקורו במלבן וירטואלי בזכרון. המלבן הוא וירטואלי מפני ששטח הזכרון גדול יותר מאשר מספר הפיקסלים שמופיעים בפועל על המסך – כמו לצלם מקרוב חלק מדף. הזזה של המלבן הווירטואלי, שנעשית באמצעות שינוי הגדרה של מספר ערכים בחומרת התצוגה, היא כמו הזזה של המצלמה ימינה, שמאלה, למעלה או למטה לעומת הדף. אם מצויר על הדף כדור, אז כשהמצלמה זזה למטה, זה נראה כאילו הכדור זז למעלה.
זה מסביר את התנועה של הכדור, אבל איך הרקע נשאר סטטי? הסיפור הזה כבר מורכב מדי בשביל הפוסט הזה, אז תצטרכו פשוט להאמין שגם זה טריק מתוחכם שדורש מעט מאד חישובים.
חומרה זה רע?
אם נסכם את כל הנושא במספר מילים, Boing לא היתה הדגמה של כוח המחשוב של האמיגה, אלא ניצול מתוחכם של תכונות מסוימות מאד של חומרת המחשב. מצד אחד, אפשר לטעון שזו רמאות: המשקיעים והעיתונאים שהוזמנו לחזות ב-Boing (ההדגמה לא היתה פתוחה לציבור) לא קיבלו את ההסברים שהצגתי כאן, מצד שני, הטריקים האלה היו שימושיים באמת: הם איפשרו, למשל, תנועה חלקה של סביבות מורכבות במשחקים. חישבו על משחק כמו מריו המקורי: השחקן רץ בתוך עולם גדול, אך כמעט בכל רגע נתון, רוב המסך הוא למעשה רקע אחיד ומשעמם של שמים כחולים, או שחור באזורים התת-קרקעיים. השוו זאת לחגיגה הוויזואלית הבאה:
בזכות טריקים כאלה המשחקים הפכו לעשירים ומעניינים הרבה יותר: עולם המשחק הפך פתאום לריאליסטי. האדמה החלה לזוז, מטאפורית וממשית. מחשבים שהסתמכו על המעבד הראשי שיעשה את כל העבודה בדרך הקשה, כגון תואמי ה-IBM למיניהם, הדביקו את יכולות האמיגה רק כעבור שנים.
בעולם תכנות המחשבים של ימינו, התעסקות עם חומרה נחשבת בעייתית ולא רצויה, ולמעשה מערכות ההפעלה וסביבות הפיתוח עושות הכל כדי להקשות על המתכנת הממוצע להגיע בכלל לחומרה. לרוב המטרות, כוח העיבוד ה"טהור" כבר חזק מספיק כדי להתמודד עם כל משימה, ורק מי שמתכנת מערכות הפעלה, או משחקים ויישומי מולטימדיה כבדים במיוחד, צריך ויכול להרשות לעצמו להתייחס לפרמטרים ספציפיים של חומרה ספציפית.
רמת ההפשטה הזו היא מעשית, אפילו חיונית, בעולם המורכב של המחשבים המודרניים – אלא שארדואינו ומיקרו-בקרים אחרים אינם מחשבים מודרניים, והפרקטיקה הזו לא באמת מתאימה להם, אפשר להרגיש את זה בגישה של חובבי ארדואינו מתחילים בעלי רקע בשפות תכנות "גבוהות": הם מנסים, לעתים בכוח ממש, לכפות את שיטות העבודה המוכרות להם על הארדואינו, תוך בזבוז משווע של המשאבים והיכולות האמתיים של המיקרו-בקר. אני לא מאשים אותם: לא רק שזה מה שהם מכירים, אלא גם שסביבת הפיתוח של הארדואינו בעצמה משתדלת להפוך את תכנות המיקרו-בקר למופשט יותר ולהציג אותו כמשהו "גבוה". כך, במקום תוכנות יעילות שעושות שימוש חכם בפלטפורמה, מתקבלים יצורי-כלאיים עלובים ומגושמים. להמחשה, מכונית היא אמצעי מעולה ונוח מאד להגיע ממקום למקום, אבל רק מי שהולך ברגל יכול להיכנס לסמטאות צרות, לטפס ולעשות עוד המון דברים ששום מכונית לא מכירה.
למרבה המזל, צורת החשיבה הזו של התכנות ה"גבוה" לא היתה קיימת בשנת 1984 – בכל אופן, המהנדסים שהמציאו את האמיגה לא עבדו לפיה – וכך, ברוח אמתית של מייקרים, הם היו מסוגלים לבצע את הבלתי-אפשרי לכאורה וליצור מחשב שהקדים את זמנו בשנים רבות.
באמצע שנות ה – 70 כאשר למדתי בתיכון, היינו משתמשים בפקודות שפת basic שיכלו לתת לנו גישה ישירה ל page של הזיכרון שבו נמצא המסך. יכולנו לתת פקודת basic שתדליק / תכבה / תשנה פיקסל בודד במסך (כמו בתיאור שלך על האמיגה). זה אפשר לנו לכתוב תכניות בשפה גבוהה (סליחה), שיעשו את מה שתיארת: תנועה של עצמים תלת ממדיים במרחב כאשר הרקע לא משתנה או גם וגם, זאת תוך שימוש בחומרה חלשה (מעבד 8088 כמדומני (?)). לא היה צבע, לכן השתמשנו בגווני אפור. המחשב שבו השתמשנו היה של רדיושייק (אם יש מי שזוכר אותם), בערך 5-6 שנים לפני שהומצא ה… לקרוא עוד »
היו מחשבים אישיים בכלל באמצע שנות השבעים? 🙂
החיים בהחלט היו יותר מעניינים כשהייתה לנו גישה ישירה לזיכרון המסך…
ויקיפדיה: במחצית השנייה של שנות ה-70, יוצרו ונמכרו עשרות דגמים שונים של מיקרו מחשבים גם עבור שוק הצרכנים הביתי. "מחשבים ביתיים" אלו היו ארוזים כמוצר צריכה והתאימו לשוק רחב יחסית. רובם באו עם מקלדת מובנית, התחברו לטלוויזיה, כללו תוכנות משחקים ב-CARTRIDGE, אפשרו תכנות בשפת BASIC ושמרו תכניות על טייפ קלטות ומאוחר יותר על כונני דיסקטים. לתפוצה רחבה במיוחד זכה ה-Apple II.
מה ויקיפדיה, אתה היית שם… 🙂
המחשבים האישיים הראשונים שאני מכיר – לא אישית, אמנם – הופיעו לקראת סוף העשור, נניח 1977 והלאה. אבל שוב, אשמח ללמוד עוד על התחום הזה.
פוסט נהדר!
אפשר בבקשה קישור או הסבר קצר על הרקע הסטטי שלא מושפע מהכדור?
זה כבר משהו פרוע לגמרי. כאמור, מסובך מכדי להיכנס לפרטים כאן – בגדול, הביטים שהגדירו את קוד הצבע של כל פיקסל לא היו סדרתיים בזיכרון, אלא מקבילים: "פס" אחד לביט הראשון של כל פיקסל, "פס" נוסף לביט השני של כל פיקסל וכן הלאה. המתכנתים ציירו את הרקע על אחד הפסים האלה, דאגו שזה לא ישתקף בצבעים האחרים, ו"הזיזו" את החלון הווירטואלי בנפרד על פס הרקע (ליתר דיוק וסיבוך, על 16 גרסאות שונות שלו!) ועל השאר.
כתבה מעולה, ממש מזכיר לי תכנות בASM 🙂
אני די בטוח שהתוכנה המקורית של ההדגמה הזו היתה באסמבלי. המחשב שעליו היא רצה דמה יותר לאילתור על מטריצות מאשר למוצר, ולא היו לו מקלדת או עכבר – התוכנה הועברה ממחשב אחר דרך כבל…
מאוד יפה.
מעניין אותי איך נראה הקוד מאחורי דבר כזה
בבקשה! (קישור מתחת לסרטון הראשון בדף http://amiga.filfre.net/?page_id=5 )
הדף הזה לא היה זמין כשקראתי את הפרק, חשבתי שהאתר כולו נעלם, אבל הסתבר שהוא חזר.