What's new
iamretro

Wow! It seems you have yet to create an account with us! Needless to say, you have to register in order to get the full "iamretro" experience! You will then be able to create your own topics, reply to posts and be an active member of the MOST prolific community in Greece (even further than that, but we're being modest for now). So don't delay! REGISTER!

Atari 8-Bit Programming: Τυχαία σχέδια σε ATASCII

sly*m

Retro Addict
Comrade
Joined
Oct 30, 2018
Messages
643
Αυτό είναι ένα πρόγραμμα σε Atari Basic, που φτιάχνει τυχαία σχέδια σε ATASCII σπέσιαλ χαρακτήρες.

Code:
100 REM *************************
110 REM * RANDOM CHARS PATTERNS *
120 REM *      BY SLY*M         *
130 REM *************************
140 DIM CHARS1$(10),CHARS2$(4),CHARS3$(6),CHARS4$(4),CHARS5$(2),CHARS6$(2)
150 GRAPHICS 0
160 RANDOM=53770
170 PREVLINE=0
180 POKE 710,0
190 DL=PEEK(560)+PEEK(561)*256
200 SCR=PEEK(DL+4)+PEEK(DL+5)*256
210 FOR T=1 TO 10:READ A:CHARS1$(T)=CHR$(A+64):NEXT T
220 FOR T=1 TO 4:READ A:CHARS2$(T)=CHR$(A+64):NEXT T
230 FOR T=1 TO 6:READ A:CHARS3$(T)=CHR$(A+64):NEXT T
240 FOR T=1 TO 4:READ A:CHARS4$(T)=CHR$(A+64):NEXT T
250 FOR T=1 TO 2:READ A:CHARS5$(T)=CHR$(A):NEXT T
260 FOR T=1 TO 2:READ A:CHARS6$(T)=CHR$(A+64):NEXT T
270 INV=INV+128
280 IF INV>128 THEN INV=0
290 SEED=PEEK(RANDOM)
300 LINE=INT(RND(SEED)*6)*30+390:IF LINE=PREVLINE THEN GOTO 300
310 PREVLINE=LINE
320 FOR T=0 TO 40*24-1
330 R=RND(SEED)
340 GOSUB LINE
350 NEXT T
360 GOTO 270
370 END
380 REM *****************************
390 R=INT(R*10)+1
400 POKE SCR+T,ASC(CHARS1$(R))+INV
410 RETURN
420 R=INT(R*4)+1
430 POKE SCR+T,ASC(CHARS2$(R))+INV
440 RETURN
450 R=INT(R*6)+1
460 POKE SCR+T,ASC(CHARS3$(R))+INV
470 RETURN
480 R=INT(R*4)+1
490 POKE SCR+T,ASC(CHARS4$(R))
500 RETURN
510 R=INT(R*2)+1
520 POKE SCR+T,ASC(CHARS5$(R))
530 RETURN
540 R=INT(R*2)+1
550 POKE SCR+T,ASC(CHARS6$(R))+INV
560 RETURN
570 REM *****************************
580 DATA 1,3,4,5,17,18,19,23,24,26
590 DATA 2,6,7,14
600 DATA 9,11,12,15,21,25
610 DATA 8,10,136,138
620 DATA 0,128
630 DATA 6,7


Το είχα φτιάξει κάμποσα χρόνια τώρα, αλλά τελευταία πρόσθεσα και τον πολύ απλό "λαβύρινθο" από το 1-liner του Nick Montfort για τον C64.

Υλοποιούνται 6 arrays από ATASCII γραφικούς χαρακτήρες, τα CHARS1$ έως CHARS6$.
Το κάθε ένα έχει τους αντίστοιχους χαρακτήρες για να τυπώσει κάποιο "λαβύρινθο".

Οι χαρακτήρες είναι τα ascii data στις γραμμές 580 για το CHARS1$, 590 για το CHARS2$, έως 630 για το CHARS6$.
Τυπώνονται κάνοντας κατ' ευθείαν poke στην ram της οθόνης, γι αυτό όταν διαβάζονται στα arrays προστίθεται το 64 (γραμμές 210 έως 260), εκτός από την CHARS5$ που έχει μόνο το space και το 'inverse video' του και στην screen ram έχουν τιμές 0 και 128.

Στην 190 βρίσκουμε την διεύθυνση του Display List, που μας δείχνει την διεύθυνση της οθόνης, γραμμή 200.

Επειδή δείχνουμε 6 διαφορετικά arrays, η τυχαία ανάκτηση των χαρακτήρων που έχει το κάθε ένα υλοποιείται ξεχωριστά σε 3 γραμμές αντίστοιχα: 390-400-410 για την CHARS1$, 420-430-440 για την CHARS2$ κλπ.

Το πρόγραμμα τρέχει σε λούπα (γραμμή 270 έως 360).
Κάθε φορά, καλεί τυχαία μία από τις 6 ανακτήσεις χαρακτήρων και η κλήση υπολογίζεται στην γραμμή 300. Επίσης κάθε φορά αλλάζει το inverse video, γραμμή 270, που προστίθεται στις τιμές των ATASCII, για να κάνει την απεικόνιση λίγο πιο ενδιαφέρουσα.

Ο "λαβύρινθος" του Nick Montfort υλοποιείται στο array CHARS6$.

rndchars01.png
Οι χαρακτήρες του CHARS1$.

rndchars02.png
Οι χαρακτήρες του CHARS2$.

rndchars03.png
Οι χαρακτήρες του CHARS3$.

rndchars04.png
Οι χαρακτήρες του CHARS4$.

rndchars05.png
Οι χαρακτήρες του CHARS5$.

rndchars06.png
Οι χαρακτήρες του CHARS6$.

Το text αρχείο "RNDCHARS.LST" μπορεί να φορτωθεί από τους emulators του 8-bit Atari. Θα πρέπει να σβηστεί η επέκταση ".TXT" πρώτα.

Στήνουμε έναν σκληρό δίσκο από φάκελο, ρυθμίζουμε τον emulator να κοιτάει και το device "H" στον φάκελο του Pc και κάνουμε enter το LST στην basic, από το device "Η6".

rndcharsatari.png

Ελπίζω να διασκεδάσει όποιον το τρέξει!

Edit: Επισύναψα και to Basic πρόγραμμα, το RNDCHARS.BAS.zip, ώστε όποιος έχει 8μπιτο Atari και τρόπο να το περάσει (sio2sd, sio2usb, sio2arduino κλπ) να μπορεί να το τρέξει στο real μηχάνημα.
 

Attachments

  • RNDCHARS.LST.TXT
    1.5 KB · Views: 2
  • RNDCHARS.BAS.zip
    918 bytes · Views: 1
Last edited:

geoanas

Commodore Vampire
Staff member
Comrade
Joined
Oct 21, 2012
Messages
7,315
Ότι είπε ο Antonio πιο πάνω! :rolleyes:

Congrats mate! :thumbup::thumbup::thumbup::thumbup: Θα μελετηθεί αργότερα...τώρα διαβάζω δυο θεριά ανήμερα! :)
 

