X84 что это

Содержание

X84 что это

It may be used for developing a classic bulletin board system (BBS) – one is provided as the ‘default’ scripting layer. It may also be used to develop a MUD, a text-based game, or a game-hosting server such as done by dgamelaunch.

TI-84+

Обнаружив в моей очередной контрольной энное количество вычислительных ошибок, учитель физики сказал несколько максимально вежливых фраз, которые в вольном переводе на живой великорусский язык звучали бы так:

Чтоб в следующий раз был нормальный графический калькулятор!

  • Легендарный Zilog Z80,
  • 24 Кб RAM и 480 Кб Flash доступной пользователю,
  • Куча полезных (и не очень) программ, написанных энтузиастами.

Умеет кучу полезных математических штук, но интереснее с точки зрения Хабра его программируемость.

Программирование

Программировать TI-84+ «из коробки» можно либо на TI BASIC, либо в машинных кодах. TI BASIC — диалект BASICa. Это «структурный», а не «макаронный» диалект. Вместо ключевых слов — токены (по-моему что-то такое было в Спекртумах). Оптимизирован для математических операций, для игр и других приложений подходит так себе, хотя конечно, умеючи можно написать что угодно.

Из минусов очень медленный, так как вдобавок к интерпретации, вся математика с плавающей точкой. Из плюсов — программы занимают очень мало места.

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

Энтузиастами созданы и другие способы программировать TI-84+. Наиболее значимый, пожалуй, — AXE. Это аналог Си для калькуляторов: язык с Basic-подобным синтаксисом, транслирующийся в машинные коды. Не требует компьютера для написания и компиляции программы (хотя, писать большую программу на калькуляторе — удовольствие на любителя).

Использует шестнадцатибитную арифметику, что конечно медленнее нативной восьмибитной.

Программы для TI-84+

Вот здесь есть архив с кучей программ — как полезных, ятак и игровых. Также, на оффициальном сайте TI есть много полезных программ. На калькуляторе из коробки память забита под завязку, но большая часть программ в стандартной поставке бесполезны, их можно смело удалить.

Пару слов об организации памяти: в калькуляторе есть RAM и FLASH (Archive в терминологии TI). И то и другое организованно в некое подобие файловой системы. Программы и данные можно хранить как в RAM, так и во FLASH. FLASH медленнее, но ее больше.

Кроме «программ» и данных во FLASH хранятся «приложения» — от «программ» они отличаются, тем, что распределены по страницам FLASH-памяти и могут занимать больше памяти, чем процессор в состоянии адресовать.

Полезная вещь, которую стоит иметь на калькуляторе — это оболочка, приложение содержащее библиотеки, загрузчик бинарных программ, и графический интерфейс. Лично я пользуюсь Doors CS. Ее плюс в том, что она содержит библиотеки всех популярных оболочек, а минус — в большом размере. Создатели Doors CS попытались сделать интерфейс похожим на Windows, для чего TI-84+ подходит, на мой взгляд, плохо.

Впрочем, использовать GUI Door CS необязательно, она автоматический интегрируется в ОС.

Некоторые интересные программы для TI-84+:

  • Portal про него был пост на хабре.
  • Таблица Менделеева — полезная вещь.
  • Птичка. Та самая.

«Роботы» на AXE

Погоняв птичку и попрыгав через порталы, я решил сам что-нибудь написать. В качестве языка я выбрал AXE, а в качестве задачи — BSDшных роботов. Получилось коряво: большую часть памяти занимают массивы. Но как сделать компактнее, я так и не придумал.

Программа состоит из пяти «частей»: инициализации, отрисовки, создания нового уровня, «интеллекта» роботов и главного цикла. Отличия от оригинала: игровое поле 23×15 (каждый спрайт 4×4 + бордюр), меньше роботов из-за уменьшения игрового поля, нет подсчета очков.

Инициализация

Скрытый текст

