Estex-DSS/DSS/ENVIRON.ASM
2023-07-07 01:39:06 +10:00

259 lines
3.4 KiB
NASM
Raw Blame History

;[BEGIN]
;//MODULE: ENVIRON
;//CREATE: 10-11-2002 AUTHOR: Denis Parinov
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R01 19-11-2002 DNS CORRECT DE ADDRESS IN GETENV
;---------------------------------------------------------------
; LD HL,MYVAR
; CALL SETENV
; LD HL,MYVAR2
; LD DE,MYBUF
; CALL GETENV
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:
;!TEST
;LD A,ENVPAGE
;CALL BANK
SET_PAGE_X ENVPAGE
;
PUSH AF
;!TEST
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
READENV:
PUSH HL
;!TEST
;LD A,ENVPAGE
;CALL BANK
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
RET
GETENV: PUSH DE
CALL ENV_EX
;!TEST
;LD A,ENVPAGE
;CALL BANK
SET_PAGE_X ENVPAGE
;
EX AF,AF'
CALL F_ENV
POP DE
LD A,0
LD (DE),A
JR NC,GE_1
GE_0: LD A,(HL)
LDI
OR A
JR NZ,GE_0
DEC DE ;R01
LD A,#FF
GE_1: EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
AND A
RET
SETENV: CALL ENV_EX
;!TEST
;LD A,ENVPAGE
;CALL BANK
SET_PAGE_X ENVPAGE
;
PUSH AF
;
CALL F_ENV
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
ENV_EX LD B,ENVIRONMENT_STRING_LENGTH
LD DE,ENVNAME
ENV_E0 XOR A
LD (DE),A
LD (ENVVALUE),A
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
;!TEST from Vasil
ld a,b
ld (de),a ; <20><><EFBFBD><E0A5A7><EFBFBD> ᫨誮<E1ABA8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
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
LD DE,ENVVALUE
LD (DE),A
LD C,#FF
ENV_E2 LD A,(HL)
LDI
OR A
RET Z
DJNZ ENV_E2
SCF
RET
ENVNAME EQU EXEBUFF ;DS 32
ENVVALUE EQU BUFFER //#3800 ; BUFFER ;DS 128
ENVSIZE DW DEF_ENV_SIZE ;E_END-ENVIRONMENT ;160
ENVIRONMENT EQU ENVADDR
DEFAULT_ENV: DB 'BOOTDSK='
.boot_disk: DB 'X:',0
DEF_ENV_SIZE EQU $-DEFAULT_ENV
; 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