arrows , automata , positioning shapes, chains, calc, arrows, positioning

;; (C) David Vajda
;; 2025-03-22
;; siebensegment 1fach klassisch
.include "m8def.inc"

ldi r16, HIGH (RAMEND)
out SPH, r16
ldi r16, LOW (RAMEND)
out SPL, r16

ldi r16, 0xff
out DDRC, r16
out DDRB, r16
ldi r16, 0xff
out DDRD, r16



main:
;ldi r16, 0x01
ldi ZH, HIGH (telefonstrB)
ldi ZL, LOW (telefonstrB)
ldi r16, 0x59
rcall hexoutascii
rjmp main

hexoutascii:
push r16
ldi r18, 0b01010101
out PORTD, r18
andi r16, 0b00001111
rcall bcddecode
rcall out7
rcall sleep
pop r16
push r16
swap r16
ldi r18, 0b10101010
out PORTD, r18
andi r16, 0b00001111
rcall bcddecode
rcall out7
rcall sleep
pop r16
ret

out7:
com r24
out PORTC, r24
sbrs r24, 6
rjmp next
ldi r24, 0x01
out PORTB, r24
rjmp next2
next:
ldi r24, 0x00
out PORTB, r24
next2:
ret

bcddecode:
push r16
push ZH
push ZL
ldi ZH, HIGH (seg7B)
ldi ZL, LOW (seg7B)
;; das stimmte natuerlich nicht mit dem adiw - das ist konstante laut i
inc r16
bcddecodeloop1:
lpm r24, Z+
dec r16
brne bcddecodeloop1
pop ZL
pop ZH
pop r16
ret

sleep:
push r16
push r17
push r18
ldi r16, 0xff
sleeploop1:
ldi r17, 0x0b
sleeploop2:
dec r17
brne sleeploop2
dec r16
brne sleeploop1
pop r18
pop r17
pop r16
ret

seg7: .db 0b00111111, 0b00001100, 0b01011011, 0b01011110, 0b01101100, 0b01110110, 0b01110111, 0b00011100, 0b01111111, 0b01111110, 0b01111101, 0b01100111, 0b00110011, 0b01001111, 0b01110011, 0b01110001
.equ seg7B = seg7*2

; 1 e
; 2 d
; 4 c
; 6 b
; 7 a
; 9 f
; 10 g

; 1 e
; 2 d
; 3 c
; 4 b
; 5 a
; 6 f
; 7 g

;; 0: abcdef 1 2 3 4 5 6      0b 0 0111 111
;; 1: bc 4 3
;; 2: abged 5 4 7 1 2
;; 3: abgcd 5 4 7 3 2
;; 4: fgbc 6 7 4 3
;; 5: afgcd 5 6 7 3 2
;; 6: afgcde 5 6 7 3 2 1
;; 7: abc 5 4 3
;; 8: abcdefg 1 2 3 4 5 6 7
;; 9: abcdfg 2 3 4 5 6 7
;; A: abcefg 3 4 5 6 7
;; b: cdefg 2 3 6 7
;; C: afde: 1 2 5 6
;; d: bcdeg 1 2 3 4 7
;; E: adefg 1 2 5 6 7
;; F: aefg 1 5 6 7

;; 1: bc 3 4                    0b 0 0001 100
;; 2: abged 1 2 4 5 7           0b 0 1011 011
;; 3: abgcd 2 3 4 5 7           0b 0 1011 110
;; 4: fgbc 3 4 6 7              0b 0 1101 100
;; 5: afgcd 2 3 5 6 7           0b 0 1110 110
;; 6: afgcde 1 2 3 5 6 7        0b 0 1110 111
;; 7: abc 3 4 5                 0b 0 0011 100
;; 8: abcdefg 1 2 3 4 5 6 7     0b 0 1111 111
;; 9: abcdfg  2 3 4 5 6 7       0b 0 1111 110


;; A: abcefg 1 3 4 5 6 7        0b 0 1111 101
;; b: cdefg 1 2 3 6 7           0b 0 1100 111
;; C: afde: 1 2 5 6             0b 0 0110 011
;; d: bcdeg 1 2 3 4 7           0b 0 1001 111
;; E: adefg 1 2 5 6 7           0b 0 1110 011
;; F: aefg 1 5 6 7              0b 0 1110 001


telefonstr: .db 2,4,0x22, 0x22
.eqq telefonstrB = telefonstr*2

Image IMG_8343.HEIC

Image IMG_8344.HEIC

Image IMG_8345.HEIC

Image IMG_8346.HEIC

Image IMG_8347.HEIC

Image IMG_8348.HEIC

Image IMG_8349.HEIC

Image IMG_8350.HEIC

Image IMG_8351.HEIC

Image IMG_8352.HEIC

Image IMG_8353.HEIC

Image IMG_8354.HEIC

Image IMG_8355.HEIC

Image IMG_8356.HEIC

Image IMG_8357.HEIC