📄 osdbasic.lst
字号:
252 2 WriteTW88( 0x94, 0x0C ); //0000 1100 ROM Font select with same attribute
253 2 Puts("\r\nIf you'd like to exit, press any Key....");
254 2 while ( !RS_ready() ){
255 3 WriteTW88( 0x94, 0x0C ); //0000 1100 ROM Font select with same attribute
256 3 WriteTW88( 0x96, 0 ); // set start position of RAM
257 3 WriteTW88( 0x98, 0x47 ); // different color with upper
258 3 i = 0;
259 3 do {
260 4 WriteTW88( 0x97, i++ );
261 4 WriteTW88( 0x97, i++ );
262 4 WriteTW88( 0x97, i++ );
263 4 WriteTW88( 0x97, i++ );
264 4 WriteTW88( 0x97, i++ );
265 4 WriteTW88( 0x97, i++ );
266 4 WriteTW88( 0x97, i++ );
267 4 WriteTW88( 0x97, i++ );
268 4 } while ( i != 0 );
269 3 }
270 2 }
271 1 WriteTW88( 0x9f, 0x17 ); // enable Window #2
272 1 WriteTW88( 0x9c, 0x0f); // turn ON
273 1 }
274 void DisplayRAMFont(BYTE scode)
275 {
276 1 BYTE i, j;
277 1
278 1 WriteTW88( 0x94, 0x02 ); // clear OSD RAM clear
279 1 WriteTW88( 0x9e, 1 ); // window #1
280 1 for ( i=0; i<(sizeof(FontTestWindow)/2); i++ )
281 1 WriteTW88(FontTestWindow[i*2], FontTestWindow[i*2+1]);
282 1 if ( scode == 0 ) {
283 2 WriteTW88( 0x94, 0x80 ); //0000 1101 RAM Font select with same attribute
284 2 for ( i=0; i<0xfe; i++ ) {
285 3 WriteTW88( 0x96, i );
286 3 WriteTW88( 0x97, i );
287 3 WriteTW88( 0x98, 0x97 );
288 3 }
289 2 }
290 1 else if ( scode == 1 ) {
291 2 Puts("\r\nIf you'd like to exit, press any Key....");
292 2 j = 0;
293 2 while ( !RS_ready() ){
294 3 WriteTW88( 0x94, 0x8C ); //0000 1101 RAM Font select with same attribute
295 3 WriteTW88( 0x96, 0 ); // set start position of RAM
296 3 WriteTW88( 0x98, 0x47 ); // different color with upper
297 3 i = 0;
298 3 do {
299 4 WriteTW88( 0x97, i++ );
300 4 WriteTW88( 0x97, i++ );
301 4 WriteTW88( 0x97, i++ );
302 4 WriteTW88( 0x97, i++ );
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 6
303 4 WriteTW88( 0x97, i++ );
304 4 WriteTW88( 0x97, i++ );
305 4 WriteTW88( 0x97, i++ );
306 4 WriteTW88( 0x97, i++ );
307 4 } while ( i != 0 );
308 3 }
309 2 }
310 1 else {
311 2 DownloadUDFont();
312 2 }
313 1 WriteTW88( 0x9f, 0x17 ); // enable Window #2
314 1 WriteTW88( 0x9c, 0x0f); // turn ON
315 1 }
316
317
318 //*****************************************************************************
319 //
320 // Functions for only CC.
321 //
322 //*****************************************************************************
323 //ljy052903: Only In CC
324
325 //*****************************************************************************
326
327 // Move to CC by Harry
328
329 //===============================================================================
330 // Used OSD Menu
331 //===============================================================================
332 //------------------------------------------------------------
333 void WriteStringToAddr(WORD addr, BYTE *str, BYTE cnt)
334 {
335 1 //if( I2CAutoIncFlagOn==0 )
336 1 WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable, ROMFONT Start Enable
337 1
338 1 WriteTW88(TW88_OSDRAMADDRLO, addr);
339 1 WriteI2Cn( TW88I2CAddress, TW88_OSDRAMDATAHI, str, cnt );
340 1
341 1 // if( I2CAutoIncFlagOn==0 )
342 1 WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
343 1 }
344 #ifdef PAL_TV
345 void DrawAttrString(WORD addr, BYTE *Str, BYTE cnt)
346 {
347 1 // if( I2CAutoIncFlagOn==0 )
348 1 WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
349 1 WriteTW88(TW88_OSDRAMADDRLO, addr);
350 1 WriteI2Cn( TW88I2CAddress, TW88_OSDRAMDATALO, Str, cnt ); // Attr
351 1
352 1 // if( I2CAutoIncFlagOn==0 )
353 1 WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
354 1 }
355 #endif
356 void DrawAttrCnt(WORD addr, BYTE color, BYTE cnt)
357 {
358 1 WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
359 1 WriteTW88(TW88_OSDRAMADDRLO, addr);
360 1 WriteI2CnD( TW88I2CAddress, TW88_OSDRAMDATALO, color, cnt );
361 1
362 1 WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
363 1 }
364
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 7
365 void ClearDataCnt(WORD addr, BYTE cnt)
366 {
367 1 // if( I2CAutoIncFlagOn==0 )
368 1 WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
369 1 WriteTW88(TW88_OSDRAMADDRLO, addr);
370 1 WriteI2CnD( TW88I2CAddress, TW88_OSDRAMDATAHI, ' ', cnt );
371 1
372 1 // if( I2CAutoIncFlagOn==0 )
373 1 WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
374 1 }
375 //*****************************************************************************
376 //
377 // Conversion Functions.
378 //
379 //*****************************************************************************
380 BYTE utoa(WORD value, BYTE *str, BYTE radix)
381 {
382 1 BYTE cnt, *str1;
383 1 WORD i, div;
384 1
385 1 #ifdef DEBUG_OSD
dPrintf("\r\n++(utoa):0x%x__", value);
#endif
388 1
389 1 str1 = str;
390 1 cnt=0;
391 1 if( radix==10) {
392 2 for(div = 10000; div>=10; div/=10) {
393 3 i = value/div;
394 3 if( i ) {
395 4 *str++ = i+'0';
396 4 cnt++;
397 4 }
398 3 else if( cnt ) // 100, 200, 20,,,,
399 3 *str++ = '0';
400 3
401 3 value%=div;
402 3 }
403 2 *str++ = value+'0';
404 2 *str = 0;
405 2 }
406 1 else if( radix==16) {
407 2 for(div = 0x1000; div>=0x10; div/=0x10) {
408 3 i = value/div;
409 3 if( i ) {
410 4 if( i>=0xa )
411 4 *str++ = i-0xa+'A';
412 4 else
413 4 *str++ = i+'0';
414 4 value%=div;
415 4 }
416 3 }
417 2 if( value>=0xa )
418 2 *str++ = value-0xa+'A';
419 2 else
420 2 *str++ = value+'0';
421 2 *str = 0;
422 2 }
423 1 return 1;
424 1 }
425
426 BYTE ltoa_K(long value, BYTE *str, BYTE i_part)
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 8
427 {
428 1 BYTE j;
429 1 long divider;
430 1
431 1 #ifdef DEBUG_OSD
dPrintf("\r\n++(ltoa_K):%ld__", value);
#endif
434 1
435 1 j=0;
436 1 for( divider = 100000000L; divider >= 1000; divider /=10) {
437 2 if( ( value/ divider ) || j ) {
438 3 *str++ = value/divider + '0';
439 3 j++;
440 3 }
441 2 value %= divider;
442 2 }
443 1 *str++ = '.';
444 1 j++;
445 1 for( ; divider >= 10; divider /=10) {
446 2 if( value/ divider || j) {
447 3 *str++ = value/divider + '0';
448 3 j++;
449 3 i_part--;
450 3 }
451 2 if( i_part==0 ) {
452 3 *str = 0;
453 3 return j;
454 3 }
455 2
456 2 value %= divider;
457 2 }
458 1 if( value ) {
459 2 *str++ = value + '0';
460 2 j++;
461 2 }
462 1 *str = 0;
463 1 return j;
464 1 }
465
466 BYTE strlen( BYTE *str )
467 {
468 1 BYTE i=0;
469 1
470 1 while( *str++ ) i++;
471 1 return i;
472 1 }
473 //=============================================================================
474 // Init Menu Window Data initialize
475 //=============================================================================
476 #include "OsdInitTable.c"
477
478 void InitOSDWindow(BYTE *ptr)
479 {
480 1 BYTE i, page;
481 1
482 1 page = ReadTW88(0xff);
483 1 WriteTW88( 0xff, (page&0xfe));
484 1 WriteTW88(0xe0, ReadTW88(0xe0) & 0xef);
485 1
486 1 i = 0;
487 1 while(ptr[i]) {
488 2 WriteI2Cn_(TW88I2CAddress, &ptr[i+1], ptr[i]);
C51 COMPILER V7.50 OSDBASIC 04/01/2008 15:02:22 PAGE 9
489 2 WriteI2Cn_(TW88I2CAddress, &ptr[i+1], 5); // To set position LSB...
490 2
491 2 i += ptr[i] + 1;
492 2 };
493 1
494 1 WriteTW88(0xe0, ReadTW88(0xe0) | 0x10);
495 1 WriteTW88( 0xff, page );
496 1 }
497
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1922 ----
CONSTANT SIZE = 310 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 52
DATA SIZE = 8 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -