8bit demo coding horror

Σχετικά έγγραφα
SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

Writing kernels for fun and profit

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Το PowerPoint (PP) είναι ένα γραφικό πρόγραμμα για παρουσιάσεις. Χαρακτηριστικά Παρουσιάσεων:

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα

Εικονική Μνήμη (Virtual Μemory)

Εικονική Μνήμη (Virtual memory)

ΣΗΜΕΙΩΣΕΙΣ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μαθήματα 6 και 7 Αναπαράσταση της Πληροφορίας στον Υπολογιστή. 1 Στέργιος Παλαμάς

Επεξεργασία Χαρτογραφικής Εικόνας

Acorn Archimedes A3000 (1989)

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Απεικόνιση Κειμένου και Γραφικών. By Sanjay and Arvind Seshan MΑΘΗΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΑΡΙΩΝ

Keyboard. Ασσιούρας Ιωάννης 5593 Βούκας Ιωάννης 5001 Πρωτονοτάριος Ιωάννης 6072

Αρχιτεκτονική υπολογιστών

Ηλεκτρονικοί Υπολογιστές Δ Εξάμηνο

Εγχειρίδιο χρήσης. Εκπαιδευτικής αυτόματης φρέζας (CNC) με Fanuc 0M- B controller. Περιεχόμενα. Από τον φοιτητή Κορέτση Γεώργιο

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

Εικονική Μνήμη (Virtual Μemory)

Εισαγωγή στον Προγραμματισμό

ΕΝΟΤΗΤΑ 0: «ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ»

Εργαστήριο Τεχνολογίας Πολυμέσων & Γραφικών, Τ.Ε.Π Π.Μ, Μάθημα: Γραφικά με Η/Υ

Γραφικά με υπολογιστές

Αναπαράσταση Μη Αριθμητικών Δεδομένων

! Δεδομένα: ανεξάρτητα από τύπο και προέλευση, στον υπολογιστή υπάρχουν σε μία μορφή: 0 και 1

Παιχνιδάκια με τη LOGO

Scratch Διδακτική του Προγραμματισμού. Παλαιγεωργίου Γιώργος

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

DIP_06 Συμπίεση εικόνας - JPEG. ΤΕΙ Κρήτης

Ενεργοποίηση και ιαχείριση σηµάτων διακοπής

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 2

Το δεύτερο παιχνίδι ΤΟΥΒΛΑΚΙΑ

Χρήση της εντολής SYMBOL της Locomotive Basic για τη διδασκαλία του Δυαδικού Συστήματος αρίθμησης

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly

Σχεδίαση με Ηλεκτρονικούς Υπολογιστές

Μάθημα 7: Μικροϋπολογιστικό Σύστημα και Μνήμες

ΗΥ220: Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Πανεπιστήµιο Κρήτης Χειµερινό Εξάµηνο

ΗΜΥ 213. Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών week 5. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

Εργαστήριο του Μαθήματος: EΠΛ 003

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Αρχιτεκτονική Μηχανής. Αποθήκευση εδοµένων

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

«ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ» ΕΣΩΤΕΡΙΚΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

1. Κλικ στην καρτέλα Insert 2. Tables 3. Κλικ Table 4. Σύρουμε το δείκτη του ποντικιού και επιλέγουμε τον επιθυμητό αριθμό γραμμών και στηλών

ΣΧΕΔΙΑΣΗ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΩΝ (E-CAD) ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Χ. Βέργος Καθηγητής

Εντολές του MIPS (2)

CTEC-153: ΥΤΛΛΑ ΕΡΓΑΙΑ

Οργάνωση Η/Υ. Γλώσσα Assembly. Τμήμα Εφαρμσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

Πράξεις με δυαδικούς αριθμούς

Εφαρμογές Πληροφορικής

Εφαρμογές που συνδυάζουν ταυτόχρονα πολλαπλά μέσα : Κί Κείμενο, Εικόνα, Ήχος, Video, Animation. Στα υπερμέσα η πρόσπέλαση της πληροφορίας γίνεται

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

Ο ΗΓΟΣ ΧΡΗΣΗΣ Kidspiration 2.1

Αρχιτεκτονική υπολογιστών

Κεφάλαιο 7 Ιεραρχία Μνήμης (Memory Hierarchy)

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Η ιεραρχία της μνήμης

Εκτέλεση πράξεων. Ψηφιακά Ηλεκτρονικά και Δυαδική Λογική. Πράξεις με δυαδικούς αριθμούς. Πράξεις με δυαδικούς αριθμούς

Modbus basic setup notes for IO-Link AL1xxx Master Block

Δημιουργώντας ένα παιχνίδι λαβυρίνθου(maze game) με εμπόδια

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ: ΜΙΚΡΟΕΛΕΓΚΤΕΣ

Α.Τ.Ε.Ι. Ηρακλείου Ψηφιακή Επεξεργασία Εικόνας ιδάσκων: Βασίλειος Γαργανουράκης. Ανθρώπινη Όραση - Χρωµατικά Μοντέλα

1. Κλικ στην καρτέλα Insert 2. Tables 3. Κλικ Table 4. Σύρουμε το δείκτη του ποντικιού και επιλέγουμε τον επιθυμητό αριθμό γραμμών και στηλών

