Why Command And Vector Processors Rock September 7th, 2017
I had a Commodore Amiga as a kid. I'm told they were never especially popular in America, but in Europe they were everywhere. Well, sucks to be them I guess.
The Amiga was and still is, for its time, the best home computer ever made. It had a clean, powerful CPU architecture. It had an operating system that blended the best parts of CP/M and Unix with none of the unfriendly parts. It had 4-channel digital stereo sound playback in an era when a typical PC had a sound system that was either 0 or 1. It had proper multitasking, which took another ten years to finally arrive on Windows. It was also a completely open platform, unlike todays mobile, console, and store ecosystems.
But most importantly, it had Agnus.
Angus is the name for the main chip inside the Amiga. Its primary role is for graphics, but not as you'd think. The Amiga was unusual compared to most other home computers of the time. A typical early 80s computer has a CPU (usually Z80, 6502, or later the 68000). It would also have a video chip, which would read from the framebuffer RAM and either output pixels directly, or look up the bytes in a tilemap and output that instead. And that was generally as far as it went.
The Amiga, however, wasn't satisified with that. It had a CPU, sure. And it had a video chip ("Denise"), which read in bytes and spat out a video signal. But it didn't stop there. It had a custom-designed ASIC for each part of the machine. The entire hardware was built around these "custom chips" and the means to let them communicate.
Agnus is a kind of "ringmaster" chip. Its main component is the DMA controller (Direct Memory Access). This lets bytes be read from main memory and sent around to the various custom chips as needed. You can think of it as an asynchronous memcpy -- you give it an address and it'll either read or write bytes one at a time to/from the appropriate chip. It supported 25 different DMA channels at once for all the different parts of the machine that needed RAM access.
So what would you want to do with all this DMA? Let's look at one of the biggest examples -- the blitter.
The blitter was another part of the Agnus chip. It's operation was very simple. You'd give it three source pointers, one destination pointer, and a function ID. It would then read individual bits from memory (processing them 16 at a time), perform an arbitrary bitwise operation on them, and store the result out. You can think of it as a general-purpose bitwise arithmetic chip.
Given three bits (let's call them A,B, and C), there's exactly 8 different combinations that can result from these. So in order to specify your arithmetic function, you just need a lookup table of 8 result bits. This handily fits into a single byte.
Having this kind of bitwise arithmetic was important because, like many machines of the time, the Amiga used bitplanes as a format to store its graphics in.
Let's say you're using 32-color paletted mode. That's 5 bits per pixel you need to store. How do you store that? Well, you could use a byte per pixel, use 5 of the 8 bytes to store your data and leave the other 3 empty. But that's a hell of a waste. Instead, you store it as 5 individual bitplanes, each plane using one bit per pixel. (i.e. each byte contains one bit from eight different pixels)
Now let's apply our blitter to this. Imagine we want to draw a sprite on-screen. We've got it stored as 5 individual bitplanes, plus a sixth 'mask' bitplane to store the transparency. To get the blitter to draw this for us, we set up our three inputs:
A - The position on the framebuffer we want it at B - Our sprite source data (1st bitplane) C - Our sprite transparency mask
We'll need to repeat the whole thing a total of 5 times, one for each sprite bitplane, but that's fine (it's real quick!). The final piece of the puzzle is how we specify how to mix these three inputs. We can build a Boolean truth table to handle it.
Our goal is to use the transparency bit (C) to select EITHER (A) the background data (if C=0), or (B) the sprite data (if C=1). i.e.
D = C ? B : A. To figure out our function ID, we just list out all eight cases:
A B C D (output) 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1
If we concatenate all the bits of D together, we get the value 0xD8. This is called a minterm, and it represents our bitwise operation in its entirety.
This "minterm" idea is a pretty powerful one. You can combine elements together to get any bitwise function you like. Want to XOR images? Sure. Want to just clear memory? That works too, just set the ID to 0x00 and ignore all the inputs. You'll still occasionally see systems that use this. Windows, for example, still uses it for its BitBlt function, although you'd never know that from reading the BitBlt documentation.
To actually program the blitter to do this, we simply write the three source address into three of its registers, write the function ID to another register, and then signal it to start. It'll run in the background while our CPU gets on with other things, and we can either check a flag to see if its finished, or get it to wake the CPU with an interrupt.
So far we've seen how Agnus contains the blitter functionality, and the DMA controller. But there's one more little secret hidden inside this chip, and that's the co-processor (aka "COPR", or simply "copper" to its friends).
The copper was a completely independent CPU that ran in parallel with the main one. It wasn't a Turing-complete, general-purpose CPU like the 68000. It only had three instructions. It didn't have its own memory or registers, but instead shared main memory (like everything else on the Amiga), and it could directly access many of the registers inside the custom chips.
The copper read its instructions via DMA. This meant you allocated some memory and filled in a program, called a "copper list", by writing 16-bit instructions into it. You then pointed the DMA at that address and started the program. The DMA would fetch each instruction and feed them into the copper.
So what could you do with a CPU that only has three instructions? Let's see what the instructions were:
MOVE reg, value WAIT X, Y SKIP X, Y
That's a pretty simple machine. We can load a value into a register, wait for the raster beam to hit a specific X/Y position, or skip the next instruction if the raster beam is past a specific X/Y position. Doesn't sound like much at first. If I wanted to write registers I could just do it on the main CPU, right? Why would I want to wait to write registers at a specific time? But there's some surprising effects you can get out of this simple mechanism.
What the copper let you do is to apply different properties to different parts of the screen. You can change the address of the framebuffer on a line-by-line basis, for example, to create parallax scrolling in Shadow Of The Beast (above).
Or you can change the address of the framebuffer at the halfway point on each line, to create a 2-player scrolling split-screen, like in Lemmings: (no other port of Lemmings could do this!)
Or you could wait till a certain line and change both the color palette AND the frambuffer address, to create a wobbly water effect, like in Ugh:
And this wasn't just a trick for games, even the operating system made use of this. If they chose to, the Amiga allowed programs to have their own private screen with a different resolution. Windows suffered for years with this problem -- ever switch back from a DirectX program and see all your icons have moved around on the desktop? Not in Amiga-land. Here, two different programs on different screens can co-exist just by dragging the menu bar down:
These aren't just different windows you're seeing here. These are different screens, each running at a different resolution! The lower screen is 640x256 at 4 colors and the upper screen is 320x256 at 32 colors. Try that on a PC.
All these effects, and more, are achieved via the simple ability to change settings when you want to, rather than having them fixed at the start of the frame. It didn't require more power to be added to the system, just the flexibility to use the existing system in unusual ways.
If you want to see more creative uses like this, try the excellent codetapper.com which takes apart many Amiga games to see how they do things.
Hardware as a tool
The reason I'm writing all this isn't just to show off how cool the Amiga was. I want to show how its design principles allow new avenues to be opened up.
The Amiga hardware never said "this tool is for this purpose". It gave you a toolbox but let you decide what these things were to be used for. And it allowed each tool to interoperate with the others using common registers and common data formats.
I've presented the blitter here as a thing for processing graphics bitplanes, but it was really just a vector coprocessor for operating on boolean/bitwise data. It could be used for other tasks, and it was. The Amiga's floppy disks were formatted using MFM encoding, which is a kind of edge-based binary encoding. To decode it, you had to process the bit array from disk and look for 0-1 transitions. The blitter provides an ideal tool for doing this with, and the OS made use of it for exactly that. The same kind of tasks we might use a compute kernel for today, perhaps.
The copper, while seeming to be a very simple processor, effectively acted as an amplifier for the power contained within the other chips. It could be viewed perhaps as a metaprocessor -- not doing the work itself but controlling the work of others.
This combination of a vector processor and a control chip is a powerful one. It's so powerful in fact, that the machine you're reading this on now has the same architecture. A modern GPU consists of three parts:
Part a) is a thing that can draw triangles. There's usually special-purpose hardware for doing this. There was a time a few years ago when this was what we thought of as the GPU, but we're seeing less and less of that every year. Games now are doing voxel ray-tracing, and people are using GPUs for lots of things other than just rendering.
Part b) is the vector processor, a unit that reads data and runs functions using it. Ours are much more powerful than the old blitter though. We can do full floating-point operations on ours, not just bitwise ops. But it's a more advanced version of the same principle -- a program that operates on many values at once rather than just one.
Part c) is the command processor. A modern GPU has a chip that reads instructions from the host CPU, decodes the various draw calls, state changes, etc, and then issues work to the vector processor (for compute kernels). Or, when using rendering APIs, it sends work to the triangle drawer which in turn sends work to the vector processor (either to shade vertices or pixels).
Right now we're a little stuck, however. A modern GPU lets you use its triangle drawer (via OpenGL perhaps), and it lets you use its vector processor (via CUDA perhaps). But the one thing it does not do, on almost any platform (even most consoles), is to let you use the command processor. About the only one I've ever seen that did give you that kind of access was the PlayStation 2, something I'll no doubt write about in a future article.
You see, the Amiga documented its command processor. The designers wanted you to write programs that ran on it. They wanted you to use it for doing all sorts of clever things. They recognized that the power to operate the underlying horsepower directly was something that could amplify the capabilities of a system way past the limits of its original design.
But on Direct3D, or OpenGL, all you can do is call DrawIndexedPrimitive etc. and let it do things on your behalf. You can't build your own copper lists like you used to on the Amiga. Some APIs let you make a command buffer, but they're usually just recording API calls into it. You can't program it with your own logic, or your own algorithms. The 3D driver has the power to do this, but you don't.
The Amiga was a good machine not because of what it was designed to do but because the designers intentionally gave you the flexibility to do things they'd never designed it to do.
The old COPR chip only had three instructions and couldn't do much by itself, but you could use it to make the rest of the system sing. I'm sure the command processors in modern desktops have a much more advanced processor -- I'd love to see what we could do with them given the chance.
The Danger Of Opinions September 3rd, 2017
Warning: this post may contain opinions. If you are allergic to opinions, please try the associated reddit thread instead where you will be safe from them.
For years, MIT taught their SICP course using Scheme. And you know the weird thing about that? No computers involved at all. It was all just done on a whiteboard, using symbols and parenthesis. No registers, no instructions, no memory. It showed you what computing really was -- an abstract concept that isn't tied to any implementation. The idea that computing doesn't actually require a computer is somewhat alien to many native C++ programmers.
Then you've also got the engineering crowd. People like me whose first exposure to computers was that 8-bit home computer your Dad bought home one day in the 80s. I didn't grow up in a world of evaluation, expressions, and functions. The computer I had knew only about bytes, and how to move them about in memory. It was always about how things get done. What use were abstract concepts in a world where you needed to do specific things in order to see the results?
These two groups often fall under the banners of "static" and "dynamic" typing, and it's perhaps no coincidence. Static typing tries to tell the computer exactly what needs to be done, at the expense of moving the program further away from the abstract description. Dynamic typing expects the computer to figure things out, so that the human can just write things in a nice clean manner.
Which leads on to the ultimate question of programming: Should programs be written for the benefit of humans or for computers? Exactly whom are we trying to make it easier for?
It's a simple point but you see the repercussions of this appearing everywhere, hundreds of little design decisions that push programming further into two camps. UNIX, for example, demands a case-sensitive file system, on the grounds that the file system can be done more efficiently if its only concerned with matching bytestrings. Windows says that being able to create two files with the same name but different cases isn't useful to humans, and is only confusing. Why should humans have to keep track of where the capitals were placed, and why should auto-complete suddenly stop working because I forgot to hold SHIFT?
So which is right? Which is better? Should computers adapt to us or should we adapt to computers?
There's a book I love by Robert M. Pirsig called "Zen and the Art of Motorcycle Maintenance", which contains over 500 pages of pseudo-philosophical bullshit (oh who am I kidding, I still love it) centered around the idea of "quality". It's got this lovely disclaimer at the front where the author notes that the book doesn't really have anything to do with Zen Buddhism, and "it's not very factual on motorcycles either."
The central pillar of the book is what he calls the "classical" vs. "romantic" ideals. The classical, he says, is concerned with what something is and how it works. The classical viewpoint wants to know how their motorcycle works, how to recognize where that weird knocking noise is coming from, and wants to tune their engine to keep it running well.
The romantic viewpoint is instead concerned with how we see something. It's not important how something works, but how we see and use it. The romantic person wants to use their motorcycle to drive along beautiful mountain roads, and use it to get to far-away places.
The classical person sees a rainbow and wonders how it formed, and how the rain might reflect the sun like that. The romantic person sees a rainbow and wants to show others, and paint a picture of it.
This two-sided philosophy is found throughout the whole of human life, and especially in computers. One of the things I love about computer programming is that it's one of those areas where we actually get to use both at the same time, even within the same program. It's what makes a game developer want to be an artist or a programmer. And yet the game needs both to work.
So which is better? Well unsurprisingly, neither. You need both viewpoints, sometimes at the same time. And that's the weird part. How can two opposing ideas both be correct?
But they can.
I remember once talking to an artist friend of mine. We were talking about computer animation, and the subject of IK (inverse kinematics) came up. What puzzled me is that he wasn't a big fan of it. Now to me as a programmer, it seemed an obvious choice. Of course IK is a better way to do things. You just tell the arm or leg or whatever where you want it to go, and it automatically moves the elbows and knees and such for you. So surely that's less work, and therefore better?
But he explained things to me. You remember when as a kid, you drew stick men? Well in my mind that's how the human skeleton looked. But he explained about "clavicles", something I barely even knew existed but in fact drive the whole upper armature. And he explained how the best algorithm in the world isn't going to give you the results you want if there's more than one solution available. What had seemed a simple "pointing a finger" problem was unfolding into a world where you had to try and teach the computer how to be an artist. It slowly dawned on me that I didn't have the full experience of the problems he was describing, and couldn't make a case to argue back with.
It's weird when you suddenly realize that there's a separate world out there that you're not an expert in. It certainly changed my outlook on things. I think there's a lot of programmers who still haven't had that moment, and still live in a world where they believe they know everything.
Did that make me wrong about IK? Well, no. It's still useful. Did that make him right? Maybe, maybe not. But what it shows is that you can't have a discussion one way or the other unless you actually know a little about the other viewpoint.
Issues aren't black and white. And sometimes you can have two opposing viewpoints that are both valid. Programmers hate this. It's very un-pythonic.
Did you ever have an experience where someone you'd greatly respected suddenly said something you strongly disagreed with? Does that invalidate all the things they said that you did like? Do you stop talking to your best friend because you found out he voted Republican?
Complex issues can't just be simplified down into tribal arguments of us-vs-them, or solved by just shouting at the other person until they go away. We need to get over this cultural idea we have where anyone who disagrees with us is literally Hitler. It's OK to disagree with someone. And just because we disagree with someone doesn't make them wrong. It's possible for two people to disagree and yet they both still are correct. It's so common, especially in the media, for someone who changes their mind later on to be labeled a hypocrite. "But last year," they cry, "you said this thing. Now you're saying the other!". Yet the ability to change our mind is the most important thing we have. An opinion that is rock-solidly fixed in place is just tribal politics. Opinions should be swayable via convincing arguments.
On the one hand it's easy to look at things like the direction the C++ committee is taking and laugh; C++ has become an insane language that no one person has a hope of understanding. But they definitely seem to be heading towards a destination, perhaps if only by accident. What are they actually trying to achieve? A language where you can do anything, but only at compile time? Perhaps Python is a cleaner approach, by pushing all problems to runtime, but even they're now starting to realize that maybe type annotations are a useful feature.
But we need both. The idea of the "one true" anything is bullshit. There will always be different sides, with different ideals. And that's fine. We need that. But what we don't need is us-vs-them. People need more exposure to different ideas. Programmers need to try out different languages. Webdevs could learn a hell of a lot from trying to write a Z80 program. And a lot of GPU shader guys could learn a thing or two from watching how Bob Ross can manage to paint a tree without knowing how sub-surface scattering works. Because let me tell you, however you've been doing things so far, there's a whole different approach that other people have been successfully using that you have no idea about.
I dunno where I'm going with all this. I just figured I'd write some of these rambling thoughts down, although putting your thoughts into words can get you fired these days. Probably best just to stay absolutely quiet and avoid doing anything that may or may not cause two opinions to form. We do have to be careful, you know. Sometimes we can create a difference of opinion so vast that the universe has no option but to bifurcate in order to accept both.
The Nor'easter Rises June 2nd, 2017
A southerly wind rolled in, ten miles from head to tail. It skipped across the heather and cotton-grass high upon the moorland. Then twisting, downwards toward the valley and through the tall pines, shaking pine needles to the forest floor as it went.
Driven forth with a burning hunger, it pushed on towards the lights of the town. Gathering strength with each dive and swoop, the wind danced across the thatch rooftops, circling eastwards towards the coast. As it ran along the roof of the assembly rooms, the rusty weathervane creaked and slowly spun around to a new heading.
The wind crossed the eastern farms until it met the old windmill on the hilltop, causing the ancient wooden blades to groan as they began to turn. The scent of prey carried up from the farmlands, and the wind circled one more for the kill.
It's been hard since ol' Fessler died. I reckon he knew more about tar than any man alive. He said he'd teach me it all, in time. I think he'd always hoped his son would take over from him, but they fell out and he moved west. I think he became a stage player or such.
So Fessler took me on as a prentice in his stead. He used to teach me all sorts; not just building the kilns, that was easy enough, but the caulking, woodcarving, even metalworking from time to time. I guess you could say I'm a jack of all trades 'round these parts.
It was never easy for him, what with his leg. He'd taken a good hit during the Great Storm of '63, and he'd always found it hard getting around since then. He used to say he could feel his bones creaking each time the Nor'easter blew through, like it was letting him know who's boss.
I spent my whole first summer rebuilding the tar kilns up on the eastern hilltops, just me and Fessler. There's a whole bunch of ways to make a good kiln, but we used to dig them into the hillside itself and build a simple frame around it. The heat from the fire would draw the resin out of the wood and we'd drip it down into a barrel underneath. There's more to making tar than folks think. It's not just burning wood. In fact, if you let it burn you'll mess up the whole thing and get nothing out. Did that a couple of times back in those first weeks. You need to keep a good layer of peat on top to keep the air out.
It took a long time for me to get comfortable with being exposed up there on those hills. Most folks don't go up there; they say because of the smell from the burning tar, and I'll give 'em that I suppose, although I grew to like the aroma myself. You can catch a hint of it from miles away sometimes when the breeze carries it. I reckon they're just scared of being away from the town though. Up there, there's nothing much to protect you when the wind whips through. I asked Fessler once, what he'd do if the windchimes rang while he was up there--he just laughed and said he'd let the wind take him.
Still, I learned a lot about tar from him. You got your birch tar, you got your peat tar, even coal tar. I heard up in the North Wilds it comes right up out of the ground, though I ain't never seen anything like that myself. Here on the east coast though, we got pines, and lots of 'em.
You can do a lot with pine tar. It ain't as hot as you'd think, you can work it at room temperature. You can use it as a glue, or for weatherproofing. You can spread it all over cloth and get a good oilskin out of it, and you'd be thankful for that when it starts raining a pissbucket down in the spring. You can even seal a boat hull with it, though I ain't stupid enough to mess with boating. I heard too many tales.
Mostly though, I make it for sealant.
That's what I was doing, that first evening in the fall when the wind changed. I was warming up a pot on the stove so I could go fix the Bridgers' window while there was still a sliver of day remaining. You gotta heat it a little to apply it right. I was just about to mix in some linseed oil to help it soak when the shop door swung open. Sampson came dashing in, all out of breath.
"Wind's coming!" he shouted. "Glanville's gonna set up in the stable!"
I nodded. There wasn't much time. The workshop wasn't weatherproof; it couldn't be really, what with needing the furnaces open for air. Normally I'd have preferred to be down by the river, where the valley keeps the wind off. You can hold up pretty good down there with only minimal sealant around the window frames. And Jethro Wilkins would probably be there too so we'd get to have a right laugh while we waited. But it was too far and there wouldn't be much time. The stable would have to do, and my tar would have to wait.
I moved the pot off the heat--last thing I need would be my workshop to burn down too--and grabbed my emergency bag from by the door. I could already feel the breeze picking up as I stepped out into the square. It was here. I could see Sampson running down the street knocking on as many doors as he could. I hoped he'd get everyone safe before the wind came.
I reached the stable to see Mayor Glanville pulling people inside. "Come on!" he yelled. "Get in!"
The bell on the assembly hall was ringing by now. We shuffled into the safety of the stable. There must have been at least ten of us crammed in there, though the horses didn't seem to mind. It was just an old wooden framed building but the sealant was all new. I knew because I'd done it myself that summer. People around these parts appreciate the value of quality sealant. With enough pine tar around the gaps you could keep any wind out, even the Nor'easter.
Sampson was last in, along with the Bridger family. I watched as Glanville pulled down the heavy wooden bar to lock the door.
We sat in silence for what seemed like a year. Nobody wanted to say anything. You could hear the wind outside, growing louder with every minute. I wiped the tar from my hands onto my apron. Finally Weaver spoke up.
"What the hell's it doing here this early? It's not even harvest yet."
"It's come early before," said John Bridger. "When my Tim was a kid it woke in November once."
"Bah, November!" shouted Weaver. "It's September! The Nor'easter's never come in September before."
"Maybe it's not the Nor'easter?" I ventured. "Maybe it's a different wind?"
"Like hell it is!" shouted Marson. "The Nor'easter's the only wind in these parts, everyone knows that!"
"I'm just sayin'..."
"Well if your gonna say somethin' then say somethin' that makes sense! Ain't no point telling stories and getting folks all worried."
We sat as the gale outside roared. There was nothing we could do now, it might take till light for the storm to pass. John Bridger paced the room, pausing to studying the brick fireplace set into the far wall.
"Couldn't we at least get a fire started?" asked John Bridger. "It's as cold as a winters' day in here."
"Use the brain your mother gave you, John," muttered Marson. "You'd just open up that chimney damper wouldn't you, and let the wind whistle right down the flue and get in here."
John sat back down dejectedly, but we all knew Marson was right. Even a modest air gap could be a danger; an open hatch was like an invitation.
"What if it is a different wind?" asked John Bridger. "I mean it came up real quick... What if it's stronger than the Nor'easter?"
"What are you sayin'?" asked Weaver?
"Nothing." He paused. "Well yeah, OK, I'll say it. What if it is stronger? What if it gets in?"
"It won't get in," I said.
"But what if it does? I mean it's only a wooden frame sealed with tar, it could crack it open somewhere and..."
"And this is new weatherproofing here, it's not been tested and what with Fessler gone it--"
"Now there ain't nothing wrong with my sealant John Bridger," I said, pointing my finger at him. "I make quality sealant, as good as you'll find in--"
Glanville stood up and motioned to everyone. "Now let's everyone just calm down a little." He stepped between me and John and adjusted his waistcoat. "No-one's questioning your caulking Cal."
Seemed to me like they were. But I let it go. Glanville had a way of taking charge of a room.
"Now I've been mayor here for ten winters now and I know how to handle the Nor'easter. It's been early before, and this'll be no different. There'll be plenty of sheep still out on the eastern farms. There was no time to bring them inside. It'll take one of those, then it'll go back to sleep."
"Horseradish," said Weaver. "It'll take two sheep at least. If it's woken this early it must be hungry."
"It'll take one, just like usual," Glanville said. "Mark my words, it just needs a meal and it'll be back to sleep."
And that, it seemed, was that. We settled down on the straw until dawn. I managed a few hours sleep at least, despite the cold.
Come the morning, we left our shelter and went back to work. I spoke to old farmer Danson later that day when he came into town. It took four sheep that first night. They found the bones scattered all the way up to Wenwright's mill, the flesh stripped clean off them.
The farmers called a meeting on the Sunday evening. As we filed into the assembly hall I recognized most of the faces; I'd done work for pretty much all the farms round these parts over the past year or so. The torchlight faded away into the corners, leaving just silhouettes of heads. I pushed my way around to the side of the crowd, where I could get a good view of the stage.
Glanville sat up there at the table, alongside the Town Clerk and Tom Farthingsworth. Those two looked uneasy at the size of the crowd, but Glanville managed to keep that smile he always had.
"Alright, settle down folks. Settle down," said Glanville. "I've asked Mr Farthingsworth here to go over..."
He was cut off by someone in the crowd, I couldn't see who. "It's been taking more sheep!" the voice cried.
"It took one more of mine last night!" That was Mr. Danson. He had the largest farm around here, over near Bridgewater.
"OK now folks," Glanville said as he tried to manage the mob. "One at a time."
Weaver took the floor. "Now something ain't right here. Everyone knows it. The Nor'easter is never this busy this time of year. And it's never taken this many before, we've lost eight sheep in a week. Most years we'd lose no more than ten through a whole season--"
"This isn't the Nor'easter!" shouted Tendale, cutting him off. "This is a southerly wind!"
"No it ain't," said Weaver dismissively.
"It sure as hell is. I've seen which way the weathervanes go, it's come down from the mountains."
Glanville stepped forward. "The Nor'easter claims these lands. No other wind would try and stake a claim here."
"I'm just sayin' what I know," continued Tendale. "This wind came from the south. This ain't the Nor'easter."
"What are you going to do about it?" shouted someone.
I could see it in Glanville's eyes; that slight glimmer of uncertainty. He always put up that smiling facade, but if you knew him you could spot it peeling away.
Then a new voice came from the back. It was Wenwright, the mill owner. "We should send for the aeromancer."
That caused a murmur through the crowd.
"What aeromancer?" asked someone.
"The aeromancer, the one who lives up in Dryton. I saw him once when I was a boy. He'll know what to do."
"Dryton? That's fifty miles away."
"Folks, please," said Glanville. "Now folks, we don't need to send for no aeromancer. That ain't gonna be cheap, and the town's already losing money each time this wind comes through. It don't make no sense for us to be paying a small fortune just to have someone come down here and tell us what we already know. Now Mr Farthingsworth here has taken care of our bells and chimes for nigh-on thirty years."
That was certainly true enough. Farthingsworth kept the warning bells in good order, and went up on the roofs to repair the weathervanes every season no matter the weather. He'd seen as much wind come through this town as anyone. A sound of agreement rippled across the crowd.
"Now Tom, why don't you explain things to these kind folks here."
Farthingsworth lifted himself out of his chair and addressed the crowd. "Well, we'll start by bringing the herds in early. It'll mean we'll need more hands hired to keep them fed once they're indoors, but Mr. Barson here has agreed to provision a one-off stipend to cover the season."
The farmers grumbled a little, but I could see they were thinking it over. Farthingsworth looked around the room, and seeing no disagreement he continued on:
"Then we'll take a herd of goats west across the moors, and stake them up on the northwest brow. Once this wind realizes there's no food around here, it'll go for those instead."
I spoke up. "And what about when those are gone?"
"If we place the goats to lead it northwards, well then it'll probably follow the valley north up the coast. There's plenty of wild deer there. We can encourage it to move on to where there's better takings."
"Just where are you gonna get these goats from?" asked Tendale.
"Well perhaps Mr Danson could... "
"Me?" asked Danson. "I'm relying on my animals for the winter. I need every last one of them, I can't afford to keep losing them each time a new wind decides it wants a nice lunch."
"I'm sure under the circumstance the town council could perhaps reimburse you...?" he looked to Glanville for assurance.
"Yes," Glanville said. "I believe we can accommodate that." That gleaming smile came back to life. "Well then gentlemen, I think that's settled."
So settled it was, though it seemed to me that not everyone agreed. I heard old Wenwright again from the back:
"I still think we should send for..." he began, but his voice was drowned out by the talk of the crowd. Once Glanville had an idea set it was hard to have it otherwise with him, and so the hall slowly began to empty out.
Three nights later it came again, just as the sun set. I was coming home from resealing the roof on the Jenner house, over by the coopers' yard. I'd noticed the breeze picking up but I figured it only for a passing zephyr. It built quickly though, quicker than I'd ever seen before. I hurried down the narrow alley, my footsteps accompanied by the tinkle of the windbells that hung from every gutter. Only when I heard the thundering peal of the windchimes from the belltower did I drop my bucket and run for it. As the alley opened up onto the square, I finally caught sight of the lights of the inn and made like hell for it.
The windchimes only struck when high winds were coming. You could hear them for miles, with the deep, dull tone from the 30ft tubes. The heaviest one weighed nigh-on 400 pounds. It's a sound you don't forget in a hurry.
They were closing up the door as I got there. It was busy, maybe a hundred people all crammed inside. The inn was a good, safe building to be in. Big thick timbers that wouldn't give even if a howling gale hammered at them. Folks were standing around near the doorway.
"What happened?" asked Will Fenkins. "Didn't they put the goats out like we planned?"
"They put them out alright, went up there Monday," I answered. "Guess it didn't count for much."
People milled around without much to do. I saw Mary Colson, the butcher's wife, looking panicked.
"Billy?" she called. "Billy, where are you?"
Billy was her son, just turned twelve last month. Good lad, bit absent minded though. I looked around but couldn't see him.
The wind was here in full force now, bringing fierce rain with it. The drops tapped a fast rhythm against the window glass. I heard a commotion and turned back around to see Mary struggling at the door.
She was trying to lift the heavy draw bar that held the door shut. Jack Porter grabbed her hand and tried to pull her away.
"What the hell are you doing Mary?" he shouted.
"My Billy! He's still out there!"
"Mary," shouted Jack as he wrestled with her. "Mary, listen. You can't go out there. It's here!"
She didn't listen. "But he's still out there!" she cried. The windchimes rang out again.
I peered out the window, trying to spot any signs of life in the darkness. A flash of lightning lit the square, and a movement caught my eye.
"Look!" I cried. "Over by the well."
The crowd pushed to the window, trying to get a view. There was almost no light to see by now, but there was definitely the outline of a figure, curled up in a ball beside the steps to the well.
"Let me out!" Mary shouted. "Let me go!"
Jack let out a sigh. "Alright, wait. You stay here, I'll get him. I'll get him."
Ferris and I lifted the heavy wooden bar off the door, and the rumble of thunder filled the room. I caught Jack's eye. He didn't say anything, but his eyes spoke for him.
"Please, please hurry!" begged Mary.
Jack leaned to me and whispered. "You shut this door behind me the moment I get out there," he said. I nodded.
We opened the door and Jack dashed out. The wind pushed hard at it, but between the two of us we got it closed again and dropped the bar back in place. We all hurried to the window and watched anxiously as Jack sprinted across the square, shielding his face from the rain. The dull atonal sound of the windchimes struck again, drowning out the noise of the storm.
As he reached the well he heaved the Colson kid up over his shoulder. A giant rumbling roar filled the air, like an almighty bear. It was too late; the wind had seen them. It seemed like maybe he was going to make it back, but as he ran a gust hit him and knocked him backwards off his feet. The kid tumbled over and landed face down on the cobblestone.
Jack scrambled up again and grabbed the kid's hand, but the wind surged again and lifted the kid up into the air. Jack held on and shouted something, I couldn't hear what. But it didn't matter. The wind ripped little Billy Colson right out of his hand and took him away into the night.
We had the door open ready as Jack came back into the inn, and got him a seat once he was safely inside. I'll never forget that look in his eyes. There was nothing he could say, he just sat there dripping wet with his mouth open. Nobody knew what to say. Someone pushed a shot of whiskey into his hands but he just held it.
He looked up into the eyes of Mary Colson. "I'm sorry Mary," was all he could offer.
She burst into tears, and collapsed into a chair.
I'd never seen the assembly hall so full, we must have had half the town in there. They had to stall the meeting for an another half hour as more people were still arriving in off the north high road, some from as far up as Woodhole I heard.
At half-noon they got started. Glanville was first to speak up.
"Alright folks, we all know why we're here. Let's try and keep this in order. Who's first?"
Sampson took the floor. "This thing's out to kill us. It doesn't just want a taste of mutton, it wants blood. It's found what it likes and it wants more."
"What are you saying we should do about it?" asked one of the Wiversham brothers.
"What can we do about it?" cried someone.
"One at a time, please folks," said Glanville. "Now we always managed alright with the Nor'easter, so I think--"
"The Nor'easter never took people before!" shouted Sampson, cutting him off. "We always made sure to get everyone inside and it was happy enough with just the sheep."
"Darn thing took one of my cows last year," said Farmer Hoggis.
"Okay, sure, from time-to-time. But never people." Sampson turned to address the whole crowd. "Which of us is going to be next?"
"Hear hear!" the crowd bellowed.
"I say we do like Wenwright said," he continued. "We send for the aeromancer, we pay him what he wants, and we do it soon before it takes another."
The hall door opened again as still more people poured in, I couldn't see who.
Tendale stood forward and took the floor. "This new wind is trying to claim this land for itself," he said. "I say we head up to Forcastle while we still can; there's good land there and we could--"
"This is our home. I grew up here." The anger in the voice surprised me, especially when I realized it was mine. "Wh-- well now we've had Wintersmith's in these parts for going on a hundred years now. I'm not going to be driven out of my home. Now I agree with Mr. Sampson here, we need to send..."
I didn't get to finish. The crowd was beginning to part, and a strange old man pushed his way to the front. He was dressed like nothing I'd ever seen before, a mass of blue satin cloth and white beard which held up a tall staff, or the staff held up him, I couldn't be sure which. He walked slowly forwards into the light, and the attention of the whole room seemed to draw around him.
"Who are you?" Glanville asked.
"My name is Petrel," the old man said, "and you sent for me did you not? I am an aeromancer."
A murmur rippled across the crowded hall. Glanville exchanged a blank look with the other councilmen, his mouth open in a rare loss for words.
"I'm not sure that--"
"I sent word for him," said someone. It was Wenwright.
"You, Sam Wenwright?" gasped Glanville. "Without the approval of the council, you just went and sent for him on your own authority?"
"And well he should have!" snapped Petrel. "I am glad to hear someone in here has one ounce of sense in their head!"
He stood at the front of the crowd and turned to address them. Every time he moved, the various charms and tools that hung off his staff fluttered to and fro. He waved his staff in anger with each fiery word.
"You foolish men!" he cried. "You'd try to control the winds, would you? What did you think you could achieve?"
"We uh..." started Sampson, "We thought we could lead it away from here, up to the north w--"
"You thought you'd lead it, did you, hmm?" Petrel asked. "Oh, such naivety. You would control something you do not understand? This is no seasonal wind, this is a wild hunter. It has exhausted the food in the mountains and now it wants to feed here. It will not go, it will not leave, until it has exhausted the supply here too. And now you've given it a taste of human flesh, and it knows there's plenty more where that came from."
"So what do we do?" Mayor Glanville asked. "How can we kill it?"
"Ha!" exclaimed Petrel. "You can't kill a wind, not the likes of you anyway. No, this wind has upset the balance. The cycle must be restored. Only the might of the Nor'easter can fight a thing this strong. We must let it fight for its territory."
A ripple of excitement ran over the crowd. Sampson spoke:
"It could be another three months before the Nor'easter wakes. How many more would it take before then?"
"Matters must be brought forward then. We must venture to sea." Petrel eyed the murmuring crowd as he spoke, watching to see if they would accept what he would say next. "We sail far to the north-east, where the cold air meets the warm ocean. We sail right into the heart of the storm and we wake it. We wake the Nor'easter."
I couldn't believe what I was hearing, and nor could anyone else. The crowd erupted with noise.
"Are you crazy?"
Glanville stepped in front and managed to get the crowd calmed down a little, then turned back to talk to the aeromancer.
"What are you saying here?" he asked. "You're just going to waltz on over into the middle of the ocean, and poke this thing with a stick until it wakes up? You're crazy. You're gonna get eaten alive. It's impossible."
"Impossible? You have a boat, do you not?"
"Well sure we do, sure. But we only use them in the spring, before the summer westerlies arrive. To venture to sea--in this season--is dangerous. The seas are as open as the skies, there's no shelter out there. And you're not just talking about rowing, you'd be going further out than anyone's ever done before. What if there's a leak? If something goes wrong way out there, you've no chance of getting back to shore in time."
"And you would have a better thought, hmm?"
He did not. No-one said anything.
"Who would be sailing this boat? You?"
"I would go myself, yes," replied Petrel.
Marson had been sitting on a box at the side of the room, watching the proceedings quietly. He smoked on his old pipe, as he often did when he was thinking. He took it from his mouth and spoke:
"Takes two men to crew a sailing skiff," he said. "Can't do it on your lonesome. Who else are you going to find stupid enough to go along with you? You couldn't get me out on those waters with this new wind on the loose, not for any money."
"Speaking of money," interrupted Glanville, "if we were to hire you to go out there..."
Petrel gave a small sniff, and said "I would ask only four hundred for my services."
"Four hundred!" cried Glanville. "Extortion!"
I pulled Glanville aside and quietly said: "It may be the only way to get this thing fixed."
He wasn't pleased with the idea. "I don't see why we need to..."
"And you'd live with it, for another 3 months would you?" That was Weaver. He spoke loudly and drew the full attention from the room. "You ain't seen what these things do. It ain't quick, or pleasant. I seen how the Nor'easter et a cow once, when I was a lad. I sat in the lake hut and watched it circle around all night as it finished it off. It doesn't kill you straight away. It holds you in the air for hours, slowly grinding away at your skin, scraping you raw with sand until there's nothing left on you but bones. You could hear that poor cow up there in the sky, moaning in agony, all the way through till morning. So, Mr. Glanville, you can wait, if you like. But I say we go with yonder wizard here, before it comes for us too."
The crowd stood in silence. I wanted to say something, but I couldn't find the words. It seemed our choices were shrinking by the minute.
"How exactly do you wake a wind?" asked Wenwright.
"The secrets of aeromancy are passed from master to apprentice, given not to you. But I shall need a barrel of pine tar, and help to apply it."
I wasn't sure I liked where this was going at all.
Of course they talked me into going. More fool me, but Glanville persuaded me into it like he always does. Said the aeromancer needs pine tar for his work, and I was the best person to help with it. And of course, on such a long journey the boat might need fixing or resealing, or the ropes need retarring, so it fell down to me to be the one to go with him. Normally I'd just wait for the summer boats to row back into shore to patch them up, but not this time. One of us had to go to sea.
We loaded the skiff with our provisions early that morning. The jetty bustled with life as everything was brought aboard. The aeromancer had bought several boxes with him, containing all sorts of strange equipment. Everyone had turned out to see us off, or perhaps just to see what all the fuss was about. Petrel certainly drew a crowd, looking like some kind of ancient jester and behaving no better. I'd made sure to wear my best oilskin, and packed a good lunch of cheese and pork sausage, as well as enough salted beef in case of delay. Marson carried the small barrel of pine tar aboard and stowed it amongst Petrel's equipment, while I checked over everything a second time.
Mayor Glanville stood on the wooden jetty, talking with a small group of onlookers. I climbed back out of the boat and walked down the jetty to him, the boards creaking with every step, and pulled him aside.
"Are you sure about this, Glanville?" I asked quietly.
"I need someone aboard I can trust, Cal. He'd only agree to payment up-front. There's a lot of the town's money about to get on that boat and just sail right off over the horizon. Now I need you to keep a watchful eye on him; make sure he does the right thing by us."
I glanced back at the aeromancer. He stood alone on the skiff, messing with some kind of odd cloth contraption he was folding away into his cloak. He seemed to not notice all the activity around the dock, caring more for the strange items he carried with him. I watched as he held up his staff; from its end there protruded some strange arrangement of small cups fixed on an axle, which gently spun as the air moved past them.
"I trust him," I said.
With the boat fully loaded, Marson leaned against a mooring post and lit his pipe.
"More fool ye. It ain't the money I'm worried about," he said as he shook the match out. "What if this aeromancer is wrong? What if we wake the Nor'easter, and now we have two winds to deal with?"
Marson said it loud enough for Petrel to hear, and while he paused briefly he said nothing in reply. Perhaps the thought worried him, but he ignored it and continued checking his equipment.
It seemed like we were ready. I made my excuses and climbed into the boat. Marson lifted my pack off the jetty and threw it down to me. Petrel was checking his strange spinning staff again. He measured the length of string that hung from it, and seeming to reach some kind of conclusion, he spoke:
"A breeze is rising," he said. "It is time."
And with that, we left. The crowd waved us off, and I managed a wave back, before pushing the boat off from the jetty.
On the dock, Marson and Glanville watched us depart. Glanville waved happily, Marson just sat on a bollard and stared while he took a drag on his pipe.
"You'll never see 'em again," he said to Glanville.
"Cal's with him. He's a good lad, he'll see us right."
I watched them become dots in the distance as I rowed us further away from shore. Petrel paid no attention to me, and just stood at the bow, looking out to sea.
"Could Marson be right?" I asked him as I pulled the oars toward me. "About ending up with two winds to deal with?"
Petrel paused, and took out a pipe of his own.
"Perhaps," he said. "The future is not always clear, only the present is."
Aeromancers moved in cryptic ways, it seemed. I decided it was best to let it be, and carried on rowing.
The morning sun shone brightly across the sea and glinted off the ocean waves. I wasn't used to this. I'd been in a boat before, sure, but usually just to fix it. The mainland was getting awfully far away from us.
A gentle breeze had been following us from the shore, slowly building. I pulled the oars in and went to set up the sail instead. With a small skiff like this, you could either row it or sail it. Seeing as we could be going a long way, I thought it best to let someone else do the work.
Petrel had bought several strange boxes with him, and I almost tripped over them while trying to get the sail unfurled.
"Dammit!" I cursed. "What's in all these boxes anyway, Petrel?"
"Many things, Cal. Many things," he replied. "And all of which we shall need! Speaking of which..."
He stood up and picked up the box he'd been sitting on. He opened it up, and from within took out a strange device of stick and cloth and handed it to me. While I examined it in puzzlement, he reached back into the box and pulled out a small cage, containing an even smaller baby rabbit.
"Aha!" he exclaimed as he looked in at the rabbit. "Yes my little fellow, you'll do nicely."
"It's a rabbit," I said.
"Why do you have a rabbit?"
"To gain a favorable breeze, of course. Here my lad, hold the kite up."
I held up the cloth device, the "kite" he'd called it, while he took the rabbit's cage and tied a string from the kite onto it. The rabbit looked on helplessly as Petrel let the cage dangle down from the kite.
"Now," he said, "you hold this string tight while I launch it."
I did as he asked, and with a slight horror I realized the fate of this poor rabbit. He took hold of the kite and held it high in the air, then as the breeze caught it he pushed it higher and released it. The kite shot high up into the sky, and tugged hard at the string.
"There we are!" he said. "Now release it!"
I let go, and the kite was ripped straight from my fingers. It whirled away up into the sky, with the poor caged rabbit dragged below it. I couldn't help feel a little sorry for it. It wasn't a strong breeze, but it'd strip that rabbit down to the bone with no trouble.
"You're feeding the breeze?" I asked.
"Of course. We'll need a good push behind us to get where we need to go. A small offering will keep the breeze chasing us."
"Is that wise though? I mean to be feeding it like that? What if it comes back for us? Like with the goats..."
"It's only a passing zephyr, it can't hurt us. No sense being afraid of nature. The gentle zephyrs don't cause no harm to anyone, 'cept maybe to take a duckling or chick from time to time. It's all part of the great cycle."
The great cycle. Fessler used to talk about that a lot. Some folks get scared of the small breezes, but they never bothered Fessler. The trees need the breezes to carry their seeds, he said, and we need the trees to make shelter. Can't have one without the other.
It worked, anyway. The wind picked up, and we gathered speed. The skiff sailed onwards to sea, its sail billowing. I wondered if perhaps we were safe from a wind that would carry us with it, much as a dog could not bite its own collar. The thought brought me no comfort.
"You're not scared of the wind at all, are you?" I asked him.
"Scared?" replied Petrel. "Oh, I'm scared enough, I suppose, as when you stand near a high cliff edge and see the waves far below, and you worry what would happen if you accidentally fell over."
He looked out across the vast ocean, watching the waves move past us.
"But I don't fear it. You'll learn that as you age, young Cal. When I was your age, I used to think I was invincible. When you get a little older, you start to think about death a lot. It starts to haunt you, starts to follow you wherever you go. But eventually you accept the balance of the world, and when you're as old as me you no longer worry about how you'll die. If the wind takes me, then it takes me. If not, then I shall live for another day. But I won't hide, not from nature anyway. One day I'll finally go, I suppose, and fulfill my role in the cycle."
I left him to his thoughts. There was plenty to do, anyway. The ropes on the skiff hadn't been tarred since the summer. You gotta apply it twice a year at least, or the water will get in there and rot it. I took my brush and started on the forestay.
"You haven't said how you plan to wake this thing," I said. "Do you even have a plan?"
"Of course I have a plan! Impertinence!"
"Well," I continued, "why haven't you told it yet?"
"And give away all my secrets?" replied Petrel. "I may be old but I'm no fool. That Glanville cares only for money. If I told him how to do everything himself, he would have no need of me! No, the knowledge of an aeromancer is best kept to those who can make best use of it."
"And to those who can get paid for it? That's a pretty little fortune you've got yourself there."
"I have to eat, like any man."
"You'll be eating for a good long while with all that."
He smiled with a sigh, then took out his pipe and started filling it.
"My work is not like yours, young Cal. We can not all spend our days making tar and sealing window frames. I spend my life in study. Perhaps I may not be needed for years, but when I am needed, I must be ready."
"Still... four hundred buys a lot of studying."
"So what is the plan then? I assume you can tell me now that we're way out here?"
He pointed the end of his pipe at the bundle of cloth that sat boxed behind me.
"There it is."
I wiped the tar clean from my hands, then poked the box suspiciously.
"What is it?"
He seemed amused by my ignorance. "That," he said with a grin, "is a balloon."
"A what?" I looked back up at him as he continued:
"A balloon. I ignite the tar below to fill it with hot air, and it will rise into the sky."
"Then the smell from the burning tar will wake the Nor'easter."
He asked me to tar the balloon, so I set to work. He'd explained to me that he wanted the whole thing to catch light once it got high enough, so I unfolded it out a piece at a time, and gave it a good coating. There wasn't much room to work on the little skiff, and I almost fell overboard a couple of times. I was slightly nervous about the idea of lighting any kind of fire on this boat--with all the tar around it'd be real easy for the whole thing to go up like a light, us included. I decided not to mention it to Petrel, hoping he knew what he was doing.
"Have you ever done this before?" I asked as I worked.
"So how do you know it'll work?"
"I read about it, once. In an ancient book. A book is what we aero--"
"I know what a book is. I'm not stupid. And you think just because someone wrote it down in a book means that it'll work?"
"Perhaps? That's all you ever say! I'd feel a lot happier about all this if you were sure about anything!"
"One cannot live ones life in absolute certainty. I must deal with the facts I have at hand."
"Isn't there some way we could just kill it?"
"That's not our place."
"We all have a place in the great cycle. The winds move around us, above us, and we are beholden to them. It is not for us to rule above all, but to maintain balance in the world."
"Well I got news for you, aeromancer, this thing's going to kill us if we don't kill it first."
"And you would rule the skies would you, young Cal? You would decide what lives and dies?"
Petrel stood looking to the horizon.
"No. We restore the balance. We let the cycle mend itself. These lands belong to the Nor'easter. It forms part of the cycle, like all things, and must be balanced if the cycle is to continue."
"I'm really not sure I follow you at all."
He turned and smiled.
"Bless you, child. Would it matter if a leaf understood how it is blown on the wind? Us two are carried forward on this journey together, and we will go where the cycle takes us, no matter if we understand why. Our futures lie in the hands of powers beyond our reckoning."
The sun was high in the sky now. I'd lost sight of land hours ago. I'd never heard of anyone being this far out to sea before. The fishing boats never dared to venture too far away from the shore.
"So... you're saying you don't actually know if this is going to work?"
"Know? I do not deal in knowing the future, nor the past. All I see is the present. Your land was out of balance, and so I will attempt to level that balance. What fate decides past that is not for us to choose."
We sailed onwards. Far on the horizon, clouds were forming.
The sky was a dark grey now. Clouds circled high above, and I could feel the breeze coming at me sideways. In front of us a great storm rotated slowly, with small gaps of sunlight breaking through.
"We can't do this," I said. "We can't go in there."
"Have no fear, Cal. The Nor'easter sleeps."
"We could still turn back," I said.
"Be strong! We must push forward!"
He grabbed the line and steered us towards the storm, his eyes fixed on it like a madman. It was getting hard to hear over the ever-increasing wind.
"We must breach the eyewall and sail to the Eye of the storm!"
He trimmed the sail to keep a good reach, and plunged ahead towards the storm. We were caught in the cyclone now; the wind was blowing straight sideways and strong waves kept pushing at our boat. Drops of water pelted my face, and I couldn't tell whether it was rain coming down or spray coming up.
A giant wave picked us up and sent us crashing down again. I sat at the stern, trying to balance the weight, and tried to keep hold of the thwart to stop myself getting thrown out. Petrel paid no attention to me, he just kept holding the lines with his eyes fixed on the our goal.
I closed my eyes and thought of being on land, but it only made me feel sicker. As wave after wave tossed our boat around, I could hold my stomach no longer and let go over the side. The spray was relentless; I would wipe the water from my brow only for it to come straight back.
It felt like hours, but the waves began to calm, and the wind had dropped. We were right in the middle. I looked up and could see the clouds circling all around us, and with nothing but greyness to either side it seemed like we were the center of the whole world.
"Here we are," said Petrel as he took the sail down. "Come on then."
He handed me a small bucket of some sort.
"Fill that with tar," he ordered.
I filled the bucket up, and he placed a special lid on top. There was some kind of wick protruding from the top, which he lit. As the tar slowly burned, we held the balloon open above it. We waited, and the balloon slowly expanded out and began to take a rounded shape. I could feel it starting to pull away from me, and when Petrel gave the nod we both let go.
The balloon rose upwards, carrying its small burning heart high up into the sky. I stood and watched it climb ever higher. It might have been a mile up, I couldn't tell, when it suddenly erupted in bright flame. The fire must have spread to the outer cloth which we'd coated in tar. The whole thing glowed bright orange against the grey skies, a stack of smoke spreading out wide into the storm.
The beast woke. I didn't just hear it, I felt it. A giant roar of thunder bellowed through the air around us. The air became an icy white, with vague outlines forming amongst the wind. And there, high in the sky in front of me, I saw it. The Eye of the Storm. The giant floating eye, made of nothing but raindrops and ice, opened wide and looked right at us. I said nothing, for there was nothing I could say, and the beast said nothing in return. But I felt that monstrous Eye look right into my heart.
I thought I was surely done for, yet it did not take me. It seemed intrigued by us, and I imagined perhaps it understood. The Eye tilted as it studied us, while I felt the wind beat ever harder. Then, with a sudden movement, as if it had heard something, the great Eye quickly turned and gazed to the south-west, back towards land.
It let out a mighty roar again, and rose up into the sky. As it moved I felt an enormous gust of air, and I was flung overboard into the cold sea. The world around me turned dark, but I felt a hand reach for mine. The aeromancer pulled me up, and I found my way back into the boat again.
"It is angry," he said, "but it understands. It rises to claim its territory once more."
The wind which before had circled, now changed and drove us hard in one straight direction. Petrel raised the sail again and the wind caught it immediately. We were pushed back towards land now, dragged hard and fast by the Nor'easter. It paid no attention to us any more, for its gaze was fixed only on one thing; the intruder on the land it claimed as its own.
The wind was coming.
With the gale at our backs, we made it to shore in half the time it had taken to venture outwards. The weather was fierce the whole way; I huddled under blankets and tried to dry myself the best I could. A distant sliver of blue sky sat on the horizon, but shrank with each mile we covered.
I said nothing to Petrel; I was too scared to even open my mouth for fear the Nor'easter would take me. I suppose I needn't have worried; the wind was no longer interested in our little boat. I kept trying to tell myself that but it helped none.
We hit the beach and clambered out of the skiff. The Nor'easter was no longer running straight, but was circling the coast, building strength.
"Come!" cried Petrel. "We must shelter!"
"There's nothing here!" I shouted back over the noise of the wind. The beach was empty with nothing but open sea to one side, and the eastern hills to the other. It would be a mile to the nearest farm, the town being the same again.
We scrambled up the hillside, my eyes checking for anything that could provide shelter. As we reached the top I saw a lone wooden structure--Wenwright's mill.
"The mill!" I shouted. "Come on!"
Petrel was slower than me, and I held open the door at the base of the windmill, and waited as he caught up with me. The weathervane on the mill span in every direction as the Nor'easter circled with increasing ferocity.
I closed the door after him, but there was no bar to draw. The mill wasn't designed for living in; there was no sealant anywhere, and every crack between the planks let the air through. Petrel saw my expression as I scanned the room.
"Fear not!" he said. "We are out of the wind, that is all we need. The Nor'easter will pay us no attention. It has far more pressing matters."
He stood at a crack in the timber, watching the skies outside. He didn't seem scared at all; he just watched it with excited eyes, like a child watching a play. I had frozen motionless next to the giant millstone that filled the room, but he beckoned me over to watch with him.
From up here on the hilltop, you could actually see it, not a solid shape but an outline formed only from the glint of the rain it carried with it. A giant trail, ten miles long, stretching back out to sea. The Nor'easter rushed across the farms toward the town, while from the other side a bolt of lightning lit up the sky. From the west, the new wind was coming to meet it head on.
The two giant beasts clashed above the town. The two winds collided with an almighty peal of thunder, and then span and circled around each other. They danced and weaved in the sky like flocking birds, and pushed each other eastwards, across the farmlands. You could see them only as faint glimpses; streaks of white that cut across the sky, causing eddies in the clouds with every turn. With each bite they made at each other, bolts of lightning would cut through the clouds and a crack of thunder would follow.
As the winds spun, a tornado formed below them. The towering grey funnel touched down on Danson's farm, and ripped his barn into a thousand shreds.
It kept moving, never sticking to one direction, but bearing eastwards towards the very hilltops we stood on. As the fighting beasts approached us, the wooden frame of the windmill started to shake back and forth.
I grabbed the aeromancer by the arm. "Come on!" I shouted. I had to almost pull him away, but he followed. There was nowhere else to go, but I grabbed onto the tall wooden shaft of the mill and held on for dear life.
The windmill was old, and weak. The timbers creaked as the blades span faster than they ever had before, and I struggled to hold onto the shaft as it turned.
The old wooden structure could not take the force. The winds ripped the timbers clean off the frame and sent them flying into the storm. Pieces of wood flew everywhere, and I caught a good cut right across my cheek from a flying splinter.
We were left exposed. There was nowhere to run, no other buildings to hide in high up on these hills. The force of the gale was overwhelming. High overhead, the two beasts continued their fight, paying no attention to the destruction far below.
The millstone and its shaft were all that remained of the mill, and I held tight onto what remained of the wooden shaft. I shouted to Petrel but he couldn't hear me over the roars of the two giants. I tried to motion to him to join me, but he wasn't paying any attention. His gaze was fixed on the battle that raged above.
A huge gust swept through, and I was lifted clean off my feet. I held onto the pole to stop myself being carried away. I shouted out again to the aeromancer, but he was no longer there.
I thought him dead, but then I spied him. The tornado had lifted him up into the sky. But as he was carried off, out of his cloak he pulled a strange cloth device; the one I had seen him with when we set off our voyage. He unfolded it above his head and it caught the wind like a sail.
Away he sailed, riding the breeze like a gull rising on the updraft from a cliff face. I saw a strange smile on his face, as if nothing in the world could bother him. The winds took him far away into the skies, a blue dot against a grey canvas.
The gust dropped, and I found my footing again. The tornado had turned and moved back to the farmlands. I watched the two beasts battle. I could no longer tell which was which, but it seemed one was emerging as the victor. The tornado was unwinding, and the wind was prevailing in a constant direction now from out to sea.
A giant roar filled the sky, so loud I could feel myself pushed by the sound alone. The Nor'easter had won, I was sure of it. The sky thundered and lightning ripped across the sky with every roar. I stood on the hill and watched as the lone remaining wind circled the town. I felt an almost strange sense of victory, as if the battle had been my own.
My pride was short lived, however. The wind would be hungry after its battle. And here I was, exposed out on this empty hilltop. I looked around frantically for any kind of building, anything I could shelter inside, but there was nothing.
Then I realized where I needed to be; the tar kilns that lay not a quarter mile from here. I wasted no time and dashed through the pine trees towards the clearing where they sat.
The kilns were sunk into the ground, with only a small doorway leading to the tiny underground chamber where the barrel sat, catching the dripping resin from above. They were only intended to hold a barrel, not a person, but I made do. I heaved the half-full barrel out of the chamber, spilling its contents everwhere, and squeezed myself into the tiny gap instead. There was a small rope handle used to pull the door; I tied the loop around my foot and sat there in the darkness.
The smell of pine tar was overwhelming, and the floor and walls were sticky with years of tar that had been spilt there. I sat and waited while the noise continued outside. The battle may have been over, but the Nor'easter circled above for hours, reclaiming its territory once more. It would no doubt be looking for an easy meal, and I hoped it would find a sheep out on the farmlands, but I wasn't going to risk it finding me instead.
I emerged hours later once the wind finally dropped, my clothes and skin dripping with the sticky tar, leaves and mud stuck everywhere. I can't imagine what I must have looked like, but I was too tired to care.
And so I began the long walk back to town.
It's 6 months after as I write this. The winter was hard, the Nor'easter fed well and took more than its fair share of the herds. That's the price you pay for waking it early; a risk we had to accept I suppose.
The Nor'easter slept early. It's spring now. They're talking about rowing a boat out to sea this month, sayin' there might be time enough now to go fishing before the Summer Westerlies arrives. Old Carson asked me to go with them, saying I was an old hand now, but I'll never set foot in a boat again.
The battle wrecked the eastern farms. Most of the town is intact, as the battle happened to the east, though Ned Mitchell died; a piece of flying timber caught him a good blow to the head.
I never found out what happened to Petrel. I like to think he floated away on his thingamabob and found his way down somewhere. Or maybe the wind got him, and he finally found his place in the great cycle.
Old Fessler used to say he'd teach me about the great cycle too, one day, though he never did. It had always puzzled me that he never complained much about his leg, never blamed the storms for hurting him. Perhaps he knew his place in things.
We had no more trouble with the new wind anyway. Petrel was right, the balance needed to be restored. Of course, some folks still get all panicked each time some small zephyr flies through town, but it don't worry me. Sometimes you just gotta go where the wind blows you.
Written by Richard Mitton,
software engineer and travelling wizard.
Follow me on twitter: http://twitter.com/grumpygiant