?

Log in

No account? Create an account
ностальгии псто - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

ностальгии псто [авг. 2, 2018|06:48 pm]
Anatoly Vorobey
[Tags|]

Если поднапрячься и начать вспоминать, что я забыл из жизни программиста в начале 90-х, то какие-то вещи всплывают:

- оптимизация CONFIG.SYS для освобождения базовой памяти
- близкие и далекие указатели в Turbo C
- XOR AX, AX быстрее, чем MOV AX, 0
- int13h и int21h

Но есть штуки, которые я сам никогда бы не вспомнил, уверен, сгинувшие в пучине, и только если вдруг где-то встречаю упоминание, то сначала неловкость такая, было же что-то такое, было... и потом - пневмопочтой из этой самой пучины в сознательную память - боже мой, да, было, ДА -

https://en.wikipedia.org/wiki/Mode_X

Какое это было прекрасное извращение!

Вместо обычнного разрешения 320x200 в нем делался виртуальный экран в 4 раза больше, так, что реальный экран можно внутри этого виртуального перемещать. Но как писать в память виртуального экрана, если она занимает до 256kb, а в один сегмент 16-битного процессора умещается только 64kb? Делим виртуальный экран на четыре "пласта": первый содержит только биты 0,1 каждого пикселя, второй биты 2,3 итд. В любой данный момент времени 64kb экранного буфера подключены к одному из пластов. Каждый байт держит цвет сразу четырей пикселей, но только два бита из восьми для каждого пикселя. Вот тут объясняется подробнее, если неясно: https://web.archive.org/web/20160414072210/http://fly.srk.fer.hr/GDM/articles/vgamodex/vgamx1.html

Какой это был простор для мысли оптимизатора!
СсылкаОтветить

Comments:
[User Picture]From: ilya_dogolazky
2018-08-02 04:57 pm
да "xor" и до сих пор компилятором записывается, кому нужен этот мувь-ноль...
(Ответить) (Thread)
[User Picture]From: livelight
2018-08-02 05:18 pm
> XOR AX, AX быстрее, чем MOV AX, 0

Он не быстрее. Команда занимает меньше памяти, зато на пентиуме, насколько я помню, хуже распаралеливалась.
(Ответить) (Thread)
[User Picture]From: avva
2018-08-02 07:39 pm
Это городская легенда, мне кажется, насчет распаллелирования.
(Ответить) (Parent) (Thread)
[User Picture]From: deadkittten
2018-08-02 05:19 pm
QEMM, запихивающий драйверы в видеопамять... :)
(Ответить) (Thread)
[User Picture]From: de_nada
2018-08-02 05:53 pm

Хех!



Не круто. :)

Круто - это пакет/драйвер AboveDiSk, эмулирующий RAM на харде на машинках с нехваткой оной... реально, а не типа свопа!

С ностальгией.

(Ответить) (Parent) (Thread)
[User Picture]From: de_nada
2018-08-02 05:50 pm

Ха!



>оптимизация CONFIG.SYS для освобождения базовой памяти

SET COMSPEC как способ не держать COMMAND.COM на каждой дискете. :)

С ностальгией.
(Ответить) (Thread)
From: natomist
2018-08-02 06:55 pm
Синтаксис близких и далеких указателей не был кросс-платформенным? По идее в каком-нибудь майкрософт С++ тоже должны были быть разные указатели?
(Ответить) (Thread)
From: karpion
2018-08-02 07:06 pm
Что значит "платформа"?
(Ответить) (Parent) (Thread) (Развернуть)
From: karpion
2018-08-02 07:07 pm
оптимизация CONFIG.SYS для освобождения базовой памяти
QEMM?

XOR AX, AX быстрее, чем MOV AX, 0
И короче на один байт.

Вместо обычного разрешения 320x200 в нем делался виртуальный экран в 4 раза больше
Я что-то не понял, как происходило перемещение. Программно-то можно сделать вирт.экран любого размера.

А вообще, есть определённые соотношения (для системы без кэша, ибо кэш всё усложняет):
шина_данных >= регистр_данных >= регистр_адреса >= шина_адреса >= log2(объём_памяти)

Если не так - приходится жескоко извращаться.

Edited at 2018-08-02 19:07 (UTC)
(Ответить) (Thread)
[User Picture]From: avva
2018-08-02 07:38 pm
Перемещение происходило за счет вывода координат в определенные регистры VGA (ассемблерная команда OUT, вывод в порт).

