work in progress
[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 #define getchar(x)
46
47 void exit_simulator(void) {
48   _asm
49     trap #0FH;
50   _endasm;
51 }
52
53 #else
54
55 void putchar(char c) {
56   while(!TI0) 
57     ;
58   S0BUF = c;
59   TI0 = 0;
60 }
61
62 char getchar(void) {
63   char  c;
64   
65   while (!RI0) 
66     ;
67   c=S0BUF;
68   RI0=0;
69   return c;
70 }
71
72 int kbhit(void) {
73   return RI0;
74 }
75
76 #endif
77
78 int puts(char *string) {
79   int chars=0;
80   while (*string) {
81     putchar (*string);
82     chars++;
83   }
84   putchar ('\n');
85   return chars+1;
86 }