Просмотр полной версии : Тетрис
Вниманию неширокой общественности предлагается Тетрис, призванный подчеркнуть богатые возможности "Океана-240". При объеме менее немногим более 2Кбайт программа буквально нашпигована удачными техническими решениями: минималистичной графикой, скверным генератором случайных чисел и двоичным счетчиком достижений.
Отдельно стоит отметить полное отсутствие связи между набранными очками и темпом игры, а также выразительную звуковую палитру.
http://sensi.org/~tnt23/ok240/tet.png
Стрелки влево/вправо - смещение
Стрелка вверх - вращение
Стрелка вниз - приблизить дно
Пробел - уронить
F - перебор палитр
B - перебор фонов
ESC - выход
Грузить и запускать с адреса 100h.
Исходный код доступен здесь: https://github.com/timtashpulatov/ok240/blob/master/tet.asm
Не играл, но осуждаю - зачем такой плохой ГСЧ? Честно говоря я и сам так делал, но давно и теперь осуждаю людей за свои прошлые ошибки.
Мне дизайн нравится, я так не умею.
Point taken. Я сам плохо сплю по ночам из-за плохого ГСЧ, но мне очень хотелось получить хоть какой-нибудь уже работающий тетрис. С другой стороны наседает svofski с пожеланием 7 bag и других приятных фич, вроде Wall Kick.
В общем, пишем в бэклог пожелания, а я пока счет (пере)приделаю и звук.
Минорное обновление:
- более приличный ГСЧ (https://zx-pk.ru/threads/23100-generator-psevdosluchajnykh-chisel.html?p=705136&viewfull=1#post705136)
- звучки
Бинарник в первом сообщении обновлен. Играбельно с адреса 1000h 100h.
Хороший тетрис, планируется ли универсальная версия и для "старого" конфига и для fdd (или две отдельные версии)? А то в конфиге fdd клавиатура и звучки не работают.
Чтобы звучки работали, нужно определять, на каком BIOS мы запущены, и писать Freq и Duration в разные места. Ну или пользоваться выводом ESC O, но это может оказаться чуток медленно. (Ну или вовсе наплевать на BIOS и пищать вручную)
А вот по поводу клавиатуры непонятно, используются вполне себе системные вызовы KBDSTAT (0e006h) и KBDREAD (0e009h).
gurfunkel
05.02.2019, 20:48
Какой эмулятор использовать? Bashkiria-2m? В нем чёто не завелся...
Какой эмулятор использовать? Bashkiria-2m? В нем чёто не завелся...
Да, с конфигурацией Okean-240. У меня все работает (с) даже в линуксе под wine:
67975
- - - Добавлено - - -
- добавил перебор палитр кнопкой 'F'. Завораживающее зрелище!
tnt23, возможно стоит добавить в архив файл .emu, чтобы просто дропнуть его в эмулятор, нажать F5 и вперед. Через отладчик мало кто захочет запускать.
Попробовал свою старую прикидочную програмку. Она реагирует на клавиатуру только в конфиге fdd (прямой опрос, без biosa), т.ч. я где то там наврал, что делал под первый конфиг.
Разработчикам океана за такие выкрутасы мое фэ.
tnt23, возможно стоит добавить в архив файл .emu, чтобы просто дропнуть его в эмулятор, нажать F5 и вперед. Через отладчик мало кто захочет запускать.
Попробовал свою старую прикидочную програмку. Она реагирует на клавиатуру только в конфиге fdd (прямой опрос, без biosa), т.ч. я где то там наврал, что делал под первый конфиг.
Разработчикам океана за такие выкрутасы мое фэ.
Добавил в архив tet.emu.
А что за прикидочная программа? Мне представляется, что конфиг fdd в части ВН59 и клавиатуры ничем не должен отличаться от конфига без fdd. Разве что строб подтверждения клавиатуре в разных биосах посылается разными битами.
Там ничего интересного, просто опрашивается клавиатура и при нажатии курсорных клавиш и пробела рисуются полоски на экране. Наверняка переделать под "старый" конфиг можно за пару минут, но пока желания (да и необходимости) нет.
Все равно было бы интересно взглянуть. Я бы попробовал засинхронизировать такой код с обратным ходом луча, полезно для последующих применений.
tnt23, я несколько потерялся, что ты надеешься увидеть в моей поделке? Ты же и клавиатуру опрашиваешь и рисуешь на экране. Тем более у меня для конфига fdd, а у тебя реал "старой формации" (т.е. опрос клавиатуры не будет работать).
Кстати у меня вопрос, а как ты в реал грузишь программы?
tnt23, я несколько потерялся, что ты надеешься увидеть в моей поделке?
Всегда интересно посмотреть-поучиться, как это бывает сделано у других.
как ты в реал грузишь программы?
Через директиву 'L' Монитора. Она принимает через последовательный порт стандартный HEX, который отлично выпекает "Прекрасный Ассемблер". Только штатно в "Океане" это делается на скорости 4800 (медленно и печально), я себе подпатчил Монитор для скорости 19200.
Насчет поделки я подумаю, но особого желания нет. Там скорее всего копипаста из пзу, похвастаться нечем.
Через директиву 'L' Монитора. Она принимает через последовательный порт стандартный HEX
А чем передаешь?
Не исключено, что средствами emu можно сделать перехват типа магнитофонного и грузить из файлов HEX.
А чем передаешь?
Не исключено, что средствами emu можно сделать перехват типа магнитофонного и грузить из файлов HEX.
Передаю терминальной программой по вкусу, в моем случае TeraTerm. Простое копирование в COM-порт по идее тоже бы должно работать, но не работает, то ли "Океан" не успевает отгребать на скорости 19200, то ли Windows буферизирует поток как-то.
Можно сделать и загрузку HEX, конечно, но какой смысл? они более рыхлые, т.к. это семибитное ASCII кодирование бинарника, с указанием адресов загрузки.
Можно сделать и загрузку HEX, конечно, но какой смысл?
Сейчас грузить в конфиг с fdd можно из образов дисков okd. А цивильного способа загрузки в безfddшный конфиг нет.
А цивильного способа загрузки в безfddшный конфиг нет.
Хак дня (добавить в EMU.ext)
ok : loader {
config="Okean-240"
loadmem="mem"
loadaddr=100
cmd[0].delay=1200
cmd[0].start=100
}
Файлы с расширением .ok будут запускаться с адреса 100h.
Я наконец собрался попробовать. Получился уже очень играбельный Стаках! Звучки приятно радуют.
Пожелания:
0. больше хохломы. Цвета еще есть в запасе для разных фигур?
Что до самой игры, вот мой тетрис аксептанс лист:
1. n-bag rng
2. wall kicks
3. вращение в обе стороны
4. фигура лочится не при касании дна, а на следующем шаге
5. автоповтор
6. опционально -- отрисовка проекции текущей фигуры на дно
7. не отследил, как ведется счет. должны быть бонусы или множители за комбо разного размера
Пункты [2,3,4] позволяют загонять фигуры ходом коня в иначе недоступные места.
svofski, спасибо за целительный отзыв. Особенно рад, что звучки пришлись по уху.
Про цвета - их в отдельно взятой палитре негусто. Переключать палитры в пределах ширины фигуры (4*8=32 пиксела) я в текущем состоянии сознания не умею, да и в будущем едва ли смогу.
Хохломы нет, но есть Уорхол:
67986
По остальным фичам, в моем детстве тетрис был не таким теплым и дружелюбным, но можно дать пользователю выбор: твой тепличный набор (можно даже с Undo), или Суровый Челябинский Вариант.
(позже прокомментирую весь аксептанс лист)
- - - Добавлено - - -
b2m, а поддержку второй страницы видео-ОЗУ можно попросить? (или я уже просил?)
Переключать палитры на лету не надо, это как-то жестковато для тетриса. Уорхол-палитра уже неплохо. Я думал, если не получается одарить каждую фигуру своим цветом, может быть что-нибудь в стиле один цвет для забетонированных фигур (допустим цвет бетона, как сейчас) vs цвет летящей фишки. Когда фишка присоединяется к Боргу, свой цвет она утрачивает. Чтобы был какой-то контраст в игровом поле.
Но может быть все же получится сделать шашечками RGB-палитры какие-то псевдоцвета, как делали в некоторых играх на БК. R, G, B, R+G, R+B, G+B, R+2G+B -- на студийном-то поди должны хорошо смотреться.
поддержку второй страницы видео-ОЗУ можно попросить?
Так есть же вроде, если старший бит =1, то отображается область с адреса 4000h (по крайней мере именно этот адрес стоит в конфиге).
4. фигура лочится не при касании дна, а на следующем шаге
5. автоповтор
6. опционально -- отрисовка проекции текущей фигуры на дно
7. не отследил, как ведется счет. должны быть бонусы или множители за комбо разного размера
Пункты [2,3,4] позволяют загонять фигуры ходом коня в иначе недоступные места.
4 - вроде сейчас так и есть? фигура при касании дна не прилипает, ее еще можно чуть-чуть успеть подвигать, пока на следующем шаге она не проверит, что под ней проваливаться некуда, и тогда уже вморозится.
5 - это зависит от клавиатурного контроллера по крайней мере в не-fdd конфигурации (т.е. со старым Монитором).
6 - наверное, можно добавить (как? в виде стрелочки под стаканом?)
7 - счет, даром что двоичный, ведется примитивно: каждая полная строка +1 к счетчику.
(Мне эстетически не нравится, как сейчас происходит схлопывание нескольких строк; лучше было бы превратить это в маленький мультик: схлопнул строку - блямкнул - сдвинул стакан, чтобы у играющего повышалось выделение серотонина. И еще концовка игры скомкана. Вообще у меня к нынешней версии и еще есть претензии)
- - - Добавлено - - -
Так есть же вроде, если старший бит =1, то отображается область с адреса 4000h (по крайней мере именно этот адрес стоит в конфиге).
Ага, просто я пробовал щелкать экраны и результат отличался от ожиданий. Скорее всего, что-то не так делал.
- - - Добавлено - - -
один цвет для забетонированных фигур (допустим цвет бетона, как сейчас) vs цвет летящей фишки
У меня сложилось впечатление, что сейчас так и есть. Падает красная тетраминина, упирается в сугроб и сливается с ним в экстазе. Или поясни, плиз.
Но может быть все же получится сделать шашечками RGB-палитры какие-то псевдоцвета, как делали в некоторых играх на БК. R, G, B, R+G, R+B, G+B, R+2G+B -- на студийном-то поди должны хорошо смотреться.
Шашечками попробовать можно. Вот, например, фон в стакане сделан шахматкой черного с белым. Через полчаса игры глаза у меня начинают стекленеть, например, но можно нащупать другие комбинации. Тут неподалеку есть редактор битмапчиков для "Океана", можно предлагать на конкурс свои варианты, или слать скриншоты с хорошенько пропатченным стаканом.
На студийном неожиданно плохо смотрится быстрое переключение видеостраниц. Может, у него люминофор какой-то особенно склерозистый.
4 - вроде сейчас так и есть? фигура при касании дна не прилипает, ее еще можно чуть-чуть успеть подвигать, пока на следующем шаге она не проверит, что под ней проваливаться некуда, и тогда уже вморозится.
Может быть дело в эмуляторе или в чем еще, но у меня она вмораживается моментально.
Про цвета я ступил. Правда, у тебя красный контур у активной фигурки.
5 - это зависит от клавиатурного контроллера по крайней мере в не-fdd конфигурации (т.е. со старым Монитором).
А что, у Океах нельзя определить нажата или отжата в настоящий момент клавиша?
6 - наверное, можно добавить (как? в виде стрелочки под стаканом?)
В виде призрачной фигуры, которая лежит на дне там, где бы она была, если бы ее в настоящий момент бросили.
А ты видел тетрис, кроме как в Челябинске? Полистай ютубы по теме. Это спорт, как сборка кубика Рубика, и у него довольно серьезные и требовательные к своему спортивному снаряду фанаты.
Может быть дело в эмуляторе или в чем еще, но у меня она вмораживается моментально.
Ты наверно пробелом бросаешь. Если ждать, пока сама дойдёт, то нормально. Хорошо бы, чтобы и по пробелу не сразу "вмораживалась"...
Хорошо бы, чтобы и по пробелу не сразу "вмораживалась"
Для этого есть стрелочка вниз. Опять же, в тех тетрисах, на которых я рос (ДВК, СМ ЭВМ), пробел вроде бы приваривал фигуру намертво.
- - - Добавлено - - -
А что, у Океах нельзя определить нажата или отжата в настоящий момент клавиша?
В первой АКА канонической АКА журнальной версии клавиатура - внешний черный ящик, выставляющий в порт 7 бит нажатой когда-то клавиши, сопровождая его стробом. В ответ "Океан" отвечает другим стробом, после чего клавиатура с облегчением свой строб снимает.
Только в поздней ревизии клавиши УС и СС заведены на отдельные линии порта B, но в остальном, по-моему, мультитач так и не появился.
- - - Добавлено - - -
В виде призрачной фигуры, которая лежит на дне там, где бы она была, если бы ее в настоящий момент бросили.
Гедонический какой-то тетрис получится, аркадийский. Может, еще grid сделать?
А ты видел тетрис, кроме как в Челябинске? Полистай ютубы по теме. Это спорт, как сборка кубика Рубика, и у него довольно серьезные и требовательные к своему спортивному снаряду фанаты.
В Челябинске тетрамино делали из двутавровых балок, чтобы ветром не сносило. Но мой кругозор постоянно расширяется, и отлично, что у нас здесь есть серьезный и требовательный к инвентарю фанат :)
Переписал процедуру сдвига в сторону ускорения, играть со звуком стало поприятнее.
Обновил архив в первом сообщении.
Немного оффтопа:
Когда-то, году в 2006, у меня был телефон Нокла Series 40, который был жутко бестолковый, потому что в нем не было Тетриса (cобственно с непонимания значимости тетриса и началось угасание фирмы Нокла). Но тогда я временно этот недостаток восполнил, написав Бардак. Если бы я знал тогда про Океах-240, я бы конечно не стал ничего писать для Series 40, но я-то не знал. Он меня долго выручал, пока я этот телефон не постирал. Серию 40 нынче уже не найдешь, но, вдохновившись трудами tnt23, я перетащил Бардак за три красноглазых вечера с кромешного j2me на няшный libgdx и вот что получилось:
http://sensi.org/~svo/bardak/
(Наверное требуется умеренно современный браузер, ну и вообще, потому что отрисовка через WebGL)
Добавил геймовер с аудио- и видео-спецэффектами.
Интересно, а возможно сабж на Орион портировать?... :v2_dizzy_turn:
Интересно, а возможно сабж на Орион портировать?... :v2_dizzy_turn:
Должно быть несложно, главное заменить машинно-зависимые процедуры типа PaintBitmap на "орионские". Ну звук ерунда, клавиатура тоже.
Исходный код доступен здесь: https://github.com/timtashpulatov/ok240/blob/master/tet.asm
Пытаюсь переводить на знакомый мне ассм...
1). А что означает:
db64 AAAAAAAAAAAAAMcAJyjHAAAAAAAAAAAAAADMANJSTAAAAAAAAA AAAAAAOQI4CTIA
??
- - - Добавлено - - -
и ещё дурацкие вопросы :)
2). Что означает: "CTAKAH: equ . " ?
Можно ли заменить на: "CTAKAH: equ $ " ?
3). Тут пустой DB:
StickTune:
db
что должно быть в качестве параметра(ов)?
4). Неопределённая переменная CurPos:
Row:equ CurPos
Col:equ CurPos+1
Что в ней должно быть?
5). Правильно ли я заменил на РКшный манер:
KBDSTAT: equ 0F812h; 0E006h
KBDREAD: equ 0F81Bh; 0E009h
CHAROUT: equ 0F809h; 0E00Ch ; вывести символ из регистра C
???
- - - Добавлено - - -
До финиша немного осталось... ))
https://pp.userapi.com/c850620/v850620451/c0ede/bDV9SS-Is3c.jpg
Пытаюсь переводить на знакомый мне ассм...
Попробуй лучше вот так: https://svofski.github.io/pretty-8080-assembler/?https://raw.githubusercontent.com/timtashpulatov/ok240/master/tet.asm
1). А что означает:
db64 AAAAAAAAAAAAAMcAJyjHAAAAAAAAAAAAAADMANJSTAAAAAAAAA AAAAAAOQI4CTIA
Означает "вставить бинарник, закодированный в формате BASE64". Конкретно в этом месте у меня вставлены битмапчики надписей "SCORE" и "NEXT".
2). Что означает: "CTAKAH: equ . " ?
Можно ли заменить на: "CTAKAH: equ $ " ?
Означает "присвоить метке CTAKAH текущий адрес компиляции". Наверное, можно и equ $.
3). Тут пустой DB:
StickTune:
db
что должно быть в качестве параметра(ов)?
Он пустой, потому что я еще не накомпозировал мелодию прилипания :) можно поставить 0 или вообще выкинуть.
4). Неопределённая переменная CurPos:
Row:equ CurPos
Col:equ CurPos+1
Переменная CurPos довольно-таки определенная, находится она в самом конце листинга. Видимо, труъ ассемблерные компиляторы неодобрительно смотрят на ссылки вперед.
5). Правильно ли я заменил на РКшный манер:
KBDSTAT: equ 0F812h; 0E006h
KBDREAD: equ 0F81Bh; 0E009h
CHAROUT: equ 0F809h; 0E00Ch ; вывести символ из регистра C
???
Скорее всего, правильно :)
- - - Добавлено - - -
Есть важный момент, который нужно уяснить, это сходства или различия организации видеопамяти Океана и Ориона. В Океане видеопамять растет из левого верхнего угла байтами вниз, заполняя по мере увеличения адресов колонки вправо. При этом в цветном режиме каждая точка (полоска из 8 точек) на экране раскрашивается двумя битами (байтами) из видеопамяти, отстоящими друг от друга на 256.
Попробуй лучше вот так: https://svofski.github.io/pretty-8080-assembler/?https://raw.githubusercontent.com/timtashpulatov/ok240/master/tet.asm
Я на Орионе делаю, интернет я туда прикрутил, но браузер ещё не сделал... :)
Означает "вставить бинарник, закодированный в формате BASE64". Конкретно в этом месте у меня вставлены битмапчики надписей "SCORE" и "NEXT".
Длинные последовательности символов это имена файлов бинарников или их "тела"?
Означает "присвоить метке CTAKAH текущий адрес компиляции". Наверное, можно и equ $.
Я всегда в таких случаях просто пишу имя метки и двоеточие, EQU не требуется..
Переменная CurPos довольно-таки определенная, находится она в самом конце листинга. Видимо, труъ ассемблерные компиляторы неодобрительно смотрят на ссылки вперед.
Смотрел три раза, два из которых поиском. нету нигде определения. Ещё раз проверил прямо на сайте - нет.
Есть важный момент, который нужно уяснить, это сходства или различия организации видеопамяти Океана и Ориона. В Океане видеопамять растет из левого верхнего угла байтами вниз, заполняя по мере увеличения адресов колонки вправо.
Тут один в один с Орионом. И даже адрес начала экрана полностью совпадает.
При этом в цветном режиме каждая точка (полоска из 8 точек) на экране раскрашивается двумя битами (байтами) из видеопамяти, отстоящими друг от друга на 256.
А вот тут различия, но с цветом потом поколдую...
Длинные последовательности символов это имена файлов бинарников или их "тела"?
Это их "тела". Чтобы не писать db и дальше не перечислять тридцать два байта.
Я всегда в таких случаях просто пишу имя метки и двоеточие, EQU не требуется..
Ну... двоеточия в "Прекрасном Ассемблере" факультативны, вот я и распустился :) но вообще респект за компиляцию прямо на таргете!
Смотрел три раза, два из которых поиском. нету нигде определения. Ещё раз проверил прямо на сайте - нет.
Точно, ты прав. Это рудимент, оставшийся от редактора битмапов. На CurPos ссылаются Row и Col, которые все равно нигде не используются. Грохну.
Есть еще отличие от графики ориона - байты в другую сторону смотрят.
Есть еще отличие от графики ориона - байты в другую сторону смотрят.
Да, это довольно неприятное было открытие.
Это их "тела". Чтобы не писать db и дальше не перечислять тридцать два байта.
А, понятно, т.е. это если "по-русски" стандартное: DB 'ABCD...etc'
Стринги в одинарных кавычках, короче ))
Ну... двоеточия в "Прекрасном Ассемблере" факультативны, вот я и распустился :) но вообще респект за компиляцию прямо на таргете!
Я не про двоеточия, а про то, что просто указание метки в тексте сопсно является её объявлением с присвоением текущего счётчика адреса ;)
Оператор EQU нужен для инициализации значением выражения.
Точно, ты прав. Это рудимент, оставшийся от редактора битмапов. На CurPos ссылаются Row и Col, которые все равно нигде не используются. Грохну.
Ок. Я пока не вникал, просто тупо привожу к виду, который успешно скомпилируется. А дальше уже "включу голову" и буду адаптировать к Ориону.
- - - Добавлено - - -
Есть еще отличие от графики ориона - байты в другую сторону смотрят.
Это как? %)
Т.е. крайняя левая верхняя точка это не D7, а D0 ?
А, понятно, т.е. это если "по-русски" стандартное: DB 'ABCD...etc'
Стринги в одинарных кавычках, короче ))
Скорее панталоны, чем стринги, потому что в кавычки сложно запихнуть произвольное 8-битное значение, например, 0x01 или 0xff.
Я не про двоеточия, а про то, что просто указание метки в тексте сопсно является её объявлением с присвоением текущего счётчика адреса
Оператор EQU нужен для инициализации значением выражения.
Ээээ. Ну ок.
tnt23, комментарии конечно доставили! Спасибо, местами ржал от души )))))
П.С. а вот это "; Score (.)(.)" то, что я думаю или нет? ))
Т.е. крайняя левая верхняя точка это не D7, а D0 ?
Да, таких компьютеров мало, но океан один из них.
Ну, наконец-то!
https://pp.userapi.com/c850036/v850036292/139085/WAFNnn01cZY.jpg
- - - Добавлено - - -
Напрямую не взлетело...
https://pp.userapi.com/c852220/v852220442/c2d5b/uarGCZdgENU.jpg
Бум разбираццо :)
П.С. а вот это "; Score (.)(.)" то, что я думаю или нет? ))
Это есть такой хороший одноименный журнал про это самое :)
- - - Добавлено - - -
Ну, наконец-то!
А три ошибки переполнения?
А три ошибки переполнения?
Это просто предупреждения, тут всё ок.
Ну тогда отладчик в конечности и вперед :)
OrionExt
21.02.2019, 17:47
Denn, Время у тебя освободилось? по тролить? Вот почему когда дело касалось реальной щуки. Переноса игры Агент007(98%) на Орион, тебя не было?
OrionExt, я не в курсе про Агент007. И запросов не поступало.
- - - Добавлено - - -
Ну тогда отладчик в конечности и вперед :)
Закомментировал в начале инициализацию экрана (всякие записи в порты) и дело пошло:
https://pp.userapi.com/c848620/v848620604/1363e1/5XH-lqdxLco.jpg
- - - Добавлено - - -
Такое ощущение, что экран родного ПК ширше, чем Орионовский...
Denn, включи графический режим 1.
Глючит безбожно, вероятно в запрещённое ОЗУ пишет. В итоге "улетело в космос" :)
Наверное это цвет куда-то не туда залез...
- - - Добавлено - - -
Denn, включи графический режим 1.
В Орионе это 4-цветный, каждый пиксель своим цветом. Точно он нужен?
В Орионе это 4-цветный, каждый пиксель своим цветом. Точно он нужен?
Я думал, тебе цветной тетрис нужен, а не монохромный.
Я думал, тебе цветной тетрис нужен, а не монохромный.
У меня по-умолчанию в Орионе 16-цветный режим, а 4-цветный опционально. Но для начала хотя бы в монохроме заработало..
Denn, дак попробуй режим 1 все же ж.
А какой размер экрана используется в игре: 512х256 или 256х256 ?
А какой размер экрана используется в игре: 512х256 или 256х256 ?
Цветной режим в "Океане-240" - 256 на 256 точек.
Приделал анимацию повышения уровня, и что-то я не так понимаю про флаг Carry.
Имеем в аккумуляторе небольшое приращение, 1 или 2. Складываем его со счетчиком достижений:
lda Score
mov c, a
lda Delta
add c
jc LevelUpgradeFun
И если переполнилась чаша терпения счетчика, то показываем игроку мультик с волком и корзиной яиц.
Это хорошо работает для случая FF+1 (получаем в аккумуляторе 0 и взведенный Carry), но почему-то не работает для случая FF+2 (получаем 1 и отсутствие Carry). WTF?
Плохо смотрел в отладчик.
tnt23, переполнение работает честно. Главное только не делать приращение с помощью команд INR ;)
В данном случае я проморгал переход через экватор в другом месте, и подходил к моменту сложения уже с пустым флагом переноса.
- - - Добавлено - - -
Denn, как успехи с портированием на "Орион-128"? удалось воткнуть режим 1 и повтыкать в красоту неописуемую?
Denn, как успехи с портированием на "Орион-128"? удалось воткнуть режим 1 и повтыкать в красоту неописуемую?
С этим я развлекаюсь на работе, в офисно-фоновом режиме :) Сейчас пока дело встало на паузу, немного не до того, потом продолжу ;)
П.С. с удивлением заметил за собой, что стал слишком много читать про Океан-240... прям хоть собирай ))
- - - Добавлено - - -
Цветной режим в "Океане-240" - 256 на 256 точек.
Судя по картинке на орионовском экране 384х256, не влезает 1/3-я часть картинки справа, из чего делаю вывод, что оно пытается рисоваться в 512х256.
А "улёты в космос" как раз есть следствие записи в ОЗУ выше EFFFh.
Судя по картинке на орионовском экране 384х256, не влезает 1/3-я часть картинки справа, из чего делаю вывод, что оно пытается рисоваться в 512х256.
Да нет же. В "Океане" всего два графических режима: монохромный 256 строк по 512 пикселей в строке, и цветной, тоже 256 строк по 256 пикселей в строке. Памяти используется одинаковое количество. Видео-ОЗУ располагается с адреса 0xC000 и до 0xEFFF.
Чтобы "влезла" часть картинки справа, нужно на "Орионе" включить видеорежим 1.
Чтобы "влезла" часть картинки справа, нужно на "Орионе" включить видеорежим 1.
Во всех видеорежимах у Ориона размер картинки одинаковый: 384х256. Меняецца только интерпретация байтов в ОЗУ.
Чтобы на орионе влезла вся океанская картинка 256x256 нужно четные столбцы - в одну плоскость, нечетные столбцы - в другую плоскость. Получившиеся промежутки конечно надо убрать, "собрать" вместе столбцы каждой плоскости.
Чтобы на орионе влезла вся океанская картинка 256x256 нужно четные столбцы - в одну плоскость, нечетные столбцы - в другую плоскость. Получившиеся промежутки конечно надо убрать, "собрать" вместе столбцы каждой плоскости.
Вот оно как!
Надо где-то нарыть картинок от Океана, поупражняться с программированием конвертера для Ориона.
Ну или просто переписать процедуру PaintBitmap под "Орион-128". Она довольно несложная.
Ну или просто переписать процедуру PaintBitmap под "Орион-128". Она довольно несложная.
В данном случае разумеется так и будет. Просто я сразу глобально смотрю (компик понравился).
Надо где-то нарыть картинок от Океана, поупражняться с программированием конвертера для Ориона.
Глянь здесь - https://zx-pk.ru/threads/14176-kompyuter-quot-okean-240-quot.html?p=998053&viewfull=1#post998053
Глянь здесь - https://zx-pk.ru/threads/14176-kompyuter-quot-okean-240-quot.html?p=998053&viewfull=1#post998053
Но там не океановские картинки выложены. Я вывожу их напрямую на Орионе, и они с правильной ориентацией битов в байте, а по идее должно быть перевёрнуто.
Но там не океановские картинки выложены. Я вывожу их напрямую на Орионе, и они с правильной ориентацией битов в байте, а по идее должно быть перевёрнуто.
Конвертер под специалист делал, я их при выводе переворачиваю. Если нужны океанские картинки, то можно просто сохранить экранную память в файл через отладчик, приложил архив.
Я, кстати, так БКшные картинки вытаскивал из эмулятора БК, чтобы их потом в эмуляторе океана смотреть. БК с океаном почти близнецы братья по графическим возможностям, даже пиксельклоки совпадают.
Если нужны океанские картинки, то можно просто сохранить экранную память в файл через отладчик, приложил архив.
Наконец-то удалось добраться до картинок. Вот что получилось на Орионе:
https://pp.userapi.com/c849036/v849036724/14a79f/lOQ8txC0NJM.jpg
https://pp.userapi.com/c849036/v849036724/14a7a7/rDl2rXfpHFU.jpg
Не пойму, верно или нет? Какая-то "расчёска" наблюдается, прямо как при некачественной оцифровке ТВ-сигнала на писи :)
Использую на Орионе режим №4, никакого спец преобразования цвета не делаю, только "реверс" битов (всех) и "расфасовка" FG и BG по страницам ОЗУ.
Картинку отцентрировал, по краям полоски - это артефакты от мусора в экранном ОЗУ от родного 16-цветного режима.
Код вывода:
; *** Загрузка экрана ПК "ОКЕАН-240" ***
; (C) 2019 Denn /SPb/
; Версия: 1.0a
; Создано: 12.03.2019
; Изменено: 12.03.2019
mode 3 ; режим трансляции (1..3)
cpu 0 ; инструкции: 0=i8080, 1=z80
file LDSCR$ ; имя выходного файла
page 0 ; рабочая страница ОЗУ
@DEBUG:EQU 0 ; 1 - режим отладки программы
BUFFER:EQU 0
B_SCR: EQU 0C800h
SvBYTE:EQU 0F839h; запись байта в доп.стр. ОЗУ
ORG 8000h ; а/п программы
; настройка проверки аппаратной части:
HW_TYPE:EQU 0; 0 - без проверки платформы, 1 - Орион-128, 2 - Орион-ПРО
HW_RAM:EQU 0; 0 - без проверки об'ема ОЗУ, 1=64, 2=128, 4=256, 8=512 Кб ОЗУ требуется
; настройка проверки версии ОС:
OS_VERSION:EQU 39h; 0 - без проверки, иначе - требуемый номер версии
INCL START.L ; размещается в самом начале кода!
; *** Интерфейс п/п ОС DSDOS ***
INCL DSDOS.L
; консольный ввод-вывод
INCL CONIO.L
; файловая система, диски
INCL FILE.L
; *** Библиотеки ***
if @DEBUG
INCL DEBUG.L
endf
B_NAME:DB 'PARROTS '
;B_NAME:DB 'SHIP1 '
REVERT:
LXI D,BUFFER
MVI B,40h ; 20h
MVI L,0
MEMRV0:
LDAX D
MOV H,A
XRA A
DAD H
RAR
DAD H
RAR
DAD H
RAR
DAD H
RAR
DAD H
RAR
DAD H
RAR
DAD H
RAR
DAD H
RAR
STAX D
INR E
JNZ MEMRV0
INR D
DCR B
JNZ MEMRV0
RET
; *** Основной код программы ***
START:
LXI H,B_NAME
CALL SET_FILE_NAME
LXI H,BUFFER
LXI B,1
CALL FILE_LOAD
RC
CALL REVERT
CALL ShowIMG
MVI A,4
OUT 0F8h
JMP INPUT_KEY
ShowIMG:
LXI D,BUFFER
LXI H,B_SCR
MVI B,20h
ShowFG:
LDAX D
MOV M,A
INR E
INR L
JNZ ShowFG
INR H
INR D
INR D
DCR B
JNZ ShowFG
LXI D,BUFFER+0100h
LXI H,B_SCR
MVI B,20h
ShowBG:
LDAX D
MOV C,A
MVI A,1
CALL SvBYTE
INR E
INR L
JNZ ShowBG
INR H
INR D
INR D
DCR B
JNZ ShowBG
RET
END
Не пойму, верно или нет?
Цвета перепутаны, красные строки надо поменять на зеленые.
Какая-то "расчёска" наблюдается
Это такой вариант конверсии. Более "традиционные" картинки можно брать на БК0010.
Denn, как там процесс переноса "Тетриса" на Орион? :) а то скука заедает, начинаю отвлекаться.
68416
Извините, я вклинюсь не про тетрис.
tnt23, если у тебя пока есть время и если в твоем океане работают магнитофонные вход и выход попробуешь загрузить/выгрузить? В emu я попробовал, выгружает и загружает рам-диск чуть больше чем за полторы минуты, это круто. Мне интересно, будет ли работать перекрестная загрузка, т.е. прочитает ли океан wav из эмулятора и прочитает ли emu океанский wav. Если нужен пример wav из emu, то попозже могу выложить (там на рам-диске только IBASIC).
И насчет картинки. Уже писал, но повторюсь, что RGBстрочный режим для океана еще круче выглядел бы в режиме 512, но отладить в эмуляторе без привязки к битам КСИ и ССИ такую штуку я не могу, тут слово за реальщиками.
Мне интересно, будет ли работать перекрестная загрузка, т.е. прочитает ли океан wav из эмулятора и прочитает ли emu океанский wav. Если нужен пример wav из emu, то попозже могу выложить (там на рам-диске только IBASIC).
Давай попробую. Вывод на магнитофон у меня точно работает, а ввод не проверял.
RGBстрочный режим для океана еще круче выглядел бы в режиме 512, но отладить в эмуляторе без привязки к битам КСИ и ССИ такую штуку я не могу, тут слово за реальщиками.
Давай нетленку, потестим на реале. (Если в виде сорцов, то можно сделать файл для коллаборационизма тут - https://github.com/timtashpulatov/ok240)
Denn, как там процесс переноса "Тетриса" на Орион? :) а то скука заедает, начинаю отвлекаться.
Пока на паузе. Я тут занялся дизассемблированием монитора Океана, пока "весь там" :)
Тетрис добью, но позже.
Теперь хоть разобрался с экранной областью Океана. Можно хоть 100 раз читать доки, но вот пощупать живьём на Орионе - это для меня сразу понимание вопроса на 200%!
П.С. в ВК чёто игноришь меня.. =)
- - - Добавлено - - -
Извините, я вклинюсь не про тетрис.
Тоже извиняюсь... я тут создал группу (https://vk.com/ocean240) , пользуясь случаем приглашаю всех океанологов и им сочувствующих =)
Denn, меня в соцсетях (кроме zx-pk.ru) нет.
Denn, меня в соцсетях (кроме zx-pk.ru) нет.
В группах СС очень удобно размещать и - главное - систематизировать информацию. Там автоматом бесплатный хостинг для картинок, схем, файлов, который не "протухнет" со временем. Очень просто и удобно выкладывать информацию.
На форуме очень сложно что-то находить, и со временем перестают работать ссылки на картинки, к сожалению.
П.С. в ВК чёто игноришь меня.. =)
Дык я в ВК тоже нечасто бываю, сорян :)
Daniil Chislov 86
13.03.2019, 20:56
я в ВК тоже нечасто бываю
так мы тебе и поверили =) в 8 утра последий раз
простите за оффтоп
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot