Quake-ის გადატანა Game Boy Advance-ში შეუძლებელი ჩანდა, მაგრამ რენდი ლინდენმა მოახერხა მისი გაყვანა. Აი როგორ.
Game Boy Advance არის ხელის სათამაშო კონსოლი, რომელიც შექმნილია Nintendo-ს მიერ. იგი გამოვიდა იაპონიაში 2001 წელს და იყო Game Boy Color-ის მემკვიდრე. მას ჰქონდა ARM7TDMI 16,78 MHz სიხშირით, 32 კბ შიდა ოპერატიული ოპერატიული მეხსიერება, 256 კბ გარე ოპერატიული მეხსიერება და 96 კბ VRAM. ეს არ არის ყველაზე მძლავრი მანქანა, მაგრამ არსებობს უამრავი თამაში ხელსაქმისთვის, რომელიც ბევრს კარგ მეხსიერებაში აქვს. ერთი თამაში, რომელსაც არასოდეს უნახავს დღის სინათლე, თუმცა მოწყობილობისთვის იყო Quake-ის პროტოტიპი, თამაში, რომელიც შემუშავებულია id Software-ის მიერ, რომელიც დაეხმარა პირველი პირის შუტერის ჟანრის განსაზღვრას, რომელიც ჩვენ დღეს ვიცით.
Quake არის წარმოუდგენლად დეტალური თამაში ფანტასტიკური საუნდტრეკით და ნარკოტიკული გეიმპლეით და ისევე, როგორც DOOM, ის პორტირებულია პრაქტიკულად ყველა მოწყობილობაზე, რომელზეც შეგიძლიათ იფიქროთ. მისი პორტი Game Boy Advance-ში განსაკუთრებით წარმოუდგენელია, რადგან მას არ აქვს 3D გრაფიკის მხარდაჭერა და Nintendo-მ სპეციალურად გამოუშვა ხელის მოწყობილობა, როგორც ორგანზომილებიანი გეიმპლეის გამოცდილება. ამან არ შეუშალა ხელი რენდი ლინდენს საკუთარი პორტის განვითარებაში.
თუ თქვენ არ იცნობთ ლინდენს, ის ყველაზე ცნობილია იმით, რომ ორივე bleem-ის შემქმნელია! (PlayStation ემულატორი) და DOOM-ის SNES პორტი, მიღწევა, რომელიც ერთხელ თქვა ჯონ რომერომ, id Software-ის თანადამფუძნებელმა ინტერვიუში. Shacknews მას არ მიაჩნდა შესაძლებელი. ლინდენის განვითარების უნარმა დაამტკიცა, რომ თუ ვინმეს შეეძლო Quake on Game Boy Advance-ის რეალობად ქცევა, ეს ალბათ ის იყო.
ეს პორტი ნათელი გახდა ლინდენის მიერ მისი გამოშვების წყალობით, ილუზიის ტყის პროექტის მეშვეობით. Forest of Illusion არის პროექტი, რომელიც მიზნად ისახავს Nintendo-ს თამაშებისა და ლინდენის ისტორიის შენარჩუნებას. მიაღწია იმისათვის, რომ გაევრცელებინა Quake პორტის ასლი, რომელიც მან აღმოაჩინა 256 მბ ფლეშ ბარათზე. ფლობა.
გვინდა მადლობა გადავუხადოთ რენდი ლინდენს, რომ დაუთმო დრო ჩვენს კითხვებზე პასუხის გასაცემად და ამ სტატიის ტექნიკური სიზუსტის უზრუნველსაყოფად. ასევე გვინდა მადლობა გადავუხადოთ თანამედროვე ვინტაჟი გეიმერი რომ მოგვცა საშუალება გამოგვეყენებინა მისი ვიდეოდან ნებისმიერი სურათი, რომელიც საჭირო იყო. ამ პორტს არ აქვს ოფიციალური კავშირი id Software-თან ან ZeniMax-თან და შეიქმნა როგორც ლინდენის სოლო პროექტი.
Quake's Game Boy Advance პორტი
ტექნიკურად რომ ვთქვათ, გასაოცარია, რომ Quake-ს შეუძლია იმ დონემდეც კი გაიაროს, როგორც Game Boy Advance-ზე. ის მუშაობს კადრების კარგი სიჩქარით და ინარჩუნებს ორიგინალური Quake თამაშის სწორ განათებას და ფერთა პალიტრას. ყველაფერი არის 3D, მათ შორის იარაღი და მონსტრები. Game Boy Advance-ის თამაშებმა მიაღწიეს 3D გრაფიკას, როგორც წესი, სპრაიტების საშუალებით, მაგრამ ეს იყო ნამდვილი გარიგება. ის არ იყენებს სხივების გადაცემას ისე, როგორც სხვა 3D თამაშები ხელსაყრელზე, და ის აღწევს წერტილსაც კი განათების ეფექტები წინასწარ გაფორმებულ ობიექტებზე პალიტრის შეცვლის ხრიკის საშუალებით დინამიკის ილუზიის მისაღწევად განათება.
გასაგებად რომ ვთქვათ, ეს პორტი არ არის სრული თამაში და ეს არის პროტოტიპი, რომლის გადაღებაც ლინდენმა განიზრახა id Software-ში, როგორც კი მისი დასრულება გამოსულიყო. თუმცა, Game Boy Advance-ის პოპულარობა შემცირდა და ამის ნაცვლად, ლინდენის მიერ დაწერილი საბაჟო ძრავა მოგვიანებით გახდა ლინდენის მიერ შემუშავებული სხვა თამაშის ძრავა - Cyboid. ლინდენი გვეუბნება, რომ "კოდის დიდი ნაწილი" კვლავ არის ორიგინალური ARM კოდი Game Boy Advance ვერსიიდან. თუ გსურთ სცადოთ Cyboid, უფრო ძველი ვერსია ხელმისაწვდომია Google Play Store-ზე, მაგრამ ოფიციალური APK ახლა განაწილებულია Amazon App Store რადგან თამაშს აქვს ბევრი დაბალი დონის 32-ბიტიანი კოდი.
ფასი: უფასო.
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-ს ეხებოდა, რამაც ეს რთული პორტი გახადა. ზოგიერთი ყველაზე დიდი დაბრკოლება იყო საათის დაბალი სიჩქარე, ხელის 3D გრაფიკული შესაძლებლობების ნაკლებობა და მცურავი წერტილის ერთეულის (FPU) ნაკლებობა. გზაზე უამრავი სხვა იყო, მაგრამ ეს იყო განსაკუთრებული ტკივილის წერტილები, რომლებიც ლინდენმა გამომიცხადა, როგორც პრობლემური. სანამ მასში შევიდეთ, მნიშვნელოვანია გვესმოდეს Game Boy Advance-ის განლაგება.
Game Boy Advance-ს აქვს ოპერატიული მეხსიერების სამი ნაკრები - ერთი არის შიდა სამუშაო ოპერატიული მეხსიერება (IWRAM), მეორე არის გარე სამუშაო ოპერატიული მეხსიერება (EWRAM) და მესამე არის ვიდეო ოპერატიული მეხსიერება (VRAM). 32 კბ IWRAM გამოიყენება ARM ინსტრუქციების შესანახად სწრაფი შესრულებისთვის, ხოლო 256 კბ EWRAM ოპტიმალურია მხოლოდ Thumb-ის ინსტრუქციებისა და მონაცემთა მცირე ნაწილების შესანახად. როგორც როდრიგო კოპეტი აღნიშნავს, EWRAM შეიძლება იყოს ექვსჯერ უფრო ნელი წვდომა ვიდრე IWRAM. მეხსიერების უმეტესი ნაწილი EWRAM-ის სახით ხელმისაწვდომია მხოლოდ 16-ბიტიანი ავტობუსით, მიუხედავად იმისა, რომ Game Boy Advance გაყიდვაშია, როგორც 32-ბიტიანი ხელის მოწყობილობა. IWRAM-ზე წვდომა შეიძლებოდა 32-ბიტიანი ავტობუსის მეშვეობით. VRAM Game Boy Advance-ზე მოდის 96 კბ-ზე და მიუხედავად იმისა, რომ ის ძირითადად გრაფიკული მონაცემების შესანახად არის განკუთვნილი, ის გვხვდება CPU-ს მეხსიერების რუკაში და შეიძლება გამოყენებულ იქნას როგორც ჩვეულებრივი მეხსიერების საცავი.
Thumb ინსტრუქციები არის 32-ბიტიანი ARM ინსტრუქციების ქვეჯგუფი და არის ინსტრუქციების ნაკრები, რომელიც კოდირებულია 16-ბიტიან სიტყვებში. მათ აქვთ 32-ბიტიანი ინსტრუქციების ყველა უპირატესობა იმდენი სივრცის დაკავების გარეშე, რაც მათ ეფექტურს ხდის ოპტიმიზირებული განვითარებისთვის. ეს ნიშნავს, რომ სანამ EWRAM უფრო ნელია წვდომაში, Thumb ინსტრუქციები ეფექტურია, ხშირად შეიძლება დასრულდეს ისევე სწრაფად, როგორც შენახული ARM ინსტრუქციები. IWRAM-ში, თუმცა Thumb ინსტრუქციების უარყოფითი მხარე ის არის, რომ ზოგჯერ არ არსებობს ARM ინსტრუქციის ცერის ეკვივალენტი, რომელიც გსურთ. შეასრულოს. EWRAM გამოიყენებოდა 3D მათემატიკური ტრანსფორმაციის ლოგიკის გამოსავლის შესანახად, რომელიც ძირითადად წარმოადგენდა მრავალკუთხედის კიდეების ჩამონათვალს, რომლებიც შემდეგ სკანირებულ სკანირებამდე ასახული იყო რასტერიზაციის კოდით.
როგორც ლინდენი მეუბნება, მთელი პორტის ყველაზე რთული და რთული ნაწილი იყო სკანლაინის რენდერი. იგი შედგება 10000-ზე მეტი ხაზისგან მაღალოპტიმიზებული ARM ასამბლეის კოდისგან, რომელიც შექმნილია პიქსელების ნაკრების გადასაღებად VRAM-ში. სკანირების რენდერერმა გამოიყენა 32 კბ IWRAM-ის უმეტესი ნაწილი. კამერასთან ყველაზე ახლოს კიდეები აქტიური და გაფორმებულია, და ეს არსებითად არის დიდი ბინარული სივრცის დანაყოფი (BSP) ხე. VRAM გამოიყენებოდა პოლიგონური ტრანსფორმაციის შედეგების კიდეების ცხრილებში შესანახად, რადგან არ იყო საკმარისი IWRAM, მაგრამ VRAM Game Boy Advance-ზე მაინც უფრო სწრაფია ვიდრე EWRAM. აქ ასევე ინახებოდა და ნაჩვენები გრაფიკაც.
მან დიდი დრო დახარჯა ოპტიმიზაციაზე ფოკუსირებისთვის, რათა უზრუნველყოს, რომ მას შეეძლო მიეღო ყველაზე სწრაფი შესრულების დრო. სამი რამ, რაც მან გააკეთა ამ შესრულების დროის დასაჩქარებლად, მოიცავდა შემდეგს:
- კოდის დამოუკიდებლად შეცვლა მის შესრულებამდე, ამიტომ ნაკლები ინსტრუქცია იყო საჭირო
- გამოიყენა საძიებო ცხრილების სერია ისეთი საგნებისთვის, როგორიცაა რეციპროკული, სინუსი, კოსინუსი, ტანგენსი და ა.შ.
- გადართეთ CPU-ს "რეჟიმი", რათა მიიღოთ წვდომა დამატებით რეგისტრებზე (რომლებიც "ცვლადებს" ჰგავს) რეგისტრების მნიშვნელობების შენახვისა და აღდგენის გარეშე.
CPU-ის რეჟიმების გადართვა დამატებითი რეგისტრების მოსაპოვებლად წარმოუდგენლად ჭკვიანური მანევრია, რომელიც იძლევა CPU-სთან ახლოს არსებულ მნიშვნელობებზე სწრაფ წვდომას, რათა მათი მოძიება მოხდეს ერთი საათის ციკლში. როგორც ლინდენი მეუბნება, შესაძლებელი იყო რეგისტრების გადართვა და მნიშვნელობის მოპოვება ერთი საათის ციკლში, განსხვავებით Game Boy Advance-ის RAM-ში მნიშვნელობის შესანახად, რასაც მეტი დრო სჭირდება. თავად CPU არის 16.78 MHz პროცესორი, რაც ნიშნავს, რომ მას შეუძლია შეასრულოს 16780000 ციკლი წამში. ეს ბევრს ჟღერს, მაგრამ როცა ეკრანზე თითოეული პიქსელის გამოთვლა და დახატვა გჭირდებათ, ისინი სწრაფად გროვდება და მნიშვნელოვანი ხდება რაც შეიძლება მეტი ოპერაციის გაპარსვა.
ზემოთ მოცემულია ARM7TDMI ჩიპსეტის ზოგადი რეგისტრების სია, რომელიც არის Game Boy Advance-ის შიგნით. როგორც წესი, დეველოპერები მხოლოდ „სისტემისა და მომხმარებლის“ რეჟიმში შედიოდნენ რეგისტრებში და მიმართავენ ნორმალური ცვლადების გამოყენებას მის გარეთ. თუმცა, მან გამოიყენა რეგისტრები ჩიპსეტის შვიდივე რეჟიმში და ყველაზე კარგი ის არის, რომ გადართვის რეჟიმები კვლავ ინარჩუნებს მნიშვნელობებს სხვა რეჟიმების რეგისტრებში, ასე რომ მას შეეძლო გადართვა მათ.
სასაცილოა, ლინდენმა ასევე აღნიშნა, თუ როგორ აღმოაჩინა შეცდომა Nanoboy Advance ემულატორში ბანკის გადართვის მისმა მეთოდმა. როგორც გაირკვა, ამ ემულატორს არ უჭერდა მხარს CPU-ს სხვა რეჟიმების გამოყენება რეგისტრებში შენახვისა და გადართვისთვის და მისი Quake დემო იყო პირველი ცნობილი თამაში, რომელმაც ეს რეალურად გააკეთა.
ლინდენმა გაგვიზიარა მის მიერ შექმნილი შენიშვნების ფოტო და ახსნა, თუ როგორ ოპტიმიზირებდა მცურავი წერტილის გამოთვლებს სათანადო FPU-ის არარსებობის შემთხვევაში.
ზემოთ მოყვანილი სურათი არის ის, რაც ლინდენმა გაგვიზიარა თავისი ჩანაწერებიდან და რაც განსაკუთრებით საინტერესოა არის "სხვადასხვა ARM ციკლის ინსტრუქციების რაოდენობა". მან გამოიგონა გზა გამოთვლებისთვის ციკლების ოპტიმიზაციისთვის, რათა შეემცირებინა საათის ციკლების რაოდენობა გამოთვლებისთვის. როგორც მან მითხრა, 8-ბიტიანი რიცხვი შეიძლება გამრავლდეს ერთი საათის ციკლში, 16-ბიტიანი რიცხვი ორ საათში, 32-ბიტიანი რიცხვი სამ საათში და 64-ბიტიანი რიცხვი ოთხ ციკლში. .
„აღსრულების ორი-სამი ეტაპი იყო [ARM პროცესორში]. თქვით, მაგალითად, ვამრავლებ ერთს რეგისტრში ორზე და შედეგს ვდებ რეგისტრში სამში. მე რომ ვიცოდე, რომ რეგისტრაცია ორი იყო 16-ბიტიანი რიცხვი, იმის ნაცვლად, რომ მეთქვა გამრავლება რეგისტრაცია ერთი რეგისტრაციით ორზე, მე გადაატრიალებდა და მე ვიტყოდი, რომ გავამრავლე რეგისტრაცია ორი რეგისტრაციით, რადგან ეს დამიზოგავს საათს ციკლი."
მან მითხრა, რომ ამის მიზეზი იყო Game Boy-ის ყველა ნაწილის გამორთვა წინასწარ, რადგან აქა-იქ შენახული საათის ციკლი ნამდვილად ემატება, როდესაც ბევრი გამოთვლა ხდება შესრულებული. რაც შეეხება თვითშეცვლის კოდს, ლინდენს ვთხოვე აეხსნა.
”პროგრამა მოდის [საწყობიდან], ის გადასცემს პროგრამის დიდ ბლოკს შიდა RAM-ში შესასრულებლად, რადგან ის უფრო სწრაფია. RAM-ის თითოეული წვდომა ბევრად, ბევრად ნელია, ამიტომ ვაკეთებ DMA [Direct Memory Access] დიდი ბლოკიდან ROM-დან RAM-ში და შემდეგ ვცვლი პროგრამის რეალურ კოდს. მაგალითად, ARM-ს აქვს უნარი გადაიტანოს ოპერანდები მარცხნივ ან მარჯვნივ ან მას შეუძლია შენიღბოს გარკვეული ბიტები, როგორც ინსტრუქციების ნაკრების ნაწილი. ინსტრუქცია განსაზღვრავს რომელი ბიტის ნიღაბს აპირებთ ან რამდენი ბიტით გადაიტანთ. ასე რომ, მე გამოვქმნიდი კოდს, რომელიც შეცვლიდა იმას, რაც უნდა შესრულებულიყო იმის მიხედვით, თუ რამდენი ბიტი მჭირდებოდა გადასატანად. კიდევ ერთი მაგალითია 3D მატრიცის გამრავლება. იქ გამრავლებათა მთელი წყებაა ჩართული. მე გამოვქმნიდი ფაქტობრივ ინსტრუქციებს, რომლებიც გამრავლებას აკეთებენ შიდა RAM-ში და შემდეგ შევასრულებდი მათ ისე, რომ კოდი აწყობილიყო თავისთავად, სანამ ის მუშაობდა."
თვითშეცვლის კოდს აქვს თავისი უარყოფითი მხარეები, განსაკუთრებით მაშინ, როდესაც საქმე ეხება გამართვას. ის ასევე აშორებს ფილიალის ინსტრუქციების საჭიროებას, სადაც კოდი გადადის სხვა შესრულების თანმიმდევრობაზე და შეუძლია ძირითად ძაფს ჩამოართვას ძვირფასი გამოთვლის დრო. ლინდენმა ასევე გვითხრა, რომ საძიებო ცხრილები იდეალურად არის გასწორებული ROM-ში ისე, რომ ისინი მარცხნივ გადატანილი რვა ბიტიანი მნიშვნელობის შესანიშნავი ჯერადია. საძიებო ცხრილის ზომა უზარმაზარია და არ ჯდება RAM-ში, და განლაგება ასევე თავიდან აიცილებს დამატებითი დატვირთვის ინსტრუქციის საჭიროებას ცხრილის საბაზისო მისამართის მისაღებად.
მთლიანობაში, საბოლოო პროტოტიპი შეიქმნა თითქმის ორი წლის განმავლობაში.
რენდი ლინდენის Quake პორტის მომავალი
მე ვკითხე ლინდენს, რა ბედი ეწევა Quake პორტს და მან მითხრა, რომ აყენებდა განიხილება ZeniMax-ისა და id Software-ის კითხვა ოფიციალურ Quake-ით ვერსიის გამოშვების შესახებ აქტივები. მან ასევე მითხრა რაღაც მომენტში, რომ გამოუშვებს წყაროს კოდს, მაგრამ ამჟამად, ის არ აშენდება, რადგან ეს მოითხოვს ძველ კომპიუტერს.
მე ვკითხე ლინდენს, რატომ აირჩია Quake და მან მითხრა, რომ მას უყვარდა თამაში და უყვარდა გამოწვევა, რომ ეს იყო "შეუძლებელი პროექტი", რადგან ეს იყო მისი DOOM SNES პორტის უკანა მხარეს. მან ასევე აღნიშნა, რომ მიუხედავად იმისა, რომ მას არ სჯერა, რომ მთელი თამაშის პორტირება შესაძლებელი იყო სივრცის შეზღუდვის გამო, თამაშის აბსოლუტური უმრავლესობა შეიძლებოდა ყოფილიყო იმავე ძრავში.
თუ გაინტერესებთ Quake-ის შემოწმება Game Boy Advance-ისთვის, დარწმუნდით, რომ შეამოწმეთ მისი გამოშვება Forest of Illusion-ზე, რომელიც შეგიძლიათ ნახოთ ქვემოთ.
ჩამოტვირთეთ ილუზიის ტყიდან