ไมโครโปรเซสเซอร์ตัวแรกตั้งโปรแกรมอย่างไร


44

นี่เพิ่งเกิดขึ้นกับฉันว่าถ้าคุณกำลังเขียนระบบปฏิบัติการคุณจะเขียนมันอย่างไร ฉันถามสิ่งนี้ในขณะที่ฉันกำลังอ่านหนังสือพื้นฐานของไมโครโปรเซสเซอร์ตั้งแต่ปี 1980 และคำถามนี้ปรากฏในหัวของฉัน:

ชิพไมโครโปรเซสเซอร์ตัวแรกถูกตั้งโปรแกรมอย่างไร

คำตอบอาจชัดเจน แต่มันบั๊กฉัน


6
หากฉันอาจได้รับอนุญาตให้เสียบงานของฉันเองดูคำตอบของฉัน "เคอร์เนล Linux สามารถคอมไพล์ตัวเองได้อย่างไร" ในกองมากเกิน คำตอบนั้นไม่ชัดเจนจนกว่าคุณจะเข้าใจหลักการทั่วไป ณ จุดนี้คุณจะพูดว่า"แน่นอน ... "
dmckee

@dmckee แต่ก็ยังไม่ตอบคำถามว่ามันรู้ได้อย่างไรว่าจะทำยังไงดี :) ใครบอกคอมพิวเตอร์ว่ามีสวิตช์ทำอะไร? ฉันต้องการรายละเอียดเพิ่มเติมเล็กน้อย
คณบดี

4
ดังนั้นคำถามคือเกี่ยวกับการออกแบบลำดับการบูตของชิปตัวแรก? แน่นอนว่าเป็นคำถามที่อยู่ในเว็บไซต์นี้แต่มันก็เหมือนกับการออกแบบตรรกะดิจิทัลที่สร้างจากส่วนประกอบ .... ทำให้มันเริ่มต้นในสถานะที่รู้จักแล้วป้อนข้อมูลเข้าที่จะทำสิ่งที่มีประโยชน์ ฉันจะฝากมันไว้กับคนอื่นเพื่อให้คำตอบโดยละเอียดเพราะฉันตัวสั่น แต่คุณรู้หรือไม่ว่าคอมพิวเตอร์เครื่องแรกถูกนำไปใช้ในหลอดสุญญากาศใช่ไหม? จากนั้นก็มีรุ่นในทรานซิสเตอร์แต่ละตัวทั้งหมดก่อนไมโครชิปตัวแรก วิศวกรรู้แล้วว่ากำลังทำอะไรอยู่
dmckee

1
สำหรับโปรเซสเซอร์ที่ไม่ใช่ไมโครแน่นอน
user253751

คำตอบ:


56

ฉันจะตอบคำถามของคุณอย่างแท้จริงและอภิปรายเกี่ยวกับไมโครโปรเซสเซอร์ส่วนใหญ่ไม่ใช่คอมพิวเตอร์โดยทั่วไป

คอมพิวเตอร์ทุกเครื่องมีรหัสเครื่อง คำสั่งประกอบด้วย opcode และตัวถูกดำเนินการหนึ่งตัวขึ้นไป ตัวอย่างเช่นคำสั่ง ADD สำหรับIntel 4004 (ไมโครโปรเซสเซอร์ตัวแรก) ถูกเข้ารหัสเป็น 1000RRRR โดยที่ 1000 คือ opcode สำหรับ ADD และ RRRR แทนหมายเลขทะเบียน

โปรแกรมคอมพิวเตอร์แรก ๆ เขียนด้วยมือเขียนด้วยมือ 1 และ 0 เพื่อสร้างโปรแกรมในภาษาเครื่อง จากนั้นจะถูกโปรแกรมเข้าไปในชิป ไมโครโปรเซสเซอร์ตัวแรกใช้ ROM (หน่วยความจำแบบอ่านอย่างเดียว); นี่คือภายหลังถูกแทนที่ด้วยEPROM (Erasable Programmable ROM ซึ่งถูกลบด้วยแสง UV); ตอนนี้โปรแกรมมักจะถูกโปรแกรมเข้าไปในEEPROM ( "Electrically ...- EPROM"ซึ่งสามารถลบบนชิป) หรือหน่วยความจำแฟลชโดยเฉพาะ

ไมโครโปรเซสเซอร์ส่วนใหญ่สามารถเรียกใช้โปรแกรมออกจาก RAM (ซึ่งเป็นมาตรฐานที่ค่อนข้างมากสำหรับทุกอย่างยกเว้นไมโครคอนโทรลเลอร์) แต่จะต้องมีวิธีในการโหลดโปรแกรมลงใน RAM ในตอนแรก เมื่อ Joby Taffey ชี้ให้เห็นในคำตอบของเขาสิ่งนี้ทำด้วยสวิตช์สลับสำหรับ Altair 8080 ซึ่งขับเคลื่อนโดย Intel 8080 (ซึ่งตามหลัง 4004 และ 8008) ในพีซีของคุณมี ROM เล็กน้อยที่เรียกว่าBIOSซึ่งใช้สำหรับเริ่มคอมพิวเตอร์และโหลดระบบปฏิบัติการลงใน RAM

ภาษาเครื่องได้รับความน่าเบื่ออย่างรวดเร็วจริง ๆ ดังนั้นแอสเซมเบลอร์จึงได้รับการพัฒนาที่ใช้ภาษาแอสเซมเบลอร์ mnemonic และแปลโดยทั่วไปหนึ่งบรรทัดของรหัสแอสเซมบลีต่อการเรียนการสอนเป็นรหัสเครื่อง ดังนั้นแทนที่จะเป็น 10000001 เราจะเขียน ADD R1

แต่ต้องมีการเขียนแอสเซมเบลอร์ครั้งแรกด้วยรหัสเครื่อง จากนั้นสามารถเขียนใหม่ในรหัสแอสเซมเบลอร์ของตนเองและรุ่นภาษาเครื่องใช้เพื่อรวบรวมมันในครั้งแรก หลังจากนั้นโปรแกรมสามารถรวบรวมตัวเอง สิ่งนี้เรียกว่าbootstrappingและทำด้วยคอมไพเลอร์ด้วย - โดยทั่วไปแล้วพวกเขาจะเขียนครั้งแรกในแอสเซมเบลอร์ (หรือภาษาระดับสูงอื่น) จากนั้นเขียนใหม่ในภาษาของตนเองและคอมไพล์ด้วยคอมไพเลอร์ดั้งเดิมจนกระทั่งคอมไพเลอร์

เนื่องจากไมโครโปรเซสเซอร์ตัวแรกได้รับการพัฒนามานานหลังจากเมนเฟรมและมินิคอมพิวเตอร์นั้นอยู่ใกล้และ 4004 นั้นไม่เหมาะที่จะใช้งานแอสเซมเบลอร์อยู่ดี Intel อาจเขียน cross-assembler ที่ทำงานบนคอมพิวเตอร์เครื่องใหญ่เครื่องหนึ่งและแปลรหัสประกอบสำหรับ 4004 เป็นอิมเมจไบนารี่ที่สามารถตั้งโปรแกรมเป็น ROM ได้ นี่เป็นเทคนิคทั่วไปที่ใช้ในการคอมไพล์พอร์ตกับแพลตฟอร์มใหม่ (เรียกว่าการคอมไพล์ข้าม )



