CPCSyntaxError

Exo-Amstrad CPC εξομοίωσης συνεχίζει να εξελίσσεται, και το CPCSyntaxError καταφθάνει εστιάζοντας στην ακριβή αναπαραγωγή της συμπεριφοράς του αυθεντικού υλικού (hardware).

Πρόκειται για έναν εξομοιωτή για Windows, συμβατό με τα CPC 464, CPC 6128, CPC Plus και GX4000, ο οποίος βασίζεται σε ένα μοντέλο των τσιπ βίντεο του υπολογιστή με ακρίβεια κύκλου (cycle-accurate). Ένα από τα ξεχωριστά χαρακτηριστικά του εγχειρήματος είναι η υλοποίηση και των πέντε τύπων CRTC, συμπεριλαμβανομένων των μοντέλων που χρησιμοποιούνταν στα κλασικά CPC και των ASIC που βρίσκουμε στη σειρά Plus.

Ο εξομοιωτής αναπαράγει επίσης διάφορες εκδόσεις του Gate Array—μαζί με τα ιδιαίτερα χαρακτηριστικά συγχρονισμού των πίξελ τους—και μοντελοποιεί τύπους οθονών όπως τα CTM 640/644, CM14, GT 64/65 και MM12.

Για τα CPC Plus και GX4000, το CPCSyntaxError ενσωματώνει ειδικά χαρακτηριστικά ASIC, όπως sprites υλικού (hardware sprites), ήχο DMA, παλέτα 4096 χρωμάτων, διακοπές ράστερ (raster interrupts), εφέ διαιρούμενης οθόνης (split-screen) και ομαλή κύλιση (smooth scrolling).

Ένας εξομοιωτής σχεδιασμένος και για προγραμματιστές

Το CPCSyntaxError δεν περιορίζεται απλώς στην εκτέλεση παιχνιδιών και προγραμμάτων. Το έργο ενσωματώνει ένα εργαλείο αποσφάλματωσης (debugger) με σημεία διακοπής (breakpoints) και συνθήκες, σημεία παρακολούθησης μνήμης (watchpoints), βήμα-προς-βήμα εκτέλεση, αποσυμβολομεταφραστή (disassembler) με ετικέτες, καθώς και έναν δεκαεξαδικό επεξεργαστή (hex editor).

Προσφέρει επίσης παράθυρα οπτικοποίησης σε πραγματικό χρόνο για διάφορα εξαρτήματα του CPC, όπως τα CRTC, Gate Array, οθόνη, ASIC Plus, PSG, PPI, μήτρα πληκτρολογίου, ελεγκτή δίσκου και σύστημα κασέτας.

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

Το διεπαφή χρήστη (interface) είναι κατασκευασμένο χρησιμοποιώντας SDL2, OpenGL και Dear ImGui, διαθέτοντας προσαρμόσιμα και αναδιάταξη παράθυρα που επιτρέπουν στους χρήστες να οργανώσουν τον χώρο εργασίας τους σύμφωνα με τις ανάγκες τους.

Υπάρχουν επίσης διάφορες επεκτάσεις που απομένουν να ολοκληρωθούν, όπως τα M4, Symbiface II/III, DigiBlaster, AmDrum DAC, light gun, εκτυπωτής και V9990/GFX9000.

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

Μόνο για Windows;

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

Έπαιζα λίγο με τον πηγαίο κώδικα και δεν υπάρχουν πολλά πράγματα που να είναι πραγματικά ειδικά για Windows.

Θα ήταν πολύ ωραίο να μπορούμε να το κάνουμε compile σε macOS και Linux!

Eυχαριστούμε τον @XeNoMoRPH που το μοιράστηκε.

…με τον πηγαίο κώδικα να παρέχεται στον σύνδεσμο που δημοσίευσες… GitHub - WacKEDmaN/CPCSyntaxError: Emulator for Amstrad CPC and Plus/GX4000 · GitHub

