b800.ipxe.se - pastebin for B800 Video buffer screenshots, with focus on iPXE
Quick iPXE script: params && param vram ${vram} && chain -a http://b800.org##params && echo b800.org/${b800id} usage details

Converting raw B800 vram to human readable format

See The technical page for information about the raw format.
Example using awk converting B800 to text:
awk '{
  # loop over chars, skip attribute
  for(i=1;i<=length;i+=2) {
    printf substr($0, i, 1);
    # after column 80 end the line
    if(i%160 == 159) print ""
  }
}' | iconv -f CP437 -t UTF-8


Example using awk converting B800 to ansi:
awk '{
  # Color conversion table, Ansi only have 7 colors + intensity but bit 1 and 3 is switched between ansi and b800
  _c[0]=0; # black   ==
  _c[1]=4; # blue    001 vs 100
  _c[2]=2; # green   ==
  _c[3]=6; # cyan    011 vs 110
  _c[4]=1; # red     100 vs 001
  _c[5]=5; # magenta ==
  _c[6]=3; # yellow  110 vs 011
  _c[7]=7; # white   ==

  # initialize conversion table from char to number
  for(i=0;i<=255;i++)
    _ord_[sprintf("%c",i)]=i;

  oattr=-1

  # loop over chars, skip attribute
  for(i=1;i<=length;i+=2) {
    # the first char is data the other is attribute
    attr=_ord_[substr($0, i+1, 1)];

    # if attr changed create new ansi code
    sgr=""
    if(oattr!=attr) {
      oattr=attr;
      # create basic ansi code for (foreground 30-37, background 40-47) colors from attribute
      # extract them bitwise, convert to ansi colors and add the right base number
      sgr=(_c[and(attr, 0x7)] + 30) ";" (_c[rshift(and(attr, 0x70), 4)] + 40);

      # check the high intensity for foreground and prepend to ansi sequence
      if(and(attr, 0x8)) sgr="1;" sgr;

      # check for blink from background and prepend to ansi sequence
      # some b800 implementations show this as high intensity background instead
      if(and(attr, 0x80)) sgr="5;" sgr;

      # Ansi escape char followed by ansi reset and the rest defined above
      sgr="\x1b[0;" sgr "m";
    }

    # print Ansi code if set followed by the printable char
    printf sgr  substr($0, i, 1);
    # after column 80 end the line (reset ansi)
    if(i%160 == 159) {
      printf "\x1b[0m\n";
      # since we reset ansi we need to reset attr as well so we get a new on next line
      oattr=-1
    }
  }
}' | iconv -f CP437 -t UTF-8