הסיפור של הנמל הבלתי אפשרי: איך קוייק הועבר ל-Game Boy Advance

העברת Quake ל-Game Boy Advance היה נראה בלתי אפשרי, אבל רנדי לינדן הצליח לחלץ את זה. הנה איך.

ה-Game Boy Advance היא קונסולת משחקים כף יד שנוצרה על ידי נינטנדו. הוא שוחרר ביפן בשנת 2001 ושימש כיורש של ה-Game Boy Color. היה לו ARM7TDMI ב-16.78 מגה-הרץ, 32kb של זיכרון עבודה פנימי, 256kb של זיכרון RAM חיצוני ו-96kb של VRAM. זו לא המכונה החזקה ביותר, אבל יש הרבה משחקים עבור כף היד שרבים מחזיקים בזיכרון טוב. משחק אחד שמעולם לא ראה אור למכשיר היה אב טיפוס של יציאת Quake, משחק שפותח על ידי id Software שעזר להגדיר את ז'אנר היריות בגוף ראשון המוכר לנו היום.

Quake הוא משחק מפורט להפליא עם פסקול פנטסטי ומשחק ממכר, ובדיוק כמו DOOM, הוא הועבר כמעט לכל מכשיר שאתה יכול לחשוב עליו. היציאה שלו ל-Game Boy Advance מדהימה במיוחד מכיוון שהיא לא תומכת באופן מקורי בגרפיקה תלת מימדית, ונינטנדו שיווקה במיוחד את כף היד בתור חווית משחק דו מימדית. זה לא הפריע לרנדי לינדן לפתח נמל משלו.

תמונה של יציאת Quake משוחקת על כיס אנלוגי בשימוש באישור מ-Modern Vintage Gamer

אם אתה לא מכיר את לינדן, הוא ידוע בעיקר בזכות היותו המפתח של שניהם בלם! (אמולטור פלייסטיישן) ונמל SNES של DOOM, הישג שג'ון רומרו, מייסד שותף של id Software, אמר פעם בראיון עם

Shacknews הוא לא חשב שזה אפשרי. מיומנות הפיתוח של לינדן הוכיחה שאם מישהו יצליח להפוך את Quake on the Game Boy Advance למציאות, כנראה שזה היה הוא.

הנמל הזה התגלה הודות לשחרורו של לינדן עצמו באמצעות פרויקט Forest of Illusion. Forest of Illusion הוא פרויקט שמטרתו לשמר את ההיסטוריה של המשחקים של נינטנדו, ולינדן הושיט יד על מנת להפיץ את העותק של יציאת Quake שמצא בכרטיס פלאש של 256MB שלו רְשׁוּת.

ברצוננו להודות לרנדי לינדן על שהקדיש זמן למענה על שאלותינו והבטחת הדיוק הטכני של מאמר זה. אנחנו רוצים גם להודות גיימר וינטג' מודרני על שאיפשר לנו להשתמש בכל תמונות סטילס מהסרטון שלו שהיו נחוצות. לנמל זה אין קשר רשמי ל-id Software או ZeniMax והוא פותח כפרויקט סולו על ידי Linden.

יציאת ה-Game Boy Advance של Quake

מבחינה טכנית, זה פלא ש-Quake יכול אפילו לרוץ לרמה שהוא עושה ב-Game Boy Advance. הוא פועל בקצב פריימים טוב ושומר על התאורה והצבעים הנכונים של משחק Quake המקורי. הכל בתלת מימד, כולל כלי נשק ומפלצות. משחקים ב-Game Boy Advance השיגו גרפיקה תלת-ממדית בדרך כלל באמצעות ספרייטים, אבל זה היה העסקה האמיתית. הוא לא עושה שימוש בהטלת קרניים כמו שעשו משחקי תלת מימד אחרים במכשיר היד, והוא אפילו משיג נקודה אפקטי תאורה על אובייקטים שעובדו מראש באמצעות טריק לשינוי משטחים כדי להשיג אשליה של דינמיות תְאוּרָה.

שיהיה ברור, היציאה הזו היא לא המשחק המלא, וזה אב טיפוס שלינדן התכוונה לקחת ל-id Software לאחר השלמתו כדי לצאת לשחרור. עם זאת, הפופולריות של ה-Game Boy Advance החלה לדעוך, ובמקום זאת, המנוע המותאם אישית שכתב לינדן הפך מאוחר יותר למנוע של משחק אחר שפותח על ידי לינדן כולו - Cyboid. לינדן מספרת לנו ש"חלק גדול מהקוד" הוא עדיין קוד ה-ARM המקורי מגרסת ה-Game Boy Advance. אם אתה רוצה לנסות את Cyboid, גרסה ישנה יותר זמינה בחנות Google Play, אך ה-APK הרשמי מופץ כעת ב- חנות האפליקציות של אמזון מכיוון שלמשחק יש הרבה קוד 32 סיביות ברמה נמוכה.

Cyboidמפתח: R and R Digital, LLC.

מחיר: חינם.

3.3.

הורד

לינדן גם שיתף אותנו בסרטון של הקוד שלו פועל על ה-iPod Video, ששימש כאחת הגרסאות המוקדמות ביותר של Cyboid. הוא נבנה על אותו קוד מנוע ששימש עבור יציאת Quake שלו ל-Game Boy Advance.

הנמל של Game Boy Advance של Quake אינו מכיל אף אחד מהנכסים הרשמיים של המשחק, שכן לינדן לא פנה ל-id Software או ל-ZeniMax בנוגע להפצת גרסת E1M1 המכילה Quake הרשמית נכסים.

המשחק המופץ כעת הוא גם בניית באגים. החזקת מקש R בעת האתחול תביא את השחקן ישר למפה השנייה של המשחק, והחזקת שמאל על ה-D-pad תביא אותם למפה השלישית. ניתן לגשת להחלפת מפות גם כאשר השחקן מת, ומפלצות לא יתקפו את השחקן עד שהשחקן יורה בהן קודם.

באשר למוזיקה, ההדגמה עושה שימוש בקבצי .S3M ציבוריים ומיקסר הסאונד מטפל גם במוזיקת ​​סטריאו וגם באפקטים קוליים.

גבולות טכניים

היו מספר גבולות בכל הנוגע ל-Game Boy Advance שהפכו את זה לנמל קשה. כמה מהמכשולים הגדולים ביותר היו מהירות השעון הנמוכה, היעדר יכולות גרפיות תלת מימדיות של כף היד, והיעדר יחידת נקודה צפה (FPU). היו הרבה אחרים בדרך, אבל אלו היו נקודות כאב מיוחדות שלינדן תיארה לי כבעייתיות. לפני שניכנס לזה, חשוב להבין את הפריסה של ה-Game Boy Advance.

צילום מסך בשימוש באישור מ-Modern Vintage Gamer

ל-Game Boy Advance יש שלוש סטים של זיכרון RAM - האחד הוא זיכרון העבודה הפנימי (IWRAM), השני הוא זיכרון העבודה החיצוני RAM (EWRAM), והשלישי הוא זיכרון RAM הווידאו (VRAM). 32kb של IWRAM משמשים לאחסון הוראות ARM לביצוע מהיר, בעוד ש-256kb של EWRAM הוא אופטימלי לאחסון הוראות אגודל בלבד וגושים קטנים יותר של נתונים. כפי ש רודריגו קופטי מציין, EWRAM יכול להיות איטי עד פי שישה לגישה מאשר IWRAM. רוב הזיכרון בצורה של EWRAM נגיש רק באמצעות אוטובוס 16 סיביות, למרות שה-Game Boy Advance משווק כמכשיר כף יד של 32 סיביות. ניתן היה לגשת ל-IWRAM באמצעות אוטובוס 32 סיביות. VRAM ב-Game Boy Advance מגיע ב-96kb, ולמרות שהוא מיועד בעיקר לאחסון נתונים גרפיים, הוא נמצא במפת הזיכרון של ה-CPU וניתן להשתמש בו גם כאחסון זיכרון רגיל.

הוראות אגודל הן תת-קבוצה של הוראות ARM של 32 סיביות, והן קבוצה של הוראות המקודדות למילים של 16 סיביות. יש להם את כל היתרונות של הוראות 32 סיביות מבלי לתפוס כל כך הרבה מקום, מה שהופך אותן ליעילות לפיתוח מיטבי. המשמעות היא שבעוד שהגישה ל-EWRAM איטית יותר, יעילותן של הוראות אגודל עדיין יכולות להסתיים בדיוק באותה מהירות כמו הוראות ARM המאוחסנות ב-IWRAM, אם כי החיסרון של הוראות Thumb הוא שלפעמים אין ממש המקבילה של Thumb של הוראת ARM שאתה רוצה לבצע. ה-EWRAM שימש לאחסון הפלט של לוגיקה של טרנספורמציה מתמטית תלת-ממדית, שהייתה בעצם רשימת הקצוות של מצולעים שאותרו לאחר מכן על ידי קוד סריקה אחר קו סריקה.

כפי שלינדן אומר לי, החלק המורכב והקשה ביותר של הנמל כולו היה מעבד הסריקה. הוא מורכב מיותר מ-10,000 שורות של קוד הרכבה ARM שעבר אופטימיזציה גבוהה, שנועד לצייר סט של פיקסלים ל-VRAM. מעבד הסריקה ניצל את רוב ה-IWRAM של 32kb. הקצוות הקרובים ביותר למצלמה פעילים ומעובדים, וזה בעצם עץ גדול של חלוקת חלל בינארית (BSP). נעשה שימוש ב-VRAM כדי לאחסן את התוצאות של פלט השינוי המצולע בטבלאות קצה מכיוון שלא היה מספיק IWRAM, אבל ה-VRAM ב-Game Boy Advance עדיין מהיר יותר מ-EWRAM. גם הגרפיקה נשמרה והוצגה כאן.

הוא השקיע זמן רב בהתמקדות באופטימיזציות כדי להבטיח שהוא יוכל להשיג את זמן הביצוע המהיר ביותר האפשרי. שלושה דברים שהוא עשה כדי לזרז את זמן ההוצאה להורג כללו את הדברים הבאים:

  • שינה את הקוד בעצמו לפני ביצועו, כך שנדרשו פחות הוראות
  • השתמש בסדרה של טבלאות חיפוש עבור דברים כמו הדדיות, סינוס, קוסינוס, טנגנס וכו'.
  • החליף את "מצב" ה-CPU כדי לקבל גישה לרגיסטרים נוספים (שהם כמו "משתנים") מבלי צורך לשמור ולשחזר את ערכי האוגרים.

החלפת מצבי המעבד כדי להשיג אוגרים נוספים הוא תמרון חכם להפליא המאפשר גישה מהירה לערכים קרובים למעבד כך שניתן לאחזר אותם במחזור שעון בודד. כפי שלינדן אומר לי, ניתן היה להחליף אוגרים ולאחזר ערך במחזור שעון אחד, בניגוד לאחסון ערך ב-RAM של ה-Game Boy Advance, שלוקח יותר זמן. המעבד עצמו הוא מעבד 16.78 מגה-הרץ, כלומר הוא יכול להשלים 16780000 מחזורים בשנייה. זה נשמע כמו הרבה, אבל כאשר אתה צריך לחשב ולצייר כל פיקסל על המסך, אלה מצטברים במהירות וחשוב לגלח כמה שיותר פעולות.

האמור לעיל הוא רשימת האוגרים הכלליים של ערכת השבבים ARM7TDMI שנמצאת בתוך ה-Game Boy Advance. בדרך כלל, מפתחים היו ניגשים רק לרישומים במצב "מערכת ומשתמש" ופונים להשתמש במשתנים רגילים מחוץ לכך. עם זאת, הוא עשה שימוש ברגיסטרים בכל שבעת המצבים של ערכת השבבים, והחלק הכי טוב בזה הוא זה מצבי החלפה עדיין שומרים על הערכים ברישומים של המצבים האחרים, כך שהוא יוכל לעבור ביניהם אוֹתָם.

למרבה הפלא, לינדן גם הזכיר כיצד שיטת החלפת הבנק שלו חשפה באג באמולטור Nanoboy Advance. כפי שהתברר, האמולטור הזה לא תמך בשימוש במצבים האחרים של ה-CPU לשמירה בריגרים ומעבר, והדגמת Quake שלו הייתה המשחק הידוע הראשון שעשה זאת בפועל.

לינדן שיתף אותנו בתמונה של כמה מהפתקים שיצר והסביר כיצד הוא ייעל את חישובי הנקודה הצפה שלו בהיעדר FPU תקין.

התמונה שלמעלה היא תמונה שלינדן שיתף אותנו מהרשימות שלו, ומה שמעניין במיוחד הוא "ספירות הוראות מחזור ARM שונות". הוא הגה דרך לייעל את המחזורים לחישובים כך שיוכל להפחית את מספר מחזורי השעון לחישוב. כפי שהוא תיאר את זה לי, ניתן להכפיל מספר של 8 סיביות במחזור שעון אחד, מספר של 16 סיביות בשני מחזורי שעון, מספר של 32 סיביות בשלושה מחזורי שעון ומספר של 64 סיביות בארבעה מחזורי שעון .

