Subversion Repositories ngs

Rev

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

Rev Author Line No. Line
105 savelij 1
 
181 savelij 2
; LAST UPDATE: 17.05.2025 savelij
105 savelij 3
 
164 savelij 4
; код для нгс
105 savelij 5
 
112 savelij 6
                include macros.a80
105 savelij 7
                include ports_ngs.a80
8
                include sdcomand.a80
163 savelij 9
                include bootsecfat.a80
164 savelij 10
                include fat_dir.a80
165 savelij 11
                include define_vs10xx.a80
12
                include local_define.a80
105 savelij 13
 
164 savelij 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
165 savelij 24
NUMPG           EQU 0x4080                              ; всего страниц
25
CPAGE           EQU 0x4081
164 savelij 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
105 savelij 38
 
165 savelij 39
 BITMASK MOD_STOP_PLAY,         7                       ; 1-MOD STOP, 0-PLAY
40
 
164 savelij 41
 INIT_VAR 0x4168
181 savelij 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                       ; количество переменных
105 savelij 61
 
165 savelij 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
105 savelij 71
 
112 savelij 72
FREQ10          EQU 0
73
FREQ12          EQU 1
74
FREQ20          EQU 2
75
FREQ24          EQU 3
105 savelij 76
 
164 savelij 77
                ORG 0x8000
105 savelij 78
START           DI
79
                LD SP,ISTACK
165 savelij 80
                CALL ALLRES                             ; сброс всех настроек
105 savelij 81
                OUT (ZXDATWR),A
165 savelij 82
                OUT (CLRCBIT),A                         ; сообщили спеку о результатах инита
105 savelij 83
                LD A,1
84
                LD (PlMode),A
164 savelij 85
                LD HL,0x0200
105 savelij 86
                LD (MODLLEN),HL
165 savelij 87
                JP CONTINUE_MOD
105 savelij 88
 
181 savelij 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
 
165 savelij 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                              ; патч основной прошивки
181 savelij 129
                LD HL,VAR_FLAGS
105 savelij 130
                LD D,H
131
                LD E,L
181 savelij 132
                LD BC,VAR_SIZE_PAGES_MOD - VAR_FLAGS    ; количество переменных для зануления
105 savelij 133
                INC DE
134
                LD (HL),0
165 savelij 135
                LDIR                                    ; зачистка области переменных
105 savelij 136
                LD A,Softmp3
181 savelij 137
                LD (VAR_TYPE_RESET),A                   ; установка сброса MP3 чипа
105 savelij 138
                LD A,Avtodet
139
                CALL COM__SD
165 savelij 140
                AND A                                   ; определяем GS/NeoGS
105 savelij 141
                JR Z,INI_MP3
165 savelij 142
                LD A,NEOGS_ERROR
143
                JR INIT_SD.L4                           ; код ошибки =GS
105 savelij 144
 
145
INI_MP3         LD A,Hardmp3
165 savelij 146
                CALL COM__SD                            ; полная инициализация MP3 чипа
105 savelij 147
 
148
;----FUNC00----
165 savelij 149
INIT_SD         CALL RTYPEVS                            ; получение номера чипа MP3
150
                LD HL,0
181 savelij 151
                LD (VAR_NUMFILE),HL
105 savelij 152
                LD A,Sd_init
153
                CALL COM__SD
165 savelij 154
                AND A                                   ; инициализация SD карты
155
                JR Z,.L1
156
                LD A,SD_NOT_FOUND
181 savelij 157
                LD (VAR_TYPE_FAT),A
165 savelij 158
                JR .L4                                  ; код ошибки =SD карта не найдена
105 savelij 159
 
181 savelij 160
.L1             LD HL,VAR_FLAGS
165 savelij 161
                RES B_SD_LOST,(HL)
163 savelij 162
                LD A,Init_Fatvars
165 savelij 163
                CALL COM_FAT                            ; инициализация FAT
164 savelij 164
                CP 0x80
165 savelij 165
                JR Z,.L11
181 savelij 166
                LD (VAR_TYPE_FAT),A
105 savelij 167
                INC A
165 savelij 168
                JR NZ,.L3
169
.L11            LD A,FAT_NOT_FOUND
170
                JR .L4                                  ; код ошибки =FAT не найден
105 savelij 171
 
165 savelij 172
.L3             CALL XORBASS.L2
105 savelij 173
                LD A,Finddir
165 savelij 174
                CALL COM_FAT                            ; поиск всех директорий
164 savelij 175
                CP 0x80
165 savelij 176
                JR Z,.L11
105 savelij 177
                LD A,Findfil
165 savelij 178
                CALL COM_FAT                            ; поиск всех файлов по маске
164 savelij 179
                CP 0x80
165 savelij 180
                JR Z,.L11
181 savelij 181
                LD (VAR_COUNT_MP3),HL
165 savelij 182
                OUT (CLRCBIT),A
183
                CALL PAUSE                              ; постановка на паузу
105 savelij 184
                LD A,H
185
                OR L
165 savelij 186
                LD A,FILES_NOT_FOUND
187
                JR Z,.L4                                ; код ошибки =файлов не найдено
105 savelij 188
                LD BC,0
189
                CALL INIPLAY
165 savelij 190
                LD A,PLAYER_OK                          ; код ошибки =все замечательно
181 savelij 191
.L4             LD (VAR_STATUS),A
105 savelij 192
                RET
193
 
194
;----FUNC1C----
165 savelij 195
; конверсия HDAT1,HDAT0
196
; после чтения BC=HDAT1, DE=HDAT0
197
BITRATE         LD HL,VS10XX_READ << 8 + SCI_HDAT1;0x0309
105 savelij 198
                LD A,Com_mp3
199
                CALL COM__SD
200
                PUSH DE
165 savelij 201
                LD HL,VS10XX_READ << 8 + SCI_HDAT0;0x0308
105 savelij 202
                LD A,Com_mp3
203
                CALL COM__SD
204
                POP BC
205
                LD A,C
206
                AND A
164 savelij 207
                LD HL,0xA000
165 savelij 208
                JP Z,GET_RZN                            ; переход если ничего не играется
105 savelij 209
                AND %00011000
210
                RRCA
211
                RRCA
165 savelij 212
                RRCA                                    ; биты ID
105 savelij 213
                LD L,A
214
                LD A,D
165 savelij 215
                AND %00001100                           ; биты SAMPLE RATE
105 savelij 216
                OR L
217
                LD L,A
218
                LD A,C
165 savelij 219
                AND %00000110                           ; биты LAYER
105 savelij 220
                RLCA
221
                RLCA
222
                RLCA
223
                OR L
224
                LD L,A
225
                LD A,E
165 savelij 226
                AND %11000000                           ; биты MODE
105 savelij 227
                OR L
228
                LD L,A
229
                LD A,D
165 savelij 230
                AND %11110000                           ; биты BITRATE
105 savelij 231
                RRCA
232
                RRCA
233
                RRCA
234
                RRCA
235
                LD H,A
165 savelij 236
                JP GET_RZN                              ; сброс на спек содержимого HL
105 savelij 237
 
238
;----FUNC1A----
165 savelij 239
; изменение тембров
240
SET_TEMBR       OUT (CLRCBIT),A
105 savelij 241
                CALL WDY
165 savelij 242
                IN A,(ZXDATRD)                          ; чтение параметра
243
                LD B,A                                  ; сохраняем
181 savelij 244
                LD A,(VAR_CHIP_TYPE)
165 savelij 245
                CP VS1001                               ; проверяем тип чипа
246
                RET Z                                   ; для VS1001 выходим
247
; для VS1011 продолжаем
181 savelij 248
                LD A,(VAR_GETVTSH)
165 savelij 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
105 savelij 260
                LD A,E
165 savelij 261
                AND %00001111
262
                LD L,A                                  ; сохраняем биты 3-0
105 savelij 263
                LD A,E
165 savelij 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
105 savelij 271
 
165 savelij 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
105 savelij 281
                LD A,D
165 savelij 282
                AND %00001111
283
                LD L,A                                  ; сохраняем биты 3-0
105 savelij 284
                LD A,D
165 savelij 285
                AND %11110000
286
                BIT B_UTREBLE_DIR,B                     ; куда крутим?
287
                JR Z,.L03
288
; увеличение UTREBLE
105 savelij 289
                ADD A,C
165 savelij 290
                JR C,.L2                                ; максимум!
291
                JR .L04
105 savelij 292
 
165 savelij 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
105 savelij 301
                LD A,E
165 savelij 302
                AND %11110000
303
                LD L,A                                  ; сохраняем биты 7-4
105 savelij 304
                LD A,E
165 savelij 305
                AND %00001111
306
                BIT B_FBASS_DIR,B                       ; куда крутим?
307
                JR Z,.L05
308
; увеличение FBASS
105 savelij 309
                INC A
164 savelij 310
                CP 0x10
165 savelij 311
                JR NC,.L3                               ; максимум!
312
                JR .L06
105 savelij 313
 
165 savelij 314
; уменьшение FBASS
315
.L05            AND A
316
                JR Z,.L3                                ; минимум!
105 savelij 317
                DEC A
165 savelij 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
105 savelij 323
                LD A,D
165 savelij 324
                AND %11110000
325
                LD L,A                                  ; сохраняем биты 7-4
105 savelij 326
                LD A,D
165 savelij 327
                AND %00001111
328
                BIT B_FTREBLE_DIR,B                     ; куда крутим?
329
                JR Z,.L07
330
; увеличение FTREBLE
105 savelij 331
                INC A
164 savelij 332
                CP 0x10
165 savelij 333
                JR NC,WR_TEMBR                          ; максимум!
334
                JR .L08
105 savelij 335
 
165 savelij 336
; уменьшение FTREBLE
337
.L07            AND A
338
                JR Z,.L08                               ; минимум!
105 savelij 339
                DEC A
165 savelij 340
.L08            ADD A,L
341
                LD D,A                                  ; вернули биты 7-4
342
; записываем изменение в чип
343
WR_TEMBR        LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202
105 savelij 344
                LD A,Com_mp3
165 savelij 345
                JP COM__SD                              ; записали установки взад
105 savelij 346
 
347
;----FUNC10----
165 savelij 348
; отдача байта типа FAT
181 savelij 349
FAT_TYPE        LD A,(VAR_TYPE_FAT)
105 savelij 350
                JP GET_BYT
351
 
