Saturday, December 19, 2020

Dissapointing

Well time goes on at a rapid pace, and people who tell you it goes faster as you get older aren't lying. Its been a particularly hard year this year, with the issues surrounding covid in the background, but AROS still moves on steadily as ever.

One thing that has left me disappointed though, is unfortunately stumbling across "AROS Exec" - a forum I used to think of as home, back when it had a friendly respectful community. Its a shame those days are long gone. The place is all but dead with only a hand full of die hard, vocal, "anti ABI v1" fanboys spreading their long tired stories about how bad ABI v1 is, remaining - and chasing any prospective new members away with their rude attitudes and bad information.

We once tried hard to keep the Amiga troll like characters out of the forums, because we knew it would end this way - its just sad to see it has.

Equally as disappointing is the disparaging remarks found there about the hard work being put into AROS by the developers. ABI v1 is both praised without acknowledgment whenever the improvements and fixes are backported to the "ABI v0(*)" code they are using, attributing the improvements and fixes to the people doing the backporting  - and also claimed to be an unstable mess with little done to improve it.

Despite the huge amount of debugging, number of fixes to the underlying system, improvements to cater for running on m68k and newer pc hardware (and fixes to allow AROS to boot on considerably more systems than it ever did in the past), They make statements about how ABI v1 hasn't had any work or improvement done - in part because they are already using the improvements that were not meant to be part of ABI v0 under the Frankenstein version they do use, and don't attribute the improvements to the AROS Developers but instead to the distro maintainers for backporting it.

It really is sad to see people so tied up in a false narrative that they cannot even see how foolish the path they go down is.

I'm glad this year is almost over,

Going back to AROS though, I can not wait to see what the next year brings. There has been some recent interest in updating the localization for a number of languages - something that has always been an annoyance for me.  Unlike code, you cant just jump into another language and correct things or google translate will make a complete farce of it - and despite the number of supposed users and developers AROS has had from all over the world - very few show the interest or dedication in making sure their language and localization is properly supported,

We made some changes this year to separate the actual translations out of the code base, because it was apparent some people where interested in contributing but didn't know where to begin in the bewildering source tree that is AROS. To cater for this, all the translations are now handling in a sister "site" - the AROS Translation Team, on GitHub.  This allows people who only want to help towards supporting their language, can easily contribute and have the improvements included with AROS over time. There is still a long way to go until using it is comfortable, and we have a nice set of guides for people to get involved - but its a start in the right direction.

LLVM is getting closer and closer to building AROS completely, with only a few smaller niggles still to iron out before the first testable binaries should come off the press, however hosting nightly builds for it is proving somewhat of a problem. Just building the LLVM toolchain takes more time than most complete AROS builds including the GNU toolchain, and need massively more space - more than the virtual environments hosting the builds provide in fact. To really address this needs a bit of work in AROS, but it is lower priority than other work currently underway. It has already been discussed over the last 2 years, about breaking the builds up so that the toolchain is not only built separately, but made available for download once built. We also discussed addressing the lack of proper SDK for AROS, which would be a necessary component with the toolchain, to produce binaries suitable for use. A little work has been started on these things, but the effort needed as mentioned, is lower priority than fixing the current issues.

One annoyance, that I have been investigating for a while, are the lockups during boot some people experience. They tend to be one of these very hard to replicate ones - only happening in certain hardware configurations, or driver configurations. So far Ive managed to fix a quite a large number, some of which that have been in the code base since 2000 or before! they include (but aren't limited to..)

# Code passing handles to stale data on the stack around, dating back to the early 2000s. Even intuition was doing it leading to some bizarre results.
# Hidds using the same attribute ID's for different classes attributes, due to the way they where allocated. While it doesn't sound obvious - this was very hard to debug. it only happened if the drivers started and some failed in specific orders, until eventually one driver would try accessing an object using different attributes that had the same value - confusing the life out of the code trying to figure out what it was meant to be doing. In the best case it had benign consequences, but at the other end of the scope it could end up trashing memory or just crashing AROS for apparently random reasons.
# ATA device just doing things because it wanted to try regardless of the consequences, even when the hardware was already shouting about things not working. This one is a common reason for AROS not booting, when it tries to talk to ghost devices and ends up hanging forever,
# the PS2 keyboard/mouse driver was conflicting with timer.device accessing the PIT timer, causing all sorts of weird erratic behaviour - or locking up for some people. ive rewritten the PS/2 driver now to use the timer.device itself, resolving the problem completely.

.. and then there are the ones I am still working way at.

A few years ago we introduced code to change the interrupt handling in AROS.  Up until that point, AROS had only supported the legacy PIC's interrupts. This was a bit of an issue, because we wanted to bring up other CPU cores now and also look at using other newer PC hardware features (MSI interrupts, etc). A lot of effort has been put in to rework this so that we now use all of the CPU's vectors, and have separate "drivers" for the different IC's in a PC. We have code for the old legacy PIC still, that can be used on its own or as a fall back, but we now also have an APIC interrupt controller that registers the remaining device IRQs and allows us to expose functions for routing, and modifying them outside the kernel. We also have an IOAPIC driver - but this one has been the cause of a few headaches to say the least.

According to the Docs, you set up your APIC, parse the ACPI tables to figure out what IRQs are in the system and how they should be delivered, find the IOAPIC(s) and configure them. Sounds Easy? Well after coding all that it appeared to work great .... except not everywhere.

It turns out even though its easy enough to set up the IOAPIC stuff using the information provided - a lot of systems lie about the PIT Timer, and how it is wired up. And this is where the problems occur. On some systems, as soon as the timer is used - it goes haywire resulting in an IRQ storm, so AROS doesn't do anything except continually handle the timer interrupt. Ive been scratching my head about this for the past little while, because it isn't very well documented (if at all) how to handle it. Sure, you can disable the IOAPIC (and aros has a "noioapic" boot option for this purpose), but how to make AROS work correctly with such flaky hardware?

One thing I tried, was changing the delivery details for the IRQ. I spent a considerable amount of time writing code to try and detect when the storm happened, and when it did - reprogram the route for the IRQ, and then let that run for a while and see if it fixed it. Suffice to say ... it didn't. I tried all 4 combinations of delivery options with the same result ... so what can it be? to be continued ....

Another problem that is more concerning is that AROS has a long standing and very hard to trigger issue where it loses tasks. Again, it seems to only really occur during boot - and only under very specific conditions which I have yet to pinpoint. When it does, one of 2 things happen.

#1 When input device is active, some interrupt occurs signalling a task. Input device resumes but it never switches away ... ever. I wrote a tool for HyperV that let me break into AROS when it hung, and dump the task lists, and sure enough there where tasks ready to run with pending signals, but for some reason input.device wasn't for letting go.

#2 some interrupt occurs from a hardware input device signalling "input.device" to run. The schedular switches out the running task ... but input.device is no where to be found ....

Again, Ive invested a massive amount of time and effort investigating this one so far but to no avail. From the schedulers point of view everything is working as it is meant to - but input.device has mysteriously been taken out of the picture.

Until I can get to the bottom of those 2 issues, I have very little interest on working on much else on AROS. I have an nvme driver in the works, which is basically complete - but debugging it is becoming tedious due to the random previously mentioned bugs.  the more debug that is enabled, the more likely AROS triggers one of them.

So that brings us to this next year. Atleast for the foresee-able future, I will be continuing to focus work on addressing the boot/stability issues already mentioned - and any others identified in due course. I'm hoping I can get them addressed relatively soon, because we really want to try and get the RasPI build working again (Ive recently fixed some build issues, so now there is just one problem linking the Roms remaining), and get the toolchain/SDK side addressed, and move forward with fixing the non-system applications (particularly posix like code) that seems to be unstable currently. All of the main AROS components themselves are running extremely stable - to the point that sometimes I find myself just launching them to reflect on how bad they behaved before - but until we have all our user land software running again I wont be happy.

... Lets hope this next year is a good one


(*) - It is hard to claim they are even running ABI v0. A decision was made by the AROS developers long ago before IcAROS, or others distributions where started - that due to the lack of any "real" ABI definition, and due to needing to make drastic ugly changes to the code to support binary compatibility with m68k, we would need to make changes to AROS so that we could clarify what the ABI was and not end up with an ugly mess of code to support the new targets.

Because this would likely lead to binary compatibility issues, and other breakages to cater for proper usage of the ABI, it was decided to snapshot the repository at that time and call it ABI v0 (as in it has no ABI), and move forward under ABI v1.

So regardless of what nonsense is spread on forums in a childish manner - ABI v1 "is" AROS.

Now, unfortunately, to appease the community that had grown around distributions built using ABI v0 - the whole reasoning for having ABI v0 a distinct separation was breached. Changes where backported breaking compatibility with the "existing" ABI v0 code anyhow, and not on one occasion - but almost as often as a new IcAROS release was put out. Why? So they could both claim it was ABI v0, while using all the changes that are meant to be part of the distinctly separate ABI v1 due to the breaking compatibility. You cant make this stuff up.

 



Friday, June 14, 2019

Ahh how time flies ...

Well its been a long 3 years since my last post, with a few absences due to hardware issues amongst other things. I'm still not in a position to work on the things I would like, but due to a few people pestering me when I had decided to stop working on AROS, i've actually still been working away behind the scene (mostly to address issues wawa was encountering, such as missing atomic support to compile certain c++ code on m68k and arm).

One of the main things I have been spending a lot of effort on during this time is reworking the AROS build system so that components get exactly the flags they should for a given toolchain set (e.g. host, kernel and target), because in the past it has been very hit and miss on which ones the components end up using resulting in subtle differences in how the code is compiled in different environments.

After a good 3 or 4 years of hacking away at this I now feel like there is starting to be a light at the end of the tunnel, and feel confident that the components are now using the flags they should be (bar some minor fixes still needed in some specific components mmakefile's).

Another part of this was splitting up the flags passed to the compilers/assemblers so that they are in the correct variables rather than being all crammed into the CFLAGS, making it difficult to work with. Going forward it should be easier to manipulate the used flags so that e.g only the ISA components get replaced to compile for a different flavor of processor on a given platform, and this is currently used to make sure we get all the correct flags needed for m68k builds targeting 68000/020 etc cpus or x86 32bit and 64bit code generation.

Correcting this has allowed the darwin builds to be re-enabled (although due to their lack of maintenance, they probably still need fixes in the code base to get working..)

In combination with these fixes and changes (there is also better c++ handling in the templates, amongst other things),  I've also updated the AROS toolchains through to the current experimental version 9.1.0 - which is being used to build the pc-x86_64-smp target. So far the toolchain has been successfully tested with all the AROS targets, bar PPC - although the ARM support is needing a bit of adjustment, which i'm currently talking with michal to get done.

Well, if you thought that might be enough to keep me busy - ive also been working on other things!

The m68k target has received some love to try and improve its performance and behavior a little, and address some problems using it on vampire - though this work is still ongoing. The uae generic gfx card code has been reworked into p96gfx.hidd and handles other devices better now, has fixes to the sprite imagery handling, and should work with multiple p96 .card driver instances at the same time. There is also preliminary code in place to detect remapped rom images so that AROS does not try to use the physical memory they occupy (e.g when booting an a3000 using superkickstart).

ATA device has had its api adjusted slightly so that it uses generic definitions for the controller/bus/unit interfaces inherited from the storage subsystem classes.  AHCI devices has also been adapted to expose the same api''s and classes so they now operate using the common storage subsystem, allowing them to be enumerated easily in sysexplorer etc.

Finally, this summary wouldn't be complete without mentioning that I have updated our MesaGL subsystem from the quite old v7 we have been using since its initial inception, to the current v19! Unfortunately (and after discussion with other devs) it meant that for the time being the nouveau driver had to be disabled since it needs considerable work to be able to compile with the newer gallium code base, but if someone decides to do the work before Michal or myself can get round to it - we will finally be able to use modern 3d graphics technologies in AROS!. Im really quite excited about this, and cant wait to see the first OpenGL 4.5 code running native on AROS - and maybe even Vulkan down the line...


Monday, August 22, 2016

Well, Its been a while....

As ever hacking on AROS has proving to take up much of my time, too much to even think about posting on my blog. But here goes ..

Since the last update ive been hacking away on a number of things, mainly my Gfx subsystem update. So far I have most drivers adapted but need to finish implementing the software cursor support before they can all be used properly.

The changes themselves comprise of a number of things -:

# Separating the gfx.hidd into a hardware driver and display parts. This is to allow one gfx device to expose multiple displays to AROS, and has involved a number of changes to how the gfx subsystem works internally. Hopefully sometime in the near future I can make a more detailed post about the changes.

# Making the gfx hardware drivers real "AROS" hardware drivers - that way they can be enumerated using the hardware subsystem and exposed in apps such as sysexplorer.

# Adjusting all the gfx components and stuff which touches the affected interfaces to work again.

# Adjust the intelgma driver to use the base software compositor - its actually faster and has more features than the one that is embedded in the driver (and is very out of synch with the main code)

There where also a few bugs encountered in the gfx susbsytem that after fixing make some of the planar display modes work better (especially on hi-color displays).

I'm happy with the changes so far, and hope to get the remaining stuff done and pushed to the AROS repo as soon as possible.

The next thing I've been playing with is updating mesa. So far I have the IntelGMA driver and software rasterizer built using the newest mesa code (as well as the core mesa components), but until the nouveau code is updated cant push the changes to SVN.  Testing with IntelGMA and the Gfx subsystem updates yields roughly a 20% improvement in performance on Intel atom based systems which isn't too shabby.

Ive also done some massive work to the build system over the past 2 years so that we can finally now build working binaries with the latest GNU toolchains. Another part of these changes is to prepare the build system to use other toolchains (LLVM), however there is still some work on the toolchains themselves before this can be taken advantage of.

My final project though, has been an interesting ride. I've been working on getting the FinalWriter 6 codebase to build with gcc, aswell as fixing it to run on AROS/64bit.  It was surprisingly easy to get the actual code compiled but took a few weeks to dig through some of the issues caused by using a different toolchain than it was originally written for, and finding the issues stopping it from running on 64bit. Evenetualy we managed to bring it up though, and while it ran there where still some problems and visible gfx issues.

Over the past week or 2 I have been working on adapting the GUI code to use localization via the locale.library, and have been quite productive with it (about 80% done, including the german translation!). So at the weekend I decided to tackle a few of those Gfx niggles. It was an interesting experience, and after some soul searching and head scratching I managed to get to the bottom of them!

A bit of code fixing later and the rendering is now correct. There was a bug needing fixed in AROS's vsprite/bob handling, which resulted in the pop up menus displaying incorrectly, and also  the base finalwriter shell class used hard coded GUI elements which required a bit of reworking (as in adapted to be a subclass of sysiclass) but finally the results spoke for themselves! it now has AROS's checkbox, radio and (themed) window scroller arrow gadgets, making it fit in much better with the rest of the system.


Thursday, December 03, 2015

Well, It has been a few years yet again since I last posted on here. So I felt it might be time for an update.

Over the past year I've been having some fun working on porting FinalWriter to AROS (with massive help from Jason) - and it seems to be pretty much done with some minor issues still to resolve.

I've also been working on A number of other AROS projects including -:

# Updated my Doom3 port to the newest code, with some fixes that seem to finally resolve the known crash, as well as allowing the use of the expansion - Resurrection of Evil!
# A little more work on the RasPi port with Michals help, including starting work on supporting multiple cores within the scheduler.
# Rework the AROS build system to really use its own cross compilers with some related tidying
# fixes to the AROS headers so that we can use them with newer C++ standard compilers
# update the Gnu toolchains so that we can now build gcc 5.1. Also cleaned up some clang related issues.
# Adapt deadwoods hostgl library to run on ABI v1, and reworked the gl.library base implementation to be a proxy to the "desired" gl implementation (set using an ENV variable). This means there should be at least 2 library's on a system to support gl - the gl.library stub and the real implementation (hostgl.library and/or mesa3dgl.library).
# Change how AROS's gfx hidd subsystem handles the creation/destruction of some base "object" classes, so they use a unified (and driver overridable) way to implement them. This means drivers can also expose new object classes not exposed by the gfx subsystem itself, eg gallium contexts.
# Updated (privately) the Mesa GL implementation to v11, including minor changes to how the gallium interface is handled. mesa/gallium no longer use a hard coded list of possible classes to try, but instead ask the screens gfx driver to create a gallium object, and if this fails fallback to the software implementation.
# Update the softrast, and intelgma drivers to use the latest gallium driver code. This finally brings the software rasterizer to a level where it correctly displays the doom3 logo on its intro page.
# Adapt the AROS gfx hidd subsystem so that the gfx drivers are exposed as real hardware drivers - e.g. so that they can be enumerated in the sysinfo tool.
# Adapt the AROS gfx hidd subsystem so that the gfx "driver" objects which represent an individual hardware instance (e.g on die GPU, or discrete controller) expose one or more display objects each with its own mode array database etc.
# start adapting the way AROS exposes its software cursor so that it no longer uses the fake gfx subsystem, but instead the base display class exposes the behaviour.
# adapt the compositing code to use the changes, as well as make the intelgma driver use the base software compositor.

There is still a LONG way to go on the Mesa side (updating the remaining drivers) as well as fixing the remaining issues with the gfx subsystem changes, however the parts working/adapted so far seem to do what it says on the tin. the glsimplerendering test on my Atom's Intel GMA chip has gone from 700to800 FPS up to 900+.

I'm also starting to try and gear up to implement the next parts needed to get my "new" wanderer code base usable. This primarily means re-implementing the icon handling.

The first part I really need to tackle is the base/public "Iconlist" class from legacy wanderer. This is going to be replaced by a few Public classes that are meant to be very basic and usable outside of wanderer also. They don't explicitly represent a list of files, just any old icons which have a label. The most basic units are the IconClass, IconlableClass and IconimageClass. As it says on the tin, they represent the Image for an Icon, the Label for an Icon, and the Icon that exposes those (N.B: an Icon can have more than one "label" entry) The next class is the IconFamilyClass. It exposes a list of IconClass objects, and handles sorting them (the base class is only aware of the icon's label and co-ords). After this come the IconListClass itself. It exposes the input event handling for the IconFamily list of icons, and related codes.

Since these are meant to be very generic - the classes do not handle any IO or related things - they are exclusively interested in a list of "icons" and nothing more. This means they could (should) be used to implement e.g. Toolbar classes.

At some point wanderers own Toolbar panel will get the iconlist to handle most of its functionality, allowing for sorted/positioned icons and fine tuning the appearance. Once this is done it will be time to replace the "private" wanderer versions of these classes so that they tie up the configuration/appearance to suit wanderer, and so that they can populate the iconlists using the new "location" classes exposed by wanderer, matching the entries to icon objects. This will finally enable the new wanderer branch to display the desktop and local filesystem contexts again, but now using the new API's.

... lets see .... where to begin ...

Thursday, January 22, 2009

Ahaa

Thanks to deadwood (Krzysztof Smiechowicz) ive managed to get AROS booting off my Atom330 board. Seems the BIOS requires an active partition on the drive before it will boot it.. strange but, oh well, it works =)

Wednesday, January 21, 2009

Been a while

Yes, as ever ive been neglecting my blog.

Having a 1 year old son is very time consuming im slowly finding out

Anyhows I recently got hold of an Intel Atom 330 based board for AROS thanks to ClusterUK with the intention of writing a NIC driver for it .. which im slowly working my way through (RTL8168/8111). There have been a few setbacks - primarily AROS wouldnt boot on the box.

After a lot of searching and some insight from Error (Tomek Wiszkowski) it became evident that the ata.device was finding the ICH7 AHCI S-ATA controller, but couldnt use it. Not only this, but since it had found the controller it decided not to add legacy ports, which resulted in AROS finding no bootable devices. Luckily it was trivial to fix the issue and now AROS is booting happily on not only the Atom 330 board, but a whole bunch of other users ICH systems which had failed after ata.device got "upgraded".

Another issue was present which resulted in the early startup menu showing everytime the machine was booted, and couldnt be exited. Thankfully this was also relatively easy to identify and fix so now I can boot into wanderer quite comfortably - and have Installed AROS on a 200gig S-ATA drive attached to the system.

Theres still a peculiartiy though that makes it unable to boot the system (not sure yet if grub isnt installing to the MBR correctly, or some other issue is preventing it loading) -so I will have to look into this when I find time ..

.. but for now its onwards with the rtl8168.device ..

Monday, August 18, 2008

A new home ...

Ive got round to setting up an SVN repository on google code, where I will work on projects for AROS that I dont want to do in the main tree..

Im in the process of cleaning up the mesa6.5 dirs to import it, so that should be available with smbfs etc shortly.

see http://code.google.com/p/kalamateesarosextras/

Thursday, August 14, 2008

And continuing ...

Well ive been quiet for a while now but things havent been completely on hold.

Ive recently put finishing touches to a network driver for SiS900/SiS7016 based NIC's, and also have an Intel Gigabit NIC driver roughly 95% complete. Once I have it working I hope to find the remaining problems with the RTL8139 code and try and get it finished up also.

Other than that ive been working away on Wanderer and finally enabled the snapshot menu options, so now you can snapshot drawer windows positions/size aswell as your icon positions, however currently wanderer doesnt display Icons with coords as they should be - something I will look into shortly.

Ive also been working in other parts of Wanderer .. so now for instance it will load the contents of .backdrop files listed in volume root directories and add the Icons therein to the desktop like on AmigaOS.

The menu options to add/remove the files arent yet operational but soon they will be ;)

Im also in the process of reworking the menu handling a little so that they are updated dynamically depending on selected icons, and "view" options.

Once these things are fixed - The only remaining menu option I will tackle will be the Empty Trash option =D

Then its back to trying to fix the buffered IconList handling since this is something id really like to get working soon!

Thursday, April 17, 2008

Oh so quiet (again)


Ive been a little bussy with real life lately to blog much, especially since ive been trying to spend as much time with my quickly growing son (who is now 6 1/2 months old =O).

Recently with the help of michal schulz weve added basic ACPI table parsing to AROS64s kernel, aswell as making it register found CPU cores and put them into an idle state as the foundation for getting some SMP functionality working.

Ive also been playing about with various other parts of AROS but ill get to that later ;)

Saturday, March 29, 2008

Grub Tastic!

Thanks to Alain Greppin and the folk on #grub and the grub2 mailing list, we finally got grub2 working and after a little effort booting the i386 and x86_64 bootiso's

*joy*



And with a bit of effort ive got a gfx grub2 terminal booting up my aros64 box =D

Saturday, February 09, 2008

Wanderer work continues..

Well im slowly hacking away at reworking the rendering code for wanderer iconlist class. The intermediate goal is to allow icon windows to buffer the icon/background rendering so, for instance, using the tiled rendering mode for iconlist backgrounds wont cause noticable icon flickering as it currently does. Even the current background modes generate some flicker depending on how observant you are but obviously for the tiled modes more is redrawn and therefore more noticably flickery.

The Final goal however is to allow the Iconlist class to support 3 rendering modes.

# Plain mode which directly does all rendering to the windows bitmap. This is the currently used method.

# Buffered mode which will perform all rendering to a backbuffer before blitting to the windows bitmap.

# Composited mode (future) Will render icons and masks to seperate bitmaps from the window background. The background layer will be "accessable" by external code so that animated/etc backgrounds can be displayed.

Ive also commited the basic multi-line rendering code to wanderer now though it isnt working 100% currently. Some very short lables which wouldnt/shouldnt get wrapped arent being correctly displayed but it should be a trivial adjustment to the code to fix this. Also the attributes which govern the rendering of icons and labels are now settable via wanderers prefs .. Allowing for more tuned desktops =D

The final steps for the prefs side of things is to allow per-view (Workbench/Drawer window etc) Fonts to be set, and their respective colors. Also the views will be able to inherit settings from a parent view - so that by default the drawer windows will inherit most options from the workbench windows view.

After that it remains to write a small tool that will allow setting the attributes for any of the view's from outside wanderer prefs... so that a theme application may push options onto wanderer and hopefully tie the two things together a bit better..


.... watch this space

Wednesday, September 26, 2007

Been a while..

I havent been keeping upto date on my blog for a while .. it seems real life has gotten the better of me again...

.. but anyhow since my last post lots of things have been going on which have kept me a bit bussy. One of the most important being the impending arrival of my "soon to be born" baby =D

due to this ive not had much time for coding and a lot of things have been a bit neglected, however ive been trying to catch up a little recently and am waiting with baited breath for michal's port of AROS to the x86-64 architecture (which seems to be progressing at some pace!)

Another thing which has recently caught my eye thanks to rob (fce2) is a project close to my own interests - http://www.tungstengraphics.com/wiki/index.php/Gallium3D

It seems the open source world are already leaps ahead of my mesagl project with a design for a better 3d driver abstraction that sits between mesa or any other 3d api and interfaces with the hardware - almost exactly what i wouldve liked to achieve.... so once i have time i will be looking at how to use it as a basis for my 3d hidds for AROS.

This has a number of benefits from my perspective including ..

# The majorioty of code is developed by people with much more experience in this field than myself (definatley a bonus!)
# The code is mostly developed externally to AROS - so we only need to provide the hidd api's and some glue
# How it interacts is all in place saving a considerable amount of effort on my part.
# Drivers using the API (theres an example i915 driver included) should be easily portable to AROS.

Hmmm ... bring on the free time!

Wednesday, April 25, 2007

mmmmm Themes


Thanks to the work of Darius Brewka and Georg Steiger AROS recently got support for some nice themed windows =D

A few people have been bevering away on nice replacement themes, and ive even had the bug myself ;p



Heres a quick preview of its progress ..

comming along nicely I think though theres still a lot of fine tunning to be done =)



Theres also some of my more recent wanderer changes visible, and work is comming along nicely on that front also (albeit slowly with this theme stuff)

Tuesday, April 10, 2007

Possible changes to come (my "plans" for wanderer) ...

Ive been thinking about what i would like to do next in wanderer and decided the following things are needing some time ..

Rework some existing classes and provide new headers/code ..

Wanderer :


# Create Wanderer\Classes\FileArea.c/.h/_mcc.h based on generic volume/directory code from the current iconlist class
# Rename Wanderer\iconwindowcontents.c/.h to Wanderer\Classes\IconWindowFileArea.c/.h and use methods/attributes defined in FileArea_mcc.h
# Rename Wanderer\iconwindowbackfill.c/.h to Wanderer\Classes\IconWindowImageBackfill.c/.h
# Create Wanderer\Classes\IconWindowToolbarExtension.c/.h using the current code for the toolbar in wanderer.c
# Create Wanderer\Classes\FileListArea.c/.h based on Georges example list view mode code


Zune:


# Rename MUIMaster\Classes\IconList.c/.h to Wanderer\Classes\FileIconArea.c/.h using the methods/attributes defined in FileArea_mcc.h
# Rename MUIMaster\Classes\IconListview.c/.h to Wanderer\Classes\FileAreaView.c/.h using the methods/attributes defined in FileArea_mcc.h


And a bunch of TODOs for things ive already done ....



# (NEW) Make IconList derived classes support buffered display to remove flickering ..
# Import "View all files" changes ..
# Import IconLabel state changes ..
# Import IconLabel wrapped display changes ..
# Import Keyboard navigation changes ..
# Import Extended "New.." changes ..
# Import Fixed Icon Position changes ..
# Import Inline Name Editing changes ..


