aboutsummaryrefslogtreecommitdiffstats
path: root/tests/t_bas52/bas52.rst
blob: 2d2f13a00f2c05dc0ccfd16059dd004456f6d76c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
	;**************************************************************
	;
CRST:	; This performs system initialzation, it was moved here so the
	; new power on reset functions could be tested in an 8751.
	;
	;**************************************************************
	;
	; First, initialize SFR's
	;
	MOV	SCON,#5AH	;INITIALIZE SFR'S
	MOV	TMOD,#10H
	MOV	TCON,#54H
	DB	75H		;MOV DIRECT, # OP CODE
	DB	0C8H		;T2CON LOCATION
	DB	34H		;CONFIGURATION BYTE
	;
	MOV	DPTR,#2001H	;READ CODE AT 2001H
	CLR	A
	MOVC	A,@A+DPTR
	CJNE	A,#0AAH,$+6	;IF IT IS AN AAH, DO USER RESET
	LCALL	2090H
	;
	MOV	R0,#IRAMTOP	;PUT THE TOP OF RAM IN R0
	CLR	A		;ZERO THE ACC
	;
	MOV	@R0,A		;CLEAR INTERNAL MEMORY
	DJNZ	R0,$-1		;LOOP TIL DONE
	;
	; Now, test the external memory
	;
	MOV	SPSAV,#CMNDSP	;SET UP THE STACK
	MOV	SP,SPSAV
	;
	MOV	BOFAH,#HI(ROMADR)
	MOV	BOFAL,#LO(ROMADR+17)
	MOV	DPTR,#ROMADR	;GET THE BYTE AT 8000H
	MOVX	A,@DPTR
	CLR	C
	SUBB	A,#31H		;FOR BIAS
	MOV	MT1,A		;SAVE IN DIRECT MATH LOC
	CLR	ACC.2		;SAVE FOR RESET
	MOV	R7,A		;SAVE IT IN R7
	INC	DPTR
	ACALL	L31DPI		;SAVE BAUD RATE
	LCALL	RCL
	INC	DPTR		;GET MEMTOP
	ACALL	L31DPI
	MOV	DPTR,#5FH	;READ THE EXTERNAL BYTE
	MOVX	A,@DPTR
	MOV	DPTR,#0		;ESTABLISH BASE FOR CLEAR
	CJNE	A,#0A5H,CRS
	MOV	A,MT1
	CLR	ACC.0		;CLEAR BIT ONE
	XRL	A,#4H
	JZ	CR2
	;
CRS:	CJNE	R7,#2,$+5
	SJMP	$+5
	CJNE	R7,#3,$+7
	ACALL	CL_1
	SJMP	CR1
	;
CR0:	MOV	R3,DPH		;SAVE THE DPTR
	MOV	R1,DPL
	INC	DPTR
	MOV	A,#5AH
	MOVX	@DPTR,A
	MOVX	A,@DPTR
	CJNE	A,#5AH,CR1
	CLR	A
	MOVX	@DPTR,A
	CJNE	R3,#0E0H,CR0
	;
CR1:	CJNE	R3,#03H,$+3	;NEED THIS MUCH RAM
	JC	CRST
	MOV	DPTR,#MEMTOP	;SAVE MEMTOP
	ACALL	S31DP2		;SAVE MEMTOP AND SEED RCELL
	ACALL	CNEW		;CLEAR THE MEMORY AND SET UP POINTERS
	;
CR2:	ACALL	RC1		;SET UP STACKS IF NOT DONE
	;
	LCALL	AXTAL0		;DO THE CRYSTAL
	MOV	A,MT1		;GET THE RESET BYTE
	CJNE	A,#5,$+6
	LCALL	4039H
	JNC	BG1		;CHECK FOR 0,1,2,3, OR 4
	JNB	ACC.0,BG3	;NO RUN IF WRONG TYPE
	MOV	DPTR,#ROMADR+16
	MOVX	A,@DPTR		;READ THE BYTE
	CJNE	A,#55H,BG3
	LJMP	CRUN
	;
BG1:	CLR	A		;DO BAUD RATE
	MOV	R3,A
	MOV	R1,A
	MOV	R0,#4
	JB	RXD,$		;LOOP UNTIL A CHARACTER IS RECEIVED
	;
BG2:	DJNZ	R0,$		;FOUR CLOCKS, IN LOOP
	LCALL	DEC3210+4	;NINE CLOCKS ******AA CALL-->LCALL
	MOV	R0,#2		;ONE CLOCK
	JNB	RXD,BG2		;TWO CLOCKS, LOOP UNTIL DONE
	JB	RXD,$		;WAIT FOR STOP CHARACTER TO END
	JNB	RXD,$
	LCALL	RCL		;LOAD THE TIMER ******AA CALL-->LCALL
	;
BG3:	MOV	DPTR,#S_N	;GET THE MESSAGE
	ACALL	CRP		;PRINT IT
	LJMP	CRAM