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

📄 rom_offsets.inc

📁 这是TCP/IP协议组播的实现代码
💻 INC
📖 第 1 页 / 共 2 页
字号:
; ---------------------------------------------------------------------------
;  Copyright (C) 2003 Dallas Semiconductor Corporation, All Rights Reserved.
; 
;  Permission is hereby granted, free of charge, to any person obtaining a
;  copy of this software and associated documentation files (the "Software"),
;  to deal in the Software without restriction, including without limitation
;  the rights to use, copy, modify, merge, publish, distribute, sublicense,
;  and/or sell copies of the Software, and to permit persons to whom the
;  Software is furnished to do so, subject to the following conditions:
; 
;  The above copyright notice and this permission notice shall be included
;  in all copies or substantial portions of the Software.
; 
;  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
;  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
;  MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
;  IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
;  OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
;  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
;  OTHER DEALINGS IN THE SOFTWARE.
; 
;  Except as contained in this notice, the name of Dallas Semiconductor
;  shall not be used except as stated in the Dallas Semiconductor
;  Branding Policy.
; ---------------------------------------------------------------------------
;
;  This file contains some equates for the 400 and some macros for calling
;  the built-in ROM functions.  There are also a couple utilities for 
;  putting characters out to the serial port.
;
;  Some of the ROM functions say they are "not defined for the C compiler".
;  This does not mean you can't call these functions, only that no wrapper
;  functions exist to call these from C.
;
;  In the Keil compiler, this file creates a 'warning A41: MISSING 'END' STATEMENT'
;  which can be ignored, as this file only contains macros and equates.
;
; ---------------------------------------------------------------------------
;

wos_crit_count_reg equ 68h
 
R0_B0     equ 0                         ; Register bank 0 equates.
R1_B0     equ 1
R2_B0     equ 2
R3_B0     equ 3
R4_B0     equ 4
R5_B0     equ 5
R6_B0     equ 6
R7_B0     equ 7
;
R0_B1     equ 8                         ; Register bank 1 equates.
R1_B1     equ 9
R2_B1     equ 0AH 
R3_B1     equ 0BH 
R4_B1     equ 0CH 
R5_B1     equ 0DH 
R6_B1     equ 0EH 
R7_B1     equ 0FH 
;
R0_B2     equ 10H                       ; Register bank 2 equates.
R1_B2     equ 11H 
R2_B2     equ 12H 
R3_B2     equ 13H
R4_B2     equ 14H
R5_B2     equ 15H
R6_B2     equ 16H
R7_B2     equ 17H
;
R0_B3     equ 18H                       ; Register bank 3 equates.
R1_B3     equ 19H
R2_B3     equ 1AH
R3_B3     equ 1BH
R4_B3     equ 1CH
R5_B3     equ 1DH
R6_B3     equ 1EH
R7_B3     equ 1FH

; assumed to never be 0 by rom400_lib_sock.a51
PARAM_BUFFER_SIZE     EQU  (255*3)
;
; Default save size that should be used for ROM processes.
; 104 Bytes of directs, sp, esp, stack.  Used for task creation functions.
;
ROM_SAVESIZE	      EQU 384 

;
; Overhead values for the TFTP code.  There are 4 bytes of TFTP config info, 
; and 3 bytes at the head of each array for Java native conventions.
;
ROM_TFTP_OVERHEAD     EQU 4
JAVA_ARRAY_HACK       EQU 3

;
; The size of a pointer
;
POINTER_SIZE          EQU 3

;
; The max number of sockets we will ever see.  Socket handles should
; be between 0 and this (number-1) inclusive.
;
MAX_SOCKETS           EQU 24

;
; The top of the redirect function table in RAM.
;
CALL_TABLE_TOP        EQU 256
;
; The bank the ROM is stored in.  Should be 0FFh for production
; 400's.  Change this value when running with a debug ROM.
;
ROM_BANK              EQU 0FFh
;
; The address of the ROM export table is stored 
; at (ROM_BANK << 16) | ROM_EXPORTTABLE_OFFS
;
ROM_EXPORTTABLE_OFFS  EQU 2

