Subversion Repositories ngs

Rev

Rev 165 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ; LAST UPDATE: 17.05.2025 savelij
  3.  
  4. ; код для нгс
  5.  
  6.                 include macros.a80
  7.                 include ports_ngs.a80
  8.                 include sdcomand.a80
  9.                 include bootsecfat.a80
  10.                 include fat_dir.a80
  11.                 include define_vs10xx.a80
  12.                 include local_define.a80
  13.  
  14. ; патч прошивки для плеерения MOD
  15. ; плеерение, проверка и прочее
  16. COMINT          EQU 0x026B
  17. COMINT_         EQU 0x026E
  18. COMINT0         EQU 0x0273
  19. COMINT1         EQU 0x0295
  20. WTDTL           EQU 0x02BC
  21. EMPTY1          EQU 0x0942
  22. ADDA80          EQU 0x0EF8
  23. EMPTY2          EQU 0x3D5F
  24. NUMPG           EQU 0x4080                              ; всего страниц
  25. CPAGE           EQU 0x4081
  26. CNTMOD          EQU 0x4090
  27. CURMOD          EQU 0x4096
  28. CONVERT         EQU 0x40B7
  29. MTSTAT          EQU 0x4151
  30. MTSNGPS         EQU 0x415B
  31. MTSNGSZ         EQU 0x415C
  32. PlMode          EQU 0x41A0
  33. MODLLEN         EQU 0x41A1
  34. ISTACK          EQU 0x4400
  35. LDMOD           EQU 0xC3F8
  36. PLAYMOD         EQU 0xC426
  37. FXB01           EQU 0xD2B2
  38.  
  39.  BITMASK MOD_STOP_PLAY,         7                       ; 1-MOD STOP, 0-PLAY
  40.  
  41.  INIT_VAR 0x4168
  42.  SETVAR VAR_FLAGS,              BYTE
  43.  SETVAR VAR_STATUS,             BYTE                    ; 1 статус плеера
  44.  SETVAR VAR_GETVTSL,            BYTE                    ; 1 громкость MP3 чипа
  45.  SETVAR VAR_GETVTSH,            BYTE                    ; 1 биты режимов
  46.  SETVAR VAR_VSTBL,              WORD                    ; 2 текущие настройки тембров
  47.  SETVAR VAR_COUNT_MP3,          WORD                    ; 2 количество MP3
  48.  SETVAR VAR_NUMFILE,            WORD                    ; 2 номер текущего файла
  49.  SETVAR VAR_TYPE_RESET,         BYTE                    ; 1 тип сброса
  50.  SETVAR VAR_TYPE_FAT,           BYTE                    ; 1 калибр FAT
  51.  SETVAR VAR_BUF_TEXT,           8                       ; 8 буфер для текста
  52.  SETVAR VAR_SIZE_PATTERN_MOD,   BYTE                    ; 1 кол-во патернов в загруженном MOD
  53.  SETVAR VAR_SIZE_PAGES_MOD,     BYTE                    ; 1 кол-во страниц MOD
  54.  SETVAR VAR_TIMEOUT,            WORD                    ; 2 TIMEOUT на работу с новым файлом
  55.  SETVAR VAR_KUDAXOR,            WORD                    ; 2 адрес перехода на XOR BIT 7
  56.  SETVAR VAR_PAGE_PLAYER,        BYTE                    ; 1 номер страницы расположения плеера
  57.  SETVAR VAR_INT_MODE,           BYTE                    ; 1 флаг разрешенности прерываний
  58.  SETVAR VAR_CHIP_TYPE,          BYTE                    ; 1 тип чина на плате
  59.  SETVAR VAR_FILE_TYPE,          BYTE                    ; 1 тип файла
  60.  SETVAR VAR_SIZE_VARS,          0                       ; количество переменных
  61.  
  62. ; маски изменения тембров (требует проверки, на VS1011 работает только BASS
  63.  BITMASK UBASS_DIR,             7                       ; направление изменения UBASS
  64.  BITMASK UBASS,                 6                       ; UBASS
  65.  BITMASK FBASS_DIR,             5                       ; направление изменения FBASS
  66.  BITMASK FBASS,                 4                       ; FBASS
  67.  BITMASK UTREBLE_DIR,           3                       ; направление изменения UTREBLE
  68.  BITMASK UTREBLE,               2                       ; UTREBLE
  69.  BITMASK FTREBLE_DIR,           1                       ; направление изменения FTREBLE
  70.  BITMASK FTREBLE,               0                       ; FTREBLE
  71.  
  72. FREQ10          EQU 0
  73. FREQ12          EQU 1
  74. FREQ20          EQU 2
  75. FREQ24          EQU 3
  76.  
  77.                 ORG 0x8000
  78. START           DI
  79.                 LD SP,ISTACK
  80.                 CALL ALLRES                             ; сброс всех настроек
  81.                 OUT (ZXDATWR),A
  82.                 OUT (CLRCBIT),A                         ; сообщили спеку о результатах инита
  83.                 LD A,1
  84.                 LD (PlMode),A
  85.                 LD HL,0x0200
  86.                 LD (MODLLEN),HL
  87.                 JP CONTINUE_MOD
  88.  
  89. F_EXT_VS1001
  90. F_EXT_VS1011    DZ "MODMP3"
  91. F_EXT_VS1003    DZ "MODMP3WAVWMAMID"
  92. F_EXT_VS1053    DZ "MODMP3WAVWMAMIDOGG"
  93. F_EXT_VS1063    DZ "MODMP3"
  94.  
  95. TABFUNC         DW INIT_SD                              ; 00 перезапуск SD
  96.                 DW PREV_TRACK                           ; 01 предыдущий трек
  97.                 DW PLAY                                 ; 02 плей
  98.                 DW PAUSE                                ; 03 пауза
  99.                 DW STOP                                 ; 04 стоп
  100.                 DW NEXT_TRACK                           ; 05 следующий трек
  101.                 DW XORBASS                              ; 06 XOR TREBLE/BASS
  102.                 DW XORSURR                              ; 07 XOR SURROUND
  103.                 DW VOL_UP                               ; 08 громкость +
  104.                 DW VOL_DOWN                             ; 09 громкость -
  105.                 DW MUTE                                 ; 0A вкл/выкл громкости
  106.                 DW GET_TIME                             ; 0B отдать время
  107.                 DW GET_VTS                              ; 0C отдать парам 6-10
  108.                 DW GET_CURRENT                          ; 0D отдать тек номер
  109.                 DW SET_NUM                              ; 0E установка текущего номера
  110.                 DW RESET_MP3                            ; 0F сброс MP3 декодера
  111.                 DW FAT_TYPE                             ; 10 тип FAT
  112.                 DW GET_LNG                              ; 11 отдать имя файла
  113.                 DW GET_FILE_DESCR                       ; 12 отдать описатель
  114.                 DW GET_COUNT_FILES                      ; 13 отдать колво *.EXT
  115.                 DW SEND_MP3                             ; 14 прд на MP3
  116.                 DW TXT_COUNT_FILES                      ; 15 DEC число файлов
  117.                 DW TXT_CURRENT_FILE                     ; 16 DEC число текущ+1
  118.                 DW XOR_RESET                            ; 17 переключения типа сброса
  119.                 DW PREV_DIR                             ; 18 следующий DIR
  120.                 DW NEXT_DIR                             ; 19 предыдущий DIR
  121.                 DW SET_TEMBR                            ; 1A уст. тембров
  122.                 DW TXT_TEMBR_STATUS                     ; 1B чтение тембров
  123.                 DW BITRATE                              ; 1C RD битрейт и проч
  124.                 DW TEST_MODE                            ; 1D тест режима
  125.                 DW GET_CHIP_TYPE                        ; 1E номер чипа MP3
  126. END_TAB
  127.  
  128. ALLRES          CALL PATCH                              ; патч основной прошивки
  129.                 LD HL,VAR_FLAGS
  130.                 LD D,H
  131.                 LD E,L
  132.                 LD BC,VAR_SIZE_PAGES_MOD - VAR_FLAGS    ; количество переменных для зануления
  133.                 INC DE
  134.                 LD (HL),0
  135.                 LDIR                                    ; зачистка области переменных
  136.                 LD A,Softmp3
  137.                 LD (VAR_TYPE_RESET),A                   ; установка сброса MP3 чипа
  138.                 LD A,Avtodet
  139.                 CALL COM__SD
  140.                 AND A                                   ; определяем GS/NeoGS
  141.                 JR Z,INI_MP3
  142.                 LD A,NEOGS_ERROR
  143.                 JR INIT_SD.L4                           ; код ошибки =GS
  144.  
  145. INI_MP3         LD A,Hardmp3
  146.                 CALL COM__SD                            ; полная инициализация MP3 чипа
  147.  
  148. ;----FUNC00----
  149. INIT_SD         CALL RTYPEVS                            ; получение номера чипа MP3
  150.                 LD HL,0
  151.                 LD (VAR_NUMFILE),HL
  152.                 LD A,Sd_init
  153.                 CALL COM__SD
  154.                 AND A                                   ; инициализация SD карты
  155.                 JR Z,.L1
  156.                 LD A,SD_NOT_FOUND
  157.                 LD (VAR_TYPE_FAT),A
  158.                 JR .L4                                  ; код ошибки =SD карта не найдена
  159.  
  160. .L1             LD HL,VAR_FLAGS
  161.                 RES B_SD_LOST,(HL)
  162.                 LD A,Init_Fatvars
  163.                 CALL COM_FAT                            ; инициализация FAT
  164.                 CP 0x80
  165.                 JR Z,.L11
  166.                 LD (VAR_TYPE_FAT),A
  167.                 INC A
  168.                 JR NZ,.L3
  169. .L11            LD A,FAT_NOT_FOUND
  170.                 JR .L4                                  ; код ошибки =FAT не найден
  171.  
  172. .L3             CALL XORBASS.L2
  173.                 LD A,Finddir
  174.                 CALL COM_FAT                            ; поиск всех директорий
  175.                 CP 0x80
  176.                 JR Z,.L11
  177.                 LD A,Findfil
  178.                 CALL COM_FAT                            ; поиск всех файлов по маске
  179.                 CP 0x80
  180.                 JR Z,.L11
  181.                 LD (VAR_COUNT_MP3),HL
  182.                 OUT (CLRCBIT),A
  183.                 CALL PAUSE                              ; постановка на паузу
  184.                 LD A,H
  185.                 OR L
  186.                 LD A,FILES_NOT_FOUND
  187.                 JR Z,.L4                                ; код ошибки =файлов не найдено
  188.                 LD BC,0
  189.                 CALL INIPLAY
  190.                 LD A,PLAYER_OK                          ; код ошибки =все замечательно
  191. .L4             LD (VAR_STATUS),A
  192.                 RET
  193.  
  194. ;----FUNC1C----
  195. ; конверсия HDAT1,HDAT0
  196. ; после чтения BC=HDAT1, DE=HDAT0
  197. BITRATE         LD HL,VS10XX_READ << 8 + SCI_HDAT1;0x0309
  198.                 LD A,Com_mp3
  199.                 CALL COM__SD
  200.                 PUSH DE
  201.                 LD HL,VS10XX_READ << 8 + SCI_HDAT0;0x0308
  202.                 LD A,Com_mp3
  203.                 CALL COM__SD
  204.                 POP BC
  205.                 LD A,C
  206.                 AND A
  207.                 LD HL,0xA000
  208.                 JP Z,GET_RZN                            ; переход если ничего не играется
  209.                 AND %00011000
  210.                 RRCA
  211.                 RRCA
  212.                 RRCA                                    ; биты ID
  213.                 LD L,A
  214.                 LD A,D
  215.                 AND %00001100                           ; биты SAMPLE RATE
  216.                 OR L
  217.                 LD L,A
  218.                 LD A,C
  219.                 AND %00000110                           ; биты LAYER
  220.                 RLCA
  221.                 RLCA
  222.                 RLCA
  223.                 OR L
  224.                 LD L,A
  225.                 LD A,E
  226.                 AND %11000000                           ; биты MODE
  227.                 OR L
  228.                 LD L,A
  229.                 LD A,D
  230.                 AND %11110000                           ; биты BITRATE
  231.                 RRCA
  232.                 RRCA
  233.                 RRCA
  234.                 RRCA
  235.                 LD H,A
  236.                 JP GET_RZN                              ; сброс на спек содержимого HL
  237.  
  238. ;----FUNC1A----
  239. ; изменение тембров
  240. SET_TEMBR       OUT (CLRCBIT),A
  241.                 CALL WDY
  242.                 IN A,(ZXDATRD)                          ; чтение параметра
  243.                 LD B,A                                  ; сохраняем
  244.                 LD A,(VAR_CHIP_TYPE)
  245.                 CP VS1001                               ; проверяем тип чипа
  246.                 RET Z                                   ; для VS1001 выходим
  247. ; для VS1011 продолжаем
  248.                 LD A,(VAR_GETVTSH)
  249.                 BIT B_ENABLE_TEMBR,A                    ; проверяем можно ли
  250.                 RET Z                                   ; крутить тембры
  251.                 PUSH BC                                 ; сохраняем "B"
  252.                 LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302
  253.                 LD A,Com_mp3                            ; читаем текущее значение
  254.                 CALL COM__SD                            ; тембров
  255.                 POP BC                                  ; восстанавливаем "B"
  256.                 LD C,0x10                               ; шаг изменения
  257. ; меняем уровень UBASS ?
  258.                 BIT B_UBASS,B                           ; крутим UBASS?
  259.                 JR Z,.L1
  260.                 LD A,E
  261.                 AND %00001111
  262.                 LD L,A                                  ; сохраняем биты 3-0
  263.                 LD A,E
  264.                 AND %11110000
  265.                 BIT B_UBASS_DIR,B                       ; куда крутим?
  266.                 JR Z,.L01                               ; увеличение
  267. ; увеличение UBASS
  268.                 ADD A,C                                 ; увеличиваем на 1
  269.                 JR C,.L1                                ; максимум!
  270.                 JR .L02
  271.  
  272. ; уменьшение UBASS
  273. .L01            SUB C                                   ; уменьшаем на 1
  274.                 JR C,.L1                                ; минимум!
  275. .L02            ADD A,L
  276.                 LD E,A                                  ; вернули биты 3-0
  277.  
  278. ; меняем уровень UTREBLE ?
  279. .L1             BIT B_UTREBLE,B                         ; крутим UTREBLE?
  280.                 JR Z,.L2
  281.                 LD A,D
  282.                 AND %00001111
  283.                 LD L,A                                  ; сохраняем биты 3-0
  284.                 LD A,D
  285.                 AND %11110000
  286.                 BIT B_UTREBLE_DIR,B                     ; куда крутим?
  287.                 JR Z,.L03
  288. ; увеличение UTREBLE
  289.                 ADD A,C
  290.                 JR C,.L2                                ; максимум!
  291.                 JR .L04
  292.  
  293. ; уменьшение UTREBLE
  294. .L03            SUB C
  295.                 JR C,.L3                                ; минимум!
  296. .L04            ADD A,L
  297.                 LD D,A                                  ; вернули биты 3-0
  298. ; меняем уровень FBASS ?
  299. .L2             BIT B_FBASS,B                           ; крутим FBASS?
  300.                 JR Z,.L3
  301.                 LD A,E
  302.                 AND %11110000
  303.                 LD L,A                                  ; сохраняем биты 7-4
  304.                 LD A,E
  305.                 AND %00001111
  306.                 BIT B_FBASS_DIR,B                       ; куда крутим?
  307.                 JR Z,.L05
  308. ; увеличение FBASS
  309.                 INC A
  310.                 CP 0x10
  311.                 JR NC,.L3                               ; максимум!
  312.                 JR .L06
  313.  
  314. ; уменьшение FBASS
  315. .L05            AND A
  316.                 JR Z,.L3                                ; минимум!
  317.                 DEC A
  318. .L06            ADD A,L
  319.                 LD E,A                                  ; вернули биты 7-4
  320. ; меняем уровень FTREBLE ?
  321. .L3             BIT B_FTREBLE,B                         ; крутим FTREBLE?
  322.                 JR Z,WR_TEMBR
  323.                 LD A,D
  324.                 AND %11110000
  325.                 LD L,A                                  ; сохраняем биты 7-4
  326.                 LD A,D
  327.                 AND %00001111
  328.                 BIT B_FTREBLE_DIR,B                     ; куда крутим?
  329.                 JR Z,.L07
  330. ; увеличение FTREBLE
  331.                 INC A
  332.                 CP 0x10
  333.                 JR NC,WR_TEMBR                          ; максимум!
  334.                 JR .L08
  335.  
  336. ; уменьшение FTREBLE
  337. .L07            AND A
  338.                 JR Z,.L08                               ; минимум!
  339.                 DEC A
  340. .L08            ADD A,L
  341.                 LD D,A                                  ; вернули биты 7-4
  342. ; записываем изменение в чип
  343. WR_TEMBR        LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202
  344.                 LD A,Com_mp3
  345.                 JP COM__SD                              ; записали установки взад
  346.  
  347. ;----FUNC10----
  348. ; отдача байта типа FAT
  349. FAT_TYPE        LD A,(VAR_TYPE_FAT)
  350.                 JP GET_BYT
  351.  
  352. ; определение установленного чипа
  353. RTYPEVS         LD HL,VS10XX_READ << 8 + SCI_STATUS;0x0301
  354.                 LD A,Com_mp3
  355.                 CALL COM__SD
  356.                 LD A,E                                  ; нас интересуют биты 7-4 из регистра статуса
  357.                 AND SCISTATUS.M_SS_VER
  358.                 RRCA
  359.                 RRCA
  360.                 RRCA
  361.                 RRCA
  362. .L1             LD (VAR_CHIP_TYPE),A                    ; тип установленного MP3 чипа
  363.                 RET
  364.  
  365. ;----FUNC1D----
  366. ; ответ на запрос какой код работает
  367. TEST_MODE       IN A,(ZXDATRD)
  368.                 OUT (CLRCBIT),A
  369.                 LD A,(VAR_STATUS)
  370.                 OUT (ZXDATWR),A
  371.                 RET
  372.  
  373. ;----FUNC1E-----
  374. ; получение номера чипа MP3
  375. GET_CHIP_TYPE   IN A,(ZXDATRD)
  376.                 OUT (CLRCBIT),A
  377.                 LD A,(VAR_CHIP_TYPE)
  378.                 OUT (ZXDATWR),A
  379.                 RET
  380.  
  381. ;----FUNC17----
  382. ; переключение типа сброса
  383. XOR_RESET       LD HL,VAR_GETVTSH
  384.                 LD A,M_TYPE_RESET
  385.                 XOR (HL)
  386.                 LD (HL),A
  387.                 LD A,Hardmp3
  388.                 BIT B_TYPE_RESET,(HL)
  389.                 JR NZ,.L1
  390.                 LD A,Softmp3
  391. .L1             LD (VAR_TYPE_RESET),A
  392.                 RET
  393.  
  394. ;----FUNC0F----
  395. ; сброс MP3 чипа
  396. RESET_MP3       LD A,(VAR_TYPE_RESET)
  397.                 JP COM__SD
  398.  
  399. ;----FUNC04----
  400. ; остановка проигрывания
  401. STOP            CALL PAUSE
  402.                 LD BC,(VAR_NUMFILE)
  403.                 JP INIPLAY
  404.  
  405. ;----FUNC03----
  406. ; пауза воспроизведения
  407. PAUSE           LD HL,MTSTAT
  408.                 SET B_MOD_STOP_PLAY,(HL)
  409.                 LD HL,VAR_FLAGS
  410.                 RES B_PLAY_STOP,(HL)
  411.                 RET
  412.  
  413. ;----FUNC02----
  414. ; запуск воспроизведения
  415. PLAY            LD HL,(VAR_COUNT_MP3)
  416.                 LD A,H
  417.                 OR L
  418.                 RET Z
  419.                 LD HL,MTSTAT
  420.                 RES B_MOD_STOP_PLAY,(HL)
  421.                 LD HL,VAR_FLAGS
  422.                 SET B_PLAY_STOP,(HL)
  423.                 RET
  424.  
  425. ;----FUNC05----
  426. ; переход на следущий песняк
  427. NEXT_TRACK      LD BC,(VAR_NUMFILE)
  428.                 INC BC
  429.                 LD HL,(VAR_COUNT_MP3)
  430.                 LD A,H
  431.                 OR L
  432.                 RET Z
  433.                 AND A
  434.                 SBC HL,BC
  435.                 JR NZ,.L1
  436.                 LD BC,0
  437.  
  438. ; общее для переходов по файлам
  439. .L1             LD (VAR_NUMFILE),BC
  440.                 JP INIPLAY
  441.  
  442. ;----FUNC01----
  443. ; переход на предыдущий песняк
  444. PREV_TRACK      LD BC,(VAR_NUMFILE)
  445.                 LD A,B
  446.                 OR C
  447.                 JR NZ,.L1
  448.                 LD BC,(VAR_COUNT_MP3)
  449.                 LD A,B
  450.                 OR C
  451.                 RET Z
  452. .L1             DEC BC
  453.                 JR NEXT_TRACK.L1
  454.  
  455. ;----FUNC19----
  456. ; переход на первый файл следущей DIR
  457. NEXT_DIR        LD A,Nxtdir
  458.                 JR P_DIR
  459.  
  460. ;----FUNC18----
  461. ; переход на первый файл предыдущей DIR
  462. PREV_DIR        LD A,Prvdir
  463. P_DIR           LD BC,(VAR_NUMFILE)
  464.                 PUSH BC
  465.                 CALL COM_FAT
  466.                 POP HL
  467.                 CP 0x80
  468.                 JP Z,SD_LOST
  469.                 AND A
  470.                 SBC HL,BC
  471.                 JR NZ,NEXT_TRACK.L1
  472.                 RET
  473.  
  474. ;----FUNC15----
  475. ; перегонка 512 байт снаружи на MP3
  476. SEND_MP3        LD A,Dat2mp3
  477.                 JP COM__SD
  478.  
  479. ;----FUNC11----
  480. ; отдать спеку длинное имя
  481. GET_LNG         CALL RDINBC
  482.                 BIT 7,B
  483.                 JR Z,.L1
  484.                 LD BC,(VAR_NUMFILE)
  485. .L1             LD HL,VAR_GETVTSH
  486.                 RES B_NEW_FILE,(HL)
  487.                 LD HL,BUF_LNG
  488. ;               LD A,Getlong
  489. ;               CALL COM_FAT
  490. ;               CP 0x80
  491. ;               JP Z,SD_LOST
  492.                 LD E,0
  493.                 JP OUTDATA
  494.  
  495. ;----FUNC0A----
  496. ; выкл/вкл звука
  497. MUTE            LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B
  498.                 LD A,Com_mp3
  499.                 CALL COM__SD
  500.                 LD A,E
  501.                 CP 0xFE
  502.                 JR NC,MUTEOFF
  503.                 LD (MUTEOFF.L1),A
  504.                 LD HL,VAR_GETVTSH
  505.                 SET B_MUTE,(HL)
  506.                 LD E,0xFE
  507.                 JR VOL_ALL
  508.  
  509. MUTEOFF         LD E,0
  510. .L1             EQU $-1
  511.                 LD HL,VAR_GETVTSH
  512.                 RES B_MUTE,(HL)
  513.                 JR VOL_ALL
  514.  
  515. ;----FUNC08----
  516. ; увеличение громкости на единицу
  517. VOL_UP          LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B
  518.                 LD A,Com_mp3
  519.                 CALL COM__SD
  520.                 LD A,E
  521.                 AND A
  522.                 RET Z
  523.                 CP 0x80
  524.                 RET NC
  525.                 DEC E
  526.                 JR VOL_ALL
  527.  
  528. ;----FUNC09----
  529. ; уменьшение громкости на единицу
  530. VOL_DOWN        LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B
  531.                 LD A,Com_mp3
  532.                 CALL COM__SD
  533.                 LD A,E
  534.                 CP 0x7F
  535.                 RET NC
  536.                 INC E
  537. VOL_ALL         LD D,E
  538.                 LD HL,VS10XX_WRITE << 8 + SCI_VOL;0x020B
  539.                 LD A,E
  540.                 LD (VAR_GETVTSL),A
  541.                 JR XOR_ALL.L1
  542.  
  543. ;----FUNC07----
  544. ; переключение VIRTUAL SURROUND
  545. XORSURR         LD B,M_SURROUND
  546. XOR_ALL         PUSH BC
  547.                 LD HL,VS10XX_READ << 8 + SCI_MODE;0x0300
  548.                 LD A,Com_mp3
  549.                 CALL COM__SD
  550.                 POP BC
  551.                 LD A,E
  552.                 XOR B
  553.                 LD E,A
  554.                 LD A,(VAR_GETVTSH)
  555.                 XOR B
  556.                 LD (VAR_GETVTSH),A
  557.                 LD A,(VAR_CHIP_TYPE)
  558.                 CP VS1001
  559.                 JR Z,.L2
  560.                 RES 7,E
  561. .L2             LD HL,VS10XX_WRITE << 8 + SCI_MODE;0x0200
  562. .L1             LD A,Com_mp3
  563.                 JP COM__SD
  564.  
  565. ;----FUNC06----
  566. ; переключение тембров
  567. XORBASS         LD A,(VAR_CHIP_TYPE)
  568.                 CP VS1001
  569.                 JR Z,.L1
  570.                 LD B,M_ENABLE_TEMBR
  571.                 JR XOR_ALL
  572.  
  573. .L1             LD A,(VAR_GETVTSH)
  574.                 XOR M_ENABLE_TEMBR
  575.                 LD (VAR_GETVTSH),A
  576. .L2             LD A,(VAR_GETVTSH)
  577.                 BIT B_ENABLE_TEMBR,A
  578.                 JR Z,.L4
  579.                 LD DE,(VAR_VSTBL)
  580. .L3             LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202
  581.                 JR XOR_ALL.L1
  582.  
  583. .L4             LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302
  584.                 LD A,Com_mp3
  585.                 CALL COM__SD
  586.                 LD (VAR_VSTBL),DE
  587.                 LD DE,0
  588.                 JR .L3
  589.  
  590. ;----FUNC0B----
  591. ; получить время проигрывания
  592. GET_TIME        LD HL,VS10XX_READ << 8 + SCI_DECODE_TIME;0x0304
  593.                 LD A,Com_mp3
  594.                 CALL COM__SD
  595.                 EX DE,HL
  596.                 LD DE,VAR_BUF_TEXT
  597.                 PUSH DE
  598.                 LD BC,36000
  599.                 CALL SUB_BC
  600.                 LD BC,3600
  601.                 CALL SUB_BC
  602.                 LD BC,600
  603.                 CALL SUB_BC
  604.                 LD BC,60
  605.                 CALL SUB_BC
  606.                 LD BC,10
  607.                 CALL SUB_BC
  608.                 LD A,'0'
  609.                 ADD A,L
  610.                 LD (DE),A
  611.                 LD E,6
  612.                 POP HL
  613.                 JP OUTDATA
  614.  
  615. ;----FUNC1B----
  616. ; сброс на спек состояние тембров в текстовом виде
  617. TXT_TEMBR_STATUS
  618.                 LD A,(VAR_CHIP_TYPE)
  619.                 CP VS1001
  620.                 RET Z
  621.                 LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302
  622.                 LD A,Com_mp3
  623.                 CALL COM__SD
  624.                 LD A,D
  625.                 EXX
  626.                 LD DE,VAR_BUF_TEXT
  627.                 AND 0x0F
  628.                 LD L,A
  629.                 LD H,0
  630.                 LD BC,10
  631.                 CALL SUB_BC
  632.                 LD A,'0'
  633.                 ADD A,L
  634.                 LD (DE),A                               ; положили частоту TREBLE
  635.                 INC DE
  636.                 EXX
  637.                 LD A,D
  638.                 EXX
  639.                 AND 0xF0
  640.                 RRCA
  641.                 RRCA
  642.                 RRCA
  643.                 RRCA
  644.                 LD L,A
  645.                 BIT 3,A
  646.                 LD A,'+'
  647.                 JR Z,.L2
  648.                 LD A,'-'
  649. .L2             LD (DE),A
  650.                 INC DE
  651.                 LD A,L
  652.                 AND 7
  653.                 ADD A,'0'
  654.                 LD (DE),A                               ; положили уровень TREBLE
  655.                 INC DE
  656.                 EXX
  657.                 LD A,E
  658.                 EXX
  659.                 AND 0x0F
  660.                 LD L,A
  661.                 LD BC,10
  662.                 CALL SUB_BC
  663.                 LD A,'0'
  664.                 ADD A,L
  665.                 LD (DE),A                               ; положили частоту BASS
  666.                 INC DE
  667.                 EXX
  668.                 LD A,E
  669.                 EXX
  670.                 AND 0xF0
  671.                 RRCA
  672.                 RRCA
  673.                 RRCA
  674.                 RRCA
  675.                 LD L,A
  676.                 LD BC,10
  677.                 CALL SUB_BC
  678.                 LD A,'0'
  679.                 ADD A,L
  680.                 LD (DE),A                               ; положили уровень BASS
  681.                 EXX
  682.                 LD E,8
  683.                 LD HL,VAR_BUF_TEXT
  684.                 LD A,'0'
  685.                 CP (HL)
  686.                 JR NZ,.L1
  687.                 LD (HL),0x20
  688. .L1             JP OUTDATA
  689.  
  690. SUB_BC          LD A,0xFF
  691.                 AND A
  692. .L1             INC A
  693.                 SBC HL,BC
  694.                 JR NC,.L1
  695.                 ADD HL,BC
  696.                 ADD A,'0'
  697.                 LD (DE),A
  698.                 INC DE
  699.                 RET
  700.  
  701. ;----FUNC15----
  702. ; сброс на спек количество найденных файлов
  703. TXT_COUNT_FILES LD HL,(VAR_COUNT_MP3)
  704.  
  705. ; перегоняем HL в TXT и сбрасываем
  706. GETDCHR         LD DE,VAR_BUF_TEXT
  707.                 PUSH DE
  708.                 LD BC,10000
  709.                 CALL SUB_BC
  710.                 LD BC,1000
  711.                 CALL SUB_BC
  712.                 LD BC,100
  713.                 CALL SUB_BC
  714.                 LD BC,10
  715.                 CALL SUB_BC
  716.                 LD A,'0'
  717.                 ADD A,L
  718.                 LD (DE),A
  719.                 POP HL
  720.                 PUSH HL
  721.                 LD BC,4 << 8 + ' '
  722. .L1             LD A,(HL)
  723.                 CP '0'
  724.                 JR NZ,GO_OUTD
  725.                 LD (HL),C
  726.                 INC HL
  727.                 DJNZ .L1
  728. GO_OUTD         POP HL
  729.                 LD E,5
  730.                 JR OUTDATA
  731.  
  732. ;----FUNC16----
  733. ; сброс на спек номера играемого файла + 1
  734. ; с перегонкой в текстовый вид
  735. TXT_CURRENT_FILE
  736.                 LD HL,(VAR_NUMFILE)
  737.                 INC HL
  738.                 JR GETDCHR
  739.  
  740. ;----FUNC12----
  741. ; отдать спеку 33 байта описателя файла
  742. GET_FILE_DESCR  CALL RDINBC
  743.                 BIT 7,B
  744.                 JR Z,.L1
  745.                 LD BC,(VAR_NUMFILE)
  746. .L1             LD A,Getfzap
  747.                 CALL COM_FAT
  748.                 CP 0x80
  749.                 JP Z,SD_LOST
  750.                 LD BC,0x20
  751.                 ADD HL,BC
  752.                 LD (HL),E
  753.                 SBC HL,BC
  754.                 LD E,0x21
  755.  
  756. ; отдаем байтики, счетчик байта в E
  757. OUTDATA         LD A,(HL)
  758.                 INC HL
  759.                 OUT (ZXDATWR),A
  760.                 CALL WDN
  761.                 DEC E
  762.                 JR NZ,OUTDATA
  763.                 RET
  764.  
  765. ;----FUNC0E----
  766. ; установка номера файла для играния
  767. ; если не превышает количество найденного - 1
  768. SET_NUM         CALL RDINBC
  769.                 LD HL,(VAR_COUNT_MP3)
  770.                 AND A
  771.                 SBC HL,BC
  772.                 RET C
  773.                 LD (VAR_NUMFILE),BC
  774.                 RET
  775.  
  776. ; читаем в BC
  777. RDINBC          CALL WDY
  778.                 IN A,(ZXDATRD)
  779.                 LD B,A
  780.                 CALL WDY
  781.                 IN A,(ZXDATRD)
  782.                 LD C,A
  783.                 RET
  784.  
  785. ;----FUNC13----
  786. ; отдать спеку количество найденного
  787. GET_COUNT_FILES LD HL,(VAR_COUNT_MP3)
  788.                 JR GET_RZN
  789.  
  790. ;----FUNC0D----
  791. ; отдать спеку номер текущего файла
  792. GET_CURRENT     LD HL,(VAR_NUMFILE)
  793.                 JR GET_RZN
  794.  
  795. ;----FUNC0C----
  796. ; в HL содержимое битов установок
  797. GET_VTS         LD HL,(VAR_GETVTSL)
  798.  
  799. ; сбрасываем содержимое HL на спек
  800. GET_RZN         LD A,H
  801.                 OUT (ZXDATWR),A
  802.                 CALL WDN
  803.                 LD A,L
  804.  
  805. ; сбросить на спек байт A
  806. GET_BYT         OUT (ZXDATWR),A
  807.  
  808. ; ждем пока спек заберет байт из порта
  809. WDN             LD B,0
  810. .L1             DEC B
  811.                 RET Z
  812.                 IN A,(ZXSTAT)
  813.                 RLA
  814.                 JR C,.L1
  815.                 RET
  816.  
  817. ; ждем пока спек даст байт в порт
  818. WDY             IN A,(ZXSTAT)
  819.                 RLA
  820.                 JR NC,WDY
  821.                 RET
  822.  
  823. ; играть на MP3-декодер 1 сектор
  824. PLAYMP3         LD A,(VAR_FLAGS)
  825.                 BIT B_PLAY_STOP,A
  826.                 RET Z
  827.                 LD A,(VAR_FILE_TYPE)
  828.                 CP FILE_MP3
  829.                 RET NZ
  830. ; только MP3
  831.                 LD A,Nextsec
  832.                 CALL COM_FAT
  833.                 LD H,A
  834.                 EX AF,AF'
  835.                 LD A,H
  836.                 CP 0x80
  837.                 JP Z,SD_LOST
  838.                 EX AF,AF'
  839.                 RET NZ                                  ; файло не кончилось, выходим
  840.                 LD A,Zer2mp3
  841.                 CALL COM__SD
  842.                 JP NEXT_TRACK                           ; файл кончился, завершаем нулями
  843.                                                         ; и переходим на следующий файл
  844.  
  845. ; открытие файла и инит декодера
  846. INIPLAY         PUSH BC
  847.                 CALL MOD_OFF
  848.                 CALL RESET_MP3                          ; сброс чипа в зависимости от установок
  849.                 LD HL,(VAR_GETVTSL)
  850.                 BIT B_TYPE_RESET,H                      ; если сброс =HARD, то обнуляем все
  851.                                                         ; кроме типа сброса этого чипа
  852.                 JR Z,.L1
  853.                 LD L,0
  854.                 LD A,H
  855.                 AND M_TYPE_RESET
  856.                 LD H,A
  857. .L1             SET B_NEW_FILE,H                        ; включаем бит 5, пошол новый файл
  858.                 POP BC
  859.                 PUSH BC
  860.                 PUSH HL
  861.                 LD A,Openfil
  862.                 CALL COM_FAT                            ; открываем новый файл
  863.                 CP 0x80
  864.                 JP Z,SD_LOST
  865.                 POP HL
  866.                 LD (VAR_GETVTSL),HL
  867.                 LD (VAR_FILE_TYPE),A
  868.                 CP FILE_MP3
  869.                 LD E,FREQ20                             ; 20 Мгц для играния MOD
  870.                 JR NZ,.L2
  871.                 LD E,FREQ12                             ; 12 Мгц для играния MP3
  872. .L2             LD A,Freqnc
  873.                 CALL COM__SD
  874.                 LD HL,VAR_FLAGS
  875.                 RES B_FILE_LOAD,(HL)
  876.                 LD HL,0x0400
  877.                 LD (VAR_TIMEOUT),HL
  878.                 POP BC
  879.                 LD HL,BUF_LNG
  880.                 LD A,Getlong
  881.                 CALL COM_FAT                            ; чтение в буфер длинного имени файла
  882. MOD_OFF         XOR A
  883.                 OUT (VOL1),A
  884.                 OUT (VOL2),A
  885.                 OUT (VOL3),A
  886.                 OUT (VOL4),A
  887.                 OUT (VOL5),A
  888.                 OUT (VOL6),A
  889.                 OUT (VOL7),A
  890.                 OUT (VOL8),A
  891.                 OUT (VOL8),A
  892.                 RET
  893.  
  894. SD_LOST         LD SP,ISTACK
  895.                 LD HL,VAR_FLAGS
  896.                 SET B_SD_LOST,(HL)
  897.                 CALL PAUSE
  898.                 JP CONTINUE_MOD
  899.  
  900. CMP_INT         PUSH AF
  901.                 LD A,R
  902.                 JP PE,CMP_INT1
  903.                 LD A,R
  904. CMP_INT1        LD A,0
  905.                 JP PO,CMP_INT2
  906.                 LD A,1
  907. CMP_INT2        LD (VAR_INT_MODE),A
  908.                 POP AF
  909.                 RET
  910.  
  911. COM__SD         include "sd_on_ngs.a80"                 ; драйвер SD карты
  912. COM_FAT         include "fat_on_ngs.a80"                ; драйвер FAT
  913.  
  914. SET7XOR         PUSH HL
  915.                 LD HL,0
  916.                 ADD HL,SP
  917.                 EXX
  918.                 LD A,0x10
  919.                 LD SP,0x7F00
  920.                 LD BC,0xA97E                            ; LD A,(HL):XOR C
  921.                 LD DE,0x2C77                            ; LD (HL),A:INC L
  922. SPEDI1
  923.         REPT 16
  924.                 PUSH DE
  925.                 PUSH BC
  926.         ENDM
  927.                 DEC A
  928.                 JP NZ,SPEDI1
  929.                 LD HL,SPEDI2
  930.                 LD DE,0x7F00
  931.                 LD BC,ESPEDI2 - SPEDI2
  932.                 LDIR
  933.                 EXX
  934.                 LD SP,HL
  935.                 POP HL
  936.                 LD A,L
  937.                 EXX
  938.                 LD L,A
  939.                 LD H,0
  940.                 LD BC,0x7B00
  941.                 ADD HL,HL
  942.                 ADD HL,HL
  943.                 ADD HL,BC
  944.                 LD (VAR_KUDAXOR),HL
  945.                 EXX
  946.                 LD A,(VAR_SIZE_PAGES_MOD)
  947.                 LD B,A
  948.                 LD C,0x80
  949.                 RET
  950.  
  951. SPEDI2          INC H
  952.                 JP NZ,0x7B00
  953.                 INC E
  954.                 LD A,(DE)
  955.                 LD H,0x80
  956.                 OUT (MPAG),A
  957.                 DEC B
  958.                 JP NZ,0x7B00
  959.                 LD A,(VAR_PAGE_PLAYER)
  960.                 OUT (MPAG),A
  961.                 JP END7XOR
  962. ESPEDI2
  963.  
  964. SPEDI3          LD A,(VAR_PAGE_PLAYER)
  965.                 OUT (MPAG),A
  966.                 CALL SET7XOR
  967.                 LD A,(DE)
  968.                 PUSH HL
  969.                 OUT (MPAG),A
  970.                 LD HL,(VAR_KUDAXOR)
  971.                 EX (SP),HL
  972.                 RET
  973.  
  974. END7XOR         EXX
  975.                 LD HL,0
  976.                 ADD HL,SP
  977.                 LD SP,0x8000
  978.                 LD DE,0x8080
  979.                 LD B,0x40
  980. E7X1
  981.         REPT 64
  982.                 PUSH DE
  983.         ENDM
  984.                 DJNZ E7X1
  985.                 LD SP,HL
  986.                 EXX
  987.                 JP ESPEED
  988.  
  989. PATCH           LD A,(NUMPG)
  990.                 OR %00111111
  991.                 LD (VAR_PAGE_PLAYER),A                  ; страница расположения плеера
  992.                 IN A,(GSCFG0)
  993.                 RES B_RAMRO,A
  994.                 SET B_EXPAG,A
  995.                 OUT (GSCFG0),A
  996.                 LD A,0x80
  997.                 OUT (MPAGEX),A
  998.                 LD HL,SPEDI3
  999.                 LD DE,ADDA80
  1000.                 LD BC,END7XOR - SPEDI3
  1001.                 LDIR
  1002.                 LD HL,FXB01
  1003.                 LD (HL),0xCD
  1004.                 INC HL
  1005.                 LD (HL),LOW (NXTMOD)
  1006.                 INC HL
  1007.                 LD (HL),HIGH (NXTMOD)
  1008.                 LD HL,0x11D6
  1009.                 LD (HL),0xCD
  1010.                 INC HL
  1011.                 LD (HL),LOW (NXTMODR)
  1012.                 INC HL
  1013.                 LD (HL),HIGH (NXTMODR)
  1014.                 INC HL
  1015.                 EX DE,HL
  1016.                 LD HL,0x11E3
  1017.                 XOR A
  1018.                 SBC HL,DE
  1019.                 LD B,H
  1020.                 LD C,L
  1021.                 LD H,D
  1022.                 LD L,E
  1023.                 LD (HL),A
  1024.                 INC DE
  1025.                 LDIR                                    ; зачистка хвостов в ПЗУ
  1026.                 LD HL,TEKADR1
  1027.                 LD DE,EMPTY2
  1028.                 LD BC,P_END - LD_MOD
  1029.                 LDIR                                    ; перенос загрузчика и обработчика
  1030.                                                         ; окончания проигрываемого файла
  1031.                 LD HL,P_START
  1032.                 LD DE,EMPTY1
  1033.                 LD BC,P__END - P_00
  1034.                 LDIR                                    ; перенос управления MP3 плеером в ПЗУ
  1035.                 LD HL,(NUMPG)
  1036.                 LD H,0x40
  1037.                 DEC L
  1038.                 LD (HL),1
  1039.                 INC L
  1040.                 LD (HL),0                               ; отрубание последней страницы ОЗУ
  1041.                                                         ; от основного списка страниц
  1042.                 LD HL,NUMPG
  1043.                 DEC (HL)
  1044.                 LD HL,P_00
  1045.                 LD (0x0300 + (0x1F * 2)),HL             ; патч команды 1F
  1046.                 LD HL,COMMFF
  1047.                 LD (0x0300 + (0x2F * 2)),HL             ; патч команды FF
  1048.                 IN A,(GSCFG0)
  1049.                 SET B_RAMRO,A                           ; запрет записи в прошивку
  1050.                 RES B_EXPAG,A
  1051.                 OUT (GSCFG0),A
  1052.                 LD A,(VAR_PAGE_PLAYER)
  1053.                 OUT (MPAG),A
  1054.  
  1055. ; создание списка малых страниц для загрузчика файла в память
  1056. LISTPAG         LD HL,0x4000
  1057.                 LD DE,BUF_PAG
  1058. .L1             LD A,(HL)
  1059.                 ADD A,A
  1060.                 RRCA
  1061.                 LD (DE),A
  1062.                 RLCA
  1063.                 INC DE
  1064.                 INC A
  1065.                 RRCA
  1066.                 LD (DE),A
  1067.                 INC DE
  1068.                 INC HL
  1069.                 LD A,(HL)
  1070.                 DEC A
  1071.                 JR NZ,.L1
  1072.                 RET
  1073.  
  1074. TEKADR1
  1075.                 PHASE EMPTY2
  1076.  
  1077. ; грузилка файла в память NEOGS
  1078. LD_MOD          IN A,(GSCFG0)
  1079.                 AND %11001111
  1080.                 OUT (GSCFG0),A
  1081.                 LD HL,VAR_FLAGS
  1082.                 SET B_FILE_LOAD,(HL)
  1083.                 CALL MOD_OFF
  1084.                 LD A,Loadfil
  1085.                 CALL COM_FAT
  1086.                 CP 0x80
  1087.                 JP Z,SD_LOST
  1088.                 LD (VAR_SIZE_PAGES_MOD),A
  1089.                 LD A,(CPAGE)
  1090.                 OUT (MPAG),A
  1091.                 LD A,1
  1092.                 LD (CNTMOD),A
  1093.                 LD (CURMOD),A
  1094.                 CALL LDMOD
  1095.                 LD A,(MTSNGSZ)
  1096.                 LD (VAR_SIZE_PATTERN_MOD),A
  1097.                 LD BC,0x0100
  1098.                 CALL PLAYMOD
  1099.                 IN A,(GSCFG0)
  1100.                 OR %00010000
  1101.                 OUT (GSCFG0),A
  1102.                 RET
  1103.  
  1104. ESPEED          XOR A
  1105.                 LD (CPAGE),A
  1106.                 OUT (MPAG),A
  1107.                 RET
  1108.  
  1109. NXTMOD          LD HL,MTSNGPS
  1110.                 INC (HL)
  1111.                 CP (HL)
  1112.                 JP C,NXTMOD1
  1113.                 LD (MTSNGPS),A
  1114.                 RET
  1115.  
  1116. NXTMODR         LD A,(VAR_PAGE_PLAYER)
  1117.                 OUT (MPAG),A
  1118.                 CALL NEXT_TRACK
  1119.                 LD A,(VAR_FILE_TYPE)
  1120.                 CP FILE_MP3
  1121.                 JP NZ,LD_MOD
  1122.                 POP HL
  1123.                 JP OPROS
  1124.  
  1125. COMMFF          IN A,(ZXDATRD)
  1126.                 OUT (CLRCBIT),A
  1127.                 ADD A,LOW (VAR_FLAGS)
  1128.                 LD IYL,A
  1129.                 LD A,HIGH (VAR_FLAGS)
  1130.                 ADC A,0
  1131.                 LD IYH,A
  1132.                 LD A,(IY+0)
  1133.                 OUT (ZXDATWR),A
  1134.                 JP COMINT_
  1135. P_END
  1136.                 DEPHASE
  1137. P_START
  1138.                 PHASE EMPTY1
  1139.  
  1140. ; основной цикл общения со спеком
  1141. P_00            JP OPROS.L3
  1142.  
  1143. NXTMOD1         LD A,(VAR_PAGE_PLAYER)
  1144.                 OUT (MPAG),A
  1145.                 CALL NEXT_TRACK
  1146. ; продолжить играть MOD
  1147. CONTINUE_MOD    LD A,(VAR_FILE_TYPE)
  1148.                 CP FILE_MP3
  1149.                 JR Z,OPROS
  1150.                 LD A,(VAR_FLAGS)
  1151.                 BIT B_PLAY_STOP,A
  1152.                 JR Z,CONROM
  1153.                 BIT B_FILE_LOAD,A
  1154.                 CALL Z,LD_MOD
  1155. CONROM          LD A,(CPAGE)
  1156.                 OUT (MPAG),A
  1157.                 JP COMINT
  1158.  
  1159. OPROS           IN A,(ZXSTAT)
  1160.                 RRA
  1161.                 JR C,.L1
  1162.                 CALL PLAYMP3
  1163.                 JR OPROS
  1164.  
  1165. .L1             IN A,(ZXCMD)
  1166.                 CP 0x1F
  1167.                 JR NZ,CONROM
  1168. .L3             IN A,(ZXDATRD)
  1169.                 OUT (CLRCBIT),A
  1170.                 AND A
  1171.                 JR Z,.L2
  1172.                 LD H,A
  1173.                 LD A,(VAR_STATUS)
  1174.                 CP 0x78
  1175.                 JR NC,OPROS
  1176.                 LD A,H
  1177. .L2             CP LOW (END_TAB-TABFUNC) / 2 + 1
  1178.                 JR NC,OPROS
  1179.                 LD HL,CONTINUE_MOD
  1180.                 PUSH HL
  1181.                 ADD A,A
  1182.                 ADD A,LOW (TABFUNC)
  1183.                 LD L,A
  1184.                 LD A,HIGH (TABFUNC)
  1185.                 ADC A,0
  1186.                 LD H,A
  1187.                 LD A,(VAR_PAGE_PLAYER)
  1188.                 OUT (MPAG),A
  1189.                 LD A,(HL)
  1190.                 INC HL
  1191.                 LD H,(HL)
  1192.                 LD L,A
  1193.                 JP (HL)
  1194. P__END
  1195.                 DEPHASE
  1196.  
  1197.                 DUPL 0x100-LOW ($),0
  1198.  
  1199.  INIT_VAR $
  1200.  SETVAR BUF_LNG,                0x100                   ; буфер для перекод. длинного имени
  1201.  SETVAR BUFTDIR,                0x100                   ; буфер имени текущей DIR
  1202.  SETVAR BUF_PAG,                0x100                   ; таблица расширенных страниц
  1203.  SETVAR B512BAS,                0
  1204.