Manual Base Conversion in PlayBASIC

December 08, 2025

 

Logo

Converting a decimal number stored as a string into Binary, Octal and Hexadecimal


In this tutorial we are going to manually convert a decimal number stored inside a string into:

• Base 2 (Binary)

• Base 8 (Octal)

• Base 16 (Hexadecimal)

This example avoids built-in conversion commands on purpose, so beginners can see how the process works internally.


Example Output Usage

s$="87654321"
print s$ +"="+ ConvertTo(S$,2)
print s$ +"="+ ConvertTo(S$,8)
print s$ +"="+ ConvertTo(S$,16)
print ""

s$="-12345678"
print s$ +"="+ ConvertTo(S$,2)
print s$ +"="+ ConvertTo(S$,8)
print s$ +"="+ ConvertTo(S$,16)
print ""

s$="255"
print s$ +"="+ ConvertTo(S$,2)
print s$ +"="+ ConvertTo(S$,8)
print s$ +"="+ ConvertTo(S$,16)
print ""

Sync
waitkey

Step 1: Manually Converting the String to an Integer

Before we can convert to another base, we must first turn the string into an actual integer value.

This is done digit-by-digit using basic decimal math.

Function ConvertTo(S$,Base)
rem assumed 32bit integers
Total =0
Negate=0

for lp=1 to len(s$)
    Total=Total*10
    ThisCHR = asc(mid$(s$,lp))

    if ThisChr = asc("-") then Negate=1   

    if ThisChr >= asc("0") and ThisCHR<=asc("9")
        Total=Total+(ThisCHR-Asc("0"))       
    endif
next

if Negate then Total *= -1   

What’s happening here?

• Each digit is multiplied into place using base-10 math

• `ASC()` is used to convert characters into numeric values

• The minus symbol `"-"` is detected and applied at the end

This is essentially how a basic `Val()` function works internally.


Step 2: Preparing for Base Conversion

Each output base is selected using bit grouping.

select base
case 2
Shift=1
Characters$="01"
case 8
Shift=3
Characters$="01234567"
case 16
Shift=4
Characters$="0123456789ABCDEF"
endselect

Why these values?

• Binary uses 1 bit per digit

• Octal uses 3 bits per digit

• Hexadecimal uses 4 bits per digit


Step 3: Bitwise Conversion Loop

Now the number is converted using bit masking and bit shifting.

if Shift
Mask    = (2^Shift)-1
Digits = 32 / Shift

    For lp=0 to Digits-1
        ThisCHR = Total and MASK
        Result$ = Mid$(Characters$,ThisChr+1,1) + Result$
        Total = Total >> Shift                               
    next
endif
   

EndFunction Result$

Important notes:

• Output is a fixed 32-bit representation

• Leading zeros are expected and correct

• Negative numbers are shown using two’s complement

The result string is built from right to left because the least-significant bits are processed first.


Summary

This tutorial demonstrates:

• Manual string → integer conversion

• Decimal positional maths

• Bit masking and shifting

• Why binary, octal and hex exist

• How CPUs naturally represent numbers

This approach may not be the shortest, but it clearly shows how the conversion works under the hood — making it ideal for learners.

Complete Code:

    s$="87654321"
    print s$ +"="+ ConvertTo(S$,2)
    print s$ +"="+ ConvertTo(S$,8)
    print s$ +"="+ ConvertTo(S$,16)
    print ""

    s$="-12345678"
    print s$ +"="+ ConvertTo(S$,2)
    print s$ +"="+ ConvertTo(S$,8)
    print s$ +"="+ ConvertTo(S$,16)
    print ""

    s$="255"
    print s$ +"="+ ConvertTo(S$,2)
    print s$ +"="+ ConvertTo(S$,8)
    print s$ +"="+ ConvertTo(S$,16)
    print ""

    Sync
    waitkey
   

Function ConvertTo(S$,Base)
    rem assumed 32bit integers
    Total =0
    Negate=0
    for lp=1 to len(s$)
        Total    =Total*10
        ThisCHR = mid(s$,lp)
        if ThisChr = asc("-") then Negate=1   
        if ThisChr >= asc("0") and ThisCHR<=asc("9")
            Total=Total+(ThisCHR-Asc("0"))       
        endif
    next
    if Negate then Total *= -1   

    Characters$    ="0123456789ABCDEF"
    select base
                case 2
                    Shift=1   
                case 8
                    Shift=3   
                case 16
                    Shift=4   
    endselect   
   
    if Shift
        Mask        =(2^Shift)-1
        For lp=1 to 32 / Shift
                ThisCHR = Total and MASK
                Result$ = Mid$(CHaracters$,ThisChr+1,1) +Result$
                Total = Total >> Shift                               
        next
    endif
       
EndFunction Result$

It Updated Anyway

December 04, 2025

 

Logo

It Updated Anyway

Today Windows decided to update.

Not asked.

Not requested permission.

Just calmly, confidently decided.

I was in the middle of a project, which apparently is the ideal time for the operating system to take control. Saying “no” wasn’t an option, so before letting it do anything I backed up 50GB of project data. Not because I’m paranoid — because experience has trained me well.

That took a while. A long while.

The update finished.

Then it updated again.

And then, within the next hour, it updated again, because clearly the first two weren’t sincere enough.


This Is Fine. Completely Fine.

There was a time when updates happened when you chose a safe moment. Now “Later” just means “Later Today”, and “No” starts a countdown.

You’re not declining anything — you’re just delaying the inevitable.

This isn’t maintenance.

It’s the OS helpfully informing you that your workflow is optional.


Nothing Broke. Except the Day.

I didn’t lose files.

I didn’t lose settings.

I just lost:

  • Time
  • Focus
  • Momentum
  • Which, coincidentally, are the only three things required to actually make progress.

    For anyone building anything — code, art, writing, anything — forced interruptions aren’t a small inconvenience. They reset your brain, break concentration, and quietly burn hours you never get back.


    Personal Computer™️

    The hardware sits right here on my desk.

    But the schedule clearly doesn’t.

    Somewhere along the way, “personal computer” stopped meaning you’re in control and started meaning you’re temporarily allowed to use it — as long as you don’t get in the way of policy.


    The Worst Part

    The worst part isn’t even the updates.

    It’s how normal this has become.

    We don’t ask why anymore. We just make sure our backups are ready and wait it out, like this is weather we can’t predict and don’t control.


    Final Thought

    My computer works perfectly.

    It just doesn’t work for me.

    Remember when a whole generation of kids kick-started the games industry by digging through 8-bit hardware manuals

    November 18, 2025

     

    Logo

    Remember when a whole generation of kids kick-started the games industry by digging through 8-bit hardware manuals?

    I do.

    Back then, we made things simply because coding was how you made things.

    Nobody cared how it looked on a CV. Nobody waited for permission, or worried about “best practices” or “the perfect engine.” We experimented. We shared ideas. We read magazines (ask your parents what a magazine is!). We broke things and fixed them. We layered idea upon idea until the impossible suddenly wasn’t.

    People called it talent.

    It wasn’t.

    It was curiosity, consistency, and a methodical approach to building skills.

    Today? We’re drowning in information. Thousands of tutorials, hundreds of languages, endless opinions echoing in your head: Do this. Don’t do that. You must learn this first. No, learn that.

    It’s no wonder beginners freeze before they even start.

    But here’s the truth:

    If you want to learn to code, pick a language — any language — and give it a shot.

    The specific language matters far less than people claim.

    Once you understand the basics in one, those skills transfer. Moving to another becomes easier. Concepts repeat. Patterns reappear. You build momentum.

    Start small.

    Be proud of the little victories.

    And if your first attempt doesn’t stick? That’s normal. Try again later. You’ll be surprised how much your brain held onto.

    Where you start isn’t where you’ll finish — and that’s the whole point.

    Just keep going!

    #LearnToCode #CodingJourney #ProgrammingMotivation #GameDevBeginners #CodeNewbies #StartCoding #KeepCoding #ProgrammingLife #RetroCoding #OldSchoolComputing #IndieDevLife #GameDevCommunity #SoftwareDevelopment #DeveloperMindset #ProgrammingBasics #CodingTips #CodeEveryday #STEMEducation #TechInspiration #GamedevHistory #8bitComputing #CreativeCoding #BuildInPublic #FutureDevelopers