▼
內文試閱
物件導向設計實作-手指即鍵盤! 透過PIC32設計遊戲機
電玩遊戲系統結合了圖形、運算及顯示等各項技術。本文由兩位康乃爾學生介紹如何用Microchip的PIC32設計出支援NTSC視訊及聲音輸出、並使用任天堂NES控制器的遊戲機。
本篇文章將討論如何設計、打造虛擬鍵盤系統,同時涵蓋軟體及硬體的相關細節。
本專案的遊戲機有個示範遊戲「跳繩」,它是用專案發展的遊戲引擎來打造。我們寫了相關的軟體程式庫,來支援及展示所有的遊戲元素。最後的成果是個容易使用的遊戲引擎,讓PIC業餘玩家在遊戲機上發展各種遊戲。打造遊戲機(圖1)的動機有好幾個。首先,我們熟知任天堂WarioWare一系列有趣的謀略遊戲。如果能在遊戲玩法與機制都不同的各個遊戲間快速切換,應該很有意思。另外像Unreal或Unity這樣的遊戲引擎能提供直接又簡潔的方法,以分成場景(Scene)、觸動元件(Sprite)等各種階層元件的方式來進行遊戲管理。之後遊戲中的「導演/管理者」程式便能載入、產生這些元件的實例。
圖1 PIC32類比視訊遊戲機(PICGAME)是攜帶型,並且提供NTSC相容視訊輸出的遊戲機。MicrostickII發展板上有插在手焊洞洞板的PIC32MCU,板子被裁成適當的尺寸好放進雷射切割的壓克力盒
遊戲物件採用高度階層化的架構,載入場景時也同時載入相關的各項物件。我們在小小的PIC32微控制器上合成即時的NTSC視訊,以及支援設定好的遊戲機制。遊戲機能輸出複合視訊及3,000樣本/秒的聲音訊號,還能以輪詢方式從NES控制器讀取輸入按鍵之狀態。遊戲機上面跑的是輕量級的遊戲引擎,其概念乃衍生自根據使用者定義事件載入或切換遊戲場景的現代遊戲引擎。
我們先研究微控制器上合成視訊輸出的方法,接著再以增量設計(IncrementalDesign)的方式打造遊戲引擎。最後用遊戲引擎實作跳繩示範遊戲,並研發出能降低不自然假影(artifact)出現機率及減少記憶體用量的方法。圖2顯示整個遊戲機的結構。
圖2 遊戲機的核心軟體是遊戲管理員,負責計算及執行所有遊戲相關內容。周邊有一系列的驅動程式及信號產生器,支援與周邊裝置之間的介面。
從圖1方塊圖的描述可以看到,PICGAME是在核心遊戲管理員區塊執行,過程中將呼叫各種程式庫處理周邊裝置的介面、並合成視訊輸出。主軟體區塊周邊圍繞許多硬體驅動程式,負責驅動控制器、輸出視訊以及聲音。
<嵌入式系統要素>專欄:時序與功耗分析攻擊 即使使用者沒有處理過敏感資料,但也可能希望確保自己的裝置不會遭到有心人整機備份(Clone)。嵌入式安全是每個電子工程師所應該關心的事情。本文將介紹透過簡單的時序和功耗分析攻擊,就能加速PIN碼猜解的細節。
歡迎來到本人專欄中並一同聚焦在新的安全焦點上。直到目前為止,筆者專欄多半專注在現場可程式邏輯閘陣列(FPGA)和可程式邏輯(ProgrammableLogic)的議題上。在過去的幾年中,筆者花了很多時間在嵌入式設計的其他領域裡,所以隨著專欄名稱的些許改變,也就是原本的「可程式邏輯實戰」將改名為「嵌入式系統要素」,所以本人今後文章將涵蓋更廣泛的主題。筆者當然也很可能地會在自己的文章中持續納入相當數量的FPGA技術,但如今筆者可以更無拘無束地迂迴到我們周遭的其他嵌入式系統中。
事實上,會有這樣的轉變,其實早在筆者心中已有構思並開闢一系列特定專欄的想法了。在接下來的幾篇文章中,筆者將介紹嵌入式安全這個在過去幾年中與本人大部分工作有關的重要主題。例如,我最近與EyalRonen,AdiShamir與Achi-OrWeingarten等人協同致力在物聯網連網燈泡產品中發現了若干安全瑕疵。儘管存在一些質與量皆可觀的安全措施(例如,燈泡的韌體更新已被加密),但這些安全瑕疵依舊存在(有關此研究的更多資訊,請前往http://iotworm.eyalro.net/)。一旦我們從正規電腦安全跨入到嵌入式安全領域時,這些問題通常會一一冒出,因為這裡存在一系列全新又有趣的攻擊。即使使用者沒在設計「安全」系統,但筆者敢打賭任何人都會確保自己的設計不會被有心人整機備份。
儘管微控制器製造商總是會一直告訴使用者他們的安全性有多好,但驗證這一點的唯一真正方法就是自己親自測試。即使製造商的安全保護措施並未被癱瘓破壞,但也有可能不慎地在使用者產品中添進一個後門程式,這讓攻擊者得以讀取使用者程式碼的可能性大增。再次要強調的,即使使用者沒在經手處理什麼敏感資訊,使用者通常也不會希望有人整機備份自己的產品。
本期文章裡筆者會探討功耗分析手法。事實上,筆者早在2016年12月《CircuitCellar嵌入式科技》no.4「封面故事」裡介紹過這個攻擊手法,在文中筆者展示如何透過該手法來破解在FPGA裝置上運行的加密機制。在此一開始會先回顧一下之前介紹過的若干細節,並展示如何使用功耗分析來判定裝置在做什麼。我們接著可以透過它來簡單地追蹤資料本身在哪些地方被使用過。以上措施可說是在我們執行更高級攻擊之前非常有用的第一步。但是這些更高級的攻擊將不得不留待筆者下一期專欄裡做討論。
背景功率分析 或許這會讓使用者感到驚訝,但在程式執行過程期間,實際上的確能在程式執行過程期間看到裝置功耗的微小差異。如果使用者不相信我,使用者可以配置一個如圖1所示的實驗,在實驗中我們便能測量微控制器的功耗。這可以在麵包板上構建。在此並沒有秀出I/O或晶體連接,只顯示與功率測量有關的連接。
圖1 電源管理系統簡易原理示意圖。嵌入在Atmel微控制器數位電源接腳中的分流電組,能讓我們進行簡易的功耗量測
像程式列表1中的簡單程式切換I/OLine,然後接著在等待一段時間之前先在迴圈中執行某些操作。透過示波器(Oscilloscope),使用者可以在I/OLine切換之後測量功耗。透過將延遲設置為不同的值,實際上是可以在功耗中看到該迴圈到底持續了多久。圖2對此提供了兩個範例。
|