📄 9346c.asm
字号:
; 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 + -