Desain retro untuk konsol portabel pertama dari tahun 1979 yang jauh



Pada tahun 1974, Texas Instruments meluncurkan mikrokontroler 4-bit pertama dari keluarga TMS1000, dan Intel pada tahun 1976 memulai produksi mikrokontroler 8-bit dari seri MCS-48 yang terkenal. Dan kemudian mulai.

Karena murahnya dan swasembada dari mikrokontroler (kemudian mereka dipanggil langsung - mikrokomputer chip tunggal), perangkat elektronik konsumen tajam lebih bijaksana, dan jumlah mereka tumbuh lebih dari sebelumnya. Dengan munculnya mikrokontroler, kelas perangkat seperti game elektronik portabel muncul, skala "bencana" dapat diperkirakan pada tautan ini . Di antara semua ragam permainan awal ini, yang akan saya bahas di pos ini sangat menonjol - ini adalah Milton Bradley Microvision, game elektronik portabel pertama dengan kartrid yang dapat diganti, yang menggunakan kedua mikrokontroler di atas. Saya juga akan mencoba untuk memikirkan spesifik pengembangan untuk konsol ini.

Deskripsi Umum




Microvision dirilis di Amerika Serikat hampir empat puluh tahun yang lalu, pada tahun 1979. Secara total, 12 kartrid dengan game dijual untuknya, di antaranya - datang lengkap dengan konsol Block Buster (analog dari Breakout ), olahraga - Bowling dan Baseball, versi elektronik dari game papan terkenal Connect Four , Pinball dan lainnya. Sebagian besar game dapat dievaluasi pada emulator MVEM , yang dibuat berdasarkan serangkaian publikasi yang menarik , dari mana saya juga belajar banyak hal berguna. Di sini saya tidak akan membahas secara terperinci tentang deskripsi game konsol asli, tetapi saya akan segera beralih ke dunia batinnya.



Fitur penting dari konsol ini adalah LCD 2 inci dengan resolusi 16x16 piksel. Cukup primitif dengan standar saat ini, tetapi dibandingkan dengan rakitan LED dan indikator vakum-luminescent yang digunakan dalam game portabel saat itu, layar LCD matriks adalah langkah yang agak progresif. Selain Microvision, pada tahun yang sama, serangkaian game elektronik Mego Mini-Vid dengan layar yang sama muncul dijual, meski 13x20. Rupanya, pada saat itu, ini adalah satu-satunya perangkat yang dijual dengan matriks LCD dengan resolusi seperti itu.



Layar dikontrol oleh chip Hughes SCUS0488 - ini adalah driver LCD matriks. Pengemudi ditenagai oleh stabilisator tegangan negatif UA79MG dengan sepasang kapasitor dan resistor, yang merupakan basis elemen paling sederhana.


Dalam casing konsol juga terdapat kontrol - matriks tombol 4x3 dan resistor variabel 10kΩ sebagai pemukul. Untuk reproduksi suara ada piezodynamic.

Yang paling penting adalah mengapa Microvision membuat sejarah, dan semua orang lupa tentang Mini-Vid yang disebutkan di atas, menggunakan kartrid yang bisa diganti.



Secara eksternal, kartrid adalah bagian atas perumahan yang dapat dilepas. Di tengah-tengah kartrid ada jendela plastik yang menutupi layar, di mana elemen-elemen permainan warna dan prasasti individu diterapkan untuk setiap permainan. Di bawah ini adalah lubang untuk tombol yang ditutupi oleh film tipis, di mana tanda tangan diterapkan, dan untuk setiap permainan, lubang dibuat hanya untuk tombol yang digunakan. Mungkin, susunan kartrid ini, menurut penulis, memungkinkan untuk memaksimalkan adaptasi konsol ke permainan tertentu.


Papan permainan Block Buster, dalam kasing dan di belakang

Bagian elektronik dari kartrid dibangun di atas satu dari dua mikrokontroler - TMS1100 atau Intel 8021 dengan harness yang diperlukan. Menempatkan "otak" konsol dalam kartrid mungkin tampak seperti keputusan yang agak aneh, tetapi itu hanya memungkinkan Anda bertahan dengan dua chip per game. Selain itu, ia juga menambahkan fleksibilitas. Pada saat yang sama, harga kartrid, tampaknya karena kehadiran mikrokontroler, tidak meningkat banyak (misalnya, biaya 8021 dalam lot besar pada tahun 1976 adalah sekitar $ 3).

Semua ini memberi satu atau dua mahkota yang terhubung secara paralel (8021 cukup rakus). Selain itu, dalam versi yang lebih baru, kontak untuk baterai kedua telah dihapus, dan sisa ruang direkomendasikan untuk digunakan untuk baterai cadangan. Rupanya, ini karena fakta bahwa pengguna sering bingung polaritas, mendapatkan hubungan pendek yang agak berbahaya.

Dasi


Saya membeli konsol kuno ini untuk menulis beberapa jenis game dan membuat cartridge, dan jika mungkin, menyalin elemen dasar dari aslinya sebanyak mungkin.
Tetapi ada satu masalah yang signifikan - bahwa TMS1100, bahwa Intel 8021 memiliki ROM bertopeng, mis. diprogram di pabrik selama proses pembuatan. Ada jalan keluar untuk mikrokontroler Intel: 8021 adalah versi 8048 yang dilucuti, yang juga memiliki ROM bertopeng, tetapi Intel menghasilkan analog 8048 dengan ROM yang dapat diprogram - 8748, keduanya dalam hal penghapusan ultraviolet dan lebih murah setelah diprogram.

Sayangnya, situasinya jauh lebih buruk untuk TMS1100 - ada versi debug chip yang bekerja dengan ROM eksternal - TMS1098, tetapi membelinya sekarang, jika mungkin, sangat sulit. Selain itu, chip dibuat dalam paket DIP-64, itu besar dalam dirinya sendiri dan tidak akan masuk ke dalam panjang cartridge, tetapi ROM yang agak besar juga diperlukan.

Secara umum, 8748 yang dapat dihapus-UV adalah yang Anda butuhkan, dan versi final kartrid dapat dibuat pada versi yang tidak terhapuskan.


Di atas adalah P8748H satu-programmable dan di bawah ini adalah D8748H yang dapat dihapus-UV

Intel 8021


Di bawah ini adalah deskripsi singkat dari 8021, bukan 8748, karena Saya hanya akan menggunakan fitur terpotong 8021 untuk memiliki hanya sumber daya yang awalnya ditetapkan oleh pengembang konsol.

Subsistem memori, seperti seluruh keluarga MCS-48, didasarkan pada arsitektur Harvard yang dimodifikasi. Memori program adalah ROM internal 1024 byte, memori data adalah 64 byte RAM dinamis.

Organisasi RAM ditunjukkan pada gambar berikut:



Sel 0–7 menempati register kerja yang langsung dialamatkan, R0 - R7, dengan R0 dan R1 digunakan sebagai pointer untuk akses tidak langsung ke semua sel RAM. Sel 8-23 digunakan untuk tumpukan panggilan 8-tingkat, meskipun mereka juga dapat digunakan melalui R0-R1.

Mikrokontroler memiliki generator clock built-in, frekuensi referensi diatur oleh kuarsa eksternal, rantai RC atau rantai LC. Siklus alat berat berlangsung 10 siklus, dan setiap siklus membutuhkan 3 periode frekuensi referensi. Frekuensi maksimum adalah 3,58 MHz, sementara siklus mesin berlangsung 8,38 μs. Frekuensi minimum dibatasi oleh spesifikasi DRAM dan 600 kHz.

8021 berisi dua port 8-bit dan satu 4-bit, yang juga dapat digunakan untuk menghubungkan expander port I / O, chip 8243. Semua port adalah kuasi-bidirectional.

Selain itu, mikrokontroler memiliki penghitung / penghitung delapan digit bawaan. Dalam mode waktu, penghitung T bertambah 1 setiap 32 siklus mesin. Pada overflow T, flag TF diatur. Dalam mode penghitung, pulsa dihitung pada input tes T1.

Sistem perintah berisi 64 instruksi, yang 36 dijalankan dalam satu siklus, dan 28 dalam dua. Sebagian besar instruksi adalah byte tunggal.

Daftar instruksi dengan deskripsi singkat


Persiapan


Tidak ada masalah dengan pembelian 8748, yang utama adalah memperhatikan bahwa chip diproduksi menggunakan teknologi yang berbeda. NMOP paling awal membutuhkan tegangan 25V untuk firmware, berlabel D8748. Pada akhir 70-an, mikrokontroler ini mulai dibangun menggunakan teknologi HMOP-E (versi perbaikan dari NMOP Intel), diberi label D8748H dan sudah membutuhkan 21V. Tegangan yang sama diperlukan oleh klon kemudian dari NEC (mPD8748H). Versi yang dapat diprogram satu kali diberi label P8748H.

Penghapus UV dibeli oleh orang Cina yang paling sederhana dan termurah dengan pengatur waktu mekanis, yang, seperti yang diperlihatkan oleh praktik, mengatasi tugasnya dengan sempurna (meskipun tidak ada keakuratan pengukur waktu pada interval pendek). Ini andal menghapus ROM chip dalam ~ 2,5 menit. Kemudian, saya membeli penghapus ZAX Quick-EII dengan harga simbolis dari tangan Jepang, saya bahkan tidak tahu tahun berapa, dengan tampilan awal tahun 90-an. Ia menggunakan xenon flash dan menghapus 8748 dalam 3 (!) Detik, secara harfiah. Video (bukan milik saya) dengan demonstrasi pekerjaan dapat dilihat di sini .

Masalah utama adalah programmer. Dukungan untuk keluarga Intel yang usang ini dalam programer modern hanya tersedia dengan biaya $ 300. Meskipun, ada Willem amatir yang relatif murah yang dapat bekerja dengan MCS-48 melalui adaptor, tetapi membutuhkan LPT, yang tidak cocok untuk saya sama sekali. Saya harus menyolder sendiri. Saya, katakanlah, seorang amatir radio pemula, jadi saya menghabiskan sekitar satu minggu bersamanya, membuang salah satu dari dua 8748 yang telah tiba pada saat itu (walaupun saya menyukai pemikiran bahwa dia awalnya seperti itu). Saya mengambil sirkuit yang diterbitkan di sini sebagai dasar, hanya mengadaptasinya untuk Atmega dan kekuatan 24V yang lebih nyaman. Semua ini disolder di atas papan tempat memotong roti:



Ternyata, tentu saja, sangat jelek, dan salah satu MOSFET bekerja sampai batas (bahkan sedikit untuk), tetapi, pada akhirnya, programmer mengatasi tugasnya dan melayani saya dengan baik.

Jadi, semuanya sudah siap, firmware pengujian berkedip bahagia dengan LED, sekarang saatnya membuat kartrid.

Cartridge


Sebagian besar kartrid berfungsi pada TMS1100, karena Signetics, yang merilis lisensi Intel 8021 Intel, tidak dapat menyediakan pasokan chip MB yang diperlukan. Bahkan beberapa game yang sudah ditulis untuk 8.021 harus diangkut ke TMS1100. Ini, kebetulan, memungkinkan kami untuk meninggalkan bundel berbahaya dua baterai, karena konsumsi mikrokontroler TI hanya 0,1W versus 1W untuk Intel. Saya hanya memiliki satu dari 6 kartrid dengan 8021, ini adalah permainan Connect Four, dan diambil sebagai basis.

Saya mencoba membuat papan yang mirip dengan aslinya mungkin, tetapi, tentu saja, saya harus membuat perubahan. Pertama, ukuran chip (DIP-40 versus DIP-28) dan pinout yang berbeda. Kedua, kami harus mengubah denominasi dalam rangkaian osilasi yang mengatur frekuensi clock, karena siklus mesin untuk versi HMOS dari sirkuit mikro adalah 15 siklus, dan untuk versi MOS yang digunakan dalam kartrid asli, 30 siklus. Oleh karena itu, untuk keaslian lengkap, kartrid saya akan bekerja pada 1,25 MHz terhadap 2,5 MHz asli, sambil memastikan kinerja yang sama.



Pada foto di atas, papan sirkuit cetak yang sudah jadi dipesan di Cina, dan ketika sedang menyala, saya menggambar dan menggores papan sirkuit dan memasang "kompleks debug":


Akhirnya, bagian perangkat keras siap dan Anda dapat memulai pemrograman.

Tampilan




Pertama-tama, saya harus berurusan dengan output ke LCD. Seperti yang saya tulis di atas, itu dikendalikan oleh driver Hughes 0488 menggunakan multiplexing (baru-baru ini sebuah artikel menarik tentang cara kontrol LCD ini diterbitkan di Habré). Ini adalah driver, bukan pengontrol, sehingga Anda tidak bisa hanya menghidupkan piksel dan menjalankan bisnis Anda, Anda harus terus memperbarui konten layar dengan frekuensi 30-50 Hz dengan perintah tingkat rendah.

