Assembly Programming Using Commodore 64 Kernal Routines

  Рет қаралды 4,985

Josip Retro Bits

Josip Retro Bits

Күн бұрын

In this episode, we use the Commodore 64 KERNAL routines and create some interesting effects on the screen with just a few lines of Assembly code. Even if you don't know how to program assembly, don't worry, part of the video is dedicated to explaining the basics of assembly programming.
☕ If You like this video you can buy me a coffee: ko-fi.com/josipretrobits ☕
INDEX:
======
0:00 - Intro
1:08 - Demo Assembly code
1:46 - Assembly language Basics
12:55 - Writing first Assembly code
20:46 - C64 Memory Map and Kernal Routines
27:45 - Example no. 1
30:50 - Example no. 2
34:28 - Example no. 3
38:43 - Example no. 4
39:31 - Example no. 5
44:36 - Example no. 6
49:29 - Example no. 7
53:58 - Example no. 8
55:13 - The End
SOURCES CODES:
==============
github.com/josipk/Commodore64...
CHECK OUT:
==========
‪@8BitRetroReFix‬
‪@CaptainCommodore‬
‪@Retro4u‬
‪@8bitsinthebasement‬
CHECK OUT MY OTHER COMMODORE/ACORN VIDEOS:
==========================================
🕹️ Commodore 64 Programming: • Commodore 64 Programming
🕹️ Commodore 64 Hardware Videos: • Commodore 64
🕹️ Commodore 64 Plus/4 Videos: • Commodore Plus/4
🕹️ Acorn Electron Videos: • Acorn Electron
🕹️ Commodore 64 Games and Demos: • Retro Games and Demos
🕹️ The Pong Game Projects: • The Pong Game Projects
#c64 #kernal #assembly #programming #retrocomputing #demo #visualeffects #assemblylanguage #commodore64 #routines

Пікірлер: 82
@jimmydandy9364
@jimmydandy9364 18 күн бұрын
When I did programming on my C--64, I used BASIC a lot, much faster to write software, but I also used assembler a lot too, because BASIC would be way too slow for certain things, so I mixed both, I did BASIC and assembly for some routines and embedded those routines in my BASIC program through the SYS command. I did some pretty impressive and fast BASIC stuff this way - It was very useful for BASIC programs with background stuff, through the use of interrupt routines in assembler.
@JosipRetroBits
@JosipRetroBits 17 күн бұрын
Oh Yes, that was the thing back then and still is, if You want to speed up some parts of the BASIC code, just inject that part in the memory (machine code) and call it with SYS. And Yes, BASIC couldn't handle interrupts so for that You would need to use assembly/machine code for sure :) Cool! Thank You for watching :)
@macdaddyns
@macdaddyns 25 күн бұрын
Really like your style of teaching, thanks for sharing your knowledge and time!
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Thank You very much :) Cheers!
@Commodoreretro-programming
@Commodoreretro-programming 19 күн бұрын
Very interesting video. The Kernal contains indeed fun to use ready-to-go routines !
@JosipRetroBits
@JosipRetroBits 18 күн бұрын
Yes it does and what I show in the video is just a very small amount of those routines :) Thank You for watching :) Cheers!
@HelloKittyFanMan
@HelloKittyFanMan 24 күн бұрын
Haha, wow, interesting way to write an ML assembly: using a BASIC listing as your playground (but then still having to have the underlying programmer assemble it).
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
Yes, back then this was a very nice way to program/develop in assembly and compile/run on the same machine. Now it's way better to develop on a modern pc and then just test on C64, but I like this first method, don't know why, feels natural :) Thank You for watching :) Cheers!
@CaptainCommodore
@CaptainCommodore 25 күн бұрын
Nice explanation as always, assembly for everyone.......
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Thank You :)
@saganandroid4175
@saganandroid4175 20 күн бұрын
I imagine discovering RunStop/Restore is going to change your life. I can't imagine not having that available! It was essential in my experience. ProTip: sharp quick taps on the Restore key. It's weird that speed of tap can make a difference sometimes but it really does. Gotta be in how downside transition of the signal generates the NMI.
@JosipRetroBits
@JosipRetroBits 18 күн бұрын
I think that will change my life tremendously :) Thank You for watching :) Cheers!
@RudysRetroIntel
@RudysRetroIntel 24 күн бұрын
Excellent video and work! Thanks for sharing all your knowledge
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Thank You Rudy :) I enjoy this stuff and I do hope I managed to share my enthusiasm with all of You :)
@ajarivas72
@ajarivas72 23 күн бұрын
​@@JosipRetroBits Great video. I had a Commodore 16 in 1985. My classmate had a Commodore 64. Any idea where I can find the user's manual. There were very good Basic codes in that book.
@PeranMe
@PeranMe 23 күн бұрын
This is like ”stupid pet tricks”, except a generation or two later :-) Lots of fun stuff, thanks for this, I enjoyed it a lot!
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
Ha Ha, something like that :) Thank You very much :) Cheers!
@WilcoGroothand
@WilcoGroothand 20 күн бұрын
nice examples on how assembly works. Thx
@JosipRetroBits
@JosipRetroBits 20 күн бұрын
Glad you liked it and thank You for watching :) Cheers!
@byteforever7829
@byteforever7829 23 күн бұрын
Excellent video! I like the Mikro assembler as well, i'm definitely going to try that soon
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
Thank You very much :) Yes I like MA too, I know it's way easier to develop on a modern machine these days but this feels so natural to me :) Cheers!
@8BitRetroReFix
@8BitRetroReFix 25 күн бұрын
Interesting stuff .. nicely explained, mate
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Thank You Steve :)
@Ferrie123
@Ferrie123 23 күн бұрын
Very well explained 👍 enjoyable stuff ❤
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
Glad you enjoyed it and thank You for watching:) Cheers!
@TheUtuber999
@TheUtuber999 20 күн бұрын
19:50 I would probably use JSR $FFE4, then BEQ LOOP. That way you can exit by pressing any key. 31:03 This effect only works on PAL C64s. On NTSC machines, it just displays somewhat random garbage.
@JosipRetroBits
@JosipRetroBits 18 күн бұрын
Thank You for your information, uuu, ok I need to check what is the problem with 31:03 on NTSC, to be honest, I didn't check if ti works on all systems. Cheers!
@m0nde
@m0nde 25 күн бұрын
very well explained
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Thank You and thanks for watching :)
@wadz668
@wadz668 15 күн бұрын
Programming definitely is a LOT of fun. I find it more fun than playing games
@wolfman946
@wolfman946 23 күн бұрын
Interesante información sobre Commodore 64
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
Thank You very much :) I really enjoy exploring C64 routines and I hope this video is interesting to watch :) Cheers!
@CDP1861
@CDP1861 22 күн бұрын
My first computer had a hex keypad and allowed to enter machine code directly. No assembler needed. A rough start, but after that you are afraid of nothing anymore 🙂
@JosipRetroBits
@JosipRetroBits 21 күн бұрын
Ha ha, that is awesome :) Oh, those are the first kit comp.? with just a numeric keyboard? Programming in machine code directly, You have my respect, Sir. :)
@CDP1861
@CDP1861 21 күн бұрын
@@JosipRetroBits Yes, it's a kit from the time when you could not buy a computer in stores yet. A Netronics Elf II. I still used ut until I bought a Atari ST and still have it. You should take a look at the processor (a CDP1802) if you are really interested in 8 bit computers. Not exactly mainstream, more like RISC before that was officially invented.
@saganandroid4175
@saganandroid4175 15 күн бұрын
Does this basic assembler lack comment or rem features? If would be useful in these videos. Really useful. You know that tone left on at about 55:05? RunStop Restore fixes sound/noise too.
@AngryCVO
@AngryCVO 22 күн бұрын
As an ICT-professional, also very interested in retro-computing, I see many videos about different computer & network stuff on youtube and other media. I must say that this one is amazing. You explain this in a professional way. Lots of video's have lots of hesitating as if the teacher sees what appears on his screen for the first time. Not in your case. You master the knowledge perfectly. This video gave me lots of ideas and teached me stuff I was looking for. Thank you very much.
@JosipRetroBits
@JosipRetroBits 21 күн бұрын
Thank You very much :) Just to be clear, there are people in the retro community who have more knowledge and teaching capabilities than I do. I wish You the very best in Your retro journey and welcome aboard :) Cheers!
@saganandroid4175
@saganandroid4175 24 күн бұрын
16:00 You don't need to power off! Just hit RunStop/RESTORE and that should work.
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Hi, not with machine code (assembly code). That only works with BASIC code. But I've implemented that option later in the video. Thank You for watching :)
@saganandroid4175
@saganandroid4175 24 күн бұрын
@@JosipRetroBits that's weird because l remember RunStop/Restore working for ML unless it was specifically disabled. Hold down RunStop while you sharply tap RESTORE several times. I know the C64 needs a rapid transition on the restore key- usually several. Why, l don't know. But slow wrists were less successful. I suppose this could be a Mandela memory Effect since l haven't tried this is decades. But l could swear this triggered an interrupt that sends you back to the ready prompt. Try it and let me know.
@HelloKittyFanMan
@HelloKittyFanMan 24 күн бұрын
@@saganandroid4175: Yeah, that's what I remember as well. I wonder why he never bothered to try it. I have just set my 128/64 back up and I have just re-encountered ones that have _disabled_ the restore key for exiting; and in fact, they restart the programs instead; and you can even soft-reset from 64 back into 128, run something there, and then soft-reset or go64 back into 64 and that program immediately restarts! BUT... if I remember right, it had to be specifically programmed to do that; otherwise what you were saying would indeed happen. I'll have to go through my disks and make a count list of some sort to see if we're right: which is the exception or the rule. And yeah, on an original 64 you do have to hit "restore" fairly hard. I don't know about the C, but on the 128 in either mode you don't. Why don't you set your 64 back up now too?
@saganandroid4175
@saganandroid4175 21 күн бұрын
@@JosipRetroBits try it. Run your ML code. Hold down RunStop and nothing happens. Now while holding that key down, sharply smack the Restore key several times. That should generate a NMI. But on most C64s you need a quick sharp wrist action on the Restore key because only the trailing edge of that line is useful. Try it and report back.
@JosipRetroBits
@JosipRetroBits 21 күн бұрын
@@saganandroid4175 Aaaa ok, got it! Thanks :)
@Jemacaza
@Jemacaza 21 күн бұрын
Very nice video.
@JosipRetroBits
@JosipRetroBits 20 күн бұрын
Thank You very much and thank You for watching :) Cheers!
@Jemacaza
@Jemacaza 19 күн бұрын
@@JosipRetroBits if I just knew this back in the eighties.. those kernel routines are very useful. Back then it was really hard to get this kind of info and explanations. I only changed colors and did some sprites as an teenager in assembly. Could you even imagine what an impact it had if everybody had an assembler and this kind of kernel-routine info back then ..
@JosipRetroBits
@JosipRetroBits 18 күн бұрын
@@Jemacaza Yes for sure. For comparison, the first time I used C64 was retyping some game from the magazine. I didn't understand anything :) Now it's so much easier to get information and to learn new stuff. And of course, You can develop and test your code on the modern PC before you run it on the real C64 and this much faster and easier way to do this. :)
@saganandroid4175
@saganandroid4175 24 күн бұрын
21:12 there is a bad edit about PAL jiffy timing. Can't tell if you are saying is same 60Hz for PAL or 50Hz. I would read the text description onscreen but your PIP narration window blocks it.
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
It is the same on PAL and NTSC machines, 1/60th of a second. (60 times per second) Sorry, maybe I didn't explain that very well in the video :) Thank You for watching, Cheers!
@HelloKittyFanMan
@HelloKittyFanMan 24 күн бұрын
You have to turn off the computer just to get out of that 4096 loop? Why won't the stop/restore key combo work, even though I've seen it stop plenty of ML programs before, without your having to look for a press of "stop" or "stop/restore"?
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
Run/Stop key will not stop ML execution only execution of BASIC code. That is why I needed to implement STOP key detection to exit the program in my examples. Thank You for watching :) Cheers!
@JayH_Norway
@JayH_Norway 24 күн бұрын
Really interesting stuff! One thing though: At 45:02 ... What is the reason for EOR $d012 and not simply LDA $d012 ? Am i missing something vital here?
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Thank You :) EOR to get more random values in A. Whatever is in A we EOR with D012 and that will give more random numbers than just loading D012 :)
@JayH_Norway
@JayH_Norway 23 күн бұрын
@@JosipRetroBits But the accumulator will always have the same value (255 / $ff) on each iteration due to your JSR to $FFE1, so I cannot see how that would increase randomness. Try adding STA $d020 in line 22 and you will see what I mean.
@JosipRetroBits
@JosipRetroBits 21 күн бұрын
Ok will try. I never checked value in A when returning from $FFE1, but yes You are probably right :) Thank You!
@hai.1820
@hai.1820 24 күн бұрын
I hope we had youtube back then ^^
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
Yes, it is so much easier to find and share information these days :) Thank You for watching ;) Cheers!
@HelloKittyFanMan
@HelloKittyFanMan 24 күн бұрын
We didn't, so I've dashed your hope. Sorry.
@CityXen
@CityXen 25 күн бұрын
C64 4EVA!
@JosipRetroBits
@JosipRetroBits 24 күн бұрын
4EVA & EVA :) Thank You for watching :) Cheers!
@HelloKittyFanMan
@HelloKittyFanMan 24 күн бұрын
JCR? What's that, especially when you typed "JSR" while saying it?
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
I did pronounce that incorrectly, sorry about that. JSR is "Jump to Subroutine", or "Jump to Routine". Cheers!
@nagyandras8857
@nagyandras8857 19 күн бұрын
why not jump to 20 ?
@JosipRetroBits
@JosipRetroBits 18 күн бұрын
Well, those numbers are part of a BASIC code. I used Mikro Assembler cartridge so that I could write on C64 and compile and run the assembly code on C64. But, You don't need those numbers if you use some other assembly compiler. You can compile the code on a modern PC and then just run it on C64. For assembly language the labels are important. ...and those labels are converted to memory addresses during the compile process.
@nagyandras8857
@nagyandras8857 18 күн бұрын
​@@JosipRetroBits I mean you had 10 loop lda $d020 20 adc #01 30 sta $d020 40 jmp loop Why not 20 loop adc #01 ?
@JosipRetroBits
@JosipRetroBits 17 күн бұрын
@@nagyandras8857 Yes this is where I want to explain how lda and sta instructions work. This is not a good code :) A more efficient way would be to have a loop label on line 20, yes! But also, we have direct instruction if we want to increment by one, just direct "inc $d020". If we want a different increment value then we can use Your suggestion, Yes. Sorry, I didn't get what are you asking the first time :)
@saganandroid4175
@saganandroid4175 15 күн бұрын
Always, ALWAYS show what the program does first, THEN the source.
@ehudgavron1
@ehudgavron1 23 күн бұрын
What's a kernal? Do tell.
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
KERNAL is Operating System on Commodore 64. Cheers!
@Joel-qz6sd
@Joel-qz6sd 20 күн бұрын
I will try to explain what I know about the kernal. The C64 kernal is a place in the memory addresses that have a whole list of premade routines that you can execute at any point in your assembly code for example ones like PRINT, LOAD, RUN, LIST, GOSUB,GO TO etc. just routines that call up basic commands. I don't know a whole lot else about the kernal though.
@JosipRetroBits
@JosipRetroBits 20 күн бұрын
@@Joel-qz6sd Yes, a bit more than that. but in general Yes. Kernal is simply an operating system on Commodore 64. It also takes care of all other operations on the system, like cursor, serial communication, time, etc.
@ehudgavron1
@ehudgavron1 20 күн бұрын
@@Joel-qz6sd No, really, there's no such thing as a kernal. Perhaps you're trying to explain "kernel."
@SpeccyMan
@SpeccyMan 23 күн бұрын
KERNEL, no A!
@JosipRetroBits
@JosipRetroBits 23 күн бұрын
Sorry. It's KERNAL :) Thank You for watching :)
@JayH_Norway
@JayH_Norway 21 күн бұрын
I suggest that you check your facts before offering such bombastic corrections. On the C64 it is and always has been spelled KERNAL. en.wikipedia.org/wiki/KERNAL
How Does Epyx Fastload Make Loading Faster on a Commodore 64?
29:16
Commodore History
Рет қаралды 32 М.
Assembly and Basic code together on Commodore 64 | Mikro Assembler
29:06
Josip Retro Bits
Рет қаралды 3,1 М.
Stay on your way 🛤️✨
00:34
A4
Рет қаралды 21 МЛН
Fast and Furious: New Zealand 🚗
00:29
How Ridiculous
Рет қаралды 35 МЛН
Iron Chin ✅ Isaih made this look too easy
00:13
Power Slap
Рет қаралды 36 МЛН
Doom didn't kill the Amiga...Wolfenstein 3D did
16:58
Modern Vintage Gamer
Рет қаралды 708 М.
Best POKE Ever? For Commodore 64
22:21
8-Bit Show And Tell
Рет қаралды 42 М.
Coding a plasma effect demo on the Commodore 64 (tutorial DIY)
12:30
Commodore 64 & 6510 retro-programming
Рет қаралды 2,1 М.
WHY IS THE STACK SO FAST?
13:46
Core Dumped
Рет қаралды 143 М.
Games That Push The Limits of the Commodore 64 in Surprising Ways
20:11
The 6502 CPU Powered a Whole Generation!
25:17
The 8-Bit Guy
Рет қаралды 460 М.
Commodore 64 COBOL For Fun And Profit?
21:25
8-Bit Show And Tell
Рет қаралды 51 М.
Nature's Incredible ROTATING MOTOR (It’s Electric!) - Smarter Every Day 300
29:37
Harder Drive: Hard drives we didn't want or need
36:47
suckerpinch
Рет қаралды 1,6 МЛН
Опасность фирменной зарядки Apple
0:57
SuperCrastan
Рет қаралды 10 МЛН
Rate This Smartphone Cooler Set-up ⭐
0:10
Shakeuptech
Рет қаралды 5 МЛН
Looks very comfortable. #leddisplay #ledscreen #ledwall #eagerled
0:19
LED Screen Factory-EagerLED
Рет қаралды 5 МЛН
Лазер против камеры смартфона
1:01
Newtonlabs
Рет қаралды 726 М.
low battery 🪫
0:10
dednahype
Рет қаралды 937 М.