Subversion Repositories pentevo

Rev

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

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