LDConf/LDCONF.ASM
2026-02-26 21:14:23 +10:00

835 lines
22 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.5 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
JP 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 ; ¯à®¢¥à塞 ­  ®âáãâá⢨¥ ¯ à ¬¥â஢
JP 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
LD A,#FE
LD C,BIOS.RST_CONF.CUSTOM
RST ToBIOS
JP ReloadRET
;-----------------;
;-----------------; 7 ¡¥¤ - 1 à¥á¥â
; RESET: DI
; LD A,DCP_PAGE
; OUT (SLOT1),A ; set DCP page
; LD A,ACEX.RESET
; LD (#4400),A ; open for WR
; LD (#4600),A ; open for RD
; ;
; .LOOP: LD BC,#100
; OUT (C),C
; LD B,0
; OUT (C),C
; JR .LOOP ; ¯®«­®áâìî § æ¨ª«¨âì!
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;
; ____ _ _ ____ _____ _____
; | _ \ ___| | ___ __ _ __| | | _ \| ____|_ _|
; | |_) / _ \ |/ _ \ / _` |/ _` | | |_) | _| | |
; | _ < __/ | (_) | (_| | (_| | | _ <| |___ | |
; |_| \_\___|_|\___/ \__,_|\__,_| |_| \_\_____| |_|
; Œ¥áâ®, ªã¤  ¡ã¤¥â ¢®§¢à â ¯®á«¥
; ¯¥à¥§ £à㧪¨ ­®¢®© ¯à®è¨¢ª¨
;-----------------;
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
JP Z,1F
LD HL,EXEfileBuff ; ‡ ¯ã᪠EXE
LD BC,0040h
RST ToDSS
;-----------------;
;-----------------;
1: ;DI
LD A,(a_key) ; ‚ë室 ¡¥§ ¢®ááâ ­®¢«¥­¨ï ¤¥ä®«â­®© ª®­äë?
AND A
JP NZ,NextReloadRET
LD B,0
LD A,#FE
LD C,BIOS.RST_CONF.CUSTOM
RST ToBIOS
JP NextReloadRET
;*******************************************************
; _ _ _
; | \ | | _____ _| |_
; | \| |/ _ \ \/ / __|
; | |\ | __/> <| |_
; |_| \_|\___/_/\_\\__|
; ____ _ _ ____ _____ _____
; | _ \ ___| | ___ __ _ __| | | _ \| ____|_ _|
; | |_) / _ \ |/ _ \ / _` |/ _` | | |_) | _| | |
; | _ < __/ | (_) | (_| | (_| | | _ <| |___ | |
; |_| \_\___|_|\___/ \__,_|\__,_| |_| \_\_____| |_|
; <09>®¤£®â®¢ª  ª § ¢¥à襭¨î ¯®á«¥ à¥á¥â  ¨
; ¢®§¢à â  த­®© ¯à®è¨¢ª¨
;-----------------;
NextReloadRET:
DI
;
;-----------------; ‡ â¨à ¥¬ á«¥¤ë ­¥á⮪®¢®© ª®­äë
; LD A,Spec_Page
; OUT (SLOT3),A ; ®âªàëâì ᯥæ-áâà ­¨æã
; LD H,#FF
; LD L,H
; LD SP,HL
; PUSH HL
; PUSH HL
; PUSH HL
; PUSH HL
; PUSH HL
; PUSH HL
; PUSH HL
; PUSH HL
; LD (0FFF3h),A ; á®å࠭塞 áâà ­¨æë
; ld A,(page0_save)
; LD (0FFF0h),A ; DOS-PAGE
; ld A,(page1_save)
; LD (0FFF1h),A
; ld A,(page2_save)
; XOR A ; ¢ëáâ ¢«ï¥¬ áâà ­¨æë, ª®â®àë¥ áâ ¢ïâáï ¯à¨ à¥á¥â¥
; LD (0FFF0h),A ; page 0
; LD A,5
; LD (0FFF1h),A ; page 1
; LD A,2
; LD (0FFF2h),A ; page 2
; LD A,40h
; LD (0FFF3h),A ; page 3
; XOR A
; LD D,A
; LD E,A
; LD (#FFF4),DE ;  ¤à¥á ¯à®£à ¬¬ë ¯¥à¥§ ¯ã᪠
; LD (#FFFE),DE ; ä« £ ¯¥à¥§ ¯ã᪠
; LD A,'Z'
; LD (#FFFE),A
; LD A,'X'
; LD (#FFFF),A ; ä« £ ¯¥à¥§ ¯ã᪠
;-----------------;
;
;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,(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,12h
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)
CP 0
JR Z,1F
LD C,#C3
RST ToBIOS
;-----------------;
;-----------------; ¢®ááâ ­ ¢«¨¢ ¥¬ íªà ­
LD C,53h
RST ToDSS
PUSH DE
LD A,(VModPage)
LD B,A
LD A,(VMod)
LD C,50h
RST ToDSS
LD C,52h
POP DE
RST ToDSS
;-----------------;
;-----------------; ‚ë室 ¢ DOS
1:
POP BC
LD C,41h
RST ToDSS
DI
HALT
;-----------------;
;*******************************************************
; ____ _ _
; / ___| ___| |_ | | _____ _ _ ___
; \___ \ / _ \ __| | |/ / _ \ | | / __|
; ___) | __/ |_ | < __/ |_| \__ \
; |____/ \___|\__| |_|\_\___|\__, |___/
; |___/
; <09>®«ãç ¥¬ ª«îç¨ § ¯ã᪠, à á¯¨å¨¢ ¥¬ ¨å ¯® 㣫 ¬,
; ­ áâà ¨¢ ¥¬ ­ ç «ì­ë¥ ãá«®¢¨ï à ¡®âë.
;-----------------;
Set_keys:
LD HL,(dss_line)
INC HL
LD (NextParameter),HL
.CheckChar:
CALL .GetParam
JP NC,1F
CCF ; …᫨ ¯®á«¥¤­¨© ¯ à ¬¥âà ¢ áâப¥ = 0
RET ; â® ¢ë室¨¬. <20> §¡®à ®ª®­ç¥­
1: LD A,(Buffer+1) ; ®á­®¢­®¬ 横«¥ CheckChar ¬ë
AND A ; ¦¤ñ¬ ⮫쪮 ®¤¨­ ᨬ¢®« ¢
JP 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>!
RET C ; ¢ë室, ¥á«¨ ®è¨¡ª 
JP .CheckChar ; ¯®£­ «¨ ­  á«¥¤ãî騩 ¢¨â®ª à §¡®à  ª«î祩
;-----------------;
;-----------------;
.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,#0045 ; ¯à®¢¥à塞 ¡ãä¥à ­  ª®à४⭮áâì ¨¬¥­¨ ä ©« 
LD HL,Buffer ; ????? ᤥ« âì ¯à®¢¥àªã ­  ª®à४⭮áâì ¢á¥£® ¯ãâ¨?????
RST ToDSS
RET C ; ®è¨¡ª  ¢ áâப¥
AND %00000011 ; ¯à®¢¥à塞, çâ® ¥áâì ¨¬ï ¨
XOR %00000011 ; à áè¨à¥­¨¥ ä ©«  (0 ¨ 1 ¡¨âë)
SCF
RET NZ ; ®è¨¡ª  ä ©«  - ¢ë室
LD A,0
LD C,11h
LD HL,Buffer
RST ToDSS ; ®âªàë⨥ ä ©« 
RET C ; ®è¨¡ª  ä ©«  - ¢ë室
LD (.fileHandler),A ; á®å࠭塞 奭¤«¥à
.fileHandler EQU $-2
;-----------------;
;-----------------; <20>஢¥à塞 ®¡à ¡ â뢠¥¬ë© ª«îç
key_save EQU $+1
LD A,#FF ; á ¢®âª­ñâáï §­ ç¥­¨¥ ¨§ ॣ¨áâà  C
XOR 1 ; ¥á«¨ 1, â® íâ® ª«îç "E"
RET NZ ; ¥á«¨ ­¥â, â® ¢ë室 ¨§ ¯à®æ¥¤ãàë.
;-----------------;
;-----------------; <20>஢¥àª  à áè¨à¥­¨ï ä ©« 
LD BC,#0445 ; ª«î箬 "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 ­  ¯à®¢¥àªã
JP 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:
LD A,0
LD (DE),A
LD A,(ExeHandler)
LD C,12h
RST 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,13h ; ç¨â ¥¬ ¢ ¡ãä¥à ¯¥à¢ë¥ 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 ­  ¯à®¢¥àªã
JP Z,2B ; ¥á«¨ ᨬ¢®« ᮢ¯ ¤ ¥â, â® ¯®¢â®à
3: ; á ¯®¯ ¤ñ¬ ª®£¤  BC=0 ¨«¨ ᨬ¢®« ­¥ ᮢ¯ «.
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
1: SCF
RET NZ
JP 3F
;
; ’ã⠯஢¥àª  ­  ­¥¯à¨¢ë襭¨¥ 61152 ¡ ©â 
2:
LD HL,(MaxConfSize)
PUSH IX
POP BC
SBC HL,BC
RET C
3:
LD B,0 ; ‚®§¢à é ¥¬ 㪠§ â¥«ì
CALL .set_fp ; ¢ ä ©«¥ ­  ¥£® ­ ç «®
RET
;-----------------;
.set_fp: ; ‚室­®¥ §­ ç¥­¨¥ ¢ ॣ¨áâॠB
LD A,(ConfHandler) ; •í­¤«¥à ä ©«  á ª®â®àë¬ á¥©ç á à ¡®â ¥¬
LD HL,0
LD IX,0
LD C,15h
RST ToDSS ; ãáâ ­®¢ª  㪠§ â¥«ï ¢ ä ©«¥
RET
;*******************************************************
; _____ _ __ __
; |_ _|_ _| | _____ | \/ | ___ _ __ ___
; | |/ _` | |/ / _ \ | |\/| |/ _ \ '_ ` _ \
; | | (_| | < __/ | | | | __/ | | | | |
; |_|\__,_|_|\_\___| |_| |_|\___|_| |_| |_|
; ‚뤥«ï¥¬ ¯ ¬ïâì ¯®¤ § £à㧪㠯à®è¨¢ª¨ - 64 ª¡
;-----------------;
TakeMem:
LD BC,#04C2 ; ‡ ¯à®á ­  ¢ë¤¥«¥­¨¥ 64 Š¡ ¯ ¬ï⨠¯®¤ ª®­äã
RST ToBIOS
RET C ; § ¢¥à襭¨¥ - ­¥å¢ âª  ¯ ¬ïâ¨
LD (ram_blk_id),A
LD C,#C5 ; § ¯à®á ­®¬¥à®¢ ¢ë¤¥«¥­­ëå áâà ­¨æ
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,#C000
LD DE,#4000
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
;(.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.)