Estex-DSS/DSS/API/Environ.asm
Anatoliy Belyanskiy c0f126a95c ...
2023-12-16 04:33:15 +10:00

294 lines
5.8 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.

;[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,(BOOTDSK.NUM)
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