单片机---HLK-W801移植Nes模拟器(一)
總目錄
《單片機—HLK-W801移植Nes模擬器(一)》
《單片機—HLK-W801移植Nes模擬器(二)》
《單片機—HLK-W801移植Nes模擬器(三)》
背景介紹
年關將至,不過學習的腳步不能停,最近在著手研究一個能在單片機上運行的Nes模擬器,就是我們小時候常玩的紅白機。
參考了網上的各位高手的文檔,發現STM32上的居多,但是要能夠存儲和運行Nes模擬器,對rom和ram的要求,相對來說還是高一些,手中的103FC8T6目前還不能用,因為存不下也運行不起來。
不過還是被我發現了一個絕世高手的文章,最終運行ram居然只需要30多Kb,2013年的文章,這個真是不服不行。
傳送至大佬文章
所以準備試一下前一陣買的HLK801,畢竟這個主頻和存儲,都沒大問題。
開搞!!
代碼準備
LCD驅動
目前是采用了之前用過的SPI總線的LCD,驅動芯片是ili9341。這塊就不細說了,就是初始化SPI總線,然后按照手冊讀寫。
模擬器源碼
源碼可以從大佬的文章中下載下來使用。
環境準備
開發環境搭建參考前面的文章《單片機—HLK-W801開發環境搭建》,還是采用了默認的SDK程序包,然后將nes模擬器的代碼,添加到app路徑下。
然后,將我們之前用到的ili9341的LCD顯示屏也一并移植過來,放在同級目錄,這里目前只需要實現一個描點畫圖即可,最后的圖像顯示,就是通過描點的方式顯示出來的。
整體結構如下
漫漫征途
接下來就是開始漫長的編譯,解決問題過程了。
首先添加必要的頭文件鏈接路徑
然后將lcd的頭文件包含在info_nes.h中。最后main包含info_nes.h就可以調用nes的函數和lcd的函數了。
主函數書寫如下
開始編譯起來吧。
mapper包含編譯問題
我們在mapper.c中包含了一系列的nes提供的mapper文件,但是在編譯的時候,回去自動重新單獨編譯這些cpp文件,這與我們本來打算只編譯InfoNES_Mapper.c的初衷是違背的,所以這里就選擇了一種方式,將其cpp都改為頭文件,然后就不再編譯了。
重命名兩百個文件,采用了bat腳本方式
放在mapper路徑下,雙擊執行即可。
然后把所有包含的名稱也對應修改即可。
然后重新刪除nes路徑,再添加到工程中。
圖像顯示
代碼中的顯示方式為逐行掃描,每行更新,所以這里只修改行顯示
void InfoNES_LoadLine() {int i;if(PPU_Scanline == 0){FrameCount++;InfoNES_LoadFrame();}for(i=0;i<240;i++){ILI9341_DrawPoint(i,PPU_Scanline,WorkLine[i]); //lcd_ili932x_pixel_draw_step2(WorkLine[i]);// GrContextForegroundSet(&sContext, WorkLine[i]);// GrPixelDraw(&sContext, i, PPU_Scanline);} }編譯成功
燒寫,開測!!!
上來就是黑屏待遇。
不放棄,正當我在閱讀代碼的時候,屏幕突然出了圖像!!!
這熟悉的配方,眼淚都要掉下來了。開來啟動需要一些時間。
然后修改一下劃線的函數,不過可能是因為這個高低位的問題,這么以修改,速度提高了,但是顏色變了
void ILI9341_DrawLineOne(u16 y,unsigned char* data) {ILI9341_Address_Set(0,y,240,y);//設置光標位置 GPIO_DATA();//寫數據tls_spi_write(data,480); }然后提高了一下SPI的速度,這下稍微能看了一點,不過還是很有延遲,再打開了跳幀
效果如下
今日總結
今天就做到這里吧。其實這個玩意已經嘗試了好幾天了,手里的芯片試了一遍,發現只有W801能放得下,然后就是各種內存不足,只好在網上搜索,直到看到那位高手的方法,他的修改已經建立在對這個模擬器相當熟悉的程度上才能做出那種修改。
要學習的東西還很多。
明天再添加按鍵和嘗試提速。
結束語
搞這個東西真的會上癮,今天中午連飯都沒去吃,也沒休息,哈哈。
還有一天就放假了,那么所有的工作
總結
以上是生活随笔為你收集整理的单片机---HLK-W801移植Nes模拟器(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简历信息粘贴板
- 下一篇: WIN10下Apache启动失败