Meninjau Kembali Komputer Z80: 6 Langkah
Meninjau Kembali Komputer Z80: 6 Langkah
Anonim
Meninjau Kembali Komputer Z80
Meninjau Kembali Komputer Z80
Meninjau Kembali Komputer Z80
Meninjau Kembali Komputer Z80

Di masa lalu, saya telah menulis panduan tentang cara membuat komputer berbasis Z80, dan saya merancang rangkaiannya sesederhana mungkin sehingga dapat dibangun semudah mungkin. Saya menulis sebuah program kecil juga menggunakan ide kesederhanaan yang sama. Desain ini bekerja dengan cukup baik, tetapi saya tidak sepenuhnya senang dengan itu. Saya mulai dengan menulis ulang program untuk itu yang memungkinkannya diprogram selama runtime. Ini untuk memungkinkan saya menguji potongan kode tanpa harus mendedikasikannya ke EEPROM, yang pada gilirannya akan mengharuskan saya untuk memprogram ulang EEPROM. Ini tidak terdengar seperti ide yang menyenangkan bagi saya. Kemudian saya mulai berpikir tentang ruang memori. Jika saya ingin menghubungkan perangkat keras (terutama IO), sepotong kode berpotensi melebihi jumlah ruang memori yang tersedia untuk sistem. Ingat, desain hanya menggunakan byte yang lebih rendah dari bus alamat dan kemudian bit yang lebih rendah dari byte tinggi digunakan untuk memilih antara ruang ROM dan RAM. Ini berarti saya hanya memiliki 253 byte ruang untuk digunakan. Anda mungkin bertanya mengapa 253 bukannya 256. Itu karena kode baru saya menyuntikkan tiga byte data di akhir program tertulis (ini akan dibahas nanti, karena saya memodifikasinya untuk bekerja pada desain baru).

n

Saya kembali ke skema lama saya untuk melihat apa lagi yang terjadi. Saya menemukan kesalahan kecil dengan rangkaian pemilihan memori, yang akan saya bahas ketika saya sampai di sana. Versi yang disederhanakan: semua permintaan tulis benar-benar akan melalui, meskipun selalu dimasukkan ke dalam RAM. Ini mungkin bukan sesuatu yang perlu dikhawatirkan, tapi aku ingin melakukannya dengan benar kali ini. Dan dengan itu, saya mulai menggambar skema baru. Dua foto yang dilampirkan pada halaman ini adalah sebelum dan sesudah sirkuit yang sebenarnya. Saya membersihkan begitu banyak kabel spageti, itu tidak lucu.

n

Jika Anda mengikuti pengajuan asli saya dan berencana untuk mengikuti yang ini, Anda akan membenci saya. Jika Anda memulai dari awal, maka Anda beruntung. Ambil saja bagian-bagian dalam daftar (atau yang setara) dan ikuti.

Perlengkapan:

LM7805 - Regulator 5 VoltZ80 - CPU; otak dari sistemAT28C64B - EEPROM. Penyimpanan data "permanen" yang digunakan untuk firmware komputerIDT6116SA - SRAM; digunakan untuk menyimpan kode pengguna dan/atau penyimpanan data umumNE555 - Jam sistem74HC374 - Oktal D-Latch dengan /OE; digunakan sebagai input chip74LS273 - Oktal D-Latch dengan /MR; output chipTLC59211 - chip driver LED (digunakan agar 74LS273 dapat menggerakkan LED, karena itu saja tidak mampu menghasilkan output saat ini) MC14572 - Ini adalah chip "Line Driver", tetapi menurut saya ini sempurna untuk logika Kontrol Memori. Ini memiliki 4 inverter, dan gerbang NAND dan NOR dibangun di74LS32 - Gerbang Quad ORCD4001 - Gerbang Quad NORCD4040 - Penghitung Riak 12 Tahap; Ditarik, tetapi tidak diimplementasikan pembagi jam (untuk menjalankan sistem pada kecepatan clock yang lebih lambat)2 Resistor 10K Ohm - Satu digunakan dalam rangkaian timer 555, jadi gunakan nilai apa pun yang Anda inginkan untuk itu4 Resistor 1K Ohm - Satu digunakan untuk sirkuit timer 555, jadi gunakan apa pun yang Anda inginkan. Yang lain digunakan untuk menggerakkan LED, jadi variasikan juga jika Anda ingin 8x330 Ohm Resistor Bus8x10K Ohm Resistor Bus11 LED - Tiga digunakan untuk status sistem dan delapan lainnya adalah output. Untuk 8, saya menggunakan tampilan grafik batang (HDSP-4836)4 Kapasitor - Dua digunakan LM7805; 0.22uF dan 0.1uF. Salah satunya untuk timer 555, jadi gunakan apa yang Anda rasa benar. Yang terakhir adalah untuk power-on reset; 100uF2 N. O. Tombol Tekan - Satu digunakan untuk input, yang lain untuk reset8 SPST DIP Switch - Input data; Saya menggunakan Piano Key styleWire. Banyak dan banyak kawat

n

CATATAN: MC14572 melalui versi lubang sudah usang, tetapi versi SMD masih aktif (bahkan bukan status "tidak untuk desain baru"), jadi Anda mungkin perlu membeli papan sirkuit untuk memungkinkan Anda menggunakannya. 74LS32 kedua dapat digunakan sebagai pengganti MC14572 (lihat skema "sirkuit pemilihan memori" dari ible sebelumnya)

Langkah 1: Ikhtisar Cepat tentang Perubahan + Skema

Ikhtisar Singkat Perubahan + Skema
Ikhtisar Singkat Perubahan + Skema

Cara membaca skema:Panah yang diarahkan ke chip adalah input:Input >-Panah yang mengarah keluar dari chip adalah output:Output <-Bus menggunakan garis alih-alih panah:Bus |-

n

Sebagian besar chip telah ditarik dengan pinouts yang tepat. Celupan kecil telah ditarik pada chip ini. Sebagian besar chip juga memiliki nomor pin dan label. Mereka mungkin agak sulit dibaca. Pensil saya mulai tumpul.

n

Dalam hal koneksi sirkuit, tata letak desain baru sebagian besar tidak berubah dari aslinya. Saya menghubungkan bagian bawah dari alamat byte tinggi ke memori dan kemudian menggunakan bit rendah dari bagian atas (A12) untuk pemilihan RAM/ROM. Ini berarti bahwa ruang ROM berubah dari 0000-00FF hingga 0000-0FFF. Ruang ram berubah dari 0100-01FF menjadi 1000-1FFF. Saya juga menukar logika Kontrol Memori untuk desain yang lebih baik dan menambahkan dua LED status baru (dan beberapa logika lem). Saya juga menggambar (tetapi tidak memasang kabel) sirkuit pembagi jam. Itu untuk melakukan dua fungsi. Fungsi yang jelas adalah membagi frekuensi clock ke bawah. Fungsi lainnya adalah untuk tujuan PWM (Pulse Width Modulation), karena 555 tidak menghasilkan gelombang dengan siklus kerja 50%. Itu tidak terlalu penting di sirkuit ini, tetapi jika Anda ingin menggunakan jam untuk menggerakkan beberapa LED, Anda pasti akan melihat efeknya (satu (set) LED akan lebih redup daripada yang lain). Seluruh sisa sirkuit pada dasarnya tidak berubah.

Langkah 2: CPU, Memori dan Kontrol Memori

CPU, Memori dan Kontrol Memori
CPU, Memori dan Kontrol Memori
CPU, Memori dan Kontrol Memori
CPU, Memori dan Kontrol Memori
CPU, Memori dan Kontrol Memori
CPU, Memori dan Kontrol Memori
CPU, Memori dan Kontrol Memori
CPU, Memori dan Kontrol Memori

Ini adalah bagian di mana pembaca versi saya sebelumnya membenci saya. Dalam versi aslinya, saya hanya melemparkan bagian-bagian di papan di tempat yang sepertinya akan menimbulkan sedikit masalah dengan pemasangan kabel. Hasilnya tampak seperti seseorang menumpahkan sepiring spageti di atasnya dan seperti "kabel!" Saya ingin membersihkannya sedikit, jadi saya mulai dengan merobek semuanya kecuali CPU, RAM dan ROM. Saya menarik hampir seluruh sirkuit input, sirkuit output, dan logika lem. Hampir menyakitkan saya untuk melakukannya, tetapi itu perlu. Saya membiarkan semua koneksi data utuh dan byte yang lebih rendah dari bus alamat. Saya kemudian menghubungkan empat bit berikutnya dari bus alamat (A8-A11) ke chip ROM. Saya berhati-hati untuk memutar chip kali ini agar lebih mudah ditarik untuk pemrograman ulang. Saya juga melompat koneksi alamat ke chip RAM.

n

Dengan itu, saya sekarang harus memasang logika kontrol memori. Dalam skema asli, saya telah menghubungkan jalur /MREQ prosesor langsung ke /CE ke kedua chip memori, lalu saya menyambungkan /WR ke /WE RAM. Kemudian saya memiliki /RD dan /MREQ CPU secara logis ATAU bersama-sama serta A9. Pada dasarnya, itu diatur agar semua permintaan memori mengaktifkan RAM dan ROM, tetapi A9 digunakan untuk memilih chip mana yang / OE yang dipilih. Ini baik-baik saja dan semua karena chip akan tetap tidak aktif sampai permintaan memori dibuat dan kemudian hanya satu /OE yang akan aktif selama permintaan baca. Ini mencegah crosstalk, tetapi memperkenalkan nuansa canggung. Karena A9 hanya digunakan untuk menentukan chip mana yang mengeluarkan data dan karena CPU memiliki akses langsung ke pin /WE RAM, setiap dan semua permintaan tulis akan diproses. Ini baik-baik saja untuk ROM karena mode tulisnya dihambat dengan mengikat /WE langsung ke suplai 5V. RAM, bagaimanapun, akan ditulis terlepas dari A9. Ini berarti bahwa upaya menulis ke lokasi ruang ROM akan menulis ke lokasi yang sama di ruang RAM.

n

Salah satu solusi untuk ini adalah dengan memasang kembali logika kontrol sehingga CPU memiliki akses langsung ke pin /OE dan /WE chip dan kemudian menggunakan MREQ dan A12 untuk memilih chip /CE mana yang digerakkan. Saya mengikuti ide ini, tetapi alih-alih menggunakan empat gerbang NOR dan inverter seperti desain aslinya, saya menemukan chip kecil yang canggung yang sempurna untuk tugas itu. Saya harus membuat sirkuit yang hanya menggunakan gerbang logika yang tersedia di chip, tetapi itu cukup mudah. A12 diumpankan langsung ke gerbang NAND dan gerbang NOR. /MREQ diumpankan ke gerbang NOR dan pujiannya diumpankan ke gerbang NAND. Gerbang NAND digunakan untuk menggerakkan /CE untuk RAM dan output NOR dibalik dan digunakan untuk menggerakkan ROM /CE. Ini membuatnya jadi /MREQ harus rendah sebelum salah satu chip dipilih dan kemudian A12 memilih yang mana yang dipilih. Dengan pengaturan ini, sekarang permintaan tulis apa pun ke ROM tidak akan menghasilkan apa-apa. Ini juga menghemat daya karena hanya satu chip yang aktif, bukan keduanya. Adapun chip logika itu sendiri, kami masih memiliki dua inverter yang tidak digunakan di dalamnya. Satu akan digunakan nanti, tetapi kita akan sampai di sana ketika kita sampai di sana.

Langkah 3: LED Status Sistem

LED Status Sistem
LED Status Sistem
LED Status Sistem
LED Status Sistem

Sebelum saya memulai proyek ini, saya mencoba untuk berinteraksi dengan IC tertentu, tetapi saya mengalami masalah dengannya. Tidak yakin dengan apa yang sedang terjadi, saya menggunakan LED pemasangan panel untuk menyelidiki (salah satu rakitan yang memiliki resistor bawaan). Melakukan hal ini memberi saya ide nostalgia yang masih digunakan sampai sekarang: LED status digunakan untuk menunjukkan apakah memori sedang dibaca atau ditulis. Itu akan digunakan bersama dengan LED input yang sudah saya miliki. LED input terhubung ke generator sinyal /WAIT untuk menunjukkan kepada kita bahwa sistem sedang menunggu input (saya akan sampai di sana, jangan khawatir). Saya mempertimbangkan untuk menambahkan LED untuk menunjukkan penulisan IO, tetapi saya pikir bahwa LED keluaran yang diubah sudah menjadi indikator yang bagus untuk itu. Memikirkannya, saya mungkin masih menambahkannya. Meskipun demikian, saya merasa berguna untuk mengetahui apakah memori sedang dibaca atau ditulis. Yah, ini berguna untuk debugging program. Saya benar-benar memanfaatkannya seperti itu ketika mencoba membuat program saya berfungsi: “mengapa ia menulis ke memori? Seharusnya belum melakukan itu!”

n

Untuk mengontrol LED ini, saya menggunakan gerbang quad NOR. Saya menggunakan semua gerbang. Hanya dua yang digunakan untuk menghasilkan sinyal status, tetapi chip tersebut tidak memiliki kemampuan daya untuk benar-benar menggerakkan LED. Mereka mampu menenggelamkan daya sebanyak itu, jadi saya menggunakan dua gerbang NOR lainnya sebagai inverter dan menghubungkan LED seperti itu. Karena satu LED digunakan untuk menunjukkan pembacaan dan yang lainnya untuk penulisan, dan permintaan baca dan tulis tidak akan terjadi pada saat yang bersamaan, saya dapat menggunakan hanya satu resistor untuk kedua LED. Adapun sinyal yang saya butuhkan untuk memecahkan kode, itu juga cukup mudah. Saya ingin semua permintaan pembacaan memori ditunjukkan, jadi gerbang NOR pertama memiliki /MREQ dan /RD pada inputnya. Status penulisan sedikit lebih rumit, tetapi sama mudahnya. Saya masih menggunakan /MREQ sebagai salah satu input, tetapi menggunakan /WR sebagai input lainnya akan menyebabkan sedikit nuansa yang ingin saya hindari. Itu akan menunjukkan SEMUA permintaan tulis. Saya hanya ingin yang benar-benar lolos. Jadi bagaimana saya melakukannya? Nah, ingat bagaimana saya mengatur sistem sehingga hanya RAM yang dapat ditulis? Saya menggunakan RAM / CE sebagai input lain ke gerbang NOR. Ini berarti bahwa LED hanya akan menyala ketika RAM dipilih dan permintaan tulis sedang dibuat. Dalam hal warna LED, saya memilih oranye sebagai indikator baca (tapi saya hanya menemukan yang kuning) dan merah sebagai indikator tulis.

Langkah 4: Masukan dan Keluaran

Masukan dan keluaran
Masukan dan keluaran
Masukan dan keluaran
Masukan dan keluaran
Masukan dan keluaran
Masukan dan keluaran

Pada langkah sebelumnya, Anda mungkin telah memperhatikan bahwa saya telah menambahkan beberapa komponen lainnya ke papan. Saya memesan ruang sehingga saya tidak akan secara tidak sengaja menempatkan kabel di tempat saya menginginkan komponen (jadi saya harus mencari lokasi baru untuk komponen tersebut). Anda mungkin juga memperhatikan bahwa saya membiarkan sakelar input di tempatnya dan dihubungkan ke rel daya. Saya memutuskan bahwa lokasi asli adalah tempat yang sempurna dan memutuskan untuk menempatkan LED keluaran di dekatnya (di atas). Di sebelah kanan tampilan bilah adalah kait input. Di atas itu adalah kait keluaran, dan di sebelah kirinya adalah driver LED. Saya mulai dengan menghubungkan layar ke driver karena itu yang paling mudah dilakukan. Kemudian saya menghubungkan sakelar ke sisi input kait input. Selanjutnya saya menghubungkan sisi keluaran dari kait keluaran ke driver LED. Ini mungkin tampak seperti perintah yang canggung untuk memasang kabel ini, tetapi itu karena suatu alasan. Masukan dari kait keluaran harus dihubungkan ke bus data serta keluaran dari kait masukan. Idenya adalah untuk menghubungkan output dari kait input ke input dari kait output, yang saya lakukan. Kemudian yang harus saya lakukan adalah menghubungkan kekacauan itu ke bus data. Tidak masalah ke mana koneksi ini pergi secara fisik karena semuanya akan terhubung secara elektrik. Komputer sekarang hampir selesai.

Langkah 5: Atur Ulang dan Selesaikan Input dan Output

Maaf, tidak ada foto untuk langkah ini. Lihat langkah sebelumnya untuk gambar.

n

