Cpc-cplink2

Κάποιοι από εσάς ίσως θυμάστε το εξαιρετικό CPC-CPLINK που δημιούργησε ο Revaldinho. Δείτε το GitHub CPC-CPLINK.

Βασίστηκα σε αυτό και δημιούργησα μια συμβατή προς τα πίσω συσκευή χρησιμοποιώντας ένα Pico 2 με πρόσθετες δυνατότητες.

Στην πραγματικότητα, χρησιμοποιώ μια πλακέτα ανάπτυξης Olimex RP2350 Pico 2.

Στο πίσω μέρος μπορείτε να δείτε το PI Zero 2.

Μπορεί να κάνει όλα όσα έκανε το αρχικό CPC-CPLINK, αλλά πλέον διαθέτει βαθιά FIFOs των 1024 bytes και τη δυνατότητα να παρέχει δεδομένα μέσω εικόνων ROM (ROM images) πίσω στον Amstrad CPC.

Προς το παρόν βρίσκεται ακόμα σε φάση ανάπτυξης, αλλά μπορείτε να δείτε τις δυνατότητές του στο παρακάτω βίντεο, όπου η μπάλα γίνεται render στο PI Zero και στέλνεται στον CPC για εμφάνιση.

Βίντεο με την μπάλα που αναπηδά.

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

Και τώρα ξεκινά η συζήτηση για το «τι το κάνει CPC» :smiley:

Αλλά είναι πραγματικά φοβερό.

Για όσους δεν θυμούνται το CPC-CPLINK:

Πρόκειται για μια κάρτα που σας επιτρέπει να συνδέσετε έναν εξωτερικό συμπεξεργαστή, όπως ένα RaspberryPi, απευθείας σε οποιονδήποτε υπολογιστή Amstrad CPC.

Η κάρτα παρέχει μια εύχρηστη παράλληλη διεπαφή μεταξύ των επεξεργαστών χρησιμοποιώντας υλικό FIFO (First-In First-Out) και ένα απλό πρωτόκολλο λογισμικού ανταλλαγής μηνυμάτων. Περιλαμβάνονται εξαρτήματα μετατόπισης στάθμης τάσης, ώστε να μπορούν να συνδεθούν απευθείας συμπεξεργαστές τόσο των 3V3 όσο και των 5V. Το πιθανότερο είναι ότι ο συμπεξεργαστής θα είναι ένα RaspberryPi, αλλά η διεπαφή είναι κατάλληλη και για άλλους επεξεργαστές και συστήματα, συμπεριλαμβανομένων των Arduino, Teensy και PIC MCU.

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

Ποια είναι η κύρια διαφορά ανάμεσα σε αυτό και στο αρχικό CPC-CPLINK από πρακτική άποψη;

Αξίζει η αναβάθμιση;

απίστευτο, εγώ έχω το αυθεντικό ναι !!

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

Ο κύριος στόχος ήταν να αυξηθεί η διαμεταγωγή δεδομένων από το PI προς το CPC.

Ναι, το CPC-CPLINK2 έχει βαθύτερα FIFO (πλέον 1024 σε σύγκριση με 16), αλλά αυτό στην πραγματικότητα δεν αλλάζει την ταχύτητα των αιτημάτων IO από το CPC.

Για να βελτιώσω την ταχύτητα, πρόσθεσα ένα επιπλέον GPIO με την ονομασία «ROM Not FIFO» (RNF). Όταν αυτό είναι HIGH, γεμίζει μια ψευδο-ROM στο Pico αντί για το FIFO. Ένα επιπλέον bit στον τρέχοντα καταχωρητή Status (Κατάσταση) ορίζεται στη συνέχεια για να υποδείξει ότι υπάρχουν δεδομένα στη ROM (στην πραγματικότητα υπάρχουν 2 διαθέσιμες ROM). Το CPC μπορεί τότε απλώς να επιλέξει τη ROM (OUT &DFXX, NN) και να αντιγράψει τα δεδομένα (δηλ. LDI).

Είναι, λοιπόν, πλήρως συμβατό προς τα πίσω με το αρχικό CPC-CPLINK, αλλά διαθέτει αυτό το επιπλέον μικρό κόλπο για να μεταφέρει λίγο περισσότερα δεδομένα από το PI στο CPC.

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

Παρόμοιο με το M4 DMA μέσω ψεύτικων ROMs;

Ευχαριστώ, πραγματικά το διασκεδάζω αυτό. Πήρα τον αρχικό μου CPC 664 όταν ήμουν 16 ετών, πριν κυκλοφορήσει ο 6128 (δηλαδή πολύ καιρό πριν) και τον χρησιμοποιώ ακόμα και σήμερα. Αυτού του είδους το πρότζεκτ μου επιτρέπει να συνεχίζω να εξερευνώ και να κατανοώ τον Amstrad CPC. Εξακολουθώ να τον απολαμβάνω εξίσου όπως όταν ήμουν 16.

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

Δεν είμαι σίγουρος, μάλλον ναι, παρέχει δύο ROM που μπορείς να γεμίσεις με ό,τι θέλεις.

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

Ωραία δουλειά! Ευχαριστώ.

Είναι διαθέσιμο; Έχω δύο αυθεντικά CPC-CPLINK για τα οποία έχω γράψει κάποιο λογισμικό και θα με ενδιέφερε να το δοκιμάσω αυτό.

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

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

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

Ακολουθεί μια επισκόπηση και η χρήση.

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

Μπορείς να δώσεις τεκμηρίωση προγραμματισμού σε αυτό το στάδιο; Μετά μπορώ να φτιάξω μια κλάση για να χρησιμοποιήσεις τη NTC BASIC με αυτό — θα ήθελα πολύ να δω το City3D Demo να τρέχει χρησιμοποιώντας το Pi ως CoProcessor!

Σίγουρα πολύ ωραίο! Αυτό θα επιταχύνει πολλά πράγματα.

Σχεδιάζεται υποστήριξη στο PiStudio ( PiStudio: a Raspberry Pi-powered IDE for the Amstrad CPC · NoRecess464 ).

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

Τέλεια! Θέλεις να του προσθέσεις το NTC Basic; Είμαι σίγουρος ότι το build chain θα δουλέψει μια χαρά εκεί.

Δώσε μου περίπου έναν μήνα και θα ανεβάσω την πρόοδό μου εδώ.

Auckland Demo… για τη βελτίωση του CPC-CPLINK!

Μια εξέλιξη του City3D demo προγραμματισμένη σε NTC BASIC - πετάξτε πάνω από το Ώκλαντ της Νέας Ζηλανδίας

Μερικά στατιστικά:

Πτήση πάνω από το Ώκλαντ της Νέας Ζηλανδίας, σε wireframe, σε έναν Amstrad CPC με επέκταση μνήμης 4 MB RAM. Ολόκληρη η πόλη βρίσκεται στη μνήμη: 233.935 κτίρια, 43.082 γραμμές δρόμων, σιδηροδρόμων, ακτών και υδάτων, 50.040 δέντρα, το Sky Tower, το Harbour Bridge και τα ηφαίστεια - από το OpenStreetMap, 409 τετραγωνικά χιλιόμετρα.

ΑΠΑΙΤΗΣΕΙΣ

  • CPC 6128 ή 464 (Z80, 4 MHz), επέκταση μνήμης 4 MB RAM (200 σελίδες RAM ή περισσότερες)
  • UniDOS με κόμβο μαζικής αποθήκευσης (IDE, SD …): το AUCKLAND.DAT είναι 3,8 MB
    (χωρίς την ανάγνωση κατά μπλοκ του UniDOS φορτώνει ένα byte τη φορά: υπερβολικά αργό)
  • Λειτουργεί και το WinAPE: IDE drive = AUCKLAND.IMG, UniDOS ROMs, 4 MB RAM

