	CPU	"80251s.TBL"			;Processor
	HOF	"BIN8"				;Hex format
;	NOTE:	R16-R31 ARE USED AS PERMENANT POINTERS TO RAM,IO,FLASH,ROM
;		DONOT USE THEM AS GENERAL PURPOSE
;========================================================================
;			DR24				DR28
;		------------------	------------------
;	FLASH	|  WR24  |	WR26	|	|  WR28  |  WR30	| ROM
;		------------------	------------------
;			DR16				DR20
;		------------------	------------------
;	RAM	|  WR16  |	WR18	|	|  WR20  |  WR22	| IO
;		------------------	------------------
;
;========================================================================
YES:				EQU	1
NO:				EQU	0
ROM_SIZE_32:		EQU	NO		;32  K BIT
ROM_SIZE_64:		EQU	NO		;64  K BIT
ROM_SIZE_128:		EQU	NO		;128 K BIT
ROM_SIZE_256:		EQU	NO		;256 K BIT
ROM_SIZE_512:		EQU	YES		;512 K BIT
;------------------COMMUNICATION PROTOCOL DEFINITION---------------------
;H=HEADER=UNIT.COMMAND , CS=CHECKSUM 16BIT HIGH BYTE FIRST THEN LOW BYTE
;COMMAND:						DESCRIPTION:
; 1							X_ALL_READ
;IN FORMAT:		H.CS
;OUT FORMAT:	H.XG1.XG2.XG3.CS
; 2							Y_ALL_READ
;IN FORMAT:		H.CS
;OUT FORMAT:	H.YG1.YG2.CS
; 3							AI_ALL_READ
;IN FORMAT:		H.CS
;OUT FORMAT:	H.CH1H.CH1L.CH2H.CH2L.CH3H.CH3L.CH4H.CH4L.CH5H.CH5L.CH6H.CH6L.CH7H.CH7L.CH8H.CH8L.CS
; 4							AO_ALL_READ
;IN FORMAT:		H.CS
;OUT FORMAT:	H.CH1H.CH1L.CH2H.CH2L.CH3H.CH3L.CH4H.CH4L.CS
; 5							AI_CHX_READ
;IN FORMAT:		H.CHX.CS
;OUT FORMAT:	H.CHXH.CHXL.CS
; 6							AO_CHX_READ
;IN FORMAT:		H.CHX.CS
;OUT FORMAT:	H.CHXH.CHXL.CS
; 7							Y_ALL_WRITE
;IN FORMAT:		H.YG1.YG2.CS
;OUT FORMAT:	H.CS
; 8							AO_ALL_WRITE
;IN FORMAT:		H.CH1H.CH1L.CH2H.CH2L.CH3H.CH3L.CH4H.CH4L.CS
;OUT FORMAT:	H.CS
; 9							Y_CHX_WRITE
;IN FORMAT:		H.CHX.STATUS.CS 					'STATUS; 0=OFF 1=ON
;OUT FORMAT:	H.CS
; 10							AO_CHX_WRITE
;IN FORMAT:		H.CHX.A0XH.AOXL.CS
;OUT FORMAT:	H.CS
; 11							ALL_READ
;IN FORMAT:		H.CS
;OUT FORMAT:	H.XG1.XG2.XG3.YG1.YG2.AICH1H.AICH1L.AICH2H.AICH2L.AICH3H.AICH3L.AICH4H.AICH4L.AICH5H.AICH5L.AICH6H.AICH6L.AICH7H.AICH7L.AICH8H.AICH8L.AOCH1H.AOCH1L.AOCH2H.AOCH2L.AOCH3H.AOCH3L.AOCH4H.AOCH4L.CS
; 12							FLASH_SEC2SEC
;IN FORMAT:		H.FROM.TO.CS
;OUT FORMAT:	H.CS
; 13							CPU_LOOP
;IN FORMAT:		H.CS
;OUT FORMAT:	H.CS
; 14							FLASH_READ
;IN FORMAT:		H.ADDH.ADDL.CS
;OUT FORMAT:	H.CONT1.CONT2....CON64.CS
; 15							UNITADD_SET
;IN FORMAT:		H.UNITADD.CS
;OUT FORMAT:	H.CS
; 16							CPU_RESET
;IN FORMAT:		H.CS
;OUT FORMAT:
; 17							DEVICE_INFO
;IN FORMAT:		H.CS
;OUT FORMAT:	H.DEVICE_CODE(EX.2=>PLC251).DEVICE_SOFTWAREVERSION.SERIALNUM(MSB).SERIALNUM(MSB-1).SERIALNUM(LSB+1).SERIALNUM(LSB).CS
; 18							DATETIME_SET
;IN FORMAT:		H.CENTURY.YEAR.MONTH.DATE.HOURS(24 FORMAT).MINUTES.SECONDS.CS	BCD FORMAT	ie 10PM AS 24HOUR FORMAT IS 22 SO 22H
;OUT FORMAT:	H.CS
; 19							SERRIALNUM_SET
;IN FORMAT:		H.A.B.C.D.CS		A=MSB BYTE B=MSB-1 C=LSB+1 D=LSB
;OUT FORMAT:	H.CS
; 20							TIME12TIME24
;IN FORMAT:		H.A.CS			A=1 OR A=12 => 12, A=2 OR A=24 => 24 HOUR FORMAT SYSTEM
;OUT FORMAT:	H.CS
; 21							EE_WRITE
;IN FORMAT:		H.AH.AL.DATA.CS		AH(ADDRESS HIGH)=0~1(PAGE) , AL(ADDRESS LOW)=0~255
;OUT FORMAT:	H.CS
; 22							EE_READ
;IN FORMAT:		H.AH.AL.CS			AH(ADDRESS HIGH)=0~1(PAGE) , AL(ADDRESS LOW)=0~255
;OUT FORMAT:	H.DATA.CS
; 23							SCNT_READ
;IN FORMAT:		H.CS
;OUT FORMAT:	H.SCNT1(4BYTES MSB FIRST).SCNT2....SCNT10.CS
; 24							SCNT_CHX_READ
;IN FORMAT:		H.CHX.CS
;OUT FORMAT:	H.SCNTX(4BYTES MSB FIRST).CS
; 25							SCNT_CHX_WRITE
;IN FORMAT:		H.CHX.SCNTX(4BYTES MSB FIRST).CS
;OUT FORMAT:	H.CS
; 26							FLASH_SAVE
;IN FORMAT:		H.CS
;OUT FORMAT:	H.CS
; 27							FLASH_RESTORE
;IN FORMAT:		H.CS
;OUT FORMAT:	H.CS
; 28							FLASH_EXCHANGE
;IN FORMAT:		H.CS
;OUT FORMAT:	H.CS
; 29							FLASH_WRITE
;IN FORMAT:		H.AH.AL.DATA1. ... .DATA64.CS
;OUT FORMAT:	H.CS
; 30							FLASH_SECTORERASE
;IN FORMAT:		H.SEC(1/2/3/4).CS
;OUT FORMAT:	H.CS
; 31							PROGRAM_WHEREFROMISTART
;IN FORMAT:		H.FLASH/ROM.CS		FLASH/ROM	1=ROM 2=FLASH
;OUT FORMAT:	H.CS
LENOFCOMMAND1:		EQU	3		;X_ALL_READ			#BYTES-1   i.e. 4_BYTES 0~3 INCOMMING LENGTH IS 3
LENOFCOMMAND2:		EQU	3		;Y_ALL_READ
LENOFCOMMAND3:		EQU	3		;AI_ALL_READ
LENOFCOMMAND4:		EQU	3		;AO_ALL_READ
LENOFCOMMAND5:		EQU	4		;AI_CHX_READ
LENOFCOMMAND6:		EQU	4		;AO_CHX_READ
LENOFCOMMAND7:		EQU	5		;Y_ALL_WRITE
LENOFCOMMAND8:		EQU	11		;AO_ALL_WRITE
LENOFCOMMAND9:		EQU	5		;Y_CHX_WRITE
LENOFCOMMAND10:		EQU	6		;AO_CHX_WRITE
LENOFCOMMAND11:		EQU	3		;ALL_READ
LENOFCOMMAND12:		EQU	5		;FLASH_SEC2SEC
LENOFCOMMAND13:		EQU	3		;FLASH_DOWNLOAD
LENOFCOMMAND14:		EQU	5		;FLASH_CONTENTS_READ
LENOFCOMMAND15:		EQU	4		;UNITADD_SET
LENOFCOMMAND16:		EQU	3		;CPU_RESET
LENOFCOMMAND17:		EQU	3		;DEVICE_INFO
LENOFCOMMAND18:		EQU	10		;DATETIME_SET
LENOFCOMMAND19:		EQU	7		;SERRIALNUM_SET
LENOFCOMMAND20:		EQU	4		;TIME12TIME24
LENOFCOMMAND21:		EQU	6		;EE_WRITE
LENOFCOMMAND22:		EQU	5		;EE_READ
LENOFCOMMAND23:		EQU	3		;SCNT_READ
LENOFCOMMAND24:		EQU	4		;SCNT_CHX_READ
LENOFCOMMAND25:		EQU	8		;SCNT_CHX_WRITE
LENOFCOMMAND26:		EQU	3		;FLASH_SAVE
LENOFCOMMAND27:		EQU	3		;FLASH_RESTORE
LENOFCOMMAND28:		EQU	3		;FLASH_EXCHANGE
LENOFCOMMAND29:		EQU	69		;FLASH_WRITE
LENOFCOMMAND30:		EQU	4		;FLASH_SECTORERASE
LENOFCOMMAND31:		EQU	4		;PROGRAM_FROMWHEREISTART
;S*LIBRARY*
;-----------------------------CPU DEFINITION------------------------------
ACC:		EQU	0E0H		;ACCUMULATOR
B:		EQU	0F0H		;B REGISTER
CCAP0H: 	EQU	0FAH		;PCA Module 0 Compare/Capture Register High Byte
CCAP0L: 	EQU	0EAH		;PCA Module 0 Compare/Capture Register Low Byte
CCAP1H: 	EQU	0FBH		;PCA Module 1 Compare/Capture Register High Byte
CCAP1L: 	EQU	0EBH		;PCA Module 1 Compare/Capture Register Low Byte
CCAP2H: 	EQU	0FCH		;PCA Module 2 Compare/Capture Register High Byte
CCAP2L: 	EQU	0ECH		;PCA Module 2 Compare/Capture Register Low Byte
CCAP3H: 	EQU	0FDH		;PCA Module 3 Compare/Capture Register High Byte
CCAP3L: 	EQU	0EDH		;PCA Module 3 Compare/Capture Register Low Byte
CCAP4H: 	EQU	0FEH		;PCA Module 4 Compare/Capture Register High Byte
CCAP4L: 	EQU	0EEH		;PCA Module 4 Compare/Capture Register Low Byte
CCAPM0: 	EQU	0DAH		;PCA Compare/Capture Module 0 Mode Register
CCAPM1: 	EQU	0DBH		;PCA Compare/Capture Module 1 Mode Register
CCAPM2: 	EQU	0DCH		;PCA Compare/Capture Module 2 Mode Register
CCAPM3: 	EQU	0DDH		;PCA Compare/Capture Module 3 Mode Register
CCAPM4: 	EQU	0DEH		;PCA Compare/Capture Module 4 Mode Register
CCON:		EQU	0D8H		;PCA Timer/Counter Control Register
CH:		EQU	0F9H		;PCA Timer/Counter High Byte
CL:		EQU	0E9H		;PCA Timer/Counter Low Byte
CMOD:		EQU	0D9H		;PCA Timer/Counter Mode Register
DPH:		EQU	083H		;Data Pointer High
DPL:		EQU	082H		;Data Pointer Low
DPXL:		EQU	084H		;Data Pointer Extended Low
IER:		EQU	0A8H		;Interrupt Enable Control Register 0	;PREVIOUSLY IEC0
IPH0:		EQU	0B7H		;Interrupt Priority High Control Register 0
IPL0:		EQU	0B8H		;Interrupt Priority Low Control Register 0
P0:		EQU	080H		;Port 0
P1:		EQU	090H		;Port 1
P2:		EQU	0A0H		;Port 2
P3:		EQU	0B0H		;Port 3
PCON:		EQU	087H		;Power Control Register
PSW:		EQU	0D0H		;Program Status Word
PSW1:		EQU	0D1H		;Program Status Word 1
RCAP2H: 	EQU	0CBH		;Timer 2 Reload/Capture Register High Byte
RCAP2L: 	EQU	0CAH		;Timer 2 Reload/Capture Register Low Byte
SADDR:	EQU	0A9H		;Slave Individual Address Register
SADEN:	EQU	0B9H		;Mask Byte Register
SBUF:		EQU	099H		;Serial Data Buffer
SCON:		EQU	098H		;Serial Port Control Register
;------- SECOND SERIAL---
SADDR1:	EQU	0AAH		;Slave Individual Address Register
SADEN1:	EQU	0BAH		;Mask Byte Register
SCON1:	EQU	09AH		;Serial1 Port Control Register
SBUF1:	EQU	09BH		;Serial1 Data Buffer
BGCON:	EQU	08FH
IER1:		EQU	0B1H
IPL1:		EQU	0B2H
IPH1:		EQU	0B3H
;------------------------
SP:		EQU	081H		;Stack Pointer - LS byte of SPX
SPH:		EQU	0BEH		;Stack Pointer High - MSB of SPX
T2CON:	EQU	0C8H		;Timer 2 Control Register
T2MOD:	EQU	0C9H		;Timer 2 Mode Control Register
TCON:		EQU	088H		;Timer 0/1 Control Register
TMOD:		EQU	089H		;Timer 0/1 Mode Control Register
TH0:		EQU	08CH		;Timer 0 Register High Byte
TL0:		EQU	08AH		;Timer 0 Register Low Byte
TH1:		EQU	08DH		;Timer 1 Register High Byte
TL1:		EQU	08BH		;Timer 1 Register Low Byte
TH2:		EQU	0CDH		;Timer 2 Register High Byte
TL2:		EQU	0CCH		;Timer 2 Register Low Byte
WDTRST: 	EQU	0A6H		;Watchdog Timer Reset Register
;
;MCS-51 INTERNAL BIT ADDRESSES
;
; For CCON (0D8H)
CCF0:		EQU	CCON+0	;0D8H		;PCA Module Compare/Capture Flag 0
CCF1:		EQU	CCON+1	;0D9H		;PCA Module Compare/Capture Flag 1
CCF2:		EQU	CCON+2	;0DAH		;PCA Module Compare/Capture Flag 2
CCF3:		EQU	CCON+3	;0DBH		;PCA Module Compare/Capture Flag 3
CCF4:		EQU	CCON+4	;0DCH		;PCA Module Compare/Capture Flag 4
CR:		EQU	CCON+6	;0DEH		;PCA Timer/Counter Run Control Bit
CF:		EQU	CCON+7	;0DFH		;PCA Timer/Counter Overflow Flag
; For IER (0A8H)
EA:		EQU	IER+7		;0AFH		;Global Interrupt Enable
EC:		EQU	IER+6		;0AEH		;PCA Interrupt Enable
ET2:		EQU	IER+5		;0ADH		;Timer 2 Overflow Interrupt Enable
ES:		EQU	IER+4		;0ACH		;Serial I/O Interrupt Enable
ET1:		EQU	IER+3		;0ABH		;Timer 1 Overflow Interrupt Enable
EX1:		EQU	IER+2		;0AAH		;External Interrupt 1 Enable
ET0:		EQU	IER+1		;0A9H		;Timer 0 Overflow Interrupt Enable
EX0:		EQU	IER+0		;0A8H		;External Interrupt 0 Enable
; For PSW (0D0H)	
CY:		EQU	PSW+7		;0D7H		;Carry Flag
AC:		EQU	PSW+6		;0D6H		;Auxiliary Carry Flag
F0:		EQU	PSW+5		;0D5H		;User Flag 0
RS1:		EQU	PSW+4		;0D4H		;Register Select MS bit
RS0:		EQU	PSW+3		;0D3H		;Register Select LS bit
OV:		EQU	PSW+2		;0D2H		;Overflow Flag
UD:		EQU	PSW+1		;0D1H		;User-definable Flag
P:		EQU	PSW+0		;0D0H		;Parity bit
; For SCON (098H)
FESM0:	EQU	SCON+7	;09FH		;Serial Port MODE BIT/FRAMING ERROR BIT
SM1:		EQU	SCON+6	;09EH		;Serial Port Mode Bit 1
SM2:		EQU	SCON+5	;09DH		;Serial Port Mode Bit 2
REN:		EQU	SCON+4	;09CH		;Receiver Enable Bit
TB8:		EQU	SCON+3	;09BH		;Transmit Bit 8
RB8:		EQU	SCON+2	;09AH		;Receive Bit 8
TI:		EQU	SCON+1	;099H		;Transmit Interrupt Flag Bit
RI:		EQU	SCON+0	;098H		;Receive Interrupt Flag Bit
; For SCON1 (09AH)
S1_FESM0:	EQU	SCON1+7	;Serial Port MODE BIT/FRAMING ERROR BIT
S1_SM1:	EQU	SCON1+6	;Serial Port Mode Bit 1
S1_SM2:	EQU	SCON1+5	;Serial Port Mode Bit 2
S1_REN:	EQU	SCON1+4	;Receiver Enable Bit
S1_TB8:	EQU	SCON1+3	;Transmit Bit 8
S1_RB8:	EQU	SCON1+2	;Receive Bit 8
S1_TI:	EQU	SCON1+1	;Transmit Interrupt Flag Bit
S1_RI:	EQU	SCON1+0	;Receive Interrupt Flag Bit
; FOR BGCON (08FH)
S1_SMOD1:	EQU	BGCON+7
S1_SMOD0:	EQU	BGCON+6
S1_RCLK1:	EQU	BGCON+5
S1_TCLK1:	EQU	BGCON+4
; For IER1 (0B1H)
S1_ES:	EQU	IER1+0
; For TCON (088H)
TF1:		EQU	TCON+7	;08FH		;Timer 1 Overflow Flag
TR1:		EQU	TCON+6	;08EH		;Timer 1 Run Control Bit
TF0:		EQU	TCON+5	;08DH		;Timer 0 Overflow Flag
TR0:		EQU	TCON+4	;08CH		;Timer 0 Run Control Bit
IE1:		EQU	TCON+3	;08BH		;Interrupt 1 Flag
IT1:		EQU	TCON+2	;08AH		;Interrupt 1 Type Control Bit
IE0:		EQU	TCON+1	;089H		;Interrupt 0 Flag
IT0:		EQU	TCON+0	;088H		;Interrupt 0 Type Control Bit
; For T2CON (0C8H)
TF2:		EQU	T2CON+7	;0CFH		;Timer 2 Overflow Flag
EXF2:		EQU	T2CON+6	;0CEH		;Timer 2 External Flag
RCLK:		EQU	T2CON+5	;0CDH		;Receive Clock Bit
TCLK:		EQU	T2CON+4	;0CCH		;Transmit Clock Bit
EXEN2:	EQU	T2CON+3	;0CBH		;Timer 2 External Enable Bit
TR2:		EQU	T2CON+2	;0CAH		;Timer 2 Run Control Bit
CT2:		EQU	T2CON+1	;0C9H		;Timer 2 Counter/Timer Select
CPRL2:	EQU	T2CON+0	;0C8H		;Capture/Reload Bit
; For PCON (087H)
IDL:		EQU	PCON+0	;087H
PD:		EQU	PCON+1	;088H
GF0:		EQU	PCON+2	;089H
GF1:		EQU	PCON+3	;08AH
POF:		EQU	PCON+4	;08BH
SMOD0:	EQU	PCON+6	;08DH
SMOD1:	EQU	PCON+7	;08EH
; FOR TMOD (089H)
M00:		EQU	TMOD+0	;089H
M10:		EQU	TMOD+1	;08AH
CT0:		EQU	TMOD+2	;08BH
GATE0:	EQU	TMOD+3	;08CH
M01:		EQU	TMOD+4	;08DH
M11:		EQU	TMOD+5	;08EH
CT1:		EQU	TMOD+6	;08FH
GATE1:	EQU	TMOD+7	;090H
; FOR T2MOD (0C9H)
DCEN:		EQU	T2MOD+0	;0C9H
T2OE:		EQU	T2MOD+1	;0CAH
;------------------------- USER DEFINITIONS -----------------------------
PIT0_ADD:			EQU	0000H		;82C54 COUNTER
PIT1_ADD:			EQU	0001H		;82C54 COUNTER
PIT2_ADD:			EQU	0002H		;82C54 COUNTER
PITSC_ADD:			EQU	0003H		;82C54 COUNTER
LCDCONTROL_ADD:		EQU	0100H
LCDWRITE_ADD:		EQU	0101H
LCDBUSY_ADD:		EQU	0102H
LCDREAD_ADD:		EQU	0103H
ADC_LOW_ADD:		EQU	0200H
ADC_HIGH_ADD:		EQU	0201H
;COM2X_ADD:			EQU	0300H
;COM2X_ADD:			EQU	0301H
;COM2X_ADD:			EQU	0302H
;COM2X_ADD:			EQU	0303H
;COM2X_ADD:			EQU	0304H
;COM2X_ADD:			EQU	0305H
;COM2X_ADD:			EQU	0306H
;COM2X_ADD:			EQU	0307H
HCT574_ADD:			EQU	0400H
X_GRP1_ADD:			EQU	0500H
X_GRP2_ADD:			EQU	0501H
X_GRP3_ADD:			EQU	0502H
PP1SC_ADD:			EQU	0503H
Y_GRP1_ADD:			EQU	0600H
Y_GRP2_ADD:			EQU	0601H
KBSW_ADD:			EQU   0602H
PP2C_ADD:			EQU	0602H
PP2SC_ADD:			EQU	0603H
DIPSW_ADD:			EQU	0700H
PP3B_ADD:			EQU	0701H
PP3C_ADD:			EQU	0702H
PP3SC_ADD:			EQU	0703H
IO_ADD:			EQU   0001H
RAM_ADD:			EQU	0000H
FLASH_ADD:			EQU	00FEH
ROM_ADD:			EQU	00FFH
RTC_CSR_ADD:		EQU	0000H
RTC_HOFS_ADD:		EQU	0001H
RTC_SECONDS_ADD:		EQU	0002H
RTC_MINUTES_ADD:		EQU	0003H
RTC_HOURS_ADD:		EQU	0004H
RTC_YEARS_ADD:		EQU	0005H
RTC_DAYS_ADD:		EQU	0005H
RTC_MONTHS_ADD:		EQU	0006H
RTC_DOW_ADD:		EQU	0006H		;DOW=DAY OF WEEK 0~6
RTC_TIMER_ADD:		EQU	0007H
RTC_ACR_ADD:		EQU	0008H
RTC_AHOFS_ADD:		EQU	0009H
RTC_ASECONDS_ADD:		EQU	000AH
RTC_AMINUTES_ADD:		EQU	000BH
RTC_AHOURS_ADD:		EQU	000CH
RTC_ADATE_ADD:		EQU	000DH
RTC_AMONTHS_ADD:		EQU	000EH
RTC_ATIMER_ADD:		EQU	000FH
EEADD_CENTURIES:		EQU	00FFH		;00-99 BCD 
EEADD_YEARSOFFSET:	EQU	00FEH		;00-99 BCD 
EEADD_RTCYEARSEQU3:	EQU	00FDH		;IF RTC YEAR IS =3 THEN VALUE 1 IS STOED IN SERIAL EE OTHERWISE 0
EEADD_UNITADD:		EQU	00FCH		;00-FF BINARY
EEADD_NETWORKADD:		EQU	00FBH		;00-FF BINARY
EEADD_SERIAL_BAUD:	EQU	00FAH		;00-0A 00=150HZ 01=300 02=600 03=1200 04=2400 05=4800 06=9600 07=19200 08=38400 09=76800
EEADD_ADC_CONLOW:		EQU	00F9H		;ADC CH1~CH4 RANGE EACH 2 BITS
EEADD_ADC_CONHIGH:	EQU	00F8H		;ADC CH5~CH8 RANGE EACH 2 BITS
EEADD_DEVICESERIALNUM:	EQU	00F4H		;4 BYTES LONG. THIS IS THE MSB BYTE.
EEADD_GENERAL:		EQU	00F3H		;(GENERAL.0=TIME12TIME24 0=> TIME12,1=>TIME24. IF 1 THEN DISPLAY TIME12, IF 2 THEN DISPLAY TIME24). GENERAL.1=FLASH TRANSFER ACTIVE. GENERAL.2~7 ARE FREE
EEADD_WHEREFROM:		EQU	00F2H		;1=ROM 2=FLASH
;------HIGHEST INTERNAL RAM ADDRESS IS 417H FOR 1K INTERNAL RAM (SB OR TB) AND 217H FOR 512 BYTE RAM (SQ OR TQ)
RAMS:				EQU	0100H		;RAM START LOCATION WHERE TO START MY VARIABLES IN RAM
TOPOFFREERAM:		EQU	RAMS+529
SERIAL_TX_POINTER:	EQU	RAMS+528
SERIAL_TRANSMITADD:	EQU	RAMS+400	;128
SERIAL_RECEIVEADD:	EQU	RAMS+272	;128 BEGINEING OF RECEIVED INFO
SERIAL_BTRANSMIT:		EQU	RAMS+271	;BYTES TO TRANSMIT
SERIAL_BRECEIVED:		EQU	RAMS+270	;BYES RECEIVED
NETWORKADD:			EQU	RAMS+269
UNITADD:			EQU	RAMS+268
SERIAL_BAUD:		EQU	RAMS+267
LCD_COL:			EQU	RAMS+266
LCD_LINE:			EQU	RAMS+265
LCD_COL_SAVE:		EQU	RAMS+264
LCD_LINE_SAVE:		EQU	RAMS+263
DECIMALA:			EQU	RAMS+248	;15 BYTES DECIMAL REPRESENTATION MSD FIRST AND INCREASING EXAMPLE 123456789012. 12 SIGNIFICANT DIGITS, TWO POWER DIGITS, AND ONE SIGN THAT IS DECIMALA_SIGN. DECIMALA+11 IS LEAST SIGNIFICANT DIGIT
DECIMALA_SIGN:		EQU	RAMS+247	;IF MSB IS 0=> + , 1 => -
DECIMALB:			EQU	RAMS+232	;15 BYTES DECIMAL REPRESENTATION MSD FIRST AND INCREASING
DECIMALB_SIGN:		EQU	RAMS+231	;IF MSB IS 0=> + , 1 => -
ADC_CONLOW:			EQU	RAMS+230	;CONTAINS ADC RANGE FOR CHANNELS 1~4 EACH 2 BITS STARTS WITH CHANNEL 1
ADC_CONHIGH:		EQU	RAMS+229	;CONTAINS ADC RANGE FOR CHANNELS 5~8 EACH 2 BITS STARTS WITH CHANNEL 5
DAC4_LOW:			EQU	RAMS+228
DAC4_HIGH:			EQU	RAMS+227
DAC3_LOW:			EQU	RAMS+226
DAC3_HIGH:			EQU	RAMS+225
DAC2_LOW:			EQU	RAMS+224
DAC2_HIGH:			EQU	RAMS+223
DAC1_LOW:			EQU	RAMS+222
DAC1_HIGH:			EQU	RAMS+221
ADC8_LOW:			EQU	RAMS+220
ADC8_HIGH:			EQU	RAMS+219
ADC7_LOW:			EQU	RAMS+218
ADC7_HIGH:			EQU	RAMS+217
ADC6_LOW:			EQU	RAMS+216
ADC6_HIGH:			EQU	RAMS+215
ADC5_LOW:			EQU	RAMS+214
ADC5_HIGH:			EQU	RAMS+213
ADC4_LOW:			EQU	RAMS+212
ADC4_HIGH:			EQU	RAMS+211
ADC3_LOW:			EQU	RAMS+210
ADC3_HIGH:			EQU	RAMS+209
ADC2_LOW:			EQU	RAMS+208
ADC2_HIGH:			EQU	RAMS+207
ADC1_LOW:			EQU	RAMS+206
ADC1_HIGH:			EQU	RAMS+205
ADC_TEXT:			EQU	RAMS+198	;7 BYTES EXAMPLE -05.123
;				EQU	RAMS+197
PRINTF_MSG:			EQU	RAMS+195	;2 BYTES
PRINTF_TYPE:		EQU	RAMS+194	;NUMBER OF BYTES TO PRINT IF ZERO THEN PRINT UNTIL REACHING ZERO 
PRINTF_SOURCE:		EQU	RAMS+193
HEXHIGH:			EQU	RAMS+192
HEXLOW:			EQU	RAMS+191
CNT1_LOW:			EQU	RAMS+190
CNT1_HIGH:			EQU	RAMS+189
CNT2_LOW:			EQU	RAMS+188
CNT2_HIGH:			EQU	RAMS+187
I2C_SLAVE__ADD:		EQU	RAMS+186
EE_SLAVE__ADD:		EQU	RAMS+185
RTC_SLAVE__ADD:		EQU	RAMS+184
RTC_YEARSOFFSET:		EQU	RAMS+183	;YEARS OFFSET BCD 00~96 MULTIBLE OF 4
RTC_CENTURIES:		EQU	RAMS+182	;CENTURIES	  BCD 00~99
RTC_YEARS:			EQU	RAMS+181	;STORES 	00~03
RTC_MONTHS:			EQU	RAMS+180	;"	  BCD 01~12
RTC_DAYS:			EQU	RAMS+179	;"	   "	01~31
RTC_HOURS:			EQU	RAMS+178	;"	   "	00~23
RTC_MINUTES:		EQU	RAMS+177	;"	   "	00~59
RTC_SECONDS:		EQU	RAMS+176	;"	   "	00~59
RTC_HOFS:			EQU	RAMS+175	;"	   "	00~99
RTC_DOW:			EQU	RAMS+174	;"	   "	00~06
RTC_TIME1_HOFS:		EQU	RAMS+173
RTC_TIME1_SECONDS:	EQU	RAMS+172
RTC_TIME1_MINUTES:	EQU	RAMS+171
RTC_TIME1_HOURS:		EQU	RAMS+170
RTC_TIME1_DAYS:		EQU	RAMS+169
RTC_TIME1_MONTHS:		EQU	RAMS+168
RTC_TIME1_YEARS:		EQU	RAMS+167
RTC_TIME1_CENTURIES:	EQU	RAMS+166
RTC_TIME2_HOFS:		EQU	RAMS+165
RTC_TIME2_SECONDS:	EQU	RAMS+164
RTC_TIME2_MINUTES:	EQU	RAMS+163
RTC_TIME2_HOURS:		EQU	RAMS+162
RTC_TIME2_DAYS:		EQU	RAMS+161
RTC_TIME2_MONTHS:		EQU	RAMS+160
RTC_TIME2_YEARS:		EQU	RAMS+159
RTC_TIME2_CENTURIES:	EQU	RAMS+158
STX1:				EQU	RAMS+157
STX10:			EQU	RAMS+156
STX100:			EQU	RAMS+154	;2BYTES
STX1000:			EQU	RAMS+152	;2BYTES
ST1:				EQU	RAMS+150	;2BYTES 1mS SOFTWARE TIMER 1
ST2:				EQU	RAMS+148	;2BYTES 1mS
ST3:				EQU	RAMS+146	;2BYTES 1mS
ST4:				EQU	RAMS+144	;2BYTES 1mS
ST5:				EQU	RAMS+142	;2BYTES 10mS
ST6:				EQU	RAMS+140	;2BYTES 10mS
ST7:				EQU	RAMS+138	;2BYTES 10mS
ST8:				EQU	RAMS+136	;2BYTES 10mS
ST9:				EQU	RAMS+134	;2BYTES 10mS
ST10:				EQU	RAMS+132	;2BYTES 10mS
ST11:				EQU	RAMS+130	;2BYTES 10mS
ST12:				EQU	RAMS+128	;2BYTES 10mS
ST13:				EQU	RAMS+126	;2BYTES 10mS
ST14:				EQU	RAMS+124	;2BYTES 10mS
ST15:				EQU	RAMS+122	;2BYTES 10mS
ST16:				EQU	RAMS+120	;2BYTES 10mS
ST17:				EQU	RAMS+118	;2BYTES 10mS
ST18:				EQU	RAMS+116	;2BYTES 100mS
ST19:				EQU	RAMS+114	;2BYTES 100mS
ST20:				EQU	RAMS+112	;2BYTES 100mS
ST21:				EQU	RAMS+110	;2BYTES 100mS
ST22:				EQU	RAMS+108	;2BYTES 100mS
ST23:				EQU	RAMS+106	;2BYTES 100mS
ST24:				EQU	RAMS+104	;2BYTES 100mS
ST25:				EQU	RAMS+102	;2BYTES 100mS
ST26:				EQU	RAMS+100	;2BYTES 100mS
ST27:				EQU	RAMS+98	;2BYTES 100mS
ST28:				EQU	RAMS+96	;2BYTES 100mS
ST29:				EQU	RAMS+94	;2BYTES 100mS
ST30:				EQU	RAMS+92	;2BYTES 100mS
ST31:				EQU	RAMS+90	;2BYTES 100mS
ST32:				EQU	RAMS+88	;2BYTES 100mS
ST33:				EQU	RAMS+86	;2BYTES 1000mS
ST34:				EQU	RAMS+84	;2BYTES 1000mS
ST35:				EQU	RAMS+82	;2BYTES 1000mS
ST36:				EQU	RAMS+80	;2BYTES 1000mS
ST37:				EQU	RAMS+78	;2BYTES 1000mS
ST38:				EQU	RAMS+76	;2BYTES 1000mS
ST39:				EQU	RAMS+74	;2BYTES 1000mS
ST40:				EQU	RAMS+72	;2BYTES 1000mS
ST41:				EQU	RAMS+70	;2BYTES 1000mS
ST42:				EQU	RAMS+68	;2BYTES 1000mS
ST43:				EQU	RAMS+66	;2BYTES 1000mS
ST44:				EQU	RAMS+64	;2BYTES 1000mS
ST45:				EQU	RAMS+62	;2BYTES 1000mS
ST46:				EQU	RAMS+60	;2BYTES 1000mS
ST47:				EQU	RAMS+58	;2BYTES 1000mS
ST48:				EQU	RAMS+56	;2BYTES 1000mS
STA:				EQU	RAMS+54	;2BYTES 1mS    STOP WATCH, UP COUNTER. USE STA_RUN STA_STOP TO MEASURE EVENTS TIMES. INTERNAL USE SOFTWARE TIMERS STA~H STA IS AN UP COUNTER ALL OTHERS ARE DOWN COUNTERS.
STB:				EQU	RAMS+52	;2BYTES 1mS    SLEEP TIMER.
STC:				EQU	RAMS+50	;2BYTES 1mS
STD:				EQU	RAMS+48	;2BYTES 1mS
STE:				EQU	RAMS+46	;2BYTES 10mS
STF:				EQU	RAMS+44	;2BYTES 10mS
STG:				EQU	RAMS+42	;2BYTES 10mS   KBSW TIMER.
STH:				EQU	RAMS+40	;2BYTES 10mS   SPEAKER TIMER.
SCNT10:			EQU	RAMS+36	;4BYTES
SCNT9:			EQU	RAMS+32	;4BYTES
SCNT8:			EQU	RAMS+28	;4BYTES
SCNT7:			EQU	RAMS+24	;4BYTES
SCNT6:			EQU	RAMS+20	;4BYTES
SCNT5:			EQU	RAMS+16	;4BYTES
SCNT4:			EQU	RAMS+12	;4BYTES
SCNT3:			EQU	RAMS+8	;4BYTES
SCNT2:			EQU	RAMS+4	;4BYTES
SCNT1:			EQU	RAMS+0	;4BYTES
;BIT ADDRESSABLE STARTS AT 20H~7FH------------
STGALPHA:			EQU	0043H		;SOFTWARE TIMER GROUP ALPHA
STG6:				EQU	0042H		;SOFTWARE TIMER GROUP 6
STG5:				EQU	0041H
STG4:				EQU	0040H
STG3:				EQU	003FH
STG2:				EQU	003EH
STG1:				EQU	003DH
GENERAL1:			EQU	003CH		;IMAD BIT 3 & 4 ARE USED FOR ADC
RESULT:			EQU	003BH
RTC_ACR:			EQU	003AH
RTC_CSR:			EQU	0039H
REGISTER4:			EQU	0038H
REGISTER3:			EQU	0037H			
REGISTER2:			EQU	0036H			
REGISTER1:			EQU	0035H			
DIPSW_PRVS:			EQU	0034H
KBSW_PRVS:			EQU   0033H ;"
PP2C_PRVS:			EQU	0033H	;"
X_GRP3_PRVS:		EQU	0032H
X_GRP2_PRVS:		EQU	0031H
X_GRP1_PRVS:		EQU	0030H
DAC_LOW:			EQU	002FH
DAC_HIGH:			EQU	002EH
GENERAL			EQU	002DH	;MULTIBIT. (GENERAL.0=TIME12TIME24 0=TIME12 1=TIME24). GENERAL.1=FLASH TRANSFER ACTIVE. GENERAL.2~7=FREE ...
LCD_SHIFT:			EQU	002CH
LCD_DISPLAY:		EQU   002BH
LCD_MODE:			EQU	002AH
HCT574:			EQU   0029H
PP3C:				EQU	0028H
PP3B:				EQU	0027H
DIPSW:			EQU	0026H
KBSW:				EQU   0025H ;"
PP2C:				EQU	0025H	;"
Y_GRP2:			EQU	0024H
Y_GRP1:			EQU	0023H
X_GRP3:			EQU	0022H
X_GRP2:			EQU	0021H
X_GRP1:			EQU	0020H
WDT1:				EQU	P1+2
;E*LIBRARY*
;	FILL	0x00
 START:
	ORG	0x0000
	SJMP	LONGINI
;--------------------------- INTURRUPT ROUTINES ---------------------------
	ORG	0x0003
EX0_INTURRUPT:
	JMP	EX0I_HANDLER 
	ORG	0x000B
TIMER0_INTURRUPT:
	JMP	TIMER0I_HANDLER
	ORG	0x0013
EX1_INTURRUPT:
	JMP	EX1I_HANDLER
	ORG	0x001B
TIMER1_INTURRUPT:
	JMP	TIMER1I_HANDLER
	ORG	0x0023
SERIAL_INTURRUPT:
	JMP	SERIALI_HANDLER
	ORG	0x002B
TIMER2_INTURRUPT:
	JMP	TIMER2I_HANDLER
	ORG	0x0033
PCA_INTURRUPT:
	JMP	PCAI_HANDLER
	ORG	0x0043
SERIAL1_INTURRUPT:
	JMP	SERIAL1I_HANDLER
;----------------------------- INTERUPPT HANDLER --------------------------
LONGINI:
	JMP	INI
;---------------------------------- HANDLERS -----------------------------
EX0I_HANDLER:
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
	CLR	TCON.1
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
TIMER0I_HANDLER:
	;CLR	TCON.4	;STOPS TIMER 0
	MOV	TH0,#0xFB	;INITIALIZE TIMER0 FOR NEXT INTURUPPT 
	MOV	TL0,#0x46	;USE 0xFB33 FOR 1mS INTURRUPTS. IMAD PRACTICALLY FB46
	;MOV	TH0,#0xF6	;INITIALIZE TIMER0 FOR NEXT INTURUPPT 
	;MOV	TL0,#0x8D	;USE 0xFB33 FOR 2mS INTURRUPTS. IMAD PRACTICALLY FB46
	;MOV	TH0,#0xD0	;INITIALIZE TIMER0 FOR NEXT INTURUPPT
	;MOV	TL0,#0x00	;USE 0xD000 FOR 10mS INTURRUPTS
	;SETB	TCON.4	;STARTS TIMER 0
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
	PUSH	WR0
	;CALL	D3_ON
	MOV	WR0,STX1000
	INC	WR0,#1
	MOV	STX1000,WR0
	MOV	WR0,STX100
	INC	WR0,#1
	MOV	STX100,WR0
	MOV	R0,STX10
	INC	R0,#1
	MOV	STX10,R0
	MOV	R0,STX1
	INC	R0,#1
	MOV	STX1,R0
	CMP	R0,#10D
	JE	TIMER0HANDLERTEMP1
	JMP	TIMER0HANDLERNOCHANGE2STX1
	TIMER0HANDLERTEMP1:
	MOV	R0,#00
	MOV	STX1,R0
	MOV	R0,STX10
	CMP	R0,#100D
	JE	TIMER0HANDLERTEMP2
	JMP	TIMER0HANDLERNOCHANGE2STX10
	TIMER0HANDLERTEMP2:
	MOV	R0,#00
	MOV	STX10,R0
	MOV	WR0,STX100
	CMP	WR0,#1000D
	JE	TIMER0HANDLERTEMP3
	JMP	TIMER0HANDLERNOCHANGE2STX100
	TIMER0HANDLERTEMP3:
	MOV	WR0,#00
	MOV	STX100,WR0
	MOV	WR0,STX1000
	CMP	WR0,#10000D
	JE	TIMER0HANDLERTEMP4
	JMP	TIMER0HANDLERNOCHANGE2STX1000
	TIMER0HANDLERTEMP4:
	MOV	WR0,#00
	MOV	STX1000,WR0
	TIMER0HANDLERNOCHANGE2STX1000:
	JNB	STG5.0,TIMER0HANDLERBYPASSST33
	MOV	WR0,ST33
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST33
	DEC	WR0,#1
	MOV	ST33,WR0
	JMP	TIMER0HANDLERBYPASSST33
	TIMER0HANDLERCLRRUNBITST33:
	CLR	STG5.0
	TIMER0HANDLERBYPASSST33:
	JNB	STG5.1,TIMER0HANDLERBYPASSST34
	MOV	WR0,ST34
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST34
	DEC	WR0,#1
	MOV	ST34,WR0
	JMP	TIMER0HANDLERBYPASSST34
	TIMER0HANDLERCLRRUNBITST34:
	CLR	STG5.1
	TIMER0HANDLERBYPASSST34:
	JNB	STG5.2,TIMER0HANDLERBYPASSST35
	MOV	WR0,ST35
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST35
	DEC	WR0,#1
	MOV	ST35,WR0
	JMP	TIMER0HANDLERBYPASSST35
	TIMER0HANDLERCLRRUNBITST35:
	CLR	STG5.2
	TIMER0HANDLERBYPASSST35:
	JNB	STG5.3,TIMER0HANDLERBYPASSST36
	MOV	WR0,ST36
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST36
	DEC	WR0,#1
	MOV	ST36,WR0
	JMP	TIMER0HANDLERBYPASSST36
	TIMER0HANDLERCLRRUNBITST36:
	CLR	STG5.3
	TIMER0HANDLERBYPASSST36:
	JNB	STG5.4,TIMER0HANDLERBYPASSST37
	MOV	WR0,ST37
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST37
	DEC	WR0,#1
	MOV	ST37,WR0
	JMP	TIMER0HANDLERBYPASSST37
	TIMER0HANDLERCLRRUNBITST37:
	CLR	STG5.4
	TIMER0HANDLERBYPASSST37:
	JNB	STG5.5,TIMER0HANDLERBYPASSST38
	MOV	WR0,ST38
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST38
	DEC	WR0,#1
	MOV	ST38,WR0
	JMP	TIMER0HANDLERBYPASSST38
	TIMER0HANDLERCLRRUNBITST38:
	CLR	STG5.5
	TIMER0HANDLERBYPASSST38:
	JNB	STG5.6,TIMER0HANDLERBYPASSST39
	MOV	WR0,ST39
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST39
	DEC	WR0,#1
	MOV	ST39,WR0
	JMP	TIMER0HANDLERBYPASSST39
	TIMER0HANDLERCLRRUNBITST39:
	CLR	STG5.6
	TIMER0HANDLERBYPASSST39:
	JNB	STG5.7,TIMER0HANDLERBYPASSST40
	MOV	WR0,ST40
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST40
	DEC	WR0,#1
	MOV	ST40,WR0
	JMP	TIMER0HANDLERBYPASSST40
	TIMER0HANDLERCLRRUNBITST40:
	CLR	STG5.7
	TIMER0HANDLERBYPASSST40:
	JNB	STG6.0,TIMER0HANDLERBYPASSST41
	MOV	WR0,ST41
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST41
	DEC	WR0,#1
	MOV	ST41,WR0
	JMP	TIMER0HANDLERBYPASSST41
	TIMER0HANDLERCLRRUNBITST41:
	CLR	STG6.0
	TIMER0HANDLERBYPASSST41:
	JNB	STG6.1,TIMER0HANDLERBYPASSST42
	MOV	WR0,ST42
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST42
	DEC	WR0,#1
	MOV	ST42,WR0
	JMP	TIMER0HANDLERBYPASSST42
	TIMER0HANDLERCLRRUNBITST42:
	CLR	STG6.1
	TIMER0HANDLERBYPASSST42:
	JNB	STG6.2,TIMER0HANDLERBYPASSST43
	MOV	WR0,ST43
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST43
	DEC	WR0,#1
	MOV	ST43,WR0
	JMP	TIMER0HANDLERBYPASSST43
	TIMER0HANDLERCLRRUNBITST43:
	CLR	STG6.2
	TIMER0HANDLERBYPASSST43:
	JNB	STG6.3,TIMER0HANDLERBYPASSST44
	MOV	WR0,ST44
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST44
	DEC	WR0,#1
	MOV	ST44,WR0
	JMP	TIMER0HANDLERBYPASSST44
	TIMER0HANDLERCLRRUNBITST44:
	CLR	STG6.3
	TIMER0HANDLERBYPASSST44:
	JNB	STG6.4,TIMER0HANDLERBYPASSST45
	MOV	WR0,ST45
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST45
	DEC	WR0,#1
	MOV	ST45,WR0
	JMP	TIMER0HANDLERBYPASSST45
	TIMER0HANDLERCLRRUNBITST45:
	CLR	STG6.4
	TIMER0HANDLERBYPASSST45:
	JNB	STG6.5,TIMER0HANDLERBYPASSST46
	MOV	WR0,ST46
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST46
	DEC	WR0,#1
	MOV	ST46,WR0
	JMP	TIMER0HANDLERBYPASSST46
	TIMER0HANDLERCLRRUNBITST46:
	CLR	STG6.5
	TIMER0HANDLERBYPASSST46:
	JNB	STG6.6,TIMER0HANDLERBYPASSST47
	MOV	WR0,ST47
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST47
	DEC	WR0,#1
	MOV	ST47,WR0
	JMP	TIMER0HANDLERBYPASSST47
	TIMER0HANDLERCLRRUNBITST47:
	CLR	STG6.6
	TIMER0HANDLERBYPASSST47:
	JNB	STG6.7,TIMER0HANDLERBYPASSST48
	MOV	WR0,ST48
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST48
	DEC	WR0,#1
	MOV	ST48,WR0
	JMP	TIMER0HANDLERBYPASSST48
	TIMER0HANDLERCLRRUNBITST48:
	CLR	STG6.7
	TIMER0HANDLERBYPASSST48:
	TIMER0HANDLERNOCHANGE2STX100:
	JNB	STG3.0,TIMER0HANDLERBYPASSST17
	MOV	WR0,ST17
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST17
	DEC	WR0,#1
	MOV	ST17,WR0
	JMP	TIMER0HANDLERBYPASSST17
	TIMER0HANDLERCLRRUNBITST17:
	CLR	STG3.0
	TIMER0HANDLERBYPASSST17:
	JNB	STG3.1,TIMER0HANDLERBYPASSST18
	MOV	WR0,ST18
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST18
	DEC	WR0,#1
	MOV	ST18,WR0
	JMP	TIMER0HANDLERBYPASSST18
	TIMER0HANDLERCLRRUNBITST18:
	CLR	STG3.1
	TIMER0HANDLERBYPASSST18:
	JNB	STG3.2,TIMER0HANDLERBYPASSST19
	MOV	WR0,ST19
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST19
	DEC	WR0,#1
	MOV	ST19,WR0
	JMP	TIMER0HANDLERBYPASSST19
	TIMER0HANDLERCLRRUNBITST19:
	CLR	STG3.2
	TIMER0HANDLERBYPASSST19:
	JNB	STG3.3,TIMER0HANDLERBYPASSST20
	MOV	WR0,ST20
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST20
	DEC	WR0,#1
	MOV	ST20,WR0
	JMP	TIMER0HANDLERBYPASSST20
	TIMER0HANDLERCLRRUNBITST20:
	CLR	STG3.3
	TIMER0HANDLERBYPASSST20:
	JNB	STG3.4,TIMER0HANDLERBYPASSST21
	MOV	WR0,ST21
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST21
	DEC	WR0,#1
	MOV	ST21,WR0
	JMP	TIMER0HANDLERBYPASSST21
	TIMER0HANDLERCLRRUNBITST21:
	CLR	STG3.4
	TIMER0HANDLERBYPASSST21:
	JNB	STG3.5,TIMER0HANDLERBYPASSST22
	MOV	WR0,ST22
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST22
	DEC	WR0,#1
	MOV	ST22,WR0
	JMP	TIMER0HANDLERBYPASSST22
	TIMER0HANDLERCLRRUNBITST22:
	CLR	STG3.5
	TIMER0HANDLERBYPASSST22:
	JNB	STG3.6,TIMER0HANDLERBYPASSST23
	MOV	WR0,ST23
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST23
	DEC	WR0,#1
	MOV	ST23,WR0
	JMP	TIMER0HANDLERBYPASSST23
	TIMER0HANDLERCLRRUNBITST23:
	CLR	STG3.6
	TIMER0HANDLERBYPASSST23:
	JNB	STG3.7,TIMER0HANDLERBYPASSST24
	MOV	WR0,ST24
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST24
	DEC	WR0,#1
	MOV	ST24,WR0
	JMP	TIMER0HANDLERBYPASSST24
	TIMER0HANDLERCLRRUNBITST24:
	CLR	STG3.7
	TIMER0HANDLERBYPASSST24:
	JNB	STG4.0,TIMER0HANDLERBYPASSST25
	MOV	WR0,ST25
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST25
	DEC	WR0,#1
	MOV	ST25,WR0
	JMP	TIMER0HANDLERBYPASSST25
	TIMER0HANDLERCLRRUNBITST25:
	CLR	STG4.0
	TIMER0HANDLERBYPASSST25:
	JNB	STG4.1,TIMER0HANDLERBYPASSST26
	MOV	WR0,ST26
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST26
	DEC	WR0,#1
	MOV	ST26,WR0
	JMP	TIMER0HANDLERBYPASSST26
	TIMER0HANDLERCLRRUNBITST26:
	CLR	STG4.1
	TIMER0HANDLERBYPASSST26:
	JNB	STG4.2,TIMER0HANDLERBYPASSST27
	MOV	WR0,ST27
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST27
	DEC	WR0,#1
	MOV	ST27,WR0
	JMP	TIMER0HANDLERBYPASSST27
	TIMER0HANDLERCLRRUNBITST27:
	CLR	STG4.2
	TIMER0HANDLERBYPASSST27:
	JNB	STG4.3,TIMER0HANDLERBYPASSST28
	MOV	WR0,ST28
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST28
	DEC	WR0,#1
	MOV	ST28,WR0
	JMP	TIMER0HANDLERBYPASSST28
	TIMER0HANDLERCLRRUNBITST28:
	CLR	STG4.3
	TIMER0HANDLERBYPASSST28:
	JNB	STG4.4,TIMER0HANDLERBYPASSST29
	MOV	WR0,ST29
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST29
	DEC	WR0,#1
	MOV	ST29,WR0
	JMP	TIMER0HANDLERBYPASSST29
	TIMER0HANDLERCLRRUNBITST29:
	CLR	STG4.4
	TIMER0HANDLERBYPASSST29:
	JNB	STG4.5,TIMER0HANDLERBYPASSST30
	MOV	WR0,ST30
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST30
	DEC	WR0,#1
	MOV	ST30,WR0
	JMP	TIMER0HANDLERBYPASSST30
	TIMER0HANDLERCLRRUNBITST30:
	CLR	STG4.5
	TIMER0HANDLERBYPASSST30:
	JNB	STG4.6,TIMER0HANDLERBYPASSST31
	MOV	WR0,ST31
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST31
	DEC	WR0,#1
	MOV	ST31,WR0
	JMP	TIMER0HANDLERBYPASSST31
	TIMER0HANDLERCLRRUNBITST31:
	CLR	STG4.6
	TIMER0HANDLERBYPASSST31:
	JNB	STG4.7,TIMER0HANDLERBYPASSST32
	MOV	WR0,ST32
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST32
	DEC	WR0,#1
	MOV	ST32,WR0
	JMP	TIMER0HANDLERBYPASSST32
	TIMER0HANDLERCLRRUNBITST32:
	CLR	STG4.7
	TIMER0HANDLERBYPASSST32:
	TIMER0HANDLERNOCHANGE2STX10:
	JNB	STG1.4,TIMER0HANDLERBYPASSST5
	MOV	WR0,ST5
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST5
	DEC	WR0,#1
	MOV	ST5,WR0
	JMP	TIMER0HANDLERBYPASSST5
	TIMER0HANDLERCLRRUNBITST5:
	CLR	STG1.4
	TIMER0HANDLERBYPASSST5:
	JNB	STG1.5,TIMER0HANDLERBYPASSST6
	MOV	WR0,ST6
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST6
	DEC	WR0,#1
	MOV	ST6,WR0
	JMP	TIMER0HANDLERBYPASSST6
	TIMER0HANDLERCLRRUNBITST6:
	CLR	STG1.5
	TIMER0HANDLERBYPASSST6:
	JNB	STG1.6,TIMER0HANDLERBYPASSST7
	MOV	WR0,ST7
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST7
	DEC	WR0,#1
	MOV	ST7,WR0
	JMP	TIMER0HANDLERBYPASSST7
	TIMER0HANDLERCLRRUNBITST7:
	CLR	STG1.6
	TIMER0HANDLERBYPASSST7:
	JNB	STG1.7,TIMER0HANDLERBYPASSST8
	MOV	WR0,ST8
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST8
	DEC	WR0,#1
	MOV	ST8,WR0
	JMP	TIMER0HANDLERBYPASSST8
	TIMER0HANDLERCLRRUNBITST8:
	CLR	STG1.7
	TIMER0HANDLERBYPASSST8:
	JNB	STG2.0,TIMER0HANDLERBYPASSST9
	MOV	WR0,ST9
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST9
	DEC	WR0,#1
	MOV	ST9,WR0
	JMP	TIMER0HANDLERBYPASSST9
	TIMER0HANDLERCLRRUNBITST9:
	CLR	STG2.0
	TIMER0HANDLERBYPASSST9:
	JNB	STG2.1,TIMER0HANDLERBYPASSST10
	MOV	WR0,ST10
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST10
	DEC	WR0,#1
	MOV	ST10,WR0
	JMP	TIMER0HANDLERBYPASSST10
	TIMER0HANDLERCLRRUNBITST10:
	CLR	STG2.1
	TIMER0HANDLERBYPASSST10:
	JNB	STG2.2,TIMER0HANDLERBYPASSST11
	MOV	WR0,ST11
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST11
	DEC	WR0,#1
	MOV	ST11,WR0
	JMP	TIMER0HANDLERBYPASSST11
	TIMER0HANDLERCLRRUNBITST11:
	CLR	STG2.2
	TIMER0HANDLERBYPASSST11:
	JNB	STG2.3,TIMER0HANDLERBYPASSST12
	MOV	WR0,ST12
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST12
	DEC	WR0,#1
	MOV	ST12,WR0
	JMP	TIMER0HANDLERBYPASSST12
	TIMER0HANDLERCLRRUNBITST12:
	CLR	STG2.3
	TIMER0HANDLERBYPASSST12:
	JNB	STG2.4,TIMER0HANDLERBYPASSST13
	MOV	WR0,ST13
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST13
	DEC	WR0,#1
	MOV	ST13,WR0
	JMP	TIMER0HANDLERBYPASSST13
	TIMER0HANDLERCLRRUNBITST13:
	CLR	STG2.4
	TIMER0HANDLERBYPASSST13:
	JNB	STG2.5,TIMER0HANDLERBYPASSST14
	MOV	WR0,ST14
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST14
	DEC	WR0,#1
	MOV	ST14,WR0
	JMP	TIMER0HANDLERBYPASSST14
	TIMER0HANDLERCLRRUNBITST14:
	CLR	STG2.5
	TIMER0HANDLERBYPASSST14:
	JNB	STG2.6,TIMER0HANDLERBYPASSST15
	MOV	WR0,ST15
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST15
	DEC	WR0,#1
	MOV	ST15,WR0
	JMP	TIMER0HANDLERBYPASSST15
	TIMER0HANDLERCLRRUNBITST15:
	CLR	STG2.6
	TIMER0HANDLERBYPASSST15:
	JNB	STG2.7,TIMER0HANDLERBYPASSST16
	MOV	WR0,ST16
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST16
	DEC	WR0,#1
	MOV	ST16,WR0
	JMP	TIMER0HANDLERBYPASSST16
	TIMER0HANDLERCLRRUNBITST16:
	CLR	STG2.7
	TIMER0HANDLERBYPASSST16:
	JNB	STGALPHA.4,TIMER0HANDLERBYPASSSTE
	MOV	WR0,STE
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITSTE
	DEC	WR0,#1
	MOV	STE,WR0
	JMP	TIMER0HANDLERBYPASSSTE
	TIMER0HANDLERCLRRUNBITSTE:
	CLR	STGALPHA.4
	TIMER0HANDLERBYPASSSTE:
	JNB	STGALPHA.5,TIMER0HANDLERBYPASSSTF
	MOV	WR0,STF
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITSTF
	DEC	WR0,#1
	MOV	STF,WR0
	JMP	TIMER0HANDLERBYPASSSTF
	TIMER0HANDLERCLRRUNBITSTF:
	CLR	STGALPHA.5
	TIMER0HANDLERBYPASSSTF:
	JNB	STGALPHA.6,TIMER0HANDLERBYPASSSTG
	MOV	WR0,STG
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITSTG
	DEC	WR0,#1
	MOV	STG,WR0
	JMP	TIMER0HANDLERBYPASSSTG
	TIMER0HANDLERCLRRUNBITSTG:
	CLR	STGALPHA.6
	TIMER0HANDLERBYPASSSTG:
	JNB	STGALPHA.7,TIMER0HANDLERBYPASSSTH
	MOV	WR0,STH
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITSTH
	DEC	WR0,#1
	MOV	STH,WR0
	JMP	TIMER0HANDLERBYPASSSTH
	TIMER0HANDLERCLRRUNBITSTH:
	CLR	STGALPHA.7
	CLR	T2CON.2	;CALL	TIMER2_STOP
	CLR	P1.0
	TIMER0HANDLERBYPASSSTH:
	TIMER0HANDLERNOCHANGE2STX1:
	JNB	STG1.0,TIMER0HANDLERBYPASSST1
	MOV	WR0,ST1
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST1
	DEC	WR0,#1
	MOV	ST1,WR0
	JMP	TIMER0HANDLERBYPASSST1
	TIMER0HANDLERCLRRUNBITST1:
	CLR	STG1.0
	TIMER0HANDLERBYPASSST1:
	JNB	STG1.1,TIMER0HANDLERBYPASSST2
	MOV	WR0,ST2
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST2
	DEC	WR0,#1
	MOV	ST2,WR0
	JMP	TIMER0HANDLERBYPASSST2
	TIMER0HANDLERCLRRUNBITST2:
	CLR	STG1.1
	TIMER0HANDLERBYPASSST2:
	JNB	STG1.2,TIMER0HANDLERBYPASSST3
	MOV	WR0,ST3
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST3
	DEC	WR0,#1
	MOV	ST3,WR0
	JMP	TIMER0HANDLERBYPASSST3
	TIMER0HANDLERCLRRUNBITST3:
	CLR	STG1.2
	TIMER0HANDLERBYPASSST3:
	JNB	STG1.3,TIMER0HANDLERBYPASSST4
	MOV	WR0,ST4
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITST4
	DEC	WR0,#1
	MOV	ST4,WR0
	JMP	TIMER0HANDLERBYPASSST4
	TIMER0HANDLERCLRRUNBITST4:
	CLR	STG1.3
	TIMER0HANDLERBYPASSST4:
	JNB	STGALPHA.0,TIMER0HANDLERBYPASSSTA
	MOV	WR0,STA
	INC	WR0,#1
	MOV	STA,WR0
	TIMER0HANDLERBYPASSSTA:
	JNB	STGALPHA.1,TIMER0HANDLERBYPASSSTB
	MOV	WR0,STB
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITSTB
	DEC	WR0,#1
	MOV	STB,WR0
	JMP	TIMER0HANDLERBYPASSSTB
	TIMER0HANDLERCLRRUNBITSTB:
	CLR	STGALPHA.1
	TIMER0HANDLERBYPASSSTB:
	JNB	STGALPHA.2,TIMER0HANDLERBYPASSSTC
	MOV	WR0,STC
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITSTC
	DEC	WR0,#1
	MOV	STC,WR0
	JMP	TIMER0HANDLERBYPASSSTC
	TIMER0HANDLERCLRRUNBITSTC:
	CLR	STGALPHA.2
	TIMER0HANDLERBYPASSSTC:
	JNB	STGALPHA.3,TIMER0HANDLERBYPASSSTD
	MOV	WR0,STD
	CMP	WR0,#0
	JE	TIMER0HANDLERCLRRUNBITSTD
	DEC	WR0,#1
	MOV	STD,WR0
	JMP	TIMER0HANDLERBYPASSSTD
	TIMER0HANDLERCLRRUNBITSTD:
	CLR	STGALPHA.3
	TIMER0HANDLERBYPASSSTD:
	TIMER0HANDLERPASSALL:
	;CLR	TCON.5
	;CALL	D3_OFF
	POP	WR0
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
EX1I_HANDLER:
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
	CALL	LCD_LOCATION_SAVE
	CALL	RTC_DATE_DISPLAY
	CALL	RTC_TIME_DISPLAY
; 	CALL	ADC2_DISPLAY	;4320MS " AT 14.7456MHZ
	CALL	LCD_LOCATION_RESTORE
 	;CLR	TCON.3	;CALL	EX1I_CLR
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
TIMER1I_HANDLER:
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
;	CLR	TCON.7
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
SERIALI_HANDLER:
	; NOTE THAT COMMANDS ARE STORED AT SERIAL_RECEIVEADD WITH OUT UNITADD WRITTEN AT FIRST SO IT IS WRITTEN AS COMMAND...CS
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
	PUSH	WR2
	PUSH	WR0
	CALL	D1_ON
	CALL	D2_ON
	;RECEIVECHECK:
	JB	SCON.0,SERIALIHANDLERRECEIVECHECK
	JMP	SERIALIHANDLERTRANSMITCHECK
	SERIALIHANDLERRECEIVECHECK:
	CLR	SCON.0	;CLR RX INTURRUPT
	MOV	R0,SBUF
	;CHK IF FIRST CHARACTER i.e. UNITADD
	JNB	SCON.5,SERIALIHANDLERRECEIVESAVER0INCBR
	SERIALIHANDLERRECEIVECHECKUNIT:
	;CHECK IF MY UNIT
	CMP	R0,UNITADD
	JE	SERIALIHANDLERRECEIVEMYUNITRECEIVED
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERRECEIVEMYUNITRECEIVED:
	;MY UNIT RECEIVED
	CALL	SERIAL_PARITY_S
	CLR	SCON.5	;SERIAL_MULTIPROCESSOR_DISABLE
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERRECEIVESAVER0INCBR:
	MOV	WR2,#SERIAL_RECEIVEADD
	;ADD BR
	PUSH	WR0
	MOV	WR0,#0
	MOV	R1,SERIAL_BRECEIVED
	ADD	WR2,WR0
	POP	WR0
	MOV	@WR2,R0
	MOV	R0,SERIAL_BRECEIVED
	INC	R0,#1
	MOV	SERIAL_BRECEIVED,R0
	;CHECK LENGTH OF MESSAGE
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#2
	JG	SERIALIHANDLERRECEIVEANALYZEGT2
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERRECEIVEANALYZEGT2:
	;CHK COMMAND
	MOV	WR2,#SERIAL_RECEIVEADD
	MOV	R0,@WR2
	CMP	R0,#1
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD1
	CMP	R0,#2
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD2
	CMP	R0,#3
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD3
	CMP	R0,#4
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD4
	CMP	R0,#5
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD5
	CMP	R0,#6
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD6
	CMP	R0,#7
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD7
	CMP	R0,#8
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD8
	CMP	R0,#9
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD9
	CMP	R0,#10
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD10
	CMP	R0,#11
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD11
	CMP	R0,#12
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD12
	CMP	R0,#13
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD13
	CMP	R0,#14
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD14
	CMP	R0,#15
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD15
	CMP	R0,#16
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD16
	CMP	R0,#17
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD17
	CMP	R0,#18
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD18
	CMP	R0,#19
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD19
	CMP	R0,#20
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD20
	JMP	SERIALIHANDLERCONTAT21
	LONGSERIALIHANDLERANALYZERECEIVECMD1:
	JMP	SERIALIHANDLERANALYZERECEIVECMD1
	LONGSERIALIHANDLERANALYZERECEIVECMD2:
	JMP	SERIALIHANDLERANALYZERECEIVECMD2
	LONGSERIALIHANDLERANALYZERECEIVECMD3:
	JMP	SERIALIHANDLERANALYZERECEIVECMD3
	LONGSERIALIHANDLERANALYZERECEIVECMD4:
	JMP	SERIALIHANDLERANALYZERECEIVECMD4
	LONGSERIALIHANDLERANALYZERECEIVECMD5:
	JMP	SERIALIHANDLERANALYZERECEIVECMD5
	LONGSERIALIHANDLERANALYZERECEIVECMD6:
	JMP	SERIALIHANDLERANALYZERECEIVECMD6
	LONGSERIALIHANDLERANALYZERECEIVECMD7:
	JMP	SERIALIHANDLERANALYZERECEIVECMD7
	LONGSERIALIHANDLERANALYZERECEIVECMD8:
	JMP	SERIALIHANDLERANALYZERECEIVECMD8
	LONGSERIALIHANDLERANALYZERECEIVECMD9:
	JMP	SERIALIHANDLERANALYZERECEIVECMD9
	LONGSERIALIHANDLERANALYZERECEIVECMD10:
	JMP	SERIALIHANDLERANALYZERECEIVECMD10
	LONGSERIALIHANDLERANALYZERECEIVECMD11:
	JMP	SERIALIHANDLERANALYZERECEIVECMD11
	LONGSERIALIHANDLERANALYZERECEIVECMD12:
	JMP	SERIALIHANDLERANALYZERECEIVECMD12
	LONGSERIALIHANDLERANALYZERECEIVECMD13:
	JMP	SERIALIHANDLERANALYZERECEIVECMD13
	LONGSERIALIHANDLERANALYZERECEIVECMD14:
	JMP	SERIALIHANDLERANALYZERECEIVECMD14
	LONGSERIALIHANDLERANALYZERECEIVECMD15:
	JMP	SERIALIHANDLERANALYZERECEIVECMD15
	LONGSERIALIHANDLERANALYZERECEIVECMD16:
	JMP	SERIALIHANDLERANALYZERECEIVECMD16
	LONGSERIALIHANDLERANALYZERECEIVECMD17:
	JMP	SERIALIHANDLERANALYZERECEIVECMD17
	LONGSERIALIHANDLERANALYZERECEIVECMD18:
	JMP	SERIALIHANDLERANALYZERECEIVECMD18
	LONGSERIALIHANDLERANALYZERECEIVECMD19:
	JMP	SERIALIHANDLERANALYZERECEIVECMD19
	LONGSERIALIHANDLERANALYZERECEIVECMD20:
	JMP	SERIALIHANDLERANALYZERECEIVECMD20
	SERIALIHANDLERCONTAT21:
	CMP	R0,#21
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD21
	CMP	R0,#22
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD22
	CMP	R0,#23
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD23
	CMP	R0,#24
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD24
	CMP	R0,#25
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD25
	CMP	R0,#26
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD26
	CMP	R0,#27
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD27
	CMP	R0,#28
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD28
	CMP	R0,#29
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD29
	CMP	R0,#30
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD30
	CMP	R0,#31
	JE	LONGSERIALIHANDLERANALYZERECEIVECMD31
	JMP	SERIALRECEIVEHANDLERMSGERROR
	LONGSERIALIHANDLERANALYZERECEIVECMD21:
	JMP	SERIALIHANDLERANALYZERECEIVECMD21
	LONGSERIALIHANDLERANALYZERECEIVECMD22:
	JMP	SERIALIHANDLERANALYZERECEIVECMD22
	LONGSERIALIHANDLERANALYZERECEIVECMD23:
	JMP	SERIALIHANDLERANALYZERECEIVECMD23
	LONGSERIALIHANDLERANALYZERECEIVECMD24:
	JMP	SERIALIHANDLERANALYZERECEIVECMD24
	LONGSERIALIHANDLERANALYZERECEIVECMD25:
	JMP	SERIALIHANDLERANALYZERECEIVECMD25
	LONGSERIALIHANDLERANALYZERECEIVECMD26:
	JMP	SERIALIHANDLERANALYZERECEIVECMD26
	LONGSERIALIHANDLERANALYZERECEIVECMD27:
	JMP	SERIALIHANDLERANALYZERECEIVECMD27
	LONGSERIALIHANDLERANALYZERECEIVECMD28:
	JMP	SERIALIHANDLERANALYZERECEIVECMD28
	LONGSERIALIHANDLERANALYZERECEIVECMD29:
	JMP	SERIALIHANDLERANALYZERECEIVECMD29
	LONGSERIALIHANDLERANALYZERECEIVECMD30:
	JMP	SERIALIHANDLERANALYZERECEIVECMD30
	LONGSERIALIHANDLERANALYZERECEIVECMD31:
	JMP	SERIALIHANDLERANALYZERECEIVECMD31
	SERIALIHANDLERANALYZERECEIVECMD1:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND1
	JLE	SERIALIHANDLERANALYZERECEIVECONT1
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT1:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED1
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED1:
	;ITS MY UNIT AND COMMAND 1
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK1
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK1:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY1
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD2:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND2
	JLE	SERIALIHANDLERANALYZERECEIVECONT2
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT2:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED2
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED2:
	;ITS MY UNIT AND COMMAND 2
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK2
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK2:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY2
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD3:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND3
	JLE	SERIALIHANDLERANALYZERECEIVECONT3
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT3:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED3
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED3:
	;ITS MY UNIT AND COMMAND 3
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK3
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK3:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY3
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD4:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND4
	JLE	SERIALIHANDLERANALYZERECEIVECONT4
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT4:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED4
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED4:
	;ITS MY UNIT AND COMMAND 4
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK4
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK4:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY4
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD5:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND5
	JLE	SERIALIHANDLERANALYZERECEIVECONT5
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT5:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED5
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED5:
	;ITS MY UNIT AND COMMAND 5
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK5
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK5:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY5
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD6:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND6
	JLE	SERIALIHANDLERANALYZERECEIVECONT6
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT6:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED6
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED6:
	;ITS MY UNIT AND COMMAND 6
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK6
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK6:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY6
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD7:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND7
	JLE	SERIALIHANDLERANALYZERECEIVECONT7
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT7:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED7
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED7:
	;ITS MY UNIT AND COMMAND 7
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK7
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK7:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY7
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD8:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND8
	JLE	SERIALIHANDLERANALYZERECEIVECONT8
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT8:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED8
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED8:
	;ITS MY UNIT AND COMMAND 8
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK8
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK8:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY8
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD9:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND9
	JLE	SERIALIHANDLERANALYZERECEIVECONT9
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT9:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED9
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED9:
	;ITS MY UNIT AND COMMAND 9
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK9
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK9:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY9
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD10:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND10
	JLE	SERIALIHANDLERANALYZERECEIVECONT10
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT10:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED10
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED10:
	;ITS MY UNIT AND COMMAND 10
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK10
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK10:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY10
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD11:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND11
	JLE	SERIALIHANDLERANALYZERECEIVECONT11
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT11:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED11
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED11:
	;ITS MY UNIT AND COMMAND 11
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK11
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK11:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY11
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD12:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND12
	JLE	SERIALIHANDLERANALYZERECEIVECONT12
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT12:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED12
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED12:
	;ITS MY UNIT AND COMMAND 12
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK12
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK12:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY12
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD13:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND13
	JLE	SERIALIHANDLERANALYZERECEIVECONT13
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT13:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED13
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED13:
	;ITS MY UNIT AND COMMAND 13
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK13
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK13:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY13
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD14:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND14
	JLE	SERIALIHANDLERANALYZERECEIVECONT14
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT14:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED14
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED14:
	;ITS MY UNIT AND COMMAND 14
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK14
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK14:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY14
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD15:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND15
	JLE	SERIALIHANDLERANALYZERECEIVECONT15
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT15:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED15
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED15:
	;ITS MY UNIT AND COMMAND 15
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK15
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK15:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY15
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD16:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND16
	JLE	SERIALIHANDLERANALYZERECEIVECONT16
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT16:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED16
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED16:
	;ITS MY UNIT AND COMMAND 16
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK16
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK16:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY16
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD17:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND17
	JLE	SERIALIHANDLERANALYZERECEIVECONT17
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT17:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED17
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED17:
	;ITS MY UNIT AND COMMAND 17
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK17
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK17:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY17
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD18:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND18
	JLE	SERIALIHANDLERANALYZERECEIVECONT18
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT18:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED18
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED18:
	;ITS MY UNIT AND COMMAND 18
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK18
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK18:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY18
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD19:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND19
	JLE	SERIALIHANDLERANALYZERECEIVECONT19
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT19:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED19
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED19:
	;ITS MY UNIT AND COMMAND 19
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK19
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK19:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY19
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD20:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND20
	JLE	SERIALIHANDLERANALYZERECEIVECONT20
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT20:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED20
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED20:
	;ITS MY UNIT AND COMMAND 20
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK20
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK20:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY20
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD21:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND21
	JLE	SERIALIHANDLERANALYZERECEIVECONT21
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT21:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED21
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED21:
	;ITS MY UNIT AND COMMAND 21
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK21
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK21:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY21
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD22:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND22
	JLE	SERIALIHANDLERANALYZERECEIVECONT22
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT22:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED22
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED22:
	;ITS MY UNIT AND COMMAND 22
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK22
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK22:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY22
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD23:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND23
	JLE	SERIALIHANDLERANALYZERECEIVECONT23
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT23:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED23
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED23:
	;ITS MY UNIT AND COMMAND 23
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK23
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK23:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY23
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD24:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND24
	JLE	SERIALIHANDLERANALYZERECEIVECONT24
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT24:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED24
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED24:
	;ITS MY UNIT AND COMMAND 24
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK24
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK24:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY24
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD25:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND25
	JLE	SERIALIHANDLERANALYZERECEIVECONT25
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT25:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED25
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED25:
	;ITS MY UNIT AND COMMAND 25
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK25
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK25:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY25
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD26:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND26
	JLE	SERIALIHANDLERANALYZERECEIVECONT26
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT26:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED26
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED26:
	;ITS MY UNIT AND COMMAND 26
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK26
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK26:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY26
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD27:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND27
	JLE	SERIALIHANDLERANALYZERECEIVECONT27
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT27:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED27
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED27:
	;ITS MY UNIT AND COMMAND 27
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK27
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK27:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY27
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD28:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND28
	JLE	SERIALIHANDLERANALYZERECEIVECONT28
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT28:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED28
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED28:
	;ITS MY UNIT AND COMMAND 28
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK28
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK28:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY28
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD29:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND29
	JLE	SERIALIHANDLERANALYZERECEIVECONT29
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT29:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED29
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED29:
	;ITS MY UNIT AND COMMAND 29
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK29
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK29:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY29
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD30:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND30
	JLE	SERIALIHANDLERANALYZERECEIVECONT30
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT30:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED30
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED30:
	;ITS MY UNIT AND COMMAND 30
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK30
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK30:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY30
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALIHANDLERANALYZERECEIVECMD31:;-------
	;CHECK LENGTH RECEIVED IS IT = TO EXPECTED
	MOV	R0,SERIAL_BRECEIVED
	CMP	R0,#LENOFCOMMAND31
	JLE	SERIALIHANDLERANALYZERECEIVECONT31
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECONT31:
	JE	SERIALIHANDLERANALYZERECEIVEASEXPECTED31
	JMP	ENDOFSERIALIHANDLERRECEIVE
	SERIALIHANDLERANALYZERECEIVEASEXPECTED31:
	;ITS MY UNIT AND COMMAND 31
	CALL	SERIAL_CHECKSUM_CHECK
	CMP	R0,#1
	JE	SERIALIHANDLERANALYZERECEIVECHECKSUMOK31
	JMP	SERIALRECEIVEHANDLERMSGERROR
	SERIALIHANDLERANALYZERECEIVECHECKSUMOK31:
	;CHECK SUM IS OK .NOW DISTRIBUTE DATA AND REPLY
	CALL	SERIAL_REPLY31
	JMP	CLRRECEIVESERIALIHANDLER
	SERIALRECEIVEHANDLERMSGERROR:
	CALL	SERIAL_REPLY_ERROR
	CLRRECEIVESERIALIHANDLER:
	MOV	R0,#0
	MOV	SERIAL_BRECEIVED,R0
	ENDOFSERIALIHANDLERRECEIVE:
	SERIALIHANDLERTRANSMITCHECK:					;---------------TX
	JNB	SCON.1,ENDOFTRANSMITSERIALIHANDLER
	MOV	R0,SERIAL_TX_POINTER
	INC	R0,#1
	CMP	R0,SERIAL_BTRANSMIT
	JG	ENDOFTRANSMITSERIALIHANDLER1
	MOV	WR2,#SERIAL_TRANSMITADD
	MOV	R0,#0
	MOV	R1,SERIAL_TX_POINTER
	ADD	WR2,WR0
	INC	R1,#1
	MOV	SERIAL_TX_POINTER,R1
	MOV	R0,@WR2
	MOV	SBUF,R0
	JMP	ENDOFTRANSMITCHECK
 	ENDOFTRANSMITSERIALIHANDLER1:
	MOV	R0,#0
	MOV	SERIAL_TX_POINTER,R0
	MOV	SERIAL_BTRANSMIT,R0
	CALL	SERIAL_PARITY_M
	SETB	SCON.5	;SERIAL_MULTIPROCESSOR_ENABLE
	SETB	SCON.4	;SERIAL_RX_ENABLE
	CALL	DE485_0
	CALL	RE485_0
	ENDOFTRANSMITCHECK:
	CLR	SCON.1	;CLR TX INTURRUPT
	ENDOFTRANSMITSERIALIHANDLER:
	CALL	D2_OFF
	POP	WR0
	POP	WR2
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
TIMER2I_HANDLER:
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
;	CLR	T2CON.6
;	CLR	T2CON.7
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
PCAI_HANDLER:
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
;	CLR	CCON.0
;	CLR	CCON.1
;	CLR	CCON.2
;	CLR	CCON.3
;	CLR	CCON.7
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
SERIAL1I_HANDLER:
	PUSH	WR18
	PUSH	WR22
	PUSH	WR26
	PUSH	WR30
;	CLR	SCON1.0	;RX
;	CLR	SCON1.1	;TX
	POP	WR30
	POP	WR26
	POP	WR22
	POP	WR18
	RETI
;-------------------------- INITIALIZATION --------------------------
INI:		;><>
	MOV	DR60,#TOPOFFREERAM	;STACK POINTER
	MOV	P1,#0FEH
	MOV	P3,#0FFH
	MOV	WR16,#RAM_ADD		;WR18	IS WHERE YOU MOV YOUR RAM ADD.
	MOV	WR20,#IO_ADD		;WR22 IS WHERE YOU MOV YOUR IO ADD.
	MOV	WR24,#FLASH_ADD		;WR26 IS WHERE YOU MOV YOUR FLASH ADD.
	MOV	WR28,#ROM_ADD		;WR30 IS WHERE YOU MOV YOUR ROM ADD.
	CALL	I2C_INI
	CALL	EE_INI
	CALL	HCT574_INI
	CALL	TIMER_INI
	CALL	INTERRUPT_INI
	CALL	PPI_INI
	CALL	RTC_INI
	CALL	ADC_INI
	CALL	DAC_INI
	CALL	PIT_INI
	CALL	LCD_INI
	CALL	SPEAKER_INI
	CALL	PRINTF_INI
	CALL	REGISTER_INI
	CALL	FLASH_INI
	CALL	SERIAL_INI
	CALL	ST_INI
	CALL	SCNT_INI
	CALL	MACRO_INI
	CALL	GENERAL_READ
	CALL	PRINTF_MSG_WELCOME
	CALL	LCD_LOCATE12
	CALL	PRINTF
	CALL	LCD_LOCATE23
	CALL	PRINTF_MSG_VERSION
	CALL	PRINTF
	CALL	LCD_LINE1_CLR
	CALL	LCD_LINE2_CLR
	CALL	VPP_HIGH
	CALL	LCD_LOCATE21
	CALL	LCD_CURSOR_ON
	CALL	LCD_BLINK_ON
	CALL	SPEAKER_RUNTIME50
	CALL	PLAY2000
	CALL	SLEEP80
	CALL	SPEAKER_RUNTIME50
	CALL	PLAY2000
	CALL	MACROS_DO		; 425MS " AT 14.7456MHZ CONDITION:ALL MACROS TAKEN BUT EVERY THING IS QUIT NO ACTIONS INSIDE ROUTINES TAKEN
	CALL	WHEREFROM_READ
	CMP	R1,#1
	JE	MAIN
	CMP	R1,#2
	JE	LONGFLASHADDRESS
	JMP	MAIN
	LONGFLASHADDRESS:
	EJMP	0x00FE0000
MAIN:
	CPL	P1.2			;3.25 MS ALONE	;CALL WDT
	CALL	X_UPDATE		;37	MS AT 14.7456MHZ
	CALL	ADC_UPDATE		;1250	MS AT 14.7456MHZ
	CALL	MACROS_DO		;425	MS AT 14.7456MHZ CONDITION:ALL MACROS TAKEN BUT EVERY THING IS QUIT NO ACTIONS INSIDE ROUTINES TAKEN
	CALL	SCNT1_INC
	CALL	SCNT3_DEC
	CALL	LADDER_TEST
	JMP	MAIN
;S*LIBRARY*
;-------------------------------  MESSAGES   -----------------------
MSG_WELCOME:	
	DFB	"*WELCOME TO PLC251*  1999",0
MSG_VERSION:
	DFB	"DEMO VERSION 1.0 ",0
MSG_CHANNEL:
	DFB	"Ain( )=        Volts",0
MSG_MONTHNAME:
	DFB	"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",0
MSG_MONTHDAYS:
	DFB	31D,28D,31D,30D,31D,30D,31D,31D,30D,31D,30D,31D,0
DEVICE_CODE:				;1=01-1415 , 2=PLC251 , 3=PLC252
	DFB	2,"PLC251",0
DEVICE_SOFTWAREVERSION:			;10=V1.0
	DFB	10,"V1.0",0
;---------------------------- HCT574 BIT CONTROL -----------------------------
HCT574_INI:
	PUSH	R0
	SETB	P1.1			;NOT READY
	MOV	R0,#0xFF
	MOV	HCT574,R0
	CALL	HCT574_UPDATE
	NOP
	CLR	P1.1			;READY
	NOP
	MOV	R0,#0x00
	MOV	HCT574,R0
	CALL	HCT574_UPDATE
	POP	R0
	RET
HCT574_UPDATE:
	PUSH	R0
	PUSH	WR22
	MOV	WR22,#HCT574_ADD
	MOV	R0,HCT574
	MOV	@DR20,R0
	POP	WR22
	POP	R0
	RET
RESET_COM_0:
	CLR	HCT574.0
	CALL	HCT574_UPDATE
	RET
RESET_COM_1:
	SETB	HCT574.0
	CALL	HCT574_UPDATE
	RET
RESET_P_0:
	CLR	HCT574.1
	CALL	HCT574_UPDATE
	RET
RESET_P_1:
	SETB	HCT574.1
	CALL	HCT574_UPDATE
	RET
DTR_0:
	CLR	HCT574.2
	CALL	HCT574_UPDATE
	RET
DTR_1:
	SETB	HCT574.2
	CALL	HCT574_UPDATE
	RET
VPP_HIGH:
	CLR	HCT574.3
	CALL	HCT574_UPDATE
	RET
VPP_LOW:
	SETB	HCT574.3
	CALL	HCT574_UPDATE
	RET
ENB_RTI_0:
	CLR	HCT574.4
	CALL	HCT574_UPDATE
	RET
ENB_RTI_1:
	SETB	HCT574.4
	CALL	HCT574_UPDATE
	RET
FLASH_VON:
	CLR	HCT574.5
	CALL	HCT574_UPDATE
	RET
FLASH_VOFF:
	SETB	HCT574.5
	CALL	HCT574_UPDATE
	RET
RE485_0:
	CLR	HCT574.6
	CALL	HCT574_UPDATE
	RET
RE485_1:
	SETB	HCT574.6
	CALL	HCT574_UPDATE
	RET
DE485_0:
	CLR	HCT574.7
	CALL	HCT574_UPDATE
	RET
DE485_1:
	SETB	HCT574.7
	CALL	HCT574_UPDATE
	RET
;------------------- SERIAL COMMUNICATION ACTIONS -----------------------
SERIAL_REPLY_SHOW:
	;DISPLAYS CONTENTS TRANSMIT
	PUSH	WR0
	PUSH	WR2
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	MOV	WR2,#SERIAL_TRANSMITADD
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	POP	WR0
	POP	WR2
	RET
SERIAL_RECEIVE_ERASE:
	;DISPLAYS CONTENTS RECEIVE
	PUSH	WR0
	PUSH	WR2
	MOV	WR2,#SERIAL_RECEIVEADD
	MOV	R0,#0
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	MOV	@WR2,R0
	INC	WR2,#1
	POP	WR0
	POP	WR2
	RET
SERIAL_RECEIVE_SHOW:
	;DISPLAYS CONTENTS RECEIVE
	PUSH	WR0
	PUSH	WR2
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	MOV	WR2,#SERIAL_RECEIVEADD
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	R0BCD2LCD
	INC	WR2,#1
	POP	WR0
	POP	WR2
	RET
;E*LIBRARY*
SERIAL_HEADER_APPEND:
	MOV	WR0,#SERIAL_TRANSMITADD
	MOV	R4,UNITADD				;UNIT ADDRESS
	MOV	@WR0,R4
	MOV	WR0,#SERIAL_RECEIVEADD
	MOV	R4,@WR0
	MOV	WR0,#SERIAL_TRANSMITADD
	INC	WR0,#1
	MOV	@WR0,R4				;COMMAND
	RET
SERIAL_CHECKSUM_CHECK:
	;CHECKS INCOMMING CHECKSUM
	;INPUT R0 STRING LENGTH INCLUDING CHECKSUM 2BYTES. RETURN R0=0=ERROR R0=1=OK.
	;WR2 POINTER TO FIRST RECEIVE, WR4 LAST TO CHECH, WR6 ACCUMULATED CHECHSUM
	PUSH	WR2
	PUSH	DR4
	PUSH	WR8
	MOV	R7,R0
	MOV	R6,#0
	MOV	WR2,#SERIAL_RECEIVEADD
	MOV	WR4,WR2
	ADD	WR4,WR6
	DEC	WR4,#2
	DEC	WR4,#1	
	MOV	R0,#0		;RESULT IS ERROR SO FAR
	MOV	R7,#0
	MOV	R8,#0
	SERIALRECEIVECHECKSUMCHECKACC:
	MOV	R9,@WR2
	ADD	WR6,WR8
	INC	WR2,#1
	CMP	WR2,WR4
	JLE	SERIALRECEIVECHECKSUMCHECKACC
	MOV	WR8,#0
	MOV	R9,UNITADD
	ADD	WR6,WR8
	;NOW WR6 CONTAINS INCOMMING CHECHSUM
	MOV	R4,@WR2	;HIGH RECEIVE CHECKSUM
	INC	WR2,#1
	MOV	R5,@WR2	;LOW RECEIVE CHECKSUM
	CMP	WR4,WR6
	JNE	SERIALRECEIVECHECKSUMCHECKEND
	MOV	R0,#1
	SERIALRECEIVECHECKSUMCHECKEND:
	POP	WR8
	POP	DR4
	POP	WR2
	RET
SERIAL_CHECKSUM_APPEND:
	CALL	DE485_1
	CALL	RE485_1
	MOV	WR2,#SERIAL_TRANSMITADD
	DEC	WR2,#1
	MOV	WR4,#0
	MOV	WR6,#0
	SERIALCHECKSUMAPPENDACCUMULATE:
	INC	WR2,#1
	MOV	R7,@WR2
	ADD	WR4,WR6
	CMP	WR2,WR0
	JNE	SERIALCHECKSUMAPPENDACCUMULATE
	INC	WR0,#1
	MOV	@WR0,R4			;CHECHK SUM HIGH
	INC	WR0,#1
	MOV	@WR0,R5			;CHECHK SUM LOW
	SUB	WR0,#SERIAL_TRANSMITADD
	INC	WR0,#1
	MOV	SERIAL_BTRANSMIT,R1
	MOV	R0,#0
	MOV	SERIAL_TX_POINTER,R0
	CALL	SERIAL_TX_ENABLE
	CALL	SERIAL_PARITY_S
	SETB	SCON.1	;GENERATE TX INTURRUPT
	RET
SERIAL_REPLY_ERROR:
	PUSH	DR0
	PUSH	DR4
	MOV	WR0,#SERIAL_TRANSMITADD
	MOV	R4,NETWORKADD		;NETWORK ADDRESS
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,UNITADD		;UNIT ADDRESS
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#255			;COMMAND
	MOV	@WR0,R4
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY1:
	; 1			X_ALL_READ
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.XG1.XG2.XG3.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	R4,X_GRP1			;X_GRP1
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,X_GRP2			;X_GRP2
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,X_GRP3			;X_GRP3
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY2:
	; 2			Y_ALL_READ
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.YG1.YG2.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	R4,Y_GRP1	;YG1
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,Y_GRP2	;YG2
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY3:
	; 3			AI_ALL_READ
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.CH1H.CH1L.CH2H.CH2L.CH3H.CH3L.CH4H.CH4L.CH5H.CH5L.CH6H.CH6L.CH7H.CH7L.CH8H.CH8L.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	R4,ADC1_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC1_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC2_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC2_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC3_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC3_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC4_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC4_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC5_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC5_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC6_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC6_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC7_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC7_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC8_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC8_LOW
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY4:
	; 4			AO_ALL_READ
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.CH1H.CH1L.CH2H.CH2L.CH3H.CH3L.CH4H.CH4L.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	R4,DAC1_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC1_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC2_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC2_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC3_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC3_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC4_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC4_LOW
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY5:
	; 5			AI_CHX_READ		CHX=1~8
	;IN FORMAT:		H.CHX.CS
	;OUT FORMAT:	H.CHXH.CHXL.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	WR2,#SERIAL_RECEIVEADD
	INC	WR2,#1
	MOV	R7,@WR2
	DEC	R7,#1
	MOV	R6,#0
	SLL	WR6
	MOV	WR2,#ADC1_HIGH
	ADD	WR2,WR6
	MOV	R4,@WR2
	MOV	@WR0,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR2
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY6:
	; 6			AO_CHX_READ		CHX=1~4
	;IN FORMAT:		H.CHX.CS
	;OUT FORMAT:	H.CHXH.CHXL.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	WR2,#SERIAL_RECEIVEADD
	INC	WR2,#1
	MOV	R7,@WR2
	DEC	R7,#1
	MOV	R6,#0
	SLL	WR6
	MOV	WR2,#DAC1_HIGH
	ADD	WR2,WR6
	MOV	R4,@WR2
	MOV	@WR0,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR2
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY7:
	; 7			Y_ALL_WRITE
	;IN FORMAT:		H.YG1.YG2.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA7
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA7:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	Y_GRP1,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	Y_GRP2,R2
	CALL	Y_GRP1_UPDATE
	CALL	Y_GRP2_UPDATE
	RET
SERIAL_REPLY8:
	; 8			AO_ALL_WRITE
	;IN FORMAT:		H.CH1H.CH1L.CH2H.CH2L.CH3H.CH3L.CH4H.CH4L.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA8
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA8:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC1_HIGH,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC1_LOW,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC2_HIGH,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC2_LOW,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC3_HIGH,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC3_LOW,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC4_HIGH,R2
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	DAC4_LOW,R2
	INC	WR0,#1
	CALL	DAC1_UPDATE
	CALL	DAC2_UPDATE
	CALL	DAC3_UPDATE
	CALL	DAC4_UPDATE
	RET
SERIAL_REPLY9:
	; 9			Y_CHX_WRITE
	;IN FORMAT:		H.CHX.ONOFF.CS 'ONOFF 0=OFF 1=ON
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA9
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA9:
	MOV	WR2,#SERIAL_RECEIVEADD
	INC	WR2,#1
	MOV	R0,@WR2	;CHX
	INC	WR2,#1
	;VALIDATE CHANNEL MUST BE 1-16
	CMP	R0,#0x10
	JG	SERIALPROCESSDATA9END
	CMP	R0,#0x00
	JE	SERIALPROCESSDATA9END
	MOV	R1,@WR2	;STATUS
	CMP	R0,#8
	JG	SERIALPROCESSDATA9GT8
	DEC	R0,#1
	CMP	R1,#0
	JG	SERIALPROCESSDATA9ONPOINT
	;CLR POINT
	CALL	R0DECODEAL
	MOV	R1,Y_GRP1
	ANL	R0,R1
	MOV	Y_GRP1,R0
	CALL	Y_GRP1_UPDATE
	JMP	SERIALPROCESSDATA9END
	SERIALPROCESSDATA9ONPOINT:
	;SET POINT
	CALL	R0DECODEAH
	MOV	R1,Y_GRP1
	ORL	R0,R1
	MOV	Y_GRP1,R0
	CALL	Y_GRP1_UPDATE
	JMP	SERIALPROCESSDATA9END
	SERIALPROCESSDATA9GT8:
	SUB	R0,#9
	CMP	R1,#0
	JG	SERIALPROCESSDATA9GT8ONPOINT
	;CLR POINT
	CALL	R0DECODEAL
	MOV	R1,Y_GRP2
	ANL	R0,R1
	MOV	Y_GRP2,R0
	CALL	Y_GRP2_UPDATE
	JMP	SERIALPROCESSDATA9END
	SERIALPROCESSDATA9GT8ONPOINT:
	;SET POINT
	CALL	R0DECODEAH
	MOV	R1,Y_GRP2
	ORL	R0,R1
	MOV	Y_GRP2,R0
	CALL	Y_GRP2_UPDATE
	SERIALPROCESSDATA9END:
	RET
SERIAL_REPLY10:
	; 10			AO_CHX_WRITE
	;IN FORMAT:		H.CHX.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA10
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA10:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R4,@WR0	;CHX
	INC	WR0,#1
	MOV	R2,@WR0	;AOH
	INC	WR0,#1
	MOV	R3,@WR0	;AOL
	CMP	R4,#1
	JE	SERIALPROCESSDATA10CHX1
	CMP	R4,#2
	JE	SERIALPROCESSDATA10CHX2
	CMP	R4,#3
	JE	SERIALPROCESSDATA10CHX3
	CMP	R4,#4
	JE	SERIALPROCESSDATA10CHX4
	JMP	SERIALPROCESSDATA10END
	SERIALPROCESSDATA10CHX1:
	MOV	DAC1_HIGH,R2
	MOV	DAC1_LOW,R3
	CALL	DAC1_UPDATE
	JMP	SERIALPROCESSDATA10END
	SERIALPROCESSDATA10CHX2:
	MOV	DAC2_HIGH,R2
	MOV	DAC2_LOW,R3
	CALL	DAC2_UPDATE
	JMP	SERIALPROCESSDATA10END
	SERIALPROCESSDATA10CHX3:
	MOV	DAC3_HIGH,R2
	MOV	DAC3_LOW,R3
	CALL	DAC3_UPDATE
	JMP	SERIALPROCESSDATA10END
	SERIALPROCESSDATA10CHX4:
	MOV	DAC4_HIGH,R2
	MOV	DAC4_LOW,R3
	CALL	DAC4_UPDATE
	SERIALPROCESSDATA10END:
	RET
SERIAL_REPLY11:
	; 11			ALL_READ
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.XG1.XG2.XG3.YG1.YG2.AICH1H.AICH1L.AICH2H.AICH2L.AICH3H.AICH3L.AICH4H.AICH4L.AICH5H.AICH5L.AICH6H.AICH6L.AICH7H.AICH7L.AICH8H.AICH8L.AOCH1H.AOCH1L.AOCH2H.AOCH2L.AOCH3H.AOCH3L.AOCH4H.AOCH4L.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	R4,X_GRP1			;X_GRP1
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,X_GRP2			;X_GRP2
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,X_GRP3			;X_GRP3
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,Y_GRP1	;YG1
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,Y_GRP2	;YG2
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC1_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC1_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC2_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC2_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC3_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC3_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC4_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC4_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC5_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC5_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC6_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC6_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC7_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC7_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC8_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,ADC8_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC1_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC1_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC2_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC2_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC3_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC3_LOW
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC4_HIGH
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,DAC4_LOW
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY12:
	; 12							FLASH_SEC2SEC
	;IN FORMAT:		H.FROM.TO.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	D2_ON
	CALL	SERIAL_PROCESSDATA12
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	CALL	D2_OFF
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA12:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R2,@WR0
	INC	WR0,#1
	MOV	R3,@WR0
	SLL	R2
	SLL	R2
	SLL	R2
	SLL	R2
	ORL	R2,R3
	CMP	R2,#0X12
	JE	LONGFLASH_SEC12SEC2
	CMP	R2,#0X13
	JE	LONGFLASH_SEC12SEC3
	CMP	R2,#0X14
	JE	LONGFLASH_SEC12SEC4
	CMP	R2,#0X21
	JE	LONGFLASH_SEC22SEC1
	CMP	R2,#0X23
	JE	LONGFLASH_SEC22SEC3
	CMP	R2,#0X24
	JE	LONGFLASH_SEC22SEC4
	CMP	R2,#0X31
	JE	LONGFLASH_SEC32SEC1
	CMP	R2,#0X32
	JE	LONGFLASH_SEC32SEC2
	CMP	R2,#0X34
	JE	LONGFLASH_SEC32SEC4
	CMP	R2,#0X41
	JE	LONGFLASH_SEC42SEC1
	CMP	R2,#0X42
	JE	LONGFLASH_SEC42SEC2
	CMP	R2,#0X43
	JE	LONGFLASH_SEC42SEC3
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC12SEC2:
	JMP	FLASH_SEC12SEC2
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC12SEC3:
	JMP	FLASH_SEC12SEC3
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC12SEC4:
	JMP	FLASH_SEC12SEC4
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC22SEC1:
	JMP	FLASH_SEC22SEC1
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC22SEC3:
	JMP	FLASH_SEC22SEC3
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC22SEC4:
	JMP	FLASH_SEC22SEC4
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC32SEC1:
	JMP	FLASH_SEC32SEC1
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC32SEC2:
	JMP	FLASH_SEC32SEC2
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC32SEC4:
	JMP	FLASH_SEC32SEC4
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC42SEC1:
	JMP	FLASH_SEC42SEC1
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC42SEC2:
	JMP	FLASH_SEC42SEC2
	JMP	ENDOFSERIALPROCESSDATA12
	LONGFLASH_SEC42SEC3:
	JMP	FLASH_SEC42SEC3
	ENDOFSERIALPROCESSDATA12:
	RET
SERIAL_REPLY13:
	; 13							CPU_LOOP
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.CS
	;NEEDED BEFORE FLASH TRANSFER
	MOV	DR60,#TOPOFFREERAM	;STACK POINTER
	CALL	SERIAL_INI
	MOV	WR0,#ROM_ADD
	MOV	WR2,#CPU_LOOP
	PUSH	R0
	PUSH	R1
	PUSH	R3
	PUSH	R2
	CALL	SERIAL_HEADER_APPEND
	CALL	SERIAL_CHECKSUM_APPEND
	RETI
SERIAL_REPLY14:
	; 14							FLASH_READ
	;IN FORMAT:		H.ADDH.ADDL.CS
	;OUT FORMAT:	H.CONT1.CONT2....CON64.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA14
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	MOV	WR26,WR2		;WR26 HAS ACTUAL POINTER TO BYTE TO BE TRANSMITTED
	ADD	WR2,#64D		;WR2 HAS POINTER TO LAST BYTE TO BE TRANSMITTED
	SERIALREPLY14REREADFLASH:
	MOV	R4,@DR24
	INC	WR0,#1
	MOV	@WR0,R4
	INC	WR26,#1
	CMP	WR26,WR2
	JNE	SERIALREPLY14REREADFLASH
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA14:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R2,@WR0	;WR2 WILL HOLD ADDRESS POINTER TO FLASH ROM.
	INC	WR0,#1
	MOV	R3,@WR0
	RET
SERIAL_REPLY15:
	; 15							UNITADD_SET
	;IN FORMAT:		H.UNITADD.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA15
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA15:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	UNITADD,R2
	CALL	UNITADD_WRITE
	RET
SERIAL_REPLY16:
	; 16							CPU_RESET
	;IN FORMAT:		H.CS
	;OUT FORMAT:
	CALL	CPU_RESET
	RET
SERIAL_REPLY17:
	; 17							DEVICE_INFO
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.DEVICE_CODE(EX.2=>PLC251).DEVICE_SOFTWAREVERSION.SERIALNUM(MSB).SERIALNUM(MSB-1).SERIALNUM(LSB+1).SERIALNUM(LSB).CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	WR30,#DEVICE_CODE
	MOV	R2,@DR28
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	WR30,#DEVICE_SOFTWAREVERSION
	MOV	R2,@DR28
	MOV	@WR0,R2
	CALL	SERIALNUM_READ
	INC	WR0,#1
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	@WR0,R5
	INC	WR0,#1
	MOV	@WR0,R6
	INC	WR0,#1
	MOV	@WR0,R7
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY18:
	; 18							DATETIME_SET
	;IN FORMAT:		H.CENTURY.YEAR.MONTH.DATE.HOURS(24 FORMAT).MINUTES.SECONDS.CS	BCD FORMAT	ie 10PM AS 24HOUR FORMAT IS 22 SO 22H
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA18
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA18:
	CALL	EX1I_DISABLE
	MOV	WR2,#SERIAL_RECEIVEADD
	INC	WR2,#1
	MOV	R0,@WR2
	MOV	RTC_CENTURIES,R0
	INC	WR2,#1
	MOV	R0,@WR2
	CALL	CBCD2BIN
	MOV	R1,R0
	ANL	R1,#3
	MOV	RTC_YEARS,R1
	ANL	R0,#0xFC
	CALL	CBIN2BCD
	MOV	RTC_YEARSOFFSET,R0
	INC	WR2,#1
	MOV	R0,@WR2
	MOV	RTC_MONTHS,R0
	INC	WR2,#1
	MOV	R0,@WR2
	MOV	RTC_DAYS,R0
	INC	WR2,#1
	MOV	R0,@WR2
	MOV	RTC_HOURS,R0
	INC	WR2,#1
	MOV	R0,@WR2
	MOV	RTC_MINUTES,R0
	INC	WR2,#1
	MOV	R0,@WR2
	MOV	RTC_SECONDS,R0
	CALL	RTC_DATE_WRITE
	CALL	RTC_TIME_WRITE
	CALL	EX1I_ENABLE
	RET
SERIAL_REPLY19:
	; 19							SERRIALNUM_SET
	;IN FORMAT:		H.A.B.C.D.CS			A=MSB BYTE B=MSB-1 C=LSB+1 D=LSB
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA19
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA19:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R4,@WR0
	INC	WR0,#1
	MOV	R5,@WR0
	INC	WR0,#1
	MOV	R6,@WR0
	INC	WR0,#1
	MOV	R7,@WR0
	CALL	SERIALNUM_WRITE
	RET
SERIAL_REPLY20:
	; 20							TIME12TIME24
	;IN FORMAT:		H.A.CS			A=1 OR A=12 => 12, A=2 OR A=24 => 24 HOUR FORMAT SYSTEM
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA20
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA20:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R2,@WR0
	CMP	R2,#1
	JE	SERIALPROCESSDATATIME12
	CMP	R2,#12
	JE	SERIALPROCESSDATATIME12
	CMP	R2,#2
	JE	SERIALPROCESSDATATIME24
	CMP	R2,#24
	JE	SERIALPROCESSDATATIME24
	POP	DR4
	POP	DR0
	JMP	SERIAL_REPLY_ERROR
	SERIALPROCESSDATATIME12:
	CALL	RTC_TIME12
	JMP	ENDOFSERIALPROCESSDATATIME
	SERIALPROCESSDATATIME24:
	CALL	RTC_TIME24
	ENDOFSERIALPROCESSDATATIME:
	RET
SERIAL_REPLY21:
	; 21							EE_WRITE
	;IN FORMAT:		H.AH.AL.DATA.CS		AH(ADDRESS HIGH)=0~1(PAGE) , AL(ADDRESS LOW)=0~255
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA21
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA21:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R4,@WR0
	INC	WR0,#1
	MOV	R2,@WR0
	INC	WR0,#1
	MOV	R3,@WR0
	MOV	WR0,WR2
	CMP	R4,#0
	JE	SERIALPROCESSDATA21HIGHEE
	CMP	R4,#1
	JE	SERIALPROCESSDATA21LOWEE
	POP	DR4
	POP	DR0
	JMP	SERIAL_REPLY_ERROR
	SERIALPROCESSDATA21HIGHEE:
	CALL	EE_BANK1
	JMP	SERIALPROCESSDATA21NEXT
	SERIALPROCESSDATA21LOWEE:
	CALL	EE_BANK0
	SERIALPROCESSDATA21NEXT:
	CALL	EE_WRITE
	RET
SERIAL_REPLY22:
	; 22							EE_READ
	;IN FORMAT:		H.AH.AL.CS			AH(ADDRESS HIGH)=0~1(PAGE) , AL(ADDRESS LOW)=0~255
	;OUT FORMAT:	H.DATA.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA22
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	@WR0,R5
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA22:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R4,@WR0
	INC	WR0,#1
	MOV	R2,@WR0
	MOV	R0,R2
	CMP	R4,#0
	JE	SERIALPROCESSDATA21HIGHEER
	CMP	R4,#1
	JE	SERIALPROCESSDATA21LOWEER
	POP	DR4
	POP	DR0
	JMP	SERIAL_REPLY_ERROR
	SERIALPROCESSDATA21HIGHEER:
	CALL	EE_BANK1
	JMP	SERIALPROCESSDATA21NEXTR
	SERIALPROCESSDATA21LOWEER:
	CALL	EE_BANK0
	SERIALPROCESSDATA21NEXTR:
	CALL	EE_READ
	MOV	R5,R1		;R5 HAS DATA
	RET
SERIAL_REPLY23:
	; 23							SCNT_READ
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.SCNT1(4BYTES MSB FIRST).SCNT2....SCNT10.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	MOV	R2,SCNT1+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT1+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT1+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT1+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT2+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT2+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT2+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT2+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT3+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT3+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT3+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT3+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT4+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT4+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT4+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT4+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT5+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT5+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT5+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT5+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT6+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT6+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT6+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT6+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT7+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT7+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT7+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT7+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT8+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT8+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT8+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT8+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT9+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT9+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT9+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT9+3
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT10+0
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT10+1
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT10+2
	MOV	@WR0,R2
	INC	WR0,#1
	MOV	R2,SCNT10+3
	MOV	@WR0,R2
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_REPLY24:
	; 24							SCNT_CHX_READ
	;IN FORMAT:		H.CHX.CS
	;OUT FORMAT:	H.SCNTX(4BYTES MSB FIRST).CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA24
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	INC	WR0,#1
	ADD	WR2,#SCNT1
	MOV	R4,@WR2
	MOV	@WR0,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR2
	MOV	@WR0,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR2
	MOV	@WR0,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR2
	MOV	@WR0,R4
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA24:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R3,@WR0
	DEC	R3,#1
	SLL	R3
	SLL	R3
	MOV	R2,#0
	RET
SERIAL_REPLY25:
	; 25							SCNT_CHX_WRITE
	;IN FORMAT:		H.CHX.SCNTX(4BYTES MSB FIRST).CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA25
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA25:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R3,@WR0
	DEC	R3,#1
	SLL	R3
	SLL	R3
	MOV	R2,#0		;WR2 HAS OFFSET FOR COUNTERS
	ADD	WR2,#SCNT1
	INC	WR0,#1
	MOV	R4,@WR0
	MOV	@WR2,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR0
	MOV	@WR2,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR0
	MOV	@WR2,R4
	INC	WR0,#1
	INC	WR2,#1
	MOV	R4,@WR0
	MOV	@WR2,R4
	RET
SERIAL_REPLY26:
	; 26							FLASH_SAVE
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA26
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA26:
	CALL	FLASH_SEC12SEC3
	CALL	FLASH_SEC22SEC4
	RET
SERIAL_REPLY27:
	; 27							FLASH_RESTORE
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA27
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA27:
	CALL	FLASH_SEC32SEC1
	CALL	FLASH_SEC42SEC2
	RET
SERIAL_REPLY28:
	; 28							FLASH_EXCHANGE
	;IN FORMAT:		H.CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA28
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA28:
	PUSH	R8
	MOV	R1,#FLASH_ADD
	MOV	WR2,#0x0000
	MOV	R5,#FLASH_ADD
	MOV	WR6,#0x8000
	REDOSERIALPROCESSDATA28:
	MOV	R0,@DR0
	MOV	R8,R0
	MOV	R4,@DR4
	MOV	R0,R4
	CALL	FLASH_BYTEPROGRAM
	PUSH	WR2
	MOV	WR2,WR6
	MOV	R0,R8
	CALL	FLASH_BYTEPROGRAM
	POP	WR2
	INC	WR2,#1
	INC	WR6,#1
	CMP	WR6,#0
	JE	ENDOFSERIALPROCESSDATA28
	JMP	REDOSERIALPROCESSDATA28
	ENDOFSERIALPROCESSDATA28:
	POP	R8
	RET
SERIAL_REPLY29:
	; 29							FLASH_WRITE
	;IN FORMAT:		H.AH.AL.DATA1. ... .DATA64.CS
	;OUT FORMAT:	H.CS
	;NOTE THAT THE SECTOR MUST BE ERASED BEFORE WRITING.
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA29
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA29:
	MOV	WR4,#SERIAL_RECEIVEADD
	INC	WR4,#1
	MOV	R2,@WR4
	INC	WR4,#1
	MOV	R3,@WR4
	MOV	R1,#FLASH_ADD
	MOV	WR6,WR2
	ADD	WR6,#63	;WR6 HAS THE LAST ADDRESS TO BE UPDATED
	DEC	WR2,#1
	REDOSERIALPROCESSDATA29:
	INC	WR2,#1
	INC	WR4,#1
	MOV	R0,@WR4
	CALL	FLASH_BYTEPROGRAM
	CMP	WR6,WR2
	JE	ENDOFSERIALPROCESSDATA29
	JMP	REDOSERIALPROCESSDATA29
	ENDOFSERIALPROCESSDATA29:
	RET
SERIAL_REPLY30:
	; 30							FLASH_SECTORERASE
	;IN FORMAT:		H.SEC(1/2/3/4).CS
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA30
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA30:
	MOV	WR0,#SERIAL_RECEIVEADD
	INC	WR0,#1
	MOV	R2,@WR0
	CMP	R2,#0x1
	JE	LONGSERIALPROCESSDATA30FLASHSECERASE1
	CMP	R2,#0x2
	JE	LONGSERIALPROCESSDATA30FLASHSECERASE2
	CMP	R2,#0x3
	JE	LONGSERIALPROCESSDATA30FLASHSECERASE3
	CMP	R2,#0x4
	JE	LONGSERIALPROCESSDATA30FLASHSECERASE4
	JMP	ENDOFSERIALPROCESSDATA30
	LONGSERIALPROCESSDATA30FLASHSECERASE1:
	CALL	FLASH_SEC1_ERASE
	JMP	ENDOFSERIALPROCESSDATA30
	LONGSERIALPROCESSDATA30FLASHSECERASE2:
	CALL	FLASH_SEC2_ERASE
	JMP	ENDOFSERIALPROCESSDATA30
	LONGSERIALPROCESSDATA30FLASHSECERASE3:
	CALL	FLASH_SEC3_ERASE
	JMP	ENDOFSERIALPROCESSDATA30
	LONGSERIALPROCESSDATA30FLASHSECERASE4:
	CALL	FLASH_SEC4_ERASE
	ENDOFSERIALPROCESSDATA30:
	RET
SERIAL_REPLY31:
	; 31							PROGRAM_WHEREFROMISTART
	;IN FORMAT:		H.FLASH/ROM.CS		FLASH/ROM	1=ROM 2=FLASH
	;OUT FORMAT:	H.CS
	PUSH	DR0
	PUSH	DR4
	CALL	SERIAL_PROCESSDATA31
	CALL	SERIAL_HEADER_APPEND
	;-----DATA
	;-----END OF DATA
	CALL	SERIAL_CHECKSUM_APPEND
	POP	DR4
	POP	DR0
	RET
SERIAL_PROCESSDATA31:
	MOV	WR4,#SERIAL_RECEIVEADD
	INC	WR4,#1
	MOV	R2,@WR4
	CMP	R2,#1
	JE	SERIALPROCESSDATA31ITISROM
	CMP	R2,#2
	JE	SERIALPROCESSDATA31ITISFLASH
	JMP	ENDOFSERIALPROCESSDATA31
	SERIALPROCESSDATA31ITISROM:
	CALL	WHEREFROM_WRITEROM
	JMP	ENDOFSERIALPROCESSDATA31
	SERIALPROCESSDATA31ITISFLASH:
	CALL	WHEREFROM_WRITEFLASH
	ENDOFSERIALPROCESSDATA31:
	RET
SERIAL_REPLYtest:
	CALL	SERIAL_PARITY_S
	;SUB SENDS A~Z TO COM1
	PUSH	DR0
	PUSH	DR4
	MOV	WR0,#SERIAL_TRANSMITADD
	MOV	R4,#"A"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"B"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"C"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"D"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"E"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"F"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"G"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"H"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"I"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"J"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"K"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"L"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"M"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"N"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"O"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"P"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"Q"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"R"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"S"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"T"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"U"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"V"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"W"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"X"
	MOV	@WR0,R4
	INC	WR0,#1
	MOV	R4,#"Y"
	MOV	@WR0,R4
;	INC	WR0,#1
;	MOV	R4,#"Z"
;	MOV	@WR0,R4
	MOV	WR2,#SERIAL_TRANSMITADD
	DEC	WR2,#1
	MOV	WR4,#0
	MOV	WR6,#0
	SERIALREPLYTESTACCUMULATE:
	INC	WR2,#1
	MOV	R7,@WR2
	ADD	WR4,WR6
	CMP	WR2,WR0
	JNE	SERIALREPLYTESTACCUMULATE
	INC	WR0,#1
	INC	WR0,#1
	SUB	WR0,#SERIAL_TRANSMITADD
	INC	WR0,#1
	MOV	R1,#26
	MOV	SERIAL_BTRANSMIT,R1
	MOV	R0,#0
	MOV	SERIAL_TX_POINTER,R0
	CALL	SERIAL_TX_ENABLE
	SETB	SCON.1	;GENERATE TX INTURRUPT
	POP	DR4
	POP	DR0
	RET
;-------------------------------   JOBS    --------------------------------
JOB1:
	PUSH	WR0
	MOV	WR0,STA
	CALL	LCD_LOCATE21
	CALL	R0BCD2LCD
	CALL	R1BCD2LCD
	POP	WR0
	RET
JOB2:
	RET
JOB3:
	RET
JOB4:
	RET
JOB5:
	RET
JOB6:
	RET
JOB7:
	RET
JOB8:
	RET
JOB9:
	RET
JOB10:
	RET
;S*LIBRARY*
;-------------------------- SERIAL COMMUNICATION --------------------------
SERIAL_INI:
	PUSH	R0
	CALL	SERIAL_TCLK_T1
	CALL	SERIAL_RCLK_T1
	CALL	SERIAL_FESM0_FE
	CALL	SERIAL_BAUD_READ		;CALL	SERIAL_BAUDRATE_9600
	CALL	SERIAL_BAUD_SET
	CALL	NETWORKADD_READ	;READS NETWORK ADD FROM SERIAL EEPROM
	CALL	UNITADD_READ	;READS UNIT ADD FROM SERIAL EEPROM
	CALL	SERIAL_PARITY_M
	CALL	SERIAL_MULTIPROCESSOR_ENABLE
	CALL	SERIAL_RX_ENABLE
	MOV	R0,#0xFF
	MOV	SADEN,R0
	MOV	R0,UNITADD
	MOV	SADDR,R0
	MOV	R0,#0x00
	MOV	SERIAL_BTRANSMIT,R0
	MOV	SERIAL_BRECEIVED,R0
	POP	R0
	RET
SERIAL_BAUD_SET:
	PUSH	R0
	MOV	R0,SERIAL_BAUD
	CMP	R0,#0
	JE	SERIALBAUDSETTO150
	CMP	R0,#1
	JE	SERIALBAUDSETTO300
	CMP	R0,#2
	JE	SERIALBAUDSETTO600
	CMP	R0,#3
	JE	SERIALBAUDSETTO1200
	CMP	R0,#4
	JE	SERIALBAUDSETTO2400
	CMP	R0,#5
	JE	SERIALBAUDSETTO4800
	CMP	R0,#6
	JE	SERIALBAUDSETTO9600
	CMP	R0,#7
	JE	SERIALBAUDSETTO19200
	CMP	R0,#8
	JE	SERIALBAUDSETTO38400
	CMP	R0,#9
	JE	SERIALBAUDSETTO76800
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO150:
	CALL	SERIAL_BAUDRATE_150
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO300:
	CALL	SERIAL_BAUDRATE_300
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO600:
	CALL	SERIAL_BAUDRATE_600
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO1200:
	CALL	SERIAL_BAUDRATE_1200
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO2400:
	CALL	SERIAL_BAUDRATE_2400
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO4800:
	CALL	SERIAL_BAUDRATE_4800
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO9600:
	CALL	SERIAL_BAUDRATE_9600
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO19200:
	CALL	SERIAL_BAUDRATE_19200
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO38400:
	CALL	SERIAL_BAUDRATE_38400
	JMP	ENDOFSERIALBAUDSET
	SERIALBAUDSETTO76800:
	CALL	SERIAL_BAUDRATE_76800
	ENDOFSERIALBAUDSET:
	POP	R0
	RET
NETWORKADD_EDIT:;#@#
	PUSH	WR0
	MOV	R1,NETWORKADD	;TEMP STORE NETWORKADD
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	CALL	N_PRINT
	CALL	E_PRINT
	CALL	T_PRINT
	CALL	W_PRINT
	CALL	O_PRINT
	CALL	R_PRINT
	CALL	K_PRINT
	CALL	SPACE_PRINT
	CALL	A_PRINT
	CALL	D_PRINT
	CALL	D_PRINT
	CALL	R_PRINT
	CALL	E_PRINT
	CALL	S_PRINT
	CALL	S_PRINT
	CALL	COLON_PRINT
	MOV	R0,NETWORKADD
	CALL	HEX_2X_EDIT
	CMP	R0,R1
	JE	ENDOFNETWORKADDEDIT
	MOV	NETWORKADD,R0
	CALL	NETWORKADD_WRITE
	ENDOFNETWORKADDEDIT:
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
UNITADD_EDIT:;#@#
	PUSH	WR0
	MOV	R1,UNITADD	;TEMP STORE UNITADD
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	CALL	U_PRINT
	CALL	N_PRINT
	CALL	I_PRINT
	CALL	T_PRINT
	CALL	SPACE_PRINT
	CALL	A_PRINT
	CALL	D_PRINT
	CALL	D_PRINT
	CALL	R_PRINT
	CALL	E_PRINT
	CALL	S_PRINT
	CALL	S_PRINT
	CALL	COLON_PRINT
	MOV	R0,UNITADD
	CALL	HEX_2X_EDIT
	CMP	R0,R1
	JE	ENDOFUNITADDEDIT
	MOV	UNITADD,R0
	CALL	UNITADD_WRITE
	ENDOFUNITADDEDIT:
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
SERIAL_BAUD_EDIT:;#@#
	PUSH	WR0
	CALL	TILLENTERSWISRELEASED
	MOV	R1,SERIAL_BAUD
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	CALL	S_PRINT
	CALL	E_PRINT
	CALL	R_PRINT
	CALL	I_PRINT
	CALL	A_PRINT
	CALL	L_PRINT
	CALL	SPACE_PRINT
	CALL	B_PRINT
	CALL	A_PRINT
	CALL	U_PRINT
	CALL	D_PRINT
	CALL	COLON_PRINT
	CALL	SERIAL_BAUD_PRINT
	SERIALBAUDEDITREDO:
	CALL	KBSW_UPDATE
	JB	KBSW.4,SERIALBAUDEDITINC
	JB	KBSW.6,SERIALBAUDEDITDEC
	JB	KBSW.3,SERIALBAUDEDITFINISH
	JMP	SERIALBAUDEDITREDO
	SERIALBAUDEDITINC:
	CALL	TILLUPSWISRELEASED
	MOV	R0,SERIAL_BAUD
	INC	R0,#1
	CMP	R0,#9
	JG	SERIALBAUDEDITISGT9
	MOV	SERIAL_BAUD,R0
	JMP	SERIALBAUDEDITPASSGT9
	SERIALBAUDEDITISGT9:
	MOV	R0,#0
	MOV	SERIAL_BAUD,R0
	SERIALBAUDEDITPASSGT9:
	CALL	LCD_LOCATE213
	CALL	SERIAL_BAUD_PRINT
	JMP	SERIALBAUDEDITREDO
	SERIALBAUDEDITDEC:
	CALL	TILLDOWNSWISRELEASED
	MOV	R0,SERIAL_BAUD
	DEC	R0,#1
	CMP	R0,#255D
	JE	SERIALBAUDEDITISFF
	MOV	SERIAL_BAUD,R0
	JMP	SERIALBAUDEDITPASSFF
	SERIALBAUDEDITISFF:
	MOV	R0,#9
	MOV	SERIAL_BAUD,R0
	SERIALBAUDEDITPASSFF:
	CALL	LCD_LOCATE213
	CALL	SERIAL_BAUD_PRINT
	JMP	SERIALBAUDEDITREDO
	SERIALBAUDEDITFINISH:
	CMP	R1,SERIAL_BAUD
	JE	SERIALBAUDEDITEND
	CALL	SERIAL_BAUD_WRITE
	CALL	SERIAL_BAUD_SET
	SERIALBAUDEDITEND:
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
SERIAL_BAUD_PRINT:
	PUSH	R0
	CALL	LCD_LOCATION_SAVE
	CALL	SPACE_PRINT
	CALL	SPACE_PRINT
	CALL	SPACE_PRINT
	CALL	SPACE_PRINT
	CALL	SPACE_PRINT
	CALL	LCD_LOCATION_RESTORE
	MOV	R0,SERIAL_BAUD
	CMP	R0,#0
	JE	LONGSERIALBAUDPRINTTO150
	CMP	R0,#1
	JE	LONGSERIALBAUDPRINTTO300
	CMP	R0,#2
	JE	LONGSERIALBAUDPRINTTO600
	CMP	R0,#3
	JE	LONGSERIALBAUDPRINTTO1200
	CMP	R0,#4
	JE	LONGSERIALBAUDPRINTTO2400
	CMP	R0,#5
	JE	LONGSERIALBAUDPRINTTO4800
	CMP	R0,#6
	JE	LONGSERIALBAUDPRINTTO9600
	CMP	R0,#7
	JE	LONGSERIALBAUDPRINTTO19200
	CMP	R0,#8
	JE	LONGSERIALBAUDPRINTTO38400
	CMP	R0,#9
	JE	LONGSERIALBAUDPRINTTO76800
	JMP	ENDOFSERIALBAUDPRINT
	LONGSERIALBAUDPRINTTO150:
	JMP	SERIALBAUDPRINTTO150
	LONGSERIALBAUDPRINTTO300:
	JMP	SERIALBAUDPRINTTO300
	LONGSERIALBAUDPRINTTO600:
	JMP	SERIALBAUDPRINTTO600
	LONGSERIALBAUDPRINTTO1200:
	JMP	SERIALBAUDPRINTTO1200
	LONGSERIALBAUDPRINTTO2400:
	JMP	SERIALBAUDPRINTTO2400
	LONGSERIALBAUDPRINTTO4800:
	JMP	SERIALBAUDPRINTTO4800
	LONGSERIALBAUDPRINTTO9600:
	JMP	SERIALBAUDPRINTTO9600
	LONGSERIALBAUDPRINTTO19200:
	JMP	SERIALBAUDPRINTTO19200
	LONGSERIALBAUDPRINTTO38400:
	JMP	SERIALBAUDPRINTTO38400
	LONGSERIALBAUDPRINTTO76800:
	JMP	SERIALBAUDPRINTTO76800
	SERIALBAUDPRINTTO150:
	CALL	N1_PRINT
	CALL	N5_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO300:
	CALL	N3_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO600:
	CALL	N6_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO1200:
	CALL	N1_PRINT
	CALL	N2_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO2400:
	CALL	N2_PRINT
	CALL	N4_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO4800:
	CALL	N4_PRINT
	CALL	N8_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO9600:
	CALL	N9_PRINT
	CALL	N6_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO19200:
	CALL	N1_PRINT
	CALL	N9_PRINT
	CALL	N2_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO38400:
	CALL	N3_PRINT
	CALL	N8_PRINT
	CALL	N4_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	JMP	ENDOFSERIALBAUDPRINT
	SERIALBAUDPRINTTO76800:
	CALL	N7_PRINT
	CALL	N6_PRINT
	CALL	N8_PRINT
	CALL	N0_PRINT
	CALL	N0_PRINT
	ENDOFSERIALBAUDPRINT:
	POP	R0
	RET
SERIAL_BAUDRATE_76800:
	PUSH	R0
	MOV	R0,#0xFF
	MOV	TH1,R0
	CALL	SERIAL_DBR_ENABLE
	POP	R0
	RET
SERIAL_BAUDRATE_38400:
	PUSH	R0
	MOV	R0,#0xFF
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_19200:
	PUSH	R0
	MOV	R0,#0xFE
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_9600:
	PUSH	R0
	MOV	R0,#0xFC
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_4800:
	PUSH	R0
	MOV	R0,#0xF8
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_2400:
	PUSH	R0
	MOV	R0,#0xF0
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_1200:
	PUSH	R0
	MOV	R0,#0xE0
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_600:
	PUSH	R0
	MOV	R0,#0xC0
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_300:
	PUSH	R0
	MOV	R0,#0x80
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_BAUDRATE_150:
	PUSH	R0
	MOV	R0,#0x00
	MOV	TH1,R0
	CALL	SERIAL_DBR_DISABLE
	POP	R0
	RET
SERIAL_TCLK_T1:
	CLR	T2CON.4
	RET
SERIAL_TCLK_T2:
	SETB	T2CON.4
	RET
SERIAL_RCLK_T1:
	CLR	T2CON.5
	RET
SERIAL_RCLK_T2:
	SETB	T2CON.5
	RET
SERIAL_RI_0:
	CLR	SCON.0
	RET
SERIAL_TI_0:
	CLR	SCON.1
	RET
SERIAL_PARITY_N:
	CALL	SERIAL_MODE1
	RET
SERIAL_PARITY_S:
	CLR	SCON.3	;SERIAL_TB8_0
	CALL	SERIAL_MODE3
	RET
SERIAL_PARITY_M:
	SETB	SCON.3	;SERIAL_TB8_1
	CALL	SERIAL_MODE3
	RET
SERIAL_TB8_0:
	CLR	SCON.3	;SERIAL_TB8_0
	RET
SERIAL_TB8_1:
	SETB	SCON.3
	RET
SERIAL_TX_ENABLE:
	CLR	SCON.4			;ENABLE TX
	RET
SERIAL_RX_ENABLE:
	SETB	SCON.4			;ENABLE RX
	RET
SERIAL_MULTIPROCESSOR_DISABLE:
	CLR	SCON.5	;SERIAL_MULTIPROCESSOR_DISABLE ,SERIAL_SM2_0
	RET
SERIAL_MULTIPROCESSOR_ENABLE:
	SETB	SCON.5	;SERIAL_MULTIPROCESSOR_ENABLE  ,SERIAL_SM2_1
	RET
SERIAL_FESM0_SM0:
	CLR	PCON.6
	RET
SERIAL_FESM0_FE:
	SETB	PCON.6
	RET
SERIAL_MODE0:
	CLR	PCON.6	;CALL	SERIAL_FESM0_SM0
	CLR	SCON.6
	CLR	SCON.7
	SETB	PCON.6	;CALL	SERIAL_FESM0_FE
	RET
SERIAL_MODE1:
	CLR	PCON.6	;CALL	SERIAL_FESM0_SM0
	SETB	SCON.6
	CLR	SCON.7
	SETB	PCON.6	;CALL	SERIAL_FESM0_FE
	RET
SERIAL_MODE2:
	CLR	PCON.6	;CALL	SERIAL_FESM0_SM0
	CLR	SCON.6
	SETB	SCON.7
	SETB	PCON.6	;CALL	SERIAL_FESM0_FE
	RET
SERIAL_MODE3:
	CLR	PCON.6	;CALL	SERIAL_FESM0_SM0
	SETB	SCON.6
	SETB	SCON.7
	SETB	PCON.6	;CALL	SERIAL_FESM0_FE
	RET
SERIAL_DBR_ENABLE:
	SETB	PCON.7
	RET
SERIAL_DBR_DISABLE:
	CLR	PCON.7
	RET
;-------------------------- SERIAL1 COMMUNICATION --------------------------
SERIAL1_INI:
	CALL	SERIAL1_MODE1
	RET
SERIAL1_TCLK_T1:
	CLR	BGCON.4
	RET
SERIAL1_TCLK_T2:
	SETB	BGCON.4
	RET
SERIAL1_RCLK_T1:
	CLR	BGCON.5
	RET
SERIAL1_RCLK_T2:
	SETB	BGCON.5
	RET
SERIAL1_RI_0:
	CLR	SCON1.0
	RET
SERIAL1_TI_0:
	CLR	SCON1.1
	RET
SERIAL1_TB8_0:
	CLR	SCON1.3
	RET
SERIAL1_TB8_1:
	SETB	SCON1.3
	RET
SERIAL1_TX_ENABLE:
	CLR	SCON1.4
	RET
SERIAL1_RX_ENABLE:
	SETB	SCON1.4
	RET
SERIAL1_MULTIPROCESSOR_DISABLE:
SERIAL1_SM2_0:
	CLR	SCON1.5
	RET
SERIAL1_MULTIPROCESSOR_ENABLE:
SERIAL1_SM2_1:
	SETB	SCON1.5
	RET
SERIAL1_FESM0_SM0:
	CLR	BGCON.6
	RET
SERIAL1_FESM0_FE:
	SETB	BGCON.6
	RET
SERIAL1_MODE0:
	CLR	BGCON.6	;CALL	SERIAL1_FESM0_SM0
	CLR	SCON1.6
	CLR	SCON1.7
	SETB	BGCON.6	;CALL	SERIAL1_FESM0_FE
	RET
SERIAL1_MODE1:
	CLR	BGCON.6	;CALL	SERIAL1_FESM0_SM0
	SETB	SCON1.6
	CLR	SCON1.7
	SETB	BGCON.6	;CALL	SERIAL1_FESM0_FE
	RET
SERIAL1_MODE2:
	CLR	BGCON.6	;CALL	SERIAL1_FESM0_SM0
	CLR	SCON1.6
	SETB	SCON1.7
	SETB	BGCON.6	;CALL	SERIAL1_FESM0_FE
	RET
SERIAL1_MODE3:
	CLR	BGCON.6	;CALL	SERIAL1_FESM0_SM0
	SETB	SCON1.6
	SETB	SCON1.7
	SETB	BGCON.6	;CALL	SERIAL1_FESM0_FE
	RET
SERIAL1_DBR_ENABLE:
	SETB	BGCON.7
	RET
SERIAL1_DBR_DISABLE:
	CLR	BGCON.7
	RET
;------------------------------- FLASH MEMORY  ----------------------------
FLASH_INI:
	;USE AMD AM29F010 FLASH MEMORY
	;FLASH IS 64K BYTE OR 512K BIT DIVIDED INTO 4 SECTOR SEC1~4
	;EACH PROGRAM HAS 2 SECTORS. SEC1&2 ARE CURRENT ACTIVE PROGRAM
	;SEC3&4 ARE SAVED PROGRAM WHICH CAN BE RESTORED OR EXCHANGED WITH THE CURRENT PROGRAM.
	CALL	FLASH_RESET
	RET
FLASH_TRANSFERACTIVEYES:
	;WILL SET GENERAL.1 AND WRITE THAT TO EE. GENERAL.1 WILL BE SET DURING MASTER FLASH TRANSFER TO THIS UNIT.
	PUSH	R0
	MOV	R0,GENERAL
	SETB	GENERAL.1
	CMP	R0,GENERAL
	JE	ENDOFFLASHTRANSFERACTIVEYES
	CALL	GENERAL_WRITE
	ENDOFFLASHTRANSFERACTIVEYES:
	POP	R0
	RET
FLASH_TRANSFERACTIVENO:
	;WILL CLR GENERAL.1 AND WRITE THAT TO EE. GENERAL.1 WILL BE CLR AFTER MASTER END OF FLASH TRANSFER TO THIS UNIT.
	PUSH	R0
	MOV	R0,GENERAL
	CLR	GENERAL.1
	CMP	R0,GENERAL
	JE	ENDOFFLASHTRANSFERACTIVENO
	CALL	GENERAL_WRITE
	ENDOFFLASHTRANSFERACTIVENO:
	POP	R0
	RET
FLASH_RESET:
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	R0,#0xAA
	MOV	WR2,#0x5555
	MOV	@DR0,R0
	MOV	R0,#0x55
	MOV	WR2,#0x2AAA
	MOV	@DR0,R0
	MOV	R0,#0xF0
	MOV	WR2,#0x5555
	MOV	@DR0,R0
	POP	DR0
	RET
FLASH_SEC1_ERASE:
	;1st SECTOR 16K BYTES 0~3FFF
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	WR2,#0x0000
	FLASHSEC1ERASECHECK:
	MOV	R0,@DR0
	CMP	R0,#0xFF	;LOCATION IS CLEARED
	JNE	FLASHSEC1ERASESTART
	CMP	WR2,#0x3FFF	;ENDOF SECTOR ADDRESS
	JE	PASSFLASHSEC1ERASE
	INC	WR2,#1
	JMP	FLASHSEC1ERASECHECK
	FLASHSEC1ERASESTART:
	MOV	R0,#0x00
	CALL	FLASH_SEC_ERASE
	PASSFLASHSEC1ERASE:
	POP	DR0
	call	d1_on
	RET
FLASH_SEC2_ERASE:
	;2nd SECTOR 16K BYTES 4000~7FFF
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	WR2,#0x4000
	FLASHSEC2ERASECHECK:
	MOV	R0,@DR0
	CMP	R0,#0xFF	;LOCATION IS CLEARED
	JNE	FLASHSEC2ERASESTART
	CMP	WR2,#0x7FFF	;ENDOF SECTOR ADDRESS
	JE	PASSFLASHSEC2ERASE
	INC	WR2,#1
	JMP	FLASHSEC2ERASECHECK
	FLASHSEC2ERASESTART:
	MOV	R0,#0x40
	CALL	FLASH_SEC_ERASE
	PASSFLASHSEC2ERASE:
	POP	DR0
	call	d2_on
	RET
FLASH_SEC3_ERASE:
	;3rd SECTOR 16K BYTES 8000~BFFF
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	WR2,#0x8000
	FLASHSEC3ERASECHECK:
	MOV	R0,@DR0
	CMP	R0,#0xFF	;LOCATION IS CLEARED
	JNE	FLASHSEC3ERASESTART
	CMP	WR2,#0xBFFF	;ENDOF SECTOR ADDRESS
	JE	PASSFLASHSEC3ERASE
	INC	WR2,#1
	JMP	FLASHSEC3ERASECHECK
	FLASHSEC3ERASESTART:
	MOV	R0,#0x80
	CALL	FLASH_SEC_ERASE
	PASSFLASHSEC3ERASE:
	POP	DR0
	call	d3_on
	RET
FLASH_SEC4_ERASE:
	;4th SECTOR 16K BYTES C000~FFFF
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	WR2,#0xC000
	FLASHSEC4ERASECHECK:
	MOV	R0,@DR0
	CMP	R0,#0xFF	;LOCATION IS CLEARED
	JNE	FLASHSEC4ERASESTART
	CMP	WR2,#0xFFFF	;ENDOF SECTOR ADDRESS
	JE	PASSFLASHSEC4ERASE
	INC	WR2,#1
	JMP	FLASHSEC4ERASECHECK
	FLASHSEC4ERASESTART:
	MOV	R0,#0xC0
	CALL	FLASH_SEC_ERASE
	PASSFLASHSEC4ERASE:
	POP	DR0
	call	d4_on
	RET
FLASH_SEC_ERASE:
	;R0 determines sector TO BE ERASED. 0x00=Sec1,0x04=Sec2,0x08=Sec3,0x0C=Sec4
	PUSH	R4
	PUSH	DR0
	MOV	R4,R0
	MOV	R1,#FLASH_ADD
	MOV	R0,#0xAA
	MOV	WR2,#0x5555
	MOV	@DR0,R0
	MOV	R0,#0x55
	MOV	WR2,#0x2AAA
	MOV	@DR0,R0
	MOV	R0,#0x80
	MOV	WR2,#0x5555
	MOV	@DR0,R0
	MOV	R0,#0xAA
	MOV	WR2,#0x5555
	MOV	@DR0,R0
	MOV	R0,#0x55
	MOV	WR2,#0x2AAA
	MOV	@DR0,R0
	MOV	R0,#0x30
	MOV	WR2,#0x0000 ;SECTOR ADDRESS ANY ADDRESS WITHEN SECTOR
	MOV	R2,R4
	MOV	@DR0,R0
	REFLASHSECERASE:
	CPL	P1.2			;CALL WDT
	MOV	R0,@DR0
	MOV	R4,R0
	ANL	R0,#0x80
	CMP	R0,#0x80
	JE	ENDFLASHSECERASE
	ANL	R4,#0x20
	CMP	R4,#0x20
	JNE	REFLASHSECERASE
	MOV	R0,@DR0
	ANL	R0,#0x80
	CMP	R0,#0x80
	JE	ENDFLASHSECERASE
	CALL	FLASH_FAILIER
	ENDFLASHSECERASE:
	CALL	FLASH_RESET
	POP	DR0
	POP	R4
	RET
FLASH_BYTEPROGRAM:
	;WR2=ADDRESS, R0=DATA. TO BE PROGRAMED INTO FLASH
	PUSH	R4
	PUSH	DR0
	MOV	R4,R0
	MOV	R1,#FLASH_ADD
	MOV	R0,#0xAA
	MOV	WR2,#0x5555
	MOV	@DR0,R0
	MOV	R0,#0x55
	MOV	WR2,#0x2AAA
	MOV	@DR0,R0
	MOV	R0,#0xA0
	MOV	WR2,#0x5555
	MOV	@DR0,R0
	POP	DR0
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	@DR0,R0
	REFLASHBYTEPROGRAM:
	CPL	P1.2			;CALL WDT
	MOV	R0,@DR0
	CMP	R0,R4
	JNE	REFLASHBYTEPROGRAM
	POP	DR0
	POP	R4
	RET
FLASH_SEC12SEC2:
	;COPIES SEC1 TO SEC2 
	CALL	FLASH_SEC2_ERASE
	PUSH	WR0
	MOV	R0,#0x01	;SOURCE
	MOV	R1,#0x02	;TARGET
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC12SEC3:
	CALL	FLASH_SEC3_ERASE
	PUSH	WR0
	MOV	R0,#0x01
	MOV	R1,#0x03
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC12SEC4:
	CALL	FLASH_SEC4_ERASE
	PUSH	WR0
	MOV	R0,#0x01
	MOV	R1,#0x04
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC22SEC1:
	CALL	FLASH_SEC1_ERASE
	PUSH	WR0
	MOV	R0,#0x02
	MOV	R1,#0x01
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC22SEC3:
	CALL	FLASH_SEC3_ERASE
	PUSH	WR0
	MOV	R0,#0x02
	MOV	R1,#0x03
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC22SEC4:
	CALL	FLASH_SEC4_ERASE
	PUSH	WR0
	MOV	R0,#0x02
	MOV	R1,#0x04
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC32SEC1:
	CALL	FLASH_SEC1_ERASE
	PUSH	WR0
	MOV	R0,#0x03
	MOV	R1,#0x01
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC32SEC2:
	CALL	FLASH_SEC2_ERASE
	PUSH	WR0
	MOV	R0,#0x03
	MOV	R1,#0x02
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC32SEC4:
	CALL	FLASH_SEC4_ERASE
	PUSH	WR0
	MOV	R0,#0x03
	MOV	R1,#0x04
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC42SEC1:
	CALL	FLASH_SEC1_ERASE
	PUSH	WR0
	MOV	R0,#0x04
	MOV	R1,#0x01
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC42SEC2:
	CALL	FLASH_SEC2_ERASE
	PUSH	WR0
	MOV	R0,#0x04
	MOV	R1,#0x02
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC42SEC3:
	CALL	FLASH_SEC3_ERASE
	PUSH	WR0
	MOV	R0,#0x04
	MOV	R1,#0x03
	CALL	FLASH_SEC2SEC
	POP	WR0
	RET
FLASH_SEC2SEC:
	;COPIES SEC TO ANOTHER SECTOR. R0 SOURCE, R1 TARGET. INSIDE DR0 TARGET,DR4 SOURCE
	PUSH	DR0
	PUSH	DR4
	PUSH	WR8
	MOV	R4,R0
	MOV	R0,R1
	MOV	R1,#FLASH_ADD
	MOV	R5,#FLASH_ADD
	MOV	WR2,#0x00
	MOV	WR6,#0x00
	MOV	WR8,#0x4000
	DEC	R0,#1
	DEC	R4,#1
	TARGETFLASHSEC2SECCHECK:
	CMP	R0,#0x00
	JE	SOURCEFLASHSEC2SECCHECK
	DEC	R0,#1
	ADD	WR2,#0x4000
	MOV	WR8,WR2
	ADD	WR8,#0x4000
	JMP	TARGETFLASHSEC2SECCHECK
	SOURCEFLASHSEC2SECCHECK:
	CMP	R4,#0x00
	JE	STARTFLASHSEC2SEC
	DEC	R4,#1
	ADD	WR6,#0x4000
	JMP	SOURCEFLASHSEC2SECCHECK
	STARTFLASHSEC2SEC:
	MOV	R0,@DR4
	CALL	FLASH_BYTEPROGRAM
	CPL	P1.2			;CALL WDT
	INC	WR2,#1
	INC	WR6,#1
	CMP	WR8,WR2
	JE	ENDFLASHSEC2SEC
	JMP	STARTFLASHSEC2SEC
	ENDFLASHSEC2SEC:
	POP	WR8
	POP	DR4
	POP	DR0
	RET
FLASH_FAILIER:
	CALL	LCD_LOCATE21
	CALL	F_PRINT
	CALL	L_PRINT
	CALL	A_PRINT
	CALL	S_PRINT
	CALL	H_PRINT
	CALL	SPACE_PRINT
	CALL	D_PRINT
	CALL	E_PRINT
	CALL	V_PRINT
	CALL	I_PRINT
	CALL	C_PRINT
	CALL	E_PRINT
	CALL	SPACE_PRINT
	CALL	F_PRINT
	CALL	A_PRINT
	CALL	I_PRINT
	CALL	L_PRINT
	CALL	E_PRINT
	CALL	D_PRINT
	RET
FLASH_CONTENT_TEST:
	;TEST SUB. GOES THROU MEMORY CONTENT.
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	WR2,#0x0000
	REFLASHCONTENTTEST:
	CPL	P1.2			;CALL WDT
      CALL  KBSW_UPDATE
	JB    KBSW.4,INCFLASHCONTENTTEST
	JB    KBSW.6,DECFLASHCONTENTTEST
	JB    KBSW.5,SLOWINCFLASHCONTENTTEST
	JB    KBSW.7,SLOWDECFLASHCONTENTTEST
	JMP	REFLASHCONTENTTEST
	INCFLASHCONTENTTEST:
	INC	WR2,#1
	CALL	FLASH_CONTENT_DISPLAY
	JMP	REFLASHCONTENTTEST
	DECFLASHCONTENTTEST:
	DEC	WR2,#1
	CALL	FLASH_CONTENT_DISPLAY
	JMP	REFLASHCONTENTTEST
	SLOWINCFLASHCONTENTTEST:
	INC	WR2,#1
	CALL	FLASH_CONTENT_DISPLAY
	CALL	SLEEP300
	JMP	REFLASHCONTENTTEST
	SLOWDECFLASHCONTENTTEST:
	DEC	WR2,#1
	CALL	FLASH_CONTENT_DISPLAY
	CALL	SLEEP300
	JMP	REFLASHCONTENTTEST
	POP	DR0
	RET
FLASH_CONTENT_DISPLAY:
	;TEST SUB. WR2 HAS ADDRESS
	PUSH	DR0
	MOV	R1,#FLASH_ADD
	MOV	R0,@DR0
	CALL	LCD_LOCATE21
	CALL	R2BCD2LCD
	CALL	R3BCD2LCD
	CALL	SPACE_PRINT
	CALL	R0BCD2LCD
	POP	DR0
	RET
FLASH_SEC_ERASE_TEST:
	CALL	S_PRINT
	CALL	N1_PRINT
	CALL	FLASH_SEC1_ERASE
	CALL	N2_PRINT
	CALL	FLASH_SEC2_ERASE
	CALL	N3_PRINT
	CALL	FLASH_SEC3_ERASE
	CALL	N4_PRINT
	CALL	FLASH_SEC4_ERASE
	CALL	O_PRINT
	CALL	K_PRINT
	RET
FLASH_BYTEPROGRAM_TEST:
	;SUB. WR2=ADDRESS, R0=DATA. TO BE PROGRAMED INTO FLASH
	PUSH	DR0
	MOV	WR2,#0x0000
	MOV	R0,#0x00
	REFLASHBYTEPROGRAMTEST:
	CALL	FLASH_BYTEPROGRAM
	INC	R0,#1
	INC	WR2,#1
	CMP	WR2,#0x4000	;LAST ADDRESS +1
	JNE	REFLASHBYTEPROGRAMTEST
	CALL	D_PRINT
	CALL	O_PRINT
	CALL	N_PRINT
	CALL	E_PRINT
	CALL	BEEP
	POP	DR0
	RET
;----------------------------- SOFTWARE COUNTERS --------------------------
;SCNT1~10 = 32BIT COUNTERS i.e 4 BYTES
SCNT_INI:
	PUSH	DR0
	MOV	DR0,#00
	MOV	SCNT1,DR0
	MOV	SCNT2,DR0
	MOV	SCNT3,DR0
	MOV	SCNT4,DR0
	MOV	SCNT5,DR0
	MOV	SCNT6,DR0
	MOV	SCNT7,DR0
	MOV	SCNT8,DR0
	MOV	SCNT9,DR0
	MOV	SCNT10,DR0
	POP	DR0
	RET
SCNT1_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT1
	ADD	DR0,#1
	MOV	SCNT1,DR0
	POP	DR0
	RET
SCNT2_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT2
	ADD	DR0,#1
	MOV	SCNT2,DR0
	POP	DR0
	RET
SCNT3_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT3
	ADD	DR0,#1
	MOV	SCNT3,DR0
	POP	DR0
	RET
SCNT4_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT4
	ADD	DR0,#1
	MOV	SCNT4,DR0
	POP	DR0
	RET
SCNT5_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT5
	ADD	DR0,#1
	MOV	SCNT5,DR0
	POP	DR0
	RET
SCNT6_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT6
	ADD	DR0,#1
	MOV	SCNT6,DR0
	POP	DR0
	RET
SCNT7_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT7
	ADD	DR0,#1
	MOV	SCNT7,DR0
	POP	DR0
	RET
SCNT8_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT8
	ADD	DR0,#1
	MOV	SCNT8,DR0
	POP	DR0
	RET
SCNT9_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT9
	ADD	DR0,#1
	MOV	SCNT9,DR0
	POP	DR0
	RET
SCNT10_INC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT10
	ADD	DR0,#1
	MOV	SCNT10,DR0
	POP	DR0
	RET
SCNT1_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT1
	DEC	DR0,#1
	MOV	SCNT1,DR0
	POP	DR0
	RET
SCNT2_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT2
	DEC	DR0,#1
	MOV	SCNT2,DR0
	POP	DR0
	RET
SCNT3_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT3
	DEC	DR0,#1
	MOV	SCNT3,DR0
	POP	DR0
	RET
SCNT4_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT4
	DEC	DR0,#1
	MOV	SCNT4,DR0
	POP	DR0
	RET
SCNT5_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT5
	DEC	DR0,#1
	MOV	SCNT5,DR0
	POP	DR0
	RET
SCNT6_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT6
	DEC	DR0,#1
	MOV	SCNT6,DR0
	POP	DR0
	RET
SCNT7_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT7
	DEC	DR0,#1
	MOV	SCNT7,DR0
	POP	DR0
	RET
SCNT8_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT8
	DEC	DR0,#1
	MOV	SCNT8,DR0
	POP	DR0
	RET
SCNT9_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT9
	DEC	DR0,#1
	MOV	SCNT9,DR0
	POP	DR0
	RET
SCNT10_DEC:;#@#
	PUSH	DR0
	MOV	DR0,SCNT10
	DEC	DR0,#1
	MOV	SCNT10,DR0
	POP	DR0
	RET
SCNT1_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT1,DR0
	POP	DR0
	RET
SCNT2_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT2,DR0
	POP	DR0
	RET
SCNT3_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT3,DR0
	POP	DR0
	RET
SCNT4_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT4,DR0
	POP	DR0
	RET
SCNT5_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT5,DR0
	POP	DR0
	RET
SCNT6_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT6,DR0
	POP	DR0
	RET
SCNT7_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT7,DR0
	POP	DR0
	RET
SCNT8_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT8,DR0
	POP	DR0
	RET
SCNT9_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT9,DR0
	POP	DR0
	RET
SCNT10_CLR:;#@#
	PUSH	DR0
	MOV	DR0,#0x00
	MOV	SCNT10,DR0
	POP	DR0
	RET
;------------------------------ SOFTWARE TIMERS ---------------------------
;ST1~48 = 16BIT TIMER. ST1~8 = 65.535 S ST9~ = 655.35 S  65535 S 
ST_INI:
	MOV	WR0,#00
	MOV	STX1,R0
	MOV	STX10,R0
	MOV	STX100,WR0
	MOV	STX1000,WR0
	MOV	STGALPHA,R0
	MOV	STG1,R0
	MOV	STG2,R0
	MOV	STG3,R0
	MOV	STG4,R0
	MOV	STG5,R0
	MOV	STG6,R0
	MOV	STA,WR0
	MOV	STB,WR0
	MOV	STC,WR0
	MOV	STD,WR0
	MOV	STE,WR0
	MOV	STF,WR0
	MOV	STG,WR0
	MOV	STH,WR0
	MOV	ST1,WR0
	MOV	ST2,WR0
	MOV	ST3,WR0
	MOV	ST4,WR0
	MOV	ST5,WR0
	MOV	ST6,WR0
	MOV	ST7,WR0
	MOV	ST8,WR0
	MOV	ST9,WR0
	MOV	ST10,WR0
	MOV	ST11,WR0
	MOV	ST12,WR0
	MOV	ST13,WR0
	MOV	ST14,WR0
	MOV	ST15,WR0
	MOV	ST16,WR0
	MOV	ST17,WR0
	MOV	ST18,WR0
	MOV	ST19,WR0
	MOV	ST20,WR0
	MOV	ST21,WR0
	MOV	ST22,WR0
	MOV	ST23,WR0
	MOV	ST24,WR0
	MOV	ST25,WR0
	MOV	ST26,WR0
	MOV	ST27,WR0
	MOV	ST28,WR0
	MOV	ST29,WR0
	MOV	ST30,WR0
	MOV	ST31,WR0
	MOV	ST32,WR0
	MOV	ST33,WR0
	MOV	ST34,WR0
	MOV	ST35,WR0
	MOV	ST36,WR0
	MOV	ST37,WR0
	MOV	ST38,WR0
	MOV	ST39,WR0
	MOV	ST40,WR0
	MOV	ST41,WR0
	MOV	ST42,WR0
	MOV	ST43,WR0
	MOV	ST44,WR0
	MOV	ST45,WR0
	MOV	ST46,WR0
	MOV	ST47,WR0
	MOV	ST48,WR0
	RET
ST_TEST:
	PUSH	WR0
	MOV	WR0,#0xFFFF
	MOV	STC,WR0
	MOV	STD,WR0
	MOV	STE,WR0
	MOV	STF,WR0
	MOV	STG,WR0
	MOV	ST1,WR0
	MOV	ST2,WR0
	MOV	ST3,WR0
	MOV	ST4,WR0
	MOV	ST5,WR0
	MOV	ST6,WR0
	MOV	ST7,WR0
	MOV	ST8,WR0
	MOV	ST9,WR0
	MOV	ST10,WR0
	MOV	ST11,WR0
	MOV	ST12,WR0
	MOV	ST13,WR0
	MOV	ST14,WR0
	MOV	ST15,WR0
	MOV	ST16,WR0
	MOV	ST17,WR0
	MOV	ST18,WR0
	MOV	ST19,WR0
	MOV	ST20,WR0
	MOV	ST21,WR0
	MOV	ST22,WR0
	MOV	ST23,WR0
	MOV	ST24,WR0
	MOV	ST25,WR0
	MOV	ST26,WR0
	MOV	ST27,WR0
	MOV	ST28,WR0
	MOV	ST29,WR0
	MOV	ST30,WR0
	MOV	ST31,WR0
	MOV	ST32,WR0
	MOV	ST33,WR0
	MOV	ST34,WR0
	MOV	ST35,WR0
	MOV	ST36,WR0
	MOV	ST37,WR0
	MOV	ST38,WR0
	MOV	ST39,WR0
	MOV	ST40,WR0
	MOV	ST41,WR0
	MOV	ST42,WR0
	MOV	ST43,WR0
	MOV	ST44,WR0
	MOV	ST45,WR0
	MOV	ST46,WR0
	MOV	ST47,WR0
	MOV	ST48,WR0
	MOV	R0,#0xFF
	MOV	STG1,R0
	MOV	STG2,R0
	MOV	STG3,R0
	MOV	STG4,R0
	MOV	STG5,R0
	MOV	STG6,R0
	MOV	R0,#0x7C
	MOV	STGALPHA,R0
	POP	WR0
	RET
STA_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STA,WR0
	POP	WR0
	RET
STB_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STB,WR0
	POP	WR0
	RET
STC_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STC,WR0
	POP	WR0
	RET
STD_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STD,WR0
	POP	WR0
	RET
STE_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STE,WR0
	POP	WR0
	RET
STF_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STF,WR0
	POP	WR0
	RET
STG_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STG,WR0
	POP	WR0
	RET
STH_CLR:
	PUSH	WR0
	MOV	WR0,#0
	MOV	STH,WR0
	POP	WR0
	RET
STA_RUN:
	SETB	STGALPHA.0
	RET
STB_RUN:
	SETB	STGALPHA.1
	RET
STC_RUN:
	SETB	STGALPHA.2
	RET
STD_RUN:
	SETB	STGALPHA.3
	RET
STE_RUN:
	SETB	STGALPHA.4
	RET
STF_RUN:
	SETB	STGALPHA.5
	RET
STG_RUN:
	SETB	STGALPHA.6
	RET
STH_RUN:
	SETB	STGALPHA.7
	RET
STA_STOP:
	CLR	STGALPHA.0
	RET
STB_STOP:
	CLR	STGALPHA.1
	RET
STC_STOP:
	CLR	STGALPHA.2
	RET
STD_STOP:
	CLR	STGALPHA.3
	RET
STE_STOP:
	CLR	STGALPHA.4
	RET
STF_STOP:
	CLR	STGALPHA.5
	RET
STG_STOP:
	CLR	STGALPHA.6
	RET
STH_STOP:
	CLR	STGALPHA.7
	RET
ST1_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST1,WR0
	POP	WR0
	RET
ST2_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST2,WR0
	POP	WR0
	RET
ST3_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST3,WR0
	POP	WR0
	RET
ST4_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST4,WR0
	POP	WR0
	RET
ST5_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST5,WR0
	POP	WR0
	RET
ST6_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST6,WR0
	POP	WR0
	RET
ST7_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST7,WR0
	POP	WR0
	RET
ST8_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST8,WR0
	POP	WR0
	RET
ST9_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST9,WR0
	POP	WR0
	RET
ST10_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST10,WR0
	POP	WR0
	RET
ST11_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST11,WR0
	POP	WR0
	RET
ST12_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST12,WR0
	POP	WR0
	RET
ST13_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST13,WR0
	POP	WR0
	RET
ST14_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST14,WR0
	POP	WR0
	RET
ST15_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST15,WR0
	POP	WR0
	RET
ST16_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST16,WR0
	POP	WR0
	RET
ST17_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST17,WR0
	POP	WR0
	RET
ST18_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST18,WR0
	POP	WR0
	RET
ST19_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST19,WR0
	POP	WR0
	RET
ST20_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST20,WR0
	POP	WR0
	RET
ST21_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST21,WR0
	POP	WR0
	RET
ST22_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST22,WR0
	POP	WR0
	RET
ST23_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST23,WR0
	POP	WR0
	RET
ST24_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST24,WR0
	POP	WR0
	RET
ST25_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST25,WR0
	POP	WR0
	RET
ST26_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST26,WR0
	POP	WR0
	RET
ST27_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST27,WR0
	POP	WR0
	RET
ST28_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST28,WR0
	POP	WR0
	RET
ST29_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST29,WR0
	POP	WR0
	RET
ST30_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST30,WR0
	POP	WR0
	RET
ST31_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST31,WR0
	POP	WR0
	RET
ST32_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST32,WR0
	POP	WR0
	RET
ST33_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST33,WR0
	POP	WR0
	RET
ST34_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST34,WR0
	POP	WR0
	RET
ST35_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST35,WR0
	POP	WR0
	RET
ST36_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST36,WR0
	POP	WR0
	RET
ST37_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST37,WR0
	POP	WR0
	RET
ST38_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST38,WR0
	POP	WR0
	RET
ST39_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST39,WR0
	POP	WR0
	RET
ST40_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST40,WR0
	POP	WR0
	RET
ST41_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST41,WR0
	POP	WR0
	RET
ST42_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST42,WR0
	POP	WR0
	RET
ST43_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST43,WR0
	POP	WR0
	RET
ST44_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST44,WR0
	POP	WR0
	RET
ST45_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST45,WR0
	POP	WR0
	RET
ST46_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST46,WR0
	POP	WR0
	RET
ST47_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST47,WR0
	POP	WR0
	RET
ST48_CLR:;#@#
	PUSH	WR0
	MOV	WR0,#0
	MOV	ST48,WR0
	POP	WR0
	RET
ST1_RUN:;#@#
	SETB	STG1.0
	RET
ST2_RUN:;#@#
	SETB	STG1.1
	RET
ST3_RUN:;#@#
	SETB	STG1.2
	RET
ST4_RUN:;#@#
	SETB	STG1.3
	RET
ST5_RUN:;#@#
	SETB	STG1.4
	RET
ST6_RUN:;#@#
	SETB	STG1.5
	RET
ST7_RUN:;#@#
	SETB	STG1.6
	RET
ST8_RUN:;#@#
	SETB	STG1.7
	RET
ST9_RUN:;#@#
	SETB	STG2.0
	RET
ST10_RUN:;#@#
	SETB	STG2.1
	RET
ST11_RUN:;#@#
	SETB	STG2.2
	RET
ST12_RUN:;#@#
	SETB	STG2.3
	RET
ST13_RUN:;#@#
	SETB	STG2.4
	RET
ST14_RUN:;#@#
	SETB	STG2.5
	RET
ST15_RUN:;#@#
	SETB	STG2.6
	RET
ST16_RUN:;#@#
	SETB	STG2.7
	RET
ST17_RUN:;#@#
	SETB	STG3.0
	RET
ST18_RUN:;#@#
	SETB	STG3.1
	RET
ST19_RUN:;#@#
	SETB	STG3.2
	RET
ST20_RUN:;#@#
	SETB	STG3.3
	RET
ST21_RUN:;#@#
	SETB	STG3.4
	RET
ST22_RUN:;#@#
	SETB	STG3.5
	RET
ST23_RUN:;#@#
	SETB	STG3.6
	RET
ST24_RUN:;#@#
	SETB	STG3.7
	RET
ST25_RUN:;#@#
	SETB	STG4.0
	RET
ST26_RUN:;#@#
	SETB	STG4.1
	RET
ST27_RUN:;#@#
	SETB	STG4.2
	RET
ST28_RUN:;#@#
	SETB	STG4.3
	RET
ST29_RUN:;#@#
	SETB	STG4.4
	RET
ST30_RUN:;#@#
	SETB	STG4.5
	RET
ST31_RUN:;#@#
	SETB	STG4.6
	RET
ST32_RUN:;#@#
	SETB	STG4.7
	RET
ST33_RUN:;#@#
	SETB	STG5.0
	RET
ST34_RUN:;#@#
	SETB	STG5.1
	RET
ST35_RUN:;#@#
	SETB	STG5.2
	RET
ST36_RUN:;#@#
	SETB	STG5.3
	RET
ST37_RUN:;#@#
	SETB	STG5.4
	RET
ST38_RUN:;#@#
	SETB	STG5.5
	RET
ST39_RUN:;#@#
	SETB	STG5.6
	RET
ST40_RUN:;#@#
	SETB	STG5.7
	RET
ST41_RUN:;#@#
	SETB	STG6.0
	RET
ST42_RUN:;#@#
	SETB	STG6.1
	RET
ST43_RUN:;#@#
	SETB	STG6.2
	RET
ST44_RUN:;#@#
	SETB	STG6.3
	RET
ST45_RUN:;#@#
	SETB	STG6.4
	RET
ST46_RUN:;#@#
	SETB	STG6.5
	RET
ST47_RUN:;#@#
	SETB	STG6.6
	RET
ST48_RUN:;#@#
	SETB	STG6.7
	RET
ST1_STOP:;#@#
	CLR	STG1.0
	RET
ST2_STOP:;#@#
	CLR	STG1.1
	RET
ST3_STOP:;#@#
	CLR	STG1.2
	RET
ST4_STOP:;#@#
	CLR	STG1.3
	RET
ST5_STOP:;#@#
	CLR	STG1.4
	RET
ST6_STOP:;#@#
	CLR	STG1.5
	RET
ST7_STOP:;#@#
	CLR	STG1.6
	RET
ST8_STOP:;#@#
	CLR	STG1.7
	RET
ST9_STOP:;#@#
	CLR	STG2.0
	RET
ST10_STOP:;#@#
	CLR	STG2.1
	RET
ST11_STOP:;#@#
	CLR	STG2.2
	RET
ST12_STOP:;#@#
	CLR	STG2.3
	RET
ST13_STOP:;#@#
	CLR	STG2.4
	RET
ST14_STOP:;#@#
	CLR	STG2.5
	RET
ST15_STOP:;#@#
	CLR	STG2.6
	RET
ST16_STOP:;#@#
	CLR	STG2.7
	RET
ST17_STOP:;#@#
	CLR	STG3.0
	RET
ST18_STOP:;#@#
	CLR	STG3.1
	RET
ST19_STOP:;#@#
	CLR	STG3.2
	RET
ST20_STOP:;#@#
	CLR	STG3.3
	RET
ST21_STOP:;#@#
	CLR	STG3.4
	RET
ST22_STOP:;#@#
	CLR	STG3.5
	RET
ST23_STOP:;#@#
	CLR	STG3.6
	RET
ST24_STOP:;#@#
	CLR	STG3.7
	RET
ST25_STOP:;#@#
	CLR	STG4.0
	RET
ST26_STOP:;#@#
	CLR	STG4.1
	RET
ST27_STOP:;#@#
	CLR	STG4.2
	RET
ST28_STOP:;#@#
	CLR	STG4.3
	RET
ST29_STOP:;#@#
	CLR	STG4.4
	RET
ST30_STOP:;#@#
	CLR	STG4.5
	RET
ST31_STOP:;#@#
	CLR	STG4.6
	RET
ST32_STOP:;#@#
	CLR	STG4.7
	RET
ST33_STOP:;#@#
	CLR	STG5.0
	RET
ST34_STOP:;#@#
	CLR	STG5.1
	RET
ST35_STOP:;#@#
	CLR	STG5.2
	RET
ST36_STOP:;#@#
	CLR	STG5.3
	RET
ST37_STOP:;#@#
	CLR	STG5.4
	RET
ST38_STOP:;#@#
	CLR	STG5.5
	RET
ST39_STOP:;#@#
	CLR	STG5.6
	RET
ST40_STOP:;#@#
	CLR	STG5.7
	RET
ST41_STOP:;#@#
	CLR	STG6.0
	RET
ST42_STOP:;#@#
	CLR	STG6.1
	RET
ST43_STOP:;#@#
	CLR	STG6.2
	RET
ST44_STOP:;#@#
	CLR	STG6.3
	RET
ST45_STOP:;#@#
	CLR	STG6.4
	RET
ST46_STOP:;#@#
	CLR	STG6.5
	RET
ST47_STOP:;#@#
	CLR	STG6.6
	RET
ST48_STOP:;#@#
	CLR	STG6.7
	RET
;------------------------------ INTURUPPTS IER ----------------------------
INTERRUPT_INI:
	CALL	GLOBALI_ENABLE
	CALL	EX1I_EDGETRIGGERED
	CALL	EX0I_PRIORITY0
	CALL	TIMER0I_PRIORITY3
	CALL	SERIALI_PRIORITY2	;CHANGED OCT 27 FROM 2 TO 3
	CALL	EX1I_PRIORITY0
	CALL	TIMER1I_PRIORITY0
	CALL	TIMER2I_PRIORITY0
	CALL	PCAI_PRIORITY0
	CALL	EX0I_DISABLE
	CALL	TIMER0I_ENABLE
	CALL	EX1I_ENABLE
	CALL	TIMER1I_DISABLE
	CALL	SERIALI_ENABLE
	CALL	TIMER2I_DISABLE
	CALL	PCAI_DISABLE
	RET
EX0I_ENABLE:
	SETB	IER.0
	RET
EX0I_DISABLE:
	CLR	IER.0
	RET
TIMER0I_ENABLE:
	SETB	IER.1
	RET
TIMER0I_DISABLE:
	CLR	IER.1
	RET
EX1I_ENABLE:
	SETB	IER.2
	RET
EX1I_DISABLE:
	CLR	IER.2
	RET
TIMER1I_ENABLE:
	SETB	IER.3
	RET
TIMER1I_DISABLE:
	CLR	IER.3
	RET
SERIALI_ENABLE:
	SETB	IER.4
	RET
SERIALI_DISABLE:
	CLR	IER.4
	RET
SERIAL1I_ENABLE:
	SETB	IER1.0
	RET
SERIAL1I_DISABLE:
	CLR	IER1.0
	RET
TIMER2I_ENABLE:
	SETB	IER.5
	RET
TIMER2I_DISABLE:
	CLR	IER.5
	RET
PCAI_ENABLE:
	SETB	IER.6
	RET
PCAI_DISABLE:
	CLR	IER.6
	RET
GLOBALI_ENABLE:
	SETB	IER.7
	RET
GLOBALI_DISABLE:
	CLR	IER.7
	RET
PCAI_PRIORITY0:
	CLR	IPL0.6
	CLR	IPH0.6
	RET
PCAI_PRIORITY1:
	SETB	IPL0.6
	CLR	IPH0.6
	RET
PCAI_PRIORITY2:
	CLR	IPL0.6
	SETB	IPH0.6
	RET
PCAI_PRIORITY3:
	SETB	IPL0.6
	SETB	IPH0.6
	RET
TIMER2I_PRIORITY0:
	CLR	IPL0.5
	CLR	IPH0.5
	RET
TIMER2I_PRIORITY1:
	SETB	IPL0.5
	CLR	IPH0.5
	RET
TIMER2I_PRIORITY2:
	CLR	IPL0.5
	SETB	IPH0.5
	RET
TIMER2I_PRIORITY3:
	SETB	IPL0.5
	SETB	IPH0.5
	RET
SERIALI_PRIORITY0:
	CLR	IPL0.4
	CLR	IPH0.4
	RET
SERIALI_PRIORITY1:
	SETB	IPL0.4
	CLR	IPH0.4
	RET
SERIALI_PRIORITY2:
	CLR	IPL0.4
	SETB	IPH0.4
	RET
SERIALI_PRIORITY3:
	SETB	IPL0.4
	SETB	IPH0.4
	RET
SERIAL1I_PRIORITY0:
	CLR	IPL1.0
	CLR	IPH1.0
	RET
SERIAL1I_PRIORITY1:
	SETB	IPL1.0
	CLR	IPH1.0
	RET
SERIAL1I_PRIORITY2:
	CLR	IPL1.0
	SETB	IPH1.0
	RET
SERIAL1I_PRIORITY3:
	SETB	IPL1.0
	SETB	IPH1.0
	RET
TIMER1I_PRIORITY0:
	CLR	IPL0.3
	CLR	IPH0.3
	RET
TIMER1I_PRIORITY1:
	SETB	IPL0.3
	CLR	IPH0.3
	RET
TIMER1I_PRIORITY2:
	CLR	IPL0.3
	SETB	IPH0.3
	RET
TIMER1I_PRIORITY3:
	SETB	IPL0.3
	SETB	IPH0.3
	RET
EX1I_PRIORITY0:
	CLR	IPL0.2
	CLR	IPH0.2
	RET
EX1I_PRIORITY1:
	SETB	IPL0.2
	CLR	IPH0.2
	RET
EX1I_PRIORITY2:
	CLR	IPL0.2
	SETB	IPH0.2
	RET
EX1I_PRIORITY3:
	SETB	IPL0.2
	SETB	IPH0.2
	RET
TIMER0I_PRIORITY0:
	CLR	IPL0.1
	CLR	IPH0.1
	RET
TIMER0I_PRIORITY1:
	SETB	IPL0.1
	CLR	IPH0.1
	RET
TIMER0I_PRIORITY2:
	CLR	IPL0.1
	SETB	IPH0.1
	RET
TIMER0I_PRIORITY3:
	SETB	IPL0.1
	SETB	IPH0.1
	RET
EX0I_PRIORITY0:
	CLR	IPL0.0
	CLR	IPH0.0
	RET
EX0I_PRIORITY1:
	SETB	IPL0.0
	CLR	IPH0.0
	RET
EX0I_PRIORITY2:
	CLR	IPL0.0
	SETB	IPH0.0
	RET
EX0I_PRIORITY3:
	SETB	IPL0.0
	SETB	IPH0.0
	RET
EX0I_LEVELTRIGGERED:	;MUST CLEAR INTURUPPT FLAG MANUALLY
	CLR	TCON.0
	RET
EX0I_EDGETRIGGERED:	;CLEARS INTURUPPT FLAG AUTOMATICALLY
	SETB	TCON.0
	RET
EX1I_LEVELTRIGGERED:	;MUST CLEAR INTURUPPT FLAG MANUALLY
	CLR	TCON.2
	RET
EX1I_EDGETRIGGERED:	;CLEARS INTURUPPT FLAG AUTOMATICALLY
	SETB	TCON.2
	RET
EX0I_CLR:
	CLR	TCON.1
	RET
EX1I_CLR:
	CLR	TCON.3
	RET
;------------------------ ASSIGNING MACRO SWITCHES ROUTINE -------------------
MACRO_INI:
	;LOAD PRVS WITH THE INVERSE OF INPUTS SO THAT IMMIDIATE ACTION CAN BE TAKEN BY MACROS
	PUSH	R0
	CALL	X_UPDATE	;  37MS " AT 14.7456MHZ
	MOV	R0,X_GRP1
	XRL	R0,#0xFF
	MOV	X_GRP1_PRVS,R0
	MOV	R0,X_GRP2
	XRL	R0,#0xFF
	MOV	X_GRP2_PRVS,R0
	MOV	R0,X_GRP3
	XRL	R0,#0xFF
	MOV	X_GRP3_PRVS,R0
      MOV   R0,KBSW
	XRL	R0,#0xF8
      MOV   KBSW_PRVS,R0
	MOV	R0,DIPSW
	XRL	R0,#0xFF
	MOV	DIPSW_PRVS,R0
	POP	R0
	RET
MACROS_DO:
	CALL	X1_MACRO
	CALL	X2_MACRO
	CALL	X3_MACRO
	CALL	X4_MACRO
	CALL	X5_MACRO
	CALL	X6_MACRO
	CALL	X7_MACRO
	CALL	X8_MACRO
	CALL	X9_MACRO
	CALL	X10_MACRO
	CALL	X11_MACRO
	CALL	X12_MACRO
	CALL	X13_MACRO
	CALL	X14_MACRO
	CALL	X15_MACRO
	CALL	X16_MACRO
	CALL	X17_MACRO
	CALL	X18_MACRO
	CALL	X19_MACRO
	CALL	X20_MACRO
	CALL	X21_MACRO
	CALL	X22_MACRO
	CALL	X23_MACRO
	CALL	X24_MACRO
	CALL	DIPSW1_MACRO
	CALL	DIPSW2_MACRO
	CALL	DIPSW3_MACRO
	CALL	DIPSW4_MACRO
	CALL	DIPSW5_MACRO
	CALL	DIPSW6_MACRO
	CALL	DIPSW7_MACRO
	CALL	DIPSW8_MACRO
	CALL	UPSW_MACRO
	CALL	DOWNSW_MACRO
	CALL	RIGHTSW_MACRO
	CALL	LEFTSW_MACRO
	CALL	ENTERSW_MACRO
	RET
UPSW_MACRO:
	PUSH	R0
      MOV   R0,KBSW
	ANL	R0,#00010000B
	JNE	PASSKBRDUPDO
      JNB   KBSW_PRVS.4,ENDKBRDUPDO
	;-----------------		SWITCH IS NOT PRESSED
	
	;-----------------
	JMP	ENDKBRDUPDO
	PASSKBRDUPDO:
	JB    KBSW_PRVS.4,ENDKBRDUPDO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
;	CALL	DEMO1
;	CALL	SERIAL_RECEIVE_SHOW
;	MOV	R0,#0
	CALL	ADC2_DISPLAY
	;-----------------
	ENDKBRDUPDO:
	POP	R0
	RET
DOWNSW_MACRO:
	PUSH	R0
      MOV   R0,KBSW
	ANL	R0,#01000000B
	JNE	PASSKBRDDOWNDO
      JNB   KBSW_PRVS.6,ENDKBRDDOWNDO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDKBRDDOWNDO
	PASSKBRDDOWNDO:
	JB    KBSW_PRVS.6,ENDKBRDDOWNDO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	;CALL	DEMO2
;	CALL	SERIAL_RECEIVE_ERASE
	MOV	R0,#0xAA
	MOV	SBUF,R0
	;-----------------
	ENDKBRDDOWNDO:
	POP	R0
	RET
RIGHTSW_MACRO:
	PUSH	R0
      MOV   R0,KBSW
	ANL	R0,#00100000B
	JNE	PASSKBRDRIGHTDO
      JNB   KBSW_PRVS.5,ENDKBRDRIGHTDO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDKBRDRIGHTDO
	PASSKBRDRIGHTDO:
	JB    KBSW_PRVS.5,ENDKBRDRIGHTDO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
;	CALL	PLAY_SONG01
;	CALL	SLEEP3000
;	CALL	PLAY_PHONERING
;	CALL	SLEEP300
;	CALL	PLAY_PHONERING
;	CALL	SLEEP3000
;	CALL	PLAY_PHONERING
;	CALL	SLEEP300
;	CALL	PLAY_PHONERING
;	CALL	SLEEP3000
;	CALL	PLAY_PHONERING
;	CALL	SLEEP300
;	CALL	PLAY_PHONERING
;	CALL	SERIAL_REPLYTEST
;	CALL	DEMO1
	CALL	FLASH_SEC1_ERASE
	CALL	FLASH_SEC2_ERASE
	CALL	FLASH_SEC3_ERASE
	CALL	FLASH_SEC4_ERASE
	;-----------------
	ENDKBRDRIGHTDO:
	POP	R0
	RET
LEFTSW_MACRO:
	PUSH	R0
      MOV   R0,KBSW
	ANL	R0,#10000000B
	JNE	PASSKBRDLEFTDO
      JNB   KBSW_PRVS.7,ENDKBRDLEFTDO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDKBRDLEFTDO
	PASSKBRDLEFTDO:
	JB    KBSW_PRVS.7,ENDKBRDLEFTDO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	;CALL	DEMO2
	CALL	SERIAL_RECEIVE_SHOW
	;-----------------
	ENDKBRDLEFTDO:
	POP	R0
	RET
ENTERSW_MACRO:
	PUSH	R0
      MOV   R0,KBSW
	ANL	R0,#00001000B
	JNE	PASSKBRDENTERDO
      JNB   KBSW_PRVS.3,ENDKBRDENTERDO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDKBRDENTERDO
	PASSKBRDENTERDO:
	JB    KBSW_PRVS.3,ENDKBRDENTERDO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	RTC_TIME12TIME24_EDIT
	CALL	SERIAL_BAUD_EDIT
	CALL	UNITADD_EDIT
;	CALL	NETWORKADD_EDIT
	CALL	EX1I_DISABLE
	CALL	RTC_DATE_EDIT
	CALL	RTC_TIME_EDIT
	CALL	EX1I_ENABLE
	CALL	ADC_RANGEEDIT
	;-----------------
	ENDKBRDENTERDO:
	POP	R0
	RET
DIPSW1_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#00000001B
	JNE	PASSDIPSW1DO
	JNB	DIPSW_PRVS.0,ENDDIPSW1DO
	;-----------------		SWITCH IS NOT PRESSED
	CALL	LCD_LED_ON
	;-----------------
	JMP	ENDDIPSW1DO
	PASSDIPSW1DO:
	JB	DIPSW_PRVS.0,ENDDIPSW1DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	LCD_LED_OFF
	;-----------------
	ENDDIPSW1DO:
	POP	R0
	RET
DIPSW2_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#00000010B
	JNE	PASSDIPSW2DO
	JNB	DIPSW_PRVS.1,ENDDIPSW2DO
	;-----------------		SWITCH IS NOT PRESSED
	CALL	DAC1_LEVEL_LOW
	CALL	DAC2_LEVEL_LOW
	CALL	DAC3_LEVEL_LOW
	CALL	DAC4_LEVEL_LOW
	;-----------------
	JMP	ENDDIPSW2DO
	PASSDIPSW2DO:
	JB	DIPSW_PRVS.1,ENDDIPSW2DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	DAC1_LEVEL_HIGH
	CALL	DAC2_LEVEL_HIGH
	CALL	DAC3_LEVEL_HIGH
	CALL	DAC4_LEVEL_HIGH
	;-----------------
	ENDDIPSW2DO:
	POP	R0
	RET
DIPSW3_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#00000100B
	JNE	PASSDIPSW3DO
	JNB	DIPSW_PRVS.2,ENDDIPSW3DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDDIPSW3DO
	PASSDIPSW3DO:
	JB	DIPSW_PRVS.2,ENDDIPSW3DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDDIPSW3DO:
	POP	R0
	RET
DIPSW4_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#00001000B
	JNE	PASSDIPSW4DO
	JNB	DIPSW_PRVS.3,ENDDIPSW4DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDDIPSW4DO
	PASSDIPSW4DO:
	JB	DIPSW_PRVS.3,ENDDIPSW4DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDDIPSW4DO:
	POP	R0
	RET
DIPSW5_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#00010000B
	JNE	PASSDIPSW5DO
	JNB	DIPSW_PRVS.4,ENDDIPSW5DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDDIPSW5DO
	PASSDIPSW5DO:
	JB	DIPSW_PRVS.4,ENDDIPSW5DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDDIPSW5DO:
	POP	R0
	RET
DIPSW6_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#00100000B
	JNE	PASSDIPSW6DO
	JNB	DIPSW_PRVS.5,ENDDIPSW6DO
	;-----------------		SWITCH IS NOT PRESSED
	CALL	Y3_OFF
	;-----------------
	JMP	ENDDIPSW6DO
	PASSDIPSW6DO:
	JB	DIPSW_PRVS.5,ENDDIPSW6DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	Y3_ON
	;-----------------
	ENDDIPSW6DO:
	POP	R0
	RET
DIPSW7_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#01000000B
	JNE	PASSDIPSW7DO
	JNB	DIPSW_PRVS.6,ENDDIPSW7DO
	;-----------------		SWITCH IS NOT PRESSED
	CALL	Y13_OFF
	;-----------------
	JMP	ENDDIPSW7DO
	PASSDIPSW7DO:
	JB	DIPSW_PRVS.6,ENDDIPSW7DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	Y13_ON
	;-----------------
	ENDDIPSW7DO:
	POP	R0
	RET
DIPSW8_MACRO:
	PUSH	R0
	MOV	R0,DIPSW
	ANL	R0,#10000000B
	JNE	PASSDIPSW8DO
	JNB	DIPSW_PRVS.7,ENDDIPSW8DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDDIPSW8DO
	PASSDIPSW8DO:
	JB	DIPSW_PRVS.7,ENDDIPSW8DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	BEEP
	;-----------------
	ENDDIPSW8DO:
	POP	R0
	RET
X1_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #1
	ANL	R0,#00000001B
	JNE	PASSX1DO
	JNB	X_GRP1_PRVS.0,ENDX1DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX1DO
	PASSX1DO:
	JB	X_GRP1_PRVS.0,ENDX1DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX1DO:
	POP	R0
	RET
X2_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #2
	ANL	R0,#00000010B
	JNE	PASSX2DO
	JNB	X_GRP1_PRVS.1,ENDX2DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX2DO
	PASSX2DO:
	JB	X_GRP1_PRVS.1,ENDX2DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX2DO:
	POP	R0
	RET
X3_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #3
	ANL	R0,#00000100B
	JNE	PASSX3DO
	JNB	X_GRP1_PRVS.2,ENDX3DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX3DO
	PASSX3DO:
	JB	X_GRP1_PRVS.2,ENDX3DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX3DO:
	POP	R0
	RET
X4_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #4
	ANL	R0,#00001000B
	JNE	PASSX4DO
	JNB	X_GRP1_PRVS.3,ENDX4DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX4DO
	PASSX4DO:
	JB	X_GRP1_PRVS.3,ENDX4DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY2000
	;-----------------
	ENDX4DO:
	POP	R0
	RET
X5_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #5
	ANL	R0,#00010000B
	JNE	PASSX5DO
	JNB	X_GRP1_PRVS.4,ENDX5DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX5DO
	PASSX5DO:
	JB	X_GRP1_PRVS.4,ENDX5DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME50
	CALL	PLAY2000

	;-----------------
	ENDX5DO:
	POP	R0
	RET
X6_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #6
	ANL	R0,#00100000B
	JNE	PASSX6DO
	JNB	X_GRP1_PRVS.5,ENDX6DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX6DO
	PASSX6DO:
	JB	X_GRP1_PRVS.5,ENDX6DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME100
	CALL	PLAY2000
	;-----------------
	ENDX6DO:
	POP	R0
	RET
X7_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #7
	ANL	R0,#01000000B
	JNE	PASSX7DO
	JNB	X_GRP1_PRVS.6,ENDX7DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX7DO
	PASSX7DO:
	JB	X_GRP1_PRVS.6,ENDX7DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME200
	CALL	PLAY2000
	;-----------------
	ENDX7DO:
	POP	R0
	RET
X8_MACRO:
	PUSH	R0
	MOV	R0,X_GRP1				;OPTO INPUT #8
	ANL	R0,#10000000B
	JNE	PASSX8DO
	JNB	X_GRP1_PRVS.7,ENDX8DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX8DO
	PASSX8DO:
	JB	X_GRP1_PRVS.7,ENDX8DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME1000
	CALL	PLAY2000
	;-----------------
	ENDX8DO:
	POP	R0
	RET
X9_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #9
	ANL	R0,#00000001B
	JNE	PASSX9DO
	JNB	X_GRP2_PRVS.0,ENDX9DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX9DO
	PASSX9DO:
	JB	X_GRP2_PRVS.0,ENDX9DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1300
	;-----------------
	ENDX9DO:
	POP	R0
	RET
X10_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #10
	ANL	R0,#00000010B
	JNE	PASSX10DO
	JNB	X_GRP2_PRVS.1,ENDX10DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX10DO
	PASSX10DO:
	JB	X_GRP2_PRVS.1,ENDX10DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1400
	;-----------------
	ENDX10DO:
	POP	R0
	RET
X11_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #11
	ANL	R0,#00000100B
	JNE	PASSX11DO
	JNB	X_GRP2_PRVS.2,ENDX11DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX11DO
	PASSX11DO:
	JB	X_GRP2_PRVS.2,ENDX11DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1500
	;-----------------
	ENDX11DO:
	POP	R0
	RET
X12_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #12
	ANL	R0,#00001000B
	JNE	PASSX12DO
	JNB	X_GRP2_PRVS.3,ENDX12DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX12DO
	PASSX12DO:
	JB	X_GRP2_PRVS.3,ENDX12DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1600
	;-----------------
	ENDX12DO:
	POP	R0
	RET
X13_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #13
	ANL	R0,#00010000B
	JNE	PASSX13DO
	JNB	X_GRP2_PRVS.4,ENDX13DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX13DO
	PASSX13DO:
	JB	X_GRP2_PRVS.4,ENDX13DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1700
	;-----------------
	ENDX13DO:
	POP	R0
	RET
X14_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #14
	ANL	R0,#00100000B
	JNE	PASSX14DO
	JNB	X_GRP2_PRVS.5,ENDX14DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX14DO
	PASSX14DO:
	JB	X_GRP2_PRVS.5,ENDX14DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1800
	;-----------------
	ENDX14DO:
	POP	R0
	RET
X15_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #15
	ANL	R0,#01000000B
	JNE	PASSX15DO
	JNB	X_GRP2_PRVS.6,ENDX15DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX15DO
	PASSX15DO:
	JB	X_GRP2_PRVS.6,ENDX15DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1900
	;-----------------
	ENDX15DO:
	POP	R0
	RET
X16_MACRO:
	PUSH	R0
	MOV	R0,X_GRP2				;OPTO INPUT #16
	ANL	R0,#10000000B
	JNE	PASSX16DO
	JNB	X_GRP2_PRVS.7,ENDX16DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX16DO
	PASSX16DO:
	JB	X_GRP2_PRVS.7,ENDX16DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY2000
	;-----------------
	ENDX16DO:
	POP	R0
	RET
X17_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #17
	ANL	R0,#00000001B
	JNE	PASSX17DO
	JNB	X_GRP3_PRVS.0,ENDX17DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX17DO
	PASSX17DO:
	JB	X_GRP3_PRVS.0,ENDX17DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX17DO:
	POP	R0
	RET
X18_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #18
	ANL	R0,#00000010B
	JNE	PASSX18DO
	JNB	X_GRP3_PRVS.1,ENDX18DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX18DO
	PASSX18DO:
	JB	X_GRP3_PRVS.1,ENDX18DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX18DO:
	POP	R0
	RET
X19_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #19
	ANL	R0,#00000100B
	JNE	PASSX19DO
	JNB	X_GRP3_PRVS.2,ENDX19DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX19DO
	PASSX19DO:
	JB	X_GRP3_PRVS.2,ENDX19DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX19DO:
	POP	R0
	RET
X20_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #20
	ANL	R0,#00001000B
	JNE	PASSX20DO
	JNB	X_GRP3_PRVS.3,ENDX20DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX20DO
	PASSX20DO:
	JB	X_GRP3_PRVS.3,ENDX20DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX20DO:
	POP	R0
	RET
X21_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #21
	ANL	R0,#00010000B
	JNE	PASSX21DO
	JNB	X_GRP3_PRVS.4,ENDX21DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX21DO
	PASSX21DO:
	JB	X_GRP3_PRVS.4,ENDX21DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX21DO:
	POP	R0
	RET
X22_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #22
	ANL	R0,#00100000B
	JNE	PASSX22DO
	JNB	X_GRP3_PRVS.5,ENDX22DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX22DO
	PASSX22DO:
	JB	X_GRP3_PRVS.5,ENDX22DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX22DO:
	POP	R0
	RET
X23_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #23
	ANL	R0,#01000000B
	JNE	PASSX23DO
	JNB	X_GRP3_PRVS.6,ENDX23DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX23DO
	PASSX23DO:
	JB	X_GRP3_PRVS.6,ENDX23DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX23DO:
	POP	R0
	RET
X24_MACRO:
	PUSH	R0
	MOV	R0,X_GRP3				;OPTO INPUT #24
	ANL	R0,#10000000B
	JNE	PASSX24DO
	JNB	X_GRP3_PRVS.7,ENDX24DO
	;-----------------		SWITCH IS NOT PRESSED

	;-----------------
	JMP	ENDX24DO
	PASSX24DO:
	JB	X_GRP3_PRVS.7,ENDX24DO
	;-----------------  /ACTIVE/	SWITCH IS PRESSED

	;-----------------
	ENDX24DO:
	POP	R0
	RET
;-------------------------- PP1 82C55A ROUTINES ---------------------------
PPI_INI:
	PUSH	R0
	PUSH	WR22
	MOV	R0,#000H			;INITIAL VALUE FOR PP2 PORT A
	MOV	Y_GRP1,R0
	MOV	R0,#000H			;INITIAL VALUE FOR PP2 PORT B
	MOV	Y_GRP2,R0
	MOV	R0,#004H			;INITIAL VALUE FOR PP3 PORT B
	MOV	PP3B,R0
	MOV	R0,#040H			;INITIAL VALUE FOR PP3 PORT C
	MOV	PP3C,R0
	MOV	WR22,#PP1SC_ADD
	MOV	R0,#09BH			;82C55 INITIALIZING PORT A,B,C AS INPUT , INPUT , INPUT
	MOV	@DR20,R0
	MOV	WR22,#PP2SC_ADD
	MOV	R0,#089H			;82C55 INITIALIZING PORT A,B,C AS OUTPUT, OUTPUT, INPUT
	MOV	@DR20,R0
	MOV	WR22,#PP3SC_ADD
	MOV	R0,#090H			;82C55 INITIALIZING PORT A,B,C AS INPUT , OUTPUT, OUTPUT
	MOV	@DR20,R0
	MOV	WR22,#PP3C_ADD
	MOV	R0,PP3B
	MOV	@DR20,R0
	CALL	X_GRP1_UPDATE
	CALL	X_GRP2_UPDATE
	CALL	X_GRP3_UPDATE
	CALL	Y_GRP1_UPDATE
	CALL	Y_GRP2_UPDATE
      CALL  KBSW_UPDATE           ;PP2C_UPDATE
	CALL	DIPSW_UPDATE
	CALL	PP3B_UPDATE
	CALL	PP3C_UPDATE
	POP	WR22
	POP	R0
	RET
X_UPDATE:;#@#
	PUSH	R0
	MOV	WR22,#X_GRP1_ADD
	MOV	R0,X_GRP1
	MOV	X_GRP1_PRVS,R0
	MOV	R0,@DR20
	MOV	X_GRP1,R0
	MOV	WR22,#X_GRP2_ADD
	MOV	R0,X_GRP2
	MOV	X_GRP2_PRVS,R0
	MOV	R0,@DR20
	MOV	X_GRP2,R0
	MOV	WR22,#X_GRP3_ADD
	MOV	R0,X_GRP3
	MOV	X_GRP3_PRVS,R0
	MOV	R0,@DR20
	MOV	X_GRP3,R0
	MOV   WR22,#KBSW_ADD        ;PP2C_ADD
	MOV   R0,KBSW               ;PP2C
	MOV   KBSW_PRVS,R0          ;PP2C_PRVS,R0
	MOV	R0,@DR20
	XRL	R0,#0F8H
	MOV   KBSW,R0               ;PP2C,R0
	MOV	WR22,#DIPSW_ADD
	MOV	R0,DIPSW
	MOV	DIPSW_PRVS,R0
	MOV	R0,@DR20
	XRL	R0,#0FFH
	MOV	DIPSW,R0
	POP	R0
	RET
X_GRP1_UPDATE:;#@#
	; NOTE: PORT A IS INPUT
	PUSH	R0
	MOV	R0,X_GRP1
	MOV	X_GRP1_PRVS,R0
	MOV	WR22,#X_GRP1_ADD
	MOV	R0,@DR20
	MOV	X_GRP1,R0
	POP	R0
	RET
X_GRP2_UPDATE:;#@#
	; NOTE: PORT B IS INPUT
	PUSH	R0
	MOV	R0,X_GRP2
	MOV	X_GRP2_PRVS,R0
	MOV	WR22,#X_GRP2_ADD
	MOV	R0,@DR20
	MOV	X_GRP2,R0
	POP	R0
	RET
X_GRP3_UPDATE:;#@#
	; NOTE: PORT C IS INPUT
	PUSH	R0
	MOV	R0,X_GRP3
	MOV	X_GRP3_PRVS,R0
	MOV	WR22,#X_GRP3_ADD
	MOV	R0,@DR20
	MOV	X_GRP3,R0
	POP	R0
	RET
;--------------------------- PP2 PORT A BIT CONTROL --------------------------
Y_GRP1_UPDATE:
	; NOTE: PORT A IS OUTPUT
	PUSH	R0
	MOV	WR22,#Y_GRP1_ADD
	MOV	R0,Y_GRP1
	MOV	@DR20,R0
	POP	R0
	RET
Y_GRP2_UPDATE:
	; NOTE: PORT B IS OUTPUT
	PUSH	R0
	MOV	WR22,#Y_GRP2_ADD
	MOV	R0,Y_GRP2
	MOV	@DR20,R0
	POP	R0
	RET
KBSW_UPDATE:;#@#
	; NOTE: PP2C PORT C IS INPUT
	PUSH	R0
	CPL	P1.2
	MOV   R0,KBSW
	MOV   KBSW_PRVS,R0
	MOV   WR22,#KBSW_ADD
	MOV	R0,@DR20
	XRL	R0,#0F8H		
	MOV   KBSW,R0
	POP	R0
	RET
Y_UPDATE:
	CALL	Y_GRP1_UPDATE
	CALL	Y_GRP2_UPDATE
	RET
Y1_OFF:;#@#
	CLR	Y_GRP1.0
	CALL	Y_GRP1_UPDATE
	RET
Y2_OFF:;#@#
	CLR	Y_GRP1.1
	CALL	Y_GRP1_UPDATE
	RET
Y3_OFF:;#@#
	CLR	Y_GRP1.2
	CALL	Y_GRP1_UPDATE
	RET
Y4_OFF:;#@#
	CLR	Y_GRP1.3
	CALL	Y_GRP1_UPDATE
	RET
Y5_OFF:;#@#
	CLR	Y_GRP1.4
	CALL	Y_GRP1_UPDATE
	RET
Y6_OFF:;#@#
	CLR	Y_GRP1.5
	CALL	Y_GRP1_UPDATE
	RET
Y7_OFF:;#@#
	CLR	Y_GRP1.6
	CALL	Y_GRP1_UPDATE
	RET
Y8_OFF:;#@#
	CLR	Y_GRP1.7
	CALL	Y_GRP1_UPDATE
	RET
Y1_ON:;#@#
	SETB	Y_GRP1.0
	CALL	Y_GRP1_UPDATE
	RET
Y2_ON:;#@#
	SETB	Y_GRP1.1
	CALL	Y_GRP1_UPDATE
	RET
Y3_ON:;#@#
	SETB	Y_GRP1.2
	CALL	Y_GRP1_UPDATE
	RET
Y4_ON:;#@#
	SETB	Y_GRP1.3
	CALL	Y_GRP1_UPDATE
	RET
Y5_ON:;#@#
	SETB	Y_GRP1.4
	CALL	Y_GRP1_UPDATE
	RET
Y6_ON:;#@#
	SETB	Y_GRP1.5
	CALL	Y_GRP1_UPDATE
	RET
Y7_ON:;#@#
	SETB	Y_GRP1.6
	CALL	Y_GRP1_UPDATE
	RET
Y8_ON:;#@#
	SETB	Y_GRP1.7
	CALL	Y_GRP1_UPDATE
	RET
;------------------------ PP2 PORT B BIT CONTROL -----------------------------
Y9_OFF:;#@#
	CLR	Y_GRP2.0
	CALL	Y_GRP2_UPDATE
	RET
Y10_OFF:;#@#
	CLR	Y_GRP2.1
	CALL	Y_GRP2_UPDATE
	RET
Y11_OFF:;#@#
	CLR	Y_GRP2.2
	CALL	Y_GRP2_UPDATE
	RET
Y12_OFF:;#@#
	CLR	Y_GRP2.3
	CALL	Y_GRP2_UPDATE
	RET
Y13_OFF:;#@#
	CLR	Y_GRP2.4
	CALL	Y_GRP2_UPDATE
	RET
Y14_OFF:;#@#
	CLR	Y_GRP2.5
	CALL	Y_GRP2_UPDATE
	RET
Y15_OFF:;#@#
	CLR	Y_GRP2.6
	CALL	Y_GRP2_UPDATE
	RET
Y16_OFF:;#@#
	CLR	Y_GRP2.7
	CALL	Y_GRP2_UPDATE
	RET
Y9_ON:;#@#
	SETB	Y_GRP2.0
	CALL	Y_GRP2_UPDATE
	RET
Y10_ON:;#@#
	SETB	Y_GRP2.1
	CALL	Y_GRP2_UPDATE
	RET
Y11_ON:;#@#
	SETB	Y_GRP2.2
	CALL	Y_GRP2_UPDATE
	RET
Y12_ON:;#@#
	SETB	Y_GRP2.3
	CALL	Y_GRP2_UPDATE
	RET
Y13_ON:;#@#
	SETB	Y_GRP2.4
	CALL	Y_GRP2_UPDATE
	RET
Y14_ON:;#@#
	SETB	Y_GRP2.5
	CALL	Y_GRP2_UPDATE
	RET
Y15_ON:;#@#
	SETB	Y_GRP2.6
	CALL	Y_GRP2_UPDATE
	RET
Y16_ON:;#@#
	SETB	Y_GRP2.7
	CALL	Y_GRP2_UPDATE
	RET
;-------------------------- PP3 PORT B BIT CONTROL ---------------------------
DIPSW_UPDATE:;#@#
	; NOTE: PORT A IS INPUT
	PUSH	R0
	MOV	R0,DIPSW
	MOV	DIPSW_PRVS,R0
	MOV	WR22,#DIPSW_ADD
	MOV	R0,@DR20
	XRL	R0,#0FFH
	MOV	DIPSW,R0
	POP	R0
	RET
PP3B_UPDATE:
	; NOTE: PORT B IS OUTPUT
	PUSH	R0
	MOV	WR22,#PP3B_ADD
	MOV	R0,PP3B
	MOV	@DR20,R0
	POP	R0
	RET
PP3C_UPDATE:
	; NOTE: PORT C IS OUTPUT
	PUSH	R0
	MOV	WR22,#PP3C_ADD
	MOV	R0,PP3C
	XRL	R0,#0x0F
	MOV	@DR20,R0
	POP	R0
	RET
DAC_DIN_0:
	CLR	PP3B.0
	CALL	PP3B_UPDATE
	RET
DAC_SCLK_0:
	CLR	PP3B.1
	CALL	PP3B_UPDATE
	RET
DAC_CS_0:
	CLR	PP3B.2
	CALL	PP3B_UPDATE
	RET
DAC_DIN_1:
	SETB	PP3B.0
	CALL	PP3B_UPDATE
	RET
DAC_SCLK_1:
	SETB	PP3B.1
	CALL	PP3B_UPDATE
	RET
DAC_CS_1:
	SETB	PP3B.2
	CALL	PP3B_UPDATE
	RET
;------------------------------- PP3 PORT C BIT CONTROL ----------------------
D1_ON:;#@#
	SETB	PP3C.0
	CALL	PP3C_UPDATE
	RET
D2_ON:;#@#
	SETB	PP3C.1
	CALL	PP3C_UPDATE
	RET
D3_ON:;#@#
	SETB	PP3C.2
	CALL	PP3C_UPDATE
	RET
D4_ON:;#@#
	SETB	PP3C.3
	CALL	PP3C_UPDATE
	RET
D1_OFF:;#@#
	CLR	PP3C.0
	CALL	PP3C_UPDATE
	RET
D2_OFF:;#@#
	CLR	PP3C.1
	CALL	PP3C_UPDATE
	RET
D3_OFF:;#@#
	CLR	PP3C.2
	CALL	PP3C_UPDATE
	RET
D4_OFF:;#@#
	CLR	PP3C.3
	CALL	PP3C_UPDATE
	RET
D1_TOGGLE:;#@#
	CPL	PP3C.0
	CALL	PP3C_UPDATE
	RET
D2_TOGGLE:;#@#
	CPL	PP3C.1
	CALL	PP3C_UPDATE
	RET
D3_TOGGLE:;#@#
	CPL	PP3C.2
	CALL	PP3C_UPDATE
	RET
D4_TOGGLE:;#@#
	CPL	PP3C.3
	CALL	PP3C_UPDATE
	RET
ENB_CNT1_0:
	CLR	PP3C.4
	CALL	PP3C_UPDATE
	RET
ENB_CNT1_1:
	SETB	PP3C.4
	CALL	PP3C_UPDATE
	RET
ENB_CNT2_0:
	CLR	PP3C.5
	CALL	PP3C_UPDATE
	RET
ENB_CNT2_1:
	SETB	PP3C.5
	CALL	PP3C_UPDATE
	RET
LCD_LED_OFF:;#@#
	CLR	PP3C.6
	CALL	PP3C_UPDATE
	RET
LCD_LED_ON:;#@#
	SETB	PP3C.6
	CALL	PP3C_UPDATE
	RET
;---------------------- LCD SUB ROUTINES CONTROLLING BITS --------------------
LCD_INI:
	PUSH	R0
	MOV	R0,#006H			;INITAIL LCD MODE VALUE
	MOV	LCD_MODE,R0
	MOV	R0,#00EH			;INITAIL LCD DISPLAY VALUE
	MOV	LCD_DISPLAY,R0
	MOV	R0,#014H			;INITAIL LCD SHIFT VALUE
	MOV	LCD_SHIFT,R0
	MOV	WR22,#LCDCONTROL_ADD
	MOV	R0,#038H			;8 BIT INTERFACE, 2 LINE, 5X7 DOTS
	MOV	@DR20,R0
	CALL	LCD_DISPLAY_ON
	CALL	LCD_CURSOR_OFF
	CALL	LCD_BLINK_OFF
	CALL	LCD_HOME
	CALL	LCD_CLS
	CALL	LCD_COL1
	CALL	LCD_LINE1
	POP	R0
	RET
LCDREADY:
	PUSH	R0
	PUSH	WR22
	MOV	WR22,#LCDBUSY_ADD
	RELCDREADY:
	MOV	R0,@DR20
	ANL	R0,#0x80
	JNE	RELCDREADY
	POP	WR22
	POP	R0
	RET
LCD_LOCATION_INC:;#@#
	;MOVES CURSOR 1 POSITION FRONT
	PUSH	R0
	CALL	LCD_LOCATION_READ
	MOV	R0,LCD_COL
	INC	R0,#1
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATION_DEC:;#@#
	;MOVES CURSOR 1 POSITION BACK
	PUSH	R0
	CALL	LCD_LOCATION_READ
	MOV	R0,LCD_COL
	DEC	R0,#1
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATION_SAVE:;#@#
	;SAVES CURRENT COLOMN AND ROW IN LCD_LINE_SAVE & LCD_COL_SAVE FOR RESTORING LATTER
	PUSH	R0
	CALL	LCD_LOCATION_READ
	MOV	R0,LCD_COL
	MOV	LCD_COL_SAVE,R0
	MOV	R0,LCD_LINE
	MOV	LCD_LINE_SAVE,R0
	POP	R0
	RET
LCD_LOCATION_RESTORE:;#@#
	;RESTORES COLOMN AND ROW FOUND IN LCD_LINE_SAVE & LCD_COL_SAVE
	PUSH	R0
	MOV	R0,LCD_COL_SAVE
	MOV	LCD_COL,R0
	MOV	R0,LCD_LINE_SAVE
	MOV	LCD_LINE,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATION_READ:;#@#
	;SUB READS LCD COLUMN AND LINE STORES IT IN LCD_COL & LCD_LINE
	PUSH	R0
	PUSH	WR22
	CALL	LCDREADY
	MOV	R0,#0x20		;MINIMUM 0x0D AT 14.7456MHZ
	LCDLOCATIONREADLOOP:
	DEC	R0,#1
	JNE	LCDLOCATIONREADLOOP
	MOV	WR22,#LCDBUSY_ADD
	MOV	R0,@DR20
	PUSH	R0
	ANL	R0,#0x3F
	INC	R0,#1
	MOV	LCD_COL,R0
	POP	R0
	ANL	R0,#0x40
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	INC	R0,#1
	MOV	LCD_LINE,R0
	POP	WR22
	POP	R0
	RET
LCD_CLS:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	MOV	R0,#01
	MOV	@DR20,R0
	POP	R0
	RET
LCD_HOME:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	MOV	R0,#02
	MOV	@DR20,R0
	POP	R0
	RET
LCD_DISPLAY_UPDATE:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	MOV	R0,LCD_DISPLAY
	MOV	@DR20,R0
	POP	R0
	RET
LCD_DISPLAY_ON:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	SETB	LCD_DISPLAY.2
	MOV	R0,LCD_DISPLAY
	MOV	@DR20,R0
	POP	R0
	RET
LCD_DISPLAY_OFF:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	CLR	LCD_DISPLAY.2
	MOV	R0,LCD_DISPLAY
	MOV	@DR20,R0
	POP	R0
	RET
LCD_CURSOR_ON:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	SETB	LCD_DISPLAY.1
	MOV	R0,LCD_DISPLAY
	MOV	@DR20,R0
	POP	R0
	RET
LCD_CURSOR_OFF:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	CLR	LCD_DISPLAY.1
	MOV	R0,LCD_DISPLAY
	MOV	@DR20,R0
	POP	R0
	RET
LCD_BLINK_ON:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	SETB	LCD_DISPLAY.0
	MOV	R0,LCD_DISPLAY
	MOV	@DR20,R0
	POP	R0
	RET
LCD_BLINK_OFF:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	CLR	LCD_DISPLAY.0
	MOV	R0,LCD_DISPLAY
	MOV	@DR20,R0
	POP	R0
	RET
LCD_SHIFT_UPDATE:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	MOV	R0,LCD_SHIFT
	MOV	@DR20,R0
	POP	R0
	RET
LCD_SHIFT_DISPLAY:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	SETB	LCD_SHIFT.3
	MOV	R0,LCD_SHIFT
	MOV	@DR20,R0
	POP	R0
	RET
LCD_SHIFT_CURSOR:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	CLR	LCD_SHIFT.3
	MOV	R0,LCD_SHIFT
	MOV	@DR20,R0
	POP	R0
	RET
LCD_SHIFT_RIGHT:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	SETB	LCD_SHIFT.2
	MOV	R0,LCD_SHIFT
	MOV	@DR20,R0
	POP	R0
	RET
LCD_SHIFT_LEFT:;#@#
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	CLR	LCD_SHIFT.2
	MOV	R0,LCD_SHIFT
	MOV	@DR20,R0
	POP	R0
	RET
LCD_MODE_UPDATE:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	MOV	R0,LCD_MODE
	MOV	@DR20,R0
	POP	R0
	RET
LCD_MODE_INCREASE:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	SETB	LCD_MODE.1
	MOV	R0,LCD_MODE
	MOV	@DR20,R0
	POP	R0
	RET
LCD_MODE_DECREASE:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	CLR	LCD_MODE.1
	MOV	R0,LCD_MODE
	MOV	@DR20,R0
	POP	R0
	RET
LCD_MODE_SHIFT_ON:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	SETB	LCD_MODE.0
	MOV	R0,LCD_MODE
	MOV	@DR20,R0
	POP	R0
	RET
LCD_MODE_SHIFT_OFF:
	PUSH	R0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	CLR	LCD_MODE.0
	MOV	R0,LCD_MODE
	MOV	@DR20,R0
	POP	R0
	RET
LCD_LOCATE:
	PUSH	WR0
	CALL	LCDREADY
	MOV	WR22,#LCDCONTROL_ADD
	MOV	R0,LCD_COL
	DEC	R0,#1
	MOV	R1,LCD_LINE
	DEC	R1,#1
	JE	LCD_LOCATE_LINE_X1
	ADD	R0,#040H
	LCD_LOCATE_LINE_X1:
	ADD	R0,#080H
	MOV	@DR20,R0
	POP	WR0
	RET
LCD_LINE1:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	POP	R0
	RET
LCD_LINE2:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	POP	R0
	RET
LCD_COL1:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL2:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL3:;#@#
	PUSH	R0
	MOV	R0,#03D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL4:;#@#
	PUSH	R0
	MOV	R0,#04D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL5:;#@#
	PUSH	R0
	MOV	R0,#05D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL6:;#@#
	PUSH	R0
	MOV	R0,#06D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL7:;#@#
	PUSH	R0
	MOV	R0,#07D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL8:;#@#
	PUSH	R0
	MOV	R0,#08D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL9:;#@#
	PUSH	R0
	MOV	R0,#09D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL10:;#@#
	PUSH	R0
	MOV	R0,#10D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL11:;#@#
	PUSH	R0
	MOV	R0,#11D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL12:;#@#
	PUSH	R0
	MOV	R0,#12D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL13:;#@#
	PUSH	R0
	MOV	R0,#13D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL14:;#@#
	PUSH	R0
	MOV	R0,#14D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL15:;#@#
	PUSH	R0
	MOV	R0,#15D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL16:;#@#
	PUSH	R0
	MOV	R0,#16D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL17:;#@#
	PUSH	R0
	MOV	R0,#17D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL18:;#@#
	PUSH	R0
	MOV	R0,#18D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL19:;#@#
	PUSH	R0
	MOV	R0,#19D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_COL20:;#@#
	PUSH	R0
	MOV	R0,#20D
	MOV	LCD_COL,R0
	POP	R0
	RET
LCD_LOCATE11:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#01D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE12:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#02D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE13:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#03D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE14:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#04D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE15:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#05D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE16:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#06D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE17:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#07D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE18:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#08D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE19:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#09D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE110:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#10D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE111:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#11D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE112:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#12D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE113:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#13D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE114:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#14D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE115:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#15D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE116:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#16D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE117:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#17D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE118:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#18D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE119:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#19D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE120:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#20D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE21:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#01D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE22:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#02D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE23:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#03D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE24:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#04D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE25:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#05D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE26:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#06D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE27:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#07D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE28:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#08D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE29:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#09D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE210:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#10D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE211:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#11D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE212:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#12D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE213:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#13D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE214:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#14D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE215:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#15D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE216:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#16D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE217:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#17D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE218:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#18D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE219:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#19D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LOCATE220:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#20D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	POP	R0
	RET
LCD_LINE1_CLR:;#@#
	PUSH	R0
	MOV	R0,#01D
	MOV	LCD_LINE,R0
	MOV	R0,#01D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	MOV	R0,#014H
	REDEC_LCD_LINE1_CLR:
	CALL	SPACE_PRINT
	DEC	R0,#1
	JNE	REDEC_LCD_LINE1_CLR
	POP	R0
	RET
LCD_LINE2_CLR:;#@#
	PUSH	R0
	MOV	R0,#02D
	MOV	LCD_LINE,R0
	MOV	R0,#01D
	MOV	LCD_COL,R0
	CALL	LCD_LOCATE
	MOV	R0,#014H
	REDEC_LCD_LINE2_CLR:
	CALL	SPACE_PRINT
	DEC	R0,#1
	JNE	REDEC_LCD_LINE2_CLR
	POP	R0
	RET
N0_PRINT:;#@#
	;PRINT NUMBER 0
	PUSH	R0
	MOV	R0,#"0"
	CALL	R02LCD
	POP	R0
	RET
N1_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"1"
	CALL	R02LCD
	POP	R0
	RET
N2_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"2"
	CALL	R02LCD
	POP	R0
	RET
N3_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"3"
	CALL	R02LCD
	POP	R0
	RET
N4_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"4"
	CALL	R02LCD
	POP	R0
	RET
N5_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"5"
	CALL	R02LCD
	POP	R0
	RET
N6_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"6"
	CALL	R02LCD
	POP	R0
	RET
N7_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"7"
	CALL	R02LCD
	POP	R0
	RET
N8_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"8"
	CALL	R02LCD
	POP	R0
	RET
N9_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"9"
	CALL	R02LCD
	POP	R0
	RET
A_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"A"
	CALL	R02LCD
	POP	R0
	RET
B_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"B"
	CALL	R02LCD
	POP	R0
	RET
C_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"C"
	CALL	R02LCD
	POP	R0
	RET
D_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"D"
	CALL	R02LCD
	POP	R0
	RET
E_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"E"
	CALL	R02LCD
	POP	R0
	RET
F_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"F"
	CALL	R02LCD
	POP	R0
	RET
G_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"G"
	CALL	R02LCD
	POP	R0
	RET
H_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"H"
	CALL	R02LCD
	POP	R0
	RET
I_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"I"
	CALL	R02LCD
	POP	R0
	RET
J_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"J"
	CALL	R02LCD
	POP	R0
	RET
K_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"K"
	CALL	R02LCD
	POP	R0
	RET
L_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"L"
	CALL	R02LCD
	POP	R0
	RET
M_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"M"
	CALL	R02LCD
	POP	R0
	RET
N_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"N"
	CALL	R02LCD
	POP	R0
	RET
O_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"O"
	CALL	R02LCD
	POP	R0
	RET
P_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"P"
	CALL	R02LCD
	POP	R0
	RET
Q_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"Q"
	CALL	R02LCD
	POP	R0
	RET
R_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"R"
	CALL	R02LCD
	POP	R0
	RET
S_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"S"
	CALL	R02LCD
	POP	R0
	RET
T_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"T"
	CALL	R02LCD
	POP	R0
	RET
U_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"U"
	CALL	R02LCD
	POP	R0
	RET
V_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"V"
	CALL	R02LCD
	POP	R0
	RET
W_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"W"
	CALL	R02LCD
	POP	R0
	RET
X_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"X"
	CALL	R02LCD
	POP	R0
	RET
Y_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"Y"
	CALL	R02LCD
	POP	R0
	RET
Z_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"Z"
	CALL	R02LCD
	POP	R0
	RET
SPACE_PRINT:;#@#
	PUSH	R0
	MOV	R0,#" "
	CALL	R02LCD
	POP	R0
	RET
UNDERSCORE_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"_"
	CALL	R02LCD
	POP	R0
	RET
COLON_PRINT:;#@#
	PUSH	R0
	MOV	R0,#":"
	CALL	R02LCD
	POP	R0
	RET
MINUS_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"-"
	CALL	R02LCD
	POP	R0
	RET
PLUS_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"+"
	CALL	R02LCD
	POP	R0
	RET
GT_PRINT:;#@#
	PUSH	R0
	MOV	R0,#">"
	CALL	R02LCD
	POP	R0
	RET
LT_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"<"
	CALL	R02LCD
	POP	R0
	RET
DOT_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"."
	CALL	R02LCD
	POP	R0
	RET
STAR_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"*"
	CALL	R02LCD
	POP	R0
	RET
COMMA_PRINT:;#@#
	PUSH	R0
	MOV	R0,#","
	CALL	R02LCD
	POP	R0
	RET
NUM_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"#"
	CALL	R02LCD
	POP	R0
	RET
QUOTATIONMARK_PRINT:;#@#
	PUSH	R0
	MOV	R0,#0x22
	CALL	R02LCD
	POP	R0
	RET
AND_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"&"
	CALL	R02LCD
	POP	R0
	RET
APOSTOPHI_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"'"
	CALL	R02LCD
	POP	R0
	RET
ARROWRIGHT_PRINT:;#@#
	PUSH	R0
	MOV	R0,#0x7E
	CALL	R02LCD
	POP	R0
	RET
ARROWLEFT_PRINT:;#@#
	PUSH	R0
	MOV	R0,#0x7F
	CALL	R02LCD
	POP	R0
	RET
FACTORIAL_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"!"
	CALL	R02LCD
	POP	R0
	RET
PERCENTAGE_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"%"
	CALL	R02LCD
	POP	R0
	RET
DOLLAR_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"$"
	CALL	R02LCD
	POP	R0
	RET
SLASH_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"/"
	CALL	R02LCD
	POP	R0
	RET
BACKSLASH_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"\"
	CALL	R02LCD
	POP	R0
	RET
OPENBRACKET_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"("
	CALL	R02LCD
	POP	R0
	RET
CLOSEBRACKET_PRINT:;#@#
	PUSH	R0
	MOV	R0,#")"
	CALL	R02LCD
	POP	R0
	RET
QUESTIONMARK_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"?"
	CALL	R02LCD
	POP	R0
	RET
AT_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"@"
	CALL	R02LCD
	POP	R0
	RET
OK_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"O"
	CALL	R02LCD
	MOV	R0,#"K"
	CALL	R02LCD
	POP	R0
	RET
ERROR_PRINT:;#@#
	PUSH	R0
	MOV	R0,#"E"
	CALL	R02LCD
	MOV	R0,#"R"
	CALL	R02LCD
	MOV	R0,#"R"
	CALL	R02LCD
	MOV	R0,#"O"
	CALL	R02LCD
	MOV	R0,#"R"
	CALL	R02LCD
	POP	R0
	RET
;---------------------------- PRINTF ROUTINES -----------------------------
PRINTF_INI:
	CALL	PRINTF_TYPE_ZERO
	CALL	PRINTF_SOURCE_ROM
	RET
PRINTF_SOURCE_RAM:
	PUSH	R0
	MOV	R0,#RAM_ADD
	MOV	PRINTF_SOURCE,R0
	POP	R0
	RET
PRINTF_SOURCE_ROM:
	PUSH	R0
	MOV	R0,#ROM_ADD
	MOV	PRINTF_SOURCE,R0
	POP	R0
	RET
PRINTF_SOURCE_FLASH:
	PUSH	R0
	MOV	R0,#FLASH_ADD
	MOV	PRINTF_SOURCE,R0
	POP	R0
	RET
PRINTF:
	;prints a stream of data at location specified by print_msg and send
	;to LCD screen. If printf_type if zero then string should be teminated
	;with zero else printf_type is a number of bytes to be send i.e. 5 = 5 bytes
	PUSH	DR0
	PUSH	WR4
	MOV	R0,#0
	MOV	R1,PRINTF_SOURCE
	MOV	WR2,PRINTF_MSG
	MOV	WR22,#LCDWRITE_ADD
	MOV	R4,PRINTF_TYPE
	ANL	R4,R4
	JNE	PRINTF_TYPE_NON_ZERO
	REPRINTF:
	MOV	R4,@DR0
	ANL	R4,R4
	JE	ENDPRINTF
	CALL	LCDREADY
	MOV	@DR20,R4
	INC	WR2,#1
	JMP	REPRINTF
	PRINTF_TYPE_NON_ZERO:
	MOV	R5,PRINTF_TYPE
	INC	R5,#1
	REPRINTF_TYPE_NON_ZERO:
	MOV	R4,@DR0
	DEC	R5,#1
	JE	ENDPRINTF
	CALL	LCDREADY
	MOV	@DR20,R4
	INC	WR2,#1
	JMP	REPRINTF_TYPE_NON_ZERO
	ENDPRINTF:
	CALL	PRINTF_SOURCE_ROM	
	CALL	PRINTF_TYPE_ZERO
	POP	WR4
	POP	DR0
	RET
PRINTF_TYPE_ZERO:
	MOV	R0,#00H
	MOV	PRINTF_TYPE,R0
	RET
PRINTF_MSG_WELCOME:
	PUSH	WR0
	MOV	WR0,#MSG_WELCOME
	MOV	PRINTF_MSG,WR0
	CALL	PRINTF
	POP	WR0
	RET
PRINTF_MSG_VERSION:
	PUSH	WR0
	MOV	WR0,#MSG_VERSION
	MOV	PRINTF_MSG,WR0
	CALL	PRINTF
	POP	WR0
	RET
PRINTF_MSG_CHANNEL:
	PUSH	WR0
	MOV	WR0,#MSG_CHANNEL
	MOV	PRINTF_MSG,WR0
	CALL	PRINTF
	POP	WR0
	RET
PRINTF_MSG_TIME:
	CALL	T_PRINT
	CALL	I_PRINT
	CALL	M_PRINT
	CALL	E_PRINT
	CALL	MINUS_PRINT
	CALL	GT_PRINT
	RET
PRINTF_MSG_DATE:
	CALL	D_PRINT
	CALL	A_PRINT
	CALL	T_PRINT
	CALL	E_PRINT
	CALL	MINUS_PRINT
	CALL	GT_PRINT
	RET
;--------------------------------- ADC CONTROL -----------------------------
ADC_INI:
	CALL	ADC_CONLOW_READ
	CALL	ADC_CONHIGH_READ
	RET
ADC_RANGE_DISPLAY:
	;INPUT IS R0 OUTPUT TO LCD +5 OR +-5 OR +10 OR +-10
	CALL	LCD_LOCATE216
	CMP	R0,#0
	JE	ADCRANGEDISPLAYP5
	CMP	R0,#1
	JE	ADCRANGEDISPLAYPM5
	CMP	R0,#2
	JE	ADCRANGEDISPLAYP10
	CMP	R0,#3
	JE	ADCRANGEDISPLAYPM10
	JMP	ADCRANGEDISPLAYEND
	ADCRANGEDISPLAYP5:
	CALL	PLUS_PRINT
	CALL	N5_PRINT
	CALL	V_PRINT
	CALL	SPACE_PRINT
	CALL	SPACE_PRINT
	JMP	ADCRANGEDISPLAYEND
	ADCRANGEDISPLAYPM5:
	CALL	PLUS_PRINT
	CALL	MINUS_PRINT
	CALL	N5_PRINT
	CALL	V_PRINT
	CALL	SPACE_PRINT
	JMP	ADCRANGEDISPLAYEND
	ADCRANGEDISPLAYP10:
	CALL	PLUS_PRINT
	CALL	N1_PRINT
	CALL	N0_PRINT
	CALL	V_PRINT
	CALL	SPACE_PRINT
	JMP	ADCRANGEDISPLAYEND
	ADCRANGEDISPLAYPM10:
	CALL	PLUS_PRINT
	CALL	MINUS_PRINT
	CALL	N1_PRINT
	CALL	N0_PRINT
	CALL	V_PRINT
	ADCRANGEDISPLAYEND:
	RET
ADC_RANGEEDIT:;#@#
	CALL	ADC1_RANGEEDIT
	CALL	ADC2_RANGEEDIT
	CALL	ADC3_RANGEEDIT
	CALL	ADC4_RANGEEDIT
	CALL	ADC5_RANGEEDIT
	CALL	ADC6_RANGEEDIT
	CALL	ADC7_RANGEEDIT
	CALL	ADC8_RANGEEDIT
	RET
ADC_SUBRANGEEDIT:
	;INPUT IS R0 CONTAINS CURRENT DEFAULT 0~3 RETURNS 0~3 RANGE0=0~5,R1=0~10,R2=+-5,R3=+-10
	CALL	ADC_RANGE_DISPLAY
	ADCRANGEEDITREDO:
	CALL	KBSW_UPDATE
	JB	KBSW.4,ADCRANGEEDITINC
	JB	KBSW.6,ADCRANGEEDITDEC
	JB	KBSW.3,ADCRANGEEDITEND
	JMP	ADCRANGEEDITREDO
	ADCRANGEEDITINC:
	INC	R0,#1
	CMP	R0,#4
	JNE	ADCRANGEEDITINCOK
	MOV	R0,#0
	ADCRANGEEDITINCOK:
	CALL	ADC_RANGE_DISPLAY
	CALL	SLEEP300
	JMP	ADCRANGEEDITREDO
	ADCRANGEEDITDEC:
	DEC	R0,#1
	CMP	R0,#255
	JNE	ADCRANGEEDITDECOK
	MOV	R0,#3
	ADCRANGEEDITDECOK:
	CALL	ADC_RANGE_DISPLAY
	CALL	SLEEP300
	JMP	ADCRANGEEDITREDO
	ADCRANGEEDITEND:
	RET
ADC1_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N1_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONLOW	;CH 1~4
	MOV	R1,R0
	ANL	R1,#0xFC
	ANL	R0,#0x03
	CALL	ADC_SUBRANGEEDIT
	ORL	R0,R1
	MOV	ADC_CONLOW,R0	;CH 1~4
	CALL	ADC_CONLOW_WRITE	;CH 1~4
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC2_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N2_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONLOW	;CH 1~4
	MOV	R1,R0
	ANL	R1,#0xF3
	ANL	R0,#0x0C
	SRL	R0
	SRL	R0
	CALL	ADC_SUBRANGEEDIT
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	ADC_CONLOW,R0	;CH 1~4
	CALL	ADC_CONLOW_WRITE	;CH 1~4
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC3_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N3_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONLOW	;CH 1~4
	MOV	R1,R0
	ANL	R1,#0xCF
	ANL	R0,#0x30
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	CALL	ADC_SUBRANGEEDIT
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	ADC_CONLOW,R0	;CH 1~4
	CALL	ADC_CONLOW_WRITE	;CH 1~4
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC4_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N4_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONLOW	;CH 1~4
	MOV	R1,R0
	ANL	R1,#0x3F
	ANL	R0,#0xC0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	CALL	ADC_SUBRANGEEDIT
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	ADC_CONLOW,R0	;CH 1~4
	CALL	ADC_CONLOW_WRITE	;CH 1~4
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC5_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N5_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONHIGH	;CH 5~8
	MOV	R1,R0
	ANL	R1,#0xFC
	ANL	R0,#0x03
	CALL	ADC_SUBRANGEEDIT
	ORL	R0,R1
	MOV	ADC_CONHIGH,R0	;CH 5~8
	CALL	ADC_CONHIGH_WRITE	;CH 5~8
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC6_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N6_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONHIGH	;CH 5~8
	MOV	R1,R0
	ANL	R1,#0xF3
	ANL	R0,#0x0C
	SRL	R0
	SRL	R0
	CALL	ADC_SUBRANGEEDIT
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	ADC_CONHIGH,R0	;CH 5~8
	CALL	ADC_CONHIGH_WRITE	;CH 5~8
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC7_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N7_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONHIGH	;CH 5~8
	MOV	R1,R0
	ANL	R1,#0xCF
	ANL	R0,#0x30
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	CALL	ADC_SUBRANGEEDIT
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	ADC_CONHIGH,R0	;CH 5~8
	CALL	ADC_CONHIGH_WRITE	;CH 5~8
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC8_RANGEEDIT:
	PUSH	WR0
	CALL	ADC_RANGE_HEADER
	CALL	N8_PRINT		;CH
	CALL	COLON_PRINT
	MOV	R0,ADC_CONHIGH	;CH 5~8
	MOV	R1,R0
	ANL	R1,#0x3F
	ANL	R0,#0xC0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	CALL	ADC_SUBRANGEEDIT
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	ADC_CONHIGH,R0	;CH 5~8
	CALL	ADC_CONHIGH_WRITE	;CH 5~8
	CALL	LCD_LINE2_CLR
	CALL	TILLENTERSWISRELEASED
	POP	WR0
	RET
ADC_RANGE_HEADER:
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	CALL	A_PRINT
	CALL	N_PRINT
	CALL	A_PRINT
	CALL	L_PRINT
	CALL	O_PRINT
	CALL	G_PRINT
	CALL	SPACE_PRINT
	CALL	R_PRINT
	CALL	A_PRINT
	CALL	N_PRINT
	CALL	G_PRINT
	CALL	E_PRINT
	CALL	NUM_PRINT
	RET
ADC_CONLOW_READ:
	PUSH	WR0
	MOV	R0,#EEADD_ADC_CONLOW
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	ADC_CONLOW,R1
	POP	WR0
 	RET
ADC_CONLOW_WRITE:
	PUSH	WR0
	MOV	R0,#EEADD_ADC_CONLOW
	CALL	EE_BANK0
	CALL	EE_READ
	CMP	R1,ADC_CONLOW
	JE	ENDOFADCCONLOWWRITE
	MOV	R0,#EEADD_ADC_CONLOW
	MOV	R1,ADC_CONLOW
	CALL	EE_WRITE
	ENDOFADCCONLOWWRITE:
	POP	WR0
	RET
ADC_CONHIGH_READ:
	PUSH	WR0
	MOV	R0,#EEADD_ADC_CONHIGH
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	ADC_CONHIGH,R1
	POP	WR0
	RET
ADC_CONHIGH_WRITE:
	PUSH	WR0
	MOV	R0,#EEADD_ADC_CONHIGH
	CALL	EE_BANK0
	CALL	EE_READ
	CMP	R1,ADC_CONHIGH
	JE	ENDOFADCCONHIGHWRITE
	MOV	R0,#EEADD_ADC_CONHIGH
	MOV	R1,ADC_CONHIGH
	CALL	EE_WRITE
	ENDOFADCCONHIGHWRITE:
	POP	WR0
	RET
ADC_DELAY:
	;6MS DELAY TIME
	PUSH	R0
	MOV	R0,#9
	READC_DELAY:
	DEC	R0,#1
	JNE READC_DELAY
	POP	R0
	RET
ADC_UPDATE:;#@#
	CALL	ADC1_UPDATE
	CALL	ADC2_UPDATE
	CALL	ADC3_UPDATE
	CALL	ADC4_UPDATE
	CALL	ADC5_UPDATE
	CALL	ADC6_UPDATE
	CALL	ADC7_UPDATE
	CALL	ADC8_UPDATE
	RET
ADC1_UPDATE:;#@#
	;000
	PUSH	WR0
	MOV	R0,#0x40	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONLOW
	ANL	R1,#0x03
	SLL	R1
	SLL	R1
	SLL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC1_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1		; " " ...
	MOV	ADC1_HIGH,R0
	POP	WR0
	RET
ADC2_UPDATE:;#@#
	;001
	PUSH	WR0
	MOV	R0,#0x41	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONLOW
	ANL	R1,#0x0C
	SLL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC2_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	ADC2_HIGH,R0
	POP	WR0
	RET
ADC3_UPDATE:;#@#
	;010
	PUSH	WR0
	MOV	R0,#0x42	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONLOW
	ANL	R1,#0x30
	SRL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC3_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	ADC3_HIGH,R0
	POP	WR0
	RET
ADC4_UPDATE:;#@#
	;011
	PUSH	WR0
	MOV	R0,#0x43	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONLOW
	ANL	R1,#0xC0
	SRL	R1
	SRL	R1
	SRL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC4_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	ADC4_HIGH,R0
	POP	WR0
	RET
ADC5_UPDATE:;#@#
	;100
	PUSH	WR0
	MOV	R0,#0x44	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONHIGH
	ANL	R1,#0x03
	SLL	R1
	SLL	R1
	SLL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC5_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	ADC5_HIGH,R0
	POP	WR0
	RET
ADC6_UPDATE:;#@#
	;101
	PUSH	WR0
	MOV	R0,#0x45	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONHIGH
	ANL	R1,#0x0C
	SLL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC6_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	ADC6_HIGH,R0
	POP	WR0
	RET
ADC7_UPDATE:;#@#
	;110
	PUSH	WR0
	MOV	R0,#0x46	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONHIGH
	ANL	R1,#0x30
	SRL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC7_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	ADC7_HIGH,R0
	POP	WR0
	RET
ADC8_UPDATE:;#@#
	;111
	PUSH	WR0
	MOV	R0,#0x47	;NORMAL OPERATION INTERNAL CLK,INTERNAL CONTROLLED ACQUISITION
	MOV	R1,ADC_CONHIGH
	ANL	R1,#0xC0
	SRL	R1
	SRL	R1
	SRL	R1
	MOV	GENERAL1,R1
	ORL	R0,R1	;R1 CONTAINS ADC RANGE SAME POSITION ALL OTHER BITS ARE CLEARED
	MOV	WR22,#ADC_LOW_ADD
	MOV	@DR20,R0
	CALL	ADC_DELAY
	MOV	WR22,#ADC_LOW_ADD
	MOV	R0,@DR20
	MOV	ADC8_LOW,R0
	MOV	HEXLOW,R0
	MOV	WR22,#ADC_HIGH_ADD
	MOV	R0,@DR20
	MOV	HEXHIGH,R0
	ANL	R0,#0x9F	;THESE 2 LINES TO ADD RANGE TO VALUE 2 BIT
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	ADC8_HIGH,R0
	POP	WR0
	RET
ADC_SIGNED_HEX2DECIMALA:
	;CONVERTS SIGNED HEX INTO DECIMAL VALUE STORED IN DECIMALA,UPDATES
	;DECIMALA_SIGN AND ADC_TEXT SIGN TO - OR SPACE. DECIMALA FORMAT AT THE
	;END IS 123456.123456 WITH OUT HAVING PHISICAL DECIMAL POINT.
	;F800=-10V , FC00=-5V , 03FF=+5V , 07FF=+10V
	PUSH	R2
	PUSH	WR0
	CALL	DECIMALA_CLR
	CALL	DECIMALB_CLR
	MOV	R0,HEXHIGH
	MOV	R1,HEXLOW
	MOV	R2,#0
	MOV	DECIMALA_SIGN,R2
	MOV	R2,#" "
	MOV	ADC_TEXT,R2
	SLL	WR0
	JNC	ADC_SIGNED_HEX2DECIMALA_POSITIVE
	SRL	WR0
	MOV	R2,#0xFF
	MOV	DECIMALA_SIGN,R2
	MOV	R2,#"-"
	MOV	ADC_TEXT,R2
	SLL	WR0
	CMP	R0,#0xF0
	JNE	ADCSIGNEDHEX2DECIMALANORMAL
	CMP	R1,#0x00
	JNE	ADCSIGNEDHEX2DECIMALANORMAL
	MOV	R0,#1
	MOV	DECIMALA+0,R0
	JMP	END_ADC_SIGNED_HEX2DECIMALA
	ADCSIGNEDHEX2DECIMALANORMAL:
	XRL	R0,#0FFH
	XRL	R1,#0FFH
	INC	WR0,#1				;** HERE 2'S COMPLEMENT DONE
	ADC_SIGNED_HEX2DECIMALA_POSITIVE:	
	SRL	WR0
	SRL	WR0
	JNC	CHECKPOWER2
	CALL	ACCUMULATE_POWER_MINUS11
	CHECKPOWER2:
	SRL	WR0
	JNC	CHECKPOWER3
	CALL	ACCUMULATE_POWER_MINUS10
	CHECKPOWER3:
	SRL	WR0
	JNC	CHECKPOWER4
	CALL	ACCUMULATE_POWER_MINUS9
	CHECKPOWER4:
	SRL	WR0
	JNC	CHECKPOWER5
	CALL	ACCUMULATE_POWER_MINUS8
	CHECKPOWER5:
	SRL	WR0
	JNC	CHECKPOWER6
	CALL	ACCUMULATE_POWER_MINUS7
	CHECKPOWER6:
	SRL	WR0
	JNC	CHECKPOWER7
	CALL	ACCUMULATE_POWER_MINUS6
	CHECKPOWER7:
	SRL	WR0
	JNC	CHECKPOWER8
	CALL	ACCUMULATE_POWER_MINUS5
	CHECKPOWER8:
	SRL	WR0
	JNC	CHECKPOWER9
	CALL	ACCUMULATE_POWER_MINUS4
	CHECKPOWER9:
	SRL	WR0
	JNC	CHECKPOWER10
	CALL	ACCUMULATE_POWER_MINUS3
	CHECKPOWER10:
	SRL	WR0
	JNC	CHECKPOWER11
	CALL	ACCUMULATE_POWER_MINUS2
	CHECKPOWER11:
	SRL	WR0
	JNC	END_ADC_SIGNED_HEX2DECIMALA
	CALL	ACCUMULATE_POWER_MINUS1
	END_ADC_SIGNED_HEX2DECIMALA:
	POP	WR0
	POP	R2
	RET
ACCUMULATE_POWER_MINUS1:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#5
	MOV	DECIMALB+1,R0
	MOV	R0,#0
	MOV	DECIMALB+2,R0
	MOV	R0,#0
	MOV	DECIMALB+3,R0
	MOV	R0,#0
	MOV	DECIMALB+4,R0
	MOV	R0,#0
	MOV	DECIMALB+5,R0
	MOV	R0,#0
	MOV	DECIMALB+6,R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS2:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#2
	MOV	DECIMALB+1,R0
	MOV	R0,#5
	MOV	DECIMALB+2,R0
	MOV	R0,#0
	MOV	DECIMALB+3,R0
	MOV	R0,#0
	MOV	DECIMALB+4,R0
	MOV	R0,#0
	MOV	DECIMALB+5,R0
	MOV	R0,#0
	MOV	DECIMALB+6,R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS3:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#1
	MOV	DECIMALB+1,R0
	MOV	R0,#2
	MOV	DECIMALB+2,R0
	MOV	R0,#5
	MOV	DECIMALB+3,R0
	MOV	R0,#0
	MOV	DECIMALB+4,R0
	MOV	R0,#0
	MOV	DECIMALB+5,R0
	MOV	R0,#0
	MOV	DECIMALB+6,R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS4:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#6
	MOV	DECIMALB+2,R0
	MOV	R0,#2
	MOV	DECIMALB+3,R0
	MOV	R0,#5
	MOV	DECIMALB+4,R0
	MOV	R0,#0
	MOV	DECIMALB+5,R0
	MOV	R0,#0
	MOV	DECIMALB+6,R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS5:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#3
	MOV	DECIMALB+2,R0
	MOV	R0,#1
	MOV	DECIMALB+3,R0
	MOV	R0,#2
	MOV	DECIMALB+4,R0
	MOV	R0,#5
	MOV	DECIMALB+5,R0
	MOV	R0,#0
	MOV	DECIMALB+6,R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS6:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#1
	MOV	DECIMALB+2,R0
	MOV	R0,#5
	MOV	DECIMALB+3,R0
	MOV	R0,#6
	MOV	DECIMALB+4,R0
	MOV	R0,#2
	MOV	DECIMALB+5,R0
	MOV	R0,#5
	MOV	DECIMALB+6,R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS7:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#0
	MOV	DECIMALB+2,R0
	MOV	R0,#7
	MOV	DECIMALB+3,R0
	MOV	R0,#8
	MOV	DECIMALB+4,R0
	MOV	R0,#1
	MOV	DECIMALB+5,R0
	MOV	R0,#2
	MOV	DECIMALB+6,R0
	MOV	R0,#5
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS8:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#0
	MOV	DECIMALB+2,R0
	MOV	R0,#3
	MOV	DECIMALB+3,R0
	MOV	R0,#9
	MOV	DECIMALB+4,R0
	MOV	R0,#0
	MOV	DECIMALB+5,R0
	MOV	R0,#6
	MOV	DECIMALB+6,R0
	MOV	R0,#2
	MOV	DECIMALB+7,R0
	MOV	R0,#5
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS9:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#0
	MOV	DECIMALB+2,R0
	MOV	R0,#1
	MOV	DECIMALB+3,R0
	MOV	R0,#9
	MOV	DECIMALB+4,R0
	MOV	R0,#5
	MOV	DECIMALB+5,R0
	MOV	R0,#3
	MOV	DECIMALB+6,R0
	MOV	R0,#1
	MOV	DECIMALB+7,R0
	MOV	R0,#2
	MOV	DECIMALB+8,R0
	MOV	R0,#5
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS10:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#0
	MOV	DECIMALB+2,R0
	MOV	R0,#0
	MOV	DECIMALB+3,R0
	MOV	R0,#9
	MOV	DECIMALB+4,R0
	MOV	R0,#7
	MOV	DECIMALB+5,R0
	MOV	R0,#6
	MOV	DECIMALB+6,R0
	MOV	R0,#5
	MOV	DECIMALB+7,R0
	MOV	R0,#6
	MOV	DECIMALB+8,R0
	MOV	R0,#2
	MOV	DECIMALB+9,R0
	MOV	R0,#5
	MOV	DECIMALB+10,R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ACCUMULATE_POWER_MINUS11:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#0
	MOV	DECIMALB+1,R0
	MOV	R0,#0
	MOV	DECIMALB+2,R0
	MOV	R0,#0
	MOV	DECIMALB+3,R0
	MOV	R0,#4
	MOV	DECIMALB+4,R0
	MOV	R0,#8
	MOV	DECIMALB+5,R0
	MOV	R0,#8
	MOV	DECIMALB+6,R0
	MOV	R0,#2
	MOV	DECIMALB+7,R0
	MOV	R0,#8
	MOV	DECIMALB+8,R0
	MOV	R0,#1
	MOV	DECIMALB+9,R0
	MOV	R0,#2
	MOV	DECIMALB+10,R0
	MOV	R0,#5
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD	
	POP	R0
	RET
ADC1_DISPLAY:;#@#
	;DISPLAYS CH.1 CONTINUOSLY ON LINE 2 AS CHANNEL(1) -4.56788 V
	PUSH	WR0
	MOV	R0,#1
	CALL	ADC1_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC2_DISPLAY:;#@#
	;DISPLAYS CH.2 CONTINUOSLY ON LINE 2 AS CHANNEL(2) -4.56788 V
	PUSH	WR0
	MOV	R0,#2
	CALL	ADC2_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC3_DISPLAY:;#@#
	;DISPLAYS CH.3 CONTINUOSLY ON LINE 2 AS CHANNEL(3) -4.56788 V
	PUSH	WR0
	MOV	R0,#3
	CALL	ADC3_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC4_DISPLAY:;#@#
	;DISPLAYS CH.4 CONTINUOSLY ON LINE 2 AS CHANNEL(4) -4.56788 V
	PUSH	WR0
	MOV	R0,#4
	CALL	ADC4_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC5_DISPLAY:;#@#
	;DISPLAYS CH.5 CONTINUOSLY ON LINE 2 AS CHANNEL(5) -4.56788 V
	PUSH	WR0
	MOV	R0,#5
	CALL	ADC5_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC6_DISPLAY:;#@#
	;DISPLAYS CH.6 CONTINUOSLY ON LINE 2 AS CHANNEL(6) -4.56788 V
	PUSH	WR0
	MOV	R0,#6
	CALL	ADC6_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC7_DISPLAY:;#@#
	;DISPLAYS CH.7 CONTINUOSLY ON LINE 2 AS CHANNEL(7) -4.56788 V
	PUSH	WR0
	MOV	R0,#7
	CALL	ADC7_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC8_DISPLAY:;#@#
	;DISPLAYS CH.8 CONTINUOSLY ON LINE 2 AS CHANNEL(8) -4.56788 V
	PUSH	WR0
	MOV	R0,#8
	CALL	ADC8_UPDATE
	CALL	ADC_DISPLAY
	POP	WR0
	RET
ADC_DISPLAY:
	CALL	ADC_RANGE_ADJUST
	CALL	ADC_SIGNED_HEX2DECIMALA
	CALL	ADC_TEXT_FROM_DECIMALA
	CALL	ADC_MSG_CHANNEL_PRINT
	CALL	LCD_LOCATE25
;	ADD	R0,#0x30	;channel binary to text adjust
	MOV	R0,#"W"
	CALL	R02LCD
	CALL	LCD_LOCATE29
	CALL	ADC_TEXT_PRINT
	;CALL	LCD_LOCATE21
	;MOV	R1,HEXLOW
	;MOV	R0,HEXHIGH
	;MOV	HEXLOW,R0
	;CALL	HEX2LCD
	;MOV	R0,R1
	;MOV	HEXLOW,R0
	;CALL	HEX2LCD
	;CALL	SPACE_PRINT
	;CALL	SPACE_PRINT
	;CALL	SPACE_PRINT
	;CALL	SPACE_PRINT
	RET
ADC_RANGE_ADJUST:
	PUSH	WR0
	JB	GENERAL1.3,ADCRANGEADJUSTNEGATIVE
	JB	GENERAL1.4,ADCRANGEADJUSTPOSITIVEHIGH
	;---POSLOW---
	MOV	R0,HEXHIGH
	MOV	R1,HEXLOW
	SRL	WR0
	SRL	WR0
	MOV	HEXLOW,R1
	MOV	HEXHIGH,R0
	JMP	ENDOFADCRANGEADJUST
	ADCRANGEADJUSTPOSITIVEHIGH:	
	;---POSHIGH---
	MOV	R0,HEXHIGH
	MOV	R1,HEXLOW
	SRL	WR0
	MOV	HEXLOW,R1
	MOV	HEXHIGH,R0
	JMP	ENDOFADCRANGEADJUST
	ADCRANGEADJUSTNEGATIVE:
	JB	GENERAL1.4,ADCRANGEADJUSTNEGATIVEHIGH
	;---NEGLOW---
	MOV	R0,HEXHIGH
	MOV	R1,HEXLOW
	SRA	WR0
	MOV	HEXLOW,R1
	MOV	HEXHIGH,R0
	JMP	ENDOFADCRANGEADJUST
	ADCRANGEADJUSTNEGATIVEHIGH:
	;---NEGHIGH---
	ENDOFADCRANGEADJUST:
	POP	WR0
	RET
ADC_TEXT_PRINT:
	PUSH	WR0
	MOV	R0,#06H
	MOV	PRINTF_TYPE,R0
	CALL	PRINTF_SOURCE_RAM
	MOV	WR0,#ADC_TEXT
	MOV	PRINTF_MSG,WR0
	CALL	PRINTF
	POP	WR0
	RET
ADC_TEXT_FROM_DECIMALA:
	PUSH	R0
	MOV	R0,DECIMALA+0
	ADD	R0,#030H				;TO CONVERT INTO TEXT
	CMP	R0,#"0"
	JNE	ADCTEXTFROMDECIMALAFIRSTDIGITISNOTZERO
	MOV	R0,#" "
	ADCTEXTFROMDECIMALAFIRSTDIGITISNOTZERO:
	MOV	ADC_TEXT+1,R0
	MOV	R0,DECIMALA+1
	ADD	R0,#030H				;TO CONVERT INTO TEXT
	MOV	ADC_TEXT+2,R0
	MOV	R0,#"."
	MOV	ADC_TEXT+3,R0
	MOV	R0,DECIMALA+2
	ADD	R0,#030H				;TO CONVERT INTO TEXT
	MOV	ADC_TEXT+4,R0
	MOV	R0,DECIMALA+3
	ADD	R0,#030H				;TO CONVERT INTO TEXT
	MOV	ADC_TEXT+5,R0
	POP	R0
	RET
ADC_MSG_CHANNEL_PRINT:
	CALL	LCD_LOCATE21
	MOV	WR0,#MSG_CHANNEL
	MOV	PRINTF_MSG,WR0
	CALL	PRINTF
	RET
;-------------------------- DIGITAL TO ANALOG ROUTINES -----------------------
DAC_INI:
	MOV	R0,#000H
	MOV	DAC1_HIGH,R0
	MOV	R0,#000H
	MOV	DAC1_LOW,R0
	MOV	R0,#000H
	MOV	DAC2_HIGH,R0
	MOV	R0,#000H
	MOV	DAC2_LOW,R0
	MOV	R0,#000H
	MOV	DAC3_HIGH,R0
	MOV	R0,#000H
	MOV	DAC3_LOW,R0
	MOV	R0,#000H
	MOV	DAC4_HIGH,R0
	MOV	R0,#000H
	MOV	DAC4_LOW,R0
	CALL	DAC1_LOAD
	CALL	DAC2_LOAD
	CALL	DAC3_LOAD
	CALL	DAC4_LOAD
	CALL	DAC_UPDATE
	RET
DAC_UPDATE:
	CLR	DAC_HIGH.7
	SETB	DAC_HIGH.6
	CLR	DAC_HIGH.5
	CLR	DAC_HIGH.4
	CALL	DAC_SEND
	RET
DAC1_LOAD:
	;LOADS INPUT REGISTER OF DAC1, NOT DAC REGISTER.
	;CAN BE USED TO UPDATE ALL DACS TOGETHER AFTER LOADING THEM ALL.
	PUSH	R0
	MOV	R0,DAC1_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC1_LOW
	MOV	DAC_LOW,R0
	CLR	DAC_HIGH.7
	CLR	DAC_HIGH.6
	CLR	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC2_LOAD:
	;LOADS INPUT REGISTER OF DAC2, NOT DAC REGISTER
	;CAN BE USED TO UPDATE ALL DACS TOGETHER AFTER LOADING THEM ALL.
	PUSH	R0
	MOV	R0,DAC2_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC2_LOW
	MOV	DAC_LOW,R0
	CLR	DAC_HIGH.7
	SETB	DAC_HIGH.6
	CLR	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC3_LOAD:
	;LOADS INPUT REGISTER OF DAC3, NOT DAC REGISTER
	;CAN BE USED TO UPDATE ALL DACS TOGETHER AFTER LOADING THEM ALL.
	PUSH	R0
	MOV	R0,DAC3_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC3_LOW
	MOV	DAC_LOW,R0
	SETB	DAC_HIGH.7
	CLR	DAC_HIGH.6
	CLR	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC4_LOAD:
	;LOADS INPUT REGISTER OF DAC4, NOT DAC REGISTER
	;CAN BE USED TO UPDATE ALL DACS TOGETHER AFTER LOADING THEM ALL.
	PUSH	R0
	MOV	R0,DAC4_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC4_LOW
	MOV	DAC_LOW,R0
	SETB	DAC_HIGH.7
	SETB	DAC_HIGH.6
	CLR	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC1_UPDATE:;#@#
	;LOADS DAC1 VALUE AND UPDATES. IT IS FASTER THAN USING LOAD THEN UPDATE
	PUSH	R0
	MOV	R0,DAC1_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC1_LOW
	MOV	DAC_LOW,R0
	CLR	DAC_HIGH.7
	CLR	DAC_HIGH.6
	SETB	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC2_UPDATE:;#@#
	;LOADS DAC2 VALUE AND UPDATES. IT IS FASTER THAN USING LOAD THEN UPDATE
	PUSH	R0
	MOV	R0,DAC2_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC2_LOW
	MOV	DAC_LOW,R0
	CLR	DAC_HIGH.7
	SETB	DAC_HIGH.6
	SETB	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC3_UPDATE:;#@#
	;LOADS DAC3 VALUE AND UPDATES. IT IS FASTER THAN USING LOAD THEN UPDATE
	PUSH	R0
	MOV	R0,DAC3_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC3_LOW
	MOV	DAC_LOW,R0
	SETB	DAC_HIGH.7
	CLR	DAC_HIGH.6
	SETB	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC4_UPDATE:;#@#
	;LOADS DAC4 VALUE AND UPDATES. IT IS FASTER THAN USING LOAD THEN UPDATE
	PUSH	R0
	MOV	R0,DAC4_HIGH
	MOV	DAC_HIGH,R0
	MOV	R0,DAC4_LOW
	MOV	DAC_LOW,R0
	SETB	DAC_HIGH.7
	SETB	DAC_HIGH.6
	SETB	DAC_HIGH.5
	SETB	DAC_HIGH.4
	CALL	DAC_SEND
	POP	R0
	RET
DAC_SEND:
	PUSH	R2
	PUSH	WR0
	MOV	R0,DAC_HIGH
	MOV	R1,DAC_LOW
	CALL	DAC_CS_0
	MOV	R2,#010H
	REDAC_SEND:
	CALL	DAC_SCLK_0
	CALL	DAC_DIN_0
	SLL	WR0
	JNC	DATA_ZERO
	CALL	DAC_DIN_1
	DATA_ZERO:
	CALL	DAC_SCLK_1
	DEC	R2,#1
	JE	END_DAC_SEND
	JMP	REDAC_SEND
	END_DAC_SEND:
	CALL	DAC_SCLK_0
	CALL	DAC_CS_1
	POP	WR0
	POP	R2
	RET
DAC1_LEVEL_LOW:
	MOV	R0,#008H
	MOV	DAC1_HIGH,R0
	MOV	R0,#000H
	MOV	DAC1_LOW,R0
	CALL	DAC1_UPDATE
	RET
DAC1_LEVEL_HIGH:
	MOV	R0,#00FH
	MOV	DAC1_HIGH,R0
	MOV	R0,#0FFH
	MOV	DAC1_LOW,R0
	CALL	DAC1_UPDATE
	RET
DAC2_LEVEL_LOW:
	MOV	R0,#001H
	MOV	DAC2_HIGH,R0
	MOV	R0,#047H
	MOV	DAC2_LOW,R0
	CALL	DAC2_UPDATE
	RET
DAC2_LEVEL_HIGH:
	MOV	R0,#00FH
	MOV	DAC2_HIGH,R0
	MOV	R0,#0FFH
	MOV	DAC2_LOW,R0
	CALL	DAC2_UPDATE
	RET
DAC3_LEVEL_LOW:
	MOV	R0,#008H
	MOV	DAC3_HIGH,R0
	MOV	R0,#000H
	MOV	DAC3_LOW,R0
	CALL	DAC3_UPDATE
	RET
DAC3_LEVEL_HIGH:
	MOV	R0,#00FH
	MOV	DAC3_HIGH,R0
	MOV	R0,#0FFH
	MOV	DAC3_LOW,R0
	CALL	DAC3_UPDATE
	RET
DAC4_LEVEL_LOW:
	MOV	R0,#008H
	MOV	DAC4_HIGH,R0
	MOV	R0,#000H
	MOV	DAC4_LOW,R0
	CALL	DAC4_UPDATE
	RET
DAC4_LEVEL_HIGH:
	MOV	R0,#00FH
	MOV	DAC4_HIGH,R0
	MOV	R0,#0FFH
	MOV	DAC4_LOW,R0
	CALL	DAC4_UPDATE
	RET
;------------------------------ I2C ROUTINES ---------------------------------
I2C_INI:
	SETB	P3.4			;CALL	I2C_CLK_1
	SETB	P3.5			;CALL	I2C_D_1
	RET
I2C_CLK_0:
	CLR	P3.4
	RET
I2C_CLK_1:
	SETB	P3.4
	RET
I2C_D_0:
	CLR	P3.5
	RET
I2C_D_1:
	SETB	P3.5
	RET
I2C_START:
	CALL	I2C_CLK_1
	CALL	I2C_D_1
	CALL	I2C_D_0
	CALL	I2C_CLK_0
	RET
I2C_STOP:
	CALL	I2C_D_0
	CALL	I2C_CLK_1
	CALL	I2C_D_1
	RET
I2C_CLK_PULSE:
	CALL	I2C_CLK_1
	CALL	I2C_CLK_0
	RET
I2C_PULSE_0:
	CALL	I2C_D_0
	CALL	I2C_CLK_PULSE
	RET
I2C_PULSE_1:
	CALL	I2C_D_1
	CALL	I2C_CLK_PULSE
	RET
I2C_OPERATION_WRITE:
	PUSH	R0
	MOV	R0,I2C_SLAVE__ADD
	ANL	R0,#0xFE
	MOV	I2C_SLAVE__ADD,R0
	POP	R0
	RET
I2C_OPERATION_READ:
	PUSH	R0
	MOV	R0,I2C_SLAVE__ADD
	ORL	R0,#0x01
	MOV	I2C_SLAVE__ADD,R0
	POP	R0
	RET
I2C_CHR_SEND:
	;SENDS BYTE FOUND IN R0 TO I2C LINE
	PUSH	WR0
	MOV	R1,#09H
	REI2C_CHR_SEND:
	DEC	R1,#1
	JE	END_I2C_CHR_SEND
	SLL	R0
	JNC	I2C_CHR_SEND_BIT_ZERO
	CALL	I2C_PULSE_1
	JMP	REI2C_CHR_SEND
	I2C_CHR_SEND_BIT_ZERO:
	CALL	I2C_PULSE_0
	JMP	REI2C_CHR_SEND
	END_I2C_CHR_SEND:
	POP	WR0
	;WILL END WITH CLK 0, DATA 0/1
	RET
I2C_CHR_RECEIVE:
	;RECEIVES BYTE TO R0
	PUSH	R1
	CALL	I2C_D_1
	MOV	R1,#08H
	MOV	R0,#00H
	REI2C_CHR_RECEIVE:
	SLL	R0
	CLR	CY
	ORL	CY,P3.5
	JNC	I2C_CHR_RECEIVE_SRL
	ORL	R0,#01H
	I2C_CHR_RECEIVE_SRL:
	CALL	I2C_CLK_PULSE
	DEC	R1,#1
	JNE	REI2C_CHR_RECEIVE
	POP	R1
	RET
I2C_WRITE:
	;INPUT R0,R1. R0=ADDRESS R1=DATA TO I2C_SLAVE__ADD IC.
	CALL	I2C_OPERATION_WRITE
	CALL	I2C_START
	PUSH	R0
	MOV	R0,I2C_SLAVE__ADD
	CALL	I2C_CHR_SEND
	CALL	I2C_ACKNOWLEDGE
	POP	R0
	CALL	I2C_CHR_SEND
	CALL	I2C_ACKNOWLEDGE
	PUSH	R0
	MOV	R0,R1
	CALL	I2C_CHR_SEND
	POP	R0
	CALL	I2C_ACKNOWLEDGE
	CALL	I2C_STOP
	RET
I2C_READ:
	;READS DATA FROM ADD R0.RETURN DATA IS IN R1 FROM I2C_SLAVE__ADD IC.
	PUSH	R0
	PUSH	R0
	CALL	I2C_OPERATION_WRITE
	CALL	I2C_START
	MOV	R0,I2C_SLAVE__ADD
	CALL	I2C_CHR_SEND
	CALL	I2C_ACKNOWLEDGE
	POP	R0
	CALL	I2C_CHR_SEND
	CALL	I2C_ACKNOWLEDGE
	CALL	I2C_START
	CALL	I2C_OPERATION_READ
	MOV	R0,I2C_SLAVE__ADD
	CALL	I2C_CHR_SEND
	CALL	I2C_ACKNOWLEDGE
	CALL	I2C_CHR_RECEIVE
	CALL	I2C_CLK_PULSE
	CALL	I2C_STOP
	MOV	R1,R0
	POP	R0
	RET
I2C_ACKNOWLEDGE:
	PUSH	R0
	MOV	R0,#0x00
	CALL	I2C_D_1
	;JMP	I2CACKNOWLEDGEEND	;imad added oct-05-98 THIS BYPASSES ACKNOLEDGE
	REI2C_ACKNOWLEDGE:
	INC	R0,#1
	CPL	P1.2			;CALL WDT
	CMP	R0,#0xFF	;TRIES
	JE	I2CACKNOWLEDGEEND
	MOV	CY,P3.5
	JC	REI2C_ACKNOWLEDGE
	I2CACKNOWLEDGEEND:
	CALL	I2C_CLK_PULSE
;	CALL	I2C_D_1
	POP	R0
	RET
;----------------------- SERIAL EEPROM ROUTINES I2C --------------------------
EE_INI:
	;NOTE 24C04 USES 2 BANKS EACH 256 BYTES BANK0 & BANK1 SO
	;BEFORE WRITING TO EE BANK MUST BE CLARIFIED 0 OR 1
	;DEFAULT IS BANK0 AS A RULE ALWAYS WHEN DONE RETURN TO DEFAULT BANK0
	PUSH	R0
	MOV	R0,#0xAC
	MOV	EE_SLAVE__ADD,R0
	CALL	EE_BANK0
	POP	R0
	RET
EE_BANK0:;#@#
	PUSH	R0
	MOV	R0,EE_SLAVE__ADD
	ANL	R0,#0xFD
	MOV	EE_SLAVE__ADD,R0
	POP	R0
	RET
EE_BANK1:;#@#
	PUSH	R0
	MOV	R0,EE_SLAVE__ADD
	ORL	R0,#0x02
	MOV	EE_SLAVE__ADD,R0
	POP	R0
	RET
EE_WRITE:;#@#
	;WRITES BYTE TO I2C SERIAL EEPROM INPUTS: R0 ADD,R1 DATA
	PUSH	R2
	;CALL	LCD_LOCATE21
	;CALL	W_PRINT
	;CALL	R_PRINT
	;CALL	I_PRINT
	;CALL	T_PRINT
	;CALL	E_PRINT
	;CALL	COLON_PRINT
	;CALL	R0BCD2LCD
	;CALL	SPACE_PRINT
	;CALL	R1BCD2LCD
	MOV	R2,EE_SLAVE__ADD
	MOV	I2C_SLAVE__ADD,R2
	CALL	I2C_WRITE
	CALL	SLEEP2
	CALL	SLEEP10
	;CALL	BEEP
	POP	R2
	RET
EE_READ:;#@#
	;READS BYTE FROM I2C SERIAL EEPROM.INPUTS:R0 ,OUTPUT R1
	PUSH	R2
	MOV	R2,EE_SLAVE__ADD
	MOV	I2C_SLAVE__ADD,R2
	CALL	I2C_READ
	POP	R2
	RET
SERIALNUM_READ:
	;OUTPUT DR4 SERIALNUM. 4 BYTES R4 MSBYTE.
	PUSH	WR0
	MOV	R0,#EEADD_DEVICESERIALNUM
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	R4,R1
	INC	R0,#1
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	R5,R1
	INC	R0,#1
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	R6,R1
	INC	R0,#1
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	R7,R1
	POP	WR0
	RET
SERIALNUM_WRITE:
	;INPUT DR4 SERIALNUM R4 MSBYTE. 4 BYTES.
	PUSH	DR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_DEVICESERIALNUM
	MOV	R1,R4
	CALL	EE_WRITE
	INC	R0,#1
	MOV	R1,R5
	CALL	EE_WRITE
	INC	R0,#1
	MOV	R1,R6
	CALL	EE_WRITE
	INC	R0,#1
	MOV	R1,R7
	CALL	EE_WRITE
	POP	DR0
	RET
GENERAL_READ:
	;READS GENERAL FROM EE
	PUSH	WR0
	MOV	R0,#EEADD_GENERAL
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	GENERAL,R1
	POP	WR0
	RET
GENERAL_WRITE:
	;WRITES GENERAL TO EE
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_GENERAL
	MOV	R1,GENERAL
	CALL	EE_WRITE
	POP	WR0
	RET
UNITADD_READ:
	PUSH	WR0
	MOV	R0,#EEADD_UNITADD
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	UNITADD,R1
	POP	WR0
	RET
UNITADD_WRITE:
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_UNITADD
	MOV	R1,UNITADD
	MOV	SADDR,R1
	CALL	EE_WRITE
	POP	WR0
	RET
SERIAL_BAUD_READ:
	PUSH	WR0
	MOV	R0,#EEADD_SERIAL_BAUD
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	SERIAL_BAUD,R1
	POP	WR0
	RET
SERIAL_BAUD_WRITE:
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_SERIAL_BAUD
	MOV	R1,SERIAL_BAUD
	CALL	EE_WRITE
	POP	WR0
	RET
NETWORKADD_READ:
	PUSH	WR0
	MOV	R0,#EEADD_NETWORKADD
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	NETWORKADD,R1
	POP	WR0
	RET
NETWORKADD_WRITE:
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_NETWORKADD
	MOV	R1,NETWORKADD
	MOV	SADDR,R1
	CALL	EE_WRITE
	POP	WR0
	RET
WHEREFROM_READ:
	;RETURNS 1/2 INTO R1 1=ROM 2=FLASH
	PUSH	R0
	CALL	EE_BANK0
	MOV	R0,#EEADD_WHEREFROM
	CALL	EE_READ
	POP	R0
	RET
WHEREFROM_WRITEROM:
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_WHEREFROM
	MOV	R1,#1
	CALL	EE_WRITE
	POP	WR0
	RET
WHEREFROM_WRITEFLASH:
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_WHEREFROM
	MOV	R1,#2
	CALL	EE_WRITE
	POP	WR0
	RET
;------------------- PROGRAMMABLE INTERFACE TIMER 82C54--------------------
PIT_INI:
	MOV	R0,#080H
	MOV	CNT1_LOW,R0
	MOV	R0,#000H
	MOV	CNT1_HIGH,R0
	MOV	R0,#005H
	MOV	CNT2_LOW,R0
	MOV	R0,#000H
	MOV	CNT2_HIGH,R0
	CALL	PIT0_INI
	CALL	PIT1_INI
	CALL	PIT2_INI
	RET
PIT0_INI:
	PUSH	R0
	MOV	WR22,#PITSC_ADD
	MOV	R0,#034H			;MODE 2
	MOV	@DR20,R0
	MOV	WR22,#PIT0_ADD
	MOV	R0,#0FFH			;LEAST SIGNIFICANT BYTE
	MOV	@DR20,R0
	MOV	R0,#0FFH			;MOST SIGNIFICANT BYTE
	MOV	@DR20,R0
	CALL	ENB_RTI_1
	POP	R0
	RET
PIT1_INI:
	PUSH	R0
	MOV	WR22,#PITSC_ADD
	MOV	R0,#070H			;MODE 0
	MOV	@DR20,R0
	MOV	WR22,#PIT1_ADD
	MOV	R0,CNT1_LOW
	MOV	@DR20,R0
	MOV	R0,CNT1_HIGH
	MOV	@DR20,R0
	CALL	ENB_CNT1_1
	POP	R0
	RET
PIT2_INI:
	PUSH	R0
	MOV	WR22,#PITSC_ADD
	MOV	R0,#0B0H			;MODE 0
	MOV	@DR20,R0
	MOV	WR22,#PIT2_ADD
	MOV	R0,CNT2_LOW
	MOV	@DR20,R0
	MOV	R0,CNT2_HIGH
	MOV	@DR20,R0
	CALL	ENB_CNT2_1
	POP	R0
	RET
;---------------------------- GENERAL ROUTINES -------------------------------
WDT:
	CPL	P1.2	;CALL	WDT
	RET
CPU_LOOP:
	CPL	P1.2			;CALL WDT
	JMP	CPU_LOOP
CPU_RESET:
	JMP	CPU_RESET
TILLENTERSWISRELEASED:;#@#
	;SUB WILL WAIT FOR A MINIMUM SWITCH RELEASE TIME SPECIFIED IN STG 2->STG=20mS
	PUSH	WR0
	RETILLENTERRELEASED:
	CALL	STG_STOP
	CALL	KBSW_UPDATE
	JNB	KBSW.3,TILLENTERRELEASEDBONUS
	JMP	RETILLENTERRELEASED
	TILLENTERRELEASEDBONUS:
	MOV	WR0,#2	;20mS
	MOV	STG,WR0
	CALL	STG_RUN
	REDOTILLENTERRELEASED:
	CALL	KBSW_UPDATE
	JB	KBSW.3,RETILLENTERRELEASED
	JB	STGALPHA.6,REDOTILLENTERRELEASED
	POP	WR0
	RET
TILLUPSWISRELEASED:;#@#
	;SUB WILL WAIT FOR A MINIMUM SWITCH RELEASE TIME SPECIFIED IN STG 2->STG=20mS
	PUSH	WR0
	RETILLUPRELEASED:
	CALL	STG_STOP
	CALL	KBSW_UPDATE
	JNB	KBSW.4,TILLUPRELEASEDBONUS
	JMP	RETILLUPRELEASED
	TILLUPRELEASEDBONUS:
	MOV	WR0,#2	;20mS
	MOV	STG,WR0
	CALL	STG_RUN
	REDOTILLUPRELEASED:
	CALL	KBSW_UPDATE
	JB	KBSW.4,RETILLUPRELEASED
	JB	STGALPHA.6,REDOTILLUPRELEASED
	POP	WR0
	RET
TILLDOWNSWISRELEASED:;#@#
	;SUB WILL WAIT FOR A MINIMUM SWITCH RELEASE TIME SPECIFIED IN STG 2->STG=20mS
	PUSH	WR0
	RETILLDOWNRELEASED:
	CALL	STG_STOP
	CALL	KBSW_UPDATE
	JNB	KBSW.6,TILLDOWNRELEASEDBONUS
	JMP	RETILLDOWNRELEASED
	TILLDOWNRELEASEDBONUS:
	MOV	WR0,#2	;20mS
	MOV	STG,WR0
	CALL	STG_RUN
	REDOTILLDOWNRELEASED:
	CALL	KBSW_UPDATE
	JB	KBSW.6,RETILLDOWNRELEASED
	JB	STGALPHA.6,REDOTILLDOWNRELEASED
	POP	WR0
	RET
TILLRIGHTSWISRELEASED:;#@#
	;SUB WILL WAIT FOR A MINIMUM SWITCH RELEASE TIME SPECIFIED IN STG 2->STG=20mS
	PUSH	WR0
	RETILLRIGHTRELEASED:
	CALL	STG_STOP
	CALL	KBSW_UPDATE
	JNB	KBSW.5,TILLRIGHTRELEASEDBONUS
	JMP	RETILLRIGHTRELEASED
	TILLRIGHTRELEASEDBONUS:
	MOV	WR0,#2	;20mS
	MOV	STG,WR0
	CALL	STG_RUN
	REDOTILLRIGHTRELEASED:
	CALL	KBSW_UPDATE
	JB	KBSW.5,RETILLRIGHTRELEASED
	JB	STGALPHA.6,REDOTILLRIGHTRELEASED
	POP	WR0
	RET
TILLLEFTSWISRELEASED:;#@#
	;SUB WILL WAIT FOR A MINIMUM SWITCH RELEASE TIME SPECIFIED IN STG 2->STG=20mS
	PUSH	WR0
	RETILLLEFTRELEASED:
	CALL	STG_STOP
	CALL	KBSW_UPDATE
	JNB	KBSW.7,TILLLEFTRELEASEDBONUS
	JMP	RETILLLEFTRELEASED
	TILLLEFTRELEASEDBONUS:
	MOV	WR0,#2	;20mS
	MOV	STG,WR0
	CALL	STG_RUN
	REDOTILLLEFTRELEASED:
	CALL	KBSW_UPDATE
	JB	KBSW.7,RETILLLEFTRELEASED
	JB	STGALPHA.6,REDOTILLLEFTRELEASED
	POP	WR0
	RET
HEX_2X_EDIT:;#@#
	;SUB WILL EDIT 00-FF HEXADECIMAL RETURN IN R0,INITIAL INPUT IS R0
	PUSH	R1
	PUSH	R2
	PUSH	WR4
	CALL	TILLENTERSWISRELEASED
	MOV	R1,#0
	MOV	R2,#0
	CALL	R0BCD2LCD
	CALL	H_PRINT
	REHEX2XEDIT:
	MOV	WR4,#50		;SLOW TIME X10mS
	MOV	STG,WR4
	CALL	KBSW_UPDATE
	JB	KBSW.4,HEX2XEDITINC
	JB	KBSW.6,HEX2XEDITDEC
	JB	KBSW.3,LONGHEX2XEDITEND
	JB	KBSW.4,PASSHEX2XEDITCLRR1
	MOV	R1,#0
	PASSHEX2XEDITCLRR1:
	JMP	PASSLONGHEX2XEDITEND
	LONGHEX2XEDITEND:
	JMP	HEX2XEDITEND
	PASSLONGHEX2XEDITEND:
	JB	KBSW.6,PASSHEX2XEDITCLRR2
	MOV	R2,#0
	PASSHEX2XEDITCLRR2:
	JMP	REHEX2XEDIT
	HEX2XEDITINC:;---
	CALL	SPEAKER_RUNTIME10
	CALL	PLAY1700
	MOV	R2,#0
	CMP	R1,#5		;AFTER SUCH LOOPS STG CHANGES TO FASTER LOOPING
	JNE	SLOWHEX2XEDITINC
	MOV	WR4,#4		;FAST TIME X10mS
	MOV	STG,WR4
	DEC	R1,#1
	SLOWHEX2XEDITINC:
	INC	R1,#1
	INC	R0,#1
	CALL	LCD_LOCATION_DEC
	CALL	LCD_LOCATION_DEC
	CALL	LCD_LOCATION_DEC
	CALL	R0BCD2LCD
	CALL	H_PRINT
	CALL	STG_RUN
	REHEX2XEDITINC:
	CALL	KBSW_UPDATE
	JNB	KBSW.4,LONGREHEX2XEDIT1
	JB	STGALPHA.6,REHEX2XEDITINC
	LONGREHEX2XEDIT1:
	JMP	REHEX2XEDIT
	HEX2XEDITDEC:;---
	CALL	SPEAKER_RUNTIME10
	CALL	PLAY1500
	MOV	R1,#0
	CMP	R2,#5		;AFTER SUCH LOOPS STG CHANGES TO FASTER LOOPING
	JNE	SLOWHEX2XEDITDEC
	MOV	WR4,#4		;FAST TIME X10mS
	MOV	STG,WR4
	DEC	R2,#1
	SLOWHEX2XEDITDEC:
	INC	R2,#1
	DEC	R0,#1
	CALL	LCD_LOCATION_DEC
	CALL	LCD_LOCATION_DEC
	CALL	LCD_LOCATION_DEC
	CALL	R0BCD2LCD
	CALL	H_PRINT
	CALL	STG_RUN
	REHEX2XEDITDEC:
	CALL	KBSW_UPDATE
	JNB	KBSW.6,LONGREHEX2XEDIT2
	JB	STGALPHA.6,REHEX2XEDITDEC
	LONGREHEX2XEDIT2:
	JMP	REHEX2XEDIT
	HEX2XEDITEND:
	POP	WR4
	POP	R2
	POP	R1
	RET
SLEEP6MS:
	;6 MICRO SECOND DELAY AT XTAL 14.7456MHZ
	PUSH	R0
	MOV	R0,#0x07
	RESLEEP6MS:
	DEC	R0,#1
	JNE RESLEEP6MS
	POP	R0
	RET
SLEEP10MS:
	;10 MICRO SECOND DELAY AT XTAL 14.7456MHZ
	PUSH	R0
	MOV	R0,#0x0B	;IMAD CHECK
	RESLEEP10MS:
	DEC	R0,#1
	JNE RESLEEP10MS
	POP	R0
	RET
SLEEP:;#@#
	;SUB WAITS FOR A SPECIFIED TIME STORED IN WR0 AND RETURNS AFTER TIME ENDS IN mS
	MOV	STB,WR0
	SETB	STGALPHA.1	;STB_RUN
	MOV	WR0,#0
	RESLEEP:
	CPL	P1.2			;CALL WDT
	CMP	WR0,STB
	JNE	RESLEEP
	RET
SLEEP1:;#@#
	;SUB WAITS FOR 1 TIMER0 INTURRUPT IN THIS CASE 1mS FOR FB33H INTO TH0 AND TL0
	PUSH	WR0
	MOV	WR0,#1D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP2:;#@#
	PUSH	WR0
	MOV	WR0,#2D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP3:;#@#
	PUSH	WR0
	MOV	WR0,#3D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP4:;#@#
	PUSH	WR0
	MOV	WR0,#4D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP5:;#@#
	PUSH	WR0
	MOV	WR0,#5D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP6:;#@#
	PUSH	WR0
	MOV	WR0,#6D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP7:;#@#
	PUSH	WR0
	MOV	WR0,#7D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP8:;#@#
	PUSH	WR0
	MOV	WR0,#8D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP9:;#@#
	PUSH	WR0
	MOV	WR0,#9D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP10:;#@#
	PUSH	WR0
	MOV	WR0,#10D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP20:;#@#
	PUSH	WR0
	MOV	WR0,#20D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP30:;#@#
	PUSH	WR0
	MOV	WR0,#30D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP40:;#@#
	PUSH	WR0
	MOV	WR0,#40D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP50:;#@#
	PUSH	WR0
	MOV	WR0,#50D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP60:;#@#
	PUSH	WR0
	MOV	WR0,#60D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP70:;#@#
	PUSH	WR0
	MOV	WR0,#70D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP80:;#@#
	PUSH	WR0
	MOV	WR0,#80D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP90:;#@#
	PUSH	WR0
	MOV	WR0,#90D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP100:;#@#
	PUSH	WR0
	MOV	WR0,#100D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP200:;#@#
	PUSH	WR0
	MOV	WR0,#200D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP300:;#@#
	PUSH	WR0
	MOV	WR0,#300D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP400:;#@#
	PUSH	WR0
	MOV	WR0,#400D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP500:;#@#
	PUSH	WR0
	MOV	WR0,#500D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP600:;#@#
	PUSH	WR0
	MOV	WR0,#600D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP700:;#@#
	PUSH	WR0
	MOV	WR0,#700D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP800:;#@#
	PUSH	WR0
	MOV	WR0,#800D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP900:;#@#
	PUSH	WR0
	MOV	WR0,#900D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP1000:;#@#
	PUSH	WR0
	MOV	WR0,#1000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP2000:;#@#
	PUSH	WR0
	MOV	WR0,#2000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP3000:;#@#
	PUSH	WR0
	MOV	WR0,#3000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP4000:;#@#
	PUSH	WR0
	MOV	WR0,#4000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP5000:;#@#
	PUSH	WR0
	MOV	WR0,#5000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP6000:;#@#
	PUSH	WR0
	MOV	WR0,#6000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP7000:;#@#
	PUSH	WR0
	MOV	WR0,#7000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP8000:;#@#
	PUSH	WR0
	MOV	WR0,#8000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP9000:;#@#
	PUSH	WR0
	MOV	WR0,#9000D
	CALL	SLEEP
	POP	WR0
	RET
SLEEP10000:;#@#
	PUSH	WR0
	MOV	WR0,#10000D
	CALL	SLEEP
	POP	WR0
	RET
BEEP_ON_CY:
	JNC	CY_0
	CALL	SPEAKER_RUNTIME500
	CALL	PLAY1500
	JMP	CY_END
	CY_0:
	CY_END:
	RET
D1_ON_CY:
	JNC	D1_ON_CY_OFF
	CALL	D1_ON
	CALL	N1_PRINT
	JMP	D1_ON_CY_END
	D1_ON_CY_OFF:
	CALL	D1_OFF
	CALL	N0_PRINT
	D1_ON_CY_END:
	RET
STEP:
	;USED TO STEP A PROCESS USING A PHISICAL SWITCH TO CONTROL THE PROCESS
	PUSH	R0
	RESTEP0:
      CALL  KBSW_UPDATE
	CPL	P1.2			;CALL WDT
      MOV   R0,KBSW	; <- SWITCH
	ANL	R0,#080H
	JE	RESTEP0
	RESTEP1:
      CALL  KBSW_UPDATE
	CPL	P1.2			;CALL WDT
      MOV   R0,KBSW	; <- SWITCH
	ANL	R0,#080H
	JNE	RESTEP1
	POP	R0
	RET
DECIMALA_MUL10:
	;MULTIBLY X10
	PUSH	R0
	MOV	R0,DECIMALA+1
	MOV	DECIMALA+0,R0
	MOV	R0,DECIMALA+2
	MOV	DECIMALA+1,R0
	MOV	R0,DECIMALA+3
	MOV	DECIMALA+2,R0
	MOV	R0,DECIMALA+4
	MOV	DECIMALA+3,R0
	MOV	R0,DECIMALA+5
	MOV	DECIMALA+4,R0
	MOV	R0,DECIMALA+6
	MOV	DECIMALA+5,R0
	MOV	R0,DECIMALA+7
	MOV	DECIMALA+6,R0
	MOV	R0,DECIMALA+8
	MOV	DECIMALA+7,R0
	MOV	R0,DECIMALA+9
	MOV	DECIMALA+8,R0
	MOV	R0,DECIMALA+10
	MOV	DECIMALA+9,R0
	MOV	R0,DECIMALA+11
	MOV	DECIMALA+10,R0
	MOV	R0,#00H
	MOV	DECIMALA+11,R0
	POP	R0
	RET
DECIMALA_DIV10:
	;	DEVIDE BY 10
	PUSH	R0
	MOV	R0,DECIMALA+10
	MOV	DECIMALA+11,R0
	MOV	R0,DECIMALA+9
	MOV	DECIMALA+10,R0
	MOV	R0,DECIMALA+8
	MOV	DECIMALA+9,R0
	MOV	R0,DECIMALA+7
	MOV	DECIMALA+8,R0
	MOV	R0,DECIMALA+6
	MOV	DECIMALA+7,R0
	MOV	R0,DECIMALA+5
	MOV	DECIMALA+6,R0
	MOV	R0,DECIMALA+4
	MOV	DECIMALA+5,R0
	MOV	R0,DECIMALA+3
	MOV	DECIMALA+4,R0
	MOV	R0,DECIMALA+2
	MOV	DECIMALA+3,R0
	MOV	R0,DECIMALA+1
	MOV	DECIMALA+2,R0
	MOV	R0,DECIMALA+0
	MOV	DECIMALA+1,R0
	MOV	R0,#00H
	MOV	DECIMALA+0,R0
	POP	R0
	RET
DECIMALA_PRINT:
	PUSH	WR0
	MOV	WR18,#DECIMALA
	MOV	WR22,#LCDWRITE_ADD
	MOV	R1,#0DH	;#0B	= 10 DIGITS
	REDECIMALA_PRINT:
	MOV	R0,@DR16
	;SUB	R1,#6				;	ALL
	;JNE	PASS_DOTPRINT		;	THESE
	;CALL	DOT_PRINT
	;PASS_DOTPRINT:			;	DOT
	;ADD	R1,#6				;	AT LOCATION 5
	DEC	R1,#1
	JE	ENDDECIMALA_PRINT
	CALL	LCDREADY
	ADD	R0,#030H				;TO CONVERT INTO TEXT
	MOV	@DR20,R0
	INC	WR18,#1
	JMP	REDECIMALA_PRINT
	ENDDECIMALA_PRINT:
	POP	WR0
	RET
DECIMALA_INC:
	;SUB ADDS 1 TO DECIMALA ASSUMES INTEGER NUMBER IN DECIMALA
	;[DECIMALA+9] IS THE LEAST SIGNIFICANT DIGIT
	PUSH R0
	CALL	DECIMALB_CLR
	MOV	R0,#1
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD
	POP	R0
	RET
DECIMALA_DEC:
	;SUB SUBTRACTS 1 FROM DECIMALA. ASSUMES INTEGER NUMBER IN DECIMALA
	;[DECIMALA+9] IS THE LEAST SIGNIFICANT DIGIT ASSUMES DECIMALA >= 1
	PUSH R0
	CALL	DECIMALB_CLR
	MOV	R0,#1
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_SUB
	POP	R0
	RET
DECIMALA2X2LCD:
	;THE LOWEST 2 BYTES DECIMALA+6,DECIMALA+7 ARE COMBINED THEN -> LCD
	;EX. 08 09 -> BECOMES 89
	PUSH	WR0
	MOV	R0,DECIMALA+10
	MOV	R1,DECIMALA+11
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	POP	WR0
	RET
DECIMAL_ADD:
	;	ADDING 2 DICIMAL VALUES IN RAM LOCATION DECIMALA & DECIMALB
	;	RESULT IS IN DECIMALA MAXIMUM RESULT IS 12 DIGITS
	PUSH	R2
	PUSH	WR0
	MOV	R2,#00H
	MOV	R1,DECIMALA+11D
	MOV	R0,DECIMALB+11D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+11,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+10D
	MOV	R0,DECIMALB+10D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+10,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+9D
	MOV	R0,DECIMALB+9D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+9,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+8D
	MOV	R0,DECIMALB+8D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+8,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+7D
	MOV	R0,DECIMALB+7D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+7,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+6D
	MOV	R0,DECIMALB+6D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+6,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+5D
	MOV	R0,DECIMALB+5D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+5,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+4D
	MOV	R0,DECIMALB+4D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+4,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+3D
	MOV	R0,DECIMALB+3D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+3,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+2D
	MOV	R0,DECIMALB+2D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+2,R1
	MOV	R2,R0
	MOV	R1,DECIMALA+1D
	MOV	R0,DECIMALB+1D
	CALL	ADD_2DIGITS
	MOV	DECIMALA+1,R1
	MOV	DECIMALA+0,R0
	POP	WR0
	POP	R2
	RET
DECIMAL_SUB:
	;SUBROUTINE SUBTRACTS DECIMALA-DECIMALB = A-B 
	;RESULT IS IN DECIMALA MAXIMUM RESULT IS 10 DIGITS A IS ASSUMED TO BE 
	;BIGGER THAN B OTHERWISE 2'S COMPLEMENT IS STORED IN DECIMALA
	PUSH	WR0
	MOV	R0,DECIMALA+11D
	MOV	R1,DECIMALB+11D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+11,R0
	MOV	R0,DECIMALA+10D
	SUB	R0,R1
	MOV	DECIMALA+10D,R0
	MOV	R0,DECIMALA+10D
	MOV	R1,DECIMALB+10D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+10,R0
	MOV	R0,DECIMALA+9D
	SUB	R0,R1
	MOV	DECIMALA+9D,R0
	MOV	R0,DECIMALA+9D
	MOV	R1,DECIMALB+9D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+9,R0
	MOV	R0,DECIMALA+8D
	SUB	R0,R1
	MOV	DECIMALA+8D,R0
	MOV	R0,DECIMALA+8D
	MOV	R1,DECIMALB+8D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+8,R0
	MOV	R0,DECIMALA+7D
	SUB	R0,R1
	MOV	DECIMALA+7D,R0
	MOV	R0,DECIMALA+7D
	MOV	R1,DECIMALB+7D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+7,R0
	MOV	R0,DECIMALA+6D
	SUB	R0,R1
	MOV	DECIMALA+6D,R0
	MOV	R0,DECIMALA+6D
	MOV	R1,DECIMALB+6D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+6,R0
	MOV	R0,DECIMALA+5D
	SUB	R0,R1
	MOV	DECIMALA+5D,R0
	MOV	R0,DECIMALA+5D
	MOV	R1,DECIMALB+5D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+5,R0
	MOV	R0,DECIMALA+4D
	SUB	R0,R1
	MOV	DECIMALA+4D,R0
	MOV	R0,DECIMALA+4D
	MOV	R1,DECIMALB+4D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+4,R0
	MOV	R0,DECIMALA+3D
	SUB	R0,R1
	MOV	DECIMALA+3D,R0
	MOV	R0,DECIMALA+3D
	MOV	R1,DECIMALB+3D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+3,R0
	MOV	R0,DECIMALA+2D
	SUB	R0,R1
	MOV	DECIMALA+2D,R0
	MOV	R0,DECIMALA+2D
	MOV	R1,DECIMALB+2D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+2,R0
	MOV	R0,DECIMALA+1D
	SUB	R0,R1
	MOV	DECIMALA+1D,R0
	MOV	R0,DECIMALA+1D
	MOV	R1,DECIMALB+1D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+1,R0
	MOV	R0,DECIMALA+0D
	SUB	R0,R1
	MOV	DECIMALA+0D,R0
	MOV	R0,DECIMALA+0D
	MOV	R1,DECIMALB+0D
	CALL	SUB_2DIGITS
	MOV	DECIMALA+0,R0
	POP	WR0
	RET
ADD_2DIGITS:
	;	ADDS 2 DECIMAL DIGITS AND CARRY. INPUTS ARE: R0=FIRST DIGIT,
	;	R1=SECOND DIGIT, R2=CARRY
	;	RESULT IS IN R0 & R1. R0 =MSD MOST SIGNIFICANT DIGIT, R1=LSD.
	PUSH	R3
	MOV	R3,R0
	MOV	R0,#0
	READD_2DIGITS:
	INC	R3,#1
	DEC	R3,#1
	JE	CHECK_CARRY
	DEC	R3,#1
	SUB	R1,#9			;CHECKING R1 IS = 9
	JE	R1_IS_9
	ADD	R1,#10D
	JMP	READD_2DIGITS
	R1_IS_9:
	MOV	R0,#1
	MOV	R1,#0
	JMP	READD_2DIGITS
	CHECK_CARRY:
	INC	R2,#1
	DEC	R2,#1
	JE	CARRY_IS_ZERO
	SUB	R1,#9
	JE	R1_IS_9_AGAIN
	ADD	R1,#10
	JMP	CARRY_IS_ZERO
	R1_IS_9_AGAIN:
	INC	R0,#1
	MOV	R1,#0
	CARRY_IS_ZERO:
	POP	R3
	RET
SUB_2DIGITS:
	;R0-R1 RESULT IN R0 IF THERE IS BORROW THEN R1=1 OTHERWISE IT IS 0.
	CMP	R0,R1
	JG	SUB2DIGITSPOS
	JE	SUB2DIGITSPOS
	ADD	R0,#0x0A
	SUB	R0,R1
	MOV	R1,#1
	JMP	ENDOFSUB2DIGITS
	SUB2DIGITSPOS:
	SUB	R0,R1
	MOV	R1,#0
	ENDOFSUB2DIGITS:
	RET
DECIMALA_CLR:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALA+11,R0
	MOV	DECIMALA+10,R0
	MOV	DECIMALA+9,R0
	MOV	DECIMALA+8,R0
	MOV	DECIMALA+7,R0
	MOV	DECIMALA+6,R0
	MOV	DECIMALA+5,R0
	MOV	DECIMALA+4,R0
	MOV	DECIMALA+3,R0
	MOV	DECIMALA+2,R0
	MOV	DECIMALA+1,R0
	MOV	DECIMALA+0,R0
	POP	R0
	RET
DECIMALB_CLR:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+11,R0
	MOV	DECIMALB+10,R0
	MOV	DECIMALB+9,R0
	MOV	DECIMALB+8,R0
	MOV	DECIMALB+7,R0
	MOV	DECIMALB+6,R0
	MOV	DECIMALB+5,R0
	MOV	DECIMALB+4,R0
	MOV	DECIMALB+3,R0
	MOV	DECIMALB+2,R0
	MOV	DECIMALB+1,R0
	MOV	DECIMALB+0,R0
	POP	R0
	RET
HEXCHR_PRINT:
	;IMAD
	;INPUT IS R0 VALUE 0b00000000-0b00001111 WILL BE PRINTED AS 0-F 
	CMP	R0,#0X09
	JG	HEXCHRGT9
	ADD	R0,#"0"		;0x30
	CALL	R02LCD
	JMP	ENDHEXCHRPRINT
	HEXCHRGT9:
	ADD	R0,#"0"+0X07		;0x10
	CALL	R02LCD
	ENDHEXCHRPRINT:
	RET
R02LCD:;#@#
	;PRINTES CHAR. FOUND IN R0 TO LCD
	MOV	WR22,#LCDWRITE_ADD
	CALL	LCDREADY
	MOV	@DR20,R0
	RET
HEX2LCD:
	;IMAD
	;HEXLOW AS BCD TO LCD i.e IF HEXLOW=255 THEN FF IS SEND TO LCD
	PUSH	R0
	MOV	R0,HEXLOW
	CALL	R0BCD2LCD
	POP	R0
	RET
R0DECODEAH:;#@#
	;R0 INPUT RANGE 0~7 OUTPUT IS 00000001, ..., 01000000,10000000 AH=ACTIVE HIGH
	CMP	R0,#0
	JNE	R0DECODEAH1
	MOV	R0,#0x01
	JMP	R0DECODEAHEND
	R0DECODEAH1:
	CMP	R0,#1
	JNE	R0DECODEAH2
	MOV	R0,#0x02
	JMP	R0DECODEAHEND
	R0DECODEAH2:
	CMP	R0,#2
	JNE	R0DECODEAH3
	MOV	R0,#0x04
	JMP	R0DECODEAHEND
	R0DECODEAH3:
	CMP	R0,#3
	JNE	R0DECODEAH4
	MOV	R0,#0x08
	JMP	R0DECODEAHEND
	R0DECODEAH4:
	CMP	R0,#4
	JNE	R0DECODEAH5
	MOV	R0,#0x10
	JMP	R0DECODEAHEND
	R0DECODEAH5:
	CMP	R0,#5
	JNE	R0DECODEAH6
	MOV	R0,#0x20
	JMP	R0DECODEAHEND
	R0DECODEAH6:
	CMP	R0,#6
	JNE	R0DECODEAH7
	MOV	R0,#0x40
	JMP	R0DECODEAHEND
	R0DECODEAH7:
	CMP	R0,#7
	JNE	R0DECODEAHEND
	MOV	R0,#0x80
	R0DECODEAHEND:
	RET
R0DECODEAL:;#@#
	;R0 INPUT RANGE 0~7 OUTPUT IS 11111110, ..., 10111111,01111111 AL=ACTIVE LOW
	CALL	R0DECODEAH
	XRL	R0,#0xFF
	RET
R0BCD2LCD:;#@#
	;R0 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	WR0
	MOV	R1,R0
	ANL	R0,#0xF0
	ANL	R1,#0x0F
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	CALL	HEXCHR_PRINT
	MOV	R0,R1
	CALL	HEXCHR_PRINT
	POP	WR0
	RET
R1BCD2LCD:;#@#
	;R1 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R1
	CALL	R0BCD2LCD
	POP	R0
	RET
R2BCD2LCD:;#@#
	;R2 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R2
	CALL	R0BCD2LCD
	POP	R0
	RET
R3BCD2LCD:;#@#
	;R3 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R3
	CALL	R0BCD2LCD
	POP	R0
	RET
R4BCD2LCD:;#@#
	;R4 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R4
	CALL	R0BCD2LCD
	POP	R0
	RET
R5BCD2LCD:;#@#
	;R5 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R5
	CALL	R0BCD2LCD
	POP	R0
	RET
R6BCD2LCD:;#@#
	;R6 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R6
	CALL	R0BCD2LCD
	POP	R0
	RET
R7BCD2LCD:;#@#
	;R7 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R7
	CALL	R0BCD2LCD
	POP	R0
	RET
R8BCD2LCD:;#@#
	;R8 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R8
	CALL	R0BCD2LCD
	POP	R0
	RET
R9BCD2LCD:;#@#
	;R9 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R9
	CALL	R0BCD2LCD
	POP	R0
	RET
R10BCD2LCD:;#@#
	;R10 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R10
	CALL	R0BCD2LCD
	POP	R0
	RET
R11BCD2LCD:;#@#
	;R11 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R11
	CALL	R0BCD2LCD
	POP	R0
	RET
R12BCD2LCD:;#@#
	;R12 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R12
	CALL	R0BCD2LCD
	POP	R0
	RET
R13BCD2LCD:;#@#
	;R13 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R13
	CALL	R0BCD2LCD
	POP	R0
	RET
R14BCD2LCD:;#@#
	;R14 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R14
	CALL	R0BCD2LCD
	POP	R0
	RET
R15BCD2LCD:;#@#
	;R15 CONTAINS BCD VALUE TO BE PRINTED TO LCD AS HEX REPRESENTATION i.e F8
	PUSH	R0
	MOV	R0,R15
	CALL	R0BCD2LCD
	POP	R0
	RET
CBCD2BIN:;#@#
	;CONVERTS BCD VALUE STORED IN R0 TO BINARY VALUE RETURN IN R0 Ex. INPUT 48 -> OUTPUT 30
	PUSH	WR2
	MOV	R2,R0
	MOV	R3,R0
	ANL	R2,#0xF0
	SRL	R2
	SRL	R2
	SRL	R2
	SRL	R2
	ANL	R3,#0x0F
	MOV	R0,#00
	INC	R2,#1
	RECBCD2BIN:	
	DEC	R2,#1
	CMP	R2,#00
	JE	ENDOFCBCD2BINADD10
	ADD	R0,#0x0A
	JMP	RECBCD2BIN
	ENDOFCBCD2BINADD10:
	ADD	R0,R3
	POP	WR2
	RET
CBIN2BCD:
	;R0 INPUT ,R0 OUTPUT
	;CONVERTS BIN VALUE STORED IN R0 TO BCD VALUE RETURN IN R0 Ex. INPUT 30 -> OUTPUT 48
	;THE LOWEST 2 BYTES DECIMALA+10,DECIMALA+11 ARE COMBINED
	;EX. 08 09 -> BECOMES 89
	PUSH	R1
	MOV	HEXLOW,R0
	MOV	R0,#00
	MOV	HEXHIGH,R0
	CALL	HEX2DECIMAL
	MOV	R0,DECIMALA+10
	MOV	R1,DECIMALA+11
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	POP	R1
	RET
HEX2DECIMAL:
	; CONVERTS 2 BYTE UNSIGNED HEXADECIMAL INTO DECIMAL VALUES
	; INPUT IS HEXHIGH AND HEXLOW. OUTPUT IS DECIMALA
	PUSH	WR0
	CALL	DECIMALA_CLR
	CALL	DECIMALB_CLR
	MOV	R0,HEXHIGH
	MOV	R1,HEXLOW
	SLL	WR0
	JNC	HEX2DECIMALBITE
	CALL	ACCUMULATE_32768
	HEX2DECIMALBITE:
	SLL	WR0
	JNC	HEX2DECIMALBITD
	CALL	ACCUMULATE_16384
	HEX2DECIMALBITD:
	SLL	WR0
	JNC	HEX2DECIMALBITC
	CALL	ACCUMULATE_8192
	HEX2DECIMALBITC:
	SLL	WR0
	JNC	HEX2DECIMALBITB
	CALL	ACCUMULATE_4096
	HEX2DECIMALBITB:
	SLL	WR0
	JNC	HEX2DECIMALBITA
	CALL	ACCUMULATE_2048
	HEX2DECIMALBITA:
	SLL	WR0
	JNC	HEX2DECIMALBIT9
	CALL	ACCUMULATE_1024
	HEX2DECIMALBIT9:
	SLL	WR0
	JNC	HEX2DECIMALBIT8
	CALL	ACCUMULATE_512
	HEX2DECIMALBIT8:
	SLL	WR0
	JNC	HEX2DECIMALBIT7
	CALL	ACCUMULATE_256
	HEX2DECIMALBIT7:
	SLL	WR0
	JNC	HEX2DECIMALBIT6
	CALL	ACCUMULATE_128
	HEX2DECIMALBIT6:
	SLL	WR0
	JNC	HEX2DECIMALBIT5
	CALL	ACCUMULATE_64
	HEX2DECIMALBIT5:
	SLL	WR0
	JNC	HEX2DECIMALBIT4
	CALL	ACCUMULATE_32
	HEX2DECIMALBIT4:
	SLL	WR0
	JNC	HEX2DECIMALBIT3
	CALL	ACCUMULATE_16
	HEX2DECIMALBIT3:
	SLL	WR0
	JNC	HEX2DECIMALBIT2
	CALL	ACCUMULATE_8
	HEX2DECIMALBIT2:
	SLL	WR0
	JNC	HEX2DECIMALBIT1
	CALL	ACCUMULATE_4
	HEX2DECIMALBIT1:
	SLL	WR0
	JNC	HEX2DECIMALBIT0
	CALL	ACCUMULATE_2
	HEX2DECIMALBIT0:
	SLL	WR0
	JNC	END_HEX2DECIMAL
	CALL	ACCUMULATE_1
	END_HEX2DECIMAL:
	POP	WR0
	RET
ACCUMULATE_32768:
	PUSH	R0
	MOV	R0,#3
	MOV	DECIMALB+7,R0
	MOV	R0,#2
	MOV	DECIMALB+8,R0
	MOV	R0,#7
	MOV	DECIMALB+9,R0
	MOV	R0,#6
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_16384:
	PUSH	R0
	MOV	R0,#1
	MOV	DECIMALB+7,R0
	MOV	R0,#6
	MOV	DECIMALB+8,R0
	MOV	R0,#3
	MOV	DECIMALB+9,R0
	MOV	R0,#8
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_8192:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#8
	MOV	DECIMALB+8,R0
	MOV	R0,#1
	MOV	DECIMALB+9,R0
	MOV	R0,#9
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_4096:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#4
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#9
	MOV	DECIMALB+10,R0
	MOV	R0,#6
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_2048:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#2
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#4
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_1024:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#1
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#2
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_512:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#5
	MOV	DECIMALB+9,R0
	MOV	R0,#1
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_256:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#2
	MOV	DECIMALB+9,R0
	MOV	R0,#5
	MOV	DECIMALB+10,R0
	MOV	R0,#6
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_128:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#1
	MOV	DECIMALB+9,R0
	MOV	R0,#2
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_64:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#6
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_32:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#3
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_16:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#1
	MOV	DECIMALB+10,R0
	MOV	R0,#6
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_8:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_4:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_2:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_1:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#1
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
;------------------------------------TESTING ROUTINES-------------------------
DEMO1:;#@#
	CALL	BEEP
	CALL	D1_ON
	CALL	D2_ON
	CALL	D3_ON
	CALL	D4_ON
	CALL	Y16_ON
	CALL	SLEEP200
	CALL	D1_OFF
	CALL	D2_OFF
	CALL	D3_OFF
	CALL	D4_OFF
	CALL	Y16_OFF
	CALL	SLEEP200
	CALL	D1_ON
	CALL	D2_ON
	CALL	D3_ON
	CALL	D4_ON
	CALL	Y16_ON
	CALL	SLEEP200
	CALL	D1_OFF
	CALL	D2_OFF
	CALL	D3_OFF
	CALL	D4_OFF
	CALL	Y16_OFF
	CALL	SLEEP200
	CALL	D1_ON
	CALL	D2_ON
	CALL	D3_ON
	CALL	D4_ON
	CALL	Y16_ON
	CALL	SLEEP200
	CALL	D1_OFF
	CALL	D2_OFF
	CALL	D3_OFF
	CALL	D4_OFF
	CALL	Y16_OFF
	CALL	SLEEP200
	CALL	D1_ON
	CALL	D2_ON
	CALL	D3_ON
	CALL	D4_ON
	CALL	Y16_ON
	CALL	SLEEP200
	CALL	D1_OFF
	CALL	D2_OFF
	CALL	D3_OFF
	CALL	D4_OFF
	CALL	Y16_OFF
	CALL	SLEEP200
	RET
DEMO2:;#@#
	CALL	D4_OFF
	CALL	D1_ON
	CALL	Y16_OFF
	CALL	Y1_ON
	CALL	SLEEP100
	CALL	Y1_OFF
	CALL	Y2_ON
	CALL	SLEEP100
	CALL	Y2_OFF
	CALL	Y3_ON
	CALL	SLEEP100
	CALL	Y3_OFF
	CALL	Y4_ON
	CALL	SLEEP100
	CALL	D1_OFF
	CALL	D2_ON
	CALL	Y4_OFF
	CALL	Y5_ON
	CALL	SLEEP100
	CALL	Y5_OFF
	CALL	Y6_ON
	CALL	SLEEP100
	CALL	Y6_OFF
	CALL	Y7_ON
	CALL	SLEEP100
	CALL	Y7_OFF
	CALL	Y8_ON
	CALL	SLEEP100
	CALL	D2_OFF
	CALL	D3_ON
	CALL	Y8_OFF
	CALL	Y9_ON
	CALL	SLEEP100
	CALL	Y9_OFF
	CALL	Y10_ON
	CALL	SLEEP100
	CALL	Y10_OFF
	CALL	Y11_ON
	CALL	SLEEP100
	CALL	Y11_OFF
	CALL	Y12_ON
	CALL	SLEEP100
	CALL	D3_OFF
	CALL	D4_ON
	CALL	Y12_OFF
	CALL	Y13_ON
	CALL	SLEEP100
	CALL	Y13_OFF
	CALL	Y14_ON
	CALL	SLEEP100
	CALL	Y14_OFF
	CALL	Y15_ON
	CALL	SLEEP100
	CALL	Y15_OFF
	CALL	Y16_ON
	CALL	SLEEP100
	CALL	Y16_OFF
	CALL	D4_OFF
	RET
TEST_ADD5:
	PUSH	R0
	MOV	R0,#9
	MOV	DECIMALA+6,R0
	MOV	R0,#9
	MOV	DECIMALA+5,R0
	MOV	R0,#9
	MOV	DECIMALA+4,R0
	MOV	R0,#9
	MOV	DECIMALA+3,R0
	MOV	R0,#8
	MOV	DECIMALA+2,R0
	;--------------------
	MOV	R0,#9
	MOV	DECIMALB+6,R0
	MOV	R0,#9
	MOV	DECIMALB+5,R0
	MOV	R0,#9
	MOV	DECIMALB+4,R0
	MOV	R0,#9
	MOV	DECIMALB+3,R0
	MOV	R0,#0
	MOV	DECIMALB+2,R0
	CALL	DECIMAL_ADD
	CALL	DECIMALA_PRINT
	POP	R0
	RET
TEST_SUB10:
	PUSH	WR0
	CALL	LCD_LOCATE11
	MOV	R0,#1
	MOV	DECIMALA+0,R0
	MOV	R0,#1
	MOV	DECIMALA+1,R0
	MOV	R0,#1
	MOV	DECIMALA+2,R0
	MOV	R0,#1
	MOV	DECIMALA+3,R0
	MOV	R0,#1
	MOV	DECIMALA+4,R0
	MOV	R0,#2
	MOV	DECIMALA+5,R0
	MOV	R0,#2
	MOV	DECIMALA+6,R0
	MOV	R0,#2
	MOV	DECIMALA+7,R0
	MOV	R0,#3
	MOV	DECIMALA+8,R0
	MOV	R0,#3
	MOV	DECIMALA+9,R0
	MOV	R0,#3
	MOV	DECIMALA+10,R0
	MOV	R0,#4
	MOV	DECIMALA+11,R0
	;--------------------
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#1
	MOV	DECIMALB+1,R0
	MOV	R0,#1
	MOV	DECIMALB+2,R0
	MOV	R0,#1
	MOV	DECIMALB+3,R0
	MOV	R0,#2
	MOV	DECIMALB+4,R0
	MOV	R0,#2
	MOV	DECIMALB+5,R0
	MOV	R0,#2
	MOV	DECIMALB+6,R0
	MOV	R0,#3
	MOV	DECIMALB+7,R0
	MOV	R0,#3
	MOV	DECIMALB+8,R0
	MOV	R0,#3
	MOV	DECIMALB+9,R0
	MOV	R0,#3
	MOV	DECIMALB+10,R0
	MOV	R0,#3
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_SUB
	CALL	DECIMALA_PRINT
	POP	WR0
	RET
TEST_ADD12:
	PUSH	WR0
	CALL	LCD_LOCATE28
	MOV	R0,#0
	MOV	DECIMALA+0,R0
	MOV	R0,#0
	MOV	DECIMALA+1,R0
	MOV	R0,#9
	MOV	DECIMALA+2,R0
	MOV	R0,#9
	MOV	DECIMALA+3,R0
	MOV	R0,#9
	MOV	DECIMALA+4,R0
	MOV	R0,#9
	MOV	DECIMALA+5,R0
	MOV	R0,#9
	MOV	DECIMALA+6,R0
	MOV	R0,#9
	MOV	DECIMALA+7,R0
	MOV	R0,#9
	MOV	DECIMALA+8,R0
	MOV	R0,#9
	MOV	DECIMALA+9,R0
	MOV	R0,#9
	MOV	DECIMALA+10,R0
	MOV	R0,#9
	MOV	DECIMALA+11,R0
	;--------------------
	MOV	R0,#0
	MOV	DECIMALB+0,R0
	MOV	R0,#9
	MOV	DECIMALB+1,R0
	MOV	R0,#9
	MOV	DECIMALB+2,R0
	MOV	R0,#9
	MOV	DECIMALB+3,R0
	MOV	R0,#9
	MOV	DECIMALB+4,R0
	MOV	R0,#9
	MOV	DECIMALB+5,R0
	MOV	R0,#9
	MOV	DECIMALB+6,R0
	MOV	R0,#9
	MOV	DECIMALB+7,R0
	MOV	R0,#9
	MOV	DECIMALB+8,R0
	MOV	R0,#9
	MOV	DECIMALB+9,R0
	MOV	R0,#9
	MOV	DECIMALB+10,R0
	MOV	R0,#9
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD
	CALL	DECIMALA_PRINT
	POP	WR0
	RET
TEST_ADD2:
	PUSH	WR0
	PUSH	R2
	CALL	DECIMALA_CLR
	MOV	R1,#9
	MOV	R0,#9
	MOV	R2,#1
	CALL	ADD_2DIGITS
	MOV	DECIMALA+3,R0
	MOV	DECIMALA+4,R1
	CALL	LCD_LINE1_CLR
	CALL	LCD_LOCATE15
	CALL	DECIMALA_PRINT
	POP	R2
	POP	WR0
	RET
TEST_HEX2DECIMAL:
	CALL	LCD_CLS
	CALL	LCD_LOCATE11
	PUSH	R0
	MOV	R0,#0FFH
	MOV	HEXHIGH,R0
	MOV	R0,#0FFH
	MOV	HEXLOW,R0
	CALL	HEX2DECIMAL
	CALL	DECIMALA_PRINT
	POP	R0
	CALL	CPU_LOOP
	RET
;--------------------------------- LADDER LANGUAGE ------------------------
REGISTER_INI:
	PUSH	R0
	MOV	R0,0x00
	MOV	RESULT,R0
	MOV	REGISTER1,R0
	MOV	REGISTER2,R0
	MOV	REGISTER3,R0
	MOV	REGISTER4,R0
	POP	R0
	RET
RESULT_PUSH:
	;7 NESTED RESULT STACK. CURRENT RESULT IS RESULT.0 SO PUSHING RESULT SHIFTS ALL LEFT WITH RESULT.0 IS CLEARED
	PUSH	R0
	MOV	R0,RESULT
	SLL	R0
	MOV	RESULT,R0
	POP	R0
	RET
RESULT_POP:
	;7 NESTED RESULT STACK. CURRENT RESULT IS RESULT.0 SO POPING RESULT SHIFTS ALL RIGHT WITH RESULT.0 IS UPDATED FROM RESULT.1 AND RESULT.7=0
	PUSH	R0
	MOV	R0,RESULT
	SRL	R0
	MOV	RESULT,R0
	POP	R0
	RET
LD_1:;#@#
	SETB	RESULT.0
	RET
LD_0:;#@#
	CLR	RESULT.0
	RET
LD_ENTERSW:;#@#
	MOV   CY,KBSW.3
	MOV	RESULT.0,CY
	RET
LD_UPSW:;#@#
	MOV   CY,KBSW.4
	MOV	RESULT.0,CY
	RET
LD_RIGHTSW:;#@#
	MOV   CY,KBSW.5
	MOV	RESULT.0,CY
	RET
LD_DOWNSW:;#@#
	MOV   CY,KBSW.6
	MOV	RESULT.0,CY
	RET
LD_LEFTSW:;#@#
	MOV   CY,KBSW.7
	MOV	RESULT.0,CY
	RET
LD_DIPSW1:;#@#
	MOV	CY,DIPSW.0
	MOV	RESULT.0,CY
	RET
LD_DIPSW2:;#@#
	MOV	CY,DIPSW.1
	MOV	RESULT.0,CY
	RET
LD_DIPSW3:;#@#
	MOV	CY,DIPSW.2
	MOV	RESULT.0,CY
	RET
LD_DIPSW4:;#@#
	MOV	CY,DIPSW.3
	MOV	RESULT.0,CY
	RET
LD_DIPSW5:;#@#
	MOV	CY,DIPSW.4
	MOV	RESULT.0,CY
	RET
LD_DIPSW6:;#@#
	MOV	CY,DIPSW.5
	MOV	RESULT.0,CY
	RET
LD_DIPSW7:;#@#
	MOV	CY,DIPSW.6
	MOV	RESULT.0,CY
	RET
LD_DIPSW8:;#@#
	MOV	CY,DIPSW.7
	MOV	RESULT.0,CY
	RET
LD_X1:;#@#
	MOV	CY,X_GRP1.0
	MOV	RESULT.0,CY
	RET
LD_X2:;#@#
	MOV	CY,X_GRP1.1
	MOV	RESULT.0,CY
	RET
LD_X3:;#@#
	MOV	CY,X_GRP1.2
	MOV	RESULT.0,CY
	RET
LD_X4:;#@#
	MOV	CY,X_GRP1.3
	MOV	RESULT.0,CY
	RET
LD_X5:;#@#
	MOV	CY,X_GRP1.4
	MOV	RESULT.0,CY
	RET
LD_X6:;#@#
	MOV	CY,X_GRP1.5
	MOV	RESULT.0,CY
	RET
LD_X7:;#@#
	MOV	CY,X_GRP1.6
	MOV	RESULT.0,CY
	RET
LD_X8:;#@#
	MOV	CY,X_GRP1.7
	MOV	RESULT.0,CY
	RET
LD_X9:;#@#
	MOV	CY,X_GRP2.0
	MOV	RESULT.0,CY
	RET
LD_X10:;#@#
	MOV	CY,X_GRP2.1
	MOV	RESULT.0,CY
	RET
LD_X11:;#@#
	MOV	CY,X_GRP2.2
	MOV	RESULT.0,CY
	RET
LD_X12:;#@#
	MOV	CY,X_GRP2.3
	MOV	RESULT.0,CY
	RET
LD_X13:;#@#
	MOV	CY,X_GRP2.4
	MOV	RESULT.0,CY
	RET
LD_X14:;#@#
	MOV	CY,X_GRP2.5
	MOV	RESULT.0,CY
	RET
LD_X15:;#@#
	MOV	CY,X_GRP2.6
	MOV	RESULT.0,CY
	RET
LD_X16:;#@#
	MOV	CY,X_GRP2.7
	MOV	RESULT.0,CY
	RET
LD_X17:;#@#
	MOV	CY,X_GRP3.0
	MOV	RESULT.0,CY
	RET
LD_X18:;#@#
	MOV	CY,X_GRP3.1
	MOV	RESULT.0,CY
	RET
LD_X19:;#@#
	MOV	CY,X_GRP3.2
	MOV	RESULT.0,CY
	RET
LD_X20:;#@#
	MOV	CY,X_GRP3.3
	MOV	RESULT.0,CY
	RET
LD_X21:;#@#
	MOV	CY,X_GRP3.4
	MOV	RESULT.0,CY
	RET
LD_X22:;#@#
	MOV	CY,X_GRP3.5
	MOV	RESULT.0,CY
	RET
LD_X23:;#@#
	MOV	CY,X_GRP3.6
	MOV	RESULT.0,CY
	RET
LD_X24:;#@#
	MOV	CY,X_GRP3.7
	MOV	RESULT.0,CY
	RET
LD_Y1:;#@#
	MOV	CY,Y_GRP1.0
	MOV	RESULT.0,CY
	RET
LD_Y2:;#@#
	MOV	CY,Y_GRP1.1
	MOV	RESULT.0,CY
	RET
LD_Y3:;#@#
	MOV	CY,Y_GRP1.2
	MOV	RESULT.0,CY
	RET
LD_Y4:;#@#
	MOV	CY,Y_GRP1.3
	MOV	RESULT.0,CY
	RET
LD_Y5:;#@#
	MOV	CY,Y_GRP1.4
	MOV	RESULT.0,CY
	RET
LD_Y6:;#@#
	MOV	CY,Y_GRP1.5
	MOV	RESULT.0,CY
	RET
LD_Y7:;#@#
	MOV	CY,Y_GRP1.6
	MOV	RESULT.0,CY
	RET
LD_Y8:;#@#
	MOV	CY,Y_GRP1.7
	MOV	RESULT.0,CY
	RET
LD_Y9:;#@#
	MOV	CY,Y_GRP2.0
	MOV	RESULT.0,CY
	RET
LD_Y10:;#@#
	MOV	CY,Y_GRP2.1
	MOV	RESULT.0,CY
	RET
LD_Y11:;#@#
	MOV	CY,Y_GRP2.2
	MOV	RESULT.0,CY
	RET
LD_Y12:;#@#
	MOV	CY,Y_GRP2.3
	MOV	RESULT.0,CY
	RET
LD_Y13:;#@#
	MOV	CY,Y_GRP2.4
	MOV	RESULT.0,CY
	RET
LD_Y14:;#@#
	MOV	CY,Y_GRP2.5
	MOV	RESULT.0,CY
	RET
LD_Y15:;#@#
	MOV	CY,Y_GRP2.6
	MOV	RESULT.0,CY
	RET
LD_Y16:;#@#
	MOV	CY,Y_GRP2.7
	MOV	RESULT.0,CY
	RET
LD_R1:;#@#
	MOV	CY,REGISTER1.0
	MOV	RESULT.0,CY
	RET
LD_R2:;#@#
	MOV	CY,REGISTER1.1
	MOV	RESULT.0,CY
	RET
LD_R3:;#@#
	MOV	CY,REGISTER1.2
	MOV	RESULT.0,CY
	RET
LD_R4:;#@#
	MOV	CY,REGISTER1.3
	MOV	RESULT.0,CY
	RET
LD_R5:;#@#
	MOV	CY,REGISTER1.4
	MOV	RESULT.0,CY
	RET
LD_R6:;#@#
	MOV	CY,REGISTER1.5
	MOV	RESULT.0,CY
	RET
LD_R7:;#@#
	MOV	CY,REGISTER1.6
	MOV	RESULT.0,CY
	RET
LD_R8:;#@#
	MOV	CY,REGISTER1.7
	MOV	RESULT.0,CY
	RET
LD_R9:;#@#
	MOV	CY,REGISTER2.0
	MOV	RESULT.0,CY
	RET
LD_R10:;#@#
	MOV	CY,REGISTER2.1
	MOV	RESULT.0,CY
	RET
LD_R11:;#@#
	MOV	CY,REGISTER2.2
	MOV	RESULT.0,CY
	RET
LD_R12:;#@#
	MOV	CY,REGISTER2.3
	MOV	RESULT.0,CY
	RET
LD_R13:;#@#
	MOV	CY,REGISTER2.4
	MOV	RESULT.0,CY
	RET
LD_R14:;#@#
	MOV	CY,REGISTER2.5
	MOV	RESULT.0,CY
	RET
LD_R15:;#@#
	MOV	CY,REGISTER2.6
	MOV	RESULT.0,CY
	RET
LD_R16:;#@#
	MOV	CY,REGISTER2.7
	MOV	RESULT.0,CY
	RET
LD_R17:;#@#
	MOV	CY,REGISTER3.0
	MOV	RESULT.0,CY
	RET
LD_R18:;#@#
	MOV	CY,REGISTER3.1
	MOV	RESULT.0,CY
	RET
LD_R19:;#@#
	MOV	CY,REGISTER3.2
	MOV	RESULT.0,CY
	RET
LD_R20:;#@#
	MOV	CY,REGISTER3.3
	MOV	RESULT.0,CY
	RET
LD_R21:;#@#
	MOV	CY,REGISTER3.4
	MOV	RESULT.0,CY
	RET
LD_R22:;#@#
	MOV	CY,REGISTER3.5
	MOV	RESULT.0,CY
	RET
LD_R23:;#@#
	MOV	CY,REGISTER3.6
	MOV	RESULT.0,CY
	RET
LD_R24:;#@#
	MOV	CY,REGISTER3.7
	MOV	RESULT.0,CY
	RET
LD_R25:;#@#
	MOV	CY,REGISTER4.0
	MOV	RESULT.0,CY
	RET
LD_R26:;#@#
	MOV	CY,REGISTER4.1
	MOV	RESULT.0,CY
	RET
LD_R27:;#@#
	MOV	CY,REGISTER4.2
	MOV	RESULT.0,CY
	RET
LD_R28:;#@#
	MOV	CY,REGISTER4.3
	MOV	RESULT.0,CY
	RET
LD_R29:;#@#
	MOV	CY,REGISTER4.4
	MOV	RESULT.0,CY
	RET
LD_R30:;#@#
	MOV	CY,REGISTER4.5
	MOV	RESULT.0,CY
	RET
LD_R31:;#@#
	MOV	CY,REGISTER4.6
	MOV	RESULT.0,CY
	RET
LD_R32:;#@#
	MOV	CY,REGISTER4.7
	MOV	RESULT.0,CY
	RET
LD_D1:;#@#
	MOV	CY,PP3C.0
	MOV	RESULT.0,CY
	RET
LD_D2:;#@#
	MOV	CY,PP3C.1
	MOV	RESULT.0,CY
	RET
LD_D3:;#@#
	MOV	CY,PP3C.2
	MOV	RESULT.0,CY
	RET
LD_D4:;#@#
	MOV	CY,PP3C.3
	MOV	RESULT.0,CY
	RET
LD_ST1:;#@#
	MOV	CY,STG1.0
	MOV	RESULT.0,CY
	RET
LD_ST2:;#@#
	MOV	CY,STG1.1
	MOV	RESULT.0,CY
	RET
LD_ST3:;#@#
	MOV	CY,STG1.2
	MOV	RESULT.0,CY
	RET
LD_ST4:;#@#
	MOV	CY,STG1.3
	MOV	RESULT.0,CY
	RET
LD_ST5:;#@#
	MOV	CY,STG1.4
	MOV	RESULT.0,CY
	RET
LD_ST6:;#@#
	MOV	CY,STG1.5
	MOV	RESULT.0,CY
	RET
LD_ST7:;#@#
	MOV	CY,STG1.6
	MOV	RESULT.0,CY
	RET
LD_ST8:;#@#
	MOV	CY,STG1.7
	MOV	RESULT.0,CY
	RET
LD_ST9:;#@#
	MOV	CY,STG2.0
	MOV	RESULT.0,CY
	RET
LD_ST10:;#@#
	MOV	CY,STG2.1
	MOV	RESULT.0,CY
	RET
LD_ST11:;#@#
	MOV	CY,STG2.2
	MOV	RESULT.0,CY
	RET
LD_ST12:;#@#
	MOV	CY,STG2.3
	MOV	RESULT.0,CY
	RET
LD_ST13:;#@#
	MOV	CY,STG2.4
	MOV	RESULT.0,CY
	RET
LD_ST14:;#@#
	MOV	CY,STG2.5
	MOV	RESULT.0,CY
	RET
LD_ST15:;#@#
	MOV	CY,STG2.6
	MOV	RESULT.0,CY
	RET
LD_ST16:;#@#
	MOV	CY,STG2.7
	MOV	RESULT.0,CY
	RET
LD_ST17:;#@#
	MOV	CY,STG3.0
	MOV	RESULT.0,CY
	RET
LD_ST18:;#@#
	MOV	CY,STG3.1
	MOV	RESULT.0,CY
	RET
LD_ST19:;#@#
	MOV	CY,STG3.2
	MOV	RESULT.0,CY
	RET
LD_ST20:;#@#
	MOV	CY,STG3.3
	MOV	RESULT.0,CY
	RET
LD_ST21:;#@#
	MOV	CY,STG3.4
	MOV	RESULT.0,CY
	RET
LD_ST22:;#@#
	MOV	CY,STG3.5
	MOV	RESULT.0,CY
	RET
LD_ST23:;#@#
	MOV	CY,STG3.6
	MOV	RESULT.0,CY
	RET
LD_ST24:;#@#
	MOV	CY,STG3.7
	MOV	RESULT.0,CY
	RET
LD_ST25:;#@#
	MOV	CY,STG4.0
	MOV	RESULT.0,CY
	RET
LD_ST26:;#@#
	MOV	CY,STG4.1
	MOV	RESULT.0,CY
	RET
LD_ST27:;#@#
	MOV	CY,STG4.2
	MOV	RESULT.0,CY
	RET
LD_ST28:;#@#
	MOV	CY,STG4.3
	MOV	RESULT.0,CY
	RET
LD_ST29:;#@#
	MOV	CY,STG4.4
	MOV	RESULT.0,CY
	RET
LD_ST30:;#@#
	MOV	CY,STG4.5
	MOV	RESULT.0,CY
	RET
LD_ST31:;#@#
	MOV	CY,STG4.6
	MOV	RESULT.0,CY
	RET
LD_ST32:;#@#
	MOV	CY,STG4.7
	MOV	RESULT.0,CY
	RET
LD_ST33:;#@#
	MOV	CY,STG5.0
	MOV	RESULT.0,CY
	RET
LD_ST34:;#@#
	MOV	CY,STG5.1
	MOV	RESULT.0,CY
	RET
LD_ST35:;#@#
	MOV	CY,STG5.2
	MOV	RESULT.0,CY
	RET
LD_ST36:;#@#
	MOV	CY,STG5.3
	MOV	RESULT.0,CY
	RET
LD_ST37:;#@#
	MOV	CY,STG5.4
	MOV	RESULT.0,CY
	RET
LD_ST38:;#@#
	MOV	CY,STG5.5
	MOV	RESULT.0,CY
	RET
LD_ST39:;#@#
	MOV	CY,STG5.6
	MOV	RESULT.0,CY
	RET
LD_ST40:;#@#
	MOV	CY,STG5.7
	MOV	RESULT.0,CY
	RET
LD_ST41:;#@#
	MOV	CY,STG6.0
	MOV	RESULT.0,CY
	RET
LD_ST42:;#@#
	MOV	CY,STG6.1
	MOV	RESULT.0,CY
	RET
LD_ST43:;#@#
	MOV	CY,STG6.2
	MOV	RESULT.0,CY
	RET
LD_ST44:;#@#
	MOV	CY,STG6.3
	MOV	RESULT.0,CY
	RET
LD_ST45:;#@#
	MOV	CY,STG6.4
	MOV	RESULT.0,CY
	RET
LD_ST46:;#@#
	MOV	CY,STG6.5
	MOV	RESULT.0,CY
	RET
LD_ST47:;#@#
	MOV	CY,STG6.6
	MOV	RESULT.0,CY
	RET
LD_ST48:;#@#
	MOV	CY,STG6.7
	MOV	RESULT.0,CY
	RET
LD_STA:
	MOV	CY,STGALPHA.0
	MOV	RESULT.0,CY
	RET
LD_STB:
	MOV	CY,STGALPHA.1
	MOV	RESULT.0,CY
	RET
LD_STC:
	MOV	CY,STGALPHA.2
	MOV	RESULT.0,CY
	RET
LD_STD:
	MOV	CY,STGALPHA.3
	MOV	RESULT.0,CY
	RET
LD_STE:
	MOV	CY,STGALPHA.4
	MOV	RESULT.0,CY
	RET
LD_STF:
	MOV	CY,STGALPHA.5
	MOV	RESULT.0,CY
	RET
LD_STG:
	MOV	CY,STGALPHA.6
	MOV	RESULT.0,CY
	RET
LD_STH:
	MOV	CY,STGALPHA.7
	MOV	RESULT.0,CY
	RET
LDI_ENTERSW:;#@#
	MOV   CY,KBSW.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_UPSW:;#@#
	MOV   CY,KBSW.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_RIGHTSW:;#@#
	MOV   CY,KBSW.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DOWNSW:;#@#
	MOV   CY,KBSW.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_LEFTSW:;#@#
	MOV   CY,KBSW.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW1:;#@#
	MOV	CY,DIPSW.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW2:;#@#
	MOV	CY,DIPSW.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW3:;#@#
	MOV	CY,DIPSW.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW4:;#@#
	MOV	CY,DIPSW.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW5:;#@#
	MOV	CY,DIPSW.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW6:;#@#
	MOV	CY,DIPSW.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW7:;#@#
	MOV	CY,DIPSW.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_DIPSW8:;#@#
	MOV	CY,DIPSW.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X1:;#@#
	MOV	CY,X_GRP1.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X2:;#@#
	MOV	CY,X_GRP1.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X3:;#@#
	MOV	CY,X_GRP1.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X4:;#@#
	MOV	CY,X_GRP1.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X5:;#@#
	MOV	CY,X_GRP1.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X6:;#@#
	MOV	CY,X_GRP1.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X7:;#@#
	MOV	CY,X_GRP1.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X8:;#@#
	MOV	CY,X_GRP1.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X9:;#@#
	MOV	CY,X_GRP2.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X10:;#@#
	MOV	CY,X_GRP2.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X11:;#@#
	MOV	CY,X_GRP2.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X12:;#@#
	MOV	CY,X_GRP2.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X13:;#@#
	MOV	CY,X_GRP2.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X14:;#@#
	MOV	CY,X_GRP2.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X15:;#@#
	MOV	CY,X_GRP2.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X16:;#@#
	MOV	CY,X_GRP2.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X17:;#@#
	MOV	CY,X_GRP3.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X18:;#@#
	MOV	CY,X_GRP3.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X19:;#@#
	MOV	CY,X_GRP3.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X20:;#@#
	MOV	CY,X_GRP3.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X21:;#@#
	MOV	CY,X_GRP3.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X22:;#@#
	MOV	CY,X_GRP3.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X23:;#@#
	MOV	CY,X_GRP3.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_X24:;#@#
	MOV	CY,X_GRP3.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y1:;#@#
	MOV	CY,Y_GRP1.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y2:;#@#
	MOV	CY,Y_GRP1.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y3:;#@#
	MOV	CY,Y_GRP1.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y4:;#@#
	MOV	CY,Y_GRP1.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y5:;#@#
	MOV	CY,Y_GRP1.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y6:;#@#
	MOV	CY,Y_GRP1.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y7:;#@#
	MOV	CY,Y_GRP1.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y8:;#@#
	MOV	CY,Y_GRP1.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y9:;#@#
	MOV	CY,Y_GRP2.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y10:;#@#
	MOV	CY,Y_GRP2.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y11:;#@#
	MOV	CY,Y_GRP2.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y12:;#@#
	MOV	CY,Y_GRP2.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y13:;#@#
	MOV	CY,Y_GRP2.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y14:;#@#
	MOV	CY,Y_GRP2.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y15:;#@#
	MOV	CY,Y_GRP2.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_Y16:;#@#
	MOV	CY,Y_GRP2.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R1:;#@#
	MOV	CY,REGISTER1.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R2:;#@#
	MOV	CY,REGISTER1.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R3:;#@#
	MOV	CY,REGISTER1.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R4:;#@#
	MOV	CY,REGISTER1.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R5:;#@#
	MOV	CY,REGISTER1.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R6:;#@#
	MOV	CY,REGISTER1.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R7:;#@#
	MOV	CY,REGISTER1.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R8:;#@#
	MOV	CY,REGISTER1.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R9:;#@#
	MOV	CY,REGISTER2.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R10:;#@#
	MOV	CY,REGISTER2.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R11:;#@#
	MOV	CY,REGISTER2.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R12:;#@#
	MOV	CY,REGISTER2.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R13:;#@#
	MOV	CY,REGISTER2.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R14:;#@#
	MOV	CY,REGISTER2.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R15:;#@#
	MOV	CY,REGISTER2.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R16:;#@#
	MOV	CY,REGISTER2.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R17:;#@#
	MOV	CY,REGISTER3.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R18:;#@#
	MOV	CY,REGISTER3.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R19:;#@#
	MOV	CY,REGISTER3.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R20:;#@#
	MOV	CY,REGISTER3.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R21:;#@#
	MOV	CY,REGISTER3.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R22:;#@#
	MOV	CY,REGISTER3.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R23:;#@#
	MOV	CY,REGISTER3.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R24:;#@#
	MOV	CY,REGISTER3.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R25:;#@#
	MOV	CY,REGISTER4.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R26:;#@#
	MOV	CY,REGISTER4.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R27:;#@#
	MOV	CY,REGISTER4.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R28:;#@#
	MOV	CY,REGISTER4.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R29:;#@#
	MOV	CY,REGISTER4.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R30:;#@#
	MOV	CY,REGISTER4.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R31:;#@#
	MOV	CY,REGISTER4.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_R32:;#@#
	MOV	CY,REGISTER4.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_D1:;#@#
	MOV	CY,PP3C.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_D2:;#@#
	MOV	CY,PP3C.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_D3:;#@#
	MOV	CY,PP3C.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_D4:;#@#
	MOV	CY,PP3C.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST1:;#@#
	MOV	CY,STG1.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST2:;#@#
	MOV	CY,STG1.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST3:;#@#
	MOV	CY,STG1.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST4:;#@#
	MOV	CY,STG1.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST5:;#@#
	MOV	CY,STG1.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST6:;#@#
	MOV	CY,STG1.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST7:;#@#
	MOV	CY,STG1.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST8:;#@#
	MOV	CY,STG1.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST9:;#@#
	MOV	CY,STG2.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST10:;#@#
	MOV	CY,STG2.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST11:;#@#
	MOV	CY,STG2.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST12:;#@#
	MOV	CY,STG2.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST13:;#@#
	MOV	CY,STG2.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST14:;#@#
	MOV	CY,STG2.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST15:;#@#
	MOV	CY,STG2.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST16:;#@#
	MOV	CY,STG2.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST17:;#@#
	MOV	CY,STG3.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST18:;#@#
	MOV	CY,STG3.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST19:;#@#
	MOV	CY,STG3.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST20:;#@#
	MOV	CY,STG3.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST21:;#@#
	MOV	CY,STG3.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST22:;#@#
	MOV	CY,STG3.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST23:;#@#
	MOV	CY,STG3.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST24:;#@#
	MOV	CY,STG3.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST25:;#@#
	MOV	CY,STG4.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST26:;#@#
	MOV	CY,STG4.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST27:;#@#
	MOV	CY,STG4.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST28:;#@#
	MOV	CY,STG4.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST29:;#@#
	MOV	CY,STG4.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST30:;#@#
	MOV	CY,STG4.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST31:;#@#
	MOV	CY,STG4.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST32:;#@#
	MOV	CY,STG4.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST33:;#@#
	MOV	CY,STG5.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST34:;#@#
	MOV	CY,STG5.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST35:;#@#
	MOV	CY,STG5.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST36:;#@#
	MOV	CY,STG5.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST37:;#@#
	MOV	CY,STG5.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST38:;#@#
	MOV	CY,STG5.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST39:;#@#
	MOV	CY,STG5.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST40:;#@#
	MOV	CY,STG5.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST41:;#@#
	MOV	CY,STG6.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST42:;#@#
	MOV	CY,STG6.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST43:;#@#
	MOV	CY,STG6.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST44:;#@#
	MOV	CY,STG6.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST45:;#@#
	MOV	CY,STG6.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST46:;#@#
	MOV	CY,STG6.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST47:;#@#
	MOV	CY,STG6.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_ST48:;#@#
	MOV	CY,STG6.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STA:
	MOV	CY,STGALPHA.0
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STB:
	MOV	CY,STGALPHA.1
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STC:
	MOV	CY,STGALPHA.2
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STD:
	MOV	CY,STGALPHA.3
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STE:
	MOV	CY,STGALPHA.4
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STF:
	MOV	CY,STGALPHA.5
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STG:
	MOV	CY,STGALPHA.6
	CPL	CY
	MOV	RESULT.0,CY
	RET
LDI_STH:
	MOV	CY,STGALPHA.7
	CPL	CY
	MOV	RESULT.0,CY
	RET
AND_ENTERSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,KBSW.3
	MOV	RESULT.0,CY
	RET
AND_UPSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,KBSW.4
	MOV	RESULT.0,CY
	RET
AND_RIGHTSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,KBSW.5
	MOV	RESULT.0,CY
	RET
AND_DOWNSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,KBSW.6
	MOV	RESULT.0,CY
	RET
AND_LEFTSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,KBSW.7
	MOV	RESULT.0,CY
	RET
AND_DIPSW1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.0
	MOV	RESULT.0,CY
	RET
AND_DIPSW2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.1
	MOV	RESULT.0,CY
	RET
AND_DIPSW3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.2
	MOV	RESULT.0,CY
	RET
AND_DIPSW4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.3
	MOV	RESULT.0,CY
	RET
AND_DIPSW5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.4
	MOV	RESULT.0,CY
	RET
AND_DIPSW6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.5
	MOV	RESULT.0,CY
	RET
AND_DIPSW7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.6
	MOV	RESULT.0,CY
	RET
AND_DIPSW8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,DIPSW.7
	MOV	RESULT.0,CY
	RET
AND_X1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.0
	MOV	RESULT.0,CY
	RET
AND_X2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.1
	MOV	RESULT.0,CY
	RET
AND_X3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.2
	MOV	RESULT.0,CY
	RET
AND_X4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.3
	MOV	RESULT.0,CY
	RET
AND_X5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.4
	MOV	RESULT.0,CY
	RET
AND_X6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.5
	MOV	RESULT.0,CY
	RET
AND_X7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.6
	MOV	RESULT.0,CY
	RET
AND_X8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP1.7
	MOV	RESULT.0,CY
	RET
AND_X9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.0
	MOV	RESULT.0,CY
	RET
AND_X10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.1
	MOV	RESULT.0,CY
	RET
AND_X11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.2
	MOV	RESULT.0,CY
	RET
AND_X12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.3
	MOV	RESULT.0,CY
	RET
AND_X13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.4
	MOV	RESULT.0,CY
	RET
AND_X14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.5
	MOV	RESULT.0,CY
	RET
AND_X15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.6
	MOV	RESULT.0,CY
	RET
AND_X16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP2.7
	MOV	RESULT.0,CY
	RET
AND_X17:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.0
	MOV	RESULT.0,CY
	RET
AND_X18:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.1
	MOV	RESULT.0,CY
	RET
AND_X19:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.2
	MOV	RESULT.0,CY
	RET
AND_X20:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.3
	MOV	RESULT.0,CY
	RET
AND_X21:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.4
	MOV	RESULT.0,CY
	RET
AND_X22:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.5
	MOV	RESULT.0,CY
	RET
AND_X23:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.6
	MOV	RESULT.0,CY
	RET
AND_X24:;#@#
	MOV	CY,RESULT.0
	ANL	CY,X_GRP3.7
	MOV	RESULT.0,CY
	RET
AND_Y1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.0
	MOV	RESULT.0,CY
	RET
AND_Y2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.1
	MOV	RESULT.0,CY
	RET
AND_Y3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.2
	MOV	RESULT.0,CY
	RET
AND_Y4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.3
	MOV	RESULT.0,CY
	RET
AND_Y5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.4
	MOV	RESULT.0,CY
	RET
AND_Y6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.5
	MOV	RESULT.0,CY
	RET
AND_Y7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.6
	MOV	RESULT.0,CY
	RET
AND_Y8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP1.7
	MOV	RESULT.0,CY
	RET
AND_Y9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.0
	MOV	RESULT.0,CY
	RET
AND_Y10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.1
	MOV	RESULT.0,CY
	RET
AND_Y11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.2
	MOV	RESULT.0,CY
	RET
AND_Y12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.3
	MOV	RESULT.0,CY
	RET
AND_Y13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.4
	MOV	RESULT.0,CY
	RET
AND_Y14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.5
	MOV	RESULT.0,CY
	RET
AND_Y15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.6
	MOV	RESULT.0,CY
	RET
AND_Y16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,Y_GRP2.7
	MOV	RESULT.0,CY
	RET
AND_R1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.0
	MOV	RESULT.0,CY
	RET
AND_R2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.1
	MOV	RESULT.0,CY
	RET
AND_R3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.2
	MOV	RESULT.0,CY
	RET
AND_R4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.3
	MOV	RESULT.0,CY
	RET
AND_R5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.4
	MOV	RESULT.0,CY
	RET
AND_R6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.5
	MOV	RESULT.0,CY
	RET
AND_R7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.6
	MOV	RESULT.0,CY
	RET
AND_R8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER1.7
	MOV	RESULT.0,CY
	RET
AND_R9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.0
	MOV	RESULT.0,CY
	RET
AND_R10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.1
	MOV	RESULT.0,CY
	RET
AND_R11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.2
	MOV	RESULT.0,CY
	RET
AND_R12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.3
	MOV	RESULT.0,CY
	RET
AND_R13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.4
	MOV	RESULT.0,CY
	RET
AND_R14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.5
	MOV	RESULT.0,CY
	RET
AND_R15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.6
	MOV	RESULT.0,CY
	RET
AND_R16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER2.7
	MOV	RESULT.0,CY
	RET
AND_R17:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.0
	MOV	RESULT.0,CY
	RET
AND_R18:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.1
	MOV	RESULT.0,CY
	RET
AND_R19:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.2
	MOV	RESULT.0,CY
	RET
AND_R20:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.3
	MOV	RESULT.0,CY
	RET
AND_R21:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.4
	MOV	RESULT.0,CY
	RET
AND_R22:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.5
	MOV	RESULT.0,CY
	RET
AND_R23:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.6
	MOV	RESULT.0,CY
	RET
AND_R24:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER3.7
	MOV	RESULT.0,CY
	RET
AND_R25:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.0
	MOV	RESULT.0,CY
	RET
AND_R26:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.1
	MOV	RESULT.0,CY
	RET
AND_R27:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.2
	MOV	RESULT.0,CY
	RET
AND_R28:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.3
	MOV	RESULT.0,CY
	RET
AND_R29:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.4
	MOV	RESULT.0,CY
	RET
AND_R30:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.5
	MOV	RESULT.0,CY
	RET
AND_R31:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.6
	MOV	RESULT.0,CY
	RET
AND_R32:;#@#
	MOV	CY,RESULT.0
	ANL	CY,REGISTER4.7
	MOV	RESULT.0,CY
	RET
AND_D1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,PP3C.0
	MOV	RESULT.0,CY
	RET
AND_D2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,PP3C.1
	MOV	RESULT.0,CY
	RET
AND_D3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,PP3C.2
	MOV	RESULT.0,CY
	RET
AND_D4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,PP3C.3
	MOV	RESULT.0,CY
	RET
AND_ST1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.0
	MOV	RESULT.0,CY
	RET
AND_ST2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.1
	MOV	RESULT.0,CY
	RET
AND_ST3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.2
	MOV	RESULT.0,CY
	RET
AND_ST4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.3
	MOV	RESULT.0,CY
	RET
AND_ST5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.4
	MOV	RESULT.0,CY
	RET
AND_ST6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.5
	MOV	RESULT.0,CY
	RET
AND_ST7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.6
	MOV	RESULT.0,CY
	RET
AND_ST8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG1.7
	MOV	RESULT.0,CY
	RET
AND_ST9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.0
	MOV	RESULT.0,CY
	RET
AND_ST10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.1
	MOV	RESULT.0,CY
	RET
AND_ST11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.2
	MOV	RESULT.0,CY
	RET
AND_ST12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.3
	MOV	RESULT.0,CY
	RET
AND_ST13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.4
	MOV	RESULT.0,CY
	RET
AND_ST14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.5
	MOV	RESULT.0,CY
	RET
AND_ST15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.6
	MOV	RESULT.0,CY
	RET
AND_ST16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG2.7
	MOV	RESULT.0,CY
	RET
AND_ST17:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.0
	MOV	RESULT.0,CY
	RET
AND_ST18:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.1
	MOV	RESULT.0,CY
	RET
AND_ST19:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.2
	MOV	RESULT.0,CY
	RET
AND_ST20:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.3
	MOV	RESULT.0,CY
	RET
AND_ST21:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.4
	MOV	RESULT.0,CY
	RET
AND_ST22:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.5
	MOV	RESULT.0,CY
	RET
AND_ST23:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.6
	MOV	RESULT.0,CY
	RET
AND_ST24:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG3.7
	MOV	RESULT.0,CY
	RET
AND_ST25:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.0
	MOV	RESULT.0,CY
	RET
AND_ST26:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.1
	MOV	RESULT.0,CY
	RET
AND_ST27:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.2
	MOV	RESULT.0,CY
	RET
AND_ST28:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.3
	MOV	RESULT.0,CY
	RET
AND_ST29:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.4
	MOV	RESULT.0,CY
	RET
AND_ST30:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.5
	MOV	RESULT.0,CY
	RET
AND_ST31:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.6
	MOV	RESULT.0,CY
	RET
AND_ST32:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG4.7
	MOV	RESULT.0,CY
	RET
AND_ST33:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.0
	MOV	RESULT.0,CY
	RET
AND_ST34:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.1
	MOV	RESULT.0,CY
	RET
AND_ST35:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.2
	MOV	RESULT.0,CY
	RET
AND_ST36:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.3
	MOV	RESULT.0,CY
	RET
AND_ST37:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.4
	MOV	RESULT.0,CY
	RET
AND_ST38:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.5
	MOV	RESULT.0,CY
	RET
AND_ST39:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.6
	MOV	RESULT.0,CY
	RET
AND_ST40:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG5.7
	MOV	RESULT.0,CY
	RET
AND_ST41:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.0
	MOV	RESULT.0,CY
	RET
AND_ST42:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.1
	MOV	RESULT.0,CY
	RET
AND_ST43:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.2
	MOV	RESULT.0,CY
	RET
AND_ST44:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.3
	MOV	RESULT.0,CY
	RET
AND_ST45:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.4
	MOV	RESULT.0,CY
	RET
AND_ST46:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.5
	MOV	RESULT.0,CY
	RET
AND_ST47:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.6
	MOV	RESULT.0,CY
	RET
AND_ST48:;#@#
	MOV	CY,RESULT.0
	ANL	CY,STG6.7
	MOV	RESULT.0,CY
	RET
AND_STA:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.0
	MOV	RESULT.0,CY
	RET
AND_STB:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.1
	MOV	RESULT.0,CY
	RET
AND_STC:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.2
	MOV	RESULT.0,CY
	RET
AND_STD:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.3
	MOV	RESULT.0,CY
	RET
AND_STE:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.4
	MOV	RESULT.0,CY
	RET
AND_STF:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.5
	MOV	RESULT.0,CY
	RET
AND_STG:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.6
	MOV	RESULT.0,CY
	RET
AND_STH:
	MOV	CY,RESULT.0
	ANL	CY,STGALPHA.7
	MOV	RESULT.0,CY
	RET
ANDI_ENTERSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,/KBSW.3
	MOV	RESULT.0,CY
	RET
ANDI_UPSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,/KBSW.4
	MOV	RESULT.0,CY
	RET
ANDI_RIGHTSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,/KBSW.5
	MOV	RESULT.0,CY
	RET
ANDI_DOWNSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,/KBSW.6
	MOV	RESULT.0,CY
	RET
ANDI_LEFTSW:;#@#
	MOV	CY,RESULT.0
	ANL   CY,/KBSW.7
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.0
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.1
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.2
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.3
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.4
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.5
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.6
	MOV	RESULT.0,CY
	RET
ANDI_DIPSW8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/DIPSW.7
	MOV	RESULT.0,CY
	RET
ANDI_X1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.0
	MOV	RESULT.0,CY
	RET
ANDI_X2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.1
	MOV	RESULT.0,CY
	RET
ANDI_X3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.2
	MOV	RESULT.0,CY
	RET
ANDI_X4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.3
	MOV	RESULT.0,CY
	RET
ANDI_X5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.4
	MOV	RESULT.0,CY
	RET
ANDI_X6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.5
	MOV	RESULT.0,CY
	RET
ANDI_X7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.6
	MOV	RESULT.0,CY
	RET
ANDI_X8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP1.7
	MOV	RESULT.0,CY
	RET
ANDI_X9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.0
	MOV	RESULT.0,CY
	RET
ANDI_X10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.1
	MOV	RESULT.0,CY
	RET
ANDI_X11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.2
	MOV	RESULT.0,CY
	RET
ANDI_X12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.3
	MOV	RESULT.0,CY
	RET
ANDI_X13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.4
	MOV	RESULT.0,CY
	RET
ANDI_X14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.5
	MOV	RESULT.0,CY
	RET
ANDI_X15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.6
	MOV	RESULT.0,CY
	RET
ANDI_X16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP2.7
	MOV	RESULT.0,CY
	RET
ANDI_X17:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.0
	MOV	RESULT.0,CY
	RET
ANDI_X18:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.1
	MOV	RESULT.0,CY
	RET
ANDI_X19:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.2
	MOV	RESULT.0,CY
	RET
ANDI_X20:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.3
	MOV	RESULT.0,CY
	RET
ANDI_X21:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.4
	MOV	RESULT.0,CY
	RET
ANDI_X22:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.5
	MOV	RESULT.0,CY
	RET
ANDI_X23:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.6
	MOV	RESULT.0,CY
	RET
ANDI_X24:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/X_GRP3.7
	MOV	RESULT.0,CY
	RET
ANDI_Y1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.0
	MOV	RESULT.0,CY
	RET
ANDI_Y2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.1
	MOV	RESULT.0,CY
	RET
ANDI_Y3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.2
	MOV	RESULT.0,CY
	RET
ANDI_Y4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.3
	MOV	RESULT.0,CY
	RET
ANDI_Y5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.4
	MOV	RESULT.0,CY
	RET
ANDI_Y6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.5
	MOV	RESULT.0,CY
	RET
ANDI_Y7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.6
	MOV	RESULT.0,CY
	RET
ANDI_Y8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP1.7
	MOV	RESULT.0,CY
	RET
ANDI_Y9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.0
	MOV	RESULT.0,CY
	RET
ANDI_Y10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.1
	MOV	RESULT.0,CY
	RET
ANDI_Y11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.2
	MOV	RESULT.0,CY
	RET
ANDI_Y12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.3
	MOV	RESULT.0,CY
	RET
ANDI_Y13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.4
	MOV	RESULT.0,CY
	RET
ANDI_Y14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.5
	MOV	RESULT.0,CY
	RET
ANDI_Y15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.6
	MOV	RESULT.0,CY
	RET
ANDI_Y16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/Y_GRP2.7
	MOV	RESULT.0,CY
	RET
ANDI_R1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.0
	MOV	RESULT.0,CY
	RET
ANDI_R2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.1
	MOV	RESULT.0,CY
	RET
ANDI_R3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.2
	MOV	RESULT.0,CY
	RET
ANDI_R4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.3
	MOV	RESULT.0,CY
	RET
ANDI_R5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.4
	MOV	RESULT.0,CY
	RET
ANDI_R6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.5
	MOV	RESULT.0,CY
	RET
ANDI_R7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.6
	MOV	RESULT.0,CY
	RET
ANDI_R8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER1.7
	MOV	RESULT.0,CY
	RET
ANDI_R9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.0
	MOV	RESULT.0,CY
	RET
ANDI_R10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.1
	MOV	RESULT.0,CY
	RET
ANDI_R11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.2
	MOV	RESULT.0,CY
	RET
ANDI_R12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.3
	MOV	RESULT.0,CY
	RET
ANDI_R13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.4
	MOV	RESULT.0,CY
	RET
ANDI_R14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.5
	MOV	RESULT.0,CY
	RET
ANDI_R15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.6
	MOV	RESULT.0,CY
	RET
ANDI_R16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER2.7
	MOV	RESULT.0,CY
	RET
ANDI_R17:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.0
	MOV	RESULT.0,CY
	RET
ANDI_R18:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.1
	MOV	RESULT.0,CY
	RET
ANDI_R19:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.2
	MOV	RESULT.0,CY
	RET
ANDI_R20:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.3
	MOV	RESULT.0,CY
	RET
ANDI_R21:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.4
	MOV	RESULT.0,CY
	RET
ANDI_R22:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.5
	MOV	RESULT.0,CY
	RET
ANDI_R23:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.6
	MOV	RESULT.0,CY
	RET
ANDI_R24:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER3.7
	MOV	RESULT.0,CY
	RET
ANDI_R25:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.0
	MOV	RESULT.0,CY
	RET
ANDI_R26:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.1
	MOV	RESULT.0,CY
	RET
ANDI_R27:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.2
	MOV	RESULT.0,CY
	RET
ANDI_R28:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.3
	MOV	RESULT.0,CY
	RET
ANDI_R29:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.4
	MOV	RESULT.0,CY
	RET
ANDI_R30:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.5
	MOV	RESULT.0,CY
	RET
ANDI_R31:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.6
	MOV	RESULT.0,CY
	RET
ANDI_R32:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/REGISTER4.7
	MOV	RESULT.0,CY
	RET
ANDI_D1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/PP3C.0
	MOV	RESULT.0,CY
	RET
ANDI_D2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/PP3C.1
	MOV	RESULT.0,CY
	RET
ANDI_D3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/PP3C.2
	MOV	RESULT.0,CY
	RET
ANDI_D4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/PP3C.3
	MOV	RESULT.0,CY
	RET
ANDI_ST1:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.0
	MOV	RESULT.0,CY
	RET
ANDI_ST2:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.1
	MOV	RESULT.0,CY
	RET
ANDI_ST3:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.2
	MOV	RESULT.0,CY
	RET
ANDI_ST4:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.3
	MOV	RESULT.0,CY
	RET
ANDI_ST5:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.4
	MOV	RESULT.0,CY
	RET
ANDI_ST6:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.5
	MOV	RESULT.0,CY
	RET
ANDI_ST7:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.6
	MOV	RESULT.0,CY
	RET
ANDI_ST8:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG1.7
	MOV	RESULT.0,CY
	RET
ANDI_ST9:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.0
	MOV	RESULT.0,CY
	RET
ANDI_ST10:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.1
	MOV	RESULT.0,CY
	RET
ANDI_ST11:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.2
	MOV	RESULT.0,CY
	RET
ANDI_ST12:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.3
	MOV	RESULT.0,CY
	RET
ANDI_ST13:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.4
	MOV	RESULT.0,CY
	RET
ANDI_ST14:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.5
	MOV	RESULT.0,CY
	RET
ANDI_ST15:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.6
	MOV	RESULT.0,CY
	RET
ANDI_ST16:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG2.7
	MOV	RESULT.0,CY
	RET
ANDI_ST17:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.0
	MOV	RESULT.0,CY
	RET
ANDI_ST18:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.1
	MOV	RESULT.0,CY
	RET
ANDI_ST19:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.2
	MOV	RESULT.0,CY
	RET
ANDI_ST20:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.3
	MOV	RESULT.0,CY
	RET
ANDI_ST21:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.4
	MOV	RESULT.0,CY
	RET
ANDI_ST22:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.5
	MOV	RESULT.0,CY
	RET
ANDI_ST23:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.6
	MOV	RESULT.0,CY
	RET
ANDI_ST24:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG3.7
	MOV	RESULT.0,CY
	RET
ANDI_ST25:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.0
	MOV	RESULT.0,CY
	RET
ANDI_ST26:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.1
	MOV	RESULT.0,CY
	RET
ANDI_ST27:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.2
	MOV	RESULT.0,CY
	RET
ANDI_ST28:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.3
	MOV	RESULT.0,CY
	RET
ANDI_ST29:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.4
	MOV	RESULT.0,CY
	RET
ANDI_ST30:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.5
	MOV	RESULT.0,CY
	RET
ANDI_ST31:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.6
	MOV	RESULT.0,CY
	RET
ANDI_ST32:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG4.7
	MOV	RESULT.0,CY
	RET
ANDI_ST33:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.0
	MOV	RESULT.0,CY
	RET
ANDI_ST34:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.1
	MOV	RESULT.0,CY
	RET
ANDI_ST35:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.2
	MOV	RESULT.0,CY
	RET
ANDI_ST36:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.3
	MOV	RESULT.0,CY
	RET
ANDI_ST37:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.4
	MOV	RESULT.0,CY
	RET
ANDI_ST38:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.5
	MOV	RESULT.0,CY
	RET
ANDI_ST39:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.6
	MOV	RESULT.0,CY
	RET
ANDI_ST40:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG5.7
	MOV	RESULT.0,CY
	RET
ANDI_ST41:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.0
	MOV	RESULT.0,CY
	RET
ANDI_ST42:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.1
	MOV	RESULT.0,CY
	RET
ANDI_ST43:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.2
	MOV	RESULT.0,CY
	RET
ANDI_ST44:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.3
	MOV	RESULT.0,CY
	RET
ANDI_ST45:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.4
	MOV	RESULT.0,CY
	RET
ANDI_ST46:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.5
	MOV	RESULT.0,CY
	RET
ANDI_ST47:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.6
	MOV	RESULT.0,CY
	RET
ANDI_ST48:;#@#
	MOV	CY,RESULT.0
	ANL	CY,/STG6.7
	MOV	RESULT.0,CY
	RET
ANDI_STA:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.0
	MOV	RESULT.0,CY
	RET
ANDI_STB:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.1
	MOV	RESULT.0,CY
	RET
ANDI_STC:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.2
	MOV	RESULT.0,CY
	RET
ANDI_STD:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.3
	MOV	RESULT.0,CY
	RET
ANDI_STE:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.4
	MOV	RESULT.0,CY
	RET
ANDI_STF:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.5
	MOV	RESULT.0,CY
	RET
ANDI_STG:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.6
	MOV	RESULT.0,CY
	RET
ANDI_STH:
	MOV	CY,RESULT.0
	ANL	CY,/STGALPHA.7
	MOV	RESULT.0,CY
	RET
OR_ENTERSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,KBSW.3
	MOV	RESULT.0,CY
	RET
OR_UPSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,KBSW.4
	MOV	RESULT.0,CY
	RET
OR_RIGHTSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,KBSW.5
	MOV	RESULT.0,CY
	RET
OR_DOWNSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,KBSW.6
	MOV	RESULT.0,CY
	RET
OR_LEFTSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,KBSW.7
	MOV	RESULT.0,CY
	RET
OR_DIPSW1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.0
	MOV	RESULT.0,CY
	RET
OR_DIPSW2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.1
	MOV	RESULT.0,CY
	RET
OR_DIPSW3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.2
	MOV	RESULT.0,CY
	RET
OR_DIPSW4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.3
	MOV	RESULT.0,CY
	RET
OR_DIPSW5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.4
	MOV	RESULT.0,CY
	RET
OR_DIPSW6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.5
	MOV	RESULT.0,CY
	RET
OR_DIPSW7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.6
	MOV	RESULT.0,CY
	RET
OR_DIPSW8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,DIPSW.7
	MOV	RESULT.0,CY
	RET
OR_X1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.0
	MOV	RESULT.0,CY
	RET
OR_X2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.1
	MOV	RESULT.0,CY
	RET
OR_X3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.2
	MOV	RESULT.0,CY
	RET
OR_X4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.3
	MOV	RESULT.0,CY
	RET
OR_X5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.4
	MOV	RESULT.0,CY
	RET
OR_X6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.5
	MOV	RESULT.0,CY
	RET
OR_X7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.6
	MOV	RESULT.0,CY
	RET
OR_X8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP1.7
	MOV	RESULT.0,CY
	RET
OR_X9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.0
	MOV	RESULT.0,CY
	RET
OR_X10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.1
	MOV	RESULT.0,CY
	RET
OR_X11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.2
	MOV	RESULT.0,CY
	RET
OR_X12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.3
	MOV	RESULT.0,CY
	RET
OR_X13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.4
	MOV	RESULT.0,CY
	RET
OR_X14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.5
	MOV	RESULT.0,CY
	RET
OR_X15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.6
	MOV	RESULT.0,CY
	RET
OR_X16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP2.7
	MOV	RESULT.0,CY
	RET
OR_X17:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.0
	MOV	RESULT.0,CY
	RET
OR_X18:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.1
	MOV	RESULT.0,CY
	RET
OR_X19:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.2
	MOV	RESULT.0,CY
	RET
OR_X20:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.3
	MOV	RESULT.0,CY
	RET
OR_X21:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.4
	MOV	RESULT.0,CY
	RET
OR_X22:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.5
	MOV	RESULT.0,CY
	RET
OR_X23:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.6
	MOV	RESULT.0,CY
	RET
OR_X24:;#@#
	MOV	CY,RESULT.0
	ORL	CY,X_GRP3.7
	MOV	RESULT.0,CY
	RET
OR_Y1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.0
	MOV	RESULT.0,CY
	RET
OR_Y2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.1
	MOV	RESULT.0,CY
	RET
OR_Y3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.2
	MOV	RESULT.0,CY
	RET
OR_Y4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.3
	MOV	RESULT.0,CY
	RET
OR_Y5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.4
	MOV	RESULT.0,CY
	RET
OR_Y6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.5
	MOV	RESULT.0,CY
	RET
OR_Y7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.6
	MOV	RESULT.0,CY
	RET
OR_Y8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP1.7
	MOV	RESULT.0,CY
	RET
OR_Y9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.0
	MOV	RESULT.0,CY
	RET
OR_Y10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.1
	MOV	RESULT.0,CY
	RET
OR_Y11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.2
	MOV	RESULT.0,CY
	RET
OR_Y12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.3
	MOV	RESULT.0,CY
	RET
OR_Y13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.4
	MOV	RESULT.0,CY
	RET
OR_Y14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.5
	MOV	RESULT.0,CY
	RET
OR_Y15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.6
	MOV	RESULT.0,CY
	RET
OR_Y16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,Y_GRP2.7
	MOV	RESULT.0,CY
	RET
OR_R1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.0
	MOV	RESULT.0,CY
	RET
OR_R2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.1
	MOV	RESULT.0,CY
	RET
OR_R3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.2
	MOV	RESULT.0,CY
	RET
OR_R4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.3
	MOV	RESULT.0,CY
	RET
OR_R5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.4
	MOV	RESULT.0,CY
	RET
OR_R6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.5
	MOV	RESULT.0,CY
	RET
OR_R7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.6
	MOV	RESULT.0,CY
	RET
OR_R8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER1.7
	MOV	RESULT.0,CY
	RET
OR_R9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.0
	MOV	RESULT.0,CY
	RET
OR_R10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.1
	MOV	RESULT.0,CY
	RET
OR_R11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.2
	MOV	RESULT.0,CY
	RET
OR_R12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.3
	MOV	RESULT.0,CY
	RET
OR_R13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.4
	MOV	RESULT.0,CY
	RET
OR_R14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.5
	MOV	RESULT.0,CY
	RET
OR_R15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.6
	MOV	RESULT.0,CY
	RET
OR_R16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER2.7
	MOV	RESULT.0,CY
	RET
OR_R17:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.0
	MOV	RESULT.0,CY
	RET
OR_R18:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.1
	MOV	RESULT.0,CY
	RET
OR_R19:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.2
	MOV	RESULT.0,CY
	RET
OR_R20:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.3
	MOV	RESULT.0,CY
	RET
OR_R21:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.4
	MOV	RESULT.0,CY
	RET
OR_R22:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.5
	MOV	RESULT.0,CY
	RET
OR_R23:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.6
	MOV	RESULT.0,CY
	RET
OR_R24:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER3.7
	MOV	RESULT.0,CY
	RET
OR_R25:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.0
	MOV	RESULT.0,CY
	RET
OR_R26:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.1
	MOV	RESULT.0,CY
	RET
OR_R27:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.2
	MOV	RESULT.0,CY
	RET
OR_R28:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.3
	MOV	RESULT.0,CY
	RET
OR_R29:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.4
	MOV	RESULT.0,CY
	RET
OR_R30:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.5
	MOV	RESULT.0,CY
	RET
OR_R31:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.6
	MOV	RESULT.0,CY
	RET
OR_R32:;#@#
	MOV	CY,RESULT.0
	ORL	CY,REGISTER4.7
	MOV	RESULT.0,CY
	RET
OR_D1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,PP3C.0
	MOV	RESULT.0,CY
	RET
OR_D2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,PP3C.1
	MOV	RESULT.0,CY
	RET
OR_D3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,PP3C.2
	MOV	RESULT.0,CY
	RET
OR_D4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,PP3C.3
	MOV	RESULT.0,CY
	RET
OR_ST1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.0
	MOV	RESULT.0,CY
	RET
OR_ST2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.1
	MOV	RESULT.0,CY
	RET
OR_ST3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.2
	MOV	RESULT.0,CY
	RET
OR_ST4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.3
	MOV	RESULT.0,CY
	RET
OR_ST5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.4
	MOV	RESULT.0,CY
	RET
OR_ST6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.5
	MOV	RESULT.0,CY
	RET
OR_ST7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.6
	MOV	RESULT.0,CY
	RET
OR_ST8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG1.7
	MOV	RESULT.0,CY
	RET
OR_ST9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.0
	MOV	RESULT.0,CY
	RET
OR_ST10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.1
	MOV	RESULT.0,CY
	RET
OR_ST11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.2
	MOV	RESULT.0,CY
	RET
OR_ST12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.3
	MOV	RESULT.0,CY
	RET
OR_ST13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.4
	MOV	RESULT.0,CY
	RET
OR_ST14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.5
	MOV	RESULT.0,CY
	RET
OR_ST15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.6
	MOV	RESULT.0,CY
	RET
OR_ST16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG2.7
	MOV	RESULT.0,CY
	RET
OR_ST17:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG3.0
	MOV	RESULT.0,CY
	RET
OR_ST18:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG3.1
	MOV	RESULT.0,CY
	RET
OR_ST19:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG3.2
	MOV	RESULT.0,CY
	RET
OR_ST20:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG3.3
	MOV	RESULT.0,CY
	RET
OR_ST21:;#@#
	MOV	CY,RESULT.0

	ORL	CY,STG3.4
	MOV	RESULT.0,CY
	RET
OR_ST22:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG3.5
	MOV	RESULT.0,CY
	RET
OR_ST23:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG3.6
	MOV	RESULT.0,CY
	RET
OR_ST24:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG3.7
	MOV	RESULT.0,CY
	RET
OR_ST25:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.0
	MOV	RESULT.0,CY
	RET
OR_ST26:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.1
	MOV	RESULT.0,CY
	RET
OR_ST27:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.2
	MOV	RESULT.0,CY
	RET
OR_ST28:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.3
	MOV	RESULT.0,CY
	RET
OR_ST29:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.4
	MOV	RESULT.0,CY
	RET
OR_ST30:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.5
	MOV	RESULT.0,CY
	RET
OR_ST31:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.6
	MOV	RESULT.0,CY
	RET
OR_ST32:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG4.7
	MOV	RESULT.0,CY
	RET
OR_ST33:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.0
	MOV	RESULT.0,CY
	RET
OR_ST34:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.1
	MOV	RESULT.0,CY
	RET
OR_ST35:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.2
	MOV	RESULT.0,CY
	RET
OR_ST36:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.3
	MOV	RESULT.0,CY
	RET
OR_ST37:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.4
	MOV	RESULT.0,CY
	RET
OR_ST38:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.5
	MOV	RESULT.0,CY
	RET
OR_ST39:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.6
	MOV	RESULT.0,CY
	RET
OR_ST40:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG5.7
	MOV	RESULT.0,CY
	RET
OR_ST41:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.0
	MOV	RESULT.0,CY
	RET
OR_ST42:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.1
	MOV	RESULT.0,CY
	RET
OR_ST43:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.2
	MOV	RESULT.0,CY
	RET
OR_ST44:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.3
	MOV	RESULT.0,CY
	RET
OR_ST45:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.4
	MOV	RESULT.0,CY
	RET
OR_ST46:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.5
	MOV	RESULT.0,CY
	RET
OR_ST47:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.6
	MOV	RESULT.0,CY
	RET
OR_ST48:;#@#
	MOV	CY,RESULT.0
	ORL	CY,STG6.7
	MOV	RESULT.0,CY
	RET
OR_STA:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.0
	MOV	RESULT.0,CY
	RET
OR_STB:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.1
	MOV	RESULT.0,CY
	RET
OR_STC:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.2
	MOV	RESULT.0,CY
	RET
OR_STD:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.3
	MOV	RESULT.0,CY
	RET
OR_STE:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.4
	MOV	RESULT.0,CY
	RET
OR_STF:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.5
	MOV	RESULT.0,CY
	RET
OR_STG:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.6
	MOV	RESULT.0,CY
	RET
OR_STH:
	MOV	CY,RESULT.0
	ORL	CY,STGALPHA.7
	MOV	RESULT.0,CY
	RET
ORI_ENTERSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,/KBSW.3
	MOV	RESULT.0,CY
	RET
ORI_UPSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,/KBSW.4
	MOV	RESULT.0,CY
	RET
ORI_RIGHTSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,/KBSW.5
	MOV	RESULT.0,CY
	RET
ORI_DOWNSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,/KBSW.6
	MOV	RESULT.0,CY
	RET
ORI_LEFTSW:;#@#
	MOV	CY,RESULT.0
	ORL   CY,/KBSW.7
	MOV	RESULT.0,CY
	RET
ORI_DIPSW1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.0
	MOV	RESULT.0,CY
	RET
ORI_DIPSW2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.1
	MOV	RESULT.0,CY
	RET
ORI_DIPSW3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.2
	MOV	RESULT.0,CY
	RET
ORI_DIPSW4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.3
	MOV	RESULT.0,CY
	RET
ORI_DIPSW5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.4
	MOV	RESULT.0,CY
	RET
ORI_DIPSW6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.5
	MOV	RESULT.0,CY
	RET
ORI_DIPSW7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.6
	MOV	RESULT.0,CY
	RET
ORI_DIPSW8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/DIPSW.7
	MOV	RESULT.0,CY
	RET
ORI_X1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.0
	MOV	RESULT.0,CY
	RET
ORI_X2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.1
	MOV	RESULT.0,CY
	RET
ORI_X3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.2
	MOV	RESULT.0,CY
	RET
ORI_X4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.3
	MOV	RESULT.0,CY
	RET
ORI_X5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.4
	MOV	RESULT.0,CY
	RET
ORI_X6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.5
	MOV	RESULT.0,CY
	RET
ORI_X7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.6
	MOV	RESULT.0,CY
	RET
ORI_X8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP1.7
	MOV	RESULT.0,CY
	RET
ORI_X9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.0
	MOV	RESULT.0,CY
	RET
ORI_X10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.1
	MOV	RESULT.0,CY
	RET
ORI_X11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.2
	MOV	RESULT.0,CY
	RET
ORI_X12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.3
	MOV	RESULT.0,CY
	RET
ORI_X13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.4
	MOV	RESULT.0,CY
	RET
ORI_X14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.5
	MOV	RESULT.0,CY
	RET
ORI_X15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.6
	MOV	RESULT.0,CY
	RET
ORI_X16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP2.7
	MOV	RESULT.0,CY
	RET
ORI_X17:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.0
	MOV	RESULT.0,CY
	RET
ORI_X18:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.1
	MOV	RESULT.0,CY
	RET
ORI_X19:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.2
	MOV	RESULT.0,CY
	RET
ORI_X20:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.3
	MOV	RESULT.0,CY
	RET
ORI_X21:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.4
	MOV	RESULT.0,CY
	RET
ORI_X22:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.5
	MOV	RESULT.0,CY
	RET
ORI_X23:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.6
	MOV	RESULT.0,CY
	RET
ORI_X24:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/X_GRP3.7
	MOV	RESULT.0,CY
	RET
ORI_Y1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.0
	MOV	RESULT.0,CY
	RET
ORI_Y2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.1
	MOV	RESULT.0,CY
	RET
ORI_Y3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.2
	MOV	RESULT.0,CY
	RET
ORI_Y4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.3
	MOV	RESULT.0,CY
	RET
ORI_Y5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.4
	MOV	RESULT.0,CY
	RET
ORI_Y6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.5
	MOV	RESULT.0,CY
	RET
ORI_Y7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.6
	MOV	RESULT.0,CY
	RET
ORI_Y8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP1.7
	MOV	RESULT.0,CY
	RET
ORI_Y9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.0
	MOV	RESULT.0,CY
	RET
ORI_Y10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.1
	MOV	RESULT.0,CY
	RET
ORI_Y11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.2
	MOV	RESULT.0,CY
	RET
ORI_Y12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.3
	MOV	RESULT.0,CY
	RET
ORI_Y13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.4
	MOV	RESULT.0,CY
	RET
ORI_Y14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.5
	MOV	RESULT.0,CY
	RET
ORI_Y15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.6
	MOV	RESULT.0,CY
	RET
ORI_Y16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/Y_GRP2.7
	MOV	RESULT.0,CY
	RET
ORI_R1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.0
	MOV	RESULT.0,CY
	RET
ORI_R2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.1
	MOV	RESULT.0,CY
	RET
ORI_R3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.2
	MOV	RESULT.0,CY
	RET
ORI_R4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.3
	MOV	RESULT.0,CY
	RET
ORI_R5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.4
	MOV	RESULT.0,CY
	RET
ORI_R6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.5
	MOV	RESULT.0,CY
	RET
ORI_R7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.6
	MOV	RESULT.0,CY
	RET
ORI_R8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER1.7
	MOV	RESULT.0,CY
	RET
ORI_R9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.0
	MOV	RESULT.0,CY
	RET
ORI_R10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.1
	MOV	RESULT.0,CY
	RET
ORI_R11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.2
	MOV	RESULT.0,CY
	RET
ORI_R12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.3
	MOV	RESULT.0,CY
	RET
ORI_R13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.4
	MOV	RESULT.0,CY
	RET
ORI_R14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.5
	MOV	RESULT.0,CY
	RET
ORI_R15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.6
	MOV	RESULT.0,CY
	RET
ORI_R16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER2.7
	MOV	RESULT.0,CY
	RET
ORI_R17:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.0
	MOV	RESULT.0,CY
	RET
ORI_R18:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.1
	MOV	RESULT.0,CY
	RET
ORI_R19:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.2
	MOV	RESULT.0,CY
	RET
ORI_R20:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.3
	MOV	RESULT.0,CY
	RET
ORI_R21:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.4
	MOV	RESULT.0,CY
	RET
ORI_R22:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.5
	MOV	RESULT.0,CY
	RET
ORI_R23:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.6
	MOV	RESULT.0,CY
	RET
ORI_R24:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER3.7
	MOV	RESULT.0,CY
	RET
ORI_R25:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.0
	MOV	RESULT.0,CY
	RET
ORI_R26:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.1
	MOV	RESULT.0,CY
	RET
ORI_R27:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.2
	MOV	RESULT.0,CY
	RET
ORI_R28:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.3
	MOV	RESULT.0,CY
	RET
ORI_R29:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.4
	MOV	RESULT.0,CY
	RET
ORI_R30:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.5
	MOV	RESULT.0,CY
	RET
ORI_R31:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.6
	MOV	RESULT.0,CY
	RET
ORI_R32:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/REGISTER4.7
	MOV	RESULT.0,CY
	RET
ORI_D1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/PP3C.0
	MOV	RESULT.0,CY
	RET
ORI_D2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/PP3C.1
	MOV	RESULT.0,CY
	RET
ORI_D3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/PP3C.2
	MOV	RESULT.0,CY
	RET
ORI_D4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/PP3C.3
	MOV	RESULT.0,CY
	RET
ORI_ST1:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.0
	MOV	RESULT.0,CY
	RET
ORI_ST2:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.1
	MOV	RESULT.0,CY
	RET
ORI_ST3:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.2
	MOV	RESULT.0,CY
	RET
ORI_ST4:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.3
	MOV	RESULT.0,CY
	RET
ORI_ST5:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.4
	MOV	RESULT.0,CY
	RET
ORI_ST6:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.5
	MOV	RESULT.0,CY
	RET
ORI_ST7:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.6
	MOV	RESULT.0,CY
	RET
ORI_ST8:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG1.7
	MOV	RESULT.0,CY
	RET
ORI_ST9:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.0
	MOV	RESULT.0,CY
	RET
ORI_ST10:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.1
	MOV	RESULT.0,CY
	RET
ORI_ST11:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.2
	MOV	RESULT.0,CY
	RET
ORI_ST12:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.3
	MOV	RESULT.0,CY
	RET
ORI_ST13:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.4
	MOV	RESULT.0,CY
	RET
ORI_ST14:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.5
	MOV	RESULT.0,CY
	RET
ORI_ST15:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.6
	MOV	RESULT.0,CY
	RET
ORI_ST16:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG2.7
	MOV	RESULT.0,CY
	RET
ORI_ST17:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.0
	MOV	RESULT.0,CY
	RET
ORI_ST18:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.1
	MOV	RESULT.0,CY
	RET
ORI_ST19:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.2
	MOV	RESULT.0,CY
	RET
ORI_ST20:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.3
	MOV	RESULT.0,CY
	RET
ORI_ST21:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.4
	MOV	RESULT.0,CY
	RET
ORI_ST22:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.5
	MOV	RESULT.0,CY
	RET
ORI_ST23:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.6
	MOV	RESULT.0,CY
	RET
ORI_ST24:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG3.7
	MOV	RESULT.0,CY
	RET
ORI_ST25:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.0
	MOV	RESULT.0,CY
	RET
ORI_ST26:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.1
	MOV	RESULT.0,CY
	RET
ORI_ST27:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.2
	MOV	RESULT.0,CY
	RET
ORI_ST28:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.3
	MOV	RESULT.0,CY
	RET
ORI_ST29:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.4
	MOV	RESULT.0,CY
	RET
ORI_ST30:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.5
	MOV	RESULT.0,CY
	RET
ORI_ST31:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.6
	MOV	RESULT.0,CY
	RET
ORI_ST32:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG4.7
	MOV	RESULT.0,CY
	RET
ORI_ST33:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.0
	MOV	RESULT.0,CY
	RET
ORI_ST34:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.1
	MOV	RESULT.0,CY
	RET
ORI_ST35:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.2
	MOV	RESULT.0,CY
	RET
ORI_ST36:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.3
	MOV	RESULT.0,CY
	RET
ORI_ST37:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.4
	MOV	RESULT.0,CY
	RET
ORI_ST38:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.5
	MOV	RESULT.0,CY
	RET
ORI_ST39:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.6
	MOV	RESULT.0,CY
	RET
ORI_ST40:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG5.7
	MOV	RESULT.0,CY
	RET
ORI_ST41:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.0
	MOV	RESULT.0,CY
	RET
ORI_ST42:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.1
	MOV	RESULT.0,CY
	RET
ORI_ST43:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.2
	MOV	RESULT.0,CY
	RET
ORI_ST44:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.3
	MOV	RESULT.0,CY
	RET
ORI_ST45:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.4
	MOV	RESULT.0,CY
	RET
ORI_ST46:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.5
	MOV	RESULT.0,CY
	RET
ORI_ST47:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.6
	MOV	RESULT.0,CY
	RET
ORI_ST48:;#@#
	MOV	CY,RESULT.0
	ORL	CY,/STG6.7
	MOV	RESULT.0,CY
	RET
ORI_STA:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.0
	MOV	RESULT.0,CY
	RET
ORI_STB:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.1
	MOV	RESULT.0,CY
	RET
ORI_STC:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.2
	MOV	RESULT.0,CY
	RET
ORI_STD:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.3
	MOV	RESULT.0,CY
	RET
ORI_STE:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.4
	MOV	RESULT.0,CY
	RET
ORI_STF:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.5
	MOV	RESULT.0,CY
	RET
ORI_STG:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.6
	MOV	RESULT.0,CY
	RET
ORI_STH:
	MOV	CY,RESULT.0
	ORL	CY,/STGALPHA.7
	MOV	RESULT.0,CY
	RET
OUT_Y1:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.0,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y2:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.1,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y3:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.2,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y4:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.3,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y5:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.4,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y6:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.5,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y7:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.6,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y8:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP1.7,CY
	CALL	Y_GRP1_UPDATE
	RET
OUT_Y9:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.0,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_Y10:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.1,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_Y11:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.2,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_Y12:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.3,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_Y13:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.4,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_Y14:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.5,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_Y15:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.6,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_Y16:;#@#
	MOV	CY,RESULT.0
	MOV	Y_GRP2.7,CY
	CALL	Y_GRP2_UPDATE
	RET
OUT_R1:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.0,CY
	RET
OUT_R2:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.1,CY
	RET
OUT_R3:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.2,CY
	RET
OUT_R4:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.3,CY
	RET
OUT_R5:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.4,CY
	RET
OUT_R6:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.5,CY
	RET
OUT_R7:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.6,CY
	RET
OUT_R8:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER1.7,CY
	RET
OUT_R9:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.0,CY
	RET
OUT_R10:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.1,CY
	RET
OUT_R11:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.2,CY
	RET
OUT_R12:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.3,CY
	RET
OUT_R13:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.4,CY
	RET
OUT_R14:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.5,CY
	RET
OUT_R15:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.6,CY
	RET
OUT_R16:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER2.7,CY
	RET
OUT_R17:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.0,CY
	RET
OUT_R18:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.1,CY
	RET
OUT_R19:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.2,CY
	RET
OUT_R20:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.3,CY
	RET
OUT_R21:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.4,CY
	RET
OUT_R22:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.5,CY
	RET
OUT_R23:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.6,CY
	RET
OUT_R24:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER3.7,CY
	RET
OUT_R25:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.0,CY
	RET
OUT_R26:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.1,CY
	RET
OUT_R27:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.2,CY
	RET
OUT_R28:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.3,CY
	RET
OUT_R29:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.4,CY
	RET
OUT_R30:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.5,CY
	RET
OUT_R31:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.6,CY
	RET
OUT_R32:;#@#
	MOV	CY,RESULT.0
	MOV	REGISTER4.7,CY
	RET
OUT_D1:;#@#
	MOV	CY,RESULT.0
	MOV	PP3C.0,CY
	CALL	PP3C_UPDATE
	RET
OUT_D2:;#@#
	MOV	CY,RESULT.0
	MOV	PP3C.1,CY
	CALL	PP3C_UPDATE
	RET
OUT_D3:;#@#
	MOV	CY,RESULT.0
	MOV	PP3C.2,CY
	CALL	PP3C_UPDATE
	RET
OUT_D4:;#@#
	MOV	CY,RESULT.0
	MOV	PP3C.3,CY
	CALL	PP3C_UPDATE
	RET
OUT_ST1:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.0,CY
	RET
OUT_ST2:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.1,CY
	RET
OUT_ST3:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.2,CY
	RET
OUT_ST4:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.3,CY
	RET
OUT_ST5:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.4,CY
	RET
OUT_ST6:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.5,CY
	RET
OUT_ST7:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.6,CY
	RET
OUT_ST8:;#@#
	MOV	CY,RESULT.0
	MOV	STG1.7,CY
	RET
OUT_ST9:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.0,CY
	RET
OUT_ST10:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.1,CY
	RET
OUT_ST11:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.2,CY
	RET
OUT_ST12:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.3,CY
	RET
OUT_ST13:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.4,CY
	RET
OUT_ST14:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.5,CY
	RET
OUT_ST15:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.6,CY
	RET
OUT_ST16:;#@#
	MOV	CY,RESULT.0
	MOV	STG2.7,CY
	RET
OUT_ST17:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.0,CY
	RET
OUT_ST18:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.1,CY
	RET
OUT_ST19:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.2,CY
	RET
OUT_ST20:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.3,CY
	RET
OUT_ST21:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.4,CY
	RET
OUT_ST22:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.5,CY
	RET
OUT_ST23:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.6,CY
	RET
OUT_ST24:;#@#
	MOV	CY,RESULT.0
	MOV	STG3.7,CY
	RET
OUT_ST25:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.0,CY
	RET
OUT_ST26:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.1,CY
	RET
OUT_ST27:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.2,CY
	RET
OUT_ST28:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.3,CY
	RET
OUT_ST29:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.4,CY
	RET
OUT_ST30:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.5,CY
	RET
OUT_ST31:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.6,CY
	RET
OUT_ST32:;#@#
	MOV	CY,RESULT.0
	MOV	STG4.7,CY
	RET
OUT_ST33:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.0,CY
	RET
OUT_ST34:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.1,CY
	RET
OUT_ST35:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.2,CY
	RET
OUT_ST36:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.3,CY
	RET
OUT_ST37:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.4,CY
	RET
OUT_ST38:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.5,CY
	RET
OUT_ST39:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.6,CY
	RET
OUT_ST40:;#@#
	MOV	CY,RESULT.0
	MOV	STG5.7,CY
	RET
OUT_ST41:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.0,CY
	RET
OUT_ST42:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.1,CY
	RET
OUT_ST43:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.2,CY
	RET
OUT_ST44:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.3,CY
	RET
OUT_ST45:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.4,CY
	RET
OUT_ST46:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.5,CY
	RET
OUT_ST47:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.6,CY
	RET
OUT_ST48:;#@#
	MOV	CY,RESULT.0
	MOV	STG6.7,CY
	RET
OUT_STA:
	MOV	CY,RESULT.0
	MOV	STGALPHA.0,CY
	RET
OUT_STB:
	MOV	CY,RESULT.0
	MOV	STGALPHA.1,CY
	RET
OUT_STC:
	MOV	CY,RESULT.0
	MOV	STGALPHA.2,CY
	RET
OUT_STD:
	MOV	CY,RESULT.0
	MOV	STGALPHA.3,CY
	RET
OUT_STE:
	MOV	CY,RESULT.0
	MOV	STGALPHA.4,CY
	RET
OUT_STF:
	MOV	CY,RESULT.0
	MOV	STGALPHA.5,CY
	RET
OUT_STG:
	MOV	CY,RESULT.0
	MOV	STGALPHA.6,CY
	RET
OUT_STH:
	MOV	CY,RESULT.0
	MOV	STGALPHA.7,CY
	RET
OUT_JOB1:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB1
	CALL	JOB1
	ENDOFOUTJOB1:
	RET
OUT_JOB2:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB2
	CALL	JOB2
	ENDOFOUTJOB2:
	RET
OUT_JOB3:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB3
	CALL	JOB3
	ENDOFOUTJOB3:
	RET
OUT_JOB4:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB4
	CALL	JOB4
	ENDOFOUTJOB4:
	RET
OUT_JOB5:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB5
	CALL	JOB5
	ENDOFOUTJOB5:
	RET
OUT_JOB6:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB6
	CALL	JOB6
	ENDOFOUTJOB6:
	RET
OUT_JOB7:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB7
	CALL	JOB7
	ENDOFOUTJOB7:
	RET
OUT_JOB8:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB8
	CALL	JOB8
	ENDOFOUTJOB8:
	RET
OUT_JOB9:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB9
	CALL	JOB9
	ENDOFOUTJOB9:
	RET
OUT_JOB10:;#@#
	MOV	CY,RESULT.0
	JNC	ENDOFOUTJOB10
	CALL	JOB10
	ENDOFOUTJOB10:
	RET
OUTI_Y1:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.0,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y2:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.1,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y3:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.2,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y4:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.3,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y5:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.4,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y6:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.5,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y7:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.6,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y8:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP1.7,CY
	CALL	Y_GRP1_UPDATE
	RET
OUTI_Y9:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.0,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_Y10:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.1,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_Y11:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.2,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_Y12:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.3,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_Y13:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.4,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_Y14:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.5,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_Y15:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.6,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_Y16:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	Y_GRP2.7,CY
	CALL	Y_GRP2_UPDATE
	RET
OUTI_R1:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.0,CY
	RET
OUTI_R2:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.1,CY
	RET
OUTI_R3:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.2,CY
	RET
OUTI_R4:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.3,CY
	RET
OUTI_R5:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.4,CY
	RET
OUTI_R6:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.5,CY
	RET
OUTI_R7:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.6,CY
	RET
OUTI_R8:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER1.7,CY
	RET
OUTI_R9:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.0,CY
	RET
OUTI_R10:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.1,CY
	RET
OUTI_R11:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.2,CY
	RET
OUTI_R12:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.3,CY
	RET
OUTI_R13:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.4,CY
	RET
OUTI_R14:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.5,CY
	RET
OUTI_R15:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.6,CY
	RET
OUTI_R16:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER2.7,CY
	RET
OUTI_R17:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.0,CY
	RET
OUTI_R18:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.1,CY
	RET
OUTI_R19:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.2,CY
	RET
OUTI_R20:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.3,CY
	RET
OUTI_R21:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.4,CY
	RET
OUTI_R22:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.5,CY
	RET
OUTI_R23:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.6,CY
	RET
OUTI_R24:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER3.7,CY
	RET
OUTI_R25:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.0,CY
	RET
OUTI_R26:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.1,CY
	RET
OUTI_R27:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.2,CY
	RET
OUTI_R28:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.3,CY
	RET
OUTI_R29:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.4,CY
	RET
OUTI_R30:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.5,CY
	RET
OUTI_R31:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.6,CY
	RET
OUTI_R32:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	REGISTER4.7,CY
	RET
OUTI_D1:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	PP3C.0,CY
	CALL	PP3C_UPDATE
	RET
OUTI_D2:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	PP3C.1,CY
	CALL	PP3C_UPDATE
	RET
OUTI_D3:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	PP3C.2,CY
	CALL	PP3C_UPDATE
	RET
OUTI_D4:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	PP3C.3,CY
	CALL	PP3C_UPDATE
	RET
OUTI_ST1:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.0,CY
	RET
OUTI_ST2:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.1,CY
	RET
OUTI_ST3:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.2,CY
	RET
OUTI_ST4:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.3,CY
	RET
OUTI_ST5:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.4,CY
	RET
OUTI_ST6:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.5,CY
	RET
OUTI_ST7:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.6,CY
	RET
OUTI_ST8:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG1.7,CY
	RET
OUTI_ST9:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.0,CY
	RET
OUTI_ST10:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.1,CY
	RET
OUTI_ST11:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.2,CY
	RET
OUTI_ST12:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.3,CY
	RET
OUTI_ST13:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.4,CY
	RET
OUTI_ST14:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.5,CY
	RET
OUTI_ST15:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.6,CY
	RET
OUTI_ST16:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG2.7,CY
	RET
OUTI_ST17:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.0,CY
	RET
OUTI_ST18:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.1,CY
	RET
OUTI_ST19:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.2,CY
	RET
OUTI_ST20:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.3,CY
	RET
OUTI_ST21:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.4,CY
	RET
OUTI_ST22:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.5,CY
	RET
OUTI_ST23:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.6,CY
	RET
OUTI_ST24:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG3.7,CY
	RET
OUTI_ST25:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.0,CY
	RET
OUTI_ST26:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.1,CY
	RET
OUTI_ST27:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.2,CY
	RET
OUTI_ST28:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.3,CY
	RET
OUTI_ST29:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.4,CY
	RET
OUTI_ST30:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.5,CY
	RET
OUTI_ST31:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.6,CY
	RET
OUTI_ST32:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG4.7,CY
	RET
OUTI_ST33:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.0,CY
	RET
OUTI_ST34:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.1,CY
	RET
OUTI_ST35:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.2,CY
	RET
OUTI_ST36:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.3,CY
	RET
OUTI_ST37:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.4,CY
	RET
OUTI_ST38:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.5,CY
	RET
OUTI_ST39:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.6,CY
	RET
OUTI_ST40:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG5.7,CY
	RET
OUTI_ST41:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.0,CY
	RET
OUTI_ST42:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.1,CY
	RET
OUTI_ST43:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.2,CY
	RET
OUTI_ST44:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.3,CY
	RET
OUTI_ST45:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.4,CY
	RET
OUTI_ST46:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.5,CY
	RET
OUTI_ST47:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.6,CY
	RET
OUTI_ST48:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STG6.7,CY
	RET
OUTI_STA:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.0,CY
	RET
OUTI_STB:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.1,CY
	RET
OUTI_STC:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.2,CY
	RET
OUTI_STD:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.3,CY
	RET
OUTI_STE:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.4,CY
	RET
OUTI_STF:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.5,CY
	RET
OUTI_STG:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.6,CY
	RET
OUTI_STH:
	MOV	CY,RESULT.0
	CPL	CY
	MOV	STGALPHA.7,CY
	RET
OUTI_JOB1:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB1
	CALL	JOB1
	ENDOFOUTIJOB1:
	RET
OUTI_JOB2:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB2
	CALL	JOB2
	ENDOFOUTIJOB2:
	RET
OUTI_JOB3:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB3
	CALL	JOB3
	ENDOFOUTIJOB3:
	RET
OUTI_JOB4:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB4
	CALL	JOB4
	ENDOFOUTIJOB4:
	RET
OUTI_JOB5:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB5
	CALL	JOB5
	ENDOFOUTIJOB5:
	RET
OUTI_JOB6:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB6
	CALL	JOB6
	ENDOFOUTIJOB6:
	RET
OUTI_JOB7:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB7
	CALL	JOB7
	ENDOFOUTIJOB7:
	RET
OUTI_JOB8:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB8
	CALL	JOB8
	ENDOFOUTIJOB8:
	RET
OUTI_JOB9:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB9
	CALL	JOB9
	ENDOFOUTIJOB9:
	RET
OUTI_JOB10:;#@#
	MOV	CY,RESULT.0
	CPL	CY
	JNC	ENDOFOUTIJOB10
	CALL	JOB10
	ENDOFOUTIJOB10:
	RET
LADDER_TEST:
	;A PROGRAM THAT MEASURES KEY PRESSED DURATION TIME.
	CALL	LD_UPSW ;R1=UPSW STATUS, R2=STARTED, R3=STOPPED,R4=PRINTED
	CALL	OUT_R1
 	CALL	OR_R2
	CALL	OUT_R2

	CALL	LDI_R1
	CALL	AND_R2
	CALL	OR_R3
	CALL	OUT_R3

	CALL	LD_R2
	CALL	ANDI_R3
	CALL	OUT_STA

	CALL	LD_R3
	CALL	ANDI_R4
	CALL	OUT_JOB1
	CALL	OR_R4
	CALL	OUT_R4
	RET
;------------------------------- RTC ROUTINES -----------------------------
RTC_INI:
	PUSH	R0
	MOV	R0,#0xA0
	MOV	RTC_SLAVE__ADD,R0
	MOV	R0,#0x00
	MOV	RTC_CSR,R0
	MOV	R0,#0x00
	MOV	RTC_ACR,R0
	CALL	RTC_EEYEARSOFFSET_READ
	POP	R0
	RET
RTC_TIME12TIME24_EDIT:;#@#
	PUSH	WR0
	CALL	TILLENTERSWISRELEASED
	MOV	R1,GENERAL
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	CALL	T_PRINT
	CALL	I_PRINT
	CALL	M_PRINT
	CALL	E_PRINT
	CALL	SPACE_PRINT
	CALL	F_PRINT
	CALL	O_PRINT
	CALL	R_PRINT
	CALL	M_PRINT
	CALL	A_PRINT
	CALL	T_PRINT
	CALL	COLON_PRINT
	CALL	RTC_TIME12TIME24_PRINT
	RTCTIME12TIME24EDITREDO:
	CALL	KBSW_UPDATE
	JB	KBSW.4,RTCTIME12TIME24EDITCPL
	JB	KBSW.6,RTCTIME12TIME24EDITCPL
	JB	KBSW.3,RTCTIME12TIME24EDITFINISH
	JMP	RTCTIME12TIME24EDITREDO
	RTCTIME12TIME24EDITCPL:
	CPL	GENERAL.0
	CALL	RTC_TIME12TIME24_PRINT
	CALL	TILLUPSWISRELEASED
	CALL	TILLDOWNSWISRELEASED
	JMP	RTCTIME12TIME24EDITREDO
	RTCTIME12TIME24EDITFINISH:
	CMP	R1,GENERAL
	JE	ENDOFRTCTIME12TIME24EDIT
	CALL	GENERAL_WRITE
	ENDOFRTCTIME12TIME24EDIT:
	POP	WR0
	RET
RTC_TIME12:
	PUSH	R0
	MOV	R0,GENERAL
	CLR	GENERAL.0
	CMP	R0,GENERAL
	JE	ENDOFRTCTIME12
	CALL	GENERAL_WRITE
	ENDOFRTCTIME12:
	POP	R0
	RET
RTC_TIME24:
	PUSH	R0
	MOV	R0,GENERAL
	SETB	GENERAL.0
	CMP	R0,GENERAL
	JE	ENDOFRTCTIME24
	CALL	GENERAL_WRITE
	ENDOFRTCTIME24:
	POP	R0
	RET
RTC_TIME12TIME24_PRINT:
	;WILLPRINT 12 OR 24 HOUR TO LCD
	CALL	LCD_LOCATE214
	JB	GENERAL.0,TIME12TIME24PRINT24
	CALL	N1_PRINT
	CALL	N2_PRINT
	JMP	ENDOFTIME12TIME24PRINT
	TIME12TIME24PRINT24:
	CALL	N2_PRINT
	CALL	N4_PRINT
	ENDOFTIME12TIME24PRINT:
	RET
RTC_TIME_DISPLAY:
	PUSH	WR0
	CALL	LCD_LOCATE113
	JNB	GENERAL.0,RTCTIMEDISPLAYTIME12
	CALL	RTC_TIME24_PRINT
	JMP	ENDOFRTCTIMEDISPLAY
	RTCTIMEDISPLAYTIME12:
	CALL	SPACE_PRINT
	CALL	RTC_TIME12_PRINT
	ENDOFRTCTIMEDISPLAY:
	POP	WR0
	RET
RTC_DATE_DISPLAY:
	CALL	LCD_LOCATE11
	CALL	RTC_DATE_PRINT
	RET
RTC_OFFSETS2EE:
	;SUB WRITES YEARS OFFSET AND CENTURIES TO SERIAL EE.
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_CENTURIES
	MOV	R1,RTC_CENTURIES
	CALL	EE_WRITE
	MOV	R0,#EEADD_YEARSOFFSET
	MOV	R1,RTC_YEARSOFFSET
	CALL	EE_WRITE
	POP	WR0
	RET
RTC_EEYEARSOFFSET_READ:
	;READS 2 BYTES STORED IN EE THAT IS THE YEAR OFFSET i.e. 1990 THEN
	;STORES THEM IN RTC_YEARSOFFSET AND RTC_CENTURIES
	PUSH	WR0
	MOV	R0,#EEADD_YEARSOFFSET
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	RTC_YEARSOFFSET,R1
	MOV	R0,#EEADD_CENTURIES
	CALL	EE_BANK0
	CALL	EE_READ
	MOV	RTC_CENTURIES,R1
	POP	WR0
	RET
RTC_YEARSOFFSET_WRITE:
	;SUB WRITES EE_YEARSOFFSET EE_CENTURIES TO SERIAL EE. USED WHENEVER THERE IS A CHANGE IN YEAR OFFSET.
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_CENTURIES
	MOV	R1,RTC_CENTURIES
	CALL	EE_WRITE
	MOV	R0,#EEADD_YEARSOFFSET
	MOV	R1,RTC_YEARSOFFSET
	CALL	EE_WRITE
	POP	WR0
	RET
RTC_READ:
	;READS REGISTER FROM I2C RTC. INPUT: R0 ADD. OUTPUT IS R0
	PUSH	R1
	PUSH	R2
	MOV	R2,RTC_SLAVE__ADD
	MOV	I2C_SLAVE__ADD,R2
	CALL	I2C_READ
	MOV	R0,R1
	POP	R2
	POP	R1
	RET
RTC_WRITE:
	;WRITES BYTE TO I2CRTC. INPUT:R0 ADDRESS,R1 DATA
	PUSH	R2
	MOV	R2,RTC_SLAVE__ADD
	MOV	I2C_SLAVE__ADD,R2
	CALL	I2C_WRITE
	POP	R2
	RET
RTC_CSR_UPDATE:
	;SUB UPDATES CONTROL/STATUS REGISTER IN RTC.
	PUSH	WR0
	MOV	R1,RTC_CSR
	MOV	R0,#RTC_CSR_ADD
	CALL	RTC_WRITE
	POP	WR0
	RET
RTC_ACR_UPDATE:
	;SUB UPDATES ALARM CONTROL REGISTER IN RTC.
	PUSH	WR0
	MOV	R1,RTC_ACR
	MOV	R0,#RTC_ACR_ADD
	CALL	RTC_WRITE
	POP	WR0
	RET
RTC_ALARM_ENABLE:
	PUSH	R0
	MOV	R0,RTC_CSR
	ORL	R0,#0x04
	MOV	RTC_CSR,R0
	CALL	RTC_CSR_UPDATE
	POP	R0
	RET
RTC_ALARM_DISABLE:
	PUSH	R0
	MOV	R0,RTC_CSR
	ANL	R0,#0xFB
	MOV	RTC_CSR,R0
	CALL	RTC_CSR_UPDATE
	POP	R0
	RET
RTC_CC_NO:
	;CC = COUNT CAPTURE
	PUSH	R0
	MOV	R0,RTC_CSR
	ANL	R0,#0xBF
	MOV	RTC_CSR,R0
	CALL	RTC_CSR_UPDATE
	POP	R0
	RET
RTC_CC_YES:
	;CC = COUNT CAPTURE
	PUSH	R0
	MOV	R0,RTC_CSR
	ORL	R0,#0x40
	MOV	RTC_CSR,R0
	CALL	RTC_CSR_UPDATE
	POP	R0
	RET
RTC_COUNTER_STOP:
	PUSH	R0
	MOV	R0,RTC_CSR
	ORL	R0,#0x80
	MOV	RTC_CSR,R0
	CALL	RTC_CSR_UPDATE
	POP	R0
	RET
RTC_COUNTER_START:
	PUSH	R0
	MOV	R0,RTC_CSR
	ANL	R0,#0x7F
	MOV	RTC_CSR,R0
	CALL	RTC_CSR_UPDATE
	POP	R0
	RET
RTC_TF_NOTIMER:
	;TF = TIMER FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xF8
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TF_HOFS:
	;TF = TIMER FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xF8
	ORL	R0,#0x01
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TF_SECONDS:
	;TF = TIMER FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xF8
	ORL	R0,#0x02
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TF_MINUTES:
	;TF = TIMER FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xF8
	ORL	R0,#0x03
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TF_HOURS:
	;TF = TIMER FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xF8
	ORL	R0,#0x04
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TF_DAYS:
	;TF = TIMER FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xF8
	ORL	R0,#0x05
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TI_ENABLE:
	;TI = TIMER INTERRUPT
	PUSH	R0
	MOV	R0,RTC_ACR
	ORL	R0,#0x08
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TI_DISABLE:
	;TI = TIMER INTERRUPT
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xF7
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_CAF_NOALARM:	
	;CAF = CLOCK ALARM FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xCF
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_CAF_DAILY:
	;CAF = CLOCK ALARM FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xCF
	ORL	R0,#0x10
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_CAF_WEEKDAY:
	;CAF = CLOCK ALARM FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xCF
	ORL	R0,#0x20
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_CAF_DATED:
	;CAF = CLOCK ALARM FUNCTION
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xCF
	ORL	R0,#0x30
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TA_ENABLE:
	;TA = TIMER ALARM
	PUSH	R0
	MOV	R0,RTC_ACR
	ORL	R0,#0x40
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TA_DISABLE:
	;TA = TIMER ALARM
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0xBF
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_AI_ENABLE:
	;AI = ALARM INTERRUPT
	PUSH	R0
	MOV	R0,RTC_ACR
	ORL	R0,#0x80
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_AI_DISABLE:
	;AI = ALARM INTERRUPT
	PUSH	R0
	MOV	R0,RTC_ACR
	ANL	R0,#0x7F
	MOV	RTC_ACR,R0
	CALL	RTC_ACR_UPDATE
	POP	R0
	RET
RTC_TIME_READ:;#@#
	PUSH	R0
	CALL	RTC_CC_YES
	MOV	R0,#RTC_HOFS_ADD
	CALL	RTC_READ
	MOV	RTC_HOFS,R0
	MOV	R0,#RTC_SECONDS_ADD
	CALL	RTC_READ
	MOV	RTC_SECONDS,R0
	MOV	R0,#RTC_MINUTES_ADD
	CALL	RTC_READ
	MOV	RTC_MINUTES,R0
	MOV	R0,#RTC_HOURS_ADD
	CALL	RTC_READ
	MOV	RTC_HOURS,R0
	CALL	RTC_CC_NO
	POP	R0
	RET
RTC_TIME1_PRINT:
	PUSH	R0
	CALL	LCD_LOCATE11
	MOV	R0,RTC_TIME1_DAYS
	CALL	R0BCD2LCD
	MOV	R0,RTC_TIME1_MONTHS
	CALL	R0BCD2LCD
	MOV	R0,RTC_TIME1_CENTURIES
	CALL	R0BCD2LCD
	MOV	R0,RTC_TIME1_YEARS
	CALL	R0BCD2LCD
	MOV	R0,RTC_TIME1_HOURS
	CALL	R0BCD2LCD
	MOV	R0,RTC_TIME1_MINUTES
	CALL	R0BCD2LCD
	MOV	R0,RTC_TIME1_SECONDS
	CALL	R0BCD2LCD
	MOV	R0,RTC_TIME1_HOFS
	CALL	R0BCD2LCD
	POP	R0
	RET
RTC_TIME2_READ:
	;SUB READS TIME STORES IT IN RTC_TIME2 AS REFERENCE TO COMPARE TO TIME1 FOR EXAMPLE
	PUSH	R0
	CALL	RTC_TIME_READ
	CALL	RTC_DATE_READ
	MOV	R0,RTC_HOFS
	MOV	RTC_TIME2_HOFS,R0
	MOV	R0,RTC_SECONDS
	MOV	RTC_TIME2_SECONDS,R0
	MOV	R0,RTC_MINUTES
	MOV	RTC_TIME2_MINUTES,R0
	MOV	R0,RTC_HOURS
	MOV	RTC_TIME2_HOURS,R0
	MOV	R0,RTC_DAYS
	MOV	RTC_TIME2_DAYS,R0
	MOV	R0,RTC_MONTHS
	MOV	RTC_TIME2_MONTHS,R0
	CALL	RTC_ACTUALYEARS2DECIMALA
	CALL	DECIMALAYEARS2R0
	MOV	RTC_TIME2_YEARS,R0
	CALL	DECIMALACENTURIES2R0
	MOV	RTC_TIME2_CENTURIES,R0
	POP	R0
	RET
RTC_TIME1_READ:
	;SUB READS TIME STORES IT IN TIME1 AS REFERENCE TO COMPARE TO TIME2 FOR EXAMPLE
	PUSH	R0
	CALL	RTC_TIME_READ
	CALL	RTC_DATE_READ
	MOV	R0,RTC_HOFS
	MOV	RTC_TIME1_HOFS,R0
	MOV	R0,RTC_SECONDS
	MOV	RTC_TIME1_SECONDS,R0
	MOV	R0,RTC_MINUTES
	MOV	RTC_TIME1_MINUTES,R0
	MOV	R0,RTC_HOURS
	MOV	RTC_TIME1_HOURS,R0
	MOV	R0,RTC_DAYS
	MOV	RTC_TIME1_DAYS,R0
	MOV	R0,RTC_MONTHS
	MOV	RTC_TIME1_MONTHS,R0
	CALL	RTC_ACTUALYEARS2DECIMALA
	CALL	DECIMALAYEARS2R0
	MOV	RTC_TIME1_YEARS,R0
	CALL	DECIMALACENTURIES2R0
	MOV	RTC_TIME1_CENTURIES,R0
	POP	R0
	RET
DECIMALAYEARS2R0:
 	;RETURNS THE YEARS IN R0. DECIMALA+10,DECIMALA+11 ARE COMBINED THEN -> R0
	;EX. 08 09 -> BECOMES 89
	PUSH	R1
	MOV	R0,DECIMALA+10
	MOV	R1,DECIMALA+11
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	POP	R1
	RET
DECIMALACENTURIES2R0:
	;RETURNS THE CENTURIES IN R0. DECIMALA+8,DECIMALA+9 ARE COMBINED THEN -> R0
	;EX. 01 09 -> BECOMES 19
	PUSH	R1
	MOV	R0,DECIMALA+8
	MOV	R1,DECIMALA+9
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	POP	R1
	RET
RTC_ACTUALYEARS2DECIMALA:
	;DECIMALA WILL CONTAIN THE YEARS i.e 2004. LEAST IS IN LEAST
	CALL	DECIMALA_CLR
	CALL	DECIMALB_CLR
	CALL	RTC_OFFSETS2DECIMALA
	CALL	RTC_YEARS2DECIMALB
	CALL	DECIMAL_ADD
	RET
RTC_TIME_WRITE:
	PUSH	WR0
	CALL	RTC_COUNTER_STOP
	MOV	R0,#RTC_HOFS_ADD
	MOV	R1,#0x59
	CALL	RTC_WRITE
	MOV	R0,#RTC_SECONDS_ADD
	MOV	R1,RTC_SECONDS
	CALL	RTC_WRITE
	MOV	R0,#RTC_MINUTES_ADD
	MOV	R1,RTC_MINUTES
	CALL	RTC_WRITE
	MOV	R0,#RTC_HOURS_ADD
	MOV	R1,RTC_HOURS
	CALL	RTC_WRITE
	CALL	RTC_COUNTER_START
	POP	WR0
	RET
RTC_TIME_EDIT:;#@#
	PUSH	DR0
	CALL	LCD_LOCATION_SAVE
	PUSH	LCD_SHIFT
	PUSH	LCD_DISPLAY
	PUSH	LCD_MODE
	MOV	R3,#00	;ZERO MEANS THAT TIME DID NOT CHANGE
	CALL	LCD_CURSOR_ON
	CALL	LCD_BLINK_ON
	CALL	RTC_TIME_READ
	CALL	LCD_LINE2_CLR
	MOV	R0,#0
	MOV	RTC_HOFS,R0
	CALL	LCD_LOCATE21
	CALL	PRINTF_MSG_TIME
	MOV	R0,RTC_HOURS
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	COLON_PRINT
	MOV	R0,RTC_MINUTES
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	COLON_PRINT
	MOV	R0,RTC_SECONDS
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	TILLENTERSWISRELEASED
	RTCTIMEEDITHOURS:				;HOURS........
	CALL	LCD_LOCATE27
	CALL	TILLRIGHTSWISRELEASED
	CALL	TILLLEFTSWISRELEASED
	MOV	R0,RTC_HOURS
	CALL	CBCD2BIN
	MOV	R1,#0D	;MIN
	MOV	R2,#23D	;MAX
	CALL	RTC_BYTE_EDIT
	MOV	R0,HEXLOW
	MOV	RTC_HOURS,R0
	CMP	R1,#0001000B	;IS KEY PRESSED IS ENTER
	JE	LONGENDOFRTCTIMEEDIT
	JB    KBSW.5,RTCTIMEEDITMINUTES1
	JB    KBSW.7,RTCTIMEEDITSECONDS1
	RTCTIMEEDITMINUTES1:
	JMP	RTCTIMEEDITMINUTES
	LONGENDOFRTCTIMEEDIT:
	JMP	ENDOFRTCTIMEEDIT
	RTCTIMEEDITSECONDS1:
	JMP	RTCTIMEEDITSECONDS
	RTCTIMEEDITMINUTES:				;MINUTES........
	CALL	LCD_LOCATE210
	CALL	TILLRIGHTSWISRELEASED
	CALL	TILLLEFTSWISRELEASED
	MOV	R0,RTC_MINUTES
	CALL	CBCD2BIN
	MOV	R1,#0D	;MIN
	MOV	R2,#59D	;MAX
	CALL	RTC_BYTE_EDIT
	MOV	R0,HEXLOW
	MOV	RTC_MINUTES,R0
	CMP	R1,#0001000B	;IS KEY PRESSED? ENTER
	JB    KBSW.5,RTCTIMEEDITSECONDS2
	JB    KBSW.7,RTCTIMEEDITHOURS2
	JE	ENDOFRTCTIMEEDIT
	RTCTIMEEDITHOURS2:
	JMP	RTCTIMEEDITHOURS
	RTCTIMEEDITSECONDS2:
	JMP	RTCTIMEEDITSECONDS
	RTCTIMEEDITSECONDS:				;SECONDS........
	CALL	LCD_LOCATE213
	CALL	TILLRIGHTSWISRELEASED
	CALL	TILLLEFTSWISRELEASED
	MOV	R0,RTC_SECONDS
	CALL	CBCD2BIN
	MOV	R1,#0D	;MIN
	MOV	R2,#59D	;MAX
	CALL	RTC_BYTE_EDIT
	MOV	R0,HEXLOW
	MOV	RTC_SECONDS,R0
	CMP	R1,#0001000B	;IS KEY PRESSED? ENTER
	JE	ENDOFRTCTIMEEDIT
	JB    KBSW.5,RTCTIMEEDITHOURS3
	JB    KBSW.7,RTCTIMEEDITMINUTES3
	RTCTIMEEDITHOURS3:
	JMP	RTCTIMEEDITHOURS
	RTCTIMEEDITMINUTES3:
	JMP	RTCTIMEEDITMINUTES
	ENDOFRTCTIMEEDIT:
	CMP	R3,#1
	JNE	RTCTIMEEDITPASSTIMECHANGE
	CALL	RTC_TIME_WRITE
	RTCTIMEEDITPASSTIMECHANGE:
	CALL	LCD_CURSOR_OFF
	CALL	LCD_BLINK_OFF
	CALL	LCD_LINE2_CLR
	POP	LCD_MODE
	POP	LCD_DISPLAY
	POP	LCD_SHIFT
	CALL	LCD_DISPLAY_UPDATE
	CALL	LCD_SHIFT_UPDATE
	CALL	LCD_MODE_UPDATE
	CALL	LCD_LOCATION_RESTORE
	CALL	TILLENTERSWISRELEASED
	POP	DR0
	RET
RTC_BYTE_EDIT:
	;SUB EDITS A 2 DECIMAL VALUES 00-99 CONTROLLED BY MIN & MAX. MAKE SURE THAT R2 > R1 & MAX>MIN. VALUE CAN BE SEEN ON SCREEN
	;INPUTS R0 R1 R2.  R0="BYTE VAL 00~99 BINARY REPRESENTATION",R1=BCD "MIN VAL",R2=BCD "MAX VAL".RETURN IS IN R0,R1. R0 IS ACTUAL BINARY VALUE AND HEXLOW AS BCD REPRESENTATION,R1 RETURNS KEY PRESSED IF,ENTER=2^3,<-=2^7,->=2^5
	CALL	LCD_LOCATION_READ
	RTCBYTEEDITLOOP:
      CALL  KBSW_UPDATE
      JB    KBSW.3,RTCBYTEEDITLOOP      ;ENTER
	PUSH	R0
	MOV	R0,#00
	MOV	HEXHIGH,R0
	POP	R0
	MOV	HEXLOW,R0
	CALL	HEX2DECIMAL
	CALL	DECIMALA2X2LCD
	CALL	LCD_LOCATE
	CALL	LCD_CURSOR_ON
	CALL	SPEAKER_RUNTIME50
	RERTCBYTEEDIT:
	CPL	P1.2			;CALL WDT
      CALL  KBSW_UPDATE
      JB    KBSW.4,RTCBYTEEDITINC       ;UP
      JB    KBSW.6,RTCBYTEEDITDEC       ;DOWN
      JB    KBSW.3,LONGRTCBYTEEDIT3TOR1     ;ENTER
      JB    KBSW.5,LONGRTCBYTEEDIT5TOR1     ;RIGHT
      JB    KBSW.7,LONGRTCBYTEEDIT7TOR1     ;LEFT
	JMP	RERTCBYTEEDIT
	LONGRTCBYTEEDIT3TOR1:
	JMP	RTCBYTEEDIT3TOR1
	LONGRTCBYTEEDIT5TOR1:
	JMP	RTCBYTEEDIT5TOR1
	LONGRTCBYTEEDIT7TOR1:
	JMP	RTCBYTEEDIT7TOR1
	RTCBYTEEDITINC:
	MOV	R3,#1		;ONE MEANS THAT TIME WAS CHANGED
	INC	R0,#1
	CMP	R0,R2		;CMP TO MAX
	JLE	EDITBYTENOTGREATER
	MOV	R0,R1		;FOUND > MAX SO MIN -> R0
	EDITBYTENOTGREATER:
	CALL	SPEAKER_RUNTIME100
	CALL	PLAY1700
	CALL	LCD_CURSOR_OFF
	PUSH	R0
	MOV	R0,#00
	MOV	HEXHIGH,R0
	POP	R0
	MOV	HEXLOW,R0
	CALL	HEX2DECIMAL
	CALL	DECIMALA2X2LCD
	CALL	LCD_LOCATE
	CALL	LCD_CURSOR_ON
	CALL	SLEEP200	;IMAD
	JMP	RERTCBYTEEDIT
	RTCBYTEEDITDEC:
	MOV	R3,#01	;ONE MEANS THAT TIME WAS CHANGED
	DEC	R0,#1
	CMP	R0,R1		;CMP TO MIN
	JG	EDITBYTENOTLESS
	JE	EDITBYTENOTLESS
	MOV	R0,R2		;FOUND < MIN SO MAX -> R0
	EDITBYTENOTLESS:
	CMP	R0,R2		;CMP TO MAX
	JG	EDITBYTEGREATER
	JMP	RTCBYTEEDITPASSG2
	EDITBYTEGREATER:
	MOV	R0,R2		;FOUND > MAX SO MIN -> R0
	RTCBYTEEDITPASSG2:
	CALL	SPEAKER_RUNTIME100
	CALL	PLAY1500
	CALL	LCD_CURSOR_OFF
	PUSH	R0		;LATELY
	MOV	R0,#00	;LATELY
	MOV	HEXHIGH,R0	;LATELY
	POP	R0		;LATELY
	MOV	HEXLOW,R0
	CALL	HEX2DECIMAL
	CALL	DECIMALA2X2LCD
	CALL	LCD_LOCATE
	CALL	LCD_CURSOR_ON
	CALL	SLEEP200	;IMAD
	JMP	RERTCBYTEEDIT
	RTCBYTEEDIT3TOR1:
	MOV	R1,#00001000B
	JMP	ENDOFRTCBYTEEDIT
	RTCBYTEEDIT5TOR1:
	MOV	R1,#00100000B
	JMP	ENDOFRTCBYTEEDIT
	RTCBYTEEDIT7TOR1:
	MOV	R1,#10000000B
	JMP	ENDOFRTCBYTEEDIT
	ENDOFRTCBYTEEDIT:
	CALL	LCD_CURSOR_OFF
	RET
RTC_TIME_PRINT:;#@#
	RET
RTC_TIME12_PRINT:;#@#
	PUSH	WR0
	CALL	RTC_CC_YES
	MOV	R0,#RTC_HOURS_ADD		;READING 'HOURS'
	CALL	RTC_READ
	PUSH	R0
	CMP	R0,#0x00
	JNE	RTCTIMEDISPLAYGT0
	MOV	R0,#0x12
	JMP	RTCTIMEDISPLAYENDOFHOURADJUST
	RTCTIMEDISPLAYGT0:
	CMP	R0,#0x12
	JLE	RTCTIMEDISPLAYENDOFHOURADJUST	;ASITIS
	;SUBTRACTING 12
	PUSH	R0
	MOV	R0,#2
	MOV	DECIMALB+11D,R0
	MOV	R0,#1
	MOV	DECIMALB+10D,R0
	POP	R0
	MOV	R1,R0
	ANL	R0,#0x0F
	MOV	DECIMALA+11D,R0
	ANL	R1,#0xF0
	SRL	R1
	SRL	R1
	SRL	R1
	SRL	R1
	MOV	DECIMALA+10D,R1
	CALL	DECIMAL_SUB
	MOV	R0,DECIMALA+10
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	MOV	R1,DECIMALA+11
	ORL	R0,R1
	RTCTIMEDISPLAYENDOFHOURADJUST:
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	COLON_PRINT
	MOV	R0,#RTC_MINUTES_ADD	;READING 'MINUTES'
	CALL	RTC_READ
	MOV	HEXLOW,R0
	CALL	HEX2LCD
;	CALL	COLON_PRINT
;	MOV	R0,#RTC_SECONDS_ADD	;READING 'SECONDS'
;	CALL	RTC_READ
;	MOV	HEXLOW,R0
;	CALL	HEX2LCD
;	CALL	SPACE_PRINT
	POP	R0				;PRINT AM PM
	CMP	R0,#0x11
	JG	RTCTIMEDISPLAYPM
	MOV	R0,#"a"
	JMP	RTCTIMEDISPLAYENDOFAMPM
	RTCTIMEDISPLAYPM:
	MOV	R0,#"p"
	RTCTIMEDISPLAYENDOFAMPM:
	CALL	R02LCD
	MOV	R0,#"m"
	CALL	R02LCD
	CALL	RTC_CC_NO
	POP	WR0
	RET
RTC_TIME24_PRINT:;#@#
	PUSH	R0
	CALL	RTC_CC_YES
	MOV	R0,#RTC_HOURS_ADD		;READING 'HOURS'
	CALL	RTC_READ
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	COLON_PRINT
	MOV	R0,#RTC_MINUTES_ADD	;READING 'MINUTES'
	CALL	RTC_READ
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	COLON_PRINT
	MOV	R0,#RTC_SECONDS_ADD	;READING 'SECONDS'
	CALL	RTC_READ
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	RTC_CC_NO
	POP	R0
	RET
RTC_DATE_INI:
	PUSH	R0
	MOV	R0,#0x31
	MOV	RTC_DAYS,R0
	MOV	R0,#0x12
	MOV	RTC_MONTHS,R0
	MOV	R0,#0x03
	MOV	RTC_YEARS,R0
	MOV	R0,#0x06
	MOV	RTC_DOW,R0
	POP	R0
	RET
RTC_DATE_READ:;#@#
	PUSH	R0
	CALL	RTC_CC_YES
	MOV	R0,#RTC_DAYS_ADD
	CALL	RTC_READ
	PUSH	R0
	ANL	R0,#0x3F
	MOV	RTC_DAYS,R0
	MOV	R0,#RTC_MONTHS_ADD
	CALL	RTC_READ
	PUSH	R0
	ANL	R0,#0x1F
	MOV	RTC_MONTHS,R0
	POP	R0
	ANL	R0,#0xE0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	MOV	RTC_DOW,R0
	POP	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	MOV	RTC_YEARS,R0
	CALL	RTC_CC_NO
	POP	R0
	RET
RTC_02EERTCYEARSEQU3:
	;WRITES 0 TO LOCATION EE_RTC_YEARSEQU3_ADD
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_RTCYEARSEQU3
	MOV	R1,#0
	CALL	EE_WRITE
	POP	WR0
	RET
RTC_12EERTCYEARSEQU3:
	;WRITES 1 TO LOCATION EE_RTC_YEARSEQU3_ADD
	PUSH	WR0
	CALL	EE_BANK0
	MOV	R0,#EEADD_RTCYEARSEQU3
	MOV	R1,#1
	CALL	EE_WRITE
	POP	WR0
	RET
RTC_DATE_WRITE:
	PUSH	WR0
	CALL	RTC_02EERTCYEARSEQU3
	CALL	RTC_COUNTER_STOP
	MOV	R1,RTC_YEARS
	SLL	R1
	SLL	R1
	SLL	R1
	SLL	R1
	SLL	R1
	SLL	R1
	ORL	R1,RTC_DAYS
	MOV	R0,#RTC_DAYS_ADD
	CALL	RTC_WRITE
	MOV	R1,RTC_DOW
	SLL	R1
	SLL	R1
	SLL	R1
	SLL	R1
	SLL	R1
	ORL	R1,RTC_MONTHS
	MOV	R0,#RTC_MONTHS_ADD
	CALL	RTC_WRITE
	CALL	RTC_COUNTER_START
	CALL	RTC_OFFSETS2EE
	POP	WR0
	RET
RTC_MONTHDAYS_MAXIMUM:
	;SUB FINDS MAXIMUM DAYS THAT CAN BE IN A MONTH & STORES IT IN R0 AS BINARY VALUE
	PUSH	R1
	PUSH	R2
	MOV	R0,RTC_MONTHS	;START GETTING HOW MANY DAYS IS A MONTH FROM A TABLE IN ROM
	CALL	CBCD2BIN
	MOV	R1,R0
	MOV	R0,#00
	MOV	WR30,#MSG_MONTHDAYS
	ADD	WR30,WR0	;WR0 HOLDS OFFSET TO MONTH DAYS MESSAGE
	DEC	WR30,#1
	MOV	R2,@DR28
	MOV	R0,RTC_MONTHS	;SEE WHEATHER FERRUARY IS A LEAP YEAR 28||29
	CMP	R0,#2			;FEBRUARY
	JNE	RTCDATEEDITPASSNOTFEBOR29
	MOV	R0,RTC_YEARS
	CMP	R0,#0			;LEAP
	JNE	RTCDATEEDITPASSNOTFEBOR29
	INC	R2,#1			;MAXIMUM 29 DAYS
	RTCDATEEDITPASSNOTFEBOR29:
	MOV	R0,R2
	POP	R2
	POP	R1
	RET
RTC_DAYS_VALIDATE:
	;START CHECK FOR DAY VIOLATION ADJUSTS RTC_DAYS TO THE MAXIMUM ALLOWABLE IF IT EXCEEDS LIMITS
	PUSH	WR0
	PUSH	R2
	CALL	RTC_MONTHDAYS_MAXIMUM
	MOV	R1,R0	;MAXIMUM DAYS BINARY VALUE
	MOV	R2,R0
	MOV	R0,RTC_DAYS
	CALL	CBCD2BIN
	CMP	R2,R0	;R0 IS DAYS NOW, R2 IS MAXIMUM DAYS ALLOWABLE
	JG	ENDOFRTCDAYSVALIDATE
	JE	ENDOFRTCDAYSVALIDATE
	MOV	R0,R1
	CALL	CBIN2BCD
	MOV	RTC_DAYS,R0
	CALL	LCD_LOCATE17
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	ENDOFRTCDAYSVALIDATE:
	POP	R2
	POP	WR0
	RET
RTC_DATE2DAYS:
	;SUB TRANSFERS DATE 27-03-1998 TO # OF DAYS IN DECIMALA
	RET
RTC_DATE_EDIT:;#@#
	PUSH	DR0
	CALL	TILLENTERSWISRELEASED
	CALL	LCD_LOCATION_SAVE
	PUSH	LCD_SHIFT
	PUSH	LCD_DISPLAY
	PUSH	LCD_MODE
	MOV	R3,#00	;ZERO MEANS THAT DATE DID NOT CHANGE
	CALL	LCD_CURSOR_ON
	CALL	LCD_BLINK_ON
	CALL	RTC_DATE_READ
	CALL	LCD_LINE2_CLR
	CALL	LCD_LOCATE21
	CALL	PRINTF_MSG_DATE
	MOV	R0,RTC_DAYS
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	MINUS_PRINT
	MOV	R0,RTC_MONTHS
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	MINUS_PRINT
	MOV	R0,RTC_CENTURIES
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	RTC_OFFSETS2DECIMALA
	CALL	DECIMALB_CLR
	CALL	RTC_YEARS2DECIMALB
	CALL	DECIMAL_ADD
	CALL	RTC_DECIMALA2OFFSETS	;NOW RTC_YEARSOFFSET=OFFSET+(YEARS 0~3)=ACTUAL YEARS
	MOV	R0,RTC_YEARSOFFSET
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	TILLENTERSWISRELEASED
	RTCDATEEDITDAYS:						;..........DAYS
	CALL	LCD_LOCATE27
	CALL	TILLRIGHTSWISRELEASED
	CALL	TILLLEFTSWISRELEASED
	CALL	RTC_MONTHDAYS_MAXIMUM
	MOV	R2,R0
	MOV	R0,RTC_DAYS
	CALL	CBCD2BIN
	MOV	R1,#1D	;MIN
	CALL	RTC_BYTE_EDIT
	MOV	R0,HEXLOW
	MOV	RTC_DAYS,R0
	CMP	R1,#0001000B	;IS KEY PRESSED IS ENTER
	JE	ENDOFRTCDATEEDITLONG
	JB    KBSW.5,RTCDATEEDITMONTHS1
	JB    KBSW.7,RTCDATEEDITYEARS1
	RTCDATEEDITMONTHS1:
	JMP	RTCDATEEDITMONTHS
	RTCDATEEDITYEARS1:
	JMP	RTCDATEEDITYEARS
	RTCDATEEDITMONTHS:					;..........MONTHS
	CALL	LCD_LOCATE210
	CALL	TILLRIGHTSWISRELEASED
	CALL	TILLLEFTSWISRELEASED
	MOV	R0,RTC_MONTHS
	CALL	CBCD2BIN
	MOV	R1,#1D	;MIN
	MOV	R2,#12D	;MAX
	CALL	RTC_BYTE_EDIT
	MOV	R0,HEXLOW
	MOV	RTC_MONTHS,R0
	CALL	RTC_DAYS_VALIDATE
	CMP	R1,#0001000B	;IS KEY PRESSED? ENTER
	JB    KBSW.5,RTCDATEEDITCENTURIES2
	JB    KBSW.7,RTCDATEEDITDAYS2
	JE	ENDOFRTCDATEEDITLONG
	RTCDATEEDITDAYS2:
	JMP	RTCDATEEDITDAYS
	RTCDATEEDITCENTURIES2:
	JMP	RTCDATEEDITCENTURIES
	ENDOFRTCDATEEDITLONG:
	JMP	ENDOFRTCDATEEDIT	;THIS IS ADDED BECAUSE OF LONGER JUMP THAN 127
	RTCDATEEDITCENTURIES:					;..........CENTURIES
	CALL	LCD_LOCATE213
	CALL	TILLRIGHTSWISRELEASED
	CALL	TILLLEFTSWISRELEASED
	MOV	R0,RTC_CENTURIES
	CALL	CBCD2BIN
	MOV	R1,#0D	;MIN
	MOV	R2,#99D	;MAX
	CALL	RTC_BYTE_EDIT
	MOV	R0,HEXLOW
	MOV	RTC_CENTURIES,R0
	CMP	R1,#0001000B	;IS KEY PRESSED? ENTER
	JB    KBSW.5,RTCDATEEDITYEARS3
	JB    KBSW.7,RTCDATEEDITMONTHS3
	JE	ENDOFRTCDATEEDITLONG
	RTCDATEEDITMONTHS3:
	JMP	RTCDATEEDITMONTHS
	RTCDATEEDITYEARS3:
	JMP	RTCDATEEDITYEARS
	RTCDATEEDITYEARS:						;..........YEARS
	CALL	LCD_LOCATE215
	CALL	TILLRIGHTSWISRELEASED
	CALL	TILLLEFTSWISRELEASED
	MOV	R0,RTC_YEARSOFFSET
	CALL	CBCD2BIN
	MOV	R1,#0D	;MIN
	MOV	R2,#99D	;MAX
	CALL	RTC_BYTE_EDIT	;WHEN RETURNS YEARS MUST BE SPLITTED INTO YEARS & OFFSET
	MOV	R2,HEXLOW
	MOV	RTC_YEARSOFFSET,R2	;RTC_YEARSOFFSET AT THIS MOMENT CONTAINS OFFSET+(YEARS 0~3)
	ANL	R0,#3
	MOV	RTC_YEARS,R0
	;---STARTING HERE THIS WILL ADJUST 29->28 IF YEAR IS NOT LEAP & IT IS FEB. AND DAY WAS 29
	CMP	R0,#0
	JE	RTCDATEEDITPASSADJUSTFEB29228
	MOV	R0,RTC_MONTHS
	CMP	R0,#2
	JNE	RTCDATEEDITPASSADJUSTFEB29228
	MOV	R0,RTC_DAYS
	CMP	R0,#0x29
	JNE	RTCDATEEDITPASSADJUSTFEB29228
	MOV	R0,#0x28
	MOV	RTC_DAYS,R0
	CALL	LCD_LOCATE27
	CALL	N2_PRINT
	CALL	N8_PRINT
	RTCDATEEDITPASSADJUSTFEB29228:
	;---END OF 29->28 ADJUST
	CMP	R1,#0001000B	;IS KEY PRESSED? ENTER
	JE	ENDOFRTCDATEEDIT
	JB    KBSW.5,RTCDATEEDITDAYS4
	JB    KBSW.7,RTCDATEEDITCENTURIES4
	RTCDATEEDITDAYS4:
	JMP	RTCDATEEDITDAYS
	RTCDATEEDITCENTURIES4:
	JMP	RTCDATEEDITCENTURIES
	ENDOFRTCDATEEDIT:
	MOV	R0,RTC_YEARSOFFSET	;AT THIS MOMENT IT IS BCD AND INCLUDES OFFSET AND YEARS AND MUST BE SPLITTED
	CALL	CBCD2BIN		;NOW IT IS BINARY
	MOV	R1,R0
	ANL	R1,#3
	MOV	RTC_YEARS,R1
	ANL	R0,#0xFC
	CALL	CBIN2BCD
	MOV	RTC_YEARSOFFSET,R0
	CMP	R3,#1
	JNE	RTCDATEEDITPASSDATECHANGE
	CALL	RTC_DATE_WRITE
	RTCDATEEDITPASSDATECHANGE:
	CALL	LCD_CURSOR_OFF
	CALL	LCD_BLINK_OFF
	CALL	LCD_LINE2_CLR
	POP	LCD_MODE
	POP	LCD_DISPLAY
	POP	LCD_SHIFT
	CALL	LCD_DISPLAY_UPDATE
	CALL	LCD_SHIFT_UPDATE
	CALL	LCD_MODE_UPDATE
	CALL	LCD_LOCATION_RESTORE
	CALL	TILLENTERSWISRELEASED
	POP	DR0
	RET
RTC_DATE_PRINT:;#@#
	;OUTPUTS DATE TO LCD IN THE FORM OF DD-MM-YYYY
	PUSH	WR0
	CALL	RTC_CC_YES
	MOV	R0,#RTC_DAYS_ADD
	CALL	RTC_READ
	MOV	R1,R0
	ANL	R0,#0x3F
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	MINUS_PRINT
	MOV	R0,#RTC_MONTHS_ADD
	CALL	RTC_READ
	ANL	R0,#0x1F
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	CALL	MINUS_PRINT
	MOV	R0,R1
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	SRL	R0
	PUSH	R0	;STACK NOW CONTAINS # OF YEARS 0~3 TO BE USED AT THE END OF THIS SUB ROUTINE
	CALL	DECIMALA_CLR
	CALL	DECIMALB_CLR
	MOV	DECIMALB+11,R0
	CALL	RTC_OFFSETS2DECIMALA
	CALL	DECIMAL_ADD
	;NOW DECIMALA HAS THE TOTAL YEARS AS 1 9 9 7  DECIMALA+8 +9 +10 +11
	;NOW COMPINING DECIMAL+8 AND DECIMAL+9 INTO R0
	MOV	R1,DECIMALA+9
	MOV	R0,DECIMALA+8
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	;NOW COMPINING DECIMAL+10 AND DECIMAL+11 INTO R0
	MOV	R1,DECIMALA+11
	MOV	R0,DECIMALA+10
	SLL	R0
	SLL	R0
	SLL	R0
	SLL	R0
	ORL	R0,R1
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	POP	R0	;R0 NOW CONTAINS THE NUMBER OF YEARS 0~3
	CALL	RTC_YEARSOFFSETCHECK
	CALL	RTC_CC_NO
	POP	WR0
	RET
RTC_YEARSOFFSETCHECK:
	PUSH	R1
	;R0 CONTAINS THE YEARS READ FROM RTC 0~3
	CMP	R0,#0
	JNE	RTCYEARSOFFSETCHECKMAYBE3
	;CHECK EE IF <>0 THEN 0 -> EE AND YEARSOFFSET =++4
	MOV	R0,#EEADD_RTCYEARSEQU3
	CALL	EE_BANK0
	CALL	EE_READ
	CMP	R1,#0
	JE	ENDOFRTCYEARSOFFSETCHECK
	;MUST STORE #0 IN EEADD_RTCYEARSEQU3 AND INCREASE 4 TO EE_YEARSOFFSET
	CALL	RTC_02EERTCYEARSEQU3
	;ADDING 4 TO RTC_YEARSOFFSET
	CALL	RTC_OFFSETS2DECIMALA
	CALL	DECIMALB_CLR
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	CALL	DECIMAL_ADD
	CALL	RTC_DECIMALA2OFFSETS
	CALL	RTC_YEARSOFFSET_WRITE
	JMP	ENDOFRTCYEARSOFFSETCHECK
	RTCYEARSOFFSETCHECKMAYBE3:
	CMP	R0,#3
	JNE	ENDOFRTCYEARSOFFSETCHECK
	;CHECK IF EEADD_RTCYEARSEQU3 <>1 THEN 1 -> EEADD_RTCYEARSEQU3
	MOV	R0,#EEADD_RTCYEARSEQU3
	CALL	EE_BANK0
	CALL	EE_READ
	CMP	R1,#1
	JNE	RTCYEARSOFFSETMAKEIT1
	JMP	ENDOFRTCYEARSOFFSETCHECK
	RTCYEARSOFFSETMAKEIT1:
	CALL	RTC_12EERTCYEARSEQU3
	ENDOFRTCYEARSOFFSETCHECK:
	POP	R1
	RET
RTC_YEARS2DECIMALB:
	PUSH	R0
	MOV	R0,RTC_YEARS
	MOV	DECIMALB+11D,R0
	POP	R0
	RET
RTC_OFFSETS2DECIMALA:
	;MOVES AND SPREADS 2 BYTE RTC_YEARSOFFSET RTC_CENTURIES INTO 4 BYTES TO DECIMALA+8,9,10,11
	PUSH	WR0
	MOV	R0,RTC_YEARSOFFSET
	MOV	R1,R0
	ANL	R0,#0x0F
	MOV	DECIMALA+11,R0
	ANL	R1,#0xF0
	SRL	R1
	SRL	R1
	SRL	R1
	SRL	R1
	MOV	DECIMALA+10,R1
	MOV	R0,RTC_CENTURIES
	MOV	R1,R0
	ANL	R0,#0x0F
	MOV	DECIMALA+9,R0
	ANL	R1,#0xF0
	SRL	R1
	SRL	R1
	SRL	R1
	SRL	R1
	MOV	DECIMALA+8,R1
	POP	WR0
	RET
RTC_DECIMALA2OFFSETS:
	;MOVES AND COMPRESSES 4 BYTE FROM DECIMALA+8,9,10,11 TO RTC_YEARSOFFSET RTC_CENTURIES
	PUSH	WR0
	MOV	R0,DECIMALA+11
	MOV	R1,DECIMALA+10
	SLL	R1
	SLL	R1
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	RTC_YEARSOFFSET,R0
	MOV	R0,DECIMALA+9
	MOV	R1,DECIMALA+8
	SLL	R1
	SLL	R1
	SLL	R1
	SLL	R1
	ORL	R0,R1
	MOV	RTC_CENTURIES,R0
	POP	WR0
	RET
RTC_READ_TEST:
	PUSH	R0
	MOV	R0,#0x01		;REGISTER NUMBER
	CALL	RTC_READ
	MOV	HEXLOW,R0
	CALL	HEX2LCD
	POP	R0
	RET
;------------------------------ TIMER 0 1 2    ----------------------------
;TIMER0 CONFIGURED AS SYSTEM TIME BASE. TIMER1 AS BAUD RATE GENERATOR. TIMER2 AS SPEAKER FREQUENCY GENERATOR
TIMER_INI:
	CALL	TIMER0_GATE0	;0~1
	CALL	TIMER0_TIMER	;COUNTER
	CALL	TIMER0_MODE1	;0~3
	CALL	TIMER0_RUN		;STOP
	CALL	TIMER1_GATE0
	CALL	TIMER1_TIMER	;COUNTER
	CALL	TIMER1_MODE2	;0~3
	CALL	TIMER1_RUN		;STOP
	RET
TIMER0_MODE0:
	CLR	TMOD.0
	CLR	TMOD.1
	RET
TIMER0_MODE1:
	SETB	TMOD.0
	CLR	TMOD.1
	RET
TIMER0_MODE2:
	CLR	TMOD.0
	SETB	TMOD.1
	RET
TIMER0_MODE3:
	SETB	TMOD.0
	SETB	TMOD.1
	RET
TIMER0_TIMER:
	CLR	TMOD.2
	RET
TIMER0_COUNTER:
	SETB	TMOD.2
	RET
TIMER0_GATE0:
	CLR	TMOD.3
	RET
TIMER0_GATE1:
	SETB	TMOD.3
	RET
TIMER0_STOP:
	CLR	TCON.4
	RET
TIMER0_RUN:
	SETB	TCON.4
	RET
TIMER1_MODE0:
	CLR	TMOD.4
	CLR	TMOD.5
	RET
TIMER1_MODE1:
	SETB	TMOD.4
	CLR	TMOD.5
	RET
TIMER1_MODE2:
	CLR	TMOD.4
	SETB	TMOD.5
	RET
TIMER1_MODE3:
	SETB	TMOD.4
	SETB	TMOD.5
	RET
TIMER1_TIMER
	CLR	TMOD.6
	RET
TIMER1_COUNTER:
	SETB	TMOD.6
	RET
TIMER1_GATE0:
	CLR	TMOD.7
	RET
TIMER1_GATE1:
	SETB	TMOD.7
	RET
TIMER1_STOP:
	CLR	TCON.6
	RET
TIMER1_RUN:
	SETB	TCON.6
	RET
TIMER2_COUNTUP:
	CLR	T2MOD.0
	RET
TIMER2_COUNTDOWN:
	SETB	T2MOD.0
	RET
TIMER2_OUTPUTENABLE:
	SETB	T2MOD.1
	RET
TIMER2_OUTPUTDISABLE:
	CLR	T2MOD.1
	RET
TIMER2_CPRL0:
	CLR	T2CON.0
	RET
TIMER2_CPRL1:
	SETB	T2CON.0
	RET
TIMER2_TIMER:
	CLR	T2CON.1
	RET
TIMER2_COUNTER:
	SETB	T2CON.1
	RET
TIMER2_STOP:
	CLR	T2CON.2
	CLR	P1.0
	RET
TIMER2_RUN:
	SETB	T2CON.2
	RET
TIMER2_EXDISABLE:
	CLR	T2CON.3
	RET
TIMER2_EXENABLE:
	SETB	T2CON.3
	RET
;----------------------------- SPEAKER ROUTINES ---------------------------
	;IN ORDER TO PLAY SOUND PROPERLY STH (RUN TIME 10mS BASE) MUST BE PRESETED & SPEAKER_FREQUENCY MUST BE SPECIFIED IN WR0 BEFORE CALLING PLAY.
SPEAKER_INI:
	PUSH	WR0
	CALL	SPEAKER_RUNTIME500
	POP	WR0
	RET
SPEAKER_RUNTIMEMAX:;#@#
	;SUB SETS STH TO MAXIMUM 656.35 SECONDS
	PUSH	WR0
	MOV	WR0,#0xFFFF
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME10:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#1D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME50:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#5D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME100:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#10D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME200:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#20D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME300:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#30D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME400:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#40D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME500:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#50D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME600:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#60D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME700:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#70D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME800:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#80D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME900:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#90D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME1000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#100D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME2000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#200D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME3000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#300D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME4000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#400D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME5000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#500D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME6000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#600D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME7000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#700D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME8000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#800D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME9000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#900D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_RUNTIME10000:;#@#
	;SUB SETS STH IN 10 OF MILISECONDS
	PUSH	WR0
	MOV	WR0,#1000D
	MOV	STH,WR0
	POP	WR0
	RET
SPEAKER_OFF:;#@#
	;SUB	STOPS SPEAKER
	PUSH	WR0
	CLR	STGALPHA.7	;STOP SOFTWARE TIMER H
	MOV	WR0,#00
	MOV	STH,WR0
	CLR	T2CON.2	;CALL	TIMER2_STOP
	CLR	P1.0
	POP	WR0
	RET
PLAY:;#@#
	;WR0 HOLDS FREQUENY REQUIRED 1D=1HZ 1000D=1KHZ
	PUSH	R4
	PUSH	WR2
	MOV	WR2,WR0
	MOV	WR0,#0xE100
	DIV	WR0,WR2		;DIV WR0/WR2, WR0=REMAINDER, WR2=QUOTIENT
	SLL	WR2
	SLL	WR2
	SLL	WR2
	SLL	WR2
	SLL	WR2
	SLL	WR2
	SRL	R0
	SRL	R0
	ORL	R3,R0
	XRL	WR2,#0xFFFF
	INC	WR2,#1
	MOV	RCAP2H,R2
	MOV	RCAP2L,R3
	SETB	STGALPHA.7
	CALL	TIMER2_OUTPUTENABLE
	CALL	TIMER2_TIMER
	CALL	TIMER2_RUN
	POP	WR2
	POP	R4
	RET
PLAY100:;#@#
	PUSH	WR0
	MOV	WR0,#100D
	CALL	PLAY
	POP	WR0
	RET
PLAY200:;#@#
	PUSH	WR0
	MOV	WR0,#200D
	CALL	PLAY
	POP	WR0
	RET
PLAY300:;#@#
	PUSH	WR0
	MOV	WR0,#300D
	CALL	PLAY
	POP	WR0
	RET
PLAY400:;#@#
	PUSH	WR0
	MOV	WR0,#400D
	CALL	PLAY
	POP	WR0
	RET
PLAY500:;#@#
	PUSH	WR0
	MOV	WR0,#500D
	CALL	PLAY
	POP	WR0
	RET
PLAY600:;#@#
	PUSH	WR0
	MOV	WR0,#600D
	CALL	PLAY
	POP	WR0
	RET
PLAY700:;#@#
	PUSH	WR0
	MOV	WR0,#700D
	CALL	PLAY
	POP	WR0
	RET
PLAY800:;#@#
	PUSH	WR0
	MOV	WR0,#800D
	CALL	PLAY
	POP	WR0
	RET
PLAY900:;#@#
	PUSH	WR0
	MOV	WR0,#900D
	CALL	PLAY
	POP	WR0
	RET
PLAY1000:;#@#
	PUSH	WR0
	MOV	WR0,#1000D
	CALL	PLAY
	POP	WR0
	RET
PLAY1100:;#@#
	PUSH	WR0
	MOV	WR0,#1100D
	CALL	PLAY
	POP	WR0
	RET
PLAY1200:;#@#
	PUSH	WR0
	MOV	WR0,#1200D
	CALL	PLAY
	POP	WR0
	RET
PLAY1300:;#@#
	PUSH	WR0
	MOV	WR0,#1300D
	CALL	PLAY
	POP	WR0
	RET
PLAY1400:;#@#
	PUSH	WR0
	MOV	WR0,#1400D
	CALL	PLAY
	POP	WR0
	RET
PLAY1500:;#@#
	PUSH	WR0
	MOV	WR0,#1500D
	CALL	PLAY
	POP	WR0
	RET
PLAY1600:;#@#
	PUSH	WR0
	MOV	WR0,#1600D
	CALL	PLAY
	POP	WR0
	RET
PLAY1700:;#@#
	PUSH	WR0
	MOV	WR0,#1700D
	CALL	PLAY
	POP	WR0
	RET
PLAY1800:;#@#
	PUSH	WR0
	MOV	WR0,#1800D
	CALL	PLAY
	POP	WR0
	RET
PLAY1900:;#@#
	PUSH	WR0
	MOV	WR0,#1900D
	CALL	PLAY
	POP	WR0
	RET
PLAY2000:;#@#
	PUSH	WR0
	MOV	WR0,#2000D
	CALL	PLAY
	POP	WR0
	RET
PLAY2100:;#@#
	PUSH	WR0
	MOV	WR0,#2100D
	CALL	PLAY
	POP	WR0
	RET
PLAY2200:;#@#
	PUSH	WR0
	MOV	WR0,#2200D
	CALL	PLAY
	POP	WR0
	RET
PLAY2300:;#@#
	PUSH	WR0
	MOV	WR0,#2300D
	CALL	PLAY
	POP	WR0
	RET
PLAY2400:;#@#
	PUSH	WR0
	MOV	WR0,#2400D
	CALL	PLAY
	POP	WR0
	RET
PLAY2500:;#@#
	PUSH	WR0
	MOV	WR0,#2500D
	CALL	PLAY
	POP	WR0
	RET
PLAY2600:;#@#
	PUSH	WR0
	MOV	WR0,#2600D
	CALL	PLAY
	POP	WR0
	RET
PLAY2700:;#@#
	PUSH	WR0
	MOV	WR0,#2700D
	CALL	PLAY
	POP	WR0
	RET
PLAY2800:;#@#
	PUSH	WR0
	MOV	WR0,#2800D
	CALL	PLAY
	POP	WR0
	RET
PLAY2900:;#@#
	PUSH	WR0
	MOV	WR0,#2900D
	CALL	PLAY
	POP	WR0
	RET
PLAY3000:;#@#
	PUSH	WR0
	MOV	WR0,#3000D
	CALL	PLAY
	POP	WR0
	RET
PLAY3100:;#@#
	PUSH	WR0
	MOV	WR0,#3100D
	CALL	PLAY
	POP	WR0
	RET
PLAY3200:;#@#
	PUSH	WR0
	MOV	WR0,#3200D
	CALL	PLAY
	POP	WR0
	RET
PLAY3300:;#@#
	PUSH	WR0
	MOV	WR0,#3300D
	CALL	PLAY
	POP	WR0
	RET
PLAY3400:;#@#
	PUSH	WR0
	MOV	WR0,#3400D
	CALL	PLAY
	POP	WR0
	RET
PLAY3500:;#@#
	PUSH	WR0
	MOV	WR0,#3500D
	CALL	PLAY
	POP	WR0
	RET
PLAY3600:;#@#
	PUSH	WR0
	MOV	WR0,#3600D
	CALL	PLAY
	POP	WR0
	RET
PLAY3700:;#@#
	PUSH	WR0
	MOV	WR0,#3700D
	CALL	PLAY
	POP	WR0
	RET
PLAY3800:;#@#
	PUSH	WR0
	MOV	WR0,#3800D
	CALL	PLAY
	POP	WR0
	RET
PLAY3900:;#@#
	PUSH	WR0
	MOV	WR0,#3900D
	CALL	PLAY
	POP	WR0
	RET
PLAY4000:;#@#
	PUSH	WR0
	MOV	WR0,#4000D
	CALL	PLAY
	POP	WR0
	RET
PLAY4100:;#@#
	PUSH	WR0
	MOV	WR0,#4100D
	CALL	PLAY
	POP	WR0
	RET
PLAY4200:;#@#
	PUSH	WR0
	MOV	WR0,#4200D
	CALL	PLAY
	POP	WR0
	RET
PLAY4300:;#@#
	PUSH	WR0
	MOV	WR0,#4300D
	CALL	PLAY
	POP	WR0
	RET
PLAY4400:;#@#
	PUSH	WR0
	MOV	WR0,#4400D
	CALL	PLAY
	POP	WR0
	RET
PLAY4500:;#@#
	PUSH	WR0
	MOV	WR0,#4500D
	CALL	PLAY
	POP	WR0
	RET
PLAY4600:;#@#
	PUSH	WR0
	MOV	WR0,#4600D
	CALL	PLAY
	POP	WR0
	RET
PLAY4700:;#@#
	PUSH	WR0
	MOV	WR0,#4700D
	CALL	PLAY
	POP	WR0
	RET
PLAY4800:;#@#
	PUSH	WR0
	MOV	WR0,#4800D
	CALL	PLAY
	POP	WR0
	RET
PLAY4900:;#@#
	PUSH	WR0
	MOV	WR0,#4900D
	CALL	PLAY
	POP	WR0
	RET
PLAY5000:;#@#
	PUSH	WR0
	MOV	WR0,#5000D
	CALL	PLAY
	POP	WR0
	RET
PLAY6000:;#@#
	PUSH	WR0
	MOV	WR0,#6000D
	CALL	PLAY
	POP	WR0
	RET
PLAY7000:;#@#
	PUSH	WR0
	MOV	WR0,#7000D
	CALL	PLAY
	POP	WR0
	RET
PLAY8000:;#@#
	PUSH	WR0
	MOV	WR0,#8000D
	CALL	PLAY
	POP	WR0
	RET
PLAY9000:;#@#
	PUSH	WR0
	MOV	WR0,#9000D
	CALL	PLAY
	POP	WR0
	RET
PLAY10000:;#@#
	PUSH	WR0
	MOV	WR0,#10000D
	CALL	PLAY
	POP	WR0
	RET
BEEP:;#@#
	PUSH	WR0
	MOV	WR0,#50D
	MOV	STH,WR0
	MOV	WR0,#3000D
	CALL	PLAY
	POP	WR0
	RET
CLICK:;#@#
	PUSH	WR0
	MOV	WR0,#10D
	MOV	STH,WR0
	MOV	WR0,#2000D
	CALL	PLAY
	POP	WR0
	RET
PLAY_SONG01:;#@#
	CALL	SPEAKER_RUNTIMEMAX
	CALL	PLAY500
	CALL	SLEEP500
	CALL	PLAY3000
	CALL	SLEEP500
	CALL	PLAY500
	CALL	SLEEP500
	CALL	PLAY3000
	CALL	SLEEP500
	CALL	PLAY500
	CALL	SLEEP500
	CALL	PLAY3000
	CALL	SLEEP500
	CALL	PLAY500
	CALL	SLEEP500
	CALL	PLAY3000
	CALL	SLEEP500
	CALL	SPEAKER_OFF
	RET
PLAY_PHONERING:;#@#
	CALL	SPEAKER_RUNTIMEMAX
	CALL	PLAY500
	CALL	SLEEP50
	CALL	PLAY3000
	CALL	SLEEP50
	CALL	PLAY500
	CALL	SLEEP50
	CALL	PLAY3000
	CALL	SLEEP50
	CALL	PLAY500
	CALL	SLEEP50
	CALL	PLAY3000
	CALL	SLEEP50
	CALL	PLAY500
	CALL	SLEEP50
	CALL	PLAY3000
	CALL	SLEEP50
	CALL	PLAY500
	CALL	SLEEP50
	CALL	PLAY3000
	CALL	SLEEP50
	CALL	PLAY500
	CALL	SLEEP50
	CALL	PLAY3000
	CALL	SLEEP50
	CALL	PLAY500
	CALL	SLEEP50
	CALL	PLAY3000
	CALL	SLEEP50
	CALL	SPEAKER_OFF
	RET
;E*LIBRARY*
;--------------------------------------------------------------------------



;===========================================================================	
;===========================================================================	
;===========================================================================	
	IF ROM_SIZE_32				;////////////////////////////////////////////////
				ORG	0x0FF8
	ENDI						;////////////////////////////////////////////////
	IF ROM_SIZE_64				;////////////////////////////////////////////////
				ORG	0x1FF8
	ENDI						;////////////////////////////////////////////////
	IF ROM_SIZE_128				;////////////////////////////////////////////////
				ORG	0x3FF8
	ENDI						;////////////////////////////////////////////////
	IF ROM_SIZE_256				;////////////////////////////////////////////////
				ORG	0x7FF8
	ENDI						;////////////////////////////////////////////////
	IF ROM_SIZE_512				;////////////////////////////////////////////////
				ORG	0xFFF8
	ENDI						;////////////////////////////////////////////////
 CONFIG0:
	DFB	0xF1
 CONFIG1:
	DFB	0xFF,0x00,0x00,0x00,0x00,0x00,0x00
	END