Hobby Basic, ένας μικρός διερμηνευτής για την κονσόλα των Windows

Να 'σαι καλά xdir :thumbup:

Είχα την Commodore Logo σε δισκέτα στα ’80s, αλλά δεν έτυχε να τη δουλέψω πολύ.
Η DR Logo ήταν εξαιρετική έκδοση -όπως οι περισσότερες γλώσσες στον Amstrad. Θυμάμαι ότι είχε ένα εκτενές σετ εντολών.

Πολύ ενδιαφέρον project! Με τι την υλοποίησες; GDI, SDL, DirectX;
Η σχεδίαση γίνεται από το GDI αλλά η προβολή στο παράθυρο της εφαρμογής (Plotter) μπορεί να γίνει είτε μέσω του τυπικού DC είτε μέσω DirectDraw surface (DirectX) -καθορίζεται από τον χρήστη.

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

Στο τέλος πρόσθεσα έναν πλήρες editor (με syntax highlight, auto-suggestion κλπ), έναν Debugger / Inspector για όλα τα τμήματα του συστήματος (μεταβλητές , sub functions κλπ) και μια ενσωματωμένη βοήθεια που μοιάζει με το παλιό WinHelp το οποίο προτιμούσα ανέκαθεν από το νεότερο CHM.

Ακολουθεί ένα screen-shot με τα βασικά σημεία του λογισμικού ανοικτά:
TLOGOFSCR.png

Και ένα video που είχα αναρτήσει παλιότερα στο κανάλι μου όπου ο μεταφραστής σχεδιάζει ένα τρίγωνο Sierpinski - port ουσιαστικά από ένα demo του Amstrad CPC πλην ότι τα χρώματα είναι σταθερά.
 
Φαίνεται ότι έχει γίνει πολλή δουλειά -μπράβο για το project xdir, ανταποδίδω το respect.

Ένας μικρός editor με syntax highlighting είναι στα μελλοντικά μου σχέδια για την Hobby BASIC. Πιστεύω πως θα κάνει το project πιο ελκυστικό και θα προσελκύσει περισσότερους φίλους. Επειδή όμως, δεν θέλω σε καμία περίπτωση να χρησιμοποιήσω third-party εργαλείο και η ανάπτυξή του σε assembly είναι χρονοβόρα, θα χρειαστεί χρόνος. Ωστόσο, έχω ήδη ξεκινήσει, με περίπου 20% ολοκληρωμένο. Προς το παρόν, το project βρίσκεται στον πάγο, καθώς έχω επικεντρωθεί στην ανάπτυξη του διερμηνευτή.
 
Φαίνεται ότι έχει γίνει πολλή δουλειά -μπράβο για το project xdir, ανταποδίδω το respect.

Ένας μικρός editor με syntax highlighting είναι στα μελλοντικά μου σχέδια για την Hobby BASIC. Πιστεύω πως θα κάνει το project πιο ελκυστικό και θα προσελκύσει περισσότερους φίλους. Επειδή όμως, δεν θέλω σε καμία περίπτωση να χρησιμοποιήσω third-party εργαλείο και η ανάπτυξή του σε assembly είναι χρονοβόρα, θα χρειαστεί χρόνος. Ωστόσο, έχω ήδη ξεκινήσει, με περίπου 20% ολοκληρωμένο. Προς το παρόν, το project βρίσκεται στον πάγο, καθώς έχω επικεντρωθεί στην ανάπτυξη του διερμηνευτή.
Σε ευχαριστώ!

Για τον editor δες το Rich Edit control, προσφέρει πολλές δυνατότητες παραμετροποίησης των περιεχομένων του σχετικά εύκολα (μέσω μηνυμάτων) δίχως ανάγκη για subclass ενώ παράλληλα υποστηρίζει το TOM COM interface για πιο εξωτικές δυνατότητες (πχ. Text Range collapse/expand κλπ).

Καλή συνέχεια!
 
Υπάρχει ήδη ένας βασικός σκελετός κώδικα (προερχόμενος από τον MASM). To θέμα είναι πως ο προγραμματισμός GUI στα Windows με assembly είναι ιδιαίτερα απαιτητικός-πολύπλοκος, και καταναλώνει αρκετό από τον χρόνο και την ενέργειά μου. Καλή συνέχεια και σε σένα!

Στην φώτο, Rich Edit σε Win32 assembly (μέγεθος εκτελέσιμου 17kb).

1740340485137.png
 
Το MazezaM είναι ένα παιχνίδι παζλ που ξεκίνησε από τον Spectrum και έχει μεταφερθεί σχεδόν σε όλες τις πλατφόρμες.

Η αρχική έκδοση περιλάμβανε 10 δωμάτια, αλλά δημιούργησα ένα remake στην Hobby BASIC, το οποίο αποτελεί πιστή αναπαραγωγή της έκδοσης του Puzzlescript, με 30 δωμάτια. Κάποια από αυτά αποδείχθηκαν τόσο δύσκολα, που σε ορισμένες περιπτώσεις εγκατέλειψα την προσπάθεια και ακολούθησα το walkthrough για να τα ολοκληρώσω!

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

Είναι ένα ενδιαφέρον και ιδιαίτερα απαιτητικό παζλ.

Στον φάκελο EXAMPLES\GAMES\WIN10\MAZEZAM.BAS θα βρείτε τον κώδικα του παιχνιδιού.

Windows 10 console screenshot.

1740614869579.png

Have fun with Hobby BASIC.
 
Το ZNAX είναι ένα παιχνίδι που είχα γράψει το 2005 χρησιμοποιώντας ActionScript στο Flash.

1741100250584.png

Έχει μεταφερθεί σε πολλές πλατφόρμες, περιλαμβανομένων των:
Έχει επίσης εμπνεύσει άλλα παιχνίδια παζλ, όπως το Jooleem, το οποίο έχει μεταφερθεί σε πολλές πλατφόρμες.

Αποφάσισα να ξαναγράψω το ZNAX στην Hobby BASIC, γιατί η πρώτη έκδοση για XP ήταν απλώς... απογοητευτική.
Ο πρώτος κώδικας ήταν ένα βιαστικό hack σε μια παλιότερη έκδοση του διερμηνευτή, με περιορισμούς και σαφώς λιγότερες δυνατότητες από την σημερινή έκδοση.

Η νέα έκδοση είναι ουσιαστικά μια επανεγγραφή από το μηδέν, με προσεγμένο κώδικα και αξιοποίηση νέων χαρακτηριστικών και δυνατοτήτων της Hobby BASIC. Είναι κάπως ιδιαίτερο για μένα το γεγονός ότι, 20 χρόνια μετά, ξαναγράφω το παιχνίδι, αυτή τη φορά χρησιμοποιώντας τη δική μου γλώσσα προγραμματισμού.

Ο πηγαίος κώδικας του παιχνιδιού βρίσκεται στον φάκελο: EXAMPLES\GAMES\WIN10\ZNAX.BAS και online.

Windows 10 console screenshots.

1741100817728.png

1741100823949.png

Have fun with Hobby BASIC.
 
Αναμοχλεύοντας παλιές αναμνήσεις, βρέθηκα σε αυτή την ιστοσελίδα χθες το βράδυ. Θυμήθηκα πως τα πρώτα μου sprites τα είχα φτιάξει με αυτόν ακριβώς τον τρόπο, ακολουθώντας το εγχειρίδιο του C64 (με το αερόστατο, για όσους το θυμούνται). Σήμερα, υπάρχουν εξαιρετικοί sprite editors για τη δημιουργία πολύχρωμων sprites στον 64. Σκέφτομαι πως η Hobby BASIC έχει όλες τις δυνατότητες για κάτι αντίστοιχο, και ίσως μια μέρα να γράψω έναν τέτοιο επεξεργαστή. Αλλά μέχρι τότε, ας γράψω λίγες γραμμές κώδικα για να παίξω λίγο.

Ο κώδικας δημιουργεί ένα παράθυρο όπου μπορούμε να σχεδιάσουμε ένα sprite με το ποντίκι.
Με αριστερό κλικ σχεδιάζουμε, με δεξί κλικ σβήνουμε, και με το πλήκτρο Space καθαρίζουμε την οθόνη.
Πατώντας ENTER ο κώδικας εξάγει τα DATA του sprite.

