Просмотр полной версии : Не работает пользовательский ввод при использовании SNA
Начал разбираться с программированием для спектрума и застрял на отслеживании нажатия клавиш.
Код, который представлен ниже, не работает корректно при генерации SNA.
device zxspectrum48
org 40000
start
ld a, 2
call 5633
loop
ld hl, last_k
ld a, (hl)
cp 112 ;key P
jr z, tright
cp 111 ;key O
jr z, tleft
cp 32 ;key Space
jr z, tspace
jr loop
tright
ld de, keyp
ld bc, eokeyp-keyp
call 8252
jp clrkey
tleft
ld de, keyo
ld bc, eokeyo-keyo
call 8252
jp clrkey
tspace
ld de, keysp
ld bc, eokeysp-keysp
call 8252
jp clrkey
clrkey
ld hl, last_k
ld (hl), 0
jp loop
ret
last_k equ 23560
keyp defb "P "
eokeyp equ $
keyo defb "O "
eokeyo equ $
keysp defb "space "
eokeysp equ $
savesna "input_test.sna", start
При компиляции в SNA и запуске в эмуляторе не работает перехват нажатия на клавиши "O" и "P" (однако, нажатие на "Space" отлавливается).
Но если собрать в TAP и так же запустить на эмуляторе, то всё работает корректно.
Ассемблер: SJAsmPlus V20190306.1
Эмуляторы: #CSpect V2.12.3; ZXSP V0.8.0 pre27
ОС: macOS Catalina V10.15.2
Может кто-то сталкивался с похожими проблемами и сможет подсказать ошибку в коде или в окружении?
не работает перехват нажатия на клавиши "O" и "P"
Пытаешся оперировать системными адресами.
Вообще либо оно обслуживает, либо писать свой обработчик...
А то что у тебя - это примерно как ты отправляешь кучу команд, в один и тот-же адрес...
Отсюда и конфликты (ну вот пытается обработать несчастные битики, а тут снова ld (hl), 0)
Оно знаешь-ли там по своим тактом живёт, нет изначального отсчёта, если ты прогу запустил - это не значит что она начала всё с нуля...
Как хорошо на машинках где запущаешь прогу - и спокойно тестишь...
Спектрум - это не тот вариант
Тут всё жёстко.
Поставь HALT (раз уж веришь ПЗУ)
Увидишь что у тебя другие кнопы пропадут. А может и нет. Завязано всё на схемотехнику...
Причём на различие эмулей тоже сказывается... В общем мрак...
Я давно уже хотел пнуть аппаратчиков-спековых (ну и вообще ретро-систем)
Зачем молчите. Ну и программеров - почему не становитесь хоть чуть-чуть инженерами?
(крик в никуда)
...
- - - Добавлено - - -
(асм какой дикий, ZEUS-3 напоминает... А адрес компиляции 40000 - вообще выше всех похвал...)
- - - Добавлено - - -
Эй, ребяты-олдфаны!
Какого чёрта тут новички кодят на дичи всякой???
Как-то это всё не по-джидайски!
Не могли что-ли норм-среду разработки подогнать...
Bedazzle
05.01.2020, 17:54
Начал разбираться с программированием для спектрума и застрял на отслеживании нажатия клавиш.
Какая задача?
Есть желание использовать опрос клавишей системой, или написать свой обработчик?
(асм какой дикий, ZEUS-3 напоминает... А адрес компиляции 40000 - вообще выше всех похвал...)
А что дикого в асме и почему я не могу использовать адрес 40000 при написании тестовых маленьких программ?
- - - Добавлено - - -
Эй, ребяты-олдфаны!
Какого чёрта тут новички кодят на дичи всякой???
Как-то это всё не по-джидайски!
Не могли что-ли норм-среду разработки подогнать...
Меня устраивает текущая конфигурация для разработки, но было бы интересно услышать какие есть варианты.
- - - Добавлено - - -
Какая задача?
Есть желание использовать опрос клавишей системой, или написать свой обработчик?
Задача банальная: сделать управление с клавиатуры, но для начала, научиться выводить определённый текст на экран по нажатию на заданные клавиши O и P (использовать опрос клавишей системой, если я правильно понимаю второй вопрос).
научиться выводить определённый текст на экран по нажатию на заданные клавиши O и P
Наверное так и учились, все мы, но чтоб так жёстко - это конечно талант :)
(ни сам Спек по кофигурации аппаратной, ни его прошивка ПЗУ не умеют опрашивать группы клавиш)
Только поочерёдно... Ну вот ты взялся за за Q P - но так взялся хорошо - что просто это будет работать на одних моделях, не будет работать на других (а уж про эмули молчу...)
Тут посоветовать можно одно - опрашивать (читать порты клавы из всех разрядов
; F7 EF
; FB DF
; FD BF
; FE 7F
Сохрнаняя в память, потом ждать нового ввода (лучше всего по HALT)
И сравнивать...
Офигеть логические конструкторы, но зато избегаем дребезга и чётко фиксируем нажатия...
ни сам Спек по кофигурации аппаратной, ни его прошивка ПЗУ не умеют опрашивать группы клавиш)
Только поочерёдно...
Мне и нужно поочерёдное нажатие - либо O, либо P.
Повторюсь, нажатие на Space работает, а на O или P - нет.
Но этой проблемы нет при создании TAP, мне и хочется понять, почему мой код частично не работает, когда я использую SNA.
выложи SNA
71160
+ TAP, который работает 71161
Lethargeek
05.01.2020, 19:26
системные переменные похерены?
SAM style
05.01.2020, 19:55
системные переменные похерены?
Бинго. Ужасм кладёт болт и не инициализирует их в sna. Ну и плюс IY должен быть вполне определённым, если юзать пзу.
переменные/IY там выставлены (или вы гадаете не смотря в код)
косяк в битах переменной (#5c3b)
в SNA по результатам битов в этой переменной в результате опроса выдаётся код токена, а не символа !!!
Спасибо за ответы.
А посоветуйте, пожалуйста, актуальный ассемблер, который умеет создавать SNA.
SoftLight
05.01.2020, 22:03
В sjasm 'savesna'.
sjasm не захотел работать под маком:
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string
Просмотрел я темы, которые прилеплены в шапке раздела программирование (языки и среды; средства разработки).
Последние сообщения датированы 2006, 2007 годами.
Хочется современных средств, может даже, с прицелом на разработку для Spectrum NEXT, а информации особо нет.
Shadow Maker
05.01.2020, 23:09
sjasm не захотел работать под маком:
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string
Просмотрел я темы, которые прилеплены в шапке раздела программирование (языки и среды; средства разработки).
Последние сообщения датированы 2006, 2007 годами.
Хочется современных средств, может даже, с прицелом на разработку для Spectrum NEXT, а информации особо нет.
Нормально всё работает. https://github.com/z00m128/sjasmplus/releases/tag/v1.14.3 собирай тар.гз.
Современные средства - https://github.com/maziac/z80-debug (как можно видеть на гифках - запущено на чем-то, сильно напоминающем мак)
Dart Alver
06.01.2020, 01:30
системные переменные похерены?
Бинго. Ужасм кладёт болт и не инициализирует их в sna.
А он и не должен этого делать. Вдруг ваш написанный код должен перекрывать системные переменные, а тут ужасм взял их и инициализировал ))
Если вдруг нужно sna с переменными, надо сделать их дамп, причём желательно со срезом аналогичного вызова ассемблерной проги из бейсика, а то могут быть сюрпризы как тут.
А потом предварительно приинкбинить этот дамп в исходнике, а то желательно бы ещё и регистры какие (sp - в частности, IY - как видно по умолчанию выставляется) инициировать.
А вообще по мне для игрушки чтение управления лучше напрямую через порты организовать. Хотя если шустрость и отзывчивость не критична то можно и забить.
to YuronN пара конструкций на заметку если не наошибся конечно )) Не шедевр, здешние монстры покруче завернут (тут вариантов море), так для общего развития.
...
loop
halt ; системный опрос проводится раз в прерывание, так что нет смысла гонять цикл вхолостую (не забыть только прерывания разрешить EI )
ld hl, last_k
ld a, (hl)
ld (hl),0 ; очищаем буфер сразу после забора символа, и не забудется и лишний раз ld hl,last_k не писать
ld hl,pechataem ; поскольку у нас однотипное окончание обработки, можно сэкономить на джампах и коллах
push hl ; кладём на стек адрес окончания обработки, теперь по 'ret' попадём на обработку
ld de, keyp ; tright
ld bc, eokeyp-keyp
cp 112 ;key P
ret z
ld de, keyo ; tleft
ld bc, eokeyo-keyo
cp 111 ;key O
ret z
ld de, keysp ; tspace
ld bc, eokeysp-keysp
cp 32 ;key Space
ret z
pop af ; снимаем неиспользованный для ret адрес, иначе стек забьётся
jr loop
pechataem ; окончание обработки
call 8252
jr loop
last_k equ 23560
keyp defb "P "
eokeyp equ $
keyo defb "O "
eokeyo equ $
keysp defb "space "
eokeysp equ $
Lethargeek
06.01.2020, 01:52
А он и не должен этого делать. Вдруг ваш написанный код должен перекрывать системные переменные, а тут ужасм взял их и инициализировал ))
что значит "должен"? он в рантайме это может прекрасно сделать вне зависимости от инициализации
а если не трогал эту область при компиляции - почему не инициализировать?
Если вдруг нужно sna с переменными, надо сделать их дамп, причём желательно со срезом аналогичного вызова ассемблерной проги из бейсика, а то могут быть сюрпризы как тут.
А потом предварительно приинкбинить этот дамп в исходнике, а то желательно бы ещё и регистры какие (sp - в частности, IY - как видно по умолчанию выставляется) инициировать.
прямо рецепт "каши из топора"
NEO SPECTRUMAN
06.01.2020, 02:19
что значит "должен"? он в рантайме это может прекрасно сделать вне зависимости от инициализации
а если не трогал эту область при компиляции - почему не инициализировать?
потому шито эти системные переменные никому не нужны
нормальные люди не лезут в пзу не под каким предлогом
ПУШО НЕТ НИКАКОЙ! ГАРАНТИИ его одинаковости на разных машинах
разве что при обращение к трдос-у\теневым портам (которые без лезть в пзу ну никак...)
или 128 бит демо
или прочая муть которую жестко ограничивает количество свободной памяти...
Dart Alver
06.01.2020, 03:20
что значит "должен"? он в рантайме это может прекрасно сделать вне зависимости от инициализации
а если не трогал эту область при компиляции - почему не инициализировать?
Ну допустим сделаем мы фичу (все возможно конечно если разрабы замутят) и после опции 'device zxspectrum48' (128 и т.п.) вместо озу заполненных 0-ми будет озу с предустановленными системными переменными.
Всё бы хорошо, но есть нюансы типа а есть ли у нашей модельки бета-диск или нет, а есть ли принтер, а какого типа пзу должна лежать, а на каком виртуальном этапе работы пзу должен быть срез ? Ибо системные переменные такая хрень, которая постоянно изменяется и зависит от дофига причин.
В тот-же снап от YuronNа подставить дамп переменных инициализированного бейсика 48 при работе командной строки и нифига - как не работала, так и не работает, пому что #5C3B там тоже не в той позиции, зато печатать начнёт с нижнего края экрана. И срез вызовов процедур тоже может разным быть.
И надо нам в компилятор это всё тащить ? Можно конечно парой-тройкой срезов ограничиться, добавить дополнительные описани к параметру 'device', но не стали разработчики этим гемороем заниматься. Да и не так сложно снять нужный дамп в эмуле и вставлять в код до прочих оргов если уж правда надо. А обычно оно всё вообще нафиг не нужно.
Lethargeek
06.01.2020, 05:09
NEO SPECTRUMAN, Dart Alver, в таком случае внимание, вопрос: с какой целью может вообще понадобиться сборка неполноценного снапшота в нынешнем виде?
потому что смысла в нём тогда никакого, "что-то там куда-то подставить" - тогда проще сделать наоборот, собрать бинарь и его подставить в память нужной конфигурации
Нормально всё работает. https://github.com/z00m128/sjasmplus/releases/tag/v1.14.3 собирай тар.гз.
sjasmplus у меня работает, им я и собирал проблемный SNA.
Тут выше посоветовали sjasm (без plus), он и не работает на маке.
Современные средства - https://github.com/maziac/z80-debug
Спасибо, посмотрю.
- - - Добавлено - - -
пара конструкций на заметку если не наошибся конечно )) Не шедевр, здешние монстры покруче завернут (тут вариантов море), так для общего развития.
О, за пример особое спасибо!
- - - Добавлено - - -
Попробовал z80-debug.
Там тоже используют sjasmplus для создания SNA и скармливают его эмулятору ZEsarUX.
Т.е. мой код по-прежнему не работает и при такой конфигурации.
Никто не использует SNA при написании программ/игр что ли?
Или мой код всё таки в корне не верен?
NEO SPECTRUMAN
06.01.2020, 09:45
с какой целью может вообще понадобиться сборка неполноценного снапшота в нынешнем виде?
просто :v2_dizzy_facepalm:
- - - Добавлено - - -
потому что смысла в нём тогда никакого
если не лезть в пзу
ВСЕ почему то прекрасно работает
и даже конвертится в вполне загружаемый на реале tap
или же переваривается otla-й для турбозагрузки...
на много проще грузить на реал с магнитофоном
именно через промежуточное сохранение в sna
и скармливание otla-е
- - - Добавлено - - -
в таком случае внимание, вопрос
ты лучше ответь
ЗАЧЕМ ЛИШНИЙ РАЗ ЛЕЗТЬ В ПЗУ?
70К тактов во фрейме лишних что ли?
Dart Alver
06.01.2020, 15:57
вместо озу заполненных 0-ми будет озу с предустановленными системными переменными.
Вообще, пардон извиняюсь оно собственно так и есть с предустановленными, вопрос только из какого среза они берутся.
Никто не использует SNA при написании программ/игр что ли?
Или мой код всё таки в корне не верен?
Вообще снапы изначально скорее средства хакерства, а только после уже отладочные. Конечный продукт в снапшотах - это плохой тон, а по шустрому процедурку другую проверить это как раз.
В вашем случае в снапе достаточно перед запуском процедуры выставить в 1-цу 3-й бит ячейки #5C3B, например " ld a,#C8 : ld (#5C3B),a " ( по умолчанию ассемблер вроде #C0 ставит )
с какой целью может вообще понадобиться сборка неполноценного снапшота в нынешнем виде?
Быстренько прогнать на вшивость какую-либо процедуру, не заморачиваясь на загрузчики/запускальщики.
И да для полноценного снапа параметров ужасма не хватает, не варьируются ни адрес стека, ни позиция регистров, ни переменных. Хотя в общем случае переменные выставляются.
Но для ряда промежуточных этапов разработки и этого вполне хватит.
Lethargeek
06.01.2020, 16:14
Быстренько прогнать на вшивость какую-либо процедуру, не заморачиваясь на загрузчики/запускальщики.
ага! так вот, для этого полезней снап с хоть какой-нибудь корректной бейсик-конфигурацией, чем без оной
ты лучше ответь
ЗАЧЕМ ЛИШНИЙ РАЗ ЛЕЗТЬ В ПЗУ?
70К тактов во фрейме лишних что ли?
просто :v2_dizzy_facepalm: да что тебя зациклило на "лезть в пзу"?
вот как здесь, чтобы процедуру свою проверить, обязательно велосипедить свой опрос клавиш?
NEO SPECTRUMAN
06.01.2020, 16:30
вот как здесь, чтобы процедуру свою проверить, обязательно велосипедить свой опрос клавиш?
за время которое потраченно на выяснение почему не работает это гафно из ПЗУ
можно было написать 15 таких своих опросов
при том они элементарно делаются...
а если захочится умножения или синус?
что тоже лезсть в ПЗУ?
месяц раздуплять в каком формате там числа представлены?
Lethargeek
06.01.2020, 16:40
за время которое потраченно на выяснение почему не работает это гафно из ПЗУ
можно было написать 15 таких своих опросов
при том они элементарно делаются...
да-да, чего только эти русские не придумают, лишь бы нормальные дороги снапшоты не делать :rolleyes:
а если захочится умножения или синус?
что тоже лезсть в ПЗУ?
а почему бы и не вызвать калькулятор, если чисто вспомогательно нужно в тестах
Dart Alver
06.01.2020, 17:44
да-да, чего только эти русские не придумают, лишь бы нормальные дороги снапшоты не делать
Ну это к mastermindу на поклон или к чешским коллегам обратитесь, может сделают что-нибудь. А пока - что есть то и есть, к этому и приспосабливаемся )))
В вашем случае в снапе достаточно перед запуском процедуры выставить в 1-цу 3-й бит ячейки #5C3B, например " ld a,#C8 : ld (#5C3B),a " ( по умолчанию ассемблер вроде #C0 ставит )
Класс, заработало, спасибо!
Shadow Maker
06.01.2020, 19:02
да-да, чего только эти русские не придумают, лишь бы нормальные дороги снапшоты не делать :rolleyes:
а почему бы и не вызвать калькулятор, если чисто вспомогательно нужно в тестах
Ты же понимаешь, что любой, кому нужны конкретные системные переменные в снапшоте - должен их сам и создать, не? Снапшот не виноват. Всегда при запуске снапа выставляют что мне надо. Отлаживать удобно.
- - - Добавлено - - -
sjasmplus у меня работает, им я и собирал проблемный SNA.
Тут выше посоветовали sjasm (без plus), он и не работает на маке.
Нет, тебе тоже с плюсом советовали.
Попробовал z80-debug.
Там тоже используют sjasmplus для создания SNA и скармливают его эмулятору ZEsarUX.
Т.е. мой код по-прежнему не работает и при такой конфигурации.
Никто не использует SNA при написании программ/игр что ли?
Или мой код всё таки в корне не верен?
"документацию не читай - сразу отвечай" что ли? там три разных ассамблера поддерживается.
Lethargeek
06.01.2020, 19:04
Ты же понимаешь, что любой, кому нужны конкретные системные переменные в снапшоте - должен их сам и создать, не?
ты же понимаешь, что для большинства кейсов "прогнать на вшивость" хватит состояния после "reset: clear X: randomize usr N" (tr-dos добавить можно как опцию)
Нет, тебе тоже с плюсом советовали.
В sjasm 'savesna'.
И где вы увидели plus в этом совете?
"документацию не читай - сразу отвечай" что ли? там три разных ассамблера поддерживается.
Конечно, я это прочитал.
Savannah's z80asm - вы сами то его используете? Последняя версия от 2009 года, нет поддержки Spectrum NEXT, документация скудна и там нет информации по генерации sna.
z88dk - скорее для разработки на С, можно и на асме писать, вот только у меня сходу не получилось создать рабочий sna по примерам.
Если есть опыт их использования, то, пожалуйста, напишите пример, а то ваши придирки нифига не помогают в освоении спектрума.
* однако, текущая проблема, ради которой была создана ветка, уже решена подсказкой от Dart Alver
Быстренько прогнать на вшивость какую-либо процедуру, не заморачиваясь на загрузчики/запускальщики.
И да для полноценного снапа параметров ужасма не хватает, не варьируются ни адрес стека, ни позиция регистров, ни переменных. Хотя в общем случае переменные выставляются.
Но для ряда промежуточных этапов разработки и этого вполне хватит.
Стоп стоп. весь процесс работы на кросс средах и основан собственно на sna
собрал - моментально запустил - посмотрел.
Shadow Maker
07.01.2020, 01:01
И где вы увидели plus в этом совете?
В голове у автора поста. savesna нет в не-плюсовой версии.
Конечно, я это прочитал.
Savannah's z80asm - вы сами то его используете? Последняя версия от 2009 года, нет поддержки Spectrum NEXT, документация скудна и там нет информации по генерации sna.
z88dk - скорее для разработки на С, можно и на асме писать, вот только у меня сходу не получилось создать рабочий sna по примерам.
Конечно же не использую. Я разве говорил, что они должны делать sna? Это не задача ассемблера делать sna, ассемблер по факту должен делать бинарник и всё. Это в sjasmplus зачем-то присобачили снапшотов и тапок и запись на диск. Все ассемблеры для других платформ выдают бинарник и всё. И это правильно.
Если есть опыт их использования, то, пожалуйста, напишите пример, а то ваши придирки нифига не помогают в освоении спектрума.
Пример чего? Как пользоваться appmake в z88dk? Или как makesna запустить? Непонятно.
* однако, текущая проблема, ради которой была создана ветка, уже решена подсказкой от Dart Alver
Про это уже сказал goodboy ранее, чего не проверили?
- - - Добавлено - - -
ты же понимаешь, что для большинства кейсов "прогнать на вшивость" хватит состояния после "reset: clear X: randomize usr N" (tr-dos добавить можно как опцию)
z00m живой вроде, тут даже в теме соседней принимал заказы на исправления. Добавьте реквест, если сейчас всё неправильно.
NEO SPECTRUMAN
07.01.2020, 01:36
Все ассемблеры для других платформ выдают бинарник и всё. И это правильно.
и с какого перепугу это правильно?
в том что
чтобы получить долбанный хелловорд
нужно двое суток изучать параметры командной строки 15 разных утилит
разной степени корявости?...
тем более когда нужно запихнуть по разным страницам
а тут все работает из коробки
написал slot 3 page 2 и забыл
z00m живой вроде, тут даже в теме соседней принимал заказы на исправления. Добавьте реквест, если сейчас всё неправильно.
нужно проверить
возможно у него даже пофикшено
Shadow Maker
07.01.2020, 02:15
и с какого перепугу это правильно?
Ассемблер должен делать то, что должен делать ассемблер - компилировать исполняемый код. Внедрять в ассемблер команды для процессинга бинарников - неверно ни с какой стороны. Это должна делать отдельная программа-линкер (как тот же appmake в z88dk или makesna для z80asm). Но в случае с sjasmplus "так сложилось исторически" и ничего не поделать.
NEO SPECTRUMAN
07.01.2020, 03:57
Это должна делать отдельная программа-линкер
ну да
у всех код лежит линейно
одним блоком
"выровнян по левому краю" памяти
и страничной адресации как бы не существует... :v2_dizzy_facepalm:
и зачем передвать кучу параметров в "ничего на знающий" линкер
когда все может сделать компилятор
опять же может во времена одной 360К дискеты в флоповоде
и 128К оперативки это может и было актуально
но щас...
а потом после sjasm-а
хочется забросить нахер эти убогие недокомпиляторы
которые насыпанные валяются пачкой по 30 папкам
с 15-ю бинарниками...
которым нужен жестко прибитый путь типа C:\superpupershitcompiller\
...и которые даже dup не умеют... :v2_dizzy_facepalm:
не то что вывести какой то текст в процессе
со значениями каких то переменных
которые активно используются при условной компиляции
нахера нужны убогие компиляторы которые ничего не могут?
sjasm закинул в папку с сорцем
и ГАРАНТИРОВАННО за один клик
этот сорец соберется у кого угодно без плясок с бубмном...
- - - Добавлено - - -
как тот же appmake в z88dk
ну а мерские щи я так и не осилил собирать
изза невозможности нормально собрать нужную среды
выкачать тонны зависимостей по гарантированно всегда давно протухшим ссылкам
итд
- - - Добавлено - - -
Но в случае с sjasmplus "так сложилось исторически" и ничего не поделать.
да и так не только в sjasm
Это не задача ассемблера делать sna, ассемблер по факту должен делать бинарник и всё. Это в sjasmplus зачем-то присобачили снапшотов и тапок и запись на диск. Все ассемблеры для других платформ выдают бинарник и всё. И это правильно.
Можно кодить и на самом спектруме по-старинке, но это, ведь, глупо отказываться от современных средств разработки, которые, несомненно, добавляют удобства.
Смысл ретро-разработки для меня не в том, чтобы делать в точности как раньше, а в изучении технологий с целью саморазвития, но без мазохизма.
Про это уже сказал goodboy ранее, чего не проверили?
Я сказал спасибо goodboy, просто для меня это прозвучало как ошибка в ассемблере, которую нельзя исправить кодом.
Надо признать, что большинство сообщений на этом форуме выглядят для меня как "здесь что-то на эльфийском", но я стараюсь...
Shadow Maker
07.01.2020, 10:44
да и так не только в sjasm
Да? Где еще есть встроенная генерация SNA внутри исходного текста? Остальное - это лично твое мнение. То, что удобно - не значит идеологически правильно.
- - - Добавлено - - -
Можно кодить и на самом спектруме по-старинке, но это, ведь, глупо отказываться от современных средств разработки, которые, несомненно, добавляют удобства.
Смысл ретро-разработки для меня не в том, чтобы делать в точности как раньше, а в изучении технологий с целью саморазвития, но без мазохизма.
Никто и не говорит про "кодить на спектруме". Просто если нет желания вникать и просто "всё фигня, ничего не работает" - то далеко не уедешь в разработке. Для простоты (т.к. z80-debug надо еще зесаурукс ставить и настраивать) можно просто раскраску поставить от https://github.com/theNestruo/z80-asm-meter-vscode и компилировать батниками. Я вообще тупо в Far Manager пишу код, но я большие игры не пишу, поэтому не советую так делать.
глупо отказываться от современных средств разработки, которые, несомненно, добавляют удобства.
учись пользоваться отладчиком в эмуляторах, тогда и вопросов меньше будет
SoftLight
07.01.2020, 11:20
В голове у автора поста. savesna нет в не-плюсовой версии.
+1. Извиняюсь за неточность. Просто я только с таким и работаю, про версии без плюса и забыл уже за давностью. Ну, главное, разобрались. Я только на понял чем с итоге sjasmplus не устраивает. К нему ещё и unreal с поддержкой меток можно прикрутить так что в дебаге будете ходить по своим меткам.
Shadow Maker
07.01.2020, 12:16
+1. Извиняюсь за неточность. Просто я только с таким и работаю, про версии без плюса и забыл уже за давностью. Ну, главное, разобрались. Я только на понял чем с итоге sjasmplus не устраивает. К нему ещё и unreal с поддержкой меток можно прикрутить так что в дебаге будете ходить по своим меткам.
Ну там вон сообщали, что какая-то системная переменная в снапшоте неправильно инициализирована и у автора топика не работало. Ему сказали фикс, теперь его вроде бы всё устраивает.
+1. Извиняюсь за неточность. Просто я только с таким и работаю, про версии без плюса и забыл уже за давностью. Ну, главное, разобрались. Я только на понял чем с итоге sjasmplus не устраивает. К нему ещё и unreal с поддержкой меток можно прикрутить так что в дебаге будете ходить по своим меткам.
just few quick comments to the whole thread:
the first post mentions also #CSpect emulator and ZX Spectrum Next. In zoom's branch of sjasmplus you can export map file for CSpect emulator directly with `CSPECTMAP` ( http://z00m128.github.io/sjasmplus/documentation.html#po_cspectmap ) directive since v1.13.1
About `SAVESNA` in sjasmplus vs pure binaries: sjasmplus has both. It was extra work for sjasmplus contributors, but *you* can safely ignore `SAVESNA` in *your* projects and use only raw binary output. :) (there, problem solved)
About SNA vs original problem: you will meet more surprises with the SNA, it's really invasive format replacing all memory (of classic ZX48 and ZX128 models), giving the ROM fake artificial state. If this fake state is not what you need, then fix the state.
But technically that's not a fail of the assembler, or the SNA file, you had system variables in a state when the ROM keyboard routine was scanning key "P" not as small letter "p", but as BASIC keyword "PRINT", which is just another mode of the ROM keyboard routine... but it fails in your test. When you did load the TAP, the BASIC was still in the letter-input mode after writing `LOAD ""`, so the keyboard routine was reading "p", not PRINT.
Overall I'm always a bit puzzled by these tutorials, which prefer ROM calls for reading keyboard or printing text, as the HW on ZX is very simple, and it takes only few hours to learn how to read keyboard, and maybe couple of days to print your own character and string, directly into video RAM. And the ROM routines are good for BASIC, but not for games. Where's the fun in calling the ROM... :)
Spectramine
08.01.2020, 22:30
the first post mentions also #CSpect emulator and ZX Spectrum Next. In zoom's branch of sjasmplus you can export map file for CSpect emulator directly with `CSPECTMAP` ( http://z00m128.github.io/sjasmplus/d...l#po_cspectmap ) directive since v1.13.1
Can you describe, please, what is the difference between HEXA_16BIT_ADDRESS and HEXA_LONG_ADDRESS in labels list from CSPECTMAP directive?
Where's the fun in calling the ROM...
It is convenient in some cases. Of course, we should set the needed state of system variables before this. Generated SNA file can't provide all possible needed states.
Can you describe, please, what is the difference between HEXA_16BIT_ADDRESS and HEXA_LONG_ADDRESS in labels list from CSPECTMAP directive?
The 16bit address is within Z80 address range, where the label was mapped when defined in assembler (if it's not memory address, but just some large value, it will be simply truncated to 16 bits)).
The long address is address in the 1.75MiB SRAM space of ZX Spectrum Next (8kiB pages 0, 1, 2, 3, ..., 223) = "flat addressing".
The default memory mapping of Next after boot into NextZXOS is [255, 255, 10, 11, 4, 5, 0, 1] (255=ROM), or in terms of 16kiB banks [ROM, Bank 5, Bank 2, Bank 0] ... so when you define label "xyz" at ORG $4001 (without changing pages), it is in 8kiB page 10, offset 1 = long address 0x14001. The #CSpect emulator understand this address formatting and will display in debugger the label "xyz" when you map page 10 into memory (and hide the label, when page is not mapped). (the format is defined by #CSpect developer, so I'm not sure what it does when you map page 10 to different region, and I don't care too much, as it's closed source, so I can't help with anything - but I can fix sjasmplus export if somebody will find some bug in it)
Spectramine
09.01.2020, 02:09
Ped7g, thanks. Seems like it's not much useful for 48/128kb Spectrum models. The Unreal's labels files generated by LABELSLIST directive is much more useful because of page info of labels.
Ped7g, thanks. Seems like it's not much useful for 48/128kb Spectrum models. The Unreal's labels files generated by LABELSLIST directive is much more useful because of page info of labels.
While I can agree with your general sentiment (Unreal is probably better), I don't understand the second part of your comment.
The page offset is 13 bits ($0000..$1FFF), so if you cut the bottom 13 bits of the "long address", you have the page number (8 bits in case of Next) of label.
0x14001-> offset $0001, page $0A
I.e. it's the same information as unreal export, just different formatting (unreal export does the offset mask already in export, so the exported offset is 14 bit (zx128 banks) only and it shows bank number separately, but it's the same information in the end on the bit level). Maybe the formatting is less human-friendly...
Spectramine
09.01.2020, 15:47
Ped7g, thanks again, I got it at last. I did not see the page info from map file by sight, but i got it with calculator)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot