- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
char *r_or_mem() {
if ( get_mod() == 3 )
return regs [ ( size << 3 ) | ( look & 7 ) ] ;
else {
static char buf [ 32 ] ;
char *s = buf ;
*s++ = '[' ;
if ( ! ( look & 4 ) ) {
*s++ = 'B' ;
*s++ = ( look & 2 ) ? 'P' : 'X' ;
*s++ = '+' ;
*s++ = ( look & 1 ) ? 'D' : 'S' ;
*s++ = 'I' ;
if ( mod ) *s++ = '+' ;
} else {
if ( ( look & 7 ) == 6 && ! mod ) mod = 2 ;
else {
if ( look & 2 ) {
*s++ = 'B' ;
*s++ = ( look & 1 ) ? 'X' : 'P' ;
} else {
*s++ = ( look & 1 ) ? 'D' : 'S' ;
*s++ = 'I' ;
}
if ( mod ) *s++ = '+' ;
}
}
if ( mod ) {
read_value ( s , mod == 2 ) ;
s = s + strlen ( s ) ;
}
*s++ = ']' ;
*s = 0 ;
return buf ;
}
}
void checkorder() {
if ( ! dest ) {
char *tmp = op1 ;
op1 = op2 ;
op2 = tmp ;
}
}
void rm ( char *s ) {
sprintf ( decoded , "%s\t" , s ) ;
decoded += strlen ( decoded ) ;
get_ds() ;
read() ;
op1 = get_reg() ;
op2 = r_or_mem() ;
checkorder() ;
sprintf ( decoded , "%s , %s" , op1 , op2 ) ;
}
Чассть моего дизассемблера для 16-анального x86, что читает операндыы.
А то у меня много такого кода, типа:
А хотелось бы:
412 строк превратились в 293.
ЗЫ. Жалко что на биржах фриланса заказы в основном по вебу, низкоуровневости почти не встречается.
Но админ как всегда, не обратил внимания на эти визгливые просьбы...
Как и ответы вопросом на вопрос.
И снова ты долбоёб — где ты видишь агрессию ?
Я Гоано, а не СемаРиал.
Слуш, ты уж оперделись тогда.
Ты Гоано, СемаРиал, еще_одно_говно, или dolboeb?
http://govnokod.ru/24137#comment412042
А насчет dolboeb'а:
И с чего ты взял, что я СемаРиал ?
И кто такой Слуш ?
Тот тоже активно сралписал про всякую сишечку и лоу-левел, затем замолчал, и сразу ты появился.
http://govnokod.ru/24124#comment411644
https://blood-wiki.org/index.php/Blood_Source_Campaign
https://github.com/videogamepreservation/dukenukem3d
https://github.com/fabiensanglard/vanilla_duke3D/blob/master/SRC/A.ASM#L67
почитай про dos extenders, dos4gw и пр.
Короче, во времена дос были программы для реального режима проца - они могли занимать максимум 600 с чем-то кб оперативы. Кому этого не хватало, сам переводил проц в защищенный режим - так ему была доступна вся оператива. Так появились дос расширители. Недостаток появился, когда появилась win32 - они конкуррировали с осью - главный должен быть только один. Win9x их терпела, но если такие игры висли - гарантированно висла и винда. NT поэтому с ними никогда не дружила и теперь в Blood можно поиграть разве что в досбоксе.
А 16 бит это 64кбит. Даже в реальном режиме смещение было 32 бита.
Однако значение в сегментном регистре обрезалось, в итоге удавалось адресовать до 20 бит (1мб). Минус область bios, память видеоадаптера итд, в итоге программам доставалось 640К.
Туда же загружались (по умолчанию) всякие TSR (резидентные) программы вроде драйвера мыши и русификатора, в итоге программам доставалось еще меньше.
Однако всякие гоблины, викинги и принцы персии работали на ура (вероятно они использовали оверлеи: загружали часть данных в память при необходимости)
Вот ты похож на сёмуриал.
Только через unreal mode — прыгаешь в защищённый режим и возвращаешься обратно оставив limit на 32 бита. Само собой, этот хак работал только на 32-битных процах.
У 286 дорожек стало 24 (до 16 мегабайт) , и только у 386 их стало 32 (причем был кастрированный SX который имел 24 дорожки).
Так что физически адресовать 32 бита стало можно только в 386, однако для доступа туда из реального режима нужен был или хак unreal mode, или появившиеся в конце 80х спецификации DPMI, VCPI и XMS (himem.sys), да и то: там можно было держать данные (собссно, драйвер их туда копировал) а исполнять там код было нельзя.
А до этого еще была борьба за целый сегмент (64К) HMA (см "gate A20"), в общем это всё треш, ад и кошмар.
Слава виртуальной памяти, MMU слава.
Почти как джаваскрипт.
cdecl был не быстр, емнип: там все надо было пихать в стек, даже ты хочешь один байт передать.
Регистры не использовались
На самом деле, прикольная либа была.. весом менее 1Кб
?
Это в нормальном Си так можно?
Лямбда C++ выворачивается и превращается в "лямбда-взятие" элемента массива.