+ save and restore text mode screen

This commit is contained in:
Anatoliy Belyanskiy 2024-06-08 01:38:35 +10:00
parent 8dd95b8ff0
commit 2227adf2ab
2 changed files with 123 additions and 82 deletions

@ -1 +1 @@
Subproject commit 215d0f3c90865dd2c4c0d92d17e64513a0b0407e
Subproject commit 314ff5dbefe8d537655601dde8236957e4ed39a7

View File

@ -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,"<22> ¡®â  ­¥¢®§¬®¦­ .",0
ERROR_CNF: DB 13,10,"Unexpected CNF file end.",0
;ERROR_CNF2: DB 13,10,"<22>¥®¦¨¤ ­­ë© ª®­¥æ 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,"<22>¥ 墠⠥⠯ ¬ï⨠¤«ï ®¡à §  ¨«¨",0
MSG_LOAD_IMAGE: DB 13,10,"Image loading: ",0
; DB 13,10, "<22> ¡®â  ­¥¢®§¬®¦­ .",0
ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0
;ERROR_CNF2: DB 13,10, "<22>¥®¦¨¤ ­­ë© ª®­¥æ 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, "<22>¥ 墠⠥⠯ ¬ï⨠¤«ï ®¡à §  ¨«¨",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