Εισαγωγή στον Προγραμματισμό

ΜΑΘΗΜΑ Στοίχιση Παραγράφων. 2. Εσοχές Παραγράφων ΣΤΟΧΟΙ:

Αρχιτεκτονική Υπολογιστών

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

Το τρίτο παιχνίδι ΛΑΒΥΡΙΝΘΟΣ ΜΕ ΕΜΠΟΔΙΑ

7. Επαναλήψεις (Loops) Προγραμματισμός EV3 Ακαδημία Ρομποτικής 58

4. Στις αρχές της περιόδου αυτής αναπτύσσεται στο κέντρο ερευνών της Xerox η ιδέα των γραφικών περιβαλλόντων χρήστη (GUIs-Graphical User Interface).

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

Ας ξεκινήσουμε λοιπόν!

Ενότητα 1. Γνωρίζω τον υπολογιστή ως ενιαίο σύστημα

Οδηγός Ασκήσεων Υποδικτύωσης

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 3 Εντολές του MIPS (2)

Α.Τ.Ε.Ι. Ηρακλείου Ψηφιακή Επεξεργασία Εικόνας ιδάσκων: Βασίλειος Γαργανουράκης. Τελικός Προορισµός

Α. Θα καλεί υποπρόγραμμα INPUT που θα διαβάζει τις τιμές του πίνακα MAP.

ΜΑΘΗΜΑ 5 ΣΤΟΧΟΙ: Τρόπος 1:

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. ΚΕΦΑΛΑΙΟ 4ο ΜΝΗΜΕΣ. (c) Αμπατζόγλου Γιάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ΠΕ17

Αρχιτεκτονική Υπολογιστών

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών ARM και x86

Β1.1 Αναπαράσταση Δεδομένων και Χωρητικότητα Μονάδων Αποθήκευσης

Analog vs Digital. Δούρβας Ιωάννης ΙΩΑΝΝΗΣ ΔΟΥΡΒΑΣ

ΕΙ Η ΜΝΗΜΩΝ ΠΤΥΤΙΚΕΣ ΜΗ ΠΤΥΤΙΚΕΣ

Εργαστήριο του Μαθήματος: EΠΛ 001

MULTIPLE CHOICE REVISION: ΜΑΘΗΜΑ 1-2

Ειδική Επιστημονική Εργασία. Σχεδίαση και υλοποίηση Θέσεως Εργασίας ενός Εργαστηρίου DSPs από Απόσταση για Λήψη και Επεξεργασία Εικόνας

Θέµατα Φεβρουαρίου

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ. Σηµειώσεις στο µάθηµα ΜΙΚΡΟΕΛΕΓΚΤΕΣ

Αρχιτεκτονική Υπολογιστών

Οργάνωση Υπολογιστών (ΙI)

ΓΕΩΠΟΝΙΚΗ ΣΧΟΛΗ ΑΠΘ Εργαστήριο Πληροφορικής στη Γεωργία

Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy. Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

Multi Media Builder 4.8

Dr. Kerneldev or: how I learned to stop worrying and love the pagefault

Transcript:

8bit demo coding horror Μιχάλης Κάργας (Optimus) 0x375 0x08 18 Ιουλίου 2012

Γιατί; Νοσταλγία Περιέργεια Πρόκληση Μαγικά Κόλπα!

ZX Spectrum 48k/128k/+2/+3 CPU: Z80 @ 3.5Mhz Memory: 48k / 128k Graphics 256 * 192 1bpp 32 * 24 color attributes 16 color pallete Sound Beeper (48k) Yamaha AY-3-8912 (rest) Special Weapons None

Amstrad CPC 464/664/6128 CPU: Z80 @ 4Mhz Memory: 64k / 128k Graphics 160 * 200 4bpp 320 * 200 2bpp 640 * 200 1bpp 27 color pallete Sound Yamaha AY-3-8912 Special Weapons CRTC controller (overscan, hardware scrolling (sort of), screen splits, etc)

Commodore 64 CPU: 6502 @ 0.985Mhz Memory: 64k Graphics 160 * 200 2bpp 320 * 200 1bpp Char/multicolor modes 16 color pallete Sound SID 6581 Special Weapons VIC chip (hardware sprites, pixel perfect hardware scrolling, line interrupts, char modes)

Ενότητες Sprites/Simple blitting Line based effects Pixel based effects Unrolled code tricks 3D effects

Ένα byte την ημέρα.. Το πιο απλό που μπορείς να κάνεις: Copy Paste γραφικά Έξυπνος τρόπος για γρήγορο blitting Χρησιμοποίηση της στόιβας στον Z80 για γρήγορο blitting LD SP,end_of_line_addr PUSH HL: PUSH HL: PUSH HL: PUSH HL many times Πολύ χρήσιμο ειδικά στον Spectrum

Sprites Ας υποθέσουμε πως κάνουμε απλό copy paste (σε μαύρο background) Πρόβλημα! Ένα byte = πολλά pixels. Σπαστή κίνηση στο Χ. Κλασική λύση; Αποθήκευση shifted sprite versions. Μειονεκτήματα: Τετραπλάσια μνήμη (και μην ξεχνάμε και τις μάσκες)

