Howdy kalian semua,
Ini adalah alat CAD saya untuk mengambil foto ROM topeng dan mengekstraksi bit, sehingga isi ROM dapat dipulihkan.
Pintasan keyboard dalam alat ini tidak opsional. Silakan baca dokumentasi GUI di bawah ini sebelum mulai menjelajah.
Jika Anda menemukan alat ini bermanfaat, silakan beli salinan buku saya tentang eksploitasi mikrokontroler untuk diri Anda sendiri atau siswa yang pintar.
--Travis Goodspeed

Tutorial GBROM mengajarkan Anda bagaimana memulai dengan foto-foto ROM topeng Gameboy dan bekerja menuju gambar ROM yang akurat.
ROM MYK82 memegang dump lengkap ROM dari chip Myk82 dalam kartu Fortezza. Ini adalah penerus chip clipper, dan repositori tidak hanya mencakup semua bit ROM tetapi juga menempelkan kembali untuk koreksi kesalahan.
WERSI-SLM2-51173 adalah Zilog Z8 ROM dari modul Sintesis Musik.
master - Peningkatan kinerja dengan menghindari salinan dalam dalam daftar. Hitung bit yang tepat di bilah status dan bilah status sekarang menggunakan font lebar-batas.
2024-08-18-Opsi pemecah pemecah Gatorom sekarang menggunakan fiilenames deskriptif. GUI sekarang dapat mengekspor satu set hasil yang diselesaikan dengan file/ekspor/solversetbytes. Persegi panjang seleksi yang lebih jelas. R dan C sekarang akan menggambar jenis baris yang benar saat pengguna membingungkannya. ^H sekarang menetapkan posisi rumah. Kunci zooming dan gerakan sekarang berfungsi di tampilan kedua. Garis duplikat sempurna sekarang dimusnahkan selama DRC oleh tombol V Baris dan kolom sekarang disimpan sebagai daftar yang diurutkan, bukan set. Baris dan kolom sekarang dalam urutan yang konsisten dalam ekspor file. Kinerja meningkat dalam penandaan bit, tanda latar belakang dan penyelarasan. Biner universal untuk macOS. Romalignertilting bekerja lebih baik untuk desain dengan celah antar bank. Bit out-of-view tidak lagi ditarik selama menyeret, mempercepat kelompok penyesuaian dari garis panjang.
2024-07-14-Memperbaiki crash saat menghapus item yang dipilih ganda. Hapus dan Backspace sekarang hapus objek seperti D . Banyak pembongkaran. Dekode sekarang diperbarui karena ambang decoding diubah.
2024-06-23-Pemecahan aturan Yara. Peningkatan stabilitas. Pembaruan Crosshairs ke sudut garis yang dipilih. Ruang sekarang mengulangi baris terakhir, apakah baris atau kolom. Beberapa item dapat dipilih, dan Shift+D menduplikasi mereka. Pilih dengan Shift untuk menambahkan lebih banyak baris atau Ctrl (CMD pada macOS) untuk menghapus garis. Menyeret kanan menggerakkan beberapa baris, hanya mempratinjau bit yang relevan. Crosshair dan warna pilihan sekarang dapat dipilih. Latar belakang tidak lagi ubin saat memperbesar.
2024-05-19-Pelanggaran DRC sekarang dibersihkan ketika bit dipaksakan. Ekspor histogram untuk memplot distribusi warna di gnuplot. Dukungan untuk Wayland. Dukungan kata -kata eksplisit dalam decoder CLI, GUI, Solver dan Basic. Set pemecah, mengekspor semua solusi potensial sebagai file biner. Aligner yang tidak dapat diandalkan telah sudah usang. GUI Solver. Disassembler memanggil Mame's Unidasm.
2024-01-28-Undo dan Redo. Dialog string. Kunci Backslash untuk visibilitas lapisan. Algoritma Alignment yang andal. Menutup Aplikasi Tutup Jendela Utama.
2024-01-01-Memperbaiki kesalahan bus dalam decoder Z8 saat menyelesaikan ukuran aneh. Mode verbose di Gatorom CLI. Mode squeeze-lr Sekarang di GUI Decoder. Edit item menu untuk menghapus semua perbaikan bit. E akan memilih pelanggaran DRC berikutnya. Gambar vertikal sempurna tidak lagi merusak algoritma penyelarasan.
2023-12-07-Sorotan Seleksi. Hitungan baris/kolom di bilah status. Solver ASCII. Memperbaiki beberapa crash di Solver dari ukuran ROM yang canggung. Decoding Gatorom di GUI. Penghapusan decoder yang berlebihan. Penampil hex dan menyoroti byte yang dipilih. Gatorom Cli sekarang sangat ketat tentang keluar dari akses ilegal. Dukungan Zilog Z8 ROM.
2023-09-13-Opsi CLI untuk menonaktifkan OpenGL. Dukungan Pencetakan. Windows Winds Build.
2023-08-06-OpenGL sekarang fungsional dan default. Gatorom termasuk untuk decoding bit.
2023-07-20-Dukungan tampilan sekunder. Pengambilan sampel tinggi. Memperbaiki crash saat memukul V setelah menghapus garis.
2023-06-17-Menambahkan macOS pada x86_64 dan ARM64.
2023-05-30-rilis Windows pertama.
Alat ini berfungsi di Windows, Linux, FreeBSD dan MacOS, menggunakan QT6 dengan ekstensi QTCharts.
Membangun alat ini paling mudah dari CLI. Di Debian Bullseye (11.x),
% sudo apt install make gcc g++ cmake git qt6-base-dev libqt6charts6-dev
qt6-translations-l10n linguist-qt6 qt6-l10n-tools qt6-tools-* qt6-image-formats-plugins
% git clone https://github.com/travisgoodspeed/maskromtool/
...
% cd maskromtool
% mkdir build; cd build
% cmake ..
% make -j 8 && sudo make install
Di Windows dan MacOS, gunakan QT untuk penginstal sumber terbuka, pastikan untuk memasukkan grafik dan ekstensi format gambar. Kemudian buka CMakeLists.txt sebagai proyek. Ctrl+B kemudian akan mengkompilasi maskromtool . Jika Anda memiliki masalah dengan impor Anda, seperti memilih instalasi QT yang salah, hapus CMakeLists.txt.user dan buka kembali proyek untuk dicoba lagi.
Untuk kenyamanan pengguna Windows dan MacOS, kami juga telah membuat beberapa rilis prebuilt.
Pertama gunakan File/Open ROM untuk membuka gambar ROM sebagai foto. Cobalah untuk menggunakan format yang tidak terkompresi, tetapi berhati -hatilah bahwa macOS tidak menyukai file TIFF.
Memegang kunci kontrol (perintah pada macOS) sambil menggulung roda mouse akan memperbesar dan meluncur. Anda juga dapat mencubit-zoom di lintasan. Menyeret dengan tombol tengah akan berjalan, atau menggulir dengan dua jari sesuai dengan sistem operasi Anda.
Dengan konvensi sewenang -wenang, bit harus di kolom panjang dengan baris yang lebih pendek. Jika garis dekoder terlihat, mereka seharusnya berada di bagian atas gambar. Jangan ragu untuk memotretnya satu arah, lalu putar untuk markup.
Saat Anda menyimpan proyek Anda, nama file gambar akan diperpanjang dengan .json . File JSON yang disortir dan indentasi ini harus sesuai untuk digunakan dalam kontrol versi, seperti repositori git.
Tombol keyboard ini kemudian memberikan sebagian besar input Anda. Untuk garis menggambar, klik pertama sekali untuk memilih sebagai posisi mulai dan kemudian tekan tombol saat mouse berada di atas posisi akhir. Menghapus item atau mengatur posisinya akan berlaku untuk garis yang paling baru ditempatkan, kecuali jika Anda menyeret kotak untuk memilih garis.
Pilih item dengan menyeretnya dengan klik mouse kiri dan menontonnya menjadi hijau. Item yang paling baru ditempatkan secara otomatis dipilih. Beberapa perintah bekerja pada beberapa item yang dipilih; yang lain hanya satu.
Anda dapat menghapus kesalahan dengan D atau menyesuaikan posisinya sedikit dengan S , tombol panah, atau tarik klik kanan. Selama gerakan, bit garis yang tidak terkait mungkin disembunyikan untuk kinerja, dan kunci M atau melepaskan tombol mouse yang tepat akan menggambar ulang mereka.
Pada macOS, ^ berarti perintah alih -alih ctrl.
Tab -- Show/Hide bits.
-- Show/Hide rows and columns.
^ -- Show/Hide background.
ALT -- Show/Hide crosshair.
R -- Draw a row from the last left-click position.
SHIFT R -- Repeat the last row.
C -- Draw a column from the last left-click position.
SHIFT C -- Repeat the last column.
SPACE -- Repeat the last row or column.
D -- Delete the selected objects.
SHIFT D -- Duplicate the selected lines.
S -- Set the selected object to the mouse position.
F -- Jump to the selected item.
ARROWS -- Move the selected items.
right-drag -- Move the selected items. (SHIFT or ^)
middle-drag -- Pan the view.
^ wheel -- Zoom.
Q -- Zoom to zero.
A -- Zoom in.
Z -- Zoom out.
H -- Jump to home position.
^H -- Set the home position.
SHIFT F -- Force a bit's value. (Again to flip.)
SHIFT A -- Force a bit's ambiguity. (Again to flip.)
M -- Remark all of the bits.
SHIFT M -- Update hex decoding and disassembly.
V -- Run the Design Rule Checks.
SHIFT V -- Clear the DRC violations.
E -- Jump to next violation.
^Z -- Undo
SHIFT ^Z -- Redo
^S -- Save changes.
Ketika Anda pertama kali mulai menandai bit, perangkat lunak tidak akan mengetahui ambang antara satu dan nol. Anda dapat mengonfigurasi ini dengan View / Choose Bit Threshold .
Bahkan bit terbaik tidak akan semua ditandai dengan sempurna, jadi gunakan SHIFT+F untuk memaksa nilai bit di mana Anda melihat bahwa perangkat lunaknya salah. SHIFT+A serupa, dan menandai sedikit ambigu atau rusak. Menu DRC berisi pemeriksaan aturan desain yang akan menyoroti masalah dalam proyek Anda, seperti bit lemah atau penyelarasan yang rusak.
Jika menempatkan banyak garis menjadi membosankan, pilih grup dengan tombol mouse kiri Anda dan duplikat seluruh set dengan SHIFT+D . Anda kemudian dapat menyeretnya dengan tombol mouse kanan ke posisi baru, meninggalkan salinan lain di posisi asli. Jika framerate turun untuk ini, gunakan tombol TAB untuk sementara menyembunyikan semua bit, yang sangat mempercepat bergerak banyak garis di area padat.
Crosshairs akan menyesuaikan diri dengan baris dan kolom yang paling baru Anda ditempatkan. Ini harus membiarkan mereka miring sedikit agar sesuai dengan realitas foto Anda.
Setelah Anda menandai bit dan spot diperiksa bahwa mereka akurat dengan DRC, jalankan file/ekspor untuk membuangnya ke ASCII untuk dikurangi dengan alat lain, seperti Gatorom, Bitviewer atau Zorrom.
Selain GUI, alat ini memiliki antarmuka baris perintah yang dapat berguna dalam skrip. Gunakan sakelar --help untuk melihat parameter terbaru, dan sakelar --exit jika Anda lebih suka GUI tidak tetap terbuka untuk penggunaan interaktif.
forum% maskromtool --help
Usage: maskromtool [options] image json
Mask ROM Tool
Options:
-h, --help Displays help on commandline options.
--help-all Displays help, including generic Qt options.
-v, --version Displays version information.
-V, --verbose Print verbose debugging messages.
--stress Stress test bit marking.
-e, --exit Exit after processing arguments.
--disable-opengl Disable OpenGL.
--enable-opengl Enable OpenGL.
-d, --drc Run default Design Rule Checks.
-D, --DRC Run all Design Rule Checks.
--sampler <Default> Bit Sampling Algorithm.
--diff-ascii <file> Compares against ASCII art, for finding errors.
-a, --export-ascii <file> Export ASCII bits.
-o, --export <file> Export ROM bytes.
--export-histogram <file> Export histogram.
--export-csv <file> Export CSV bits for use in Matlab or Excel.
--export-json <file> Export JSON bit positions.
--export-python <file> Export Python arrays.
--export-photo <file> Export a photograph.
Arguments:
image ROM photograph to open.
json JSON lines to open.
Untuk berlari tanpa GUI, lulus -platform offscreen . Jika program macet di bawah Wayland, memaksa Xorg penggunaan dengan melewati -platform xcb .
Di Windows, canggung bagi yang dapat dieksekusi untuk memiliki GUI sambil mempertahankan log pada CLI. Kami menyelesaikan ini dengan memproduksi dua executable; Silakan gunakan maskromtool.exe untuk GUI dan maskromtoolcli.exe untuk CLI.
gatorom yang dapat dieksekusi, membungkus decoder bit rom tanpa grafik. Lihat Gatorom untuk detailnya.
forum% gatorom
Usage: gatorom [options] bitstream
Gato ROM: A Decoder for Mask ROM Bits
Options:
-h, --help Displays help on commandline options.
--help-all Displays help, including generic Qt
options.
-v, --version Displays version information.
-V, --verbose Talk too much.
-w, --wordsize <8> Word size.bits
-r, --rotate <degrees> Rotates the image in multiples of 90
degrees.
--flipx Flips the bits along the X axis.
--flipy Flips the bits along the Y axis.
-i, --invert Inverts the bits.
-o, --output <out.bin> Output file.
--random Randomize a ROM for testing.
--Random Randomize a crazy ROM.
--rawwidth, --seanriddle <width> Width of a raw binary input, in Sean
Riddle's style.
-I, --info Info about input.
-d, --dis <arch> Disassemble.
--print Print with a GUI dialog.
--printpdf <file.pdf> Print to a PDF file.
--decode-tlcs47font Decodes as a TMP47C434N Font.
--decode-z86x1 Decodes as a Zilog Z86x1.
--decode-cols-downl-swap Decodes as a uCOM4 ROM.
--decode-cols-downr Decodes first down then right like a
Gameboy.
--decode-cols-downl Decodes first down then left.
--decode-cols-left Decodes left-to-right.
--decode-cols-right Decodes right-to-left.
--decode-squeeze-lr Decodes even bits from the left, odd bits
from right like in the TMS32C15.
-z, --zorrom Zorrom compatibility mode, with flipx
before rotation.
--leftbank Only the left half of the bits.
--rightbank Only the right half of the bits.
-a, --print-bits Prints ASCII art of the transformed bits.
-A, --print-pretty-bits Prints ASCII art with spaces.
--solve Solves for an unknown format.
--solve-bytes <bytes> Bytes as a hint to the solver.
0:31,1:fe,2:ff
--solve-ascii Look for ASCII strings.
--solve-string <bytes> Byte string as a hint to the solver.
31,fe,ff
--solve-yara <rule> Yara rule file.
--solve-set <prefix> Exports all potential solutions.
Arguments:
bitstream ASCII art of ROM to decode.
Saya telah merancang GUI di sekitar QGraphicsScene . Objek data yang mendasari menggunakan sistem koordinat QT, dengan pelampung untuk presisi yang lebih baik dari pixel.
Setelah memuat foto ROM, pengguna menempatkan kolom dan baris ke foto. Setiap persimpangan kolom dan baris dianggap sedikit, dan ambang warna yang dapat dikonfigurasi menentukan nilai bit itu. Di mana foto itu salah membaca, Anda juga dapat memaksa bit ke nilai yang diketahui.
Setelah semua bit telah ditandai dan ambang batas yang dipilih, perangkat lunak akan menandai setiap bit cahaya sebagai biru (0) dan setiap bit gelap seperti merah (1). Bit -bit ini kemudian diselaraskan ke dalam daftar baris yang ditautkan untuk ekspor sebagai ASCII, untuk digunakan dalam alat lain.
Untuk mengidentifikasi kesalahan, satu set pemeriksaan aturan desain (DRC) akan mengkritik proyek terbuka. Sementara antarmuka utama adalah GUI, CLI juga tersedia untuk skrip dan pengujian.
Sementara beberapa ribu bit mungkin ditandai tanpa kesalahan, proyek yang lebih besar pasti perlu mengelola kesalahan mereka.
Awal yang baik adalah menggunakan cek DRC dan konfigurasi ambang batas bit yang cermat sampai tidak ada kesalahan yang jelas. Kemudian navigasikan proyek dan tekan tombol tab untuk menampilkan dan menyembunyikan anotasi, memastikan bahwa setiap bit dikenali dengan benar.
Ketika itu tidak mencukupi, seperti ROM yang merupakan puluhan atau ratusan kilobit, itu membantu untuk membuat anotasi ROM yang sama beberapa kali, lebih disukai dari foto yang berbeda. Kesalahan bit akan terjadi dalam anotasi setiap foto, tentu saja, tetapi itu akan terjadi di berbagai tempat. Anda kemudian dapat menggunakan fitur --diff-ascii terhadap output --export-ascii untuk membandingkan gambar, merekonsiliasi perbedaan mereka sampai semua file proyek Anda setuju.
Sebagian besar ROM dapat dibaca hanya dengan membaca warna piksel tunggal di pusat bit. Bagi mereka, algoritma pengambilan sampel Default akan bekerja dengan baik.

Untuk ROM difusi yang bitnya agak terlalu tertunda, pusat bit tidak memiliki warna yang unik, tetapi dikelilingi oleh garis yang sedikit lebih gelap. Algoritma Wide akan mengambil warna paling gelap di setiap saluran setelah mencicipi ukurannya sebesar bit, dan Tall melakukan hal yang sama tetapi secara vertikal.

Tambalan dan perbaikan pada alat ROM Mask sangat disambut, tapi tolong jangan spam pelacak masalah dengan permintaan fitur. Permintaan tarik harus diserahkan melalui halaman GitHub, dan mereka tidak boleh melibatkan proyek dengan dependensi pada perpustakaan pihak ketiga.
Kode ini ditulis dalam dialek konservatif C ++, dengan penggunaan fitur canggih minimal. Saya sudah mencoba mengomentari kode dan definisi kelas secara menyeluruh.
Gatorom dimasukkan sebagai decoder baris perintah yang memecahkan pengaturan bit. Silakan lihat file readme sendiri untuk dokumentasi CLI, terutama untuk metode pemecah yang belum didukung di GUI.
Secara terpisah, Gatorom digunakan sebagai perpustakaan untuk decoding di dalam maskromtool gui. Gunakan edit/decoding untuk mendefinisikan gaya decoding dan view/hexpreview untuk melihat decoding langsung dari bit ke heksadesimal.

Dari decoder, Anda dapat menyoroti byte hex dan menggunakan pemilihan hext hext/sorot untuk memvisualisasikan byte yang dipilih. Di sini kita melihat tiga kata pertama dari ROM MYK82, yang mengemas 32 bit ke dalam setiap posisi. Pembongkaran juga tersedia ketika unidasm dari Mame ada di jalur.

Pemecah skrip juga didukung, di mana topeng sederhana atau aturan Yara menggambarkan firmware yang diharapkan. Semua kecocokan disebutkan, dan dengan melompat di antara mereka, Anda dapat dengan cepat menguraikan gambar yang tidak menggunakan interleving, pembalikan baris, atau komplikasi lainnya.

John McMaster's Zorrom adalah dekoder yang sangat baik dan inspirasi untuk perpustakaan decoding di alat ini.
Rompar Adam Laurie mungkin merupakan alat penandaan bit pertama yang bersumber terbuka.
Bitract Chris Gerlinsky adalah alat open source lain untuk penandaan bit, dan Bitviewer adalah alat yang cocok untuk decoding bit ke byte.
Decode PLA Peter Bosch adalah alat penandaan bit yang digunakan untuk mengekstraksi mikrokode Intel lama. Lihat Bicara Hardwear.io -nya dari tahun 2020 untuk lebih jelasnya.