SDK for Evo

ZX evolution software and hardware

Postby DimkaM » 09 Nov 2012, 19:23

ха, говнокод заметил str + 0x1000
str & 0x1000 компилится как set 4,d существенно короче
ZX-Evo rev B, ZX-Evo rev C, ZXNetUsb rev A, ZXNetUsb rev С
http://nedoos.ru/ http://ti6.zxevo.ru/
DimkaM
 
Posts: 1387
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby deathsoft » 09 Nov 2012, 19:44

DimkaM wrote:str & 0x1000 компилится как set 4,d существенно короче

Видимо не & а |
User avatar
deathsoft
 
Posts: 358
Joined: 07 Apr 2007, 01:58
Group: Registered users

Postby lvd » 09 Nov 2012, 20:37

TS-Labs wrote:Про memset в этам чяти не слышали? =)

TS-Labs wrote:Тебе еще в чятике 200 раз говорилось - НЕ ЮЗАТЬ библиотечные функции.

Нихерайн непонимайтунг, что хотел сказать аффтар.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby DimkaM » 09 Nov 2012, 22:23

deathsoft wrote:Видимо не & а |

видимо да, но никтож не заметил. как и отсутствие проверки на ноль cnt в моём дефайне, ежли её сделать то оно получится проще библиотечную функцию вызвать
ZX-Evo rev B, ZX-Evo rev C, ZXNetUsb rev A, ZXNetUsb rev С
http://nedoos.ru/ http://ti6.zxevo.ru/
DimkaM
 
Posts: 1387
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby DimkaM » 10 Nov 2012, 07:53

пример с хзпц форума:
Code: Select all
unsigned char test(unsigned char *a, unsigned char size)
{
   unsigned char crc = 0xFF;
   unsigned char i;

   while (size--)
   {
      crc ^= *a++;
      for (i = 0; i < 8; i++)
         crc = crc & 0x80 ? (crc<<1) ^ 0x31 : crc<<1;
   }
   return crc;
}
результат компиляции LLVM http://zx.pk.ru/showpost.php?p=551078&postcount=57
тама походу реги сторятся перед вызовом функций. и непонятно насчёт аргументов, передаются в HL и А, а дальше куда? а если второй аргумент не чар? а если первый аргумент чар?а если банкинг и указатель трёх(четырёх)байтовый.

иар , параметры передались в вс,де. сохранение\восстановление регов вырезал. ixl и ixh, думаю это другие компилеры даже и незнают:
Code: Select all
   PUSH   DE
   POP   IY
   LD   IXL,C
; 93.   {
   EXX
   LD   E,255
   EXX
?0022:
; 94.           unsigned char crc = 0xFF;
; 95.           unsigned char i;
; 96.   
   LD   B,IXL
   DEC   IXL
   INC   B
   DEC   B
   JR   Z,?0021
?0023:
; 97.           while (size--)
; 98.           {
   LD   A,(IY+0)
   EXX
   XOR   E
   LD   E,A
   EXX
; 99.                   crc ^= *a++;
   LD   IXH,0
   INC   IY
?0025:
   LD   A,IXH
   CP   8
   JR   NC,?0022
?0026:
; 100.                   for (i = 0; i < 8; i++)
   EXX
   LD   A,E
   EXX
   LD   B,A
   BIT   7,B
   JR   Z,?0029
   SLA   B
   LD   A,B
   XOR   49
   JR   ?0030
?0029:
   ADD   A,A
?0030:
   EXX
   LD   E,A
   EXX
   INC   IXH
; 101.                           crc = crc & 0x80 ? (crc<<1) ^ 0x31 : crc<<1;
   JR   ?0025
?0024:
; 102.           }
?0021:
   EXX
   LD   A,E
ZX-Evo rev B, ZX-Evo rev C, ZXNetUsb rev A, ZXNetUsb rev С
http://nedoos.ru/ http://ti6.zxevo.ru/
DimkaM
 
Posts: 1387
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby DimkaM » 10 Nov 2012, 08:36

ллвм хорошо компилит, слишком хорошо, чтоб быть похожим на правду.
ZX-Evo rev B, ZX-Evo rev C, ZXNetUsb rev A, ZXNetUsb rev С
http://nedoos.ru/ http://ti6.zxevo.ru/
DimkaM
 
Posts: 1387
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby deathsoft » 10 Nov 2012, 10:56

Обрати внимание на кучу EXX у иара, собственно про что я и говорил (количество юзаемых регистров у иара почти в 2 раза больше чем у стуенческих поделок которые юзают только текущий набор регистров).
User avatar
deathsoft
 
Posts: 358
Joined: 07 Apr 2007, 01:58
Group: Registered users

Postby deathsoft » 14 Nov 2012, 01:38

TS-Labs wrote:#pragma data_alignment = N

Где ты такую прагму в доке на иар для z80 нашел?

Code: Select all
#pragma memory=constseg(MY_DATA)
const unsigned char data[]={l,2,3,4,5};
#pragma memory=default

а у сегмента MY_DATA в линкере выстави алигн какой надо

Вон еще пример из доки (с явным коментом)
Code: Select all
#pragma memory=dataseg(mydseg)
/* you must define mydseg in the linker file */
int loopc;
#pragma memory=default
User avatar
deathsoft
 
Posts: 358
Joined: 07 Apr 2007, 01:58
Group: Registered users

Postby DimkaM » 14 Nov 2012, 06:37

TS-Labs wrote:класть вары/консты по алайнутым адресам?

А зачем? мож мне тоже надо
ZX-Evo rev B, ZX-Evo rev C, ZXNetUsb rev A, ZXNetUsb rev С
http://nedoos.ru/ http://ti6.zxevo.ru/
DimkaM
 
Posts: 1387
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby lvd » 14 Nov 2012, 08:39

DimkaM wrote:А зачем? мож мне тоже надо
Видимо, тайлоспрайтам не хватает ЛЕ и выравнивание даты по 128кБ даёт профит аж в 38 ЛЕ. А ручками выравнивание делать -- не для барей :-D
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

PreviousNext

Return to Пентева - софт и железо

Who is online

Users browsing this forum: No registered users and 1 guest

cron