Subversion Repositories ngs

Rev

Rev 163 | 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
 
112 savelij 4
                include macros.a80
163 savelij 5
                include ports_ngs.a80
165 savelij 6
                include local_define.a80
105 savelij 7
 
163 savelij 8
                include local_macros.a80
9
                include vers.a80
105 savelij 10
 
163 savelij 11
                include macros_sp.a80
12
                include dss.a80
13
                include bios_sp.a80
14
                include define_sp.a80
15
                include ports_sp.a80
105 savelij 16
 
163 savelij 17
GSCOD           EQU 0x8000                      ; адрес куда закидывать код на нгс
105 savelij 18
 
163 savelij 19
                ORG ADR_START
105 savelij 20
START           DI
163 savelij 21
        IFDEF _SPRINTER
22
                CALL CLS
23
        DE_ADR_SCR ((32-(EMESS24-MESS24))/2),15
24
                LD HL,MESS24
25
                CALL PRINT
26
        DE_ADR_SCR 4,9
27
                LD HL,MESS28
28
                CALL PRINT
29
                XOR A
30
                CALL DETECT_ISA
31
                CALL CHECK_ISA
32
                JR NC,.L1
33
                CALL CLOSE_ISA
34
                LD A,1
35
                CALL DETECT_ISA
36
                JR NC,.L1
37
        DE_ADR_SCR 8,8
38
                LD HL,NOT_FOUND_ISA
39
                CALL PRINT
40
                JP NO_ISA
41
        ELSE
42
                LD HL,0x0110
43
                LD (0x5C09),HL                  ; установка переменной клавиатуры
44
                RES 3,(IY+48)
45
                RES 5,(IY+1)
46
        ENDIF
47
.L1             LD (OLD_STACK),SP               ; сохранение стека
105 savelij 48
                LD SP,0
142 savelij 49
OLD_STACK       EQU $-2
105 savelij 50
 
163 savelij 51
; удержание при запуске CS =  Turbo off
52
;               LD A,0xFE
53
;               IN A,(0xFE)
54
;               RRA
55
;               LD A,0
56
;               JR C,$+4
57
;               LD A,0x10
58
;               LD BC,0xEFF7
59
;               OUT (C),A
105 savelij 60
 
163 savelij 61
; удержание при запуске SS = reset NeoGS
62
        IFDEF _SPRINTER
63
; TODO добавить получение ключей из командной строки доса
64
        ELSE
65
                LD A,0x7F
66
                IN A,(0xFE)
105 savelij 67
                RRA
68
                RRA
69
                JR NC,LOOP21
163 savelij 70
        ENDIF
105 savelij 71
 
163 savelij 72
; тест наличия GS/NeoGS
73
                LD B,0x30                       ; для определения наличия нгс используется
74
                                                ; команда 0x1D с параметром =0
75
        OUT_GSDAT 0                             ; ждем ответа 0x30 прерываний
76
        OUT_GSCOM 0x1D
105 savelij 77
LOOP22          EI
78
                HALT
79
                DI
80
                DEC B
163 savelij 81
                JR Z,LOOP21                     ; счетчик обнулился, а может нгс висит?
82
        IN_GSCOM                                ; ждем сброса команд бита
105 savelij 83
                RRA
84
                JR C,LOOP22
163 savelij 85
        IN_GSDAT                                ; команд бит сбросился, читаем ответ из дата порта
86
                                                ; попытка получить флаговый байт с нгс
87
        OUT_GSDAT 0                             ; при первом запуске команда 0xFF еще не пропатчена
88
                LD B,0x30                       ; ждем ответа 0x30 прерываний
89
        OUT_GSCOM 0xFF
105 savelij 90
LOOP001         EI
91
                HALT
92
                DI
93
                DEC B
163 savelij 94
                JR Z,LOOP21                     ; счетчик обнулился, пробуем перезапустить нгс
95
        IN_GSCOM
105 savelij 96
                RRA
97
                JR C,LOOP001
163 savelij 98
                JR LOOP13                       ; нгс ответил на команду, подключаемся к внутреннему плееру
105 savelij 99
 
163 savelij 100
; принудительный перезапуск NeoGS
101
LOOP21
102
        OUT_GSCTR M_DBIT                        ; полный сброс нгс
105 savelij 103
                EI
104
                HALT
105
                HALT
106
                DI
163 savelij 107
        OUT_GSCOM 0xF3                          ; холодный перезапуск нгс прошивки
108
                LD B,0x30                       ; ждем 0x30 прерываний
105 savelij 109
LOOP25          EI
110
                HALT
111
                HALT
112
                DI
113
                DEC B
163 savelij 114
                JP Z,NO__GS                     ; нет ответа, нет нгс
115
        IN_GSCOM
105 savelij 116
                RRA
163 savelij 117
                JR C,LOOP25                     ; команд бит изменился, продолжаем
118
; загрузка и запуск кода на NeoGS
119
RST_NGS_CODE                                    ; запрос количества страниц памяти
120
        OUT_GSCOM 0x23                          ; для определения в какую страницу плеер закидывать
112 savelij 121
                CALL WC
163 savelij 122
        IN_GSDAT
123
                OR 0x3F
112 savelij 124
                LD D,A
163 savelij 125
                LD E,MPAG                       ; включаем стандартной командой прошивки
126
                CALL OUTPORT                    ; страницу на нгс для загрузки внутреннего плеера
127
                                                ; стандартными средствами грузим код на нгс 
128
                LD DE,FAT_END - GO_YES
129
                LD A,E
130
        OUT_GSDAT_A
131
        OUT_GSCOM 0x14
105 savelij 132
                CALL WC
163 savelij 133
                LD A,D
134
        OUT_GSDAT_A
105 savelij 135
                CALL WD
163 savelij 136
        OUT_GSDAT LOW (GSCOD)
105 savelij 137
                CALL WD
163 savelij 138
        OUT_GSDAT HIGH(GSCOD)
105 savelij 139
                CALL WD
140
                LD HL,GO_YES
163 savelij 141
.LODCOD         LD A,(HL)
142
                INC HL
143
        OUT_GSDAT_A
105 savelij 144
                CALL WD
145
                DEC DE
146
                LD A,D
147
                OR E
163 savelij 148
                JR NZ,.LODCOD
149
; код загрузили, запускаем
150
        OUT_GSDAT LOW (GSCOD)
151
        OUT_GSCOM 0x13
105 savelij 152
                CALL WC
163 savelij 153
        OUT_GSDAT HIGH (GSCOD)
105 savelij 154
                EI
155
                HALT
156
                HALT
163 savelij 157
                DI                              ; подождали 2 прерывания запуска кода
105 savelij 158
LOOP13          LD A,7
163 savelij 159
                CALL CLS                        ; очистили экран
160
        DE_ADR_SCR 0,8
161
                LD HL,MESS20                    ; печать текста о поиске на SD карточке
105 savelij 162
                CALL PRINT
163 savelij 163
                                                ; подаем команду проверки что на нгс крутится
164
        OUT_GSDAT 0x1D
165
        OUT_GSCOM 0x1F
105 savelij 166
                LD B,0
163 savelij 167
                CALL WAITGS                     ; ожидаем ответа покручивавая палочку
168
        IN_GSDAT                                ; читаем ответ
169
                CP 0x8B
170
                JP Z,RST_NGS_CODE               ; если 0x8B то ответила стандартная прошивка
165 savelij 171
                CP PLAYER_OK
163 savelij 172
                JP Z,Warm                       ; если ответ 0x77, то ответил внутренний плеер
165 savelij 173
                CP SD_NOT_FOUND
163 savelij 174
                JP NZ,LOOP17                    ; SD карта найдена?
105 savelij 175
                LD A,7
176
                CALL CLS
177
                LD HL,MESS13
163 savelij 178
        DE_ADR_SCR 0,16
105 savelij 179
LOOP20          CALL PRINT
180
                LD HL,MESS15
163 savelij 181
        DE_ADR_SCR 0,18
105 savelij 182
                CALL PRINT
183
                LD HL,MESS16
163 savelij 184
        DE_ADR_SCR 0,20
105 savelij 185
                CALL PRINT
186
                JR LOOP16
187
 
165 savelij 188
LOOP17          CP FAT_NOT_FOUND
163 savelij 189
                JR NZ,LOOP26                    ; на SD карте FAT не обнаружен
105 savelij 190
                LD A,7
191
                CALL CLS
192
                LD HL,MESS14
163 savelij 193
        DE_ADR_SCR 0,16
105 savelij 194
                JR LOOP20
195
 
165 savelij 196
LOOP26          CP FILES_NOT_FOUND
105 savelij 197
                JR NZ,LOOP27
198
                LD A,7
199
                CALL CLS
200
                LD HL,MESS23
163 savelij 201
        DE_ADR_SCR 0,16
105 savelij 202
                JR LOOP20
203
 
165 savelij 204
LOOP27          CP NEOGS_ERROR
163 savelij 205
                JP NZ,RST_NGS_CODE              ; плата GS стараго типав
105 savelij 206
                JP NO_NGS
207
 
163 savelij 208
LOOP16
209
        IFDEF _SPRINTER
210
                EI
211
        SPDSS DSSF.SCANKEY
212
                JR Z,LOOP16
213
        ELSE
214
                EI
158 savelij 215
                HALT
216
                DI
217
                BIT 5,(IY+1)
105 savelij 218
                JR Z,LOOP16
163 savelij 219
                LD A,(IY-0x32)
105 savelij 220
                RES 5,(IY+1)
163 savelij 221
        ENDIF
222
                CP 0x0D
105 savelij 223
                JP Z,START
163 savelij 224
                CP 0x20
105 savelij 225
                JP Z,RESCOMP
226
                JR LOOP16
227
 
228
Warm            LD A,7
163 savelij 229
                CALL CLS                        ; очистка экрана
165 savelij 230
                LD A,VARP_CHIP_TYPE
231
                CALL GET_VTS
163 savelij 232
                CALL MORDALL                    ; вывод основных надписей
165 savelij 233
                LD A,__TXT_COUNT_FILES
163 savelij 234
        DE_ADR_SCR 13,0
235
                CALL READ5BT                    ; вывод кол-ва найденного
236
                CALL NAMELNG                    ; вывод имени текущего файла
237
LOOP_3          CALL DAT_VTS                    ; вывод инфы текущего файла
165 savelij 238
NO_PRESS_KEY
239
        LD_A VARP_FLAGS
105 savelij 240
                CALL GET_VTS
165 savelij 241
                BIT B_SD_LOST,A
105 savelij 242
                JP NZ,EJECT
243
;               AND 5
244
;               CP 5
245
;               JR Z,LOOPM
246
                CALL FGETVTS
247
                LD A,H
248
                PUSH AF
165 savelij 249
                BIT B_NEW_FILE,A
105 savelij 250
                CALL NZ,NAMELNG
251
                POP AF
165 savelij 252
                LD A,VARP_FILE_TYPE
253
                CALL GET_VTS
254
                CP FILE_MP3
105 savelij 255
                JR NZ,LOOPM
165 savelij 256
; продолжаем для MP3
163 savelij 257
        DE_ADR_SCR 11,11
258
                CALL READSEC                    ; время играния
105 savelij 259
                CALL BITRATE
260
                JR LOOP14
261
 
165 savelij 262
; продолжаем для MOD
105 savelij 263
LOOPM           CALL POSMOD
163 savelij 264
LOOP14
265
        IFDEF _SPRINTER
266
                EI
267
        SPDSS DSSF.SCANKEY
165 savelij 268
                JR Z,NO_PRESS_KEY
163 savelij 269
        ELSE
270
                EI
105 savelij 271
                HALT
272
                DI
273
                BIT 5,(IY+1)
165 savelij 274
                JR Z,NO_PRESS_KEY
163 savelij 275
                RES 5,(IY+1)
276
                LD A,(IY-0x32)
277
        ENDIF
105 savelij 278
                LD B,A
165 savelij 279
                LD A,VARP_FILE_TYPE
280
                CALL GET_VTS
281
                CP FILE_MP3
105 savelij 282
                LD HL,MODCOM
112 savelij 283
                JR NZ,LOOP14_1
105 savelij 284
                LD HL,MP3COM
112 savelij 285
LOOP14_1        LD DE,4
286
LOOP14_2        LD A,(HL)
105 savelij 287
                AND A
165 savelij 288
                JR Z,NO_PRESS_KEY
105 savelij 289
                CP B
290
                JR Z,RDCOMM
291
                ADD HL,DE
112 savelij 292
                JR LOOP14_2
105 savelij 293
 
294
RDCOMM          INC HL
295
                LD A,(HL)
296
                INC HL
297
                LD E,(HL)
298
                INC HL
299
                LD D,(HL)
300
                EX DE,HL
301
                JP (HL)
302
 
163 savelij 303
MP3COM          DB "6",0x09
105 savelij 304
                DW EXE1
163 savelij 305
                DB "7",0x08
105 savelij 306
                DW EXE1
163 savelij 307
                DB "8",0x07
105 savelij 308
                DW EXE1
163 savelij 309
                DB "9",0x06
105 savelij 310
                DW EXE2
163 savelij 311
                DB 0x0D,0x0A
105 savelij 312
                DW EXE1
163 savelij 313
                DB ":",0x17
105 savelij 314
                DW EXE1
163 savelij 315
;               DB "q",0x03
112 savelij 316
;               DW EXE3
163 savelij 317
;               DB "a",0x01
112 savelij 318
;               DW EXE3
163 savelij 319
;               DB "w",0x0C
112 savelij 320
;               DW EXE3
163 savelij 321
;               DB "s",0x04
112 savelij 322
;               DW EXE3
163 savelij 323
;               DB "e",0x30
112 savelij 324
;               DW EXE3
163 savelij 325
;               DB "d",0x10
112 savelij 326
;               DW EXE3
163 savelij 327
;               DB "r",0xC0
112 savelij 328
;               DW EXE3
163 savelij 329
;               DB "f",0x40
112 savelij 330
;               DW EXE3
105 savelij 331
 
163 savelij 332
MODCOM          DB "1",0x01
105 savelij 333
                DW EXE1
163 savelij 334
                DB "2",0x02
105 savelij 335
                DW EXE4
163 savelij 336
                DB "3",0x03
105 savelij 337
                DW EXE4
163 savelij 338
                DB "4",0x04
105 savelij 339
                DW EXE4
163 savelij 340
                DB "5",0x05
105 savelij 341
                DW EXE1
163 savelij 342
                DB "!",0x18
105 savelij 343
                DW EXE1
163 savelij 344
                DB "%",0x19
105 savelij 345
                DW EXE1
163 savelij 346
                DB "0",0x00
105 savelij 347
                DW EJECT
163 savelij 348
                DB " ",0x00
105 savelij 349
                DW RESCOMP
350
                DB 0
351
 
163 savelij 352
EXE1
353
        OUT_GSDAT_A
354
        OUT_GSCOM 0x1F
105 savelij 355
                CALL WC
163 savelij 356
                JP LOOP_3
105 savelij 357
 
163 savelij 358
EXE2
359
        OUT_GSDAT_A
360
        OUT_GSCOM 0x1F
105 savelij 361
                CALL WC
362
                CALL PRTTBL
163 savelij 363
                JP LOOP_3
105 savelij 364
 
365
EXE3            PUSH AF
163 savelij 366
        OUT_GSDAT 0x1A
367
        OUT_GSCOM 0x1F
105 savelij 368
                CALL WC
369
                POP AF
163 savelij 370
        OUT_GSDAT_A
105 savelij 371
                CALL PRTTBL
165 savelij 372
                JP NO_PRESS_KEY
105 savelij 373
 
163 savelij 374
EXE4
375
        OUT_GSDAT_A
376
        OUT_GSCOM 0x1F
105 savelij 377
                CALL WC
165 savelij 378
                JP NO_PRESS_KEY
105 savelij 379
 
163 savelij 380
; ожидание отпускания кнопки и сброс
105 savelij 381
RESCOMP         CALL NANYKEY
163 savelij 382
        IFDEF _SPRINTER
383
                CALL CLS
384
                CALL CLOSE_ISA
385
        SPDSS DSSF.EXIT
386
        ELSE
105 savelij 387
                XOR A
163 savelij 388
                LD BC,0x7FFD
105 savelij 389
                OUT (C),A
390
                JP 0
163 savelij 391
        ENDIF
105 savelij 392
 
393
WAITGS          LD E,B
394
                LD D,0
395
                LD HL,VENTIL
396
                ADD HL,DE
397
                LD A,(HL)
163 savelij 398
        DE_ADR_SCR 27,8
105 savelij 399
                CALL PRISYM
400
                LD C,5
163 savelij 401
.L1             EI
105 savelij 402
                HALT
403
                DI
404
                DEC C
163 savelij 405
                JR NZ,.L1
406
        IN_GSCOM
105 savelij 407
                RRA
408
                RET NC
409
                INC B
163 savelij 410
                RES 2,B
105 savelij 411
                JR WAITGS
412
 
163 savelij 413
; распечатка номера трека и имени играемого файла
165 savelij 414
NAMELNG         LD A,__TXT_CURRENT_FILE
163 savelij 415
        DE_ADR_SCR 13,10
416
                CALL READ5BT                    ; текущий номер трека
417
                LD HL,0x8000
418
        OUT_GSDAT 0x11
419
        OUT_GSCOM 0x1F
420
                CALL WC                         ; получить длинное имя
105 savelij 421
                LD A,H
163 savelij 422
        OUT_GSDAT_A
105 savelij 423
                CALL WD
424
                LD A,L
163 savelij 425
        OUT_GSDAT_A
105 savelij 426
                LD HL,OPISAT
427
                LD E,0
428
                PUSH HL
429
                CALL INI_E
163 savelij 430
        IFDEF _SPRINTER
431
        DE_ADR_SCR 0,16
432
        SPBIOS BIOSF.LP_PRINT_SYM,78,' '
433
        DE_ADR_SCR 0,17
434
        SPBIOS BIOSF.LP_PRINT_SYM,78,' '
435
        DE_ADR_SCR 0,18
436
        SPBIOS BIOSF.LP_PRINT_SYM,78,' '
437
        DE_ADR_SCR 0,19
438
        SPBIOS BIOSF.LP_PRINT_SYM,78,' '
439
        ELSE
440
                LD HL,0x5000
105 savelij 441
                LD D,H
442
                LD E,L
163 savelij 443
                LD BC,0x07FF
105 savelij 444
                INC E
