注:文章可能有所謬誤,若發現請在評論區指出
0.前言
0.1 為什麼要自制一張卡帶
大概是20多年前時候,家裡老爹給我買了一臺小霸王遊戲機,哦不是,是學習機,當然我從來沒有拿來當做學習機過,這也算是和絕大多數人一樣,開啟了遊戲的啟蒙。
![](https://image.gcores.com/f004cc3d-d008-4396-bc96-6a290f7bab39.jpg)
有時候為了買一張卡帶,我會走半小時去很遠的文具店,就為了省下公交費用,但當年的卡帶很多忽悠人,比如什麼500合1,可能375都是重複的(當然現在還是會這樣幹)。
現在各種卡帶,不管是自制還是原裝的,都已經隨處可見,而自己製作卡帶除了是探索與學習外,也是願望,是完成童年懵懂時候的期待,這些是網購一張成品所不能給予的。
所以,自制卡帶的理由有:
- 對FC/NES卡帶的研究
- 瞭解NES與FC的差異
- 結束以前的遺憾
- 情懷
- 情懷
- 情懷
0.2 如何自制一張8位機卡帶
其實從理論來說很簡單,只要你燒寫的內容是機器可以讀出的數據就可以了,幾乎所有卡帶機應該都是這樣。比如下圖就是一張玩家自制的SNES卡帶,上面只是有一個EPROM(紫外擦除只讀存儲器),只要焊接好再插上去,讓遊戲機去讀這個ROM就可以了。
![](https://image.gcores.com/74458976-5565-4d21-ba36-75aa9cd92190.jpg)
但實際上,更早的8位機受限於性能,所以卡帶的設計完全不是什麼“單純的存儲器”,而有更全面的設計思路,畢竟機器再升級硬件不現實,但卡帶可以升級,甚至後面能處理一部分音頻數據。
![](https://image.gcores.com/182e1f9a-36a5-4301-bbe9-ffe78cd0194f.jpg)
所以這一次就來聊一聊,NES和FC的卡帶、機器的差異,並且說明一下如何正確的燒寫遊戲到自制的UNROM類型NES卡帶。為什麼是NES不是FC?因為NES卡資料更多,所以製作難度低也比較容易入門。
![](https://image.gcores.com/ba88c602-7ab7-4439-b095-41e01e5ce295.jpg)
1.NES和FC卡帶的區別
在一切開始之前我覺得有必要科普一下一些知識,比如很多人(包括我)有聽說FC和NES在硬件設計上沒區別,那麼很容易就會默認卡帶也是沒有區別。而且對於絕大多數接觸FC仿製機的朋友來說,很難了解NES的相關情況。
![](https://image.gcores.com/200b2166-e114-4b91-be86-638960df6807.jpg)
然而事實上區別還是有的,並且還挺大,這裡就來說一下FC卡帶和NES卡帶的主要的差異。
第一點,外觀設計差異
在卡帶外觀上的差異非常顯著,FC卡帶通常都比較小。
![](https://image.gcores.com/7cc4b8d8-9c3a-4282-86e8-abaaf4454fe3.jpg)
而NES卡帶和機器一樣,是為歐美市場特製的,富有力量、粗獷和男子漢氣概等各種80年代歐美文化要素,所以它的外觀很大,當然裡面的板子多數時候沒有那麼大。
![](https://image.gcores.com/9943fbf2-dacb-4c88-b562-7e6e158b50bf.png)
但也有極少數的,很大的時候,比如這一個《最終幻想》的卡帶,上面甚至有兩個PRG ROM用來存放高達256KB的遊戲資料。
![](https://image.gcores.com/4bed2010-c88d-4838-bdb0-fecd02f415d4.png)
然後這時候可能會想到,為什麼以前買到的黃卡,可能有些既不是上面這種規格也不是NES這種?
![](https://image.gcores.com/3c7a9c4e-459f-47d1-9697-c6722e2910e7.jpg)
這是因為黃卡在早些時候,使用了大容量的ROM,加上上面的Mapper芯片AX5202P也很大(後面我會說這是什麼),所以板子完全不是任天堂原版FC卡帶尺寸能塞下的,因此有了這樣的大黃卡。
![](https://image.gcores.com/c85cc7c3-2eb9-4604-b810-5b5acc1b9811.jpg)
當然這還和產業鏈有關係,例如批量的未授權黃卡必然代表有人在批量的生產這種大體積的外殼了,只是因為當年的任天堂沒有國內代理公司也沒有分公司所以這些事情都沒有被追究。
第二點,CIC(Checking Integrated Circuit)芯片
從內來看,NES的卡帶是需要有區域識別芯片的,防止把其他地區的卡插到美國遊戲機上,如果沒有這個芯片,無法正常地讀取ROM
![](https://image.gcores.com/ac9d3244-0426-4186-a256-abe198e13bb9.png)
可以看到,雖然都是UNROM卡類型,但是下面這個FC的卡帶沒有區域識別芯片,也就是最左邊的這一個。不過辦法其實還蠻多,CIC芯片可以通過額外配置(飛線外掛)的方式實現讀從而讓機器正常運行,或許這也算是任天堂最早的防盜版方式的應用。
![](https://image.gcores.com/8b96fd89-d555-4bb7-b8c1-1f3623afd5ee.png)
我看了後就想,要是直接在NES主機的插槽那邊安裝一片CIC,豈不是任意卡都不用裝這個芯片了?
第三點,插槽差異與說明
NES卡帶的插槽更寬並且引腳數量和FC的差很多,一個是72pin一個是60pin,多出的引腳一部分就是用來做識別使用,然後有一些EXP引腳,或許是用於外設、擴展等類。
![](https://image.gcores.com/8a2f3aeb-5c72-4793-94ee-f93c3b631acf.jpg)
可以看到這些引腳在卡帶上並沒有接線,沒被使用到。
![](https://image.gcores.com/a3667d7f-2844-44cc-a865-6a4f1050e47d.png)
也因此,可以輕輕鬆鬆地把FC卡帶轉接到NES卡帶上面。這樣的轉接器還蠻多。
![](https://image.gcores.com/61cc9707-a249-4941-a306-d36cdab6289c.jpg)
當然卡帶轉接也可以只是為了轉區而轉,比如這樣一張用於轉區的MD轉接器。
![](https://image.gcores.com/7b1efc2d-f7e8-4cdc-9501-072202e92352.png)
那這裡可以說一下卡帶插槽的線路了,和現在大部分串口不一樣,早期存儲器是並口的,也就是數據是一次讀出8Bit。這裡的D就是Data,而這部分是內存一次讀寫的數據量。
![](https://image.gcores.com/0172130e-bce0-42d7-8ea2-85883cb527fe.png)
想要確定讀取的地址是哪裡,就需要地址線也就是下圖標註的A,Address,內存地址相當於門牌號。可以看出來FC在設計上最大支持15bit的地址線,因此地址最大值為就是2的15次方,數據存儲最大值為8bitx2x15也就是256Kbit合32Kbyte。但是,這裡的引腳連接的是PPU,PPU硬件只能讀8KB,所以雖然支持32KB但實際只有8KB可以讀出。
![](https://image.gcores.com/b6adbb5a-960d-44ab-9e9a-3be6f8e0be85.png)
這些前面帶有P的,就是用於讀取PRG ROM的引腳,這一看也是15bit,所以說FC默認設計下就是隻支持32KB的PRG ROM和8KB的CHR ROM。
![](https://image.gcores.com/04c924b3-8a87-4dfc-b5f1-e612c9f2df34.png)
所以這樣的引腳設計,使得最基礎的,沒有任何用於提高尋址範圍的邏輯芯片的卡帶基本上是這樣子的。
![](https://image.gcores.com/f2ab5059-1d14-495d-80e6-6a17bda69a60.png)
第四點,卡帶的安裝方式
雖然說FC卡帶可以直直的安裝,但是NES的卡帶是要按下去(注意手的操作)讓上下兩排都物理接觸才能正常讀取的。但我買的一張合卡在彈起的狀態下,居然也沒有問題。
![](https://image.gcores.com/a783a3cf-9ccb-4b8d-8c3c-75c8d68cc60b.jpg)
這種需要按壓才能正常讀取的操作除了安全起見,也是為了防止一些問題,事實上NES已經非常儘量的做了減少問題的設計,包括但不限於防止力氣大導致卡帶反向插入。
![](https://image.gcores.com/9aa00c26-51ea-4766-9e45-d7fc6201f944.gif)
若回看一下剛才的引腳定義可以發現,不管是FC還是NES,卡帶的右上角和左下角的VCC供電引腳都是對稱設計,這樣就算是插反了卡帶也不至於損壞。
![](https://image.gcores.com/db523a54-5795-4f04-a579-76284cd6fb7c.png)
2.理想、現實和一堆卡片類型
在最開始的時候我的理想是我想要玩什麼遊戲就做哪個遊戲,但實際上,完全不行,甚至很不好選擇。
這個是因為遊戲的不同所以使得卡帶有不同的特性,比如說有的遊戲需要存儲存檔文件(例如《最終幻想》),有的遊戲程序聲音和圖像存在不同的芯片內(例如《馬里奧》),還有的自帶音頻芯片(比如KONAMI的《魍魎戰記》),這些不一樣的需求和設計,使得卡帶類型多種多樣起來。
![](https://image.gcores.com/a592ab17-84df-4344-b27b-0b5cb06848a5.png)
加上FC和NES的不同,讓卡帶的種類幾乎翻倍,而因為一些限制比如說國內研究卡帶的人不多大多數受限於時間只能收藏,所以很少有關於FC卡帶的數據庫和研究,也因此你可以看到模擬器叫做NES,卡帶數據庫也都是以歐美卡帶為基準來建立的,關於FC的卡帶的研究,相對NES的少一些,公開資料也更少。
那麼,常見有哪些?NROM,AxROM,UxROM,TxROM,CxROM,VCRx等等,還有很多,在這裡舉出的卡帶類型中,這一個x代表某個字符。
![](https://image.gcores.com/dcb98da6-de05-42dd-97e8-f644908b3443.png)
其中還會產生一些細分,以TxROM舉例,可以看到有分自帶CHR ROM和CHR RAM的差異。
![](https://image.gcores.com/21d96ff6-d48b-4ef9-9af8-275d22bd0a27.png)
總的來說這樣一分,卡帶的類型可以說是非常多了。所以在一些抉擇後,以及在資料的搜索難度極力求簡的背景下,我認為最適合教學的是UNROM卡帶,它多數時候就只有PRG ROM和CHR RAM,在芯片燒寫時候只需要燒寫一片PRG ROM。
![](https://image.gcores.com/96cc8931-a113-4bef-9e84-a9ede0e63278.jpg)
當然既然有相對簡單的就會有相對難的,比如說TxROM這種,帶有電池記憶和RAM,還有CHR ROM,MMC芯片,PRG芯片等。像是TxROM這類MMC卡帶的特點是,MMC卡有一個專門的芯片MCC芯片來實現對更大容量的ROM支持,而其他的有些就只是用邏輯芯片來完成這一操作比如UNROM。
![](https://image.gcores.com/78c410d7-e6c5-46a3-9786-58c62516fede.jpg)
很多英文和中文混一起就看不懂了?下一章節我會介紹各種芯片作用。
3.卡帶的主要芯片的說明
3.1 CHR ROM
用於存儲遊戲的圖形文件,這是一個只讀存儲器,但有些遊戲並沒有使用到這個,具體表現為使用FamilyROM工具打開ROM文件會發現CHR是空的
所以,在一些時候它才會被需要,裡面會填充這樣的數據,如果是在PC端可以使用YYCHR工具查看CHR ROM裡面存儲的圖像
![](https://image.gcores.com/62373361-d0c3-475c-ad32-00770621d36e.png)
3.2 PRG ROM
用於存儲遊戲的程序文件,這通常是一個只讀存儲器,也是所有卡帶必備的一個芯片,可以沒有CHR ROM,但是PRG ROM必須要有。
3.3 CIC芯片
CIC這一個芯片的作用很簡單,就是區域檢查,用來和主機那邊聯絡以確定你是不是把美版的卡帶插在NES,把日版的卡帶插在FC上。
3.4 PRG RAM
這一個隨機存儲器在除了UNROM以外的卡帶上會配備,有一些遊戲因為設計原因會需要使用RAM來讀寫一些文件,因此就使用到這一片芯片。
3.5 CHR RAM
用來存儲ROM中的精靈的數據,精靈指的是FC設計上由PPU處理的圖形數據,比如《馬里奧》中的馬里奧。
CHR RAM是用於存儲PRG ROM中的數據,包括場景的翻頁等等,或許可以理解為顯存的緩存,PPU原本只能支持8KB,但現在可以通過從PRG ROM不斷取用放進CHR RAM來突破限制。
3.6 Mapper芯片
因為尋址大小關係,所以6502本來最大隻能40KB的PRG ROM和8KB的CHR ROM,但是80年代哪來那麼小的遊戲呢,所以,為了解決這個難題,比較基本情況就是使用Mapper電路芯片來輔助,實現超越CPU限制的32KB和8KB大小尋址範圍。下圖就是一張超級馬里奧兄弟的SNROM類型的卡帶。
![](https://image.gcores.com/3df33cea-80d6-4de4-9bae-61ce01c7c2d8.jpg)
Mapper芯片,通稱MMCx芯片(x等於某個數字也表示芯片代數),這個芯片的作用直白來講就是讓尋址範圍更大,能支持更大的ROM,比如1024KB,一塊芯片就能替代繁雜的邏輯芯片,解決設計短板。除了任天堂自己生產的,國產的AX5202P是目前還能買到的少數Mapper芯片的一種。
![](https://image.gcores.com/e1173fff-c91b-47f7-b4b4-2fd932b68f02.png)
這個芯片早幾十年就停產,因為後面已經有了集成度更高的“牛屎”,板載環氧樹脂封裝,也叫邦定封裝,有個說法是沒有硬封裝是因為80年代我國芯片產業嚴重受限沒有設備。
![](https://image.gcores.com/974779e9-afb6-4ba2-9386-d47fc97ef706.png)
需要在意的一點是,牛屎不是國產“專利”,任天堂官方也會使用牛屎芯片,因為這類封裝體積小,成本比硬封裝的便宜一半有餘。
![](https://image.gcores.com/31918600-e814-4bc5-81e1-78a5dec41438.jpg)
4.準備適合的ROM文件
前面已經說明了,不同遊戲會對應不同的卡,比如《超級馬里奧》是UROM,《松鼠大作戰》是SxROM,而《魂鬥羅》是UNROM,各不通用,那麼想要找到遊戲和卡帶的對應,會需要一些查詢。這裡我提供兩個使用到的網站,它們羅列出URNOM類型卡帶的遊戲。
NES Directory - Mapper 2
nescartdb.com
![](https://image.gcores.com/ff115655-a8ed-4a8e-ad92-925079a56ab2.png)
找到遊戲名稱之後,可以到一些具有遊戲數據庫的網站去下載ROM測試,在研究過程中我發現這三個站點結合使用效果最好:
bestoldgames
emulatorgames
wowroms
![](https://image.gcores.com/5292ac54-a6a6-4bee-8b8b-99ffdfdeeef2.png)
甚至在emulatorgames平臺你可以先試試遊戲怎麼樣,這家對80年代遊戲的查找命中率相對較高。
![](https://image.gcores.com/b1af048c-73cd-404c-9e9f-8a7cd3b6130a.png)
在查找並且下載了你需要的ROM後,我們會需要使用這一個工具FamiROM,這一個工具的作用非常簡單,就是能切分.nes格式的文件為CHR和PRG 兩部分ROM文件,並且顯示必要的信息
![](https://image.gcores.com/79ecbb03-7eb3-44e1-bbcf-4a07cef10942.png)
當然並不是所有文件都能被正常讀取,事實上我測試了一下讀取率在12%左右,出現下面這類提示不是權限問題什麼的,而是軟件不支持。
![](https://image.gcores.com/a41c8f98-3d90-4dc2-b4ca-a01d7586e8e6.png)
當然你要是下載的一定是UNROM的NES文件它一定可以讀取,或者湊運氣從這些隨處可以下載到的ROM合集中一個一個嘗試能不能被famiROM軟件識別也可以(我確實這樣幹過)。
![](https://image.gcores.com/247d21bf-2660-4ad3-97b4-3edd03a098a9.png)
在使用famiROM打開一個UNROM的ROM後,選擇PRG的大小為512KB,並且點擊split。
![](https://image.gcores.com/fbc15d72-c389-4425-b348-421ffbcd3aee.png)
之後就可以在.nes文件邊上看到.bin文件,也就是我們將要燒寫進卡帶ROM芯片內的數據。無論多少大小都要選擇512KB。
![](https://image.gcores.com/647d6a05-54d5-4f7e-a199-1c2a03d91cc9.png)
5.如何製作一張UNROM卡帶
製作這塊,我儘量想著寫的簡單一點,但是簡單一點似乎就會造成更多的不方便,等後面有視頻教學我想可以所有人看得懂為目標。因此這一篇文章中的第五章節開始,可能會有一些基礎知識被忽略,總的來說如果您不太瞭解一些名詞,這是非常正常的。
一些製作過程遇到的問題我也不刪減而是全部放出,作為未來的經驗參考。
5.1道具準備與硬件的製作
在理解了前幾個章節的內容後,我們可以開始著手進行製作了,那麼我將會列出所有使用到的東西
會使用到的工具:
- 吸錫帶
- 吸錫器,越大越好
- 無鉛焊錫,有鉛當然也可以
- T12烙鐵,推薦搭配刀頭
- 用於ROM和CIC的編程器
- 剪鉗
製作一塊UNROM用到的元器件:
- Attiny13
- SN74LS377N
- SN74LS32N x2
- SN74LS139(可選)
- UNROM 512 SinzoMOD VA1或原版UNROM512
- 39SF040
- UT6264
- 104獨石電容 x5
- 3mm LED
- 470k電阻
製作UNROM測試板所需要的:
- IC插座 8P
- IC插座14P
- IC插座 20P
- IC插座 28P
- IC插座 32P
- 防靜電手套
軟件:
Windows系統,NES Emulator,famiROM工具,還有上述燒錄器對應的控制軟件。考慮到對難度的優化,我打包了會使用到的幾個工具,當然不保準鏈接會失效。
鏈接:點擊跳轉,提取碼:jayg
當然這裡有個很重要的東西是PCB板,這裡我提供下我修改的UNROM512板子的gerber文件,它會更加匹配這一篇文章,出於一些戰術考慮,我配置的協議是CC-BY-NC 3.0,若您是個人使用可以隨意發揮,未授權商用將侵權(包括閒魚)。
鏈接:點擊跳轉,提取碼:3tx2
在下單時候必須要注意,一定要選擇1.2mm厚度因為卡槽支持的是1.2mm,當然如果真的不相信這個厚度,硬插壞了可以在網購站點搜索NES 72 Pin Connector重買一個槽。
![](https://image.gcores.com/4589cb44-b830-4caa-98a0-933a0850bf5d.png)
為什麼要注意這個厚度呢,我不會說在最開始的研究初期,打板打成了1.6mm,還是別人提醒我才發現的。
![](https://image.gcores.com/6dc1dae6-d9c2-4250-b4a6-9219ae471f4f.jpg)
在製作上面,我個人是先行焊接一個都是插座的板子,它將被用於測試與驗證CIC以及ROM。
![](https://image.gcores.com/7eef38b3-c215-4a91-9248-9e8b0ac0038d.png)
這樣帶來的好處是可以通過替換芯片的方法來驗證是哪部分有問題,我用一個鑷子可以輕鬆的從插座上面撬開芯片。
![](https://image.gcores.com/37fc3641-4a8d-478f-bc41-db0229e37950.jpg)
等驗證板都驗證清楚了,確實沒有問題後,再焊接為一塊成品UNROM遊戲卡。
![](https://image.gcores.com/fa761b05-2f9c-4cb8-9b3e-06a94d11b782.jpg)
NES卡帶的內部空間並不能容納帶插座的板子,需要裸板測試。
![](https://image.gcores.com/b7daf935-4b9f-42f5-9b9c-d472906a2d1c.jpg)
還必須要拆機來方便插入卡帶,NES的拆機沒有什麼難度所以這裡不做說明。
![](https://image.gcores.com/c4114bb7-accb-4914-b2a6-636c35f263d6.jpg)
在所有測試完成後,成功焊接出來的板子會長這樣。
![](https://image.gcores.com/e857a0ef-71c5-49ca-aa00-3041fa3ee6e5.jpg)
5.2 CIC芯片的自制嘗試
在實現上,有些時候可以使用原廠的芯片比如說Nintendo 6113B1,但我推薦使用Atmel公司的Attiny13來自制,最為廉價的情況就是利用avrdude軟件+Arduino ISP以及Attiny13這一個芯片,這也是目前比較實用的解決辦法但有嚴重弊端。
在一開始採用這種方式,使用一個Arduino Nano做成了燒錄器。
![](https://image.gcores.com/5945594b-0737-4baf-8a5b-6626d8b7242b.jpg)
這種使用Attiny13燒錄程序變成CIC芯片的操作的原作者開源了代碼,並且放出BIN二進制文件下載。
如果使用命令行來燒寫我用的語句是這樣子的,需要保證你已經安裝了Arduino IDE
Avrdude.exe -C C:\Users\wzx13\Documents\ArduinoData\packages\MicroCore\hardware\avr\2.1.0/avrdude.conf -v -pattiny13 -cstk500v1 -PCOM3 -b19200 -Uhfuse:w:0xfb:m -Ulfuse:w:0x70:m -Uflash:w: D:\Download\Avrciczz-v3.tar(1)\avrciczz-v3/avrciczz.hex:i
可以使用GUI,也就是有界面的配置工具 ,需要注意的是,熔絲位必須是低位0x70、高位0xFE。
![](https://image.gcores.com/71ca5124-1671-4ac3-a48f-6d2ad9578d7b.png)
但是一番燒寫下來,雖然提示我燒寫成功,但是我總覺得CIC不太對,因為識別不正常一直在灰屏閃爍,這是機器在自己復位。
![](https://image.gcores.com/970ec175-54ba-483d-9aca-bef6b65140fc.png)
我是如何知道的?挺簡單,我有一張140IN1的NES卡帶,我拆下了CIC 芯片(和我的是同樣型號)進行驗證。
![](https://image.gcores.com/2b8ceeb9-3585-4553-9908-a1117a8bef57.jpg)
為了方便替換,我焊接了一個直插座。接著通過把【我燒的CIC芯片】插在【140IN1卡帶】以及【140IN1卡帶CIC芯片】插在【我做的卡帶】上,可以得知我做的卡帶ROM和CIC芯片都沒弄好。
![](https://image.gcores.com/f42a493b-0ea2-48c4-a616-1a2cd06eeca2.jpg)
是不是CIC芯片的開源文件有問題?我試著使用讀取的方式來實現導出【140IN1卡帶】的CIC芯片中燒寫的程序,具體語句如下:
avrdude.exe -CC:\Users\暱稱\Documents\ArduinoData\packages\MicroCore\hardware\avr\2.1.0/avrdude.conf -v -pattiny13 -cstk500v1 -PCOM3 -b19200 -U flash:r:attiny13flashdump.bin:r
除了這種工具外,我又測試了幾個工具後發現, AVRDUDESS 這一個是在功能上最好的GUI工具。所謂GUI就是有這樣的圖形界面,當然需要進行一下配置,像是圖中這樣。
![](https://image.gcores.com/6ff5fcd9-f2d4-4d57-8243-3350558482b8.png)
我使用我已經燒寫過的芯片進行一下測試,熔絲位好像可以正常的讀取出來(熔絲位:一種芯片自帶功能的配置參數,類似於內置開關),但是又覺得不太正常。
![](https://image.gcores.com/76c3ff73-3e17-4aa5-9704-c91076e729f1.png)
通過強行讀取確實是讀取出了【140IN1卡帶的CIC芯片的程序】,但是並不是很確定是否真的成功。
![](https://image.gcores.com/159ada54-2783-4b97-a0db-6f9b516f7f0c.png)
另一邊比較糟糕的事情是,在一整天的嘗試過程中,我可能是把三片芯片都給全部損壞了,無法讀取芯片的識別碼,損失重大。
![](https://image.gcores.com/043acb71-7201-446c-bc25-3aea8e07bc92.png)
還有一個USBASP燒錄器,這個東西很便宜,我承認是為了湊單買的。
![](https://image.gcores.com/4c6d582b-b4bf-4698-a231-ce9237543bfb.png)
然而,我在電腦藍屏幾次後,它也是一起無法使用,直接提示找不到設備,當然這個東西只要9.9包郵,我也不太指望能用幾次。
![](https://image.gcores.com/f04d4d25-dae4-440d-8b4b-36f98634fea4.png)
小結
- 這一些9.9包郵的下載器不靠譜
- 自制燒錄器雖然很廉價就可以獲得,但是並不靠譜
- 在不斷燒寫中,芯片可能都壞了?但不確定是不是插座問題
5.3 新設備的進入
當然這樣也不是辦法,在【認為手頭芯片都報廢】的幾天後我收到了我買了一個新的工具,燒錄器MiniPro TL866A,我購買的是二手的,售價在150左右。陰差陽錯的,收到後我發現居然和參考的一篇文章作者用的是同款。
![](https://image.gcores.com/6fd76c78-c4b2-4420-a7a5-c5077208b0fd.jpg)
另外我又額外的購置到了比較便宜的翻新Attiny13(又不是不能用),只要3元就有一個,關鍵是10個包郵。當然他們不是最先買的那種DIP8的封裝了,而是這種SOP8的封裝。
![](https://image.gcores.com/b7be74c4-0b43-45ac-ac31-9c03221bda38.jpg)
這也意味著我必須要買個SOP8彈跳座,用來在不焊接的情況下,使用編程器燒錄芯片。
![](https://image.gcores.com/a44e7ca6-334c-47af-991a-c083959d9f2c.png)
但是臨時原因在撰寫文章時候還沒有到貨,所以我使用倉庫中剩餘的這些轉接板來轉成DIP的。
![](https://image.gcores.com/efa72d36-d56e-4c7a-a4cc-a8ca57c2c87e.jpg)
因為通用性好,所以能用這一個裝置就燒錄手頭幾乎所有的芯片,包括27Cxxx(紫外擦除芯片,中華學習機的ROM是這個系列),39SF040(這次用的裝PRG的ROM芯片)。趁著之前燒壞的芯片還沒被我丟掉,我想著試試看先前時候讀不出來的芯片還行不行,結果當然是毫無問題,看來之前感覺出問題是因為自制的燒錄器壞了。
![](https://image.gcores.com/c2ca0180-73d9-4714-b903-a2abcf1a72c8.png)
然後我去讀了【140IN1卡帶】上面的那一個CIC芯片,發現是加密的(這是當然),可以看到右邊ASCII碼全是ABCDEFG。
![](https://image.gcores.com/6c460107-09d8-46b9-be32-7cf797592eb4.png)
5.4 CIC芯片燒寫流程
這裡以TL866對應的MiniPro燒寫器為例說明如何燒寫CIC芯片,其他也是大同小異。
![](https://image.gcores.com/f1a43bfa-fe2f-44c1-83fb-23f30cde3397.png)
第一步,打開軟件並且選擇ATTINY13,按照提示正確的安裝Attiny13芯片到編程器上。
![](https://image.gcores.com/e9a8adfc-14df-4ec2-88c1-e720f391d320.png)
第二步,選擇AVRCIC的程序文件avrciczz.hex,文件包的下載地址鏈接:點擊跳轉,提取碼:5e0a。
如果失效了可以看一下文章的評論區是否有補檔。
![](https://image.gcores.com/0510dfd4-972f-4cfa-af3e-2801107e4a20.png)
第三步,選擇熔絲位Fuse Byte以配置芯片功能,很多時候忘記這一步會導致芯片沒有正常的發揮作用。
![](https://image.gcores.com/d772009b-75f6-44ef-acce-4c57c3be10cd.png)
第四步,點擊編程按鈕,CIC芯片的燒寫就完成了。
![](https://image.gcores.com/2b108cce-616f-4e1c-924b-9f12e81daa9a.png)
第五步,使用驗證板進行測試。這裡要注意的是,剛剛燒完後,需要很多次的RESET來讓芯片自動識別區域,具體會需要5-20次。
![](https://image.gcores.com/52267e7a-6d4f-457f-b90e-7ea808de3a04.jpg)
如果說按壓多次RESET都不正常,還可以嘗試使用一個棒狀物輕微壓住卡帶。
![](https://image.gcores.com/1f5660c6-1ecd-4ef7-a28a-7bd46620c36b.png)
5.5 PRG的燒寫
在比較早的時候,我有一個編程器 TOP2000 ,和後面的序號一樣,是一款1999年左右的產品。之前時候我用來處理中華學習機的EPROM。
![](https://image.gcores.com/1fa980bb-4ce4-431c-9d46-749145d28188.jpg)
然後,我發現一個大問題, 就是這個編程器的處理EEPROM的速度有點慢騰騰。在設計上,默認使用39SD040,也就是512KB的芯片,而你如果使用這一片的話,寫的時間硬生生的拉長到了45分鐘。
![](https://image.gcores.com/c53412e7-6ff0-4bf7-a85e-4ac21122f750.png)
但是,因為之前處理CIC芯片我買了一個新的編程器TL866A,所以新的編程器燒寫很快的同時,也讓燒寫的內容終於是正確的。算了一下速度,大概是比之前的TOP2000型號編程器快了60倍,只要44秒。這告訴我們,不要為了省錢買老舊生產力設備。
![](https://image.gcores.com/c7a982d7-ef44-437a-b807-66c5a26be32b.gif)
但我看了一下訂單歷史,這價格、時間好像也沒有差很多。
![](https://image.gcores.com/5ebe5439-cb8b-480f-91bc-8ed04e62e20f.png)
因為如何燒寫與上面的5.4章節所述的是基本一致,所以不再複述,選擇39SF040就可以。
![](https://image.gcores.com/241f0505-2bd4-4769-a1e9-cc4a555abd79.png)
整個過程是非常簡單的,至於PRG文件的獲取,查詢看第4章中的描述。
![](https://image.gcores.com/2960e4c4-04c4-4dc8-b985-0bb927fc228f.jpg)
我通過這種方式燒寫並且確認一些可以正常遊玩的遊戲,具體的遊戲文件等,我放在下載包內。
![](https://image.gcores.com/b8a970de-4a7a-4b05-8177-2b8387f5b15a.png)
5.6 UNROM512的選擇連線
在設計上,UNROM512被配置為可以讓PRG ROM中的程序自行重寫PRGROM,這樣就可以免去電池以及存儲數據的SRAM,也因此就有了一塊額外的139芯片以及許多選項焊盤。這些焊盤的連線對重寫PRG至關重要。
當然在一開始時候我因為是測試板,用的是普普通通的直插腳座,所以就不是很在意這種設計。
![](https://image.gcores.com/c2cabba1-a2bb-4f2d-b693-bfce0e32b65c.gif)
經過一些嘗試後,我發現主要需要選擇的,目前只有一個 ONE,VERTICAL和HORIZON的連線選項,這決定了屏幕的刷新方式。
![](https://image.gcores.com/783dbf54-3cb8-446d-887c-0ec58cd4e03e.jpg)
ONE是整屏翻頁,VERTICAL是水平捲動(比如《魂鬥羅》、《超級馬里奧》),而HORIZON是從下到上(例如《1943》,《彩虹島》)。
![](https://image.gcores.com/8aeaaea2-050c-4e9d-83aa-21de201efcfd.png)
如果選擇錯誤的話,就會出現頁面刷新的一些問題,比如這樣,當然遊戲還會正常的運行就是了:
![](https://image.gcores.com/31916f10-670c-43df-91c7-b1b3d544a5e2.jpg)
具體的連線和是否要啟用【Flashable】功能有關係,通常都是不需要的,所以只要這樣連線就可以:
- 連接FLASHLOCK的4個焊盤
- 不安裝139芯片
- 不焊接FLASHABLE焊盤
![](https://image.gcores.com/c5e9875f-37ee-4233-9271-12cdb10936ff.jpg)
在經過最後的測試後焊接,一盤正經的NES遊戲卡帶《魂鬥羅》美版就燒寫好了。
![](https://image.gcores.com/bba65f01-3865-4460-af92-6a745361bb23.png)
6.卡帶外殼和貼紙
6.1 外殼的獲取
如果說是FC,沒外殼還湊合用,但是NES的話,要是沒有一個合適的外殼那就只能機器和卡都裸著了。
![](https://image.gcores.com/04d90414-4196-4bd6-a762-b1068af9e001.png)
所以我們需要卡帶外殼,我購買的外殼來源是1688,我看了下加上郵費也比TB的更便宜,所以一次買了一些足夠我塞我想玩的幾個遊戲。
![](https://image.gcores.com/433504bc-9fdc-4861-9c72-4691d0f05142.png)
最終的效果是這樣的,我們做的PCB可以正常的被塞進外殼裡面,成為真正的卡帶。
![](https://image.gcores.com/df91d532-c4fc-477a-8ecc-05c9a59ee3dd.jpg)
6.2 貼紙的獲取與製作
如何查找原版卡帶貼紙,依然還是使用nescartdb.com這一個站點來進行,搜索遊戲的英文名稱即可找到卡帶表面的掃描圖片。
![](https://image.gcores.com/be080ca9-ed67-4910-9135-eed458035cbf.png)
如果實在找不到,用英文斜體寫也可以,這樣會顯得像是一張內部流出的測試卡帶,比如這一張《最終幻想2》。
![](https://image.gcores.com/fc50ca66-6c0c-4aa2-9d4e-8f3b72cfce71.jpg)
表面的貼紙建議使用光面的來打印效果最好,我雖然有光面紙但打印機的彩色墨盒早早損壞了,因此後面就不提供實際的彩色的效果。
![](https://image.gcores.com/719924d3-8e74-496d-9809-e8a65b97ccb0.png)
在下載後使用PS打開,可以看到並不是一個正常的比例,換句話說直接打印一定是比較小的,那麼需要著手進行解決。
![](https://image.gcores.com/81fb77f7-e8e2-4cb4-89cf-2debfdf2235f.png)
為了獲得正常尺寸,先對手頭的空白卡帶進行圖像掃描,沒有掃描儀也沒關係,章節末尾我會給出免費模板提供給各位。
![](https://image.gcores.com/bf16704c-d28a-424e-a290-38e49bc703e6.png)
把下載後圖片和掃描出來的圖片放在一起,然後對下載的封面進行調整。
![](https://image.gcores.com/8275bb52-607b-4547-aa98-0ea7d2219b53.png)
經過一些簡單調整我最後製作了這樣一張正確比例的模板,使用A4進行打印, 鏈接:點擊跳轉,提取碼:y0w2
![](https://image.gcores.com/79ae012f-cc62-4409-9869-1c5fa3700f3a.png)
對比一下,左邊是普通的A4右邊是光面紙,在觀感好很多:
![](https://image.gcores.com/58be2042-63d2-47e2-a7c1-d022c49315d5.jpg)
最終的效果
![](https://image.gcores.com/82fe00ca-b431-4e32-b479-437626e28bf7.jpg)
![](https://image.gcores.com/beb83f24-3b06-494a-83ad-32fc6907174d.jpg)
7.如何拆下芯片
這一個問題發生在芯片已經被焊接好,但結果上下折騰無法正常出畫面的情況,這裡提供的這種方法適合所有直插引腳芯片但千萬不要對任何的指示器類、發光類的元件使用。
首先要做的事情就是使用吸錫器大致的去掉引腳上的焊錫,當然這種方法很難去幹淨,不過沒有關係。
![](https://image.gcores.com/f5336ff7-f0f8-40da-b923-9fed206888ce.jpg)
當然這裡我推薦在吸錫器上面弄一個V字口讓烙鐵的頭部伸進去,當然一如既往我還是推薦使用刀頭。
![](https://image.gcores.com/4f2873c0-8915-4f98-b6ea-0b93ee567b35.jpg)
然後使用一個能幹燒的加熱平臺,我給一個很少使用的電火鍋底座加了PID控制器,這樣很方便進行這種拆焊。
![](https://image.gcores.com/75702a0e-2efd-4c54-aac2-89f7665d0e63.jpg)
在融化後可以很簡單地拆下芯片。
![](https://image.gcores.com/497dd4b2-3a91-4407-b9d1-890117dc9d66.jpg)
8. 問題排查
問題的排查其實並不是很難當然這裡我還是寫一下研究過程遇到的情況,當然在應用下列檢查表之前,建議多按一按RESET鍵,或者吹一下卡帶金手指,說不定會有奇蹟。
- 屏幕不顯示,喇叭有持續噪音:檢查所有芯片的方向是否正確,正常情況是全部一個朝向
- 電源指示燈閃爍,按RESET 20次沒有改善:檢查CIC芯片引腳焊接情況,並且確認卡帶正常接觸,最差情況重新燒錄一次CIC芯片
- 無法燒錄CIC,提示識別不對:和編程器之間沒有插好或者某個腳位的接觸不良,損壞可能性不大但不排除
![](https://image.gcores.com/df747edc-9a84-410b-9d48-27a802f99668.png)
4. 屏幕在啟動時候花屏、黑屏:第一種可能是CHR RAM的安裝、焊接問題,檢查一遍進行處理;第二種可能燒的是UROM或者其他需要CHR ROM或者PRG RAM的那種遊戲,簡單來說就是ROM不對
5. 屏幕在啟動時候持續灰屏: ROM沒有正常讀出,但通過了區域檢測的表現
6. 屏幕在遊戲遊玩時候花屏:檢查ONE,VERITAL和HORIOZN連線是否正確
7. 拆焊下的ROM芯片不能正常讀取:大概率是引腳斷了,芯片因為溫度損壞可能性不大,因為真正的核心部分只有中間一點點溫度很難影響到
到這裡,整個教程就結束了,我是新晝,很高興你能來看我寫的文章,我們下次再見~
參考資料
NES UNROM512 PCB
How to Make an NES Reproduction Cartridge
UNROM 512 Wiki
已知的所有UNROM/Mapper2 遊戲
NESCARTDB數據庫中所有的UNROM卡帶
開源CIC程序:Multi-Region NES CIC Clone
幾個老遊戲的保存平臺
www.bestoldgames.net
www.emulatorgames.net
www.wowroms.com