#Commodore VIC-20/VC-20/C64 (non-competing) - <strike>95</strike> <strike>69</strike> 68 tokenized BASIC bytes used (obfuscated and minimized)

    0dEfnb(x)=sgn(xandb):fOi=0to10:b=8:fOj=0to3:?rI(stR(fnb(i)),1);:b=b/2:nEj:?:nE

Copy and paste the above text into WinVice, for instance. Just about fits onto 80 characters on a Commodore 64.

Here's the non-obfuscated symbolic listing for illustrative purposes:

    0 DEF FN B(X)=SGN(X AND B)
    1 FOR I=0 TO 10
    2  LET B=8
    3  FOR J=0 TO 3
    4   PRINT RIGHT$(STR$(FN B(I)),1);
    5   LET B=B/2
    6  NEXT J
    7  PRINT
    8 NEXT I

Of course this may be minimised and further obfuscated. Explanation:

The `DEF FN` command in line zero is a simple function which accepts one numeric parameter. This will give the algebraic sign the number passed to it as a parameter, in this case is `AND`ed with the value `B` (declared elsewhere, but becomes global once declared).

Line 1 starts the loop counter `I`

Line 2 sets the value of the 3rd BIT.

Line 3 starts loop counter `J` (we want bits 0 - 3 essentially).

Line 4 gets the `STR$` value (string value) of the function `FN B(I)`, this is then passed to the `RIGHT$` command as CBM BASIC auto-pads outputted numbers with a white space, so we get the last character in the string created by `STR$`.

Line 5 moves the BIT counter down one (like `x >> 1` in C I suppose).

Line 6 moves the `J` loop up one.

Line 7 prints a new line (line `echo PHP_EOL;` in PHP).

Line 8 moves the `I` loop up one.

I've 'nested' the listing in the example to better show the loop and loop order.

[![C64 counting in nybbles][1]][1]


  [1]: https://i.sstatic.net/6nsF7.png