Πίνακας περιεχομένων:

Z80-mbc2 Z80 Code Flash LED χρήστη: 3 βήματα
Z80-mbc2 Z80 Code Flash LED χρήστη: 3 βήματα

Βίντεο: Z80-mbc2 Z80 Code Flash LED χρήστη: 3 βήματα

Βίντεο: Z80-mbc2 Z80 Code Flash LED χρήστη: 3 βήματα
Βίντεο: Z80-MBC2 Flashing LED Clock 2024, Νοέμβριος
Anonim
Z80-mbc2 Z80 Code Flash LED χρήστη
Z80-mbc2 Z80 Code Flash LED χρήστη

Αυτό είναι ένα παράδειγμα προγράμματος LED χρήστη γραμμένο σε Z80 assembler για τον υπολογιστή z80-mbc2.

Έκανα μια δοκιμαστική και αναθεωρητική άσκηση για μένα, αυτό είναι το πρώτο μου πρόγραμμα Z80 για πάνω από 35 χρόνια.

Απολαμβάνω

Προμήθειες

Υπολογιστής Z80-mbc2

Αντίγραφο του Z80ASM από το SLR Systems Rel. 1.32, με δυνατότητα λήψης από πολλά αρχεία cp/m

Επεξεργαστής, χρησιμοποίησα το ZDE16, επειδή ήταν ήδη στην εικόνα εκκίνησης CP/M για το z80-mbc2

Βήμα 1: Εγκαταστήστε το Z80asm στο Z80-mbc2 σας

Εγκαταστήστε το Z80asm στο Z80-mbc2 σας
Εγκαταστήστε το Z80asm στο Z80-mbc2 σας

Υποθέτω ότι έχετε κάποια εξοικείωση με τα εργαλεία που έχετε για το Z80-MBC2 σας, δηλαδή οποιαδήποτε έκδοση cpmtools χρησιμοποιείτε. Ακολουθούν τα βήματα εάν χρησιμοποιείτε τις εκδόσεις της γραμμής εντολών:

  1. Αποκτήστε τα αρχεία z80asm.com και z80asm.doc (προαιρετικά) σε έναν κατάλογο στον κεντρικό υπολογιστή σας
  2. Τοποθετήστε την κάρτα SD στον ίδιο υπολογιστή, υποθέτω παρακάτω ότι εμφανίζεται ως μονάδα δίσκου E: παρακάτω.
  3. Έβαλα το συγκρότημα στο δίσκο CP/M A μου, για cp/m 2.2 που θα ήταν εικόνα δίσκου DS0N00. DSK
  4. Η εντολή: cpmcp -f z80mbc2 -d0 e: DS0N00. DSK z80asm.com 0: θα αντιγράψει το αρχείο z80asm.com στην εικόνα
  5. Η εντολή cpmcp -f z80mbc2 -d0 e: DS0N00. DSK z80asm.doc 0: θα αντιγράψει την τεκμηρίωση στο δίσκο (προαιρετικό)

Όταν κάνετε εκκίνηση cp/m 2.2 στο z80-mbc, θα πρέπει τώρα να έχετε z80asm.com και z80asm.doc (προαιρετικά) στη μονάδα δίσκου A

Βήμα 2: Αντιγράψτε τον πηγαίο κώδικα σε εσάς Z80-mbc2

Συνδεθείτε στο z80-mbc χρησιμοποιώντας το τερματικό σας πρόγραμμα

Προτείνω να χρησιμοποιήσετε έναν μη κατοικημένο δίσκο για να αποθηκεύσετε τον πηγαίο κώδικα, για παράδειγμα f: για να επιλέξετε αυτόν τον τύπο μονάδας δίσκου:

ΦΑ:

μετά από μερικά δευτερόλεπτα θα δείτε την προτροπή F:

τώρα χρησιμοποιήστε το πρόγραμμα zde16 στη μονάδα δίσκου A για να επεξεργαστείτε ένα κενό αρχείο:

a: zde16 myled.z80

Αυτό θα δημιουργήσει ένα αρχείο που ονομάζεται myled.z80 στο δίσκο F:, Σημείωση: το.z80 απαιτείται στο όνομα για να λειτουργήσει το z80asm.

Τώρα αντιγράψτε και επικολλήστε τον παρακάτω κώδικα, ανάλογα με την ταχύτητα του τερματικού σας κ.λπ. ίσως χρειαστεί να αντιγράψετε και να επικολλήσετε σε μικρές ενότητες. Or πληκτρολογήστε το! πάρτε την αίσθηση του 1980 επίσης πίσω.

;

Δοκιμάστε το LED χρήστη και το κλειδί χρήστη. BDOS equ 05h; cp/m BDOS σημείο εισόδου USRLED equ 0; opcode για χειριστήριο LED χρήστη USRKEY ισοδύναμη 80h; opcode για User Switch control DPORT equ 0; DATA port i/o CPORT equ 1; Command port output; org 0100h; ld (estack), sp; διατηρήστε τις υπάρχουσες πληροφορίες για επιστροφή σε cp/m ld sp, στοίβα. ld hl, msg; hello message call _puts lp: ld a, 1; turn on = 1 led led call call, καθυστέρηση και αναμονή για τα κλειδιά jr nz, φινίρισμα? non zero σημαίνει κλειδί/διακόπτης πατημένος xor a; a = 0 καθυστέρηση κλήσης led, καθυστέρηση ή αναμονή για το κλειδί/διακόπτη jr z, lp. Αν μηδέν, χωρίς κλειδί/διακόπτη, πηγαίνετε ξανά. φινίρισμα: xor a; το πλήκτρο ή ο διακόπτης πατήθηκε, έτσι έγινε η κλήση led ld hl, bye; say bye call _puts; display msg HL = ld sp, (estack); αρχική στοίβα ret; επιστροφή σε cp/m; led: ώθηση af; αποθήκευση τιμής led 0 ή 1 ld a, USRLED out (CPORT), a; optcode sent pop af out (DPORT), a; data sent ret? Βρόχος καθυστέρησης που πατά το πλήκτρο ελέγχου στο τερματικό ή την καθυστέρηση κλειδιού χρήστη: ld bc, 00e00h; περίπου 1/2s CPU 8mhz, καθαρός βρόχος εργασίας μαντείας2: dec bc; μετρήστε το βρόχο push bc; αποθηκεύστε regs όταν καλείτε BDOS push de ld c, 6; BDOS raw i/o έλεγχος εάν πατήσατε το πλήκτρο ld e, 0ffh κλήση BDOS pop de; πάρτε τις τιμές μας πίσω από το stack pop bc ή a; ελέγξτε αν πατήσατε το πλήκτρο στο τερματικό ret nz; ναι επιστρέψτε (διατηρεί επίσης τη ρύθμιση σημαίας nz) ld a, USRKEY; Τώρα ελέγξτε το κλειδί χρήστη (CPORT), a; θύρα εντολών σε a, (DPORT); πλήκτρο ανάγνωσης και a, 1; ενδιαφέρεται μόνο για το bit 0 ret nz; επιστροφή εάν το userkey πατήσει ld a, b; ή είναι bc = 0 ή c jr nz, loop2; δεν τελείωσε η καταμέτρηση, πήγαινε ξανά xor a. ρύθμισε τη σημαία z στο 0 ret. δεν επέστρεψες κανένα πλήκτρο πατημένο, τέλος καθυστέρησης. _puts: push bc; αποθηκεύστε τα regs μας έτοιμα για κλήσεις bdos push de nxt: ld a, (hl); get char or a; test if it is 0, end of msg jr z, done; yes so done ld e, a; ρυθμίστε την κλήση στο BDOS για εκτύπωση char ld c, 2 push hl; αποθήκευση κειμένου δείκτη κλήσης BDOS; εκτύπωση pop hl inc hl; επόμενο char jr nxt; συνέχιση: pop de; ? msg db 'Test LED User, any key to exit' db 0ah, 0dh, 0 bye db 'Exit' db 0ah, 0dh, 0 estack dw 0 ds 256 - 2 stack: dw 0

Αποθηκεύστε το αρχείο χρησιμοποιώντας το ESC x. Δείτε τον οδηγό χρήσης του ZDE16 για περισσότερες πληροφορίες, είναι λίγο σαν το wordstar για τις περισσότερες επεξεργασίες, εκτός από τις επιλογές Ctrl-K που διαφέρουν.

Βήμα 3: Μεταγλωττίστε και εκτελέστε το πρόγραμμα

Μόλις έχετε τον πηγαίο κώδικα στο μηχάνημα.

Τύπος:

F>

F> a: z80asm myled/a Z80ASM Copyright (C) 1983-86 by SLR Systems Rel. 1.32 MYLED/A Τέλος αρχείου Pass 1 0 Εντοπίστηκαν σφάλματα. 406 Απόλυτα Bytes. Ανιχνεύθηκαν 16 σύμβολα.

Αυτό θα αναζητήσει το αρχείο myled.z80 και θα παράγει ένα δυαδικό (.com) αρχείο, αυτό σημαίνει την επιλογή /a.

Δείτε το αρχείο z80asm.doc για περισσότερες πληροφορίες.

Για να εκτελέσετε το πρόγραμμα, πληκτρολογήστε:

F> μυλημένος

Δοκιμή LED χρήστη, οποιοδήποτε κλειδί για έξοδο από την έξοδο F>

Πατήστε είτε το κουμπί χρήστη είτε ένα πλήκτρο στο τερματικό για έξοδο.

Εγινε.

Συνιστάται: