CD32 Emulation / Made in..Greece

  • Έναρξη μίζας Έναρξη μίζας Scatman
  • Ημερομηνία έναρξης Ημερομηνία έναρξης
Πολύ δύσκολο και φιλόδοξο project, μπράβο! Από όσο καταλαβαίνω (διόρθωσέ με αν κάνω λάθος), έχεις ήδη ένα σταθερό 68k core που εκτελεί τουλάχιστον μέρος των εντολών.

Από καθαρή περιέργεια: σε ποιο σημείο του boot του CD32 βρίσκεσαι; Φτάνει να φορτώνει το Kickstart ή και πιο πέρα; Έχεις αρχίσει να υλοποιείς πράγματα όπως sprites, Copper, DMA ή timers; Σε ποια γλώσσα δουλεύεις και τι είδους emulation στοχεύεις (cycle ή instruction accurate); Επίσης, πώς έχεις στήσει το memory map και το dual-ROM setup του CD32;

Δεν ρωτάω για ανάκριση, απλώς το βρίσκω ενδιαφέρον και εντυπωσιακό εγχείρημα.
Κάθε μικρό βήμα που κάνεις σε αυτό είναι και μια μεγάλη νίκη.

Για την ιστορία, παλιότερα είχα γράψει κι εγώ έναν μικρό CHIP-8 emulator σε assembly, αλλά με τραβάνε περισσότερο οι compilers/interpreters.
 
Πολύ δύσκολο και φιλόδοξο project, μπράβο! Από όσο καταλαβαίνω (διόρθωσέ με αν κάνω λάθος), έχεις ήδη ένα σταθερό 68k core που εκτελεί τουλάχιστον μέρος των εντολών.

Από καθαρή περιέργεια: σε ποιο σημείο του boot του CD32 βρίσκεσαι; Φτάνει να φορτώνει το Kickstart ή και πιο πέρα; Έχεις αρχίσει να υλοποιείς πράγματα όπως sprites, Copper, DMA ή timers; Σε ποια γλώσσα δουλεύεις και τι είδους emulation στοχεύεις (cycle ή instruction accurate); Επίσης, πώς έχεις στήσει το memory map και το dual-ROM setup του CD32;

Δεν ρωτάω για ανάκριση, απλώς το βρίσκω ενδιαφέρον και εντυπωσιακό εγχείρημα.
Κάθε μικρό βήμα που κάνεις σε αυτό είναι και μια μεγάλη νίκη.

Για την ιστορία, παλιότερα είχα γράψει κι εγώ έναν μικρό CHIP-8 emulator σε assembly, αλλά με τραβάνε περισσότερο οι compilers/interpreters.
Ευχαριστώ! Ναι, ο 68k core είναι ήδη αρκετά σταθερός , εκτελεί μεγάλο μέρος του instruction set και πλέον περνάει τα πρώτα στάδια του CD32 boot χωρίς runaways.

Αυτή τη στιγμή βρίσκομαι λίγο μετά το ExecInit, δηλαδή στο σημείο όπου το Kickstart αρχίζει να στήνει vectors, stacks και early subsystems. Δεν έχω φτάσει ακόμη σε Copper, sprites ή DMA. Είμαι στο σημείο όπου το firmware “αναπνέει” και αρχίζει να ζητάει πιο σύνθετα opcodes (MOVEA.L abs.l, CAS κτλ) .

Είναι σε C++ κατά βάση. Έχω και λιγο C . Στοχεύω σε instruction accurate συμπεριφορά με καθαρό memory map. Το CD32 dual‑ROM setup (Kickstart + Extended ROM) ~παρεμπιμπόνως ΜΕΓΑΛΟΣ πόνος~ είναι πλήρως χαρτογραφημένο, με σωστό overlay handling και exception vectors.
Με λίγα λόγια , τα δύσκολα CPU gates έχουν περαστεί και πλησιάζω στο σημείο όπου θα αρχίσει να ζητάει πραγματικό custom chip hardware ~εκεί θα μπει στο παιχνίδι ο Copper, τα bitplanes και τα DMA channels.

Η μεγαλύτερη πρόκληση στο CD32 emulation δεν είναι μόνο η πολυπλοκότητα του hardware αλλά το ότι κινούμαι σε αχαρτογράφητα ύδατα. Δεν υπάρχει πραγματικό developer documentation που να εξηγεί βήμα‑βήμα τη ροή του boot ή τα ακριβή hardware expectations. Ότι μπορεί να βρεθεί και υπάρχει είναι αποσπασματικό και συνήθως προσανατολισμένο σε χρήστες.

Το άλλο μεγάλο ζήτημα είναι ότι τα ROMs που κυκλοφορούν στο διαδίκτυο δεν είναι αυθεντικά dumps.
Είναι λειτουργικά μεν αλλά έχουν τροποποιηθεί για να ταιριάζουν στις ανάγκες του WinUAE δε.
Αυτό σημαίνει ότι συμπεριφέρονται σωστά μόνο όταν ο emulator μιμείται συγκεκριμένες συμπεριφορές του WinUAE. Μέχρι να καταλάβω τι συμβαίνει πέρασα αρκετές απογοητεύσεις.

Με λίγα λόγια, το project απαιτεί debugging και καθαρή υλοποίηση από το μηδέν, χωρίς να μπορείς να βασιστείς σε “μαγικές” συμπεριφορές άλλων emulators.
Ηθελημένα έχω αποφύγει κάθε ταύτιση με τον WinUAE καθώς θέλω η προσπάθεια να είναι αυθεντική χωρίς να υπάρχει η ανάγκη για reference.
Οι μόνες τομές μεταξύ Paula32 / WinUAE είναι to επίσημο Motorola 68k instruction set (ίδιο encoding tables, ίδια semantics των opcodes ktl). Δλδ Motorola‑specific συμπεριφορές και το επίσημο CD32 memory map όπως το ορίζει η Commodore.

Edit : το γεγονός ότι ασχολείσαι με assembly σε κάνει γίγαντα στα μάτια μου.
 
Τελευταία επεξεργασία:
Πολύπλοκο και ασυνήθιστο project!

θα χρειαστεί χρόνο, διάθεση, αρκετή πνευματική ενέργεια, αλλά και τεχνικές γνώσεις που νιώθω πως ήδη διαθέτεις.
Θα παρακολουθώ κάθε εξέλιξη με ενδιαφέρον.

Μια τελευταία ερώτηση: πώς και επέλεξες το CD32 και όχι ένα A1200 ή A500; Το CD32 είναι αρκετά πιο περίπλοκο από τα A500/A1200. Σε ενδιαφέρει περισσότερο η κονσόλα ή η αρχιτεκτονική;

Το 2007 αποφάσισα να εγκαταλείψω τα εγκόσμια (high-level programming) και να αφοσιωθώ στην assembly, πρώτα στα 16 και μετά στα 32 bit.
 
Πολύπλοκο και ασυνήθιστο project!

θα χρειαστεί χρόνο, διάθεση, αρκετή πνευματική ενέργεια, αλλά και τεχνικές γνώσεις που νιώθω πως ήδη διαθέτεις.
Θα παρακολουθώ κάθε εξέλιξη με ενδιαφέρον.

Μια τελευταία ερώτηση: πώς και επέλεξες το CD32 και όχι ένα A1200 ή A500; Το CD32 είναι αρκετά πιο περίπλοκο από τα A500/A1200. Σε ενδιαφέρει περισσότερο η κονσόλα ή η αρχιτεκτονική;

Το 2007 αποφάσισα να εγκαταλείψω τα εγκόσμια (high-level programming) και να αφοσιωθώ στην assembly, πρώτα στα 16 και μετά στα 32 bit.
Συγκυριακά! Όσο απλό κι αφελές ακούγεται.

Με αφορμή ένα βίντεο, θέλησα να κάνω κάποιες δοκιμές παιχνιδιών. Κάπου εκεί συνειδητοποίησα πως πέρα του WinUAE δεν υπάρχει τίποτα άλλο ενεργό και κυρίως τίποτα direct, δλδ κατεβάζω τον εμού , φορτώνω τα bios roms και ξεκινώ. Έχοντας κάποια εμπειρία από emulation με πειραματικούς 8/16bit emulators, με όση άγνοια κινδύνου μπορεί να έχει ένα χομπίστας, μπήκα κατευθείαν στα βαθιά, δίχως γνώση των ιδιαιτεροτήτων των bios roms & συστήματος. Ομολογώ πως εφόσον είχα πιο καθαρή εικόνα μάλλον δε θα το είχα ξεκινήσει ποτέ!

Το αστείο είναι πως εφόσον το πρότζεκτ Paula32 πετύχει το στόχο του δλδ φτάσω σε ένα επίπεδο όπου φορτώνει κανονικά το σύστημα και παίζει ~έστω~ μερικά παιχνίδια (και με 1 θα είμαι ικανοποιημένος), μετά αρκετά εύκολα θα μπορεί να γίνει amiga multi-emu CDtv,1200 ακόμη και 500 διότι η αρχιτεκτονική/βάση υπάρχει και είναι παρόμοια μεταξύ των amiga συστημάτων. Αλλά αυτά τώρα είναι φουτουριστικά σενάρια.
 
Φαίνεται ότι είσαι ένας πολύ προσγειωμένος και προσηλωμένος χρήστης. Αν καταφέρεις να το κάνεις να φορτώσει έστω ένα παιχνίδι, για μένα αυτό σημαίνει ότι μπορείς να καταφέρεις τα πάντα.
 
Παίκτη πώς πάει; Έχει προχωρήσει καθόλου το Paula32; Με εξιτάρει τρελά το task που έχεις αναλάβει, ειδικά που το πας self-made χωρίς WinUAE μαγείες. Άρχισες καθόλου να σκαλίζεις custom chips (Copper, DMA) ή παλεύεις ακόμα με τα περίεργα ROMs; Ανυπομονώ για το πρώτο bootable...οτιδήποτε!
 
Ευχαριστώ για το ενδιαφέρον!

Ο emu έχει προχωρήσει αρκετά στάδια παρακάτω, αλλά η διαδικασία είναι συχνά βασανιστική.

Όσο ενδιαφέρον κι αν έχει το σκάψιμο του CD32 Kickstart, στο τέλος της ημέρας μιλάμε για ένα πλήρες λειτουργικό σύστημα κι όχι ένα απλό BIOS τύπου Saturn/PS1. Η κονσόλα όντως χρησιμοποιεί το ίδιο 3.1 40.60 της A1200 με μικρές τροποποιήσεις για να βλέπει τα νέα libraries. Οπότε το "Α1200 με cd" που το χαρακτηρίζουν δεν απέχει πολύ από την πραγματικότητα.

Ήθελα όσο τίποτα σήμερα, παγκόσμια ημέρα Amiga, να έχω οπτικό υλικό από το πολυπόθητο bootmenu αλλά δυστυχώς δεν τα κατάφερα.

Πάντως, σε γενικές γραμμές αλλαξα τελείως προσέγγιση. Τα jumps/hacks που χρησιμοποιούσα για να “κόβω δρόμο” τελικά δεν ήταν λύση.
Το Kickstart έχει τέτοια επίπεδα αυτοδιάγνωσης που αποκλίσεις 1 byte δεν περνάνε. Οτιδήποτε δεν ακολουθεί τη native λογική, αργά ή γρήγορα απορρίπτεται. Οπότε πλέον κινούμαι ακριβώς όπως μου ορίζει η ROM.Σε αυτό το στάδιο, ο emulator είναι περισσότερο “CD32 emu που μελετά τη ροή του Kickstart 3.1” παρά gaming software. Το θετικό είναι ότι αν φτάσει στο σημείο να τρέχει παιχνίδια, θα είναι η πιο πιστή υλοποίηση που έγινε ποτέ μιας και απ’ όσο ξέρω το WinUAE βασίζεται σε ένα τεράστιο σύστημα if/then για να εξαναγκάσει τα ROMs να συνεργαστούν.

