Subversion Repositories pentevo

Rev

Rev 291 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. .EQU    WIN_SHADOW_ATTR=$01
  2. ;
  3. ;--------------------------------------
  4. ;
  5. SCR_FADE:
  6.         LDI     XL,0
  7.         LDI     XH,1
  8.         RCALL   SCR_SET_CURSOR
  9.         LDI     TEMP,$77
  10.         LDIW    53*23
  11.         RJMP    SCR_FILLLONG_ATTR
  12. ;
  13. ;--------------------------------------
  14. ;
  15. SCR_BACKGND:
  16.         LDI     XL,0
  17.         LDI     XH,0
  18.         RCALL   SCR_SET_CURSOR
  19.         LDI     DATA,$20        ;" "
  20.         LDI     TEMP,$F0
  21.         LDI     COUNT,53
  22.         RCALL   SCR_FILL_CHAR_ATTR
  23.         LDI     DATA,$B0        ;"░"
  24.         LDI     TEMP,$77
  25.         LDIW    53*23
  26.         RCALL   SCR_FILLLONG_CHAR_ATTR
  27.         LDI     DATA,$20        ;" "
  28.         LDI     TEMP,$F0
  29.         LDI     COUNT,53
  30.         RCALL   SCR_FILL_CHAR_ATTR
  31.         CBR     FLAGS1,0B00000011
  32.         SBR     FLAGS1,0B00000100
  33.         LDI     XL,0
  34.         LDI     XH,0
  35.         RCALL   SCR_SET_CURSOR
  36.         LDIZ    MSG_TITLE1*2
  37.         RCALL   SCR_PRINTSTRZ
  38.         CALL    PRINT_SHORT_VERS
  39.         LDIZ    MSG_TITLE2*2
  40.         RJMP    SCR_PRINTSTRZ
  41. ;
  42. ;--------------------------------------
  43. ;                        ┌──┬────────────────────── коорд.лев.верхн угола окна
  44. ;                        │  │   ┌────────────────── ширина (без учёта тени)
  45. ;                        │  │   │   ┌────────────── высота (без учёта тени)
  46. ;                        │  │   │   │    ┌───────── атрибут окна
  47. ;WINDOW_DESCRIPTOR:      │  │   │   │    │    ┌──── флаги: .0 - "с тенью/без тени"
  48. ;               .DB     15, 3, 25, 13, $1F, $01
  49. ;
  50. ;in:    Z == указатель на описатель окна (в младших 64K)
  51. ;const: WIN_SHADOW_ATTR == атрибут тени
  52. .EQU    WIN_X   =0
  53. .EQU    WIN_Y   =1
  54. .EQU    WIN_W   =2
  55. .EQU    WIN_W2  =3
  56. .EQU    WIN_H   =4
  57. .EQU    WIN_H2  =5
  58. .EQU    WIN_ATTR=6
  59. .EQU    WIN_FLGS=7
  60. ;
  61. WINDOW: GETMEM  8
  62.  
  63.         LPM     XL,Z+
  64.         STH     WIN_X,XL
  65.         LPM     XH,Z+
  66.         STH     WIN_Y,XH
  67.         LPM     TEMP,Z+
  68.         STH     WIN_W,TEMP
  69.         SUBI    TEMP,2
  70.         STH     WIN_W2,TEMP
  71.         LPM     TEMP,Z+
  72.         STH     WIN_H,TEMP
  73.         SUBI    TEMP,2
  74.         STH     WIN_H2,TEMP
  75.         LPM     TEMP,Z+
  76.         STH     WIN_ATTR,TEMP
  77.         LPM     TEMP,Z+
  78.         STH     WIN_FLGS,TEMP
  79.  
  80.         RCALL   SCR_SET_CURSOR
  81.         LDH     TEMP,WIN_ATTR
  82.         RCALL   SCR_SET_ATTR
  83.         LDI     DATA,$DA ;"┌"
  84.         RCALL   SCR_PUTCHAR
  85.         LDI     DATA,$C4 ;"─"
  86.         LDH     COUNT,WIN_W2
  87.         RCALL   SCR_FILL_CHAR
  88.         LDI     DATA,$BF ;"┐"
  89.         RCALL   SCR_PUTCHAR
  90. WIND_1:
  91.         LDH     XL,WIN_X
  92.         LDH     XH,WIN_Y
  93.         INC     XH
  94.         STH     WIN_Y,XH
  95.         RCALL   SCR_SET_CURSOR
  96.         LDH     TEMP,WIN_ATTR
  97.         RCALL   SCR_SET_ATTR
  98.         LDI     DATA,$B3 ;"│"
  99.         RCALL   SCR_PUTCHAR
  100.         LDI     DATA,$20 ;" "
  101.         LDH     COUNT,WIN_W2
  102.         RCALL   SCR_FILL_CHAR
  103.         LDI     DATA,$B3 ;"│"
  104.         RCALL   SCR_PUTCHAR
  105.         LDH     COUNT,WIN_FLGS
  106.         SBRS    COUNT,0
  107.         RJMP    WIND_2
  108.         LDI     TEMP,WIN_SHADOW_ATTR
  109.         LDI     COUNT,1
  110.         RCALL   SCR_FILL_ATTR
  111. WIND_2: LDH     COUNT,WIN_H2
  112.         DEC     COUNT
  113.         STH     WIN_H2,COUNT
  114.         BRNE    WIND_1
  115.  
  116.         LDH     XL,WIN_X
  117.         LDH     XH,WIN_Y
  118.         INC     XH
  119.         STH     WIN_Y,XH
  120.         RCALL   SCR_SET_CURSOR
  121.         LDH     TEMP,WIN_ATTR
  122.         RCALL   SCR_SET_ATTR
  123.         LDI     DATA,$C0 ;"└"
  124.         RCALL   SCR_PUTCHAR
  125.         LDI     DATA,$C4 ;"─"
  126.         LDH     COUNT,WIN_W2
  127.         RCALL   SCR_FILL_CHAR
  128.         LDI     DATA,$D9 ;"┘"
  129.         RCALL   SCR_PUTCHAR
  130.         LDH     COUNT,WIN_FLGS
  131.         SBRS    COUNT,0
  132.         RJMP    WIND_3
  133.         LDI     TEMP,WIN_SHADOW_ATTR
  134.         LDI     COUNT,1
  135.         RCALL   SCR_FILL_ATTR
  136. WIND_3:
  137.         LDH     COUNT,WIN_FLGS
  138.         SBRS    COUNT,0
  139.         RJMP    WIND_4
  140.         LDH     XL,WIN_X
  141.         INC     XL
  142.         LDH     XH,WIN_Y
  143.         INC     XH
  144.         RCALL   SCR_SET_CURSOR
  145.         LDI     TEMP,WIN_SHADOW_ATTR
  146.         LDH     COUNT,WIN_W
  147.         RCALL   SCR_FILL_ATTR
  148. WIND_4:
  149.         LDH     TEMP,WIN_ATTR
  150.         RCALL   SCR_SET_ATTR
  151.  
  152.         FREEMEM 8
  153.         RET
  154. ;
  155. ;--------------------------------------
  156. ;                        ┌──┬────────────────────── коорд.лев.верхн угола окна
  157. ;                        │  │   ┌────────────────── длина_строки + 2 =
  158. ;                        │  │   │                   = ширина без учёта рамки и тени
  159. ;                        │  │   │    ┌───────────── количество пунктов меню
  160. ;                        │  │   │    │    ┌──────── атрибут для окна
  161. ;MENU_DESCRIPTOR:        │  │   │    │    │    ┌─── атрибут для курсора
  162. ;               .DB     15, 3, 18+2, 2, $1F, $F0
  163. ;               .DW     BKGND_TASK ──────────────── ссылка на фоновую задачу
  164. ;               .DW     PERIOD ──────────────────── период вызова фоновой задачи, мс (1..16383)
  165. ;
  166. ;               .DW     HANDLER1 ────────────────── указатель на обработчик для 1-го пункта меню
  167. ;               .DW     HANDLER2 ────────────────── указатель на обработчик для 2-го пункта меню
  168. ;
  169. ;               .DB     "─ Заголовок окна ─"        \
  170. ;               .DB     "Первый пункт меню "         > язык 0
  171. ;               .DB     "Второй пункт меню "        /
  172. ;
  173. ;               .DB     " Header of window "        \
  174. ;               .DB     "It's first item   "         > язык 1
  175. ;               .DB     "It's second item  "        /
  176. ;                       ;123456789012345678 (длина_строки=18)
  177. ;
  178. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  179. ; ▒▒▒▒┌── Заголовок окна ──┐▒▒▒▒▒   ▒▒▒▒┌─ Header of window ─┐▒▒▒▒▒
  180. ; ▒▒▒▒│ Первый пункт меню  │░▒▒▒▒   ▒▒▒▒│ It's first item    │░▒▒▒▒
  181. ; ▒▒▒▒│ Второй пункт меню  │░▒▒▒▒   ▒▒▒▒│ It's second item   │░▒▒▒▒
  182. ; ▒▒▒▒└────────────────────┘░▒▒▒▒   ▒▒▒▒└────────────────────┘░▒▒▒▒
  183. ; ▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒   ▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒
  184. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  185. ;--------------------------------------
  186. ;Меню (выбор функции - выполнение - возврат в меню)
  187. ;in:    Z == указатель на описатель меню (в младших 64K)
  188. ;const: WIN_SHADOW_ATTR == атрибут тени
  189. .EQU    MENU_TIMEOUT_0  =0
  190. .EQU    MENU_TIMEOUT_1  =1
  191. .EQU    MENU_DESC_L     =2
  192. .EQU    MENU_DESC_H     =3
  193. .EQU    MENU_SELECT     =4
  194. .EQU    MENU_X          =5
  195. .EQU    MENU_Y          =6
  196. .EQU    MENU_Y_TEMP     =7
  197. .EQU    MENU_WIDTH2     =8
  198. .EQU    MENU_HEIGHT2    =9
  199. .EQU    MENU_H2_TEMP    =10
  200. .EQU    MENU_WIN_ATTR   =11
  201. .EQU    MENU_CUR_ATTR   =12
  202. .EQU    MENU_BTASK_L    =13
  203. .EQU    MENU_BTASK_H    =14
  204. .EQU    MENU_BPERIOD_L  =15
  205. .EQU    MENU_BPERIOD_H  =16
  206. ;
  207. MENU:   GETMEM  17
  208.         STH     MENU_DESC_L,ZL
  209.         STH     MENU_DESC_H,ZH
  210.         STH     MENU_SELECT,NULL
  211. MENU_AGAIN:
  212.         STH     MENU_TIMEOUT_1,NULL
  213.         RCALL   SCR_BACKGND
  214.         LDH     ZL,MENU_DESC_L
  215.         LDH     ZH,MENU_DESC_H
  216.         LPM     XL,Z+
  217.         STH     MENU_X,XL
  218.         LPM     XH,Z+
  219.         STH     MENU_Y,XH
  220.         STH     MENU_Y_TEMP,XH
  221.         LPM     TEMP,Z+
  222.         STH     MENU_WIDTH2,TEMP
  223.         LPM     TEMP,Z+
  224.         STH     MENU_HEIGHT2,TEMP
  225.         STH     MENU_H2_TEMP,TEMP
  226.         LPM     TEMP,Z+
  227.         STH     MENU_WIN_ATTR,TEMP
  228.         LPM     TEMP,Z+
  229.         STH     MENU_CUR_ATTR,TEMP
  230.  
  231.         LPM     TEMP,Z+
  232.         STH     MENU_BTASK_L,TEMP
  233.         LPM     TEMP,Z+
  234.         STH     MENU_BTASK_H,TEMP
  235.         LPM     TEMP,Z+
  236.         STH     MENU_BPERIOD_L,TEMP
  237.         LPM     TEMP,Z+
  238.         STH     MENU_BPERIOD_H,TEMP
  239.  
  240.         LDH     TEMP,MENU_HEIGHT2
  241.         LSL     TEMP
  242.         ADD     ZL,TEMP
  243.         ADC     ZH,NULL
  244.         LDH     DATA,MENU_WIDTH2
  245.         SUBI    DATA,2
  246.         LDH     TEMP,MENU_HEIGHT2
  247.         INC     TEMP
  248.         MUL     DATA,TEMP
  249.         MOV     TEMP,LANG
  250.         LSR     TEMP
  251.         BREQ    MENU_5
  252. MENU_6: ADD     ZL,R0
  253.         ADC     ZH,R1
  254.         DEC     TEMP
  255.         BRNE    MENU_6
  256. MENU_5:
  257.         RCALL   SCR_SET_CURSOR
  258.         LDH     TEMP,MENU_WIN_ATTR
  259.         RCALL   SCR_SET_ATTR
  260.         LDI     DATA,$DA ;"┌"
  261.         RCALL   SCR_PUTCHAR
  262.         LDI     DATA,$C4 ;"─"
  263.         RCALL   SCR_PUTCHAR
  264.         LDH     COUNT,MENU_WIDTH2
  265.         SUBI    COUNT,2
  266.         RCALL   SCR_PRINTSTRN
  267.         LDI     DATA,$C4 ;"─"
  268.         RCALL   SCR_PUTCHAR
  269.         LDI     DATA,$BF ;"┐"
  270.         RCALL   SCR_PUTCHAR
  271. MENU_1:
  272.         LDH     XL,MENU_X
  273.         LDH     XH,MENU_Y_TEMP
  274.         INC     XH
  275.         STH     MENU_Y_TEMP,XH
  276.         RCALL   SCR_SET_CURSOR
  277.         LDH     TEMP,MENU_WIN_ATTR
  278.         RCALL   SCR_SET_ATTR
  279.         LDI     DATA,$B3 ;"│"
  280.         RCALL   SCR_PUTCHAR
  281.         LDI     DATA,$20 ;" "
  282.         RCALL   SCR_PUTCHAR
  283.         LDH     COUNT,MENU_WIDTH2
  284.         SUBI    COUNT,2
  285.         RCALL   SCR_PRINTSTRN
  286.         LDI     DATA,$20 ;" "
  287.         RCALL   SCR_PUTCHAR
  288.         LDI     DATA,$B3 ;"│"
  289.         RCALL   SCR_PUTCHAR
  290.         LDI     TEMP,WIN_SHADOW_ATTR
  291.         LDI     COUNT,1
  292.         RCALL   SCR_FILL_ATTR
  293. MENU_2: LDH     COUNT,MENU_H2_TEMP
  294.         DEC     COUNT
  295.         STH     MENU_H2_TEMP,COUNT
  296.         BRNE    MENU_1
  297.  
  298.         LDH     XL,MENU_X
  299.         LDH     XH,MENU_Y_TEMP
  300.         INC     XH
  301.         STH     MENU_Y_TEMP,XH
  302.         RCALL   SCR_SET_CURSOR
  303.         LDH     TEMP,MENU_WIN_ATTR
  304.         RCALL   SCR_SET_ATTR
  305.         LDI     DATA,$C0 ;"└"
  306.         RCALL   SCR_PUTCHAR
  307.         LDI     DATA,$C4 ;"─"
  308.         LDH     COUNT,MENU_WIDTH2
  309.         RCALL   SCR_FILL_CHAR
  310.         LDI     DATA,$D9 ;"┘"
  311.         RCALL   SCR_PUTCHAR
  312.         LDI     TEMP,WIN_SHADOW_ATTR
  313.         LDI     COUNT,1
  314.         RCALL   SCR_FILL_ATTR
  315. MENU_3:
  316.         LDH     XL,MENU_X
  317.         INC     XL
  318.         LDH     XH,MENU_Y_TEMP
  319.         INC     XH
  320.         RCALL   SCR_SET_CURSOR
  321.         LDI     TEMP,WIN_SHADOW_ATTR
  322.         LDH     COUNT,MENU_WIDTH2
  323.         ADDI    COUNT,2
  324.         RCALL   SCR_FILL_ATTR
  325.  
  326.         LDH     ZL,MENU_BTASK_L
  327.         LDH     ZH,MENU_BTASK_H
  328.         LDI     DATA,0
  329.         ICALL
  330.  
  331. MENU_DRAWCURSOR:
  332.         LDH     XL,MENU_X
  333.         INC     XL
  334.         LDH     XH,MENU_Y
  335.         INC     XH
  336.         LDH     TEMP,MENU_SELECT
  337.         ADD     XH,TEMP
  338.         RCALL   SCR_SET_CURSOR
  339.         LDH     TEMP,MENU_CUR_ATTR
  340.         LDH     COUNT,MENU_WIDTH2
  341.         RCALL   SCR_FILL_ATTR
  342.  
  343. MENU_WAITKEY:
  344.         CALL    INKEY
  345.         BREQ    MENU_NOKEY
  346.         CPI     DATA,KEY_ENTER
  347.         BREQ    MENU_ENTER
  348.         CPI     DATA,KEY_UP
  349.         BREQ    MENU_UP
  350.         CPI     DATA,KEY_DOWN
  351.         BREQ    MENU_DOWN
  352.         CPI     DATA,KEY_PAGEUP
  353.         BREQ    MENU_TOP
  354.         CPI     DATA,KEY_HOME
  355.         BREQ    MENU_TOP
  356.         CPI     DATA,KEY_PAGEDOWN
  357.         BREQ    MENU_BOTTOM
  358.         CPI     DATA,KEY_END
  359.         BREQ    MENU_BOTTOM
  360.         SBRC    TEMP,PS2K_BIT_EXTKEY
  361.         RJMP    MENU_NOKEY
  362.         CPI     DATA,KEY_ESC
  363.         BREQ    MENU_ESCAPE
  364.         CPI     DATA,KEY_CAPSLOCK
  365.         BREQ    MENU_SWITCH_LANG
  366.         CPI     DATA,KEY_SCROLLLOCK
  367.         BREQ    MENU_SWITCH_VGA
  368.         CPI     DATA,KEY_F1
  369.         BREQ    MENU_HELP
  370. MENU_NOKEY:
  371.         MOVW    ZL,YL
  372.         CALL    CHECK_TIMEOUT_MS
  373.         BRCC    MENU_WAITKEY
  374.         LDH     ZL,MENU_BTASK_L
  375.         LDH     ZH,MENU_BTASK_H
  376.         LDI     DATA,1
  377.         ICALL
  378.         MOVW    ZL,YL
  379.         LDH     WL,MENU_BPERIOD_L
  380.         LDH     WH,MENU_BPERIOD_H
  381.         CALL    SET_TIMEOUT_MS
  382.         RJMP    MENU_WAITKEY
  383. ;
  384. MENU_TOP:
  385.         RJMP    MENU_TOP0
  386. MENU_BOTTOM:
  387.         RJMP    MENU_BOTTOM0
  388. MENU_SWITCH_LANG:
  389.         RJMP    MENU_SWLNG0
  390. MENU_SWITCH_VGA:
  391.         RJMP    MENU_SWVGA0
  392. MENU_HELP:
  393.         RJMP    MENU_HELP0
  394. ;
  395. MENU_ESCAPE:
  396.         FREEMEM 17
  397.         RET
  398. ;
  399. MENU_ENTER:
  400.         RCALL   SCR_FADE
  401.         LDH     ZL,MENU_DESC_L
  402.         LDH     ZH,MENU_DESC_H
  403.         ADIW    ZL,10
  404.         LDH     TEMP,MENU_SELECT
  405.         LSL     TEMP
  406.         ADD     ZL,TEMP
  407.         ADC     ZH,NULL
  408.         LPM     XL,Z+
  409.         LPM     XH,Z+
  410.         MOVW    ZL,XL
  411.         ICALL
  412.         RJMP    MENU_AGAIN
  413. ;
  414. MENU_UP:
  415.         LDH     TEMP,MENU_SELECT
  416.         TST     TEMP
  417.         BRNE    MENU_UP_1
  418.         RJMP    MENU_WAITKEY
  419. MENU_UP_1:
  420.         RCALL   MENU_CLR_CURSOR
  421.         LDH     TEMP,MENU_SELECT
  422.         DEC     TEMP
  423.         STH     MENU_SELECT,TEMP
  424.         RJMP    MENU_DRAWCURSOR
  425. ;
  426. MENU_DOWN:
  427.         LDH     TEMP,MENU_SELECT
  428.         LDH     DATA,MENU_HEIGHT2
  429.         DEC     DATA
  430.         CP      TEMP,DATA
  431.         BRCS    MENU_DOWN_1
  432.         RJMP    MENU_WAITKEY
  433. MENU_DOWN_1:
  434.         RCALL   MENU_CLR_CURSOR
  435.         LDH     TEMP,MENU_SELECT
  436.         INC     TEMP
  437.         STH     MENU_SELECT,TEMP
  438.         RJMP    MENU_DRAWCURSOR
  439. ;
  440. MENU_TOP0:
  441.         LDH     TEMP,MENU_SELECT
  442.         RCALL   MENU_CLR_CURSOR
  443.         CLR     TEMP
  444.         STH     MENU_SELECT,TEMP
  445.         RJMP    MENU_DRAWCURSOR
  446. ;
  447. MENU_BOTTOM0:
  448.         LDH     TEMP,MENU_SELECT
  449.         RCALL   MENU_CLR_CURSOR
  450.         LDH     TEMP,MENU_HEIGHT2
  451.         DEC     TEMP
  452.         STH     MENU_SELECT,TEMP
  453.         RJMP    MENU_DRAWCURSOR
  454. ;
  455. MENU_HELP0:
  456.         RCALL   SCR_FADE
  457.         LDIZ    WIND_MENU_HELP*2
  458.         RCALL   WINDOW
  459.         LDIZ    MLMSG_MENU_HELP*2
  460.         RCALL   SCR_PRINTMLSTR
  461.         CALL    WAITKEY
  462.         RJMP    MENU_AGAIN
  463. WIND_MENU_HELP:
  464.         .DB     3,13,37,9,$CF,$01
  465. ;
  466. MENU_SWLNG3:
  467.         FREEMEM 2
  468. MENU_SWLNG0:
  469.         MOV     DATA,LANG
  470.         ADDI    DATA,2
  471.         CPI     DATA,MAX_LANG*2
  472.         BRCS    MENU_SWLNG1
  473.         CLR     DATA
  474. MENU_SWLNG1:
  475.         MOV     LANG,DATA
  476.         LSR     DATA
  477.         LDIW    EE_LANG
  478.         CALL    EEPROM_WRITE
  479.         RCALL   SCR_FADE
  480.         LDIZ    WIND_MENU_SWLNG*2
  481.         RCALL   WINDOW
  482.         LDI     TEMP,$9E
  483.         RCALL   SCR_SET_ATTR
  484.         LDIZ    MLMSG_MENU_SWLNG*2
  485.         RCALL   SCR_PRINTMLSTR
  486.         GETMEM  2
  487.         MOVW    ZL,YL
  488.         LDIW    2000
  489.         CALL    SET_TIMEOUT_MS
  490. MENU_SWLNG2:
  491.         MOVW    ZL,YL
  492.         CALL    CHECK_TIMEOUT_MS
  493.         BRCS    MENU_SWLNG9
  494.         CALL    INKEY
  495.         BREQ    MENU_SWLNG2
  496.         SBRC    TEMP,PS2K_BIT_EXTKEY
  497.         RJMP    MENU_SWLNG9
  498.         CPI     DATA,KEY_CAPSLOCK
  499.         BREQ    MENU_SWLNG3
  500. MENU_SWLNG9:
  501.         FREEMEM 2
  502.         RJMP    MENU_AGAIN
  503. WIND_MENU_SWLNG:
  504.         .DB     13,11,27,3,$9F,$01
  505. ;
  506. MENU_SWVGA0:
  507.         LDI     TEMP,0B10000000
  508.         EOR     MODE1,TEMP
  509.         MOV     DATA,MODE1
  510.         ANDI    DATA,0B10000000
  511.         LDI     TEMP,SCR_MODE
  512.         CALL    FPGA_REG
  513.         MOV     DATA,MODE1
  514.         LDIW    EE_MODE1
  515.         CALL    EEPROM_WRITE
  516.         RCALL   SCR_KBDSETLED
  517.         RJMP    MENU_AGAIN
  518. ;
  519. MENU_CLR_CURSOR:
  520.         LDH     XL,MENU_X
  521.         INC     XL
  522.         LDH     XH,MENU_Y
  523.         INC     XH
  524.         ADD     XH,TEMP
  525.         RCALL   SCR_SET_CURSOR
  526.         LDH     TEMP,MENU_WIN_ATTR
  527.         LDH     COUNT,MENU_WIDTH2
  528.         RJMP    SCR_FILL_ATTR
  529. ;
  530. SCR_KBDSETLED:
  531.         LDI     DATA,$ED
  532.         RCALL   PS2K_SEND_BYTE
  533.         BREQ    SCR_SETLED_FAIL
  534.         RCALL   PS2K_RECEIVE_BYTE
  535.         BREQ    SCR_SETLED_FAIL
  536.         CPI     DATA,$FA
  537.         BRNE    SCR_SETLED_FAIL
  538.         LDI     DATA,0B00000000
  539.         SBRS    MODE1,7
  540.         LDI     DATA,0B00000001
  541.         RCALL   PS2K_SEND_BYTE
  542. SCR_SETLED_FAIL:
  543.         RET
  544. ;
  545. ;--------------------------------------
  546. ;Установка текущего атрибута
  547. ;in:    TEMP - attr
  548. SCR_SET_ATTR:
  549.         MOV     DATA,TEMP
  550.         LDI     TEMP,SCR_ATTR
  551.         RJMP    FPGA_REG
  552. ;
  553. ;--------------------------------------
  554. ;Установка позиции печати на экране
  555. ;       XL - x (0..52)
  556. ;       XH - y (0..24)
  557. SCR_SET_CURSOR:
  558.         LDI     TEMP,53
  559.         MUL     XH,TEMP
  560.         CLR     XH
  561.         ADD     XL,R0
  562.         ADC     XH,R1
  563.         SBIW    XL,1
  564.         ANDI    XH,$07
  565.         LDI     TEMP,SCR_LOADDR
  566.         MOV     DATA,XL
  567.         RCALL   FPGA_REG
  568.         LDI     TEMP,SCR_HIADDR
  569.         MOV     DATA,XH
  570.         RJMP    FPGA_REG
  571. ;
  572. ;--------------------------------------
  573. ;in:    Z == указатель на структуру строк (в младших 64K)
  574. SCR_PRINTMLSTR:
  575.         ADD     ZL,LANG
  576.         ADC     ZH,NULL
  577.         LPM     WL,Z+
  578.         LPM     WH,Z+
  579.         MOVW    ZL,WL
  580. ;
  581. ; - - - - - - - - - - - - - - - - - - -
  582. ;in:    Z == указатель на строку (в младших 64K)
  583. SCR_PRINTSTRZ:
  584.         SPICS_SET
  585.         LDI     TEMP,SCR_CHAR
  586. .IFDEF DEBUG_FPGA_OUT
  587.         CALL    DBG_SET_FPGA_REG
  588. .ENDIF
  589.         OUT     SPDR,TEMP
  590.         RCALL   FPGA_RDY_RD
  591. SCR_PRSTRZ1:
  592.         LPM     DATA,Z+
  593.         TST     DATA
  594.         BREQ    SCR_PRSTRZ9
  595.         CPI     DATA,$15
  596.         BREQ    SCR_PRSTRZ2
  597.         CPI     DATA,$16
  598.         BREQ    SCR_PRSTRZ3
  599.         RCALL   FPGA_SAME_REG
  600.         RJMP    SCR_PRSTRZ1
  601. SCR_PRSTRZ2:
  602.         LPM     DATA,Z+
  603.         LDI     TEMP,SCR_ATTR
  604.         RCALL   FPGA_REG
  605.         RJMP    SCR_PRINTSTRZ ;SCR_PRSTRZ1
  606. SCR_PRSTRZ3:
  607.         LPM     XL,Z+
  608.         LPM     XH,Z+
  609.         RCALL   SCR_SET_CURSOR
  610.         RJMP    SCR_PRINTSTRZ ;SCR_PRSTRZ1
  611. SCR_PRSTRZ9:
  612.         RET
  613. ;
  614. ;--------------------------------------
  615. ;in:    Z == указатель на строку (в RAM)
  616. ;       COUNT == длина строки
  617. SCR_PRNRAMSTRN:
  618.         SPICS_SET
  619.         LDI     TEMP,SCR_CHAR
  620. .IFDEF DEBUG_FPGA_OUT
  621.         CALL    DBG_SET_FPGA_REG
  622. .ENDIF
  623.         OUT     SPDR,TEMP
  624.         RCALL   FPGA_RDY_RD
  625. SCR_PRSN1:
  626.         LD      DATA,Z+
  627.         RCALL   FPGA_SAME_REG
  628.         DEC     COUNT
  629.         BRNE    SCR_PRSN1
  630.         RET
  631. ;
  632. ;--------------------------------------
  633. ;in:    Z == указатель на строку (в младших 64K)
  634. ;       COUNT == длина строки
  635. SCR_PRINTSTRN:
  636.         SPICS_SET
  637.         LDI     TEMP,SCR_CHAR
  638. .IFDEF DEBUG_FPGA_OUT
  639.         CALL    DBG_SET_FPGA_REG
  640. .ENDIF
  641.         OUT     SPDR,TEMP
  642.         RCALL   FPGA_RDY_RD
  643. SCR_PRSTRN1:
  644.         LPM     DATA,Z+
  645.         RCALL   FPGA_SAME_REG
  646.         DEC     COUNT
  647.         BRNE    SCR_PRSTRN1
  648.         RET
  649. ;
  650. ;--------------------------------------
  651. ;in:    DATA
  652. SCR_PUTCHAR:
  653.         PUSH    TEMP
  654.         LDI     TEMP,SCR_CHAR
  655.         RCALL   FPGA_REG
  656.         POP     TEMP
  657.         RET
  658. ;
  659. ;--------------------------------------
  660. ;Заполнение символом и атрибутом
  661. ;in:    DATA == символ
  662. ;       TEMP == атрибут
  663. ;       COUNT == количество
  664. SCR_FILL_CHAR_ATTR:
  665.         PUSH    DATA
  666.         MOV     DATA,TEMP
  667.         LDI     TEMP,SCR_ATTR
  668.         RCALL   FPGA_REG
  669.         POP     DATA
  670. ;Заполнение символом и текущим атрибутом
  671. ;in:    DATA == символ
  672. ;       COUNT == количество
  673. SCR_FILL_CHAR:
  674.         LDI     TEMP,SCR_CHAR
  675.         RCALL   FPGA_REG
  676.         DEC     COUNT
  677.         BRNE    SCR_FA1
  678.         RET
  679. ;
  680. ;--------------------------------------
  681. ;Заполнение атрибутом
  682. ;in:    TEMP == атрибут
  683. ;       COUNT == количество
  684. SCR_FILL_ATTR:
  685.         MOV     DATA,TEMP
  686.         LDI     TEMP,SCR_FILL
  687.         RCALL   FPGA_REG
  688.         DEC     COUNT
  689.         BREQ    SCR_FA9
  690. SCR_FA1:SPICS_CLR
  691.         SPICS_SET
  692. .IFDEF DEBUG_FPGA_OUT
  693.         CALL    DBG_REPEAT_SEQ
  694. .ENDIF
  695.         DEC     COUNT
  696.         BRNE    SCR_FA1
  697. SCR_FA9:RET
  698. ;
  699. ;--------------------------------------
  700. ;Заполнение символом и атрибутом (LONG)
  701. ;in:    DATA == символ
  702. ;       TEMP == атрибут
  703. ;       W == количество
  704. SCR_FILLLONG_CHAR_ATTR:
  705.         PUSH    DATA
  706.         MOV     DATA,TEMP
  707.         LDI     TEMP,SCR_ATTR
  708.         RCALL   FPGA_REG
  709.         POP     DATA
  710. ;Заполнение символом и текущим атрибутом (LONG)
  711. ;in:    DATA == символ
  712. ;       W == количество
  713. SCR_FILLLONG_CHAR:
  714.         LDI     TEMP,SCR_CHAR
  715.         RCALL   FPGA_REG
  716.         SBIW    WL,1
  717.         BRNE    SCR_FL1
  718.         RET
  719. ;
  720. ;--------------------------------------
  721. ;Заполнение атрибутом (LONG)
  722. ;in:    TEMP == атрибут
  723. ;       W == количество
  724. SCR_FILLLONG_ATTR:
  725.         MOV     DATA,TEMP
  726.         LDI     TEMP,SCR_FILL
  727.         RCALL   FPGA_REG
  728.         SBIW    WL,1
  729.         BREQ    SCR_FL9
  730. SCR_FL1:SPICS_CLR
  731.         SPICS_SET
  732. .IFDEF DEBUG_FPGA_OUT
  733.         CALL    DBG_REPEAT_SEQ
  734. .ENDIF
  735.         SBIW    WL,1
  736.         BRNE    SCR_FL1
  737. SCR_FL9:RET
  738. ;
  739. ;
  740. ;--------------------------------------
  741. ;
  742.