pozitronik: (Sheridan)
Предудущая часть.

Про школу

Я собирался закончить рассказ про детство главой про школу, но вспомнил, что уже писал про неё когда-то: http://pozitronik.livejournal.com/159675.html. Перечитал, и понял, что существенно дополнить написанное вряд ли смогу. Школа была местом неприятным, скучным и однообразным, и я с радостью променял бы воспоминания о ней на те годы, которые она у меня забрала. Десять долбаных лет, потраченных, как мне кажется, очень неэффективно.

Правда, парой воспоминаний я всё-таки могу поделиться.

Однажды к нам, первоклашкам, зашли шестиклассники. Я смотрел на них, и думал: вот это вот ни фига себе, какие огромные! Я и представить не мог, что когда-нибудь вот так же вырасту.
Уже в старших классах, на каких-то учениях мы отыгрывали пожарную тревогу. Я должен был зайти в тот самый кабинет, в котором был первоклашкой, натянуть противогаз на глазах у детей, и вывести их за собой. Я так и сделал: зашёл в кабинет, и на меня уставилось двадцать пар глаз: полагаю, первоклашек посетила примерно та же мысль, что и меня когда-то. Ничего не говоря, я натянул противогаз - и дети засмеялись. Тогда я стал догадываться, что смех - это психологическая защита от всего непонятного и страшного.

Иногда доводилось дежурить в раздевалке. Дежурили, для надёжности, вдвоём, и это был праздник, поскольку можно было не идти на занятия. Мы какбе сторожили оставленные в раздевалке вещи, и давали звонки по расписанию. Конечно, шикануть перед своими и дать звонок с урока на пару минут раньше было круто, но за это можно было и по шапке получить.

Ещё иногда дежурили в столовой: помогали поварам на кухне, раздавали порции, убирали посуду. Это, кроме освобождения от уроков, давало видимый профит - можно было забрать себе годных булочек, которые я очень любил, ну и лишнюю порцию обеда тоже.
Но вообще я перестал есть в столовой (кроме булочек :3) после первого же дежурства - мне выпало кашеварить с одним хулиганистым татарским ублюдком, который просто от скуки обхаркался в котёл с компотом.
Read more... )
pozitronik: (Sheridan)
Предыдущая часть

После посещения всех локаций я возвращался домой.

Про эту квартиру у меня есть отдельный пост, и дополнить его я могу только парой воспоминаний.
Во-первых помню, как меня туда впервые привезли. Я, конечно, знал, что у нас есть новая квартира - ведь батя строил этот дом сам, а я частенько забегал на стройку - но и предположить не мог, что она окажется такой огромной! После теснющей комнатки в общаге эти просторные хоромы казались мне пределом мечтаний. Пока в квартире не было мебели, там можно было даже кататься на велосипеде - вот как много там было места!
Мне нравилось в этой квартире всё. Огромная лоджия, с которой было видно весь город, и на которой было здорово сидеть в кресле качалке, жрать вишни из компота и читать книжку. Нравились подоконники, на которые точно так же можно было взгромоздиться с книжкой и вишней - а из окон открывался вид на лес. Нравилась огромная ванная, в которой можно было сидеть сколько душе угодно (хотя без книжки).
Нам с братом отвели целую комнату на двоих. В эту же комнату поставили, почему-то, морозильную камеру. С одной стороны, в этом был плюс: я мог таскать из неё мороженые ягоды, пока никто не видит. Но был и минус: камера шумела, и тускло светила индикатором, мне это мешало заснуть.
В первый год нашей жизни там, асфальта вокруг ещё не было. В результате, весной талой водой вокруг намыло глубоченные (в человеческий рост) овраги, на дне которых текли превосходные ручьи. Массу удовольствия я получил, пуская по этим ручьям "кораблики" из сосновой коры.
По той же причине за домом была топь из размокшего песка. Я частенько рисковал, бродя вокруг, и однажды чуть не утонул - песок успел поглотить меня по колено, прежде чем на мои крики прибежал батя, и откопал (правда, без сапогов - сапоги мои так и утонули там навсегда).
Но это были мелочи жизни, в целом же я находил квартиру и дом превосходными. И даже окрестности его были полны просто невозможным количеством всяких интересных мест. Я чувствовал себя в этом доме, как Гарри Поттер, попавший в Хогвартс.
Дом стоял у огромного холма, основание которого немного срыли, а чтобы уберечься от оползней, укрепили холм бетонной стеной. Гулять по этой стене было всегда прикольно, она была словно границей между городом и не-городом (наш дом был самым крайним, дальше уже начинался лес). Чтобы дать выход грунтовым водам, под стеной сделали колодец, в который стекала вода из жёлоба в стене. Вода оттуда текла всегда, даже в самую сильную жару, и всегда она была прохладной и вкусной. Мы пили эту воду с удовольствием.
Сам холм был покрыт прилеском - сосёнками и берёзками, а в центре рос огромный дуб. Играть там было просто замечательно, бегать меж деревьями, залезать на них, валяться в траве, ловить кузнечиков - всё это было очень здорово. Там же можно было влёгкую нарезать маслят, нарвать горстку земляники или подкислиться диким щавелём. Постоянно стучали дятлы, часто можно было увидеть белку, в общем, я не знаю места чудеснее.
К сожалению, это зелёное великолепие загадили очень быстро. Ёлочки-сосёночки рубили каждый новый год (я на это уже жаловался, полянки вытаптывались местными алкашами, любившими бухнуть в сени деревьев, - и уже через пару лет не найти было там ни земляники, ни грибов.
Но до той поры было классно.
Read more... )
pozitronik: (Sheridan)
Начало тут.

Про дачу

Ещё одной нелюбимой локацией моего детства была дача.

Тут следует сделать некоторое отступление. Я обнаружил, что все представляют дачи по разному: для жителей крупных городов это загородный участок с домиком, и, возможно, баней; в Самаре и Москве, например, в порядке вещей летом жить на дачах, немножечко сдавая свою квартиру за пару шекелей, таким образом совмещая приятное с полезным.
Так вот: наша дача ничего подобного собой не представляла. Всё приятное там было уничтожено в угоду полезному, изначально это был просто участок земли меж сотен других таких же участков.

