;-------------------------------------------------------- ; File Created by SDCC : free open source ISO C Compiler ; Version 4.6.0 #16555 (Linux) ;-------------------------------------------------------- .module gcp_hammer .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _gcp_hammer_handler ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (ABS,DATA) .org 0x0000 ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (ABS,DATA) .org 0x0000 ;-------------------------------------------------------- ; 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) ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; uninitialized external ram data ;-------------------------------------------------------- .area XSEG (XDATA) ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; initialized external ram data ;-------------------------------------------------------- .area XISEG (XDATA) .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'tlp_write_fixed' ;------------------------------------------------------------ ;v Allocated to registers r4 r5 r6 r7 ;------------------------------------------------------------ ; gcp_hammer.c:77: static void tlp_write_fixed(uint32_t v) { ; ----------------------------------------- ; function tlp_write_fixed ; ----------------------------------------- _tlp_write_fixed: ar7 = 0x07 ar6 = 0x06 ar5 = 0x05 ar4 = 0x04 ar3 = 0x03 ar2 = 0x02 ar1 = 0x01 ar0 = 0x00 mov r4,dpl mov r5,dph mov r6,b ; gcp_hammer.c:78: XDATA_REG8V(0xB220) = (uint8_t)(v >> 24); /* DATA_0 = MSB */ mov dptr,#0xb220 movx @dptr,a ; gcp_hammer.c:79: XDATA_REG8V(0xB221) = (uint8_t)(v >> 16); /* DATA_1 */ mov ar3,r6 inc dptr mov a,r3 movx @dptr,a ; gcp_hammer.c:80: XDATA_REG8V(0xB222) = (uint8_t)(v >> 8); /* DATA_2 */ mov ar3,r5 inc dptr mov a,r3 movx @dptr,a ; gcp_hammer.c:81: XDATA_REG8V(0xB223) = (uint8_t)(v); /* DATA_3 = LSB */ inc dptr mov a,r4 movx @dptr,a ; gcp_hammer.c:82: XDATA_REG8V(0xB296) = 0x07; /* clear status */ mov dptr,#0xb296 mov a,#0x07 movx @dptr,a ; gcp_hammer.c:83: XDATA_REG8V(0xB254) = 0x0F; /* trigger (posted write) */ mov dptr,#0xb254 mov a,#0x0f movx @dptr,a ; gcp_hammer.c:84: } ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'gcp_hammer_handler' ;------------------------------------------------------------ ;iters Allocated to registers r7 r6 ;i Allocated to registers r4 r5 ;------------------------------------------------------------ ; gcp_hammer.c:90: void gcp_hammer_handler(void) { ; ----------------------------------------- ; function gcp_hammer_handler ; ----------------------------------------- _gcp_hammer_handler: ; gcp_hammer.c:95: if (CDB(2) != 0x48 || CDB(3) != 0x4D || CDB(4) != 0x52 || CDB(5) != 0x01) { mov dptr,#0x910f movx a,@dptr mov r7,a cjne r7,#0x48,00101$ mov dptr,#0x9110 movx a,@dptr mov r7,a cjne r7,#0x4d,00101$ mov dptr,#0x9111 movx a,@dptr mov r7,a cjne r7,#0x52,00101$ mov dptr,#0x9112 movx a,@dptr mov r7,a cjne r7,#0x01,00173$ sjmp 00102$ 00173$: 00101$: ; gcp_hammer.c:98: __endasm; mov r7, #0xEE ; gcp_hammer.c:99: return; ret 00102$: ; gcp_hammer.c:103: if ((CDB(1) & 0x01) == 0) { mov dptr,#0x910e movx a,@dptr mov r7,a jb acc.0,00107$ ; gcp_hammer.c:106: __endasm; mov r7, #0xEE ; gcp_hammer.c:107: return; ret 00107$: ; gcp_hammer.c:111: iters = ((uint16_t)CDB(12) << 8) | CDB(13); mov dptr,#0x9119 movx a,@dptr mov r6,a mov r7,#0x00 inc dptr movx a,@dptr mov r4,#0x00 orl ar7,a mov a,r4 orl ar6,a ; gcp_hammer.c:112: if (iters == 0 || iters > HAMMER_MAX_ITERS) mov a,r7 orl a,r6 jz 00108$ mov ar4,r7 mov ar5,r6 clr c clr a subb a,r4 mov a,#0x80 subb a,r5 jnc 00109$ ; free result 00108$: ; gcp_hammer.c:113: iters = HAMMER_MAX_ITERS; mov r7,#0x00 mov r6,#0x80 00109$: ; gcp_hammer.c:120: XDATA_REG8V(0xB210) = 0x60; /* FMT/TYPE: 64-bit memory write (MWr64) -- CONFIRM */ mov dptr,#0xb210 mov a,#0x60 movx @dptr,a ; gcp_hammer.c:121: XDATA_REG8V(0xB216) = 0x01; /* LENGTH = 1 dword -- CONFIRM */ mov dptr,#0xb216 mov a,#0x01 movx @dptr,a ; gcp_hammer.c:122: XDATA_REG8V(0xB217) = 0x0F; /* first-dword byte enables = 0xF -- CONFIRM */ inc dptr mov a,#0x0f movx @dptr,a ; gcp_hammer.c:125: XDATA_REG8V(0xB218) = CDB(6); /* addr[31:24] */ mov dptr,#0x9113 movx a,@dptr mov dptr,#0xb218 movx @dptr,a ; gcp_hammer.c:126: XDATA_REG8V(0xB219) = CDB(7); /* addr[23:16] */ mov dptr,#0x9114 movx a,@dptr mov dptr,#0xb219 movx @dptr,a ; gcp_hammer.c:127: XDATA_REG8V(0xB21A) = CDB(8); /* addr[15:8] */ mov dptr,#0x9115 movx a,@dptr mov dptr,#0xb21a movx @dptr,a ; gcp_hammer.c:128: XDATA_REG8V(0xB21B) = CDB(9); /* addr[7:0] */ mov dptr,#0x9116 movx a,@dptr mov dptr,#0xb21b movx @dptr,a ; gcp_hammer.c:129: XDATA_REG8V(0xB21C) = CDB(10); /* addr[39:32] */ mov dptr,#0x9117 movx a,@dptr mov dptr,#0xb21c movx @dptr,a ; gcp_hammer.c:130: XDATA_REG8V(0xB21D) = 0x00; /* addr[47:40] */ inc dptr clr a movx @dptr,a ; gcp_hammer.c:131: XDATA_REG8V(0xB21E) = 0x00; /* addr[55:48] */ inc dptr movx @dptr,a ; gcp_hammer.c:132: XDATA_REG8V(0xB21F) = 0x00; /* addr[63:56] */ inc dptr movx @dptr,a ; gcp_hammer.c:135: for (i = 0; i < iters; i++) { mov r4,a mov r5,a 00113$: clr c mov a,r4 subb a,r7 mov a,r5 subb a,r6 jnc 00111$ ; gcp_hammer.c:136: tlp_write_fixed(HAMMER_VAL_A); mov dptr,#0xfffb mov a,#0xff mov b,a push ar7 push ar6 push ar5 push ar4 lcall _tlp_write_fixed ; gcp_hammer.c:137: tlp_write_fixed(HAMMER_VAL_B); mov dptr,#0x1000 clr a mov b,a lcall _tlp_write_fixed pop ar4 pop ar5 pop ar6 pop ar7 ; gcp_hammer.c:135: for (i = 0; i < iters; i++) { inc r4 cjne r4,#0x00,00113$ inc r5 sjmp 00113$ 00111$: ; gcp_hammer.c:142: __endasm; mov r7, #0xA5 ; gcp_hammer.c:143: } ret .area CSEG (CODE) .area CONST (CODE) .area XINIT (CODE) .area CABS (ABS,CODE)