445
                LD (HL),L
446
                LDIR
163 savelij 447
        ENDIF
105 savelij 448
                POP HL
163 savelij 449
                LD B,0x20
450
        DE_ADR_SCR 0,16
105 savelij 451
                CALL PRINT_B
163 savelij 452
                LD B,0x20
453
        DE_ADR_SCR 0,17
105 savelij 454
                CALL PRINT_B
163 savelij 455
                LD B,0x20
456
        DE_ADR_SCR 0,18
105 savelij 457
                CALL PRINT_B
163 savelij 458
                LD B,0x20
459
        DE_ADR_SCR 0,19
105 savelij 460
                CALL PRINT_B
163 savelij 461
                LD B,0x20
462
        DE_ADR_SCR 0,20
105 savelij 463
                CALL PRINT_B
163 savelij 464
                LD B,0x20
465
        DE_ADR_SCR 0,21
105 savelij 466
                CALL PRINT_B
163 savelij 467
                LD B,0x20
468
        DE_ADR_SCR 0,22
105 savelij 469
                CALL PRINT_B
163 savelij 470
                LD B,0x20
471
        DE_ADR_SCR 0,23
105 savelij 472
                CALL PRINT_B
473
                JP MORDAR
474
 
163 savelij 475
DAT_VTS         CALL FGETVTS            ; запрос флагового байта
476
        DE_ADR_SCR 16,13
165 savelij 477
                LD A,VARP_FILE_TYPE
478
                CALL GET_VTS
479
                CP FILE_MP3
163 savelij 480
                RET NZ                  ; это MOD
165 savelij 481
                BIT B_ENABLE_TEMBR,H
482
                LD A,'+'
163 savelij 483
                JR NZ,.L1
165 savelij 484
                LD A,'-'
163 savelij 485
.L1             CALL PRISYM             ; вывод положения TREBLE/BASS
165 savelij 486
                BIT B_SURROUND,H
487
                LD A,'+'
163 savelij 488
                JR NZ,.L2
165 savelij 489
                LD A,'-'
163 savelij 490
.L2
491
        DE_ADR_SCR 16,12
492
                CALL PRISYM             ; вывод положения VIRTUAL SURROUND
165 savelij 493
                BIT B_MUTE,H
494
                LD A,'+'
163 savelij 495
                JR NZ,.L3
165 savelij 496
                LD A,'-'
163 savelij 497
.L3
498
        DE_ADR_SCR 31,14
499
                CALL PRISYM             ; вывод положения MUTE ON/OFF
105 savelij 500
                LD A,L
163 savelij 501
        DE_ADR_SCR 16,14
105 savelij 502
                CALL PRIHEX
163 savelij 503
; вывод индикатора SOFT/HARD RESET
165 savelij 504
                BIT B_TYPE_RESET,H
505
                LD HL,MESS16 + 2
105 savelij 506
                JR Z,DATVTS1
507
                RES 5,(HL)
508
                INC HL
509
                RES 5,(HL)
510
                INC HL
511
                RES 5,(HL)
512
                INC HL
513
                RES 5,(HL)
514
                JR DATVTS2
515
 
516
DATVTS1         SET 5,(HL)
517
                INC HL
518
                SET 5,(HL)
519
                INC HL
520
                SET 5,(HL)
521
                INC HL
522
                SET 5,(HL)
523
DATVTS2         LD HL,MESS16
163 savelij 524
        DE_ADR_SCR 20,0
105 savelij 525
                CALL PRINT
163 savelij 526
; получение и распечатка инфы темброблока
112 savelij 527
PRTTBL         
528
;               CALL FGETVTS
529
;               BIT 3,H
530
;               JR Z,EMPTSTR
531
;               BIT 7,H
532
;               JR Z,EMPTSTR
163 savelij 533
;               LD A,0x1B
112 savelij 534
;               OUT (GSDAT),A
163 savelij 535
;               LD A,0x1F
112 savelij 536
;               OUT (GSCOM),A
537
;               CALL WC
163 savelij 538
;               LD HL,OPISAT+0x0100
112 savelij 539
;               LD E,8
540
;               PUSH HL
541
;               CALL INI_E
163 savelij 542
;               LD DE,0x48B1
112 savelij 543
;               LD B,2
544
;               POP HL
545
;               CALL PRINT_B
546
;               LD A,"0"
547
;               CALL PRISYM
548
;               LD A,"0"
549
;               CALL PRISYM
550
;               LD A,"0"
551
;               CALL PRISYM
552
;               LD A,"/"
553
;               CALL PRISYM
554
;               LD B,2
555
;               CALL PRINT_B
556
;               INC E
557
;               LD B,2
558
;               CALL PRINT_B
559
;               LD A,"0"
560
;               CALL PRISYM
561
;               LD A,"/"
562
;               CALL PRISYM
563
;               LD B,2
564
;               JP PRINT_B
105 savelij 565
 
163 savelij 566
; печать пустой строки
105 savelij 567
EMPTSTR         LD HL,EMPT16+1
163 savelij 568
        DE_ADR_SCR 17,13
105 savelij 569
                JP PRINT
570
 
163 savelij 571
; распечатка когда ничего не играет
105 savelij 572
BITRAT1         LD HL,EMPT16+2
163 savelij 573
        DE_ADR_SCR 22,10
105 savelij 574
                PUSH HL
575
                LD B,5
576
                CALL PRINT_B
163 savelij 577
        DE_ADR_SCR 24,11
105 savelij 578
                LD B,3
579
                POP HL
580
                PUSH HL
581
                CALL PRINT_B
582
                POP HL
163 savelij 583
                LD B,0x0C
584
        DE_ADR_SCR 20,9
105 savelij 585
                JP PRINT_B
586
 
163 savelij 587
; печать MP3 битрейта
588
BITRATE
589
        OUT_GSDAT 0x1C
590
        OUT_GSCOM 0x1F
105 savelij 591
                CALL WC
592
                CALL WN
163 savelij 593
        IN_GSDAT
105 savelij 594
                LD B,A
595
                CALL WN
163 savelij 596
        IN_GSDAT
105 savelij 597
                LD C,A
598
                LD A,B
163 savelij 599
                AND 0xE0
105 savelij 600
                CP %10100000
601
                JR Z,BITRAT1
