Νέος σχεδιασμός κασέτας: ROMBA π

Ευχαριστώ. Δεν γνώριζα το CPC-CPLINK2, αλλά τώρα που το βλέπω, ίσως να μπορεί να επωφεληθεί από τις λειτουργίες DMA.

2 «Μου αρέσει»

Ενημερώθηκε η τεκμηρίωση, προσθέτοντας τη χρήση της λειτουργίας 2D DMA: PROGRAMMING.md · master · doragasu / romba-pi-src · GitLab

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

1 «Μου αρέσει»

Ναι, πιθανότατα θα βοηθούσε με το DMA, αλλά έπρεπε να χρησιμοποιήσω 8 GPIO για την πλευρά PI Data (GPIO32..39), με τα υπόλοιπα μη ανθεκτικά στα 5V GPIO 40..47 να εξυπηρετούν επίσης το PI. Οπότε μάλλον μου λείπουν μερικά σήματα του διαύλου CPC (CPC Bus).

Προς το παρόν χρησιμοποιώ απλώς μια πλακέτα ανάπτυξης (development board).

1 «Μου αρέσει»

Ενημερωμένη τεκμηρίωση με πολύ περισσότερες πληροφορίες:

  • Πιο ευκολονόητες (ελπίζω) πληροφορίες σχετικά με τον τρόπο χρήσης της λειτουργίας 2D DMA.
  • Ενημερωμένη λίστα καταχωρητών DMA.
  • Προστέθηκαν παραδείγματα κώδικα σε BASIC για την ανάγνωση του ποντικιού και την εκτέλεση γραμμικών και 2D μεταφορών DMA.
  • Προστέθηκαν πληροφορίες σχετικά με τον τρόπο εκτέλεσης DMA fills, καθώς και μεταφοράς από την εσωτερική μνήμη του CPC.

Όπως πάντα, μπορείτε να τη διαβάσετε στο αποθετήριο: PROGRAMMING.md · master · doragasu / romba-pi-src · GitLab

4 «Μου αρέσει»

Η πρόσφατη συζήτηση για το «Another World», σχετικά με το πώς το παιχνίδι τρέχει σε μια απλή μηχανή καταστάσεων που εξαρτάται μόνο από μια γρήγορη ρουτίνα πλήρωσης πολυγώνων (polygon fill routine), με κάνει να πιστεύω ότι θα ήταν ένας εξαιρετικός υποψήφιος για πειραματισμό με τις δυνατότητες DMA αυτού του cart.

Στην τρέχουσα κατάστασή τους, τα γεμίσματα DMA (DMA fills) μπορούν να είναι χρήσιμα για τη σχεδίαση ορθογωνίων (συμπεριλαμβανομένων οριζόντιων και κάθετων γραμμών). Εκτός από αυτό όμως, μπορεί να μην είναι ιδιαίτερα χρήσιμα.

Σίγουρα ένα πολύγωνο μπορεί να κατασκευαστεί από οριζόντιες γραμμές; Ή μήπως υπάρχει υπερβολική επιβάρυνση (overhead) για να αξίζει να γίνει κάτι τέτοιο;

Οι παλιές μηχανές γραφικών λογισμικού (software 3D engines) σχεδίαζαν τα τρίγωνα με αυτόν τον τρόπο: χωρίζοντας τα τρίγωνα κατακόρυφα και στη συνέχεια σχεδιάζοντας οριζόντιες γραμμές.

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

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

Θα μπορούσες να κάνεις πράγματα όπως το να κάνεις render πολύγωνα στον RP2350 και να τα μεταφέρεις μέσω DMA, αλλά τότε θα σου χτυπούσε την πόρτα η αστυνομία των CPC :sweat_smile:

Θα μπορούσες ακόμα και να τρέξεις το DOOM στον RP2350, κβαντισμένο για την παλέτα χρωμάτων και την ανάλυση του CPC, και να μεταφέρεις τα καρέ στον CPC. Η μεταφορά ολόκληρης της οθόνης διαρκεί περίπου 16,4 ms, οπότε εφαρμογές όπως ένα πρόγραμμα αναπαραγωγής βίντεο στα 50 FPS θα μπορούσαν επίσης να είναι εφικτές (έχεις επίσης έως και 16 MiB ROM για την αποθήκευση του βίντεο).

Περιορίζω τις δυνατότητες DMA της κάρτας (cartridge) σε ό,τι θα μπορούσε να κάνει ένα τυπικό blitter εκείνη την εποχή. Αλλά το να μπορείς να αλλάξεις ολόκληρο το περιεχόμενο της οθόνης του CPC σε λιγότερο από ένα καρέ, επιτρέπει τη δημιουργία οποιουδήποτε είδους επιταχυντή, αν δεν σε πειράζει το rendering να μην γίνεται από τον Z80.

Τούτου λεχθέντος, ενδιαφέρεται κανείς να φτιάξει το Bad Apple για το ROMBA π;

Φαίνεται ενδιαφέρον!

Μου αρέσουν πολύ οι δυνατότητες DMA — θα έκαναν τεράστια διαφορά στο να πετύχουμε ομαλά framerate! :slight_smile:

Αν βγάλεις παρτίδα από αυτά, σίγουρα θα πάρω ένα!

Βρίσκω τις δυνατότητες DMA πολύ ελκυστικές! Συνεχίστε έτσι! Μία ερώτηση που έχω είναι: θα μπορούσε το 2350 να είναι μια θυγατρική πλακέτα (daughterboard, για παράδειγμα ένα core module) που μπορεί να συγκολληθεί; Αυτό θα απλοποιούσε πολύ αυτή την κατασκευή