Subversion Repositories ngs

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 25.05.2013 savelij
  3. ;version 15.11.08
  4.  
  5. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С FAT
  6.                 EXX
  7.                 PUSH IX
  8.                 PUSH IY
  9.                 LD (ERORDRV),SP
  10.                 PUSH HL
  11.                 LD HL,EXITDRV
  12.                 EX (SP),HL
  13.                 PUSH HL
  14.                 PUSH DE
  15.                 ADD A,A
  16.                 LD L,A
  17.                 LD H,0
  18.                 LD DE,TABLFAT
  19.                 ADD HL,DE
  20.                 EX AF,AF'
  21.                 LD E,(HL)
  22.                 INC HL
  23.                 LD D,(HL)
  24.                 EX DE,HL
  25.                 POP DE
  26.                 EX (SP),HL
  27.                 EXX
  28.                 RET
  29.  
  30. ERR_DRV         LD SP,(ERORDRV)
  31. EXITDRV         POP IY
  32.                 POP IX
  33.                 RET
  34.  
  35. TABLFAT         DW WC_FAT       ;00  INIT FAT
  36.                 DW GETFZAP      ;01 HL=FILE OPISATEL
  37.                 DW GETLONG      ;02 GET LONGNAME
  38.                 DW FINDDIR      ;03 FIND ALL DIR
  39.                 DW FINDMP3      ;04 FIND ALL MP3
  40.                 DW SET_MP3      ;05 SET NUMBER FILES
  41.                 DW NEXTSEC      ;06 PLAY NEXT SECTOR
  42.                 DW OPENFIL      ;07 OPEN FILE
  43.                 DW PRVDIR       ;08 NEXT DIR 4 PLAY
  44.                 DW NXTDIR       ;09 PREVIOUS DIR 4 PLAY
  45.  
  46. BUF_512         EQU 0X4200
  47. ;0X200 БУФЕР СЕКТОРА
  48. DIR_CEP         EQU 0X4400
  49. ;0X100 ЦЕПОЧКА КЛАСТЕРОВ ПОДДИРЕКТОРИЙ
  50. ERORDRV         EQU 0X4500
  51. ;2 ВОЗВРАТ С ОШИБКОЙ В A
  52. CAL_FAT         EQU ERORDRV+2
  53. ;1 КАЛИБР FAT
  54. MANYFAT         EQU CAL_FAT+1
  55. ;1 КОЛИЧЕСТВО FAT-ТАБЛИЦ
  56. BYTSSEC         EQU MANYFAT+1
  57. ;1 КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
  58. ROOTCLS         EQU BYTSSEC+1
  59. ;4 СЕКТОР НАЧАЛА ROOT ДИРЕКТОРИИ
  60. ROOTSEC         EQU ROOTCLS+4
  61. ;2 РАЗМЕР В СЕКТОРАХ ROOT ДИРЕКТОРИИ
  62. SEC_FAT         EQU ROOTSEC+2
  63. ;4 КОЛИЧЕСТВО СЕКТОРОВ ОДНОЙ ФАТ
  64. RSVDSEC         EQU SEC_FAT+4
  65. ;2 РАЗМЕР РЕЗЕРВНОЙ ОБЛАСТИ
  66. STARTRZ         EQU RSVDSEC+2
  67. ;4 НАЧАЛО ДИСКА/РАЗДЕЛА
  68. FRSTDAT         EQU STARTRZ+4
  69. ;4 АДРЕС ПЕРВОГО СЕКТОРА ДАННЫХ ОТ BPB
  70. SEC_DSC         EQU FRSTDAT+4
  71. ;4 КОЛИЧЕСТВО СЕКТОРОВ НА ДИСКЕ/РАЗДЕЛЕ
  72. CLS_DSC         EQU SEC_DSC+4
  73. ;4 КОЛИЧЕСТВО КЛАСТЕРОВ НА ДИСКЕ/РАЗДЕЛЕ
  74. FATSTAR         EQU CLS_DSC+4
  75. ;2 АДРЕС ТЕКУЩЕГО FAT
  76. FATSTR0         EQU FATSTAR+2
  77. ;4 НАЧАЛО ПЕРВОЙ FAT ТАБЛИЦЫ
  78. FATSTR1         EQU FATSTR0+4
  79. ;4 НАЧАЛО ВТОРОЙ FAT ТАБЛИЦЫ
  80. FILE_SZ         EQU FATSTR1+4
  81. ;4 РАЗМЕР ФАЙЛА В БАЙТАХ
  82. KOLWCLS         EQU FILE_SZ+4
  83. ;4 КОЛИЧЕСТВО СВОБОДНЫХ КЛАСТЕРОВ
  84. LST0ZAP         EQU KOLWCLS+4
  85. ;4 ПЕРВЫЙ СВОБОДНЫЙ КЛАСТЕР
  86. LSTLOAD         EQU LST0ZAP+4
  87. ;4 НОМЕР СЕКТОРА ЗАГРУЖЕННОГО В БУФЕР
  88. TEK_DIR         EQU LSTLOAD+4
  89. ;4 КЛАСТЕР ТЕКУЩЕЙ DIR
  90. TEK_ZAP         EQU TEK_DIR+4
  91. ;2 ТЕКУЩАЯ ЗАПИСЬ В DIR
  92. SAVEZAP         EQU TEK_ZAP+2
  93. ;2 СОХРАНЕННАЯ ТЕКУЩАЯ ПОЗИЦИЯ
  94. TEK_LVL         EQU SAVEZAP+2
  95. ;1 ТЕКУЩИЙ УРОВЕНЬ КАТАЛОГА
  96. KCLSDIR         EQU TEK_LVL+1
  97. ;1 КОЛ-ВО КЛАСТЕРОВ ДИРЕКТОРИИ
  98. TEK_LEV         EQU KCLSDIR+1
  99. ;1 ГЛУБИНА НАХОЖДЕНИЯ В ДИРЕКТОРИЯХ
  100. NUMSECK         EQU TEK_LEV+1
  101. ;1 СЧЕТЧИК СЕКТОРОВ В КЛАСТЕРЕ
  102. PAGEDIR         EQU NUMSECK+1
  103. ;2 АДРЕС УКЛАДАНИЯ В СТРАНИЦЕ ДИРОВ
  104. PAGEMP3         EQU PAGEDIR+2
  105. ;2 АДРЕС УКЛАДАНИЯ В СТРАНИЦЕ ФАЙЛОВ
  106. TFILCLS         EQU PAGEMP3+2
  107. ;4 ТЕКУЩИЙ КЛАСТЕР
  108. TEKNUMC         EQU TFILCLS+4
  109. ;2 АДРЕС ТЕКУЩЕГО КЛАСТЕРА
  110. MPHWOST         EQU TEKNUMC+2
  111. ;1 ОСТАТОК СЕКТОРОВ В ПОСЛЕДНЕМ КЛАСТЕРЕ
  112. KOL_CLS         EQU MPHWOST+1
  113. ;4 КОЛ-ВО ПОЛНЫХ КЛАСТЕРОВ ФАЙЛА
  114. KOLVMP3         EQU KOL_CLS+4
  115. ;2 КОЛ-ВО НАЙДЕННЫХ ФАЙЛОВ
  116. KOLVDIR         EQU KOLVMP3+2
  117. ;2 КОЛ-ВО НАЙДЕННЫХ ДИРОВ
  118.  
  119. NO_LNG          POP DE
  120.                 LD BC,8
  121.                 LDIR
  122.                 LD A,(HL)
  123.                 CP 0X20
  124.                 JR Z,NO_LNG1
  125.                 EX DE,HL
  126.                 LD (HL),0X2E
  127.                 INC HL
  128.                 EX DE,HL
  129.                 LDI
  130.                 LDI
  131.                 LDI
  132. NO_LNG1         EX DE,HL
  133.                 LD (HL),0
  134.                 POP HL
  135.                 RET
  136.  
  137. GETLONG         PUSH HL
  138.                 PUSH HL
  139.                 CALL SET_MP3
  140.                 CALL GETFZAP
  141.                 BIT 0,E
  142.                 JR Z,NO_LNG
  143.                 EXX
  144.                 LD C,0
  145.                 EXX
  146. GETLNG2         DEC BC
  147.                 CALL GETRZAP
  148.                 LD A,(HL)
  149.                 INC HL
  150.                 EXX
  151.                 BIT 6,C
  152.                 POP HL
  153.                 JR NZ,GETLNGE+1
  154.                 LD C,A
  155.                 EXX
  156.                 LD A,5
  157.                 CALL GETLNG1
  158.                 AND A
  159.                 JR Z,GETLNGE
  160.                 INC HL
  161.                 INC HL
  162.                 INC HL
  163.                 LD A,6
  164.                 CALL GETLNG1
  165.                 AND A
  166.                 JR Z,GETLNGE
  167.                 INC HL
  168.                 INC HL
  169.                 LD A,2
  170.                 CALL GETLNG1
  171.                 AND A
  172.                 JR Z,GETLNGE
  173.                 EXX
  174.                 PUSH HL
  175.                 EXX
  176.                 JR GETLNG2
  177.  
  178. GETLNGE         EXX
  179.                 LD (HL),0
  180.                 EXX
  181.                 POP HL
  182.                 RET
  183.  
  184. GETLNG1         EXX
  185.                 LD B,A
  186.                 EXX
  187.                 LD D,(HL)
  188.                 INC HL
  189.                 LD E,(HL)
  190.                 INC HL
  191.                 LD A,D
  192.                 OR E
  193.                 RET Z
  194.                 LD A,E
  195.                 AND A
  196.                 JR NZ,GETLNG3
  197.                 LD A,D
  198.                 CP 0X80
  199.                 JR C,GETLNG5
  200.                 LD D,0X5F
  201.                 JR GETLNG5
  202.  
  203. GETLNG3         CP 4
  204.                 LD A,0X5F
  205.                 JR NZ,GETLNG5
  206.                 LD A,D
  207.                 LD E,0XEF
  208.                 LD D,0X5F
  209.                 CP 1
  210.                 JR Z,GETLNG4
  211.                 LD E,0XA0
  212.                 CP 0X51
  213.                 JR Z,GETLNG4
  214.                 SUB 0X10
  215.                 LD E,0X80
  216.                 JR NC,GETLNG6
  217.                 LD A,D
  218.                 JR GETLNG5
  219.  
  220. GETLNG6         CP 0X30
  221.                 JR C,GETLNG4
  222.                 LD E,0XB0
  223.                 CP 0X40
  224.                 JR C,GETLNG4
  225.                 LD A,D
  226.                 JR GETLNG5
  227.  
  228. GETLNG4         ADD A,E
  229. GETLNG5         EXX
  230.                 LD (HL),A
  231.                 INC HL
  232.                 DEC B
  233.                 EXX
  234.                 RET Z
  235.                 JR GETLNG1+3
  236. ;401,410-44F,451
  237.  
  238. LOADLST         LD HL,BUF_512
  239.                 PUSH HL
  240.                 EX AF,AF'
  241.                 LD A,2
  242.                 CALL COM__SD
  243.                 AND A
  244.                 JP NZ,ERR_DRV
  245.                 POP HL
  246.                 RET
  247.  
  248. ENT_DIR         CALL GETFZAP
  249.                 BIT 4,A
  250.                 EX AF,AF'
  251.                 LD A,E
  252.                 EX AF,AF'
  253.                 LD E,A
  254.                 LD D,(HL)
  255.                 RET Z
  256.                 EXX
  257.                 EX AF,AF'
  258.                 BIT 7,A
  259.                 JR Z,ENT_DI2
  260.                 LD HL,TEK_LEV
  261.                 LD A,(HL)
  262.                 AND A
  263.                 EXX
  264.                 RET Z
  265.                 EXX
  266.                 DEC A
  267.                 LD (HL),A
  268.                 ADD A,A
  269.                 LD H,HIGH (DIR_CEP);
  270.                 LD L,A
  271.                 LD A,(HL)
  272.                 INC L
  273.                 LD H,(HL)
  274.                 LD L,A
  275.                 CALL ENT_DI1
  276.                 EXX
  277.                 LD (TEK_ZAP),HL
  278.                 EXX
  279.                 RET
  280.  
  281. ENT_DI2         LD HL,TEK_LEV
  282.                 LD A,(HL)
  283.                 INC A
  284.                 CP 0X80
  285.                 EXX
  286.                 RET Z
  287.                 EXX
  288.                 LD (HL),A
  289.                 DEC A
  290.                 ADD A,A
  291.                 LD H,HIGH (DIR_CEP)
  292.                 LD L,A
  293.                 LD BC,(TEK_ZAP)
  294.                 LD (HL),C
  295.                 INC L
  296.                 LD (HL),B
  297. ENT_DI1         EXX
  298.                 LD DE,20
  299.                 ADD HL,DE
  300.                 LD C,(HL)
  301.                 INC HL
  302.                 LD B,(HL)
  303.                 LD E,5
  304.                 ADD HL,DE
  305.                 LD E,(HL)
  306.                 INC HL
  307.                 LD D,(HL)
  308.                 LD A,B
  309.                 OR C
  310.                 OR D
  311.                 OR E
  312.                 JR NZ,ENT_DI0
  313.                 LD DE,(ROOTCLS)
  314.                 LD BC,(ROOTCLS+2)
  315. ENT_DI0         LD (TEK_DIR),DE
  316.                 LD (TEK_DIR+2),BC
  317.                 CALL INIRTSC
  318.                 XOR A
  319.                 INC A
  320.                 RET
  321.  
  322. GETFZAP         LD BC,(TEK_ZAP)
  323.                 LD A,B
  324.                 OR C
  325.                 JR Z,GETRZAP
  326.                 PUSH BC
  327.                 DEC BC
  328.                 CALL GETRZAP
  329.                 POP BC
  330.                 LD E,A
  331. GETRZAP         PUSH DE
  332.                 CALL RDDIRSC
  333.                 POP DE
  334.                 CP 0XFF
  335.                 LD A,E
  336.                 RET Z
  337.                 EX AF,AF'
  338. GETFZA1         LD A,C
  339.                 AND 0X0F
  340.                 LD E,A
  341.                 LD D,0
  342.                 EX DE,HL
  343.                 REPT 5
  344.                 ADD HL,HL
  345.                 ENDM
  346.                 ADD HL,DE
  347.                 LD DE,11
  348.                 EX DE,HL
  349.                 ADD HL,DE
  350.                 LD L,(HL)
  351.                 LD H,0
  352.                 EX DE,HL
  353.                 CALL CP_TWOT
  354.                 JR NZ,$+4
  355.                 LD D,0X80
  356.                 EX AF,AF'
  357.                 CP 0X0F
  358.                 LD A,E
  359.                 LD E,D
  360.                 RET NZ
  361.                 SET 0,E
  362.                 RET
  363.  
  364. ;ЧТЕНИЕ СЕКТОРА DIR ПО НОМЕРУ BC
  365. ;НА ВЫХОДЕ: A=0XFF-ВЫХОД ЗА ПРЕДЕЛЫ DIR
  366. RDDIRSC         PUSH BC
  367.                 LD D,B
  368.                 LD E,C
  369.                 LD BC,0
  370.                 LD A,0X10
  371.                 CALL BCDE_A
  372.                 LD A,E
  373.                 PUSH AF
  374.                 LD A,(BYTSSEC)
  375.                 PUSH AF
  376.                 CALL BCDE_A
  377.                 LD A,(KCLSDIR)
  378.                 DEC A
  379.                 CP E
  380.                 JR NC,RDDIRS3
  381.                 POP BC
  382.                 POP BC
  383.                 POP BC
  384.                 LD A,0XFF
  385.                 AND A
  386.                 RET
  387.  
  388. RDDIRS3         LD BC,(TEK_DIR+2)
  389.                 LD A,E
  390.                 AND A
  391.                 LD DE,(TEK_DIR)
  392.                 JR Z,RDDIRS1
  393. RDDIRS2         PUSH AF
  394.                 CALL RDFATZP
  395.                 POP AF
  396.                 DEC A
  397.                 JR NZ,RDDIRS2
  398. RDDIRS1         CALL REALSEC
  399.                 POP AF
  400.                 DEC A
  401.                 LD L,A
  402.                 POP AF
  403.                 AND L
  404.                 LD L,A
  405.                 LD H,0
  406.                 ADD HL,DE
  407.                 EX DE,HL
  408.                 LD HL,0
  409.                 ADC HL,BC
  410.                 LD B,H
  411.                 LD C,L
  412.                 CALL LOADLST
  413.                 POP BC
  414.                 XOR A
  415.                 RET
  416.  
  417. INIRTSC         PUSH AF
  418.                 LD H,1
  419.                 LD A,D
  420.                 OR E
  421.                 OR B
  422.                 OR C
  423.                 JR Z,LASTCLS
  424. NEXTCLS         PUSH HL
  425.                 CALL RDFATZP
  426.                 CALL LST_CLS
  427.                 POP HL
  428.                 JR Z,LASTCLS
  429.                 INC H
  430.                 JR NEXTCLS
  431.  
  432. LASTCLS         LD A,H
  433.                 LD (KCLSDIR),A
  434.                 LD BC,0
  435.                 CALL RDDIRSC
  436.                 LD A,(HL)
  437.                 CP 0X2E
  438.                 JR NZ,INIRTS1
  439.                 INC HL
  440.                 LD A,(HL)
  441.                 CP 0X2E
  442.                 JR Z,INIRTS1
  443.                 INC BC
  444. INIRTS1         LD (TEK_ZAP),BC
  445.                 POP AF
  446.                 RET
  447.  
  448. CP_TWOT         LD A,(HL)
  449.                 CP 0X2E
  450.                 RET NZ
  451.                 INC HL
  452.                 LD A,(HL)
  453.                 DEC HL
  454.                 CP 0X2E
  455.                 RET NZ
  456.                 XOR A
  457.                 RET
  458.  
  459. LST_CLS         LD A,(CAL_FAT)
  460.                 AND A
  461.                 JR NZ,LST_CL1
  462.                 LD HL,0X0FFF
  463.                 SBC HL,DE
  464.                 RET
  465.  
  466. LST_CL1         DEC A
  467.                 JR NZ,LST_CL2
  468.                 LD HL,0XFFFF
  469.                 SBC HL,DE
  470.                 RET
  471.  
  472. LST_CL2         LD HL,0X0FFF
  473.                 SBC HL,BC
  474.                 RET NZ
  475.                 LD HL,0XFFFF
  476.                 SBC HL,DE
  477.                 RET
  478.  
  479. RDFATZP         LD A,(CAL_FAT)
  480.                 AND A
  481.                 JR Z,RDFATS0
  482.                 DEC A
  483.                 JR Z,RDFATS1
  484.                 EX DE,HL
  485.                 ADD HL,HL
  486.                 EX DE,HL
  487.                 LD HL,0
  488.                 ADC HL,BC
  489.                 ADC HL,BC
  490.                 LD A,E
  491.                 LD E,D
  492.                 LD D,L
  493.                 LD C,H
  494.                 LD B,0
  495.                 CALL RDFATS2
  496.                 INC HL
  497.                 LD C,(HL)
  498.                 INC HL
  499.                 LD B,(HL)
  500.                 RET
  501.  
  502. RDFATS1         LD BC,0
  503.                 LD A,E
  504.                 LD E,D
  505.                 LD D,C
  506. RDFATS2         PUSH AF
  507.                 PUSH BC
  508.                 LD HL,FATSTR0
  509.                 CALL BCDEHLP
  510.                 CALL LOADLST
  511.                 POP BC
  512.                 POP AF
  513.                 LD E,A
  514.                 LD D,0
  515.                 ADD HL,DE
  516.                 ADD HL,DE
  517.                 LD E,(HL)
  518.                 INC HL
  519.                 LD D,(HL)
  520.                 RET
  521.  
  522. RDFATS0         LD H,D
  523.                 LD L,E
  524.                 ADD HL,HL
  525.                 ADD HL,DE
  526.                 SRL H
  527.                 RR L
  528.                 LD A,E
  529.                 LD E,H
  530.                 LD D,0
  531.                 LD B,D
  532.                 LD C,D
  533.                 SRL E
  534.                 PUSH AF
  535.                 PUSH HL
  536.                 LD HL,FATSTR0
  537.                 CALL BCDEHLP
  538.                 CALL LOADLST
  539.                 POP BC
  540.                 LD A,B
  541.                 AND 1
  542.                 LD B,A
  543.                 ADD HL,BC
  544.                 LD B,(HL)
  545.                 INC HL
  546.                 LD A,H
  547.                 CP HIGH (BUF_512)+2
  548.                 JR NZ,RDFATS4
  549.                 PUSH BC
  550.                 LD BC,0
  551.                 INC DE
  552.                 CALL LOADLST
  553.                 POP BC
  554. RDFATS4         POP AF
  555.                 LD D,(HL)
  556.                 LD E,B
  557.                 LD BC,0
  558.                 RRA
  559.                 JR NC,RDFATS3
  560.                 REPT 4
  561.                 SRL D
  562.                 RR E
  563.                 ENDM
  564. RDFATS3         LD A,D
  565.                 AND 0X0F
  566.                 LD D,A
  567.                 RET
  568.  
  569. ;ВЫЧИСЛЕНИЕ РЕАЛЬНОГО СЕКТОРА
  570. ;НА ВХОДЕ BCDE=НОМЕР FAT
  571. ;НА ВЫХОДЕ BCDE=АДРЕС СЕКТОРА
  572. REALSEC         LD A,B
  573.                 OR C
  574.                 OR D
  575.                 OR E
  576.                 JR NZ,REALSE1
  577.                 LD HL,FATSTR1
  578.                 LD DE,(SEC_FAT)
  579.                 LD BC,(SEC_FAT+2)
  580.                 JP BCDEHLP
  581.  
  582. REALSE1         LD HL,0XFFFE
  583.                 EX DE,HL
  584.                 ADD HL,DE
  585.                 EX DE,HL
  586.                 INC HL
  587.                 ADC HL,BC
  588. ;НОМЕР КЛАСТЕРА-2
  589.                 LD A,(BYTSSEC)
  590.                 JR REALSE2
  591.  
  592. REALSE3         SLA E
  593.                 RL D
  594.                 RL L
  595.                 RL H
  596. REALSE2         RRCA
  597.                 JR NC,REALSE3
  598. ;УМНОЖИЛИ НА РАЗМЕР КЛАСТЕРА
  599.                 LD B,H
  600.                 LD C,L
  601.                 LD HL,STARTRZ
  602.                 CALL BCDEHLP
  603. ;ПРИБАВИЛИ СМЕЩЕНИЕ ОТ НАЧАЛА ДИСКА
  604.                 LD HL,FRSTDAT
  605.                 JP BCDEHLP
  606. ;ПРИБАВИЛИ СМЕЩЕНИЕ ОТ НАЧАЛА РАЗДЕЛА
  607.  
  608. BCDE200         LD E,D
  609.                 LD D,C
  610.                 LD C,B
  611.                 LD B,0
  612.                 LD A,2
  613.                 JR BCDE_A
  614.  
  615. ;BCDE>>A=BCDE
  616. BCDE_A1         SRL B
  617.                 RR C
  618.                 RR D
  619.                 RR E
  620. BCDE_A          RRCA
  621.                 JR NC,BCDE_A1
  622.                 RET
  623.  
  624. ;(ADR)-BCDE=BCDE
  625. BCDEHLM         LD A,(HL)
  626.                 INC HL
  627.                 SUB E
  628.                 LD E,A
  629.                 LD A,(HL)
  630.                 INC HL
  631.                 SBC A,D
  632.                 LD D,A
  633.                 LD A,(HL)
  634.                 INC HL
  635.                 SBC A,C
  636.                 LD C,A
  637.                 LD A,(HL)
  638.                 SBC A,B
  639.                 LD B,A
  640.                 RET
  641.  
  642. ;(ADR)+BCDE=BCDE
  643. BCDEHLP         LD A,(HL)
  644.                 INC HL
  645.                 ADD A,E
  646.                 LD E,A
  647.                 LD A,(HL)
  648.                 INC HL
  649.                 ADC A,D
  650.                 LD D,A
  651.                 LD A,(HL)
  652.                 INC HL
  653.                 ADC A,C
  654.                 LD C,A
  655.                 LD A,(HL)
  656.                 ADC A,B
  657.                 LD B,A
  658.                 RET
  659.  
  660. ;HLDE+BC=HLDE
  661. HLDEPBC         EX DE,HL
  662.                 ADD HL,BC
  663.                 EX DE,HL
  664.                 LD BC,0
  665.                 ADC HL,BC
  666.                 RET
  667.  
  668. FAT_ERR         LD A,0XFF
  669.                 LD (CAL_FAT),A
  670.                 RET
  671.  
  672. ;ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ FAT
  673. WC_FAT          LD DE,0
  674.                 LD B,D
  675.                 LD C,E
  676.                 CALL LOADLST
  677.                 PUSH HL
  678.                 POP IY
  679.                 LD DE,0X01BE
  680.                 ADD HL,DE
  681.                 LD A,(HL)
  682.                 AND A
  683.                 JR NZ,RDFAT05
  684.                 LD DE,4
  685.                 ADD HL,DE
  686.                 LD A,(HL)
  687.                 LD B,0
  688.                 CP 1
  689.                 JR Z,RDFAT06
  690.                 LD B,2
  691.                 CP 0X0B
  692.                 JR Z,RDFAT06
  693.                 CP 0X0C
  694.                 JR Z,RDFAT06
  695.                 LD B,1
  696.                 CP 6
  697.                 JR Z,RDFAT06
  698.                 CP 0X0E
  699.                 JR NZ,RDFAT05
  700. RDFAT06         LD A,B
  701.                 LD (CAL_FAT),A
  702.                 ADD HL,DE
  703.                 LD E,(HL)
  704.                 INC HL
  705.                 LD D,(HL)
  706.                 INC HL
  707.                 LD C,(HL)
  708.                 INC HL
  709.                 LD B,(HL)
  710.                 JR RDFAT00
  711.  
  712. RDFAT05         LD C,(IY+0X0D)
  713.                 XOR A
  714.                 LD E,A
  715.                 LD B,8
  716.                 RR C
  717.                 ADC A,0
  718.                 DJNZ $-4
  719.                 DEC A
  720.                 JR NZ,$+3
  721.                 INC E
  722.                 LD A,(IY+0X0E)
  723.                 OR (IY+0X0F)
  724.                 JR Z,$+3
  725.                 INC E
  726.                 LD A,(IY+0X13)
  727.                 OR (IY+0X14)
  728.                 JR NZ,$+3
  729.                 INC E
  730.                 LD A,(IY+0X20)
  731.                 OR (IY+0X21)
  732.                 OR (IY+0X22)
  733.                 OR (IY+0X23)
  734.                 JR NZ,$+3
  735.                 INC E
  736.                 LD A,(IY+0X15)
  737.                 AND 0XF0
  738.                 CP 0XF0
  739.                 JR NZ,$+3
  740.                 INC E
  741.                 LD A,E
  742.                 CP 4
  743.                 JP NZ,FAT_ERR
  744.                 LD A,0XFF
  745.                 LD (CAL_FAT),A
  746.                 LD DE,0
  747.                 LD B,D
  748.                 LD C,E
  749.  
  750. RDFAT00         LD (STARTRZ),DE
  751.                 LD (STARTRZ+2),BC
  752.                 CALL LOADLST
  753.                 PUSH HL
  754.                 POP IX
  755.                 LD HL,0
  756.                 LD E,(IX+22)
  757.                 LD D,(IX+23)
  758. ;BPB_FATSZ16
  759.                 LD A,D
  760.                 OR E
  761.                 JR NZ,RDFAT01
  762. ;ЕСЛИ НЕ FAT12/16 (BPB_FATSZ16=0)
  763.                 LD E,(IX+36)
  764.                 LD D,(IX+37)
  765.                 LD L,(IX+38)
  766.                 LD H,(IX+39)
  767. ;BPB_FATSZ32
  768. ;ТО БЕРЕМ ИЗ СМЕЩЕНИЯ +36
  769. RDFAT01         LD (SEC_FAT+2),HL
  770.                 LD (SEC_FAT),DE
  771. ;ЧИСЛО СЕКТОРОВ НА FAT-ТАБЛИЦУ
  772.                 LD HL,0
  773.                 LD E,(IX+19)
  774.                 LD D,(IX+20)
  775. ;BPB_TOTSEC16
  776.                 LD A,D
  777.                 OR E
  778.                 JR NZ,RDFAT02
  779. ;ЕСЛИ НЕ FAT12/16 (BPB_TOTSEC16=0)
  780.                 LD E,(IX+32)
  781.                 LD D,(IX+33)
  782.                 LD L,(IX+34)
  783.                 LD H,(IX+35)
  784. ;BPB_TOTSEC32
  785. ;ТО БЕРЕМ ИЗ СМЕЩЕНИЯ +32
  786. RDFAT02         LD (SEC_DSC+2),HL
  787.                 LD (SEC_DSC),DE
  788. ;К-ВО СЕКТОРОВ НА ДИСКЕ/РАЗДЕЛЕ
  789.  
  790. ;ВЫЧИСЛЯЕМ ROOTDIRSECTORS
  791.                 LD C,(IX+11)
  792.                 LD B,(IX+12)
  793. ;BPB_BYTSPERSEC
  794.                 LD E,(IX+17)
  795.                 LD D,(IX+18)
  796. ;BPB_ROOTENTCNT
  797.                 LD HL,0
  798.                 LD A,D
  799.                 OR E
  800.                 JR Z,RDFAT03
  801.                 LD B,H
  802.                 LD C,L
  803.                 LD A,0X10
  804.                 CALL BCDE_A
  805.                 EX DE,HL
  806.  
  807. ;ЭТО РЕАЛИЗОВАНА ФОРМУЛА
  808. ;ROOTDIRSECTORS=((BPB_ROOTENTCNT*32)+
  809. ;+(BPB_BYTSPERSEC-1))/BPB_BYTSPERSEC
  810. ;В HL ROOTDIRSECTORS
  811. ;ЕСЛИ FAT32, ТО HL=0 ВСЕГДА
  812.  
  813. RDFAT03         PUSH HL;ROOTDIRSECTORS
  814.                 LD (ROOTSEC),HL
  815.                 LD A,(IX+16)
  816. ;BPB_NUMFATS
  817.                 LD (MANYFAT),A
  818.                 LD DE,(SEC_FAT)
  819.                 LD HL,(SEC_FAT+2)
  820.                 DEC A
  821.                 EX DE,HL
  822.                 ADD HL,HL
  823.                 EX DE,HL
  824.                 ADC HL,HL
  825.                 DEC A
  826.                 JR NZ,$-6
  827.                 POP BC
  828. ;ПОЛНЫЙ РАЗМЕР FAT-ОБЛАСТИ В СЕКТОРАХ
  829.                 CALL HLDEPBC
  830. ;ПРИБАВИЛИ ROOTDIRSECTORS
  831.                 LD C,(IX+14)
  832.                 LD B,(IX+15)
  833. ;BPB_RSVDSECCNT
  834.                 LD (RSVDSEC),BC
  835.                 CALL HLDEPBC
  836. ;ПРИБАВИЛИ BPB_RESVDSECCNT
  837.                 LD (FRSTDAT),DE
  838.                 LD (FRSTDAT+2),HL
  839. ;ПОЛОЖИЛИ НОМЕР ПЕРВОГО СЕКТОРА ДАННЫХ
  840.                 LD B,H
  841.                 LD C,L
  842.                 LD HL,SEC_DSC
  843. ;BCDE+32-ое ЧИСЛО ПО АДРЕСУ HL
  844.                 CALL BCDEHLM
  845. ;ВЫЧЛИ ИЗ ПОЛНОГО К-ВА СЕКТОРОВ РАЗДЕЛА
  846.                 LD A,(IX+13)
  847.                 LD (BYTSSEC),A
  848.                 CALL BCDE_A
  849. ;РАЗДЕЛИЛИ НА К-ВО СЕКТОРОВ В КЛАСТЕРЕ
  850.                 LD (CLS_DSC),DE
  851.                 LD (CLS_DSC+2),BC
  852. ;ПОЛОЖИЛИ КОЛ-ВО КЛАСТЕРОВ НА РАЗДЕЛЕ
  853.  
  854.                 LD A,(CAL_FAT)
  855.                 CP 0XFF
  856.                 JR NZ,RDFAT04
  857.                 LD HL,(CLS_DSC)
  858.                 LD DE,(CLS_DSC+2)
  859.                 PUSH HL
  860.                 PUSH DE
  861.                 ADD HL,HL
  862.                 EX DE,HL
  863.                 ADC HL,HL
  864.                 LD B,H
  865.                 LD C,L
  866.                 CALL RASCHET
  867.                 LD A,1
  868.                 POP DE
  869.                 POP HL
  870.                 JR Z,RDFAT04
  871.                 ADD HL,HL
  872.                 EX DE,HL
  873.                 ADC HL,HL
  874.                 EX DE,HL
  875.                 ADD HL,HL
  876.                 EX DE,HL
  877.                 ADC HL,HL
  878.                 LD B,H
  879.                 LD C,L
  880.                 CALL RASCHET
  881.                 LD A,2
  882.                 JR Z,RDFAT04
  883.                 XOR A
  884.  
  885. ;ДЛЯ FAT12/16 ВЫЧИСЛЯЕМ АДРЕС ПЕРВОГО
  886. ;СЕКТОРА ДИРЕКТОРИИ
  887. ;ДЛЯ FAT32 БЕРЕМ ПО СМЕЩЕМИЮ +44
  888. ;НА ВЫХОДЕ BCDE-СЕКТОР ROOTDIR
  889. RDFAT04         LD (CAL_FAT),A
  890.                 PUSH AF
  891.                 AND A
  892.                 LD DE,0
  893.                 LD B,D
  894.                 LD C,E
  895.                 JR Z,FSRROO2;FAT12-NONE
  896.                 DEC A
  897.                 JR Z,FSRROO2;FAT16
  898.                 LD E,(IX+44)
  899.                 LD D,(IX+45)
  900.                 LD C,(IX+46)
  901.                 LD B,(IX+47);FAT32
  902. FSRROO2         LD (ROOTCLS),DE
  903.                 LD (ROOTCLS+2),BC
  904. ;СЕКТОР ROOT ДИРЕКТОРИИ
  905.                 LD (TEK_DIR),DE
  906.                 LD (TEK_DIR+2),BC
  907. FSRR121         PUSH DE
  908.                 PUSH BC
  909.                 LD DE,(RSVDSEC)
  910.                 LD BC,0
  911.                 LD HL,STARTRZ
  912.                 CALL BCDEHLP
  913.                 LD (FATSTR0),DE
  914.                 LD (FATSTR0+2),BC
  915.                 LD HL,SEC_FAT
  916.                 CALL BCDEHLP
  917.                 LD (FATSTR1),DE
  918.                 LD (FATSTR1+2),BC
  919.                 XOR A
  920.                 LD (TEK_LEV),A
  921.                 POP BC
  922.                 POP DE
  923.                 POP AF
  924.                 JP INIRTSC
  925.  
  926. RASCHET         CALL BCDE200
  927.                 LD HL,SEC_FAT
  928.                 CALL BCDEHLM
  929.                 LD A,E
  930.                 AND 0XF0
  931.                 OR D
  932.                 OR C
  933.                 OR B
  934.                 RET
  935.  
  936. FINDDIR         LD IY,0
  937.                 LD A,PG4DIR
  938.                 OUT (0),A
  939.                 LD HL,FORFILE
  940.                 LD (PAGEDIR),HL
  941. FNDDIR7         LD BC,0
  942.                 CALL RDDIRSC
  943.                 LD DE,0X20
  944.                 PUSH HL
  945.                 POP IX
  946.                 LD A,(HL)
  947.                 CP 0X2E
  948.                 JR NZ,FNDDIR3
  949. FNDDIR4         LD A,(IX+1)
  950.                 CP 0X2E
  951.                 JR Z,FNDDIR1
  952.                 INC BC
  953.                 ADD IX,DE
  954. FNDDIR1         INC BC
  955.                 ADD IX,DE
  956. FNDDIR3         LD A,IXH
  957.                 CP HIGH (BUF_512)+2
  958.                 JR NZ,FNDDIR2
  959.                 CALL RDDIRSC
  960.                 JR NZ,FNDDIR5
  961.                 LD DE,0X20
  962.                 PUSH HL
  963.                 POP IX
  964. FNDDIR2         LD A,(IX+0X0B)
  965.                 CP 0X0F
  966.                 JR Z,FNDDIR1
  967.                 CP 8
  968.                 JR Z,FNDDIR1
  969.                 LD A,(IX)
  970.                 CP 0XE5
  971.                 JR Z,FNDDIR1
  972.                 AND A
  973.                 JR Z,FNDDIR5
  974.                 BIT 4,(IX+0X0B)
  975.                 JR Z,FNDDIR1
  976. FNDDIR6         LD HL,(PAGEDIR)
  977.                 LD A,(IX+0X1A)
  978.                 LD (HL),A
  979.                 INC HL
  980.                 LD A,(IX+0X1B)
  981.                 LD (HL),A
  982.                 INC HL
  983.                 LD A,(IX+0X14)
  984.                 LD (HL),A
  985.                 INC HL
  986.                 LD A,(IX+0X15)
  987.                 LD (HL),A
  988.                 INC HL
  989.                 LD (PAGEDIR),HL
  990.                 DEC IY
  991.                 DEC IY
  992.                 LD (IY),C
  993.                 LD (IY+1),B
  994.                 LD (TEK_ZAP),BC
  995.                 CALL ENT_DIR
  996.                 JR FNDDIR7
  997.  
  998. FNDDIR5         LD A,IYH
  999.                 AND A
  1000.                 JR Z,FNDDIR0
  1001.                 LD BC,0
  1002.                 CALL RDDIRSC
  1003.                 PUSH HL
  1004.                 POP IX
  1005.                 LD DE,0X20
  1006.                 LD A,(HL)
  1007.                 CP 0X2E
  1008.                 JR NZ,FNDDI52
  1009.                 INC HL
  1010.                 LD A,(HL)
  1011.                 CP 0X2E
  1012.                 JR Z,FNDDI52
  1013.                 INC BC
  1014.                 ADD IX,DE
  1015. FNDDI52         LD (TEK_ZAP),BC
  1016.                 CALL ENT_DIR
  1017.                 LD C,(IY)
  1018.                 LD B,(IY+1)
  1019.                 INC IY
  1020.                 INC IY
  1021.                 CALL RDDIRSC
  1022.                 LD A,C
  1023.                 AND 0X0F
  1024.                 LD E,A
  1025.                 LD D,0
  1026.                 EX DE,HL
  1027.                 REPT 5
  1028.                 ADD HL,HL
  1029.                 ENDM
  1030.                 ADD HL,DE
  1031.                 PUSH HL
  1032.                 POP IX
  1033.                 LD DE,0X20
  1034.                 JP FNDDIR1
  1035.  
  1036. FNDDIR0         LD HL,ROOTCLS
  1037.                 LD DE,(PAGEDIR)
  1038.                 LDI
  1039.                 LDI
  1040.                 LDI
  1041.                 LDI
  1042.                 LD H,D
  1043.                 LD L,E
  1044.                 INC HL
  1045.                 INC HL
  1046.                 INC HL
  1047.                 LD (HL),0XFF
  1048.                 EX DE,HL
  1049.                 LD DE,FORFILE
  1050.                 AND A
  1051.                 SBC HL,DE
  1052.                 SRL H
  1053.                 RR L
  1054.                 SRL H
  1055.                 RR L
  1056.                 LD (KOLVDIR),HL
  1057.                 LD A,PG4MP3
  1058.                 OUT (0),A
  1059.                 RET
  1060.  
  1061. FNDMP30         LD HL,(PAGEMP3)
  1062.                 LD DE,FORFILE
  1063.                 PUSH HL
  1064.                 POP IX
  1065.                 LD (HL),0
  1066.                 INC L
  1067.                 LD (HL),0
  1068.                 DEC L
  1069.                 AND A
  1070.                 SBC HL,DE
  1071.                 SRL H
  1072.                 RR L
  1073.                 SRL H
  1074.                 RR L
  1075.                 LD DE,2
  1076.                 LD (KOLVMP3),HL
  1077.                 LD (KOLWMP3),HL
  1078.                 AND A
  1079.                 SBC HL,DE
  1080.                 EX AF,AF'
  1081.                 ADD HL,DE
  1082.                 EX AF,AF'
  1083.                 RET C
  1084.                 PUSH HL
  1085.                 LD A,PG4MP3
  1086.                 OUT (0),A
  1087.                 LD IY,1
  1088.                 LD B,H
  1089.                 LD C,L
  1090.                 LD DE,0XFFFC
  1091.                 ADD IX,DE
  1092.                 DEC HL
  1093.                 EXX
  1094.                 LD L,(IX)
  1095.                 LD H,(IX+1)
  1096.                 EXX
  1097. FNDM030         EXX
  1098.                 LD D,H
  1099.                 LD E,L
  1100.                 LD L,(IX)
  1101.                 LD H,(IX+1)
  1102.                 AND A
  1103.                 SBC HL,DE
  1104.                 EX AF,AF'
  1105.                 ADD HL,DE
  1106.                 EX AF,AF'
  1107.                 EXX
  1108.                 JR Z,$+4
  1109.                 INC IY
  1110.                 LD A,H
  1111.                 OR L
  1112.                 JR Z,FNDM033
  1113.                 DEC HL
  1114.                 ADD IX,DE
  1115.                 JR FNDM030
  1116.  
  1117. FNDM033         LD (KOLVDIR),IY
  1118.                 POP HL
  1119.                 RET
  1120.  
  1121. FINDMP3         LD A,PG4DIR
  1122.                 OUT (0),A
  1123.                 LD HL,FORFILE
  1124.                 LD (PAGEDIR),HL
  1125.                 LD (PAGEMP3),HL
  1126. FNDMP37         LD HL,(PAGEDIR)
  1127.                 LD (TEKNUMC),HL
  1128.                 LD DE,TEK_DIR
  1129.                 LDI
  1130.                 LDI
  1131.                 LDI
  1132.                 LDI
  1133.                 LD (PAGEDIR),HL
  1134.                 DEC HL
  1135.                 BIT 7,(HL)
  1136.                 JP NZ,FNDMP30
  1137.                 LD DE,(TEK_DIR)
  1138.                 LD BC,(TEK_DIR+2)
  1139.                 CALL INIRTSC
  1140.                 LD BC,0
  1141.                 CALL RDDIRSC
  1142.                 LD DE,0X20
  1143.                 PUSH HL
  1144.                 POP IX
  1145.                 LD A,(HL)
  1146.                 CP 0X2E
  1147.                 JR NZ,FNDMP33
  1148. FNDMP34         LD A,(IX+1)
  1149.                 CP 0X2E
  1150.                 JR Z,FNDMP31
  1151.                 INC BC
  1152.                 ADD IX,DE
  1153. FNDMP31         INC BC
  1154.                 ADD IX,DE
  1155. FNDMP33         LD A,IXH
  1156.                 CP HIGH (BUF_512)+2
  1157.                 JR NZ,FNDMP32
  1158.                 CALL RDDIRSC
  1159.                 JP NZ,FNDMP37
  1160.                 LD DE,0X20
  1161.                 PUSH HL
  1162.                 POP IX
  1163. FNDMP32         LD A,(IX+0X0B)
  1164.                 CP 0X0F
  1165.                 JR Z,FNDMP31
  1166.                 CP 8
  1167.                 JR Z,FNDMP31
  1168.                 LD A,(IX)
  1169.                 CP 0XE5
  1170.                 JR Z,FNDMP31
  1171.                 AND A
  1172.                 JR Z,FNDMP37
  1173.                 BIT 4,(IX+0X0B)
  1174.                 JR NZ,FNDMP31
  1175.                 EXX
  1176.                 PUSH IX
  1177.                 POP HL
  1178.                 CALL CP_EXT
  1179.                 EXX
  1180.                 DEC A
  1181.                 JP NZ,FNDMP31
  1182.                 LD A,PG4MP3
  1183.                 OUT (0),A
  1184.                 LD DE,(TEKNUMC)
  1185.                 LD HL,(PAGEMP3)
  1186. ;УКЛАДКА ОПИСАТЕЛЯ ФАЙЛА
  1187. ;2 БАЙТА АДРЕС КЛАСТЕРА ДИРЫ
  1188. ;2 БАЙТА "РЕАЛЬНЫЙ" НОМЕР ФАЙЛА
  1189.                 LD (HL),E
  1190.                 INC HL
  1191.                 LD (HL),D
  1192.                 INC HL
  1193.                 LD (HL),C
  1194.                 INC HL
  1195.                 LD (HL),B
  1196.                 INC HL
  1197.                 LD (PAGEMP3),HL
  1198.                 LD A,PG4DIR
  1199.                 OUT (0),A
  1200.                 LD DE,0X20
  1201.                 JR FNDMP31
  1202.  
  1203. F_EXT           DB "MP3",0
  1204.  
  1205. CP_EXT          PUSH BC
  1206.                 PUSH DE
  1207.                 PUSH HL
  1208.                 LD C,0
  1209.                 LD DE,F_EXT
  1210. CPETR2          LD A,(DE)
  1211.                 AND A
  1212.                 JR Z,CPETR1+1
  1213.                 INC C
  1214.                 PUSH DE
  1215.                 CALL COMPARF
  1216.                 POP DE
  1217.                 JR Z,CPETR1
  1218.                 INC DE
  1219.                 INC DE
  1220.                 INC DE
  1221.                 JR CPETR2
  1222.  
  1223. CPETR1          LD A,C
  1224.                 POP HL
  1225.                 POP DE
  1226.                 POP BC
  1227.                 RET
  1228.  
  1229. COMPARF         PUSH DE
  1230.                 LD DE,8
  1231.                 ADD HL,DE
  1232.                 POP DE
  1233.                 LD B,3
  1234.                 LD A,(DE)
  1235.                 CP (HL)
  1236.                 RET NZ
  1237.                 INC HL
  1238.                 INC DE
  1239.                 DJNZ $-5
  1240.                 RET
  1241.  
  1242. OPENFIL         CALL SET_MP3
  1243.                 CALL GETFZAP
  1244.                 LD DE,0X14
  1245.                 ADD HL,DE
  1246.                 LD C,(HL)
  1247.                 INC HL
  1248.                 LD B,(HL)
  1249.                 LD E,5
  1250.                 ADD HL,DE
  1251.                 LD E,(HL)
  1252.                 INC HL
  1253.                 LD D,(HL)
  1254.                 LD (TFILCLS),DE
  1255.                 LD (TFILCLS+2),BC
  1256.                 INC HL
  1257.                 LD E,(HL)
  1258.                 INC HL
  1259.                 LD D,(HL)
  1260.                 INC HL
  1261.                 LD C,(HL)
  1262.                 INC HL
  1263.                 LD B,(HL)
  1264.                 LD A,D
  1265.                 AND 1
  1266.                 OR E
  1267.                 EX AF,AF'
  1268.                 CALL BCDE200
  1269.                 LD A,(BYTSSEC)
  1270.                 LD H,A
  1271.                 DEC A
  1272.                 AND E
  1273.                 LD L,A
  1274.                 EX AF,AF'
  1275.                 JR Z,$+3
  1276.                 INC L
  1277.                 LD A,L
  1278.                 LD (MPHWOST),A
  1279.                 LD A,H
  1280.                 CALL BCDE_A
  1281.                 LD (KOL_CLS),DE
  1282.                 LD (KOL_CLS+2),BC
  1283.                 XOR A
  1284.                 LD (NUMSECK),A
  1285.                 RET
  1286.  
  1287. NEXTSEC         LD HL,KOL_CLS
  1288.                 LD A,(HL)
  1289.                 INC HL
  1290.                 OR (HL)
  1291.                 INC HL
  1292.                 OR (HL)
  1293.                 INC HL
  1294.                 OR (HL)
  1295.                 JR Z,LSTCLSF
  1296.                 LD DE,(TFILCLS)
  1297.                 LD BC,(TFILCLS+2)
  1298.                 PUSH DE
  1299.                 PUSH BC
  1300.                 CALL REALSEC
  1301.                 LD HL,(NUMSECK)
  1302.                 LD H,0
  1303.                 ADD HL,DE
  1304.                 EX DE,HL
  1305.                 LD HL,0
  1306.                 ADC HL,BC
  1307.                 LD B,H
  1308.                 LD C,L
  1309.                 LD A,9
  1310.                 CALL COM__SD
  1311.                 POP BC
  1312.                 POP DE
  1313.                 LD A,(NUMSECK)
  1314.                 INC A
  1315.                 LD H,A
  1316.                 LD (NUMSECK),A
  1317.                 LD A,(BYTSSEC)
  1318.                 CP H
  1319.                 RET NZ
  1320.                 XOR A
  1321.                 LD (NUMSECK),A
  1322.                 CALL RDFATZP
  1323.                 LD (TFILCLS),DE
  1324.                 LD (TFILCLS+2),BC
  1325.                 LD HL,KOL_CLS
  1326.                 LD DE,1
  1327.                 LD B,D
  1328.                 LD C,D
  1329.                 CALL BCDEHLM
  1330.                 LD (KOL_CLS),DE
  1331.                 LD (KOL_CLS+2),BC
  1332.                 XOR A
  1333.                 INC A
  1334.                 RET
  1335.  
  1336. LSTCLSF         LD DE,(TFILCLS)
  1337.                 LD BC,(TFILCLS+2)
  1338.                 CALL REALSEC
  1339.                 LD HL,(NUMSECK)
  1340.                 LD H,0
  1341.                 ADD HL,DE
  1342.                 EX DE,HL
  1343.                 LD HL,0
  1344.                 ADC HL,BC
  1345.                 LD B,H
  1346.                 LD C,L
  1347.                 LD A,9
  1348.                 CALL COM__SD
  1349.                 LD A,(NUMSECK)
  1350.                 INC A
  1351.                 LD H,A
  1352.                 LD (NUMSECK),A
  1353.                 LD A,(MPHWOST)
  1354.                 AND A
  1355.                 RET Z
  1356.                 CP H
  1357.                 RET
  1358.  
  1359. SET_MP3         LD H,B
  1360.                 LD L,C
  1361.                 LD DE,FORFILE
  1362.                 ADD HL,HL
  1363.                 ADD HL,HL
  1364.                 ADD HL,DE
  1365.                 LD E,(HL)
  1366.                 INC HL
  1367.                 LD D,(HL)
  1368.                 INC HL
  1369.                 PUSH HL
  1370.                 LD A,PG4DIR
  1371.                 OUT (0),A
  1372.                 EX DE,HL
  1373.                 LD DE,TEK_DIR
  1374.                 LDI
  1375.                 LDI
  1376.                 LDI
  1377.                 LDI
  1378.                 LD DE,(TEK_DIR)
  1379.                 LD BC,(TEK_DIR+2)
  1380.                 CALL INIRTSC
  1381.                 LD A,PG4MP3
  1382.                 OUT (0),A
  1383.                 POP HL
  1384.                 LD E,(HL)
  1385.                 INC HL
  1386.                 LD D,(HL)
  1387.                 LD (TEK_ZAP),DE
  1388.                 RET
  1389.  
  1390. PRVDIR          LD HL,(KOLVDIR)
  1391.                 LD DE,2
  1392.                 AND A
  1393.                 SBC HL,DE
  1394.                 RET C
  1395.                 LD HL,(KOLVMP3)
  1396.                 AND A
  1397.                 SBC HL,DE
  1398.                 RET C
  1399.                 LD H,B
  1400.                 LD L,C
  1401.                 LD DE,FORFILE
  1402.                 ADD HL,HL
  1403.                 ADD HL,HL
  1404.                 ADD HL,DE
  1405.                 PUSH HL
  1406.                 POP IX
  1407.                 LD H,B
  1408.                 LD L,C
  1409.                 LD BC,(KOLVMP3)
  1410.                 LD DE,0XFFFC
  1411.                 EXX
  1412.                 LD L,(IX)
  1413.                 LD H,(IX+1)
  1414.                 EXX
  1415.                 CALL PRVDIR2
  1416.                 CALL PRVDIR2
  1417.                 LD DE,4
  1418.                 JR NXTDIR2
  1419.  
  1420. PRVDIR2         EXX
  1421.                 LD D,H
  1422.                 LD E,L
  1423.                 LD L,(IX)
  1424.                 LD H,(IX+1)
  1425.                 AND A
  1426.                 SBC HL,DE
  1427.                 EX AF,AF'
  1428.                 ADD HL,DE
  1429.                 EX AF,AF'
  1430.                 EXX
  1431.                 RET NZ
  1432.                 LD A,H
  1433.                 OR L
  1434.                 JR Z,PRVDIR4
  1435.                 DEC HL
  1436.                 ADD IX,DE
  1437.                 JR PRVDIR2
  1438.  
  1439. PRVDIR4         LD H,B
  1440.                 LD L,C
  1441.                 DEC HL
  1442.                 ADD HL,HL
  1443.                 ADD HL,HL
  1444.                 LD IX,FORFILE
  1445.                 EX DE,HL
  1446.                 ADD IX,DE
  1447.                 EX DE,HL
  1448.                 LD H,B
  1449.                 LD L,C
  1450.                 DEC HL
  1451.                 JR PRVDIR2
  1452.  
  1453. NXTDIR          LD HL,(KOLVDIR)
  1454.                 LD DE,2
  1455.                 AND A
  1456.                 SBC HL,DE
  1457.                 RET C
  1458.                 LD HL,(KOLVMP3)
  1459.                 AND A
  1460.                 SBC HL,DE
  1461.                 RET C
  1462.                 LD H,B
  1463.                 LD L,C
  1464.                 LD DE,FORFILE
  1465.                 ADD HL,HL
  1466.                 ADD HL,HL
  1467.                 ADD HL,DE
  1468.                 PUSH HL
  1469.                 POP IX
  1470.                 LD H,B
  1471.                 LD L,C
  1472.                 LD BC,(KOLVMP3)
  1473.                 LD DE,4
  1474.                 EXX
  1475.                 LD L,(IX)
  1476.                 LD H,(IX+1)
  1477.                 EXX
  1478. NXTDIR2         EXX
  1479.                 LD D,H
  1480.                 LD E,L
  1481.                 LD L,(IX)
  1482.                 LD H,(IX+1)
  1483.                 AND A
  1484.                 SBC HL,DE
  1485.                 EX AF,AF'
  1486.                 ADD HL,DE
  1487.                 EX AF,AF'
  1488.                 EXX
  1489.                 JR NZ,NXTDIR3
  1490.                 INC HL
  1491.                 ADD IX,DE
  1492.                 AND A
  1493.                 SBC HL,BC
  1494.                 EX AF,AF'
  1495.                 ADD HL,BC
  1496.                 EX AF,AF'
  1497.                 JR NZ,NXTDIR2
  1498.                 LD HL,0
  1499.                 LD IX,FORFILE
  1500.                 JR NXTDIR2
  1501.  
  1502. NXTDIR3         LD B,H
  1503.                 LD C,L
  1504.                 RET
  1505.