исправлено несколько багов с некорректной работой плейлиста.

исправлен баг с шумом при переключении треков плейлиста.
This commit is contained in:
Tolik 2025-06-27 23:16:27 +10:00
parent 02c469a77c
commit 0c69e84a29
3 changed files with 229 additions and 146 deletions

@ -1 +1 @@
Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1

View File

@ -2,38 +2,36 @@
DEFINE WAVPLunknown 1 DEFINE WAVPLunknown 1
DEFINE SoundBugFix 1 DEFINE SoundBugFix 1
DEFINE FULL_VERSION "2.01" DEFINE FULL_VERSION "2.02"
SH_HDD_X EQU 223 ; ¯®«®¦¥­¨¥ ¨­¤¨ª â®à  HDD £®à. SH_HDD_X EQU 223 ; ¯®«®¦¥­¨¥ ¨­¤¨ª â®à  HDD £®à.
SH_HDD_Y EQU 90 ; ¯®«®¦¥­¨¥ ¨­¤¨ª â®à  HDD ¢¥àâ. SH_HDD_Y EQU 90 ; ¯®«®¦¥­¨¥ ¨­¤¨ª â®à  HDD ¢¥àâ.
MACRO NEXT_SEC MACRO NEXT_SEC
LD BC,P_S_NUM-256 LD BC,IDE.Read.Sector
IN A,(C) IN A,(C)
INC A INC A
; LD BC,P_S_NUM INC B
INC B OUT (C),A
OUT (C),A JR NZ,.NO_NEXT
JR NZ,.NO_NEXT ;
DEC B
LD BC,P_C_LOW-256 INC C
IN E,(C) IN E,(C) ;IDE.Read.CylinderLow
LD BC,P_C_HIG-256 INC C
IN D,(C) IN D,(C) ;IDE.Read.CylinderHigh
;
INC DE INC DE
LD BC,P_C_LOW INC B
OUT (C),E OUT (C),D ;IDE.Write.CylinderHigh
LD BC,P_C_HIG DEC C
OUT (C),D OUT (C),E ;IDE.Write.CylinderLow
.NO_NEXT: .NO_NEXT:
ENDM ENDM
MACRO WAIT_HDD MACRO WAIT_HDD
.LOCS1: .LOCS1:
; LD BC,P_HDST
IN E,(C) IN E,(C)
BIT 7,E BIT 7,E
JR NZ,.LOCS1 JR NZ,.LOCS1
@ -49,14 +47,13 @@ SH_HDD_Y EQU 90 ;
;************************************ ;************************************
EXE_HEADER: EXE_HEADER:
BYTE 'EXE' BYTE 'EXE'
BYTE 0 ; MY VERSION BYTE 1 ; MY VERSION
DWORD EXE_HEADER.Size ; START CODE IN FILE DWORD EXE_HEADER.Size ; START CODE IN FILE
WORD Loader_length ; LEN START LOAD DATA WORD Loader_length ; LEN START LOAD DATA
WORD 0,0,0 ; RESERV WORD 0,0,0 ; RESERV
WORD START ; ADRESS IN MEM WORD START ; ADRESS IN MEM
WORD START ; START ADRESS WORD START ; START ADRESS
WORD #BFFE ; STACK ADRESS WORD #C000 ; STACK ADRESS
;DS 490
.Size EQU $-EXE_HEADER .Size EQU $-EXE_HEADER
START: PUSH IX START: PUSH IX
@ -280,12 +277,13 @@ NO_FACE:
EI EI
FACE_OK: FACE_OK:
LD HL,EXIT_ALL.norm_exit
POP HL ; ¢á¯®¬­¨âì ª®¬ ­¤­ãî áâபã EX (SP),HL ; ¢á¯®¬­¨âì ª®¬ ­¤­ãî áâபã
;POP HL ; ¢á¯®¬­¨âì ª®¬ ­¤­ãî áâபã
INC HL INC HL
INC HL INC HL
LD (SAV_SP),SP LD (SAV_SP),SP
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
IF SoundBugFix IF SoundBugFix
@ -296,7 +294,7 @@ PLAY_ALL:
CALL TEST_SWITCH CALL TEST_SWITCH
IF SoundBugFix IF SoundBugFix
LD A,CBL.BUFFER_PAGE LD A,SP_SND.CBL.BUFFER_PAGE
OUT (SLOT3),A OUT (SLOT3),A
ENDIF ENDIF
@ -495,7 +493,7 @@ NEXT_2:
LD DE,9000 LD DE,9000
CALL Test_DIAP CALL Test_DIAP
LD A,8 ; 8khz LD A,8 ; 8khz
JR Z,NEXT_3\ JR Z,NEXT_3
LD HL,10000 LD HL,10000
LD DE,12000 LD DE,12000
@ -569,7 +567,7 @@ DATA_1:
LDIR ; COPY LEN of DATA LDIR ; COPY LEN of DATA
IF SoundBugFix IF SoundBugFix
XOR A LD A,(D_FILL)
LD B,L LD B,L
.loop: DEC HL .loop: DEC HL
LD (HL),A LD (HL),A
@ -579,26 +577,25 @@ DATA_1:
LD (SAV_PAGE3),A LD (SAV_PAGE3),A
ENDIF ENDIF
;LD A,CBL.BUFFER_PAGE ; ᯥæ-áâà ­¨æ ! ;LD A,SP_SND.CBL.BUFFER_PAGE ; ᯥæ-áâà ­¨æ !
;LD (PLAY_PAGE),A ;LD (PLAY_PAGE),A
;********************************************* ;*********************************************
LD A,CBL.BUFFER_PAGE LD A,SP_SND.CBL.BUFFER_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD A,16 ; ç¨á«® ᥪâ®à®¢ - ¯à¨§­ ª ª®­æ  ¤ ­­ëå LD A,16 ; ç¨á«® ᥪâ®à®¢ - ¯à¨§­ ª ª®­æ  ¤ ­­ëå
LD (NUM_SEC+1),A LD (NUM_SEC+1),A
LD HL,#C000 LD HL,#C100
; CALL READ_FILE_X1 ;!FIXIT
CALL READ_FILE_X1
LD A,0 LD A,0
LD BC,CBL.SYS_PORT LD BC,SP_SND.CBL.SYS_PORT
OUT (C),A OUT (C),A
LD BC,CBL.OUT LD BC,SP_SND.CBL.OUT
LD A,#80 LD A,#80
FILL_L0: FILL_L0:
OUT (C),A ; § ¡¨âì ¢® ¢á¥ 80h OUT (C),A ; § ¡¨âì ¢® ¢á¥ 80h
@ -607,31 +604,31 @@ FILL_L0:
LD HL,0A000h ; CLEAR PAGE_IM2 LD HL,#A000 ; CLEAR PAGE_IM2
LD DE,0A001h LD DE,#A001
LD BC,100h LD BC,#100
LD (HL),0 LD (HL),0
LDIR LDIR
DI DI
LD DE,PLAY LD DE,PLAY
LD (0A0FFh),DE ; IM2_ADRESS LD (#A0FF),DE ; IM2_ADRESS
LD A,0A0h LD A,#A0
LD I,A LD I,A
IM 2 IM 2
LD A,(CBL_MODE) LD A,(CBL_MODE)
LD BC,CBL.SYS_PORT LD BC,SP_SND.CBL.SYS_PORT
OUT (C),A OUT (C),A
EI EI
LD A,(MAX_) LD A,(MAX_)
ADD A,60h ADD A,#60
RRCA RRCA
AND 7Fh AND #7F
LD (MAX_),A LD (MAX_),A
;*************************************** ;***************************************
@ -895,17 +892,17 @@ HDD_CNT: db 0
PAUSE_KEY: PAUSE_KEY:
DI DI
LD BC,CBL.SYS_PORT LD BC,SP_SND.CBL.SYS_PORT
XOR A ; CBL.Covox XOR A ; SP_SND.CBL.Covox
OUT (C),A ; stop Audio OUT (C),A ; stop Audio
LD A,#80 LD A,#80
LD C,CBL.OUT LD C,SP_SND.CBL.OUT
OUT (C),A ; COVOX=80h OUT (C),A ; COVOX=80h
CALL PAUSE_KEY1 CALL PAUSE_KEY1
LD A,(CBL_MODE) ; PLAY MORE LD A,(CBL_MODE) ; PLAY MORE
LD BC,CBL.SYS_PORT LD BC,SP_SND.CBL.SYS_PORT
OUT (C),A OUT (C),A
EI EI
XOR A XOR A
@ -952,38 +949,36 @@ NO_KEY: db #FF
; RET ; RET
EXIT_ALL: EXIT_ALL: IM 1
IM 1 XOR A
LD BC,SP_SND.CBL.SYS_PORT
OUT (C),A
;
LD (HDD_CNT),A
LD (HDD_S),A
;
LD BC,SP_SND.CBL.OUT
LD A,#80
.loop: OUT (C),A ; § ¡¨âì ¢® ¢á¥ 80h
DJNZ .loop
;
LD HL,#C000
LD (SND_A),HL
;
LD A,(SAV_PAGE3)
OUT (SLOT3),A
JP CLOSE_FILE
;
.norm_exit: LD B,0
.exit: LD C,Dss.Exit
RST ToDSS
JR .exit
LD A,0 SAV_PAGE3: DB 0
LD BC,CBL.SYS_PORT
OUT (C),A
LD BC,CBL.OUT
LD A,#80
.loop: OUT (C),A ; § ¡¨âì ¢® ¢á¥ 80h
DJNZ .loop
LD A,(SAV_PAGE3)
OUT (SLOT3),A
CALL CLOSE_FILE
; LD C,50h ; OPEN_TEXT_SCR
; LD B,1
; LD A,3h
; RST 10h
LD B,0
.exit: LD C,Dss.Exit
RST ToDSS
JR .exit
SAV_PAGE3: db 0
;************************************* ;*************************************
PLAY: DI PLAY: DI
PUSH AF PUSH AF
IN A,(CBL.INT_PORT) IN A,(SP_SND.CBL.INT_PORT)
RLCA RLCA
JP NC,NO_SND JP NC,NO_SND
@ -1005,11 +1000,11 @@ PLAY: DI
PUSH DE PUSH DE
LD A,CBL.BUFFER_PAGE LD A,SP_SND.CBL.BUFFER_PAGE
OUT (SLOT3),A OUT (SLOT3),A
OUT (SLOT0),A OUT (SLOT0),A
CALL VISIO CALL VISIO
;**************** ;****************
@ -1293,20 +1288,20 @@ no_diap:
RET RET
;******************************************** ;********************************************
; ¢ë¤¥«¥­¨¥ áâப¨ ¨§ HL ¨ á®åà ­¥­¨¥ ¥¥ ¢ DE
EXTR_LINE: ; ¢ë¤¥«¥­¨¥ áâப¨ ¨§ HL ¨ á®åà ­¥­¨¥ ¥¥ ¢ DE EXTR_LINE: LD B,0
LD B,0 .LOOP: LD A,(HL)
EXTR_LOOP: AND A
LD A,(HL) RET Z
CP 13 CP 13
RET Z RET Z
LD (DE),A LD (DE),A
INC HL INC HL
INC DE INC DE
INC B INC B
JR NZ,EXTR_LOOP JR NZ,.LOOP
SCF ;SCF
RET RET
;******************************************** ;********************************************
@ -1322,32 +1317,37 @@ LINE_COMP:
;******************************************** ;********************************************
READ_FILE: ; HL - name, ç¨â âì ¢  ¤à¥á #C000 READ_FILE: ; HL - name, ç¨â âì ¢  ¤à¥á #C000
LD A,1 LD A,1
LD C,#11 LD C,#11
RST ToDSS RST ToDSS
RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©«  RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
LD (FILE_HANDLE),A LD (FILE_HANDLE),A
LD A,(FILE_HANDLE) LD A,(FILE_HANDLE)
LD HL,#C000 LD HL,#C000
LD DE,#100 ; ç¨â âì § £®«®¢®ª LD DE,#100 ; ç¨â âì § £®«®¢®ª
; LD DE,200h ; ç¨â âì § £®«®¢®ª LD C,#13
LD C,#13 RST ToDSS
RST ToDSS PUSH AF
;RET C ; ®è¨¡ª  ¯à¨ ç⥭¨¨ LD HL,#C000
; ¤«¨­  áç¨â ­­ëå ¤ ­­ëå ¢ DE ADD HL,DE
RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok LD (HL),0
POP AF
RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok
READ_MORE: ; ç¨â âì ¤ «ìè¥ ¤«ï playlist 4kb READ_MORE: ; ç¨â âì ¤ «ìè¥ ¤«ï playlist 4kb
PUSH HL
LD DE,#1000 ; LD DE,#1000 ;
LD C,#13 LD C,#13
LD A,(FILE_HANDLE) LD A,(FILE_HANDLE)
RST ToDSS RST ToDSS
; JR CLOSE_FILE ;
JP C,ERROR
POP HL
ADD HL,DE
LD (HL),0
CLOSE_FILE: CLOSE_FILE:
LD A,(FILE_HANDLE) LD A,(FILE_HANDLE)
LD C,#12 LD C,#12
@ -1357,7 +1357,7 @@ CLOSE_FILE:
;******************************************* ;*******************************************
READ_FILE_XD1: READ_FILE_XD1:
LD HL,#C100 ;LD HL,#C100
LD DE,#1F00 ; ç¨â âì ¤ «ìè¥ LD DE,#1F00 ; ç¨â âì ¤ «ìè¥
LD C,#13 LD C,#13
LD A,(FILE_HANDLE) LD A,(FILE_HANDLE)
@ -1380,8 +1380,8 @@ READ_FILE_XD:
LD A,E LD A,E
OR D OR D
JR NZ,SET_Z_FLAG JR NZ,SET_Z_FLAG
LD A,1 XOR A
AND A INC A
RET RET
SET_Z_FLAG: ; § ¡¨âì ®áâ «ì­ë¥ ¡ ©âë ¢ 80h SET_Z_FLAG: ; § ¡¨âì ®áâ «ì­ë¥ ¡ ©âë ¢ 80h
@ -1433,7 +1433,7 @@ READ_FILE_X1: ; HL -
LD A,(LENGTH_DATA) LD A,(LENGTH_DATA)
ADD A,32 ADD A,32
RRA RRA
AND 1Fh ; number of sectors AND #1F ; number of sectors
LD (NUM_SEC+1),A LD (NUM_SEC+1),A
@ -1446,20 +1446,20 @@ READ_FILE_X1: ; HL -
CONT_1: CONT_1:
NUM_SEC: NUM_SEC:
LD A,16 ; áç¨â âì 16 ᥪâ®à®¢ LD A,16 ; áç¨â âì 16 ᥪâ®à®¢
LD BC,P_S_CNT LD BC,IDE.Write.Counter
OUT (C),A OUT (C),A
LD BC,P_CMD LD BC,IDE.Write.Command
LD A,#20 LD A,#20
OUT (C),A ; ç¨â âì! OUT (C),A ; ç¨â âì!
LOOP_HDDR1: LOOP_HDDR1:
LD BC,P_HDST LD BC,IDE.Read.Status
WAIT_HDD WAIT_HDD
LD BC,P_DATS ; READ/WRITE INIR/OTIR LD BC,IDE.Read.Data ; READ/WRITE INIR/OTIR
LD D,16 LD D,16
LOOP_HDDR: LOOP_HDDR:
@ -1478,7 +1478,7 @@ READ_END:
ELSE ELSE
CONT_1: CONT_1:
LD A,CBL.BUFFER_PAGE LD A,SP_SND.CBL.BUFFER_PAGE
NUM_SEC: NUM_SEC:
LD B,16 ; áç¨â âì 16 ᥪâ®à®¢ LD B,16 ; áç¨â âì 16 ᥪâ®à®¢
@ -1496,8 +1496,8 @@ READ_END1:
PUSH HL PUSH HL
POP DE POP DE
INC DE INC DE
LD C,80h D_FILL+1:
D_FILL EQU $-1 LD C,#80
LD (HL),C LD (HL),C
LD BC,1FFh LD BC,1FFh
LDIR LDIR
@ -1609,7 +1609,7 @@ ERROR_MSG3:
START_MSG: START_MSG:
db 13,10,"COVOX-Blaster WAV-Player v",FULL_VERSION," by Ivan Mak" db 13,10,"COVOX-Blaster WAV-Player v",FULL_VERSION," by Ivan Mak"
db 13,10,"(c) Sprinter Team. 2024.",13,10,0 db 13,10,"(c) Sprinter Team. 2025.",13,10,0
PLAY_LIST_ID: db "PLAYLIST" PLAY_LIST_ID: db "PLAYLIST"

View File

@ -1,5 +1,5 @@
;*********************************** ;***********************************
/* ; NEW
VISIO: IN A,(PORT_Y) VISIO: IN A,(PORT_Y)
PUSH AF PUSH AF
; ;
@ -10,7 +10,7 @@ VISIO: IN A,(PORT_Y)
INC A ; lines INC A ; lines
.set_lines: LD (.lines),A .set_lines: LD (.lines),A
LD B,A LD B,A
LD HL,(SND_A) LD HL,(SND_A)
LD (.ADDRESS),HL LD (.ADDRESS),HL
; OR A ; OR A
@ -19,8 +19,8 @@ VISIO: IN A,(PORT_Y)
.no_add: LD A,H .no_add: LD A,H
CALL .PUT_DOT CALL .PUT_DOT
; ¢ë室 ; ¢ë室
.exit: POP AF .exit: POP AF
OUT (PORT_Y),A OUT (PORT_Y),A
RET RET
@ -63,10 +63,10 @@ VISIO: IN A,(PORT_Y)
; LD B,A ; LD B,A
; LD C,A ; LD C,A
; ;
.OLD_+1: LD A,0 .OLD_+1 : LD A,0
OUT (PORT_Y),A ; old OUT (PORT_Y),A ; old
; áâ¥à¥âì ; áâ¥à¥âì
.clear+1: LD A,0 ; clear .clear+1 : LD A,0 ; clear
.loop_clear: LD (HL),A .loop_clear: LD (HL),A
INC L INC L
LD (HL),A ; áâ¥à¥âì LD (HL),A ; áâ¥à¥âì
@ -79,9 +79,9 @@ VISIO: IN A,(PORT_Y)
; DEC L ; DEC L
; DEC L ; DEC L
.loop_draw: ; .loop_draw: ;
.NEW_+1: LD A,0 .NEW_+1 : LD A,0
OUT (PORT_Y),A ; new OUT (PORT_Y),A ; new
.COLOR_+1: LD A,#FF .COLOR_+1 : LD A,#FF
; ­ à¨á®¢ âì ; ­ à¨á®¢ âì
LD (HL),A LD (HL),A
DEC L DEC L
@ -97,13 +97,13 @@ VISIO: IN A,(PORT_Y)
; LD B,D ; LD B,D
; DJNZ .loop_draw ; DJNZ .loop_draw
; ;
.no_draw: LD A,CBL.BUFFER_PAGE .no_draw: LD A,CBL.BUFFER_PAGE
OUT (SLOT3),A OUT (SLOT3),A
RET RET
; ;
; ;
.SET_Y_COLOR: ; .SET_Y_COLOR: ;
.ADDRESS+1: LD BC,0 .ADDRESS+1 : LD BC,0
LD A,(BC) LD A,(BC)
RRA RRA
CPL CPL
@ -112,8 +112,8 @@ VISIO: IN A,(PORT_Y)
LD (.COLOR_),A LD (.COLOR_),A
INC BC INC BC
LD A,(BC) ; new LD A,(BC) ; new
.ADD_PAR+1: ADD A,0 ; parameter for 8/16 bit .ADD_PAR+1 : ADD A,0 ; parameter for 8/16 bit
RRA RRA
RRA RRA
AND #3F AND #3F
ADD A,#40 ; !HARDCODE Vertical Shift ADD A,#40 ; !HARDCODE Vertical Shift
@ -127,4 +127,87 @@ VISIO: IN A,(PORT_Y)
LD (MAX_),A LD (MAX_),A
RET RET
; ;
.lines: DB 1 ; 1 = 1, 2 = 2 .lines: DB 1 ; 1 = 1, 2 = 2
*/
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,SP_SND.CBL.BUFFER_PAGE
OUT (SLOT3),A
POP AF
OUT (PORT_Y),A
RET