IzhNews #05
09 мая 2000

Nonsense in BASIC - программиррование калькулятора Citizen SPR-145.

  /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
 /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒\
 \▒▒▒▒▒ -= Nonsense in BASIC =- ▒▒▒▒▒▒▒▒/
 /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒\
 \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/

(c) PIXel/BrC
__________________________________________

    Zдравствуйте  дорогие  мои  почитатели
нашей газетенки. Слово  держит  постоянный
ведущий этой рубрики - Р!Хе1  (ну влом мне
переключаться в русский). Сегодня мы снова
будем (мы это я и еще тот  кому  не  влом)
писать программы и, как видно из  названия
рубрики, не на BASIC'е.

             CITIZEN SRP-145.

    Да,    да    дорогие     мои     будем
програмировать  калькулятор.  Как   всякий
программер, я когда увидел в инструкции  к
калькулью  слово  "програмируеммый"  сразу
решил что надо его запрограмировать.

             ПРОГРАММИРОВАНИЕ
  Сохранение произведенных  математических
операций в памяти калькулятора.

    С помошью данного  калькулятора  можно
сохранить одну  последовательность  вычис-
лений, содержащую  не более  40-ка  шагов.
Эти  "шаги"  могут  быть  либо  собственно
шагами,  как,   например,   математические
функции,     либо  значениями   (например,
числами). Каждая функция считается за один
шаг . Запоминается  программа  даже   если
затем    калькулятор     выключают.    При
вычислениях можно пользоваться  более  чем
одной переменной.
    Данный  калькулятор  запоминает  мате-
матические операции или программы в режиме
Program(PGM) Mode....
    Все!   Запарило    меня     инструкцию
переписывать.  Если   не   потеряли   сами
прочитаете. А я  щаз  раскажу  вам  нудную
историю как я его запрограмил.
    Сижу значит, делать нечего, ну я  взял
калькуль и порешил написать для него  прог
который считает корни  квадратного  такого
уравнения и  все  такое   прочее. Из   той
самой инструкции  узнал  что  мне  на  все
про все отводят  40  шагов. Ну  для  такой
простий  задачи   этого   хватит   вполне,
подумаете вы, я тоже сперва так подумал  и
начал  програмить. Для   начала   вспомним
формулу  по  которой   эти   самые   корни
искаются: __________          __________
      -b+√ b¤-4∙a∙c       -b-√ b¤-4∙a∙c
  x1= ──────────────  x2= ────────────────
          2∙a                 2∙a
Пожалуй опущу повесть о то как это все  не
влезло   в   40   шагов,  ка   оно   потом
оптимизировалось  до  нужной   цыфры,  как
оно, влезшее в 40 шагов не раборало и  как
я заоптимизилось  до  такого  размера  что
срало работать, а лишь опишу окончательный
ответ:
    Дави вот что:
  [on/c]           включили
  [1]              a=1
  [shift][Ka]      ввели значение a в RAM
  [2]              b=2
  [shift][Kb]      -------//----- b --/--
  [3]              c=3
  [x->m]           -------//----- c --/--
  [on/c]
Теперь собсвенно сама прога:
  [shift][pgm]     Program Mode
  [Kb][x2][-][4]
  [x][Ka][x][MR]   b2-4ac
  [v]              корень из дискриминанта
  [Ў][2][Ў][Ka]    деленный на 2a
  [=]
  [x->m]           ложим вместо  с  (оно
                         больше не нужно)
  [-][Kb]
  [Ў][2][Ў][Ka]
  [=]              вот  и  он  -  первый
                   корень.
  [halt]           засветим на скрин.
  [-][MR]          востановили (b2-4ac)/2a
  [-][MR][=]       второй корешок
  [halt]           тоже засветим.
  [shift][pgm]     выход
  [run]            видим первый корень
  [run]            --/-- второй --/--.
Теперь ты гордый  своей  крутизной  несешь
калькуль и показываешь своим  друзьям  это
чудо...

             Колорная мазня.

    Ну и назвние. Ну да ладно. Кароче  то,
о чем сейчас пойдет речь вы можете увидеть
нажав на педаль <V>. Нажали? если  кому-то
еще интерсно,то читайте далее.
    В одной демке я увидел колорные  чанки
и решил что мне тоже по силам сделать что-
либо  подобное. Сразу   предупреждаю   что
исходников   сегодня   не   будет.   Особо
любопытные могут конечно поломать листалку
и вудернуть его(исходник) оттуда, но сразу
предупреждаю что сделан эффект по принципу
поет   и   ладно   без   всяких    попыток
оптимизации и т.п.
    Основной   цикл   выглядит   следующим
образом:
    1. изменение буфера.
    2. печать буфера.
    3. прыг на 1 если не надавили ничего.
Точно также выглядит головной  цикл  огня,
но об этом в другой раз.
    Буфер   содержит   байты   описывающие
каждое знакоместо экрана, и  выглядят  они
следующим образом:
    %хрррcccc
     │└┼┘└┴┴┴──> номер чанка (0Ў15)
     │ └───────> папер(инк на 1 болше)
     └─────────> я не использую.
    Моя прцедура  изменения  буфера  тоько
увеличивает каждое значение на 1 (inc).
    Процедура печати использует  процедуру
печати  символа  (чанк-то  8х8). Инк   как
сказано  выше  на  1  больше  папера.  Для
процедуры  (моей) требуется  фонт  из   16
символов от пустого до заполненного чанка.
    Ну вот основную идею вытолкнул  теперь
все кто вЪехал могу это  сделать. Прошу  у
всех кого обломал прощения  за  отсутствие
исходников (стыдно было за такой код). Еще
навено не очень приятно читать мой маразм,
ну не могу я лучше, а писать хочется, хотя
я никого не заставляю читать. А  писать  я
буду  и  дальше  т.  к.  никто   пока   не
выссказал своего мнения (отрицательного) о
моей писанине. Также  хочу  напомнить  что
все статьи расчитаны на начинающего кодера
(вроде  меня) и  посему  обвинять  меня  в
ламерстве  не  стоит  а   то...  огого....
и..... в..... штоб  больше   не....  иначе
ему.... <censored>.....
    SBC  HL,HL
    PUSH HL
    RET
>Assemble
>Run




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Авторы - Авторы журнала и контакты редакции.
Железо - доработки Скорпиона: схема отключения музпроцессора.
Ликбез - полное описание и полный дизассемблер ПЗУ (часть 7).

В этот день...   19 сентября