Когда этот участок появился, никакого автомобиля у нас не было, и добираться приходилось на автобусе. Можно было доехать на "четвёрке" до остановки "Мост ГАУ" (это самая крайняя остановка города, где граница цивилизации охранялась блокпостом милиции), либо, если очень везло, можно было поймать сто третий - он отличался тем, что проезжал ещё немного дальше, через этот самый мост. Но даже после автобуса требовалось пройти ещё незнамо сколько пешком туда, где ни один автобус не ходит до сих пор.
Помню, тащась впервые за батей, я постоянно ныл: "Ну скоро придём уже?", на что батя с тем же постоянством врал, что дачу нашу уже видно, и что вот-вот доберёмся.
Когда появилась машина, стало немного легче. Утром, в адскую рань, батя пригонял машину из гаража, бегал и бугуртил по тому поводу, что всё остальное семейство ещё не готово ехать, и даже ещё не проснулось. "Должны быть как штык!" - орал батя, и это дико нас всех доставало, потому что на дачу, по правде сказать, не хотелось никому. И если маманя покорялась безысходности (надо сказать, что в бедное время жратва с дачи таки помогала), мы с братом искали любые поводы бойкотировать поездку.
Но эти поводы всегда игнорировались, нас кидали в машину в любом состоянии. Думаю, будь я даже при смерти от попытки убить себя вилкой в сердце, батя всё равно обозвал бы меня симулянтом, кинул под сиденье и велел заткнуться.
Но, по крайней мере, в машине можно было поспать минут двадцать.
Read more... )
pozitronik: (Sheridan)
В детстве время воспринимается иначе. В общем-то, не только время, это касается почти всего, что я помню. Но времени - особенно; его было бесконечно много, и оно могло сжиматься и растягиваться, создавая причудливые завихрения. Какие-то моменты этого времени потерялись навсегда, но сохранилось тоже немало.

Самое первое моё воспоминание, если подумать, имеет довольно странную причину.
Я вышел из большой комнаты в бабушкином доме и увидел, как родители копаются на антресолях. Я решил, что наверное, через много-много лет мне будет интересно подумать о том, каким было моё первое осознанное воспоминание, и что этот момент ничем не хуже любых других. Я запомнил его, и с тех пор точно знаю, что именно помню самым первым.
Конечно, я прекрасно понимаю, что были какие-то события до того, но про них уже ничего не могу сказать. Зато о событиях, происходивших после, я могу рассказывать очень долго.

Про общагу

До 91, кажется, года наша семья жила в заводском общежитии, называвшемся "СЛАВА КПСС" (именно эти буквы были выложены на фасаде красным кирпичом). Мне, мелкому, в общаге было вполне нормально, ведь можно было сколько угодно бегать по коридорам, весело принимать душ в общей помывочной и играть с пацанвой в прятки по всем этажам. Было весело, но, подозреваю, мне было бы весело в любом месте, ведь ничего другого я не видел, да и маленький мой мозг тогда занимали вещи совсем иного рода.

Например, однажды батя припёр с завода чуть ли не ведро мелкой стеклянной дроби, наподобие бисера, но без дырочек. Предполагалось, что я буду выкладывать этой дробью мозаику на обмазанном клее листочке, но бисеринки были мелкие, клей советский, выкладывание мозаики - скучным занятием, так что у меня просто появилось ведро неоприходованного бисера.
Он был реально офигенный, приятный на ощупь и не только; естественно, я не сдержался и сожрал немного. Никакого вреда бисер не причинил, даже наоборот: ещё долго каждый мой поход по-большому сопровождался весёлой стрельбой шариками.
Конечно же, одному мне такого сокровища было много (я про бисер, а не про стрельбу), и я делился им со всеми жителями общаги, даже теми, кто не просил. Весь наш этаж был усыпан этими стеклянными шариками на радость детворе и на горе взрослым. Думаю, до сих пор, если тщательно поискать под общажными плинтусами, можно будет найти крупицу тех сокровищ.
Однажды мне принесли хомяка. Не знаю, почему: возможно я просил, подсмотрев у кого-то, или просто так, в общем, в нашей маленькой однокомнатной каморке поселился ещё и хомяк. Мне он не понравился: он был вонючий и несимпатичный. И я на второй же день его кому-то подарил, а родители меня потом этим укоряли.
А как-то раз в траве под окнами я нашёл воробья-слётка. Птенец пищал, мне стало его жалко, и я забрал его с собой. Как назло, было рабочее время, сверстники были в детском садике (я в этот ад не ходил), пацанва постарше - в школе, взрослых, соответственно, тоже не было. Я поигрался с воробьишкой, и он мне быстро надоел, ну я и засунул его за какую-то тумбочку, решив, что там он будет в сохранности. Позже, когда все вернулись, я собрал друзей и повёл их смотреть на воробья, но его там уже не было; все пожали плечами и разошлись, не вняв моим убеждениям в необходимости поисков.

А однажды мы обсуждали наших родителей (да, дети иногда так делают). Все говорили о том, как любят маму и папу; во мне, видимо, впервые взыграл нонконформизм, я возьми и скажи, что маму не люблю! А мама это услышала - и плакала потом, а мне было стыдно, и до сих пор стыдно.
Read more... )
pozitronik: (Sheridan)
Лето прошло, пора отпусков закончилась, и офис снова стал наполняться отдохнувшим и позагоревшим населением. Каждый отпускник обязательно считал необходимым привезти что-нибудь для коллег — больше, чтобы похвастать, нежели чтобы порадовать.
Менеджер Коля ездил в Испанию и привёз немалый кусок хамона.
Секретарша Маша отдыхала у родителей в Киеве и привезла настоящее украинское сало.
Начальник отдела Алексей отдыхал во Франции, и провёз целую голову великолепного сель-сюр-шер.

Особенно это было хорошо потому, что приехавший из тура по Италии руководитель проектов Сергей привёз несколько пузатых бутылок Кьянти Классико.
Коллектив еле дождался вечера и собрался в офисной столовой. Пришёл туда и программист Василий, который тоже как раз вернулся из отпуска, но, почему-то, на общий стол ничего не выложил. Но коллега всё же, не гнать же его, не ругать — по крайней мере, пока красное вино не развязало языки и не выпустило наружу придушенное галстуками красноречие.

Маленькая пирушка началась, как обычно это бывает, спокойно и чуть скованно. Люди тянулись вилками к интернациональным закускам, хвалили друг друга и делились впечатлениями от поездок. Понемногу скованность расступалась, и вскоре народ уже вовсю смеялся и шутил — только программист Василий одиноко сидел у холодильника, за угловым столиком, цедя вино из своей большой, покрытой несмываемым чайным налётом, программистской кружки.
Когда вино кончилось, и стажёра Сашу послали за гораздо менее изысканной добавкой в вино-водочный магазин, Василий поднялся со своего места.
— Коллеги — несколько сухо обратился он к веселящемуся народу. — Коллеги! — повторил он громче, когда увидел, что на первый его призыв никто не обратил внимания. Громкость возымела действие, народ отвлёкся от разговоров.
— Коллеги! — в третий раз, уже не повышая голоса, произнёс Василий — Я тут это... Знаете, я по заграницам не езжу, я на родине отдыхаю обычно. Но это не значит, что я не привёз никакого гостинца!
Тут он открыл дверь холодильника, вытащил коробку, прикрытую полотенцем, и водрузил её на стол. Коробка была невзрачная, обычная такая картонная коробка, скорее подходящая для обуви, нежели для чего-то съедобного — но когда Василий развернул полотенце и снял крышку, народ удивлённо ахнул.Заглянуть в коробку )

Всем хороших выходных!
pozitronik: (Sheridan)
Подобного рода посты регулярно возникают на лепре (о чём мы знаем благодаря куче крысокопипастеров). Но моя жежешечка не хуже всяких там лепр, тем более, что про одну из своих первых работ я уже писал (раз, два, три, четыре) и это одни из лучших постов в моём дневнике. Был и отдельный пост про работу вообще, тоже неплохой.
Но вот про то, как я сам впервые начал зарабатывать деньги, я не рассказывал. Расскажу, а вы подтягивайтесь в комменты, тем более, что всё равно сидите в душных офисах и читаете френдленту, а так хоть вид сделаете, что что-то пишете.

Как я собирал бутылки )
pozitronik: (Default)
13:58 27.03.2013
Пилим восьмибитный процессор. Часть седьмая, баголовная.
Я две недели не публиковал описаний прогресса разработки процессора.
Тем не менее, это не значит, что я им не занимаюсь - занимаюсь, хотя, пожалуй, уже без той остервенелой увлечённости, что в начале, плюс, отвлекаюсь на другие занятия, да ещё сидел без клавиатуры несколько дней. Но даже с учётом всего этого, две недели - срок вполне достаточный для накопления очередной порции интересных доработок.
Я так думал, да. Всего за пару дней я переделал микросхемы, определяющие тип операндов и их количество, переделал командный блок (переупорядочил команды, добавил новые), добавил новые регистры - и очевидных проблем при этом не проявлялось. Вылезали, конечно, кое-какие баги, не найденные раньше, но ничего серьёзного.
Так что я начал было заниматься командами перехода по памяти, которые сплошь однобайтные - и оказалось, что мой управляемый счётчик неправильно работает на операции, описываемой как for ($=0;$i==0;$i++) - то есть команды без операндов им не воспринимались, что вело к неправильному разбору всей дальнейшей памяти.
Окей, проблема локализована, надо только переделать счётчик...
Я потратил на это неделю.
Read more... )

read more at Журнал Великого Позитроника

pozitronik: (Sheridan)
14:39 13.03.2013
Пилим восьмибитный процессор. Часть шестая: улучшение архитектуры и снова ассемблер.
После вынужденного перерыва снова возвращаюсь к своей архиувлекательной разработке. Оставил я её в каком-то промежуточном состоянии: например, минимальный набор команд реализован, возможность менять значения в памяти есть - а перехода на нужный адрес нет (хотя всё необходимое для реализации такой команды есть, саму команду я не запилил).
Непорядок.
В общем, я достаточно долго думал и прикидывал, что делать дальше, и как лучше это что делать. Пришёл к следующему выводу: нужно менять структуру команд, пилить уже условные переходы и циклы. После этого - уже всё, настоящий хардкор.
Что плохо в текущих командах? Они были взяты от балды, и шли не в логическом порядке: скажем за логическим XOR шло арифметическое SUM, потом опять логический SHL. Добавь я сейчас команду SUB (вычитание) - её пришлось бы помещать вновь за логической командой, а не рядом с SUM, где ей самое место. Нет, если пользоваться ассемблером - то пофиг, в каком порядке идут опкоды, но при трейсе обработки команд с упорядоченными командами удобнее.
Дальше: команда NOP. Много ли можно придумать программ, где ничего не делающий операнд реально нужен? В крайнем случае для пропуска такта можно использовать MOV A,A.
Итого я пересмотрел набор команд, и выглядит теперь он так:

ОпкодКомандаОписание
0x0 MEM Переходы по памяти
0x1 MOV Пересылка значения
0x2 XOR Логическое ИЛИ-НЕ
0x3 OR Логическое ИЛИ
0x4 AND Логическое И
0x5 SHL Левое смещение
0x6 SHR Правое смещение
0x7 SUM Арифметическое сложение
0x8 SUB Арифметическое вычитание
0x9 MUL Арифметическое умножение
0xA DIV Арифметическое деление
0xB STACK Работа со стеком
Описание команд переходов и работы со стеком чуть ниже.
Как видите - изменился и набор и порядок. При этом пока четыре опкода остаются свободными - я даже не знаю, какие команды можно ими задать. Возможно, при расширении архитектуры появятся какие-то команды (например опкод, выводящий "Hello, world!", таким образом, делающий возможным написание такой программы размером в один байт).
Думаю, с опкодами 0x1 - 0xA вопросов не возникло. Другое дело - 0x0, обозначающий различные переходы по памяти. Как одной командой можно закодировать их все?
Тут стоит вспомнить, как переходы реализованы в x86. Самый простой, безусловный переход вызывается так:
JMP @ADDRESS
где ADDRESS указывает на адрес в памяти, на который нужно совершить переход.
Соответственно, команда в памяти представлена двумя последовательностями бит: одна кодирует команду JMP, другая шифрует адрес. Просто и логично.
Read more... )

read more at Журнал Великого Позитроника

pozitronik: (Sheridan)
10:19 04.03.2013
Пилим восьмибитный процессор. Часть четвёртая: подготовка ко взлёту.


Я, наконец-то, смог снова вернуться к своей разработке. Чувствую, что она "не отпустит" меня, пока не доведу дело до конца.
В этой части я расскажу о довольно значительных изменениях и доработках в схеме процессора. Их уровень уже таков, что процессор выполняет несложные программы; ещё немного - и надо будет писать ассемблер, большие программы в машинных кодах писать очень неудобно.

В прошлой записи я остановился на блоке регистров. Он вполне закончен, к нему возвращаться, пока что, нужды нет.
Следующим логичным шагом стала бы реализация стека. Сделать его оказалось не так уж сложно, но вот когда я попытался с ним работать, возникли затруднения.
Если помните, я решил организовать работу со стеком посредством обычных операндов, вместо того, чтобы использовать стандартные команды работы со стеком PUSH и POP. Такое решение приводило к следующей логике работы: ничего не мешало брать или помещать данные в стек, но изменять их оказалось сложно. Вместо одной операции (и, соответственно, одного такта) получалось три: взять значение, изменить значение, вернуть значение. Хотя текущая схема позволяет оптимизировать порядок исполнения (изменение может производиться одновременно со считыванием либо записью), всё равно это требовало какого-то механизма синхронизации, что было неудобно и усложняло схему.
После некоторых раздумий я отказался от идеи подобной работы со стеком, и решил реализовать классические PUSH и POP.
Это, конечно, лишило меня целых двух опкодов (на самом деле, я думаю обойтись одним), однако такое решение позволило внести упрощения в логику работы процессора и его подсхем. Например, теперь схема определения количества параметров команды OpC сократилась в разы (два десятка элементов против нескольких сотен ранее) - поскольку теперь у каждой команды одно и то же количество параметров независимо от их типа:
Read more... )




read more at Журнал Великого Позитроника

pozitronik: (Sheridan)
00:35 28.02.2013
Пилим восьмибитный процессор. Часть третья: ядро и блок регистров.
Эта часть будет очень короткой, не смотря на то, что должна бы, по идее, описывать самую сложную часть процессора. Дело в том, что как раз на проектировании ядра я остановился.

Что такое ядро, и чем оно должно заниматься? Чёткого ответа на оба вопроса нет, но обобщённо - это именно та часть схемы, которая занимается выполнением инструкций. Ему на вход подали команду - он отдал результат на выход.
Со входом на данный момент более-менее порядок: контроллер памяти успешно читает и парсит команды, подавая их на вход ядру. Что дальше?
Взглянем на набросок схемы, которым представлено текущее видение ядра:
Read more... )

read more at Журнал Великого Позитроника

pozitronik: (Sheridan)
19:29 26.02.2013
Пилим восьмибитный процессор. Часть вторая: разбор команд и управляемый счётчик.


Итак, у меня есть примерное представление о том, каким должен быть процессор, какие данные он будет получать на вход, какие данные будут у него на выходе, но довольно мало понимания того, как он устроен внутри. Классический чёрный ящик.
Но любой программист знает: для выполнения сложной задачи её нужно разбить на маленькие и решать по порядку. Забегая вперёд скажу: рисование логических схем - это то же программирование, только вместо участков кода используем логические преобразования, вот и всё.
Я начал с памяти. Её, как помнится, 2048 бит - 256 блоков по байту. В Logisim есть встроенный элемент "ОЗУ", в котором настраиваются как разрядность данных, так и разрядность адреса.

Да, пока не забыл: я не стал морочиться, реализуя всю логику на базовых элементах (которых, как вы знаете, если читали предыдущие посты, три - И/ИЛИ/НЕ). Та же ОЗУ (дальше я продолжу называть её проcто памятью, что не совсем верно технически, но зато привычно) состоит из регистров, каждый из которых имеет свой адрес (т.е. у меня 256 регистров). Регистры состоят из триггеров, каждый из которых хранит состояние одного бита (так что у меня - восемь триггеров в регистре). Каждый триггер, в зависимости от типа, можно реализовать различной логикой, например T-триггер реализуется восемью элементами ИЛИ-НЕ. Итого: 16 простейших элементов в триггере, восемь триггеров в регистре, 256 регистров - итого 32768 элементов! И не будем сейчас о том, что сами элементы эти тоже состоят из транзисторов, иначе это число возрастёт ещё на порядок.
В общем - не мучить себя и вас, использовать готовое. В конце концов, когда мы программируем, то не используем только базовые команды, а работаем и с функциями языка - ну так и тут то же самое.
Read more... )




read more at Журнал Великого Позитроника

pozitronik: (Sheridan)
19:25 25.02.2013
Пилим восьмибитный процессор. Часть первая: теория.
Вступление к посту.
Изначально я не хотел разбивать статью на несколько частей, ограничившись одним подробным постом только по окончанию работы. Но обстоятельства вынуждают меня переключиться на другую задачу, так что я решил просто сбросить сюда информацию о том, что уже сделано, иначе наверняка что-то забуду (это не учитывая того, что я УЖЕ забыл).
К тому же объём информации предполагается таким, что его всё равно лучше разбить на несколько частей.
Наслаждайтесь!

Немногим ранее я рассказал о том, как меня увлекло проектирование логических схем в программе Logisim. Потренировавшись на простых схемах, я решил разработать процессор. И чтобы всё по настоящему, с исполнением машинного кода и полнотой Тьюринга.
Для тех, кто не в теме - краткий ликбез. Процессор в электронике - устройство, которому на вход подаются команды и, иногда, их параметры (как правило, закодированные последовательностью битов), на выходе получаются результаты выполнения этих команд над этими данными. Пример простейшего процессора - схема, выполняющая инкремент/декремент поданного на вход значения в зависимости от наличия сигнала на другом входе.
Полнота Тьюринга - свойство исполнителя (т.е. того же процессора) вычислять результат абсолютно любой вычислимой функции. То есть даже простейший тьюринг-полный процессор (если ему предоставить ресурс в виде бесконечной памяти) способен посчитать всё не хуже каких-нибудь пентиумов - только, скорее всего, программа будет сложнее, а исполнение займёт больше шагов. Пример того самого тьюринг-полного процессора - машина Тьюринга, придуманная знаменитым английским пидорасом великим английским математиком Аланом Тьюрингом; дабы не сверзиться в пучину всяких теорий вычислимости отправлю вас в Википедию. Впрочем, если вы пропустите этот момент - ничего страшного не случится, надеюсь - я обещаю писать так, чтобы понятно было даже человеку, далёкому от IT (но людям, знакомым с информатикой понять будет легче).

Началу проектирования в Logisim предшествовали обширные прикидки логики на бумаге. Нужно было решить следующие вопросы:
- Разрядность процессора.
- Набор команд.
- Архитектура.
- Порядок следования данных (big-endian или little-endian).
- и ещё куча всего, что просто не приходило сразу в голову.

Сначала я хотел делать четырёхбитный процессор, который, в принципе, покрывал бы ту же машину Тюринга: ну а то, четырёх бит достаточно для операций из 16 команд над алфавитом в 15 символов + 0!
Но я хотел сделать не простенькую игрушку, а что-то, работающее с архитектурой фон Неймана.

И снова ликбез.
Большинство современных компьютеров реализуют именно архитектуру фон Неймана. В ней программа (набор команд) хранится там же, где и данные, которые программа (вернее, процессор, эту команду исполняющий) обрабатывает. То есть программа сама должна определять, где у неё код, а где - данные, и что из этого и в каком виде надо скармливать процессору. Эта архитектура гибкая (например, программа может сама менять свой код) и просто реализуемая, но, при этом, подвержена ошибкам, вроде переполнения буфера (одна программа бесконтрольно пишет много данных, они не умещаются в отведённый участок памяти, залезают в код другой программы, которая, при выполнении вылетает - или запускает чужой код).
А есть ещё Гарвардская архитектура, в ней код и данные хранятся раздельно. Представьте, что у вас в компе две отдельных устройства ОЗУ, которые друг с другом не взаимодействуют и не пересекаются. И когда программа запускается, её исполняемый код грузится в одно устройство, а данные, с которыми она работает - в другую. Там уже никаких переполнений буфера (по крайней мере, они не должны быть так тривиальны, как в фон Неймане), да и исполнение происходит быстрее (процессору не нужно ждать данных, следующих за инструкцией, они всегда доступны на одном из устройств) - но с гибкостью там никак, да и по реализации она сложнее в несколько раз, в зависимости от подхода. Тем не менее, эта архитектура используется во встраиваемых устройствах, где скорость и надёжность важны, а гибкость - нет.

Реализовать четырёхбитный процессор с архитектурой фон Неймана, конечно, можно. Но возникает слишком уж много ограничений.
Например, если принять, что размер команды равен размеру данных (т.е. тем же четырём битам), то получаем ограничение в 16 инструкций, из которых только минимальный набор инструкций для работы с памятью займёт половину. Затем, процессор должен определить, что обозначают данные, которые ему передали. Константу? Номер регистра? Адрес в памяти? То есть после команды ещё должно быть что-то вроде маркера типа данных - а это ещё по два бита на параметр. И, наконец, четыре бита ограничивают максимально адресуемую память всего 64 байтами (16 адресов по 4 бита).
Всё это решаемо. Можно, например, разграничить размер машинного слова: командное слово считать равным восьми битам, а команды брать четырёхбитные. И адреса тоже брать не четырёхбитные, а восьмибитные. И ещё маркеры типов данных куда-нить пристроить... И дрючиться, высчитывая смещения в памяти, вместо работы с аккуратными идентичными последовательностями.
Но почему бы сразу не сделать восемь бит, благо в Logisim разрядность элементов переключается на лету? На сём и остановился.
Кстати, первый процессор от Intel 4004, хоть и был четырёхбитным, мог адресовать 640 байт памяти, а команд в нём было аж 46. Впрочем, это достигалось тем, что он, как раз, был построен по Гарвардской архитектуре - там с этим проще.

С набором команд тоже пришлось подумать. Делать много команд - усложнять разработку процессора, делать мало команд - усложнять разработку под процессор. Так что я исходил из того, что нужно реализовать самые основные, а потом, по мере необходимости, добавлять остальные.
Затем я посмотрел, с чем будут работать команды. Что будет в моём процессоре:
- Восемь восьмибитных регистров, от A до H (один из которых флаговый, один - адресный, остальные пока решено сделать регистрами общего назначения).
- Память (восьмибитный процессор адресует 256 адресов по восемь бит - итого аж два килобайта).
- Отдельный стек (об этом ниже).
- Ну и просто числа (константы).
Изначально - четыре типа данных, на перечисление которых нужно два бита. Если у каждой команды по два параметра (например, MOV A,B), то получается, что нужно засунуть набор "команда"+4 бита в пространство, кратное восьми битам. Брать шестнадцать бит - несколько избыточно, восемь - как-то маловато (четыре бита на команду - не от этого ли я хотел убежать?).
Но, тем не менее, я выбрал именно восьмибитный размер опкода. Я рассудил так: вряд ли меня хватит для реализации более чем 16 полноценных команд. А если хватит - расширить размер опкода можно будет без проблем.

Для начала я решил сделать шесть основных команд. Ниже приведена таблица, описывающая набор инструкций и типы данных, с которыми они работают:

Код (hex)


Мнемоника


Действие и параметры


0x0


NOP


Пропуск такта.


0x1


MOV


Копирование (не перемещение!) значения в приёмник.

MOV [R|S|M],[R|S|M|V]


0x2


XOR


Побитовый XOR значений. Результат помещается в приёмник.

XOR [R|S|M],[R|S|M|V]


0x3


SUM


Суммирование значений. Результат помещается в приёмник.

SUM [R|S|M],[R|S|M|V]


0x4


SHL


Левое смещение приёмника на указанное количество позиций.

SHL [R|S|M],[R|S|M|V]


0x5


SHR


Правое смещение приёмника на указанное количество позиций.

SHL [R|S|M],[R|S|M|V]

Обозначения: R – регистр (значение указанного регистра), M – память (значение по указанному адресу), V – значение (константа), S – стек (если указан в качестве приёмника – добавление в стек, в качестве отправителя – изъятие из стека).

Оставшиеся десять команд запланированы под условные переходы и остальную математику.
Да, типы данных пронумерованы просто: 00 - константа, 01 - регистр, 10 - стек, 11 - память.
Возьмём байт, скупо отведённый на команду, верхние четыре бита в нём считаем кодом команды, пятый и шестой бит - типом первого операнда, седьмой и восьмой бит - типом второго операнда.
Например, опкод команды MOV, пересылающей данные из регистра в память будет выглядеть так: 00011101. Та же команда, заносящая значение в регистр будет выглядеть как 00010100, а команда левого сдвига верхушки стека на заданное число - 01001000.

Кстати, о стеке. Он у меня необычный по двум причинам (чтобы понять необычность которых, нужно всё-таки знать, что такое стек).
Первая: я не стал реализовывать стек в основной памяти. Её и так мало (два килобайта, напомню), да плюс на адресацию стека нужно выделять, как минимум, один регистр. При этом совершенно ничего не мешает добавить в нашу схему ещё два килобайта памяти, и использовать под стек уже её (да, это отход от фон Неймана, да...). Это даже не ограничивает многозадачность, ежели таковую когда-нибудь придётся реализовать на этом процессоре, - стековую память точно так же можно поделить на участки по количеству исполняемых программ.
Вторая: у меня нет привычных по ассемблеру для x86 команд PUSH и POP (или аналогичных им). Во-первых, выделять ажно две отдельные команды из имеющегося лимита ой, как не хотелось. Во-вторых, ещё при изучении ассемблера, мне было интересно - а почему бы не сделать именно так? В итоге, команда MOV S,[V|R|M] должна работать аналогично PUSH [V|R|M], а MOV [R|M],S - аналогично POP. Команда MOV S,S хоть и не запрещена, но никакого действия не выполнит (при этом она не будет равна NOP по количеству тактов).

Итого, в результате у меня набралось данных на вполне себе ассемблер для моего ещё не созданного процессора. Ниже приведу примеры команд и трансляцию их в шеснадцатеричный и двоичные коды:
MOV [1Ah],10h (записать число в память)-> 0x1C 0x1A 0x10 -> 00011100 00011010 00010000
SUM B,C (прибавить к значению регистра B значение регистра С) -> 0x35 0x01 0x02 -> 00110101 00000001 00000010
XOR S,S (обнулить значение на верхушке стека) -> 0x2A -> 00101010 (параметров у команды нет, то, что работа проводится со стеком, процессор должен понимать из опкода).
и т.д.

