forked from KolibriOS/kolibrios
A lot of bugfixes in ARP, IPv4, UDP and sockets code.
git-svn-id: svn://kolibrios.org@1206 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
78ba1dbcaa
commit
e39d270463
@ -35,27 +35,12 @@ START: ; start of execution
|
|||||||
|
|
||||||
mcall 4, 25 shl 16 + 31, 0x80000000, title
|
mcall 4, 25 shl 16 + 31, 0x80000000, title
|
||||||
|
|
||||||
;; call draw_stats
|
|
||||||
|
|
||||||
mcall 12, 2
|
mcall 12, 2
|
||||||
|
|
||||||
jmp draw_stats
|
|
||||||
|
|
||||||
mainloop:
|
|
||||||
|
|
||||||
mcall 23,50 ; wait for event with timeout (0,5 s)
|
|
||||||
|
|
||||||
cmp eax, 1
|
|
||||||
je redraw
|
|
||||||
cmp eax, 2
|
|
||||||
je key
|
|
||||||
cmp eax, 3
|
|
||||||
je button
|
|
||||||
|
|
||||||
|
|
||||||
draw_stats:
|
draw_stats:
|
||||||
|
|
||||||
mov edx, 50 shl 16 + 50
|
mov edx, 50 shl 16 + 50
|
||||||
|
mov [last],0
|
||||||
|
|
||||||
.loop:
|
.loop:
|
||||||
mcall 75, 0x06080003, [last],,,ARP_ENTRY
|
mcall 75, 0x06080003, [last],,,ARP_ENTRY
|
||||||
@ -130,6 +115,19 @@ START: ; start of execution
|
|||||||
|
|
||||||
jmp .loop
|
jmp .loop
|
||||||
|
|
||||||
|
mainloop:
|
||||||
|
|
||||||
|
mcall 23,50 ; wait for event with timeout (0,5 s)
|
||||||
|
|
||||||
|
cmp eax, 1
|
||||||
|
je redraw
|
||||||
|
cmp eax, 2
|
||||||
|
je key
|
||||||
|
cmp eax, 3
|
||||||
|
je button
|
||||||
|
|
||||||
|
jmp draw_stats
|
||||||
|
|
||||||
|
|
||||||
key:
|
key:
|
||||||
mcall 2
|
mcall 2
|
||||||
|
@ -20,7 +20,7 @@ include '../network_lib/network.inc'
|
|||||||
; entry point
|
; entry point
|
||||||
start:
|
start:
|
||||||
; load libraries
|
; load libraries
|
||||||
stdcall dll.Load, @IMPORT
|
stdcall dll.Load, @IMPORT
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jnz exit
|
jnz exit
|
||||||
; initialize console
|
; initialize console
|
||||||
@ -116,10 +116,10 @@ str5 db 'Name resolution failed.',10,0
|
|||||||
align 4
|
align 4
|
||||||
@IMPORT:
|
@IMPORT:
|
||||||
|
|
||||||
library network, 'network.obj', console, 'console.obj'
|
library network, 'network.obj', console, 'console.obj'
|
||||||
import network, \
|
import network, \
|
||||||
getaddrinfo, 'getaddrinfo', \
|
getaddrinfo, 'getaddrinfo', \
|
||||||
freeaddrinfo, 'freeaddrinfo', \
|
freeaddrinfo, 'freeaddrinfo', \
|
||||||
inet_ntoa, 'inet_ntoa'
|
inet_ntoa, 'inet_ntoa'
|
||||||
import console, \
|
import console, \
|
||||||
con_start, 'START', \
|
con_start, 'START', \
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 758 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;**********************************************************
|
;**********************************************************
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
sys_cd_audio:
|
sys_cd_audio:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 766 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;**********************************************************
|
;**********************************************************
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 820 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; Low-level driver for HDD access
|
; Low-level driver for HDD access
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
;
|
;
|
||||||
;**************************************************************************
|
;**************************************************************************
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
;; LFN support by diamond ;;
|
;; LFN support by diamond ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 1021 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; calculate fat chain
|
; calculate fat chain
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 684 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 1018 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;==========================================================================
|
;==========================================================================
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;
|
;
|
||||||
;======================================================================
|
;======================================================================
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
d80x25_bottom:
|
d80x25_bottom:
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;
|
;
|
||||||
;======================================================================
|
;======================================================================
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
d80x25_bottom:
|
d80x25_bottom:
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;
|
;
|
||||||
;======================================================================
|
;======================================================================
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
d80x25_bottom:
|
d80x25_bottom:
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;
|
;
|
||||||
;=================================================================
|
;=================================================================
|
||||||
|
|
||||||
$Revision: 751 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
d80x25_bottom:
|
d80x25_bottom:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; boot data: common strings (for all languages)
|
; boot data: common strings (for all languages)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 947 $
|
$Revision$
|
||||||
|
|
||||||
struc VBE_VGAInfo {
|
struc VBE_VGAInfo {
|
||||||
.VESASignature dd ? ; char
|
.VESASignature dd ? ; char
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; Full ASCII code font
|
; Full ASCII code font
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 767 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
display_modechg db 0 ; display mode change for text, yes/no (0 or 2)
|
display_modechg db 0 ; display mode change for text, yes/no (0 or 2)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; READ RAMDISK IMAGE FROM HD
|
; READ RAMDISK IMAGE FROM HD
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 774 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; Generated by RUFNT.EXE
|
; Generated by RUFNT.EXE
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 748 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
init_pci_16:
|
init_pci_16:
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
; Function
|
; Function
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
dpl0 equ 10010000b ; data read dpl0
|
dpl0 equ 10010000b ; data read dpl0
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
; {SPraid.simba}
|
; {SPraid.simba}
|
||||||
;-------------------------------------------------------------------------
|
;-------------------------------------------------------------------------
|
||||||
|
|
||||||
$Revision: 802 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
conf_path_sect: db 'path',0
|
conf_path_sect: db 'path',0
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; diamond, 2006
|
; diamond, 2006
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 1018 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
DRV_COMPAT equ 5 ;minimal required drivers version
|
DRV_COMPAT equ 5 ;minimal required drivers version
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
; Macroinstruction for making export section
|
; Macroinstruction for making export section
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 924 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;
|
;
|
||||||
;============================================================================
|
;============================================================================
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
macro library [name,fname]
|
macro library [name,fname]
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
init_fpu:
|
init_fpu:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
struc MEM_BLOCK
|
struc MEM_BLOCK
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 753 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; Small heap based on malloc/free/realloc written by Doug Lea
|
; Small heap based on malloc/free/realloc written by Doug Lea
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 978 $
|
$Revision$
|
||||||
|
|
||||||
include 'export.inc'
|
include 'export.inc'
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 907 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Author: Kees J. Bot 1 Jan 1994 ;;
|
;; Author: Kees J. Bot 1 Jan 1994 ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; size_t strncat(char *s1, const char *s2, size_t n)
|
; size_t strncat(char *s1, const char *s2, size_t n)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
;; Author: Halyavin Andrey, halyavin@land.ru ;;
|
;; Author: Halyavin Andrey, halyavin@land.ru ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
if ~defined sync_inc
|
if ~defined sync_inc
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 982 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
align 4 ;3A08
|
align 4 ;3A08
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 940 $
|
$Revision$
|
||||||
|
|
||||||
; Old style system call converter
|
; Old style system call converter
|
||||||
align 16
|
align 16
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 819 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
GREEDY_KERNEL equ 0
|
GREEDY_KERNEL equ 0
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 979 $
|
$Revision$
|
||||||
|
|
||||||
; Virtual-8086 mode manager
|
; Virtual-8086 mode manager
|
||||||
; diamond, 2007, 2008
|
; diamond, 2007, 2008
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
flm db 0
|
flm db 0
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 1018 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
keymap:
|
keymap:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;***************************************************
|
;***************************************************
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;******************************************************
|
;******************************************************
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
include 'dev_fd.inc'
|
include 'dev_fd.inc'
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
pusha
|
pusha
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 709 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;****************************************************
|
;****************************************************
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
$Revision$
|
||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
|
|
||||||
API_VERSION equ 0x01000100
|
API_VERSION equ 0x01000100
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
$Revision$
|
||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
|
|
||||||
API_VERSION equ 0x01000100
|
API_VERSION equ 0x01000100
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
$Revision$
|
||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
|
|
||||||
API_VERSION equ 0x01000100
|
API_VERSION equ 0x01000100
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;$Revision$
|
$Revision$
|
||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ struc ETH_DEVICE {
|
|||||||
|
|
||||||
; The following fields up to .tx_ring_phys inclusive form
|
; The following fields up to .tx_ring_phys inclusive form
|
||||||
; initialization block for hardware; do not modify
|
; initialization block for hardware; do not modify
|
||||||
align 4 ; initialization block must be dword-aligned
|
align 4 ; initialization block must be dword-aligned
|
||||||
.private:
|
.private:
|
||||||
.mode_ dw ?
|
.mode_ dw ?
|
||||||
.tlen_rlen dw ?
|
.tlen_rlen dw ?
|
||||||
@ -955,8 +955,8 @@ if 0
|
|||||||
; ------------------------------------------------
|
; ------------------------------------------------
|
||||||
end if
|
end if
|
||||||
|
|
||||||
; mov esi, 1
|
; mov esi, 1
|
||||||
; call Sleep
|
; call Sleep
|
||||||
|
|
||||||
|
|
||||||
reset:
|
reset:
|
||||||
@ -1217,7 +1217,7 @@ transmit:
|
|||||||
align 4
|
align 4
|
||||||
int_handler:
|
int_handler:
|
||||||
|
|
||||||
; DEBUGF 1,"IRQ %x ",eax:2 ; no, you cant replace 'eax:2' with 'al', this must be a bug in FDO
|
; DEBUGF 1,"IRQ %x ",eax:2 ; no, you cant replace 'eax:2' with 'al', this must be a bug in FDO
|
||||||
|
|
||||||
; find pointer of device wich made IRQ occur
|
; find pointer of device wich made IRQ occur
|
||||||
|
|
||||||
@ -1300,7 +1300,7 @@ int_handler:
|
|||||||
and ecx, 3
|
and ecx, 3
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
; mov word [eax + buf_head.length], PCNET_PKT_BUF_SZ_NEG
|
; mov word [eax + buf_head.length], PCNET_PKT_BUF_SZ_NEG
|
||||||
mov word [eax + buf_head.status], PCNET_RXSTAT_OWN ; Set OWN bit back to 1 (controller may write to tx-buffer again now)
|
mov word [eax + buf_head.status], PCNET_RXSTAT_OWN ; Set OWN bit back to 1 (controller may write to tx-buffer again now)
|
||||||
|
|
||||||
inc [ebx + device.cur_rx] ; update descriptor
|
inc [ebx + device.cur_rx] ; update descriptor
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
n_sector dd 0 ; temporary save for sector value
|
n_sector dd 0 ; temporary save for sector value
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 709 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
cache_max equ 1919 ; max. is 1919*512+0x610000=0x6ffe00
|
cache_max equ 1919 ; max. is 1919*512+0x610000=0x6ffe00
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 709 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 709 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
image_of_eax EQU esp+36
|
image_of_eax EQU esp+36
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
ntfs_test_bootsec:
|
ntfs_test_bootsec:
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
;
|
;
|
||||||
;-------------------------------------------------------------------------
|
;-------------------------------------------------------------------------
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 709 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;*************************************************************
|
;*************************************************************
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
max_buttons=4095
|
max_buttons=4095
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 671 $
|
$Revision$
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
align 4
|
align 4
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
; // Alver 22.06.2008 // {
|
; // Alver 22.06.2008 // {
|
||||||
align 4
|
align 4
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
include "skindata.inc"
|
include "skindata.inc"
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 994 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
get_titlebar_height: ; edi = window draw_data pointer
|
get_titlebar_height: ; edi = window draw_data pointer
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 641 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;// mike.dld [
|
;// mike.dld [
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; check mouse
|
; check mouse
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;setting date,time,clock and alarm-clock
|
;setting date,time,clock and alarm-clock
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;
|
;
|
||||||
;============================================================================
|
;============================================================================
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
MEM_WB equ 6 ;write-back memory
|
MEM_WB equ 6 ;write-back memory
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;struc db [a] { common . db a
|
;struc db [a] { common . db a
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------------------------------------
|
;------------------------------------------------------------------
|
||||||
|
@ -9,7 +9,7 @@ macro $Revision a {
|
|||||||
\}
|
\}
|
||||||
}
|
}
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; structure definition helper
|
; structure definition helper
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
ARP_NO_ENTRY equ 0
|
ARP_NO_ENTRY equ 0
|
||||||
@ -26,7 +26,7 @@ ARP_AWAITING_RESPONSE equ 2
|
|||||||
ARP_RESPONSE_TIMEOUT equ 3
|
ARP_RESPONSE_TIMEOUT equ 3
|
||||||
|
|
||||||
ARP_REQUEST_TTL = 20 ; in seconds
|
ARP_REQUEST_TTL = 20 ; in seconds
|
||||||
ARP_ENTRY_TTL = 30 ; in seconds
|
ARP_ENTRY_TTL = 600 ; in seconds
|
||||||
|
|
||||||
ETHER_ARP equ 0x0608
|
ETHER_ARP equ 0x0608
|
||||||
|
|
||||||
@ -135,8 +135,10 @@ ARP_IP_to_MAC:
|
|||||||
|
|
||||||
mov ebx, [IP_LIST+edx]
|
mov ebx, [IP_LIST+edx]
|
||||||
and ebx, [SUBNET_LIST+edx]
|
and ebx, [SUBNET_LIST+edx]
|
||||||
|
|
||||||
mov ecx, eax
|
mov ecx, eax
|
||||||
and ecx, [SUBNET_LIST+edx]
|
and ecx, [SUBNET_LIST+edx]
|
||||||
|
|
||||||
cmp ecx, ebx
|
cmp ecx, ebx
|
||||||
je .local
|
je .local
|
||||||
|
|
||||||
@ -146,12 +148,13 @@ ARP_IP_to_MAC:
|
|||||||
.local:
|
.local:
|
||||||
; try to find it on the list
|
; try to find it on the list
|
||||||
mov ecx, [NumARP]
|
mov ecx, [NumARP]
|
||||||
|
test ecx, ecx
|
||||||
jz .not_in_list
|
jz .not_in_list
|
||||||
mov esi, ARPTable + ARP_ENTRY.IP
|
mov esi, ARPTable + ARP_ENTRY.IP
|
||||||
.scan_loop:
|
.scan_loop:
|
||||||
scasd
|
cmp [esi], eax
|
||||||
jz .found_it
|
je .found_it
|
||||||
add esi, ARP_ENTRY.size - 4
|
add esi, ARP_ENTRY.size
|
||||||
loop .scan_loop
|
loop .scan_loop
|
||||||
.not_in_list:
|
.not_in_list:
|
||||||
|
|
||||||
@ -177,7 +180,8 @@ ARP_IP_to_MAC:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
.found_it:
|
.found_it:
|
||||||
DEBUGF 1,"Found MAC! (%u-%u-%u-%u-%u-%u)\n",[esi+0]:2,[esi+1]:2,[esi+2]:2,[esi+3]:2,[esi+4]:2,[esi+5]:2
|
add esi, ARP_ENTRY.MAC
|
||||||
|
DEBUGF 1,"Found MAC! (%x-%x-%x-%x-%x-%x)\n",[esi+0]:2,[esi+1]:2,[esi+2]:2,[esi+3]:2,[esi+4]:2,[esi+5]:2
|
||||||
movzx eax, word [esi]
|
movzx eax, word [esi]
|
||||||
mov ebx, [esi+2]
|
mov ebx, [esi+2]
|
||||||
|
|
||||||
@ -221,34 +225,30 @@ ARP_create_request:
|
|||||||
cmp edi, -1
|
cmp edi, -1
|
||||||
je .exit
|
je .exit
|
||||||
|
|
||||||
mov word [edi + ARP_Packet.HardwareType], 0x0100 ;Ethernet
|
mov ecx, eax
|
||||||
mov word [edi + ARP_Packet.ProtocolType], 0x0008 ;IP
|
|
||||||
mov byte [edi + ARP_Packet.HardwareSize], 6 ;MAC-addr length
|
mov [edi + ARP_Packet.HardwareType], 0x0100 ;Ethernet
|
||||||
mov byte [edi + ARP_Packet.ProtocolSize], 4 ;IP-addr length
|
mov [edi + ARP_Packet.ProtocolType], 0x0008 ;IP
|
||||||
mov word [edi + ARP_Packet.Opcode], ARP_REQ_OPCODE ;Request
|
mov [edi + ARP_Packet.HardwareSize], 6 ;MAC-addr length
|
||||||
|
mov [edi + ARP_Packet.ProtocolSize], 4 ;IP-addr length
|
||||||
|
mov [edi + ARP_Packet.Opcode], ARP_REQ_OPCODE ;Request
|
||||||
|
|
||||||
add edi, ARP_Packet.SenderMAC ; sendermac
|
add edi, ARP_Packet.SenderMAC ; sendermac
|
||||||
lea esi, [edx + ETH_DEVICE.mac] ;
|
lea esi, [ebx + ETH_DEVICE.mac] ;
|
||||||
movsw ;
|
movsw ;
|
||||||
movsd ;
|
movsd ;
|
||||||
|
pop eax ;
|
||||||
|
stosd ;
|
||||||
|
mov eax, -1 ; destmac
|
||||||
|
stosd ;
|
||||||
|
stosw ;
|
||||||
pop eax
|
pop eax
|
||||||
stosd ;
|
stosd ;
|
||||||
|
|
||||||
xor eax, eax ; destmac
|
DEBUGF 1,"ARP Packet for device %x created successfully\n", ebx
|
||||||
movsw ;
|
|
||||||
movsw ;
|
|
||||||
|
|
||||||
pop eax
|
push edx ecx
|
||||||
movsd ;
|
jmp ETH_Sender
|
||||||
|
|
||||||
DEBUGF 1,"ARP Packet for device %x created successfully\n", edx
|
|
||||||
|
|
||||||
call esi
|
|
||||||
|
|
||||||
inc [ARP_PACKETS_TX+4*edi]
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
.exit:
|
.exit:
|
||||||
add esp, 8
|
add esp, 8
|
||||||
@ -278,37 +278,38 @@ ARP_decrease_entry_ttls:
|
|||||||
|
|
||||||
.timer_loop:
|
.timer_loop:
|
||||||
|
|
||||||
movsx esi, word [ebx + ARP_ENTRY.TTL]
|
cmp [ebx + ARP_ENTRY.TTL], 0xFFFF
|
||||||
cmp esi, 0xFFFFFFFF
|
|
||||||
je .timer_loop_end ;if TTL==0xFFFF then it's static entry
|
je .timer_loop_end ;if TTL==0xFFFF then it's static entry
|
||||||
|
|
||||||
test esi, esi
|
cmp [ebx + ARP_ENTRY.TTL], 0
|
||||||
jnz .timer_loop_end_with_dec ;if TTL!=0
|
jnz .timer_loop_end_with_dec ;if TTL!=0
|
||||||
|
|
||||||
; Ok, TTL is 0
|
; Ok, TTL is 0
|
||||||
;if Status==AWAITING_RESPONSE and TTL==0
|
;if Status==AWAITING_RESPONSE and TTL==0
|
||||||
;then we have to change it to ARP_RESPONSE_TIMEOUT
|
;then we have to change it to ARP_RESPONSE_TIMEOUT
|
||||||
cmp word [ebx + ARP_ENTRY.Status], ARP_AWAITING_RESPONSE
|
cmp [ebx + ARP_ENTRY.Status], ARP_AWAITING_RESPONSE
|
||||||
jne @f
|
jne @f
|
||||||
|
|
||||||
mov word [ebx + ARP_ENTRY.Status], ARP_RESPONSE_TIMEOUT
|
mov [ebx + ARP_ENTRY.Status], ARP_RESPONSE_TIMEOUT
|
||||||
mov word [ebx + ARP_ENTRY.TTL], word 0x000A ;10 sec
|
mov [ebx + ARP_ENTRY.TTL], word 0x000A ;10 sec
|
||||||
jmp .timer_loop_end
|
jmp .timer_loop_end
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
;if TTL==0 and Status==VALID_MAPPING, we have to delete it
|
;if TTL==0 and Status==VALID_MAPPING, we have to delete it
|
||||||
;if TTL==0 and Status==RESPONSE_TIMEOUT, delete too
|
;if TTL==0 and Status==RESPONSE_TIMEOUT, delete too
|
||||||
mov esi, dword[NumARP]
|
mov esi, [NumARP]
|
||||||
sub esi, ecx ;esi=index of entry, will be deleted
|
sub esi, ecx ;esi=index of entry, will be deleted
|
||||||
|
|
||||||
|
push ebx ecx
|
||||||
call ARP_del_entry
|
call ARP_del_entry
|
||||||
|
pop ecx ebx
|
||||||
|
|
||||||
jmp .timer_loop_end
|
jmp .timer_loop_end
|
||||||
|
|
||||||
|
|
||||||
.timer_loop_end_with_dec:
|
.timer_loop_end_with_dec:
|
||||||
|
|
||||||
dec word [ebx + ARP_ENTRY.TTL] ;decrease TTL
|
dec [ebx + ARP_ENTRY.TTL] ;decrease TTL
|
||||||
|
|
||||||
.timer_loop_end:
|
.timer_loop_end:
|
||||||
|
|
||||||
@ -338,6 +339,8 @@ ARP_decrease_entry_ttls:
|
|||||||
align 4
|
align 4
|
||||||
ARP_add_entry:
|
ARP_add_entry:
|
||||||
|
|
||||||
|
DEBUGF 1,"ARP add entry: "
|
||||||
|
|
||||||
mov ecx, [NumARP]
|
mov ecx, [NumARP]
|
||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .add
|
jz .add
|
||||||
@ -355,7 +358,7 @@ ARP_add_entry:
|
|||||||
cmp dword[esi + ARP_ENTRY.TTL], 0xFFFF ; static entry
|
cmp dword[esi + ARP_ENTRY.TTL], 0xFFFF ; static entry
|
||||||
jne .notstatic
|
jne .notstatic
|
||||||
cmp dword[esp + ARP_ENTRY.TTL], 0xFFFF
|
cmp dword[esp + ARP_ENTRY.TTL], 0xFFFF
|
||||||
jne .exit
|
jne .error
|
||||||
.notstatic:
|
.notstatic:
|
||||||
|
|
||||||
mov ebx, [NumARP]
|
mov ebx, [NumARP]
|
||||||
@ -369,14 +372,13 @@ ARP_add_entry:
|
|||||||
|
|
||||||
mov ecx, [NumARP]
|
mov ecx, [NumARP]
|
||||||
cmp ecx, ARP_TABLE_SIZE
|
cmp ecx, ARP_TABLE_SIZE
|
||||||
jge .full
|
jge .error
|
||||||
|
|
||||||
.add:
|
.add:
|
||||||
|
|
||||||
push ecx
|
push ecx
|
||||||
imul ecx, ARP_ENTRY.size
|
imul ecx, ARP_ENTRY.size
|
||||||
lea edi, [ecx + ARPTable]
|
lea edi, [ecx + ARPTable]
|
||||||
lea esi, [esp + 4]
|
lea esi, [esp + 8]
|
||||||
mov ecx, ARP_ENTRY.size/2
|
mov ecx, ARP_ENTRY.size/2
|
||||||
repz movsw
|
repz movsw
|
||||||
|
|
||||||
@ -384,17 +386,19 @@ ARP_add_entry:
|
|||||||
pop eax
|
pop eax
|
||||||
|
|
||||||
.exit:
|
.exit:
|
||||||
|
pop ebx ; return addr
|
||||||
|
add esp, ARP_ENTRY.size
|
||||||
|
DEBUGF 1,"Exiting\n"
|
||||||
|
jmp ebx
|
||||||
|
|
||||||
add esp, 14
|
.error:
|
||||||
ret
|
|
||||||
|
|
||||||
.full:
|
DEBUGF 1,"error! \n"
|
||||||
|
|
||||||
mov eax, -1
|
mov eax, -1
|
||||||
jmp .exit
|
jmp .exit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------------
|
;---------------------------------------------------------------------------
|
||||||
;
|
;
|
||||||
; ARP_del_entry
|
; ARP_del_entry
|
||||||
@ -407,6 +411,13 @@ ARP_add_entry:
|
|||||||
align 4
|
align 4
|
||||||
ARP_del_entry:
|
ARP_del_entry:
|
||||||
|
|
||||||
|
DEBUGF 1,"ARP del entry %u, total entrys: %u\n", esi, [NumARP]
|
||||||
|
|
||||||
|
cmp esi, [NumARP]
|
||||||
|
jge .error
|
||||||
|
|
||||||
|
DEBUGF 1,"deleting the entry..\n"
|
||||||
|
|
||||||
imul esi, ARP_ENTRY.size
|
imul esi, ARP_ENTRY.size
|
||||||
|
|
||||||
mov ecx, (ARP_TABLE_SIZE - 1) * ARP_ENTRY.size
|
mov ecx, (ARP_TABLE_SIZE - 1) * ARP_ENTRY.size
|
||||||
@ -416,10 +427,10 @@ ARP_del_entry:
|
|||||||
lea esi, [edi + ARP_ENTRY.size] ;esi=ptr to next entry
|
lea esi, [edi + ARP_ENTRY.size] ;esi=ptr to next entry
|
||||||
|
|
||||||
shr ecx,1 ;ecx/2 => ARP_ENTRY_SIZE MUST BE EVEN NUMBER!
|
shr ecx,1 ;ecx/2 => ARP_ENTRY_SIZE MUST BE EVEN NUMBER!
|
||||||
cld
|
|
||||||
rep movsw
|
rep movsw
|
||||||
|
|
||||||
dec [NumARP] ;decrease arp-entries counter
|
dec [NumARP] ;decrease arp-entries counter
|
||||||
|
.error:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
@ -449,34 +460,40 @@ ARP_handler:
|
|||||||
cmp word [edx + ARP_Packet.Opcode], ARP_REP_OPCODE ; Is this a reply packet?
|
cmp word [edx + ARP_Packet.Opcode], ARP_REP_OPCODE ; Is this a reply packet?
|
||||||
jne .maybe_request
|
jne .maybe_request
|
||||||
|
|
||||||
|
DEBUGF 1,"ARP_Handler - it's a reply packet from %u.%u.%u.%u\n",\
|
||||||
|
[edx + ARP_Packet.SenderIP]:1,[edx + ARP_Packet.SenderIP+1]:1,[edx + ARP_Packet.SenderIP+2]:1,[edx + ARP_Packet.SenderIP+3]:1,
|
||||||
|
|
||||||
mov ecx, [NumARP]
|
mov ecx, [NumARP]
|
||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .exit
|
jz .exit
|
||||||
|
|
||||||
mov eax, [esp]
|
mov eax, [edx + ARP_Packet.SenderIP]
|
||||||
mov eax, [eax + ARP_Packet.SenderIP]
|
|
||||||
mov esi, ARPTable+ARP_ENTRY.IP
|
mov esi, ARPTable+ARP_ENTRY.IP
|
||||||
|
|
||||||
.loop:
|
.loop:
|
||||||
scasd
|
cmp [esi], eax
|
||||||
jz .gotit
|
je .gotit
|
||||||
add esi, ARP_ENTRY.size-4
|
add esi, ARP_ENTRY.size
|
||||||
loop .loop
|
loop .loop
|
||||||
|
|
||||||
jmp .exit
|
jmp .exit
|
||||||
|
|
||||||
.gotit:
|
.gotit:
|
||||||
cmp [esi-4+ARP_ENTRY.Status], 0x0300 ;if it is a static entry, dont touch it
|
|
||||||
|
DEBUGF 1,"ARP_Handler - found matching entry\n"
|
||||||
|
|
||||||
|
cmp [esi+ARP_ENTRY.Status], 0x0300 ;if it is a static entry, dont touch it
|
||||||
je .exit
|
je .exit
|
||||||
|
|
||||||
mov [esi-4+ARP_ENTRY.Status], ARP_VALID_MAPPING
|
DEBUGF 1,"ARP_Handler - updating entry\n"
|
||||||
mov [esi+ARP_ENTRY.TTL-4], ARP_ENTRY_TTL
|
|
||||||
|
|
||||||
mov ebx, [esp]
|
mov [esi+ARP_ENTRY.Status], ARP_VALID_MAPPING
|
||||||
mov eax, dword [ebx + ARP_Packet.SenderMAC]
|
mov [esi+ARP_ENTRY.TTL], ARP_ENTRY_TTL
|
||||||
mov dword [esi+ARP_ENTRY.MAC-4], eax
|
|
||||||
mov ax , word [ebx + ARP_Packet.SenderMAC + 4]
|
mov eax, dword [edx + ARP_Packet.SenderMAC]
|
||||||
mov word [esi+ARP_ENTRY.MAC-4+4], ax
|
mov dword [esi+ARP_ENTRY.MAC], eax
|
||||||
|
mov ax , word [edx + ARP_Packet.SenderMAC + 4]
|
||||||
|
mov word [esi+ARP_ENTRY.MAC+4], ax
|
||||||
|
|
||||||
jmp .exit
|
jmp .exit
|
||||||
|
|
||||||
@ -489,7 +506,7 @@ ARP_handler:
|
|||||||
jne .exit
|
jne .exit
|
||||||
|
|
||||||
call ETH_struc2dev
|
call ETH_struc2dev
|
||||||
DEBUGF 1,"ARP Packet came from device: %u\n", edi
|
DEBUGF 1,"ARP Request packet through device: %u\n", edi
|
||||||
inc [ARP_PACKETS_RX+4*edi]
|
inc [ARP_PACKETS_RX+4*edi]
|
||||||
cmp edi, -1
|
cmp edi, -1
|
||||||
jz .exit
|
jz .exit
|
||||||
@ -536,13 +553,15 @@ ARP_handler:
|
|||||||
; mov ax , ETHER_ARP
|
; mov ax , ETHER_ARP
|
||||||
; stosw
|
; stosw
|
||||||
|
|
||||||
|
DEBUGF 1,"ARP_Handler - Sending reply \n"
|
||||||
|
|
||||||
jmp ETH_Sender ; And send it!
|
jmp ETH_Sender ; And send it!
|
||||||
|
|
||||||
.exit:
|
.exit:
|
||||||
call kernel_free
|
call kernel_free
|
||||||
add esp, 4 ; pop (balance stack)
|
add esp, 4 ; pop (balance stack)
|
||||||
|
|
||||||
DEBUGF 1,"ARP_Handler - fail\n"
|
DEBUGF 1,"ARP_Handler - exiting\n"
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 922 $
|
$Revision$
|
||||||
|
|
||||||
; IP underlying protocols numbers
|
; IP underlying protocols numbers
|
||||||
|
|
||||||
@ -507,29 +507,23 @@ IPv4_decrease_fragment_ttls:
|
|||||||
align 4
|
align 4
|
||||||
IPv4_create_packet:
|
IPv4_create_packet:
|
||||||
|
|
||||||
DEBUGF 1,"Create IPv4 Packet\n"
|
DEBUGF 1,"Create IPv4 Packet (size=%u)\n", ecx
|
||||||
|
|
||||||
cmp ecx, 1514
|
cmp ecx, 1480
|
||||||
jg .exit_
|
jg .exit_
|
||||||
|
|
||||||
|
push ecx eax ebx dx di
|
||||||
|
|
||||||
cmp eax, -1
|
cmp eax, -1
|
||||||
je .broadcast ; If it is broadcast, just send
|
je .broadcast ; If it is broadcast, just send
|
||||||
|
|
||||||
call ARP_IP_to_MAC
|
call ARP_IP_to_MAC
|
||||||
|
|
||||||
cmp eax, -1
|
cmp eax, -1
|
||||||
jne .found
|
je .not_found
|
||||||
|
|
||||||
DEBUGF 1,"Create IPv4 Packet - ARP entry not found!\n"
|
|
||||||
|
|
||||||
; TODO: QUEUE!
|
|
||||||
or edi, -1
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
.found:
|
|
||||||
push ax
|
|
||||||
push ebx
|
push ebx
|
||||||
|
push ax
|
||||||
|
|
||||||
jmp .send
|
jmp .send
|
||||||
|
|
||||||
@ -537,19 +531,17 @@ IPv4_create_packet:
|
|||||||
push word -1
|
push word -1
|
||||||
push dword -1
|
push dword -1
|
||||||
|
|
||||||
|
|
||||||
.send:
|
.send:
|
||||||
push ecx eax ebx dx di
|
|
||||||
call IPv4_dest_to_dev
|
call IPv4_dest_to_dev
|
||||||
inc [IP_PACKETS_TX+4*edi]
|
inc [IP_PACKETS_TX+4*edi]
|
||||||
mov edi, [ETH_DRV_LIST + 4*edi]
|
mov edx, [ETH_DRV_LIST + 4*edi]
|
||||||
lea eax, [edi + ETH_DEVICE.mac]
|
lea eax, [edx + ETH_DEVICE.mac]
|
||||||
lea ebx, [esp+16]
|
mov ebx, esp
|
||||||
mov ecx, [esp+12]
|
mov ecx, [esp+18] ;; 18 or 22 ??
|
||||||
add ecx, IPv4_Packet.DataOrOptional
|
add ecx, IPv4_Packet.DataOrOptional
|
||||||
mov edx, edi ;;;
|
|
||||||
mov di , ETHER_IPv4
|
mov di , ETHER_IPv4
|
||||||
call ETH_create_Packet ; TODO: figure out a way to make this work with other protocols too
|
call ETH_create_Packet ; TODO: figure out a way to make this work with other protocols too
|
||||||
|
add esp, 6
|
||||||
cmp edi, -1
|
cmp edi, -1
|
||||||
je .exit
|
je .exit
|
||||||
|
|
||||||
@ -578,12 +570,14 @@ IPv4_create_packet:
|
|||||||
|
|
||||||
DEBUGF 1,"IPv4 Packet for device %x created successfully\n", edx
|
DEBUGF 1,"IPv4 Packet for device %x created successfully\n", edx
|
||||||
|
|
||||||
add esp, 6
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
.not_found:
|
||||||
|
DEBUGF 1,"Create IPv4 Packet - ARP entry not found!\n"
|
||||||
|
; TODO: QUEUE!
|
||||||
.exit:
|
.exit:
|
||||||
add esp, 16+6
|
add esp, 16
|
||||||
.exit_:
|
.exit_:
|
||||||
DEBUGF 1,"Create IPv4 Packet - failed\n"
|
DEBUGF 1,"Create IPv4 Packet - failed\n"
|
||||||
or edi, -1
|
or edi, -1
|
||||||
@ -591,6 +585,7 @@ IPv4_create_packet:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------------
|
;---------------------------------------------------------------------------
|
||||||
;
|
;
|
||||||
; IPv4_dest_to_dev
|
; IPv4_dest_to_dev
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
MAX_ETH_DEVICES equ MAX_NET_DEVICES
|
MAX_ETH_DEVICES equ MAX_NET_DEVICES
|
||||||
ETH_QUEUE_SIZE equ 16
|
ETH_QUEUE_SIZE equ 16
|
||||||
@ -352,11 +352,11 @@ ETH_struc2dev:
|
|||||||
; device number in edx
|
; device number in edx
|
||||||
; protocol in di
|
; protocol in di
|
||||||
;
|
;
|
||||||
; OUT: edi is -1 on error, pointer to buffer otherwise ;; TODO: XCHG EDX AND EBX output parameters
|
; OUT: edi is -1 on error, pointer to buffer otherwise
|
||||||
; eax points to buffer start
|
; eax points to buffer start
|
||||||
; ebx is size of complete buffer
|
; ebx is pointer to device structure
|
||||||
; ecx is unchanged (packet size of embedded data)
|
; ecx is unchanged (packet size of embedded data)
|
||||||
; edx is pointer to device structure
|
; edx is size of complete buffer
|
||||||
; esi points to procedure wich needs to be called to send packet
|
; esi points to procedure wich needs to be called to send packet
|
||||||
;
|
;
|
||||||
;---------------------------------------------------------------------------
|
;---------------------------------------------------------------------------
|
||||||
@ -364,11 +364,9 @@ ETH_struc2dev:
|
|||||||
align 4
|
align 4
|
||||||
ETH_create_Packet:
|
ETH_create_Packet:
|
||||||
|
|
||||||
DEBUGF 1,"Creating Ethernet Packet:\n"
|
DEBUGF 1,"Creating Ethernet Packet (size=%u): \n", ecx
|
||||||
|
|
||||||
cmp ecx, 60-ETH_FRAME.Data
|
cmp ecx, 1500
|
||||||
jl .exit
|
|
||||||
cmp ecx, 1514-ETH_FRAME.Data
|
|
||||||
jg .exit
|
jg .exit
|
||||||
|
|
||||||
push ecx di eax ebx edx
|
push ecx di eax ebx edx
|
||||||
@ -394,22 +392,31 @@ ETH_create_Packet:
|
|||||||
stosw
|
stosw
|
||||||
|
|
||||||
lea eax, [edi - ETH_FRAME.Data] ; Set eax to buffer start
|
lea eax, [edi - ETH_FRAME.Data] ; Set eax to buffer start
|
||||||
mov ebx, ecx ; Set ebx to complete buffer size
|
mov edx, ecx ; Set ebx to complete buffer size
|
||||||
pop ecx
|
pop ecx
|
||||||
mov esi, ETH_Sender
|
mov esi, ETH_Sender
|
||||||
|
|
||||||
xor edx, edx ;;;; TODO: Fixme
|
xor ebx, ebx ;;;; TODO: Fixme
|
||||||
mov edx, [ETH_DRV_LIST + edx]
|
mov ebx, [ETH_DRV_LIST + ebx]
|
||||||
|
|
||||||
DEBUGF 1,"done: %x size:%u device:%x\n", eax, ebx, edx
|
cmp edx, 46 + ETH_FRAME.Data ; If data size is less then 46, add padding bytes
|
||||||
|
jg .continue
|
||||||
|
mov edx, 46 + ETH_FRAME.Data
|
||||||
|
.continue:
|
||||||
|
|
||||||
|
DEBUGF 1,"done: %x size:%u device:%x\n", eax, edx, ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.pop_exit:
|
.pop_exit:
|
||||||
|
DEBUGF 1,"Out of ram space!!\n"
|
||||||
add esp, 18
|
add esp, 18
|
||||||
.exit:
|
or edi,-1
|
||||||
or edi, -1
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
.exit:
|
||||||
|
DEBUGF 1,"Packet too large!\n"
|
||||||
|
or edi, -1
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
; ICMP types & codes
|
; ICMP types & codes
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ ICMP_handler: ;TODO: works only on pure ethernet right now !
|
|||||||
|
|
||||||
|
|
||||||
.check_sockets:
|
.check_sockets:
|
||||||
; TODO: validate the header & checksum. Discard buffer if error
|
; TODO: validate the header & checksum.
|
||||||
|
|
||||||
; Look for an open ICMP socket
|
; Look for an open ICMP socket
|
||||||
|
|
||||||
@ -387,7 +387,7 @@ ICMP_create_packet:
|
|||||||
cmp edi, -1
|
cmp edi, -1
|
||||||
je .exit
|
je .exit
|
||||||
|
|
||||||
DEBUGF 1,"full icmp packet size: %u\n", ebx
|
DEBUGF 1,"full icmp packet size: %u\n", edx
|
||||||
|
|
||||||
pop eax
|
pop eax
|
||||||
mov word [edi + ICMP_Packet.Type], ax ; Write both type and code bytes at once
|
mov word [edi + ICMP_Packet.Type], ax ; Write both type and code bytes at once
|
||||||
@ -411,8 +411,7 @@ ICMP_create_packet:
|
|||||||
and cx , 3
|
and cx , 3
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
sub edi, ebx ;; TODO: find a better way to remember start of packet
|
sub edi, edx ;; TODO: find a better way to remember start of packet
|
||||||
xchg ebx, edx
|
|
||||||
mov ecx, [ebx + ETH_DEVICE.transmit]
|
mov ecx, [ebx + ETH_DEVICE.transmit]
|
||||||
push edx edi ecx
|
push edx edi ecx
|
||||||
DEBUGF 1,"Sending ICMP Packet\n"
|
DEBUGF 1,"Sending ICMP Packet\n"
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
struct queue
|
struct queue
|
||||||
.size dd ?
|
.size dd ?
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 1019 $
|
$Revision$
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
struct SOCKET
|
struct SOCKET
|
||||||
@ -27,8 +27,8 @@ struct SOCKET
|
|||||||
.Protocol dd ? ; ICMP/IPv4/ARP/
|
.Protocol dd ? ; ICMP/IPv4/ARP/
|
||||||
.LocalIP dd ? ; local IP address
|
.LocalIP dd ? ; local IP address
|
||||||
.RemoteIP dd ? ; remote IP address
|
.RemoteIP dd ? ; remote IP address
|
||||||
.LocalPort dw ? ; local port
|
.LocalPort dw ? ; local port (In INET byte order)
|
||||||
.RemotePort dw ? ; remote port
|
.RemotePort dw ? ; remote port (IN INET byte order
|
||||||
.OrigRemoteIP dd ? ; original remote IP address (used to reset to LISTEN state)
|
.OrigRemoteIP dd ? ; original remote IP address (used to reset to LISTEN state)
|
||||||
.OrigRemotePort dw ? ; original remote port (used to reset to LISTEN state)
|
.OrigRemotePort dw ? ; original remote port (used to reset to LISTEN state)
|
||||||
.rxDataCount dd ? ; rx data count
|
.rxDataCount dd ? ; rx data count
|
||||||
@ -130,6 +130,7 @@ s_error:
|
|||||||
; OUT: eax is socket num, -1 on error
|
; OUT: eax is socket num, -1 on error
|
||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
socket_open:
|
socket_open:
|
||||||
|
|
||||||
DEBUGF 1,"socket_open: domain: %u, type: %u",ecx, edx
|
DEBUGF 1,"socket_open: domain: %u, type: %u",ecx, edx
|
||||||
@ -162,7 +163,7 @@ socket_open:
|
|||||||
; OUT: 0 on success
|
; OUT: 0 on success
|
||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
socket_bind:
|
socket_bind:
|
||||||
|
|
||||||
DEBUGF 1,"Socket_bind: socknum: %u sockaddr: %x, length: %u, ",ecx,edx,esi
|
DEBUGF 1,"Socket_bind: socknum: %u sockaddr: %x, length: %u, ",ecx,edx,esi
|
||||||
@ -175,51 +176,32 @@ socket_bind:
|
|||||||
jl s_error
|
jl s_error
|
||||||
|
|
||||||
cmp word [edx], AF_INET4
|
cmp word [edx], AF_INET4
|
||||||
je .af_inet4
|
jne s_error
|
||||||
|
|
||||||
jmp s_error
|
|
||||||
|
|
||||||
.af_inet4:
|
.af_inet4:
|
||||||
|
|
||||||
cmp esi, 6
|
cmp esi, 6
|
||||||
jl s_error
|
jl s_error
|
||||||
|
|
||||||
|
mov ecx, [eax + SOCKET.Type]
|
||||||
mov bx, word [edx + 2]
|
mov bx, word [edx + 2]
|
||||||
rol bx,8 ;;;
|
DEBUGF 1,"local port: %x ",bx
|
||||||
DEBUGF 1,"local port: %u ",bx
|
|
||||||
test bx, bx
|
test bx, bx
|
||||||
jnz .check_only
|
jz .find_free
|
||||||
|
|
||||||
mov bx , [last_UDP_port]
|
call socket_check_port
|
||||||
|
test bx, bx
|
||||||
|
je s_error
|
||||||
|
jmp .got_port
|
||||||
|
|
||||||
.find_port_loop:
|
.find_free:
|
||||||
inc bx
|
|
||||||
inc [last_UDP_port]
|
|
||||||
|
|
||||||
.check_only:
|
call socket_find_port
|
||||||
mov esi, net_sockets
|
test bx, bx
|
||||||
|
je s_error
|
||||||
|
|
||||||
.next_udp_socket:
|
.got_port:
|
||||||
mov esi, [esi + SOCKET.NextPtr]
|
DEBUGF 1,"using port: %x ",bx
|
||||||
or esi, esi
|
|
||||||
jz .udp_port_ok
|
|
||||||
|
|
||||||
cmp [esi + SOCKET.Type], IP_PROTO_UDP
|
|
||||||
jne .next_udp_socket
|
|
||||||
|
|
||||||
cmp [esi + SOCKET.LocalPort], bx
|
|
||||||
jne .next_udp_socket
|
|
||||||
|
|
||||||
cmp word [edx + 2], 0
|
|
||||||
jne s_error
|
|
||||||
|
|
||||||
cmp bx, MAX_EPHEMERAL_PORT
|
|
||||||
jle .find_port_loop
|
|
||||||
|
|
||||||
mov [last_UDP_port], MIN_EPHEMERAL_PORT
|
|
||||||
jmp s_error
|
|
||||||
|
|
||||||
.udp_port_ok:
|
|
||||||
mov word [eax + SOCKET.LocalPort], bx
|
mov word [eax + SOCKET.LocalPort], bx
|
||||||
|
|
||||||
mov ebx, dword [edx + 4]
|
mov ebx, dword [edx + 4]
|
||||||
@ -246,7 +228,6 @@ socket_bind:
|
|||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
socket_connect:
|
socket_connect:
|
||||||
|
|
||||||
DEBUGF 1,"Socket_connect: socknum: %u sockaddr: %x, length: %u,",ecx,edx,esi
|
DEBUGF 1,"Socket_connect: socknum: %u sockaddr: %x, length: %u,",ecx,edx,esi
|
||||||
@ -274,22 +255,19 @@ socket_connect:
|
|||||||
cmp [eax + SOCKET.Type], IP_PROTO_ICMP
|
cmp [eax + SOCKET.Type], IP_PROTO_ICMP
|
||||||
je .icmp
|
je .icmp
|
||||||
|
|
||||||
; cmp [eax + SOCKET.Type], IP_PROTO_TCP
|
cmp [eax + SOCKET.Type], IP_PROTO_TCP
|
||||||
; je .tcp
|
je .tcp
|
||||||
|
|
||||||
jmp s_error
|
jmp s_error
|
||||||
|
|
||||||
.udp:
|
.udp:
|
||||||
|
|
||||||
mov bx , word [edx + 2]
|
mov bx , word [edx + 2]
|
||||||
rol bx, 8
|
|
||||||
mov word [eax + SOCKET.RemotePort], bx
|
mov word [eax + SOCKET.RemotePort], bx
|
||||||
|
DEBUGF 1,"remote port: %x ",bx
|
||||||
DEBUGF 1,"remote port: %u ",bx
|
|
||||||
|
|
||||||
mov ebx, dword [edx + 4]
|
mov ebx, dword [edx + 4]
|
||||||
mov dword [eax + SOCKET.RemoteIP], ebx
|
mov dword [eax + SOCKET.RemoteIP], ebx
|
||||||
|
|
||||||
DEBUGF 1,"remote ip: %u.%u.%u.%u\n",[edx+4]:1,[edx+5]:1,[edx+6]:1,[edx+7]:1
|
DEBUGF 1,"remote ip: %u.%u.%u.%u\n",[edx+4]:1,[edx+5]:1,[edx+6]:1,[edx+7]:1
|
||||||
|
|
||||||
mov dword [esp+32],0
|
mov dword [esp+32],0
|
||||||
@ -395,7 +373,7 @@ socket_connect:
|
|||||||
; OUT: eax is socket num, -1 on error
|
; OUT: eax is socket num, -1 on error
|
||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
socket_listen:
|
socket_listen:
|
||||||
|
|
||||||
DEBUGF 1,"Socket_listen: socknum: %u backlog: %u\n",ecx,edx
|
DEBUGF 1,"Socket_listen: socknum: %u backlog: %u\n",ecx,edx
|
||||||
@ -432,8 +410,7 @@ socket_listen:
|
|||||||
; OUT: eax is socket num, -1 on error
|
; OUT: eax is socket num, -1 on error
|
||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
|
|
||||||
socket_accept:
|
socket_accept:
|
||||||
|
|
||||||
DEBUGF 1,"Socket_accept: socknum: %u sockaddr: %x, length: %u\n",ecx,edx,esi
|
DEBUGF 1,"Socket_accept: socknum: %u sockaddr: %x, length: %u\n",ecx,edx,esi
|
||||||
@ -479,7 +456,7 @@ socket_accept:
|
|||||||
; OUT: eax is socket num, -1 on error
|
; OUT: eax is socket num, -1 on error
|
||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
socket_close:
|
socket_close:
|
||||||
|
|
||||||
DEBUGF 1,"Socket_close: socknum: %u\n",ecx
|
DEBUGF 1,"Socket_close: socknum: %u\n",ecx
|
||||||
@ -495,8 +472,8 @@ socket_close:
|
|||||||
cmp [eax + SOCKET.Type], IP_PROTO_ICMP
|
cmp [eax + SOCKET.Type], IP_PROTO_ICMP
|
||||||
je .icmp
|
je .icmp
|
||||||
|
|
||||||
; cmp [eax + SOCKET.Type], IP_PROTO_TCP
|
cmp [eax + SOCKET.Type], IP_PROTO_TCP
|
||||||
; je .tcp
|
je .tcp
|
||||||
|
|
||||||
jmp s_error
|
jmp s_error
|
||||||
|
|
||||||
@ -629,7 +606,7 @@ end if
|
|||||||
; OUT: eax is number of bytes copied, -1 on error
|
; OUT: eax is number of bytes copied, -1 on error
|
||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
socket_recv:
|
socket_recv:
|
||||||
|
|
||||||
DEBUGF 1,"Socket_receive: socknum: %u sockaddr: %x, length: %u, flags: %x\n",ecx,edx,esi,edi
|
DEBUGF 1,"Socket_receive: socknum: %u sockaddr: %x, length: %u, flags: %x\n",ecx,edx,esi,edi
|
||||||
@ -703,13 +680,13 @@ socket_recv:
|
|||||||
;
|
;
|
||||||
;
|
;
|
||||||
; IN: socket number in ecx
|
; IN: socket number in ecx
|
||||||
; addr in edx
|
; pointer to data in edx
|
||||||
; addrlen in esi
|
; datalength in esi
|
||||||
; flags in edi
|
; flags in edi
|
||||||
; OUT: -1 on error
|
; OUT: -1 on error
|
||||||
;
|
;
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
socket_send:
|
socket_send:
|
||||||
|
|
||||||
DEBUGF 1,"Socket_send: socknum: %u sockaddr: %x, length: %u, flags: %x, ",ecx,edx,esi,edi
|
DEBUGF 1,"Socket_send: socknum: %u sockaddr: %x, length: %u, flags: %x, ",ecx,edx,esi,edi
|
||||||
@ -718,6 +695,13 @@ socket_send:
|
|||||||
or eax, eax
|
or eax, eax
|
||||||
jz s_error
|
jz s_error
|
||||||
|
|
||||||
|
cmp word [eax + SOCKET.Domain], AF_INET4
|
||||||
|
je .af_inet4
|
||||||
|
|
||||||
|
jmp s_error
|
||||||
|
|
||||||
|
.af_inet4:
|
||||||
|
|
||||||
DEBUGF 1,"Socket type:%u\n", [eax + SOCKET.Type]:4
|
DEBUGF 1,"Socket type:%u\n", [eax + SOCKET.Type]:4
|
||||||
|
|
||||||
cmp [eax + SOCKET.Type], IP_PROTO_UDP
|
cmp [eax + SOCKET.Type], IP_PROTO_UDP
|
||||||
@ -726,21 +710,30 @@ socket_send:
|
|||||||
cmp [eax + SOCKET.Type], IP_PROTO_ICMP
|
cmp [eax + SOCKET.Type], IP_PROTO_ICMP
|
||||||
je .icmp
|
je .icmp
|
||||||
|
|
||||||
; cmp [eax + SOCKET.Type], IP_PROTO_TCP
|
cmp [eax + SOCKET.Type], IP_PROTO_TCP
|
||||||
; je .tcp
|
je .tcp
|
||||||
|
|
||||||
jmp s_error
|
jmp s_error
|
||||||
|
|
||||||
.udp:
|
.udp:
|
||||||
|
|
||||||
DEBUGF 1,"type: UDP\n"
|
DEBUGF 1,"type: UDP, "
|
||||||
|
|
||||||
|
cmp [eax + SOCKET.LocalPort],0
|
||||||
|
jne .port_ok
|
||||||
|
|
||||||
|
mov ecx, [eax + SOCKET.Type]
|
||||||
|
call socket_find_port
|
||||||
|
test bx, bx
|
||||||
|
je s_error
|
||||||
|
mov [eax + SOCKET.LocalPort], bx
|
||||||
|
|
||||||
|
.port_ok:
|
||||||
|
|
||||||
mov ecx, esi
|
mov ecx, esi
|
||||||
mov esi, edx
|
mov esi, edx
|
||||||
mov edx, dword [eax + SOCKET.LocalPort] ; load local port and remote port at once
|
mov edx, dword [eax + SOCKET.LocalPort] ; load local port and remote port at once
|
||||||
DEBUGF 1,"local port: %u, remote port:%u\n",[eax + SOCKET.LocalPort]:2, [eax + SOCKET.RemotePort]:2
|
DEBUGF 1,"local port: %x, remote port: %x\n",[eax + SOCKET.LocalPort]:2, [eax + SOCKET.RemotePort]:2
|
||||||
bswap edx ;;;
|
|
||||||
rol edx, 16 ;;;
|
|
||||||
mov ebx, [eax + SOCKET.LocalIP]
|
mov ebx, [eax + SOCKET.LocalIP]
|
||||||
mov eax, [eax + SOCKET.RemoteIP]
|
mov eax, [eax + SOCKET.RemoteIP]
|
||||||
|
|
||||||
@ -781,6 +774,173 @@ socket_send:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------
|
||||||
|
;
|
||||||
|
; SOCKET_find_free_port (local port)
|
||||||
|
;
|
||||||
|
; works with INET byte order
|
||||||
|
;
|
||||||
|
; IN: type in ecx (TCP/UDP)
|
||||||
|
; OUT: bx = 0 on error, portnumber otherwise
|
||||||
|
;
|
||||||
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
|
socket_find_port:
|
||||||
|
|
||||||
|
DEBUGF 1,"Socket_find_free_port, type: %u ",eax
|
||||||
|
|
||||||
|
cmp ecx, IP_PROTO_UDP
|
||||||
|
je .udp
|
||||||
|
|
||||||
|
cmp ecx, IP_PROTO_TCP
|
||||||
|
je .tcp
|
||||||
|
|
||||||
|
.udp:
|
||||||
|
mov bx, [last_UDP_port]
|
||||||
|
je .continue
|
||||||
|
|
||||||
|
.tcp:
|
||||||
|
mov bx, [last_TCP_port]
|
||||||
|
|
||||||
|
|
||||||
|
.continue:
|
||||||
|
inc bx
|
||||||
|
|
||||||
|
.check_only:
|
||||||
|
mov esi, net_sockets
|
||||||
|
|
||||||
|
.next_socket:
|
||||||
|
mov esi, [esi + SOCKET.NextPtr]
|
||||||
|
or esi, esi
|
||||||
|
jz .port_ok
|
||||||
|
|
||||||
|
cmp [esi + SOCKET.Type], ecx
|
||||||
|
jne .next_socket
|
||||||
|
|
||||||
|
rol bx, 8
|
||||||
|
cmp [esi + SOCKET.LocalPort], bx
|
||||||
|
rol bx, 8 ; this doesnt change the zero flag, does it ?
|
||||||
|
jne .next_socket
|
||||||
|
|
||||||
|
cmp bx, MAX_EPHEMERAL_PORT
|
||||||
|
jle .continue
|
||||||
|
|
||||||
|
; todo: WRAP!
|
||||||
|
; mov [last_UDP_port], MIN_EPHEMERAL_PORT
|
||||||
|
.exit:
|
||||||
|
xor ebx, ebx
|
||||||
|
|
||||||
|
.port_ok:
|
||||||
|
rol bx, 8
|
||||||
|
ret
|
||||||
|
|
||||||
|
;-----------------------------------------------
|
||||||
|
;
|
||||||
|
; SOCKET_check_port (local port)
|
||||||
|
;
|
||||||
|
; works with INET byte order
|
||||||
|
;
|
||||||
|
; IN: type in ecx (TCP/UDP)
|
||||||
|
; port to check in bx
|
||||||
|
; OUT: bx = 0 on error, unchanged otherwise
|
||||||
|
;
|
||||||
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
|
socket_check_port:
|
||||||
|
mov esi, net_sockets
|
||||||
|
|
||||||
|
.next_socket:
|
||||||
|
mov esi, [esi + SOCKET.NextPtr]
|
||||||
|
or esi, esi
|
||||||
|
jz .port_ok
|
||||||
|
|
||||||
|
cmp [esi + SOCKET.Type], ecx
|
||||||
|
jne .next_socket
|
||||||
|
|
||||||
|
cmp [esi + SOCKET.LocalPort], bx
|
||||||
|
jne .next_socket
|
||||||
|
|
||||||
|
xor ebx, ebx
|
||||||
|
|
||||||
|
.port_ok:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------
|
||||||
|
;
|
||||||
|
; SOCKET_internal_receiver
|
||||||
|
;
|
||||||
|
; Checks if any socket wants the received data
|
||||||
|
; If so, update the socket
|
||||||
|
;
|
||||||
|
; IN: eax = socket number
|
||||||
|
; ecx = number of bytes
|
||||||
|
; esi = pointer to beginning of data
|
||||||
|
; dx = Remote port (in INET byte order)
|
||||||
|
; edi = IP address of sender
|
||||||
|
;
|
||||||
|
; OUT: xxx
|
||||||
|
;
|
||||||
|
;-----------------------------------------------
|
||||||
|
align 4
|
||||||
|
socket_internal_receiver:
|
||||||
|
|
||||||
|
DEBUGF 1,"internal socket receiver\n"
|
||||||
|
|
||||||
|
lea ebx, [eax + SOCKET.lock]
|
||||||
|
call wait_mutex
|
||||||
|
|
||||||
|
mov [eax + SOCKET.RemotePort], dx ; update remote port number
|
||||||
|
mov [eax + SOCKET.RemoteIP], edi
|
||||||
|
|
||||||
|
mov edx, [eax + SOCKET.rxDataCount] ; get # of bytes already in buffer
|
||||||
|
DEBUGF 1,"bytes already in socket: %u ", edx
|
||||||
|
|
||||||
|
lea edi, [ecx + edx] ; check for buffer overflow
|
||||||
|
cmp edi, SOCKETBUFFSIZE - SOCKETHEADERSIZE ;
|
||||||
|
jg .dump ;
|
||||||
|
|
||||||
|
lea edi, [eax + SOCKET.rxData + edx]
|
||||||
|
add [eax + SOCKET.rxDataCount], ecx ; increment the count of bytes in buffer
|
||||||
|
DEBUGF 1,"adding %u bytes\n", ecx
|
||||||
|
|
||||||
|
; copy the data across
|
||||||
|
push cx
|
||||||
|
shr ecx, 2
|
||||||
|
rep movsd
|
||||||
|
pop cx
|
||||||
|
and cx, 3
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
DEBUGF 1,"socket updated\n"
|
||||||
|
|
||||||
|
mov [eax + SOCKET.lock], 0
|
||||||
|
|
||||||
|
; flag an event to the application
|
||||||
|
mov edx, [eax + SOCKET.PID] ; get socket owner PID
|
||||||
|
mov ecx, 1
|
||||||
|
mov esi, TASK_DATA + TASKDATA.pid
|
||||||
|
|
||||||
|
.next_pid:
|
||||||
|
cmp [esi], edx
|
||||||
|
je .found_pid
|
||||||
|
inc ecx
|
||||||
|
add esi, 0x20
|
||||||
|
cmp ecx, [TASK_COUNT]
|
||||||
|
jbe .next_pid
|
||||||
|
ret
|
||||||
|
|
||||||
|
.found_pid:
|
||||||
|
shl ecx, 8
|
||||||
|
or [ecx + SLOT_BASE + APPDATA.event_mask], EVENT_NETWORK ; stack event
|
||||||
|
mov [check_idle_semaphore], 200
|
||||||
|
ret
|
||||||
|
|
||||||
|
.dump:
|
||||||
|
mov [eax + SOCKET.lock], 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
last_1sTick db ?
|
last_1sTick db ?
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
$Revision: 1019 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; TCP TCB states
|
; TCP TCB states
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
struct UDP_Packet
|
struct UDP_Packet
|
||||||
@ -44,7 +44,6 @@ endg
|
|||||||
; OUT: /
|
; OUT: /
|
||||||
;
|
;
|
||||||
;-----------------------------------------------------------------
|
;-----------------------------------------------------------------
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
UDP_init:
|
UDP_init:
|
||||||
|
|
||||||
@ -72,117 +71,67 @@ UDP_init:
|
|||||||
; OUT: /
|
; OUT: /
|
||||||
;
|
;
|
||||||
;-----------------------------------------------------------------
|
;-----------------------------------------------------------------
|
||||||
|
align 4
|
||||||
UDP_handler:
|
UDP_handler:
|
||||||
|
|
||||||
DEBUGF 1,"UDP_Handler\n"
|
DEBUGF 1,"UDP_Handler\n"
|
||||||
; TODO: First validate the header & checksum. Discard buffer if error
|
; TODO: First validate the header & checksum!
|
||||||
|
|
||||||
; Look for a socket where
|
; Look for a socket where
|
||||||
; IP Packet UDP Destination Port = local Port
|
; IP Packet UDP Destination Port = local Port
|
||||||
; IP Packet SA = Remote IP
|
; IP Packet SA = Remote IP
|
||||||
|
|
||||||
mov esi, net_sockets
|
mov eax, net_sockets
|
||||||
.try_more:
|
.try_more:
|
||||||
mov ax , [edx + UDP_Packet.DestinationPort] ; get the local port from the IP Packet's UDP header
|
mov bx , [edx + UDP_Packet.DestinationPort] ; get the local port from the IP Packet's UDP header
|
||||||
rol ax , 8
|
|
||||||
.next_socket:
|
.next_socket:
|
||||||
mov esi, [esi + SOCKET.NextPtr]
|
mov eax, [eax + SOCKET.NextPtr]
|
||||||
or esi, esi
|
or eax, eax
|
||||||
jz .dump
|
jz .dump
|
||||||
cmp [esi + SOCKET.Type], IP_PROTO_UDP
|
cmp [eax + SOCKET.Domain], AF_INET4
|
||||||
jne .next_socket
|
jne .next_socket
|
||||||
cmp [esi + SOCKET.LocalPort], ax
|
cmp [eax + SOCKET.Type], IP_PROTO_UDP
|
||||||
|
jne .next_socket
|
||||||
|
cmp [eax + SOCKET.LocalPort], bx
|
||||||
jne .next_socket
|
jne .next_socket
|
||||||
|
|
||||||
; For dhcp, we must allow any remote server to respond.
|
; For dhcp, we must allow any remote server to respond.
|
||||||
; I will accept the first incoming response to be the one
|
; I will accept the first incoming response to be the one
|
||||||
; I bind to, if the socket is opened with a destination IP address of
|
; I bind to, if the socket is opened with a destination IP address of
|
||||||
; 255.255.255.255
|
; 255.255.255.255
|
||||||
cmp [esi + SOCKET.RemoteIP], 0xffffffff
|
cmp [eax + SOCKET.RemoteIP], 0xffffffff
|
||||||
je @f
|
je .ok1
|
||||||
|
|
||||||
mov eax, [esp]
|
mov ebx, [esp]
|
||||||
mov eax, [eax + ETH_FRAME.Data + IPv4_Packet.SourceAddress] ; get the Source address from the IP Packet
|
mov ebx, [ebx + ETH_FRAME.Data + IPv4_Packet.SourceAddress] ; get the Source address from the IP Packet
|
||||||
cmp [esi + SOCKET.RemoteIP], eax
|
cmp [eax + SOCKET.RemoteIP], eax
|
||||||
jne .try_more ; Quit if the source IP is not valid, check for more sockets with this IP/PORT combination
|
jne .try_more ; Quit if the source IP is not valid, check for more sockets with this IP/PORT combination
|
||||||
|
|
||||||
@@:
|
.ok1:
|
||||||
DEBUGF 1,"Found valid UDP packet for socket %x\n", esi
|
|
||||||
|
|
||||||
; sub ecx, UDP_Packet.Data ; get # of bytes in ecx
|
mov bx, [edx + UDP_Packet.SourcePort] ; Remote port must be 0, or equal to sourceport of packet
|
||||||
; mov eax, ecx
|
|
||||||
|
|
||||||
|
cmp [eax + SOCKET.RemotePort],0
|
||||||
|
je .ok2
|
||||||
|
|
||||||
|
cmp [eax + SOCKET.RemotePort], bx
|
||||||
|
jne .dump
|
||||||
|
|
||||||
|
.ok2:
|
||||||
|
|
||||||
|
DEBUGF 1,"Found valid UDP packet for socket %x\n", eax
|
||||||
|
lea esi, [edx + UDP_Packet.Data]
|
||||||
movzx ecx, [edx + UDP_Packet.Length]
|
movzx ecx, [edx + UDP_Packet.Length]
|
||||||
xchg cl , ch
|
rol cx , 8
|
||||||
|
sub cx , UDP_Packet.Data
|
||||||
|
mov dx , bx
|
||||||
|
|
||||||
; cmp ecx, eax ; If UDP packet size is bigger then IP packet told us,
|
call socket_internal_receiver
|
||||||
; jg .error ; Something must went wrong!
|
|
||||||
|
|
||||||
lea ebx, [esi + SOCKET.lock]
|
inc [UDP_PACKETS_RX]
|
||||||
call wait_mutex
|
|
||||||
|
|
||||||
; OK - we have a valid UDP Packet for this socket.
|
|
||||||
; First, update the sockets remote port number with the incoming msg
|
|
||||||
; - it will have changed
|
|
||||||
; from the original ( 69 normally ) to allow further connects
|
|
||||||
mov ax, [edx + UDP_Packet.SourcePort] ; get the UDP source port
|
|
||||||
xchg al, ah
|
|
||||||
mov [esi + SOCKET.RemotePort], ax
|
|
||||||
|
|
||||||
; Now, copy data to socket. We have socket address as [eax + sockets].
|
|
||||||
; We have IP Packet in edx
|
|
||||||
|
|
||||||
add edx, UDP_Packet.Data
|
|
||||||
mov eax, [esi + SOCKET.rxDataCount] ; get # of bytes already in buffer
|
|
||||||
DEBUGF 1,"bytes in socket: %u ", eax
|
|
||||||
lea edi, [ecx + eax] ; check for buffer overflow
|
|
||||||
cmp edi, SOCKETBUFFSIZE - SOCKETHEADERSIZE ;
|
|
||||||
jg .dump ;
|
|
||||||
add [esi + SOCKET.rxDataCount], ecx ; increment the count of bytes in buffer
|
|
||||||
DEBUGF 1,"adding %u bytes\n", ecx
|
|
||||||
|
|
||||||
; ecx has count, edx points to data
|
|
||||||
|
|
||||||
lea edi, [esi + eax + SOCKETHEADERSIZE]
|
|
||||||
push esi
|
|
||||||
push ecx
|
|
||||||
mov esi, edx
|
|
||||||
shr ecx, 2
|
|
||||||
rep movsd ; copy the data across
|
|
||||||
pop ecx
|
|
||||||
and ecx, 3
|
|
||||||
rep movsb
|
|
||||||
pop esi
|
|
||||||
|
|
||||||
DEBUGF 1,"UDP socket updated\n"
|
|
||||||
|
|
||||||
mov [esi + SOCKET.lock], 0
|
|
||||||
|
|
||||||
; flag an event to the application
|
|
||||||
mov eax, [esi + SOCKET.PID] ; get socket owner PID
|
|
||||||
mov ecx, 1
|
|
||||||
mov esi, TASK_DATA + TASKDATA.pid
|
|
||||||
|
|
||||||
.next_pid:
|
|
||||||
cmp [esi], eax
|
|
||||||
je .found_pid
|
|
||||||
inc ecx
|
|
||||||
add esi, 0x20
|
|
||||||
cmp ecx, [TASK_COUNT]
|
|
||||||
jbe .next_pid
|
|
||||||
|
|
||||||
jmp .dump
|
|
||||||
|
|
||||||
.found_pid:
|
|
||||||
shl ecx, 8
|
|
||||||
or [ecx + SLOT_BASE + APPDATA.event_mask], EVENT_NETWORK ; stack event
|
|
||||||
|
|
||||||
mov [check_idle_semaphore], 200
|
|
||||||
|
|
||||||
.dump:
|
|
||||||
DEBUGF 1,"UDP_handler - dumping\n"
|
|
||||||
|
|
||||||
|
.dump:
|
||||||
|
DEBUGF 1,"Dumping UDP packet\n"
|
||||||
call kernel_free
|
call kernel_free
|
||||||
add esp, 4 ; pop (balance stack)
|
add esp, 4 ; pop (balance stack)
|
||||||
|
|
||||||
@ -205,7 +154,7 @@ UDP_handler:
|
|||||||
|
|
||||||
UDP_create_packet:
|
UDP_create_packet:
|
||||||
|
|
||||||
DEBUGF 1,"Create UDP Packet\n"
|
DEBUGF 1,"Create UDP Packet (size=%u)\n",ecx
|
||||||
|
|
||||||
push edx esi
|
push edx esi
|
||||||
|
|
||||||
@ -216,7 +165,7 @@ UDP_create_packet:
|
|||||||
|
|
||||||
call IPv4_create_packet ; TODO: figure out a way to choose between IPv4 and IPv6
|
call IPv4_create_packet ; TODO: figure out a way to choose between IPv4 and IPv6
|
||||||
cmp edi, -1
|
cmp edi, -1
|
||||||
je .exit
|
je .fail
|
||||||
|
|
||||||
mov byte[edi + UDP_Packet.Length], ch
|
mov byte[edi + UDP_Packet.Length], ch
|
||||||
mov byte[edi + UDP_Packet.Length+1], cl
|
mov byte[edi + UDP_Packet.Length+1], cl
|
||||||
@ -234,23 +183,26 @@ UDP_create_packet:
|
|||||||
pop edi
|
pop edi
|
||||||
|
|
||||||
pop ecx
|
pop ecx
|
||||||
; bswap ecx ; convert little endian - big endian
|
|
||||||
; rol ecx, 16 ;
|
|
||||||
mov dword [edi + UDP_Packet.SourcePort], ecx ; notice: we write both port's at once
|
mov dword [edi + UDP_Packet.SourcePort], ecx ; notice: we write both port's at once
|
||||||
|
|
||||||
|
|
||||||
mov [edi + UDP_Packet.Checksum], 0
|
mov [edi + UDP_Packet.Checksum], 0
|
||||||
|
|
||||||
; TODO: calculate checksum using Pseudo-header (However, using a 0 as checksum shouldnt generate any errors :)
|
; TODO: calculate checksum using Pseudo-header (However, using a 0 as checksum shouldnt generate any errors :)
|
||||||
|
|
||||||
push ebx eax ; TODO: make this work on other protocols besides ethernet
|
inc [UDP_PACKETS_TX]
|
||||||
mov ebx,edx ;
|
|
||||||
|
push edx eax ; TODO: make this work on other protocols besides ethernet
|
||||||
DEBUGF 1,"Sending UDP Packet to device %x\n", ebx ;
|
DEBUGF 1,"Sending UDP Packet to device %x\n", ebx ;
|
||||||
jmp ETH_Sender ;
|
jmp ETH_Sender ;
|
||||||
|
|
||||||
.exit:
|
.exit:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
.fail:
|
||||||
|
; todo: queue the packet
|
||||||
|
add esp, 8
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------------
|
;---------------------------------------------------------------------------
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; Macroinstructions for defining and calling procedures
|
; Macroinstructions for defining and calling procedures
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
sound_interface:
|
sound_interface:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; void __stdcall unpack(void* packed_data, void* unpacked_data);
|
; void __stdcall unpack(void* packed_data, void* unpacked_data);
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
LOAD_FROM_FILE equ 0
|
LOAD_FROM_FILE equ 0
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
TRIDENT equ 0
|
TRIDENT equ 0
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 983 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
; If you're planning to write your own video driver I suggest
|
; If you're planning to write your own video driver I suggest
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 593 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
paletteVGA:
|
paletteVGA:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 753 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
$Revision: 750 $
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
Loading…
Reference in New Issue
Block a user