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