From 02c469a77ce722df924e821f0b13b164986874bb Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 28 Feb 2025 02:28:01 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B5=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- WAVPLAY.ASM | 227 +++++++++++++++++++++++++++++------------------- visio2.asm | 130 +++++++++++++++++++++++++++ 3 files changed, 270 insertions(+), 89 deletions(-) create mode 100644 visio2.asm diff --git a/Shared_Includes b/Shared_Includes index 378f3fd..2b1e30c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 378f3fdd49601390b3aacfe51e45c6fceba25022 +Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a diff --git a/WAVPLAY.ASM b/WAVPLAY.ASM index bda6da3..25ad3ae 100644 --- a/WAVPLAY.ASM +++ b/WAVPLAY.ASM @@ -2,6 +2,8 @@ DEFINE WAVPLunknown 1 DEFINE SoundBugFix 1 + DEFINE FULL_VERSION "2.01" + SH_HDD_X EQU 223 ; положение индикатора HDD гор. SH_HDD_Y EQU 90 ; положение индикатора HDD верт. @@ -432,7 +434,7 @@ PLAY_WAVE: LD A,#80 LD (D_FILL),A ; FILL by 80h LD A,0 - LD (ADD_PAR),A + LD (VISIO.ADD_PAR),A LD A,(#C022) LD (FLAG16),A @@ -444,7 +446,7 @@ PLAY_WAVE: LD A,0 LD (D_FILL),A ; FILL by 0 LD A,#80 - LD (ADD_PAR),A + LD (VISIO.ADD_PAR),A JR Z,NEXT_1 ;JR ERROR2 ; format error ERROR2: CALL RESTORE_SCR @@ -493,7 +495,7 @@ NEXT_2: LD DE,9000 CALL Test_DIAP LD A,8 ; 8khz - JR Z,NEXT_3 + JR Z,NEXT_3\ LD HL,10000 LD DE,12000 @@ -652,15 +654,14 @@ LOOP: CALL Z,HELP_OUT NO_KEY1: - LD A,(SND_A+1) - CP 0DFh + CP #DF JR NC,LOOP LD A,1 LD (HDD_CNT),A - LD HL,0E000h + LD HL,#E000 ; CALL READ_FILE_X JP NZ,EXIT_ALL @@ -690,7 +691,7 @@ LOOP2: NO_KEY2: LD A,(SND_A+1) - CP 0DFh + CP #DF JR C,LOOP2 LD A,1 @@ -1005,7 +1006,6 @@ PLAY: DI PUSH DE LD A,CBL.BUFFER_PAGE -;PLAY_PAGE EQU $-1 ; !FIXIT зачем, если можно напрямую было прописать? OUT (SLOT3),A OUT (SLOT0),A @@ -1059,85 +1059,137 @@ NO_SND: RETI ;*********************************** +/* +VISIO: IN A,(PORT_Y) + PUSH AF + ; + ; LD A,(.ADD_PAR) + ; OR A + ; LD A,1 ; x2 pixels + ; JR NZ,.set_pix + ; LD A,2 ; x2 pixels +.set_pix: ; LD (.pixels),A + ; LD B,A + ; + LD HL,(SND_A) + LD (.ADDRESS),HL + ; OR A + ; JR Z,.no_add -VISIO: IN A,(PORT_Y) - PUSH AF +.no_add: LD A,H + CALL .PUT_DOT + ; выход +.exit: POP AF + OUT (PORT_Y),A + RET - 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) +; ВХОД: A - старший байт адреса SND_A +; B = (количество пикселов)/2 +.PUT_DOT: ADD A,A + ;DJNZ .PUT_DOT + AND #7F ; !HARDCODE длина окна - 128 байтов + LD L,A + LD H,#B0 ; !HARDCODE буффер + LD BC,7 ; !HARDCODE смещение от начала рамки + ADD HL,BC + ; + LD A,(SND_A) + RLCA + LD C,A + ADD HL,BC + ; + CALL .SET_Y_COLOR + ; + LD A,#50 + OUT (SLOT3),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 A,(HL) ; old + LD (.OLD_),A + LD A,(.NEW_) + LD (HL),A + ; переключаем в HL адрес с буфера на экран + LD A,H + ADD A,#10 + LD H,A + ; + LD A,(SND_A) + RLCA + JR NC,.no_dec_hl + INC HL +.no_dec_hl: ; + ; стереть по старой координате + ; LD A,(.pixels) + ; LD B,A + ; LD C,A + ; +.OLD_+1: LD A,0 + OUT (PORT_Y),A ; old + ; стереть +.clear+1: LD A,0 ; clear +.loop_clear: LD (HL),A + INC L + LD (HL),A ; стереть + ; INC L + ; DJNZ .loop_clear + ; DEC L + ; нарисовать по новой координате + ; LD B,C + ; DEC L + ; DEC L + ; DEC L +.loop_draw: ; +.NEW_+1: LD A,0 + OUT (PORT_Y),A ; new +.COLOR_+1: LD A,#FF + ; нарисовать + LD (HL),A + DEC L + LD (HL),A + ; INC L + ; + ; LD A,(.ADDRESS) + ; ADD A,8 + ; LD (.ADDRESS),A + ; LD D,B + ; CALL .SET_Y_COLOR + ; ; + ; LD B,D + ; DJNZ .loop_draw + ; +.no_draw: LD A,CBL.BUFFER_PAGE + OUT (SLOT3),A + RET + ; +.SET_Y_COLOR: ; +.ADDRESS+1: LD BC,0 + 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 ; !HARDCODE Vertical Shift + LD (.NEW_),A + ; + LD B,A + LD A,(MAX_) + CP B + RET NC + LD A,B + LD (MAX_),A + RET + ; +; .pixels: DB 1 ; 1 = 2, 2 = 4, 3 = 6 +*/ - 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,CBL.BUFFER_PAGE - OUT (SLOT3),A - - POP AF - OUT (PORT_Y),A - RET + include 'visio2.asm' ;************************************* @@ -1359,7 +1411,6 @@ READ_FILE_X: ; HL - ; READ_FILE_X1: ; HL - куда читать - LD A,(DOS_FLAG1) AND A JP NZ,READ_FILE_XD1 @@ -1543,7 +1594,7 @@ FILE_HANDLE: db 0 CBL_MODE: db 0 -FACE_FILE: db "WAV_PL.BMP",0 +;FACE_FILE: db "WAV_PL.BMP",0 LINES: db "RIFF","WAVEfmt " LINES_DATA: db "data" @@ -1552,13 +1603,13 @@ 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 + db 13,10,"The file format is not recognized.",13,10,0 ERROR_MSG3: - db 13,10,"Not standart data rate",13,10,0 + db 13,10,"Non-standart data rate.",13,10,0 START_MSG: - db 13,10,"COVOX-Blaster WAV-Player by Ivan Mak" - db 13,10,"(c) Sprinter Team. 2023.",13,10,0 + db 13,10,"COVOX-Blaster WAV-Player v",FULL_VERSION," by Ivan Mak" + db 13,10,"(c) Sprinter Team. 2024.",13,10,0 PLAY_LIST_ID: db "PLAYLIST" diff --git a/visio2.asm b/visio2.asm new file mode 100644 index 0000000..fd32b2b --- /dev/null +++ b/visio2.asm @@ -0,0 +1,130 @@ +;*********************************** + +VISIO: IN A,(PORT_Y) + PUSH AF + ; + LD A,(.ADD_PAR) + OR A + LD A,1 ; lines + JR NZ,.set_lines + INC A ; lines +.set_lines: LD (.lines),A + LD B,A + + LD HL,(SND_A) + LD (.ADDRESS),HL + ; OR A + ; JR Z,.no_add + +.no_add: LD A,H + CALL .PUT_DOT + ; выход +.exit: POP AF + OUT (PORT_Y),A + RET + + +; ВХОД: A - старший байт адреса SND_A +; B = (количество полосок)/2 +.PUT_DOT: ADD A,A + ; + AND #7F ; !HARDCODE длина окна - 128 байтов + LD L,A + LD H,#B0 ; !HARDCODE буффер + LD BC,7 ; !HARDCODE смещение от начала рамки + ADD HL,BC + ; + LD A,(SND_A) + RLCA + LD C,A + ADD HL,BC + ; + CALL .SET_Y_COLOR + ; + LD A,#50 + OUT (SLOT3),A + + LD A,(HL) ; old + LD (.OLD_),A + LD A,(.NEW_) + LD (HL),A + ; переключаем в HL адрес с буфера на экран + LD A,H + ADD A,#10 + LD H,A + ; + LD A,(SND_A) + RLCA + JR NC,.no_dec_hl + INC HL +.no_dec_hl: ; + ; стереть по старой координате + ; LD A,(.lines) + ; LD B,A + ; LD C,A + ; +.OLD_+1: LD A,0 + OUT (PORT_Y),A ; old + ; стереть +.clear+1: LD A,0 ; clear +.loop_clear: LD (HL),A + INC L + LD (HL),A ; стереть + ; INC L + ; DJNZ .loop_clear + ; DEC L + ; нарисовать по новой координате + ; LD B,C + ; DEC L + ; DEC L + ; DEC L +.loop_draw: ; +.NEW_+1: LD A,0 + OUT (PORT_Y),A ; new +.COLOR_+1: LD A,#FF + ; нарисовать + LD (HL),A + DEC L + LD (HL),A + ; INC L + ; + ; LD A,(.ADDRESS) + ; ADD A,8 + ; LD (.ADDRESS),A + ; LD D,B + ; CALL .SET_Y_COLOR + ; ; + ; LD B,D + ; DJNZ .loop_draw + ; +.no_draw: LD A,CBL.BUFFER_PAGE + OUT (SLOT3),A + RET + ; + ; +.SET_Y_COLOR: ; +.ADDRESS+1: LD BC,0 + 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 ; !HARDCODE Vertical Shift + LD (.NEW_),A + ; + LD B,A + LD A,(MAX_) + CP B + RET NC + LD A,B + LD (MAX_),A + RET + ; +.lines: DB 1 ; 1 = 1, 2 = 2 \ No newline at end of file