Subversion Repositories pentevo

Rev

Rev 110 | Rev 117 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef ZX_H
  2. #define ZX_H
  3.  
  4. #include "mytypes.h"
  5.  
  6.  
  7.  
  8. // key code is 7 bits, 8th bit is press/release (1=press,0=release)
  9. //
  10. // ACHTUNG!!!! DO NOT CHANGE THESE DEFINES, OTHERWISE MUCH OF CODE WILL BREAK!!!!
  11. //
  12. #define PRESS_BIT  7
  13. #define PRESS_MASK 128
  14. #define KEY_MASK   127
  15. //
  16. #define KEY_SP  0
  17. #define KEY_EN  1
  18. #define KEY_P   2
  19. #define KEY_0   3
  20. #define KEY_1   4
  21. #define KEY_Q   5
  22. #define KEY_A   6
  23. #define KEY_CS  7
  24. //
  25. #define KEY_SS  8
  26. #define KEY_L   9
  27. #define KEY_O  10
  28. #define KEY_9  11
  29. #define KEY_2  12
  30. #define KEY_W  13
  31. #define KEY_S  14
  32. #define KEY_Z  15
  33. //
  34. #define KEY_M  16
  35. #define KEY_K  17
  36. #define KEY_I  18
  37. #define KEY_8  19
  38. #define KEY_3  20
  39. #define KEY_E  21
  40. #define KEY_D  22
  41. #define KEY_X  23
  42. //
  43. #define KEY_N  24
  44. #define KEY_J  25
  45. #define KEY_U  26
  46. #define KEY_7  27
  47. #define KEY_4  28
  48. #define KEY_R  29
  49. #define KEY_F  30
  50. #define KEY_C  31
  51. //
  52. #define KEY_B  32
  53. #define KEY_H  33
  54. #define KEY_Y  34
  55. #define KEY_6  35
  56. #define KEY_5  36
  57. #define KEY_T  37
  58. #define KEY_G  38
  59. #define KEY_V  39
  60. //
  61. #define NO_KEY 0x7F
  62. #define RST_48 0x7E
  63. #define RST128 0x7D
  64. #define RSTRDS 0x7C
  65. #define RSTSYS 0x7B
  66. #define CLRKYS 0x7A
  67. //
  68.  
  69.  
  70. /**
  71.  * SPI registers.
  72.  */
  73. //
  74. #define SPI_KBD_DAT   0x10
  75. #define SPI_KBD_STB   0x11
  76.  
  77. /** ZX mouse X coordinate register.*/
  78. #define SPI_MOUSE_X   0x20
  79. /** ZX mouse Y coordinate register.*/
  80. #define SPI_MOUSE_Y   0x21
  81. /** ZX mouse Y coordinate register.*/
  82. #define SPI_MOUSE_BTN 0x22
  83.  
  84. /** Kempston joystick register.*/
  85. #define SPI_KEMPSTON_JOYSTICK 0x23
  86.  
  87. /** ZX reset register */
  88. #define SPI_RST_REG   0x30
  89.  
  90. /** ZX VGA MODE register */
  91. #define SPI_VGA_REG   0x50
  92.  
  93. /** ZX Gluk address register */
  94. #define SPI_GLUK_ADDR 0x41
  95. /** ZX all data for wait registers */
  96. #define SPI_WAIT_DATA 0x40
  97.  
  98.  
  99. /** Send/recv data for spi registers. */
  100. UBYTE zx_spi_send(UBYTE addr, UBYTE data, UBYTE mask);
  101.  
  102.  
  103. // pause between (CS|SS) and not(CS|SS)
  104. #define SHIFT_PAUSE 8
  105. //
  106. extern volatile UBYTE shift_pause;
  107.  
  108. /*struct zx {
  109.         UBYTE counters[40];
  110.         UBYTE map[5]; // send order: LSbit first, from [4] to [0]
  111.         UBYTE reset_type;
  112. };*/
  113.  
  114.  
  115.  
  116. #define ZX_TASK_INIT 0
  117. #define ZX_TASK_WORK 1
  118.  
  119. void zx_task(UBYTE operation);
  120.  
  121. void zx_init(void);
  122.  
  123. void to_zx(UBYTE scancode, UBYTE was_E0, UBYTE was_release);
  124.  
  125. void update_keys(UBYTE zxcode, UBYTE was_release);
  126.  
  127. void zx_clr_kb(void);
  128.  
  129.  
  130. void  zx_fifo_put(UBYTE input);
  131. UBYTE zx_fifo_isfull(void);
  132. UBYTE zx_fifo_isempty(void);
  133. UBYTE zx_fifo_get(void);
  134. UBYTE zx_fifo_copy(void);
  135.  
  136. /**
  137.  * ZX mouse button register.
  138.  * Bits description:
  139.  * 7..4 - wheel code (if present) or 1111 if wheel not present;
  140.  * 3    - always 1;
  141.  * 2    - middle button (0, if pressed);
  142.  * 1    - right button (0, if pressed);
  143.  * 0    - left button (0, if pressed).
  144.  */
  145. extern volatile UBYTE zx_mouse_button;
  146.  
  147. /** ZX mouse X coordinate register. */
  148. extern volatile UBYTE zx_mouse_x;
  149.  
  150. /** ZX mouse Y coordinate register. */
  151. extern volatile UBYTE zx_mouse_y;
  152.  
  153. /**
  154.  * Reset ZX mouse registers to default value.
  155.  * @par enable [in] - ==0 values like no mouse connected
  156.  *                    !=0 values like mouse connected
  157.  */
  158. void zx_mouse_reset(UBYTE enable);
  159.  
  160. /** Send values of ZX mouse registers to fpga. */
  161. void zx_mouse_task(void);
  162.  
  163.  
  164. /**
  165.  *  ZX WAIT ports indexes:
  166.  */
  167. /** Gluk clock port. */
  168. #define ZXW_GLUK_CLOCK 0x01
  169.  
  170.  
  171. /**
  172.  * Work with WAIT ports.
  173.  * @par status [in] - bit 7 - CPU is 0 -write, 1-read wait port
  174.  *                    bits 6..0 is index of port
  175.  */
  176. void zx_wait_task(UBYTE status);
  177.  
  178. /** Switch vga mode on ZX */
  179. void zx_vga_switcher(void);
  180.  
  181. #endif
  182.  
  183.