Diagram koneksi adalah sebagai berikut:



Pinout H0488:

Vdd - Power (3-8V)
R1-R16 - Output Kontrol String
C1-C16 - Output Kontrol Kolom
DATA0-DATA3 - Data Bus
! Data Clk - Input jam perekaman data
Latch Pulse - Pinout Status Signal R0-R15, C0-C15

Arti chip adalah sebagai berikut:

Melalui 4 jalur informasi, keadaan yang diperlukan dari semua 32 output dari rangkaian mikro diatur secara berurutan (16 per baris dan kolom). Yaitu kami mengindikasikan dalam bagian 4-bit status output untuk baris 1-4, lalu 5-8, 9-12 dan akhirnya untuk 13-16, dan juga 4 kali dalam 4 bit, kami menunjukkan status kolom. Setiap data baru di-clock oleh pulsa di sepanjang garis! DATA CLK. Setelah kami mengirim semua 8 data, sebuah pulsa pada jalur Latch Pulse menetapkan status yang ditunjukkan dari output R1-R16, C1-C16 yang akan ditahan hingga pulsa berikutnya pada baris ini.

Secara alami, dalam satu siklus seperti itu kami tidak dapat menunjukkan keadaan masing-masing piksel secara terpisah dari yang lain, kami hanya dapat 16 (dengan jumlah persimpangan baris dengan kolom). Oleh karena itu, untuk secara mandiri memperbarui status setiap piksel, 256/16 = 16 siklus akan diperlukan.

Selain itu, kami memiliki tanggung jawab untuk mengganti polaritas untuk menghilangkan tegangan konstan elektroda LCD, jika tidak, layar akan cepat rusak. Peralihan polaritas terjadi di tepi belakang sinyal pada Latch Pulse pada input rendah! Data Clock. Disarankan untuk mengganti polaritas dengan kecepatan refresh layar.

Di atas diilustrasikan oleh bagan waktu berikut dari lembar data:



Semua ini, diimplementasikan dalam assembler 8021 (yang, omong-omong, berkurang secara signifikan dibandingkan dengan assembler dari seluruh keluarga, semua untuk keaslian yang sama saya hanya menggunakan instruksi yang didukung oleh 8021), mungkin terlihat seperti ini:

mov R0, #32 ;    . mov r1, #10000000b ;    r1-r2 mov r2, #00000000b ;  . mov r4, #00000010b ;    !DATA CLK. mov r3, #11110000b clr c loop: ;   r1-r16   . mov a, r1 ;   r1 loadNibble ;    R1-R4. mov a, r1 ;  4   r1 rrc a ;      , xch a, r1 ;    . swap a loadNibble ;    R5-R8. mov a, r2 ;   r2 loadNibble ;    R9-R12. mov a, r2 ;  4   r2 rrc a ;      ,  xch a, r2 ;  C,     . swap a loadNibble ;    R13-R16 ;   C1-C16     . mov a, @R0 ;       loadNibble ;       C1-C4. mov a, @R0 swap a ;   4 . loadNibble ;     C4-C8. inc R0 ;     mov a, @R0 ;     , loadNibble ;      4 . mov a, @R0 swap a ;   4 . loadNibble ;     C9-C12. inc R0 ;    inc a ;   R0-R15  C0-C15, outl p1, a ;  Latch Pulse  1. jnc loop ;      . clr a ; outl p1, a ; . inc a ; outl p1, a ; loadNibble macro anl a, r3 ;    . outl p1, a ;   . orl a, r4 outl p1, a ; !DATA CLK. endm 

Ini adalah versi subrutin tercepat saya yang menampilkan gambar yang disimpan dalam RAM. Ini dilakukan dalam 1152 siklus mesin (yang dalam kasus kami adalah ~ 12 μs).

Kecepatan refresh maksimum layar adalah sekitar 70 frame per detik (jika mikrokontroler tidak melakukan hal lain), yang pada dasarnya berlebihan, oleh karena itu, untuk menghemat register dan ROM, saya menggunakan rutinitas lain dalam praktik - lebih lambat dan lebih cocok untuk tugas-tugas tertentu. Tetapi, pada frekuensi ini, dengan mempertimbangkan tingkat inertness yang tinggi dari tampilan ini, dimungkinkan untuk menampilkan gambar dengan 4 gradasi abu-abu (seperti niblonog di KPDV), yang dengan cepat mengubah bingkai. Atau bahkan animasi empat warna pendek:


