From 0c69e84a29b467b524d59d9b764c6c6f245350ad Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 27 Jun 2025 23:16:27 +1000 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BA=D0=BE=20=D0=B1=D0=B0=D0=B3=D0=BE=D0=B2=20=D1=81=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BE=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=D0=BB=D0=B8=D1=81=D1=82=D0=B0.=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B3=20=D1=81=20=D1=88=D1=83=D0=BC=D0=BE=D0=BC=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D1=82=D1=80=D0=B5=D0=BA=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B5=D0=B9=D0=BB=D0=B8=D1=81=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- WAVPLAY.ASM | 262 ++++++++++++++++++++++++------------------------ visio2.asm | 111 +++++++++++++++++--- 3 files changed, 229 insertions(+), 146 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 2b1e30c..a0e68ce 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a +Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1 diff --git a/WAVPLAY.ASM b/WAVPLAY.ASM index 25ad3ae..6715aab 100644 --- a/WAVPLAY.ASM +++ b/WAVPLAY.ASM @@ -2,38 +2,36 @@ DEFINE WAVPLunknown 1 DEFINE SoundBugFix 1 - DEFINE FULL_VERSION "2.01" + DEFINE FULL_VERSION "2.02" SH_HDD_X EQU 223 ; положение индикатора HDD гор. SH_HDD_Y EQU 90 ; положение индикатора HDD верт. 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 - + LD BC,IDE.Read.Sector + IN A,(C) + INC A + INC B + OUT (C),A + JR NZ,.NO_NEXT + ; + DEC B + INC C + IN E,(C) ;IDE.Read.CylinderLow + INC C + IN D,(C) ;IDE.Read.CylinderHigh + ; + INC DE + INC B + OUT (C),D ;IDE.Write.CylinderHigh + DEC C + OUT (C),E ;IDE.Write.CylinderLow .NO_NEXT: ENDM MACRO WAIT_HDD .LOCS1: -; LD BC,P_HDST IN E,(C) BIT 7,E JR NZ,.LOCS1 @@ -49,14 +47,13 @@ SH_HDD_Y EQU 90 ; ;************************************ EXE_HEADER: BYTE 'EXE' - BYTE 0 ; MY VERSION + BYTE 1 ; 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 + WORD #C000 ; STACK ADRESS .Size EQU $-EXE_HEADER START: PUSH IX @@ -280,12 +277,13 @@ NO_FACE: EI FACE_OK: - - POP HL ; вспомнить командную строку + LD HL,EXIT_ALL.norm_exit + EX (SP),HL ; вспомнить командную строку + ;POP HL ; вспомнить командную строку INC HL INC HL - LD (SAV_SP),SP +;███████████████████████████████████████████████████████████████████████; IF SoundBugFix @@ -296,7 +294,7 @@ PLAY_ALL: CALL TEST_SWITCH IF SoundBugFix - LD A,CBL.BUFFER_PAGE + LD A,SP_SND.CBL.BUFFER_PAGE OUT (SLOT3),A ENDIF @@ -495,7 +493,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 @@ -569,7 +567,7 @@ DATA_1: LDIR ; COPY LEN of DATA IF SoundBugFix - XOR A + LD A,(D_FILL) LD B,L .loop: DEC HL LD (HL),A @@ -579,26 +577,25 @@ DATA_1: LD (SAV_PAGE3),A ENDIF - ;LD A,CBL.BUFFER_PAGE ; спец-страница! + ;LD A,SP_SND.CBL.BUFFER_PAGE ; спец-страница! ;LD (PLAY_PAGE),A ;********************************************* - LD A,CBL.BUFFER_PAGE + LD A,SP_SND.CBL.BUFFER_PAGE OUT (SLOT3),A LD A,16 ; число секторов - признак конца данных LD (NUM_SEC+1),A - LD HL,#C000 -; - CALL READ_FILE_X1 + LD HL,#C100 + CALL READ_FILE_X1 ;!FIXIT LD A,0 - LD BC,CBL.SYS_PORT + LD BC,SP_SND.CBL.SYS_PORT OUT (C),A - LD BC,CBL.OUT + LD BC,SP_SND.CBL.OUT LD A,#80 FILL_L0: OUT (C),A ; забить во все 80h @@ -607,31 +604,31 @@ FILL_L0: - LD HL,0A000h ; CLEAR PAGE_IM2 - LD DE,0A001h - LD BC,100h + LD HL,#A000 ; CLEAR PAGE_IM2 + LD DE,#A001 + LD BC,#100 LD (HL),0 LDIR DI LD DE,PLAY - LD (0A0FFh),DE ; IM2_ADRESS + LD (#A0FF),DE ; IM2_ADRESS - LD A,0A0h + LD A,#A0 LD I,A IM 2 LD A,(CBL_MODE) - LD BC,CBL.SYS_PORT + LD BC,SP_SND.CBL.SYS_PORT OUT (C),A EI LD A,(MAX_) - ADD A,60h + ADD A,#60 RRCA - AND 7Fh + AND #7F LD (MAX_),A ;*************************************** @@ -895,17 +892,17 @@ HDD_CNT: db 0 PAUSE_KEY: DI - LD BC,CBL.SYS_PORT - XOR A ; CBL.Covox - OUT (C),A ; stop Audio - LD A,#80 - LD C,CBL.OUT - OUT (C),A ; COVOX=80h + LD BC,SP_SND.CBL.SYS_PORT + XOR A ; SP_SND.CBL.Covox + OUT (C),A ; stop Audio + LD A,#80 + LD C,SP_SND.CBL.OUT + OUT (C),A ; COVOX=80h CALL PAUSE_KEY1 LD A,(CBL_MODE) ; PLAY MORE - LD BC,CBL.SYS_PORT + LD BC,SP_SND.CBL.SYS_PORT OUT (C),A EI XOR A @@ -952,38 +949,36 @@ NO_KEY: db #FF ; RET -EXIT_ALL: - IM 1 +EXIT_ALL: 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 - 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 +SAV_PAGE3: DB 0 ;************************************* PLAY: DI PUSH AF - IN A,(CBL.INT_PORT) + IN A,(SP_SND.CBL.INT_PORT) RLCA JP NC,NO_SND @@ -1005,11 +1000,11 @@ PLAY: DI PUSH DE - LD A,CBL.BUFFER_PAGE + LD A,SP_SND.CBL.BUFFER_PAGE OUT (SLOT3),A OUT (SLOT0),A - CALL VISIO + CALL VISIO ;**************** @@ -1293,20 +1288,20 @@ no_diap: 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 +; выделение строки из HL и сохранение ее в DE +EXTR_LINE: LD B,0 +.LOOP: LD A,(HL) + AND A + RET Z + CP 13 + RET Z + LD (DE),A + INC HL + INC DE + INC B + JR NZ,.LOOP + ;SCF + RET ;******************************************** @@ -1322,32 +1317,37 @@ LINE_COMP: ;******************************************** -READ_FILE: ; HL - name, читать в адрес #C000 - LD A,1 - LD C,#11 - RST ToDSS - RET C ; ошибка, если нет файла +READ_FILE: ; HL - name, читать в адрес #C000 + LD A,1 + LD C,#11 + RST ToDSS + RET C ; ошибка, если нет файла - LD (FILE_HANDLE),A - LD A,(FILE_HANDLE) + LD (FILE_HANDLE),A + LD A,(FILE_HANDLE) - LD HL,#C000 - LD DE,#100 ; читать заголовок -; LD DE,200h ; читать заголовок - LD C,#13 - RST ToDSS - ;RET C ; ошибка при чтении - ; длина считанных данных в DE - RET ; ошибка при закрытии или Ok + LD HL,#C000 + LD DE,#100 ; читать заголовок + LD C,#13 + RST ToDSS + PUSH AF + LD HL,#C000 + ADD HL,DE + LD (HL),0 + POP AF + RET ; ошибка при закрытии или Ok READ_MORE: ; читать дальше для playlist 4kb - - LD DE,#1000 ; - LD C,#13 - LD A,(FILE_HANDLE) - RST ToDSS -; JR CLOSE_FILE - + PUSH HL + LD DE,#1000 ; + LD C,#13 + LD A,(FILE_HANDLE) + RST ToDSS + ; + JP C,ERROR + POP HL + ADD HL,DE + LD (HL),0 CLOSE_FILE: LD A,(FILE_HANDLE) LD C,#12 @@ -1357,7 +1357,7 @@ CLOSE_FILE: ;******************************************* READ_FILE_XD1: - LD HL,#C100 + ;LD HL,#C100 LD DE,#1F00 ; читать дальше LD C,#13 LD A,(FILE_HANDLE) @@ -1380,8 +1380,8 @@ READ_FILE_XD: LD A,E OR D JR NZ,SET_Z_FLAG - LD A,1 - AND A + XOR A + INC A RET SET_Z_FLAG: ; забить остальные байты в 80h @@ -1433,7 +1433,7 @@ READ_FILE_X1: ; HL - LD A,(LENGTH_DATA) ADD A,32 RRA - AND 1Fh ; number of sectors + AND #1F ; number of sectors LD (NUM_SEC+1),A @@ -1446,20 +1446,20 @@ READ_FILE_X1: ; HL - CONT_1: NUM_SEC: - LD A,16 ; считать 16 секторов + LD A,16 ; считать 16 секторов - LD BC,P_S_CNT + LD BC,IDE.Write.Counter OUT (C),A - LD BC,P_CMD + LD BC,IDE.Write.Command LD A,#20 OUT (C),A ; читать! LOOP_HDDR1: - LD BC,P_HDST + LD BC,IDE.Read.Status WAIT_HDD - LD BC,P_DATS ; READ/WRITE INIR/OTIR + LD BC,IDE.Read.Data ; READ/WRITE INIR/OTIR LD D,16 LOOP_HDDR: @@ -1478,7 +1478,7 @@ READ_END: ELSE CONT_1: - LD A,CBL.BUFFER_PAGE + LD A,SP_SND.CBL.BUFFER_PAGE NUM_SEC: LD B,16 ; считать 16 секторов @@ -1496,8 +1496,8 @@ READ_END1: PUSH HL POP DE INC DE - LD C,80h -D_FILL EQU $-1 +D_FILL+1: + LD C,#80 LD (HL),C LD BC,1FFh LDIR @@ -1609,7 +1609,7 @@ ERROR_MSG3: START_MSG: 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" diff --git a/visio2.asm b/visio2.asm index fd32b2b..86cb991 100644 --- a/visio2.asm +++ b/visio2.asm @@ -1,5 +1,5 @@ ;*********************************** - + /* ; NEW VISIO: IN A,(PORT_Y) PUSH AF ; @@ -10,7 +10,7 @@ VISIO: IN A,(PORT_Y) INC A ; lines .set_lines: LD (.lines),A LD B,A - + LD HL,(SND_A) LD (.ADDRESS),HL ; OR A @@ -19,8 +19,8 @@ VISIO: IN A,(PORT_Y) .no_add: LD A,H CALL .PUT_DOT ; выход -.exit: POP AF - OUT (PORT_Y),A +.exit: POP AF + OUT (PORT_Y),A RET @@ -63,10 +63,10 @@ VISIO: IN A,(PORT_Y) ; LD B,A ; LD C,A ; -.OLD_+1: LD A,0 + .OLD_+1 : LD A,0 OUT (PORT_Y),A ; old ; стереть -.clear+1: LD A,0 ; clear + .clear+1 : LD A,0 ; clear .loop_clear: LD (HL),A INC L LD (HL),A ; стереть @@ -79,9 +79,9 @@ VISIO: IN A,(PORT_Y) ; DEC L ; DEC L .loop_draw: ; -.NEW_+1: LD A,0 + .NEW_+1 : LD A,0 OUT (PORT_Y),A ; new -.COLOR_+1: LD A,#FF + .COLOR_+1 : LD A,#FF ; нарисовать LD (HL),A DEC L @@ -97,13 +97,13 @@ VISIO: IN A,(PORT_Y) ; LD B,D ; DJNZ .loop_draw ; -.no_draw: LD A,CBL.BUFFER_PAGE - OUT (SLOT3),A +.no_draw: LD A,CBL.BUFFER_PAGE + OUT (SLOT3),A RET ; ; .SET_Y_COLOR: ; -.ADDRESS+1: LD BC,0 + .ADDRESS+1 : LD BC,0 LD A,(BC) RRA CPL @@ -112,8 +112,8 @@ VISIO: IN A,(PORT_Y) LD (.COLOR_),A INC BC LD A,(BC) ; new -.ADD_PAR+1: ADD A,0 ; parameter for 8/16 bit - RRA + .ADD_PAR+1 : ADD A,0 ; parameter for 8/16 bit + RRA RRA AND #3F ADD A,#40 ; !HARDCODE Vertical Shift @@ -127,4 +127,87 @@ VISIO: IN A,(PORT_Y) LD (MAX_),A RET ; -.lines: DB 1 ; 1 = 1, 2 = 2 \ No newline at end of file +.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