Φαίνεται πως είναι κοντά στο να λειτουργήσει και σε Linux τότε;

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

Θα συμβουλευτώ τον δημιουργό σχετικά με αυτό.

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

δεν το έχω δοκιμάσει να το κάνω build σε linux… αλλά σχεδιάστηκε για να είναι cross compatible…

έχω ακόμα πολλή δουλειά να κάνω πάνω σε αυτό, οπότε να περιμένετε updates

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

έχω ενημερώσει τον κώδικα ώστε να είναι πλήρως συμβατός με linux… περιλαμβάνονται οδηγίες μεταγλώττισης

παρακαλώ μη μου ζητήσετε έκδοση για Mac! δεν έχω πρόσβαση σε Mac!.. αλλά η έκδοση για linux «θα έπρεπε» να δουλεύει!

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

Δεν μπόρεσα να το δω στα στιγμιότυπα οθόνης, αλλά διαθέτει δυνατότητες αποσφαλμάτωσης μέσω API (εξωτερική αποσφαλμάτωση) και φορτώματος εξωτερικού κώδικα, ώστε να μπορείτε να το εκτελέσετε σε μια συνεδρία ανάπτυξης με το VS Code ή άλλα εργαλεία;

Επίσης, μπορεί να φορτώσει ROM;

υπάρχει μια λειτουργία χωρίς γραφικό περιβάλλον (headless mode) μέσω CLI που μπορεί να χρησιμοποιηθεί για debugging… μάλλον όχι ακριβώς αυτό που θέλεις όμως!..

Γραμμή εντολών

Το cpcse.exe --roms <folder> ξεκινάει με έναν άλλο φάκελο ROM. Διατίθεται επίσης μια headless λειτουργία στιγμιοτύπου οθόνης για χρήση σε scripts:

cpcse.exe --shot out.bmp --model cpc6128 --frames 200 [--disk game.dsk] [--type "RUN\"GAME\n"]
          [--cart file.cpr] [--tape file.cdt] [--sna file.sna] [--crtc 0-4]
          [--gate-array 40007|40008|40010] [--beam] [--ram 64-4160]
          [--m4 <folder>] [--gfx9000] [--v9990-shot gfx.bmp] [--video9000-shot mixed.bmp]
          [--opl4] [--playcity] [--speech ssa1|dktronics|lambdaspeak3] [--mp3card <folder>]
          [--dac digiblaster|amdrum] [--wav out.wav] [--sf2]
          [--mouse "w120;j5,60;j16,2;tDIR;kEnter;s<file.bmp>"]

Το --mouse είναι ένα μικρό script που εκτελείται αφού τελειώσουν όλα τα άλλα: wait (αναμονή) frames, move (μετακίνηση) του ποντικιού, click, double-click, παρατεταμένο πάτημα του joystick (j<bits>,<frames>), type (πληκτρολόγηση) κειμένου, πάτημα ενός key (πλήκτρου), save (αποθήκευση) στιγμιοτύπου οθόνης – αρκετά για να χειριστείς μια επιφάνεια εργασίας όπως το SymbOS χωρίς παράθυρο.

Μοντέλα: cpc464, cpc6128, cpc464plus, cpc6128plus, gx4000.

Οι λειτουργίες headless εκτυπώνουν στη Γραμμή Εντολών από την οποία ξεκίνησαν. Το cpcse.exe είναι ένα πρόγραμμα παραθύρου, επομένως η γραμμή εντολών δεν το περιμένει: χρησιμοποίησε start /wait cpcse.exe ... σε ένα αρχείο δέσμης ενεργειών (batch file) που χρειάζεται το αποτέλεσμα.

μπορώ να προσθέσω GDB και API + CLI για εντολές

ενημερώθηκε

Νέο: εξωτερική αποσφαλμάτωση και φόρτωση κώδικα

Εργαστείτε στο VS Code (ή σε οποιονδήποτε άλλο επεξεργαστή) και αφήστε τον εξομοιωτή να παρακολουθεί το build σας. Τα πάντα είναι απενεργοποιημένα μέχρι να τα ενεργοποιήσετε από το Settings → External debugging ή από τη γραμμή εντολών. Οι διακομιστές ακούν μόνο στο 127.0.0.1.

  • GDB server (--gdb, θύρα 12000) για το mame remote του DeZog: αποσφαλμάτωση σε επίπεδο πηγαίου κώδικα με σημεία διακοπής (breakpoints - και υπό όρους), step into/over/out, παύση και συνέχεια, watchpoints, καθώς και προβολή και επεξεργασία μνήμης και καταχωρητών. Τα σημεία διακοπής του DeZog εμφανίζονται επίσης στο παράθυρο Debugger του εξομοιωτή. Λειτουργούν και απλοί πελάτες gdb, μαζί με τις εντολές monitor του MAME.
  • Command API (--api, θύρα 6128) και το νέο πρόγραμμα cpcse-ctl δίπλα στο cpcse.exe, για build scripts. Μπορεί να φορτώσει ένα αρχείο .bin, .dsk, .sna, .cpr ή κασέτα και να το εκτελέσει, να πληκτρολογήσει στο πληκτρολόγιο, να πατήσει πλήκτρα, να διαβάσει και να γράψει στη μνήμη και στους καταχωρητές, να ορίσει σημεία διακοπής και watchpoints, να κάνει αποσυναρμολόγηση (disassemble), step, αναμονή για τερματισμό και λήψη στιγμιότυπων οθόνης σε μορφή PNG ή BMP. Τα αιτήματα είναι μίας γραμμής το καθένα, ως JSON ή σε σύντομη μορφή (cpcse-ctl load build/game.bin 0x4000 entry).
  • Auto-reload (--watch): το αποτέλεσμα του build σας επαναφορτώνεται και επανεκκινείται κάθε φορά που αλλάζει. Αυτό λειτουργεί για αρχεία .bin ή .dsk με μια εντολή πληκτρολογημένη μετά από αυτό.
  • Νέες επιλογές γραμμής εντολών: --gdb[=port], --api[=port], --load file[@addr], --watch file[@addr], --run entry|addr, --reset, --command "RUN\"GAME\n" και --symbols file. Τα σύμβολα μπορούν να προέρχονται από αρχεία RASM, sjasmplus, pasmo ή WinAPE, ή λίστες EQU, και οι διευθύνσεις μπορούν να δοθούν ως ετικέτες (labels).
  • Τεκμηρίωση: Το docs/external-debugging.md περιλαμβάνει ένα launch.json για το DeZog, ένα VS Code build task, καθώς και κάθε επιλογή και εντολή.

Νέο: κασετόφωνο

Στο παράθυρο Media, Media → Tape και Debug → Chips → Tape:

  • ένας μετρητής κασέτας με κουμπί μηδενισμού
  • η χρονική θέση της κασέτας, και σε ποιο block βρίσκεται από το σύνολο
  • επιστροφή στην αρχή, πίσω ένα block, αναπαραγωγή, παύση, διακοπή, γρήγορη προώθηση, εξαγωγή
  • μια λίστα με τα blocks της κασέτας για γρήγορη μετάβαση
  • μια φωτεινή ένδειξη MOTOR

Νέο: επισήμανση σύνταξης συμβολομεταφραστή (assembler)

Ο επεξεργαστής του συμβολομεταφραστή χρωματίζει κάθε μέρος του κώδικα με το δικό του χρώμα: εντολές, καταχωρητές και συνθήκες, οδηγίες (directives), αριθμούς, συμβολοσειρές (strings), σχόλια, ορισμούς ετικετών και τις ετικέτες που χρησιμοποιούν. Το Colours… σας επιτρέπει να αλλάξετε κάθε χρώμα ή να απενεργοποιήσετε τον χρωματισμό, και η επιλογή σας αποθηκεύεται.

