Top secrets sources NedoPC ngs

Rev

Rev 163 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?


; LAST UPDATE 24.04.2023 savelij

; ª®¤ ¤«ï ­£á

                include macros.a80
                include ports_ngs.a80
                include sdcomand.a80
                include bootsecfat.a80
                include fat_dir.a80

; ¯ âç ¯à®è¨¢ª¨ ¤«ï ¯«¥¥à¥­¨ï MOD
; ¯«¥¥à¥­¨¥, ¯à®¢¥àª  ¨ ¯à®ç¥¥
COMINT          EQU 0x026B
COMINT_         EQU 0x026E
COMINT0         EQU 0x0273
COMINT1         EQU 0x0295
WTDTL           EQU 0x02BC
EMPTY1          EQU 0x0942
ADDA80          EQU 0x0EF8
;IP_MOD         EQU 0x11E4
EMPTY2          EQU 0x3D5F
NUMPG           EQU 0x4080                      ;‚‘…ƒŽ ‘’€ˆ–
CPAGE           EQU 0x4081                      ;PROCESS EQU 0x4084
CNTMOD          EQU 0x4090
CURMOD          EQU 0x4096
CONVERT         EQU 0x40B7
MTSTAT          EQU 0x4151
MTSNGPS         EQU 0x415B
MTSNGSZ         EQU 0x415C
PlMode          EQU 0x41A0
MODLLEN         EQU 0x41A1
ISTACK          EQU 0x4400
LDMOD           EQU 0xC3F8
PLAYMOD         EQU 0xC426
FXB01           EQU 0xD2B2

 INIT_VAR 0x4168
 SETVAR FLAGS,          BYTE
; ä« £¨ ã¯à ¢«¥­¨ï
; 7-
; 6-
; 5-
; 4-
; 3-
; 2-1-ä ©« § £à㦥­, 0-­¥â
; 1-
; 0-1-à §à¥è¥­¨¥ PLAY,0-á⮯/¯ ã§ 
 SETVAR REJIMGS,        BYTE                    ; 1 ª®¤ ®â¢¥â 
 SETVAR GETVTSL,        BYTE                    ; 1 £à®¬ª®áâì MP3 稯 
 SETVAR GETVTSH,        BYTE                    ; 1 ¡¨âë ०¨¬®¢
 SETVAR VSTBL,          WORD                    ; 2 ⥪ã騥 ­ áâனª¨ ⥬¡à®¢
 SETVAR KOLWMP3,        WORD                    ; 2 ª®«¨ç¥á⢮ MP3
 SETVAR NUMFILE,        WORD                    ; 2 ­®¬¥à ⥪ã饣® ä ©« 
 SETVAR TYPRES,         BYTE                    ; 1 ⨯ á¡à®á 
 SETVAR CALBFAT,        BYTE                    ; 1 ª «¨¡à FAT
 SETVAR BUFTIME,        8                       ; 8 ¡ãä¥à ¤«ï ⥪áâ 
 SETVAR SIZ_PAT,        BYTE                    ; 1 ª®«-¢® ¯ â¥à­®¢ ¢ § £à㦥­­®¬ MOD
 SETVAR SIZ_MOD,        BYTE                    ; 1 ª®«-¢® áâà ­¨æ MOD
 SETVAR TIMEOUT,        WORD                    ; 2 TIMEOUT ­  à ¡®âã á ­®¢ë¬ ä ©«®¬
 SETVAR KUDAXOR,        WORD                    ; 2  ¤à¥á ¯¥à¥å®¤  ­  XOR BIT 7
 SETVAR PG_PLAYER,      BYTE                    ; 1 ­®¬¥à áâà ­¨æë à á¯®«®¦¥­¨ï ¯«¥¥à 
 SETVAR INT_MODE,       BYTE                    ; 1 ä« £ à §à¥è¥­­®á⨠¯à¥à뢠­¨©

SIZEVAR         EQU SIZ_PAT + 1 - FLAGS

FREQ10          EQU 0
FREQ12          EQU 1
FREQ20          EQU 2
FREQ24          EQU 3

                ORG 0x8000
START           DI
                LD SP,ISTACK
                CALL ALLRES                     ;‘Ž‘ ‚‘…• €‘’Ž…Š
                OUT (ZXDATWR),A
                OUT (CLRCBIT),A                 ;‘ŽŽ™ˆ‹ˆ ‘…Š“ Ž …‡“‹œ’€’€• ˆˆ’€
                LD A,1
                LD (PlMode),A
                LD HL,0x0200
                LD (MODLLEN),HL
                JP CON_MOD

ALLRES          CALL PATCH                      ;€’— Ž‘Ž‚Ž‰ Ž˜ˆ‚Šˆ
                LD HL,FLAGS
                LD D,H
                LD E,L
                LD BC,SIZEVAR
                INC DE
                LD (HL),0
                LDIR                            ;‡€—ˆ‘’Š€ Ž‹€‘’ˆ ……Œ…›•
                LD A,Softmp3
                LD (TYPRES),A                   ;“‘’€Ž‚Š€ ‘Ž‘€ MP3 —ˆ€
                LD A,Avtodet
                CALL COM__SD
                AND A                           ;Ž…„…‹Ÿ…Œ GS/NeoGS
                JR Z,INI_MP3
                LD A,0xCC
                JR START4                       ;ŠŽ„ Ž˜ˆŠˆ =GS

INI_MP3         LD A,Hardmp3
                CALL COM__SD                    ;Ž‹€Ÿ ˆˆ–ˆ€‹ˆ‡€–ˆŸ MP3 —ˆ€

;----FUNC00----
INI__SD         LD HL,0
                LD (NUMFILE),HL
                LD A,Sd_init
                CALL COM__SD
                AND A                           ;ˆˆ–ˆ€‹ˆ‡€–ˆŸ SD Š€’›
                JR Z,START1
                LD A,0xEE
                LD (CALBFAT),A
                JR START4                       ;ŠŽ„ Ž˜ˆŠˆ =SD Š€’€ … €‰„…€

START1          LD HL,FLAGS
                RES 7,(HL)
                LD A,Init_Fatvars
                CALL COM_FAT                    ;ˆˆ–ˆ€‹ˆ‡€–ˆŸ FAT
                CP 0x80
                JR Z,START11
                LD (CALBFAT),A
                INC A
                JR NZ,START3
START11         LD A,0xDD
                JR START4                       ;ŠŽ„ Ž˜ˆŠˆ =FAT … €‰„…

START3          CALL CP_XB
                CALL RTYPEVS
                LD A,Finddir
                CALL COM_FAT                    ;Žˆ‘Š ‚‘…• „ˆ…Š’Žˆ‰
                CP 0x80
                JR Z,START11
                LD A,Findfil
                CALL COM_FAT                    ;Žˆ‘Š ‚‘…• ”€‰‹Ž‚ Ž Œ€‘Š…
                CP 0x80
                JR Z,START11
                LD (KOLWMP3),HL
                IN A,(CLRCBIT)
                CALL PAUSEPL                    ;Ž‘’€Ž‚Š€ € €“‡“
                LD A,H
                OR L
                LD A,0xBB
                JR Z,START4                     ;ŠŽ„ Ž˜ˆŠˆ =”€‰‹Ž‚ … €‰„…Ž
                LD BC,0
                CALL INIPLAY
                LD A,0x77                       ;ŠŽ„ Ž˜ˆŠˆ =‚‘… ‡€Œ…—€’…‹œŽ
START4          LD (REJIMGS),A
                RET

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

;----FUNC1C----
;ŠŽ‚…‘ˆŸ HDAT1,HDAT0
;Ž‘‹… —’…ˆŸ BC=HDAT1, DE=HDAT0
BITRATE         LD HL,0x0309
                LD A,Com_mp3
                CALL COM__SD
                PUSH DE
                LD HL,0x0308
                LD A,Com_mp3
                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

;----FUNC1A----
;ˆ‡Œ……ˆ… ’…ŒŽ‚
SETTMBR         OUT (CLRCBIT),A
                CALL WDY
                IN A,(ZXDATRD)                  ;—’…ˆ… €€Œ…’€
                LD B,A                          ;‘Ž•€Ÿ…Œ
                LD A,(GETVTSH)
                BIT 3,A                         ;Ž‚…Ÿ…Œ ’ˆ —ˆ€
                RET Z                           ;„‹Ÿ VS1001 ‚›•Ž„ˆŒ
;„‹Ÿ VS1011 Ž„Ž‹†€…Œ
                BIT 7,A                         ;Ž‚…Ÿ…Œ ŒŽ†Ž ‹ˆ
                RET Z                           ;Š“’ˆ’œ ’…Œ›
                PUSH BC                         ;‘Ž•€Ÿ…Œ "B"
                LD HL,0x0302
                LD A,Com_mp3                    ;—ˆ’€…Œ ’…Š“™…… ‡€—…ˆ…
                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,Com_mp3
                JP COM__SD                      ;‡€ˆ‘€‹ˆ “‘’€Ž‚Šˆ ‚‡€„

;----FUNC10----
;Ž’„€—€ €‰’€ ’ˆ€ FAT
FATTYPE         LD A,(CALBFAT)
                JP GET_BYT

;Ž…„…‹…ˆ… “‘’€Ž‚‹…ŽƒŽ —ˆ€
RTYPEVS         LD HL,0x0301
                LD A,Com_mp3
                CALL COM__SD
                LD A,E
                RRCA
                RRCA
                AND 0x0C                        ;€‘ ˆ’……‘“ž’ ˆ’› 3-2
                LD E,A                          ;’ˆ€ “‘’€Ž‚‹…ŽƒŽ MP3 —ˆ€
                LD A,(GETVTSH)
                AND 0xF3
                OR E
                LD (GETVTSH),A
                RET

;----FUNC1D----
;Ž’‚…’ € ‡€Ž‘ Š€ŠŽ‰ ŠŽ„ €Ž’€…’
TESTREJ         IN A,(CLRCBIT)
                IN A,(ZXDATRD)
                LD A,(REJIMGS)
                OUT (ZXDATWR),A
                RET

;----FUNC17----
;……Š‹ž—…ˆ… ’ˆ€ ‘Ž‘€
SFT_HRD         LD HL,GETVTSH
                LD A,0x10
                XOR (HL)
                LD (HL),A
                LD A,Hardmp3
                BIT 4,(HL)
                JR NZ,$+4
                LD A,Softmp3
                LD (TYPRES),A
                RET

;----FUNC0F----
;‘Ž‘ MP3 —ˆ€
SRESMP3         LD A,(TYPRES)
                JP COM__SD

;----FUNC04----
;Ž‘’€Ž‚Š€ Žˆƒ›‚€ˆŸ
STOP_PL         CALL PAUSEPL
                LD BC,(NUMFILE)
                JP INIPLAY

;----FUNC03----
;€“‡€ ‚Ž‘Žˆ‡‚…„…ˆŸ
PAUSEPL         LD HL,MTSTAT
                SET 7,(HL)
                LD HL,FLAGS
                RES 0,(HL)
                RET

;----FUNC02----
;‡€“‘Š ‚Ž‘Žˆ‡‚…„…ˆŸ
PLAY            LD HL,(KOLWMP3)
                LD A,H
                OR L
                RET Z
                LD HL,FLAGS
                SET 0,(HL)
                LD HL,MTSTAT
                RES 7,(HL)
                RET

;----FUNC05----
;……•Ž„ € ‘‹…„“™ˆ‰ …‘ŸŠ
NEXTPL          LD BC,(NUMFILE)
                INC BC
                LD HL,(KOLWMP3)
                LD A,H
                OR L
                RET Z
                AND A
                SBC HL,BC
                JR NZ,NEXTPL1
                LD BC,0

;Ž™…… „‹Ÿ ……•Ž„Ž‚ Ž ”€‰‹€Œ
NEXTPL1         LD (NUMFILE),BC
                JP INIPLAY

;----FUNC01----
;……•Ž„ € …„›„“™ˆ‰ …‘ŸŠ
PREVPL          LD BC,(NUMFILE)
                LD A,B
                OR C
                JR NZ,PREVPL1
                LD BC,(KOLWMP3)
                LD A,B
                OR C
                RET Z
PREVPL1         DEC BC
                JR NEXTPL1

;----FUNC19----
;……•Ž„ € …‚›‰ ”€‰‹ ‘‹…„“™…‰ DIR
NEXTDIR         LD A,Nxtdir
                JR P_DIR

;----FUNC18----
;……•Ž„ € …‚›‰ ”€‰‹ …„›„“™…‰ DIR
PREVDIR         LD A,Prvdir
P_DIR           LD BC,(NUMFILE)
                PUSH BC
                CALL COM_FAT
                POP HL
                CP 0x80
                JP Z,SD_LOST
                AND A
                SBC HL,BC
                JR NZ,NEXTPL1
                RET

;----FUNC15----
;……ƒŽŠ€ 512 €‰’ ‘€“†ˆ € MP3
GON2MP3         LD A,Dat2mp3
                JP COM__SD

;----FUNC11----
;Ž’„€’œ ‘…Š“ „‹ˆŽ… ˆŒŸ
GET_LNG         CALL RDINBC
                BIT 7,B
                JR Z,$+6
                LD BC,(NUMFILE)
                LD HL,GETVTSH
                RES 5,(HL)
                LD HL,BUF_LNG
;               LD A,Getlong
;               CALL COM_FAT
;               CP 0x80
;               JP Z,SD_LOST
                LD E,0
                JP OUTDATA

;----FUNC0A----
;‚›Š‹/‚Š‹ ‡‚“Š€
MUTE            LD HL,0x030B
                LD A,Com_mp3
                CALL COM__SD
                LD A,E
                CP 0xFE
                JR NC,MUTEOFF
                LD (MUTEOFF+1),A
                LD HL,GETVTSH
                SET 6,(HL)
                LD E,0xFE
                JR VOL_ALL

MUTEOFF         LD E,0
                LD HL,GETVTSH
                RES 6,(HL)
                JR VOL_ALL

;----FUNC08----
;“‚…‹ˆ—…ˆ… ƒŽŒŠŽ‘’ˆ € …„ˆˆ–“
VOL_UP          LD HL,0x030B
                LD A,Com_mp3
                CALL COM__SD
                LD A,E
                AND A
                RET Z
                CP 0x80
                RET NC
                DEC E
                JR VOL_ALL

;----FUNC09----
;“Œ…œ˜…ˆ… ƒŽŒŠŽ‘’ˆ € …„ˆˆ–“
VOL_DN          LD HL,0x030B
                LD A,Com_mp3
                CALL COM__SD
                LD A,E
                CP 0x7F
                RET NC
                INC E
VOL_ALL         LD D,E
                LD HL,0x020B
                LD A,E
                LD (GETVTSL),A
                JR XB3

;----FUNC07----
;……Š‹ž—…ˆ… VIRTUAL SURROUND
XORSURR         LD B,1
XOR_ALL         PUSH BC
                LD HL,0x0300
                LD A,Com_mp3
                CALL COM__SD
                POP BC
                LD A,E
                XOR B
                LD E,A
                LD A,(GETVTSH)
                XOR B
                LD (GETVTSH),A
                BIT 3,A
                JR Z,$+4
                RES 7,E
                LD HL,0x0200
XB3             LD A,Com_mp3
                JP COM__SD

;----FUNC06----
;……Š‹ž—…ˆ… ’…ŒŽ‚
XORBASS         LD A,(GETVTSH)
                BIT 3,A
                JR NZ,XB
                LD B,0x80
                JR XOR_ALL

XB              LD A,(GETVTSH)
                XOR 0x80
                LD (GETVTSH),A

CP_XB           LD A,(GETVTSH)
                BIT 7,A
                JR Z,XB1
                LD DE,(VSTBL)
XB2             LD HL,0x0202
                JR XB3

XB1             LD HL,0x0302
                LD A,Com_mp3
                CALL COM__SD
                LD (VSTBL),DE
                LD DE,0
                JR XB2

;----FUNC0B----
;Ž‹“—ˆ’œ ‚…ŒŸ Žˆƒ›‚€ˆŸ
GETTIME         LD HL,0x0304
                LD A,Com_mp3
                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

