Страница 1 из 1

Прерывания, открытие века! ( на самом деле нет )

Добавлено: 29 май 2018, 13:08
Random Great
Настоящий спектрумовский кодер это давно знает а я напишу сюда чтобы не забыть потом =)

Почему если не включать свой обработчик прерываний, моя программа начинает в некоторых местах глючитъ?

В Spectaculator нашел опцию "запускать пока не придет прерывание"
Изображение

Выяснилось что по умолчанию на прерывание подвешен вызов #0038 процедуры, которая cмело гадит в IY+40, увеличивая значение там на 1....

Изображение

Добавлено: 29 май 2018, 13:26
shiny
1. какая версия Spectaculator ?
2. пока есть режим IM 1 не используй IY - это азы ваще-то. и это самый ебанутый баг ROM.

Добавлено: 29 май 2018, 13:51
Random Great
Шыншыл 55095 писал(а):1. какая версия Spectaculator ?
Версия 8.0 честно спираченая с vtrdos. Приходится запускать под MacOS через Wine, так как в нем самый понятный по мне отладчик.
Как только допишу игру и разбогатею на 100500 мильонов сразу обещаю купить лицензионную :)
Шыншыл 55095 писал(а):2. пока есть режим IM 1 не используй IY - это азы ваще-то. и это самый ебанутый баг ROM.
Ну сорь, наверстываю сейчас что упустил в 90-е :D

Добавлено: 29 май 2018, 13:56
shiny
Ну гуд. просто эмуляторам ваще доверять нельзя.

Добавлено: 29 май 2018, 14:42
Weiv
А ещё прерывания можно запретить. Правда, если используется процедура бипера из ПЗУ, она их включает в конце своей работы, и даже если выключать их сразу после её вызова, прерывание может иногда проскочить. Но если процедуру бипера не использовать, с выключенными прерываниями проблем с регистром IY не будет.

Добавлено: 29 май 2018, 15:40
daniel
а можно не запрещать, вдруг опрос клавы сделан через пзу:

push iy
halt
pop iy

если haltа нет тады ой!

Добавлено: 29 май 2018, 15:46
shiny
ага, заодно LD IY,$5C3A

Добавлено: 30 май 2018, 12:44
Random Great
Опрос клавиатуры происходит по честно стыренной из движка Sam Style процедуре сканирования таблицы
scanKeys:
ld a,(HL)
and a
ret z
inc hl
in a,(0xfe)
and (hl)
inc hl
ld e,(hl)
inc hl
ld d,(hl)
inc hl
jr nz,scanKeys
or 2
ret
Пользуясь случаем заодно спрошу у взрослых дядек-программистов -

можно ли ассемблерную прогу начинать сразу с #5B00? Там же куча места пропадает ?
Snapshot грузится нормально, будут ли потом пороблемы с адаптацией под tap ? :)

Подпрограммы ПЗУ и Basic не использую если что, обработчик прерываний Im2 ставлю свой.
И под tr-dos придется извратиться наверное, особый загрузчик писать..

p.s. в телеграм как раз умная статейка на тему промелькнула - https://retrocoder.d3.ru/raznye-podkhod ... ing=rating

Добавлено: 30 май 2018, 12:56
shiny
в статье написано, что Бейсик 128 использует часть для переключения памяти.

если установлен im 2, то юзай сколько влезет, хотя выигрыш мизерный.

в прежних релизах, если были проблемы с этим участком, то в загручик включали процедуру переключения на режим 48К с открытым портом, и не парились(:

а снапшот от ужясма - это pain in ass - системные переменные засраны. Так что не знаю, на чем скажется.

Добавлено: 30 май 2018, 13:01
kalantaj
Weiv 55099 писал(а):А ещё прерывания можно запретить. Правда, если используется процедура бипера из ПЗУ, она их включает в конце своей работы
А ещё если стандартными процедурами трдос (3d13) пользоваться - тоже включаются прерывания, если мне не изменяет память...

Добавлено: 30 май 2018, 13:31
Weiv
Random Great 55148 писал(а): можно ли ассемблерную прогу начинать сразу с #5B00? Там же куча места пропадает ?
Snapshot грузится нормально, будут ли потом пороблемы с адаптацией под tap ? :)

Подпрограммы ПЗУ и Basic не использую если что, обработчик прерываний Im2 ставлю свой.
И под tr-dos придется извратиться наверное, особый загрузчик писать..

p.s. в телеграм как раз умная статейка на тему промелькнула - https://retrocoder.d3.ru/raznye-podkhod ... ing=rating
Если бейсик и трдос не использовать, можно сразу с #5B00 начинать. Для работоспособности трдос нужна часть её системных переменных и место под буфер, насколько я помню.

Добавлено: 30 май 2018, 13:48
kalantaj
Можно и напрямую программить ВГшку, но это надо заморочиться. Как показывает практика, если перед работой программы чистится экран, я про именно работу самой программы или игры и в самой прграмме не юзать бейсик и не ходить в трдос штатными процедурами, то никто не мншает всё спаковать, записать, а после загрузки кодового блока зачернить экран, кинуть туда распаковщик и распаковать хоть от 5b00 до ffff.

Добавлено: 30 май 2018, 13:51
kalantaj
Ну или кусками паспаковывать если экраная облась должна быть ее засранной. Всё вышесказанное относится больше к 48к, т.к. на 128 проще - вывел содержимое 7 странички и почти вся память тебе в руки.