📄 des3428.asm.bak
字号:
;create by bighandfor des3428, 4/27/2007
;LED program for DES3428
;
;LED sequence:
;
;LED for FE ports
;Bit NO. 0 1 2 3
;Function p1/10 p1/100 p2/10 p2/100
;Bit NO. 4 5 6 7
;Function p3/10 p3/100 p4/10 p4/100
; .
; .
; .
;Bit NO. 44 45 46 47
;Function p23/10 p23/100 p24/10 p24/100
;LED for SIO port
;Bit NO. 48 49 50 51
;Function SIO_p1/100/10 SIO_p1/1000 SIO_p2/100/10 SIO_p2/1000
;LED for combo port
;Bit NO. 52 53 54 55
;Function COM_p1/100/10 COM_p1/1000 COM_p2/100/10 COM_p2/1000
;LED for 7-seg led
;Bit NO. 56 57 58 59
;Function 1A/1B/7_SEG 2A/7_SEG_LED 2B/7_SEG_LED 2C/7_SEG_LED
;Bit NO. 60 61 62 63
;Function 2D/7_SEG_LE 2E/7_SEG_LED 2F/7_SEG_LED 2G/7_SEG_LE
; Symbolic names for the bits of the port status fields
;
RX equ 0x0 ; received packet
TX equ 0x1 ; transmitted packet
COLL equ 0x2 ; collision indicator
SPEED_C equ 0x3 ; 100 Mbps
SPEED_M equ 0x4 ; 1000 Mbps
DUPLEX equ 0x5 ; half/full duplex
FLOW equ 0x6 ; flow control capable
LINKUP equ 0x7 ; link down/up status
LINKEN equ 0x8 ; link disabled/enabled status
ZERO equ 0xE ; always 0
ONE equ 0xF ; always 1
LED_FE_END equ 24 ;24
LED_SFP_END equ 26 ;24 + 2
LED_XE_END equ 28 ;24 + 2 + 2
LED_MG_END equ 36 ;24 + 2 + 2 + 8
LED_TOTAL_NUM equ 36
LED_TOTAL_BITS equ 64
;
LED_TIMER equ 0xC0 ;led timer
counter equ 0xC1 ;led counter
phyport equ 0xC2 ;physical port number
;per port's link status
;Host update LED_LINK according link state
;bit0-bit3: timer
;bit4: 0=linkdown, 1=linkup
;bit5:medium, 1=fiber, 0=copper
;bit6:100M/1000M, 1=1000M on GE port,or 100M on FE port, 0=100M/10M on GE port,or 10M on FE port
;bit7: 7 segment led
;one byte per port, total 58 bytes
LED_LINK equ 0xC4 ; total 28
begin:
;initialize
ld A, 0
ld (counter), A
ledloop:
;Assign the first port
ld B, 0
ld A, (counter)
call getportmap
ld A, (phyport)
port A
add A, LED_LINK ; A = LED_LINK[phyport]
call led_link_status
inc (counter)
ld A, (counter)
cmp A, LED_TOTAL_NUM
jnz ledloop
sendto:
send LED_TOTAL_BITS
;assume the addrss of link status for phyport has been loaded into A,
led_link_status:
ld B,(counter)
fe_port:
cmp B, LED_FE_END
jnc xe_port
jmp check_link
sfp_port:
cmp B, LED_SFP_END
jnc sfp_port
jmp check_link
xe_port:
cmp B, LED_XE_END
jnc seven_seg
jmp check_link
seven_seg:
cmp B, LED_MG_END ; if (counter >= LED_SEG_END) jmp sfp_port
jnc mg_end
tst (A), 7
jc LED_ON_ONEBIT
jmp LED_OFF_ONEBIT
check_link:
tst (A), 4
jnc LINK_DOWN
traffic:
pushst RX
pushst TX
tor
pop
jc LINK_BLINK
ld B,(A)
and B, 0xF0
ld (A), B ;reset led timer
LINK_UP:
tst (A), 6
jc LED_ON_GREEN
jmp LED_ON_AMBER
;(A): link status; B: counter
LINK_BLINK:
inc (A)
ld B,(A)
and B, 0x0F
cmp B,2
jc LINK_DOWN
cmp B,3
jc LINK_UP
ld B, (A)
and B, 0xF0
ld (A),B
jmp LINK_BLINK
LINK_DOWN:
pushst ONE
pack
LED_OFF_ONEBIT:
pushst ONE
pack
ret
LED_ON_ONEBIT:
pushst ZERO
pack
ret
LED_ON_AMBER:
pushst ZERO
pack
pushst ONE
pack
ret
LED_ON_GREEN:
pushst ONE
pack
pushst ZERO
pack
ret
;get portmap, assume counter has been loaded into A
getportmap:
cmp A, LED_FE_END ; if (counter >= LED_SEG_END) jump sfp_portmap
jnc sfp_portmap
ld B,6
add A,B
ld (phyport), A
ret
sfp_portmap:
cmp A, LED_SFP_END ; if (counter >= LEDSFP_END) jump xe_portmap
jnc xe_portmap
ld B, 20
sub A, B
ld (phyport), A
ret
xe_portmap:
cmp A,LED_XE_END
jnc mg_portmap
ld B, 25
sub A, B
ld (phyport), A
ret
mg_portmap:
cmp A, LED_MG_END
jnc mg_end
ld B, 27
sub A, B
ld (phyport), A
mg_end:
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -