Assembler
68HC11
HC11DEF.H save this file in the same directory as ASS
* HC11DEF.H
PORTA   EQU $1000
PIOC    EQU $1002
PORTC   EQU $1003
PORTB   EQU $1004
PORTCL  EQU $1005
DDRC    EQU $1007
PORTD   EQU $1008
DDRD    EQU $1009
PORTE   EQU $100A
CFORC   EQU $100B
OC1M    EQU $100C
OC1D    EQU $100D
TCNT    EQU $100E
TIC1    EQU $1010
TIC2    EQU $1012
TIC3    EQU $1014
TOC1    EQU $1016
TOC2    EQU $1018
TOC3    EQU $101A
TOC4    EQU $101C
TOC5    EQU $101E
TCTL1   EQU $1020
TCTL2   EQU $1021
TMSK1   EQU $1022
TFLG1   EQU $1023
TMSK2   EQU $1024
TFLG2   EQU $1025
PACTL   EQU $1026
PACNT   EQU $1027
SPCR    EQU $1028
SPSR    EQU $1029
SPDR    EQU $102A
BAUD    EQU $102B
SCCR1   EQU $102C
SCCR2   EQU $102D
SCSR    EQU $102E
SCDAT   EQU $102F    same
SCDR    EQU $102F    same
ADCTL   EQU $1030
ADR1    EQU $1031
ADR2    EQU $1032
ADR3    EQU $1033
ADR4    EQU $1034
OPTION  EQU $1039
COPRST  EQU $103A
PPROG   EQU $103B
HPRIO   EQU $103C
INIT    EQU $103D
TEST1   EQU $103E
CONFIG  EQU $103F

BIT0    EQU 00000001B
BIT1    EQU 00000010B
BIT2    EQU 00000100B
BIT3    EQU 00001000B
BIT4    EQU 00010000B
BIT5    EQU 00100000B
BIT6    EQU 01000000B
BIT7    EQU 10000000B

*** Address of Interrupt Vectors in Bootstrap Mode *****
PULSE_EDGE      EQU	$100-54
PULSE_OVF       EQU	$100-51
IRQTIMER        EQU	$100-48
IRQTOC5		EQU	$100-45
IRQTOC4		EQU	$100-42
IRQTOC3		EQU	$100-39
IRQTOC2		EQU	$100-36
IRQTOC1		EQU	$100-33
IRQTIC3		EQU	$100-30
IRQTIC2		EQU	$100-27
IRQTIC1		EQU	$100-24
********* END of HC11DEF.H *************************
ZEROPAGE.INC ==>> in the same directory as ASS
*ZEROPAGE.INC
		ORG $0
*-----   RS232  COM2    value for LX.EXE ----------
RESULT		RMB	4
TEMP		RMB	2
ADCE0		RMB	1
ADCE0_FILTER	RMB	2
OPERAND		RMB	1
OPERAND1 	RMB	2
OPERAND2        RMB	2
*--------------------------------
		RMB	1
TIME_BASE	RMB	2		CLOCK.ASS
MILLISEC	RMB	2
SECOND          RMB	1
MINUTE          RMB	1
HOUR            RMB	1
		RMB	1
*--------------------------------
COUNT1		RMB	1
TIC1COPY	RMB	2
PACNTOLD	RMB	1
PACNTDIFF	RMB	1
PERIOD		RMB	2
TIC1OLD         RMB	2
TIC1DIFF        RMB	2
CHECKSUM	RMB	1
EVENTS		RMB	1
		RMB	1
*---------------------------------
		RMB	1
ADC_E0		RMB	1
ADC_E0_M	RMB	1
ADC_E0SUM	RMB	2
ADC_COUNT	RMB	1
ADC_E0FILTER	RMB	2
ADC_E0_F        RMB	1

BCDDIGIT       RMB	5
********* END of ZEROPAGE.INC *************************
BIT.ASS Bit Operations
$HC11DEF.H
$ZEROPAGE.INC
		ORG	$B600

		LDAA	#$30
		BITA	#00100000B
		BNE	BIT5_OKAY
B4		BITA	#00010000B
		BNE	BIT4_OKAY
B2_3		BITA	#00001100B
		BNE	B2_3OKAY
		NOP

BIT5_OKAY	BRA	B4
BIT4_OKAY	BRA	B2_3
B2_3OKAY	NOP

		LDAA	#$30
                ANDA	#00100000B
                BNE     BIT5_OKAY

                COMA
                COMB
                COM	OPERAND

                EORA	#$FF
                EORA	#01010101B

                LDAA	TCTL1
                ANDA	#11001111B
                STAA	TCTL1

                LDAA	PORTB
                ORAA	#01110000B
                STAA	PORTB

                LDAA	PORTA
                EORA	#01110000B
                STAA	PORTA
*********************************
* Frequency. of 15,3 Hz on PORTA
		LDX	#$1000
		BSET	0,X,#01010000B
		BSET	20,X,#01010101B
		NOP
                END
********* END of 68HC11 BIT.ASS *************************
TEST.ASS Test if equal or not
		ORG $B600

TEST_1		LDAA	#237
		BMI	A_NEG
		INCA
A_NEG		LDAA	#0
		BEQ	TEST_1

TEST_2		LDAA	#237
		PSHA
		CLRA
		PULA
		BMI  	A_NEG_2
		INCA
A_NEG_2		BRA	TEST_2

TEST_3		LDAA	#237
		PSHA
		CLRA
		PULA
		TSTA
		BMI	A_NEG_3
		INCA
A_NEG_3		BRA	TEST_3

		LDX	#$1000
TEST_X		TST	X
		INX
		BRA	TEST_X
                END

********* END of 68HC11 TEST.ASS *************************
CHANGE.ASS
$ZEROPAGE.INC
		ORG	$B600

                LDX  	#$1234

                XGDX
                XGDY

                LDD	#25
                STD	TEMP
                LDX	TEMP

********* END of 68HC11 CHANGE.ASS *************************
CLEAR.ASS clear direct and indirect
		ORG	$B600

		LDX	#255
NEXT_X		CLR	X
		DEX
                BNE	NEXT_X

                CLR	0

                LDX	#0
NEXT__X		CLR	X
		INX
                CPX	#256
                BLO	NEXT__X

                CLRA
                LDAA	#0

                CLRB
                LDAB	#0
                LDD	#0
********* END of 68HC11 CLEAR.ASS *************************
COMPARE.ASS
$HC11DEF.H
		ORG 	$B600

		LDAB	SCDR
COMPARE_2       CMPB	#'B'
                BEQ	BLANK_CHECK
                CMPB	#'P'
                BEQ     PROGRAM_EPROM
                LDAB	#'P'
                BRA     COMPARE_2

PROGRAM_EPROM   NOP
		NOP
		LDAB	#'B'
		BRA	COMPARE_2
BLANK_CHECK	NOP
		NOP
********* END of 68HC11 COMPARE.ASS *************************
COPY.ASS
$ZEROPAGE.INC
		ORG 	$B600

		LDY	#$1000
		LDX	#0
		LDAB	#16
NEXT_BYTE	LDAA	Y
		STAA	X
		INY
		INX
		DECB
		BNE	NEXT_BYTE
COPY_OK		BRA	COPY_OK

* COPY with CHECKSUM
                CLR	CHECKSUM
		LDY	#$1030
		LDX	#0
		LDAB	#16
NEXT_BYTE2	LDAA	Y
		STAA	X
		ADDA	CHECKSUM
		STAA	CHECKSUM
		INY
		INX
		DECB
		BNE	NEXT_BYTE2
		LDAA	CHECKSUM
COPY2_OK	BRA	COPY2_OK
********* END of 68HC11 COPY.ASS *************************
LOAD.ASS
$HC11DEF.H
$ZEROPAGE.INC
		ORG	$B600
		LDAA	#25
		LDAA	PORTB
		LDAB	RESULT

		LDX	#$1009
		LDD    	X
                LDD	5,X

                LDD	$1009

                LDS	#$FF
********* END of 68HC11 LOAD.ASS *************************
SHIFT.ASS
$HC11DEF.H
$ZEROPAGE.INC
		ORG 	$B600

SHIFT_1		LDAA	#25
		LSLA
		LSLA

		LDAA	#25
		TAB
		LSLA
		LSLA
		ABA

		LDD	#25
		STD	TEMP
		LSLD
		LSLD
		LSLD
		ADDD	TEMP
***********************************
LABEL1		LDAB	#2
		ANDB	#00000011B
		LSLB
		LDX	#JMP_TAB
		ABX
		LDX	X
                JMP	X

ADDR0           INCA
ADDR1           INCA
ADDR2           INCA
ADDR3           INCA
		JMP	LABEL1
**************************************
LABEL2 		LDAA	#126
		LSRA

		LDAA	#236
		LSRA

		LDAA	#236
		ASRA

		LDD	#$0098
		STD	RESULT
		LDD	#$9680
		STD	RESULT+2

		ASR	RESULT
		ROR	RESULT+1
		ROR	RESULT+2
		ROR	RESULT+3

		LDD	RESULT
		LDX	RESULT+2

                JMP	LABEL2

*************************************
                ORG	$B740

JMP_TAB		FDB ADDR0,ADDR1
		FDB ADDR2,ADDR3
********* END of 68HC11 SHIFT.ASS *************************
STORE.ASS
$HC11DEF.H
$ZEROPAGE.INC
		ORG	$B600

		STAA	TEMP
                STAB	PORTA
                STD	RESULT
                STX	Y
                STY	2,X
                STS	TEMP

********* END of 68HC11 STORE.ASS *************************
TRANSFER.ASS
$ZEROPAGE.INC
		ORG 	$B600
		LDAA	#85
		TAB
		MUL
		STD	TEMP

		LDAB	#$20
		TBA
		ABA
		STD	RESULT

		TPA
		ORAA	#10000000B
		TAP
********* END of 68HC11 TRANSFER.ASS *************************
CLOCK.ASS: Clock millisec. seconds minutes hours
$HC11DEF.H
$ZEROPAGE.INC
		ORG 	$B600

		LDAA	#$7E
		STAA	IRQTOC2
		LDX	#TOC2_CLOCK
		STX	IRQTOC2+1
		LDD	#2000            2000 * .5 = 1 msec
		STD	TIME_BASE

		LDAA	TMSK1
		ORAA	#BIT6
		STAA	TMSK1

		CLI

LOOP            NOP
		BRA	LOOP
*		=================

		ORG	$B740

TOC2_CLOCK	LDD	TOC2
		ADDD	TIME_BASE        1msec
		STD	TOC2
		LDAA	#BIT6
		STAA	TFLG1

		LDX	MILLISEC
		INX
		CPX	#1000
		BLO	MILLISEC_OKAY
		LDX	#0
MILLISEC_OKAY
		STX	MILLISEC
		BNE	CLOCK_EXIT
		LDAA	SECOND
		INCA
		CMPA	#60
		BLO	SEC_OKAY
		CLRA
SEC_OKAY	STAA	SECOND
		BNE	CLOCK_EXIT
		LDAA	MINUTE
		INCA
		CMPA	#60
		BLO	MIN_OKAY
		CLRA
MIN_OKAY	STAA	MINUTE
		BNE	CLOCK_EXIT
		LDAA	HOUR
		INCA
            	CMPA	#24
		BLO	HOUR_OKAY
		CLRA
HOUR_OKAY       STAA	HOUR
CLOCK_EXIT	RTI
********* END of 68HC11 CLOCK.ASS *************************
ANALOG.ASS:READ ANALOG VALUES 68HC11
$HC11DEF.H
$ZEROPAGE.INC

		ORG	$B600

		LDAA	#$7E
		STAA	IRQTOC4
		LDX	#TOC4_INT
		STX	IRQTOC4+1

		LDAA 	#10011000B 	enable ADC
		STAA 	OPTION

		LDAA	#BIT4
		STAA	TMSK1
		CLI
LOOP            NOP
		BRA	LOOP
*		=================
		ORG	$B740

TOC4_INT	CLRA
		LDAB	ADR1
		ADDB	ADR2
		ADCA	#0
		ADDB	ADR3
		ADCA	#0
		ADDB	ADR4
		ADCA	#0
		LSRD
		LSRD
		STAB	ADC_E0

*******  AVERAGE ************
		ADDD	ADC_E0SUM
		STD	ADC_E0SUM

		DEC	ADC_COUNT
		BNE	M_OKAY

		LDD	ADC_E0SUM
		LDX	#20
		IDIV
		XGDX
		STAB	ADC_E0_M
		LDAA	#20
		STAA	ADC_COUNT
		LDD	#0
		STD	ADC_E0SUM
M_OKAY
********* LOWPASS-FILTER**********
		LDD	ADC_E0FILTER
		LSRD
		LSRD
		LSRD
		STD     TEMP
		LDAA	ADC_E0
		CLRB
		LSRD
		LSRD
		LSRD
		ADDD	ADC_E0FILTER
		SUBD	TEMP
		STD	ADC_E0FILTER
                STAA    ADC_E0_F
***************************************
		LDAA	#0
		STAA	ADCTL
		LDD	TOC4
		ADDD	#2000         1 msec
		STD	TOC4
		LDAA	#BIT4
		STAA	TFLG1
		RTI
********* END of 68HC11 ANALOG.ASS **************
FREQ.ASS: Frequency measurement
$HC11DEF.H
$ZEROPAGE.INC
		ORG	$B600

		LDAA	#$7E
		STAA	IRQTOC4
		LDX	#TOC4_INT
		STX	IRQTOC4+1

		LDAA	#00010000B
		STAA	TCTL2

		LDAA	#01010000B
		STAA	PACTL
		LDAA	#BIT4
		STAA	TMSK1
		CLI

LOOP            NOP
		BRA	LOOP
*		=================

		ORG	$B740

TOC4_INT	ldaa	PACNTOLD
		ldab	PACNT
		ldx	TIC1
		cmpb	PACNT
		beq	VALUE_OKAY
		ldx	TIC1
		incb
VALUE_OKAY	sba
		nega
		beq	CALC_OK
		staa	PACNTDIFF
		stab	PACNTOLD
		xgdx
		subd	TIC1OLD
		std	TIC1DIFF
		addd	TIC1OLD
		std	TIC1OLD
*		--------------------
*	Period = TIC1DIFF / PACNTDIFF
*
 		CLRA
		LDAB	PACNTDIFF
		LDX	TIC1DIFF
		XGDX
		IDIV
		STX	PERIOD
CALC_OK		LDD	TOC4
		ADDD	#4000         2 msec
		STD	TOC4
		LDAA	#BIT4
		STAA	TFLG1
		RTI
********* END of 68HC11 FREQ.ASS *************************


MATH.ASS: MUL_16_16, DIV_32_16
$HC11DEF.H
$ZEROPAGE.INC
		ORG $B600

MUL_16_16	LDD	#1234
		STD	OPERAND1
		LDD	#5000
		STD	OPERAND2

		LDAA	OPERAND1+1	Low x Low
		LDAB	OPERAND2+1
		MUL
		STD	RESULT+2

		LDAA	OPERAND1+1	Low x High
		LDAB	OPERAND2
		MUL
		ADDB	RESULT+2
		ADCA	#0
		STD	RESULT+1

		LDAA	OPERAND1	High x Low
		LDAB	OPERAND2+1
		MUL
		ADDB	RESULT+2
		ADCA	RESULT+1
		STD	RESULT+1

		LDAA	OPERAND1	High x High
		LDAB	OPERAND2
		MUL
		ADDB	RESULT+1
		ADCA	#0
		STD	RESULT

DIV_32_16	LDD	RESULT
		LDX	OPERAND1
		IDIV
		STX	TEMP
		LDX	OPERAND1
		FDIV
		STX	TEMP+2
		LDD	RESULT+2
		LDX	OPERAND1
		IDIV
		XGDX
		ADDD	TEMP+2
		STD	TEMP+2
		LDD	TEMP
		ADCB	#0
		ADCA	#0
		STD	TEMP

DIV_32_16_B	LDD	RESULT
		LDX	OPERAND1
		IDIV
		STX	TEMP
		LDX	OPERAND1
		FDIV
		STX	TEMP+2
		LDX	OPERAND1
		FDIV
		STX	TEMP+4
		LDD	RESULT+2
		LDX	OPERAND1
		IDIV
		XGDX
		ADDD	TEMP+2
		STD	TEMP+2
		LDD	TEMP
		ADCB	#0
		ADCA	#0
		STD	TEMP
		XGDX
		LDX	OPERAND1
		FDIV
		XGDX
		ADDD	TEMP+4
		ADDD	#8000
		STD	TEMP+4
		LDD	TEMP+2
		ADCB	#0
		ADCA	#0
		STD	TEMP+2
		LDD	TEMP
		ADCB	#0
		ADCA	#0
		STD	TEMP

DAC_WERT	LDD	OPERAND1
		LDX	OPERAND2
		FDIV
		XGDX
		STAA	RESULT

		LSRD
		LSRD
		LSRD
		LSRD
		STD	TEMP

BIN_BCD		LDD	#5238
		LDX	#10
		IDIV
		STAB	BCDDIGIT+4
		XGDX
		LDX	#10
		IDIV
		STAB	BCDDIGIT+3
		XGDX
		LDX	#10
		IDIV
		STAB	BCDDIGIT+2
		XGDX
		STAB	BCDDIGIT+1

BCD2		LDAA	#00001000B
		ADDA	#00000101B
		DAA
OK_AY		BRA	OK_AY
********* END of 68HC11 MATH.ASS *************************
MUX.ASS: Set Boostrap to Expanded Mode
                org	$B600

hprio	EQU	$3C

                ldx	#$1000
                BSET    hprio,X,#00100000B    SET TO EXPANDED MULTIPLEXED
  		BCLR    hprio,X,#00010000B
		BCLR    hprio,X,#01000000B


		ldx	#$8000
NEXT_X		ldd	X
		inx
		inx
                bra	NEXT_X

PULS.ASS: REVERSE COUNT PACNT
$HC11DEF.H
$ZEROPAGE.INC

		ORG 	$B600

		LDAA	#$7E
		STAA	PULSE_OVF               PA2
		LDX	#P_OVF_INT
		STX	PULSE_OVF+1

		LDAA	#01010000B
		STAA	PACTL
		LDAA	#50
		STAA	EVENTS
		NEGA
		STAA	PACNT

		LDAA	TMSK2
		ORAA	#BIT5
		STAA	TMSK2
		CLI

LOOP            NOP
		BRA	LOOP
*		=================

		ORG	$B740

P_OVF_INT	LDAA	#BIT5
		STAA	TFLG2
		LDAA	EVENTS
		NEGA
		STAA	PACNT
		INC 	ANZAHL
                LDAA	PORTA
                EORA	#BIT5
                STAA    PORTA
		RTI
********* END of 68HC11 PULS.ASS *************************
PULSEDGE.ASS: Detect pulsedge
$HC11DEF.H
$ZEROPAGE.INC

		ORG $B600

		LDAA	#$7E
		STAA	PULSE_OVF
		LDX	#P_OVF_INT
		STX	PULSE_OVF+1
		LDAA	#$7E
		STAA	PULSE_EDGE
		LDX	#P_EDGE_INT
		STX	PULSE_EDGE+1

		LDAA	#01110000B
		STAA	PACTL		LDAA	#BIT4+BIT5
		STAA	TMSK2
		CLI
LOOP            NOP
		BRA	LOOP
*		=================

		ORG	$B770

P_OVF_INT	LDAA	#BIT5
		STAA	TFLG2
		INC	COUNT1
		RTI

		ORG	$B780

P_EDGE_INT	LDAA	#BIT4
		STAA	TFLG2
		LDAA	COUNT1
		LDAB	PACNT
		STD	PERIODE
		CLR	COUNT1
		CLR	PACNT
		RTI
TIC.ASS: INPUT CAPTURE
$HC11DEF.H
$ZEROPAGE.INC
		ORG $B600

		LDAA	#$7E
		STAA	IRQTIC1      PA2
		LDX	#TIC1_INT
		STX	IRQTIC1+1
		LDAA	#00010000B
		STAA	TCTL2

		LDAA	TMSK1
		ORAA	#BIT2
		STAA	TMSK1

LOOP            NOP
		BRA	LOOP
*		=================
		CLI

		ORG	$B740

TIC1_INT	LDAA	#BIT2
		STAA	TFLG1
		LDD	TIC1
		SUBD	TIC1COPY
		STD	PERIOD

		ADDD	TIC1COPY
		STD	TIC1COPY
		RTI

********* END of 68HC11 TIC.ASS ***************
TOC.ASS: OUTPUT COMPARE TOC3 -> PA5
$HC11DEF.H
$ZEROPAGE.INC
		ORG 	$B600

		LDAA	#$7E
		STAA	IRQTOC3
		LDX	#TOC3_INT
		STX	IRQTOC3+1	
   	        LDD	#1000
		STD	PERIOD

		LDAA	#00010000B
		STAA	TCTL1

		LDAA	TMSK1
		ORAA	#BIT5
		STAA	TMSK1
		CLI

LOOP            NOP
		BRA	LOOP
*		=================

		ORG	$B740

TOC3_INT	LDAA	#BIT5
		STAA	TFLG1
		LDD	TOC3
		ADDD	PERIOD
		STD	TOC3
		RTI

********* END of 68HC11 TOC.ASS ************************