function hemisphere0(block, radius, northSouth) {
  if (radius > 255) {
    throw new Error('Hemisphere radius must be less than 256 blocks');
  }

  var lastRadius = radius,
    slices = [[radius, 0]],
    bm = this.getBlockIdAndMeta(block),
    r2 = radius * radius,
    i = 0,
    len,
    newRadius;

  if (radius > 255) {
    throw new Error('Hemisphere radius must be less than 256 blocks');
  }

  for (i = 0; i <= radius; i++) {
    newRadius = Math.round(Math.sqrt(r2 - i * i));
    if (newRadius == lastRadius) {
      slices[slices.length - 1][1]++;
    } else {
      slices.push([newRadius, 1]);
    }
    lastRadius = newRadius;
  }
  this.chkpt('hsphere0');
  //
  // mid section
  //
  if (northSouth == 'north') {
    this.arc({
      blockType: bm[0],
      meta: bm[1],
      radius: radius,
      strokeWidth: 1,
      stack: slices[0][1],
      fill: false
    });
  } else {
    this.up(radius - slices[0][1]);

    this.arc({
      blockType: bm[0],
      meta: bm[1],
      radius: radius,
      strokeWidth: 1,
      stack: slices[0][1],
      fill: false
    });

    this.down(radius - slices[0][1]);
  }

  var yOffset = -1;
  len = slices.length;
  for (i = 1; i < slices.length; i++) {
    yOffset += slices[i - 1][1];
    var sr = slices[i][0];
    var sh = slices[i][1];
    var v = yOffset,
      h = radius - sr;
    if (northSouth == 'north') {
      // northern hemisphere
      this.up(v)
        .fwd(h)
        .right(h);

      this.arc({
        blockType: bm[0],
        meta: bm[1],
        radius: sr,
        stack: sh,
        fill: false,
        strokeWidth: i < len - 1 ? 1 + (sr - slices[i + 1][0]) : 1
      });

      this.left(h)
        .back(h)
        .down(v);
    } else {
      // southern hemisphere
      v = radius - (yOffset + sh + 1);
      this.up(v)
        .fwd(h)
        .right(h);

      this.arc({
        blockType: bm[0],
        meta: bm[1],
        radius: sr,
        stack: sh,
        fill: false,
        strokeWidth: i < len - 1 ? 1 + (sr - slices[i + 1][0]) : 1
      });

      this.left(h)
        .back(h)
        .down(v);
    }
  }
  return this.move('hsphere0');
}
*********************************************************************
### Drone.hemisphere0() method

Creates a hollow hemisphere. Hemispheres can be either north or south.

#### Parameters
block - the block the hemisphere will be made of.
radius - the radius of the hemisphere
northSouth - whether the hemisphere is 'north' or 'south'

#### Example

To create a glass 'north' hemisphere with a radius of 20 blocks...

    hemisphere0(blocks.glass, 20, 'north');

![hemisphere example](img/hemisphereex2.png)
*