И последнее, что осталось - определить и формализовать алгоритм работы процессора. У меня в первом приближении получилось вот что:
1. Считать байт по адресу, на который указывает адресный регистр (adr), в буфер команды, инкрементировав adr.
2. Определить количество параметров команды = pcount.
3. Инкрементируя значение адресного регистра, считывать параметры в соответствующие буфера (n_param в n_buffer) pcount раз.
4. Выполнить команду.
5. Вернуться к шагу 1.

Конечно шаг №4 - это ещё один внутренний алгоритм, который у меня пока ещё не до конца формализован. Причина в том, что при непосредственной реализации схемы по "плавающему" алгоритму ("а, мля, как получится - так и хрен с ним") возникает множество интересных решений и находок, никогда не получившихся бы, следуй я заранее написанному плану.

С теорией, по большей части - всё.

Конец первой части. В следующей - практика: опишу создание парсера команд, контроллера памяти, блока регистров и управляемого цикла.
Продолжение следует.

read more at Журнал Великого Позитроника

pozitronik: (Sheridan)
Дениска Корольков по утрам поднимался с большим трудом. Еле-еле шевелясь, он умывался, полусонно завтракал, и, кое-как натянув одежду, выходил из избы на улицу.
Зато зимний утренний морозец подбадривал — не стой, а то закоченеешь! — и к школе Дениска добегал уже почти проснувшимся. Втиснувшись в толпу таких же полусонных школяров, он привычно крестился на огромную икону Великомученика Пафнутия, назначенного небесным покровителем их школы. Пафнутий, судя по постному выражению лица, особых возражений против назначения не имел, и уже который год безучастно встречал школяров двумя перстами, поднятыми в благословляющем жесте.
Затем визжащая и вопящая толпа несла Дениску вперёд, в раздевалку, откуда, дробясь на всё меньшие потоки, тащила по коридорам и поднимала по лестницам, занося, наконец, прямо в класс. Там Дениска садился за парту и доставал из портфеля учебники, тетрадки и молитвослов.
— Денька, ты домашку сделал? — спросил Федя, с которым Дениска сидел за одной партой с первого класса.
— Ага. А чего там делать-то — пара пустяков! Задачки — легкота, да и псалмы короткие, легко учить.
— Вот блин горелый, — почему-то огорчился Федька, — ко мне вчера старший брат из монастыря на побывку приехал, мы с ним ходили в храм Акакия Блаженного, к мощам приложиться. А там знаешь, какая очередь! Домой только вечером вернулись, а дома свечки кончились...
— Да ладно, Федь, не переживай. Задачки у меня спишешь, а стихи Фофан не спросит. А если спросит — расскажешь ему про брата, Фофан по такому разу не будет тебе наказание выписывать.
— А ведь верно! — повеселел Федя. — Спасибо, Денчик!
Тут зазвонил школьный колокол, оповещая галдящих школяров о начале занятий. Все тут же уселись по местам, и в воцарившуюся тишину вплыл пузатый отец Феофан, которого школьники меж собой звали не иначе как Фофаном.
Феофан протиснул живот за учительский стол и оглядел класс.
— Доброго утра, отроки — поздоровался он.
— Доброго утра, батюшка! — ответствовали школяры.
— Все ли явились сегодня?
— Все, батюшка! — звонко ответил Мишка-отличник с первой парты, самовольно назначивший себя кем-то вроде старосты.
— Ну и слава Богу! Давайте молиться, отроки, со страницы восемнадцать.
Дальше )
pozitronik: (Sheridan)
14:36 25.01.2013
Квартирный вопрос
О чём может мечтать холостой провинциал, не имеющий ни постоянного жилья, ни нормальной работы, ни достойного образования? О чуде, которое моментально исправит хотя бы половину перечисленных неприятностей. Например — о внезапно появившейся московской супруге, которая тут же устроит его старшим протирателем штанов в собственную фирму, заодно поселив на своей жилплощади. Можно даже не в особняк на Рублёвке, достаточно пятикомнатной квартиры в шаговой доступности от метрополитена — Жорик Семка был бы рад и тому. По правде сказать, он был бы рад и куда меньшей халяве — но мечтать, как говорится, не вредно.
Вот Жорик и мечтал, выходя на всю мощность мечтательного аппарата где-то ко второй баклажке химического пойла, которое по явному недоразумению выдавалось за пиво. Полёту фантазии помогал телевизор, оптимистично рассказывающий о том, как с каждым днём жить простому российскому гражданину становится всё лучше и лучше.
— Знаменитый актёр Жерар Депардье принял из рук президента российский паспорт, а власти Мордовии подарили новоиспечённому россиянину квартиру в одной из новостроек Саранска — с неизменной улыбкой сообщала ведущая новостей.
— И мы все знаем имя этого гражданина! — вспомнил Жора бородатый анекдот, выключая телевизор. Чёрт, он бы тоже не отказался от жилья в Саранске... а где это вообще? Где-то на Волге, кажется? Волга... Жорик слышал от родителей, что их семья корнями тоже откуда-то с волжских деревень, но где была та деревня хотя бы приблизительно — не знал. Мама о своей деревенской жизни рассказывать не любила — судя по подслушанному однажды разговору, вышла у неё какая-то серьёзная размолвка со своей матерью, жориной бабкой. А спросить сейчас — уже не у кого, разве что съездить на кладбище, к могилке маминой. А ведь давно не ездил, ох, давно...
— Жерар, млять... — обозлённо рявкнул Жора на выключенный телевизор, стараясь отвлечься от нежданного укора совести. — Я тоже почти Жерар! Путину напишу, пусть мне тоже квартиру даст! Или, лучше, позвоню — должен же у него телефон быть...
Тут, как по совпадению, из телефона, брошенного Жориком заряжаться на тумбочку, завопил поставленный на входящие вызовы "Гангнам стайл!".Читать дальше )

read more at Журнал Великого Позитроника

pozitronik: (Sheridan)

Снова олдфажная пикча для привлечения внимания.


Третий пункт нашей космической программы - сборка и запуск аналога "Союза", а также отработка парных полётов и стыковка (создание экспериментальной космической станции). Как водится - в начале небольшая историко-техническая справка:
Космический корабль "Союз" создавался под конкретную задачу: доставка космонавтов на Луну. Однако попутно прорабатывались решения для создания на его основе военных кораблей, а позже, с вводом в строй космических станций, на основе "Союза" был создан корабль снабжения "Прогресс".
Read more... )
Что дальше? Постройка орбитальных станций? Полёт к Муне по так и не завершившейся программе? Или и то и другое? Посмотрим.
Продолжение следует.
pozitronik: (Sheridan)

Ещё одна олдфажная пикча для привлечения внимания.


Ещё не отгремели праздничные гуляния по поводу запуска первого спутника, а генеральный конструктор кербальской космической программы (это вы) уже отдал приказ о запуске первого кербонавта. Уже известно имя будущего кербонавта - им станет бесстрашный лётчик-испытатель Джебедайя Керман, любимец женщин и детворы.
Много текста и картинок )
pozitronik: (Sheridan)

Олдфажная пикча для привлечения внимания.


Полтора года назад я рассказывал о замечательной игрушке Kerbal Space Program - ещё до того, как играть в неё стало мейнстримом. Настало время вовлечь в этот мейнстрим тех, кто по каким-то причинам прошёл мимо, благо игра всё это время активно развивалась, и к данному моменту стала представлять собой довольно продвинутый конструктор с минимумом недостатков, способный обеспечить море фана.
Последняя актуальная на данный момент версия игры - 0.18.2. В ней есть куча планет (многие из которых - со спутниками) и небесных тел, вроде астероидов, множество разнотипных модулей для создания носителей и кораблей (в том числе - атмосферных и не летающих), и (ура-ура!) стыковка. А также - неисчислимое количество модулей и плагинов, реализующих практически все возможные идеи, начиная от ионных двигателей, заканчивая орбитальными верфями для постройки звёздных разрушителей. Теоретически, уже в текущей версии вполне можно собрать Вавилон-5 и отыгрывать экспедиции на Эпсилон-3.
Но это позже.

В первой части обзора начнём с азов. Я попробую повторить первые шаги советской космической программы - и показать их. Условимся, что использоваться будут только стандартные части, входящие в поставку игры, поэтому отыгрыш будет лишь приближен к реальности. Естественно, со сторонними модулями отыграть можно всё, вплоть до внешнего вида кораблей и ракет - но это как-нибудь потом.
Итак, отыгрываем промежуток 1957 - 1967. Основные события: первый спутник, первый космонавт, первый выход в открытый космос и "Союз". Первую стыковку, совершённую американцами, и первую часть программы "Луна" мы отложим до следующего раза. Промежуточные же этапы, вроде собак в космосе и парных полётов, опустим, как малоинтересные.
Много текста и картинок )
pozitronik: (Sheridan)
Я не очень помню, как относился в детстве к новогодним праздникам. И сами праздники тоже не очень помню; впрочем, если покопаться в воспоминаниях, всегда что-то можно выудить.
Например, одно из первых новогодних воспоминаний - кухня у бабушки, где я сидел у окна, дожидаясь полуночи. До 91 года наша семья жила в однокомнатной общажной квартирке, где едва помещался родительский диван, кроватка брата и моя раскладушка (на самом деле мне нравилось спать на раскладушке), потому на все праздники собирались в квартире у бабушки с дедушкой. Сейчас эта квартирка мне кажется маленькой и тесной, но тогда она представлялась офигенным двухкомнатным дворцом с раздельным санузлом (я предпочитал считать, что кухня - это тоже комната, так что называл квартиру трёхкомнатной).
К полуночи, само собой, я уже здорово клевал носом, но спать не шёл принципиально - было всё-таки какое-то ожидание чуда, непременно и обязательно запланированного на полночь. Батя, помнится, велел мне тогда смотреть на свои наручные часы - механические, но с окошечком для календарной даты. Ему хотелось, чтобы я увидел, как в этом окошечке сменится цифра - и я, конечно же, этого не заметил. Батя, почему-то, очень обиделся, услышав об этом. Наверное он тоже ждал какого-то чуда.
Возможно, что тогда мне дарили какие-то подарки. Я этого не помню.
Потом мы переехали из общаги в настоящую трёхкомнатную квартиру с раздельным санузлом и огромной лоджией. Но кухню я по-прежнему считал отдельной комнатой - так что для меня квартира была четырёхкомнатной.
На новый год в квартире обязательно была ёлка и гирлянды. Гирлянды отвратительные, советские, с толстенными проводами и лампочками, подкрашенными йодом и зелёнкой - и, тем не менее, какие-то домашние и уютные. Я очень любил лежать на диване и смотреть на эти гирлянды. Или на искровичок (такой аналоговый прерыватель, заставляющий лампочки мигать, видимо сорт конденсатора), внутри которого то и дело пробегал разряд. В ёлке же я ничего особенного не находил, мне было скорее жалко дерево. После переезда я совсем укрепился во мнении о глупости ёлочной традиции - новый дом стоял около леса, и мне казалась странной идея о том, что ёлку обязательно нужно тащить в дом, вместо того, чтобы самому сходить к ёлкам.
Но так, как я, рассуждали далеко не все. Каждый год в конце декабря количество деревьев под окнами неумолимо уменьшалось. Сволочи (а по другому я их назвать не то, что не могу, но и не имею права) рубили самые красивые и пушистые ёлочки; в результате за несколько лет из отличного лесочка, где вполне себе росли маслята и земляника, получился набор пеньков с редкими кривыми деревцами, на которые никто просто не позарился.
Батя, когда мог, дежурил у окна, и услышав подозрительные звуки с топором наперевес шёл спасать природу. От вырубки это помогало слабо (батя один, а сволочей вон сколько), зато домой он, как правило, приносил окровавленный топор и новый скальп для коллекции отнятую у браконьера ёлку.
Тогда на многих государственных предприятиях (а других пока ещё и не было) существовала практика, по которой к детям рабочих ходили деды морозы со снегурочками. Очень, помню, меня смутил момент, когда пришедший дед мороз оказался женского пола, что не особенно скрывала накладная борода. От смущения я решил вести себя безразлично, и на вручённый подарок отреагировал сдержанно. "Как ты думаешь, мальчик, что это такое?" - пытаясь басить, спросила баба-дед мороз, вручая мне странную, не похожую ни на что виденное раньше, фигню. "Не знаю, на платок носовой похоже" - с деланным безразличием ответил я.
Позже игрушка оказалась парашютом с парашютистом, которого нужно было запускать вверх рогаткой. Естественно, стропы парашютика тут же завязались в узлы, которые распутать не смог ни я, ни родители. В результате, игрушка так и осталась непоигранной, и вскоре куда-то затерялась.
За что спасибо родителям - это за то, что в любой новый год, даже в самый бедный (а в начале 90-х других не было, пожалуй), для нас с братом всегда были новогодние угощения. Игрушки - вот правда, не помню, были или нет, но я никогда не придавал этому значения. А вот конфет и других сладостей всегда ждал, и они всегда были.
Году в 91 или 92, когда сладкого не было почти совсем, мой истомившийся детский организм ждал этих новогодних вкусностей особенно. И когда на столе появились они, невиданные мной раньше удивительной красоты упаковки явно иностранного производства, я понял, то сейчас будет самый вкусный момент в моей жизни. И услышанные краем уха слова "французская гуманитарная помощь" не смутили меня.
Содержимое упаковок было чудесным! Странного, непривычного (но аппетитного!) вида пастилки, полупрозрачные мармеладки, конфеты какие-то и фантастическая банка сублимированного какао! Ох, как же здорово всё это выглядело!..
...И каким же говном оказалось на вкус! У пастилы был резкий, разъедающий язык, вкус чернил. Мармелад был просто вонючим и, хотя и сладким, но с привкусом какой-то блевотины, к тому же - совершенно не жующийся; он забивался между зубов, и, казалось, тут же начинал гнить...
В шоке от несоответствия содержимого и упаковки я находился, наверное, до следующего нового года. А уж тогда излюбленные "красные шапочки" и "ирис кис-кис" вернули меня к нормальной жизни. С тех пор я не люблю Францию. Франция, сдохни!
Единственное, что в том наборе оказалось вкусным - так это какао. Его полагалось растворять в молоке, или, на худой конец, в воде - но, конечно же, большую часть банки мы с братом съели так. Секрет вкуса открылся позже, когда я нашёл банку, и прочитал на ней "произведено в Германии".
К середине девяностых положение со сладостями в стране нормализовалось. Батя приносил с работы положенный детям набор, мама приносила с работы другой набор, бабушка приносила два набора, потому что это бабушка. Дед, обычно, приносил бутылку.
И тогда-то, после получения всех этих изрисованных дедами морозами, ёлками и зайчиками коробок, начиналась долгая прелюдия к пиршеству. Я ссыпал все сладости в одну кучу и принимался их сортировать. Шоколадные конфеты делились мной на высший сорт (шоколад снаружи, внутри тоже шоколад или вафля, или другая годная начинака) и несъедобные (с какой-нибудь помадной начинкой, вроде "радия". Это же каким психом должен был быть кондитер, дающий конфетам название смертельно опасного радиоактивного элемента!). Такой же сортировке подвергалась карамель, а ириски я любил все.
В итоге всё вкусное ссыпалось обратно в коробки и пряталось, а то, что считалось несъедобным, я с видом великомученика ("вот, самое дорогое от сердца отрываю!") отдавал родителям. Потом эти невкусные конфеты могли натурально годами лежать в шкафу; популярностью они пользовались разве что у деда, который всегда пил чай вприкуску с карамелькой. Но одной карамельки ему, почему-то, хватало на два-три дня (я не шучу), так что стратегический запас конфет в доме имелся всегда.
Нет, не нужно думать, что я был жадиной или обжорой. Спрятанные конфеты грели мне сердце самим фактом своего существования. Я заключал договор с собой, что буду в день есть не больше одной шоколадной - и строго этот договор блюл; таким образом сладкого мне вполне хватало на несколько месяцев. Ириски и карамельки под условия договора, конечно же, не попадали. К тому же я всегда готов был проявить щедрость и поделиться с родными - если они, конечно, надлежащим образом меня об этом попросят.
Такая честность однажды обошлась моей нежной детской психике очень дорого. Братишка, которому, как не трудно догадаться, доставалась ровно такая же доля сладостей, ни в какие договора с собой не вступал. Однажды, заметив, что я продолжаю есть конфеты тогда, когда у него они уже давно закончились, он наябедничал об этом бате. Кажется, он сказал, что я у него отобрал конфеты, или что-то такое.
Родительская инспекция моих схронов показала: действительно, конфет у меня ещё очень много. Вывод - отнял у брата. Меня отругали и отобрали всё, несмотря на мои слёзы и объяснения.
Это было невероятно обидно. Наверное, именно после этого случая новогодние праздники потеряли для меня всякую привлекательность.
Совсем обычными и даже страшными эти праздники стали после нескольких предновогодних смертей: однажды прямо 31 декабря умер сосед, с которым отец дружил на почве землячества. Праздник, естественно, свинтился, а батя повёз покойного в родную деревню, помогать с похоронами и всем, чем требуется. Вернулся оттуда через несколько дней подавленный - старушка-мама, увидев мёртвого сына, сама тут же отбросила коньки, пришлось устраивать двойные похороны.
Потом под новый год умерла бабушка. Это был не какой-то там сосед, это была бабушка, родная и любимая. Какой уж тут новый год.

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