602
                LD A,C
603
                AND 3
604
                LD L,A
605
                ADD A,A
606
                ADD A,A
607
                ADD A,L
608
                LD L,A
609
                LD H,0
610
                LD A,C
611
                RRCA
612
                RRCA
613
                AND 3
614
                LD DE,SR0
615
                JR Z,BITRAT3
616
                DEC A
617
                LD DE,SR1
618
                JR Z,BITRAT3
619
                LD DE,SR2
620
BITRAT3         ADD HL,DE
163 savelij 621
        DE_ADR_SCR 22,10
105 savelij 622
                PUSH BC
623
                LD B,5
624
                CALL PRINT_B
625
                POP BC
626
                LD A,C
627
                RLCA
628
                RLCA
629
                AND 3
630
                ADD A,A
631
                ADD A,A
632
                LD L,A
633
                ADD A,A
634
                ADD A,L
635
                LD L,A
636
                LD H,0
637
                LD DE,REJCHAN
638
                ADD HL,DE
639
                PUSH BC
163 savelij 640
                LD B,0x0C
641
        DE_ADR_SCR 20,9
105 savelij 642
                CALL PRINT_B
643
                POP BC
644
                LD A,B
163 savelij 645
                AND 0x0F
105 savelij 646
                LD L,A
647
                ADD A,A
648
                ADD A,L
649
                LD L,A
650
                LD H,0
651
                LD A,C
652
                AND 3
653
                CP 3
654
                JR NZ,BITRAT4
163 savelij 655
                LD A,0x30
105 savelij 656
                ADD A,L
657
                LD L,A
658
BITRAT4         LD A,C
163 savelij 659
                AND 0x30
660
                SUB 0x10
105 savelij 661
                LD DE,L3ID0
662
                JR Z,BITRAT2
163 savelij 663
                SUB 0x10
105 savelij 664
                LD DE,L2ID0
665
                JR Z,BITRAT2
666
                LD DE,L1ID0
667
BITRAT2         ADD HL,DE
668
                LD B,3
163 savelij 669
        DE_ADR_SCR 24,11
105 savelij 670
                JP PRINT_B
671
 
163 savelij 672
; получение и распечатка кол-ва найденных файлов (15)
673
; или номера текущего файла (16)
674
READ5BT
675
        OUT_GSDAT_A
676
        OUT_GSCOM 0x1F
105 savelij 677
                CALL WC
678
                CALL WN
163 savelij 679
        IN_GSDAT
105 savelij 680
                CALL PRISYM
681
                CALL WN
163 savelij 682
        IN_GSDAT
105 savelij 683
                CALL PRISYM
684
                CALL WN
163 savelij 685
        IN_GSDAT
105 savelij 686
                CALL PRISYM
687
                CALL WN
163 savelij 688
        IN_GSDAT
105 savelij 689
                CALL PRISYM
690
                CALL WN
163 savelij 691
        IN_GSDAT
105 savelij 692
                JP PRISYM
693
 
163 savelij 694
; получение времени проигрывания в
695
; текстовом виде и распечатка
696
READSEC
165 savelij 697
        OUT_GSDAT __GET_TIME
163 savelij 698
        OUT_GSCOM 0x1F
105 savelij 699
                CALL WC
700
                CALL WN
163 savelij 701
        IN_GSDAT
105 savelij 702
                CALL PRISYM
703
                CALL WN
163 savelij 704
        IN_GSDAT
105 savelij 705
                CALL PRISYM
163 savelij 706
                LD A,':'
105 savelij 707
                CALL PRISYM
708
                CALL WN
163 savelij 709
        IN_GSDAT
105 savelij 710
                CALL PRISYM
711
                CALL WN
163 savelij 712
        IN_GSDAT
105 savelij 713
                CALL PRISYM
163 savelij 714
                LD A,':'
105 savelij 715
                CALL PRISYM
716
                CALL WN
163 savelij 717
        IN_GSDAT
105 savelij 718
                CALL PRISYM
719
                CALL WN
163 savelij 720
        IN_GSDAT
105 savelij 721
                JP PRISYM
722
 
163 savelij 723
; при отсутствии NeoGS выход в 128 басик
105 savelij 724
NO_NGS          LD A,7
725
                CALL CLS
163 savelij 726
        DE_ADR_SCR 9,8
105 savelij 727
                LD HL,MESS17
728
                CALL PRINT
163 savelij 729
NO_ISA
730
        DE_ADR_SCR 6,10
105 savelij 731
                LD HL,MESS19
732
                CALL PRINT
733
                CALL ANYKEY
163 savelij 734
                JP RESCOMP
105 savelij 735
 
163 savelij 736
; ждем нажатия кнопки
737
ANYKEY
738
        IFDEF _SPRINTER
739
                EI
740
        SPDSS DSSF.SCANKEY
741
                JR Z,ANYKEY
742
                RET
743
        ELSE
744
.L1             XOR A
745
                IN A,(0xFE)
105 savelij 746
                CPL
163 savelij 747
                AND 0x1F
748
                JR Z,.L1
105 savelij 749
                RET
163 savelij 750
        ENDIF
105 savelij 751
 
163 savelij 752
; ждем отпускания кнопки
753
NANYKEY
754
        IFDEF _SPRINTER
755
                EI
756
        SPDSS DSSF.SCANKEY
757
                JR NZ,NANYKEY
758
                RET
759
        ELSE
760
.L1             XOR A
761
                IN A,(0xFE)
105 savelij 762
                CPL
163 savelij 763
                AND 0x1F
764
                JR NZ,.L1
105 savelij 765
                RET
163 savelij 766
        ENDIF
105 savelij 767
 
163 savelij 768
; при отсутствии GS выход в 128 басик
105 savelij 769
NO__GS          LD A,7
770
                CALL CLS
163 savelij 771
        DE_ADR_SCR 10,8
105 savelij 772
                LD HL,MESS18
773
                CALL PRINT
163 savelij 774
        DE_ADR_SCR 6,10
105 savelij 775
                LD HL,MESS19
776
                CALL PRINT
777
                CALL ANYKEY
163 savelij 778
                JP RESCOMP
105 savelij 779
 
163 savelij 780
; печать текста до байта 0 или пока B не обнулица
105 savelij 781
PRINT_B         LD A,(HL)
782
                AND A
783
                RET Z
784
                INC HL
785
                CALL PRISYM
786
                DJNZ PRINT_B
787
                RET
788
 
163 savelij 789
; печать текста до байта 0
105 savelij 790
PRINT           LD A,(HL)
791
                INC HL
792
                AND A
793
                RET Z
794
                CALL PRISYM
795
                JR PRINT
796
 
797
MORDALL         LD HL,MESS1
163 savelij 798
        DE_ADR_SCR 0,0
105 savelij 799
                CALL PRINT
800
                LD HL,MESS16
163 savelij 801
        DE_ADR_SCR 20,0
105 savelij 802
                CALL PRINT
803
                LD HL,MESS2
163 savelij 804
        DE_ADR_SCR 0,2
105 savelij 805
                CALL PRINT
806
                LD HL,MESS3
163 savelij 807
        DE_ADR_SCR 0,3
105 savelij 808
                CALL PRINT
809
                LD HL,MESS4
163 savelij 810
        DE_ADR_SCR 0,4
105 savelij 811
                CALL PRINT
812
                LD HL,MESS5
163 savelij 813
        DE_ADR_SCR 0,5
105 savelij 814
                CALL PRINT
815
                LD HL,MESS6
163 savelij 816
        DE_ADR_SCR 0,6
105 savelij 817
                CALL PRINT
818
                LD HL,MESS7
163 savelij 819
        DE_ADR_SCR 0,8
105 savelij 820
                CALL PRINT
821
                LD HL,MESS8
163 savelij 822
        DE_ADR_SCR 0,10
105 savelij 823
                CALL PRINT
824
                LD HL,MESS24
163 savelij 825
        DE_ADR_SCR ((32-(EMESS24-MESS24))/2),15
105 savelij 826
                CALL PRINT
165 savelij 827
                LD A,VARP_CHIP_TYPE
105 savelij 828
                CALL GET_VTS
829
                LD C,A
163 savelij 830
        IFDEF _SPRINTER
831
                PUSH BC
832
        DE_ADR_SCR 0,15
833
                POP BC
834
                PUSH BC
835
                LD A,C
165 savelij 836
                XOR %00000111
837
                ADD A,A
838
                ADD A,A
839
                ADD A,A
840
                ADD A,A
841
                OR BLUE
163 savelij 842
                LD E,A
843
        SPBIOS BIOSF.LP_PRINT_ATR,32
844
                POP BC         
165 savelij 845
        ELSE ; SPRINTER
846
                XOR %00000111
105 savelij 847
                ADD A,A
165 savelij 848
                ADD A,A
849
                ADD A,A
850
                OR BLUE
163 savelij 851
                LD HL,0x59E0
852
                LD B,32
853
.L1             LD (HL),A
105 savelij 854
                INC L
163 savelij 855
                DJNZ .L1
165 savelij 856
        ENDIF ; SPRINTER
105 savelij 857
                LD A,C
165 savelij 858
                ADD A,'0'                       ; номер версии MP3 чипа
859
                CP '9' + 1
860
                JR C,.L2
861
                ADD A,7
862
.L2
163 savelij 863
        DE_ADR_SCR 31,15
105 savelij 864
                CALL PRISYM
165 savelij 865
MORDAR
866
        LD_A VARP_FILE_TYPE
105 savelij 867
                CALL GET_VTS
165 savelij 868
                CP FILE_MOD
869
                JR Z,MORDMOD
870
; обновление морды для MP3
105 savelij 871
                LD HL,MESS9
163 savelij 872
        DE_ADR_SCR 0,11
105 savelij 873
                CALL PRINT
874
                LD HL,MESS10
163 savelij 875
        DE_ADR_SCR 0,13
105 savelij 876
                CALL PRINT
877
                LD HL,MESS11
163 savelij 878
        DE_ADR_SCR 0,12
105 savelij 879
                CALL PRINT
880
                LD HL,MESS12
163 savelij 881
        DE_ADR_SCR 0,14
105 savelij 882
                CALL PRINT
883
                LD HL,MESSEM
163 savelij 884
        DE_ADR_SCR 19,14
105 savelij 885
                CALL PRINT
886
                LD HL,MESS26
163 savelij 887
        DE_ADR_SCR 28,10
105 savelij 888
                CALL PRINT
889
                LD HL,MESS27
163 savelij 890
        DE_ADR_SCR 28,11
105 savelij 891
                CALL PRINT
892
                JP PRTTBL
893
 
165 savelij 894
; обновление морды плеера для MOD
895
MORDMOD         LD HL,EMPT16 + 3
163 savelij 896
        DE_ADR_SCR 19,10
105 savelij 897
                CALL PRINT
898
                LD HL,EMPT16
163 savelij 899
        DE_ADR_SCR 16,12
105 savelij 900
                CALL PRINT
901
                LD HL,EMPT16
163 savelij 902
        DE_ADR_SCR 16,13
105 savelij 903
                CALL PRINT
904
                LD HL,EMPT16
163 savelij 905
        DE_ADR_SCR 16,9
105 savelij 906
                CALL PRINT
907
                LD HL,MOD00
163 savelij 908
        DE_ADR_SCR 0,11
105 savelij 909
                CALL PRINT
910
                LD HL,EMPT16
163 savelij 911
        DE_ADR_SCR 16,11
105 savelij 912
                CALL PRINT
913
                LD HL,MOD02
163 savelij 914
        DE_ADR_SCR 0,12
105 savelij 915
                CALL PRINT
916
                LD HL,MOD03
163 savelij 917
        DE_ADR_SCR 0,13
105 savelij 918
                CALL PRINT
919
                LD HL,EMPT16
163 savelij 920
        DE_ADR_SCR 16,14
105 savelij 921
                CALL PRINT
922
                LD HL,EMPT16
163 savelij 923
        DE_ADR_SCR 0,14
105 savelij 924
                JP PRINT
925
 
165 savelij 926
; обновление инфы проигрывания MOD
927
POSMOD          LD A,VARP_SIZE_PATTERN_MOD
105 savelij 928
                CALL GET_VTS
163 savelij 929
        DE_ADR_SCR 14,11
105 savelij 930
                CALL PRIHEX
163 savelij 931
        DE_ADR_SCR 14,12
932
        OUT_GSCOM 0x60
105 savelij 933
                CALL WC
165 savelij 934
                CALL WN
163 savelij 935
        IN_GSDAT
105 savelij 936
                CALL PRIHEX
163 savelij 937
        DE_ADR_SCR 14,13
938
        OUT_GSCOM 0x61
105 savelij 939
                CALL WC
165 savelij 940
                CALL WN
163 savelij 941
        IN_GSDAT
105 savelij 942
                JP PRIHEX
943
 
163 savelij 944
; читать байт переменных по смещению в "A"
945
GET_VTS
946
        OUT_GSDAT_A
947
        OUT_GSCOM 0xFF
105 savelij 948
                CALL WC
165 savelij 949
                CALL WN
163 savelij 950
        IN_GSDAT
105 savelij 951
                RET
952
 
163 savelij 953
; получение 16 битного состояния
954
FGETVTS
165 savelij 955
        OUT_GSDAT __GET_VTS
163 savelij 956
        OUT_GSCOM 0x1F
105 savelij 957
                CALL WC
958
                CALL WN
163 savelij 959
        IN_GSDAT
105 savelij 960
                LD H,A
961
                CALL WN
163 savelij 962
        IN_GSDAT
105 savelij 963
                LD L,A
964
                RET
965
 
165 savelij 966
MOD00           DZ "Length:        "
967
MOD02           DZ "Position:      "
968
MOD03           DZ "Note:          "
105 savelij 969
 
163 savelij 970
VENTIL          DB 0xC4,0x5C,0x7C,0x2F
105 savelij 971
 
165 savelij 972
MESS1           DZ "Found files:"
973
MESS16          DZ "\"Space\" Exit"
974
MESS2           DZ "1 Prev. File  SS+1 Prev. DIR"
975
MESS3           DZ "2 Play File"
976
MESS4           DZ "3 Pause"
977
MESS5           DZ "4 Stop"
978
MESS6           DZ "5 Next File   SS+5 Next DIR"
979
MESS7           DZ "0 Eject SD Card"
980
MESS8           DZ "Play Number:"
981
MESS9           DZ "Time Play:      "
982
MESS10          DZ "9 Treble/Bass:  "
983
MESS11          DZ "8 Surround:     "
984
MESS12          DZ "<6-7> Volume:   "
985
MESSEM          DZ "\"Enter\" Mute"
986
MESS13          DZ "SD-Card Not Found"
987
MESS14          DZ "FAT not Found"
988
MESS15          DZ "Press \"ENTER\" 4 Restart Init SD"
105 savelij 989
MESS17          DB "Neo"
165 savelij 990
MESS18          DZ "GS not found"
163 savelij 991
MESS19          DB "Press any key for "
992
        IFDEF _SPRINTER
165 savelij 993
                DZ "exit"
163 savelij 994
        ELSE
165 savelij 995
                DZ "reset"
163 savelij 996
        ENDIF
165 savelij 997
MESS20          DZ "Please wait, search files"
998
MESS21          DZ "Eject SD card or insert new card"
999
MESS22          DZ "Press any key"
1000
MESS23          DZ "File(s) not found"
127 savelij 1001
MESS24          DB "Neo Player Light v",VERS_PLAYER,0
112 savelij 1002
EMESS24         EQU $-1
105 savelij 1003
EMPT32          DB "                "
165 savelij 1004
EMPT16          DZ "                "
1005
MESS26          DZ "Hz"
1006
MESS27          DZ "kbps"
1007
MESS28          DZ "Please wait, detect NeoGS"
105 savelij 1008
 
163 savelij 1009
        IFDEF _SPRINTER
165 savelij 1010
NOT_FOUND_ISA   DZ "ISA Slot not found. Emulator?"
163 savelij 1011
        ENDIF
1012
 
105 savelij 1013
REJCHAN         DB "      stereo"
1014
                DB "joint stereo"
1015
                DB "dual channel"
1016
                DB "        mono"
1017
 
1018
SR0             DB "11025110252205044100"
1019
SR1             DB "12000120002400048000"
1020
SR2             DB " 8000 80001600032000"
1021
 
1022
L3ID0           DB "  -  8 16 24 32 40 48 56 64 80 96112128144160   "
1023
                DB "  - 32 40 48 56 64 80 96112128160192224256320"
1024
 
1025
L2ID0           DB "  -  8 16 24 32 40 48 56 64 80 96112128144 160  "
1026
                DB "  - 32 48 56 64 80 96112128160192224256320384"
1027
 
1028
L1ID0           DB "  - 32 48 56 64 80 96112128144160176192224256   "
1029
                DB "  - 32 64 96128160192224256288320352384416448"
1030
 
163 savelij 1031
EJECT
165 savelij 1032
        OUT_GSDAT __STOP
163 savelij 1033
        OUT_GSCOM 0x1F
105 savelij 1034
                CALL WC
1035
                LD A,7
1036
                CALL CLS
1037
                LD HL,MESS21
163 savelij 1038
        DE_ADR_SCR 0,8
105 savelij 1039
                CALL PRINT
1040
                LD HL,MESS22
163 savelij 1041
        DE_ADR_SCR 9,10
105 savelij 1042
                CALL PRINT
1043
                CALL NANYKEY
1044
                CALL ANYKEY
1045
                CALL NANYKEY
165 savelij 1046
        OUT_GSDAT __INIT_SD
163 savelij 1047
        OUT_GSCOM 0x1F
1048
                JP LOOP21
105 savelij 1049
 
163 savelij 1050
CLS
1051
        IFDEF _SPRINTER
1052
                LD HL,32 << 8 + 80
1053
                LD DE,0
1054
        SPBIOS BIOSF.LP_CLS_WIN, LGRAY
1055
        ELSE
1056
                LD HL,0x4000
105 savelij 1057
                LD E,L
1058
                LD D,H
1059
                LD (HL),L
1060
                INC E
163 savelij 1061
                LD BC,0x1800
105 savelij 1062
                LDIR
163 savelij 1063
                LD (0x5C8D),A
1064
                LD (0x5C48),A
1065
                LD HL,0x5800
105 savelij 1066
                LD D,H
1067
                LD E,L
1068
                LD (HL),A
163 savelij 1069
                LD BC,0x02FF
105 savelij 1070
                INC E
