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 | //----------------------------------------------------------------------------- |