A Maker Faire Post Mortem…

May 21, 2012 | Rants and Raves | By: Mark VandeWettering

Phew. My legs are sore, and my voice is just returning to normal after a whirlwind two days at the Maker Faire in San Mateo. Thanks to everyone I bumped into and chatted with: I had a very nice time, and the partial solar eclipse was an added bonus (some pictures to come in a different post).

But in spite of all the fun I had, by the middle of Sunday, I had begun to have a bit of a uneasy feeling, a feeling that perhaps the event wasn’t really so much about making, but more about just a slightly different kind of consumption. For every individual who worked on some whacky project that they brought to exhibit, there seemed to be a dozen which were companies (mostly small, but some large) which were identifying “makers” as a new market segment that they wanted to sell products to.

In many ways, that’s not a bad thing: after all, I want companies like Sparkfun and Adafruit to succeed, because they make interesting components and technologies accessible to ordinary people with a desire to build. But I can’t help but wonder where are the consumers of these kinds of technologies? Of all the hundreds of thousands of Arduinos sold, why are there so few examples of cool artistic or technical applications being demonstrated on the tables at Maker Faire?

The reason that I go to the Maker Faire is to celebrate in the joy of craft and tinkering. I want to be inspired to think broadly and creatively, to extend my skills, and to share in the pleasure of making the world a tiny bit more beautiful/amazing/fun.

What seems really odd to me is that I heard more than one person lament the sorry state of science/electronics/shop skills in “kids” today, that it’s just really hard to learn this stuff. I couldn’t help but blink: with the internet, with YouTube, with resources like IRC and mailing lists, with great companies (large ones like Digikey, and smaller ones like Sparkfun and Adafruit) I don’t think it’s ever been easier. One lamented the long ago loss of Don Herbert: TV’s Mr. Wizard. It was a great loss, to be sure, but we don’t need a TV network to promote science to young people. We can blog, podcast, form clubs and hackerspaces, and communicate with people all over the world. We have Khan Academy, Udacity, the Khan Academy, Vi Hart, and dozens of others to help inspire and educate.

In other words, we can all be Mr. Wizard. We are challenged not just to be students, but to also be instructors. To inspire others, as well as to be inspired.

By five, our little group was tired, and we were heading back to the car. At 5:18, the moon started to cover the sun, and by 5:30 we were back to the car, where my little Meade telescope and solar filter was waiting. We watched as the moon slowly ate the sun, and shadows of point sources showed the tell-tale crescent shapes. The sky got oddly dark. The temperature seemed to drop, and the wind picked up.

And then, the sun started to grow again. We packed up, and decided to head to dinner.

And I started to talk this out. And I realized that the feelings that I had were really just feelings of my own failure to live up to the ideas that I set out above. After all, I didn’t bring any cool projects to the Maker Faire. (Okay, I wasn’t a total slouch, I helped some young people who did bring stuff there, but the point remains.) Rather than complain about what needs to be done, I could just do something myself. If the ratio of independent creative projects to others is too low, then there is something I can do: I can bring something next year.

And, of course, over the last month, my blog has gotten a thick patina of dust. I’ve not been doing much with it. I could make excuses, but they don’t even ring true to me. I want to do better. I’ll start with trying to resume some regular posting of my ongoing projects. I’ll endeavor to be more creative, and less of a consumer.

Hmmm. Maybe the Maker Faire really does work fine just the way it is.

States heard in the last week on JT65

May 12, 2012 | Amateur Radio | By: Mark VandeWettering

I’ve got something like 30 states worked via JT65 over the last month or so, but I’ve obviously heard a lot more than that. I took my listening log, extracted all the U.S. callsigns, and then wrote a simple Python/sqlite script to look up each state for the callsign, and see how many states I’ve actually heard. It came out with 49 states. A quick perusal showed that I didn’t receive any calls from Wyoming or South Dakota. A moment’s further inspection showed that I had received several calls from Washington, DC, which accounted for the discrepancy.

Here’s the breakdown of stations heard by state:

AK KL7YK
AL KF4RWA, KI4PG, KK4A, KK4AFS, N4AU, ND4Q, W4YXU, WB4KDI
AR AC5EI, AE5ZZ, K5DTE, K5XH, KF5HTK, KO6FU, W5TT
AZ AC7LB, AE7CD, K0TW, K3WYC, K7DTB, K7KDX, K7LOL, K7TEJ, KB7RLY, KD7PMS,
   KM3N, N1LS, N7AMA, N7GDP, N7NEV, N7SKV, N7THN, NO7P, NR5O, W7PP,
   W8FDV, WM7CH
CA AA6TF, AC6JA, AG6IP, AK1P, K0CFI, K6AZR, K6CLS, K6DKY, K6EU, K6HX,
   K6SID, KB6J, KC6OVG, KD6HQ, KD6MHL, KD6NJE, KF6XE, KG6AF, KG6WIK,
   KI4MI, KI6HS, KI6UAL, KI6VJY, KI6YAA, KJ6CC, KJ6DQR, KJ6RKZ, KO6KL,
   N3PV, N4SF, N6BO, N6BRP, N6BX, N6OL, N6RRY, N6TE, N6WS, N7LMV, NM3S,
   NM6W, NN6XX, W6DTW, W6KAP, W6ONG, W6QB, W6TQV, WA6ALA, WA6OWM, WB6EZH,
   WB6RLC, WB6ZXM, WO6M
CO AA0DW, AB0YM, AC0ZL, K0BAM, K0SU, KB0QC, KC0ONP, KD0BIK, KF0QZ, KI0J,
   N0SMX, NN0G, W0GLB, W0QL, W0RGD, W7RTX, WB4CIW
CT AG2K, WA1NGH, WF1G
DC AB3UM, N3ES, N8HM
DE AB3OF, K3BH, W3MLK
FL AD5ZA, AJ4LU, AJ4WC, K4EOD, K4LRP, K4TFT, KA4USN, KB4VC, KJ4YAC,
   KK4CIS, KK4XO, N4ABN, N6AR, ND3H, W4DAS, W4JCM, W4TV, W9IL, WA4KBD,
   WB8VQU
GA AB4RH, K2TOD, K4CHC, K4GB, K4LDC, KI4UMX, N3XX, N4LXB, N4MEP, N4PHT,
   W4ED, W4KDA, WB4WTN
HI KH6OO
IA AA0N, AC0XY, N0GR, WA0EIR, WU0U
ID KF7GMV, N7OQF, W7URX
IL K9EEI, K9JKM, K9PLX, KA9BHD, KA9CCH, KA9RXK, KB9ILT, KC9MEG, KC9NWH,
   KC9UNL, N9APK, N9FYX, N9GRG, N9OQW, N9SS, NG9R, W9RVG, W9YX, WA9KXZ,
   WA9MNF, WD9IOK
IN K9JUI, K9MQ, KC9NBV, KY9J, N9ACD, N9FDF, N9WKW, N9WVM, W9FFA, WB9IIV,
   WC0Y
KS AE0AR, KI0KK, W0PSK
KY K9AAN, KA4OJN, KD7YZ, KV4AJ, N9DFD, WA4PBM, WB4ZFO
LA AA5AU, AE5VB, K4QAL, KB5GA, NF5Z, NO5L, W5ADD, W5GAD
MA K1HFR, KB1ESR, KB1UIF, KT1B, N1GJ, N1MGO, NZ1MT, W1BS, W1MA, W1UU,
   W1XP, WA1GPO
MD AB3RS, K3IO, KB3VQH, N3FHW, N3KV, W2JVE, WA3MEJ
ME KA1QW, N1IPA, N7GLR, W1BFA, W2ZEN, W3HBM
MI KB8RMX, KC8GTX, KD8CXQ, KD8OTT, KD8RV, KG8OC, N8BB, NZ8V
MN K0JWC, KA0UEH, KB0HQD, KB0MDQ, KC0OUZ, KC0YFC, N0UE, NA0F, ND0M,
   W0DYD, W0RSB
MO AC0LP, AC0MW, K0GK, K0TPP, KD0QJL, KD0QYN, KF0IQ, KG0KP, KL7QW, W0RL,
   W0TTN, WB0LCW
