mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
294 lines
5.8 KiB
NASM
294 lines
5.8 KiB
NASM
;[BEGIN]
|
||
;//MODULE: ENVIRON
|
||
;//CREATE: 10-11-2002 AUTHOR: Denis Parinov
|
||
;---------------------------------------------------------------
|
||
;Rev Date Name Description
|
||
;---------------------------------------------------------------
|
||
;R02 13-05-2023 BAO ˆ¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥®© BOOTDSK ¯à¨ áâ àâ¥
|
||
;R03 09-03-2007 VAS ”ãªæ¨ï ENV_EX ⥯¥àì ®¡à¥§ ¥â ᫨誮¬ ¤«¨ãî áâப㠯¥à¥¤ ¢ë室®¬
|
||
;R01 19-11-2002 DNS CORRECT DE ADDRESS IN GETENV
|
||
;---------------------------------------------------------------
|
||
|
||
;/////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #46. ‘¨á⥬®¥ ®ªà㦥¨¥.
|
||
;
|
||
; ¢å®¤: B - ®¬¥à ¯®¤äãªæ¨¨:
|
||
; B=#FF, ¨¨æ¨ «¨§ æ¨ï
|
||
; B=0, ¯®«ã票¥ á¨á⥬®£® ®ªà㦥¨ï.
|
||
; HL - ¡ãä¥à
|
||
; B=1, ¯®«ãç¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï.
|
||
; HL - ¨¬ï ¯¥à¥¬¥®©
|
||
; DE - ¡ãä¥à ¤«ï § ç¥¨ï ¯¥à¥¬¥®©
|
||
; B=2, ãáâ ®¢¨âì/㤠«¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï
|
||
; HL - <20>…<EFBFBD>…Œ…<C592><E280A6>€Ÿ=‡<>€—…<E28094>ˆ…
|
||
; ‚ ª®æ¥ áâப¨ ®«ì.
|
||
|
||
; ¢ë室: A - á®áâ®ï¨¥, ¥á«¨ CF=0
|
||
; DE - 㪠§ë¢ ¥â ª®¥æ ¡ãä¥à (⮫쪮 ¤«ï B=1)
|
||
; A=#FF - ¯¥à¥¬¥ ï ®¡ à㦥
|
||
; A=0 - ¯¥à¥¬¥ ï ¥ ®¡ à㦥
|
||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
;/////////////////////////////////////////////////////////////////////
|
||
ENVIRON:
|
||
INC B
|
||
JR Z,INITENV ; B=#FF
|
||
DEC B
|
||
JR Z,READENV ; B=0. ¯®«ãç¨âì á¨áâ. ®ªà㦥¨¥
|
||
DEC B
|
||
JP Z,GETENV ; B=1. ¯®«ãç¨âì ¯¥à¥¬. ®ªà㦥¨ï
|
||
DEC B
|
||
JP Z,SETENV ; B=2. ãáâ ®¢¨âì/㤠«¨âì ¯¥à¥¬. ®ªà㦥¨ï
|
||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||
SCF
|
||
RET
|
||
|
||
;-------------------------------------------------
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¡ãä¥à ¯¥à¥¬¥ëå ®ªà㦥¨ï
|
||
;-------------------------------------------------
|
||
INITENV:
|
||
SET_PAGE_X ENVPAGE
|
||
PUSH AF
|
||
;
|
||
;R02
|
||
LD A,(BOOTDRV)
|
||
ADD A,'A'
|
||
LD (DEFAULT_ENV.boot_disk),A
|
||
;
|
||
LD DE,ENVIRONMENT ; ç «® ¡ãä¥à ¯¥à¥¬¥ëå ®ªà㦥¨ï
|
||
XOR A
|
||
LD (DE),A
|
||
INC DE
|
||
LD HL,DEFAULT_ENV
|
||
LD BC,DEF_ENV_SIZE
|
||
LDIR
|
||
LD (DE),A
|
||
EX DE,HL
|
||
LD DE,ENVIRONMENT
|
||
AND A
|
||
SBC HL,DE
|
||
LD (ENVSIZE),HL
|
||
;
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
AND A
|
||
RET
|
||
|
||
;-------------------------------------------------
|
||
; <20>®«ãç¨âì á¨áâ. ®ªà㦥¨¥
|
||
;-------------------------------------------------
|
||
READENV:
|
||
PUSH HL
|
||
|
||
SET_PAGE_X ENVPAGE
|
||
|
||
LD H,A
|
||
LD C,SLOT3
|
||
IN L,(C)
|
||
EXX
|
||
|
||
LD HL,ENVIRONMENT
|
||
INC HL
|
||
POP DE
|
||
LD BC,(ENVSIZE)
|
||
EXX
|
||
;
|
||
.loop: OUT (C),L
|
||
EXX
|
||
LD A,(HL)
|
||
EXX
|
||
OUT (C),H
|
||
EXX
|
||
LD (DE),A
|
||
INC HL
|
||
INC DE
|
||
DEC BC
|
||
LD A,B
|
||
OR C
|
||
EXX
|
||
JR NZ,.loop
|
||
//XOR A
|
||
;A=0
|
||
RET
|
||
|
||
;-------------------------------------------------
|
||
; <20>®«ãç¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï
|
||
;-------------------------------------------------
|
||
GETENV: PUSH DE
|
||
CALL ENV_EX ; ᪮¯¨à. áâப㠯¥à¥¬. ®ªàã¦. ¢ ¡ãä¥àë
|
||
|
||
SET_PAGE_X ENVPAGE
|
||
EX AF,AF'
|
||
|
||
CALL F_ENV ; RET: DE - VAR VALUE; HL - VAR ADDRESS; BC - ENVIRONMENT SIZE
|
||
POP DE
|
||
LD A,0
|
||
LD (DE),A
|
||
JR NC,.exit
|
||
.loop: LD A,(HL)
|
||
LDI
|
||
OR A
|
||
JR NZ,.loop
|
||
DEC DE ;R01
|
||
LD A,#FF
|
||
|
||
.exit: EX AF,AF'
|
||
OUT (SLOT3),A
|
||
EX AF,AF'
|
||
AND A
|
||
RET
|
||
|
||
;-------------------------------------------------
|
||
; “áâ ®¢¨âì/“¤ «¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï
|
||
;
|
||
; ¢å®¤: hl=¨¬ï ¯¥à¥¬. ¨ § 票¥, à §¤¥«. ᨬ¢®«®¬ "="
|
||
;-------------------------------------------------
|
||
SETENV: CALL ENV_EX ; ᪮¯¨à. áâப㠯¥à¥¬. ®ªàã¦. ¢ ¡ãä¥àë
|
||
|
||
SET_PAGE_X ENVPAGE
|
||
PUSH AF
|
||
|
||
CALL F_ENV ; RET: DE - VAR VALUE; HL - VAR ADDRESS; BC - ENVIRONMENT SIZE
|
||
JR NC,PENV
|
||
XOR A
|
||
CPIR
|
||
LD A,B
|
||
OR C
|
||
JR Z,PENV
|
||
LDIR
|
||
PENV LD A,(ENVVALUE)
|
||
OR A
|
||
JR Z,CLR_ENV
|
||
LD HL,ENVNAME
|
||
F_EVN2 LD A,(HL)
|
||
LDI
|
||
CP "="
|
||
JR NZ,F_EVN2
|
||
LD HL,ENVVALUE
|
||
F_EVN3 LD A,(HL)
|
||
LDI
|
||
OR A
|
||
JR NZ,F_EVN3
|
||
CLR_ENV XOR A
|
||
LD (DE),A
|
||
LD HL,ENVIRONMENT
|
||
EX DE,HL
|
||
SBC HL,DE
|
||
LD (ENVSIZE),HL
|
||
;
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
AND A
|
||
RET
|
||
|
||
|
||
; RET:
|
||
; DE - VAR VALUE
|
||
; HL - VAR ADDRESS
|
||
; BC - ENVIRONMENT SIZE
|
||
F_ENV LD HL,ENVIRONMENT
|
||
LD BC,(ENVSIZE)
|
||
PUSH HL
|
||
F_EVN0 POP DE
|
||
LD DE,ENVNAME
|
||
XOR A
|
||
CPIR
|
||
PUSH HL
|
||
F_EVN1 LD A,(HL)
|
||
OR A
|
||
JR Z,END_OF_ENV
|
||
LD A,(DE)
|
||
CP (HL)
|
||
INC HL
|
||
INC DE
|
||
DEC BC
|
||
JR NZ,F_EVN0
|
||
CP "="
|
||
JR NZ,F_EVN1
|
||
SCF
|
||
END_OF_ENV
|
||
POP DE
|
||
RET
|
||
|
||
;-----------------------------------------------------------
|
||
; ‘ª®¯¨à®¢ âì áâப㠯¥à¥¬¥®© ®ªà㦥¨ï ¢ ¡ãä¥àë
|
||
; (¨¬ï ¨ § 票¥ ¢ à §ë¥ ¡ãä¥àë)
|
||
; ¢å®¤: hl=¨¬ï ¯¥à¥¬. ¨ § 票¥, à §¤¥«. ᨬ¢®«®¬ "="
|
||
;-----------------------------------------------------------
|
||
ENV_EX: LD B,ENVIRONMENT_STRING_LENGTH ; 255 ¬ ªá. ¤«¨ áâப¨ (¨¬ï+§ ç.)
|
||
LD DE,ENVNAME ; ªã¤
|
||
ENV_E0: XOR A
|
||
LD (DE),A
|
||
LD (ENVVALUE),A
|
||
; ᪮¯¨à. ¢ "ENVNAME" ¨¬ï ¯¥à¥¬¥®©
|
||
ENV_E1: LD A,(HL)
|
||
INC HL
|
||
CP "="
|
||
JR Z,EQUAL_SG
|
||
OR A
|
||
JR Z,ENV_E3
|
||
CALL UPPER
|
||
LD (DE),A
|
||
INC DE
|
||
DJNZ ENV_E1
|
||
;R03
|
||
; ᫨誮¬ ¤«¨ ï áâப
|
||
ld a,b
|
||
ld (de),a ; ®¡à¥§ âì ᫨誮¬ ¤«¨ãî áâபã
|
||
inc de
|
||
;
|
||
SCF
|
||
RET
|
||
; § 票¥ ¥ § ¤ ®
|
||
ENV_E3: LD A,"="
|
||
LD (DE),A
|
||
INC DE
|
||
XOR A
|
||
LD (DE),A
|
||
INC DE
|
||
RET
|
||
; § 票¥ § ¤ ®
|
||
EQUAL_SG: LD (DE),A ; á®åà. "="
|
||
INC DE
|
||
XOR A
|
||
LD (DE),A ; ¢ ª®¥æ ¨¬¥¨ ¯¥à¥¬.
|
||
; ᪮¯¨à. ¢ "ENVVALUE" § 票¥ ¯¥à¥¬¥®© (áâப㠯ã⥩)
|
||
LD DE,ENVVALUE ; 512 ¡ ©â, ¡ãä¥à
|
||
LD (DE),A
|
||
LD C,#FF ; ç⮡ë "ldi" ¥ ¯®à⨫ "b"
|
||
ENV_E2 LD A,(HL)
|
||
LDI
|
||
OR A
|
||
RET Z ; ª®¥æ áâப¨ § ç. ¯¥à¥¬¥®©
|
||
DJNZ ENV_E2
|
||
;R03
|
||
; ᫨誮¬ ¤«¨ ï áâப
|
||
ld a,b
|
||
ld (de),a ; ®¡à¥§ âì ᫨誮¬ ¤«¨ãî áâபã
|
||
inc de
|
||
;
|
||
SCF
|
||
RET
|
||
|
||
ENVNAME EQU CORE_BUFFERS.EXEBUFF ;DS 32
|
||
ENVVALUE EQU CORE_BUFFERS.BUFFER //#3800 ; BUFFER ;DS 128
|
||
|
||
ENVSIZE DW DEF_ENV_SIZE ;E_END-ENVIRONMENT ;160
|
||
|
||
ENVIRONMENT EQU ENVADDR
|
||
|
||
DEFAULT_ENV: DB 'BOOTDSK=' ;R02
|
||
.boot_disk: DB 'X:',0 ;R02
|
||
; DB 'SYSTEM=C:\system.exe',0
|
||
; DB 'PATH=\SYSTEM\;\COMMAND\;',0
|
||
DEF_ENV_SIZE EQU $-DEFAULT_ENV ;R02
|
||
|
||
|
||
; DB 'SYSTEM=C:\system.exe',0
|
||
; DB 'PATH=\SYSTEM\;\COMMAND\;',0
|
||
; DB 0
|
||
; DB 'SYSTEM=C:\system.exe',0
|
||
; DB 'PATH=C:\;\FN\;',0
|
||
; DB 'OS=ESTEX',0
|
||
; DB 'VAR1=000',0
|
||
; DB 'OSNAME=ESTEX 2002',0
|
||
; DB 0 |