Binary Clock

FTL

Retro Member
Joined
4 Ιουλ 2007
Μηνύματα
187
Αντιδράσεις
10
Είναι ένα Binary Clock γραμμένο σε γλώσσα Assembly στον Fasm Assembler.

190 bytes, τρέχει σε Dos, DosBox Emulator, Windows 95/98/XP και πιθανόν Vista.

Ακολουθεί ο πλήρες κώδικας, ένα screenshot και το εκτελέσιμο com αρχείο.

Κώδικας:
; Binary Clock written by Nick Kouvaris
; http://lightforce.freestuff.gr
; Fasm Assembler v1.67.23

	org 100h

	mov ax,0003h            ; clear screen - hide cursor
	int 10h
	mov ax,0103h
	mov cx,2000h
	int 10h

	push 0b800h
	pop es

main:      
	mov si,04dbh             ; dark red color box 
	mov di,1126              ; first led position 
	call timee          
	mov ah,1
	int 16h
	jz main
	int 20h

timee:
	mov ah,02h             ; time in bcd
	int 1ah
	mov bl,ch                ; hour
	call split
	mov bl,cl                 ; minutes
	call split
	mov bl,dh                ; seconds
	call split
	ret

split:                  
	push bx                 ; split bcd value
	shr bl,4
	call status
	pop bx
	and bl,0fh
	call status
	ret 

status:
	push cx dx
	xor dx,dx      
	mov al,bl
	mov cx,2
	div cx
	cmp dx,1                  ; case 1
	jne @f
	mov si,0cdbh            ; light red color box
@@: 
	call led                     ; show led
	cmp bl,2                   ; case 2-3-6-7
	jb @f
	cmp bl,4
	je @f
	cmp bl,5
	je @f
	cmp bl,7
	ja @f
	mov si,0cdbh
@@:  
	call led
	cmp bl,7                   ; case <=7  >=4
	ja @f
	cmp bl,4
	jb @f
	mov si,0cdbh
@@:  
	call led     
	cmp bl,8                   ; case >=8
	jb @f
	mov si,0cdbh
@@:
	call led
	add di,1286               ; next row
	pop dx cx
	ret

led:
	cmp di,486               ; non visible leds
	je off
	cmp di,166
	je off
	cmp di,178
	je off
	cmp di,190
	je off
show:
	xchg ax,si
	stosw
	stosw
	sub di,324                ; next led pos 
	mov si,04dbh
	ret
off:
	xor si,si
	jmp show
image1pr3.gif


Για όσους δεν γνωρίζουν πως δουλεύει ένα Binary Clock, η παρακάτω εικόνα θα βοηθήσει.

binclock_sample.gif
 
FTL...πολυ ΓΟΥΣΤΑΡΩ!!
 
Εμμ, εγώ γιατί δεν μπορώ να καταλάβω πως ακριβώς δουλεύει το ρολόι???
 
Nομίζω οτι βρήκα πως "μεταφράζεται" δεκαδικά η κάτω εικόνα:

Από το δίστηλο των ωρών (Η), τα αναμμένα λαμπάκια είναι: το 2 στην αριστερή στήλη και το 2 στην δεξιά. Άρα, η ώρα είναι 22 (2 και 2).

Στο δίστηλο των λεπτών, στην αριστερή στήλη είναι το 4.

Στην δεξιά τα 1,2,4, δηλαδή σύνολο 7.

Άρα, τα λεπτά είναι 47 (4 και 7).

Στο δίστηλο των δευτερολέπτων, στην αριστερή στήλη είναι αναμμένο το 4.

Στην δεξιά τα 1 και 4 , δηλαδή σύνολο 5.

Άρα, τα δευτερόλπετα είναι 45 (4 και 5).

Συνολικά, η ώρα είναι: 22:47:45

Με τον ίδιο τρόπο, η ώρα στην επάνω εικόνα είναι:19:42:15

Τα βρήκα σωστά;
 
Άψογος zoro.

Το προγραμματάκι του FTL ήταν πολύ καλό για να μας δίξει το δυαδικό σύστημα κα να μάθουμε να μετράμε.

Σε 2-3 μέρες θα έχω έτοιομο ένα κειμενάκι πάνω σε αυτό.

Υπομονή
 
Πολύ σωστά zoro!

Ευχαριστώ παιδιά, έχω πολύ υλικό, retro και μή, από διάφορες γλώσσες προγραμματισμού που έχω ασχοληθεί κατά καιρούς.

Αν ποστάρουν και άλλα παιδιά δικά τους προγράμματα, θα βάλω και εγώ περισσότερα, πάντα με retro διάθεση γιατί μου αρέσει το Topic.
 
:eek: :headbangdude:

