                         .module valve6.c
--- 0000                   .dbfile valve6.c
                         .area text
                       ;  IX -> 0,x
 9813                  _SCI_isr::
 9813                    .dbfile C:\ICCTJP\include/isrdecl.h
 9813                    .dbfunc SCI_isr
 9813                    .dbline 41
                       ; /************************************************************************************************************************
                       ; *   Program:        crap.c                          *
                       ; *   Description:    This program was written to test the pneumatic                      *
                       ; *                   valves and cylinders.  It will prompt the user  *
                       ; *                   to select the desired function (manual or       *
                       ; *                   automatic positioning) and to select the desired      *
                       ; *                   characteristics of the PWM signal for the       *
                       ; *                   valves.                 *
                       ; *   Programmer:     Scott Nortman                   *
                       ; *   Date:           March 16, 2000                  *
                       ; ************************************************************************************************************************/
                       ; 
                       ; /**************************** Constants *********************************/
                       ; #define pulse_handler TOC2_isr
                       ; #define valve_sensor analog(1)
                       ; #define in  0
                       ; #define out 1
                       ; #define P 0
                       ; #define I 1
                       ; #define D 2
                       ; #define dt 4096
                       ; /**************************** End of Constants **************************/
                       ; 
                       ; /*************************** Interrupts *********************************/
                       ; #pragma interrupt_handler TOC2_isr, RTI_isr
                       ; /*************************** End of Interrupts **************************/
                       ; 
                       ; /************************** Includes ************************************/
                       ; #include <tjpbase.h>
                       ; #include <analog.h>
                       ; #include <vectors.h>
                       ; #include <mil.h>
                       ; #include <hc11.h>
                       ; /************************ End of includes *******************************/
                       ; 
                       ; /************************** Global Variables*****************************/
                       ; long duty_cycle;    //duty_cycle in e clocks
                       ; long period;        //period in e clocks
                       ; int desired_position;
                       ; int error[3] = {0};
                       ; int k[3] = {300, 0, 0};
 9813                  L2:
 9813  3B                rti
                       ;  IX -> 0,x
 9814                  _SPI_isr::
 9814                    .dbfunc SPI_isr
 9814                    .dbline 47
                       ;     char clear[]= "\x1b\x5B\x32\x4A\x04"; 
                       ; 
                       ; /************************ End of Global Variables ***********************/
                       ; 
                       ; 
                       ; /************************** Function Declarations  **********************/
 9814                  L3:
 9814  3B                rti
                       ;  IX -> 0,x
 9815                  _PAIE_isr::
 9815                    .dbfunc PAIE_isr
 9815                    .dbline 53
                       ; void init_pulse();      //Initilizes TOC for PWM interrupts
                       ; void move(int);
                       ; void pulse_handler();   //This is the function executed at each TOC2_isr
                       ; void move_cylinder(int);
                       ; long pidControl(int error[3], int k[3], int deltat);
                       ; /******************** End of Function Declarations  *********************/
 9815                  L4:
 9815  3B                rti
                       ;  IX -> 0,x
 9816                  _PAV_isr::
 9816                    .dbfunc PAV_isr
 9816                    .dbline 59
                       ; 
                       ; 
                       ; /**************************** Main **************************************/
                       ; 
                       ; void main(void)
                       ; {
 9816                  L5:
 9816  3B                rti
                       ;  IX -> 0,x
 9817                  _TOF_isr::
 9817                    .dbfunc TOF_isr
 9817                    .dbline 65
                       ;     /* VT100 clear screen */ 
                       ;     char clear[]= "\x1b\x5B\x32\x4A\x04"; 
                       ;     
                       ;     /* VT100 position cursor at (x,y) = (3,12) command is "\x1b[3;12H"*/
                       ;     char place_home[]= "\x1b[1;1H"; /*Home*/
                       ;     
 9817                  L6:
 9817  3B                rti
                       ;  IX -> 0,x
 9818                  _TOC3_isr::
 9818                    .dbfunc TOC3_isr
 9818                    .dbline 89
                       ;     char place_text[] = "\x1b[10;1H";/*position for text to be entered*/
                       ;     
                       ;     desired_position = 150;
                       ;     
                       ;     SET_BIT(PACTL, 0x80);  //Data direction for porta
                       ;     CLEAR_BIT(PACTL, 0x03); //Set RTI rate
                       ;     SET_BIT(TMSK2, 0x40);//Enable RTI interrupt 
                       ;     init_pulse();
                       ;     init_analog();
                       ;     init_serial();
                       ; 
                       ;     printf("%s", clear);  
                       ;     printf("%s", place_home);
                       ;     
                       ;     period = 60000;
                       ;     INTR_ON();
                       ;     while (1)
                       ;     {
                       ;         duty_cycle = pidControl(error, k, dt);
                       ;         
                       ;         if (duty_cycle < 0)
                       ;         {
                       ;             CLEAR_BIT(PORTA, 0x20);
                       ;             duty_cycle = -1 * duty_cycle;
 9818                  L7:
 9818  3B                rti
                       ;  IX -> 0,x
 9819                  _TIC3_isr::
 9819                    .dbfunc TIC3_isr
 9819                    .dbline 101
                       ;         }
                       ;         else
                       ;         {
                       ;             SET_BIT(PORTA, 0x20);
                       ;         }
                       ;     }
                       ;     
                       ; }
                       ; 
                       ; 
                       ; /**************************** End of Main *******************************/
                       ; 
 9819                  L8:
 9819  3B                rti
                       ;  IX -> 0,x
 981A                  _TIC2_isr::
 981A                    .dbfunc TIC2_isr
 981A                    .dbline 107
                       ; 
                       ; 
                       ; /************************** Function Defintions *************************/
                       ; 
                       ; void init_pulse(void)
                       ; {
 981A                  L9:
 981A  3B                rti
                       ;  IX -> 0,x
 981B                  _TIC1_isr::
 981B                    .dbfunc TIC1_isr
 981B                    .dbline 113
                       ;     INTR_OFF();
                       ;     SET_BIT(TCTL1, 0x80);   //Enable OC2 for falling edge on first sucessful compare (safe default)
                       ;     CLEAR_BIT(TCTL1, 0x40);
                       ;     TOC2 = 0;   //Set TOC2 to zero
                       ;     SET_BIT(TMSK1, 0x40);   //Enable OC2 mask
                       ; }
 981B                  L10:
 981B  3B                rti
                       ;  IX -> 0,x
 981C                  _IRQ_isr::
 981C                    .dbfunc IRQ_isr
 981C                    .dbline 125
                       ; 
                       ; void pulse_handler()
                       ; {   //printf("ISR\n");
                       ; 
                       ;     //enable toggle
                       ;     //CLEAR_BIT(TCTL1, 0x80);
                       ;     //SET_BIT(TCTL1, 0x40);
                       ;     if (duty_cycle <= 100)  
                       ;     //This handles if duty cycle is less than or equal to 100 e clocks ( almost always off)
                       ;     {
                       ;         SET_BIT(TCTL1, 0x80);   //Enable OC2 for falling edge (make sure pin goes low)
                       ;         CLEAR_BIT(TCTL1, 0X40);
 981C                  L11:
 981C  3B                rti
                       ;  IX -> 0,x
 981D                  _XIRQ_isr::
 981D                    .dbfunc XIRQ_isr
 981D                    .dbline 131
                       ;         TOC2 += period;         //Add the period to TOC2
                       ;     }
                       ;     
                       ;     else if ((period - duty_cycle) <= 100)  //This handles what to do if the pin should almost always be high
                       ;     {
                       ;         CLEAR_BIT(TCTL1, 0x80); //Set the pin to rising edge
 981D                  L12:
 981D  3B                rti
                       ;  IX -> 0,x
 981E                  _SWI_isr::
 981E                    .dbfunc SWI_isr
 981E                    .dbline 137
                       ;         SET_BIT(TCTL1, 0X40);
                       ;         TOC2 += period;         //Add period
                       ;     }
                       ;     
                       ;     else        //This is for the general case
                       ;     {
 981E                  L13:
 981E  3B                rti
                       ;  IX -> 0,x
 981F                  _ILLOP_isr::
 981F                    .dbfunc ILLOP_isr
 981F                    .dbline 143
                       ;         if (TCTL1 & 0x40)   //Test bit 6.  If it is a one, you are now high and must change to go low
                       ;         {
                       ;             CLEAR_BIT(TCTL1, 0x40);  //Clear bit 6 to set for falling edge on next interrupt
                       ;             SET_BIT(TCTL1, 0X80);
                       ;             TOC2 += duty_cycle;     //Add the duty cycle e clocks if you are now high
                       ;         }
 981F                  L14:
 981F  3B                rti
                       ;  IX -> 0,x
 9820                  _COP_isr::
 9820                    .dbfunc COP_isr
 9820                    .dbline 149
                       ;         
                       ;         else    //Test bit 6.  If it is low, you are now low and must change to go high
                       ;         {
                       ;             SET_BIT(TCTL1, 0xC0);   //Set bit 6 to go high next interrupt
                       ;             TOC2 += (period - duty_cycle);
                       ;         }
 9820                  L15:
 9820  3B                rti
                       ;  IX -> 0,x
 9821                  _CLMON_isr::
 9821                    .dbfunc CLMON_isr
 9821                    .dbline 155
                       ;     }
                       ;     
                       ;     
                       ;     CLEAR_FLAG(TFLG1, 0x40);    //Clear the interrupt flag
                       ; }   //This is the end of the interrupt routine
                       ; 
 9821                  L16:
 9821  3B                rti
                         .area data
 9C3F                  _drew::
 9C3F                    .blkw 1
                         .area idata
--- 0000 0000              .word _interrupt_vectors
                         .area data
 9C41                  _error::
 9C41                    .blkb 2
                         .area idata
--- 0002 0000              .word 0
                         .area data
--- 0004                   .blkb 4
                         .area idata
--- 0004 00000000          .byte 0,0,0,0
                         .area data
 9C47                  _k::
 9C47                    .blkb 2
                         .area idata
--- 0008 012C              .word 300
                         .area data
--- 000A                   .blkb 2
                         .area idata
--- 000A 0000              .word 0
                         .area data
--- 000C                   .blkb 2
                         .area idata
--- 000C 0000              .word 0
                         .area data
 9C4D                  _clear::
 9C4D                    .blkb 6
                         .area idata
--- 000E 1B5B324A0400      .byte 27,91,50,'J,4,0
                         .area text
--- 000F                 L18:
--- 000F 1B5B324A0400      .byte 27,91,50,'J,4,0
--- 0015                 L19:
--- 0015 1B5B313B314800    .byte 27,91,49,59,49,'H,0
--- 001C                 L20:
--- 001C 1B5B31303B314800  .byte 27,91,49,48,59,49,'H,0
                       ;  lreg1 -> -4,x
                       ;  lreg2 -> -8,x
                       ;  IX -> 0,x
                       ;          ?temp -> 3,x
                       ;     place_text -> 7,x
                       ;     place_home -> 15,x
                       ;          clear -> 22,x
 9837                  _main::
 9837  BD86BA            jsr __enterb
 983A  9C                .byte 0x9c
 983B                    .dbfile valve6.c
 983B                    .dbfunc main
 983B                    .dbline 61
 983B  EC00              ldd 0,x
 983D  C30016            addd #22
 9840  18CE9822          ldy #L18
 9844  3C                pshx
 9845  8F                xgdx
 9846  CC0006            ldd #6
 9849  BD86A2            jsr __asgnblk
 984C  38                pulx
 984D                    .dbline 64
 984D  EC00              ldd 0,x
 984F  C3000F            addd #15
 9852  18CE9828          ldy #L19
 9856  3C                pshx
 9857  8F                xgdx
 9858  CC0007            ldd #7
 985B  BD86A2            jsr __asgnblk
 985E  38                pulx
 985F                    .dbline 66
 985F  EC00              ldd 0,x
 9861  C30007            addd #7
 9864  18CE982F          ldy #L20
 9868  3C                pshx
 9869  8F                xgdx
 986A  CC0008            ldd #8
 986D  BD86A2            jsr __asgnblk
 9870  38                pulx
 9871                    .dbline 68
 9871  CC0096            ldd #150
 9874  FD9C6A            std _desired_position
 9877                    .dbline 70
 9877  18CE1026          ldy #0x1026
 987B  181C0080          bset 0,y,#128
 987F                    .dbline 71
 987F  18CE1026          ldy #0x1026
 9883  181D0003          bclr 0,y,#0x3
 9887                    .dbline 72
 9887  18CE1024          ldy #0x1024
 988B  181C0040          bset 0,y,#64
 988F                    .dbline 73
 988F  BD993D            jsr _init_pulse
 9892                    .dbline 74
 9892  BD813B            jsr _init_analog
 9895                    .dbline 75
 9895  BD8381            jsr _init_serial
 9898                    .dbline 77
 9898  EC00              ldd 0,x
 989A  C30016            addd #22
 989D  37                pshb
 989E  36                psha
 989F  CC9C28            ldd #L21
 98A2  BD9442            jsr _printf
 98A5  1838              puly
 98A7                    .dbline 78
 98A7  EC00              ldd 0,x
 98A9  C3000F            addd #15
 98AC  37                pshb
 98AD  36                psha
 98AE  CC9C28            ldd #L21
 98B1  BD9442            jsr _printf
 98B4  1838              puly
 98B6                    .dbline 80
 98B6  18CE9C24          ldy #L22
 98BA  BD88F8            jsr __ly2reg
 98BD  18CE9C6C          ldy #_period
 98C1  BD8935            jsr __lreg2y
 98C4  0E                        cli
                       
 98C5                    .dbline 81
 98C5  206C              bra L24
 98C7                  L23:
 98C7                    .dbline 84
 98C7  CC1000            ldd #4096
 98CA  37                pshb
 98CB  36                psha
 98CC  CC9C47            ldd #_k
 98CF  37                pshb
 98D0  36                psha
 98D1  CC9C41            ldd #_error
 98D4  BD9B0E            jsr _pidControl
 98D7  1838              puly
 98D9  1838              puly
 98DB  EC00              ldd 0,x
 98DD  C30003            addd #3
 98E0  188F              xgdy
 98E2  BD8935            jsr __lreg2y
 98E5  EC00              ldd 0,x
 98E7  C30003            addd #3
 98EA  188F              xgdy
 98EC  BD88F8            jsr __ly2reg
 98EF  18CE9C70          ldy #_duty_cycle
 98F3  BD8935            jsr __lreg2y
 98F6                    .dbline 86
 98F6  18CE9C70          ldy #_duty_cycle
 98FA  BD88F8            jsr __ly2reg
 98FD  18CE9C20          ldy #L28
 9901  BD891E            jsr __ly2reg2
 9904  BD8D86            jsr __lcmp
 9907  2C22              bge L26
 9909                    .dbline 88
 9909  18CE1000          ldy #0x1000
 990D  181D0020          bclr 0,y,#0x20
 9911                    .dbline 89
 9911  18CE9C1C          ldy #L29
 9915  BD88F8            jsr __ly2reg
 9918  18CE9C70          ldy #_duty_cycle
 991C  BD891E            jsr __ly2reg2
 991F  BD8ACD            jsr __lmul
 9922  18CE9C70          ldy #_duty_cycle
 9926  BD8935            jsr __lreg2y
 9929                    .dbline 90
 9929  2008              bra L27
 992B                  L26:
 992B                    .dbline 93
 992B  18CE1000          ldy #0x1000
 992F  181C0020          bset 0,y,#32
 9933                    .dbline 94
 9933                  L27:
 9933                    .dbline 95
 9933                  L24:
 9933                    .dbline 82
 9933  2092              bra L23
 9935                  L17:
 9935  8F                xgdx
 9936  C3001C            addd #28
 9939  8F                xgdx
 993A  35                txs
 993B  38                pulx
 993C  39                rts
                       ;  IX -> 0,x
 993D                  _init_pulse::
 993D  0F                        sei
                       
 993E                    .dbfunc init_pulse
 993E                    .dbline 109
 993E  18CE1020          ldy #0x1020
 9942  181C0080          bset 0,y,#128
 9946                    .dbline 110
 9946  18CE1020          ldy #0x1020
 994A  181D0040          bclr 0,y,#0x40
 994E                    .dbline 111
 994E  CC0000            ldd #0
 9951  FD1018            std 0x1018
 9954                    .dbline 112
 9954  18CE1022          ldy #0x1022
 9958  181C0040          bset 0,y,#64
 995C                    .dbline 113
 995C                  L30:
 995C  39                rts
                       ;  lreg1 -> -4,x
                       ;  lreg2 -> -8,x
                       ;  IX -> 0,x
 995D                  _TOC2_isr::
 995D  BD86BA            jsr __enterb
 9960  82                .byte 0x82
 9961                    .dbfunc TOC2_isr
 9961                    .dbline 121
 9961  18CE9C70          ldy #_duty_cycle
 9965  BD88F8            jsr __ly2reg
 9968  18CE9C18          ldy #L34
 996C  BD891E            jsr __ly2reg2
 996F  BD8D86            jsr __lcmp
 9972  2E29              bgt L32
 9974                    .dbline 124
 9974  18CE1020          ldy #0x1020
 9978  181C0080          bset 0,y,#128
 997C                    .dbline 125
 997C  18CE1020          ldy #0x1020
 9980  181D0040          bclr 0,y,#0x40
 9984                    .dbline 126
 9984  18CE9C6C          ldy #_period
 9988  BD891E            jsr __ly2reg2
                         ; vol
 998B  FC1018            ldd 0x1018
 998E  BD89B9            jsr __ud2lreg
 9991  BD8A84            jsr __ladd
 9994  BD89DF            jsr __lreg2d
 9997  FD1018            std 0x1018
 999A                    .dbline 127
 999A  7E9A3E            jmp L33
 999D                  L32:
 999D                    .dbline 129
 999D  18CE9C6C          ldy #_period
 99A1  BD88F8            jsr __ly2reg
 99A4  18CE9C70          ldy #_duty_cycle
 99A8  BD891E            jsr __ly2reg2
 99AB  BD8A9F            jsr __lsub
 99AE  18CE9C18          ldy #L34
 99B2  BD891E            jsr __ly2reg2
 99B5  BD8D86            jsr __lcmp
 99B8  2E28              bgt L35
 99BA                    .dbline 131
 99BA  18CE1020          ldy #0x1020
 99BE  181D0080          bclr 0,y,#0x80
 99C2                    .dbline 132
 99C2  18CE1020          ldy #0x1020
 99C6  181C0040          bset 0,y,#64
 99CA                    .dbline 133
 99CA  18CE9C6C          ldy #_period
 99CE  BD891E            jsr __ly2reg2
                         ; vol
 99D1  FC1018            ldd 0x1018
 99D4  BD89B9            jsr __ud2lreg
 99D7  BD8A84            jsr __ladd
 99DA  BD89DF            jsr __lreg2d
 99DD  FD1018            std 0x1018
 99E0                    .dbline 134
 99E0  205C              bra L36
 99E2                  L35:
 99E2                    .dbline 138
 99E2  18CE1020          ldy #0x1020
 99E6  181F004028        brclr 0,y,#64,L37
 99EB                    .dbline 140
 99EB  18CE1020          ldy #0x1020
 99EF  181D0040          bclr 0,y,#0x40
 99F3                    .dbline 141
 99F3  18CE1020          ldy #0x1020
 99F7  181C0080          bset 0,y,#128
 99FB                    .dbline 142
 99FB  18CE9C70          ldy #_duty_cycle
 99FF  BD891E            jsr __ly2reg2
                         ; vol
 9A02  FC1018            ldd 0x1018
 9A05  BD89B9            jsr __ud2lreg
 9A08  BD8A84            jsr __ladd
 9A0B  BD89DF            jsr __lreg2d
 9A0E  FD1018            std 0x1018
 9A11                    .dbline 143
 9A11  202B              bra L38
 9A13                  L37:
 9A13                    .dbline 147
 9A13  18CE1020          ldy #0x1020
 9A17  181C00C0          bset 0,y,#192
 9A1B                    .dbline 148
 9A1B  18CE9C6C          ldy #_period
 9A1F  BD88F8            jsr __ly2reg
 9A22  18CE9C70          ldy #_duty_cycle
 9A26  BD891E            jsr __ly2reg2
 9A29  BD8A9F            jsr __lsub
 9A2C  BD8972            jsr __lregmov
                         ; vol
 9A2F  FC1018            ldd 0x1018
 9A32  BD89B9            jsr __ud2lreg
 9A35  BD8A84            jsr __ladd
 9A38  BD89DF            jsr __lreg2d
 9A3B  FD1018            std 0x1018
 9A3E                    .dbline 149
 9A3E                  L38:
 9A3E                    .dbline 150
 9A3E                  L36:
 9A3E                  L33:
 9A3E                    .dbline 153
 9A3E  18CE1023          ldy #0x1023
 9A42  181D00BF          bclr 0,y,#0xbf
 9A46                    .dbline 154
 9A46                  L31:
 9A46  08                inx
 9A47  08                inx
 9A48  35                txs
 9A49  38                pulx
 9A4A  3B                rti
 9A4B                  L40:
 9A4B  1B5B313B314800    .byte 27,91,49,59,49,'H,0
                       ;  lreg1 -> -4,x
                       ;  lreg2 -> -8,x
                       ;  IX -> 0,x
                       ;  func temp: 2,x - 4,x
                       ;     place_home -> 5,x
 9A52                  _RTI_isr::
 9A52  BD86BA            jsr __enterb
 9A55  8C                .byte 0x8c
 9A56                    .dbfunc RTI_isr
 9A56                    .dbline 161
                       ; void RTI_isr(void)
                       ; {
                       ; 
                       ;     
                       ;     /* VT100 position cursor at (x,y) = (3,12) command is "\x1b[3;12H"*/
                       ;     char place_home[]= "\x1b[1;1H"; /*Home*/
 9A56  EC00              ldd 0,x
 9A58  C30005            addd #5
 9A5B  18CE9A4B          ldy #L40
 9A5F  3C                pshx
 9A60  8F                xgdx
 9A61  CC0007            ldd #7
 9A64  BD86A2            jsr __asgnblk
 9A67  38                pulx
 9A68                    .dbline 162
                       ;     error [2] = error[1];
 9A68  FC9C43            ldd _error+2
 9A6B  FD9C45            std _error+4
 9A6E                    .dbline 163
                       ;     error[1] = error[0];
 9A6E  FC9C41            ldd _error
 9A71  FD9C43            std _error+2
 9A74                    .dbline 164
                       ;     error[0] = (desired_position - valve_sensor);
 9A74  CC0001            ldd #1
 9A77  BD8144            jsr _analog
 9A7A  ED02              std 2,x
 9A7C  FC9C6A            ldd _desired_position
 9A7F  A302              subd 2,x
 9A81  FD9C41            std _error
 9A84                    .dbline 167
                       ;     
                       ;     
                       ;     printf("%s", place_home);
 9A84  EC00              ldd 0,x
 9A86  C30005            addd #5
 9A89  37                pshb
 9A8A  36                psha
 9A8B  CC9C28            ldd #L21
 9A8E  BD9442            jsr _printf
 9A91  1838              puly
 9A93                    .dbline 168
                       ;     printf("%s", clear);
 9A93  CC9C4D            ldd #_clear
 9A96  37                pshb
 9A97  36                psha
 9A98  CC9C28            ldd #L21
 9A9B  BD9442            jsr _printf
 9A9E  1838              puly
 9AA0                    .dbline 170
                       ;     
                       ;     printf("Valve sensor:  %d\n", valve_sensor);
 9AA0  CC0001            ldd #1
 9AA3  BD8144            jsr _analog
 9AA6  37                pshb
 9AA7  36                psha
 9AA8  CC9C05            ldd #L44
 9AAB  BD9442            jsr _printf
 9AAE  1838              puly
 9AB0                    .dbline 172
                       ;     
                       ;     printf("element 0:  %d\n", error[0]);
 9AB0  FC9C41            ldd _error
 9AB3  37                pshb
 9AB4  36                psha
 9AB5  CC9BF5            ldd #L45
 9AB8  BD9442            jsr _printf
 9ABB  1838              puly
 9ABD                    .dbline 173
                       ;     printf("element 1:  %d\n", error[1]);
 9ABD  FC9C43            ldd _error+2
 9AC0  37                pshb
 9AC1  36                psha
 9AC2  CC9BE5            ldd #L46
 9AC5  BD9442            jsr _printf
 9AC8  1838              puly
 9ACA                    .dbline 174
                       ;     printf("element 2:  %d\n", error[2]);
 9ACA  FC9C45            ldd _error+4
 9ACD  37                pshb
 9ACE  36                psha
 9ACF  CC9BD5            ldd #L48
 9AD2  BD9442            jsr _printf
 9AD5  1838              puly
 9AD7                    .dbline 175
                       ;     printf("PGain:  %d\n", k[P]);
 9AD7  FC9C47            ldd _k
 9ADA  37                pshb
 9ADB  36                psha
 9ADC  CC9BC9            ldd #L50
 9ADF  BD9442            jsr _printf
 9AE2  1838              puly
 9AE4                    .dbline 176
                       ;     printf("DC:  %ld\n", duty_cycle);
 9AE4  18CE9C70          ldy #_duty_cycle
 9AE8  BD88F8            jsr __ly2reg
 9AEB  183C              pshy
 9AED  183C              pshy
 9AEF  1830              tsy
 9AF1  BD8935            jsr __lreg2y
 9AF4  CC9BBF            ldd #L51
 9AF7  BD9442            jsr _printf
 9AFA  1838              puly
 9AFC  1838              puly
 9AFE                    .dbline 177
                       ;     CLEAR_FLAG(TFLG2, 0x40);
 9AFE  18CE1025          ldy #0x1025
 9B02  181D00BF          bclr 0,y,#0xbf
 9B06                    .dbline 179
                       ;     
                       ; }
 9B06                  L39:
 9B06  8F                xgdx
 9B07  C3000C            addd #12
 9B0A  8F                xgdx
 9B0B  35                txs
 9B0C  38                pulx
 9B0D  3B                rti
                       ;  lreg1 -> -4,x
                       ;  lreg2 -> -8,x
                       ;  IX -> 0,x
                       ;         deltaM -> 2,x
                       ;        deltaMd -> 6,x
                       ;        deltaMi -> 10,x
                       ;        deltaMp -> 14,x
                       ;         deltat -> 26,x
                       ;              k -> 24,x
                       ;          error -> 20,x
 9B0E                  _pidControl::
 9B0E  BD86BA            jsr __enterb
 9B11  D2                .byte 0xd2
 9B12                    .dbfunc pidControl
 9B12                    .dbline 187
                       ; 
                       ; long pidControl(int error[3], int k[3], int deltat)
                       ; {
                       ;     long deltaMp, deltaMi, deltaMd;
                       ;     long deltaM;
                       ;     
                       ;     //proportional
                       ;     deltaMp = (k[P] * error[0]);
 9B12  1AEE18            ldy 24,x
 9B15  18EC00            ldd 0,y
 9B18  1AEE14            ldy 20,x
 9B1B  18EE00            ldy 0,y
 9B1E  BD8669            jsr __muli
 9B21  BD8987            jsr __d2lreg
 9B24  EC00              ldd 0,x
 9B26  C3000E            addd #14
 9B29  188F              xgdy
 9B2B  BD8935            jsr __lreg2y
 9B2E                    .dbline 189
                       ;     //integral
                       ;     deltaMi = k[I] * error[0] * deltat;
 9B2E  1AEE18            ldy 24,x
 9B31  18EC02            ldd 2,y
 9B34  1AEE14            ldy 20,x
 9B37  18EE00            ldy 0,y
 9B3A  BD8669            jsr __muli
 9B3D  1AEE1A            ldy 26,x
 9B40  BD8669            jsr __muli
 9B43  BD8987            jsr __d2lreg
 9B46  EC00              ldd 0,x
 9B48  C3000A            addd #10
 9B4B  188F              xgdy
 9B4D  BD8935            jsr __lreg2y
 9B50                    .dbline 191
                       ;     //derivative
                       ;     deltaMd = k[D] * (error[0] - error[1]);
 9B50  1AEE14            ldy 20,x
 9B53  18EC00            ldd 0,y
 9B56  1AEE14            ldy 20,x
 9B59  18A302            subd 2,y
 9B5C  188F              xgdy
 9B5E  183C              pshy ; spill
 9B60  1AEE18            ldy 24,x
 9B63  18EC04            ldd 4,y
 9B66  1838              puly ; reload
 9B68  BD8669            jsr __muli
 9B6B  BD8987            jsr __d2lreg
 9B6E  EC00              ldd 0,x
 9B70  C30006            addd #6
 9B73  188F              xgdy
 9B75  BD8935            jsr __lreg2y
 9B78                    .dbline 193
                       ;     
                       ;     deltaM = deltaMp + deltaMi + deltaMd;
 9B78  EC00              ldd 0,x
 9B7A  C3000E            addd #14
 9B7D  188F              xgdy
 9B7F  BD88F8            jsr __ly2reg
 9B82  EC00              ldd 0,x
 9B84  C3000A            addd #10
 9B87  188F              xgdy
 9B89  BD891E            jsr __ly2reg2
 9B8C  BD8A84            jsr __ladd
 9B8F  EC00              ldd 0,x
 9B91  C30006            addd #6
 9B94  188F              xgdy
 9B96  BD891E            jsr __ly2reg2
 9B99  BD8A84            jsr __ladd
 9B9C  EC00              ldd 0,x
 9B9E  C30002            addd #2
 9BA1  188F              xgdy
 9BA3  BD8935            jsr __lreg2y
 9BA6                    .dbline 194
                       ;     return (deltaM);
 9BA6  EC00              ldd 0,x
 9BA8  C30002            addd #2
 9BAB  188F              xgdy
 9BAD  BD88F8            jsr __ly2reg
 9BB0  BD89EC            jsr __lret
 9BB3  0012              .word 18
 9BB5                  L52:
 9BB5  8F                xgdx
 9BB6  C30012            addd #18
 9BB9  8F                xgdx
 9BBA  35                txs
 9BBB  38                pulx
 9BBC  1838              puly
 9BBE  39                rts
                         .area bss
 9C6A                  _desired_position::
 9C6A                    .blkb 2
 9C6C                  _period::
 9C6C                    .blkb 4
 9C70                  _duty_cycle::
 9C70                    .blkb 4
 9C74                  _timertjp::
 9C74                    .blkb 2
 9C76                  _days::
 9C76                    .blkb 2
 9C78                  _hours::
 9C78                    .blkb 2
 9C7A                  _minutes::
 9C7A                    .blkb 2
 9C7C                  _seconds::
 9C7C                    .blkb 2
 9C7E                  _msec::
 9C7E                    .blkb 2
                         .area text
--- 03AC                 L51:
--- 03AC 44433A2020256C640A00  .byte 'D,'C,58,32,32,37,'l,'d,10,0
--- 03B6                 L50:
--- 03B6 504761696E3A202025640A00  .byte 'P,'G,'a,'i,'n,58,32,32,37,'d,10,0
--- 03C2                 L48:
--- 03C2 656C656D656E7420323A202025640A00  .byte 'e,'l,'e,'m,'e,'n,'t,32,50,58,32,32,37,'d,10,0
--- 03D2                 L46:
--- 03D2 656C656D656E7420313A202025640A00  .byte 'e,'l,'e,'m,'e,'n,'t,32,49,58,32,32,37,'d,10,0
--- 03E2                 L45:
--- 03E2 656C656D656E7420303A202025640A00  .byte 'e,'l,'e,'m,'e,'n,'t,32,48,58,32,32,37,'d,10,0
--- 03F2                 L44:
--- 03F2 56616C76652073656E736F723A202025  .byte 'V,'a,'l,'v,'e,32,'s,'e,'n,'s,'o,'r,58,32,32,37
--- 0402 640A00            .byte 'd,10,0
--- 0405                 L34:
--- 0405 00000064          .word 0,100
--- 0409                 L29:
--- 0409 FFFFFFFF          .word 65535,65535
--- 040D                 L28:
--- 040D 00000000          .word 0,0
--- 0411                 L22:
--- 0411 00007FFF          .word 0,32767
--- 0415                 L21:
--- 0415 257300            .byte 37,'s,0