1
และถ้าคุณต้องการที่จะเขียนโปรแกรมไมโครคอนโทรลเลอร์โดยไม่ต้องใช้คอมพิวเตอร์เครื่องอื่น (นอกเหนือจากสมองของคุณ) คุณสามารถทำได้โดยการสร้างวงจรที่ป้อนโปรแกรมเข้าไปโดยตรง หากถูกตั้งโปรแกรมผ่าน jtag คุณสามารถสลับสวิตช์เพื่อเลียนแบบคำสั่ง jtag ที่จำเป็นในการโปรแกรมอุปกรณ์ ถ้ามันใช้หน่วยความจำภายนอกคุณสามารถใช้อุปกรณ์แยกชิ้นส่วนจำนวนมากและตัวต้านทานจำนวนมากที่เชื่อมโยงสูงหรือต่ำเพื่อเป็นตัวแทนของคำแนะนำ (และอาจใช้ความเร็วสัญญาณนาฬิกาต่ำเนื่องจากฮาร์ดแวร์ของคุณจะช้า)
nategoose

3
@tyblu: ฉันค่อนข้างแน่ใจฟิวส์ - พรหม EPROMs predated รูปแบบที่ง่ายที่สุดของ ROM เป็นหลักคืออาร์เรย์ไดโอดที่มีประชากรแบบเลือกสรร (ในช่วงแรก ๆ ไดโอดจะถูกบัดกรีอย่างแท้จริงบนกริดเพื่อเป็นตัวแทนของขั้วหนึ่งของบิต; ฟิวส์ - พรอมใส่ไดโอดอาร์เรย์บนชิป แต่มีทรานซิสเตอร์แถวที่มีเนื้อมากกว่าไดโอดที่ทางแยก หนึ่งสามารถเลือกไดโอดลบโดยการตั้งค่าสายที่อยู่แล้วกดปุ่มสายข้อมูลที่เชื่อมต่อกับไดโอดอย่างหนักจริงๆต้องการ
supercat

@tyblu: โปรดทราบว่าฟิวส์ -Prom เป็นไฟฟ้าไม่มีอะไรเหมือน OTPROM ที่ทันสมัยซึ่งเป็นเพียงชิป EPROM ในแพคเกจที่ไม่ใช่หน้าต่าง อุปกรณ์ EPROM / OTP นั้นถูกตั้งโปรแกรมโดยการชาร์จประตูไฟฟ้าของทรานซิสเตอร์บางตัว (ซึ่งมีความจุเพียงพอและมีการรั่วไหลเล็กน้อยพอที่จะเก็บประจุไว้อย่างไม่มีกำหนด) ในทางตรงกันข้ามชิปฟิวส์ -PRO เป็นโปรแกรมโดยทำลายการเชื่อมต่อกับไดโอดที่ไม่พึงประสงค์ทางร่างกาย
supercat

1
ตรวจสอบ 'ROM' จากวันที่ทรานซิสเตอร์ไม่ต่อเนื่อง: en.wikipedia.org/wiki/Core_rope_memory
JustJeff

23

ในขั้นต้นโปรแกรมเขียนบนกระดาษแล้วเปลี่ยนเป็นวิธีการป้อนข้อมูลอะไรก็ตามที่คอมพิวเตอร์มีให้ สิ่งนี้เปลี่ยนมาจากลูกบิดสวิทช์และสายจัมเปอร์บนคอมพิวเตอร์เครื่องแรกต่อหมัดการ์ดไปจนถึงแผงปุ่มกด / บอร์ด

ภาพประกอบด้านล่างแสดงให้เห็นว่าโปรแกรมเมอร์ตัวจริงในปัจจุบันใช้อะไร:


10
Dammit, emacs ..
tyblu

6
ฉันเขียนโปรแกรมโปรแกรมเมอร์ (และโปรแกรมเมอร์ผู้ที่ผมเขียนโปรแกรมโปรแกรมเมอร์โปรแกรมที่โปรแกรมเมอร์โปรแกรม.)
Mateen ulhaq

4
ฉันทำโปรแกรมเมอร์ของตัวเอง
W5VO

16

ฉันอยู่ในช่วงที่ไมโครซอฟท์ออกมาเป็นครั้งแรกเราเขียน cross assembler และคอมไพเลอร์บนเมนเฟรมและ minis จากนั้นเราบูตพวกเขาลงบนฮาร์ดแวร์ 8 บิตผู้คนไม่ได้รำคาญการสร้างคอมไพเลอร์ / แอสเซมเบลอร์บนไมโคร ทำให้มีประโยชน์


14

รูปแบบแรกของหน่วยความจำแบบอ่านอย่างเดียวคือตารางที่ที่อยู่จะเลือกแถว (ดึงต่ำ) และคอลัมน์แสดงข้อมูล แต่ละคอลัมน์จะมีการดึงขึ้นและแต่ละแยกจะมีไดโอดบัดกรีในเพื่อเป็นตัวแทน "ศูนย์" หรือไม่มีไดโอดที่จะเป็นตัวแทนของ "หนึ่ง" [ระดับบิตอาจจะคว่ำถ้าต้องการในกรณีที่จะลด จำนวนไดโอดที่ต้องใช้] รูปแบบของบิตที่ต้องการใด ๆ สามารถ "โปรแกรม" โดยการบัดกรีในไดโอดที่เหมาะสม

การออกแบบนี้ถูกนำเข้าสู่โลกของวงจรรวมในรูปของฟิวส์ - พร็อม โดยพื้นฐานแล้วฟิวส์ PROM เป็นวงจรเหมือนด้านบนที่สร้างขึ้นบนชิปยกเว้นว่าไดโอดทั้งหมดจะมีประชากรอยู่และไดโอดทุกตัวจะมีฟิวส์ที่อ่อนแอตามลำดับ เมื่อจัดส่งแล้ว PROM จะอ่าน "0" ในทุกสถานที่ อย่างไรก็ตามเราสามารถเลือกเอาไดโอดออกได้โดยเลือกที่อยู่ที่เหมาะสมและขับสายข้อมูลที่เหมาะสม "ยาก" สูง [หมายเหตุ: ฉันคิดว่าแต่ละบิตอาจมีทรานซิสเตอร์ของตัวเองมากกว่าไดโอด แต่หลักการก็เหมือนกัน]

ฟิวส์ที่ตั้งโปรแกรมฟิวส์นั้นประสบความสำเร็จโดยหน่วยความจำเซมิคอนดักเตอร์ซึ่งเก็บบิตด้วยการฝังประจุในตัวเก็บประจุภายใน ความทรงจำเหล่านี้ไม่เพียง แต่จะมีขนาดกะทัดรัดกว่าฟิวส์ - ฟิวชั่นเท่านั้น แต่หากพวกมันถูกบรรจุไว้ในบรรจุภัณฑ์ที่โปร่งใสด้วย UV พวกเขาอาจถูกลบและนำกลับมาใช้ใหม่ โปรดทราบว่าแม้กระทั่งความทรงจำที่เรียกว่า "โปรแกรมที่ใช้ครั้งเดียว" ได้เกือบทุกครั้งจะใช้การออกแบบเดียวกันนี้ แต่จะอยู่ในแพ็คเกจ UV-opaque

ชายสองคนชี้ไปที่เมทริกซ์ไดโอดขนาดใหญ่ ที่เก็บไดโอดเมทริกซ์ของคอมพิวเตอร์ 1950 MIT ลมกรด

ทรานซิสเตอร์ - เมทริกซ์พร้อมทรานซิสเตอร์ SMD ขนาดเล็ก ที่เก็บทรานซิสเตอร์ควบคุมเมทริกซ์ของปี 2005 CPU MT15


หวังว่าคุณจะไม่รังเกียจการปรับแต่งเล็กน้อยที่ฉันทำกับโพสต์ของคุณ
davidcary

7

ฉันไม่แน่ใจว่ามีใครตอบคำถามจริงของ OP ซึ่งน่าจะเป็น"คอมพิวเตอร์รู้ได้อย่างไรว่าจะเริ่มต้นอย่างไร" ดังนั้นฉันจะหยุดมัน

เริ่มต้นด้วยการเปรียบเทียบ "ทรานซิสเตอร์รู้วิธีเริ่มต้นได้อย่างไร" แน่นอนมันไม่ได้ทำงานได้ตามฟิสิกส์และวิศวกรสร้างวงจรเพื่อให้มันเริ่มต้นในสถานะที่รู้จัก

คอมพิวเตอร์รู้วิธีเริ่มต้นใช้งานเพราะเป็นวงจร (ซับซ้อนมากแน่นอน) และถูกสร้างขึ้นเพื่อเริ่มต้นในสถานะเฉพาะ ในเครื่องจักรที่ทันสมัยซึ่งอาจเป็นหนึ่งในนั้นที่บัสหลักทำการแมปส่วนหนึ่งของพื้นที่ที่อยู่ให้กับผู้ใช้ ROM บนแผงวงจรหลักเป็นหน่วยความจำเหลือน้อย (ROM ถูกเบิร์นด้วย BIOS) ในเครื่องรุ่นแรกสถานะเริ่มต้นอาจหยุด CPU ตัวนับโปรแกรมที่ศูนย์และหน่วยความจำสลับระบบย่อยที่ใช้งานอยู่


6

ระบบปฏิบัติการคือโปรแกรมคอมพิวเตอร์ที่รันโดยตรงบนโปรเซสเซอร์ มันสามารถเขียนในภาษาใด ๆ ที่สามารถรวบรวมหรือประกอบลงในคำแนะนำเครื่อง แอสเซมบลีและ C เป็นตัวเลือกทั่วไป

รหัสถูกโหลดลงในโปรเซสเซอร์คำสั่งเดียวในแต่ละครั้งจากร้านค้า - ROM หรือ RAM

Z3 , หน่วยประมวลผลที่สามารถตั้งโปรแกรมแรกที่ถูกสร้างขึ้นจากรีเลย์ไฟฟ้าและอ่านคำแนะนำจากภาพยนตร์เจาะ

Altair 8800 คอมพิวเตอร์ส่วนบุคคลเครื่องแรกนั้นถูกตั้งโปรแกรมโดยสลับสวิตช์

หากต้องการเรียนรู้วิธีสร้างตัวประมวลผลจากตรรกะดิจิทัลดูที่https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners

สำหรับประวัติให้ดูที่http://en.wikipedia.org/wiki/History_of_computing_hardware


5

นี่เป็นเรื่องเกี่ยวกับคอมพิวเตอร์เก่า ๆ จริงๆ:

เท่าที่ฉันรู้ย้อนกลับไปในอดีตคุณมีแผงด้านหน้าคอมพิวเตอร์ขนาดใหญ่ที่ใช้ในการเขียนโปรแกรม โดยทั่วไปเซลล์หน่วยความจำแต่ละเซลล์ในคอมพิวเตอร์เหล่านั้นเชื่อมต่อกับสวิตช์ คุณจะเพิ่มพลังหน่วยความจำแล้วใช้สวิตช์เพื่อตั้งค่าข้อมูลในแต่ละเซลล์ ด้วยวิธีนี้คุณจะป้อนข้อมูลโปรแกรมทีละนิดในหน่วยความจำของคอมพิวเตอร์ จากนั้นคุณจะกำหนดจุดเริ่มต้นของโปรแกรมและเริ่มการทำงาน

เมื่อเทคโนโลยีก้าวหน้าขึ้นโปรแกรมที่เรียกว่า bootloader ได้รับการพัฒนา เป็นโปรแกรมสั้น ๆ ที่มีจุดเริ่มต้นโปรแกรมจากหน่วยความจำของคอมพิวเตอร์ ปัญหาในการเข้าโปรแกรมทีละน้อย (และต่อมามากกว่าหนึ่งบิตโดยใช้เลขฐานแปดและเลขฐานสิบหกภายหลัง) ก็คือมันช้ามากและมีโอกาสมากที่ผู้ปฏิบัติงานจะทำผิดพลาดในขณะโหลดโปรแกรม ดังนั้นโปรแกรมระยะสั้นจะถูกใช้เพื่อโหลดโปรแกรมขนาดใหญ่ที่เก็บไว้ในหน่วยความจำของคอมพิวเตอร์ เมื่อเวลาผ่านไปส่วนของรหัสที่ต้องป้อนด้วยมือลดลงและในคอมพิวเตอร์สมัยใหม่เรามักจะมี bootloaders ที่เขียนใน ROM บางประเภทหรือแม้แต่หน่วยความจำแฟลช


4
ในเครื่อง 'แผงด้านหน้า' เช่นเดียวกับระบบ S-100 ก่อนหน้าสวิตช์จะช่วยให้คุณควบคุมบัสระบบได้ สวิตช์ตัวหนึ่งจะให้คุณระงับโปรเซสเซอร์ ในขณะที่ตัวประมวลผลถูกระงับคุณสามารถใส่ที่อยู่ด้วยตนเองบนบัสที่อยู่ (ผ่านสวิตช์) ใส่ข้อมูลบนบัสข้อมูล (สวิตช์เพิ่มเติม) จากนั้นทำให้วงจรการเขียนบนบัสด้วยตนเอง (สวิตช์อื่น) หรือ วงจรการอ่านเพื่อดึงข้อมูลกลับไปที่ LED แต่ละดวง 8 ดวงและอ่านไบนารี ฯลฯ การทำเช่นนี้คุณสามารถเก็บรหัสเครื่องไว้ใน RAM ได้อย่างเพียงพอยกเลิกการระงับโปรเซสเซอร์และไปจากที่นั่น
JustJeff

4

ฉันไม่กี่ปีที่ผ่านมาเจอโปรแกรมเมอร์ไมโครคอนโทรลเลอร์ที่มีการแสดงผลสี่ส่วนเจ็ดหลักและปุ่มกดฐานสิบหก ฉันแน่ใจว่านี่ไม่มีไมโครคอนโทรลเลอร์บนเครื่องและอนุญาตให้คุณป้อนรหัสเครื่องโดยตรงทีละครั้ง

ดังนั้นสิ่งนี้จะช่วยให้คุณสามารถรวบรวมรายชื่อรหัส Op ด้วยตนเองได้อย่างเจ็บปวดและป้อนเข้าไปในชิป

ฉันไม่รู้ว่าคุณยังสามารถหามันได้ แต่ฉันเดาว่ามีบางสิ่งที่คล้ายกันถูกนำกลับมาใช้เมื่อไมโครคอนโทรลเลอร์เป็นของใหม่


1
ดูเหมือนจะเป็น KIM-1 หรือ Cosmac ELF ซึ่งทั้งคู่รวมถึงไมโครโปรเซสเซอร์ (MOS 6502 และ RCA [CD] 1802) KIM: oldcomputers.net/kim1.html เอลฟ์: cosmacelf.com
mctylr

มันอาจเป็นสิ่งที่ mctylr พูด ในเครื่องประเภทนี้มักจะมีโปรแกรม 'จอภาพ' ขนาดเล็กใน ROM เมื่อคุณป้อนไบต์ด้วยปุ่มกดจริง ๆ แล้วมันคือ 6502 (หรือ 8085 หรืออะไรก็ตาม) ที่อ่านคีย์การแก้ไขหน่วยความจำอัปเดตไฟ LED ฯลฯ
JustJeff

1

ไมโครโปรเซสเซอร์ตัวแรกจะได้รับการโปรแกรมด้วยความช่วยเหลือของคอมพิวเตอร์ที่มีอยู่ซึ่งไม่ได้ใช้ไมโครโปรเซสเซอร์ ก่อนที่ซีพียูตัวแรกจะถูกผลิตบนชิปตัวเดียวก็มีสถาปัตยกรรมคอมพิวเตอร์ขั้นสูงที่สร้างขึ้นจากส่วนประกอบที่แยกจากกันแทนที่จะเป็นไมโครโปรเซสเซอร์ ลองดูที่, โอ้, พูด, IBM 360

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.