Dari Nand ke Tetris - Bangun komputer modern

Repo ini mengacu pada dua kursus yang tersedia di Coursera:
- Bangun komputer modern dari prinsip pertama: dari NAND ke Tetris (Bagian I).
- Bangun komputer modern dari Prinsip Pertama: NAND ke Tetris Bagian II
Anda akan melakukan perjalanan mandiri melalui membangun komputer dari bawah ke atas, dimulai dengan aljabar boolean dan gerbang logika dan diakhiri dengan komputer serba guna yang berfungsi penuh. Anda akan belajar tentang abstraksi perangkat keras, mengimplementasikannya sendiri, dan pada akhirnya mengalami sensasi membangun sistem yang kompleks. Setiap folder berisi solusi saya sendiri untuk tugas dan catatan pribadi saya:
- Proyek 1: Membangun gerbang logika dasar seperti dan, atau, tidak, dan multiplexor
- Proyek 2: Membangun Berbagai Keripik Adder dan Unit Logika Aritmatika (ALU)
- Proyek 3: Membangun register, unit memori, dan memori akses acak (RAM)
- Proyek 4: Mempelajari bahasa mesin dan menulis program tingkat rendah
- Proyek 5: Menggunakan chipset dari Proyek 1-3 untuk membangun unit pemrosesan pusat (CPU) dan platform perangkat keras yang mampu menjalankan program dalam bahasa mesin dari Proyek 4
- Proyek 6: Mengembangkan assembler untuk menerjemahkan program yang ditulis dalam bahasa mesin simbolis ke dalam kode biner.
- Proyek 7: Dalam modul ini kita mulai membangun mesin virtual berbasis tumpukan. Setelah menghadirkan arsitektur mesin virtual dan bahasa VM -nya (yang mirip dengan bytecode Java), kami mengembangkan penerjemah VM dasar (mirip dengan JVM Java), yang dirancang untuk menerjemahkan program VM ke dalam bahasa mesin hack.
- Proyek 8: Dalam modul sebelumnya kami menyajikan abstraksi mesin virtual, dan mengembangkan penerjemah VM dasar yang mengimplementasikan perintah akses aritmatika dan memori bahasa VM. Dalam modul ini kita akan menyelesaikan penerjemah VM dengan menerapkan perintah percabangan dan pemalsuan fungsi VM yang tersisa.
- Proyek 9: Dalam modul ini kami memperkenalkan bahasa jack, serta pemrograman jack. Modul ini memuncak dalam proyek di mana Anda akan mengembangkan aplikasi interaktif sederhana pilihan Anda, menggunakan jack.
- Proyek 10: Terjemahan program tingkat tinggi ke dalam bahasa tingkat bawah terdiri dari dua tahap yang lebih atau kurang independen: analisis sintaksis , dan generasi kode . Analisis Synnax-Subjek modul ini-terdiri dari dua sub-tahap: analisis leksikal (juga disebut tokenisisasi ), dan parsing . Proyek yang dihasilkan adalah Jack Analyzer - program yang mengungkap sintaks program Jack tanpa menghasilkan kode yang dapat dieksekusi.
- Proyek 11: Dalam proyek sebelumnya kami telah membangun sintaksisal sintaks untuk bahasa jack. Dalam hal ini kita akan mengubah penganalisa ini menjadi kompiler jack skala penuh. Ini akan memerlukan memodifikasi logika penganalisa yang menghasilkan kode XML menjadi logika yang menghasilkan kode VM yang dapat dieksekusi.
- Proyek 12: Sistem operasi adalah kumpulan layanan perangkat lunak yang dirancang untuk menutup celah antara program tingkat tinggi dan perangkat keras yang mendasari tempat mereka berjalan. Bahasa modern seperti Java dan Python digunakan bersama dengan perpustakaan kelas standar yang menerapkan banyak layanan OS tersebut. Dalam proyek ini kami akan mengembangkan OS dasar yang akan dikemas dalam serangkaian perpustakaan kelas yang sama. OS akan dikembangkan dalam jack, menggunakan strategi bootstrap, mirip dengan bagaimana Linux dikembangkan dalam C.