Subversion Repositories pentevo

Rev

Rev 315 | Rev 498 | 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.         MOV     TEMP,WL
  1233.         OR      TEMP,WH
  1234.         OR      TEMP,XL
  1235.         OR      TEMP,XH
  1236.         BRNE    FP_ENTER1
  1237.         LDSW    FAT_ROOTCLS+0
  1238.         LDSX    FAT_ROOTCLS+2
  1239. FP_ENTER1:
  1240.         STSW    FAT_TEK_DIR+0
  1241.         STSX    FAT_TEK_DIR+2
  1242.         RCALL   FP_RD_DIR
  1243.         STH     FLFP_CURSOR,NULL
  1244.         RJMP    FP_FS1
  1245. FP_ENTER9:
  1246.         STH     FLFP_BUFADR0,ZL
  1247.         STH     FLFP_BUFADR1,ZH
  1248.         LDD     WL,Z+28
  1249.         LDD     WH,Z+29
  1250.         LDD     XL,Z+30
  1251.         LDI     DATA,LOW(16383)
  1252.         LDI     TEMP,HIGH(16383)
  1253.         ADD     WL,DATA
  1254.         ADC     WH,TEMP
  1255.         ADC     XL,NULL
  1256.         LSL     WH
  1257.         ROL     XL
  1258.         LSL     WH
  1259.         ROL     XL
  1260.         STH     FLSH_SIZE,XL
  1261.         STH     FLSH_START,NULL
  1262.  
  1263.         LDH     XH,FLFP_CURSOR
  1264.         ADDI    XH,FLFP_YPOS
  1265.         LDI     XL,FLFP_XPOS
  1266.         CALL    SCR_SET_CURSOR
  1267.         LDI     TEMP,$1F
  1268.         LDI     COUNT,FLFP_WIDTH
  1269.         CALL    SCR_FILL_ATTR
  1270. ;
  1271. FLMAP10:RCALL   FL_SHOWCONTENT
  1272.  
  1273. FLMAP11:CALL    WAITKEY
  1274.         CPI     DATA,KEY_UP
  1275.         BREQ    FLMAP_UP
  1276.         CPI     DATA,KEY_DOWN
  1277.         BREQ    FLMAP_DOWN
  1278.         CPI     DATA,KEY_LEFT
  1279.         BREQ    FLMAP_LEFT
  1280.         CPI     DATA,KEY_RIGHT
  1281.         BREQ    FLMAP_RIGHT
  1282.         CPI     DATA,KEY_ENTER
  1283.         BREQ    FLMAP_ENTER
  1284.         CPI     DATA,KEY_ESC
  1285.         BRNE    FLMAP11
  1286.         RJMP    FLMAP_EXIT
  1287. ;
  1288. FLMAP_LEFT:
  1289.         LDH     DATA,FLSH_START
  1290.         TST     DATA
  1291.         BREQ    FLMAP11
  1292.         DEC     DATA
  1293.         STH     FLSH_START,DATA
  1294.         RJMP    FLMAP10
  1295. ;
  1296. FLMAP_RIGHT:
  1297.         LDH     DATA,FLSH_START
  1298.         LDH     TEMP,FLSH_SIZE
  1299.         ADD     TEMP,DATA
  1300.         CPI     TEMP,32
  1301.         BRCC    FLMAP11
  1302.         INC     DATA
  1303.         STH     FLSH_START,DATA
  1304.         RJMP    FLMAP10
  1305. ;
  1306. FLMAP_UP:
  1307.         LDH     DATA,FLSH_START
  1308.         SUBI    DATA,4
  1309.         BRCC    FLMAP_U1
  1310.         CLR     DATA
  1311. FLMAP_U1:
  1312.         STH     FLSH_START,DATA
  1313.         RJMP    FLMAP10
  1314. ;
  1315. FLMAP_DOWN:
  1316.         LDH     DATA,FLSH_START
  1317.         LDH     TEMP,FLSH_SIZE
  1318.         ADD     DATA,TEMP
  1319.         ADDI    DATA,4
  1320.         CPI     DATA,32
  1321.         BRCS    FLMAP_D1
  1322.         LDI     DATA,32
  1323. FLMAP_D1:
  1324.         SUB     DATA,TEMP
  1325.         STH     FLSH_START,DATA
  1326.         RJMP    FLMAP10
  1327. ;
  1328. FLMAP_ENTER:
  1329.         LDIZ    FL_CONTENT
  1330.         LDH     DATA,FLSH_START
  1331.         LDI     TEMP,16
  1332.         MUL     DATA,TEMP
  1333.         ADD     ZL,R0
  1334.         ADC     ZH,R1
  1335.         STH     FLSH_ADR1,ZL
  1336.         STH     FLSH_ADR2,ZH
  1337.  
  1338.         LDS     TEMP,FAT_BYTSSEC
  1339.         STS     FAT_NUMSECK,TEMP
  1340.  
  1341.         LDH     ZL,FLFP_BUFADR0
  1342.         LDH     ZH,FLFP_BUFADR1
  1343.         LDD     WL,Z+26
  1344.         LDD     WH,Z+27
  1345.         LDD     XL,Z+20
  1346.         LDD     XH,Z+21
  1347.         STSW    FAT_TFILCLS+0
  1348.         STSX    FAT_TFILCLS+2
  1349.         LDD     WL,Z+28
  1350.         LDD     WH,Z+29
  1351.         LDD     XL,Z+30
  1352.         LDD     XH,Z+31
  1353.         LDI     TMP2,LOW(511)
  1354.         LDI     TMP3,HIGH(511)
  1355.         RCALL   HLDEPBC
  1356.         RCALL   BCDE200         ;получили кол-во секторов
  1357. ;-------
  1358. FL_FS0: LDI     COUNT,32
  1359.         SBIW    WL,32
  1360.         BRCS    FL_FS9
  1361.         BREQ    FL_FS9
  1362.         STH     FLSH_TEMP0,WL
  1363.         STH     FLSH_TEMP1,WH
  1364.         RCALL   FL_CPTR
  1365.  
  1366.         LDI     COUNT,32
  1367.  
  1368. FL_FS2: STH     FLSH_COUNT,COUNT
  1369.         LDS     DATA,FAT_NUMSECK
  1370.         DEC     DATA
  1371.         BRNE    FL_FS3
  1372.  
  1373.         LDSW    FAT_TFILCLS+0
  1374.         LDSX    FAT_TFILCLS+2
  1375.         CALL    RDFATZP
  1376.         STSW    FAT_TFILCLS+0
  1377.         STSX    FAT_TFILCLS+2
  1378.         LDS     DATA,FAT_BYTSSEC
  1379. FL_FS3: STS     FAT_NUMSECK,DATA
  1380.  
  1381.         LDH     COUNT,FLSH_COUNT
  1382.         DEC     COUNT
  1383.         BRNE    FL_FS2
  1384.  
  1385.         LDH     WL,FLSH_TEMP0
  1386.         LDH     WH,FLSH_TEMP1
  1387.         RJMP    FL_FS0
  1388.  
  1389. FL_FS9: ADIW    WL,32
  1390.         MOV     COUNT,WL
  1391.         RCALL   FL_CPTR
  1392. ;
  1393. FLMAP_EXIT:
  1394.         STH     FLSH_START,FF
  1395.         STH     FLSH_SIZE,NULL
  1396.         RCALL   FL_SHOWCONTENT
  1397.         RJMP    FLMENU1
  1398. ;
  1399. ;======================================
  1400. ;
  1401. FL_CPTR:PUSH    COUNT
  1402.         LDI     TEMP,$01
  1403.         LDH     DATA,FLSH_START
  1404.         LSR     DATA
  1405.         LSR     DATA
  1406.         TST     DATA
  1407.         BREQ    FL_CPT1
  1408. FL_CPT2:LSL     TEMP
  1409.         DEC     DATA
  1410.         BRNE    FL_CPT2
  1411. FL_CPT1:LDH     DATA,FLSH_ERASE
  1412.         AND     DATA,TEMP
  1413.         BRNE    FL_CPT5
  1414.         LDH     DATA,FLSH_ERASE
  1415.         OR      DATA,TEMP
  1416.         STH     FLSH_ERASE,DATA
  1417.         LDIX    FL_CONTENT
  1418.         LDH     DATA,FLSH_START
  1419.         ANDI    DATA,0B00011100
  1420.         LDI     TEMP,16
  1421.         MUL     DATA,TEMP
  1422.         ADD     XL,R0
  1423.         ADC     XH,R1
  1424.         LDI     COUNT,4
  1425. FL_CPT4:ST      X+,NULL
  1426.         ST      X+,NULL
  1427.         ST      X+,NULL
  1428.         ST      X+,NULL
  1429.         ST      X+,NULL
  1430.         LDIZ    FL_EMPTY*2
  1431.         LDI     TEMP,11
  1432. FL_CPT3:LPM     DATA,Z+
  1433.         ST      X+,DATA
  1434.         DEC     TEMP
  1435.         BRNE    FL_CPT3
  1436.         DEC     COUNT
  1437.         BRNE    FL_CPT4
  1438. FL_CPT5:POP     COUNT
  1439.  
  1440.         LDS     DATA,FAT_BYTSSEC
  1441.         LDS     TEMP,FAT_NUMSECK
  1442.         CP      DATA,TEMP
  1443.         BREQ    FL_CPT6
  1444.         ORI     COUNT,$40
  1445. FL_CPT6:LDH     XL,FLSH_ADR1
  1446.         LDH     XH,FLSH_ADR2
  1447.         ST      X+,COUNT
  1448.         LDS     DATA,FAT_TFILCLS+0
  1449.         ST      X+,DATA
  1450.         LDS     DATA,FAT_TFILCLS+1
  1451.         ST      X+,DATA
  1452.         LDS     DATA,FAT_TFILCLS+2
  1453.         ST      X+,DATA
  1454.         LDS     DATA,FAT_TFILCLS+3
  1455.         ST      X+,DATA
  1456.         LDH     ZL,FLFP_BUFADR0
  1457.         LDH     ZH,FLFP_BUFADR1
  1458.         LDI     COUNT,11
  1459. FL_CPT7:LD      DATA,Z+
  1460.         ST      X+,DATA
  1461.         DEC     COUNT
  1462.         BRNE    FL_CPT7
  1463.         STH     FLSH_ADR1,XL
  1464.         STH     FLSH_ADR2,XH
  1465.         LDH     DATA,FLMNU_FLAGS
  1466.         ORI     DATA,0B00010000
  1467.         STH     FLMNU_FLAGS,DATA
  1468.         LDH     DATA,FLSH_START
  1469.         INC     DATA
  1470.         STH     FLSH_START,DATA
  1471.         RET
  1472. ;
  1473. ;======================================
  1474. ;
  1475. FLMENU_PUTCURSOR:
  1476.         CLR     COUNT
  1477.         LDI     TEMP,0B00000001
  1478. FPM_PC4:STH     FLSH_COUNT,COUNT
  1479.         STH     FLSH_TEMP0,TEMP
  1480.         MOV     XH,COUNT
  1481.         ADDI    XH,2
  1482.         LDI     XL,1
  1483.         CALL    SCR_SET_CURSOR
  1484.         LDH     DATA,FLSH_TEMP0
  1485.         LDH     XL,FLMNU_FLAGS
  1486.         LDI     TEMP,$9F
  1487.         AND     XL,DATA
  1488.         BRNE    FPM_PC1
  1489.         LDI     TEMP,$97
  1490. FPM_PC1:LDH     XL,FLMNU_CURSOR
  1491.         AND     DATA,XL
  1492.         BREQ    FPM_PC2
  1493.         LSL     XL
  1494.         BRCS    FPM_PC3
  1495.         LDI     TEMP,$F0
  1496.         RJMP    FPM_PC2
  1497. FPM_PC3:ANDI    TEMP,$1F
  1498. FPM_PC2:LDI     COUNT,15
  1499.         CALL    SCR_FILL_ATTR
  1500.         LDH     COUNT,FLSH_COUNT
  1501.         INC     COUNT
  1502.         LDH     TEMP,FLSH_TEMP0
  1503.         LSL     TEMP
  1504.         SBRS    TEMP,5
  1505.         RJMP    FPM_PC4
  1506.         RET
  1507. ;
  1508. ;======================================
  1509. ;
  1510. FP_RD_DIR:
  1511.         LDIZ    FL_BUFFER
  1512.         STH     FLFP_BUFADR0,ZL
  1513.         STH     FLFP_BUFADR1,ZH
  1514.         STH     FLFP_TOTAL,NULL
  1515.         STH     FLFP_TOP,NULL
  1516.         STH     FLFP_SELECT,NULL
  1517.  
  1518.         CALL    CALCKCLSDIR
  1519.         LDIW    0
  1520.         CALL    RDDIRSC
  1521. ;поиск файла в директории
  1522. ;       LDIW    0               ;номер описателя файла
  1523.         RJMP    FP_RDD2
  1524.  
  1525. FP_RDD1:ADIW    WL,1            ;номерописателя++
  1526.         ADIW    ZL,$20          ;следующий описатель
  1527.         CPI     ZH,HIGH(BUF4FAT+512);
  1528.                                 ;вылезли за сектор?
  1529.         BRNE    FP_RDD2         ;нет ещё
  1530.         CALL    RDDIRSC         ;считываем следующий
  1531.         BRNE    FP_RDDE         ;кончились сектора в директории
  1532.  
  1533. FP_RDD2:LD      TEMP,Z          ;первый символ
  1534.         CPI     TEMP,$E5        ;удалён?
  1535.         BREQ    FP_RDD1
  1536.         TST     TEMP            ;пустой описатель? (конец списка)
  1537.         BREQ    FP_RDDE
  1538.         CPI     TEMP,$2E ;"."
  1539.         BRNE    FP_RDD3
  1540.         LDD     TEMP,Z+1
  1541.         CPI     TEMP,$2E ;"."
  1542.         BRNE    FP_RDD1
  1543.  
  1544. FP_RDD3:LDD     DATA,Z+$0B      ;атрибуты
  1545.         ANDI    DATA,0B11011110
  1546.         BREQ    FP_RDD4         ;файл
  1547.         CPI     DATA,$10        ;директория
  1548.         BRNE    FP_RDD1
  1549.         RJMP    FP_RDD7
  1550.  
  1551. FP_RDDE:RJMP    FP_RDDX
  1552.  
  1553. FP_RDD4:LDD     DATA,Z+8
  1554.         CPI     DATA,$52 ;"R"
  1555.         BREQ    FP_RDD5
  1556.         CPI     DATA,$42 ;"B"
  1557.         BRNE    FP_RDD1
  1558.         LDD     DATA,Z+9
  1559.         CPI     DATA,$49 ;"I"
  1560.         BRNE    FP_RDD1
  1561.         LDD     DATA,Z+10
  1562.         CPI     DATA,$4E ;"N"
  1563.         BREQ    FP_RDD6
  1564. FP_RDD1A:RJMP   FP_RDD1
  1565. FP_RDD5:LDD     DATA,Z+9
  1566.         CPI     DATA,$4F ;"O"
  1567.         BRNE    FP_RDD1
  1568.         LDD     DATA,Z+10
  1569.         CPI     DATA,$4D ;"M"
  1570.         BRNE    FP_RDD1
  1571.  
  1572. FP_RDD6:LDD     DATA,Z+31       ;длина
  1573.         TST     DATA
  1574.         BRNE    FP_RDD1
  1575.         LDD     DATA,Z+30
  1576.         LDD     R1,Z+29
  1577.         LDD     R0,Z+28
  1578.         SUB     R0,ONE
  1579.         SBC     R1,NULL
  1580.         SBC     DATA,NULL
  1581.         BRCS    FP_RDD1
  1582.         CPI     DATA,$08
  1583.         BRCC    FP_RDD1
  1584.  
  1585. FP_RDD7:LDH     XL,FLFP_BUFADR0
  1586.         LDH     XH,FLFP_BUFADR1
  1587.         LDI     COUNT,32
  1588.         PUSHZ
  1589. FP_RDD8:LD      DATA,Z+
  1590.         ST      X+,DATA
  1591.         DEC     COUNT
  1592.         BRNE    FP_RDD8
  1593.         POPZ
  1594.         STH     FLFP_BUFADR0,XL
  1595.         STH     FLFP_BUFADR1,XH
  1596.         LDH     COUNT,FLFP_TOTAL
  1597.         INC     COUNT
  1598.         STH     FLFP_TOTAL,COUNT
  1599.         CPI     COUNT,48
  1600.         BRCC    FP_SORT
  1601.         RJMP    FP_RDD1
  1602.  
  1603. FP_RDDX:LDH     COUNT,FLFP_TOTAL
  1604.         CPI     COUNT,1
  1605.         BREQ    FP_NOSORT
  1606.         TST     COUNT
  1607.         BRNE    FP_SORT
  1608.         LDH     DATA,FLMNU_FLAGS
  1609.         ANDI    DATA,0B00000111
  1610.         STH     FLMNU_FLAGS,DATA
  1611.         RJMP    FP_NOFILES
  1612. FP_SORT:
  1613. FP_RDDY:
  1614.         LDIZ    FL_BUFFER
  1615.         CLR     TMP2
  1616.         LDH     TMP3,FLFP_TOTAL
  1617.         DEC     TMP3
  1618.         LD      DATA,Z
  1619.         CPI     DATA,$2E
  1620.         BRNE    FP_RDDZ
  1621.         INC     TMP2
  1622. FP_RDDZ:RCALL   FSORT
  1623. FP_NOFILES:
  1624. FP_NOSORT:
  1625. ;
  1626.         LDIZ    FL_BUFFER
  1627.         LDH     COUNT,FLFP_TOTAL
  1628. FP_LO2: LDD     DATA,Z+11
  1629.         ANDI    DATA,0B11011110
  1630.         STD     Z+11,DATA
  1631.         BRNE    FP_LO1
  1632.         LDI     TEMP,11
  1633. FP_LO3: LD      DATA,Z
  1634.         RCALL   TOLOWER
  1635.         ST      Z+,DATA
  1636.         DEC     TEMP
  1637.         BRNE    FP_LO3
  1638.         ADIW    ZL,21
  1639.         RJMP    FP_LO4
  1640. FP_LO1: ADIW    ZL,32
  1641. FP_LO4: DEC     COUNT
  1642.         BRNE    FP_LO2
  1643.         RET
  1644. ;
  1645. ;======================================
  1646. ;
  1647. FP_OUT: CLR     COUNT
  1648. FPOUT00:PUSH    COUNT
  1649.         MOV     XH,COUNT
  1650.         ADDI    XH,FLFP_YPOS
  1651.         LDI     XL,FLFP_XPOS
  1652.         CALL    SCR_SET_CURSOR
  1653.  
  1654.         LDH     DATA,FLFP_CURSOR
  1655.         LDI     TEMP,$9F
  1656.         CP      DATA,COUNT
  1657.         BRNE    FPOUT04
  1658.         LDI     TEMP,$F0
  1659. FPOUT04:CALL    SCR_SET_ATTR
  1660.  
  1661.         LDH     DATA,FLFP_TOP
  1662.         ADD     DATA,COUNT
  1663.         LDH     TEMP,FLFP_TOTAL
  1664.         CP      DATA,TEMP
  1665.         BRCS    FPOUT01
  1666.         OR      COUNT,TEMP
  1667.         BRNE    FPOUT02
  1668.  
  1669.         LDIZ    MLMSG_FP_NOFILES*2
  1670.         CALL    SCR_PRINTMLSTR
  1671.         LDI     COUNT,FLFP_WIDTH-12 ;22
  1672.         RJMP    FPOUT03
  1673. FPOUT02:LDI     COUNT,FLFP_WIDTH ;34
  1674. FPOUT03:LDI     DATA,$20
  1675.         CALL    SCR_FILL_CHAR
  1676.         RJMP    FPOUT90
  1677.  
  1678. FPOUT01:LDIZ    FL_BUFFER
  1679.         LDI     TEMP,32
  1680.         MUL     DATA,TEMP
  1681.         ADD     ZL,R0
  1682.         ADC     ZH,R1
  1683.         PUSH    ZL
  1684.         LDI     COUNT,8
  1685.         CALL    SCR_PRNRAMSTRN
  1686.         LDI     DATA,$20
  1687.         CALL    SCR_PUTCHAR
  1688.         LDI     COUNT,3
  1689.         CALL    SCR_PRNRAMSTRN
  1690.         LDI     DATA,$B3 ;"│"
  1691.         CALL    SCR_PUTCHAR
  1692.         POP     ZL
  1693.         ;here Z=0
  1694.         PUSHZ
  1695.         LDD     DATA,Z+11
  1696.         TST     DATA
  1697.         BREQ    FPOUT11
  1698.         LDIZ    MSG_FP_DIR*2
  1699.         CALL    SCR_PRINTSTRZ
  1700.         RJMP    FPOUT12
  1701. FPOUT11:LDD     WL,Z+28
  1702.         LDD     WH,Z+29
  1703.         LDD     XL,Z+30
  1704.         RCALL   SCR_DEC1M
  1705.         LDI     DATA,$B3 ;"│"
  1706.         CALL    SCR_PUTCHAR
  1707. FPOUT12:POPZ
  1708.  
  1709.         LDD     DATA,Z+24
  1710.         ANDI    DATA,$1F
  1711.         CALL    DECBYTE
  1712.         LDI     DATA,$2E ;"."
  1713.         CALL    SCR_PUTCHAR
  1714.         LDD     DATA,Z+24
  1715.         LDD     TEMP,Z+25
  1716.         ROR     TEMP
  1717.         ROR     DATA
  1718.         SWAP    DATA
  1719.         ANDI    DATA,$0F
  1720.         CALL    DECBYTE
  1721.         LDI     DATA,$2E ;"."
  1722.         CALL    SCR_PUTCHAR
  1723.         LDD     DATA,Z+25
  1724.         LSR     DATA
  1725.         ADDI    DATA,80 ;+1980
  1726. FPOUT14:CPI     DATA,100
  1727.         BRCS    FPOUT13
  1728.         SUBI    DATA,100
  1729.         RJMP    FPOUT14
  1730. FPOUT13:CALL    DECBYTE
  1731.         LDI     DATA,$B3 ;"│"
  1732.         CALL    SCR_PUTCHAR
  1733.  
  1734.         LDD     DATA,Z+23
  1735.         LSR     DATA
  1736.         LSR     DATA
  1737.         LSR     DATA
  1738.         CALL    DECBYTE
  1739.         LDI     DATA,$3A ;":"
  1740.         CALL    SCR_PUTCHAR
  1741.         LDD     TEMP,Z+22
  1742.         LDD     DATA,Z+23
  1743.         ROL     TEMP
  1744.         ROL     DATA
  1745.         ROL     TEMP
  1746.         ROL     DATA
  1747.         ROL     TEMP
  1748.         ROL     DATA
  1749.         ANDI    DATA,$3F
  1750.         CALL    DECBYTE
  1751.  
  1752. FPOUT90:POP     COUNT
  1753.         INC     COUNT
  1754.         CPI     COUNT,FLFP_HEIGHT
  1755.         BRCC    FPOUT91
  1756.         RJMP    FPOUT00
  1757. FPOUT91:
  1758.         RET
  1759. ;
  1760. ;======================================
  1761. ;For CodePage866 only!!!
  1762. ;in:    DATA
  1763. ;out:   DATA
  1764. TOLOWER:CPI     DATA,$41
  1765.         BRCS    TOLOW9   ;$00..."@"
  1766.         CPI     DATA,$5B
  1767.         BRCS    TOLOW8   ;"A"..."Z"
  1768.         CPI     DATA,$80
  1769.         BRCS    TOLOW9   ;"["...""
  1770.         CPI     DATA,$90
  1771.         BRCS    TOLOW8   ;"А"..."П"
  1772.         CPI     DATA,$A0
  1773.         BRCS    TOLOW7   ;"Р"..."Я"
  1774.         CPI     DATA,$F0
  1775.         BRCS    TOLOW9   ;"а"..."я"
  1776.         CPI     DATA,$F8
  1777.         BRCC    TOLOW9   ;$F8...$FF
  1778.         ORI     DATA,$01 ;"Ё"..."ў"
  1779.         RET
  1780. TOLOW7: ADDI    DATA,$50
  1781.         RET
  1782. TOLOW8: ADDI    DATA,$20
  1783. TOLOW9: RET
  1784. ;
  1785. ;======================================
  1786. ;out number (up to 999999) in dec (right justify)
  1787. ;in:    XL,WH,WL == number
  1788. SCR_DEC1M:
  1789.         LDIZ    DEC1MTAB*2
  1790.         LDI     COUNT,5
  1791.         MOV     R2,ONE
  1792.         CLR     DATA
  1793. DEC1M5: LPM     R0,Z+
  1794.         LPM     R1,Z+
  1795. DEC1M2: SUB     WL,R0
  1796.         SBC     WH,R1
  1797.         SBC     XL,R2
  1798.         BRCS    DEC1M1
  1799.         INC     DATA
  1800.         RJMP    DEC1M2
  1801. DEC1M1: ADD     WL,R0
  1802.         ADC     WH,R1
  1803.         ADC     XL,R2
  1804.         TST     DATA
  1805.         BRNE    DEC1M3
  1806.         LDI     DATA,$20
  1807.         CALL    SCR_PUTCHAR
  1808.         CLR     DATA
  1809.         RJMP    DEC1M4
  1810. DEC1M3: ORI     DATA,$30
  1811.         CALL    SCR_PUTCHAR
  1812.         LDI     DATA,$30
  1813. DEC1M4: CLR     R2
  1814.         DEC     COUNT
  1815.         BRNE    DEC1M5
  1816.         MOV     DATA,WL
  1817.         ORI     DATA,$30
  1818.         JMP     SCR_PUTCHAR
  1819. DEC1MTAB:.DW    $86A0,10000,1000,100,10
  1820. ;
  1821. ;======================================
  1822. ;in:    Z == buffer ptr
  1823. ;       TMP2 == lo index
  1824. ;       TMP3 == hi index
  1825. FSORT:  CP      TMP2,TMP3
  1826.         BRLT    FSRT_1
  1827.         RET
  1828. FSRT_1: MOV     WH,TMP2
  1829.         ADD     WH,TMP3
  1830.         LSR     WH
  1831.         MOV     WL,TMP2
  1832.         RCALL   FXCHNG
  1833.         MOV     R2,TMP2
  1834.         INC     R2
  1835.         MOV     R3,TMP3
  1836. FSRT_2: CP      R3,R2
  1837.         BRLT    FSRT_7
  1838. FSRT_3: CP      TMP3,R2
  1839.         BRLT    FSRT_4
  1840.         MOV     WL,TMP2
  1841.         MOV     WH,R2
  1842.         RCALL   FCOMP
  1843.         BRCS    FSRT_4
  1844.         INC     R2
  1845.         RJMP    FSRT_3
  1846. FSRT_4: CP      R3,TMP2
  1847.         BRLT    FSRT_5
  1848.         MOV     WL,TMP2
  1849.         MOV     WH,R3
  1850.         RCALL   FCOMP
  1851.         BRCC    FSRT_5
  1852.         DEC     R3
  1853.         RJMP    FSRT_4
  1854. FSRT_5: CP      R2,R3
  1855.         BRGE    FSRT_6
  1856.         MOV     WL,R2
  1857.         MOV     WH,R3
  1858.         RCALL   FXCHNG
  1859. FSRT_6: RJMP    FSRT_2
  1860. FSRT_7: MOV     WL,TMP2
  1861.         MOV     WH,R3
  1862.         RCALL   FXCHNG
  1863.         PUSH    R3
  1864.         PUSH    TMP3
  1865.         MOV     TMP3,R3
  1866.         DEC     TMP3
  1867.         RCALL   FSORT
  1868.         POP     TMP3
  1869.         POP     TMP2
  1870.         INC     TMP2
  1871.         RJMP    FSORT
  1872. ;
  1873. ;======================================
  1874. ;in:    Z
  1875. ;       WL, WH - indexes
  1876. ;chng:  COUNT,DATA,TEMP (,X,R0,R1)
  1877. FXCHNG:
  1878.         CP      WL,WH
  1879.         BRNE    FXCHN_1
  1880.         RET
  1881. FXCHN_1:
  1882.         PUSHZ
  1883.         MOVW    XL,ZL
  1884.         LDI     COUNT,32
  1885.         MUL     WL,COUNT
  1886.         ADD     XL,R0
  1887.         ADC     XH,R1
  1888.         MUL     WH,COUNT
  1889.         ADD     ZL,R0
  1890.         ADC     ZH,R1
  1891. FXCHN_2:LD      DATA,X
  1892.         LD      TEMP,Z
  1893.         ST      X+,TEMP
  1894.         ST      Z+,DATA
  1895.         DEC     COUNT
  1896.         BRNE    FXCHN_2
  1897.         POPZ
  1898.         RET
  1899. ;
  1900. ;======================================
  1901. ;in:    Z
  1902. ;       WL, WH - indexes
  1903. ;out:   sreg.C - SET - [WL]<[WH], CLR - [WL]>=[WH]
  1904. ;chng:  COUNT,DATA,TEMP (,X,R0,R1)
  1905. FCOMP:  PUSHZ
  1906.         MOVW    XL,ZL
  1907.         LDI     DATA,32
  1908.         MUL     WH,DATA
  1909.         ADD     XL,R0
  1910.         ADC     XH,R1
  1911.         MUL     WL,DATA
  1912.         ADD     ZL,R0
  1913.         ADC     ZH,R1
  1914.         LDD     TEMP,Z+11
  1915.         ANDI    TEMP,0B11011110
  1916.         ADDI    XL,11
  1917.         LD      DATA,X
  1918.         ANDI    DATA,0B11011110
  1919.         CP      DATA,TEMP
  1920.         BRNE    FCMP9
  1921.         SUBI    XL,11
  1922.         LDI     COUNT,11
  1923. FCMP1:  LD      DATA,X+
  1924.         LD      TEMP,Z+
  1925.         CP      TEMP,DATA
  1926.         BRNE    FCMP9
  1927.         DEC     COUNT
  1928.         BRNE    FCMP1
  1929. FCMP9:  POPZ
  1930.         RET
  1931. ;
  1932. ;======================================
  1933. ;
  1934. FL_CRC_CMP:
  1935.         LPM     DATA,Z+
  1936.         CP      DATA,R0
  1937.         BRNE    FL_CRCCMP1
  1938.         LPM     DATA,Z+
  1939.         CP      DATA,R1
  1940.         BRNE    FL_CRCCMP1
  1941.         LPM     DATA,Z+
  1942.         CP      DATA,R2
  1943.         BRNE    FL_CRCCMP1
  1944.         LPM     DATA,Z+
  1945.         CP      DATA,R3
  1946.         BRNE    FL_CRCCMP1
  1947. FL_CRCCMP1:
  1948.         RET
  1949. ;
  1950. ;======================================
  1951. ;
  1952. FL_SHOWCONTENT:
  1953.         LDIZ    FL_CONTENT
  1954.         CLR     COUNT
  1955.  
  1956. FL_SHW1:STH     FLSH_TEMP2,COUNT
  1957.         RCALL   FL_SHW_SETCURSOR
  1958.         LD      DATA,Z
  1959.         LDI     TEMP,$0E
  1960.         SBRC    DATA,7
  1961.         LDI     TEMP,$07
  1962.         LDH     COUNT,FLSH_TEMP2
  1963.         LDH     DATA,FLSH_START
  1964.         CP      COUNT,DATA
  1965.         BRCS    FL_SHW5
  1966.         LDH     XH,FLSH_SIZE
  1967.         ADD     DATA,XH
  1968.         CP      COUNT,DATA
  1969.         BRCC    FL_SHW5
  1970.         LDI     TEMP,$F0
  1971. FL_SHW5:LDH     XH,FLSH_TEMP2
  1972.         LDI     DATA,$10
  1973.         SBRC    XH,2
  1974.         EOR     TEMP,DATA
  1975.         CALL    SCR_SET_ATTR
  1976.  
  1977.         ADIW    ZL,5
  1978.         LDI     COUNT,8
  1979.         CALL    SCR_PRNRAMSTRN
  1980.         LDI     DATA,$20
  1981.         CALL    SCR_PUTCHAR
  1982.         LDI     COUNT,3
  1983.         CALL    SCR_PRNRAMSTRN
  1984.  
  1985.         LDH     COUNT,FLSH_TEMP2
  1986.         INC     COUNT
  1987.         CPI     COUNT,32
  1988.         BRCS    FL_SHW1
  1989.  
  1990.         LDH     DATA,FLSH_ERASE
  1991.         CPI     DATA,$FF
  1992.         BRNE    FL_SHW6
  1993.         LDIZ    MSG_FL_ERASECHIP*2
  1994.         CALL    SCR_PRINTSTRZ
  1995. FL_SHW6:RET
  1996. ;
  1997. ;======================================
  1998. ;
  1999. FL_SHW_SETCURSOR:
  2000.         MOV     XL,COUNT
  2001.         ANDI    XL,$03
  2002.         LDI     TEMP,13
  2003.         MUL     XL,TEMP
  2004.         MOV     XL,R0
  2005.         INC     XL
  2006.         MOV     XH,COUNT
  2007.         ANDI    XH,$1C
  2008.         LSR     XH
  2009.         LSR     XH
  2010.         ADDI    XH,15
  2011.         JMP     SCR_SET_CURSOR
  2012. ;
  2013. ;======================================
  2014. ;
  2015.