Page 3 of 3

Re: HI-TECH Z80 C Compiler 7.80PL2

PostPosted: 29 Nov 2016, 18:10
by DimkaM
вот кстати
Code: Select all
#define  _FS_READONLY   1
...
   FRESULT res = FR_OK;
   if (sector != fs->winsect) {   /* Window offset changed? */
#if !_FS_READONLY
      res = sync_window(fs);      /* Write-back changes */
#endif
      if (res == FR_OK) {         /* Fill sector window with new data */
         if (disk_read(fs->drv, fs->win, sector, 1) != RES_OK) {


хитеч задетектил что тут "if (res == FR_OK)" всегда true и выкинул проверку

а вот иар не догадался
Code: Select all
   LD   B,IYL
   INC   B
   DEC   B
   JR   NZ,?0024
?0023:
; 765.           if (res == FR_OK) {

Re: HI-TECH Z80 C Compiler 7.80PL2

PostPosted: 29 Nov 2016, 20:16
by lvd
inc ly:dec ly оно тоже не догадалось. по тактам столько же

Re: HI-TECH Z80 C Compiler 7.80PL2

PostPosted: 30 Nov 2016, 09:20
by DimkaM
очень интересно, вход\выход в функцию кардинально различаются в иар vs хайтеч
сходство это передача параметров, первые два в de,bc остальное на стеке
также в обоих компилерах нужно сохранить неизменными индексные реги

есть незначительные различия в возврате результата
хайтеч(в зависимости от разрядности) L/HL/DEHL
иар A/HL/BCHL

также в хайтеч при выходе из функции нужно изъять со стека параметры переданные в функцию
как пример выход hitech из "DWORD clust2sect ( FATFS* fs,DWORD clst)"
результат в DEHL(в иаре было бы в BCHL)
Code: Select all
;DWORD clst на стеке ибо 32битный
   pop   iy
   pop   ix
   pop   bc
   pop   af
   pop   af
   push   bc
   ret   


Не могу сказать какой из вариантов лучше, есть плюсы и там и там