Λοιπόν, για να ανοίξει και λίγο αυτό το section είπα να δώσω κάποια links για όποιον ενδιαφέρεται για C programming σε Amstrad.
Το θεωρώ πολύ καλή λύση για όποιον ούτε με την πάναργη ταχύτητα της basic μπορεί να τα βγάλει πέρα, ούτε θέλει να μπλέξει με καθαρή assembly. Παλαιότερα πίστευα ότι σε τόσο παλιά μηχανήματα η χρήση 100% assembly είναι αυστηρή. Αλλά φαίνεται να μην ισχύει αυτό απολύτως.
Demos από τα Phat, Pheelone, Phreaks του No Recess, αλλά και δύο δικές μου δουλειές, το Chunky Chan και το πρόσφατο Wolfenstrad γράφτηκαν σε έναν σημαντικό βαθμό σε απλή C και έπειτα τα κομμάτια που θέλανε optimize ξαναγράφτηκαν σε assembly. Δύσκολα να κάνεις rendering μεγάλα κομμάτια της οθόνης σε pure C αλλά φανταστείτε πόσο διευκολύνει τη δουλειά και την οργάνωση του κώδικα σε initializations, precalcs generation, demo scripting, game logic, πράγματα δηλαδή που είτε γίνονται πριν να ξεκινήσει το realtime κομμάτι και δεν σε νοιάζει αν καθυστερήσουν και 2 δευτερόλεπτα παραπάνω, ή πράγματα είναι λίγα και υπάρχει πολύς χρόνος για να αποφασίσεις ας πούμε τις θέσεις 3 sprites στο επόμενο καρέ, τα collision μεταξύ τους και τι θα γίνει άμα πάρεις το τάδε bonus, ενώ το sprite rendering ας πούμε θα παραμείνει σε assembly. Προσωπικά με έχει βοηθήσει πάρα πολύ και έχω χτίσει και ένα κοινό framework που θα κάνει compile είτε αυθεντική έκδοση για CPC είτε έναν κώδικα C που τρέχει σε PC και εξοιμοιώνει το τι πρόκειται να δω στην videoram του CPC αλλά σε παραθυράκι στο PC. Είναι πραγματικά πολλές οι δυνατότητες με το cross developing και η προσθήκη της δυνατότητας να γράφεις και σε C σε 8bits τις βελτιώνει. Μοναδικό υστέρημα η μνήμη. Γεμίζει πιο εύκολα από ότι αν έγραφες τα ίδια πράγματα σε assembly. Για μικρά demos με βόλεψε αλλά το πως θα συνεχίσω για μεγαλύτερα projects θα δείξει.
Η πρώτη μου επαφή με την C σε Amstrad ήταν η PhrozenC που διατήθεται και compiler που τρέχει πάνω στον Amstrad για να γράφεις κώδικα και στο real thing. Αλλά θα πρότεινα σήμερα τον SDCC compiler που βγάζει καλύτερο κώδικα και είναι πιο κοντά στην C που ξέρουμε με όλα τα καλούδια όπως structs, pointers, κλπ.
Κάπου στα programming άρθρα σε αυτό το link υπάρχουν 4 μέρη ενός άρθρου για το πως να ξεκινήσετε με την SDCC συν το tool του NoRecess για μια πιο ανθρώπινη z80 assembly (για τα κομμάτια του κώδικα που προτιμείται assembly αντί για C) κοντά στα πρότυπα του Maxam (γιατί η SDCC σύνταξη για την z80 assembly που χρησιμοποιείται είναι τόσο περίεργη που δεν την προτιμώ). Στο ίδιο link έχει και ένα preconfigured SDCC environment με όλα αυτά τα tools για να ξεκινήσετε.
Κάτι πιο ενδιαφέρον που θα το πρότεινα είναι μια σειρά από tutorials πάνω στο ίδιο θέμα, όπου ο συγγραφέας προχωράει παραπέρα και δίχνει ένα παράδειγμα πως να κάνετε π.χ. 2d ή 3d stars με αξιοπρεπή ταχύτητα και μόνο με την χρήση C (η χρήση assembly βρίσκεται μόνο στα σημεία που χρειάζεται να μιλήσεις με τα hardware ports για αλλαγή mode, παλέτας, timer, κλπ. Αυτό αναγκαστικό και δεν γλυτώνεται, αλλά κανείς μπορεί να πάρει και τις ρουτίνες έτοιμες). Έχει και εξτρά μαθήματα όπου δίχνει πως να κάνεις optimize αυτές τις ρουτίνες και πάλι πλήρως σε C για να βγάλει καλύτερο assembly κώδικα ο compiler και να μπορείς να κάνεις επιτέλους rendering και με pure C σε Amstrad.
Έπειτα, σε κάποια στιγμή θα βγει το νέο τεύχος του Phoenix και από το προηγούμενο άρθρο είχα ξεκινήσει να γράφω για CPC coding. Ίσως σκέφτομαι να το περάσω σε C coding στον CPC στα μελλοντικά άρθρα και να γράψω κάτι σε και αυτό στο προηγούμενο link, δηλαδή τα βασικά και μετά κάτι πρακτικό (ίσως ένα μικρό απλοϊκό παιχνίδι). Θα δείξει..
Το θεωρώ πολύ καλή λύση για όποιον ούτε με την πάναργη ταχύτητα της basic μπορεί να τα βγάλει πέρα, ούτε θέλει να μπλέξει με καθαρή assembly. Παλαιότερα πίστευα ότι σε τόσο παλιά μηχανήματα η χρήση 100% assembly είναι αυστηρή. Αλλά φαίνεται να μην ισχύει αυτό απολύτως.
Demos από τα Phat, Pheelone, Phreaks του No Recess, αλλά και δύο δικές μου δουλειές, το Chunky Chan και το πρόσφατο Wolfenstrad γράφτηκαν σε έναν σημαντικό βαθμό σε απλή C και έπειτα τα κομμάτια που θέλανε optimize ξαναγράφτηκαν σε assembly. Δύσκολα να κάνεις rendering μεγάλα κομμάτια της οθόνης σε pure C αλλά φανταστείτε πόσο διευκολύνει τη δουλειά και την οργάνωση του κώδικα σε initializations, precalcs generation, demo scripting, game logic, πράγματα δηλαδή που είτε γίνονται πριν να ξεκινήσει το realtime κομμάτι και δεν σε νοιάζει αν καθυστερήσουν και 2 δευτερόλεπτα παραπάνω, ή πράγματα είναι λίγα και υπάρχει πολύς χρόνος για να αποφασίσεις ας πούμε τις θέσεις 3 sprites στο επόμενο καρέ, τα collision μεταξύ τους και τι θα γίνει άμα πάρεις το τάδε bonus, ενώ το sprite rendering ας πούμε θα παραμείνει σε assembly. Προσωπικά με έχει βοηθήσει πάρα πολύ και έχω χτίσει και ένα κοινό framework που θα κάνει compile είτε αυθεντική έκδοση για CPC είτε έναν κώδικα C που τρέχει σε PC και εξοιμοιώνει το τι πρόκειται να δω στην videoram του CPC αλλά σε παραθυράκι στο PC. Είναι πραγματικά πολλές οι δυνατότητες με το cross developing και η προσθήκη της δυνατότητας να γράφεις και σε C σε 8bits τις βελτιώνει. Μοναδικό υστέρημα η μνήμη. Γεμίζει πιο εύκολα από ότι αν έγραφες τα ίδια πράγματα σε assembly. Για μικρά demos με βόλεψε αλλά το πως θα συνεχίσω για μεγαλύτερα projects θα δείξει.
Η πρώτη μου επαφή με την C σε Amstrad ήταν η PhrozenC που διατήθεται και compiler που τρέχει πάνω στον Amstrad για να γράφεις κώδικα και στο real thing. Αλλά θα πρότεινα σήμερα τον SDCC compiler που βγάζει καλύτερο κώδικα και είναι πιο κοντά στην C που ξέρουμε με όλα τα καλούδια όπως structs, pointers, κλπ.
Κάπου στα programming άρθρα σε αυτό το link υπάρχουν 4 μέρη ενός άρθρου για το πως να ξεκινήσετε με την SDCC συν το tool του NoRecess για μια πιο ανθρώπινη z80 assembly (για τα κομμάτια του κώδικα που προτιμείται assembly αντί για C) κοντά στα πρότυπα του Maxam (γιατί η SDCC σύνταξη για την z80 assembly που χρησιμοποιείται είναι τόσο περίεργη που δεν την προτιμώ). Στο ίδιο link έχει και ένα preconfigured SDCC environment με όλα αυτά τα tools για να ξεκινήσετε.
Κάτι πιο ενδιαφέρον που θα το πρότεινα είναι μια σειρά από tutorials πάνω στο ίδιο θέμα, όπου ο συγγραφέας προχωράει παραπέρα και δίχνει ένα παράδειγμα πως να κάνετε π.χ. 2d ή 3d stars με αξιοπρεπή ταχύτητα και μόνο με την χρήση C (η χρήση assembly βρίσκεται μόνο στα σημεία που χρειάζεται να μιλήσεις με τα hardware ports για αλλαγή mode, παλέτας, timer, κλπ. Αυτό αναγκαστικό και δεν γλυτώνεται, αλλά κανείς μπορεί να πάρει και τις ρουτίνες έτοιμες). Έχει και εξτρά μαθήματα όπου δίχνει πως να κάνεις optimize αυτές τις ρουτίνες και πάλι πλήρως σε C για να βγάλει καλύτερο assembly κώδικα ο compiler και να μπορείς να κάνεις επιτέλους rendering και με pure C σε Amstrad.
Έπειτα, σε κάποια στιγμή θα βγει το νέο τεύχος του Phoenix και από το προηγούμενο άρθρο είχα ξεκινήσει να γράφω για CPC coding. Ίσως σκέφτομαι να το περάσω σε C coding στον CPC στα μελλοντικά άρθρα και να γράψω κάτι σε και αυτό στο προηγούμενο link, δηλαδή τα βασικά και μετά κάτι πρακτικό (ίσως ένα μικρό απλοϊκό παιχνίδι). Θα δείξει..