Автор Тема: Castlequest/Castle Excellent  (Прочитано 12836 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5155
    • Просмотр профиля
Re: Castlequest/Castle Excellent
« Ответ #30 : 22 Апрель 2020, 12:15:53 »
в том же MySQL и пыхе которые я раньше юзал or выполнял роль условия
Это логический оператор ИЛИ (PHP: ||, or), а здесь побитовый оператор (PHP: |). ORA в 6502 побитовое ИЛИ: A | M → A, если результат в пределах $#00-7F, флаг N снимается, если не равен нулю, то флаг Z снимается, а в обоих случаях иначе устанавливаются флаги. Иногда нужно просто установить какой-то бит, чтобы позже проверить. Очевидно, что можно использовать как логический оператор ИЛИ, чтобы сразу проверить, что A и M оба равны нулю или один (оба) из них нет. Не разбираюсь в ASM, наверно в каких-то трюках ещё можно использовать.

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #31 : 22 Апрель 2020, 13:28:39 »
TXA
LSR
AND #$01
ORA $26
TAX
LDA $E913,X

Пример из кода, если исходить из твоих слов что просто смотрит как выставить флаги у процессора или 8ой бит относительно значений, я бы ещё понял в случае если потом шол бы перенос далее, но далее он грузит ячейку памяти, исходя из значения ячейки 26, а значит думается мне он не просто флаги выставляет у аккумулятора.

Ведь даже исходя из простой инструкции сравнения аккумулятора со значением CMP он вычетает из аккумулятора занчение М и относительно остатка в аккумуляторе выставляет флаги. да получился 0 ни чего не осталось, а значит значения равны ставим флаг соответствующе, или же значение М больше оказалось и остаток А ушол в отрицательное значение выставив опять же соответствующий флаг, или же попросту осталось ещё что-то в аккумуляторе, значит не равны.

То же самое думается мне должно быть что-то подобное и там с инструкциями ORA и EOR, ведь тут также используется сверка значений, но только в тех же пыхе SQL и басике на сколько мне помниться просто получим результаты true или false (сошлось или нет указанные значения с чем-то, и дальше выполним соответствующую инструкцию а про сами значения что отправили для сверки и забудем ведь они свою задачу выполнили (не забиваем голову что с ними сталось на машинном уровне)) ведь само по себе слово ИЛИ(OR) означает что, проверить одно, если не сошлось, то проверить другое значение, но вот что происходит на машинном уровне побитно и уж тем более что происходит в итоге с самим значением аккумулятора (учитывая что мы его используем дальше как значение, а не просто результат), это загадка которую хотелось бы постичь.  :?


Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5155
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #32 : 22 Апрель 2020, 14:30:02 »
значит думается мне он не просто флаги выставляет у аккумулятора.
В примере не используются флаги процессора, а используют инструкцию по назначению - установка битов. По этому куску кода не скажешь, что именно делается, только ясно, что выбирается откуда загружать (как вы и сказали): адрес $E913 + значение $26 + Number, где Number равно 1, если число по адресу $26 имеет 0 в 0-м бите и A был 1, иначе равно 0 (потому что либо в A был 0 после AND #$01, либо значение $26 уже имеет установленную 1 в 0-м бите).
Ещё иногда побитовое ИЛИ аналогично +, если биты двух операндов не пересекаются и числа беззнаковые.
--------
У вас проблема не с ORA, с который всё просто, а с тем, зачем ORA используется, т. е. логика остального кода.
« Последнее редактирование: 22 Апрель 2020, 14:38:19 от Sharpnull »

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #33 : 22 Апрель 2020, 15:22:37 »
То есть значение М влияет лишь на биты в аккумуляторе без сложения изменяя относительно значения?

Предположим если в А будет
1111 0111
а М будет
0101 0101
То получим ?
10100010

Или я что-то не пойму.
Просто я хочу понять как ORA и EOR влияют на биты. Чтоб понять что происходит со значениями после этого ORA.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5155
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #34 : 22 Апрель 2020, 15:36:59 »
Предположим если в А будет
1111 0111
а М будет
0101 0101
То получим ?
10100010
Будет 1111 0111. К каждому биту применяется дизъюнкция, поэтому эти операции и называются побитовые (bitwise). Только не нужно путать "логические операции" языков программирования и название дизъюнкция как "логи́ческое сложе́ние, логи́ческое ИЛИ", в языках программирования логическими называют те, которые используются в условиях if (A || B) - значения A и B приводятся к true, false и сравниваются.
--------
EOR - Исключающее «или». Тоже просто, но нужно знать о трюках, для которых используется XOR, есть всякие книги и статьи по трюкам с битам, будет полезно.
--------
Например, из свойств ясно, что EOR #$FF сделает инверсию всех битов, что в C/C++ и похожих записывается как ~A.
« Последнее редактирование: 22 Апрель 2020, 15:46:10 от Sharpnull »

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #35 : 22 Апрель 2020, 15:46:22 »
У вас проблема не с ORA, с который всё просто, а с тем, зачем ORA используется, т. е. логика остального кода.

Можно и так сказать, просто сложно пытаться что-то разбирать в коде не понимая что делает какая-то инструкция. А эти две я не могу понять до сих пор как они влияют на значения и на флаги, с остальными вроде со всеми разобрался какие встречал. И вполне нормально разбираю логику кода.
К тому же нужно переписать передалать код хранения открытых локаций в RAM для построения карты чтоб вместо FF открыта/ 00 нет было побитно 1/0 как это сделано с предметами использованными в игре и открытыми дверями.

А то RAM памяти катастрофически не хватает в игре.

Добавлено позже:
Будет 1111 0111. К каждому биту применяется дизъюнкция, поэтому эти операции и называются побитовые (bitwise). Только не нужно путать "логические операции" языков программирования и название дизъюнкция как "логи́ческое сложе́ние, логи́ческое ИЛИ", в языках программирования логическими называют те, которые используются в условиях if (A || B) - значения A и B приводятся к true, false и сравниваются.
--------
EOR - Исключающее «или». Тоже просто, но нужно знать о трюках, для которых используется XOR, есть всякие книги и статьи по трюкам с битам, будет полезно.
--------
Например, из свойств ясно, что EOR #$FF сделает инверсию всех битов, что в C/C++ и похожих записывается как ~A.


Вот теперь доходчиво понял что происходит с битами, спасибо за информацию. ))))

Добавлено позже:
Тоже просто, но нужно знать о трюках, для которых используется XOR, есть всякие книги и статьи по трюкам с битам, будет полезно.
--------
Например, из свойств ясно, что EOR #$FF сделает инверсию всех битов, что в C/C++ и похожих записывается как ~A.

Уж извеняйте что я многое возможно не понимаю, по скольку я никогда и ни где не учился программированию, являюсь самоучкой, а в терминологии вообще полный ноль.
Мною движет лишь желание воплощать в жизнь задумки, так я всегда и писал на пыхе зная что хочу получить в результате, а как и какими функциями реализовать задуманное это походу изучал  ну и wapadmin выручал порой.
А на visual basic к сожалению не далёко в познания ушол, дальше арканоида дела не продвинулись и то в виде блоков цветных блоков, по сколько с графикой я не в ладах и рисовать не умею. Потому и бросил данную затею.  :D
« Последнее редактирование: 22 Апрель 2020, 16:12:54 от Миха42 »

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #36 : 29 Апрель 2020, 16:05:56 »
Ещё возник вопрос, по части прерываний.

В момент срабатываний NMI, IRQ прерываний как описано в инструкциях процессор приостанавливает исполнение программы, выполняет инструкцию для прерывания, а после возвращается обратно к исполнению программы.
Если во время прерывания были изменены данные некоторых ячеек памяти и изменены банки памяти, при возврате к программе он будет помнить только значения аккумулятора и регистров и продолжит исполнение программы с адреса где была приостановлена работа? Или забудет регистры с аккумулятором и начнёт выполнять программу с начала?
А то чуется мне придётся ещё и выделять ячейки в памяти для сохранения номеров prg банок используемых программой, чтоб по окончанию обрабатываемого прерывания возвращал все банки на свои места.  o_0

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 206
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
Re: Castlequest/Castle Excellent
« Ответ #37 : 30 Апрель 2020, 08:01:25 »
Миха42, прерывание помнит только адрес возврата, больше ничего. На выходе из прерывания регистры, флаги, банки и переменные в адресах останутся такими, какими ты их сделаешь внутри своего обработчика прерывания.