Νέο: Εξαγωγή (Eject) για ROM cartridges και snapshots

Τα cartridges και τα snapshots διαθέτουν πλέον κουμπί Eject στο παράθυρο Media και στο μενού Media, όπως οι δίσκοι και οι κασέτες. Η εξαγωγή επανεκκινεί το ίδιο μηχάνημα χωρίς αυτά. Η ενότητα Snapshot δείχνει ποιο snapshot είναι φορτωμένο.

Νέο: παράθυρα που προσαρμόζονται όταν είναι στενά

Οι σειρές κουμπιών, οι γραμμές εργαλείων και το κείμενο πλέον προσαρμόζονται (wrap) στο πλάτος του παραθύρου σε κάθε παράθυρο, ώστε ένα στενό ή καθηλωμένο (docked) παράθυρο να εμφανίζει τα πάντα αντί να τα κόβει. Αυτό καλύπτει τα παράθυρα Machine, Media, Settings, debugger, Chips, Memory, GFX9000, DSK editor, assembler, CSL και εκτυπωτή.

Νέο: εικόνα VRAM του GFX9000 όπως την εμφανίζει η οθόνη

Το Debug → GFX9000 → VRAM image χρωματίζει τώρα τη VRAM όπως ακριβώς η εικόνα: κάθε επίπεδο (layer) χρησιμοποιεί τη δική του μετατόπιση παλέτας (palette offset), τα μοτίβα των sprites χρησιμοποιούν την παλέτα του sprite τους, και τα διαφανή σημεία δείχνουν το χρώμα του φόντου (backdrop). Στο P1, τα επίπεδα A και B εμφανίζονται δίπλα-δίπλα, και περνώντας τον κέρσορα πάνω από ένα σημείο φαίνεται σε ποιο επίπεδο ανήκει.

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

gdb server

:heart_eyes:

Το είχα αναφέρει αυτό στο παλιό φόρουμ. Επιτρέπει σε υπάρχοντα debugging clients να κάνουν debug σε προγράμματα CPC.

Πω πω, δεν έχω χρόνο για δοκιμές τώρα. :sleepy_face:

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

Σε νιώθω, το άλλο μεγάλο μου project είναι επίσης σε SDL2/Imgui/OpenGL και παρόλο που γράφω κώδικα σε Linux και κάνω cross-compile σε ένα VM για Windows για τις κυκλοφορίες, τελικά αποδέχτηκα ένα PR για υποστήριξη MacOS. Το imgui πάντως είναι απίστευτο πράγμα, εξαιρετικό λογισμικό.

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

Usually, I find that I don’t need to put in any extra effort to support both Mac and Linux simultaneously.

It’s Windows that usually gives me a headache because Microsoft can’t follow a single standard and insists on doing things their own way…

That being said, I managed to compile CPCSyntaxError on my M1, but it crashes at startup with this error:

Failed to initialize OpenGL loader!
Assertion failed: (bd != nullptr && “Context or backend not initialized! Did you call ImGui_ImplOpenGL3_Init()?”), function ImGui_ImplOpenGL3_NewFrame, file imgui_impl_opengl3.cpp, line 333.

I’ll keep trying to get it working.

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

Στο macOS λαμβάνεις ένα σύγχρονο OpenGL context μόνο αν ζητήσεις ρητά ένα 3.2+ Core Profile, συμβατό με το μέλλον (forward-compatible). Ο κώδικας ζητάει απλό 3.0 με GLSL #version 130, οπότε το macOS επιστρέφει ένα παλαιού τύπου (legacy) 2.1 context, ο OpenGL loader του ImGui το απορρίπτει και ακολουθεί το assert.