MS AE5SK, KB5WKQ, KD5NDU, N4UPX, N5GDM, W8DM
MT K7CPY, KS7R, NT7R
NC K4BSZ, K4YTE, KJ4DJ, KJ4OHK, KR4RO, N4JS, W4MPS, WB4M, WB4QIZ, WZ5X
ND KI0QS
NE K0LUW, NI0B, W0YF, WD0DMO
NH KB1GKN, KJ1J, W1MSN, W1YQ
NJ K2AFY, K2RH, KC2WUF, ND2K, WX2H
NM AB5Q, K5USF, KC5TY, W5GEM
NV AB7KT, AG7CM, KE7S, KK7CC, KS7DX, W7UV
NY KA2AEY, KC2MBV, KD2BIP, N2YZS, W2MDW, WA2GSX, WB2KEC, WB2SXY, WF2S
OH AA8EN, AC8FT, K0KC, K8GI, KC8HNZ, KD8BIN, KD8RDH, KN8DMK, N8IR, N8TL,
   N8XYN, NC8T, NT8Z, W8BI, W8MDG, WA8ICJ, WT8D
OK AF5Q, K5WPN, KB5LER, NZ5C, W5LE, WQ5O
OR AA7CU, AE7TO, K2NCC, K7JPF, K7TLP, KF7JGF, KK7CG, N7MQ
PA AD2L, AK3J, K3BS, K3DY, K3HR, K3NVI, K8WHA, KC3DS, KC3U, KT3L, N3MVX,
   N3WLB, N3YEA, NC3P, W3BI, W3HZL, W3RC, WA3CAS, WA3DNM, WA3ERQ, WA3NGU,
   WA3ZKZ, WD2RA
RI K1NPT
SC AI4GY, K4AMA, K4BTC, KG6MC, KJ4IZW, KJ4ZQX, KK4DSD, WB2GJD
TN AJ4HW, AK4DW, K4KQZ, K4PJO, K4TRH, KE4TG, KX4WB, ND2E
TX AA5KK, AE5TI, AF5BO, AK5V, K2OO, K5FRD, K5TCJ, K5WW, K5YUR, K6VNG,
   KD5HOP, KD5ZAT, KE5MC, KF5IAK, KF5MDZ, KN8KAZ, N5JWM, N5LYJ, N5VP,
   NA5AA, NO5B, NT5HS, NW5P, W0LPD, W5IPA, W5MDB, W5REM, WA5MS, WA5PGS
UT K7KKY, KJ2U, N7SMI, NS7B, WA7ADK, WE7BBQ
VA K0PT, K4LCM, KE4SAV, KJ4VTH, KU4FO, KX4P, N4ST, W4KZK, W7OTQ
VT AA1E, AB1NJ, K1LES, N2BJW, W1FNB, W1HRM
WA AC7IJ, AC7SG, AE7KI, K7LFY, K7MSC, KD7PCE, KK7UQ, NY7U, W7EWG, W7NBH,
   W7PI, W7SSK, W7VAN, WA7KPK, WA7SCH, WB7AJP, WE7P, WR7K
WI AB9DK, KA9SWE, KE9JF, KE9LZ, NA9J, WB9BJQ, WB9NRK
WV K8OHZ, KC8GCR, WB8QPG

Addendum: Here’s the states (32 of them) that I’ve worked over the last month.


AK KL5E, KL7YK, WL7BDO
AZ AC7LB, K7TEJ, KM3N, KW7E, N7NEV, NV1D, W8FDV
CA N6BX, N7LMV, W6KY, WA6OWM
CO AA0DW, AB0YM, KC0ZGK, NK0G
CT KB1UUB, WA1NGH
FL KK4XO, N4ABN
HI KH6GRT, KH6SAT
IA K8OM, N0GR
ID KF7GMV, N7OQF
IN N9WKW
LA W5ADD
MA KB1UIF
MD K3IO, K3VPZ, N3CAL
MI KK8MM
MO AC0MW, WD0ECA
MS N4UPX
NC KR4RO
NE WD0DMO
NH K1CF
NJ K2AFY, K2RH
NM KC5TY, WA5DJJ
NY KC2MBV, WA2GSX
OH N8TL, WT8D
OK AA5CK, AE5US, K5WPN
PA AD2L, W8IJ
PR NP3FS
SC N4ITM, WB2GJD
TX K5WW, N5LYJ, WA5MS
UT KJ2U
VA N4RP
WA AE7U, K7MSC, KE7WEG, W7PI, WB7AJP
WI AD9P, WB9SDD

Countries heard (not worked) on JT65 in the last 7 days…

May 11, 2012 | Amateur Radio | By: Mark VandeWettering

Not a bad list, really, given how crappy my antenna is. Most of the DX was heard on 20m.

Alaska, Argentina, Asiatic Russia, Australia, Austria, Belgium,
Brazil, Canada, Chile, China, Cuba, Curacao, Czech Republic, England,
Estonia, European Russia, Fed. Rep. of Germany, Finland, France,
Gabon, Guantanamo Bay, Hawaii, Indonesia, Japan, Netherlands, New
Zealand, Poland, Puerto Rico, Republic of Korea, South Africa, Spain,
Switzerland, Taiwan, Thailand, US Virgin Islands, Ukraine, United
States, Venezuela

Beating the dead horse: the search for “quality” in radio amateurs…

May 11, 2012 | Amateur Radio | By: Mark VandeWettering

Last night the mailbox contained the latest copy of QST magazine, which always means at least a few minutes of interesting reading. I usually read the magazine more or less front to back, flipping through. I mostly enjoy technical content, but reading about other aspects of the hobby (contesting, etc…) as an interesting diversion.

Sadly, some things are more irritating than diverting, such as the “Letters from Our Members” on page 24. For the last couple of months, some insist on perpetuating the endless whining about the decreasing quality and experience of the newly licensed. Some small samples:

I feel that hams still need to spend at least two years in each license class before upgrading. I have always thought it was the Extra class licensees who we all looked up to because they had the experience that the lower license classes did not have.

Paul Eaton, KR4IN

Morse code is what distinguishes hams from other hobbyist wireless communicators; it’s really the only differentiator. …

The excuse about being handicapped might have great merit for some, but not for me. I know and have worked hams who are blind, deaf, and paraplegic many times. …

Steve Katz, WB2WIK

When I read stuff like that, it just makes me weary for our hobby, even more so that QST chooses to continue to devote inches of their magazine to give a soapbox to such counter-productive discourse.

Paul is basically trying to make the assertion that the Extra license used to mean something that it no longer does: that if someone held an Extra class license, you could be assured that they knew what they were doing, that they were the acme of our hobby. I would submit that it was never true: that as long as so-called “incentive licensing” has been around, the only thing that you could be reasonably assured of was that someone had taken the required tests and received a passing grade. The idea that an amateur license conveys some expertise in itself is just credentialism: it prevents you from actually having to through the effort of actually trying to determine the skills and knowledge of someone else before you pass judgement upon them. There are hams who hold the “lowly” Technician class licenses who are incredibly skilled and knowledgeable, and Extras of many decades who are not. Judging someone’s abilities based upon simple measures like how long they’ve been licensed or what class they achieved is fraught with peril.

A ham radio license is like a fishing license. It’s a way for the government to limit access to a scarce shared resource that they manage for the benefit for society. The government’s interest in testing you is to ensure that you use the resource in a way which is not harmful to other spectrum users, and without significant risk to the public. And that’s it. All the other items listed as purposes in Part 97 are our shared responsibility as hams: to self-train, to help our communities in times of emergency, and advance the radio arts. Those responsibilities are what all hams should aspire to do, regardless of license class, regardless of experience level.

And Morse as the “only differentiator”? Sigh.

First of all, I wonder just who these other “hobbyist wireless communicators” are that Steve is referring to? Is he talking about CBers? People who use the FRS or MURS? Or perhaps the myriad wireless users of Part 15 based wireless access points? It’s true, most/all of these services do not use Morse, but is that the only differentiator? Really? As hams, we are empowered by our license to build our own equipment and operate on frequencies and modes which are not available to the operators of any of these other radio services. And of course we are challenged to train and learn more about radio, which was never really a cultural component of any of the other “hobbyist” wireless options. Surely those distinguish us rather strongly from these other services.

And the fact that Steve does not accept the fact that there are people whose handicaps could keep them from passing a Morse code test does not actually mean that such people do not exist. But more than that: why should a parapalegic or deaf person have to struggle more to become a radio amateur than someone without these physical difficulties? After all, there are plenty of able bodied hams who struggled to pass these tests, only to never use Morse again. The service is not enriched by such people or their struggle. It’s simply not relevant.

Hams like Steve and Paul are dinosaurs: clinging to a view of ham radio that’s not healthy or relevant. The credential doesn’t mean what Paul thinks it should. The importance of Morse is much, much slimmer than Steve thinks it is. Neither attitude encourages anyone to participate in this great hobby. They are just beating a dead horse.

NJQRP’s “Chat With The Designers”

May 9, 2012 | Amateur Radio | By: Mark VandeWettering

I’ve often thought that the various ham radio podcasts that I like don’t really cater to the technical side of the hobby. Sure, you can get news from the Amateur Radio Newsline, and some nice introductory material on Ham Nation or the ICQ Podcast, but on the whole these podcasts don’t address technical issues very deeply. Even SolderSmoke, a podcast dedicated to homebrew radio, doesn’t really dig into the technical details very often.

That’s why I was so pleased to see “Chat With Designers”. Every Tuesday at 8PM Eastern (0000z), George Heron, N2APB and Joe Everhart, N2CX get together on Teamspeak, an internet conferencing system and discuss technical topics of interest to radio amateurs. Back on April 24th, the discussion was on magnetic loop antennas, a subject that I am fairly interested in and I found the discussion quite interesting. What’s very nice is that they also provide MP3s of the session, logs of the text messages exchanged via TeamSpeak, as well as PDF notes that include many references. Bravo gentlemen! And thanks to the NJQRP for hosting these very cool discussions. I’ll try to tune into one live in the near future.

Chat With the Designers

One month of experience with JT65

May 5, 2012 | Amateur Radio | By: Mark VandeWettering

On the last day of March, I started using the JT65-HF program to do some digital operation on the HF bands. In the roughly month since then, I’ve logged contacts with 30 states, and 13 DXCC entities, using my ICOM IC-735 and a crappy 40m dipole that’s mounted far too low. In the last week alone, I’ve heard stations in 46 DXCC entities. For operation inside the U.S., power levels of 10 watts seems entirely adequate, whereas the DX contacts seem easier with 25-35 watts. I’ll try to do a more informative video about these operations in the near future, but for now, here’s the contacts in 30 states. It’s been a lot of fun, give it a try if you haven’t before.

AK WL7BDO, KL5E, KL7YK
AZ N7NEV, KW7E
CA K6SID, W6KY, N6BX
CO AB0YM, NK0G, KC0ZGK
CT WA1NGH, KB1UUB
FL N4RP, KK4XO
HI KH6GRT, KH6SAT
IA K8OM
ID KF7GMV, N7OQF
IN N9WKW
KS K0KU
KY N4ITM
LA W5ADD
MD K3IO, K3VPZ
MO WB0LCW, WD0ECA
MS N4UPX, K5WW
NC N4ABN, KR4RO
NH K1CF
NJ K2AFY, K2RH
NM WA5DJJ
NV KB7NO
NY KJ2U
OH N8TL
OK AA5CK, K5WPN, AE5US
PA W8IJ
PR NP3FS
SC WB2GJD
TN NS2R
TX WA5MS
WA AE7U, KE7WEG, W7PI, K7MSC

K3MGY, the Titanic Special Event Station

April 18, 2012 | Amateur Radio | By: Mark VandeWettering

On this past Saturday, April 14th, I was tuning around to see if I could pick up one of the stations which was activated to celebrate (is that the right word) the 100th anniversary of the Titanic disaster. I quickly found K3MGY in Baltimore, and recorded an hour of their operation on twenty meters. Not the most compelling audio, as my setup is pretty crude by most standards, but K3MGY’s signal was strong, and I could often hear both sides of the QSO. If you want to hear what it’s like to be using my dining room shack, go ahead and download the 27 megabytes, grab a Diet coke, and close your eyes: it’ll be just like being there.

April 14th, 2012 recording of station K3MGY (MP3, 27 megabytes)

Warning: it’s just raw, unedited audio. Repeat. Raw, unedited audio. You will find it boring, unless you are crazy like me.

A cool JT65 QSO…

April 15, 2012 | Amateur Radio | By: Mark VandeWettering

Last night I got home from a day spent with new-baby-relatives, and decided to power up the ham radio setup and see if I could snag any good QSOs via JT65. The bands weren’t really all that good for me, but heck: it’s JT65, and it always seems to present something. A few minutes later, I saw the callsign K3IO pop up: I answered the call, and then tried to hit QRZ to find his details, but QRZ appeared (appears?) to be down, so I just googled.

And then I realized that it was Doctor Tom Clark (formerly W3IWI). Many hams know who he is, but in case you don’t, here’s a list of some of his accomplishments taken from his retirement announcement in 2001:

Tom received his B.S. in Engineering Physics and his Ph.D. in Astro-Geophysics from the University of Colorado in 1961 and 1967 respectively. From 1966 to 1968, he served as Chief of the Astronomy Branch at NASA Marshall Space Flight Center and as ProjectScientist on the Spacelab Coronagraph. Since arriving at GSFC in 1968, Tom has received numerous NASA awards for his pioneering work on Radio Astronomy Explorer 1 and 2 and several generations of Very Long Baseline Interferometry (VLBI) systems. Since the beginning of the NASA Crustal Dynamics Project in 1979, a global network of approximately 30 VLBI stations have been used to define the Celestial reference Frame and to measure global plate tectonics, Earth orientation parameters, and Universal Time. In recent years, he developed the Totally Accurate Clock (TAC), an inexpensive GPS timing receiver that has found widespread use in a number of global networks. Tom was named a Fellow of the American Geophysical Union (AGU) in 1991 and a Fellow of the International Association of Geodesy (IAG) in 1999. Tom was also a pioneer in amateur and digital radio; he designed and flew several low cost satellites for relaying amateur radio messages around the globe and is a past president of AMSAT. Earlier this month, he was one of only 50 initial inductees into the CQ Amateur Radio Hall of Fame, a list which included such engineering luminaries and inventors as Guglielmo Marconi (radio), Samuel Morse (telegraph), Nikola Tesla (HF generators and radio), and John Bardeen and William Schockley (transistor).

The same announcement refers to him as NASA Goddard Space Flight Center’s “resident curmudgeon”. I can’t think of a cooler description.

I mangled the final 73, and sent Tom a quick email after our QSO apologizing and (in addition to telling him the details of my dining room table shack) gushing a bit about what a pleasure it was to exchange a QSO with him. He kindly responded similarly, thanking me for recognizing his “new” callsign. It’s too bad JT65 isn’t good for conversations, but it’s still a nice QSO.

fldigi now includes WEFAX reception…

April 10, 2012 | Amateur Radio | By: Mark VandeWettering

Okay, nothing really more to say: fldigi now has WEFAX reception. I decided to try it out on transmissions from Norfolk, VA tonight. Not bad (although I think my own receiver works a bit better). Still, it’s nice to have them in one place. Now, all that fldigi needs is JT65A, and life would be good.

Russ Cox muses about Fields and Reed-Solomon codes

April 10, 2012 | Computer Science, Math | By: Mark VandeWettering

I’ve been pretty interested in codes of all sort, both the cryptographic codes and the codes that are used to provide error detection and correction. While I’ve played around quite a bit with convolutional codes, I haven’t really every bothered to develop more than a cursory understanding of the Reed-Solomon error correcting codes which have widely applied in many applications such as data storage (most notably for compact discs) and satellite data transmission. It’s very cool technology.

Luckily, super smart guy Russ Cox has a very nice writeup on the theory and practice of Reed Solomon codes. Previously Russ had postings about fast regular expression matching which you might have read (or should have). I really like his postings: he has a very clear, pragmatic but not dumbed-down approach to both the theory and practice of programming. This series promises to go on in future postings, I’ll be eagerly awaiting future installments.