Περί ROMs ... ήταν όντως περίεργα και το mapping τους με ταλαιπώρησε αφάνταστα. Σύντομα κατάλαβα πως ότι κυκλοφορεί είναι ...Cloanto υλοποιήσεις, όχι “καθαρά” CD32 ROMs. Αν τα έβαζες με κάποιο τρόπο αυτούσια σε πραγματικό chip, δεν θα δούλευαν ποτέ.
Τελικά εγκατέλειψα την ιδέα των ξεχωριστών buffers και πέρασα σε ενιαίο ROM buffer ~οπως απαιτεί το ίδιο το Kickstart.

Στα νέα/εξελίξεις : ο CPU core δείχνει άριστος, το memory mapping είναι σωστό, το Kickstart boot‑flow τρέχει native σαν πραγματικό μηχάνημα, οι Exec λίστες/πόροι λειτουργούν άψογα και γενικά υπάρχει μια πολύ σταθερή βάση, καμία σχέση με πριν έναν χρόνο.

Αυτή τη στιγμή έχω κολλήσει στην υλοποίηση του battclock, δηλαδή του driver για το RTC της Gaia που πρέπει να δηλώσει στο Kickstart ότι υπάρχει πραγματικό ρολόι.

Στο site έγραφα ότι ο emu ήταν ~5% έτοιμος (το 2024). Σήμερα θα έλεγα πάνω από 50% συνολικά. Για το bootmenu συγκεκριμένα, πάνω από 70% περίπου.

Γενικά, ο εμου βρίσκεται στο καλύτερο σημείο που βρισκόταν ποτέ.

Συνοπτικά: το μεγάλο πρόβλημα είναι πως το Kickstart απαιτεί τέλεια ευθυγράμμιση και απόλυτη υποταγή στους κανόνες του για να δώσει αποτέλεσμα . Αν μπουν στην εξίσωση και αυτά που έγραψα στο επετειακό thread, με τις ανεξήγητες τρέλες τότε καταλαβαίνει κανείς πως ακόμη κι αν βιάζομαι, αυτό έχει τον ωραίο τρόπο του να με επιβραδύνει :)

Σημειωτέον, μια μεγάλη αμέλεια μου είναι ότι δεν κρατάω αναλυτικά dev notes και σε ένα τόσο ανεξερεύνητο πεδίο όπως το CD32 emulation, αυτό δεν βοηθάει.

Το μόνο σίγουρο είναι ότι πλέον καταλαβαίνω καλύτερα από ποτέ γιατί τόσα χρόνια δεν βγήκε άλλος CD32 emulator πέρα από το WinUAE… και γιατί μάλλον δεν θα υπάρξει άλλος στο μέλλον (εξαιρείται ο δικός μου -.- ).

Αυτά πάνω κάτω.
 
Τελευταία επεξεργασία:
Scatman ευχαριστώ για το update, η ανάλυσή σου είναι απίστευτη! Είναι τεράστιο αυτό που κάνεις. Το να πετάξεις τα hacks και να πας full native είναι η πιο δύσκολη αλλά και η σωστή οδός για έναν emulator που θα μείνει στην ιστορία. Σεβασμός που παλεύεις με το Kickstart 3.1 και τη Gaia για το battclock. Η τεχνική δυσκολία του project εξηγεί το γιατί δεν υπάρχουν standalone emulators για CD32 εκεί έξω. Εύχομαι καλή συνέχεια σε αυτόν τον...προγραμματιστικό εφιάλτη!
 
Πίσω
Μπλουζα