GeckOS: a Unix-like 6502 operating system | VCFMW 2019

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments

Just leaving this here to spark some ideas...

πŸ‘οΈŽ︎ 3 πŸ‘€οΈŽ︎ u/FredSchwartz πŸ“…οΈŽ︎ Feb 23 2020 πŸ—«︎ replies

when he said multi threating i had to laugh XD

πŸ‘οΈŽ︎ 2 πŸ‘€οΈŽ︎ u/LouserDouser πŸ“…οΈŽ︎ Feb 23 2020 πŸ—«︎ replies

whats the webpage he shows in the video cant find it the same way...the one that explains every detail he mentioned?

πŸ‘οΈŽ︎ 2 πŸ‘€οΈŽ︎ u/LouserDouser πŸ“…οΈŽ︎ Feb 24 2020 πŸ—«︎ replies

I think Contiki might also be worth looking into. Of course, simple getting RomWBW up and running would a fantastic first step.

πŸ‘οΈŽ︎ 2 πŸ‘€οΈŽ︎ u/deelowe πŸ“…οΈŽ︎ Feb 26 2020 πŸ—«︎ replies
Captions
hi everybody i'm glen and i'm gonna be talking about gecko s which is a unix-like operating system for 6502 machines and yes you heard that right picture it didn't happen not only when I show this screen this slide I see well you guys all know who I am and then I flipped to the next slide but there's so many people here this year and so many new people that I figured I better leave it on for a couple of milliseconds at least anyway I've spoken here many times and also at the sadly now-defunct c4 Expo in Cincinnati and at world of Commodore up in Toronto a couple times and I normally talk about programming languages for the Commodore 64 and I've talked about operating systems but it's always been Jia's well that's definitely worth talking about of course but I wanted to do a talk about some of the other operating systems available for the Commodore 64 and this one gecko s is very interesting because it's kind of unix-like ok and of course this is the 50th anniversary of UNIX right so we should party like it's 1969 yeah it's a PDP 11 right somebody would know at this show somebody would know anyway I think it's a PDP 11 so yeah UNIX or a unix-like operating system on a 6502 right ok let me put that another way it has some hurdles to overcome Oh case because on a 6502 first of all there's typically no memory management unit on a 6502 if there are machines that have it our friend our friend Jim brain is rumored to be working on something for example but typically not of course there's not that much memory to manage and there's no hardware memory protection either there's nothing like ring 0 on ring 3 on Intel so a user process could just stop all over the kernel if it wanted to so that that would be a problem it's got a limited number of registers ok that picture of the pdp-11 if I if I have my facts straight that thing had 8 16-bit general registers right what have we got on 6502 essentially an accumulator into index registers and they all answer to different instructions so the coding is gonna be a little more complicated as well and the biggest one of all 6502 does not have a register that says this is where the stack starts the stack is at all 100 now and forevermore so what are you gonna do you know if you have a multitasking operating system how are you gonna multitask what are you gonna do with the stack because you have to preserve the stack for each process that's running well I mean surely you can't take that whole 256 byte stack and copy it out and copy new one and every time you're doing a context switch right well we'll find out later how that works now that's not to say that it hasn't been tried before and there have been other unique seed type operating systems written for the Commodore 64 outside of gecko s there's Lunik who's heard of loon x that's actually fairly well known yeah and there's actually some kind of cross-pollination between gecko x and gecko s and luening x' there's asterisks by chris baird over in Australia who's heard of that one what one person okay that's fairly obscure but it's there I don't think the source code for that is available is it yeah I tried to find it and I couldn't but and then there's ace everybody knows they sold Commodore users anyway no ace right by Craig Bruce that's yeah that's very complete but it's more like the the utilities or UNIX like but the operating system really isn't no none of these are still being developed and not only that in most cases the the people that originally wrote them aren't active in the community anymore the exception to that of course is Andre flesh not the guy who wrote gecko ass and in fact he was just recently in a in a thread on CBM hackers talking about running fast serial on a 1541 and ever popular topic and I even emailed Andre with some questions and he was very gracious with his time and he said oh no you know you had this understood wrong this is really how it works and try this and so he he is still active he's still interested in gecko ass and outside of that gecko s seems to me of all of these to be the most complete the most unix-like and the easiest to work with from the standpoint of build tools and documentation so that's why I chose this one to talk about rather than some of these others there's Andre and he works for IBM over in Germany and when he first wrote gecko s interestingly it was written for a homebrew machine that he built himself a 6502 machine and that machine did in fact have a memory management unit and it supported up to a megabyte of memory so he didn't even have that sack problem when he first wrote gecko eyes but then he decided later on since he was a Commodore a guy that he was going to port it to Commodore 64 and even the pet if you look at his web page for gecko s you'll actually see a youtube video of him demoing it on a 32 K pet you have to see it to believe it I'll tell you and talking about how none of these have been touched in a while actually the last point release of gecko s was was 2013 which is not all that long ago and the source is available in GPL - so Andra did the right thing there this is the machine that he built to run or rather the the machine that gecko s was written to run on this is the one with the the memory management unit and support for memory and there were a number of different versions or variations on this machine it's got brothers and cousins and so forth if you go to that web link there and look at the information about this machine you'll see that he just recently like two weeks ago added a bunch of pictures to the gallery so now there are pictures of this guy's you know extended family and just pictures of taking he takes off one part and you can see what's under it and then very very very interesting to look at but I wanted to show this picture because it's the most intimidating looking all right let's let's talk about the features of gecko s and this is actually a pretty mind-boggling list this is where we get to the stuff like are you kidding you know it is in fact a pre-emptive multitasking operating system not only and it has task priorities okay not only that it's multi-threading now on the commodore 64 and I'll be talking exclusively about the Commodore 64 version of this you can build it for you know a number of different architectures like I said just by changing build time options but on the commodore 64 there maximum of 12 tasks and 12 threads and since of course what he fault every task has one thread if you start running a bunch of multi-threaded programs you'll run out of available threads long before they run out of available tasks and I'll be demoing some of these features with some programs that I wrote it's got signals if you know the PID of another program and it has registered a signal handle or signal handler you can send a signal to that process and by god it'll get it because it's taken care of by the scheduler during interrupt time so it's guaranteed to get a signal it's also got semaphores I mentioned before about how a user process could stomp all over the kernel because of the 6502 architecture well the way around that is to have semaphores and and if you follow the API is like a good citizen and you want to do something you're probably going to ask for a semaphore and try and lock it before you use communication buffers for example and I'll be demonstrating that as well it's got redirection in the shell these last two I haven't worked with too much but it's it also has support for piping environment variables I mean you go down the list and it just becomes more and more amazing and it's got a standard library that our honoree wrote called life 6502 this is this was meant I think for compatibility with other projects that people were working on and in fact as I understand that Lunik uses this same standard library and this is the interesting part it comes with a cross it assembler called x8 and now those of you who know me know how I feel about emulators and cross development tools okay but you know when you're dealing with an operating system basically all bets are off and if you want to learn gecko ass if you want to really learn dig deep into it and learn how it works or we write code for it or whatever really the only way to do it is to run it in an emulator and to build it with cross development tools so I you know I I'm I I'm kind of against the use of emulators and cross development tools except where the life of the programmers in danger okay and it certainly is when it comes to an operating system now the output of this assembler is a relocatable file format which again andre came up with and of course you're gonna need that because if you're running a bunch of programs that are multi tasking you're gonna need to be able to load code at a more or less arbitrary act address so when the kernel loads a program before before it gets executed he's going to do all the address fix-up and everything like that and it also if you ask politely produces an address cross-reference with addresses and with just a couple little standard UNIX utilities you can take that add read that cross reference and convert to something that the Vice monitor can read in and if you do that you can have labels and you can say disassemble the code at forque so that also makes it very pleasant to work with when I started learning gecko s I I was using a super snapshot which if you're not a common R person that's a hardware debugger and I found it really hard to work with I wanted to be single stepping I wanted to be using labels and all this other kind of stuff I mean really you really need to use cost development and emulator and as I was working on this and I've got a couple of printouts of this at my table and that they've already started to disappear so I'm gonna have to go and print some more but I started work on a I guess a commentary you would say on the on the internals of gecko s as I was learning it because you know what happens of course is when you start on a big project like that and you start you're you're starting to learn something and you go oh yeah I should write this down so I remember what I found here you know and you come back the next standing where was that thing oh yeah yeah you got this little scrap of paper here and of course pretty soon you've got a little scrap of paper here a little scrap of paper there and Pat over here and notebook over there and I said to myself well why don't I just make a little webpage for it right that would be easy for me to consult and not only that would be easy to share with other people and I don't know if I left it up here although that's a B box yeah here it is so this is what I've been working on as a sort of commentary on gecko s and if you want to learn about it I would recommend this not to toot my own horn but I spend a lot of time and effort learning it and you can learn everything about it just by looking at this it tells all about the source file layout how to build it what happens when you bootstrap how the scheduler gets started you know the irq service routine and all that kind of stuff and it's all it all has filings and line numbers in the commentary so you should be able to follow you know if you have a question I heard it can do this thing X you know and how would it even do something like that well you can look at the commentary and find where it isn't the source code and start poking around in the source code and by the way the slide title is with apologies to professor Lyons nobody knows the professor Lyons is the Lyons commentary alright so now going back to what I was saying before about 6502 and the stack and how difficult it would be to do any multitasking because of the fixed stack so with all this study I should now be able to answer that question right and yeah I can so first of all yeah the multitasking is interrupt-driven and it's generated by a timer interrupt it does it not not av blank like in the standard Commodore 64 operating system and the stack here's the secret is divided into two parts the upper three-quarters of the stack is reserved for the kernel and the lower 64 bytes are for user programs so so when you want to do when you want to switch from user mode to kernel mode well that's pretty straightforward all you got to do is flip the stack pointers around preserve the registers and you're essentially good to go but what happens now when you want to do a context switch between two user tasks that's a little more complicated well you have to take the current tasks stack copy it to a save area copy in the stack of the new task that's about to run flip their stack pointers around restore the original tasks registers and then you can run it now that sounds like a lot of work but okay we're only talking about 64 bytes and remember it only has to copy from the current stack pointer on up to that 64 bytes so it's really not that bad and the multitasking is fairly smooth you'll see that in the demos in fact they think it's demo time so let me put my money where my mouth is and we'll see what we can computers video is counter sixty-four okay it plays video games so video is for them yeah okay so this should take a few seconds and then it should flip over to the Commodore 64 Hey all right now oh and I'm running this off of 1541 ultimate my god I'm not going to be able to see what I'm doing I didn't think of that yeah and this okay luckily these demos take a little while to load so I can like start it and then run it over and so here's what happens when you start gecko ass in a nutshell there's a basic loader which then in turn loads this big ROM image c64 ROM so-called because on Andres machines that is actually in ROM and then it loads a second very small loader in machine language that disperses that that big image above and below IO at the top of memory and then starts the starts the ball rolling here so we can see that we've got in it we've got a file system driver we've got an IEC specific driver and it's starting to shelves okay now the reason there are two cells is because originally that that first shell was written before the standard library existed and it basically makes Colonel calls to do what it needs to do and the second shell the one that's LSH and I'm assuming LLS age stands for life 6502 shell that second one is actually much nicer but it doesn't quite have yet all the features that the old shell has now gecko s supports virtual consoles and since both of these are running they just happen to be running on different consoles so if I just tap f1 here's the second console with the old shell there's nothing on three nothing on four we go back to one and there is an incantation to start a program on a specific console if you want to know I wanted to show the old shell because it's got a real interesting command based on a kernel call by the same name how about that so this is something like a PS display however it has a few little peculiarities first of all remember I said there's a maximum of 12 tasks and we have what 15 lines so those bottom three lines are not meaningful there and on the Left we see the PID notice that the PID s go up by 14 every time that's because the PID is actually an index into the task table which has 14 byte entries the second column is name and that is also not meaningful that the docs say you should get up to the first 5 characters of the of the process name but it's just not currently implemented I asked Andre about that and he said it was a question of memory you know just to store that for all the processes would be nice though in fact it's it's not only not implemented it's not meaningful because the first process is not in fact the shell it's in it ok the next column is th number of threads number of active threads so you can see that we have five processes running right now that corresponds to what we saw in that start screen right we have in it we have to file system drivers and we have to shelves and then go in order from top to bottom right so next one environment there's only one environment we don't have environments for process on a Commodore 64 pa is the parent process FF meaning that it was started directly by the colonel and the other four of course have a parent process ID of zero meaning they were started by in it which is that first process where it says LSH but it's not M ma e is the maximum amount of memory it's allowed to use they're all 78 because 78 is where the kernel starts and you do Darrent go any higher than that of course the next column signal mask okay these are what signals each of those processes has registered handler for and if you look you'll see that the LSH shell which is the fifth one down PID three eight has registered what is that five different signal handlers sig a the next column that's the address of the the signal handler and then of course you have your your streams the streams that the process is using and the ones that are negative numbers those are the standard ones standard in standard out Saturday or standard null so that's pretty cool let's go back to now this is gonna get a little hairy here so I can't see myself it well see how good my typing skills are and that's not a very good bet but hey it has the shell has a lot of the things you would expect to see so for example we can take a directory listing okay that actually went fairly quickly off a 1541 ultimate isn't it it's nice and a lot of eunuch see things that you would expect work just fine oh by the way I got to make sure I show this one yeah okay here that reminds me I went to linux expo 98 in raleigh and you know linux was still fairly new thing at that time and Linda's Torvalds gave the keynote and he comes up on stage and he plops his laptop Dow there connects it to the projector and it pushes the button and walks away and here's just a laptop on stage and it starts booting Linux never so yeah stuff like this works as you would expect boy I hope I'm not making any typos here yeah okay so for those of you don't know me wizard is my cat okay and that that does just what you would expect no typos okay and that also does what you would expect it to do so no I'll put where the output go well it goes exactly where we think it would go and I can cat that file get it ha ha I'm very sorry I'm very sorry for that it took a while to lower that's okay and this so that does what it's supposed to do and and they're a bunch of other little commands like this it's it's it's really very UNIX and does what you'd expect but now I'd like to show some more of the features of the operating system itself and to do that I wrote some programs using that dead cross assembler so I have three demos to show the first one demonstrates forking and multitasking and there are two programs in fact all these three demos are going to follow about the same pattern the first program Forks the second program and then there's some interaction between them so excuse the names these are these two programs are called forking and forked because forking Forks fort and you know I was gonna call them knife and spoon but anyway here is for king and what he's gonna do he's gonna fork off a second process for for ya okay now that second process is flashing the border first program is still running first program hounds second program still running now the second program else okay so that's not bad that seems pretty that bad huh yeah I know I'm just gonna be watching this video so if you clap I'm sure he'll be very appreciative [Applause] and okay so that's the forking one now I have one that demo wait a minute we have to do the schema demo his schema in here No okay when I first got this running I was so excited I actually took a video of it and I posted the video in IRC and schema saw that video and he said well that's all well and good but you know what you have to do is background it and take a directory listing listening while it's running and I was like yeah well let's try it I'm sorry well I can see it you guys are keeping me honest with the typos okay good so now and this is gonna be a little harder but so I'm gonna back on the demo and when I get my whoops when I get my prompt back I'm gonna ask for a directory listing oh yeah all of this go get was alright that's the first demo then I have one that demonstrates signal sending so the first program is going to fork that second program yep it's okay and the second program is immediately gonna register a signal handler okay setting sig user mask and then the first one says hit a key to do the sending okay meanwhile that second program is running a little loop on a timer saying okay I'm waiting I'm waiting just so you know he's still there and when I hit a key okay SIG's n that's the bit of six and and sig receives six and sent the signal and ended and then Sigma sieve he got that signal and then he ended okay so that's signal handling and that that works really well then the other thing I wanted to show is semaphores and in this case the two programs are some lock and some block it the second one is not actually blocking well more on that later but the first program in this case is going to acquire semaphore immediately when it starts and then fork the second program so there he got a semaphore named Sam Sann B now he's forking the second program and the second program is going to try and do the same thing he's going to try and acquire that same semaphore and he can't get it he's trying over and over and saying well I'm waiting I'm trying to get the semaphore I can't do it when I hit a key the first program I have a real keen on function okay so the first program freeing semaphore and ending and then the second one is like oh now I can get the semaphore so now I'll end as well so those are my demos that's my story and I'm sticking to it who would have thought you'd ever see something like this on a little tiny machine like this right so now I'd like to show a little little scraps of source code for each of these programs so you can see how easy it actually is to write programs that do this stuff in gecko s the the code to implement it of course is not that that simple but writing code writing user programs to do it is so in the case of forking all you have to do is pass the address of a fork structure and then call fork - okay it's as simple as that and the fork structure just has those three streams that you're going to use plus the name of the program to load from disk and optionally any command line parameters and then two nulls at the end so he knows where the end of the table is so very straightforward easy to work with oh I'm sorry all right let's and it's computer yeah yeah all right we'll try that again there it is okay so you pass the address of that fork structure and then you call fork to which is a library routine not a colonel routine is live 6502 routine and that's all it's in that fork structure is the three streams that you're going to use and the name of the program to fork and two nulls at the end and notice that fork two returns the trial ID so you have that now this is the second demo the signal one and of course the right hand side is what happened first because when that second program started up it registered a handler and then first one said let me know when you want to send the signal so to register a signal handler you call set sig and there are two versions of that call by by convention the ones in capital letters are colonel calls so if your path if you're if you're calling it with carry set like the first one there that means you're passing the address of the signal handler and if you call it with carry clear the second call there that means you're passing a signal mask a bitmap signal mask and in this case I was just asking for one signal and then on the left when it's time to send the signal the first program says yeah okay he hears the signal I want to send and in the X register he's got the PID of that child process to be fort okay well he knows what the PID is because the fork routine returned it in the X register and he saved it since he was gonna use the X register for something else and loaded her back in called sensing and across the lamp the semaphore thing again this stuff is all you know it's just a few lines of code if you look at my demo code my demo programs it's mostly like error handling and printing out those messages and doing a timer loop and all stuff like that the actual guts of it is about this much code so here's the semaphore and both the first and second programs in the demo are calling this same code there are two versions again of PCM which is how you acquire a semaphore if you call it with carry clear it will black until you get the semaphore maybe forever okay if you call it with carry set it's guaranteed to return and you're gonna get either a okay meaning yes you've acquired the semaphore or II Sam set meaning that some afore is already spoken for no you may not have it okay and there are some other things you can get back Error error codes and so forth then you know then the second program starts up and he makes the same call and instead of B okay he's gonna get a subset every time and he keeps going in a little boy ting and then the first program when you hit a key he calls V sim just passed the semaphore that you want to release I'm done with it now the next time the second program gets his turn running in the scheduler just oh yeah now I can get it so yeah very sophisticated stuff and easy to work with from a programmers point of view I'm I'm trying to drum up interest in gecko s here among common or guys couldn't tell and not just Commodore guys you know it runs on another 6502 machines as well and in fact if you look at the source code there's an arch directory with c64 and and his machine and everything else there's also like a prototype directory where you could start your own you start your own version for a different 6502 architecture so we maybe will see an Atari version so having seen all that wonderful stuff what can I do with gecko s okay what am I gonna do with it I've got all this stuff at my fingertips now well the obvious answer you know and I can tell you that yeah I had big fun playing around with this not only is it is a great fun to play or a hundred just because you continually surprised at what it can do but also just reading the code because it's really very good 6502 it's it's the kind of code where you look at it you look at the 6502 code and you say well what is that supposed to do that that doesn't even do anything you know and then you look at it again it's like I see what you did there you know there's code like that all over the over all over the place he pulls every trick in the book you could use it to learn about operating systems okay now you could say to yourself I'm gonna learn the Linux kernel right well see in about five years okay or you might say I'm gonna I'm gonna read professor Tenenbaums book and and learn the MINIX kernel right well a couple months maybe and you'd be good at it or you could say I'm going to read Sen B's commentary on gecko s and I'm gonna learn the gecko s kernel hey you know we're talking a couple of weeks and you'll be up to speed so obviously you're not going to be learning Solaris or anything but it yeah it's very interesting to see how things like that signaling and the semaphores and so forth are implemented the scheduler and the tasks which are just are really just fascinating oh you could write the killer app for gecko s what might that be hmm huh wolf woodside somebody said ok yeah yeah well you don't have graphics and I wouldn't recommend trying to do soft 80-column display because you have already got four text buffers for four consoles I really wouldn't recommend that all right but but first before doing any of this and and yeah before you finish that wolf of the same port I I think that there are things I want to make it clear though that I'm not criticizing gecko s because tremendous achievement but there are some things that could be done I think to make it a little easier easier to work with so some of these are low-hanging fruit and some of them are more ambitious as we get toward the bottom of the list but one thing I would have killed for this when I was writing those demos ok the question is how would you implement it who's going to listen for the ctrl C the shell or should the programs that are running listen to it and what if the program is not expecting keyboard input if it's a bad style program you know this so questions about how you would implement it but this boy this would be a nice thing to have I mentioned this one I was talking about that info info display not having the program names in that display is a little problematic and you have to do a little detective work before you find out what it is that you're you're working with and which process to kill because yes I've had some accidents but like I said Andre said the reason you didn't implement this is for reasons of memory but if you think about it I mean assuming a 1541 Drive 16 character file names times a maximum of 12 processes that's one hundred and hundred ninety-two bytes that's not too bad okay you could live with that another thing that would be helpful is if you had a way to tell where a program has started running because how are you going to debug your stuff if you don't have that now you may have noticed that as I was doing those demos and taking directory listings and all this other stuff every time I started a program it said exact address there was a hex a dress okay the reason it shows that is I asked Andre this question he goes oh there's a debug flag that you can turn on and the colonel will do that you know so the colonel after it gets the program loaded it does the address fix up and everything else just before it's about to pass control to it it goes oh yeah executor associate but it would be neat if that were stored - okay another two times what twelve processes is 24 bytes not bad you know but now if you had these two things that means that you could write a proper PS for the new shell the LSH shell and boy would that be a nice thing to have in fact why not get rid of the old shell completely this is what I call the grand unification of the shells in gecko s okay and I know hon dree has thought of this from time to time too so if you could just everything that's in the old shell is not in the new shell port those features over and then you know you could just get rid of that old shell and not have it loading by default at boot time which by the way is of course taking up a lot of memory and I didn't even demonstrate this but that that old shell it actually has an embedded machine language monitor so there's some memory being used there too but when you build that old shell with the monitor it's got compiled time flags where you can build it with both together or you can build just the shell or just the monitor so you could still have the monitor and you could have a not loading in boot time you could have it make it into a program that you would load from the command line if you really wanted to use it outside of using the Vice monitor and you know that would be great you could take that old shell and market is deprecated and that would be the end of that then you would have the new show now onto the more ambitious ones device support how many common are users in here how many of those people have CMD hard drives oh pretty fair well I guess considering where we are at but yeah it would be neat to have support for some of the specific stuff that you see CMD hard drives like directories partitions all that kind of stuff for me tolkien me wait I'll talk about networking networking in a minute yeah I can I can show you where the source for that kind of stuff yeah are you RAM expander on the Commodore 64 when I first figured out how that task switching is working with them with the stack being switched out and everything I thought to myself well gee imagine if you put those stack buffers in the RAM expander and then instead of copying bytes back and forth when you did a swap you would just do a what is it as stash and a fetch operation from the RAM expander that would be great you know and I actually had that as a to-do item on that on that analysis page under I saw that and he said well yeah then you could write a file system for the RAM expander that's that's still a little beyond me you know but yeah that would be a neat thing to have to also you know in the way that by the same token micro IEC in 1541 ultimate support I I thought it wasn't running on these devices and I just found out this morning that it did because I hadn't tried lately and I don't know what but yeah it will run from a disk image on both micro IEC and 5041 ultimate but 1541 ultimate also has something very interesting it has networking it has token no way darknet yeah let's not get crazy but yeah you could you could you could write a device driver for the networking in 1541 ultimate which has fairly recently been reverse engineer and what I know it wasn't originally documented my gideon and and here's where i talk about networking in gecko s i don't want to give the impression that gecko s itself does not have networking it does and if you saw that if you've noticed during the directory listings when i was showing him before there was httpd telnet there's a remote login program that's all there but it's all dependent on rs-232 so it's tcp/ip over rs-232 now the the the rs-232 support by the way is is apparently very good I mean I haven't played around with it much but it even supports the Daniel Daniel dolmens u P 9600 driver so the serial support I'm sure is very good but to do this networking stuff where you saw those programs in the directory list it it requires having a slip connection okay now this is a probably foolish foolish question at this show but how many people know what a slip connection is yes every hand in the room goes up ok now let me ask a second question how many people still know how to set up a slip connection ok what did I get about two had three hands went up ok and that's the problem you know in my case for example I've never set up a little connection in my life so I couldn't get this to work and to die you know no matter what I couldn't get it to work you know my first my first exposure to the internet outside of Jeannie and Delphi was on exact PC with a triple piece dial-up account and I had a great script written with expect and everything else you know but slip I have no idea I have no idea how to use it so I've tried to get it running and the results were somewhat disappointing so we said but it is there there's a slip demon and he's even got a page with instructions on how to run it so if somebody knows how to just up and you want to have an adventure stop by my table and we'll see if we can get that stuff working okay so here's the obligatory resources slide I'm gonna publish these slides as soon as I get back to my table I'll put them on my website and I think I'm gonna reprint my table sign and put a URL on there because everybody this ain't where can I find this stuff but I don't have anything there but yeah there's there's gecko s there there are pre-built disc images for it and I may release disc image based on the minor changes that I've made so far I do actually have both Andres original code and my branch in agate lab repository so if you want to see my code you can see it there so far there aren't many changes except for adding those crazy demo programs and of course then there's send these commentary on geckos so we've seen you know what it is what it can do some fun things there might be to work on do you have any questions I don't think it was supposed to do that it's supposed to say questions in big letters like that okay so does anybody have any questions about geckos [Music] [Music] that dad won I wasn't expecting no not that I know of I mean there's certainly nothing like a you know virtual file system with all that all that kind of good stuff that's interesting now I'll know my gears are turning right away how would you implement something like that but no it does not have support for anything like that yeah oh boy I don't know those numbers the question was how much zero page and where is it using I would I'd have to point it to the source code I can show you where it is there's there's a special to include file that just has the definitions for all that stuff when I need zero page I just use the segment for that in the assembler you know so you have text and BSS and all that stuff so I just say I want some zero page give me some and I don't care where it is [Music] well it depends and this is where you get into that semaphore business okay and and so so if you're going to use a sensitive 0 page location you might want to protect it with a semaphore and document the fact that if another program wants to use that he should yeah what whether they is something yeah the assembler of course is not going to know what other programs are doing so you can't you can't say you can't guarantee you're going to get some zero page that somebody else isn't using because that's a bad build time down at run time mr Mackey yeah he one that was dr. Dan he wants to know if I'm going to port my GS IRC client to gecko s and the answer is no I mean I will tell you once you've once you've written an IRC client you'll probably need therapy for the rest of your life so no I'm not gonna do it but there are all kinds of interesting you know I been there done that I would like to do something else something interesting I wrote a goal for client two you know and so but yeah I'm not sure yet what the killer app would be but it would have to be something that uses all I fancy multitasking gentleman on the search here is it cooperative or pre-emptive multitasking it is pre-emptive the scheduler runs on an interrupt and you know when it's you you you wait your turn right okay so and there are priorities the priority is implemented as a simple counter so if a priority three task comes up to run the first thing the scheduler does is set a system variable to that priority and then it runs it next time there's a next time the scheduler runs the first thing it does is look at that and if it's nonzero it decrements it and exits until it goes down to zero so that means that the the priority three program gets three slices yeah if you have a runaway program can you switch to another shell and kill it from there yes in fact we that happen over my table just a few minutes ago yeah you there is a kill command and it does work any other questions yes and you're looking at that code do you have a feel for how hard it's gonna be to port this to say you know I see 128 or something I mean I think we all understand that the Apple and Atari computers and programmers aren't capable of making a gecko S board what does it look like for further porting actually again I think you'd have to look at the source code I can tell you the source code is a bit of a labyrinth because the the number of defines and if deaths and stuff in there is is not inconsiderable because it supports remember it's not only supporting a couple of different architectures like 64 in pet but Andres machine and Andres machine has memory management and so it's there if depths all over the place but I don't know if you're here when I mentioned before if you look in the arch subdirectory of the source code there's a c64 and a pad and everything else and then there's also like a sample subdirectory that you can use as a starting point for making another another version of it for a different architecture personally I'd love to see it run on the cactus but that's yeah so the question I kind of have is actually two of them first of all can you can it run down how the interrupt vector table is works as in you know you have the irq and a Mayan and reset there are those how are they managed by the kernel because I tried the reason I asked is because I actually kind of gave an attempt to try and play with this on the Apple but the problem is that the apple doesn't have a timer that's so it's super hard to know well the enemy is directly to the keyboard and then okay i RQ I think it's free so I think you can so the question is how would you how are the vectors can you explain kind of easily how the irq and the nmi is implemented in gecko s I'm gonna I'm gonna wuss out on that and direct you to my SEM B's commentary on gecko s because that that answer is there it is in my commentary that run it's an extreme detail but I think we would probably be here until dinnertime if we started that discussion right now and the other one is I also sing a complete lack of like C codes especially like from CC 65 I'm seeing a lack of C code from for example something from CC 65 is that something that you can implement or C is that like no the entire thing is in 6502 assembler there's there's no C or any other high-level language at all it's this is for real man I'm gonna get in trouble though does anybody else have any questions okay if there are no further questions then as always thank you ladies and gentlemen for your kind attention and I hope to see you [Applause]
Info
Channel: VCF Midwest
Views: 61,464
Rating: 4.9302616 out of 5
Keywords: vintage, computer, festival, vintage computer festival, midwest
Id: jtlAOdJmeDI
Channel Id: undefined
Length: 50min 28sec (3028 seconds)
Published: Sun Sep 29 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.