"היו שניים או שלושה שלבי ביצוע [במעבד ARM]. נגיד לדוגמא אני מכפיל את הרשום אחד ברוש ​​שתיים ומכניס את התוצאה לרישום שלוש. אם הייתי יודע שאוגר שני הוא מספר של 16 סיביות במקום לומר כפל רישום אחד ברגיסטר שתיים, אני היה הופך אותו והייתי אומר להכפיל את הרשמת שתיים בהרשמה אחת כי זה יחסוך לי שעון מחזור."

הוא אמר לי שהסיבה שהוא עשה את זה היא כדי לסחוט כל פיסת ביצועים מהגיים בוי מראש, כמחזור שעון שנשמר פה ושם באמת מצטבר כשמתבצעים הרבה חישובים מְבוּצָע. לגבי הקוד שמשנה את עצמו, ביקשתי מלנדן להסביר אותו.

"התוכנית מגיעה מ[אחסון], היא מעבירה בלוק גדול מהתוכנית ל-RAM פנימי לביצוע כי היא מהירה יותר. כל גישה ל-RAM היא הרבה, הרבה יותר איטית אז אני עושה DMA [גישה ישירה לזיכרון] של בלוק גדול מ-ROM ל-RAM, ואז אני משנה את קוד התוכנית בפועל. לדוגמה, ל-ARM יש את היכולת להעביר אופרנדים שמאלה או ימינה או שהוא יכול להסוות ביטים מסוימים כחלק ממערך ההוראות. ההוראה מציינת אילו ביטים אתה הולך להסוות או לפי כמה ביטים אתה הולך לעבור. אז, הייתי יוצר קוד שישנה את מה שעומד להתבצע על סמך כמה ביטים אני צריך להזיז. דוגמה נוספת היא לגבי כפל מטריצות תלת מימד. יש שם חבורה שלמה של כפלים מעורבים שם. הייתי יוצר את ההוראות בפועל שעושות את ההכפלות לתוך ה-RAM הפנימי ואז מבצע אותן כך שהקוד בנה חלקים מעצמו בזמן שהוא פועל."

לקוד לשינוי עצמי יש חסרונות משלו, במיוחד כשמדובר באגים. זה מסיר גם את הצורך בהוראות סניף, שם הקוד יקפוץ לרצף ביצוע אחר ויכול למנוע מהחוט הראשי זמן חישוב יקר. לינדן גם אמרה לנו שטבלאות החיפוש מיושרות בצורה מושלמת ב-ROM כך שהן כפולה מושלמת של ערך שמונה סיביות המוזז שמאלה. הגודל של טבלת החיפוש הוא עצום ואינו מתאים ל-RAM, והיישור גם מונע את הצורך בהוראת טעינה נוספת כדי לקבל את כתובת הבסיס של הטבלה.

בסך הכל, אב הטיפוס הסופי פותח במשך כמעט שנתיים.

העתיד של נמל Quake של רנדי לינדן

שאלתי את לינדן מה יקרה לעתיד של נמל Quake, והוא אמר לי שהוא שם לשקול לשאול את ZeniMax ו-id Software לגבי שחרור הגרסה עם Quake הרשמי נכסים. הוא גם אמר לי בשלב מסוים שהוא ישחרר את קוד המקור, אבל כרגע, הוא לא נבנה מכיוון שהוא דורש מחשב ישן יותר.

ההגדרה של רנדי לינדן לחיבור Game Boy Advance למחשב לצורך פיתוח.

שאלתי את לינדן למה הוא בחר ב-Quake, והוא אמר לי שהוא אוהב את המשחק והוא אהב את האתגר של זה להיות "הפרויקט הבלתי אפשרי", מכיוון שזה היה מאחורי יציאת ה-DOOM for SNES שלו. הוא גם הזכיר שלמרות שהוא לא מאמין שאפשר היה להעביר את כל המשחק בגלל אילוצי מקום, הרוב המכריע של המשחק יכול היה להיות באותו מנוע.

אם אתה מעוניין לבדוק את Quake for the Game Boy Advance, הקפד לבדוק את המהדורה שלו ב- Forest of Illusion, אותה תוכל לבדוק למטה.


הורד מ- Forest of Illusion