原因如下, 好久以前在中無買左部 MICE-5103, 即係萬利出品的 8051 EMULATOR, 有個 SOFTWARE 名為
MBUG.EXE, 用來在 PC DEBUG 用.



最近換了電腦, 個 PROGRAM 居然無法和 EMULATOR 溝通, 後來才發現是 SOFTWARE BUG, 只能在 486 的 PC
上運行, 所以廢了.



最近上萬利個網, 他們公開了 ROM 以及其他 PAL 的資料. 所以想看看到底 ROM 的通訊方式如何

http://www.manley.com.cn/English/downlaod/detail.asp?downid=46



用 IDA Pro disassemble 個 ROM image, 他始終以 BASE 0x0000 開始, 但是 ROM 實際是從
0xC000 到 0XDFFF. 開始不知道如何 RE_BASE ROM IAMGE.




為了研習到底為何當年的程序及 EMULATOR, 換了 PC 就廢了, 所以順道學習用 IDA Pro, 看看到底20年前人家的設計是怎樣做的.

原來的 [上位機程序] 很簡單, 基本只有三個檔案, MBUG.EXE, MBUG.OVL, MBUG.HLP.






用陽春的 DEBUG, 觀察 MBUG.EXE 的行為, 用 [G 地址] 的方法, 大概可得到可執行的 Break Point 如下 :
G A5
G C6
G D3
G FF
G 17D, 應該跳到 210
G 21A, 已經有畫面顯示
G 239, 顯示 Press any key 的字樣在底下的 STATUS BAR
G 2E3, 顯示 Debug 的 Frame
G 6E99, 顯示 Main Menu 的 Frame
G 6EA2, 顯示 Main Menu 的內容
G 6EAB, 顯示 Load file...的字樣在底下的 STATUS BAR
G 6EEA, 顯示 Progarm, read...的字樣
G 3E57, Open file (MBUG.OVL)
G 1F59 顯示 Register 的 Frame
G 1FB6 顯示 Register 的內容



因為這個 MBUG.EXE 的設計, 當年是用在 1991, PC 也只有 VGA DISPLAY CARD, 顯示用 BIOS DATA AREA 0000:B800, 只要將文字內容寫到這個位置, 螢幕上就馬上看到


MAY/31/2010, 繼續研習

在 XP DOSBOX 底下, 似乎這個程序很正常, 因為俺的 NOTEBOOK 沒有 serial port, 所以好像還好. 而且它的設計, 只能選取並直接讀取 BIOS data area 0000:0400, 得到 serial port 地址 0x3F8 (COM1) 或 0x2F8 (COM2), 只有這兩個 serial port. 所以 USB to serial 的東西, 因為地址不在 0x3F8 或 0x2F8, 當然就不能用了, 沿用 80x86 的設計, 讀取 I/O, 必須是的指令, 必須是 -




in, al,dx
in ax, dx

所以不難找到讀取 0x3F8 的地方, 不過要仔細看看每個細節, 可以參考來兩個資料來源

DEBUG 的用法
http://thestarman.pcministry.com/asm/debug/debug.htm#NT

Serail port 的讀寫
http://www.beyondlogic.org/serial/serial.htm

BIOS Data area
http://biosengineer.blogspot.com/2008/05/bios-data-area.html


下一個問題, 如果電腦有 serial port, 只要選用 LOAD PROGRAM, 透過 serial port 連接 MICE-5103, 就會出現 Divide Overflow, 直接跳回到 DOS PROMPT, 意思就是除法錯誤. 其中的原因是, 原來的設計是 Intel 80486 CPU 或以下的等級, 換了現在的 Intel P5 CPU, 原來的除法演算法不適用.

G 75c, 執行的順序-
顯示 Load program to Debug
顯示 File :
輸入 Enter 後, 出現選擇 path:\File 的 Frame
選擇了一個檔案後, 關閉選擇 path:\File 的 Frame
顯示 File : path:\File name
輸入 Enter 後, 顯示 Start addr : 0000
顯示 New start addr :
顯示 LOAD Bytes : 0000_
右上角 COM1:READY 變成閃爍
然後停在 cs:075c 的位置

證明 Divide Overflow 是較後面產生的問題.


INT 0 和 Divide Overflow 的解釋
http://home.educities.edu.tw/wanker742126/asm/ch36.html#note1




文章標籤
全站熱搜
創作者介紹
創作者 xiaolabaDIY 的頭像
xiaolabaDIY

xiaolabaDIY 的部落格

xiaolabaDIY 發表在 痞客邦 留言(0) 人氣(37)