Rev 163 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
; LAST UPDATE 26.04.2023 savelij
; SD & MP3 äãªæ¨¨ ¯® ®¬¥à ¬
INIT_VAR
SETVAR Sd_init ; ¨¨â SD ª àâë
SETVAR Sd__off ; áï⨥ ¢ë¡®à
SETVAR Rdsingl ; ç¨â âì 1 ᥪâ®à
SETVAR Rdmulti ; ç¨â âì "A" ᥪâ®à
SETVAR Wrsingl ; § ¯¨á âì 1 ᥪâ®à - ¥âã
SETVAR Wrmulti ; § ¯¨á âì "A" ᥪâ®à®¢ - ¥âã
SETVAR Avtodet ; ¢â®¤¥â¥ªâ GS/NeoGS
SETVAR Freqnc ; ãáâ ®¢ª ç áâ®âë
SETVAR Hardmp3 ; ¯®«ë© ¨¨â MP3 稯
SETVAR Ldi_mp3 ; ¯¥à¥¤ ç ᥪâ®à á SD -> MP3
SETVAR Com_mp3 ; RD/WR MP3 稯
SETVAR Softmp3 ; soft ¨¨â MP3 稯
SETVAR Dat2mp3 ; ¯¥à¥¤ ç ᥪ. GSDAT -> MP3
SETVAR Zer2mp3 ; ¯¥à¥¤ ç 2048 ã«¥© -> MP3
; ¤à ©¢¥à SD-CARD ¤«ï NeoGS
; +¤à ©¢¥à ¤«ï MP3-¤¥ª®¤¥à
; å®¤ë¥ ¯ à ¬¥âàë ®¡é¨¥:
; HL- ¤à¥á § £à㧪¨ ¢ ¯ ¬ïâì
; BCDE-32-å ¡¨âë© ®¬¥à ᥪâ®à
; A-ª®«¨ç¥á⢮ ¡«®ª®¢ (¡«®ª=512 ¡ ©â)
; ⮫쪮 ¤«ï ¬®£®¡«®ç®© § ¯¨á¨/ç⥨¨
; 訡ª¨ ¢ë¤ ¢ ¥¬ë¥ ¢ë室¥:
; A=0-¨¨æ¨ «¨§ æ¨ï ¯à®è« ãᯥè®
; A=1-ª àâ ¥ ©¤¥ ¨«¨ ¥ ®â¢¥â¨«
; A=2-ª àâ § é¨é¥ ®â § ¯¨á¨
; A=3-¯®¯ë⪠§ ¯¨á¨ ¢ ᥪâ®à 0 ª àâë
; A=0x80-ª àâ ¯¥à¥áâ « ®â¢¥ç âì
; ®¡é ï â®çª ¢å®¤ ¤«ï à ¡®âë á SD ª à⮩
CALL CMP_INT
DI
EXX
PUSH HL ; á®åà ¨«¨ HL'
PUSH DE ; á®åà ¨«¨ DE'
LD HL,OK_SD
PUSH HL ; ¢®§¢à ⠢ᥠOK
LD HL,0
ADD HL,SP ; á®åà ¨«¨ á⥪
EX DE,HL
LD HL,ERR_SD ; ¤à¥á ¯¥à¥å®¤ ¯à¨ ®è¨¡ª¥
EXX
PUSH HL
PUSH DE
ADD A,A
LD L,A
LD H,0
LD DE,TABL_SD
ADD HL,DE
EX AF,AF'
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
POP DE
EX (SP),HL
RET
OK_SD EXX
ERR_SD EX DE,HL
LD SP,HL
POP DE
POP DE
POP HL
EXX
PUSH AF
LD A,(INT_MODE)
AND A
JR Z,ERR_SD1
EI
ERR_SD1 POP AF
RET
TABL_SD DW SD_INIT ; 00 ¯ à ¬¥â஢ ¥ âॡã¥â, ¢ë室¥ A ᬮâਠ¢ëè¥ ¯¥à¢ë¥ 2 § 票ï
DW SD__OFF ; 01 ¯à®áâ® áï⨥ ¢ë¡®à SD ª àâë
DW RDSINGL ; 02 ç¨â âì 1 ᥪâ®à
DW RDMULTI ; 03 ç¨â âì "A" ᥪâ®à®¢
DW EMPTY ; 04 ¯¨á âì 1 ᥪâ®à
DW EMPTY ; 05 ¯¨á âì "A" ᥪâ®à®¢
DW AVTODET ; 06- ¢â®¤¥â¥ªâ
DW FREQNC ; 07-ãáâ ®¢ª ç áâ®âë
DW HARDMP3 ; 08 ¨¨æ¨ «¨§ æ¨ï MP3-¤¥ª®¤¥à
DW LDI_MP3 ; 09 £® á SD MP3
DW COM_MP3 ; 0A RD&WR ¢ MP3-¤¥ª®¤¥à
DW SOFTMP3 ; 0B SOFT RESET MP3CHIP
DW DAT2MP3 ; 0C £® á GSDAT2MP3
DW ZER2MP3 ; 0D 2048 ã«¥© MP3
ZAW003 CALL SD__OFF
LD A,1
EMPTY RET
SD_INIT CALL CS_HIGH
LD BC,SD_SEND
LD DE,0x20FF
OUT (C),E
DEC D
JR NZ,$-3
LD BC,SD_RSTR
XOR A
EX AF,AF'
ZAW001 LD HL,CMD00
CALL OUTCOM
CALL IN_OOUT
EX AF,AF'
DEC A
JR Z,ZAW003
EX AF,AF'
DEC A
JR NZ,ZAW001
LD HL,CMD08
CALL OUTCOM
CALL IN_OOUT
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
LD HL,0
BIT 2,A
JR NZ,ZAW006
LD H,0x40
ZAW006 LD A,CMD_55
CALL OUT_COM
CALL IN_OOUT
in (c) ;in f,(c)
in (c) ;in f,(c)
LD BC,SD_SEND
LD A,ACMD_41
OUT (C),A
NOP
OUT (C),H
NOP
OUT (C),L
NOP
OUT (C),L
NOP
OUT (C),L
LD A,0xFF
OUT (C),A
CALL IN_OOUT
AND A
JR NZ,ZAW006
ZAW004 LD A,CMD_59
CALL OUT_COM
CALL IN_OOUT
AND A
JR NZ,ZAW004
ZAW005 LD HL,CMD16
CALL OUTCOM
CALL IN_OOUT
AND A
JR NZ,ZAW005
SD__OFF
CS_HIGH PUSH AF
LD A,M_SDNCS+M_SNCLR ; 0x81
OUT (SCTRL),A
POP AF
RET
CS__LOW PUSH AF
LD A,M_SDNCS ; 1
OUT (SCTRL),A
POP AF
RET
OUTCOM CALL CS__LOW
PUSH BC
LD BC,0x0600+SD_SEND
OTIR
POP BC
RET
OUT_COM PUSH BC
CALL CS__LOW
LD BC,SD_SEND
in (c) ;in f,(c)
in (c) ;in f,(c)
OUT (C),A
XOR A
OUT (C),A
NOP
OUT (C),A
NOP
OUT (C),A
NOP
OUT (C),A
DEC A
OUT (C),A
POP BC
RET
SECM200 PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH BC
LD A,CMD_58
LD BC,SD_RSTR
CALL OUT_COM
CALL IN_OOUT
INC A
JR NZ,SCM200
EXX
LD A,0x80
JP (HL)
SCM200 IN A,(C)
NOP
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
BIT 6,A
POP HL
JR NZ,SECN200
EX DE,HL
ADD HL,HL
EX DE,HL
ADC HL,HL
LD H,L
LD L,D
LD D,E
LD E,0
SECN200 POP AF
in (c) ;in f,(c)
in (c) ;in f,(c)
LD BC,SD_SEND
OUT (C),A
NOP
OUT (C),H
NOP
OUT (C),L
NOP
OUT (C),D
NOP
OUT (C),E
LD A,0xFF
OUT (C),A
POP BC
POP DE
POP HL
RET
IN_OOUT PUSH DE
LD DE,0x30FF
IN_WAIT IN A,(SD_RSTR)
CP E
JR NZ,IN_EXIT
DEC D
JR NZ,IN_WAIT
IN_EXIT POP DE
RET
CMD00 DB 0x40,0x00,0x00,0x00,0x00,0x95 ; GO_IDLE_STATE
CMD08 DB 0x48,0x00,0x00,0x01,0xAA,0x87 ; SEND_IF_COND
CMD16 DB 0x50,0x00,0x00,0x02,0x00,0xFF ; SET_BLOCKEN
; ç⥨¥ ®¤®£® ᥪâ®à ¢ ¯ ¬ïâì
RD_SECT PUSH BC
PUSH DE
LD BC,SD_RSTR
INIR
INIR
JR RDSECT3
; ç⥨¥ ®¤®£® ᥪâ®à á ¯®¡ ©â®¢®© ¯¥à¥¤ 祩 ¢ MP3 稯
RON_MP3 PUSH BC
PUSH DE
LD BC,SD_RSTR
LD D,0x10
RDSECT2 IN A,(SSTAT)
RRA
JR NC,$-3
LD E,0x20
RDSECT1 IN A,(C)
NOP
OUT (MD_SEND),A
DEC E
JR NZ,RDSECT1
DEC D
JR NZ,RDSECT2
RDSECT3 IN A,(C) ; áï⨥ CRC16
NOP
IN A,(C)
POP DE
POP BC
RET
; ¯¥à¥¤ ç ᥪâ®à ¢ MP3 稯
LDI_MP3 LD A,CMD_17
CALL SECM200
CALL IN_OOUT
CP 0xFE
JR NZ,$-5
CALL RON_MP3
CALL IN_OOUT
INC A
JR NZ,$-4
JP CS_HIGH
; § £à㧪 ®¤®£® ᥪâ®à ¢ ¯ ¬ïâì
RDSINGL LD A,CMD_17
CALL SECM200
CALL IN_OOUT
CP 0xFE
JR NZ,$-5
CALL RD_SECT
CALL IN_OOUT
INC A
JR NZ,$-4
JP CS_HIGH
RDMULTI EX AF,AF'
LD A,CMD_18
CALL SECM200
EX AF,AF'
RDMULT1 EX AF,AF'
CALL IN_OOUT
CP 0xFE
JR NZ,$-5
CALL RD_SECT
EX AF,AF'
DEC A
JR NZ,RDMULT1
LD A,CMD_12
CALL OUT_COM
CALL IN_OOUT
INC A
JR NZ,$-4
JP CS_HIGH
; ®¦¨¤ ¨¥ £®â®¢®á⨠SPI MP3 稯
NOPER REPT 18
NOP
ENDM
RET
AVTODET IN A,(GSCFG0)
AND 0xCF
OUT (GSCFG0),A
LD D,A
CALL NOPER
IN A,(GSCFG0)
CP D
LD A,0
RET Z
NO_MP3 LD A,0xFF
RET
FREQNC LD A,E
LD D,C_10MHZ ; 0x30
AND 3
JR Z,FREQNCS
LD D,C_12MHZ ; 0x10
DEC A
JR Z,FREQNCS
LD D,C_20MHZ ; 0x20
DEC A
JR Z,FREQNCS
LD D,C_24MHZ ; 0
FREQNCS IN A,(GSCFG0)
AND %11001111
OR D
OUT (GSCFG0),A
RET
; § ¯¨áë¢ ¥¬ 2048 ã«¥© ª ª § ¢¥à襨¥ ¯¥á¥ª¨
ZER2MP3 LD D,0x40
ZR2MP31 IN A,(SSTAT)
RRA
JR NC,$-3
LD E,0x20
XOR A
OUT (MD_SEND),A
DEC E
JR NZ,$-4
DEC D
JR NZ,ZR2MP31
RET
; ¯®«ë© á¡à®á
HARDMP3 XOR A
CALL VOL_MOD ; § £«ã訫¨ £à®¬ª®áâì ¯®à⮢ GS
LD BC,MC_SEND
LD A,%10011100 ; 0x9C
OUT (SCTRL),A
LD E,0
CALL FREQNC ; ¢ëáâ ¢¨«¨ ç áâ®âã NGS 10 æ
LD HL,0x0301
CALL COM_MP3
LD A,E
AND %01110000
PUSH AF
LD A,M_MPXRS
OUT (SCTRL),A
CALL NOPER
LD A,M_MPXRS+M_SNCLR ; 0x84
OUT (SCTRL),A ; ¢ë¤ «¨ á¡à®á ¤¥ª®¤¥à
IN A,(SSTAT)
RRA
JR NC,$-3 ; ¤®¦¤ «¨áì £®â®¢®á⨠¤¥ª®¤¥à
LD HL,0x0203
LD DE,0x9B58
CALL COM_MP3 ; ¢ëáâ ¢¨«¨ ¤¥ª®¤¥à¥ ç áâ®âã 14 æ
POP AF ; §¤¥áì ¯®è« ¨¨æ¨ «¨§ æ¨ï ¤«ï VS1001
LD HL,0x0202
LD DE,0x8008
CALL Z,COM_MP3 ; § ¯¨áì ¥¤®ªã¬¥â¨à®¢ ®£® ¯¨ª ¢
; ¥¤®ªã¬¥â¨à®¢ ë© à¥£¨áâà, ¥á«¨
; ¡¨âë 6-4 ॣ¨áâà áâ âãá ¢ ã«¥
LD E,1
JP FREQNC ; ¢ëáâ ¢¨«¨ ç áâ®âã NGS 12 æ
; ¯à®£à ¬¬ë© á¡à®á MP3 ¤¥ª®¤¥à , ४®¬¥¤ã¥âáï ¢ë§ë¢ âì ¯¥à¥¤ ª ¦¤ë¬ ®¢ë¬ ä ©«®¬, á¡à áë¢ ¥â áç¥â稪 ᥪã¤
; ¯®á«¥ ¯à®£à ¬¬®£® á¡à®á ¢á¥ ãáâ ®¢«¥ë¥ ०¨¬ë ¤¥ª®¤¥à ¥ ¨§¬¥ïîâáï
SOFTMP3 LD BC,MC_SEND
LD HL,0x030B
CALL COM_MP3 ; ᨬ ¥¬ ⥪ã饥 § 票¥ £à®¬ª®áâ¨
PUSH DE
LD DE,0xFEFE ; ¨ á®åà 塞 ¥£® ¤® «ãçè¨å ¢à¥¬¥
LD HL,0x020B
CALL COM_MP3 ; 㬥ìè ¥¬ £à®¬ª®áâì ¤® ¬¨¨¬ã¬
LD HL,0x0301
CALL COM_MP3
LD A,E
AND %01110000
PUSH AF
LD HL,0x0300
CALL COM_MP3 ; ç¨â ¥¬ á®áâ®ï¨¥ MODE
LD A,4
XOR E
LD E,A
LD HL,0x0200
CALL COM_MP3
LD A,4
XOR E
LD E,A
LD HL,0x0200
CALL COM_MP3 ;¤ ¥¬ ª®¬ ¤ã á®äâ-á¡à®á
IN A,(SSTAT)
RRA
JR NC,$-3 ; ¦¤¥¬ ®á¢®¡®¦¤¥¨ï ¤¥ª®¤¥à
LD HL,0x0203
LD DE,0x9B58
CALL COM_MP3 ; ¢ëáâ ¢«ï¥¬ ç áâ®âã ¯®á«¥ ¨¨æ¨ «¨§ 樨 MP3 ¤¥ª®¤¥à
POP AF
LD HL,0x0202
LD DE,0x8008
CALL Z,COM_MP3 ; ¥¤®ªã¬¥â¨à®¢ ë© ¯¨®ª MP3 ¤¥ª®¤¥à
POP DE
LD HL,0x020B
JR COM_MP3 ; ¢®ááâ ¢«¨¢ ¥¬ £à®¬ª®áâì ¤® á¡à®á
; £«ã訬 £à®¬ª®áâì MOD ¯®à⮢
VOL_MOD OUT (VOL1),A
OUT (VOL2),A
OUT (VOL3),A
OUT (VOL4),A
OUT (VOL5),A
OUT (VOL6),A
OUT (VOL7),A
OUT (VOL8),A
RET
; ¯à®æ¥¤ãà ç⥨ï/§ ¯¨á¨ ¤à¥á®¢ MP3 ¤¥ª®¤¥à
; H - ª®¬ ¤ ¤¥ª®¤¥àã 3-READ ¨«¨ 2-WRITE
; L - ¤à¥á ¢ ¤¥ª®¤¥à¥
; D - áâ à訩 ¡ ©â
; E - ¬« ¤è¨© ¡ ©â
; DE ¯® § ¯¨á¨ ¯®¤ âì ¢å®¤
; ¯® çâ¥¨î ¯®«ãç¨âì ¢ë室¥
COM_MP3 IN A,(SSTAT)
RRA
JR NC,COM_MP3 ; ¤¥ª®¤¥à ᢮¡®¤¥
LD A,M_MCNCS
OUT (SCTRL),A ; ¢ë¡¨à ¥¬ ¤¥ª®¤¥à ¨ ®¡êïá塞 ¥¬ã, çâ® ®â ¥£® âॡã¥âáï
CALL NOPER
LD BC,MC_SEND
LD A,H
OUT (C),H
CALL NOPER
OUT (C),L
CALL NOPER
CP 3
JR Z,MP3READ ; ¯¥à¥å®¤¨¬ ç⥨¥ (ᬮâਠ¢ëè¥)
OUT (C),D
CALL NOPER
OUT (C),E ; § ¯¨á «¨ ¢ ¤à¥á ¤¥ª®¤¥à
MP3_END CALL NOPER
LD A,M_MCNCS + M_SNCLR ; 0x82 ᨬ ¥¬ ¢ë¡®à ¤¥ª®¤¥à
OUT (SCTRL),A
RET
; ç¨â ¥¬ çâ® § âॡ®¢ «¨
MP3READ LD BC,MC_READ
LD A,0xFF
OUT (MC_SEND),A
CALL NOPER
IN D,(C)
CALL NOPER
OUT (MC_SEND),A
CALL NOPER
IN E,(C)
JR MP3_END
; ¯à®æ¥¤ãà ¯¥à¥á뫪¨ ¡ ©â®¢ ᮠᯥª ç¥à¥§ ¯®àâë MP3 ¤¥ª®¤¥à
; ¯¥à¥áë« ¥âáï 512 ¡ ©â
DAT2MP3 LD D,0x10 ; ¯¥à¥£ âì ¤¥ª®¤¥à 16 ¯®à権
.L1 IN A,(SSTAT)
RRA
JR NC,.L1 ; ¤¥ª®¤¥à ᢮¡®¤¥?
LD B,0x20 ; ®¤ ¯®àæ¨ï 32 ¡ ©â
.L2 IN A,(ZXSTAT)
RLA
JR NC,.L2 ; ¤®¦¤ «¨áì ¯®¤ ç¨ ®â ᯥª
IN A,(ZXDATRD) ; § ¡à «¨ ¡ ©â
OUT (MD_SEND),A ; ®â¤ «¨ ¤¥ª®¤¥àã
NOP ; ¢ë¤¥à¦ «¨ ¯ ã§ã ¯® ⠪⠬
DJNZ .L2 ; ¯®àæ¨ï ª®ç¨« áì
DEC D
JR NZ,.L1
RET ; 512 ¡ ©â ¯¥à¥¤ ®!!!