2024年12月14日 星期六

老工程師的技術生活(三十六) --- Bar 台逆向工程系列(二) 硬體篇

一開始我還是先強烈聲明一下:此一系列文章,純粹就是系統玩家的興趣,

不會牽涉到任何商業活動,也不鼓勵相關任何商業侵權行為,一方面我也

曾經表達過:這個東西有其時代的眼淚,就算你現在認真的投入,也不有

任何商業市場機會(包括生產備料成本競爭力,市場通路等)。更何況這個東西

在法律上也可能牽涉賭博刑責,所以大家就以平常心簡單的從基礎單晶片課程

技術來切磋研究就好。在這些前提下,我們都很樂意歡迎加入討論。

現在我們就先回到硬體相關設計來做一個初步的探討研究。硬體設計一般

來說:除非有重大的缺失需要不得不修改,否則,變動更改的機會不多,

尤其是牽涉到韌體相關的硬體部分,那就更難了,所以雖然我們手上的韌體與

實際上的機器上所下載韌體機械碼有所不同,但在硬體相關部分,我個人

覺得應該絕大多數都是一樣相通的,所以我才先回到討論硬體部分。

關於硬體的參考設計圖,我也有提供雲端分享點:點我

大家可以先自行下載,以下的硬體討論是基於上述的參考設計圖為主。


上圖是我所整理的系統架構圖,就是很基本的單晶片基礎應用的形式。

就是一般 I/O 加上一些相關韌體概念,頂多就是賭博數學上機率控制概念而已。

現在看這些設計好像沒甚麼了不起的,但你別忘了:他的初步設計至少已經

超過三十年前了啊。可能有些讀者都還沒出生。所以還是存著一股致敬的心意吧。

其中很多零件在市面上都比較難取得了,因為可能就連原來設計生產的公司都

已經不復存在了啊。所以我才說:生產備料很辛苦的啦。

至於為什麼上圖中可以看出各個周邊的零件所對應的韌體控制地址?那是同時參考

設計圖與韌體內容所得的:


首先我們先來看: 8279 的部分,它就一般鍵盤與顯示功能的專用 IC,是傳統利用

並列匯流排方式來與單晶片溝通的。其中 8279_CS 是由之前級解碼電路得到 0xB000。

因為8279 的控制內容有分成兩大類:資料交換與控制命令,所以就是 0xB000/0xB001。

鍵盤輸入最主要的就是操作鍵盤(共 26 組) 及LED 七段顯示器部分(包括下方八組、中間

一組及上方兩組:所剩押注餘額及中獎獎金,而這兩組四位數可以再拆成四組)。

鍵盤部分:有系統初始四個按鈕,及系統設定的八個DIP Switch 及使用者操作的14組按鈕。

就是下圖所示的:



然後我們可以看到:電路板上的接頭標示為 J(P)4 ,還跟電路圖上一致,所以我才說

硬體電路上可以修改的機會不多啦。


另外關於七段顯示器是利用 8279 的 OutA 及 OutB 來分別控制兩位數的七段顯示器的

十位數與個位數。所以電路圖上才標示成 LA/LB...(十位數)及RA/RB...(個位數)兩部分。

至於是哪一組七段顯示器?就是由SL0/SL1...解碼出 DISP1/DISP2/DISP3...。因為之前

有國外的朋友有參與留言,所以我還是把電路圖上的DISP1 中文說明簡單的翻譯一下。

我們可以先回到韌體看一下相關的硬體初始化內容:


我手上機器反組譯的內容:基本上是大致一樣的。也是先Timer 設定及 8279 初始化。

而 8279 的初始化內容:兩者是一致的。

所以8279 兩者的使用方式是完全一樣的。大家可以參考上圖中程式碼後方的註解說明。

----

接下來我們再來看關於 AY-3-8910 的使用:它主要就是拿來做為音源撥放功能,

及其他LED 跑燈用的,而這部分共有 24 顆跑馬燈及下方六顆燈及中央一顆燈。

詳細定義可以參考最上圖說明。不過,這一部分的單晶片解碼位置我還是有點

搞不太清楚。依照 AY-3-8910 的使用說明書來看,還真的搞不太懂原始設計道理?


兩顆 AY-3-8910 地址是解到 0x9000,這部分是沒問題的。但上圖綠色標示部分,

我怎麼看都沒辦法理解到為什麼一顆是 0x9000 ,另一顆是 0x9002 呢?

如果有哪位讀者可以協助解釋的,也歡迎再底下留言解答,謝謝!萬分感恩~🙏

為什麼我會知道一顆是 0x9000 ,另一顆是 0x9002 呢?是從韌體看到的:

機器與手上文稿內容 比照圖

 而AY-3-8910 的設定使用方式,機器與手上資料,兩者也是一樣的:

這裡還要補充說明一下:在這部份我發現資料文檔中的那個D51 所反組譯的內容還是

有點錯誤,所以大家在使用上還是要留意一下,我特別直接附上 Binary 檔案對比說明:


因為 8910 的初始化設定是透過 Table 方式直接依序地填入8910 的 Registers 的。

這個Table 在反組譯上,可能會造成誤判,這本來就是反組譯工具的一大難處。

過去很多人也是利用這招來作一些程式碼防護措施的...順便補充說明一下。

---

另外就是關於單晶片 8031 本身的 Timer 設定與使用方式。(這部分也屬於硬體)


首先我發現機器上面所使用的震盪器與電路圖上的有所差異的:

電路圖上標示的是:10.6875MHz,而機器上的是:10.7386MHz 。我猜是:

