Zilog Z80
Ο Ζ80 είναι μικροεπεξεργαστής (CPU) 8-bit που σχεδιάστηκε από την εταιρεία ημιαγωγών Zilog και κυκλοφόρησε τον Ιούλιο του 1976. Είχε ευρεία χρήση σε ηλεκτρονικούς υπολογιστές για στρατιωτικές χρήσεις. Ο Z80 και οι κλώνοι του μαζί με την τεχνολογία της οικογένειας επεξεργαστών 6502 είχαν την πιο εμφανή παρουσία στην αγορά των 8-bit μικροϋπολογιστών από τα τέλη της δεκαετίας του ’70 μέχρι τα μέσα της δεκαετίας του ’80. Ο χρονισμός έφτανε στα 2,5 MHz στον απλό και 4Mhz στον Z80A. Ο Z80 αντιγράφηκε κατά κόρον, χωρίς άδεια από τη Zilog, από πολλούς κατασκευαστές από την ανατολική Ευρώπη και τη Ρωσία.
Ιστορία
Οι Federico Faggin και ο Ralph Ungermann ήταν οι ιδρυτές της Zilog και στυλοβάτες του πλάνου για την κατασκευή του Z80 και την εμφάνιση του στην αγορά τον Ιούλιο του 1976. It was designed to be binary compatible with the Intel 8080 Ο πρώτος εκ των δύο ήταν πρώην στέλεχος της Intel και συμμετείχε στο σχεδιασμό της Κεντρικής Μονάδας Επεξεργασίας 8080 της εν λόγω εταιρείας. Ο Z80 ήταν σχεδιασμένος να είναι ψηφιακά συμβατός με τον Intel 8080, κυρίως επειδή έτσι θα εξασφάλιζε συμβατότητα με το δημοφιλέστατο εκείνη την εποχή λειτουργικό σύστημα CP/M. Επίσης ο Masatoshi Shima πρώην συνσχεδιαστής των επεξεργαστών της Intel 4004 και 8080 βοήθησε σημαντικά στην ανάπτυξη του Z80. Οι δυνατότητες του επεξεργαστή της Zilog ήταν υπερσύνολο των δυνατοτήτων του 8080.
Τεχνικά χαρακτηριστικά
Η αρτηρία δεδομένων (data bus) του Z80 είναι των 8-bits και ο δίαυλος διευθύνσεων (address bus) είναι των 16-bits, η τελευταία δηλαδή μπορεί να διευθυνσιοδοτήσει 2^16 bits (64Kb). Οι καταχωρητές είναι οι B, C, D, E, H και L και οι συμμετρικοί B’, C’, D’, E’, H’ και L’. Έχει επίσης δύο συσσωρευτές (accumulators) που ονομάζονται A και A’ και δύο καταχωρητές δεικτών καταστάσεως (status flags), τους F και F’. Σε μια τυπική εφαρμογή, οι κανονικοί καταχωρητές χρησιμοποιούνται για τις διαδικασίες του κύριου προγράμματος, ενώ οι τονούμενοι καταχωρητές χρησιμοποιούνται για το χειρισμό διακοπών (interrupts). Οι τονούμενοι καταχωρητές μπορούν να γίνουν προσιτοί με μια σειρά εντολών ανταλλαγής (exchange) που ανταλλάσσουν τα περιεχόμενα ενός ζεύγους καταχωρητών με το αντίστοιχο τονούμενο ζεύγος. Επίσης υπάρχουν οι καταχωρητές απαριθμητή προγράμματος CP (counter program) και δείκτης σωρού SP (stack pointer). Η λειτουργία του stack είναι τύπου LIFO (Last Input First Output) δηλαδή η τελευταία εντολή είναι αυτή που εξέρχεται πρώτη. Δύο καταχωρητές ειδικής χρήσεως είναι οι καταχωρητές αρχείου (Index registers) IX και IY. Ο καθένας από αυτούς είναι των 16bits και δίνει την επιπλέον δυνατότητα να απευθύνεται κανείς σε αρχείο. Δύο ακόμη ειδικοί καταχωρητές είναι ο I (interrupt vector register) των 8bits που συγκρατεί το byte υψηλής τάξεως μιας διανυσματικής διευθύνσεως και χρησιμοποιείται σε μια διανυσματική διακοπή και ο καταχωρητής ανανεώσεως της μνήμης R.
Οι λειτουργίες του Z80
Οι λειτουργίες του Z80 μαζί με το εύρος λειτουργίας τους, όπου αυτό χρειάζεται, συνοψίζονται παρακάτω :
- Αριθμητικές και λογικές λειτουργίες 8-bit
- Αριθμητικές λειτουργίες 16-bit
- Φόρτωση 8-bit
- Φόρτωση 16-bit
- Έλεγχος και μηδενισμός bit
- Κλήση, επιστροφή και επανεκκίνηση
- Αλλαγή, μεταφορά και εύρεση
- Γενικής χρήσης αριθμητική και έλεγχος της Κεντρικής Μονάδας Επεξεργασίας (CPU)
- Είσοδος και έξοδος
- Άλμα (Jump)
- Περιστροφή και Αλλαγή
Χρήση σε υπολογιστές και εξομοιωτές
Από το 1976 ώς το 1990 ο Ζ80 χρησιμοποιήθηκε σε περίπου 200 ηλεκτρονικούς υπολογιστές, όλων των τύπων και ειδών. Ενδεικτική λίστα παρακάτω:
- Osborne στα μοντέλα Vixen, Osborne 1 και Executive.
- Kaypro στα μοντέλα Robie, Kaypro 1, II, 2X, 4, 10.
- Radio Shack στα μοντέλα TRS-80, Model II και Model III.
- Commodore στο μοντέλο Commodore 128.
- Sinclair Research στα μοντέλα ZX80, ZX81, ZX Spectrum, ZX Spectrum +
- Amstrad σε όλη τη σειρά Amstrad CPC, στα μοντέλα Spectrum +2, Spectrum +3 και σε όλη τη σειρά PCW
Πηγές
- Εισαγωγή στους μικροεπεξεργαστές και στον προγραμματισμό τους, ΤΟΥ ΝΙΚΟΛΑΟΥ ΒΟΥΛΓΑΡΗ (ΞΑΝΘΗ 1985) – Εκδόσεις: N.ΑΙΒΑΖΗΣ-Σ. ΖΟΥΜΠΟΥΛΗΣ.
Προγραμματα Ζ8O (asm)
Our system is just a heap of silicon unless it has some code to run. I don’t think the hardware is quite at the point of running an operating system like CP/M yet, but that doesn’t mean we can’t do anything. We can hit the assembly and build up some code in our ROM chip. We can make a ROM monitor.
A ROM monitor is just the code in a ROM chip which runs as soon as the system is turned on. The monitor provides essential functions such as to load RAM or check the hardware before running the operating system. In our case I have not quite ironed out what those will be. For this very preliminary monitor code I wanted to have some basic functions that will be useful later (as I learn more assembly). They are as follows,
ZMC80 Monitor Command List ? - view command list R - monitor reset C - clear screen D - print $50 bytes from specified location
The first three commands are rather simple just printing messages to the screen or going back to the beginning of the ROM with a “reset”. The memory dump command is a bit more complex however. This command prints $80 bytes from a user specified location. This in itself is a very complex operation since you have to convert characters to hex and back to characters. This was a bit of a challenge which started to produce a very cumbersome file. So the monitor is broken up into four files,
Z80Monitor.asm UARTDriver.asm MONCommands.asm CONIO.asm
The routines in these four files are specific to certain tasks. Such as ‘UARTDriver.asm’, which contains routines for the 16550 UART chip. These functions are abstracted later as in the PRINT_STRING routine which just calls the UART_PRNT_STR routine. This level of abstraction is meant for instances such as if I switch later from using the UART to print to the terminal and instead print to a another medium I can implement a driver file for that medium without having to overhaul a lot of other routines that reference PRINT_STRING and not UART_PRNT_STR. This technique is implemented in a few places in the code, but I am sure it could be a lot more efficient. As I develop the monitor I may shuffle some routines around.
I hope to optimize the code as I write the routines for the monitor. I am not great at assembly, but I am learning. I have a bit of style/structure to the code that makes it more readable than most of the Z80 assembly code I have seen online. I will maintain this style for all of the code … hopefully.
None of the hardware has changed so only code this time around.
http://www.z80.gr/downloads/master.zip