;
; Each entry in the ROM export table is 3 bytes.
;
ROMXT_ENTRYSIZE       EQU 3

;
; The number of functions in the ROM export table is stored
; first in the export table.
;
ROMXT_NUMFUNCTIONS             EQU   (0 * ROMXT_ENTRYSIZE)

;
; ROM EXPORT TABLE FUNCTIONS (denoted with ROMXT)
;

; UTILITY functions 
EXTERN ECODE(ROMXT_CRC16)
EXTERN ECODE(ROMXT_MEM_CLEAR_16)
EXTERN ECODE(ROMXT_MEM_COPY_16)
EXTERN ECODE(ROMXT_MEM_COMPARE)
EXTERN ECODE(ROMXT_ADD_DPTR1_16) ; not implemented for C compiler
EXTERN ECODE(ROMXT_ADD_DPTR2_16) ; not implemented for C compiler
EXTERN ECODE(ROMXT_SUB_DPTR1_16) ; not implemented for C compiler
EXTERN ECODE(ROMXT_SUB_DPTR2_16) ; not implemented for C compiler
EXTERN ECODE(ROMXT_GETPSEUDORANDOM)

; MEMORY MGR
EXTERN ECODE(ROMXT_KERNELMALLOC) ; not exposed
EXTERN ECODE(ROMXT_KERNELFREE) ; not exposed
EXTERN ECODE(ROMXT_MM_MALLOC) ; exposed as redirected function
EXTERN ECODE(ROMXT_MM_MALLOC_DIRTY) ; exposed as redirected function
EXTERN ECODE(ROMXT_MM_FREE) ; exposed as redirected function
EXTERN ECODE(ROMXT_MM_DEREF) ; exposed as redirected function
EXTERN ECODE(ROMXT_GETFREERAM) ; exposed as redirected function

; SOCKET functions
EXTERN ECODE(ROMXT_ROM_SOCKET)
EXTERN ECODE(ROMXT_ROM_CLOSESOCKET)
EXTERN ECODE(ROMXT_ROM_SENDTO)
EXTERN ECODE(ROMXT_ROM_RECVFROM)
EXTERN ECODE(ROMXT_ROM_CONNECT)
EXTERN ECODE(ROMXT_ROM_BIND)
EXTERN ECODE(ROMXT_ROM_LISTEN)
EXTERN ECODE(ROMXT_ROM_ACCEPT)
EXTERN ECODE(ROMXT_ROM_RECV)
EXTERN ECODE(ROMXT_ROM_SEND)
EXTERN ECODE(ROMXT_ROM_GETSOCKOPT)
EXTERN ECODE(ROMXT_ROM_SETSOCKOPT)
EXTERN ECODE(ROMXT_ROM_GETSOCKNAME)
EXTERN ECODE(ROMXT_ROM_GETPEERNAME)
EXTERN ECODE(ROMXT_ROM_CLEANUP)
EXTERN ECODE(ROMXT_ROM_AVAIL)
EXTERN ECODE(ROMXT_ROM_JOIN)
EXTERN ECODE(ROMXT_ROM_LEAVE)
EXTERN ECODE(ROMXT_ROM_PING)
EXTERN ECODE(ROMXT_ROM_GETNETWORKPARAMS)
EXTERN ECODE(ROMXT_ROM_SETNETWORKPARAMS)
EXTERN ECODE(ROMXT_ROM_GETIPV6PARAMS)
EXTERN ECODE(ROMXT_ROM_GETETHERNETSTATUS)
EXTERN ECODE(ROMXT_ROM_GETTFTPSERVER)
EXTERN ECODE(ROMXT_ROM_SETTFTPSERVER)
EXTERN ECODE(ROMXT_ETH_PROCESSINTERRUPT) ; not implemented for C compiler
EXTERN ECODE(ROMXT_ARP_GENERATER) ; not implemented for C compiler
EXTERN ECODE(ROMXT_NET_ETH0_MAC_ID)

; DHCP functions
EXTERN ECODE(ROMXT_DHCP_INIT)
EXTERN ECODE(ROMXT_DHCP_SETUP) ; not implemented for C compiler
EXTERN ECODE(ROMXT_DHCP_STARTUP) ; not implemented for C compiler
EXTERN ECODE(ROMXT_DHCP_RUN) ; not implemented for C compiler
EXTERN ECODE(ROMXT_DHCP_STATUS)
EXTERN ECODE(ROMXT_DHCP_STOP)
EXTERN ECODE(ROMXT_DHCPNOTIFY) ; empty redirect stub, not implemented

; TFTP functions
EXTERN ECODE(ROMXT_TFTP_INIT)
EXTERN ECODE(ROMXT_TFTP_FIRST)
EXTERN ECODE(ROMXT_TFTP_NEXT)
EXTERN ECODE(ROMXT_TFTP_MSG)

; SCHEDULER functions
EXTERN ECODE(ROMXT_TASK_GENESIS)
EXTERN ECODE(ROMXT_TASK_GETCURRENT)
EXTERN ECODE(ROMXT_TASK_GETPRIORITY)
EXTERN ECODE(ROMXT_TASK_SETPRIORITY)
EXTERN ECODE(ROMXT_TASK_FORK)
EXTERN ECODE(ROMXT_TASK_KILL)
EXTERN ECODE(ROMXT_TASK_SUSPEND)
EXTERN ECODE(ROMXT_TASK_SLEEP)
EXTERN ECODE(ROMXT_TASK_SIGNAL)
EXTERN ECODE(ROMXT_ROM_TASK_SWITCH_IN) ; empty redirect stub, not implemented
EXTERN ECODE(ROMXT_ROM_TASK_SWITCH_OUT) ; empty redirect stub, not implemented
EXTERN ECODE(ROMXT_ENTERCRITSECTION)
EXTERN ECODE(ROMXT_LEAVECRITSECTION)

; INIT functions
EXTERN ECODE(ROMXT_ROM_INIT)
EXTERN ECODE(ROMXT_ROM_COPYIVT)
EXTERN ECODE(ROMXT_ROM_REDIRECT_INIT)
EXTERN ECODE(ROMXT_MM_INIT)
EXTERN ECODE(ROMXT_KM_INIT)
EXTERN ECODE(ROMXT_OW_INIT)
EXTERN ECODE(ROMXT_NETWORK_INIT)
EXTERN ECODE(ROMXT_ETH_INIT)
EXTERN ECODE(ROMXT_INIT_SOCKETS)
EXTERN ECODE(ROMXT_TICK_INIT)

; Timer Interrupt vectors
EXTERN ECODE(ROMXT_WOS_TICK) ; not implemented for C compiler
EXTERN ECODE(ROMXT_BLOB) ; not implemented for C compiler

; Maintenance functions
EXTERN ECODE(ROMXT_WOS_IOPOLL) ; not implemented for C compiler
EXTERN ECODE(ROMXT_IP_PROCESSRECEIV) ; not implemented for C compiler
EXTERN ECODE(ROMXT_IP_PROCESSOUTPUT) ; not implemented for C compiler
EXTERN ECODE(ROMXT_TCP_RETRYTOP) ; not implemented for C compiler
EXTERN ECODE(ROMXT_ETH_PROCESSOUTPUT) ; not implemented for C compiler
EXTERN ECODE(ROMXT_IGMP_GROUPMAINTAINENCE) ; not implemented for C compiler
EXTERN ECODE(ROMXT_IP6_PROCESSRECEIV) ; not implemented for C compiler
EXTERN ECODE(ROMXT_IP6_PROCESSOUTPUT) ; not implemented for C compiler
EXTERN ECODE(ROMXT_PARAMBUFFER) ; not implemented for C compiler
EXTERN ECODE(ROMXT_RAM_TOP) ; not implemented for C compiler
EXTERN ECODE(ROMXT_BOOT_MEMBEGIN) ; not implemented for C compiler
EXTERN ECODE(ROMXT_BOOT_MEMEND) ; not implemented for C compiler

; 1-Wire
EXTERN ECODE(ROMXT_OWM_FIRST)
EXTERN ECODE(ROMXT_OWM_NEXT)
EXTERN ECODE(ROMXT_OWM_RESET)
EXTERN ECODE(ROMXT_OWM_BYTE)
EXTERN ECODE(ROMXT_OWM_SEARCH) ; not implemented for C compiler
EXTERN ECODE(ROMXT_OW_ROMID)

; Misc, extras, late additions
EXTERN ECODE(ROMXT_AUTOBAUD)
EXTERN ECODE(ROMXT_TFTP_CLOSE)

; 1.1 Additions
EXTERN ECODE(ROMXT_NETBOOT)
EXTERN ECODE(ROMXT_TASK_SWITCHER)
EXTERN ECODE(ROMXT_TICK_CALCULATERELOAD)
EXTERN ECODE(ROMXT_OWM_PROBECLOCK)
EXTERN ECODE(ROMXT_OWM_CALCULATEDIVISOR)
EXTERN ECODE(ROMXT_INFO_SENDSTRING)
EXTERN ECODE(ROMXT_INFO_SENDHEXBYTE)
EXTERN ECODE(ROMXT_INFO_CONVHEX)
EXTERN ECODE(ROMXT_INFO_SENDCRLF)
EXTERN ECODE(ROMXT_COPYRIGHT)
EXTERN ECODE(ROMXT_ALLRIGHTSRESERVED)
EXTERN ECODE(ROMXT_PSEUDORANDOMSEED)
EXTERN ECODE(ROMXT_FLASHSECTORERASE)
EXTERN ECODE(ROMXT_FLASHPROGRAMBYTE)
EXTERN ECODE(ROMXT_ARP_GENERATER_NOCHECK)
EXTERN ECODE(ROMXT_ARP_CHECKCACHE)
EXTERN ECODE(ROMXT_ROM_SUBNETTOPREFIX)
EXTERN ECODE(ROMXT_ROM_UNBIND)
EXTERN ECODE(ROMXT_MATH_MUL1024)
EXTERN ECODE(ROMXT_MATH_DIV2)
EXTERN ECODE(ROMXT_MATH_DIV1024)
EXTERN ECODE(ROMXT_MATH_LONGDIV1024)


;
; Each entry in the ROM Redirect table is 3 bytes.
;
ROMRT_ENTRYSIZE                      EQU  3

;
; ROM REDIRECT TABLE FUNCTIONS (denoted with ROMRT)
;
ROMRT_KERNELMALLOC                   EQU  1 * ROMRT_ENTRYSIZE
ROMRT_KERNELFREE                     EQU  2 * ROMRT_ENTRYSIZE
ROMRT_MALLOC                         EQU  3 * ROMRT_ENTRYSIZE
ROMRT_FREE                           EQU  4 * ROMRT_ENTRYSIZE
ROMRT_MALLOCDIRTY                    EQU  5 * ROMRT_ENTRYSIZE
ROMRT_DEREF                          EQU  6 * ROMRT_ENTRYSIZE
ROMRT_GETFREERAM                     EQU  7 * ROMRT_ENTRYSIZE
ROMRT_GETTIMEMILLIS                  EQU  8 * ROMRT_ENTRYSIZE
ROMRT_GETTHREADID                    EQU  9 * ROMRT_ENTRYSIZE
ROMRT_THREADRESUME                   EQU 10 * ROMRT_ENTRYSIZE
ROMRT_THREADIOSLEEP                  EQU 11 * ROMRT_ENTRYSIZE
ROMRT_THREADIOSLEEPNC                EQU 12 * ROMRT_ENTRYSIZE
ROMRT_THREADSAVE                     EQU 13 * ROMRT_ENTRYSIZE
ROMRT_THREADRESTORE                  EQU 14 * ROMRT_ENTRYSIZE
ROMRT_SLEEP                          EQU 15 * ROMRT_ENTRYSIZE
ROMRT_GETTASKID                      EQU 16 * ROMRT_ENTRYSIZE
ROMRT_INFOSENDCHAR                   EQU 17 * ROMRT_ENTRYSIZE
ROMRT_IP_COMPUTECHECKSUM_SOFTWARE    EQU 18 * ROMRT_ENTRYSIZE
ROMRT_0                              EQU 19 * ROMRT_ENTRYSIZE ; undefined
ROMRT_DHCPNOTIFY                     EQU 20 * ROMRT_ENTRYSIZE
ROMRT_ROM_TASK_CREATE                EQU 21 * ROMRT_ENTRYSIZE
ROMRT_ROM_TASK_DUPLICATE             EQU 22 * ROMRT_ENTRYSIZE
ROMRT_ROM_TASK_DESTROY               EQU 23 * ROMRT_ENTRYSIZE
ROMRT_ROM_TASK_SWITCH_IN             EQU 24 * ROMRT_ENTRYSIZE
ROMRT_ROM_TASK_SWITCH_OUT            EQU 25 * ROMRT_ENTRYSIZE
ROMRT_OWIP_READCONFIG                EQU 26 * ROMRT_ENTRYSIZE ; not implemented for C compiler, 'same' as SetMACID
ROMRT_SETMACID                       EQU 27 * ROMRT_ENTRYSIZE
ROMRT_UNDEREF                        EQU 28 * ROMRT_ENTRYSIZE
ROMRT_USERIOPOLL                     EQU 29 * ROMRT_ENTRYSIZE
ROMRT_ERRORNOTIFICATION              EQU 30 * ROMRT_ENTRYSIZE

;
; Puts the character to the serial port.  Do not use
; if the serial interrupt is enabled or this will 
; cause an interrupt.
;
; Usage: PUTCHAR 'H'
;        PUTCHAR 'e'
;        PUTCHAR 'l'
;        PUTCHAR 'l'
;        PUTCHAR 'o'
;
; Input: Param CHAR
;
; Output: to serial port
;
; Destroyed: ti bit, sbuf0
;
PUTCHAR MACRO CHAR
     LOCAL pt_lp_top

pt_lp_top:
     jnb  ti, pt_lp_top
     
     ; force it high !!!
     clr  ti
     mov  sbuf0, #CHAR
     ENDM

;
; Helper macro used by PUTHEX.  Takes the binary byte in A
; and returns it as two ASCII characters in b:a.
;
EXPAND MACRO
      LOCAL jmp1, jmp2
      ; turn a into b:a
      push acc
      swap a
      anl  a, #0Fh
      add  a, #030h
      cjne a, #03Ah, $+3
      jc   jmp1
      add  a, #7
jmp1: mov  b, a
      pop  acc
      anl  a, #00Fh
      add  a, #030h
      cjne a, #03Ah, $+3
      jc   jmp2
      add  a, #7
jmp2:
      ENDM


;
; Debug utility to print a byte in hex to the serial port.
;
; Input: Param DIRECT Name of the input byte to be put on 
;        the serial port (use R0_B0 instead of R0)
;
; Output: to serial port
;
; Destroyed: ti bit, sbuf0
;
PUTHEX MACRO DIRECT
         push DIRECT
         push b
         push acc
         mov  a, DIRECT
         EXPAND
         JNB  ti,$
         CLR  ti
         MOV  sbuf0, b
         JNB  ti,$
         CLR  ti
         MOV  sbuf0, a
         pop  acc
         pop  b
         pop  DIRECT
      ENDM



;
; Call the export table function 'FUNCTION' (Use the values ROMXT_*)
; 
; Input: Param FUNCTION The equate for the function to be called.
;
; Output: Any output defined by 'FUNCTION'
;
; Destroyed: Whatever is destroyed by 'FUNCTION'.

;
ROMCALL MACRO FUNCTION
	lcall FUNCTION
        ENDM

;
; Return what is stored in the export table as a pointer, rather than 
; calling it as a funtion.
;
; Input: Param FUNCTION The equate for the function to be called.
;
; Output: r3:r2:r1, the raw pointer stored in the export table
;
; Destroyed: DPTR, A
;
; NOTE: The pointer in r3:r2:r1 will still need to be 'corrected' for 
;       Keil code (if it is going to be used from C code).  This can be
;       done simple by...
; 
;           GETXT_POINTER ROMXT_RAM_TOP
;           inc   r3                             ; fixes the pointer to be used in C code
;
;       Do not use this 'fixed' pointer from assembler code!!!  Use 
;       the original value of r3.
;

⌨️ 快捷键说明

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