Subversion Repositories pentevo

Rev

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

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