New vROM support, added set CONFIG_DE, refactoring

This commit is contained in:
Anatoliy Belyanskiy 2023-06-24 23:35:41 +10:00
parent 4e38b3e1ec
commit 29b442dbe6
2 changed files with 1032 additions and 1094 deletions

View File

@ -1,29 +1,34 @@
/*
.----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. ;
| .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. | ; .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------.
| | _______ | || | ______ | || | _________ | || | ______ | || | _________ | || | _______ | || | _____ _____ | || | ____ ____ | | ; | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
| | / ___ | | || | |_ __ \ | || | |_ ___ | | || | .' ___ | | || | | _ _ | | || | |_ __ \ | || ||_ _||_ _|| || ||_ \ / _|| | ; | | _______ | || | ______ | || | _________ | || | ______ | || | _________ | || | _______ | || | _____ _____ | || | ____ ____ | |
| | | (__ \_| | || | | |__) | | || | | |_ \_| | || | / .' \_| | || | |_/ | | \_| | || | | |__) | | || | | | | | | || | | \/ | | | ; | | / ___ | | || | |_ __ \ | || | |_ ___ | | || | .' ___ | | || | | _ _ | | || | |_ __ \ | || ||_ _||_ _|| || ||_ \ / _|| |
| | '.___`-. | || | | ___/ | || | | _| _ | || | | | | || | | | | || | | __ / | || | | ' ' | | || | | |\ /| | | | ; | | | (__ \_| | || | | |__) | | || | | |_ \_| | || | / .' \_| | || | |_/ | | \_| | || | | |__) | | || | | | | | | || | | \/ | | |
| | |`\____) | | || | _| |_ | || | _| |___/ | | || | \ `.___.'\ | || | _| |_ | || | _| | \ \_ | || | \ `--' / | || | _| |_\/_| |_ | | ; | | '.___`-. | || | | ___/ | || | | _| _ | || | | | | || | | | | || | | __ / | || | | ' ' | | || | | |\ /| | | |
| | |_______.' | || | |_____| | || | |_________| | || | `._____.' | || | |_____| | || | |____| |___| | || | `.__.' | || ||_____||_____|| | ; | | |`\____) | | || | _| |_ | || | _| |___/ | | || | \ `.___.'\ | || | _| |_ | || | _| | \ \_ | || | \ `--' / | || | _| |_\/_| |_ | |
| | | || | | || | | || | | || | | || | | || | | || | | | ; | | |_______.' | || | |_____| | || | |_________| | || | `._____.' | || | |_____| | || | |____| |___| | || | `.__.' | || ||_____||_____|| |
| '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' | ; | | | || | | || | | || | | || | | || | | || | | || | | |
'----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' ; | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
; '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------'
;
*/
/* /*
To do: SYS
SYS: [+] - § ¤ ¢ âì CONFIG_DE ¯¥à¥¤ § ¯ã᪮¬ ᯥªâà㬠 ¨ ¢ ¯¥à¥å¢ â稪¥ à¥á¥â 
[ ] - § ¤ ¢ âì CONFIG_DE ¯¥à¥¤ § ¯ã᪮¬ ᯥªâà㬠 ¨ ¢ ¯¥à¥å¢ â稪¥ à¥á¥â  [+] - ¯®¤¤¥à¦ª  ­®¢ëå ®¡à §®¢ vROM
images: [+] - ¤®¡ ¢«¥­  ᮢ¬¥á⨬®áâì á ¤¥¬® ATARIN, ãᯮ«ì§ãî饥 ­¥¯®«­ãî ¤¥è¨äà æ¨î ¯®àâ  AY
[ ] - ¯à®¢¥àïâì ¬¥âªã ZX,¥á«¨ ¬ë ­¥ £à㧨¬ 3 ®á­®¢­ëå vROM
[ ] - ¢ ª®­ä¨£¥ ¬®£ãâ ¡ëâì ¯à®¯ãé¥­ë ­¥ª®â®àë¥ vROM,®­¨ ­¥ § £à㦠îâáï
;
Images
[+] - Load SCL image [+] - Load SCL image
[ ] - Load TAP image [ ] - Load TAP image
[ ] - Load SNA file [ ] - Load SNA file
; ;
features: Features
[ ] - When image filename exist, then instead of SPECTRUM.CFG loads image_filename.cfg if exist too [+] - ᫨ ¢ë¡à ­® ret-zx,â® ¯à¨ ­ ¦ â¨¨ ­  ¯à®¡¥« áà §ã ¯®á«¥ CAD ¢¥à­ñâ ¢ DSS
[ ] - When image filename exist,then instead of SPECTRUM.CFG loads image_filename.cfg if exist too
[ ] - 뤠¢ âì á®®¡é¥­¨ï ­  ï§ëª¥ ãáâ ­®¢«¥­­®¬ ¢ CMOS [ ] - 뤠¢ âì á®®¡é¥­¨ï ­  ï§ëª¥ ãáâ ­®¢«¥­­®¬ ¢ CMOS
[ ] - Œ¥­ïâì ᯥªâà㬮¢áªãî ¯ «¨âàã [ ] - Œ¥­ïâì ᯥªâà㬮¢áªãî ¯ «¨âàã
*/ */
@ -39,9 +44,9 @@ To do:
; ;
; Defines section ; Defines section
;*************************************** ;***************************************
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 NEED_LOADER 1 ; define NEED_LOADER 1
; define NeedSafePort_Y 0 ; define NeedSafePort_Y 0
;*************************************** ;***************************************
@ -50,23 +55,23 @@ To do:
; ;
; Included constants section ; Included constants section
;*************************************** ;***************************************
include 'Shared_Includes/constants/sp2000.inc' INCLUDE 'Shared_Includes/constants/sp2000.inc'
include 'Shared_Includes/constants/dss_equ.inc' INCLUDE 'Shared_Includes/constants/dss_equ.inc'
include 'Shared_Includes/constants/BIOS_equ.inc' INCLUDE 'Shared_Includes/constants/BIOS_equ.inc'
;*************************************** ;***************************************
; ;
; ;
; Included macroses section ; Included macroses section
;*************************************** ;***************************************
include 'Shared_Includes/macroses/macros.z80' INCLUDE 'Shared_Includes/macroses/macros.z80'
include 'Shared_Includes/macroses/accelerator.z80' INCLUDE 'Shared_Includes/macroses/accelerator.z80'
;*************************************** ;***************************************
; ;
; Included LUA section ; Included LUA section
;*************************************** ;***************************************
includelua <Shared_Includes/LUA/Functions.LUA> INCLUDELUA <Shared_Includes/LUA/Functions.LUA>
;*************************************** ;***************************************
; ;
@ -111,10 +116,10 @@ OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2
; Code start section ; Code start section
;[]-------------------------------------------------------------------[] ;[]-------------------------------------------------------------------[]
IF EXE_HEADER IF EXE_HEADER
include 'Shared_Includes/constants/EXE_Header.z80' INCLUDE 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr ORG org_addr
ELSE ELSE
ORG org_addr - CLP_Buffer ORG org_addr-CLP_Buffer
ENDIF ENDIF
BEGIN: BEGIN:
@ -141,38 +146,36 @@ ERROR_FILE:
END_CNF_ERROR: END_CNF_ERROR:
LD HL,ERROR_CNF LD HL,ERROR_CNF
; JP EXIT_ALL ;JP EXIT_ALL
EXIT_ALL: EXIT_ALL:
; PUSH HL ; PUSH HL
;---------------------[test!!!!!]------- ;---------------------[test!!!!!]-------
; LD A,0 ;LD A,0
; LD C,BIOS.EMM_FN3 ;LD C,BIOS.EMM_FN3
; RST ToBIOS ; ®á¢®¡®¤¨âì e: ;RST ToBIOS ; ®á¢®¡®¤¨âì e:
; LD A,(SAVE_SLOT3) ;LD A,(SAVE_SLOT3)
; OUT (SLOT3),A ;OUT (SLOT3),A
;--------------------------------------- ;---------------------------------------
; POP HL ;POP HL
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
;---------------------[test!!!!!]------- ;---------------------[test!!!!!]-------
; ld a,(CurDisk_Save) ;ld a,(CurDisk_Save)
; ld c,Dss.ChDisk ;ld c,Dss.ChDisk
; RST ToDSS ;RST ToDSS
; jr nc,1f ;jr nc,1f
; ld hl,ERROR_FILE2_MSG ;ld hl,ERROR_FILE2_MSG
; LD C,Dss.PChars ;LD C,Dss.PChars
; RST ToDSS ;RST ToDSS
;--------------------------------------- ;---------------------------------------
1: LD BC,Dss.Exit 1: LD BC,Dss.Exit
RST ToDSS RST ToDSS
COMAND_LINE: LD HL,(LINE_X)
COMAND_LINE:
LD HL,(LINE_X)
LD A,(HL) LD A,(HL)
AND A AND A
JR Z,NO_FIL JR Z,NO_FIL
@ -195,8 +198,7 @@ NO_FIL: LD HL,CNF_FILE
JR C,ERROR_FILE JR C,ERROR_FILE
JP CONTINUE JP CONTINUE
FIND_FILES: FIND_FILES: PUSH HL
PUSH HL
LD (X_FILE),HL LD (X_FILE),HL
LD DE,0 LD DE,0
@ -206,8 +208,7 @@ FIND_FILES:
LD B,A LD B,A
JR NO_NEXT JR NO_NEXT
FIND_T_LOOP: FIND_T_LOOP: LD A,(HL)
LD A,(HL)
INC HL INC HL
CP "." CP "."
CALL Z,POINT_F CALL Z,POINT_F
@ -220,12 +221,9 @@ FIND_T_LOOP:
CP 13 CP 13
CALL Z,BLANK_X1 CALL Z,BLANK_X1
JR Z,END_NO_IMAGE JR Z,END_NO_IMAGE
NO_NEXT: DJNZ FIND_T_LOOP
NO_NEXT: END_NO_IMAGE: POP HL
DJNZ FIND_T_LOOP
END_NO_IMAGE:
POP HL
LD A,(CNF_NAME+1) LD A,(CNF_NAME+1)
AND A AND A
RET NZ RET NZ
@ -234,22 +232,17 @@ END_NO_IMAGE:
LD DE,(X_FILE) LD DE,(X_FILE)
JR Z,CNF_ALL JR Z,CNF_ALL
LD DE,CNF_FILE LD DE,CNF_FILE
CNF_ALL: CNF_ALL: LD (CNF_NAME),DE
LD (CNF_NAME),DE
RET RET
BLANK_X: BLANK_X: LD (X_FILE),HL ; ­ ©¤¥­ ¯à®¡¥«, ¨¬ï ä ©«  - á­®¢ 
LD (X_FILE),HL ; ­ ©¤¥­ ¯à®¡¥«, ¨¬ï ä ©«  - á­®¢  BLANK_X1: DEC HL
BLANK_X1:
DEC HL
LD (HL),0 LD (HL),0
INC HL INC HL
RET RET
;------------------------------------[v] ;------------------------------------[v]
POINT_F: POINT_F: LD A,(HL)
LD A,(HL)
CP 't' CP 't'
JR Z,.TRD JR Z,.TRD
CP 'T' CP 'T'
@ -264,88 +257,60 @@ POINT_F:
JR Z,.CNF JR Z,.CNF
CP 'Z' CP 'Z'
JR Z,.CNF JR Z,.CNF
.exit: .exit: DEC HL
DEC HL
LD A,(HL) LD A,(HL)
INC HL INC HL
RET RET
.SCL: .SCL: LD DE,IMAGE_FLAG
ld de,IMAGE_FLAG LD A,1
ld a,1 LD (DE),A
ld (de),a .TRD: LD DE,(X_FILE)
.TRD:
LD DE,(X_FILE)
LD (IMAGE_NAME),DE LD (IMAGE_NAME),DE
JR .exit JR .exit
.CNF: .CNF: LD DE,(X_FILE)
LD DE,(X_FILE)
LD (CNF_NAME),DE LD (CNF_NAME),DE
JR .exit JR .exit
;------------------------------------[^] ;------------------------------------[^]
LINE_ZX: DB "ZX Spectrum PAGES",0 LINE_ZX: DZ 'ZX Spectrum PAGES'
LEN_LINE_ZX EQU $-LINE_ZX LEN_LINE_ZX EQU $-LINE_ZX
;********************************************* ;*********************************************
MSG_EXIT1: MSG_EXIT1: DB 13,10,"EXIT without run",13,10,0
db 13,10,"EXIT without run",13,10,0 MSG_EXIT2: DB 13,10,"‚ë室 ¡¥§ § ¯ã᪠"
MSG_EXIT2: CR_LINE: DB 13,10,0
db 13,10,"‚ë室 ¡¥§ § ¯ã᪠" START_MSG: DB 13,10,'SPECTRUM launcher v',SP_VERSION,'.'
CR_LINE: DB 13,10,'(c) Sprinter Team.'
db 13,10,0 DB 13,10,'Written by Ivan Mak.'
DB 13,10,'Modified by Anatoliy Belyanskiy.'
START_MSG: DB 13,10,BUILD_DATE,' - ',__TIME__,13,10,0
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: 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: ERROR_FILE_MSG: DB 13,10,"Unable to work.",0
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: ERROR_CNF2: DB 13,10,"<22>¥®¦¨¤ ­­ë© ª®­¥æ CNF ä ©« .",0
db 13,10,"Unexpected CNF file end.",0 NO_MEM_MSG: DB 13,10,"The spesial pages are already used."
ERROR_CNF2: DB 13,10,"Clear memory and restart spectrum.exe again.",0
db 13,10,"<22>¥®¦¨¤ ­­ë© ª®­¥æ CNF ä ©« .",0 NO_MEM_MSG2: DB 13,10,"‘¯¥æ¨ «ì­ë¥ áâà ­¨æë 㦥 § ­ïâë."
DB 13,10,"Žç¨áâ¨â¥ ¯ ¬ïâì ¨ ¯¥à¥§ ¯ãáâ¨â¥ spectrum.exe á­®¢ .",0
NO_MEM_MSG: MSG_NORMAL: DB 13,10,"All files has been read successfully.",13,10
db 13,10,"The spesial pages are already used." DB "MODE: ",0
db 13,10,"Clear memory and restart spectrum.exe again.",0 MSG_NORMAL2: DB 13,10,"‚ᥠ䠩«ë áç¨â ­ë ­®à¬ «ì­®.",13,10
NO_MEM_MSG2: DB "Š®­ä¨£ãà æ¨ï: ",0
db 13,10,"‘¯¥æ¨ «ì­ë¥ áâà ­¨æë 㦥 § ­ïâë." MSG_NO_MEM: DB 13,10,"No memory space for image or",0
db 13,10,"Žç¨áâ¨â¥ ¯ ¬ïâì ¨ ¯¥à¥§ ¯ãáâ¨â¥ spectrum.exe á­®¢ .",0 MSG_NO_MEM2: DB 13,10,"<22>¥ 墠⠥⠯ ¬ï⨠¤«ï ®¡à §  ¨«¨",0
MSG_LOAD_IMAGE: DB 13,10,"Image loading: ",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: 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: MSG_ZX_EXIT2: DB 13,10,"EXIT from ZX mode",0
db 13,10,"EXIT from Spectrum configuration",0 PROGRES_IND: DB '°',0 ; 176
MSG_ZX_EXIT2:
db 13,10,"EXIT from ZX mode",0
PROGRES_IND:
db '°',0 ; 176
MEM_BLK: BYTE 0 MEM_BLK: BYTE 0
LINE_X: WORD 0 LINE_X: WORD 0
@ -356,11 +321,10 @@ IMAGE_NAME: WORD 0
IMAGE_HANDLER: BYTE 0 IMAGE_HANDLER: BYTE 0
SAVE_SLOT3: BYTE 0 SAVE_SLOT3: BYTE 0
LEN_CNF: WORD 0 LEN_CNF: WORD 0
A_LINES: BLOCK CFG_FILE_LINES*2, 0 A_LINES: BLOCK CFG_FILE_LINES*2,0
;********************************************* ;*********************************************
CONTINUE: ; CNF ä ©« ¯à®ç¨â ­, DE - ¤«¨­  CNF CONTINUE: LD (LEN_CNF),DE ; CNF ä ©« ¯à®ç¨â ­, DE - ¤«¨­  CNF
LD (LEN_CNF),DE
LD HL,#C000 LD HL,#C000
LD DE,A_LINES LD DE,A_LINES
@ -383,7 +347,6 @@ LOOP_L: LD A,(HL)
CP ';' CP ';'
JR Z,N_LINE JR Z,N_LINE
DJNZ LOOP_L DJNZ LOOP_L
N_LINE: LD (HL),0 N_LINE: LD (HL),0
INC HL INC HL
LD A,(HL) LD A,(HL)
@ -396,8 +359,8 @@ N_LINE: LD (HL),0
; ¢ë¤¥«¥­® 8 áâப ¢ CNF ; ¢ë¤¥«¥­® 8 áâப ¢ CNF
;************************************* ;*************************************
MACRO vROM_LOAD romLine, pageNumber MACRO vROM_LOAD romLine,pageNumber
LD HL,(A_LINES + romLine) LD HL,(A_LINES+romLine)
LD A,(HL) LD A,(HL)
CP ';' CP ';'
JR Z,.skip_load JR Z,.skip_load
@ -415,10 +378,10 @@ N_LINE: LD (HL),0
vROM_LOAD EXP_LINE, #45 ; 5-ï áâப  - ¨¬ï ä ©«  EXPANSION vROM_LOAD EXP_LINE, #45 ; 5-ï áâப  - ¨¬ï ä ©«  EXPANSION
vROM_LOAD BIOS_LINE, #46 ; 6-ï áâப  - ¨¬ï ä ©«  BIOS vROM_LOAD BIOS_LINE, #46 ; 6-ï áâப  - ¨¬ï ä ©«  BIOS
vROM_LOAD BIOS2_LINE, #47 ; 7-ï áâப  - ¨¬ï ä ©«  BIOS2 vROM_LOAD BIOS2_LINE, #47 ; 7-ï áâப  - ¨¬ï ä ©«  BIOS2
; vROM_LOAD _LINE, #42 ; 8-ï áâப  - ¨¬ï ä ©«  ;vROM_LOAD _LINE, #42 ; 8-ï áâப  - ¨¬ï ä ©« 
; vROM_LOAD _LINE, #42 ; 9-ï áâப  - ¨¬ï ä ©«  ;vROM_LOAD _LINE, #42 ; 9-ï áâப  - ¨¬ï ä ©« 
; vROM_LOAD _LINE, #42 ; 10-ï áâப  - ¨¬ï ä ©«  ;vROM_LOAD _LINE, #42 ; 10-ï áâப  - ¨¬ï ä ©« 
; vROM_LOAD _LINE, #42 ; 11-ï áâப  - ¨¬ï ä ©«  ;vROM_LOAD _LINE, #42 ; 11-ï áâப  - ¨¬ï ä ©« 
; ä ©«ë áç¨â ­ë ; ä ©«ë áç¨â ­ë
;************************************* ;*************************************
@ -435,17 +398,15 @@ N_LINE: LD (HL),0
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
; LD A,(SAVE_SLOT3) ;LD A,(SAVE_SLOT3)
; OUT (SLOT3),A ;OUT (SLOT3),A
;************************************* ;*************************************
LD A,Spec_Page LD A,Spec_Page
OUT (SLOT3),A OUT (SLOT3),A
LD HL,(A_LINES+OPTIONS_LINE) ; áâப  ¯ à ¬¥â஢ LD HL,(A_LINES+OPTIONS_LINE) ; áâப  ¯ à ¬¥â஢
LOOP_PAR1: LD A,(HL)
LOOP_PAR1:
LD A,(HL)
CP "/" CP "/"
JR Z,PARAM_TEST JR Z,PARAM_TEST
CP 0 CP 0
@ -457,25 +418,21 @@ LOOP_PAR1:
INC HL INC HL
JR LOOP_PAR1 JR LOOP_PAR1
PARAM_TEST: PARAM_TEST: INC HL
INC HL
PUSH HL PUSH HL
LD IX,PARAMS LD IX,PARAMS
NEXT_PAR: NEXT_PAR: LD E,(IX)
LD E,(IX)
LD D,(IX+1) LD D,(IX+1)
LOOP_PAR2: LOOP_PAR2: LD A,(DE)
LD A,(DE)
CP (HL) CP (HL)
JR NZ,PARAM_E1 JR NZ,PARAM_E1
INC HL INC HL
INC DE INC DE
JR LOOP_PAR2 JR LOOP_PAR2
PARAM_E1: PARAM_E1: CP 255
CP 255
JR NZ,NO_PAR JR NZ,NO_PAR
LD A,(HL) LD A,(HL)
CP 20h CP 20h
@ -484,8 +441,7 @@ PARAM_E1:
JR Z,PARAM_E2 JR Z,PARAM_E2
CP 13 CP 13
JR Z,PARAM_E2 JR Z,PARAM_E2
NO_PAR: NO_PAR: POP HL
POP HL
PUSH HL PUSH HL
INC IX INC IX
INC IX INC IX
@ -497,8 +453,7 @@ NO_PAR:
POP HL POP HL
JR LOOP_PAR1 JR LOOP_PAR1
PARAM_E2: PARAM_E2: EX (SP),HL ; ­®¢®¥ HL - á®åà ­ï¥âáï!
EX (SP),HL ; ­®¢®¥ HL - á®åà ­ï¥âáï!
LD A,(IX+3) LD A,(IX+3)
LD (IX+2),A ; parameter alternate! LD (IX+2),A ; parameter alternate!
@ -514,8 +469,7 @@ PARAM_E2:
;************************************ ;************************************
PARAM_END: PARAM_END: LD A,#E2 ; ROM-ID - BASIC 128
LD A,#E2 ; ROM-ID - BASIC 128
LD B,#42 ; page LD B,#42 ; page
CALL SET_ROM CALL SET_ROM
@ -553,53 +507,49 @@ PARAM_END:
OUT (C),B OUT (C),B
JP C,ERROR_FILE JP C,ERROR_FILE
SKIP_IMAGE: SKIP_IMAGE: LD A,(No_run_+2)
LD A,(No_run_+2)
AND A AND A
LD HL,MSG_EXIT1 LD HL,MSG_EXIT1
JP Z,EXIT_ALL JP Z,EXIT_ALL
JP SET_RELOAD_PROG JP SET_RELOAD_PROG
; LD HL,MSG_NORMAL ;LD HL,MSG_NORMAL
; JP EXIT_ALL ;JP EXIT_ALL
;***************************************************
; JP 0
;********************************************
;JP 0
;******************************************** ;********************************************
; out B - old ROM-page ; out B - old ROM-page
SET_ROM: SET_ROM: DI
DI ;PUSH BC
; PUSH BC ;PUSH AF
; PUSH AF
; LD A,CNF_0 ;LD A,CNF_0
; OUT (SYS_PORT.ON),A ;OUT (SYS_PORT.ON),A
; LD A,10h ;LD A,10h
; LD BC,7FFDh ;LD BC,7FFDh
; OUT (C),A ;OUT (C),A
; POP AF ;POP AF
; POP BC ;POP BC
; LD C,0F8h ;LD C,0F8h
; CALL 3D13h ;CALL 3D13h
; PUSH BC ;PUSH BC
; PUSH AF ;PUSH AF
; LD A,0 ;LD A,0
; LD BC,7FFDh ;LD BC,7FFDh
; OUT (C),A ;OUT (C),A
; LD A,CNF_0 ;LD A,CNF_0
; OUT (SYS_PORT.OFF),A ;OUT (SYS_PORT.OFF),A
;
; POP AF ;POP AF
; POP BC ;POP BC
; RET ;RET
EX AF,AF' EX AF,AF'
@ -638,10 +588,9 @@ SET_ROM:
OUT (SLOT3),A OUT (SLOT3),A
RET RET
;******************************************** ;********************************************
READ_IMAGE:
LD DE,ONE_FILE READ_IMAGE: LD DE,ONE_FILE
LD BC,FULL_FILE_NAME_LENGTH LD BC,FULL_FILE_NAME_LENGTH
LDIR LDIR
LD HL,ONE_FILE LD HL,ONE_FILE
@ -653,16 +602,15 @@ READ_IMAGE:
LD (IMAGE_HANDLER),A LD (IMAGE_HANDLER),A
ld a,(IMAGE_FLAG) LD A,(IMAGE_FLAG)
and a AND A
jr z,.Load_TRD JR Z,.Load_TRD
CP 1 ; check if SCL CP 1 ; check if SCL
jp z,Load_SCL JP Z,Load_SCL
; jp Error_Flag ;!!!!!!!!!!!!!!!! ;jp Error_Flag ;!!!!!!!!!!!!!!!!
.Load_TRD: .Load_TRD: LD A,(IMAGE_HANDLER)
LD A,(IMAGE_HANDLER)
LD B,Dss.Move_FP.FrEnd LD B,Dss.Move_FP.FrEnd
LD HL,0 LD HL,0
LD IX,0 LD IX,0
@ -673,13 +621,12 @@ READ_IMAGE:
PUSH IX PUSH IX
POP DE POP DE
call Get_RAM_Disk_E CALL Get_RAM_Disk_E
ret c RET C
jp Load_IMAGE_File JP Load_IMAGE_File
Get_RAM_Disk_E:
; hl:de - à §¬¥à ä ©«  ¢ ¡ ©â å ; hl:de - à §¬¥à ä ©«  ¢ ¡ ©â å
LD A,D Get_RAM_Disk_E: LD A,D
ADD A,A ADD A,A
ADC HL,HL ADC HL,HL
ADD A,A ADD A,A
@ -690,8 +637,8 @@ Get_RAM_Disk_E:
OR E OR E
JR Z,.skip_inc JR Z,.skip_inc
INC HL INC HL
.skip_inc: ; HL - ¤«¨­  ä ©«  ¢ áâà ­¨æ å ;HL - ¤«¨­  ä ©«  ¢ áâà ­¨æ å
LD A,H .skip_inc: LD A,H
AND A AND A
JR NZ,ERROR_NO_MEM JR NZ,ERROR_NO_MEM
LD A,L LD A,L
@ -701,8 +648,7 @@ Get_RAM_Disk_E:
;*************************************** ;***************************************
;!FIXIT ¡¥§®¯ á­® § ­¨¬ âì à ¬¤¨áª¨, ç⮡ ¯®«ì§®¢ â¥«ì ­¥ áâà ¤ « ;!FIXIT ¡¥§®¯ á­® § ­¨¬ âì à ¬¤¨áª¨, ç⮡ ¯®«ì§®¢ â¥«ì ­¥ áâà ¤ «
; ®á¢®¡®¤¨âì ram-disk e: ; ®á¢®¡®¤¨âì ram-disk e:
.free_disk: .free_disk: DI
DI
XOR A ; RAM-Drive E: XOR A ; RAM-Drive E:
LD C,BIOS.FreeMemRMD LD C,BIOS.FreeMemRMD
RST ToBIOS ; ®á¢®¡®¤¨âì e: RST ToBIOS ; ®á¢®¡®¤¨âì e:
@ -721,7 +667,7 @@ Load_IMAGE_File:
LD A,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
LD HL,0 LD HL,0
LD IX,0 LD IX,0
LD BC,Dss.Move_FP.FrStart * 256 + Dss.Move_FP LD BC,Dss.Move_FP.FrStart*256+Dss.Move_FP
RST ToDSS ; ãáâ ­®¢¨âì 㪠§ â¥«ì ­  0 RST ToDSS ; ãáâ ­®¢¨âì 㪠§ â¥«ì ­  0
RET C RET C
@ -731,8 +677,7 @@ Load_IMAGE_File:
LD A,(MEM_BLK) LD A,(MEM_BLK)
.load_loop: .load_loop: PUSH AF
PUSH AF
OUT (SLOT3),A OUT (SLOT3),A
LD A,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
@ -748,8 +693,7 @@ Load_IMAGE_File:
DI DI
POP AF POP AF
.scl_read_next: .scl_read_next: LD C,BIOS.GetMemPageNext
LD C,BIOS.GetMemPageNext
RST ToBIOS RST ToBIOS
CP #FF CP #FF
@ -764,41 +708,37 @@ Load_IMAGE_File:
RST ToDSS RST ToDSS
RET C RET C
; ret ;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:
RST ToBIOS RST ToBIOS
AND A AND A
RET RET
ERROR_IN_READ: ERROR_IN_READ: POP AF
POP AF
JR ERROR_IMAGE_X JR ERROR_IMAGE_X
ERROR_NO_MEM: ERROR_NO_MEM: LD HL,MSG_NO_MEM
LD HL,MSG_NO_MEM
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
ERROR_IMAGE_X: ERROR_IMAGE_X: LD A,(IMAGE_HANDLER)
LD A,(IMAGE_HANDLER)
LD C,Dss.Close ; § ªàëâì ä ©« LD C,Dss.Close ; § ªàëâì ä ©«
RST ToDSS RST ToDSS
SCF SCF
RET RET
SAV_PG3X: db 0 SAV_PG3X: DB 0
;******************************************** ;********************************************
READ_FILE_1: READ_FILE_1: LD DE,ONE_FILE
LD DE,ONE_FILE
LD BC,FULL_FILE_NAME_LENGTH LD BC,FULL_FILE_NAME_LENGTH
LDIR
LD HL,ONE_FILE LD HL,ONE_FILE
OUT (SLOT3),A OUT (SLOT3),A
READ_FILE: READ_FILE: LD A,Dss.Open.R
LD A,Dss.Open.R
LD C,Dss.Open LD C,Dss.Open
RST ToDSS RST ToDSS
RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©«  RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
@ -821,13 +761,12 @@ READ_FILE:
POP DE ; ¤«¨­  áç¨â ­­ëå ¤ ­­ëå POP DE ; ¤«¨­  áç¨â ­­ëå ¤ ­­ëå
RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok
FILE_HANDLE: db 0 FILE_HANDLE: DB 0
;********************************************
;******************************************** ;********************************************
EXIT_TO_DSS: ;********************************************
DI EXIT_TO_DSS: DI
LD SP,#BFF0 LD SP,#BFF0
LD A,CNF_PORT.CNF_0 LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
@ -836,17 +775,17 @@ EXIT_TO_DSS:
OUT (SLOT0),A OUT (SLOT0),A
XOR A XOR A
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 A,Dss.SetVMod.txt80x32 ; OPEN_TXT
LD BC,0*256 + Dss.SetVMod LD BC,0*256+Dss.SetVMod
RST ToDSS RST ToDSS
LD A,#20 LD A,#20
LD DE,0 LD DE,0
LD HL,#2050 LD HL,#2050
LD BC,7*256 + Dss.Clear LD BC,7*256+Dss.Clear
RST ToDSS RST ToDSS
LD HL,MSG_ZX_EXIT LD HL,MSG_ZX_EXIT
@ -874,7 +813,7 @@ NO_RET_FN:
IN A,(SLOT0) IN A,(SLOT0)
LD (#FFF0),A ; DOS-PAGE LD (#FFF0),A ; DOS-PAGE
IN A,(SLOT1) IN A,(SLOT1)
LD (#FFF1),A ; LD (#FFF1),A
IN A,(SLOT2) ; á®åà ­¨âì áâà ­¨æã IN A,(SLOT2) ; á®åà ­¨âì áâà ­¨æã
LD (#FFF2),A ; ¯à®£à ¬¬ë ¤«ï ¢®§¢à â  LD (#FFF2),A ; ¯à®£à ¬¬ë ¤«ï ¢®§¢à â 
IN A,(SLOT3) IN A,(SLOT3)
@ -882,48 +821,44 @@ NO_RET_FN:
;******************************************** ;********************************************
RESET_TO_ZX: RESET_TO_ZX: DI
DI
LD SP,#BFF0 LD SP,#BFF0
ld a,high ZXKeys.Line_7 LD A,high ZXKeys.Line_7
in a,(ZXKeys) IN A,(ZXKeys)
and #1F AND #1F
cp #1E CP #1E
jr z,EXIT_TO_DSS JR Z,EXIT_TO_DSS
LD A,CNF_PORT.CNF_0 ;LD A,CNF_PORT.CNF_3
OUT (SYS_PORT.ON),A ; System-page on & CNF = 0 ;OUT (SYS_PORT.ON),A ; System-page on & CNF = 0
;-------------[TEST ATARIN]------------- ;-------------[TEST ATARIN]-------------
; #c0fd - +#05ED ; #c0fd - +#05ED
; ä¨ªá ­¥¯®«­®© ¤¥è¨äà æ¨¨ ¯®àâ  #FFFD (¯¨èãâ ¢ #C0FD) ; ä¨ªá ­¥¯®«­®© ¤¥è¨äà æ¨¨ ¯®àâ  #FFFD (¯¨èãâ ¢ #C0FD)
; [x] ¤®¡ ¢«¥­ ¯®àâ #C0FD ¢® ¢á¥ ª àâë ¯®à⮢ ; ¤®¡ ¢«¥­ ¯®àâ #C0FD ¢® ¢á¥ ª àâë ¯®à⮢
LD BC,SLOT3
ld bc,SLOT3 IN B,(C)
in b,(c) LD A,DCP_PAGE
OUT (C),A
ld a,DCP_PAGE
out (c),a
; !HARDCODE ¤ «¥¥ ¢áñ ­ áª®àïª ¨ § å à¤ª®¦¥­® ; !HARDCODE ¤ «¥¥ ¢áñ ­ áª®àïª ¨ § å à¤ª®¦¥­®
; !TODO ¯¥à¥¤¥« âì ¯®¤ ­®¢ãî äã­ªæ¨î ¤¥è¨äà æ¨¨ ; !TODO ¯¥à¥¤¥« âì ¯®¤ ­®¢ãî äã­ªæ¨î ¤¥è¨äà æ¨¨
ld a,#90 ; AY-8910-port (FFFD) LD A,#90 ; AY-8910-port (FFFD)
ld hl,#C000 + #05ED ; CNF 0 LD HL,#C000+#05ED ; CNF 0
ld (hl),a LD (HL),A
ld h,#c0 + #15 ; CNF 1 LD H,#C0+#15 ; CNF 1
ld (hl),a LD (HL),A
ld h,#c0 + #25 ; CNF 2 LD H,#C0+#25 ; CNF 2
ld (hl),a LD (HL),A
ld h,#c0 + #35 ; CNF 3 LD H,#C0+#35 ; CNF 3
ld (hl),a LD (HL),A
out (c),b OUT (C),B
;--------------------------------------- ;---------------------------------------
LD A,(Ret_zx_+2) LD A,(Ret_zx_+2)
LD B,A LD B,A
LD A,(Ret_fn_+2) LD A,(Ret_fn_+2)
@ -969,15 +904,14 @@ ORIG1: LD BC,Port_All_Mode
;****************************** ;******************************
XOR A XOR A
LD BC,2*256 + BIOS.SET_PAL_INIT ; Set ZX-Palette LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette
RST ToBIOS_18 RST ToBIOS_18
LD A,(Int_or_+2) LD A,(Int_or_+2)
AND A ; 3 AND A ; 3
JR NZ,Original JR NZ,Original
LD A,(Int_sc_+2) ; 1/2 LD A,(Int_sc_+2) ; 1/2
Original: Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion
LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion
RST ToBIOS_18 RST ToBIOS_18
LD HL,#4000 ; clear ZX-Spectrum screen LD HL,#4000 ; clear ZX-Spectrum screen
@ -988,12 +922,12 @@ Original:
LD HL,#4104 ; Screen-1 LD HL,#4104 ; Screen-1
LD E,0 LD E,0
LD BC,4*256 + BIOS.LP_OPEN_S LD BC,4*256+BIOS.LP_OPEN_S
RST ToBIOS_18 RST ToBIOS_18
LD HL,#5104 ; Screen-2 LD HL,#5104 ; Screen-2
LD E,0 LD E,0
LD BC,4*256 + BIOS.LP_OPEN_S LD BC,4*256+BIOS.LP_OPEN_S
RST ToBIOS_18 RST ToBIOS_18
XOR A XOR A
@ -1014,8 +948,7 @@ Original:
;!TEST ;!TEST
LD A,8 LD A,8
LOOP_P1: LOOP_P1: DEC A
DEC A
OUT (C),A ; #7FFD OUT (C),A ; #7FFD
OUT (SLOT3),A OUT (SLOT3),A
JR NZ,LOOP_P1 JR NZ,LOOP_P1
@ -1032,8 +965,7 @@ LOOP_P1:
OUT (C),A ; #1FFD OUT (C),A ; #1FFD
LD B,#7F LD B,#7F
LD A,8 LD A,8
LOOP_P2: LOOP_P2: OUT (C),A ; #7FFD
OUT (C),A ; #7FFD
OUT (SLOT3),A OUT (SLOT3),A
INC A INC A
CP 16 CP 16
@ -1049,7 +981,7 @@ LOOP_P2:
LD HL,PROG_STARTS LD HL,PROG_STARTS
LD BC,PROG_STARTS.Length LD BC,PROG_STARTS.Length
LD DE,#FF00 ;!!!!!!!!!! LD DE,#FF00 ;!HARDCODE
LDIR LDIR
LD A,(Line312_+2) LD A,(Line312_+2)
@ -1073,12 +1005,26 @@ LOOP_P2:
LD E,A LD E,A
LD A,(To_trd_+2) LD A,(To_trd_+2)
LD D,A 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 #FF00 ;!!!!!!!!!! JP #FF00 ;!HARDCODE
;*************************************** ;***************************************
PROG_STARTS: PROG_STARTS: LD A,2
LD A,2
OUT (SLOT2),A OUT (SLOT2),A
LD A,E LD A,E
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
@ -1093,44 +1039,44 @@ PROG_STARTS:
JP #3D29 ; RESET to TR-DOS JP #3D29 ; RESET to TR-DOS
.Length EQU $-PROG_STARTS .Length EQU $-PROG_STARTS
ASSERT PROG_STARTS.Length < #100, 'PROG_STARTS too big!!!' ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!'
; ;
; ;
; …᫨ ¯ à ¬¥âà § ¤ ­, â® ¢ë¡¨à ¥âáï §­ ç¥­¨¥ Y ; …᫨ ¯ à ¬¥âà § ¤ ­, â® ¢ë¡¨à ¥âáï §­ ç¥­¨¥ Y
PARAMS:; Y / N ; âãâ §­ ç¥­¨ï ¤«ï ª«î祩 § ¯¨á뢠îâáï ª ª 16 ¡¨â §­ ç¥­¨¥, §­ ç¨â ®¡à â­ë© ¯®à冷ª ¡ ©â®¢ PARAMS:; Y / N ; âãâ §­ ç¥­¨ï ¤«ï ª«î祩 § ¯¨á뢠îâáï ª ª 16 ¡¨â §­ ç¥­¨¥, §­ ç¨â ®¡à â­ë© ¯®à冷ª ¡ ©â®¢
Turbo__: dw Turbo_, #0302 ; ¢ª«îç¨âì TURBO Turbo__: DW Turbo_, #0302 ; ¢ª«îç¨âì TURBO
Line312_ dw Lines312, #6141 ; ¢ª«îç¨âì 312 áâப Line312_ DW Lines312, #6141 ; ¢ª«îç¨âì 312 áâப
Sprint_: dw Sprint, #040C ; ¢ª«îç¨âì Sprinter Sprint_: DW Sprint, #040C ; ¢ª«îç¨âì Sprinter
P_7FFD_: dw P_7FFD, #0030 ; ¢ª«îç¨âì 7FFD P_7FFD_: DW P_7FFD, #0030 ; ¢ª«îç¨âì 7FFD
P_1FFD_: dw P_1FFD, #0040 ; ¢ª«îç¨âì 1FFD P_1FFD_: DW P_1FFD, #0040 ; ¢ª«îç¨âì 1FFD
Mem512_: dw Mem512, #8000 ; ¢ª«îç¨âì 512k Mem512_: DW Mem512, #8000 ; ¢ª«îç¨âì 512k
To_trd_: dw To_trd, #0100 ; ¢o©â¨ ¢ TR-DOS To_trd_: DW To_trd, #0100 ; ¢o©â¨ ¢ TR-DOS
Int_sc_: dw Int_sc, #0102 ; ¢ª«îç¨âì INT "¯®-᪮௨®­®¢áª¨" Int_sc_: DW Int_sc, #0102 ; ¢ª«îç¨âì INT "¯®-᪮௨®­®¢áª¨"
No_run_: dw no_run, #00FF ; ­¥ § ¯ã᪠âì No_run_: DW no_run, #00FF ; ­¥ § ¯ã᪠âì
Int_or_: dw Int_or, #0300 ; ¢ª«îç¨âì INT "Original" Int_or_: DW Int_or, #0300 ; ¢ª«îç¨âì INT "Original"
Ret_zx_: dw Ret_zx, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ ZX áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_fn_ Ret_zx_: DW Ret_zx, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ ZX áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_fn_
Ret_fn_: dw Ret_fn, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ FN áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_zx_ Ret_fn_: DW Ret_fn, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ FN áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_zx_
dw 0,0 ; end marker DW 0,0 ; end marker
Turbo_: db "turbo", 255,0 Turbo_: DB "turbo", 255,0
Lines312: db "lines312", 255,0 Lines312: DB "lines312", 255,0
Sprint: db "sprinter", 255,0 Sprint: DB "sprinter", 255,0
P_7FFD: db "7FFD", 255,0 P_7FFD: DB "7FFD", 255,0
P_1FFD: db "1FFD", 255,0 P_1FFD: DB "1FFD", 255,0
Mem512: db "mem512", 255,0 Mem512: DB "mem512", 255,0
Int_sc: db "int-sc", 255,0 Int_sc: DB "int-sc", 255,0
To_trd: db "to-trdos", 255,0 To_trd: DB "to-trdos", 255,0
no_run: db "no-run", 255,0 no_run: DB "no-run", 255,0
Int_or: db "origin", 255,0 Int_or: DB "origin", 255,0
Ret_zx: db "ret-zx", 255,0 Ret_zx: DB "ret-zx", 255,0
Ret_fn: db "ret-fn", 255,0 Ret_fn: DB "ret-fn", 255,0
;ZX_PROG_LEN EQU $-RELOAD_PROG ;ZX_PROG_LEN EQU $-RELOAD_PROG
;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn ;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn
CNF_FILE: db "SPECTRUM.CFG",0 CNF_FILE: DB "SPECTRUM.CFG",0
ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH, 0 ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0
; ;
; ;
; ;
@ -1143,7 +1089,7 @@ Loader_length EQU 0
ENDIF ENDIF
;----------------------------------------------[End Loader section] ;----------------------------------------------[End Loader section]
; ;
STACK_CHECK_MACRO stack_point, stack_buffer STACK_CHECK_MACRO stack_point,stack_buffer
; Code after Loader ; Code after Loader
;[]-----------------------------[PLUGINS]-----------------------------[] ;[]-----------------------------[PLUGINS]-----------------------------[]

View File

@ -30,27 +30,25 @@ notuse1 WORD 0
notuse2 BLOCK 9,32 notuse2 BLOCK 9,32
notuse3 BYTE 0 notuse3 BYTE 0
DelFilesNum BYTE 0 DelFilesNum BYTE 0
DiskName TEXT 8, {" "} ; beta version DiskName TEXT 8,{" "} ; beta version
ENDS ENDS
/* ; SYS_SECTOR:
SYS_SECTOR: ; DB 0
DB 0 ; BLOCK 224,0
BLOCK 224,0 ; .FirstFreeSec: DB 0
.FirstFreeSec: DB 0 ; .FirstFreeTrk: DB 1
.FirstFreeTrk: DB 1 ; .DiskType DB #16 ; #16 = 80-2, #17 = 40-2, #18 = 80-1, #19 = 40-1
.DiskType DB #16 ; #16 = 80-2, #17 = 40-2, #18 = 80-1, #19 = 40-1 ; .AllFilesNum: DB 0
.AllFilesNum: DB 0 ; .FreeSectors: DW 2544
.FreeSectors: DW 2544 ; DB #10
DB #10 ; DW 0000
DW 0000 ; BLOCK 9,32
BLOCK 9,32 ; DB 0
DB 0 ; .DelFilesNum: DB 0
.DelFilesNum: DB 0 ; .DiskName: BLOCK 8,32
.DiskName: BLOCK 8,32 ; BLOCK 3,0
BLOCK 3,0
; ;
*/
; ÉÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ; ÉÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; ºC¬¥é¥­¨¥ ³„«¨­ ³ H §­ ç¥­¨¥ º ; ºC¬¥é¥­¨¥ ³„«¨­ ³ H §­ ç¥­¨¥ º
@ -64,19 +62,18 @@ SYS_SECTOR:
; º #0E ³ 1 ³ H®¬¥p 1£® c¥ªâ®p  º ; º #0E ³ 1 ³ H®¬¥p 1£® c¥ªâ®p  º
; º #0F ³ 1 ³ H®¬¥p ¤®p®¦ª¨ º ; º #0F ³ 1 ³ H®¬¥p ¤®p®¦ª¨ º
; ÈÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ; ÈÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
/*
CAT_ELEMENT: ; CAT_ELEMENT:
.Name BLOCK 8,32 ; .Name BLOCK 8,32
.Type DB 0 ; .Type DB 0
.Start DW 0000 ; .Start DW 0000
.Length DW 0000 ; .Length DW 0000
.Sectors DB 0 ; .Sectors DB 0
.FirstSector DB 0 ; .FirstSector DB 0
.FirstTrack DB 0 ; .FirstTrack DB 0
*/
STRUCT CAT_Elements STRUCT CAT_Elements
Name block 8 Name BLOCK 8
Type BYTE Type BYTE
Start WORD Start WORD
Length WORD Length WORD
@ -95,215 +92,210 @@ FileBlock CAT_Elements
; Page = 64 sectors = 4 tracks ; Page = 64 sectors = 4 tracks
;-----------[] ;-----------[]
Load_SCL:
;-------[Œ¥âª  ¤¨áª  - ¨¬ï ä ©« ]-------
ld hl,ONE_FILE
ld de,SCL_Buffer
ld bc,#0300+Dss.EX_Path
rst ToDSS
jr c,.skip
ld hl,SCL_Buffer ;-------[Œ¥âª  ¤¨áª  - ¨¬ï ä ©« ]-------
ld a,'.' Load_SCL: LD HL,ONE_FILE
ld bc,0008 LD DE,SCL_Buffer
ld de,SYS_SECTOR.DiskName LD BC,#0300+Dss.EX_Path
RST ToDSS
JR C,.skip
LD HL,SCL_Buffer
LD A,'.'
LD BC,0008
LD DE,SYS_SECTOR.DiskName
.loop: .loop:
cp (hl) CP (HL)
jr z,.skip JR Z,.skip
ldi LDI
jp pe,.loop JP PE,.loop
.skip: .skip:
;-------[¯à®¢¥àª  奤íà  SINCLAIR]------ ;-------[¯à®¢¥àª  奤íà  SINCLAIR]------
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,SCL_Buffer LD HL,SCL_Buffer
ld de,8 LD DE,8 ; ¡ ©â®¢
ld c,Dss.Read LD C,Dss.Read
rst ToDSS RST ToDSS
ret c ; ®¡à ¡®â稪 ®è¨¡ª¨ RET C ; ®¡à ¡®â稪 ®è¨¡ª¨
ld hl,SCL_Buffer LD HL,SCL_Buffer
ld de,SCL_HEADER LD DE,SCL_HEADER
ld b,8 LD B,8
.check_header: .check_header: LD A,(DE)
ld a,(de) CP (HL)
cp (hl) JR NZ,.error_header
jr nz,.error_header INC HL
inc hl INC DE
inc de DJNZ .check_header
djnz .check_header JR .get_size
jr .get_size .error_header: SCF
.error_header: RET
scf
ret
;------[¢ëç¨á«¥­¨¥ à §¬¥à  ¤«ï TRD]----- ;------[¢ëç¨á«¥­¨¥ à §¬¥à  ¤«ï TRD]-----
.get_size: .get_size:
/* ld a,(IMAGE_HANDLER) ; LD A,(IMAGE_HANDLER)
ld hl,0 ; LD HL,0
ld ix,SclOffsets.Files ; LD IX,SclOffsets.Files
ld b,l ; LD B,L
ld c,Dss.Move_FP ; LD C,Dss.Move_FP
rst ToDSS ; 㪠§ â¥«ì ­  ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢) ; RST ToDSS ; 㪠§ â¥«ì ­  ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢)
ret c ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! ; RET C ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
;*/
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,SCL_Buffer LD HL,SCL_Buffer
ld de,#701 LD DE,#701
ld c,Dss.Read LD C,Dss.Read
rst ToDSS ; !FIXIT ᤥ« âì ª®­âà®«ì ®è¨¡ª¨? ; ç¨â ¥¬ ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢) RST ToDSS ; !FIXIT ᤥ« âì ª®­âà®«ì ®è¨¡ª¨? ; ç¨â ¥¬ ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢)
; ;
ld a,(SCL_Buffer) LD A,(SCL_Buffer)
ld l,a LD L,A
xor a XOR A
ld h,a LD H,A
; ;
add hl,hl ;*2 ADD HL,HL ;*2
push hl PUSH HL
add hl,hl ;*4 ADD HL,HL ;*4
ld d,h LD D,H
ld e,l LD E,L
add hl,hl ;*8 ADD HL,HL ;*8
add hl,de ;*12 ADD HL,DE ;*12
pop de POP DE
add hl,de ; ¢ HL §­ ç¥­¨¥ A*14 ADD HL,DE ; ¢ HL §­ ç¥­¨¥ A*14
add hl,bc ADD HL,BC
ld de,SclOffsets.FileBlock LD DE,SclOffsets.FileBlock
add hl,de ; ¢ HL à §¬¥à ®â ­ ç «  SCL ¤® ­ ç «  ¡«®ª  ¤ ­­ëå (header_length) ADD HL,DE ; ¢ HL à §¬¥à ®â ­ ç «  SCL ¤® ­ ç «  ¡«®ª  ¤ ­­ëå (header_length)
push hl PUSH HL
; ;
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,0 LD HL,0
ld ix,4 ; ¨£­®à¨¬ ª®­â஫ì­ãî á㬬ã scl ä ©«  LD IX,4 ; ¨£­®à¨¬ ª®­â஫ì­ãî á㬬ã scl ä ©« 
ld b,2 LD B,2
ld c,Dss.Move_FP LD C,Dss.Move_FP
rst ToDSS ; 㪠§ â¥«ì ­  ª®­¥æ ä ©«  RST ToDSS ; 㪠§ â¥«ì ­  ª®­¥æ ä ©« 
jr nc,1F ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! JR NC,1F ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
pop hl POP HL
ret RET
1: push ix 1: PUSH IX
pop de ; §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©«  POP DE ; §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« 
ex (sp),hl ; §­ ç¥­¨¥ header_length ¢ HL, áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; §­ ç¥­¨¥ header_length ¢ HL, áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ex de,hl ; ¢ HL §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« , ¢ DE - header_length EX DE,HL ; ¢ HL §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« , ¢ DE - header_length
sbc hl,de SBC HL,DE
ld de,0 LD DE,0
ex (sp),hl ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
sbc hl,de ; ¢ HL áâ àè ï ç áâì à §¬¥à  ä ©«  SBC HL,DE ; ¢ HL áâ àè ï ç áâì à §¬¥à  ä ©« 
ex (sp),hl ; áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ld de,#1000 LD DE,#1000
add hl,de ADD HL,DE
ex (sp),hl ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ld de,0 LD DE,0
adc hl,de ADC HL,DE
pop de ; âãâ ¢ hl:de à §¬¥à ¤«ï trd POP DE ; âãâ ¢ hl:de à §¬¥à ¤«ï trd
;--------------------------------------- ;---------------------------------------
CALL Get_RAM_Disk_E
call Get_RAM_Disk_E RET C ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
ret c ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
Convert_SCLtoTRD: Convert_SCLtoTRD:
LD A,(MEM_BLK) LD A,(MEM_BLK)
out (SLOT3),a ; ¢áâ ¢«ï¥¬ ¯¥à¢ãî áâà ­¨æã RAM-¤¨áª  OUT (SLOT3),A ; ¢áâ ¢«ï¥¬ ¯¥à¢ãî áâà ­¨æã RAM-¤¨áª 
ld hl,SCL_Buffer LD HL,SCL_Buffer
ld b,(hl) ; CAT_Elements LD B,(HL) ; CAT_Elements
inc hl INC HL
ld de,#C000 ; RAM-drive's track 0 LD DE,#C000 ; RAM-drive's track 0
ld ix,SYS_SECTOR LD IX,SYS_SECTOR
ld (ix+SEEK.AllFilesNum),b LD (ix+SEEK.AllFilesNum),B
.cat_loop: .cat_loop: PUSH BC
push bc LD A,(HL)
ld a,(hl)
CP 1 CP 1
jr nz,1F ; this file is not deleted JR NZ,1F ; this file is not deleted
inc (ix+SEEK.DelFilesNum) INC (ix+SEEK.DelFilesNum)
1: ld bc,CAT_Elements-2 ; ld bc,#0D 1: LD BC,CAT_Elements-2 ; ld bc,#0D
ldir ; copy 14 bites of scl files table to trd image catalog LDIR ; copy 14 bites of scl files table to trd image catalog
ld a,(SYS_SECTOR.FirstFreeSec) LD A,(SYS_SECTOR.FirstFreeSec)
ld (de),a LD (DE),A
ld c,a ;!---[v 1] LD C,A ;!---[v 1]
inc de INC DE
ld a,(SYS_SECTOR.FirstFreeTrk) LD A,(SYS_SECTOR.FirstFreeTrk)
ld (de),a LD (DE),A
inc de ; Pointer on next filename in RAM drive INC DE ; Pointer on next filename in RAM drive
dec hl ; set to number of sectors DEC HL ; set to number of sectors
ld a,(hl) ; get file length in sectors from scl-table LD A,(HL) ; get file length in sectors from scl-table
and #0F AND #0F
add a,c ;!---[^ 1] ADD A,C ;!---[^ 1]
ld c,a ;!---[v 2] LD C,A ;!---[v 2]
and #0F AND #0F
ld (SYS_SECTOR.FirstFreeSec),a LD (SYS_SECTOR.FirstFreeSec),A
ld a,#F0 LD A,#F0
and c ;!---[^ 2] AND C ;!---[^ 2]
jr z,1F JR Z,1F
inc (ix+SEEK.FirstFreeTrk) INC (ix+SEEK.FirstFreeTrk)
1: ld a,(hl) 1: LD A,(HL)
srl a SRL A
srl a SRL A
srl a SRL A
srl a SRL A
add a,(ix+SEEK.FirstFreeTrk) ADD A,(ix+SEEK.FirstFreeTrk)
ld (SYS_SECTOR.FirstFreeTrk),a LD (SYS_SECTOR.FirstFreeTrk),A
inc hl ; Pointer on next filename in SCL_Buffer INC HL ; Pointer on next filename in SCL_Buffer
pop bc POP BC
djnz .cat_loop DJNZ .cat_loop
xor a XOR A
ld (de),a ; file table end marker LD (DE),A ; file table end marker
;--------------------------------------- ;---------------------------------------
; „®¤¥« âì!!!!! ;!TODO „®¤¥« âì!!!!!
; SYS_SECTOR.FreeSectors ; SYS_SECTOR.FreeSectors
; push hl ; ¡ ©â ¢ ¡ãä¥à¥ ®âªã¤  ¢ SCL ­ ç¨­ îâáï ¤ ­­ë¥ (HL-SCL_Buffer) ; push hl ; ¡ ©â ¢ ¡ãä¥à¥ ®âªã¤  ¢ SCL ­ ç¨­ îâáï ¤ ­­ë¥ (HL-SCL_Buffer)
; push de ; ¡ ©â ¢ ram ¤¨áª¥ trd £¤¥ § ª ­ç¨¢ ¥âáï â ¡«¨æ  ¯®á«¥¤­¥£® ä ©«  ; push de ; ¡ ©â ¢ ram ¤¨áª¥ trd £¤¥ § ª ­ç¨¢ ¥âáï â ¡«¨æ  ¯®á«¥¤­¥£® ä ©« 
xor a XOR A
ld de,SCL_Buffer-8 ; ¢ëç¨á«ï¥¬ §­ ç¥­¨¥ ᬥ饭¨ï ¢ ä ©«¥ ¨§ §­ ç¥­¨ï ᬥ饭¨ï ¢ ¡ãä¥à¥ LD DE,SCL_Buffer-8 ; ¢ëç¨á«ï¥¬ §­ ç¥­¨¥ ᬥ饭¨ï ¢ ä ©«¥ ¨§ §­ ç¥­¨ï ᬥ饭¨ï ¢ ¡ãä¥à¥
sbc hl,de SBC HL,DE
push hl PUSH HL
pop ix POP IX
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,0 LD HL,0
ld B,L ; b=0 - ®â ­ ç «  ä ©«  LD B,L ; b=0 - ®â ­ ç «  ä ©« 
ld c,Dss.Move_FP LD C,Dss.Move_FP
rst ToDSS ; 㪠§ â¥«ì ­  ¯¥à¢ë© ¡ ©â ¤ ­­ëå RST ToDSS ; 㪠§ â¥«ì ­  ¯¥à¢ë© ¡ ©â ¤ ­­ëå
jr nc,1F ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! JR NC,1F ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
pop de POP DE
ret RET
1: di 1: DI
ld hl,SYS_SECTOR_START LD HL,SYS_SECTOR_START
ld de,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk LD DE,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk
ACC_SetBlockSize ACC_SetBlockSize
ld a,0 LD A,0
ACC_CopyBlock ACC_CopyBlock
ld a,(HL) LD A,(HL)
ld (DE),a LD (DE),A
ACC_Off ACC_Off
; ei ;EI
LD A,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
LD HL,#D000 ; ¤®£à㧨âì ¤® ª®­æ  áâà ­¨æë LD HL,#D000 ; ¤®£à㧨âì ¤® ª®­æ  áâà ­¨æë
LD DE,#3000 LD DE,#3000
LD C,Dss.Read LD C,Dss.Read
RST ToDSS RST ToDSS
JP C,ERROR_IN_READ ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! JP C,ERROR_IN_READ ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
LD HL,MSG_LOAD_IMAGE ; loading image LD HL,MSG_LOAD_IMAGE ; loading image
LD C,Dss.PChars LD C,Dss.PChars
@ -315,7 +307,7 @@ Convert_SCLtoTRD:
DI DI
LD A,(MEM_BLK) LD A,(MEM_BLK)
jp Load_IMAGE_File.scl_read_next JP Load_IMAGE_File.scl_read_next
;-----------[] ;-----------[]
@ -330,7 +322,7 @@ SYS_SECTOR_END: BLOCK 3,0
SCL_FILE_ID: DB 0 SCL_FILE_ID: DB 0
;-----------[¢ á ¬ë© ª®­¥æ]------------- ;-----------[¢ á ¬ë© ª®­¥æ]-------------
SCL_Buffer EQU $ SCL_Buffer EQU $
assert SCL_Buffer+#701 < #C000, "Buffer out of mem bank 2" ASSERT SCL_Buffer+#701<#C000,"Buffer out of mem bank 2"