Subversion Repositories pentevo

Rev

Rev 601 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
601 ddp 1
#include "_global.h"
2
#include "_uart.h"
3
#include "_screen.h"
4
 
5
//-----------------------------------------------------------------------------
6
 
7
void put_char(u8 ch)
8
{
9
 if (flags1&ENABLE_DIRECTUART) directuart_putchar(ch);
10
 if (flags1&ENABLE_UART) uart_putchar(ch);
11
 if (flags1&ENABLE_SCR) scr_putchar(ch);
12
}
13
 
14
//-----------------------------------------------------------------------------
15
 
16
void print_hexhalf(u8 b)
17
{
18
 b&=0x0f;
19
 if (b>9) b+=7;
20
 b+=0x30;
21
 put_char(b);
22
}
23
 
24
//-----------------------------------------------------------------------------
25
 
26
void print_hexbyte(u8 b)
27
{
28
 print_hexhalf(b>>4);
29
 print_hexhalf(b);
30
}
31
 
32
//-----------------------------------------------------------------------------
33
 
34
void print_hexbyte_for_dump(u8 b)
35
{
36
 print_hexbyte(b);
37
 put_char(0x20);
38
}
39
 
40
//-----------------------------------------------------------------------------
41
 
42
void print_hexlong(u32 l)
43
{
44
 print_hexbyte((u8)(l>>24));
45
 print_hexbyte((u8)(l>>16));
46
 print_hexbyte((u8)(l>>8));
47
 print_hexbyte((u8)l);
48
}
49
 
50
//-----------------------------------------------------------------------------
51
 
52
void put_char_for_dump(u8 ch)
53
{
54
 if (ch<0x20) put_char('.'); else put_char(ch);
55
}
56
 
57
//-----------------------------------------------------------------------------
58
 
59
void print_dec99(u8 b)
60
{
61
 asm volatile("\tsubi %0,208\n"\
62
              "\tsbrs %0,7\n"\
63
              "\tsubi %0,48\n"\
64
              "\tsubi %0,232\n"\
65
              "\tsbrs %0,6\n"\
66
              "\tsubi %0,24\n"\
67
              "\tsubi %0,244\n"\
68
              "\tsbrs %0,5\n"\
69
              "\tsubi %0,12\n"\
70
              "\tsubi %0,250\n"\
71
              "\tsbrs %0,4\n"\
72
              "\tsubi %0,6\n"\
73
              :"=d"(b):"d"(b) );
74
 print_hexbyte(b);
75
}
76
 
77
//-----------------------------------------------------------------------------
78
 
79
const u16 decwtab[4] PROGMEM = {10000,1000,100,10};
80
 
81
void print_dec16(u16 w)
82
{
83
 u8 i, f;
84
 i=0; f=0;
85
 do
86
 {
87
  u16 k;
88
  k=pgm_read_word(&decwtab[i]);
89
  u8 x;
90
  x=0;
91
  while (w>=k)
92
  {
93
   w-=k;
94
   x++;
95
  }
96
  if ( (x==0) && (f==0) )
97
   put_char(' ');
98
  else
99
  {
100
   f=1;
101
   x|=0x30;
102
   put_char(x);
103
  }
104
  i++;
105
 }while (i<4);
106
 i=(u8)w;
107
 i|=0x30;
108
 put_char(i);
109
}
110
 
111
//-----------------------------------------------------------------------------
112
 
624 ddp 113
void print_msg(const u8 *msg)
601 ddp 114
{
115
 u8 ch;
116
 do
117
 {
118
  ch=pgm_read_byte(msg);
119
  msg++;
120
  if (ch) put_char(ch);
121
 }while (ch);
122
}
123
 
124
//-----------------------------------------------------------------------------
125
 
624 ddp 126
void print_mlmsg(const u8 * const *mlmsg)
601 ddp 127
{
624 ddp 128
 print_msg((const u8 *)pgm_read_word(mlmsg+lang));
601 ddp 129
}
130
 
131
//-----------------------------------------------------------------------------
132
 
133
void print_short_vers(void)
134
{
135
 u16 vers;
136
 vers=pgm_read_word_far(0x1dffc);
137
 u8 day;
138
 day=vers&0x1f;
139
 if (day)
140
 {
141
  u8 month, year;
142
  month=(vers>>5)&0x0f;
143
  year=(vers>>9)&0x3f;
144
  if ( (month) && (month<13) && (year>10) )
145
  {
146
   put_char('(');
147
   print_dec99(year);
148
   print_dec99(month);
149
   print_dec99(day);
150
   put_char(')');
151
  }
152
 }
153
}
154
 
155
//-----------------------------------------------------------------------------