My first week of JT65..

April 8, 2012 | Amateur Radio | By: Mark VandeWettering

Over the last week, I started playing around with JT65-HF. JT65-HF is a digital mode, which is good for only the most basic of information exchanges: grid square, signal levels, and perhaps a very short 73 message. But it’s got some cool features. It operates on low power, and can automatically log any callsigns you spot to a centralized location, rather like the WSPR propagation reporter. JT-65 writes records of all signals received in CSV format, and so you can mine them for all sorts of good information. I wrote a simple script that isolated all transmissions that specified a Maidenhead gridsquare, and then gathered them together all the callsigns that originated in each square. Over the last week, I’ve logged 453 unique callsigns, from 249 unique gridsquares. Not bad, for very low 40m dipole. Check it out!

BL01 KH6GRT, KH6SAT
BL11 KH6DC, KH6OO
BP51 KL5E, KL7YK
BP54 WL7BDO
CM87 WQ6C
CM88 KD6HQ, N6BX
CM94 KI4MI
CM95 KG6WIK
CM97 AK1P, K6EU, K6RF, KD6FTR
CM98 KJ6CC, KJ6RKZ, W6KAP
CN76 K7MSC
CN79 VA7HZ
CN82 K7TLP
CN84 AI7W, KF7JGF
CN85 K2NCC, K7FET, KE7WEG, W7JAZ, W7LHT, W7YES, WE1SH
CN87 AE7U, WA7SCH, WB7AJP
CN88 AC7SG, K3NDE, VA7RME
CN89 VA7EFV, VE7GMN, VE7NH
CO70 VA7JH
CO90 VA7AQD
DL80 XE1GZU
DL99 K5WW
DM03 WA6OWM
DM04 AG6EF, K6AZR
DM12 N3PV
DM13 K6RBS, KC6OVG, KD6MHL, W4EG, W6KY, WB6RLC
DM14 N6CVA
DM26 AG7CM, KS7DX, N7BPA
DM33 K3WYC, K7TEJ, N7AMA, N7GDP, NR5O
DM35 AE7CD
DM37 KK7H
DM41 N1LS
DM43 KM3N, N7NEV, N9CVB, W8FDV
DM49 KK7FC
DM62 WA5DJJ
DM65 WB2FKO
DM68 K0JY
DM78 W0KIT
DM79 AB0YM, KC0ZGK, KD0BIK, WB4CIW
DM91 K5OAI
DM95 WY5R
DN17 N7JFP, W7MEM
DN23 KF7GMV
DN31 KD7SXN, KJ7NO, N7JCO, NS7K
DN36 N7NSO
DN40 KJ2U
DN47 NT7R
DN71 WA7ZXL
DN84 K0JV, K7RE
DN98 W0TUP
DO33 VA6SZ, VE6SQ
EL07 K2OO
EL17 KF5IAK
EL18 NW5P
EL29 AE5RA, KB5UPS, KF5MDZ
EL49 KB5GA, W5ZPA, WB5NPW
EL86 NY4FD
EL87 KG4OXA
EL89 K3LUE, WB4RQD
EL95 AJ4WC, KK4CIS
EL98 AA4KN, KS4N, N4ABN, W2RXG
EL99 KG4Q
EM00 AC0WN
EM05 AA5CK
EM11 K5HGX, N6PL
EM12 K6VNG, NA5AA, W5AP
EM13 AC5T, KJ5XX, WA5MS, WA5PGS
EM15 AE5ZD, W7CNK
EM20 AA5KK
EM28 K0ASK, WB0ZPW
EM29 KB0PPQ, KD0AGX, W0PSK, WB0LCW, WB0ZYU
EM30 K5DDM
EM34 AE5ZZ
EM37 N0FYF
EM40 K5CJU, W5ADD
EM42 N5VEI
EM45 AE5RU, AE5SB, W5TT
EM47 N0NSR
EM48 AA0YY, AC0LP, K0TPP, W9MO
EM50 N4UPX, W5XN, W8DM
EM59 K9EEI
EM63 KF4RWA, KK4AFS
EM65 K4KQZ
EM67 W9ATB
EM69 N9WKW, WB9IIV
EM70 K4TFT
EM73 K4STA
EM74 AI4RJ, KB4KBS
EM78 K8LEN, K9AAN, N4MRM, N9DFD
EM79 N8XYN, W8JAQ
EM83 KS4GY
EM84 KD4YDD, KG6MC, W4DJW, WB2GJD, WB4ZWK
EM85 KJ4ZQX, N5FPW
EM88 KC8GCR, KD7YZ
EM92 K4BTC
EM95 KR4RO, W1HFB, WB4KJV
EM96 K4BSZ
EM99 WT8D
EN10 N0LWF
EN11 KA0VXK
EN21 WD0DMO
EN33 N0HD
EN34 W0OHU, WB0N
EN35 KC0YFC, N0OLE, ND0M
EN36 K0JWC
EN37 NA0F
EN41 KB0NAZ, KD0JHW, WA0EIR
EN42 AA0N, K8OM
EN43 WB9BJQ
EN44 KC9ECI
EN50 N9GUE
EN51 KA9BHD, KA9CCH, KB9MNM, KC9UDE, W9YNP, WA9MNF
EN52 K9JKM, KC9MEG
EN53 KA9SWE
EN55 WB9SDD
EN60 KA2EYH
EN61 KB9ILT, KC9OMS, N2BJ, WB9B
EN62 KC9IL
EN63 KD8OTT
EN72 N8BB
EN73 NZ8V
EN80 K0KC, NT8Z, W8DEL, W8KHR, W8MDG
EN81 KD8BIN, NM8W
EN82 AC8KR, KK8MM, VA3DAZ, VA3UG
EN90 WA3CAS
EN91 KG8IU
EN92 VE3FMC
EN93 VE3IYB, VE3ZUP
FD55 LU1XT
FD66 LU2XPK, LU2XSN, LU8XQL
FF45 CE4SFG
FF97 LU4FT
FG75 LU5OM
FI07 HC5VF
FJ78 YV6BFE
FJ79 YV5MM, YV6GM
FJ92 PV8AZ
FK52 PJ2MI
FM03 N4ITM
FM04 KS4S
FM08 KX4P
FM09 WK8G
FM16 K4MJ, K4VHV, KQ4ZH, N8XHF
FM17 K8SI
FM18 KB3FF, KG3BOZ, N3CAL, N3ES, W3YTS
FM19 AB3RS, W3FJD
FM28 AB3OF, KB3IWV, W3MLK, W3SJT
FM29 N2IDW, W3NRL, WA3QHJ
FN00 N3WLB
FN01 KB3MOW
FN02 VE3EBN, W2DLL
FN03 KC2ZUF, VA3LLZ, VA3PID, VA3WLD, VE3EK, VE3EQV
FN04 VE3NLS
FN10 K3MRK, KB3VNH, WD3K
FN11 K3KAA
FN13 VA3JLF, VE3EP
FN20 K2RWH, K8WHA, KB3TC, KC2WUF, KI2P, ND2K, NY3Z, W2GM, W3BI
FN25 VA3NRN
FN30 KA2DUT, KB2AMY, KC2MBV
FN31 KB1UUB, KC2QFR, WA1NGH
FN34 AB1NJ, KC2FZN, N1DNN
FN41 K1MGH, KA1ERL, W1UU
FN42 KB1ESR, KT1B, N1MGO, NJ1H, W1MSN
FN43 K1CF, KA1QW, W1WRH
FN44 N1GB
FN46 VE2PTB
FN53 N1IPA
FN74 VE1SKY
FN75 VE9DX
GF05 LU8ENU, LU8EX
GF15 CX8AF
GF49 PY3APY, PY3FBI
GG40 PY3OL
GJ25 PZ5RA
IL18 EA8OM
IM58 CT1FBK, CT1HMN
IM87 EA7GDC
IN52 EA1YV
IN80 EA4GB
IN95 F1MWV, F8RZ
IO62 EI3JB
IO64 MI3LDO
IO75 MM0AMW
IO82 G0HDB, G3NYY
JN01 EA3AQS
JN11 EA3NE
JN15 F5BOB
JN37 F6DKQ
JN46 DL1GHJ
JN47 OE9HGV
JN49 DJ9UN
JN55 IK2VTJ
JN69 OK1DX
JN88 OM2AOA
JO03 2E0ZRQ
JO10 F4BAL, F4FVH
JO11 PA0INA
JO21 PA3GAN
JO30 DF7KB
JO31 DK6CS, DL1EKZ, DO1IP
JO32 PA1NL, PD5T
JO45 OZ1TMK
JO51 DM2BPG
JO52 DL1AAH
JO53 DK6XY, DL1HCN
JO62 DD6AJ
JO82 SP3CUG
JP53 LA3LJA
KF26 ZS2EC, ZS2ND
KG43 ZS6BUN
KN95 RN6AM
KO14 LY2OT
KO72 R3WF
LN15 RV6FT
LO14 UA4UK
LO16 UA3TN
LO54 UA4PPQ
NJ84 YB6EN
OF78 VK6NAT
OI94 YC8HI
ON80 BA1PK, BG1QQT
PF94 VK5KGP, VK5NG
PM45 HL5BLI
PM53 JA6ATL
PM54 JH4BTI
PM63 JA5JGY, JA5TX
PM64 JA5AOA, JA5BDZ, JI4JGD
PM74 JA3LXJ, JA8CQM, JE3RNC, JH3OWW, JH3XYP
PM75 JA3BJZ
PM84 JA2IDR
PM85 JA0FOX, JA2JNT, JG2JSZ, JH2DBQ, JQ2HVN
PM94 JR2FVG
PM95 7J1ADS, 7J1BBC, JA1KXQ, JA1OYY, JA1PJS, JA1XIA, JA7FYU, JG1XSL,
     JH1CJY, JH1KYA, JI1CPN, JP1QDH
PM96 JA1MOD, JG1PDG, JH0FSO
PN53 UA0LMO, UA0NL
PN68 UA0DBX
PN78 RA0CGY
QE37 VK7SM
QF22 VK3AMA, VK3BM
QF44 VK1DW
QF56 VK2AJF
QG39 VK4FNQ
QG62 VK4GC, VK4MJF
QG63 VK4LHD
QH30 VK4BDJ
QM05 JA1RNJ, JQ1HDR, JR3ELR
QN12 JA8LN
QO59 UA0IT
RE66 ZL3AB, ZL3NB

My first crude DCPU-16 simulator…

April 6, 2012 | Computer Games, Operating Systems, Programming Languages | By: Mark VandeWettering

A few days ago, I mentioned that @notch, the creator of Minecraft, had a new idea for a space game that he was beginning to work on. One of the features of this game is that your spaceship would be controlled by a simulated computer that you could program. He released a preliminary specification for the 16 bit machine called DCPU-16. I like writing things like this, so I spent a couple of hours and hacked the simple core of one together. It doesn’t yet properly count cycles, but it does implement the basic instruction set, and executes the sample program that he provided in the notes. As yet, he hasn’t specified how things like I/O will work (I suspect some of the type 0 reserved opcodes will be used), so it’s not of much use, but it might serve as the basis for others to explores.

Addendum: The example program implements a simple loop with the target :loop, but I suspect the bottom of the loop should be an IFE rather than an IFN instruction, otherwise, the loop simple exits on the first iteration.

[sourcecode lang=”cpp”]
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>

/*
* An implementation of Notch’s DCPU-16 specification, version 1.1
* Written by Mark VandeWettering.
*/

/* this has to be 16 bits, because we aren’t going to mask increments
* and decrements.
*/
typedef unsigned short Word ;
#define MEMSIZE (65536)
Word M[MEMSIZE] ;
Word R[8] = {0, 0, 0, 0, 0, 0, 0, 0} ;
Word PC = 0 ;
Word SP = 0 ;
Word O = 0 ;
Word W = 0 ;
unsigned long cycles = 0L ;

#define OP(w) ((w)&(0xF))
#define FIELDA(w) (((w)>>4)&(0x3F))
#define FIELDB(w) (((w)>>10)&(0x3F))

unsigned char *Rn[] = { "A", "B", "C", "X", "Y", "Z", "I", "J"} ;

Word
DecodeSRC(Word v)
{
Word EA ;
if (v < 0x8) {
return R[v] ;
} else if (v < 0x10) {
return M[R[v&0x7]] ;
} else if (v < 0x18) {
EA = M[PC++] ;
EA += R[v&0x7] ;
return M[EA] ;
} else if (v < 0x20) {
switch (v) {
case 0x18:
return M[SP++] ;
case 0x19:
return M[SP] ;
case 0x1a:
return M[–SP] ;
case 0x1b:
return SP ;
case 0x1c:
return PC ;
case 0x1d:
return 0 ;
case 0x1e:
return M[M[PC++]] ;
case 0x1f:
return M[PC++] ;
default:
abort() ;
}
} else if (v < 0x40) {
return v – 0x20 ;
}
abort() ;
}

Word *
DecodeDST(Word v)
{
Word EA ;
Word *T ;
if (v < 0x8) {
return R+v ;
} else if (v < 0x10) {
return M+(v&0x7) ;
} else if (v < 0x18) {
EA = M[PC++] ;
EA += R[v&0x7] ;
return M + EA ;
} else if (v < 0x1f) {
switch (v) {
case 0x18:
return M+(SP++) ;
case 0x19:
return M+SP ;
case 0x1a:
return M+(–SP) ;
case 0x1b:
return &SP ;
case 0x1c:
return &PC ;
case 0x1d:
return &W ;
case 0x1e:
return M+PC++ ;
case 0x1f:
return &W ;
default:
abort() ;
}
} else if (v < 0x40) {
return &W ;
}
abort() ;
}

int
SkipArg(Word arg)
{
if (arg >= 0x10 && arg < 0x18)
return 1 ;
if (arg == 0x1e)
return 1 ;
if (arg == 0x1f)
return 1 ;
return 0 ;
}

void
Skip()
{
Word I = M[PC++] ;
Word A = FIELDA(I) ;
Word B = FIELDB(I) ;
PC += SkipArg(A) ;
PC += SkipArg(B) ;
}

#define DEBUGPRINTF(x)

void
execute()
{
Word I ;
Word T ;
Word B ;
Word * A ;
uint32_t a, b ;

I = M[PC] ;
PC ++ ;

if (OP(I) != 0)
A = DecodeDST((I>>4)&0x3f) ;
B = DecodeSRC((I>>10)&0x3f) ;

switch (OP(I)) {
case 0x0:
switch (((I)>>4)&0x3F) {
case 0x01:
/* JSR */
DEBUGPRINTF("… JSR") ;
/* Push the PC on the stack */
M[–SP] = PC ;
PC = B ;
break ;
default:
abort() ;
}
break ;
case 0x1:
/* SET */
DEBUGPRINTF("… SET\n") ;
*A = B ;
break ;
case 0x2:
/* ADD */
DEBUGPRINTF("… ADD\n") ;
a = *A ;
b = B ;
*A = (a + b) ;
O = (a + b) >> 16 ;
break ;
case 0x3:
/* SUB */
DEBUGPRINTF("… SUB\n") ;
a = *A ;
b = B ;
*A = (a – b) ;
O = (a – b) >> 16 ;
break ;
case 0x4:
/* MUL */
DEBUGPRINTF("… MUL\n") ;
a = *A ;
b = B ;
*A = (a * b) ;
O = ((a * b)>>16) ;
break ;
case 0x5:
/* DIV */
DEBUGPRINTF("… DIV\n") ;
a = *A ;
b = B ;
if (b == 0) {
*A = O = 0 ;
} else {
*A = a / b ;
O = ((a<<16)/b) ;
}
break ;
case 0x6:
/* MOD */
DEBUGPRINTF("… MOD\n") ;
a = *A ;
b = B ;
if (b == 0)
*A = 0 ;
else
*A = a % b ;
break ;
case 0x7:
/* SHL */
DEBUGPRINTF("… SHL\n") ;
a = *A ;
b = B ;
*A = a << b ;
O = (a << b) >> 16 ;
break ;
case 0x8:
/* SHR */
DEBUGPRINTF("… SHR\n") ;
a = *A ;
b = B ;
*A = a >> b ;
O = (a << 16) >> b ;
case 0x9:
/* AND */
DEBUGPRINTF("… AND\n") ;
*A &= B ;
break ;
case 0xa:
/* BOR */
DEBUGPRINTF("… BOR\n") ;
*A |= B ;
break ;
case 0xb:
/* XOR */
DEBUGPRINTF("… XOR\n") ;
*A ^= B ;
break ;
case 0xc:
/* IFE */
DEBUGPRINTF("… IFE\n") ;
if (*A == B) Skip() ;
break ;
case 0xd:
/* IFN */
DEBUGPRINTF("… IFN\n") ;
if (*A != B) Skip() ;
break ;
case 0xe:
/* IFG */
DEBUGPRINTF("… IFG\n") ;
if (*A > B) Skip() ;
break ;
case 0xf:
/* IFB */
DEBUGPRINTF("… IFB\n") ;
if ((*A & B) != 0) Skip() ;
break ;
}
DEBUGPRINTF("\n") ;
}

