X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device%2Flib%2F_gptrput.c;h=61123537d40c3b1c9ce7abf6f8341d5673aac0b1;hb=8a17ba9b999c25bd976393595151bf255f04bd5a;hp=b424b4d76a4fe7026cd1fc15adedd582a9900926;hpb=4db4740164fed3cb25145cfdaadb986fc0690507;p=fw%2Fsdcc diff --git a/device/lib/_gptrput.c b/device/lib/_gptrput.c index b424b4d7..61123537 100644 --- a/device/lib/_gptrput.c +++ b/device/lib/_gptrput.c @@ -36,237 +36,170 @@ __sbit __at (0xF5) B_5; #if defined DSDCC_MODEL_HUGE void -_gptrput (char *gptr, char c) _naked +_gptrput (char *gptr, char c) __naked { /* This is the banked version with pointers up to 22 bits. B cannot be trashed */ gptr; c; /* hush the compiler */ - _asm + __asm ; ; depending on the pointer type according to SDCCsymt.h ; - jb _B_7,codeptr$ ; >0x80 code ; 3 - jnb _B_6,xdataptr$ ; <0x40 far ; 3 + jb _B_7,codeptr$ ; >0x80 code ; 3 + jnb _B_6,xdataptr$ ; <0x40 far ; 3 - mov dph,r0 ; save r0 independant of regbank ; 2 - mov r0,dpl ; use only low order address ; 2 + mov dph,r0 ; save r0 independant of regbank ; 2 + mov r0,dpl ; use only low order address ; 2 - jb _B_5,pdataptr$ ; >0x60 pdata ; 3 + jb _B_5,pdataptr$ ; >0x60 pdata ; 3 ; ; store into near/idata space ; - mov @r0,a ; 1 - mov r0,dph ; restore r0 ; 2 - mov dph,#0 ; restore dph ; 2 + mov @r0,a ; 1 + dataptrrestore$: + mov r0,dph ; restore r0 ; 2 + mov dph,#0 ; restore dph ; 2 codeptr$: - ret ; 1 + ret ; 1 ; ; store into external stack/pdata space ; pdataptr$: - movx @r0,a ; 1 - mov r0,dph ; restore r0 ; 2 - mov dph,#0 ; restore dph ; 2 - ret ; 1 + movx @r0,a ; 1 + sjmp dataptrrestore$ ; 2 ; ; store into far space ; xdataptr$: - mov _P3,b ; 3 + mov _P3,b ; 3 - movx @dptr,a ; 1 - ret ; 1 + movx @dptr,a ; 1 + ret ; 1 - ;=== - ;30 bytes -_endasm; + ;=== + ;27 bytes + __endasm; } #elif defined DSDCC_MODEL_MEDIUM void -_gptrput (char *gptr, char c) _naked +_gptrput (char *gptr, char c) __naked { /* This is the non-banked version with pointers up to 14 bits. Assumes B is free to be used */ gptr; c; /* hush the compiler */ - _asm + __asm ; ; depending on the pointer type according to SDCCsymt.h ; - mov b,dph ; 3 - jb _B_7,codeptr$ ; >0x80 code ; 3 - jnb _B_6,xdataptr$ ; <0x40 far ; 3 + mov b,dph ; 3 + jb _B_7,codeptr$ ; >0x80 code ; 3 + jnb _B_6,xdataptr$ ; <0x40 far ; 3 - mov b,r0 ; save r0 independant of regbank ; 2 - mov r0,dpl ; use only low order address ; 2 + mov b,r0 ; save r0 independant of regbank ; 2 + mov r0,dpl ; use only low order address ; 2 - jb _B_5,pdataptr$ ; >0x60 pdata ; 3 + jb _B_5,pdataptr$ ; >0x60 pdata ; 3 ; ; store into near/idata space ; - mov @r0,a ; 1 - mov r0,b ; restore r0 ; 2 + mov @r0,a ; 1 + dataptrrestore$: + mov r0,b ; restore r0 ; 2 codeptr$: - ret ; 1 + ret ; 1 ; ; store into external stack/pdata space ; pdataptr$: - movx @r0,a ; 1 - mov r0,b ; restore r0 ; 2 - ret ; 1 + movx @r0,a ; 1 + sjmp dataptrrestore$ ; 2 ; ; store into far space, max 14 bits ; xdataptr$: - ; 0 <= dptr <= 0x3FFF - movx @dptr,a ; 1 - ret ; 1 - ;=== - ;26 bytes - _endasm; + ; 0 <= dptr <= 0x3FFF + movx @dptr,a ; 1 + ret ; 1 + ;=== + ;25 bytes + __endasm; } -#elif 1 +#else void -_gptrput (char *gptr, char c) _naked +_gptrput (char *gptr, char c) __naked { /* This is the new version with pointers up to 16 bits. B cannot be trashed */ gptr; c; /* hush the compiler */ - _asm + __asm ; ; depending on the pointer type according to SDCCsymt.h ; - jb _B_7,codeptr$ ; >0x80 code ; 3 - jnb _B_6,xdataptr$ ; <0x40 far ; 3 + jb _B_7,codeptr$ ; >0x80 code ; 3 + jnb _B_6,xdataptr$ ; <0x40 far ; 3 - mov dph,r0 ; save r0 independant of regbank ; 2 - mov r0,dpl ; use only low order address ; 2 + mov dph,r0 ; save r0 independant of regbank ; 2 + mov r0,dpl ; use only low order address ; 2 - jb _B_5,pdataptr$ ; >0x60 pdata ; 3 + jb _B_5,pdataptr$ ; >0x60 pdata ; 3 ; ; store into near/idata space ; - mov @r0,a ; 1 - mov r0,dph ; restore r0 ; 2 - mov dph,#0 ; restore dph ; 2 + mov @r0,a ; 1 + dataptrrestore$: + mov r0,dph ; restore r0 ; 2 + mov dph,#0 ; restore dph ; 2 codeptr$: - ret ; 1 + ret ; 1 ; ; store into external stack/pdata space ; pdataptr$: - movx @r0,a ; 1 - mov r0,dph ; restore r0 ; 2 - mov dph,#0 ; restore dph ; 2 - ret ; 1 + movx @r0,a ; 1 + sjmp dataptrrestore$ ; 2 ; ; store into far space ; xdataptr$: - movx @dptr,a ; 1 - ret ; 1 + movx @dptr,a ; 1 + ret ; 1 - ;=== - ;27 bytes -_endasm; + ;=== + ;24 bytes + __endasm; } -#else - -void -_gptrput (char *gptr, char c) _naked -{ -/* This is the old version with pointers up to 16 bits. */ - - gptr; c; /* hush the compiler */ - - _asm - ar0 = 0x00 - push acc ; 2 - ; - ; depending on the pointer type acc. to SDCCsymt.h - ; - mov a,b ; 2 - jz 00001$ ; 0 near ; 2 - dec a ; 1 - jz 00002$ ; 1 far ; 2 - dec a ; 1 - jz 00003$ ; 2 code ; 2 - dec a ; 1 - jz 00004$ ; 3 pdata ; 2 - dec a ; 4 skip generic pointer ; 1 - dec a ; 1 - jz 00001$ ; 5 idata ; 2 - - 00003$: - pop acc ; do nothing ; 2 - ret ; 1 -; -; store into near space -; - 00001$: - pop acc ; 2 - push ar0 ; 2 - mov r0,dpl ; 2 - mov @r0,a ; 1 - pop ar0 ; 2 - ret ; 1 - - 00002$: - pop acc ; 2 - movx @dptr,a ; 1 - ret ; 1 - - 00004$: -#if USE_PDATA_PAGING_REGISTER - pop acc - mov dph,__XPAGE ; __XPAGE (usually p2) holds high byte for pdata access - movx @dptr,a -#else - pop acc ; 2 - push ar0 ; 2 - mov r0,dpl ; 2 - movx @r0,a ; 1 - pop ar0 ; 2 -#endif - ret ; 1 - ;=== - ;46 bytes -_endasm; -} #endif #ifdef SDCC_ds390 -#if 1 - void _gptrputWord () { - _asm + __asm ; ; depending on the pointer type acc. to SDCCsymt.h ; - jb _B_7,00013$ ; >0x80 code - jnb _B_6,00012$ ; <0x40 far + jb _B_7,00013$ ; >0x80 code + jnb _B_6,00012$ ; <0x40 far mov dph,r0 ; save r0 independant of regbank mov r0,dpl ; use only low order address - jb _B_5,00014$ ; >0x60 pdata + jb _B_5,00014$ ; >0x60 pdata ; ; store into near space ; @@ -304,71 +237,7 @@ _gptrputWord () mov r0,dph ; restore r0 mov dph,#0 ; restore dph 00016$: - _endasm; + __endasm; } -#else - -void -_gptrputWord () -{ - _asm - push acc - ; - ; depending on the pointer type acc. to SDCCsymt.h - ; - mov a,b - jz 00011$ ; 0 near - dec a - jz 00012$ ; 1 far - dec a - jz 00013$ ; 2 code - dec a - jz 00014$ ; 3 pdata - dec a ; 4 skip generic pointer - dec a - jz 00011$ ; 5 idata - pop acc - sjmp 00016$ -; -; store into near space -; - 00011$: - pop acc - push ar0 - mov r0,dpl - mov @r0,_ap - inc r0 - mov @r0,a - sjmp 00015$ - - 00012$: - mov a, _ap - movx @dptr,a - inc dptr - pop acc - movx @dptr,a - sjmp 00016$ - - 00013$: - pop acc ; do nothing - sjmp 00016$ - - 00014$: - pop acc - push ar0 - mov r0,dpl - xch a,_ap - movx @r0,a - inc r0 - xch a,_ap - movx @r0, a - 00015$: - inc dptr - pop ar0 - 00016$: - _endasm; -} -#endif - #endif