Spectrum.EXE/spectrum.asm
2024-07-07 04:52:30 +10:00

1463 lines
31 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------.
; | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
; | | _______ | || | ______ | || | _________ | || | ______ | || | _________ | || | _______ | || | _____ _____ | || | ____ ____ | |
; | | / ___ | | || | |_ __ \ | || | |_ ___ | | || | .' ___ | | || | | _ _ | | || | |_ __ \ | || ||_ _||_ _|| || ||_ \ / _|| |
; | | | (__ \_| | || | | |__) | | || | | |_ \_| | || | / .' \_| | || | |_/ | | \_| | || | | |__) | | || | | | | | | || | | \/ | | |
; | | '.___`-. | || | | ___/ | || | | _| _ | || | | | | || | | | | || | | __ / | || | | ' ' | | || | | |\ /| | | |
; | | |`\____) | | || | _| |_ | || | _| |___/ | | || | \ `.___.'\ | || | _| |_ | || | _| | \ \_ | || | \ `--' / | || | _| |_\/_| |_ | |
; | | |_______.' | || | |_____| | || | |_________| | || | `._____.' | || | |_____| | || | |____| |___| | || | `.__.' | || ||_____||_____|| |
; | | | || | | || | | || | | || | | || | | || | | || | | |
; | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
; '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------'
;
/*
SYS
[x] - § ¤ ñâáï CONFIG_DE ¯¥à¥¤ § ¯ã᪮¬ ᯥªâà㬠 ¨ ¢ ¯¥à¥å¢ â稪¥ à¥á¥â  (¤«ï ¡®«¥¥ £« ¤ª®© ᮢ¬¥á⨬®á⨠ᮠáâ àë¬ á®ä⮬ Sp97)
[x] - ¯®¤¤¥à¦ª  ­®¢ëå ®¡à §®¢ vROM
[x] - ¢ ª®­ä¨£¥ ¬®¦­® ¯à®¯ãáâ¨âì § £à㧪ã á HDD ¢ë¡à ­­ëå vROM, ®­¨ ¯à®¯ã᪠îâáï ¥á«¨ ¯¥à¥¤ ¯ãâñ¬ á⮨â ";"
[x] - ¯à®¢¥àïâì ¬¥âªã ZX, ¥á«¨ ¬ë ­¥ £à㧨¬ 3 ®á­®¢­ëå vROM
[x] - ¤®¡ ¢«¥­  ᮢ¬¥á⨬®áâì á ¤¥¬® ATARIN, ãᯮ«ì§ãî饥 ­¥¯®«­ãî ¤¥è¨äà æ¨î ¯®àâ  AY
[x] - ¯¥à¥¤ ¢å®¤®¬ ¢ ०¨¬ ᯥªâà㬠 ⥪ã騬 ãáâ ­ ¢«¨¢ ¥âáï à §¤¥« HDD á ª®â®à®£® § £à㦠«áï ®¡à § TRD
;
Images
[+] - Load SCL image
[ ] - Load SNA file
[ ] - Load TAP image
;
Features
[+] - ᫨ ¢ë¡à ­® ret-zx,â® ¯à¨ ­ ¦ â¨¨ ­  ¯à®¡¥« áà §ã ¯®á«¥ CAD ¢¥à­ñâ ¢ DSS
[*] - Œ¥­ïâì ᯥªâà㬮¢áªãî ¯ «¨âàã
[ ] - 뤠¢ âì á®®¡é¥­¨ï ­  ï§ëª¥ ãáâ ­®¢«¥­­®¬ ¢ CMOS
*/
;
; Compilation parameters
;***************************************
DEVICE SPRINTER
; MMU 2 e, 0 ; ­ã«¥¢ ï áâà ­¨æ  ¢ ¡ ­ªã 2 ¨ ¯à®¢¥àª  ­  £à ­¨æë
; OUTPUT './Build/new.bin'
;***************************************
;
; Defines section
;***************************************
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
;***************************************
;
;
; Included constants section
;***************************************
INCLUDE 'Shared_Includes/constants/sp2000.inc'
INCLUDE 'Shared_Includes/constants/dss_equ.inc'
INCLUDE 'Shared_Includes/constants/BIOS_equ.inc'
;***************************************
;
;
; Included macroses section
;***************************************
INCLUDE 'Shared_Includes/macroses/macros.z80'
INCLUDE 'Shared_Includes/macroses/accelerator.z80'
;***************************************
;
; Included LUA section
;***************************************
INCLUDELUA <Shared_Includes/LUA/Functions.LUA>
;***************************************
;
;
; Standart EQU section
;***************************************
org_addr EQU #8000+CLP_Buffer
code_addr EQU BEGIN
stack_point EQU #C000
stack_buffer EQU 64
program_start EQU BEGIN
Loader_length EQU 0
;***************************************
;
;
; Program EQU section
;***************************************
FULL_FILE_NAME_LENGTH EQU 256 ; ¤«¨­  áâப¨ ¯ã⨠ª ä ©«ã
MAX_LINE_LENGTH EQU 120 ; ¤«¨­  áâப¨ CFG ä ©« 
;!TEST
;CFG_FILE_LINES EQU 8
CFG_FILE_LINES EQU 9
;
; NAME_CFG_LINE EQU 0
; BASIC128_LINE EQU 2
; BASIC_48_LINE EQU 4
; TRDOS_LINE EQU 6
; EXP_LINE EQU 8
; BIOS_LINE EQU 10
; BIOS2_LINE EQU 12
;XXX_LINE EQU ??
NAME_CFG_LINE EQU 1
BASIC128_LINE EQU 2
BASIC_48_LINE EQU 3
TRDOS_LINE EQU 4
EXP_LINE EQU 5
BIOS_LINE EQU 6
BIOS2_LINE EQU 7
OPTIONS_LINE EQU 8
PALETTE_LINE EQU 9
;OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2
;***************************************
;
;
; Program EQU section
;***************************************
INCLUDE 'version.inc'
;***************************************
;
;
; Code start section
;[]-------------------------------------------------------------------[]
IF EXE_HEADER
INCLUDE 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
ELSE
ORG org_addr-CLP_Buffer
ENDIF
BEGIN: LD (LINE_X),IX
LD HL,START_MSG
LD C,Dss.PChars
RST ToDSS
IN A,(SLOT3)
LD (SAVE_SLOT3),A
;
;
IF NEW_MEMORY_LOGIC
LD BC,BUFFER_RAM_PAGES.Size * 256 + Dss.GetMem
RST ToDSS
JR C,Error_NoMemForSPpages
LD HL,BUFFER_RAM_PAGES
LD C,BIOS.GetMemBlkPages
RST ToBIOS
ENDIF
;
;!TODO
;LD HL,SPECTRUM_HOME_DIR
;LD BC,Dss.AppInfo.EXE_HomeDir
;RST ToDSS
;;
;LD C,Dss.CurDisk
;RST ToDSS
;ADD A,'A'
;LD (USER_CURRENT_DRV),A
;;
;LD HL,USER_CURRENT_DIR
;LD C,Dss.CurDir
;RST ToDSS
;
JP COMAND_LINE
Error_NoMemForSPpages:
LD HL,NO_MEM_MSG
JR ERROR_FILE.prn_msg
ERROR_FILE: LD HL,ERROR_FILE_MSG_X
LD C,Dss.PChars
RST ToDSS
;
LD A,(FILE_HANDLE)
LD C,Dss.Close
RST ToDSS
;
LD HL,ONE_FILE
.prn_msg: LD C,Dss.PChars
RST ToDSS
;
LD HL,ERROR_FILE_MSG
JP EXIT_ALL
ERROR_ZX_FLAG: LD HL,MSG_NO_ZX_FLAG
JP EXIT_ALL
END_CNF_ERROR:
LD HL,ERROR_CNF
EXIT_ALL: LD C,Dss.PChars
RST ToDSS
;
.loop: LD BC,Dss.Exit
RST ToDSS
JR .loop
;
COMAND_LINE: LD HL,(LINE_X)
LD A,(HL)
AND A
JR Z,NO_FIL
DEC A
JR Z,NO_FIL
INC HL
INC HL
CALL FIND_FILES
CALL MAKE_FULL_NAME
LD A,SHARED_PAGE
CALL READ_FILE_1
JP NC,CONTINUE
NO_FIL: CALL MAKE_FULL_NAME.def_cnf
LD A,SHARED_PAGE
CALL READ_FILE_1
JR C,ERROR_FILE
JP CONTINUE
FIND_FILES: PUSH HL
LD (X_FILE),HL
LD DE,0
LD (IMAGE_FLAG),DE
LD (IMAGE_NAME),DE
LD (CNF_NAME),DE
LD B,A
JR NO_NEXT
FIND_T_LOOP: LD A,(HL)
INC HL
CP "."
CALL Z,POINT_F
CP ' '
CALL Z,BLANK_X
CP 9
CALL Z,BLANK_X
CP 10
CALL Z,BLANK_X1
CP 13
CALL Z,BLANK_X1
JR Z,END_NO_IMAGE
NO_NEXT: DJNZ FIND_T_LOOP
END_NO_IMAGE: POP HL
LD A,(CNF_NAME+1)
AND A
RET NZ
LD A,(IMAGE_NAME+1)
AND A
LD DE,(X_FILE)
JR Z,CNF_ALL
LD DE,CNF_FILE
CNF_ALL: LD (CNF_NAME),DE
RET
BLANK_X: LD (X_FILE),HL ; ­ ©¤¥­ ¯à®¡¥«, ¨¬ï ä ©«  - á­®¢ 
BLANK_X1: DEC HL
LD (HL),0
INC HL
RET
;------------------------------------[v]
POINT_F: LD A,(HL)
CP 't'
JR Z,.TRD
CP 'T'
JR Z,.TRD
CP 's'
JR Z,.SCL
CP 'S'
JR Z,.SCL
CP 'z'
JR Z,.CNF
CP 'Z'
JR Z,.CNF
.exit: DEC HL
LD A,(HL)
INC HL
RET
.SCL: LD DE,IMAGE_FLAG
LD A,1
LD (DE),A
.TRD: LD DE,(X_FILE)
LD (IMAGE_NAME),DE
JR .exit
.CNF: LD DE,(X_FILE)
LD (CNF_NAME),DE
JR .exit
;------------------------------------[^]
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
ERROR_FILE_MSG_X:
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
;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
;MSG_LOAD_IMAGE2:
; 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
X_FILE: WORD 0
CNF_NAME: WORD 0
IMAGE_FLAG: BYTE 0 ; 0 - trd, scl - 1, sna - 2, tap - 3
IMAGE_NAME: WORD 0
IMAGE_HANDLER: BYTE 0
SAVE_SLOT3: BYTE 0
LEN_CNF: WORD 0
A_LINES: BLOCK CFG_FILE_LINES*2,0
;*********************************************
CONTINUE: LD (LEN_CNF),DE ; CNF ä ©« ¯à®ç¨â ­, DE - ¤«¨­  CNF
READ_CNF_FILE: LD HL,#C000
LD DE,A_LINES
LD C,CFG_FILE_LINES
.LOOP_A: LD B,MAX_LINE_LENGTH ; ¤«¨­  áâப¨
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
.LOOP_L: LD A,(HL)
CP 13
JR Z,.N_LINE
CP 10
JR Z,.N_LINE
AND A
JP Z,END_CNF_ERROR
INC HL
DJNZ .LOOP_L
.N_LINE: LD (HL),0
.N_LINE2: INC HL
LD A,(HL)
CP 13
JR Z,.N_LINE2
CP 10
JR Z,.N_LINE2
DEC C
JR NZ,.LOOP_A
; ¢ë¤¥«¥­® 8 áâப ¢ CNF
;*************************************
;!TODO ¥á«¨ ¯à®¯ã᪠¥¬ § £à㧪ã ROM ¤«ï 48, 128 ¨«¨ trdos, â® ¢áâ ¢«ïâì ¢ ¯®àâ vROM ­®¬¥à ¨§ áâ ­¤ àâ­®£® ¯¥à¢®£® ¡«®ª 
;!TEST
MACRO vROM_LOAD romLine;,pageNumber
.romLine = (romLine-1)*2
EX DE,HL
LD HL,(A_LINES+.romLine)
LD A,(HL)
CP ';'
EX DE,HL
JR NZ,.go_load
LD (HL),0
EX DE,HL
LD A,(NO_ZX_FLAG)
OR A
JR Z,.skip_load
JP ERROR_ZX_FLAG
.go_load:
LD A,(HL) ;BUFFER_RAM_PAGES.ROM
PUSH HL
EX DE,HL
CALL READ_FILE_1
POP DE
;
LD A,SHARED_PAGE
OUT (SLOT3),A
JP C,ERROR_FILE
.skip_load:
INC DE
EX DE,HL
ENDM
;
LOAD_ZXROMS:
;!FIXIT ¢à¥¬¥­­ ï § ¯« âª 
CALL CHECK_ZX_FLAG
;
;LD BC,BUFFER_RAM_PAGES.ROM
LD HL,BUFFER_RAM_PAGES.ROM
vROM_LOAD BASIC128_LINE;, #42 ; 2-ï áâப  - ¨¬ï ä ©«  BASIC128
vROM_LOAD BASIC_48_LINE;, #43 ; 3-ï áâப  - ¨¬ï ä ©«  BASIC 48
vROM_LOAD TRDOS_LINE ;, #44 ; 4-ï áâப  - ¨¬ï ä ©«  TR-DOS
vROM_LOAD EXP_LINE ;, #45 ; 5-ï áâப  - ¨¬ï ä ©«  EXPANSION
vROM_LOAD BIOS_LINE ;, #46 ; 6-ï áâப  - ¨¬ï ä ©«  BIOS
vROM_LOAD BIOS2_LINE ;, #47 ; 7-ï áâப  - ¨¬ï ä ©«  BIOS2
;vROM_LOAD _LINE ;, #42 ; 8-ï áâப  - ¨¬ï ä ©« 
;vROM_LOAD _LINE ;, #42 ; 9-ï áâப  - ¨¬ï ä ©« 
;vROM_LOAD _LINE ;, #42 ; 10-ï áâப  - ¨¬ï ä ©« 
;vROM_LOAD _LINE ;, #42 ; 11-ï áâப  - ¨¬ï ä ©« 
;!TEST palette load
LOADING_PALETTE:
EX DE,HL
LD HL,( A_LINES + ((PALETTE_LINE-1)*2) )
LD A,(HL)
CP ';'
JR Z,.skip
LD DE,ONE_FILE
LD BC,FULL_FILE_NAME_LENGTH
LDIR
LD HL,ONE_FILE
LD A,Dss.Open.R
LD C,Dss.Open
RST ToDSS
JP C,ERROR_FILE ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
LD (FILE_HANDLE),A
LD HL,PlaceForPalette
LD DE,1024*4 ;!HARDCODE
LD C,Dss.Read
RST ToDSS
JP C,ERROR_FILE ; ®è¨¡ª  ¯à¨ ç⥭¨¨
;!TEST ¯à®â¥áâ¨âì DSS ­  í⮬. …᫨ ä ©« 4096 ¨ ç¨â âì 4096, â® ¢ A ¡ã¤¥â #FF
;OR A
;JP NZ,ERROR_FILE
;
LD A,(FILE_HANDLE)
LD C,Dss.Close
RST ToDSS
.skip:
;
;!TODO ¯¥ç â âì ¨¬ï ä ©«  ¯ «¨âàë, ¥á«¨ ®­ § £à㦥­
; ä ©«ë áç¨â ­ë
;*************************************
LD HL,MSG_NORMAL
LD C,Dss.PChars
RST ToDSS
LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 )
LD C,Dss.PChars
RST ToDSS
LD HL,CR_LINE
LD C,Dss.PChars
RST ToDSS
;LD A,(SAVE_SLOT3)
;OUT (SLOT3),A
;*************************************
LD A,SHARED_PAGE
OUT (SLOT3),A
LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; áâப  ¯ à ¬¥â஢
LOOP_PAR1: LD A,(HL)
CP '/'
JR Z,PARAM_TEST
CP 0
JR Z,PARAM_END
CP 13
JR Z,PARAM_END
CP 10
JR Z,PARAM_END
INC HL
JR LOOP_PAR1
PARAM_TEST: INC HL
PUSH HL
LD IX,PARAMS
NEXT_PAR: LD E,(IX)
LD D,(IX+1)
LOOP_PAR2: LD A,(DE)
CP (HL)
JR NZ,PARAM_E1
INC HL
INC DE
JR LOOP_PAR2
PARAM_E1: CP 255
JR NZ,NO_PAR
LD A,(HL)
CP ' '
JR Z,PARAM_E2
CP 0
JR Z,PARAM_E2
CP 13
JR Z,PARAM_E2
NO_PAR: POP HL
PUSH HL
INC IX
INC IX
INC IX
INC IX
LD A,(IX+1)
AND A
JR NZ,NEXT_PAR
POP HL
JR LOOP_PAR1
PARAM_E2: EX (SP),HL ; ­®¢®¥ HL - á®åà ­ï¥âáï!
LD A,(IX+3)
LD (IX+2),A ; parameter alternate!
LD L,(IX)
LD H,(IX+1)
LD C,Dss.PChars
RST ToDSS
POP HL
JR LOOP_PAR1
;************************************
IF NEW_MEMORY_LOGIC
BUFFER_RAM_PAGES:
.ROM: BLOCK 10 ; ª®«¨ç¥á⢮ ¯®à⮢ í¬ã«ïâ®à  <20>‡“
.RAM: BLOCK 16 ; 256 ª¡
.Size EQU $-BUFFER_RAM_PAGES
.end_marker: BYTE #FF
ELSE
BUFFER_RAM_PAGES:
.ROM: DB #42, #43, #44, #45, #46, #47
;.RAM: BLOCK 16 ; 256 ª¡
.Size EQU $-BUFFER_RAM_PAGES
.end_marker: BYTE #FF
ENDIF
MACRO vROM_set dcp_port
LD B,(HL) ; page
INC HL
XOR A
OR B
JR Z,.next
LD A,dcp_port ; ROM-ID
PUSH HL
CALL SET_ROM
POP HL
.next:
ENDM
PARAM_END: LD HL,BUFFER_RAM_PAGES.ROM
vROM_set ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128
vROM_set ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48
vROM_set ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS
vROM_set ACEX.vROM.BIOS ; ROM-ID - EXPANSION
vROM_set ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1
vROM_set ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2
;vROM_set ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2
;vROM_set ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2
;vROM_set ACEX.vROM.TR_DOS_2 ; TR-DOS - 2
;vROM_set ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2
LD HL,(IMAGE_NAME)
LD A,H
OR L
JP Z,SKIP_IMAGE
LD C,SLOT3
IN B,(C)
PUSH BC
CALL READ_IMAGE
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
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"
LD (Spec_Page.flag_X),A
;
OUT (C),B
;
JP EXIT_ALL
;LD HL,MSG_NORMAL
;JP EXIT_ALL
;********************************************
;JP 0
;********************************************
; out B - old ROM-page
SET_ROM: DI
LD C,BIOS.SET_PORTS
JP ToBIOS
; DI
; ;
; EX AF,AF'
; IN A,(SLOT3)
; PUSH AF
; LD A,DCP_PAGE ; ãáâ ­®¢¨âì ­®¢ãî
; OUT (SLOT3),A
; ;
; LD A,(#C400) ; á®åà ­¨âì â® çâ® ¡ë«®
; LD E,A
; LD A,(#C600)
; LD D,A
; ;
; EX AF,AF' ; áâà ­¨æ 
; LD (#C400),A ; ãáâ ­®¢¨âì ¯®àâ ROM
; LD (#C600),A
; ;
; EX AF,AF'
; LD A,B
; LD BC,0
; EX AF,AF'
; IN A,(C)
; EX AF,AF'
; OUT (C),A ; ãáâ ­®¢¨âì ­®¢ë© ROM
; EX AF,AF'
; ;
; LD B,A
; LD A,E
; LD (#C400),A ; ¢¥à­ãâì ¯®àâ
; LD A,D
; LD (#C600),A ; ¢¥à­ãâì ¯®àâ
; ;
; POP AF
; OUT (SLOT3),A
; RET
;********************************************
;********************************************
READ_IMAGE: LD DE,ONE_FILE
LD BC,FULL_FILE_NAME_LENGTH
LDIR
LD HL,ONE_FILE
LD A,Dss.Open.R
LD C,Dss.Open
RST ToDSS
RET C
LD (IMAGE_HANDLER),A
; [ ] 31/01/2024 ¯®¤¤¥à¦ª  ¯¥à¥ª«î祭¨ï ¤¨áª /à §¤¥«  ¢ TR-DOS
LD HL,ONE_FILE
LD BC,Dss.EX_Path.GET_ALL
RST ToDSS
JR C,.no_change_Disk
AND 8
JR Z,.currentDisk
;
LD C,Dss.CurDisk
RST ToDSS
JR C,.no_change_Disk
JR .getInfoDRV
.currentDisk: ;
LD A,(ONE_FILE)
SUB "A"
;
.getInfoDRV: ;
OR #80
LD HL,TMP_BUFF
LD BC,Dss.DskInfo
RST ToDSS
;
LD B,4 ;!HARDCODE ­®¬¥à ­ã¦­®£® ¯ à ¬¥âà 
LD DE,0
LD HL,TMP_BUFF
.loop_param: ADD HL,DE
LD E,(HL)
INC HL
DJNZ .loop_param
LD A,(HL)
AND #80
JR Z,.no_change_Disk
CP #90
JR NC,.no_change_Disk
;
LD A,3
AND (HL)
LD D,A
INC HL
LD A,(HL)
RLCA
RLCA
;
OR D
AND #0F
;
;LD C,SLOT3
;IN B,(C)
;EX AF,AF'
;LD A,SYS_PAGE
;OUT (C),A
;EX AF,AF'
;
LD (RESET_TO_ZX.hdd),A
;OUT (C),B
;
;
.no_change_Disk:;
LD A,(IMAGE_FLAG)
AND A
JR Z,.Load_TRD
CP 1 ; check if SCL
JP Z,Load_SCL
;jp Error_Flag ;!!!!!!!!!!!!!!!!
.Load_TRD: LD A,(IMAGE_HANDLER)
LD HL,0
LD IX,0
LD BC,Dss.Move_FP.FrEnd
RST ToDSS ; ­ ©â¨ ¤«¨­ã ä ©« 
RET C
PUSH IX
POP DE
CALL Get_RAM_Disk_E
RET C
JP Load_IMAGE_File
; hl:de - à §¬¥à ä ©«  ¢ ¡ ©â å
Get_RAM_Disk_E: LD A,D
ADD A,A
ADC HL,HL
ADD A,A
ADC HL,HL
LD A,D
AND #3F
OR E
JR Z,.skip_inc
INC HL
;HL - ¤«¨­  ä ©«  ¢ áâà ­¨æ å
.skip_inc: LD A,H
AND A
JR NZ,ERROR_NO_MEM
LD A,L
AND A
JR Z,ERROR_NO_MEM
PUSH AF
;***************************************
; [x] 04/11/2023 Žâ¤¥«ì­ë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS
.free_disk: DI
;!TEST
;XOR A ; RAM-Drive E:
;LD C,BIOS.FreeMemRMD
;RST ToBIOS ; ®á¢®¡®¤¨âì e:
;
POP BC
;!TEST
;LD B,A ; § ¯à®á¨âì ¯ ¬ïâì ã bios- 
;XOR A ; RAM-Drive E:
;LD C,BIOS.GetMemRMD ; ¨ ¯®¤á®¥¤¨­¨âì ª e:
LD C,BIOS.GetMem
;
RST ToBIOS
JR C,ERROR_NO_MEM
LD (Load_IMAGE_File.MEM_BLK),A
RET
;---------------------------------------
;********************************************
Load_IMAGE_File:
LD A,(IMAGE_HANDLER)
LD HL,0
LD IX,0
LD BC,Dss.Move_FP.FrStart
RST ToDSS ; ãáâ ­®¢¨âì 㪠§ â¥«ì ­  0
RET C
LD HL,MSG_LOAD_IMAGE ; loading image
LD C,Dss.PChars
RST ToDSS
.MEM_BLK+1: LD A,0
.load_loop: PUSH AF
OUT (SLOT3),A
LD A,(IMAGE_HANDLER)
LD HL,#C000 ; £à㧨âì 16k
LD DE,#4000
LD C,Dss.Read
RST ToDSS
JR C,ERROR_IN_READ
LD HL,PROGRES_IND ; loading progress
LD C,Dss.PChars
RST ToDSS
DI
POP AF
.scl_read_next: LD C,BIOS.GetMemPageNext
RST ToBIOS
CP #FF
JR NZ,.load_loop
LD HL,PROGRES_100 ; loading 100%
LD C,Dss.PChars
RST ToDSS
LD A,(IMAGE_HANDLER)
LD C,Dss.Close ; § ªàëâì ä ©«
RST ToDSS
RET C
.Set_RAM_Dsk_EtoA:
DI
XOR A
LD BC,0*256+BIOS.RAMD_TO_DRV ; ­ §­ ç¨âì e: ­  a:
RST ToBIOS
AND A
RET
ERROR_IN_READ: POP AF
JR ERROR_IMAGE_X
ERROR_NO_MEM: LD HL,MSG_NO_MEM
LD C,Dss.PChars
RST ToDSS
ERROR_IMAGE_X: LD A,(IMAGE_HANDLER)
LD C,Dss.Close ; § ªàëâì ä ©«
RST ToDSS
SCF
RET
SAV_PG3X: DB 0
;********************************************
READ_FILE_1: LD DE,ONE_FILE
LD BC,FULL_FILE_NAME_LENGTH
LDIR
LD HL,ONE_FILE
OUT (SLOT3),A
READ_FILE: LD A,Dss.Open.R
LD C,Dss.Open
RST ToDSS
RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
LD (FILE_HANDLE),A
LD A,(FILE_HANDLE)
LD HL,#C000
LD DE,#4000
LD C,Dss.Read
RST ToDSS
RET C ; ®è¨¡ª  ¯à¨ ç⥭¨¨
PUSH DE
LD A,(FILE_HANDLE)
LD C,Dss.Close
RST ToDSS
POP DE ; ¤«¨­  áç¨â ­­ëå ¤ ­­ëå
RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok
FILE_HANDLE: DB 0
;********************************************
RESTORE_PORT_HOLD:
;!FIXIT ᤥ« âì ç¥à¥§ API BIOS
LD D,CMOS_CELL.ScreenPosition
LD C,BIOS.CMOS_RD
RST ToBIOS
RET C
LD B,A
LD A,ACEX.HOLD
LD C,BIOS.SET_PORTS
JP ToBIOS
; ; ;
;********************************************
EXIT_TO_DSS: DI
LD SP,stack_point
LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.OFF),A
LD A,(#FFF0) ;!HARDCODE
OUT (SLOT0),A
CALL RESTORE_PORT_HOLD
XOR A
LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL
RST ToBIOS
;!TEST; [ ] 05/11/2023 ®ç¨é âì à ¬¤¨áª¨ ¯à¨ ¢ë室¥
LD A,(RMD_Keep_+2)
AND A
JR NZ,.next
; ®ç¨á⪠ à ¬¤¨áª®¢
LD BC,SYS_PAGE.RAMD_KEYS.NUM*256 + BIOS.FreeMemRMD
.loop: PUSH BC
LD A,B
DEC A
RST ToBIOS
POP BC
DJNZ .loop
;
.next: ;!TEST; [ ] 04/11/2023 Žâ¤¥«ì­ë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS. BLK_TO_RAMD
LD BC,BIOS.SWAP_RAM_DRIVES.Sp2000
RST ToBIOS
;
; 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
RST ToBIOS
; § ¯ã᪠á ä ©«®¬ ¤«ï à ¬¤¨áª ?
LD A,(Load_IMAGE_File.MEM_BLK)
OR A
JR Z,.skip
; ¯à®¢¥à塞 ¤à ©¢ ¯¥à¥¤ ¯¥à¥­ §­ ç¥­¨¥¬
XOR A
LD C,BIOS.GET_RAMD_ST
RST ToBIOS
JR C,.set_block
; ®á¢®¡®¤¨âì à ¬¤¨áª
XOR A
LD C,BIOS.RAMD_CLEAR
RST ToBIOS
; set disk e:
.set_block: LD A,(Load_IMAGE_File.MEM_BLK)
LD B,A
XOR A
LD C,BIOS.BLK_TO_RAMD
RST ToBIOS
.skip: ;
;********************************************
;!FIXIT ¯¥à¥¤¥« âì ­  äã­ªæ¨î ¡¨®á 
SET_RELOAD_PROG:
DI
LD A,Spec_Page
OUT (SLOT3),A
LD A,"Z"
LD (#FFFE),A
LD A,"X"
LD (#FFFF),A
LD A,(Ret_fn_+2)
AND A
LD DE,RESET_TO_ZX ;  ¤à¥á ¯à®£à ¬¬ë ¯¥à¥§ ¯ã᪠ ¤«ï ret-zx
JR Z,NO_RET_FN
LD DE,EXIT_TO_DSS ;  ¤à¥á ¯à®£à ¬¬ë ¯¥à¥§ ¯ã᪠ ¤«ï ret-fn
;
NO_RET_FN: LD (#FFF4),DE ;  ¤à¥á ¯à®£à ¬¬ë ¢®§¢à â 
IN A,(SLOT0)
LD (#FFF0),A ; DOS-PAGE
IN A,(SLOT1)
LD (#FFF1),A
IN A,(SLOT2) ; á®åà ­¨âì áâà ­¨æã
LD (#FFF2),A ; ¯à®£à ¬¬ë ¤«ï ¢®§¢à â 
IN A,(SLOT3)
LD (#FFF3),A ;
;********************************************
RESET_TO_ZX: DI
LD SP,stack_point ; #BFF0
LD A,high ZXKeys.Line_7
IN A,(ZXKeys)
AND #1F
CP #1E
JP Z,EXIT_TO_DSS
; ä¨ªá ­¥¯®«­®© ¤¥è¨äà æ¨¨ ¯®àâ  #FFFD (¯¨èãâ ¢ #C0FD)
LD A,#FF
LD HL,%00'010'1'1110'1101
LD DE,%10'111'1'1111'1111 ; CNF_0, CNF_1
LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG
RST ToBIOS
;
CALL RESTORE_PORT_HOLD
;
;[x] 04/11/2023 Žâ¤¥«ì­ë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS. BLK_TO_RAMD
LD BC,BIOS.SWAP_RAM_DRIVES.ZX
RST ToBIOS
;
LD A,(Ret_zx_+2)
LD B,A
LD A,(Ret_fn_+2)
XOR B
LD B,A
LD A,ACEX.RET_PORT
CALL SET_ROM ; ¢ª«îç¨âì ¢®§¢à â
LD A,CNF_PORT.CNF_3
OUT (SYS_PORT.ON),A ; System-page on & CNF = 3
XOR A
OUT (BorderColor),A ; border-0
OUT (RGADR),A ; Screen-page = 0
OUT (RGMOD),A ; Screen-mode-page = 0
LD BC,#1FFD
OUT (C),A ; Scorpion-port = 0
LD BC,#7FFD
OUT (C),A ; pentagon-port = 0
LD A,(Int_or_+2)
AND A
LD A,#FA ; original waits on
JR NZ,.ORIG1
LD A,#FE
.ORIG1: LD BC,Port_All_Mode
OUT (C),A ; ACC-Off
LD BC,CBL.SYS_PORT
XOR A
OUT (C),A ; CBL-off
LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720
LD C,BIOS.FN_TURBO
RST ToBIOS_18
;---------------[test!!!!!]-------------
;[ ] 1/02/2024 ०¨¬ ᯥªâà㬠 à ¡®â ¥â á «î¡ë¬¨ ª ­ « ¬¨ ¨ ®á­®¢­ë¬¨ à §¤¥« ¬¨
; XOR A ; --> IDE-1
.hdd+1: LD A,#FF
LD C,BIOS.HDD_PART ; IDE-1/IDE-2
RST ToBIOS_18
;---------------------------------------
;******************************
LD A,(LD_Pal_+2)
INC A
JR NZ,SetDefaultPalette
;
LD HL,PlaceForPalette + 0
LD A,4
CALL SET_PAL
;
LD HL,PlaceForPalette + 1024
LD A,5
CALL SET_PAL
;
LD HL,PlaceForPalette + 2048
LD A,6
CALL SET_PAL
;
LD HL,PlaceForPalette + 3072
LD A,7
CALL SET_PAL
JR SetDefaultPalette.skip
SetDefaultPalette:
XOR A
LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette
RST ToBIOS_18
.skip:
LD A,(Int_or_+2)
AND A ; 3
JR NZ,Original
LD A,(Int_sc_+2) ; 1/2
Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion
RST ToBIOS_18
LD HL,#4000 ; clear ZX-Spectrum screen
LD DE,#4001
LD BC,#1AFF
LD (HL),L
LDIR
LD HL,#4104 ; Screen-1
LD E,0
LD BC,4*256+BIOS.LP_OPEN_S
RST ToBIOS_18
LD HL,#5104 ; Screen-2
LD E,0
LD BC,4*256+BIOS.LP_OPEN_S
RST ToBIOS_18
XOR A
OUT (RGADR),A
OUT (RGMOD),A
;************************************************
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ
;!FIXIT ç¥à¥§ äã­ªæ¨î ¡¨®á ¯®¯à®¡®¢ âì
DI
LD A,5
OUT (SLOT1),A
XOR A
OUT (SLOT0),A
LD BC,#1FFD
OUT (C),A ; #1FFD
LD B,#7F
LD A,8
LOOP_P1: DEC A
OUT (C),A ; #7FFD
OUT (SLOT3),A
JR NZ,LOOP_P1
LD B,#1F
LD A,#10
OUT (C),A ; #1FFD
LD B,#7F
LD A,8
LOOP_P2: OUT (C),A ; #7FFD
OUT (SLOT3),A
INC A
CP 16
JR NZ,LOOP_P2
XOR A
OUT (C),A ; #7FFD
LD B,#1F
OUT (C),A ; #1FFD
; ‚ᥠRAM, ªà®¬¥ BANK2 - ¢ ­¥© ¯à®£à ¬¬ !
;***********************************************
LD HL,PROG_STARTS
LD DE,PROG_STARTS.Launch ;!HARDCODE
LD BC,0*256 + PROG_STARTS.Length
LDIR
LD A,(Line312_+2)
OUT (Port_VSYNC),A
LD A,(P_7FFD_+2) ; - Pentagon off
LD BC,#7FFD
OUT (C),A
LD A,(Turbo__+2) ; 3 - turbo
LD HL,(Sprint_+2) ; +04h - Sprinter-ZX
ADD A,L ; +0Ch - Scorpion/Pentagon
LD HL,(P_1FFD_+2) ; +40h - Scorpion port off
ADD A,L
LD HL,(Mem512_+2) ; +80h - Pentagon-512 on
ADD A,L
LD E,A
LD A,(To_trd_+2)
LD D,A
;!TEST
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,E
LD (SYS_PAGE.CONFIG_DE),A
XOR A
LD (SYS_PAGE.CONFIG_DE+1),A
LD A,C
OUT (SLOT3),A
;
JP PROG_STARTS.Launch
;***************************************
PROG_STARTS:
.Launch: EQU #FF00
DISP .Launch
LD A,2
OUT (SLOT2),A
LD A,E
OUT (SYS_PORT.OFF),A
LD A,D
AND A
JP Z,0
LD A,#10
LD BC,#7FFD
OUT (C),A
LD HL,0
PUSH HL
JP #3D29 ; RESET to TR-DOS
ENT
;
.Length EQU $-PROG_STARTS
ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!'
;
SET_PAL: LD DE,0
LD BC,#FF*256 + BIOS.PIC_SET_PAL
JP ToBIOS_18
;
;----------------------------------------------------------------------;
MAKE_FULL_NAME: LD HL,(CNF_NAME)
LD (.mode),HL
LD DE,ONE_FILE
LD C,Dss.GSwitch
RST ToDSS
;
LD HL,ONE_FILE
LD BC,Dss.EX_Path.GET_ALL
RST ToDSS
;
OR 2
CP 3 ; only "FileName.ext"?
LD HL,(CNF_NAME)
JR Z,.get_app_path
RET
;
.def_cnf: LD HL,CNF_FILE
LD (.mode),HL
;
.get_app_path: LD HL,ONE_FILE
LD BC,Dss.AppInfo.EXE_HomeDir
RST ToDSS
;
LD HL,ONE_FILE
LD BC,12 ;!HARDCODE filename length
XOR A
CPIR
DEC HL
EX DE,HL
;
.mode+1: LD HL,0
LD BC,12 ;!HARDCODE filename length
LDIR
XOR A
LD (DE),A
LD HL,ONE_FILE
RET
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
;!FIXIT ¢à¥¬¥­­ ï § ¯« âª 
CHECK_ZX_FLAG:
LD BC,SLOT3
IN B,(C)
LD A,Spec_Page
OUT (C),A
LD HL,(Spec_Page.flag_Z)
LD DE,'Z'+'X'*256
AND A
SBC HL,DE
JR Z,.exit
; LD A,(Spec_Page.flag_Z)
; CP 'Z'
; JR NZ,.no_zx
; LD A,(Spec_Page.flag_X)
; CP 'X'
; JP Z,.exit
;
.no_zx: LD A,1
LD (NO_ZX_FLAG),A
.exit: OUT (C),B
RET
NO_ZX_FLAG DB 0
;----------------------------------------------------------------------;
;
; …᫨ ¯ à ¬¥âà § ¤ ­, â® ¢ë¡¨à ¥âáï §­ ç¥­¨¥ Y
PARAMS:; Y / N ; âãâ §­ ç¥­¨ï ¤«ï ª«î祩 § ¯¨á뢠îâáï ª ª 16 ¡¨â §­ ç¥­¨¥, §­ ç¨â ®¡à â­ë© ¯®à冷ª ¡ ©â®¢
Turbo__: DW Turbo_, #0302 ; ¢ª«îç¨âì TURBO
Line312_ DW Lines312, #6141 ; ¢ª«îç¨âì 312 áâப
Sprint_: DW Sprint, #040C ; ¢ª«îç¨âì Sprinter
P_7FFD_: DW P_7FFD, #0030 ; ¢ª«îç¨âì 7FFD
P_1FFD_: DW P_1FFD, #0040 ; ¢ª«îç¨âì 1FFD
Mem512_: DW Mem512, #8000 ; ¢ª«îç¨âì 512k
To_trd_: DW To_trd, #0100 ; ¢o©â¨ ¢ TR-DOS
Int_sc_: DW Int_sc, #0102 ; ¢ª«îç¨âì INT "¯®-᪮௨®­®¢áª¨"
No_run_: DW no_run, #00FF ; ­¥ § ¯ã᪠âì
Int_or_: DW Int_or, #0300 ; ¢ª«îç¨âì INT "Original"
Ret_zx_: DW Ret_zx, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ ZX áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_fn_
Ret_fn_: DW Ret_fn, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ FN áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_zx_
LD_Pal_: DW LD_Pal, #FF00
RMD_Keep_: DW RMD_Keep, #FF00 ; [x] 05/11/2023 ®ç¨é âì à ¬¤¨áª¨ ¯à¨ ¢ë室¥
DW 0,0 ; end marker
Turbo_: DB "turbo", 255,0
Lines312: DB "lines312", 255,0
Sprint: DB "sprinter", 255,0
P_7FFD: DB "7FFD", 255,0
P_1FFD: DB "1FFD", 255,0
Mem512: DB "mem512", 255,0
Int_sc: DB "int-sc", 255,0
To_trd: DB "to-trdos", 255,0
no_run: DB "no-run", 255,0
Int_or: DB "origin", 255,0
Ret_zx: DB "ret-zx", 255,0
Ret_fn: DB "ret-fn", 255,0
LD_Pal: DB "load-pal", 255,0
RMD_Keep: DB "RMD-Keep", 255,0 ;!TEST; [ ] 05/11/2023 ®ç¨é âì à ¬¤¨áª¨ ¯à¨ ¢ë室¥
;ZX_PROG_LEN EQU $-RELOAD_PROG
;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn
CNF_FILE: DB "SPECTRUM.CFG",0
.Size EQU $-CNF_FILE
;
;
;[]-----------------------------[PLUGINS]-----------------------------[]
INCLUDE 'trdscl.a80'
;
;----------------------------------------------[End Loader section]
;
;!TODO
;USER_CURRENT_DRV DB 'Z:'
;USER_CURRENT_DIR EQU $
;SPECTRUM_HOME_DIR EQU USER_CURRENT_DIR + 256
;
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
;[]-------------------------------------------------------------------[]
; Code end section
;