165 savelij 352
; определение установленного чипа
353
RTYPEVS         LD HL,VS10XX_READ << 8 + SCI_STATUS;0x0301
105 savelij 354
                LD A,Com_mp3
355
                CALL COM__SD
165 savelij 356
                LD A,E                                  ; нас интересуют биты 7-4 из регистра статуса
181 savelij 357
                AND SCISTATUS.M_SS_VER
105 savelij 358
                RRCA
359
                RRCA
165 savelij 360
                RRCA
361
                RRCA
181 savelij 362
.L1             LD (VAR_CHIP_TYPE),A                    ; тип установленного MP3 чипа
105 savelij 363
                RET
364
 
365
;----FUNC1D----
165 savelij 366
; ответ на запрос какой код работает
367
TEST_MODE       IN A,(ZXDATRD)
368
                OUT (CLRCBIT),A
181 savelij 369
                LD A,(VAR_STATUS)
105 savelij 370
                OUT (ZXDATWR),A
371
                RET
372
 
165 savelij 373
;----FUNC1E-----
374
; получение номера чипа MP3
375
GET_CHIP_TYPE   IN A,(ZXDATRD)
376
                OUT (CLRCBIT),A
181 savelij 377
                LD A,(VAR_CHIP_TYPE)
165 savelij 378
                OUT (ZXDATWR),A
379
                RET
380
 
105 savelij 381
;----FUNC17----
165 savelij 382
; переключение типа сброса
181 savelij 383
XOR_RESET       LD HL,VAR_GETVTSH
165 savelij 384
                LD A,M_TYPE_RESET
105 savelij 385
                XOR (HL)
386
                LD (HL),A
387
                LD A,Hardmp3
165 savelij 388
                BIT B_TYPE_RESET,(HL)
389
                JR NZ,.L1
105 savelij 390
                LD A,Softmp3
181 savelij 391
.L1             LD (VAR_TYPE_RESET),A
105 savelij 392
                RET
393
 
394
;----FUNC0F----
165 savelij 395
; сброс MP3 чипа
181 savelij 396
RESET_MP3       LD A,(VAR_TYPE_RESET)
105 savelij 397
                JP COM__SD
398
 
399
;----FUNC04----
165 savelij 400
; остановка проигрывания
401
STOP            CALL PAUSE
181 savelij 402
                LD BC,(VAR_NUMFILE)
105 savelij 403
                JP INIPLAY
404
 
405
;----FUNC03----
165 savelij 406
; пауза воспроизведения
407
PAUSE           LD HL,MTSTAT
408
                SET B_MOD_STOP_PLAY,(HL)
181 savelij 409
                LD HL,VAR_FLAGS
165 savelij 410
                RES B_PLAY_STOP,(HL)
105 savelij 411
                RET
412
 
413
;----FUNC02----
165 savelij 414
; запуск воспроизведения
181 savelij 415
PLAY            LD HL,(VAR_COUNT_MP3)
105 savelij 416
                LD A,H
417
                OR L
418
                RET Z
165 savelij 419
                LD HL,MTSTAT
420
                RES B_MOD_STOP_PLAY,(HL)
181 savelij 421
                LD HL,VAR_FLAGS
165 savelij 422
                SET B_PLAY_STOP,(HL)
105 savelij 423
                RET
424
 
425
;----FUNC05----
165 savelij 426
; переход на следущий песняк
181 savelij 427
NEXT_TRACK      LD BC,(VAR_NUMFILE)
105 savelij 428
                INC BC
181 savelij 429
                LD HL,(VAR_COUNT_MP3)
105 savelij 430
                LD A,H
431
                OR L
432
                RET Z
433
                AND A
434
                SBC HL,BC
165 savelij 435
                JR NZ,.L1
105 savelij 436
                LD BC,0
437
 
165 savelij 438
; общее для переходов по файлам
181 savelij 439
.L1             LD (VAR_NUMFILE),BC
105 savelij 440
                JP INIPLAY
441
 
442
;----FUNC01----
165 savelij 443
; переход на предыдущий песняк
181 savelij 444
PREV_TRACK      LD BC,(VAR_NUMFILE)
105 savelij 445
                LD A,B
446
                OR C
165 savelij 447
                JR NZ,.L1
181 savelij 448
                LD BC,(VAR_COUNT_MP3)
105 savelij 449
                LD A,B
450
                OR C
451
                RET Z
165 savelij 452
.L1             DEC BC
453
                JR NEXT_TRACK.L1
105 savelij 454
 
455
;----FUNC19----
165 savelij 456
; переход на первый файл следущей DIR
457
NEXT_DIR        LD A,Nxtdir
105 savelij 458
                JR P_DIR
459
 
460
;----FUNC18----
165 savelij 461
; переход на первый файл предыдущей DIR
462
PREV_DIR        LD A,Prvdir
181 savelij 463
P_DIR           LD BC,(VAR_NUMFILE)
105 savelij 464
                PUSH BC
465
                CALL COM_FAT
466
                POP HL
164 savelij 467
                CP 0x80
105 savelij 468
                JP Z,SD_LOST
469
                AND A
470
                SBC HL,BC
165 savelij 471
                JR NZ,NEXT_TRACK.L1
105 savelij 472
                RET
473
 
474
;----FUNC15----
165 savelij 475
; перегонка 512 байт снаружи на MP3
476
SEND_MP3        LD A,Dat2mp3
105 savelij 477
                JP COM__SD
478
 
479
;----FUNC11----
165 savelij 480
; отдать спеку длинное имя
105 savelij 481
GET_LNG         CALL RDINBC
482
                BIT 7,B
165 savelij 483
                JR Z,.L1
181 savelij 484
                LD BC,(VAR_NUMFILE)
485
.L1             LD HL,VAR_GETVTSH
165 savelij 486
                RES B_NEW_FILE,(HL)
105 savelij 487
                LD HL,BUF_LNG
488
;               LD A,Getlong
489
;               CALL COM_FAT
164 savelij 490
;               CP 0x80
105 savelij 491
;               JP Z,SD_LOST
492
                LD E,0
493
                JP OUTDATA
494
 
495
;----FUNC0A----
165 savelij 496
; выкл/вкл звука
497
MUTE            LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B
105 savelij 498
                LD A,Com_mp3
499
                CALL COM__SD
500
                LD A,E
164 savelij 501
                CP 0xFE
105 savelij 502
                JR NC,MUTEOFF
165 savelij 503
                LD (MUTEOFF.L1),A
181 savelij 504
                LD HL,VAR_GETVTSH
165 savelij 505
                SET B_MUTE,(HL)
164 savelij 506
                LD E,0xFE
105 savelij 507
                JR VOL_ALL
508
 
509
MUTEOFF         LD E,0
165 savelij 510
.L1             EQU $-1
181 savelij 511
                LD HL,VAR_GETVTSH
165 savelij 512
                RES B_MUTE,(HL)
105 savelij 513
                JR VOL_ALL
514
 
515
;----FUNC08----
165 savelij 516
; увеличение громкости на единицу
517
VOL_UP          LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B
105 savelij 518
                LD A,Com_mp3
519
                CALL COM__SD
520
                LD A,E
521
                AND A
522
                RET Z
164 savelij 523
                CP 0x80
105 savelij 524
                RET NC
525
                DEC E
526
                JR VOL_ALL
527
 
528
;----FUNC09----
165 savelij 529
; уменьшение громкости на единицу
530
VOL_DOWN        LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B
105 savelij 531
                LD A,Com_mp3
532
                CALL COM__SD
533
                LD A,E
164 savelij 534
                CP 0x7F
105 savelij 535
                RET NC
536
                INC E
537
VOL_ALL         LD D,E
165 savelij 538
                LD HL,VS10XX_WRITE << 8 + SCI_VOL;0x020B
105 savelij 539
                LD A,E
181 savelij 540
                LD (VAR_GETVTSL),A
165 savelij 541
                JR XOR_ALL.L1
105 savelij 542
 
543
;----FUNC07----
165 savelij 544
; переключение VIRTUAL SURROUND
545
XORSURR         LD B,M_SURROUND
105 savelij 546
XOR_ALL         PUSH BC
165 savelij 547
                LD HL,VS10XX_READ << 8 + SCI_MODE;0x0300
105 savelij 548
                LD A,Com_mp3
549
                CALL COM__SD
550
                POP BC
551
                LD A,E
552
                XOR B
553
                LD E,A
181 savelij 554
                LD A,(VAR_GETVTSH)
105 savelij 555
                XOR B
181 savelij 556
                LD (VAR_GETVTSH),A
557
                LD A,(VAR_CHIP_TYPE)
165 savelij 558
                CP VS1001
559
                JR Z,.L2
105 savelij 560
                RES 7,E
165 savelij 561
.L2             LD HL,VS10XX_WRITE << 8 + SCI_MODE;0x0200
562
.L1             LD A,Com_mp3
105 savelij 563
                JP COM__SD
564
 
565
;----FUNC06----
165 savelij 566
; переключение тембров
181 savelij 567
XORBASS         LD A,(VAR_CHIP_TYPE)
165 savelij 568
                CP VS1001
569
                JR Z,.L1
570
                LD B,M_ENABLE_TEMBR
105 savelij 571
                JR XOR_ALL
572
 
181 savelij 573
.L1             LD A,(VAR_GETVTSH)
165 savelij 574
                XOR M_ENABLE_TEMBR
181 savelij 575
                LD (VAR_GETVTSH),A
576
.L2             LD A,(VAR_GETVTSH)
165 savelij 577
                BIT B_ENABLE_TEMBR,A
578
                JR Z,.L4
181 savelij 579
                LD DE,(VAR_VSTBL)
165 savelij 580
.L3             LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202
581
                JR XOR_ALL.L1
105 savelij 582
 
165 savelij 583
.L4             LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302
105 savelij 584
                LD A,Com_mp3
585
                CALL COM__SD
181 savelij 586
                LD (VAR_VSTBL),DE
105 savelij 587
                LD DE,0
165 savelij 588
                JR .L3
105 savelij 589
 
590
;----FUNC0B----
165 savelij 591
; получить время проигрывания
592
GET_TIME        LD HL,VS10XX_READ << 8 + SCI_DECODE_TIME;0x0304
105 savelij 593
                LD A,Com_mp3
594
                CALL COM__SD
595
                EX DE,HL
181 savelij 596
                LD DE,VAR_BUF_TEXT
105 savelij 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
165 savelij 608
                LD A,'0'
105 savelij 609
                ADD A,L
610
                LD (DE),A
611
                LD E,6
612
                POP HL
613
                JP OUTDATA
614
 
615
;----FUNC1B----
165 savelij 616
; сброс на спек состояние тембров в текстовом виде
617
TXT_TEMBR_STATUS
181 savelij 618
                LD A,(VAR_CHIP_TYPE)
165 savelij 619
                CP VS1001
105 savelij 620
                RET Z
165 savelij 621
                LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302
105 savelij 622
                LD A,Com_mp3
623
                CALL COM__SD
624
                LD A,D
625
                EXX
181 savelij 626
                LD DE,VAR_BUF_TEXT
164 savelij 627
                AND 0x0F
105 savelij 628
                LD L,A
629
                LD H,0
630
                LD BC,10
631
                CALL SUB_BC
165 savelij 632
                LD A,'0'
105 savelij 633
                ADD A,L
165 savelij 634
                LD (DE),A                               ; положили частоту TREBLE
105 savelij 635
                INC DE
636
                EXX
637
                LD A,D
638
                EXX
164 savelij 639
                AND 0xF0
105 savelij 640
                RRCA
641
                RRCA
642
                RRCA
643
                RRCA
644
                LD L,A
645
                BIT 3,A
165 savelij 646
                LD A,'+'
647
                JR Z,.L2
648
                LD A,'-'
649
.L2             LD (DE),A
105 savelij 650
                INC DE
651
                LD A,L
652
                AND 7
165 savelij 653
                ADD A,'0'
654
                LD (DE),A                               ; положили уровень TREBLE
105 savelij 655
                INC DE
656
                EXX
657
                LD A,E
658
                EXX
164 savelij 659
                AND 0x0F
105 savelij 660
                LD L,A
661
                LD BC,10
662
                CALL SUB_BC
165 savelij 663
                LD A,'0'
105 savelij 664
                ADD A,L
165 savelij 665
                LD (DE),A                               ; положили частоту BASS
105 savelij 666
                INC DE
667
                EXX
668
                LD A,E
669
                EXX
164 savelij 670
                AND 0xF0
105 savelij 671
                RRCA
672
                RRCA
673
                RRCA
674
                RRCA
675
                LD L,A
676
                LD BC,10
677
                CALL SUB_BC
165 savelij 678
                LD A,'0'
105 savelij 679
                ADD A,L
165 savelij 680
                LD (DE),A                               ; положили уровень BASS
105 savelij 681
                EXX
682
                LD E,8
181 savelij 683
                LD HL,VAR_BUF_TEXT
165 savelij 684
                LD A,'0'
105 savelij 685
                CP (HL)
165 savelij 686
                JR NZ,.L1
164 savelij 687
                LD (HL),0x20
165 savelij 688
.L1             JP OUTDATA
105 savelij 689
 
164 savelij 690
SUB_BC          LD A,0xFF
105 savelij 691
                AND A
165 savelij 692
.L1             INC A
105 savelij 693
                SBC HL,BC
165 savelij 694
                JR NC,.L1
105 savelij 695
                ADD HL,BC
165 savelij 696
                ADD A,'0'
105 savelij 697
                LD (DE),A
698
                INC DE
699
                RET
700
 
701
;----FUNC15----
165 savelij 702
; сброс на спек количество найденных файлов
181 savelij 703
TXT_COUNT_FILES LD HL,(VAR_COUNT_MP3)
105 savelij 704
 
165 savelij 705
; перегоняем HL в TXT и сбрасываем
181 savelij 706
GETDCHR         LD DE,VAR_BUF_TEXT
105 savelij 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
165 savelij 716
                LD A,'0'
105 savelij 717
                ADD A,L
718
                LD (DE),A
719
                POP HL
720
                PUSH HL
165 savelij 721
                LD BC,4 << 8 + ' '
722
.L1             LD A,(HL)
723
                CP '0'
105 savelij 724
                JR NZ,GO_OUTD
725
                LD (HL),C
726
                INC HL
165 savelij 727
                DJNZ .L1
105 savelij 728
GO_OUTD         POP HL
729
                LD E,5
730
                JR OUTDATA
731
 
732
;----FUNC16----
165 savelij 733
; сброс на спек номера играемого файла + 1
734
; с перегонкой в текстовый вид
735
TXT_CURRENT_FILE
181 savelij 736
                LD HL,(VAR_NUMFILE)
105 savelij 737
                INC HL
738
                JR GETDCHR
739
 
740
;----FUNC12----
165 savelij 741
; отдать спеку 33 байта описателя файла
742
GET_FILE_DESCR  CALL RDINBC
105 savelij 743
                BIT 7,B
165 savelij 744
                JR Z,.L1
181 savelij 745
                LD BC,(VAR_NUMFILE)
165 savelij 746
.L1             LD A,Getfzap
105 savelij 747
                CALL COM_FAT
164 savelij 748
                CP 0x80
105 savelij 749
                JP Z,SD_LOST
164 savelij 750
                LD BC,0x20
105 savelij 751
                ADD HL,BC
752
                LD (HL),E
753
                SBC HL,BC
164 savelij 754
                LD E,0x21
105 savelij 755
 
165 savelij 756
; отдаем байтики, счетчик байта в E
105 savelij 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----
165 savelij 766
; установка номера файла для играния
767
; если не превышает количество найденного - 1
105 savelij 768
SET_NUM         CALL RDINBC
181 savelij 769
                LD HL,(VAR_COUNT_MP3)
105 savelij 770
                AND A
771
                SBC HL,BC
772
                RET C
181 savelij 773
                LD (VAR_NUMFILE),BC
105 savelij 774
                RET
775
 
165 savelij 776
; читаем в BC
105 savelij 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----
165 savelij 786
; отдать спеку количество найденного
181 savelij 787
GET_COUNT_FILES LD HL,(VAR_COUNT_MP3)
105 savelij 788
                JR GET_RZN
789
 
790
;----FUNC0D----
165 savelij 791
; отдать спеку номер текущего файла
181 savelij 792
GET_CURRENT     LD HL,(VAR_NUMFILE)
105 savelij 793
                JR GET_RZN
794
 
795
;----FUNC0C----
165 savelij 796
; в HL содержимое битов установок
181 savelij 797
GET_VTS         LD HL,(VAR_GETVTSL)
105 savelij 798
 
165 savelij 799
; сбрасываем содержимое HL на спек
105 savelij 800
GET_RZN         LD A,H
801
                OUT (ZXDATWR),A
802
                CALL WDN
803
                LD A,L
804
 
165 savelij 805
; сбросить на спек байт A
105 savelij 806
GET_BYT         OUT (ZXDATWR),A
807
 
165 savelij 808
; ждем пока спек заберет байт из порта
112 savelij 809
WDN             LD B,0
165 savelij 810
.L1             DEC B
112 savelij 811
                RET Z
812
                IN A,(ZXSTAT)
105 savelij 813
                RLA
165 savelij 814
                JR C,.L1
105 savelij 815
                RET
816
 
165 savelij 817
; ждем пока спек даст байт в порт
105 savelij 818
WDY             IN A,(ZXSTAT)
819
                RLA
820
                JR NC,WDY
821
                RET
822
 
165 savelij 823
; играть на MP3-декодер 1 сектор
181 savelij 824
PLAYMP3         LD A,(VAR_FLAGS)
165 savelij 825
                BIT B_PLAY_STOP,A
105 savelij 826
                RET Z
181 savelij 827
                LD A,(VAR_FILE_TYPE)
165 savelij 828
                CP FILE_MP3
105 savelij 829
                RET NZ
165 savelij 830
; только MP3
105 savelij 831
                LD A,Nextsec
832
                CALL COM_FAT
833
                LD H,A
834
                EX AF,AF'
835
                LD A,H
164 savelij 836
                CP 0x80
105 savelij 837
                JP Z,SD_LOST
838
                EX AF,AF'
165 savelij 839
                RET NZ                                  ; файло не кончилось, выходим
105 savelij 840
                LD A,Zer2mp3
841
                CALL COM__SD
165 savelij 842
                JP NEXT_TRACK                           ; файл кончился, завершаем нулями
843
                                                        ; и переходим на следующий файл
105 savelij 844
 
165 savelij 845
; открытие файла и инит декодера
105 savelij 846
INIPLAY         PUSH BC
112 savelij 847
                CALL MOD_OFF
165 savelij 848
                CALL RESET_MP3                          ; сброс чипа в зависимости от установок
181 savelij 849
                LD HL,(VAR_GETVTSL)
165 savelij 850
                BIT B_TYPE_RESET,H                      ; если сброс =HARD, то обнуляем все
851
                                                        ; кроме типа сброса этого чипа
852
                JR Z,.L1
105 savelij 853
                LD L,0
854
                LD A,H
165 savelij 855
                AND M_TYPE_RESET
105 savelij 856
                LD H,A
165 savelij 857
.L1             SET B_NEW_FILE,H                        ; включаем бит 5, пошол новый файл
105 savelij 858
                POP BC
859
                PUSH BC
860
                PUSH HL
861
                LD A,Openfil
165 savelij 862
                CALL COM_FAT                            ; открываем новый файл
164 savelij 863
                CP 0x80
105 savelij 864
                JP Z,SD_LOST
865
                POP HL
181 savelij 866
                LD (VAR_GETVTSL),HL
867
                LD (VAR_FILE_TYPE),A
165 savelij 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
112 savelij 873
                CALL COM__SD
181 savelij 874
                LD HL,VAR_FLAGS
165 savelij 875
                RES B_FILE_LOAD,(HL)
164 savelij 876
                LD HL,0x0400
181 savelij 877
                LD (VAR_TIMEOUT),HL
105 savelij 878
                POP BC
879
                LD HL,BUF_LNG
880
                LD A,Getlong
165 savelij 881
                CALL COM_FAT                            ; чтение в буфер длинного имени файла
105 savelij 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
181 savelij 895
                LD HL,VAR_FLAGS
165 savelij 896
                SET B_SD_LOST,(HL)
897
                CALL PAUSE
898
                JP CONTINUE_MOD
105 savelij 899
 
112 savelij 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
181 savelij 907
CMP_INT2        LD (VAR_INT_MODE),A
112 savelij 908
                POP AF
909
                RET
910
 
165 savelij 911
COM__SD         include "sd_on_ngs.a80"                 ; драйвер SD карты
912
COM_FAT         include "fat_on_ngs.a80"                ; драйвер FAT
105 savelij 913
 