dimfil

Retro Mentor
Comrade
Joined
Mar 4, 2017
Messages
1,269
Όμορφα πράγματα!
Ένας 8μπιτος Atari μας λείπει βέβαια... Καλοί οι emulators αλλά να το τρέξεις τελικά και στο μηχάνημα έχει άλλη χάρη...
 

dimfil

Retro Mentor
Comrade
Joined
Mar 4, 2017
Messages
1,269
Μη με κάνεις να κατεβάζω το 800 από τη ντουλάπα! :confused::D
Χα, χα...!!!
Εγώ φανταζόμουν ότι έχεις στημένο μηχάνημα και η προτροπή για emulator πήγαινε σε εμάς τους υπόλοιπους!

Εγώ πάντως, επειδή εδώ και καιρό "ψήνομαι" για 8μπιτο atari, θα βάλω μια αγγελία ζήτησης σιγά σιγά, και αν μετά τις γιορτές δεν έχει γίνει τίποτα τότε θα στραφώ αναγκαστικά σε κανα eBay...
 

sly*m

Retro Addict
Comrade
Joined
Oct 30, 2018
Messages
643
Εγώ φανταζόμουν ότι έχεις στημένο μηχάνημα
Δεν είναι στημένο, το έχω σε μια κούτα στη ντουλάπα.. Βασικά η προτροπή για τον emulator είναι βέβαια για όποιον δεν έχει 8μπιτο Atari και τυχαίνει να διαβάσει το thread. Ψάχνω και γώ ένα 810 drive.. το δικό μου τα 'φτυσε και είναι κεφαλή... :(
 
Last edited:

sly*m

Retro Addict
Comrade
Joined
Oct 30, 2018
Messages
643
Ανέβασα στο κύριο post και το Basic πρόγραμμα για να μπορεί, όποιος έχει κανονικό 8μπιτο Atari, να το τρέξει. Δείτε το 'edit' στο τέλος.
 

dimfil

Retro Mentor
Comrade
Joined
Mar 4, 2017
Messages
1,269
Νομίζω μια καλή "άσκηση" θα ήταν αν τέτοιες ιδέες τις υλοποιούσαμε οι υπόλοιποι και σε άλλες διαλέκτους Basic άλλων μηχανημάτων. Σίγουρα αρκετοί θα ωφεληθούν και κάποιοι επίσης θα "ξεσκουριάσουν"...

Βέβαια, μετά τις γιορτές τώρα πια...
 
Top