⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppp.asm

📁 Application sources:A084.ZIP
💻 ASM
📖 第 1 页 / 共 4 页
字号:
    mov     esi, RX_LCP_ECHO_REQ
    call    debug_output
    popa

    mov     al, 0
    mov     [rx_str+8],al
    mov     [rx_str+9],al
    mov     [rx_str+10],al
    mov     [rx_str+11],al

    mov     ebx, LCP
    mov     ecx, LCP_ECHO_REP
    movzx   edx, byte [rx_str + 5]
    mov     esi, rx_str + 7
    call    MakePacket

ppp_003a:
    mov     eax, [state]
    cmp     eax, 3
    jne     ppp_013

    mov     eax, 4
    mov     [state], eax

    jmp     ppp_013


ppp_004:
    cmp     eax, PAP
    jne     ppp_005

    mov     al, [rx_str + 4]
    cmp     al, PPP_ACK
    jne     ppp_013

    ; Debugging output to debug board
    pusha
    mov     esi, RX_PAP_ACK
    call    debug_output
    popa

    mov     eax, 5
    mov     [state],eax
    jmp     ppp_013

ppp_005:
    cmp     eax, IPCP
    jne     ppp_006

    mov     al, [rx_str + 4]
    cmp     al, REQ
    jne     ppp_005a

    ; Debugging output to debug board
    pusha
    mov     esi, RX_IPCP_REQ
    call    debug_output
    popa

    mov     ebx, 0x04
    call    TestOptions
    cmp     edx, 0
    jz      ppp_005b
    mov     ecx, PPP_ACK
    mov     eax, 6
    mov     [state], eax
    jmp     ppp_005c
ppp_005b:
    mov     ecx, REJ

ppp_005c:
    mov     ebx, IPCP
    movzx   edx, byte [rx_str + 5]
    mov     esi, rx_str + 7
    call    MakePacket
    jmp     ppp_013

ppp_005a:
    cmp     al, PPP_ACK
    jne     ppp_005d

    ; Debugging output to debug board
    pusha
    mov     esi, RX_IPCP_ACK
    call    debug_output
    popa

    mov     al, [rx_str + 5]
    mov     ecx, [number]
    cmp     al, cl
    jne     ppp_013

    mov     eax, 7
    mov     [state], eax
    mov     eax, 5800
    call    settimer

    mov     eax, IPOnp
    mov     [prompt], eax               ; set up prompt to display
    mov     al,[IPOnp_len]
    mov     [prompt_len], al
    call    draw_window

    jmp     ppp_013

ppp_005d:
    cmp     al, PPP_NAK
    jne     ppp_005e

    ; Debugging output to debug board
    pusha
    mov     esi, RX_IPCP_NAK
    call    debug_output
    popa

    mov     al, [rx_str + 10]
    mov     [addr1], al
    mov     al, [rx_str + 11]
    mov     [addr2], al
    mov     al, [rx_str + 12]
    mov     [addr3], al
    mov     al, [rx_str + 13]
    mov     [addr4], al

    pusha
    call    draw_window

    mov     eax,52
    mov     ebx,3
    mov     cl, [addr4]
    shl     ecx, 8
    mov     cl, [addr3]
    shl     ecx, 8
    mov     cl, [addr2]
    shl     ecx, 8
    mov     cl, [addr1]
    int     0x40                       ; Set the stacks IP address

    popa

    mov     ebx, IPCP  ;; added 28/4/03
    mov     ecx, REQ
    movzx   edx, byte [rx_str + 5]
    mov     esi, rx_str + 7
    call    MakePacket
    jmp     ppp_013

ppp_005e:
    cmp     al, REJ
    jne     ppp_005f
    jmp     ppp_013

ppp_005f:
    cmp     al, TERM
    jne     ppp_013
    jmp     ppp_013

ppp_006:
    cmp     eax, IP
    jne     ppp_007


;;
;;
;;
;; This is where we will pass the IP packet up to the stack
;;
;;
;;
    mov     eax, 52
    mov     ebx, 6
    mov     edx, 1500   ; this should be exact amount
    mov     esi, rx_str + 4
    int     0x40

    ; Debugging output to debug board
    pusha
    mov     esi, RX_IP
    call    debug_output
    popa

    jmp     ppp_013

