📄 rom_offsets.inc
字号:
; ---------------------------------------------------------------------------
; 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 + -