Lanjutkan, yang termudah selesai! Dan sekarang untuk yang paling sulit dan menarik. Jika Anda terlalu malas untuk membaca, maka di bawah ini (lebih dekat ke akhir artikel) akan ada tautan ke video, dengan hasil dan penjelasan semuanya, termasuk apa yang dijelaskan di bagian pertama. Jika Anda tertarik, silakan ikuti selanjutnya.
Dalam mode 6-tombol, pembacaan terjadi dalam 4 siklus atau fase (jika dinyatakan dalam bahasa emulator). Artinya, setiap 16 ms ada perubahan siklik (4 siklus) dalam status output Pilih, dan setiap siklus keempat pada output controller muncul keadaan tombol tambahan. Di bawah ini adalah bagan bacaan, untuk kejelasan, yang harus diulang:

Adalah baik bahwa saya memiliki penganalisa logika, dengan bantuan yang saya tangkap bug, yang memanifestasikan dirinya dalam kenyataan bahwa siklus tidak keluar dari fase keempat.
Saya tidak akan bertele-tele, saya akan segera memberikan daftar fungsi ini:
static u32 read_pad_6btn(int i, u32 out_bits) { u32 pad = ~PicoIn.padInt[i];
Mari kita menganalisis salah satu kondisi, misalnya:
if (i == 0 && phase == 1 && !(out_bits & 0x40))
Di sini diperiksa bahwa kita membaca dari gamepad pertama
(i == 0) ,
fase membaca kedua
(fase == 1) , dan output Select harus diatur ke 0
! (Out_bits & 0x40) . Untuk memahami bagaimana ini bekerja di emulator, saya mengkompilasi kode pada Xubuntu, dan Visual Studio Code, mengatur sekelompok breakpoint, menjalankan kode dalam mode debug. Hasilnya adalah gambar yang sangat indah:

Sebenarnya, hasil pekerjaannya adalah:
Di sini saya harus mengatakan beberapa kata tentang emulator itu sendiri. Entah saya tidak mengetahuinya, atau ini adalah bug, tetapi emulator pada awalnya memuat dalam mode 3 tombol, bahkan jika yang sebaliknya ditunjukkan dalam pengaturan global. Untuk 99% game, ini sudah cukup. Untuk memasuki mode operasi dengan gamepad 6 tombol, Anda harus masuk ke pengaturan dan kembali ke permainan tanpa mengubah apa pun.
Tetapi ada satu permainan yang berada di luar konteks ini, yaitu Lost Vikings, tombol X, Z, MODE bekerja dengan baik di dalamnya tanpa menari.
PSTetapi Anda dapat melakukannya dengan lebih mudah, seseorang yang baik hati telah menulis
driver untuk bekerja dengan gamepad, dan pada level yang sangat rendah. Saya masih jauh dari ini.
Terima kasih atas perhatian anda!