А пока вы в комментариях рассказывайте свои новогодние истории. Не обязательно грустные, не обязательно весёлые. Просто рассказывайте.
pozitronik: (фирестарта)
Маша лежала в кровати, прислушиваясь к шуму за стенкой. В соседней комнате всё никак не ложились спать родители — ворочались, скрипели кроватью, о чём-то шептались. Наконец, всякий шум стих, а через некоторое время до Маши донёсся папин храп.
Девочка осторожно встала с кровати, достала из-под подушки телефон, посмотрела на часы и принялась одеваться. Всю одежду она заранее перенесла в свой шкаф, чтобы не шуметь в прихожей.
Через несколько минут она, одетая по морозной декабрьской погоде, уже вышла из подъезда своей многоэтажки, подсвечивая дорогу экраном телефона. Все тропинки за день снова завалило снегом, вот уже какую неделю беспрерывно валящим на город, и Маше приходилось ступать медленно, пытаясь угадать дорогу и не оступиться, завязнув в глубоком, почти ей по пояс, слое снега.
Телефон в руке завибрировал. Маша нажала кнопку и заснула аппарат под шапку, прижав холодную пластмассу к уху.
— Машка, ты где? — Без всякого приветствия прозвучал знакомый голос в трубке.
— Иду уже. Ты достал?
— Да. Давай быстрее, я замерзаю уже.
Обогнув дом, Маша вышла на освещённую фонарями улицу, и увидела топчущегося вокруг фонарного столба Лёшу, своего соседа и одноклассника.
— Ты чего? — Спросила она, подойдя к Лёше.
— Холодно... — Жалобно заныл Лёша. — Спать хочется... Может ну его?
— Ничего не "ну", — строго отрезала Маша, — раз решили — надо делать! Петуха покажи.
Read more... )
pozitronik: (Default)
Как и обещал, рассказываю о стартапе, которым сейчас занимаюсь. Справедливости ради замечу, что под замком я уже показывал очень сырую альфу, но сейчас - это то, что можно показывать ширкой публике, по крайней мере - с технической стороны.
Итак: http://banionline.ru. Большой, подробный и удобный каталог бань города Самары. Он реально клёвый, даже если вы не из Самары и ненавидите бани - посмотрите, как у нас всё по человечески сделано, и как быстро работает.

Поскольку я занимался всей технической частью проекта, то и расскажу о том, как, что и почему делается и делалось.
Читать дальше )

December 2016

S M T W T F S
    123
45678910
1112131415 1617
18192021222324
25262728293031

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 7th, 2025 07:33 am
Powered by Dreamwidth Studios