mirror of
https://github.com/Tolik-Trek/Spectrum.EXE.git
synced 2026-06-15 00:51:36 +03:00
1471 lines
31 KiB
NASM
1471 lines
31 KiB
NASM
|
||
;
|
||
; .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------.
|
||
; | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
|
||
; | | _______ | || | ______ | || | _________ | || | ______ | || | _________ | || | _______ | || | _____ _____ | || | ____ ____ | |
|
||
; | | / ___ | | || | |_ __ \ | || | |_ ___ | | || | .' ___ | | || | | _ _ | | || | |_ __ \ | || ||_ _||_ _|| || ||_ \ / _|| |
|
||
; | | | (__ \_| | || | | |__) | | || | | |_ \_| | || | / .' \_| | || | |_/ | | \_| | || | | |__) | | || | | | | | | || | | \/ | | |
|
||
; | | '.___`-. | || | | ___/ | || | | _| _ | || | | | | || | | | | || | | __ / | || | | ' ' | | || | | |\ /| | | |
|
||
; | | |`\____) | | || | _| |_ | || | _| |___/ | | || | \ `.___.'\ | || | _| |_ | || | _| | \ \_ | || | \ `--' / | || | _| |_\/_| |_ | |
|
||
; | | |_______.' | || | |_____| | || | |_________| | || | `._____.' | || | |_____| | || | |____| |___| | || | `.__.' | || ||_____||_____|| |
|
||
; | | | || | | || | | || | | || | | || | | || | | || | | |
|
||
; | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
|
||
; '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------'
|
||
;
|
||
|
||
/*
|
||
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,high ZXKeys.Line_7
|
||
IN A,(ZXKeys)
|
||
AND #1F
|
||
CP #1E
|
||
JP Z,RESET_TO_ZX.cont
|
||
|
||
.cont: LD A,(#FFF0) ;!HARDCODE
|
||
OUT (SLOT0),A
|
||
|
||
CALL RESTORE_PORT_HOLD
|
||
|
||
LD A,CNF_PORT.CNF_0
|
||
OUT (SYS_PORT.OFF),A
|
||
|
||
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
|
||
OR A
|
||
JR Z,.set_block
|
||
; ®á¢®¡®¤¨âì à ¬¤¨áª
|
||
XOR A
|
||
LD C,BIOS.FreeMemRMD
|
||
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.cont
|
||
|
||
; ä¨ªá ¥¯®«®© ¤¥è¨äà æ¨¨ ¯®àâ #FFFD (¯¨èãâ ¢ #C0FD)
|
||
.cont: 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
|
||
; |