這兩者的震盪頻率都是很少見的規格,所以可能就是在零件市場上找個

接近規格的零件湊合著用吧。不過,韌體程式裡也沒有因此修正:


而這邊我也順便給大家看一下,其實 Timer 1 的中斷服務程式真的超簡單的:

就是重新設定單晶片 8051 的 Timer1 Counter 及 Toggle P3.4 I/O pin 而已。



---

其實,我發現這些前後不一致的韌體內容,雖然在硬體上還是有很多共用性,

在許多記憶體的使用定義上,也都大部分都是相通的,譬如上圖有個 8051內部

記憶體位址:0x5BH 內容,就是拿來送給 8279 的中央七段顯示器內容的

暫存記憶體。不過,真的還是要特別再強調一次:經由反組譯工具所組譯的

程式碼內容,可能還是會有一些誤解的結果。譬如:我們程式一開始的在那個

Timer Initialize 之前的那個先 Disable Interrupt:

反組譯是:lcall X1875 那段:(手上原始碼是 lcall 1089H):


這個是很簡單的程式碼,就只有三行指令,但反組譯工具的結果,

真的差很多,如果我們也把原始的 Binary 檔打開比對的話,其實是沒有錯的。

但反組譯工具的結果就是錯的!這一點真的要留意一下,還是要多方考證,

或是多參考幾組不同的反組譯工具的結果。

最後就是一些不是很可以理解的專用名詞:有知道的讀者也可以在底下留言

幫忙解釋一下:就是直接接到 8051 I/O 接腳上的名詞:

入表(P11_Output):?

出表(P12_Output):?

SSR(P13_Output):Relay for ?

入表檢查(P14_Input):?是要檢查甚麼?

出表檢查(P15_Input):?是要檢查甚麼?

HOPER SW(P16_Input):?這應該是投幣機的感應訊號吧?

洗分 SW(P17_Input):?是要檢查甚麼?

---------------------

關於這個東西,只要硬體的相關資料都是正確的話,其實你可以把整台 Bar 台

當作一台單晶片學習開發版的啦。韌體都是可以重新撰寫的,譬如利用我上一篇

ROM 模擬器(ROMTER) 來開發相關應用韌體。反正這台硬體平台還把原來的

ROM Size 改成 27C512: 整整有 64KBytes 可以讓你盡情發揮。我甚至還想

要不要改成高階的 C 語言來重寫。😁😂😃😄😅

---

不過,這都是一個前提下:有錢、又有閒啊

我一直強調:搞技術開發,你有興趣,誰也擋不了你,唯一能擋住你的因素,

就是現實的生活壓力:時間與金錢

就算是原始碼是 8051 的組合語言又怎樣?一星期看不懂。給你一個月,一個月

不夠,那給你半年、一年的...行不行?如果你只要喝水吸空氣可以過日子,

家裡有人幫你負擔水電瓦斯費(或房屋租金,乃至於各種貸款等)。專心搞技術,

看程式碼,學會看懂程式並予以改寫,當然都不是問題啊。只要有興趣:

還可以跟你打包票:不用花錢上課,買書研習,只要設定這個目標,保證你

不用多久就可以無師自通了,改天還可以自稱大師的開課收徒弟呢!

所以啦,有時候真的不用太羨慕我們這些人,我們以前也是如此過來的,

我們還懂得去找個可以領薪水上班的相關技術工作,還不至於為了這麼一點

興趣給自己或家裡給餓到了(或有所微詞或抱怨...😔😞)。

只是人生真的不是只有技術或興趣而已。你想學甚麼都不重要,年輕時也

不用擔心顧慮太多,但等你步入中年、面臨長江後浪推前浪時,很多

原本簡單的事情就變得複雜了啊。原本單純的技術開發,看在我們這些

資深工程師的眼裡,又成了另一種人生的面相。最近無意間看到電影

"黃飛鴻"(第一集)中的那位讓梁寬拜倒的關振東師傅,一生就只求武功

蓋世(技術),想打遍天下高手在武界闖出名號,片尾時候,當沙河幫鼓譟

嚴師傅秀兩手時,在旁的梁寬受不了那個帶有嘲諷的鼓譟歡呼聲而驚醒良知

是啊~我們學好一身技術好手藝之後,以為大家都鼓譟的大聲稱你:老師、

大師或師傅時,你是不是也迷失了一些你原先應有的人生態度呢?

真的就只有一身過人的武藝或技術才能服人嗎?為自己贏得人生亮點嗎?

這時候,你有沒有想到:其實在其他有些人眼裡(包括另一位德高望重的高手

或是老闆、企業家裡),他們可以也是用一種表面尊重,私底下卻是一樣的

鼓譟嘲諷的心態看待你啊?當然你也可以不用管這些世俗的眼光或評論,

但現實的還是你自己家人的感受...

下次要花錢出手報名技術課程時,真的要好好想想:你的目標或學習的

KPI 值是在哪吧。這是我自己以前年輕不懂時,也會常犯的錯誤觀念!

分享給大家。

至於這一系列的後續,有空整理後,會不定時的再推出...

"不定時" ? 因為肯定沒錢,但有沒有閒?再說吧。😌😊😋

-----------------------------

整理一下之前的相關文章:

1.一份神秘禮物的開箱文(10/15/2015)

2.一份神秘禮物的開箱文 (補續篇)--- 談早年電玩機(01/01/2016)

3.老工程師的技術生活(三十三) --- 一篇文章的後續(Bar 台簡易解析)(09/01/2024)

4.老工程師的技術生活(三十六) --- Bar 台逆向工程系列(一)

沒有留言:

張貼留言