Εφαρμογές σε 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 από την εκτέλεση του προγράμματος.

το πρόγραμμα συνεχίζει να εκτελείται μετά από το reset..

















Ο κώδικας της εφαρμογής είναι ο παρακάτω :
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 του προγράμματος φαίνεται στην παρακάτω εικόνα :


το πρόγραμμα εκτελείται εμφανίζοντας τα περιεχόμενα της σελίδας μνήμης 0

















Ο κώδικας του προγράμματος φαίνεται παρακάτω :
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.