The desired end result is to have the following files :-


Wanderer:
Wanderer
Wanderer.info
Classes/
IconWindowFileArea.wui
FileAreaView.wui
FileArea.wcc
FileListArea.wcc
FileIconArea.wcc
IconWindowToolbarExtension.wui


IconWindowFileArea.wui
* Provides IconWindowFileArea class
# Automatically loads files matching "IconWindowFileArea#?.wcc"
# Automatically loads FileAreaView.wui
* Provides an "IconWindowVolume#?" and "IconWindowDirectory#?" class for each class registered with FileAreaView.wcc
IconWindowFileAreaImageBackfill.wcc
FileAreaView.wui
* Automatically loads files matching "File#?Area.wcc"
FileArea.wcc
* Provides VolumeArea and DirectoryArea classes
FileListArea.wcc
* Provides VolumeListArea and DirectoryListArea classes
FileIconArea.wcc
* Provides VolumeIconArea and DirectoryIconArea classes
IconWindowToolbarExtension.wui

Wanderer Backgrounds ...

Ive just commited the fruits of the last 3 weeks work... replacing how wanderer handles backgrounds and support for further background types.

Took a lot of work to get it going correctly:

# Reworked wanderers prefs file format so global data is stored in one chunk, while background image data gets a chunk per background type (only "Workbench" and "Drawer types get used atm ..) - and each data chunk gets a header chunk to define it =D
# Changed the prefs app so that it uses the new format, aswell as the main wanderer app.
# Implemented a small plugin like system for adding backfill modules - and made the support code fallback to using Zune with more sane settings ..
# wrote a backfill module to handle custom image rendering including fixed place tiling/ floating place tiling/ scaled image rendering aswell as using offsets for tiles/patterns.
# Tidied up the existing iconlist class(es) to work better for different background rendering needs.

Ive also implemented preliminary support for internal handling of Workbench Backdrop mode so we no longer need a hacky (eww) extra attribute in zune (MUIA_Window_WandererBackdrop) but just now it seems to be having stability issues ..

Happy Wandering =D

Tuesday, March 20, 2007

VIA Rhine is alive!!


Finally The VIA Rhine Driver is working!!

Thursday, August 10, 2006

A little progress

Work has been taking up a lot of my time recently (well, the occasional session on WoW also slips in ofc.) but im still working on a few things when I can..

Im at the early stages of making AROSMesaGL into a shared library, and have the library itself compiling with a bunch of stub functions in place (its roughly 3mb in size!) however theres a long way till it works properly.

I have also been tinkering with an audio driver for SoundBlaster PCI type cards (es137x based chipsets) which is slowly making progress, though im about to redo the main code now that I understand it a little better..

Ho hum, back to the code ..

Sunday, June 04, 2006

Lots of going on ..

Well,

A lot of things are happening on the mesa front.

Fisrtly, Ive been beavering away on a GLUT for AROSMesa.
Its starting to take shape now and every new build seems a bit more responsive and feature complete.

The only main lacking features of GLUT at the moment are using the AROS timer device to signal when a timed event is to happen saving us iterating loops every run, and using the AROS systems fonts instead of hardcoded ones.

Ive successfully compiled a number of test apps, including nearly everything in the mesa 6.5 demos archive - and only a very small number dont work.

Ive also started porting a first test game- FrontierGL at oliviers request, however its requiring me to use the full SDL (1.2.10 atm) from its main branch - and so far im not having much joy getting it to correctly link.

It does compile however - as does FrontierGL (and loads!) - so hopefully sometime soon i can get it all running.

One thing im pleased with is the change to use a global message port in the glut alphas. Instead of letting the app run in a continuous loop we wait after every "run" - and send a message to ourself if we need to run again.
This lets the system have its turn every time we finish doing something, so it should make the apps a bit more system friendly. Test runs so far actualy indicate it makes GLUT apps run faster (upto 3x!) since they are processing less pointless stuff.

It also seems to have had a knock on effect on some benchmarking demos (gltesperf and trispd for instance) in that they now actually work - and very well too afaict!

Ive fixed up the alpha channel code in AROSMesa/mesagl.hidd so the demos needing it now work properly - and look v nice =)

Friday, May 19, 2006

Mesa continues ..

Its been pretty hard goin with Mesa over the last week or so..

Firstly, The mesagl.hidd started working properly with mesa3.5, so I started merging the code with the newest refresh of Mesa (6.5) - quite a jump!

Well, today I finally got the binaries to output something - though there where clearly a couple of bugs and some unexpected surprises =)

The accelerated software line and triangle functions which didnt get called with mesa3.5 now are being utilised, so those demos arew now running a little faster. Morph3D is showing a bug - the glclear function isnt operating correctly yet.

Over the next few days I will tidy up the AROSMesa linklib code to work properly with 6.5 which will hopefully make it a bit more efficient, and then start about updating the mesagl.hidd to operate properly with the new setup.

If i find time l8r I will try and "port" a small shader test to check mesa is indeed working properly with all the latest gl functionality.

Monday, May 08, 2006

mesagl.hidd

Expect Spam in this blog !

Ive started to rework the AROSMesa software rasterizing code into hidds (namely mesagl.hidd and mesaglrast.hidd) in the hope of bringing atleast a basic level of hardware accelerateble OpenGL to AROS. So far tests of the basic class operations themselves (not the actual linklib) have been successfull.

Code is inplace for a gfx.hidd to identify a mesagl.hidd replacement to use, and for the replacement to register and be used instead of mesagl.hidd's object.