В принципе можешь рассматривать прерывание как внезапный JSR, только выход у него через RTI.

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Re: Castlequest/Castle Excellent
« Ответ #38 : 30 Апрель 2020, 08:53:45 »
Миха42, прерывание помнит только адрес возврата, больше ничего. На выходе из прерывания регистры, флаги, банки и переменные в адресах останутся такими, какими ты их сделаешь внутри своего обработчика прерывания.

В принципе можешь рассматривать прерывание как внезапный JSR, только выход у него через RTI.

Ок спасибо за инфу, а то в игре в коде прерывания уже были прописаны сохранение регистров в память и возврат их в изначальное состояние по окончанию прерывания, а вот переписывая игру раскидывая код по банкам я не учёл этот момент (, прийдётся значит искать ещё 6 байт незадействованных в ram памяти для записи номеров банков которые возвращать на свои места по окончанию прерываний, а то в игре один только вывод картинки на экран занимает чуть больше одного банка памяти, потому и пришлось его вынести в отдельные банки, из-за этого значит и начал код что попало чудить, сменить сменил банки, а вернуть не вернул. :)

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #39 : 02 Май 2020, 21:25:53 »
Вопрос на засыпку, в игре постоянно встречаю что-то вроде:
0х0: LDX #$77
0х1: DEX
0х2: BNE $1
А дальше вновь задаётся какое либо значение регистру и идёт прочий код.
И встречается это постоянно, то с регистром х, то с у, а то и оба сразу.
 Если тупо выставить флаги, то почему бы LDX #$01 не указать чтоб циклов поменьше было или сразу LDX #$00 если 0 нужен?!
Или тут какой-то скрытый смысл имеется в подобного рода манипуляциях аж по несколько сотен, а то и тысяч циклах порой?  :?


Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5155
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #40 : 02 Май 2020, 21:43:11 »
Миха42, наверно для задержки. Как ещё на NES можно замедлиться?

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #41 : 02 Май 2020, 21:59:00 »
Хмм...

Довольно странно, несмотря на то что все действия в игре привязаны к счётчикам кадров nmi

А обработку кода наоборот замедлять???  o_0

Есть момент когда на лифтах в одной из локаций маги могут насоздавать довольно много нпц если постоять подождать, и игра начинает очень сильно тормозить при этом обрабатывая их всех кому и что делать, так и хочется запустить на разогнанном эмуле при этом, чтоб не смотреть на слайд шоу, а тут ещё и намеренно тысячами циклов игру тормозить, где логика не пойму нифига.  :neznayu:

Кстати ни кто не в курсе как можно загрузить косвенный адрес вроде LDA ($ABCD),X ?
А то мутить что-то вроде:
0x8000: CLC
0x8001: CLV
0x8002: LDA $ABCE
0x8003: STA $0000
0x8004: TXA
0x8005: ADC $ABCD
0x8006: BVC $8008
0x8007: INC $0000
0x8008: TAY
0x8009: LDA ($00),Y
0x800A: STA $0100

это ппц.
« Последнее редактирование: 02 Май 2020, 23:25:07 от Миха42 »

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 206
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #42 : 03 Май 2020, 10:04:48 »
в игре постоянно встречаю что-то вроде:
0х0: LDX #$77
0х1: DEX
0х2: BNE $1

Эта задержка чаще всего делается в обработчике IRQ, чтобы корректно поместить статусбар на экран. В редких случаях для сложных графических эффектов. Попробуй удалить этот цикл, или изменить начальный счетчик, посмотри что будет.

как можно загрузить косвенный адрес вроде LDA ($ABCD),X ?

Таких инструкций не существует. Косвенная адресация использует соседние адреса в нулевой странице. За исключением косвенного JMP с опкодом 6C, тут могут быть любые соседние абсолютные адреса, но без индексных регистров в самой инструкции.

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #43 : 03 Май 2020, 10:41:07 »
Попробуй удалить этот цикл, или изменить начальный счетчик, посмотри что будет.
Попробую, погляжу )