.ROBOTS .IMAGES .EMPTY .ROBOT .JUNK .PLAYER .STONE .STONE [000000000000000020702000000000007070700000000000702070000000000020707000000000002070700000000000]->Pic1 .FIELD Buff(23*15)->Str1 Buff(23*15)->Str2 Buff(23*15)->Str3 1->L 

Здесь все просто. Сначала идет заголовок с именем программы, потом шестнадцатиричная строка со спрайтами. AXE поддерживает спрайты 8×8, а у меня — 4×4, так что большая часть этогй стоки — нули.

Также, я использовал «пустой» спрайт и повторил спрайт с могилой два раза для упрощения отрисовки.

84 — Классная (Официальная премьера трека)

Дальше инициализируются массивы с игровым полем. Str1 — главное игровое поле, Str2 — вспомогательное, Str3 — копия старого игрового поля для предотвращения ошибок игрока. Переменная L — уровень.

Обратите внимание на особенность синтаксиса AXE (и TI-BASICа): присваивание происходит справа налево.

Создание нового уровня

Скрытый текст

Lbl NEWLVL Fill(Str1,15*23,0) L*5->R For(R) rand^15->I rand^23->J I*23+J+Str1->P 1-> End rand^23->X rand^15->Y 3-> Return 

Сперва игровое поле обнуляется, затем на нем размещаются роботы (спрайт за номером 1). В оригинале на каждом уровне появлялось по десять роботов, у меня игровое поле меньше, поэтому я выбрал пять. Роботов может быть меньше, чем L*5 из-за наложения, я решил считать это фитчей.

Затем выбирается позиция игрока (спрайт номер 3), опять же: в отличии от оригинала, где помереть можно на нулевом ходу, у меня игрок «убивает» робота, если приземлится на него в начале игры.

Отрисовка

Скрытый текст

Lbl DRAW ClrDraw VLine(0,0,62) VLine(94,0,62) HLine(0,0,94) HLine(62,0,94) For(I,0,22) For(J,0,14) Pt-On(I*4+1,J*4+2,*8+Pic1) End:End DispGraph Return 

Здесь, опять же, все просто. Пожалуй, стоит сказать, что двоеточие — разделитель операторов, а Pt-On — отрисовка спрайта. Lbl — метка, от LaBeL.

Фигурные скобки в AXE — значение байта по заданному адресу.

Передвижение роботов

Скрытый текст

Lbl STEP 0->R Fill(Str2,23*15,0) For(I,0,22):For(J,0,14) J*23+I->A ->B If B=2 2->:End If B=1: R+1->R (J+SIGN(J,Y))*23+I+SIGN(I,X)+Str2->A +(<2)-> End End:End Copy(Str2,Str1,23*15) Y*23+X+Str1->A +3-> Return Lbl SIGN ([r1]<[r2])-([r1]>[r2]) Return 

Здесь начинаются грязные хаки. Программа сканирует игровое поле, ища роботов, и передвигает их в сторону игрока. Операции сравнения в AXE возвращают единицу, поэтому +(<2)-> инкременирует A если и только если А меньше двух.

Затем отмечается позиция игрока.

Главный цикл

Скрытый текст

While 1 0->G NEWLVL() DRAW() While R>0 X->M:Y->N Copy(Str1,Str3,23*15) If GG ReturnIf G=9 G^100->K End If K=47 rand^23->X rand^15->Y STEP() DRAW() If !=3 getKey^^r:Return End Else (K=51)+(K=48)+(K=45)-(K=49)-(K=46)-(K=43)->I ((K>=43) and (K<=45))-((K>=49) and (K<=51))->J If ((J+Y)<15) and ((J+Y)>=0) and ((I+X)<23) and ((I+X)>=0) X+I->X:Y+J->Y Else:0->G End STEP() If !=3 M->X:N->Y Copy(Str3,Str1,23*15) 0->G End End 

Собственно, можете наблюдать ухудшение качества кода: главный цикл мне пришлось переписывать три раза (заповедь «делай бекапы» для TI-84+ как никогда актуальна), и под конец я устал. В результате получилось то, что получилось.

X84 что это

R — количество роботов на игровом поле. Если роботов больше не осталось — значит уровень пройден.

getKey^^r ждет нажатия клавиши, затем возвращает скан-код. Реализуя свой преступный замысел, я использовал тот факт, что модификатор 2nd прибавляет к скан-кодам цифровых клавиш сотню. Таким образом, новая клавиша не считывается если 2nd была нажата — таким образом реализуется повторение. Истинный скан-код сохраняется в переменную G, и если G больше 200, новая команда не считывается.

ПРОЦЕССОРЫ ARM vs x86: ОБЪЯСНЯЕМ

Скан-код 147 — клавиша «5». В игре это команда телепортации. Телепортация — единственный ход, на котором игра может закончится, поэтому он обрабатывается отдельно.

Скан-коды 43…45, 49…51, 46 и 48 — это цифровые клавиши, по ним игрок двигается. Убить игрока во время движения нельзя, так что состояние игры сохраняется до хода и восстанавливается если игрок с кем-то столкнулся. При этом, G обнуляется.

Как это все выглядит в собранном виде:

Скрытый текст

.ROBOTS .IMAGES .EMPTY .ROBOT .JUNK .PLAYER .STONE .STONE [000000000000000020702000000000007070700000000000702070000000000020707000000000002070700000000000]->Pic1 .FIELD Buff(23*15)->Str1 Buff(23*15)->Str2 Buff(23*15)->Str3 1->L While 1 0->G NEWLVL() DRAW() While R>0 X->M:Y->N Copy(Str1,Str3,23*15) If GG ReturnIf G=9 G^100->K End If K=47 rand^23->X rand^15->Y STEP() DRAW() If !=3 getKey^^r:Return End Else (K=51)+(K=48)+(K=45)-(K=49)-(K=46)-(K=43)->I ((K>=43) and (K<=45))-((K>=49) and (K<=51))->J If ((J+Y)<15) and ((J+Y)>=0) and ((I+X)<23) and ((I+X)>=0) X+I->X:Y+J->Y Else:0->G End STEP() If !=3 M->X:N->Y Copy(Str3,Str1,23*15) 0->G End End DRAW() End L+1->L End Return Lbl DRAW ClrDraw VLine(0,0,62) VLine(94,0,62) HLine(0,0,94) HLine(62,0,94) For(I,0,22) For(J,0,14) Pt-On(I*4+1,J*4+2,*8+Pic1) End:End DispGraph Return Lbl NEWLVL Fill(Str1,15*23,0) L*5->R For(R) rand^15->I rand^23->J I*23+J+Str1->P 1-> End rand^23->X rand^15->Y 3-> Return Lbl STEP 0->R Fill(Str2,23*15,0) For(I,0,22):For(J,0,14) J*23+I->A ->B If B=2 2->:End If B=1: R+1->R (J+SIGN(J,Y))*23+I+SIGN(I,X)+Str2->A +(<2)-> End End:End Copy(Str2,Str1,23*15) Y*23+X+Str1->A +3-> Return Lbl SIGN ([r1]<[r2])-([r1]>[r2]) Return 

x84 2.0.17

The primary purpose of x/84 is to provide a server framework for building environments that emulate the feeling of an era that predates the world wide web.

It may be used for developing a classic bulletin board system (BBS) – one is provided as the ‘default’ scripting layer. It may also be used to develop a MUD, a text-based game, or a game-hosting server such as done by dgamelaunch.

You may access the “default board” provided by x/84 at telnet host 1984.ws:

telnet 1984.ws

See clients for a list of compatible clients, though any terminal should be just fine.

Quickstart

Note that only Linux, BSD, or OSX is supported. Windows might even work, but hasn’t been tested.

  1. Install python2.7 and pip. More than likely this is possible through your preferred distribution packaging system.
pip install x84[with_crypto]

Or, if C compiler and libssl, etc. is not available, simply:

pip install x84

Please note however that without the [with_crypto] option, you will not be able to run any of the web, ssh, and sftp servers, and password hashing (and verification) will be significantly slower. If you receive an error about setuptools_ext not being found, you may need to upgrade your installed version of setuptools and try again:

pip install -U setuptools pip
telnet localhost 6023

All data files are written to ~/.x84/ . To create a custom board, you might copy the default folder of the x/84 python module to a local path, and point the scriptpath variable of ~/.x84/default.ini to point to that folder.

Simply edit and save changes, and re-login to see them. Adjust the show_traceback variable to display any errors directly to your telnet or ssh client.

Documentation, Support, Issue Tracking

See Documentation for API and general tutorials, especially the developers section for preparing a developer’s environment if you wish to contribute upstream. Of note, the Terminal interface is used for keyboard input and screen output, and is very well-documented in blessed.

This project isn’t terribly serious (for example, there are no tests). See the project on github for source tree. Please note that this project is abandoned. Feel free to do whatever the heck you want with it, though, it is Open Source and ISC licensed!

Разница между x64, x32, x84? В чем?

В данном случае x32 и x64 имеют отношение к одной и той же архитектуре процессора — x86. x32 обозначает 32 разрядный набор инструкций и данных. x64 соответственно обозначает 64 разряда (бита). Только x64 — это краткая форма. Более полно будет так — x86-64
x86-64 — 64-битное расширение, набор команд, для архитектуры x86.
Просто когда пишут x86, часто подразумевается 32 бита. Поэтому в народе и говорят, что это одно и то же. Хотя на самом деле x86 — это необязательно x32. x86 — это архитектура процессора. И там может быть различный набор команд и данных: 16, 32, 64 разрядных.

Остальные ответы
ну игры современные только от х64
Разрядность шины. Две последние — одно и то же — 32-разрядная шина.
х84? это есть что? может х86?
тогда уж х86 это тот же х32, разница в разрядности же
64 — пиже вообще и видит больше 4гб оперативки
32 и х86 — одно и тож на самом деле.
Дмитрий КораблинПросветленный (35543) 7 лет назад
ты удивишься если я скажу, что все процессоры 32-бит 🙂

Катюха Кураева Ученик (142) Нет, не удивлюсь, но могу подыграть, что ты тут умнее всех, если для тебя это важно

прочти когда будет время http://sonikelf.ru/neskolko-slov-o-razryadnosti-windows/

Это разрядность Windows. x64 — 64-бит, x84 — 32-бит, x32 — 16-бит (https://ru.wikipedia.org/wiki/16_бит). Разница в том, что высшая «битность» может запускать «низшую» (+саму себя), но не наоборот. Невозможно запустить 64-битные приложения на 32-битной Windows. Также для x64 процессор должен обладать соответствующей поддержкой, но почти все более-менее современные процессоры имеют её. x86 имеет физическое ограничение в 4ГБ (2^32=4294967296(байт) /1024/1024/1024=4ГБ) или 3.7ГБ программно, x64 — около 17 эксабайт.

х64 это набор инструкции для доступа к 64-битному адресному пространству, но не смотря на это, архитектурно все процессоры интела и амд являются 32 бит, что значит они за один такт передают 32 бит данных 🙂
амд первая нашла способ взаимодействия с 64-бит адресным пространством не меняя при этом кардинально архитектуру процессора и назвала ее amd64, т. е. это читерство своего рода 🙂
хотя simd-регистры для работы с инструкциями sse например являются 256-бит, и интел уже в ближайшем будущем планирует их расширить до 512-бит для поддержки векторного набора комманд avr512 🙂
такое читерство стало возможным благодаря многоядерности и внутреннего risc-микроядра, где каждое ядро за такт передает по 32 бита, но т. к. у ядер общая шина и со времен пентиум про она 64-бит, то тут по сути халявный способ адресовать 64 бит не меняя архитектуру кардинально, что обошлось бы в круглую сумму для интела с амд, и цена существенно выроосла 🙂

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Что будем искать? Например,Человек

Мы в социальных сетях