Προηγμένοι Μικροεπεξεργαστές Εργαστήριο 5 - Editor
Περιγραφή Υλοποίηση ενός υποτυπώδους editor που θα: Διαβάζει ένα προκαθορισμένο αρχείο Θα το απεικονίζει στην οθόνη Θα κάνει highlight με έναν ελεγχόμενο από το πληκτρολόγιο κέρσορα συγκεκριμένους χαρακτήρες Θα κλείνει όταν πατηθεί το πλήκτρο esc Αυξητικά, θα προσθέσουμε δυνατότητα επεξεργασίας και αποθήκευσης
BIOS services Κάθε ΙΒΜ-PC συμβατό σύστημα παρέχει μία σειρά από χρήσιμες υπηρεσίες μέσω του BIOS Αφορούν χαμηλού επιπέδου χρήση περιφερειακών συσκευών Οθόνη Πληκτρολόγιο Ποντίκι Εκτυπωτής κοκ
DOS services Παράλληλα το DOS παρέχει και αυτό τις δικές του υπηρεσίες που αφορούν: υψηλότερου επιπέδου χρήση περιφερειακών συσκευών υπηρεσίες σχετικές με την διαχείρηση του λειτουργικού συστήματος
BIOS και DOS services Ο μηχανισμός με τον οποίο καλούνται αυτές οι υπηρεσίες είναι τα software interrupts Κυριότερα interrupts: 18h για το BIOS 21h για το DOS Αναλυτική λίστα με τις παρεχόμενες υπηρεσίες μπορείτε να βρείτε στον Brey και εδώ: http://emu8086.comlu.com/assembly_language_tutorial_assembler_reference/8086 http://www.htl-steyr.ac.at/~morg/pcinfo/hardware/interrupts/inte1at0.htm
Χρήσιμα int 0x21 interrupts Μέσω του int 21h παρέχονται πολλαπλές υπηρεσίες Η επιλογή γίνεται μέσω της τιμής που έχει ο ΑΗ πριν το software interrupt Ah = 01h -> keyboard input with echo Ah = 07h -> direct console input without echo Ah = 0ah -> Buffered keyboard input Ah = 3dh -> open file using handle Ah = 3eh -> close file using handle Ah = 3fh -> read file or device using handle Ah = 40h -> write file or device using handle
Άσκηση Ο κώδικας είναι ομαδοποιημένος σε 4 αρχεία editor.asm : το κεντρικό αρχείο του κώδικα parser.asm : το κομμάτι που υλοποιεί το interface με το filesystem και το πληκτρολόγιο display.asm : το κομμάτι που είναι υπεύθυνο για την απεικόνιση stdio_16bits.asm : βιβλιοθήκη που παρέχει έτοιμες τις cls, printstr, hex2ascii Τα σχόλια πριν τις συναρτήσεις δίνουν και τα πρωτότυπα
editor Συντονίζει τα υποσυστήματα: Είσοδος στο πρόγραμμα Include των υπόλοιπων αρχείων Δέσμευση κοινόχρηστων μεταβλητών Καλεί την parser_init κατά την αρχικοποίηση Μετά καλεί συνέχεια τις display και parser όσο το active = 1
parser Κατά την αρχικοποίηση του: Ανοίγει το αρχείο με το όνομα που περιέχεται στην μεταβλητή file_name Αντιγράφει τα δεδομένα του στην περιοχή μνήμης file_buffer (αρχείο editor.asm) Κλείνει το αρχείο Αν παρουσιάστηκε κάποιο σφάλμα, εκτυπώνεται μήνυμα στην οθόνη και τερματίζει το πρόγραμμα Αν όχι, ενεργοποιεί το main loop του editor (active = 1)
parser Στον κυρίως του βρόχο ο parser διαβάζει συνεχώς το πληκτρολόγιο και: Αν πατηθεί κάποιο βέλος, ανανεώνει την θέση του κέρσορα μέσω της μεταβλητής cursor_pos Αν πατηθεί escape το πρόγραμμα τερματίζει
display Διαβάζει τον file buffer και απεικονίζει τα δεδομένα στην οθόνη Κάνει highlight την τρέχουσα θέση του κέρσορα Παρακολουθεί την μεταβλητή redraw, που σετάρεται από τον parser και αν γίνει 1, ανανεώνει την οθόνη Xρησιμοποιεί άμεση πρόσβαση στην vga text memory Δίνεται τελείως έτοιμο
Σκοπός Να υλοποιήσετε τις συναρτήσεις που καλεί o parser για να διαβάσει τα δεδομένα του αρχείου και να επικοινωνήσει με το πληκτρολόγιο, καθώς και την κλήση τους αυτή καθ'αυτή
Διάβασμα αρχείου Int 21h services: Ah = 3dh -> open file using handle Ah = 3eh -> close file using handle Ah = 3fh -> read file or device using handle Η συνάρτηση πρέπει να επιστρέφει στον ah 0 αν όλα πήγαν καλά, 1 αν παρουσιάστηκε σφάλμα
Παρακολούθηση πληκτρολογίου Int 21h services: 07h -> direct console input without echo Αν το πλήκτρο που πατήθηκε ήταν extended (non ASCII), τότε επιστρέφει 0 και στην επόμενη κλήση της επιστρέφει τον έξτρα κωδικό του πλήκτρου Η συνάρτηση πρέπει να επιστρέφει στον ah το αν το πλήκτρο ήταν extended ή όχι και τον κώδικό (1o διαβασμένο byte για ASCII, 2ο byte για extended) στον al
Extended κωδικοί