LDConf/LDCONF.ASM
Anatoliy Belyanskiy fbcbd35a6b old_ver
2024-01-21 15:52:11 +10:00

894 lines
23 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.3 alpha"
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,#5C
RST ToDSS
ENDM
MACRO iDontKnow
;-----------------;
; LD A,3 ; ãáâ ­®¢ª  ¢­ãâà.¯®à⮢ Z84C15 ¤«ï ¯¥à¥§ £à㧪¨
; OUT (#EE),A
; OUT (#EF),A ; CASH & ROM
;-----------------;
ENDM
;----------------------------------------------------------------------;
ST_Point EQU #BFFE ;  ¤à¥á á⥪ 
SP_Win EQU 64 ; ¬­¨¬ë© ª®­âà®«ì ¯¥à¥á¥ç¥­¨ï á⥪  á ª®¤®¬
ORG_Addr EQU #8100 ;  ¤à¥á ª®¬¯¨«ï樨. DSS ¢áâ ¢«ï¥â áâபã
; á ¯ à ¬¥âà ¬¨ § ¯ã饭­®£® EXE ¯¥à¥¤
;  ¤à¥á®¬ § £à㧪¨ START, ¯®í⮬ã
; £à㧨¬áï ­¥ á ­ ç «  áâà ­¨æë.
; _______ _______ ____ __ _
; | ____\ \/ / ____| | _ \ _ __ ___ / _(_)_ __
; | _| \ /| _| | |_) | '__/ _ \ |_| \ \/ /
; | |___ / \| |___ | __/| | | __/ _| |> <
; |_____/_/\_\_____| |_| |_| \___|_| |_/_/\_\
;-----------------;
ORG ORG_Addr-22
; ‘­ ç «  ¢ EXE ä ©«¥ ¨¤ñâ § £®«®¢®ª
; ¤«¨­­®© ¢ 1 ᥪâ®à (512 ¡ ©â)
;-----------------;
DB 'EX' ; EXE ‘¨£­ âãà 
DB 'E' ; Reserved (EXE type)
DB 0 ; Version of EXE file
DW #0200 ; ª ª®£® ᬥ饭¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
DW #0000 ; ¯ ¬ïâì ¯®  ¤à¥áã (START) Low - 0200h, High - 0000.
DW #0000 ; <20> §¬¥à ¯¥à¢¨ç­®£® § £àã§ç¨ª  ¨«¨ 0
DW #0000 ; Reserved
DW #0000 ; Reserved
DW #0000 ; Reserved
DW START ; €¤à¥á à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨
DW START ; €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
DW ST_Point ; €¤à¥á á⥪  (Reg. SP)
;*******************************************************
; __ __ _
; | \/ | __ _(_)_ __
; | |\/| |/ _` | | '_ \
; | | | | (_| | | | | |
; |_| |_|\__,_|_|_| |_|
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,51h
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 DE,ReloadRET ; €¤à¥á އ<E280A1>€ ¯®á«¥ ¯¥à¥§ £à㧪¨
LD (SP_Save),SP ; á®å࠭塞 á⥪
CALL Set_Ret ; ãáâ ­®¢ª  ¤ ­­ëå ¤«ï ¢®§¢à â 
;
CALL Set_Acex_Data ; ¯¥à¥£à㧪  ¤ ­­ëå ACEX ¢ FAST-RAM
; <20>®á«¥ í⮩ ¯à®æ¥¤ãàë å¨âன ^^^^^^ ­ ç¨­ îâáï £«îª¨
; á ¢ë§®¢®¬ ¯à®æ¥¤ãà DSS. —ñâ ®­  â ¬ ¬ã¤à¨â á ¯®àâ ¬¨
; ¨«¨ á ¯ ¬ïâìî, ­¥ à §®¡à «áï. <20>®í⮬㠯®á«¥ ­¥ñ «ãçè¥
; áà §ã ¢ à¥á¥â á £®«®¢®© ¨ ­¥ ¯ à¨âìáï...
;-----------------;
;-----------------; 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,1F
; jp nz,NormExit
; jp nz,NextReloadRET
LD DE,NextReloadRET ;
LD (SP_Save),SP ; á®å࠭塞 á⥪
CALL Set_Ret ; ãáâ ­®¢ª  ¤ ­­ëå ¤«ï ¢®§¢à â 
JP RESET
1:
; ld a,(l_key)
; and a
; jr nz, NextReloadRET
DI
IN A,(FastRAM.ON) ; ‚ª«î祭¨¥ ªíè 
LD A,3
OUT (FastRAM.SLOT0),A ; ‘âà ­¨æ  Š<>˜ = 3
LD A,#FF
LD (#3EF0),A ; § â¨à ­¨¥ ACEX_K30_LOADING
LD (#3EE0),A ; § â¨à ­¨¥ "IM" ä« £ 
XOR A ; Žâª«î祭¨¥ ªíè 
OUT (FastRAM.SLOT0),A ; ¯¨è¥¬ ¢ FastRAM.SLOT0 ­®«ì, ¨­ ç¥ ¢
IN A,(FastRAM.OFF) ; ­ã«¥¢®¥ ®ª­® ¡¨®á ¨«¨ „‘‘ ­¥ ¢®âª­ãâáï
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
CALL Exit
;-----------------;
; HL áâப  á ®è¨¡ª®©
BadExit: _PrintStr
LD B,1 ; ª®¤ ®è¨¡ª¨
CALL 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
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 DE,#3000
LD HL,ram_pages
LD B,4
1:
LD A,(HL)
OUT (SLOT3),A
PUSH HL
PUSH BC
; CALL .loopRead
; ; <20> à ¬¥âàë: DE - ᪮«ìª® áç¨â âì ¢ áâà ­¨æã
LD A,(ConfHandler) ;   ªã¤  £à㧨âì - à ááç¨â뢠¥âáï (#0000 - DE)
LD HL,#0000
SBC HL,DE ; ’ã⠡㤥⠢ HL  ¤à¥á ªã¤ ,   ¢ DE ᪮«ìª® § £à㦠âì
LD C,13h
RST ToDSS
POP BC
POP HL
RET C
AND A ; ¤®á⨣­ãâ ª®­¥æ ä ©« ?
RET NZ ; ¥á«¨ A<>0, â® ¤ . ‚ë室
INC HL
LD DE,#4000
DJNZ 1B
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>(ST_Point-SP_Win))
DISPLAY "the_end = ",/H,the_end
DISPLAY "ST_Point-SP_Win = ",/H,(ST_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
;(.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.)