Таких инструкций не существует. Косвенная адресация использует соседние адреса в нулевой странице. За исключением косвенного JMP с опкодом 6C, тут могут быть любые соседние абсолютные адреса, но без индексных регистров в самой инструкции.
Вот я и не нашол подобной инструкции к сожалению для своей задумки.
Про нулевую страницу я вкурсе уже изучил, там лишь младшим байтом можно косвенно управлять при старшем 00, наиболее подходящим и оказался лишь B1 LDA ($хх),Y, но с ним дополнительно лепить уйму кода нужно  :-\
и про косвенный  JMP вкурсе, но мне хотелось сделать что-то вроде указателей в таблице начиная с каких адресов читать массивы со смещением по Х или Y, но ни чего подобного в инструкциях процессора не нашол.
Надеялся может альтернативый вариант какой есть.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #44 : 03 Май 2020, 11:13:48 »
Миха42, прерывание помнит только адрес возврата, больше ничего. На выходе из прерывания регистры, флаги, банки и переменные в адресах останутся такими, какими ты их сделаешь внутри своего обработчика прерывания.

В принципе можешь рассматривать прерывание как внезапный JSR, только выход у него через RTI.
Нет.

Флаги процессора сохраняются в стек, поэтому и возврат через RTI, а не RTS. То есть не только адрес возврата, но и ещё 1 байт флагов.
Но некоторые особо упоротые разрабы добавляли PHP и PLP .

Ещё в прерывании выставляется I флаг. Поэтому если ты задаешь строку для  IRQ,  добавляй CLI сразу в двух местах в основном коде, и в nmi. (в том случае, если у тебя из кода nmi, не всегда будет успевать до нужной строки выйти).

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 206
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #45 : 03 Май 2020, 11:20:55 »
Миха42, да, подготовка для косвенного LDA относительно большая, но оно того стоит если знать зачем оно.

Для твоего случая можно что-то типа такого

LDX array_id_addr
LDA array_lo_tbl,X
STA $00
LDA array_hi_tbl,X
STA $01
LDY #$00
LDA ($00),Y

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

Добавлено позже:
Ti_, точняк, я чета подзабыл уже, спасибо

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #46 : 03 Май 2020, 11:51:20 »
Миха42, да, подготовка для косвенного LDA относительно большая, но оно того стоит если знать зачем оно.
Я уже оставил всё как есть указав в коде конкретные адреса массивов в банке откуда читать относительно Х, к тому же там и так целый банк занят выводом тайлов на экран, а нагружать ещё и таким кодом при чтении каждого указателя каой тайл рисовать в данной клетке это уже перебор будет.
Но зато оставшееся место пустое теперь делаю чтоб можно было забивать другими мелкими массивами с указанием поинтера в таблице.


P.S.
И так уже в четвёртый раз вчера начал всё с самого начала переписывать код по новой, а то пока переписал уже 75% всего кода допустил где-то ошибку, карта локации грузилась только при зажатом старте ), в результате лень опять пересматривать всю свою стрепню в поиске ошибки, решил начать вновь с нуля, да и изучив почти все функции в коде на 80% и разобрав почти все данные записей в память рам, оказалось не задействованно в игре 68байт ram, пришол к выводу что некоторые массивы и код не правильно распределил по банкам, что мешает удобно вынести всю информацию касательно карты замка в один банк для последующей лёгкой правки. Вот и решил переписать весь код ещё раз, заодно некоторые адреса в ram перенести  :)

Добавлено позже:
То есть не только адрес возврата, но и ещё 1 байт флагов.

Ещё в прерывании выставляется I флаг. Поэтому если ты задаешь строку для  IRQ,  добавляй CLI сразу в двух местах в основном коде, и в nmi. (в том случае, если у тебя из кода nmi, не всегда будет успевать до нужной строки выйти).
На счёт флагов спасибо, полезная информация.
По части IRQ благо он не используется в игре и сразу кроется RTI, а на счёт NMI я уже всё скорректировал чтоб сохранял в память все номера банков используемые в процессе и по окончанию прерывания возвращал помимо регистров ещё и банки все по своим местам, вроде норм всё работает теперь.
Исходя из статьи на dendy.migera.ru, Приоритет прерываний следующий (от более приоритетного к менее): RESET, NMI, IRQ/BRK.
Я так понял при срабатывании NMI прерывания с более высшим приритетом IRQ будет будет ждать пока NMI не завершится, и лишь потом сработает, или я не правильно понял?
« Последнее редактирование: 03 Май 2020, 12:01:55 от Миха42 »

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 206
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
Re: Castlequest/Castle Excellent
« Ответ #47 : 03 Май 2020, 12:21:35 »
IRQ будет будет ждать пока NMI не завершится?

Походу да

Оффлайн Liam Phoenix

  • Пользователь
  • Сообщений: 2
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #48 : 19 Июль 2020, 00:05:48 »
Привет Миха!
Отличная идея!!! Я сам люблю покопаться с ретроиграми (правда я не программист), но с детства любил строить свои уровни (Battle City, Lode Runner, Excitebike, Nuts & Milk). Сейчас переделываю Duna на SEGA и Wolfeinstein 3D на DOS.
Как кто-то выразил желание, по-поводу бессмертия. Лично мне кажется так неинтересно, менять механику игры, другое дело полностью переделать карту, усложнить игры. Но упрощать, чтобы потом поставить галочку "Я ЕЁ ПРОШЁЛ!!!" это признаться в неспособности найти сил и, извините, мозгов, чтобы её пройти.
Я сам в детстве её не проходил. Но буквально недавно узнал, что принцессу зовут Маргарита, именно так зовут мою невесту, что аж решил уже в почти 30 летнем возрасте переиграть заново и пройти наверняка, почувствовать себя рыцарем 8битной вселенной, который спасёт свою принцессу  :D
К слову, даже заказал из США оригинальный Castlequest на NES в полном комплектацией с мануалом и картой всего замка. Через месяц уже будет у меня.

Поэтому Миха, дерзай. Знай, есть ещё те, кому не безразлична эта игра  :blush:
Если сможешь понять, как менять карту, можем даже с тобой вместе засесть и придумать новый замок, пиши в ВК https://vk.com/antongagarin.official

Удачи тебе и терпения в нелёгком деле.
С уважением,
Антон.

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #49 : 29 Ноябрь 2020, 20:57:44 »
Добрый день всем.
Долго конечно отсутствовал, но ведь лето оно и есть лето, отдыхал.  ^_^ К тому же дома ремонт, теперь когда с ремонтом затишье, а вернее попросту деньги закончились на это, решил вновь заняться игрой от безделия, ведь осталось вроде всего 2кб кода перелопатить из 32кб, а я насколько помню когда перестал ей заниматься так и не смог понять почему код перестал работать после того как переписал обработку действий персонажа в игре, перепроверял код неоднократно, всё без ошибок, но программа всё равно останавливается.
В результате сейчас вновь дважды перепроверил весь код подпрограммы, ошибок так и не нашол, но нашол предположительную причину краха всей работы, после разрисовывания на листке бумаге оказалось что обработка действий требует больше уровней стека вызовами подпрограмм, и jmp'ами с записью адреса возврата в стек. Видимо это и стало моей проблемой ведь особо не задумываясь над уровнями стека из-за неопытности пренебрегал вниманием к нему и лепил jsr везде где необходимо было дабы реже писать один и тот же код.

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

По части принципа работы стека можно уже не объяснять, больше интересует информация относительно его вместимости. На сколько я уже вкурсе:
JSR тратит 1 уровень стека записывает 2 байта адреса возврата.
JMP уровни стека не расходует, адрес возврата так же не пишет?
NMI тратит 1 уровень стека записывает 3 байта адрес возврата и состояние флагов
PHA и PLA использует 1 байт для записи аккумулятора в стек, уровни стека не расходует?

Интересует сколько байт можно записать в 1 уровень стека, и влияние PHA на уровни стека?

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 206
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #50 : 29 Ноябрь 2020, 22:31:42 »
Что еще за "уровень стека"? Стек сам по себе не хранит инфу о том, откуда и как именно в него были помещены байты.

Размер стека $0100-$01FF. Адреса стека могут быть использованы игрой как обычные адреса оперативки.

