A2osX/SBIN/LOGIN.S.txt
2018-12-18 15:37:07 +01:00

246 lines
4.5 KiB
Plaintext
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.

NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF SBIN/LOGIN
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPTR1 .BS 2
ZS.END
.ED
*--------------------------------------
INPUT.BufPtr.SIZE .EQ 16
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT S.PS.F
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.LOGIN .DA MSG.LOGIN
L.MSG.PASSWORD .DA MSG.PASSWORD
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.ECHODEL .DA MSG.ECHODEL
L.ENV.SHELL .DA ENV.SHELL
L.SHELL .DA SHELL
L.ENV.HOME .DA ENV.HOME
L.HOME .DA HOME
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN >STZ.G hUSERNAME
>STA.G hPASSWORD
>STA.G INPUT.PrevCR
>PUSHBI 0
>LDYA L.MSG.LOGIN
>SYSCALL printf
bcs .9
lda #0 Echo all caracters
jsr INPUT.RESET
.1 >SLEEP
>SYSCALL GetChar
bcc .11
tax
beq .1 no char
bra .9
.11 jsr INPUT.CHARIN
jsr INPUT.LINEIN
bcc .1
>PUSHBI 0
>LDYA L.MSG.PASSWORD
>SYSCALL printf
bcs .9
lda #'*'
jsr INPUT.RESET
.2 >SLEEP
>SYSCALL GetChar
bcc .22
tax
beq .2 no char
.9 rts
.22 jsr INPUT.CHARIN
jsr INPUT.LINEIN
bcc .2
>PUSHBI 0
>LDYA L.MSG.ECHOCRLF
>SYSCALL printf
bcs .9
jsr CS.RUN.SETENV
bcs .9
>PUSHBI S.PS.F.HOLD
>LDYA L.SHELL
>SYSCALL ExecL
rts
*--------------------------------------
CS.RUN.SETENV >PUSHW L.HOME
>LDYA L.ENV.HOME
>SYSCALL setenv
bcs .9
>PUSHW L.SHELL
>LDYA L.ENV.SHELL
>SYSCALL setenv
bcs .9
.9 rts
*--------------------------------------
CS.DOEVENT
sec
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
INPUT.RESET >STA.G INPUT.PassChar
>STZ.G INPUT.BufPtr
>STA.G INPUT.Status
rts
*--------------------------------------
INPUT.CHARIN tax save char...
>LDA.G INPUT.Status
bmi .9
lda #INPUT.BufPtr
clc
adc pData
sta ZPPTR1
lda pData+1
adc /INPUT.BufPtr
sta ZPPTR1+1
cpx #$20 Control Char?
bcc .2
cpx #C.DEL
beq INPUT.CHARIN.DEL
lda (ZPPTR1)
cmp #INPUT.BufPtr.SIZE Buffer full?
beq .9
inc
sta (ZPPTR1)
tay
txa
sta (ZPPTR1),y
>LDA.G INPUT.PassChar
bne .1
txa
.1 >SYSCALL PutChar
bcs .9
>STZ.G INPUT.PrevCR
rts
.2 cpx #C.CR
bne .3
txa
>STA.G INPUT.PrevCR
lda #$80
>STA.G INPUT.Status
rts
.3 cpx #C.LF
bne .4
>LDA.G INPUT.PrevCR
beq .1
.4 >STZ.G INPUT.PrevCR
.9 rts
*--------------------------------------
INPUT.CHARIN.DEL
lda (ZPPTR1)
beq .8
dec
sta (ZPPTR1)
>PUSHBI 0
>LDYA L.MSG.ECHODEL
>SYSCALL printf
.8 clc
rts
*--------------------------------------
INPUT.LINEIN ldy #INPUT.Status
lda (pData),y
asl CS if a line is in the buffer
rts
*--------------------------------------
CS.END
MSG.LOGIN .AZ "\r\nlogin:"
MSG.PASSWORD .AZ "\r\npassword:"
MSG.ECHOCRLF .AZ "\r\n"
MSG.ECHODEL .DA #C.BS,#C.SPACE,#C.BS,#0
ENV.SHELL .AZ "SHELL"
ENV.HOME .AZ "HOME"
SHELL .AZ "${ROOT}BIN/SHELL"
HOME .AZ "${ROOT}ROOT"
.HS 00
*--------------------------------------
.DUMMY
.OR 0
DS.START
INPUT.BufPtr .BS INPUT.BufPtr.SIZE+1
INPUT.Status .BS 1
INPUT.PassChar .BS 1
INPUT.PrevCR .BS 1
hUSERNAME .BS 1
hPASSWORD .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/LOGIN.S
ASM