Κώδικας:
    ROWS = 24
    COLS = 21
    VK_ENTER = 13
    VK_SPACE = 32
    FILE_OR_FOLDER_EXISTS = 3
    MARGIN = 2

    mouseX fix V0
    mouseY fix V1
    mouseButton fix V2

    dim sprite[ROWS, COLS]
    spritePath$ = PATH("DATA\TEMP\SPRITE.TXT")

    def isMouseWithinBounds() = (mouseX > 1 and mouseX < ROWS + MARGIN and mouseY > 1 and mouseY < COLS + MARGIN)

    view 1, 7   ! show window, font size 8x8
    screen ROWS + MARGIN * 2, COLS + MARGIN * 2, 0
    cursor 0
    color 7, 7
    cls

    resetScreen()

    do
        mouse

        if isMouseWithinBounds()
            refreshWindowTitle()
            if (mouseButton = 1 or mouseButton = 2)
                pen (2 - mouseButton) * 15
                while mouseButton <> -1
                    mouse
                    refreshWindowTitle()
                    if isMouseWithinBounds() then at mouseX, mouseY, '█'
                endw
            endif
        endif

        if KEY(VK_ENTER)
            generateSpriteData(10000)
            save spritePath$, spriteData$
            if FILE(spritePath$, FILE_OR_FOLDER_EXISTS) <> 0
                command$ = "start notepad.exe " + spritePath$
                exec command$
            endif
        elseif KEY(VK_SPACE)
            resetScreen()
        endif

        wait 1

    until KEY(27)

    cls : end

sub resetScreen()
    color 0,0
    paint MARGIN, MARGIN, ROWS, COLS, -1, -1
ends

sub refreshWindowTitle()
    title mouseX - MARGIN + 1, ',', mouseY - MARGIN + 1
ends

sub generateSpriteData(lineNumber)
    local x, y, lineNumber

    for y = 0 to COLS - 1
        for x = 0 to ROWS - 1
            cinfo x + MARGIN, y + MARGIN
            sprite[x , y] = mouseButton
        next
    next

    spriteData$ = ""

    for y = 0 to COLS - 1
        set 0, byteGroup1, byteGroup2, byteGroup3

        for x = 0 to 7
            if sprite[x, y] then byteGroup1 = byteGroup1 | (1 << (7 - x))
        next

        for x = 8 to 15
            if sprite[x, y] then byteGroup2 = byteGroup2 | (1 << (15 - x))
        next

        for x = 16 to 23
            if sprite[x, y] then byteGroup3 = byteGroup3 | (1 << (23 - x))
        next

        spriteData$ = spriteData$ + STR(lineNumber) + " data " + STR(byteGroup1) +\
            ',' + STR(byteGroup2) + ',' + STR(byteGroup3) + EOL$
        lineNumber += 10
    next
ends

1741601845909.png
1741601125067.png

1741601395310.png


Φόρτωσα το sprite στον VICE emulator. Τι φάση.

1741601508024.png

Aυτά για την ώρα με τον C64. Θα επανέλθω άλλη στιγμή.



Έκλεψα λίγο χρόνο το Σαββατόβραδο που πέρασε και έγραψα το D-Star με την Hobby BASIC χρησιμοποιώντας ANSI γραφικά στην κονσόλα των Windows. Χαρακτήρες δηλαδή του extended ASCII σετ. Θα βρείτε τον κώδικα στα συνοδευτικά προγράμματα του διερμηνευτή, μέσα στον φάκελο GAMES. Καλά πήγε για τις λίγες ώρες που ασχολήθηκα. Η version που έγραψα το 2005 υπάρχει ακόμα online.

D-Star is a clone of an old puzzle game originally written for TI-83/84 calculator
The object of the game is to collect the yellow diamonds
You move all the way to the next wall with every move
You may use spacebar to switch your place with the red block
Try to clear the board in the least number of moves
You have 1024 moves limit to complete 10 mazes
Use keyboard arrows to move
Press spacebar to switch
Press 1 to restart room