Ενημερώνω τον κώδικα τώρα.. βρήκα μερικά ακόμη ζητήματα που θα δημιουργούσαν προβλήματα και στο macos.. οπότε τα διορθώνω.. η επόμενη έκδοση «θα πρέπει» να επιτρέπει την εκτέλεσή του σε mac.. και θα είναι η τελευταία ενημέρωση μέχρι το επόμενο Σαββατοκύριακο!

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

v0.3.1: εκτελείται σε macOS (Apple silicon και Intel)

Νέο: macOS

Το CPCSyntaxError πλέον δημιουργείται (build) και εκτελείται σε Mac, τόσο σε Apple silicon (M1 και μεταγενέστερα) όσο και σε Intel. Η δημιουργία ενός χρήστη ολοκληρώθηκε με επιτυχία, αλλά στη συνέχεια σταμάτησε κατά την εκκίνηση με το μήνυμα «Failed to initialize OpenGL loader!». Το macOS παρέχει σύγχρονο OpenGL μόνο σε προγράμματα που ζητούν περιβάλλον 3.2 Core Profile, και ο εξομοιωτής πλέον ζητά ένα τέτοιο. Το README περιλαμβάνει μια νέα ενότητα Building from source → macOS:

xcode-select --install
brew install cmake ninja sdl2
cmake -S . -B build -G Ninja
cmake --build build
./build/cpcse

Άλλα στοιχεία που λειτουργούν πλέον σε Mac:

  • Παράθυρο σεναρίων CSL: εκτελεί σενάρια (εντοπίζει το δικό του αρχείο προγράμματος χωρίς το /proc του Linux).
  • «Άνοιγμα φακέλου στιγμιοτύπων οθόνης»: χρησιμοποιεί την εντολή open.
  • Διακομιστής GDB και API εντολών: ένας αποσφάλματος (debugger) που αποσυνδέεται κατά τη διάρκεια μιας απάντησης δεν τερματίζει πλέον το πρόγραμμα.

Εάν το πρόγραμμα οδήγησης γραφικών ενός υπολογιστή δεν μπορεί να παράσχει καθόλου OpenGL 3, το πρόγραμμα πλέον το εξηγεί αυτό σε ένα πλαίσιο μηνύματος αντί να διακόπτει τη λειτουργία του με ένα σφάλμα ισχυρισμού (assert).

Τα Windows και το Linux παραμένουν αμετάβλητα.

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

Tώρα λειτουργεί!

Ευχαριστώ πολύ!

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

Α, αυτό εξηγεί γιατί στο δικό μου παρόμοιο έργο Imgui, το PR για την υποστήριξη MacOS που έλαβα αναβάθμισε το απαιτούμενο OpenGL στο 4 σε αυτήν την πλατφόρμα.

