7 #include <native/task.h>
8 #include <native/timer.h>
9 #include <native/intr.h>
15 #define BANNERWIDTH 10000
18 RT_TASK intrtask
, drawtask
;
22 unsigned char data
[BANNERWIDTH
];
24 unsigned int pointer
= 0;
27 void add_tick(RTIME
*t
, RTIME tnew
)
31 for(i
=TICKS
-1; i
>0; i
--){
36 t
[TICKS
] = (t
[TICKS
]+t
[0])/TICKS
;
41 RTIME time
= *(RTIME
*)arg
;
42 RTIME step
= time
/(2*MAXX
+2);
47 rt_task_sleep(step
*2);
48 for(i
=0; i
<MAXX
; i
++){
49 outb(data
[i
+pointer
], 0x378);
56 pointer
= pointer
> msglen
? 0 : pointer
+1;
61 //Register as interrupt handler
63 rt_intr_create(&intr
, NULL
, LPT1IRQ
, 0);
64 rt_printf("Interrupt created\n");
66 //Initialize and declare the timer variables
67 RTIME tick
= rt_timer_read();
71 tock
= rt_timer_read();
72 add_tick(ticks
, tock
-tick
);
74 // Tocks waiting period
75 if(tocks
[TICKS
] < ticks
[TICKS
]){
76 // sleep until the arm is most left
77 rt_task_sleep(tocks
[TICKS
]/2);
78 rt_task_create(&drawtask
, NULL
, 0, 50, 0);
79 period
= ticks
[TICKS
]+tocks
[TICKS
];
80 rt_task_start(&drawtask
, &taskd
, &period
);
81 rt_printf("tocks is the short stretch\n");
83 rt_intr_wait(&intr
, TM_INFINITE
);
86 tick
= rt_timer_read();
87 add_tick(tocks
, tick
-tock
);
89 if(ticks
[TICKS
] < tocks
[TICKS
]){
90 // sleep until the arm is most left
91 rt_task_sleep(ticks
[TICKS
]/2);
92 rt_task_create(&drawtask
, NULL
, 0, 50, 0);
93 period
= ticks
[TICKS
]+tocks
[TICKS
];
94 rt_task_start(&drawtask
, &taskd
, &period
);
95 rt_printf("ticks is the short stretch\n");
97 rt_intr_wait(&intr
, TM_INFINITE
);
99 //rt_printf("avgtick: %lluns, avgtock: %lluns, avgticktock: %lluns\n",
100 // ticks[TICKS], tocks[TICKS], (ticks[TICKS]+tocks[TICKS])/2);
104 int main(int argc
, char* argv
[])
107 printf("Usage: %s \"Message\"\n", argv
[0]);
111 rt_print_auto_init(1);
112 mlockall(MCL_CURRENT
| MCL_FUTURE
);
115 for(i
=0; i
<BANNERWIDTH
; i
++){
121 while(i
<BANNERWIDTH
&& s
< strlen(message
)){
123 printf("processing: '%c'\n", c
);
127 data
[i
++] = 0x1e; data
[i
++] = 0x5; data
[i
++] = 0x1e; break;
130 data
[i
++] = 0x1f; data
[i
++] = 0x15; data
[i
++] = 0xe; break;
133 data
[i
++] = 0xe; data
[i
++] = 0x11; break;
136 data
[i
++] = 0x1f; data
[i
++] = 0x11; data
[i
++] = 0xe; break;
139 data
[i
++] = 0x1f; data
[i
++] = 0x15; break;
142 data
[i
++] = 0x1f; data
[i
++] = 0x05; break;
145 data
[i
++] = 0xe; data
[i
++] = 0x11, data
[i
++] = 0x1d; break;
148 data
[i
++] = 0x1f; data
[i
++] = 0x4, data
[i
++] = 0x1f; break;
151 data
[i
++] = 0x1f; break;
154 data
[i
++] = 0x10; data
[i
++] = 0x1f; break;
157 data
[i
++] = 0x1f; data
[i
++] = 0x04; data
[i
++] = 0x1b; break;
160 data
[i
++] = 0x1f; data
[i
++] = 0x10; break;
163 data
[i
++] = 0x1f; data
[i
++] = 0x2; data
[i
++] = 0x7; data
[i
++] = 0x2; data
[i
++] = 0x1f; break;
166 data
[i
++] = 0x1f; data
[i
++] = 0x2; data
[i
++] = 0x4; data
[i
++] = 0x1f; break;
169 data
[i
++] = 0xe; data
[i
++] = 0x11; data
[i
++] = 0xe; break;
172 data
[i
++] = 0x1f; data
[i
++] = 0x5; data
[i
++] = 0x2; break;
175 data
[i
++] = 0xe; data
[i
++] = 0x11; data
[i
++] = 0x19; data
[i
++] = 0x1e; break;
178 data
[i
++] = 0x1f; data
[i
++] = 0x5; data
[i
++] = 0x1a; break;
181 data
[i
++] = 0x12; data
[i
++] = 0x15; data
[i
++] = 0xd; break;
184 data
[i
++] = 0x1; data
[i
++] = 0x1f; data
[i
++] = 0x1; break;
187 data
[i
++] = 0x1f; data
[i
++] = 0x10; data
[i
++] = 0x1f; break;
190 data
[i
++] = 0xf; data
[i
++] = 0x10; data
[i
++] = 0xf; break;
193 data
[i
++] = 0xf; data
[i
++] = 0x10; data
[i
++] = 0xc; data
[i
++] = 0x10; data
[i
++] = 0xf; break;
196 data
[i
++] = 0x11; data
[i
++] = 0xe; data
[i
++] = 0x11; break;
199 data
[i
++] = 0x17; data
[i
++] = 0x14; data
[i
++] = 0xf; break;
202 data
[i
++] = 0x19; data
[i
++] = 0x15; data
[i
++] = 0x13; break;
204 data
[i
++] = 0x10; break;
206 data
[i
++] = 0x10; data
[i
++] = 0x8; break;
209 data
[i
++] = 0x1; break;
214 data
[i
++] = 0x17; break;
223 // Get permission to write to parallel port
226 outb(inb(0x37A) | 0x10, 0x37A);
228 rt_task_create(&intrtask
, NULL
, 0, 50, 0);
229 rt_task_start(&intrtask
, &taski
, 0);