Sprites Δεν προτιμούταν η μέθοδος με τα 4 sprite versions σε παιχνίδια (καλύτερα λιγότερη ταχύτητα παρά γεμάτη μνήμη) Καλύτερο για demos με ένα sprite, π.χ. Πόσες μπάλες μπορείς να βγάλεις σε 50hz. Σε παιχνιδία είχαμε τις εξής τεχνικές: Bit shifting (το pixel configuration του amstrad ευνοούσε σχετικά) Mirroring. Σε sprite records έχουμε optimal unrolled codes για διάφορα shifted versions του sprite και στο X και στο Y.

Γραμμή γραμμή.. Τα πιο κλασικά εφφέ στα 8bits Με γρήγορο blitting διαφορετικών γραμμών γραφικών που εναλάσσονται με το χρόνο γίνεται μια μεγάλη γκάμα εφφέ (αυτό εξαρτάται από το set γραφικών που χρησιμοποιείς) Στον Spectrum θα το κάνεις με software blits Στους Amstrad/C64 με hardware tricks

Πως γράφω pixel μαμά; Δυσκολία εύρεσης γρήγορης λύσης λόγω μη φιλικού screen configuration στα περισσότερα 8bit μηχανήματα Γενικά, θέλουμε να κάνουμε conversion από X,Y συντεταγμένες σε video memory address Έπειτα, ένα byte είναι πολλά pixels, οπότε η X συντεταγμένη θα μας πει πως να γράψουμε αυτό το pixel χωρίς να καταστρέψουμε την πληροφορία για τα υπόλοιπα.

Πως γράφω pixel μαμά; Παράδειγμα σε Amstrad CPC Η videoram ξεκινάει στην &C000 Δεν είναι ακριβώς γραμική (ακολουθεί video) 80 bytes ανά γραμμή Add 2048 για να πας στην επόμενη γραμμή εκτός και αν Y%8=7 Τότε αφαιρείς 7 * 2048 για να πας 7 γραμμές πίσω και προσθέτεις 80 για να πας στο επόμενο char line. Προσθέτεις και το offset του X, π.χ. το pixel Χ=100 σε videoram 2bpp είναι 100/4 = 25bytes δεξιά. address = (Y % 8) * 2048 + (Y / 8) * 80 + (X / 4);

Πως γράφω pixel μαμά; Ποια bits πρέπει να κάνουμε set ώστε να γράψουμε αυτό το pixel χωρίς να αλλοιώσουμε τα γειτονικά pixels που ανοίκουν στο ίδιο byte; Θυμηθείτε και πόσο περίεργο είναι το configuration των pixels, π.χ. στο 4bpp mode. Προσωπικά δεν έχω κάνει το decoding σε κώδικα. Προτιμάται τρόπος με precalcs tables.

Πως γράφω pixel μαμά; Πως (δεν) θα το έκανες στον Amstrad address = (Y % 8) * 2048 + (Y / 8) * 80 + (X / 2) Μερικά setbit ή κάποιο convert από πίνακα του στυλ final_byte = pretab[x % 1, Color] vram[address] = final_byte Πως το κάνουμε σε ανθρώπινα μηχανήματα vram[y * ScreenWidth + X] = color

Πως γράφω pixel μαμά; Πως το κάνουμε στον Amstrad (σε 4bpp) Init Precalc table για το Y vram[y] = (Y % 8) * 2048 + (Y / 8) * 80 Final address = vram[y] + (X >> 1) Δεν γλιτώνουμε τον πίνακα final_byte = pretab[x % 1, Color] vram[address] = final_byte Πιο απλή αντιστοίχηση αν χρησιμοποιούμε ας πούμε μόνο ένα χρώμα στην dot routine μας.

Πως γράφω pixel μαμά; Για bitmap effects όπου θέλουμε individual pixel control δεν ακολουθείται η ίδια διαδικασία Μα φυσικά, αφού το επόμενο pixel είναι στο X+1 και στο ίδιο Y Σε 4bpp υπολογίζουμε αριστερό και δεξί pixel color byte, τα ενώνουμε και γράφουμε το byte στην address και μετά πάμε στο αμέσως επόμενο byte. Δεν ξεχνάμε στο τέλος της γραμμής με τον precalc table[y] να κάνουμε reset την address στην επόμενη γραμμή από κάτω και πρώτο byte.

Πως γράφω pixel μαμά; Σε 4bpp συνηθίζω να έχω table με τα byte για left pixels και right pixels από χρώμα 0-15. Πολλά μπορούν να βελτιωθούν. Αν έχεις texture mapping based effect, αποθήκευσε το texture με left shifted pixels και right shifted pixels διπλά. Γλυτώνεις την μετατροπή. Αλλιώς τα gradient based effects (π.χ. fire, plasma) μπορούν να γίνουν και με πιο χοντρά pixels με precalced γραφικά από dithered tiles. Οπότε μπορείς να γράφεις full bytes πιά και να αποφύγεις την παλιά διαδικασία.