June 2015

Kalahari

This Toyota bakkie is called “die Blou Nier” (the Blue Kidney). Gert is the fellow who drives it, and he drives it well.

Spend a day on the back, out in the dunes, and you will see where the name comes from.

The Blou Nier, BTW, had 750 000 km on the clock when the speedo broke. So nobody really knows how far it’s gone. And they don’t keep easy roads out in the Kalahari.

Cut line for sensitive viewers — we were not there to buy meat at the Pick & Pay.

Continue reading…

Maintenance

Look, I get it.  It’s probably OK to not replace your dust and pollen filter every 30 000 kilometers as called for by the maintenance schedule. In not-so-dusty environments you can probably stretch it to 60, maybe even 100 000 kilometers.

You can’t, however, stretch it to “never”.

R100 and Tanya’s car gets fresh air again instead of effectively being stuck in “recirculation” because of a very dirty filter.

Some code I wrote, years ago

Early eighties, to be more precise.

You see, there was Apple DOS (Disk Operating System). And then there were other Disk Operating Systems, faster and therefore better (OK, faster because very often they left out a whole lot of error checking that the Apple DOS performed — but if you have an error there’s not much you can do about it so why check :-)

One of these was Diversi-DOS. It had a splash screen, which of course was stored on the disk, along with display code.

So of course I promptly hacked the splash screen to display my own message. Recently came across a printout from way back then. So here we have some of the first machine code I ever wrote.

086C-   20 2F FB    JSR   $FB2F       JSR $FB2F and $FC58 clears the High-Res and normal text screens.
086F-   20 58 FC    JSR   $FC58
0872-   A0 00       LDY   #$00
0874-   B9 A2 08    LDA   $08A2,Y     Y=0, load from $08A2 (it's down there, 8D 8D 8D etc)
0877-   F0 07       BEQ   $0880       If the value you've loaded is zero, go to $0880 ($00 marks the end)
0879-   20 ED FD    JSR   $FDED       Otherwise print the character ($FDED prints the accumulator A), increment Y
087C-   C8          INY
087D-   4C 74 08    JMP   $0874       And get the next character
0880-   A0 04       LDY   #$04        Now, load Y with 4 and jump to the subroutine at $0895, below.
0882-   20 95 08    JSR   $0895
0885-   C8          INY
0886-   C0 20       CPY   #$20
0888-   D0 F8       BNE   $0882       Then, increment Y and loop, stop when Y reaches $20 (32 -- $ indicates base 16)
088A-   20 95 08    JSR   $0895
088D-   88          DEY               Now do the same thing, but from $20 down to 4.
088E-   C0 04       CPY   #$04
0890-   D0 F8       BNE   $088A
0892-   4C FD 08    JMP   $08FD       And then exit (back to Diversi-DOS)

                                      So here we are with Y=4..31, then 32..5
0895-   98          TYA               Move Y to X via A (because this is how a 6502 works) Second TYA maybe a bug*
0896-   AA          TAX
0897-   98          TYA
0898-   8D 30 C0    STA   $C030       Click the speaker by accessing $C030 (yes, one bit, on or off, no Soundblaster)
089B-   20 A8 FC    JSR   $FCA8       $FCA8 delays for some time dependent on the value in A
089E-   CA          DEX               Now decrement X and loop, i.e. do this as many times as the value in Y
089F-   D0 F6       BNE   $0897
08A1-   60          RTS               And return
08A2-   8D 8D 8D    STA   $8D8D       This is the text that gets displayed by the code up there from $872 to $87E
08A5-   8D 8D 8D    STA   $8D8D       Says "COPIED BY THE DIRTY DEVIL"** in the middle(-ish) of the 40 x 24 screen
08A8-   8D 8D 8D    STA   $8D8D
08AB-   8D 8D 8D    STA   $8D8D
08AE-   A0 A0       LDY   #$A0        $A0 = Spaces
08B0-   A0 A0       LDY   #$A0
08B2-   A0 A0       LDY   #$A0
08B4-   C3          ???               $C3 = C, $CF = O and so on.
08B5-   CF          ???
08B6-   D0 C9       BNE   $0881
08B8-   C5 C4       CMP   $C4
08BA-   A0 C2       LDY   #$C2
08BC-   D9 A0 D4    CMP   $D4A0,Y
08BF-   C8          INY
08C0-   C5 A0       CMP   $A0
08C2-   C4 C9       CPY   $C9
08C4-   D2          ???
08C5-   D4          ???
08C6-   D9 A0 C4    CMP   $C4A0,Y
08C9-   C5 D6       CMP   $D6
08CB-   C9 CC       CMP   #$CC
08CD-   00          BRK

* As I said, the second TYA is not needed, TAX doesn’t change A. But it’s from the earlier code, which didn’t vary the time of each “note”.

** Which is what I called myself waybackwhen.

The result is a sliding note that slows down as it gets lower, then speeds up again. At full volume (erm, there only was one volume) it’s guaranteed to get attention. Of course some guys were much much more into this than I was.

Stay tuned (might take a few years) for when I blog about the digitized voice I once hacked into the Diversi-DOS startup screen… yes, you can recognizably digitize a voice using only one bit.

 

Restaurant Quality

Winter has hit Cape Town. Wet, cold and miserable. The perfect weather for staying indoors and cooking soup.

I found some whole baby clams at the Fruit & Veg. Just the thing for clam chowder (something I’ve been wanting to make ever since having the Real Thing in San Francisco. Problem being that Tanya doesn’t like fishy dishes, so I needed an alternative.

Enter General Tso’s chicken, another recipe that’s been keeping a tab open on Firefox for quite some time.

Basically, you dredge the chicken (breast fillet cubes) in cornflour and fry it, then it goes into a slow cooker with a Hoisin / soy / rice vinegar sauce for four* hours. Add some more sauce at the end and you’re done.

For the chowder, I used Christina’s recipe, except that I had whole clams which I first needed to steam open. I then incorporated the water / clam juice into the white sauce, boiled the potatoes (small cubes) and onions, and added the bacon and chopped clams at the end.

Now I need to figure out how to make a sour dough starter so that I can serve the chowder properly next time.

 

* Recipe calls for four hours. We were hungry well before the three hour mark, so that’s how much time we gave it. Worked well enough.