Word prog0[] = {
/* 0000 */ 0x7c01, 0x0030, 0x7de1, 0x1000, 0x0020, 0x7803, 0x1000, 0xc00d,
/* 0008 */ 0x7dc1, 0x001a, 0xa861, 0x7c01, 0x2000, 0x2161, 0x2000, 0x8463,
/* 0010 */ 0x806d, 0x7dc1, 0x000d, 0x9031, 0x7c10, 0x0018, 0x7dc1, 0x001a,
/* 0018 */ 0x9037, 0x61c1, 0x7dc1, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000,
} ;

void
dumpregs()
{
int i ;
printf("… PC=0x%04X SP=0x%04X ", PC, SP) ;
for (i=0; i<8; i++)
printf("%s=0x%04X ", Rn[i], R[i]) ;
printf("O=0x%04X\n", O) ;
}

main()
{
printf("… DCPU-16 simulator.\n") ;
printf("… version 1.0, written by Mark VandeWettering\n") ;
printf("… loading %d words of program …", sizeof(prog0)/sizeof(prog0[0])) ;

int i ;
for (i=0; i<sizeof(prog0)/sizeof(prog0[0]); i++) {
M[i] = prog0[i] ;
}
printf("done.\n\n") ;

for (i=0; i<20; i++) {
execute() ;
}
}
[/sourcecode]

My First True Boat Anchor: A Collins R-390A

April 5, 2012 | Amateur Radio | By: Mark VandeWettering

My boss is retiring, and as part of his downsizing made me an offer that I couldn’t refuse. I’m now the owner although have not yet taken delivery of) a vintage receiver: the Collins R-390A. Here’s a pic of it, in all it’s vintage glory:

Here’s the thing: I’m mostly completely out of my element with regards to these things. The only other piece of vintage tube gear I have is my trusty (not rusty) Drake 2B, and this thing appears to be in a completely different league. While searching around, I found this awesome resource manual, but I would feel better if I had a real genuine mentor to help me get this radio a) safe (some of the things in the manual scare me a teensy bit) and (b) operating well. Can anyone out there suggest any resources (either online or local to the Bay Area) for people who are crazy enough to try to fix/maintain/use this fine bit of vintage equipment?

Free to Play (F2P) games

April 5, 2012 | Amateur Radio | By: Mark VandeWettering

I follow @notch (author of the near legendary independent game Minecraft, where I have spent more than a few hours). I think Minecraft showed considerable creative thinking, and tapped into a need for a kind of gameplay that wasn’t well satisfied by other typical genre games. I’m following somewhat eagerly his postings about his new venture: an Elite-like hard science fiction game entitled 0x10c. It’s got a number of interesting ideas, not the least of which is a computational sub-component: players will interact with virtual computers that control their spacecraft and provides other mostly hinted at capabilities. Intriguing! I’m working on my own DCPU-16 implementation as we speak.

He recently tweeted a pointer to his unofficial FAQ, which gave some other hints to game play. It included this interesting statement:

No price decided yet. But there will certainly be a monthly fee for playing on the multiverse since even when you will not be connected trajectory and your ship’s computer will still be simulated.

Followed up by the statement (found first in this tweet), that F2P (free to play) was a scam.

I’m not a commercial game developer, but I kind of bristled at this. Don’t get me wrong, I understand why a player might say it’s a scam. Most F2P games make their money by selling in game items (for real cash) that provide a richer game experience. The players who play for free are really only playing a small fraction of the game. If one wants to unlock the full experience, one needs to shell out the coin. The trick of the game developer then becomes to provide the most manipulative incentives to try to get those dollars out of their marks players.

I can see why @notch might not like that. He does genuinely seem to want to create innovative game experiences.

But here’s the thing: pay to play is a bit different than traditional games. If I want to play chess, or checkers, I just get a chess set and play. Heck, I could even make a chess set if I wanted to. Unlike most other forms of entertainment we have, traditional games like chess, checkers, cards are games that you buy (or even make) and then enjoy without further financial concerns. One of the truly innovative features (but perhaps overlooked) of Minecraft was that it was more like those games: because @notch released the multiplayer game server software as well as the client, even casual gamers could pick up and enjoy minecraft. If one of your friends set up a server, you could all continue to play. Minecraft was a limitless horizon.

But it appears that 0x10c is going to be a different kind of game: a pay-to-play game. It does have one major advantage: you can’t simply buy your way to the end (although given the popularity of F2P, perhaps that is actually a disadvantage?) But it does mean that while you play, you are shelling out money. In that sense, it’s more like going out to the movies, or playing games at a casino. It may be cheap as casino games go, but I submit it fundamentally changes the nature of play. And, of course, the game only lasts as long as the casino remains open. If they decide in the future that running this particular kind of casino isn’t what they want to do, the game ends, and nobody gets to play any more.

Are (virtually all) F2P games scams? Absolutely. And I applaud @notch for refusing to crassly exploit gamers. But pay-to-play seems to also have some cynical downside as well. Given that a game like 0x10c will likely need centralized servers to provide multiplayer capability, perhaps it’s inevitable, but I wonder if other business models could be successful. I think @notch did well to innovate game play. Perhaps another innovator will create a different kind of business model for games.

A Tale of Two Gadgets: the TonidoPlug 2 and a Bus Pirate…

March 30, 2012 | Hardware, Microcontrollers, My Projects | By: Mark VandeWettering

A few days ago, I mentioned that one of my servers had died. I spent some time thinking about how I would replace it. I like having a 24/7 hooked up to the Internet to serve as a file drop and a place where I can use SSH to connect to other devices on my home network, but the machine need not be hugely fast, and it would probably be better if it were fairly low power. My previous server drew about 30 watts, and I suspected that I could get something more compact and lower power to replace it.

So, I ordered a TonidoPlug 2. It’s a cute little server based upon the Sheeva Plug computer concept, but includes space to insert a 2.5″ SATA laptop drive. It has all sorts of “personal cloud” applications running on it, which I had no interest in, but doing a bit more research, I found that I could install ArchLinux on the internal hard drive, and it would boot to that automatically. Cool, think I. I ordered mine off Amazon.

It arrived yesterday. I powered it up, verified that it worked in its default configuration, then proceeded to follow the directions on the ArchLinux ARM page. Upon reboot… not good. I ended up with a flashing red LED, and the network never comes back up. So, I pulled the internal drive, and it reboots back to its default configuration.

I then start tracking through various support and Wiki links. I find that some people have had difficulty booting from the internal drives, and the Tonido support guys have been very coy, claiming that “we don’t support that”. Frown. Not good.

But in doing this research, I found that it was possible to access the boot loader and serial console. On the bottom side of the tonido is a nice little rubber cover, concealing 4 pins. Most people seem to make a small adapter to use an FTDI-serial adapter cable with it (the six pin ones like you would use for the Arduino), but I had a Bus Pirate sitting around, and I thought that it might work. And… it did!

