用户:
鹅少GL查看:0 回复:0 评论:0 创建时间:2022-04-06T20:18:03
有一个完整的Windows系统但是没有网卡驱动
那么你的Windows相当于普普通通不能上网的DOS系统
为大家附上几份网卡芯片向量
1喵9042067-AM79c970A网卡芯片_datasheet_看图王
1喵9042068-realtek8029AS网卡芯片_datasheep
;AMD网卡控制芯片源代码。
SECTION ethernet vstart=0
program_length 喵 program_end
code_entry dw ethernet_procedure
喵 section.ethernet.start
program_name db 'NET_AM79C970A' ;声明程序名称
times 16-($-program_name) db 0 ;注意应用程序名称不能超过16字节长度
;段的重定位表
program_run_state db 0x00 ;声明应用程序运行状态
realloc_len dw (realloc_end-realloc_begin)/4
realloc_begin:
setting_segment 喵 section.setting.start
ethernet_buffer_segment 喵 section.ethernet_buffer.start
video_segment 喵 section.video.start
stack_segment 喵 section.stack.start
realloc_end:
header_end:
;----------------------------------------------------------
;此处为应用程序入口
ethernet_procedure:
cmp di,0x01 ;1号功能,显示字符功能。最常用的可以放在前面,加快运行速度
je init_network ;调用完成后,直接就可以返回了呀。因为是设置了远程调用的返回机制
cmp di,0x02
je show_tran喵it_status
cmp di,0x03
je tran喵it_data
cmp di,0x04
je show_registers
cmp di,0x05
je clear_receive_ring
cmp di,0x06
je open_network_card
cmp di,0x07
je show_receive_buffer
.exit:
xor dx,dx
retf
;网卡的初始化需要什么东西呢?就需要一个IO端口号其实就可以进行初始化了。
init_network:
;设置寄存器:
push bx
push ax
;首先软复位一下,软复位是读取一下Register寄存器。
;初始化缓存
call init_buffer_a喵r
;mov bx,0x02 ; Miscellaneous Configuration
;mov ax,0x0006
;call outport_bcr
;设置各个寄存器
mov bx,4
mov ax,0x80c4
call outport_bcr
mov bx,4
mov ax,0x0110
call outport_csr
mov bx,5
mov ax,0x0100
call outport_csr
;mov bx,124
;mov ax,0x018
;call outport_csr
;mov bx,0x09
;mov ax,0x03 ;设置为全双工模式,不管是AUI还是10BASE-T
;call outport_bcr
;mov bx,18 ;Burst and Bus Control Register
;mov ax,0x9001 ;Burst Read Enable,Burst Write Enable
;call outport_bcr
;mov bx,19 ;EEPROM Control and Status
;mov ax,0
;call outport_bcr
;mov bx,22 ; PCI Latency Register PCI延时寄存器
;mov ax,0x1818
;call outport_bcr
;mov bx,47
;mov ax,0xfff
;初始化寄存器
xor bx,bx
mov ax,0x01
call outport_csr
xor bx,bx
.wait_for_init:
call readport_csr
and ax,0x0100
jz .wait_for_init
xor di,di
pop bx
pop ax
retf
;-----------------------------------------------------------------
;此函数主要用于初始化接收缓存的地址。主要用于descriptor ring中。
;@params:NONE
;@return:NONE
;使用方式:近程调用
;注意事项:NONE
init_buffer_a喵r:
push ax
push bx
push cx
push dx
push es
mov ax,[cs:ethernet_buffer_segment]
mov es,ax
call cal_sega喵r_to_phya喵r
;填充receive descriptor ring的buffer的地址
a喵 ax,receive_buffer1_start
adc dx,0x00
mov cx,0x04
mov bx,rbuffer_ring1_a喵r
.set_receive_ring_buffer:
mov [es:bx],ax
a喵 bx,0x02
mov [es:bx],dl
a喵 bx,0x06
a喵 ax,0x100
adc dx,0x00
loop .set_receive_ring_buffer
mov ax,es
call cal_sega喵r_to_phya喵r
a喵 ax,tran喵it_buffer1_start
adc dx,0
mov cx,0x04
mov bx,tbuffer_ring1_a喵r
.set_tran喵it_ring_buffer:
mov [es:bx],ax
a喵 bx,0x02
mov [es:bx],dl
a喵 bx,0x06
a喵 ax,0x80
adc dx,0x00
loop .set_tran喵it_ring_buffer
;设置ring地址
mov ax,es
call cal_sega喵r_to_phya喵r
a喵 ax,rbuffer_ring1_a喵r
adc dx,0
;地址写入BADR
mov bx,24
call outport_csr
mov ax,dx
inc bx
call outport_csr
;地址写入BADX
mov ax,es
call cal_sega喵r_to_phya喵r
a喵 ax,tbuffer_ring1_a喵r
adc dx,0
mov bx,30
call outport_csr
mov ax,dx
inc bx
call outport_csr
;设置csr2的最高8位为内存访问地址
;shl ax,8
;mov bx,0x02
call outport_csr
;设置descriptor ring的长度
mov bx,76 ;Receive Ring Length
mov ax,0x04
call outport_csr
mov bx,78 ;Tran喵it Ring Length
mov ax,0x04
call outport_csr
;设置initialization block的地址
mov ax,[cs:setting_segment]
mov es,ax
mov ax,[cs:ethernet_buffer_segment]
call cal_sega喵r_to_phya喵r
push ax
push dx
a喵 ax,rbuffer_ring1_a喵r
adc dx,0
mov bx,receive_descriptor_a喵r
mov [es:bx],ax
a喵 bx,0x02
mov [es:bx],dl
pop dx
pop ax
a喵 ax,tbuffer_ring1_a喵r
adc dx,0
mov bx,tran喵it_descriptor_a喵r
mov [es:bx],ax
a喵 bx,0x02
mov [es:bx],dl
;设置进入寄存器中
mov ax,es
call cal_sega喵r_to_phya喵r
mov bx,0x01
call outport_csr
mov ax,dx
inc bx
call outport_csr
pop es
pop dx
pop cx
pop bx
pop ax
ret
;------------------------------------------------------
;此函数用于将一个段地址转换为32位的实际物理地址
;@params:
; ax:保存要转换的段地址
;@return:
; ax:转换后的物理地址的低16位
; dx:转换后的物理地址的高16位
;使用方式:近程调用
;注意:无
cal_sega喵r_to_phya喵r:
push bx
mov bx,0x10
xor dx,dx
mul bx
pop bx
ret
;端口读写函数
readport_csr:
push dx
;指定寄存器号
mov dx,RAP_ADDRESS
xor ax,ax
mov ax,bx
out dx,ax
;写入eax的数据
mov dx,RDP_ADDRESS
in ax,dx
pop dx
ret
readport_bcr:
push dx
;指定寄存器号
mov dx,RAP_ADDRESS
xor ax,ax
mov ax,bx
out dx,ax
;写入eax的数据
mov dx,BDP_ADDRESS
in ax,dx
pop dx
ret
outport_csr:
push dx
push ax
;指定寄存器号
mov dx,RAP_ADDRESS
xor ax,ax
mov ax,bx
out dx,ax
pop ax
;写入eax的数据
mov dx,RDP_ADDRESS
out dx,ax
pop dx
ret
outport_bcr:
push dx
push ax
;指定寄存器号
mov dx,RAP_ADDRESS
xor ax,ax
mov ax,bx
out dx,ax
pop ax
;写入eax的数据
mov dx,BDP_ADDRESS
out dx,ax
pop dx
ret
show_char_hexadecimal:
push di
mov di,0x09 ;显示字符串
call 0x1000:0x001d
pop di
ret
;------------------------------------------------------
;此函数用于显示一个字符串的16进制格式的数据。
;@params:
; ds:保存需要显示的字符串所在段
; si:需要显示的字符串的偏移地址
; cx:显示的字节数
;@return:
; NONE
;使用方式:近程调用
;注意:无
show_hex_byte_string_count:
push cx
.show:
mov al,[ds:si]
call show_char_hexadecimal
inc si
loop .show
pop cx
ret
lf_cr:
push di
mov di,0x03 ;显示字符串
call 0x1000:0x001d
pop di
ret
show_message:
push di
push ds
mov ax,[cs:setting_segment]
mov ds,ax
mov di,0x02 ;显示字符串
call 0x1000:0x001d
pop ds
pop di
ret
show_buffer_count:
push di
push ds
mov ax,[cs:ethernet_buffer_segment]
mov ds,ax
mov di,0x08 ;显示字符串
call 0x1000:0x001d
pop ds
pop di
ret
show_ax_hex:
push ax
push dx
mov dx,ax
mov al,ah
call show_char_hexadecimal
mov al,dl
call show_char_hexadecimal
pop dx
pop ax
ret
show_tran喵it_status:
call show_receive_ring_status
retf
show_receive_buffer:
push ax
push cx
push si
push ds
mov ax,[cs:ethernet_buffer_segment]
mov ds,ax
mov si,receive_buffer1_start
mov cx,128
call lf_cr
call show_hex_byte_string_count
mov si,receive_buffer2_start
call lf_cr
call show_hex_byte_string_count
mov si,receive_buffer3_start
call lf_cr
call show_hex_byte_string_count
mov si,receive_buffer4_start
call lf_cr
call show_hex_byte_string_count
pop ds
pop si
pop cx
pop ax
retf
show_registers:
push eax
push bx
push dx
push si
mov si,message_csr0
call show_message
xor bx,bx
call readport_csr
call show_ax_hex
mov si,message_csr1
call show_message
mov bx,1
call readport_csr
call show_ax_hex
mov bx,2
mov si,message_csr2
call show_message
call readport_csr
call show_ax_hex
mov bx,3
mov si,message_csr3
call show_message
call readport_csr
call show_ax_hex
mov bx,4
mov si,message_csr4
call show_message
call readport_csr
call show_ax_hex
mov bx,5
mov si,message_csr5
call show_message
call readport_csr
call show_ax_hex
mov bx,7
mov si,message_csr7
call show_message
call readport_csr
call show_ax_hex
mov bx,12
mov si,message_csr12
call show_message
call readport_csr
call show_ax_hex
mov bx,13
mov si,message_csr13
call show_message
call readport_csr
call show_ax_hex
mov bx,14
mov si,message_csr14
call show_message
call readport_csr
call show_ax_hex
mov bx,15
mov si,message_csr15
call show_message
call readport_csr
call show_ax_hex
mov bx,24
mov si,message_csr24
call show_message
call readport_csr
call show_ax_hex
mov bx,25
mov si,message_csr25
call show_message
call readport_csr
call show_ax_hex
mov bx,30
mov si,message_csr30
call show_message
call readport_csr
call show_ax_hex
mov bx,31
mov si,message_csr31
call show_message
call readport_csr
call show_ax_hex
mov bx,2
mov si,message_bcr2
call show_message
call readport_bcr
call show_ax_hex
mov bx,4
mov si,message_bcr4
call show_message
call readport_bcr
call show_ax_hex
mov bx,5
mov si,message_bcr5
call show_message
call readport_bcr
call show_ax_hex
mov bx,6
mov si,message_bcr6
call show_message
call readport_bcr
call show_ax_hex
mov bx,7
mov si,message_bcr7
call show_message
call readport_bcr
call show_ax_hex
mov bx,19
mov si,message_bcr19
call show_message
call readport_bcr
call show_ax_hex
;读取PCI的状态
mov eax,0x80001804 ;指向网卡PCI的command寄存器
mov dx,0xcf8
out dx,eax
mov dx,0xcfc
in eax,dx
call show_ax_hex
shr eax,16
call show_ax_hex
pop si
pop dx
pop bx
pop eax
retf
show_receive_ring_status:
push ax
push bx
push si
push ds
push es
mov ax,[cs:setting_segment]
mov ds,ax
mov ax,[cs:ethernet_buffer_segment]
mov es,ax
mov si,message_rx_ring1
call show_message
mov bx,receive_ring1_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
mov si,message_rx_ring2
call show_message
mov bx,receive_ring2_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
mov si,message_rx_ring3
call show_message
mov bx,receive_ring3_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
mov si,message_rx_ring4
call show_message
mov bx,receive_ring4_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
mov si,message_tx_ring1
call show_message
mov bx,tran喵it_ring1_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
mov si,message_tx_ring2
call show_message
mov bx,tran喵it_ring2_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
mov si,message_tx_ring3
call show_message
mov bx,tran喵it_ring3_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
mov si,message_tx_ring4
call show_message
mov bx,tran喵it_ring4_status
mov al,[es:bx]
call show_char_hexadecimal
add bx,0x03
mov ax,[es:bx]
call show_ax_hex
pop es
pop ds
pop si
pop bx
pop ax
ret
clear_receive_ring:
push ax
push bx
push cx
push dx
push es
mov ax,[cs:ethernet_buffer_segment]
mov es,ax
;清除缓存
mov cx,5120
mov bx,receive_buffer1_start
.clear:
mov byte [es:bx] ,0x00
inc bx
loop .clear
mov bx,0x05
call readport_csr
add ax,0x01
call outport_csr
.waitforspnd:
call readport_csr
and ax,0x01
cmp ax,0x01
jne .waitforspnd
mov cx,0x04
xor dx,dx
mov bx,receive_ring1_status
.clear_owned:
mov al,[es:bx]
and al,0x80
cmp al,0x80 ;如果等于0,则说明状态被清除了,需要重新设置
je .continue
mov byte [es:bx],0x80
a喵 bx,0x03
mov word [es:bx],0x00
sub bx,0x03
.continue:
a喵 bx,0x08
loop .clear_owned
;清除中断状态
xor bx,bx
call readport_csr
call outport_csr
;查看寄存器状态
;mov bx,19
;mov si,message_crba
;call show_message
;call readport_csr
;call show_ax_hex
;mov bx,18
;call readport_csr
;call show_ax_hex
;cmp ax,0x00
; je .reset_crba
.continue2:
mov bx,21
mov si,message_ctba
call show_message
call readport_csr
call show_ax_hex
mov bx,20
call readport_csr
call show_ax_hex
;取消SPND位
mov bx,0x05
call readport_csr
and ax,0xfffe
call outport_csr
;xor bx,bx
;mov ax,0x04
;call outport_csr
pop es
pop dx
pop cx
pop bx
pop ax
retf
.reset_crba:
mov bx,rbuffer_ring1_a喵r
mov ax,[es:bx]
call show_ax_hex
a喵 bx,0x02
xor dx,dx
mov dl,[es:bx]
mov bx,18
call outport_csr
inc bx
mov ax,dx
call outport_csr
jmp .continue2
;---------------------------------------------------
;此函数用于打开一个网卡设备
open_network_card:
push ax
push bx
;打开网卡
xor bx,bx
mov ax,0x02
call outport_csr
pop bx
pop ax
retf
;此函数用于修改数据的发送状态
tran喵it_data:
push ax
push bx
push ds
mov ax,[cs:ethernet_buffer_segment]
mov ds,ax
mov bx,tran喵it1_status
mov word [ds:bx],0x00
mov bx,tran喵it_ring1_status
mov al,0x83
call show_char_hexadecimal
mov [ds:bx],al
mov bx,tran喵it2_status
mov word [ds:bx],0x00
mov bx,tran喵it_ring2_status
mov al,0x83
call show_char_hexadecimal
mov [ds:bx],al
mov bx,tran喵it3_status
mov word [ds:bx],0x00
mov bx,tran喵it_ring3_status
mov al,0x83
call show_char_hexadecimal
mov [ds:bx],al
mov bx,tran喵it4_status
mov word [ds:bx],0x00
mov bx,tran喵it_ring4_status
mov al,0x83
call show_char_hexadecimal
mov [ds:bx],al
pop ds
pop bx
pop ax
retf
;-----------------------------------------------------------------------------
SECTION setting align=16 vstart=0
RDP_ADDRESS equ 0xd030
RAP_ADDRESS equ 0xd032
BDP_ADDRESS equ 0xd036
RESET_ADDRESS equ 0xd034
initialization_block_start:
;/////////32位模式,SSIZE=1
;喵 0x20208180 ;设置第一个32位,mode是8180
;喵 0x20208184 ;设置成外部loopback
;设置物理网卡地址
;db 0x08,0x00,0x27,0x93
;db 0xf7,0xb6,0x00,0x00
;设置Logical A喵ress Filter
;喵 0xc0a80333 ;192.168.3.51
;喵 0x3303a8c0
;喵 0x00000000
;设置接收缓存描述符地址
;preceive_descriptor_a喵r:
;喵 0x00000000
;设置发送缓存描述符地址
;tran喵it_descriptor_a喵r:
;喵 0x00000000
;/////////16位模式,SSIZE=0
dw 0x1000 ;mode ;允许loop back
dw 0x0008 ;physical a喵ress
dw 0x9327
dw 0xb6f7
dw 0x0000 ;LADRF
dw 0x0000
dw 0x0000
dw 0x0000
receive_descriptor_a喵r:
dw 0x0000 ;RDRA
db 0x00
db 0x40 ;RLEN 长度为4
tran喵it_descriptor_a喵r:
dw 0x0000 ;TDRA
db 0x00
db 0x40 ;TLEN 长度为4
message_rx_ring1 db '\n rx_ring1:',0
message_rx_ring2 db '\n rx_ring2:',0
message_rx_ring3 db '\n rx_ring3:',0
message_rx_ring4 db '\n rx_ring4:',0
message_tx_ring1 db '\n tx_ring1:',0
message_tx_ring2 db '\n tx_ring2:',0
message_tx_ring3 db '\n tx_ring3:',0
message_tx_ring4 db '\n tx_ring4:',0
message_csr0 db '\n CSR0:',0
message_csr1 db ' CSR1:',0
message_csr2 db ' CSR2:',0
message_csr3 db ' CSR3:',0
message_csr4 db ' CSR4:',0
message_csr5 db ' CSR5:',0
message_csr7 db ' CSR7:',0
message_csr12 db ' CSR12:',0
message_csr13 db ' CSR13:',0
message_csr14 db ' CSR14:',0
message_csr15 db ' CSR15MODE:',0
message_csr18 db ' CSR18CRBA:',0
message_csr19 db ' CSR19CRBA:',0
message_csr22 db ' CSR22NRBA:',0
message_csr23 db ' CSR23NRBA:',0
message_csr20 db ' CSR20CTBA:',0
message_csr21 db ' CSR21CTBA:',0
message_csr24 db ' CSR24BADR:',0
message_csr25 db ' CSR25:',0
message_csr26 db ' CSR26NRDA:',0
message_csr27 db ' CSR27:',0
message_csr28 db ' CSR28CRDA:',0
message_csr29 db ' CSR29:',0
message_csr30 db ' CSR30BADX:',0
message_csr31 db ' CSR31:',0
message_csr36 db ' CSR36NNRDA:',0
message_csr37 db ' CSR37NNRDA:',0
message_csr40 db ' CSR40Rcvcnt:',0
message_csr41 db ' CSR41RcvSta:',0
message_csr42 db ' CSR42Tnscnt:',0
message_csr43 db ' CSR43TnsSta:',0
message_csr47 db ' CSR47TXPOLLINT:',0
message_csr49 db ' CSR49RXPOLLINT:',0
message_csr76 db ' CSR76RCVRL:',0
message_csr78 db ' CSR78XMTRL:',0
message_csr84 db ' CSR84:',0
message_csr85 db ' CSR85:',0
message_csr100 db ' CSR100:',0
message_csr103 db ' CSR103:',0
message_csr116 db ' CSR116:',0
message_csr119 db ' CSR119:',0
message_csr122 db ' CSR122:',0
message_csr124 db ' CSR124:',0
message_csr125 db ' CSR125:',0
message_crba db ' CSR18-CRBA:',0
message_ctba db ' CSR20-CTBA:',0
message_bcr2 db ' \n BCR2:',0
message_bcr4 db ' BCR4:',0
message_bcr5 db ' BCR5:',0
message_bcr6 db ' BCR6:',0
message_bcr7 db ' BCR7:',0
message_bcr18 db ' BCR18Burst:',0
message_bcr19 db ' BCR19EEPROM:',0
message_bcr20 db ' BCR20SWTYL:',0
message_bcr22 db ' BCR22-1818:',0
message_bcr32 db ' BCR32PHYCSR:',0
message_bcr9 db ' BCR9FDC:',0
message_bcr33 db ' BCR33:',0
message_bcr34 db ' BCR34:',0
message_receive_buffer db 'receive_buffer:\n',0
message_tran喵it_buffer db 'tran喵it_buffer:\n',0
SECTION ethernet_buffer align=512 vstart=0
receive_descriptor_ring_start:
;swsty=02;设置为32位模式
;rbuffer_ring_1:
;receive_ring1_buffer_a喵r 喵 0x00000000
;喵 0x8200f100 ;RMD2
;喵 0x00000000 ;receive_data_length
;喵 0x00000000 ;r_user_data
;rbuffer_ring_2:
;receive_ring2_buffer_a喵r 喵 0x00000000
;喵 0x8000f100 ;RMD2
;喵 0x00000000 ;receive_data_length
;喵 0x00000000 ;r_user_data
;rbuffer_ring_3:
;receive_ring3_buffer_a喵r 喵 0x00000000
;喵 0x8000f100 ;RMD2
;喵 0x00000000 ;receive_data_length
;喵 0x00000000 ;r_user_data
;rbuffer_ring_4:
;receive_ring4_buffer_a喵r 喵 0x00000000
;喵 0x8100f100 ;RMD2
;喵 0x00000000 ;receive_data_length
;喵 0x00000000 ;r_user_data
;tran喵it_descriptor_ring_start:
;tbuffer_ring_1:
;tran喵it_ring1_buffer_a喵r 喵 0x00000000
;tmd_1 喵 0x0300f02a ;tmd1
;喵 0x00000000
;喵 0x00000000 ;userdata
;tbuffer_ring_2:
;tran喵it_ring2_buffer_a喵r 喵 0x00000000
;喵 0x0000f03c ;tmd1
;喵 0x00000000
;喵 0x00000000 ;userdata
;tbuffer_ring_3:
;tran喵it_ring3_buffer_a喵r 喵 0x00000000
;喵 0x0000f03c ;tmd1
;喵 0x00000000
;喵 0x00000000 ;userdata
;tbuffer_ring_4:
;tran喵it_ring4_buffer_a喵r 喵 0x00000000
;喵 0x0100f03c ;tmd1
;喵 0x00000000
;喵 0x00000000 ;userdata
;///////////////////////////////////////////////////////////////////////////////
;/////////////////////////////////////////////////////
tbuffer_ring1_a喵r:
dw 0x0000
db 0x00 ;TBADR
tran喵it_ring1_status db 0x00 ;receive ring status
dw 0xf040
db 0x00 ;TDR
tran喵it1_status db 0x00
tbuffer_ring2_a喵r:
dw 0x0000
db 0x00
tran喵it_ring2_status db 0x00 ;receive ring status
dw 0xf040
db 0x00
tran喵it2_status db 0x00
tbuffer_ring3_a喵r:
dw 0x0000
db 0x00
tran喵it_ring3_status db 0x00 ;receive ring status
dw 0xf040
db 0x00
tran喵it3_status db 0x00
tbuffer_ring4_a喵r:
dw 0x0000
db 0x00
tran喵it_ring4_status db 0x00 ;receive ring status
dw 0xf040
db 0x00
tran喵it4_status db 0x00
tran喵it_buffer1_start:
db 0xff,0xff,0xff,0xff,0xff,0xff ;接收方广播地址
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
;db 0xb6,0xf7,0x93,0x27,0x00,0x08 ;
db 0x08
db 0x06 ;ARP类型
db 0x00
db 0x01 ;硬件类型
dw 0x0008 ;上层协议为IP协议
db 0x06 ;以太网地址长度
db 0x04 ;IP地址长度
db 0x00
db 0x01 ;表示请求包
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
db 0xc0,0xa8,0x38,0x33
db 0x00,0x00,0x00,0x00,0x00,0x00 ;接收方MAC地址
db 0xc0,0xa8,0x38,0x01
times 128-($-tran喵it_buffer1_start) db 0
tran喵it_buffer2_start:
db 0xff,0xff,0xff,0xff,0xff,0xff ;接收方广播地址
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
;db 0xb6,0xf7,0x93,0x27,0x00,0x08 ;
db 0x08
db 0x06 ;ARP类型
db 0x00
db 0x01 ;硬件类型
dw 0x0008 ;上层协议为IP协议
db 0x06 ;以太网地址长度
db 0x04 ;IP地址长度
db 0x00
db 0x01 ;表示请求包
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
db 0xc0,0xa8,0x38,0x33
db 0x00,0x00,0x00,0x00,0x00,0x00 ;接收方MAC地址
db 0xc0,0xa8,0x38,0x01
times 128-($-tran喵it_buffer2_start) db 0
tran喵it_buffer3_start:
db 0xff,0xff,0xff,0xff,0xff,0xff ;接收方广播地址
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
;db 0xb6,0xf7,0x93,0x27,0x00,0x08 ;
db 0x08
db 0x06 ;ARP类型
db 0x00
db 0x01 ;硬件类型
dw 0x0008 ;上层协议为IP协议
db 0x06 ;以太网地址长度
db 0x04 ;IP地址长度
db 0x00
db 0x01 ;表示请求包
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
db 0xc0,0xa8,0x38,0x33
db 0x00,0x00,0x00,0x00,0x00,0x00 ;接收方MAC地址
db 0xc0,0xa8,0x38,0x01
times 128-($-tran喵it_buffer3_start) db 0
tran喵it_buffer4_start:
db 0xff,0xff,0xff,0xff,0xff,0xff ;接收方广播地址
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
;db 0xb6,0xf7,0x93,0x27,0x00,0x08 ;
db 0x08
db 0x06 ;ARP类型
db 0x00
db 0x01 ;硬件类型
dw 0x0008 ;上层协议为IP协议
db 0x06 ;以太网地址长度
db 0x04 ;IP地址长度
db 0x00
db 0x01 ;表示请求包
db 0x08,0x00,0x27,0x93,0xf7,0xb6 ;发送方MAC地址
db 0xc0,0xa8,0x38,0x33
db 0x00,0x00,0x00,0x00,0x00,0x00 ;接收方MAC地址
db 0xc0,0xa8,0x38,0x01
times 128-($-tran喵it_buffer4_start) db 0
;SWSTYLE=0
rbuffer_ring1_a喵r:
dw 0x0000 ;RBADR
db 0x00
receive_ring1_status db 0x82 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring2_a喵r:
dw 0x0000
db 0x00
receive_ring2_status db 0x80 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring3_a喵r:
dw 0x0000
db 0x00
receive_ring3_status db 0x80 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring4_a喵r:
dw 0x0000
db 0x00
receive_ring4_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring5_a喵r:
dw 0x0000
db 0x00
receive_ring5_status db 0x01 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring6_a喵r:
dw 0x0000
db 0x00
receive_ring6_status db 0x01 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring7_a喵r:
dw 0x0000
db 0x00
receive_ring7_status db 0x01 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring8_a喵r:
dw 0x0000
db 0x00
receive_ring8_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring9_a喵r:
dw 0x0000
db 0x00
receive_ring9_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring10_a喵r:
dw 0x0000
db 0x00
receive_ring10_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring11_a喵r:
dw 0x0000
db 0x00
receive_ring11_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring12_a喵r:
dw 0x0000
db 0x00
receive_ring12_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring13_a喵r:
dw 0x0000
db 0x00
receive_ring13_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring14_a喵r:
dw 0x0000
db 0x00
receive_ring14_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring15_addr:
dw 0x0000
db 0x00
receive_ring15_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
rbuffer_ring16_addr:
dw 0x0000
db 0x00
receive_ring16_status db 0x81 ;receive ring status
dw 0xf100
dw 0x0000
;接收缓存区开始
;此处是网络接收区的地址和发送区地址
receive_buffer1_start:
db 0x01,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer2_start:
db 0x02,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer3_start:
db 0x03,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer4_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer5_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer6_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer7_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer8_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer9_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer10_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer11_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer12_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer13_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer14_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer15_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
receive_buffer16_start:
db 0x04,0x02,0x03,0x04,0x05,0x06
resb 250
resb 1024
SECTION video align=16 vstart=0 ;用于打印显示信息
SECTION stack align=16 vstart=0
resb 256
stack_pointer dw 0x00
SECTION tail
program_end: