+ 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

@ -47,7 +47,7 @@
IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF
IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF
DEFINE EXE_HEADER 1 DEFINE EXE_HEADER 1
DEFINE App_EXE_Version 1
DEFINE NEW_MEMORY_LOGIC 0 DEFINE NEW_MEMORY_LOGIC 0
; define NEED_LOADER 1 ; define NEED_LOADER 1
; define NeedSafePort_Y 0 ; define NeedSafePort_Y 0
@ -82,7 +82,7 @@
;*************************************** ;***************************************
org_addr EQU #8000+CLP_Buffer org_addr EQU #8000+CLP_Buffer
code_addr EQU BEGIN code_addr EQU BEGIN
stack_point EQU #BFFE stack_point EQU #C000
stack_buffer EQU 64 stack_buffer EQU 64
program_start EQU BEGIN program_start EQU BEGIN
Loader_length EQU 0 Loader_length EQU 0
@ -199,25 +199,8 @@ ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG
JP EXIT_ALL JP EXIT_ALL
END_CNF_ERROR: END_CNF_ERROR:
LD HL,ERROR_CNF LD HL,ERROR_CNF
;JP EXIT_ALL
EXIT_ALL: LD C,Dss.PChars EXIT_ALL: LD C,Dss.PChars
RST ToDSS 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 .loop: LD BC,Dss.Exit
RST ToDSS RST ToDSS
@ -328,41 +311,42 @@ LINE_ZX: DZ 'ZX Spectrum PAGES'
LEN_LINE_ZX EQU $-LINE_ZX LEN_LINE_ZX EQU $-LINE_ZX
;********************************************* ;*********************************************
MSG_EXIT1: DB 13,10,"EXIT without run",13,10,0 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 CR_LINE: DB 13,10,0
START_MSG: DB 13,10,'SPECTRUM launcher v',SP_VERSION,'.' START_MSG: DB 13,10, 'SPECTRUM launcher v',SP_VERSION,'.'
DB 13,10,'(c) Sprinter Team.' DB 13,10, '(c) Sprinter Team.'
DB 13,10,'Written by Ivan Mak.' DB 13,10, 'Written by Ivan Mak.'
DB 13,10,'Modified by Anatoliy Belyanskiy.' DB 13,10, 'Modified by Anatoliy Belyanskiy.'
DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0 DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0
ERROR_FILE_MSG_X: ERROR_FILE_MSG_X:
DB 13,10,"Error in file: ",0 DB 13,10, "Error in file: ",0
;ERROR_FILE2_MSG_X: ;ERROR_FILE2_MSG_X:
; DB 13,10,"Žè¨¡ª  ¢ ä ©«¥: ",0 ; DB 13,10, "Žè¨¡ª  ¢ ä ©«¥: ",0
ERROR_FILE_MSG: DB 13,10,"Unable to work.",0 ERROR_FILE_MSG: DB 13,10, "Unable to work.",0
;ERROR_FILE2_MSG: ;ERROR_FILE2_MSG:
; DB 13,10,"<22> ¡®â  ­¥¢®§¬®¦­ .",0 ; DB 13,10, "<22> ¡®â  ­¥¢®§¬®¦­ .",0
ERROR_CNF: DB 13,10,"Unexpected CNF file end.",0 ERROR_CNF: DB 13,10, "Unexpected CNF file end.",0
;ERROR_CNF2: DB 13,10,"<22>¥®¦¨¤ ­­ë© ª®­¥æ CNF ä ©« .",0 ;ERROR_CNF2: DB 13,10, "<22>¥®¦¨¤ ­­ë© ª®­¥æ CNF ä ©« .",0
NO_MEM_MSG: DB 13,10,"The spesial pages are already used." NO_MEM_MSG: DB 13,10, "The spesial pages are already used."
DB 13,10,"Clear memory and restart spectrum.exe again.",0 DB 13,10, "Clear memory and restart spectrum.exe again.",0
;NO_MEM_MSG2: DB 13,10,"‘¯¥æ¨ «ì­ë¥ áâà ­¨æë 㦥 § ­ïâë." ;NO_MEM_MSG2: DB 13,10, "‘¯¥æ¨ «ì­ë¥ áâà ­¨æë 㦥 § ­ïâë."
; DB 13,10,"Žç¨áâ¨â¥ ¯ ¬ïâì ¨ ¯¥à¥§ ¯ãáâ¨â¥ spectrum.exe á­®¢ .",0 ; DB 13,10, "Žç¨áâ¨â¥ ¯ ¬ïâì ¨ ¯¥à¥§ ¯ãáâ¨â¥ spectrum.exe á­®¢ .",0
MSG_NORMAL: DB 13,10,"All files has been read successfully.",13,10 MSG_NORMAL: DB 13,10, "All files has been read successfully.",13,10
DB "MODE: ",0 DB "MODE: ",0
;MSG_NORMAL2: DB 13,10,"‚ᥠ䠩«ë áç¨â ­ë ­®à¬ «ì­®.",13,10 ;MSG_NORMAL2: DB 13,10, "‚ᥠ䠩«ë áç¨â ­ë ­®à¬ «ì­®.",13,10
; DB "Š®­ä¨£ãà æ¨ï: ",0 ; DB "Š®­ä¨£ãà æ¨ï: ",0
MSG_NO_MEM: DB 13,10,"No memory space for image or",0 MSG_NO_MEM: DB 13,10, "No memory space for image or",0
;MSG_NO_MEM2: DB 13,10,"<22>¥ 墠⠥⠯ ¬ï⨠¤«ï ®¡à §  ¨«¨",0 ;MSG_NO_MEM2: DB 13,10, "<22>¥ 墠⠥⠯ ¬ï⨠¤«ï ®¡à §  ¨«¨",0
MSG_LOAD_IMAGE: DB 13,10,"Image loading: ",0 MSG_LOAD_IMAGE: DB 13,10, "Image loading: ",0
;MSG_LOAD_IMAGE2: ;MSG_LOAD_IMAGE2:
; DB 13,10,"‡ £à㧪  ®¡à § : ",0 ; DB 13,10, "‡ £à㧪  ®¡à § : ",0
MSG_ZX_EXIT: DB 13,10,"EXIT from Spectrum configuration",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_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!!!' 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 DB 13,10, ' Run "spectrum.exe norun.zx" with the required set of ZX ROMs.',13,10,0
PROGRES_IND: DB '°',0 ; 176 PROGRES_IND: DB '°',0 ; 176
PROGRES_100: DB ' 100%',13,10,0
;MEM_BLK: BYTE 0 ;MEM_BLK: BYTE 0
LINE_X: WORD 0 LINE_X: WORD 0
@ -481,7 +465,7 @@ LOADING_PALETTE:
LD (FILE_HANDLE),A LD (FILE_HANDLE),A
LD HL,PlaceForPalette LD HL,PlaceForPalette
LD DE,1024*4 LD DE,1024*4 ;!HARDCODE
LD C,Dss.Read LD C,Dss.Read
RST ToDSS RST ToDSS
JP C,ERROR_FILE ; ®è¨¡ª  ¯à¨ ç⥭¨¨ JP C,ERROR_FILE ; ®è¨¡ª  ¯à¨ ç⥭¨¨
@ -635,17 +619,17 @@ PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM
POP BC POP BC
OUT (C),B OUT (C),B
JP C,ERROR_FILE JP C,ERROR_FILE
;
SKIP_IMAGE: LD A,(No_run_+2) SKIP_IMAGE: LD A,(No_run_+2)
AND A AND A
JP NZ,PREPARE_TO_ZXMODE
;
LD HL,MSG_EXIT1 LD HL,MSG_EXIT1
JP NZ,SETUP_RAM_DRIVES
LD BC,SLOT3 LD BC,SLOT3
IN B,(C) IN B,(C)
LD A,Spec_Page LD A,Spec_Page
OUT (C),A OUT (C),A
; ; !FIXIT ª®£¤  ¡ã¤¥â ¯à®æ¥¤ãà  ¢ ¡¨®á¥ ¯¥à¥¤¥« âì ¯®¤ ­¥ñ
LD A,"Z" LD A,"Z"
LD (Spec_Page.flag_Z),A LD (Spec_Page.flag_Z),A
LD A,"X" LD A,"X"
@ -840,7 +824,6 @@ Get_RAM_Disk_E: LD A,D
;******************************************** ;********************************************
Load_IMAGE_File: Load_IMAGE_File:
LD A,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
LD HL,0 LD HL,0
@ -877,7 +860,7 @@ Load_IMAGE_File:
CP #FF CP #FF
JR NZ,.load_loop JR NZ,.load_loop
LD HL,CR_LINE ; loading LD HL,PROGRES_100 ; loading 100%
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
@ -886,9 +869,7 @@ Load_IMAGE_File:
RST ToDSS RST ToDSS
RET C RET C
;RET .Set_RAM_Dsk_EtoA:
Set_RAM_Dsk_EtoA:
DI DI
XOR A XOR A
LD BC,0*256+BIOS.RAMD_TO_DRV ; ­ §­ ç¨âì e: ­  a: LD BC,0*256+BIOS.RAMD_TO_DRV ; ­ §­ ç¨âì e: ­  a:
@ -945,7 +926,7 @@ FILE_HANDLE: DB 0
;******************************************** ;********************************************
EXIT_TO_DSS: DI EXIT_TO_DSS: DI
LD SP,#BFF0 LD SP,stack_point
LD A,CNF_PORT.CNF_0 LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
@ -956,10 +937,6 @@ EXIT_TO_DSS: DI
LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL
RST ToBIOS RST ToBIOS
LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT
LD BC,0*256+Dss.SetVMod
RST ToDSS
;!TEST; [ ] 05/11/2023 ®ç¨é âì à ¬¤¨áª¨ ¯à¨ ¢ë室¥ ;!TEST; [ ] 05/11/2023 ®ç¨é âì à ¬¤¨áª¨ ¯à¨ ¢ë室¥
LD A,(RMD_Keep_+2) LD A,(RMD_Keep_+2)
AND A AND A
@ -978,16 +955,80 @@ EXIT_TO_DSS: DI
RST ToBIOS 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 LD HL,MSG_ZX_EXIT
JP EXIT_ALL 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 ;!TEST; [ ] 04/11/2023 Žâ¤¥«ì­ë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS. BLK_TO_RAMD
SETUP_RAM_DRIVES: SETUP_RAM_DRIVES:
LD BC,BIOS.SWAP_RAM_DRIVES.ZX LD BC,BIOS.SWAP_RAM_DRIVES.ZX
@ -1042,7 +1083,7 @@ NO_RET_FN: LD (#FFF4),DE ;
;******************************************** ;********************************************
RESET_TO_ZX: DI RESET_TO_ZX: DI
LD SP,#BFF0 LD SP,stack_point ; #BFF0
LD A,high ZXKeys.Line_7 LD A,high ZXKeys.Line_7
IN A,(ZXKeys) IN A,(ZXKeys)
@ -1067,7 +1108,6 @@ RESET_TO_ZX: DI
XOR B XOR B
LD B,A LD B,A
LD A,ACEX.RET_PORT LD A,ACEX.RET_PORT
;!FIXIT ¯¥à¥¤¥« âì ¯®¤ äã­ªæ¨î ¡¨®á 
CALL SET_ROM ; ¢ª«îç¨âì ¢®§¢à â CALL SET_ROM ; ¢ª«îç¨âì ¢®§¢à â
LD A,CNF_PORT.CNF_3 LD A,CNF_PORT.CNF_3
@ -1387,17 +1427,18 @@ CNF_FILE: DB "SPECTRUM.CFG",0
;----------------------------------------------[End Loader section] ;----------------------------------------------[End Loader section]
; ;
;ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0
ONE_FILE: WORD 0
TMP_BUFF EQU ONE_FILE+256
;
;!TODO ;!TODO
;USER_CURRENT_DRV DB 'Z:' ;USER_CURRENT_DRV DB 'Z:'
;USER_CURRENT_DIR EQU $ ;USER_CURRENT_DIR EQU $
;SPECTRUM_HOME_DIR EQU USER_CURRENT_DIR + 256 ;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 STACK_CHECK_MACRO stack_point,stack_buffer
; Code after Loader ; Code after Loader