In case anyone else (or me in the future) wants to know how to do this:

  • The four pins are Vcc, Rx, Tx, and GND, starting from the power supply side and working toward the USB/Ethernet cable side.
  • I just hooked up MOSI to RX, MISO to TX, and GND to GND
  • To use the Bus Pirate with my Mac laptop, I like to use GNU screen. If you run “screen /dev/tty.usbserial-AH00MPIK 115200” (your tty device will likely be different), it makes a convenient terminal emulator. From there, you can access the Bus Pirate, configure it in UART mode with a baud rate of 115200 and sensible other defaults.
  • You can then use the Bus Pirate as a UART bridge by invoking the “(1)” macro. You’ll then essentially be talking directly to the Tonido via the BusPirate.
  • Using screen’s C-a H command, you can start a log file, which will record all the output from the serial port. Doing the command again will stop logging.

Hooking it up, I got lots of cool info from the Tonido:

         __  __                      _ _
        |  \/  | __ _ _ ____   _____| | |
        | |\/| |/ _` | '__\ \ / / _ \ | |
        | |  | | (_| | |   \ V /  __/ | |
        |_|  |_|\__,_|_|    \_/ \___|_|_|
 _   _     ____              _
| | | |   | __ )  ___   ___ | |_ 
| | | |___|  _ \ / _ \ / _ \| __| 
| |_| |___| |_) | (_) | (_) | |_ 
 \___/    |____/ \___/ \___/ \__| 
 ** MARVELL BOARD: DB-88F6282A-BP LE 

U-Boot 1.1.4 (Sep 13 2011 - 13:25:05) Marvell version: 3.4.27
USISH-SMB Ver: topkick1281p2-001-008-20110913-codelathe

U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006D0120

Soc: MV88F1155 Rev 1 (DDR2)
CPU running @ 800Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200Mhz 

DRAM unknown CAL  tRP = 8 tRAS = 20 tRCD=8
DRAM CS[0] base 0x00000000   size 512MB 
DRAM Total size 512MB  16bit width
Addresses 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done
NAND:512 MB
Flash:  0 kB

CPU : Marvell Feroceon (Rev 1)

Streaming disabled 
Write allocate disabled


USB 0: host mode
PEX 0: interface detected no Link.
Net:   egiga0 [PRIME]
Hit any key to stop autoboot:  0 
(Re)start USB...
USB:   scanning bus for devices... 1 USB Device(s) found
Waiting for storage device(s) to settle before scanning...
0 Storage Device(s) found
** Bad partition 1 **
## Booting image at 00800000 ...
Bad Magic Number
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done

Reset IDE: 
Marvell Serial ATA Adapter
Integrated Sata device found
[0 0 0]: Enable DMA mode (5)
  Device 0 @ 0 0:
Model: TOSHIBA MK6465GSX                        Firm: GJ003M   Ser#:            50OAC319T
            Type: Hard Disk
            Supports 48-bit addressing
            Capacity: 610480.3 MB = 596.1 GB (1250263728 x 512)


** Unable to read "/boot/uImage" from ide 0:1 **
## Booting image at 00800000 ...
Bad Magic Number
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done

NAND read: device 0 offset 0x200000, size 0x600000

6291456 bytes read: OK

## Booting image at 01200000 ...
   Image Name:   Linux-2.6.31.8-topkick1281p2-001
   Created:      2011-11-10   3:58:11 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3121408 Bytes =  3 MB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
OK

Starting kernel ...

Uncompressing Linux................................................................................................................................................................................................... done, booting the kernel.
Linux version 2.6.31.8-topkick1281p2-001-004-20101214 (andrew@localhost.localdomain) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #2 Thu Nov 10 11:58:07 CST 2011
CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977
CPU: VIVT data cache, VIVT instruction cache
Machine: Feroceon-KW
Using UBoot passing parameters structure
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyS0,115200;version=topkick1281p2-001-006-20101103 mtdparts=nand_mtd:0x180000@0(u-boot),0x20000@0x180000(u-boot-env),0x600000@0x200000(uImage),0x1f800000@0x800000(rootfs) ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs rootdelay=10
PID hash table entries: 2048 (order: 11, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 512MB = 512MB total
Memory: 513280KB available (5612K code, 319K data, 148K init, 0K highmem)
NR_IRQS:128
Console: colour dummy device 80x30
Calibrating delay loop... 794.62 BogoMIPS (lpj=3973120)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
xor: measuring software checksum speed
   arm4regs  :   723.200 MB/sec
   8regs     :   433.600 MB/sec
   32regs    :   600.800 MB/sec
xor: using function: arm4regs (723.200 MB/sec)
NET: Registered protocol family 16
Feroceon L2: Enabling L2
Feroceon L2: Cache support initialised.

CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 512MB 
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
PEX0_MEM ....base e8000000, size 128MB 
PEX0_IO ....base f2000000, size   1MB 
INTER_REGS ....base f1000000, size   1MB 
NFLASH_CS ....base fa000000, size   2MB 
SPI_CS ....base f4000000, size  16MB 
BOOT_ROM_CS ....no such
DEV_BOOTCS ....no such
CRYPT_ENG ....base f0000000, size   2MB 

  Marvell Development Board (LSP Version KW_LSP_5.0.3)-- DB-88F6282A-BP  Soc: MV88F1155 Rev 1 LE

 Detected Tclk 200000000 and SysClk 400000000 
MV Buttons Device Load
Marvell USB EHCI Host controller #0: df837740
PEX0 interface detected no Link.
PCI: bus0: Fast back to back transfers enabled
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
raid6: int32x1     72 MB/s
raid6: int32x2    101 MB/s
raid6: int32x4     88 MB/s
raid6: int32x8     80 MB/s
raid6: using algorithm int32x2 (101 MB/s)
cfg80211: Calling CRDA to update world regulatory domain
NET: Registered protocol family 2
IP route cache hash table entries: 16384 (order: 4, 65536 bytes)
TCP established hash table entries: 65536 (order: 7, 524288 bytes)
TCP bind hash table entries: 65536 (order: 6, 262144 bytes)
TCP: Hash tables configured (established 65536 bind 65536)
TCP reno registered
NET: Registered protocol family 1
rtc mv_rtc: rtc core: registered kw-rtc as rtc0
RTC registered
cpufreq: Init kirkwood cpufreq driver
XOR registered 4 channels
XOR 2nd invalidate WA enabled
mvCesaInit: sessions=640, queue=64, pSram=f0000000
Warning: TS unit is powered off.
MV Buttons Driver Load
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
SGI XFS with security attributes, large block/inode numbers, no debug enabled
msgmni has been set to 1002
alg: No test for cipher_null (cipher_null-generic)
alg: No test for ecb(cipher_null) (ecb-cipher_null)
alg: No test for digest_null (digest_null-generic)
alg: No test for compress_null (compress_null-generic)
alg: No test for stdrng (krng)
alg: No test for hmac(digest_null) (hmac(digest_null-generic))
async_tx: api initialized (sync-only)
io scheduler noop registered
io scheduler anticipatory registered (default)
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 33) is a 16550A
console [ttyS0] enabled
Integrated Sata device found
IRQ 21/mvSata: IRQF_DISABLED is not guaranteed on shared IRQs
scsi0 : Marvell SCSI to SATA adapter
scsi1 : Marvell SCSI to SATA adapter
scsi 0:0:0:0: Direct-Access     TOSHIBA  MK6465GSX        GJ00 PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] Sector size 0 reported, assuming 512.
sd 0:0:0:0: [sda] 1250263728 512-byte logical blocks: (640 GB/596 GiB)
sd 0:0:0:0: [sda] 0-byte physical blocks
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: Attached scsi generic sg0 type 0
Loading Marvell Ethernet Driver:
  o Cached descriptors in DRAM
  o DRAM SW cache-coherency
  o 2 Giga ports supported
  o Multi RX Queue support - 4 RX queues
  o Multi TX Queue support - 2 TX Queues
  o TCP segmentation offload (TSO) supported
  o Large Receive offload (LRO) supported
  o Receive checksum offload supported
  o Transmit checksum offload supported
  o Network Fast Processing (Routing) supported - (Disabled)
  o Network Fast Processing (NAT) supported
  o Driver ERROR statistics enabled
  o Driver INFO statistics enabled
  o Proc tool API enabled
  o SKB Reuse supported - (Disabled)
  o SKB Recycle supported - (Disabled)
  o Gateway support enabled
     o Using Marvell Header Mode
     o L2 IGMP support
  o Rx descripors: q0=128 q1=128 q2=128 q3=128
  o Tx descripors: q0=532 q1=532
  o Loading network interface(s):
    o  register under mv88fx_eth platform
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA
sd 0:0:0:0: [sda] Sector size 0 reported, assuming 512.
    o eth0, ifindex = 2, GbE port = 0

Warning: Giga 1 is Powered Off

Warning: Giga 1 is Powered Off

mvFpRuleDb (df280000): 16384 entries, 65536 bytes
Intel(R) PRO/1000 Network Driver - version 7.3.21-k3-NAPI
Copyright (c) 1999-2006 Intel Corporation.
e1000e: Intel(R) PRO/1000 Network Driver - 1.0.2-k2
e1000e: Copyright (c) 1999-2008 Intel Corporation.
e100: Intel(R) PRO/100 Network Driver, 3.5.24-k2-NAPI
e100: Copyright(c) 1999-2006 Intel Corporation
 sda:
PPP generic driver version 2.4.2
PPP Deflate Compression module registered
PPP BSD Compression module registered
PPP MPPE Compression module registered
NET: Registered protocol family 24
PPPoL2TP kernel driver, V1.0
Using Hamming 1-bit ECC for NAND device
NAND device: Manufacturer ID: 0xad, Chip ID: 0xdc (Hynix NAND 512MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 1064 at 0x000008500000
Bad eraseblock 1065 at 0x000008520000
Bad eraseblock 1884 at 0x00000eb80000
Bad eraseblock 1885 at 0x00000eba0000
Bad eraseblock 2038 at 0x00000fec0000
Bad eraseblock 2039 at 0x00000fee0000
Bad eraseblock 2580 at 0x000014280000
Bad eraseblock 2581 at 0x0000142a0000
Bad eraseblock 2606 at 0x0000145c0000
Bad eraseblock 2844 at 0x000016380000
Bad eraseblock 3269 at 0x0000198a0000
Bad eraseblock 3547 at 0x00001bb60000
4 cmdlinepart partitions found on MTD device nand_mtd
Using command line partition definition
Creating 4 MTD partitions on "nand_mtd":
0x000000000000-0x000000180000 : "u-boot"
 sda1
sd 0:0:0:0: [sda] Sector size 0 reported, assuming 512.
0x000000180000-0x0000001a0000 : "u-boot-env"
sd 0:0:0:0: [sda] Attached SCSI disk
0x000000200000-0x000000800000 : "uImage"
0x000000800000-0x000020000000 : "rootfs"
UBI: attaching mtd3 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: attached mtd3 to ubi0
UBI: MTD device name:            "rootfs"
UBI: MTD device size:            504 MiB
UBI: number of good PEBs:        4020
UBI: number of bad PEBs:         12
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             75
UBI: total number of reserved PEBs: 3945
UBI: number of PEBs reserved for bad PEB handling: 40
UBI: max/mean erase counter: 3/1
UBI: image sequence number: 0
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci_marvell ehci_marvell.70059: Marvell Orion EHCI
ehci_marvell ehci_marvell.70059: new USB bus registered, assigned bus number 1
UBI: background thread "ubi_bgt0d" started, PID 480
ehci_marvell ehci_marvell.70059: irq 19, io base 0xf1050100
ehci_marvell ehci_marvell.70059: USB 2.0 started, EHCI 1.00
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
uhci_hcd: USB Universal Host Controller Interface driver
usbcore: registered new interface driver usblp
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver ums-datafab
usbcore: registered new interface driver ums-freecom
usbcore: registered new interface driver ums-jumpshot
usbcore: registered new interface driver ums-sddr09
usbcore: registered new interface driver ums-sddr55
usbcore: registered new interface driver ums-usbat
pwrctl: dev_t_NO. = 0xdd00000, major = 221
pwrctl: request the irq power off registered. 
mice: PS/2 mouse device common for all mice
i2c /dev entries driver
Linux telephony interface: v1.00
md: linear personality registered for level -1
md: raid0 personality registered for level 0
md: raid1 personality registered for level 1
md: raid6 personality registered for level 6
md: raid5 personality registered for level 5
md: raid4 personality registered for level 4
device-mapper: ioctl: 4.15.0-ioctl (2009-04-01) initialised: dm-devel@redhat.com
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
mmc0: mvsdio driver initialized, lacking card detect (fall back to polling)
Advanced Linux Sound Architecture Driver Version 1.0.20.
No device for DAI CS42L51
ALSA device list:
  No soundcards found.
nf_conntrack version 0.5.0 (8192 buckets, 32768 max)
mvFpNatDb (df360000): 16384 entries, 65536 bytes
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
NFP (fdb) init 256 entries, 1024 bytes
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
rtc mv_rtc: setting system clock to 2012-03-31 01:20:22 UTC (1333156822)
Waiting 10sec before mounting root device...
mmc0: new high speed SDIO card at address 0001
md: Waiting for all devices to be available before autodetect
md: If you don't use raid, use raid=noautodetect
md: Autodetecting RAID arrays.
md: Scanned 0 and added 0 devices.
md: autorun ...
md: ... autorun DONE.
UBIFS: mounted UBI device 0, volume 0, name "rootfs"
UBIFS: file system size:   501387264 bytes (489636 KiB, 478 MiB, 3886 LEBs)
UBIFS: journal size:       25159680 bytes (24570 KiB, 23 MiB, 195 LEBs)
UBIFS: media format:       w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root:  4952683 bytes (4836 KiB)
VFS: Mounted root (ubifs filesystem) on device 0:11.
Freeing init memory: 148K
Using makefile-style concurrent boot in runlevel S.
Starting the hotplug events dispatcher: udevd.
Synthesizing the initial hotplug events...done.
Waiting for /dev to be fully populated...done.
Setting parameters of disc: (none).
Activating swap...done.
Starting early crypto disks...done.
Starting remaining crypto disks...done.
Loading kernel modules...done.
Cleaning up ifupdown....
Setting up networking....
Activating lvm and md swap...done.
Checking file systems...fsck from util-linux-ng 2.17.2
done.
Mounting local filesystems...done.
Activating swapfile swap...done.
Cleaning up temporary files....
Setting kernel variables ...done.
Configuring network interfaces...Internet Systems Consortium DHCP Client 4.1.1-P1
Copyright 2004-2010 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

eth0: started
Listening on LPF/eth0/40:2c:f4:bc:8b:c9
Sending on   LPF/eth0/40:2c:f4:bc:8b:c9
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 13
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 10
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 14
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
No DHCPOFFERS received.
No working leases in persistent database - sleeping.
done.
Cleaning up temporary files....
fuse init (API version 7.12)
Using makefile-style concurrent boot in runlevel 2.
Network Interface Plugging Daemon...start eth0...done.
Starting enhanced syslogd: rsyslogd.
Starting Samba daemons: nmbd smbdStarting periodic command scheduler: cron.
.
Starting system message bus: dbus.
Starting OpenBSD Secure Shell server: sshd.
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended

Debian GNU/Linux 6.0 TonidoPlug2 ttyS0

TonidoPlug2 login: --2012-03-30 18:21:50--  http://patch.codelathe.com/firmware/tonidoplug2/updates.list
Resolving patch.codelathe.com... failed: Name or service not known.
wget: unable to resolve host address “patch.codelathe.com”

Debian GNU/Linux 6.0 TonidoPlug2 ttyS0

TonidoPlug2 login: root
Password: 
Last login: Fri Mar 30 18:16:16 PDT 2012 on ttyS0
Linux TonidoPlug2 2.6.31.8-topkick1281p2-001-004-20101214 #2 Thu Nov 10 11:58:07 CST 2011 armv5tel

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@TonidoPlug2:~# 

I suspect I’ll be able to debug it a lot better tomorrow.