tag:blogger.com,1999:blog-70601437615921597752024-03-12T21:36:03.706-07:00SqueakNOS''Operating System: An operating system is a collection of things that don't fit into a language. There shouldn't be one.'' – Dan Ingalls, in an article in Byte Magazine, 1981.gerahttp://www.blogger.com/profile/11201108412523881340noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-7060143761592159775.post-74457467843235533952011-03-21T09:20:00.000-07:002011-03-21T09:44:55.262-07:00SqueakNOS release updated!<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjveZaJFV3MR0J__oS8e51rRHJB1zMH6L3GdO-aW3pt_dwnoQ7bXWFYXmuwRCtK7F9d9vKVLBQ9wMkl-OKIltU0R8cqTA0IBdcs_8D5Hv8Bcstt1_dG_VYM28nGaeLBpmHYX3t2c-9lAJs/s1600/screenshot1.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjveZaJFV3MR0J__oS8e51rRHJB1zMH6L3GdO-aW3pt_dwnoQ7bXWFYXmuwRCtK7F9d9vKVLBQ9wMkl-OKIltU0R8cqTA0IBdcs_8D5Hv8Bcstt1_dG_VYM28nGaeLBpmHYX3t2c-9lAJs/s200/screenshot1.png" width="200" /></a></div>We are glad to announce that we have just uploaded an updated version of SqueakNOS to our site. You can find the updated download links <a href="http://squeaknos.blogspot.com/p/download.html">here</a>.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhku9DgStTFl-iR5qxQplKxc_784QpNuiQu-_zie_kFz0kVxUEZ_icCX0msg6j6j-U2RTj2dtwxKyWBK-Kd6MTrBSytQ4db4GqGUkji4SGJEd1YHbE5dRQUj8WglZvMBiYfuaiZQOLYp9k/s1600/screenshot2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhku9DgStTFl-iR5qxQplKxc_784QpNuiQu-_zie_kFz0kVxUEZ_icCX0msg6j6j-U2RTj2dtwxKyWBK-Kd6MTrBSytQ4db4GqGUkji4SGJEd1YHbE5dRQUj8WglZvMBiYfuaiZQOLYp9k/s200/screenshot2.png" width="200" /></a>This release adds the following items to the previous version: (99.9% modeled with objects)<br />
<br />
- Improved support for ATA devices access<br />
- Implementation of a model of files and directories<br />
- Implementation of FAT32 filesystem <br />
- Support for reading sources from the hard disk<br />
- Support for X86 paging setup and handling of page faults<br />
- Implementation of a model of free and used memory<br />
- Implementation of image snapshotting (based on the paging mechanism)<br />
- Based on Pharo, but also supporting Squeak and Cuis<br />
- Added some primitives for communicating between VM and image<br />
- Support for Alien and FFI<br />
- Added basic support for writing to serial via VM so that it's possiblo to out debug info to the outside world.<br />
- Added pretty basic ATA benchmarks<br />
- Added some scripts to automatize work done from the outside world<br />
- Many code cleanups<br />
<br />
Future directions are: <br />
<br />
- Support for Cog VM<br />
- Investigate replacing SqueakNOS plugin with NativeBoost so that we do more on the image<br />
- Offloading memory pages to disk<br />
- More tests<br />
- Benchmarks<br />
<br />
For the brave ones, remember that you can always generate a SqueakNOS image by using the ConfigurationOfSqueakNOS (which is a bit outdated now), or by manually loading the packages from monticello. Also to generate a SqueakNOS VM download its code from GIT (hosted on sourceforge.net).<br />
<br />
Don't forget to visit squeaknos.blogspot.com for news and instructions. We hope to be able to write more soon. Have fun!<br />
<br />
Many thank's t all the people who made it possible to understand the code and to develop all this.<br />
<br />
SqueakNOS' TeamEl Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com1tag:blogger.com,1999:blog-7060143761592159775.post-26758373276536832252010-05-06T10:57:00.000-07:002010-05-06T10:57:36.554-07:00Building new releases of SqueakNOS<p>
We roll new versions of SqueakNOS periodically by using a really simple automated process, and this article explains how it works. So, after reading this, you'll know how to rebuild SqueakNOS Object Engine, create a new bootable hard disk or ISO image, and roll your own version. This process should be as easy and fast as possible.
</p>
<p>
<strong>Quickly rebuilding and trying</strong>
</p>
<p>
We work on Linux, so it will be a lot easier to do everything from Linux. However, the same should work on other Unixes, and quite probably in Windows too, after finding the right versions of the tools.
</p>
<p>
The distribution package of SqueakNOS has changed a bit since May 2010. If you look at packages from before that date, directories may be a bit different. Now we include three things in the package: the compiled bootable system in a hard disk or ISO images, a .vmx configuration file to boot the image from vmware and lastly the native source code of the Object Engine.
</p>
<p>
To build everything you have to unpack the source files into your filesystem, which lie in "platforms" directory. This contains a subset of the <a href="http://minnow.cc.gatech.edu/squeak/2106">subversion tree of the standard Squeak build tree</a> (the cross platform part), and an added SqueakNOS target platform. Everything is done from within <em>platforms/squeaknos</em>, where the main Makefile is located.
</p>
<div style="padding: 1%; background: rgb(240, 240, 240) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: rgb(0, 80, 0); margin-left: 10%; width: 80%;">
<pre>$ tar -xzf SqueakNOS.tar.gz .
$ cd platforms/squeaknos</pre>
</div>
<p>
Then copy, from the hard disk or ISO image the two files <em>SqueakNOS.image</em> and <em>SqueakNOS.changes</em>:
</p>
<div style="padding: 1%; background: rgb(240, 240, 240) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: rgb(0, 80, 0); margin-left: 10%; width: 80%;">
<pre>$ # To mount the ISO image
$ mount -o loop SqueakNOS.iso /nos
$ # Or to mount the hard disk image
$ vmware-mount SqueakNOS.vmdk /nos
$ cp /nos/SqueakNOS.image .
$ cp /nos/SqueakNOS.changes .</pre>
</div>
<p>
Now you are ready to roll your own <em>SqueakNOS.iso</em>:
</p>
<div style="padding: 1%; background: rgb(240, 240, 240) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: rgb(0, 80, 0); margin-left: 10%; width: 80%;">
<pre>$ # To simply build the kernel, obviously:
$ make
$ # To build release/SqueakNOS.iso and release/SqueakNOS.vmx:
$ make iso
$ # To build and try it with vmplayer:
$ make try
$ # To try with qemu
$ make iso && qemu -std-vga -cdrom release/SqueakNOS.iso
$ # To build a new distro (release/SqueakNOS-`date`.zip and tar.bz2):
$ make distro # The date in the filename is automatic</pre>
</div>
<p>
Of course, you can always open the .image in a standard squeak, modify it, save it, and try it. The .image and .changes are copied to <em>release/iso</em> during the building of the .iso image, so you can continue working inside squeak while building and trying. This is great to make changes while you are debugging in a live SqueakNOS. It's currently also possible to have access to .changes and .sources from within SqueakNOS itself using while using the hard disk image or using a RemoteObjectChannel over a virtual serial line with the HD/ISO images, if you are interested in doing this, take a look at <a href="http://squeaknos.blogspot.com/2010/05/communicating-inside-to-outside-via.html">this article</a>.
</p>El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com0tag:blogger.com,1999:blog-7060143761592159775.post-88668100714856717432010-04-29T18:01:00.000-07:002010-04-29T18:01:07.956-07:00Accessing Squeak's image from the outside After some time playing with SqueakNOS, you'll notice you can't save the image from the inside of the VM. Also, you may want to introduce some code from the outside, and if you are like me, you just like working in normal squeak and then migrate the changes to the VM. So there has to be a way of modifying the image.<br />
To do so, you have to mount the Hard disk/ISO image in a folder, read/write the .image and .changes files and then unmount.<br />
<br />
<span style="font-size: large;">Mounting the virtual hard drive</span><br />
<br />
In case you are using the VM appliance, you'll mount the VM disk's file system inside your real file system. You can do that with this command (which gets installed with VMWare Player)<br />
<pre>$ vmware-mount SqueakNOS.vmdk /vmdisk</pre>You have read/write access here, so you can work with normal squeak, save the image and finally copy it overwriting SqueakNOS.* inside the mounted directory. When you are done you do<br />
<pre>$ vmware-mount -k ../SqueakNOS.vmdk</pre>to unmount. When you restart the VM you'll see all the changes you did from the outside.<br />
<br />
<span style="font-size: large;">Accessing the ISO image</span><br />
<br />
Here we get into trouble: ISO images can only be mounted as read-only. This means that you'll be able to read the files inside it, but wouldn't be able to write to it a new image in case you make a change from the outside. To solve this problem, you can regenerate the ISO with a new image.<br />
<br />
Unpack the .iso in some place, overwrite the .squeakNOS.image/changes files and then issue:<br />
<pre>~/isocontent/ $ cd platforms/SqueakNOS
~/isocontent/platforms/SqueakNOS$ make iso</pre>that will generate in <code>release</code> folder a new bootable .iso with the image you just placed.El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com0tag:blogger.com,1999:blog-7060143761592159775.post-43184294729667973272010-04-29T07:54:00.001-07:002010-04-29T17:38:30.721-07:00Getting started with SqueakNOSThe idea of this article is to explain what are the different bundles that are available to deliver SqueakNOS.<br />
You probably already know that SqueakNOS is(n't) an operating system. Then, the way to use it is by booting it's code from some media, like a CD or a hard drive. The good news is that it's not necessary to alter your hard drive in any way, nor reset your PC each time you want to test SqueakNOS, and that's possible thanks to virtualization. The idea of virtualization is to simulate the existence of an entire machine (processor, memory, hard disk and other devices), where you can install an entire operating system. The software used to do this is called a <cite><i>virtualizer</i></cite>, and there are many of them available, including VMWare Player, Sun's VirtualBox, Bochs, QEmu, etc.<br />
<span style="font-size: large;"><br />
SqueakNOS bundles</span><br />
<br />
SqueakNOS comes bundled ready to be used in two ways:<br />
<ul><li>as a bootable CD, actually an ISO image, which you can burn and boot in your machine or load into the virtualizer to simulate a CD (as you'll see in the next section).</li>
<li>as a small bootable virtual hard drive, prepared to run inside the virtualizer.</li>
</ul>It isn't necesary to download them both, you should choose the one you feel more comfortable and use it. The virtual harddisk has the benefit of allowing you to mount it read/write in your filesystem if you need. With the ISO you can mount it read-only, and if you want to change any file you have to regenerate the image (which gets done with one simple command).<br />
<br />
To download any of the bundles go to <a _fcksavedurl="http://sourceforge.net/projects/squeaknos/files/SqueakNOS/" href="http://sourceforge.net/projects/squeaknos/files/SqueakNOS/">SqueakNOS files section in SourceForge</a>.<br />
As of 19-feb-2010, the hard disk image is some days more recent than the ISO image, but that should change quickly, we are preparing an update right now.<br />
<span style="font-size: large;"><br />
SqueakNOS in a virtualized environment </span><br />
<br />
The easier way to test and work with SqueakNOS is through virtualization. That means that with the help of a virtualizer you'll create a virtual machine where you can install and boot the SqueakNOS easily. I use VMWare Player because it's a the fastest virtualizer I know, and also because it comes with vmware-mount tool which is useful to access disk images outside the VM. But there are many others supported, including Sun's VirtualBox, Bochs, QEmu, Microsoft's VirtualPC and Parallels.<br />
Both ISO and hard drive images come with a .vmx file. This is a simple text file that VMWare uses to describe the virtual hardware. By opening it with VMWare Player you can run SqueakNOS. It takes just seconds to load the image, after this you should see the video mode changing.<br />
<span style="font-size: large;"><br />
SqueakNOS in a real system</span><br />
<br />
The easier way of trying SqueakNOS in a real system would be to burn the bootable ISO to a CD and boot from it. Installing it to the hard drive is a bit more complex and will be addressed in another article.El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com0tag:blogger.com,1999:blog-7060143761592159775.post-44767712349450896742010-04-21T22:01:00.000-07:002010-04-21T22:13:54.513-07:00Phase 3: Give it awareness [Almost done]<span style="font-size:100%;"><blockquote>Make keyboard and mouse work. This let us actually try SqueakNOS. Make hard drives work, <b>this will let us code SqueakNOS from within SqueakNOS.</b></blockquote></span>Having keyboard and mouse opened the door to playing with the booted system. Now, we want to be able to save the changes, so we need some persistency. One idea (taken, again, from the old SqueakNOS), was to implement serial port support, which is already done<b>, </b>and some type of File System over it.<br /><br />Other possibility is to implement hard disk drivers, which is also done, and after that basic FAT32 support. This will let us open .sources and .changes files.El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com0tag:blogger.com,1999:blog-7060143761592159775.post-22873161635299315542010-04-21T21:49:00.000-07:002010-04-21T22:26:57.924-07:00Phase 2: Make it breath [Done]<blockquote> Add graphics mode support, and native IRQ setup and handling </blockquote><span style="color: rgb(0, 0, 0);font-size:130%;" >Graphics mode</span><br /><br />After the nice suprise that GRUB had graphic mode switching almost ready to be used, we jumped into making it work for us, and we chose a graphic mode that is really nice AND maps 1 to 1 from Squeak's representation to video RAM: 1024x768x32 bits is our choice although any 32 bits mode would suit the needs. Hacking a ioShowDisplay() that works was easy: it's no more than a bounded memcpy(). With this we got some graphic output in SqueakNOS' screen!<br /><br />With the old SqueakNOS we had some problems at this point, mainly because Squeak does not refresh the screen upon entering, so this time we solved it really fast, by doing a "self currentWorld fullRepaintNeeded" after a small Delay, and voila! Squeak's full screen was shown!<br /><br />Now we were facing the most delicate part: making IRQs properly work. Subtasks: set a void handler for every IRQ and enable IRQs (see that it doesn't halt). Add an infinite loop handler for the keyboard IRQ (see that it hangs on a keypress). Set a visible handler for the timer interrupt (see that it draws something on the screen... you can still see it in the upper right corner of SqueakNOS). Finally change all void handlers for code that will trigger a Squeak Semaphore and exit, also add the primitive to register the Semaphores (see that it doesn't hang, then see that the Semaphore gets triggered from inside Squeak). At last, loop waiting on the semaphore for keyboard's IRQ, read keyboard's port, and signla IRQ end all from inside Squeak. <i>[Done]</i><br /><br /><span style="color: rgb(0, 0, 0);font-size:130%;" >SqueakNOS IRQ Handling</span><br /><br />Squeak VM lets you signal Squeak Semaphores from the native world by calling signalSemaphoreWithIndex(). We want to serve IRQs from Squeak, using interpreted code, not native code. We seriously think that with hardware close to 1000 times faster than 20 years go we should be able to do it without any problems. Of course we cannot set the native IRQs handlers to jump to Squeak code, so our idea is to have a different Semaphore for every IRQ and have a Squeak Process with highIOPriority blocking on the Semaphore.<br /><br />The code inside Squeak, taken from InterruptRequestDispatcher>>installOn: looks like:<br /><pre>installOn: aComputer<br />self registerSemaphore.<br />process := [<br /> [<br /> semaphore wait.<br /> self handleOn: aComputer.<br /> aComputer interruptController signalEndOfInterrupt: interruptNumber.<br /> ] repeat<br />] fork priority: Processor highIOPriority.<br />aComputer interruptController enableIRQ: interruptNumber<br /></pre><br />And the native code to signal the Semaphore, taken from ints.h, is similar to:<br /><pre> void irq_1_handler();<br />asmlinkage void ISR_1() {<br /> if (0!=IRQSemaphores[number])<br /> signalSemaphoreWithIndex(IRQSemaphores[number]);<br />}<br /><br />asm(<br /> ".text" <br /> ".align 16"<br /> "irq_1_handler:"<br /> "pusha"<br /> "call ISR_1"<br /> "popa" <br /> "iret" <br />)<br /></pre><br />There is an interesting detail in all this: the software interrupt ending (IRET) and the hardware IRQ ending (<tt>outb(0x20,0x20)</tt>) are detached in SqueakNOS, were they are almost always done at the same time in every other code we saw. This gives a really desirable result: The IRET lets the software continue, going back to the interpreter and letting the Process waiting on the Semaphore be rescheduled, however, the hardware part (Interrupt Controller) still thinks the IRQ has not been served yet, and will wait until the Squeak side of the handler (shown above) signals the end of the interrupt (<tt><i>aComputer interruptController signalEndOfInterrupt: interruptNumber</i></tt>.<br /><br />We seriously believe that with computers close to 1000 times faster than 20 years ago this should be ok, however we are not sure yet if it may bring any problems later, and we are open, although reluctant, to the possibility of coding some glue code, or even complete "<i>device drivers</i>" natively (or hopefully using Exupery). Probably for sound and video I/O, we'll see.<br /><br />We were successfully using the very same scheme in the old SqueakNOS, so we just ported it to the new code base.<br /><i></i>El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com0tag:blogger.com,1999:blog-7060143761592159775.post-71589872588429329502010-04-21T21:36:00.000-07:002010-04-21T22:26:18.951-07:00Phase 1: Make it boot [Done]<blockquote>Make it boot and start interpreting the .image with text output for tracing and debugging.</blockquote><br /><br />The old SqueakNOS used a custom made mutant boot loader, borned from mixing LILO, the Linux kernel boot loader, and our dirty fingers. We had quite a few problems with it, and it was really complicated to put the needed environment to compile it. So we chose to replace it for something better and more modern: GRUB.<br /><br />We first thought on GRUB because it, of course, handles all initialization, switches to flat 4G mode can load huge kernles in high memory, and also has support for modules loading (module and modulenounzip GRUB commands). We wanted to detach the native part and the Squeak .image, which were glued in a single file in the old SqueakNOS, making it easier for Squeakers to touch the .image without having to set up the compiling environment.<br /><br />We needed to implement the switch to graphics mode before starting jumping to the interprenter. In the old SqueakNOS we did it from real mode (that's why we had so poor video support). But this time GRUB gave us control already in protected mode, so we couldn't just call the right INT. Luckily, GRUB already has the roots for supporting graphic video mode selection, and although it is not usable in the standard GRUB distro, we could solve the problem quite easily, by copying the testvbe command into the setvbe command, and removing everything after the command switches the video mode. We later found out that the video memory address changes from box to box, so we also hacked the vbeprobe command to show the video memory address.<br /><br />We also learned that GRUB supports part of the multiboot protocol and is able to load ELF binaries, this led us reduce the amount of assembly code to barely around 20 line. It's not that we are afraid of assembly, but if multiboot was supported in some other platform (Apple/PowerPC), porting SqueakNOS' kernel should be really easy. <i>[Never tried]</i><br /><br />At this point we had GRUB loading the kernel and loading the .image all in memory, we had some glue code to make the .image look like a file so Squeak's intepreter could start interpreting it. We coded console text output support, hacked some debugging messages in the interpreter loop, some stack traces here and there and figured out what Plugins needed to be compiled for Squeak to start up: we finally managed to make the interpreter loop run loose.El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com1tag:blogger.com,1999:blog-7060143761592159775.post-67612172542871294532010-04-21T21:21:00.000-07:002010-04-21T21:28:50.622-07:00Implementation ideaWe want to get rid of the operating system backends of Squeak/Pharo. For this we know we will need to implement lots of low level things, we are not afraid, but we want to take a little different approach: Implement the bare minimum as native code (a mix of assembly and C), and then do everything else in Squeak.<br /><br />Currently, we have implemented in Smalltalk drivers for mouse, keyboard, serial port, ATA devices (hard disks), some network devices, and others.El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com0tag:blogger.com,1999:blog-7060143761592159775.post-77923601541851585032010-04-21T21:17:00.001-07:002010-04-21T21:25:33.211-07:00A little history of the implementationThe people originally in the group only knew low level PC stuff, so we started with this, however there is already people participating that want to give Apple/PowerPC a try!<br /><br />There are two incarnations of SqueakNOS, one was pretty much abandoned in 2001, and had support for 640x480x1 or 640x480x4, keyboard, mouse, serial port and a pseudo file system over serial port, although some of this features never saw the light. In May 2006 we restarted SqueakNOS, and a new version was released in May 16th, with support for 1024x768x32, and bare IRQ handling.El Pochohttp://www.blogger.com/profile/00410584117623791587noreply@blogger.com0tag:blogger.com,1999:blog-7060143761592159775.post-3952756363989343852006-05-16T23:12:00.000-07:002010-04-29T08:20:24.439-07:00SqueakNOS is back!<span style="color: rgb(102, 0, 0);">This is part of an article written almost four years ago (2006), telling some history of the evolution of SqueakNOS, with some updates mixed up in red. SqueakNOS has evolved a lot since that time but we wanted to rescue the article.</span><br /><br />During this 5 years SqueakNOS has seen some activity from people not originally related to it, and although we never forgot about this project, this activity was what finally helped us move forward. Thanks a lot to everybody who sent emails and kind words, and specially to those who got dirty into our ugly code and successfully tried to make it come back.<p>Lots of things happened in the world, and we thought we would take advantage of them. First, and most important, GRUB, and of course, vmware. Also the Squeak source tree is quite nicely arranged, and the community is much more organized with SqueakPeople, SqueakMap, Monticello, etc. Some of this things we already took advantage from, and some we still have to learn how they work. </p><p><b>GRUB</b></p><p>The original bootloader was a mutant born from LILO, linux boot loader and our fingers. It was really a mess, we changed it to overcome an image size limit it impossed, and modified it to initialize the video mode before jumping to the interpreter. Now, we are using GRUB (Legacy) instead of this mutant. We also had to modify GRUB Legacy, but it's a lot cleaner than our original code, and if GRUB Legacy was not dead, our code would make into the standard GRUB release. We'll work on using GRUB2, but there are some things that we need which are still missing (we'll probably implement them).</p><ul>Why GRUB?<br /><br /><li>we need the bootloader to jump into protected mode and map 4G of RAM </li><li>we need the bootloader to load the .image from disk for us and put it in memory. </li><li>we need the bootloader to set the right video mode for us. </li><li>we need the bootloader to be able to handle a big bootable disk. </li></ul> GRUB already did all this, except for a small detail. <p> <b>VMWare</b> </p><p> We were using VMWare originally in 2001, but now it's more easy to use (VMPlayer is even free to use and quite small for what it does). We are testing everything with VMWare player on Linux, but we successfuly tried it on VMWare on windows and Virtual PC on Mac OSX. We also booted it natively on some boxes, with different results. </p><p> <b>Squeak native sourcecode</b> </p><p> We are so incredibly happy that we started it all again from scratch (no kidding). Already changing to a new bootloader was big enough a change to push us start from scratch. But also the rearrangement of the sourcecode in subversion was so nice that we wanted to join it. We tried not to touch anything in the Common sources, nor in the generated code. And we managed to do it! We created a new platform (SqueakNOS) next to unix, Max OS, RiscOS, Common and win32 in our local copy of the main trunk. To create a new image we open Squeak and with VMMaker generate everything (only internal plugins are supported of course), and compile. This results in a SqueakNOS.obj which we move to a boot directory where we just "make SqueakNOS.iso". If you want to change the .image, you just move the new one to boot/iso.template, and that's it. As you can see, recompiling SqueakNOS and rebuilding an .iso must be really easy. </p><p> We'd love to get help here, specially in rearranging our source code so it looks more like other Squeak ports, and to check if the platform support is Ok as we implemented it (we know some things are not Ok). </p><p> <b>Squeak community</b> </p><p> Here we got lost. We asked around a few friends, and all recomended to start with a release and an article in SqueakPeople. <s>Latter we'll update the swiki (this time in Squeak's main swiki, so it doesn't get lost), and upload the sources and other things somewhere, but we first need to understand what goes where.</s><br /></p><p><span style="color: rgb(102, 0, 0);">UPDATE: here we are, now we have this site which is the official SqueakNOS site!</span><br /></p><p> <b>What's already here?</b> </p><p> Not much yet, but already enough :-) </p><p> SqueakNOS is booting, GRUB gives us a nice 1024x768x32 color screen (this is hardcoded somewhere in the .c source code, so even if you change it with GRUB, SqueakNOS will think it's still that resolution). It already has all the primitives it had in its previous life, and some more. IRQs are handled correctly, and can be handled from Squeak (in fact, that's the only way to do it). When you boot the image you should see a quite standard Squeak (<s>Squeak3.8-6665full</s> <span style="color: rgb(102, 0, 0);">UPDATE: Squeak4.1</span>), with some add ons. You can open this very same image from a real squeak, and wonder around. There you'll find the source for the SqueakNOSPlugin implementing the primitives, and the class Computer. <s>Although the IRQs and hardware port access are working correctly, keyboard and mouse are not yet implemented (sorry). It'll take a bit more (unless you do it!). It shouldn't bee too complicated, and in fact, it could be ported from the older version quite easily (although we prefer to reimplement it, at least in part).</s> <span style="color: rgb(102, 0, 0);">UPDATE: Keyboard and mouse drivers have been implemented and work very well now.</span><br /></p><p> When you open SqueakNOS, you'll see lots of things, and you'll see also that if you press a key its scancode will show up in the Transcript. This is what we used to verify that IRQs and ioports are working. </p><p> This is pretty much it. We believe that everything needed to start playing inside Squeak is already done, and now everything missing should be done inside Squeak! </p><p> <b>Near future</b> </p><p> </p> <ul><li>Of course, make it available in a more Squeakish form (SqueakMap? Monticello? Subversion? ???. <span style="color: rgb(102, 0, 0);">UPDATE: Smalltalk side is maintained in SqueakSource and C side in Git. </span></li><li>Write a serie of small articles, or diary entries describing most of what we did to reimplement it. We did it all in small steps, so we think it'll be a nice serie of articles. <span style="color: rgb(102, 0, 0);">UPDATE: We have this site now and lots of articles!</span><br /></li><li>Implement PCKeyboard and mouse first! <span style="color: rgb(102, 0, 0);">UPDATE: Done!</span><br /></li><li>Implement serial port support <span style="color: rgb(102, 0, 0);">UPDATE: Done!<br /></span></li><li>Implement some kind of file system support over serial ports (vmware lets you set up virtual serial ports, which can be used to connect the inner world to the outer world) <span style="color: rgb(102, 0, 0);">UPDATE: It's done, we should write an article about it. Tell us if you really really want it.<br /></span></li><li>Our final short term goal is to be able to develop SqueakNOS from within SqueakNOS. With sources, changes and everything. <span style="color: rgb(102, 0, 0);">UPDATE: We are almost there, have filesystem support and are almost ready to save the image from inside.<br /></span></li></ul> <p>Although we think this could be contributed, we saddly think it'll be a lot easier for us to do it given that it involves going out and in of Squeak for every small test. </p><p> <b>Mid term future</b> </p><p> </p> <ul><li>Add support for other hardware devices. </li><li>Start trying with other hardware platforms (PowerPCs on Powerbooks/eBooks) </li><li>Add networking capabilities (independently of the hardware support) <span style="color: rgb(102, 0, 0);">UPDATE: Some (or all?) of this is done.<br /></span></li></ul> <p>Here's where we think the community can help a lot.</p>gerahttp://www.blogger.com/profile/11201108412523881340noreply@blogger.com0