;-------------------------------------------------------- ; File Created by SDCC : FreeWare ANSI-C Compiler ; Version 2.4.0 Wed Mar 31 11:33:57 2004 ;-------------------------------------------------------- .module lookup .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _rev_lookup_PARM_2 .globl __vtable .globl __vtol .globl __firm_regulate .globl __volt .globl __adc .globl __power_fail .globl __resistor .globl __buf .globl _USBPAIR .globl _ISOCTL .globl _AUTODATA .globl _AUTOPTRL .globl _AUTOPTRH .globl _OUT07VAL .globl _IN07VAL .globl _I2DAT .globl _I2CS .globl _SETUPDAT .globl _SUDPTRL .globl _SUDPTRH .globl _TOGCTL .globl _USBCS .globl _USBBAV .globl _USBIEN .globl _USBIRQ .globl _OUT07IEN .globl _IN07IEN .globl _OUT07IRQ .globl _IN07IRQ .globl _PORTCCFG .globl _PORTBCFG .globl _PORTACFG .globl _PINSC .globl _OUTC .globl _OEC .globl _OUTB .globl _OEB .globl _OUTA .globl _OEA .globl _OUT6CS .globl _OUT6BC .globl _OUT6BUF .globl _IN6CS .globl _IN6BC .globl _IN6BUF .globl _OUT5CS .globl _OUT5BC .globl _OUT5BUF .globl _IN5CS .globl _IN5BC .globl _IN5BUF .globl _OUT4CS .globl _OUT4BC .globl _OUT4BUF .globl _IN4CS .globl _IN4BC .globl _IN4BUF .globl _OUT3BUF .globl _OUT3CS .globl _OUT3BC .globl _IN3CS .globl _IN3BC .globl _IN3BUF .globl _OUT2BUF .globl _OUT2CS .globl _OUT2BC .globl _IN2CS .globl _IN2BC .globl _IN2BUF .globl _OUT1BC .globl _OUT1CS .globl _OUT1BUF .globl _IN1BC .globl _IN1BUF .globl _IN1CS .globl _OUT0BC .globl _OUT0BUF .globl _IN0BC .globl _IN0BUF .globl _EP0CS .globl _rev_lookup ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- _P0 = 0x0080 _SP = 0x0081 _DPL = 0x0082 _DPH = 0x0083 _PCON = 0x0087 _TCON = 0x0088 _TMOD = 0x0089 _TL0 = 0x008a _TL1 = 0x008b _TH0 = 0x008c _TH1 = 0x008d _P1 = 0x0090 _SCON = 0x0098 _SBUF = 0x0099 _P2 = 0x00a0 _IE = 0x00a8 _P3 = 0x00b0 _IP = 0x00b8 _PSW = 0x00d0 _ACC = 0x00e0 _B = 0x00f0 _EXIF = 0x0091 _EIE = 0x00e8 _SCON0 = 0x0098 _SCON1 = 0x00c0 _SBUF0 = 0x0099 _SBUF1 = 0x00c1 _CKCON = 0x008e _T2CON = 0x00c8 _RCAP2L = 0x00ca _RCAP2H = 0x00cb _TL2 = 0x00cc _TH2 = 0x00cd ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- _P0_0 = 0x0080 _P0_1 = 0x0081 _P0_2 = 0x0082 _P0_3 = 0x0083 _P0_4 = 0x0084 _P0_5 = 0x0085 _P0_6 = 0x0086 _P0_7 = 0x0087 _IT0 = 0x0088 _IE0 = 0x0089 _IT1 = 0x008a _IE1 = 0x008b _TR0 = 0x008c _TF0 = 0x008d _TR1 = 0x008e _TF1 = 0x008f _P1_0 = 0x0090 _P1_1 = 0x0091 _P1_2 = 0x0092 _P1_3 = 0x0093 _P1_4 = 0x0094 _P1_5 = 0x0095 _P1_6 = 0x0096 _P1_7 = 0x0097 _RI = 0x0098 _TI = 0x0099 _RB8 = 0x009a _TB8 = 0x009b _REN = 0x009c _SM2 = 0x009d _SM1 = 0x009e _SM0 = 0x009f _P2_0 = 0x00a0 _P2_1 = 0x00a1 _P2_2 = 0x00a2 _P2_3 = 0x00a3 _P2_4 = 0x00a4 _P2_5 = 0x00a5 _P2_6 = 0x00a6 _P2_7 = 0x00a7 _EX0 = 0x00a8 _ET0 = 0x00a9 _EX1 = 0x00aa _ET1 = 0x00ab _ES = 0x00ac _EA = 0x00af _P3_0 = 0x00b0 _P3_1 = 0x00b1 _P3_2 = 0x00b2 _P3_3 = 0x00b3 _P3_4 = 0x00b4 _P3_5 = 0x00b5 _P3_6 = 0x00b6 _P3_7 = 0x00b7 _RXD = 0x00b0 _TXD = 0x00b1 _INT0 = 0x00b2 _INT1 = 0x00b3 _T0 = 0x00b4 _T1 = 0x00b5 _WR = 0x00b6 _RD = 0x00b7 _PX0 = 0x00b8 _PT0 = 0x00b9 _PX1 = 0x00ba _PT1 = 0x00bb _PS = 0x00bc _P = 0x00d0 _F1 = 0x00d1 _OV = 0x00d2 _RS0 = 0x00d3 _RS1 = 0x00d4 _F0 = 0x00d5 _AC = 0x00d6 _CY = 0x00d7 _EUSB = 0x00e8 _ES0 = 0x00ac _ES1 = 0x00ae _RI_0 = 0x0098 _TI_0 = 0x0099 _RI_1 = 0x00c0 _TI_1 = 0x00c1 _TR2 = 0x00ca _TF2 = 0x00cf _ET2 = 0x00ad ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 .area REG_BANK_1 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) _rev_lookup_PARM_2:: .ds 1 ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) _EP0CS = 0x7fb4 _IN0BUF = 0x7f00 _IN0BC = 0x7fb5 _OUT0BUF = 0x7ec0 _OUT0BC = 0x7fc5 _IN1CS = 0x7fb6 _IN1BUF = 0x7e80 _IN1BC = 0x7fb7 _OUT1BUF = 0x7e40 _OUT1CS = 0x7fc6 _OUT1BC = 0x7fc7 _IN2BUF = 0x7e00 _IN2BC = 0x7fb9 _IN2CS = 0x7fb8 _OUT2BC = 0x7fc9 _OUT2CS = 0x7fc8 _OUT2BUF = 0x7dc0 _IN3BUF = 0x7d80 _IN3BC = 0x7fbb _IN3CS = 0x7fba _OUT3BC = 0x7fcb _OUT3CS = 0x7fca _OUT3BUF = 0x7d40 _IN4BUF = 0x7d00 _IN4BC = 0x7fbd _IN4CS = 0x7fbc _OUT4BUF = 0x7cc0 _OUT4BC = 0x7fcd _OUT4CS = 0x7fcc _IN5BUF = 0x7c80 _IN5BC = 0x7fbf _IN5CS = 0x7fbe _OUT5BUF = 0x7c40 _OUT5BC = 0x7fcf _OUT5CS = 0x7fce _IN6BUF = 0x7c00 _IN6BC = 0x7fc1 _IN6CS = 0x7fc0 _OUT6BUF = 0x7bc0 _OUT6BC = 0x7fd1 _OUT6CS = 0x7fd0 _OEA = 0x7f9c _OUTA = 0x7f96 _OEB = 0x7f9d _OUTB = 0x7f97 _OEC = 0x7f9e _OUTC = 0x7f98 _PINSC = 0x7f9b _PORTACFG = 0x7f93 _PORTBCFG = 0x7f94 _PORTCCFG = 0x7f95 _IN07IRQ = 0x7fa9 _OUT07IRQ = 0x7faa _IN07IEN = 0x7fac _OUT07IEN = 0x7fad _USBIRQ = 0x7fab _USBIEN = 0x7fae _USBBAV = 0x7faf _USBCS = 0x7fd6 _TOGCTL = 0x7fd7 _SUDPTRH = 0x7fd4 _SUDPTRL = 0x7fd5 _SETUPDAT = 0x7fe8 _I2CS = 0x7fa5 _I2DAT = 0x7fa6 _IN07VAL = 0x7fde _OUT07VAL = 0x7fdf _AUTOPTRH = 0x7fe3 _AUTOPTRL = 0x7fe4 _AUTODATA = 0x7fe5 _ISOCTL = 0x7fa1 _USBPAIR = 0x7fdd __buf = 0x1c04 __resistor = 0x1c1c __power_fail = 0x1c24 __adc = 0x1c25 __volt = 0x1c55 __firm_regulate = 0x1c65 __vtol = 0x1c66 __vtable = 0x2000 ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area XISEG (XDATA) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'rev_lookup' ;------------------------------------------------------------ ;chn Allocated with name '_rev_lookup_PARM_2' ;volt Allocated to registers r2 r3 ;i Allocated to registers r2 r3 ;_volt Allocated to registers r4 ;------------------------------------------------------------ ;lookup.c:9: byte rev_lookup (signed int volt, byte chn) ; ----------------------------------------- ; function rev_lookup ; ----------------------------------------- _rev_lookup: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ; genReceive mov r2,dpl mov r3,dph ;lookup.c:13: if (volt - 0x0960 < 0) { ; genMinus mov a,r2 add a,#0xa0 mov r4,a mov a,r3 addc a,#0xf6 ; genCmpLt ; genCmp ; Peephole 105 removed redundant mov mov r5,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.7,00102$ 00116$: ;lookup.c:14: _volt = 0; ; genAssign mov r4,#0x00 ; Peephole 112.b changed ljmp to sjmp sjmp 00103$ 00102$: ;lookup.c:16: else _volt = ((volt - 0x0960) >> 4) & 0xff; ; genMinus mov a,r2 add a,#0xa0 mov r2,a mov a,r3 addc a,#0xf6 ; genRightShift ; genSignedRightShift ; genRightShiftLiteral ; genrshTwo ; Peephole 105 removed redundant mov mov r3,a swap a xch a,r2 swap a anl a,#0x0f xrl a,r2 xch a,r2 anl a,#0x0f xch a,r2 xrl a,r2 xch a,r2 jnb acc.3,00117$ orl a,#0xf0 00117$: mov r3,a ; genCast mov ar4,r2 00103$: ;lookup.c:17: for (i = 0; i < 0x0100; ++i) ; genAssign mov r2,#0x00 mov r3,#0x00 ; genAssign mov r5,#0x00 mov r6,#0x00 00106$: ; genCmpLt ; genCmp clr c mov a,r5 subb a,#0x00 mov a,r6 xrl a,#0x80 subb a,#0x81 ; genIfxJump ; Peephole 108 removed ljmp by inverse jump logic jnc 00109$ 00118$: ;lookup.c:18: if (_vtable[((unsigned int)chn << 8) + i] < _volt) ; genCast mov r7,_rev_lookup_PARM_2 mov r0,#0x00 ; genLeftShift ; genLeftShiftLiteral ; genlshTwo mov ar0,r7 mov r7,#0x00 ; genPlus ; Peephole 236.g used r5 instead of ar5 mov a,r5 ; Peephole 236.a used r7 instead of ar7 add a,r7 mov r7,a ; Peephole 236.g used r6 instead of ar6 mov a,r6 ; Peephole 236.b used r0 instead of ar0 addc a,r0 mov r0,a ; genPlus ; genPlus aligned array mov dpl,r7 mov a,#(__vtable >> 8) add a,r0 mov dph,a ; genPointerGet ; genFarPointerGet movx a,@dptr ; genCmpLt ; genCmp ; Peephole 106 removed redundant mov mov r7,a clr c subb a,r4 ; genIfxJump ; Peephole 108 removed ljmp by inverse jump logic jnc 00108$ 00119$: ;lookup.c:19: return i; ; genCast mov dpl,r2 ; genRet ; Peephole 112.b changed ljmp to sjmp sjmp 00110$ 00108$: ;lookup.c:17: for (i = 0; i < 0x0100; ++i) ; genPlus ; genPlusIncr inc r5 cjne r5,#0x00,00120$ inc r6 00120$: ; genAssign mov ar2,r5 mov ar3,r6 ; Peephole 112.b changed ljmp to sjmp sjmp 00106$ 00109$: ;lookup.c:20: return 0xff; ; genRet mov dpl,#0xFF 00110$: ret .area CSEG (CODE) .area XINIT (CODE)