From 9aca5b5351377437d1cbb5a01a03aa6d5e2b7fbf Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 9 Dec 2023 05:47:07 +1000 Subject: [PATCH] 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