Имеется 8-битный регистр указателя стека, который уменьшается или увеличивается в зависимости от выполненной инструкции или прерывания. Игры обычно ставят указатель на FF при запуске. Указатель отображается в дебаггере.

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #51 : 29 Ноябрь 2020, 23:14:25 »
Что еще за "уровень стека"? Стек сам по себе не хранит инфу о том, откуда и как именно в него были помещены байты.
Возможно не правильно выразился где-то, уровни возврата из подпрограмм ограничиваются объёмом памяти выделенной под стек, 256 байт стека допускают не более 128 уровней возврата из подпрограмм при условии что память стека больше ни чем не задействована, а PHA так же задействует байты стека уменьшая количество уровней возврата из подпрограмм. Спасибо статье пару минут назад нашол http://pscd.ru/info/2183-programmirovanie-processora-6502-programming-the-6502.html наконец то разобрался в вопросе что хотел постичь.
Игрой память задействуется по полной(сложно найти свободные байты ram памяти которые ни чем не задействованны чтоб занять их своей инфой), в том числе и память стека задействуется в качестве обычной памяти для игры для хранения информации, тем самым сильно ограничивая количество памяти под стек, тут то возможно и вышли у меня накладки с нехваткой памяти и наложение данных друг на друга, вообщем нужно внимательно перепроверять теперь и этот момент. Есть теперь над чем вновь покумекать.
Спасибо за отклик, хоть и не помог.  ;)

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #52 : 09 Декабрь 2020, 19:38:53 »
Подобный шрифт возможно где найти?

Вроде чуть-чуть похоже получилось самому сделать.  :D
« Последнее редактирование: 09 Декабрь 2020, 21:52:36 от Миха42 »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5155
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #53 : 09 Декабрь 2020, 22:56:40 »
Вроде чуть-чуть похоже получилось самому сделать.
Уже есть похожая H (англ) из HI-SCORE, у вас Н (рус) получилась с толстой горизонтальной чертой и засечки не так. Также плохо с Й, К, И.

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #54 : 09 Декабрь 2020, 23:35:11 »
Уже есть похожая H (англ) из HI-SCORE, у вас Н (рус) получилась с толстой горизонтальной чертой и засечки не так. Также плохо с Й, К, И.
Про HI- SCORE забыл совсем, спасибо что напомнил.
Ну с остальными буквами буду что-нить дальше мудрить авось какие и сгодятся потом, не умещаются зараза русские буквы в рамки тайла 7х8 а по 2 тайла тратить на букву как-то не хочется, но видимо прийдётся.  <_<

На счёт Н пожалуй прав там лучше смотрится, и даже букву К и Е из KEY можно тоже взять, не смотря на то что Key и Hi-score уже другой стилистики, но буквы С и О уж совсем убого там смотрятся в игре  :-\ С я точно свою оставлю, а вот над О можно ещё попробовать помудрить, авось получше получится.
« Последнее редактирование: 09 Декабрь 2020, 23:59:08 от Миха42 »

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #55 : 10 Декабрь 2020, 15:38:14 »
Переделал вновь но К всё равно как-то не очень на мой взгляд

Прежний вариант пожалуй был лучше верну его. 
« Последнее редактирование: 10 Декабрь 2020, 15:44:44 от Миха42 »

Оффлайн MaxWooD

  • Пользователь
  • Сообщений: 1084
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #56 : 10 Декабрь 2020, 15:41:09 »
но К всё равно как-то не очень на мой взгляд
Латинской К разве нет в шрифте?

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #57 : 10 Декабрь 2020, 15:47:55 »
Латинской К разве нет в шрифте?
Вот и зделал как в латинице сейчас на последней фотке, но поскольку в самой игре стилистика букв немного другая нежели на титульнике, в результате она так не смотрится нифига, верну в итоге пожалуй как в первый раз зделал

Оффлайн Миха42

  • Пользователь
  • Сообщений: 286
  • Пол: Мужской
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #58 : 10 Декабрь 2020, 20:00:17 »
Каких только тайлов тут нет в игре. Остаётся лишь гадать откуда они их понабрали и для чего они были нужны разработчикам. Особенно пингвин с непонятно что за зверем  :)

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5155
    • Просмотр профиля
Castlequest/Castle Excellent
« Ответ #59 : 10 Декабрь 2020, 23:00:42 »
Прежний вариант пожалуй был лучше верну его.
Про "О" и "C" я не говорил, потому что они нормальные и похожи на цифры. На уровне шрифт другой, так что копировать не стоило. У "К" мне не нравилась засечка внутрь, лучше у "А" и "R" внутрь слева. У "Н" толстая горизонтальная черта, как уже говорил. С "Й" и "И" проблема, можно убрать засечки совсем или сделать шире, если есть свободные тайлы, но тогда и "Н" лучше сделать шире с засечками с обоих сторон. Про толщину у диагонали "ИЙ" не знаю как лучше.