ZX Format
#05
11 декабря 1996 |
|
Программистам - описание и история создания MEM.
MEMHELP (TALES OF CREATION). music by DNK (C) KAMIKADZE O.B. FUCKSOFT ________________________________ Гордый вратник Сатаны Пролил кровь на свет И Священный Меч Войны Разрубил Секрет ... (KORROZIA METALLA 92) Программка "МЕМ" была написана по нескольким причинам: Во-первых : утомили всевоз- можные козлы, которые в следствии то ли собственной ог- раниченности, то ли убогости своих паталогов (а называть из- делия, которые не могут произо- дить полную дешифрацию адреса порта, словом "КОМПЬЮТЕР" - язык не поворачивается), упрямо вы- пускают на белый свет некие программные продукты, подчас вроде бы и неплохие, да в силу указания неполного адреса порта, не работающие на нормальных ма- шинах (PROFI, SCORPION, etc.), за коими, как известно, будущее синклер - совместимого рынка. Особенно удручают их "адаптации" уже известных программ под такую паталогическую дешифрацию. Ку- пишь программку за денежки кров- ные - а она не пашет... Злость, отнюдь не спортивная охватывает - так бы и дал в морду!!! Да где она, эта морда??? Уж много лет умные люди твердят: указывай ПОЛНЫЙ адрес порта!!! Да разве можно убедить идиота?.. Посему, идиотов просим обло- миться и не читать далее - все равно без толку. Лучше поиграйте в "PREVIEW"... Во-вторых : у вышеуказанных почетнных компьютеров наблюдает- ся несовместимость по портам и методам переключения страниц, когда речь заходит о памяти, большей, чем 128к. В-третьих : не у всех компьютеров одинаковой модели равное количество ОЗУ. У PROFI, например, бывают варианты 256к, 512к, 768к, 1М. Ходят байки о 512к SCORPIONе, который может быть появится в ближайшем време- ни... В-четвертых : страницы ОЗУ могут располагаться и не подряд: например у того же PROFI в базо- вой модели при 512к наблюдается такая странная картина физичес- кого расположения ОЗУ: сперва 256к ОЗУ (#0-#0F), затем дырка в 512к (#10-#2F), и, наконец еще 256к ОЗУ (#30-#3F), хотя бывает и подряд... В-пятых : на некоторых маши- нах, рассчитаных на большое ко- личество страниц, при подключе- нии НЕ ВСЕГО ОЗУ (например 512к вместо 1М) вылезает на свет та- кая паталогия, как пересечение страниц: обращаешься к одной, а подключается другая (или нес- колько других), либо одну стра- ницу можно вызвать по разным но- мерам, либо... Упаришься пере- числять. Хорошо это или плохо - вопрос спорный, но в плане безо- шибочного листания страниц - бе- зусловно отвратительно. Прихо- дится составлять карты ОЗУ, на- зывать физические страницы логи- ческими номерами, обращаться че- рез специальный (программный) диспетчер памяти... МРАК !!! В-шестых : в последнее время стали частенько появляться прог- раммы, ориентированные лишь на определенную машину: TASM256 (SCORPION), HONEY COMMANDER (ATM), MEGACOPY (PROFI), и мно- гие другие. То же и с игрухами. На этих компьютерах они ис- пользуют все их достоинства, но на других они не идут, или идут, но ущербно. А ведь все различие заключается в 99% случаев не в использовании дополнительных уникальных аппаратных особеннос- тей, а в прозаическом методе листания страниц, либо в их ко- личестве. Тем самым авторы этих программ (подчас весьма хороших и, что самое обидное, уни- кальных) теряют огромную часть своей потенциальной аудитории, и в следствии, авторитет и финан- совую выгоду. # В-седьмых : наблюдается и обратная картина, не менее иди- отскя : авторы, желая "чтоб ра- ботала на всем", преднамеренно понижают уровень программ, ис- пользуя самый мизер и прижимая SCORPION или PROFI до уровня 128, а то и 48к. Понятно, что не всегда эти навороты нужны, но в противном случае чувствуешь себя оставленным в дураках: обладаешь мегабайтом памяти, а копируешь, используя 128к, т.е. вставляешь и вытаскиваешь диски (путаясь и яростно матерясь) 6 раз. Или, при имеющемся 256к SCORPIONе, жирная, графически навороченная игруха каждые 1-2 минуты начина- ет ерзать по диску, считывая по 16к файлы (а их может оказаться и 16 штук по 1к) на каждый уро- вень, а уровней, например 14. Трагикомедия... В-восьмых, в-девятых, в-де- сятых... Можно состариться, пе- речисляя, но не охватить и про- цента причин, а ведь разумеется, я все равно не смогу вспомнить их все. У тебя, небось, тоже не раз возникали дополнения к скорбному списку паталогий, пока ты читал сий пасквиль. Мораль сей басни такова : грамотно написанная программа обязана использовать по возмож- ности ВСЮ имеющуюся в наличии память компьютера, ежели это мо- жет повысить ее качество, удобство, быстродействие, объем данных. В некоторых случаях это, конечно вовсе не обязательно, но когда речь заходит, например, о копировщиках, базах данных, электронных дисках, оконных ин- тефейсах с сохранением, многоб- лочных игрухах и прочих прибам- басах, то максимальное использо- вание ВСЕЙ памяти - бесспорно и необходимо!!! И кроме того рабо- тать на других компьютерах, не гнушаясь ничего, даже 48к. Задачи на первый взгляд не- совместимые, но только на первый взгляд. Программа ДОЛЖНА САМА ОПРЕДЕЛЯТЬ, какой компьютер, вы- яснять количество реально имею- щихся страниц ОЗУ их реальные адреса и метод их листания. Ведь согласитесь, вводить эти данные с клавиатуры каждый раз при за- пуске, либо инсталлировать с за- писью SETUPов на дистрибутивный диск (явно защищенный) с угрозой того, что при записи он загнет- ся, не хотелось бы никому, в том числе и потенциальным покупате- лям ваших программ. Как раз, именно этим и за- нимается моя программка с неза- тейливым названием МЕМ. Ис- пользуя ее в своих программах, вы можете добиться всего того, что я пожелал грамотным програм- мистам, знающим толк в удобстве работы с большими массивами па- мяти. Отдавая ее "на халяву" лю- бому пожелавшему, я надеюсь, что она принесет ему удобство и пользу, а юзеpам - неплохой SOFTWARE, за который не жалко будет заплатить кровные... Сама программка написана в виде набора подпрограмм в форма- те GENS4+ ( увы, увы - ради сок- ращения объема ее пришлось пе- регнать в TASM. прим.ред.). Опознает PROFI, SCORPION, SINCLAR 128, SINCLAIR 48. К со- жалению, не имея никаких данных по АТМ, я не смог включить его в этот список. Она была обкатана на таких машинах, как PROFI, SCORPION, PENTAGON, ZONA, 128к и 48к, а посему признана работос- пособной. Имеются несколько точек вхо- да, каждую из которых нужно рассмотреть в отдельности : CONF : производит опрос конфигурации компьютера. Возвра- щет в регистре А тип машины "s"- SINCLAIR 48, "S"SINCLAIR 128, "C"-SCORPION 256, "P"-PROFI и дублируя ее в переменной (CONF); в переменной (DELA) - количество страниц и таблицу их реального расположения, начинающуюся с TABL и заканчивающуюся байтом #FF. Если ты не собираешься вы- черкивать страницы либо перехо- дить в смешаный или 48 режим (см. ниже), то после выхода из этой процедуры все, что дальше этого байта #FF, более не приго- дится, а посему можно загружать туда все, что угодно и использо- вать эту область памяти по свое- му усмотрению. Если ты все же собираешься повычеркивать и(ли) посмешивать, то эта область ста- нет ненужной только после вычер- кивания и(или) смешивания. Сох- раняет все регистры кроме AF, но в своей работе использует по 1 байту из каждой страницы, с но- мером, указанном в метке POINT. Устанавливает после себя текущей страницу 7. Уничтожает себя в процессе работы, изменяя свое тело на переменные и таблицу страниц, посему второй раз не может быть вызвана (да это и не нужно). Также производит некото- рые изменения в теле процедуры LISTER, указывая на установлен- ный в процессе опознавания порт. Желательно запустить ее еще на стадии загрузки, чтоб ничего не повредила в страницах. ERASER : вычеркивание стра- ницы с физическим номером, поме- щенным в регистр А, из списка страниц ОЗУ и соответствующее уменьшение числа страниц в пере- менной (DELA). Имеет смысл в том случае, когда какие-либо страни- цы не собираешься листать, нап- ример 2 и 5. Тем самым они уда- ляются из таблицы и более не участвуют в процессе листания по логическим номерам (см. ниже). По окончанию вычеркивания всех ненужных страниц, сама становит- ся ненужной и может быть репрес- сирована в порядке, указанном в предыдущем абзаце. Сохраняет все регистры кроме AF. Можно запус- кать только после процедуры CONF. LISTER : производит листание по установленному порту в проце- дуре CONF и логическому номеру страницы, помещенному в регистр А. (Логический номер имеет смысл в том случае, когда не все в по- рядке с номером физическим, нап- ример когда некоторые страницы вычеркнуты или же при такой пи- кантной ситуации : обнаружены номера страниц #01...#0F, #30...#3F, и программисту куда удобнее называть их по порядку, т.е. #00...#1F, а не морочить себе голову замысловатой карти- ной физических номеров. В таком случае удобно указывать тот но- мер, который страница занимает в таблице страниц.) Возвращает в регистре А физический номер страницы и дублирует ее в пере- менной (MARK). Сохраняет все ре- гистры, кроме AF, игнорирует но- мера страниц, большие, чем было установленно. Эту процедуру мож- но запускать только после того, как конфигурация была установле- на процедурой CONF, иначе капут. (Имеет смысл напомнить, что во всех машинах, о которых идет речь, окромя PROFI с памятью, меньшей 1М, при невычеркнутых страницах логический и физичес- кий номера совпадают). PROFI : листает физические стра- ницы PROFI по порту #DFFD, по номеру, помещенному в регистр А. Сохраняет все регистры. SCORP : то же самое для SCORPIONа порт #1FFD. S_128 : то же самое для SINCLAIR 128 порт #7FFD. UN128 : Переводит паталог из 128 в смешаный режим, т.е. с 48 ПЗУ, но с открытым #7FFD-портом. Это бывает полезно, когда 128-я ПЗУ- ха совсем не в тему (а это почти всегда), но все же надо полис- тать. Старается сохранять все регистры, но включает 1 режим прерываний и разрешает их. После ее выполнения, если вернешься в BASIC, то увидишь не 128, а 48 редактор. В случае, если запуще- на из смешаного или 48 режимов - ничего не произойдет. После вы- полнения становится ненужной и может быть репрессирована. UN48 : Переводит паталог в 48 режим, т.е. закрывает защелку #7FFD порта. Листание обычным способом, естественно, становит- ся невозможным. (Я не имею в ви- ду особые способы, возможные, например на PROFI или SCORPIO- Nе). Сохраняет все регистры, но сама запускает UN128 со всеми вытекающими последствиями. После ее выполнения ВСЕ подпрограммы МЕМ становятся ненужными и зани- маемая ими память может ис- пользоваться по своему усмотре- нию. ПОДОБЬЕМ БАБКИ : (далее значок * означает адрес загрузки МЕМ) 1 - Процедуры : *+61 CONF : определение конфигу- рации и установка порта. *+337 ERASER : вычеркивание страницы из таблицы. *+38 LISTER : листание логичес- ких страниц по установленному порту. * PROFI \ листание физичес- *+12 SCORP - ких страниц по со- *+24 S_128 / ответствующему порту. *+367 UN128 : перевод паталога в смешаный режим. *+429 UN48 : перевод паталога в 48 режим. 2 - Переменные : *+61 CONF : установленная конфи- гурация : "s" - SINCLAIR 48 "S" - SINCLAIR 128 "C" - SCORPION 256 "P" - PROFI *+62 DELA : количество опознаных страниц. *+63 TABL : начало таблицы стра- ниц. MARK : копия физического номера текущей страницы. По умолчанию #5B5C, что соответствует пере- менной 128к BASIC BANKM. POINT : адрес байта опознания страницы (его содержимое погиба- ет). По умолчанию #FFFF, т.е. последний. Совет тем, кто недопонял: на стадии загрузки нужно загрузить МЕМ, смешать (желательно) с по- мощью UN128, запустить CONF, за- тем вычеркнуть ненужные страницы с помощью ERASER, после чего не- обходимым останется лишь кусок с длиной в 64 байта + количество страниц. (Максимальная длина - в случае PROFI 1M с невычеркнутыми страницами = 128 байт). Для пе- ревода в 48 режим достаточно просто запустить UN48. Потом можно грузить, запускать, лис- тать (если не защелкнул) и т.д. Переменные MARK и POINT мож- но установить любые, какие больше по душе придутся, но ос- мелюсь напомнить, что POINT должна быть в интервале #C000...#FFFF, а MARK - как раз наоборот, не должна. Также, не сочтите за ос- корбление просьбу располагать сию программку не в листаемых страницах и по возможности не листать 2 и 5 страницы, а также помнить, что нумерация страниц (как физических, так и логичес- ких) начинается с 0, т.е пере- листнуть можно только страницу с номером меньшим, чем в перемен- ной (DELA) и уж тем паче не лис- тать страниц на 48к машине (т.к. порт листания на ней не устанав- ливается, таблица страниц не составляется и паталог сбросит- ся). Кстати, сия программка не отличит KAY 256 от SCORPIONа, т.к. у нее только одна задача - память. А у SCORPIONa полезно вычеркнуть 8 страницу во избежа- ние обломов с RST8. И ежели все это будет соблю- дено, то можете смело варганить программку, включая в нее МЕМ кусок, и листать страницы любого компьютера, не заботясь ни о чем, и программки ваши будут зе- ло красотою лепы, и радовать бу- дут мое жестокое сердце... ЧАО... (KAMIKADZE O.B.) = FORWARD TO FULL DARKNESS !!! = ZF> сама прога лежит в приложе- нии, в формате TASM4 (XLD). ZF> Сразу хочу заявить, что за последствия работы вышепри- ведённой програмки ответа надо требовать с её автора. А у меня сия штучка всё ещё вызывает странные сомнения... :(. Для заинтересовавшихся же данной темой в Обмене опытом найдётся ещё одна программка на данную тему, кстати, понимающая больше типов компов...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября