About Me
Michael Zucchi
B.E. (Comp. Sys. Eng.)
also known as Zed
to his mates & enemies!
< notzed at gmail >
< fosstodon.org/@notzed >
Well that was a bit of a waste.
Blah. Spent hours and hours trying to figure out some of the clocking on the OMAP. My video output isn't quite correct at the moment - it works with my monitor, but it'd be nice to fix it. But I just couldn't get anything I tried to work. The documentation has strange examples which are a bit hard to decipher. I thought I managed to work out the programming of the clock it was using, but then the serial baud rate changed. Damnit. Tried using the other clock - and that took even more digging the documentation - but I can't get that to work either. The linux source is a bit convoluted but I might have to resort to working that that out to understand what's going on - the clocking system is pretty ... complex (there are dozens of clocks, with many cascaded from others).My new FSF membership card came in the post - or at least I got it out of the letterbox today. Bit thicker than i'd hoped - it's like a fibreglass PCB, so it might not make my wallet. The Trisquel installation is quite nice too - well setup, quite polished - everything just works. With a good selection of real applications too, like openoffice.org, gimp, inkscape, gthumb, and even evolution. Unlike some distributions with their weird application choices. Pity it's debian based mind you.
Hot again today - garden still alive somehow, at least the bits I remember to water. Getting a few (small) cherry tomatoes off every day - enough for a little salad. I suppose I need anything I can get to help my crappy diet lately. I even managed to get out for a bit - although it was just for groceries. Is it just me or are the roads a lot busier these days? Sigh.
gloat 0.1
I'm sure i'll live to regret this (i can already hear the glee of some kid discovering a buffer over-flow - well, in the unlikely event anybody ever downloads it), but i've uploaded my news snarfer 'gloat' to Google Code.gloat
- it's a bit like brag
... err, geddit?
I'm going a bit loopy today. I was up till around 4am working on a 'matrix' clone (C64 - llamasoft), although now i've lost interest in it somewhat. And after a little mucking about in the garden have been solidly stuck behind my machine reading the net, manuals, and poking at bits of code all the way through till nearly 8pm - again. Well I had some lunch and coffee somewhere in all that.
Oh - it was too hot today to do much outside, but I suppose I should be using the weather to go to the beach or do some cycling or something I can't do all the rest of the year.
Wrong UART
Well I got serial output working - was using the wrong UART (should've read the docs before assuming UART1 - it's UART3). And Das U-Boot leaves it properly configured so the output function is only 3 lines of code.
Then I hit an issue as soon as I started to use static data - my code wasn't being loaded at the right address (which took me some time to realise, since the code still ran). I don't really know why it works but I fiddled with the Das U-Boot mkimage line and now it's loading everything to the right address - it should be loading at 0x80008000 but I need to tell it to load at 0x80000000 to make it work. *shrug*
I got sick of ripping the SD card out to setup a new 'kernel' image (and a little worried, the SD slot on the beagleboard isn't really designed for repeated use), so I rigged up a rather nasty `runscript' (from minicom) script which uses ymodem to upload the image whenever I reset the machine. While the image is small this makes the testing cycle pretty easy. Just need a serial port thingy for my workstation and then I wont need the laptop anymore either.
Also along the way I wrote up some basic graphics output - just to clear the screen and display text, including a simple printf type thing. I converted my favourite font 'fixed' to a c file and can now dump text to the framebuffer. Originally I just wanted it to get some debugging output since I couldn't work out what was up with serial, but it's still handy to have.
And lastly I had a bit of a play with the DMA engine. And after a LOT of mucking about, finally got it filling rectangular regions. I couldn't for the life of me work out why double-indexed DMA just did nothing - in my haste to avoid reading the docs too closely I missed the bit which says exactly how it calculates the next address after a 'frame'. I had the alignment mucked up so it did absolutely nothing. If nothing else, it can be used for a very basic 2D accelerator - 90 degree rotations and flips, rectangular moves/copies, solid colour fills, and even masked sprites (colour keyed). So now my 'random filled box demo' runs a lot faster than it did before - around 10x actually (not that it was particularly optimised or anything).
I did some research on USB. Man what a mess that is. A few books i 'found' on the topic were useless too, just written from the perspective of windows driver writers at best (when a book uses 'visual basic' for 'portability' you know there's something very very wrong). I found some USB host stacks but they're proprietary, GPL2.x only, or BSD + advertising clause. And in any event tightly coupled to a given OS (as they must necessarily be). The Haiku one is at least X11 licensed, and clean and simple, so apart from being C++ might be the place to start if I decide to hurt myself one day with that pain in the head.
Hmmm, perhaps interrupts next, will have to get my hands dirty with assembly at some point.
Unripe fruit and vegetables
It turns out I kept picking my cucumbers green. Of course, they were just like the ones in the shops - seedless, pretty bland (although not quite so bland) and 'normal' sized.
I missed one for a few days and picked this giant - about 2' long and 5cm in diameter. Wow. That's what cucumbers used to taste like. And of course do - if they're ripe.
Same with the button squash, I'd been picking fiddly little ones, often a little bitter with a very soft skin that spoils easily. Again I missed one for a few days - and it's a world of difference. If they grow to about 10cm across or more and get the harder outer skin they taste much better (a little sweet) and last much longer (i'm also letting one grow 'all the way' to see how big they get/how it goes - it's about 25cm across after a few weeks).
Green limes - fully ripe limes are light yellow. They taste utterly fantastic and have much more juice too. Although certain varieties, such as the Tahitian Lime can get a funny over-ripe taste, so there is some justification for picking them a bit earlier. But not when they're hard and dark green. But most of the time that's all you can find in the shops (let alone the exorbitant price).
People have been trained to buy this unripe fruit, so nothing else sells. How silly. They must be right down on vitamin C and other nutrients as a result.
Why is software so far behind hardware?
For various reasons I was trying to get some binaries from some very large newsgroups - so large that I couldn't find any client that would even list all of the messages without hanging or crashing. Interestingly, I found the mail/news application in seamonkey to be one of the better ones - it worked much better than thunderbird, using far less memory, although it still got stuck very often, and that was only with 200 000 headers rather than the 6 000 000+ in the group.
I saw a few scripts/programmes for grabbing stuff in the repository for this machine so I gave them a go. I can't remember all I tried but `brag' seemed to fit the bill and worked ok on a smaller test group. Well, needless to say it just didn't scale. Either the code is bung or tclsh has a big memory leak or simply isn't up to the task. It managed to download all of the subject lines (meanwhile memory use - ~2.9G!). Well my machine wasn't really swapping so big deal eh? But then when matching the headers memory use continued to climb - even faster. It ran out of 32-bit virtual memory ... well I guess I should've been using a 64-bit OS for such a complex task!
Err, no, that's just bullshit. So I hacked up a quick and dirty C version. Has somewhat fewer features but works more or less the same for what I needed. A bit over 400 lines of code in total, only using libc. No smart algorithms apart from a zero-copy 'read-line', no asynchronous reads or other decoupling of net i/o from disk i/o or processing, etc. Total memory used whilst reading and saving the subject headers of said 6 000 000+ group - about 100K (and most of that is from the C library, I think I malloc about 50 bytes, and have 11K of bss). Total CPU used, about 10 minutes real-time, and about 5 seconds cpu time (top consistently showed 0% cpu usage - well I mean as it should, it's entirely
CPU
I/O bound!). It takes about 3 seconds to scan the 780MB cache of titles with a regex when they're in the buffer cache, about 10 otherwise (using the same amount of memory).
Alas, this is the world we live in. This is why a `netbook' isn't big enough to run `real' applications - it will just be destined to run slow scripts which proxy the heavy lifting (when it is quite capable of doing an awful lot of the heavy lifting itself). It will be kept busy struggling to show adverts instead (even something my 4 core machine has trouble with, so I turn off animated gifs and flash and block lots of advert pics). This is why, after all the advances in hardware, we now have shitter apps that run more slowly - e.g. for all it's cracked up to be, compare google-writer to say, abiword, or calc to gnumeric - with no other benefits like stability, security, and so forth.
I was looking at javafx again just recently. Someone hacked (and I mean hacked) up a sort of 'space invaders' game. Except it has no sound (could be my use of oss4), no barriers, the aliens don't move properly or speed up, and unusable controls. And it jerks around in an unplayable fashion, with tearing and an utterly atrocious frame-rate. Flash et al are pretty much the same to me. Slow, jerky - crappy games. The machine in question is capable of emulating real hardware faster than that - you can play the real space invaders (or for me, the C64 version) with proper sound, control, and 'game' all in it's glorious full-frame-rate goodness with no problems (and so it should, it's emulating a 30 year old computer!), but it struggles with a half-arsed rip-off.
Poor algorithm choices. Bad language/framework/environment choices. Poorly implemented language/framework/environment. In short, poor engineering and system design.
Computer Science lecturers always say `we don't teach computer programming'. And it's pretty obvious - no, no they don't.
(TBH `brag' does more processing than just a regex match on the titles. It tries to find the filenames, and count the parts, and tries not to grab duplicates. And it uses multiple connections to improve downloading of the actual messages. Still, there's no reason it should use anywhere near that much memory, loading all subjects into memory at once is not ncessary.)
Coloured Boxes
Was feeling a bit blah and too lazy today so instead of cracking on in the garden I did a bit of hacking. Ok, it's not much but I got a bit of code running on the beagle board that draws random coloured boxes to a framebuffer.
It's being loaded as a kernel image directly from u-boot of course, and then just `banging the hardware'.
I just snarfed the framebuffer init code from the splash screen from an old version of u-boot, with a few tweaks - remove the writes to read-only or unmapped registers and changed the screen size to 1024x768.
Hmm, not sure next. Maybe a serial driver. USB would be nice, but a bit much at this stage. Or the retaining wall!
It beat me, another year on, and what happens next?
I gave dragon age one more go. Started from scratch and spent my upgrade points wisely rather than wasting them on turning a rogue into a fighter (it's been a while since I played a WRPG). Things were going swimmingly for the first 5 hours or so, even managed to do things I couldn't before like get the two horny elves together, but then I hit a too hard part again and I got sick of retrying or wandering back and forth looking for something I could manage. I switched to easy mode.
Well, it's a little too easy but it's ok, at least I can see the story out now (which is playing out differently - this time i'm a human rather than a whiny sickly looking elf) and make some progress.
Ahh yes, another year on. It's not ending very well, I'm barely sleeping and feeling generally pretty miserable. Blah. Reading too much stuff on the intarwebs doesn't seem very healthy, it's all just so depressing. The world is going to shit really and observing that isn't as fun and interesting as I thought it would be, at least for me. Hmm.
I still have work to do in the yard, which I haven't touched for two weeks, but at least I now have a wheelbarrow, so it should go a bit faster once I get back into it. It's been a bit too hot the last couple of days to even consider it - if I had the energy to go that far anyway.
I'm still thinking about projects to work on. It's a tricky prospect however, as all of the interesting stuff is just too complicated to get involved in anymore. Or it's already done. Or it seems like a dead-end waste of time - although perhaps that is what I need, just a hobby again. I'm thinking of just doing some isolated hacking on the beagleboard - at least I have almost complete documentation for it - all 3 516 pages of it, not including the CPU. First I think I'll try and get u-boot booting something which can display to a frame-buffer. That should be doable at least. Still, not holding my breath on that one.
The Puppy Breathes Again
I was talking about ARM stuff on an IRC channel and got interested in playing with my BeagleBoard(s) again. I remembered there was a hardware issue that caused the UHCI port to fail pretty regularly and looked up to see if the designers had found a fix.Fortunately they had.
Subject: [beagleboard] Re: USB EHCI problems
From: Gerald Coley (ger...@beagleboard.org)
Date: Nov 9, 2009 5:57:18 am
List: com.googlegroups.beagleboard
This issue is due to be fixed with on REV C4. It is not clear that it can be fixed on all Rev C3 boards. You are free to try an RMA, but their is no guaranty that it can be fixed. What will be done there is the soldering of the 20uf CAP across C97 and then they will run the board for a couple of days to see how well it works.
Gerald
So, at 3am on a Saturday morning I went looking for parts. I was feeling a bit apprehensive about soldering on such a tiny part, but I didn't really feel like sending it in either. I found a 22uF electrolytic cap on an old motherboard on which all the green caps blew which fit the bill and fit the tiny spot on the board. I worked out which pin was connected to the ground rail and gave it a shot.
So after that I had to re-setup a booting image - previous ones had been wiped to use my digital camera, and a HDD was wiped to transfer tv shows. Setting it up is a bit messy but didn't take too long. Once I got it setup I had it playing video and internet radio and left it running overnight (well over-day, it was about 6am by now).
And it's been up since.
Nice one - before I was lucky to get an hour, and copying some video files across the network would've almost certainly killed it. Well thanks to the BeagleBoard guys for finding a fix. After reading about the technical specs of the OMAP chip I'm almost surprised the thing works, electronics is such a fiddly thing, compared to software where at least 0 always means 0 and 1 always means 1.
Now, to find something to do with it ...
Copyright (C) 2019 Michael Zucchi, All Rights Reserved.
Powered by gcc & me!