"Akhirnya, kita sampai pada instruksi yang kita semua sudah menunggu - SEX!"
/ dari artikel tentang mikroprosesor CDP1802 /

Pada awal 1970-an,
permainan elektronik sederhana seperti
Pong sangat populer di AS (di USSR,
analognya mulai dijual dalam 5-10 tahun). Sebagai aturan, permainan seperti itu tidak memiliki mikroprosesor dan memori dalam arti modern kata-kata ini, tetapi dibangun di atas logika yang kaku. Dengan demikian, kartrid yang dapat diganti tidak masuk akal, dan di mana mereka berada - mereka hanya satu set jumper yang termasuk permainan yang diinginkan.
Pada tahun 1977, dua konsol dirilis hampir bersamaan:
Fairchild Channel F dan
RCA Studio II . Ini adalah konsol game pertama dalam bentuk komputer lengkap - dengan mikroprosesor dan program kartrid yang dapat diganti.RCA Studio II, yang akan dibahas, tidak hanya dikembangkan oleh
RCA , tetapi oleh orang tertentu -
Joseph A. Weisbecker (seperti seluruh arsitektur COSMAC) .
Perangkat seperti pertama -
System 00 , juga dikenal sebagai COSMAC FRED (1971) adalah prototipe dan tidak diproduksi secara massal.
Prosesor di dalamnya diimplementasikan pada logika biasa (dalam
FRED2 - pada dua chip yang disebut CDP1801 R dan U, yang muncul pada tahun 1973). RAM berada di wilayah 256 byte - 4 kb, di samping itu, FRED2 memiliki built-in tape recorder.
Implementasi komersial pertama dari arsitektur COSMAC adalah
COSMAC ELF . Pada tahun 1976, ELF diposisikan sebagai komputer untuk ham (serangkaian artikel
diterbitkan di majalah Popular Electronics) dan merupakan papan kecil dengan toggle switch, indikator, mikroprosesor CDP1802 (yang sama 1801, tetapi sudah dalam satu chip) dan 256 byte RAM. Baginya, ada kartu ekspansi tambahan yang memungkinkan untuk menampilkan grafik pada monitor (menggunakan chip CDP1861), keyboard eksternal dan tape recorder terhubung. Berdasarkan ELF dengan ekstensi, ELF II dan VIP muncul. Dalam COSMAC ROM, ada mesin virtual yang disebut CHIP-8, dipertajam untuk permainan primitif (perintah untuk mengeluarkan dan memindahkan sprite perangkat lunak, menghasilkan angka acak, dll.) Ada komputer dan terminal primitif lainnya berdasarkan arsitektur ini.
Semua perangkat ini adalah pendahulu langsung RCA Studio II dan memiliki arsitektur perangkat keras dan perangkat lunak yang sangat dekat.
RCA Studio II dirilis pada tahun 1977 dan kemudian dihargai $ 150 ($ 600 untuk uang saat ini). Seperti yang sering terjadi, yang pertama di pasar belum tentu yang paling sukses. Pada tahun 2008, majalah PC World
mengakui konsol ini sebagai konsol game terburuk sepanjang masa (yang, pada prinsipnya, tidak jauh dari kebenaran) .Gambar hitam dan putih kotak, tidak adanya joystick (alih-alih mereka dua bidang 10 tombol) dan selusin game - untuk membuatnya agak tidak pembeli senang.
Selain itu, semua game (baik built-in dan dijual dengan cartridge) ditulis dalam pseudo-code dari mesin virtual ST2 (ide yang sama dengan CHIP-8 di COSMACs), yang membuatnya sangat lambat.
RCA berhasil merilis sekitar 64 ribu unit RCA Studio II, tidak termasuk klon yang muncul kemudian (Toshiba Visicom, Conic M-1200, dll.) Dengan munculnya
Atari VCS , RCA Studio II yang lama dan Fairchild Channel F langsung keluar dari pertarungan.
CPU
Sebagai produsen chip, RCA memilih produknya sendiri sebagai prosesor set-top box - mikroprosesor
RCA CDP1802 , yang beroperasi pada 1,78 MHz dan diproduksi menggunakan teknologi CMOS.
Pendahulunya adalah CDP1801, prosesor dua chip (sepenuhnya kompatibel dengan 1802):
CDP1802 dikenal karena versi tahan radiasi (silikon pada safir), di mana ia digunakan, misalnya, di stasiun antarplanet
Galileo , terbang ke Jupiter pada 1990-an (ada 6 prosesor seperti itu), serta di
MAGSAT .
Prosesor memiliki skema penggunaan register yang agak rumit. Ia memiliki satu akumulator 8-bit D dan enam belas register 16-bit - R0..RF (R0-R15), yang masing-masing dapat menjadi penunjuk instruksi, tergantung pada isi register 4-bit P (menunjuk ke salah satu R), dapat diubah Tim SEP Rn. Dengan kata lain - tidak ada PC di prosesor!
Selain itu, semua R0 ... R15 dapat menjadi indeks (alamat). Pilihan ditentukan berdasarkan nilai dalam register X 4-bit (dimodifikasi oleh perintah SEX Rn), setelah itu R yang dipilih dianggap diindeks untuk beberapa perintah.
Register alamat untuk DMA selalu R0. Di dalam interupsi, penghitung instruksi adalah R1.
Ada register T 8-bit, yang digunakan untuk secara otomatis menyimpan register X dan P di dalamnya ketika terjadi interupsi. Interupsi diaktifkan dengan mengatur bendera IE Interrupt Enable melalui perintah RET atau DIS.
Register 4-bit I dan N berisi instruksi saat ini yang dijalankan oleh prosesor.
Ada register bendera - DF. Lebih tepatnya, satu bendera, karena itu adalah satu digit dan hanya berisi bendera pembawa.
Selain itu, prosesor memiliki port output bit tunggal Q, yang statusnya diubah oleh perintah SEQ dan REQ.
Seperti dalam banyak prosesor generasi itu, tumpukan dalam arti biasa tidak ada di sini (tidak ada PUSH, perintah POP, atau penunjuk tumpukan) dan, jika perlu, diimplementasikan oleh instruksi yang ada.
Tidak ada instruksi tradisional untuk melakukan rutinitas panggilan. Transisi ke subrutin dilakukan menggunakan instruksi SEP Rn yang, saya ingat, membuat register Rn yang ditunjukkan sebagai penghitung perintah. Untuk kembali, instruksi SEP yang sama digunakan, tetapi dengan register yang merupakan counter perintah sebelum panggilan. Atau (dalam versi yang lebih universal, tetapi lebih lambat) MARK dan RET digunakan.
Selain lompatan bersyarat dan tidak bersyarat tradisional (by the way - mereka semua mutlak), ada beberapa instruksi SKIP bahwa, ketika kondisi terpenuhi, lewati instruksi SKIP berikutnya (dua byte). SKIP tanpa syarat juga disediakan.
Prosesor 1802 sering disebut sebagai salah satu prosesor RISC pertama. Namun, dalam konteks yang sama, menyebutkan dibuat, katakanlah, 6502, serta beberapa yang lain. Sudah pasti bahwa arsitektur tidak cukup biasa dan, dari sudut pandang pemrograman, menyebabkan perasaan campur aduk. Di satu sisi, ada sebanyak 16 register 16-bit. Di sisi lain, isinya secara langsung hanya dapat dikurangi dan ditingkatkan satu. Misalnya, meletakkan konstanta di Rn terlihat seperti ini:
ldi $01 ; const -> D plo r6 ; D -> R6.0 ldi $02 ; const -> D phi r6 ; D -> R6.1
Oleh karena itu, bagian terbesar dari kode bergerak bolak-balik.
Dari transisi berdasarkan kondisi, hanya ada transisi ke nol (hanya situasi ketika 0 berada di akumulator D) dan flag transfer dipertimbangkan. Loop khas adalah sebagai berikut:
loop: ... dec r7 ; R7-- glo r7 ; R7 -> D bnz loop loop: ... adi 2 ; D = D + const xri $07 ; compare using XOR. (D == const) -> D bnz loop
Semua instruksi aritmatika dan logika hanya bekerja dengan baterai D.
Selain port bit tunggal yang dikendalikan oleh SEQ / REQ, ada juga port empat bit yang dikendalikan oleh perintah OUT / INP. Sayangnya, ini tidak digunakan di RCA Studio II.
MEMORY
Ada: 2 KB ROM (BIOS + lima game built-in) 512 byte RAM (setengah dicadangkan untuk video)
Kartu memori
000-2FF ROM RCA System ROM : SP2 300-3FF ROM RCA System ROM : BIOS 400-7FF ROM ( ) 400-7FF ROM ( ) 1024 800-8FF RAM (256 ) 900-9FF RAM (256 ) A00-BFF ROM ( ) C00-DFF --- , 800-9FF E00-FFF ROM ( )
Penting untuk dicatat secara spesifik bahwa untuk permainan dan program pada kartrid hanya tersedia sebagian dari BIOS - yang berisi SP2 (tidak perlu, pada umumnya), gambar angka dari 0 hingga 9 dan penangan interupsi standar untuk video.
VIDEO
Untuk grafik, chip
RCA CDP1861 digunakan - yang disebut "Pixie".
RCA Studio II standar memiliki output standar dengan hanya antena (RF), namun, orang
merombaknya menjadi komposit sehingga kualitasnya lebih baik (saya hampir menulis "untuk reproduksi warna yang lebih baik" :))
Secara teknis, pengontrol video memberikan resolusi maksimum 64x128 dalam dua warna (hitam dan putih). Namun, ini membutuhkan memori video 1024 byte, dan di Studio II jumlah total RAM adalah 512 byte. Oleh karena itu, resolusinya adalah 64x32 (yang membutuhkan 256 byte). Resolusi horizontal (64) ditetapkan. Dalam satu baris 64 piksel, 8 byte selalu ditampilkan, dan ini terjadi selama 14 siklus prosesor.
BIOS interrupt handler digunakan untuk menampilkan memori ($ 900- $ 9ff) di layar. Interupsi dimulai oleh pengontrol video dan terjadi 60 kali per detik (NTSC). Prosesor BIOS melakukan semua operasi yang diperlukan - program yang dapat dijalankan hanya perlu mengubah memori video, di mana setiap bit secara langsung sesuai dengan titik hitam atau putih (dari kiri ke kanan, dari atas ke bawah).
Namun, tidak ada yang mencegah Anda menulis penangan sendiri. Kasing paling sederhana adalah resolusi 64x128, karena itu alami untuk pengontrol video. Baginya, di handler, cukup untuk menulis alamat memori video di R0 (dari mana data untuk layar berasal) dan byte akan ditampilkan melalui DMA sendiri, mengisi bingkai. Situasinya lebih rumit dengan resolusi vertikal selain 128. Di sana Anda harus memasukkan penundaan dan duplikat data dengan mengubah R0 (lihat deskripsi sumber cdp1861 dan BIOS).
Pada prinsipnya, Anda bahkan dapat membuat resolusi vertikal variabel, tidak menampilkan apa pun ke bagian layar, dan juga menentukan ROM, bukan RAM (atau sebagian ROM, dan sebagian RAM) sebagai memori video. Anda juga dapat menerapkan pengguliran vertikal, mengubah inisial dalam R0 Alamat dari mana data mulai dikeluarkan ke controller.
Perhatikan bahwa pada output INT dari pengontrol video, unit muncul dua garis sebelum sinar mencapai wilayah yang terlihat. Oleh karena itu, pengendali interupsi biasanya dimulai dengan penundaan yang memungkinkan Anda untuk mulai menampilkan memori tepat waktu.
Pengontrol video juga memiliki output EFX, di mana 0 muncul untuk 4 baris sebelum sinar muncul di wilayah yang terlihat dan kemudian untuk 4 baris terakhir dari area ini. Output EFX terhubung ke prosesor EF1 dan statusnya dapat diperiksa dengan perintah B1 (BN1).
Harapan umum dari sinar balik di sepanjang bingkai diimplementasikan sebagai berikut:
... delay: bn1 delay ; wait for EFX in video chip ...
Seperti disebutkan di atas, dalam ROM tidak ada gambar huruf dan tanda. Namun, masih ada angka (lagipula, dalam gim bawaan Anda perlu menunjukkan poin dan nomor pemain). Namun, bahkan di sini mereka berhasil menyelamatkan:
Seperti yang Anda lihat, angka-angka tersebut saling menempel sehingga yang tersisa diperoleh dari beberapa yang berdekatan.
SUARA
Anggap saja ada suara. Tapi tidak lebih. NE555 melekat pada port output single-bit tunggal dari CDP1802 dengan pengikat dan kemudian semuanya terhubung ke speaker yang dibangun ke konsol.Ketika sebuah unit dipasok ke input NE555 RST (oleh perintah prosesor SEQ), ia mulai berbunyi bip pada frekuensi 625Hz. Ketika nol (dengan perintah REQ) - bip berhenti. Sebenarnya itu saja. Namun, masih ada kapasitor yang karenanya, pada awal mencicit, frekuensi berangsur-angsur berkurang setengahnya dalam waktu 0,4 detik (mis. Diperoleh beberapa pekikan tambahan).