914
SET7XOR         PUSH HL
915
                LD HL,0
916
                ADD HL,SP
917
                EXX
164 savelij 918
                LD A,0x10
919
                LD SP,0x7F00
165 savelij 920
                LD BC,0xA97E                            ; LD A,(HL):XOR C
921
                LD DE,0x2C77                            ; LD (HL),A:INC L
922
SPEDI1
923
        REPT 16
105 savelij 924
                PUSH DE
925
                PUSH BC
165 savelij 926
        ENDM
105 savelij 927
                DEC A
928
                JP NZ,SPEDI1
929
                LD HL,SPEDI2
164 savelij 930
                LD DE,0x7F00
165 savelij 931
                LD BC,ESPEDI2 - SPEDI2
105 savelij 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
164 savelij 940
                LD BC,0x7B00
105 savelij 941
                ADD HL,HL
942
                ADD HL,HL
943
                ADD HL,BC
181 savelij 944
                LD (VAR_KUDAXOR),HL
105 savelij 945
                EXX
181 savelij 946
                LD A,(VAR_SIZE_PAGES_MOD)
105 savelij 947
                LD B,A
164 savelij 948
                LD C,0x80
105 savelij 949
                RET
950
 
951
SPEDI2          INC H
164 savelij 952
                JP NZ,0x7B00
105 savelij 953
                INC E
954
                LD A,(DE)
164 savelij 955
                LD H,0x80
105 savelij 956
                OUT (MPAG),A
957
                DEC B
164 savelij 958
                JP NZ,0x7B00
181 savelij 959
                LD A,(VAR_PAGE_PLAYER)
105 savelij 960
                OUT (MPAG),A
961
                JP END7XOR
962
ESPEDI2
963
 
181 savelij 964
SPEDI3          LD A,(VAR_PAGE_PLAYER)
105 savelij 965
                OUT (MPAG),A
966
                CALL SET7XOR
967
                LD A,(DE)
968
                PUSH HL
969
                OUT (MPAG),A
181 savelij 970
                LD HL,(VAR_KUDAXOR)
105 savelij 971
                EX (SP),HL
972
                RET
973
 
974
END7XOR         EXX
975
                LD HL,0
976
                ADD HL,SP
164 savelij 977
                LD SP,0x8000
978
                LD DE,0x8080
979
                LD B,0x40
165 savelij 980
E7X1
981
        REPT 64
105 savelij 982
                PUSH DE
165 savelij 983
        ENDM
105 savelij 984
                DJNZ E7X1
985
                LD SP,HL
986
                EXX
987
                JP ESPEED
988
 
112 savelij 989
PATCH           LD A,(NUMPG)
165 savelij 990
                OR %00111111
181 savelij 991
                LD (VAR_PAGE_PLAYER),A                  ; страница расположения плеера
112 savelij 992
                IN A,(GSCFG0)
105 savelij 993
                RES B_RAMRO,A
994
                SET B_EXPAG,A
995
                OUT (GSCFG0),A
164 savelij 996
                LD A,0x80
105 savelij 997
                OUT (MPAGEX),A
998
                LD HL,SPEDI3
999
                LD DE,ADDA80
165 savelij 1000
                LD BC,END7XOR - SPEDI3
105 savelij 1001
                LDIR
1002
                LD HL,FXB01
164 savelij 1003
                LD (HL),0xCD
105 savelij 1004
                INC HL
1005
                LD (HL),LOW (NXTMOD)
1006
                INC HL
1007
                LD (HL),HIGH (NXTMOD)
164 savelij 1008
                LD HL,0x11D6
1009
                LD (HL),0xCD
105 savelij 1010
                INC HL
1011
                LD (HL),LOW (NXTMODR)
1012
                INC HL
1013
                LD (HL),HIGH (NXTMODR)
1014
                INC HL
1015
                EX DE,HL
164 savelij 1016
                LD HL,0x11E3
181 savelij 1017
                XOR A
105 savelij 1018
                SBC HL,DE
1019
                LD B,H
1020
                LD C,L
1021
                LD H,D
1022
                LD L,E
181 savelij 1023
                LD (HL),A
105 savelij 1024
                INC DE
165 savelij 1025
                LDIR                                    ; зачистка хвостов в ПЗУ
105 savelij 1026
                LD HL,TEKADR1
1027
                LD DE,EMPTY2
165 savelij 1028
                LD BC,P_END - LD_MOD
1029
                LDIR                                    ; перенос загрузчика и обработчика
1030
                                                        ; окончания проигрываемого файла
105 savelij 1031
                LD HL,P_START
1032
                LD DE,EMPTY1
165 savelij 1033
                LD BC,P__END - P_00
1034
                LDIR                                    ; перенос управления MP3 плеером в ПЗУ
112 savelij 1035
                LD HL,(NUMPG)
164 savelij 1036
                LD H,0x40
112 savelij 1037
                DEC L
105 savelij 1038
                LD (HL),1
1039
                INC L
165 savelij 1040
                LD (HL),0                               ; отрубание последней страницы ОЗУ
1041
                                                        ; от основного списка страниц
112 savelij 1042
                LD HL,NUMPG
1043
                DEC (HL)