Αρχεία: AUCKLAND.BIN (το πρόγραμμα, 35K) και AUCKLAND.DAT (τα δεδομένα), στην
ίδια μονάδα δίσκου. RUN"AUCKLAND

Έχω συμπεριλάβει όλη την ανάλυση και τα εργαλεία, καθώς και σύντομα κώδικα C για Raspberry Pi (τον οποίο θα πρέπει να μπορείτε να προσαρμόσετε). Μπορείτε επίσης να τροφοδοτήσετε ολόκληρη τη NTC BASIC μαζί με το demo στο claude και θα είναι σε θέση να ξαναγράψει την πλευρά του CPC ώστε να χρησιμοποιεί την πλευρά του PI, εάν το χρειάζεστε.

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

Σύνδεσμος Demo:

Εργαλεία (Tooling):

Κώδικας CP-CPCLINK2, Πρωτόκολλο κ.λπ. που θα έπρεπε «σχεδόν» να κουμπώνουν απευθείας:

Auckland Demo για CPC (χωρίς CP-CPCLINK2, αλλά… χρειάζεται 4mb RAM + UniDOS):

Έκδοση για CP-CPLINK2 (ίσως χρειαστεί κάποιες μικροδιορθώσεις μιας και δεν έχω ακόμα κάρτα — αλλά… θα πρέπει να τρέχει χωρίς καθόλου επιπλέον RAM!):slight_smile:

Από τον Claude:

Έγραψα την έκδοση για τον συμπεξεργαστή (coprocessor): τη μηχανή σε C, ένα πρωτόκολλο για το παράθυρο ROM που παρέχει η κάρτα, και την πλευρά του CPC. Η κάρτα περιέχει το AUCKLAND.DAT, και ο CPC δεν χρειάζεται πλέον επέκταση RAM. Βρίσκεται στο auckland.zip κάτω από το coprocessor/, και στο δέντρο του NTC ως tools/s3dpi και src/bas/aucklink. Ο Z80 σχεδιάζει τις λίστες γραμμών της κάρτας ακριβώς όπως η υλοποίηση αναφοράς σε C (cmp.png: Z80 αριστερά, C δεξιά).

Μετρημένη ταχύτητα: η κάρτα αναλαμβάνει το 3D, οπότε το frame του CPC είναι η αντιγραφή της λίστας έξω από τη ROM (περίπου 45 ms) συν το σχεδιασμό της:

Προβολή Γραμμές Λίστα Frame CPC fps
Start 440 1.7K 0.29 s 3.4
Harbour Bridge 300 1.3K 0.22 s 4.5
Devonport 1270 5.6K 0.86 s 1.2
Sky Tower 1400 7.7K 1.13 s 0.9

Αυτό είναι 4 έως 10 φορές ταχύτερο από τη βασική τιμή αναφοράς των 0,2–0,4 fps. Το σχεδιασμό γραμμών με το gfx_line καταλαμβάνει πλέον σχεδόν όλο τον χρόνο του CPC, οπότε είναι το επόμενο πράγμα προς επιτάχυνση. Ένα χαμηλότερο όριο γραμμών (B) θυσιάζει λεπτομέρεια για χάρη της ταχύτητας. Η πλευρά της κάρτας χρειάζεται 0,03–0,2 ms ανά frame σε έναν υπολογιστή· δεν το έχω χρονομετρήσει σε RP2040.

