Commodore 64, Ram diagnostic program


Πιθανά ο C64 ν' ανάβει κανονικά, αλλά να μην μπορεί να φορτώσει προγράμματα! Αυτό οφείλετε είτε στο PLA Chip (U17), είτε σε σφάλμα μνήμης. Μπορούμε να ελέγξουμε την μνήμη με το πρόγραμμα ramcheck!
Το πρόγραμμα θα ελέγξει και τα 65534 bytes της μνήμης RAM και θα εμφανίσει έναν πίνακα που δείχνει τον αριθμό των σφάλματων για κάθε bit του διαύλου δεδομένων. Ο C64 χρησιμοποιεί οκτώ 64K x 1bit 4164 DRAM IC's. Χρησιμοποιήστε τον παρακάτω πίνακα για ν' αποφασίσετε ποιο ή ποια IC's Θ'αντικατασταθούν:

BIT    IC
----    -----
0       U21
1       U09
2       U22
3       U10
4       U23
5       U11
6       U24
7       U12

Το πρόγραμμα αφού το έχετε μεταφέρει σε δισκέτα, το φορτώνεται με την παρακάτω εντολή:

load"ramcheck.bin",8,1

Αν όλα είναι καλά, θα πάρετε μια εικόνα σαν την παρακάτω:


Το πρόγραμμα μπορείτε να το κατεβάσετε από το ftp του cbm8bit.com από εδώ.
Πως θα μεταφέρετε το πρόγραμμα σε δισκέτα, δείτε εδώ.

VZ200, Tips & POKEs


Χρήσιμα POKE μέσα από την Basic γι' αλλαγές που θέλουμε! Η περιγραφή είναι στ' Αγγλικά για ευνόητους λόγους!







 POKE 30776,2  INVERSE TEXT ON

POKE 30776,1  INVERSE TEXT OFF

POKE 30779,0  DISABLE BEEP AND THE SOUND COMMAND

POKE 30779,1  ENABLE BEEP AND THE SOUND COMMAND

POKE 30779,87   KEYBOARD BEEP, ORANGE SCREEN

POKE 30779,243    KEYBOARD SILENT, ORANGE SCREEN

POKE 28670,15  RESTORES ALL HI-RES GRAPHICS FROM MODE(1)

POKE 31003,175  TRON

POKE 31003,0  TROFF

POKE 30723,2  DISBALE THE ERROR MESSAGE

Resistor Color Code

Πολλές φορές χρειάζεται να αναγνωρίσουμε τιμές αντιστάσεων από τον χρωματικό κώδικα, η παρακάτω εικόνα δείχνει τις αντιστοιχίες:

Κάντε 'κλικ' επάνω στη εικόνα για μεγέθυνση !

Στην παρακάτω εικόνα είναι οι συνηθέστεροι συνδυασμοί χρωματικού κώδικα:

Κάντε 'κλικ' επάνω στη εικόνα για μεγέθυνση !

ZX Spectrum 16K/48Κ, Ram Test



(Από το επίσημο service manual)


O ZX μπορεί ν' ανάβει κανονικά, μπορεί όμως να υπάρχει προβληματικό chip μνήμης. Το παρακάτω test θα μας δώσει το προβληματικό chip. Κατ' αρχάς δίνουμε την παρακάτω γραμμή:

PRINT PEEK 23732 + PEEK 23733 * 256

Η απάντηση που πρέπει να πάρουμε είναι:

για ΖΧ 48Κ: 65535
για ΖΧ 16Κ: 32767

Αν η απάντηση είναι διαφορετική, μας δείχνει την τελευταία διεύθυνση που "βλέπει", δηλαδή το πρόβλημα ξεκινά από την επόμενη διεύθυνση (π.χ. αν η απάντηση είναι 43200 το πρόβλημα ξεκινά απότην 43201)

LET X= PEEK 23732 + PEEK 23733 * 256 + 1

Εστω ότι Χ είναι η πρώτη προβληματική διεύθυνση, Δίνουμε τις παρακάτω γραμμές:

POKE X,85:PRINT PEEK X
POKE X,170:PRINT PEEK X

Αν οι απαντήσεις δεν είναι 85 και 170 αντίστοιχα, βρίσκουμε από τον παρακάτω πίνακα το προβληματικό chip:



Π.Χ. αν η προβληματική διεύθυνση είναι 43201 (δηλαδή αν το PRINT PEEK 23732 + PEEK 23733 * 256 δίνει τιμή 43200), και στο πρώτο POKE δίνει 85, αλλά το δεύτερο δίνει 234, τότε το προβληματικό chip είναι το IC21.

ZX81, Ram Diagnostic Program



Το παρακάτω μικρό πρόγραμμα, μας δείχνει την Ram που "βλέπει" το μηχάνημα αν έχουμε προσθέσει 16Κ, ή άλλης ποσότητας μνήμη:

10 PRINT INT((PEEK 16386+256*PEEK 16387-PEEK 16412-256*PEEK 16413)/10+.5)/100;"K"

RUN

Αν έχουμε προσθέσει 16Κ η απάντηση που θα λάβουμε μετά το RUN είναι 15.34Κ, τα υπόλοιπα τα "τρώει" το πρόγραμμα...

Acorn BBC, converting clicked joystick


Πολλές φορές μας περισσεύει ένα joystick που θέλουμε να το μετατρέψουμε σε BBC joy. Παρακάτω έχω δύο σχέδια γι' αυτό το σκοπό, ένα με calibration για τις δύο κατευθύνσεις και ένα χωρίς.

Χρειαζόμαστε 2 ροοστάτες 40ΚΩm (ή 47Κ), ή 4 αντιστάσεις των 20ΚΩm η καθεμιά.

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

Με calibration:

Οι μεταβλητές αντιστάσεις πρέπει να έχουν τιμή 40ΚΩm ή 47ΚΩm.
Κάντε "κλικ" στη εικόνα για μεγέθυνση 

Χωρίς calibration

Οι αντιστάσεις είναι 20ΚΩm η καθεμία. Σύμφωνα μ' ένα φίλο ηλεκτρονικό, καλό είναι να χρησιμοποιήσουμε αντιστάσεις μεγάλης ακρίβειας!!! 

Κάντε "κλικ" στη εικόνα για μεγέθυνση




Commodore C16/C116/plus4, Atari joystick adaptor



Αρκεί να έχουμε εφοδιαστεί μ' ένα αρσενικό 9Pin Dsub κι' ένα αρσενικό mini 8pinDin. Η συνδεσμολογία είναι μέχρι το 4 αντιστοιχία, όπως φαίνεται στο σχήμα:




Commodore C16/C116/plus4 PinOut

Video/Audio (8Pin)


1: Lum
2: Ground
3: Audio out
4: Compo AV
5: Audio in (SID)
6: Chroma (C)
7,8: Δεν συνδέονται


TAPE Port (mini 7Pin)


1,7: Ground
2,3: +5V DC
4: Read
5: Write
6:Sense




Joy Port (mini 8Pin)


1: Up
2: Down
3: Left
4: Right
5: +5V DC
6: Fire
7: Ground

Laser/Salora/Dick Smith, tape pinout



Ολα τα laser/ Salora/ Dick Smith 100/ 110/ 200/ 300/ 350/ 500/ 700, έχουν κλασικές εξόδους (RF, AV Compo). Εκείνο που διαφέρει είναι η θύρα κασετοφώνου που είναι 3.5" stereo jack. Χρησιμοποιείτε και για είσοδο αλλά και για έξοδο σύμφωνα με το παρακάτω σχήμα:



Amstrad CPC, double joystick port

Ως γνωστό ο CPC έχει μια θύρα joystick, η οποία όμως υποστηρίζει 2 joy. στο παρακάτω σχέδιο απεικονίζεται η αντιστοιχία για τον αντάπτορα που θα φτιάξουμε. Τα pin 1 έως 7 (εκτός του 5 που δε συνδέεται) είναι όμοια και στα δύο, η διαφορά είναι στη "γείωση" όπου το 8(CPC) πάει στο 8 για το πρώτο joy, ενώ το 9(CPC) πάει στο 8 για το δεύτερο joy.
Στο σχήμα φαίνονται από την πλευρά των κολλήσεων: 


