; ; "Mullet Rhythm 9090" ; Roland X0X style sequencer project ; ; 40MHz 18F4x2 PIC ; ; see http://www.mulletronic.com/diy/mr9090/ ; ; Ports: ; RA0: tempo pot, a/d conversion ; RA1: key circuit bus b, input ; RA2 - RA3: trigger out, outputs ; RA4: lcd display bus, enable output, 10k pull-up ; RA5: key circuit bus a, input ; RB0 - RB7: trigger out / lcd display bus, outputs ; RC1: 24ppqn start/stop in ; RC2: 24ppqn clock in (uses capture1 interrupt for detection) ; RC3 - RC4: flash memory bus, i2c ; RC5: 24ppqn sync out (connecter to tr-9090 RB7) ; RC6: midi output pin 5, output? ; RC7: midi input, input ; RE0: led circuit bus a, output (active low) ; RE1: led circuit bus b, output (active low) ; RE2: pattern led display mux inhibit, output ; RD0 - RD3: pattern led display mux / key+led circuit mux, outputs ; RD4 - RD7: pattern led display second mux, outputs ; ; FSR0 - dedicated to low priority interrupt code ; FSR1 - dedicated to busy loop code ; FSR2 - dedicated to high priority interrupt code ; TBLPTR - shared ; ; timer 0 - din sync output pulse width timer ; timer 1 - internal clock timer (48ppqn) ; timer 2 - key/led multiplexer timer ; timer 3 - trigger output pulse width timer ; ; author: Marko Kanala, raato ]a t[ mulletronic.com ; ; LICENSE ; Creative Commons Attribution-NonCommercial-ShareALike 2.5 ; ; You are free: ; ; * to copy, distribute, display, and perform the work ; * to make derivative works ; ; Under the following conditions: ; ; 1. Attribution. You must attribute the work in the manner specified by the ; author or licensor. ; 2. Noncommercial. You may not use this work for commercial purposes. ; 3. Share Alike. If you alter, transform, or build upon this work, you may ; distribute the resulting work only under a license identical to this one. ; ; * For any reuse or distribution, you must make clear to others the license ; terms of this work. ; * Any of these conditions can be waived if you get permission from the ; copyright holder. ; ; Your fair use and other rights are in no way affected by the above. ; ; This is a human-readable summary of the Legal Code. ; See full license at http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode ; ; Copyright: Marko Kanala (raato@mulletronic.com). ; LIST P=PIC18F442, R=DEC #include <p18f442.inc> BEGIN ; our microcontroller configuration bits #include <config.h> ; our macros #include <xoxmacros.h> ; our data variables & constants #include <datavariables.h> #include <constants.h> ; our global application settings #include <_settings.h> ; see bootloader.asm #define BOOTLOADER 0x3F00 org 0x0000 ; goto start goto BOOTLOADER org 0x0004 goto start org 0x0008 goto hp_irq org 0x0018 goto lp_irq #include <utility.inc> start: ; call startup initialization call startupinit ; default to play mode SETMODE MODE_PPLAY call mode_pattplay_enter mainloop: ; loop and call the appropriate mode function clrwdt IFEVENT EVENT_SYSEX, main_sysex ; note: settings a special mode when none of the ; mode bits are set movf mode, W bnz mainloop_notsettings call mode_settings mainloop_notsettings: IFMODECALL MODE_PPLAY, mode_pattplay IFMODECALL MODE_PWRITE, mode_pattwrite IFMODECALL MODE_TPLAY, mode_trackplay IFMODECALL MODE_TWRITE, mode_trackwrite bra mainloop ; call midi_receiving_sysex in continuous loop ; while receiving sysex main_sysex: clrwdt call midi_receiving_sysex IFNOEVENT EVENT_SYSEX, mainloop bra main_sysex ; our sysex id sysex_id: db 0x71, 0x55, 0x17 ; include the implementation #include <startupinit.inc> #include <irq_hipri.inc> #include <irq_lopri.inc> #include <keysleds.inc> #include <patterndisplay.inc> #include <mode_pattwrite.inc> #include <mode_pattplay.inc> #include <mode_trawrite.inc> #include <mode_traplay.inc> #include <mode_settings.inc> #include <player.inc> #include <adc.inc> #include <lcd.inc> #include <i2c.inc> #include <bpmtable.inc> #include <lcdtexts.inc> #include <9090.inc> #include <startupreset.inc> #include <midi.inc> #include <din.inc> #include <copypasteetc.inc> #include <keyboard.inc> #include <eeprom.inc> #include <bootloader.inc> END
BOOTLOADER start hp_irq lp_irq startupinit mode_pattplay_enter mode_settings midi_receiving_sysex