Các bộ vi xử lý đầu tiên được lập trình như thế nào?


44

Điều này đã cho tôi thấy rằng nếu bạn đang viết một hệ điều hành thì bạn đang viết nó trên cái gì? Tôi hỏi điều này khi tôi đang đọc một cuốn sách cơ bản về vi xử lý từ năm 1980 và câu hỏi này xuất hiện trong đầu tôi:

Chip vi xử lý đầu tiên được lập trình như thế nào?

Câu trả lời có thể rõ ràng nhưng nó làm tôi khó chịu.


6
Nếu tôi có thể được phép cắm công việc của riêng mình, hãy xem câu trả lời của tôi về "Làm thế nào nhân Linux có thể tự biên dịch?" trên Stack Overflow . Câu trả lời là không rõ ràng cho đến khi bạn hiểu nguyên tắc chung, tại thời điểm đó, bạn sẽ nói "Chà, tất nhiên ..."
dmckee

@dmckee Nhưng nó vẫn không trả lời được câu hỏi làm sao nó biết phải làm gì :) ai bảo máy tính có công tắc phải làm gì? Tôi muốn biết thêm một chút chi tiết.
Trưởng khoa

4
Vì vậy, câu hỏi là về thiết kế trình tự khởi động của chip đầu tiên? Chà, đó chắc chắn là một câu hỏi thuộc về trang web này , nhưng nó tiến hành như thiết kế logic kỹ thuật số được xây dựng từ các thành phần .... làm cho nó bắt đầu ở trạng thái đã biết, sau đó cung cấp cho nó đầu vào sẽ làm những việc hữu ích. Tôi sẽ để nó cho người khác để cung cấp câu trả lời chi tiết, bởi vì tôi rất run về điều đó, nhưng bạn biết rằng các máy tính đầu tiên được thực hiện trong các ống chân không, phải không? Sau đó, có một thế hệ trong các bóng bán dẫn riêng lẻ, tất cả trước khi chip vi mô đầu tiên. Các kỹ sư đã biết những gì họ đang làm.
dmckee

1
Trên các bộ xử lý không vi mô, tất nhiên.
dùng253751

Câu trả lời:


56

Tôi sẽ lấy câu hỏi của bạn theo nghĩa đen và thảo luận chủ yếu là vi xử lý, không phải máy tính nói chung.

Tất cả các máy tính có một số loại mã máy. Một lệnh bao gồm một opcode và một hoặc nhiều toán hạng. Ví dụ: lệnh ADD cho Intel 4004 (bộ vi xử lý đầu tiên) được mã hóa thành 1000RRRR trong đó 1000 là mã opcode cho ADD và RRRR đại diện cho số đăng ký.

Các chương trình máy tính đầu tiên được viết bằng tay, mã hóa bằng tay 1 và 0 để tạo chương trình bằng ngôn ngữ máy. Điều này sau đó được lập trình vào chip. Các bộ vi xử lý đầu tiên sử dụng ROM (Bộ nhớ chỉ đọc); cái này sau đó đã được thay thế bằng EPROM (ROM có thể lập trình xóa được, đã bị xóa bằng tia UV); bây giờ các chương trình thường được lập trình thành EEPROM ( "Điện ... - EPROM" , có thể xóa trên chip), hoặc cụ thể là bộ nhớ Flash.

Hầu hết các bộ vi xử lý hiện có thể chạy các chương trình hết RAM (đây là tiêu chuẩn khá nhiều cho mọi thứ trừ vi điều khiển), nhưng phải có cách tải chương trình vào RAM ngay từ đầu. Như Joby Taffey đã chỉ ra trong câu trả lời của mình, điều này đã được thực hiện với các công tắc bật tắt cho Altair 8080, được cung cấp bởi Intel 8080 (đi theo 4004 và 8008). Trong PC của bạn, có một chút ROM được gọi là BIOS được sử dụng để khởi động máy tính và tải HĐH vào RAM.

Ngôn ngữ máy trở nên tẻ nhạt rất nhanh, do đó, các chương trình biên dịch chương trình được phát triển lấy ngôn ngữ trình biên dịch mã hóa và dịch nó, thường là một dòng mã lắp ráp cho mỗi lệnh, thành mã máy. Vì vậy, thay vì 10000001, người ta sẽ viết THÊM R1.

Nhưng trình biên dịch đầu tiên phải được viết bằng mã máy. Sau đó, nó có thể được viết lại bằng mã trình biên dịch riêng và phiên bản ngôn ngữ máy được sử dụng để lắp ráp lần đầu tiên. Sau đó, chương trình có thể tự lắp ráp. Điều này được gọi là bootstrapping và cũng được thực hiện với trình biên dịch - chúng thường được viết đầu tiên bằng trình biên dịch (hoặc ngôn ngữ cấp cao khác), sau đó viết lại bằng ngôn ngữ của chúng và được biên dịch bằng trình biên dịch gốc cho đến khi trình biên dịch có thể tự biên dịch.

Do bộ vi xử lý đầu tiên được phát triển rất lâu sau khi máy tính lớn và máy tính mini xuất hiện và 4004 không thực sự phù hợp để chạy trình biên dịch chương trình, Intel có thể đã viết một trình biên dịch chéo chạy trên một trong các máy tính lớn của mình và dịch mã lắp ráp cho 4004 thành hình ảnh nhị phân có thể được lập trình vào ROM. Một lần nữa, đây là một kỹ thuật phổ biến được sử dụng để chuyển trình biên dịch sang nền tảng mới (được gọi là biên dịch chéo ).



1
Và nếu bạn thực sự muốn lập trình một vi điều khiển mà không cần máy tính khác (ngoài bộ não của bạn), bạn có thể làm như vậy bằng cách xây dựng mạch điện đưa chương trình vào đó trực tiếp. Nếu đã được lập trình qua jtag thì bạn có thể lật các công tắc để bắt chước các lệnh jtag cần thiết để lập trình cho thiết bị. Nếu nó sử dụng ram ngoài thì bạn có thể sử dụng rất nhiều bộ phân kênh và các mảng điện trở lớn được buộc cao hoặc thấp để thể hiện các bit của hướng dẫn (và có thể sử dụng tốc độ xung nhịp thấp vì phần cứng của bạn sẽ chậm).
chiến lược

3
@tyblu: Tôi khá là cầu chì-Proms trước các EPROM. Dạng ROM đơn giản nhất về cơ bản là một dãy diode được chọn lọc (trong những ngày đầu, các điốt theo nghĩa đen sẽ được hàn vào lưới để biểu thị một cực của bit; một diode bị thiếu đại diện cho cực khác). Cầu chì-PROM đặt một mảng diode trên chip, nhưng có các bóng bán dẫn hàng mạnh hơn nhiều so với điốt ở các giao điểm. Người ta có thể loại bỏ một cách chọn lọc các điốt bằng cách đặt các dây địa chỉ và sau đó nhấn thật mạnh các dây dữ liệu được kết nối với các điốt mà chúng muốn loại bỏ.
supercat

@tyblu: Lưu ý rằng các cầu chì-Prom không có điện giống như các OTPROM hiện đại, đơn giản là các chip EPROM trong các gói không có cửa sổ. Các thiết bị EPROM / OTP được lập trình bằng cách sạc điện các cổng của một số bóng bán dẫn nhất định (có đủ điện dung và ít rò rỉ, để giữ một điện tích về cơ bản vô thời hạn). Ngược lại, các chip cầu chì-PROM được lập trình bằng cách phá hủy vật lý các kết nối đến các điốt không mong muốn.
supercat

1
kiểm tra 'ROM' này từ thời của các bóng bán dẫn rời rạc: en.wikipedia.org/wiki/Core_rope_memory
JustJeff

23

Ban đầu, các chương trình được viết trên giấy, và sau đó chuyển sang bất kỳ phương thức nhập nào mà máy tính có sẵn. Điều này đã đi từ núm, công tắc và dây nhảy trên các máy tính đầu tiên, đến thẻ đục lỗ, đến bàn phím / bảng.

Hình minh họa dưới đây cho thấy những gì lập trình viên thực sự ngày nay sử dụng:


10
Chết tiệt, emacs ..
tyblu

6
Tôi lập trình viên lập trình. (Và những lập trình viên tôi lập trình lập trình viên lập trình viên lập trình viên.)
Mateen Ulhaq

4
Tôi làm lập trình viên của riêng tôi.
W5VO

16

Vâng, tôi đã ở đây khi micros lần đầu tiên xuất hiện, chúng tôi đã viết các trình biên dịch và trình biên dịch chéo trên các máy tính lớn và minis, sau đó chúng tôi đã khởi động chúng vào phần cứng 8 bit, mọi người không thực sự bận tâm đến việc xây dựng trình biên dịch / trình biên dịch trên micros cho đến khi chúng có đủ bộ nhớ cục bộ làm cho nó hữu ích


14

Một dạng đầu tiên của bộ nhớ chỉ đọc là một lưới trong đó địa chỉ sẽ chọn một hàng (kéo nó xuống thấp) và các cột biểu thị dữ liệu. Mỗi cột sẽ có một kéo lên và mỗi giao lộ sẽ có một diode được hàn vào để biểu thị một "số không" hoặc không có một diode nào để biểu thị một "một" [mức bit có thể được đảo ngược nếu muốn, trong trường hợp điều đó sẽ làm giảm số lượng điốt cần thiết]. Bất kỳ mẫu bit mong muốn nào cũng có thể được "lập trình" bằng cách hàn trong các điốt thích hợp.

Thiết kế này đã được đưa vào thế giới mạch tích hợp dưới dạng cầu chì-PROM. Về cơ bản, một cầu chì PROM là một mạch giống như ở trên, được xây dựng trên một con chip, ngoại trừ tất cả các điốt được đưa vào, và mọi diode đều có một cầu chì yếu nối tiếp với nó. Khi được vận chuyển, một PROM sẽ đọc "0" tại tất cả các địa điểm. Tuy nhiên, người ta có thể loại bỏ một cách chọn lọc các điốt bằng cách chọn địa chỉ thích hợp và điều khiển các dòng dữ liệu thích hợp "cứng" cao [lưu ý: Tôi nghĩ rằng mỗi bit có thể có bóng bán dẫn riêng, thay vì một diode, nhưng nguyên tắc là như nhau].

Các Prom được lập trình cầu chì đã thành công nhờ bộ nhớ bán dẫn, lưu trữ bit bằng cách cấy điện tích vào các tụ điện bên trong. Những ký ức như vậy không chỉ nhỏ gọn hơn các cầu chì, mà nếu chúng được đặt trong các gói trong suốt UV, chúng có thể bị xóa và tái sử dụng. Lưu ý rằng ngay cả cái gọi là bộ nhớ "lập trình một lần" hầu như luôn sử dụng thiết kế tương tự, nhưng chỉ đơn giản được chứa trong các gói mờ đục UV.

Hai người đàn ông chỉ vào một ma trận diode lớn Cửa hàng điều khiển ma trận diode của Máy tính lốc xoáy MIT 1950

ma trận bóng bán dẫn với các bóng bán dẫn SM nhỏ cửa hàng điều khiển ma trận bóng bán dẫn của CPU MT15 năm 2005


hy vọng bạn không bận tâm đến những điều chỉnh nhỏ mà tôi đã thực hiện cho bài viết của mình.
davidcary

7

Tôi không chắc chắn rằng bất cứ ai đã trả lời câu hỏi thực sự của OP, dường như là "Làm thế nào để máy tính biết làm thế nào để bắt đầu?" Vì vậy, tôi sẽ có một vết nứt tại nó.

Bắt đầu với một sự tương tự. "Làm thế nào để một bóng bán dẫn biết làm thế nào để bắt đầu?" Tất nhiên, nó không, nó chỉ hoạt động theo vật lý, và kỹ sư xây dựng mạch để nó bắt đầu ở trạng thái đã biết.

Máy tính biết làm thế nào để bắt đầu bởi vì chúng là các mạch (tất nhiên rất phức tạp) và chúng được chế tạo để bắt đầu ở một trạng thái cụ thể. Trong một máy hiện đại, trạng thái đó có thể là một trong đó bus chính sẽ lấy lại một phần không gian địa chỉ để sử dụng ROM trên bo mạch chủ dưới dạng bộ nhớ thấp (ROM đã được ghi bằng BIOS). Trong một máy thế hệ đầu tiên, trạng thái ban đầu có thể đã bị dừng CPU, bộ đếm chương trình ở mức 0 và bộ nhớ chuyển đổi hệ thống phụ hoạt động.


6

Một hệ điều hành là một chương trình máy tính chạy trực tiếp trên bộ xử lý. Nó có thể được viết bằng bất kỳ ngôn ngữ nào có thể được biên dịch hoặc lắp ráp theo hướng dẫn của máy. Hội và C là những lựa chọn phổ biến.

Mã được tải vào bộ xử lý một lệnh tại một thời điểm từ cửa hàng - ROM hoặc RAM.

Các Z3 , bộ vi xử lý có thể lập trình đầu tiên được xây dựng ra khỏi rơle cơ điện và đọc hướng dẫn từ bộ phim đấm.

Altair 8800, máy tính cá nhân đầu tiên, được lập trình bằng cách bật công tắc.

Để tìm hiểu cách bộ xử lý được xây dựng từ logic kỹ thuật số, hãy xem https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-arch architecture-for-not-exactly-beginners

Để biết lịch sử, hãy xem http://en.wikipedia.org/wiki/History_of_computing_hardware


5

Đây là một chút về máy tính thực sự cũ:

Theo như tôi biết, hồi trước, bạn có một mặt trước máy tính lớn được sử dụng để lập trình cho chúng. Về cơ bản, mỗi ô nhớ trong các máy tính đó được kết nối với các công tắc. Bạn sẽ cấp nguồn cho bộ nhớ và sau đó sử dụng các công tắc để đặt dữ liệu trong mỗi ô. Bằng cách này, bạn sẽ nhập từng chương trình vào bộ nhớ của máy tính. Sau đó, bạn đặt điểm bắt đầu của chương trình và bắt đầu thực hiện.

Khi công nghệ phát triển, cái gọi là chương trình bootloader đã được phát triển. Chúng là những chương trình ngắn mà toàn bộ quan điểm là bắt đầu một chương trình khác từ bộ nhớ của máy tính. Vấn đề với việc nhập chương trình từng chút một (và sau đó hơn một bit sử dụng số thập lục phân và số thập lục phân sau này) là nó rất chậm và có khả năng lớn là nhà điều hành sẽ mắc lỗi trong khi tải chương trình. Vì vậy, các chương trình ngắn sẽ được sử dụng để tải các chương trình lớn hơn được lưu trữ trong bộ nhớ của máy tính. Khi thời gian trôi qua, một phần mã phải nhập bằng tay đã giảm và trong các máy tính hiện đại, chúng ta thường có bộ tải khởi động được viết bằng một số loại ROM hoặc thậm chí là bộ nhớ flash.


4
Trong các máy 'bảng mặt trước', như các hệ thống S-100 trước đó, các công tắc cho phép bạn điều khiển xe buýt hệ thống. Một chuyển đổi sẽ cho phép bạn đình chỉ bộ xử lý. Trong khi bộ xử lý bị treo, sau đó bạn có thể đặt địa chỉ thủ công trên bus địa chỉ (thông qua các công tắc), đưa dữ liệu lên bus dữ liệu (nhiều công tắc hơn) và sau đó gây ra chu kỳ ghi trên xe buýt (một công tắc khác) hoặc một chu trình đọc để kéo dữ liệu trở lại 8 đèn LED riêng lẻ và đọc nhị phân, v.v. Làm như vậy, bạn có thể lưu trữ đủ mã máy trong RAM, bỏ tạm dừng bộ xử lý và đi từ đó.
JustJeff

4

Cách đây vài năm, tôi đã bắt gặp một lập trình viên vi điều khiển có màn hình 7 chữ số gồm bốn chữ số và bàn phím hex. Tôi chắc chắn rằng điều này không có vi điều khiển trên tàu và cho phép bạn nhập mã máy trực tiếp một byte mỗi lần.

Vì vậy, điều này sẽ cho phép bạn (đau đớn) biên dịch một danh sách các mã Op theo cách thủ công từng cái một và nhập chúng vào chip.

Tôi không biết bạn vẫn có thể lấy chúng hay không, nhưng tôi đoán rằng một cái gì đó tương tự đã được sử dụng trở lại khi vi điều khiển còn khá mới.


1
Âm thanh có thể giống như KIM-1 hoặc Cosmac ELF, cả hai đều bao gồm một bộ vi xử lý (MOS 6502 và RCA [CD] 1802). KIM: oldcomputing.net/kim1.html ELF: cosmacelf.com
mctylr

Nó có lẽ là một cái gì đó giống như những gì mctylr nói. Trong các loại máy này, thường có một chương trình 'màn hình' nhỏ trong ROM. Khi bạn nhập byte bằng bàn phím, đó thực sự là 6502 (hoặc 8085 hoặc bất cứ thứ gì) đọc các phím, sửa đổi bộ nhớ, cập nhật đèn LED, v.v.
JustJeff

1

Các bộ vi xử lý đầu tiên sẽ được lập trình với sự trợ giúp của các máy tính hiện tại không dựa trên bộ vi xử lý. Trước khi CPU đầu tiên được sản xuất trên một chip, đã tồn tại các kiến ​​trúc máy tính tiên tiến được xây dựng từ các thành phần riêng biệt thay vì bộ vi xử lý. Hãy nhìn vào, ồ, nói, IBM 360.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.