+ 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
@ -358,11 +341,12 @@ MSG_NO_MEM: DB 13,10,"No memory space for image or",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