* Removed svn:executable property from non-executable files
[fw/sdcc] / device / examples / xa51 / hwinit.c
1 #include "hw.h"
2
3 bit b3;
4 code c2=1;
5 data d3, d4=4;
6 xdata x3, x4=5;
7
8 #define DIVIDER (OSC/(64L*BAUD_RATE))
9
10 void external_startup(void) {
11   _asm
12     mov.b       _WDCON,#0       ;shut down the watchdog
13     mov.b       _WFEED1,#0a5h
14     mov.b       _WFEED2,#05ah
15 ;   mov.b       _BCR,#1 ;BCR: 8 data, 16 address
16 ;   mov.b       _SCR,#1 ;SCR: page zero mode
17   _endasm;
18
19   // init serial io
20   TL1 = RTL1 = -DIVIDER;
21   TH1 = RTH1 = -DIVIDER >> 8;
22   TR1 = 1;              /* enable timer 1 */
23   
24   S0CON = 0x52;         /* mode 1, receiver enable */
25   IPA4 |= 0x6;          /* maximum priority */
26   ERI0=1;               /* enable receiver interupts */
27   TI0==1;               /* transmitter empty */
28   RI0=0;                /* receiver empty */
29   
30   //PSWH &= 0xf0;       /* start interupt system */
31 }
32
33 #define SIMULATOR 1
34
35 #ifdef SIMULATOR
36
37 void putchar(char c) {
38   c; // hush the compiler
39   _asm
40     mov.b r0l, [r7+2]
41     trap #0EH;
42   _endasm;
43 }
44
45 char getchar() {
46   return 0;
47 }
48
49 void exit_simulator(void) {
50   _asm
51     trap #0FH;
52   _endasm;
53 }
54
55 #else
56
57 void putchar(char c) {
58   while(!TI0) 
59     ;
60   S0BUF = c;
61   TI0 = 0;
62 }
63
64 char getchar(void) {
65   char  c;
66   
67   while (!RI0) 
68     ;
69   c=S0BUF;
70   RI0=0;
71   return c;
72 }
73
74 int kbhit(void) {
75   return RI0;
76 }
77
78 #endif
79
80 int puts(char *string) {
81   int chars=0;
82   while (*string) {
83     putchar (*string++);
84     chars++;
85   }
86   putchar ('\n');
87   return chars+1;
88 }