DEV Community 👩‍💻👨‍💻

Bertil Muth
Bertil Muth

Posted on

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

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!

Top comments (29)

Collapse
briankephart profile image
Brian Kephart

Where'd you learn the language?

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

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.

Collapse
jpop32 profile image
Jovica Popovic

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.

Thread Thread
bertilmuth profile image
Bertil Muth Ask Me Anything

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

Collapse
briankephart profile image
Brian Kephart

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.

Thread Thread
bertilmuth profile image
Bertil Muth Ask Me Anything • Edited on

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.

Collapse
joelnet profile image
JavaScript Joel • Edited on

I forgot about that say command. This brings me back!

youtu.be/ILgKv-WGcV0

Thread Thread
bertilmuth profile image
Bertil Muth Ask Me Anything

Yes!

Collapse
robedeb profile image
Robert E. Dębowski

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

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

Check if the left mouse button is pressed? :)

Collapse
robedeb profile image
Robert E. Dębowski

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

Thread Thread
jokyspy profile image
Hiep Le • Edited on

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

Thread Thread
bertilmuth profile image
Bertil Muth Ask Me Anything • Edited on

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...

Thread Thread
jokyspy profile image
Hiep Le

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

Thread Thread
bertilmuth profile image
Bertil Muth Ask Me Anything

Yes, indeed.

Collapse
antonrich profile image
Anton • Edited on

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++)?

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything • Edited on

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.

Collapse
njrabit profile image
Bun E. Brewster

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.

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

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.

Collapse
jskogsta profile image
Jorgen Skogstad

Is there any decent cross dev environments for the Amiga? For C64 asm work, using osx+c64debugger+kickass+sublime+vice, which works really well.. of course, could do straight on the amiga, but i am out and about a bit and most only carry my mac's around.. would be neat if it would be possible to replicate something similar to the c64.. ;-P

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

I‘m sorry, I don’t know if such an environment exists.

Collapse
chainq profile image
Károly Balogh

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

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

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 :(

Collapse
imben1109 profile image
Ben

Are you still coding in assembler?

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

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.

Collapse
ben profile image
Ben Halpern

Was it fun?

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

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

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.

Collapse
epogrebnyak profile image
Evgeny Pogrebnyak

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

Collapse
bertilmuth profile image
Bertil Muth Ask Me Anything

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.

🤔 Did you know?

 
🎙 DEV hosts some podcasts that you can find on our Podcasts page.