;-------------------------------------------------------- ; File Created by SDCC : FreeWare ANSI-C Compiler ; Version 2.4.0 Tue Mar 16 21:08:56 2004 ;-------------------------------------------------------- .module i2c .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _i2c_read_PARM_3 .globl _i2c_read_PARM_2 .globl _i2c_write_PARM_3 .globl _i2c_write_PARM_2 .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 _i2c_write .globl _i2c_read ;-------------------------------------------------------- ; 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 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) _i2c_write_PARM_2:: .ds 2 _i2c_write_PARM_3:: .ds 2 .area OSEG (OVR,DATA) _i2c_read_PARM_2:: .ds 2 _i2c_read_PARM_3:: .ds 2 ;-------------------------------------------------------- ; 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 ;-------------------------------------------------------- ; 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 'i2c_write' ;------------------------------------------------------------ ;dat Allocated with name '_i2c_write_PARM_2' ;length Allocated with name '_i2c_write_PARM_3' ;address Allocated to registers r2 ;i Allocated to registers r3 r4 ;------------------------------------------------------------ ;i2c.c:97: int i2c_write (byte address, xdata byte *dat, int length) ; ----------------------------------------- ; function i2c_write ; ----------------------------------------- _i2c_write: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ; genReceive mov r2,dpl ;i2c.c:99: register int i = 0; ; genAssign mov r3,#0x00 mov r4,#0x00 ;i2c.c:102: stop_check(); 00101$: ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r5,a ; genIfxJump ; Peephole 112.a removed ljmp by inverse jump logic jb acc.6,00101$ 00125$: ;i2c.c:105: I2CS = 0x80; ; genAssign mov dptr,#_I2CS mov a,#0x80 movx @dptr,a ;i2c.c:107: I2DAT = address << 1; ; genLeftShift ; genLeftShiftLiteral ; genlshOne mov a,r2 add a,acc ; genAssign ; Peephole 100 removed redundant mov mov r2,a mov dptr,#_I2DAT movx @dptr,a ;i2c.c:110: while (!(I2CS & 0x01)); ; genAssign mov r2,#0x00 mov r5,#0x00 00104$: ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r6,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.0,00104$ 00126$: ;i2c.c:112: if (I2CS & 0x04) { ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r6,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.2,00108$ 00127$: ;i2c.c:114: I2CS = 0x40; /* send stop condition */ ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:115: return -1; ; genRet ; Peephole 182.b used 16 bit load of dptr mov dptr,#0xFFFF ; Peephole 112.b changed ljmp to sjmp sjmp 00116$ 00108$: ;i2c.c:118: if (!(I2CS & 0x02)) /* NACK */ { ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r6,a ; genIfxJump ; Peephole 112.a removed ljmp by inverse jump logic jb acc.1,00110$ 00128$: ;i2c.c:119: I2CS = 0x40; ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:120: return i; ; genRet mov dpl,r3 mov dph,r4 ; Peephole 112.b changed ljmp to sjmp sjmp 00116$ 00110$: ;i2c.c:124: if (i == length) { ; genCmpEq mov a,r2 ; Peephole 112.b changed ljmp to sjmp ; Peephole 197.b optimized misc jump sequence cjne a,_i2c_write_PARM_3,00112$ mov a,r5 cjne a,(_i2c_write_PARM_3 + 1),00112$ ;00129$: ; Peephole 200 removed redundant sjmp 00130$: ;i2c.c:125: I2CS = 0x40; ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:126: break; ; Peephole 112.b changed ljmp to sjmp sjmp 00115$ 00112$: ;i2c.c:129: I2DAT = dat[i++]; ; genAssign mov ar6,r2 mov ar7,r5 ; genPlus ; genPlusIncr inc r2 cjne r2,#0x00,00131$ inc r5 00131$: ; genAssign mov ar3,r2 mov ar4,r5 ; genPlus ; Peephole 236.g used r6 instead of ar6 mov a,r6 add a,_i2c_write_PARM_2 mov dpl,a ; Peephole 236.g used r7 instead of ar7 mov a,r7 addc a,(_i2c_write_PARM_2 + 1) mov dph,a ; genPointerGet ; genFarPointerGet movx a,@dptr ; genAssign ; Peephole 100 removed redundant mov mov r6,a mov dptr,#_I2DAT movx @dptr,a ;i2c.c:130: } while (1); ; Peephole 112.b changed ljmp to sjmp sjmp 00104$ 00115$: ;i2c.c:133: return i; ; genRet mov dpl,r3 mov dph,r4 00116$: ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'i2c_read' ;------------------------------------------------------------ ;dat Allocated with name '_i2c_read_PARM_2' ;length Allocated with name '_i2c_read_PARM_3' ;address Allocated to registers r2 ;i Allocated to registers r3 r4 ;rd Allocated to registers r2 ;------------------------------------------------------------ ;i2c.c:137: int i2c_read (byte address, xdata byte *dat, int length) ; ----------------------------------------- ; function i2c_read ; ----------------------------------------- _i2c_read: ; genReceive mov r2,dpl ;i2c.c:139: register int i = 0; ; genAssign ;i2c.c:142: if (!length) ; genIfx ; Peephole 3.c changed mov to clr clr a mov r3,a mov r4,a mov a,_i2c_read_PARM_3 orl a,(_i2c_read_PARM_3 + 1) ; genIfxJump ; Peephole 109 removed ljmp by inverse jump logic jnz 00103$ 00150$: ;i2c.c:143: return 0; ; genRet ; Peephole 182.b used 16 bit load of dptr mov dptr,#0x0000 ; Peephole 251 replaced ljmp to ret with ret ret ;i2c.c:146: stop_check(); 00103$: ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r5,a ; genIfxJump ; Peephole 112.a removed ljmp by inverse jump logic jb acc.6,00103$ 00151$: ;i2c.c:149: I2CS = 0x80; ; genAssign mov dptr,#_I2CS mov a,#0x80 movx @dptr,a ;i2c.c:152: I2DAT = (address << 1) | 0x01; ; genLeftShift ; genLeftShiftLiteral ; genlshOne mov a,r2 add a,acc mov r2,a ; genOr mov dptr,#_I2DAT mov a,#0x01 orl a,r2 movx @dptr,a ;i2c.c:153: while (!(I2CS & 0x01)); 00106$: ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r2,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.0,00106$ 00152$: ;i2c.c:154: if (I2CS & 0x04) { ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r2,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.2,00110$ 00153$: ;i2c.c:155: I2CS = 0x40; /* send stop condition */ ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:156: return 0; ; genRet ; Peephole 182.b used 16 bit load of dptr mov dptr,#0x0000 ; Peephole 251 replaced ljmp to ret with ret ret 00110$: ;i2c.c:158: if (!(I2CS & 0x02)) /* NACK */ { ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r2,a ; genIfxJump ; Peephole 112.a removed ljmp by inverse jump logic jb acc.1,00112$ 00154$: ;i2c.c:159: I2CS = 0x40; ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:160: return 0; ; genRet ; Peephole 182.b used 16 bit load of dptr mov dptr,#0x0000 ; Peephole 251 replaced ljmp to ret with ret ret 00112$: ;i2c.c:164: dat[0] = I2DAT; ; genAssign mov r2,_i2c_read_PARM_2 mov r5,(_i2c_read_PARM_2 + 1) ; genAssign mov dptr,#_I2DAT movx a,@dptr ; genPointerSet ; genFarPointerSet ; Peephole 136 removed redundant moves mov r6,a mov dpl,r2 mov dph,r5 movx @dptr,a ;i2c.c:166: while (i < length - 2) { ; genMinus ; genMinusDec mov a,_i2c_read_PARM_3 add a,#0xfe mov r2,a mov a,(_i2c_read_PARM_3 + 1) addc a,#0xff mov r5,a ; genAssign mov ar6,r3 mov ar7,r4 00118$: ; genCmpLt ; genCmp clr c mov a,r6 subb a,r2 mov a,r7 xrl a,#0x80 mov b,r5 xrl b,#0x80 subb a,b ; genIfxJump ; Peephole 108 removed ljmp by inverse jump logic jnc 00121$ 00155$: ;i2c.c:167: while (!(I2CS & 0x01)); 00113$: ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r0,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.0,00113$ 00156$: ;i2c.c:168: if (I2CS & 0x04) { ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r0,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.2,00117$ 00157$: ;i2c.c:169: I2CS = 0x40; /* send stop condition */ ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:170: return 0; ; genRet ; Peephole 182.b used 16 bit load of dptr mov dptr,#0x0000 ; Peephole 251 replaced ljmp to ret with ret ret 00117$: ;i2c.c:172: dat[i] = I2DAT; ; genIpush push ar2 push ar5 ; genPlus ; Peephole 236.g used r6 instead of ar6 mov a,r6 add a,_i2c_read_PARM_2 mov r0,a ; Peephole 236.g used r7 instead of ar7 mov a,r7 addc a,(_i2c_read_PARM_2 + 1) mov r1,a ; genAssign mov dptr,#_I2DAT movx a,@dptr ; genPointerSet ; genFarPointerSet ; Peephole 136 removed redundant moves mov r2,a mov dpl,r0 mov dph,r1 movx @dptr,a ;i2c.c:173: i++; ; genPlus ; genPlusIncr inc r6 cjne r6,#0x00,00158$ inc r7 00158$: ; genAssign mov ar3,r6 mov ar4,r7 ; genIpop pop ar5 pop ar2 ;i2c.c:177: while (!(I2CS & 0x01)); ; Peephole 112.b changed ljmp to sjmp sjmp 00118$ 00121$: ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r2,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.0,00121$ 00159$: ;i2c.c:178: if (I2CS & 0x04) { ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r2,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.2,00125$ 00160$: ;i2c.c:179: I2CS = 0x40; /* send stop condition */ ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:180: return 0; ; genRet ; Peephole 182.b used 16 bit load of dptr mov dptr,#0x0000 ; Peephole 112.b changed ljmp to sjmp sjmp 00131$ 00125$: ;i2c.c:183: I2CS = 0x20; ; genAssign mov dptr,#_I2CS mov a,#0x20 movx @dptr,a ;i2c.c:184: dat[i++] = I2DAT; ; genAssign mov ar2,r3 mov ar5,r4 ; genPlus ; genPlusIncr inc r3 cjne r3,#0x00,00161$ inc r4 00161$: ; genPlus ; Peephole 236.g used r2 instead of ar2 mov a,r2 add a,_i2c_read_PARM_2 mov r2,a ; Peephole 236.g used r5 instead of ar5 mov a,r5 addc a,(_i2c_read_PARM_2 + 1) mov r5,a ; genAssign mov dptr,#_I2DAT movx a,@dptr ; genPointerSet ; genFarPointerSet ; Peephole 136 removed redundant moves mov r6,a mov dpl,r2 mov dph,r5 movx @dptr,a ;i2c.c:187: while (!(I2CS & 0x01)); 00126$: ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r2,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.0,00126$ 00162$: ;i2c.c:188: if (I2CS & 0x04) { ; genAssign mov dptr,#_I2CS movx a,@dptr ; genAnd ; Peephole 105 removed redundant mov mov r2,a ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.2,00130$ 00163$: ;i2c.c:189: I2CS = 0x40; /* send stop condition */ ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:190: return 0; ; genRet ; Peephole 182.b used 16 bit load of dptr mov dptr,#0x0000 ; Peephole 112.b changed ljmp to sjmp sjmp 00131$ 00130$: ;i2c.c:192: I2CS = 0x40; ; genAssign mov dptr,#_I2CS mov a,#0x40 movx @dptr,a ;i2c.c:193: rd = I2DAT; ; genAssign mov dptr,#_I2DAT movx a,@dptr mov r2,a ;i2c.c:194: dat[i++] = rd; ; genAssign mov ar5,r3 mov ar6,r4 ; genPlus ; genPlusIncr inc r3 cjne r3,#0x00,00164$ inc r4 00164$: ; genPlus ; Peephole 236.g used r5 instead of ar5 mov a,r5 add a,_i2c_read_PARM_2 mov dpl,a ; Peephole 236.g used r6 instead of ar6 mov a,r6 addc a,(_i2c_read_PARM_2 + 1) mov dph,a ; genPointerSet ; genFarPointerSet mov a,r2 movx @dptr,a ;i2c.c:196: return i; ; genRet mov dpl,r3 mov dph,r4 00131$: ret .area CSEG (CODE) .area XINIT (CODE)