Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #pragma once
  2.  
  3. //=============================================================================
  4. class TKeyboardBuffer                   // thims zxevo_ps/2      NEDOREPO
  5. {
  6.     unsigned char buffer[ 256];
  7.     unsigned char push;
  8.     unsigned char pop;
  9.     bool full;
  10.  
  11. public:
  12.     //-------------------------------------------------------------------------
  13.     TKeyboardBuffer()
  14.     {
  15.         Empty();
  16.     }
  17.     //-------------------------------------------------------------------------
  18.     void Empty()
  19.     {
  20.         push = pop = 0;
  21.         full = false;
  22.     }
  23.     //-------------------------------------------------------------------------
  24.     void Push( unsigned char key)
  25.     {
  26.         if (!full)
  27.         {
  28.             buffer[push++] = key;
  29.             if (push == sizeof( buffer)) push = 0;
  30.             if (push == pop) full = true;
  31.         }        
  32.     }
  33.     //-------------------------------------------------------------------------
  34.     unsigned char Pop()
  35.     {
  36.         if (!full)
  37.         {
  38.             if (push != pop)
  39.             {
  40.                 unsigned char key = buffer[ pop++];
  41.                 //-------------------------------------------------------------
  42.                 if (pop == sizeof( buffer))
  43.                     pop = 0;
  44.                 //-------------------------------------------------------------
  45.                 return key;
  46.             }
  47.             return 0;
  48.         }
  49.         return 0xFF;
  50.     }
  51.     //-------------------------------------------------------------------------
  52. };
  53. //=============================================================================
  54.  
  55.  
  56. //=============================================================================
  57. class TKeyboardBuffer_atm620_xt_keyb                                    // [NS]
  58. {
  59.     // в АТМ620 стоит 537РУ10 на 2К
  60.     //
  61.     // в АТМ610 тожы
  62.     // на выход только d0...d4
  63.     // а на вход заюзано только 8 бит
  64.     // тобешь 256 байт
  65.     // видимо там хранятсо только ZX кнопки
  66.     // и нет буфера для XT клавиатуры
  67.     // а только когда есть сигнал готовности
  68.     // можно достать текущий принятый код
  69.     // точнее даже завершение приема вызывает NMI?
  70.     // по которому идет конвертация
  71.    
  72.     // но тк нам надо ловить много кодов
  73.     // а в унриале кнопки не жмутсо в риалтайме
  74.     // то тута будет такой же буфер как у ps2 клавы
  75.     // и читатсо коды будут из него
  76.     unsigned char buffer[ 256];
  77.     unsigned char push;
  78.     unsigned char pop;
  79.     bool full;
  80.  
  81. public:
  82.     //-------------------------------------------------------------------------
  83.     TKeyboardBuffer_atm620_xt_keyb()
  84.     {
  85.         Empty();
  86.     }
  87.     //-------------------------------------------------------------------------
  88.     void Empty()
  89.     {
  90.         push = pop = 0;
  91.         full = false;
  92.     }
  93.     //-------------------------------------------------------------------------
  94.     void Push(unsigned char key)
  95.     {
  96.         if (!full)
  97.         {
  98.             buffer[push++] = key;
  99.             if (push == sizeof( buffer)) push = 0;
  100.             if (push == pop) full = true;
  101.         }        
  102.     }
  103.     //-------------------------------------------------------------------------
  104.     unsigned char Pop()
  105.     {
  106.         if (!full)
  107.         {
  108.             if (push != pop)
  109.             {
  110.                 unsigned char key = buffer[ pop++];
  111.                 //-------------------------------------------------------------
  112.                 if (pop == sizeof( buffer))
  113.                     pop = 0;
  114.                 //-------------------------------------------------------------
  115.                 return key;
  116.             }
  117.             return 0;
  118.         }
  119.         return 0xFF;
  120.     }
  121.     //-------------------------------------------------------------------------
  122. };
  123. //=============================================================================
  124.  
  125.  
  126.  
  127. //=============================================================================
  128. struct ATM_KBD
  129. {
  130.     //-------------------------------------------------------------------------
  131.     union
  132.     {
  133.         unsigned char zxkeys[ 8];
  134.         unsigned zxdata[ 2];
  135.     };
  136.     //-------------------------------------------------------------------------
  137.     unsigned char mode;
  138.     unsigned char R7;
  139.     unsigned char lastscan;
  140.     unsigned char cmd;
  141.     unsigned char kR1;
  142.     unsigned char kR2;
  143.     unsigned char kR3;
  144.     unsigned char kR4;
  145.     unsigned char kR5;
  146.     //-------------------------------------------------------------------------
  147.     void processzx(unsigned scancode, unsigned char pressed);
  148.     //-------------------------------------------------------------------------
  149.     unsigned char read(unsigned char scan, unsigned char zxdata);
  150.     //-------------------------------------------------------------------------
  151.     void setkey(unsigned scancode, unsigned char pressed);
  152.     //-------------------------------------------------------------------------
  153.     void reset();
  154.     //-------------------------------------------------------------------------
  155.     void clear();
  156.     //-------------------------------------------------------------------------
  157. };
  158. //=============================================================================
  159.  
  160.  
  161. //=============================================================================
  162. struct K_INPUT
  163. {
  164. #pragma pack( push, 1)
  165.     //-------------------------------------------------------------------------
  166.     union
  167.     {
  168.         volatile unsigned char kbd[ 16];
  169.         volatile unsigned kbd_x4[ 4];
  170.     };
  171.     //-------------------------------------------------------------------------
  172.     union
  173.     { // without keymatrix effect
  174.         volatile unsigned char rkbd[ 16];
  175.         volatile unsigned rkbd_x4[ 4];
  176.     };
  177.     //-------------------------------------------------------------------------
  178. #pragma pack( pop)
  179.  
  180.     unsigned lastkey;                  
  181.     unsigned nokb;                      // NEDOREPO
  182.     unsigned nomouse;  
  183.     //-------------------------------------------------------------------------
  184.     enum
  185.     {
  186.         KM_DEFAULT,
  187.         KM_KEYSTICK,
  188.         KM_PASTE_HOLD,
  189.         KM_PASTE_RELEASE
  190.     } keymode;
  191.     //-------------------------------------------------------------------------
  192.     int msx;
  193.     int msy;
  194.     int msx_prev;
  195.     int msy_prev;
  196.     int ay_x0;
  197.     int ay_y0;
  198.     //-------------------------------------------------------------------------
  199.     unsigned ay_reset_t;
  200.     unsigned char mbuttons;
  201.     unsigned char ayR14;
  202.     //-------------------------------------------------------------------------
  203.     volatile unsigned char kjoy;
  204.     unsigned char mousejoy;
  205.     unsigned char kbdled;
  206.     unsigned char mouse_joy_led;
  207.     unsigned char firedelay;    // autofire vars
  208.     unsigned char firestate;    // autofire vars
  209.     volatile u8 fjoy;           // fuller joystick
  210.  
  211.     ATM_KBD atm51;
  212.  
  213.     TKeyboardBuffer buffer;     //NEDOREPO
  214.     bool buffer_enabled;        //NEDOREPO
  215.  
  216.     TKeyboardBuffer_atm620_xt_keyb atm620_xt_keyb_buffer;       // [NS]
  217.     bool atm620_xt_keyb_buffer_enabled;                         //
  218.  
  219.     unsigned stick_delay;
  220.     int prev_wheel;
  221.  
  222.     unsigned char *textbuffer;
  223.     unsigned textoffset;
  224.     unsigned textsize;
  225.    
  226.     unsigned char tdelay;  //0.36.6 from 0.35b2
  227.     unsigned char tdata;
  228.     unsigned char wheel;
  229.     //-------------------------------------------------------------------------
  230.     unsigned char kempston_mx();
  231.     unsigned char kempston_my();
  232.     unsigned char aymouse_rd();
  233.     void aymouse_wr( unsigned char val);
  234.     //-------------------------------------------------------------------------
  235.     void clear_zx();
  236.     inline void press_zx( unsigned char key);
  237.     bool process_pc_layout();
  238.     void make_matrix();
  239.     char readdevices();
  240.     unsigned char read( unsigned char scan);
  241.     u8 read_quorum( u8 scan);
  242.     void paste();
  243.     //-------------------------------------------------------------------------
  244.     K_INPUT()
  245.     {
  246.         textbuffer = nullptr;
  247.         // random data on coords -> some programs detects mouse by this
  248.         ay_x0 = msx = 31;
  249.         ay_y0 = msy = 85;
  250.  
  251. //      nomouse = 0;            //0.39.0
  252.         nokb = nomouse = 0;     //NEDOREPO
  253.     }
  254. };
  255. //=============================================================================
  256.  
  257.