loading...

I coded in assembler on the Commodore Amiga in the early 90s, ask me anything!

twitter logo github logo ・1 min read

The Commodore Amiga can be seen as a successor of the legendary Commodore 64 (C64). It was a home computer with graphics and sound so good that regular PCs could not compete at the time. That made it an awesome gaming machine.

But apart from that, it had an easy enough to understand system architecture, so that a lot of kids programmed on it in assembly language. I was one of them, ask me anything!

twitter logo DISCUSS (27)
markdown guide
 
 

I learned it from books. There was particular one book that was really thick, unfortunately I can‘t remember the title, that contained lots of detailed information about memory management, interrupts and so on.

I remember my parents bought me a red book about the „AmigaDOS“ even before the Amiga computer, and I flipped through it. Then, on one page, I found the command „say sth“.
You could type in words and a robot voice would read them aloud. I remember how excited I was, it was unbelievable for me. Probably the moment I decided I wanted to program the Amiga.

 

Hi, fellow Amiga enthusiast (and demo scene participant) here.

You're probably thinking of the ROM Kernel Reference Manual, AKA The Bible. It contained everything about the HW of the machine, which was out-of-this-world advanced for the time.

Eh, it brings back memories.

I think you‘re right. Thanks for refreshing my memory.

 

Nice! I actually had the opposite experience with a Commodore 64, copying BASIC programs out of a book and giving up when they didn't work right. It took me 20+ years to take up programming after that. I loved that Commodore, but programming it didn't work out for me.

Oh yes. I also remember typing nightmares with machine code. You would enter a line of hexadecimal values, and get a hash code as confirmation of correctness. After doing that hundreds of times, you would run it, and it still didn’t work :)

Programming assembler was much more fun. You programmed in a symbolic language. E.g. you used JMP to enter a sub routine. And got proper error messages from the assembler.

 
 

Hi,
Do you still remember what
btst #6, $bfe001;
do? ;-). Greetings.

 

Check if the left mouse button is pressed? :)

 

Yes. I guess it is one of those hardwired connections in the brain, you just can't forget about.
Greetings from Berlin,
r.

I'm just curious, but how comes btst #6, $bfe001; is related to left mouse button?
Could you please explain in simple terms?

What btst #6, $bfe001 does is: check whether bit 6 of the value at address $bfe001 is set.

$bfe001 is the hexadecimal address of a hardware register of the Amiga.
It is a fixed value - so that hardware register is always addressable by $bfe001.

The value you get when you read that register contains an information at bit number 6. When bit 6 is set, the left mouse button is pressed, otherwise not.

Does that help? I assumed you know about the hexadecimal system and bits...

Wow thanks! That makes sense. I assume code back then must have a lot of comments to explain these kinds of stuff.

 

Are you familiar with Rust? What do you think of that language? Do you have any experience with Rust?

There is a caveat to this question.

Assembly is pretty low level.
What I want to tell is that Rust is has low level performance and low level access, but it's a language with higher lever abstractions.

What did you feel when you went from low level language to a higher language(I see you know Java, Python, C++)?

 

Hi Anton.

To give you some perspective on what I was doing back then: I couldn't even use built in fonts. A friend of mine drew them, and I copied the image of each letter on the screen to show text.

Back then, I didn't have a choice because the only way to get the performance needed was to code in assembler. Learning higher level languages, and the libraries that came with them, was a huge relief. So nowadays, I prefer to write code in higher level languages (mostly Java).

I have heard about Rust. Looks interesting. Each language has its own characteristics and nuances, and may be better suited to accomplish what you want in certain contexts. And sometimes the effect of I/O on performance is way stronger than smart algorithm design. That's why it is helpful to find the bottlenecks, when you’re optimizing performance.

 

jsr forbid(a6) FTW!

Loved writing 68k on the Amiga using ASMone, studied a lot of demoscene work (had no choice, had to hack into many Amiga demos to even run on my NTSC-only Amiga 1000), coming to understand how the Amiga's custom chipset worked and writing little demos that made pretty pictures that friends showed around.

One of the most beautiful things about the Amiga is that Copper. It was more responsible than even the Blitter for the smoothness of Amiga's visuals. The dragging entire screens of different resolutions was entirely in the Copper, which was a sort of dedicated graphics processor that only knew like 4 instructions (if I remember right).

Importantly, entirely independent of the CPU, it could wait for a precise point as the CRT beam swipes by and stuff values into Amiga's chipset registers, like display pointers, screen modes, color values, trigger Blitter operations. It meant you could build a whole queue of tasks that run independent of the CPU and deterministically locked to screen timing, and still have tons of CPU cycles left over to make fun stuff happen.

 

Oh yes, the copper. I remember the cycling „copper bars“ from a lot of intros/demos (including my own). You could set any new color every few pixels - incredible at the time.

 
 

No, I don’t. On the Amiga, you didn’t really have a choice. Even relatively close-to-the-metal languages like C had a far worse performance on the Amiga for the kinds of applications I was writing (graphics intensive, real-time).

Today, I think there is only a small niche left where assembler is useful. Even cars, that have heavy real-time requirements, mostly run on C.

 

Was it fun?

Do you imagine computer environments would be more fun or less fun for your young self?

 

It was loads of fun. My friends and me, we were all self-motivated to learn. There was little support by adults - programming was simply not something they could relate to at all.

How would it be for my younger self today? Hard to say, I can only guess. There‘s are a lot more resources today, from online tutorials/courses to Stack Overflow.
I think my younger self would have liked that.

 

Do you still own an Amiga? If yes, when did you last switch it on? If no, why not? (You should... :P)

 

I don't own an Amiga anymore. What's worse: all the 3.5" discs with the sources got lost. I wish I could have a look at what I wrote back then :(

 

I remember C64 had BASIC, are you saying Aminga hsd just assembler? Or I am confusing the models?

 

BASIC was built into the ROM of the C64, so you could start programming it right after connecting it to your TV screen and switching it on. In contrast, AmigaBASIC shipped with the Amiga „Workbench“ - the GUI of the Amiga. Both BASICs were developed by Microsoft, by the way.

Classic DEV Post from Aug 29 '19

How can open source contributors and maintainers engage in a respectful ongoing relationship?

Bertil Muth profile image
Agile coach and developer

Hey there reader...

Do you prefer sans serif over serif?

You can change your font preferences in the "misc" section of your settings. ❤️