![Masters of the Void](/img/default-banner.jpg)
- 31
- 34 013
Masters of the Void
Germany
เข้าร่วมเมื่อ 23 ก.ค. 2013
Uliwitness's Programming and Retro-Programming channel.
Programming a Finder clone for Mac System 6 (Part 2)
We recap the recent additions of lists (and rewrites necessitated for that), our first custom control, a console window for debugging, segments, find out what files our app has been asked to open, and also talk about lots of classic MacOS details and even a bit about HyperCard. Eventually we move on to actually listing all hard drives. Source code at github.com/uliwitness/filie-system6/
มุมมอง: 453
วีดีโอ
Programming a Finder clone for Mac System 6 (Part 3)
มุมมอง 3772 ปีที่แล้ว
We spend a bunch of time trying to debug our file opening, and eventually decide to just use the newer API for now (as we're developing on OS 9) and hope the old API will magically work on System 6. We also discover how impressive the CodeWarrior debugger was, being able to debug my low-level drawing plugins without locking up the system. In the end we manage to get the app to a point where it ...
Programming a Finder clone for Mac System 6 (Part 1)
มุมมอง 1.6K2 ปีที่แล้ว
We're working on MacOS 9 for now, but the goal is to avoid API that is too new to also work on System 6. Source code at github.com/uliwitness/filie-system6/
shared_ptr: How does "modern" C++ Memory Management work?
มุมมอง 3172 ปีที่แล้ว
We build up our own, simple version of std::shared_ptr and std::weak_ptr step by step, and investigate how they work and why they were designed this way. We end on a few practical tips what to do/not to do with them, too.
Cocoa Memory Primer
มุมมอง 1252 ปีที่แล้ว
A short primer on reference-counted memory management as used for programming iOS devices and Macs.
Making a Programming Language (Part 10): Implementing Function Calls
มุมมอง 5832 ปีที่แล้ว
In this episode we add function calls to our bytecode compiler.
Making a Programming Language (Part 4): Writing a Virtual Machine for Bytecode in C++
มุมมอง 1.2K2 ปีที่แล้ว
Tutorial following up to our "writing a parser in C " tutorial that shows how to write our own small "virtual CPU" for which your parser can compile code. Source code at github.com/uliwitness/bytecodeinterpreter We cover everything up to variables and loops, but only give a short run-down of how one would implement conditionals and function calls. Discord at discord.gg/kvwAkba
Making a Programming Language (Part 5): Writing a Virtual Machine for Bytecode in C++
มุมมอง 1.1K2 ปีที่แล้ว
In this episode, we add 4 powerful instructions to our virtual machine, and all of a sudden we can call functions. Source code at github.com/uliwitness/bytecodeinterpreter Discord at discord.gg/kvwAkba
Making a Programming Language (Part 3): How to write a parser in C++
มุมมอง 8652 ปีที่แล้ว
We delve into expression parsing and end this series with a rambling outlook over what you would have to do once you have a parser. Source code: github.com/uliwitness/simpleparser
Making a Programming Language (Part 2): How to write a parser in C++
มุมมอง 1.2K2 ปีที่แล้ว
Now we actually get to parsing argument lists and the statements themselves. Source code: github.com/uliwitness/simpleparser Apologies, I only just realized that the facecam covers the program output when it is run.
Making a Programming Language (Part 1): How to write a parser in C++
มุมมอง 6K2 ปีที่แล้ว
Writing a tokenizer and start of actual parsing. Source code: github.com/uliwitness/simpleparser Apologies, I only realized that the facecam covers the program output when it is run after I had already recorded two episodes.
Making a Programming Language (Part 8): Implementing Parameter Passing and Loops
มุมมอง 2232 ปีที่แล้ว
We implement parameters and while loops.
Making a Programming Language (Part 7): Combining our Parser and Virtual Machine
มุมมอง 2162 ปีที่แล้ว
We implement basic code generation for immediate values, operators, and the return command.
Making a Programming Language (Part 6): Combining our Parser and Virtual Machine
มุมมอง 3882 ปีที่แล้ว
We start combining the parser and bytecode interpreter from the previous tutorials into a full programming language. Source code at: github.com/uliwitness/parserandcompiler
Making a Programming Language (Part 9): How Objects and Virtual Method Dispatch Work
มุมมอง 2532 ปีที่แล้ว
We covered in the past how to create a parser and bytecode interpreter for a procedural language, not unlike C. Now we create something very much like C objects... but we only use C, allowing you to put it all together to create a C -like object-oriented language.
How to write a HyperCard XCMD-Plugin, and how color works in HyperCard
มุมมอง 1K2 ปีที่แล้ว
How to write a HyperCard XCMD-Plugin, and how color works in HyperCard
Retro Programming: Creating a version control helper with HyperCard (Part 5)
มุมมอง 522 ปีที่แล้ว
Retro Programming: Creating a version control helper with HyperCard (Part 5)
Retro Programming: Creating a version control helper with HyperCard (Part 4)
มุมมอง 362 ปีที่แล้ว
Retro Programming: Creating a version control helper with HyperCard (Part 4)
Retro Programming: Creating a version control helper with HyperCard (Part 6)
มุมมอง 382 ปีที่แล้ว
Retro Programming: Creating a version control helper with HyperCard (Part 6)
Retro Programming: Creating a version control helper with HyperCard (Part 3)
มุมมอง 522 ปีที่แล้ว
Retro Programming: Creating a version control helper with HyperCard (Part 3)
Retro Programming: Creating a version control helper with HyperCard (Part 2)
มุมมอง 512 ปีที่แล้ว
Retro Programming: Creating a version control helper with HyperCard (Part 2)
Retro Programming: Creating a version control helper with HyperCard (Part 1)
มุมมอง 2432 ปีที่แล้ว
Retro Programming: Creating a version control helper with HyperCard (Part 1)
Retro: Programming a MacOS 9 app with CodeWarrior
มุมมอง 9K2 ปีที่แล้ว
Retro: Programming a MacOS 9 app with CodeWarrior
Retro Programming: Building Myst with HyperCard
มุมมอง 1.6K2 ปีที่แล้ว
Retro Programming: Building Myst with HyperCard
Do you take requests? The emulator SNES9x was compiled for OS 9 and X ages ago, but the last versions used are quite buggy. The game Mario Paint has this issue where the mouse crashes into the middle of the screen, thinking it has hit the edge when it has clearly not. Luckily, the current version of SNES9x has fixed this, however, there is no PPC port. Luck on our side, the source code for the latest version IS available and free to tinker with, but I don't possess the know-how on getting it compiled for PPC, namely for OS 9 (preferably), although some would probably appreciate an OS X release of it as well. Might you or anyone here in the comments be willing to get it up and running? That would be so epic!!!
I don't understand how anyone could have made a fully featured program by themselves for classic Mac OS. Yet I remember a LOT of them at the time. Very impressive
Maxmediapro 2 ,is quite good on windows, been using for years, still going even on windows 11, and it compiles to exe. also Decker looks good if you like the black and white hypercard look.
I bought an ibook G3 snow to be a word processing machine, but I can't even get Microsoft word to work with it. Looks like I'm making one from zero
I hope someone can reply but what might have been the use case for a rsrc file independant of a program or an other file at 21:24?
May be to later open it with ResEdit and copy items from it into another Resource Fork...
This is Internet Gold! Thanks for the video! Very useful for people like me who enjoy using classic Mac OS.
You're a wizard! Please keep creating more content 👏🏻👏🏻👏🏻
I’m.a little weirded out as I just came across this video just after waking up (watching some TH-cam before getting up).
This looks easier than Lightspeed C which I was puzzling over back in the day… 😂
I wonder if there's some modern implementation, perhaps with color support.
Could you make a tutorial about how to use the new Appearance Manager controls, especially those new textboxes which you can drag text blocks from and to? I've read those header files for days but still have no idea. Thank you so much.
Useless? This is a goldmine! It saddens me to see the dismal state of software these days. Open source has plunged us into a permanent state of mediocrity.
is processing not some kind of new Hypercard? Loved trying out the tools in Hypercard on my IIci
I learned early Apple GUI development on an Apple IIgs, whose operating system was kind of a slightly evolved version of Mac System ~3. It had a function called TaskMaster() (and TaskMasterDA() for desk accessories) that was more or less what is being described at 1:17:24.
Ah yes, the good old days. Today development is too much tech diarrhea. People need to relearn the value of simplicity. To really learn how to do it get Dave Mark's Macintosh C Programming Primer.
I remember all this... Starting with CW10 Gold. Thanks!
I just started my useless dev journey into Mac OS 9 programming, thank you so much for this!!!
Hahaha I totally agree with you and am also inflicted with this useless intrigue 😂 also PalmOS next up! 😂
And there was NewtCard, a Hypercard clone for the Apple MessagePad. It was made by NS Basic Corporation in the late 90s. NewtCard created stacks on the Newton device and used a slate pad UI and tools. It was scripted in a Basic clone made by the same company. It wasn't as powerful as HC. But it produced DBs and simple programs.
Wasn't HyperCard run under the 68LC040 emulator on PPC Macs? AFAIK, it was never ported to PPC, and that was one of the reasons it died off as an obsolete authoring platform, and things like Macromedia Director replaced it, especially since Director had the Shockwave plugin for browsers, and they made a more optimized version, Shockwave Flash, aka. just "Flash" later. Apple/Claris could've gone that route as well, and released some HyperCard browser plug-in, but I guess they lacked the foresight to do so.
I thought HC 2.4.1 was both (FAT) 68k and PPC Native (I'll have to remember to check that later), however many of XCMD/XFCNs were not, which is usually a problem for ABI (Application Binary Interfaces) typically all code has to be for written for the same cpu architecture. Since you mentioned Director, you may find it interesting that Director originally used a HyperTalk-like (xTalk) language called Lingo, but of course that used a movie frames / timeline metaphor instead of card/stacks.
And MacPaint had Mac Draw in the same file. You could rasterize pixel drawings. God I miss the Apple I used to know. And HyperCard was awesome. Scripts and graphics multimedia, etc. layers, templates, no ppt no complex apps. you know what happened. Tech went to the dark side. Everything is internet sales. All my stupid browsers do the same thing… sell you stuff.
I used hypercard to make hypercard programming tools to suit my own ends. I wonder if I can find it now
Very interesting. I love it. I'd be interested in seeing it in Pascal too. C++ is great, but I feel like Pascal is more retro. :D
I'll think about it. I haven't done Pascal in ages, so this would require some preparation, as the only Pascal compiler I own is the one that came with MPW, and I never really used it at the time. I basically started on the Mac using C, reading documentation in Pascal.
Thank you for the video! Have you ever used regex for character analysis? It seems like it would be a bit more efficient rather than a switch statement analyzing specific characters. Regardless, I do appreciate this video very much! It has helped me understand tokenizing a lot more.
To add to this, for anyone watching: Look up ASTs (abstract syntax trees) which is a tree-like structure that organizes the grammars for the language you are writing. As OP wrote in the video under enums, grammars can include identifiers (variables, functions, etc.), operators, int literals, etc. To implement an AST, Djikstra's Shunting Yard Algorithm makes use of stacks to implement a tree-like structure. This, in turn, can be extremely useful when you want your program to correctly process expressions that may utilize order of operations (ex. 1+2*4 vs (1+2)*4). It arranges everything in Reverse Polish notation for analysis.
Regexes work, but are a bit much just for analyzing character classes, and can't be used for full-on parsing, as they don't handle nested constructs like parentheses. You'd also want some sort of "streaming" regex parser to not have to get all regexes matched first, and then create objects from them. But my main reason was that I didn't want to use external dependencies like a regex parser library that viewers might not have.
I really appreciate your commitment! I reckon you probably weren't interested in 68k assembly, but what drove the decision to use C++? I was under the impression they used Pascal.
The original Mac in '84 used Pascal, but they pretty quickly started supporting C in the late 80ies, and by the mid-90ies, C++ was what most apps were written in. Most used existing frameworks like PowerPlant and TCL, or small indie frameworks like MacZoop instead of hand-rolling their own though.
We need Hypercard back for VisionOS and AR
Who remembers SuperCard?
I currently work in CodeWarrior on a game that I’ve got the source code from. It’s a big title from the 90s. It’s amazing to see you work in OS9 in the IDE of CodeWarrior. I really think it is an amazing tool without all the fuss and functionality today. It would be amazing to get in touch with you as you can probably be helpful in my project.
I would have loved to have this video 27 years ago. Yet even today I enjoy watching it.
Thanks for intuitive video series.
Glad you like the videos!
@@mastersofthevoid tx, I am in session 6, I was very much curious to know how bytecode can be generated in assembly direct from the nodes if u detail.
@@amitdubey9384 You recursively call each operation's arguments in the tree to generate an instruction. A value (like a number) is just a PUSH_IMMEDIATE_INT instruction pushing that number. Once you've pushed both arguments, you generate code for the actual instruction (e.g. ADD_INTS), which pops both of its arguments and pushes the result.
Hey those are great videos, and maybe you have the knowledge to help me with my issue, After installing Codeworrior 10 Gold, on reboot I get an error message " Sorry, a system error occurred, MetroNub 1.2 illegal instruction" and advises to disable the extension. if I disable the extension the system works, but I cant get the debugger to work. Any idea how to fix the issue?
I don't know the exact solution, but you need a version of CodeWarrior that matches your version of MacOS. Also, not all emulators support debugging, so if you're emulating MacOS, trying a different (newer?) version of the emulator might help too.
As a young HyperCard enthusiast, I always wondered how Myst was made. This video series is such a delight. Thanks!
R.I.P. HyperCard
Ja z laborek z hihu. Kocham XML, kocham PG.
Nice _Secret of Monkey Island_ reference. I got to work with HyperCard in High School in '90/'91 instead of taking the usual required computers class (which was all Apple 2 stuff I already knew and could have taught.) I made a little bit of a "Choose Your Own Adventure" style thing with HyperCard... it was fun.
God, I miss making crappy little adventure games with Hypercard like I did when I was a kid.
HyperCard was my absolute favorite thing in the universe when I was 10 or 11.
wow!
I like how you mentioned SmallTalk because Hypercard's GUI was like that but more ... fantastic. Sometimes nostr (eg. its protocol of "notes") seems to have the potential for a globally distributed, encrypted, plug and play set of "card" based applications. But Hypercard's scripting was so cool it made you geel like a programmer ... 😍
Just found your channel - Excellent Content! - Would be cool to see how to do Python programming on OS9
I've only done a little Python so far, and I'm not sure I'd be qualified to make a video about that. But I think Macstodon (68000 Mac Mastodon client) was written in Python, might be worth checking in with the developer who wrote that.
You'd want MacPython 2.3. That's the last version that supports Mac OS 9. Beyond that, I'm planning to get some experience with the Macintosh Toolbox APIs in CodeWarrior before I start to experiment with Python.
Ha! I just setup CW on my PowerBook G3 and build a couple sample apps. I loved CW back in the late 90s up til apple killed it with Xcode and OS X. Such a much more fun development environment back in the pre OS X days. I got an issue with CW9 and the MetroNub extension crashing so brought it up to Pro 6 and all good. Built for 68k PPC and Carbon. Now I’m tempted to hit the storage and grab all my jaz disks full of all my old source code I kept from my jobs back then. Fun stuff!
Metrowerks dropped the ball, were slow to port CW and their frameworks (PowerPlant etc) to OSX and slow to embrace the new platform. ProjectBuilder was pretty awful by comparison but it was free. MW could have remained the premier development envisioned but they just didn’t care.
@@kirishima638 yeah. It’s too bad. They were owning it for a good while.
It probably didn't help that they got bought by Motorola, who then sold the Intel compiler to Borland, so when Apple switched to Intel, they couldn't follow along. CodeWarrior still exists as an embedded compiler for Freescale (fka Motorola's CPU division) CPUs though.
@@mastersofthevoid yes that’s right! Didn’t they also sell the intel compiler right before Apple announced the switch?
stop wasting bla bla and work out what you going to say and then just go and say it.. 2 hours..
It's an archive of a live stream. That's how it went.
Hey buddy, how can build bin overlays for PSX and PS2.
They aren't Macs, so I have no idea, sorry.
@@mastersofthevoid Psyq make executable psx files
I have an old game engine, and one of the files extension is .ppob or ppobj. The developer said that it's an carbon file. I'm a noob into coding, so how can I properly compile it? I have sheepshaver with Mac os 9.
I don't know for sure, but it could just be a ResEdit-style resource fork containing the PPob resources separately (if it's an app for MacOS X, then probably just moved into the data fork). You'd just need a copy of CodeWarrior. If it's Carbon, you probably need one of the later MacOS X versions of CodeWarrior. These files don't need to be compiled, they are copied into the application's resource fork (or a special Resources file) and used by PowerPlant to know what a window should look like.
@@mastersofthevoid which version of os x should I use? Also which codewarrior version will be good? Thanks for the answer.
@@creeper2671 You need a PowerPC version of macOS (and a machine/emulator to run it under). That's what those versions of CodeWarrior were for. Or at the least an Intel version of MacOS that still supports the Rosetta I PowerPC emulator. Carbon apps may also run on late MacOS 9 releases, so if you already have that, you can try it on there, too.
@@mastersofthevoid I kinda worked
great insights - if anyone of the younger watchers interested, 1979 the work on C++ started, first official version was come to live around 1985 , ISO standardization of the language in 1998, and the features highlighted here took more than another decade...
Thanks for the added detail :D
fwiw I made the source code to my 1996 PenStorm program for classic Mac available. I rebuilt it recently with Metrowerks 8.3 and uploaded it to Macintosh Repository.
Will you be making a video on MacZoop?
That's a cool idea. I'll keep it in mind.
After watching this I really appreciate your Appkit for Classic project.
There is a successor of hypercsrd, Livecode
thanks
We should protect this person at all costs! Thank you.
Have an old project that I have to modify. Someone I know used the macclassic toolbox to make a windows program. This allowed old Mac programs to run in windows which was handy until I had to modify it. Now I need to learn how to do it. Thanks for the tutorial for ancient is development. PS my colleague said that the code was created when he was 5 years old!
Amazing! I only knew that some people used the bits of MacOS API that were (sort of secretly) included with QuickTime for Windows, wasn't aware other people re-implemented their own version. Would love to see that code put up on GitHub somewhere :D
@@mastersofthevoid I will do this and send you a link. I don't understand the whole thing but I have the sources and maybe I could learn something as well. It could maybe be improved and would allow old os9 apps to run in windows which would be cool.