├── .gitignore ├── .gitmodules ├── .travis.yml ├── Makefile ├── Makefile.inc ├── README.md ├── Vagrantfile ├── assets ├── camp.png ├── fairy.png ├── fire.led ├── flashy.led ├── fonts │ ├── Orbitron-Black.ttf │ ├── Orbitron-Bold.ttf │ ├── Orbitron-Medium.ttf │ ├── Orbitron-Regular.ttf │ ├── PT_Sans-Narrow-Web-Bold.ttf │ ├── PaytoneOne.ttf │ ├── PermanentMarker.ttf │ ├── UFL.txt │ ├── Ubuntu-Bold.ttf │ ├── Ubuntu-BoldItalic.ttf │ ├── Ubuntu-Italic.ttf │ ├── Ubuntu-Light.ttf │ ├── Ubuntu-LightItalic.ttf │ ├── Ubuntu-Medium.ttf │ ├── Ubuntu-MediumItalic.ttf │ ├── Ubuntu-Regular.ttf │ └── soviet4.ttf ├── i42.gif ├── knightrider.led ├── laz0r.led ├── off.led ├── rad1o-black-highcontrast.png ├── rad1o-black.png ├── rad1o-white-green.png ├── rad1o-white-green.xcf ├── rad1o-white.png ├── rad1o.png ├── rad1o.xcf ├── rainbow.led ├── rainbow2.led ├── rgb_leds.led └── static.led ├── blinky ├── Makefile └── blinky.c ├── bootloader ├── Makefile ├── boot.ld ├── intrinsics.h └── main.c ├── campapp ├── Makefile ├── exe.c ├── main.c ├── nickname.c ├── rad1oconfig.c ├── rad1oconfig.h ├── rgb_leds.c └── util.c ├── ccccmaze ├── Makefile ├── Readme.md ├── constants.h ├── main.c ├── modules │ ├── navigate │ │ ├── display.c │ │ ├── display.h │ │ ├── initialize.c │ │ ├── initialize.h │ │ ├── maze.c │ │ ├── maze.h │ │ ├── room.c │ │ └── room.h │ └── types │ │ └── application.h ├── navigate.c ├── story │ ├── 0 │ │ ├── cm0000.cfg │ │ ├── cm0001.cfg │ │ ├── cm0002.cfg │ │ ├── cm0003.cfg │ │ ├── cm000F.cfg │ │ ├── cm0100.cfg │ │ ├── cm0101.cfg │ │ ├── cm0102.cfg │ │ ├── cm0103.cfg │ │ ├── cm0200.cfg │ │ ├── cm0201.cfg │ │ ├── cm0202.cfg │ │ ├── cm0203.cfg │ │ ├── cm0300.cfg │ │ ├── cm0301.cfg │ │ ├── cm0302.cfg │ │ ├── cm0303.cfg │ │ └── cm0400.cfg │ ├── cm----.csm │ ├── cm0000.csm │ ├── cm0001.csm │ ├── cm0002.csm │ ├── cm0003.csm │ ├── cm0004.csm │ ├── cm0005.csm │ ├── cm0006.csm │ ├── cm0007.csm │ ├── cm0100.csm │ ├── cm0101.csm │ ├── cm0102.csm │ ├── cm0103.csm │ ├── cm0104.csm │ ├── cm0105.csm │ ├── cm0106.csm │ ├── cm0107.csm │ ├── cm0200.csm │ ├── cm0201.csm │ ├── cm0202.csm │ ├── cm0203.csm │ ├── cm0204.csm │ ├── cm0205.csm │ ├── cm0206.csm │ ├── cm0207.csm │ ├── cm0300.csm │ ├── cm0301.csm │ ├── cm0302.csm │ ├── cm0303.csm │ ├── cm0304.csm │ ├── cm0305.csm │ ├── cm0306.csm │ ├── cm0307.csm │ ├── cm0400.csm │ ├── cm0401.csm │ ├── cm0402.csm │ ├── cm0403.csm │ ├── cm0404.csm │ ├── cm0405.csm │ ├── cm0406.csm │ ├── cm0407.csm │ ├── cm0500.csm │ ├── cm0501.csm │ ├── cm0502.csm │ ├── cm0503.csm │ ├── cm0504.csm │ ├── cm0505.csm │ ├── cm0506.csm │ ├── cm0507.csm │ ├── cm0600.csm │ ├── cm0601.csm │ ├── cm0602.csm │ ├── cm0603.csm │ ├── cm0604.csm │ ├── cm0605.csm │ ├── cm0606.csm │ ├── cm0607.csm │ ├── cm0700.csm │ ├── cm0701.csm │ ├── cm0702.csm │ ├── cm0703.csm │ ├── cm0704.csm │ ├── cm0705.csm │ ├── cm0706.csm │ ├── cm0707.csm │ └── gen │ │ ├── 1 │ │ ├── ci │ │ ├── ci0000.cfg │ │ ├── ci0001.cfg │ │ ├── ci0002.cfg │ │ ├── ci0003.cfg │ │ ├── ci0100.cfg │ │ ├── ci0101.cfg │ │ ├── ci0102.cfg │ │ ├── ci0103.cfg │ │ ├── ci0200.cfg │ │ ├── ci0201.cfg │ │ ├── ci0202.cfg │ │ ├── ci0203.cfg │ │ ├── ci0300.cfg │ │ ├── ci0301.cfg │ │ ├── ci0302.cfg │ │ └── ci0303.cfg │ │ ├── cm │ │ ├── cm0000.cfg │ │ ├── cm0001.cfg │ │ ├── cm0002.cfg │ │ ├── cm0003.cfg │ │ ├── cm0004.cfg │ │ ├── cm0005.cfg │ │ ├── cm0006.cfg │ │ ├── cm0007.cfg │ │ ├── cm0100.cfg │ │ ├── cm0101.cfg │ │ ├── cm0102.cfg │ │ ├── cm0103.cfg │ │ ├── cm0104.cfg │ │ ├── cm0105.cfg │ │ ├── cm0106.cfg │ │ ├── cm0107.cfg │ │ ├── cm0200.cfg │ │ ├── cm0201.cfg │ │ ├── cm0202.cfg │ │ ├── cm0203.cfg │ │ ├── cm0204.cfg │ │ ├── cm0205.cfg │ │ ├── cm0206.cfg │ │ ├── cm0207.cfg │ │ ├── cm0300.cfg │ │ ├── cm0301.cfg │ │ ├── cm0302.cfg │ │ ├── cm0303.cfg │ │ ├── cm0304.cfg │ │ ├── cm0305.cfg │ │ ├── cm0306.cfg │ │ ├── cm0307.cfg │ │ ├── cm0400.cfg │ │ ├── cm0401.cfg │ │ ├── cm0402.cfg │ │ ├── cm0403.cfg │ │ ├── cm0404.cfg │ │ ├── cm0405.cfg │ │ ├── cm0406.cfg │ │ ├── cm0407.cfg │ │ ├── cm0500.cfg │ │ ├── cm0501.cfg │ │ ├── cm0502.cfg │ │ ├── cm0503.cfg │ │ ├── cm0504.cfg │ │ ├── cm0505.cfg │ │ ├── cm0506.cfg │ │ ├── cm0507.cfg │ │ ├── cm0600.cfg │ │ ├── cm0601.cfg │ │ ├── cm0602.cfg │ │ ├── cm0603.cfg │ │ ├── cm0604.cfg │ │ ├── cm0605.cfg │ │ ├── cm0606.cfg │ │ ├── cm0607.cfg │ │ ├── cm0700.cfg │ │ ├── cm0701.cfg │ │ ├── cm0702.cfg │ │ ├── cm0703.cfg │ │ ├── cm0704.cfg │ │ ├── cm0705.cfg │ │ ├── cm0706.cfg │ │ └── cm0707.cfg │ │ └── maze.sh ├── usage.c └── utils.h ├── dac ├── Makefile ├── dac-test.c └── output.h ├── default.nix ├── doc ├── build.md └── debugging.md ├── fatfs ├── 00readme.txt ├── diskio.c ├── diskio.h ├── ff.c ├── ff.h ├── ffconf.h └── integer.h ├── feldtest ├── Makefile ├── app_usbd_cdc_cfg.h ├── app_usbd_cfg.h ├── cdc_desc.c ├── cdc_main.c ├── cdc_vcom.c ├── cdc_vcom.h ├── feldtest.c ├── feldtest.h ├── main.c ├── msc_desc.c ├── msc_disk.h ├── msc_main.c └── msc_ram.c ├── files ├── camp.lcd ├── fahrplan.scd ├── fairy.lcd ├── hkrf-old.b1n ├── i42.lcd ├── marker18.f0n ├── netz39.obj ├── orbit14.f0n ├── orbit32.f0n ├── pt18.f0n ├── ptone18.f0n ├── rad1o.lcd ├── sample.an1 ├── security.dac ├── soviet18.f0n ├── soviet26.f0n ├── soviet38.f0n ├── ubuntu18.f0n ├── ubuntu29.f0n ├── ubuntu36.f0n └── welfare.mod ├── flashapp ├── Makefile ├── main.c └── msc │ ├── msc_desc.c │ ├── msc_disk.h │ ├── msc_main.c │ ├── msc_main.h │ ├── msc_ram.c │ └── msc_usbd_cfg.h ├── hackrf.patch ├── imglcd └── main.c ├── l0dables ├── .gitignore ├── 0xb.c ├── EXPORTS ├── Makefile ├── battery.c ├── blinky.c ├── bricks.c ├── colorp.c ├── colors.c ├── cube.c ├── fire.c ├── invaders.c ├── invfont.c ├── mandel.c ├── mktable.pl ├── nick_anim.c ├── nick_colplasm.c ├── nick_image.c ├── nick_invaders.c ├── nick_ledbow.c ├── nick_life.c ├── nick_matrix.c ├── nick_netz39.c ├── nick_plain.c ├── nick_scr0ll.c ├── nick_w0rpcore.c ├── schedule.c ├── snake.c ├── snake2.c ├── sysinfo.c ├── tetris.c ├── wobbel.c └── ws2812b.c ├── l0unge ├── Makefile ├── README_l0unge_l1cht ├── l0ungel1cht.c ├── l0ungel1cht.h └── main.c ├── ld ├── LPC4330_M4_memory.ld ├── LPC43xx_M4_M0_image_from_text.ld ├── LPC43xx_M4_memory.ld ├── app.ld ├── l0dable.ld └── m0.ld ├── lpcapi ├── api_error.h ├── cdc │ ├── cdc_desc.c │ ├── cdc_main.c │ ├── cdc_main.h │ ├── cdc_usbd_cfg.h │ ├── cdc_vcom.c │ └── cdc_vcom.h ├── iap_18xx_43xx.h ├── msc │ ├── msc_desc.c │ ├── msc_disk.h │ ├── msc_main.c │ ├── msc_main.h │ ├── msc_ram.c │ └── msc_usbd_cfg.h ├── otp_18xx_43xx.h ├── romapi_18xx_43xx.h ├── usbd.h ├── usbd_adc.h ├── usbd_cdc.h ├── usbd_cdcuser.h ├── usbd_common.c ├── usbd_common.h ├── usbd_core.h ├── usbd_desc.h ├── usbd_dfu.h ├── usbd_dfuuser.h ├── usbd_hid.h ├── usbd_hiduser.h ├── usbd_hw.h ├── usbd_msc.h ├── usbd_mscuser.h └── usbd_rom_api.h ├── musicapp ├── LICENSE ├── Makefile ├── app.ld ├── main.c └── music.c ├── portalib ├── README ├── arm_intrinsics.h ├── complex.h ├── decimate.c ├── decimate.h ├── demodulate.c ├── demodulate.h ├── fft.c ├── fft.h ├── filters.c ├── filters.h ├── fxpt_atan2.c ├── fxpt_atan2.h ├── portapack.c ├── portapack.h ├── portapack_driver.h ├── portapack_state.c ├── rx_am.c ├── rx_am.h ├── rx_fm_broadcast.c ├── rx_fm_broadcast.h ├── rx_fm_narrowband.c ├── rx_fm_narrowband.h ├── specan.c └── specan.h ├── r0ketlib ├── colorin.c ├── colorin.h ├── config.c ├── config.h ├── decoder.c ├── decoder.h ├── display.c ├── display.h ├── execute.c ├── execute.h ├── fonts.h ├── fonts │ ├── orbitron14.c │ ├── orbitron14.h │ ├── smallfonts.c │ ├── smallfonts.h │ ├── ubuntu18.c │ └── ubuntu18.h ├── fs_util.c ├── fs_util.h ├── idle.c ├── idle.h ├── image.c ├── image.h ├── intin.c ├── intin.h ├── itoa.c ├── itoa.h ├── keyin.c ├── keyin.h ├── menu.c ├── menu.h ├── mesh.c ├── mesh.h ├── night.c ├── night.h ├── print.c ├── print.h ├── random.c ├── random.h ├── render.c ├── render.h ├── select.c ├── select.h ├── stringin.c └── stringin.h ├── rad1olib ├── assert.c ├── assert.h ├── audio.c ├── audio.h ├── battery.c ├── battery.h ├── colorspace.c ├── colorspace.h ├── draw.c ├── draw.h ├── light_ws2812_cortex.c ├── light_ws2812_cortex.h ├── pins.h ├── sbrk.c ├── setup.c ├── setup.h ├── spi-flash.c ├── spi-flash.h ├── systick.c └── systick.h ├── rfapp ├── Makefile ├── README-telegraf.rst ├── cossin1024-gen.lua ├── cossin1024.c ├── cossin1024.h ├── main.c ├── pwrsckt.c ├── scope.c ├── spectrum.c ├── telegraf.c └── wfm.c ├── rflib ├── Makefile ├── bfsk.c ├── m0 │ ├── Makefile │ ├── cossin1024.c │ ├── hackrf_core.c │ ├── m0.c │ ├── m0rxtx.h │ ├── max2837.c │ ├── max2871.c │ ├── max2871_regs.c │ ├── max5864.c │ ├── rf_path.c │ ├── sgpio.c │ ├── sgpio.h │ ├── si5351c.c │ └── tuning.c ├── m0_bin.h ├── m0_bin.s ├── main.c ├── rflib_m0.c ├── rflib_m0.h ├── usbfreq.c └── usbraw.c ├── smartflash ├── .gitignore ├── 90-rad1o-flash.rules ├── FLASHgui ├── Makefile ├── README.md ├── order-files └── osmocom-peakhold.diff ├── testapp ├── Makefile ├── batt.c ├── cdc.c ├── cpld.c ├── dac.c ├── exe.c ├── feldtest.c ├── fonts.c ├── img.c ├── lcd.c ├── led.c ├── main.c ├── msc.c ├── nickname.c ├── nightcheck.c ├── ppack.c ├── rad1oconfig.c ├── rotate.c ├── spectrum.c ├── speed.c └── ws2812b.c └── tools ├── convertleds.py ├── gif2ani.py ├── img2lcd.pl ├── lcd2ani.pl ├── make-dfu.py ├── makefont.pl └── mkfirmware.pl /.gitignore: -------------------------------------------------------------------------------- 1 | *.org 2 | *.o 3 | *.a 4 | *.swp 5 | *.dfu 6 | *.map 7 | *.elf 8 | *.b1n 9 | *.gen 10 | .deps 11 | flashapp/xsvf.inc 12 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "libopencm3"] 2 | path = libopencm3 3 | url = https://github.com/rad1o/libopencm3.git 4 | [submodule "hackrf-old"] 5 | path = hackrf-old 6 | url = https://github.com/rad1o/hackrf.git 7 | [submodule "hackrf-upstream"] 8 | path = hackrf 9 | url = https://github.com/mossmann/hackrf 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: c 2 | dist: trusty 3 | 4 | before_install: 5 | - sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa 6 | - sudo apt-get -qq update 7 | - sudo apt-get install -qq gcc-arm-embedded python-yaml cmake dosfstools mtools pkg-config libusb-dev 8 | 9 | script: 10 | - PYTHONPATH=/usr/lib/python2.7/dist-packages "make" 11 | 12 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: lib hackrf subdirs 2 | 3 | travis: 4 | $(MAKE) ADDFLAGS=-Werror lib hackrf subdirs 5 | $(MAKE) -C smartflash test 6 | 7 | subdirs: 8 | $(MAKE) -C campapp 9 | $(MAKE) -C ccccmaze 10 | $(MAKE) -C testapp 11 | $(MAKE) -C musicapp 12 | $(MAKE) -C rfapp 13 | $(MAKE) -C rflib 14 | $(MAKE) -C l0unge 15 | $(MAKE) -C bootloader 16 | $(MAKE) -C flashapp 17 | $(MAKE) -C l0dables 18 | $(MAKE) -C smartflash 19 | 20 | libopencm3/README: 21 | git submodule init 22 | git submodule update 23 | 24 | libopencm3/lib/libopencm3_lpc43xx.a: 25 | $(MAKE) -C libopencm3 26 | 27 | lib: libopencm3/README libopencm3/lib/libopencm3_lpc43xx.a 28 | 29 | hackrf-old/Readme.md: 30 | git submodule init 31 | git submodule update 32 | 33 | hackrf/Readme.md: 34 | git submodule init 35 | git submodule update 36 | 37 | hackrf/firmware/libopencm3/README: 38 | cd hackrf && git submodule init && git submodule update 39 | 40 | hackrf/firmware/hackrf_usb/build/hackrf_usb_ram.bin: hackrf/firmware/libopencm3/README hackrf.patch 41 | mkdir -p hackrf/firmware/hackrf_usb/build 42 | (cd hackrf && patch -N -p1 -r - < ../hackrf.patch; echo "Patching done") 43 | cmake -B hackrf/firmware/hackrf_usb/build/ -S hackrf/firmware/hackrf_usb/ -DBOARD=RAD1O 44 | $(MAKE) -C hackrf/firmware/hackrf_usb/build/ 45 | 46 | hackrf: hackrf-old/Readme.md hackrf/Readme.md hackrf/firmware/hackrf_usb/build/hackrf_usb_ram.bin 47 | 48 | clean: 49 | $(MAKE) -C campapp clean 50 | $(MAKE) -C ccccmaze clean 51 | $(MAKE) -C testapp clean 52 | $(MAKE) -C musicapp clean 53 | $(MAKE) -C rfapp clean 54 | $(MAKE) -C rflib clean 55 | $(MAKE) -C l0unge clean 56 | $(MAKE) -C bootloader clean 57 | $(MAKE) -C flashapp clean 58 | $(MAKE) -C l0dables clean 59 | $(MAKE) -C smartflash clean 60 | $(MAKE) -C hackrf-old hack-clean 61 | rm -rf hackrf/firmware/hackrf_usb/build/ 62 | $(MAKE) -C libopencm3 clean 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Build Status](https://travis-ci.org/rad1o/f1rmware.svg) 2 | 3 | Build Log: https://travis-ci.org/rad1o/f1rmware 4 | 5 | # rad1o 6 | 7 | This is the f1rmware of the CCCamp 2015 radio badge. 8 | 9 | ## Project Infrastructure 10 | Website: http://rad1o.badge.events.ccc.de/software 11 | 12 | IRC channel: irc://irc.darkfasel.net/#rad1o (Port 6697 oder 9999, TLS-only, IPv6 Support) 13 | * Web-IRC-Client: https://webirc.darkfasel.net/#rad1o 14 | * other contact information: https://rad1o.badge.events.ccc.de/contact 15 | 16 | 17 | [Build instructions](doc/build.md) 18 | 19 | [Some notes on toggling LEDs](doc/debugging.md) 20 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | Vagrant.configure('2') do |config| 2 | config.vm.define :rad1o do |rad1o_config| 3 | rad1o_config.vm.box = 'ubuntu/trusty64' 4 | rad1o_config.vm.hostname = 'rad1o' 5 | rad1o_config.vm.network :private_network, ip: '10.0.10.2' 6 | rad1o_config.vm.provider :virtualbox do |vb| 7 | vb.customize [ 8 | 'modifyvm', :id, 9 | '--name', 'rad1o vagrant vm' 10 | ] 11 | end 12 | 13 | rad1o_config.vm.provision 'shell', inline: 'apt-get install software-properties-common' 14 | rad1o_config.vm.provision 'shell', inline: 'add-apt-repository -y ppa:terry.guo/gcc-arm-embedded' 15 | rad1o_config.vm.provision 'shell', inline: 'echo "Package: gcc-arm-none-eabi\n Pin: release o=LP-PPA-terry.guo-gcc-arm-embedded\n Priority: 501" |sudo tee /etc/apt/preferences.d/pin-gcc-arm-embedded' 16 | rad1o_config.vm.provision 'shell', inline: 'apt-get update; apt-get install -y gcc-arm-none-eabi libnewlib-arm-none-eabi git cmake' 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /assets/camp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/camp.png -------------------------------------------------------------------------------- /assets/fairy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fairy.png -------------------------------------------------------------------------------- /assets/fonts/Orbitron-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Orbitron-Black.ttf -------------------------------------------------------------------------------- /assets/fonts/Orbitron-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Orbitron-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Orbitron-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Orbitron-Medium.ttf -------------------------------------------------------------------------------- /assets/fonts/Orbitron-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Orbitron-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/PT_Sans-Narrow-Web-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/PT_Sans-Narrow-Web-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/PaytoneOne.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/PaytoneOne.ttf -------------------------------------------------------------------------------- /assets/fonts/PermanentMarker.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/PermanentMarker.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-Light.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-LightItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-Medium.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-MediumItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Ubuntu-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/Ubuntu-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/soviet4.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/fonts/soviet4.ttf -------------------------------------------------------------------------------- /assets/i42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/i42.gif -------------------------------------------------------------------------------- /assets/knightrider.led: -------------------------------------------------------------------------------- 1 | 000010 000010 000000 000000 000000 000000 000000 000000 2 | 000010 000010 000000 000000 000000 000000 000000 000000 3 | 000010 000010 000000 000000 000000 000000 000000 000000 4 | 000010 000010 001000 000000 000000 000000 000000 000000 5 | 000010 000010 000800 001000 000000 000000 000000 000000 6 | 000010 000010 000200 000800 001000 000000 000000 000000 7 | 000010 000010 000000 000200 000800 001000 000000 000000 8 | 000010 000010 000000 000000 000200 000800 001000 000000 9 | 000010 000010 000000 000000 000000 000200 000800 000000 10 | 000010 000010 000000 000000 000000 000000 000200 000000 11 | 000010 000010 000000 000000 000000 000000 000000 000000 12 | 000010 000010 000000 000000 000000 000000 001000 000000 13 | 000010 000010 000000 000000 000000 001000 000800 000000 14 | 000010 000010 000000 000000 001000 000800 000200 000000 15 | 000010 000010 000000 001000 000800 000200 000000 000000 16 | 000010 000010 001000 000800 000200 000000 000000 000000 17 | 000010 000010 000800 000200 000000 000000 000000 000000 18 | 000010 000010 000200 000000 000000 000000 000000 000000 19 | -------------------------------------------------------------------------------- /assets/laz0r.led: -------------------------------------------------------------------------------- 1 | 000000 000000 000000 000000 000000 000000 000000 000000 2 | 000000 000000 000000 000000 000000 000000 000000 000000 3 | 000000 000000 000000 000000 000000 000000 000000 000000 4 | 000000 000000 000000 000000 000000 000000 000000 000000 5 | 000000 000000 000f00 000000 000000 000000 000000 000000 6 | 000000 000000 002f00 000f00 000000 000000 000000 000000 7 | 000000 000000 00ff00 002f00 000f00 000000 000000 000000 8 | 000000 000000 002f00 00ff00 002f00 000f00 000000 000000 9 | 000000 000000 000f00 002f00 00ff00 002f00 000f00 000000 10 | 000000 000000 000000 000f00 002f00 00ff00 002f00 000000 11 | 000000 000000 000000 000000 000f00 002f00 00ff00 000000 12 | 000000 000000 000000 000000 000000 000f00 002f00 000000 13 | 000000 000000 000000 000000 000000 000000 000f00 000000 14 | 000000 000000 000000 000000 000000 000000 000000 3f003f 15 | 000000 000000 000000 000000 000000 000000 000000 009f00 16 | 000000 000000 000000 000000 000000 000000 000000 cf00cf 17 | 000000 000000 000000 000000 000000 000000 000000 00ff00 18 | 000000 000000 000000 000000 000000 000000 000000 5f005f 19 | 000000 000000 000000 000000 000000 000000 000000 3f003f 20 | 000000 000000 000000 000000 000000 000000 000000 009f00 21 | 000000 000000 000000 000000 000000 000000 000000 cf00cf 22 | 000000 000000 000000 000000 000000 000000 000000 00ff00 23 | 000000 000000 000000 000000 000000 000000 000000 5f005f 24 | -------------------------------------------------------------------------------- /assets/off.led: -------------------------------------------------------------------------------- 1 | 000000 000000 000000 000000 000000 000000 000000 000000 2 | -------------------------------------------------------------------------------- /assets/rad1o-black-highcontrast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/rad1o-black-highcontrast.png -------------------------------------------------------------------------------- /assets/rad1o-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/rad1o-black.png -------------------------------------------------------------------------------- /assets/rad1o-white-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/rad1o-white-green.png -------------------------------------------------------------------------------- /assets/rad1o-white-green.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/rad1o-white-green.xcf -------------------------------------------------------------------------------- /assets/rad1o-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/rad1o-white.png -------------------------------------------------------------------------------- /assets/rad1o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/rad1o.png -------------------------------------------------------------------------------- /assets/rad1o.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/assets/rad1o.xcf -------------------------------------------------------------------------------- /assets/rainbow.led: -------------------------------------------------------------------------------- 1 | 000000 000000 008000 404000 800000 400040 000080 004040 2 | 000000 000000 107000 503000 700010 300050 001070 005030 3 | 000000 000000 206000 602000 600020 200060 002060 006020 4 | 000000 000000 305000 701000 500030 100070 003050 007010 5 | 000000 000000 404000 800000 400040 000080 004040 008000 6 | 000000 000000 503000 700010 300050 001070 005030 107000 7 | 000000 000000 602000 600020 200060 002060 006020 206000 8 | 000000 000000 701000 500030 100070 003050 007010 305000 9 | 000000 000000 800000 400040 000080 004040 008000 404000 10 | 000000 000000 700010 300050 001070 005030 107000 503000 11 | 000000 000000 600020 200060 002060 006020 206000 602000 12 | 000000 000000 500030 100070 003050 007010 305000 701000 13 | 000000 000000 400040 000080 004040 008000 404000 800000 14 | 000000 000000 300050 001070 005030 107000 503000 700010 15 | 000000 000000 200060 002060 006020 206000 602000 600020 16 | 000000 000000 100070 003050 007010 305000 701000 500030 17 | 000000 000000 000080 004040 008000 404000 800000 400040 18 | 000000 000000 001070 005030 107000 503000 700010 300050 19 | 000000 000000 002060 006020 206000 602000 600020 200060 20 | 000000 000000 003050 007010 305000 701000 500030 100070 21 | 000000 000000 004040 008000 404000 800000 400040 000080 22 | 000000 000000 005030 107000 503000 700010 300050 001070 23 | 000000 000000 006020 206000 602000 600020 200060 002060 24 | 000000 000000 007010 305000 701000 500030 100070 003050 25 | -------------------------------------------------------------------------------- /assets/rgb_leds.led: -------------------------------------------------------------------------------- 1 | delay:200 2 | 101000 101000 000000 000000 000000 000000 000000 000000 3 | 101000 101000 000010 000000 000000 000000 000000 000000 4 | 101000 101000 000010 000010 000000 000000 000000 000000 5 | 101000 101000 000010 000010 000010 000000 000000 000000 6 | 101000 101000 000010 000010 000010 000010 000000 000000 7 | 101000 101000 000010 000010 000010 000010 000010 000000 8 | 101000 101000 000010 000010 000010 000010 000010 001000 9 | 101000 101000 000010 000010 000010 000010 000010 101000 10 | 101000 101000 000010 000010 000010 000010 000010 100000 11 | -------------------------------------------------------------------------------- /assets/static.led: -------------------------------------------------------------------------------- 1 | 101000 101000 000010 000010 000010 000010 000010 100000 2 | -------------------------------------------------------------------------------- /blinky/Makefile: -------------------------------------------------------------------------------- 1 | APP=main 2 | 3 | # our code 4 | OBJS = blinky.o 5 | 6 | OBJS += ../rad1olib/setup.o 7 | OBJS += ../r0ketlib/display.o 8 | OBJS += ../r0ketlib/render.o 9 | OBJS += ../r0ketlib/fonts/smallfonts.o 10 | OBJS += ../r0ketlib/print.o 11 | OBJS += ../r0ketlib/itoa.o 12 | OBJS += ../r0ketlib/keyin.o 13 | 14 | CFLAGS=-Wno-unused-variable -DRAD1O 15 | 16 | RPATH=.. 17 | include ../Makefile.inc 18 | -------------------------------------------------------------------------------- /bootloader/Makefile: -------------------------------------------------------------------------------- 1 | APP=boot 2 | 3 | # our code 4 | OBJS = main.o 5 | OBJS += ../rad1olib/setup.o 6 | OBJS += ../r0ketlib/display.o 7 | OBJS += ../r0ketlib/render.o 8 | OBJS += ../r0ketlib/fonts/smallfonts.o 9 | OBJS += ../r0ketlib/print.o 10 | OBJS += ../r0ketlib/itoa.o 11 | OBJS += ../r0ketlib/keyin.o 12 | OBJS += ../r0ketlib/menu.o 13 | OBJS += ../r0ketlib/decoder.o 14 | OBJS += ../rad1olib/spi-flash.o 15 | OBJS += ../rad1olib/assert.o 16 | OBJS += ../rad1olib/systick.o 17 | OBJS += ../fatfs/diskio.o 18 | OBJS += ../fatfs/ff.o 19 | OBJS += ../r0ketlib/select.o 20 | OBJS += ../r0ketlib/idle.o 21 | OBJS += ../r0ketlib/fs_util.o 22 | OBJS += ../lpcapi/usbd_common.o 23 | OBJS += ../lpcapi/msc/msc_main.o 24 | OBJS += ../lpcapi/msc/msc_ram.o 25 | OBJS += ../lpcapi/msc/msc_desc.o 26 | OBJS += ../hackrf-old/firmware/common/usb.o 27 | 28 | CFLAGS=-Wno-unused-variable -DRAD1O -DLPC43XX_M4 29 | OBJS += ../hackrf-old/firmware/common/w25q80bv.o 30 | OBJS += ../hackrf-old/firmware/common//max2871.o 31 | #OBJS += ../hackrf-old/firmware/common//max2871_regs.o 32 | 33 | RPATH=.. 34 | LDSCRIPT=boot.ld 35 | include ../Makefile.inc 36 | 37 | -------------------------------------------------------------------------------- /bootloader/intrinsics.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | static inline uint32_t get_sp(void){ 4 | register uint32_t result; 5 | __asm volatile ("MRS %0, msp\n" : "=r" (result) ); 6 | return result; 7 | }; 8 | 9 | static inline void boot(const void * vtable){ 10 | // Set new Vtable 11 | cm_disable_interrupts(); 12 | CREG_M4MEMMAP = (uintptr_t)vtable; 13 | SCB_VTOR = (uintptr_t) vtable; 14 | cm_enable_interrupts(); 15 | 16 | // Reset stack pointer & branch to the new reset vector. 17 | __asm( "mov r0, %0\n" 18 | "ldr sp, [r0]\n" 19 | "ldr r0, [r0, #4]\n" 20 | "bx r0\n" 21 | : 22 | : "r"(vtable) 23 | : "%sp", "r0"); 24 | }; 25 | 26 | static inline uint32_t get_pc(void){ 27 | register uint32_t result; 28 | __asm volatile ("mov %0, pc\n" : "=r" (result) ); 29 | return result; 30 | }; 31 | 32 | extern void * _bin_size; 33 | extern void * _reloc_ep; 34 | extern void * _text_start; 35 | 36 | extern unsigned _bss, _ebss; 37 | 38 | int main(uint32_t); 39 | 40 | void __attribute__ ((naked)) __attribute((section(".reset")))reset_handler(void) { 41 | volatile unsigned *dest; 42 | volatile uint32_t idx; 43 | static uint32_t startloc=-1; /* initialize so it is not in BSS */ 44 | 45 | if ((void *)CREG_M4MEMMAP != &_reloc_ep){ 46 | /* Move ourselves to _reloc_ep and restart there */ 47 | for (idx=0; idx < ((uintptr_t)& _bin_size)/sizeof(uint32_t); idx++){ 48 | ((uint32_t*)&_reloc_ep)[idx]= ((uint32_t *)&_text_start)[idx]; 49 | }; 50 | /* remember where we started. Needs to be done after the copy of data */ 51 | startloc=CREG_M4MEMMAP; 52 | /* set shadow area to new code loction, so boot() still works */ 53 | CREG_M4MEMMAP = (uintptr_t)&_reloc_ep; 54 | boot(&_reloc_ep); 55 | }; 56 | 57 | /* Initialize BSS */ 58 | for (dest = &_bss; dest < &_ebss; ) { 59 | *dest++ = 0; 60 | } 61 | 62 | /* Call the application's entry point. */ 63 | main(startloc); 64 | } 65 | -------------------------------------------------------------------------------- /campapp/exe.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | //# MENU l0dables 15 | void execute_menu(){ 16 | getInputWaitRelease(); 17 | executeSelect("C1D"); 18 | setTextColor(0xFF,0x00); 19 | }; 20 | -------------------------------------------------------------------------------- /campapp/rad1oconfig.h: -------------------------------------------------------------------------------- 1 | #ifndef F1RMWARE_RAD1OCONFIG_H 2 | #define F1RMWARE_RAD1OCONFIG_H 3 | 4 | void menu_config(void); 5 | 6 | #endif //F1RMWARE_RAD1OCONFIG_H 7 | -------------------------------------------------------------------------------- /campapp/util.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | /**************************************************************************/ 16 | 17 | void msc_menu(void){ 18 | MSCenable(); 19 | lcdPrintln("MSC enabled."); 20 | lcdDisplay(); 21 | getInputWaitRelease(); 22 | getInputWait(); 23 | lcdPrintln("disconnect"); 24 | lcdDisplay(); 25 | MSCdisable(); 26 | fsReInit(); 27 | getInputWaitRelease(); 28 | } 29 | 30 | void tick_alive(void){ 31 | static int foo=0; 32 | 33 | if(GLOBAL(alivechk)==0) 34 | return; 35 | 36 | if(foo++>500/SYSTICKSPEED){ 37 | foo=0; 38 | TOGGLE(LED2); 39 | }; 40 | return; 41 | } 42 | 43 | //# MENU image display_image 44 | void t_img(void){ 45 | char fname[FLEN]; 46 | selectFile(fname, "LCD"); 47 | lcdShowImageFile(fname); 48 | getInputWait(); 49 | } 50 | 51 | //# MENU image play_animation 52 | void t_ani(void){ 53 | char fname[FLEN]; 54 | selectFile(fname, "AN1"); 55 | lcdShowAnim(fname); 56 | } 57 | 58 | void infoscreen(); 59 | //# MENU INFO 60 | void night(void){ 61 | infoscreen(); 62 | } 63 | -------------------------------------------------------------------------------- /ccccmaze/Makefile: -------------------------------------------------------------------------------- 1 | APP=ccccmaze 2 | 3 | # our code 4 | OBJS = 5 | OBJS += ../rad1olib/setup.o 6 | OBJS += ../r0ketlib/display.o 7 | OBJS += ../r0ketlib/render.o 8 | OBJS += ../rad1olib/sbrk.o 9 | OBJS += ../r0ketlib/fonts/smallfonts.o 10 | OBJS += ../r0ketlib/fonts/orbitron14.o 11 | OBJS += ../r0ketlib/fonts/ubuntu18.o 12 | OBJS += ../r0ketlib/decoder.o 13 | OBJS += ../r0ketlib/print.o 14 | OBJS += ../r0ketlib/itoa.o 15 | OBJS += ../r0ketlib/keyin.o 16 | OBJS += ../r0ketlib/menu.o 17 | OBJS += ../rad1olib/spi-flash.o 18 | OBJS += ../rad1olib/assert.o 19 | OBJS += ../rad1olib/systick.o 20 | OBJS += ../hackrf-old/firmware/common/si5351c.o 21 | OBJS += ../fatfs/diskio.o 22 | OBJS += ../fatfs/ff.o 23 | OBJS += ../r0ketlib/select.o 24 | OBJS += ../r0ketlib/idle.o 25 | OBJS += ../r0ketlib/fs_util.o 26 | OBJS += ../r0ketlib/execute.o 27 | OBJS += ../r0ketlib/config.o 28 | OBJS += ../r0ketlib/stringin.o 29 | OBJS += ../r0ketlib/colorin.o 30 | OBJS += ../r0ketlib/random.o 31 | OBJS += ../r0ketlib/image.o 32 | OBJS += ../r0ketlib/night.o 33 | OBJS += ../rad1olib/light_ws2812_cortex.o 34 | OBJS += ../rad1olib/battery.o 35 | OBJS += ../rad1olib/draw.o 36 | 37 | OBJS += ../hackrf-old/firmware/common/hackrf_core.o 38 | 39 | OBJS += modules/navigate/display.o 40 | OBJS += modules/navigate/initialize.o 41 | OBJS += modules/navigate/maze.o 42 | OBJS += modules/navigate/room.o 43 | SRCS = $(wildcard *.c) 44 | SOBJS = $(foreach mod,$(SRCS),$(subst .c,.o,$(mod))) 45 | 46 | OBJS += $(SOBJS) 47 | 48 | CFLAGS=-Wno-unused-variable -DRAD1O -DLPC43XX_M4 49 | CFLAGS+=-I../hackrf-old/firmware/common 50 | 51 | LIBS += -lm 52 | 53 | LDFLAGS += --specs=nosys.specs 54 | 55 | LDSCRIPT=../ld/app.ld 56 | RPATH=.. 57 | include ../Makefile.inc 58 | 59 | main.o: main.gen 60 | 61 | main.gen: $(SRCS) 62 | ../tools/mkfirmware.pl $(SRCS) > main.gen 63 | 64 | clean:: 65 | $(RM) main.gen 66 | 67 | install:: 68 | mount /dev/$(shell dmesg | tail -n 10| grep '/1.50 MiB' | sed 's|.*\[||;s|].*||') /mnt 69 | cp ccccmaze.b1n /mnt 70 | rsync story/*.csm /mnt 71 | umount /mnt 72 | -------------------------------------------------------------------------------- /ccccmaze/Readme.md: -------------------------------------------------------------------------------- 1 | # a text andventure 2 | 3 | there was no high-level radio-library so to build something here i wrote this interactive 'game' 4 | 5 | # todo 6 | 7 | - write a Software Requirement Specification 8 | - define a better storage 9 | - comment and fix 10 | - release other binaries! 11 | - add stories or mazes 12 | 13 | same license bla 14 | 15 | # build 16 | 17 | make 18 | 19 | # install 20 | 21 | make install 22 | 23 | (copy b1n + csm file to flash) 24 | 25 | # change 26 | 27 | edit csm files: 28 | 29 | - first 16 bytes: links top bottom left right 30 | - rest: text with blanks 31 | -------------------------------------------------------------------------------- /ccccmaze/constants.h: -------------------------------------------------------------------------------- 1 | // 30x20? 2 | #define MAX_ROOM_SIZE 1024 3 | #define RESTXTX 19 4 | #define RESTXTY 16 5 | #define MAZE_STATE_MAZE 0 6 | #define MAZE_STATE_ROOM 1 7 | -------------------------------------------------------------------------------- /ccccmaze/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of rad1o 3 | * 4 | */ 5 | 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | 18 | #include 19 | 20 | #include "main.gen" 21 | 22 | void sys_tick_handler(void){ 23 | incTimer(); 24 | generated_tick(); 25 | }; 26 | 27 | int main(void) { 28 | cpu_clock_init(); /* CPU Clock is now 104 MHz */ 29 | systickInit(); 30 | 31 | // cpu_clock_set(204); 32 | 33 | SETUPgout(EN_VDD); 34 | SETUPgout(MIXER_EN); 35 | SETUPgout(MIC_AMP_DIS); 36 | 37 | SETUPgout(LED1); 38 | SETUPgout(LED2); 39 | SETUPgout(LED3); 40 | SETUPgout(LED4); 41 | 42 | inputInit(); 43 | lcdInit(); 44 | fsInit(); 45 | lcdFill(0xff); 46 | readConfig(); 47 | 48 | generated_init(); 49 | 50 | while(1){ 51 | // if(getInput()){ 52 | handleMenu(&menu_main); 53 | getInputWaitRelease(); 54 | // }; 55 | // fancyNickname(); 56 | }; 57 | return 0; 58 | } 59 | -------------------------------------------------------------------------------- /ccccmaze/modules/navigate/display.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | void displayBottomBar(bool maze_edge){ 5 | if ( maze_edge ) { 6 | lcdPrint(" -----------------"); 7 | } else { 8 | lcdPrint(" \\/\\/\\/\\/\\/\\/\\/\\/"); 9 | } 10 | // display position x/y 11 | lcdDisplay(); 12 | } 13 | void displayRow(const char * text){ 14 | lcdPrint(text); 15 | lcdPrintln(""); 16 | } 17 | void displayToast(const char * text){ 18 | lcdPrintln(""); 19 | lcdPrint("info:"); 20 | lcdPrint(" "); 21 | lcdPrint(text); 22 | lcdPrintln(""); 23 | } 24 | 25 | void displayTopBar(bool maze_edge, const char * info_a, const char * info_b){ 26 | lcdClear(); 27 | 28 | if ( maze_edge ) { 29 | lcdPrint(" ------------"); 30 | } else { 31 | lcdPrint(" ^^^^^^^^^^^^"); 32 | } 33 | lcdPrint(info_a); 34 | lcdPrint(" "); 35 | lcdPrint(info_b); 36 | lcdPrintln(""); 37 | 38 | } 39 | -------------------------------------------------------------------------------- /ccccmaze/modules/navigate/display.h: -------------------------------------------------------------------------------- 1 | void displayBottomBar(bool maze_edge); 2 | void displayToast(const char * text); 3 | void displayTopBar(bool maze_edge, const char * info_a, const char * info_b); 4 | void displayRow(const char * text); 5 | -------------------------------------------------------------------------------- /ccccmaze/modules/navigate/initialize.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | /** 6 | * setup globals 7 | */ 8 | void initialize(application_t *app){ 9 | //todo: memset(maze,NULL,256*256) 10 | memset((void *) &app->screen_text, 0, sizeof(app->screen_text)); 11 | memset((void *) &app->current_cell, 0, sizeof(app->current_cell)); 12 | snprintf(app->namespace_name,sizeof(app->namespace_name),"cm"); 13 | snprintf(app->maze_position_x,sizeof(app->maze_position_x),"00"); 14 | snprintf(app->maze_position_y,sizeof(app->maze_position_y),"00"); 15 | snprintf(app->link_up,sizeof(app->link_up),"%s","----"); 16 | snprintf(app->link_down,sizeof(app->link_down),"%s","0001"); 17 | snprintf(app->link_left,sizeof(app->link_left),"%s","----"); 18 | snprintf(app->link_right,sizeof(app->link_right),"%s","0100"); 19 | app->state = MAZE_STATE_MAZE; 20 | } 21 | -------------------------------------------------------------------------------- /ccccmaze/modules/navigate/initialize.h: -------------------------------------------------------------------------------- 1 | #include 2 | void initialize(application_t *app); 3 | -------------------------------------------------------------------------------- /ccccmaze/modules/navigate/maze.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void mazeEvent(application_t *app,int key_event); 4 | void mazeLoad(application_t *app); 5 | void mazeMove(application_t *app,int key_event); 6 | void mazeShow(application_t *app); 7 | -------------------------------------------------------------------------------- /ccccmaze/modules/navigate/room.h: -------------------------------------------------------------------------------- 1 | #include "../types/application.h" 2 | void roomEvent(application_t *app, const int key_event); 3 | void roomLoad(application_t *app); 4 | void roomLeave(application_t *app); 5 | -------------------------------------------------------------------------------- /ccccmaze/modules/types/application.h: -------------------------------------------------------------------------------- 1 | #ifndef __application_h_ 2 | #define __application_h_ 3 | 4 | #include "../../constants.h" 5 | 6 | typedef struct { 7 | char maze_position_x[3]; 8 | char maze_position_y[3]; 9 | char link_up[5]; 10 | char link_down[5]; 11 | char link_left[5]; 12 | char link_right[5]; 13 | char namespace_name[3]; 14 | int state; 15 | char current_cell[MAX_ROOM_SIZE + 1]; 16 | char screen_text[MAX_ROOM_SIZE + 1]; 17 | } application_t; 18 | #endif 19 | -------------------------------------------------------------------------------- /ccccmaze/navigate.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // separation of code....change this? 4 | #include 5 | #include 6 | #include 7 | #include 8 | //# MENU level-0 9 | void level_0_menu(){ 10 | 11 | getInputWaitRelease(); 12 | application_t app; 13 | app.state=1; 14 | initialize(&app); 15 | 16 | while(1){ 17 | mazeShow(&app); 18 | mazeEvent(&app,getInput()); 19 | getInputWaitRelease(); 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0000.cfg: -------------------------------------------------------------------------------- 1 | ------------0100 2 | 3 | 4 | day0 5 | crash 6 | realize why you are 7 | enjoy 8 | day1 9 | 10 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0001.cfg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/ccccmaze/story/0/cm0001.cfg -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0002.cfg: -------------------------------------------------------------------------------- 1 | u d l r 2 | ................ 3 | ---------------- 4 | you are in a trap 5 | shutdown to retry -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0003.cfg: -------------------------------------------------------------------------------- 1 | NIFvNy 2 | YI1p 3 | 8Pj y 4 | 6kB 5 | uld 6 | X2r 7 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm000F.cfg: -------------------------------------------------------------------------------- 1 | play with rad1o -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0100.cfg: -------------------------------------------------------------------------------- 1 | ----01010000---- 2 | 3 | try to move down -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0101.cfg: -------------------------------------------------------------------------------- 1 | 0100010200010201 2 | 3 | avoid right -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0102.cfg: -------------------------------------------------------------------------------- 1 | lkY4MnLGqGbqJLURMjbm 2 | In2WmawrEKynIvI3bUtF 3 | LIyUg1H2FZuGm9lp3m35 4 | IkpiKdEvKQZ4ctgevdWV 5 | DcadP16Je7gDyHhVXVCJ 6 | QGd7fH7gV6R13QFk4Jfe 7 | 0ukP5cxaYgrsd9lnCExT 8 | LdRSdKVpur6PlN7ZCNd1 9 | UNFprwGxz2KMvfpg6Lif 10 | oXTcy93K7oNjbK9w77Hx 11 | ueu0Lg6lJOOHDLQSruAC 12 | PSeOqsVmsE6TKy6EzWEK 13 | oOqiIuHyNTESSOlzBCGw 14 | JOReHm1KWMEyDsGkg4ay 15 | CDPo4LneL8OBgBehMLQZ 16 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0103.cfg: -------------------------------------------------------------------------------- 1 | HcCy8DWDeVJmydro9vog 2 | WcUIfR14BjcvIlSUDPLM 3 | ULNEweaV1nfbylMhKVeU 4 | piL1bdiMLUlu5nzNiAFm 5 | PHPopcfVNGSOkS1Q6js8 6 | l5C4Lk5FBKhQfIy8pNKZ 7 | HsSC6IIGCSf7m0BpDtv7 8 | rzAAEdWC1xGrsExM29zf 9 | BStXUynfdnpsUj8IhIt1 10 | pNpvG80fQVIygFiOqbBC 11 | L2SQthZk5PI2R6ZyjmHb 12 | SuwfSARSrcIDj8ACs77r 13 | IAoDuwvFGLF1ynoMwPtf 14 | vALUQdrH3WdN8TSYlsIh 15 | AYcwfFbbPhyHDfjvhZNK 16 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0200.cfg: -------------------------------------------------------------------------------- 1 | yTxcGOsNvcXLijctmgi9 2 | FN5DFf3rdhAjqfOLePsL 3 | UUbYqmI5gTdryGf0bTvB 4 | lbVzvhmjCbBvXLZaefw7 5 | Gf3UUxw8piYnv0Ddnw0j 6 | wmDvz4TMSm6ykqYPg2n7 7 | 8mtGuGXWU0oPVgSbCG2D 8 | Mfb0t3rob1QvA48UkU9z 9 | ZtoIpRNMVdxyosx53wfS 10 | IyqznuW914i3o4qqc3kP 11 | KB968K14orjdQP4Zt2un 12 | ruJHZpx7iyrP3Pmhg7JH 13 | ufcuXhGjNFTBlutFbUs8 14 | hToABdvgebpZ3qqYAa3o 15 | TB43xKZflgydbnhZUX80 16 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0201.cfg: -------------------------------------------------------------------------------- 1 | 0001----0101---- 2 | 3 | you have been 4 | warned 5 | but you found 6 | a coin of gold -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0202.cfg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | you won 7 | 8 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0203.cfg: -------------------------------------------------------------------------------- 1 | PdQ0TyPUyN0GIzqH650k 2 | DQlCuviay6T93Z0uiLQc 3 | mQLjNaj3g1K60KR571sa 4 | fvqmpStD9ewlIFl1Gkqa 5 | wHNBNbDp3hv6yhu1PcWn 6 | Qa7u2aG2PfPC9jvY0AYu 7 | p0lJfhzRdOnEtb8cHYqB 8 | fQx0ltAbQ8vy3sSSF5xi 9 | IZHQesxiifdxFGUYSqgv 10 | RYOjZWZ9B5dQacCn2CWS 11 | OuzcczB7thEqROTNj2pv 12 | JvUa540mruvQwc2BRCWO 13 | t39YFK1ukG92ZBUbq5bH 14 | BICZRQOJI1dB0rxA2KOu 15 | jjjSIJPWogMKm9w5dxPH 16 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0300.cfg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | move stuff 8 | build camp 9 | talk stuff 10 | see food and drinks 11 | discover people 12 | learn 13 | fun 14 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0301.cfg: -------------------------------------------------------------------------------- 1 | 5exFL4jiNOJ2Cxq8LPGE 2 | 14LxayAmLbGBF1VtndhV 3 | PkJEiLShDdOBPJLCKSWV 4 | OTtWVsbB71KEFt77bMeE 5 | ZepRkVNbGGnGjso7A5wk 6 | oLHsCqrSV8NVSlOaItjW 7 | U3jDVBSXz24Nw7tNYzBF 8 | hoMUw4AtfIO9pnEcMINZ 9 | y4cYCMmWnsqaa1kSLoxX 10 | khJ8TgoCZMDt4yvMR079 11 | qqHqpajb38dVZceMnPLW 12 | Jrr9iZcKeFalBFbA1dWb 13 | sHzUUBiZ294pSYHwvsVI 14 | ws31Q977mNC3Saez0RaZ 15 | RegnTl1El3yBzK6kOtQK 16 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0302.cfg: -------------------------------------------------------------------------------- 1 | JtmkQ8cAxHwmmKLJdlTX 2 | 5AwnuRFBP7HoSEs1DM8s 3 | 8DjM9KUvhbS0n1lKb3lC 4 | oHR3uvrRytAtka80Wqg0 5 | ctf9LW3P7pqzjY4rFzi8 6 | Bp5gQVWSE2AeqnE7K0zI 7 | LwE0T1gGJAy2fa46B2gq 8 | mMJdNiv5jeXJcD2HTivO 9 | DlQiyYUKSnjf4XsXmKmd 10 | vCnef47Tkll3nvU73WDB 11 | yeowW5QUA1Wo40BTxmOP 12 | JYqDqQOOLrFR1Lh6fTRO 13 | loJm6jVjFFWYVJ9LWBwZ 14 | 11t9WNJJfd9E51HaIdGD 15 | 384AkvJzTX7dmOgepSYL 16 | -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0303.cfg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | day2 12 | crash 13 | realize why you are 14 | enjoy 15 | day3 -------------------------------------------------------------------------------- /ccccmaze/story/0/cm0400.cfg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | move stuff 7 | build camp 8 | talk stuff 9 | see food and drinks 10 | discover people 11 | learn 12 | fun -------------------------------------------------------------------------------- /ccccmaze/story/cm----.csm: -------------------------------------------------------------------------------- 1 | 0000000000000000 2 | you were struck 3 | by lighting 4 | respawn in BER 5 | 6 | hint: 7 | ++++++++# 8 | ++#+#+#+# 9 | +#++++#+# 10 | +++#+++# 11 | #++ 12 | ++ 13 | +++# 14 | +++++++! 15 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0000.csm: -------------------------------------------------------------------------------- 1 | ----0001----0100 2 | You are on BER 3 | they close the 4 | tent and let you 5 | out into thunder 6 | storm. everyone 7 | is running and 8 | tries to reach 9 | the camp. head 10 | to 0707. beware 11 | of dangers on 12 | the way 13 | good luck -------------------------------------------------------------------------------- /ccccmaze/story/cm0001.csm: -------------------------------------------------------------------------------- 1 | 00000002----0101 2 | thxiYBMUWwSaj48v5 3 | SydluSedtcCrzRCeZ 4 | 073XoBxy6wx4NJ1Xy 5 | DWlcihmRF3l8EYD0u 6 | Vjb95oqwV83X4HyNJ 7 | WirB9NHkjbye2Vup7 8 | WLxkWD0yioIvSycVq 9 | hKtz9MszKbSWTVTdb 10 | J6IUDpkOgTy0HbL1W 11 | 4yOtvMW7wHWTURPSa 12 | Zucywzz3xyLwFulUQ 13 | I0G5BdrSufuvbW1eI 14 | Rrxgqp1aYJW03ok1x 15 | KMbVMx35NCx4TSPPS 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0002.csm: -------------------------------------------------------------------------------- 1 | 00010003----0102 2 | oigqdzWqWrogftTw3 3 | 1iMImYmm2D44uggyj 4 | YtjCaT1fYhCwmtCbB 5 | 7RtuJwsKCm7cYgWVG 6 | O4IjJQ8RqrxBAZB1L 7 | Yms6LEJGUbU5POaZ4 8 | C48BPQIVL5VxgkmZC 9 | xdR3xcmTSwwFu1MCT 10 | 5pHZsVBxIOvRUG14G 11 | RPpg8hCSIJWLsgBuT 12 | tu2tvTevkIE9iQQEK 13 | RafuQzwvhDyKlliYP 14 | 0XYfyx53o7iH3VMUQ 15 | Tbz78sBd15MF8Cwjl 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0003.csm: -------------------------------------------------------------------------------- 1 | 00020004----0103 2 | kVCWXQXZRLfg5jLZx 3 | a7d0zIIrehRe7mwbx 4 | JMj3yo8gYytk854kX 5 | bgE3KMK041U1SLITp 6 | cbc9m4vi5KrpBqyYU 7 | LuUdsKiTeYvI3jSEM 8 | 2hbpnMbafXZghk8ma 9 | HNWk3IMpKBBKp3IFt 10 | AVM9beG5VpBWscXcs 11 | eMJ5uDCxbiFzISjzU 12 | HST1NfgFy3LtwZWKT 13 | dd0ZbjPA3VaTwle67 14 | xnf7xTbFwHehC0LKD 15 | vWfnFQWx7T2iXlkd8 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0004.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0005.csm: -------------------------------------------------------------------------------- 1 | 00040006----0105 2 | Vw4ECiSQ9hBXNFLAg 3 | pcHDvXtbgnespdIIM 4 | G60f8yuclOCk1e9xo 5 | GgQ4FR2D4VflNaJ40 6 | vGLMWF9ayQFMCbUBh 7 | AcJ84E1Vyrg1a0L4A 8 | OoqM0R74nebE5paUZ 9 | qIVnsM3OKCsz5vzrv 10 | D7rt8UK6PjyLO2gvK 11 | PCjV6GamjIqSWacx5 12 | N6KiIzc1nia8YFUEI 13 | NPkkxPdj9PzzTFWGh 14 | fXp9rqhqF0gd30rRa 15 | H4TwhWLJblpMmXjCx 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0006.csm: -------------------------------------------------------------------------------- 1 | 00050007----0106 2 | rvGVuxw5qxSpxrhnZ 3 | h1AnWJaI52K3El4VT 4 | HK0elATwF5x4JoIlY 5 | iZDTt9fS7zDfnMYX7 6 | aym5vmPCSZzXTHVul 7 | XgGSVX6IuHXvDHFGy 8 | m89fAafuSy5PCrPpH 9 | KwfZSAmppSYndCFK0 10 | 1u6o794w6uq852cfi 11 | bM88WGC21CEOeoqmt 12 | 7zKEorpEHhzobtC0A 13 | djVPgezEpzmasDqIc 14 | ofOkqpwS9r2cl4OV3 15 | mJIzQBdXuZw8tP0JW 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0007.csm: -------------------------------------------------------------------------------- 1 | 0006--------0107 2 | V5yslxbc32EW2vueI 3 | YzxkBs0qPKqRjNvyG 4 | S4QTcJPSn5WREPdAl 5 | Rdt4od890p7YugPDZ 6 | yVJeELBNNTXRg4oOx 7 | hXe9K7sj2zx8P3nWH 8 | sj9WQd3TXc1TPugtv 9 | oAxmJLzhLfvZmWO3u 10 | k6Mf7zci2H0R6RMhY 11 | y3FB2KrkF8gbjgbEn 12 | I2rPTu90JwdqwKnuI 13 | 9rFPHIrIkj6j0opPB 14 | pn81izfbiVTFU2GuB 15 | jZgk8HGIIyrTQPgn3 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0100.csm: -------------------------------------------------------------------------------- 1 | ----010100000200 2 | PUjcxH6Bzu9wqXniM 3 | thmupBvIxAYyxxqHn 4 | M8QZZf8swVv283AnT 5 | mRTj6QihNHZ47IhpH 6 | QvvRqJlciQ4NJ0Izx 7 | VwMQ0ZJCpSYtwOQws 8 | IxXALQ7ZdzxwwF8EP 9 | Aiz5csu6YyhtSsQXd 10 | DRhchP7oaBeJvE6WS 11 | 6UWqLNyeqHXDrOf5t 12 | DA4vOc2D7zZ7HNLse 13 | gGLRc2QD2hUikriPk 14 | E1Enb0qXZNI6kS9te 15 | KkCi2LfysN9abzezx 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0101.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | VpNbQNK5YQRXfd95q 3 | Lj6jMJ6PijqgAb3rR 4 | 2oEWuyo73AUMMxzy9 5 | oMwdtPQDXntwd7THM 6 | 1A47YBFXnmuMjGEW9 7 | axtQANroDKXVTckpB 8 | f07MRkkCziCfo40J7 9 | fNcXyVYSReVycZ0vv 10 | KuxYUOFINjClpgLDJ 11 | csxeDBC6C7H3wrSjW 12 | fmPv0CItEa15V4iOW 13 | CGR6SJfULNawuy4Pq 14 | jOC6rUsU3LPmR2TKh 15 | dsZbWdJXPQsJkSxW6 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0102.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0103.csm: -------------------------------------------------------------------------------- 1 | 0102010400030203 2 | zfsOQAC594VJJ9O04 3 | zhhjVhIoRcProWM0v 4 | QNzj1iyNRTYuD5OxT 5 | cs3MikiHjUklPss7K 6 | PtvXRYeWMN525pWPD 7 | Id5myIPiDgdGZuDWt 8 | F2cQJSuYjYL766AJy 9 | 4y1UAfxJl9FmnDp5F 10 | 62pqSqY5vfwKtMrVi 11 | UV8F2lVpj8t9XFrSs 12 | sJlFwI9BiPgkJVsnM 13 | WCW6cTsTuI6LTmdbt 14 | UljepGYwUAkYmA6ad 15 | HD115OduOtq6Bb0gA 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0104.csm: -------------------------------------------------------------------------------- 1 | 0103010500040204 2 | PyvgQRsyq401DM2Lt 3 | IEOzr4Rp2yQqFMuwU 4 | gp8AEmAbgnvrWkQzQ 5 | mqvMPDUIsg1XIZxc1 6 | Y6OUiMudN04eSlCaT 7 | gKSuoJWRahKwrunMI 8 | vAyrxiVHQfwTL8UZ6 9 | gxtsvLPHxI7JkUfeQ 10 | 8AKlHqZwGVFhOHPeA 11 | p38kF5juFhVoRgR9u 12 | JPMZmYo3QdAzFOZAz 13 | IXhtFdV0qYMJ5SCNO 14 | q8IScVfFcotjKG1Wj 15 | XKaz9lvMYkhi9BGki 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0105.csm: -------------------------------------------------------------------------------- 1 | 0104010600050205 2 | vjDjzxRPqN9LAFBKw 3 | bIWmWXTMaPbHQmGLB 4 | lirn2GFAgB7z7G0oa 5 | Xma1ed9cSjmff5jYf 6 | 3doeUX6Vb6tbTW27p 7 | TUBRpqiRhbSzgbtOi 8 | if1TP2gHiHi2nv1G7 9 | TGlcVTJKsBg7OBlw1 10 | AGXKmLkP96AvwGZ9z 11 | TQaOMak2ngcqyVLZl 12 | eUBuSXckYUcWRzRgY 13 | Eg2rFWEGI8D36Cegd 14 | OC6rCzpM3ELd4Y0OI 15 | ri5idlvPOx22Cynqe 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0106.csm: -------------------------------------------------------------------------------- 1 | 0105010700060206 2 | 02XzXKvydsYTgJTFr 3 | IRUoKpxlNTosm1DPN 4 | 2nYpfJmvZZDao751Q 5 | 8daNWFlH3dlV0RCvm 6 | DQ8VW5G2y7ZWOzwll 7 | iV3jo0rUfqeWU612L 8 | GFYCcCvCpH0oAAu80 9 | bTuhNCRxtsxx5KPZL 10 | HoD782nzlPiVa1uqP 11 | l3h2SIvD32uLiU0vS 12 | w4SHl1U0LeeQzCvWv 13 | dwbHfqJU51Z2Fo6IR 14 | aWSoS73QCNIx8ZbuQ 15 | UAKRX0AE9DpfOEME5 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0107.csm: -------------------------------------------------------------------------------- 1 | 0106----00070207 2 | hJgyhzGf6s7pKlmiK 3 | 8DBgoKfqMK9X9lhbR 4 | 9JoPv2mKebznluxdS 5 | JaDKtuHSCHovffzpS 6 | SKeRPe9wL0ByrQTkU 7 | mcuqoxEgxaqRaY7LC 8 | GJoYY7OhFzvkacJT7 9 | JTAamLwYJkwGjW6eg 10 | U7nOovuKJhD9i3Mzp 11 | FZSuQmCTWJbKmcCgf 12 | xpjkudnbihyfN3JrA 13 | juuqMP86DBGGSbnib 14 | 6kmxOcGrzMK3UrMLm 15 | xQsLLo1RZs66ArTww 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0200.csm: -------------------------------------------------------------------------------- 1 | ----020101000300 2 | lMm2fB9cPdoqXK0wL 3 | oTgqAG6Rf9WIrJGuA 4 | 6RZzB9qlcINaGb08Y 5 | IISyRe0iwqBII7bzz 6 | iLANLUKEeTXPKWwBs 7 | UTa2ccHfL1H26WDQm 8 | SDhjPhwjLu2faUiJV 9 | bGcsRjTTGOEVjzpT0 10 | OtTT8UTAS5SJgYRNr 11 | RQsvygNRhm5Ez6sHV 12 | lxjyha1cmu53XD9ms 13 | R8oGNYZIJL7oUxnc8 14 | r49AHMy6nZ8pHDGxm 15 | l2BmjJinyJyd556A0 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0201.csm: -------------------------------------------------------------------------------- 1 | 0200020201010301 2 | WmYq847j52sRSR68s 3 | hGbO1vH75vZuMnmvt 4 | Jm8WuYoEtlfMr2r5C 5 | o0d7VXJD6XGOhYq9c 6 | 0RF7TJe1X1O573cmI 7 | QckYnUHFDLFi6jdcL 8 | f9m9CWWpcyv8c3OzQ 9 | It36WkXT9B8UHLH7L 10 | fnSSclgnVRGeHfiIB 11 | 7Zhs8dRpIFaYjkZFA 12 | AxrOOx5X04p3URbRO 13 | MUmss2VqPKPWzGMCR 14 | 85ZUfHhgisQdM5qRQ 15 | RUBwZx8jSQusNCEoG 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0202.csm: -------------------------------------------------------------------------------- 1 | 0201020301020302 2 | IbBvPVpcvpjhlvDiu 3 | TVasZ8nEDrIHngN1D 4 | rtdMEON01G7G2bCNW 5 | JP6ZMAgh1NjdhGfio 6 | uByT9KBTAX8miLeyi 7 | LDAlOCLwbWZLou2UR 8 | 3Y3mzHyV1heNFOv8t 9 | mMQNENR6KZTYe6crh 10 | cxRZHlihY2C6QnKE5 11 | JwelTH6pNKXOHrZiW 12 | TUUML0tqeZ76ZFYo8 13 | jqBdp8gfkge7vlMXa 14 | 3bhknB0IS1DodBIHi 15 | 11gFXMEHyA5u6aTpt 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0203.csm: -------------------------------------------------------------------------------- 1 | 0202020401030303 2 | PYalAGwkk6Hb09FUV 3 | CMDqAQXhybKMg6lpl 4 | SZUzX1fEzAT0T31VI 5 | MYD3GXkF8fdvx6Mf4 6 | T5cKpF8jlIEOQ4mFU 7 | qubb6SvUCY2Zw0YHs 8 | V5Uhda0pyiQlSnsMK 9 | LkDJ9x9nl0QCcpShg 10 | 52g1QjRPonjwl45Bp 11 | 6Pt233lASDATuRZLB 12 | dsbDc3OTs6ccLMupY 13 | wo0aM5t16awKNQfio 14 | OJNsv2bbh0cJZhjP8 15 | Z7gvRvoX4MvpJNAG7 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0204.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0205.csm: -------------------------------------------------------------------------------- 1 | 0204020601050305 2 | cAbCKkxApkGR8Ka8A 3 | gnWQWZIx7Q8S4cX84 4 | 3p9L3WWfOLfPjxP7d 5 | oy6bZ1e2OEfOqLXO5 6 | FQGGC7zIijYUohrAj 7 | b2T8UdguTQhj4HYj1 8 | XvR0MzKIdeyAnyYPu 9 | B0VWjf7a8xcjLO2Ly 10 | fuXIpo3aXIy5grgKh 11 | T1NEMtgdY747bSx5n 12 | S4kl2OFGhZpIRVAFb 13 | hgL3m5O8sKUwZfMVM 14 | B3tHCYsW2cBgJqxCh 15 | RwT0AaJLkKIHAOUya 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0206.csm: -------------------------------------------------------------------------------- 1 | 0205020701060306 2 | suoelmT6lUUwFYPCS 3 | mY5ak1uwGxXdYf3ai 4 | AcEvHivgehoxww0iL 5 | IvQFg8UGVjNEpSmnY 6 | VDzsPgYvntyVW02tj 7 | vUBpcCl5gvltXmihD 8 | RXu48W3o5dDXFhG4V 9 | wvjrQC1CzUuhR05pS 10 | 6TKOnd7DNLlTNmZRi 11 | pkSck2MKeZlkEp5Mx 12 | Q6D2KBIDQQQl9zchl 13 | mqquEc9LUAE0YWxRx 14 | gGqAljY8mRc9ENeYq 15 | 03VyBdhGmpFjTvac7 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0207.csm: -------------------------------------------------------------------------------- 1 | 0206----01070307 2 | qigFPcYUTvxSoWRit 3 | A6Aj95yPj2DslLZbb 4 | inCB2yLoGaIkD1DGR 5 | ajrh2D6oFEtxz5Ow7 6 | kIzrQas7KvvgEhmo7 7 | 6qC5g0MDNZM2lHmep 8 | K0XoxciSYmfczAqXP 9 | KunWENT2cdQNrh862 10 | boAKArqCsfNPY8li7 11 | 4Ms7kXNP6YvKWxBMe 12 | 1hSdI3M6QcWLfMyl2 13 | h7LyKa8gVt30nbjHP 14 | mdKYxgIrZoAC6hN2m 15 | 4gXVpOCNWM06X9REg 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0300.csm: -------------------------------------------------------------------------------- 1 | ----030102000400 2 | EjTBQt6KCLPa0CmzT 3 | c4o1h0VnAlzhYpQev 4 | U5QwWChfvYkErQKUb 5 | 4RXees2BwmEzcqQIQ 6 | 0ME48ULEbri4SNZzH 7 | q8chG3byLxGZg0ivM 8 | babDbKUToeoqIck07 9 | U7fHbC2SZuGzgva7S 10 | bfa5m1xMRgktdohP5 11 | 8ackrV7RMh5M8DfV2 12 | esC2EftDd4gM3ybFJ 13 | Gc6mLlutlqF2Zb8is 14 | YdD6oEVtTSfPCTlAt 15 | 5Slo47i2BenlLrnIe 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0301.csm: -------------------------------------------------------------------------------- 1 | 0300030202010401 2 | GPsi7EwQABVK6gSHY 3 | gDEPDwkrxGJoGlGxJ 4 | EhLgUQEs9utOjIWfH 5 | 9g5GVuz3Hb3yuna1U 6 | PX6pCNCbq5Obt0mLt 7 | 6c9bXjk4p5EwU2O4K 8 | zrlQQS11deRtAlkeO 9 | 24HI3cRdXmwy2gqtk 10 | f9Bt9MAFosC5KNOQN 11 | ijf5ZVTU3my3xrddW 12 | j5eEQOEaGNcVxD2Qu 13 | 2Wc2KxzeYqRUhwWXp 14 | 45jjf54bckZny5PsA 15 | YKnUqekVT2WNObQuY 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0302.csm: -------------------------------------------------------------------------------- 1 | 0301030302020402 2 | aE3aweMbnNVM9yfXW 3 | tUmVGVyqfyOBb7nCK 4 | LWlcP4WJGdqQfe0e8 5 | EYfGSM4VaxrPC8yMM 6 | KpKFw9WMPV0ncy9qH 7 | TiLKkobmiJTlVuVbM 8 | TF46hHn3tjRdFZ99T 9 | LG3iNSZnkpS5mfMnQ 10 | vJkq2ZwxZI0sg5ik1 11 | Z3RSHZWoaqryppFgu 12 | XSq6wBSIaZFt4kchJ 13 | UVWcPO9Ugq5DX8Fhf 14 | GIV5U08oNvGJJ48vh 15 | 0LUkMR8NWt2CC1htI 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0303.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0304.csm: -------------------------------------------------------------------------------- 1 | 0303030502040404 2 | eMsDRTkeTwO7GDvI7 3 | SF5aAT0SNVYarj9m4 4 | HrCYV9EgVJhMQHkhi 5 | tWv5r5kkqgjkPvN4S 6 | Ok5t98qIXXipXDNMf 7 | l66Y73hSXHbcRYoTL 8 | OxNh81EcDW96qqZPn 9 | tEM4mbkdIYzu6YvPJ 10 | b7xIUuOMGxVSUEllO 11 | kzAMEtScp1e2bfBqa 12 | LNSRr9yEKKAeXNxLe 13 | vOsGF4Yoqsg0eIiQM 14 | wNT63NCjch5k1HlPN 15 | Grq7Efa8HSAanRBHk 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0305.csm: -------------------------------------------------------------------------------- 1 | 0304030602050405 2 | zfVyOtDb9Z1g92OFL 3 | pMisV0nTVDru6o78T 4 | E1oCkDhrSZevrXpdy 5 | nESElvws8h50Il191 6 | qFTPrDpSlouk0YwRs 7 | HR0GhEZN47uEXpVH8 8 | LAs4aANh8W7Pd49NS 9 | hzlMjgGgAGS6GAOmd 10 | UbXJxY2GlGPpEshi9 11 | 6WaCICss65kHObjBO 12 | OUZU0rcFFppOtlXpO 13 | TEAeYN3451NJr6zWF 14 | vkzl8yxin1ZmGn918 15 | HwWqYmmHffdLLZhUw 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0306.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0307.csm: -------------------------------------------------------------------------------- 1 | 0306----02070407 2 | WRFGUpLfdNemSFjBt 3 | bW5tOKZP6IQHlH89K 4 | MpPJop7X4soEE3B9A 5 | b2PSiaJpyWlQnDxQr 6 | xsG5n2CMsA3oqQQaR 7 | aqtAeywQWK1mbAMIb 8 | hB0E6Kyj7lXUMOyTM 9 | 7HrXIpiLSNNzeZgU5 10 | qkRILNoimRzhVSiwK 11 | KQca2IHYGxGmLayQt 12 | 3dZRNTbvU4IguQBXr 13 | IBiyZXP7luZApdPCL 14 | jPf6ofZMYLNKvgZEm 15 | M2OQmvsv7WNe7aqXS 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0400.csm: -------------------------------------------------------------------------------- 1 | ----040103000500 2 | 1BCMtwIHXWaIRZMr8 3 | Qec5I36fJA56Dc9CP 4 | 4glEakcHhoqxrktIk 5 | 3JG5IZXcMKgQfDQn3 6 | qgszloCp8RziBF0Wi 7 | zGmwKLWN5O3AJRBDL 8 | 26HXB3gDuTmOUYDH1 9 | odegaZzjwq3P2IIO3 10 | NEsmgeP9OjColRGHg 11 | MFrE3mCfvXgbauCVZ 12 | lxNtGpo7EYxRDwIMP 13 | S2lqSBV02kWfoVotp 14 | Xos9PMHmDksGRBCbz 15 | aalLPznU1vi7Fi4c2 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0401.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0402.csm: -------------------------------------------------------------------------------- 1 | 0401040303020502 2 | b3nV8ULcbWcwVytB6 3 | 9AHk9eSzeS7LF6ch3 4 | 1zwmspBMiwPpygBaw 5 | L9KEU0u1aOjx9FoEm 6 | wzX0hRGdqlm4rD2rJ 7 | ub1hWfmvFWCo91Y5p 8 | XS5JzstTtl3PmZIRl 9 | z6KLGbPNky6wVlpsI 10 | z63YG9z17RKXmye6y 11 | yxnswWXkIjEB6LL13 12 | DPfrmpW9fI3sTxbEg 13 | esgi9a9hlQg1DAfaC 14 | M2ADESGbhUtCnr9IB 15 | BnAwLJCT5qH08vSQt 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0403.csm: -------------------------------------------------------------------------------- 1 | 0402040403030503 2 | zAswCe2iQv5NTWCjP 3 | HyG1Bmd0Oh7zXUEiB 4 | rTITRK2pnrUuEi9VD 5 | NxTq4t47oRzLqtoog 6 | hNOTlYgwb6MKv7kme 7 | xzKHBR9wBOeuLSlgu 8 | 399SDLIJbqqZHMACS 9 | JP66ySM4sUkeUmz9b 10 | d95CkwEhPakTCE0Vx 11 | qsyIyRmT5LetY5C8H 12 | bYbcXAy1okORqU10u 13 | tC8xxktredGRNcCt5 14 | pgwM0UfHGaRkrCPKM 15 | 1iRgW0c6lxTgpWHFw 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0404.csm: -------------------------------------------------------------------------------- 1 | 0403040503040504 2 | OJaXXT2XUNrTNzFfU 3 | 0pVg1OORK7M5ERfeZ 4 | VoaU8FifehuqTnPpG 5 | z8NPNQn6PPxNx0QiE 6 | WBTXBI3aHF7d549io 7 | nFXuGIKbWORWaAcif 8 | Ut1u68IIV1qiM1F9v 9 | Uc84n2nTLX0w7hoex 10 | mtaEKyoE1SAZSAxNM 11 | qU5raF9L5CA0mNkNI 12 | C9REynGvXonPlAfek 13 | jdrhyAbouR2o1zQ0G 14 | NgPVW2ME2w3pQt0w8 15 | YgJOxjXoNtIv1zg5w 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0405.csm: -------------------------------------------------------------------------------- 1 | 0404040603050505 2 | rdVyHqMnSTQWzToxX 3 | b9KbHCuEnTxpIfoFI 4 | HkQWZgJiZ9brugVbz 5 | OF5g0r8WMMDgEvBl6 6 | KzbIrtvtPFJpwRJzk 7 | 0s0wR4rEcZAsvT6cy 8 | tSW39MKZbFRtdFPIv 9 | QVCLiORKGe4SlyHYR 10 | iFaLGCxbQNahEKglL 11 | kvp4MLvaYhi0s9RbH 12 | bQ7P6fIOhWKcXg4n7 13 | ZqRT9GfhY2U4bap3P 14 | SL5LTQ7dyeYKJt2pu 15 | 8ZfTCjDT2Tv5XN5MY 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0406.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0407.csm: -------------------------------------------------------------------------------- 1 | 0406----03070507 2 | MRDwUKCLTWPYoNu0y 3 | SdPPUkQ1zyDwMDfJz 4 | V4jmzeUocQeDeFCo6 5 | 74yYhjtQFG0CyJRU7 6 | wKod1c6akrKqCxwPG 7 | f58Zz52DAYQC8qkzz 8 | Qc67PWx7uQyosuxAv 9 | n63SaksXbjVmA5vCv 10 | s61oj2D2Fcihjlcoe 11 | gvhhi5lk5hHbDXbay 12 | GArCptBhC5tLZu2pA 13 | eq4DOg08akJrsq7RL 14 | zRiV6mLUCZysmsFL9 15 | kTPHptkjherx4Cg24 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0500.csm: -------------------------------------------------------------------------------- 1 | ----050104000600 2 | vr53zqXoFUgsRX3NV 3 | ilabPRUxQevKIG2oX 4 | nAJzXmnTz9KY0HQQT 5 | tC4J8x7gwf35UCztA 6 | lGrxYNMvzIS3bxLG5 7 | IH0uLdXFAPkelpTwE 8 | jvqaB7YJm3XJ1VEnV 9 | iIOFfwfgnuhOorEHt 10 | 0j53lM800j8M8cCWs 11 | P8xTd573qIy9K4m2N 12 | gmD9eBFwQt7hQiW3P 13 | xqieoaMZbfCoMm2f5 14 | G2RnUm2oNXJf2tluL 15 | FlmXzGyc1WbMJvrwp 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0501.csm: -------------------------------------------------------------------------------- 1 | 0500050204010601 2 | 22zFaqOa6Y0ysHzEC 3 | Ey79JrfGLXzsNm8oD 4 | tUhspcRh6eUgak1PO 5 | BmBDdF83Uc5cg6nSe 6 | OAYHQFPz13LE95ELd 7 | uRErFWEIZ7ku91N6b 8 | wfbkgl2ODKQXcDbiu 9 | CvBAJJNQ7KEReC6WZ 10 | JUGTiPCSpaqh1kVz2 11 | 5T2Ozg35tDJqzbEXO 12 | 72GL3uUB1vlYGuJVe 13 | N3U3IddfhSYLTVuRU 14 | cqXtfyGujJtcdUCyP 15 | LwGylTc4mc1SAvmmD 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0502.csm: -------------------------------------------------------------------------------- 1 | 070107030602---- 2 | teM0R9HlirJp8Lm6t 3 | T1E5LoHHDUtuXZDKs 4 | deVrLBQjl941qpu2Q 5 | C63dDlSXSQy92KMbV 6 | IcjwA2sGPENl3CWKE 7 | bFOGlZ3qj9Jk4zzOL 8 | MeHYhqeV3UVc0Wveu 9 | yRyTLIqn7mfwA1sU7 10 | 53wQ5L9TDEwRwjp1f 11 | VGV6C04pr1jZIgX7Y 12 | vqgULds8fUWQr63D0 13 | R9i5b4BG2KWX2AWAu 14 | VKc0NSP5NT1mGDQY5 15 | qZvMAqoJJHuklxnL9 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0503.csm: -------------------------------------------------------------------------------- 1 | 0502050404030603 2 | PgIQEQfoXRDsSKlxv 3 | euQhfExpHhEEQqhTI 4 | fjIg7iZJmRzWtLkxl 5 | ioFJd7WFILXNWgtwe 6 | AlRdjN2W2Men9Zzje 7 | f1eVzEu1OXhdLcCNi 8 | V1kPrvLyTMrPKBVcO 9 | kWoOnNWv9u2vPQjTd 10 | 1yRbpYoMwBaHt3GRw 11 | hW7fx77smHRAM8YYe 12 | G0WGs0mZHJZakXWJg 13 | uGzer0zvKiDhMSred 14 | yQZ6TNjfijYF0L6SY 15 | kx4qcXJa6E3SK6LRO 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0504.csm: -------------------------------------------------------------------------------- 1 | 0503050504040604 2 | JJlE32Dvt6cvaY52h 3 | wJAY9zMkuTmFpW7Ls 4 | YW4fpSTV1cTZnwqcf 5 | JTUZfcI2Kz6ueBAyo 6 | Mmd1rsNjks73472C7 7 | fJqjCklkHdm7Iblah 8 | j5DzZUs9O64EvJNli 9 | fQmSUZ1hBFWcNS27S 10 | Uktxfxi8kk2jHUfcr 11 | WgRuKUDQrztCnl6fI 12 | 4x1zLVIbKxa5YUspK 13 | aZF5V5bMfGF02BwC8 14 | NvIBezQAiCoF5PUMJ 15 | 3HtLxUmh4xCwHoLDI 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0505.csm: -------------------------------------------------------------------------------- 1 | 0504050604050605 2 | aFF6x0I3vPq4gKlPd 3 | PeePXaH90DpQ6iNSE 4 | eptb0iW99sPbDlOxj 5 | B7fL0IFSlTvlekx6f 6 | 8EGTzl457objihgdf 7 | U7VE4su9ZdfdvXyiZ 8 | w5ktqV2Bu8vHSXkRf 9 | zlChMnq7Q2HYonBnV 10 | TW4FQvYAM033Gg3d5 11 | NENYWuDgKTZkKcEKo 12 | 2DFTrjjTOSXUOLfgG 13 | PWlvJsy4FXyAWiejH 14 | qnbla8ADzTlrqlAN5 15 | Eh4RImt4LZIJoQZ7V 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0506.csm: -------------------------------------------------------------------------------- 1 | 0505050704060606 2 | 2Jxzh5DZ4E58ZnlZG 3 | MReVU9GhPxA9vZNMu 4 | 2qFfL6eNA9sEjfmWY 5 | SS9SGmwCrSLCqqipd 6 | r1alxdXaQBqpKNExO 7 | SvoZCnDLr5p3OWbCT 8 | GDxjpB5ZwMC2HwO1Q 9 | UBq4QqVfMbBtuXVgl 10 | 9kEjQAg9gHaqWpMTG 11 | A4ZwpzWvF0wXTgfwV 12 | fogvvhIMlkGEiDFgw 13 | mmLZrFsu2Luhv7moQ 14 | uEdYtTtsUGsQOd1DN 15 | i33oMj17qYF2td2mz 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0507.csm: -------------------------------------------------------------------------------- 1 | 0506----04070607 2 | U1Aq4fV0jZhGyzLsT 3 | jhyynlmjUG97pvMh2 4 | grp0qn0w0JzemDWPQ 5 | wAPxTr2oCXgs73yAn 6 | NUgOO1OiIHYsXL0Wz 7 | yZ7zJZ2ODZFEl4VWR 8 | hNC9yvLpIFR5GAoXN 9 | uD9969ZCjLIfo7r8l 10 | rAvszRnt3qNMxqfB1 11 | HGSaEp39LnI9F2oZA 12 | C4EdQNq6RFxnyf5ri 13 | kSRjvgQiiwp92wwFf 14 | jl6U7mdrbLJVzimzO 15 | bmcIATSH3fUHMvZs8 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0600.csm: -------------------------------------------------------------------------------- 1 | ----060105000700 2 | Vtc6SGNjWtc5ET22x 3 | YdSJOM4bz7UDSvq1o 4 | 7y9VBJQiNk7mJQHtI 5 | Urt1cLfP4shoF3aN8 6 | M6aDfAvRE6TnP1yJs 7 | raq1ZNzVclKK8BnKl 8 | ahBAdpajUvynY0b7Y 9 | Z6p3m3oQz9PT6v0FK 10 | esn695OBKFFFuahXi 11 | 5DqDS0ouEkr3gpuvH 12 | G3IL8nJMCr8qtBR83 13 | bx1RpRJARWbZBjI2X 14 | TuxSsOy2meYKoSrEV 15 | IoNQiWNQ3xQnEMVks 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0601.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0602.csm: -------------------------------------------------------------------------------- 1 | 0601060305020702 2 | oZWBzXKUhvArFZUdH 3 | bfZkhPULV3NemQQBV 4 | DETRGAVxc6cZ8M3SQ 5 | yxzMRdv8pH35S6DJT 6 | GTmUF1No7M0hN9UuR 7 | gAwlfXXRidvUNOWGR 8 | IKJzYshRIKIZuF6Ai 9 | i7it0RVjq7LP5Xz0q 10 | PehZUBwiRuIQvretq 11 | Yejq2qQhwVbvgd60S 12 | yxrjdylFpL4o3jyNs 13 | cUYLz79yLiDraWjCZ 14 | xZLdDLzOT5dWYgzGm 15 | gyCCJPRbfj9UWpGSG 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0603.csm: -------------------------------------------------------------------------------- 1 | 0602060405030703 2 | X6mRYsXEj4AMgwUZt 3 | pWoPeCisbkVVeoDes 4 | dcWafi673LGZFw9z3 5 | MmGVEfJwItPDhwBHM 6 | ue70FRMqS6RTWHN8Z 7 | jdcjDXixDyClnDPy3 8 | vvtEvrDvKbZdy7djf 9 | BPaEPaNx5QAtHojLU 10 | o4K8KCMLslBXOr6bG 11 | CFhXXx9b2y1Kp0bkD 12 | 8G2o9U9rJWMW7HZFA 13 | yuz2VesNPNhDkMU1i 14 | W1NKQL15ev04v2W0b 15 | L2CyEizDkEyRFJ0cY 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0604.csm: -------------------------------------------------------------------------------- 1 | 0603060505040704 2 | 7h2gJKGnLU1kPPJDQ 3 | DFHPAAYcQNVp8DrN6 4 | k0irQPUkzOhJ63qrK 5 | NmOWZu6C63ALg80jb 6 | AyPAATJXjQCXRG7B1 7 | eG5qseMeMbqLOJXUO 8 | HHk7quZfO3UsvVWGV 9 | TnW1s6Mavs2OEItiC 10 | ylLaMMDe7ZU9ReRbI 11 | H3wc4glb5MjIDGezF 12 | UPSObcj0B8Zx2eos0 13 | AJIb4fDTtcZuGu7UH 14 | ZMXD1M2HgPzLxrJbM 15 | h4cAdGXNFnt8nFlbM 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0605.csm: -------------------------------------------------------------------------------- 1 | 0604060605050705 2 | tQTkiJehraFTjYAI3 3 | ayonxekUL79n1T4Ni 4 | F3Yj0xXpi9ZBsCTOo 5 | 49bZxKRRBTkDxwyz0 6 | n1y4J2IdKycAdKDyQ 7 | CUJYFI821dCVpjJcU 8 | Yi2LDeLjdjBbjR01b 9 | 6qGd3f7cqpXszBOzP 10 | SyEuHz08DoeJmIhgD 11 | r1USwmjSaUNg7BCu1 12 | 5TeVrufxpXl3oG5gc 13 | 0S0FE1va7y15OqFLD 14 | D42uqT9vhVlDpZTNf 15 | XqLbgQwQqVZNkmshX 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0606.csm: -------------------------------------------------------------------------------- 1 | 0605060705060706 2 | jwaW1BC5wah0NmSN1 3 | l4ohMY1ICx1y48cm7 4 | ukon969oGPrxGC59L 5 | zKQefViTdToO4eJ22 6 | AIWWQKF6tzNDmKg7F 7 | WEFMRoPNIAXxxO2NN 8 | hXl3w5W0i6RB6G5ww 9 | nHBRODb08wh73fyLE 10 | gzicJbXp8syzinuZA 11 | ebskdzQrFO4IX3QJg 12 | CcYXYScsJH3BcCk0j 13 | pB4pqXZSE1YWICjxS 14 | iZ3ecRjdxVs8yr0cK 15 | p5UTHf0LJ4eUtS9xb 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0607.csm: -------------------------------------------------------------------------------- 1 | 0606----05070707 2 | E6OubqwBFT465U5J9 3 | HPgDNE44FLFpN1x1z 4 | tr0rrkW4EVFXLoUdu 5 | YdEjc2shb2DOVJXo8 6 | rgMwfqNuzImDH5u0x 7 | l9qvjZTaC7qhyWR4P 8 | 7Iu43g6NZD20xovBD 9 | 4bDqKljmpbyrTeb96 10 | YfdDDfNqlLTEOKomD 11 | vqdoymzEcM44g2zAk 12 | culnnlvWVABTIAoS9 13 | i7o8mCt8JCRyIyGjw 14 | OPjyvFTQtjDAKnad7 15 | vwvRkTdcS6Kge2EDl 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0700.csm: -------------------------------------------------------------------------------- 1 | ----07010600---- 2 | lWzwSiEJlDLozhvhQ 3 | 37JQjAV7FJ47Ert3T 4 | PlLKvKWFagPIjKaQN 5 | uLiEwXhRd2gaJHCTC 6 | GC4Ntms2pMaiOk6kW 7 | k1skEHu4Km9LbWOmM 8 | eX7iz8cNXA3ta8VgK 9 | f717DuD80X1RJDhlG 10 | 3rL0KfkcS7cXQHMx5 11 | hfv2v5az6XvJK6ZwN 12 | ukav7xueTe0xC25K7 13 | IwKIoFZwovlk8RLVE 14 | 90baXw2oFcmsNMoFg 15 | YeFpAC02O2NrNWbB2 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0701.csm: -------------------------------------------------------------------------------- 1 | 070007020601---- 2 | K4jRjksgKEqVr0aY5 3 | l0qjnZj4xALr4j5In 4 | DDdmoXFTDs9CPC8aU 5 | dtaPudqt8npRu9up6 6 | aBgFv04ouNCQDU8gz 7 | NSkbKJV444axtOvUn 8 | 1N2FgQTCZ0WcDT1v8 9 | kiIq7y5WnemeSfmDV 10 | cDlTyXfsv9O8Tu11K 11 | WM1svlBTwgwwmdqgK 12 | hsHM4rbbNbxv5TkhA 13 | u8X9AuZZx2CUWZAIT 14 | Mr4m4BGIL3jaJwvHc 15 | GlItmsHWHW0MV7QIh 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0702.csm: -------------------------------------------------------------------------------- 1 | 070107030602---- 2 | teM0R9HlirJp8Lm6t 3 | T1E5LoHHDUtuXZDKs 4 | deVrLBQjl941qpu2Q 5 | C63dDlSXSQy92KMbV 6 | IcjwA2sGPENl3CWKE 7 | bFOGlZ3qj9Jk4zzOL 8 | MeHYhqeV3UVc0Wveu 9 | yRyTLIqn7mfwA1sU7 10 | 53wQ5L9TDEwRwjp1f 11 | VGV6C04pr1jZIgX7Y 12 | vqgULds8fUWQr63D0 13 | R9i5b4BG2KWX2AWAu 14 | VKc0NSP5NT1mGDQY5 15 | qZvMAqoJJHuklxnL9 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0703.csm: -------------------------------------------------------------------------------- 1 | ---------------- 2 | 3 | FLASH 4 | THUNDER 5 | 6 | 7 | silence 8 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0704.csm: -------------------------------------------------------------------------------- 1 | 070307050604---- 2 | 9jtl5jzsXCeZVJImT 3 | cplEipqVXJfTVsnZu 4 | F59rZ2W6egqDkc33c 5 | lxkvS0EXpL5gyOnti 6 | GqgS8pnC84mWse81I 7 | d17F9zFl4iSFZwHO8 8 | ZuKJOAHLIt0veOFoX 9 | jPazxqCHORnRkYMRy 10 | ED7gxXdMIneGw7z1e 11 | BsJABjD7tk9wE9MO4 12 | 41ErnbCifGDZ7PEOC 13 | 6HYvZSeJcg5dd5okq 14 | nT1tSBVRTdG9TKd4Z 15 | BuXbJ5gtAii9Uf2Zx 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0705.csm: -------------------------------------------------------------------------------- 1 | 070407060605---- 2 | isjbGCZjftrs0FtiC 3 | lOSXF4khKfPenDwxZ 4 | YwO4zx02k58k5j4z4 5 | DLYD0aUibsohYi8mM 6 | FCXOUvNKorcQr7e89 7 | jqVOnyYXaMxoTGHxt 8 | mo0Ahvy91O1Qo2gdp 9 | rU9X713TrnzppEEwv 10 | VdwBTMqUnV0ttkzAK 11 | XsA8Nx3WOpb1p6dtD 12 | vVFfWpxQSw0fB4Ztv 13 | Mmd8zywhGU8ntpSlO 14 | Rg1wwTzb2EK3I7Gr0 15 | 07r3YKB76Xo6x1Llv 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0706.csm: -------------------------------------------------------------------------------- 1 | 070507070606---- 2 | kEGaItTUN6p4VMYta 3 | RvzYayUH3zvJE8uV7 4 | iXa0Zdnpe5T2pMDI6 5 | zO3TGSbUQgBHabaHn 6 | JIKflmS76XuqOjD4u 7 | THbRIr0y68D8CZjLY 8 | MbPlwuBQCnbdGEoTU 9 | 2qHzMUAmhonwwLP7d 10 | fWR1d9dDeUAouN915 11 | 3lLoYkugVvwI7Ffoi 12 | ttmckWEDEPIL67LMl 13 | jby0UCSmKOrNo0HF3 14 | rfvKlITA1OW0dc9qj 15 | Iva6h5zRt3tkGdL8h 16 | -------------------------------------------------------------------------------- /ccccmaze/story/cm0707.csm: -------------------------------------------------------------------------------- 1 | 0706----0607---- 2 | welcome to the 3 | camp of seven. 4 | you are safe now. 5 | 6 | feel free to go 7 | out and explore. 8 | here you are 9 | safe and we have 10 | drinks and 11 | icecream. 12 | 13 | 14 | {COD1NG dav1nc1} 15 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/ccccmaze/story/gen/1 -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0000.cfg: -------------------------------------------------------------------------------- 1 | 00--0001--000100 2 | 72DKJPTM7AjRHSXmOXkc 3 | DPb3fpmMD7SgnuneA1Jk 4 | eDLzs7aMfyTT09z5c55O 5 | aYcXgKj7hNXZLGkN50vs 6 | srbezNBdc1v2guTglPsJ 7 | FZfAXF9yZ7qA5djIIOen 8 | T6ajnAe0CBZjzHMNbjvE 9 | qcmvTmgwHWusDtwxYKL7 10 | U6KvkQ0pZAeWLWJ0LRXf 11 | eLFE3Dh7A74NKQGxbqIP 12 | PovGYGyt3ya2dQLgSGFz 13 | 7aOcjMcW7O674g9XxAAq 14 | pXStL0RPMQTib10oLDuZ 15 | fIcsTbs7Fn1EblsgjJSY 16 | jdAan33fOBv16nuWLcDa 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0001.cfg: -------------------------------------------------------------------------------- 1 | 00000002--010101 2 | GLvcMozWKnAZe3Z4ZxwJ 3 | K1zUxV4p8OYQx7MOcOwD 4 | TP7x5U6W6seNhG6Z70NY 5 | 1VvowyP4doYGQ1SKJPhQ 6 | plS0fDh9ctdBpf0U8SNP 7 | 6uM71SZt08KXsJDze3MT 8 | pWx5IE9q1hoiGRTT9OKx 9 | j40mdSlDvy2jbMvSWznm 10 | jxWTFOgINYEVTqMGgkRJ 11 | ikBjrzFzTo5EVRG4mFAW 12 | WbakA3klol5GrPo5ZIUV 13 | 5tLB06mBt21GYIFCsf2Y 14 | ntuSM4ZLcxwZhs5DDfKQ 15 | 0C1k6A6vGBrjLERfTFPn 16 | kyqMYQpWmJJsiJ4hBwM9 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0002.cfg: -------------------------------------------------------------------------------- 1 | 00010003--020102 2 | rEOhQwV1toZsSJbMLck1 3 | 87xUbntVItcBEypEniXP 4 | c5kjFPbEcOIojGeil4bA 5 | oKYA1SeQMFdr8jSAGqks 6 | 3dSvjJ638d9r3qvuKK2A 7 | b070cOKtkQwsquUr8hl8 8 | dfs3fWuDphetH07uDRYz 9 | KH8L8e3wm7P10aphpmgW 10 | 5SccbdcImoiWh17IVfJu 11 | is0FJgX1TObICUnB2u8c 12 | S9g5UwzeMTb0D4MdlSP1 13 | rza1Rmpo563xDrnhGezz 14 | qa4tJWytPpYm1a8C8Un0 15 | sWLS0bAggCOhr7lJMKyv 16 | qaysUeaDw35I93MwcVBx 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0003.cfg: -------------------------------------------------------------------------------- 1 | 00020004--030103 2 | Jq4paESoJQcnHQMyekp4 3 | YWg4hWPYA8J6P5Au2gTD 4 | ZEIkBaP0pACxh2SwshUl 5 | rfvcbIoPusVmQljosRYH 6 | SuE68KG3HHcdpZcqWu2l 7 | payTPYCRcSp5xKQRxM5i 8 | fb9lc3f5bgG7qC6i4M9N 9 | fw5gj06TdyyOIZKsj7tr 10 | G2mviN2CFOccYyUxCtgG 11 | 68WxUTzyS03XlegnVjsx 12 | SPjaH4Oo6KNMBUerzPFA 13 | Go1YBssuzhr1UGm3kcvN 14 | KCQqHIL5jSXtBnv8fQ1X 15 | 4z0RI0cDZn67kMteQfoA 16 | 5Miw2iJIGx6b1IUBgO1v 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0100.cfg: -------------------------------------------------------------------------------- 1 | 01--010100000200 2 | ZGZpzX4W1yesnbV1x1Pa 3 | A3OstEMV5rjAQYqayhJA 4 | 2jdJ7ba5OiyOALTS46Py 5 | INVwcT6EhlUoOLObLlQM 6 | QcfkKDmZ1yTNhpmZ5xyJ 7 | RPrlqVPXABPG1lVwDz5X 8 | fGVJpZJedod0aP9F4ksy 9 | TTLEMRJAxJuhzy6LkdB7 10 | 4n8DOlaUs4PTeh5fI7qv 11 | ErxcP3JCxZVIY4vYUch7 12 | HavexrZKRm3fEihpQVHF 13 | NfFMaDamf932isfxCGWQ 14 | svPtGJNa4p2aUcYPd9wf 15 | 9Zx3KOE3ds6uYAeJs7Yu 16 | GcZSSPiae75jK90mv6nU 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0101.cfg: -------------------------------------------------------------------------------- 1 | 0100010200010201 2 | vdHDSd3oHqpwoHPgninR 3 | RULJcbqaNVTkCIn1eq4H 4 | e6HKASfFvvmqz951vtuJ 5 | nR6Iw5eAruabnygBI1ze 6 | UJUyKEA9uPfaZRVIWfh9 7 | mSzMRc386Cig0EwiLa8C 8 | 8pHPLLKCGSMUvYSOqnLI 9 | 8QPIJ6VvhYKXEFnVIbbp 10 | 8WYU7uXKNbIfDxpa8JSW 11 | sPquBC1Jwol2yDmVu60A 12 | Ug6aVOuA92urWdiBxzx5 13 | 2AKDdaRzPIFQbHt4tfbZ 14 | lcx7G3g3pzaQOMuVpbMQ 15 | Z7Bq6BN75mMLK4bdjw2j 16 | GTkXh3PcXG6WRfszGTtW 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0102.cfg: -------------------------------------------------------------------------------- 1 | 0101010300020202 2 | Vg2JBk7Dj8325WBwFkU6 3 | 1v7Q3Kzypc8RasjhN0OZ 4 | wV6661lURsHnCriCHGPd 5 | aCJN7ePn9WcofEdsUKUc 6 | At62AhhwN4EEhawwaIDz 7 | MkDjvrcIl4dVMjQwe5Qk 8 | vfB5lV16uqVesaX9LjTe 9 | dlsRUHtEGsdqcypcqBX6 10 | v7AsoAHw4QJ4ApUMX4ZU 11 | zHVWy1Ywy54qljZXGjhv 12 | X9HiHcZOikbyE61iPXHv 13 | 1eNGZBqoeFP2XJ5U5ZfP 14 | 5D3oUEhwanrvhHZjoSzK 15 | S0ezvbZPsm1TeUhGNKlN 16 | T4iwgTtqETf0nSXYbtrE 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0103.cfg: -------------------------------------------------------------------------------- 1 | 0102010400030203 2 | 0q8JLBx5v4K4itNln8nf 3 | 6W6Sd7jxDfwh2lDHlCqP 4 | nOEbmEocRT7PkGbBwwHO 5 | V0MsRpb5GWcKG2LuKxMe 6 | ILDhdDxbgH7n4O5J9wjO 7 | lJoXNpSTo84XQSRheifR 8 | yRGVdWowptuqHQHu40so 9 | m4rIlrq5Gfm1T5ZmrWPv 10 | hdL1QtL2LzOs6MZV69u0 11 | suqDzlqC2UymrSrZUQ8F 12 | FXNpM7y53Qn588oNF8wC 13 | tu6dCLkJwWh9p9BUrSXg 14 | 6YmZ0GtiQKpKQw6ecEff 15 | ZHgIkx2sKCupNnn50Nvs 16 | Uh0j1RmdVXanKKutNBKI 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0200.cfg: -------------------------------------------------------------------------------- 1 | 02--020101000300 2 | ecLYumyWxGoOMF0Z7hfj 3 | iwbp8P7rGVvJVfzjFgt0 4 | np6D21VHAQYk6Der1JEN 5 | KgbACrBHH7Xt50K3rYV8 6 | CMRGnOxlrC0HyQrI4gc5 7 | Bf6EUx5Oj375EuHnTvp2 8 | HsmXc8MNAG2TnZIOYW8X 9 | ZphWGkFxgjONT4oe6GDP 10 | e0QVUojqck8UqCkNrvpH 11 | Fr9OLON4proej3mYaTw2 12 | oZvGxncB5i8OXqjfxjuo 13 | IKP0zaMGBn0toolHWEBv 14 | FawnwiC9W6YD6xAtuPVB 15 | itxUZXSCRUSoxIpw8tNP 16 | fyQRaToRaYCFIURYiKXc 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0201.cfg: -------------------------------------------------------------------------------- 1 | 0200020201010301 2 | i47MEFOMdtMA67Q3M9hL 3 | fkDaDCKngzdKhY0PAOtC 4 | wbbC1DB4KT1xIJRlxknB 5 | yDSmxjJAlJrVMQl7zc4b 6 | O78O55qj7Jz0qHwsz6sk 7 | PWzqr3wKstmI91LbdFfp 8 | mKvcmQo8yzlLDXzRlpWh 9 | FSrwRgwAokIc2fDHJhUI 10 | kyq0ifivjw77njhdsCQA 11 | dvFWezIWoFf6K47eAEWW 12 | P0mvP466iwD2ZXWaYkV9 13 | DgtzJbt4LFUILVf3AftX 14 | Nu5qngUqIzmVBsCIEngv 15 | rmAR3UzU63z0105V1Smq 16 | 3WKgT5GV6N0OD0eszH9H 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0202.cfg: -------------------------------------------------------------------------------- 1 | 0201020301020302 2 | kSdJyOBbjRv8hzLNWMdt 3 | ypQ0w2ckul7wLQqE4RRi 4 | TbBO1l2cg3a6hS6e7HZ8 5 | YQh08kWVQz5TNuXid6Bs 6 | Ce6dwNPjXatFg0WO24hM 7 | KpXo4cLDytRXFPs0zQWE 8 | UWAjQ6Nc82iEvvDeOe6J 9 | 6nUfY4bx6zEkfarVLOjz 10 | Fr2ueErPALItJ1WwyViZ 11 | btdIeX9qQsUsOEaZLm8U 12 | gC3I0mAY097P70c9t1pL 13 | o4zyf1ZhaXvp8ODQr5C5 14 | qhCIoRAJ6AZTbFS31gDI 15 | 4fEOfLBpmOuzucIDzGrq 16 | 5pbrKiRJ3QkkJOkGbM5h 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0203.cfg: -------------------------------------------------------------------------------- 1 | 0202020401030303 2 | rd9odYzp4LrCUUrL3iQZ 3 | 4I8uK1PjSPTrwJrDKdD9 4 | 6D8fVibgfP7u7UITAr7Y 5 | HBCzX2oxf5Kxxyk0MQkF 6 | wZ1wE2gMKbjHGdC0bpqH 7 | lUc42MfyTumCZx3AG1pF 8 | 32v5YHme17nRTHcjbi7w 9 | 1yw4xGoJdhy1x5gycgls 10 | 7XIXMg6KC0u0paVZdnHr 11 | 18xSXHcFJHZD8wxAPjaM 12 | F3ezwtJwABARE0y8L6l2 13 | X829hAapZD6KFbUFPzCB 14 | PMVMh7No80z4D9cq0Kq0 15 | UtYRp9YkWfnWdKKSuFCJ 16 | jMpXNxK4W9uOwct1BdnK 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0300.cfg: -------------------------------------------------------------------------------- 1 | 03--030102000400 2 | H6MpkvE7miBncyxSxt9Y 3 | TmlIZPSuO1x2eINjCvja 4 | ibgwWiwtOuuv9dY5oTkO 5 | OgFQFfj9jm5dwzorm8zL 6 | Qd6j7cRqwWIqsEOQxp2a 7 | 1Wc7EcZS9E2O21NXAz1F 8 | 9nrV76dj2akh8IYaSAlf 9 | WB5crvl8gOt2gasAoMl3 10 | 5Rp1mtLMhBmXIK9xH2DK 11 | xfWt51rMuKbid3s3PpAx 12 | LY6eKfy5Y5833Awxrl53 13 | n0SuXVFIMe6R6i55VSG1 14 | s9YYdER0TZeSWSVUfOgL 15 | M7EjikTmUZM0IB0hivA8 16 | PKcG8Zgk6MD29669WDNM 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0301.cfg: -------------------------------------------------------------------------------- 1 | 0300030202010401 2 | QHdVoOxjWhbZHF3iAkdI 3 | SARk2A5iLgN8zZtJQOYa 4 | AraR28edKHN4VPZB2AhK 5 | XriiVu4BwTqwJYt8pPOz 6 | RWihqPBBU5NjWT8Y9W6p 7 | TxGkHMMuJHywnrTOfuIp 8 | K3GlhSlYRiF5qBuyKfrf 9 | Zxj9q2c8tCNpNxaTej1J 10 | oMMXBrflcrMWzxSALOky 11 | t1IyR93ArRjYLyHuaZuL 12 | 31GPzJtZ5R5UWNdNlgE0 13 | nGY6Do0AXN5cVFKHDGWH 14 | KPOkmKF3GE92FoTChldX 15 | LhTe4ys5vJgae1j533zs 16 | mRlY2pFzTI2BdW3Z8pR9 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0302.cfg: -------------------------------------------------------------------------------- 1 | 0301030302020402 2 | C2pQ7RjYvm22gBsr7Le6 3 | 3sq16ZDcNBAWZV2G06xu 4 | IrMD4oNSwPR8r4npFMhr 5 | w6sp04ZEUTzgaALjiYGw 6 | nu9hd7UsDYGSxf8Tyjpc 7 | FJzWBWAODFgUbxI4TNzM 8 | weVE7DNXa9gA9tmL7CjG 9 | 16tvi2eo8thJpid9HsNV 10 | t5DWlBaEev9CJog0bMaF 11 | e3z4YSJZPZP9mBjPiXQP 12 | NbEZIcqQ6aicDgxMYdaF 13 | MPmsh6FhkVWmHf1z4DFM 14 | lNPh0Ru82flN8HkNKFLH 15 | BbaGeWlfIgJcF3NpoIbw 16 | vQaxox6adVzwcYCNNbsb 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/ci/ci0303.cfg: -------------------------------------------------------------------------------- 1 | 0302030402030403 2 | LkT5TSxqgsk7muWBLi8o 3 | QFYdPi6dMNSYpGynZaot 4 | RGiupCi7p0slPzeGa5rA 5 | ZkRaF80vgnnoXe5eM69a 6 | zxy8LU7k4dq6GpLJxYcs 7 | m82AzIRTLJ4OMMI5Ykc7 8 | IMtLTvXFGMhXg5jst29R 9 | yYQAAtKSecGvDNcpQjaV 10 | tJdYubh1jJ56SVmh6R1n 11 | Rk5Vnia1DEv9fJ0iNByj 12 | iiRRxt0fXfOWbYZGEBtA 13 | yvNg4YoWrpA2KmvSJIXM 14 | gMRKqHSXxeUyyr54PLN6 15 | IWvNUnqJWnh0NDbIje5P 16 | AuoAMvpnMHP7gJ6N5yMN 17 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0000.cfg: -------------------------------------------------------------------------------- 1 | ----0001----0100 2 | Th36NFMEHS0SJn5Zs 3 | CqnwJDmR8QXoTS7Uz 4 | zIQEhGSsMMMVcqf80 5 | uad19aTZEkmQZcKI2 6 | QtRi3nkX3dB0y9c5Y 7 | m2BYTpdoPV30PhPSe 8 | bYSdzon11xQjeZwTR 9 | 24ZJSiNJrmQBHhp59 10 | BCBSUf8rjvIVYE2TM 11 | BkC3zevJpq8TrBoC3 12 | nvTx9YXpM5zb4TfpY 13 | HUPPJcRxHG3xPZDQl 14 | dEEtJ4pt5qKlhg0ju 15 | 8KxwxJrNxxXV6mAdJ 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0001.cfg: -------------------------------------------------------------------------------- 1 | 00000002----0101 2 | thxiYBMUWwSaj48v5 3 | SydluSedtcCrzRCeZ 4 | 073XoBxy6wx4NJ1Xy 5 | DWlcihmRF3l8EYD0u 6 | Vjb95oqwV83X4HyNJ 7 | WirB9NHkjbye2Vup7 8 | WLxkWD0yioIvSycVq 9 | hKtz9MszKbSWTVTdb 10 | J6IUDpkOgTy0HbL1W 11 | 4yOtvMW7wHWTURPSa 12 | Zucywzz3xyLwFulUQ 13 | I0G5BdrSufuvbW1eI 14 | Rrxgqp1aYJW03ok1x 15 | KMbVMx35NCx4TSPPS 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0002.cfg: -------------------------------------------------------------------------------- 1 | 00010003----0102 2 | oigqdzWqWrogftTw3 3 | 1iMImYmm2D44uggyj 4 | YtjCaT1fYhCwmtCbB 5 | 7RtuJwsKCm7cYgWVG 6 | O4IjJQ8RqrxBAZB1L 7 | Yms6LEJGUbU5POaZ4 8 | C48BPQIVL5VxgkmZC 9 | xdR3xcmTSwwFu1MCT 10 | 5pHZsVBxIOvRUG14G 11 | RPpg8hCSIJWLsgBuT 12 | tu2tvTevkIE9iQQEK 13 | RafuQzwvhDyKlliYP 14 | 0XYfyx53o7iH3VMUQ 15 | Tbz78sBd15MF8Cwjl 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0003.cfg: -------------------------------------------------------------------------------- 1 | 00020004----0103 2 | kVCWXQXZRLfg5jLZx 3 | a7d0zIIrehRe7mwbx 4 | JMj3yo8gYytk854kX 5 | bgE3KMK041U1SLITp 6 | cbc9m4vi5KrpBqyYU 7 | LuUdsKiTeYvI3jSEM 8 | 2hbpnMbafXZghk8ma 9 | HNWk3IMpKBBKp3IFt 10 | AVM9beG5VpBWscXcs 11 | eMJ5uDCxbiFzISjzU 12 | HST1NfgFy3LtwZWKT 13 | dd0ZbjPA3VaTwle67 14 | xnf7xTbFwHehC0LKD 15 | vWfnFQWx7T2iXlkd8 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0004.cfg: -------------------------------------------------------------------------------- 1 | 00030005----0104 2 | 8I40RDM27dgSqXlEF 3 | CrNJfVHibh5mD55jL 4 | CMDRhCgMZfqWFouJH 5 | 65DZwk6v92hYk1mdF 6 | obbZDgKTijohR4vEt 7 | i3regQgvXBTqgEiMZ 8 | onBe8fYIGQIbZ4Zw5 9 | 1rcCbcWsS0vR12uXI 10 | vSjEXGLqMcKyxIBlz 11 | 0DkzNpDFHFI2cD2FN 12 | 1GM2CdefzxAkeK89D 13 | czUZKRVw7g8cEA9Id 14 | qdEzb7axVD6veIO6I 15 | XTZExHWgwiW7JhL6B 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0005.cfg: -------------------------------------------------------------------------------- 1 | 00040006----0105 2 | Vw4ECiSQ9hBXNFLAg 3 | pcHDvXtbgnespdIIM 4 | G60f8yuclOCk1e9xo 5 | GgQ4FR2D4VflNaJ40 6 | vGLMWF9ayQFMCbUBh 7 | AcJ84E1Vyrg1a0L4A 8 | OoqM0R74nebE5paUZ 9 | qIVnsM3OKCsz5vzrv 10 | D7rt8UK6PjyLO2gvK 11 | PCjV6GamjIqSWacx5 12 | N6KiIzc1nia8YFUEI 13 | NPkkxPdj9PzzTFWGh 14 | fXp9rqhqF0gd30rRa 15 | H4TwhWLJblpMmXjCx 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0006.cfg: -------------------------------------------------------------------------------- 1 | 00050007----0106 2 | rvGVuxw5qxSpxrhnZ 3 | h1AnWJaI52K3El4VT 4 | HK0elATwF5x4JoIlY 5 | iZDTt9fS7zDfnMYX7 6 | aym5vmPCSZzXTHVul 7 | XgGSVX6IuHXvDHFGy 8 | m89fAafuSy5PCrPpH 9 | KwfZSAmppSYndCFK0 10 | 1u6o794w6uq852cfi 11 | bM88WGC21CEOeoqmt 12 | 7zKEorpEHhzobtC0A 13 | djVPgezEpzmasDqIc 14 | ofOkqpwS9r2cl4OV3 15 | mJIzQBdXuZw8tP0JW 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0007.cfg: -------------------------------------------------------------------------------- 1 | 0006--------0107 2 | V5yslxbc32EW2vueI 3 | YzxkBs0qPKqRjNvyG 4 | S4QTcJPSn5WREPdAl 5 | Rdt4od890p7YugPDZ 6 | yVJeELBNNTXRg4oOx 7 | hXe9K7sj2zx8P3nWH 8 | sj9WQd3TXc1TPugtv 9 | oAxmJLzhLfvZmWO3u 10 | k6Mf7zci2H0R6RMhY 11 | y3FB2KrkF8gbjgbEn 12 | I2rPTu90JwdqwKnuI 13 | 9rFPHIrIkj6j0opPB 14 | pn81izfbiVTFU2GuB 15 | jZgk8HGIIyrTQPgn3 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0100.cfg: -------------------------------------------------------------------------------- 1 | ----010100000200 2 | PUjcxH6Bzu9wqXniM 3 | thmupBvIxAYyxxqHn 4 | M8QZZf8swVv283AnT 5 | mRTj6QihNHZ47IhpH 6 | QvvRqJlciQ4NJ0Izx 7 | VwMQ0ZJCpSYtwOQws 8 | IxXALQ7ZdzxwwF8EP 9 | Aiz5csu6YyhtSsQXd 10 | DRhchP7oaBeJvE6WS 11 | 6UWqLNyeqHXDrOf5t 12 | DA4vOc2D7zZ7HNLse 13 | gGLRc2QD2hUikriPk 14 | E1Enb0qXZNI6kS9te 15 | KkCi2LfysN9abzezx 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0101.cfg: -------------------------------------------------------------------------------- 1 | 0100010200010201 2 | VpNbQNK5YQRXfd95q 3 | Lj6jMJ6PijqgAb3rR 4 | 2oEWuyo73AUMMxzy9 5 | oMwdtPQDXntwd7THM 6 | 1A47YBFXnmuMjGEW9 7 | axtQANroDKXVTckpB 8 | f07MRkkCziCfo40J7 9 | fNcXyVYSReVycZ0vv 10 | KuxYUOFINjClpgLDJ 11 | csxeDBC6C7H3wrSjW 12 | fmPv0CItEa15V4iOW 13 | CGR6SJfULNawuy4Pq 14 | jOC6rUsU3LPmR2TKh 15 | dsZbWdJXPQsJkSxW6 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0102.cfg: -------------------------------------------------------------------------------- 1 | 0101010300020202 2 | YQ1OzvonSSG9l5oBG 3 | eZPR2pWhp4mp2gdoT 4 | ri1gKxOs4vBMADeJJ 5 | qzdk4g1kaSw4VuWZa 6 | onQW0tNjVdjZznRfD 7 | 2Wg7ACvUY7lxVmlsH 8 | 5wtCqWEa6qCi3BPFZ 9 | h33zMYS3kvkZMwAs4 10 | vVJ4LsST75QhdtXQS 11 | q3Gkgz1OXjfQWs4zR 12 | CGk2ndcLg5eeOaglm 13 | fFzE2mAG0flHxKoNS 14 | C1nOa8NVoSiCIhVEX 15 | SSlBWa0v5spaJZiEF 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0103.cfg: -------------------------------------------------------------------------------- 1 | 0102010400030203 2 | zfsOQAC594VJJ9O04 3 | zhhjVhIoRcProWM0v 4 | QNzj1iyNRTYuD5OxT 5 | cs3MikiHjUklPss7K 6 | PtvXRYeWMN525pWPD 7 | Id5myIPiDgdGZuDWt 8 | F2cQJSuYjYL766AJy 9 | 4y1UAfxJl9FmnDp5F 10 | 62pqSqY5vfwKtMrVi 11 | UV8F2lVpj8t9XFrSs 12 | sJlFwI9BiPgkJVsnM 13 | WCW6cTsTuI6LTmdbt 14 | UljepGYwUAkYmA6ad 15 | HD115OduOtq6Bb0gA 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0104.cfg: -------------------------------------------------------------------------------- 1 | 0103010500040204 2 | PyvgQRsyq401DM2Lt 3 | IEOzr4Rp2yQqFMuwU 4 | gp8AEmAbgnvrWkQzQ 5 | mqvMPDUIsg1XIZxc1 6 | Y6OUiMudN04eSlCaT 7 | gKSuoJWRahKwrunMI 8 | vAyrxiVHQfwTL8UZ6 9 | gxtsvLPHxI7JkUfeQ 10 | 8AKlHqZwGVFhOHPeA 11 | p38kF5juFhVoRgR9u 12 | JPMZmYo3QdAzFOZAz 13 | IXhtFdV0qYMJ5SCNO 14 | q8IScVfFcotjKG1Wj 15 | XKaz9lvMYkhi9BGki 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0105.cfg: -------------------------------------------------------------------------------- 1 | 0104010600050205 2 | vjDjzxRPqN9LAFBKw 3 | bIWmWXTMaPbHQmGLB 4 | lirn2GFAgB7z7G0oa 5 | Xma1ed9cSjmff5jYf 6 | 3doeUX6Vb6tbTW27p 7 | TUBRpqiRhbSzgbtOi 8 | if1TP2gHiHi2nv1G7 9 | TGlcVTJKsBg7OBlw1 10 | AGXKmLkP96AvwGZ9z 11 | TQaOMak2ngcqyVLZl 12 | eUBuSXckYUcWRzRgY 13 | Eg2rFWEGI8D36Cegd 14 | OC6rCzpM3ELd4Y0OI 15 | ri5idlvPOx22Cynqe 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0106.cfg: -------------------------------------------------------------------------------- 1 | 0105010700060206 2 | 02XzXKvydsYTgJTFr 3 | IRUoKpxlNTosm1DPN 4 | 2nYpfJmvZZDao751Q 5 | 8daNWFlH3dlV0RCvm 6 | DQ8VW5G2y7ZWOzwll 7 | iV3jo0rUfqeWU612L 8 | GFYCcCvCpH0oAAu80 9 | bTuhNCRxtsxx5KPZL 10 | HoD782nzlPiVa1uqP 11 | l3h2SIvD32uLiU0vS 12 | w4SHl1U0LeeQzCvWv 13 | dwbHfqJU51Z2Fo6IR 14 | aWSoS73QCNIx8ZbuQ 15 | UAKRX0AE9DpfOEME5 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0107.cfg: -------------------------------------------------------------------------------- 1 | 0106----00070207 2 | hJgyhzGf6s7pKlmiK 3 | 8DBgoKfqMK9X9lhbR 4 | 9JoPv2mKebznluxdS 5 | JaDKtuHSCHovffzpS 6 | SKeRPe9wL0ByrQTkU 7 | mcuqoxEgxaqRaY7LC 8 | GJoYY7OhFzvkacJT7 9 | JTAamLwYJkwGjW6eg 10 | U7nOovuKJhD9i3Mzp 11 | FZSuQmCTWJbKmcCgf 12 | xpjkudnbihyfN3JrA 13 | juuqMP86DBGGSbnib 14 | 6kmxOcGrzMK3UrMLm 15 | xQsLLo1RZs66ArTww 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0200.cfg: -------------------------------------------------------------------------------- 1 | ----020101000300 2 | lMm2fB9cPdoqXK0wL 3 | oTgqAG6Rf9WIrJGuA 4 | 6RZzB9qlcINaGb08Y 5 | IISyRe0iwqBII7bzz 6 | iLANLUKEeTXPKWwBs 7 | UTa2ccHfL1H26WDQm 8 | SDhjPhwjLu2faUiJV 9 | bGcsRjTTGOEVjzpT0 10 | OtTT8UTAS5SJgYRNr 11 | RQsvygNRhm5Ez6sHV 12 | lxjyha1cmu53XD9ms 13 | R8oGNYZIJL7oUxnc8 14 | r49AHMy6nZ8pHDGxm 15 | l2BmjJinyJyd556A0 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0201.cfg: -------------------------------------------------------------------------------- 1 | 0200020201010301 2 | WmYq847j52sRSR68s 3 | hGbO1vH75vZuMnmvt 4 | Jm8WuYoEtlfMr2r5C 5 | o0d7VXJD6XGOhYq9c 6 | 0RF7TJe1X1O573cmI 7 | QckYnUHFDLFi6jdcL 8 | f9m9CWWpcyv8c3OzQ 9 | It36WkXT9B8UHLH7L 10 | fnSSclgnVRGeHfiIB 11 | 7Zhs8dRpIFaYjkZFA 12 | AxrOOx5X04p3URbRO 13 | MUmss2VqPKPWzGMCR 14 | 85ZUfHhgisQdM5qRQ 15 | RUBwZx8jSQusNCEoG 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0202.cfg: -------------------------------------------------------------------------------- 1 | 0201020301020302 2 | IbBvPVpcvpjhlvDiu 3 | TVasZ8nEDrIHngN1D 4 | rtdMEON01G7G2bCNW 5 | JP6ZMAgh1NjdhGfio 6 | uByT9KBTAX8miLeyi 7 | LDAlOCLwbWZLou2UR 8 | 3Y3mzHyV1heNFOv8t 9 | mMQNENR6KZTYe6crh 10 | cxRZHlihY2C6QnKE5 11 | JwelTH6pNKXOHrZiW 12 | TUUML0tqeZ76ZFYo8 13 | jqBdp8gfkge7vlMXa 14 | 3bhknB0IS1DodBIHi 15 | 11gFXMEHyA5u6aTpt 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0203.cfg: -------------------------------------------------------------------------------- 1 | 0202020401030303 2 | PYalAGwkk6Hb09FUV 3 | CMDqAQXhybKMg6lpl 4 | SZUzX1fEzAT0T31VI 5 | MYD3GXkF8fdvx6Mf4 6 | T5cKpF8jlIEOQ4mFU 7 | qubb6SvUCY2Zw0YHs 8 | V5Uhda0pyiQlSnsMK 9 | LkDJ9x9nl0QCcpShg 10 | 52g1QjRPonjwl45Bp 11 | 6Pt233lASDATuRZLB 12 | dsbDc3OTs6ccLMupY 13 | wo0aM5t16awKNQfio 14 | OJNsv2bbh0cJZhjP8 15 | Z7gvRvoX4MvpJNAG7 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0204.cfg: -------------------------------------------------------------------------------- 1 | 0203020501040304 2 | ACAOcChKyFoCOlGax 3 | i9c8khsriXd5heN2M 4 | V7tlljch8ikAMa4PQ 5 | HIulC4aXPKt47tBkM 6 | sU3eRG0bgX95o6UEs 7 | 4yNWs9RI0Xgux7Usr 8 | 8nvkn1jLQqYTlshhW 9 | gxYJ6icyzi1iValRd 10 | 9tGl2cGeoyfXfvEu8 11 | kQUZ5q90OA2bsIYSL 12 | KLER5CbdnMY6jw4iC 13 | wwwcxak65UhuekCU0 14 | 0dOxrP0MV1nQJigS5 15 | 6eLZEMPh5BCCfT609 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0205.cfg: -------------------------------------------------------------------------------- 1 | 0204020601050305 2 | cAbCKkxApkGR8Ka8A 3 | gnWQWZIx7Q8S4cX84 4 | 3p9L3WWfOLfPjxP7d 5 | oy6bZ1e2OEfOqLXO5 6 | FQGGC7zIijYUohrAj 7 | b2T8UdguTQhj4HYj1 8 | XvR0MzKIdeyAnyYPu 9 | B0VWjf7a8xcjLO2Ly 10 | fuXIpo3aXIy5grgKh 11 | T1NEMtgdY747bSx5n 12 | S4kl2OFGhZpIRVAFb 13 | hgL3m5O8sKUwZfMVM 14 | B3tHCYsW2cBgJqxCh 15 | RwT0AaJLkKIHAOUya 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0206.cfg: -------------------------------------------------------------------------------- 1 | 0205020701060306 2 | suoelmT6lUUwFYPCS 3 | mY5ak1uwGxXdYf3ai 4 | AcEvHivgehoxww0iL 5 | IvQFg8UGVjNEpSmnY 6 | VDzsPgYvntyVW02tj 7 | vUBpcCl5gvltXmihD 8 | RXu48W3o5dDXFhG4V 9 | wvjrQC1CzUuhR05pS 10 | 6TKOnd7DNLlTNmZRi 11 | pkSck2MKeZlkEp5Mx 12 | Q6D2KBIDQQQl9zchl 13 | mqquEc9LUAE0YWxRx 14 | gGqAljY8mRc9ENeYq 15 | 03VyBdhGmpFjTvac7 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0207.cfg: -------------------------------------------------------------------------------- 1 | 0206----01070307 2 | qigFPcYUTvxSoWRit 3 | A6Aj95yPj2DslLZbb 4 | inCB2yLoGaIkD1DGR 5 | ajrh2D6oFEtxz5Ow7 6 | kIzrQas7KvvgEhmo7 7 | 6qC5g0MDNZM2lHmep 8 | K0XoxciSYmfczAqXP 9 | KunWENT2cdQNrh862 10 | boAKArqCsfNPY8li7 11 | 4Ms7kXNP6YvKWxBMe 12 | 1hSdI3M6QcWLfMyl2 13 | h7LyKa8gVt30nbjHP 14 | mdKYxgIrZoAC6hN2m 15 | 4gXVpOCNWM06X9REg 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0300.cfg: -------------------------------------------------------------------------------- 1 | ----030102000400 2 | EjTBQt6KCLPa0CmzT 3 | c4o1h0VnAlzhYpQev 4 | U5QwWChfvYkErQKUb 5 | 4RXees2BwmEzcqQIQ 6 | 0ME48ULEbri4SNZzH 7 | q8chG3byLxGZg0ivM 8 | babDbKUToeoqIck07 9 | U7fHbC2SZuGzgva7S 10 | bfa5m1xMRgktdohP5 11 | 8ackrV7RMh5M8DfV2 12 | esC2EftDd4gM3ybFJ 13 | Gc6mLlutlqF2Zb8is 14 | YdD6oEVtTSfPCTlAt 15 | 5Slo47i2BenlLrnIe 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0301.cfg: -------------------------------------------------------------------------------- 1 | 0300030202010401 2 | GPsi7EwQABVK6gSHY 3 | gDEPDwkrxGJoGlGxJ 4 | EhLgUQEs9utOjIWfH 5 | 9g5GVuz3Hb3yuna1U 6 | PX6pCNCbq5Obt0mLt 7 | 6c9bXjk4p5EwU2O4K 8 | zrlQQS11deRtAlkeO 9 | 24HI3cRdXmwy2gqtk 10 | f9Bt9MAFosC5KNOQN 11 | ijf5ZVTU3my3xrddW 12 | j5eEQOEaGNcVxD2Qu 13 | 2Wc2KxzeYqRUhwWXp 14 | 45jjf54bckZny5PsA 15 | YKnUqekVT2WNObQuY 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0302.cfg: -------------------------------------------------------------------------------- 1 | 0301030302020402 2 | aE3aweMbnNVM9yfXW 3 | tUmVGVyqfyOBb7nCK 4 | LWlcP4WJGdqQfe0e8 5 | EYfGSM4VaxrPC8yMM 6 | KpKFw9WMPV0ncy9qH 7 | TiLKkobmiJTlVuVbM 8 | TF46hHn3tjRdFZ99T 9 | LG3iNSZnkpS5mfMnQ 10 | vJkq2ZwxZI0sg5ik1 11 | Z3RSHZWoaqryppFgu 12 | XSq6wBSIaZFt4kchJ 13 | UVWcPO9Ugq5DX8Fhf 14 | GIV5U08oNvGJJ48vh 15 | 0LUkMR8NWt2CC1htI 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0303.cfg: -------------------------------------------------------------------------------- 1 | 0302030402030403 2 | zR7jqscNiKGtlkRPZ 3 | NbzySWgoB6M84siSD 4 | XsAWJpPYN2kS976RS 5 | G8WZMetMIo95LneQC 6 | XhGN5srQoT6ICGD75 7 | LoBNT4iGTsYs2Q2wp 8 | PHaIQpO9nDD4ZvGjv 9 | 11QhwJ9NxSUrm2viZ 10 | nE9roC7iVzPOT2D2c 11 | EE7omUXKVWD1Z9XKW 12 | CYB1QqcPgw5cop2Op 13 | q3r7Uzq4qBUehm7Ah 14 | 2piixgbfNkg4YVh6z 15 | hZ0TgoHjpBaxzN4Yl 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0304.cfg: -------------------------------------------------------------------------------- 1 | 0303030502040404 2 | eMsDRTkeTwO7GDvI7 3 | SF5aAT0SNVYarj9m4 4 | HrCYV9EgVJhMQHkhi 5 | tWv5r5kkqgjkPvN4S 6 | Ok5t98qIXXipXDNMf 7 | l66Y73hSXHbcRYoTL 8 | OxNh81EcDW96qqZPn 9 | tEM4mbkdIYzu6YvPJ 10 | b7xIUuOMGxVSUEllO 11 | kzAMEtScp1e2bfBqa 12 | LNSRr9yEKKAeXNxLe 13 | vOsGF4Yoqsg0eIiQM 14 | wNT63NCjch5k1HlPN 15 | Grq7Efa8HSAanRBHk 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0305.cfg: -------------------------------------------------------------------------------- 1 | 0304030602050405 2 | zfVyOtDb9Z1g92OFL 3 | pMisV0nTVDru6o78T 4 | E1oCkDhrSZevrXpdy 5 | nESElvws8h50Il191 6 | qFTPrDpSlouk0YwRs 7 | HR0GhEZN47uEXpVH8 8 | LAs4aANh8W7Pd49NS 9 | hzlMjgGgAGS6GAOmd 10 | UbXJxY2GlGPpEshi9 11 | 6WaCICss65kHObjBO 12 | OUZU0rcFFppOtlXpO 13 | TEAeYN3451NJr6zWF 14 | vkzl8yxin1ZmGn918 15 | HwWqYmmHffdLLZhUw 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0306.cfg: -------------------------------------------------------------------------------- 1 | 0305030702060406 2 | Eftr5gSASBzVH5zTd 3 | QJXAVjeD84uctbb97 4 | bCcqFbnfYsUkAk7yj 5 | Y5aAGMNavEKey3czz 6 | M0Y3LOJgfaPNZjzcb 7 | 3zwzluOmMoyknVEeT 8 | XdzGNNtkkdbvD8SJD 9 | JtQIVFunayibqvcCN 10 | hB1a8lniyKSvcirjK 11 | XMzlkrQ6GWmc1eZ0R 12 | NGlFS7ZDTpmqk58Bo 13 | jtFdqjhVr5gp1kt9J 14 | 5nsmvNXXJM1YDpEtk 15 | ljJXfzJjJcUc4ovEJ 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0307.cfg: -------------------------------------------------------------------------------- 1 | 0306----02070407 2 | WRFGUpLfdNemSFjBt 3 | bW5tOKZP6IQHlH89K 4 | MpPJop7X4soEE3B9A 5 | b2PSiaJpyWlQnDxQr 6 | xsG5n2CMsA3oqQQaR 7 | aqtAeywQWK1mbAMIb 8 | hB0E6Kyj7lXUMOyTM 9 | 7HrXIpiLSNNzeZgU5 10 | qkRILNoimRzhVSiwK 11 | KQca2IHYGxGmLayQt 12 | 3dZRNTbvU4IguQBXr 13 | IBiyZXP7luZApdPCL 14 | jPf6ofZMYLNKvgZEm 15 | M2OQmvsv7WNe7aqXS 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0400.cfg: -------------------------------------------------------------------------------- 1 | ----040103000500 2 | 1BCMtwIHXWaIRZMr8 3 | Qec5I36fJA56Dc9CP 4 | 4glEakcHhoqxrktIk 5 | 3JG5IZXcMKgQfDQn3 6 | qgszloCp8RziBF0Wi 7 | zGmwKLWN5O3AJRBDL 8 | 26HXB3gDuTmOUYDH1 9 | odegaZzjwq3P2IIO3 10 | NEsmgeP9OjColRGHg 11 | MFrE3mCfvXgbauCVZ 12 | lxNtGpo7EYxRDwIMP 13 | S2lqSBV02kWfoVotp 14 | Xos9PMHmDksGRBCbz 15 | aalLPznU1vi7Fi4c2 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0401.cfg: -------------------------------------------------------------------------------- 1 | 0400040203010501 2 | nmdqI4aWJ4hFqQFWw 3 | 6ipad0X20qXVy9hYu 4 | VohfqB2FHI7BtACUA 5 | n9rUt9irlxSJ9zupe 6 | iYAlleJvlP1lfvD4Q 7 | qmdRYQP0L4nlvRGDu 8 | UuOPfXXt1c3bDKaVO 9 | KGxgu5dQZHZj6kPHa 10 | mJ8EcbaxeXlIGu4ix 11 | VUDV857p8Rsj58LnT 12 | t4g5VYGjZFowCGqDo 13 | dZKajhMGaG3229WMn 14 | OBGs0Aj4J7cUdv6Ka 15 | XEeyCFnuyWlRHIV8p 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0402.cfg: -------------------------------------------------------------------------------- 1 | 0401040303020502 2 | b3nV8ULcbWcwVytB6 3 | 9AHk9eSzeS7LF6ch3 4 | 1zwmspBMiwPpygBaw 5 | L9KEU0u1aOjx9FoEm 6 | wzX0hRGdqlm4rD2rJ 7 | ub1hWfmvFWCo91Y5p 8 | XS5JzstTtl3PmZIRl 9 | z6KLGbPNky6wVlpsI 10 | z63YG9z17RKXmye6y 11 | yxnswWXkIjEB6LL13 12 | DPfrmpW9fI3sTxbEg 13 | esgi9a9hlQg1DAfaC 14 | M2ADESGbhUtCnr9IB 15 | BnAwLJCT5qH08vSQt 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0403.cfg: -------------------------------------------------------------------------------- 1 | 0402040403030503 2 | zAswCe2iQv5NTWCjP 3 | HyG1Bmd0Oh7zXUEiB 4 | rTITRK2pnrUuEi9VD 5 | NxTq4t47oRzLqtoog 6 | hNOTlYgwb6MKv7kme 7 | xzKHBR9wBOeuLSlgu 8 | 399SDLIJbqqZHMACS 9 | JP66ySM4sUkeUmz9b 10 | d95CkwEhPakTCE0Vx 11 | qsyIyRmT5LetY5C8H 12 | bYbcXAy1okORqU10u 13 | tC8xxktredGRNcCt5 14 | pgwM0UfHGaRkrCPKM 15 | 1iRgW0c6lxTgpWHFw 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0404.cfg: -------------------------------------------------------------------------------- 1 | 0403040503040504 2 | OJaXXT2XUNrTNzFfU 3 | 0pVg1OORK7M5ERfeZ 4 | VoaU8FifehuqTnPpG 5 | z8NPNQn6PPxNx0QiE 6 | WBTXBI3aHF7d549io 7 | nFXuGIKbWORWaAcif 8 | Ut1u68IIV1qiM1F9v 9 | Uc84n2nTLX0w7hoex 10 | mtaEKyoE1SAZSAxNM 11 | qU5raF9L5CA0mNkNI 12 | C9REynGvXonPlAfek 13 | jdrhyAbouR2o1zQ0G 14 | NgPVW2ME2w3pQt0w8 15 | YgJOxjXoNtIv1zg5w 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0405.cfg: -------------------------------------------------------------------------------- 1 | 0404040603050505 2 | rdVyHqMnSTQWzToxX 3 | b9KbHCuEnTxpIfoFI 4 | HkQWZgJiZ9brugVbz 5 | OF5g0r8WMMDgEvBl6 6 | KzbIrtvtPFJpwRJzk 7 | 0s0wR4rEcZAsvT6cy 8 | tSW39MKZbFRtdFPIv 9 | QVCLiORKGe4SlyHYR 10 | iFaLGCxbQNahEKglL 11 | kvp4MLvaYhi0s9RbH 12 | bQ7P6fIOhWKcXg4n7 13 | ZqRT9GfhY2U4bap3P 14 | SL5LTQ7dyeYKJt2pu 15 | 8ZfTCjDT2Tv5XN5MY 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0406.cfg: -------------------------------------------------------------------------------- 1 | 0405040703060506 2 | Eezz9uWYuULZzaBmL 3 | Uvt0NeyMC5DjCwUTW 4 | dgx1Md3pI0tJzUBkv 5 | B5Fj96wkoRRVYALaW 6 | vnBgqZM3htUw7LDYs 7 | VLfIvoW0aOiiE8WPw 8 | yveNYsTr2Cy3i0Oeq 9 | zEPAfyz7nc78vqUwn 10 | 8xeKtvCMkjC7FCxLa 11 | lWucz2w6RoTFjUQfe 12 | wW0uKhLGgYBLWqqMN 13 | KjVNnHbD2EFaE2LIm 14 | zNhU20nnHoGETJXr6 15 | UcAtRVwY3yqi7BQKB 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0407.cfg: -------------------------------------------------------------------------------- 1 | 0406----03070507 2 | MRDwUKCLTWPYoNu0y 3 | SdPPUkQ1zyDwMDfJz 4 | V4jmzeUocQeDeFCo6 5 | 74yYhjtQFG0CyJRU7 6 | wKod1c6akrKqCxwPG 7 | f58Zz52DAYQC8qkzz 8 | Qc67PWx7uQyosuxAv 9 | n63SaksXbjVmA5vCv 10 | s61oj2D2Fcihjlcoe 11 | gvhhi5lk5hHbDXbay 12 | GArCptBhC5tLZu2pA 13 | eq4DOg08akJrsq7RL 14 | zRiV6mLUCZysmsFL9 15 | kTPHptkjherx4Cg24 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0500.cfg: -------------------------------------------------------------------------------- 1 | ----050104000600 2 | vr53zqXoFUgsRX3NV 3 | ilabPRUxQevKIG2oX 4 | nAJzXmnTz9KY0HQQT 5 | tC4J8x7gwf35UCztA 6 | lGrxYNMvzIS3bxLG5 7 | IH0uLdXFAPkelpTwE 8 | jvqaB7YJm3XJ1VEnV 9 | iIOFfwfgnuhOorEHt 10 | 0j53lM800j8M8cCWs 11 | P8xTd573qIy9K4m2N 12 | gmD9eBFwQt7hQiW3P 13 | xqieoaMZbfCoMm2f5 14 | G2RnUm2oNXJf2tluL 15 | FlmXzGyc1WbMJvrwp 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0501.cfg: -------------------------------------------------------------------------------- 1 | 0500050204010601 2 | 22zFaqOa6Y0ysHzEC 3 | Ey79JrfGLXzsNm8oD 4 | tUhspcRh6eUgak1PO 5 | BmBDdF83Uc5cg6nSe 6 | OAYHQFPz13LE95ELd 7 | uRErFWEIZ7ku91N6b 8 | wfbkgl2ODKQXcDbiu 9 | CvBAJJNQ7KEReC6WZ 10 | JUGTiPCSpaqh1kVz2 11 | 5T2Ozg35tDJqzbEXO 12 | 72GL3uUB1vlYGuJVe 13 | N3U3IddfhSYLTVuRU 14 | cqXtfyGujJtcdUCyP 15 | LwGylTc4mc1SAvmmD 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0502.cfg: -------------------------------------------------------------------------------- 1 | 0501050304020602 2 | K4MhlScGzAIsqUxdg 3 | Dwdo9jhsdP40luTkK 4 | FuHGMlp7T5ND5QuxU 5 | xk6nvDt3bvJ0EVkGI 6 | TuELOxyS8rdH8070w 7 | S54cGgskdiFJk3MYi 8 | tUTo1U89gk0Asx1GT 9 | EBWDgzve6qkvfY8Hy 10 | V2OiYOgWqo4BJ2fpP 11 | t2f668zZvlR9q6TA0 12 | gN08bzRVXAwQ2vo05 13 | J2r6o1GDDCC5tXIBX 14 | oWSdbISzzryO5VSMo 15 | n1VyZ37qpF5xqAL1S 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0503.cfg: -------------------------------------------------------------------------------- 1 | 0502050404030603 2 | PgIQEQfoXRDsSKlxv 3 | euQhfExpHhEEQqhTI 4 | fjIg7iZJmRzWtLkxl 5 | ioFJd7WFILXNWgtwe 6 | AlRdjN2W2Men9Zzje 7 | f1eVzEu1OXhdLcCNi 8 | V1kPrvLyTMrPKBVcO 9 | kWoOnNWv9u2vPQjTd 10 | 1yRbpYoMwBaHt3GRw 11 | hW7fx77smHRAM8YYe 12 | G0WGs0mZHJZakXWJg 13 | uGzer0zvKiDhMSred 14 | yQZ6TNjfijYF0L6SY 15 | kx4qcXJa6E3SK6LRO 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0504.cfg: -------------------------------------------------------------------------------- 1 | 0503050504040604 2 | JJlE32Dvt6cvaY52h 3 | wJAY9zMkuTmFpW7Ls 4 | YW4fpSTV1cTZnwqcf 5 | JTUZfcI2Kz6ueBAyo 6 | Mmd1rsNjks73472C7 7 | fJqjCklkHdm7Iblah 8 | j5DzZUs9O64EvJNli 9 | fQmSUZ1hBFWcNS27S 10 | Uktxfxi8kk2jHUfcr 11 | WgRuKUDQrztCnl6fI 12 | 4x1zLVIbKxa5YUspK 13 | aZF5V5bMfGF02BwC8 14 | NvIBezQAiCoF5PUMJ 15 | 3HtLxUmh4xCwHoLDI 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0505.cfg: -------------------------------------------------------------------------------- 1 | 0504050604050605 2 | aFF6x0I3vPq4gKlPd 3 | PeePXaH90DpQ6iNSE 4 | eptb0iW99sPbDlOxj 5 | B7fL0IFSlTvlekx6f 6 | 8EGTzl457objihgdf 7 | U7VE4su9ZdfdvXyiZ 8 | w5ktqV2Bu8vHSXkRf 9 | zlChMnq7Q2HYonBnV 10 | TW4FQvYAM033Gg3d5 11 | NENYWuDgKTZkKcEKo 12 | 2DFTrjjTOSXUOLfgG 13 | PWlvJsy4FXyAWiejH 14 | qnbla8ADzTlrqlAN5 15 | Eh4RImt4LZIJoQZ7V 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0506.cfg: -------------------------------------------------------------------------------- 1 | 0505050704060606 2 | 2Jxzh5DZ4E58ZnlZG 3 | MReVU9GhPxA9vZNMu 4 | 2qFfL6eNA9sEjfmWY 5 | SS9SGmwCrSLCqqipd 6 | r1alxdXaQBqpKNExO 7 | SvoZCnDLr5p3OWbCT 8 | GDxjpB5ZwMC2HwO1Q 9 | UBq4QqVfMbBtuXVgl 10 | 9kEjQAg9gHaqWpMTG 11 | A4ZwpzWvF0wXTgfwV 12 | fogvvhIMlkGEiDFgw 13 | mmLZrFsu2Luhv7moQ 14 | uEdYtTtsUGsQOd1DN 15 | i33oMj17qYF2td2mz 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0507.cfg: -------------------------------------------------------------------------------- 1 | 0506----04070607 2 | U1Aq4fV0jZhGyzLsT 3 | jhyynlmjUG97pvMh2 4 | grp0qn0w0JzemDWPQ 5 | wAPxTr2oCXgs73yAn 6 | NUgOO1OiIHYsXL0Wz 7 | yZ7zJZ2ODZFEl4VWR 8 | hNC9yvLpIFR5GAoXN 9 | uD9969ZCjLIfo7r8l 10 | rAvszRnt3qNMxqfB1 11 | HGSaEp39LnI9F2oZA 12 | C4EdQNq6RFxnyf5ri 13 | kSRjvgQiiwp92wwFf 14 | jl6U7mdrbLJVzimzO 15 | bmcIATSH3fUHMvZs8 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0600.cfg: -------------------------------------------------------------------------------- 1 | ----060105000700 2 | Vtc6SGNjWtc5ET22x 3 | YdSJOM4bz7UDSvq1o 4 | 7y9VBJQiNk7mJQHtI 5 | Urt1cLfP4shoF3aN8 6 | M6aDfAvRE6TnP1yJs 7 | raq1ZNzVclKK8BnKl 8 | ahBAdpajUvynY0b7Y 9 | Z6p3m3oQz9PT6v0FK 10 | esn695OBKFFFuahXi 11 | 5DqDS0ouEkr3gpuvH 12 | G3IL8nJMCr8qtBR83 13 | bx1RpRJARWbZBjI2X 14 | TuxSsOy2meYKoSrEV 15 | IoNQiWNQ3xQnEMVks 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0601.cfg: -------------------------------------------------------------------------------- 1 | 0600060205010701 2 | M5aypPYkUaFJheMpP 3 | raiXQ2WA6dkGhlAMK 4 | xinS6wSqFUvNDazGc 5 | 0nLeSCSxccHh0ryye 6 | GmR5yh1CB1lIoQDZ7 7 | BXHpHknNcI4Jb1LDo 8 | VvRmJauNx9edA7lsn 9 | IWNYeIq346SK0oKPU 10 | Orn6tziwocTqvfUOt 11 | mckI9ovw1XZUyBVWI 12 | PIHE5RLsLpczXpMfF 13 | fFRRDQOeSInwVMYb5 14 | OXPO9KzOp2GoWkAi9 15 | ROurbTj5nhpE51IUD 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0602.cfg: -------------------------------------------------------------------------------- 1 | 0601060305020702 2 | oZWBzXKUhvArFZUdH 3 | bfZkhPULV3NemQQBV 4 | DETRGAVxc6cZ8M3SQ 5 | yxzMRdv8pH35S6DJT 6 | GTmUF1No7M0hN9UuR 7 | gAwlfXXRidvUNOWGR 8 | IKJzYshRIKIZuF6Ai 9 | i7it0RVjq7LP5Xz0q 10 | PehZUBwiRuIQvretq 11 | Yejq2qQhwVbvgd60S 12 | yxrjdylFpL4o3jyNs 13 | cUYLz79yLiDraWjCZ 14 | xZLdDLzOT5dWYgzGm 15 | gyCCJPRbfj9UWpGSG 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0603.cfg: -------------------------------------------------------------------------------- 1 | 0602060405030703 2 | X6mRYsXEj4AMgwUZt 3 | pWoPeCisbkVVeoDes 4 | dcWafi673LGZFw9z3 5 | MmGVEfJwItPDhwBHM 6 | ue70FRMqS6RTWHN8Z 7 | jdcjDXixDyClnDPy3 8 | vvtEvrDvKbZdy7djf 9 | BPaEPaNx5QAtHojLU 10 | o4K8KCMLslBXOr6bG 11 | CFhXXx9b2y1Kp0bkD 12 | 8G2o9U9rJWMW7HZFA 13 | yuz2VesNPNhDkMU1i 14 | W1NKQL15ev04v2W0b 15 | L2CyEizDkEyRFJ0cY 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0604.cfg: -------------------------------------------------------------------------------- 1 | 0603060505040704 2 | 7h2gJKGnLU1kPPJDQ 3 | DFHPAAYcQNVp8DrN6 4 | k0irQPUkzOhJ63qrK 5 | NmOWZu6C63ALg80jb 6 | AyPAATJXjQCXRG7B1 7 | eG5qseMeMbqLOJXUO 8 | HHk7quZfO3UsvVWGV 9 | TnW1s6Mavs2OEItiC 10 | ylLaMMDe7ZU9ReRbI 11 | H3wc4glb5MjIDGezF 12 | UPSObcj0B8Zx2eos0 13 | AJIb4fDTtcZuGu7UH 14 | ZMXD1M2HgPzLxrJbM 15 | h4cAdGXNFnt8nFlbM 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0605.cfg: -------------------------------------------------------------------------------- 1 | 0604060605050705 2 | tQTkiJehraFTjYAI3 3 | ayonxekUL79n1T4Ni 4 | F3Yj0xXpi9ZBsCTOo 5 | 49bZxKRRBTkDxwyz0 6 | n1y4J2IdKycAdKDyQ 7 | CUJYFI821dCVpjJcU 8 | Yi2LDeLjdjBbjR01b 9 | 6qGd3f7cqpXszBOzP 10 | SyEuHz08DoeJmIhgD 11 | r1USwmjSaUNg7BCu1 12 | 5TeVrufxpXl3oG5gc 13 | 0S0FE1va7y15OqFLD 14 | D42uqT9vhVlDpZTNf 15 | XqLbgQwQqVZNkmshX 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0606.cfg: -------------------------------------------------------------------------------- 1 | 0605060705060706 2 | jwaW1BC5wah0NmSN1 3 | l4ohMY1ICx1y48cm7 4 | ukon969oGPrxGC59L 5 | zKQefViTdToO4eJ22 6 | AIWWQKF6tzNDmKg7F 7 | WEFMRoPNIAXxxO2NN 8 | hXl3w5W0i6RB6G5ww 9 | nHBRODb08wh73fyLE 10 | gzicJbXp8syzinuZA 11 | ebskdzQrFO4IX3QJg 12 | CcYXYScsJH3BcCk0j 13 | pB4pqXZSE1YWICjxS 14 | iZ3ecRjdxVs8yr0cK 15 | p5UTHf0LJ4eUtS9xb 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0607.cfg: -------------------------------------------------------------------------------- 1 | 0606----05070707 2 | E6OubqwBFT465U5J9 3 | HPgDNE44FLFpN1x1z 4 | tr0rrkW4EVFXLoUdu 5 | YdEjc2shb2DOVJXo8 6 | rgMwfqNuzImDH5u0x 7 | l9qvjZTaC7qhyWR4P 8 | 7Iu43g6NZD20xovBD 9 | 4bDqKljmpbyrTeb96 10 | YfdDDfNqlLTEOKomD 11 | vqdoymzEcM44g2zAk 12 | culnnlvWVABTIAoS9 13 | i7o8mCt8JCRyIyGjw 14 | OPjyvFTQtjDAKnad7 15 | vwvRkTdcS6Kge2EDl 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0700.cfg: -------------------------------------------------------------------------------- 1 | ----07010600---- 2 | lWzwSiEJlDLozhvhQ 3 | 37JQjAV7FJ47Ert3T 4 | PlLKvKWFagPIjKaQN 5 | uLiEwXhRd2gaJHCTC 6 | GC4Ntms2pMaiOk6kW 7 | k1skEHu4Km9LbWOmM 8 | eX7iz8cNXA3ta8VgK 9 | f717DuD80X1RJDhlG 10 | 3rL0KfkcS7cXQHMx5 11 | hfv2v5az6XvJK6ZwN 12 | ukav7xueTe0xC25K7 13 | IwKIoFZwovlk8RLVE 14 | 90baXw2oFcmsNMoFg 15 | YeFpAC02O2NrNWbB2 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0701.cfg: -------------------------------------------------------------------------------- 1 | 070007020601---- 2 | K4jRjksgKEqVr0aY5 3 | l0qjnZj4xALr4j5In 4 | DDdmoXFTDs9CPC8aU 5 | dtaPudqt8npRu9up6 6 | aBgFv04ouNCQDU8gz 7 | NSkbKJV444axtOvUn 8 | 1N2FgQTCZ0WcDT1v8 9 | kiIq7y5WnemeSfmDV 10 | cDlTyXfsv9O8Tu11K 11 | WM1svlBTwgwwmdqgK 12 | hsHM4rbbNbxv5TkhA 13 | u8X9AuZZx2CUWZAIT 14 | Mr4m4BGIL3jaJwvHc 15 | GlItmsHWHW0MV7QIh 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0702.cfg: -------------------------------------------------------------------------------- 1 | 070107030602---- 2 | teM0R9HlirJp8Lm6t 3 | T1E5LoHHDUtuXZDKs 4 | deVrLBQjl941qpu2Q 5 | C63dDlSXSQy92KMbV 6 | IcjwA2sGPENl3CWKE 7 | bFOGlZ3qj9Jk4zzOL 8 | MeHYhqeV3UVc0Wveu 9 | yRyTLIqn7mfwA1sU7 10 | 53wQ5L9TDEwRwjp1f 11 | VGV6C04pr1jZIgX7Y 12 | vqgULds8fUWQr63D0 13 | R9i5b4BG2KWX2AWAu 14 | VKc0NSP5NT1mGDQY5 15 | qZvMAqoJJHuklxnL9 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0703.cfg: -------------------------------------------------------------------------------- 1 | 070207040603---- 2 | sNtaG3HTGfD32QnzV 3 | k5gAKQaaVDgZAmcJU 4 | bdio1VdraToNqzIlq 5 | 1iOpBSvgguB6U35O3 6 | qviNG0SePe5vnihcj 7 | z4AFi518Wu2A03Ht7 8 | ptlBsBqFmxsS31ftS 9 | DtYsouJo3MYCWogXb 10 | sR3qFMDxXjt4ml5dJ 11 | TlFkP64EZb3OmyG35 12 | 50nsmDjvR5SneICPj 13 | EMC552o0M43L4rpf2 14 | YWeQ32aN53xiWZf6L 15 | lbJOHV2GQ7XCkMiDe 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0704.cfg: -------------------------------------------------------------------------------- 1 | 070307050604---- 2 | 9jtl5jzsXCeZVJImT 3 | cplEipqVXJfTVsnZu 4 | F59rZ2W6egqDkc33c 5 | lxkvS0EXpL5gyOnti 6 | GqgS8pnC84mWse81I 7 | d17F9zFl4iSFZwHO8 8 | ZuKJOAHLIt0veOFoX 9 | jPazxqCHORnRkYMRy 10 | ED7gxXdMIneGw7z1e 11 | BsJABjD7tk9wE9MO4 12 | 41ErnbCifGDZ7PEOC 13 | 6HYvZSeJcg5dd5okq 14 | nT1tSBVRTdG9TKd4Z 15 | BuXbJ5gtAii9Uf2Zx 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0705.cfg: -------------------------------------------------------------------------------- 1 | 070407060605---- 2 | isjbGCZjftrs0FtiC 3 | lOSXF4khKfPenDwxZ 4 | YwO4zx02k58k5j4z4 5 | DLYD0aUibsohYi8mM 6 | FCXOUvNKorcQr7e89 7 | jqVOnyYXaMxoTGHxt 8 | mo0Ahvy91O1Qo2gdp 9 | rU9X713TrnzppEEwv 10 | VdwBTMqUnV0ttkzAK 11 | XsA8Nx3WOpb1p6dtD 12 | vVFfWpxQSw0fB4Ztv 13 | Mmd8zywhGU8ntpSlO 14 | Rg1wwTzb2EK3I7Gr0 15 | 07r3YKB76Xo6x1Llv 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0706.cfg: -------------------------------------------------------------------------------- 1 | 070507070606---- 2 | kEGaItTUN6p4VMYta 3 | RvzYayUH3zvJE8uV7 4 | iXa0Zdnpe5T2pMDI6 5 | zO3TGSbUQgBHabaHn 6 | JIKflmS76XuqOjD4u 7 | THbRIr0y68D8CZjLY 8 | MbPlwuBQCnbdGEoTU 9 | 2qHzMUAmhonwwLP7d 10 | fWR1d9dDeUAouN915 11 | 3lLoYkugVvwI7Ffoi 12 | ttmckWEDEPIL67LMl 13 | jby0UCSmKOrNo0HF3 14 | rfvKlITA1OW0dc9qj 15 | Iva6h5zRt3tkGdL8h 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/cm/cm0707.cfg: -------------------------------------------------------------------------------- 1 | 0706----0607---- 2 | oZNRIQxp6WE5j9WVa 3 | 5MltsWdXyWWtWYmC6 4 | IV6Kh011xyEp7AI0Z 5 | aoBHGDzH7kfKzf07a 6 | n3ttdRiVEn9BN5aKt 7 | RmMMm4nkMBqDvUJ2A 8 | PxieEGxgUXYmhzsPD 9 | PPBXQlr8nTJ0ghoDG 10 | ztLumYMAQtW7a6MZD 11 | NqlkIPWiHSUMVgOg9 12 | XGOhebu9EMIyb6k2x 13 | Wrx6JfPgP5TEi7Kry 14 | cWeqZZjgevSpOAGIn 15 | TO2KipEUH0VwCfuGi 16 | -------------------------------------------------------------------------------- /ccccmaze/story/gen/maze.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | namespace=$1 4 | size=$2 5 | data=$3 6 | 7 | # debug this script 8 | rm -rf ${namespace} 9 | 10 | mkdir -p ${namespace} 11 | for ((i=0;i> ${fn} 49 | for ((z=0;z> ${fn} 52 | done 53 | echo ${fn} 54 | done 55 | done -------------------------------------------------------------------------------- /ccccmaze/usage.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | //# MENU usage 6 | void usage_menu(){ 7 | uint32_t read_count; 8 | 9 | lcdClear(); 10 | getInputWaitRelease(); 11 | 12 | /* 13 | * todo: load text from file 14 | */ 15 | getInputWaitRelease(); 16 | lcdClear(); 17 | lcdPrintln("cccc 2015 maze"); 18 | lcdPrintln(""); 19 | lcdPrintln("use cursor to"); 20 | lcdPrintln("move up and down"); 21 | lcdPrintln("switch off to end"); 22 | lcdPrintln(""); 23 | lcdPrintln("fork on GH and"); 24 | lcdPrintln("contribute!"); 25 | lcdPrintln(""); 26 | lcdPrintln("https://github.com/"); 27 | lcdPrintln("rad1o/f1rmware"); 28 | lcdDisplay(); 29 | while (1){ 30 | switch(getInput()){ 31 | case BTN_UP: 32 | case BTN_DOWN: 33 | case BTN_LEFT: 34 | case BTN_RIGHT: 35 | case BTN_ENTER: 36 | return; 37 | break; 38 | }; 39 | } 40 | return; 41 | }; 42 | -------------------------------------------------------------------------------- /ccccmaze/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef __debug_h_ 2 | #define __debug_h_ 3 | //# ifdef DEBUG 4 | #include 5 | #include 6 | #include 7 | 8 | //# endif 9 | /** 10 | * utilities to make c-code readable 11 | */ 12 | 13 | /** 14 | * print some text 15 | */ 16 | void debug(const char* text){ 17 | //# ifdef DEBUG 18 | lcdPrintln(""); 19 | lcdPrint("debug:"); 20 | lcdPrintln(text); 21 | lcdPrintln(""); 22 | lcdDisplay(); 23 | //# endif 24 | } 25 | #endif 26 | -------------------------------------------------------------------------------- /dac/Makefile: -------------------------------------------------------------------------------- 1 | APP=main 2 | 3 | # our code 4 | OBJS = dac-test.o 5 | OBJS += ../rad1olib/setup.o 6 | 7 | CFLAGS=-Wno-unused-variable -DRAD1O 8 | 9 | RPATH=.. 10 | include ../Makefile.inc 11 | 12 | 13 | -------------------------------------------------------------------------------- /default.nix: -------------------------------------------------------------------------------- 1 | with import {}; { 2 | env = stdenv.mkDerivation { 3 | name = "rad1o-f1rmware-env"; 4 | buildInputs = [ 5 | gcc-arm-embedded 6 | python2 7 | python2Packages.pyyaml 8 | gcc-arm-embedded 9 | vim 10 | perl 11 | git 12 | dfu-util 13 | cmake 14 | libusb 15 | cacert 16 | ]; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /doc/debugging.md: -------------------------------------------------------------------------------- 1 | ## Debugging 2 | There is no easy way to debug the code while it runs on the board, but the board has 4 LEDs which can be used to display the current status of a program. 3 | 4 | #include "pins.h" 5 | ... 6 | #define LED1 P4_1, SCU_CONF_FUNCTION0, GPIO2, GPIOPIN1, clear 7 | #define LED2 P4_2, SCU_CONF_FUNCTION0, GPIO2, GPIOPIN2, clear 8 | #define LED3 P6_12, SCU_CONF_FUNCTION0, GPIO2, GPIOPIN8, clear 9 | #define LED4 PB_6, SCU_CONF_FUNCTION4, GPIO5, GPIOPIN26, clear 10 | ... 11 | SETUPgout(LED1); 12 | SETUPgout(LED2); 13 | SETUPgout(LED3); 14 | SETUPgout(LED4); 15 | ... 16 | TOGGLE(LED1); 17 | TOGGLE(LED2); 18 | TOGGLE(LED3); 19 | TOGGLE(LED4); 20 | 21 | ## USB serial 22 | You can use usb serial to output text while running. Check testapp/cdc.c for a rudimentary example 23 | -------------------------------------------------------------------------------- /fatfs/00readme.txt: -------------------------------------------------------------------------------- 1 | FatFs Module Source Files R0.11 2 | 3 | 4 | FILES 5 | 6 | 00readme.txt This file. 7 | history.txt Revision history. 8 | ffconf.h Configuration file for FatFs module. 9 | ff.h Common include file for FatFs and application module. 10 | ff.c FatFs module. 11 | diskio.h Common include file for FatFs and disk I/O module. 12 | diskio.c An example of glue function to attach existing disk I/O module to FatFs. 13 | integer.h Integer type definitions for FatFs. 14 | option Optional external functions. 15 | 16 | 17 | Low level disk I/O module is not included in this archive because the FatFs 18 | module is only a generic file system layer and not depend on any specific 19 | storage device. You have to provide a low level disk I/O module that written 20 | to control the target storage device. 21 | 22 | -------------------------------------------------------------------------------- /fatfs/integer.h: -------------------------------------------------------------------------------- 1 | /*-------------------------------------------*/ 2 | /* Integer type definitions for FatFs module */ 3 | /*-------------------------------------------*/ 4 | 5 | #ifndef _FF_INTEGER 6 | #define _FF_INTEGER 7 | 8 | #ifdef _WIN32 /* FatFs development platform */ 9 | 10 | #include 11 | #include 12 | 13 | #else /* Embedded platform */ 14 | 15 | /* This type MUST be 8 bit */ 16 | typedef unsigned char BYTE; 17 | 18 | /* These types MUST be 16 bit */ 19 | typedef short SHORT; 20 | typedef unsigned short WORD; 21 | typedef unsigned short WCHAR; 22 | 23 | /* These types MUST be 16 bit or 32 bit */ 24 | typedef int INT; 25 | typedef unsigned int UINT; 26 | 27 | /* These types MUST be 32 bit */ 28 | typedef long LONG; 29 | typedef unsigned long DWORD; 30 | 31 | #endif 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /feldtest/Makefile: -------------------------------------------------------------------------------- 1 | APP=feldtest 2 | 3 | # our code 4 | OBJS = main.o 5 | OBJS += feldtest.o 6 | OBJS += ../rad1olib/setup.o 7 | OBJS += ../r0ketlib/display.o 8 | OBJS += ../r0ketlib/render.o 9 | OBJS += ../r0ketlib/fonts/smallfonts.o 10 | OBJS += ../r0ketlib/print.o 11 | OBJS += ../r0ketlib/itoa.o 12 | OBJS += ../r0ketlib/keyin.o 13 | OBJS += ../r0ketlib/menu.o 14 | OBJS += ../rad1olib/spi-flash.o 15 | OBJS += ../rad1olib/assert.o 16 | OBJS += ../rad1olib/systick.o 17 | OBJS += msc_desc.o 18 | OBJS += msc_main.o 19 | OBJS += msc_ram.o 20 | OBJS += ../hackrf-old/firmware/common/si5351c.o 21 | OBJS += ../hackrf-old/firmware/common/usb.o 22 | OBJS += ../fatfs/diskio.o 23 | OBJS += ../fatfs/ff.o 24 | OBJS += ../r0ketlib/select.o 25 | OBJS += ../r0ketlib/idle.o 26 | OBJS += ../r0ketlib/fs_util.o 27 | OBJS += ../r0ketlib/decoder.o 28 | 29 | CFLAGS=-Wno-unused-variable -DRAD1O -DLPC43XX_M4 30 | OBJS += ../hackrf-old/firmware/common/w25q80bv.o 31 | OBJS += ../hackrf-old/firmware/common/max2871.o 32 | #OBJS += ../hackrf-old/firmware/common/max2871_regs.o 33 | 34 | LDSCRIPT=../ld/app.ld 35 | RPATH=.. 36 | include ../Makefile.inc 37 | -------------------------------------------------------------------------------- /feldtest/feldtest.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "feldtest.h" 3 | 4 | #define FUNC (SCU_GPIO_NOPULL) 5 | 6 | #define SETUP(foo) scu_pinmux(foo ## _PIN,FUNC|foo ## _FUNC); \ 7 | GPIO_DIR(foo ## _GPORT) |= foo ## _GPIN; 8 | 9 | void feldInit(){ 10 | 11 | scu_pinmux(BY_AMP_PIN,FUNC|BY_AMP_FUNC); 12 | GPIO_DIR(BY_AMP_GPORT) |= BY_AMP_GPIN; 13 | 14 | scu_pinmux(BY_AMP_N_PIN,FUNC|BY_AMP_N_FUNC); 15 | GPIO_DIR(BY_AMP_N_GPORT) |= BY_AMP_N_GPIN; 16 | 17 | SETUP(TX_AMP); 18 | SETUP(RX_LNA); 19 | 20 | scu_pinmux(TX_RX_PIN,FUNC|TX_RX_FUNC); 21 | GPIO_DIR(TX_RX_GPORT) |= TX_RX_GPIN; 22 | 23 | scu_pinmux(TX_RX_N_PIN,FUNC|TX_RX_N_FUNC); 24 | GPIO_DIR(TX_RX_N_GPORT) |= TX_RX_N_GPIN; 25 | 26 | scu_pinmux(BY_MIX_PIN,FUNC|BY_MIX_FUNC); 27 | GPIO_DIR(BY_MIX_GPORT) |= BY_MIX_GPIN; 28 | 29 | SETUP(BY_MIX_N); 30 | 31 | scu_pinmux(LOW_HIGH_FILT_PIN,FUNC|LOW_HIGH_FILT_FUNC); 32 | GPIO_DIR(LOW_HIGH_FILT_GPORT) |= LOW_HIGH_FILT_GPIN; 33 | 34 | scu_pinmux(LOW_HIGH_FILT_N_PIN,FUNC|LOW_HIGH_FILT_N_FUNC); 35 | GPIO_DIR(LOW_HIGH_FILT_N_GPORT) |= LOW_HIGH_FILT_N_GPIN; 36 | 37 | scu_pinmux(CS_VCO_PIN,FUNC|CS_VCO_FUNC); 38 | GPIO_DIR(CS_VCO_GPORT) |= CS_VCO_GPIN; 39 | 40 | 41 | SETUP(MIXER_EN); 42 | #define OFF(foo) gpio_clear(foo ## _GPORT,foo ## _GPIN); 43 | #define ON(foo) gpio_set(foo ## _GPORT,foo ## _GPIN); 44 | 45 | gpio_clear(BY_MIX_GPORT,BY_MIX_GPIN); 46 | ON(BY_MIX_N); 47 | 48 | gpio_clear(BY_AMP_GPORT,BY_AMP_GPIN); 49 | gpio_set(BY_AMP_N_GPORT,BY_AMP_N_GPIN); 50 | 51 | gpio_clear(TX_RX_GPORT,TX_RX_GPIN); 52 | gpio_set(TX_RX_N_GPORT,TX_RX_N_GPIN); 53 | 54 | gpio_clear(LOW_HIGH_FILT_GPORT,LOW_HIGH_FILT_GPIN); 55 | gpio_set(LOW_HIGH_FILT_N_GPORT,LOW_HIGH_FILT_N_GPIN); 56 | 57 | gpio_clear(TX_AMP_GPORT,TX_AMP_GPIN); 58 | gpio_clear(RX_LNA_GPORT,RX_LNA_GPIN); 59 | 60 | gpio_clear(CS_VCO_GPORT,CS_VCO_GPIN); 61 | 62 | OFF(MIXER_EN); 63 | 64 | }; 65 | -------------------------------------------------------------------------------- /files/camp.lcd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/camp.lcd -------------------------------------------------------------------------------- /files/fahrplan.scd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/fahrplan.scd -------------------------------------------------------------------------------- /files/fairy.lcd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/fairy.lcd -------------------------------------------------------------------------------- /files/hkrf-old.b1n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/hkrf-old.b1n -------------------------------------------------------------------------------- /files/i42.lcd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/i42.lcd -------------------------------------------------------------------------------- /files/marker18.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/marker18.f0n -------------------------------------------------------------------------------- /files/orbit14.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/orbit14.f0n -------------------------------------------------------------------------------- /files/orbit32.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/orbit32.f0n -------------------------------------------------------------------------------- /files/pt18.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/pt18.f0n -------------------------------------------------------------------------------- /files/ptone18.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/ptone18.f0n -------------------------------------------------------------------------------- /files/rad1o.lcd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/rad1o.lcd -------------------------------------------------------------------------------- /files/sample.an1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/sample.an1 -------------------------------------------------------------------------------- /files/security.dac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/security.dac -------------------------------------------------------------------------------- /files/soviet18.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/soviet18.f0n -------------------------------------------------------------------------------- /files/soviet26.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/soviet26.f0n -------------------------------------------------------------------------------- /files/soviet38.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/soviet38.f0n -------------------------------------------------------------------------------- /files/ubuntu18.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/ubuntu18.f0n -------------------------------------------------------------------------------- /files/ubuntu29.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/ubuntu29.f0n -------------------------------------------------------------------------------- /files/ubuntu36.f0n: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/ubuntu36.f0n -------------------------------------------------------------------------------- /files/welfare.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/files/welfare.mod -------------------------------------------------------------------------------- /flashapp/Makefile: -------------------------------------------------------------------------------- 1 | APP=flashapp 2 | 3 | # our code 4 | OBJS = 5 | OBJS += ../rad1olib/setup.o 6 | OBJS += ../r0ketlib/display.o 7 | OBJS += ../r0ketlib/render.o 8 | OBJS += ../r0ketlib/fonts/smallfonts.o 9 | OBJS += ../r0ketlib/fonts/orbitron14.o 10 | OBJS += ../r0ketlib/fonts/ubuntu18.o 11 | OBJS += ../r0ketlib/decoder.o 12 | OBJS += ../r0ketlib/print.o 13 | OBJS += ../r0ketlib/itoa.o 14 | OBJS += ../r0ketlib/keyin.o 15 | OBJS += ../r0ketlib/menu.o 16 | OBJS += ../rad1olib/spi-flash.o 17 | OBJS += ../rad1olib/assert.o 18 | OBJS += ../rad1olib/systick.o 19 | OBJS += ../hackrf-old/firmware/common/si5351c.o 20 | OBJS += ../fatfs/diskio.o 21 | OBJS += ../fatfs/ff.o 22 | OBJS += ../r0ketlib/select.o 23 | OBJS += ../r0ketlib/idle.o 24 | OBJS += ../r0ketlib/fs_util.o 25 | OBJS += msc/msc_desc.o 26 | OBJS += msc/msc_main.o 27 | OBJS += msc/msc_ram.o 28 | OBJS += ../lpcapi/usbd_common.o # MUST be before hackrf usb.o, because of USB0_IRQ selection 29 | OBJS += ../hackrf-old/firmware/common/usb.o 30 | OBJS += ../lpcapi/cdc/cdc_desc.o 31 | OBJS += ../lpcapi/cdc/cdc_main.o 32 | OBJS += ../lpcapi/cdc/cdc_vcom.o 33 | 34 | # CPLD 35 | OBJS += ../hackrf-old/firmware/common/xapp058/micro.o 36 | OBJS += ../hackrf-old/firmware/common/xapp058/ports.o 37 | OBJS += ../hackrf-old/firmware/common/xapp058/lenval.o 38 | OBJS += ../hackrf-old/firmware/common/cpld_jtag.o 39 | 40 | OBJS += main.o 41 | 42 | CFLAGS=-Wno-unused-variable -DRAD1O -DLPC43XX_M4 -Werror 43 | OBJS += ../hackrf-old/firmware/common/w25q80bv.o 44 | OBJS += ../hackrf-old/firmware/common/max2871.o 45 | 46 | 47 | LDSCRIPT=../ld/app.ld 48 | RPATH=.. 49 | include ../Makefile.inc 50 | 51 | CPLDFILE=xsvf.inc 52 | main.o: $(CPLDFILE) 53 | 54 | xsvf.inc: 55 | cat ../hackrf-old/firmware/cpld/sgpio_if/default.xsvf |xxd -i > $(CPLDFILE) 56 | 57 | clean:: 58 | $(RM) $(CPLDFILE) 59 | -------------------------------------------------------------------------------- /flashapp/msc/msc_main.h: -------------------------------------------------------------------------------- 1 | int MSCenable(void); 2 | void MSCdisable(void); 3 | -------------------------------------------------------------------------------- /hackrf.patch: -------------------------------------------------------------------------------- 1 | diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c 2 | index acd8ba5d..a0604c48 100644 3 | --- a/firmware/hackrf_usb/hackrf_usb.c 4 | +++ b/firmware/hackrf_usb/hackrf_usb.c 5 | @@ -241,6 +241,7 @@ int main(void) 6 | cpu_clock_init(); 7 | 8 | /* Wake the M0 */ 9 | + ipc_halt_m0(); 10 | ipc_start_m0((uint32_t) &__ram_m0_start__); 11 | 12 | if (!cpld_jtag_sram_load(&jtag_cpld)) { 13 | -------------------------------------------------------------------------------- /l0dables/.gitignore: -------------------------------------------------------------------------------- 1 | usetable.h 2 | jumptable.c 3 | jumptable.h 4 | *.c1d 5 | *.n1k 6 | -------------------------------------------------------------------------------- /l0dables/EXPORTS: -------------------------------------------------------------------------------- 1 | delayNop 2 | getInput 3 | getInputRaw 4 | getInputWait 5 | getInputWaitRelease 6 | gpio_clear 7 | gpio_set 8 | gpio_toggle 9 | IntToStr 10 | lcdDisplay 11 | lcdNl 12 | lcdPrint 13 | lcdPrintln 14 | lcdSetCrsr 15 | _timectr 16 | lcdFill 17 | getInputWaitTimeout 18 | Font_7x8 19 | setIntFont 20 | lcdSetPixel 21 | DoChar 22 | setTextColor 23 | lcdShift 24 | nickname 25 | nickfont 26 | lcdClear 27 | setExtFont 28 | DoString 29 | getFontHeight 30 | lcdGetPixel 31 | delayms 32 | delayms_queue 33 | getRandom 34 | delayms_queue_plus 35 | the_config 36 | lcdShowAnim 37 | lcdShowImageFile 38 | f_read 39 | f_write 40 | f_open 41 | f_lseek 42 | lcd_select 43 | lcd_deselect 44 | lcdWrite 45 | ws2812_sendarray 46 | batteryCharging 47 | batteryGetVoltage 48 | drawHLine 49 | drawVLine 50 | drawRectFill 51 | readTextFile 52 | writeFile 53 | drawLine 54 | fsInfo 55 | fsUsage 56 | lcdGetCrsrY 57 | lcdMoveCrsr 58 | DoRect 59 | DoLine 60 | DoCube 61 | DoMesh 62 | getMeshSizes 63 | getMesh 64 | readFile 65 | work_queue 66 | -------------------------------------------------------------------------------- /l0dables/Makefile: -------------------------------------------------------------------------------- 1 | C1D=cube.c1d blinky.c1d invaders.c1d mandel.c1d snake.c1d snake2.c1d bricks.c1d schedule.c1d ws2812b.c1d battery.c1d fire.c1d colorp.c1d tetris.c1d sysinfo.c1d colors.c1d 0xb.c1d 2 | 3 | N1K=nick_scr0ll.n1k nick_w0rpcore.n1k nick_matrix.n1k nick_plain.n1k nick_invaders.n1k nick_anim.n1k nick_image.n1k nick_netz39.n1k nick_life.n1k nick_colplasm.n1k nick_ledbow.n1k 4 | 5 | TABLEFILES=jumptable.c jumptable.h usetable.h 6 | 7 | l0dables: usetable.h $(C1D) $(N1K) 8 | 9 | CFLAGS=-Wno-unused-variable -DRAD1O -DLPC43XX_M4 -DL0DABLE 10 | CFLAGS+=-mlong-calls # XXX: do we need those? 11 | 12 | LDSCRIPT=../ld/l0dable.ld 13 | RPATH=.. 14 | include ../Makefile.inc 15 | 16 | $(TABLEFILES): EXPORTS mktable.pl 17 | ./mktable.pl 18 | 19 | clean:: 20 | $(RM) $(TABLEFILES) 21 | $(RM) -f *.n1k *.c1d *.o *.elf 22 | # $(RM) $(C1D:%.c1d=%.o) $(C1D:%.c1d=%.elf) $(C1D) 23 | # $(RM) $(N1K:%.n1k=%.o) $(N1K:%.n1k=%.elf) $(N1K) 24 | -------------------------------------------------------------------------------- /l0dables/blinky.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 team rad1o 3 | * 4 | * This is a small sample for a l0dable 5 | * 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include "usetable.h" 14 | 15 | void ram(void){ 16 | lcdPrintln("l0dable-Test"); 17 | lcdDisplay(); 18 | 19 | lcdNl(); 20 | lcdDisplay(); 21 | while(1){ 22 | lcdSetCrsr(0,8*8); 23 | lcdPrint("ctr="); 24 | lcdPrint(IntToStr(_timectr/1000,5,F_LONG)); 25 | lcdDisplay(); 26 | switch(getInputRaw()){ 27 | case BTN_ENTER: 28 | return; 29 | case BTN_LEFT: 30 | TOGGLE(LED3); 31 | break; 32 | case BTN_RIGHT: 33 | TOGGLE(LED3); 34 | delayNop(10000000); 35 | break; 36 | case BTN_UP: 37 | ON(LED3); 38 | break; 39 | case BTN_DOWN: 40 | OFF(LED3); 41 | break; 42 | }; 43 | } 44 | getInputWaitRelease(); 45 | return; 46 | } 47 | -------------------------------------------------------------------------------- /l0dables/colorp.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 team rad1o 3 | * 4 | * This is a small sample for a l0dable 5 | * 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | #include "usetable.h" 12 | 13 | void ram(void){ 14 | int lineHeight = getFontHeight(); 15 | 16 | lcdClear(); 17 | for(int row = -1; row < 16; row++) 18 | { 19 | for(int col = 0; col < 16; col++) 20 | { 21 | if(col == -1) 22 | { 23 | lcdPrint(IntToStr(row, 1, F_HEX)); 24 | lcdMoveCrsr(1, 0); 25 | } 26 | else if(row == -1) 27 | { 28 | lcdPrint(IntToStr(col, 1, F_HEX)); 29 | lcdMoveCrsr(1, 0); 30 | } 31 | else 32 | { 33 | drawRectFill(1 + 8 * col, 7 * (row+1) + 1, 5, 5, (row << 4) + col); 34 | } 35 | } 36 | 37 | lcdNl(); 38 | } 39 | 40 | lcdDisplay(); 41 | getInputWait(); 42 | getInputWaitRelease(); 43 | return; 44 | } 45 | -------------------------------------------------------------------------------- /l0dables/cube.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/l0dables/cube.c -------------------------------------------------------------------------------- /l0dables/nick_anim.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include "usetable.h" 10 | 11 | void ram(void){ 12 | lcdShowAnim("nick.an1"); 13 | } 14 | -------------------------------------------------------------------------------- /l0dables/nick_image.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include "usetable.h" 10 | 11 | void ram(void){ 12 | if (lcdShowImageFile("nick.lcd") != 0) { 13 | lcdClear(); 14 | lcdNl(); 15 | lcdPrintln("File nick.lcd"); 16 | lcdPrintln("not present."); 17 | lcdNl(); 18 | lcdDisplay(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /l0dables/nick_plain.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include "usetable.h" 14 | 15 | void ram(void) { 16 | int dx=0; 17 | int dy=0; 18 | static uint32_t ctr=0; 19 | ctr++; 20 | 21 | setExtFont(GLOBAL(nickfont)); 22 | dx=DoString(0,0,GLOBAL(nickname)); 23 | dx=(RESX-dx)/2; 24 | if(dx<0) 25 | dx=0; 26 | dy=(RESY-getFontHeight())/2; 27 | 28 | lcdClear(); 29 | lcdFill(GLOBAL(nickbg)); 30 | setTextColor(GLOBAL(nickbg),GLOBAL(nickfg)); 31 | lcdSetCrsr(dx,dy); 32 | lcdPrint(GLOBAL(nickname)); 33 | lcdDisplay(); 34 | 35 | getInputWait(); 36 | setTextColor(0xFF,0x00); 37 | return; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /l0dables/ws2812b.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include "usetable.h" 12 | 13 | static void redraw(uint8_t brightness); 14 | 15 | //# MENU ws2812b 16 | void ram(void){ 17 | uint8_t brightness = 0; 18 | 19 | getInputWaitRelease(); 20 | 21 | SETUPgout(RGB_LED); 22 | 23 | while(1){ 24 | lcdClear(0xff); 25 | lcdPrintln("WS2812B LEDs"); 26 | lcdPrintln("UP: brighter"); 27 | lcdPrintln("DOWN: darker"); 28 | lcdPrintln("ENTER: exit"); 29 | lcdDisplay(); 30 | 31 | switch(getInput()){ 32 | case BTN_UP: 33 | if(brightness < 10) 34 | redraw(++brightness); 35 | break; 36 | case BTN_DOWN: 37 | if(brightness > 0) 38 | redraw(--brightness); 39 | break; 40 | case BTN_LEFT: 41 | break; 42 | case BTN_RIGHT: 43 | break; 44 | case BTN_ENTER: 45 | return; 46 | }; 47 | }; 48 | return; 49 | }; 50 | 51 | static void redraw(uint8_t brightness){ 52 | uint8_t pattern[] = { 53 | 255, 255, 0, 54 | 255, 255, 0, 55 | 56 | 0, 0, 255, 57 | 0, 0, 255, 58 | 0, 0, 255, 59 | 0, 0, 255, 60 | 0, 0, 255, 61 | 255, 0, 0 62 | }; 63 | 64 | for(uint8_t i=0; i> 4)) 15 | | TypeId | size | Description | Data | 16 | +---------+------+--------------------------+--------------------------+ 17 | | 0x10 | 0 | All LEDs and Display off | - | 18 | | 0x11 | 3 | All LEDs same Color | RGB | 19 | | 0x12 | 3 | Display Color | RGB | 20 | | 0x13 | 1 | Run LED animation Number | N | 21 | | 0x14 | 1 | Run Display animation No | N | 22 | | 0x15 | 4 | LED x Color | x RGB | 23 | | 0x1D | 24 | All LEDs different Color | RGBRGBRGBRGBRGBRGBRGBRGB | 24 | | 0x1E | - | - | - | 25 | | 0x1F | - | - | - | 26 | -------------------------------------------------------------------------------- /l0unge/l0ungel1cht.h: -------------------------------------------------------------------------------- 1 | #ifndef __L0UNGEL1CHT_H__ 2 | #define __L0UNGEL1CHT_H__ 3 | 4 | void l0ungel1cht(void); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ld/LPC4330_M4_memory.ld: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Michael Ossmann 3 | * Copyright 2012 Jared Boone 4 | * 5 | * This file is part of HackRF 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2, or (at your option) 10 | * any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; see the file COPYING. If not, write to 19 | * the Free Software Foundation, Inc., 51 Franklin Street, 20 | * Boston, MA 02110-1301, USA. 21 | */ 22 | 23 | /* Linker script for HackRF Jellybean/Jawbreaker (LPC4330, 1M SPI flash, 264K SRAM). */ 24 | 25 | MEMORY 26 | { 27 | /* rom is really the shadow region that points to SPI flash or elsewhere */ 28 | shadow (rx) : ORIGIN = 0x00000000, LENGTH = 128K 29 | ram_local1 (rwx) : ORIGIN = 0x10000000, LENGTH = 128K 30 | ram_l0dable(rwx) : ORIGIN = 0x10080000, LENGTH = 16K 31 | ram_local2 (rwx) : ORIGIN = 0x10084000, LENGTH = 48K 32 | ram_sleep (rwx) : ORIGIN = 0x10090000, LENGTH = 8K 33 | } 34 | 35 | INCLUDE ../ld/LPC43xx_M4_memory.ld 36 | -------------------------------------------------------------------------------- /ld/LPC43xx_M4_M0_image_from_text.ld: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Michael Ossmann 3 | * Copyright 2012 Jared Boone 4 | * 5 | * This file is part of HackRF 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2, or (at your option) 10 | * any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; see the file COPYING. If not, write to 19 | * the Free Software Foundation, Inc., 51 Franklin Street, 20 | * Boston, MA 02110-1301, USA. 21 | */ 22 | 23 | SECTIONS 24 | { 25 | .text : { 26 | PROVIDE(__m0_start__ = .); 27 | KEEP(*(.m0_bin*)); 28 | . = ALIGN(4); 29 | PROVIDE(__m0_end__ = .); 30 | } >rom 31 | } 32 | -------------------------------------------------------------------------------- /ld/LPC43xx_M4_memory.ld: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Michael Ossmann 3 | * Copyright 2012 Jared Boone 4 | * 5 | * This file is part of HackRF 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2, or (at your option) 10 | * any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; see the file COPYING. If not, write to 19 | * the Free Software Foundation, Inc., 51 Franklin Street, 20 | * Boston, MA 02110-1301, USA. 21 | */ 22 | 23 | MEMORY 24 | { 25 | /* Physical address in Flash used to copy Code from Flash to RAM */ 26 | rom_flash (rx) : ORIGIN = 0x80000000, LENGTH = 1M 27 | ram_m0 (rwx) : ORIGIN = 0x20000000, LENGTH = 28K 28 | ram_shared (rwx) : ORIGIN = 0x20007000, LENGTH = 4K 29 | ram_usb (rwx) : ORIGIN = 0x20008000, LENGTH = 32K 30 | /* ram_usb: USB buffer. Straddles two blocks of RAM 31 | * to get performance benefit of having two USB buffers addressable 32 | * simultaneously (on two different buses of the AHB multilayer matrix) 33 | */ 34 | } 35 | 36 | usb_bulk_buffer = ORIGIN(ram_usb); 37 | -------------------------------------------------------------------------------- /ld/l0dable.ld: -------------------------------------------------------------------------------- 1 | /* Generic linker script for LPC43XX targets using libopencm3. */ 2 | 3 | /* Memory regions must be defined in the ld script which includes this one. */ 4 | 5 | /* Define the entry point of the output file. */ 6 | ENTRY(ram) 7 | 8 | /* Define sections. */ 9 | SECTIONS 10 | { 11 | .hack (NOLOAD) : { /* hack to advance ">ram_local2" to the current offset */ 12 | KEEP(*(.jump)) 13 | _jumpsize = .; 14 | } >shadow 15 | 16 | .myhdr : { 17 | LONG(_jumpsize); 18 | LONG(ram); 19 | } >shadow 20 | 21 | .text : { 22 | *(.text*) /* Program code */ 23 | . = ALIGN(4); 24 | *(.rodata*) /* Read-only data */ 25 | . = ALIGN(4); 26 | } >ram_l0dable AT >shadow 27 | 28 | .ARM.extab : { 29 | *(.ARM.extab*) 30 | } >ram_l0dable AT >shadow 31 | 32 | /* exception index - required due to libgcc.a issuing /0 exceptions */ 33 | .ARM.exidx : { 34 | __exidx_start = .; 35 | *(.ARM.exidx*) 36 | __exidx_end = .; 37 | } >ram_l0dable AT >shadow 38 | 39 | .data : { 40 | _data = .; 41 | *(.data*) /* Read-write initialized data */ 42 | . = ALIGN(4); 43 | _edata = .; 44 | } >ram_l0dable AT >shadow 45 | 46 | .bss : { 47 | _bss = .; 48 | *(.bss*) /* Read-write zero initialized data */ 49 | *(COMMON) 50 | . = ALIGN(4); 51 | _ebss = .; 52 | } >ram_l0dable AT >shadow 53 | 54 | /* 55 | * The .eh_frame section appears to be used for C++ exception handling. 56 | * You may need to fix this if you're using C++. 57 | */ 58 | /DISCARD/ : { *(.eh_frame) } 59 | 60 | . = ALIGN(4); 61 | _end = .; 62 | } 63 | -------------------------------------------------------------------------------- /lpcapi/cdc/cdc_main.h: -------------------------------------------------------------------------------- 1 | void CDCenable(void); 2 | void CDCdisable(void); 3 | -------------------------------------------------------------------------------- /lpcapi/msc/msc_main.h: -------------------------------------------------------------------------------- 1 | int MSCenable(void); 2 | void MSCdisable(void); 3 | -------------------------------------------------------------------------------- /lpcapi/usbd.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/lpcapi/usbd.h -------------------------------------------------------------------------------- /lpcapi/usbd_common.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #define NOEXTERN 6 | #include 7 | #undef NOEXTERN 8 | 9 | static uint32_t g_ep0RxBusy = 0;/* flag indicating whether EP0 OUT/RX buffer is busy. */ 10 | 11 | /* EP0_patch part of WORKAROUND for artf45032. */ 12 | ErrorCode_t EP0_patch(USBD_HANDLE_T hUsb, void *data, uint32_t event) 13 | { 14 | switch (event) { 15 | case USB_EVT_OUT_NAK: 16 | if (g_ep0RxBusy) { 17 | /* we already queued the buffer so ignore this NAK event. */ 18 | return LPC_OK; 19 | } 20 | else { 21 | /* Mark EP0_RX buffer as busy and allow base handler to queue the buffer. */ 22 | g_ep0RxBusy = 1; 23 | } 24 | break; 25 | 26 | case USB_EVT_SETUP: /* reset the flag when new setup sequence starts */ 27 | case USB_EVT_OUT: 28 | /* we received the packet so clear the flag. */ 29 | g_ep0RxBusy = 0; 30 | break; 31 | } 32 | return g_Ep0BaseHdlr(hUsb, data, event); 33 | } 34 | 35 | /***************************************************************************** 36 | * Public functions 37 | ****************************************************************************/ 38 | 39 | /** 40 | * @brief Handle interrupt from USB0 41 | * @return Nothing 42 | */ 43 | #include 44 | #include 45 | #include 46 | void USB0_IRQHandler(void) { 47 | TOGGLE(LED1); 48 | USBD_API->hw->ISR(g_hUsb); 49 | } 50 | -------------------------------------------------------------------------------- /lpcapi/usbd_common.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #ifdef NOEXTERN 5 | #define EXTERN 6 | #else 7 | #define EXTERN extern 8 | #endif 9 | 10 | 11 | /***************************************************************************** 12 | * Private types/enumerations/variables 13 | ****************************************************************************/ 14 | EXTERN USBD_HANDLE_T g_hUsb; 15 | 16 | /* Endpoint 0 patch that prevents nested NAK event processing */ 17 | // uint32_t g_ep0RxBusy = 0;/* flag indicating whether EP0 OUT/RX buffer is busy. */ 18 | EXTERN USB_EP_HANDLER_T g_Ep0BaseHdlr; /* variable to store the pointer to base EP0 handler */ 19 | 20 | /***************************************************************************** 21 | * Public types/enumerations/variables 22 | ****************************************************************************/ 23 | EXTERN const USBD_API_T *g_pUsbApi; 24 | 25 | /***************************************************************************** 26 | * Private functions 27 | ****************************************************************************/ 28 | 29 | /* EP0_patch part of WORKAROUND for artf45032. */ 30 | ErrorCode_t EP0_patch(USBD_HANDLE_T hUsb, void *data, uint32_t event); 31 | 32 | #undef EXTERN 33 | -------------------------------------------------------------------------------- /musicapp/Makefile: -------------------------------------------------------------------------------- 1 | APP=musicapp 2 | 3 | # our code 4 | OBJS = 5 | OBJS += ../rad1olib/setup.o 6 | OBJS += ../r0ketlib/display.o 7 | OBJS += ../r0ketlib/render.o 8 | OBJS += ../r0ketlib/fonts/smallfonts.o 9 | OBJS += ../r0ketlib/decoder.o 10 | OBJS += ../r0ketlib/print.o 11 | OBJS += ../r0ketlib/itoa.o 12 | OBJS += ../r0ketlib/keyin.o 13 | OBJS += ../r0ketlib/menu.o 14 | OBJS += ../rad1olib/spi-flash.o 15 | OBJS += ../rad1olib/assert.o 16 | OBJS += ../rad1olib/systick.o 17 | OBJS += ../rad1olib/audio.o 18 | OBJS += ../fatfs/diskio.o 19 | OBJS += ../fatfs/ff.o 20 | OBJS += ../r0ketlib/select.o 21 | OBJS += ../r0ketlib/idle.o 22 | OBJS += ../r0ketlib/fs_util.o 23 | OBJS += ../r0ketlib/config.o 24 | OBJS += ../r0ketlib/night.o 25 | 26 | SRCS = $(wildcard *.c) 27 | SOBJS = $(foreach mod,$(SRCS),$(subst .c,.o,$(mod))) 28 | 29 | OBJS += $(SOBJS) 30 | 31 | CFLAGS=-Wno-unused-variable -DRAD1O -DLPC43XX_M4 32 | 33 | LDSCRIPT=app.ld 34 | RPATH=.. 35 | include ../Makefile.inc 36 | 37 | main.o: main.gen 38 | 39 | main.gen: $(SRCS) 40 | ../tools/mkfirmware.pl $(SRCS) > main.gen 41 | 42 | clean:: 43 | $(RM) main.gen 44 | -------------------------------------------------------------------------------- /musicapp/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of rad1o 3 | * 4 | */ 5 | 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | 18 | #include 19 | 20 | #include "main.gen" 21 | 22 | void ram(void); 23 | 24 | void sys_tick_handler(void){ 25 | incTimer(); 26 | generated_tick(); 27 | }; 28 | 29 | int main(void) { 30 | cpuClockInit(); /* CPU Clock is now 104 MHz */ 31 | systickInit(); 32 | 33 | // cpu_clock_set(204); 34 | 35 | SETUPgout(EN_VDD); 36 | SETUPgout(MIXER_EN); 37 | SETUPgout(MIC_AMP_DIS); 38 | 39 | SETUPgout(LED1); 40 | SETUPgout(LED2); 41 | SETUPgout(LED3); 42 | SETUPgout(LED4); 43 | 44 | inputInit(); 45 | lcdInit(); 46 | fsInit(); 47 | lcdFill(0xff); 48 | readConfig(); 49 | 50 | generated_init(); 51 | 52 | while(1) { 53 | handleMenu(&menu_main); 54 | getInputWaitRelease(); 55 | } 56 | return 0; 57 | } 58 | -------------------------------------------------------------------------------- /portalib/README: -------------------------------------------------------------------------------- 1 | These files have been taken from the original portapck 2 | repo on github that as since been removed. 3 | 4 | They have been heavily hacked to fit our needs. 5 | 6 | -------------------------------------------------------------------------------- /portalib/fft.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #ifndef __FFT_H__ 23 | #define __FFT_H__ 24 | 25 | void fft_c_preswapped(float* data, unsigned long nn); 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /portalib/filters.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #ifndef __FILTERS_H__ 23 | #define __FILTERS_H__ 24 | 25 | #include 26 | 27 | extern const int16_t taps_64_lp_156_198[64]; 28 | extern const int16_t taps_64_lp_031_063[64]; 29 | 30 | #endif/*__FILTERS_H__*/ 31 | -------------------------------------------------------------------------------- /portalib/fxpt_atan2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #ifndef __FXPT_ATAN2_H__ 23 | #define __FXPT_ATAN2_H__ 24 | 25 | #include 26 | 27 | int16_t fxpt_atan2(const int32_t y, const int32_t x); 28 | 29 | #endif/*__FXPT_ATAN2_H__*/ 30 | -------------------------------------------------------------------------------- /portalib/portapack_state.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #include "portapack_driver.h" 23 | 24 | #include 25 | #include 26 | #include 27 | 28 | int8_t* const sample_buffer_0 = (int8_t*)0x20008000; 29 | int8_t* const sample_buffer_1 = (int8_t*)0x2000c000; 30 | device_state_t* const device_state = (device_state_t*)0x20007000; 31 | uint8_t* const ipc_m4_buffer = (uint8_t*)0x20007c00; 32 | uint8_t* const ipc_m0_buffer = (uint8_t*)0x20007800; 33 | //const size_t ipc_m4_buffer_size = 1024; 34 | //const size_t ipc_m0_buffer_size = 1024; 35 | -------------------------------------------------------------------------------- /portalib/rx_am.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #ifndef __RX_AM_H__ 23 | #define __RX_AM_H__ 24 | 25 | #include 26 | 27 | #include "portapack.h" 28 | 29 | #include "complex.h" 30 | 31 | void rx_am_to_audio_init(void* const _state); 32 | void rx_am_to_audio_baseband_handler(void* const _state, complex_s8_t* const in, const size_t sample_count_in, baseband_timestamps_t* const timestamps); 33 | 34 | #endif/*__RX_AM_H__*/ 35 | -------------------------------------------------------------------------------- /portalib/rx_fm_broadcast.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #ifndef __RX_FM_BROADCAST_H__ 23 | #define __RX_FM_BROADCAST_H__ 24 | 25 | #include 26 | 27 | #include "portapack.h" 28 | 29 | #include "complex.h" 30 | 31 | void rx_fm_broadcast_to_audio_init(void* const _state); 32 | void rx_fm_broadcast_to_audio_baseband_handler(void* const _state, complex_s8_t* const in, const size_t sample_count_in, baseband_timestamps_t* const timestamps); 33 | 34 | #endif/*__RX_FM_BROADCAST_H__*/ 35 | -------------------------------------------------------------------------------- /portalib/rx_fm_narrowband.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #ifndef __RX_FM_NARROWBAND_H__ 23 | #define __RX_FM_NARROWBAND_H__ 24 | 25 | #include 26 | 27 | #include "portapack.h" 28 | 29 | #include "complex.h" 30 | 31 | void rx_fm_narrowband_to_audio_init(void* const _state); 32 | void rx_fm_narrowband_to_audio_baseband_handler(void* const _state, complex_s8_t* const in, const size_t sample_count_in, baseband_timestamps_t* const timestamps); 33 | 34 | #endif/*__RX_FM_NARROWBAND_H__*/ 35 | -------------------------------------------------------------------------------- /portalib/specan.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. 3 | * 4 | * This file is part of PortaPack. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2, or (at your option) 9 | * any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; see the file COPYING. If not, write to 18 | * the Free Software Foundation, Inc., 51 Franklin Street, 19 | * Boston, MA 02110-1301, USA. 20 | */ 21 | 22 | #ifndef __SPECAN_H__ 23 | #define __SPECAN_H__ 24 | 25 | #include 26 | 27 | #include "portapack.h" 28 | 29 | #include "complex.h" 30 | 31 | void specan_init(void* const _state); 32 | void specan_baseband_handler(void* const _state, complex_s8_t* const in, const size_t sample_count_in, baseband_timestamps_t* const timestamps); 33 | void specan_acknowledge_frame(void* const _state); 34 | 35 | typedef void (*specan_callback_t)(uint8_t* buf, int bufLen); 36 | void specan_register_callback(specan_callback_t callback); 37 | 38 | #endif/*__SPECAN_H__*/ 39 | -------------------------------------------------------------------------------- /r0ketlib/colorin.h: -------------------------------------------------------------------------------- 1 | uint8_t colorpicker(char prompt[], uint8_t color); 2 | -------------------------------------------------------------------------------- /r0ketlib/config.h: -------------------------------------------------------------------------------- 1 | #ifndef __BASICCONFIG_H_ 2 | #define __BASICCONFIG_H_ 3 | 4 | #include 5 | 6 | int readConfig(void); 7 | int saveConfig(void); 8 | void applyConfig(void); 9 | void enableConfig(char type,char enable); 10 | 11 | struct CDESC { 12 | char *name; 13 | char value; 14 | char min; 15 | char max; 16 | unsigned disabled :1; 17 | unsigned type :3; 18 | }; 19 | 20 | #define CFG_TYPE_BASIC 0 21 | #define CFG_TYPE_DEVEL 1 22 | #define CFG_TYPE_FLAME 2 23 | #define CFG_TYPE_GONE 3 24 | 25 | #define MAXNICK 17 26 | extern struct CDESC the_config[]; 27 | extern char nickname[]; 28 | extern char nickfont[]; 29 | extern char nickl0[]; 30 | extern char ledfile[]; 31 | 32 | #define GLOBALversion (the_config[ 0].value) 33 | #define GLOBALdaytrig (the_config[ 1].value) 34 | #define GLOBALdaytrighyst (the_config[ 2].value) 35 | #define GLOBALdayinvert (the_config[ 3].value) 36 | #define GLOBALlcdbacklight (the_config[ 4].value) 37 | #define GLOBALlcdmirror (the_config[ 5].value) 38 | #define GLOBALlcdinvert (the_config[ 6].value) 39 | #define GLOBALlcdcontrast (the_config[ 7].value) 40 | #define GLOBALalivechk (the_config[ 8].value) 41 | #define GLOBALdevelmode (the_config[ 9].value) 42 | #define GLOBALl0nick (the_config[10].value) 43 | #define GLOBALchargeled (the_config[11].value) 44 | #define GLOBALnickname (nickname) 45 | #define GLOBALnickfont (nickfont) 46 | #define GLOBALnickl0 (nickl0) 47 | #define GLOBALledfile (ledfile) 48 | #define GLOBALnickfg (the_config[12].value) 49 | #define GLOBALnickbg (the_config[13].value) 50 | #define GLOBALvdd_fix (the_config[14].value) 51 | #define GLOBALrgbleds (the_config[15].value) 52 | 53 | #define GLOBAL(x) GLOBAL ## x 54 | 55 | #endif 56 | -------------------------------------------------------------------------------- /r0ketlib/decoder.h: -------------------------------------------------------------------------------- 1 | 2 | uint8_t * pk_decode(const uint8_t * data,int * len); 3 | -------------------------------------------------------------------------------- /r0ketlib/display.h: -------------------------------------------------------------------------------- 1 | #ifndef __DISPLAY_H_ 2 | #define __DISPLAY_H_ 3 | 4 | #include 5 | 6 | #define RESX 130 7 | #define RESY 130 8 | 9 | #define TYPE_CMD 0 10 | #define TYPE_DATA 1 11 | 12 | #define RGB(rgb) (rgb & 0b111000000000000000000000) >> 16 | (rgb & 0b000000001110000000000000) >> 11 | (rgb & 0b000000000000000011000000) >> 6 13 | 14 | /* Display buffer */ 15 | extern uint8_t lcdBuffer[RESX*RESY]; 16 | 17 | void lcdInit(void); 18 | void lcdFill(char f); 19 | void lcdDisplay(void); 20 | void lcdSetPixel(char x, char y, uint8_t f); 21 | uint8_t lcdGetPixel(char x, char y); 22 | void lcdShift(int x, int y, int wrap); 23 | void lcdSetContrast(int c); 24 | void lcdSetRotation(char doit); 25 | void lcdRotate(void); 26 | 27 | void lcd_select(); 28 | void lcd_deselect(); 29 | void lcdWrite(uint8_t cd, uint8_t data); 30 | 31 | #define RGB_TO_8BIT(r, g, b) \ 32 | ((r & 0b11100000) | ((g >> 3) & 0b11100) | ((b >> 6) & 0b11)) 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /r0ketlib/execute.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXECUTE_H_ 2 | #define _EXECUTE_H_ 3 | 4 | uint8_t execute_file (const char * fname); 5 | void executeSelect(const char *ext); 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /r0ketlib/fonts.h: -------------------------------------------------------------------------------- 1 | #ifndef __FONTS_H_ 2 | #define __FONTS_H_ 3 | 4 | #include 5 | 6 | /* Partially based on original code for the KS0108 by Stephane Rey */ 7 | /* Based on code code by Kevin Townsend */ 8 | 9 | typedef struct { 10 | const uint8_t widthBits; // width, in bits (or pixels), of the character 11 | } FONT_CHAR_INFO; 12 | 13 | struct FONT_DEF { 14 | uint8_t u8Width; /* Character width for storage */ 15 | uint8_t u8Height; /* Character height for storage */ 16 | uint8_t u8FirstChar; /* The first character available */ 17 | uint8_t u8LastChar; /* The last character available */ 18 | const uint8_t *au8FontTable; /* Font table start address in memory */ 19 | const FONT_CHAR_INFO *charInfo; /* Pointer to array of char information */ 20 | const uint16_t *charExtra; /* Pointer to array of extra char info */ 21 | }; 22 | 23 | struct EXTFONT { 24 | char type; // 0: none, 1: static, 2: loaded 25 | char name[13]; 26 | struct FONT_DEF def; 27 | }; 28 | 29 | typedef const struct FONT_DEF * FONT; 30 | 31 | #define FONT_DEFAULT 0 32 | #define FONT_INTERNAL 1 33 | #define FONT_EXTERNAL 2 34 | 35 | extern const struct FONT_DEF * font; 36 | extern struct EXTFONT efont; 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /r0ketlib/fonts/orbitron14.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/r0ketlib/fonts/orbitron14.c -------------------------------------------------------------------------------- /r0ketlib/fonts/orbitron14.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | extern const struct FONT_DEF Font_Orbitron14pt; 4 | -------------------------------------------------------------------------------- /r0ketlib/fonts/ubuntu18.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/r0ketlib/fonts/ubuntu18.c -------------------------------------------------------------------------------- /r0ketlib/fonts/ubuntu18.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | extern const struct FONT_DEF Font_Ubuntu18pt; 4 | -------------------------------------------------------------------------------- /r0ketlib/fs_util.h: -------------------------------------------------------------------------------- 1 | #ifndef _FS_UTIL_H 2 | #define _FS_UTIL_H 1 3 | 4 | #include 5 | 6 | #define FLEN 13 7 | 8 | typedef struct { 9 | DWORD total; 10 | DWORD free; 11 | } FS_USAGE; 12 | 13 | void fsInit(void); 14 | void fsReInit(void); 15 | 16 | int fsInfo(FATFS *fs); 17 | int fsUsage(FATFS *fs, FS_USAGE *fs_usage); 18 | int readFile(char * filename, void * data, int len); 19 | int readTextFile(char * filename, char * data, int len); 20 | int writeFile(char * filename, const void * data, int len); 21 | int getFileSize(char * filename); 22 | const char* f_get_rc_string (FRESULT rc); 23 | 24 | #endif /* _FS_UTIL_H */ 25 | -------------------------------------------------------------------------------- /r0ketlib/idle.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | /**************************************************************************/ 6 | 7 | void work_queue(void){ 8 | __WFI(); 9 | return; 10 | } 11 | 12 | uint8_t delayms_queue_plus(uint32_t ms, uint8_t final){ 13 | int ret=0; 14 | int end=_timectr+ms/SYSTICKSPEED; 15 | do { 16 | __WFI(); 17 | } while (end >_timectr); 18 | return ret; 19 | } 20 | 21 | void delayms_queue(uint32_t ms){ 22 | int end=_timectr+ms/SYSTICKSPEED; 23 | do { 24 | __WFI(); 25 | } while (end >_timectr); 26 | } 27 | 28 | void delayms_power(uint32_t ms){ 29 | ms/=SYSTICKSPEED; 30 | ms+=_timectr; 31 | do { 32 | __WFI(); 33 | } while (ms >_timectr); 34 | } 35 | 36 | void delayms(uint32_t duration){ 37 | int end=_timectr+duration/SYSTICKSPEED; 38 | do { 39 | __WFI(); 40 | } while (end >_timectr); 41 | } 42 | -------------------------------------------------------------------------------- /r0ketlib/idle.h: -------------------------------------------------------------------------------- 1 | #ifndef _IDLE_H 2 | #define _IDLE_H 1 3 | 4 | void work_queue(void); 5 | uint8_t delayms_queue_plus(uint32_t ms, uint8_t final); 6 | void delayms_queue(uint32_t ms); 7 | void delayms_power(uint32_t ms); 8 | void delayms(uint32_t duration); 9 | 10 | #endif /* _IDLE_H */ 11 | -------------------------------------------------------------------------------- /r0ketlib/image.h: -------------------------------------------------------------------------------- 1 | #ifndef __DISPLAYIMG_H_ 2 | #define __DISPLAYIMG_H_ 3 | 4 | #include 5 | 6 | typedef enum {IMG_NONE=0, IMG_RAW_8, IMG_RAW_12, IMG_RAW_16} image_t; 7 | 8 | uint8_t lcdShowAnim(char *file); 9 | int lcdShowImage(FIL *file); 10 | uint8_t lcdShowImageFile(char *fname); 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /r0ketlib/intin.h: -------------------------------------------------------------------------------- 1 | int input_int(char prompt[], int initial, int min, int max, int digits); 2 | -------------------------------------------------------------------------------- /r0ketlib/itoa.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | /* flags: 4 | F_ZEROS Print with leading zeros 5 | F_LONG Print with leading spaces 6 | F_SPLUS Prefix '+' on positive number 7 | F_SSPACE Prefix ' ' on positive numbers 8 | F_HEX Print as (fixed-width) hex number 9 | */ 10 | 11 | #define LEN 11 /* Maximum length we support */ 12 | const char* IntToStr(int num, unsigned int mxlen, char flag){ 13 | static char s[LEN+1]; 14 | int len; 15 | s[LEN]=0; 16 | char neg=0; 17 | 18 | if(flag&F_HEX){ 19 | unsigned int hex=num; 20 | for (len=(LEN-1);len>=(LEN-mxlen);len--){ 21 | s[len]=(hex%16)+'0'; 22 | if(s[len]>'9') 23 | s[len]+='A'-'9'-1; 24 | hex/=16; 25 | }; 26 | len++; 27 | }else{ 28 | if(num<0){ 29 | num=-num; 30 | neg=1; 31 | }; 32 | 33 | for (len=(LEN-1);len>=(LEN-mxlen);len--){ 34 | s[len]=(num%10)+'0'; 35 | num/=10; 36 | }; 37 | len++; 38 | 39 | if(!(flag&F_LONG)){ 40 | while(s[len]=='0' && len < (LEN-1)) 41 | len++; 42 | }else if(!(flag&F_ZEROS)){ 43 | int x=len; 44 | while(s[x]=='0' && x < (LEN-1)){ 45 | s[x]=' '; 46 | x++; 47 | }; 48 | } 49 | 50 | if(neg==1){ 51 | len--; 52 | s[len]='-'; 53 | }else if(flag&F_SPLUS){ 54 | len--; 55 | s[len]='+'; 56 | }else if(flag&F_SSPACE){ 57 | len--; 58 | s[len]=' '; 59 | }; 60 | }; 61 | return &s[len]; 62 | } 63 | #undef LEN 64 | -------------------------------------------------------------------------------- /r0ketlib/itoa.h: -------------------------------------------------------------------------------- 1 | #ifndef _ITOA_H 2 | #define _ITOA_H 1 3 | 4 | #define F_ZEROS (1<<0) // Print with leading zeros 5 | #define F_LONG (1<<1) // Print with leading spaces 6 | #define F_SPLUS (1<<2) // Prefix '+' on positive number 7 | #define F_SSPACE (1<<3) // Prefix ' ' on positive numbers 8 | #define F_HEX (1<<4) // Print as (fixed-width) hex number 9 | const char* IntToStr(int num, unsigned int mxlen, char flag); 10 | 11 | #endif /* _ITOA_H */ 12 | -------------------------------------------------------------------------------- /r0ketlib/keyin.h: -------------------------------------------------------------------------------- 1 | #ifndef _KEYIN_H 2 | #define _KEYIN_H 1 3 | 4 | #include 5 | #include 6 | 7 | #define BTN_NONE 0 8 | #define BTN_UP (1<<0) 9 | #define BTN_DOWN (1<<1) 10 | #define BTN_LEFT (1<<2) 11 | #define BTN_RIGHT (1<<3) 12 | #define BTN_ENTER (1<<4) 13 | 14 | void keySetRotation(char doit); 15 | uint8_t getInputRaw(void); 16 | uint8_t getInput(void); 17 | void inputInit(void); 18 | uint8_t getInputWait(void); 19 | uint8_t getInputWaitTimeout(int timeout); 20 | uint8_t getInputWaitRepeat(void); 21 | void getInputWaitRelease(void); 22 | 23 | /* XXX: probably should be in central header file */ 24 | #define KEY_DOWN_PIN (PB_0) 25 | #define KEY_DOWN_FUNC (SCU_CONF_FUNCTION4) 26 | #define KEY_DOWN_GPORT GPIO5 27 | #define KEY_DOWN_GPIN GPIOPIN20 28 | 29 | #define KEY_UP_PIN (PB_1) 30 | #define KEY_UP_FUNC (SCU_CONF_FUNCTION4) 31 | #define KEY_UP_GPORT GPIO5 32 | #define KEY_UP_GPIN GPIOPIN21 33 | 34 | #define KEY_LEFT_PIN (PB_2) 35 | #define KEY_LEFT_FUNC (SCU_CONF_FUNCTION4) 36 | #define KEY_LEFT_GPORT GPIO5 37 | #define KEY_LEFT_GPIN GPIOPIN22 38 | 39 | #define KEY_RIGHT_PIN (PB_3) 40 | #define KEY_RIGHT_FUNC (SCU_CONF_FUNCTION4) 41 | #define KEY_RIGHT_GPORT GPIO5 42 | #define KEY_RIGHT_GPIN GPIOPIN23 43 | 44 | #define KEY_ENTER_PIN (PB_4) 45 | #define KEY_ENTER_FUNC (SCU_CONF_FUNCTION4) 46 | #define KEY_ENTER_GPORT GPIO5 47 | #define KEY_ENTER_GPIN GPIOPIN24 48 | 49 | #endif /* _KEYIN_H */ 50 | -------------------------------------------------------------------------------- /r0ketlib/menu.h: -------------------------------------------------------------------------------- 1 | #ifndef _MENU_H 2 | #define _MENU_H 1 3 | 4 | struct MENU_DEF { 5 | const char *text; 6 | void (*callback)(void); 7 | }; 8 | 9 | struct MENU { 10 | const char *title; 11 | struct MENU_DEF entries[]; 12 | }; 13 | 14 | #define MENU_TIMEOUT (1<<0) 15 | #define MENU_JUSTONCE (1<<1) 16 | #define MENU_BIG (1<<2) 17 | extern uint8_t menuflags; 18 | 19 | void handleMenu(const struct MENU *the_menu); 20 | 21 | #endif /* _MENU_H */ 22 | -------------------------------------------------------------------------------- /r0ketlib/mesh.h: -------------------------------------------------------------------------------- 1 | #ifndef __MESH_H_ 2 | #define __MESH_H_ 3 | 4 | #include 5 | 6 | uint8_t getMeshSizes( char *fname, int* verticeNumb, int* facesNumb ); 7 | uint8_t getMesh( char *fname, float* vertices, int verticeNumb, int* faces, int facesNumb ); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /r0ketlib/night.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | #define SAMPCT (4) 11 | #define threshold GLOBAL(daytrig) 12 | #define RANGE GLOBAL(daytrighyst) 13 | 14 | // status: 0=init, 1=decreased 2=increased=ok 15 | uint8_t sensor_status=0; 16 | uint32_t light=150*SAMPCT; 17 | char _isnight=1; 18 | 19 | void LightCheck(void){ 20 | // adc_get_single(ADC0,ADC_CR_CH6)*2*330/1023 21 | 22 | if(GLOBAL(chargeled) && batteryCharging()){ 23 | _isnight=1; 24 | return; 25 | } 26 | 27 | SETUPadc(LED4); 28 | 29 | uint32_t last_light=light; 30 | // ADC needs some time? 31 | light-=light/SAMPCT; 32 | light += adc_get_single(ADC0,ADC_CR_CH6); 33 | light-=light/SAMPCT; 34 | light += adc_get_single(ADC0,ADC_CR_CH6); 35 | light-=light/SAMPCT; 36 | light += adc_get_single(ADC0,ADC_CR_CH6); 37 | light-=light/SAMPCT; 38 | light += adc_get_single(ADC0,ADC_CR_CH6); 39 | 40 | SETUPgout(LED4); 41 | 42 | // disable light sensor until we get reasonable results 43 | if(sensor_status<2){ 44 | if(lightlast_light && sensor_status==1) sensor_status=2; 46 | return; 47 | } 48 | 49 | if(_isnight && light/SAMPCT>(threshold+RANGE)) 50 | _isnight=0; 51 | 52 | if(!_isnight && light/SAMPCT 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | int x=0; 9 | int y=0; 10 | 11 | static void checkScroll(void){ 12 | if(y+font->u8Height>RESY){ 13 | lcdShift(0,y+font->u8Height-RESY,false); 14 | y=RESY-font->u8Height; 15 | }; 16 | } 17 | 18 | void lcdPrint(const char *string){ 19 | checkScroll(); 20 | x=DoString(x,y,string); 21 | } 22 | 23 | void lcdNl(void){ 24 | x=0;y+=font->u8Height; 25 | } 26 | 27 | void lcdCheckNl(void){ 28 | if(x>RESX) 29 | lcdNl(); 30 | } 31 | 32 | void lcdPrintln(const char *string){ 33 | lcdPrint(string); 34 | lcdNl(); 35 | } 36 | 37 | void lcdPrintInt(int number){ 38 | // On the ARM chips, int has 32 bits. 39 | const char* string = IntToStr(number, 10, 0); 40 | lcdPrint(string); 41 | } 42 | 43 | void lcdClear(){ 44 | x=0;y=0; 45 | lcdFill(0xff); 46 | } 47 | 48 | 49 | void lcdMoveCrsr(signed int dx,signed int dy){ 50 | x+=dx; 51 | y+=dy; 52 | } 53 | 54 | void lcdSetCrsr(int dx,int dy){ 55 | x=dx; 56 | y=dy; 57 | } 58 | 59 | void lcdSetCrsrX(int dx){ 60 | x=dx; 61 | } 62 | 63 | int lcdGetCrsrX(){ 64 | return x; 65 | } 66 | 67 | int lcdGetCrsrY(){ 68 | return y; 69 | } 70 | 71 | void setSystemFont(void){ 72 | setIntFont(&Font_7x8); 73 | } 74 | 75 | 76 | int lcdGetVisibleLines(void){ 77 | return (RESY/getFontHeight()); // subtract title line 78 | } 79 | -------------------------------------------------------------------------------- /r0ketlib/print.h: -------------------------------------------------------------------------------- 1 | #ifndef _PRINT_H 2 | #define _PRINT_H 1 3 | 4 | #include 5 | void lcdPrint(const char *string); 6 | void lcdNl(void); 7 | void lcdCheckNl(void); 8 | void lcdPrintln(const char *string); 9 | void lcdPrintInt(int number); 10 | void lcdClear(); 11 | void lcdRefresh(); 12 | void lcdMoveCrsr(signed int dx,signed int dy); 13 | void lcdSetCrsr(int dx,int dy); 14 | void lcdSetCrsrX(int dx); 15 | int lcdGetCrsrX(); 16 | int lcdGetCrsrY(); 17 | void setSystemFont(void); 18 | int lcdGetVisibleLines(void); 19 | 20 | #endif /* _PRINT_H */ 21 | -------------------------------------------------------------------------------- /r0ketlib/random.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | void randomInit(void) { 5 | srand(0); // adcRead! 6 | } 7 | 8 | int getRandom(void){ 9 | return rand(); 10 | } 11 | 12 | -------------------------------------------------------------------------------- /r0ketlib/random.h: -------------------------------------------------------------------------------- 1 | void randomInit(void); 2 | int getRandom(void); 3 | -------------------------------------------------------------------------------- /r0ketlib/select.h: -------------------------------------------------------------------------------- 1 | #ifndef _SELECT_H_ 2 | #define _SELECT_H_ 3 | #include 4 | #include 5 | 6 | int getFiles(char files[][FLEN], uint8_t count, uint16_t skip, const char *ext); 7 | uint16_t init_selectFile(const char *extension); 8 | int selectFileRepeat(char *filename, const char *extension); 9 | int selectFile(char *filename, const char *extension); 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /r0ketlib/stringin.h: -------------------------------------------------------------------------------- 1 | void input(char prompt[], char line[], uint8_t asciistart, uint8_t asciiend, uint8_t maxlength); 2 | -------------------------------------------------------------------------------- /rad1olib/assert.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | void assert_die(void){ 8 | SETUPgout(LED4); 9 | while(1){ 10 | TOGGLE(LED4); 11 | delayNop(3000000); 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /rad1olib/assert.h: -------------------------------------------------------------------------------- 1 | #ifndef _ASSERT_H 2 | #define _ASSERT_H 1 3 | 4 | #define CHECK 5 | #ifdef CHECK 6 | #define ASSERT(x) do{if(!(x))assert_die();}while(0) 7 | #else 8 | #define ASSERT(x) 9 | #endif 10 | 11 | void assert_die(void); 12 | 13 | #endif /* _ASSERT_H */ 14 | -------------------------------------------------------------------------------- /rad1olib/audio.h: -------------------------------------------------------------------------------- 1 | #ifndef __AUDIO_H__ 2 | #define __AUDIO_H__ 3 | /* 4 | * set up audio output 5 | * 6 | * interrupt handler will be called after this is executed. 7 | * however, playback will not start yet. For that, call 8 | * audio_play(). 9 | * 10 | * buf buffer for samples 11 | * size size of the buffer in number of samples 12 | * rate sample rate 13 | * timer_freq assume this to be the frequency of the ritimer clock 14 | */ 15 | void audio_init(uint16_t *buf, int size, int rate, int timer_freq); 16 | /* 17 | * stop playing audio 18 | */ 19 | void audio_stop(void); 20 | /* 21 | * return number of samples in sample buffer 22 | */ 23 | int audio_fill(); 24 | /* 25 | * start playing audio immediately 26 | */ 27 | void audio_play(); 28 | /* 29 | * start playing audio if the sample buffer is at least half filled 30 | * 31 | * returns 1 when audio is playing, 0 otherwise 32 | */ 33 | int audio_play_when_half_full(); 34 | /* 35 | * push a sample into the buffer 36 | */ 37 | void audio_push(uint16_t sample); 38 | /* 39 | * issue this to adapt timers to tune replay sample rate 40 | * 41 | * assumes that the buffer ought to be half filled when called. 42 | * uses that to tune the timer value. 43 | * 44 | * call this any N samples to adapt playback sample rate 45 | * or not at all if you don't need it. 46 | */ 47 | void audio_tune_speed(); 48 | /* 49 | * set volume (0..9) 50 | * 51 | * volume setting 9 enables the amplifier 52 | */ 53 | void audio_set_volume(int volume); 54 | /* 55 | * get current volume setting (0..9) 56 | */ 57 | int audio_get_volume(); 58 | 59 | #endif // __AUDIO_H__ 60 | -------------------------------------------------------------------------------- /rad1olib/battery.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | //#include 4 | //#include 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | static uint32_t voltage=4000; 11 | 12 | void batteryVoltageCheck(void) 13 | { 14 | voltage = adc_get_single(ADC0,ADC_CR_CH3)*2*3300/1023; 15 | 16 | //battery is assumed empty if the voltage falls bellow 3.5V 17 | if( voltage < 3500 ){ 18 | //put the chip into deep power down 19 | //SCB_SCR |= SCB_SCR_SLEEPDEEP; 20 | //PMU_PMUCTRL = PMU_PMUCTRL_DPDEN_DEEPPOWERDOWN; 21 | //__asm volatile ("WFI"); 22 | }; 23 | } 24 | 25 | uint32_t batteryGetVoltage(void) 26 | { 27 | return voltage; 28 | } 29 | 30 | bool batteryCharging(void) 31 | { 32 | // The battery charging indicator pin is active low 33 | return GET(BC_IND) == 0; 34 | } 35 | 36 | void batteryInit(void) 37 | { 38 | SETUPgin(BC_DONE); 39 | SETUPgout(BC_CEN); 40 | SETUPgout(BC_PEN2); 41 | SETUPgout(BC_USUS); 42 | SETUPgout(BC_THMEN); 43 | SETUPgin(BC_IND); 44 | SETUPgin(BC_OT); 45 | SETUPgin(BC_DOK); 46 | SETUPgin(BC_UOK); 47 | SETUPgin(BC_FLT); 48 | } 49 | 50 | -------------------------------------------------------------------------------- /rad1olib/battery.h: -------------------------------------------------------------------------------- 1 | #ifndef BATTERY_H 2 | #define BATTERY_H 3 | 4 | void batteryVoltageCheck(void); 5 | uint32_t batteryGetVoltage(void); 6 | bool batteryCharging(void); 7 | void batteryInit(void); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /rad1olib/colorspace.c: -------------------------------------------------------------------------------- 1 | /* 2 | * color conversions 3 | * - hsl2rgb 4 | * - rgb2hsl 5 | * - later yuv? 6 | * 7 | * Created: 23.08.2015 8 | * Author: MaZderMind (peter@mazdermind.de) 9 | */ 10 | 11 | #include "colorspace.h" 12 | 13 | // https://github.com/lewisd32/avr-hsl2rgb/blob/master/hsl2rgb.cpp (_orig version) 14 | void hsl2rgb(uint16_t hue, uint8_t sat, uint8_t lum, uint8_t rgb[3]) { 15 | uint16_t r_temp, g_temp, b_temp; 16 | uint8_t hue_mod; 17 | uint8_t inverse_sat = (sat ^ 255); 18 | 19 | hue = hue % 768; 20 | hue_mod = hue % 256; 21 | 22 | if (hue < 256) 23 | { 24 | r_temp = hue_mod ^ 255; 25 | g_temp = hue_mod; 26 | b_temp = 0; 27 | } 28 | 29 | else if (hue < 512) 30 | { 31 | r_temp = 0; 32 | g_temp = hue_mod ^ 255; 33 | b_temp = hue_mod; 34 | } 35 | 36 | else if ( hue < 768) 37 | { 38 | r_temp = hue_mod; 39 | g_temp = 0; 40 | b_temp = hue_mod ^ 255; 41 | } 42 | 43 | else 44 | { 45 | r_temp = 0; 46 | g_temp = 0; 47 | b_temp = 0; 48 | } 49 | 50 | r_temp = ((r_temp * sat) / 255) + inverse_sat; 51 | g_temp = ((g_temp * sat) / 255) + inverse_sat; 52 | b_temp = ((b_temp * sat) / 255) + inverse_sat; 53 | 54 | r_temp = (r_temp * lum) / 255; 55 | g_temp = (g_temp * lum) / 255; 56 | b_temp = (b_temp * lum) / 255; 57 | 58 | rgb[0] = (uint8_t)r_temp; 59 | rgb[1] = (uint8_t)g_temp; 60 | rgb[2] = (uint8_t)b_temp; 61 | } 62 | -------------------------------------------------------------------------------- /rad1olib/colorspace.h: -------------------------------------------------------------------------------- 1 | /* 2 | * color conversions 3 | * - hsl2rgb 4 | * - rgb2hsl 5 | * - later yuv? 6 | * 7 | * Created: 23.08.2015 8 | * Author: MaZderMind (peter@mazdermind.de) 9 | */ 10 | 11 | #include "setup.h" 12 | 13 | // https://github.com/lewisd32/avr-hsl2rgb/blob/master/hsl2rgb.cpp 14 | void hsl2rgb(uint16_t hue, uint8_t sat, uint8_t lum, uint8_t rgb[3]); 15 | -------------------------------------------------------------------------------- /rad1olib/draw.h: -------------------------------------------------------------------------------- 1 | #ifndef F1RMWARE_DRAW_H 2 | #define F1RMWARE_DRAW_H 3 | 4 | void drawHLine(int y, int x1, int x2, uint8_t color); 5 | void drawVLine(int x, int y1, int y2, uint8_t color); 6 | 7 | void drawRectFill(int x, int y, int width, int heigth, uint8_t color); 8 | 9 | void drawLine(int x1, int y1, int x2, int y2, uint8_t color, int thickness); 10 | 11 | #endif //F1RMWARE_DRAW_H 12 | -------------------------------------------------------------------------------- /rad1olib/sbrk.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | /* 4 | * sbrk -- changes heap size size. Get nbytes more 5 | * RAM. We just increment a pointer in what's 6 | * left of memory on the board. 7 | */ 8 | 9 | /* just in case, most boards have at least some memory */ 10 | 11 | extern void * _end; 12 | void * _sbrk(ptrdiff_t __incr) { 13 | static void * heap_ptr = NULL; 14 | void * base; 15 | 16 | if (heap_ptr == NULL) { 17 | heap_ptr = (void *)&_end; 18 | } 19 | 20 | /* XXX: Maybe check heap size collision with stack ? */ 21 | base = heap_ptr; 22 | heap_ptr += __incr; 23 | return (base); 24 | } 25 | -------------------------------------------------------------------------------- /rad1olib/setup.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Michael Ossmann 3 | * Copyright 2012 Benjamin Vernoux 4 | * Copyright 2012 Jared Boone 5 | * 6 | * This file is part of HackRF. 7 | * 8 | * This program is free software; you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation; either version 2, or (at your option) 11 | * any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; see the file COPYING. If not, write to 20 | * the Free Software Foundation, Inc., 51 Franklin Street, 21 | * Boston, MA 02110-1301, USA. 22 | */ 23 | 24 | #ifndef __SETUP_H 25 | #define __SETUP_H 26 | 27 | #include 28 | #include 29 | 30 | extern uint8_t _cpu_speed; 31 | 32 | void delayNop(uint32_t duration); 33 | 34 | void cpuClockInit(void); 35 | void cpu_clock_set(uint32_t target_mhz); 36 | void usb_clock_init(void); 37 | void hackrf_clock_init(void); 38 | void si5351_init(void); 39 | 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /rad1olib/spi-flash.h: -------------------------------------------------------------------------------- 1 | #ifndef _SPI_FLASH_H 2 | #define _SPI_FLASH_H 1 3 | 4 | #include 5 | 6 | #define FLASH_SIZE (2048*1024) 7 | 8 | #define FLASHFS_OFFSET (512*1024) 9 | #define FLASHFS_LENGTH (FLASH_SIZE-FLASHFS_OFFSET) 10 | 11 | #define S1_BUSY (1<<0) /* Busy (volatile) */ 12 | #define S1_WEL (1<<1) /* Write Enable Latch (volatile) */ 13 | #define S1_BP0 (1<<2) /* Block Protect Bits */ 14 | #define S1_BP1 (1<<3) 15 | #define S1_BP2 (1<<4) 16 | #define S1_TB (1<<5) /* Top/Bottom protect */ 17 | #define S1_SEC (1<<6) /* Sector/Block protect */ 18 | #define S1_SRP0 (1<<7) /* Status register protect */ 19 | 20 | #define S2_SRP1 (1<<0) 21 | #define S2_QE (1<<1) /* Quad Enable */ 22 | //#define reserved (1<<2) 23 | #define S2_LB1 (1<<3) /* Security Register Lock Bits */ 24 | #define S2_LB2 (1<<4) 25 | #define S2_LB3 (1<<5) 26 | #define S2_CMP (1<<6) /* Complement Protect */ 27 | #define S2_SUS (1<<7) /* Erase/Program Suspent Status (volatile) */ 28 | 29 | void flash_wait_write(); 30 | uint8_t flash_status1(void); 31 | uint8_t flash_status2(void); 32 | void flashInit(void); 33 | void flash_read(uint32_t addr, uint32_t len, uint8_t * data); 34 | void flash_read_sector(uint32_t addr, uint32_t * data); 35 | void flash_write_enable(void); 36 | void flash_program(uint32_t addr, uint32_t len, const uint8_t * data); 37 | void flash_random_program(uint32_t addr, uint32_t len, const uint8_t * data); 38 | void flash_program4(uint32_t addr, uint16_t len, const uint32_t * data); 39 | void flash_usb_program(uint32_t addr, uint16_t len, const uint8_t * data); 40 | void flash_erase(uint32_t addr); /* erase 4k sector */ 41 | void flash_write(uint32_t addr, uint16_t len, const uint8_t * data); 42 | void flash_random_write(uint32_t addr, uint16_t len, const uint8_t * data); 43 | 44 | #endif /* _SPI_FLASH_H */ 45 | -------------------------------------------------------------------------------- /rad1olib/systick.c: -------------------------------------------------------------------------------- 1 | #include 2 | #define LOCAL 3 | #include 4 | #undef LOCAL 5 | #include 6 | 7 | volatile uint32_t _timectr=0; 8 | 9 | void systickInit(){ 10 | systick_set_clocksource(0); 11 | systick_set_reload(12e6/SYSTICKSPEED/1000); 12 | systick_interrupt_enable(); 13 | systick_counter_enable(); 14 | }; 15 | 16 | void systickAdjustFreq(uint32_t hz){ 17 | systick_set_reload(hz/SYSTICKSPEED/1000); 18 | }; 19 | 20 | void systickDisable(){ 21 | systick_interrupt_disable(); 22 | systick_counter_disable(); 23 | }; 24 | -------------------------------------------------------------------------------- /rad1olib/systick.h: -------------------------------------------------------------------------------- 1 | #ifndef _SYSTICK_H 2 | #define _SYSTICK_H 1 3 | 4 | // Note: 5 | // Our time implementation will fail after 497 days of continous uptime. 6 | // ( 2^32 / 1000 * SYSTICKSPEED ) seconds 7 | 8 | #define SYSTICKSPEED 1 9 | #ifndef LOCAL 10 | extern volatile uint32_t _timectr; 11 | #endif 12 | 13 | void systickInit(); 14 | void systickAdjustFreq(uint32_t hz); 15 | void systickDisable(); 16 | 17 | #define incTimer(void) do{_timectr++;}while(0); 18 | #define getTimer() (_timectr) 19 | 20 | #endif /* _SYSTICK_H */ 21 | -------------------------------------------------------------------------------- /rfapp/README-telegraf.rst: -------------------------------------------------------------------------------- 1 | Telegraph application for the rad1o badge 2 | ========================================= 3 | 4 | This is a basic morse transmitter, able to send and receive messages over RF. 5 | 6 | How to use it 7 | ============= 8 | 9 | Plug your headphones into the rad1o badge. Works better if someone else 10 | installs the app too :) 11 | 12 | * Press UP/DOWN to set the carrier frequency 13 | * Press RIGHT/LEFT to set the volume level 14 | * Press ENTER (the joystick) to send some beeps and beeeeeps 15 | 16 | Enjoy :) 17 | -------------------------------------------------------------------------------- /rfapp/cossin1024-gen.lua: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env lua 2 | --[[ 3 | This script generates the cos/sin lookup table 4 | --]] 5 | io.stdout:write([[ 6 | #include 7 | #include 8 | 9 | /* table of cos/sin pairs for x=0..1023: 10 | * cos(x*pi*2/1024) * 127 11 | * sin(x*pi*2/1024) * 127 12 | */ 13 | static const int8_t cos_sin_tbl[] = { 14 | ]]) 15 | 16 | for phase = 0, 1023 do 17 | local s_precise = math.sin(phase*math.pi*2/1024) 18 | local c_precise = math.cos(phase*math.pi*2/1024) 19 | local s_dumb = math.floor(s_precise * 127 + .5) 20 | local c_dumb = math.floor(c_precise * 127 + .5) 21 | local s_err = s_precise*127 - s_dumb 22 | local c_err = c_precise*127 - c_dumb 23 | 24 | if phase > 0 then 25 | io.stdout:write(",\n") 26 | end 27 | io.stdout:write(string.format( 28 | "%d,\t%d\t/* %+0.3f, %+0.3f */", 29 | c_dumb, s_dumb, c_err, s_err 30 | )) 31 | end 32 | io.stdout:write([[ 33 | 34 | }; 35 | 36 | const complex_s8_t *cos_sin = (complex_s8_t*) cos_sin_tbl; 37 | ]]) 38 | -------------------------------------------------------------------------------- /rfapp/cossin1024.h: -------------------------------------------------------------------------------- 1 | #ifndef __COSSIN1024_H__ 2 | #define __COSSIN1024_H__ 3 | 4 | #include "complex.h" 5 | 6 | /* table of 1024 cos/sin pairs (Q: cos(), I: sin()) */ 7 | extern const complex_s8_t *cos_sin; 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /rfapp/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of rad1o 3 | * 4 | */ 5 | 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | #include 19 | 20 | #include 21 | 22 | #include "main.gen" 23 | 24 | 25 | #define EVERY(x,y) if((ctr+y)%(x/SYSTICKSPEED)==0) 26 | 27 | void tick_batteryLED(void){ 28 | static int ctr; 29 | ctr++; 30 | 31 | EVERY(50,0){ 32 | if(GLOBAL(chargeled)){ 33 | //char iodir= (GPIO_GPIO1DIR & (1 << (11) ))?1:0; 34 | if(batteryCharging()) { 35 | ON(LED4); 36 | } else { 37 | OFF(LED4); 38 | } 39 | }; 40 | 41 | if(batteryGetVoltage()<3600){ 42 | if( (ctr/(50/SYSTICKSPEED))%10 == 1 ) { 43 | ON(LED4); 44 | } else { 45 | OFF(LED4); 46 | } 47 | }; 48 | }; 49 | 50 | return; 51 | } 52 | 53 | void sys_tick_handler(void){ 54 | incTimer(); 55 | generated_tick(); 56 | }; 57 | 58 | int main(void) { 59 | cpuClockInit(); /* CPU Clock is now 104 MHz */ 60 | systickInit(); 61 | 62 | // cpu_clock_set(204); 63 | 64 | SETUPgout(EN_VDD); 65 | SETUPgout(EN_1V8); 66 | SETUPgout(MIXER_EN); 67 | SETUPgout(MIC_AMP_DIS); 68 | 69 | SETUPgout(LED1); 70 | SETUPgout(LED2); 71 | SETUPgout(LED3); 72 | SETUPgout(LED4); 73 | 74 | inputInit(); 75 | lcdInit(); 76 | fsInit(); 77 | lcdFill(0xff); 78 | readConfig(); 79 | batteryInit(); 80 | 81 | generated_init(); 82 | 83 | while(1){ 84 | // if(getInput()){ 85 | handleMenu(&menu_main); 86 | getInputWaitRelease(); 87 | // }; 88 | // fancyNickname(); 89 | }; 90 | return 0; 91 | } 92 | -------------------------------------------------------------------------------- /rflib/m0/cossin1024.c: -------------------------------------------------------------------------------- 1 | ../../rfapp/cossin1024.c -------------------------------------------------------------------------------- /rflib/m0/hackrf_core.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/hackrf_core.c -------------------------------------------------------------------------------- /rflib/m0/max2837.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/max2837.c -------------------------------------------------------------------------------- /rflib/m0/max2871.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/max2871.c -------------------------------------------------------------------------------- /rflib/m0/max2871_regs.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/max2871_regs.c -------------------------------------------------------------------------------- /rflib/m0/max5864.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/max5864.c -------------------------------------------------------------------------------- /rflib/m0/rf_path.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/rf_path.c -------------------------------------------------------------------------------- /rflib/m0/sgpio.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/sgpio.c -------------------------------------------------------------------------------- /rflib/m0/sgpio.h: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/sgpio.h -------------------------------------------------------------------------------- /rflib/m0/si5351c.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/si5351c.c -------------------------------------------------------------------------------- /rflib/m0/tuning.c: -------------------------------------------------------------------------------- 1 | ../../hackrf-old/firmware/common/tuning.c -------------------------------------------------------------------------------- /rflib/m0_bin.h: -------------------------------------------------------------------------------- 1 | #ifndef __M0_BIN_H 2 | #define __M0_BIN_H 3 | extern uint8_t m0_bin[]; 4 | extern uint32_t m0_bin_size; 5 | /* we should probably get this from the linker instead */ 6 | const void *cm0_exec_baseaddr = (const void*) 0x20000000; 7 | #endif 8 | -------------------------------------------------------------------------------- /rflib/m0_bin.s: -------------------------------------------------------------------------------- 1 | 2 | .section .rodata 3 | 4 | .global m0_bin 5 | .align 4 6 | m0_bin: 7 | .incbin "m0/m0.bin" 8 | 9 | .global m0_bin_size 10 | .align 4 11 | m0_bin_size: 12 | .int m0_bin_size - m0_bin 13 | -------------------------------------------------------------------------------- /rflib/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of rad1o 3 | * 4 | */ 5 | 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | #include 19 | 20 | #include 21 | 22 | #include "main.gen" 23 | 24 | 25 | #define EVERY(x,y) if((ctr+y)%(x/SYSTICKSPEED)==0) 26 | 27 | void tick_batteryLED(void){ 28 | static int ctr; 29 | ctr++; 30 | 31 | EVERY(50,0){ 32 | if(GLOBAL(chargeled)){ 33 | //char iodir= (GPIO_GPIO1DIR & (1 << (11) ))?1:0; 34 | if(batteryCharging()) { 35 | ON(LED4); 36 | } else { 37 | OFF(LED4); 38 | } 39 | }; 40 | 41 | if(batteryGetVoltage()<3600){ 42 | if( (ctr/(50/SYSTICKSPEED))%10 == 1 ) { 43 | ON(LED4); 44 | } else { 45 | OFF(LED4); 46 | } 47 | }; 48 | }; 49 | 50 | return; 51 | } 52 | 53 | void sys_tick_handler(void){ 54 | incTimer(); 55 | generated_tick(); 56 | }; 57 | 58 | int main(void) { 59 | cpuClockInit(); /* CPU Clock is now 104 MHz */ 60 | systickInit(); 61 | 62 | // cpu_clock_set(204); 63 | 64 | SETUPgout(EN_VDD); 65 | SETUPgout(EN_1V8); 66 | SETUPgout(MIXER_EN); 67 | SETUPgout(MIC_AMP_DIS); 68 | 69 | SETUPgout(LED1); 70 | SETUPgout(LED2); 71 | SETUPgout(LED3); 72 | SETUPgout(LED4); 73 | 74 | inputInit(); 75 | lcdInit(); 76 | fsInit(); 77 | lcdFill(0xff); 78 | readConfig(); 79 | batteryInit(); 80 | 81 | generated_init(); 82 | 83 | while(1){ 84 | // if(getInput()){ 85 | handleMenu(&menu_main); 86 | getInputWaitRelease(); 87 | // }; 88 | // fancyNickname(); 89 | }; 90 | return 0; 91 | } 92 | -------------------------------------------------------------------------------- /rflib/usbfreq.c: -------------------------------------------------------------------------------- 1 | /* send frequency data over USB/CDC ACMi 2 | * 3 | * An example application using RFlib 4 | * (c) 2015 Hans-Werner Hilse (@hilse) 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | 18 | #include 19 | #include 20 | #include 21 | 22 | #include "rflib_m0.h" 23 | 24 | // default to 2496 MHz 25 | #define FREQSTART 2496000000 26 | 27 | static void receive() { 28 | static int16_t rxbuf[256]; 29 | int rx = rflib_get_data(rxbuf, 256); 30 | if(rx > 0) { 31 | if(vcom_connected()) vcom_write((uint8_t*)rxbuf, rx); 32 | } 33 | } 34 | 35 | //# MENU USBfreq 36 | void usbfreq_menu() { 37 | lcdClear(); 38 | lcdPrintln("ENTER to go back"); 39 | rflib_lcdDisplay(); 40 | getInputWaitRelease(); 41 | 42 | cpu_clock_set(204); 43 | CDCenable(); 44 | 45 | rflib_init(); 46 | rflib_set_freq(FREQSTART); 47 | rflib_set_rxsamplerate(1000000); 48 | rflib_set_rxdecimation(2); 49 | rflib_set_rxbandwidth(1750000); 50 | rflib_freq_receive(); 51 | 52 | while(1) { 53 | switch (getInputRaw()) { 54 | case BTN_ENTER: 55 | goto stop; 56 | } 57 | #if 0 58 | if(vcom_connected()) { 59 | /* check if we got data from USB-CDC, transmit it, if so. */ 60 | uint8_t sendbuf[255]; 61 | uint32_t read = vcom_bread(sendbuf, 255); 62 | if(read > 0) rflib_bfsk_transmit(sendbuf, read, true); 63 | } 64 | #endif 65 | receive(); 66 | } 67 | stop: 68 | rflib_shutdown(); 69 | return; 70 | } 71 | -------------------------------------------------------------------------------- /rflib/usbraw.c: -------------------------------------------------------------------------------- 1 | /* send samples over USB/CDC ACMi 2 | * 3 | * An example application using RFlib 4 | * (c) 2015 Hans-Werner Hilse (@hilse) 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | 18 | #include 19 | #include 20 | #include 21 | 22 | #include "rflib_m0.h" 23 | 24 | // default to 2496 MHz 25 | #define FREQSTART 2496000000 26 | 27 | static void receive() { 28 | static int16_t rxbuf[256]; 29 | int rx = rflib_get_data(rxbuf, 256); 30 | if(rx > 0) { 31 | if(vcom_connected()) vcom_write((uint8_t*)rxbuf, rx); 32 | } 33 | } 34 | 35 | //# MENU USBraw 36 | void usbraw_menu() { 37 | lcdClear(); 38 | lcdPrintln("ENTER to go back"); 39 | rflib_lcdDisplay(); 40 | getInputWaitRelease(); 41 | 42 | cpu_clock_set(204); 43 | CDCenable(); 44 | 45 | rflib_init(); 46 | rflib_set_freq(FREQSTART); 47 | rflib_set_rxsamplerate(1000000); 48 | rflib_set_rxdecimation(2); 49 | rflib_set_rxbandwidth(1750000); 50 | rflib_raw_receive(); 51 | 52 | while(1) { 53 | switch (getInputRaw()) { 54 | case BTN_ENTER: 55 | goto stop; 56 | } 57 | #if 0 58 | if(vcom_connected()) { 59 | /* check if we got data from USB-CDC, transmit it, if so. */ 60 | uint8_t sendbuf[255]; 61 | uint32_t read = vcom_bread(sendbuf, 255); 62 | if(read > 0) rflib_bfsk_transmit(sendbuf, read, true); 63 | } 64 | #endif 65 | receive(); 66 | } 67 | stop: 68 | rflib_shutdown(); 69 | return; 70 | } 71 | -------------------------------------------------------------------------------- /smartflash/.gitignore: -------------------------------------------------------------------------------- 1 | *.dfu 2 | IMG* 3 | dfu-util 4 | filesystem.img* 5 | full.img* 6 | header.img 7 | -------------------------------------------------------------------------------- /smartflash/90-rad1o-flash.rules: -------------------------------------------------------------------------------- 1 | # Rules to allow working with rad1o without root 2 | # copy into /etc/udev/rules.d/ 3 | 4 | # HackRF One compability 5 | ATTR{idVendor}=="1d50", ATTR{idProduct}=="6089", SYMLINK+="hackrf-one-%k", MODE="660", GROUP="plugdev" 6 | # new rad1o PID 7 | ATTR{idVendor}=="1d50", ATTR{idProduct}=="cc15", SYMLINK+="rad1o-%k", MODE="660", GROUP="plugdev" 8 | # NXP DFU mode 9 | ATTR{idVendor}=="1fc9", ATTR{idProduct}=="000c", SYMLINK+="nxp-dfu-%k", MODE="660", GROUP="plugdev" 10 | # rad1o "full flash" mode 11 | KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_VENDOR_ID}=="1fc9", ENV{ID_MODEL_ID}=="0042", SYMLINK+="rad1o-flash-%k", MODE="660", GROUP="plugdev" 12 | # rad1o flash disk 13 | KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_VENDOR_ID}=="1fc9", ENV{ID_MODEL_ID}=="0082", SYMLINK+="rad1o-msc-%k", MODE="660", GROUP="plugdev" 14 | -------------------------------------------------------------------------------- /smartflash/order-files: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | use strict; 4 | 5 | my($src,@files)=@ARGV; 6 | my %allfiles; 7 | 8 | my $dh; 9 | 10 | opendir($dh, $src) || die "source dir missing"; 11 | %allfiles=map {$_ => 1} grep {/^[^.]/} readdir($dh); 12 | close $dh; 13 | 14 | my @dwim; 15 | for (@files){ 16 | if(!$allfiles{$_}){ 17 | warn "$_ not found in $src\n"; 18 | }else{ 19 | push @dwim,$_; 20 | delete $allfiles{$_}; 21 | }; 22 | }; 23 | 24 | for (sort keys %allfiles){ 25 | push @dwim,$_; 26 | }; 27 | 28 | print join(" ",map {$src."/".$_} @dwim),"\n"; 29 | 30 | -------------------------------------------------------------------------------- /smartflash/osmocom-peakhold.diff: -------------------------------------------------------------------------------- 1 | --- /home/sec/Projects/gnuradio/gr-osmosdr/apps/osmocom_fft 2015-07-26 13:22:47.743207885 +0200 2 | +++ /usr/local/bin/osmocom_fft 2015-08-03 15:07:23.977849575 +0200 3 | @@ -91,6 +91,8 @@ 4 | help="Set fftsink averaging factor, default=[%default]") 5 | parser.add_option("", "--averaging", action="store_true", default=False, 6 | help="Enable fftsink averaging, default=[%default]") 7 | + parser.add_option("", "--peak-hold", action="store_true", default=False, 8 | + help="Enable fftsink peak hold, default=[%default]") 9 | parser.add_option("", "--ref-scale", type="eng_float", default=1.0, 10 | help="Set dBFS=0dB input value, default=[%default]") 11 | parser.add_option("", "--fft-size", type="int", default=1024, 12 | @@ -242,6 +244,7 @@ 13 | ref_level=20.0, 14 | y_divs = 12, 15 | average=options.averaging, 16 | + peak_hold=options.peak_hold, 17 | avg_alpha=options.avg_alpha, 18 | fft_rate=options.fft_rate) 19 | 20 | -------------------------------------------------------------------------------- /testapp/cdc.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | //# MENU CDC 13 | void cdc_menu(){ 14 | uint32_t prompt = 0, rdCnt = 0; 15 | static uint8_t g_rxBuff[256]; 16 | CDCenable(); 17 | lcdPrintln("CDC enabled."); 18 | lcdDisplay(); 19 | getInputWaitRelease(); 20 | 21 | while(getInputRaw()!=BTN_ENTER){ 22 | if(getInputRaw()==BTN_RIGHT){ 23 | lcdPrint("status:"); 24 | lcdPrint(IntToStr(g_vCOM.tx_flags,3,F_HEX)); 25 | lcdPrint(", "); 26 | lcdPrint("c="); 27 | lcdPrint(IntToStr(prompt,1,F_LONG)); 28 | lcdPrintln("."); 29 | lcdDisplay(); 30 | getInputWaitRelease(); 31 | }; 32 | if(getInputRaw()==BTN_LEFT){ 33 | vcom_write((uint8_t *)"Hello World!\r\n", 14); 34 | getInputWaitRelease(); 35 | }; 36 | if ((vcom_connected() != 0) && (prompt == 0)) { 37 | prompt = 1; 38 | } 39 | /* If VCOM port is opened echo whatever we receive back to host. */ 40 | if (prompt) { 41 | rdCnt = vcom_bread(&g_rxBuff[0], 256); 42 | if (rdCnt) { 43 | vcom_write((uint8_t*)"[", 1); 44 | while(g_vCOM.tx_flags & VCOM_TX_BUSY) __WFI(); // Wait for buffer emtpy 45 | vcom_write(&g_rxBuff[0], rdCnt); 46 | while(g_vCOM.tx_flags & VCOM_TX_BUSY) __WFI(); // Wait for buffer emtpy 47 | vcom_write((uint8_t*)"]", 1); 48 | } 49 | } 50 | /* Sleep until next IRQ happens */ 51 | __WFI(); 52 | }; 53 | lcdPrintln("disconnect"); 54 | lcdDisplay(); 55 | CDCdisable(); 56 | getInputWaitRelease(); 57 | } 58 | -------------------------------------------------------------------------------- /testapp/exe.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | //# MENU execute 15 | void execute_menu(){ 16 | getInputWaitRelease(); 17 | executeSelect("C1D"); 18 | setTextColor(0xFF,0x00); 19 | }; 20 | -------------------------------------------------------------------------------- /testapp/fonts.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | const char * txt="The quick brown fx"; 15 | char filename[13]; 16 | 17 | //# MENU fonts 18 | void fonts_menu(){ 19 | getInputWaitRelease(); 20 | setSystemFont(); 21 | lcdClear(); 22 | lcdPrintln("Font test."); 23 | lcdDisplay(); 24 | 25 | while(1){ 26 | switch(getInputWait()){ 27 | case BTN_UP: 28 | setIntFont(&Font_Orbitron14pt); 29 | break; 30 | case BTN_DOWN: 31 | getInputWaitRelease(); 32 | setIntFont(&Font_7x8); 33 | if(selectFile(filename,"F0N")<0){ 34 | lcdPrintln("Select ERROR"); 35 | lcdDisplay(); 36 | getInputWait(); 37 | return; 38 | }; 39 | setExtFont(filename); 40 | break; 41 | case BTN_LEFT: 42 | break; 43 | case BTN_RIGHT: 44 | setIntFont(&Font_8x8Thin); 45 | break; 46 | case BTN_ENTER: 47 | return; 48 | }; 49 | lcdPrintln(txt); 50 | lcdDisplay(); 51 | getInputWaitRelease(); 52 | }; 53 | }; 54 | -------------------------------------------------------------------------------- /testapp/img.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 team rad1o 3 | * 4 | */ 5 | 6 | #include 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | //# MENU img 20 | void img_menu() { 21 | char filename[FLEN]; 22 | FATFS FatFs; 23 | FRESULT res; 24 | int so=58; 25 | 26 | lcdClear(); 27 | lcdPrintln("Image"); 28 | lcdPrintln("up: view file"); 29 | lcdPrintln("down:view ani"); 30 | lcdPrintln("l/r: contrast"); 31 | lcdDisplay(); 32 | 33 | getInputWaitRelease(); 34 | 35 | while(1){ 36 | switch(getInputWaitRepeat()){ 37 | case BTN_UP: 38 | getInputWaitRelease(); 39 | if(selectFile(filename,"LCD")<0){ 40 | lcdPrintln("Select ERROR"); 41 | lcdDisplay(); 42 | getInputWait(); 43 | return; 44 | }; 45 | 46 | lcdShowImageFile(filename); 47 | break; 48 | case BTN_DOWN: 49 | getInputWaitRelease(); 50 | if(selectFile(filename,"ANI")<0){ 51 | lcdPrintln("Select ERROR"); 52 | lcdDisplay(); 53 | getInputWait(); 54 | return; 55 | }; 56 | 57 | lcdShowAnim(filename); 58 | lcdPrintln("done."); 59 | lcdDisplay(); 60 | getInputWaitRelease(); 61 | break; 62 | case BTN_LEFT: 63 | so-=1; 64 | if(so<0) so=132; 65 | lcd_select(); 66 | lcdWrite(TYPE_CMD,0x25); lcdWrite(TYPE_DATA, so); 67 | lcd_deselect(); 68 | break; 69 | case BTN_RIGHT: 70 | so+=1; 71 | if(so>132) so=0; 72 | lcd_select(); 73 | lcdWrite(TYPE_CMD,0x25); lcdWrite(TYPE_DATA, so); 74 | lcd_deselect(); 75 | break; 76 | case BTN_ENTER: 77 | lcd_select(); 78 | lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,2); 79 | lcd_deselect(); 80 | return; 81 | }; 82 | }; 83 | }; 84 | -------------------------------------------------------------------------------- /testapp/led.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | 12 | //# MENU led 13 | void led_menu(){ 14 | getInputWaitRelease(); 15 | 16 | uint8_t leds=0; 17 | uint8_t adc=0; 18 | while(1){ 19 | lcdClear(); 20 | lcdPrintln("LED:"); 21 | lcdPrintln(""); 22 | lcdPrintln("U Toggle LEDs"); 23 | lcdPrintln("D Toggle ADC"); 24 | lcdPrintln(""); 25 | lcdDisplay(); 26 | switch(getInput()){ 27 | case BTN_UP: 28 | adc=0; 29 | leds=1-leds; 30 | SETUPgout(LED4); 31 | if(leds){ 32 | ON(LED1); 33 | ON(LED2); 34 | ON(LED3); 35 | ON(LED4); 36 | }else{ 37 | OFF(LED1); 38 | OFF(LED2); 39 | OFF(LED3); 40 | OFF(LED4); 41 | }; 42 | break; 43 | case BTN_DOWN: 44 | adc=1; 45 | SETUPadc(LED4); 46 | break; 47 | case BTN_ENTER: 48 | SETUPgout(LED1); 49 | SETUPgout(LED2); 50 | SETUPgout(LED3); 51 | SETUPgout(LED4); 52 | return; 53 | }; 54 | if(adc){ 55 | lcdPrint("LED4: "); 56 | lcdPrint(IntToStr(adc_get_single(ADC0,ADC_CR_CH6)*2*330/1023,4,F_LONG)); 57 | lcdNl(); 58 | lcdDisplay(); 59 | }; 60 | getInputWaitRelease(); 61 | }; 62 | }; 63 | -------------------------------------------------------------------------------- /testapp/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of rad1o 3 | * 4 | */ 5 | 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | 18 | #include 19 | 20 | #include "main.gen" 21 | 22 | void sys_tick_handler(void){ 23 | incTimer(); 24 | generated_tick(); 25 | }; 26 | 27 | int main(void) { 28 | cpuClockInit(); /* CPU Clock is now 104 MHz */ 29 | systickInit(); 30 | 31 | // cpu_clock_set(204); 32 | 33 | SETUPgout(EN_VDD); 34 | SETUPgout(EN_1V8); 35 | SETUPgout(MIXER_EN); 36 | SETUPgout(MIC_AMP_DIS); 37 | 38 | SETUPgout(LED1); 39 | SETUPgout(LED2); 40 | SETUPgout(LED3); 41 | SETUPgout(LED4); 42 | 43 | inputInit(); 44 | lcdInit(); 45 | fsInit(); 46 | lcdFill(0xff); 47 | readConfig(); 48 | 49 | generated_init(); 50 | 51 | while(1){ 52 | // if(getInput()){ 53 | handleMenu(&menu_main); 54 | getInputWaitRelease(); 55 | // }; 56 | // fancyNickname(); 57 | }; 58 | return 0; 59 | } 60 | -------------------------------------------------------------------------------- /testapp/msc.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | 13 | //# MENU MSC 14 | void msc_menu(){ 15 | MSCenable(); 16 | lcdPrintln("MSC enabled."); 17 | getInputWaitRelease(); 18 | while(getInputRaw()!=BTN_ENTER){ 19 | if(getInputRaw()==BTN_RIGHT) 20 | lcdPrintln("."); 21 | lcdDisplay(); 22 | __WFI(); 23 | }; 24 | lcdPrintln("disconnect"); 25 | lcdDisplay(); 26 | MSCdisable(); 27 | fsReInit(); 28 | getInputWaitRelease(); 29 | }; 30 | -------------------------------------------------------------------------------- /testapp/nightcheck.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | //# MENU night 18 | void menu_night(void){ 19 | while(getInputRaw()!=BTN_ENTER){ 20 | lcdClear(); 21 | lcdPrint("night:"); 22 | lcdPrint(IntToStr(isNight(),3,0)); 23 | lcdNl(); 24 | lcdPrint("light:"); 25 | lcdPrint(IntToStr(GetLight(),3,0)); 26 | lcdNl(); 27 | lcdDisplay(); 28 | }; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /testapp/rotate.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | //# MENU rotate 10 | void rotate_menu(){ 11 | getInputWaitRelease(); 12 | 13 | lcdClear(); 14 | lcdPrintln("Rotate:"); 15 | lcdPrintln(" "); 16 | lcdPrintln("Lt Turn Left"); 17 | lcdPrintln("Rt Turn Right"); 18 | lcdPrintln("Up Turn Upright"); 19 | lcdPrintln("Enter to Exit"); 20 | lcdDisplay(); 21 | 22 | while(1){ 23 | switch(getInputWaitRepeat()){ 24 | case BTN_LEFT: 25 | lcd_select(); 26 | lcdWrite(TYPE_CMD,0x36); // MDAC-Command 27 | lcdWrite(TYPE_DATA,0b01100000); // // my,mx,v,lao,rgb,x,x,x 28 | lcd_deselect(); 29 | lcdDisplay(); 30 | break; 31 | case BTN_RIGHT: 32 | lcd_select(); 33 | lcdWrite(TYPE_CMD,0x36); // MDAC-Command 34 | lcdWrite(TYPE_DATA,0b10100000); // // my,mx,v,lao,rgb,x,x,x 35 | lcd_deselect(); 36 | lcdDisplay(); 37 | break; 38 | case BTN_DOWN: 39 | lcd_select(); 40 | lcdWrite(TYPE_CMD,0x36); // MDAC-Command 41 | lcdWrite(TYPE_DATA,0b00000000); // // my,mx,v,lao,rgb,x,x,x 42 | lcd_deselect(); 43 | lcdDisplay(); 44 | break; 45 | case BTN_UP: 46 | lcd_select(); 47 | lcdWrite(TYPE_CMD,0x36); // MDAC-Command 48 | lcdWrite(TYPE_DATA,0b11000000); // // my,mx,v,lao,rgb,x,x,x 49 | lcd_deselect(); 50 | lcdDisplay(); 51 | break; 52 | case BTN_ENTER: // Exit 53 | return; 54 | break; 55 | }; 56 | getInputWaitRelease(); 57 | }; 58 | }; 59 | -------------------------------------------------------------------------------- /testapp/speed.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | void init_speed(){ 12 | }; 13 | 14 | static uint8_t tickon=0; 15 | 16 | void tick_speed(){ 17 | static int ctr=0; 18 | if (tickon) 19 | if (++ctr%15==1) 20 | TOGGLE(LED4); 21 | }; 22 | 23 | //# MENU speed 24 | void speed_menu(){ 25 | getInputWaitRelease(); 26 | SETUPgout(LED4); 27 | tickon=1; 28 | lcdClear(); 29 | lcdPrintln("Speed."); 30 | lcdPrintln("up: 204"); 31 | lcdPrintln("down: 102"); 32 | lcdPrintln("left: 12"); 33 | lcdPrintln("right: 16"); 34 | lcdDisplay(); 35 | ON(LED1); 36 | 37 | while(1){ 38 | switch(getInput()){ 39 | case BTN_UP: 40 | cpu_clock_set(204); 41 | break; 42 | case BTN_DOWN: 43 | cpu_clock_set(102); 44 | break; 45 | case BTN_LEFT: 46 | cpu_clock_set(12); 47 | break; 48 | case BTN_RIGHT: 49 | cpu_clock_set(16); 50 | break; 51 | case BTN_ENTER: 52 | tickon=0; 53 | OFF(LED4); 54 | return; 55 | }; 56 | lcdSetCrsr(0,6*8); 57 | lcdPrint("Speed:"); 58 | lcdPrint(IntToStr(_cpu_speed,4,F_LONG)); 59 | lcdNl(); 60 | lcdPrint("STK_CALIB:"); 61 | lcdPrint(IntToStr(STK_CALIB,8,F_HEX)); 62 | lcdNl(); 63 | lcdDisplay(); 64 | 65 | CGU_FREQ_MON = (0x0D << 24) | (1 << 23) | (256 << 0); 66 | while(CGU_FREQ_MON & (1 << 23)); 67 | 68 | lcdPrint("FREQ_MON:"); 69 | lcdPrint(IntToStr(CGU_FREQ_MON,8,F_HEX)); 70 | lcdNl(); 71 | 72 | uint32_t freq = ((CGU_FREQ_MON >> 9) & 0x3fFF) * 12e6 / 256.; 73 | lcdPrint("Measured:"); 74 | lcdPrint(IntToStr(freq/1e6,4,F_LONG)); 75 | lcdDisplay(); 76 | }; 77 | }; 78 | -------------------------------------------------------------------------------- /tools/lcd2ani.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | # lcd2ani.pl - by 08/2015, BSD Licence 4 | # 5 | # This script creates an ani from .lcd's 6 | 7 | use strict; 8 | use warnings; 9 | use Getopt::Long; 10 | use Module::Load; 11 | 12 | $|=1; 13 | 14 | ### 15 | ### Runtime Options 16 | ### 17 | 18 | my ($verbose); 19 | my ($mode); 20 | my ($header); 21 | 22 | $mode=12; 23 | 24 | GetOptions ( 25 | "verbose" => \$verbose, # flag 26 | "help" => sub { 27 | print < { }* 29 | 30 | Options: 31 | --verbose Be verbose. 32 | HELP 33 | exit(-1);} 34 | ); 35 | 36 | ### 37 | ### Code starts here. 38 | ### 39 | 40 | my $out=shift ||"sample.ani"; 41 | 42 | open(O,">",$out)||die; 43 | while ($#ARGV>0){ 44 | my $in=shift; 45 | my $delay=shift; 46 | if($verbose){ 47 | print "Adding $in for $delay ms\n"; 48 | }; 49 | print O pack("S",$delay); 50 | open(F,"<",$in)||die; 51 | { local $/=undef; print O ; }; 52 | close(F); 53 | }; 54 | 55 | close(O); 56 | -------------------------------------------------------------------------------- /tools/makefont.pl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rad1o/f1rmware/eda4f0b9095be4dabb8476de9cef21d9614f16fb/tools/makefont.pl --------------------------------------------------------------------------------