mirror of
https://github.com/Tolik-Trek/Spectrum.EXE.git
synced 2026-06-15 09:01:38 +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
|
||||
187
spectrum.asm
187
spectrum.asm
@ -47,7 +47,7 @@
|
||||
IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF
|
||||
IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF
|
||||
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,"‚ë室 ¡¥§ § ¯ã᪠"
|
||||
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.'
|
||||
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 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
|
||||
;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_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
|
||||
; 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
|
||||
@ -978,16 +955,80 @@ EXIT_TO_DSS: DI
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user