Γεια σε όλους,
μια συνέχεια από αυτό το ολοκαίνουργιο νήμα:
Ολοκλήρωσα επιτέλους το πρότζεκτ.
Έχω πλέον αποκωδικοποιήσει πλήρως, αποσυμβολομεταφράσει και σχολιάσει τη ROM από τον ελεγκτή μονάδας δίσκου Vortex F1-X/M1-X.
Το ιστορικό βρίσκεται στο παραπάνω νήμα. Δεν είναι εύκολο να αποσυμβολομεταφραστεί (disassemble), καθώς είναι κωδικοποιημένη και απαιτεί κάποια λογική για να γίνει ουσιαστικά η ιχνηλάτησή της.
Πώς τα κατάφερα τελικά;
- Δημιούργησα (με το Claude) έναν εξομοιωτή Z80 που περνάει το ACID test σε επίπεδο λογισμικού (όχι με ακρίβεια υλικού/hardware-exact).
- Δημιούργησα έναν ελάχιστο CPC γύρω από αυτόν, τον οποίο μπορώ να ξεκινήσω, να σταματήσω, να ιχνηλατήσω (τόσο την CPU όσο και το bus) και να κάνω πολλά άλλα πράγματα που χρειαζόμουν για την εκτέλεση κώδικα της ROM. Αυτό περιλάμβανε έναν renderer οθόνης που διαβάζει τους καταχωρητές CRTC, ένα ελάχιστο GA που μπορεί να παράγει interrupts (δεν εμφανίζει τίποτα), αλλά όλοι οι καταχωρητές χρωμάτων βρίσκονται εκεί και διαβάζονται. Και έναν FDC που αντιδρά σωστά στα IN/OUT από την CPU και τα μεταφράζει σε αναγνώσεις/εγγραφές δίσκου. Ο εξομοιωτής μπορεί να διαβάζει και να γράφει τυπικά αρχεία dsk, τόσο σε Schneider Format 3" όσο και σε Vortex Format.
- Σχεδίασα τα πάντα ώστε να διαθέτουν πολλαπλές διεπαφές (GUI, API, MCP).
Αυτό έγινε μέσα σε λίγες ώρες (περίπου 8). Και μετά μπόρεσα να αρχίσω να εκτελώ όλο τον κώδικα στη ROM, να εντοπίζω τους κύκλους M1, να κρατάω μια αποκωδικοποιημένη έκδοση στη μνήμη και να μπορώ να παρακολουθώ τυχόν δεδομένα που δεν εκτελέστηκαν ποτέ.
Στη συνέχεια χρησιμοποίησα το Claude για να περάσω από κάθε σημείο του κώδικα. Για τον κώδικα στον οποίο δεν έφτασε ποτέ η εκτέλεση, το έβαλα να γράψει συγκεκριμένα σενάρια και περιπτώσεις δοκιμών, τόσο σε επιστρεφόμενες τιμές εξομοιωμένου υλικού (απλώς λανθασμένες επιστροφές) όσο και σε περιπτώσεις όπου ο πραγματικός κώδικας έκανε λάθος.
Καθώς η ROM περιέχει μια μονάδα (module) CPM καθώς και τον κανονικό αντικαταστάτη του AMSDOS, υπήρχαν δύο λειτουργίες.
Σημαντικό στοιχείο σε αυτήν είναι ένα πλήρες monitor για τον CPC καθώς και ένα disc monitor για την άμεση προβολή των raw τομέων (raw sectors).
Ορίστε λοιπόν. Το αποκωδικοποιημένο δυαδικό αρχείο (binary) και ο πηγαίος κώδικας — πλήρως τεκμηριωμένος.
Παρεμπιπτόντως:
Το Claude βρήκε περίπου 15 σφάλματα (bugs) στη ROM
Το επόμενο βήμα θα είναι η διόρθωσή τους. Μερικά από αυτά είναι αλλαγές ενός μόνο byte.
BTW