Subversion Repositories ngs

Rev

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

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