From cff96ddd41aa6cc5fb64b48953e00d4c68ba3ba6 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 24 Jun 2023 06:10:24 +1000 Subject: [PATCH 01/43] custom number of ROMs loading --- Shared_Includes | 2 +- spectrum.asm | 371 +++++++++++++++++++++++------------------------- 2 files changed, 176 insertions(+), 197 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 80b60f7..81f727c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 80b60f7294ce3eee958a0c4e9a6f29577cee496f +Subproject commit 81f727ca6ecd8fcaaac4f4e573fe1fd6578c1efa diff --git a/spectrum.asm b/spectrum.asm index 241c290..8b0ddb8 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -84,14 +84,19 @@ program_start EQU BEGIN ; ; Program EQU section ;*************************************** -NAME_CFG_LINE EQU 0 -BASIC128_LINE EQU 2 -BASIC_48_LINE EQU 4 -TRDOS_LINE EQU 6 -EXP_LINE EQU 8 -BIOS_LINE EQU 10 -BIOS2_LINE EQU 12 -OPTIONS_LINE EQU 14 +FULL_FILE_NAME_LENGTH EQU 128 ; длина строки пути к файлу +MAX_LINE_LENGTH EQU 120 ; длина строки CFG файла +CFG_FILE_LINES EQU 8 +NAME_CFG_LINE EQU 0 +BASIC128_LINE EQU 2 +BASIC_48_LINE EQU 4 +TRDOS_LINE EQU 6 +EXP_LINE EQU 8 +BIOS_LINE EQU 10 +BIOS2_LINE EQU 12 +;XXX_LINE EQU ?? +OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 + ;*************************************** ; @@ -106,17 +111,17 @@ OPTIONS_LINE EQU 14 ; Code start section ;[]-------------------------------------------------------------------[] IF EXE_HEADER - include 'Shared_Includes/constants/EXE_Header.z80' - ORG org_addr + include 'Shared_Includes/constants/EXE_Header.z80' + ORG org_addr ELSE - ORG org_addr - CLP_Buffer + ORG org_addr - CLP_Buffer ENDIF BEGIN: LD (LINE_X),IX LD HL,START_MSG - LD C,5Ch + LD C,Dss.PChars RST ToDSS IN A,(SLOT3) @@ -125,10 +130,10 @@ BEGIN: JP COMAND_LINE ERROR_FILE: LD HL,ERROR_FILE_MSG_X - LD C,5Ch + LD C,Dss.PChars RST ToDSS LD HL,ONE_FILE - LD C,5Ch + LD C,Dss.PChars RST ToDSS LD HL,ERROR_FILE_MSG @@ -184,8 +189,7 @@ COMAND_LINE: CALL READ_FILE_1 JP NC,CONTINUE -NO_FIL: - LD HL,CNF_FILE +NO_FIL: LD HL,CNF_FILE LD A,Spec_Page CALL READ_FILE_1 JR C,ERROR_FILE @@ -352,89 +356,69 @@ IMAGE_NAME: WORD 0 IMAGE_HANDLER: BYTE 0 SAVE_SLOT3: BYTE 0 LEN_CNF: WORD 0 -A_LINES: WORD 0,0,0,0,0,0,0,0 +A_LINES: BLOCK CFG_FILE_LINES*2, 0 ;********************************************* CONTINUE: ; CNF файл прочитан, DE - длина CNF - LD (LEN_CNF),DE + LD (LEN_CNF),DE - LD HL,#C000 - LD DE,A_LINES - LD C,8 -LOOP_A: - LD B,120 ; строки не более 120 символов - EX DE,HL - LD (HL),E - INC HL - LD (HL),D - INC HL - EX DE,HL -LOOP_L: - LD A,(HL) - CP 13 - JR Z,N_LINE - CP 10 - JR Z,N_LINE - CP 0 - JP Z,END_CNF_ERROR - INC HL - DJNZ LOOP_L + LD HL,#C000 + LD DE,A_LINES + LD C,CFG_FILE_LINES +LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + EX DE,HL +LOOP_L: LD A,(HL) + CP 13 + JR Z,N_LINE + CP 10 + JR Z,N_LINE + AND A + JP Z,END_CNF_ERROR + INC HL + CP ';' + JR Z,N_LINE + DJNZ LOOP_L -N_LINE: - LD (HL),0 - INC HL - LD A,(HL) - CP 13 - JR Z,N_LINE - CP 10 - JR Z,N_LINE - DEC C - JR NZ,LOOP_A +N_LINE: LD (HL),0 + INC HL + LD A,(HL) + CP 13 + JR Z,N_LINE + CP 10 + JR Z,N_LINE + DEC C + JR NZ,LOOP_A ; выделено 8 строк в CNF ;************************************* + MACRO vROM_LOAD romLine, pageNumber + LD HL,(A_LINES + romLine) + LD A,(HL) + CP ';' + JR Z,.skip_load + LD A,pageNumber + CALL READ_FILE_1 + LD A,Spec_Page + OUT (SLOT3),A + JP C,ERROR_FILE +.skip_load: + ENDM - LD HL,(A_LINES+BASIC128_LINE) ; 2-я строка - имя файла BASIC128 - LD A,#42 - CALL READ_FILE_1 - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE - - LD HL,(A_LINES+BASIC_48_LINE) ; 3-я строка - имя файла BASIC 48 - LD A,#43 - CALL READ_FILE_1 - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE - - LD HL,(A_LINES+TRDOS_LINE) ; 4-я строка - имя файла TR-DOS - LD A,#44 - CALL READ_FILE_1 - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE - - LD HL,(A_LINES+EXP_LINE) ; 5-я строка - имя файла EXPANSION - LD A,#45 - CALL READ_FILE_1 - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE - - LD HL,(A_LINES+BIOS_LINE) ; 6-я строка - имя файла BIOS - LD A,#46 - CALL READ_FILE_1 - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE - - LD HL,(A_LINES+BIOS2_LINE) ; 7-я строка - имя файла BIOS2 - LD A,#47 - CALL READ_FILE_1 - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE + vROM_LOAD BASIC128_LINE, #42 ; 2-я строка - имя файла BASIC128 + vROM_LOAD BASIC_48_LINE, #43 ; 3-я строка - имя файла BASIC 48 + vROM_LOAD TRDOS_LINE, #44 ; 4-я строка - имя файла TR-DOS + vROM_LOAD EXP_LINE, #45 ; 5-я строка - имя файла EXPANSION + vROM_LOAD BIOS_LINE, #46 ; 6-я строка - имя файла BIOS + vROM_LOAD BIOS2_LINE, #47 ; 7-я строка - имя файла BIOS2 + ; vROM_LOAD _LINE, #42 ; 8-я строка - имя файла + ; vROM_LOAD _LINE, #42 ; 9-я строка - имя файла + ; vROM_LOAD _LINE, #42 ; 10-я строка - имя файла + ; vROM_LOAD _LINE, #42 ; 11-я строка - имя файла ; файлы считаны ;************************************* @@ -531,7 +515,6 @@ PARAM_E2: ;************************************ PARAM_END: - LD A,#E2 ; ROM-ID - BASIC 128 LD B,#42 ; page CALL SET_ROM @@ -587,10 +570,9 @@ SKIP_IMAGE: ;******************************************** +; out B - old ROM-page SET_ROM: - ; out B - old ROM-page DI - ; PUSH BC ; PUSH AF @@ -660,11 +642,11 @@ SET_ROM: ;******************************************** READ_IMAGE: LD DE,ONE_FILE - LD BC,128 + LD BC,FULL_FILE_NAME_LENGTH LDIR LD HL,ONE_FILE - LD A,1 + LD A,Dss.Open.R LD C,Dss.Open RST ToDSS RET C @@ -681,22 +663,20 @@ READ_IMAGE: .Load_TRD: LD A,(IMAGE_HANDLER) - LD C,Dss.Move_FP - LD B,2 + LD B,Dss.Move_FP.FrEnd LD HL,0 LD IX,0 + LD C,Dss.Move_FP RST ToDSS ; найти длину файла RET C PUSH IX POP DE -;--------------[new_code]--------------- call Get_RAM_Disk_E ret c - jp Load_IMAGE_File -;--------------------------------------- + Get_RAM_Disk_E: ; hl:de - размер файла в байтах LD A,D @@ -719,32 +699,29 @@ Get_RAM_Disk_E: JR Z,ERROR_NO_MEM PUSH AF ;*************************************** +;!FIXIT безопасно занимать рамдиски, чтоб пользователь не страдал ; освободить ram-disk e: .free_disk: DI - LD A,0 - LD C,BIOS.EMM_FN3 + XOR A ; RAM-Drive E: + LD C,BIOS.FreeMemRMD RST ToBIOS ; освободить e: -;!!!!!!!!!!!!!!!!!!!!!! ; назначать другой рамдрайв, свободный? -;*************************************** + POP AF LD B,A ; запросить память у bios-а - LD A,0 - LD C,BIOS.EMM_FN2 ; и подсоединить к e: + XOR A ; RAM-Drive E: + LD C,BIOS.GetMemRMD ; и подсоединить к e: RST ToBIOS JR C,ERROR_NO_MEM LD (MEM_BLK),A - -;--------------[new_code]--------------- - ret + RET ;--------------------------------------- Load_IMAGE_File: LD A,(IMAGE_HANDLER) - LD C,Dss.Move_FP - LD B,0 LD HL,0 LD IX,0 + LD BC,Dss.Move_FP.FrStart * 256 + Dss.Move_FP RST ToDSS ; установить указатель на 0 RET C @@ -765,7 +742,7 @@ Load_IMAGE_File: RST ToDSS JR C,ERROR_IN_READ - LD HL,PROGRES_IND ; loading progress + LD HL,PROGRES_IND ; loading progress LD C,Dss.PChars RST ToDSS @@ -778,12 +755,12 @@ Load_IMAGE_File: CP #FF JR NZ,.load_loop - LD HL,CR_LINE ; loading + LD HL,CR_LINE ; loading LD C,Dss.PChars RST ToDSS LD A,(IMAGE_HANDLER) - LD C,Dss.Close ; закрыть файл + LD C,Dss.Close ; закрыть файл RST ToDSS RET C @@ -791,9 +768,8 @@ Load_IMAGE_File: Set_RAM_Dsk_EtoA: DI - LD A,0 - LD B,0 - LD C,BIOS.RAMD_TO_DRV ; назначить e: на a: + XOR A + LD BC,0*256 + BIOS.RAMD_TO_DRV ; назначить e: на a: RST ToBIOS AND A RET @@ -808,7 +784,7 @@ ERROR_NO_MEM: RST ToDSS ERROR_IMAGE_X: LD A,(IMAGE_HANDLER) - LD C,Dss.Close ; закрыть файл + LD C,Dss.Close ; закрыть файл RST ToDSS SCF RET @@ -817,14 +793,12 @@ SAV_PG3X: db 0 ;******************************************** READ_FILE_1: LD DE,ONE_FILE - LD BC,128 - LDIR + LD BC,FULL_FILE_NAME_LENGTH LD HL,ONE_FILE OUT (SLOT3),A READ_FILE: - - LD A,1 + LD A,Dss.Open.R LD C,Dss.Open RST ToDSS RET C ; ошибка, если нет файла @@ -832,8 +806,8 @@ READ_FILE: LD (FILE_HANDLE),A LD A,(FILE_HANDLE) - LD HL,0C000h - LD DE,4000h + LD HL,#C000 + LD DE,#4000 LD C,Dss.Read RST ToDSS RET C ; ошибка при чтении @@ -845,7 +819,7 @@ READ_FILE: RST ToDSS POP DE ; длина считанных данных - RET ; ошибка при закрытии или Ok + RET ; ошибка при закрытии или Ok FILE_HANDLE: db 0 @@ -855,27 +829,24 @@ FILE_HANDLE: db 0 EXIT_TO_DSS: DI LD SP,#BFF0 - LD A,CNF_0 + LD A,CNF_PORT.CNF_0 OUT (SYS_PORT.OFF),A - ld a,(#FFF0) - out (SLOT0),a + LD A,(#FFF0) ;!HARDCODE + OUT (SLOT0),A - LD B,3 ; IBM_PAL - LD A,0 - LD C,#A6 ; SET_standard_PAL + XOR A + LD BC,3*256 + BIOS.SET_PAL_INIT ; SET IBM PAL RST ToBIOS - LD A,3 ; OPEN_TXT - LD B,0 - LD C,#50 + LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT + LD BC,0*256 + Dss.SetVMod RST ToDSS - LD C,#56 ; CLS + LD A,#20 LD DE,0 LD HL,#2050 - LD B,7 - LD A,#20 + LD BC,7*256 + Dss.Clear RST ToDSS LD HL,MSG_ZX_EXIT @@ -921,7 +892,7 @@ RESET_TO_ZX: cp #1E jr z,EXIT_TO_DSS - LD A,CNF_0 + LD A,CNF_PORT.CNF_0 OUT (SYS_PORT.ON),A ; System-page on & CNF = 0 ;-------------[TEST ATARIN]------------- @@ -958,19 +929,19 @@ RESET_TO_ZX: LD A,(Ret_fn_+2) XOR B LD B,A - LD A,Conf_port.RET_PORT - CALL SET_ROM ; включить возврат + LD A,ACEX.RET_PORT + CALL SET_ROM ; включить возврат - LD A,CNF_3 - OUT (SYS_PORT.ON),A ; System-page on & CNF = 3 + LD A,CNF_PORT.CNF_3 + OUT (SYS_PORT.ON),A ; System-page on & CNF = 3 XOR A - OUT (BorderColor),A ; border-0 - OUT (RGADR),A ; Screen-page = 0 - OUT (RGMOD),A ; Screen-mode-page = 0 - LD BC,1FFDh + OUT (BorderColor),A ; border-0 + OUT (RGADR),A ; Screen-page = 0 + OUT (RGMOD),A ; Screen-mode-page = 0 + LD BC,#1FFD OUT (C),A ; Scorpion-port = 0 - LD BC,7FFDh + LD BC,#7FFD OUT (C),A ; pentagon-port = 0 LD A,(Int_or_+2) @@ -978,88 +949,96 @@ RESET_TO_ZX: LD A,#FA ; original waits on JR NZ,ORIG1 LD A,#FE -ORIG1: - LD BC,Port_All_Mode +ORIG1: LD BC,Port_All_Mode OUT (C),A ; ACC-Off LD BC,CBL.SYS_PORT - LD A,0 + XOR A OUT (C),A ; CBL-off - LD A,#12 ; FDD-720 + LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 LD C,BIOS.FN_TURBO - RST #18 + RST ToBIOS_18 ;---------------[test!!!!!]------------- - LD C,BIOS.HDD_PART ; IDE-1/IDE-2 - LD A,0 ; --> IDE-1 - RST #18 +;!FIXIT разрулить режим спектрума на работу с любыми каналами и разделами + XOR A ; --> IDE-1 + LD C,BIOS.HDD_PART ; IDE-1/IDE-2 + RST ToBIOS_18 ;--------------------------------------- ;****************************** - XOR A ; Set ZX-Palette - LD B,2 - LD C,#A6 - RST 18h + XOR A + LD BC,2*256 + BIOS.SET_PAL_INIT ; Set ZX-Palette + RST ToBIOS_18 LD A,(Int_or_+2) - AND A ; 3 - JR NZ,Original - LD A,(Int_sc_+2) ; 1/2 + AND A ; 3 + JR NZ,Original + LD A,(Int_sc_+2) ; 1/2 Original: - LD C,#F2 ; -> INT for Pentagon or Scorpion - RST #18 + LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion + RST ToBIOS_18 LD HL,#4000 ; clear ZX-Spectrum screen LD DE,#4001 LD BC,#1AFF - LD (HL),L + LD (HL),L LDIR LD HL,#4104 ; Screen-1 - LD BC,#0480 LD E,0 - RST #18 + LD BC,4*256 + BIOS.LP_OPEN_S + RST ToBIOS_18 LD HL,#5104 ; Screen-2 - LD BC,#0480 LD E,0 - RST #18 + LD BC,4*256 + BIOS.LP_OPEN_S + RST ToBIOS_18 XOR A OUT (RGADR),A OUT (RGMOD),A ;************************************************ ; Инициализация страниц - +;!FIXIT через функцию биос попробовать DI - LD A,0 - OUT (SLOT0),A LD A,5 OUT (SLOT1),A - XOR A + OUT (SLOT0),A + LD BC,#1FFD OUT (C),A ; #1FFD LD B,#7F -LOOP_P1: - OUT (C),A ; #7FFD - OUT (SLOT3),A - INC A - CP 8 - JR NZ,LOOP_P1 - LD B,#1F - LD A,#10 - OUT (C),A ; #1FFD - LD A,8 - LD B,#7F + ;!TEST + LD A,8 +LOOP_P1: + DEC A + OUT (C),A ; #7FFD + OUT (SLOT3),A + JR NZ,LOOP_P1 + + ;OUT (C),A ; #7FFD + ;OUT (SLOT3),A + ;INC A + ;CP 8 + ;JR NZ,LOOP_P1 + ; + + LD B,#1F + LD A,#10 + OUT (C),A ; #1FFD + LD B,#7F + LD A,8 LOOP_P2: - OUT (C),A ; #7FFD - OUT (SLOT3),A - INC A - CP 16 - JR NZ,LOOP_P2 + OUT (C),A ; #7FFD + OUT (SLOT3),A + INC A + CP 16 + JR NZ,LOOP_P2 + XOR A OUT (C),A ; #7FFD LD B,#1F @@ -1076,19 +1055,19 @@ LOOP_P2: LD A,(Line312_+2) OUT (Port_VSYNC),A - LD A,(P_7FFD_+2) ; - Pentagon off + LD A,(P_7FFD_+2) ; - Pentagon off LD BC,#7FFD OUT (C),A - LD A,(Turbo__+2) ; 3 - turbo + LD A,(Turbo__+2) ; 3 - turbo - LD HL,(Sprint_+2) ; +04h - Sprinter-ZX + LD HL,(Sprint_+2) ; +04h - Sprinter-ZX ADD A,L ; +0Ch - Scorpion/Pentagon - LD HL,(P_1FFD_+2) ; +40h - Scorpion port off + LD HL,(P_1FFD_+2) ; +40h - Scorpion port off ADD A,L - LD HL,(Mem512_+2) ; +80h - Pentagon-512 on + LD HL,(Mem512_+2) ; +80h - Pentagon-512 on ADD A,L LD E,A @@ -1102,7 +1081,7 @@ PROG_STARTS: LD A,2 OUT (SLOT2),A LD A,E - OUT (SYS_PORT.OFF),A ; System-port + OUT (SYS_PORT.OFF),A LD A,D AND A JP Z,0 @@ -1151,7 +1130,7 @@ Ret_fn: db "ret-fn", 255,0 ;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn CNF_FILE: db "SPECTRUM.CFG",0 -ONE_FILE: ds 128 +ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH, 0 ; ; ; From 4e38b3e1ec6d0d147ac57fdddd3c13b968911fd5 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 24 Jun 2023 06:28:46 +1000 Subject: [PATCH 02/43] ... --- spectrum.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spectrum.asm b/spectrum.asm index 8b0ddb8..1f279ec 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -878,7 +878,7 @@ NO_RET_FN: IN A,(SLOT2) ; сохранить страницу LD (#FFF2),A ; программы для возврата IN A,(SLOT3) - LD (#FFF3),A ; + LD (#FFF3),A ; ;******************************************** From 29b442dbe665296fc4a709c2c3a5b3b03f018a27 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 24 Jun 2023 23:35:41 +1000 Subject: [PATCH 03/43] New vROM support, added set CONFIG_DE, refactoring --- spectrum.asm | 1660 ++++++++++++++++++++++++-------------------------- trdscl.a80 | 466 +++++++------- 2 files changed, 1032 insertions(+), 1094 deletions(-) diff --git a/spectrum.asm b/spectrum.asm index 1f279ec..39a7e3d 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -1,37 +1,42 @@ -/* - - .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. - | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. | - | | _______ | || | ______ | || | _________ | || | ______ | || | _________ | || | _______ | || | _____ _____ | || | ____ ____ | | - | | / ___ | | || | |_ __ \ | || | |_ ___ | | || | .' ___ | | || | | _ _ | | || | |_ __ \ | || ||_ _||_ _|| || ||_ \ / _|| | - | | | (__ \_| | || | | |__) | | || | | |_ \_| | || | / .' \_| | || | |_/ | | \_| | || | | |__) | | || | | | | | | || | | \/ | | | - | | '.___`-. | || | | ___/ | || | | _| _ | || | | | | || | | | | || | | __ / | || | | ' ' | | || | | |\ /| | | | - | | |`\____) | | || | _| |_ | || | _| |___/ | | || | \ `.___.'\ | || | _| |_ | || | _| | \ \_ | || | \ `--' / | || | _| |_\/_| |_ | | - | | |_______.' | || | |_____| | || | |_________| | || | `._____.' | || | |_____| | || | |____| |___| | || | `.__.' | || ||_____||_____|| | - | | | || | | || | | || | | || | | || | | || | | || | | | - | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' | - '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' - - */ -/* -To do: - SYS: - [ ] - задавать CONFIG_DE перед запуском спектрума и в перехватчике ресета - images: - [+] - Load SCL image - [ ] - Load TAP image - [ ] - Load SNA file + ; - features: - [ ] - When image filename exist, then instead of SPECTRUM.CFG loads image_filename.cfg if exist too - [ ] - Выдавать сообщения на языке установленном в CMOS - [ ] - Менять спектрумовскую палитру +; .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. +; | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. | +; | | _______ | || | ______ | || | _________ | || | ______ | || | _________ | || | _______ | || | _____ _____ | || | ____ ____ | | +; | | / ___ | | || | |_ __ \ | || | |_ ___ | | || | .' ___ | | || | | _ _ | | || | |_ __ \ | || ||_ _||_ _|| || ||_ \ / _|| | +; | | | (__ \_| | || | | |__) | | || | | |_ \_| | || | / .' \_| | || | |_/ | | \_| | || | | |__) | | || | | | | | | || | | \/ | | | +; | | '.___`-. | || | | ___/ | || | | _| _ | || | | | | || | | | | || | | __ / | || | | ' ' | | || | | |\ /| | | | +; | | |`\____) | | || | _| |_ | || | _| |___/ | | || | \ `.___.'\ | || | _| |_ | || | _| | \ \_ | || | \ `--' / | || | _| |_\/_| |_ | | +; | | |_______.' | || | |_____| | || | |_________| | || | `._____.' | || | |_____| | || | |____| |___| | || | `.__.' | || ||_____||_____|| | +; | | | || | | || | | || | | || | | || | | || | | || | | | +; | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' | +; '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' +; + +/* + SYS + [+] - задавать CONFIG_DE перед запуском спектрума и в перехватчике ресета + [+] - поддержка новых образов vROM + [+] - добавлена совместимость с демо ATARIN, успользующее неполную дешифрацию порта AY + [ ] - проверять метку ZX,если мы не грузим 3 основных vROM + [ ] - в конфиге могут быть пропущены некоторые vROM,они не загружаются +; + Images + [+] - Load SCL image + [ ] - Load TAP image + [ ] - Load SNA file +; + Features + [+] - Если выбрано ret-zx,то при нажатии на пробел сразу после CAD вернёт в DSS + [ ] - When image filename exist,then instead of SPECTRUM.CFG loads image_filename.cfg if exist too + [ ] - Выдавать сообщения на языке установленном в CMOS + [ ] - Менять спектрумовскую палитру */ ; ; Compilation parameters ;*************************************** - DEVICE SPRINTER + DEVICE SPRINTER ; MMU 2 e, 0 ; нулевая страница в банку 2 и проверка на границы ; OUTPUT './Build/new.bin' ;*************************************** @@ -39,9 +44,9 @@ To do: ; ; Defines section ;*************************************** - ifndef DEBUG : define DEBUG 0 : endif - ifndef EMULATOR 0 : define EMULATOR 0 : endif - define EXE_HEADER 1 + IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF + IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF + DEFINE EXE_HEADER 1 ; define NEED_LOADER 1 ; define NeedSafePort_Y 0 ;*************************************** @@ -50,52 +55,52 @@ To do: ; ; Included constants section ;*************************************** - include 'Shared_Includes/constants/sp2000.inc' - include 'Shared_Includes/constants/dss_equ.inc' - include 'Shared_Includes/constants/BIOS_equ.inc' + INCLUDE 'Shared_Includes/constants/sp2000.inc' + INCLUDE 'Shared_Includes/constants/dss_equ.inc' + INCLUDE 'Shared_Includes/constants/BIOS_equ.inc' ;*************************************** ; ; ; Included macroses section ;*************************************** - include 'Shared_Includes/macroses/macros.z80' - include 'Shared_Includes/macroses/accelerator.z80' + INCLUDE 'Shared_Includes/macroses/macros.z80' + INCLUDE 'Shared_Includes/macroses/accelerator.z80' ;*************************************** ; ; Included LUA section ;*************************************** - includelua + INCLUDELUA ;*************************************** ; ; ; Standart EQU section ;*************************************** -org_addr EQU #8000+CLP_Buffer -code_addr EQU BEGIN -stack_point EQU #BFFE -stack_buffer EQU 64 -program_start EQU BEGIN +org_addr EQU #8000+CLP_Buffer +code_addr EQU BEGIN +stack_point EQU #BFFE +stack_buffer EQU 64 +program_start EQU BEGIN ;*************************************** ; ; ; Program EQU section ;*************************************** -FULL_FILE_NAME_LENGTH EQU 128 ; длина строки пути к файлу -MAX_LINE_LENGTH EQU 120 ; длина строки CFG файла -CFG_FILE_LINES EQU 8 -NAME_CFG_LINE EQU 0 -BASIC128_LINE EQU 2 -BASIC_48_LINE EQU 4 -TRDOS_LINE EQU 6 -EXP_LINE EQU 8 -BIOS_LINE EQU 10 -BIOS2_LINE EQU 12 -;XXX_LINE EQU ?? -OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 +FULL_FILE_NAME_LENGTH EQU 128 ; длина строки пути к файлу +MAX_LINE_LENGTH EQU 120 ; длина строки CFG файла +CFG_FILE_LINES EQU 8 +NAME_CFG_LINE EQU 0 +BASIC128_LINE EQU 2 +BASIC_48_LINE EQU 4 +TRDOS_LINE EQU 6 +EXP_LINE EQU 8 +BIOS_LINE EQU 10 +BIOS2_LINE EQU 12 +;XXX_LINE EQU ?? +OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 ;*************************************** ; @@ -103,1051 +108,992 @@ OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 ; ; Program EQU section ;*************************************** - INCLUDE 'version.inc' + INCLUDE 'version.inc' ;*************************************** ; ; ; Code start section ;[]-------------------------------------------------------------------[] - IF EXE_HEADER - include 'Shared_Includes/constants/EXE_Header.z80' - ORG org_addr - ELSE - ORG org_addr - CLP_Buffer - ENDIF + IF EXE_HEADER + INCLUDE 'Shared_Includes/constants/EXE_Header.z80' + ORG org_addr + ELSE + ORG org_addr-CLP_Buffer + ENDIF BEGIN: - LD (LINE_X),IX + LD (LINE_X),IX - LD HL,START_MSG - LD C,Dss.PChars - RST ToDSS + LD HL,START_MSG + LD C,Dss.PChars + RST ToDSS - IN A,(SLOT3) - LD (SAVE_SLOT3),A + IN A,(SLOT3) + LD (SAVE_SLOT3),A - JP COMAND_LINE + JP COMAND_LINE ERROR_FILE: - LD HL,ERROR_FILE_MSG_X - LD C,Dss.PChars - RST ToDSS - LD HL,ONE_FILE - LD C,Dss.PChars - RST ToDSS + LD HL,ERROR_FILE_MSG_X + LD C,Dss.PChars + RST ToDSS + LD HL,ONE_FILE + LD C,Dss.PChars + RST ToDSS - LD HL,ERROR_FILE_MSG - JP EXIT_ALL + LD HL,ERROR_FILE_MSG + JP EXIT_ALL END_CNF_ERROR: - LD HL,ERROR_CNF -; JP EXIT_ALL + LD HL,ERROR_CNF + ;JP EXIT_ALL EXIT_ALL: ; PUSH HL ;---------------------[test!!!!!]------- - ; LD A,0 - ; LD C,BIOS.EMM_FN3 - ; RST ToBIOS ; освободить e: - ; LD A,(SAVE_SLOT3) - ; OUT (SLOT3),A + ;LD A,0 + ;LD C,BIOS.EMM_FN3 + ;RST ToBIOS ; освободить e: + ;LD A,(SAVE_SLOT3) + ;OUT (SLOT3),A ;--------------------------------------- -; POP HL - LD C,Dss.PChars - RST ToDSS + ;POP HL + LD C,Dss.PChars + RST ToDSS ;---------------------[test!!!!!]------- - ; ld a,(CurDisk_Save) - ; ld c,Dss.ChDisk - ; RST ToDSS - ; jr nc,1f + ;ld a,(CurDisk_Save) + ;ld c,Dss.ChDisk + ;RST ToDSS + ;jr nc,1f - ; ld hl,ERROR_FILE2_MSG - ; LD C,Dss.PChars - ; RST ToDSS + ;ld hl,ERROR_FILE2_MSG + ;LD C,Dss.PChars + ;RST ToDSS ;--------------------------------------- -1: LD BC,Dss.Exit - RST ToDSS +1: LD BC,Dss.Exit + RST ToDSS +COMAND_LINE: LD HL,(LINE_X) + LD A,(HL) + AND A + JR Z,NO_FIL + DEC A + JR Z,NO_FIL -COMAND_LINE: - LD HL,(LINE_X) - LD A,(HL) - AND A - JR Z,NO_FIL - DEC A - JR Z,NO_FIL + INC HL + INC HL - INC HL - INC HL + CALL FIND_FILES - CALL FIND_FILES + LD HL,(CNF_NAME) + LD A,Spec_Page + CALL READ_FILE_1 + JP NC,CONTINUE - LD HL,(CNF_NAME) - LD A,Spec_Page - CALL READ_FILE_1 - JP NC,CONTINUE +NO_FIL: LD HL,CNF_FILE + LD A,Spec_Page + CALL READ_FILE_1 + JR C,ERROR_FILE + JP CONTINUE -NO_FIL: LD HL,CNF_FILE - LD A,Spec_Page - CALL READ_FILE_1 - JR C,ERROR_FILE - JP CONTINUE +FIND_FILES: PUSH HL -FIND_FILES: - PUSH HL + LD (X_FILE),HL + LD DE,0 + LD (IMAGE_FLAG),DE + LD (IMAGE_NAME),DE + LD (CNF_NAME),DE + LD B,A + JR NO_NEXT - LD (X_FILE),HL - LD DE,0 - LD (IMAGE_FLAG),DE - LD (IMAGE_NAME),DE - LD (CNF_NAME),DE - LD B,A - JR NO_NEXT +FIND_T_LOOP: LD A,(HL) + INC HL + CP "." + CALL Z,POINT_F + CP 20h + CALL Z,BLANK_X + CP 9 + CALL Z,BLANK_X + CP 10 + CALL Z,BLANK_X1 + CP 13 + CALL Z,BLANK_X1 + JR Z,END_NO_IMAGE +NO_NEXT: DJNZ FIND_T_LOOP -FIND_T_LOOP: - LD A,(HL) - INC HL - CP "." - CALL Z,POINT_F - CP 20h - CALL Z,BLANK_X - CP 9 - CALL Z,BLANK_X - CP 10 - CALL Z,BLANK_X1 - CP 13 - CALL Z,BLANK_X1 - JR Z,END_NO_IMAGE +END_NO_IMAGE: POP HL + LD A,(CNF_NAME+1) + AND A + RET NZ + LD A,(IMAGE_NAME+1) + AND A + LD DE,(X_FILE) + JR Z,CNF_ALL + LD DE,CNF_FILE +CNF_ALL: LD (CNF_NAME),DE + RET -NO_NEXT: - DJNZ FIND_T_LOOP +BLANK_X: LD (X_FILE),HL ; найден пробел, имя файла - снова +BLANK_X1: DEC HL + LD (HL),0 + INC HL + RET -END_NO_IMAGE: - POP HL - LD A,(CNF_NAME+1) - AND A - RET NZ - LD A,(IMAGE_NAME+1) - AND A - LD DE,(X_FILE) - JR Z,CNF_ALL - LD DE,CNF_FILE -CNF_ALL: - LD (CNF_NAME),DE - RET - -BLANK_X: - LD (X_FILE),HL ; найден пробел, имя файла - снова -BLANK_X1: - DEC HL - LD (HL),0 - INC HL - RET - ;------------------------------------[v] -POINT_F: - LD A,(HL) +POINT_F: LD A,(HL) + CP 't' + JR Z,.TRD + CP 'T' + JR Z,.TRD - CP 't' - JR Z,.TRD - CP 'T' - JR Z,.TRD + CP 's' + JR Z,.SCL + CP 'S' + JR Z,.SCL - CP 's' - JR Z,.SCL - CP 'S' - JR Z,.SCL + CP 'z' + JR Z,.CNF + CP 'Z' + JR Z,.CNF +.exit: DEC HL + LD A,(HL) + INC HL + RET - CP 'z' - JR Z,.CNF - CP 'Z' - JR Z,.CNF -.exit: - DEC HL - LD A,(HL) - INC HL - RET +.SCL: LD DE,IMAGE_FLAG + LD A,1 + LD (DE),A +.TRD: LD DE,(X_FILE) + LD (IMAGE_NAME),DE + JR .exit -.SCL: - ld de,IMAGE_FLAG - ld a,1 - ld (de),a -.TRD: - LD DE,(X_FILE) - LD (IMAGE_NAME),DE - JR .exit - -.CNF: - LD DE,(X_FILE) - LD (CNF_NAME),DE - JR .exit +.CNF: LD DE,(X_FILE) + LD (CNF_NAME),DE + JR .exit ;------------------------------------[^] -LINE_ZX: DB "ZX Spectrum PAGES",0 -LEN_LINE_ZX EQU $-LINE_ZX +LINE_ZX: DZ 'ZX Spectrum PAGES' +LEN_LINE_ZX EQU $-LINE_ZX ;********************************************* -MSG_EXIT1: - db 13,10,"EXIT without run",13,10,0 -MSG_EXIT2: - db 13,10,"Выход без запуска" -CR_LINE: - db 13,10,0 - -START_MSG: - db 13,10,'SPECTRUM launcher v',SP_VERSION,'.' - db 13,10,'(c) Sprinter Team.' - db 13,10,'Written by Ivan Mak.' - db 13,10,'Modified by Anatoliy Belyanskiy.' - db 13,10,BUILD_DATE,' - ', __TIME__, 13, 10, 0 - +MSG_EXIT1: DB 13,10,"EXIT without run",13,10,0 +MSG_EXIT2: DB 13,10,"Выход без запуска" +CR_LINE: DB 13,10,0 +START_MSG: DB 13,10,'SPECTRUM launcher v',SP_VERSION,'.' + DB 13,10,'(c) Sprinter Team.' + DB 13,10,'Written by Ivan Mak.' + DB 13,10,'Modified by Anatoliy Belyanskiy.' + DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 ERROR_FILE_MSG_X: - db 13,10,"Error in file: ",0 + DB 13,10,"Error in file: ",0 ERROR_FILE2_MSG_X: - db 13,10,"Ошибка в файле: ",0 -ERROR_FILE_MSG: - db 13,10,"Unable to work.",0 + DB 13,10,"Ошибка в файле: ",0 +ERROR_FILE_MSG: DB 13,10,"Unable to work.",0 ERROR_FILE2_MSG: - db 13,10,"Работа невозможна.",0 - -ERROR_CNF: - db 13,10,"Unexpected CNF file end.",0 -ERROR_CNF2: - db 13,10,"Неожиданный конец CNF файла.",0 - -NO_MEM_MSG: - db 13,10,"The spesial pages are already used." - db 13,10,"Clear memory and restart spectrum.exe again.",0 -NO_MEM_MSG2: - db 13,10,"Специальные страницы уже заняты." - db 13,10,"Очистите память и перезапустите spectrum.exe снова.",0 - -MSG_NORMAL: - db 13,10,"All files has been read successfully.",13,10 - db "MODE: ",0 -MSG_NORMAL2: - db 13,10,"Все файлы считаны нормально.",13,10 - db "Конфигурация: ",0 -MSG_NO_MEM: - db 13,10,"No memory space for image or",0 -MSG_NO_MEM2: - db 13,10,"Не хватает памяти для образа или",0 -MSG_LOAD_IMAGE: - db 13,10,"Image loading: ",0 + DB 13,10,"Работа невозможна.",0 +ERROR_CNF: DB 13,10,"Unexpected CNF file end.",0 +ERROR_CNF2: DB 13,10,"Неожиданный конец CNF файла.",0 +NO_MEM_MSG: DB 13,10,"The spesial pages are already used." + DB 13,10,"Clear memory and restart spectrum.exe again.",0 +NO_MEM_MSG2: DB 13,10,"Специальные страницы уже заняты." + DB 13,10,"Очистите память и перезапустите spectrum.exe снова.",0 +MSG_NORMAL: DB 13,10,"All files has been read successfully.",13,10 + DB "MODE: ",0 +MSG_NORMAL2: DB 13,10,"Все файлы считаны нормально.",13,10 + DB "Конфигурация: ",0 +MSG_NO_MEM: DB 13,10,"No memory space for image or",0 +MSG_NO_MEM2: DB 13,10,"Не хватает памяти для образа или",0 +MSG_LOAD_IMAGE: DB 13,10,"Image loading: ",0 MSG_LOAD_IMAGE2: - db 13,10,"Загрузка образа: ",0 + DB 13,10,"Загрузка образа: ",0 +MSG_ZX_EXIT: DB 13,10,"EXIT from Spectrum configuration",0 +MSG_ZX_EXIT2: DB 13,10,"EXIT from ZX mode",0 +PROGRES_IND: DB '░',0 ; 176 -MSG_ZX_EXIT: - db 13,10,"EXIT from Spectrum configuration",0 -MSG_ZX_EXIT2: - db 13,10,"EXIT from ZX mode",0 - -PROGRES_IND: - db '░',0 ; 176 - -MEM_BLK: BYTE 0 -LINE_X: WORD 0 -X_FILE: WORD 0 -CNF_NAME: WORD 0 -IMAGE_FLAG: BYTE 0 ; 0 - trd, scl - 1, sna - 2, tap - 3 -IMAGE_NAME: WORD 0 +MEM_BLK: BYTE 0 +LINE_X: WORD 0 +X_FILE: WORD 0 +CNF_NAME: WORD 0 +IMAGE_FLAG: BYTE 0 ; 0 - trd, scl - 1, sna - 2, tap - 3 +IMAGE_NAME: WORD 0 IMAGE_HANDLER: BYTE 0 -SAVE_SLOT3: BYTE 0 -LEN_CNF: WORD 0 -A_LINES: BLOCK CFG_FILE_LINES*2, 0 +SAVE_SLOT3: BYTE 0 +LEN_CNF: WORD 0 +A_LINES: BLOCK CFG_FILE_LINES*2,0 ;********************************************* -CONTINUE: ; CNF файл прочитан, DE - длина CNF - LD (LEN_CNF),DE +CONTINUE: LD (LEN_CNF),DE ; CNF файл прочитан, DE - длина CNF - LD HL,#C000 - LD DE,A_LINES - LD C,CFG_FILE_LINES -LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки - EX DE,HL - LD (HL),E - INC HL - LD (HL),D - INC HL - EX DE,HL -LOOP_L: LD A,(HL) - CP 13 - JR Z,N_LINE - CP 10 - JR Z,N_LINE - AND A - JP Z,END_CNF_ERROR - INC HL - CP ';' - JR Z,N_LINE - DJNZ LOOP_L - -N_LINE: LD (HL),0 - INC HL - LD A,(HL) - CP 13 - JR Z,N_LINE - CP 10 - JR Z,N_LINE - DEC C - JR NZ,LOOP_A + LD HL,#C000 + LD DE,A_LINES + LD C,CFG_FILE_LINES +LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + EX DE,HL +LOOP_L: LD A,(HL) + CP 13 + JR Z,N_LINE + CP 10 + JR Z,N_LINE + AND A + JP Z,END_CNF_ERROR + INC HL + CP ';' + JR Z,N_LINE + DJNZ LOOP_L +N_LINE: LD (HL),0 + INC HL + LD A,(HL) + CP 13 + JR Z,N_LINE + CP 10 + JR Z,N_LINE + DEC C + JR NZ,LOOP_A ; выделено 8 строк в CNF ;************************************* - MACRO vROM_LOAD romLine, pageNumber - LD HL,(A_LINES + romLine) - LD A,(HL) - CP ';' - JR Z,.skip_load - LD A,pageNumber - CALL READ_FILE_1 - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE + MACRO vROM_LOAD romLine,pageNumber + LD HL,(A_LINES+romLine) + LD A,(HL) + CP ';' + JR Z,.skip_load + LD A,pageNumber + CALL READ_FILE_1 + LD A,Spec_Page + OUT (SLOT3),A + JP C,ERROR_FILE .skip_load: - ENDM + ENDM - vROM_LOAD BASIC128_LINE, #42 ; 2-я строка - имя файла BASIC128 - vROM_LOAD BASIC_48_LINE, #43 ; 3-я строка - имя файла BASIC 48 - vROM_LOAD TRDOS_LINE, #44 ; 4-я строка - имя файла TR-DOS - vROM_LOAD EXP_LINE, #45 ; 5-я строка - имя файла EXPANSION - vROM_LOAD BIOS_LINE, #46 ; 6-я строка - имя файла BIOS - vROM_LOAD BIOS2_LINE, #47 ; 7-я строка - имя файла BIOS2 - ; vROM_LOAD _LINE, #42 ; 8-я строка - имя файла - ; vROM_LOAD _LINE, #42 ; 9-я строка - имя файла - ; vROM_LOAD _LINE, #42 ; 10-я строка - имя файла - ; vROM_LOAD _LINE, #42 ; 11-я строка - имя файла + vROM_LOAD BASIC128_LINE, #42 ; 2-я строка - имя файла BASIC128 + vROM_LOAD BASIC_48_LINE, #43 ; 3-я строка - имя файла BASIC 48 + vROM_LOAD TRDOS_LINE, #44 ; 4-я строка - имя файла TR-DOS + vROM_LOAD EXP_LINE, #45 ; 5-я строка - имя файла EXPANSION + vROM_LOAD BIOS_LINE, #46 ; 6-я строка - имя файла BIOS + vROM_LOAD BIOS2_LINE, #47 ; 7-я строка - имя файла BIOS2 + ;vROM_LOAD _LINE, #42 ; 8-я строка - имя файла + ;vROM_LOAD _LINE, #42 ; 9-я строка - имя файла + ;vROM_LOAD _LINE, #42 ; 10-я строка - имя файла + ;vROM_LOAD _LINE, #42 ; 11-я строка - имя файла ; файлы считаны ;************************************* - LD HL,MSG_NORMAL - LD C,Dss.PChars - RST ToDSS + LD HL,MSG_NORMAL + LD C,Dss.PChars + RST ToDSS - LD HL,(A_LINES+NAME_CFG_LINE) - LD C,Dss.PChars - RST ToDSS + LD HL,(A_LINES+NAME_CFG_LINE) + LD C,Dss.PChars + RST ToDSS - LD HL,CR_LINE - LD C,Dss.PChars - RST ToDSS + LD HL,CR_LINE + LD C,Dss.PChars + RST ToDSS -; LD A,(SAVE_SLOT3) -; OUT (SLOT3),A + ;LD A,(SAVE_SLOT3) + ;OUT (SLOT3),A ;************************************* - LD A,Spec_Page - OUT (SLOT3),A - LD HL,(A_LINES+OPTIONS_LINE) ; строка параметров + LD A,Spec_Page + OUT (SLOT3),A + LD HL,(A_LINES+OPTIONS_LINE) ; строка параметров +LOOP_PAR1: LD A,(HL) + CP "/" + JR Z,PARAM_TEST + CP 0 + JR Z,PARAM_END + CP 13 + JR Z,PARAM_END + CP 10 + JR Z,PARAM_END + INC HL + JR LOOP_PAR1 -LOOP_PAR1: - LD A,(HL) - CP "/" - JR Z,PARAM_TEST - CP 0 - JR Z,PARAM_END - CP 13 - JR Z,PARAM_END - CP 10 - JR Z,PARAM_END - INC HL - JR LOOP_PAR1 +PARAM_TEST: INC HL + PUSH HL -PARAM_TEST: - INC HL - PUSH HL + LD IX,PARAMS +NEXT_PAR: LD E,(IX) + LD D,(IX+1) - LD IX,PARAMS -NEXT_PAR: - LD E,(IX) - LD D,(IX+1) +LOOP_PAR2: LD A,(DE) + CP (HL) + JR NZ,PARAM_E1 + INC HL + INC DE + JR LOOP_PAR2 -LOOP_PAR2: - LD A,(DE) - CP (HL) - JR NZ,PARAM_E1 - INC HL - INC DE - JR LOOP_PAR2 +PARAM_E1: CP 255 + JR NZ,NO_PAR + LD A,(HL) + CP 20h + JR Z,PARAM_E2 + CP 0 + JR Z,PARAM_E2 + CP 13 + JR Z,PARAM_E2 +NO_PAR: POP HL + PUSH HL + INC IX + INC IX + INC IX + INC IX + LD A,(IX+1) + AND A + JR NZ,NEXT_PAR + POP HL + JR LOOP_PAR1 -PARAM_E1: - CP 255 - JR NZ,NO_PAR - LD A,(HL) - CP 20h - JR Z,PARAM_E2 - CP 0 - JR Z,PARAM_E2 - CP 13 - JR Z,PARAM_E2 -NO_PAR: - POP HL - PUSH HL - INC IX - INC IX - INC IX - INC IX - LD A,(IX+1) - AND A - JR NZ,NEXT_PAR - POP HL - JR LOOP_PAR1 +PARAM_E2: EX (SP),HL ; новое HL - сохраняется! -PARAM_E2: - EX (SP),HL ; новое HL - сохраняется! + LD A,(IX+3) + LD (IX+2),A ; parameter alternate! - LD A,(IX+3) - LD (IX+2),A ; parameter alternate! + LD L,(IX) + LD H,(IX+1) - LD L,(IX) - LD H,(IX+1) + LD C,Dss.PChars + RST ToDSS - LD C,Dss.PChars - RST ToDSS - - POP HL - JR LOOP_PAR1 + POP HL + JR LOOP_PAR1 ;************************************ -PARAM_END: - LD A,#E2 ; ROM-ID - BASIC 128 - LD B,#42 ; page - CALL SET_ROM +PARAM_END: LD A,#E2 ; ROM-ID - BASIC 128 + LD B,#42 ; page + CALL SET_ROM - LD A,#E3 ; ROM-ID - BASIC 48 - LD B,#43 ; page - CALL SET_ROM + LD A,#E3 ; ROM-ID - BASIC 48 + LD B,#43 ; page + CALL SET_ROM - LD A,#E1 ; ROM-ID - TR-DOS - LD B,#44 ; page - CALL SET_ROM + LD A,#E1 ; ROM-ID - TR-DOS + LD B,#44 ; page + CALL SET_ROM - LD A,#E0 ; ROM-ID - EXPANSION - LD B,#45 ; page - CALL SET_ROM + LD A,#E0 ; ROM-ID - EXPANSION + LD B,#45 ; page + CALL SET_ROM - LD A,#EB ; ROM-ID - BIOS-1 - LD B,#46 ; page - CALL SET_ROM + LD A,#EB ; ROM-ID - BIOS-1 + LD B,#46 ; page + CALL SET_ROM - LD A,#EF ; ROM-ID - BIOS-2 - LD B,#47 ; page - CALL SET_ROM + LD A,#EF ; ROM-ID - BIOS-2 + LD B,#47 ; page + CALL SET_ROM - LD HL,(IMAGE_NAME) - LD A,H - OR L - JP Z,SKIP_IMAGE + LD HL,(IMAGE_NAME) + LD A,H + OR L + JP Z,SKIP_IMAGE - LD C,SLOT3 - IN B,(C) - PUSH BC + LD C,SLOT3 + IN B,(C) + PUSH BC - CALL READ_IMAGE - POP BC - OUT (C),B - JP C,ERROR_FILE + CALL READ_IMAGE + POP BC + OUT (C),B + JP C,ERROR_FILE -SKIP_IMAGE: - LD A,(No_run_+2) - AND A - LD HL,MSG_EXIT1 - JP Z,EXIT_ALL +SKIP_IMAGE: LD A,(No_run_+2) + AND A + LD HL,MSG_EXIT1 + JP Z,EXIT_ALL - JP SET_RELOAD_PROG + JP SET_RELOAD_PROG -; LD HL,MSG_NORMAL -; JP EXIT_ALL - -;*************************************************** - -; JP 0 + ;LD HL,MSG_NORMAL + ;JP EXIT_ALL +;******************************************** + ;JP 0 ;******************************************** ; out B - old ROM-page -SET_ROM: - DI -; PUSH BC -; PUSH AF +SET_ROM: DI + ;PUSH BC + ;PUSH AF -; LD A,CNF_0 -; OUT (SYS_PORT.ON),A -; LD A,10h -; LD BC,7FFDh -; OUT (C),A + ;LD A,CNF_0 + ;OUT (SYS_PORT.ON),A + ;LD A,10h + ;LD BC,7FFDh + ;OUT (C),A -; POP AF -; POP BC + ;POP AF + ;POP BC -; LD C,0F8h -; CALL 3D13h + ;LD C,0F8h + ;CALL 3D13h -; PUSH BC -; PUSH AF + ;PUSH BC + ;PUSH AF -; LD A,0 -; LD BC,7FFDh -; OUT (C),A -; LD A,CNF_0 -; OUT (SYS_PORT.OFF),A -; -; POP AF -; POP BC -; RET + ;LD A,0 + ;LD BC,7FFDh + ;OUT (C),A + ;LD A,CNF_0 + ;OUT (SYS_PORT.OFF),A - EX AF,AF' + ;POP AF + ;POP BC + ;RET - IN A,(SLOT3) - PUSH AF + EX AF,AF' - LD A,DCP_PAGE ; установить новую - OUT (SLOT3),A + IN A,(SLOT3) + PUSH AF - LD A,(#C400) ; сохранить то что было - LD L,A - LD A,(#C600) - LD H,A + LD A,DCP_PAGE ; установить новую + OUT (SLOT3),A - EX AF,AF' ; страница + LD A,(#C400) ; сохранить то что было + LD L,A + LD A,(#C600) + LD H,A - LD (#C400),A ; установить порт ROM - LD (#C600),A - EX AF,AF' + EX AF,AF' ; страница - LD A,B - LD BC,0 - EX AF,AF' - IN A,(C) - EX AF,AF' - OUT (C),A ; установить новый ROM - EX AF,AF' - LD B,A + LD (#C400),A ; установить порт ROM + LD (#C600),A + EX AF,AF' - LD A,L - LD (#C400),A ; вернуть порт - LD A,H - LD (#C600),A ; вернуть порт + LD A,B + LD BC,0 + EX AF,AF' + IN A,(C) + EX AF,AF' + OUT (C),A ; установить новый ROM + EX AF,AF' + LD B,A - POP AF - OUT (SLOT3),A + LD A,L + LD (#C400),A ; вернуть порт + LD A,H + LD (#C600),A ; вернуть порт - RET + POP AF + OUT (SLOT3),A + RET ;******************************************** -READ_IMAGE: - LD DE,ONE_FILE - LD BC,FULL_FILE_NAME_LENGTH - LDIR - LD HL,ONE_FILE - LD A,Dss.Open.R - LD C,Dss.Open - RST ToDSS - RET C +READ_IMAGE: LD DE,ONE_FILE + LD BC,FULL_FILE_NAME_LENGTH + LDIR + LD HL,ONE_FILE - LD (IMAGE_HANDLER),A + LD A,Dss.Open.R + LD C,Dss.Open + RST ToDSS + RET C - ld a,(IMAGE_FLAG) - and a - jr z,.Load_TRD + LD (IMAGE_HANDLER),A - CP 1 ; check if SCL - jp z,Load_SCL -; jp Error_Flag ;!!!!!!!!!!!!!!!! + LD A,(IMAGE_FLAG) + AND A + JR Z,.Load_TRD -.Load_TRD: - LD A,(IMAGE_HANDLER) - LD B,Dss.Move_FP.FrEnd - LD HL,0 - LD IX,0 - LD C,Dss.Move_FP - RST ToDSS ; найти длину файла - RET C + CP 1 ; check if SCL + JP Z,Load_SCL + ;jp Error_Flag ;!!!!!!!!!!!!!!!! - PUSH IX - POP DE +.Load_TRD: LD A,(IMAGE_HANDLER) + LD B,Dss.Move_FP.FrEnd + LD HL,0 + LD IX,0 + LD C,Dss.Move_FP + RST ToDSS ; найти длину файла + RET C - call Get_RAM_Disk_E - ret c - jp Load_IMAGE_File + PUSH IX + POP DE + + CALL Get_RAM_Disk_E + RET C + JP Load_IMAGE_File -Get_RAM_Disk_E: ; hl:de - размер файла в байтах - LD A,D - ADD A,A - ADC HL,HL - ADD A,A - ADC HL,HL +Get_RAM_Disk_E: LD A,D + ADD A,A + ADC HL,HL + ADD A,A + ADC HL,HL - LD A,D - AND 3Fh - OR E - JR Z,.skip_inc - INC HL -.skip_inc: ; HL - длина файла в страницах - LD A,H - AND A - JR NZ,ERROR_NO_MEM - LD A,L - AND A - JR Z,ERROR_NO_MEM - PUSH AF + LD A,D + AND 3Fh + OR E + JR Z,.skip_inc + INC HL + ;HL - длина файла в страницах +.skip_inc: LD A,H + AND A + JR NZ,ERROR_NO_MEM + LD A,L + AND A + JR Z,ERROR_NO_MEM + PUSH AF ;*************************************** ;!FIXIT безопасно занимать рамдиски, чтоб пользователь не страдал ; освободить ram-disk e: -.free_disk: - DI - XOR A ; RAM-Drive E: - LD C,BIOS.FreeMemRMD - RST ToBIOS ; освободить e: +.free_disk: DI + XOR A ; RAM-Drive E: + LD C,BIOS.FreeMemRMD + RST ToBIOS ; освободить e: - POP AF - LD B,A ; запросить память у bios-а - XOR A ; RAM-Drive E: - LD C,BIOS.GetMemRMD ; и подсоединить к e: - RST ToBIOS - JR C,ERROR_NO_MEM - LD (MEM_BLK),A - RET + POP AF + LD B,A ; запросить память у bios-а + XOR A ; RAM-Drive E: + LD C,BIOS.GetMemRMD ; и подсоединить к e: + RST ToBIOS + JR C,ERROR_NO_MEM + LD (MEM_BLK),A + RET ;--------------------------------------- Load_IMAGE_File: - LD A,(IMAGE_HANDLER) - LD HL,0 - LD IX,0 - LD BC,Dss.Move_FP.FrStart * 256 + Dss.Move_FP - RST ToDSS ; установить указатель на 0 - RET C + LD A,(IMAGE_HANDLER) + LD HL,0 + LD IX,0 + LD BC,Dss.Move_FP.FrStart*256+Dss.Move_FP + RST ToDSS ; установить указатель на 0 + RET C - LD HL,MSG_LOAD_IMAGE ; loading image - LD C,Dss.PChars - RST ToDSS + LD HL,MSG_LOAD_IMAGE ; loading image + LD C,Dss.PChars + RST ToDSS - LD A,(MEM_BLK) + LD A,(MEM_BLK) -.load_loop: - PUSH AF - OUT (SLOT3),A +.load_loop: PUSH AF + OUT (SLOT3),A - LD A,(IMAGE_HANDLER) - LD HL,#C000 ; грузить 16k - LD DE,#4000 - LD C,Dss.Read - RST ToDSS - JR C,ERROR_IN_READ + LD A,(IMAGE_HANDLER) + LD HL,#C000 ; грузить 16k + LD DE,#4000 + LD C,Dss.Read + RST ToDSS + JR C,ERROR_IN_READ - LD HL,PROGRES_IND ; loading progress - LD C,Dss.PChars - RST ToDSS + LD HL,PROGRES_IND ; loading progress + LD C,Dss.PChars + RST ToDSS - DI - POP AF -.scl_read_next: - LD C,BIOS.GetMemPageNext - RST ToBIOS + DI + POP AF +.scl_read_next: LD C,BIOS.GetMemPageNext + RST ToBIOS - CP #FF - JR NZ,.load_loop + CP #FF + JR NZ,.load_loop - LD HL,CR_LINE ; loading - LD C,Dss.PChars - RST ToDSS + LD HL,CR_LINE ; loading + LD C,Dss.PChars + RST ToDSS - LD A,(IMAGE_HANDLER) - LD C,Dss.Close ; закрыть файл - RST ToDSS + LD A,(IMAGE_HANDLER) + LD C,Dss.Close ; закрыть файл + RST ToDSS - RET C -; ret + RET C + ;RET Set_RAM_Dsk_EtoA: - DI - XOR A - LD BC,0*256 + BIOS.RAMD_TO_DRV ; назначить e: на a: - RST ToBIOS - AND A - RET + DI + XOR A + LD BC,0*256+BIOS.RAMD_TO_DRV ; назначить e: на a: + RST ToBIOS + AND A + RET -ERROR_IN_READ: - POP AF - JR ERROR_IMAGE_X +ERROR_IN_READ: POP AF + JR ERROR_IMAGE_X -ERROR_NO_MEM: - LD HL,MSG_NO_MEM - LD C,Dss.PChars - RST ToDSS -ERROR_IMAGE_X: - LD A,(IMAGE_HANDLER) - LD C,Dss.Close ; закрыть файл - RST ToDSS - SCF - RET +ERROR_NO_MEM: LD HL,MSG_NO_MEM + LD C,Dss.PChars + RST ToDSS +ERROR_IMAGE_X: LD A,(IMAGE_HANDLER) + LD C,Dss.Close ; закрыть файл + RST ToDSS + SCF + RET -SAV_PG3X: db 0 +SAV_PG3X: DB 0 ;******************************************** -READ_FILE_1: - LD DE,ONE_FILE - LD BC,FULL_FILE_NAME_LENGTH - LD HL,ONE_FILE - OUT (SLOT3),A +READ_FILE_1: LD DE,ONE_FILE + LD BC,FULL_FILE_NAME_LENGTH + LDIR + LD HL,ONE_FILE + OUT (SLOT3),A -READ_FILE: - LD A,Dss.Open.R - LD C,Dss.Open - RST ToDSS - RET C ; ошибка, если нет файла +READ_FILE: LD A,Dss.Open.R + LD C,Dss.Open + 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,#4000 - LD C,Dss.Read - RST ToDSS - RET C ; ошибка при чтении + LD HL,#C000 + LD DE,#4000 + LD C,Dss.Read + RST ToDSS + RET C ; ошибка при чтении - PUSH DE + PUSH DE - LD A,(FILE_HANDLE) - LD C,Dss.Close - RST ToDSS + LD A,(FILE_HANDLE) + LD C,Dss.Close + RST ToDSS - POP DE ; длина считанных данных - RET ; ошибка при закрытии или Ok + POP DE ; длина считанных данных + RET ; ошибка при закрытии или Ok -FILE_HANDLE: db 0 +FILE_HANDLE: DB 0 ;******************************************** + ;******************************************** +EXIT_TO_DSS: DI + LD SP,#BFF0 + LD A,CNF_PORT.CNF_0 + OUT (SYS_PORT.OFF),A -EXIT_TO_DSS: - DI - LD SP,#BFF0 - LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.OFF),A + LD A,(#FFF0) ;!HARDCODE + OUT (SLOT0),A - LD A,(#FFF0) ;!HARDCODE - OUT (SLOT0),A + XOR A + LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL + RST ToBIOS - XOR A - LD BC,3*256 + BIOS.SET_PAL_INIT ; SET IBM PAL - RST ToBIOS + LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT + LD BC,0*256+Dss.SetVMod + RST ToDSS - LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT - LD BC,0*256 + Dss.SetVMod - RST ToDSS + LD A,#20 + LD DE,0 + LD HL,#2050 + LD BC,7*256+Dss.Clear + RST ToDSS - LD A,#20 - LD DE,0 - LD HL,#2050 - LD BC,7*256 + Dss.Clear - RST ToDSS - - LD HL,MSG_ZX_EXIT - JP EXIT_ALL + LD HL,MSG_ZX_EXIT + JP EXIT_ALL SET_RELOAD_PROG: - DI + DI - LD A,Spec_Page - OUT (SLOT3),A + LD A,Spec_Page + OUT (SLOT3),A - LD A,"Z" - LD (#FFFE),A - LD A,"X" - LD (#FFFF),A + LD A,"Z" + LD (#FFFE),A + LD A,"X" + LD (#FFFF),A - LD A,(Ret_fn_+2) - AND A - LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx - JR Z,NO_RET_FN - LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn + LD A,(Ret_fn_+2) + AND A + LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx + JR Z,NO_RET_FN + LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn NO_RET_FN: - LD (#FFF4),DE ; адрес программы возврата - IN A,(SLOT0) - LD (#FFF0),A ; DOS-PAGE - IN A,(SLOT1) - LD (#FFF1),A ; - IN A,(SLOT2) ; сохранить страницу - LD (#FFF2),A ; программы для возврата - IN A,(SLOT3) - LD (#FFF3),A ; + LD (#FFF4),DE ; адрес программы возврата + IN A,(SLOT0) + LD (#FFF0),A ; DOS-PAGE + IN A,(SLOT1) + LD (#FFF1),A + IN A,(SLOT2) ; сохранить страницу + LD (#FFF2),A ; программы для возврата + IN A,(SLOT3) + LD (#FFF3),A ; ;******************************************** -RESET_TO_ZX: - DI - LD SP,#BFF0 +RESET_TO_ZX: DI + LD SP,#BFF0 - ld a,high ZXKeys.Line_7 - in a,(ZXKeys) - and #1F - cp #1E - jr z,EXIT_TO_DSS + LD A,high ZXKeys.Line_7 + IN A,(ZXKeys) + AND #1F + CP #1E + JR Z,EXIT_TO_DSS - LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.ON),A ; System-page on & CNF = 0 + ;LD A,CNF_PORT.CNF_3 + ;OUT (SYS_PORT.ON),A ; System-page on & CNF = 0 ;-------------[TEST ATARIN]------------- ; #c0fd - +#05ED ; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) -; [x] добавлен порт #C0FD во все карты портов - - ld bc,SLOT3 - in b,(c) - - ld a,DCP_PAGE - out (c),a +; добавлен порт #C0FD во все карты портов + LD BC,SLOT3 + IN B,(C) + LD A,DCP_PAGE + OUT (C),A ; !HARDCODE далее всё наскоряк и захардкожено ; !TODO переделать под новую функцию дешифрации - ld a,#90 ; AY-8910-port (FFFD) - ld hl,#C000 + #05ED ; CNF 0 - ld (hl),a + LD A,#90 ; AY-8910-port (FFFD) + LD HL,#C000+#05ED ; CNF 0 + LD (HL),A - ld h,#c0 + #15 ; CNF 1 - ld (hl),a + LD H,#C0+#15 ; CNF 1 + LD (HL),A - ld h,#c0 + #25 ; CNF 2 - ld (hl),a + LD H,#C0+#25 ; CNF 2 + LD (HL),A - ld h,#c0 + #35 ; CNF 3 - ld (hl),a + LD H,#C0+#35 ; CNF 3 + LD (HL),A - out (c),b + OUT (C),B ;--------------------------------------- + LD A,(Ret_zx_+2) + LD B,A + LD A,(Ret_fn_+2) + XOR B + LD B,A + LD A,ACEX.RET_PORT + CALL SET_ROM ; включить возврат - LD A,(Ret_zx_+2) - LD B,A - LD A,(Ret_fn_+2) - XOR B - LD B,A - LD A,ACEX.RET_PORT - CALL SET_ROM ; включить возврат + LD A,CNF_PORT.CNF_3 + OUT (SYS_PORT.ON),A ; System-page on & CNF = 3 - LD A,CNF_PORT.CNF_3 - OUT (SYS_PORT.ON),A ; System-page on & CNF = 3 + XOR A + OUT (BorderColor),A ; border-0 + OUT (RGADR),A ; Screen-page = 0 + OUT (RGMOD),A ; Screen-mode-page = 0 + LD BC,#1FFD + OUT (C),A ; Scorpion-port = 0 + LD BC,#7FFD + OUT (C),A ; pentagon-port = 0 - XOR A - OUT (BorderColor),A ; border-0 - OUT (RGADR),A ; Screen-page = 0 - OUT (RGMOD),A ; Screen-mode-page = 0 - LD BC,#1FFD - OUT (C),A ; Scorpion-port = 0 - LD BC,#7FFD - OUT (C),A ; pentagon-port = 0 + LD A,(Int_or_+2) + AND A + LD A,#FA ; original waits on + JR NZ,ORIG1 + LD A,#FE +ORIG1: LD BC,Port_All_Mode + OUT (C),A ; ACC-Off - LD A,(Int_or_+2) - AND A - LD A,#FA ; original waits on - JR NZ,ORIG1 - LD A,#FE -ORIG1: LD BC,Port_All_Mode - OUT (C),A ; ACC-Off + LD BC,CBL.SYS_PORT + XOR A + OUT (C),A ; CBL-off - LD BC,CBL.SYS_PORT - XOR A - OUT (C),A ; CBL-off - - LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 - LD C,BIOS.FN_TURBO - RST ToBIOS_18 + LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 + LD C,BIOS.FN_TURBO + RST ToBIOS_18 ;---------------[test!!!!!]------------- ;!FIXIT разрулить режим спектрума на работу с любыми каналами и разделами - XOR A ; --> IDE-1 - LD C,BIOS.HDD_PART ; IDE-1/IDE-2 - RST ToBIOS_18 + XOR A ; --> IDE-1 + LD C,BIOS.HDD_PART ; IDE-1/IDE-2 + RST ToBIOS_18 ;--------------------------------------- ;****************************** - XOR A - LD BC,2*256 + BIOS.SET_PAL_INIT ; Set ZX-Palette - RST ToBIOS_18 + XOR A + LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette + RST ToBIOS_18 - LD A,(Int_or_+2) - AND A ; 3 - JR NZ,Original - LD A,(Int_sc_+2) ; 1/2 -Original: - LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion - RST ToBIOS_18 + LD A,(Int_or_+2) + AND A ; 3 + JR NZ,Original + LD A,(Int_sc_+2) ; 1/2 +Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion + RST ToBIOS_18 - LD HL,#4000 ; clear ZX-Spectrum screen - LD DE,#4001 - LD BC,#1AFF - LD (HL),L - LDIR + LD HL,#4000 ; clear ZX-Spectrum screen + LD DE,#4001 + LD BC,#1AFF + LD (HL),L + LDIR - LD HL,#4104 ; Screen-1 - LD E,0 - LD BC,4*256 + BIOS.LP_OPEN_S - RST ToBIOS_18 + LD HL,#4104 ; Screen-1 + LD E,0 + LD BC,4*256+BIOS.LP_OPEN_S + RST ToBIOS_18 - LD HL,#5104 ; Screen-2 - LD E,0 - LD BC,4*256 + BIOS.LP_OPEN_S - RST ToBIOS_18 + LD HL,#5104 ; Screen-2 + LD E,0 + LD BC,4*256+BIOS.LP_OPEN_S + RST ToBIOS_18 - XOR A - OUT (RGADR),A - OUT (RGMOD),A + XOR A + OUT (RGADR),A + OUT (RGMOD),A ;************************************************ ; Инициализация страниц ;!FIXIT через функцию биос попробовать - DI - LD A,5 - OUT (SLOT1),A - XOR A - OUT (SLOT0),A + DI + LD A,5 + OUT (SLOT1),A + XOR A + OUT (SLOT0),A - LD BC,#1FFD - OUT (C),A ; #1FFD - LD B,#7F + LD BC,#1FFD + OUT (C),A ; #1FFD + LD B,#7F - ;!TEST - LD A,8 -LOOP_P1: - DEC A - OUT (C),A ; #7FFD - OUT (SLOT3),A - JR NZ,LOOP_P1 - - ;OUT (C),A ; #7FFD - ;OUT (SLOT3),A - ;INC A - ;CP 8 - ;JR NZ,LOOP_P1 - ; + ;!TEST + LD A,8 +LOOP_P1: DEC A + OUT (C),A ; #7FFD + OUT (SLOT3),A + JR NZ,LOOP_P1 - LD B,#1F - LD A,#10 - OUT (C),A ; #1FFD - LD B,#7F - LD A,8 -LOOP_P2: - OUT (C),A ; #7FFD - OUT (SLOT3),A - INC A - CP 16 - JR NZ,LOOP_P2 + ;OUT (C),A ; #7FFD + ;OUT (SLOT3),A + ;INC A + ;CP 8 + ;JR NZ,LOOP_P1 + ; - XOR A - OUT (C),A ; #7FFD - LD B,#1F - OUT (C),A ; #1FFD + LD B,#1F + LD A,#10 + OUT (C),A ; #1FFD + LD B,#7F + LD A,8 +LOOP_P2: OUT (C),A ; #7FFD + OUT (SLOT3),A + INC A + CP 16 + JR NZ,LOOP_P2 + + XOR A + OUT (C),A ; #7FFD + LD B,#1F + OUT (C),A ; #1FFD ; Все RAM, кроме BANK2 - в ней программа! ;*********************************************** - LD HL,PROG_STARTS - LD BC,PROG_STARTS.Length - LD DE,#FF00 ;!!!!!!!!!! - LDIR + LD HL,PROG_STARTS + LD BC,PROG_STARTS.Length + LD DE,#FF00 ;!HARDCODE + LDIR - LD A,(Line312_+2) - OUT (Port_VSYNC),A + LD A,(Line312_+2) + OUT (Port_VSYNC),A - LD A,(P_7FFD_+2) ; - Pentagon off - LD BC,#7FFD - OUT (C),A + LD A,(P_7FFD_+2) ; - Pentagon off + LD BC,#7FFD + OUT (C),A - LD A,(Turbo__+2) ; 3 - turbo + LD A,(Turbo__+2) ; 3 - turbo - LD HL,(Sprint_+2) ; +04h - Sprinter-ZX - ADD A,L ; +0Ch - Scorpion/Pentagon + LD HL,(Sprint_+2) ; +04h - Sprinter-ZX + ADD A,L ; +0Ch - Scorpion/Pentagon - LD HL,(P_1FFD_+2) ; +40h - Scorpion port off - ADD A,L + LD HL,(P_1FFD_+2) ; +40h - Scorpion port off + ADD A,L - LD HL,(Mem512_+2) ; +80h - Pentagon-512 on - ADD A,L + LD HL,(Mem512_+2) ; +80h - Pentagon-512 on + ADD A,L - LD E,A - LD A,(To_trd_+2) - LD D,A + LD E,A + LD A,(To_trd_+2) + LD D,A + + ;!TEST + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + + LD A,E + LD (SYS_PAGE.CONFIG_DE),A + XOR A + LD (SYS_PAGE.CONFIG_DE+1),A + + LD A,C + OUT (SLOT3),A + ; ; - JP #FF00 ;!!!!!!!!!! + JP #FF00 ;!HARDCODE ;*************************************** -PROG_STARTS: - LD A,2 - OUT (SLOT2),A - LD A,E - OUT (SYS_PORT.OFF),A - LD A,D - AND A - JP Z,0 - LD A,#10 - LD BC,#7FFD - OUT (C),A - LD HL,0 - PUSH HL - JP #3D29 ; RESET to TR-DOS +PROG_STARTS: LD A,2 + OUT (SLOT2),A + LD A,E + OUT (SYS_PORT.OFF),A + LD A,D + AND A + JP Z,0 + LD A,#10 + LD BC,#7FFD + OUT (C),A + LD HL,0 + PUSH HL + JP #3D29 ; RESET to TR-DOS -.Length EQU $-PROG_STARTS - ASSERT PROG_STARTS.Length < #100, 'PROG_STARTS too big!!!' +.Length EQU $-PROG_STARTS + ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' ; ; ; Если параметр задан, то выбирается значение Y -PARAMS:; Y / N ; тут значения для ключей записываются как 16 бит значение, значит обратный порядок байтов -Turbo__: dw Turbo_, #0302 ; включить TURBO -Line312_ dw Lines312, #6141 ; включить 312 строк -Sprint_: dw Sprint, #040C ; включить Sprinter -P_7FFD_: dw P_7FFD, #0030 ; включить 7FFD -P_1FFD_: dw P_1FFD, #0040 ; включить 1FFD -Mem512_: dw Mem512, #8000 ; включить 512k -To_trd_: dw To_trd, #0100 ; вoйти в TR-DOS -Int_sc_: dw Int_sc, #0102 ; включить INT "по-скорпионовски" -No_run_: dw no_run, #00FF ; не запускать -Int_or_: dw Int_or, #0300 ; включить INT "Original" -Ret_zx_: dw Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ -Ret_fn_: dw Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ - dw 0,0 ; end marker +PARAMS:; Y / N ; тут значения для ключей записываются как 16 бит значение, значит обратный порядок байтов +Turbo__: DW Turbo_, #0302 ; включить TURBO +Line312_ DW Lines312, #6141 ; включить 312 строк +Sprint_: DW Sprint, #040C ; включить Sprinter +P_7FFD_: DW P_7FFD, #0030 ; включить 7FFD +P_1FFD_: DW P_1FFD, #0040 ; включить 1FFD +Mem512_: DW Mem512, #8000 ; включить 512k +To_trd_: DW To_trd, #0100 ; вoйти в TR-DOS +Int_sc_: DW Int_sc, #0102 ; включить INT "по-скорпионовски" +No_run_: DW no_run, #00FF ; не запускать +Int_or_: DW Int_or, #0300 ; включить INT "Original" +Ret_zx_: DW Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ +Ret_fn_: DW Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ + DW 0,0 ; end marker -Turbo_: db "turbo", 255,0 -Lines312: db "lines312", 255,0 -Sprint: db "sprinter", 255,0 -P_7FFD: db "7FFD", 255,0 -P_1FFD: db "1FFD", 255,0 -Mem512: db "mem512", 255,0 -Int_sc: db "int-sc", 255,0 -To_trd: db "to-trdos", 255,0 -no_run: db "no-run", 255,0 -Int_or: db "origin", 255,0 -Ret_zx: db "ret-zx", 255,0 -Ret_fn: db "ret-fn", 255,0 +Turbo_: DB "turbo", 255,0 +Lines312: DB "lines312", 255,0 +Sprint: DB "sprinter", 255,0 +P_7FFD: DB "7FFD", 255,0 +P_1FFD: DB "1FFD", 255,0 +Mem512: DB "mem512", 255,0 +Int_sc: DB "int-sc", 255,0 +To_trd: DB "to-trdos", 255,0 +no_run: DB "no-run", 255,0 +Int_or: DB "origin", 255,0 +Ret_zx: DB "ret-zx", 255,0 +Ret_fn: DB "ret-fn", 255,0 ;ZX_PROG_LEN EQU $-RELOAD_PROG ;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn -CNF_FILE: db "SPECTRUM.CFG",0 -ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH, 0 +CNF_FILE: DB "SPECTRUM.CFG",0 +ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0 ; ; ; ; - IFDEF NEED_LOADER -Loader_length EQU $-BEGIN - ELSE -Loader_length EQU 0 - ENDIF + IFDEF NEED_LOADER +Loader_length EQU $-BEGIN + ELSE +Loader_length EQU 0 + ENDIF ;----------------------------------------------[End Loader section] ; - STACK_CHECK_MACRO stack_point, stack_buffer + STACK_CHECK_MACRO stack_point,stack_buffer ; Code after Loader ;[]-----------------------------[PLUGINS]-----------------------------[] - INCLUDE 'trdscl.a80' + INCLUDE 'trdscl.a80' ;[]-------------------------------------------------------------------[] ; Code end section diff --git a/trdscl.a80 b/trdscl.a80 index 3556fc7..069a712 100644 --- a/trdscl.a80 +++ b/trdscl.a80 @@ -19,38 +19,36 @@ ; ║ #F5 │ 8 │ Hазвание диcкеты ║ ; ║ #FD │ 3 │ Hе иcпользуетcя (заполнено байтом 0) ║ ; ╚═══════════════╧═══════╧═══════════════════════════════════════════╝ - STRUCT SEEK + STRUCT SEEK FirstFreeSec BYTE 0 FirstFreeTrk BYTE 1 -DiskType BYTE #16 -AllFilesNum BYTE 0 -FreeSectors WORD 0 ; beta version -TRDOS_ID BYTE #10 -notuse1 WORD 0 -notuse2 BLOCK 9,32 -notuse3 BYTE 0 -DelFilesNum BYTE 0 -DiskName TEXT 8, {" "} ; beta version - ENDS +DiskType BYTE #16 +AllFilesNum BYTE 0 +FreeSectors WORD 0 ; beta version +TRDOS_ID BYTE #10 +notuse1 WORD 0 +notuse2 BLOCK 9,32 +notuse3 BYTE 0 +DelFilesNum BYTE 0 +DiskName TEXT 8,{" "} ; beta version + ENDS -/* -SYS_SECTOR: - DB 0 - BLOCK 224,0 -.FirstFreeSec: DB 0 -.FirstFreeTrk: DB 1 -.DiskType DB #16 ; #16 = 80-2, #17 = 40-2, #18 = 80-1, #19 = 40-1 -.AllFilesNum: DB 0 -.FreeSectors: DW 2544 - DB #10 - DW 0000 - BLOCK 9,32 - DB 0 -.DelFilesNum: DB 0 -.DiskName: BLOCK 8,32 - BLOCK 3,0 +; SYS_SECTOR: +; DB 0 +; BLOCK 224,0 +; .FirstFreeSec: DB 0 +; .FirstFreeTrk: DB 1 +; .DiskType DB #16 ; #16 = 80-2, #17 = 40-2, #18 = 80-1, #19 = 40-1 +; .AllFilesNum: DB 0 +; .FreeSectors: DW 2544 +; DB #10 +; DW 0000 +; BLOCK 9,32 +; DB 0 +; .DelFilesNum: DB 0 +; .DiskName: BLOCK 8,32 +; BLOCK 3,0 ; -*/ ; ╔═════════╤═════╤═════════════════════╗ ; ║Cмещение │Длина│ Hазначение ║ @@ -64,273 +62,267 @@ SYS_SECTOR: ; ║ #0E │ 1 │ Hомеp 1го cектоpа ║ ; ║ #0F │ 1 │ Hомеp доpожки ║ ; ╚═════════╧═════╧═════════════════════╝ -/* -CAT_ELEMENT: -.Name BLOCK 8,32 -.Type DB 0 -.Start DW 0000 -.Length DW 0000 -.Sectors DB 0 -.FirstSector DB 0 -.FirstTrack DB 0 -*/ - STRUCT CAT_Elements -Name block 8 -Type BYTE -Start WORD -Length WORD -Sectors BYTE -FirstSector BYTE -FirstTrack BYTE - ENDS +; CAT_ELEMENT: +; .Name BLOCK 8,32 +; .Type DB 0 +; .Start DW 0000 +; .Length DW 0000 +; .Sectors DB 0 +; .FirstSector DB 0 +; .FirstTrack DB 0 - STRUCT SclOffsets -ID BLOCK 8 -Files BYTE -FileBlock CAT_Elements - ENDS + STRUCT CAT_Elements +Name BLOCK 8 +Type BYTE +Start WORD +Length WORD +Sectors BYTE +FirstSector BYTE +FirstTrack BYTE + ENDS + + STRUCT SclOffsets +ID BLOCK 8 +Files BYTE +FileBlock CAT_Elements + ENDS ; 655360 kb = 160 tracks * 16 sectors * 256 bites ; 80 tracks * 2 heads * 16 sectors * 256 bites = 655360 kb ; Page = 64 sectors = 4 tracks ;-----------[] -Load_SCL: -;-------[Метка диска - имя файла]------- - ld hl,ONE_FILE - ld de,SCL_Buffer - ld bc,#0300+Dss.EX_Path - rst ToDSS - jr c,.skip - ld hl,SCL_Buffer - ld a,'.' - ld bc,0008 - ld de,SYS_SECTOR.DiskName +;-------[Метка диска - имя файла]------- +Load_SCL: LD HL,ONE_FILE + LD DE,SCL_Buffer + LD BC,#0300+Dss.EX_Path + RST ToDSS + JR C,.skip + + LD HL,SCL_Buffer + LD A,'.' + LD BC,0008 + LD DE,SYS_SECTOR.DiskName .loop: - cp (hl) - jr z,.skip - ldi - jp pe,.loop + CP (HL) + JR Z,.skip + LDI + JP PE,.loop .skip: ;-------[проверка хедэра SINCLAIR]------ - ld a,(IMAGE_HANDLER) - ld hl,SCL_Buffer - ld de,8 - ld c,Dss.Read - rst ToDSS - ret c ; обработчик ошибки + LD A,(IMAGE_HANDLER) + LD HL,SCL_Buffer + LD DE,8 ; байтов + LD C,Dss.Read + RST ToDSS + RET C ; обработчик ошибки - ld hl,SCL_Buffer - ld de,SCL_HEADER - ld b,8 -.check_header: - ld a,(de) - cp (hl) - jr nz,.error_header - inc hl - inc de - djnz .check_header - jr .get_size -.error_header: - scf - ret + LD HL,SCL_Buffer + LD DE,SCL_HEADER + LD B,8 +.check_header: LD A,(DE) + CP (HL) + JR NZ,.error_header + INC HL + INC DE + DJNZ .check_header + JR .get_size +.error_header: SCF + RET ;------[вычисление размера для TRD]----- .get_size: -/* ld a,(IMAGE_HANDLER) - ld hl,0 - ld ix,SclOffsets.Files - ld b,l - ld c,Dss.Move_FP - rst ToDSS ; указатель на байт количества блоков (файлов) - ret c ; обработчик ошибки!!!!! -;*/ - ld a,(IMAGE_HANDLER) - ld hl,SCL_Buffer - ld de,#701 - ld c,Dss.Read - rst ToDSS ; !FIXIT сделать контроль ошибки? ; читаем байт количества блоков (файлов) + ; LD A,(IMAGE_HANDLER) + ; LD HL,0 + ; LD IX,SclOffsets.Files + ; LD B,L + ; LD C,Dss.Move_FP + ; RST ToDSS ; указатель на байт количества блоков (файлов) + ; RET C ; обработчик ошибки!!!!! + + LD A,(IMAGE_HANDLER) + LD HL,SCL_Buffer + LD DE,#701 + LD C,Dss.Read + RST ToDSS ; !FIXIT сделать контроль ошибки? ; читаем байт количества блоков (файлов) ; - ld a,(SCL_Buffer) - ld l,a - xor a - ld h,a + LD A,(SCL_Buffer) + LD L,A + XOR A + LD H,A ; - add hl,hl ;*2 - push hl - add hl,hl ;*4 - ld d,h - ld e,l - add hl,hl ;*8 - add hl,de ;*12 - pop de - add hl,de ; в HL значение A*14 + ADD HL,HL ;*2 + PUSH HL + ADD HL,HL ;*4 + LD D,H + LD E,L + ADD HL,HL ;*8 + ADD HL,DE ;*12 + POP DE + ADD HL,DE ; в HL значение A*14 - add hl,bc + ADD HL,BC - ld de,SclOffsets.FileBlock - add hl,de ; в HL размер от начала SCL до начала блока данных (header_length) - push hl + LD DE,SclOffsets.FileBlock + ADD HL,DE ; в HL размер от начала SCL до начала блока данных (header_length) + PUSH HL ; - ld a,(IMAGE_HANDLER) - ld hl,0 - ld ix,4 ; игнорим контрольную сумму scl файла - ld b,2 - ld c,Dss.Move_FP - rst ToDSS ; указатель на конец файла - jr nc,1F ; обработчик ошибки!!!!! + LD A,(IMAGE_HANDLER) + LD HL,0 + LD IX,4 ; игнорим контрольную сумму scl файла + LD B,2 + LD C,Dss.Move_FP + RST ToDSS ; указатель на конец файла + JR NC,1F ;!FIXIT обработчик ошибки!!!!! - pop hl - ret + POP HL + RET -1: push ix - pop de ; значение младших 16 бит размера файла - ex (sp),hl ; значение header_length в HL, старшая часть размера файла на стеке - ex de,hl ; в HL значение младших 16 бит размера файла, в DE - header_length +1: PUSH IX + POP DE ; значение младших 16 бит размера файла + EX (SP),HL ; значение header_length в HL, старшая часть размера файла на стеке + EX DE,HL ; в HL значение младших 16 бит размера файла, в DE - header_length - sbc hl,de - ld de,0 - ex (sp),hl ; младшая часть размера файла на стеке - sbc hl,de ; в HL старшая часть размера файла + SBC HL,DE + LD DE,0 + EX (SP),HL ; младшая часть размера файла на стеке + SBC HL,DE ; в HL старшая часть размера файла - ex (sp),hl ; старшая часть размера файла на стеке - ld de,#1000 - add hl,de + EX (SP),HL ; старшая часть размера файла на стеке + LD DE,#1000 + ADD HL,DE - ex (sp),hl ; младшая часть размера файла на стеке - ld de,0 - adc hl,de - pop de ; тут в hl:de размер для trd + EX (SP),HL ; младшая часть размера файла на стеке + LD DE,0 + ADC HL,DE + POP DE ; тут в hl:de размер для trd ;--------------------------------------- - - call Get_RAM_Disk_E - ret c ; обработчик ошибки!!!!! + CALL Get_RAM_Disk_E + RET C ;!FIXIT обработчик ошибки!!!!! Convert_SCLtoTRD: + LD A,(MEM_BLK) + OUT (SLOT3),A ; вставляем первую страницу RAM-диска - LD A,(MEM_BLK) - out (SLOT3),a ; вставляем первую страницу RAM-диска + LD HL,SCL_Buffer + LD B,(HL) ; CAT_Elements + INC HL + LD DE,#C000 ; RAM-drive's track 0 + LD IX,SYS_SECTOR + LD (ix+SEEK.AllFilesNum),B +.cat_loop: PUSH BC + LD A,(HL) + CP 1 + JR NZ,1F ; this file is not deleted + INC (ix+SEEK.DelFilesNum) +1: LD BC,CAT_Elements-2 ; ld bc,#0D + LDIR ; copy 14 bites of scl files table to trd image catalog - ld hl,SCL_Buffer - ld b,(hl) ; CAT_Elements - inc hl - ld de,#C000 ; RAM-drive's track 0 - ld ix,SYS_SECTOR - ld (ix+SEEK.AllFilesNum),b -.cat_loop: - push bc - ld a,(hl) - CP 1 - jr nz,1F ; this file is not deleted - inc (ix+SEEK.DelFilesNum) -1: ld bc,CAT_Elements-2 ; ld bc,#0D - ldir ; copy 14 bites of scl files table to trd image catalog + LD A,(SYS_SECTOR.FirstFreeSec) + LD (DE),A + LD C,A ;!---[v 1] + INC DE + LD A,(SYS_SECTOR.FirstFreeTrk) + LD (DE),A + INC DE ; Pointer on next filename in RAM drive - ld a,(SYS_SECTOR.FirstFreeSec) - ld (de),a - ld c,a ;!---[v 1] - inc de - ld a,(SYS_SECTOR.FirstFreeTrk) - ld (de),a - inc de ; Pointer on next filename in RAM drive + DEC HL ; set to number of sectors + LD A,(HL) ; get file length in sectors from scl-table + AND #0F + ADD A,C ;!---[^ 1] + LD C,A ;!---[v 2] + AND #0F + LD (SYS_SECTOR.FirstFreeSec),A + LD A,#F0 + AND C ;!---[^ 2] + JR Z,1F + INC (ix+SEEK.FirstFreeTrk) +1: LD A,(HL) + SRL A + SRL A + SRL A + SRL A + ADD A,(ix+SEEK.FirstFreeTrk) + LD (SYS_SECTOR.FirstFreeTrk),A - dec hl ; set to number of sectors - ld a,(hl) ; get file length in sectors from scl-table - and #0F - add a,c ;!---[^ 1] - ld c,a ;!---[v 2] - and #0F - ld (SYS_SECTOR.FirstFreeSec),a - ld a,#F0 - and c ;!---[^ 2] - jr z,1F - inc (ix+SEEK.FirstFreeTrk) -1: ld a,(hl) - srl a - srl a - srl a - srl a - add a,(ix+SEEK.FirstFreeTrk) - ld (SYS_SECTOR.FirstFreeTrk),a - - inc hl ; Pointer on next filename in SCL_Buffer - pop bc - djnz .cat_loop + INC HL ; Pointer on next filename in SCL_Buffer + POP BC + DJNZ .cat_loop - xor a - ld (de),a ; file table end marker + XOR A + LD (DE),A ; file table end marker ;--------------------------------------- -; Доделать!!!!! +;!TODO Доделать!!!!! ; SYS_SECTOR.FreeSectors ; push hl ; байт в буфере откуда в SCL начинаются данные (HL-SCL_Buffer) ; push de ; байт в ram диске trd где заканчивается таблица последнего файла - xor a - ld de,SCL_Buffer-8 ; вычисляем значение смещения в файле из значения смещения в буфере - sbc hl,de - push hl - pop ix + XOR A + LD DE,SCL_Buffer-8 ; вычисляем значение смещения в файле из значения смещения в буфере + SBC HL,DE + PUSH HL + POP IX - ld a,(IMAGE_HANDLER) - ld hl,0 - ld B,L ; b=0 - от начала файла - ld c,Dss.Move_FP - rst ToDSS ; указатель на первый байт данных - jr nc,1F ; обработчик ошибки!!!!! - - pop de - ret + LD A,(IMAGE_HANDLER) + LD HL,0 + LD B,L ; b=0 - от начала файла + LD C,Dss.Move_FP + RST ToDSS ; указатель на первый байт данных + JR NC,1F ; обработчик ошибки!!!!! -1: di - ld hl,SYS_SECTOR_START - ld de,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk - ACC_SetBlockSize - ld a,0 - ACC_CopyBlock - ld a,(HL) - ld (DE),a - ACC_Off -; ei + POP DE + RET - LD A,(IMAGE_HANDLER) - LD HL,#D000 ; догрузить до конца страницы - LD DE,#3000 - LD C,Dss.Read - RST ToDSS - JP C,ERROR_IN_READ ; обработчик ошибки!!!!! +1: DI + LD HL,SYS_SECTOR_START + LD DE,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk + ACC_SetBlockSize + LD A,0 + ACC_CopyBlock + LD A,(HL) + LD (DE),A + ACC_Off + ;EI - LD HL,MSG_LOAD_IMAGE ; loading image - LD C,Dss.PChars - RST ToDSS + LD A,(IMAGE_HANDLER) + LD HL,#D000 ; догрузить до конца страницы + LD DE,#3000 + LD C,Dss.Read + RST ToDSS + JP C,ERROR_IN_READ ;!FIXIT обработчик ошибки!!!!! - LD HL,PROGRES_IND ; loading TRD - LD C,Dss.PChars - RST ToDSS + LD HL,MSG_LOAD_IMAGE ; loading image + LD C,Dss.PChars + RST ToDSS - DI - LD A,(MEM_BLK) - jp Load_IMAGE_File.scl_read_next + LD HL,PROGRES_IND ; loading TRD + LD C,Dss.PChars + RST ToDSS + + DI + LD A,(MEM_BLK) + JP Load_IMAGE_File.scl_read_next ;-----------[] -SCL_HEADER: DB 'SINCLAIR' +SCL_HEADER: DB 'SINCLAIR' ;------------[переменные]--------------- SYS_SECTOR_START: - DB 0 - BLOCK 224,0 -SYS_SECTOR SEEK + DB 0 + BLOCK 224,0 +SYS_SECTOR SEEK SYS_SECTOR_END: BLOCK 3,0 SCL_FILE_ID: DB 0 ;-----------[в самый конец]------------- -SCL_Buffer EQU $ - assert SCL_Buffer+#701 < #C000, "Buffer out of mem bank 2" +SCL_Buffer EQU $ + ASSERT SCL_Buffer+#701<#C000,"Buffer out of mem bank 2" From fd88f5d232d8ed9fcc70b4e7ae8fc6253c81a536 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 26 Jun 2023 01:21:52 +1000 Subject: [PATCH 04/43] ... --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 81f727c..c821d32 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 81f727ca6ecd8fcaaac4f4e573fe1fd6578c1efa +Subproject commit c821d325066267e711886212aa3dfc4b83f5b64f From 01ed8404f7c07eca5a9662e58d6dac9c2274a747 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 27 Jun 2023 21:10:07 +1000 Subject: [PATCH 05/43] testing pages --- Shared_Includes | 2 +- spectrum.asm | 93 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 68 insertions(+), 27 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index c821d32..38c3f62 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit c821d325066267e711886212aa3dfc4b83f5b64f +Subproject commit 38c3f62f6d7fa9f4c977eb23e3ff9ea7bf3638f0 diff --git a/spectrum.asm b/spectrum.asm index 39a7e3d..b052f09 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -122,8 +122,7 @@ OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 ORG org_addr-CLP_Buffer ENDIF -BEGIN: - LD (LINE_X),IX +BEGIN: LD (LINE_X),IX LD HL,START_MSG LD C,Dss.PChars @@ -132,13 +131,27 @@ BEGIN: IN A,(SLOT3) LD (SAVE_SLOT3),A + ;!TEST + LD BC,BUFFER_RAM_PAGES.Size * 256 + Dss.GetMem + RST ToDSS + JR C,Error_NoMemForSPpages + LD HL,BUFFER_RAM_PAGES + LD C,BIOS.GetMemBlkPages + RST ToBIOS + ; + + JP COMAND_LINE + +Error_NoMemForSPpages: + LD HL,NO_MEM_MSG2 + JR ERROR_FILE.prn_msg ERROR_FILE: LD HL,ERROR_FILE_MSG_X LD C,Dss.PChars RST ToDSS LD HL,ONE_FILE - LD C,Dss.PChars +.prn_msg: LD C,Dss.PChars RST ToDSS LD HL,ERROR_FILE_MSG @@ -359,29 +372,38 @@ N_LINE: LD (HL),0 ; выделено 8 строк в CNF ;************************************* - MACRO vROM_LOAD romLine,pageNumber +;!TODO если пропускаем загрузку ROM для 48, 128 или trdos, то вставлять в порт vROM номер из стандартного первого блока + MACRO vROM_LOAD romLine;,pageNumber LD HL,(A_LINES+romLine) LD A,(HL) CP ';' JR Z,.skip_load - LD A,pageNumber + ;!TEST + ;LD A,pageNumber + LD A,(BC) + INC BC + PUSH BC CALL READ_FILE_1 + POP BC + ; LD A,Spec_Page OUT (SLOT3),A JP C,ERROR_FILE .skip_load: ENDM - vROM_LOAD BASIC128_LINE, #42 ; 2-я строка - имя файла BASIC128 - vROM_LOAD BASIC_48_LINE, #43 ; 3-я строка - имя файла BASIC 48 - vROM_LOAD TRDOS_LINE, #44 ; 4-я строка - имя файла TR-DOS - vROM_LOAD EXP_LINE, #45 ; 5-я строка - имя файла EXPANSION - vROM_LOAD BIOS_LINE, #46 ; 6-я строка - имя файла BIOS - vROM_LOAD BIOS2_LINE, #47 ; 7-я строка - имя файла BIOS2 - ;vROM_LOAD _LINE, #42 ; 8-я строка - имя файла - ;vROM_LOAD _LINE, #42 ; 9-я строка - имя файла - ;vROM_LOAD _LINE, #42 ; 10-я строка - имя файла - ;vROM_LOAD _LINE, #42 ; 11-я строка - имя файла + LD BC,BUFFER_RAM_PAGES.ROM + + vROM_LOAD BASIC128_LINE;, #42 ; 2-я строка - имя файла BASIC128 + vROM_LOAD BASIC_48_LINE;, #43 ; 3-я строка - имя файла BASIC 48 + vROM_LOAD TRDOS_LINE ;, #44 ; 4-я строка - имя файла TR-DOS + vROM_LOAD EXP_LINE ;, #45 ; 5-я строка - имя файла EXPANSION + vROM_LOAD BIOS_LINE ;, #46 ; 6-я строка - имя файла BIOS + vROM_LOAD BIOS2_LINE ;, #47 ; 7-я строка - имя файла BIOS2 + ;vROM_LOAD _LINE ;, #42 ; 8-я строка - имя файла + ;vROM_LOAD _LINE ;, #42 ; 9-я строка - имя файла + ;vROM_LOAD _LINE ;, #42 ; 10-я строка - имя файла + ;vROM_LOAD _LINE ;, #42 ; 11-я строка - имя файла ; файлы считаны ;************************************* @@ -468,29 +490,48 @@ PARAM_E2: EX (SP),HL ; JR LOOP_PAR1 ;************************************ +BUFFER_RAM_PAGES: +.ROM: BLOCK 10 ; количество портов эмулятора ПЗУ +.RAM: BLOCK 16 ; 256 кб +.Size EQU $-BUFFER_RAM_PAGES +.end_marker: BYTE #FF +PARAM_END: + LD HL,BUFFER_RAM_PAGES.ROM -PARAM_END: LD A,#E2 ; ROM-ID - BASIC 128 - LD B,#42 ; page + LD B,(HL) ; page + INC HL + LD A,#E2 ; ROM-ID - BASIC 128 + //LD B,#42 ; page CALL SET_ROM + LD B,(HL) ; page + INC HL LD A,#E3 ; ROM-ID - BASIC 48 - LD B,#43 ; page + //LD B,#43 ; page CALL SET_ROM + LD B,(HL) ; page + INC HL LD A,#E1 ; ROM-ID - TR-DOS - LD B,#44 ; page + //LD B,#44 ; page CALL SET_ROM + LD B,(HL) ; page + INC HL LD A,#E0 ; ROM-ID - EXPANSION - LD B,#45 ; page + //LD B,#45 ; page CALL SET_ROM + LD B,(HL) ; page + INC HL LD A,#EB ; ROM-ID - BIOS-1 - LD B,#46 ; page + //LD B,#46 ; page CALL SET_ROM + LD B,(HL) ; page + INC HL LD A,#EF ; ROM-ID - BIOS-2 - LD B,#47 ; page + //LD B,#47 ; page CALL SET_ROM LD HL,(IMAGE_NAME) @@ -560,9 +601,9 @@ SET_ROM: DI OUT (SLOT3),A LD A,(#C400) ; сохранить то что было - LD L,A + LD E,A LD A,(#C600) - LD H,A + LD D,A EX AF,AF' ; страница @@ -579,9 +620,9 @@ SET_ROM: DI EX AF,AF' LD B,A - LD A,L + LD A,E LD (#C400),A ; вернуть порт - LD A,H + LD A,D LD (#C600),A ; вернуть порт POP AF From a3fcda9c349e1b8241a836014ba60a159e8c24b3 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 17 Jul 2023 22:54:54 +1000 Subject: [PATCH 06/43] =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=20=D0=B4=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=BC=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0=D0=BC=20=D0=9E=D0=97=D0=A3?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B5=D0=BA=D1=82=D1=80=D1=83=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- spectrum.asm | 133 +++++++++++++++++++----------------------------- version.inc | 2 +- 3 files changed, 54 insertions(+), 83 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 38c3f62..3a3a4fe 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 38c3f62f6d7fa9f4c977eb23e3ff9ea7bf3638f0 +Subproject commit 3a3a4fe44981e0a75f4925234aa2609ee81b96b4 diff --git a/spectrum.asm b/spectrum.asm index b052f09..8269330 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -373,26 +373,37 @@ N_LINE: LD (HL),0 ; выделено 8 строк в CNF ;************************************* ;!TODO если пропускаем загрузку ROM для 48, 128 или trdos, то вставлять в порт vROM номер из стандартного первого блока - MACRO vROM_LOAD romLine;,pageNumber - LD HL,(A_LINES+romLine) - LD A,(HL) - CP ';' - JR Z,.skip_load - ;!TEST - ;LD A,pageNumber - LD A,(BC) - INC BC - PUSH BC - CALL READ_FILE_1 - POP BC - ; - LD A,Spec_Page - OUT (SLOT3),A - JP C,ERROR_FILE -.skip_load: - ENDM +;!TEST + MACRO vROM_LOAD romLine;,pageNumber + EX DE,HL + LD HL,(A_LINES+romLine) + LD A,(HL) + CP ';' + EX DE,HL - LD BC,BUFFER_RAM_PAGES.ROM + JR NZ,.go_load + + LD (HL),0 + EX DE,HL + JP .skip_load +.go_load: + LD A,(HL) ;BUFFER_RAM_PAGES.ROM + PUSH HL + EX DE,HL + CALL READ_FILE_1 + POP DE + ; + LD A,Spec_Page + OUT (SLOT3),A + JP C,ERROR_FILE +.skip_load: + INC DE + EX DE,HL + ENDM +; + + ;LD BC,BUFFER_RAM_PAGES.ROM + LD HL,BUFFER_RAM_PAGES.ROM vROM_LOAD BASIC128_LINE;, #42 ; 2-я строка - имя файла BASIC128 vROM_LOAD BASIC_48_LINE;, #43 ; 3-я строка - имя файла BASIC 48 @@ -495,44 +506,30 @@ BUFFER_RAM_PAGES: .RAM: BLOCK 16 ; 256 кб .Size EQU $-BUFFER_RAM_PAGES .end_marker: BYTE #FF -PARAM_END: - LD HL,BUFFER_RAM_PAGES.ROM - LD B,(HL) ; page - INC HL - LD A,#E2 ; ROM-ID - BASIC 128 - //LD B,#42 ; page - CALL SET_ROM + MACRO vROM_set dcp_port + LD B,(HL) ; page + INC HL + XOR A + OR B + JR Z,.next + LD A,dcp_port ; ROM-ID + CALL SET_ROM +.next: + ENDM - LD B,(HL) ; page - INC HL - LD A,#E3 ; ROM-ID - BASIC 48 - //LD B,#43 ; page - CALL SET_ROM +PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM - LD B,(HL) ; page - INC HL - LD A,#E1 ; ROM-ID - TR-DOS - //LD B,#44 ; page - CALL SET_ROM - - LD B,(HL) ; page - INC HL - LD A,#E0 ; ROM-ID - EXPANSION - //LD B,#45 ; page - CALL SET_ROM - - LD B,(HL) ; page - INC HL - LD A,#EB ; ROM-ID - BIOS-1 - //LD B,#46 ; page - CALL SET_ROM - - LD B,(HL) ; page - INC HL - LD A,#EF ; ROM-ID - BIOS-2 - //LD B,#47 ; page - CALL SET_ROM + vROM_set #E2 ; ROM-ID - BASIC 128 + vROM_set #E3 ; ROM-ID - BASIC 48 + vROM_set #E1 ; ROM-ID - TR-DOS + vROM_set #E0 ; ROM-ID - EXPANSION + vROM_set #EB ; ROM-ID - BIOS-1 + vROM_set #EF ; ROM-ID - BIOS-2 + ;vROM_set #E6 ; BASIC 128 - 2 + ;vROM_set #E7 ; BASIC 48 - 2 + ;vROM_set #E5 ; TR-DOS - 2 + ;vROM_set #E4 ; BIOS (ZX_EXP) - 2 LD HL,(IMAGE_NAME) LD A,H @@ -563,34 +560,8 @@ SKIP_IMAGE: LD A,(No_run_+2) ;******************************************** ; out B - old ROM-page +;!FIXIT сделать через вызов функции БИОС SET_ROM: DI - ;PUSH BC - ;PUSH AF - - ;LD A,CNF_0 - ;OUT (SYS_PORT.ON),A - ;LD A,10h - ;LD BC,7FFDh - ;OUT (C),A - - ;POP AF - ;POP BC - - ;LD C,0F8h - ;CALL 3D13h - - ;PUSH BC - ;PUSH AF - - ;LD A,0 - ;LD BC,7FFDh - ;OUT (C),A - ;LD A,CNF_0 - ;OUT (SYS_PORT.OFF),A - - ;POP AF - ;POP BC - ;RET EX AF,AF' diff --git a/version.inc b/version.inc index fc36338..425ebb6 100644 --- a/version.inc +++ b/version.inc @@ -4,5 +4,5 @@ sj.insert_define("BUILD_DATE", "'" .. date .. "." .. month .. "." .. year .. "'") ENDLUA - DEFINE SP_VERSION "2.01 beta build" + DEFINE SP_VERSION "2.02 beta build" ; \ No newline at end of file From 8a09fd6064664cc741a84903e77e71cbce8c61f5 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Thu, 10 Aug 2023 20:28:56 +1000 Subject: [PATCH 07/43] ... --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 3a3a4fe..7e4985b 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 3a3a4fe44981e0a75f4925234aa2609ee81b96b4 +Subproject commit 7e4985b40214f573ba17b707ad5191319841acdd From 2afd6fe3c0b368d4c3f1002fde4776b7b90f5b17 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 11 Sep 2023 01:30:37 +1000 Subject: [PATCH 08/43] ... --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 7e4985b..6c92964 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 7e4985b40214f573ba17b707ad5191319841acdd +Subproject commit 6c92964be4fbbbec546d52ad6e2b51fd596d8a02 From af64d9cff3bd97c07a634ea248ff37f682f3f121 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 11 Sep 2023 01:46:09 +1000 Subject: [PATCH 09/43] ... --- spectrum.asm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spectrum.asm b/spectrum.asm index 8269330..db5e167 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -131,6 +131,7 @@ BEGIN: LD (LINE_X),IX IN A,(SLOT3) LD (SAVE_SLOT3),A + IF NEW_MEMORY_LOGIC ;!TEST LD BC,BUFFER_RAM_PAGES.Size * 256 + Dss.GetMem RST ToDSS @@ -139,6 +140,9 @@ BEGIN: LD (LINE_X),IX LD C,BIOS.GetMemBlkPages RST ToBIOS ; + ELSE + + ENDIF JP COMAND_LINE @@ -501,11 +505,20 @@ PARAM_E2: EX (SP),HL ; JR LOOP_PAR1 ;************************************ + IF NEW_MEMORY_LOGIC BUFFER_RAM_PAGES: .ROM: BLOCK 10 ; количество портов эмулятора ПЗУ .RAM: BLOCK 16 ; 256 кб .Size EQU $-BUFFER_RAM_PAGES .end_marker: BYTE #FF + ELSE +BUFFER_RAM_PAGES: +.ROM: DB #42, #43, #44, #45, #46, #47 +.RAM: BLOCK 16 ; 256 кб +.Size EQU $-BUFFER_RAM_PAGES +.end_marker: BYTE #FF + ENDIF + MACRO vROM_set dcp_port LD B,(HL) ; page From 23097bdd161f523daab81c05d1277f34d59945e2 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 11 Sep 2023 04:48:00 +1000 Subject: [PATCH 10/43] +load custom pallete --- Shared_Includes | 2 +- spectrum.asm | 151 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 120 insertions(+), 33 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 6c92964..947627f 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 6c92964be4fbbbec546d52ad6e2b51fd596d8a02 +Subproject commit 947627f58f37509150f653c81c82d742a4123cb6 diff --git a/spectrum.asm b/spectrum.asm index db5e167..7983b9e 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -47,6 +47,8 @@ IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF DEFINE EXE_HEADER 1 + + DEFINE NEW_MEMORY_LOGIC 0 ; define NEED_LOADER 1 ; define NeedSafePort_Y 0 ;*************************************** @@ -91,17 +93,32 @@ program_start EQU BEGIN ;*************************************** FULL_FILE_NAME_LENGTH EQU 128 ; длина строки пути к файлу MAX_LINE_LENGTH EQU 120 ; длина строки CFG файла -CFG_FILE_LINES EQU 8 -NAME_CFG_LINE EQU 0 -BASIC128_LINE EQU 2 -BASIC_48_LINE EQU 4 -TRDOS_LINE EQU 6 -EXP_LINE EQU 8 -BIOS_LINE EQU 10 -BIOS2_LINE EQU 12 -;XXX_LINE EQU ?? -OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 +;!TEST +;CFG_FILE_LINES EQU 8 +CFG_FILE_LINES EQU 9 +; + +; NAME_CFG_LINE EQU 0 +; BASIC128_LINE EQU 2 +; BASIC_48_LINE EQU 4 +; TRDOS_LINE EQU 6 +; EXP_LINE EQU 8 +; BIOS_LINE EQU 10 +; BIOS2_LINE EQU 12 +;XXX_LINE EQU ?? + +NAME_CFG_LINE EQU 1 +BASIC128_LINE EQU 2 +BASIC_48_LINE EQU 3 +TRDOS_LINE EQU 4 +EXP_LINE EQU 5 +BIOS_LINE EQU 6 +BIOS2_LINE EQU 7 +OPTIONS_LINE EQU 8 +PALETTE_LINE EQU 9 + +;OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 ;*************************************** ; @@ -141,23 +158,28 @@ BEGIN: LD (LINE_X),IX RST ToBIOS ; ELSE - + ; ENDIF - JP COMAND_LINE + + Error_NoMemForSPpages: LD HL,NO_MEM_MSG2 JR ERROR_FILE.prn_msg -ERROR_FILE: - LD HL,ERROR_FILE_MSG_X +ERROR_FILE: LD HL,ERROR_FILE_MSG_X LD C,Dss.PChars RST ToDSS + ; + LD A,(FILE_HANDLE) + LD C,Dss.Close + RST ToDSS + ; LD HL,ONE_FILE .prn_msg: LD C,Dss.PChars RST ToDSS - + ; LD HL,ERROR_FILE_MSG JP EXIT_ALL @@ -379,8 +401,9 @@ N_LINE: LD (HL),0 ;!TODO если пропускаем загрузку ROM для 48, 128 или trdos, то вставлять в порт vROM номер из стандартного первого блока ;!TEST MACRO vROM_LOAD romLine;,pageNumber +.romLine = (romLine-1)*2 EX DE,HL - LD HL,(A_LINES+romLine) + LD HL,(A_LINES+.romLine) LD A,(HL) CP ';' EX DE,HL @@ -420,6 +443,44 @@ N_LINE: LD (HL),0 ;vROM_LOAD _LINE ;, #42 ; 10-я строка - имя файла ;vROM_LOAD _LINE ;, #42 ; 11-я строка - имя файла + ;!TEST palette load +LOADING_PALETTE: + EX DE,HL + LD HL,( A_LINES + ((PALETTE_LINE-1)*2) ) + LD A,(HL) + CP ';' + JR Z,.skip + + LD DE,ONE_FILE + LD BC,FULL_FILE_NAME_LENGTH + LDIR + LD HL,ONE_FILE + + LD A,Dss.Open.R + LD C,Dss.Open + RST ToDSS + JP C,ERROR_FILE ; ошибка, если нет файла + + LD (FILE_HANDLE),A + + LD HL,PlaceForPalette + LD DE,1024*4 + LD C,Dss.Read + RST ToDSS + JP C,ERROR_FILE ; ошибка при чтении + ;!TEST протестить DSS на этом. Если файл 4096 и читать 4096, то в A будет #FF + ;OR A + ;JP NZ,ERROR_FILE + ; + ;PUSH DE + + LD A,(FILE_HANDLE) + LD C,Dss.Close + RST ToDSS + + ;POP DE +.skip: + ; ; файлы считаны ;************************************* @@ -427,7 +488,7 @@ N_LINE: LD (HL),0 LD C,Dss.PChars RST ToDSS - LD HL,(A_LINES+NAME_CFG_LINE) + LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 ) LD C,Dss.PChars RST ToDSS @@ -442,7 +503,7 @@ N_LINE: LD (HL),0 LD A,Spec_Page OUT (SLOT3),A - LD HL,(A_LINES+OPTIONS_LINE) ; строка параметров + LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; строка параметров LOOP_PAR1: LD A,(HL) CP "/" JR Z,PARAM_TEST @@ -514,7 +575,7 @@ BUFFER_RAM_PAGES: ELSE BUFFER_RAM_PAGES: .ROM: DB #42, #43, #44, #45, #46, #47 -.RAM: BLOCK 16 ; 256 кб +;.RAM: BLOCK 16 ; 256 кб .Size EQU $-BUFFER_RAM_PAGES .end_marker: BYTE #FF ENDIF @@ -928,10 +989,32 @@ ORIG1: LD BC,Port_All_Mode ;--------------------------------------- ;****************************** + LD A,(LD_Pal_+2) + INC A + JR NZ,SetDefaultPalette + ; + LD HL,PlaceForPalette + 0 + LD A,4 + CALL SET_PAL + ; + LD HL,PlaceForPalette + 1024 + LD A,5 + CALL SET_PAL + ; + LD HL,PlaceForPalette + 2048 + LD A,6 + CALL SET_PAL + ; + LD HL,PlaceForPalette + 3072 + LD A,7 + CALL SET_PAL + JR SetDefaultPalette.skip + +SetDefaultPalette: XOR A LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette RST ToBIOS_18 - +.skip: LD A,(Int_or_+2) AND A ; 3 JR NZ,Original @@ -971,19 +1054,12 @@ Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion OUT (C),A ; #1FFD LD B,#7F - ;!TEST - LD A,8 -LOOP_P1: DEC A - OUT (C),A ; #7FFD - OUT (SLOT3),A - JR NZ,LOOP_P1 - ;OUT (C),A ; #7FFD - ;OUT (SLOT3),A - ;INC A - ;CP 8 - ;JR NZ,LOOP_P1 - ; + LD A,8 +LOOP_P1: DEC A + OUT (C),A ; #7FFD + OUT (SLOT3),A + JR NZ,LOOP_P1 LD B,#1F LD A,#10 @@ -1065,7 +1141,13 @@ PROG_STARTS: LD A,2 .Length EQU $-PROG_STARTS ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' + ; +SET_PAL: LD DE,0 + LD BC,#FF*256 + BIOS.PIC_SET_PAL + JP ToBIOS_18 +; + ; ; Если параметр задан, то выбирается значение Y PARAMS:; Y / N ; тут значения для ключей записываются как 16 бит значение, значит обратный порядок байтов @@ -1081,6 +1163,7 @@ No_run_: DW no_run, #00FF ; Int_or_: DW Int_or, #0300 ; включить INT "Original" Ret_zx_: DW Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ Ret_fn_: DW Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ +LD_Pal_: DW LD_Pal, #FF00 DW 0,0 ; end marker Turbo_: DB "turbo", 255,0 @@ -1095,6 +1178,7 @@ no_run: DB "no-run", 255,0 Int_or: DB "origin", 255,0 Ret_zx: DB "ret-zx", 255,0 Ret_fn: DB "ret-fn", 255,0 +LD_Pal: DB "load-pal", 255,0 ;ZX_PROG_LEN EQU $-RELOAD_PROG @@ -1114,6 +1198,9 @@ Loader_length EQU 0 ENDIF ;----------------------------------------------[End Loader section] ; + +PlaceForPalette EQU #9000 + STACK_CHECK_MACRO stack_point,stack_buffer ; Code after Loader ;[]-----------------------------[PLUGINS]-----------------------------[] From e70ce1ed3df8a2da435c734e3c044ed631f57b48 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Thu, 19 Oct 2023 03:25:56 +1000 Subject: [PATCH 11/43] Adaptation for new "Current Dir" in DSS --- Shared_Includes | 2 +- spectrum.asm | 142 ++++++++++++++++++++++++++---------------------- trdscl.a80 | 2 +- 3 files changed, 79 insertions(+), 67 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 947627f..b534dc7 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 947627f58f37509150f653c81c82d742a4123cb6 +Subproject commit b534dc7d5df20ff238a64d900fb1559105eb8ef6 diff --git a/spectrum.asm b/spectrum.asm index 7983b9e..07bed3b 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -147,20 +147,18 @@ BEGIN: LD (LINE_X),IX IN A,(SLOT3) LD (SAVE_SLOT3),A - - IF NEW_MEMORY_LOGIC - ;!TEST + ; + ; + IF NEW_MEMORY_LOGIC LD BC,BUFFER_RAM_PAGES.Size * 256 + Dss.GetMem RST ToDSS JR C,Error_NoMemForSPpages LD HL,BUFFER_RAM_PAGES LD C,BIOS.GetMemBlkPages RST ToBIOS + ENDIF + ; ; - ELSE - ; - ENDIF - JP COMAND_LINE @@ -226,13 +224,13 @@ COMAND_LINE: LD HL,(LINE_X) CALL FIND_FILES - LD HL,(CNF_NAME) - LD A,Spec_Page + CALL MAKE_FULL_NAME + LD A,Spec_Page ;!FIXIT don't use it in new version CALL READ_FILE_1 JP NC,CONTINUE -NO_FIL: LD HL,CNF_FILE - LD A,Spec_Page +NO_FIL: CALL MAKE_FULL_NAME.def_cnf + LD A,Spec_Page ;!FIXIT don't use it in new version CALL READ_FILE_1 JR C,ERROR_FILE JP CONTINUE @@ -251,7 +249,7 @@ FIND_T_LOOP: LD A,(HL) INC HL CP "." CALL Z,POINT_F - CP 20h + CP ' ' CALL Z,BLANK_X CP 9 CALL Z,BLANK_X @@ -472,15 +470,13 @@ LOADING_PALETTE: ;OR A ;JP NZ,ERROR_FILE ; - ;PUSH DE - LD A,(FILE_HANDLE) LD C,Dss.Close RST ToDSS - - ;POP DE .skip: ; +;!TODO печатать имя файла палитры, если он загружен + ; файлы считаны ;************************************* @@ -916,35 +912,13 @@ RESET_TO_ZX: DI CP #1E JR Z,EXIT_TO_DSS - ;LD A,CNF_PORT.CNF_3 - ;OUT (SYS_PORT.ON),A ; System-page on & CNF = 0 - -;-------------[TEST ATARIN]------------- -; #c0fd - +#05ED -; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) -; добавлен порт #C0FD во все карты портов - LD BC,SLOT3 - IN B,(C) - LD A,DCP_PAGE - OUT (C),A - -; !HARDCODE далее всё наскоряк и захардкожено -; !TODO переделать под новую функцию дешифрации - LD A,#90 ; AY-8910-port (FFFD) - LD HL,#C000+#05ED ; CNF 0 - LD (HL),A - - LD H,#C0+#15 ; CNF 1 - LD (HL),A - - LD H,#C0+#25 ; CNF 2 - LD (HL),A - - LD H,#C0+#35 ; CNF 3 - LD (HL),A - - OUT (C),B -;--------------------------------------- + ; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) + LD A,#FF + LD HL,%00'010'1'1110'1101 + LD DE,%10'111'1'1111'1111 ; CNF_0, CNF_1 + LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG + RST ToBIOS + ; LD A,(Ret_zx_+2) LD B,A LD A,(Ret_fn_+2) @@ -1054,7 +1028,6 @@ Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion OUT (C),A ; #1FFD LD B,#7F - LD A,8 LOOP_P1: DEC A OUT (C),A ; #7FFD @@ -1081,8 +1054,8 @@ LOOP_P2: OUT (C),A ; #7FFD ;*********************************************** LD HL,PROG_STARTS - LD BC,PROG_STARTS.Length - LD DE,#FF00 ;!HARDCODE + LD DE,PROG_STARTS.Launch ;!HARDCODE + LD BC,0*256 + PROG_STARTS.Length LDIR LD A,(Line312_+2) @@ -1121,24 +1094,27 @@ LOOP_P2: OUT (C),A ; #7FFD LD A,C OUT (SLOT3),A ; -; - JP #FF00 ;!HARDCODE + JP PROG_STARTS.Launch ;*************************************** -PROG_STARTS: LD A,2 - OUT (SLOT2),A - LD A,E - OUT (SYS_PORT.OFF),A - LD A,D - AND A - JP Z,0 - LD A,#10 - LD BC,#7FFD - OUT (C),A - LD HL,0 - PUSH HL - JP #3D29 ; RESET to TR-DOS - +PROG_STARTS: +.Launch: EQU #FF00 + DISP .Launch + LD A,2 + OUT (SLOT2),A + LD A,E + OUT (SYS_PORT.OFF),A + LD A,D + AND A + JP Z,0 + LD A,#10 + LD BC,#7FFD + OUT (C),A + LD HL,0 + PUSH HL + JP #3D29 ; RESET to TR-DOS + ENT + ; .Length EQU $-PROG_STARTS ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' @@ -1148,6 +1124,42 @@ SET_PAL: LD DE,0 JP ToBIOS_18 ; +;----------------------------------------------------------------------; +MAKE_FULL_NAME: LD HL,(CNF_NAME) + LD (.mode),HL + LD DE,ONE_FILE + LD C,Dss.GSwitch + RST ToDSS + ; + LD HL,ONE_FILE + LD BC,Dss.EX_Path.GET_ALL*256 + Dss.EX_Path + RST ToDSS + ; + CP 3 ; only "FileName.ext"? + LD HL,(CNF_NAME) + JR Z,.get_app_path + RET + ; +.def_cnf: LD HL,CNF_FILE + LD (.mode),HL + ; +.get_app_path: LD HL,ONE_FILE + LD BC,Dss.AppInfo.EXE_HomeDir + RST ToDSS + ; + LD HL,ONE_FILE + LD BC,12 ;!HARDCODE filename length + XOR A + CPIR + DEC HL + EX DE,HL + ; +.mode+1: LD HL,0 + LD BC,12 ;!HARDCODE filename length + LDIR + LD HL,ONE_FILE + RET +;----------------------------------------------------------------------; ; ; Если параметр задан, то выбирается значение Y PARAMS:; Y / N ; тут значения для ключей записываются как 16 бит значение, значит обратный порядок байтов @@ -1199,7 +1211,7 @@ Loader_length EQU 0 ;----------------------------------------------[End Loader section] ; -PlaceForPalette EQU #9000 +PlaceForPalette EQU #A000 STACK_CHECK_MACRO stack_point,stack_buffer ; Code after Loader diff --git a/trdscl.a80 b/trdscl.a80 index 069a712..82c83a1 100644 --- a/trdscl.a80 +++ b/trdscl.a80 @@ -322,7 +322,7 @@ SYS_SECTOR_END: BLOCK 3,0 SCL_FILE_ID: DB 0 ;-----------[в самый конец]------------- SCL_Buffer EQU $ - ASSERT SCL_Buffer+#701<#C000,"Buffer out of mem bank 2" + ASSERT SCL_Buffer+#701<#A000,"Buffer out of mem bank 2" From 607a458f0f877c7984eb9bd66b3bdbb2430071f9 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 03:29:31 +1000 Subject: [PATCH 12/43] + new key "RMD-Keep", Support for new BIOS function "SWAP_RAM_DRIVES" --- Shared_Includes | 2 +- spectrum.asm | 75 ++++++++++++++++++++++++++++++++++++++----------- trdscl.a80 | 4 +-- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index b534dc7..809ea1f 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b534dc7d5df20ff238a64d900fb1559105eb8ef6 +Subproject commit 809ea1f0b204f2d56555497c1c808806833d6315 diff --git a/spectrum.asm b/spectrum.asm index 07bed3b..d70f916 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -209,9 +209,12 @@ EXIT_ALL: ;LD C,Dss.PChars ;RST ToDSS ;--------------------------------------- - 1: LD BC,Dss.Exit RST ToDSS + JR 1B + ; + + COMAND_LINE: LD HL,(LINE_X) LD A,(HL) AND A @@ -349,7 +352,7 @@ MSG_ZX_EXIT: DB 13,10,"EXIT from Spectrum configuration",0 MSG_ZX_EXIT2: DB 13,10,"EXIT from ZX mode",0 PROGRES_IND: DB '░',0 ; 176 -MEM_BLK: BYTE 0 +;MEM_BLK: BYTE 0 LINE_X: WORD 0 X_FILE: WORD 0 CNF_NAME: WORD 0 @@ -715,7 +718,7 @@ Get_RAM_Disk_E: LD A,D ADC HL,HL LD A,D - AND 3Fh + AND #3F OR E JR Z,.skip_inc INC HL @@ -730,18 +733,23 @@ Get_RAM_Disk_E: LD A,D ;*************************************** ;!FIXIT безопасно занимать рамдиски, чтоб пользователь не страдал ; освободить ram-disk e: +; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS .free_disk: DI - XOR A ; RAM-Drive E: - LD C,BIOS.FreeMemRMD - RST ToBIOS ; освободить e: - - POP AF - LD B,A ; запросить память у bios-а - XOR A ; RAM-Drive E: - LD C,BIOS.GetMemRMD ; и подсоединить к e: + ;!TEST + ;XOR A ; RAM-Drive E: + ;LD C,BIOS.FreeMemRMD + ;RST ToBIOS ; освободить e: + ; + POP BC + ;!TEST + ;LD B,A ; запросить память у bios-а + ;XOR A ; RAM-Drive E: + ;LD C,BIOS.GetMemRMD ; и подсоединить к e: + LD C,BIOS.GetMem + ; RST ToBIOS JR C,ERROR_NO_MEM - LD (MEM_BLK),A + LD (Load_IMAGE_File.MEM_BLK),A RET ;--------------------------------------- @@ -757,7 +765,7 @@ Load_IMAGE_File: LD C,Dss.PChars RST ToDSS - LD A,(MEM_BLK) +.MEM_BLK+1: LD A,0 .load_loop: PUSH AF OUT (SLOT3),A @@ -863,7 +871,24 @@ EXIT_TO_DSS: DI LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT LD BC,0*256+Dss.SetVMod RST ToDSS - + ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе + LD A,(RMD_Keep_+2) + AND A + JR NZ,.next + ; очистка рамдисков + LD BC,SYS_PAGE.RAMD_KEYS.NUM*256 + BIOS.FreeMemRMD +.loop: PUSH BC + LD A,B + DEC A + RST ToBIOS + POP BC + DJNZ .loop + ; +.next: + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + LD BC,BIOS.SWAP_RAM_DRIVES.Sp2000 + RST ToBIOS + ; LD A,#20 LD DE,0 LD HL,#2050 @@ -873,9 +898,20 @@ EXIT_TO_DSS: DI LD HL,MSG_ZX_EXIT JP EXIT_ALL +;!FIXIT переделать на функцию биоса SET_RELOAD_PROG: - DI + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + ; + LD A,(Load_IMAGE_File.MEM_BLK) + LD B,A + XOR A ; set disk e: + LD C,BIOS.BLK_TO_RAMD + RST ToBIOS + ; + DI LD A,Spec_Page OUT (SLOT3),A @@ -910,7 +946,7 @@ RESET_TO_ZX: DI IN A,(ZXKeys) AND #1F CP #1E - JR Z,EXIT_TO_DSS + JP Z,EXIT_TO_DSS ; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) LD A,#FF @@ -919,12 +955,17 @@ RESET_TO_ZX: DI LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG RST ToBIOS ; + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + ; LD A,(Ret_zx_+2) LD B,A LD A,(Ret_fn_+2) XOR B LD B,A LD A,ACEX.RET_PORT + ;!FIXIT переделать под функцию биоса CALL SET_ROM ; включить возврат LD A,CNF_PORT.CNF_3 @@ -1176,6 +1217,7 @@ Int_or_: DW Int_or, #0300 ; Ret_zx_: DW Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ Ret_fn_: DW Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ LD_Pal_: DW LD_Pal, #FF00 +RMD_Keep_: DW RMD_Keep, #FF00 ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе DW 0,0 ; end marker Turbo_: DB "turbo", 255,0 @@ -1191,6 +1233,7 @@ Int_or: DB "origin", 255,0 Ret_zx: DB "ret-zx", 255,0 Ret_fn: DB "ret-fn", 255,0 LD_Pal: DB "load-pal", 255,0 +RMD_Keep: DB "RMD-Keep", 255,0 ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе ;ZX_PROG_LEN EQU $-RELOAD_PROG diff --git a/trdscl.a80 b/trdscl.a80 index 82c83a1..f5a66aa 100644 --- a/trdscl.a80 +++ b/trdscl.a80 @@ -205,7 +205,7 @@ Load_SCL: LD HL,ONE_FILE RET C ;!FIXIT обработчик ошибки!!!!! Convert_SCLtoTRD: - LD A,(MEM_BLK) + LD A,(Load_IMAGE_File.MEM_BLK) OUT (SLOT3),A ; вставляем первую страницу RAM-диска LD HL,SCL_Buffer @@ -306,7 +306,7 @@ Convert_SCLtoTRD: RST ToDSS DI - LD A,(MEM_BLK) + LD A,(Load_IMAGE_File.MEM_BLK) JP Load_IMAGE_File.scl_read_next ;-----------[] From ecb79faa1a9af199baee7ddf01dc60e374a83e6b Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 6 Nov 2023 23:20:30 +1000 Subject: [PATCH 13/43] -bug with ram disk e: --- param.txt | 10 ++++++++++ spectrum.asm | 44 ++++++++++++++++++++++++++++---------------- 2 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 param.txt diff --git a/param.txt b/param.txt new file mode 100644 index 0000000..d6afdb3 --- /dev/null +++ b/param.txt @@ -0,0 +1,10 @@ +Строка 1: Scorpion 256 +Строка 2: c:\zx\roms\SC_128.BIN +Строка 3: c:\zx\roms\SC__48.BIN +Строка 4: c:\zx\roms\SC_TRD.BIN +Строка 5: c:\zx\roms\SC_EXP.BIN +Строка 6: c:\zx\roms\SC_EXP.BIN +Строка 7: c:\zx\roms\SP_EXP2.BIN +Строка 8: /turbo /sprinter /7FFD /1FFD /ret-zx /load-pal +Строка 9: c:\zx\palette\komod.pal +Строка 10: ; \ No newline at end of file diff --git a/spectrum.asm b/spectrum.asm index d70f916..c2f5d5c 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -731,8 +731,6 @@ Get_RAM_Disk_E: LD A,D JR Z,ERROR_NO_MEM PUSH AF ;*************************************** -;!FIXIT безопасно занимать рамдиски, чтоб пользователь не страдал -; освободить ram-disk e: ; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS .free_disk: DI ;!TEST @@ -871,6 +869,7 @@ EXIT_TO_DSS: DI LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT LD BC,0*256+Dss.SetVMod RST ToDSS + ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе LD A,(RMD_Keep_+2) AND A @@ -884,11 +883,11 @@ EXIT_TO_DSS: DI POP BC DJNZ .loop ; -.next: - ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD +.next: ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD LD BC,BIOS.SWAP_RAM_DRIVES.Sp2000 RST ToBIOS ; + LD A,#20 LD DE,0 LD HL,#2050 @@ -900,17 +899,6 @@ EXIT_TO_DSS: DI ;!FIXIT переделать на функцию биоса SET_RELOAD_PROG: - ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD - LD BC,BIOS.SWAP_RAM_DRIVES.ZX - RST ToBIOS - ; - LD A,(Load_IMAGE_File.MEM_BLK) - LD B,A - XOR A ; set disk e: - LD C,BIOS.BLK_TO_RAMD - RST ToBIOS - ; - DI LD A,Spec_Page OUT (SLOT3),A @@ -936,7 +924,31 @@ NO_RET_FN: LD (#FFF2),A ; программы для возврата IN A,(SLOT3) LD (#FFF3),A ; - +;******************************************** +;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD +SETUP_RAM_DRIVES: + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + ; запуск с файлом для рамдиска? + LD A,(Load_IMAGE_File.MEM_BLK) + OR A + JR Z,.skip + ; проверяем драйв перед переназначением + XOR A + LD C,BIOS.GET_RAMD_ST + RST ToBIOS + JR C,.set_block + ; освободить рамдиск + XOR A + LD C,BIOS.RAMD_CLEAR + RST ToBIOS + ; set disk e: +.set_block: LD A,(Load_IMAGE_File.MEM_BLK) + LD B,A + XOR A + LD C,BIOS.BLK_TO_RAMD + RST ToBIOS +.skip: ; ;******************************************** RESET_TO_ZX: DI From 9aca5b5351377437d1cbb5a01a03aa6d5e2b7fbf Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 9 Dec 2023 05:47:07 +1000 Subject: [PATCH 14/43] checking ZX flag in Spec_Page before start spectrum mode with missing ROMs in CNF --- Shared_Includes | 2 +- spectrum.asm | 167 ++++++++++++++++++++++++++++-------------------- 2 files changed, 99 insertions(+), 70 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 809ea1f..21c7eb6 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 809ea1f0b204f2d56555497c1c808806833d6315 +Subproject commit 21c7eb690adb62e35c41fdcda76dc3bf97f369b4 diff --git a/spectrum.asm b/spectrum.asm index c2f5d5c..0ec7267 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -15,22 +15,23 @@ /* SYS - [+] - задавать CONFIG_DE перед запуском спектрума и в перехватчике ресета - [+] - поддержка новых образов vROM - [+] - добавлена совместимость с демо ATARIN, успользующее неполную дешифрацию порта AY + [x] - задавать CONFIG_DE перед запуском спектрума и в перехватчике ресета + [x] - поддержка новых образов vROM + [x] - в конфиге могут быть пропущены некоторые vROM,они не загружаются + [x] - добавлена совместимость с демо ATARIN, успользующее неполную дешифрацию порта AY [ ] - проверять метку ZX,если мы не грузим 3 основных vROM - [ ] - в конфиге могут быть пропущены некоторые vROM,они не загружаются ; Images [+] - Load SCL image - [ ] - Load TAP image [ ] - Load SNA file + [ ] - Load TAP image ; Features [+] - Если выбрано ret-zx,то при нажатии на пробел сразу после CAD вернёт в DSS - [ ] - When image filename exist,then instead of SPECTRUM.CFG loads image_filename.cfg if exist too + [*] - Менять спектрумовскую палитру [ ] - Выдавать сообщения на языке установленном в CMOS - [ ] - Менять спектрумовскую палитру + [ ] - если указано только имя образа IMAGE.TRD при запуске искать в этой же папке IMAGE.ZX + и только если его нет, то грузить дефолтный spectrum.cfg из папки с программой */ ; @@ -164,7 +165,7 @@ BEGIN: LD (LINE_X),IX Error_NoMemForSPpages: - LD HL,NO_MEM_MSG2 + LD HL,NO_MEM_MSG JR ERROR_FILE.prn_msg ERROR_FILE: LD HL,ERROR_FILE_MSG_X LD C,Dss.PChars @@ -180,22 +181,12 @@ ERROR_FILE: LD HL,ERROR_FILE_MSG_X ; LD HL,ERROR_FILE_MSG JP EXIT_ALL - +ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG + JP EXIT_ALL END_CNF_ERROR: LD HL,ERROR_CNF ;JP EXIT_ALL -EXIT_ALL: -; PUSH HL -;---------------------[test!!!!!]------- - ;LD A,0 - ;LD C,BIOS.EMM_FN3 - ;RST ToBIOS ; освободить e: - ;LD A,(SAVE_SLOT3) - ;OUT (SLOT3),A -;--------------------------------------- - - ;POP HL - LD C,Dss.PChars +EXIT_ALL: LD C,Dss.PChars RST ToDSS ;---------------------[test!!!!!]------- @@ -319,7 +310,7 @@ LEN_LINE_ZX EQU $-LINE_ZX ;********************************************* MSG_EXIT1: DB 13,10,"EXIT without run",13,10,0 -MSG_EXIT2: DB 13,10,"Выход без запуска" +;MSG_EXIT2: DB 13,10,"Выход без запуска" CR_LINE: DB 13,10,0 START_MSG: DB 13,10,'SPECTRUM launcher v',SP_VERSION,'.' DB 13,10,'(c) Sprinter Team.' @@ -328,28 +319,30 @@ START_MSG: DB 13,10,'SPECTRUM launcher v',SP_VERSION,'.' DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 ERROR_FILE_MSG_X: DB 13,10,"Error in file: ",0 -ERROR_FILE2_MSG_X: - DB 13,10,"Ошибка в файле: ",0 +;ERROR_FILE2_MSG_X: +; DB 13,10,"Ошибка в файле: ",0 ERROR_FILE_MSG: DB 13,10,"Unable to work.",0 -ERROR_FILE2_MSG: - DB 13,10,"Работа невозможна.",0 +;ERROR_FILE2_MSG: +; DB 13,10,"Работа невозможна.",0 ERROR_CNF: DB 13,10,"Unexpected CNF file end.",0 -ERROR_CNF2: DB 13,10,"Неожиданный конец CNF файла.",0 +;ERROR_CNF2: DB 13,10,"Неожиданный конец CNF файла.",0 NO_MEM_MSG: DB 13,10,"The spesial pages are already used." DB 13,10,"Clear memory and restart spectrum.exe again.",0 -NO_MEM_MSG2: DB 13,10,"Специальные страницы уже заняты." - DB 13,10,"Очистите память и перезапустите spectrum.exe снова.",0 +;NO_MEM_MSG2: DB 13,10,"Специальные страницы уже заняты." +; DB 13,10,"Очистите память и перезапустите spectrum.exe снова.",0 MSG_NORMAL: DB 13,10,"All files has been read successfully.",13,10 DB "MODE: ",0 -MSG_NORMAL2: DB 13,10,"Все файлы считаны нормально.",13,10 - DB "Конфигурация: ",0 +;MSG_NORMAL2: DB 13,10,"Все файлы считаны нормально.",13,10 +; DB "Конфигурация: ",0 MSG_NO_MEM: DB 13,10,"No memory space for image or",0 -MSG_NO_MEM2: DB 13,10,"Не хватает памяти для образа или",0 +;MSG_NO_MEM2: DB 13,10,"Не хватает памяти для образа или",0 MSG_LOAD_IMAGE: DB 13,10,"Image loading: ",0 -MSG_LOAD_IMAGE2: - DB 13,10,"Загрузка образа: ",0 +;MSG_LOAD_IMAGE2: +; DB 13,10,"Загрузка образа: ",0 MSG_ZX_EXIT: DB 13,10,"EXIT from Spectrum configuration",0 MSG_ZX_EXIT2: DB 13,10,"EXIT from ZX mode",0 +MSG_NO_ZX_FLAG: DB 13,10,'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' + DB 13,10,' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 PROGRES_IND: DB '░',0 ; 176 ;MEM_BLK: BYTE 0 @@ -413,7 +406,10 @@ N_LINE: LD (HL),0 LD (HL),0 EX DE,HL - JP .skip_load + LD A,(NO_ZX_FLAG) + OR A + JR Z,.skip_load + JP ERROR_ZX_FLAG .go_load: LD A,(HL) ;BUFFER_RAM_PAGES.ROM PUSH HL @@ -429,10 +425,13 @@ N_LINE: LD (HL),0 EX DE,HL ENDM ; + ;!FIXIT временная заплатка + CALL CHECK_ZX_FLAG + ; ;LD BC,BUFFER_RAM_PAGES.ROM LD HL,BUFFER_RAM_PAGES.ROM - + vROM_LOAD BASIC128_LINE;, #42 ; 2-я строка - имя файла BASIC128 vROM_LOAD BASIC_48_LINE;, #43 ; 3-я строка - имя файла BASIC 48 vROM_LOAD TRDOS_LINE ;, #44 ; 4-я строка - имя файла TR-DOS @@ -621,9 +620,15 @@ PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM SKIP_IMAGE: LD A,(No_run_+2) AND A LD HL,MSG_EXIT1 - JP Z,EXIT_ALL + JP NZ,SETUP_RAM_DRIVES + + LD A,"Z" + LD (Spec_Page.flag_Z),A + LD A,"X" + LD (Spec_Page.flag_X),A + + JP EXIT_ALL - JP SET_RELOAD_PROG ;LD HL,MSG_NORMAL ;JP EXIT_ALL @@ -696,10 +701,9 @@ READ_IMAGE: LD DE,ONE_FILE ;jp Error_Flag ;!!!!!!!!!!!!!!!! .Load_TRD: LD A,(IMAGE_HANDLER) - LD B,Dss.Move_FP.FrEnd LD HL,0 LD IX,0 - LD C,Dss.Move_FP + LD BC,Dss.Move_FP.FrEnd RST ToDSS ; найти длину файла RET C @@ -897,33 +901,6 @@ EXIT_TO_DSS: DI LD HL,MSG_ZX_EXIT JP EXIT_ALL -;!FIXIT переделать на функцию биоса -SET_RELOAD_PROG: - DI - LD A,Spec_Page - OUT (SLOT3),A - - LD A,"Z" - LD (#FFFE),A - LD A,"X" - LD (#FFFF),A - - LD A,(Ret_fn_+2) - AND A - LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx - JR Z,NO_RET_FN - LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn - -NO_RET_FN: - LD (#FFF4),DE ; адрес программы возврата - IN A,(SLOT0) - LD (#FFF0),A ; DOS-PAGE - IN A,(SLOT1) - LD (#FFF1),A - IN A,(SLOT2) ; сохранить страницу - LD (#FFF2),A ; программы для возврата - IN A,(SLOT3) - LD (#FFF3),A ; ;******************************************** ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD SETUP_RAM_DRIVES: @@ -950,6 +927,33 @@ SETUP_RAM_DRIVES: RST ToBIOS .skip: ; ;******************************************** +;!FIXIT переделать на функцию биоса +SET_RELOAD_PROG: + DI + LD A,Spec_Page + OUT (SLOT3),A + + LD A,"Z" + LD (#FFFE),A + LD A,"X" + LD (#FFFF),A + + LD A,(Ret_fn_+2) + AND A + LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx + JR Z,NO_RET_FN + LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn + ; +NO_RET_FN: LD (#FFF4),DE ; адрес программы возврата + IN A,(SLOT0) + LD (#FFF0),A ; DOS-PAGE + IN A,(SLOT1) + LD (#FFF1),A + IN A,(SLOT2) ; сохранить страницу + LD (#FFF2),A ; программы для возврата + IN A,(SLOT3) + LD (#FFF3),A ; +;******************************************** RESET_TO_ZX: DI LD SP,#BFF0 @@ -1009,7 +1013,7 @@ ORIG1: LD BC,Port_All_Mode RST ToBIOS_18 ;---------------[test!!!!!]------------- -;!FIXIT разрулить режим спектрума на работу с любыми каналами и разделами +;!FIXIT разрулить режим спектрума на работу с любыми каналами XOR A ; --> IDE-1 LD C,BIOS.HDD_PART ; IDE-1/IDE-2 RST ToBIOS_18 @@ -1185,7 +1189,7 @@ MAKE_FULL_NAME: LD HL,(CNF_NAME) RST ToDSS ; LD HL,ONE_FILE - LD BC,Dss.EX_Path.GET_ALL*256 + Dss.EX_Path + LD BC,Dss.EX_Path.GET_ALL RST ToDSS ; CP 3 ; only "FileName.ext"? @@ -1214,6 +1218,31 @@ MAKE_FULL_NAME: LD HL,(CNF_NAME) RET ;----------------------------------------------------------------------; ; + +; +;----------------------------------------------------------------------; +;!FIXIT временная заплатка +CHECK_ZX_FLAG: + LD BC,SLOT3 + IN B,(C) + LD A,Spec_Page + OUT (C),A + LD A,(Spec_Page.flag_Z) + CP 'Z' + JR NZ,.no_zx + LD A,(Spec_Page.flag_X) + CP 'X' + JP Z,.exit + ; +.no_zx: LD A,1 + LD (NO_ZX_FLAG),A + +.exit: OUT (C),B + RET +NO_ZX_FLAG DB 0 +;----------------------------------------------------------------------; +; + ; Если параметр задан, то выбирается значение Y PARAMS:; Y / N ; тут значения для ключей записываются как 16 бит значение, значит обратный порядок байтов Turbo__: DW Turbo_, #0302 ; включить TURBO From 27b24be434d5050cca3332a97be4bc64940afb80 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 10 Dec 2023 01:07:35 +1000 Subject: [PATCH 15/43] -bug with refactoring --- spectrum.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spectrum.asm b/spectrum.asm index 0ec7267..813be4c 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -19,7 +19,7 @@ [x] - поддержка новых образов vROM [x] - в конфиге могут быть пропущены некоторые vROM,они не загружаются [x] - добавлена совместимость с демо ATARIN, успользующее неполную дешифрацию порта AY - [ ] - проверять метку ZX,если мы не грузим 3 основных vROM + [x] - проверять метку ZX,если мы не грузим 3 основных vROM ; Images [+] - Load SCL image @@ -759,7 +759,7 @@ Load_IMAGE_File: LD A,(IMAGE_HANDLER) LD HL,0 LD IX,0 - LD BC,Dss.Move_FP.FrStart*256+Dss.Move_FP + LD BC,Dss.Move_FP.FrStart RST ToDSS ; установить указатель на 0 RET C From 5fed4f166d8ce38f384e09f3e3abe2cddfe1644d Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 10 Dec 2023 08:27:00 +1000 Subject: [PATCH 16/43] ... --- spectrum.asm | 88 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 24 deletions(-) diff --git a/spectrum.asm b/spectrum.asm index 813be4c..138e8ad 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -81,11 +81,12 @@ ; ; Standart EQU section ;*************************************** -org_addr EQU #8000+CLP_Buffer -code_addr EQU BEGIN -stack_point EQU #BFFE -stack_buffer EQU 64 -program_start EQU BEGIN +org_addr EQU #8000+CLP_Buffer +code_addr EQU BEGIN +stack_point EQU #BFFE +stack_buffer EQU 64 +program_start EQU BEGIN +Loader_length EQU 0 ;*************************************** ; @@ -159,7 +160,21 @@ BEGIN: LD (LINE_X),IX RST ToBIOS ENDIF ; + ;!TODO + ;LD HL,SPECTRUM_HOME_DIR + ;LD BC,Dss.AppInfo.EXE_HomeDir + ;RST ToDSS + ;; + ;LD C,Dss.CurDisk + ;RST ToDSS + ;ADD A,'A' + ;LD (USER_CURRENT_DRV),A + ;; + ;LD HL,USER_CURRENT_DIR + ;LD C,Dss.CurDir + ;RST ToDSS ; + JP COMAND_LINE @@ -200,9 +215,14 @@ EXIT_ALL: LD C,Dss.PChars ;LD C,Dss.PChars ;RST ToDSS ;--------------------------------------- -1: LD BC,Dss.Exit + ;!TODO + ;LD HL,USER_CURRENT_DRV + ;LD C,Dss.ChDir + ;RST ToDSS + ; +.loop: LD BC,Dss.Exit RST ToDSS - JR 1B + JR .loop ; @@ -219,12 +239,12 @@ COMAND_LINE: LD HL,(LINE_X) CALL FIND_FILES CALL MAKE_FULL_NAME - LD A,Spec_Page ;!FIXIT don't use it in new version + LD A,SHARED_PAGE CALL READ_FILE_1 JP NC,CONTINUE NO_FIL: CALL MAKE_FULL_NAME.def_cnf - LD A,Spec_Page ;!FIXIT don't use it in new version + LD A,SHARED_PAGE CALL READ_FILE_1 JR C,ERROR_FILE JP CONTINUE @@ -417,7 +437,7 @@ N_LINE: LD (HL),0 CALL READ_FILE_1 POP DE ; - LD A,Spec_Page + LD A,SHARED_PAGE OUT (SLOT3),A JP C,ERROR_FILE .skip_load: @@ -499,7 +519,7 @@ LOADING_PALETTE: ;************************************* - LD A,Spec_Page + LD A,SHARED_PAGE OUT (SLOT3),A LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; строка параметров LOOP_PAR1: LD A,(HL) @@ -622,11 +642,18 @@ SKIP_IMAGE: LD A,(No_run_+2) LD HL,MSG_EXIT1 JP NZ,SETUP_RAM_DRIVES + LD BC,SLOT3 + IN B,(C) + LD A,Spec_Page + OUT (C),A + ; LD A,"Z" LD (Spec_Page.flag_Z),A LD A,"X" LD (Spec_Page.flag_X),A - + ; + OUT (C),B + ; JP EXIT_ALL @@ -735,7 +762,7 @@ Get_RAM_Disk_E: LD A,D JR Z,ERROR_NO_MEM PUSH AF ;*************************************** -; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS +; [x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS .free_disk: DI ;!TEST ;XOR A ; RAM-Drive E: @@ -1192,6 +1219,7 @@ MAKE_FULL_NAME: LD HL,(CNF_NAME) LD BC,Dss.EX_Path.GET_ALL RST ToDSS ; + OR 2 CP 3 ; only "FileName.ext"? LD HL,(CNF_NAME) JR Z,.get_app_path @@ -1214,6 +1242,8 @@ MAKE_FULL_NAME: LD HL,(CNF_NAME) .mode+1: LD HL,0 LD BC,12 ;!HARDCODE filename length LDIR + XOR A + LD (DE),A LD HL,ONE_FILE RET ;----------------------------------------------------------------------; @@ -1227,12 +1257,19 @@ CHECK_ZX_FLAG: IN B,(C) LD A,Spec_Page OUT (C),A - LD A,(Spec_Page.flag_Z) - CP 'Z' - JR NZ,.no_zx - LD A,(Spec_Page.flag_X) - CP 'X' - JP Z,.exit + LD HL,(Spec_Page.flag_Z) + LD DE,'Z'+'X'*256 + AND A + SBC HL,DE + JR Z,.exit + + + ; LD A,(Spec_Page.flag_Z) + ; CP 'Z' + ; JR NZ,.no_zx + ; LD A,(Spec_Page.flag_X) + ; CP 'X' + ; JP Z,.exit ; .no_zx: LD A,1 LD (NO_ZX_FLAG),A @@ -1281,17 +1318,20 @@ RMD_Keep: DB "RMD-Keep", 255,0 ;!TEST; [ ] 05/11/2023 ;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn CNF_FILE: DB "SPECTRUM.CFG",0 +.Size EQU $-CNF_FILE ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0 ; + +;!TODO + ;USER_CURRENT_DRV DB 'Z:' + ;USER_CURRENT_DIR EQU $ + ;SPECTRUM_HOME_DIR EQU USER_CURRENT_DIR + 256 +; + ; ; ; - IFDEF NEED_LOADER -Loader_length EQU $-BEGIN - ELSE -Loader_length EQU 0 - ENDIF ;----------------------------------------------[End Loader section] ; From 7d5f628a390fa99eefce6ce3a4706215d97bf75d Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 31 Dec 2023 03:03:46 +1000 Subject: [PATCH 17/43] ... --- Shared_Includes | 2 +- spectrum.asm | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 21c7eb6..54298bf 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 21c7eb690adb62e35c41fdcda76dc3bf97f369b4 +Subproject commit 54298bfb52826572bda5ccd0609320a9418d08c9 diff --git a/spectrum.asm b/spectrum.asm index 138e8ad..b4310d1 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -586,7 +586,7 @@ PARAM_E2: EX (SP),HL ; ;************************************ IF NEW_MEMORY_LOGIC BUFFER_RAM_PAGES: -.ROM: BLOCK 10 ; количество портов эмулятора ПЗУ +.ROM: BLOCK 6 ; количество портов эмулятора ПЗУ .RAM: BLOCK 16 ; 256 кб .Size EQU $-BUFFER_RAM_PAGES .end_marker: BYTE #FF @@ -612,16 +612,16 @@ BUFFER_RAM_PAGES: PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM - vROM_set #E2 ; ROM-ID - BASIC 128 - vROM_set #E3 ; ROM-ID - BASIC 48 - vROM_set #E1 ; ROM-ID - TR-DOS - vROM_set #E0 ; ROM-ID - EXPANSION - vROM_set #EB ; ROM-ID - BIOS-1 - vROM_set #EF ; ROM-ID - BIOS-2 - ;vROM_set #E6 ; BASIC 128 - 2 - ;vROM_set #E7 ; BASIC 48 - 2 - ;vROM_set #E5 ; TR-DOS - 2 - ;vROM_set #E4 ; BIOS (ZX_EXP) - 2 + vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 + vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 + vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS + vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION + vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 + vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 + ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 + ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 + ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 + ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 LD HL,(IMAGE_NAME) LD A,H From 8135e13343b8745faeae4dddd562364e7d3d2f75 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 31 Dec 2023 03:04:30 +1000 Subject: [PATCH 18/43] ... --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 54298bf..c135d9b 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 54298bfb52826572bda5ccd0609320a9418d08c9 +Subproject commit c135d9b6038fcabca6cef3234d876f93d5865dee From 90593508edba58b5a29bbc219c8c31b59d256a0b Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 31 Dec 2023 05:36:30 +1000 Subject: [PATCH 19/43] =?UTF-8?q?SET=5FROM=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=83=D1=8E=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20BIO?= =?UTF-8?q?S=20-=20SET=5FPORTS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spectrum.asm | 98 +++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 48 deletions(-) diff --git a/spectrum.asm b/spectrum.asm index b4310d1..a392bf9 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -586,7 +586,7 @@ PARAM_E2: EX (SP),HL ; ;************************************ IF NEW_MEMORY_LOGIC BUFFER_RAM_PAGES: -.ROM: BLOCK 6 ; количество портов эмулятора ПЗУ +.ROM: BLOCK 10 ; количество портов эмулятора ПЗУ .RAM: BLOCK 16 ; 256 кб .Size EQU $-BUFFER_RAM_PAGES .end_marker: BYTE #FF @@ -606,22 +606,24 @@ BUFFER_RAM_PAGES: OR B JR Z,.next LD A,dcp_port ; ROM-ID + PUSH HL CALL SET_ROM + POP HL .next: ENDM PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM - vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 - vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 - vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS - vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION - vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 - vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 - ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 - ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 - ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 - ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 + vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 + vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 + vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS + vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION + vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 + vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 + ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 + ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 + ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 + ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 LD HL,(IMAGE_NAME) LD A,H @@ -667,44 +669,44 @@ SKIP_IMAGE: LD A,(No_run_+2) ; out B - old ROM-page ;!FIXIT сделать через вызов функции БИОС SET_ROM: DI + LD C,BIOS.SET_PORTS + JP ToBIOS - EX AF,AF' - - IN A,(SLOT3) - PUSH AF - - LD A,DCP_PAGE ; установить новую - OUT (SLOT3),A - - LD A,(#C400) ; сохранить то что было - LD E,A - LD A,(#C600) - LD D,A - - EX AF,AF' ; страница - - LD (#C400),A ; установить порт ROM - LD (#C600),A - EX AF,AF' - - LD A,B - LD BC,0 - EX AF,AF' - IN A,(C) - EX AF,AF' - OUT (C),A ; установить новый ROM - EX AF,AF' - LD B,A - - LD A,E - LD (#C400),A ; вернуть порт - LD A,D - LD (#C600),A ; вернуть порт - - POP AF - OUT (SLOT3),A - - RET + ; DI + ; ; + ; EX AF,AF' + ; IN A,(SLOT3) + ; PUSH AF + ; LD A,DCP_PAGE ; установить новую + ; OUT (SLOT3),A + ; ; + ; LD A,(#C400) ; сохранить то что было + ; LD E,A + ; LD A,(#C600) + ; LD D,A + ; ; + ; EX AF,AF' ; страница + ; LD (#C400),A ; установить порт ROM + ; LD (#C600),A + ; ; + ; EX AF,AF' + ; LD A,B + ; LD BC,0 + ; EX AF,AF' + ; IN A,(C) + ; EX AF,AF' + ; OUT (C),A ; установить новый ROM + ; EX AF,AF' + ; ; + ; LD B,A + ; LD A,E + ; LD (#C400),A ; вернуть порт + ; LD A,D + ; LD (#C600),A ; вернуть порт + ; ; + ; POP AF + ; OUT (SLOT3),A + ; RET ;******************************************** READ_IMAGE: LD DE,ONE_FILE From 62af95e525a48a1620efdcb96663e0c440ebae9c Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Thu, 1 Feb 2024 20:25:15 +1000 Subject: [PATCH 20/43] =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B5=D0=BA=D1=82=D1=80=D1=83=D0=BC=D0=B0=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20=D1=81=20=D0=BB=D1=8E?= =?UTF-8?q?=D0=B1=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B8=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD?= =?UTF-8?q?=D1=8B=D0=BC=D0=B8=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- spectrum.asm | 101 +++++++++++++++++++++++++++++++++++++----------- 2 files changed, 80 insertions(+), 23 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index c135d9b..e5122b6 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit c135d9b6038fcabca6cef3234d876f93d5865dee +Subproject commit e5122b68be360be61be821f68988c29021ec8411 diff --git a/spectrum.asm b/spectrum.asm index a392bf9..fbc6a5a 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -93,7 +93,7 @@ Loader_length EQU 0 ; ; Program EQU section ;*************************************** -FULL_FILE_NAME_LENGTH EQU 128 ; длина строки пути к файлу +FULL_FILE_NAME_LENGTH EQU 256 ; длина строки пути к файлу MAX_LINE_LENGTH EQU 120 ; длина строки CFG файла ;!TEST @@ -667,7 +667,6 @@ SKIP_IMAGE: LD A,(No_run_+2) ;******************************************** ; out B - old ROM-page -;!FIXIT сделать через вызов функции БИОС SET_ROM: DI LD C,BIOS.SET_PORTS JP ToBIOS @@ -709,6 +708,7 @@ SET_ROM: DI ; RET ;******************************************** +;******************************************** READ_IMAGE: LD DE,ONE_FILE LD BC,FULL_FILE_NAME_LENGTH LDIR @@ -720,7 +720,64 @@ READ_IMAGE: LD DE,ONE_FILE RET C LD (IMAGE_HANDLER),A - + ; [ ] 31/01/2024 поддержка переключения диска/раздела в TR-DOS + LD HL,ONE_FILE + LD BC,Dss.EX_Path.GET_ALL + RST ToDSS + JR C,.no_change_Disk + AND 8 + JR Z,.currentDisk + ; + LD C,Dss.CurDisk + RST ToDSS + JR C,.no_change_Disk + JR .getInfoDRV +.currentDisk: ; + LD A,(ONE_FILE) + SUB "A" + ; +.getInfoDRV: ; + OR #80 + LD HL,TMP_BUFF + LD BC,Dss.DskInfo + RST ToDSS + ; + LD B,4 ;!HARDCODE номер нужного параметра + LD DE,0 + LD HL,TMP_BUFF +.loop_param: ADD HL,DE + LD E,(HL) + INC HL + DJNZ .loop_param + LD A,(HL) + AND #80 + JR Z,.no_change_Disk + CP #90 + JR NC,.no_change_Disk + ; + LD A,3 + AND (HL) + LD D,A + INC HL + LD A,(HL) + RLCA + RLCA + ; + OR D + AND #0F + ; + ;LD C,SLOT3 + ;IN B,(C) + ;EX AF,AF' + ;LD A,SYS_PAGE + ;OUT (C),A + ;EX AF,AF' + ; + LD (RESET_TO_ZX.hdd),A + ;OUT (C),B + ; + ; +.no_change_Disk:; LD A,(IMAGE_FLAG) AND A JR Z,.Load_TRD @@ -784,6 +841,9 @@ Get_RAM_Disk_E: LD A,D RET ;--------------------------------------- + +;******************************************** + Load_IMAGE_File: LD A,(IMAGE_HANDLER) LD HL,0 @@ -1028,9 +1088,9 @@ RESET_TO_ZX: DI LD A,(Int_or_+2) AND A LD A,#FA ; original waits on - JR NZ,ORIG1 + JR NZ,.ORIG1 LD A,#FE -ORIG1: LD BC,Port_All_Mode +.ORIG1: LD BC,Port_All_Mode OUT (C),A ; ACC-Off LD BC,CBL.SYS_PORT @@ -1042,8 +1102,9 @@ ORIG1: LD BC,Port_All_Mode RST ToBIOS_18 ;---------------[test!!!!!]------------- -;!FIXIT разрулить режим спектрума на работу с любыми каналами - XOR A ; --> IDE-1 + ;[ ] 1/02/2024 режим спектрума работает с любыми каналами и основными разделами + ; XOR A ; --> IDE-1 +.hdd+1: LD A,#FF LD C,BIOS.HDD_PART ; IDE-1/IDE-2 RST ToBIOS_18 ;--------------------------------------- @@ -1321,7 +1382,17 @@ RMD_Keep: DB "RMD-Keep", 255,0 ;!TEST; [ ] 05/11/2023 CNF_FILE: DB "SPECTRUM.CFG",0 .Size EQU $-CNF_FILE -ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0 +; +; +;[]-----------------------------[PLUGINS]-----------------------------[] + INCLUDE 'trdscl.a80' +; + +;----------------------------------------------[End Loader section] +; +;ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0 +ONE_FILE: WORD 0 +TMP_BUFF EQU ONE_FILE+256 ; ;!TODO @@ -1329,24 +1400,10 @@ ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0 ;USER_CURRENT_DIR EQU $ ;SPECTRUM_HOME_DIR EQU USER_CURRENT_DIR + 256 ; - -; -; - -; -;----------------------------------------------[End Loader section] -; - PlaceForPalette EQU #A000 STACK_CHECK_MACRO stack_point,stack_buffer ; Code after Loader -;[]-----------------------------[PLUGINS]-----------------------------[] - - INCLUDE 'trdscl.a80' - ;[]-------------------------------------------------------------------[] ; Code end section -; OUTEND -; SAVEBIN 'Build/test.bin', exe_header, $-exe_header ; \ No newline at end of file From f88b1ceba7c82ff54c4dd4d6b1d169621dafbf94 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Thu, 1 Feb 2024 20:26:55 +1000 Subject: [PATCH 21/43] new ver --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 425ebb6..4ab0611 100644 --- a/version.inc +++ b/version.inc @@ -4,5 +4,5 @@ sj.insert_define("BUILD_DATE", "'" .. date .. "." .. month .. "." .. year .. "'") ENDLUA - DEFINE SP_VERSION "2.02 beta build" + DEFINE SP_VERSION "2.03 beta build" ; \ No newline at end of file From 8dd95b8ff0952acc15d1db83081738dce18dfb6c Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 23 Feb 2024 01:52:38 +1000 Subject: [PATCH 22/43] =?UTF-8?q?=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8?= =?UTF-8?q?=D0=B3=D0=B5=20=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=BF=D1=83=D1=81=D1=82=D0=B8=D1=82=D1=8C=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20=D1=81=20HDD=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B1=D1=80=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20vROM,=20?= =?UTF-8?q?=D0=BE=D0=BD=D0=B8=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20=D0=B5=D1=81=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D0=BF=D1=83=D1=82=D1=91=D0=BC?= =?UTF-8?q?=20=D1=81=D1=82=D0=BE=D0=B8=D1=82=20";"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- spectrum.asm | 43 ++++++++++++++++++++----------------------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index e5122b6..215d0f3 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit e5122b68be360be61be821f68988c29021ec8411 +Subproject commit 215d0f3c90865dd2c4c0d92d17e64513a0b0407e diff --git a/spectrum.asm b/spectrum.asm index fbc6a5a..238ee35 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -15,11 +15,12 @@ /* SYS - [x] - задавать CONFIG_DE перед запуском спектрума и в перехватчике ресета + [x] - задаётся CONFIG_DE перед запуском спектрума и в перехватчике ресета (для более гладкой совместимости со старым софтом Sp97) [x] - поддержка новых образов vROM - [x] - в конфиге могут быть пропущены некоторые vROM,они не загружаются + [x] - в конфиге можно пропустить загрузку с HDD выбранных vROM, они пропускаются если перед путём стоит ";" + [x] - проверять метку ZX, если мы не грузим 3 основных vROM [x] - добавлена совместимость с демо ATARIN, успользующее неполную дешифрацию порта AY - [x] - проверять метку ZX,если мы не грузим 3 основных vROM + [x] - перед входом в режим спектрума текущим устанавливается раздел HDD с которого загружался образ TRD ; Images [+] - Load SCL image @@ -30,8 +31,6 @@ [+] - Если выбрано ret-zx,то при нажатии на пробел сразу после CAD вернёт в DSS [*] - Менять спектрумовскую палитру [ ] - Выдавать сообщения на языке установленном в CMOS - [ ] - если указано только имя образа IMAGE.TRD при запуске искать в этой же папке IMAGE.ZX - и только если его нет, то грузить дефолтный spectrum.cfg из папки с программой */ ; @@ -379,37 +378,34 @@ A_LINES: BLOCK CFG_FILE_LINES*2,0 CONTINUE: LD (LEN_CNF),DE ; CNF файл прочитан, DE - длина CNF - LD HL,#C000 +READ_CNF_FILE: LD HL,#C000 LD DE,A_LINES LD C,CFG_FILE_LINES -LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки +.LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки EX DE,HL LD (HL),E INC HL LD (HL),D INC HL EX DE,HL -LOOP_L: LD A,(HL) +.LOOP_L: LD A,(HL) CP 13 - JR Z,N_LINE + JR Z,.N_LINE CP 10 - JR Z,N_LINE + JR Z,.N_LINE AND A JP Z,END_CNF_ERROR INC HL - CP ';' - JR Z,N_LINE - DJNZ LOOP_L -N_LINE: LD (HL),0 - INC HL + DJNZ .LOOP_L +.N_LINE: LD (HL),0 +.N_LINE2: INC HL LD A,(HL) CP 13 - JR Z,N_LINE + JR Z,.N_LINE2 CP 10 - JR Z,N_LINE + JR Z,.N_LINE2 DEC C - JR NZ,LOOP_A - + JR NZ,.LOOP_A ; выделено 8 строк в CNF ;************************************* ;!TODO если пропускаем загрузку ROM для 48, 128 или trdos, то вставлять в порт vROM номер из стандартного первого блока @@ -445,6 +441,7 @@ N_LINE: LD (HL),0 EX DE,HL ENDM ; +LOAD_ZXROMS: ;!FIXIT временная заплатка CALL CHECK_ZX_FLAG ; @@ -523,7 +520,7 @@ LOADING_PALETTE: OUT (SLOT3),A LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; строка параметров LOOP_PAR1: LD A,(HL) - CP "/" + CP '/' JR Z,PARAM_TEST CP 0 JR Z,PARAM_END @@ -551,7 +548,7 @@ LOOP_PAR2: LD A,(DE) PARAM_E1: CP 255 JR NZ,NO_PAR LD A,(HL) - CP 20h + CP ' ' JR Z,PARAM_E2 CP 0 JR Z,PARAM_E2 @@ -1060,7 +1057,7 @@ RESET_TO_ZX: DI LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG RST ToBIOS ; - ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + ;[x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD LD BC,BIOS.SWAP_RAM_DRIVES.ZX RST ToBIOS ; @@ -1358,7 +1355,7 @@ Int_or_: DW Int_or, #0300 ; Ret_zx_: DW Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ Ret_fn_: DW Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ LD_Pal_: DW LD_Pal, #FF00 -RMD_Keep_: DW RMD_Keep, #FF00 ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе +RMD_Keep_: DW RMD_Keep, #FF00 ; [x] 05/11/2023 очищать рамдиски при выходе DW 0,0 ; end marker Turbo_: DB "turbo", 255,0 From 2227adf2abaad95e47ff701801471ccc60e3f503 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 8 Jun 2024 01:38:35 +1000 Subject: [PATCH 23/43] + save and restore text mode screen --- Shared_Includes | 2 +- spectrum.asm | 203 +++++++++++++++++++++++++++++------------------- 2 files changed, 123 insertions(+), 82 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 215d0f3..314ff5d 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 215d0f3c90865dd2c4c0d92d17e64513a0b0407e +Subproject commit 314ff5dbefe8d537655601dde8236957e4ed39a7 diff --git a/spectrum.asm b/spectrum.asm index 238ee35..740948d 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -46,9 +46,9 @@ ;*************************************** IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF - DEFINE EXE_HEADER 1 - - DEFINE NEW_MEMORY_LOGIC 0 + DEFINE EXE_HEADER 1 + DEFINE App_EXE_Version 1 + DEFINE NEW_MEMORY_LOGIC 0 ; define NEED_LOADER 1 ; define NeedSafePort_Y 0 ;*************************************** @@ -82,7 +82,7 @@ ;*************************************** org_addr EQU #8000+CLP_Buffer code_addr EQU BEGIN -stack_point EQU #BFFE +stack_point EQU #C000 stack_buffer EQU 64 program_start EQU BEGIN Loader_length EQU 0 @@ -199,25 +199,8 @@ ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG JP EXIT_ALL END_CNF_ERROR: LD HL,ERROR_CNF - ;JP EXIT_ALL EXIT_ALL: LD C,Dss.PChars RST ToDSS - -;---------------------[test!!!!!]------- - - ;ld a,(CurDisk_Save) - ;ld c,Dss.ChDisk - ;RST ToDSS - ;jr nc,1f - - ;ld hl,ERROR_FILE2_MSG - ;LD C,Dss.PChars - ;RST ToDSS -;--------------------------------------- - ;!TODO - ;LD HL,USER_CURRENT_DRV - ;LD C,Dss.ChDir - ;RST ToDSS ; .loop: LD BC,Dss.Exit RST ToDSS @@ -328,41 +311,42 @@ LINE_ZX: DZ 'ZX Spectrum PAGES' LEN_LINE_ZX EQU $-LINE_ZX ;********************************************* -MSG_EXIT1: DB 13,10,"EXIT without run",13,10,0 -;MSG_EXIT2: DB 13,10,"Выход без запуска" -CR_LINE: DB 13,10,0 -START_MSG: DB 13,10,'SPECTRUM launcher v',SP_VERSION,'.' - DB 13,10,'(c) Sprinter Team.' - DB 13,10,'Written by Ivan Mak.' - DB 13,10,'Modified by Anatoliy Belyanskiy.' - DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 +MSG_EXIT1: DB 13,10, "EXIT without run",13,10,0 +;MSG_EXIT2: DB 13,10, "Выход без запуска" +CR_LINE: DB 13,10,0 +START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'.' + DB 13,10, '(c) Sprinter Team.' + DB 13,10, 'Written by Ivan Mak.' + DB 13,10, 'Modified by Anatoliy Belyanskiy.' + DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 ERROR_FILE_MSG_X: - DB 13,10,"Error in file: ",0 + DB 13,10, "Error in file: ",0 ;ERROR_FILE2_MSG_X: -; DB 13,10,"Ошибка в файле: ",0 -ERROR_FILE_MSG: DB 13,10,"Unable to work.",0 +; DB 13,10, "Ошибка в файле: ",0 +ERROR_FILE_MSG: DB 13,10, "Unable to work.",0 ;ERROR_FILE2_MSG: -; DB 13,10,"Работа невозможна.",0 -ERROR_CNF: DB 13,10,"Unexpected CNF file end.",0 -;ERROR_CNF2: DB 13,10,"Неожиданный конец CNF файла.",0 -NO_MEM_MSG: DB 13,10,"The spesial pages are already used." - DB 13,10,"Clear memory and restart spectrum.exe again.",0 -;NO_MEM_MSG2: DB 13,10,"Специальные страницы уже заняты." -; DB 13,10,"Очистите память и перезапустите spectrum.exe снова.",0 -MSG_NORMAL: DB 13,10,"All files has been read successfully.",13,10 - DB "MODE: ",0 -;MSG_NORMAL2: DB 13,10,"Все файлы считаны нормально.",13,10 -; DB "Конфигурация: ",0 -MSG_NO_MEM: DB 13,10,"No memory space for image or",0 -;MSG_NO_MEM2: DB 13,10,"Не хватает памяти для образа или",0 -MSG_LOAD_IMAGE: DB 13,10,"Image loading: ",0 +; DB 13,10, "Работа невозможна.",0 +ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0 +;ERROR_CNF2: DB 13,10, "Неожиданный конец CNF файла.",0 +NO_MEM_MSG: DB 13,10, "The spesial pages are already used." + DB 13,10, "Clear memory and restart spectrum.exe again.",0 +;NO_MEM_MSG2: DB 13,10, "Специальные страницы уже заняты." +; DB 13,10, "Очистите память и перезапустите spectrum.exe снова.",0 +MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10 + DB "MODE: ",0 +;MSG_NORMAL2: DB 13,10, "Все файлы считаны нормально.",13,10 +; DB "Конфигурация: ",0 +MSG_NO_MEM: DB 13,10, "No memory space for image or",0 +;MSG_NO_MEM2: DB 13,10, "Не хватает памяти для образа или",0 +MSG_LOAD_IMAGE: DB 13,10, "Image loading: ",0 ;MSG_LOAD_IMAGE2: -; DB 13,10,"Загрузка образа: ",0 -MSG_ZX_EXIT: DB 13,10,"EXIT from Spectrum configuration",0 -MSG_ZX_EXIT2: DB 13,10,"EXIT from ZX mode",0 -MSG_NO_ZX_FLAG: DB 13,10,'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' - DB 13,10,' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 -PROGRES_IND: DB '░',0 ; 176 +; DB 13,10, "Загрузка образа: ",0 +MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 +;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 +MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' + DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 +PROGRES_IND: DB '░',0 ; 176 +PROGRES_100: DB ' 100%',13,10,0 ;MEM_BLK: BYTE 0 LINE_X: WORD 0 @@ -481,7 +465,7 @@ LOADING_PALETTE: LD (FILE_HANDLE),A LD HL,PlaceForPalette - LD DE,1024*4 + LD DE,1024*4 ;!HARDCODE LD C,Dss.Read RST ToDSS JP C,ERROR_FILE ; ошибка при чтении @@ -635,17 +619,17 @@ PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM POP BC OUT (C),B JP C,ERROR_FILE - + ; SKIP_IMAGE: LD A,(No_run_+2) AND A + JP NZ,PREPARE_TO_ZXMODE + ; LD HL,MSG_EXIT1 - JP NZ,SETUP_RAM_DRIVES - LD BC,SLOT3 IN B,(C) LD A,Spec_Page OUT (C),A - ; + ; !FIXIT когда будет процедура в биосе переделать под неё LD A,"Z" LD (Spec_Page.flag_Z),A LD A,"X" @@ -840,7 +824,6 @@ Get_RAM_Disk_E: LD A,D ;******************************************** - Load_IMAGE_File: LD A,(IMAGE_HANDLER) LD HL,0 @@ -877,7 +860,7 @@ Load_IMAGE_File: CP #FF JR NZ,.load_loop - LD HL,CR_LINE ; loading + LD HL,PROGRES_100 ; loading 100% LD C,Dss.PChars RST ToDSS @@ -886,9 +869,7 @@ Load_IMAGE_File: RST ToDSS RET C - ;RET - -Set_RAM_Dsk_EtoA: +.Set_RAM_Dsk_EtoA: DI XOR A LD BC,0*256+BIOS.RAMD_TO_DRV ; назначить e: на a: @@ -945,7 +926,7 @@ FILE_HANDLE: DB 0 ;******************************************** EXIT_TO_DSS: DI - LD SP,#BFF0 + LD SP,stack_point LD A,CNF_PORT.CNF_0 OUT (SYS_PORT.OFF),A @@ -956,10 +937,6 @@ EXIT_TO_DSS: DI LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL RST ToBIOS - LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT - LD BC,0*256+Dss.SetVMod - RST ToDSS - ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе LD A,(RMD_Keep_+2) AND A @@ -977,17 +954,81 @@ EXIT_TO_DSS: DI LD BC,BIOS.SWAP_RAM_DRIVES.Sp2000 RST ToBIOS ; - - LD A,#20 - LD DE,0 - LD HL,#2050 - LD BC,7*256+Dss.Clear - RST ToDSS + + ; LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT + ; LD BC,0*256+Dss.SetVMod + ; RST ToDSS + ; + ; LD A,#20 + ; LD DE,0 + ; LD HL,#2050 + ; LD BC,7*256+Dss.Clear + ; RST ToDSS + +BACKTXT: ; +.VMODE+1: LD A,#00 +.mode+2: LD BC,0*256+Dss.SetVMod + RST ToDSS + ; + LD A,(.VMODE) + CP %1000'0000 + JR NC,.EXIT + ; + LD IX,PlaceForTXTscreen +.WinMax+1: LD HL,#2050 + LD DE,#0000 + IN A,(SLOT2) + LD B,A + LD C,BIOS.WIN_RESTORE + XOR A + DI + RST ToBIOS + ; +.CURS+1: LD DE,#0000 + LD C,Dss.Locate + RST ToDSS +.EXIT: ; + ; LD BC,Dss.K_SETUP.ClearSIObuff + ; RST ToDSS LD HL,MSG_ZX_EXIT JP EXIT_ALL ;******************************************** +PREPARE_TO_ZXMODE: + LD C,Dss.GetVMod + RST ToDSS + ; A - VMODE, B - SCREEN PAGE +SAVETXT: LD (BACKTXT.VMODE),A + EX AF,AF' + LD A,B + LD (BACKTXT.mode),A + EX AF,AF' + CP %1000'0000 + JR NC,.EXIT + SUB #02 + JR C,.EXIT + ; + PUSH AF + LD C,BIOS.LP_GET_PLACE + RST ToBIOS + LD (BACKTXT.CURS),DE + POP AF + LD IX,PlaceForTXTscreen + LD HL,#2050 + OR A + JR NZ,.next + LD L,#28 +.next: LD (BACKTXT.WinMax),HL + LD DE,#0000 + IN A,(SLOT2) + LD B,A + LD C,BIOS.WIN_COPY + XOR A + DI + RST ToBIOS +.EXIT: ; + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD SETUP_RAM_DRIVES: LD BC,BIOS.SWAP_RAM_DRIVES.ZX @@ -1042,7 +1083,7 @@ NO_RET_FN: LD (#FFF4),DE ; ;******************************************** RESET_TO_ZX: DI - LD SP,#BFF0 + LD SP,stack_point ; #BFF0 LD A,high ZXKeys.Line_7 IN A,(ZXKeys) @@ -1067,7 +1108,6 @@ RESET_TO_ZX: DI XOR B LD B,A LD A,ACEX.RET_PORT - ;!FIXIT переделать под функцию биоса CALL SET_ROM ; включить возврат LD A,CNF_PORT.CNF_3 @@ -1387,17 +1427,18 @@ CNF_FILE: DB "SPECTRUM.CFG",0 ;----------------------------------------------[End Loader section] ; -;ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0 -ONE_FILE: WORD 0 -TMP_BUFF EQU ONE_FILE+256 -; - ;!TODO ;USER_CURRENT_DRV DB 'Z:' ;USER_CURRENT_DIR EQU $ ;SPECTRUM_HOME_DIR EQU USER_CURRENT_DIR + 256 ; -PlaceForPalette EQU #A000 +ONE_FILE: WORD 0 +TMP_BUFF EQU ONE_FILE+256 +; +PlaceForPalette EQU TMP_BUFF+256 ;#A000 +PlaceForTXTscreen EQU PlaceForPalette + 1024*4 ;!HARDCODE + + STACK_CHECK_MACRO stack_point,stack_buffer ; Code after Loader From 675bfbf556446c4a398bb8d1d10f4b1c3c6cafda Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 7 Jul 2024 04:52:30 +1000 Subject: [PATCH 24/43] restoring HOLD port on CAD --- Shared_Includes | 2 +- spectrum.asm | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 314ff5d..990f10e 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 314ff5dbefe8d537655601dde8236957e4ed39a7 +Subproject commit 990f10e80278825f071f5795a5ba459dec0f991f diff --git a/spectrum.asm b/spectrum.asm index 740948d..f17c2e4 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -924,6 +924,18 @@ FILE_HANDLE: DB 0 ;******************************************** +RESTORE_PORT_HOLD: + ;!FIXIT сделать через API BIOS + LD D,CMOS_CELL.ScreenPosition + LD C,BIOS.CMOS_RD + RST ToBIOS + RET C + LD B,A + LD A,ACEX.HOLD + LD C,BIOS.SET_PORTS + JP ToBIOS +; ; ; + ;******************************************** EXIT_TO_DSS: DI LD SP,stack_point @@ -933,6 +945,8 @@ EXIT_TO_DSS: DI LD A,(#FFF0) ;!HARDCODE OUT (SLOT0),A + CALL RESTORE_PORT_HOLD + XOR A LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL RST ToBIOS @@ -1098,6 +1112,8 @@ RESET_TO_ZX: DI LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG RST ToBIOS ; + CALL RESTORE_PORT_HOLD + ; ;[x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD LD BC,BIOS.SWAP_RAM_DRIVES.ZX RST ToBIOS From 58c4d075f0d191342abd7bcdfe0bdb413c96f840 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 7 Jul 2024 05:18:48 +1000 Subject: [PATCH 25/43] -bug with memory leak --- Shared_Includes | 2 +- spectrum.asm | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 990f10e..04aaef8 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 990f10e80278825f071f5795a5ba459dec0f991f +Subproject commit 04aaef8ac955971d913babd95921a62937b597ae diff --git a/spectrum.asm b/spectrum.asm index f17c2e4..4b762b0 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -1055,10 +1055,11 @@ SETUP_RAM_DRIVES: XOR A LD C,BIOS.GET_RAMD_ST RST ToBIOS - JR C,.set_block + OR A + JR Z,.set_block ; освободить рамдиск XOR A - LD C,BIOS.RAMD_CLEAR + LD C,BIOS.FreeMemRMD RST ToBIOS ; set disk e: .set_block: LD A,(Load_IMAGE_File.MEM_BLK) From 497530f8426302eb465925981f2068bd292f5300 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:46:57 +1000 Subject: [PATCH 26/43] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20CAD=20=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BA=D1=83=D0=B4=D0=B0=20=D1=80=D0=B5=D1=81=D0=B5=D1=82?= =?UTF-8?q?=D0=B8=D1=82=D1=81=D1=8F=20=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=82=D0=B8=D0=B2=D0=BE=D0=BF=D0=BE=D0=BB=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spectrum.asm | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/spectrum.asm b/spectrum.asm index 4b762b0..87a8868 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -939,14 +939,21 @@ RESTORE_PORT_HOLD: ;******************************************** EXIT_TO_DSS: DI LD SP,stack_point - LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.OFF),A - LD A,(#FFF0) ;!HARDCODE + LD A,high ZXKeys.Line_7 + IN A,(ZXKeys) + AND #1F + CP #1E + JP Z,RESET_TO_ZX.cont + +.cont: LD A,(#FFF0) ;!HARDCODE OUT (SLOT0),A CALL RESTORE_PORT_HOLD + LD A,CNF_PORT.CNF_0 + OUT (SYS_PORT.OFF),A + XOR A LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL RST ToBIOS @@ -1104,10 +1111,10 @@ RESET_TO_ZX: DI IN A,(ZXKeys) AND #1F CP #1E - JP Z,EXIT_TO_DSS + JP Z,EXIT_TO_DSS.cont ; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) - LD A,#FF +.cont: LD A,#FF LD HL,%00'010'1'1110'1101 LD DE,%10'111'1'1111'1111 ; CNF_0, CNF_1 LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG From e7a42481ab4efdb6926fa06cd576c14a450b1146 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 13 Jul 2024 01:15:36 +1000 Subject: [PATCH 27/43] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=B2=D0=B0=D1=82=D1=87=D0=B8?= =?UTF-8?q?=D0=BA=D0=B5=20=D1=80=D0=B5=D1=81=D0=B5=D1=82=D0=B0,=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=BC=20=D0=B1=D0=B8?= =?UTF-8?q?=D0=BE=D1=81=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=B0=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20SYS=5FPORT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- spectrum.asm | 30 ++++++++++++++---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 04aaef8..4f546cb 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 04aaef8ac955971d913babd95921a62937b597ae +Subproject commit 4f546cb1d2cd8eeb1aec0de2c3e9902d1bb52fee diff --git a/spectrum.asm b/spectrum.asm index 87a8868..8797607 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -935,24 +935,26 @@ RESTORE_PORT_HOLD: LD C,BIOS.SET_PORTS JP ToBIOS ; ; ; - -;******************************************** -EXIT_TO_DSS: DI - LD SP,stack_point +FIRST_PREPARE: LD A,CNF_PORT.CNF_0 + OUT (SYS_PORT.OFF),A + CALL RESTORE_PORT_HOLD LD A,high ZXKeys.Line_7 IN A,(ZXKeys) AND #1F CP #1E + RET +;******************************************** +EXIT_TO_DSS: DI + LD SP,stack_point + + CALL FIRST_PREPARE JP Z,RESET_TO_ZX.cont .cont: LD A,(#FFF0) ;!HARDCODE OUT (SLOT0),A - - CALL RESTORE_PORT_HOLD - - LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.OFF),A + LD A,(#FFF3) ;!HARDCODE + OUT (SLOT3),A XOR A LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL @@ -1100,17 +1102,15 @@ NO_RET_FN: LD (#FFF4),DE ; LD (#FFF1),A IN A,(SLOT2) ; сохранить страницу LD (#FFF2),A ; программы для возврата - IN A,(SLOT3) + ;IN A,(SLOT3) + LD A,(SAVE_SLOT3) LD (#FFF3),A ; ;******************************************** RESET_TO_ZX: DI LD SP,stack_point ; #BFF0 - LD A,high ZXKeys.Line_7 - IN A,(ZXKeys) - AND #1F - CP #1E + CALL FIRST_PREPARE JP Z,EXIT_TO_DSS.cont ; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) @@ -1120,8 +1120,6 @@ RESET_TO_ZX: DI LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG RST ToBIOS ; - CALL RESTORE_PORT_HOLD - ; ;[x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD LD BC,BIOS.SWAP_RAM_DRIVES.ZX RST ToBIOS From 12447a147b46148caec5991b3147fefbb4becfae Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 19 Jul 2024 04:44:29 +1000 Subject: [PATCH 28/43] current dir for zx mode --- For_4x.asm | 213 ++++++++++++++++++++++++++++++++++++++++ Shared_Includes | 2 +- spectrum.asm | 253 ++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 429 insertions(+), 39 deletions(-) create mode 100644 For_4x.asm diff --git a/For_4x.asm b/For_4x.asm new file mode 100644 index 0000000..a4fd653 --- /dev/null +++ b/For_4x.asm @@ -0,0 +1,213 @@ +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; + +; in: HL - CLUSTER +; out: HL:IX - SECTOR +; Вначале должна быть выполнена инициализация BPB 4x +CLUSTER_TO_SECTOR: + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE) + EX DE,HL + LD HL,(SYS_PAGE.MSD_DAT_SEC) + LD (.MSD_DAT_SEC),HL + LD HL,(SYS_PAGE.MSD_DAT_SEC2) + LD (.MSD_DAT_SEC2),HL + EX DE,HL + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + ; + LD DE,0 ;!FIXIT for FAT32 + DEC HL + DEC HL + XOR 1 + JR Z,.skip + ; + RRA +.loop: ADD HL,HL + RL E + RL D + ; + RRA + JP NC,.loop + ; +.skip: EX DE,HL + LD XL,E + LD XH,D +.MSD_DAT_SEC+1: LD DE,0 ;first data sector ;!FIXIT а если начальный сектор > #FFFF + XOR A + ADD IX,DE +.MSD_DAT_SEC2+1: + LD DE,0 + ADC HL,DE + ;!TODO а надо ли проверять переполнение HL:IX? + RET +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; + + +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; +SET_IMAGE_DIR_SECTOR: + LD HL,ONE_FILE + LD DE,TMP_BUFF + LD A,FAT_ATTR.DIRECTORY + LD BC,Dss.F_First.FATname + RST ToDSS + RET C + ; + LD HL,(TMP_BUFF+26) ; ;!HARDCODE first dir cluster + CALL CLUSTER_TO_SECTOR + LD (RESET_TO_ZX.DIR_SEC_L),IX + LD (RESET_TO_ZX.DIR_SEC_H),HL + RET +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; + + +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; +SET_CURRENT_HDD: +.NUMBER+1: LD A,#FF + CP #FF + LD C,BIOS.HDD_INIT + JP Z,ToBIOS_18 + LD C,BIOS.HDD_PART ; IDE-1/IDE-2 + JP ToBIOS_18 +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; + +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; +BPB_SetUp: LD A,SYS_PAGE + LD HL,SYS_PAGE.MS_BPB + LD C,BIOS.HDD_READ_BPB + RST ToBIOS +.PARAMS: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.MS_BPB+FORM_CODE) + CP #F0 + JP C,.ERROR_BPB + + LD DE,SYS_PAGE.MS_BPB+FAT_ID + LD HL,.FAT1_MSG + LD B,4 +.L1: LD A,(DE) + CP ' ' + JR NZ,.L11 + INC DE + JR .L1 +.L11: CP (HL) + JR NZ,.PC_DOS + + INC HL + INC DE + DJNZ .L1 + LD A,(DE) + CP '6' + LD HL,#81FF ; FAT16 флаг + JR Z,.FAT + CP '2' + JP NZ,.ERROR_BPB + +.PC_DOS: LD HL,#01FF ; FAT12 флаг +.FAT: LD (SYS_PAGE.FAT_FLAG),HL + + LD A,(SYS_PAGE.MS_BPB+S_P_T) ; Количество секторов на трек + LD (SYS_PAGE.MSD_SECS),A + + LD IX,(SYS_PAGE.MS_BPB+SPECIAL_SECS) + LD HL,(SYS_PAGE.MS_BPB+SPECIAL_SECS+2) +.NO_LD_SPECIAL: LD BC,0 + LD DE,(SYS_PAGE.MS_BPB+RESERV_SECS) + + ADD IX,DE + ADC HL,BC + + LD (SYS_PAGE.MSD_FAT_SEC),IX ; начальный сектор FAT + LD (SYS_PAGE.MSD_FAT_SEC2),HL ; начальный сектор FAT + + LD DE,(SYS_PAGE.MS_BPB+S_P_F) ; число секторов в FAT + LD A,(SYS_PAGE.MS_BPB+FATS_NUM) ; количество FATs +.NEXT_ADD: + ADD IX,DE + ADC HL,BC + DEC A + JR NZ,.NEXT_ADD + LD (SYS_PAGE.MSD_CAT_SEC),IX ; начальный сектор DIR + LD (SYS_PAGE.MSD_CAT_SEC2),HL ; начальный сектор DIR + LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора + LD A,B + RL C + RLA + RL C + RLA + RL C + RLA + LD C,A + LD B,0 ; BC - число файловых записей в секторе + LD (SYS_PAGE.FilesPerSector),A + LD DE,(SYS_PAGE.MS_BPB+FLS_NUM) ; Число файловых записей + + EX DE,HL + DEC HL + XOR A +.NEXT_ADD2: + INC A + JR Z,.ERROR_BPB + SBC HL,BC + JR NC,.NEXT_ADD2 + EX DE,HL + + LD E,A ; A - число секторов в DIR + LD BC,0 + LD D,B + LD (SYS_PAGE.SectorsPerCluster),A + + ADD IX,DE ; Начало DATA area + ADC HL,BC + + LD (SYS_PAGE.MSD_DAT_SEC),IX + LD (SYS_PAGE.MSD_DAT_SEC2),HL + + LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора + ; D = 0 + LD H,D + LD L,D + LD E,D + LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE) + LD D,A + XOR A +.NEXT_ADD3: + ADD HL,BC ; Вычисление длины кластера + ADC A,E + DEC D + JR NZ,.NEXT_ADD3 + + LD (SYS_PAGE.CLASTER_LEN),HL + LD B,E + LD C,A + LD (SYS_PAGE.CLASTER_LEN2),BC + ; + ; DE=0 + EX DE,HL ;LD HL,0 + LD BC,(SYS_PAGE.MS_BPB+S_P_T) + LD A,(SYS_PAGE.MS_BPB+H_P_S) +.BPB_L1: ; ВЫЧИСЛИТЬ КОЛИЧЕСТВО СЕКТОРОВ НА ЦИЛИНДР + ADD HL,BC + DEC A + JR NZ,.BPB_L1 + LD (SYS_PAGE.S_X_H),HL + ; + EX AF,AF' + OUT (SLOT3),A + AND A + RET + ; +.ERROR_BPB: + EX AF,AF' + OUT (SLOT3),A + SCF + RET + ; +.FAT1_MSG: DB "FAT1" +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index 4f546cb..7e812bc 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 4f546cb1d2cd8eeb1aec0de2c3e9902d1bb52fee +Subproject commit 7e812bc0267db168c5a5b17780e567a7a01cd927 diff --git a/spectrum.asm b/spectrum.asm index 8797607..e077547 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -690,6 +690,7 @@ SET_ROM: DI ;******************************************** ;******************************************** +; Чтение образа TRD/SCL в рамдрайв READ_IMAGE: LD DE,ONE_FILE LD BC,FULL_FILE_NAME_LENGTH LDIR @@ -701,7 +702,7 @@ READ_IMAGE: LD DE,ONE_FILE RET C LD (IMAGE_HANDLER),A - ; [ ] 31/01/2024 поддержка переключения диска/раздела в TR-DOS + ; [x] 31/01/2024 поддержка переключения диска/раздела в TR-DOS LD HL,ONE_FILE LD BC,Dss.EX_Path.GET_ALL RST ToDSS @@ -713,11 +714,11 @@ READ_IMAGE: LD DE,ONE_FILE RST ToDSS JR C,.no_change_Disk JR .getInfoDRV -.currentDisk: ; - LD A,(ONE_FILE) + ; +.currentDisk: LD A,(ONE_FILE) SUB "A" ; -.getInfoDRV: ; +.getInfoDRV: ; Настраиваем HDD OR #80 LD HL,TMP_BUFF LD BC,Dss.DskInfo @@ -730,13 +731,14 @@ READ_IMAGE: LD DE,ONE_FILE LD E,(HL) INC HL DJNZ .loop_param + ; check HDD LD A,(HL) - AND #80 - JR Z,.no_change_Disk - CP #90 + CP DRIVE_CODES.SPRINTER.HDD + JR C,.no_change_Disk + CP DRIVE_CODES.SPRINTER.HDD + 4 + 1 JR NC,.no_change_Disk ; - LD A,3 + LD A,%0000'0011 AND (HL) LD D,A INC HL @@ -747,23 +749,46 @@ READ_IMAGE: LD DE,ONE_FILE OR D AND #0F ; - ;LD C,SLOT3 - ;IN B,(C) - ;EX AF,AF' - ;LD A,SYS_PAGE - ;OUT (C),A - ;EX AF,AF' - ; - LD (RESET_TO_ZX.hdd),A - ;OUT (C),B - ; + LD (SET_CURRENT_HDD.NUMBER),A + OR DRIVE_CODES.TRDOS.HDD + LD (RESET_TO_ZX.CURRENT_DIR_DRIVE),A + ; + ; [x] поддержка переключения папки образа для режима ZX + ; Выделяем путь до папки с образом + LD HL,ONE_FILE + LD BC,ONE_FILE.Size + XOR A + CPIR + DEC HL + DEC HL + PUSH HL + LD HL,ONE_FILE.Size - 2 + SBC HL,BC + LD B,H + LD C,L + POP HL + LD A,'\' ; + CPDR + INC HL + LD (HL),0 + ; устанавливаем и инитим винт + LD A,SYS_PORT.BIOS + OUT (SYS_PORT.ROM),A + CALL SET_CURRENT_HDD + LD A,SYS_PORT.BIOS + OUT (SYS_PORT.RAM),A + ; парсим для расчётов BPB + CALL BPB_SetUp + ; запоминаем сектор директории + CALL SET_IMAGE_DIR_SECTOR + ;;;;;;;;; ; .no_change_Disk:; LD A,(IMAGE_FLAG) AND A JR Z,.Load_TRD - CP 1 ; check if SCL + DEC A ; check if SCL JP Z,Load_SCL ;jp Error_Flag ;!!!!!!!!!!!!!!!! @@ -822,7 +847,6 @@ Get_RAM_Disk_E: LD A,D RET ;--------------------------------------- - ;******************************************** Load_IMAGE_File: LD A,(IMAGE_HANDLER) @@ -936,7 +960,7 @@ RESTORE_PORT_HOLD: JP ToBIOS ; ; ; FIRST_PREPARE: LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.OFF),A + OUT (SYS_PORT.RAM),A CALL RESTORE_PORT_HOLD LD A,high ZXKeys.Line_7 @@ -1102,7 +1126,6 @@ NO_RET_FN: LD (#FFF4),DE ; LD (#FFF1),A IN A,(SLOT2) ; сохранить страницу LD (#FFF2),A ; программы для возврата - ;IN A,(SLOT3) LD A,(SAVE_SLOT3) LD (#FFF3),A ; ;******************************************** @@ -1113,14 +1136,14 @@ RESET_TO_ZX: DI CALL FIRST_PREPARE JP Z,EXIT_TO_DSS.cont - ; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) -.cont: LD A,#FF - LD HL,%00'010'1'1110'1101 - LD DE,%10'111'1'1111'1111 ; CNF_0, CNF_1 - LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG - RST ToBIOS + ; [x] фикс неполной дешифрации порта #FFFD (пишут в #C0FD) +.cont: LD A,#FF + LD HL,%00'010'1'1110'1101 + LD DE,%10'111'1'1111'1111 ; CNF_0, CNF_1 + LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG + RST ToBIOS ; - ;[x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + ; [x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD LD BC,BIOS.SWAP_RAM_DRIVES.ZX RST ToBIOS ; @@ -1132,8 +1155,20 @@ RESET_TO_ZX: DI LD A,ACEX.RET_PORT CALL SET_ROM ; включить возврат + ; [ ] + LD A,SYS_PAGE + OUT (SLOT3),A +.DIR_SEC_L+1: LD HL,0 + LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL +.DIR_SEC_H+1: LD HL,0 + LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL +.CURRENT_DIR_DRIVE+1: + LD A,#FF + LD (SYS_PAGE.CURRENT_DIR_DRIVE),A + ;;;;;;;; + LD A,CNF_PORT.CNF_3 - OUT (SYS_PORT.ON),A ; System-page on & CNF = 3 + OUT (SYS_PORT.ROM),A ; System-page on & CNF = 3 XOR A OUT (BorderColor),A ; border-0 @@ -1162,10 +1197,7 @@ RESET_TO_ZX: DI ;---------------[test!!!!!]------------- ;[ ] 1/02/2024 режим спектрума работает с любыми каналами и основными разделами - ; XOR A ; --> IDE-1 -.hdd+1: LD A,#FF - LD C,BIOS.HDD_PART ; IDE-1/IDE-2 - RST ToBIOS_18 + CALL SET_CURRENT_HDD ;--------------------------------------- ;****************************** @@ -1309,7 +1341,7 @@ PROG_STARTS: LD A,2 OUT (SLOT2),A LD A,E - OUT (SYS_PORT.OFF),A + OUT (SYS_PORT.RAM),A LD A,D AND A JP Z,0 @@ -1402,6 +1434,9 @@ NO_ZX_FLAG DB 0 ;----------------------------------------------------------------------; ; + INCLUDE 'For_4X.asm' + + ; Если параметр задан, то выбирается значение Y PARAMS:; Y / N ; тут значения для ключей записываются как 16 бит значение, значит обратный порядок байтов Turbo__: DW Turbo_, #0302 ; включить TURBO @@ -1455,9 +1490,11 @@ CNF_FILE: DB "SPECTRUM.CFG",0 ;SPECTRUM_HOME_DIR EQU USER_CURRENT_DIR + 256 ; ONE_FILE: WORD 0 -TMP_BUFF EQU ONE_FILE+256 +.Size EQU 256 +TMP_BUFF EQU ONE_FILE + ONE_FILE.Size +.Size EQU 256 ; -PlaceForPalette EQU TMP_BUFF+256 ;#A000 +PlaceForPalette EQU TMP_BUFF + TMP_BUFF.Size ;#A000 PlaceForTXTscreen EQU PlaceForPalette + 1024*4 ;!HARDCODE @@ -1466,4 +1503,144 @@ PlaceForTXTscreen EQU PlaceForPalette + 1024*4 ;!HARDCODE ; Code after Loader ;[]-------------------------------------------------------------------[] ; Code end section -; \ No newline at end of file +; + +; [x] new tr-hdd +; TO INIT by SPECTRUM.EXE: +; .CURRENT_DIR_SEC_L EQU #C196 ; word +; .CURRENT_DIR_SEC_H EQU #C198 ; word +; .CURRENT_DIR_DRIVE EQU #C19A +; .CURRENT_HDD EQU #C12D + +; CORRECT_CUR_DIR: +; DI +; IN A,(SLOT3) +; LD C,A +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD A,#FF +; JR C,.skip +; LD (SYS_PAGE.CURRENT_HDD),A +; .skip: INC A +; LD H,A +; LD L,A +; LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL +; LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL +; LD A,C +; OUT (SLOT3),A +; RET +/* +INIT_HDD_WORK: + LD A,(RESET_TO_ZX.hdd) + CP #FF + JR Z,.skip_hdd + ; + OR #80 + LD HL,Temp_Buffer + LD BC,Dss.DskInfo + RST ToDSS + ; + LD B,4 ;!HARDCODE номер нужного параметра + LD DE,0 + LD HL,Temp_Buffer +.loop_param: ADD HL,DE + LD E,(HL) + INC HL + DJNZ .loop_param + LD A,(HL) + AND #80 + JR Z,.no_change_Disk + CP #90 + JR NC,.no_change_Disk + ; + LD A,3 + AND (HL) + LD D,A + INC HL + LD A,(HL) + RLCA + RLCA + ; + OR D + AND #0F + JR .start + ; +.no_change_Disk:; + XOR A +.start: LD C,BIOS.HDD_PART ; IDE-1/IDE-2 + RST ToBIOS + ; +.loop: LD C,BIOS.HDD_INIT + RST ToBIOS + JR C,.loop + ; + + CALL BPB_SetUp + + + ;[x] music and dirs + LD HL,SND_DIR + LD DE,Temp_Buffer + LD A,FAT_ATTR.DIRECTORY + LD BC,Dss.F_First.FATname + RST ToDSS + JR NC,.start_setup + ; + LD A,#C9 ; RET opcode - disable music + LD (SoundOnOff2),A + RET + ; +.start_setup: +;-=-=-=-=-=-=-=- + LD HL,(Temp_Buffer+26) ; first dir cluster + CALL NSECTOR + LD (MSD_DATS.MSD_CAT_SEC2),HL + LD (MSD_DATS.MSD_CAT_SEC),IX + ;JP READ_DIR + + + + +.RESTORE_DIR: + PUSH AF + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD HL,(SYS_PAGE.CURRENT_DIR_SEC_L) + LD DE,(SYS_PAGE.CURRENT_DIR_SEC_H) + LD A,H + OR L + OR D + OR E + JR Z,.exit_Res_Dir + ; + LD (SYS_PAGE.MSD_CAT_SEC),HL + LD (SYS_PAGE.MSD_CAT_SEC2),DE +.exit_Res_Dir: + EX AF,AF' + OUT (SLOT3),A + POP AF + RET + +CORRECT_CUR_DIR: + DI + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,#FF + JR C,.skip + LD (SYS_PAGE.CURRENT_HDD),A +.skip: INC A + LD H,A + LD L,A + LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL + LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL + LD A,C + OUT (SLOT3),A + RET + +*/ \ No newline at end of file From 4f45bbddf40ff8c04c37265559630e415608c3d9 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Thu, 15 Aug 2024 21:32:14 +1000 Subject: [PATCH 29/43] ... --- Shared_Includes | 2 +- spectrum.asm | 1172 +++++++++++++++++++++-------------------------- 2 files changed, 529 insertions(+), 645 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 7e812bc..72fb1b5 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 7e812bc0267db168c5a5b17780e567a7a01cd927 +Subproject commit 72fb1b5f112a67117ecf6d506e452501229154e0 diff --git a/spectrum.asm b/spectrum.asm index e077547..81e405b 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -19,13 +19,13 @@ [x] - поддержка новых образов vROM [x] - в конфиге можно пропустить загрузку с HDD выбранных vROM, они пропускаются если перед путём стоит ";" [x] - проверять метку ZX, если мы не грузим 3 основных vROM - [x] - добавлена совместимость с демо ATARIN, успользующее неполную дешифрацию порта AY - [x] - перед входом в режим спектрума текущим устанавливается раздел HDD с которого загружался образ TRD + [x] - добавлена совместимость с демо ATARIN, успользующей неполную дешифрацию порта AY + [x] - перед входом в режим спектрума текущим устанавливается полный путь к папке с которогй загружался образ TRD ; Images [+] - Load SCL image - [ ] - Load SNA file [ ] - Load TAP image + [ ] - Load SNA file ; Features [+] - Если выбрано ret-zx,то при нажатии на пробел сразу после CAD вернёт в DSS @@ -139,7 +139,8 @@ PALETTE_LINE EQU 9 ELSE ORG org_addr-CLP_Buffer ENDIF - +;███████████████████████████████████████████████████████████████████████; +;███████████████████████████████████████████████████████████████████████; BEGIN: LD (LINE_X),IX LD HL,START_MSG @@ -173,11 +174,18 @@ BEGIN: LD (LINE_X),IX ;LD C,Dss.CurDir ;RST ToDSS ; - - JP COMAND_LINE +; JR PARSE_CMD_LINE + CALL PARSE_CMD_LINE + CALL READ_CNF_FILE + CALL SETUP_ZX + ; + JP NC,PREPARE_TO_ZXMODE + JP EXIT_ALL +;███████████████████████████████████████████████████████████████████████; +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; Error_NoMemForSPpages: LD HL,NO_MEM_MSG JR ERROR_FILE.prn_msg @@ -206,447 +214,10 @@ EXIT_ALL: LD C,Dss.PChars RST ToDSS JR .loop ; +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -COMAND_LINE: LD HL,(LINE_X) - LD A,(HL) - AND A - JR Z,NO_FIL - DEC A - JR Z,NO_FIL - - INC HL - INC HL - - CALL FIND_FILES - - CALL MAKE_FULL_NAME - LD A,SHARED_PAGE - CALL READ_FILE_1 - JP NC,CONTINUE - -NO_FIL: CALL MAKE_FULL_NAME.def_cnf - LD A,SHARED_PAGE - CALL READ_FILE_1 - JR C,ERROR_FILE - JP CONTINUE - -FIND_FILES: PUSH HL - - LD (X_FILE),HL - LD DE,0 - LD (IMAGE_FLAG),DE - LD (IMAGE_NAME),DE - LD (CNF_NAME),DE - LD B,A - JR NO_NEXT - -FIND_T_LOOP: LD A,(HL) - INC HL - CP "." - CALL Z,POINT_F - CP ' ' - CALL Z,BLANK_X - CP 9 - CALL Z,BLANK_X - CP 10 - CALL Z,BLANK_X1 - CP 13 - CALL Z,BLANK_X1 - JR Z,END_NO_IMAGE -NO_NEXT: DJNZ FIND_T_LOOP - -END_NO_IMAGE: POP HL - LD A,(CNF_NAME+1) - AND A - RET NZ - LD A,(IMAGE_NAME+1) - AND A - LD DE,(X_FILE) - JR Z,CNF_ALL - LD DE,CNF_FILE -CNF_ALL: LD (CNF_NAME),DE - RET - -BLANK_X: LD (X_FILE),HL ; найден пробел, имя файла - снова -BLANK_X1: DEC HL - LD (HL),0 - INC HL - RET - -;------------------------------------[v] -POINT_F: LD A,(HL) - CP 't' - JR Z,.TRD - CP 'T' - JR Z,.TRD - - CP 's' - JR Z,.SCL - CP 'S' - JR Z,.SCL - - CP 'z' - JR Z,.CNF - CP 'Z' - JR Z,.CNF -.exit: DEC HL - LD A,(HL) - INC HL - RET - -.SCL: LD DE,IMAGE_FLAG - LD A,1 - LD (DE),A -.TRD: LD DE,(X_FILE) - LD (IMAGE_NAME),DE - JR .exit - -.CNF: LD DE,(X_FILE) - LD (CNF_NAME),DE - JR .exit -;------------------------------------[^] - -LINE_ZX: DZ 'ZX Spectrum PAGES' -LEN_LINE_ZX EQU $-LINE_ZX -;********************************************* - -MSG_EXIT1: DB 13,10, "EXIT without run",13,10,0 -;MSG_EXIT2: DB 13,10, "Выход без запуска" -CR_LINE: DB 13,10,0 -START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'.' - DB 13,10, '(c) Sprinter Team.' - DB 13,10, 'Written by Ivan Mak.' - DB 13,10, 'Modified by Anatoliy Belyanskiy.' - DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 -ERROR_FILE_MSG_X: - DB 13,10, "Error in file: ",0 -;ERROR_FILE2_MSG_X: -; DB 13,10, "Ошибка в файле: ",0 -ERROR_FILE_MSG: DB 13,10, "Unable to work.",0 -;ERROR_FILE2_MSG: -; DB 13,10, "Работа невозможна.",0 -ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0 -;ERROR_CNF2: DB 13,10, "Неожиданный конец CNF файла.",0 -NO_MEM_MSG: DB 13,10, "The spesial pages are already used." - DB 13,10, "Clear memory and restart spectrum.exe again.",0 -;NO_MEM_MSG2: DB 13,10, "Специальные страницы уже заняты." -; DB 13,10, "Очистите память и перезапустите spectrum.exe снова.",0 -MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10 - DB "MODE: ",0 -;MSG_NORMAL2: DB 13,10, "Все файлы считаны нормально.",13,10 -; DB "Конфигурация: ",0 -MSG_NO_MEM: DB 13,10, "No memory space for image or",0 -;MSG_NO_MEM2: DB 13,10, "Не хватает памяти для образа или",0 -MSG_LOAD_IMAGE: DB 13,10, "Image loading: ",0 -;MSG_LOAD_IMAGE2: -; DB 13,10, "Загрузка образа: ",0 -MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 -;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 -MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' - DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 -PROGRES_IND: DB '░',0 ; 176 -PROGRES_100: DB ' 100%',13,10,0 - -;MEM_BLK: BYTE 0 -LINE_X: WORD 0 -X_FILE: WORD 0 -CNF_NAME: WORD 0 -IMAGE_FLAG: BYTE 0 ; 0 - trd, scl - 1, sna - 2, tap - 3 -IMAGE_NAME: WORD 0 -IMAGE_HANDLER: BYTE 0 -SAVE_SLOT3: BYTE 0 -LEN_CNF: WORD 0 -A_LINES: BLOCK CFG_FILE_LINES*2,0 -;********************************************* - -CONTINUE: LD (LEN_CNF),DE ; CNF файл прочитан, DE - длина CNF - -READ_CNF_FILE: LD HL,#C000 - LD DE,A_LINES - LD C,CFG_FILE_LINES -.LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки - EX DE,HL - LD (HL),E - INC HL - LD (HL),D - INC HL - EX DE,HL -.LOOP_L: LD A,(HL) - CP 13 - JR Z,.N_LINE - CP 10 - JR Z,.N_LINE - AND A - JP Z,END_CNF_ERROR - INC HL - DJNZ .LOOP_L -.N_LINE: LD (HL),0 -.N_LINE2: INC HL - LD A,(HL) - CP 13 - JR Z,.N_LINE2 - CP 10 - JR Z,.N_LINE2 - DEC C - JR NZ,.LOOP_A -; выделено 8 строк в CNF -;************************************* -;!TODO если пропускаем загрузку ROM для 48, 128 или trdos, то вставлять в порт vROM номер из стандартного первого блока -;!TEST - MACRO vROM_LOAD romLine;,pageNumber -.romLine = (romLine-1)*2 - EX DE,HL - LD HL,(A_LINES+.romLine) - LD A,(HL) - CP ';' - EX DE,HL - - JR NZ,.go_load - - LD (HL),0 - EX DE,HL - LD A,(NO_ZX_FLAG) - OR A - JR Z,.skip_load - JP ERROR_ZX_FLAG -.go_load: - LD A,(HL) ;BUFFER_RAM_PAGES.ROM - PUSH HL - EX DE,HL - CALL READ_FILE_1 - POP DE - ; - LD A,SHARED_PAGE - OUT (SLOT3),A - JP C,ERROR_FILE -.skip_load: - INC DE - EX DE,HL - ENDM -; -LOAD_ZXROMS: - ;!FIXIT временная заплатка - CALL CHECK_ZX_FLAG - ; - - ;LD BC,BUFFER_RAM_PAGES.ROM - LD HL,BUFFER_RAM_PAGES.ROM - - vROM_LOAD BASIC128_LINE;, #42 ; 2-я строка - имя файла BASIC128 - vROM_LOAD BASIC_48_LINE;, #43 ; 3-я строка - имя файла BASIC 48 - vROM_LOAD TRDOS_LINE ;, #44 ; 4-я строка - имя файла TR-DOS - vROM_LOAD EXP_LINE ;, #45 ; 5-я строка - имя файла EXPANSION - vROM_LOAD BIOS_LINE ;, #46 ; 6-я строка - имя файла BIOS - vROM_LOAD BIOS2_LINE ;, #47 ; 7-я строка - имя файла BIOS2 - ;vROM_LOAD _LINE ;, #42 ; 8-я строка - имя файла - ;vROM_LOAD _LINE ;, #42 ; 9-я строка - имя файла - ;vROM_LOAD _LINE ;, #42 ; 10-я строка - имя файла - ;vROM_LOAD _LINE ;, #42 ; 11-я строка - имя файла - - ;!TEST palette load -LOADING_PALETTE: - EX DE,HL - LD HL,( A_LINES + ((PALETTE_LINE-1)*2) ) - LD A,(HL) - CP ';' - JR Z,.skip - - LD DE,ONE_FILE - LD BC,FULL_FILE_NAME_LENGTH - LDIR - LD HL,ONE_FILE - - LD A,Dss.Open.R - LD C,Dss.Open - RST ToDSS - JP C,ERROR_FILE ; ошибка, если нет файла - - LD (FILE_HANDLE),A - - LD HL,PlaceForPalette - LD DE,1024*4 ;!HARDCODE - LD C,Dss.Read - RST ToDSS - JP C,ERROR_FILE ; ошибка при чтении - ;!TEST протестить DSS на этом. Если файл 4096 и читать 4096, то в A будет #FF - ;OR A - ;JP NZ,ERROR_FILE - ; - LD A,(FILE_HANDLE) - LD C,Dss.Close - RST ToDSS -.skip: - ; -;!TODO печатать имя файла палитры, если он загружен - -; файлы считаны -;************************************* - - LD HL,MSG_NORMAL - LD C,Dss.PChars - RST ToDSS - - LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 ) - LD C,Dss.PChars - RST ToDSS - - LD HL,CR_LINE - LD C,Dss.PChars - RST ToDSS - - ;LD A,(SAVE_SLOT3) - ;OUT (SLOT3),A - -;************************************* - - LD A,SHARED_PAGE - OUT (SLOT3),A - LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; строка параметров -LOOP_PAR1: LD A,(HL) - CP '/' - JR Z,PARAM_TEST - CP 0 - JR Z,PARAM_END - CP 13 - JR Z,PARAM_END - CP 10 - JR Z,PARAM_END - INC HL - JR LOOP_PAR1 - -PARAM_TEST: INC HL - PUSH HL - - LD IX,PARAMS -NEXT_PAR: LD E,(IX) - LD D,(IX+1) - -LOOP_PAR2: LD A,(DE) - CP (HL) - JR NZ,PARAM_E1 - INC HL - INC DE - JR LOOP_PAR2 - -PARAM_E1: CP 255 - JR NZ,NO_PAR - LD A,(HL) - CP ' ' - JR Z,PARAM_E2 - CP 0 - JR Z,PARAM_E2 - CP 13 - JR Z,PARAM_E2 -NO_PAR: POP HL - PUSH HL - INC IX - INC IX - INC IX - INC IX - LD A,(IX+1) - AND A - JR NZ,NEXT_PAR - POP HL - JR LOOP_PAR1 - -PARAM_E2: EX (SP),HL ; новое HL - сохраняется! - - LD A,(IX+3) - LD (IX+2),A ; parameter alternate! - - LD L,(IX) - LD H,(IX+1) - - LD C,Dss.PChars - RST ToDSS - - POP HL - JR LOOP_PAR1 - -;************************************ - IF NEW_MEMORY_LOGIC -BUFFER_RAM_PAGES: -.ROM: BLOCK 10 ; количество портов эмулятора ПЗУ -.RAM: BLOCK 16 ; 256 кб -.Size EQU $-BUFFER_RAM_PAGES -.end_marker: BYTE #FF - ELSE -BUFFER_RAM_PAGES: -.ROM: DB #42, #43, #44, #45, #46, #47 -;.RAM: BLOCK 16 ; 256 кб -.Size EQU $-BUFFER_RAM_PAGES -.end_marker: BYTE #FF - ENDIF - - - MACRO vROM_set dcp_port - LD B,(HL) ; page - INC HL - XOR A - OR B - JR Z,.next - LD A,dcp_port ; ROM-ID - PUSH HL - CALL SET_ROM - POP HL -.next: - ENDM - -PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM - - vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 - vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 - vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS - vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION - vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 - vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 - ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 - ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 - ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 - ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 - - LD HL,(IMAGE_NAME) - LD A,H - OR L - JP Z,SKIP_IMAGE - - LD C,SLOT3 - IN B,(C) - PUSH BC - - CALL READ_IMAGE - POP BC - OUT (C),B - JP C,ERROR_FILE - ; -SKIP_IMAGE: LD A,(No_run_+2) - AND A - JP NZ,PREPARE_TO_ZXMODE - ; - LD HL,MSG_EXIT1 - LD BC,SLOT3 - IN B,(C) - LD A,Spec_Page - OUT (C),A - ; !FIXIT когда будет процедура в биосе переделать под неё - LD A,"Z" - LD (Spec_Page.flag_Z),A - LD A,"X" - LD (Spec_Page.flag_X),A - ; - OUT (C),B - ; - JP EXIT_ALL - - - ;LD HL,MSG_NORMAL - ;JP EXIT_ALL - -;******************************************** - ;JP 0 -;******************************************** - +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ; out B - old ROM-page SET_ROM: DI LD C,BIOS.SET_PORTS @@ -687,9 +258,10 @@ SET_ROM: DI ; POP AF ; OUT (SLOT3),A ; RET -;******************************************** +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -;******************************************** + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ; Чтение образа TRD/SCL в рамдрайв READ_IMAGE: LD DE,ONE_FILE LD BC,FULL_FILE_NAME_LENGTH @@ -805,7 +377,10 @@ READ_IMAGE: LD DE,ONE_FILE CALL Get_RAM_Disk_E RET C JP Load_IMAGE_File +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ; hl:de - размер файла в байтах Get_RAM_Disk_E: LD A,D ADD A,A @@ -826,8 +401,7 @@ Get_RAM_Disk_E: LD A,D AND A JR Z,ERROR_NO_MEM PUSH AF -;*************************************** -; [x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS + ; [x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS .free_disk: DI ;!TEST ;XOR A ; RAM-Drive E: @@ -845,9 +419,10 @@ Get_RAM_Disk_E: LD A,D JR C,ERROR_NO_MEM LD (Load_IMAGE_File.MEM_BLK),A RET -;--------------------------------------- +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -;******************************************** + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; Load_IMAGE_File: LD A,(IMAGE_HANDLER) LD HL,0 @@ -900,7 +475,10 @@ Load_IMAGE_File: RST ToBIOS AND A RET +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ERROR_IN_READ: POP AF JR ERROR_IMAGE_X @@ -912,42 +490,43 @@ ERROR_IMAGE_X: LD A,(IMAGE_HANDLER) RST ToDSS SCF RET +SAV_PG3X: DB 0 ; !FIXIT перенести +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -SAV_PG3X: DB 0 -;******************************************** + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; READ_FILE_1: LD DE,ONE_FILE LD BC,FULL_FILE_NAME_LENGTH LDIR LD HL,ONE_FILE OUT (SLOT3),A - -READ_FILE: LD A,Dss.Open.R + ; READ_FILE: + LD A,Dss.Open.R LD C,Dss.Open RST ToDSS RET C ; ошибка, если нет файла - + ; LD (FILE_HANDLE),A LD A,(FILE_HANDLE) - + ; LD HL,#C000 LD DE,#4000 LD C,Dss.Read RST ToDSS RET C ; ошибка при чтении - + ; PUSH DE - LD A,(FILE_HANDLE) LD C,Dss.Close RST ToDSS - POP DE ; длина считанных данных RET ; ошибка при закрытии или Ok +FILE_HANDLE: DB 0 ; !FIXIT перенести -FILE_HANDLE: DB 0 +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -;******************************************** +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; RESTORE_PORT_HOLD: ;!FIXIT сделать через API BIOS LD D,CMOS_CELL.ScreenPosition @@ -968,7 +547,10 @@ FIRST_PREPARE: LD A,CNF_PORT.CNF_0 AND #1F CP #1E RET -;******************************************** +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; EXIT_TO_DSS: DI LD SP,stack_point @@ -1041,7 +623,10 @@ BACKTXT: ; LD HL,MSG_ZX_EXIT JP EXIT_ALL -;******************************************** +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; PREPARE_TO_ZXMODE: LD C,Dss.GetVMod RST ToDSS @@ -1101,7 +686,7 @@ SETUP_RAM_DRIVES: LD C,BIOS.BLK_TO_RAMD RST ToBIOS .skip: ; -;******************************************** + ; ; ;!FIXIT переделать на функцию биоса SET_RELOAD_PROG: DI @@ -1127,9 +712,8 @@ NO_RET_FN: LD (#FFF4),DE ; IN A,(SLOT2) ; сохранить страницу LD (#FFF2),A ; программы для возврата LD A,(SAVE_SLOT3) - LD (#FFF3),A ; -;******************************************** - + LD (#FFF3),A +;░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░; RESET_TO_ZX: DI LD SP,stack_point ; #BFF0 @@ -1194,13 +778,10 @@ RESET_TO_ZX: DI LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 LD C,BIOS.FN_TURBO RST ToBIOS_18 - -;---------------[test!!!!!]------------- ;[ ] 1/02/2024 режим спектрума работает с любыми каналами и основными разделами CALL SET_CURRENT_HDD -;--------------------------------------- - -;****************************** + ; + ; LD A,(LD_Pal_+2) INC A JR NZ,SetDefaultPalette @@ -1221,7 +802,6 @@ RESET_TO_ZX: DI LD A,7 CALL SET_PAL JR SetDefaultPalette.skip - SetDefaultPalette: XOR A LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette @@ -1253,46 +833,46 @@ Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion XOR A OUT (RGADR),A OUT (RGMOD),A -;************************************************ -; Инициализация страниц -;!FIXIT через функцию биос попробовать + ; Инициализация страниц + ;!FIXIT через функцию биос попробовать DI LD A,5 OUT (SLOT1),A + ; #1FFD + LD BC,#1FFD XOR A OUT (SLOT0),A - - LD BC,#1FFD - OUT (C),A ; #1FFD + OUT (C),A + ; #7FFD LD B,#7F - LD A,8 LOOP_P1: DEC A - OUT (C),A ; #7FFD + OUT (C),A OUT (SLOT3),A JR NZ,LOOP_P1 - + ; #1FFD LD B,#1F LD A,#10 - OUT (C),A ; #1FFD + OUT (C),A + ; #7FFD LD B,#7F LD A,8 -LOOP_P2: OUT (C),A ; #7FFD +LOOP_P2: OUT (C),A OUT (SLOT3),A INC A CP 16 JR NZ,LOOP_P2 - + ; XOR A - OUT (C),A ; #7FFD + OUT (C),A + ; #1FFD LD B,#1F - OUT (C),A ; #1FFD - -; Все RAM, кроме BANK2 - в ней программа! -;*********************************************** - + OUT (C),A + ; + ; Все RAM, кроме BANK2 - в ней программа! + ; LD HL,PROG_STARTS - LD DE,PROG_STARTS.Launch ;!HARDCODE + LD DE,PROG_STARTS.Launch ;!HARDCODE LD BC,0*256 + PROG_STARTS.Length LDIR @@ -1333,8 +913,7 @@ LOOP_P2: OUT (C),A ; #7FFD OUT (SLOT3),A ; JP PROG_STARTS.Launch - -;*************************************** +; ; ; PROG_STARTS: .Launch: EQU #FF00 DISP .Launch @@ -1355,14 +934,17 @@ PROG_STARTS: ; .Length EQU $-PROG_STARTS ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -; + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; SET_PAL: LD DE,0 LD BC,#FF*256 + BIOS.PIC_SET_PAL JP ToBIOS_18 -; +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -;----------------------------------------------------------------------; + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; MAKE_FULL_NAME: LD HL,(CNF_NAME) LD (.mode),HL LD DE,ONE_FILE @@ -1400,11 +982,378 @@ MAKE_FULL_NAME: LD HL,(CNF_NAME) LD (DE),A LD HL,ONE_FILE RET -;----------------------------------------------------------------------; -; +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +PARSE_CMD_LINE: LD HL,(LINE_X) + LD A,(HL) + AND A + JR Z,.NO_FILE + DEC A + JR Z,.NO_FILE + ; + INC HL + INC HL + CALL FIND_FILES + + CALL MAKE_FULL_NAME + LD A,SHARED_PAGE + CALL READ_FILE_1 + JR C,.NO_FILE + ; +.exit: LD (LEN_CNF),DE ; CNF файл прочитан, DE - длина CNF + RET + ; +.NO_FILE: CALL MAKE_FULL_NAME.def_cnf + LD A,SHARED_PAGE + CALL READ_FILE_1 + JP C,ERROR_FILE + JR .exit +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + +FIND_FILES: PUSH HL + LD (X_FILE),HL + LD DE,0 + LD (IMAGE_FLAG),DE + LD (IMAGE_NAME),DE + LD (CNF_NAME),DE + LD B,A + JR .NO_NEXT + ; +.PARSING_LOOP: LD A,(HL) + INC HL + CP "." + CALL Z,.CHOOSE_FILE + CP " " + CALL Z,.BLANK_X + CP "\t" + CALL Z,.BLANK_X + CP "\n" + CALL Z,.BLANK_X1 + CP "\r" + CALL Z,.BLANK_X1 + JR Z,.END_NO_IMAGE +.NO_NEXT: DJNZ .PARSING_LOOP + ; +.END_NO_IMAGE: POP HL + LD A,(CNF_NAME+1) + AND A + RET NZ + LD A,(IMAGE_NAME+1) + AND A + LD DE,(X_FILE) + JR Z,.CNF_ALL + LD DE,CNF_FILE +.CNF_ALL: LD (CNF_NAME),DE + RET + ; +.BLANK_X: LD (X_FILE),HL ; найден пробел, имя файла - снова +.BLANK_X1: DEC HL + LD (HL),0 + INC HL + RET + ; ; +.CHOOSE_FILE: LD A,(HL) + AND %1101'1111 + ; TRD file + CP 'T' + JR Z,.TRD + ; SCL file + CP 'S' + JR Z,.SCL + ; ZX file + CP 'Z' + JR NZ,.unknown + ; +.CNF: LD DE,(X_FILE) + LD (CNF_NAME),DE +.unknown: DEC HL + LD A,(HL) + INC HL + RET + ; +.SCL: LD DE,IMAGE_FLAG + LD A,1 + LD (DE),A +.TRD: LD DE,(X_FILE) + LD (IMAGE_NAME),DE + JR .unknown +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +READ_CNF_FILE: LD HL,#C000 + LD DE,A_LINES + LD C,CFG_FILE_LINES +.LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + EX DE,HL +.LOOP_L: LD A,(HL) + CP "\r" + JR Z,.N_LINE + CP "\n" + JR Z,.N_LINE + AND A + JP Z,END_CNF_ERROR + INC HL + DJNZ .LOOP_L + ; +.N_LINE: LD (HL),0 +.N_LINE2: INC HL + LD A,(HL) + CP "\r" + JR Z,.N_LINE2 + CP "\n" + JR Z,.N_LINE2 + DEC C + JR NZ,.LOOP_A + RET +; выделено 8 строк в CNF +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +;!TODO если пропускаем загрузку ROM для 48, 128 или trdos, +; то вставлять в порт vROM номер из стандартного первого блока +;!TEST + MACRO vROM_LOAD romLine;,pageNumber +.romLine = (romLine-1)*2 + EX DE,HL + LD HL,(A_LINES+.romLine) + LD A,(HL) + CP ';' + EX DE,HL + + JR NZ,.go_load + + LD (HL),0 + EX DE,HL + LD A,(NO_ZX_FLAG) + OR A + JR Z,.skip_load + JP ERROR_ZX_FLAG +.go_load: + LD A,(HL) ;BUFFER_RAM_PAGES.ROM + PUSH HL + EX DE,HL + CALL READ_FILE_1 + POP DE + ; + LD A,SHARED_PAGE + OUT (SLOT3),A + JP C,ERROR_FILE +.skip_load: + INC DE + EX DE,HL + ENDM ; -;----------------------------------------------------------------------; +; +SETUP_ZX: ;LOAD_ZXROMS: ;!FIXIT временная заплатка + CALL CHECK_ZX_FLAG + ; + ;LD BC,BUFFER_RAM_PAGES.ROM + LD HL,BUFFER_RAM_PAGES.ROM + + vROM_LOAD BASIC128_LINE;, #42 2-я строка - имя файла BASIC128 + vROM_LOAD BASIC_48_LINE;, #43 3-я строка - имя файла BASIC 48 + vROM_LOAD TRDOS_LINE ;, #44 4-я строка - имя файла TR-DOS + vROM_LOAD EXP_LINE ;, #45 5-я строка - имя файла EXPANSION + vROM_LOAD BIOS_LINE ;, #46 6-я строка - имя файла BIOS + vROM_LOAD BIOS2_LINE ;, #47 7-я строка - имя файла BIOS2 + ;vROM_LOAD _LINE ;, #42 8-я строка - имя файла + ;vROM_LOAD _LINE ;, #42 9-я строка - имя файла + ;vROM_LOAD _LINE ;, #42 10-я строка - имя файла + ;vROM_LOAD _LINE ;, #42 11-я строка - имя файла + +LOADING_PALETTE:;!TEST palette load + EX DE,HL + LD HL,( A_LINES + ((PALETTE_LINE-1)*2) ) + LD A,(HL) + CP ';' + JR Z,.skip + + LD DE,ONE_FILE + LD BC,FULL_FILE_NAME_LENGTH + LDIR + LD HL,ONE_FILE + + LD A,Dss.Open.R + LD C,Dss.Open + RST ToDSS + JP C,ERROR_FILE ; ошибка, если нет файла + + LD (FILE_HANDLE),A + + LD HL,PlaceForPalette + LD DE,1024*4 ;!HARDCODE + LD C,Dss.Read + RST ToDSS + JP C,ERROR_FILE ; ошибка при чтении + ;!TEST протестить DSS на этом. Если файл 4096 и читать 4096, то в A будет #FF + ;OR A + ;JP NZ,ERROR_FILE + ; + LD A,(FILE_HANDLE) + LD C,Dss.Close + RST ToDSS +.skip: ;!TODO печатать имя файла палитры, если он загружен + ; ; + ; файлы считаны + LD HL,MSG_NORMAL + LD C,Dss.PChars + RST ToDSS + ; + LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 ) + LD C,Dss.PChars + RST ToDSS + ; + LD HL,CR_LINE + LD C,Dss.PChars + RST ToDSS + ;LD A,(SAVE_SLOT3) + ;OUT (SLOT3),A + ; +PARSE_PARAMETERS:; parameters parsing + LD A,SHARED_PAGE + OUT (SLOT3),A + LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; строка параметров +.LOOP_1: LD A,(HL) + CP '/' + JR Z,.PARAM_TEST + CP 0 + JR Z,.PARAM_END + ;RET Z + CP "\r" + JR Z,.PARAM_END + ;RET Z + CP "\n" + JR Z,.PARAM_END + ;RET Z + INC HL + JR .LOOP_1 + ; +.PARAM_TEST: INC HL + PUSH HL + LD IX,PARAMS +.NEXT_PAR: LD E,(IX) + LD D,(IX+1) +.LOOP_2: LD A,(DE) + CP (HL) + JR NZ,.PARAM_E1 + INC HL + INC DE + JR .LOOP_2 +.PARAM_E1: CP #FF + JR NZ,.NO_PAR + LD A,(HL) + CP " " + JR Z,.PARAM_E2 + CP 0 + JR Z,.PARAM_E2 + CP "\r" + JR Z,.PARAM_E2 +.NO_PAR: POP HL + PUSH HL + INC IX + INC IX + INC IX + INC IX + LD A,(IX+1) + AND A + JR NZ,.NEXT_PAR + POP HL + JR .LOOP_1 + ; +.PARAM_E2: EX (SP),HL ; новое HL - сохраняется! + LD A,(IX+3) + LD (IX+2),A ; parameter alternate! + LD L,(IX) + LD H,(IX+1) + LD C,Dss.PChars + RST ToDSS + ; + POP HL + JR .LOOP_1 + ; + + + + MACRO vROM_set dcp_port + LD A,dcp_port + CALL SET_DCP_PORT + ENDM + +.PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM + vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 + vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 + vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS + vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION + vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 + vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 + ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 + ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 + ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 + ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 + + LD HL,(IMAGE_NAME) + LD A,H + OR L + JP Z,SKIP_IMAGE + + LD C,SLOT3 + IN B,(C) + PUSH BC + + CALL READ_IMAGE + POP BC + OUT (C),B + JP C,ERROR_FILE + ; +SKIP_IMAGE: LD A,(No_run_+2) + AND A + RET NZ + ; + LD HL,MSG_EXIT1 + LD BC,SLOT3 + IN B,(C) + LD A,Spec_Page + OUT (C),A + ; !FIXIT когда будет процедура в биосе переделать под неё + LD A,"Z" + LD (Spec_Page.flag_Z),A + LD A,"X" + LD (Spec_Page.flag_X),A + ; + OUT (C),B + ; + SCF + RET +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +SET_DCP_PORT: LD B,(HL) ; page + INC HL + INC B + DEC B + RET Z + ; + PUSH HL + CALL SET_ROM + POP HL + RET +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ;!FIXIT временная заплатка CHECK_ZX_FLAG: LD BC,SLOT3 @@ -1417,7 +1366,6 @@ CHECK_ZX_FLAG: SBC HL,DE JR Z,.exit - ; LD A,(Spec_Page.flag_Z) ; CP 'Z' ; JR NZ,.no_zx @@ -1431,10 +1379,86 @@ CHECK_ZX_FLAG: .exit: OUT (C),B RET NO_ZX_FLAG DB 0 +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + +; +;----------------------------------------------------------------------; + INCLUDE 'For_4X.asm' ;----------------------------------------------------------------------; ; - INCLUDE 'For_4X.asm' + +; +;----------------------------------------------------------------------; + IF NEW_MEMORY_LOGIC +BUFFER_RAM_PAGES: +.ROM: BLOCK 6 ; количество портов эмулятора ПЗУ +.RAM: BLOCK 16 ; 256 кб +.Size EQU $-BUFFER_RAM_PAGES +.end_marker: BYTE #FF + ELSE +BUFFER_RAM_PAGES: +.ROM: DB #42, #43, #44, #45, #46, #47 +;.RAM: BLOCK 16 ; 256 кб +.Size EQU $-BUFFER_RAM_PAGES +.end_marker: BYTE #FF + ENDIF +;----------------------------------------------------------------------; +; + + +;----------------------------------------------------------------------; +LINE_ZX: DZ 'ZX Spectrum PAGES' +LEN_LINE_ZX EQU $-LINE_ZX +;********************************************* + +MSG_EXIT1: DB 13,10, "EXIT without run",13,10,0 +;MSG_EXIT2: DB 13,10, "Выход без запуска" +CR_LINE: DB 13,10,0 +START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'.' + DB 13,10, '(c) Sprinter Team.' + DB 13,10, 'Written by Ivan Mak.' + DB 13,10, 'Modified by Anatoliy Belyanskiy.' + DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 +ERROR_FILE_MSG_X: DB 13,10, "Error in file: ",0 +;ERROR_FILE2_MSG_X: DB 13,10, "Ошибка в файле: ",0 +ERROR_FILE_MSG: DB 13,10, "Unable to work.",0 +;ERROR_FILE2_MSG: DB 13,10, "Работа невозможна.",0 +ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0 +;ERROR_CNF2: DB 13,10, "Неожиданный конец CNF файла.",0 +NO_MEM_MSG: DB 13,10, "The spesial pages are already used." + DB 13,10, "Clear memory and restart spectrum.exe again.",0 +;NO_MEM_MSG2: DB 13,10, "Специальные страницы уже заняты." +; DB 13,10, "Очистите память и перезапустите spectrum.exe снова.",0 +MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10 + DB "MODE: ",0 +;MSG_NORMAL2: DB 13,10, "Все файлы считаны нормально.",13,10 +; DB "Конфигурация: ",0 +MSG_NO_MEM: DB 13,10, "No memory space for image or",0 +;MSG_NO_MEM2: DB 13,10, "Не хватает памяти для образа или",0 +MSG_LOAD_IMAGE: DB 13,10, "Image loading: ",0 +;MSG_LOAD_IMAGE2: +; DB 13,10, "Загрузка образа: ",0 +MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 +;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 +MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' + DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 +PROGRES_IND: DB '░',0 ; 176 +PROGRES_100: DB ' 100%',13,10,0 + +;MEM_BLK: BYTE 0 +LINE_X: WORD 0 +X_FILE: WORD 0 +CNF_NAME: WORD 0 +IMAGE_FLAG: BYTE 0 ; 0 - trd, scl - 1, sna - 2, tap - 3 +IMAGE_NAME: WORD 0 +IMAGE_HANDLER: BYTE 0 +SAVE_SLOT3: BYTE 0 +LEN_CNF: WORD 0 +A_LINES: BLOCK CFG_FILE_LINES*2,0 +;********************************************* +;----------------------------------------------------------------------; +; ; Если параметр задан, то выбирается значение Y @@ -1503,144 +1527,4 @@ PlaceForTXTscreen EQU PlaceForPalette + 1024*4 ;!HARDCODE ; Code after Loader ;[]-------------------------------------------------------------------[] ; Code end section -; - -; [x] new tr-hdd -; TO INIT by SPECTRUM.EXE: -; .CURRENT_DIR_SEC_L EQU #C196 ; word -; .CURRENT_DIR_SEC_H EQU #C198 ; word -; .CURRENT_DIR_DRIVE EQU #C19A -; .CURRENT_HDD EQU #C12D - -; CORRECT_CUR_DIR: -; DI -; IN A,(SLOT3) -; LD C,A -; LD A,SYS_PAGE -; OUT (SLOT3),A -; LD A,#FF -; JR C,.skip -; LD (SYS_PAGE.CURRENT_HDD),A -; .skip: INC A -; LD H,A -; LD L,A -; LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL -; LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL -; LD A,C -; OUT (SLOT3),A -; RET -/* -INIT_HDD_WORK: - LD A,(RESET_TO_ZX.hdd) - CP #FF - JR Z,.skip_hdd - ; - OR #80 - LD HL,Temp_Buffer - LD BC,Dss.DskInfo - RST ToDSS - ; - LD B,4 ;!HARDCODE номер нужного параметра - LD DE,0 - LD HL,Temp_Buffer -.loop_param: ADD HL,DE - LD E,(HL) - INC HL - DJNZ .loop_param - LD A,(HL) - AND #80 - JR Z,.no_change_Disk - CP #90 - JR NC,.no_change_Disk - ; - LD A,3 - AND (HL) - LD D,A - INC HL - LD A,(HL) - RLCA - RLCA - ; - OR D - AND #0F - JR .start - ; -.no_change_Disk:; - XOR A -.start: LD C,BIOS.HDD_PART ; IDE-1/IDE-2 - RST ToBIOS - ; -.loop: LD C,BIOS.HDD_INIT - RST ToBIOS - JR C,.loop - ; - - CALL BPB_SetUp - - - ;[x] music and dirs - LD HL,SND_DIR - LD DE,Temp_Buffer - LD A,FAT_ATTR.DIRECTORY - LD BC,Dss.F_First.FATname - RST ToDSS - JR NC,.start_setup - ; - LD A,#C9 ; RET opcode - disable music - LD (SoundOnOff2),A - RET - ; -.start_setup: -;-=-=-=-=-=-=-=- - LD HL,(Temp_Buffer+26) ; first dir cluster - CALL NSECTOR - LD (MSD_DATS.MSD_CAT_SEC2),HL - LD (MSD_DATS.MSD_CAT_SEC),IX - ;JP READ_DIR - - - - -.RESTORE_DIR: - PUSH AF - ; - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - ; - LD HL,(SYS_PAGE.CURRENT_DIR_SEC_L) - LD DE,(SYS_PAGE.CURRENT_DIR_SEC_H) - LD A,H - OR L - OR D - OR E - JR Z,.exit_Res_Dir - ; - LD (SYS_PAGE.MSD_CAT_SEC),HL - LD (SYS_PAGE.MSD_CAT_SEC2),DE -.exit_Res_Dir: - EX AF,AF' - OUT (SLOT3),A - POP AF - RET - -CORRECT_CUR_DIR: - DI - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,#FF - JR C,.skip - LD (SYS_PAGE.CURRENT_HDD),A -.skip: INC A - LD H,A - LD L,A - LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL - LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL - LD A,C - OUT (SLOT3),A - RET - -*/ \ No newline at end of file +; \ No newline at end of file From 703ad3d96322db7dde95392947075971266293c1 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 17 Aug 2024 05:37:53 +1000 Subject: [PATCH 30/43] ... --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 72fb1b5..e73e9f8 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 72fb1b5f112a67117ecf6d506e452501229154e0 +Subproject commit e73e9f8d4f4e72de4f6b54abaec159684fdcebe1 From d07085bb0a7f9583ffc103541394caa45bddbcad Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Thu, 3 Oct 2024 00:09:21 +1000 Subject: [PATCH 31/43] before free zx pages --- For_4x.asm | 4 +- Shared_Includes | 2 +- ZXMODE/ZXMODE.FRT | 177 ++++++++++++++++++++++++++++++++++++++++++++++ ZXMODE/_HELP.FRT | 19 +++++ spectrum.asm | 26 ++++--- 5 files changed, 212 insertions(+), 16 deletions(-) create mode 100644 ZXMODE/ZXMODE.FRT create mode 100755 ZXMODE/_HELP.FRT diff --git a/For_4x.asm b/For_4x.asm index a4fd653..8c163d5 100644 --- a/For_4x.asm +++ b/For_4x.asm @@ -1,3 +1,5 @@ +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; + INCLUDE 'Shared_Includes/structures/FileSystem.inc' ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; ; in: HL - CLUSTER @@ -56,7 +58,7 @@ SET_IMAGE_DIR_SECTOR: RST ToDSS RET C ; - LD HL,(TMP_BUFF+26) ; ;!HARDCODE first dir cluster + LD HL,(TMP_BUFF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) CALL CLUSTER_TO_SECTOR LD (RESET_TO_ZX.DIR_SEC_L),IX LD (RESET_TO_ZX.DIR_SEC_H),HL diff --git a/Shared_Includes b/Shared_Includes index e73e9f8..817bba0 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit e73e9f8d4f4e72de4f6b54abaec159684fdcebe1 +Subproject commit 817bba0c1abebdb890f77ee129578ebe06fb5131 diff --git a/ZXMODE/ZXMODE.FRT b/ZXMODE/ZXMODE.FRT new file mode 100644 index 0000000..ce69977 --- /dev/null +++ b/ZXMODE/ZXMODE.FRT @@ -0,0 +1,177 @@ +\ \\\\ menu program for spectrum.exe \\\\ \ + +VARIABLE MAIN-X +VARIABLE CURS-M +VARIABLE MENU +VARIABLE ITEMS +VARIABLE EXE-POINT +VARIABLE PLACE-M + +: M-CB 10 COLOR ! ; +: M-C0 07 COLOR ! ; +: M-C1 70 COLOR ! ; +: M-C2 30 COLOR ! ; +: M-C3 3F COLOR ! ; +: M-C4 01 COLOR ! ; + + : CLSM M-CB 100 SET_POS 17 0 DO CLL CR LOOP ; + + : MENU" CREATE , , ," ; + : ITEM" , ," BL WORD FIND IF NAME> , ELSE ABORT" no word!" THEN ; + : END-MENU 0 , ; + +\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \ + +19 CONSTANT LEN-F + + : EDIT-FNAME EXE-POINT @ PLACE-M @ OVER C@ LEN-F - + SET_POS C@+ + LEN-F - LEN-F 1- (EXPECT) ; + : EDIT-CNAME EXE-POINT @ PLACE-M @ OVER C@ 0D - + SET_POS C@+ + 0D - 0C (EXPECT) ; + : NO-ESC ; + : H-LINE M-C3 1800 SET_POS CLL 1801 SET_POS ; + + : NEW-MENU M-C1 PLACE-M @ SET_POS EXE-POINT @ C@+ TYPE MENU ! CLSM ; + + : M-EXIT M-C0 CLS BYE ; + + : RET-MAIN MAIN-X @ MENU @ = IF M-EXIT THEN + H-LINE ." Ret to Main " MAIN-X @ NEW-MENU ; + +: NO-FN H-LINE ." no function " ; + +1 0E1B MENU" TRDS TRD files " +1 ITEM" Disk A: testfile.trd " EDIT-FNAME +1 ITEM" Disk B: " EDIT-FNAME +1 ITEM" Disk C: " EDIT-FNAME +1 ITEM" Disk D: " EDIT-FNAME +1 ITEM" Main Menu " RET-MAIN +END-MENU + +1 21B MENU" ROMS ROM Menu " +1 ITEM" BASIC48 basic48.bin " EDIT-FNAME +1 ITEM" BASIC128 basic128.bin " EDIT-FNAME +1 ITEM" TR-DOS trdos5s.bin " EDIT-FNAME +1 ITEM" EXPANSION exp.bin " EDIT-FNAME +1 ITEM" BIOS1 exp.bin " EDIT-FNAME +1 ITEM" BIOS2 exp2.bin " EDIT-FNAME +1 ITEM" Main Menu " RET-MAIN +END-MENU + +1 414 MENU" CONFIG Options Menu " +1 ITEM" Turbo Yes " NO-FN +1 ITEM" Sprinter ports Yes " NO-FN +1 ITEM" Port 1FFD Yes " NO-FN +1 ITEM" Port 7FFD Yes " NO-FN +1 ITEM" 512Kb Memory No " NO-FN +1 ITEM" Original Int No " NO-FN +1 ITEM" Scorpion Int No " NO-FN +1 ITEM" 312 screen lines No " NO-FN +1 ITEM" Start TR-DOS No " NO-FN +1 ITEM" Install only No " NO-FN +1 ITEM" Reset to ZX Yes " NO-FN +1 ITEM" Main Menu " RET-MAIN +END-MENU + +1 D03 MENU" STAN Standards " +1 ITEM" Sprinter ZX " NO-FN +1 ITEM" ZX Spectrum " NO-FN +1 ITEM" Pentagon 128 " NO-FN +1 ITEM" Scorpion 256 " NO-FN +1 ITEM" Pentagon 512 " NO-FN +1 ITEM" Main Menu " RET-MAIN +END-MENU + +1 512 MENU" SPEC Specials " +1 ITEM" Save your MODE " NO-FN +1 ITEM" Save utility " NO-FN +1 ITEM" Main Menu " RET-MAIN +END-MENU + +: START-ZX H-LINE ." Start SPECTRUM.EXE" ; +: STANDARD H-LINE ." Choose standard mode" STAN NEW-MENU ; +: CONFIG-ZX H-LINE ." Set Spectrum MODE options" CONFIG NEW-MENU ; +: ROM-SET H-LINE ." Set Spectrum ROM files" ROMS NEW-MENU ; +: TRD-FILES H-LINE ." Set TR-DOS disk images" TRDS NEW-MENU ; +: SPECIALS H-LINE ." Special functions" SPEC NEW-MENU ; + +1 203 MENU" MAIN Main Menu " ( pos,curs,"name" ) +1 ITEM" Mode: Sprinter ZX " EDIT-CNAME +1 ITEM" Start " START-ZX ( type "name" word ) +1 ITEM" Standard modes " STANDARD +1 ITEM" Options " CONFIG-ZX +1 ITEM" ROM files " ROM-SET +1 ITEM" Disk image files " TRD-FILES +1 ITEM" Specials " SPECIALS +1 ITEM" Exit " M-EXIT +END-MENU + +MAIN MAIN-X ! + +: CURS-TYPE CURS-M @ 0= + IF GET_POS PLACE-M ! DUP EXE-POINT ! C@+ M-C2 TYPE M-C1 ELSE C@+ TYPE THEN + -1 CURS-M +! 1 ITEMS +! ; + +: HEAD ( len -> ) GET_POS SWAP M-C1 C" ╔ EMIT 0 DO C" ═ EMIT LOOP C" ╗ EMIT 100 + SET_POS ; +: TEXT ( len -> ) GET_POS OVER M-C1 C" ║ EMIT CURS-TYPE C" ║ EMIT M-C4 ." ▒▒" 100 + SET_POS ; +: LINE ( len -> ) GET_POS SWAP M-C1 C" ╟ EMIT 0 DO C" ─ EMIT LOOP C" ╢ EMIT M-C4 ." ▒▒" 100 + SET_POS ; +: ENDS ( l->) GET_POS OVER M-C1 C" ╚ EMIT 0 DO C" ═ EMIT LOOP C" ╝ EMIT M-C4 ." ▒▒" + 102 + SET_POS 2 + C" ▒ SWAP 0 DO DUP EMIT LOOP DROP ; + +MAIN MENU ! + +: PRINT-MENU COLOR @ M-C1 ITEMS 0! EXE-POINT 0! + MENU @ + DUP @ SET_POS 2 + + DUP @ CURS-M ! 2 + + DUP C@ HEAD TEXT DUP C@ LINE DUP C@ SWAP C@+ + + BEGIN DUP @ 0<> WHILE + 2 + TEXT C@+ + 2 + REPEAT + DROP ENDS COLOR ! ; + + + : CURS-UP MENU @ 2 + DUP @ 1- 1 MAX SWAP ! ; + : CURS-DN MENU @ 2 + DUP @ 1+ ITEMS @ 1- MIN SWAP ! ; + : CURS-HOME 1 MENU @ 2 + ! ; + : CURS-END ITEMS @ 1- MENU @ 2 + ! ; + + : EXE-MENU M-C0 EXE-POINT @ ?DUP IF C@+ + @ EXECUTE THEN ; + + : KEY-MENU WAIT-KEY + +DUP [ SYS-ID 011B AND SYS-ID NOT 011B AND OR ] LITERAL = IF DROP RET-MAIN EXIT THEN ( ESC ) +DUP [ SYS-ID 4400 AND SYS-ID NOT 4400 AND OR ] LITERAL = IF DROP RET-MAIN EXIT THEN ( F10 ) +DUP [ SYS-ID 5200 AND SYS-ID NOT 5000 AND OR ] LITERAL = IF DROP CURS-DN EXIT THEN ( Down ) +DUP [ SYS-ID 5800 AND SYS-ID NOT 4800 AND OR ] LITERAL = IF DROP CURS-UP EXIT THEN ( Up ) +DUP [ SYS-ID 280D AND SYS-ID NOT 1C0D AND OR ] LITERAL = IF DROP EXE-MENU EXIT THEN ( Up ) +\ DUP [ SYS-ID D400 AND SYS-ID NOT 7300 AND OR ] LITERAL = IF DROP W-LEFT EXIT THEN ( ) +\ DUP [ SYS-ID 5400 AND SYS-ID NOT 4B00 AND OR ] LITERAL = IF DROP -POS EXIT THEN ( <- ) +\ DUP [ SYS-ID 5600 AND SYS-ID NOT 4D00 AND OR ] LITERAL = IF DROP +POS EXIT THEN ( -> ) +\ DUP [ SYS-ID 0F09 AND SYS-ID NOT 0F09 AND OR ] LITERAL = IF DROP TAB+ EXIT THEN ( tab ) +\ DUP [ SYS-ID 8F09 AND SYS-ID NOT 0F00 AND OR ] LITERAL = IF DROP TAB- EXIT THEN ( ESC-W ! + +TRUE H-FLAG ! +07 COLOR ! + +MAKE LOOP-M +\ PC> INC-END SAVE-SYSTEM _test.com +\ SP> INC-END SAVE-SYSTEM zxmode.exe + +CLS LOOP-M +BYE + diff --git a/ZXMODE/_HELP.FRT b/ZXMODE/_HELP.FRT new file mode 100755 index 0000000..95cf5a0 --- /dev/null +++ b/ZXMODE/_HELP.FRT @@ -0,0 +1,19 @@ +\ !! DO NOT EDIT THIS FILE !! +M-C0 100 SET_POS +CLL CR +CLL .( This is a help page ┐) +CLL .( └───────────────────┘) +CLL CR +CLL .( Main keys: F1 - help F10 - Terminate program) +CLL .( Down - cursor DOWN Up - cursor UP) +CLL .( Home - cursor to 1-st line End - cursor to last) +CLL .( Enter - Execute ESC - Exit from menu) +CLL CR +CLL .( Special keys: Ctrl+left - Shift menu Left) +CLL .( Ctrl+right - Shift menu Right) +CLL .( Ctrl+PageUp - Shift menu Up) +CLL .( Ctrl+PageDown - Shift menu Down) +CLL CR +CLL .( --*** press any key ***--) CLL CR +M-CB WAIT-KEY MENU @ NEW-MENU + diff --git a/spectrum.asm b/spectrum.asm index 81e405b..4bcfd4e 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -527,22 +527,19 @@ FILE_HANDLE: DB 0 ; !FIXIT ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -RESTORE_PORT_HOLD: - ;!FIXIT сделать через API BIOS +FIRST_PREPARE: LD A,CNF_PORT.CNF_0 + OUT (SYS_PORT.RAM),A + ; restore HOLD port LD D,CMOS_CELL.ScreenPosition LD C,BIOS.CMOS_RD RST ToBIOS - RET C + JR C,.next LD B,A LD A,ACEX.HOLD LD C,BIOS.SET_PORTS - JP ToBIOS -; ; ; -FIRST_PREPARE: LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.RAM),A - CALL RESTORE_PORT_HOLD - - LD A,high ZXKeys.Line_7 + RST ToBIOS + ; +.next: LD A,high ZXKeys.Line_7 IN A,(ZXKeys) AND #1F CP #1E @@ -747,8 +744,9 @@ RESET_TO_ZX: DI .DIR_SEC_H+1: LD HL,0 LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL .CURRENT_DIR_DRIVE+1: - LD A,#FF + LD A,#FF LD (SYS_PAGE.CURRENT_DIR_DRIVE),A + LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A ;;;;;;;; LD A,CNF_PORT.CNF_3 @@ -836,12 +834,12 @@ Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion ; Инициализация страниц ;!FIXIT через функцию биос попробовать DI - LD A,5 + LD A,5 ; [ ] free zx pages! OUT (SLOT1),A ; #1FFD LD BC,#1FFD XOR A - OUT (SLOT0),A + OUT (SLOT0),A ; [ ] free zx pages! OUT (C),A ; #7FFD LD B,#7F @@ -917,7 +915,7 @@ LOOP_P2: OUT (C),A PROG_STARTS: .Launch: EQU #FF00 DISP .Launch - LD A,2 + LD A,2 ; [ ] free zx pages! OUT (SLOT2),A LD A,E OUT (SYS_PORT.RAM),A From 46d3d4f99ce1f8b997efccb164d26487890d54f2 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 5 Oct 2024 21:19:55 +1000 Subject: [PATCH 32/43] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- spectrum.asm | 1095 +++++++++++++++++++++++++++-------------------- 2 files changed, 631 insertions(+), 466 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 817bba0..722db55 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 817bba0c1abebdb890f77ee129578ebe06fb5131 +Subproject commit 722db55c24ee5172d610e832f3933c90914fcb8c diff --git a/spectrum.asm b/spectrum.asm index 4bcfd4e..b629407 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -48,7 +48,7 @@ IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF DEFINE EXE_HEADER 1 DEFINE App_EXE_Version 1 - DEFINE NEW_MEMORY_LOGIC 0 + DEFINE NEW_MEMORY_LOGIC 1 ; define NEED_LOADER 1 ; define NeedSafePort_Y 0 ;*************************************** @@ -95,29 +95,21 @@ Loader_length EQU 0 FULL_FILE_NAME_LENGTH EQU 256 ; длина строки пути к файлу MAX_LINE_LENGTH EQU 120 ; длина строки CFG файла -;!TEST -;CFG_FILE_LINES EQU 8 -CFG_FILE_LINES EQU 9 -; -; NAME_CFG_LINE EQU 0 -; BASIC128_LINE EQU 2 -; BASIC_48_LINE EQU 4 -; TRDOS_LINE EQU 6 -; EXP_LINE EQU 8 -; BIOS_LINE EQU 10 -; BIOS2_LINE EQU 12 -;XXX_LINE EQU ?? - -NAME_CFG_LINE EQU 1 -BASIC128_LINE EQU 2 -BASIC_48_LINE EQU 3 -TRDOS_LINE EQU 4 -EXP_LINE EQU 5 -BIOS_LINE EQU 6 -BIOS2_LINE EQU 7 -OPTIONS_LINE EQU 8 -PALETTE_LINE EQU 9 +CFG_FILE_LINES EQU 13 +.NAME EQU 1 +.BASIC128 EQU 2 +.BASIC_48 EQU 3 +.TRDOS EQU 4 +.ZXEXP EQU 5 +.ZXBIOS1 EQU 6 +.ZXBIOS2 EQU 7 +.BASIC128_2 EQU 8 +.BASIC_48_2 EQU 9 +.TRDOS_2 EQU 10 +.ZXEXP_2 EQU 11 +.OPTIONS EQU 12 +.PALETTE EQU 13 ;OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2 ;*************************************** @@ -151,15 +143,6 @@ BEGIN: LD (LINE_X),IX LD (SAVE_SLOT3),A ; ; - IF NEW_MEMORY_LOGIC - LD BC,BUFFER_RAM_PAGES.Size * 256 + Dss.GetMem - RST ToDSS - JR C,Error_NoMemForSPpages - LD HL,BUFFER_RAM_PAGES - LD C,BIOS.GetMemBlkPages - RST ToBIOS - ENDIF - ; ;!TODO ;LD HL,SPECTRUM_HOME_DIR ;LD BC,Dss.AppInfo.EXE_HomeDir @@ -177,10 +160,38 @@ BEGIN: LD (LINE_X),IX ; JR PARSE_CMD_LINE CALL PARSE_CMD_LINE CALL READ_CNF_FILE - CALL SETUP_ZX + ; SetUp ZX + CALL PARSE_PARAMETERS + CALL COUNT_vROM_PAGES + PUSH AF + ;!FIXIT проверить флаг ZX, если CF ; [ ] free zx pages ??ERROR_ZX_FLAG?? + ; Очищаем память, если ROM_BIN > 0 + LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages + CALL NC,ToBIOS + ; Выделяем страницы под vRAM + CALL GET_vRAM_PAGES + ;JR C, ; no mem for vRAM ;!FIXIT ;[ ] free zx pages + POP AF + ; Выделяем страницы под vROM, если ROM_BIN > 0 + JR C,.skip_vROM + LD A,(ZX_vROM_COUNT) + LD B,A + LD C,BIOS.GetMem + RST ToBIOS + ;JR C, ; no mem for vROM ;!FIXIT ;[ ] free zx pages + LD (ZX_vROM_BLK),A + ; Маппим страницы vROM, если ROM_BIN > 0 + LD HL,BUFFER_RAM_PAGES + LD C,BIOS.GetMemBlkPages + RST ToBIOS + CALL LOAD_vROM_BIN + +.skip_vROM: CALL LOADING_PALETTE + ;CALL INIT_vROM_PAGES ; - JP NC,PREPARE_TO_ZXMODE - JP EXIT_ALL + ;JP NC,PREPARE_TO_ZXMODE + JP PREPARE_TO_ZXMODE + ;JP EXIT_ALL ;███████████████████████████████████████████████████████████████████████; @@ -219,45 +230,9 @@ EXIT_ALL: LD C,Dss.PChars ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ; out B - old ROM-page -SET_ROM: DI +SET_ROM: DI ;!FIXIT оставить одно DI в начале LD C,BIOS.SET_PORTS JP ToBIOS - - ; DI - ; ; - ; EX AF,AF' - ; IN A,(SLOT3) - ; PUSH AF - ; LD A,DCP_PAGE ; установить новую - ; OUT (SLOT3),A - ; ; - ; LD A,(#C400) ; сохранить то что было - ; LD E,A - ; LD A,(#C600) - ; LD D,A - ; ; - ; EX AF,AF' ; страница - ; LD (#C400),A ; установить порт ROM - ; LD (#C600),A - ; ; - ; EX AF,AF' - ; LD A,B - ; LD BC,0 - ; EX AF,AF' - ; IN A,(C) - ; EX AF,AF' - ; OUT (C),A ; установить новый ROM - ; EX AF,AF' - ; ; - ; LD B,A - ; LD A,E - ; LD (#C400),A ; вернуть порт - ; LD A,D - ; LD (#C600),A ; вернуть порт - ; ; - ; POP AF - ; OUT (SLOT3),A - ; RET ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -564,7 +539,7 @@ EXIT_TO_DSS: DI RST ToBIOS ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе - LD A,(RMD_Keep_+2) + LD A,(PARAMS.RMD_Keep+2) AND A JR NZ,.next ; очистка рамдисков @@ -659,30 +634,30 @@ SAVETXT: LD (BACKTXT.VMODE),A .EXIT: ; ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD -SETUP_RAM_DRIVES: - LD BC,BIOS.SWAP_RAM_DRIVES.ZX - RST ToBIOS - ; запуск с файлом для рамдиска? - LD A,(Load_IMAGE_File.MEM_BLK) - OR A - JR Z,.skip - ; проверяем драйв перед переназначением - XOR A - LD C,BIOS.GET_RAMD_ST - RST ToBIOS - OR A - JR Z,.set_block - ; освободить рамдиск - XOR A - LD C,BIOS.FreeMemRMD - RST ToBIOS - ; set disk e: -.set_block: LD A,(Load_IMAGE_File.MEM_BLK) - LD B,A - XOR A - LD C,BIOS.BLK_TO_RAMD - RST ToBIOS -.skip: ; +; SETUP_RAM_DRIVES: +; LD BC,BIOS.SWAP_RAM_DRIVES.ZX +; RST ToBIOS +; ; запуск с файлом для рамдиска? +; LD A,(Load_IMAGE_File.MEM_BLK) +; OR A +; JR Z,.skip +; ; проверяем драйв перед переназначением +; XOR A +; LD C,BIOS.GET_RAMD_ST +; RST ToBIOS +; OR A +; JR Z,.set_block +; ; освободить рамдиск +; XOR A +; LD C,BIOS.FreeMemRMD +; RST ToBIOS +; ; set disk e: +; .set_block: LD A,(Load_IMAGE_File.MEM_BLK) +; LD B,A +; XOR A +; LD C,BIOS.BLK_TO_RAMD +; RST ToBIOS +; .skip: ; ; ; ;!FIXIT переделать на функцию биоса SET_RELOAD_PROG: @@ -690,12 +665,12 @@ SET_RELOAD_PROG: LD A,Spec_Page OUT (SLOT3),A - LD A,"Z" - LD (#FFFE),A - LD A,"X" - LD (#FFFF),A + ; LD A,"Z" + ; LD (#FFFE),A + ; LD A,"X" + ; LD (#FFFF),A - LD A,(Ret_fn_+2) + LD A,(PARAMS.Ret_fn+2) AND A LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx JR Z,NO_RET_FN @@ -718,19 +693,19 @@ RESET_TO_ZX: DI JP Z,EXIT_TO_DSS.cont ; [x] фикс неполной дешифрации порта #FFFD (пишут в #C0FD) -.cont: LD A,#FF - LD HL,%00'010'1'1110'1101 - LD DE,%10'111'1'1111'1111 ; CNF_0, CNF_1 - LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG - RST ToBIOS +.cont: ; LD A,#FF + ; LD HL,%00'010'1'1110'1101 + ; LD DE,%10'111'1'1111'1111 ; CNF_0, CNF_1 + ; LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG + ; RST ToBIOS ; ; [x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD - LD BC,BIOS.SWAP_RAM_DRIVES.ZX - RST ToBIOS + ; LD BC,BIOS.SWAP_RAM_DRIVES.ZX + ; RST ToBIOS ; - LD A,(Ret_zx_+2) + LD A,(PARAMS.Ret_zx+2) LD B,A - LD A,(Ret_fn_+2) + LD A,(PARAMS.Ret_fn+2) XOR B LD B,A LD A,ACEX.RET_PORT @@ -749,40 +724,43 @@ RESET_TO_ZX: DI LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A ;;;;;;;; - LD A,CNF_PORT.CNF_3 - OUT (SYS_PORT.ROM),A ; System-page on & CNF = 3 + ; LD A,CNF_PORT.CNF_3 + ; OUT (SYS_PORT.ROM),A ; System-page on & CNF = 3 - XOR A - OUT (BorderColor),A ; border-0 - OUT (RGADR),A ; Screen-page = 0 - OUT (RGMOD),A ; Screen-mode-page = 0 - LD BC,#1FFD - OUT (C),A ; Scorpion-port = 0 - LD BC,#7FFD - OUT (C),A ; pentagon-port = 0 + ; XOR A + ; OUT (BorderColor),A ; border-0 + ; OUT (RGADR),A ; Screen-page = 0 + ; OUT (RGMOD),A ; Screen-mode-page = 0 + ; LD BC,#1FFD + ; OUT (C),A ; Scorpion-port = 0 + ; LD BC,#7FFD + ; OUT (C),A ; pentagon-port = 0 - LD A,(Int_or_+2) - AND A - LD A,#FA ; original waits on - JR NZ,.ORIG1 - LD A,#FE -.ORIG1: LD BC,Port_All_Mode - OUT (C),A ; ACC-Off +; LD A,(PARAMS.Int_or+2) +; AND A +; LD A,#FA ; original waits on +; JR NZ,.ORIG1 +; LD A,#FE +; .ORIG1: LD BC,Port_All_Mode +; OUT (C),A ; ACC-Off LD BC,CBL.SYS_PORT XOR A OUT (C),A ; CBL-off - - LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 - LD C,BIOS.FN_TURBO - RST ToBIOS_18 ;[ ] 1/02/2024 режим спектрума работает с любыми каналами и основными разделами CALL SET_CURRENT_HDD + + ; LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 + ; LD C,BIOS.FN_TURBO + ; RST ToBIOS_18 ; ; - LD A,(LD_Pal_+2) + XOR A ; reg A' for GOTO_SPECTRUM + EX AF,AF' + ; + LD A,(PARAMS.LD_Pal+2) INC A - JR NZ,SetDefaultPalette + JR NZ,Skip_Load_Pallete ; LD HL,PlaceForPalette + 0 LD A,4 @@ -799,139 +777,199 @@ RESET_TO_ZX: DI LD HL,PlaceForPalette + 3072 LD A,7 CALL SET_PAL - JR SetDefaultPalette.skip -SetDefaultPalette: + ; + EX AF,AF' + OR %0000'0100 ; set custom palette +Skip_Load_Pallete: + EX AF,AF' + LD HL,(PARAMS.Int_sc+2) + ADD A,L + LD HL,(PARAMS.Int_or+2) + OR L + LD HL,(PARAMS.Lines312+2) + ADD A,L + EX AF,AF' + ; port all mode + LD A,(PARAMS.Int_or+2) + AND A + LD B,#FA ; original waits on + JR NZ,Set_Next_Par + LD B,#FE +Set_Next_Par: ; SYS_PORT/CNF_PORT XOR A - LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette - RST ToBIOS_18 -.skip: - LD A,(Int_or_+2) - AND A ; 3 - JR NZ,Original - LD A,(Int_sc_+2) ; 1/2 -Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion - RST ToBIOS_18 - - LD HL,#4000 ; clear ZX-Spectrum screen - LD DE,#4001 - LD BC,#1AFF - LD (HL),L - LDIR - - LD HL,#4104 ; Screen-1 - LD E,0 - LD BC,4*256+BIOS.LP_OPEN_S - RST ToBIOS_18 - - LD HL,#5104 ; Screen-2 - LD E,0 - LD BC,4*256+BIOS.LP_OPEN_S - RST ToBIOS_18 - + LD HL,(PARAMS.Turbo+2) + ADD A,L + LD HL,(PARAMS.Sprinter+2) + ADD A,L + LD HL,(PARAMS.P_7FFD+2) + ADD A,L + LD HL,(PARAMS.P_1FFD+2) + ADD A,L + LD HL,(PARAMS.Mem512+2) + ADD A,L + LD E,A + ; Start ROM + LD HL,(PARAMS.To_trd+2) + LD D,L + ; vROM & vRAM + LD HL,(ZX_vROM_BLK) + ; RESERVED XOR A - OUT (RGADR),A - OUT (RGMOD),A + ; + LD C,BIOS.GOTO_SPECTRUM + RST ToBIOS + ; +.di_halt: DI + HALT + JR .di_halt + + +; [ ] free zx pages! +; Вход: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128, +; 3 - EXPANSION. C закрытыми 128-ми портами: +; 4 - TR-DOS, 5 - BASIC 48 +; E: значение для SYS_PORT/CNF_PORT +; L: Block_ID.vROM +; H: Block_ID.vRAM +; B: Port All Mode +; A: RESERVED (TASK Number = 0) +;A'[1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX +; A'[2]: 0 - set default palette, 1 - don't change palette +; A'[7]: 0 - 320, 1 - 312 строк + + + + ; XOR A + ; LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette + ; RST ToBIOS_18 +;.skip: +; LD A,(PARAMS.Int_or+2) +; AND A ; 3 +; JR NZ,Original +; LD A,(PARAMS.Int_sc+2) ; 1/2 +; Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion +; RST ToBIOS_18 + + ; LD HL,#4000 ; clear ZX-Spectrum screen + ; LD DE,#4001 + ; LD BC,#1AFF + ; LD (HL),L + ; LDIR + + ; LD HL,#4104 ; Screen-1 + ; LD E,0 + ; LD BC,4*256+BIOS.LP_OPEN_S + ; RST ToBIOS_18 + + ; LD HL,#5104 ; Screen-2 + ; LD E,0 + ; LD BC,4*256+BIOS.LP_OPEN_S + ; RST ToBIOS_18 + + ; XOR A + ; OUT (RGADR),A + ; OUT (RGMOD),A ; Инициализация страниц ;!FIXIT через функцию биос попробовать - DI - LD A,5 ; [ ] free zx pages! - OUT (SLOT1),A - ; #1FFD - LD BC,#1FFD - XOR A - OUT (SLOT0),A ; [ ] free zx pages! - OUT (C),A - ; #7FFD - LD B,#7F - LD A,8 -LOOP_P1: DEC A - OUT (C),A - OUT (SLOT3),A - JR NZ,LOOP_P1 - ; #1FFD - LD B,#1F - LD A,#10 - OUT (C),A - ; #7FFD - LD B,#7F - LD A,8 -LOOP_P2: OUT (C),A - OUT (SLOT3),A - INC A - CP 16 - JR NZ,LOOP_P2 - ; - XOR A - OUT (C),A - ; #1FFD - LD B,#1F - OUT (C),A - ; - ; Все RAM, кроме BANK2 - в ней программа! - ; - LD HL,PROG_STARTS - LD DE,PROG_STARTS.Launch ;!HARDCODE - LD BC,0*256 + PROG_STARTS.Length - LDIR +; DI +; LD A,5 ; [ ] free zx pages! +; OUT (SLOT1),A +; ; #1FFD +; LD BC,#1FFD +; XOR A +; OUT (SLOT0),A ; [ ] free zx pages! +; OUT (C),A +; ; #7FFD +; LD B,#7F +; LD A,8 +; LOOP_P1: DEC A +; OUT (C),A +; OUT (SLOT3),A +; JR NZ,LOOP_P1 +; ; #1FFD +; LD B,#1F +; LD A,#10 +; OUT (C),A +; ; #7FFD +; LD B,#7F +; LD A,8 +; LOOP_P2: OUT (C),A +; OUT (SLOT3),A +; INC A +; CP 16 +; JR NZ,LOOP_P2 +; ; +; XOR A +; OUT (C),A +; ; #1FFD +; LD B,#1F +; OUT (C),A +; ; +; ; Все RAM, кроме BANK2 - в ней программа! +; ; +; LD HL,PROG_STARTS +; LD DE,PROG_STARTS.Launch ;!HARDCODE +; LD BC,0*256 + PROG_STARTS.Length +; LDIR - LD A,(Line312_+2) - OUT (Port_VSYNC),A +; LD A,(PARAMS.Lines312+2) +; OUT (Port_VSYNC),A - LD A,(P_7FFD_+2) ; - Pentagon off - LD BC,#7FFD - OUT (C),A +; LD A,(PARAMS.P_7FFD+2) ; - Pentagon off +; LD BC,#7FFD +; OUT (C),A - LD A,(Turbo__+2) ; 3 - turbo +; LD A,(PARAMS.Turbo+2) ; 3 - turbo - LD HL,(Sprint_+2) ; +04h - Sprinter-ZX - ADD A,L ; +0Ch - Scorpion/Pentagon +; LD HL,(PARAMS.Sprinter+2) ; +04h - Sprinter-ZX +; ADD A,L ; +0Ch - Scorpion/Pentagon - LD HL,(P_1FFD_+2) ; +40h - Scorpion port off - ADD A,L +; LD HL,(PARAMS.P_1FFD+2) ; +40h - Scorpion port off +; ADD A,L - LD HL,(Mem512_+2) ; +80h - Pentagon-512 on - ADD A,L +; LD HL,(PARAMS.Mem512+2) ; +80h - Pentagon-512 on +; ADD A,L - LD E,A - LD A,(To_trd_+2) - LD D,A +; LD E,A +; LD A,(PARAMS.To_trd+2) +; LD D,A - ;!TEST - IN A,(SLOT3) - LD C,A - LD A,SYS_PAGE - OUT (SLOT3),A +; ;!TEST +; IN A,(SLOT3) +; LD C,A +; LD A,SYS_PAGE +; OUT (SLOT3),A - LD A,E - LD (SYS_PAGE.CONFIG_DE),A - XOR A - LD (SYS_PAGE.CONFIG_DE+1),A +; LD A,E +; LD (SYS_PAGE.CONFIG_DE),A +; XOR A +; LD (SYS_PAGE.CONFIG_DE+1),A - LD A,C - OUT (SLOT3),A - ; - JP PROG_STARTS.Launch -; ; ; -PROG_STARTS: -.Launch: EQU #FF00 - DISP .Launch - LD A,2 ; [ ] free zx pages! - OUT (SLOT2),A - LD A,E - OUT (SYS_PORT.RAM),A - LD A,D - AND A - JP Z,0 - LD A,#10 - LD BC,#7FFD - OUT (C),A - LD HL,0 - PUSH HL - JP #3D29 ; RESET to TR-DOS - ENT - ; -.Length EQU $-PROG_STARTS - ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' +; LD A,C +; OUT (SLOT3),A +; ; +; JP PROG_STARTS.Launch +; ; ; ; +; PROG_STARTS: +; .Launch: EQU #FF00 +; DISP .Launch +; LD A,2 ; [ ] free zx pages! +; OUT (SLOT2),A +; LD A,E +; OUT (SYS_PORT.RAM),A +; LD A,D +; AND A +; JP Z,0 +; LD A,#10 +; LD BC,#7FFD +; OUT (C),A +; LD HL,0 +; PUSH HL +; JP #3D29 ; RESET to TR-DOS +; ENT +; ; +; .Length EQU $-PROG_STARTS +; ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -998,16 +1036,15 @@ PARSE_CMD_LINE: LD HL,(LINE_X) CALL MAKE_FULL_NAME LD A,SHARED_PAGE CALL READ_FILE_1 - JR C,.NO_FILE - ; -.exit: LD (LEN_CNF),DE ; CNF файл прочитан, DE - длина CNF - RET + JR NC,.exit ; .NO_FILE: CALL MAKE_FULL_NAME.def_cnf LD A,SHARED_PAGE CALL READ_FILE_1 JP C,ERROR_FILE - JR .exit + ; +.exit: LD (LEN_CNF),DE ; CNF файл прочитан, DE - длина CNF + RET ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -1085,15 +1122,17 @@ FIND_FILES: PUSH HL ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; READ_CNF_FILE: LD HL,#C000 - LD DE,A_LINES + LD DE,ADDRESS_LINES LD C,CFG_FILE_LINES + ; .LOOP_A: LD B,MAX_LINE_LENGTH ; длина строки EX DE,HL - LD (HL),E - INC HL - LD (HL),D - INC HL + LD (HL),E + INC HL + LD (HL),D + INC HL EX DE,HL + ; .LOOP_L: LD A,(HL) CP "\r" JR Z,.N_LINE @@ -1119,122 +1158,182 @@ READ_CNF_FILE: LD HL,#C000 ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -;!TODO если пропускаем загрузку ROM для 48, 128 или trdos, -; то вставлять в порт vROM номер из стандартного первого блока -;!TEST MACRO vROM_LOAD romLine;,pageNumber .romLine = (romLine-1)*2 - EX DE,HL - LD HL,(A_LINES+.romLine) - LD A,(HL) - CP ';' - EX DE,HL - - JR NZ,.go_load - - LD (HL),0 - EX DE,HL - LD A,(NO_ZX_FLAG) - OR A - JR Z,.skip_load - JP ERROR_ZX_FLAG -.go_load: - LD A,(HL) ;BUFFER_RAM_PAGES.ROM - PUSH HL - EX DE,HL - CALL READ_FILE_1 - POP DE - ; - LD A,SHARED_PAGE - OUT (SLOT3),A - JP C,ERROR_FILE -.skip_load: - INC DE - EX DE,HL - ENDM + LD DE,(ADDRESS_LINES+.romLine) + CALL vROM_LOAD_BIN + ENDM ; -; -SETUP_ZX: ;LOAD_ZXROMS: ;!FIXIT временная заплатка - CALL CHECK_ZX_FLAG +LOAD_vROM_BIN: CALL CHECK_ZX_FLAG + EXX + LD HL,BUFFER_vROM_PAGES + EXX + LD HL,BUFFER_RAM_PAGES + vROM_LOAD CFG_FILE_LINES.BASIC128 ;, #42 2-я строка - имя файла BASIC128 + vROM_LOAD CFG_FILE_LINES.BASIC_48 ;, #43 3-я строка - имя файла BASIC 48 + vROM_LOAD CFG_FILE_LINES.TRDOS ;, #44 4-я строка - имя файла TR-DOS + vROM_LOAD CFG_FILE_LINES.ZXEXP ;, #45 5-я строка - имя файла EXPANSION + vROM_LOAD CFG_FILE_LINES.ZXBIOS1 ;, #46 6-я строка - имя файла BIOS + vROM_LOAD CFG_FILE_LINES.ZXBIOS2 ;, #47 7-я строка - имя файла BIOS2 + vROM_LOAD CFG_FILE_LINES.BASIC128_2 ;, ??? 8-я строка - имя файла + vROM_LOAD CFG_FILE_LINES.BASIC_48_2 ;, ??? 9-я строка - имя файла + vROM_LOAD CFG_FILE_LINES.TRDOS_2 ;, ??? 10-я строка - имя файла + vROM_LOAD CFG_FILE_LINES.ZXEXP_2 ;, ??? 11-я строка - имя файла + RET ; - ;LD BC,BUFFER_RAM_PAGES.ROM - LD HL,BUFFER_RAM_PAGES.ROM - - vROM_LOAD BASIC128_LINE;, #42 2-я строка - имя файла BASIC128 - vROM_LOAD BASIC_48_LINE;, #43 3-я строка - имя файла BASIC 48 - vROM_LOAD TRDOS_LINE ;, #44 4-я строка - имя файла TR-DOS - vROM_LOAD EXP_LINE ;, #45 5-я строка - имя файла EXPANSION - vROM_LOAD BIOS_LINE ;, #46 6-я строка - имя файла BIOS - vROM_LOAD BIOS2_LINE ;, #47 7-я строка - имя файла BIOS2 - ;vROM_LOAD _LINE ;, #42 8-я строка - имя файла - ;vROM_LOAD _LINE ;, #42 9-я строка - имя файла - ;vROM_LOAD _LINE ;, #42 10-я строка - имя файла - ;vROM_LOAD _LINE ;, #42 11-я строка - имя файла - -LOADING_PALETTE:;!TEST palette load - EX DE,HL - LD HL,( A_LINES + ((PALETTE_LINE-1)*2) ) - LD A,(HL) - CP ';' - JR Z,.skip +vROM_LOAD_BIN: EX DE,HL + LD A,(HL) + CP ';' + EX DE,HL + JR Z,.skip_load + ; +.go_load: LD A,(HL) ;BUFFER_RAM_PAGES.ROM + EXX + LD (HL),A + INC HL + PUSH HL + EXX + PUSH HL + EX DE,HL + CALL READ_FILE_1 ; A - RAM page + POP HL + LD A,(HL) + INC HL + ; + EXX + POP HL + LD (HL),A + EXX + ; + LD A,SHARED_PAGE + OUT (SLOT3),A + JP C,ERROR_FILE + ; +.skip_load: EXX + INC HL + EXX + RET + ; +;!FIXIT временная заплатка +CHECK_ZX_FLAG: LD BC,SLOT3 + IN B,(C) + LD A,Spec_Page + OUT (C),A + LD HL,(Spec_Page.flag_Z) + LD DE,'Z'+'X'*256 + ; + XOR A + SBC HL,DE + OUT (C),B + RET Z + ; + INC A + LD (NO_ZX_FLAG),A + RET +NO_ZX_FLAG: DB 0 +; +; MACRO vROM_LOAD romLine;,pageNumber +; .romLine = (romLine-1)*2 +; EX DE,HL +; LD HL,(ADDRESS_LINES+.romLine) +; LD A,(HL) +; CP ';' +; EX DE,HL - LD DE,ONE_FILE - LD BC,FULL_FILE_NAME_LENGTH - LDIR - LD HL,ONE_FILE +; JR NZ,.go_load + +; LD (HL),0 +; EX DE,HL +; LD A,(NO_ZX_FLAG) +; OR A +; JR Z,.skip_load +; JP ERROR_ZX_FLAG +; .go_load: +; LD A,(HL) ;BUFFER_RAM_PAGES.ROM +; PUSH HL +; EX DE,HL +; CALL READ_FILE_1 +; POP DE +; ; +; LD A,SHARED_PAGE +; OUT (SLOT3),A +; JP C,ERROR_FILE +; .skip_load: +; INC DE +; EX DE,HL +; ENDM +; +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; - LD A,Dss.Open.R - LD C,Dss.Open - RST ToDSS - JP C,ERROR_FILE ; ошибка, если нет файла - LD (FILE_HANDLE),A - - LD HL,PlaceForPalette - LD DE,1024*4 ;!HARDCODE - LD C,Dss.Read - RST ToDSS - JP C,ERROR_FILE ; ошибка при чтении - ;!TEST протестить DSS на этом. Если файл 4096 и читать 4096, то в A будет #FF - ;OR A - ;JP NZ,ERROR_FILE - ; - LD A,(FILE_HANDLE) - LD C,Dss.Close - RST ToDSS +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +;!TEST palette load +LOADING_PALETTE: + ;EX DE,HL + LD HL,( ADDRESS_LINES + ((CFG_FILE_LINES.PALETTE-1)*2) ) + LD A,(HL) + CP ';' + JR Z,.skip + ; + LD DE,ONE_FILE + LD BC,FULL_FILE_NAME_LENGTH + LDIR + LD HL,ONE_FILE + ; + LD A,Dss.Open.R + LD C,Dss.Open + RST ToDSS + JP C,ERROR_FILE ; ошибка, если нет файла + LD (FILE_HANDLE),A + ; + LD HL,PlaceForPalette + LD DE,1024*4 ;!HARDCODE + LD C,Dss.Read + RST ToDSS + JP C,ERROR_FILE ; ошибка при чтении + ;!TEST протестить DSS на этом. Если файл 4096 и читать 4096, то в A будет #FF + ;OR A + ;JP NZ,ERROR_FILE + ; + LD A,(FILE_HANDLE) + LD C,Dss.Close + RST ToDSS .skip: ;!TODO печатать имя файла палитры, если он загружен - ; ; ; файлы считаны LD HL,MSG_NORMAL LD C,Dss.PChars RST ToDSS ; - LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 ) + LD HL,(ADDRESS_LINES + (CFG_FILE_LINES.NAME-1)*2) LD C,Dss.PChars RST ToDSS ; LD HL,CR_LINE LD C,Dss.PChars RST ToDSS - ;LD A,(SAVE_SLOT3) - ;OUT (SLOT3),A - ; + LD A,(SAVE_SLOT3) + OUT (SLOT3),A + RET +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; PARSE_PARAMETERS:; parameters parsing LD A,SHARED_PAGE OUT (SLOT3),A - LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; строка параметров + LD HL,(ADDRESS_LINES + (CFG_FILE_LINES.OPTIONS-1)*2 ) ; строка параметров .LOOP_1: LD A,(HL) CP '/' JR Z,.PARAM_TEST - CP 0 - JR Z,.PARAM_END - ;RET Z + OR A ; CP 0 + ;JR Z,INIT_vROM_PAGES + RET Z CP "\r" - JR Z,.PARAM_END - ;RET Z + ;JR Z,INIT_vROM_PAGES + RET Z CP "\n" - JR Z,.PARAM_END - ;RET Z + ;JR Z,INIT_vROM_PAGES + RET Z INC HL JR .LOOP_1 ; @@ -1280,105 +1379,167 @@ PARSE_PARAMETERS:; parameters parsing ; POP HL JR .LOOP_1 +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + +;----------------[Выделение/освобождение страниц спектрума]-------------; +;вход: рег B: +; FN 0x +; 0 - зарезервировано +; 1 - выделение памяти Pentagon 48k. 3 страницы +; 2 - выделение памяти Pentagon 128k. 2+6 страницы +; 3 - выделение памяти Pentagon 512k. 2+30 страницы +; 4 - выделение памяти Scorpion 256k. 2+6+8 страницы +; 5..15 - зарезервированы +; FN 1x +; 16 - получить рамблоки инициализированных vROM и VRAM +; 17..31 - зарезервированы +; FN 2x ;!TODO +; 32 - зарезервировано +; 33 - выделение памяти Spectrum 48k и инит 1-й страниц vROM +; 34 - выделение памяти Pentagon 128k и инит 3-х страниц vROM +; 35 - выделение памяти Pentagon 512k и инит 3-х страниц vROM +; 36 - выделение памяти Scorpion 256k и инит 3-х страниц vROM +; 33..63 - зарезервированы +; FN 4x +; 64 - освободить рамблоки vROM и vRAM +; 65..127 - зарезервированы +; FN 8x +; 128 - инициализировать свой набор страниц vROM +; +; рег HL: при рег B[7]=1 адрес страниц (11 шт): +; byte1 - RAM block ID, byte2..11 - страницы для vROM - ZXSlot: 1,2,3(=0),расширенная +; рег A: номер ZX TASK пока что всегда ноль!!! +;выход: CF = 0: HL - номера рамблоков для режимов 0..16. H=vRAM, L=vROM +; CF = 1: A - номер ошибки +; +;если стэк находится в третьем слоте, то вызов с выключенными прерываниями +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +GET_vRAM_PAGES: CALL .check_params + XOR A + LD C,BIOS.ZX_MEMORY_MANAGER + RST ToBIOS + RET C + LD (ZX_vRAM_BLK),A + RET + +.check_params: XOR A + LD HL,PARAMS.P_7FFD + 2 + LD DE,4 + LD B,3 +.loop: ADD A,(HL) + ADD HL,DE + DJNZ .loop ; - - - - MACRO vROM_set dcp_port - LD A,dcp_port - CALL SET_DCP_PORT - ENDM - -.PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM - vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 - vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 - vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS - vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION - vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 - vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 - ;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 - ;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 - ;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 - ;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 - - LD HL,(IMAGE_NAME) - LD A,H - OR L - JP Z,SKIP_IMAGE - - LD C,SLOT3 - IN B,(C) - PUSH BC - - CALL READ_IMAGE - POP BC - OUT (C),B - JP C,ERROR_FILE + LD B,high BIOS.ZX_MEMORY_MANAGER.GetMem.Pent512 + CP #80 + RET NC ; -SKIP_IMAGE: LD A,(No_run_+2) - AND A - RET NZ + LD B,high BIOS.ZX_MEMORY_MANAGER.GetMem.Pent48 + CP #70 + RET NC ; - LD HL,MSG_EXIT1 - LD BC,SLOT3 - IN B,(C) - LD A,Spec_Page - OUT (C),A - ; !FIXIT когда будет процедура в биосе переделать под неё - LD A,"Z" - LD (Spec_Page.flag_Z),A - LD A,"X" - LD (Spec_Page.flag_X),A + LD B,high BIOS.ZX_MEMORY_MANAGER.GetMem.Pent128 + CP #40 + RET NC ; - OUT (C),B - ; - SCF + LD B,high BIOS.ZX_MEMORY_MANAGER.GetMem.Scorp RET ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -SET_DCP_PORT: LD B,(HL) ; page + + +COUNT_vROM_PAGES: + LD BC,10*256 + 0 ;!HARDCODE всего страниц vROM 10, счётчик - 0 + LD HL,ADDRESS_LINES + CFG_FILE_LINES.BASIC128 - 1 + LD A,';' +.loop: INC HL + LD E,(HL) INC HL - INC B - DEC B - RET Z + LD D,(HL) ; - PUSH HL - CALL SET_ROM - POP HL + EX DE,HL + CP (HL) + EX DE,HL + JR Z,.next + INC C +.next: DJNZ .loop + LD A,C + LD (ZX_vROM_COUNT),A + SUB 1 ; если 0 - то не меняем набор RET ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -;!FIXIT временная заплатка -CHECK_ZX_FLAG: - LD BC,SLOT3 - IN B,(C) - LD A,Spec_Page - OUT (C),A - LD HL,(Spec_Page.flag_Z) - LD DE,'Z'+'X'*256 - AND A - SBC HL,DE - JR Z,.exit +; MACRO vROM_set dcp_port +; LD A,dcp_port +; CALL SET_DCP_PORT +; ENDM +; ; +; INIT_vROM_PAGES: +; LD HL,BUFFER_RAM_PAGES.ROM +; vROM_set ACEX.vROM.BASIC_128 +; vROM_set ACEX.vROM.BASIC_48 +; vROM_set ACEX.vROM.TR_DOS +; vROM_set ACEX.vROM.ZX_EXPANSION +; vROM_set ACEX.vROM.ZX_BIOS_1 +; vROM_set ACEX.vROM.ZX_BIOS_2 +; vROM_set ACEX.vROM.BASIC_128_2 +; vROM_set ACEX.vROM.BASIC_48_2 +; vROM_set ACEX.vROM.TR_DOS_2 +; vROM_set ACEX.vROM.ZX_EXPANSION_2 - ; LD A,(Spec_Page.flag_Z) - ; CP 'Z' - ; JR NZ,.no_zx - ; LD A,(Spec_Page.flag_X) - ; CP 'X' - ; JP Z,.exit - ; -.no_zx: LD A,1 - LD (NO_ZX_FLAG),A +; LD HL,(IMAGE_NAME) +; LD A,H +; OR L +; JP Z,.SKIP_IMAGE -.exit: OUT (C),B - RET -NO_ZX_FLAG DB 0 +; LD C,SLOT3 +; IN B,(C) +; PUSH BC + +; CALL READ_IMAGE +; POP BC +; OUT (C),B +; JP C,ERROR_FILE +; ; +; .SKIP_IMAGE: LD A,(PARAMS.No_run+2) +; AND A +; RET NZ +; ; +; LD HL,MSG_EXIT1 +; LD BC,SLOT3 +; IN B,(C) +; LD A,Spec_Page +; OUT (C),A +; ; !FIXIT когда будет процедура в биосе переделать под неё +; LD A,"Z" +; LD (Spec_Page.flag_Z),A +; LD A,"X" +; LD (Spec_Page.flag_X),A +; ; +; OUT (C),B +; ; +; SCF +; RET +; ; +; SET_DCP_PORT: LD B,(HL) ; page +; INC HL +; INC B +; DEC B +; RET Z +; ; +; PUSH HL +; CALL SET_ROM +; POP HL +; RET ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + + ; ;----------------------------------------------------------------------; INCLUDE 'For_4X.asm' @@ -1390,10 +1551,11 @@ NO_ZX_FLAG DB 0 ;----------------------------------------------------------------------; IF NEW_MEMORY_LOGIC BUFFER_RAM_PAGES: -.ROM: BLOCK 6 ; количество портов эмулятора ПЗУ -.RAM: BLOCK 16 ; 256 кб + BLOCK 10,#FF ; !HARDCODE количество портов эмулятора ПЗУ +.Size EQU $-BUFFER_RAM_PAGES +BUFFER_vROM_PAGES: + BLOCK 10,#FF ; !HARDCODE количество портов эмулятора ПЗУ .Size EQU $-BUFFER_RAM_PAGES -.end_marker: BYTE #FF ELSE BUFFER_RAM_PAGES: .ROM: DB #42, #43, #44, #45, #46, #47 @@ -1444,7 +1606,10 @@ MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF f PROGRES_IND: DB '░',0 ; 176 PROGRES_100: DB ' 100%',13,10,0 -;MEM_BLK: BYTE 0 +ZX_vROM_COUNT: BYTE 0 +ZX_vROM_BLK: BYTE 0 +ZX_vRAM_BLK: BYTE 0 +; LINE_X: WORD 0 X_FILE: WORD 0 CNF_NAME: WORD 0 @@ -1453,7 +1618,7 @@ IMAGE_NAME: WORD 0 IMAGE_HANDLER: BYTE 0 SAVE_SLOT3: BYTE 0 LEN_CNF: WORD 0 -A_LINES: BLOCK CFG_FILE_LINES*2,0 +ADDRESS_LINES: BLOCK CFG_FILE_LINES*2,0 ;********************************************* ;----------------------------------------------------------------------; ; @@ -1461,36 +1626,36 @@ A_LINES: BLOCK CFG_FILE_LINES*2,0 ; Если параметр задан, то выбирается значение Y PARAMS:; Y / N ; тут значения для ключей записываются как 16 бит значение, значит обратный порядок байтов -Turbo__: DW Turbo_, #0302 ; включить TURBO -Line312_ DW Lines312, #6141 ; включить 312 строк -Sprint_: DW Sprint, #040C ; включить Sprinter -P_7FFD_: DW P_7FFD, #0030 ; включить 7FFD -P_1FFD_: DW P_1FFD, #0040 ; включить 1FFD -Mem512_: DW Mem512, #8000 ; включить 512k -To_trd_: DW To_trd, #0100 ; вoйти в TR-DOS -Int_sc_: DW Int_sc, #0102 ; включить INT "по-скорпионовски" -No_run_: DW no_run, #00FF ; не запускать -Int_or_: DW Int_or, #0300 ; включить INT "Original" -Ret_zx_: DW Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ -Ret_fn_: DW Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ -LD_Pal_: DW LD_Pal, #FF00 -RMD_Keep_: DW RMD_Keep, #FF00 ; [x] 05/11/2023 очищать рамдиски при выходе +.Turbo: DW ._Turbo, #0302 ; включить TURBO +.Lines312 DW ._Lines312, #8000 ; включить 312 строк +.Sprinter: DW ._Sprinter, #040C ; включить Sprinter +.P_7FFD: DW ._P_7FFD, #0030 ; включить 7FFD ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +.P_1FFD: DW ._P_1FFD, #0040 ; включить 1FFD ░░не менять порядок, используется в GET_vRAM_PAGES░░ +.Mem512: DW ._Mem512, #8000 ; включить 512k ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +.To_trd: DW ._To_trd, #0200 ; вoйти в TR-DOS +.Int_sc: DW ._Int_sc, #0102 ; включить INT "по-скорпионовски" +.Int_or: DW ._Int_or, #0300 ; включить INT "Original" +.No_run: DW ._no_run, #00FF ; не запускать +.Ret_zx: DW ._Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ +.Ret_fn: DW ._Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ +.LD_Pal: DW ._LD_Pal, #FF00 +.RMD_Keep: DW ._RMD_Keep, #FF00 ; [x] 05/11/2023 очищать рамдиски при выходе DW 0,0 ; end marker - -Turbo_: DB "turbo", 255,0 -Lines312: DB "lines312", 255,0 -Sprint: DB "sprinter", 255,0 -P_7FFD: DB "7FFD", 255,0 -P_1FFD: DB "1FFD", 255,0 -Mem512: DB "mem512", 255,0 -Int_sc: DB "int-sc", 255,0 -To_trd: DB "to-trdos", 255,0 -no_run: DB "no-run", 255,0 -Int_or: DB "origin", 255,0 -Ret_zx: DB "ret-zx", 255,0 -Ret_fn: DB "ret-fn", 255,0 -LD_Pal: DB "load-pal", 255,0 -RMD_Keep: DB "RMD-Keep", 255,0 ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе +; +._Turbo: DB "turbo", 255,0 +._Lines312: DB "lines312", 255,0 +._Sprinter: DB "sprinter", 255,0 +._P_7FFD: DB "7FFD", 255,0 +._P_1FFD: DB "1FFD", 255,0 +._Mem512: DB "mem512", 255,0 +._Int_sc: DB "int-sc", 255,0 +._To_trd: DB "to-trdos", 255,0 +._no_run: DB "no-run", 255,0 +._Int_or: DB "origin", 255,0 +._Ret_zx: DB "ret-zx", 255,0 +._Ret_fn: DB "ret-fn", 255,0 +._LD_Pal: DB "load-pal", 255,0 +._RMD_Keep: DB "RMD-Keep", 255,0 ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе ;ZX_PROG_LEN EQU $-RELOAD_PROG From 9f78d202aef8ca550ef3b84d11c31f2441cba274 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 6 Oct 2024 02:09:30 +1000 Subject: [PATCH 33/43] 95% --- Shared_Includes | 2 +- spectrum.asm | 344 ++++++++++++++---------------------------------- 2 files changed, 102 insertions(+), 244 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 722db55..7e00c2a 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 722db55c24ee5172d610e832f3933c90914fcb8c +Subproject commit 7e00c2aa909241367878004ad104b56abb907f80 diff --git a/spectrum.asm b/spectrum.asm index b629407..9011a60 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -164,13 +164,14 @@ BEGIN: LD (LINE_X),IX CALL PARSE_PARAMETERS CALL COUNT_vROM_PAGES PUSH AF - ;!FIXIT проверить флаг ZX, если CF ; [ ] free zx pages ??ERROR_ZX_FLAG?? ; Очищаем память, если ROM_BIN > 0 - LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages + LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages.vROM CALL NC,ToBIOS ; Выделяем страницы под vRAM - CALL GET_vRAM_PAGES - ;JR C, ; no mem for vRAM ;!FIXIT ;[ ] free zx pages + LD A,(PARAMS.No_run + 2) + AND A + CALL NZ,GET_vRAM_PAGES + JR C,Error_NoMemForSPpages POP AF ; Выделяем страницы под vROM, если ROM_BIN > 0 JR C,.skip_vROM @@ -178,20 +179,23 @@ BEGIN: LD (LINE_X),IX LD B,A LD C,BIOS.GetMem RST ToBIOS - ;JR C, ; no mem for vROM ;!FIXIT ;[ ] free zx pages + JR C,Error_NoMemForSPpages LD (ZX_vROM_BLK),A ; Маппим страницы vROM, если ROM_BIN > 0 LD HL,BUFFER_RAM_PAGES LD C,BIOS.GetMemBlkPages RST ToBIOS CALL LOAD_vROM_BIN - -.skip_vROM: CALL LOADING_PALETTE - ;CALL INIT_vROM_PAGES +.skip_vROM: ; если norun, то дальше не надо + LD A,(PARAMS.No_run + 2) + AND A + LD HL,MSG_EXIT1 + JP Z,EXIT_ALL ; - ;JP NC,PREPARE_TO_ZXMODE + ; грузим палитру и образ диска, если надо + CALL LOAD_IMAGE_FILE + CALL LOADING_PALETTE JP PREPARE_TO_ZXMODE - ;JP EXIT_ALL ;███████████████████████████████████████████████████████████████████████; @@ -213,14 +217,16 @@ ERROR_FILE: LD HL,ERROR_FILE_MSG_X RST ToDSS ; LD HL,ERROR_FILE_MSG - JP EXIT_ALL + JR EXIT_ALL ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG - JP EXIT_ALL + JR EXIT_ALL END_CNF_ERROR: LD HL,ERROR_CNF EXIT_ALL: LD C,Dss.PChars RST ToDSS ; + LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages.vRAM + RST ToBIOS .loop: LD BC,Dss.Exit RST ToDSS JR .loop @@ -634,30 +640,30 @@ SAVETXT: LD (BACKTXT.VMODE),A .EXIT: ; ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD -; SETUP_RAM_DRIVES: -; LD BC,BIOS.SWAP_RAM_DRIVES.ZX -; RST ToBIOS -; ; запуск с файлом для рамдиска? -; LD A,(Load_IMAGE_File.MEM_BLK) -; OR A -; JR Z,.skip -; ; проверяем драйв перед переназначением -; XOR A -; LD C,BIOS.GET_RAMD_ST -; RST ToBIOS -; OR A -; JR Z,.set_block -; ; освободить рамдиск -; XOR A -; LD C,BIOS.FreeMemRMD -; RST ToBIOS -; ; set disk e: -; .set_block: LD A,(Load_IMAGE_File.MEM_BLK) -; LD B,A -; XOR A -; LD C,BIOS.BLK_TO_RAMD -; RST ToBIOS -; .skip: ; +SETUP_RAM_DRIVES: + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + ; запуск с файлом для рамдиска? + LD A,(Load_IMAGE_File.MEM_BLK) + OR A + JR Z,.skip + ; проверяем драйв перед переназначением + XOR A + LD C,BIOS.GET_RAMD_ST + RST ToBIOS + OR A + JR Z,.set_block + ; освободить рамдиск + XOR A + LD C,BIOS.FreeMemRMD + RST ToBIOS + ; set disk e: +.set_block: LD A,(Load_IMAGE_File.MEM_BLK) + LD B,A + XOR A + LD C,BIOS.BLK_TO_RAMD + RST ToBIOS +.skip: ; ; ; ;!FIXIT переделать на функцию биоса SET_RELOAD_PROG: @@ -722,38 +728,13 @@ RESET_TO_ZX: DI LD A,#FF LD (SYS_PAGE.CURRENT_DIR_DRIVE),A LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A - ;;;;;;;; - - ; LD A,CNF_PORT.CNF_3 - ; OUT (SYS_PORT.ROM),A ; System-page on & CNF = 3 - - ; XOR A - ; OUT (BorderColor),A ; border-0 - ; OUT (RGADR),A ; Screen-page = 0 - ; OUT (RGMOD),A ; Screen-mode-page = 0 - ; LD BC,#1FFD - ; OUT (C),A ; Scorpion-port = 0 - ; LD BC,#7FFD - ; OUT (C),A ; pentagon-port = 0 - -; LD A,(PARAMS.Int_or+2) -; AND A -; LD A,#FA ; original waits on -; JR NZ,.ORIG1 -; LD A,#FE -; .ORIG1: LD BC,Port_All_Mode -; OUT (C),A ; ACC-Off - + ;!TODO в BIOS? LD BC,CBL.SYS_PORT XOR A OUT (C),A ; CBL-off + ; ;[ ] 1/02/2024 режим спектрума работает с любыми каналами и основными разделами CALL SET_CURRENT_HDD - - ; LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720 - ; LD C,BIOS.FN_TURBO - ; RST ToBIOS_18 - ; ; XOR A ; reg A' for GOTO_SPECTRUM EX AF,AF' @@ -814,162 +795,14 @@ Set_Next_Par: ; SYS_PORT/CNF_PORT ; vROM & vRAM LD HL,(ZX_vROM_BLK) ; RESERVED - XOR A + EX AF,AF' ; LD C,BIOS.GOTO_SPECTRUM RST ToBIOS - ; + ;!FIXIT сделать обработчик .di_halt: DI HALT JR .di_halt - - -; [ ] free zx pages! -; Вход: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128, -; 3 - EXPANSION. C закрытыми 128-ми портами: -; 4 - TR-DOS, 5 - BASIC 48 -; E: значение для SYS_PORT/CNF_PORT -; L: Block_ID.vROM -; H: Block_ID.vRAM -; B: Port All Mode -; A: RESERVED (TASK Number = 0) -;A'[1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX -; A'[2]: 0 - set default palette, 1 - don't change palette -; A'[7]: 0 - 320, 1 - 312 строк - - - - ; XOR A - ; LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette - ; RST ToBIOS_18 -;.skip: -; LD A,(PARAMS.Int_or+2) -; AND A ; 3 -; JR NZ,Original -; LD A,(PARAMS.Int_sc+2) ; 1/2 -; Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion -; RST ToBIOS_18 - - ; LD HL,#4000 ; clear ZX-Spectrum screen - ; LD DE,#4001 - ; LD BC,#1AFF - ; LD (HL),L - ; LDIR - - ; LD HL,#4104 ; Screen-1 - ; LD E,0 - ; LD BC,4*256+BIOS.LP_OPEN_S - ; RST ToBIOS_18 - - ; LD HL,#5104 ; Screen-2 - ; LD E,0 - ; LD BC,4*256+BIOS.LP_OPEN_S - ; RST ToBIOS_18 - - ; XOR A - ; OUT (RGADR),A - ; OUT (RGMOD),A - ; Инициализация страниц - ;!FIXIT через функцию биос попробовать -; DI -; LD A,5 ; [ ] free zx pages! -; OUT (SLOT1),A -; ; #1FFD -; LD BC,#1FFD -; XOR A -; OUT (SLOT0),A ; [ ] free zx pages! -; OUT (C),A -; ; #7FFD -; LD B,#7F -; LD A,8 -; LOOP_P1: DEC A -; OUT (C),A -; OUT (SLOT3),A -; JR NZ,LOOP_P1 -; ; #1FFD -; LD B,#1F -; LD A,#10 -; OUT (C),A -; ; #7FFD -; LD B,#7F -; LD A,8 -; LOOP_P2: OUT (C),A -; OUT (SLOT3),A -; INC A -; CP 16 -; JR NZ,LOOP_P2 -; ; -; XOR A -; OUT (C),A -; ; #1FFD -; LD B,#1F -; OUT (C),A -; ; -; ; Все RAM, кроме BANK2 - в ней программа! -; ; -; LD HL,PROG_STARTS -; LD DE,PROG_STARTS.Launch ;!HARDCODE -; LD BC,0*256 + PROG_STARTS.Length -; LDIR - -; LD A,(PARAMS.Lines312+2) -; OUT (Port_VSYNC),A - -; LD A,(PARAMS.P_7FFD+2) ; - Pentagon off -; LD BC,#7FFD -; OUT (C),A - -; LD A,(PARAMS.Turbo+2) ; 3 - turbo - -; LD HL,(PARAMS.Sprinter+2) ; +04h - Sprinter-ZX -; ADD A,L ; +0Ch - Scorpion/Pentagon - -; LD HL,(PARAMS.P_1FFD+2) ; +40h - Scorpion port off -; ADD A,L - -; LD HL,(PARAMS.Mem512+2) ; +80h - Pentagon-512 on -; ADD A,L - -; LD E,A -; LD A,(PARAMS.To_trd+2) -; LD D,A - -; ;!TEST -; IN A,(SLOT3) -; LD C,A -; LD A,SYS_PAGE -; OUT (SLOT3),A - -; LD A,E -; LD (SYS_PAGE.CONFIG_DE),A -; XOR A -; LD (SYS_PAGE.CONFIG_DE+1),A - -; LD A,C -; OUT (SLOT3),A -; ; -; JP PROG_STARTS.Launch -; ; ; ; -; PROG_STARTS: -; .Launch: EQU #FF00 -; DISP .Launch -; LD A,2 ; [ ] free zx pages! -; OUT (SLOT2),A -; LD A,E -; OUT (SYS_PORT.RAM),A -; LD A,D -; AND A -; JP Z,0 -; LD A,#10 -; LD BC,#7FFD -; OUT (C),A -; LD HL,0 -; PUSH HL -; JP #3D29 ; RESET to TR-DOS -; ENT -; ; -; .Length EQU $-PROG_STARTS -; ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -1159,14 +992,13 @@ READ_CNF_FILE: LD HL,#C000 ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; MACRO vROM_LOAD romLine;,pageNumber -.romLine = (romLine-1)*2 - LD DE,(ADDRESS_LINES+.romLine) +.RomLine = (romLine-1)*2 + LD DE,(ADDRESS_LINES+.RomLine) CALL vROM_LOAD_BIN ENDM ; -LOAD_vROM_BIN: CALL CHECK_ZX_FLAG - EXX - LD HL,BUFFER_vROM_PAGES +LOAD_vROM_BIN: EXX + LD HL,BUFFER_vROM_PAGES.Pages EXX LD HL,BUFFER_RAM_PAGES vROM_LOAD CFG_FILE_LINES.BASIC128 ;, #42 2-я строка - имя файла BASIC128 @@ -1179,6 +1011,12 @@ LOAD_vROM_BIN: CALL CHECK_ZX_FLAG vROM_LOAD CFG_FILE_LINES.BASIC_48_2 ;, ??? 9-я строка - имя файла vROM_LOAD CFG_FILE_LINES.TRDOS_2 ;, ??? 10-я строка - имя файла vROM_LOAD CFG_FILE_LINES.ZXEXP_2 ;, ??? 11-я строка - имя файла + LD HL,BUFFER_vROM_PAGES + LD A,(ZX_vROM_BLK) + LD (HL),A + LD BC,BIOS.ZX_MEMORY_MANAGER.SetCustomVroms + RST ToBIOS + RET ; vROM_LOAD_BIN: EX DE,HL @@ -1190,19 +1028,19 @@ vROM_LOAD_BIN: EX DE,HL .go_load: LD A,(HL) ;BUFFER_RAM_PAGES.ROM EXX LD (HL),A - INC HL + ;INC HL PUSH HL EXX PUSH HL EX DE,HL CALL READ_FILE_1 ; A - RAM page POP HL - LD A,(HL) + ; LD A,(HL) INC HL ; EXX POP HL - LD (HL),A + ; LD (HL),A EXX ; LD A,SHARED_PAGE @@ -1214,23 +1052,9 @@ vROM_LOAD_BIN: EX DE,HL EXX RET ; -;!FIXIT временная заплатка -CHECK_ZX_FLAG: LD BC,SLOT3 - IN B,(C) - LD A,Spec_Page - OUT (C),A - LD HL,(Spec_Page.flag_Z) - LD DE,'Z'+'X'*256 - ; - XOR A - SBC HL,DE - OUT (C),B - RET Z - ; - INC A - LD (NO_ZX_FLAG),A - RET -NO_ZX_FLAG: DB 0 + + +;NO_ZX_FLAG: DB 0 ; ; MACRO vROM_LOAD romLine;,pageNumber ; .romLine = (romLine-1)*2 @@ -1266,6 +1090,26 @@ NO_ZX_FLAG: DB 0 ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +LOAD_IMAGE_FILE: + LD HL,(IMAGE_NAME) + LD A,H + OR L + RET Z + ; + LD C,SLOT3 + IN B,(C) + PUSH BC + ; + CALL READ_IMAGE + ; + POP BC + OUT (C),B + RET NC + JP ERROR_FILE +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ;!TEST palette load LOADING_PALETTE: @@ -1415,7 +1259,6 @@ PARSE_PARAMETERS:; parameters parsing ;если стэк находится в третьем слоте, то вызов с выключенными прерываниями ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; GET_vRAM_PAGES: CALL .check_params - XOR A LD C,BIOS.ZX_MEMORY_MANAGER RST ToBIOS RET C @@ -1468,7 +1311,21 @@ COUNT_vROM_PAGES: LD A,C LD (ZX_vROM_COUNT),A SUB 1 ; если 0 - то не меняем набор - RET + RET NC + ; CHECK_ZX_FLAG + LD BC,SLOT3 + IN B,(C) + LD A,Spec_Page + OUT (C),A + LD HL,(Spec_Page.flag_Z) + LD DE,'Z'+'X'*256 + ; + XOR A + SBC HL,DE + OUT (C),B + SCF ; ROM файлов 0, метка ZX есть + RET Z + JP ERROR_ZX_FLAG ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -1554,7 +1411,8 @@ BUFFER_RAM_PAGES: BLOCK 10,#FF ; !HARDCODE количество портов эмулятора ПЗУ .Size EQU $-BUFFER_RAM_PAGES BUFFER_vROM_PAGES: - BLOCK 10,#FF ; !HARDCODE количество портов эмулятора ПЗУ +.BlockID: BYTE 0 +.Pages: BLOCK 10,#FF ; !HARDCODE количество портов эмулятора ПЗУ .Size EQU $-BUFFER_RAM_PAGES ELSE BUFFER_RAM_PAGES: @@ -1586,8 +1444,8 @@ ERROR_FILE_MSG: DB 13,10, "Unable to work.",0 ;ERROR_FILE2_MSG: DB 13,10, "Работа невозможна.",0 ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0 ;ERROR_CNF2: DB 13,10, "Неожиданный конец CNF файла.",0 -NO_MEM_MSG: DB 13,10, "The spesial pages are already used." - DB 13,10, "Clear memory and restart spectrum.exe again.",0 +NO_MEM_MSG: DB 13,10, "Not enough free memory pages for ZX mode." + DB 13,10, "Clear the memory and restart spectrum.exe again.",0 ;NO_MEM_MSG2: DB 13,10, "Специальные страницы уже заняты." ; DB 13,10, "Очистите память и перезапустите spectrum.exe снова.",0 MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10 From 61f85bce5ecb0d52abc1cd2290757ffbbac2370e Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 6 Oct 2024 23:53:24 +1000 Subject: [PATCH 34/43] beta support "free zx pages" mode --- For_4x.asm | 4 +-- spectrum.asm | 90 ++++++++++++++++++++++------------------------------ 2 files changed, 40 insertions(+), 54 deletions(-) diff --git a/For_4x.asm b/For_4x.asm index 8c163d5..ee5af6e 100644 --- a/For_4x.asm +++ b/For_4x.asm @@ -71,9 +71,9 @@ SET_CURRENT_HDD: .NUMBER+1: LD A,#FF CP #FF LD C,BIOS.HDD_INIT - JP Z,ToBIOS_18 + JP Z,ToBIOS LD C,BIOS.HDD_PART ; IDE-1/IDE-2 - JP ToBIOS_18 + JP ToBIOS ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; diff --git a/spectrum.asm b/spectrum.asm index 9011a60..e87ee61 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -191,10 +191,10 @@ BEGIN: LD (LINE_X),IX AND A LD HL,MSG_EXIT1 JP Z,EXIT_ALL - ; ; грузим палитру и образ диска, если надо CALL LOAD_IMAGE_FILE CALL LOADING_PALETTE + CALL SHOW_MESSAGE_OK_CFG_NAME JP PREPARE_TO_ZXMODE ;███████████████████████████████████████████████████████████████████████; @@ -216,7 +216,15 @@ ERROR_FILE: LD HL,ERROR_FILE_MSG_X .prn_msg: LD C,Dss.PChars RST ToDSS ; - LD HL,ERROR_FILE_MSG + LD A,(vROM_LOAD_BIN.need_free) + OR A + JR Z,.skip_free + ; + LD A,(ZX_vROM_BLK) + LD C,BIOS.FreeMem + RST ToBIOS + ; +.skip_free: LD HL,ERROR_FILE_MSG JR EXIT_ALL ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG JR EXIT_ALL @@ -325,11 +333,11 @@ READ_IMAGE: LD DE,ONE_FILE INC HL LD (HL),0 ; устанавливаем и инитим винт - LD A,SYS_PORT.BIOS - OUT (SYS_PORT.ROM),A + ; LD A,SYS_PORT.BIOS + ; OUT (SYS_PORT.ROM),A CALL SET_CURRENT_HDD - LD A,SYS_PORT.BIOS - OUT (SYS_PORT.RAM),A + ; LD A,SYS_PORT.BIOS + ; OUT (SYS_PORT.RAM),A ; парсим для расчётов BPB CALL BPB_SetUp ; запоминаем сектор директории @@ -549,7 +557,7 @@ EXIT_TO_DSS: DI AND A JR NZ,.next ; очистка рамдисков - LD BC,SYS_PAGE.RAMD_KEYS.NUM*256 + BIOS.FreeMemRMD + LD BC,256*SYS_PAGE.RAMD_KEYS.NUM + BIOS.FreeMemRMD .loop: PUSH BC LD A,B DEC A @@ -741,7 +749,7 @@ RESET_TO_ZX: DI ; LD A,(PARAMS.LD_Pal+2) INC A - JR NZ,Skip_Load_Pallete + JR NZ,Skip_Load_Palette ; LD HL,PlaceForPalette + 0 LD A,4 @@ -759,9 +767,9 @@ RESET_TO_ZX: DI LD A,7 CALL SET_PAL ; + LD A,%0000'0100 ; set custom palette EX AF,AF' - OR %0000'0100 ; set custom palette -Skip_Load_Pallete: +Skip_Load_Palette: EX AF,AF' LD HL,(PARAMS.Int_sc+2) ADD A,L @@ -809,7 +817,7 @@ Set_Next_Par: ; SYS_PORT/CNF_PORT ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; SET_PAL: LD DE,0 LD BC,#FF*256 + BIOS.PIC_SET_PAL - JP ToBIOS_18 + JP ToBIOS ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -997,7 +1005,10 @@ READ_CNF_FILE: LD HL,#C000 CALL vROM_LOAD_BIN ENDM ; -LOAD_vROM_BIN: EXX +LOAD_vROM_BIN: LD A,#FF + LD (vROM_LOAD_BIN.need_free),A + ; + EXX LD HL,BUFFER_vROM_PAGES.Pages EXX LD HL,BUFFER_RAM_PAGES @@ -1016,7 +1027,9 @@ LOAD_vROM_BIN: EXX LD (HL),A LD BC,BIOS.ZX_MEMORY_MANAGER.SetCustomVroms RST ToBIOS - + ;!TODO check error + XOR A + LD (vROM_LOAD_BIN.need_free),A RET ; vROM_LOAD_BIN: EX DE,HL @@ -1052,41 +1065,7 @@ vROM_LOAD_BIN: EX DE,HL EXX RET ; - - -;NO_ZX_FLAG: DB 0 -; -; MACRO vROM_LOAD romLine;,pageNumber -; .romLine = (romLine-1)*2 -; EX DE,HL -; LD HL,(ADDRESS_LINES+.romLine) -; LD A,(HL) -; CP ';' -; EX DE,HL - -; JR NZ,.go_load - -; LD (HL),0 -; EX DE,HL -; LD A,(NO_ZX_FLAG) -; OR A -; JR Z,.skip_load -; JP ERROR_ZX_FLAG -; .go_load: -; LD A,(HL) ;BUFFER_RAM_PAGES.ROM -; PUSH HL -; EX DE,HL -; CALL READ_FILE_1 -; POP DE -; ; -; LD A,SHARED_PAGE -; OUT (SLOT3),A -; JP C,ERROR_FILE -; .skip_load: -; INC DE -; EX DE,HL -; ENDM -; +.need_free: DB 0 ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -1113,11 +1092,14 @@ LOAD_IMAGE_FILE: ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ;!TEST palette load LOADING_PALETTE: - ;EX DE,HL + LD A,(PARAMS.LD_Pal+2) + INC A + RET NZ + ; LD HL,( ADDRESS_LINES + ((CFG_FILE_LINES.PALETTE-1)*2) ) LD A,(HL) CP ';' - JR Z,.skip + RET Z ; LD DE,ONE_FILE LD BC,FULL_FILE_NAME_LENGTH @@ -1141,8 +1123,12 @@ LOADING_PALETTE: ; LD A,(FILE_HANDLE) LD C,Dss.Close - RST ToDSS -.skip: ;!TODO печатать имя файла палитры, если он загружен + JP ToDSS +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + +;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +SHOW_MESSAGE_OK_CFG_NAME: ; файлы считаны LD HL,MSG_NORMAL LD C,Dss.PChars From 44c9cac99384c10baf9a4f6d89f909a4786909e7 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 25 Oct 2024 00:46:14 +1000 Subject: [PATCH 35/43] ... --- Docs/FORMATS/{HOBETA.MSG => HOBETA.txt} | 0 Docs/FORMATS/{fdd.hdr => fdd.txt} | 0 Docs/FORMATS/{fdi.hdr => fdi.txt} | 0 Docs/FORMATS/info_guide/OLZH.$W! | 1 - .../info_guide/{alasmtxt.txt => alasmtxt} | 0 Docs/FORMATS/info_guide/grfview.txt | 106 ------------------ Docs/FORMATS/{scl.hdr => scl.txt} | 0 Docs/FORMATS/{scr.hdr => scr.txt} | 0 Docs/FORMATS/{sna => sna.txt} | 0 Docs/FORMATS/{tap.hdr => tap.txt} | 0 Docs/FORMATS/{trd.hdr => trd.txt} | 0 Docs/FORMATS/{z80.hdr => z80.txt} | 0 .../{zxword_driver => zxword_driver.txt} | 0 Docs/FORMATS/{zxzip.hdr => zxzip.txt} | 0 Docs/SPECTRUM.CFG | 11 -- 15 files changed, 118 deletions(-) rename Docs/FORMATS/{HOBETA.MSG => HOBETA.txt} (100%) rename Docs/FORMATS/{fdd.hdr => fdd.txt} (100%) rename Docs/FORMATS/{fdi.hdr => fdi.txt} (100%) delete mode 100644 Docs/FORMATS/info_guide/OLZH.$W! rename Docs/FORMATS/info_guide/{alasmtxt.txt => alasmtxt} (100%) delete mode 100644 Docs/FORMATS/info_guide/grfview.txt rename Docs/FORMATS/{scl.hdr => scl.txt} (100%) rename Docs/FORMATS/{scr.hdr => scr.txt} (100%) rename Docs/FORMATS/{sna => sna.txt} (100%) rename Docs/FORMATS/{tap.hdr => tap.txt} (100%) rename Docs/FORMATS/{trd.hdr => trd.txt} (100%) rename Docs/FORMATS/{z80.hdr => z80.txt} (100%) rename Docs/FORMATS/{zxword_driver => zxword_driver.txt} (100%) rename Docs/FORMATS/{zxzip.hdr => zxzip.txt} (100%) delete mode 100644 Docs/SPECTRUM.CFG diff --git a/Docs/FORMATS/HOBETA.MSG b/Docs/FORMATS/HOBETA.txt similarity index 100% rename from Docs/FORMATS/HOBETA.MSG rename to Docs/FORMATS/HOBETA.txt diff --git a/Docs/FORMATS/fdd.hdr b/Docs/FORMATS/fdd.txt similarity index 100% rename from Docs/FORMATS/fdd.hdr rename to Docs/FORMATS/fdd.txt diff --git a/Docs/FORMATS/fdi.hdr b/Docs/FORMATS/fdi.txt similarity index 100% rename from Docs/FORMATS/fdi.hdr rename to Docs/FORMATS/fdi.txt diff --git a/Docs/FORMATS/info_guide/OLZH.$W! b/Docs/FORMATS/info_guide/OLZH.$W! deleted file mode 100644 index 8944b18..0000000 --- a/Docs/FORMATS/info_guide/OLZH.$W! +++ /dev/null @@ -1 +0,0 @@ - Оптимальный LZH From : hrumer@gorny.ru  >>Игорь Павлов ведёт проект 7-zip, от него в конференции я >>узнал про алгоритм optimal lzh - когда выбирается >>действительно оптимальный способ подбора строк при уже >>существующем дереве кодов длин и расстояний. DB>ХАЧУэтот алгоритм. Держи! Этот алгоритм реально нужен каждому пакеру на спектруме. Я дол- жен был его реализовать для всех хрумов,хрустов и лазеркомпактов три-четыре года назад. Айяйяй в общем. Для "намертво" зашитых кодов, как это сделано в большинстве пакеров на спеке, этот алгоритм принесёт около, боюсь сказать,2-20%.На пакерах типа RIPдо примерно1-10%.Это навскидку. Конечно, памяти много надо на паковку, тормозить будет серьёзно, но есть различные варианты - на куски какой длины разбить файл и прочее.Да хоть на PC можно паковать. --------хрум-------- Игорь Павлов писал в RU.COMPRESS в 1999 году. Алгоритм оптимального Lempel-Ziv-Huffman кодирования ---------------------------------------------------- 1) Поиск совпадений в словарю осуществляется для каждого смещения. При поиске дополнительно собираем информацию об оптимальных (по расстоянию) совпадениях с длинами от2до длины максимального совпадения. Offsets[] = Get_Longest_And_Other_Good_Matches(); // Offsets.Size = length of longest match. // Offsets[i] = back offset in dictionary for match with len=i. BYTE Get_Current_Literal(); // returns current byte 2) Всегда можем посчитать, сколько предположительно бит займёт любой вариант (match/literal) на основе информации о предыдущих huffman блоках: int Get_Match_Huffman_Price(int Length, int Offset); // Length = length of match // Offset = offset of match; // Result = number of bits for coding this match; int Get_Literal_Huffman_Price(BYTE Literal); // Result = number of bits for coding this Literal; 3) Cтроим оптимальную последовательность кодов на много ходов вперёд. Есть большой массив a[]: a[i] = {  int Price;// Цена пути в битах,чтобы добраться до i-го байта.  struct  {  int Prev;// Позиция,откуда мы прыгаем в текущую(=i) позицию  // для Literal: Prev = i - 1  // для Match'а с длиной Length: Prev = i - Length  int Offset;// Смещ. в буфере(словаре)назад в случае Мatch'а  // для записи Мatch'а от Prev до i  } } a) Для всех элементов a[] устанавливаем Price = бесконечность. b) for(int i=0; i < Big_Value; i++) {  // Существуют некоторые условия досрочного вых. из этого цикла  // Получаем массив Offsets[2..Longest_match_length] смещений в  // буфере (словаре) назад, смотри 1).  Offsets[] = Get_Longest_And_Other_Good_Matches();  for(int Len = 1; Len < Offsets[].Length; Len++)  // Len=1 means Literal  {  // Определяем цену в битах рассматриваемого "прыжка" на Len  // символов вперёд  if (Len == 1) // it's a literal  aPrice = Get_Literal_Huffman_Price(Get_Current_Literal());  else  aPrice = Get_Match_Huffman_Price(Len, Offsets[Len]);  // и вычисляем цену нового кандидата в a[i + Len].  aNewPrice = a[i].Price + aPrice;  if (aNewPrice < a[i + Len].Price )  // Если выгодно старый путь (старая цена может быть даже  // равна бесконечности,т.е.вообще ещё нет пути) заменить  // новым, то меняем a[i + Len], чтобы он указывал на i  {  a[i + Len].Price = aNewPrice;  a[i + Len].Prev = i;  a[i + Len].Offset = Offsets[Len];  }  } } c) Двигаясь по a[] от конца, собираем "оптимальные" match/literal последовательности и кодируем их. End. --------хрум-------- >>В общем, мое отношение смотри выше, но вот есть же другая >>интересная вещь - просто поддержать распаковкуLZMAна >>спектруме. Правда, мне кажется, будет неудобно использовать >>распаковщикLZMAдля программ на спектруме. DB>Но можно применить для журналов или больших справочников. DB>Например,Open Lettersна одном диске ;) >>PS. Перечитал твоё письмо и понял, что исходники тебе >>прислали... DB>Там без поллитры не въедешь -1021файл,3.4мегабайта DB>исходников. Мусорка. Ну, поллитра не проблема :). Там и с поллитрой не въедешь. Ты не пробовал изучить просто декодер, тот, который в файле \SRC\7zip\Compress\LZMA_C\lzmadecode.c,там всего23кб :). \ No newline at end of file diff --git a/Docs/FORMATS/info_guide/alasmtxt.txt b/Docs/FORMATS/info_guide/alasmtxt similarity index 100% rename from Docs/FORMATS/info_guide/alasmtxt.txt rename to Docs/FORMATS/info_guide/alasmtxt diff --git a/Docs/FORMATS/info_guide/grfview.txt b/Docs/FORMATS/info_guide/grfview.txt deleted file mode 100644 index d20a43f..0000000 --- a/Docs/FORMATS/info_guide/grfview.txt +++ /dev/null @@ -1,106 +0,0 @@ - -╙ЄшышЄр GRFVIEW яЁхфэрчэрўхэр фы  яЁюёьюЄЁр ьюэюїЁюьэ√ї шыш -ЎтхЄэ√ї (ьєы№ЄшъюыюЁэ√ї) ърЁЄшэюъ т ЇюЁьрЄх CP/M-ЁхфръЄюЁр GRAF -т Ёхцшьх 640x200. ┬ ёрьющ ёЁхфх CP/M фрээ√х ърЁЄшэъш шьх■Є Ёрё- -°шЁхэшх BLK, юфэръю т OS TASiS юэю чрЁхчхЁтшЁютрэю чр фЁрщтхЁрьш -фшёъют√ї єёЄЁющёЄт ш, ўЄюс√ шчсхцрЄ№ яєЄрэшЎ√, чфхё№ шь с√ыю -яЁшётюхэю "ётюсюфэюх" Ёрё°шЁхэшх GRF - яЁюшчтюфэр  юЄ эрчтрэш  -ЁхфръЄюЁр. ╧ю¤Єюьє, яЁш яхЁхэюёх ърЁЄшэюъ шч CP/M т TASiS эх чр- -сєф№Єх ёьхэшЄ№ Ёрё°шЁхэшх! - -╬Єъєфр ьюцэю Ёрчфюс√Є№ GRF/BLK-Їрщы√? - -1) ═рЁшёютрЄ№ ёрьюёЄю Єхы№эю т уЁрЇшўхёъюь ЁхфръЄюЁх GRAF. - -2) ╤ъюэтхЁЄшЁютрЄ№ т CP/M шч шёїюфэ√ї ╠╬═╬╒╨╬╠═█╒(!) PCX-Їрщыют -яЁш яюью∙ш ёяхЎшры№эющ, яЁшырур■∙хщё  ъ ЁхфръЄюЁє єЄшышЄ√ -PCXBLK.COM. ╤рью-ёюсющ, Єръшь ёяюёюсюь ьюцэю яюыєўшЄ№ Єюы№ъю ью- -эюїЁюьэ√х ърЁЄшэъш. ═ю шї ьюцэю тЁєўэє■ ЁрёъЁрёшЄ№ тёх т Єюь цх -ЁхфръЄюЁх. - -3) ╤ъюэтхЁЄшЁютрЄ№ т RetroX (ЁхфръЄюЁ -> Import Picture -> Settings -> -ZX Clones Special -> TurboATM Multicolor Polychrome)... р яюёъюы№ъє ёюїЁрэ Є№ -юэ эх єьххЄ, Єю ёфхырЄ№ ёъЁшэ°юЄ, юсЁхчрЄ№ ърЁЄшэъє (°шЁшэр фюыцэр фхышЄ№ё  -эр 8, р т√ёюЄр эр 2), ёюїЁрэшЄ№ т ЇюЄю°юях т ЇюЁьрЄх bmp 8bpp (0-щ ЎтхЄ -цхырЄхы№эю яЁшэєфшЄхы№эю чрфрЄ№ ў╕Ёэ√ь), яюЄюь ёъюэтхЁЄшЁютрЄ№ єЄшышЄющ -RetroX to GRF. - - ╘╬╨╠└╥ BLK(GRF)-╘└╔╦└ - ===================== - - ╤ьх∙хэшх ╩юы-тю ╟эрўхэшх - ============ ======== ============ - #0000 #30(16x3) ╧рышЄЁр. ╧ЁхфёЄрты хЄ ёюсющ 16 ЄЁюхъ - чэрўхэшщ GRB-ЎтхЄют (шьхээю т Єръюь - яюЁ фъх), яЁхфёЄртыхээ√ї т тшфх ёшь- - тюыют ASCII: - - "0"(#30) - ЎтхЄ (G,R шыш B) т√ъы■ўхэ - "1"(#31) - ЎтхЄ эшчъющ шэЄхэёштэюёЄш - "2"(#32) - ЎтхЄ т Ёхцшьх BRIGHT 0 - "3"(#33) - ЎтхЄ т Ёхцшьх BRIGHT 1 - ╦■сюх фЁєуюх чэрўхэшх яЁшЁртэштрхЄё  - єЄшышЄющ GRFVIEW ъ "3". - - #0030(*) #03 ╠хЄър "GRF" - ючэрўрхЄ, ўЄю чр эхщ - ёыхфє■Є фтр чэрўр∙шї срщЄр - - #0033(*) #01 ╨хъюьхэфєхь√х рЄЁшсєЄ√ (INK & PAPER) - чрфэхую Їюэр, эр ъюЄюЁ√щ эрырурхЄё  - шчюсЁрцхэшх. └ъЄєры№эю фы  ърЁЄшэюъ, - яю ЁрчьхЁє ьхэ№°шї 640x200. - - #0034(*) #01 ╨хъюьхэфєхь√щ ЎтхЄ сюЁф■Ёр (#00-#0F) - ╠юцхЄ с√Є№ ръЄєры№эю яЁш шёяюы№чютр- - эшш эхёЄрэфрЁЄэющ ярышЄЁ√. - - #0035 #4B ═х шёяюы№чєхЄё . ╠юцхЄ с√Є№ чрсшЄю - ы■с√ь ьєёюЁюь. - - #0080(**) #01 X-ъююЁфшэрЄр (0-79) ыхтюую тхЁїэхую - єуыр т√тюфшьющ ърЁЄшэъш, шчьхЁ хьр  - т ёЄюысЎрї (1 ёЄыс= 8 яшъё= 1 срщЄ) - - #0081(**) #01 Y-ъююЁфшэрЄр (0-199) ыхтюую тхЁїэхую - єуыр т√тюфшьющ ърЁЄшэъш, шчьхЁ хьр  - т ёЄЁюўърї (1 ёЄЁ = 1 яшъёхы№) - - #0082 #01 WIDTH - °шЁшэр ърЁЄшэъш т ёЄюысЎрї - (юЄ 1 фю 80) - - #0083 #01 HIGH - т√ёюЄр ърЁЄшэъш т ёЄЁюўърї - (юЄ 1 фю 200) - - #0084 WIDTH*HIGH ╨рёЄЁ ьюэюїЁюьэюую шчюсЁрцхэш . - ╧ЁхфёЄрты хЄ ёюсющ яюёыхфютрЄхы№- - эюёЄ№ ёыхтр эряЁртю ёЄюысЎют юЄ - 1 фю x (x = WIDTH), ёюёЄю ∙шї шч - y срщЄют ърцф√щ (y = HIGH), ёўшЄр  - ётхЁїє тэшч. - -#84+WIDTH*HIGH #nnnn ╨рёЄЁ рЄЁшсєЄют. ╧юыэр  рэрыюуш  - ЁрёЄЁр ьюэюїЁюьэюую шчюсЁрцхэш  яю - ёЄЁєъЄєЁх, ё Єющ ыш°№ ЁрчэшЎхщ, ўЄю - юэ яЁшырурхЄё  т єяръютрээюь яю ьх- - Єюфє RLE тшфх. ╥ю хёЄ№, яЁхфёЄрты хЄ - шч ёхс  яюёыхфютрЄхы№эюёЄ№ фтєїсрщЄ- - э√ї ёыют, яхЁт√щ срщЄ т ърцфюь шч - ъюЄюЁ√ї ючэрўрхЄ ъюышўхёЄтю (1-255) - яюёыхфютрЄхы№эю шфє∙шї юфшэръют√ї - срщЄют рЄЁшсєЄют, р тЄюЁющ срщЄ - - ёюсёЄтхээю, ёрью чэрўхэшх рЄЁшсєЄр. - ----------------------------------- -╧Ёшьхўрэш : - -*) ═╬┬╬┬┬┼─┼═╚┼ ёяхЎшры№эю фы  єЄшышЄ√ GRFVIEW. ┬ юЁшушэрых - -эхшёяюы№чєхь√щ єўрёЄюъ. ╠юцхЄ с√Є№ чрсшЄ ы■с√ь ьєёюЁюь. - -**) ═хюс чрЄхы№э√х ярЁрьхЄЁ√ X ш Y ърЁЄшэъш, юёюсхээю фы  єЄшыш- -Є√ GRFVIEW, уфх шчюсЁрцхэшх ртЄюьрЄшўхёъш ЎхэЄЁшЁєхЄё , т ёююЄ- -тхЄёЄтшш ёю ётюшьш урсрЁшЄрьш. - -**************************************************************** -  2006, ЇхтЁры№. ╥шьюэшэ ╠ръёшь/NedoPC group -**************************************************************** -P.S. ╤ЄрЁЄют√щ рфЁхё COM-Їрщыр т TASiS - 24000DEC diff --git a/Docs/FORMATS/scl.hdr b/Docs/FORMATS/scl.txt similarity index 100% rename from Docs/FORMATS/scl.hdr rename to Docs/FORMATS/scl.txt diff --git a/Docs/FORMATS/scr.hdr b/Docs/FORMATS/scr.txt similarity index 100% rename from Docs/FORMATS/scr.hdr rename to Docs/FORMATS/scr.txt diff --git a/Docs/FORMATS/sna b/Docs/FORMATS/sna.txt similarity index 100% rename from Docs/FORMATS/sna rename to Docs/FORMATS/sna.txt diff --git a/Docs/FORMATS/tap.hdr b/Docs/FORMATS/tap.txt similarity index 100% rename from Docs/FORMATS/tap.hdr rename to Docs/FORMATS/tap.txt diff --git a/Docs/FORMATS/trd.hdr b/Docs/FORMATS/trd.txt similarity index 100% rename from Docs/FORMATS/trd.hdr rename to Docs/FORMATS/trd.txt diff --git a/Docs/FORMATS/z80.hdr b/Docs/FORMATS/z80.txt similarity index 100% rename from Docs/FORMATS/z80.hdr rename to Docs/FORMATS/z80.txt diff --git a/Docs/FORMATS/zxword_driver b/Docs/FORMATS/zxword_driver.txt similarity index 100% rename from Docs/FORMATS/zxword_driver rename to Docs/FORMATS/zxword_driver.txt diff --git a/Docs/FORMATS/zxzip.hdr b/Docs/FORMATS/zxzip.txt similarity index 100% rename from Docs/FORMATS/zxzip.hdr rename to Docs/FORMATS/zxzip.txt diff --git a/Docs/SPECTRUM.CFG b/Docs/SPECTRUM.CFG deleted file mode 100644 index ec2e18f..0000000 --- a/Docs/SPECTRUM.CFG +++ /dev/null @@ -1,11 +0,0 @@ -Sprinter ZX -c:\zx\roms\SP_128.BIN -c:\zx\roms\SP__48.BIN -c:\zx\roms\SP_TRD.BIN -c:\zx\roms\SP_EXP.BIN -c:\zx\roms\SP_EXP.BIN -c:\zx\roms\SP_EXP2.BIN -/turbo /7FFD /ret-fn -; - - From b337da2fbf23280c739daa9ccbf60b86a0f3b2e3 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 25 Oct 2024 00:46:21 +1000 Subject: [PATCH 36/43] ... --- _.gitignore | 9 +++++++++ Docs/changes.txt => changes.txt | 0 2 files changed, 9 insertions(+) create mode 100644 _.gitignore rename Docs/changes.txt => changes.txt (100%) diff --git a/_.gitignore b/_.gitignore new file mode 100644 index 0000000..cde89ea --- /dev/null +++ b/_.gitignore @@ -0,0 +1,9 @@ +/.DS_Store +/.tmp +/.vscode +/Build +/Debug +/Icon +/SP_Core.code-workspace +/RUN +/Docs diff --git a/Docs/changes.txt b/changes.txt similarity index 100% rename from Docs/changes.txt rename to changes.txt From 526fffd3455f62e24010bf7cd9dd861fdbb67229 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 25 Oct 2024 01:23:01 +1000 Subject: [PATCH 37/43] ACEX.Config_PG.Sp2000_SoftRestartSet --- Shared_Includes | 2 +- spectrum.asm | 35 +++++++++++++++++++---------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 7e00c2a..be501b0 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 7e00c2aa909241367878004ad104b56abb907f80 +Subproject commit be501b0cc276065a9981e471dd26f9b069af7604 diff --git a/spectrum.asm b/spectrum.asm index e87ee61..face4c4 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -543,9 +543,9 @@ EXIT_TO_DSS: DI CALL FIRST_PREPARE JP Z,RESET_TO_ZX.cont -.cont: LD A,(#FFF0) ;!HARDCODE - OUT (SLOT0),A - LD A,(#FFF3) ;!HARDCODE +.cont: ;LD A,(Spec_Page.page_0) + ;OUT (SLOT0),A + LD A,(Spec_Page.page_3) OUT (SLOT3),A XOR A @@ -675,9 +675,9 @@ SETUP_RAM_DRIVES: ; ; ;!FIXIT переделать на функцию биоса SET_RELOAD_PROG: - DI - LD A,Spec_Page - OUT (SLOT3),A + ; DI + ; LD A,Spec_Page + ; OUT (SLOT3),A ; LD A,"Z" ; LD (#FFFE),A @@ -687,18 +687,21 @@ SET_RELOAD_PROG: LD A,(PARAMS.Ret_fn+2) AND A LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx - JR Z,NO_RET_FN + JR Z,.NO_RET_FN LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn ; -NO_RET_FN: LD (#FFF4),DE ; адрес программы возврата - IN A,(SLOT0) - LD (#FFF0),A ; DOS-PAGE - IN A,(SLOT1) - LD (#FFF1),A - IN A,(SLOT2) ; сохранить страницу - LD (#FFF2),A ; программы для возврата - LD A,(SAVE_SLOT3) - LD (#FFF3),A +.NO_RET_FN: ;LD (#FFF4),DE ; адрес программы возврата + ;IN A,(SLOT0) + ;LD (#FFF0),A ; DOS-PAGE + ;IN A,(SLOT1) + ;LD (#FFF1),A + ;IN A,(SLOT2) ; сохранить страницу + ;LD (#FFF2),A ; программы для возврата + ;LD A,(SAVE_SLOT3) + ;LD (#FFF3),A + LD A,ACEX.Config_PG.Sp2000_SoftRestartSet + LD BC,BIOS.RST_CONF.CUSTOM + RST ToBIOS ;░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░; RESET_TO_ZX: DI LD SP,stack_point ; #BFF0 From bd8b527a329e4565672c08aeed896c19d66039b1 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:31:27 +1000 Subject: [PATCH 38/43] ... --- spectrum.asm | 46 +++++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/spectrum.asm b/spectrum.asm index face4c4..baa14d7 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -684,11 +684,11 @@ SET_RELOAD_PROG: ; LD A,"X" ; LD (#FFFF),A - LD A,(PARAMS.Ret_fn+2) - AND A - LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx - JR Z,.NO_RET_FN - LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn + ; LD A,(PARAMS.Ret_fn+2) + ; AND A + ; LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx + ; JR Z,.NO_RET_FN + ; LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn ; .NO_RET_FN: ;LD (#FFF4),DE ; адрес программы возврата ;IN A,(SLOT0) @@ -699,9 +699,14 @@ SET_RELOAD_PROG: ;LD (#FFF2),A ; программы для возврата ;LD A,(SAVE_SLOT3) ;LD (#FFF3),A - LD A,ACEX.Config_PG.Sp2000_SoftRestartSet - LD BC,BIOS.RST_CONF.CUSTOM - RST ToBIOS + ; LD B,A + ; LD A,(PARAMS.Ret_zx+2) + ; XOR B + ; JR Z,RESET_TO_ZX + ; ; + ; LD A,ACEX.Config_PG.Sp2000_SoftRestartSet + ; LD BC,BIOS.RST_CONF.CUSTOM + ; RST ToBIOS ;░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░; RESET_TO_ZX: DI LD SP,stack_point ; #BFF0 @@ -720,13 +725,28 @@ RESET_TO_ZX: DI ; LD BC,BIOS.SWAP_RAM_DRIVES.ZX ; RST ToBIOS ; - LD A,(PARAMS.Ret_zx+2) - LD B,A + ; LD A,(PARAMS.Ret_zx+2) + ; LD B,A + ; LD A,(PARAMS.Ret_fn+2) + ; XOR B + ; LD B,A + ; LD A,ACEX.RET_PORT + ; CALL SET_ROM ; включить возврат + LD A,(PARAMS.Ret_fn+2) + AND A + LD DE,RESET_TO_ZX ; адрес программы перезапуска для ret-zx + JR Z,.NO_RET_FN + LD DE,EXIT_TO_DSS ; адрес программы перезапуска для ret-fn +.NO_RET_FN: LD B,A + LD A,(PARAMS.Ret_zx+2) XOR B - LD B,A - LD A,ACEX.RET_PORT - CALL SET_ROM ; включить возврат + JR Z,.NO_RST_HDL + ; + LD A,ACEX.Config_PG.Sp2000_SoftRestartSet + LD BC,BIOS.RST_CONF.CUSTOM + RST ToBIOS +.NO_RST_HDL: ; [ ] LD A,SYS_PAGE From 4dca7f0b6064b615428b5c21790bd5e64ecfe137 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Wed, 30 Oct 2024 00:55:31 +1000 Subject: [PATCH 39/43] DSS version check --- Shared_Includes | 2 +- macroses/accelerator | 71 ++++++++++++++++++++++++++++++++++++++++++ macroses/macros | 73 ++++++++++++++++++++++++++++++++++++++++++++ spectrum.asm | 52 +++++++++++++++++++++++-------- version.inc | 5 +++ 5 files changed, 190 insertions(+), 13 deletions(-) create mode 100644 macroses/accelerator create mode 100644 macroses/macros diff --git a/Shared_Includes b/Shared_Includes index be501b0..710aa4b 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit be501b0cc276065a9981e471dd26f9b069af7604 +Subproject commit 710aa4b5dd4b651bcb01ef5e86150b99dfe739ee diff --git a/macroses/accelerator b/macroses/accelerator new file mode 100644 index 0000000..f8171a6 --- /dev/null +++ b/macroses/accelerator @@ -0,0 +1,71 @@ +; Макросы акселератора для красоты)) + +;--------[выключить акселератор]-------- + MACRO ACC_Off + ld b,b + ENDM +;--------------------------------------- + +;---------[режим приема байта]---------- + MACRO ACC_SetBlockSize + ld d,d +; включает акселератор в режим приема +; байта размера блока далее следует +; команда типа LD A,dat, где dat и будет +; новым размером блока. Если размер +; блока был установлен ранее, его можно +; не устанавливать. + ENDM +;--------------------------------------- + +;-------[заполнение одним байтом]------- + MACRO ACC_FillOneByte + ld c,c +; Операция Fill. Последующая команда +; типа LD (HL),A приведет к заполнению +; указанного ранее количества байт +; значением A + ENDM +;--------------------------------------- + +;----[заполнение вертикальных линий]---- +;Операция Fill для графического экрана. + MACRO ACC_FillScreenOneByte + ld e,e +; Последующая команда типа LD (HL),A +; приведет к заполнению значением A +; вертикальных линий экрана указанным +; ранее количеством байт + ENDM +;--------------------------------------- + +;----------[копирование блока]---------- + MACRO ACC_CopyBlock + ld l,l +; Последующая команда типа LD A,(HL) +; приведет к заполнению ОЗУ акселератора +; данными из адреса (HL), а команда типа +; LD (DE),A приведет к перезаписи данных +; из ОЗУ акселератора в основное или +; видео-ОЗУ. + ENDM +;--------------------------------------- + +;---[копирование графического блока]---- + MACRO ACC_CopyScreenBlock + ld a,a +; копирование блока для граф. экрана. +; Последующая команда типа LD A,(HL) +; приведет к заполнению ОЗУ акселератора +; данными из адреса (HL), а команда типа +; LD (DE),A приведет к перезаписи данных +; из ОЗУ акселератора в видео-ОЗУ +; вертикальными линиями. + ENDM +;--------------------------------------- + +;--------------[Reserved]--------------- + MACRO ACC_Reserved + LD H,H + ENDM +;--------------------------------------- \ No newline at end of file diff --git a/macroses/macros b/macroses/macros new file mode 100644 index 0000000..b8fc631 --- /dev/null +++ b/macroses/macros @@ -0,0 +1,73 @@ +; + MACRO FRAM_ON + IN A,(FastRAM_ON) + IF Emulator + PUSH BC + PUSH AF + LD BC,#1FFD + XOR A + OUT (C),A + OUT (FastRam_BANK0),A + POP AF + POP BC + ENDIF + ENDM + + MACRO FRAM_OFF + IN A,(FastRAM_OFF) + IF Emulator + PUSH BC + PUSH AF + LD BC,#1FFD + LD A,1 + OUT (C),A + XOR A + OUT (FastRam_BANK0),A + POP AF + POP BC + ENDIF + ENDM +; +; + MACRO PrintProc + + MODULE PrintF +;--------------------------------------- +printstr: +; в рег. HL адрес на печатаемый буфер + LD C,Dss.PChars + jp ToDSS +;--------------------------------------- + +;--------------------------------------- +; в рег. A число печатаемое как hex +printhex: + LD D,A + RRCA + RRCA + RRCA + RRCA + AND #0F + ADD A,#30 + CP #3A + JR C,.PRNH1 + ADD A,7 +.PRNH1: + CALL .PRINT_CHAR + LD A,D + AND #0F + ADD A,#30 + CP #3A + JP C,.PRINT_CHAR + ADD A,7 + JP .PRINT_CHAR +; в регистре A символ для печати +.PRINT_CHAR: + LD BC,#0182 + JP ToBIOS +;--------------------------------------- + ENDMODULE + + ENDM +; +; \ No newline at end of file diff --git a/spectrum.asm b/spectrum.asm index baa14d7..bdd5b3c 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -138,7 +138,19 @@ BEGIN: LD (LINE_X),IX LD HL,START_MSG LD C,Dss.PChars RST ToDSS - + ; + ; + LD C,Dss.Version + RST ToDSS + SCF + LD HL,256*DSS_MIN_VERS.vers + DSS_MIN_VERS.modf + SBC HL,DE + JP NC,ERROR_OLD_DSS + LD HL,DSS_MIN_VERS.build + SBC HL,BC + JR NC,ERROR_OLD_DSS + ; + ; IN A,(SLOT3) LD (SAVE_SLOT3),A ; @@ -203,17 +215,21 @@ BEGIN: LD (LINE_X),IX ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; Error_NoMemForSPpages: LD HL,NO_MEM_MSG + LD B,DSS_Error.sys.NOT_ENOUGH_MEMORY JR ERROR_FILE.prn_msg + ; ; ERROR_FILE: LD HL,ERROR_FILE_MSG_X LD C,Dss.PChars RST ToDSS ; - LD A,(FILE_HANDLE) - LD C,Dss.Close - RST ToDSS + ; LD A,(FILE_HANDLE) + ; LD C,Dss.Close + ; RST ToDSS ; LD HL,ONE_FILE -.prn_msg: LD C,Dss.PChars + LD B,DSS_Error.sys.FILE_NOT_FOUND +.prn_msg: PUSH BC + LD C,Dss.PChars RST ToDSS ; LD A,(vROM_LOAD_BIN.need_free) @@ -225,20 +241,31 @@ ERROR_FILE: LD HL,ERROR_FILE_MSG_X RST ToBIOS ; .skip_free: LD HL,ERROR_FILE_MSG - JR EXIT_ALL + POP BC + JR EXIT_NOW + ; ; ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG - JR EXIT_ALL -END_CNF_ERROR: - LD HL,ERROR_CNF -EXIT_ALL: LD C,Dss.PChars + JR EXIT_NOW + ; ; +ERROR_OLD_DSS: LD HL,MSG_OLD_DSS + JR EXIT_NOW + ; ; +EXIT_ALL: LD B,DSS_Error.sys.NO_ERROR + JR EXIT_NOW + ; ; +END_CNF_ERROR: LD HL,ERROR_CNF + LD B,DSS_Error.sys.UNKNOWN_FORMAT +EXIT_NOW: PUSH BC + LD C,Dss.PChars RST ToDSS ; LD BC,BIOS.ZX_MEMORY_MANAGER.FreeZXvPages.vRAM RST ToBIOS -.loop: LD BC,Dss.Exit + POP BC +.loop: LD C,Dss.Exit RST ToDSS JR .loop - ; + ; ; ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -1470,6 +1497,7 @@ MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 ;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 +MSG_OLD_DSS: DB 13,10, 'To run this version of SPECTRUM launcher you need DSS v1.70.998 or higher.',13,10,0 PROGRES_IND: DB '░',0 ; 176 PROGRES_100: DB ' 100%',13,10,0 diff --git a/version.inc b/version.inc index 4ab0611..1fa0715 100644 --- a/version.inc +++ b/version.inc @@ -5,4 +5,9 @@ ENDLUA DEFINE SP_VERSION "2.03 beta build" +; +DSS_MIN_VERS: +.vers EQU 1 +.modf EQU 70 +.build EQU 998 ; \ No newline at end of file From fee592184a3f12c27126a848a37bad64dcb2d837 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 28 Feb 2025 02:29:54 +1000 Subject: [PATCH 40/43] update shared_includes --- _.gitignore => .gitignore | 10 +++++----- Shared_Includes | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) rename _.gitignore => .gitignore (58%) diff --git a/_.gitignore b/.gitignore similarity index 58% rename from _.gitignore rename to .gitignore index cde89ea..3fe740d 100644 --- a/_.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ /.DS_Store /.tmp /.vscode -/Build -/Debug -/Icon +/Build/ +/Debug/ +/Icon/ /SP_Core.code-workspace -/RUN -/Docs +/RUN/ +/Docs/ diff --git a/Shared_Includes b/Shared_Includes index 710aa4b..2b1e30c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 710aa4b5dd4b651bcb01ef5e86150b99dfe739ee +Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a From 36074ddfc12ab8e617d6c0d1a7195cd569bf7777 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 25 Apr 2025 02:22:18 +1000 Subject: [PATCH 41/43] fix dss version check --- Shared_Includes | 2 +- spectrum.asm | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 2b1e30c..e0dd54c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a +Subproject commit e0dd54cb5615a23ea55bd217578aab57481fcf77 diff --git a/spectrum.asm b/spectrum.asm index bdd5b3c..ad566a4 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -145,13 +145,14 @@ BEGIN: LD (LINE_X),IX SCF LD HL,256*DSS_MIN_VERS.vers + DSS_MIN_VERS.modf SBC HL,DE - JP NC,ERROR_OLD_DSS - LD HL,DSS_MIN_VERS.build + JR C,.goodVers + LD HL,DSS_MIN_VERS.build - 1 SBC HL,BC JR NC,ERROR_OLD_DSS ; ; - IN A,(SLOT3) + +.goodVers: IN A,(SLOT3) LD (SAVE_SLOT3),A ; ; From de06a51d057e8a82ad0213285aac69ca36f8d0fa Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Tue, 29 Apr 2025 03:41:02 +1000 Subject: [PATCH 42/43] =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BE=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- For_4x.asm | 4 ++-- Shared_Includes | 2 +- spectrum.asm | 49 +++++++++++++++++++++++++++++++++++-------------- version.inc | 5 +++-- 4 files changed, 41 insertions(+), 19 deletions(-) diff --git a/For_4x.asm b/For_4x.asm index ee5af6e..f9c8c48 100644 --- a/For_4x.asm +++ b/For_4x.asm @@ -185,10 +185,10 @@ BPB_SetUp: LD A,SYS_PAGE DEC D JR NZ,.NEXT_ADD3 - LD (SYS_PAGE.CLASTER_LEN),HL + LD (SYS_PAGE.CLUSTER_LEN),HL LD B,E LD C,A - LD (SYS_PAGE.CLASTER_LEN2),BC + LD (SYS_PAGE.CLUSTER_LEN2),BC ; ; DE=0 EX DE,HL ;LD HL,0 diff --git a/Shared_Includes b/Shared_Includes index e0dd54c..68e156a 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit e0dd54cb5615a23ea55bd217578aab57481fcf77 +Subproject commit 68e156a69e848e7b01656cdf67122022999d75ee diff --git a/spectrum.asm b/spectrum.asm index ad566a4..939da65 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -77,6 +77,16 @@ ;*************************************** ; + DEFINE EXEinfoMACRO + MACRO _mEXEinfo + BLOCK 10,' ' ; Выравнивание для красивого отображения в HEX + BYTE 'Spectrum launcher' + BYTE ' by Ivan Mak and ' + BYTE ' Anatoliy ' + BYTE ' Belyanskiy, ' + BYTE ' Sprinter Team ' + ENDM + ; ; Standart EQU section ;*************************************** @@ -175,6 +185,7 @@ BEGIN: LD (LINE_X),IX CALL READ_CNF_FILE ; SetUp ZX CALL PARSE_PARAMETERS + CALL SHOW_MESSAGE_ZXMODE CALL COUNT_vROM_PAGES PUSH AF ; Очищаем память, если ROM_BIN > 0 @@ -296,7 +307,7 @@ READ_IMAGE: LD DE,ONE_FILE LD BC,Dss.EX_Path.GET_ALL RST ToDSS JR C,.no_change_Disk - AND 8 + AND 8 ;!HARDCODE В строке указано имя диска JR Z,.currentDisk ; LD C,Dss.CurDisk @@ -1179,19 +1190,31 @@ LOADING_PALETTE: ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; -SHOW_MESSAGE_OK_CFG_NAME: - ; файлы считаны - LD HL,MSG_NORMAL +SHOW_MESSAGE_ZXMODE: + LD HL,MSG_MODE LD C,Dss.PChars RST ToDSS ; LD HL,(ADDRESS_LINES + (CFG_FILE_LINES.NAME-1)*2) LD C,Dss.PChars RST ToDSS - ; LD HL,CR_LINE LD C,Dss.PChars + RST ToDSS + RET +SHOW_MESSAGE_OK_CFG_NAME: + ; файлы считаны + LD HL,MSG_NORMAL + LD C,Dss.PChars RST ToDSS + ; + ; LD HL,(ADDRESS_LINES + (CFG_FILE_LINES.NAME-1)*2) + ; LD C,Dss.PChars + ; RST ToDSS + ; ; + ; LD HL,CR_LINE + ; LD C,Dss.PChars + ; RST ToDSS LD A,(SAVE_SLOT3) OUT (SLOT3),A RET @@ -1470,11 +1493,9 @@ LEN_LINE_ZX EQU $-LINE_ZX MSG_EXIT1: DB 13,10, "EXIT without run",13,10,0 ;MSG_EXIT2: DB 13,10, "Выход без запуска" CR_LINE: DB 13,10,0 -START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'.' - DB 13,10, '(c) Sprinter Team.' - DB 13,10, 'Written by Ivan Mak.' - DB 13,10, 'Modified by Anatoliy Belyanskiy.' - DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 +START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'. (c) Sprinter Team.' + DB 13,10,BUILD_DATE,' - ',__TIME__ + DB 13,10, 'Keys: ',0 ERROR_FILE_MSG_X: DB 13,10, "Error in file: ",0 ;ERROR_FILE2_MSG_X: DB 13,10, "Ошибка в файле: ",0 ERROR_FILE_MSG: DB 13,10, "Unable to work.",0 @@ -1485,9 +1506,9 @@ NO_MEM_MSG: DB 13,10, "Not enough free memory pages for ZX mode." DB 13,10, "Clear the memory and restart spectrum.exe again.",0 ;NO_MEM_MSG2: DB 13,10, "Специальные страницы уже заняты." ; DB 13,10, "Очистите память и перезапустите spectrum.exe снова.",0 -MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10 - DB "MODE: ",0 -;MSG_NORMAL2: DB 13,10, "Все файлы считаны нормально.",13,10 +MSG_NORMAL: DB 13,10, "All files has been read successfully.\r\n",0 +;MSG_NORMAL2: DB 13,10, "Все файлы считаны нормально.\r\n\r\n",0 +MSG_MODE: DB "\r\nMODE: ",0 ; DB "Конфигурация: ",0 MSG_NO_MEM: DB 13,10, "No memory space for image or",0 ;MSG_NO_MEM2: DB 13,10, "Не хватает памяти для образа или",0 @@ -1498,7 +1519,7 @@ MSG_ZX_EXIT: DB 13,10, "EXIT from Spectrum mode",13,10,0 ;MSG_ZX_EXIT2: DB 13,10, "EXIT from ZX mode",0 MSG_NO_ZX_FLAG: DB 13,10, 'Error: Necessary ROM images are missing in the CNF file and in RAM!!!' DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0 -MSG_OLD_DSS: DB 13,10, 'To run this version of SPECTRUM launcher you need DSS v1.70.998 or higher.',13,10,0 +MSG_OLD_DSS: DB 13,10, 'To run this version of SPECTRUM launcher you need DSS v',NEED_MIN_DSS_VERSION,' or higher.',13,10,0 PROGRES_IND: DB '░',0 ; 176 PROGRES_100: DB ' 100%',13,10,0 diff --git a/version.inc b/version.inc index 1fa0715..c1c80ef 100644 --- a/version.inc +++ b/version.inc @@ -6,8 +6,9 @@ DEFINE SP_VERSION "2.03 beta build" ; + DEFINE NEED_MIN_DSS_VERSION '1.71.36' DSS_MIN_VERS: .vers EQU 1 -.modf EQU 70 -.build EQU 998 +.modf EQU 71 +.build EQU 36 ; \ No newline at end of file From 4acaf558776284b9b316bab2735e736d5ae65f60 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 15 Jun 2025 02:17:12 +1000 Subject: [PATCH 43/43] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B8=D0=BC=D1=8F=20=D0=B4=D0=B8=D1=81=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20SCL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- macroses/accelerator | 71 -------------------------------------- macroses/accelerator.a80 | 71 -------------------------------------- macroses/macros | 73 ---------------------------------------- macroses/macros.a80 | 73 ---------------------------------------- spectrum.asm | 15 ++++++--- trdscl.a80 | 9 ++--- 7 files changed, 15 insertions(+), 299 deletions(-) delete mode 100644 macroses/accelerator delete mode 100644 macroses/accelerator.a80 delete mode 100644 macroses/macros delete mode 100644 macroses/macros.a80 diff --git a/Shared_Includes b/Shared_Includes index 68e156a..a0e68ce 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 68e156a69e848e7b01656cdf67122022999d75ee +Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1 diff --git a/macroses/accelerator b/macroses/accelerator deleted file mode 100644 index f8171a6..0000000 --- a/macroses/accelerator +++ /dev/null @@ -1,71 +0,0 @@ -; Макросы акселератора для красоты)) - -;--------[выключить акселератор]-------- - MACRO ACC_Off - ld b,b - ENDM -;--------------------------------------- - -;---------[режим приема байта]---------- - MACRO ACC_SetBlockSize - ld d,d -; включает акселератор в режим приема -; байта размера блока далее следует -; команда типа LD A,dat, где dat и будет -; новым размером блока. Если размер -; блока был установлен ранее, его можно -; не устанавливать. - ENDM -;--------------------------------------- - -;-------[заполнение одним байтом]------- - MACRO ACC_FillOneByte - ld c,c -; Операция Fill. Последующая команда -; типа LD (HL),A приведет к заполнению -; указанного ранее количества байт -; значением A - ENDM -;--------------------------------------- - -;----[заполнение вертикальных линий]---- -;Операция Fill для графического экрана. - MACRO ACC_FillScreenOneByte - ld e,e -; Последующая команда типа LD (HL),A -; приведет к заполнению значением A -; вертикальных линий экрана указанным -; ранее количеством байт - ENDM -;--------------------------------------- - -;----------[копирование блока]---------- - MACRO ACC_CopyBlock - ld l,l -; Последующая команда типа LD A,(HL) -; приведет к заполнению ОЗУ акселератора -; данными из адреса (HL), а команда типа -; LD (DE),A приведет к перезаписи данных -; из ОЗУ акселератора в основное или -; видео-ОЗУ. - ENDM -;--------------------------------------- - -;---[копирование графического блока]---- - MACRO ACC_CopyScreenBlock - ld a,a -; копирование блока для граф. экрана. -; Последующая команда типа LD A,(HL) -; приведет к заполнению ОЗУ акселератора -; данными из адреса (HL), а команда типа -; LD (DE),A приведет к перезаписи данных -; из ОЗУ акселератора в видео-ОЗУ -; вертикальными линиями. - ENDM -;--------------------------------------- - -;--------------[Reserved]--------------- - MACRO ACC_Reserved - LD H,H - ENDM -;--------------------------------------- \ No newline at end of file diff --git a/macroses/accelerator.a80 b/macroses/accelerator.a80 deleted file mode 100644 index f8171a6..0000000 --- a/macroses/accelerator.a80 +++ /dev/null @@ -1,71 +0,0 @@ -; Макросы акселератора для красоты)) - -;--------[выключить акселератор]-------- - MACRO ACC_Off - ld b,b - ENDM -;--------------------------------------- - -;---------[режим приема байта]---------- - MACRO ACC_SetBlockSize - ld d,d -; включает акселератор в режим приема -; байта размера блока далее следует -; команда типа LD A,dat, где dat и будет -; новым размером блока. Если размер -; блока был установлен ранее, его можно -; не устанавливать. - ENDM -;--------------------------------------- - -;-------[заполнение одним байтом]------- - MACRO ACC_FillOneByte - ld c,c -; Операция Fill. Последующая команда -; типа LD (HL),A приведет к заполнению -; указанного ранее количества байт -; значением A - ENDM -;--------------------------------------- - -;----[заполнение вертикальных линий]---- -;Операция Fill для графического экрана. - MACRO ACC_FillScreenOneByte - ld e,e -; Последующая команда типа LD (HL),A -; приведет к заполнению значением A -; вертикальных линий экрана указанным -; ранее количеством байт - ENDM -;--------------------------------------- - -;----------[копирование блока]---------- - MACRO ACC_CopyBlock - ld l,l -; Последующая команда типа LD A,(HL) -; приведет к заполнению ОЗУ акселератора -; данными из адреса (HL), а команда типа -; LD (DE),A приведет к перезаписи данных -; из ОЗУ акселератора в основное или -; видео-ОЗУ. - ENDM -;--------------------------------------- - -;---[копирование графического блока]---- - MACRO ACC_CopyScreenBlock - ld a,a -; копирование блока для граф. экрана. -; Последующая команда типа LD A,(HL) -; приведет к заполнению ОЗУ акселератора -; данными из адреса (HL), а команда типа -; LD (DE),A приведет к перезаписи данных -; из ОЗУ акселератора в видео-ОЗУ -; вертикальными линиями. - ENDM -;--------------------------------------- - -;--------------[Reserved]--------------- - MACRO ACC_Reserved - LD H,H - ENDM -;--------------------------------------- \ No newline at end of file diff --git a/macroses/macros b/macroses/macros deleted file mode 100644 index b8fc631..0000000 --- a/macroses/macros +++ /dev/null @@ -1,73 +0,0 @@ -; - MACRO FRAM_ON - IN A,(FastRAM_ON) - IF Emulator - PUSH BC - PUSH AF - LD BC,#1FFD - XOR A - OUT (C),A - OUT (FastRam_BANK0),A - POP AF - POP BC - ENDIF - ENDM - - MACRO FRAM_OFF - IN A,(FastRAM_OFF) - IF Emulator - PUSH BC - PUSH AF - LD BC,#1FFD - LD A,1 - OUT (C),A - XOR A - OUT (FastRam_BANK0),A - POP AF - POP BC - ENDIF - ENDM -; -; - MACRO PrintProc - - MODULE PrintF -;--------------------------------------- -printstr: -; в рег. HL адрес на печатаемый буфер - LD C,Dss.PChars - jp ToDSS -;--------------------------------------- - -;--------------------------------------- -; в рег. A число печатаемое как hex -printhex: - LD D,A - RRCA - RRCA - RRCA - RRCA - AND #0F - ADD A,#30 - CP #3A - JR C,.PRNH1 - ADD A,7 -.PRNH1: - CALL .PRINT_CHAR - LD A,D - AND #0F - ADD A,#30 - CP #3A - JP C,.PRINT_CHAR - ADD A,7 - JP .PRINT_CHAR -; в регистре A символ для печати -.PRINT_CHAR: - LD BC,#0182 - JP ToBIOS -;--------------------------------------- - ENDMODULE - - ENDM -; -; \ No newline at end of file diff --git a/macroses/macros.a80 b/macroses/macros.a80 deleted file mode 100644 index b8fc631..0000000 --- a/macroses/macros.a80 +++ /dev/null @@ -1,73 +0,0 @@ -; - MACRO FRAM_ON - IN A,(FastRAM_ON) - IF Emulator - PUSH BC - PUSH AF - LD BC,#1FFD - XOR A - OUT (C),A - OUT (FastRam_BANK0),A - POP AF - POP BC - ENDIF - ENDM - - MACRO FRAM_OFF - IN A,(FastRAM_OFF) - IF Emulator - PUSH BC - PUSH AF - LD BC,#1FFD - LD A,1 - OUT (C),A - XOR A - OUT (FastRam_BANK0),A - POP AF - POP BC - ENDIF - ENDM -; -; - MACRO PrintProc - - MODULE PrintF -;--------------------------------------- -printstr: -; в рег. HL адрес на печатаемый буфер - LD C,Dss.PChars - jp ToDSS -;--------------------------------------- - -;--------------------------------------- -; в рег. A число печатаемое как hex -printhex: - LD D,A - RRCA - RRCA - RRCA - RRCA - AND #0F - ADD A,#30 - CP #3A - JR C,.PRNH1 - ADD A,7 -.PRNH1: - CALL .PRINT_CHAR - LD A,D - AND #0F - ADD A,#30 - CP #3A - JP C,.PRINT_CHAR - ADD A,7 - JP .PRINT_CHAR -; в регистре A символ для печати -.PRINT_CHAR: - LD BC,#0182 - JP ToBIOS -;--------------------------------------- - ENDMODULE - - ENDM -; -; \ No newline at end of file diff --git a/spectrum.asm b/spectrum.asm index 939da65..58e00be 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -371,6 +371,7 @@ READ_IMAGE: LD DE,ONE_FILE CPDR INC HL LD (HL),0 + PUSH HL ; устанавливаем и инитим винт ; LD A,SYS_PORT.BIOS ; OUT (SYS_PORT.ROM),A @@ -381,6 +382,8 @@ READ_IMAGE: LD DE,ONE_FILE CALL BPB_SetUp ; запоминаем сектор директории CALL SET_IMAGE_DIR_SECTOR + POP HL + LD (HL),'\' ; ;;;;;;;;; ; .no_change_Disk:; @@ -799,7 +802,7 @@ RESET_TO_ZX: DI LD (SYS_PAGE.CURRENT_DIR_DRIVE),A LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A ;!TODO в BIOS? - LD BC,CBL.SYS_PORT + LD BC,SP_SND.CBL.SYS_PORT XOR A OUT (C),A ; CBL-off ; @@ -1593,15 +1596,19 @@ CNF_FILE: DB "SPECTRUM.CFG",0 ;USER_CURRENT_DIR EQU $ ;SPECTRUM_HOME_DIR EQU USER_CURRENT_DIR + 256 ; +;---------------------------------------------------------------------[] ONE_FILE: WORD 0 .Size EQU 256 TMP_BUFF EQU ONE_FILE + ONE_FILE.Size .Size EQU 256 +SCL_Buffer EQU TMP_BUFF + TMP_BUFF.Size +.Size EQU #701 ; -PlaceForPalette EQU TMP_BUFF + TMP_BUFF.Size ;#A000 -PlaceForTXTscreen EQU PlaceForPalette + 1024*4 ;!HARDCODE - +PlaceForPalette EQU SCL_Buffer + SCL_Buffer.Size +.Size EQU 1024*4 +PlaceForTXTscreen EQU PlaceForPalette + PlaceForPalette.Size + ASSERT $<#A000,"Buffer out of mem bank 2" STACK_CHECK_MACRO stack_point,stack_buffer ; Code after Loader diff --git a/trdscl.a80 b/trdscl.a80 index f5a66aa..667fb12 100644 --- a/trdscl.a80 +++ b/trdscl.a80 @@ -320,9 +320,6 @@ SYS_SECTOR SEEK SYS_SECTOR_END: BLOCK 3,0 SCL_FILE_ID: DB 0 -;-----------[в самый конец]------------- -SCL_Buffer EQU $ - ASSERT SCL_Buffer+#701<#A000,"Buffer out of mem bank 2" - - - +; ;-----------[в самый конец]------------- +; SCL_Buffer EQU $ +; ASSERT SCL_Buffer+#701<#A000,"Buffer out of mem bank 2" \ No newline at end of file