最近 '閒閒沒事' 去 HT-Lab (
http://www.ht-lab.com) Download CPU86 回來玩玩
CPU86 是 8088/86 指令相容的 VHDL CPU Core
最重要的是 "GNU License" !!! (HT-Lab 萬歲!!)
首先用 Modelsim 模擬看看.... 嗯 一切正常...
那用 NC-VHDL 跑看看.... 咦..?? 跑不起來.... 算了先放棄 以後再看... :<
接著 拿出塵封已久 的 Altera NIOS Development Kit Cyclone Board 出來
看看 CPU86 能不能在 Altera Cyclone 板上跑起來
原來的 top_struct.vhd 很容易就修改完畢
(主要是修改 RAM 的部分, 以及 UART BAUDRATE 的計算)
直接拿 Quartus 來跑跑看 ....
ok! 很順利的跑完了...
可是 clk 只能到 37 MHz... 有點不滿意!!
手上只有 50MHz 的 osc
又懶的去用 PLL 降頻
管他的... 直接用 50MHz 硬上!...
啊! ... 果然是不會動....
好吧... 加個 PLL 降到 25MHz (記得 要修改 UART BAUDRATE 的計算 )
YES! Bootstrap 的提示符號出現了...
把 MON88 Upload 上去跑跑看....
咦..?? Upload 成功 卻沒反應.... 奇怪??
看了老半天 終於發現是 bootstrap.asm 程式有問題!! (HT-Lab 留一手!!)
原來 bootstrap 將 程式 UPLOAD 到 RAM (0000:0000) 後
就 idle, 不是應該要 jump 到程式進入點嗎? 不然UPLOAD 程式上去要幹嘛...
修改好 bootstrap.asm 後用 A86 重新組譯
重跑一次...
YES! MON88 跑起來了....
代碼:
MON88 8088/8086 Monitor ver 0.1
Copyright WWW.HT-LAB.COM 2005
All rights reserved.
Cmd>h
Commands
DM {from} {to} : Dump Memory, example D 0000 0100
FM {from} {to} {Byte} : Fill Memory, example FM 0200 020F 5A
R : Display Registers
CR {reg} : Change Registers, example CR SP=1234
L : Load Intel hexfile
U {from} {to} : Un(dis)assemble range, example U 0120 0128
G {Address} : Execute, example G 0100
T {Address} : Trace from address, example T 0100
N : Trace Next
BP {bp} {Address} : Set BreakPoint, bp=0..7, example BP 0 2344
CB {bp} : Clear Breakpoint, example BS 7 8732
DB : Display Breakpoints
BS {Word} : Change Base Segment Address, example BS 0340
WB {Address} {Byte} : Write Byte to address, example WB 1234 5A
WW {Address} {Word} : Write Word to address
IB {Port} : Read Byte from Input port, example IB 03F8
IW {Port} : Read Word from Input port
OB {Port} {Byte} : Write Byte to Output port, example OB 03F8 3A
OW {Port} {Word} : Write Word to Output port, example OB 03F8 3A5A
Q : Restart Monitor
Cmd>
嗯.. 口袋裡又多了一個 cpu 可以用了
現在還不知道要拿CPU86作什麼?? 以後再說....