1071
                LDIR
1072
                RRCA
1073
                RRCA
1074
                RRCA
1075
                AND 7
163 savelij 1076
                OUT (0xFE),A
1077
        ENDIF
105 savelij 1078
                RET
1079
 
163 savelij 1080
; чтение из порта NeoGS
1081
; вход: E-адрес порта
1082
; выход: A-прочитанное значение
105 savelij 1083
INPORT          LD A,E
163 savelij 1084
        OUT_GSDAT_A
1085
        OUT_GSCOM 0x11
105 savelij 1086
                CALL WC
163 savelij 1087
        IN_GSDAT
105 savelij 1088
                RET
1089
 
163 savelij 1090
; запись в порт NEOGS
1091
; вход: E-адрес порта, D-значение
105 savelij 1092
OUTPORT         LD A,E
163 savelij 1093
        OUT_GSDAT_A
1094
        OUT_GSCOM 0x10
105 savelij 1095
                CALL WC
1096
                LD A,D
163 savelij 1097
        OUT_GSDAT_A
105 savelij 1098
                JR WD
1099
 
163 savelij 1100
; ожидание байта ответа с паузой
112 savelij 1101
;WAIT_WN                PUSH BC
1102
;               LD B,2
1103
;               DJNZ $
1104
;               POP BC
105 savelij 1105
 
163 savelij 1106
; ожидание установки DATA бита
1107
WN
1108
        IN_GSCOM
105 savelij 1109
                RLA
1110
                JR NC,WN
1111
                RET
1112
 
163 savelij 1113
; ожидание сброса COMMAND бита
1114
WC
1115
        IN_GSCOM
105 savelij 1116
                RRA
1117
                JR C,WC
1118
                RET
1119
 
163 savelij 1120
; ожидание сброса DATA бита
1121
WD
1122
        IN_GSCOM
105 savelij 1123
                RLA
1124
                JR C,WD
1125
                RET
1126
 
163 savelij 1127
; прием E байт из NeoGS
1128
INI_E
105 savelij 1129
INI_E1          LD D,0
1130
INI_E2          DEC D
1131
                JR Z,INI_E3
1132
                CALL WN
163 savelij 1133
        IN_GSDAT
1134
                LD (HL),A
1135
                INC HL
105 savelij 1136
                DEC E
1137
                JR NZ,INI_E1
1138
                RET
1139
 
165 savelij 1140
INI_E3
1141
        LD_A VARP_FLAGS
105 savelij 1142
                CALL GET_VTS
165 savelij 1143
                BIT B_SD_LOST,A
105 savelij 1144
                JR Z,INI_E1
142 savelij 1145
                LD SP,(OLD_STACK)
105 savelij 1146
                JP EJECT
1147
 
1148
PRIHEX          PUSH AF
1149
                RRA
1150
                RRA
1151
                RRA
1152
                RRA
163 savelij 1153
                CALL .PHC
105 savelij 1154
                POP AF
163 savelij 1155
.PHC            AND 0x0F
1156
                CP 0x0A
1157
                JR C,.L1
105 savelij 1158
                ADD A,7
163 savelij 1159
.L1             ADD A,'0'
105 savelij 1160
PRISYM          PUSH HL
1161
                PUSH DE
163 savelij 1162
        IFDEF _SPRINTER
1163
                PUSH BC
1164
                LD B,1
1165
        SPBIOS BIOSF.LP_PRINT_SYM
1166
                POP BC
1167
                POP DE
1168
                POP HL
1169
                RET
1170
        ELSE
105 savelij 1171
                PUSH DE
1172
                LD L,A
1173
                LD H,0
1174
                LD DE,CHARS
1175
                ADD HL,HL
1176
                ADD HL,HL
1177
                ADD HL,HL
1178
                ADD HL,DE
1179
                POP DE
163 savelij 1180
        REPT 8
105 savelij 1181
                LD A,(HL)
1182
                LD (DE),A
1183
                INC HL
1184
                INC D
163 savelij 1185
        ENDM
105 savelij 1186
                POP DE
1187
                POP HL
1188
                INC E
1189
                RET
163 savelij 1190
        ENDIF
105 savelij 1191
 
163 savelij 1192
        IFDEF _SPRINTER
1193
; установка позиции печати
1194
SET_DE_ADR_SCR  PUSH AF
1195
                PUSH HL
1196
                PUSH DE
1197
                PUSH BC
1198
        SPBIOS BIOSF.LP_SET_PLACE
1199
                POP BC
1200
                POP DE
1201
                POP HL
1202
                POP AF
1203
                RET
1204
 
1205
DETECT_ISA      LD (OPEN_ISA.SLOT),A
1206
; A - номер слота 0 или 1
1207
OPEN_ISA        LD A,0
1208
.SLOT           EQU $-1
1209
                ex af,af'
1210
                in a,(PAGE_CPU3);(mmu3)
1211
                ld (CLOSE_ISA.pg),a
1212
                ld bc,0x1FFD;sc_port
1213
                ld a,0x11
1214
                out (c),a
1215
                ex af,af'
1216
                rlca
1217
                or %11010100;ISA.SLOT0_PORT
1218
                out (PAGE_CPU3),a;(mmu3),a
1219
                ld bc,ISA_PORT;ISA.DIR
1220
                xor a
1221
                out (c),a
1222
                ret
1223
 
1224
CLOSE_ISA       ld bc,0x1FFD;sc_port
1225
                ld a,1
1226
                out (c),a
1227
                ld a,0
1228
.pg             EQU $-1
1229
                out (PAGE_CPU3),a;(mmu3),a
1230
                ret
1231
 
1232
CHECK_ISA       ld a,(0xC000)
1233
                cp 0xff
1234
                ret z                           ; норм, шина ISA есть
1235
                scf                             ; нет, шины нет (эмулятор?)
1236
                ret
1237
        ENDIF
1238
 
165 savelij 1239
GO_YES          binclude tmp/play_on_ngs.rom
105 savelij 1240
FAT_END
1241
 
163 savelij 1242
        IFNDEF _SPRINTER
1243
CHARS           binclude make/altstd.bin
1244
        ENDIF
1245
 
1246
                DUPL LOW (-GO_YES)
1247
OPISAT          EQU $                           ; адрес складирования описателя при приеме с нгс