mirror of
https://github.com/Tolik-Trek/Spectrum.EXE.git
synced 2026-06-15 00:51:36 +03:00
+ save and restore text mode screen
This commit is contained in:
parent
8dd95b8ff0
commit
2227adf2ab
@ -1 +1 @@
|
|||||||
Subproject commit 215d0f3c90865dd2c4c0d92d17e64513a0b0407e
|
Subproject commit 314ff5dbefe8d537655601dde8236957e4ed39a7
|
||||||
203
spectrum.asm
203
spectrum.asm
@ -46,9 +46,9 @@
|
|||||||
;***************************************
|
;***************************************
|
||||||
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
|
||||||
@ -977,17 +954,81 @@ EXIT_TO_DSS: DI
|
|||||||
LD BC,BIOS.SWAP_RAM_DRIVES.Sp2000
|
LD BC,BIOS.SWAP_RAM_DRIVES.Sp2000
|
||||||
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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user