LDConf/LDCONF.ASM
2026-08-27 00:32:09 +10:00

751 lines
21 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

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

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

; _ ____ ____ __
; | | | _ \ / ___|___ _ __ / _|
; | | | | | | | / _ \| '_ \| |_
; | |___| |_| | |__| (_) | | | | _|
; |_____|____/ \____\___/|_| |_|_|
; _____ ____ _ _ ____ _
; | ___|__ _ __ / ___| _ __ _ __(_)_ __ | |_ ___ _ __ / ___|___ _ __ ___ _ __ _ _| |_ ___ _ __
; | |_ / _ \| '__| \___ \| '_ \| '__| | '_ \| __/ _ \ '__| | | / _ \| '_ ` _ \| '_ \| | | | __/ _ \ '__|
; | _| (_) | | ___) | |_) | | | | | | | || __/ | | |__| (_) | | | | | | |_) | |_| | || __/ |
; |_| \___/|_| |____/| .__/|_| |_|_| |_|\__\___|_| \____\___/|_| |_| |_| .__/ \__,_|\__\___|_|
; |_| |_|
;----------------------------------------------------------------------;
; ‚¥àá¨ï ¯à®£¨ ¨ ¨­ä® ¤«ï ¯®­â®¢:
DEFINE Ver_ID "0.6 beta"
DEFINE e_mail "Tolik.Trek@gmail.com"
; <09>®¤£à㧪  ä ©«  á ª®­áâ ­â ¬¨ BIOS ¨ DSS:
include 'Shared_Includes/constants/sp2000.inc'
include 'Shared_Includes/constants/dss_equ.inc'
include 'Shared_Includes/constants/BIOS_equ.inc'
; Œ ªà®áë
MACRO _PrintStr
LD C,Dss.PChars
RST ToDSS
ENDM
;----------------------------------------------------------------------;
DEFINE App_EXE_Version 1
stack_point EQU #C000 ;  ¤à¥á á⥪ 
SP_Win EQU 64 ; ¬­¨¬ë© ª®­âà®«ì ¯¥à¥á¥ç¥­¨ï á⥪  á ª®¤®¬
org_addr EQU #8000 + CLP_Buffer ;  ¤à¥á ª®¬¯¨«ï樨.
program_start EQU START
code_addr EQU START
Loader_length EQU 0
; _______ _______ ____ __ _
; | ____\ \/ / ____| | _ \ _ __ ___ / _(_)_ __
; | _| \ /| _| | |_) | '__/ _ \ |_| \ \/ /
; | |___ / \| |___ | __/| | | __/ _| |> <
; |_____/_/\_\_____| |_| |_| \___|_| |_/_/\_\
;-----------------;
INCLUDE 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
;-----------------;
; __ __ _
; | \/ | __ _(_)_ __
; | |\/| |/ _` | | '_ \
; | | | | (_| | | | | |
; |_| |_|\__,_|_|_| |_|
START:
;-----------------; —¨á⨬ ¡ãä¥à  ªá¥«¥¬
DI
LD HL,Buffer
LD D,D ; “áâ ­®¢¨âì à §¬¥à ¡«®ª 
LD A,255 ; <20> §¬¥à ¡«®ª 
LD C,C
LD A,0
LD (HL),A
LD B,B ; ‚몫îç ¥¬  ªá¥«ì
EI
;-----------------; ‘®å࠭塞 ⥪ã騥 áâà ­¨æë
; IN A,(SLOT0)
; LD (page0_save),A
IN A,(SLOT1)
LD (page1_save),A
IN A,(SLOT2)
LD (page2_save),A
IN A,(SLOT3)
LD (page3_save),A
;-----------------;
;-----------------; ‘®å࠭塞 ­ áâனª¨ íªà ­ 
PUSH IX
LD C,Dss.GetVMod
RST ToDSS
POP IX
JR NC,1f
LD HL,error_Vmode
JP BadExit
1:
LD (VMod),A
LD A,B
LD (VModPage),A
;-----------------;
;-----------------; ‘®å࠭塞 ¤¥ä®«â­ë¥ áâà ­¨æë
DI
LD A,Spec_Page
OUT (SLOT3),A ; ®âªàëâì ᯥæ-áâà ­¨æã
LD HL,#FFF0
LD DE,page0_def
LDI
LDI
LDI
LDI
LD A,(page3_save)
OUT (SLOT3),A ; ¢¥à­ãâì áâà ­¨æã
EI
;-----------------;
;-----------------;
LD (dss_line),IX ; ‘®å࠭塞 㪠§ â¥«ì ­  áâப㠧 ¯ã᪠.
LD A,(IX) ; âãâ DSS ª« ¤ñâ ¤«¨­ã ¯ à ¬¥â஢ ª®¬.áâப¨
AND A ; ¯à®¢¥à塞 ­  ®âáãâá⢨¥ ¯ à ¬¥â஢
JR NZ,1F ; § ¯ã᪠ ¢ ª®¬.áâப¥. …᫨ ¨å ­¥â,
LD HL,Help_Msg ; â® ¯¥ç â ¥¬ ¨­áâàãªæ¨î ¨ ¢ë室¨¬
_PrintStr ; ¨§ ¯à®£à ¬¬ë á ­®à¬ «ì­ë¬ ª®¤®¬
LD B,0 ; § ¢¥à襭¨ï.
JP Exit ;
;-----------------;
;-----------------; <20> §¡¨à ¥¬ ¨  ªâ¨¢¨à㥬 ª«îç¨
1:
CALL Set_keys ; ­  ¢ë室¥: CF=0 - ­¥â ®è¨¡ª¨
JR NC,1F ; F=1 - ¥áâì ®è¨¡ª 
LD HL,error_ComStr ; …᫨ à §®¡à «¨ á ®è¨¡ª ¬¨
JP BadExit ; â® ¢ë室 á ®è¨¡ª®©
;-----------------;
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ set_keys
1:
;
CALL TestConf ; ¯à®¢¥àª  ª®­äë. ­  ¢ë室¥: CF=0 - ­¥â ®è¨¡ª
JR NC,1F ; F=1 - ¥áâì ®è¨¡ª 
LD HL,error_confFile ; …᫨ ª®áïª á ä ©«®¬ ¯à®è¨¢ª¨
JP BadExit ; â® ¢ë室 á ®è¨¡ª®©
;-----------------;
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ TestConf
1:
;
CALL TakeMem ; ‚뤥«¥­¨¥ ¯ ¬ï⨠¤«ï ª®­äë 65536 ¡ ©â
JR NC,1F
LD HL,error_freeMem ; …᫨ ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
JP BadExit ; â® ¢ë室 á ®è¨¡ª®©
;-----------------;
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ TakeMem
1:
;
CALL Load_conf ; —¨â ¥¬ ¯à®è¨¢ªã ¨§ ä ©«  (¬¥­ï¥â PAGE3)
LD A,(page3_save) ; ¢®ááâ ­ ¢«¨¢ ¥¬ áâà ­¨æã
OUT (SLOT3),A ; ¯ ¬ï⨠¯®á«¥ ᬥ­ë
JR NC,1F
LD HL,error_readConf ; …᫨ ®è¨¡ª  ¯à¨ ç⥭¨¨ ¯à®è¨¢ª¨ ¨§ ä ©« 
JP BadExit ; â® ¢ë室 á 祬? <20>à ¢¨«ì­®, á ®è¨¡ª®©
;-----------------;
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ Load_conf
1:
LD A,(ram_blk_id)
LD B,A ; RAM Block ID á ¡¨âáâਬ®¬ ¤«ï § £à㧪¨
LD A,ACEX.Config_PG.Sp2000_AcexSetUpNow ; ¯¥à¥§ «¨¢ª  ª®­äë á ¢®§¢à â®¬
LD C,BIOS.RST_CONF.CUSTOM
RST ToBIOS
;JR ReloadRET
;-----------------;
;
; ____ _ _ ____ _____ _____
; | _ \ ___| | ___ __ _ __| | | _ \| ____|_ _|
; | |_) / _ \ |/ _ \ / _` |/ _` | | |_) | _| | |
; | _ < __/ | (_) | (_| | (_| | | _ <| |___ | |
; |_| \_\___|_|\___/ \__,_|\__,_| |_| \_\_____| |_|
; Œ¥áâ®, ªã¤  ¡ã¤¥â ¢®§¢à â ¯®á«¥
; ¯¥à¥§ £à㧪¨ ­®¢®© ¯à®è¨¢ª¨
;-----------------;
ReloadRET: DI
;LD SP,(SP_Save)
LD A,CNF_PORT.CNF_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“
OUT (SYS_PORT.OFF),A
; LD A,(page0_save) ; SET PAGE DOS
; OUT (SLOT0),A
; LD A,(page3_save) ; ¢®§¢à â áâ à®© áâà ­¨æë PAGE3
; OUT (SLOT3),A
;-----------------;
;-----------------; <20> ¡®â  ¯à®£à ¬¬ë á ­®¢®© ¯à®è¨¢ª®©
LD A,(e_key)
AND A
JR Z,1F
LD HL,EXEfileBuff ; ‡ ¯ã᪠EXE
LD BC,Dss.Exec
RST ToDSS
;-----------------;
;-----------------;
1: ;DI
LD A,(a_key) ; ‚ë室 ¡¥§ ¢®ááâ ­®¢«¥­¨ï ¤¥ä®«â­®© ª®­äë?
AND A
JR NZ,NextReloadRET
;
LD B,0 ; § £à㧪  ¡¨âáâਬ  ¨§ ROM
LD A,ACEX.Config_PG.Sp2000_AcexSetUpNow ; ¯¥à¥§ «¨¢ª  ª®­äë á ¢®§¢à â®¬
LD C,BIOS.RST_CONF.CUSTOM
RST ToBIOS
;JP NextReloadRET
;*******************************************************
; _ _ _
; | \ | | _____ _| |_
; | \| |/ _ \ \/ / __|
; | |\ | __/> <| |_
; |_| \_|\___/_/\_\\__|
; ____ _ _ ____ _____ _____
; | _ \ ___| | ___ __ _ __| | | _ \| ____|_ _|
; | |_) / _ \ |/ _ \ / _` |/ _` | | |_) | _| | |
; | _ < __/ | (_) | (_| | (_| | | _ <| |___ | |
; |_| \_\___|_|\___/ \__,_|\__,_| |_| \_\_____| |_|
; <09>®¤£®â®¢ª  ª § ¢¥à襭¨î ¯®á«¥ à¥á¥â  ¨
; ¢®§¢à â  த­®© ¯à®è¨¢ª¨
;-----------------;
NextReloadRET: DI
LD A,CNF_PORT.CNF_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“
OUT (SYS_PORT.OFF),A
LD A,(page1_save)
OUT (SLOT1),A
; ƒ«ï­ãâì, ¬®¦¥â ­¥ ­ ¤® ¢®§¢à é âì ®¤­ã ¨§ áâà ­¨æ???
LD A,(page3_save)
OUT (SLOT3),A
;JP NormExit
;*******************************************************
; _____ _ _ ____ _
; | ____|_ _(_) |_ | _ \ _ __ ___ ___( )___
; | _| \ \/ / | __| | |_) | '__/ _ \ / __|// __|
; | |___ > <| | |_ | __/| | | (_) | (__ \__ \
; |_____/_/\_\_|\__| |_| |_| \___/ \___| |___/
;-----------------;
NormExit: LD HL,WellDone
_PrintStr
LD B,0
JR Exit
;-----------------;
; HL áâப  á ®è¨¡ª®©
BadExit: _PrintStr
LD B,1 ; ª®¤ ®è¨¡ª¨
;JR Exit
;-----------------;
;-----------------;
Exit: PUSH BC
LD HL,FirstHandler
LD C,Dss.Close
LD B,(LastHandler-FirstHandler)
.loop: LD A,(HL) ; ‡ ªà뢠¥¬ ¢á¥ ®âªàëâë¥ ä ©«ë, ¥á«¨ ¥áâì.
AND A
JR Z,1F
PUSH HL
PUSH BC
RST ToDSS
POP BC
POP HL
1: INC HL
DJNZ .loop
;-----------------;
;-----------------; ®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì, ¥á«¨ ª«ï­ç¨«¨
LD A,(ram_blk_id)
AND A
JR Z,1F
;
LD C,BIOS.FreeMem
RST ToBIOS
;-----------------;
;-----------------; ¢®ááâ ­ ¢«¨¢ ¥¬ íªà ­
LD C,Dss.Cursor
RST ToDSS
PUSH DE
LD A,(VModPage)
LD B,A
LD A,(VMod)
LD C,Dss.SetVMod
RST ToDSS
LD C,Dss.Locate
POP DE
RST ToDSS
;-----------------;
;-----------------; ‚ë室 ¢ DOS
1: POP BC
.loop_exit: LD C,Dss.Exit
RST ToDSS
JR .loop_exit
;-----------------;
;*******************************************************
; ____ _ _
; / ___| ___| |_ | | _____ _ _ ___
; \___ \ / _ \ __| | |/ / _ \ | | / __|
; ___) | __/ |_ | < __/ |_| \__ \
; |____/ \___|\__| |_|\_\___|\__, |___/
; |___/
; <09>®«ãç ¥¬ ª«îç¨ § ¯ã᪠, à á¯¨å¨¢ ¥¬ ¨å ¯® 㣫 ¬,
; ­ áâà ¨¢ ¥¬ ­ ç «ì­ë¥ ãá«®¢¨ï à ¡®âë.
;-----------------;
Set_keys:
LD HL,(dss_line)
INC HL
LD (NextParameter),HL
.CheckChar: CALL .GetParam
JR NC,1F
;
CCF ; …᫨ ¯®á«¥¤­¨© ¯ à ¬¥âà ¢ áâப¥ = 0
RET ; â® ¢ë室¨¬. <20> §¡®à ®ª®­ç¥­
;
1: LD A,(Buffer+1) ; ®á­®¢­®¬ 横«¥ CheckChar ¬ë
AND A ; ¦¤ñ¬ ⮫쪮 ®¤¨­ ᨬ¢®« ¢
JR Z,1F ; ª«îç¥. <20>®í⮬㠥᫨ ¨å ¡®«ìè¥,
SCF ; â® ¢ë室¨¬ á ®è¨¡ª®©.
RET ; ‚ë室 á ®è¨¡ª®©.
1: ; <20>஢¥àª /ãáâ ­®¢ª  ª«îç 
LD C,A ; ’“’ †„ðŒ, çâ® ¢ € «¥¦¨â 0 ¨ ¨á¯®«ì§ã¥¬ BC
LD B,A ; ª ª ᬥ饭¨¥ ¢ ¯ ¬ïâ¨, £¤¥ åà ­ïâáï ª«îç¨
LD A,(Buffer)
RES 5,A ; ¤¥« ¥¬ ¬ «¥­ìª¨© ᨬ¢®« ¡®«ì訬)))
CP 'A' ; ¯à®¢¥à塞 ¯ à ¬¥âà ­  ­ã¦­ë©
JR Z,.set_keys_a
CP 'C'
JR Z,.set_keys_c
CP 'E'
JR Z,.set_keys_e
CP 'X'
JR Z,.set_keys_x
CP 'L'
JR Z,.set_keys_l
SCF ; ®è¨¡ª  ¢ ¯ à ¬¥âà¥
RET ; ¢ë室 á ®è¨¡ª®©
;-----------------;
;-----------------;
.set_keys_l: INC C
.set_keys_a: INC C
.set_keys_x: INC C
.set_keys_e: INC C
.set_keys_c: ; EX DE,HL ; <20><E28099>Ÿœ “Š€‡€’…‹œ <20>€ ‘‹…„“ž™ˆ‰ <20><EFBFBD>€Œ…<E280A6>!
LD HL,key_buff ; ‚ëç¨á«ï¥¬ ï祩ªã åà ­¥­¨ï ª«îç 
ADD HL,BC
LD A,(HL) ; ¨ ¯à®¢¥à塞 ­¥â «¨ â ¬ 㦥 ª«îç .
;AND A ; ¥á«¨ ¥áâì, §­ ç¨â ª«îç ¢¢¥¤ñ­ 2 à § 
;SCF
NEG
RET NZ ; ®è¨¡ª  - ¯®¢â®à ª«îç . ¢ë室
; OR C ; ’ãâ Ž†ˆ„€…’‘Ÿ, çâ® €=0. …᫨ =0, â® íâ® ª«îç "A"
LD A,1 ; <20>ਧ­ ª ãáâ ­®¢ª¨ ª«îç  - ­¥ ­®«ì.
LD (HL),A ; ãáâ ­®¢¨«¨ ª«îç
; EX DE,HL ; <20><E28099>Ÿœ “Š€‡€’…‹œ <20>€ ‘‹…„“ž™ˆ‰ <20><EFBFBD>€Œ…<E280A6>!
; JR Z,.CheckChar ; ¥á«¨ ª«îç "A" â® á«¥¤ãî騩 ªà㣠横« 
SUB C ; ’ãâ Ž†ˆ„€…’‘Ÿ, çâ® €=1. …᫨ >1, â® íâ® ª«îç ¡¥§ ¯ à ¬¥â஢
; JR Z,.CheckChar ; ¥á«¨ ª«îç "X" â® á«¥¤ãî騩 ªà㣠横« 
JR C,.CheckChar ; ¥á«¨ ª«îç ¡®«ìè¥ ª«îç  'e', â® á«¥¤ãî騩 ªà㣠横« 
;
PUSH BC
CALL .GetParam ; ¯®«ãç ¥¬ á«¥¤ãî騩 ¯ à ¬¥âà áâப¨ DOS ª ­ ©¤¥­®¬ã ª«îçã
POP BC
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
; EX DE,HL ; <20><E28099>Ÿœ “Š€‡€’…‹œ <20>€ ‘‹…„“ž™ˆ‰ <20><EFBFBD>€Œ…<E280A6>!
LD HL,FirstHandler ; ¢ëç¨á«ï¥¬ ï祩ªã åà ­¥­¨ï 奭¤«¥à 
ADD HL,BC
; DEC HL
LD (.fileHandler),HL ; ¨ ¯®¤áâ ¢«ï¥¬ ¥ñ ¯àאַ ¢ ª®¤ ".OpenFile"
; EX DE,HL ; <20><E28099>Ÿœ “Š€‡€’…‹œ <20>€ ‘‹…„“ž™ˆ‰ <20><EFBFBD>€Œ…<E280A6>!
; PUSH HL ; <20><E28099>Ÿœ “Š€‡€’…‹œ <20>€ ‘‹…„“ž™ˆ‰ <20><EFBFBD>€Œ…<E280A6>!
CALL .OpenFile ; Žâªàë⨥ ä ©«  (¨«¨ ¯à®¢¥àª  ­ «¨ç¨ï) ¯® ¨¬¥­¨ ¨§ ¡ãä¥à 
; POP HL ; <20><E28099>Ÿœ “Š€‡€’…‹œ <20>€ ‘‹…„“ž™ˆ‰ <20><EFBFBD>€Œ…<E280A6>!
JR NC,.CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
RET ; ¢ë室, ¥á«¨ ®è¨¡ª 
;-----------------;
;-----------------;
.GetParam:
LD HL,(NextParameter)
LD C,43h ; âã⠢뤥«ï¥¬ ¯ à ¬¥âà § ¯ã᪠
LD DE,Buffer ; ¡ãä¥à ¤«ï ®¯¥à æ¨© á® áâப ¬¨
RST #10 ; ¯®«ãç ¥¬ ¢ ¡ãä¥à¥ á«¥¤ãî騩 ¯ à ¬¥âà
LD (NextParameter),HL
;CCF
LD A,(Buffer)
AND A
RET NZ ; <20>®à¬ «ì­ë© ¢®§¢à â C = 0
SCF
RET ; ‚®§¢à â á ®è¨¡ª®© C = 1
;-----------------;
;-----------------;
.OpenFile:
LD HL,key_save ; ¯à®¯¨á뢠¥¬ ª«îç ¢ ª®¤ ¤«ï ¯à®¢¥àª¨ ­  EXE
LD (HL),C ; ¢â몠¥¬ §­ ç¥­¨¥ ª«îç  ¢ ª®¤
LD BC,Dss.EX_Path.GET_ALL ; ¯à®¢¥à塞 ¡ãä¥à ­  ª®à४⭮áâì ¨¬¥­¨ ä ©« 
LD HL,Buffer ; ????? ᤥ« âì ¯à®¢¥àªã ­  ª®à४⭮áâì ¢á¥£® ¯ãâ¨?????
RST ToDSS
RET C ; ®è¨¡ª  ¢ áâப¥
AND %00000011 ; ¯à®¢¥à塞, çâ® ¥áâì ¨¬ï ¨
XOR %00000011 ; à áè¨à¥­¨¥ ä ©«  (0 ¨ 1 ¡¨âë)
SCF
RET NZ ; ®è¨¡ª  ä ©«  - ¢ë室
LD A,Dss.Open.R
LD C,Dss.Open
LD HL,Buffer
RST ToDSS ; ®âªàë⨥ ä ©« 
RET C ; ®è¨¡ª  ä ©«  - ¢ë室
.fileHandler+1: LD (.fileHandler),A ; á®å࠭塞 奭¤«¥à
;-----------------;
;-----------------; <20>஢¥à塞 ®¡à ¡ â뢠¥¬ë© ª«îç
key_save+1: LD A,#FF ; á ¢®âª­ñâáï §­ ç¥­¨¥ ¨§ ॣ¨áâà  C
XOR 1 ; ¥á«¨ 1, â® íâ® ª«îç "E"
RET NZ ; ¥á«¨ ­¥â, â® ¢ë室 ¨§ ¯à®æ¥¤ãàë.
;-----------------;
;-----------------; <20>஢¥àª  à áè¨à¥­¨ï ä ©« 
LD BC,Dss.EX_Path.GET_TYPE ; ª«î箬 "E" ¯à®¢¥à塞 ä ©«
LD HL,Buffer ; ­  à áè¨à¥­¨¥ "EXE" ¢ë¤¥«¨¢
LD DE,BufferEXE ; ¨§ áâப¨ ¨¬¥­¨ à áè¨à¥­¨¥
RST ToDSS ; ä ©«  ¢ ®â¤¥«ì­ë© ¡ãä¥à ­  4 ¡ ©â 
;-----------------;
;-----------------; â¥á⨬ ¡ãä¥à à áè¨à¥­¨ï ¯®á¨¬¢®«ì­®
LD DE,IsEXE
LD HL,BufferEXE
LD BC,IsEXElength-IsEXE
2: LD A,(DE)
RES 5,(HL) ; ¤¥« ¥¬ ¬ «¥­ìª¨© ᨬ¢®« ¡®«ì訬
CPI
INC DE
JP PO,3F ; ¥á«¨ ¯®á«¥¤­¨© ᨬ¢®« ¯à®¢¥à¥­, â® JP ­  ¯à®¢¥àªã
JR Z,2B ; ¥á«¨ ᨬ¢®« ᮢ¯ ¤ ¥â, â® ¯®¢â®à
;
3: SCF ; á ¯®¯ ¤ñ¬ ª®£¤  BC=0 ¨«¨ ᨬ¢®« ­¥ ᮢ¯ «
RET NZ ; ¥á«¨ ¢ë諨 ¨§ 横«  ¨ ᨬ¢®« ­¥ ᮢ¯ « - ®è¨¡ª ,
;
XOR A ; ¥á«¨ ¢áñ ­¨èâïª (???- § ªà뢠¥¬ ®âªàëâë© EXE ¨???) ¢ë室¨¬
EX AF,AF'
LD HL,Buffer
LD DE,EXEfileBuff
LD BC,#00FF
1: LDI
EX AF,AF'
CP (HL)
JR Z,1F
;
EX AF,AF'
JP PE,1B
;
1: XOR A
LD (DE),A
LD A,(ExeHandler)
LD C,Dss.Close
JP ToDSS
;RET
;*******************************************************
; _____ _ ____ __
; |_ _|__ ___| |_ / ___|___ _ __ / _|
; | |/ _ \/ __| __| | | / _ \| '_ \| |_
; | | __/\__ \ |_ | |__| (_) | | | | _|
; |_|\___||___/\__| \____\___/|_| |_|_|
; <09>஢¥à塞 à §¬¥à ¨ § £®«®¢®ª ä ©«  ¯à®è¨¢ª¨
; (???¤®¡ ¢¨âì ª«îç ¤«ï ®â¬¥­ë???)
;-----------------;
TestConf: LD A,(ConfHandler)
AND A ; ¯à®¢¥àª  ­  ®âáãâá⢨¥ 奭¤«¥à 
SCF
RET Z ; ¢ë室 á ®è¨¡ª®© ¥á«¨ ä ©« ­¥ ®âªàëâ
;
EX AF,AF' ; á®å࠭塞 奭¤«¥à, íª®­®¬¨¬ â ªâë)))
LD A,(x_key) ; ¥á«¨ ¯à®¢¥àª  (ª«îç X) ­  奤¥à ¨ à §¬¥à
AND A ; ä ©«  ®âª«î祭 , â® ¯à®¯ã᪠¥¬ .TestConfHeader
JR NZ,1F
;
EX AF,AF' ; ¢®ááâ ­®¢¨«¨ 奭¤«¥à, áíª®­®¬¨«¨ â ªâë)))
CALL .TestConfHeader
RET C
;
1: CALL .TestConfSize
RET
;-----------------;
.TestConfHeader:
LD HL,Buffer
LD DE,8
LD C,Dss.Read ; ç¨â ¥¬ ¢ ¡ãä¥à ¯¥à¢ë¥ 8 ¡ ©â
RST ToDSS ; ¤«ï áà ¢­¥­¨ï á è ¡«®­®¬
RET C
; ; ª®¢ëà塞 ¡ãä¥à ¯®á¨¬¢®«ì­®
LD DE,IsNormConf ; è ¡«®­ ¤«ï áà ¢­¥­¨ï
LD HL,Buffer
LD BC,IsNormConfLen-IsNormConf
2: LD A,(DE)
CPI
INC DE
JP PO,3F ; ¥á«¨ ¯®á«¥¤­¨© ᨬ¢®« ¯à®¢¥à¥­, â® JP ­  ¯à®¢¥àªã
JR Z,2B ; ¥á«¨ ᨬ¢®« ᮢ¯ ¤ ¥â, â® ¯®¢â®à
; ; á ¯®¯ ¤ñ¬ ª®£¤  BC=0 ¨«¨ ᨬ¢®« ­¥ ᮢ¯ «. ;
3: RET Z ; ¥á«¨ BC=0 ¨ ¯®á«¥¤­¨© ᨬ¢®« ᮢ¯ « (Z=1)
SCF ; ¥á«¨ BC=0 ¨ ᨬ¢®« ­¥ ᮢ¯ « - ®è¨¡ª 
RET
;-----------------;
.TestConfSize:
LD B,2 ; ‘â ¢¨¬ 㪠§ â¥«ì ­  ª®­¥æ ä ©« 
CALL .set_fp ; ç⮡ ã§­ âì ¥£® à §¬¥à
RET C
LD A,H ; <20> §¬¥à ä ©«  ¢ HL:IX. <20>¥â á¬ëá« , ¥á«¨ ®­ ¡®«ìè¥
OR L ; 61152 ¡ ©â , ¯®í⮬㠯஢¥à塞, çâ® ¢ HL ­®«ì.
SCF
RET NZ
;
LD A,(x_key) ; ‘à ¢­¨¢ ¥¬ à §¬¥à ä ©«  á íâ ««®­ë¬ ¤«ï 1K30 (59215 ¨«¨ #E74F)
AND A ; «¨¡® (¯à¨ ãáâ ­®¢«¥­­®¬ ª«îç¥ X) á ¬ ªá¨¬ «ì­® ¢®§¬®¦­ë¬
JR NZ,2F ; ¤«ï ⥪ã饣® § £àã§ç¨ª  ¢ BIOS (61152 ¨«¨ #EEE0)
; ’ã⠯஢¥àª  ­  â®ç­®¥ ᮮ⢥âá⢨¥ ¤«ï 1K30
LD HL,(ConfSize)
LD A,H
SUB XH
JR NZ,1F
;
LD A,L
SUB XL
JR Z,3F
1: SCF
RET
;
; ’ã⠯஢¥àª  ­  ­¥¯à¨¢ë襭¨¥ 61152 ¡ ©â 
2:
LD HL,(MaxConfSize)
PUSH IX
POP BC
SBC HL,BC
RET C
;
3: LD B,0 ; ‚®§¢à é ¥¬ 㪠§ â¥«ì
;CALL .set_fp ; ¢ ä ©«¥ ­  ¥£® ­ ç «®
;RET
;-----------------;
; ‚室­®¥ §­ ç¥­¨¥ ¢ ॣ¨áâॠB
.set_fp: LD A,(ConfHandler) ; •í­¤«¥à ä ©«  á ª®â®àë¬ á¥©ç á à ¡®â ¥¬
LD HL,0
LD IX,0
LD C,Dss.Move_FP
RST ToDSS ; ãáâ ­®¢ª  㪠§ â¥«ï ¢ ä ©«¥
RET
;*******************************************************
; _____ _ __ __
; |_ _|_ _| | _____ | \/ | ___ _ __ ___
; | |/ _` | |/ / _ \ | |\/| |/ _ \ '_ ` _ \
; | | (_| | < __/ | | | | __/ | | | | |
; |_|\__,_|_|\_\___| |_| |_|\___|_| |_| |_|
; ‚뤥«ï¥¬ ¯ ¬ïâì ¯®¤ § £à㧪㠯à®è¨¢ª¨ - 64 ª¡
;-----------------;
TakeMem: LD BC,#04*256 + BIOS.GetMem ; ‡ ¯à®á ­  ¢ë¤¥«¥­¨¥ 64 Š¡ ¯ ¬ï⨠¯®¤ ª®­äã
RST ToBIOS
RET C ; § ¢¥à襭¨¥ - ­¥å¢ âª  ¯ ¬ïâ¨
LD (ram_blk_id),A
LD C,BIOS.GetMemBlkPages ; § ¯à®á ­®¬¥à®¢ ¢ë¤¥«¥­­ëå áâà ­¨æ
LD HL,ram_pages ; ¡ãä¥à ¤«ï ¯¥à¥ç¨á«¥­¨ï áâà ­¨æ
RST ToBIOS
RET C ; § ¢¥à襭¨¥ - ®è¨¡ª  ¢ ID ¡«®ª 
LD A,B
CP 4
SCF
RET NZ ; § ¢¥à襭¨¥ - ­¥ª®à४⭮¥ ª®«-¢® ¡«®ª®¢
CCF
RET
;*******************************************************
; _ _ ____ __
; | | ___ __ _ __| | / ___|___ _ __ / _|
; | | / _ \ / _` |/ _` | | | / _ \| '_ \| |_
; | |__| (_) | (_| | (_| | | |__| (_) | | | | _|
; |_____\___/ \__,_|\__,_| \____\___/|_| |_|_|
; ‡ £à㦠¥¬ ¯à®è¨¢ªã ¢ ¯ ¬ïâì
;<3B>à®æ¥¤ãà  éñ«ª ¥â PAGE3 ¡¥§ á®åà ­¥­¨ï/¢®ááâ ­®¢«¥­¨ï
; ¯à¥¤ë¤ã饣® á®áâ®ï­¨ï.
;-----------------;
Load_conf: LD HL,ram_pages
LD B,4
.loop: LD A,(HL)
OUT (SLOT3),A
PUSH HL
PUSH BC
; CALL .loopRead
; ; <20> à ¬¥âàë: DE - ᪮«ìª® áç¨â âì ¢ áâà ­¨æã
LD A,(ConfHandler) ;   ªã¤  £à㧨âì - à ááç¨â뢠¥âáï (#0000 - DE)
LD HL,SLOT3.MEM_ADDR
LD DE,SLOT1.MEM_ADDR
LD C,Dss.Read
RST ToDSS
POP BC
POP HL
RET C
AND A ; ¤®á⨣­ãâ ª®­¥æ ä ©« ?
RET NZ ; ¥á«¨ A<>0, â® ¤ . ‚ë室
INC HL
DJNZ .loop
RET
;*******************************************************
; ____ _ _
; / ___| ___| |_ / \ ___ _____ __
; \___ \ / _ \ __| / _ \ / __/ _ \ \/ /
; ___) | __/ |_ / ___ \ (_| __/> <
; |____/ \___|\__| /_/ \_\___\___/_/\_\
; <09>¥à¥ª¨¤ë¢ ¥¬ ¯à®è¨¢ªã ¢ ªíè ¨ ®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì,
; ¥á«¨ ­¥â ¢â®à®© ¯à®è¨¢ª¨
; (???®á¢®¡®¦¤¥­¨¥ ¯ ¬ï⨠­¥¤®¤¥« ­­®???)
;-----------------;
; Set_Acex_Data:
; DI
; IN A,(FastRAM.ON) ; ‚ª«î祭¨¥ ªíè 
; LD A,(ram_pages)
; OUT (SLOT1),A ; áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
; XOR A
; OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 0
; LD HL,#5000 ; ¯¥à¥ª¨¤ë¢ ­¨¥ ¤ ­­ëå ¢ áâà ­¨æã Š<>˜ = 0
; LD DE,#1000
; LD BC,#3000
; LDIR
; INC A
; OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 1
; LD A,(ram_pages+1)
; OUT (SLOT1),A ; á«¥¤ãîé ï áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
; LD H,D ; LD HL,4000h
; LD D,E ; LD DE,0000h
; LD B,H ; LD BC,4000h
; LDIR
; LD A,2
; OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 2
; LD A,(ram_pages+2)
; OUT (SLOT1),A ; á«¥¤ãîé ï áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
; EX DE,HL ; LD HL,4000h
; LD D,E ; LD DE,0000h
; LD B,H ; LD BC,4000h
; LDIR
; LD A,3
; OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 3
; LD A,(ram_pages+3)
; OUT (SLOT1),A ; á«¥¤ãîé ï áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
; LD H,D ; LD HL,4000h
; LD D,E ; LD DE,0000h
; LD BC,#3EDF
; LDIR
; LD HL,Reload_String ; ä« £ ¯¥à¥§ £à㧪¨ ¨§ Š<>˜- 
; LD DE,#3EF0
; LD C,#10 ; LD BC, 16
; LDIR
; LD HL,(ConfMultKeys) ; …᫨ âãâ ãáâ ­ ¢«¨¢ ¥¬ ­¥ 'IM' ª«îç¨
; LD A,(l_key) ; â® "no multiple! ¯¥à¥§ £à㧪  ⮫쪮 ®¤­ ",
; AND A ; ¨­ ç¥ - å§, ¥éñ ­¥ ¯à®¡®¢ «.
; JR Z,1F
; LD HL,(ConfMultKeys+2)
; 1: LD (#3EE0),HL
; LD A,(page1_save) ; ¢®§¢à â áâà ­¨æë 1
; OUT (SLOT1),A
; XOR A ; Žâª«î祭¨¥ ªíè 
; OUT (FastRAM.SLOT0),A ; ¯¨è¥¬ ¢ FastRAM.SLOT0 ­®«ì, ¨­ ç¥ ¢
; IN A,(FastRAM.OFF) ; ­ã«¥¢®¥ ®ª­® ¡¨®á ¨«¨ „‘‘ ­¥ ¢®âª­ãâáï
; RET
;*******************************************************
; ____ _ ____ _____ _____
; / ___| ___| |_ | _ \| ____|_ _|
; \___ \ / _ \ __| | |_) | _| | |
; ___) | __/ |_ | _ <| |___ | |
; |____/ \___|\__| |_| \_\_____| |_|
; <09> áâனª¨ ¯¥à¥¤ à¥á¥â®¬
; “áâ ­®¢ª   ¤à¥á  ¢®§¢à â  ¯®á«¥ reboot
; ‘®åà ­¥­¨¥  ªâ¨¢­ëå áâà ­¨æ
; €¤à¥á ¯à®£à ¬¬ë ¤«ï ¢®§¢à â  ¢ ॣ¨áâॠDE
;-----------------;
; Set_Ret:
; DI
; LD A,Spec_Page
; OUT (SLOT3),A ; ®âªàëâì ᯥæ-áâà ­¨æã
; LD (#FFF3),A ; á®å࠭塞 ¢ ᯥæáâà ­¨æã ­®¬¥à Spec_Page
; LD (#FFF4),DE ;  ¤à¥á ¯à®£à ¬¬ë ¯¥à¥§ ¯ã᪠
; LD DE,#FFF0 ; á®å࠭塞 áâà ­¨æë 0-2 ¢ ᯥæáâà ­¨æ¥
; LD HL,page0_save
; LDI
; LDI
; LDI
; LD A,'Z' ; ä« £¨ ¯¥à¥§ ¯ã᪠
; LD (#FFFE),A
; LD A,'X'
; LD (#FFFF),A
; LD A,(page3_save) ; ‚®ááâ ­ ¢«¨¢ ¥¬ ­ ç «ì­ãî áâà ­¨æã 3
; OUT (SLOT3),A
; EI
; RET
;*******************************************************
;(.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.)
; <09>®¤£à㧪  ä ©«  á ¯¥à¥¬¥­­ë¬¨, ª®­áâ ­â ¬¨ ¨ ¡ãä¥à ¬¨:
INCLUDE "Consts.inc"
;
the_end EQU $
;
IF (the_end>(stack_point-SP_Win))
DISPLAY "the_end = ",/H,the_end
DISPLAY "ST_Point-SP_Win = ",/H,(stack_point-SP_Win)
ASSERT 0, "Code + Stack = Love!!! ((((("
ENDIF
IF (LastHandler=FirstHandler) or ((LastHandler-FirstHandler)>255)
DISPLAY "FirstHandler = ",/H,FirstHandler
DISPLAY "LastHandler = ",/H,LastHandler
ASSERT 0, "Š®áïª ¢ ¡«®ª¥ åà ­¥­¨ï 奭¤«¥à®¢!!!"
ENDIF
;(.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.)