105 savelij 1044
                LD HL,P_00
165 savelij 1045
                LD (0x0300 + (0x1F * 2)),HL             ; патч команды 1F
105 savelij 1046
                LD HL,COMMFF
165 savelij 1047
                LD (0x0300 + (0x2F * 2)),HL             ; патч команды FF
105 savelij 1048
                IN A,(GSCFG0)
181 savelij 1049
                SET B_RAMRO,A                           ; запрет записи в прошивку
105 savelij 1050
                RES B_EXPAG,A
1051
                OUT (GSCFG0),A
181 savelij 1052
                LD A,(VAR_PAGE_PLAYER)
105 savelij 1053
                OUT (MPAG),A
1054
 
165 savelij 1055
; создание списка малых страниц для загрузчика файла в память
164 savelij 1056
LISTPAG         LD HL,0x4000
105 savelij 1057
                LD DE,BUF_PAG
165 savelij 1058
.L1             LD A,(HL)
105 savelij 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
165 savelij 1071
                JR NZ,.L1
105 savelij 1072
                RET
1073
 
1074
TEKADR1
1075
                PHASE EMPTY2
1076
 
165 savelij 1077
; грузилка файла в память NEOGS
105 savelij 1078
LD_MOD          IN A,(GSCFG0)
165 savelij 1079
                AND %11001111
105 savelij 1080
                OUT (GSCFG0),A
181 savelij 1081
                LD HL,VAR_FLAGS
165 savelij 1082
                SET B_FILE_LOAD,(HL)
105 savelij 1083
                CALL MOD_OFF
1084
                LD A,Loadfil
1085
                CALL COM_FAT
164 savelij 1086
                CP 0x80
105 savelij 1087
                JP Z,SD_LOST
181 savelij 1088
                LD (VAR_SIZE_PAGES_MOD),A
105 savelij 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)
181 savelij 1096
                LD (VAR_SIZE_PATTERN_MOD),A
164 savelij 1097
                LD BC,0x0100
105 savelij 1098
                CALL PLAYMOD
1099
                IN A,(GSCFG0)
165 savelij 1100
                OR %00010000
105 savelij 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
 
181 savelij 1116
NXTMODR         LD A,(VAR_PAGE_PLAYER)
105 savelij 1117
                OUT (MPAG),A
165 savelij 1118
                CALL NEXT_TRACK
181 savelij 1119
                LD A,(VAR_FILE_TYPE)
165 savelij 1120
                CP FILE_MP3
105 savelij 1121
                JP NZ,LD_MOD
1122
                POP HL
1123
                JP OPROS
1124
 
1125
COMMFF          IN A,(ZXDATRD)
165 savelij 1126
                OUT (CLRCBIT),A
181 savelij 1127
                ADD A,LOW (VAR_FLAGS)
105 savelij 1128
                LD IYL,A
181 savelij 1129
                LD A,HIGH (VAR_FLAGS)
105 savelij 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
 
165 savelij 1140
; основной цикл общения со спеком
1141
P_00            JP OPROS.L3
105 savelij 1142
 
181 savelij 1143
NXTMOD1         LD A,(VAR_PAGE_PLAYER)
105 savelij 1144
                OUT (MPAG),A
165 savelij 1145
                CALL NEXT_TRACK
1146
; продолжить играть MOD
181 savelij 1147
CONTINUE_MOD    LD A,(VAR_FILE_TYPE)
165 savelij 1148
                CP FILE_MP3
105 savelij 1149
                JR Z,OPROS
181 savelij 1150
                LD A,(VAR_FLAGS)
165 savelij 1151
                BIT B_PLAY_STOP,A
105 savelij 1152
                JR Z,CONROM
165 savelij 1153
                BIT B_FILE_LOAD,A
105 savelij 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
165 savelij 1161
                JR C,.L1
105 savelij 1162
                CALL PLAYMP3
1163
                JR OPROS
1164
 
165 savelij 1165
.L1             IN A,(ZXCMD)
164 savelij 1166
                CP 0x1F
105 savelij 1167
                JR NZ,CONROM
165 savelij 1168
.L3             IN A,(ZXDATRD)
105 savelij 1169
                OUT (CLRCBIT),A
1170
                AND A
165 savelij 1171
                JR Z,.L2
112 savelij 1172
                LD H,A
181 savelij 1173
                LD A,(VAR_STATUS)
164 savelij 1174
                CP 0x78
105 savelij 1175
                JR NC,OPROS
112 savelij 1176
                LD A,H
165 savelij 1177
.L2             CP LOW (END_TAB-TABFUNC) / 2 + 1
105 savelij 1178
                JR NC,OPROS
165 savelij 1179
                LD HL,CONTINUE_MOD
105 savelij 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
181 savelij 1187
                LD A,(VAR_PAGE_PLAYER)
105 savelij 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
 
164 savelij 1197
                DUPL 0x100-LOW ($),0
105 savelij 1198
 
165 savelij 1199
 INIT_VAR $
1200
 SETVAR BUF_LNG,                0x100                   ; буфер для перекод. длинного имени
1201
 SETVAR BUFTDIR,                0x100                   ; буфер имени текущей DIR
1202
 SETVAR BUF_PAG,                0x100                   ; таблица расширенных страниц
1203
 SETVAR B512BAS,                0