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

📄 9346c.asm

📁 93C46 EEPROM sourcecode for RTL8019 Plug-And-Play Card
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;  This file contains routines for PG8019.exe
;  Called from main program in PG8009.C  ( 5/24/94 )

        .MODEL  small, c

;ReadCfg PROTO C CfgData:WORD, IOBASE:WORD, Count:WORD
;WriteCfg PROTO C CfgData:WORD, IOBASE:WORD, Count:WORD
;ResetCard   PROTO   C WDFlag:WORD
;AutoLoad    PROTO   C  IOBASE:WORD
public  ReadCfg,WriteCfg,ResetCard,AutoLoad

        .DATA
;---------------------------------------------------------
;       Wait 200ns*Number
;---------------------------------------------------------
Slow    MACRO   Number
        LOCAL   Slow_lp
        push    cx
        push    ax
        mov     cx,Number
Slow_lp:
        in      al,61h
        loop    Slow_lp
        pop     ax
        pop     cx

        ENDM
;---------------------------------------------------------
;       Write data to 9346 (carry bit contains data)
;---------------------------------------------------------
WrBit   MACRO
        rcl     al,1
        rcl     al,1
        and     al,02h
        push    ax
        or      al,SerialClkLo
        out     dx,al
        Slow    SK

        pop     ax
        push    ax
        or      al,SerialClkHi
        out     dx,al
        slow    SK

        pop     ax
        or      al,SerialClkLo
        out     dx,al
        Slow    SK

        ENDM
;---------------------------------------------------------
;       Write data to 9346 (carry bit contains data)
;---------------------------------------------------------
WrBit1  MACRO
        rcl     al,1
        rcl     al,1
        and     al,02h
        push    ax
        or      al,SerialClkLo
        out     dx,al
        Slow    SK

        pop     ax
        or      al,SerialClkHi
        out     dx,al
        slow    SK

        ENDM
;---------------------------------------------------------
;       Read  data form 9346 (result in carry bit)
;---------------------------------------------------------
RdBit   MACRO
        push    ax
        mov     al,SerialClkHi
        out     dx,al
        Slow    SK

        mov     al,SerialClkLo
        out     dx,al
        slow    SK

        in      al,dx
        shr     al,1
        pop     ax

        ENDM
;---------------------------------------------------------
;       Check Live Port
;---------------------------------------------------------
ChkPort MACRO TestData
        mov     al,TestData
        out     dx,al
        slow    1
        in      al,dx
        cmp     al,TestData
        ENDM





; CONSTANTs

Command                         equ   0
PageStart                       equ   1
EepromCR                        equ   1
PhysicalAddressRegister0        equ   1
PageStop                        equ   2
Boundry                         equ   3
TransmitStatus                  equ   4
TransmitPageStart               equ   4
TransmitByteCount0              equ   5
TransmitByteCount1              equ   6
FIFO                            equ   6
InterruptStatus                 equ   7
Current                         equ   7
RemoteStartAddress0             equ   8
MulticastAddressRegister0       equ   8
RemoteStartAddress1             equ   9
RemoteByteCount0                equ   0ah
RemoteByteCount1                equ   0bh
ReceiveConfiguration            equ   0ch
ReceiveStatus                   equ     0ch
TransmitConfiguration           equ   0dh
DataConfiguration               equ   0eh
InterruptMask                   equ   0fh
Rack_Nic                        equ   10h
Wack_Nic                        equ   10h
Reset                           equ   1fh

RED_NE_ID0                      equ   0ah
RED_NE_ID1                      equ   0bh
RED_WD_ID0                      equ   1ah
RED_WD_ID1                      equ   1bh

SK                              equ     10
NormalMode                      equ     00h
ProgramMode                     equ     80h
ChipSelectHi                    equ     88h
ChipSelectLo                    equ     80h
SerialClkHi                     equ     8Ch
SerialClkLo                     equ     88h
ReadCmd                         equ     80h
WriteCmd                        equ     40h
EwenCmd                         equ     30h
EwdsCmd                         equ     00h
EraseCmd                        equ     0C0h

IOBASE_BEGIN                    equ     200h
IOBASE_END                      equ     400h

PnPAddress                      equ     279h
PnPWrite                        equ     0a79h
PnPRead                         equ     213h
;PnP index registers
SetRD                           equ     0h
Isolation                       equ     1h
ConfigCtrl                      equ     2h
Wake                            equ     03h
CSN                             equ     06h
Activate                        equ     30h
IOCheck                         equ     31h
SetIO_1                         equ     60h
SetIO_0                         equ     61h
IRQLevel                        equ     70h

PnPInitKey      db      6Ah,0B5h,0DAh,0EDh,0F6h,0FBh,7Dh,0BEh
                db      0DFh,6Fh,37h,1Bh,0Dh,86h,0C3h,61h
                db      0B0h,58h,2Ch,16h,8Bh,45h,0A2h,0D1h
                db      0E8h,74h,3Ah,9Dh,0CEh,0E7h,73h,39h
RTInitKey       db      0DAh,6Dh,36h,1Bh,8Dh,46h,23h,91h
                db      48h,0A4h,0D2h,69h,34h,9Ah,4Dh,26h
                db      13h,89h,44h,0A2h,51h,28h,94h,0CAh
                db      65h,32h,19h,0Ch,86h,43h,0A1h,50h

;IOLookUpTable           dw      300h
;                        dw      320h
;                        dw      340h
;                        dw      360h
;                        dw      200h
;                        dw      220h
;                        dw      240h
;                        dw      260h


        .CODE
;---------------------------------------------------------------
Second  PROC
        cmp     cx,0
        je      SecondExit

        push    cx
        mov     ah,0
        int     1ah
        mov     ax,dx
        mov     bx,cx
        clc
        pop     cx
        add     ax,cx
        adc     bx,0

Second_lp:
        push    ax
        mov     ah,0
        int     1ah
        pop     ax
        cmp     bx,cx
        jb      SecondExit
        cmp     ax,dx
        jb      SecondExit
        jmp     Second_lp
SecondExit:
        ret

Second  ENDP
;---------------------------------------------------------------
;       ReadCfg -- read configuration from EEPROM(9346)
;       input -- I/O base address in IOBASE
;       output -- Two words configuration data starts from
;                    address CfgData
;---------------------------------------------------------------
ReadCfg PROC  C CfgData:WORD, IOBASE:WORD , Count:WORD
        jmp     ReadCfgStart
ReadCfgBase     dw      ?
countcmp        dw      ?
ReadCfgStart:
        mov     ax, Count
        mov     countcmp, ax
        push    bp
        mov     ReadCfgBase,bp
        mov     bp,IOBASE

        lea     dx,[bp+Command]
        mov     al,0E1h
        out     dx,al

        lea     dx,[bp+EepromCR]
        mov     al,ProgramMode
        out     dx,al

        Slow    SK

        mov     cx,0
ReadCfg_lp:
        push    cx
        mov     bx,cx

        call    R_9346
        pop     cx
        jc      RdFail
        push    bp
        mov     bp,ReadCfgBase
;       push    ds
;       push    ax
;       mov     ax,DSEG
;       mov     ds,ax
;       pop     ax
        mov     bx,cx
        shl     bx,1
        add     bx,CfgData
        mov     [bx],ax
;       pop     ds
        pop     bp

        inc     cx
        cmp     cx, countcmp
        jb      ReadCfg_lp

        clc

RdFail:
        lea     dx,[bp+EepromCR]
        mov     al,NormalMode
        out     dx,al

        lea     dx,[bp+Command]
        mov     al,21h
        out     dx,al

        pop     bp
        ret
ReadCfg ENDP

R_9346  PROC
        push    cx
        push    bx
        mov     al,ChipSelectHi
        out     dx,al

        Slow    SK

        or      bl,ReadCmd
        call    WrCmd1

         RdBit
         jc      RdError

        mov     al,0
        mov     cx,16
R_9346_lp:
        RdBit
        rcl      ax,1
        loop    R_9346_lp

        push    ax

        mov     al,ChipSelectLo
        out     dx,al

        Slow    SK

        pop     ax
        pop     bx
        pop     cx
        clc
        ret

RdError:
        push    ax

        mov     al,ChipSelectLo
        out     dx,al

        Slow    SK

        pop     ax
        pop     bx
        pop     cx
        stc
        ret

R_9346  ENDP

;---------------------------------------------------------------
;       WriteCfg -- write configuration to EEPROM(9346)
;       input -- I/O base address in IOBASE
;                Two words configuration data starts from
;                    address CfgData
;---------------------------------------------------------------
WriteCfg PROC  C CfgData:WORD, IOBASE:WORD, Count:WORD
        jmp     WriteCfgStart
WriteCfgBase    dw      ?
para            dw      ?
WriteCfgStart:

        mov     ax, Count
        mov     para, ax
        push    bp
        mov     WriteCfgBase,bp
        mov     bp,IOBASE

        lea     dx,[bp+Command]
        mov     al,0E1h
        out     dx,al

        lea     dx,[bp+EepromCR]
        mov     al,ProgramMode
        out     dx,al
        push    dx

        Slow    SK

        mov     cx,0
WriteCfg_lp:

        push    bp
        mov     bp,WriteCfgBase
;       push    ds
;       push    ax
;       mov     ax,DSEG
;       mov     ds,ax
;       pop     ax
        mov     bx,cx
        shl     bx,1
        add     bx,CfgData
        mov     ax,[bx]
;       pop     ds
        pop     bp
        mov     bx,cx
        push    cx
        call    W_9346
        pop     cx

        inc     cx
        cmp     cx, para
        jb      WriteCfg_lp

        pop     dx
        mov     al,0h
        out     dx,al


        lea     dx,[bp+Command]
        mov     al,021h
        out     dx,al

        pop bp
        ret
WriteCfg ENDP

W_9346  PROC
        push    cx
        push    bx
        push    ax
        mov     al,ChipSelectHi
        out     dx,al

        Slow    SK

        push    bx
        mov     bl,EwenCmd
        call    WrCmd

        Slow    SK

        mov     al,SerialClkLo
        out     dx,al
        Slow    SK

        mov     al,ChipSelectLo
        out     dx,al

        Slow    SK

        mov     al,ChipSelectHi
        out     dx,al

        Slow    SK

        pop     bx
        push    bx
        or      bl,EraseCmd
        call    WrCmd

        mov     al,SerialClkLo
        out     dx,al
        Slow    SK

        mov     al,ChipSelectLo
        out     dx,al

        Slow    SK

        mov     al,ChipSelectHi
        out     dx,al

        Slow    SK

;       mov     cx,0
WaitForErase:
;       mov     al,SerialClkLo
;       out     dx,al
;       Slow    SK

        in      al,dx
        test    al,01
        jne     EraseOK

;       mov     al,SerialClkHi
;       out     dx,al
;       slow    SK

;       loop    WaitForErase
        jmp     WaitForErase

EraseOK:
        mov     al,ChipSelectLo
        out     dx,al

        Slow    SK

        pop     bx
        or      bl,WriteCmd
        call    WrCmd

        pop     ax
        push    ax
        mov     cx,16
W_9346_lp:
        rcl     ax,1
        push    ax
        WrBit
        pop     ax
        loop    W_9346_lp

        mov     al,SerialClkLo

⌨️ 快捷键说明

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