資料介紹
描述
背景
如果您像我一樣喜歡復古電腦,那么您很有可能會在很多場合看到 KENBAK-1,它被許多人視為第一臺商用個人電腦。十年前,Mark Wilson 推出了KENBAK-uino ,這是一個在 ATmega328 上模擬運行的復制品。2016 年,Brian Benchoff發表了一篇關于John Blankenbaker KENBAK-1 創造者的精彩文章。對于 KENBAK-1 故事的第一手資料,您真的應該看看 John Blakenbaker 自己的KENBAK-1 計算機網站。
有一段時間你可以購買一個全尺寸的 KENBAK-1 復制套件,帶有 PCB、電源、正宗金屬外殼、132 個標準系列 TTL 邏輯 IC 作為 CPU/過程控制邏輯(沒錯,沒有微處理器)和兩個 1024 位移內存寄存器。不幸的是,此選項不再可用,但根據 Mark Wilson 的代碼,Adwater & Stir提供了尺子大小的nanoKENBAK-1 、半尺寸μKENBAK-1 套件,并且很快還將提供全尺寸套件。此外,您還可以在網上找到像這樣的 KENBAK-1 仿真器。
動機
因此,有了所有這些當之無愧的 KENBAK-1 愛,我為什么還要創造另一個 KENBAK-1 復制品?翻轉的答案可能是我想要并且我可以,但這還不是全部。雖然所有精彩的復制品都模仿了原版的發球臺并提供真正的 KENBAK-1 體驗,甚至還有一些附加功能,如內置程序,但在一天結束時,您仍然在許多情況下手動翻譯機器指令并通過前面板按鈕一次一步地鍵入它們。當出現問題時,雖然您可以一次單步執行一條指令,但您在前面板顯示屏上一次只能看到一件事,即指令或內存/寄存器地址。它變老得很快。
我認為我可以增加一些價值的地方是將機器代碼模擬器與匯編器和調試器集成在一起。您仍然可以啟動我的 KENBAK-2/5 控制臺,通過前面板在本機模式下鍵入和運行您的程序。此外,您將能夠打開一個集成開發環境,通過匯編語言輸入一個 KENBAK-1 程序并使用實際控制臺運行該程序。同樣,您將能夠單步調試您的匯編代碼,設置斷點,并像您一樣觀察內存和寄存器內容。
我對這個項目的另一個動機是我真的很想深入研究這臺機器。當我查看編程參考手冊時,我對機器架構和指令集印象深刻。我的意思是用邏輯芯片構建的機器上的間接索引尋址模式。非常酷。
設計注意事項
控制臺本身將以 2:5 的比例渲染(因此命名為 KENBAK-2/5)。這主要是為了讓所有部件都能安裝到我的 Prusa MK3S 的打印床上。內置的 Raspberry Pi 4 將通過 32 通道端口擴展器連接到前面板。除了運行 KENBAK-1 仿真器外,還需要額外的 Pi 馬力來運行“集成開發環境”(IDE)。可以通過將顯示器、鍵盤和鼠標連接到控制臺的 Pi 4 本身或通過 VNC(首選)來訪問 IDE。模擬器、匯編器和調試器將用 Python 編寫。
補給品:
除了 3D 打印部件之外,您還需要以下物品:
- 1樹莓派 4
- 1 MCP23017 32 通道 I/O 擴展帽(https://www.buyapi.ca/product/mcp23017-hat-32-channel-io-expansion-hat/ )
- 12 個3mm LED(8 個白色和 4 個黃色)
- 2 個撥動開關(KINYOOO SPDT 迷你撥動開關,開/開 3 針 2 位 - 亞馬遜)
- 15 個按鈕開關(迷你 7 毫米瞬時(關-開)按鈕 - 亞馬遜 - 8 個黑色和 7 個白色)
- 接上電線。我用的是 22 AWG。
- 間距為 2.54 毫米的母頭。
打印零件
我打印了沒有支撐的零件和以下設置(除非另有說明):
打印分辨率:0.2 毫米
填充:20%
燈絲:AMZ3D PLA 顏色:我使用了灰色和湖藍色來與原版保持一致。你的來電。
注意:以默認方向打印零件。
要制作 KENBAK-2/5,您需要打印以下部件:
- 1 - 身體底部
- 1 - 身體頂部
- 1 - 前面板
- 2 - 側夾
組裝控制臺
KENBAL-2/5 控制臺具有 3D 打印框架并使用面板安裝組件。在原始大小的 40% 時,必須做出一些妥協。一方面,John Blankenbaker 機器前面板上出色的鍵盤式按鈕被證明是無法復制的。事實上,按鈕位置必須在我的復制品上水平拉伸一點,以適應我確實找到的小面板安裝按鈕。同樣,面板燈也沒有漂亮的插座,只有后部安裝的 3 毫米 LED。
小尺寸的優點是這些部件可以安裝在相當多的 3D 打印機上。據我所知,表殼的形狀與原版非常接近。它分五個部分打印。底部有用于該項目的 Raspberry Pi“引擎”的安裝釘和用于布線的切口。
頂部沒有什么特別的。請注意用于將前面板固定到位的頂部和底部部件中的凹槽。
前面板上有用于固定按鈕、開關和燈的孔。由于復制品的尺寸很小,我無法像過去在其他項目中那樣直接在面板上 3D 打印標簽。相反,我保存了一個 DXF 文件,其中包含來自我的 Fusion 360 模型的面板輪廓和孔位置,并將其帶到我添加標簽的 Inkscape 中。我將生成的 SVG 文件打印到透明的醋酸纖維板上,我將其層壓以保護印刷并增加覆蓋層的硬度。我沿著輪廓切出覆蓋層,并用標準的手持 1/4" 紙打孔器在按鈕和開關孔上打孔。面板燈凹入覆蓋層后面,因此不需要孔。
我不能使用面板安裝按鈕和開關附帶的螺母,因為它們不適合這個比例。相反,我調整了前面板上的孔的大小,以便組件可以像它們一樣從背面自螺紋擰入。LED 只是摩擦配合。
帶有標簽的覆蓋層將恰好適合按鈕和開關,需要一點技巧。
前面板適合切入頂部和底部的凹槽。
將頂部和底部部件與開槽的側部件連接起來。
這就是控制臺。
連接控制臺
?
前面板燈、按鈕和開關通過上圖所示的端口擴展器連接到 Raspberry Pi。端口擴展器帶有支架,因此我使用 Raspberry Pi 上的兩個對角角孔將其安裝到底部框架上,并使用支架對面的兩個角孔來支撐帽子。看起來相當扎實。
接線如下,引腳編號映射到前面板組件:
IC1
1 - 停車燈
2 - 儲存燈
3 - 設置燈
4 - 清除燈
5 - 關閉
6 - 開啟
7 - 切換解鎖
8 - 切換鎖定
9 - 數據燈 0
10 - 數據燈 1
11 - 數據燈 2
12 - 數據燈 3
13 - 數據燈 4
14 - 數據燈 5
15 - 數據燈 6
16 - 數據燈 7
IC2
1 - 停止按鈕
2 - 啟動按鈕
3 - 存儲按鈕
4 - 讀取按鈕
5 - 設置按鈕
6 - 顯示按鈕
7 - 清除按鈕
8 - 不適用
9 - 數據按鈕 0
10 - 數據按鈕 1
11 - 數據按鈕 2
12 -數據按鈕 3
13 - 數據按鈕 4
14 - 數據按鈕 5
15 - 數據按鈕 6
16 - 數據按鈕 7
在下面的照片中,我大約完成了一半。接地線已連接到所有前面板組件,十五個按鈕已連接到帽子,十二個 LED 有一根短線,連接了一個限流電阻。電阻為 10k 以降低亮度。
我使用母頭將前面板燈和按鈕連接到擴展器。因為頂部框架上沒有太多的頭部空間,而且板上公頭之間的空間有限,我不得不像下面的照片那樣調整電線的角度。
它有點緊,當我將電線焊接到接頭上時,我一直在問自己為什么沒有為前面板設計 PCB。在一天結束時,雖然它工作正常。
紅色熱縮管保護 LED 的“串聯”限流電阻。前面板組件接地線連接到 Raspberry Pi 接地引腳(黑線)。幾根電纜扎帶和我的 KENBAK-2/5 硬件準備就緒。
關于 KENBAK-2/5 IDE
IDE 用 Python 編寫,在 KENBAK-2/5 硬件核心的 Raspberry Pi 上運行。它由四個主要部分組成:
- 控制臺- 允許 Raspberry Pi 通過端口擴展器與前面板開關、按鈕和燈進行交互。
- 仿真器- 在軟件中模擬組成原始KENBAK -1 硬件的 134 個集成電路的操作。它接受一個 256 字節數組作為輸入,該數組表示 KENBAK-1 中的整個內存塊,并執行編碼到這些字節中的指令,直到遇到 HALT 指令或用戶按下停止按鈕。
- Assembler - 采用 KENBAK-1 指令的符號表示,如Programming Reference Manual的 Symbolic Representation of Instructions 部分中所定義,并將它們轉換為可由模擬器執行的機器代碼(或原始 KENBAK-1,如果您是有幸接觸到一個)。
- 調試器- 允許用戶在他們的代碼中設置斷點,該斷點將在該點停止執行,以便可以查看機器內存和寄存器。
查看上圖,您可以看到我剛剛加載了一個用 KENBAK-1 匯編語言編寫的斐波那契數列計算器程序。右上象限當然是匯編代碼,左邊是等效的二進制指令。通過單擊二進制指令,您可以設置或清除斷點(例如,skp 指令設置了斷點)。
左下方是預定義“寄存器”的狀態,包括用于加載和讀取內存位置的地址寄存器。在 KENBAK-1 架構中,寄存器只是預定義的內存位置。以下是 KENBAK-1 中九個特殊內存位置的值(地址為十進制):
Name Address Usage
~~~~ ~~~~~~~ ~~~~~
A 000 A register.
B 001 B register.
X 002 X register.
PC 003 Program counter.
OUTPUT 128 Maps to front panel data display lamps.
OCA 129 Overflow/Carry bits for A register.
OCB 130 Overflow/Carry bits for B register.
OCX 131 Overflow/Carry bits for C register.
INPUT 255 Maps to the front panel data input button
中間底部是所有 256 個內存位置的十六進制轉儲,右下角更詳細地顯示了相同的內存位置,每個位置用十六進制、十進制、八進制和二進制表示。所有對內存位置的引用都是十進制的(指令、十六進制轉儲和詳細信息面板中的最左邊的列以及指令面板中的最右邊的列)。
以綠色呈現的條目表示程序計數器 (PC) 當前指向的內存位置。
前面板控制臺與 IDE 完全集成。因此,例如,您可以通過按下控制臺上的物理 START 按鈕或單擊 IDE 中的 Run 按鈕來啟動上面顯示的 Fibonacci 程序。類似地,按住 STOP 按鈕,然后按 START 將執行一個步驟,IDE 的 Step 按鈕也是如此。
任何寫入 OUTPUT 寄存器的內容都會顯示在控制臺的數據燈上。通過地址寄存器從控制臺存儲到內存位置的數據將反映在 IDE 中。
IDE 確實提供了一些附加功能。您的程序可以保存并加載到磁盤(匯編代碼和二進制內存映像)。重新啟動按鈕會將所有內容重置為上次加載的圖像。Clear 會將內存和匯編程序空間清零,然后將 PC 設置為內存位置 4。 Auto 將以大約每秒一條指令的速度運行程序。
您可以通過單步調試或設置斷點并觀察內存和寄存器來調試程序。
如果您只想使用 KENBAK-1 代碼,您可以在任何支持 Python 的平臺上“獨立”運行 IDE,但當然您只能將 KENBAK-2/5 控制臺集成到 Raspberry Pi 上,因為它綁定到wiringpi庫。
安裝軟件
KENBAK-IDE.py 文件可從我的GitHub 存儲庫中獲得。如果在 KENBAK-2/5 硬件環境之外使用,它應該可以在任何支持 Python3 且不依賴任何庫的機器上運行。在這種模式下,您仍然可以編寫、調試和運行 KENBAK-1 匯編語言程序。這本身就是一個很棒的學習環境。
如果您在帶有端口擴展帽的 KENBAK-2/5 的 Raspberry Pi 上運行,您必須首先確保安裝了 Wiringpi 庫。
pip3 install wiringpi
我在 Pi 上創建了一個文件夾
mkdir /home/pi/KENBAK-1
并在那里復制了 KENBAK-IDE.py、Assembler Syntax.txt、Fibonacci.asm 和 Fibonacci.bin 文件。然后是運行 Python 腳本的簡單問題。
cd /home/pi/KENBAK-1
python3 KENBAK-IDE.py
自動啟動 KENBAK-2/5 IDE
如果您像我一樣在內置 Raspberry Pi 上將 KENBAK-1 IDE 作為專用控制臺運行,那么在機器啟動時讓程序自動啟動會很方便。這是我為實現這一目標所做的。
我在我的 Pi 上創建了一個自動啟動文件夾并切換到該文件夾??。
mkdir /home/pi/.config/autostart
cd /home/pi/.config/autostart
在剛剛創建的自動啟動文件夾中,我添加了以下兩個文件。
運行KENBAK-1
cd /home/pi/KENBAK-1
/usr/bin/python3 KENBAK-IDE.py
KENBAK-1.desktop
[Desktop Entry]
Type=Application Name=KENBAK-1
Exec=/home/pi/.config/autostart/runKENBAK-1
此外,必須使用以下命令使 runKENBAK-1 文件可執行:
chmod 777 runKENBAK-1
現在,如果您重新啟動系統,您應該會短暫看到桌面出現,并且在 KENBAK-IDE 應用程序加載后不久。
設置 VNC
當前的 Raspberry Pi OS 版本已嵌入 RealVNC。如果您像我一樣在 KENBAK-2/5 控制臺中運行 Raspberry Pi,那么您必須設置一個虛擬桌面以供 VNC 客戶端連接。我發現執行此操作的最簡單方法是將以下行添加到/etc/rc.local文件的末尾,在 Pi 上的exit 0之前。
# Setup a virtual screen for the VNC server.
sudo -u pi vncserver -randr=1920x1080
將屏幕尺寸設置為與您將訪問 KENBAK-IDE 的機器相同。然后,您應該能夠在控制臺機器的 IP 地址上使用 RealVNC 客戶端連接到 KENBAK-2/5,并附加:1 ,例如在我的情況下192.168.123.122:1 。
整理起來
?
如上圖所示,我添加了一個幫助按鈕來彈出一些關于匯編語言語法的信息。與原版一樣,您只需使用控制臺前面板上的開關、按鈕和指示燈即可輸入和運行程序,并查看內部機器內存。當您鍵入時,匯編程序指令會不斷被解析,當相應的二進制代碼不再有任何問號時,您就知道該行的語法是正確的。它似乎工作得很好。
有了斷點、單步模式和內存可視化,調試突然變得容易多了。
當我第一次查看 KENBAK-1 編程參考手冊時,我對沒有微處理器、只有離散邏輯芯片的機器的指令集印象深刻。實現一個匯編器和仿真器只會加深我對 John Blankenbaker 所創造的東西的欣賞。這在當時是一項相當大的成就,約翰·布蘭肯貝克(John Blankenbaker)作為早期個人計算機先驅者,在歷史上應該占有一席之地。
還有一件事
1971 年,當 John Blankenbaker 展示他的 KENBAK-1 個人計算機時,他總是展示的程序之一是星期計算器。給定任何日期,它可以告訴您該日期是一周中的哪一天。這是一件很酷的事情,每個人都可以產生共鳴。
嗯,我不覺得我的 KENBAK-2/5 復制品會很完整,直到它可以做到這一點。這是一個有趣的編程挑戰,它鍛煉了我機器的更多功能,實際上發現了我的模擬器軟件的一些小問題:
- JMK 操作數未正確保存返回地址
- 推進程序計數器 (PC) 所需的 HALT 操作數
- 我調整了一些控制臺交互。
- 我添加了一個 DB 指令來保留一個字節的內存。
我現在更有信心,因為我的復制品與原作非常接近。這是代碼:
; Program to calculate the day of the week for any date. To start this program you will
; have to input the date in four parts: Century, Year, Month, and Day. Each of the parts
; is entered as a two digit Binary Coded Decimal number (ie. the first digit will occupy
; bits 7-4 as a binary number, and the second digit bits 3-0) using the front panel data
; buttons. The steps to run this program are:
;
; 1) Set the PC register (at address 3) to 4.
; 2) Clear the input data then enter the date Century.
; 3) Press Start.
; 4) Clear the input data then enter the date Year.
; 5) Press Start.
; 6) Clear the input data then enter the date Month.
; 7) Press Start.
; 8) Clear the input data then enter the date Day.
; 9) Press Start.
;
; The day of the week will be returned via the data lamps using the following encoding:
;
; 7-Sunday 6-Monday 5-Tuesday 4-Wednesday 3-Thursday 2-Friday 1-Saturday
;
; All lamps turned on means the last item entered was invalid and you have to restart.
;
;
; Get the date we want the day for.
;
load A,INPUT ; Get the century.
jmk bcd2bin
store A,century
halt
load A,INPUT ; Get the year.
jmk bcd2bin
store A,year
halt
load A,INPUT ; Get the month.
jmk bcd2bin
sub A,1 ; Convert from 1 based to 0 based.
store A,month
halt
load A,INPUT ; Get the day.
jmk bcd2bin
store A,day
load A,0b10000000 ; Setup the rotation pattern.
store A,rotate
;
; All the inputs should be in place. Start the conversion.
;
load A,year ; Get the year.
sft A,R,2 ; Divide by 4.
store A,B ; Save to B the working result.
add B,day ; Add the day of the month.
load X,month ; Use X as index into the month keys.
add B,monkeys+X ; Add the month key.
jmk leapyr ; Returns a leap year offset in A if applicable.
jmk working ; Working...
sub B,A ; Subtract the leap year offset.
jmk cencode ; Returns a century code in A if applicable.
jmk working ; Working...
add B,A ; Add the century code.
add B,Year ; Add the year input to the working result.
chkrem load A,B ; Find the remainder when B is divided by 7.
and A,0b11111000 ; Is B > 7?
jmp A,EQ,isseven ; No then B is 7 or less.
sub B,7 ; Yes then reduce B by 7.
jmk working ; Working...
jmp chkrem ; Check again for remainder.
isseven load A,B ; Is B = 7?
sub A,7 ; Subtract 7 from B value.
jmp A,LT,gotday ; No B is less than 7.
load B,0 ; Set B to zero because evenly divisible.
gotday load X,B ; B holds the resulting day number. Use as index.
load A,sat+X ; Convert to a day lamp.
store A,OUTPUT
halt
error load A,0xff ; Exit with error
store A,OUTPUT ; All lamps lit.
halt
;
; Store inputs.
;
century db
year db
month db
day db
;
; Static table to hold month keys.
;
monkeys 1
4
4
0
2
5
0
3
6
1
4
6
;
; Need to preserve A while performing some steps.
;
saveA db
;
; Subroutine to blink the lamps to indicate working.
;
rotate db ; Pattern to rotate.
working db ; Save space for return adderess.
store A,saveA ; Remember the value in A.
load A,rotate ; Get the rotate pattern.
store A,OUTPUT ; Show the rotated pattern.
rot A,R,1 ; Rotate the pattern.
store A,rotate ; Save the new rotation.
load A,saveA ; Restore the value of A.
jmp (working) ; Return to caller.
org 133 ; Skip over registers.
;
; Subroutine takes a BCD nuber in A as input and returns the equivalent binary number
; also in A.
;
bcd2bin db ; Save space for return address.
store A,X ; Save A.
sft A,R,4 ; Get the 10's digit.
jmk chkdig ; Make sure digit is 0 - 9.
store A,B ; B will hold the 10's digit x 10 result
add B,B ; B now X 2
sft A,L,3 ; A is now 10's digit X 8
add B,A ; B now 10's digit X 10
store X,A ; Retrieve original value of A
and A,0b00001111 ; Get the 1's digit value in binary.
jmk chkdig ; Make sure digit is 0 - 9.
add A,B ; Add the 10's digit value in binary.
jmp (bcd2bin) ; A now has the converted BCD value.
;
; Subroutine determines if the date is a leap year in January or February and returns
; an offset of 1 if it is, and 0 otherwise.
;
leapyr db ; Save space for return address.
load A,month ; Check to see if month is January or February.
and A,0b11111110 ; Are any bits other than bit 0 set?
jmp A,NE,notlpyr ; Yes then not January or February. Return 0.
load A,year ; Is this an even century?
jmp A,NE,chkyear ; No then have to check the year.
load A,century ; Yes so see if century evenly divisible by 4.
and A,0b00000011 ; Are bits 1 or 0 set?
jmp A,EQ,islpyr ; Yes evenly divisible by 4 and is a leap year.
jmp notlpyr ; No this is not a leap year.
chkyear load A,year ; See if rear evenly divisible by 4.
and A,0b00000011 ; Are bits 1 or 0 set?
jmp A,NE,notlpyr ; Yes so not evenly divisible by 4 and not a leap year.
islpyr load A,1 ; Offset 1.
jmp (leapyr) ; Return offset.
notlpyr load A,0 ; Offset 0.
jmp (leapyr) ; Return offset.
;
; Subroutine determines if a century code needs to be applied to the calculation.
;
cencode db ; Save space for return address.
load A,century ; Century must be between 17 - 20.
chkmin sub A,17 ; Is century less than 17?
jmp A,GE,chkmax ; Yes so century >= 17. Check max boundry.
load A,century ; Increase century by 4.
add A,4
store A,century
jmp chkmin
chkmax load A,century ; Century must be between 17 - 20.
sub A,20 ; Is century greater than 20?
jmp A,LT,retcode ; No so calculate century code.
jmp A,EQ,retcode
load A,century ; Decrease century by 4.
sub A,4
store A,century
jmp chkmax+2
retcode load X,century ; Calculate the century code
sub X,17 ; Create an index into the century codes.
load A,ctcodes+X ; Get the appropriate century code.
jmp (cencode) ; Return century code.
;
; Subroutine that checks if the digit passed in A is in range 0 - 9.
;
chkdig db ; Save space for return adderess.
store A,saveA ; Remember value in A.
load A,9
sub A,saveA ; Subtract value passed from 9.
and A,0b10000000 ; Is negative bit set?
jmp A,NE,error ; Yes so value in A not in range 0 - 9.
load A,saveA ; No so A value in range.
jmp (chkdig) ; Return to caller.
;
; Static table to hold the output pattern for the day of the week.
;
sat 0b00000010
sun 0b10000000
mon 0b01000000
tues 0b00100000
wed 0b00010000
thur 0b00001000
fri 0b00000100
;
; Static table to hold century codes.
;
ctcodes 4
2
0
6
雖然有一項檢查以確保 BCD 輸入僅包含數字 0-9,但由于內存空間不足,未實施對月份 (1-12) 和日期 (1-31) 的一些額外檢查。上述程序占用了 255 字節可用內存中的 251 字節。因此,雖然指令集對于大多數任務來說綽綽有余,但在這臺機器上做有趣事情的限制因素是內存。
更新后的 IDE 和此示例已添加到此項目的GitHub中。
- 終極電腦旋轉輸入開源分享
- 消毒機器人Hanth-x1開源分享
- Commodore 64 KU主板復制品開源硬件
- 掃地機器人開源資料 43次下載
- 手提電腦開源分享
- 平板電腦開源項目
- 杰華特服務器和個人電腦JWH6374 JWH7067 JWH7030 JWH7222 JW7221
- USB控制16個繼電器中1個的開源案例
- 5合1 Arduino機器人開源項目
- 嵌入式軟考——尷尬不,就一個人報名
- Apacheproxy負載均衡和Session復制
- 一個開源的擬人機器人仿生手系統HRI-hand 0次下載
- 使用Python復制文件的方法有哪些 6次下載
- 如何實現PC機與單片機實現通信 49次下載
- 開架式通用水下機器人開源搭建手冊.pdf 11次下載
- 平板電腦是什么端 平板電腦屬于pc端嗎 4272次閱讀
- 如何使用cp和rsync命令復制文件和目錄 6673次閱讀
- 一個易于構建且成本極低的電子設備保護器電路圖 1025次閱讀
- 不輸入密碼即可登錄電腦的方法 2w次閱讀
- 分析總結網優的過去及現狀、未來發展趨勢 2929次閱讀
- 朗銳智科Nvidia K1安卓主板介紹 2355次閱讀
- 如何用個人電腦打造量子模擬器? 4439次閱讀
- USB實現隔離的四種方法分析 5.9w次閱讀
- 用FPGA使當年風靡的Atari 2600 VCS游戲機和Apple II個人電腦再次重生 6317次閱讀
- 閃存芯片陣列+計算加速器,在個人電腦達到服務器級性能 4216次閱讀
- Web3.0-去中心化網絡消滅服務器:重新設計數據結構 6223次閱讀
- 電腦硬件基礎篇gpu(gpu工作原理及作用_特性參數及型號和位置) 8448次閱讀
- 圖形處理器在電腦上的哪個地方 1.5w次閱讀
- 讓機器人通過一段只有一個人的視頻來模仿學習 6024次閱讀
- 一百個人對“電源”有一百種不同的理解 887次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多