LDConf/LDCONF.ASM
Anatoliy Belyanskiy 5f12519089 Setup
2023-06-15 03:12:54 +10:00

981 lines
27 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.

; _ ____ ____ __
; | | | _ \ / ___|___ _ __ / _|
; | | | | | | | / _ \| '_ \| |_
; | |___| |_| | |__| (_) | | | | _|
; |_____|____/ \____\___/|_| |_|_|
; _____ ____ _ _ ____ _
; | ___|__ _ __ / ___| _ __ _ __(_)_ __ | |_ ___ _ __ / ___|___ _ __ ___ _ __ _ _| |_ ___ _ __
; | |_ / _ \| '__| \___ \| '_ \| '__| | '_ \| __/ _ \ '__| | | / _ \| '_ ` _ \| '_ \| | | | __/ _ \ '__|
; | _| (_) | | ___) | |_) | | | | | | | || __/ | | |__| (_) | | | | | | |_) | |_| | || __/ |
; |_| \___/|_| |____/| .__/|_| |_|_| |_|\__\___|_| \____\___/|_| |_| |_| .__/ \__,_|\__\___|_|
; |_| |_|
;*******************************************************
;
; Œ ªà®áë
MACRO TraceMSG tr_mess
LD HL,tr_mess
CALL PrintStr
ENDM
MACRO iDontKnow
;-----------------; ’ ©­ë¥ ¬ ­¨¯ã«ï樨
; DI
; LD A,CNF_3
; OUT (SYS_PORT_OFF),A
;-----------------; ‚®§¬®¦­®, çâ® ­¥ ­ã¦­® íâ®????????
; LD A,3 ; ãáâ ­®¢ª  ¢­ãâà.¯®à⮢ Z84C15 ¤«ï ¯¥à¥§ £à㧪¨
; OUT (#EE),A
; OUT (#EF),A ; CASH & ROM
;-----------------;
ENDM
;
; ‚¥àá¨ï ¯à®£¨ ¨ ¨­ä® ¤«ï ¯®­â®¢:
DEFINE Ver_ID "0.3 alpha"
DEFINE e_mail "Tolik.Trek@gmail.com"
; <20>®¤£à㧪  ä ©«  á ª®­áâ ­â ¬¨ BIOS ¨ DSS:
INCLUDE "SP2000.inc"
; <20>®¤£à㧪  ä ©«  á ®è¨¡ª ¬¨)))
INCLUDE "Errors_MSG.mac"
;
ST_Point EQU #BFFE ;  ¤à¥á á⥪ 
SP_Win EQU 64 ; ¬­¨¬ë© ª®­âà®«ì ¯¥à¥á¥ç¥­¨ï á⥪  á ª®¤®¬
ORG_Addr EQU #8100 ;  ¤à¥á ª®¬¯¨«ï樨. DSS ¢áâ ¢«ï¥â áâபã
; á ¯ à ¬¥âà ¬¨ § ¯ã饭­®£® EXE ¯¥à¥¤
;  ¤à¥á®¬ § £à㧪¨ START, ¯®í⮬ã
; £à㧨¬áï ­¥ á ­ ç «  áâà ­¨æë.
; _______ _______ ____ __ _
; | ____\ \/ / ____| | _ \ _ __ ___ / _(_)_ __
; | _| \ /| _| | |_) | '__/ _ \ |_| \ \/ /
; | |___ / \| |___ | __/| | | __/ _| |> <
; |_____/_/\_\_____| |_| |_| \___|_| |_/_/\_\
;-----------------;
ORG ORG_Addr-#200
; ‘­ ç «  ¢ 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)
BLOCK 490 ; Reserved. „®¡¨¢ª  ¤® ª®­æ  ᥪâ®à  (512 ¡ ©â). Œ®¦¥â ¨á¯®«ì§®¢ âìáï ¢ ­®¢ëå ¢¥àá¨ïå DSS
;*******************************************************
; __ __ _
; | \/ | __ _(_)_ __
; | |\/| |/ _` | | '_ \
; | | | | (_| | | | | |
; |_| |_|\__,_|_|_| |_|
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,(PAGE0)
LD (page0_save),A
IN A,(PAGE1)
LD (page1_save),A
IN A,(PAGE2)
LD (page2_save),A
IN A,(PAGE3)
LD (page3_save),A
;-----------------;
;-----------------; ‘®å࠭塞 ­ áâனª¨ íªà ­ 
push ix
ld c,51h
rst 10h
pop ix
jp nc,1f
LD HL,error_Vmode
JP BadExit
1:
ld (VMod),a
ld a,b
ld (VModPage),a
;-----------------;
;-----------------; ‘®å࠭塞 §­ ç¥­¨¥ ¯®àâ  #1FFD
LD BC,1FFDh
IN A,(C)
ld (port_1ffd_save),a
;-----------------;
;-----------------; ‘®å࠭塞 ¤¥ä®«â­ë¥ áâà ­¨æë
DI
LD A,Spec_Page
OUT (PAGE3),A ; ®âªàëâì ᯥæ-áâà ­¨æã
ld hl,#FFF0
ld de,page0_def
ldi
ldi
ldi
ldi
LD A,(page3_save)
OUT (PAGE3),A ; ¢¥à­ãâì áâà ­¨æã
EI
;-----------------;
;-----------------;
LD (dss_line),IX ; ‘®å࠭塞 㪠§ â¥«ì ­  áâப㠧 ¯ã᪠.
LD A,(IX) ; âãâ DSS ª« ¤ñâ ¤«¨­ã ¯ à ¬¥â஢ ª®¬.áâப¨
AND A ; ¯à®¢¥à塞 ­  ®âáãâá⢨¥ ¯ à ¬¥â஢
JP NZ,1F ; § ¯ã᪠ ¢ ª®¬.áâப¥. …᫨ ¨å ­¥â,
LD HL,Help_Msg ; â® ¯¥ç â ¥¬ ¨­áâàãªæ¨î ¨ ¢ë室¨¬
CALL 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:
IFDEF debug : if debug : TraceMSG trace_msg1 : endif : endif
;
CALL TestConf ; ¯à®¢¥àª  ª®­äë. ­  ¢ë室¥ CF=0 - ­¥â ®è¨¡ª
JR NC,1F ; F=1 - ¥áâì ®è¨¡ª 
LD HL,error_confFile ; …᫨ ª®áïª á ä ©«®¬ ¯à®è¨¢ª¨
JP BadExit ; â® ¢ë室 á ®è¨¡ª®©
;-----------------;
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ TestConf
1:
IFDEF debug : if debug : TraceMSG trace_msg2 : endif : endif
;
CALL TakeMem ; ‚뤥«¥­¨¥ ¯ ¬ï⨠¤«ï ª®­äë 65536 ¡ ©â
JR NC,1F
LD HL,error_freeMem ; …᫨ ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
JP BadExit ; â® ¢ë室 á ®è¨¡ª®©
;-----------------;
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ TakeMem
1:
IFDEF debug : if debug : TraceMSG trace_msg3 : endif : endif
;
CALL Load_conf ; —¨â ¥¬ ¯à®è¨¢ªã ¨§ ä ©«  (¬¥­ï¥â PAGE3)
LD A,(page3_save) ; ¢®ááâ ­ ¢«¨¢ ¥¬ áâà ­¨æã
OUT (PAGE3),A ; ¯ ¬ï⨠¯®á«¥ ᬥ­ë
JR NC,1F
LD HL,error_readConf ; …᫨ ®è¨¡ª  ¯à¨ ç⥭¨¨ ¯à®è¨¢ª¨ ¨§ ä ©« 
JP BadExit ; â® ¢ë室 á 祬? <20>à ¢¨«ì­®, á ®è¨¡ª®©
;-----------------;
;-----------------; ¥á«¨ ­®à¬. § ¢¥à襭¨¥ Load_conf
1:
IFDEF debug : if debug : TraceMSG trace_msg4 : endif : endif
;
; IFDEF sprinter : if sprinter : iDontKnow : endif : endif
;
LD DE,ReloadRET ; €¤à¥á އ<E280A1>€ ¯®á«¥ ¯¥à¥§ £à㧪¨
LD (SP_Save),SP ; á®å࠭塞 á⥪
CALL Set_Ret ; ãáâ ­®¢ª  ¤ ­­ëå ¤«ï ¢®§¢à â 
;
IFDEF debug : if debug : TraceMSG trace_msg5 : endif : endif
;
CALL Set_Acex_Data ; ¯¥à¥£à㧪  ¤ ­­ëå ACEX ¢ FAST-RAM
; <20>®á«¥ í⮩ ¯à®æ¥¤ãàë å¨âன ^^^^^^ ­ ç¨­ îâáï £«îª¨
; á ¢ë§®¢®¬ ¯à®æ¥¤ãà DSS. —ñâ ®­  â ¬ ¬ã¤à¨â á ¯®àâ ¬¨
; ¨«¨ á ¯ ¬ïâìî, ­¥ à §®¡à «áï. <20>®í⮬㠯®á«¥ ­¥ñ «ãçè¥
; áà §ã ¢ à¥á¥â á £®«®¢®© ¨ ­¥ ¯ à¨âìáï...
;-----------------;
IFDEF debug : if debug : TraceMSG trace_msg6 : endif : endif
;-----------------; 7 ¡¥¤ - 1 à¥á¥â
RESET:
DI
LD A,16
LD BC,1FFDh
OUT (C),A
LD A,0A0h
OUT (PAGE3),A
LD (0C000h),A ; ¢ íâ®â ¬®¬¥­â ¯®¤ ¥âáï RESET
DI ; £«îª®ã«®¢¨â¥«ì
HALT
/*
DI
IN A,(PAGE1) ; ®âªàë⨥ ¯®àâ  á¡à®á 
PUSH AF
LD A,40h
OUT (PAGE1),A ; set DCP page
LD A,2Eh
LD (#4400),A ; open for WR
LD (#4600),A ; open for RD
POP AF
OUT (PAGE1),A ; Close PAGE1 ???????
RESET_LOOP: ; 横« á¡à®á 
LD BC,#0100
OUT (C),C
LD BC,#0000
OUT (C),C
JR RESET_LOOP ; ¯®«­®áâìî § æ¨ª«¨âì!
HALT ; ¯ë«¥ã«®¢¨â¥«ì
*/
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; ____ _ _ ____ _
; | _ \ _ __(_)_ __ | |_ / ___|| |_ _ __
; | |_) | '__| | '_ \| __| \___ \| __| '__|
; | __/| | | | | | | |_ ___) | |_| |
; |_| |_| |_|_| |_|\__| |____/ \__|_|
; <09>¥ç âì áâப¨. €¤à¥á áâப¨ ¢ HL
;-----------------;
PrintStr:
LD C,#5C
RST 10h
RET
;*******************************************************
; ____ _ _ ____ _____ _____
; | _ \ ___| | ___ __ _ __| | | _ \| ____|_ _|
; | |_) / _ \ |/ _ \ / _` |/ _` | | |_) | _| | |
; | _ < __/ | (_) | (_| | (_| | | _ <| |___ | |
; |_| \_\___|_|\___/ \__,_|\__,_| |_| \_\_____| |_|
; Œ¥áâ®, ªã¤  ¡ã¤¥â ¢®§¢à â ¯®á«¥
; ¯¥à¥§ £à㧪¨ ­®¢®© ¯à®è¨¢ª¨
;-----------------;
ReloadRET:
DI
LD SP,(SP_Save)
LD A,CNF_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“
OUT (SYS_PORT_OFF),A
LD A,(page0_save) ; SET PAGE DOS
OUT (PAGE0),A
LD A,(page3_save) ; ¢®§¢à â áâ à®© áâà ­¨æë PAGE3
OUT (PAGE3),A
;-----------------;
;-----------------; <20> ¡®â  ¯à®£à ¬¬ë á ­®¢®© ¯à®è¨¢ª®©
ld a,(e_key)
and a
jp z,1F
ld hl,EXEfileBuff ; ‡ ¯ã᪠EXE
ld bc,0040h
rst 10h
;-----------------;
;-----------------;
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,(CASH_ON) ; ‚ª«î祭¨¥ ªíè 
LD BC,1FFDh
XOR A
OUT (C),A ; ®âª«îç¨âì RAM-0
LD A,CNF_0
OUT (SYS_PORT_ON),A ; DCP-PAGE 0
LD A,3
OUT (CASH_PAGE),A ; ‘âà ­¨æ  Š<>˜ = 3
LD A,#FF
ld (#3ef0),a ; § â¨à ­¨¥ ACEX_K30_LOADING
LD (#3EE0),a ; § â¨à ­¨¥ "IM" ä« £ 
call page0_restore ; ‚®§¢à â ­  ¬¥áâ® ­ã«¥¢®© áâà ­¨æë
jp NextReloadRET
;*******************************************************
; _ _ _
; | \ | | _____ _| |_
; | \| |/ _ \ \/ / __|
; | |\ | __/> <| |_
; |_| \_|\___/_/\_\\__|
; ____ _ _ ____ _____ _____
; | _ \ ___| | ___ __ _ __| | | _ \| ____|_ _|
; | |_) / _ \ |/ _ \ / _` |/ _` | | |_) | _| | |
; | _ < __/ | (_) | (_| | (_| | | _ <| |___ | |
; |_| \_\___|_|\___/ \__,_|\__,_| |_| \_\_____| |_|
; <09>®¤£®â®¢ª  ª § ¢¥à襭¨î ¯®á«¥ à¥á¥â  ¨
; ¢®§¢à â  த­®© ¯à®è¨¢ª¨
;-----------------;
NextReloadRET:
DI
;
;-----------------; ‡ â¨à ¥¬ á«¥¤ë ­¥á⮪®¢®© ª®­äë
LD A,Spec_Page
OUT (PAGE3),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)
; LD (0FFF2h),A ; ¯à®£à ¬¬ë ¤«ï ¢®§¢à â ???
/*
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_0 ; ª®­ä¨£ãà æ¨ï ¨ ®âª«î祭¨¥ <20>‡“
OUT (SYS_PORT_OFF),A
LD A,(page0_save) ; SET PAGE DOS
OUT (PAGE0),A
LD A,(page1_save)
OUT (PAGE1),A
; ƒ«ï­ãâì, ¬®¦¥â ­¥ ­ ¤® ¢®§¢à é âì ®¤­ã ¨§ áâà ­¨æ???
LD A,(page3_save)
OUT (PAGE3),A
JP NormExit
;*******************************************************
; _____ _ _ ____ _
; | ____|_ _(_) |_ | _ \ _ __ ___ ___( )___
; | _| \ \/ / | __| | |_) | '__/ _ \ / __|// __|
; | |___ > <| | |_ | __/| | | (_) | (__ \__ \
; |_____/_/\_\_|\__| |_| |_| \___/ \___| |___/
;-----------------;
NormExit:
LD HL,WellDone
CALL PrintStr
LD B,0
CALL Exit
;-----------------;
BadExit: ; HL áâப  á ®è¨¡ª®©
CALL PrintStr
LD B,1 ; ª®¤ ®è¨¡ª¨
CALL Exit
;-----------------;
;-----------------;
Exit:
LD A,CNF_0 ;??????
OUT (SYS_PORT_OFF),A
;
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 10h
POP BC
POP HL
1: INC HL
DJNZ .loop
;-----------------;
;-----------------; ®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì, ¥á«¨ ª«ï­ç¨«¨
ld c,#C3
ld a,(ram_blk_id)
cp 0
jr z,1F
rst 8
;-----------------;
;-----------------; ¢®ááâ ­ ¢«¨¢ ¥¬ íªà ­
ld c,53h
rst 10h
push de
ld a,(VModPage)
ld b,a
ld a,(VMod)
ld c,50h
rst 10h
ld c,52h
pop de
rst 10h
;-----------------;
;-----------------; ‚ë室 ¢ DOS
1:
POP BC
LD C,41h
RST 10h
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 10h
RET C ; ®è¨¡ª  ¢ áâப¥
AND %00000011 ; ¯à®¢¥à塞, çâ® ¥áâì ¨¬ï ¨
XOR %00000011 ; à áè¨à¥­¨¥ ä ©«  (0 ¨ 1 ¡¨âë)
SCF
RET NZ ; ®è¨¡ª  ä ©«  - ¢ë室
LD A,0
LD C,11h
LD HL,Buffer
RST 10h ; ®âªàë⨥ ä ©« 
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 10h ; ä ©«  ¢ ®â¤¥«ì­ë© ¡ãä¥à ­  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 10h
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 10h ; ¤«ï áà ¢­¥­¨ï á è ¡«®­®¬
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 10h ; ãáâ ­®¢ª  㪠§ â¥«ï ¢ ä ©«¥
RET
;*******************************************************
; _____ _ __ __
; |_ _|_ _| | _____ | \/ | ___ _ __ ___
; | |/ _` | |/ / _ \ | |\/| |/ _ \ '_ ` _ \
; | | (_| | < __/ | | | | __/ | | | | |
; |_|\__,_|_|\_\___| |_| |_|\___|_| |_| |_|
; ‚뤥«ï¥¬ ¯ ¬ïâì ¯®¤ § £à㧪㠯à®è¨¢ª¨ - 64 ª¡
;-----------------;
TakeMem:
LD BC,#04C2 ; ‡ ¯à®á ­  ¢ë¤¥«¥­¨¥ 64 Š¡ ¯ ¬ï⨠¯®¤ ª®­äã
RST 8
RET C ; § ¢¥à襭¨¥ - ­¥å¢ âª  ¯ ¬ïâ¨
LD (ram_blk_id),A ;
LD C,#C5 ; § ¯à®á ­®¬¥à®¢ ¢ë¤¥«¥­­ëå áâà ­¨æ
LD HL,ram_pages ; ¡ãä¥à ¤«ï ¯¥à¥ç¨á«¥­¨ï áâà ­¨æ
RST 8
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 (PAGE3),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 10h
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,(CASH_ON) ; ‚ª«î祭¨¥ ªíè 
LD BC,1FFDh
XOR A
OUT (C),A ; ®âª«îç¨âì RAM-0
LD A,CNF_0
OUT (SYS_PORT_ON),A ; DCP-PAGE 0
LD A,(ram_pages)
OUT (PAGE1),A ; áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
xor a
OUT (CASH_PAGE),A ; ‘âà ­¨æ  Š<>˜ = 0
LD HL,5000h ; ¯¥à¥ª¨¤ë¢ ­¨¥ ¤ ­­ëå ¢ áâà ­¨æã Š<>˜ = 0
LD DE,1000h
LD BC,3000h
LDIR
inc a
OUT (CASH_PAGE),A ; ‘âà ­¨æ  Š<>˜ = 1
LD A,(ram_pages+1)
OUT (PAGE1),A ; á«¥¤ãîé ï áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
ld h,d ; LD HL,4000h
ld d,e ; LD DE,0000h
ld b,h ; LD BC,4000h
LDIR
LD A,2
OUT (CASH_PAGE),A ; ‘âà ­¨æ  Š<>˜ = 2
LD A,(ram_pages+2)
OUT (PAGE1),A ; á«¥¤ãîé ï áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
ex de,hl ; LD HL,4000h
ld d,e ; LD DE,0000h
ld b,h ; LD BC,4000h
LDIR
LD A,3
OUT (CASH_PAGE),A ; ‘âà ­¨æ  Š<>˜ = 3
LD A,(ram_pages+3)
OUT (PAGE1),A ; á«¥¤ãîé ï áâà ­¨æ  á ¤ ­­ë¬¨ ä ©« 
ld h,d ; LD HL,4000h
ld d,e ; LD DE,0000h
LD BC,#3EDF
LDIR
LD HL,Reload_String ; ä« £ ¯¥à¥§ £à㧪¨ ¨§ Š<>˜- 
LD DE,3EF0h
LD C,10h ; 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 (PAGE1),A
call page0_restore ; ‚®§¢à â ­  ¬¥áâ® ­ã«¥¢®© áâà ­¨æë
RET
;*******************************************************
;-----------------;
;‚®ááâ ­®¢«¥­¨¥ 0-®© áâà ­¨æë
page0_restore:
xor a ; Žâª«î祭¨¥ ªíè 
OUT (CASH_PAGE),A ; ¯¨è¥¬ ¢ CASH_PAGE ­®«ì, ¨­ ç¥ ¢
IN A,(CASH_OFF) ; ­ã«¥¢®¥ ®ª­® ¡¨®á ¨«¨ „‘‘ ­¥ ¢®âª­ãâáï
LD A,CNF_0
OUT (SYS_PORT_OFF),A
LD BC,1FFDh
ld a,(port_1ffd_save)
OUT (C),A
ret
;-----------------;
; ____ _ ____ _____ _____
; / ___| ___| |_ | _ \| ____|_ _|
; \___ \ / _ \ __| | |_) | _| | |
; ___) | __/ |_ | _ <| |___ | |
; |____/ \___|\__| |_| \_\_____| |_|
; <09> áâனª¨ ¯¥à¥¤ à¥á¥â®¬
; “áâ ­®¢ª   ¤à¥á  ¢®§¢à â  ¯®á«¥ reboot
; ‘®åà ­¥­¨¥  ªâ¨¢­ëå áâà ­¨æ
; €¤à¥á ¯à®£à ¬¬ë ¤«ï ¢®§¢à â  ¢ ॣ¨áâॠDE
;-----------------;
Set_Ret:
DI
LD A,Spec_Page
OUT (PAGE3),A ; ®âªàëâì ᯥæ-áâà ­¨æã
LD (0FFF3h),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 (PAGE3),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)
Stack_Error 0
ENDIF
IF (LastHandler=FirstHandler) or ((LastHandler-FirstHandler) > 255)
DISPLAY "FirstHandler = ",/H,FirstHandler
DISPLAY "LastHandler = ",/H,LastHandler
Handler_Error 0
ENDIF
;(.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.) (.)(.)