(Χρησιμοποιούσα κι εγώ το 3/#130 από προεπιλογή)

Νέα έκδοση ανέβηκε… οι τρέχουσες συσκευές επέκτασης ολοκληρώθηκαν (χωρίς όμως web interface στο M4).. ενημερώστε με αν βρείτε κάποιο πρόβλημα… ή αν θα θέλατε να δείτε προστιθέμενο κάτι συγκεκριμένο…

v0.4.0: M4 WiFi, η μονάδα IDE/CF του SYMBiFACE, η ομιλία Epson και DECtalk του LambdaSpeak 3

Νέο: το WiFi της κάρτας M4

Το WiFi του M4 είναι πλέον η σύνδεση ίντερνετ του υπολογιστή σας.

  • Sockets: Τα προγράμματα του CPC ανοίγουν συνδέσεις TCP, αναζητούν ονόματα κεντρικών υπολογιστών (host names) και τρέχουν τους δικούς τους διακομιστές. Τα παραδείγματα TCP και telnet του Duke λειτουργούν· ο πελάτης telnet συνδέεται στο telehack.com.
  • Λήψεις: Η εντολή |HTTPGET αποθηκεύει ένα αρχείο από το διαδίκτυο στην κάρτα του M4, με τις μορφές @ (ήσυχη) και >όνομα (αποθήκευση ως), το όνομα αρχείου του ίδιου του διακομιστή, καθώς και ανακατευθύνσεις. Η εντολή |HTTPMEM πραγματοποιεί λήψη στη μνήμη, συμπεριλαμβανομένου του offset=. Μόνο απλό HTTP, όπως και στην πραγματική κάρτα.
  • Κατάσταση: Η εντολή |NETSTAT εμφανίζει τη διεύθυνση του υπολογιστή σας, οι εντολές |NETSET και |WIFI λειτουργούν, και η υπηρεσία δικτύου M4 του SymbOS διαθέτει τη διεπαφή socket της κάρτας για επικοινωνία.
  • Ρυθμίσεις: στο Επεκτάσεις → Κάρτα M4:
    • Η επιλογή WiFi: το δίκτυο του PC είναι ενεργοποιημένη από προεπιλογή.
    • Η επιλογή Διακομιστές: αποδοχή άλλων υπολογιστών είναι απενεργοποιημένη από προεπιλογή, ώστε ένα πρόγραμμα διακομιστή του CPC να είναι προσβάσιμο μόνο από τον δικό σας υπολογιστή.

Νέο: η μονάδα IDE/CF των SYMBiFACE II / III

Και οι δύο κάρτες Symbiface διαθέτουν πλέον τη διεπαφή IDE/CF.

  • Η μονάδα δίσκου είναι ένας φάκελος: ο symide δίπλα στο cpcse.exe, ο οποίος δημιουργείται την πρώτη φορά, ή οποιοσδήποτε φάκελος επιλέξετε στο Επεκτάσεις → Symbiface.
  • Τι βλέπει το SymbOS: ένα partition FAT16, συμπεριλαμβανομένων των μεγάλων ονομάτων αρχείων. Τα προβάλλει, τα διαβάζει και τα εγγράφει, και οι αλλαγές του μεταφέρονται πίσω στον φάκελο.
  • Γραμμή εντολών: --ide <φάκελος>, --sf3, και --xrom <slot>=<αρχείο>, το οποίο προσαρμόζει μια ROM επέκτασης, όπως η έκδοση ROM του SymbOS.

Νέο: η ομιλία Epson και DECtalk του LambdaSpeak 3

Το LambdaSpeak 3 κάνει πλέον ό,τι κάνει και η ίδια η κάρτα.

  • Τα bytes ελέγχου του, με τις ακριβείς τιμές ετοιμότητας που τοποθετεί κάθε λειτουργία στο δίαυλο (bus).
  • Getters για την ένταση, τη φωνή, την ταχύτητα (rate), την έκδοση, τη λειτουργία και το ρολόι.
  • Φωνητικές επιβεβαιώσεις, όπως «Native Epson mode.».
  • Ομιλία αποκλεισμού (blocking speech) που κρατάει τον Z80 μέχρι να ολοκληρωθεί μια πρόταση· το &DF τη σταματά.
  • Το κείμενο Epson και DECtalk εκφωνείται με τις φωνές του δικού σας υπολογιστή: τις φωνές ομιλίας των Windows, το say στο macOS, το espeak-ng στο Linux. Το υλικολογισμικό (firmware) DECtalk του τσιπ της Epson δεν είναι δημόσια διαθέσιμο, οπότε ακούγεται σαν το PC σας και όχι σαν DECtalk.
  • Εντολές εντός κειμένου: οι αλλαγές φωνής του αναλυτή (parser) της Epson, ψίθυρος, τονικό ύψος και ταχύτητα, καθώς και οι φωνές τύπου [:np] του DECtalk, [:rate], [:dv ap] και συμβολοσειρές φωνημάτων.
  • Δοκιμασμένο με το λογισμικό του ίδιου του LambdaSpeak: τα ENGLISH.BAS, WELCOME.BAS και MP3.BAS από το LS300.DSK, καθώς και το MP3-PLAY.BAS του TFM με τη δική του RSX ROM, εκτελούνται όλα κανονικά.
4 «Μου αρέσει»

έχω μια νέα ενημέρωση με ορισμένες νέες δυνατότητες και μερικές διορθώσεις παρασκηνιακά…

v0.5.0: cheats με οδηγό βήμα-βήμα, εγγραφή κασέτας και turbo φορτώσεις, δίσκοι HFE και IPF, ένας οδηγός δίσκου πραγματικού χρόνου

Νέο: Cheats, με οδηγό βήμα-βήμα

Εργαλεία → Cheats (POKE finder): βρίσκει πού διατηρεί ένα παιχνίδι τις ζωές, τα πυρομαχικά, τον χρόνο ή την ενέργειά του και τα «κλειδώνει» εκεί.

  • Ο οδηγός ρωτάει μόνο όσα μπορείς να δεις. Διάλεξε «έναν αριθμό στην οθόνη», πες τι γράφει, παίξε μέχρι να αλλάξει και πες το ξανά. Δύο ή τρεις γύροι συνήθως αφήνουν μία ή δύο πιθανές θέσεις.
  • Λειτουργεί και με μπάρες/μετρητές. Για ενέργεια ή καύσιμα χωρίς αριθμό, πες του αν η μπάρα κατέβηκε, ανέβηκε ή έμεινε η ίδια.
  • Μετά το δοκιμάζει. «Κλειδώνει» τον αριθμό στην τιμή που επιλέγεις και ρωτάει αν παρέμεινε σταθερός. Αν όχι, δοκιμάζει τις θέσεις μία προς μία.
  • Δεν χρειάζεται να γνωρίζει πώς αποθηκεύει το παιχνίδι τον αριθμό. Ψάχνει με όλους τους τρόπους ταυτόχρονα: ως έχει, ως μείον ένα (ζωές που μετρούν από το 0) και ως BCD (σύνηθες για σκορ και ζωές). Η αναζήτηση καλύπτει όλη τη RAM, συμπεριλαμβανομένων των 128K banks.
  • Καρτέλα αναζήτησης: ο ίδιος εντοπιστής χειροκίνητα, 8 ή 16 bit, με δυνατότητα αναιρέσεων.
  • POKEs από περιοδικό: πληκτρολόγησέ τα (POKE &1234,0, περισσότερα από ένα ανά γραμμή).
  • Αποθήκευση μαζί με το παιχνίδι: τα cheats ενός παιχνιδιού διατηρούνται δίπλα του ως <game>.pok και φορτώνονται (απενεργοποιημένα) όποτε φορτώνει το παιχνίδι.

Νέο: εγγραφή κασέτας και turbo φόρτωση

  • Rec στο κασετόφωνο: εγγράφει όσα σώζει (SAVE) ο CPC, από το σημείο που βρίσκεται η κασέτα ή σε μια Νέα κενή κασέτα. Η Αποθήκευση κασέτας ως τα εγγράφει σε ένα αρχείο .cdt.
  • Τυπικά blocks: η μορφή του ίδιου του firmware γίνεται τυπικά turbo blocks (TZX &11), μικρά σε μέγεθος και αναγνώσιμα από άλλους εξομοιωτές. Οτιδήποτε άλλο διατηρείται ως ωμό σήμα (raw signal).
  • Turbo: ένα κουμπί και ένα ρυθμιστικό στο κασετόφωνο, έως και 20× ή απεριόριστο. Όσο κινείται η κασέτα, ολόκληρος ο CPC τρέχει ταχύτερα, οπότε κάθε loader, συμπεριλαμβανομένων των προστατευμένων, λειτουργεί όπως πάντα.
  • Επανεγγραφή στο αρχείο: με ενεργοποιημένο το «Αποθήκευση εγγραφών δίσκου και κασέτας στα αρχεία τους», μια εγγραφή που γίνεται σε ένα αρχείο .cdt επιστρέφει μέσα στο αρχείο του.
  • Γραμμή εντολών: το --record-tape out.cdt πραγματοποιεί εγγραφή σε μια κενή κασέτα σε εκτελέσεις headless.

Νέο: δίσκοι HFE και IPF, και αποθήκευση αλλαγών στους δίσκους

  • HFE (η μορφή του Gotek): αναγινώσκεται και επανεγγράφεται. Track που δεν άγγιξε ο CPC παραμένουν ανέπαφα bit προς bit.
  • IPF: αναγινώσκεται μέσω της βιβλιοθήκης αποκωδικοποιητή SPS (μη εμπορική άδεια). Τα πρωτότυπα IPF διαθέτουν προστασία εγγραφής.
  • Αποθήκευση αλλαγών: όσα εγγράφει ένα πρόγραμμα σε έναν δίσκο επιστρέφουν στο αρχείο εικόνας του, στη δική του μορφή (Μέσα → «Αποθήκευση εγγραφών δίσκου και κασέτας στα αρχεία τους»). Το --disk-writeback κάνει το ίδιο σε εκτελέσεις headless.

Νέο: ο οδηγός δίσκου σε πραγματικό χρόνο

  • Ο δίσκος περιστρέφεται: 300 rpm κάτω από κεφαλή 250 kbit/s. Τα bytes ενός τομέα (sector) λαμβάνονται καθώς αυτός προσπερνά. Οι εικόνες HFE και IPF χρησιμοποιούν τις θέσεις τομέων από τη δική τους ροή bit (bitstream).
  • Χρονισμός: τα seeks απαιτούν τον ρυθμό βήματος (step rate) που ορίζει το πρόγραμμα, και ο οδηγός είναι έτοιμος μόνο όταν ο δίσκος φτάσει την απαιτούμενη ταχύτητα.
  • Αργά προγράμματα: ένα πρόγραμμα που είναι πολύ αργό για τα bytes εμφανίζει overrun, όπως ακριβώς σε έναν πραγματικό CPC.

Νέο: Multiface II, κάρτα RS232C, εικόνες DSK στο M4

  • Multiface II: το F10 είναι το κουμπί STOP· το μενού, η αποθήκευση και η επαναφόρτωσή του λειτουργούν. Η ROM του δεν περιλαμβάνεται: τοποθέτησε ένα αρχείο με τη λέξη “multiface” στο όνομά του στον φάκελο roms/.
  • Σειριακή διεπαφή RS232C (της Amstrad και της Pace):
    • Η γραμμή της οδηγεί σε: μια θύρα TCP όπου συνδέονται άλλα προγράμματα (telnet localhost 2323), μια εξωτερική σύνδεση (ένα BBS, έναν διακομιστή telnet), μία από τις σειριακές θύρες του PC σου ή ένα βύσμα ανακύκλωσης (loopback plug).
    • Ρυθμίσεις: κάτω από τις Επεκτάσεις, ή με το --serial.
    • Η ROM της δεν περιλαμβάνεται: τοποθέτησέ την σε μια υποδοχή ROM (ROM slot).
  • M4 board: οι εικόνες DSK στην κάρτα του ανοίγουν ως φάκελοι, όπως στην πραγματική πλακέτα. Με |CD,"game.dsk", και μετά CAT, LOAD και RUN, διαβάζονται τα αρχεία στο εσωτερικό του.
5 «Μου αρέσει»

Εντυπωσιακός αριθμός δυνατοτήτων Brocky, είναι διαθέσιμος κάπου ο πηγαίος κώδικας; Δεν θυμάμαι να είδα πληροφορίες για κάποιο αποθετήριο. EDIT: Είμαι σίγουρα τυφλός! Το βρήκα :grin:

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