街機遊戲機也可以可以做?手把手教你diy

2022-03-15     大方老師單片機

原標題:街機遊戲機也可以可以做?手把手教你diy

街機遊戲機也可以可以做手把手教diy

自製一個單片機,移nes遊戲【夢幻之4】和街機遊戲【恐龍快打】,這是我一直想要做的事,目前已經完成了第一步:自製單片(xmcu),遊戲移植任重而道(有興趣的小夥伴可以私信)

xmcu使用自創的指令集,開發語言為自創x語言。

關聯

指令集

在創xmcu系統之前,我寫過一riscv軟核riscv指令集在我看來還不夠精簡,不夠優雅,為此我創造了一套全新cpu指令(32 bit),命名x指令集x指令集的直接尋址空間512Mbit,間接尋址空間128Gbit,這對FPGA來說綽綽有餘。

指令格式

x指令集追求極簡和優雅,並且只有一種指令格式,指令格式如下所示:

cmd5 bit,指令類型。

type3bit,數據類型,8種數據類型。

imm24 bit,立即數,數據類型type指定。

為了提升指令優雅度,最新指令中移除了【延時槽】,數據相關性在硬體中處理

數據類型

指令壓縮

x指令設計之初,只包6種數據類型type0 - type66種數據類型足以涵蓋所有的軟體代碼行為,因此6種指令集已經是完備的。

為了進一步提升代碼密度,引入了7種數據類型type7。在一些簡單的函數中,能夠壓縮減66%的指令。

下面以程a = b + c為例,說明數據類7帶來的壓縮效果。

指令集描述

CPU架構

xmcucpu部分,採用非常簡單的方式實現,因此硬體資源開銷非常小。與傳統risc指令集不同,x指令集中,命令類型和數據類型是分離的,分別進行獨立的解碼,這在不增加硬體複雜程度情況下,極大的增大了指令的組合情況,使得指令能夠攜帶更多信息量。

面積與時序

x指令集cpu裸核,目標器Artix7,資源報告如下:

系統架構

xmcu的系統架構,包含如下模塊:

·片上雙端ram

·x指令集cpu

·中斷控制irq

·系統調試dbg

·內部總ibus

·外部總xbus

·硬體乘法Hardware multiplier

·硬體除法Hardware divider

·桶式移位Barrel shifter

·存儲控制Flash controller

·存儲控制Sdram controller

·存儲控制SDcard controller

·顯示控制LCD controller

·定時 Timer

·接口協 iicspiuart

中斷響應

傳統risc指令集cpu,普遍採用16/32個寄存器,在響應中斷時需要備份這些寄存器到堆棧中,中斷函數結束後需要恢復這些寄存器,中斷響應速度比較慢。

x指令集中cpu僅使用3個臨時寄存immhtempvar,中斷響應不需要進行寄存器備份cpu只需要等待指令需要immhtempvar生命周期結束,即可立即跳轉到中斷函數,因xmcu的中斷響應非常迅速,且開銷非常非常小。

開發工具

xmcu的開發語言x語言,我x語言編寫了一些工具,包含編譯器、下載器、調試......,為了方便開發,我編寫了一個簡略的集成開發環境,整合xmcu開發過程中使用的工具集xmcu集成開發環境通過串口與硬體進行連接xmcu集成開發環境中內嵌了一個郵箱服務,可以在反饋介面發送反饋信息[email protected]m

應用示例

我基xmcu系統,編寫了一個俄羅斯方塊遊戲,程式語言為自定義x語言,開發工具xide,運行平台為荔枝糖開發板,基於國FPGA(安路科技EG4S20BG256)

硬體開發板

遊戲說明

·支持全觸摸屏操作,觸摸有特效

·遊戲元素存儲FLASH(開發板自帶FLASH容量太小,我替換為了鎂光128MbitFLASH)

·介面布&精靈元素采matlab生成,部分圖片使用美圖秀秀編輯

·我一個做美術的朋友給我定製了一套新的遊戲主UI,我暫時還沒替換,後續補上

·若干遊戲的特效

遊戲截圖

實際遊戲畫面很精美,手機拍照技術太渣,拉低了畫面水平

主程&編譯結果

部分子模塊

未完待續

文章利用空餘時間不定時更...

文章來源: https://twgreatdaily.com/zh/1c3ab2b6bf02df914aa0b45d068b3ad6.html