C64 Assembly : Hello World

I wanted to start out with something simple when beginning to look at Assembly. The traditional Hello World output seemed like the best choice for this. I’ve taken an example from the excellent ‘The Anatomy of The Commodore 64‘ and Old Skool Coder‘s Youtube channel for this one.

Starting the Code Block

The first thing we have to do is to emulate assembling the program and run it from BASIC. As if it was a program that we had bought on a tape. If you are using the CBM Assembler there is an easy way to do this.

First Tell the Assembly where to start from in memory .

Then go to Tools -> Generate Sys Call and then press OK. It should have picked up the start of your memory address from your previously typed code.

So now you should see something like this –

On the Commodore 64, BASIC memory starts at 2040 (0x800) so we place some code in here which theC64 will interpret as a BASIC program.

If you are running Kick Assembler you can replace these lines of code with:

This is a macro which then points to the beginning routine of your program.

Changing the Color of your screen and Border

Let’s look at the next section of code. This changes the color of our screen background to black and sets our Text color to white.

We begin by loading the color black into the accumulator – lda #$00.

We next store this value in the border color address – which is $d020

We also store this value in the background color address – which is $d021

Next we load the color white into the accumulator – lda #$01

We store this value in the cursor color address – which is $0286.

Right now you may be asking me how I know these addresses? Is this magic? Well no, it’s because I have a handy memory reference which you can find here.

Now we want to clear the screen of all text so that we can display our message clearly.

We do this by calling the screen function to clear the screen – which is $e544. Again this is not magic, you can find a good list of screen functions here.

We haven’t coded the sub routine that will draw our text yet but it will be called draw_text. This is where we jump to that subroutine – jsr

Drawing the Text to the Screen

With this code we complete our project. We create the label .msg and place a C style string in it.

We draw the text by placing the color white in the x registry ldx #$00

Next we enter a loop and draw each character, loading the message into the accumulator – lda msg,x.

We place 2 lines below the word – sta $05e0,x

Increment the value in the x registry – inx

Check is all 40 cols of the line are processed – cpx #$28

If they are not then continue to go back to the draw loop until the sentence is done – bne draw_loop.

When run we should see :

Entire Listing:

2 thoughts on “C64 Assembly : Hello World

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s