Subversion Repositories pentevo

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. #include "_global.h"
  2. #include "_screen.h"
  3. #include "_ps2k.h"
  4. //  5                                   1
  5. //┌─────────────────────────────────────────────┐
  6. //│                                             │
  7. //│ e   1 2 3 4 5 6 7 8 9 0 1 2  p s p  . . .   │07
  8. //│                                             │
  9. //│ ` 1 2 3 4 5 6 7 8 9 0 - = <  i h u  n / * - │
  10. //│ t Q W E R T Y U I O P [ ] \  d e d  7 8 9   │
  11. //│ c A S D F G H J K L ; '   e         4 5 6 + │
  12. //│ s Z X C V B N M , . /     s        1 2 3   │
  13. //│ c w a       s       a w m c  <  >  0   . e │
  14. //│                                             │
  15. //│─────────────────────────────────────────────│
  16. //│ Raw data:                                   │16
  17. //│  00 00 00 00 00 00 00 00 00 00 00 00 00 00  │17
  18. //│                                             │
  19. //│ Трёхкратное нажатие <ESC> - выход из теста  │19
  20. //└─────────────────────────────────────────────┘
  21. //
  22. //-----------------------------------------------------------------------------
  23.  
  24. const WIND_DESC wind_t_ps2k PROGMEM = { 3,5,47,16,0xdf,0x01 };
  25.  
  26. const u8 tpsk_tab[] PROGMEM = {
  27.  0        , 0        ,    // 0x00
  28.  (11<<3)|0, 0        ,    // 0x01
  29.  0        , 0        ,    // 0x02
  30.  ( 7<<3)|0, 0        ,    // 0x03
  31.  ( 5<<3)|0, 0        ,    // 0x04
  32.  ( 3<<3)|0, 0        ,    // 0x05
  33.  ( 4<<3)|0, 0        ,    // 0x06
  34.  (14<<3)|0, 0        ,    // 0x07
  35.  0        , 0        ,    // 0x08
  36.  (12<<3)|0, 0        ,    // 0x09
  37.  (10<<3)|0, 0        ,    // 0x0a
  38.  ( 8<<3)|0, 0        ,    // 0x0b
  39.  ( 6<<3)|0, 0        ,    // 0x0c
  40.  ( 1<<3)|2, 0        ,    // 0x0d
  41.  ( 1<<3)|1, 0        ,    // 0x0e
  42.  0        , 0        ,    // 0x0f
  43.  0        , 0        ,    // 0x10
  44.  ( 3<<3)|5, (11<<3)|5,    // 0x11
  45.  ( 1<<3)|4, 0        ,    // 0x12
  46.  0        , 0        ,    // 0x13
  47.  ( 1<<3)|5, (14<<3)|5,    // 0x14
  48.  ( 2<<3)|2, 0        ,    // 0x15
  49.  ( 2<<3)|1, 0        ,    // 0x16
  50.  0        , 0        ,    // 0x17
  51.  0        , 0        ,    // 0x18
  52.  0        , 0        ,    // 0x19
  53.  ( 2<<3)|4, 0        ,    // 0x1a
  54.  ( 3<<3)|3, 0        ,    // 0x1b
  55.  ( 2<<3)|3, 0        ,    // 0x1c
  56.  ( 3<<3)|2, 0        ,    // 0x1d
  57.  ( 3<<3)|1, 0        ,    // 0x1e
  58.  0        , ( 2<<3)|5,    // 0x1f
  59.  0        , 0        ,    // 0x20
  60.  ( 4<<3)|4, 0        ,    // 0x21
  61.  ( 3<<3)|4, 0        ,    // 0x22
  62.  ( 4<<3)|3, 0        ,    // 0x23
  63.  ( 4<<3)|2, 0        ,    // 0x24
  64.  ( 5<<3)|1, 0        ,    // 0x25
  65.  ( 4<<3)|1, 0        ,    // 0x26
  66.  0        , (12<<3)|5,    // 0x27
  67.  0        , 0        ,    // 0x28
  68.  ( 7<<3)|5, 0        ,    // 0x29
  69.  ( 5<<3)|4, 0        ,    // 0x2a
  70.  ( 5<<3)|3, 0        ,    // 0x2b
  71.  ( 6<<3)|2, 0        ,    // 0x2c
  72.  ( 5<<3)|2, 0        ,    // 0x2d
  73.  ( 6<<3)|1, 0        ,    // 0x2e
  74.  0        , (13<<3)|5,    // 0x2f
  75.  0        , 0        ,    // 0x30
  76.  ( 7<<3)|4, 0        ,    // 0x31
  77.  ( 6<<3)|4, 0        ,    // 0x32
  78.  ( 7<<3)|3, 0        ,    // 0x33
  79.  ( 6<<3)|3, 0        ,    // 0x34
  80.  ( 7<<3)|2, 0        ,    // 0x35
  81.  ( 7<<3)|1, 0        ,    // 0x36
  82.  0        , 0        ,    // 0x37
  83.  0        , 0        ,    // 0x38
  84.  0        , 0        ,    // 0x39
  85.  ( 8<<3)|4, 0        ,    // 0x3a
  86.  ( 8<<3)|3, 0        ,    // 0x3b
  87.  ( 8<<3)|2, 0        ,    // 0x3c
  88.  ( 8<<3)|1, 0        ,    // 0x3d
  89.  ( 9<<3)|1, 0        ,    // 0x3e
  90.  0        , 0        ,    // 0x3f
  91.  0        , 0        ,    // 0x40
  92.  ( 9<<3)|4, 0        ,    // 0x41
  93.  ( 9<<3)|3, 0        ,    // 0x42
  94.  ( 9<<3)|2, 0        ,    // 0x43
  95.  (10<<3)|2, 0        ,    // 0x44
  96.  (11<<3)|1, 0        ,    // 0x45
  97.  (10<<3)|1, 0        ,    // 0x46
  98.  0        , 0        ,    // 0x47
  99.  0        , 0        ,    // 0x48
  100.  (10<<3)|4, 0        ,    // 0x49
  101.  (11<<3)|4, (19<<3)|1,    // 0x4a
  102.  (10<<3)|3, 0        ,    // 0x4b
  103.  (11<<3)|3, 0        ,    // 0x4c
  104.  (11<<3)|2, 0        ,    // 0x4d
  105.  (12<<3)|1, 0        ,    // 0x4e
  106.  0        , 0        ,    // 0x4f
  107.  0        , 0        ,    // 0x50
  108.  0        , 0        ,    // 0x51
  109.  (12<<3)|3, 0        ,    // 0x52
  110.  0        , 0        ,    // 0x53
  111.  (12<<3)|2, 0        ,    // 0x54
  112.  (13<<3)|1, 0        ,    // 0x55
  113.  0        , 0        ,    // 0x56
  114.  0        , 0        ,    // 0x57
  115.  ( 1<<3)|3, 0        ,    // 0x58
  116.  (14<<3)|4, 0        ,    // 0x59
  117.  (14<<3)|3, (21<<3)|5,    // 0x5a
  118.  (13<<3)|2, 0        ,    // 0x5b
  119.  0        , 0        ,    // 0x5c
  120.  (14<<3)|2, 0        ,    // 0x5d
  121.  0        , 0        ,    // 0x5e
  122.  0        , 0        ,    // 0x5f
  123.  0        , 0        ,    // 0x60
  124.  0        , 0        ,    // 0x61
  125.  0        , 0        ,    // 0x62
  126.  0        , 0        ,    // 0x63
  127.  0        , 0        ,    // 0x64
  128.  0        , 0        ,    // 0x65
  129.  (14<<3)|1, 0        ,    // 0x66
  130.  0        , 0        ,    // 0x67
  131.  0        , 0        ,    // 0x68
  132.  (18<<3)|4, (16<<3)|2,    // 0x69
  133.  0        , 0        ,    // 0x6a
  134.  (18<<3)|3, (15<<3)|5,    // 0x6b
  135.  (18<<3)|2, (16<<3)|1,    // 0x6c
  136.  0        , 0        ,    // 0x6d
  137.  0        , 0        ,    // 0x6e
  138.  0        , 0        ,    // 0x6f
  139.  (18<<3)|5, (15<<3)|1,    // 0x70
  140.  (20<<3)|5, (15<<3)|2,    // 0x71
  141.  (19<<3)|4, (16<<3)|5,    // 0x72
  142.  (19<<3)|3, 0        ,    // 0x73
  143.  (20<<3)|3, (17<<3)|5,    // 0x74
  144.  (19<<3)|2, (16<<3)|4,    // 0x75
  145.  ( 1<<3)|0, 0        ,    // 0x76
  146.  (18<<3)|1, 0        ,    // 0x77
  147.  (13<<3)|0, 0        ,    // 0x78
  148.  (21<<3)|3, 0        ,    // 0x79
  149.  (20<<3)|4, (17<<3)|2,    // 0x7a
  150.  (21<<3)|1, 0        ,    // 0x7b
  151.  (20<<3)|1, (15<<3)|0,    // 0x7c
  152.  (20<<3)|2, (17<<3)|1,    // 0x7d
  153.  (16<<3)|0, (17<<3)|0,    // 0x7e
  154.  0        , 0        };   // 0x7f
  155.  
  156. //-----------------------------------------------------------------------------
  157.  
  158. u8 tps2k_dump(u8 ptr, u8 data)
  159. {
  160.  ps2k_raw_ready=0;
  161.  megabuffer[ptr]=data;
  162.  ptr=(ptr+1)&0x0f;
  163.  flags1&=0b11111100;
  164.  scr_set_cursor(5,17);
  165.  u8 p, cnt;
  166.  p=(ptr+1)&0x0f;
  167.  cnt=14;
  168.  do
  169.  {
  170.   p=(p+1)&0x0f;
  171.   u8 code, attr;
  172.   code=megabuffer[p];
  173.   if ( (code==0xe0) || (code==0xe1) )
  174.    attr=0x0e;
  175.   else if (code==0xf0)
  176.    attr=0x0d;
  177.   else if (code==0xed)
  178.    attr=0x0b;
  179.   else if (code>=0x85)
  180.    attr=0x0a;
  181.   else
  182.    attr=0x0f;
  183.   scr_set_attr(attr);
  184.   scr_putchar(0x20);
  185.  
  186.   if (--cnt)
  187.    print_hexbyte(code);
  188.   else
  189.   {
  190.    flags1|=0b00000010;
  191.    print_hexbyte(code);
  192.    put_char(0x20);
  193.   }
  194.  }while (cnt);
  195.  return ptr;
  196. }
  197.  
  198. //-----------------------------------------------------------------------------
  199.  
  200. void Test_PS2Keyb(void)
  201. {
  202.  scr_window(&wind_t_ps2k);
  203.  scr_print_mlmsg(mlmsg_tps2k0);
  204.  scr_print_msg(msg_tps2k1);
  205.  scr_fill_char(0xc4,45);                        // '─'
  206.  u8 ptr;
  207.  for (ptr=0;ptr<16;ptr++) megabuffer[ptr]=0;
  208.  ps2k_raw_ready=0;
  209.  u8 leds, esccnt, go2;
  210.  leds=0x80;
  211.  ptr=0;
  212.  esccnt=0;
  213.  
  214.  do
  215.  {
  216.   go2=GO_REPEAT;
  217.  
  218.   if (ps2k_raw_ready) ptr=tps2k_dump(ptr,ps2k_raw_code);
  219.  
  220.   if (leds&0x80)
  221.   {
  222.    leds&=0x07;
  223.    ptr=tps2k_dump(ptr,0xed);
  224.    if (ps2k_send_byte(0xed))
  225.    {
  226.     u8 answ;
  227.     if (ps2k_receive_byte(&answ))
  228.     {
  229.      ptr=tps2k_dump(ptr,answ);
  230.      if (answ==0xfa)
  231.      {
  232.       ptr=tps2k_dump(ptr,leds);
  233.       if (ps2k_send_byte(leds))
  234.       {
  235.        if (ps2k_receive_byte(&answ))
  236.        {
  237.         ptr=tps2k_dump(ptr,answ);
  238.         if (answ==0xfa)
  239.         {
  240.          scr_set_cursor(41,7);
  241.          u8 attr;
  242.          if (leds&0x02) attr=0xdc; else attr=0xd0;
  243.          scr_fill_attr(attr,2);
  244.          if (leds&0x04) attr=0xdc; else attr=0xd0;
  245.          scr_fill_attr(attr,2);
  246.          if (leds&0x01) attr=0xdc; else attr=0xd0;
  247.          scr_fill_attr(attr,2);
  248.         }
  249.        }
  250.       }
  251.      }
  252.     }
  253.    }
  254.   }
  255.  
  256.   u16 kcf;
  257.   kcf=ps2k_key_flags_and_code;
  258.   u8 keycode, keyflags;
  259.   keycode=(u8)(kcf>>8);
  260.   keyflags=(u8)kcf;
  261.  
  262.   if (keyflags&(1<<PS2K_BIT_READY))
  263.   {
  264.    *(u8*)&ps2k_key_flags_and_code=0;
  265.    if (keyflags&(1<<PS2K_BIT_RELEASE))
  266.    {
  267.     if (keyflags&(1<<PS2K_BIT_EXTKEY))
  268.      esccnt=0;
  269.     else
  270.     {
  271.      if (keycode!=KEY_ESC)
  272.       esccnt=0;
  273.      else
  274.      {
  275.       if (++esccnt>2) go2=GO_EXIT;
  276.      }
  277.     }
  278.    }
  279.  
  280.    if (go2==GO_REPEAT)
  281.    {
  282.     if (!(keyflags & ((1<<PS2K_BIT_EXTKEY)|(1<<PS2K_BIT_RELEASE)) ) )
  283.     {
  284.      if (keycode==KEY_SCROLLLOCK) leds=(leds^0x01)|0x80;
  285.      if (keycode==KEY_NUMLOCK)    leds=(leds^0x02)|0x80;
  286.      if (keycode==KEY_CAPSLOCK)   leds=(leds^0x04)|0x80;
  287.     }
  288.  
  289.     u8 temp;
  290.     if ( (keyflags & (1<<PS2K_BIT_RELEASE)) && (keycode==0x83) )
  291.      temp=(9<<3)|0;                             // F7
  292.     else if (keycode==0x84)
  293.      temp=(15<<3)|0;                            // SysReg
  294.     else if (keycode>=0x80)
  295.      temp=0;
  296.     else
  297.     {
  298.      keycode<<=1;
  299.      if (keyflags & (1<<PS2K_BIT_EXTKEY) )  keycode++;
  300.      temp=pgm_read_byte(tpsk_tab+keycode);
  301.     }
  302.  
  303.     if (temp)
  304.     {
  305.      u8 x,y;
  306.      y=temp&0x07;
  307.      if (y) y++;
  308.      x=(temp>>2)&0x3e;
  309.      if (x>=36) x++;
  310.      if (x>=30) x++;
  311.      scr_set_cursor(x+3,y+7);
  312.      u8 attr;
  313.      if (keyflags & (1<<PS2K_BIT_RELEASE) ) attr=0xd1; else attr=0xae;
  314.      scr_fill_attr(attr,1);
  315.     }
  316.    }
  317.   }
  318.  
  319.  }while (go2!=GO_EXIT);
  320.  ps2k_setsysled();
  321. }
  322.  
  323. //-----------------------------------------------------------------------------
  324.