HOBBY-BASIC-DSTAR.png

Αποφάσισα να το ξαναγράψω στην Hobby BASIC, αξιοποιώντας τις νέες δυνατότητες και τα βελτιωμένα χαρακτηριστικά της.

Το D-Star παζλ δημιουργήθηκε αρχικά για το TI-83/84 calculator.
Στόχος του παιχνιδιού είναι η συλλογή όλων των κίτρινων διαμαντιών.

Κάθε κίνηση μεταφέρει τον παίκτη μέχρι τον επόμενο τοίχο.
Με το πλήκτρο διαστήματος, γίνεται εναλλαγή θέσης με το μπλοκ πλακίδιο.
Ο πίνακας πρέπει να καθαριστεί με τις λιγότερες δυνατές κινήσεις.
Υπάρχει όριο 1024 κινήσεων για την ολοκλήρωση 10 λαβυρίνθων.

Η κίνηση γίνεται με τα βελάκια του πληκτρολογίου.
Με το spacebar γίνεται εναλλαγή θέσης με το μπλοκ πλακίδιο.
Το πλήκτρο 1 επανεκκινεί τον λαβύρινθο.

Ο πηγαίος κώδικας του παιχνιδιού βρίσκεται στον φάκελο: EXAMPLES\GAMES\WIN10\DSTAR.BAS.

Windows 10 console screenshot.

1741522565888.png

Have fun with Hobby BASIC.
 
Θυμάμαι να προσπαθώ με locomotive basic να φτιάξω δικές μου ελληνικές γραμματοσειρές, κανοντας απειρα πειράματα για να φτιάξω κάτι που να μοιάζει με το πρόγραμμα Προπό που είχα δει να τρέχει σε ενα Προποτζίδικο. Χωρίς editor χωρίς τίποτα, μονο μαντεψιές και νούμερα.

Φίλε μου εχεις φτιάξει κάτι εξαιρετικό και χαίρομαι που είσαι στην ομάδα και μάς γράφεις για τέτοια πράγματα.
 
Φίλε μου εχεις φτιάξει κάτι εξαιρετικό και χαίρομαι που είσαι στην ομάδα και μάς γράφεις για τέτοια πράγματα.
Να 'σαι καλά, Rygar. Δεν σου κρύβω πως κάποιες φορές αναρωτιέμαι αν υπερβάλλω με τις συχνές αναρτήσεις για την Hobby BASIC. Από την άλλη, σκέφτομαι ότι είναι απλά ένα thread, οπότε δεν βαριέσαι.

Πρώτα ο Θεός, θα συνεχίσω και το 2025 να αναπτύσσω τον διερμηνευτή. Με μεγάλη χαρά και ικανοποίηση βλέπω πως, με ελάχιστες ρυθμίσεις, η Hobby τρέχει στα Windows 11 το ίδιο καλά – αν όχι καλύτερα – με κάθε νέα έκδοση της κονσόλας. Αυτό το credit το δίνω στη Microsoft. Και παρόλο που η Hobby πλέον επικεντρώνεται στις νεότερες εκδόσεις των Windows (από τα 7 και έπειτα), η καρδιά της παραμένει στα ρετρό ANSI γραφικά.

Θυμάμαι να προσπαθώ με locomotive basic να φτιάξω δικές μου ελληνικές γραμματοσειρές, κανοντας απειρα πειράματα για να φτιάξω κάτι που να μοιάζει με το πρόγραμμα Προπό που είχα δει να τρέχει σε ενα Προποτζίδικο. Χωρίς editor χωρίς τίποτα, μονο μαντεψιές και νούμερα.
Νομίζω πως αρκετοί από εμάς που ασχοληθήκαμε με χομπίστικο προγραμματισμό στα 80s, εφαρμογές προσπαθήσαμε να γράψουμε αρχικά, και αργότερα παιχνίδια. Τηλεφωνικούς καταλόγους, προγράμματα βιορυθμών, ατζέντες, κ.τ.λ.. Με αυτά μάθαινες.
 
Πίσω
Μπλουζα