mirror of
https://github.com/romychs/SprinterFirmware.git
synced 2025-04-18 18:12:39 +03:00
252 lines
2.9 KiB
NASM
252 lines
2.9 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
|
|
ENVI_L1
|
|
JR Z,INITENV ;B=FF
|
|
ENVI_L2
|
|
DEC B
|
|
ENVI_L3
|
|
JR Z,READENV ;B=0
|
|
DEC B
|
|
JR Z,GETENV ;B=1
|
|
DEC B
|
|
JR Z,SETENV ;B=2
|
|
LD A,ERR_INVALID_FUNCTION ; TODO: Call to NOP?
|
|
SCF
|
|
RET
|
|
|
|
INITENV
|
|
LD A,ENVPAGE
|
|
CALL BANK
|
|
PUSH AF
|
|
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 (PAGE3),A
|
|
AND A
|
|
RET
|
|
|
|
READENV PUSH HL
|
|
LD A,ENVPAGE
|
|
CALL BANK
|
|
LD H,A
|
|
LD C,PAGE3
|
|
IN L,(C)
|
|
EXX
|
|
LD HL,ENVIRONMENT
|
|
INC HL
|
|
POP DE
|
|
LD BC,(ENVSIZE)
|
|
EXX
|
|
;
|
|
RD_ENV1
|
|
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,RD_ENV1
|
|
XOR A
|
|
RET
|
|
|
|
GETENV
|
|
PUSH DE
|
|
CALL ENV_EX
|
|
|
|
LD A,ENVPAGE
|
|
CALL BANK
|
|
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 (PAGE3),A
|
|
EX AF,AF'
|
|
AND A
|
|
RET
|
|
|
|
SETENV
|
|
CALL ENV_EX
|
|
;
|
|
LD A,ENVPAGE
|
|
CALL BANK
|
|
PUSH AF
|
|
;
|
|
CALL F_ENV
|
|
JR NC,PENV
|
|
XOR A
|
|
CPIR
|
|
LD A,B
|
|
OR C
|
|
JR Z,PENV
|
|
LDIR
|
|
; DEC DE
|
|
PENV
|
|
LD A,(SECBUF)
|
|
OR A
|
|
JR Z,CLR_ENV
|
|
LD HL,EXEBUFF
|
|
|
|
F_EVN2
|
|
LD A,(HL)
|
|
LDI
|
|
CP "="
|
|
JR NZ,F_EVN2
|
|
LD HL,SECBUF
|
|
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 (PAGE3),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,0xff
|
|
LD DE,ENVNAME
|
|
ENV_E0
|
|
XOR A
|
|
LD (DE),A
|
|
LD (SECBUF),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
|
|
JR ENV_E4
|
|
|
|
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,SECBUF
|
|
LD (DE),A
|
|
LD C,#FF
|
|
ENV_E2
|
|
LD A,(HL)
|
|
LDI
|
|
OR A
|
|
RET Z
|
|
DJNZ ENV_E2
|
|
ENV_E4
|
|
LD A,B
|
|
LD (DE),A
|
|
INC DE
|
|
SCF
|
|
RET
|
|
|
|
ENVNAME EQU EXEBUFF ;DS 32
|
|
ENVVALUE EQU #3800 ; BUFFER ;DS 128
|
|
|
|
ENVSIZE DW 1 ;E_END-ENVIRONMENT ;160
|
|
|
|
ENVIRONMENT EQU ENVADDR
|
|
|
|
DEFAULT_ENV
|
|
DB 0 ; "",0
|
|
DEF_ENV_SIZE EQU $-DEFAULT_ENV
|
|
|
|
;[END]
|