Anyhow this is the current debug output - the hidd is only intially used at the moment for testing, then it returns to the default AROSMesa code.


OpenWorkbenchObject: name = AROS Live CD:Extras/Gfx/Mesa/Demos-old/morph3d
OpenWorkbenchObject: isDefaultIcon = 1
OpenWorkbenchObject: it's a TOOL
OpenWorkbenchObject: it's a CLI program
OpenWorkbenchObject: success = 1
The function ChangeExtSpriteA() is not implemented.
[AROSMESA] AROSMesaCreateContext(taglist @ 1f39ac0)
[AROSMESA] AROSMesaCreateContext: Opened OOP subsystem

[hiddmesagl][libinit] Initialising MesaGL.hidd ..
[hiddmesagl][libinit] Memory Pool Allocated @ 1ca16e0
[hiddmesagl][libinit] Driver List Prepared ..
[hiddmesagl][libinit] Context List Prepared ..
[hiddmesagl][libexpunge] Expunging MesaGL.hidd ..
[hiddmesaglrast][libinit] Initialising MesaGLRast.hidd ..
[hiddmesaglrast][libexpunge] Expunging MesaGLRast.hidd ..
[hiddmesagl][root] MesaGL__Root__New()
[hiddmesagl][root] MesaGL__Root__New: Finding Hidd for specified RastPort @ 1ca0698
[hiddmesagl][root] MesaGL__Root__New: Using base mesaGL.hidd (software rendering)
[hiddmesagl][root] MesaGL__Root__New: MesaGL Hidd Object allocated @ 1ca1308

[AROSMESA] AROSMesaCreateContext: MesaGL.hidd object @ 1ca1308

[hiddmesagl] CreateContext(taglist @ 1f39ac0)
[hiddmesagl] CreateContext: context record allocated @ 1c7e46c
[hiddmesagl] CreateContext: rasterizer record allocated @ 1ca132c
[hiddmesagl] CreateContext: Called with RastPort @ 1ca0698
[hiddmesagl] CreateContext: Using Rasterizer 'hidd.mesagl.rast' (pointer = 1ca15c8)
[hiddmesaglrast][root] MesaGLRast__Root__New()
[hiddmesaglrast][root] MesaGLRast__Root__New: MesaGLRast Hidd Object allocated @ 1ca1710
[hiddmesagl] CreateContext: Rasterizer Object @ 1ca1710

[AROSMESA] AROSMesaCreateContext: MesaGL.hidd_CreateContext() returns 1c7e46c
[AROSMESA] AROSMesaCreateContext: AROSMesaContext Allocated @ 1ca0e54
[AROSMESA] AROSMesaCreateContext: gl_ctx Allocated @ 1ffad4c
[AROSMESA] AROSMesaCreateContext: Screen @ 1725a28
[AROSMESA] AROSMesaCreateContext: window @ 1ca0790
[AROSMESA] AROSMesaCreateContext: Using RastPort @ 1ca0698
[AROSMESA] AROSMesaCreateContext: Creating new AROSMesaVisual

[hiddmesagl] CreateVisual(taglist @ 1f39ac0)
[hiddmesagl] CreateVisual: visual record allocated @ 1ca1734
[hiddmesagl] CreateVisual: Visual Rastport @ 1ca1d48 [24bit]
[hiddmesagl] CreateVisual: Allocated BackBuffer RastPort @ 1d55468 (DOUBLEBUFFER)
[hiddmesagl] CreateVisual: RastPort Dimensions [width:647, height:510]

[AROSMESA] AROSMesaCreateContext: MesaGL.hidd_CreateVisual() returns 1ca1734
[AROSMESA] AROSMesaCreateVisual(taglist @ 1f39a60)
[AROSMESA] AROSMesaCreateVisual: amesa Context @ 1ca0e54
[AROSMESA] AROSMesaCreateVisual: Using RastPort @ 1ca0698
[AROSMESA] AROSMesaCreateVisual: RastPort.BitMap Depth = 24
[AROSMESA] AROSMesaCreateVisual: Using RGB Mode
[AROSMESA] AROSMesaCreateContext: [ASSERT] RastPort @ 1ca0698
[AROSMESA] AROSMesaCreateContext: [ASSERT] RastPort @ 1ca0698
[AROSMESA] AROSMesaCreateContext: Enabled Mesa Software Extensions
[AROSMESA] AROSMesaCreateContext: Using Direct Rendering on RastPort @ 1ca0698
[AROSMESA:TC] arosTC_Standard_init(amesa @ 1ca0e54, taglist @ 1f39ac0)
[AROSMESA:TC] arosTC_Standard_init: Using RastPort @ 1ca0698
[AROSMESA:TC] arosTC_Standard_init: Cloned RastPort @ 1ca17a8
[AROSMESA:TC] arosTC_Standard_init: Clipping Rastport to Window's dimensions
[AROSMESA:TC] arosTC_Standard_init: Context Base dimensions set -:
[AROSMESA:TC] arosTC_Standard_init: amesa->RealWidth = 647
[AROSMESA:TC] arosTC_Standard_init: amesa->RealHeight = 510
[AROSMESA:TC] arosTC_Standard_init: amesa->width = 637
[AROSMESA:TC] arosTC_Standard_init: amesa->height = 477
[AROSMESA:TC] arosTC_Standard_init: amesa->left = 5
[AROSMESA:TC] arosTC_Standard_init: amesa->right = 5
[AROSMESA:TC] arosTC_Standard_init: amesa->top = 18
[AROSMESA:TC] arosTC_Standard_init: amesa->bottom = 15
[AROSMESA:TC] arosTC_Standard_init: amesa->depth = 24
[AROSMESA:RAST] arosRasterizer_make_rastport()
[AROSMESA:TC] arosTC_Standard_init: Allocated BackBuffer RastPort (DOUBLEBUFFER)
[AROSMESA:RAST] arosRasterizer_AllocOneLine()
[AROSMESA] AROSMesaCreateContext: AROS Rasterizer initialised.

[hiddmesagl] CreateBuffers(hiddMesaGLVisual @ 1ca1734)
[hiddmesagl] CreateBuffers: buffer record allocated @ 1ca0744
[hiddmesagl] CreateBuffers: Single Line Render Buffer allocated @ 216363c

[AROSMESA] AROSMesaCreateContext: MesaGL.hidd_CreateBuffers(visual @ 1ca1734) returns 1ca0744
[AROSMESA] AROSMesaCreateBuffer(visual @ 1b77c8c)
[AROSMESA] AROSMesaCreateBuffer: Context Buffers created
[AROSMESA] AROSMesaCreateContext: Using framebuffer @ 1c1d204.
[AROSMESA] AROSMesaCreateContext: Mesa CORE Contexts Created
[AROSMESA] AROSMesaCreateContext: Context Created
[AROSMESA] AROSMesaMakeCurrent(amesa @ 1ca0e54, buffer @ 1c1d204)
[AROSMESA:TC] arosTC_update_state(ctx @ 1ffad4c, state -1)
[AROSMESA:TC] arosTC_update_state: SWDD @ 2016c74
[AROSMESA:TC] arosTC_update_state: TNL @ 22e6140
[AROSMESA] AROSMesaMakeCurrent: set current mesa context/buffer
[AROSMESA] AROSMesaMakeCurrent: initialised rasterizer driver functions
[AROSMESA] AROSMesaMakeCurrent: call glViewport(0, 0, 637, 477)
[AROSMESA:TC] arosTC_buffer_size(amesa @ 1ca0e54)
[AROSMESA:TC] arosTC_buffer_size(ctx=1ffad4c) = w:637 x h:477
[AROSMESA:TC] arosTC_buffer_size: amesa->RealWidth =647
[AROSMESA:TC] arosTC_buffer_size: amesa->RealHeight=510
[AROSMESA:TC] arosTC_buffer_size: amesa->width =637
[AROSMESA:TC] arosTC_buffer_size: amesa->height=477
[AROSMESA:TC] arosTC_buffer_size: amesa->left =5
[AROSMESA:TC] arosTC_buffer_size: amesa->bottom=15
[AROSMESA:TC] arosTC_buffer_size: amesa->depth =24
[AROSMESA:TC] arosTC_clear_color(c=1ffad4c,r=0,g=0,b=0,a=255) = ff000000
[AROSMESA:TC] arosTC_update_state(ctx @ 1ffad4c, state -1)
[AROSMESA:TC] arosTC_update_state: SWDD @ 2016c74
[AROSMESA:TC] arosTC_update_state: TNL @ 22e6140
[AROSMESA:TC] arosTC_clear(all:1,x:0,y:0,w:637,h:477)
[AROSMESA:TC] arosTC_clear: back_rp->Clearing viewport (ALL)
[AROSMESA:TC] arosTC_flush(ctx @ 1ffad4c) : Unimplemented - glFlush()
[AROSMESA] AROSMesaSwapBuffers(amesa @ 1ca0e54)
[AROSMESA:RAST] arosRasterizer_Standard_SwapBuffer(amesa @ 1ca0e54)
[AROSMESA:TC] arosTC_update_state(ctx @ 1ffad4c, state 525376)
[AROSMESA:TC] arosTC_update_state: SWDD @ 2016c74
[AROSMESA:TC] arosTC_update_state: TNL @ 22e6140
[AROSMESA:TC] arosTC_buffer_size(amesa @ 1ca0e54)
[AROSMESA:TC] arosTC_buffer_size(ctx=1ffad4c) = w:637 x h:477
[AROSMESA:TC] arosTC_buffer_size: amesa->RealWidth =647
[AROSMESA:TC] arosTC_buffer_size: amesa->RealHeight=510
[AROSMESA:TC] arosTC_buffer_size: amesa->width =637
[AROSMESA:TC] arosTC_buffer_size: amesa->height=477
[AROSMESA:TC] arosTC_buffer_size: amesa->left =5
[AROSMESA:TC] arosTC_buffer_size: amesa->bottom=15
[AROSMESA:TC] arosTC_buffer_size: amesa->depth =24
[AROSMESA:TC] arosTC_update_state(ctx @ 1ffad4c, state 1573378)
[AROSMESA:TC] arosTC_update_state: SWDD @ 2016c74
[AROSMESA:TC] arosTC_update_state: TNL @ 22e6140
[AROSMESA:TC] arosTC_clear(all:1,x:0,y:0,w:637,h:477)
[AROSMESA:TC] arosTC_clear: back_rp->Clearing viewport (ALL)
[AROSMESA:TC] arosTC_update_state(ctx @ 1ffad4c, state 1)
[AROSMESA:TC] arosTC_update_state: SWDD @ 2016c74
[AROSMESA:TC] arosTC_update_state: TNL @ 22e6140
[AROSMESA:TC] arosTC_write_rgba_span3(count=1,x=324,y=149)FAST nomask
[AROSMESA:TC] arosTC_write_rgba_span3(count=2,x=323,y=150)FAST nomask
[AROSMESA:TC] arosTC_write_rgba_span3(count=1,x=323,y=149)FAST nomask
[AROSMESA:TC] arosTC_write_rgba_span3(count=1,x=325,y=148)FAST nomask