diff --git a/BIN/WAV_HELP.PAK b/BIN/WAV_HELP.PAK new file mode 100644 index 0000000..b91e393 Binary files /dev/null and b/BIN/WAV_HELP.PAK differ diff --git a/WAV_PL.BMP b/BIN/WAV_PL.BMP similarity index 100% rename from WAV_PL.BMP rename to BIN/WAV_PL.BMP diff --git a/Shared_Includes b/Shared_Includes index 6e27011..a0e68ce 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 6e27011b6259b0256ce65d91a53ef1185223eafa +Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1 diff --git a/WAVPLAY.ASM b/WAVPLAY.ASM index 3bae8d2..6715aab 100644 --- a/WAVPLAY.ASM +++ b/WAVPLAY.ASM @@ -1,35 +1,37 @@ - DEFINE WAVPLunknown 1 - DEFINE SND_Abug 0 - DEFINE OutOfPageBugFix 0 + DEFINE WAVPLunknown 1 + DEFINE SoundBugFix 1 + + 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 @@ -38,20 +40,20 @@ ENDM INCLUDE 'shared_includes/constants/sp2000.inc' INCLUDE 'Shared_Includes/constants/dss_equ.inc' + INCLUDE 'Shared_Includes/constants/bios_equ.inc' INCLUDE 'shared_includes/macroses/accelerator.z80' ORG #8100-EXE_HEADER.Size ;************************************ 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 @@ -59,19 +61,19 @@ START: PUSH IX LD (FILE_HANDLE),A LD HL,START_MSG LD C,#5C - RST #10 ; Start Message + RST ToDSS ; Start Message LD C,#50 LD B,0 LD A,#81 - RST #10 ; OPEN_GRAF_SCR + RST ToDSS ; OPEN_GRAF_SCR DI LD C,#A6 ; set GRAF_PAL LD B,1 LD A,0 ;GRAPHIC_SCREEN - RST 8 + RST ToBIOS EI IN A,(SLOT3) @@ -116,15 +118,14 @@ START: PUSH IX LD A,(FILE_HANDLE) LD HL,0 LD IX,PIC_MAIN.Size - LD BC,Dss.Move_FP.FrEnd * 256 + Dss.Move_FP - + LD BC,Dss.Move_FP.FrEnd ;!TEST LD HL,#B400 LD DE,#36 LD C,#13 LD A,(FILE_HANDLE) - RST #10 ; READ Head + RST ToDSS ; READ Head ; LD HL,0B436h ; Set All PAL=0 ; LD DE,0B437h @@ -143,7 +144,7 @@ START: PUSH IX LD HL,#B436 LD C,#13 LD A,(FILE_HANDLE) - RST #10 ; READ PAL + RST ToDSS ; READ PAL ; LD HL,0B832h ; цвет FF - белый ; LD (HL),0FFh @@ -169,7 +170,7 @@ LOOP_FACE: LD DE,#1400 ; по 5k LD C,#13 LD A,(FILE_HANDLE) - RST #10 ; READ File + RST ToDSS ; READ File POP BC PUSH BC ; вспомнить C - Line @@ -272,19 +273,31 @@ NO_FACE: LD C,#A6 ; set GRAF_PAL LD B,1 LD A,0 - RST 8 + RST ToBIOS 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 + IN A,(SLOT3) + LD (SAV_PAGE3),A + ENDIF PLAY_ALL: CALL TEST_SWITCH + + IF SoundBugFix + LD A,SP_SND.CBL.BUFFER_PAGE + OUT (SLOT3),A + ENDIF + ; HL - name CALL READ_FILE ; чтение файла (сначала!) JP C,ERROR @@ -337,7 +350,6 @@ END_WPL: LD HL,#9000 LOOP_WPL_ALL: - LD A,(NUM_FILES) AND A JR Z,STOP_ALL @@ -420,7 +432,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 @@ -432,43 +444,39 @@ 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 - -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 + ;JR ERROR2 ; format error +ERROR2: CALL RESTORE_SCR LD HL,ERROR_MSG2 LD C,#5C - RST #10 + RST ToDSS CALL CLOSE_FILE - LD B,DSS_Error.sys.UNKNOWN_FORMAT - RET -ERROR3: - CALL RESTORE_SCR + LD B,DSS_Error.sys.UNKNOWN_FORMAT + JP EXIT_ALL.exit + +ERROR: CALL RESTORE_SCR + LD HL,ERROR_MSG + LD C,#5C + RST ToDSS + LD B,DSS_Error.sys.FILE_NOT_FOUND + JP EXIT_ALL.exit + +ERROR3: CALL RESTORE_SCR LD HL,ERROR_MSG3 LD C,#5C - RST #10 + RST ToDSS CALL CLOSE_FILE - LD B,DSS_Error.sys.GENERAL_FAILURE - RET + LD B,DSS_Error.sys.UNKNOWN_FORMAT + JP EXIT_ALL.exit RESTORE_SCR: LD C,#50 LD B,0 LD A,#03 - JP #10 ; OPEN_TXT_SCR + JP ToDSS ; OPEN_TXT_SCR NEXT_1: - LD A,(#C016) CP 1 JR Z,NEXT_2 @@ -480,7 +488,7 @@ NEXT_2: LD A,B LD (CBL_MODE),A - LD BC,(0C018h) ; частота + LD BC,(#C018) ; частота LD HL,7000 LD DE,9000 CALL Test_DIAP @@ -525,7 +533,6 @@ NEXT_2: ; LD A,14 ; 54khz ; EX AF,AF' ; JR Z,NEXT_3 - JP ERROR3 NEXT_3: @@ -534,13 +541,9 @@ NEXT_3: 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 @@ -552,7 +555,6 @@ FIND_DATA: INC L JR NZ,FIND_DATA JP ERROR2 - DATA_1: INC HL INC HL @@ -564,69 +566,69 @@ DATA_1: LD BC,3 LDIR ; COPY LEN of DATA - IF SND_Abug - LD (SND_A),HL ; Adress of data - ENDIF + IF SoundBugFix + LD A,(D_FILL) + LD B,L +.loop: DEC HL + LD (HL),A + DJNZ .loop + ELSE + IN A,(SLOT3) + LD (SAV_PAGE3),A + ENDIF - IN A,(SLOT3) - LD (SAV_PAGE3),A - - LD A,#FD ; спец-страница! - LD (PLAY_PAGE),A + ;LD A,SP_SND.CBL.BUFFER_PAGE ; спец-страница! + ;LD (PLAY_PAGE),A ;********************************************* - LD A,(PLAY_PAGE) + LD A,SP_SND.CBL.BUFFER_PAGE OUT (SLOT3),A LD A,16 ; число секторов - признак конца данных LD (NUM_SEC+1),A - LD HL,#C000 -; -; ================[ ПОДГОНКА ]================; !TODO - IF WAVPLunknown - LD DE,0 - ENDIF -;================[----------]================; -; - CALL READ_FILE_X1 + LD HL,#C100 + CALL READ_FILE_X1 ;!FIXIT LD A,0 - LD BC,#4E + LD BC,SP_SND.CBL.SYS_PORT OUT (C),A - LD BC,#4F + LD BC,SP_SND.CBL.OUT 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,#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,#4E + 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 ;*************************************** @@ -649,21 +651,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 -; -; ================[ ПОДГОНКА ]================; !TODO - IF WAVPLunknown - LD DE,1 - ENDIF -;================[----------]================; + LD HL,#E000 ; CALL READ_FILE_X JP NZ,EXIT_ALL @@ -693,19 +688,13 @@ LOOP2: NO_KEY2: LD A,(SND_A+1) - CP 0DFh + CP #DF JR C,LOOP2 LD A,1 LD (HDD_CNT),A LD HL,#C000 -; -; ================[ ПОДГОНКА ]================; !TODO - IF WAVPLunknown - LD DE,1 - ENDIF -;================[----------]================; ; CALL READ_FILE_X JP NZ,EXIT_ALL @@ -738,11 +727,9 @@ HDD_IND: LD A,#20 ; забить весь индикатор ACC_Off -SH_HDD EQU 5Ah ; положение индикатора HDD верт. + LD HL,#C000 + SH_HDD_X ; положение индикатора HDD гор. - LD HL,#C0DF ; положение индикатора HDD гор. - - LD A,SH_HDD + LD A,SH_HDD_Y OUT (PORT_Y),A ; LD A,0Eh ; цвет панели (синий) @@ -755,7 +742,7 @@ SH_HDD EQU 5Ah ; LD (HL),A ACC_Off - LD A,SH_HDD + LD A,SH_HDD_Y OUT (PORT_Y),A INC HL @@ -772,8 +759,8 @@ SH_HDD EQU 5Ah ; CP #3E LD B,#1D JR C,NO_ - LD B,#1D -COLOR_B EQU $-1 +COLOR_B+1: LD B,#1D + LD A,(COLOR_B) XOR #1E LD (COLOR_B),A @@ -785,7 +772,7 @@ NO_: ACC_Off NEG - ADD A,SH_HDD+#40 + ADD A,SH_HDD_Y+#40 LD C,A OUT (PORT_Y),A @@ -806,7 +793,7 @@ NO_: LD HL,#C0E7 - LD A,SH_HDD + LD A,SH_HDD_Y OUT (PORT_Y),A ACC_SetBlockSize @@ -818,7 +805,8 @@ NO_: ACC_FillScreenOneByte LD (HL),A ACC_Off - LD A,1 ; зеленый + + LD A,1 ; зеленый ACC_FillScreenOneByte LD (HL),A ACC_Off @@ -831,7 +819,7 @@ NO_: LD (HL),A ACC_Off - LD A,SH_HDD + LD A,SH_HDD_Y OUT (PORT_Y),A INC HL @@ -845,6 +833,7 @@ NO_: ACC_FillScreenOneByte LD (HL),A ACC_Off + LD A,1 ; зеленый ACC_FillScreenOneByte LD (HL),A @@ -871,7 +860,7 @@ NO_: ACC_Off NEG - ADD A,SH_HDD+#40 + ADD A,SH_HDD_Y+#40 LD C,A OUT (PORT_Y),A @@ -903,17 +892,17 @@ 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 + 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,#4E + LD BC,SP_SND.CBL.SYS_PORT OUT (C),A EI XOR A @@ -930,8 +919,7 @@ PAUSE_KEY1: RET Z JR PAUSE_KEY1 -INKEY: - IN A,(Z84.SIO.Ch_A.Ctrl) +INKEY: IN A,(Z84.SIO.Ch_A.Ctrl) BIT 0,A RET Z IN A,(Z84.SIO.Ch_A.Data) @@ -961,39 +949,36 @@ NO_KEY: db #FF ; 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 +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 +SAV_PAGE3: DB 0 ;************************************* -PLAY: - DI +PLAY: DI PUSH AF - IN A,(0FEh) + IN A,(SP_SND.CBL.INT_PORT) RLCA JP NC,NO_SND @@ -1015,12 +1000,11 @@ PLAY: PUSH DE - LD A,#FD -PLAY_PAGE EQU $-1 ; !FIXIT зачем, если можно напрямую было прописать? + LD A,SP_SND.CBL.BUFFER_PAGE OUT (SLOT3),A OUT (SLOT0),A - CALL VISIO + CALL VISIO ;**************** @@ -1046,18 +1030,8 @@ 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 + LD (SND_A),HL ;**************** @@ -1080,89 +1054,140 @@ 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,(PLAY_PAGE) - OUT (SLOT3),A - - POP AF - OUT (PORT_Y),A - RET + include 'visio2.asm' ;************************************* - FRQ_ON: CALL OFF_IND LD A,(FRQ_) @@ -1241,7 +1266,7 @@ SET_PAL_1: PALS_N+2: LD DE,0 LD C,#A4 LD A,0 - RST 8h ; set Pal + RST ToBIOS ; set Pal EI RET @@ -1263,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 ;******************************************** @@ -1292,47 +1317,51 @@ LINE_COMP: ;******************************************** -READ_FILE: ; HL - name, читать в адрес #C000 +READ_FILE: ; HL - name, читать в адрес #C000 + LD A,1 + LD C,#11 + RST ToDSS + RET C ; ошибка, если нет файла - LD A,1 - LD C,#11 - RST #10 - 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 #10 - 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 #10 -; 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 - RST #10 + RST ToDSS RET ;******************************************* READ_FILE_XD1: - LD HL,#C100 + ;LD HL,#C100 LD DE,#1F00 ; читать дальше LD C,#13 LD A,(FILE_HANDLE) - RST #10 + RST ToDSS RET READ_FILE_XD: @@ -1341,7 +1370,7 @@ READ_FILE_XD: LD DE,#2000 ; читать дальше LD C,#13 LD A,(FILE_HANDLE) - RST #10 + RST ToDSS POP HL ADD HL,DE @@ -1351,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 @@ -1382,7 +1411,6 @@ READ_FILE_X: ; HL - ; READ_FILE_X1: ; HL - куда читать - LD A,(DOS_FLAG1) AND A JP NZ,READ_FILE_XD1 @@ -1405,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 @@ -1418,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: @@ -1450,12 +1478,12 @@ READ_END: ELSE CONT_1: - LD A,(PLAY_PAGE) + LD A,SP_SND.CBL.BUFFER_PAGE NUM_SEC: LD B,16 ; считать 16 секторов LD C,#48 - RST #8 ; CALL BIOS !!! READ_NEXT + RST ToBIOS ; CALL BIOS !!! READ_NEXT ENDIF ;================[----------]================; ; @@ -1468,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 @@ -1566,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" @@ -1575,34 +1603,30 @@ 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 VAW-Player for Sprinter." - db 13,10,"(c) Peters Plus Ltd." - db 13,10,"Writed by Ivan Mak.",13,10,0 + db 13,10,"COVOX-Blaster WAV-Player v",FULL_VERSION," by Ivan Mak" + db 13,10,"(c) Sprinter Team. 2025.",13,10,0 PLAY_LIST_ID: db "PLAYLIST" NUM_FILES: db 1 NUM_MAX: db 2 -PLAY_LIST: - - - ds 8A00h-$ +PLAY_LIST: BLOCK #8A00-$,0 PIC_HELP: - incbin 'ORIGINAL/WAV_HELP.PAK' + incbin 'BIN/WAV_HELP.PAK' Loader_length EQU $ - START ; ; DISP 0 PIC_MAIN: - incbin './WAV_PL.BMP' + incbin './BIN/WAV_PL.BMP' .Size EQU $-PIC_MAIN ENT ; diff --git a/visio2.asm b/visio2.asm new file mode 100644 index 0000000..86cb991 --- /dev/null +++ b/visio2.asm @@ -0,0 +1,213 @@ +;*********************************** + /* ; NEW +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 + */ + + + + + + + + +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