Anda mungkin telah memperhatikan di gambar terakhir dari langkah sebelumnya, saya memiliki tombol hijau dan chip logika lain yang terpasang. Chip adalah gerbang OR. Dua gerbang digunakan untuk membangkitkan sinyal /WAIT. Nah, satu menghasilkan sinyal dengan OR-ing /IORQ dan /RD dari prosesor. Outputnya diumpankan ke gerbang kedua, di mana ia mendapat OR'd lagi ke tombol tekan. Tombol membawa input gerbang tinggi, sehingga membawa output tinggi. Output ini diumpankan ke pin prosesor /WAIT. Saat tidak ditekan, resistor menahan input rendah. Saya awalnya menggunakan resistor 10K, tetapi LS32 sebenarnya mengeluarkan tegangan pada input. Resistor tidak menjatuhkannya cukup rendah dan saya harus menggantinya dengan 1K. Bagaimanapun, idenya adalah ketika permintaan baca IO dibuat, gerbang OR pertama dan kedua memberi tahu prosesor untuk menunggu. Setelah Anda mengatur sakelar input ke apa pun yang Anda inginkan, Anda menekan tombol dan itu membawa CPU keluar dari kondisi menunggu. LED “input” hijau, seperti yang saya sebut di langkah sebelumnya, disambungkan sehingga ketika pin /WAIT mati, pin akan menyala.

n

Tapi kita belum selesai. Flip flop input membutuhkan sinyal untuk memberi tahu kapan input data valid dan harus dikirim ke CPU. Pin jam ini aktif tinggi. Sebelumnya, kami hanya menghubungkannya ke tombol. Ini masih merupakan opsi yang valid, tetapi kali ini saya memilih untuk meletakkannya pada output yang sama dengan gerbang OR kedua. IC ini juga memiliki pin /OE yang perlu digerakkan. Jika dipegang tinggi, itu tidak akan pernah memasukkan data ke bus. Jika dipegang rendah, itu akan selalu mengemudikan bus. Untuk memperbaikinya, saya cukup menggunakan gerbang OR ketiga. Inputnya adalah /IORQ dan /RD dan outputnya langsung ke /OE latch.

n

Kait keluaran juga membutuhkan pin jam untuk digerakkan. Sekali lagi, ini aktif tinggi. Dalam skema saya, saya menggambar gerbang OR keempat secara langsung menggerakkan pin menggunakan /IORQ dan /WR. Ini berarti bahwa pin jam akan tetap tinggi sampai permintaan tulis dibuat, kemudian akan rendah lalu tinggi lagi. Ini mungkin akan baik-baik saja karena bus data masih memiliki data yang valid segera setelah upaya penulisan, tetapi dari sudut pandang teknik, adalah desain sampah. Saya tidak melihat kesalahan ini sampai setelah saya mengambil gambar terakhir, tetapi saya merobek koneksi itu dan kemudian memasukkan output gerbang OR ke salah satu inverter yang tidak digunakan dari logika kontrol memori, kemudian menghubungkan outputnya ke pin jam. Saya juga memperbaiki skema dan menemukan kesalahan lain yang saya buat. Saya mengoreksinya juga.

n

Dengan semua itu akhirnya selesai, saya memiliki sedikit pekerjaan yang harus dilakukan: rangkaian reset. Saya menambahkan tombol ke papan dan menggunakan resistor 10K untuk menahan satu sisi tinggi. Sisi lain langsung ke tanah. Sisi yang ditinggikan adalah output /RESET, yang masuk ke setiap chip dengan pin /RESET (CPU dan kait output). Untuk menyelesaikan power-on reset, saya menambahkan kapasitor ke output /RESET. Idenya adalah bahwa resistor bernilai besar akan menyebabkan kapasitor yang relatif besar mengisi daya dengan lambat dan menahan pin / RESET rendah untuk beberapa jumlah siklus clock (CPU membutuhkan empat siklus clock). Anda mungkin sudah bisa menebak apa sisi negatif dari rangkaian ini. Negatifnya sama dengan versi sebelumnya karena sirkuitnya sama. Ketika tombol ditekan, kapasitor pada dasarnya korsleting melalui tombol. Ini buruk untuk tutup dan tombol, jadi jika Anda ingin membuat bangunan Anda sedikit lebih permanen, Anda mungkin ingin mendesain ulang. Saya sedang memikirkan pengatur waktu 555 lain yang diatur dalam mode monostabil. Tapi dengan itu, sirkuit komputer sekarang selesai. Ya. Sekarang perlu diprogram.

Langkah 6: Pemrograman

Pemrograman hal ini adalah mimpi buruk. Saya membangun programmer Arduino EEPROM. Itu tidak berhasil. Saya membangun yang lain berdasarkan desain dan pengkodean orang lain. Tetap tidak berhasil. Saya kembali ke metode coba-dan-benar untuk mengatur alamat dan byte data secara manual dengan tangan. Entah bagaimana, aku mengacaukannya. Saya mencoba lagi dan masih salah. Saya kembali lagi dan menemukan itu mati oleh satu byte, jadi saya memperbaikinya dan akhirnya berhasil, terima kasih Tuhan.

n

Adapun program yang sebenarnya, sepertinya sangat kompleks dan sulit untuk diikuti, tetapi tidak. Ini cukup sederhana, sebenarnya. Setengahnya adalah menyalin angka. Setengah lainnya dibagi antara matematika 16-bit, lompatan bersyarat, dan bahkan lebih banyak lagi angka penyalinan. Jadi biarkan saya membahasnya dan memberi tahu Anda cara kerjanya.

n

Inisialisasi hanya menetapkan beberapa nilai register untuk digunakan oleh program. Loop program sedikit lebih kompleks, tetapi tidak banyak. Pertama, ia menerima input ke register A pada port 00. Kemudian register E ditulis ke memori. Pada dua loop pertama, register E berisi data sampah, jadi kami mencoba untuk menulisnya ke dua byte terakhir dari ruang ROM karena tidak akan benar-benar ditulis; penunjuk alamat (IY) kemudian bertambah. Nilai yang disimpan di D kemudian dipindahkan ke E untuk ditulis selanjutnya. A kemudian dimuat ke D dan L dan E disalin ke H. HL adalah tempat perbandingan nilai dilakukan melalui pengurangan dan pengecekan ZF (zero flag). Nilai pertama yang dibandingkan disimpan dalam register B dan C. B dan C diperlakukan sebagai register 16-bit tunggal, BC. Jika nilainya sama, maka program langsung melompat ke ruang RAM, di mana kode pengguna diasumsikan berada. Jika kode di BC tidak cocok, maka HL diisi ulang dengan nilai awal dari D dan E dan dibandingkan lagi dengan nilai di SP dengan cara yang sama dibandingkan dengan BC. Jika cocok, hasilnya sama, tetapi tiga byte tambahan ditulis ke memori. Bytes adalah kode yang menyebabkan CPU melompat kembali ke awal programnya (reset perangkat lunak). Namun, jika perbandingan kedua tidak cocok, program akan mengulang ke tempat ia mengambil nilai dari pengguna.

n

LD SP, EDBFH; kode exe (menambahkan lompatan)

n

LD IY, FFEH; penunjuk memori awal untuk penyimpanan kode

n

LD SM, EDC3H; kode exe (tidak ada loop)

n

lingkaran; direktif assembler sehingga kita tidak perlu tahu di mana dalam memori bagian ini berada

n

DI A, (00H); mendapatkan data program

n

LD (IY+00H), E; E berisi kode untuk disimpan

n

INC IY; pindah ke lokasi memori berikutnya

n

LD E, D; ld D menjadi E

n

LD D, A; ld A menjadi D

n

LD H, E; ld E menjadi H

n

LD L, D; ld D menjadi L

n

ATAU A; setel ulang bendera pembawa

n

SBC HL, SM; mengembalikan 0 jika kode exe 2 dimasukkan

n

JP Z, 1000H; jika demikian, lompat ke dan jalankan program

n

LD H, E; jika tidak, segarkan ini ke nilai yang tepat

n

LD L, D

n

ATAU A; pengurangan pertama mungkin telah menetapkan flag carry. Hapus itu

n

SBC HL, SP; mengembalikan 0 jika kode exe 1 dimasukkan

n

JP NZ, putaran; jika tidak, ulangi proses (dimulai dengan mendapatkan nilai)

n

LD (IY+00H), C3H; jika tidak, masukkan kode lompat di akhir program pengguna

n

LD (IY+01H), 00H; lompat pada dasarnya bertindak sebagai reset perangkat lunak

n

LD (IY+02H), 00H; ini adalah reset penuh jika register diubah

n

JP1000H; lompat ke dan jalankan program pengguna