Subversion Repositories pentevo

Rev

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