ppp_007:
    cmp     eax, CCP
    jne     ppp_008

    mov     al, [rx_str + 4]
    cmp     al, REQ
    jne     ppp_013

    ; Debugging output to debug board
    pusha
    mov     esi, RX_CCP_REQ
    call    debug_output
    popa

    mov     ebx, 0x04
    call    TestOptions
    cmp     edx, 0
    jz      ppp_007b
    mov     ecx, PPP_ACK
    jmp     ppp_007c
ppp_007b:
    mov     ecx, REJ

ppp_007c:
    mov     ebx, CCP
    movzx   edx, byte [rx_str + 5]
    mov     esi, rx_str + 7
    call    MakePacket

    jmp     ppp_013

ppp_008:
    cmp     eax, 0
    jz      ppp_009

    jmp     ppp_013

ppp_009:
    mov     eax, [tx_end]
    cmp     eax, 0
    jnz     ppp_010
    call    gettimer
    cmp     eax, 100
    jle     ppp_010

    mov     eax, [state]
    cmp     eax, 0
    je      ppp_009a
    cmp     eax, 2
    jne     ppp_010

ppp_009a:

    ; Debugging output to debug board
    pusha
    mov     esi, TX_LCP_REQ
    call    debug_output
    popa

    inc     [number]
    mov     eax, 0
    call    settimer

    mov     ebx, LCP
    mov     ecx, REQ
    mov     edx, [number]
    mov     esi, LCPREQStr
    call    MakePacket

    jmp     ppp_013

ppp_010:
    mov     eax, [tx_end]
    cmp     eax, 0
    jnz     ppp_011
    call    gettimer
    cmp     eax, 100
    jle     ppp_011
    mov     eax, [state]
    cmp     eax, 4
    jne     ppp_011
    mov     eax, 0
    call    settimer
    inc     [number]

    ; Debugging output to debug board
    pusha
    mov     esi, TX_PAP_REQ
    call    debug_output
    popa

    mov     ebx, PAP
    mov     ecx, REQ
    mov     edx, [number]
    mov     esi, PAPREQStr
    call    MakePacket

    jmp     ppp_013

ppp_011:
    mov     eax, [tx_end]
    cmp     eax, 0
    jnz     ppp_012
    call    gettimer
    cmp     eax, 100
    jle     ppp_012
    mov     eax, [state]
    cmp     eax, 6
    jne     ppp_012
    inc     [number]
    mov     eax, 0
    call    settimer

    ; Debugging output to debug board
    pusha
    mov     esi, TX_IPCP_REQ
    call    debug_output
    popa

    mov     ebx, IPCP
    mov     ecx, REQ
    mov     edx, [number]
    mov     esi, IPCPREQStr
    call    MakePacket

    jmp     ppp_013

ppp_012:
    mov     eax, [tx_end]
    cmp     eax, 0
    jnz     ppp_013
    mov     eax, [state]
    cmp     eax, 7
    jne     ppp_013

    ; 10ms Delay suggested by Ville
    mov     eax,23     ; over here
    mov     ebx,1
    int     0x40



    call    gettimer
    cmp     eax, 200
    jle     ppp_012a

 ; every 2s, when things are quiet, redraw window
    call    draw_window_limited

    mov     eax, 0
    call    settimer

ppp_012a:

    mov     eax, 52
    mov     ebx, 8
    mov     esi, ip_buff
    int     0x40

    cmp     eax, 0
    je      ppp_013

    call    MakeIPPacket

    ; Debugging output to debug board
    pusha
    mov     esi, TX_IP
    call    debug_output
    popa

ppp_013:
    mov     eax, [packet]
    cmp     eax, 0
    jz      PPPLoop

    mov     eax, 0
    mov     [packet], eax

    mov     edi, rx_str
    mov     ecx, MaxRx + 1
    rep     stosb
    jmp     PPPLoop



;****************************************************************************
;    Function
;       calc
;
;   Description
;       Adds a character to the CRC checksum
;       byte in lsb of eax
;
;
;****************************************************************************
calc:
    and     eax, 0xFF
    push    ecx
    mov     ecx, 8
calc_001:
    test    al, 0x01
    jz      calc_002
    shr     eax, 1
    xor     eax, 0x8408
    and     eax, 0xffff
    jmp     calc_003
calc_002:
    shr     eax, 1
calc_003:
    loop    calc_001
    pop     ecx
    ret


;****************************************************************************
;    Function
;       add2tx
;
;   Description
;       Adds a character into the tx buffer
;       byte in low byte of eax
;
;
;****************************************************************************
add2tx:
    pusha
    mov     esi, tx_str
    add     esi, [tx_ptr]
    inc     [tx_ptr]
    mov     [esi], al               ; Save byte in buffer
    mov     ecx, [checksum2]
    and     eax, 0xff
    xor     eax, ecx
    call    calc
    shr     ecx, 8
    and     ecx, 0xff
    xor     eax, ecx
    mov     [checksum2], eax
    popa
    ret



;****************************************************************************
;    Function
;       MakeIPPacket
;
;   Description
;       Creates a PPP packet for transmission to the host from the
;       IP packet extracted from the stack
;
;       IP data is in ip_buff
;
;****************************************************************************
MakeIPPacket:
    mov     [tx_ptr], dword 1
    mov     edi, tx_str
    mov     [edi], byte ' '
    mov     eax, 0xffff
    mov     [checksum2], eax
    mov     al, 0xff
    call    add2tx
    mov     al, 3
    call    add2tx
    mov     al, IP / 256
    call    add2tx
    mov     al, IP
    call    add2tx

    movzx   ecx, byte [ip_buff + 3]
    mov     ch, byte [ip_buff + 2]

    mov     esi, ip_buff

mip001:
    mov     al, byte [esi]
    call    add2tx
    inc     esi
    loop    mip001

    mov     eax, [checksum2]
    not     eax
    call    add2tx
    shr     eax, 8
    call    add2tx

    mov     eax, [tx_ptr]
    mov     [tx_end], eax
    xor     eax, eax
    mov     [tx_ptr], eax
    ret


;****************************************************************************
;    Function
;       MakePacket
;
;   Description
;       Creates a PPP packet for transmission to the host
;
;       Packet type in ebx
;       Code is in ecx
;       num is in edx
;       str is pointed to by esi
;
;****************************************************************************
MakePacket:
    mov     [tx_ptr], dword 1
    mov     edi, tx_str
    mov     [edi], byte ' '
    mov     eax, 0xffff
    mov     [checksum2], eax
    mov     al, 0xff
    call    add2tx
    mov     al, 3
    call    add2tx
    mov     al, bh                  ; packet/256
    call    add2tx
    mov     al, bl                  ; packet&255
    call    add2tx

    cmp     ebx, IP                 ; is packet type IP?
    jne     mp_001                  ; No - its a lower layer packet

    ; Do IP packet assembly

    jmp     mp_002

mp_001:
    ; Do PPP layer packet assembly
    mov     al, cl
    call    add2tx
    mov     al, dl
    call    add2tx
    mov     al, 0
    call    add2tx

    movzx   ecx, byte [esi]         ; length = *str - 3
    sub     ecx, 3

mp_002:                             ; Now copy the data acros
    mov     al, byte [esi]
    call    add2tx
    inc     esi
    loop    mp_002

    mov     eax, [checksum2]
    not     eax
    call    add2tx
    shr     eax, 8
    call    add2tx

    mov     eax, [tx_ptr]
    mov     [tx_end], eax
    xor     eax, eax
    mov     [tx_ptr], eax
    ret


;****************************************************************************
;    Function
;       TestOptions
;
;   Description
;       Test a PPP packets options fields for valid entries
;
;       option ebx
;
;       Returns result in edx, but may also modify rx_str
;
;****************************************************************************
TestOptions:
    mov     esi, 8                  ; ptr1
    mov     edi, 8                  ; ptr2
    mov     edx, 3                  ; edx is the return value
    movzx   ecx, byte [rx_str + 7]
    add     ecx, 4                  ; ecx is size
    cmp     ecx, MaxRx
    jle     to_001

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -