

: .BITROW   ( a +n -- )     \ Output half of +Nx14 (big) character
    0 row
    0 ?do
        ec@+ row  1+        \ Output every second bit row
    loop  drop
    0 row ;

: T&EMIT    ( c -- )
    80 umin  bl -               \ Convert ASCII value
    7F x -  dup 09 < if         \ Line full?
      dup 0 &fill               \ Erase end of line
      x y 1+ xy  dup 0 &fill    \ Erase end of next line too
      0 y 1+ xy                 \ To start of new line
    then  drop
    0E * big1 +  dup 7 .bitrow  \ First half of big char
    x y 1+ xy 1+  7 .bitrow     \ Second half of big char
    x 09 + y 1-  xy ;           \ x & y to new char position


: F&EMIT    ( c -- )
    80 umin  bl -               \ Convert ASCII value
    7F x -  dup 0A < if         \ Line full?
      dup 0 &fill               \ Erase end of line
      x y 1+ xy  dup 0 &fill    \ Erase end of next line too
      0 y 1+ xy                 \ To start of new line
    then  drop
    4 lshift big2 +  dup 8 .bitrow \ First half of big char
    x y 1+ xy 1+  8 .bitrow     \ Second half of big char
    x 0A + y 1-  xy ;           \ x & y to new char position


: .GBITROW   ( a -- )           \ Output part of 10x16 graphic symbol
     0B 0 do
         x 0<  x 7F > or        \ X lower then 0 or greater then 127
         y 0< or  y 7 > or if   \ or Y greater then 7
            2 +                 \ To next bitrow
         else  ec@+  row  1+    \ Output every second bit row if one screen
         then
         incr x
     loop  drop ;

: G&EMIT    ( c -- )
    80 umin  bl -               \ Convert ASCII value
    16 *  pict1 + dup .gbitrow  \ First part of symbol
    x B - y 1+ xy  1+ .gbitrow  \ Second part of symbol
    x y 1- xy ;                 \ x & y to new symbol position
