From 2227adf2abaad95e47ff701801471ccc60e3f503 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 8 Jun 2024 01:38:35 +1000 Subject: [PATCH] + 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