Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет nancygold ([info]nancygold)
@ 2024-06-24 03:03:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Настроение: amused
Entry tags:gamedev

Kinda getting used to DOS programming
But it is really quirky. For example, here is the code to print he amount of memory available to program:

#include <dos.h>

int main(int argc, char **argv) {
  char buf[80];
  dos_psp_t _seg *pPSP = (void _seg*)_psp;
  int32_t avail = ((int32_t)(pPSP->himem - _psp) + 1) << 4;
  printf("Memory available: %s\n", litoa10(buf, avail));
  return 0;
}


The _seg is a special keyword to convert uint16_t segment value into a pointer.
litoa10 is basically a itoa(x,10), but for 32bit ints, since the library one works only with 16bit ones.
32bit integers are implemented in software, so the decompiled code is littered with calls like LXLSH@

The litoa10 code is just something....
char *litoa10(char *buf, int32_t n) {
  bool sign;
  size_t len;
  char digit;
  
  if ((0xffff < n) || ((-1 < n && (true)))) {
    sign = false;
  } else {
    sign = true;
    n = CONCAT22(-(n != 0)-_22(n),-n);
  }
  digit = n%10;
  *buf = digit + '0';
  buf[1] = 0;
  while( true ) {
    digit = n/10;
    if (digit == 0) break;
    len = strlen(buf);
    if ((len & 3) == 3) {
      len = strlen(buf);
      memmove(buf + 1,buf,len + 1);
      *buf = ',';
    }
    len = strlen(buf);
    memmove(buf + 1,buf,len + 1);
    n = n/10;
    digit = n%10;
    *buf = digit + '0';
  }
  if (sign) {
    len = strlen(buf);
    memmove(buf + 1,buf,len + 1);
    *buf = '-';
  }
  return buf;
}



first time I see memmove in an integer printing routine.


(Добавить комментарий)


(Анонимно)
2024-06-24 05:31 (ссылка)
"
Энергетики могут привести к облысению — турецкие трансплантологи

Всё из-за состава энергетиков: в них много разных ингредиентов и витаминов, которые способствуют росту волос при умеренном потреблении, но их чрезмерное употребление может привести к обратному эффекту.

Так, например, умеренный уровень кофеина ускорит рост волос, а злоупотребление им приведёт к повышению уровня стресса, гормональному сбою и повреждению волосяных фолликул.

"

(Ответить) (Ветвь дискуссии)


(Анонимно)
2024-06-24 13:37 (ссылка)
садкова облысела штоле?

(Ответить) (Уровень выше)


(Анонимно)
2024-06-24 05:39 (ссылка)
Pay attention, you started making typos, get 8 hours of sleep.

(Ответить)


(Анонимно)
2024-06-24 11:16 (ссылка)
What will be the end result of this activity? Will you port it to modern windows? Please port it to vulkan 4k resolution with RESTIR.

(Ответить) (Ветвь дискуссии)


[info]nancygold
2024-06-24 12:19 (ссылка)
The end result is my entertainment.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2024-06-24 12:31 (ссылка)
living a luxurious life... entertaining themself all day every day... like a fucking aristocrat from the days of yore

(Ответить) (Уровень выше)


(Анонимно)
2024-06-24 12:32 (ссылка)
Do you cook? What is your diet?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]nancygold
2024-06-24 12:42 (ссылка)
I do, but I prefer a boy taking me to a restaurant.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2024-06-25 00:23 (ссылка)
How often does that happen? Are you losing weight?

(Ответить) (Уровень выше)