Subversion Repositories pentevo

Rev

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