Subversion Repositories pentevo

Rev

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

  1. #include <avr/pgmspace.h>
  2. #include <avr/eeprom.h>
  3.  
  4. #include "pins.h"
  5. #include "mytypes.h"
  6.  
  7. #include "getfaraddress.h"
  8. #include "main.h"
  9. #include "zx.h"
  10. #include "kbmap.h"
  11. #include "rs232.h"
  12.  
  13. const UBYTE default_kbmap[] PROGMEM =
  14. {
  15. NO_KEY,NO_KEY, // 00
  16. NO_KEY,NO_KEY, // TURBO, // 01  F9
  17. NO_KEY,NO_KEY, // 02
  18. NO_KEY,NO_KEY, // 03
  19. NO_KEY,NO_KEY, // 04
  20. NO_KEY,NO_KEY, // 05
  21. NO_KEY,NO_KEY, // 06
  22. NO_KEY,NO_KEY, // RESET, // 07 F12
  23. NO_KEY,NO_KEY, // 08
  24. NO_KEY,NO_KEY, // NOTURBO, // 09 F10
  25. NO_KEY,NO_KEY, // 0A
  26. NO_KEY,NO_KEY, // 0B
  27. NO_KEY,NO_KEY, // 0C
  28. KEY_CS,KEY_SS, // 0D TAB, EXT_MODE
  29. KEY_CS,KEY_1 , // 0E ~
  30. NO_KEY,NO_KEY, // 0F
  31.  
  32. NO_KEY,NO_KEY, // 10
  33. NO_KEY,NO_KEY, // 11
  34. KEY_CS,NO_KEY, // 12 LSHIFT
  35. NO_KEY,NO_KEY, // 13
  36. KEY_SS,NO_KEY, // 14
  37. KEY_Q ,NO_KEY, // 15 Q
  38. KEY_1 ,NO_KEY, // 16 1
  39. NO_KEY,NO_KEY, // 17
  40. NO_KEY,NO_KEY, // 18
  41. NO_KEY,NO_KEY, // 19
  42. KEY_Z ,NO_KEY, // 1A Z
  43. KEY_S ,NO_KEY, // 1B S
  44. KEY_A ,NO_KEY, // 1C A
  45. KEY_W ,NO_KEY, // 1D W
  46. KEY_2 ,NO_KEY, // 1E 2
  47. NO_KEY,NO_KEY, // 1F
  48.  
  49. NO_KEY,NO_KEY, // 20
  50. KEY_C ,NO_KEY, // 21 C
  51. KEY_X ,NO_KEY, // 22 X
  52. KEY_D ,NO_KEY, // 23 D
  53. KEY_E ,NO_KEY, // 24 E
  54. KEY_4 ,NO_KEY, // 25 4
  55. KEY_3 ,NO_KEY, // 26 3
  56. NO_KEY,NO_KEY, // 27
  57. NO_KEY,NO_KEY, // 28
  58. KEY_SP,NO_KEY, // 29 SPACE
  59. KEY_V ,NO_KEY, // 2A V
  60. KEY_F ,NO_KEY, // 2B F
  61. KEY_T ,NO_KEY, // 2C T
  62. KEY_R ,NO_KEY, // 2D R
  63. KEY_5 ,NO_KEY, // 2E 5
  64. NO_KEY,NO_KEY, // 2F
  65.  
  66. NO_KEY,NO_KEY, // 30
  67. KEY_N ,NO_KEY, // 31 N
  68. KEY_B ,NO_KEY, // 32 B
  69. KEY_H ,NO_KEY, // 33 H
  70. KEY_G ,NO_KEY, // 34 G
  71. KEY_Y ,NO_KEY, // 35 Y
  72. KEY_6 ,NO_KEY, // 36 6
  73. NO_KEY,NO_KEY, // 37
  74. NO_KEY,NO_KEY, // 38
  75. NO_KEY,NO_KEY, // 39
  76. KEY_M ,NO_KEY, // 3A M
  77. KEY_J ,NO_KEY, // 3B J
  78. KEY_U ,NO_KEY, // 3C U
  79. KEY_7 ,NO_KEY, // 3D 7
  80. KEY_8 ,NO_KEY, // 3E 8
  81. NO_KEY,NO_KEY, // 3F
  82.  
  83. NO_KEY,NO_KEY, // 40
  84. KEY_SS,KEY_N , // 41 ,
  85. KEY_K ,NO_KEY, // 42 K
  86. KEY_I ,NO_KEY, // 43 I
  87. KEY_O ,NO_KEY, // 44 O
  88. KEY_0 ,NO_KEY, // 45 0
  89. KEY_9 ,NO_KEY, // 46 9
  90. NO_KEY,NO_KEY, // 47
  91. NO_KEY,NO_KEY, // 48
  92. KEY_SS,KEY_M , // 49 .
  93. KEY_SS,KEY_C , // 4A /
  94. KEY_L ,NO_KEY, // 4B L
  95. KEY_SS,KEY_Z , // 4C :
  96. KEY_P ,NO_KEY, // 4D P
  97. KEY_SS,KEY_J , // 4E -
  98. NO_KEY,NO_KEY, // 4F
  99.  
  100. NO_KEY,NO_KEY, // 50
  101. NO_KEY,NO_KEY, // 51
  102. KEY_SS,KEY_P , // 52 "
  103. NO_KEY,NO_KEY, // 53
  104. KEY_SS,KEY_8 , // 54 [
  105. KEY_SS,KEY_L , // 55 =
  106. NO_KEY,NO_KEY, // 56
  107. NO_KEY,NO_KEY, // 57
  108. KEY_CS,KEY_2 , // 58 CAPSLOCK
  109. KEY_SS,NO_KEY, // 59 RSHIFT
  110. KEY_EN,NO_KEY, // 5A ENTER
  111. KEY_SS,KEY_9 , // 5B ]
  112. NO_KEY,NO_KEY, // 5C
  113. KEY_SS,KEY_CS, // 5D backslash
  114. NO_KEY,NO_KEY, // 5E
  115. NO_KEY,NO_KEY, // 5F
  116.  
  117. NO_KEY,NO_KEY, // 60
  118. KEY_SS,KEY_CS, // 61 backslash
  119. NO_KEY,NO_KEY, // 62
  120. NO_KEY,NO_KEY, // 63
  121. NO_KEY,NO_KEY, // 64
  122. NO_KEY,NO_KEY, // 65
  123. KEY_CS,KEY_0 , // 66 BACKSPACE
  124. NO_KEY,NO_KEY, // 67
  125. NO_KEY,NO_KEY, // 68
  126. KEY_1 ,NO_KEY, // 69 keypad 1
  127. NO_KEY,NO_KEY, // 6A
  128. KEY_4 ,NO_KEY, // 6B keypad 4
  129. KEY_7 ,NO_KEY, // 6C keypad 7
  130. NO_KEY,NO_KEY, // 6D
  131. NO_KEY,NO_KEY, // 6E
  132. NO_KEY,NO_KEY, // 6F
  133.  
  134. KEY_0 ,NO_KEY, // 70 keypad 0
  135. KEY_SS,KEY_M , // 71 keypad .
  136. KEY_2 ,NO_KEY, // 72 keypad 2
  137. KEY_5 ,NO_KEY, // 73 keypad 5
  138. KEY_6 ,NO_KEY, // 74 keypad 6
  139. KEY_8 ,NO_KEY, // 75 keypad 8
  140. KEY_CS,KEY_SP, // 76 ESC, BREAK
  141. NO_KEY,NO_KEY, // 77
  142. NO_KEY,NO_KEY, //RSTRDS,NO_KEY, // 78 F11
  143. KEY_SS,KEY_K , // 79 keypad +
  144. KEY_3 ,NO_KEY, // 7A keypad 3
  145. KEY_SS,KEY_J , // 7B keypad -
  146. KEY_SS,KEY_B , // 7C keypad *
  147. KEY_9 ,NO_KEY, // 7D keypad 9
  148. NO_KEY,NO_KEY, // 7E Scroll Lock
  149. NO_KEY,NO_KEY  // 7F
  150. };
  151.  
  152. const UBYTE default_kbmap_E0[] PROGMEM =
  153. {
  154. NO_KEY,NO_KEY, // 60
  155. NO_KEY,NO_KEY, // 61
  156. NO_KEY,NO_KEY, // 62
  157. NO_KEY,NO_KEY, // 63
  158. NO_KEY,NO_KEY, // 64
  159. NO_KEY,NO_KEY, // 65
  160. NO_KEY,NO_KEY, // 66
  161. NO_KEY,NO_KEY, // 67
  162. NO_KEY,NO_KEY, // 68
  163. KEY_SS,KEY_E , // 69 END
  164. NO_KEY,NO_KEY, // 6A
  165. KEY_CS,KEY_5 , // 6B LEFT
  166. KEY_SS,KEY_Q , // 6C HOME
  167. NO_KEY,NO_KEY, // 6D
  168. NO_KEY,NO_KEY, // 6E
  169. NO_KEY,NO_KEY, // 6F
  170.  
  171. KEY_SS,KEY_W , // 70 INS
  172. KEY_CS,KEY_9 , // 71 DEL
  173. KEY_CS,KEY_6 , // 72 DOWN
  174. NO_KEY,NO_KEY, // 73
  175. KEY_CS,KEY_8 , // 74 RIGHT
  176. KEY_CS,KEY_7 , // 75 UP
  177. KEY_CS,KEY_SP, // 76 ESC, BREAK
  178. NO_KEY,NO_KEY, // 77
  179. NO_KEY,NO_KEY, // 78
  180. NO_KEY,NO_KEY, // 79
  181. KEY_CS,KEY_4 , // 7A PGDN
  182. NO_KEY,NO_KEY, // 7B
  183. NO_KEY,NO_KEY, // 7C NMI
  184. KEY_CS,KEY_3 , // 7D PGUP
  185. NO_KEY,NO_KEY, // 7E
  186. NO_KEY,NO_KEY  // 7F
  187. };
  188.  
  189. //for saving modified kmap (2bytes for signature 'KB')
  190. UBYTE saved_kbmap[2 + sizeof(default_kbmap) + sizeof(default_kbmap_E0)] EEMEM;
  191.  
  192. //pointers to map
  193. UBYTE* kbmap;
  194. UBYTE* kbmap_E0;
  195.  
  196. //if want Log than comment next string
  197. #undef LOGENABLE
  198.  
  199. void kbmap_init(void)
  200. {
  201.         //set pointers
  202.         kbmap = dbuf;
  203.         kbmap_E0 = dbuf + sizeof(default_kbmap);
  204.  
  205. #ifdef LOGENABLE
  206.         to_log("kbmap_init start\r\n");
  207. #endif
  208.         //wait for eeprom
  209.         eeprom_busy_wait();
  210.  
  211. #ifdef LOGENABLE
  212.         to_log("eeprom OK\r\n");
  213. #endif
  214. #ifdef LOGENABLE
  215.         {
  216.         char log_kb[]="K........\r\n";
  217.         ULONG curFpga = GET_FAR_ADDRESS(saved_kbmap);
  218.         UBYTE b = (UBYTE)((curFpga>>24)&0xFF);
  219.         log_kb[1] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10;
  220.         log_kb[2] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10;
  221.         b = (UBYTE)((curFpga>>16)&0xFF);
  222.         log_kb[3] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10;
  223.         log_kb[4] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10;
  224.         b = (UBYTE)((curFpga>>8)&0xFF);
  225.         log_kb[5] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10;
  226.         log_kb[6] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10;
  227.         b = (UBYTE)(curFpga&0xFF);
  228.         log_kb[7] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10;
  229.         log_kb[8] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10;
  230.         to_log(log_kb);
  231.         }
  232. #endif
  233.  
  234.         //read signature from eeprom
  235.         eeprom_read_block(dbuf, saved_kbmap, 2);
  236.  
  237.         //check signature
  238.         if ( (dbuf[0]=='K') && (dbuf[1]=='B') )
  239.         {
  240.                 //read from eeprom
  241.                 eeprom_read_block(kbmap, saved_kbmap+2, sizeof(saved_kbmap)-2);
  242. #ifdef LOGENABLE
  243.                 to_log("KBMAP:EEPROM\r\n");
  244. #endif
  245.         }
  246.         else
  247.         {
  248.                 //set default
  249.                 memcpy_P(kbmap, default_kbmap, sizeof(default_kbmap));
  250.                 memcpy_P(kbmap_E0, default_kbmap_E0, sizeof(default_kbmap_E0));
  251. #ifdef LOGENABLE
  252.                 to_log("KBMAP:DEFAULT\r\n");
  253. #endif
  254.         }
  255. }
  256.