summaryrefslogtreecommitdiff
path: root/read-rom
diff options
context:
space:
mode:
Diffstat (limited to 'read-rom')
-rw-r--r--read-rom/Makefile47
-rw-r--r--read-rom/main.c240
2 files changed, 0 insertions, 287 deletions
diff --git a/read-rom/Makefile b/read-rom/Makefile
deleted file mode 100644
index c31d4ec..0000000
--- a/read-rom/Makefile
+++ /dev/null
@@ -1,47 +0,0 @@
-MCU ?= attiny2313
-AVRDUDE_PROGRAMMER ?= usbasp
-
-AVRCC ?= avr-gcc
-AVRFLASH ?= avrdude
-AVRNM ?= avr-nm
-AVROBJCOPY ?= avr-objcopy
-AVROBJDUMP ?= avr-objdump
-
-CFLAGS += -mmcu=attiny2313 -DF_CPU=20000000UL
-#CFLAGS += -gdwarf-2 -fverbose-asm -save-temps
-CFLAGS += -I. -std=gnu99 -Os -Wall -Wextra -pedantic
-CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
-# r28 .. r31 hold the microsecond counters
-CFLAGS += -ffixed-28 -ffixed-29 -ffixed-30 -ffixed-31
-CFLAGS += -fwhole-program -flto -mstrict-X
-
-AVRFLAGS += -U lfuse:w:0xe4:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
-AVRFLAGS += -U flash:w:main.hex
-# AVRFLAGS += -U eeprom:w:main.eep
-
-%.hex: %.elf
- ${AVROBJCOPY} -O ihex -R .eeprom $< $@
-
-%.eep: %.elf
- ${AVROBJCOPY} -j .eeprom --set-section-flags=.eeprom="alloc,load" \
- --change-section-lma .eeprom=0 -O ihex $< $@
-
-main.elf: main.c
- ${AVRCC} ${CFLAGS} -o $@ ${@:.elf=.c} -Wl,-Map=main.map,--cref
- avr-size -d $@
-
-program: main.hex main.eep
- ${AVRFLASH} -p ${MCU} -c ${AVRDUDE_PROGRAMMER} ${AVRFLAGS}
-
-secsize: main.elf
- ${AVROBJDUMP} -hw -j.text -j.bss -j.data main.elf
-
-funsize: main.elf
- ${AVRNM} --print-size --size-sort main.elf
-
-.PHONY: program secsize funsize
-
-# Listing of phony targets.
-.PHONY : all begin finish end sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff \
-clean clean_list program debug gdb-config
diff --git a/read-rom/main.c b/read-rom/main.c
deleted file mode 100644
index d00ea84..0000000
--- a/read-rom/main.c
+++ /dev/null
@@ -1,240 +0,0 @@
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <stdlib.h>
-
-/*
- * Onewire iButton / SmartButton slave.
- * Has the 64bit ID set below
- * (corresponds to <https://wiki.chaosdorf.de/images/f/fc/Smartbutton.jpg>).
- *
- * Only supports non-overdrive READ ROM. Does not hold any data.
- *
- * Tested and working with a DS2482. Should mostly adhere to the standard,
- * but nothing is guaranteed.
- *
- * Any unexpected input (SKIP ROM, overdriv, ...) may cause a hangup requiring
- * an AVR reset.
- */
-
-#define ADDR1 0xC4
-#define ADDR2 0x00
-#define ADDR3 0x00
-#define ADDR4 0x09
-#define ADDR5 0x7d
-#define ADDR6 0x79
-#define ADDR7 0x04
-#define ADDR8 0x01
-
-// HCNT: r30 (ZL), r31 (ZH)
-// LCNT: r28 (YL), r29 (YH)
-
-#define LCNTH GPIOR2
-#define LCNTL GPIOR1
-#define HCNTL GPIOR0
-
-#define CNT USIDR
-#define LASTCMD OCR0B
-#define BUF OCR0A
-#define POS OCR1A
-#define APOS OCR1B
-#define BYTE EEDR
-
-int main (void)
-{
- /* watchdog reset after ~4 seconds */
- MCUSR &= ~_BV(WDRF);
- WDTCSR = _BV(WDCE) | _BV(WDE);
- WDTCSR = _BV(WDE) | _BV(WDP3);
-
- MCUCR = _BV(ISC10);
- GIMSK = _BV(INT1);
-
- ACSR |= _BV(ACD);
-
- POS = 0;
- APOS = 0;
- DDRD = 0;
- PORTD = 0;
-
- sei();
-
- asm volatile ("ldi r28, 0");
- asm volatile ("ldi r29, 0");
- asm volatile ("ldi r30, 0");
- asm volatile ("ldi r31, 0");
-
- // 1us per cycle
-loop:
- asm volatile ("inc r30"); // 1c
- asm volatile ("adiw r28, 1"); // 2c
- asm volatile ("wdr"); // 1c
- asm volatile ("nop"); // 1c
- asm volatile ("nop"); // 1c
- asm volatile ("nop"); // 1c
- goto loop;
-
- return 0;
-}
-
-ISR(INT1_vect)
-{
- // overhead: 19c (2.4us)
- if (PIND & _BV(PD3)) {
-
- asm volatile ("out 0x15, r29"); // LCNTH
- asm volatile ("out 0x14, r28"); // LCNTL
- asm volatile ("out 0x13, r30"); // HCNTL
-
- // > 256us - reset
- if (LCNTH > 0) {
- DDRD = _BV(PD3);
-
- // 120us loop - r31 / r30 need not be preserved
- asm volatile ("ldi r31, 0");
- asm volatile ("ldi r30, 120"); // Z = 120
- asm volatile ("wdr"); // <-----
- asm volatile ("wdr");
- asm volatile ("wdr");
- asm volatile ("sbiw r30, 1");
- asm volatile ("cp r30, r1");
- asm volatile ("brne .-12"); // -^
-
- DDRD = 0;
- LASTCMD = 0;
- BUF = 0;
- POS = 0;
- asm volatile ("wdr");
- EIFR |= _BV(INTF1);
- }
- // ~60us - write 0
- else if (LCNTL > 15) {
- if (!LASTCMD)
- POS++;
- }
- // < ~15us - write 1 OR read
- else {
- if (!LASTCMD) {
- BUF |= _BV(POS);
- POS++;
- }
- }
- if (!LASTCMD && (POS == 7)) {
- LASTCMD = BUF;
- POS = 1;
- APOS = 0;
- BYTE = ~ADDR8;
- EEAR = 0;
- EIFR |= _BV(INTF1);
- }
-
-
- asm volatile ("ldi r30, 1"); // HCNTL = 1
- }
- else {
- if (LASTCMD == 0x33) {
-
- if (BYTE & POS) {
-
- DDRD = _BV(PD3);
-
- // 15us loop - r31 / r30 need not be preserved
- asm volatile ("ldi r31, 0");
- asm volatile ("ldi r30, 15"); // Z = 120
- asm volatile ("wdr"); // <-----
- asm volatile ("wdr");
- asm volatile ("wdr");
- asm volatile ("sbiw r30, 1");
- asm volatile ("cp r30, r1");
- asm volatile ("brne .-12"); // -^
-
- DDRD = 0;
- asm volatile ("wdr");
- EIFR |= _BV(INTF1);
- }
- if (POS != 0x80) {
- POS <<= 1;
- }
- else {
- APOS++;
- POS = 1;
- if (APOS == 1)
- BYTE = ~ADDR7;
- else if (APOS == 2)
- BYTE = ~ADDR6;
- else if (APOS == 3)
- BYTE = ~ADDR5;
- else if (APOS == 4)
- BYTE = ~ADDR4;
- else if (APOS == 5)
- BYTE = ~ADDR3;
- else if (APOS == 6)
- BYTE = ~ADDR2;
- else if (APOS == 7)
- BYTE = ~ADDR1;
-
- else if (APOS == 8) {
- LASTCMD = 0;
- POS = 0;
- }
- }
- }
- else if (LASTCMD == 0xf0) {
-
- if (((EEAR == 0) && (BYTE & POS))
- || ((EEAR == 1) && !(BYTE & POS))) {
- //if (BYTE & POS) {
- DDRD = _BV(PD3);
-
- // 15us loop - r31 / r30 need not be preserved
- asm volatile ("ldi r31, 0");
- asm volatile ("ldi r30, 15"); // Z = 120
- asm volatile ("wdr"); // <-----
- asm volatile ("wdr");
- asm volatile ("wdr");
- asm volatile ("sbiw r30, 1");
- asm volatile ("cp r30, r1");
- asm volatile ("brne .-12"); // -^
-
- DDRD = 0;
- asm volatile ("wdr");
- EIFR |= _BV(INTF1);
- }
- if (EEAR < 2) {
- EEAR++;
- }
- else if (POS != 0x80) {
- POS <<= 1;
- EEAR = 0;
- }
- else {
- EEAR = 0;
- APOS++;
- POS = 1;
- if (APOS == 1)
- BYTE = ~ADDR7;
- else if (APOS == 2)
- BYTE = ~ADDR6;
- else if (APOS == 3)
- BYTE = ~ADDR5;
- else if (APOS == 4)
- BYTE = ~ADDR4;
- else if (APOS == 5)
- BYTE = ~ADDR3;
- else if (APOS == 6)
- BYTE = ~ADDR2;
- else if (APOS == 7)
- BYTE = ~ADDR1;
-
- else if (APOS == 8) {
- LASTCMD = 0;
- POS = 0;
- }
- }
-
- }
- asm volatile ("ldi r29, 0"); // LCNTH = 0
- asm volatile ("ldi r28, 1"); // LCNTL = 1
-
- }
-
-}