summaryrefslogtreecommitdiff
path: root/Software/pinlock.asm
blob: b11972313ab6536d649c8fd00ecb1937a8ad550f (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
.include "m16def.inc"
.def tmp0 = r16
.def par0 = r17
.def par1 = r18
.def cnt = r19
.def tmp1 = r20
.def tmp2 = r21

init:
  ldi tmp0, HIGH(RAMEND)
  out SPH, tmp0
  ldi tmp0, LOW(RAMEND)
  ldi par0, 0xFF
  ldi par1, 0xFF
  rcall wait
  out SPL, tmp0
  ldi tmp0, 0b11111111
  out DDRA, tmp0
  ldi tmp0, 0b11111111
  out DDRB, tmp0
  ldi tmp0, 0x31
  mov cnt, tmp0
  out PORTA, tmp0
  ldi tmp0, 0x42
  out PORTB, tmp0
  ldi tmp0, 0b11000000
  out DDRD, tmp0
  ldi tmp0, 0b00000000
  out PORTD, tmp0

main:
	ldi par0, 0b11000011
	rcall status

wait:
  mov tmp0, par0
  dec par0
  nop
  brne wait
  mov par0, tmp0
  dec par1
  nop
  brne wait
  inc cnt
  out PORTA, cnt
  ret

; Output the status
; par0 = Status bits
status:
	ldi tmp0, 1
status_loop:
	mov tmp1, par0
	and tmp1, tmp0
	cp tmp0, tmp1
	breq status_set
	ldi tmp1, 0b00111111
	out PORTD, tmp1
	ldi tmp1, 0b10111111
	out PORTD, tmp1
	rjmp status_end
status_set:
	ldi tmp1, 0b01111111
	out PORTD, tmp1
	ldi tmp1, 0b11111111
	out PORTD, tmp1
	rjmp status_end
status_end:
	lsl tmp0
	cpi tmp0, 0
	brne status_loop
	ret