Subversion Repositories pentevo

Rev

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

  1. ;01234567890123456789012345678901234567890123456789012
  2. ;            ZX Evolution Service (101106)            00
  3. ;┌───────────────┐┌──────────────────────────────────┐01    ┌───────────────┐
  4. ;│ Exit          ││..          │ <DIR>│31.12.09│23:58│02    │ Выход         │
  5. ;│ Retrieve all  ││НОВАЯП~1    │ <DIR>│31.12.09│23:58│03    │ Всё снова     │
  6. ;│ Erase chip    ││NEWFOL~1    │ <DIR>│31.12.09│23:58│04    │ Стереть м/сх. │
  7. ;│ Add job       ││testram  rom│  2048│31.12.09│23:58│05    │ Добав.задание │
  8. ;│ Execute jobs  ││filename rom│524288│31.12.09│23:58│06    │ Выполнить     │
  9. ;└───────────────┘│zxevo    rom│ 65536│31.12.09│23:58│07    └───────────────┘
  10. ;┌───────────────┐│trdos503 rom│ 16384│31.12.09│23:58│08    ┌───────────────┐
  11. ;│ Chip: M29F040 ││bigfile  bin│3214 K│31.12.09│23:58│09    │ ChipID: 20 E2 │
  12. ;│ CRC: 12345678 ││verybig  bin│4095 M│31.12.09│23:58│10    │ CRC: 12345678 │
  13. ;│ SDcard: FAT32 ││some     rom│   123│31.12.09│23:58│11    │  No SD-card!  │
  14. ;│ Erase...      ││onemore  bin│  9876│31.12.09│23:58│12    │ Verify...     │
  15. ;└───────────────┘└──────────────────────────────────┘13    └───────────────┘
  16. ;┌────────────────── [√] Erase chip ─────────────────┐14
  17. ;│gluk     rom trdos610 rom basic128 rom basic48  rom│15     секторов(1)  нач.кластер(4)  имя(8+3)  |  итого на ячейку 16
  18. ;│............ ............ ............ ............│16                                            |  итого на всё   512
  19. ;│............ ............ ............ ............│17
  20. ;│............ ............ ............ ............│18
  21. ;│............ ............ ............ ............│19
  22. ;│............ ............ ............ ............│20
  23. ;│............ ............ ............ ............│21
  24. ;│............ ............ ............ ............│22
  25. ;└───────────────────────────────────────────────────┘23
  26. ;               http://www.NedoPC.com/                24
  27.  
  28.  
  29. MSG_FL_CHIP:
  30.         .DB     $16, 2, 9,$15,$9F,"Chip",0
  31. MSG_FL_ID:
  32.         .DB     "ID: ",0,0
  33. MSG_FL_M29F040:
  34.         .DB     ": M29F040",0
  35. MSG_FL_AM29F040:
  36.         .DB     ":Am29F040",0
  37. MSG_FL_CRC:
  38.         .DB     $16, 2,10,$15,$9F,"CRC: "        ,0,0
  39. MSG_FL_SDCARD:
  40.         .DB     $16, 2,11,        "SDcard: FAT"  ,0,0
  41. MSG_FL_ERASECHIP:
  42.         .DB     $16,19,14,$15,$9F," [",$FB,"] Erase chip ",0
  43. MSG_FL_ERRPOS:
  44.         .DB     $16, 1,11,$15,$AE,0
  45. ;
  46. WIND_FL_MENU:
  47.         .DB     0,1,17,7,$9F,$00
  48. WIND_FL_STATUS:
  49.         .DB     0,8,17,6,$9F,$00
  50. WIND_FL_FILEPANEL:
  51.         .DB     17,1,36,13,$9F,$00
  52. WIND_FL_CONTENT:
  53.         .DB     0,14,53,10,$9F,$00
  54. WIND_FL_RESULT_OK:
  55.         .DB     11,4,31,6,$CF,$01
  56. WIND_FL_RESULT_FAIL:
  57.         .DB     11,4,31,6,$AF,$01
  58. ;
  59. FL_UNKNOWN:
  60.         .DB     "    ????   ",0
  61. FL_EMPTY:
  62.         .DB     "   empty   ",0
  63. FL_ZXBAS48:
  64.         .DB     $A8,$02,$99,$0C ;0C9902A8
  65.         .DB     "zx basic48 ",0
  66. FL_ZXBAS128:
  67.         .DB     $59,$D5,$91,$5C ;5C91D559
  68.         .DB     "zx basic128",0
  69. FL_TRDOS:
  70.         .DB     $E3,$39,$3C,$F2 ;F23C39E3
  71.         .DB     "tr-dos     ",0
  72. FL_ALCOGLUKPEN:
  73.         .DB     $44,$6F,$D7,$87 ;87D76F44
  74.         .DB     "alcoglukpen",0
  75. FL_HEGLUK:
  76.         .DB     "HEGL"
  77.         .DB     "hegluk     ",0
  78. FL_EVODOS:
  79.         .DB     "EVOD"
  80.         .DB     "evodos     ",0
  81. FL_ATM2CPM:
  82.         .DB     $1E,$65,$1E,$B3 ;B31E651E
  83.         .DB     "atm2_cpm   ",0
  84. FL_XBIOSMENU:
  85.         .DB     $BC,$A4,$2C,$29 ;292CA4BC
  86.         .DB     "xbios stmnu",0
  87. FL_VTRDOS:
  88.         .DB     $27,$2E,$23,$68 ;68232E27
  89.         .DB     "vtr-dos    ",0
  90. ;
  91. MSG_FP_DIR:
  92.         .DB     " <DIR>",$B3,0
  93. ;
  94. ;
  95. ;
  96. ;--------------------------------------
  97. ;
  98. .EQU    FL_CONTENT      =MEGABUFFER
  99. .EQU    FL_BUFFER       =MEGABUFFER+512
  100. .DSEG
  101. FL_TMP0:        .BYTE   2
  102. FL_TMP2:        .BYTE   1
  103. .CSEG
  104. ;
  105. ;======================================
  106. ;чтение ID Flash-ROM чипа
  107. ;out:   ZL,ZH
  108. F_ID:   RCALL   F_RST
  109.         LDI     DATA,$90
  110.         RCALL   F_CMD
  111.         LDI     TEMP,FLASH_CTRL
  112.         LDI     DATA,0B00000011
  113.         RCALL   FPGA_REG
  114.         LDI     WL,$00
  115.         LDI     WH,$00
  116.         LDI     TMP2,$00
  117.         RCALL   F_IN
  118.         MOV     ZL,DATA
  119.         LDI     WL,$01
  120.         RCALL   F_IN
  121.         MOV     ZH,DATA
  122.         RJMP    F_RST
  123. ;
  124. ;--------------------------------------
  125. ;запись 512 байт во Flash-ROM из буфера BUFSECT
  126. ;in:    WL,WH == address (LO,MID)
  127. ;out:   W+512
  128. F_WRITE512:
  129.         LDIZ    BUFSECT
  130.         LDIX    512
  131.  
  132. F_W5122:LD      DATA,Z
  133.         CPI     DATA,$FF
  134.         BREQ    F_W5123
  135.         LDI     DATA,$A0
  136.         RCALL   F_CMD
  137.         LDI     TEMP,FLASH_CTRL
  138.         LDI     DATA,0B00000001
  139.         RCALL   FPGA_REG
  140.         LDI     TEMP,FLASH_LOADDR
  141.         MOV     DATA,WL
  142.         RCALL   FPGA_REG
  143.         LDI     TEMP,FLASH_MIDADDR
  144.         MOV     DATA,WH
  145.         RCALL   FPGA_REG
  146.         LDI     TEMP,FLASH_DATA
  147.         LD      DATA,Z
  148.         RCALL   FPGA_REG
  149.         LDI     TEMP,FLASH_CTRL
  150.         LDI     DATA,0B00000101
  151.         RCALL   FPGA_REG
  152.         LDI     DATA,0B00000001
  153.         RCALL   FPGA_SAME_REG
  154.         LDI     DATA,0B00000011
  155.         RCALL   FPGA_SAME_REG
  156.         LDI     TEMP,FLASH_DATA
  157.         RCALL   FPGA_REG
  158. F_W5121:RCALL   FPGA_SAME_REG
  159.         LD      TEMP,Z
  160.         EOR     DATA,TEMP
  161.         SBRC    DATA,7
  162.         RJMP    F_W5121
  163.  
  164. F_W5123:ADIW    ZL,1
  165.         ADIW    WL,1
  166.         SBIW    XL,1
  167.         BRNE    F_W5122
  168.  
  169.         RET
  170. ;
  171. ;--------------------------------------
  172. ;стирание всего чипа Flash-ROM
  173. F_CHIPERASE:
  174.         LDI     DATA,$80
  175.         RCALL   F_CMD
  176.         LDI     DATA,$10
  177.         RCALL   F_CMD
  178. F_ERAS1:LDI     TEMP,FLASH_CTRL
  179.         LDI     DATA,0B00000011
  180.         RCALL   FPGA_REG
  181.         LDI     TEMP,FLASH_DATA
  182.         RCALL   FPGA_REG
  183. F_ERAS9:RCALL   FPGA_SAME_REG
  184.         SBRS    DATA,7
  185.         RJMP    F_ERAS9
  186. ;
  187. ; - - - - - - - - - - - - - - - - - - -
  188. ;сброс Flash-ROM чипа
  189. F_RST:  LDI     DATA,$F0
  190.         RCALL   F_CMD
  191.         DELAY_US 5
  192.         LDI     TEMP,FLASH_CTRL
  193.         LDI     DATA,0B00000011
  194.         RCALL   FPGA_REG
  195.         RET
  196. ;
  197. ;--------------------------------------
  198. ;комманда в Flash-ROM чип
  199. ;in:    DATA == instructions
  200. F_CMD:  PUSH    DATA
  201.         LDI     TEMP,FLASH_CTRL
  202.         LDI     DATA,0B00000001
  203.         RCALL   FPGA_REG
  204.         LDI     TEMP,FLASH_LOADDR
  205.         LDI     DATA,$55
  206.         RCALL   FPGA_REG
  207.         LDI     TEMP,FLASH_MIDADDR
  208.         LDI     DATA,$55
  209.         RCALL   FPGA_REG
  210.         LDI     TEMP,FLASH_DATA
  211.         LDI     DATA,$AA
  212.         RCALL   FPGA_REG
  213.         LDI     TEMP,FLASH_CTRL
  214.         LDI     DATA,0B00000101
  215.         RCALL   FPGA_REG
  216.         LDI     DATA,0B00000001
  217.         RCALL   FPGA_SAME_REG
  218.         LDI     TEMP,FLASH_LOADDR
  219.         LDI     DATA,$AA
  220.         RCALL   FPGA_REG
  221.         LDI     TEMP,FLASH_MIDADDR
  222.         LDI     DATA,$2A
  223.         RCALL   FPGA_REG
  224.         LDI     TEMP,FLASH_DATA
  225.         LDI     DATA,$55
  226.         RCALL   FPGA_REG
  227.         LDI     TEMP,FLASH_CTRL
  228.         LDI     DATA,0B00000101
  229.         RCALL   FPGA_REG
  230.         LDI     DATA,0B00000001
  231.         RCALL   FPGA_SAME_REG
  232.         LDI     TEMP,FLASH_LOADDR
  233.         LDI     DATA,$55
  234.         RCALL   FPGA_REG
  235.         LDI     TEMP,FLASH_MIDADDR
  236.         LDI     DATA,$55
  237.         RCALL   FPGA_REG
  238.         POP     DATA
  239. F_WRD:  LDI     TEMP,FLASH_DATA
  240.         RCALL   FPGA_REG
  241.         LDI     TEMP,FLASH_CTRL
  242.         LDI     DATA,0B00000101
  243.         RCALL   FPGA_REG
  244.         LDI     DATA,0B00000001
  245.         RJMP    FPGA_SAME_REG
  246. ;
  247. ;--------------------------------------
  248. ;чтение одного байта Flash-ROM
  249. ;in:    WL,WH,TMP2 == address
  250. ;out:   DATA == data
  251. F_IN:   LDI     TEMP,FLASH_HIADDR
  252.         MOV     DATA,TMP2
  253.         RCALL   FPGA_REG
  254. F_IN2:  LDI     TEMP,FLASH_MIDADDR
  255.         MOV     DATA,WH
  256.         RCALL   FPGA_REG
  257.         LDI     TEMP,FLASH_LOADDR
  258.         MOV     DATA,WL
  259.         RCALL   FPGA_REG
  260.         LDI     TEMP,FLASH_DATA
  261.         LDI     DATA,$FF
  262.         RJMP    FPGA_REG
  263. ;
  264. ;--------------------------------------
  265. ;in:    WH,TMP2 - адрес (mid,hi) в Flash-ROM
  266. ;       Z - куда (в ОЗУ AVR-а)
  267. ;       X - сколько байт
  268. F_READFLASH:; + ещё посчитать crc32, + ещё ...
  269.         LDI     TEMP,FLASH_CTRL
  270.         LDI     DATA,0B00001011
  271.         RCALL   FPGA_REG
  272.         CLR     WL
  273.         RCALL   F_IN
  274.         RJMP    F_RDFL2
  275. F_RDFL1:RCALL   FPGA_SAME_REG
  276. F_RDFL2:ST      Z+,DATA
  277.         AND     COUNT,DATA
  278.         CALL    CRC32_UPDATE
  279.         ADIW    WL,1
  280.         ADC     TMP2,NULL
  281.         SBIW    XL,1
  282.         BRNE    F_RDFL1
  283.         RET
  284. ;
  285. ;======================================
  286. ;
  287. .EQU    CRC32_0         =0
  288. .EQU    CRC32_1         =1
  289. .EQU    CRC32_2         =2
  290. .EQU    CRC32_3         =3
  291. .EQU    FLSH_ADR1       =4
  292. .EQU    FLSH_ADR2       =5
  293. .EQU    FLSH_COUNT      =6
  294. .EQU    FLFP_BUFADR0    =7
  295. .EQU    FLFP_BUFADR1    =8
  296. .EQU    FLFP_TOTAL      =9
  297. .EQU    FLFP_TOP        =10
  298. .EQU    FLFP_SELECT     =11
  299. .EQU    FLFP_CURSOR     =12
  300. .EQU    FLSH_TEMP0      =13
  301. .EQU    FLSH_TEMP1      =14
  302. .EQU    FLSH_TEMP2      =15
  303. .EQU    FLSH_TEMP3      =16
  304. .EQU    FLSH_START      =17
  305. .EQU    FLSH_SIZE       =18
  306. .EQU    FLSH_ERASE      =19
  307. .EQU    FLMNU_FLAGS     =20
  308. .EQU    FLMNU_CURSOR    =21
  309. .EQU    FLMEMSIZE       =22
  310. ;
  311. .EQU    FLFP_HEIGHT     =11
  312. .EQU    FLFP_WIDTH      =34
  313. .EQU    FLFP_XPOS       =18
  314. .EQU    FLFP_YPOS       =2
  315. ;
  316. FLASHER:
  317.         GETMEM  FLMEMSIZE
  318. FL_REVERT:
  319.         ANDI    FLAGS1,0B11111100
  320.         STH     FLSH_ERASE,NULL
  321.         STH     FLMNU_FLAGS,NULL
  322.         LDI     DATA,0B10000010
  323.         STH     FLMNU_CURSOR,DATA
  324.  
  325.         LDIX    FL_CONTENT
  326.         LDI     COUNT,32
  327. FL_CLRCNT2:
  328.         LDI     DATA,$80
  329.         ST      X+,DATA
  330.         LDI     TEMP,15
  331. FL_CLRCNT1:
  332.         ST      X+,NULL
  333.         DEC     TEMP
  334.         BRNE    FL_CLRCNT1
  335.         DEC     COUNT
  336.         BRNE    FL_CLRCNT2
  337.  
  338.         LDIZ    WIND_FL_MENU*2
  339.         CALL    WINDOW
  340.         LDIZ    WIND_FL_STATUS*2
  341.         CALL    WINDOW
  342.         LDIZ    WIND_FL_FILEPANEL*2
  343.         CALL    WINDOW
  344.         LDIZ    WIND_FL_CONTENT*2
  345.         CALL    WINDOW
  346.  
  347.         LDIZ    MLMSG_FL_MENU*2
  348.         CALL    SCR_PRINTMLSTR
  349.         RCALL   FLMENU_PUTCURSOR
  350.         LDI     DATA,0B00001111
  351.         STH     FLMNU_FLAGS,DATA
  352. ; - - - - - - - - - - - - - - - - - - -
  353.         LDIZ    MSG_FL_CHIP*2
  354.         CALL    SCR_PRINTSTRZ
  355.  
  356.         RCALL   F_ID
  357.         CPI     ZL,$01
  358.         BRNE    FL_DET_CHIP1
  359.         CPI     ZH,$A4
  360.         BRNE    FL_DET_CHIP1
  361.         LDIZ    MSG_FL_AM29F040*2
  362.         RJMP    FL_DET_CHIP2
  363. FL_DET_CHIP1:
  364.         CPI     ZL,$20
  365.         BRNE    FL_DET_CHIP8
  366.         CPI     ZH,$E2
  367.         BRNE    FL_DET_CHIP8
  368.         LDIZ    MSG_FL_M29F040*2
  369. FL_DET_CHIP2:
  370.         CALL    SCR_PRINTSTRZ
  371.         RJMP    FL_DET_CHIP9
  372.  
  373. FL_DET_CHIP8:
  374.         PUSHZ
  375.         LDIZ    MSG_FL_ID*2
  376.         CALL    SCR_PRINTSTRZ
  377.         POPZ
  378.         MOV     DATA,ZL
  379.         CALL    HEXBYTE
  380.         LDI     DATA,$20
  381.         CALL    PUTCHAR
  382.         MOV     DATA,ZH
  383.         CALL    HEXBYTE
  384. FL_DET_CHIP9:
  385. ; - - - - - - - - - - - - - - - - - - -
  386.         LDIZ    MLMSG_FL_READROM*2
  387.         CALL    SCR_PRINTMLSTR
  388.         STH     FLSH_START,FF
  389.         STH     FLSH_SIZE,NULL
  390.         RCALL   FL_SHOWCONTENT
  391.  
  392.         RCALL   CRC32_INIT
  393.         CLR     COUNT
  394.         CLR     WH
  395.         CLR     TMP2
  396. FL_DET_ROM_6:
  397.         STH     FLSH_COUNT,COUNT
  398.         STH     FLSH_ADR1,WH
  399.         STH     FLSH_ADR2,TMP2
  400.         LDIZ    FL_UNKNOWN*2
  401.         STSZ    FL_TMP0
  402.  
  403.         LDIZ    FL_BUFFER
  404.         LDIX    $0400
  405.         SER     COUNT
  406.         RCALL   F_READFLASH
  407.         STS     FL_TMP2,COUNT
  408.  
  409.         GETMEM  4
  410.         LDIZ    FL_BUFFER+$0096
  411.         LDIX    $016F
  412.         RCALL   RAM_CRC32
  413.         LDIZ    FL_ZXBAS48*2
  414.         RCALL   FL_CRC_CMP
  415.         BREQ    FL_DET_ROM_1
  416.  
  417.         LDIZ    FL_BUFFER+$0009
  418.         LDIX    $002F
  419.         RCALL   RAM_CRC32
  420.         LDIZ    FL_ZXBAS128*2
  421.         RCALL   FL_CRC_CMP
  422.         BREQ    FL_DET_ROM_1
  423.  
  424.         LDIZ    FL_BUFFER+$0363
  425.         LDIX    $0008
  426.         RCALL   RAM_CRC32
  427.         LDIZ    FL_VTRDOS*2
  428.         RCALL   FL_CRC_CMP
  429.         BREQ    FL_DET_ROM_1
  430.  
  431.         LDIZ    FL_BUFFER+$0000
  432.         LDIX    $0007
  433.         RCALL   RAM_CRC32
  434.         LDIZ    FL_XBIOSMENU*2
  435.         RCALL   FL_CRC_CMP
  436.         BREQ    FL_DET_ROM_1
  437.  
  438.         LDIZ    FL_BUFFER+$0000
  439.         LDIX    $0038
  440.         RCALL   RAM_CRC32
  441.         LDIZ    FL_ATM2CPM*2
  442.         RCALL   FL_CRC_CMP
  443.         BRNE    FL_DET_ROM_2
  444. FL_DET_ROM_1:
  445.         STSZ    FL_TMP0
  446. FL_DET_ROM_2:
  447.         FREEMEM 4
  448.  
  449.         CLR     WL
  450.         LDH     WH,FLSH_ADR1
  451.         ADDI    WH,$04
  452.         LDH     TMP2,FLSH_ADR2
  453.         LDIX    $3800
  454.         LDI     TEMP,FLASH_CTRL
  455.         LDI     DATA,0B00001011
  456.         RCALL   FPGA_REG
  457.         LDS     COUNT,FL_TMP2
  458.         RCALL   F_IN
  459.         RJMP    FL_CHKEMPT2
  460. FL_CHKEMPT1:
  461.         RCALL   FPGA_SAME_REG
  462. FL_CHKEMPT2:
  463.         AND     COUNT,DATA
  464.         RCALL   CRC32_UPDATE
  465.         ADIW    WL,1
  466.         SBIW    XL,1
  467.         BRNE    FL_CHKEMPT1
  468.         STS     FL_TMP2,COUNT
  469.  
  470.         LDH     WH,FLSH_ADR1
  471.         ADDI    WH,$3C
  472.         LDH     TMP2,FLSH_ADR2
  473.         LDIZ    FL_BUFFER
  474.         LDIX    $0400
  475.         RCALL   F_READFLASH
  476.         LDIZ    FL_EMPTY*2
  477.         INC     COUNT
  478.         BRNE    FL_DET_ROM_3
  479.         STSZ    FL_TMP0
  480. FL_DET_ROM_3:
  481.  
  482.         GETMEM  4
  483.         LDIZ    FL_BUFFER+$03F8
  484.         LDD     R0,Z+0
  485.         LDD     R1,Z+1
  486.         LDD     R2,Z+2
  487.         LDD     R3,Z+3
  488.         LDIZ    FL_HEGLUK*2
  489.         RCALL   FL_CRC_CMP
  490.         BREQ    FL_DET_ROM_4
  491.         LDIZ    FL_EVODOS*2
  492.         RCALL   FL_CRC_CMP
  493.         BREQ    FL_DET_ROM_4
  494.  
  495.         LDIZ    FL_BUFFER+$012F
  496.         LDIX    $0209
  497.         RCALL   RAM_CRC32
  498.         LDIZ    FL_ALCOGLUKPEN*2
  499.         RCALL   FL_CRC_CMP
  500.         BREQ    FL_DET_ROM_4
  501.  
  502.         LDIZ    FL_BUFFER+$02C2
  503.         LDIX    $012E
  504.         RCALL   RAM_CRC32
  505.         LDIZ    FL_TRDOS*2
  506.         RCALL   FL_CRC_CMP
  507.         BRNE    FL_DET_ROM_5
  508. FL_DET_ROM_4:
  509.         STSZ    FL_TMP0
  510. FL_DET_ROM_5:
  511.         FREEMEM 4
  512.  
  513.         LDSZ    FL_TMP0
  514.         LDIX    FL_CONTENT+5
  515.         LDH     DATA,FLSH_COUNT
  516.         LDI     TEMP,16
  517.         MUL     DATA,TEMP
  518.         ADD     XL,R0
  519.         ADC     XH,R1
  520.         LDI     COUNT,11
  521. FL_DET_ROM_8:
  522.         LPM     DATA,Z+
  523.         ST      X+,DATA
  524.         DEC     COUNT
  525.         BRNE    FL_DET_ROM_8
  526.         RCALL   FL_SHOWCONTENT
  527.  
  528.         CALL    INKEY
  529.         BREQ    FL_DET_ROM_7
  530.         SBRC    TEMP,PS2K_BIT_EXTKEY
  531.         RJMP    FL_DET_ROM_7
  532.         CPI     DATA,KEY_ESC
  533.         BRNE    FL_DET_ROM_7
  534.         RJMP    FLSH_EXIT
  535. FL_DET_ROM_7:
  536.         LDH     WH,FLSH_ADR1
  537.         LDH     TMP2,FLSH_ADR2
  538.         LDI     TEMP,$40
  539.         ADD     WH,TEMP
  540.         ADC     TMP2,NULL
  541.         LDH     COUNT,FLSH_COUNT
  542.         INC     COUNT
  543.         SBRS    COUNT,5 ; COUNT==32 ?
  544.         RJMP    FL_DET_ROM_6
  545.  
  546.         RCALL   CRC32_RELEASE
  547.         LDIZ    MSG_FL_CRC*2
  548.         CALL    SCR_PRINTSTRZ
  549.         LDH     DATA,CRC32_3
  550.         CALL    HEXBYTE
  551.         LDH     DATA,CRC32_2
  552.         CALL    HEXBYTE
  553.         LDH     DATA,CRC32_1
  554.         CALL    HEXBYTE
  555.         LDH     DATA,CRC32_0
  556.         CALL    HEXBYTE
  557. ; - - - - - - - - - - - - - - - - - - -
  558.         LDIZ    MLMSG_FL_SDINIT*2
  559.         CALL    SCR_PRINTMLSTR
  560.  
  561.         IN      TEMP,SPL
  562.         STS     GLB_STACK+0,TEMP
  563.         IN      TEMP,SPH
  564.         STS     GLB_STACK+1,TEMP
  565.         STS     GLB_Y+0,YL
  566.         STS     GLB_Y+1,YH
  567.         LDIZ    FL_ERRHANDLER
  568.         RCALL   SD_FAT_INIT
  569.  
  570.         PUSHX
  571.         PUSHW
  572.         LDIZ    MSG_FL_SDCARD*2
  573.         CALL    SCR_PRINTSTRZ
  574.         LDS     TMP2,FAT_CAL_FAT
  575.         LDI     DATA,$31 ;"1"
  576.         LDI     TEMP,$32 ;"2"
  577.         TST     TMP2
  578.         BREQ    FP_SDI1
  579.         LDI     TEMP,$36 ;"6"
  580.         DEC     TMP2
  581.         BREQ    FP_SDI1
  582.         LDI     DATA,$33 ;"3"
  583.         LDI     TEMP,$32 ;"2"
  584. FP_SDI1:PUSH    TEMP
  585.         CALL    SCR_PUTCHAR
  586.         POP     DATA
  587.         CALL    SCR_PUTCHAR
  588.         POPW
  589.         POPX
  590.  
  591.         RCALL   FP_RD_DIR
  592.         STH     FLFP_CURSOR,FF
  593.         RCALL   FP_OUT
  594.         STH     FLFP_CURSOR,NULL
  595. ; - - - - - - - - - - - - - - - - - - -
  596. FLMENU1:LDH     DATA,FLMNU_CURSOR
  597.         ANDI    DATA,0B00011111
  598. FLMENU2:STH     FLMNU_CURSOR,DATA
  599.         RCALL   FLMENU_PUTCURSOR
  600. FLMENU0:CALL    WAITKEY
  601.         CPI     DATA,KEY_UP
  602.         BREQ    FLMENU_UP
  603.         CPI     DATA,KEY_DOWN
  604.         BREQ    FLMENU_DOWN
  605.         CPI     DATA,KEY_ENTER
  606.         BREQ    FLMENU_ENTER
  607.         CPI     DATA,KEY_ESC
  608.         BRNE    FLMENU0
  609.         LDI     DATA,0B00000001
  610.         RJMP    FLMENU2
  611. ;
  612. FLMENU_UP:
  613.         LDH     DATA,FLMNU_CURSOR
  614. FLMENU_U1:
  615.         LSR     DATA
  616.         BRCS    FLMENU0
  617.         LDH     TEMP,FLMNU_FLAGS
  618.         AND     TEMP,DATA
  619.         BRNE    FLMENU_U2
  620.         RJMP    FLMENU_U1
  621. FLMENU_U2:
  622.         STH     FLMNU_CURSOR,DATA
  623.         RJMP    FLMENU1
  624. ;
  625. FLMENU_DOWN:
  626.         LDH     DATA,FLMNU_CURSOR
  627. FLMENU_D1:
  628.         LSL     DATA
  629.         BRCS    FLMENU0
  630.         LDH     TEMP,FLMNU_FLAGS
  631.         AND     TEMP,DATA
  632.         BRNE    FLMENU_U2
  633.         RJMP    FLMENU_D1
  634. ;
  635. FLMENU_ENTER:
  636.         LDH     DATA,FLMNU_CURSOR
  637.         LDH     TEMP,FLMNU_FLAGS
  638.         AND     DATA,TEMP
  639.         BREQ    FLMENU0
  640.         LSR     DATA
  641.         BRCC    FLMENU_E1
  642. FLSH_EXIT:
  643.         FREEMEM FLMEMSIZE
  644.         RET
  645. FLMENU_E1:
  646.         LSR     DATA
  647.         BRCC    FLMENU_E2
  648.         RJMP    FL_REVERT
  649. FLMENU_E2:
  650.         LSR     DATA
  651.         BRCC    FLMENU_E3
  652.         RJMP    FL_ERASEJOB
  653. FLMENU_E3:
  654.         LSR     DATA
  655.         BRCC    FLMENU_E4
  656.         LDH     DATA,FLMNU_CURSOR
  657.         ORI     DATA,0B10000000
  658.         STH     FLMNU_CURSOR,DATA
  659.         RCALL   FLMENU_PUTCURSOR
  660.         RJMP    FP_FS1
  661. FLMENU_E4:
  662.         LSR     DATA
  663.         BRCS    FLMENU_E5
  664.         RJMP    FLMENU0
  665. ;
  666. FLMENU_E5: ; execute job(s)
  667.         LDH     DATA,FLMNU_CURSOR
  668.         ORI     DATA,0B10000000
  669.         STH     FLMNU_CURSOR,DATA
  670.         RCALL   FLMENU_PUTCURSOR
  671.  
  672.         LDIZ    MLMSG_FL_SURE*2
  673.         CALL    SCR_PRINTMLSTR
  674.         CALL    WAITKEY
  675.         SBRC    TEMP,PS2K_BIT_EXTKEY
  676.         RJMP    FL_EX01
  677.         CPI     DATA,KEY_Y
  678.         BREQ    FL_EX09
  679. FL_EX01:LDI     XL,2
  680.         LDI     XH,12
  681.         CALL    SCR_SET_CURSOR
  682.         LDI     DATA,$20
  683.         LDI     TEMP,$9F
  684.         LDI     COUNT,13
  685.         CALL    SCR_FILL_CHAR_ATTR
  686.         RJMP    FLMENU1
  687. FL_EX09:
  688. ;
  689.         LDI     TEMP,$0E
  690.         CALL    SCR_SET_ATTR
  691.         LDH     DATA,FLSH_ERASE
  692.         LDI     COUNT,0
  693. FL_EX12:LSR     DATA
  694.         BRCC    FL_EX11
  695.  
  696.         PUSH    DATA
  697.         PUSH    COUNT
  698.         LSL     COUNT
  699.         LSL     COUNT
  700.         PUSH    COUNT
  701.         RCALL   FL_SHW_SETCURSOR
  702.         LDI     DATA,$45;"E"
  703.         LDI     COUNT,12
  704.         CALL    SCR_FILL_CHAR
  705.         POP     COUNT
  706.         INC     COUNT
  707.         PUSH    COUNT
  708.         RCALL   FL_SHW_SETCURSOR
  709.         LDI     DATA,$45;"E"
  710.         LDI     COUNT,12
  711.         CALL    SCR_FILL_CHAR
  712.         POP     COUNT
  713.         INC     COUNT
  714.         PUSH    COUNT
  715.         RCALL   FL_SHW_SETCURSOR
  716.         LDI     DATA,$45;"E"
  717.         LDI     COUNT,12
  718.         CALL    SCR_FILL_CHAR
  719.         POP     COUNT
  720.         INC     COUNT
  721.         RCALL   FL_SHW_SETCURSOR
  722.         LDI     DATA,$45;"E"
  723.         LDI     COUNT,12
  724.         CALL    SCR_FILL_CHAR
  725.         POP     COUNT
  726.         POP     DATA
  727.  
  728. FL_EX11:INC     COUNT
  729.         CPI     COUNT,8
  730.         BRNE    FL_EX12
  731.  
  732.         LDIZ    MLMSG_FL_ERASE*2
  733.         CALL    SCR_PRINTMLSTR
  734.         LDH     DATA,FLSH_ERASE
  735.         CPI     DATA,$FF
  736.         BRNE    FL_EX15
  737.         RCALL   F_CHIPERASE
  738.         RJMP    FL_EX20
  739. FL_EX15:
  740.         LDI     TMP2,$FF
  741. FL_EX16:INC     TMP2
  742.         LSR     DATA
  743.         BRCC    FL_EX16
  744.         PUSH    DATA
  745.         PUSH    TMP2
  746.         LDI     DATA,$80
  747.         RCALL   F_CMD
  748.         LDI     TEMP,FLASH_HIADDR
  749.         POP     DATA
  750.         PUSH    DATA
  751.         CALL    FPGA_REG
  752.         LDI     DATA,$30
  753.         RCALL   F_CMD
  754.         POP     TMP2
  755.         POP     DATA
  756. FL_EX18:INC     TMP2
  757.         CPI     TMP2,8
  758.         BRCC    FL_EX17
  759.         LSR     DATA
  760.         BRCC    FL_EX18
  761.         PUSH    DATA
  762.         PUSH    TMP2
  763.         LDI     TEMP,FLASH_HIADDR
  764.         MOV     DATA,TMP2
  765.         CALL    FPGA_REG
  766.         LDI     DATA,$30
  767.         RCALL   F_WRD
  768.         POP     TMP2
  769.         POP     DATA
  770.         RJMP    FL_EX18
  771. FL_EX17:
  772.         LDI     TEMP,FLASH_CTRL
  773.         LDI     DATA,0B00000011
  774.         CALL    FPGA_REG
  775.         LDI     TEMP,FLASH_DATA
  776.         CALL    FPGA_REG
  777. FL_EX19:CALL    FPGA_SAME_REG
  778.         SBRS    DATA,3
  779.         RJMP    FL_EX19
  780.         RCALL   F_ERAS1
  781. FL_EX20:
  782. ;
  783.         LDIZ    MLMSG_FL_WRITE*2
  784.         CALL    SCR_PRINTMLSTR
  785.         LDI     TEMP,$0A
  786.         CALL    SCR_SET_ATTR
  787.  
  788.         LDI     COUNT,0
  789. FL_EX30:STH     FLSH_COUNT,COUNT
  790.         LDIZ    FL_CONTENT
  791.         LDI     TEMP,16
  792.         MUL     TEMP,COUNT
  793.         ADD     ZL,R0
  794.         ADC     ZH,R1
  795.         LD      WL,Z
  796.         ANDI    WL,$3F
  797.         BREQ    FL_EX390
  798.         CPI     WL,33
  799.         BRCS    FL_EX31
  800. FL_EX390:RJMP   FL_EX39
  801. FL_EX31:STH     FLSH_SIZE,WL
  802.         CLR     WH
  803.         CLR     XL
  804.         CLR     XH
  805.         LD      TEMP,Z
  806.         SBRC    TEMP,6
  807.         ADIW    WL,32
  808.         SBIW    WL,1
  809.         LDS     DATA,FAT_BYTSSEC
  810.         DEC     DATA
  811.         AND     DATA,WL
  812.         INC     DATA
  813.         STS     FAT_MPHWOST,DATA
  814.         LDS     DATA,FAT_BYTSSEC
  815.         RCALL   BCDE_A
  816.         STSW    FAT_KOL_CLS+0
  817.         STSX    FAT_KOL_CLS+2
  818.         STS     FAT_NUMSECK,NULL
  819.         LDD     WL,Z+1
  820.         LDD     WH,Z+2
  821.         LDD     XL,Z+3
  822.         LDD     XH,Z+4
  823.         STSW    FAT_TFILCLS+0
  824.         STSX    FAT_TFILCLS+2
  825.  
  826.         LD      TEMP,Z
  827.         SBRS    TEMP,6
  828.         RJMP    FL_EX32
  829.         LDI     COUNT,32
  830. FL_EX33:PUSH    COUNT
  831.         RCALL   NEXTSEC
  832.         POP     COUNT
  833.         DEC     COUNT
  834.         BRNE    FL_EX33
  835.  
  836. FL_EX32:LDH     COUNT,FLSH_COUNT
  837.         RCALL   FL_SHW_SETCURSOR
  838.         CLR     WH
  839.         LDH     TMP2,FLSH_COUNT
  840.         LSR     TMP2
  841.         ROR     WH
  842.         LSR     TMP2
  843.         ROR     WH
  844.         LDI     TEMP,FLASH_HIADDR
  845.         MOV     DATA,TMP2
  846.         CALL    FPGA_REG
  847.         LDIX    1365 ;16384/12
  848. FL_EX35:STH     FLSH_TEMP0,XL
  849.         STH     FLSH_TEMP1,XH
  850.         PUSH    WH
  851.         RCALL   NEXTSEC
  852.         POP     WH
  853.         CLR     WL
  854.         RCALL   F_WRITE512
  855.         LDH     XL,FLSH_TEMP0
  856.         LDH     XH,FLSH_TEMP1
  857.         SUBI    XH,2 ;HIGH(512)
  858.         BRCC    FL_EX34
  859.         LDI     DATA,$57;"W"
  860.         CALL    SCR_PUTCHAR
  861.         LDI     TEMP,LOW(1365)
  862.         ADD     XL,TEMP
  863.         LDI     TEMP,HIGH(1365)
  864.         ADC     XH,TEMP
  865. FL_EX34:LDH     TEMP,FLSH_SIZE
  866.         DEC     TEMP
  867.         STH     FLSH_SIZE,TEMP
  868.         BRNE    FL_EX35
  869.  
  870. FL_EX39:LDH     COUNT,FLSH_COUNT
  871.         INC     COUNT
  872.         SBRS    COUNT,5 ;COUNT=32
  873.         RJMP    FL_EX30
  874. ;
  875.         RCALL   F_RST
  876.         LDI     TEMP,FLASH_CTRL
  877.         LDI     DATA,0B00000011
  878.         CALL    FPGA_REG
  879.  
  880.         LDIZ    MLMSG_FL_VERIFY*2
  881.         CALL    SCR_PRINTMLSTR
  882.  
  883.         LDI     COUNT,0
  884. FL_EX40:STH     FLSH_COUNT,COUNT
  885.         LDIZ    FL_CONTENT
  886.         LDI     TEMP,16
  887.         MUL     TEMP,COUNT
  888.         ADD     ZL,R0
  889.         ADC     ZH,R1
  890.         LD      WL,Z
  891.         ANDI    WL,$3F
  892.         BREQ    FL_EX490
  893.         CPI     WL,33
  894.         BRCS    FL_EX41
  895. FL_EX490:RJMP   FL_EX49
  896. FL_EX41:STH     FLSH_SIZE,WL
  897.         CLR     WH
  898.         CLR     XL
  899.         CLR     XH
  900.         LD      TEMP,Z
  901.         SBRC    TEMP,6
  902.         ADIW    WL,32
  903.         SBIW    WL,1
  904.         LDS     DATA,FAT_BYTSSEC
  905.         DEC     DATA
  906.         AND     DATA,WL
  907.         INC     DATA
  908.         STS     FAT_MPHWOST,DATA
  909.         LDS     DATA,FAT_BYTSSEC
  910.         RCALL   BCDE_A
  911.         STSW    FAT_KOL_CLS+0
  912.         STSX    FAT_KOL_CLS+2
  913.         STS     FAT_NUMSECK,NULL
  914.         LDD     WL,Z+1
  915.         LDD     WH,Z+2
  916.         LDD     XL,Z+3
  917.         LDD     XH,Z+4
  918.         STSW    FAT_TFILCLS+0
  919.         STSX    FAT_TFILCLS+2
  920.  
  921.         LD      TEMP,Z
  922.         SBRS    TEMP,6
  923.         RJMP    FL_EX42
  924.         LDI     COUNT,32
  925. FL_EX43:PUSH    COUNT
  926.         RCALL   NEXTSEC
  927.         POP     COUNT
  928.         DEC     COUNT
  929.         BRNE    FL_EX43
  930.  
  931. FL_EX42:LDH     COUNT,FLSH_COUNT
  932.         RCALL   FL_SHW_SETCURSOR
  933.         CLR     WH
  934.         LDH     TMP2,FLSH_COUNT
  935.         LSR     TMP2
  936.         ROR     WH
  937.         LSR     TMP2
  938.         ROR     WH
  939.         LDI     TEMP,FLASH_HIADDR
  940.         MOV     DATA,TMP2
  941.         CALL    FPGA_REG
  942.         STH     FLSH_TEMP2,NULL
  943.         STH     FLSH_TEMP3,NULL
  944.         LDIX    1365 ;16384/12
  945. FL_EX45:STH     FLSH_TEMP0,XL
  946.         STH     FLSH_TEMP1,XH
  947.         PUSH    WH
  948.         RCALL   NEXTSEC
  949.         POP     WH
  950.         CLR     WL
  951.  
  952.         LDIZ    BUFSECT
  953.         LDIX    512
  954.         LDI     TEMP,FLASH_CTRL
  955.         LDI     DATA,0B00001011
  956.         CALL    FPGA_REG
  957.         RCALL   F_IN2
  958.         RJMP    FL_EX48
  959. FL_EX47:CALL    FPGA_SAME_REG
  960. FL_EX48:LD      TEMP,Z+
  961.         CP      DATA,TEMP
  962.         BREQ    FL_EX46
  963.         STH     FLSH_TEMP2,ONE
  964.         STH     FLSH_TEMP3,ONE
  965. FL_EX46:ADIW    WL,1
  966.         SBIW    XL,1
  967.         BRNE    FL_EX47
  968.  
  969.         LDH     XL,FLSH_TEMP0
  970.         LDH     XH,FLSH_TEMP1
  971.         SUBI    XH,2 ;HIGH(512)
  972.         BRCC    FL_EX44
  973.         LDH     DATA,FLSH_TEMP2
  974.         LDI     TEMP,$0C
  975.         SBRC    DATA,0
  976.         LDI     TEMP,$AE
  977.         CALL    SCR_SET_ATTR
  978.         LDI     DATA,$56;"V"
  979.         CALL    SCR_PUTCHAR
  980.         STH     FLSH_TEMP2,NULL
  981.         LDI     TEMP,LOW(1365)
  982.         ADD     XL,TEMP
  983.         LDI     TEMP,HIGH(1365)
  984.         ADC     XH,TEMP
  985. FL_EX44:LDH     TEMP,FLSH_SIZE
  986.         DEC     TEMP
  987.         STH     FLSH_SIZE,TEMP
  988.         BRNE    FL_EX45
  989.  
  990. FL_EX49:LDH     COUNT,FLSH_COUNT
  991.         INC     COUNT
  992.         SBRS    COUNT,5 ;COUNT=32
  993.         RJMP    FL_EX40
  994. ;
  995.         LDIZ    MLMSG_FL_COMPLETE*2
  996.         CALL    SCR_PRINTMLSTR
  997.  
  998.         LDIZ    WIND_FL_RESULT_OK*2
  999.         LDH     DATA,FLSH_TEMP3
  1000.         TST     DATA
  1001.         BREQ    FL_EX91
  1002.         LDIZ    WIND_FL_RESULT_FAIL*2
  1003. FL_EX91:CALL    WINDOW
  1004.         LDIZ    MLMSG_FLRES0*2
  1005.         CALL    SCR_PRINTMLSTR
  1006.  
  1007.         LDIZ    MLMSG_FLRES1*2
  1008.         LDH     DATA,FLSH_TEMP3
  1009.         BREQ    FL_EX92
  1010.         LDIZ    MLMSG_FLRES2*2
  1011. FL_EX92:CALL    SCR_PRINTMLSTR
  1012.  
  1013.         CALL    WAITKEY
  1014.         RJMP    FL_REVERT
  1015. ;
  1016. ;--------------------------------------
  1017. ;
  1018. FL_ERRHANDLER:
  1019.         CLI
  1020.         LDS     TEMP,GLB_STACK+0
  1021.         OUT     SPL,TEMP
  1022.         LDS     TEMP,GLB_STACK+1
  1023.         OUT     SPH,TEMP
  1024.         LDS     YL,GLB_Y+0
  1025.         LDS     YH,GLB_Y+1
  1026.         SEI
  1027.         PUSH    DATA
  1028.         LDIZ    MSG_FL_ERRPOS*2
  1029.         CALL    SCR_PRINTSTRZ
  1030.         POP     DATA
  1031.         LDIZ    MLMSG_FL_SDERROR1*2
  1032.         CPI     DATA,1
  1033.         BREQ    FL_ERRHNDL1
  1034.         LDIZ    MLMSG_FL_SDERROR2*2
  1035.         CPI     DATA,2
  1036.         BREQ    FL_ERRHNDL1
  1037.         LDIZ    MLMSG_FL_SDERROR3*2
  1038.         CPI     DATA,3
  1039.         BREQ    FL_ERRHNDL1
  1040.         LDIZ    MLMSG_FL_SDERROR4*2
  1041.         CPI     DATA,4
  1042.         BREQ    FL_ERRHNDL1
  1043.         LDIZ    MLMSG_FL_SDERRORX*2
  1044. FL_ERRHNDL1:
  1045.         CALL    SCR_PRINTMLSTR
  1046.         LDI     DATA,0B00000111
  1047.         STH     FLMNU_FLAGS,DATA
  1048.         LDI     DATA,0B00000010
  1049.         RJMP    FLMENU2
  1050. ;
  1051. ;--------------------------------------
  1052. ;
  1053. FL_ERASEJOB:
  1054.         LDIX    FL_CONTENT
  1055.         LDI     TEMP,0B00000001
  1056. FL_EJB5:LDH     DATA,FLSH_ERASE
  1057.         AND     DATA,TEMP
  1058.         BRNE    FL_EJB1
  1059.         LDH     DATA,FLSH_ERASE
  1060.         OR      DATA,TEMP
  1061.         STH     FLSH_ERASE,DATA
  1062.         LDI     COUNT,4
  1063. FL_EJB3:ST      X+,NULL
  1064.         ST      X+,NULL
  1065.         ST      X+,NULL
  1066.         ST      X+,NULL
  1067.         ST      X+,NULL
  1068.         LDIZ    FL_EMPTY*2
  1069.         LDI     WL,11
  1070. FL_EJB2:LPM     DATA,Z+
  1071.         ST      X+,DATA
  1072.         DEC     WL
  1073.         BRNE    FL_EJB2
  1074.         DEC     COUNT
  1075.         BRNE    FL_EJB3
  1076.         RJMP    FL_EJB4
  1077. FL_EJB1:ADIW    XL,32
  1078.         ADIW    XL,32
  1079. FL_EJB4:LSL     TEMP
  1080.         BRCC    FL_EJB5
  1081.         LDH     DATA,FLMNU_FLAGS
  1082.         ORI     DATA,0B00010000
  1083.         STH     FLMNU_FLAGS,DATA
  1084.         RCALL   FL_SHOWCONTENT
  1085.         RJMP    FLMENU1
  1086. ;
  1087. ;--------------------------------------
  1088. ;
  1089. FP_FS1: RCALL   FP_OUT
  1090. FP_FS0: CALL    WAITKEY
  1091.         CPI     DATA,KEY_UP
  1092.         BREQ    FP_1_UP
  1093.         CPI     DATA,KEY_DOWN
  1094.         BREQ    FP_1_DOWN
  1095.         CPI     DATA,KEY_PAGEUP
  1096.         BREQ    FP_P_UP
  1097.         CPI     DATA,KEY_PAGEDOWN
  1098.         BREQ    FP_P_DOWN
  1099.         CPI     DATA,KEY_HOME
  1100.         BREQ    FP_BEGIN
  1101.         CPI     DATA,KEY_END
  1102.         BREQ    FP_END
  1103.         CPI     DATA,KEY_ENTER
  1104.         BREQ    FP_ENTER
  1105.         CPI     DATA,KEY_ESC
  1106.         BRNE    FP_FS0
  1107.  
  1108.         LDH     XH,FLFP_CURSOR
  1109.         ADDI    XH,FLFP_YPOS
  1110.         LDI     XL,FLFP_XPOS
  1111.         CALL    SCR_SET_CURSOR
  1112.         LDI     TEMP,$9F
  1113.         LDI     COUNT,FLFP_WIDTH
  1114.         CALL    SCR_FILL_ATTR
  1115.         RJMP    FLMENU1
  1116. ;
  1117. FP_END: RJMP    FP_END0
  1118. FP_ENTER:RJMP   FP_ENTER0
  1119. ;
  1120. FP_1_UP:
  1121.         LDH     DATA,FLFP_SELECT
  1122.         TST     DATA
  1123.         BREQ    FP_FS0
  1124.         DEC     DATA
  1125.         STH     FLFP_SELECT,DATA
  1126.         LDH     DATA,FLFP_CURSOR
  1127.         TST     DATA
  1128.         BREQ    FP_1_UP1
  1129.         DEC     DATA
  1130.         STH     FLFP_CURSOR,DATA
  1131.         RJMP    FP_1_UP9
  1132. FP_1_UP1:
  1133.         LDH     DATA,FLFP_TOP
  1134.         DEC     DATA
  1135.         STH     FLFP_TOP,DATA
  1136. FP_1_UP9:
  1137.         RJMP    FP_FS1
  1138. ;
  1139. FP_1_DOWN:
  1140.         LDH     DATA,FLFP_SELECT
  1141.         LDH     TEMP,FLFP_TOTAL
  1142.         INC     DATA
  1143.         CP      DATA,TEMP
  1144.         BRCC    FP_FS0
  1145.         STH     FLFP_SELECT,DATA
  1146.         LDH     DATA,FLFP_CURSOR
  1147.         CPI     DATA,FLFP_HEIGHT-1
  1148.         BRCC    FP_1_DOWN1
  1149.         INC     DATA
  1150.         STH     FLFP_CURSOR,DATA
  1151.         RJMP    FP_1_DOWN9
  1152. FP_1_DOWN1:
  1153.         LDH     DATA,FLFP_TOP
  1154.         INC     DATA
  1155.         STH     FLFP_TOP,DATA
  1156. FP_1_DOWN9:
  1157.         RJMP    FP_FS1
  1158. ;
  1159. FP_P_UP:
  1160.         LDH     DATA,FLFP_SELECT
  1161.         SUBI    DATA,FLFP_HEIGHT-1
  1162.         BRCC    FP_P_UP1
  1163. FP_BEGIN:
  1164.         CLR     DATA
  1165. FP_P_UP1:
  1166.         STH     FLFP_SELECT,DATA
  1167.         STH     FLFP_TOP,DATA
  1168.         STH     FLFP_CURSOR,NULL
  1169.         RJMP    FP_FS1
  1170. ;
  1171. FP_P_DOWN:
  1172.         LDH     TEMP,FLFP_TOTAL
  1173.         CPI     TEMP,FLFP_HEIGHT+1
  1174.         BRCC    FP_P_DOWN1
  1175.         LDI     DATA,FLFP_HEIGHT-1
  1176.         STH     FLFP_SELECT,DATA
  1177.         STH     FLFP_TOP,NULL
  1178.         STH     FLFP_CURSOR,DATA
  1179.         RJMP    FP_P_DOWN9
  1180. FP_P_DOWN1:
  1181.         LDH     DATA,FLFP_SELECT
  1182.         ADDI    DATA,FLFP_HEIGHT-1
  1183.         CP      DATA,TEMP
  1184.         BRCS    FP_P_DOWN2
  1185.         MOV     DATA,TEMP
  1186.         DEC     DATA
  1187. FP_P_DOWN2:
  1188.         STH     FLFP_SELECT,DATA
  1189.         LDI     TEMP,FLFP_HEIGHT-1
  1190.         STH     FLFP_CURSOR,TEMP
  1191.         SUB     DATA,TEMP
  1192.         STH     FLFP_TOP,DATA
  1193. FP_P_DOWN9:
  1194.         RJMP    FP_FS1
  1195. ;
  1196. FP_END0:
  1197.         LDH     TEMP,FLFP_TOTAL
  1198.         CPI     TEMP,FLFP_HEIGHT+1
  1199.         BRCC    FP_END1
  1200.         LDI     DATA,FLFP_HEIGHT-1
  1201.         STH     FLFP_SELECT,DATA
  1202.         STH     FLFP_TOP,NULL
  1203.         STH     FLFP_CURSOR,DATA
  1204.         RJMP    FP_END9
  1205. FP_END1:
  1206.         MOV     DATA,TEMP
  1207.         DEC     DATA
  1208.         STH     FLFP_SELECT,DATA
  1209.         LDI     TEMP,FLFP_HEIGHT-1
  1210.         STH     FLFP_CURSOR,TEMP
  1211.         SUB     DATA,TEMP
  1212.         STH     FLFP_TOP,DATA
  1213. FP_END9:
  1214.         RJMP    FP_FS1
  1215. ;
  1216. FP_ENTER0:
  1217.         LDH     DATA,FLFP_SELECT
  1218.         LDIZ    FL_BUFFER
  1219.         LDI     TEMP,32
  1220.         MUL     DATA,TEMP
  1221.         ADD     ZL,R0
  1222.         ADC     ZH,R1
  1223.         LDD     DATA,Z+11
  1224.         TST     DATA
  1225.         BREQ    FP_ENTER9
  1226.         LDD     WL,Z+26
  1227.         LDD     WH,Z+27
  1228.         LDD     XL,Z+20
  1229.         LDD     XH,Z+21
  1230.         STSW    FAT_TEK_DIR+0
  1231.         STSX    FAT_TEK_DIR+2
  1232.         RCALL   FP_RD_DIR
  1233.         STH     FLFP_CURSOR,NULL
  1234.         RJMP    FP_FS1
  1235. FP_ENTER9:
  1236.         STH     FLFP_BUFADR0,ZL
  1237.         STH     FLFP_BUFADR1,ZH
  1238.         LDD     WL,Z+28
  1239.         LDD     WH,Z+29
  1240.         LDD     XL,Z+30
  1241.         LDI     DATA,LOW(16383)
  1242.         LDI     TEMP,HIGH(16383)
  1243.         ADD     WL,DATA
  1244.         ADC     WH,TEMP
  1245.         ADC     XL,NULL
  1246.         LSL     WH
  1247.         ROL     XL
  1248.         LSL     WH
  1249.         ROL     XL
  1250.         STH     FLSH_SIZE,XL
  1251.         STH     FLSH_START,NULL
  1252.  
  1253.         LDH     XH,FLFP_CURSOR
  1254.         ADDI    XH,FLFP_YPOS
  1255.         LDI     XL,FLFP_XPOS
  1256.         CALL    SCR_SET_CURSOR
  1257.         LDI     TEMP,$1F
  1258.         LDI     COUNT,FLFP_WIDTH
  1259.         CALL    SCR_FILL_ATTR
  1260. ;
  1261. FLMAP10:RCALL   FL_SHOWCONTENT
  1262.  
  1263. FLMAP11:CALL    WAITKEY
  1264.         CPI     DATA,KEY_UP
  1265.         BREQ    FLMAP_UP
  1266.         CPI     DATA,KEY_DOWN
  1267.         BREQ    FLMAP_DOWN
  1268.         CPI     DATA,KEY_LEFT
  1269.         BREQ    FLMAP_LEFT
  1270.         CPI     DATA,KEY_RIGHT
  1271.         BREQ    FLMAP_RIGHT
  1272.         CPI     DATA,KEY_ENTER
  1273.         BREQ    FLMAP_ENTER
  1274.         CPI     DATA,KEY_ESC
  1275.         BRNE    FLMAP11
  1276.         RJMP    FLMAP_EXIT
  1277. ;
  1278. FLMAP_LEFT:
  1279.         LDH     DATA,FLSH_START
  1280.         TST     DATA
  1281.         BREQ    FLMAP11
  1282.         DEC     DATA
  1283.         STH     FLSH_START,DATA
  1284.         RJMP    FLMAP10
  1285. ;
  1286. FLMAP_RIGHT:
  1287.         LDH     DATA,FLSH_START
  1288.         LDH     TEMP,FLSH_SIZE
  1289.         ADD     TEMP,DATA
  1290.         CPI     TEMP,32
  1291.         BRCC    FLMAP11
  1292.         INC     DATA
  1293.         STH     FLSH_START,DATA
  1294.         RJMP    FLMAP10
  1295. ;
  1296. FLMAP_UP:
  1297.         LDH     DATA,FLSH_START
  1298.         SUBI    DATA,4
  1299.         BRCC    FLMAP_U1
  1300.         CLR     DATA
  1301. FLMAP_U1:
  1302.         STH     FLSH_START,DATA
  1303.         RJMP    FLMAP10
  1304. ;
  1305. FLMAP_DOWN:
  1306.         LDH     DATA,FLSH_START
  1307.         LDH     TEMP,FLSH_SIZE
  1308.         ADD     DATA,TEMP
  1309.         ADDI    DATA,4
  1310.         CPI     DATA,32
  1311.         BRCS    FLMAP_D1
  1312.         LDI     DATA,32
  1313. FLMAP_D1:
  1314.         SUB     DATA,TEMP
  1315.         STH     FLSH_START,DATA
  1316.         RJMP    FLMAP10
  1317. ;
  1318. FLMAP_ENTER:
  1319.         LDIZ    FL_CONTENT
  1320.         LDH     DATA,FLSH_START
  1321.         LDI     TEMP,16
  1322.         MUL     DATA,TEMP
  1323.         ADD     ZL,R0
  1324.         ADC     ZH,R1
  1325.         STH     FLSH_ADR1,ZL
  1326.         STH     FLSH_ADR2,ZH
  1327.  
  1328.         LDS     TEMP,FAT_BYTSSEC
  1329.         STS     FAT_NUMSECK,TEMP
  1330.  
  1331.         LDH     ZL,FLFP_BUFADR0
  1332.         LDH     ZH,FLFP_BUFADR1
  1333.         LDD     WL,Z+26
  1334.         LDD     WH,Z+27
  1335.         LDD     XL,Z+20
  1336.         LDD     XH,Z+21
  1337.         STSW    FAT_TFILCLS+0
  1338.         STSX    FAT_TFILCLS+2
  1339.         LDD     WL,Z+28
  1340.         LDD     WH,Z+29
  1341.         LDD     XL,Z+30
  1342.         LDD     XH,Z+31
  1343.         LDI     TMP2,LOW(511)
  1344.         LDI     TMP3,HIGH(511)
  1345.         RCALL   HLDEPBC
  1346.         RCALL   BCDE200         ;получили кол-во секторов
  1347. ;-------
  1348. FL_FS0: LDI     COUNT,32
  1349.         SBIW    WL,32
  1350.         BRCS    FL_FS9
  1351.         BREQ    FL_FS9
  1352.         STH     FLSH_TEMP0,WL
  1353.         STH     FLSH_TEMP1,WH
  1354.         RCALL   FL_CPTR
  1355.  
  1356.         LDI     COUNT,32
  1357.  
  1358. FL_FS2: STH     FLSH_COUNT,COUNT
  1359.         LDS     DATA,FAT_NUMSECK
  1360.         DEC     DATA
  1361.         BRNE    FL_FS3
  1362.  
  1363.         LDSW    FAT_TFILCLS+0
  1364.         LDSX    FAT_TFILCLS+2
  1365.         CALL    RDFATZP
  1366.         STSW    FAT_TFILCLS+0
  1367.         STSX    FAT_TFILCLS+2
  1368.         LDS     DATA,FAT_BYTSSEC
  1369. FL_FS3: STS     FAT_NUMSECK,DATA
  1370.  
  1371.         LDH     COUNT,FLSH_COUNT
  1372.         DEC     COUNT
  1373.         BRNE    FL_FS2
  1374.  
  1375.         LDH     WL,FLSH_TEMP0
  1376.         LDH     WH,FLSH_TEMP1
  1377.         RJMP    FL_FS0
  1378.  
  1379. FL_FS9: ADIW    WL,32
  1380.         MOV     COUNT,WL
  1381.         RCALL   FL_CPTR
  1382. ;
  1383. FLMAP_EXIT:
  1384.         STH     FLSH_START,FF
  1385.         STH     FLSH_SIZE,NULL
  1386.         RCALL   FL_SHOWCONTENT
  1387.         RJMP    FLMENU1
  1388. ;
  1389. ;======================================
  1390. ;
  1391. FL_CPTR:PUSH    COUNT
  1392.         LDI     TEMP,$01
  1393.         LDH     DATA,FLSH_START
  1394.         LSR     DATA
  1395.         LSR     DATA
  1396.         TST     DATA
  1397.         BREQ    FL_CPT1
  1398. FL_CPT2:LSL     TEMP
  1399.         DEC     DATA
  1400.         BRNE    FL_CPT2
  1401. FL_CPT1:LDH     DATA,FLSH_ERASE
  1402.         AND     DATA,TEMP
  1403.         BRNE    FL_CPT5
  1404.         LDH     DATA,FLSH_ERASE
  1405.         OR      DATA,TEMP
  1406.         STH     FLSH_ERASE,DATA
  1407.         LDIX    FL_CONTENT
  1408.         LDH     DATA,FLSH_START
  1409.         ANDI    DATA,0B00011100
  1410.         LDI     TEMP,16
  1411.         MUL     DATA,TEMP
  1412.         ADD     XL,R0
  1413.         ADC     XH,R1
  1414.         LDI     COUNT,4
  1415. FL_CPT4:ST      X+,NULL
  1416.         ST      X+,NULL
  1417.         ST      X+,NULL
  1418.         ST      X+,NULL
  1419.         ST      X+,NULL
  1420.         LDIZ    FL_EMPTY*2
  1421.         LDI     TEMP,11
  1422. FL_CPT3:LPM     DATA,Z+
  1423.         ST      X+,DATA
  1424.         DEC     TEMP
  1425.         BRNE    FL_CPT3
  1426.         DEC     COUNT
  1427.         BRNE    FL_CPT4
  1428. FL_CPT5:POP     COUNT
  1429.  
  1430.         LDS     DATA,FAT_BYTSSEC
  1431.         LDS     TEMP,FAT_NUMSECK
  1432.         CP      DATA,TEMP
  1433.         BREQ    FL_CPT6
  1434.         ORI     COUNT,$40
  1435. FL_CPT6:LDH     XL,FLSH_ADR1
  1436.         LDH     XH,FLSH_ADR2
  1437.         ST      X+,COUNT
  1438.         LDS     DATA,FAT_TFILCLS+0
  1439.         ST      X+,DATA
  1440.         LDS     DATA,FAT_TFILCLS+1
  1441.         ST      X+,DATA
  1442.         LDS     DATA,FAT_TFILCLS+2
  1443.         ST      X+,DATA
  1444.         LDS     DATA,FAT_TFILCLS+3
  1445.         ST      X+,DATA
  1446.         LDH     ZL,FLFP_BUFADR0
  1447.         LDH     ZH,FLFP_BUFADR1
  1448.         LDI     COUNT,11
  1449. FL_CPT7:LD      DATA,Z+
  1450.         ST      X+,DATA
  1451.         DEC     COUNT
  1452.         BRNE    FL_CPT7
  1453.         STH     FLSH_ADR1,XL
  1454.         STH     FLSH_ADR2,XH
  1455.         LDH     DATA,FLMNU_FLAGS
  1456.         ORI     DATA,0B00010000
  1457.         STH     FLMNU_FLAGS,DATA
  1458.         LDH     DATA,FLSH_START
  1459.         INC     DATA
  1460.         STH     FLSH_START,DATA
  1461.         RET
  1462. ;
  1463. ;======================================
  1464. ;
  1465. FLMENU_PUTCURSOR:
  1466.         CLR     COUNT
  1467.         LDI     TEMP,0B00000001
  1468. FPM_PC4:STH     FLSH_COUNT,COUNT
  1469.         STH     FLSH_TEMP0,TEMP
  1470.         MOV     XH,COUNT
  1471.         ADDI    XH,2
  1472.         LDI     XL,1
  1473.         CALL    SCR_SET_CURSOR
  1474.         LDH     DATA,FLSH_TEMP0
  1475.         LDH     XL,FLMNU_FLAGS
  1476.         LDI     TEMP,$9F
  1477.         AND     XL,DATA
  1478.         BRNE    FPM_PC1
  1479.         LDI     TEMP,$97
  1480. FPM_PC1:LDH     XL,FLMNU_CURSOR
  1481.         AND     DATA,XL
  1482.         BREQ    FPM_PC2
  1483.         LSL     XL
  1484.         BRCS    FPM_PC3
  1485.         LDI     TEMP,$F0
  1486.         RJMP    FPM_PC2
  1487. FPM_PC3:ANDI    TEMP,$1F
  1488. FPM_PC2:LDI     COUNT,15
  1489.         CALL    SCR_FILL_ATTR
  1490.         LDH     COUNT,FLSH_COUNT
  1491.         INC     COUNT
  1492.         LDH     TEMP,FLSH_TEMP0
  1493.         LSL     TEMP
  1494.         SBRS    TEMP,5
  1495.         RJMP    FPM_PC4
  1496.         RET
  1497. ;
  1498. ;======================================
  1499. ;
  1500. FP_RD_DIR:
  1501.         LDIZ    FL_BUFFER
  1502.         STH     FLFP_BUFADR0,ZL
  1503.         STH     FLFP_BUFADR1,ZH
  1504.         STH     FLFP_TOTAL,NULL
  1505.         STH     FLFP_TOP,NULL
  1506.         STH     FLFP_SELECT,NULL
  1507.  
  1508.         CALL    CALCKCLSDIR
  1509.         LDIW    0
  1510.         CALL    RDDIRSC
  1511. ;поиск файла в директории
  1512. ;       LDIW    0               ;номер описателя файла
  1513.         RJMP    FP_RDD2
  1514.  
  1515. FP_RDD1:ADIW    WL,1            ;номерописателя++
  1516.         ADIW    ZL,$20          ;следующий описатель
  1517.         CPI     ZH,HIGH(BUF4FAT+512);
  1518.                                 ;вылезли за сектор?
  1519.         BRNE    FP_RDD2         ;нет ещё
  1520.         CALL    RDDIRSC         ;считываем следующий
  1521.         BRNE    FP_RDDE         ;кончились сектора в директории
  1522.  
  1523. FP_RDD2:LD      TEMP,Z          ;первый символ
  1524.         CPI     TEMP,$E5        ;удалён?
  1525.         BREQ    FP_RDD1
  1526.         TST     TEMP            ;пустой описатель? (конец списка)
  1527.         BREQ    FP_RDDE
  1528.         CPI     TEMP,$2E ;"."
  1529.         BRNE    FP_RDD3
  1530.         LDD     TEMP,Z+1
  1531.         CPI     TEMP,$2E ;"."
  1532.         BRNE    FP_RDD1
  1533.  
  1534. FP_RDD3:LDD     DATA,Z+$0B      ;атрибуты
  1535.         ANDI    DATA,0B11011110
  1536.         BREQ    FP_RDD4         ;файл
  1537.         CPI     DATA,$10        ;директория
  1538.         BRNE    FP_RDD1
  1539.         RJMP    FP_RDD7
  1540.  
  1541. FP_RDDE:RJMP    FP_RDDX
  1542.  
  1543. FP_RDD4:LDD     DATA,Z+8
  1544.         CPI     DATA,$52 ;"R"
  1545.         BREQ    FP_RDD5
  1546.         CPI     DATA,$42 ;"B"
  1547.         BRNE    FP_RDD1
  1548.         LDD     DATA,Z+9
  1549.         CPI     DATA,$49 ;"I"
  1550.         BRNE    FP_RDD1
  1551.         LDD     DATA,Z+10
  1552.         CPI     DATA,$4E ;"N"
  1553.         BREQ    FP_RDD6
  1554. FP_RDD1A:RJMP   FP_RDD1
  1555. FP_RDD5:LDD     DATA,Z+9
  1556.         CPI     DATA,$4F ;"O"
  1557.         BRNE    FP_RDD1
  1558.         LDD     DATA,Z+10
  1559.         CPI     DATA,$4D ;"M"
  1560.         BRNE    FP_RDD1
  1561.  
  1562. FP_RDD6:LDD     DATA,Z+31       ;длина
  1563.         TST     DATA
  1564.         BRNE    FP_RDD1
  1565.         LDD     DATA,Z+30
  1566.         LDD     R1,Z+29
  1567.         LDD     R0,Z+28
  1568.         SUB     R0,ONE
  1569.         SBC     R1,NULL
  1570.         SBC     DATA,NULL
  1571.         BRCS    FP_RDD1
  1572.         CPI     DATA,$08
  1573.         BRCC    FP_RDD1
  1574.  
  1575. FP_RDD7:LDH     XL,FLFP_BUFADR0
  1576.         LDH     XH,FLFP_BUFADR1
  1577.         LDI     COUNT,32
  1578.         PUSHZ
  1579. FP_RDD8:LD      DATA,Z+
  1580.         ST      X+,DATA
  1581.         DEC     COUNT
  1582.         BRNE    FP_RDD8
  1583.         POPZ
  1584.         STH     FLFP_BUFADR0,XL
  1585.         STH     FLFP_BUFADR1,XH
  1586.         LDH     COUNT,FLFP_TOTAL
  1587.         INC     COUNT
  1588.         STH     FLFP_TOTAL,COUNT
  1589.         CPI     COUNT,48
  1590.         BRCC    FP_SORT
  1591.         RJMP    FP_RDD1
  1592.  
  1593. FP_RDDX:LDH     COUNT,FLFP_TOTAL
  1594.         CPI     COUNT,1
  1595.         BREQ    FP_NOSORT
  1596.         TST     COUNT
  1597.         BRNE    FP_SORT
  1598.         LDH     DATA,FLMNU_FLAGS
  1599.         ANDI    DATA,0B00000111
  1600.         STH     FLMNU_FLAGS,DATA
  1601.         RJMP    FP_NOFILES
  1602. FP_SORT:
  1603. FP_RDDY:
  1604.         LDIZ    FL_BUFFER
  1605.         CLR     TMP2
  1606.         LDH     TMP3,FLFP_TOTAL
  1607.         DEC     TMP3
  1608.         LD      DATA,Z
  1609.         CPI     DATA,$2E
  1610.         BRNE    FP_RDDZ
  1611.         INC     TMP2
  1612. FP_RDDZ:RCALL   FSORT
  1613. FP_NOFILES:
  1614. FP_NOSORT:
  1615. ;
  1616.         LDIZ    FL_BUFFER
  1617.         LDH     COUNT,FLFP_TOTAL
  1618. FP_LO2: LDD     DATA,Z+11
  1619.         ANDI    DATA,0B11011110
  1620.         STD     Z+11,DATA
  1621.         BRNE    FP_LO1
  1622.         LDI     TEMP,11
  1623. FP_LO3: LD      DATA,Z
  1624.         RCALL   TOLOWER
  1625.         ST      Z+,DATA
  1626.         DEC     TEMP
  1627.         BRNE    FP_LO3
  1628.         ADIW    ZL,21
  1629.         RJMP    FP_LO4
  1630. FP_LO1: ADIW    ZL,32
  1631. FP_LO4: DEC     COUNT
  1632.         BRNE    FP_LO2
  1633.         RET
  1634. ;
  1635. ;======================================
  1636. ;
  1637. FP_OUT: CLR     COUNT
  1638. FPOUT00:PUSH    COUNT
  1639.         MOV     XH,COUNT
  1640.         ADDI    XH,FLFP_YPOS
  1641.         LDI     XL,FLFP_XPOS
  1642.         CALL    SCR_SET_CURSOR
  1643.  
  1644.         LDH     DATA,FLFP_CURSOR
  1645.         LDI     TEMP,$9F
  1646.         CP      DATA,COUNT
  1647.         BRNE    FPOUT04
  1648.         LDI     TEMP,$F0
  1649. FPOUT04:CALL    SCR_SET_ATTR
  1650.  
  1651.         LDH     DATA,FLFP_TOP
  1652.         ADD     DATA,COUNT
  1653.         LDH     TEMP,FLFP_TOTAL
  1654.         CP      DATA,TEMP
  1655.         BRCS    FPOUT01
  1656.         OR      COUNT,TEMP
  1657.         BRNE    FPOUT02
  1658.  
  1659.         LDIZ    MLMSG_FP_NOFILES*2
  1660.         CALL    SCR_PRINTMLSTR
  1661.         LDI     COUNT,FLFP_WIDTH-12 ;22
  1662.         RJMP    FPOUT03
  1663. FPOUT02:LDI     COUNT,FLFP_WIDTH ;34
  1664. FPOUT03:LDI     DATA,$20
  1665.         CALL    SCR_FILL_CHAR
  1666.         RJMP    FPOUT90
  1667.  
  1668. FPOUT01:LDIZ    FL_BUFFER
  1669.         LDI     TEMP,32
  1670.         MUL     DATA,TEMP
  1671.         ADD     ZL,R0
  1672.         ADC     ZH,R1
  1673.         PUSH    ZL
  1674.         LDI     COUNT,8
  1675.         CALL    SCR_PRNRAMSTRN
  1676.         LDI     DATA,$20
  1677.         CALL    SCR_PUTCHAR
  1678.         LDI     COUNT,3
  1679.         CALL    SCR_PRNRAMSTRN
  1680.         LDI     DATA,$B3 ;"│"
  1681.         CALL    SCR_PUTCHAR
  1682.         POP     ZL
  1683.         ;here Z=0
  1684.         PUSHZ
  1685.         LDD     DATA,Z+11
  1686.         TST     DATA
  1687.         BREQ    FPOUT11
  1688.         LDIZ    MSG_FP_DIR*2
  1689.         CALL    SCR_PRINTSTRZ
  1690.         RJMP    FPOUT12
  1691. FPOUT11:LDD     WL,Z+28
  1692.         LDD     WH,Z+29
  1693.         LDD     XL,Z+30
  1694.         RCALL   SCR_DEC1M
  1695.         LDI     DATA,$B3 ;"│"
  1696.         CALL    SCR_PUTCHAR
  1697. FPOUT12:POPZ
  1698.  
  1699.         LDD     DATA,Z+24
  1700.         ANDI    DATA,$1F
  1701.         CALL    DECBYTE
  1702.         LDI     DATA,$2E ;"."
  1703.         CALL    SCR_PUTCHAR
  1704.         LDD     DATA,Z+24
  1705.         LDD     TEMP,Z+25
  1706.         ROR     TEMP
  1707.         ROR     DATA
  1708.         SWAP    DATA
  1709.         ANDI    DATA,$0F
  1710.         CALL    DECBYTE
  1711.         LDI     DATA,$2E ;"."
  1712.         CALL    SCR_PUTCHAR
  1713.         LDD     DATA,Z+25
  1714.         LSR     DATA
  1715.         ADDI    DATA,80 ;+1980
  1716. FPOUT14:CPI     DATA,100
  1717.         BRCS    FPOUT13
  1718.         SUBI    DATA,100
  1719.         RJMP    FPOUT14
  1720. FPOUT13:CALL    DECBYTE
  1721.         LDI     DATA,$B3 ;"│"
  1722.         CALL    SCR_PUTCHAR
  1723.  
  1724.         LDD     DATA,Z+23
  1725.         LSR     DATA
  1726.         LSR     DATA
  1727.         LSR     DATA
  1728.         CALL    DECBYTE
  1729.         LDI     DATA,$3A ;":"
  1730.         CALL    SCR_PUTCHAR
  1731.         LDD     TEMP,Z+22
  1732.         LDD     DATA,Z+23
  1733.         ROL     TEMP
  1734.         ROL     DATA
  1735.         ROL     TEMP
  1736.         ROL     DATA
  1737.         ROL     TEMP
  1738.         ROL     DATA
  1739.         ANDI    DATA,$3F
  1740.         CALL    DECBYTE
  1741.  
  1742. FPOUT90:POP     COUNT
  1743.         INC     COUNT
  1744.         CPI     COUNT,FLFP_HEIGHT
  1745.         BRCC    FPOUT91
  1746.         RJMP    FPOUT00
  1747. FPOUT91:
  1748.         RET
  1749. ;
  1750. ;======================================
  1751. ;For CodePage866 only!!!
  1752. ;in:    DATA
  1753. ;out:   DATA
  1754. TOLOWER:CPI     DATA,$41
  1755.         BRCS    TOLOW9   ;$00..."@"
  1756.         CPI     DATA,$5B
  1757.         BRCS    TOLOW8   ;"A"..."Z"
  1758.         CPI     DATA,$80
  1759.         BRCS    TOLOW9   ;"["...""
  1760.         CPI     DATA,$90
  1761.         BRCS    TOLOW8   ;"А"..."П"
  1762.         CPI     DATA,$A0
  1763.         BRCS    TOLOW7   ;"Р"..."Я"
  1764.         CPI     DATA,$F0
  1765.         BRCS    TOLOW9   ;"а"..."я"
  1766.         CPI     DATA,$F8
  1767.         BRCC    TOLOW9   ;$F8...$FF
  1768.         ORI     DATA,$01 ;"Ё"..."ў"
  1769.         RET
  1770. TOLOW7: ADDI    DATA,$50
  1771.         RET
  1772. TOLOW8: ADDI    DATA,$20
  1773. TOLOW9: RET
  1774. ;
  1775. ;======================================
  1776. ;out number (up to 999999) in dec (right justify)
  1777. ;in:    XL,WH,WL == number
  1778. SCR_DEC1M:
  1779.         LDIZ    DEC1MTAB*2
  1780.         LDI     COUNT,5
  1781.         MOV     R2,ONE
  1782.         CLR     DATA
  1783. DEC1M5: LPM     R0,Z+
  1784.         LPM     R1,Z+
  1785. DEC1M2: SUB     WL,R0
  1786.         SBC     WH,R1
  1787.         SBC     XL,R2
  1788.         BRCS    DEC1M1
  1789.         INC     DATA
  1790.         RJMP    DEC1M2
  1791. DEC1M1: ADD     WL,R0
  1792.         ADC     WH,R1
  1793.         ADC     XL,R2
  1794.         TST     DATA
  1795.         BRNE    DEC1M3
  1796.         LDI     DATA,$20
  1797.         CALL    SCR_PUTCHAR
  1798.         CLR     DATA
  1799.         RJMP    DEC1M4
  1800. DEC1M3: ORI     DATA,$30
  1801.         CALL    SCR_PUTCHAR
  1802.         LDI     DATA,$30
  1803. DEC1M4: CLR     R2
  1804.         DEC     COUNT
  1805.         BRNE    DEC1M5
  1806.         MOV     DATA,WL
  1807.         ORI     DATA,$30
  1808.         JMP     SCR_PUTCHAR
  1809. DEC1MTAB:.DW    $86A0,10000,1000,100,10
  1810. ;
  1811. ;======================================
  1812. ;in:    Z == buffer ptr
  1813. ;       TMP2 == lo index
  1814. ;       TMP3 == hi index
  1815. FSORT:  CP      TMP2,TMP3
  1816.         BRLT    FSRT_1
  1817.         RET
  1818. FSRT_1: MOV     WH,TMP2
  1819.         ADD     WH,TMP3
  1820.         LSR     WH
  1821.         MOV     WL,TMP2
  1822.         RCALL   FXCHNG
  1823.         MOV     R2,TMP2
  1824.         INC     R2
  1825.         MOV     R3,TMP3
  1826. FSRT_2: CP      R3,R2
  1827.         BRLT    FSRT_7
  1828. FSRT_3: CP      TMP3,R2
  1829.         BRLT    FSRT_4
  1830.         MOV     WL,TMP2
  1831.         MOV     WH,R2
  1832.         RCALL   FCOMP
  1833.         BRCS    FSRT_4
  1834.         INC     R2
  1835.         RJMP    FSRT_3
  1836. FSRT_4: CP      R3,TMP2
  1837.         BRLT    FSRT_5
  1838.         MOV     WL,TMP2
  1839.         MOV     WH,R3
  1840.         RCALL   FCOMP
  1841.         BRCC    FSRT_5
  1842.         DEC     R3
  1843.         RJMP    FSRT_4
  1844. FSRT_5: CP      R2,R3
  1845.         BRGE    FSRT_6
  1846.         MOV     WL,R2
  1847.         MOV     WH,R3
  1848.         RCALL   FXCHNG
  1849. FSRT_6: RJMP    FSRT_2
  1850. FSRT_7: MOV     WL,TMP2
  1851.         MOV     WH,R3
  1852.         RCALL   FXCHNG
  1853.         PUSH    R3
  1854.         PUSH    TMP3
  1855.         MOV     TMP3,R3
  1856.         DEC     TMP3
  1857.         RCALL   FSORT
  1858.         POP     TMP3
  1859.         POP     TMP2
  1860.         INC     TMP2
  1861.         RJMP    FSORT
  1862. ;
  1863. ;======================================
  1864. ;in:    Z
  1865. ;       WL, WH - indexes
  1866. ;chng:  COUNT,DATA,TEMP (,X,R0,R1)
  1867. FXCHNG:
  1868.         CP      WL,WH
  1869.         BRNE    FXCHN_1
  1870.         RET
  1871. FXCHN_1:
  1872.         PUSHZ
  1873.         MOVW    XL,ZL
  1874.         LDI     COUNT,32
  1875.         MUL     WL,COUNT
  1876.         ADD     XL,R0
  1877.         ADC     XH,R1
  1878.         MUL     WH,COUNT
  1879.         ADD     ZL,R0
  1880.         ADC     ZH,R1
  1881. FXCHN_2:LD      DATA,X
  1882.         LD      TEMP,Z
  1883.         ST      X+,TEMP
  1884.         ST      Z+,DATA
  1885.         DEC     COUNT
  1886.         BRNE    FXCHN_2
  1887.         POPZ
  1888.         RET
  1889. ;
  1890. ;======================================
  1891. ;in:    Z
  1892. ;       WL, WH - indexes
  1893. ;out:   sreg.C - SET - [WL]<[WH], CLR - [WL]>=[WH]
  1894. ;chng:  COUNT,DATA,TEMP (,X,R0,R1)
  1895. FCOMP:  PUSHZ
  1896.         MOVW    XL,ZL
  1897.         LDI     DATA,32
  1898.         MUL     WH,DATA
  1899.         ADD     XL,R0
  1900.         ADC     XH,R1
  1901.         MUL     WL,DATA
  1902.         ADD     ZL,R0
  1903.         ADC     ZH,R1
  1904.         LDD     TEMP,Z+11
  1905.         ANDI    TEMP,0B11011110
  1906.         ADDI    XL,11
  1907.         LD      DATA,X
  1908.         ANDI    DATA,0B11011110
  1909.         CP      DATA,TEMP
  1910.         BRNE    FCMP9
  1911.         SUBI    XL,11
  1912.         LDI     COUNT,11
  1913. FCMP1:  LD      DATA,X+
  1914.         LD      TEMP,Z+
  1915.         CP      TEMP,DATA
  1916.         BRNE    FCMP9
  1917.         DEC     COUNT
  1918.         BRNE    FCMP1
  1919. FCMP9:  POPZ
  1920.         RET
  1921. ;
  1922. ;======================================
  1923. ;
  1924. FL_CRC_CMP:
  1925.         LPM     DATA,Z+
  1926.         CP      DATA,R0
  1927.         BRNE    FL_CRCCMP1
  1928.         LPM     DATA,Z+
  1929.         CP      DATA,R1
  1930.         BRNE    FL_CRCCMP1
  1931.         LPM     DATA,Z+
  1932.         CP      DATA,R2
  1933.         BRNE    FL_CRCCMP1
  1934.         LPM     DATA,Z+
  1935.         CP      DATA,R3
  1936.         BRNE    FL_CRCCMP1
  1937. FL_CRCCMP1:
  1938.         RET
  1939. ;
  1940. ;======================================
  1941. ;
  1942. FL_SHOWCONTENT:
  1943.         LDIZ    FL_CONTENT
  1944.         CLR     COUNT
  1945.  
  1946. FL_SHW1:STH     FLSH_TEMP2,COUNT
  1947.         RCALL   FL_SHW_SETCURSOR
  1948.         LD      DATA,Z
  1949.         LDI     TEMP,$0E
  1950.         SBRC    DATA,7
  1951.         LDI     TEMP,$07
  1952.         LDH     COUNT,FLSH_TEMP2
  1953.         LDH     DATA,FLSH_START
  1954.         CP      COUNT,DATA
  1955.         BRCS    FL_SHW5
  1956.         LDH     XH,FLSH_SIZE
  1957.         ADD     DATA,XH
  1958.         CP      COUNT,DATA
  1959.         BRCC    FL_SHW5
  1960.         LDI     TEMP,$F0
  1961. FL_SHW5:LDH     XH,FLSH_TEMP2
  1962.         LDI     DATA,$10
  1963.         SBRC    XH,2
  1964.         EOR     TEMP,DATA
  1965.         CALL    SCR_SET_ATTR
  1966.  
  1967.         ADIW    ZL,5
  1968.         LDI     COUNT,8
  1969.         CALL    SCR_PRNRAMSTRN
  1970.         LDI     DATA,$20
  1971.         CALL    SCR_PUTCHAR
  1972.         LDI     COUNT,3
  1973.         CALL    SCR_PRNRAMSTRN
  1974.  
  1975.         LDH     COUNT,FLSH_TEMP2
  1976.         INC     COUNT
  1977.         CPI     COUNT,32
  1978.         BRCS    FL_SHW1
  1979.  
  1980.         LDH     DATA,FLSH_ERASE
  1981.         CPI     DATA,$FF
  1982.         BRNE    FL_SHW6
  1983.         LDIZ    MSG_FL_ERASECHIP*2
  1984.         CALL    SCR_PRINTSTRZ
  1985. FL_SHW6:RET
  1986. ;
  1987. ;======================================
  1988. ;
  1989. FL_SHW_SETCURSOR:
  1990.         MOV     XL,COUNT
  1991.         ANDI    XL,$03
  1992.         LDI     TEMP,13
  1993.         MUL     XL,TEMP
  1994.         MOV     XL,R0
  1995.         INC     XL
  1996.         MOV     XH,COUNT
  1997.         ANDI    XH,$1C
  1998.         LSR     XH
  1999.         LSR     XH
  2000.         ADDI    XH,15
  2001.         JMP     SCR_SET_CURSOR
  2002. ;
  2003. ;======================================
  2004. ;
  2005.