mirror of
https://github.com/Tolik-Trek/Spectrum.EXE.git
synced 2026-06-15 00:51:36 +03:00
1102 lines
24 KiB
NASM
1102 lines
24 KiB
NASM
|
||
;
|
||
; .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------.
|
||
; | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
|
||
; | | _______ | || | ______ | || | _________ | || | ______ | || | _________ | || | _______ | || | _____ _____ | || | ____ ____ | |
|
||
; | | / ___ | | || | |_ __ \ | || | |_ ___ | | || | .' ___ | | || | | _ _ | | || | |_ __ \ | || ||_ _||_ _|| || ||_ \ / _|| |
|
||
; | | | (__ \_| | || | | |__) | | || | | |_ \_| | || | / .' \_| | || | |_/ | | \_| | || | | |__) | | || | | | | | | || | | \/ | | |
|
||
; | | '.___`-. | || | | ___/ | || | | _| _ | || | | | | || | | | | || | | __ / | || | | ' ' | | || | | |\ /| | | |
|
||
; | | |`\____) | | || | _| |_ | || | _| |___/ | | || | \ `.___.'\ | || | _| |_ | || | _| | \ \_ | || | \ `--' / | || | _| |_\/_| |_ | |
|
||
; | | |_______.' | || | |_____| | || | |_________| | || | `._____.' | || | |_____| | || | |____| |___| | || | `.__.' | || ||_____||_____|| |
|
||
; | | | || | | || | | || | | || | | || | | || | | || | | |
|
||
; | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
|
||
; '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------'
|
||
;
|
||
|
||
/*
|
||
SYS
|
||
[+] - § ¤ ¢ âì CONFIG_DE ¯¥à¥¤ § ¯ã᪮¬ ᯥªâà㬠¨ ¢ ¯¥à¥å¢ â稪¥ à¥á¥â
|
||
[+] - ¯®¤¤¥à¦ª ®¢ëå ®¡à §®¢ vROM
|
||
[+] - ¤®¡ ¢«¥ ᮢ¬¥á⨬®áâì á ¤¥¬® ATARIN, ãᯮ«ì§ãî饥 ¥¯®«ãî ¤¥è¨äà æ¨î ¯®àâ AY
|
||
[ ] - ¯à®¢¥àïâì ¬¥âªã ZX,¥á«¨ ¬ë ¥ £à㧨¬ 3 ®á®¢ëå vROM
|
||
[ ] - ¢ ª®ä¨£¥ ¬®£ãâ ¡ëâì ¯à®¯ãé¥ë ¥ª®â®àë¥ vROM,®¨ ¥ § £à㦠îâáï
|
||
;
|
||
Images
|
||
[+] - Load SCL image
|
||
[ ] - Load TAP image
|
||
[ ] - Load SNA file
|
||
;
|
||
Features
|
||
[+] - …᫨ ¢ë¡à ® ret-zx,â® ¯à¨ ¦ ⨨ ¯à®¡¥« áà §ã ¯®á«¥ CAD ¢¥àñâ ¢ DSS
|
||
[ ] - When image filename exist,then instead of SPECTRUM.CFG loads image_filename.cfg if exist too
|
||
[ ] - ‚ë¤ ¢ âì á®®¡é¥¨ï ï§ëª¥ ãáâ ®¢«¥®¬ ¢ 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 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 #BFFE
|
||
stack_buffer EQU 64
|
||
program_start EQU BEGIN
|
||
;***************************************
|
||
;
|
||
|
||
;
|
||
; Program EQU section
|
||
;***************************************
|
||
FULL_FILE_NAME_LENGTH EQU 128 ; ¤«¨ áâப¨ ¯ã⨠ª ä ©«ã
|
||
MAX_LINE_LENGTH EQU 120 ; ¤«¨ áâப¨ CFG ä ©«
|
||
CFG_FILE_LINES EQU 8
|
||
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 ??
|
||
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
|
||
|
||
JP COMAND_LINE
|
||
ERROR_FILE:
|
||
LD HL,ERROR_FILE_MSG_X
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
LD HL,ONE_FILE
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
LD HL,ERROR_FILE_MSG
|
||
JP EXIT_ALL
|
||
|
||
END_CNF_ERROR:
|
||
LD HL,ERROR_CNF
|
||
;JP EXIT_ALL
|
||
EXIT_ALL:
|
||
; PUSH HL
|
||
;---------------------[test!!!!!]-------
|
||
;LD A,0
|
||
;LD C,BIOS.EMM_FN3
|
||
;RST ToBIOS ; ®á¢®¡®¤¨âì e:
|
||
;LD A,(SAVE_SLOT3)
|
||
;OUT (SLOT3),A
|
||
;---------------------------------------
|
||
|
||
;POP HL
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
;---------------------[test!!!!!]-------
|
||
|
||
;ld a,(CurDisk_Save)
|
||
;ld c,Dss.ChDisk
|
||
;RST ToDSS
|
||
;jr nc,1f
|
||
|
||
;ld hl,ERROR_FILE2_MSG
|
||
;LD C,Dss.PChars
|
||
;RST ToDSS
|
||
;---------------------------------------
|
||
|
||
1: LD BC,Dss.Exit
|
||
RST ToDSS
|
||
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
|
||
|
||
LD HL,(CNF_NAME)
|
||
LD A,Spec_Page
|
||
CALL READ_FILE_1
|
||
JP NC,CONTINUE
|
||
|
||
NO_FIL: LD HL,CNF_FILE
|
||
LD A,Spec_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 20h
|
||
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 configuration",0
|
||
MSG_ZX_EXIT2: DB 13,10,"EXIT from ZX mode",0
|
||
PROGRES_IND: DB '°',0 ; 176
|
||
|
||
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
|
||
|
||
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
|
||
CP ';'
|
||
JR Z,N_LINE
|
||
DJNZ LOOP_L
|
||
N_LINE: LD (HL),0
|
||
INC HL
|
||
LD A,(HL)
|
||
CP 13
|
||
JR Z,N_LINE
|
||
CP 10
|
||
JR Z,N_LINE
|
||
DEC C
|
||
JR NZ,LOOP_A
|
||
|
||
; ¢ë¤¥«¥® 8 áâப ¢ CNF
|
||
;*************************************
|
||
MACRO vROM_LOAD romLine,pageNumber
|
||
LD HL,(A_LINES+romLine)
|
||
LD A,(HL)
|
||
CP ';'
|
||
JR Z,.skip_load
|
||
LD A,pageNumber
|
||
CALL READ_FILE_1
|
||
LD A,Spec_Page
|
||
OUT (SLOT3),A
|
||
JP C,ERROR_FILE
|
||
.skip_load:
|
||
ENDM
|
||
|
||
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-ï áâப - ¨¬ï ä ©«
|
||
|
||
; ä ©«ë áç¨â ë
|
||
;*************************************
|
||
|
||
LD HL,MSG_NORMAL
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
LD HL,(A_LINES+NAME_CFG_LINE)
|
||
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,Spec_Page
|
||
OUT (SLOT3),A
|
||
LD HL,(A_LINES+OPTIONS_LINE) ; áâப ¯ à ¬¥â஢
|
||
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 20h
|
||
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
|
||
|
||
;************************************
|
||
|
||
PARAM_END: LD A,#E2 ; ROM-ID - BASIC 128
|
||
LD B,#42 ; page
|
||
CALL SET_ROM
|
||
|
||
LD A,#E3 ; ROM-ID - BASIC 48
|
||
LD B,#43 ; page
|
||
CALL SET_ROM
|
||
|
||
LD A,#E1 ; ROM-ID - TR-DOS
|
||
LD B,#44 ; page
|
||
CALL SET_ROM
|
||
|
||
LD A,#E0 ; ROM-ID - EXPANSION
|
||
LD B,#45 ; page
|
||
CALL SET_ROM
|
||
|
||
LD A,#EB ; ROM-ID - BIOS-1
|
||
LD B,#46 ; page
|
||
CALL SET_ROM
|
||
|
||
LD A,#EF ; ROM-ID - BIOS-2
|
||
LD B,#47 ; page
|
||
CALL SET_ROM
|
||
|
||
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
|
||
LD HL,MSG_EXIT1
|
||
JP Z,EXIT_ALL
|
||
|
||
JP SET_RELOAD_PROG
|
||
|
||
;LD HL,MSG_NORMAL
|
||
;JP EXIT_ALL
|
||
|
||
;********************************************
|
||
;JP 0
|
||
;********************************************
|
||
|
||
; out B - old ROM-page
|
||
SET_ROM: DI
|
||
;PUSH BC
|
||
;PUSH AF
|
||
|
||
;LD A,CNF_0
|
||
;OUT (SYS_PORT.ON),A
|
||
;LD A,10h
|
||
;LD BC,7FFDh
|
||
;OUT (C),A
|
||
|
||
;POP AF
|
||
;POP BC
|
||
|
||
;LD C,0F8h
|
||
;CALL 3D13h
|
||
|
||
;PUSH BC
|
||
;PUSH AF
|
||
|
||
;LD A,0
|
||
;LD BC,7FFDh
|
||
;OUT (C),A
|
||
;LD A,CNF_0
|
||
;OUT (SYS_PORT.OFF),A
|
||
|
||
;POP AF
|
||
;POP BC
|
||
;RET
|
||
|
||
EX AF,AF'
|
||
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
|
||
LD A,DCP_PAGE ; ãáâ ®¢¨âì ®¢ãî
|
||
OUT (SLOT3),A
|
||
|
||
LD A,(#C400) ; á®åà ¨âì â® çâ® ¡ë«®
|
||
LD L,A
|
||
LD A,(#C600)
|
||
LD H,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,L
|
||
LD (#C400),A ; ¢¥àãâì ¯®àâ
|
||
LD A,H
|
||
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
|
||
|
||
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 B,Dss.Move_FP.FrEnd
|
||
LD HL,0
|
||
LD IX,0
|
||
LD C,Dss.Move_FP
|
||
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 3Fh
|
||
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
|
||
;***************************************
|
||
;!FIXIT ¡¥§®¯ á® § ¨¬ âì à ¬¤¨áª¨, ç⮡ ¯®«ì§®¢ â¥«ì ¥ áâà ¤ «
|
||
; ®á¢®¡®¤¨âì ram-disk e:
|
||
.free_disk: DI
|
||
XOR A ; RAM-Drive E:
|
||
LD C,BIOS.FreeMemRMD
|
||
RST ToBIOS ; ®á¢®¡®¤¨âì e:
|
||
|
||
POP AF
|
||
LD B,A ; § ¯à®á¨âì ¯ ¬ïâì ã bios-
|
||
XOR A ; RAM-Drive E:
|
||
LD C,BIOS.GetMemRMD ; ¨ ¯®¤á®¥¤¨¨âì ª e:
|
||
RST ToBIOS
|
||
JR C,ERROR_NO_MEM
|
||
LD (MEM_BLK),A
|
||
RET
|
||
;---------------------------------------
|
||
|
||
Load_IMAGE_File:
|
||
LD A,(IMAGE_HANDLER)
|
||
LD HL,0
|
||
LD IX,0
|
||
LD BC,Dss.Move_FP.FrStart*256+Dss.Move_FP
|
||
RST ToDSS ; ãáâ ®¢¨âì 㪠§ ⥫ì 0
|
||
RET C
|
||
|
||
LD HL,MSG_LOAD_IMAGE ; loading image
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
LD A,(MEM_BLK)
|
||
|
||
.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,CR_LINE ; loading
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
LD A,(IMAGE_HANDLER)
|
||
LD C,Dss.Close ; § ªàëâì ä ©«
|
||
RST ToDSS
|
||
|
||
RET C
|
||
;RET
|
||
|
||
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
|
||
|
||
;********************************************
|
||
|
||
;********************************************
|
||
EXIT_TO_DSS: DI
|
||
LD SP,#BFF0
|
||
LD A,CNF_PORT.CNF_0
|
||
OUT (SYS_PORT.OFF),A
|
||
|
||
LD A,(#FFF0) ;!HARDCODE
|
||
OUT (SLOT0),A
|
||
|
||
XOR A
|
||
LD BC,3*256+BIOS.SET_PAL_INIT ; SET IBM PAL
|
||
RST ToBIOS
|
||
|
||
LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT
|
||
LD BC,0*256+Dss.SetVMod
|
||
RST ToDSS
|
||
|
||
LD A,#20
|
||
LD DE,0
|
||
LD HL,#2050
|
||
LD BC,7*256+Dss.Clear
|
||
RST ToDSS
|
||
|
||
LD HL,MSG_ZX_EXIT
|
||
JP EXIT_ALL
|
||
|
||
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,#BFF0
|
||
|
||
LD A,high ZXKeys.Line_7
|
||
IN A,(ZXKeys)
|
||
AND #1F
|
||
CP #1E
|
||
JR Z,EXIT_TO_DSS
|
||
|
||
;LD A,CNF_PORT.CNF_3
|
||
;OUT (SYS_PORT.ON),A ; System-page on & CNF = 0
|
||
|
||
;-------------[TEST ATARIN]-------------
|
||
; #c0fd - +#05ED
|
||
; ä¨ªá ¥¯®«®© ¤¥è¨äà æ¨¨ ¯®àâ #FFFD (¯¨èãâ ¢ #C0FD)
|
||
; ¤®¡ ¢«¥ ¯®àâ #C0FD ¢® ¢á¥ ª àâë ¯®à⮢
|
||
LD BC,SLOT3
|
||
IN B,(C)
|
||
LD A,DCP_PAGE
|
||
OUT (C),A
|
||
|
||
; !HARDCODE ¤ «¥¥ ¢áñ ᪮àïª ¨ § å प®¦¥®
|
||
; !TODO ¯¥à¥¤¥« âì ¯®¤ ®¢ãî äãªæ¨î ¤¥è¨äà æ¨¨
|
||
LD A,#90 ; AY-8910-port (FFFD)
|
||
LD HL,#C000+#05ED ; CNF 0
|
||
LD (HL),A
|
||
|
||
LD H,#C0+#15 ; CNF 1
|
||
LD (HL),A
|
||
|
||
LD H,#C0+#25 ; CNF 2
|
||
LD (HL),A
|
||
|
||
LD H,#C0+#35 ; CNF 3
|
||
LD (HL),A
|
||
|
||
OUT (C),B
|
||
;---------------------------------------
|
||
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!!!!!]-------------
|
||
;!FIXIT à §à㫨âì ०¨¬ ᯥªâàã¬ à ¡®âã á «î¡ë¬¨ ª « ¬¨ ¨ à §¤¥« ¬¨
|
||
XOR A ; --> IDE-1
|
||
LD C,BIOS.HDD_PART ; IDE-1/IDE-2
|
||
RST ToBIOS_18
|
||
;---------------------------------------
|
||
|
||
;******************************
|
||
XOR A
|
||
LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette
|
||
RST ToBIOS_18
|
||
|
||
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
|
||
|
||
;!TEST
|
||
LD A,8
|
||
LOOP_P1: DEC A
|
||
OUT (C),A ; #7FFD
|
||
OUT (SLOT3),A
|
||
JR NZ,LOOP_P1
|
||
|
||
;OUT (C),A ; #7FFD
|
||
;OUT (SLOT3),A
|
||
;INC A
|
||
;CP 8
|
||
;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 BC,PROG_STARTS.Length
|
||
LD DE,#FF00 ;!HARDCODE
|
||
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 #FF00 ;!HARDCODE
|
||
|
||
;***************************************
|
||
PROG_STARTS: 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
|
||
|
||
.Length EQU $-PROG_STARTS
|
||
ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!'
|
||
;
|
||
;
|
||
; …᫨ ¯ à ¬¥âà § ¤ , â® ¢ë¡¨à ¥âáï § 票¥ 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_
|
||
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
|
||
|
||
;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
|
||
ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH,0
|
||
;
|
||
;
|
||
;
|
||
|
||
;
|
||
IFDEF NEED_LOADER
|
||
Loader_length EQU $-BEGIN
|
||
ELSE
|
||
Loader_length EQU 0
|
||
ENDIF
|
||
;----------------------------------------------[End Loader section]
|
||
;
|
||
STACK_CHECK_MACRO stack_point,stack_buffer
|
||
; Code after Loader
|
||
;[]-----------------------------[PLUGINS]-----------------------------[]
|
||
|
||
INCLUDE 'trdscl.a80'
|
||
|
||
;[]-------------------------------------------------------------------[]
|
||
; Code end section
|
||
; OUTEND
|
||
; SAVEBIN 'Build/test.bin', exe_header, $-exe_header
|
||
; |