;----FUNC1B----
;‘Ž‘ € ‘…Š ‘Ž‘’ŽŸˆ… ’…ŒŽ‚ ‚ ’…Š‘’Ž‚ŽŒ ‚ˆ„…
RUSTTBL         LD A,(GETVTSH)
                BIT 3,A
                RET Z
                LD HL,0x0302
                LD A,Com_mp3
                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

;----FUNC15----
;‘Ž‘ € ‘…Š ŠŽ‹-‚Ž €‰„…›• ”€‰‹Ž‚
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

;----FUNC16----
;‘Ž‘ € ‘…Š ŽŒ…€ ˆƒ€…ŒŽƒŽ ”€‰‹€+1
;‘ ……ƒŽŠŽ‰ ‚ ’…Š‘’Ž‚›‰ ‚ˆ„
GETDTEK         LD HL,(NUMFILE)
                INC HL
                JR GETDCHR

;----FUNC12----
;Ž’„€’œ ‘…Š“ 33 €‰’€ Žˆ‘€’…‹Ÿ ”€‰‹€
GETOPIS         CALL RDINBC
                BIT 7,B
                JR Z,$+6
                LD BC,(NUMFILE)
                LD A,Getfzap
                CALL COM_FAT
                CP 0x80
                JP Z,SD_LOST
                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

;----FUNC0E----
;“‘’€Ž‚Š€ ŽŒ…€ ”€‰‹€ „‹Ÿ ˆƒ€ˆŸ
;…‘‹ˆ … …‚›˜€…’ ŠŽ‹-‚Ž €‰„…ŽƒŽ-1
SET_NUM         CALL RDINBC
                LD HL,(KOLWMP3)
                AND A
                SBC HL,BC
                RET C
                LD (NUMFILE),BC
                RET

;—ˆ’€…Œ ‚ BC
RDINBC          CALL WDY
                IN A,(ZXDATRD)
                LD B,A
                CALL WDY
                IN A,(ZXDATRD)
                LD C,A
                RET

;----FUNC13----
;Ž’„€’œ ‘…Š“ ŠŽ‹-‚Ž €‰„…ŽƒŽ
GETKMP3         LD HL,(KOLWMP3)
                JR GET_RZN

;----FUNC0D----
;Ž’„€’œ ‘…Š“ ŽŒ… ’…Š“™…ƒŽ ”€‰‹€
GET_TEK         LD HL,(NUMFILE)
                JR GET_RZN

;----FUNC0C----
;‚ HL ‘Ž„…†ˆŒŽ… ˆ’Ž‚ “‘’€Ž‚ŽŠ
GET_VTS         LD HL,(GETVTSL)

;‘€‘›‚€…Œ ‘Ž„…†ˆŒŽ… HL € ‘…Š
GET_RZN         LD A,H
                OUT (ZXDATWR),A
                CALL WDN
                LD A,L

;‘Ž‘ˆ’œ € ‘…Š €‰’ A
GET_BYT         OUT (ZXDATWR),A

;†„…Œ ŽŠ€ ‘…Š ‡€……’ €‰’ ˆ‡ Ž’€
WDN             LD B,0
WDN1            DEC B
                RET Z
                IN A,(ZXSTAT)
                RLA
                JR C,WDN1
                RET

;†„…Œ ŽŠ€ ‘…Š „€‘’ €‰’ ‚ Ž’
WDY             IN A,(ZXSTAT)
                RLA
                JR NC,WDY
                RET

;ˆƒ€’œ € MP3-„…ŠŽ„… 1 ‘…Š’Ž
PLAYMP3         LD A,(FLAGS)
                BIT 0,A
                RET Z
                LD A,(GETVTSH)
                BIT 1,A
                RET NZ
                LD A,Nextsec
                CALL COM_FAT
                LD H,A
                EX AF,AF'
                LD A,H
                CP 0x80
                JP Z,SD_LOST
                EX AF,AF'

                RET NZ                          ;”€‰‹Ž … ŠŽ—ˆ‹Ž‘œ, ‚›•Ž„ˆŒ
                LD A,Zer2mp3
                CALL COM__SD
                JP NEXTPL                       ;”€‰‹ ŠŽ—ˆ‹‘Ÿ, ‡€‚…˜€…Œ “‹ŸŒˆ
                                                ;ˆ ……•Ž„ˆŒ € ‘‹…„“ž™ˆ‰ ”€‰‹

