'CSN-A2 Thermel Printer By Behnam Zakizadeh @ 97/03/05 [2018]
'avr64.com
'convert from Arduino:
'Ref:
'Adafruit &:
'Example 38.1 - Sparkfun Thermal Printer Test (COM-10438)
'http://tronixstuff.com/tutorials > chapter 38
'Based On Code By Nathan Seidle Of Spark Fun Electronics 2011

$regfile = "m8adef.dat"
$crystal = 11059200
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 19200

'************************ Vars / Const ************************
Const Heattime = 80
Const Heatinterval = 255
Const Printdensity = 15
Const Printbreaktime = 15

'***************************** Sub ****************************
Declare Sub Init_printer()
Declare Sub Align(byval A As String)                        'A=right,middle,left
Declare Sub Font_w2_h2_b(byval F As String)                 'F= "000" to "111"
Declare Sub Font_reverse(byval R As Byte)                   'R= 0 OR 1
Declare Sub Font_bold(byval B As Byte)                      'B= 0 or 1
Declare Sub Font_width_x2(byval W As Byte)                  'W= 0 or 1 1
Declare Sub Font_x2(byval F As Byte)                        'F= 0 or 1
Declare Sub Font_updown(byval U As Byte)                    'U= 0 OR 1
Declare Sub Font_underline(byval U As Byte)                 'U= 0 (no) OR 1 (thin) OR 2 (thick)
Declare Sub Line_spacing(byval L As Byte)                   'L=0 to 255 (default=32)

'==================== main prog:
Waitms 500

Call Init_printer()
Call Align( "middle")
Call Font_w2_h2_b( "000")

Call Font_bold(1)
Call Font_width_x2(0)
Call Font_x2(1)

Call Font_reverse(0)
Call Font_updown(0)
Call Font_underline(0)
Call Line_spacing(32)

Print Chr(144) ; Chr(162) ; Chr(161) ; " " ; Chr(244) ; Chr(145) ; Chr(247) ; _
    " " ; Chr(249) ; Chr(147)

Print "www.AVR64.com"

Call Font_bold(0)
Call Font_x2(0)

Print "CSN-A2 Printer & BASCOM-AVR"
Print Chr(244) ; Chr(242) ; Chr(168)


'feed paper
Print Chr(10)

End

'_______________________________________________________________________________

Sub Init_printer()
   Local Printsetting As Byte
   'Modify the print speed and heat
   Print Chr(27);
   Print Chr(55);
   Print Chr(7);                                            'Default 64 dots = 8*('7'+1)
   Print Chr(heattime);                                     'Default 80 or 800us
   Print Chr(heatinterval);                                 'Default 2 or 20us
   'Modify the print density and timeout
   Print Chr(18);
   Print Chr(35);
   Shift Printdensity , Left , 4
   Printsetting = Printdensity Or Printbreaktime
   Print Chr(printsetting);                                 'Combination Of Printdensity And Printbreaktime
End Sub
'_______________________________________________________________________________

Sub Align(byval A As String)
   Select Case A
      Case "left":
         Print Chr(27) ; Chr(97) ; Chr(0);
      Case "middle":
         Print Chr(27) ; Chr(97) ; Chr(1);
      Case "right":
         Print Chr(27) ; Chr(97) ; Chr(2);
   End Select
End Sub
'_______________________________________________________________________________

Sub Font_w2_h2_b(byval F As String)
   F = "00" + F + "000"
   Local Tmp As Byte
   Tmp = Binval(f)
   Print Chr(27);
   Print Chr(33);
   Print Chr(tmp);
End Sub
'_______________________________________________________________________________

Sub Font_bold(byval B As Byte)
   Print Chr(27) ; Chr(69) ; Chr(b);
   'Print Chr(27) ; Chr(32) ; Chr(b);
End Sub
'_______________________________________________________________________________

Sub Font_width_x2(byval W As Byte)
   If W = 1 Then
      Print Chr(27) ; Chr(14);
   Else
      Print Chr(27) ; Chr(20);
   End If
End Sub
'_______________________________________________________________________________

Sub Font_x2(byval F As Byte)
   If F = 1 Then
      'Print Chr(29) ; Chr(33) ; Chr(119);                   'MAX= 0111-0111 [W-H]
      Print Chr(29) ; Chr(33) ; Chr(17);                    '0001-0001 [W-H]
   Else
      Print Chr(29) ; Chr(33) ; Chr(0);
   End If
End Sub
'_______________________________________________________________________________

Sub Font_reverse(byval R As Byte)
    Print Chr(29) ; Chr(66) ; Chr(r);
End Sub
'_______________________________________________________________________________

Sub Font_updown(byval U As Byte)
   Print Chr(27) ; Chr(123) ; Chr(u);
End Sub
'_______________________________________________________________________________

Sub Font_underline(byval U As Byte)
   Print Chr(27) ; Chr(45) ; Chr(u);
End Sub
'_______________________________________________________________________________

Sub Line_spacing(byval L As Byte)
   Print Chr(27) ; Chr(51) ; Chr(l);
End Sub