Εγώ ζαλίστηκα από τον κώδικα. Μακάρι βλέποντάς τον να μπορούσα να πω ό,τι είπε και το φρικιό στο πρώτο Matrix, "Βλέπω μια πολύ ωραία γυναίκα" :D

Επίσης θέλω να ομογολήσω, ότι τρέφω ιδιαίτερο σεβασμό για τα άτομα που γράφουν assembly...
 
FTL είπε:
Πολύ σωστά zoro!
Ευχαριστώ παιδιά, έχω πολύ υλικό, retro και μή, από διάφορες γλώσσες προγραμματισμού που έχω ασχοληθεί κατά καιρούς.

Αν ποστάρουν και άλλα παιδιά δικά τους προγράμματα, θα βάλω και εγώ περισσότερα, πάντα με retro διάθεση γιατί μου αρέσει το Topic.
FTL,

Συνέχισε... Όλοι μας προσπαθούμε να βάλουμε ότι ξέρουμε, έχοντας τον Shock ως "πλοηγό". Προσωπικά, ότι φτιάχνω μελετώντας, έπειτα από 21 χρόνια, την Locomotive Basic με έναν Amstrad 6128 που ανέσυρα πρόσφατα, τα βάζω στο forum. Ήδη, μέσα στα δύο -μέχρι στιγμής- μαθήματα του Shock, έχω βάλει δύο μικρά -εν είδει παράπλευρου άρθρου- κομμάτια σχετικά με την DEFFN και την VAL, καθώς επίσης και μικρές υπορουτινίτσες (πως μετράμε δευτερόλεπτα και πως κάνουμε δεξιά και κεντρική κάθετη στοίχιση), που κατασκεύασα μελετώντας. Όλα αυτά είναι χρήσιμα για τον καθένα μας, καθώς η φιλοσοφία μου είναι "μην αφήνεις ούτε ψίχουλο πληροφορίας χαμένο, αν θέλεις να αποκτήσεις γνώση".

Πάντως, όλα αυτά που φτιάχνει ο καθείς μας (μεγάλο ή μικρό), -κι εδώ ζητώ την συνδρομή του Shock- πρέπει να αναρτηθεί σε έναν ειδικό "κατάλογο" με προτεινόμενο τίτλο "Ρουτίνες και προγράμματα προς μελέτη ή χρήση". Το πολύ-πολύ, να χωρισθεί κατά "γλώσσα".

Υ.Γ. Κανένα νέο σχετικά με τον on-line emulator για Amstrad;
 
Θα βοηθήσω και εγώ αλλά αυτήν την περίοδο έχω δυστυχώς ελάχιστο ελεύθερο χρόνο.

Στο μέλλον αν μπορέσω θα γράψω ένα θεματάκι, ίσως ένα game tutorial σε Basic για το RetroManiax.
 
Μια μικρη βοηθεια.. τι κανει ο κωδικος εντολης 0103h? (η 3h βρηκα τι κανει :Ρ)
 
Rakeesh δές εδώ και εδώ και εδώ για μια εισαγωγή γενικά στον προγραμματισμό του 8086 αν ενδιαφέρεσαι.
 
Ευχαριστω για τα λινκς.. παντως το πρωτο (που θα επρεπε) δε γραφει τι κανει η INT 10h / AX = 0103h :(

Ισως εκανες τυπογραφικο και ηθελες να γραψεις 1003h? Γιατι μονο μεχρι εκει υπαρχει
 
Φίλε Rakeesh, όπως έγραψα αν πραγματικά ενδιαφέρεσαι για την Αssembly, κατέβασε έναν Assembler, διάβασε manuals, tutorials, βιβλία και γράψε κώδικα.

Δεν έχω κάνει τυπογραφικό λάθος,απλά δεν γνωρίζεις Assembly, στο λέω πάρα πολύ φιλικά και με συμπάθεια.

Eνας καταχωρητής των 16 bit όπως ο AX μπορεί να πάρει οποιαδήποτε τιμή απο 0-65536 (0-0xFFFFh), η αν υπάρχει πρόσημο από -32768 εως 32767 (0x8000h - 0x7FFFh)

η εντολή mov ax,0103h τοποθετεί στον ΑΧ την τιμή 0103h.

δηλαδή το high byte AH (bits 8-15) παίρνει την τιμή 01h και το low byte AL (bits 0-7) την τιμή 03h
 
Δεν έχω κάνει τυπογραφικό λάθος,απλά δεν γνωρίζεις Assembly, στο λέω πάρα πολύ φιλικά και με συμπάθεια.
Το ξερω οτι δε γνωριζω assembly :p

Ελπιζω να μη παρεξηγηθηκες που ειπα για πιθανο τυπογραφικο και ουτε υποννοησα οτι ξερω περισσοτερα απο σενα 8) Εγραφες δηλαδη 0103 στο ΑΧ, κι εγω ειδα οτι η σελιδα που εδωσες ανεφερε μονο 1003 στο ΑΗ (εδω ηταν η πρωτη μου βλακεια: μπερδεψα το ΑΧ με το ΑΗ!! :precry: ).. οποτε λεω, ισως να μπερδεψες τα δυο πρωτα ψηφια. Ανθρωπινο ειναι

Οκ, τωρα που καταλαβα οτι ΑΗ και AL ειναι μερη του ΑΧ ξεκινησα να αποκρυπτογραφω το προγραμμα. Αυτο το hint ηταν ιδιαιτερα διαφωτιστικο

Φίλε Rakeesh, όπως έγραψα αν πραγματικά ενδιαφέρεσαι για την Αssembly, κατέβασε έναν Assembler, διάβασε manuals, tutorials, βιβλία και γράψε κώδικα.
Εχεις δίκιο αλλά αν μου επιτρεπεις, να σου πω που διαφωνω με τη φιλοσοφια αυτη; Το οτι έχω μια περιέργεια δε σημαίνει οτι 'ενδιαφέρομαι πραγματικά' για να πρέπει να το αποδείξω με τη μελέτη μου... και το οτι τελικα δεν ενδιαφέρομαι τόσο 'πραγματικά' όσο το εννοείς δε σημαίνει οτι δεν πρέπει να ικανοποιήσω την περιέργειά μου! :)

Δηλαδη ή ενδιαφέρεσαι και ξεσκίζεσαι στο διάβασμα ή δεν ενδιαφέρεσαι και είσαι καταδικασμένος να μείνεις άσχετος; Μέση λύση, χομπίστικη, εγκυκλοπαιδική, παιχνιδιάρικη, επιφανειακή ρε αδελφέ, δεν υπάρχει; Ειναι λιγο 'δυαδικο' αυτο (pun intended :p ) και όχι τόσο δίκαιο.

Καλως η κακως (δηλαδη κακως :( ) δε με βλεπω να ασχολουμαι ουτε με προγραμματισμο ουτε με assembly επαγγελματικα. Δεν έχω ουτε το IQ ούτε την αντοχή ούτε το χρόνο ούτε brain resources ή memory capacity για να αφιερώσω-θυσιάσω μέρος της ζωής μου σε όλο αυτό. Αυτο ομως δε σημαινει οτι δε με ενδιαφερει εγκυκλοπαιδικα. Ή οτι δε θελω να παιξω λιγο, να σκαλίσω, να μαθω να διαβαζω (βλ. συλλαβιζω) προγραμματα κλπ. Αυτό σημαίνει οτι δεν 'ενδιαφέρομαι σοβαρά' για assembly? και κατ' επέκταση δεν έχω το δικαίωμα να 'σκαλίσω' λίγο ένα κώδικα που έπεσε στα χέρια μου χωρις να θέλω να εμβαθύνω;

Το χόμπυ δεν είναι μοναχισμός που απαιτεί να τα δώσεις όλα και αν δεν είσαι άξιος, να την κάνεις με ελαφρά. Και αναρωτιέμαι γιατί αποτρέπεται η επιφανειακή ενασχόληση ως 'θεομπαιξία', ασέβεια μπροστα στους κόπους και τις θυσίες που έκαναν οι γκουρού.

Ξερω, θα μου πεις οτι ΟΛΑ στη ζωη θελουν θυσιες. ΟΛΑ. Και έχεις δίκιο. Σκέψου όμως αυτό:

Είναι σα να έχω πάει στην Αυστραλία, να μου ζητάς καρτ-ποστάλ και εγώ να σου λέω 'αν ενδιαφέρεσαι πραγματικά για την Αυστραλία, μάζεψε λεφτά και πήγαινε ταξίδι'. Ναι, η καρτ ποστάλ δεν συγκρινεται με ένα ταξίδι, αλλά εσύ μου ζήτησες απλά και μόνο μια καρτ ποστάλ... δεν είναι σωστό να σου την αρνηθώ επειδή δεν 'ενδιαφέρεσαι πραγματικά' για την Αυστραλία ωστε να θυσιάσεις χρήματα, κόπο και χρόνο για το ταξιδι

(πςςςςς και παραβολές ο δικός σου.. ποιος ειμαι; ο Λαο Τσε; :p )

Φιλικά και χαβαλετζίδικα όλα αυτά, και ειναι προβληματισμος μου για τη hacker mentality, δεν είναι προσωπικό παράπονο σε σένα :) ευχαριστώ για τις πληροφορίες
 
τίποτα, νάσαι καλά.
 
Ωραίο gadget :)
 
Πίσω
Μπλουζα