Commodore 64, UDG's

O C64 κανονικά, δεν υποστηρίζει προγραμματιζόμενους χαρακτήρες μέσα από την Basic, έχει τους δικούς του γραφικούς χαρακτήρες στη ROM του. Αυτό που μπορούμε να κάνουμε είναι, να μεταφέρουμε αυτούς τους χαρακτήρες από τη ROM στη RAM και μετά να τους αλλάξουμε! Από το manual του (βρίσκεται εύκολα στο internet), μπορούμε να βρούμε τον κωδικό που αντιστοιχεί σε κάθε χαρακτήρα και μετά να τον μορφοποιήσουμε, π.χ. το Shift+A είναι ο χαρακτήρας 65 (με shift αναφέρεται στο set 1, σελίδα 133 του manual "Appendix E Screen Display Codes").

9000 PRINT "PLEASE WAIT..."
9005 POKE 56334,PEEK(56334) AND 254
9010 POKE 1,PEEK(1) AND 251
9020 FOR I=0 TO 255
9030 FOR J=0 TO 7
9040 POKE 12288+I*8+J,PEEK(53248+I*8+J)
9050 NEXT J:NEXT I
9060 POKE 1,PEEK(1) OR 4:POKE 56334,PEEK(56334) OR 1
9070 POKE 53272,(PEEK(53272) AND 240)+12

Αυτές οι γραμμές μεταφέρουν τους χαρακτήρες από την ROM στην RAM και "δηλώνουν" στο μηχάνημα που θα τους βρίσκει (Θέλει χρόνο ο C64 για την εκτέλεση τους!!!).

9080 READ CHR
9090 FOR BYTE=0 TO 7
9100 READ NUMBER
9120 POKE 12288+(8*CHR)+BYTE,NUMBER
9130 NEXT BYTE

Αυτές οι γραμμές ορίζουν ένα UDG στη νέα θέση του, σύμφωνα με τα DATA που θα δώσουμε:

9140 DATA 65,24,24,16,126,24,60,36,102

Ο χαρακτήρας 65 αντιστοιχεί στο Α που αποτελεί και το πρώτο DATA, μετά την εκτέλεση των γραμμών, πατώντας το shift+A θα εμφανίζεται το "ανθρωπάκι" του παραδείγματος από εδώ

Μπορούμε να επαναλάβουμε τις γραμμές 9080-9130 (μέσα σ' ένα FOR) για όσους χαρακτήρες θέλουμε, έτσι, μπορούμε να εισάγουμε στον C64 και τα Ελληνικά γράμματα, πέρα απ' ότι άλλο θέλουμε!

C64, Basic Colors


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


INK 
Με την εντολή PRINT CHR$(#) όπου # ο επιθυμητός αριθμός από τον παρακάτω κατάλογο, αλλάζουμε το χρώμα των χαρακτήρων που εκτυπωθούν στην συνέχεια: 

PRINT CHR$(5) WHITE
PRINT CHR$(28) RED
PRINT CHR$(30) GREEN
PRINT CHR$(31) BLUE
PRINT CHR$(144) BLACK
PRINT CHR$(156) PURPLE
PRINT CHR$(158) Light GREEN
PRINT CHR$(159) Light BLUE

BORDER / BACKGROUND
Εδώ χρειαζόμαστε την εντολή POKE, για αλλαγή του χρώματος της σελίδας (border) POKE 53280,# και για αλλαγή του περιθωρίου (background) POKE 53281,# . Οπου το # ο αριθμός που επιθυμούμε από τον παρακάτω κατάλογο:

0 BLACK
1 WHITE
2 RED
3 CYAN
4 PURPLE
5 GREEN
6 BLUE
7 YELLOW

8 ORANGE
9 BROWN
10 light RED
11 GRAY 1
12 GRAY 2
13 light GREEN
14 light BLUE
15 GRAY 3


TIP
Με την εντολή PRINT CHR$(147) κάνουμε "καθαρισμό" της οθόνης (CLR).


ZX81, HRG-MS demo


Ενα μικρό demo που έφτιαξα, για επίδειξη των δυνατοτήτων που προσφέρονται με την αναβάθμιση HRG στο ΖΧ81. Το πως γίνεται, το αναφέρω αναλυτικά εδώ.

ZX Spectrum, Διαβάζοντας την οθόνη

Πολλές φορές στα προγράμματά μας, χρειάζεται να βρούμε κάτι που έχει εμφανιστεί στη οθόνη μας. Οι δύο παρακάτω τρόποι, αναφέρονται ο μεν ένας σε εύρεση μεμονωμένου pixel, οι δε άλλος σ' ολόκληρο χαρακτήρα.

Στα μεμονωμένα pixel μας βοηθά η συνάρτηση POINT. H συνάρτηση POINT, μας επιστρέφει την τιμή 1 αν το pixel έχει το χρώμα του ink, ή τη τιμή 0 αν έχει το χρώμα του paper. Δέχεται δύο παραμέτρους εντός παρενθέσεων, που είναι οι συντεταγμένες του pixel, Π.Χ.:

10 CLS
20 PLOT 50,50
30 PRINT AT 2,2;POINT(50,50)
40 PRINT AT 3,2;POINT(60,60)

H SCREEN$ είναι το ακριβώς αντίθετο του PRINT AT, δηλαδή διαβάζει από τις δοθείσες συντεταγμένες ένα χαρακτήρα, οι συντεταγμένες δίνονται μέσα σε παρενθέσεις. Π.Χ.:

10 CLS
20 PRINT AT 5,6;"a"
30 PRINT AT 7,6;SCREEN$(5,6)

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

SAVE "test" SCREEN$

και τη φορτώνουμε με την εντολή:

LOAD "" CODE  

Bit90, PinOut

Video/Audio/Tape


2, 4, 7, 9: Ground
3: Tape (LOAD)
5: Tape (SAVE)
6: Composite Out
8: Audio Out


Ευχαριστώ τον φίλο μου Geo1977, που διέθεσε αυτό το σπάνιο μηχάνημα για την... "λαπαροσκόπηση"!

ZX Spectrum 128K+3, AV Composite


Γιατί ενώ έχουμε τέλεια εικόνα με το RGB Scart, να θέλουμε και Composite Video? Απλά μπορεί να θέλουμε να συνδέσουμε ένα TFT Monitor, το οποίο δεν έχει είσοδο Scart.

Δεν είναι ότι πιο εύκολο η λύση που προτείνω, μας αποζημιώνει όμως το αποτέλεσμα που αγγίζει το τέλειο! Τα υλικά που χρειαζόμαστε είναι τα εξής:

TEA2014A chip
Πυκνωτές 10μF και 22μF
Αντιστάσεις 100Ωμ, 22Ωμ και 75Ωμ
2 x RCA
1 x 8Pin Din
1 x Αυτοσχέδια επαφή για 2 καλώδια

Κάντε "κλικ" στην εικόνα για μεγέθυνση!

Ενα καλό σημείο για τη σύνδεση του Pin 6 της TEA2000 είναι το δεξί άκρο της διόδου D31, και για το Pin11, το δεξί άκρο της αντίστασης R49. Οι θέσεις τους φαίνονται στο παρακάτω σχεδιάγραμμα.

Κάντε "κλικ" στην εικόνα για μεγέθυνση!
ΠΡΟΣΟΧΗ
Πρέπει ν' αποσυνδέσουμε τον πυκνωτή C24, γιατί αλλιώς θα έχουμε παρεμβολές στο video σήμα από το σήμα του ήχου! Σ' αυτή τη περίπτωση "χάνεται" ο ήχος από το RF σήμα, αλλά είναι μικρό το "κακό". 

Binary Search, δυαδική αναζήτηση


Ο ταχύτερος αλγόριθμος αναζήτησης σε πίνακα είναι της δυαδικής αναζήτησης, εδώ τον έχω "διατυπωμένο" σε μη δομημένη Basic των 8Bit υπολογιστών. Θα πρέπει βέβαια ο πίνακας να είναι ταξινομημένος.

Ξεκινά συγκρίνοντας το κλειδί (key) με την τιμή του στοιχείου που βρίσκεται στο μέσο του πίνακα. Αν είναι ίσα, τότε ο αλγόριθμος τερματίζει επιστρέφοντας τη θέση αυτή. 
Αν το κλειδί είναι μεγαλύτερο, τότε μειώνει το εύρος στο δεξί-μισό τμήμα του προηγούμενου τμήματος που εξέταζε και επαναλαμβάνει το πρώτο βήμα όχι για όλο το πίνακα, αλλά μόνο για το τμήμα του πίνακα που επέλεξε. 
Αν το κλειδί είναι μικρότερο, τότε μειώνει το εύρος στο αριστερό-μισό τμήμα του προηγούμενου τμήματος που εξέταζε και επαναλαμβάνει το πρώτο βήμα όχι για όλο το πίνακα, αλλά μόνο για το τμήμα του πίνακα που επέλεξε.
Μετά από έναν πεπερασμένο αριθμό βημάτων, ο αλγόριθμος είτε θα βρει τη ζητούμενη θέση, είτε θα μειώσει το εύρος της αναζήτησης στο μηδέν, που σημαίνει ότι το κλειδί δεν βρέθηκε στο πίνακα.

100 LET found=0: LET first=1: LET last=length(A)
110 LET mid = INT ((last + first)/2)
120 IF A[mid] = key THEN LET found=1
130 IF A[mid] < key THEN LET last=mid-1
140 IF A[mid] > key THEN LET first=mid+1
150 IF found=0 AND first<=last THEN GOTO 110

Οπου Α τ' όνομα του πίνακα που θέλουμε να εκτελέσουμε  την αναζήτηση, key η μεταβλητή που περιέχει το ζητούμενο και length(A) το μέγεθος του πίνακα Α. 

Αν μετά την εκτέλεση των παραπάνω εντολών η μεταβλητή found έχει την τιμή 1, τότε το περιεχόμενο της μεταβλητής key έχει βρεθεί στη θέση mid, αλλιώς θα έχει τη τιμή 0. 

Αν ο πίνακας είναι ταξινομημένος σε φθίνουσα σειρά, πρέπει να αντιστραφούν οι ανισώσεις στις γραμμές 130 και 140.

ZX81, reverse video

Η εικόνα του ΖΧ81 με λευκό φόντο και μαύρα γράμματα, ίσως είναι κουραστική. Επειδή το σήμα του είναι ασπρόμαυρο, δείχνει πιο όμορφα αν αντιστρέψουμε τα χρώματα, δηλαδή μαύρο φόντο με άσπρα γράμματα!  
Υπάρχει σχετικά εύκολος τρόπος για την "αλλαγή" αυτή! Λειτουργεί σ' όλους του τύπους των τηλεοράσεων και υπάρχει και διακόπτης για "επιστροφή" σε κανονική λειτουργία.

Χρειαζόμαστε τα εξής:
4 x Αντιστάσεις: 100Ωμ, 75Ωμ, 1ΚΩμ και 10ΚΩμ
2 x δίοδοι 1Ν4148
1 x ηλεκτρολυτικό πυκνωτή 10μF
1 x trimmer 4.7 ή 5 KΩμ
1 x τρανζίστορ 2Ν3904
1 x διακόπτη 2 θέσεων
1 x ολοκληρωμένο 74HC86

Κάντε "κλικ" στην εικόνα για μεγέθυνση


 Οι παρακάτω φωτογραφίες είναι από τις δοκιμές, σε TFT 16" TV και CRT 5.5". Στη δεύτερη, εμφανίζεται και η πλακέτα που χωρά μέσα στο υπάρχον modulator.





ZX Spectrum 128K+2 gray, AV composite


Σύμφωνα με το pinout του RGB, υπάρχει έτοιμο το composite σήμα στο pin1. Αυτό όμως δεν είναι τελείως σωστό! Είναι το composite σήμα με συγχωνευμένο το σήμα του ήχου, και με λίγο περισσότερη τάση (δηλαδή τελικά, φαίνεται με πολύ φωτεινά χρώματα και με περιοδικά παράσιτα).


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


Πατήστε "κλικ" στην εικόνα για μεγέθυνση

Για ν' απαλλάξουμε το σήμα video, από το σήμα του ήχου, πρέπει ν' αποσυνδέσουμε τον πυκνωτή C31 από τη πλακέτα του Spectrum, αυτό βέβαια καταργεί τον ήχο από το RF σήμα!

Πατήστε "κλικ" στην εικόνα για μεγέθυνση

ZX Spectrum, Μαθηματικά πέρα από το manual


Στον ΖΧ υπάρχουν έτοιμες συναρτήσεις, τις οποίες μπορείτε να τις βρείτε σ' οποιοδήποτε manual, δεν υπάρχουν όμως όλες οι ρίζες (εκτός της τετραγωνικής), σ' αυτό θα επιστρατεύσουμε την Αλγεβρα....  

Αν θέλω τη ν-οστή ρίζα του x, χρησιμοποιώ τον τελεστή ύψωσης σε δύναμη μ' εκθέτη το (1/ν), π.χ.:


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

1. ^
2. * /
3. + -

Στην περίπτωση που η παράστση έχει τελεστές πράξεων με ίδια προτεραιότητα, εκτελούνται από αριστερά προς τα δεξιά. Αν θέλουμε ν' αλάξουμε τη σειρά εκτέλεσης των πράξεων, κάνουμε χρήση παρενθέσεων.


Στον ΖΧ, καθορίζετε μια συνάρτηση με την τοποθέτηση της DEF δήλωσης κάπου στο πρόγραμμα. Παραδείγματος χάριν, ο καθορισμός μιας λειτουργίας FN της οποίας το αποτέλεσμα είναι το τετράγωνο ενός αριθμού...

DEF FN s(x)=x*x

Το s μετά από την DEF FN είναι το όνομα της function. Το x μέσα στις παρενθέσεις είναι ένα όνομα το οποίο αναφέρετε στο argument (ή παράμετρος) της function. Μπορείτε να χρησιμοποιήσετε ένα γράμμα γι' αυτό (ή, αν το argument είναι λέξη, ένα γράμμα με δίπλα το $).

Μετά το σύμβολο = ακολουθεί ο πραγματικός καθορισμός της function. Αυτό μπορεί να είναι οποιαδήποτε έκφραση και μπορεί επίσης να αναφερθεί το argument χρησιμοποιώντας το όνομα που έχετε δώσει (σε αυτό το παράδειγμα το x) σαν να ήταν μια συνηθισμένη μεταβλητή.

Όταν εισαγάγετε μια τέτοια γραμμή, μπορείτε να καλέσετε την function ακριβώς όπως τις ενσωματωμένες του ΖΧ functions, με τη δακτυλογράφηση του ονόματός της, FN s, ακολουθούμενο από το argument. Θυμηθείτε ότι όταν καθορίζετε μια λειτουργία οι ίδιοι, το argument πρέπει να εσωκλείεται εντός παρενθέσεων. Δοκιμάστε...

PRINT FN s(2)
PRINT FN s(3+4)
PRINT 1+ INT FN s ( LEN "chicken"/2+3)

Μόλις βάλετε την αντιστοιχία της DEF δήλωσης μέσα στο πρόγραμμα, μπορείτε να χρησιμοποιήσετε την δική σας functions στις εκφράσεις ελεύθερα.

Bubble sort, μέθοδος ταξινόμησης

Πολλές φορές στα προγράμματά μας, έχουμε δεδομένα σε πίνακα και θέλουμε να τα ταξινομήσουμε (π.χ. περιέχουν ονόματα που τα θέλουμε με σειρά αλφαβητική). Ο παρακάτω κώδικας είναι ο ποιο απλός και ονομάζεται "ταξινόμηση της φυσαλίδας". Η δομή που χρησιμοποιώ παρακάτω, είναι "μη δομημένου"  προγραμματισμού, για να ταιριάζει σ' όλες τις εκδόσεις Basic των 8bit υπολογιστών μας.

100 LET swap=0
110 FOR i=2 TO
length(A)
120 IF A[i-1] A[i] THEN 
    LET temp=A[i-1]: 
    LET A[i-1]=A[i]:
    LET A[i]=TEMP: 
    LET swap=1
130 NEXT i
140 IF swap = 1 THEN GOTO 100

Οπου Α τ' όνομα του πίνακα που θέλουμε να ταξινομήσουμε και length(A) το μέγεθος του. Αν θέλουμε φθίνουσα ταξινόμηση (δηλαδή το μεγαλύτερο στη πρώτη θέση), αλλάζουμε τη φορά της ανίσωσης στη γραμμή 120.

ZX81 HiRes, UDG's

Εφ' όσον έχουμε εξοπλίσει τον ZX81 μας με τη δυνατότητα γραφικών (που έχω αναλυτικά εδώ), μπορούμε να έχουμε μικρούς γραφικούς χαρακτήρες, ή και τα Ελληνικά γράμματα!

Η διαδικασία είναι εύκολη αν έχουμε φορτώσει το HRG-16K (ή το HRG-64K ανάλογα το είδος της μνήμης που έχουμε τροποποιήσει), γράφοντας τις παρακάτω γραμμές:

10 LET HRG=32736
20 PRINT USR HRG, ON
30 PRINT USR HRG, UDGNEW
40 PRINT USR HRG, UDGSET, CODE "A", 24, 24, 16, 126, 24, 60, 36, 102

Μετά την εκτέλεση των παραπάνω εντολών, στη θέση του Α θα εμφανίζεται το "ανθρωπάκι" του παραδείγματος, που βρίσκεται εδώ.

ZX Spectrum 128K+3, Printer port


Ως γνωστό στους κατόχους του, ο plus 3 έχει επιπλέον και μια έξοδο παράλληλου εκτυπωτή. Σ' αυτή την έξοδο μπορούμε να συνδέσουμε οποιοδήποτε παράλληλο εκτυπωτή για σύγχρονο PC, αρκεί να έχουμε φτιάξει το παρακάτω καλώδιο.
Ο plus 3 έχει σαν προεπιλογή από τη rom του τη παράλληλη έξοδο, οπότε δε χρειάζεται να κάνουμε τίποτ' άλλο, δουλεύουν κανονικά οι εντολές LLIST και LPRINT.

Χρειαζόμαστε ένα εσωτερικό καλώδιο σύνδεσης για disk drive 5.25" (34pin) και ένα 25pin d-Sub. H αρίθμηση είναι από την πλευρά που φαίνονται εξωτερικά! 


Πρέπει με ξυράφι ν' αφαιρέσουμε την ασφάλεια στο καλώδιο του drive, γιατί η παράλληλη του Spectrum, έχει το "κενό" ασφαλείας μεταξύ 4ου και 5ου pin.


Στη δική μου κατασκευή, έφτιαξα από την αρχή και τις δύο "επαφές".

TIP
Επειδή και ο Amstrad CPC έχει (όμοια) θύρα παράλληλου εκτυπωτή, μπορεί να μη ταιριάζει το pinout (επειδή στέλνει 7bit χαρακτήρες), με τη παραπάνω συνδεσμολογία όμως, μπορούμε να συνδέσουμε και εκεί τον εκτυπωτή μας! Στην ουσία, συνδέουμε με την γείωση το 8ο bit, ώστε να μπορεί να δουλέψει ο εκτυπωτής!

MSX, UDG's

Οι MSX υποστηρίζουν UDG's σε Screen 1 mode. Για να βρούμε την διεύθυνση του πρώτου byte του χαρακτήρα που θέλουμε ν' αλλάξουμε, χρησιμοποιούμε τη παράσταση BASE(7)+ASC(a$)*8, όπου α$ είναι ο χαρακτήρας μας.

Αφού επιλέξουμε ένα χαρακτήρα κι' έχουμε βρει τα bytes που του αντιστοιχούν (το πως περιγράφεται στην σελίδα Βοηθήματα στο θέμα Σχεδιασμός UDG's), γράφουμε τον παρακάτω κώδικα:

10 SCREEN 1
20 AD=BASE(7)+ASC(a$)*8
30 FOR J=0 TO 7
40 READ R:VPOKE AD+J,R
50 NEXT J
60 DATA 24,24,16,126,24,60,36,102

Οπου a$, ο χαρακτήρας που θέλουμε ν' αντικαταστήσουμε με το "ανθρωπάκι" του παραδείγματος. Δεν μπορούν ν' αντικατασταθούν όλοι οι γραφικοί χαρακτήρες του msx, πρέπει λοιπόν να κάνουμε δοκιμές! Προτείνω τους χαρακτήρες που εμφανίζονται με ταυτόχρονο πάτημα του πλήκτρου "GRPH".

ZX Spectrum 48K/128K, UDG's

Η Sinclair Basic του ZX, υποστηρίζει UDG's στους χαρακτήρες A έως S σε Graph Mode (δηλαδή επιλέγοντας πριν το graph mode "G"), με συνολικά 19 χαρακτήρες.

Η USR είναι μια συνάρτηση που μετατρέπει ένα γράμμα-μεταβλητή (string argument) στη διεύθυνση του πρώτου byte στη μνήμη, για την αντιστοιχία του user defined graphic. Το string argument πρέπει να είναι ένα γράμμα από το A έως το S. Η POKE εντολή εγκαθιστά έναν αριθμό σε μια θέση μνήμης, παρακάμπτοντας τους μηχανισμούς που χρησιμοποιούνται κανονικά από την BASIC.

Αφού επιλέξουμε ένα χαρακτήρα απ' αυτούς κι' έχουμε βρει τα bytes που του αντιστοιχούν (το πως περιγράφεται στην σελίδα Βοηθήματα στο θέμα Σχεδιασμός UDG's), γράφουμε τον παρακάτω κώδικα:

10 FOR n=0 TO 7
20 READ r : POKE USR "Α"+n, r
30 NEXT n
40 DATA 24,24,16,126,24,60,36,102


Αφού το "τρέξουμε"....

Αυτός ο χαρακτήρας θα εμφανίζεται με το  πάτημα GRAPH+A.

Σχεδιασμός UDG's

User Defined Graphics, σημαίνει ορισμένα από τον χρήστη γραφικά. Είναι χρήσιμα στο να εισάγουμε στα προγράμματά μας ειδικούς χαρακτήρες (όπως τα Ελληνικά γράμματα που λείπουν από το Λατινικό πληκτρολόγιο), ή να σχεδιάσουμε γραφικά για "απλά" παιχνίδια.

Κάθε χαρακτήρας αποτελείται από μια ομάδα 8x8 pixel's, πρέπει να σχεδιάσουμε σ' ένα τέτοιο πίνακα τον χαρακτήρα που θέλουμε, και μετά να βρούμε τον ακέραιο αριθμό που αντιστοιχεί σε κάθε γραμμή του (όπως φαίνεται στο παρακάτω σχεδιάγραμμα).



Κάθε pixel στην γραμμή του, αντιστοιχεί σε μια δύναμη του 2, π.χ. το πρώτο είναι 2^7, το δεύτερο 2^6 μέχρι το όγδοο που είναι 2^0=1. Πρέπει να προσθέσουμε τους ακέραιους αυτούς όπως φαίνεται στο παραπάνω παράδειγμα και το σύνολο των 8 αυτών ακεραίων που προκύπτουν, αποτελεί τα DATA του χαρακτήρα μας.

Αυτοί οι οκτώ αριθμοί αποθηκεύονται σε οκτώ θέσεις (bytes) στην RAM που αντιστοιχούν στον χαρακτήρα. Κάθε μια από αυτές τις θέσεις έχει μια διεύθυνση. Το πως "περνάμε" αυτά τα δεδομένα στο μηχάνημά μας, εξαρτάται από την Basic του μηχανήματος και την αρχιτεκτονική του.

ZX Spectrum 128Κ +2Α/+2Β/+3, RGB Scart Cable



Από τα πιο εύκολα καλώδια στην κατασκευή, αφού η έξοδος RGB του Spectrum έχει και ήχο, αλλά και την απαραίτητη τάση για τη σωστή λειτουργία. Με την αντίσταση των 330Ωμ, προστατεύουμε και την τηλεόραση από υπέρταση.



Πατήστε "κλικ" στην εικόνα για μεγέθυνση

Σημείωση: 
Στην περίπτωση Γαλλικού +2 grey, αυτή η συνδεσμολογία πρέπει να χρησιμοποιηθεί!!! 

ZX_Jim Greece

e-mail: dcotsos2015@gmail.com