Top secrets sources NedoPC ngs

Rev

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