Γεια σε όλους,
όπως ίσως θυμούνται κάποιοι, εργάζομαι ακόμα πάνω στην πλήρη αποσυναρμολόγηση (disassembly) και τον σχολιασμό της ROM του Vortex F1-X Module (V 2.11-X). Δεν είναι εύκολη δουλειά χωρίς μια πραγματική CPU να εκτελεί τον κώδικα. Έτσι, αφιέρωσα περίπου 3 ημέρες για να φτιάξω το δικό μου εργαλείο με τη βοήθεια του Claude.
Θα ήθελα να σας παρουσιάσω το CPC X-Ray, ένα εργαλείο ανοιχτού κώδικα (GPL-3.0) που δημιούργησα για την ανάλυση κώδικα CPC: ROMs, προγράμματα, οτιδήποτε τρέχει σε έναν 464, 664 ή 6128.
Σε τι χρησιμεύει
Το CPC X-Ray είναι ένα εργαλείο ανάλυσης που τυχαίνει να περιέχει έναν εξομοιωτή, και όχι το αντίστροφο. Ο σκοπός του είναι να σας βοηθήσει να αποσυναρμολογήσετε και να κατανοήσετε υπάρχοντα κώδικα και να τον μετατρέψετε σε σχολιασμένο πηγαίο κώδικα sjasmplus, ο οποίος μεταγλωττίζεται ξανά στα αρχικά bytes — ελεγμένο byte προς byte. Εκτελεί το πραγματικό firmware, τη BASIC, το AMSDOS και ROMs επέκτασης, επιτρέποντάς σας να παρακολουθείτε τα πάντα όσα κάνει ο κώδικας:
- Breakpoints δέκα τύπων — PC, M1, ανάγνωση/εγγραφή/πρόσβαση μνήμης, I/O in/out, επιλογή ROM, interrupt — με εύρη, μάσκες θυρών και συνθήκες σελιδοποίησης (paging)
- Instruction trace με βάθος κλήσεων και αλλαγές καταχωρητών, ώστε μετά από μια διακοπή να μπορείτε να πάτε πίσω και να δείτε πώς έφτασε ο κώδικας εκεί
- Bus trace κάθε πρόσβασης (M1, read, write, I/O), με επεξήγηση: ποια μεταβλητή του firmware επηρεάστηκε, τι έγινε push στη στοίβα, τι κάνει μια εγγραφή σε θύρα
- Προβολές μνήμης με χρωματική σήμανση βάσει των μεταβλητών του firmware και του AMSDOS, της σελιδοποίησης, της στοίβας, και των ονομάτων firmware και για τα τρία μηχανήματα
- Ανάλυση ενός εύρους ROM ή RAM: κώδικας έναντι δεδομένων, κώδικας που αντιγράφηκε στη RAM και εκτελέστηκε εκεί, κλήσεις RST με ενσωματωμένα (inline) δεδομένα — τα οποία μετατρέπονται στον πηγαίο κώδικα
- Αποκωδικοποίηση κωδικοποιημένων (scrambled) ROMs (το σχήμα Vortex X-module, όπου οι ανακτήσεις opcode και οι αναγνώσεις δεδομένων αποκωδικοποιούνται διαφορετικά)
Διαθέτει επίσης έναν διακομιστή MCP (MCP server), ώστε το Claude Code (ο βοηθός προγραμματισμού AI της Anthropic) να μπορεί να ελέγχει ολόκληρο το μηχάνημα: να κάνει εκκίνηση, να πληκτρολογεί, να ορίζει breakpoints, να εκτελεί βήμα-βήμα (step), να διαβάζει τη μνήμη και τα traces και να τρέχει την ανάλυση. Στην πράξη δουλεύετε μια ROM μαζί — παρακολουθεί τι κάνει πραγματικά ο κώδικας κατά τον χρόνο εκτέλεσης και σας βοηθά να ονομάσετε ρουτίνες και μεταβλητές και να γράψετε τα σχόλια.
Τι δεν είναι
Δεν είναι ένας εξομοιωτής γενικής χρήσης και δεν προσπαθεί να ανταγωνιστεί τα WinAPE, ACE, CPCEC και παρόμοια — χρησιμοποιήστε εκείνα για να παίξετε παιχνίδια και να τρέξετε demos. Το CPC X-Ray συνειδητά κάνει συμβιβασμούς σε σημεία που δεν έχουν σημασία για την ανάλυση κώδικα:
- Ο Z80 λειτουργεί σε επίπεδο εντολών (instruction-level): κάθε πρόσβαση στον δίαυλο γίνεται με τη σωστή σειρά και τα σωστά σήματα, και περνάει το ZEXALL και τα 1.6 M SingleStepTests — αλλά δεν υπάρχουν T-states μέσα σε μια εντολή
- Ο CRTC αποτελείται απλώς από τους καταχωρητές του, χωρίς χρονισμούς ράστερ (raster timing)· τα interrupt και VSYNC ακολουθούν ένα απλοποιημένο μοντέλο
- Χωρίς ήχο, χωρίς κασέτα, χωρίς εκτυπωτή· τα PPI/PSG υλοποιούν μόνο ό,τι χρειάζονται το πληκτρολόγιο και το VSYNC
- Τρέχει περίπου σε πραγματικό χρόνο — πιο αργά με ενεργοποιημένη την ανάλυση και τα traces
Το firmware, η BASIC, το AMSDOS και η πρόσβαση σε δίσκο λειτουργούν κανονικά. Κόλπα με ράστερ, mid-line splits και οτιδήποτε βασίζεται σε ακριβή χρονισμό κύκλων δεν λειτουργούν, και αυτό δεν πρόκειται να αλλάξει — είναι σχεδιαστική απόφαση, όχι εκκρεμότητα (to-do).
Πώς να το αποκτήσετε
Η έκδοση 0.9.0 (beta) περιλαμβάνει ένα πακέτο Python και έτοιμα εκτελέσιμα για Windows και Linux· περιλαμβάνονται οι τυπικές ROMs της Amstrad:
Ο κώδικας είναι πλήρης ως προς αυτά που σχεδίαζα για την έκδοση 1.0· αυτό που χρειάζεται τώρα είναι δοκιμή σε πραγματικές συνθήκες. Σχόλια, αναφορές σφαλμάτων και ιδέες είναι παραπάνω από ευπρόσδεκτα — εδώ ή στο issue tracker του GitHub.
Εντάξει, χρησιμοποιήστε το γι’ αυτό που είναι — αλλά μην νομίζετε ότι αποτελεί ανταγωνισμό για οποιονδήποτε άλλο εξομοιωτή, καθώς δεν έχει υλοποιήσει μεγάλο μέρος του υλικού — ούτε καν τον CRTC ή το gatearray.
Για παράδειγμα, η οθόνη δεν γίνεται render από το Gatearray, αλλά από έναν renderer που απλώς διαβάζει τη μνήμη RAM της οθόνης και τη μεταφέρει σε ένα κανονικό RGB frame ώστε να μπορεί να προβληθεί.