Seperti yang Anda lihat, kontrasnya jauh dari yang diinginkan, ini sangat mencolok ketika semua baris dan kolom terlibat, tetapi tidak ada yang harus dilakukan - biaya kontrol multipleks.

Keyboard




Semuanya jauh lebih sederhana di sini. Tombol-tombol dikelompokkan ke dalam matriks 4 baris dan 3 kolom. Baris terhubung ke pin P0.4-P0.7, kolom terhubung ke P0.0-P0.2.



Seperti yang saya sebutkan di atas, port 8021 adalah quasi-bidirectional, oleh karena itu, untuk mengetahui status terminal, Anda harus terlebih dahulu mengirim unit kepada mereka. Yaitu saat memasukkan data, konjungsi terjadi antara sinyal input dan isi buffer, yang sesuai dengan data terbaru yang ditampilkan pada port. Jajak pendapat keyboard terlihat seperti ini:

  mov a, #01111111b ; 0        1, outl p0, a ; ,      . in a, p0 ; , 0       ;      

Dayung




Atau, dalam bahasa Rusia, roda manipulator yang dipasang di bagian bawah konsol adalah resistor variabel 10kΩ dengan pegangan dekoratif, yang dapat diputar untuk mengendalikan sesuatu dalam permainan. Tentu saja, tidak ada ADC di 8021 atau TMS1100. Sudut rotasi ditentukan oleh kecepatan pengisian kapasitor, yang secara hati-hati disolder ke papan konsol.



Semuanya berfungsi sebagai berikut: sementara pin P2.2-P2.3 tinggi, kapasitor dilepaskan dan unit logis berada pada input uji T1. Setelah kita mengatur pin P2.2-P2.3 ke level yang rendah, kapasitor akan mulai mengisi dan setelah beberapa saat, tergantung secara eksponensial pada resistansi dari variabel resistor, penurunan tegangan akan menjadi sedemikian rupa sehingga T1 diatur ke 0. Tetap hanya untuk mendeteksi waktu sampai munculnya nol pada T1, yang akan sebanding dengan sudut rotasi dayung (Lebih detail dan lebih menarik tentang skema tersebut dapat ditemukan di DI HALT'a ). Dalam kode, ini mungkin terlihat seperti ini:

  clr a mov r1, a outl p2, a ; 0  P2.2-P2.3 loop: inc r1 ; r1 jt1 loop ;  T1  mov a, #00110000b ; 1  P2.2-P2.3 outl p2, a ;     



Suara


Di sini cukup sederhana, piezodynamic terhubung ke dua baris port P2.0 dan P2.1, yang perlu kita lakukan adalah menyentak kaki bergantian dengan frekuensi yang tepat.

Apa yang terjadi


Akibatnya, saya menulis dua permainan - Tetris dan sejenis Flappy Bird. Untuk debugging, saya menggunakan Intel D8748H dan klon NEC D8749HD hanya berbeda dalam ukuran ROM. Saya menggunakan 8048 Integrated Development Environment sebagai assembler dan debugger. Dalam prosesnya, saya mendapatkan pengalaman yang tak terlupakan - aliran konstan mikrokontroler dari konsol ke penghapus, dari penghapus ke programmer, dan dari sana kembali ke konsol, dan semua ini disertai dengan aroma rumah sakit dari udara terionisasi ultraviolet ...

Saya menuliskan program yang telah selesai dalam Intel P8748H yang sebelumnya dapat diprogram yang saya solder pada papan sirkuit tercetak yang telah tiba saat itu.


Bandingkan dengan papan asli, dari kiri ke kanan: Block Buster, My option, Connect Four

Saya harus menggunakan yang asli sebagai kasing; Saya hanya punya satu dari dua kartrid yang tersedia untuk permainan Block Buster yang ternyata tidak beroperasi.



Lambung tidak cukup untuk game kedua:


Kesimpulan


Microvision MB diproduksi sebelum 1981, dan meskipun penjualan pada awalnya cukup berhasil, sejumlah kecil game (13 cartridge dirilis secara total) dan masalah kualitas biasanya disebut sebagai alasan untuk penurunan penjualan. Saya akan menambahkan ukuran yang sangat besar ini, terutama dibandingkan dengan seri Nintendo Game & Watch yang muncul saat itu dan menjadi hit.

Kode sumber dan skema yang diterbitkan di GitHub

Source: https://habr.com/ru/post/id416865/


All Articles