Dalam pengendali interupsi BIOS standar, selain bagian yang bertanggung jawab atas video, ada bagian yang memeriksa isi sel memori tertentu dan, jika tidak ada nol, nyalakan derit dan mulai secara siklik mengurangi isi sel $ 08CD (ketika nol tercapai, derit dimatikan). Dengan demikian, Anda tidak dapat repot-repot dengan self-recording di port, tetapi cukup mengatur durasi mencicit dan itu akan terjadi di latar belakang, tanpa menghentikan program:
ldi $8cd & $ff plo rf ldi 250 ; str rf ...
Hal yang sama juga dapat dilakukan secara manual (setelah mematikan interupsi):
; sex r3 ; set X to R3 dis ; return X to R5, P to R3, 0-IE, R3=R3+1 db 53h ; forces X=5 P=3 - which is no change ; seq ; ldi 250 ; delay plo r6 delay: dec r6 glo r6 bnz delay ; req ; sex r3 ; set X to R3 ret ; return X to R5, P to R3, 1-IE, R3=R3+1 db 53h ; forces X=5 P=3 - which is no change
PROGRAM
Pada tahun 1970-an, sedikit lebih dari selusin game dan beberapa program lain ditulis (terutama oleh RCA sendiri). Hampir semuanya ditulis bukan di assembler, tetapi di
pseudo -
code - di ROM konsol ada mesin interpreter-virtual khusus ST2. Sulit mengatakan dengan tepat apa yang memotivasi keputusan semacam itu. Kemungkinan besar, idenya adalah untuk menghemat memori - gim benar-benar menjadi lebih sedikit volumenya. Secara umum, telinga ST2 tumbuh dari VM serupa yang disebut
CHIP-8 , yang digunakan dalam COSMACs. Meskipun kedua VM tidak kompatibel satu sama lain, sudah di tahun 2000-an juru bahasa CHIP-8 untuk RCA Studio II ditulis. Mengingat kemiripan arsitektur yang ekstrem, tidak mengherankan bahwa, seperti yang ditulis penerjemah, permainan dengan COSMAC yang tidak memerlukan banyak memori dimulai tanpa masalah pada RCA Studio II.
Alas - VMs pada arsitektur seperti itu bekerja sangat lambat, yang meninggalkan jejak yang tak terhapuskan pada game itu sendiri. Kemudian, pada tahun 2013, Paul Robson menulis sekitar selusin game lagi - sudah dalam assembler dan
mendistribusikannya dengan sumbernya.
PENGEMBANGAN
Awalnya, menurut saksi mata, pengembangan untuk RCA Studio II dilakukan bahkan tanpa assembler - pada COSMAC ELF dan FRED2.
Saat ini, tidak perlu menderita seperti ini. Ada emulator yang layak untuk Windows -
Emma , dengan debugger yang bagus (omong-omong, ia tidak hanya mengemulasi RCA Studio II, tetapi semua COSMACs).
Sebagai assembler, saya pertama kali mencoba menggunakan
cross-assembler a18, tetapi, karena sejumlah alasan, akhirnya berfokus pada
asmx , yang juga memiliki
skrip Python untuk menghasilkan gambar kartrid yang sudah jadi (memiliki ekstensi .st2).
Pengantar singkat untuk assembler 1802 dapat ditemukan di
sini . Test.asm paling sederhana untuk RCA Studio II dengan loop tak terbatas akan terlihat seperti ini:
.include "1802.inc" .org 400h .db 4,2 ; SYS $402 start: br start ; some code .end
Perhatikan instruksi ".db 4,2". Ini adalah alamat dari instruksi yang dapat dieksekusi pertama, yaitu ".db> (mulai), <(mulai)".
Implementasi loop sederhana:
ldi 50 ; D plo r6 ; D r6 loop: dec r6 ; r6 = r6 -1 glo r6 ; r6 D bnz loop ; loop D
Menggunakan instruksi SKIP:
; q = 0 $FF00 , q=1 $FF loop: ghi r1 ; hi(r1) -> D lsz ; 2 , D (.. seq) req ; 0 -> Q skp ; 1 (.. inc r1) seq ; 1 -> Q inc r1 ; r1 = r1 + 1 br loop ; ...
Untuk berlatih dalam assembler bersih CDP1802, akan lebih mudah untuk menggunakan emulator assembler online asm80. Perpanjangan file sumber yang dihasilkan harus .a18
Untuk meluncurkan aplikasi selesai pada perangkat keras nyata di alam, ada
RCA Studio II 40th Anniversary Multicart cartridge. Saya tidak memilikinya, tetapi tnt23 membuat ulang salah satu kartrid yang tersedia dengan permainan untuk chip EEPROM AT28C16 (2k x 8) yang dipasang di soket.
Jadi, untuk menjalankan sepotong besi, saya memasukkan chip ke programmer setiap kali, mem-flash-nya, menyusunnya kembali menjadi kartrid yang dikonversi, menyalakan konsol. Dan setiap saat.
INTRO TANPA PAMERAN
Untuk mengembangkan platform, saya menulis 256 byte intro (disajikan di
Chaos Constructions'2018 di kontes
Tiny intro ).
Tidak seperti, katakanlah,
Vectrex , di mana Anda bisa mendapatkan gambar spektakuler bahkan hanya dengan menggambar kurva atau dari
Videopac , di mana ROM sudah memiliki seperangkat gambar pria kecil, di sini kami memiliki situasi yang menyedihkan - biasa, akrab bagi semua orang, grafik raster, tetapi hitam dan putih dan resolusi di bawah tempat (64x32). Dalam ROM, tidak hanya gambar, tetapi bahkan karakter. Suara - dan itu terbatas pada mencicit 625Hz.
Dengan demikian, musik, semua jenis plasma, lampu, dan secara umum segala sesuatu yang melibatkan kontur non-persegi telah dibatalkan. Teks dalam bentuk apa pun juga dibatalkan - tidak akan ada cukup ruang untuk surat-surat itu.
Hasilnya, diputuskan a) untuk menggulir b) sesuatu yang berulang c) dengan kecepatan yang berbeda. Ternyata seperti ini:
Seperti disebutkan di atas, tidak ada gulir perangkat keras pada pengontrol video. Namun, resolusi rendah dan hitam dan putih tidak hanya memiliki minus, tetapi juga plus - menimpa lebih sedikit byte.
Saya melakukan scrolling baris demi baris, menggunakan perintah shlc (shift kiri dengan tanda hubung) - ketika dieksekusi dalam satu lingkaran, ternyata bit paling kiri dari byte berikutnya digeser ke kiri dan tidak hilang, tetapi ditempatkan di carry flag (DF). Dengan demikian, shlc berikutnya dalam satu lingkaran mengambilnya dan meletakkannya dalam byte ke kiri. Ternyata pengguliran sederhana dari seluruh baris, di mana delapan akan menggulir dalam satu siklus (karena itu nyaman untuk mengambil pola awan dan rumah byte demi byte)
... scrollret: sep r3 ; return from subroutine ; scroll: ; set lines counter ldi LINES ; const -> D plo r10 ; D -> Rn.0 nextline: ; set bytes counter ldi BYTES_PER_LINE ; const -> D plo r7 ; D -> Rn.0 ; set carry to scroll glo r12 ; Rn -> D shr ; get one bit to set carry plo r12 ; D -> Rn.0 (save shifted byte) nextbyte: ldx ; Rx -> D shlc ; D = D << 1 (carry -> DF) stxd ; D -> M(Rx), Rx-- dec r7 ; Rn-- glo r7 ; Rn -> D bnz nextbyte dec r10 ; Rn-- glo r10 ; Rn -> D bnz nextline ; one line (8 bytes) scrolled, let's scroll next br scrollret ...
Harap dicatat bahwa titik masuk ke subrutin terletak pada label gulir, dan untuk kembali, tidak hanya sep r3 dieksekusi, tetapi br pertama scrollret dan sep r3 dari sana.
Hal ini dilakukan untuk meninggalkan r14 (yang merupakan penghitung instruksi di dalam subrutin) dalam keadaan yang benar, maka subrutin dapat dipanggil lagi dan lagi (menggunakan sep r14).
Tentu saja, tidak ada variabel yang disimpan selama panggilan di sini - semua register variabel bersifat global.
Subroutine scroll disebut dua kali dalam loop umum - setiap detik untuk rumah dan setiap kali keempat untuk cloud (mereka menggulir paling lambat). Siklus umum disinkronkan dalam arah sebaliknya dari balok (jalan, rumah, awan - punya waktu untuk menggambar, bintang-bintang statis). Dalam kasus jalan, hanya satu baris yang digulung - ujung-ujung jalan digambar dengan garis.
Demi menarik, saya mencoba untuk menggulir seluruh layar - itu tidak cocok dengan gerakan kebalikan dari sinar dalam waktu.
Rumah diatur oleh pola:
... house1: .db %00000000 .db %11111111 .db %10101010 .db %11111111 .db %10101010 .db %11111111 .db %00000000 .db 1 house2: .db %00000000 .db %00011111 .db %01110101 .db %01011111 .db %01110101 .db %00011111 .db %00000000 .db 1 ...
dan tablet dengan tautan ke masing-masing:
... commands: .db house5 .db house2 .db house1 .db house3 ...
Dalam satu siklus, label ini disortir secara berurutan.
Tidak seperti rumah, kedua awan, untuk kesederhanaan, mewakili satu pola yang hanya bergulir secara siklikal.
Sejumlah byte dapat dimenangkan karena output awan sesuai dengan prinsip yang sama dengan rumah, serta karena kesenjangan yang terprogram di antara pola (sekarang ini hanya mengulangi nol dalam data).
Namun, masalahnya juga bahwa beberapa register digunakan oleh pengendali interupsi - R0, R1, R2, R8, R9, R11 tidak dapat diubah. Dan menyimpan variabel dalam memori adalah banyak byte tambahan untuk menulis dan membacanya (belum lagi siklus clock).
Idealnya, pengguliran mungkin harus dilakukan dalam interrupt handler. Namun, untuk ini, Anda harus menulis handler Anda sendiri daripada yang standar. Ini akan lebih benar (dan, kebetulan, bisa membebaskan beberapa register R) tetapi, kemungkinan besar, pada akhirnya, semuanya bersama-sama tidak akan masuk ke dalam 256 byte.
Adapun bintang-bintang, mereka statis, tetapi untuk menggambar beberapa titik yang terlihat secara acak, tiba-tiba tidak begitu sederhana:
... loop: ldn r4 ; M[Rn] -> D ani %00000010 ; D AND const -> D bdf skip ; jump if carry ldi 0 ; const -> D skip: stxd ; D -> M(Rx), Rx-- glo r4 ; Rn -> D adi 47 ; D + const -> D plo r4 ; Rn -> D glo r15 ; Rn -> D bnz loop ...
Di sini, dalam satu siklus, data diambil dari BIOS, yang menipis dan bit berlebih disamarkan. Topeng (untuk ani) dan pitch (untuk adi) dipilih sendiri.
Adapun suara, ketidakmungkinan mengubah frekuensi hanya meniru "bip" mobil.
Omong-omong - Saya pikir intra ini adalah karya demoscene pertama untuk RCA Studio II :)
EPILOG
Setelah Studio II, RCA merilis beberapa contoh
RCA Studio III . Perbedaan dalam dua hal - warnanya muncul (sementara resolusi belum berubah) dan suaranya lebih baik (Anda sudah bisa mengeluarkan tidak satu, tetapi 255 frekuensi yang berbeda).
Sangat menarik bahwa kedua mesin kompatibel satu sama lain di kedua arah, termasuk melalui penggunaan kode perantara yang sama dengan penerjemah.
Diketahui juga bahwa ada rencana untuk RCA Studio IV. Seharusnya ada peningkatan resolusi ke 64x128, dan bahkan juru kode semu baru sudah ditulis.
Sedangkan untuk CDP1802, mikroprosesor ini terus diproduksi - pertama dibuat oleh Hughes, kemudian
Intersil (Renesas)Jika Anda ingin tahu lebih banyak tentang cabang aneh dari sejarah perkembangan teknologi komputer, saya sarankan google kata-kata "
COSMAC" dan "CDP1802 ".
Tautan situs