desktop version 7:39 A.M. | Ξ ΞΞΌΟΟΞ·, 10 ΞΟΟιλίοΟ
2025 |
Εφαρμογές σε assembly για τον επεξεργαστή 6510Γράφοντας σε assembly για τον commodore 64 ξεκλειδώνεις πολλές δυνατότητες του υπολογιστή, οι οποίες δεν είναι προσβάσιμες από την basic. Πολύ καλά demo και εφαρμογές μπορούν να γραφτούν σε γλώσσα μηχανής. Για να γίνει αυτό χρειάζεται ένα πρόγραμμα monitor (όπως είναι το hesmon64 ή αυτό που περιλαμβάνεται στο final cartridge, ή οποιοδήποτε άλλο διαθέσιμο). Αν δεν θέλετε να χρησιμοποιήσετε το commodore σας για να γράψετε τα προγράμματά σας μπορείτε εναλλακτικά να επιλέξετε ένα περιβάλλον ανάπτυξης εφαρμογών crossplatform όπως είναι το CBM program studio ή άλλους μεταγλωτιστές όπως είναι ο dasm. Κατά την ενασχόλησή μου με την κατασκευή cartridge, έμαθα για τον μηχανισμό με τον οποίο εκιννεί ένα πρόγραμμα στο cartridge όταν ανοίγουμε τον διακόπτη. Το λειτουργικό σύστημα κατά την εκκίνηση κοιτάει στις θέσεις μνήμης $8004 -$8008. Εάν σε αυτές είναι αποθηκευμένο το διάνυσμα CBM80 σε κώδικα PETSCII, τότε ξεκινάει η εκτέλεση του προγράμματος από την διεύθυνση η οποία είναι αποθηκευμένη στις θέσεις μνήμης $8000 -$8001 (το λιγότερο σημαντικό byte στην θέση $8000). Αν στον υπολογιστή έχει συνδεθεί ένα cartridge 16Kb τότε τα δεδομένα σε αυτή την θέση μνήμης βρίσκονται στην μνήμη rom του cartridge. Ωστόσο δεν είναι απαραίτητο τα δεδομένα να βρίσκονται στην εξωτερική μνήμη rom. Ο ίδιος μηχανισμός μπορεί να χρησιμοποιηθεί από ένα πρόγραμμα το οποίο φορτώνεται στην μνήμη από δισκέτα ή από κασσέτα. Έγραψα λοιπόν ένα μικρό πρόγραμμα σε γλώσσα μηχανής το οποίο όταν φορτώνεται τοποθετεί στην θέση μνήμης $8004 -$8008 το διάνυσμα για την εκτέλεση του προγράμματος. Έτσι μετά από ένα reset στον υπολογιστή το πρόγραμμα "παίρνει την σκητάλη" του έλεγχου από το λειτουργικό και εκτελείται ξανά, εφόσον κατά την διαδικασία του reset τα δεδομένα στην μνήμα παραμένουν άθικτα. Το πρόγραμμα αυτό δεν κάτι τίποτα άλλο από το να εμφανίζει στο περιθώριο της γνωστές γραμμές φόρτωσης. Μετά από ένα reset το πρόγραμμα επανεκτελείται. Στην παρακάτω εικόνα φαίνεται ένα screenshot από την εκτέλεση του προγράμματος.![]() Ο κώδικας της εφαρμογής είναι ο παρακάτω : |
INIT *=$8009 ; KERNAL START ROUTINES STX $D016 JSR $FDA3 JSR $FD50 JSR $FD15 JSR $FF5B CLI JSR $E453 JSR $E3BF JSR $E422 LDX #$FB TXS ; WRITE PROGRAM START VECTOR TO $8000 -$8003 LDA #$09 STA $8000 LDA #$80 STA $8001 LDA #$25 STA $8002 LDA #$80 STA $8003 ; REM CBM80 AUTOSTART LDA #$C3 STA $8004 LDA #$C2 STA $8005 LDA #$CD STA $8006 LDA #$38 STA $8007 LDA #$30 STA $8008 ; CREATE LOADING LINES LOOP INC $D020 JMP LOOP BRK |
Μπορείτε να κατεβάσετε το πρόγραμμα και να το τρέξετε είτε σε δισκέτα ή κασέτα, σε μορφή
prg
Για να τρέξετε το πρόγραμμα δώστε στην γραμμή εντολών SYS 32805. |
Διαβάζοντας το καταπληκτικό βιβλίο του Jim Butterfield, Machine language for the commodore 64
and other commodore computers, έπεσα σε ένα προτεινόμενο porject από τον συγγραφέα. Έκατσα λοιπόν
και έγραψα ένα μικρό προγραμματάκι το οποίο όταν ενεργοποιείται εμφανίζει τα περιεχόμενα μνήμης της
μηδενικής σελίδας (zero page) δηλαδή της περιοχή μνήμης $0000 -$00FF.
Επειδή στην περιοχή αυτή υπάρχουν timers και άλλοι καταχωρητές που αλλάζει συνεχώς το περιεχόμενό τους
το αποτέλεσμα είναι ιδιαίτερα ενδιαφέρον. Επίσης κατά την διάρκεια που πληκτρολογείτε τα περιεχόμενα
κάποιων θέσεων μνήμης αλλάζουν. Πειραματηστείτε για να δείτε το αποτέλεσμα !!
Ένα screenshot του προγράμματος φαίνεται στην παρακάτω εικόνα : ![]() Ο κώδικας του προγράμματος φαίνεται παρακάτω : |
INIT *=$033C ; display zero page contents LDX #$00 LOOP LDA $00,X STA $0400,X INX CPX #$FF BCC LOOP JMP ($03A0) LDA $0314 STA $03A0 LDA $0315 STA $03A1 SEI LDA #$3C STA $0314 LDA #$03 STA $0315 CLI RTS SEI LDA $03A0 STA $0314 LDA $03A1 STA $0315 CLI RTS |
Μπορείτε να κατεβάσετε το πρόγραμμα και να το τρέξετε είτε σε δισκέτα ή κασέτα, σε μορφή prg Αφού φορτώσετε το πρόγραμμα για να το ενεργοποιείσετε την εμφάνιση της μηδενικής σελίδας μνήμης θα πρέπει να δώσετε την εντολή SYS 843, ενώ για να απενεργοποιείσετε την εμφάνιση SYS 868. |