Jam tangan pintar dengan BASIC pada fisik 6502


Prosesor 6502 telah ada selama lebih dari 40 tahun dan masih digunakan di sejumlah sistem embedded. WDC terus memproduksi chip periferal seri 65C02 dan 65Cxx. Penulis menemukan bahwa mereka sekarang tersedia dalam paket PLCC dan QFP, tetapi opsi chip ini jarang digunakan. Microcircuits dalam paket DIP tidak lagi tersedia, karena permintaan dari produsen buatan sendiri saja terlalu kecil. Penulis memutuskan untuk membuat papan tunggal terkecil pada 6502, yang ia dapat. Ada kemungkinan bahwa prosesor single-board buatan rumah terkecil yang diketahui pada prosesor ini (bukan buatan sendiri dan kurang, misalnya, Tamagotchi). Hasilnya adalah perangkat yang secara opsional dapat Anda gunakan untuk mengembangkan sarung tangan dengan tali. Layar diambil dari Nokia 5110, shell ditulis dengan antarmuka yang indah, dan ternyata, mungkin, satu-satunya arloji pintar pada 6502.

Arloji ini berisi: prosesor 65C02 dengan frekuensi clock 8 MHz, chip 65C22, LCD kontrol dan tombol polling di papan dan keyboard eksternal, layar Nokia 5110 (84x48 piksel), RAM statis 32 kB, ROM 16 kB ROM di ruang alamat. Tegangan suplai 3,3 V.

Dan yang paling penting: sebagai stasiun dok, Anda dapat menghubungkan matriks keyboard dari Commodore 64 ke konektor di papan, mendapatkan sesuatu yang mirip dengan Seiko UC-2000 ( ulasan tentang Habré ):


Sirkuit dan topologi papan sirkuit tercetak yang disusun di KiCad. Dimensi papan dua sisi adalah 3x1,5 inci. Semua komponen adalah SMD, kecuali untuk panel PLCC, serta konektor untuk keyboard dan LCD.



Topologi dalam ilustrasi tidak untuk skala. Tampilan papan sebelum perakitan:



Setelah:



Arsip (sirkuit, papan, firmware, dll.)

Pada arloji, Anda dapat menjalankan beberapa aplikasi bawaan. Salah satunya, G'Mon (Generic Monitor), adalah alat pengembangan dan debugging utama. Ini memungkinkan Anda untuk melihat dan mengedit isi memori dalam sel dan fragmen yang terpisah, beralih ke program, mengisi bagian RAM dengan byte yang ditentukan, dan memindahkan fragmen melintasi ruang alamat. Versi monitor yang digunakan dalam arloji disederhanakan sehingga selain itu, EhBasic cocok dengan ROM. Dia nyaris tidak masuk ke dalamnya, hanya ada ~ 100 byte gratis yang tersisa. Penerjemah dibangun kembali sedemikian rupa sehingga dapat menggabungkan dengan inti. Ini, pada gilirannya, berisi semua rutin inisialisasi, bekerja dengan antarmuka eksternal, serta hubungan semua perangkat lunak yang tersedia. Dan aplikasi lain - menu utama.

Sejumlah besar kernel ditempati oleh kode yang berinteraksi dengan LCD dari Nokia 5110 melalui protokol SPI yang diimplementasikan perangkat lunak melalui 6522. Subprogram WriteBYTE dan Command masing-masing mengirim data grafik dan perintah ke LCD. Karena tidak ada mode teks perangkat keras, prosedur untuk mengirim karakter ke layar ditulis. Generator karakter disimpan dalam ROM dan diwakili oleh dua tabel pencarian: satu untuk byte tinggi, yang lain untuk byte rendah. Bersama-sama, mereka menunjukkan posisi absolut byte karakter awal dalam ROM. Rutin Write harus dijalankan setelah kode ASCII ditulis ke baterai prosesor, dan juga digunakan sebagai koordinat X untuk tabel pencarian. Rutin pertama menulis kode ASCII ke buffer layar dalam memori. Kemudian dia mencari data ubin yang sesuai dan menetapkan pointer ke sana. Menampilkan 8 byte berturut-turut dari pointer, ia memanggil CCheck subroutine. Secara terprogram memeriksa posisi kursor, dan jika layar penuh, panggil subrutin Scroll, yang menggeser gambar dengan satu baris teks. Karena penulis tidak menerapkan pembacaan dari pengontrol LCD, teks diindeks sesuai dengan posisi kursor dan ditulis ke buffer dalam memori. Subroutine Scroll menampilkan tiga garis bawah dari buffer ke tiga garis teratas pada LCD, kemudian mengisi garis bawah dengan spasi. Rutin yang tersisa untuk bekerja dengan LCD adalah CReturn. Ini mencari melalui tabel pencarian untuk posisi awal dari baris berikutnya, dan jika baris saat ini bukan bagian bawah, itu meningkatkan posisi kursor per satu. Jika intinya - panggilan prosedur Gulir, dan hanya kemudian berakhir.

Keyboard disurvei melalui 6522 oleh subrutin GetKey. Bunyinya baris matriks keyboard demi baris dan menulis byte ke memori. Jika ada bit yang berubah menjadi nol, itu menentukan kode ASCII dari tombol yang ditekan melalui tabel pencarian. Pada dasarnya, kode tidak mengandung siklus agar dapat bekerja secepat mungkin. Subrutin untuk mengonversi bit yang diberikan ke indeks tidak menggunakan tabel pencarian, tetapi sebagai hasilnya, kode tersebut ternyata cukup besar dan tidak efisien.

Video:


Penulis tidak lagi bekerja pada firmware ini, ia beralih ke proyek lain. Dia berharap bahwa kode ini akan berguna bagi mereka yang ingin mengontrol LCD dari Nokia 5110 dari satu papan ke 6502. Rutinitas yang sesuai dapat dengan mudah ditransfer ke perangkat lunak lain. Yang paling penting adalah Write, Write_NS, Command, WriteBYTE, LCDInit, LCDClear, CCheck, CCheck_NS, CReturn, Scroll, dan SETCursor. Rutinitas lain yang bermanfaat adalah LCDHome dan WriteBMP. Hal ini diperlukan untuk menempatkan variabel LCDCursor, GTmp, GTmp5 dan GTmp6 dalam memori, serta tabel Screen sepanjang 84 byte. Selain itu, diperlukan tabel pencarian CRTbl, CTableX, dan CTableY, serta bitmap Char dan Char2 dengan semua ubin.

Jika Anda ingin membuat kumpulan ubin lain, gunakan templat dari folder Aset. Di GIMP, ekspor bitmap ke file data dalam format RGB (bukan RGBX). Jangan memperhatikan file .pal, dan letakkan file .data di folder BitConvert dari arsip. Jalankan Convert.sh filename.data untuk mendapatkan file FONT.bin, yang akan menjadi kumpulan ubin.

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


All Articles