mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
259 lines
3.4 KiB
NASM
259 lines
3.4 KiB
NASM
;[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 |