please dont rip this site
	NOLIST
;==============================================================================
;                                                                             :
;        This program is available from:                                      :
;                                                                             :
;               Rho Enterprises                                               :
;               4100 W. Colfax Ave.                                           :
;               Box 33                                                        :
;               Denver, CO    80204                                           :
;                                                                             :
;        Phone: 720-359-1467                   Email: info@rhoent.com         :
;                                                                             :
;                          http://www.rhoent.com/                             :
;                                                                             :
;==============================================================================


;
;SXDEFS.INC	by Loren Blaney and Richard Ottosen	14-FEB-2000
;


;
;Scenix SX Definitions for Microchip MPASM.
;
;REVISIONS:
;FEB-23-98, Released.
;MAR-21-98, Added ID label. Corrected XT & HS defs by swapping them.
; Removed ASCII defs. New STATUS defs.
;MAR-27-98, Added PAGEA, BANKA, FCALL, FGOTO, SKIP.
;APR-13-98, Added CSA, CSBE (etc.) macros. Enclose all arguments in parentheses.
;  Indent macros.
;APR-23-98, Changed some comments.
;OCT-4-98, Removed "RADIX DEC", added processor type based on SX FUSEX bits,
;  added Trim bits to FUSEX and other cleanup.   R.O.
;OCT-14-98 BOSC defaults to a "1".
;NOV-4-98, Revised Pins, Trim bits and BOSC in DEVICE equates, removed some
;   inversions.  R.O.
;SEP-11-99, Added warnings and messages to BANK and PAGE macros.  R.O.
;9-JAN-2000, Changed ID bytes to leave unused bits as ones.  R.O.
;12-JAN-2000, Made variables in macros local.  R.O.
;14-FEB-2000, Cleanup.  R.O.


;Define special function registers:
IND	EQU	00h		;used for indirects thru fsr
RTCC	EQU	01h		;real time clock/counter
PC	EQU	02h		;low 8 bits of PC
STATUS	EQU	03h		;status bits
FSR	EQU	04h		;file select register
RA	EQU	05h		;I/O ports
RB	EQU	06h		;supports multi-input wake-up (MIWU)
RC	EQU	07h


;Define STATUS register bits:
C	EQU	0		;carry
DC	EQU	1		;digit carry
Z	EQU	2		;zero
PD	EQU	3		;sleep power down (true low)
TO	EQU	4		;watchdog time out (true low)
PA0	EQU	5		;page select (LSB)
PA1	EQU	6		;page select
PA2	EQU	7		;page select (MSB)


;Define port control registers:
TRISX	EQU	0Fh		;tristate (1=input, 0=output)
PLP	EQU	0Eh		;pullup (1=none, 0=20k)
LVL	EQU	0Dh		;level (1=TTL, 0=CMOS)
ST	EQU	0Ch		;Schmitt trigger (1=disabled, 0=enabled)
WKEN	EQU	0Bh		;wake up (1=disabled, 0=enabled)
WKED	EQU	0Ah		;wake up edge (1=falling, 0=rising)
WKPND	EQU	09h		;wake up pending (1=pending, 0=none)
CMP	EQU	08h		;comparator bit: 0=result, 6=output, 7=enabled




;Define device symbols for configuration words (FUSE & FUSEX):


OSCRC	EQU	b'00'		;external RC network (default, inverted)
OSCHS	EQU	b'01'		;high speed external crystal/resonator
OSCXT	EQU	b'10'		;normal external crystal/resonator
OSCLP	EQU	b'11'		;low power external crystal/resonator




WATCHDOG EQU	1 << 2		;watchdog timer enabled
				; default to disabled
PROTECT	EQU	1 << 3		;code protect enabled (inverted)
				; default is to disable code protect


OSC4MHZ	EQU	b'1000' << 4	;internal 4MHz
OSC2MHZ	EQU	b'1001' << 4	;internal 2MHz
OSC1MHZ	EQU	b'1010' << 4	;internal 1MHz
OSC500KHZ EQU	b'1011' << 4	;internal 500KHz
OSC250KHZ EQU	b'1100' << 4	;internal 250KHz
OSC125KHZ EQU	b'1101' << 4	;internal 125KHz
OSC62KHZ EQU	b'1110' << 4	;internal 62.5KHz
OSC31KHZ EQU	b'1111' << 4	;internal 31.25KHz


STACKX	EQU	1 << d'8'	;stack is extended to 8 levels (inverted)
				; default to 2 levels
OPTIONX	EQU	1 << d'9'	;extend option register to 8 bits (inverted)
				; default to 6 bits
SYNC	EQU	1 << d'10'	;input syncing enabled (inverted)
				; default to disabled
TURBO	EQU	1 << d'11'	;turbo mode enabled (inverted)
				; default to disabled


PAGES1	EQU	b'00' << d'12'	;default
PAGES2	EQU	b'01' << d'12'
PAGES4	EQU	b'10' << d'12'
PAGES8	EQU	b'11' << d'12'


BANKS1	EQU	b'00' << d'14'	;default
BANKS2	EQU	b'01' << d'14'
BANKS4	EQU	b'10' << d'14'
BANKS8	EQU	b'11' << d'14'


BOR40	EQU	b'11' << d'16'	;4.0V brownout reset
BOR25	EQU	b'10' << d'16'	;2.5
BOR13	EQU	b'01' << d'16'	;1.3
;BOR00	EQU	b'00' << d'16'	;disabled (default, inverted)


CARRYX	EQU	1 << d'18'	;ADDWF & SUBWF use carry input (inverted)
				; default is to ignore carry in


PRE7	EQU	1 << d'19'	;for changing the preset FUSEX bit 7 (inverted)
				; default is no change


;for modifying factory IRC calibration
TRIM0	EQU	b'0000' << d'20'  ;highest frequency
TRIM3	EQU	b'0001' << d'20'  ;
TRIM6	EQU	b'0010' << d'20'  ;
TRIM9	EQU	b'0011' << d'20'  ; about 3% per step
TRIM12	EQU	b'1000' << d'20'  ;
TRIM15	EQU	b'1001' << d'20'  ;
TRIM18	EQU	b'1010' << d'20'  ;
TRIM21	EQU	b'1011' << d'20'  ;lowest frequency (default)


PINS18	EQU	b'0' << d'22'	;default to 18 pin
PINS28	EQU	b'1' << d'22'




_INVERT	EQU	0F0F8Bh		;the default looks like a PIC16C54


_DEVICE	SET	DEVICE ^ _INVERT
_FUSE	SET	_DEVICE & 0FFFh
_FUSEX	SET	_DEVICE >> d'12'


;Select a Microchip processor enough like the Scenix processor to satisfy the
; assembler


	PROCESSOR	16C57	;select a default Microchip processor
_PINS	SET	(_FUSEX & 0400h) >> d'10'
_ROM	SET	_FUSEX & 003h
	ERRORLEVEL	-223	;processor type change is OK
	IF	(_PINS == 00h) && (_ROM == 00h)	;18 pin, 512 words
	LIST
	PROCESSOR	16C54	; "SX18AA"
	NOLIST
	ENDIF
	IF	(_PINS == 01h) && (_ROM == 00h)	;28 pin, 512 words
	LIST
	PROCESSOR	16C55	; "SX28AA"
	NOLIST
	ENDIF
	IF	(_PINS == 00h) && (_ROM == 01h)	;18 pin, 1K words
	LIST
	PROCESSOR	16C56	; "SX18AB"
	NOLIST
	ENDIF
	IF	(_PINS == 01h) && (_ROM == 02h)	;28 pin, 2K words
	LIST
	PROCESSOR	16C57	; "SX28AC"
	NOLIST
	ENDIF
	IF	(_PINS == 00h) && (_ROM == 02h)	;18 pin, 2K words
	LIST
	PROCESSOR	16C58A	; "SX18AC"
	NOLIST
	ENDIF
	ERRORLEVEL	+223	;flag the processor type being changed


;Define macros for new Scenix instructions:


__NowBank SET	0		;Default to bank 0 for both past and present
__LastBank SET	0		; bank (like the H/W should but doesn't)
__NowPage SET	7		;Default to top page for both
__LastPage SET	7		; past and present page (like the H/W does)




IREAD	MACRO
	  DATA	41h	;IREAD	;move instruction at (MODE:W) to MODE:W
	ENDM


MOVMW	MACRO
	  DATA	42h	;MOVMW	;move MODE register to W register
	ENDM


MOVWM	MACRO
	  DATA	43h	;MOVWM	;move W register to MODE register
	ENDM


RET	MACRO
	  DATA	0Ch	;RET	;return without destroying W register
	ENDM


RETP	MACRO
__NowPage SET	__LastPage	;This does not work for routines called
				; from the same page and more than one page ???
	  DATA	0Dh	;RETP	;RET & write return addr bits 10:9 into PA1:PA0
	ENDM


RETI	MACRO
	  DATA	0Eh	;RETI	;return from interrupt (pull W, STATUS, FSR, PC)
	ENDM


RETIW	MACRO
	  DATA	0Fh	;RETIW	;return from interrupt and add W to RTCC
	ENDM


PAGEX	MACRO	X		;(MPASM already uses "PAGE")
	  NOLIST
	  LOCAL	_X
_X	SET	X
	  IF	(_X)&0FFFFFFF8h
	  ERROR	"page > 7"
	  ENDIF
;***	  IF	_X == __NowPage
;***	  MESSG	"Page was not changed"
;***	  ENDIF
;***	  IF	_X != __LastPage
;***	  MESSG	"Page was not restored"
;***	  ENDIF
__LastPage SET	__NowPage
__NowPage  SET	_X
	  LIST
	  DATA	10h | (_X)	;PAGE--write N into bits PA2:PA0 (N = 0-7)
	ENDM


PAGEA	MACRO	A		;(MPASM already uses "PAGE")
	NOLIST
	LOCAL	_A
_A	SET	A
;***	  IF	((_A)>>9) == __NowPage
;***	  MESSG	"Page was not changed"
;***	  ENDIF
;***	  IF	((_A)>>9) != __LastPage
;***	  MESSG	"Page was not restored"
;***	  ENDIF
__LastPage SET	__NowPage
__NowPage  SET	((_A)>>9)
	  LIST
	  DATA	10h|((_A)>>d'9')  ;PAGE--write bits A12:A10 into PA2:PA0
	ENDM


BANKX	MACRO	X		;(MPASM already uses "BANK")
	  NOLIST
	  LOCAL	_X
_X	SET	X
	  IF	(_X)&0FFFFFFF8h
	  ERROR	"bank > 7"
	  ENDIF
	  IF	_X == __NowBank
	  MESSG	"Bank was not changed"
	  ENDIF
	  IF	_X != __LastBank
	  MESSG	"Bank was not restored"
	  ENDIF
__LastBank SET	__NowBank
__NowBank  SET	_X
	  LIST
	  DATA	18h|(_X)  ;BANK	;write N into bits FSR7:FSR5 (N = 0-7)
	ENDM


BANKA	MACRO	A		;(MPASM already uses "BANK")
	  NOLIST
	  LOCAL	_A
_A	SET	A
	  IF	((_A)>>5) == __NowBank
	  MESSG	"Bank was not changed"
	  ENDIF
	  IF	((_A)>>5) != __LastBank
	  MESSG	"Bank was not restored"
	  ENDIF
__LastBank SET	__NowBank
__NowBank  SET	((_A)>>5)
	  LIST
	  DATA	18h|((_A)>>5)	;BANK--write bits A7:A5 into FSR7:FSR5
	ENDM


MODE	MACRO	N
	  NOLIST
	  LOCAL	_N
_N	SET	N
	  IF	(_N)&0FFFFFFF0h
	  ERROR	"mode > 0Fh"
	  ENDIF
	  LIST
	  DATA	50h|(_N)  ;MODE	;write N into MODE register (N = 0-F)
	ENDM




;Define macros for SxSim simulator instructions:


PRINTX	MACRO
	  DATA	01h	;PRINT	;simulator instruction: print byte in W
	ENDM


INPUTX	MACRO
	  DATA	0Ah	;INPUT	;simulator instruction: W gets ASCII keystroke
	ENDM


OUTPUTX	MACRO
	  DATA	0Bh	;OUTPUT	;simulator instruction: display ASCII char in W
	ENDM




;Define some basic macros:


FGOTO	MACRO	A		;(MPASM already uses "LGOTO")
	NOLIST
	LOCAL	_A
_A	SET	A
	  ERRORLEVEL	-306	;don't display "crossing page boundary" message
	LIST
	  DATA	10h|((_A)>>d'9')  ;PAGE--write bits A12:A10 into PA2:PA0
	  GOTO	(_A)&1FFh
	  ERRORLEVEL	+306	;restore "crossing page boundary" message
	ENDM


FCALL	MACRO	A		;(MPASM already uses "LCALL")
	NOLIST
	LOCAL	_A
_A	SET	A
	  ERRORLEVEL	-306	;don't display "crossing page boundary" message
	LIST
	  DATA	10h|((_A)>>d'9')  ;PAGE--write bits A12:A10 into PA2:PA0
	  CALL	(_A)&1FFh
	  ERRORLEVEL	+306	;restore "crossing page boundary" message
	ENDM			;(don't replace 1FFh with 0FFh)


SKIP	MACRO			;in turbo mode this saves one cycle over a GOTO
	  NOLIST
	  IF	$&1		;odd location
	  LIST
	  BTFSC	PC,0		;always skips
	  NOLIST
	  ELSE			;even location
	  LIST
	  BTFSS	PC,0		;always skips
	  NOLIST
	  ENDIF
	  LIST
	ENDM


CSA	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVF	_X,W		;compare arg1 to arg2 and skip if above
	  SUBWF	_Y,W
	  BTFSC	STATUS,C
	ENDM


CSA#	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVLW	(_Y)^0FFh	;compare arg1 to literal and skip if above
	  ADDWF	_X,W
	  BTFSS	STATUS,C
	ENDM


CSAE	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVF	_Y,W		;compare arg1 to arg2 and skip if above or equal
	  SUBWF	_X,W
	  BTFSS	STATUS,C
	ENDM


CSAE#	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVLW	_Y		;compare arg1 to lit. and skip if above or equal
	  SUBWF	_X,W
	  BTFSS	STATUS,C
	ENDM


CSB	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVF	_Y,W		;compare arg1 to arg2 and skip if below
	  SUBWF	_X,W
	  BTFSC	STATUS,C
	ENDM


CSB#	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVLW	_Y		;compare arg1 to literal and skip if below
	  SUBWF	_X,W
	  BTFSC	STATUS,C
	ENDM


CSBE	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVF	_X,W		;compare arg1 to arg2 and skip if below or equal
	  SUBWF	_Y,W
	  BTFSS	STATUS,C
	ENDM


CSBE#	MACRO	X,Y
	  NOLIST
	  LOCAL	_X,_Y
_X	SET	X
_Y	SET	Y
	  LIST
	  MOVLW	(_Y)^0FFh	;compare arg1 to lit. and skip if below or equal
	  ADDWF	_X,W
	  BTFSC	STATUS,C
	ENDM




;Define macro for ID label. Example:
;	ID	'S', 'X', '-', 'D', 'e', 'm', 'o', ' '


ID	MACRO	A,B,C,D,E,F,G,H		;set up ID label
	  NOLIST
	  LOCAL	_A,_B,_C,_D,_E,_F,_G,_H
_A	SET	A
_B	SET	B
_C	SET	C
_D	SET	D
_E	SET	E
_F	SET	F
_G	SET	G
_H	SET	H
	  ERRORLEVEL	-220	;don't display "address exceeds range" warning
	  ORG	1000h
;***	  DATA	(_A>>4)&0Fh, A&0Fh	;Unused bits are cleared
;	  DATA	(_B>>4)&0Fh, B&0Fh
;	  DATA	(_C>>4)&0Fh, C&0Fh
;	  DATA	(_D>>4)&0Fh, D&0Fh
;	  DATA	(_E>>4)&0Fh, E&0Fh
;	  DATA	(_F>>4)&0Fh, F&0Fh
;	  DATA	(_G>>4)&0Fh, G&0Fh
;***	  DATA	(_H>>4)&0Fh, H&0Fh
	  DATA	(_A>>4)|0FF0h, A|0FF0h	;Unused bits are set
	  DATA	(_B>>4)|0FF0h, B|0FF0h
	  DATA	(_C>>4)|0FF0h, C|0FF0h
	  DATA	(_D>>4)|0FF0h, D|0FF0h
	  DATA	(_E>>4)|0FF0h, E|0FF0h
	  DATA	(_F>>4)|0FF0h, F|0FF0h
	  DATA	(_G>>4)|0FF0h, G|0FF0h
	  DATA	(_H>>4)|0FF0h, H|0FF0h
	  ERRORLEVEL	+220	;restore warning message
	  ORG	0
	  LIST
	ENDM


	ERRORLEVEL	-220	;don't display "address exceeds range" warning
	ORG	1010h
	LIST
	DATA	_FUSE		;configuration bits (TURBO, SYNC, OPTIONX, etc.)
	DATA	_FUSEX		; (PINS, CARRYX, BOR40, BANKS, PAGES)
	NOLIST
	ERRORLEVEL	+220	;restore warning message
	ORG	0
	LIST


Comments:


file: /Techref/scenix/sxdefs_inc.htm, 13KB, , updated: 2003/11/14 08:37, local time: 2024/11/24 03:23,
TOP NEW HELP FIND: 
18.219.47.239:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://techref.massmind.org/techref/scenix/sxdefs_inc.htm"> Scenix SX Definitions for Microchip MPASM</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

 

Welcome to massmind.org!

 

Welcome to techref.massmind.org!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .