WAV-Player/WAVPLAY.ASM
Anatoliy Belyanskiy 5d4dd9dba9 Setup
2023-06-15 17:40:21 +10:00

1609 lines
21 KiB
NASM
Raw Permalink Blame History

DEFINE WAVPLunknown 1
DEFINE SND_Abug 0
DEFINE OutOfPageBugFix 0
MACRO NEXT_SEC
LD BC,P_S_NUM-256
IN A,(C)
INC A
; LD BC,P_S_NUM
INC B
OUT (C),A
JR NZ,.NO_NEXT
LD BC,P_C_LOW-256
IN E,(C)
LD BC,P_C_HIG-256
IN D,(C)
INC DE
LD BC,P_C_LOW
OUT (C),E
LD BC,P_C_HIG
OUT (C),D
.NO_NEXT:
ENDM
MACRO WAIT_HDD
.LOCS1:
; LD BC,P_HDST
IN E,(C)
BIT 7,E
JR NZ,.LOCS1
BIT 3,E
JP Z,END_READ1
ENDM
INCLUDE 'shared_includes/constants/sp2000.inc'
INCLUDE 'Shared_Includes/constants/dss_equ.inc'
INCLUDE 'shared_includes/macroses/accelerator.z80'
ORG #8100-EXE_HEADER.Size
;************************************
EXE_HEADER:
BYTE 'EXE'
BYTE 0 ; MY VERSION
DWORD EXE_HEADER.Size ; START CODE IN FILE
WORD Loader_length ; LEN START LOAD DATA
WORD 0,0,0 ; RESERV
WORD START ; ADRESS IN MEM
WORD START ; START ADRESS
WORD #BFFE ; STACK ADRESS
;DS 490
.Size EQU $-EXE_HEADER
START: PUSH IX
LD A,(IX-3) ;this file handle
LD (FILE_HANDLE),A
LD HL,START_MSG
LD C,#5C
RST #10 ; Start Message
LD C,#50
LD B,0
LD A,#81
RST #10 ; OPEN_GRAF_SCR
DI
LD C,#A6 ; set GRAF_PAL
LD B,1
LD A,0 ;GRAPHIC_SCREEN
RST 8
EI
IN A,(SLOT3)
EX AF,AF'
LD A,#50
OUT (SLOT3),A
ACC_SetBlockSize
LD A,0
ACC_Off
OUT (PORT_Y),A
LD HL,#C13F
LD DE,#C13E
LD BC,319
ACC_FillScreenOneByte
LD (HL),A
LDDR
ACC_Off
EX AF,AF'
OUT (SLOT3),A
; ================[ <20>Ž„ƒŽ<C692>Š€ ]================; !TODO
IF WAVPLunknown
LD HL,#B000 ; clear mem_part
LD DE,#B001
LD BC,#DFF
LD (HL),L
LDIR
ENDIF
;================[----------]================;
;*******************************
;!TEST
; LD HL,FACE_FILE
; LD A,1
; LD C,#11
; RST #10 ; Open FACE 䨫¥
; JP C,NO_FACE ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
; LD (FILE_HANDLE),A
LD A,(FILE_HANDLE)
LD HL,0
LD IX,PIC_MAIN.Size
LD BC,Dss.Move_FP.FrEnd * 256 + Dss.Move_FP
;!TEST
LD HL,#B400
LD DE,#36
LD C,#13
LD A,(FILE_HANDLE)
RST #10 ; READ Head
; LD HL,0B436h ; Set All PAL=0
; LD DE,0B437h
; LD (HL),0
; LD BC,3FFh
; LDIR
LD HL,(#B42E) ; ç¨á«® 梥⮢
LD A,L
LD (PALS_N),A ; ç¨á«® 梥⮢
ADD HL,HL
ADD HL,HL
LD D,H
LD E,L
LD HL,#B436
LD C,#13
LD A,(FILE_HANDLE)
RST #10 ; READ PAL
; LD HL,0B832h ; 梥â FF - ¡¥«ë©
; LD (HL),0FFh
; INC L
; LD (HL),0FFh
; INC L
; LD (HL),0FFh
LD HL,#B836
LD DE,#B837
LD BC,#400
LD (HL),0
LDIR
LD HL,#B836
CALL SET_PAL_
LD B,8
LD C,#9E ; line for FACE
LOOP_FACE:
PUSH BC
LD HL,#9000
LD DE,#1400 ; ¯® 5k
LD C,#13
LD A,(FILE_HANDLE)
RST #10 ; READ File
POP BC
PUSH BC ; ¢á¯®¬­¨âì C - Line
IN A,(SLOT3)
PUSH AF
IN A,(PORT_Y)
PUSH AF
LD HL,#9000
LD A,#50
OUT (SLOT3),A
LD A,C
OUT (PORT_Y),A
LD A,#10
NEXT_LINE_:
EX AF,AF'
LD DE,#C000
LD BC,#140
LDIR
IN A,(PORT_Y)
DEC A ; BMP lines up!
OUT (PORT_Y),A
EX AF,AF'
DEC A
JR NZ,NEXT_LINE_
POP AF
OUT (PORT_Y),A
POP AF
OUT (SLOT3),A
POP BC
EX AF,AF' ; AF'=(PORT_Y)
LD C,A ; Line
DJNZ LOOP_FACE
CALL CLOSE_FILE
CALL OFF_IND
LD HL,#B436
LD DE,#B836
LD C,4
LD B,0
LOOP_P:
LD A,(HL)
RRA
RRA
AND #3F
LD (DE),A
INC HL
INC DE
DJNZ LOOP_P
DEC C
JR NZ,LOOP_P
LD HL,#B836
CALL SET_PAL_
LD B,2
PAUS1:
EI
HALT
DJNZ PAUS1
LD HL,#B436
LD DE,#B836
LD C,4
LD B,0
LOOP_P2:
LD A,(HL)
RRA
AND #7F
LD (DE),A
INC HL
INC DE
DJNZ LOOP_P2
DEC C
JR NZ,LOOP_P2
LD HL,#B836
CALL SET_PAL_
LD B,2
PAUS2:
EI
HALT
DJNZ PAUS2
LD HL,#B436 ; Pal adress
CALL SET_PAL_
JR FACE_OK
NO_FACE:
DI
LD C,#A6 ; set GRAF_PAL
LD B,1
LD A,0
RST 8
EI
FACE_OK:
POP HL ; ¢á¯®¬­¨âì ª®¬ ­¤­ãî áâபã
INC HL
INC HL
LD (SAV_SP),SP
PLAY_ALL:
CALL TEST_SWITCH
; HL - name
CALL READ_FILE ; ç⥭¨¥ ä ©«  (á­ ç « !)
JP C,ERROR
LD DE,PLAY_LIST_ID
LD B,8
LD HL,#C000
CALL LINE_COMP
JP NZ,PLAY_WAVE
LD SP,(SAV_SP) ; STOP RECURSE
LD HL,#C100
CALL READ_MORE ; ¯à®ç¨â âì ¥é¥
LD HL,#C00A ; ¤ ­­ë¥ PLAYLIST
LD DE,#9000 ; files
LOOP_WPL:
PUSH DE
CALL EXTR_LINE ; ¯®¨áª áâப¨ ¨ ¯¥à¥­¥á¥­¨¥ ¢ DE
XOR A
LD (DE),A ; § ª®­ç¨âì áâப㠭㫥¬
INC HL
INC HL
LD A,B
AND A
JR Z,END_WPL
POP DE
LD A,E
ADD A,#40
LD E,A
LD A,D
ADC A,0
LD D,A
CP #97 ; ¤® 60 ä ©«®¢
JR NZ,LOOP_WPL
PUSH DE
END_WPL:
POP HL
ADD HL,HL
ADD HL,HL
LD A,H
AND #3F
LD (NUM_FILES),A
INC A
LD (NUM_MAX),A
LD HL,#9000
LOOP_WPL_ALL:
LD A,(NUM_FILES)
AND A
JR Z,STOP_ALL
PUSH HL
CALL PLAY_ALL ; RECURSE!!!!
POP HL
LD A,(KEY_)
CP 118
JR Z,STOP_ALL
CP 107
JR NZ,NEXT_SOU
PREV_SOU:
LD BC,-#40
ADD HL,BC
XOR A
LD (KEY_),A ; for none-repeat prev
LD A,(NUM_FILES)
INC A
LD (NUM_FILES),A
LD C,A
LD A,(NUM_MAX)
CP C
JR NZ,LOOP_WPL_ALL
NEXT_SOU:
LD BC,#40
ADD HL,BC
LD A,(NUM_FILES)
DEC A
LD (NUM_FILES),A
JR LOOP_WPL_ALL
STOP_ALL:
LD SP,(SAV_SP) ; STOP RECURSE
RET
TEST_SWITCH:
PUSH HL
LD A,1
LD (DOS_FLAG1),A
NEXT_SYM:
LD A,(HL)
INC HL
AND A
JR Z,END_SWITCH
CP ' '
JR NZ,NEXT_SYM
LD A,(HL)
OR ' '
CP 'h'
JR NZ,END_SWITCH
LD A,0
LD (DOS_FLAG1),A
END_SWITCH:
POP HL
RET
;*************************************
PLAY_WAVE:
LD DE,LINES
LD HL,#C000
LD B,4
CALL LINE_COMP
JR NZ,ERROR2
LD HL,#C008
LD B,8
CALL LINE_COMP
JR NZ,ERROR2
LD A,#80
LD (D_FILL),A ; FILL by 80h
LD A,0
LD (ADD_PAR),A
LD A,(#C022)
LD (FLAG16),A
CP 8
LD B,#80+#10 ; CBL-mode8 & INT ENABLE
JR Z,NEXT_1
CP 16
LD B,#80+#20+#10; CBL-mode16 & INT ENABLE
LD A,0
LD (D_FILL),A ; FILL by 0
LD A,#80
LD (ADD_PAR),A
JR Z,NEXT_1
JR ERROR2 ; format error
ERROR:
CALL RESTORE_SCR
LD HL,ERROR_MSG
LD C,5Ch
RST 10h
LD B,DSS_Error.sys.FILE_NOT_FOUND
RET
ERROR2:
CALL RESTORE_SCR
LD HL,ERROR_MSG2
LD C,#5C
RST #10
CALL CLOSE_FILE
LD B,DSS_Error.sys.UNKNOWN_FORMAT
RET
ERROR3:
CALL RESTORE_SCR
LD HL,ERROR_MSG3
LD C,#5C
RST #10
CALL CLOSE_FILE
LD B,DSS_Error.sys.GENERAL_FAILURE
RET
RESTORE_SCR:
LD C,#50
LD B,0
LD A,#03
JP #10 ; OPEN_TXT_SCR
NEXT_1:
LD A,(#C016)
CP 1
JR Z,NEXT_2
CP 2
SET 6,B ; set stereo-mode
JR NZ,ERROR2
NEXT_2:
LD A,B
LD (CBL_MODE),A
LD BC,(0C018h) ; ç áâ®â 
LD HL,7000
LD DE,9000
CALL Test_DIAP
LD A,8 ; 8khz
JR Z,NEXT_3
LD HL,10000
LD DE,12000
CALL Test_DIAP
LD A,9 ; 11khz
JR Z,NEXT_3
LD HL,15000
LD DE,17000
CALL Test_DIAP
LD A,10 ; 16khz
JR Z,NEXT_3
LD HL,21000
LD DE,23000
CALL Test_DIAP
LD A,11 ; 22khz
JR Z,NEXT_3
LD HL,30000
LD DE,34000
CALL Test_DIAP
LD A,12 ; 32khz
JR Z,NEXT_3
LD HL,42000
LD DE,46000
CALL Test_DIAP
LD A,13 ; 44khz
; LD A,15 ; 109khz
JR Z,NEXT_3
; LD HL,50000
; LD DE,60000
; CALL Test_DIAP
; EX AF,AF'
; LD A,14 ; 54khz
; EX AF,AF'
; JR Z,NEXT_3
JP ERROR3
NEXT_3:
LD (FRQ_),A ; ç áâ®â  8..13
LD C,A
LD A,(CBL_MODE)
ADD A,C
LD (CBL_MODE),A
PLAY_FILE:
CALL FRQ_ON
LD HL,#C024
FIND_DATA:
PUSH HL
LD DE,LINES_DATA
LD B,4
CALL LINE_COMP
POP HL
JR Z,DATA_1
INC L
JR NZ,FIND_DATA
JP ERROR2
DATA_1:
INC HL
INC HL
INC HL
INC HL
INC HL ; only by 256 bytes
LD DE,LENGTH_DATA
LD BC,3
LDIR ; COPY LEN of DATA
IF SND_Abug
LD (SND_A),HL ; Adress of data
ENDIF
IN A,(SLOT3)
LD (SAV_PAGE3),A
LD A,#FD ; ᯥæ-áâà ­¨æ !
LD (PLAY_PAGE),A
;*********************************************
LD A,(PLAY_PAGE)
OUT (SLOT3),A
LD A,16 ; ç¨á«® ᥪâ®à®¢ - ¯à¨§­ ª ª®­æ  ¤ ­­ëå
LD (NUM_SEC+1),A
LD HL,#C000
;
; ================[ <20>Ž„ƒŽ<C692>Š€ ]================; !TODO
IF WAVPLunknown
LD DE,0
ENDIF
;================[----------]================;
;
CALL READ_FILE_X1
LD A,0
LD BC,#4E
OUT (C),A
LD BC,#4F
LD A,#80
FILL_L0:
OUT (C),A ; § ¡¨âì ¢® ¢á¥ 80h
DJNZ FILL_L0
LD HL,0A000h ; CLEAR PAGE_IM2
LD DE,0A001h
LD BC,100h
LD (HL),0
LDIR
DI
LD DE,PLAY
LD (0A0FFh),DE ; IM2_ADRESS
LD A,0A0h
LD I,A
IM 2
LD A,(CBL_MODE)
LD BC,#4E
OUT (C),A
EI
LD A,(MAX_)
ADD A,60h
RRCA
AND 7Fh
LD (MAX_),A
;***************************************
; MAIN play LOOP
;***************************************
LOOP:
CALL INKEY
JR Z,NO_KEY1
CP 118 ; ESC
JP Z,EXIT_ALL ; exit
CP 107 ; Left arrow
JP Z,EXIT_ALL ; next_sound
CP 116 ; Right arrow
JP Z,EXIT_ALL ; next_sound
CP 41 ; Space
CALL Z,PAUSE_KEY
CP 5 ; F1
CALL Z,HELP_OUT
NO_KEY1:
LD A,(SND_A+1)
CP 0DFh
JR NC,LOOP
LD A,1
LD (HDD_CNT),A
LD HL,0E000h
;
; ================[ <20>Ž„ƒŽ<C692>Š€ ]================; !TODO
IF WAVPLunknown
LD DE,1
ENDIF
;================[----------]================;
;
CALL READ_FILE_X
JP NZ,EXIT_ALL
CALL HDD_IND
LD A,(MAX_)
ADD A,60h
RRCA
AND 7Fh
LD (MAX_),A
LOOP2:
CALL INKEY
JR Z,NO_KEY2
CP 118
JP Z,EXIT_ALL
CP 107 ; Left
JP Z,EXIT_ALL
CP 116 ; Right
JP Z,EXIT_ALL
CP 41
CALL Z,PAUSE_KEY
CP 5
CALL Z,HELP_OUT
NO_KEY2:
LD A,(SND_A+1)
CP 0DFh
JR C,LOOP2
LD A,1
LD (HDD_CNT),A
LD HL,#C000
;
; ================[ <20>Ž„ƒŽ<C692>Š€ ]================; !TODO
IF WAVPLunknown
LD DE,1
ENDIF
;================[----------]================;
;
CALL READ_FILE_X
JP NZ,EXIT_ALL
CALL HDD_IND
LD A,60h
LD (MAX_),A
; ================[ <20>Ž„ƒŽ<C692>Š€ ]================; !TODO
IF WAVPLunknown
JP LOOP
ELSE
JR LOOP
ENDIF
;================[----------]================;
;***********************************
HDD_IND:
IN A,(SLOT3)
PUSH AF
IN A,(PORT_Y)
PUSH AF
DI
LD A,#50
OUT (SLOT3),A
ACC_SetBlockSize
LD A,#20 ; § ¡¨âì ¢¥áì ¨­¤¨ª â®à
ACC_Off
SH_HDD EQU 5Ah ; ¯®«®¦¥­¨¥ ¨­¤¨ª â®à  HDD ¢¥àâ.
LD HL,#C0DF ; ¯®«®¦¥­¨¥ ¨­¤¨ª â®à  HDD £®à.
LD A,SH_HDD
OUT (PORT_Y),A
; LD A,0Eh ; 梥⠯ ­¥«¨ (ᨭ¨©)
LD A,3 ; 梥⠯ ­¥«¨ (ªà á­ë©)
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,5 ; §¥«¥­ë©
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,SH_HDD
OUT (PORT_Y),A
INC HL
LD A,3 ; 梥⠯ ­¥«¨ (ªà á­ë©)
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,5 ; §¥«¥­ë©
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,(HDD_CNT)
CP #3E
LD B,#1D
JR C,NO_
LD B,#1D
COLOR_B EQU $-1
LD A,(COLOR_B)
XOR #1E
LD (COLOR_B),A
LD A,#3E
NO_:
LD DE,HDD_S
ACC_SetBlockSize
LD (DE),A
ACC_Off
NEG
ADD A,SH_HDD+#40
LD C,A
OUT (PORT_Y),A
LD A,B
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,C
OUT (PORT_Y),A
DEC HL
LD A,B
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD HL,#C0E7
LD A,SH_HDD
OUT (PORT_Y),A
ACC_SetBlockSize
LD A,#10 ; § ¡¨âì ¢¥áì ¨­¤¨ª â®à
ACC_Off
; LD A,0Eh ; 梥⠯ ­¥«¨ (ᨭ¨©)
LD A,3 ; 梥⠯ ­¥«¨ ªà á­ë©! (¦¥«âë©?)
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,1 ; §¥«¥­ë©
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
ACC_SetBlockSize
LD A,#20 ; § ¡¨âì ¢¥áì ¨­¤¨ª â®à
ACC_Off
LD A,5
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,SH_HDD
OUT (PORT_Y),A
INC HL
ACC_SetBlockSize
LD A,#10 ; § ¡¨âì ¢¥áì ¨­¤¨ª â®à
ACC_Off
; LD A,0Eh ; 梥⠯ ­¥«¨ (ᨭ¨©)
LD A,3 ; 梥⠯ ­¥«¨ ªà á­ë©! (¦¥«âë©?)
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,1 ; §¥«¥­ë©
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
ACC_SetBlockSize
LD A,#20 ; § ¡¨âì ¢¥áì ¨­¤¨ª â®à
ACC_Off
LD A,5
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD B,#1D
LD A,(MAX_)
SUB #60
ADD A,A
AND #3F
INC A
ACC_SetBlockSize
LD (DE),A
ACC_Off
NEG
ADD A,SH_HDD+#40
LD C,A
OUT (PORT_Y),A
LD A,B
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
LD A,C
OUT (PORT_Y),A
DEC HL
LD A,B
ACC_FillScreenOneByte
LD (HL),A
ACC_Off
EI
POP AF
OUT (PORT_Y),A
POP AF
OUT (SLOT3),A
RET
HDD_S: db 0
HDD_CNT: db 0
PAUSE_KEY:
DI
LD BC,#4E
LD A,0
OUT (C),A ; stop Audio
LD A,#80
LD C,#4F
OUT (C),A ; COVOX=80h
CALL PAUSE_KEY1
LD A,(CBL_MODE) ; PLAY MORE
LD BC,#4E
OUT (C),A
EI
XOR A
RET
PAUSE_KEY1:
CALL INKEY
JR Z,PAUSE_KEY1
CP 118 ; ESC
RET Z
; CP 117 ; UP
CP 90 ; Enter
RET Z
JR PAUSE_KEY1
INKEY:
IN A,(Z84.SIO.Ch_A.Ctrl)
BIT 0,A
RET Z
IN A,(Z84.SIO.Ch_A.Data)
CP #F0
JR Z,KEY_OFF1
LD (KEY_),A
LD A,(NO_KEY)
AND A
LD A,(KEY_)
RET NZ
LD (NO_KEY),A ;
RET
KEY_OFF1:
XOR A
LD (NO_KEY),A
LD (KEY_),A
RET
NO_KEY: db #FF
;KEY_OFF: ; ¯à®¯ãáâ¨âì ®¤¨­ ª®¤
; IN A,(Z84.SIO.Ch_A.Ctrl)
; BIT 0,A
; JR Z,KEY_OFF
; IN A,(Z84.SIO.Ch_A.Data)
; RET
EXIT_ALL:
IM 1
LD A,0
LD BC,#4E
OUT (C),A
LD BC,#4F
LD A,#80
FILL_L1:
OUT (C),A ; § ¡¨âì ¢® ¢á¥ 80h
DJNZ FILL_L1
LD A,(SAV_PAGE3)
OUT (SLOT3),A
CALL CLOSE_FILE
; LD C,50h ; OPEN_TEXT_SCR
; LD B,1
; LD A,3h
; RST 10h
RET
SAV_PAGE3: db 0
;*************************************
PLAY:
DI
PUSH AF
IN A,(0FEh)
RLCA
JP NC,NO_SND
PUSH HL
PUSH DE
PUSH BC
LD A,(HDD_CNT)
INC A
LD (HDD_CNT),A
; LD A,7
; OUT (0FEh),A
IN A,(SLOT3)
LD E,A
IN A,(SLOT0)
LD D,A
PUSH DE
LD A,#FD
PLAY_PAGE EQU $-1 ; !FIXIT § ç¥¬, ¥á«¨ ¬®¦­® ­ ¯àï¬ãî ¡ë«® ¯à®¯¨á âì?
OUT (SLOT3),A
OUT (SLOT0),A
CALL VISIO
;****************
SND_A+1: LD HL,#C000
LD B,0
ACC_SetBlockSize
LD C,128 ; 128 bytes
ACC_Off
LD A,(FLAG16) ; 8/16
; AND 18h
L_DDX:
ACC_CopyBlock ;  áá-lines read & write to CBL
LD D,(HL)
LD (HL),D
ACC_Off
ADD HL,BC ; BC=80h
SUB 8
JR NZ,L_DDX
LD A,H
OR #C0
LD H,A
;========================[ BUG FIX ]========================;
IF OutOfPageBugFix
ex de,hl
ld hl,#100
adc hl,de
ex de,hl
jr nc,1F
ld hl,#C02C
ENDIF
;===========================================================;
1: LD (SND_A),HL
;****************
POP DE
LD A,D
OUT (SLOT0),A
LD A,E
OUT (SLOT3),A
POP BC
POP DE
POP HL
; LD A,0
; OUT (0FEh),A
NO_SND:
POP AF
EI
RETI
;***********************************
VISIO: IN A,(PORT_Y)
PUSH AF
LD A,(SND_A+1)
ADD A,A
; ADD A,A
AND #7F
LD L,A
LD H,#B0
LD BC,7
ADD HL,BC
LD BC,(SND_A)
LD A,(BC)
RRA
CPL
AND #7F
ADD A,#40
LD (COLOR_),A
INC BC
LD A,(BC) ; new
ADD_PAR+1: ADD A,0 ; parameter for 8/16 bit
RRA
RRA
AND #3F
ADD A,#40 ; Vertical Shift
LD (NEW_),A
LD B,A
LD A,(MAX_)
CP B
JR NC,NO_MAX
LD A,B
LD (MAX_),A
NO_MAX:
LD A,#50
OUT (SLOT3),A
LD A,(HL) ; old
LD (OLD_),A
LD A,(NEW_)
LD (HL),A
OLD_+1: LD A,0
OUT (PORT_Y),A ; old
LD A,H
ADD A,#10
LD H,A
LD A,0 ; clear
LD (HL),A
INC L
LD (HL),A
; INC L
; LD (HL),A
; INC L
; LD (HL),A ; áâ¥à¥âì
NEW_+1: LD A,0
OUT (PORT_Y),A ; new
COLOR_+1: LD A,#FF
LD (HL),A
DEC L
LD (HL),A
; DEC L
; LD (HL),A
; DEC L
; LD (HL),A ; ­ à¨á®¢ âì ­®¢®¥
LD A,(PLAY_PAGE)
OUT (SLOT3),A
POP AF
OUT (PORT_Y),A
RET
;*************************************
FRQ_ON:
CALL OFF_IND
LD A,(FRQ_)
SUB 4
CALL SET_COL
LD A,(FLAG16)
CP 8
LD A,0 ; § ¦¥çì 8bit
JR Z,LLL1
LD A,1 ; § ¦¥çì 16 bit
LLL1: CALL SET_COL
LD A,(CBL_MODE)
BIT 6,A
LD A,2
JR Z,LLL2
LD A,3
LLL2: CALL SET_COL
LD HL,#B436
CALL SET_PAL_
RET
SET_COL:
LD C,A
LD B,0
LD HL,TAB_COL
ADD HL,BC
LD A,(HL)
ADD A,A
ADD A,A
LD C,A
LD HL,#B436
ADD HL,BC
LD (HL),#C0
INC HL
LD (HL),#F5
INC HL
LD (HL),#F5
RET
OFF_IND:
LD DE,TAB_COL
NEXT_COL:
LD HL,#B436
LD A,(DE)
ADD A,A
ADD A,A
LD C,A
LD B,0
ADD HL,BC
LD (HL),#F5
INC HL
LD (HL),#80
INC HL
LD (HL),0
INC DE
LD A,(DE)
AND A
JR NZ,NEXT_COL
; CALL SET_PAL_
RET
TAB_COL:
db 9,8 ; æ¢¥â  8/16
db 12,15 ; æ¢¥â  ¬®­®/áâ¥à¥®
db 19,22,20,13,11,10,0 ; æ¢¥â  8/11/16/22/32/44khz
SET_PAL_:
LD B,#FF
SET_PAL_1:
DI
PALS_N+2: LD DE,0
LD C,#A4
LD A,0
RST 8h ; set Pal
EI
RET
;********************************************
Test_DIAP: ; ¯à®¢¥àª  ¯®¯ ¤ ­¨ï BC ¢ ¤¨ ¯ §®­ HL--DE
AND A
SBC HL,BC
JR NC,no_diap
EX DE,HL
AND A
SBC HL,BC
JR C,no_diap
XOR A
RET
no_diap:
LD A,1
AND A
RET
;********************************************
EXTR_LINE: ; ¢ë¤¥«¥­¨¥ áâப¨ ¨§ HL ¨ á®åà ­¥­¨¥ ¥¥ ¢ DE
LD B,0
EXTR_LOOP:
LD A,(HL)
CP 13
RET Z
LD (DE),A
INC HL
INC DE
INC B
JR NZ,EXTR_LOOP
SCF
RET
;********************************************
LINE_COMP:
LD A,(DE)
CP (HL)
RET NZ
INC HL
INC DE
DJNZ LINE_COMP
RET
;********************************************
READ_FILE: ; HL - name, ç¨â âì ¢  ¤à¥á #C000
LD A,1
LD C,#11
RST #10
RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
LD (FILE_HANDLE),A
LD A,(FILE_HANDLE)
LD HL,#C000
LD DE,#100 ; ç¨â âì § £®«®¢®ª
; LD DE,200h ; ç¨â âì § £®«®¢®ª
LD C,#13
RST #10
RET C ; ®è¨¡ª  ¯à¨ ç⥭¨¨
; ¤«¨­  áç¨â ­­ëå ¤ ­­ëå ¢ DE
RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok
READ_MORE: ; ç¨â âì ¤ «ìè¥ ¤«ï playlist 4kb
LD DE,#1000 ;
LD C,#13
LD A,(FILE_HANDLE)
RST #10
; JR CLOSE_FILE
CLOSE_FILE:
LD A,(FILE_HANDLE)
LD C,#12
RST #10
RET
;*******************************************
READ_FILE_XD1:
LD HL,#C100
LD DE,#1F00 ; ç¨â âì ¤ «ìè¥
LD C,#13
LD A,(FILE_HANDLE)
RST #10
RET
READ_FILE_XD:
; LD HL,#C000
PUSH HL
LD DE,#2000 ; ç¨â âì ¤ «ìè¥
LD C,#13
LD A,(FILE_HANDLE)
RST #10
POP HL
ADD HL,DE
LD A,D
CP #20
RET Z
LD A,E
OR D
JR NZ,SET_Z_FLAG
LD A,1
AND A
RET
SET_Z_FLAG: ; § ¡¨âì ®áâ «ì­ë¥ ¡ ©âë ¢ 80h
LD (HL),#80
INC HL
LD A,H
AND #1F
OR L
JR NZ,SET_Z_FLAG
RET
DOS_FLAG1: db 1
;********************************************
READ_FILE_X: ; HL - ªã¤  ç¨â âì
;
LD A,(DOS_FLAG1)
AND A
JP NZ,READ_FILE_XD
;
;================[ <20>Ž„ƒŽ<C692>Š€ ]================; !TODO
IFN WAVPLunknown
NEXT_SEC
ENDIF
;================[----------]================;
;
READ_FILE_X1: ; HL - ªã¤  ç¨â âì
LD A,(DOS_FLAG1)
AND A
JP NZ,READ_FILE_XD1
LD A,(NUM_SEC+1)
CP 16
RET NZ
LD A,(LENGTH_DATA)
SUB 32
LD (LENGTH_DATA),A
LD A,(LENGTH_DATA+1)
SBC A,0
LD (LENGTH_DATA+1),A
LD A,(LENGTH_DATA+2)
SBC A,0
LD (LENGTH_DATA+2),A
JR NC,CONT_1
LD A,(LENGTH_DATA)
ADD A,32
RRA
AND 1Fh ; number of sectors
LD (NUM_SEC+1),A
;
;================[ <20>Ž„ƒŽ<C692>Š€ ]================; !TODO
IFN WAVPLunknown
JP Z,READ_END
CONT_1:
NUM_SEC:
LD A,16 ; áç¨â âì 16 ᥪâ®à®¢
LD BC,P_S_CNT
OUT (C),A
LD BC,P_CMD
LD A,#20
OUT (C),A ; ç¨â âì!
LOOP_HDDR1:
LD BC,P_HDST
WAIT_HDD
LD BC,P_DATS ; READ/WRITE INIR/OTIR
LD D,16
LOOP_HDDR:
DUP 32
INI
EDUP
DEC D
JR NZ,LOOP_HDDR
JR LOOP_HDDR1
END_READ1:
READ_END:
ELSE
CONT_1:
LD A,(PLAY_PAGE)
NUM_SEC:
LD B,16 ; áç¨â âì 16 ᥪâ®à®¢
LD C,#48
RST #8 ; CALL BIOS !!! READ_NEXT
ENDIF
;================[----------]================;
;
LD A,(NUM_SEC+1)
READ_END1:
CP 16
RET Z
PUSH HL
POP DE
INC DE
LD C,80h
D_FILL EQU $-1
LD (HL),C
LD BC,1FFh
LDIR
INC HL
INC A
JR READ_END1
;**********************************
HELP_OUT:
IN A,(SLOT1)
PUSH AF
IN A,(PORT_Y)
PUSH AF
LD A,#50
OUT (SLOT1),A
LD A,(HELP_FLAG)
AND A
JR NZ,NO_OUT_PIC
LD DE,PIC_HELP
LD A,#FC
OUT (PORT_Y),A
LOOP_ALL:
LD HL,#4060
LD C,16
LOOP_LINE:
LD A,(DE)
LD B,8
LOOP_BYTE:
RLCA
; LD (HL),0
JR NC,NO_POINT
LD (HL),#FF ; HELP_COLOR
NO_POINT:
INC HL
DJNZ LOOP_BYTE
INC DE
DEC C
JR NZ,LOOP_LINE
IN A,(PORT_Y)
DEC A
OUT (PORT_Y),A
CP #FC-#50
JR NZ,LOOP_ALL
LD A,1
LD (HELP_FLAG),A
NO_OUT_PIC:
LD A,#FF
OUT (PORT_Y),A
LD HL,#43E0 ;?????
COLOR_X+1: LD A,#FF
LD (HL),A
INC L
LD (HL),A
INC L
LD (HL),A
CPL
LD (COLOR_X),A
POP AF
OUT (PORT_Y),A
POP AF
OUT (SLOT1),A
RET
;**********************************
HELP_FLAG: db 0
MAX_: db #40
FRQ_: db 0
KEY_: db 0
SAV_SP: dw 0
LENGTH_DATA: dw 0,0
FLAG16: db 0
FILE_HANDLE: db 0
CBL_MODE: db 0
FACE_FILE: db "WAV_PL.BMP",0
LINES: db "RIFF","WAVEfmt "
LINES_DATA: db "data"
ERROR_MSG:
db 13,10,"File not found."
db 13,10,"USE: wavplay.exe filename.ext",13,10,0
ERROR_MSG2:
db 13,10,"File format not recognized.",13,10,0
ERROR_MSG3:
db 13,10,"Not standart data rate",13,10,0
START_MSG:
db 13,10,"COVOX-Blaster VAW-Player for Sprinter."
db 13,10,"(c) Peters Plus Ltd."
db 13,10,"Writed by Ivan Mak.",13,10,0
PLAY_LIST_ID: db "PLAYLIST"
NUM_FILES: db 1
NUM_MAX: db 2
PLAY_LIST:
ds 8A00h-$
PIC_HELP:
incbin 'ORIGINAL/WAV_HELP.PAK'
Loader_length EQU $ - START
;
;
DISP 0
PIC_MAIN:
incbin './WAV_PL.BMP'
.Size EQU $-PIC_MAIN
ENT
;