Πώς λειτουργεί η σύνδεση:

  • Ο CPC στέλνει ένα μικρό πακέτο F ανά frame: pitch, roll και yaw (-1, 0 ή 1), ταχύτητα, παράλειψη καρέ (frame skip), και όριο γραμμών (line budget). Υπάρχουν επίσης πακέτα για χαιρετισμό, μετάβαση σε μια προβολή, και λήψη του ονόματος μιας προβολής.
  • Η ROM της κάρτας έχει ένα μπλοκ κατάστασης (status block) στο #C100: «S3DP» όταν είναι έτοιμη, έναν αριθμό ακολουθίας, ποια λίστα είναι η πιο πρόσφατη, πλήθος γραμμών, υψόμετρο, πυξίδα και ένα μήνυμα. Δύο λίστες σχεδίασης των 7.5K βρίσκονται στο #C200 και στο #E000.
  • Μια λίστα αποτελείται από 3 bytes ανά σημείο (MOVE ή DRAW με x 0–319 και y 0–199), συν κωδικούς 1-byte για PEN και END. Κάθε σημείο είναι ήδη περικομμένο (clipped) στα όρια της οθόνης.
  • Σε κάθε frame ο CPC περιμένει να αλλάξει ο αριθμός ακολουθίας, αντιγράφει την πιο πρόσφατη λίστα, στέλνει το επόμενο F, και μετά σχεδιάζει. Η κάρτα ετοιμάζει το επόμενο frame ενόσω ο CPC σχεδιάζει αυτό, γεμίζοντας όποια λίστα δεν διαβάζει εκείνη τη στιγμή ο CPC.

Ο κώδικας C χρησιμοποιεί αποκλειστικά ακεραίους, οπότε ένας RP2040 χωρίς FPU είναι μια χαρά:

  • s3dpi.c / s3dpi.h: η μηχανή, με τα ίδια tiles, αποστάσεις LOD, προβολή και όριο γραμμών με την έκδοση για Z80.
  • card.c / card.h: η πλευρά της κάρτας. Το υλικολογισμικό (firmware) της κάρτας παραδίδει κάθε πακέτο στο card_command() και παρέχει το rom[] ως τη ROM των 16K της.
  • sim.c: τρέχει ολόκληρη τη σύνδεση σε ένα πρόγραμμα και εξάγει εικόνες καθώς και ένα αρχείο λίστας.
  • host.c: η μηχανή αυτόνομα, με μετρήσεις χρόνου.

Τι παραμένει άγνωστο μέχρι να κυκλοφορήσει η τεκμηρίωση του CPLINK2:

  • Θύρες: οι πραγματικές θύρες I/O. Το Link.cls χρησιμοποιεί προσωρινές τιμές τύπου M4: bytes στο #FE00, ενεργοποίηση (kick) στο #FC00.
  • Αριθμός ROM: η προσωρινή τιμή είναι η ROM 6.
  • Πού αποθηκεύονται τα δεδομένα: αν βρίσκονται στην κάρτα, η πλακέτα χρειάζεται 4 MB ή περισσότερη flash μνήμη. Η flash του RP2040 είναι αντιστοιχισμένη (mapped) στο 0x10000000, και η s3d_open δέχεται έναν δείκτη (pointer) προς τα δεδομένα. Εναλλακτικά, η μηχανή μπορεί να τρέχει σε PC ή Pi στην άλλη άκρη της σύνδεσης, και η κάρτα απλώς να προωθεί πακέτα προς τα πάνω και λίστες των 7.5K προς τα κάτω.
  • Τι έχει δοκιμαστεί μέχρι στιγμής: μόνο η προσομοιωμένη σύνδεση (sim.c) και ο Z80 να σχεδιάζει μια λίστα που δημιούργησε το sim.c.
2 «Μου αρέσει»

Φαίνεται υπέροχο. Αυτή τη στιγμή επικεντρώνομαι στο να κάνω το CPC-CPLINK2 να λειτουργήσει και να είναι όσο πιο αξιόπιστο γίνεται. Θα του ρίξω μια ματιά όταν βρω χρόνο. Όλα όσα χρειάζεται να γνωρίζετε για το πώς να χρησιμοποιήσετε το CPC-CPLINK2 βρίσκονται σε αυτή τη διαφάνεια, συμπεριλαμβανομένων των θυρών IO και των αριθμών ROM.

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