;Ž’Š›’ˆ… ”€‰‹€ ˆ ˆˆ’ „…ŠŽ„…€
INIPLAY         PUSH BC
                CALL MOD_OFF
                CALL SRESMP3                    ;‘Ž‘ —ˆ€ ‚ ‡€‚ˆ‘ˆŒŽ‘’ˆ Ž’ “‘’€Ž‚ŽŠ
                LD HL,(GETVTSL)
                BIT 4,H                         ;…‘‹ˆ ‘Ž‘ =HARD, ’Ž Ž“‹Ÿ…Œ ‚‘…
                                                ;ŠŽŒ… ˆ’€ “‘’€Ž‚‹…ŽƒŽ MP3 —ˆ€
                                                ;ˆ ’ˆ€ ‘Ž‘€ ’ŽƒŽ —ˆ€
                JR Z,INIPLA1
                LD L,0
                LD A,H
                AND %00011000
                LD H,A
INIPLA1         SET 5,H                         ;‚Š‹ž—€…Œ ˆ’ 5, Ž˜Ž‹ Ž‚›‰ ”€‰‹
                POP BC
                PUSH BC
                PUSH HL
                LD A,Openfil
                CALL COM_FAT                    ;Ž’Š›‚€…Œ Ž‚›‰ ”€‰‹
                CP 0x80
                JP Z,SD_LOST
                AND 2
                LD E,A
                POP HL
                LD A,H
                AND %11111101
                OR E
                LD H,A                          ;ˆ’ 1=1-MOD, =0-MP3
                LD (GETVTSL),HL
                BIT 1,H
                LD E,FREQ20                     ;20Œƒ– „‹Ÿ ˆƒ€ˆŸ MOD
                JR NZ,INIPLA2
                LD E,FREQ12                     ;12Œƒ– „‹Ÿ ˆƒ€ˆŸ MP3
INIPLA2         LD A,Freqnc
                CALL COM__SD
                LD HL,FLAGS
                RES 2,(HL)
                SET 1,(HL)
                LD HL,0x0400
                LD (TIMEOUT),HL
                POP BC
                LD HL,BUF_LNG
                LD A,Getlong
                CALL COM_FAT                    ;—’…ˆ… ‚ “”… „‹ˆŽƒŽ ˆŒ…ˆ ”€‰‹€
MOD_OFF         XOR A
                OUT (VOL1),A
                OUT (VOL2),A
                OUT (VOL3),A
                OUT (VOL4),A
                OUT (VOL5),A
                OUT (VOL6),A
                OUT (VOL7),A
                OUT (VOL8),A
                OUT (VOL8),A
                RET

SD_LOST         LD SP,ISTACK
                LD HL,FLAGS
                SET 7,(HL)
                CALL PAUSEPL
                JP CON_MOD

CMP_INT         PUSH AF
                LD A,R
                JP PE,CMP_INT1
                LD A,R
CMP_INT1        LD A,0
                JP PO,CMP_INT2
                LD A,1
CMP_INT2        LD (INT_MODE),A
                POP AF
                RET

COM__SD         include "sd4ngs.a80"            ;„€‰‚… SD Š€’›
COM_FAT         include "fat4ngs.a80"           ;„€‰‚… FAT

SET7XOR         PUSH HL
                LD HL,0
                ADD HL,SP
                EXX
                LD A,0x10
                LD SP,0x7F00
                LD BC,0xA97E
                LD DE,0x2C77
SPEDI1          REPT 16
                PUSH DE
                PUSH BC
                ENDM
                DEC A
                JP NZ,SPEDI1
                LD HL,SPEDI2
                LD DE,0x7F00
                LD BC,ESPEDI2-SPEDI2
                LDIR
                EXX
                LD SP,HL
                POP HL
                LD A,L
                EXX
                LD L,A
                LD H,0
                LD BC,0x7B00
                ADD HL,HL
                ADD HL,HL
                ADD HL,BC
                LD (KUDAXOR),HL
                EXX
                LD A,(SIZ_MOD)
                LD B,A
                LD C,0x80
                RET

SPEDI2          INC H
                JP NZ,0x7B00
                INC E
                LD A,(DE)
                LD H,0x80
                OUT (MPAG),A
                DEC B
                JP NZ,0x7B00
                LD A,(PG_PLAYER)
                OUT (MPAG),A
                JP END7XOR
ESPEDI2

SPEDI3          LD A,(PG_PLAYER)
                OUT (MPAG),A
                CALL SET7XOR
                LD A,(DE)
                PUSH HL
                OUT (MPAG),A
                LD HL,(KUDAXOR)
                EX (SP),HL
                RET

END7XOR         EXX
                LD HL,0
                ADD HL,SP
                LD SP,0x8000
                LD DE,0x8080
                LD B,0x40
E7X1            REPT 64
                PUSH DE
                ENDM
                DJNZ E7X1
                LD SP,HL
                EXX
                JP ESPEED

PATCH           LD A,(NUMPG)
                OR 0x3F
                LD (PG_PLAYER),A        ;‘’€ˆ–€ €‘Ž‹Ž†…ˆŸ ‹……€
                IN A,(GSCFG0)
                RES B_RAMRO,A
                SET B_EXPAG,A
                OUT (GSCFG0),A
                LD A,0x80
                OUT (MPAGEX),A
                LD HL,SPEDI3
                LD DE,ADDA80
                LD BC,END7XOR-SPEDI3
                LDIR
                LD HL,FXB01
                LD (HL),0xCD
                INC HL
                LD (HL),LOW (NXTMOD)
                INC HL
                LD (HL),HIGH (NXTMOD)
                LD HL,0x11D6
                LD (HL),0xCD
                INC HL
                LD (HL),LOW (NXTMODR)
                INC HL
                LD (HL),HIGH (NXTMODR)
                INC HL
                EX DE,HL
                LD HL,0x11E3
                AND A
                SBC HL,DE
                LD B,H
                LD C,L
                LD H,D
                LD L,E
                LD (HL),B
                INC DE
                LDIR                            ;‡€—ˆ‘’Š€ •‚Ž‘’Ž‚ ‚ ‡“
                LD HL,TEKADR1
                LD DE,EMPTY2
                LD BC,P_END-LD_MOD
                LDIR                            ;……Ž‘ ‡€ƒ“‡—ˆŠ€ ˆ Ž€Ž’—ˆŠ€
                                                ;ŽŠŽ—€ˆŸ Žˆƒ›‚€…ŒŽƒŽ ”€‰‹€
                LD HL,P_START
                LD DE,EMPTY1
                LD BC,P__END-P_00
                LDIR                            ;……Ž‘ “€‚‹…ˆŸ MP3 ‹……ŽŒ ‚ ‡“
                LD HL,(NUMPG)
                LD H,0x40
                DEC L
                LD (HL),1
                INC L
                LD (HL),0                       ;Ž’“€ˆ… Ž‘‹…„…‰ ‘’€ˆ–› Ž‡“
                                                ;Ž’ Ž‘Ž‚ŽƒŽ ‘ˆ‘Š€ ‘’€ˆ–
                LD HL,NUMPG
                DEC (HL)
                LD HL,P_00
                LD (0x0300+(0x1F*2)),HL         ;€’— ŠŽŒ€„› 1F
                LD HL,COMMFF
                LD (0x0300+(0x2F*2)),HL         ;€’— ŠŽŒ€„› FF
                IN A,(GSCFG0)
                SET B_RAMRO,A
                RES B_EXPAG,A
                OUT (GSCFG0),A
                LD A,(PG_PLAYER)
                OUT (MPAG),A

;‘Ž‡„€ˆ… ‘ˆ‘Š€ Œ€‹›• ‘’€ˆ– „‹Ÿ ‡€ƒ“‡—ˆŠ€ ”€‰‹€ ‚ €ŒŸ’œ
LISTPAG         LD HL,0x4000
                LD DE,BUF_PAG
LSTPAG1         LD A,(HL)
                ADD A,A
                RRCA
                LD (DE),A
                RLCA
                INC DE
                INC A
                RRCA
                LD (DE),A
                INC DE
                INC HL
                LD A,(HL)
                DEC A
                JR NZ,LSTPAG1
                RET

TEKADR1
                PHASE EMPTY2

;ƒ“‡ˆ‹Š€ ”€‰‹€ ‚ €ŒŸ’œ NEOGS
LD_MOD          IN A,(GSCFG0)
                AND 0xCF
                OUT (GSCFG0),A
                LD HL,FLAGS
                SET 2,(HL)
                CALL MOD_OFF
                LD A,Loadfil
                CALL COM_FAT
                CP 0x80
                JP Z,SD_LOST
                LD (SIZ_MOD),A
                LD A,(CPAGE)
                OUT (MPAG),A
                LD A,1
                LD (CNTMOD),A
                LD (CURMOD),A
                CALL LDMOD
                LD A,(MTSNGSZ)
                LD (SIZ_PAT),A
                LD BC,0x0100
                CALL PLAYMOD
                IN A,(GSCFG0)
                OR 0x10
                OUT (GSCFG0),A
                RET

ESPEED          XOR A
                LD (CPAGE),A
                OUT (MPAG),A
                RET

NXTMOD          LD HL,MTSNGPS
                INC (HL)
                CP (HL)
                JP C,NXTMOD1
                LD (MTSNGPS),A
                RET

NXTMODR         LD A,(PG_PLAYER)
                OUT (MPAG),A
                CALL NEXTPL
                LD A,(GETVTSH)
                BIT 1,A
                JP NZ,LD_MOD
                POP HL
                JP OPROS

COMMFF          IN A,(ZXDATRD)
                ADD A,LOW (FLAGS)
                LD IYL,A
                LD A,HIGH (FLAGS)
                ADC A,0
                LD IYH,A
                LD A,(IY+0)
                OUT (ZXDATWR),A
                OUT (CLRCBIT),A
                JP COMINT_
P_END
                DEPHASE
P_START
                PHASE EMPTY1

;Ž‘Ž‚Ž‰ –ˆŠ‹ Ž™…ˆŸ ‘Ž ‘…ŠŽŒ
P_00            JP OPROS3

NXTMOD1         LD A,(PG_PLAYER)
                OUT (MPAG),A
                CALL NEXTPL
;Ž„Ž‹†ˆ’œ ˆƒ€’œ MOD
CON_MOD         LD A,(GETVTSH)
                BIT 1,A
                JR Z,OPROS
                LD A,(FLAGS)
                BIT 0,A
                JR Z,CONROM
                BIT 2,A
                CALL Z,LD_MOD
CONROM          LD A,(CPAGE)
                OUT (MPAG),A
                JP COMINT

OPROS           IN A,(ZXSTAT)
                RRA
                JR C,OPROS1
                CALL PLAYMP3
                JR OPROS

OPROS1          IN A,(ZXCMD)
                CP 0x1F
                JR NZ,CONROM
OPROS3          IN A,(ZXDATRD)
                OUT (CLRCBIT),A
                AND A
                JR Z,OPROS2
                LD H,A
                LD A,(REJIMGS)
                CP 0x78
                JR NC,OPROS
                LD A,H
OPROS2          CP LOW (END_TAB-TABFUNC)/2+1
                JR NC,OPROS
                LD HL,CON_MOD
                PUSH HL
                ADD A,A
                ADD A,LOW (TABFUNC)
                LD L,A
                LD A,HIGH (TABFUNC)
                ADC A,0
                LD H,A
                LD A,(PG_PLAYER)
                OUT (MPAG),A
                LD A,(HL)
                INC HL
                LD H,(HL)
                LD L,A
                JP (HL)
P__END
                DEPHASE

                DUPL 0x100-LOW ($),0

BUF_LNG         EQU $                           ;0x100 “”… „‹Ÿ ……ŠŽ„. „‹ˆŽƒŽ ˆŒ…ˆ
BUFTDIR         EQU BUF_LNG+0x100               ;0x100 “”… ˆŒ…ˆ ’…Š“™…‰ DIR
BUF_PAG         EQU BUFTDIR+0x100               ;0x80 ’€‹ˆ–€ €‘˜ˆ…›• ‘’€ˆ–
B512BAS         EQU BUF_PAG+0x100