Blame |
Last modification |
View Log
| Download
| RSS feed
| ?url?
;LAST UPDATE: 24.05.2013 savelij
;version 06.03.2009
;
include macros.a80
include ports_ngs.a80 ;INCL "PORTSNGS"
BUF_LNG EQU 0X4000
;
.
GSSTEK EQU 0X41DF
;
;
REJIMGS EQU 0X41E0
;1
KOLWMP3 EQU REJIMGS+1
;2
MP3
CALBFAT EQU KOLWMP3+2
;1 FAT
BUFTIME EQU CALBFAT+1
;8
;
(DIR&MP3)
FORFILE EQU 0X8000
;
PG4MP3 EQU 3
;
;
PG4DIR EQU 5
;
DIR
;
ORG 0X4600;,0X8000
;
NeoGS 0X4600
;
0X8000
START DI
LD A,PG4MP3
OUT (MPAG),A
;
LD A,6
CALL COM__SD
AND A
;
GS/NeoGS
JR Z,INI_MP3
LD A,0XCC
JR START4
; =GS
INI_MP3 LD A,8
CALL COM__SD
; MP3
INI__SD LD SP,GSSTEK
IN A,(DPORT1)
START2 XOR A
CALL COM__SD
AND A
; SD
JR Z,START1
LD A,0XEE
LD (CALBFAT),A
JR START4
; =SD
START1 XOR A
CALL COM_FAT
; FAT
LD (CALBFAT),A
INC A
JR NZ,START3
LD A,0XDD
JR START4
; =FAT
START3 CALL CP_XB
CALL RTYPEVS
LD A,3
CALL COM_FAT
;
LD A,4
CALL COM_FAT
;
LD (KOLWMP3),HL
IN A,(CLRCBIT)
LD BC,0
LD (STOP_PL+1),BC
CALL PAUSEPL
;
LD A,H
OR L
LD A,0XBB
JR Z,START4
; =
CALL INIPLAY
LD A,0X77
; =
START4 LD (REJIMGS),A
OUT (ZXDATWR),A
;
IN A,(DPORT1)
;
OPROS IN A,(ZXSTAT)
RRA
JR C,OPROS1
CALL PLAYMP3
JR OPROS
OPROS1 IN A,(CLRCBIT)
IN A,(ZXCMD)
LD L,A
AND A
JR Z,OPROS2
LD A,(REJIMGS)
CP 0X78
JR NC,OPROS
LD A,L
OPROS2 CP LOW ((END_TAB-TABFUNC)/2)+1
JR NC,OPROS
ADD A,A
LD L,A
LD H,0
LD DE,TABFUNC
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
LD HL,OPROS
PUSH HL
EX DE,HL
JP (HL)
TABFUNC DW INI__SD ;00
SD
DW PREVPL ;01
DW PLAY ;02
DW PAUSEPL ;03
DW STOP_PL ;04
DW NEXTPL ;05
DW XORBASS ;06 XOR TREBLE/BASS
DW XORSURR ;07 XOR SURROUND
DW VOL_UP ;08 +
DW VOL_DN ;09 -
DW MUTE ;0A /
DW GETTIME ;0B
DW GET_VTS ;0C 6-10
DW GET_TEK ;0D
DW SET_NUM ;0E
DW SRESMP3 ;0F MP3
DW FATTYPE ;10 FAT
DW GET_LNG ;11
DW GETOPIS ;12
DW GETKMP3 ;13 *.EXT
DW GON2MP3 ;14 MP3
DW GETDMP3 ;15 DEC
DW GETDTEK ;16 DEC
+1
DW SFT_HRD ;17
DW PREVDIR ;18
DIR
DW NEXTDIR ;19
DIR
DW SETTMBR ;1A .
DW RUSTTBL ;1B
DW BITRATE ;1C RD
DW TESTREJ ;1D
END_TAB
;
HDAT1,HDAT0
;
BC=HDAT1, DE=HDAT0
BITRATE LD HL,0X0309
LD A,0X0A
CALL COM__SD
PUSH DE
LD HL,0X0308
LD A,0X0A
CALL COM__SD
POP BC
LD A,C
AND A
LD HL,0XA000
JP Z,GET_RZN
AND %00011000
RRCA
RRCA
RRCA
; ID
LD L,A
LD A,D
AND %00001100
; SAMPLE RATE
OR L
LD L,A
LD A,C
AND %00000110
; LAYER
RLCA
RLCA
RLCA
OR L
LD L,A
LD A,E
AND %11000000
; MODE
OR L
LD L,A
LD A,D
AND %11110000
; BITRATE
RRCA
RRCA
RRCA
RRCA
LD H,A
JP GET_RZN
;
HL
;
SETTMBR CALL WDY
IN A,(ZXDATRD);
LD B,A;
LD A,(GET_VTS+2)
BIT 3,A;
RET Z; VS1001
; VS1011
BIT 7,A;
RET Z;
PUSH BC;
"B"
LD HL,0X0302
LD A,0X0A;
CALL COM__SD;
POP BC;
"B"
LD C,0X10;
BIT 6,B; UBASS?
JR Z,STTMBR1
;
BASS, 7-4
LD A,E
AND 0X0F
LD L,A;
3-0
LD A,E
AND 0XF0
BIT 7,B; ?
JR Z,STMB01
;
ADD A,C;
1
JR C,STTMBR1;!
JR STMB02
;
STMB01 SUB C;
1
JR C,STTMBR1;!
STMB02 ADD A,L
LD E,A;
3-0
STTMBR1 BIT 2,B; UTREBLE?
JR Z,STTMBR2
;
TREBLE, 7-4
LD A,D
AND 0X0F
LD L,A;
3-0
LD A,D
AND 0XF0
BIT 3,B; ?
JR Z,STMB03
;
ADD A,C
JR C,STTMBR2;!
JR STMB04
;
STMB03 SUB C
JR C,STTMBR3;!
STMB04 ADD A,L
LD D,A;
3-0
STTMBR2 BIT 4,B; FBASS?
JR Z,STTMBR3
;
BASS, 3-0
LD A,E
AND 0XF0
LD L,A;
7-4
LD A,E
AND 0X0F
BIT 5,B; ?
JR Z,STMB05
;
INC A
CP 0X10
JR NC,STTMBR3;!
JR STMB06
STMB05 AND A
JR Z,STTMBR3;!
DEC A
STMB06 ADD A,L
LD E,A;
7-4
STTMBR3 BIT 0,B; FTREBLE?
JR Z,WRTMBR
;
TREBLE, 3-0
LD A,D
AND 0XF0
LD L,A;
7-4
LD A,D
AND 0X0F
BIT 1,B; ?
JR Z,STBM07
;
INC A
CP 0X10
JR NC,WRTMBR;!
JR STBM08
;
STBM07 AND A
JR Z,$+3;!
DEC A
STBM08 ADD A,L
LD D,A;
7-4
WRTMBR LD HL,0X0202
LD A,0X0A
JP COM__SD
;
; FAT
FATTYPE LD A,(CALBFAT)
JP GET_BYT
;
RTYPEVS LD A,0X0A
LD HL,0X0301
CALL COM__SD
LD A,E
RRCA
AND 8
LD E,A
LD A,(GET_VTS+2)
AND 0XF7
OR E
LD (GET_VTS+2),A
RET
;
TESTREJ IN A,(CLRCBIT)
LD A,(ZXDATRD)
LD A,(REJIMGS)
OUT (ZXDATWR),A
RET
;
SFT_HRD LD HL,GET_VTS+2
LD A,0X10
XOR (HL)
LD (HL),A
LD A,8
BIT 4,(HL)
JR NZ,$+4
LD A,0X0B
LD (SRESMP3+1),A
RET
; MP3
SRESMP3 LD A,0X0B
JP COM__SD
;
STOP_PL LD BC,0
CALL PAUSEPL
JP INIPLAY
;
PAUSEPL LD A,0XC9
LD (PLAYMP3),A
RET
;
PLAY LD HL,(KOLWMP3)
LD A,H
OR L
RET Z
XOR A
JR PAUSEPL+2
;
NEXTPL LD BC,(STOP_PL+1)
INC BC
LD HL,(KOLWMP3)
LD A,H
OR L
RET Z
AND A
SBC HL,BC
JR NZ,$+5
LD BC,0
LD (STOP_PL+1),BC
JP INIPLAY
;
PREVPL LD BC,(STOP_PL+1)
LD A,B
OR C
JR NZ,PREVPL1
LD BC,(KOLWMP3)
LD A,B
OR C
RET Z
PREVPL1 DEC BC
LD (STOP_PL+1),BC
JP INIPLAY
;
DIR
NEXTDIR LD BC,(STOP_PL+1)
LD A,9
PUSH BC
CALL COM_FAT
POP HL
AND A
SBC HL,BC
RET Z
LD (STOP_PL+1),BC
JP INIPLAY
;
DIR
PREVDIR LD BC,(STOP_PL+1)
LD A,8
PUSH BC
CALL COM_FAT
POP HL
AND A
SBC HL,BC
RET Z
LD (STOP_PL+1),BC
JP INIPLAY
;
512 MP3
GON2MP3 LD HL,BUF_512
LD DE,0X0200
LD A,0X0C
JP COM__SD
;
GET_LNG CALL RDINBC
BIT 7,B
JR Z,$+6
LD BC,(STOP_PL+1)
LD HL,GET_VTS+2
RES 5,(HL)
LD HL,BUF_LNG
LD A,2
CALL COM_FAT
LD E,0
JP OUTDATA
;/
MUTE LD HL,0X030B
LD A,0X0A
CALL COM__SD
LD A,E
CP 0XFE
JR NC,MUTEOFF
LD (MUTEOFF+1),A
LD HL,GET_VTS+2
SET 6,(HL)
LD E,0XFE
JR VOL_ALL
MUTEOFF LD E,0
LD HL,GET_VTS+2
RES 6,(HL)
JR VOL_ALL
;
VOL_UP LD HL,0X030B
LD A,0X0A
CALL COM__SD
LD A,E
AND A
RET Z
CP 0X80
RET NC
DEC E
JR VOL_ALL
;
VOL_DN LD HL,0X030B
LD A,0X0A
CALL COM__SD
LD A,E
CP 0X7F
RET NC
INC E
VOL_ALL LD D,E
LD HL,0X020B
LD A,E
LD (GET_VTS+1),A
LD A,0X0A
JP COM__SD
;
VIRTUAL SURROUND
XORSURR LD B,1
XOR_ALL PUSH BC
LD HL,0X0300
LD A,0X0A
CALL COM__SD
POP BC
LD A,E
XOR B
LD E,A
LD A,(GET_VTS+2)
XOR B
LD (GET_VTS+2),A
BIT 3,A
JR Z,$+4
RES 7,E
LD HL,0X0200
LD A,0X0A
JP COM__SD
;
XORBASS LD A,(GET_VTS+2)
BIT 3,A
JR NZ,XB
LD B,0X80
JR XOR_ALL
XB LD A,(GET_VTS+2)
XOR 0X80
LD (GET_VTS+2),A
CP_XB LD A,(GET_VTS+2)
BIT 7,A
JR Z,XB1
VS_TBL LD DE,0
XB2 LD HL,0X0202
LD A,0X0A
JP COM__SD
XB1 LD HL,0X0302
LD A,0X0A
CALL COM__SD
LD (VS_TBL+1),DE
LD DE,0
JR XB2
;
GETTIME LD HL,0X0304
LD A,0X0A
CALL COM__SD
EX DE,HL
LD DE,BUFTIME
PUSH DE
LD BC,36000
CALL SUB_BC
LD BC,3600
CALL SUB_BC
LD BC,600
CALL SUB_BC
LD BC,60
CALL SUB_BC
LD BC,10
CALL SUB_BC
LD A,0X30
ADD A,L
LD (DE),A
LD E,6
POP HL
JP OUTDATA
;
;
RUSTTBL LD A,(GET_VTS+2)
BIT 3,A
RET Z
LD HL,0X0302
LD A,0X0A
CALL COM__SD
LD A,D
EXX
LD DE,BUFTIME
AND 0X0F
LD L,A
LD H,0
LD BC,10
CALL SUB_BC
LD A,0X30
ADD A,L
LD (DE),A
; TREBLE
INC DE
EXX
LD A,D
EXX
AND 0XF0
RRCA
RRCA
RRCA
RRCA
LD L,A
BIT 3,A
LD A,0X2B
JR Z,$+4
LD A,0X2D
LD (DE),A
INC DE
LD A,L
AND 7
ADD A,0X30
LD (DE),A
;
TREBLE
INC DE
EXX
LD A,E
EXX
AND 0X0F
LD L,A
LD BC,10
CALL SUB_BC
LD A,0X30
ADD A,L
LD (DE),A
; BASS
INC DE
EXX
LD A,E
EXX
AND 0XF0
RRCA
RRCA
RRCA
RRCA
LD L,A
LD BC,10
CALL SUB_BC
LD A,0X30
ADD A,L
LD (DE),A
;
BASS
EXX
LD E,8
LD HL,BUFTIME
LD A,0X30
CP (HL)
JR NZ,$+4
LD (HL),0X20
JP OUTDATA
SUB_BC LD A,0XFF
AND A
INC A
SBC HL,BC
JR NC,$-3
ADD HL,BC
ADD A,0X30
LD (DE),A
INC DE
RET
;
-
GETDMP3 LD HL,(KOLWMP3)
;
HL TXT
GETDCHR LD DE,BUFTIME
PUSH DE
LD BC,10000
CALL SUB_BC
LD BC,1000
CALL SUB_BC
LD BC,100
CALL SUB_BC
LD BC,10
CALL SUB_BC
LD A,0X30
ADD A,L
LD (DE),A
POP HL
PUSH HL
LD BC,0X0420
LD A,(HL)
CP 0X30
JR NZ,GO_OUTD
LD (HL),C
INC HL
DJNZ $-7
GO_OUTD POP HL
LD E,5
JR OUTDATA
;
+1
;
GETDTEK LD HL,(STOP_PL+1)
INC HL
JR GETDCHR
;
33
GETOPIS CALL RDINBC
BIT 7,B
JR Z,$+6
LD BC,(STOP_PL+1)
LD A,1
CALL COM_FAT
LD BC,0X20
ADD HL,BC
LD (HL),E
SBC HL,BC
LD E,0X21
;
,
E
OUTDATA LD A,(HL)
INC HL
OUT (ZXDATWR),A
CALL WDN
DEC E
JR NZ,OUTDATA
RET
;
;
-
-1
SET_NUM CALL RDINBC
LD HL,(KOLWMP3)
AND A
SBC HL,BC
RET C
LD (STOP_PL+1),BC
RET
;
BC
RDINBC CALL WDY
IN A,(ZXDATRD)
LD B,A
CALL WDY
IN A,(ZXDATRD)
LD C,A
RET
;
-
GETKMP3 LD HL,(KOLWMP3)
JR GET_RZN
;
GET_TEK LD HL,(STOP_PL+1)
JR GET_RZN
; HL
GET_VTS LD HL,0
;
HL
GET_RZN LD A,H
OUT (ZXDATWR),A
CALL WDN
LD A,L
;
2 HL
GET_BYT OUT (ZXDATWR),A
;
WDN IN A,(ZXSTAT)
RLA
JR C,$-3
RET
;
WDY IN A,(ZXSTAT)
RLA
JR NC,$-3
RET
; MP3-
1
PLAYMP3 RET
LD A,6
CALL COM_FAT
RET NZ
;
,
LD A,0X0D
CALL COM__SD
JP NEXTPL
; ,
;
;
INIPLAY PUSH BC
CALL SRESMP3
;
LD HL,(GET_VTS+1)
BIT 4,H
;
=HARD,
;
MP3
;
JR Z,INIPLA1
LD L,0
LD A,H
AND %00011000
LD H,A
INIPLA1 SET 5,H
LD (GET_VTS+1),HL
;
5,
POP BC
LD A,7
JP COM_FAT
;
COM__SD include sd4ngs.a80 ; INCL "SD4NGS";
SD
COM_FAT include fat4ngs.a80 ; INCL "FAT4NGS";
FAT