Виртуальный экран конечно можно сделать где угодно, но в то время не работало сделать виртуальный экран большого размера в главной памяти, а потом копировать из нее в буфер экрана, потому что это было слишком медленно. В этом режиме весь виртуальный экран сидел в памяти видеоадаптера, и разные части этой памяти оказывались доступными по одному и тому же физическому адресу в результате опять-таки манипуляций регистров VGA. Смена начальных координат реального экрана внутри виртуального происходила мгновенно (точнее, со скоростью обновления монитора), не требуя копирования всего содержимого экрана.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: dimaz80
2018-08-02 07:23 pm
Smartdrive и связанная с ним история.
Оставленный с чужим компом наедине на несколько часов, решил во что-то поиграть. Вольф или Дюна наверно. Ну естественно памяти не хватало. Забекапил autoexec.bat на диск D, убрал все ненужное, ребут. Ну, после ребута диска D нет :( Интернетов конечно тогда никаких не было. По памяти восстановил удаленную строчку со смартдрайвом (это была моя первая с ним встреча, наверное поэтому запомнил). Диск D воскрес, обошлось без люлей :)
(Ответить) (Thread)
[User Picture]From: livelight
2018-08-02 07:54 pm
А куда диск D: делся?
SmartDrive - это всего лишь кэш. На наличие дисков он не влиял, вроде.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: orkatt
2018-08-02 08:53 pm
16 цветная графика на CGA с разрешением 160х100. :)
(Ответить) (Thread)
[User Picture]From: sizeof
2018-08-02 09:17 pm

Ну как же, разве это можно забыть? Мировая классика...



:)


Edited at 2018-08-02 21:18 (UTC)
(Ответить) (Thread)
[User Picture]From: redis
2018-08-02 09:23 pm
Понял ровно каждую вторую строку воспоминаний, начиная с первой.

В смысле экрана самое крутое решение было на Спектруме - отдельное кодирование черных/белых точек, отдельный квадрат цвет/бэкграунд восемь на восемь. Экран упихивался в 6 килобайт, что при памяти в 48 позволяло даже без всяких компрессий сохранять с пяток экранов для программы
(Ответить) (Thread)
[User Picture]From: chva
2018-08-03 04:45 am
По-моему, так не только на Спектруме было, ещё на каких-то восьмибитных персоналках, просто в России Спектрум был более всего популярен.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: urod
2018-08-03 04:08 am
Tiny mode, small mode, middle mode, large mode, huge mode.

80287 mathematical coprocessor. Без него операции с вещественными числами были в десятки раз медленнее.

640К памяти и всякие Phar Lap, QEMM и что-то ещё которые её расширяют.

Turbo C/C++ vs Microsoft C/C++.

gzexe

DJGPP.

Установочные дискеты. Читал, что какой-то майкрософтовский компилятор представлял собой набор дискет, весящий сколько-то килограмм и имевший ручку для переноски.
(Ответить) (Thread)
[User Picture]From: dmarck
2018-08-03 11:26 am
Microsoft Xenix. но объём и вес там, на самом деле, составляли книжки. но, да, некислый такой ящик, сравнимый что по размеру, что по весу с винной коробкой на дюжину бутылок.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: ilia_yasny
2018-08-03 09:37 am
Боже, я вообще разучился программировать с тех пор как перестал это делать лет шесть назад. А ведь когда-то улучшал драйверы для линукса.
(Ответить) (Thread)
[User Picture]From: kray_zemli
2018-08-04 09:32 am
Не так всё было. При работе в 256-цветном режиме (именно он и называется Mode-X), каждый байт содержал ровно один пиксель, без всякого чередования бит, но сами пиксели по горизонтали чередовались по слоям, т.е. в каждом слое последовательные байты шли через 4 пиксела.

Там ещё была проблема, что переключать слои записью в порты было медленно. Поэтому итерироваться попиксельно по горизонтали было невыгодно из соображений произволительности. А итерирование по вертикали приводило к невозможности поспевать за лучом и соответственно к разрыву движущегося изображения. Если не чередовать видеостраниц. Поэтому итерировались горизонтально, но не попиксельно, а с шагом 4 пиксела, переключая слои, например, 4 раза за линию.

В случае 16-цветных режимов, работа видеопамяти в подобном режиме была штатной, так как позволяла работать с 8 пикселами за раз. В 16-цветном режиме 320x200 помещалось 8 страниц. Например, в игре Titus the Fox, если мне не изменяет память, куски фона 16x10 хранились в видеопамяти, подвижный фон был закеширован в неподвижном виде замкнутым в тор и обновлялся на стыке копированием этих фрагментов, потом это всё сводилось вместе со спрайтами на видимую страницу.

А вообще, у меня был специальный пост на тему устаревших технологий

Edited at 2018-08-04 09:45 (UTC)
(Ответить) (Thread)
[User Picture]From: kray_zemli
2018-08-04 09:48 am
Да, кстати, чуть не забыл. Держите 1000 цветов на CGA (через композитный NTSC-выход, естественно):



Вот ещё от тех же ребят:







Edited at 2018-08-04 09:56 (UTC)
(Ответить) (Thread)
[User Picture]From: kray_zemli
2018-08-04 06:33 pm
А вот такое можно было сделать в обычном текстовом режиме:

(Ответить) (Parent) (Thread)