Если стек есть, не должно такого быть. А вот если стека нет (т.е. SP указывает не в память, а куда-то в пустое место, или в ПЗУ) возможны всякие чудеса, причем на разных ЦП разнообразные.
Вид для печати
Ну, по сути, на первое прерывание накладывается второе - таймаут от памяти или что то ещё - тут как бы понятно - нехрен левый код писать. Кстати, интересно, если стек указывает в ПЗУ, а ПЗУ на сигнал записи бодро рапортует - ок, всё записала - то хрень будет ещё цветней
Вот я и хочу уточнить, что уважаемый MM имел ввиду :)
В БКшках на 1801ВМ1, там нет регистров пульта ( на МПИ), в связи с этим дело с R6 несколько сложнее.
Так же этот момент может зависить от набора ИС проца, и его микрокода, особенно на секционных и составных процах.
- - - Добавлено - - -
Если кто грамотный, расскажите, возможен ли пуск 1831ВМ1 на задание пользователя, при условии отсуствия терминала 177560 ?
Что произойдет, если встретится команда 000000 и нет терминала 177560 ?
Все проще. 1801-е процессоры, вместо встроенной микропрограммы микро-ODT, имеют т.наз. Halt-Mode, в которой исполняется специальная пультовая программа, расположенная в ПЗУ. У 1801ВМ1 при переключении в Halt-Mode весьма затейливо перепланируется страница ввода-вывода - кое-где включаются дополнительные кусочки ПЗУ, кое-где ОЗУ из 7-го банка - физически-то там 64К, пользователю из них доступно 56К, некоторые кусочки из оставшихся 8К используются пультовой программой. Всё это реализовано в 1201.01 и ее вариантах. А вот на БК-шке ничего этого нет, из-за чего и нужны какие-то дополнительные средства.
- - - Добавлено - - -
Это же М8, цельноутянутый с 11/73, да? Э-60 (М2) при наличии отсутствия 177560/66 банально зацикливала на обращении к 177564, как там у М8 не знаю, но подозреваю, что должно быть похоже. Ну и запуск с 24 вектора или с ПЗУ 173000, по идее, должен пройти нормально. А КЦГД воткнуть не ку?
Удаление в знак протеста против действий MM
С полной платой ДВК КНГМД МХ - "всю дорожку", выделение секторов - программное в драйвере.
С контроллерами МФМ на основе 1801ВП1-128 - посекторное, при этом проц должен обеспечивать не менее ~360 т.рег-рег быстродействия, при работе с ВП1-128.
Контроллер КМД ДВК ( полуплата )- имеет свой проц и буферное СОЗУ, и может работать с очень медленным процессорами М1-М2 Э-60.
Удаление в знак протеста против действий MM
Кто-нибудь пробовал изменять адрес ВОЗУ в таблице строк на ОЗУ ЦП, например на 40000?
Во всех текстах по этому поводу сплошная интрига, "прямой доступ к ВОЗУ быстрее, но мы рассмотрим его в следующий раз..." как то так :)
Что в итоге получится? третий план будет в ОЗУ ПП, а в ЦП что происходит? Будет 2х битная графика как в БК (запретить 3й план?) или есть нюансы?
Есть у кого пример?
https://github.com/aberranth/chibiak...aster/main.mac
Делал как раз для оценки скорости. В примере, асинхронно, на обоих процессорах запускается программа записывающая в видеопамять.
- - - Добавлено - - -
В целом - вполне обнадёживающий результат.
С чем связан выбор адреса для битпланов 11240?
Почему 11240 уже не помню. Смысл в том что нужно попасть в нижние 32КБ памяти, при этом адрес строки в таблице строк соответсвует адресу в памяти ПП, а адреса битпланов в памяти ЦП идут со сдвигом.
Мне например неясно, почему высчитвая сдвиг для битплана 1 мне пришлось вычесть 280...
/* нужно попасть в нижние 32КБ памяти */
Наверное чтобы ПП осталась память.. у него же 32кб.
........
недостаточно памяти для запуска :(
Хм, обычно я гружусь с HDD и в starts.com у меня прописано
SET EXIT SWAP
SET USR SWAP
возможно поэтому у меня запускалось без ошибок.
Удаление в знак протеста против действий MM
Почистил starts.com - запустилась.
Обратил внимание, что на гитхабе более старая версия, в другой, с развёртыванием циклов работает шустрее, но изображение правда так и не слилось в одно, на это уже не хватает скорости.
В демо первый битплан пишет ЦП, а во второй ПП?
...
Малость запутался:
видимая часть это BP0+18*40 и размером (288*40)? а то я попробовал, что-то не так получается.
Спрайты лучше хранить отдельно битпланами?
битплан 0 в адресном прострастве ПП
битпланы 1 и 2 в адресном пространсве ЦП
Вообще, не помню где читал, организации памяти у машинки такая:
есть три банка памяти по 64КБ, с 8-ми битным доступом
соответсвенно, банк 0 у ПП - младшие 32КБ ОЗУ ПП, старшие - видеопамять (и отсюда 8-ми битная шина данных связывающаяя память и контроллер ОЗУ ПП)
банки 1 и 2 у ЦП, банк 1 - младший байт слова, банк 2 - старший байт слова, и по аналогии с ПП - младшие 32КБ(два банка дают 64КБ) это ОЗУ ЦП, старшие видепамять.
- - - Добавлено - - -
видимая часть начинается c BP0 в ОЗУ ПП и BP1 в ОЗУ ЦП
- - - Добавлено - - -
Проще всего использовать только два битплана доступные ЦП, а там получается что, слово процессора включает по байту из обоих битпланов.
А BP2 судя по всему BP1+<WPBP*2> - 280. ?
банк 1 - младший байт слова, банк 2 - старший байт слова
если я правильно понял графику нужно хранить: Четные байты в одном блоке нечетные в другом?
... поэтому у меня полосатость получалась. как же блин спрайты хранить :( их же еще по точкам нужно двигать...
для полного счастья не хватает чтобы с инверсией и биты в обратном порядке... :)
....
попробовал очистку сделать.. вроде работает..
и еще внизу стек шевелится..
я его тоже очищаю с фатальным результатом :)
Каждый бит цвета хранится в отдельном банке памяти. Контроллер памяти ЦП подставляет байты банка 1 в чётные адреса, байты банка 2 в нечётные адреса. Байт 0 бит-плана 1 имеет адрес BP1, байт 0 бит плана 2 имеет адрес BP1+1 и т.д. в шахматном порядке.
Если банки 0, 1 и 2 обозначить как B, G, R, то в одном слове получается такое расположение бит | 7R 6R 5R 4R 3R 2R 1R 0R | 7G 6G 5G 4G 3G 2G 1G 0G |
Интересно как будет выглядеть алгоритм движения спрайта по точкам.. и будет ли быстро.
допер..
если например двигаемся влево то:
кладем в младший байт, сдвигаем влево.. и эти 2 байта уже кладем в свой план.. те через один..
так для обоих планов и для маски..
А ПП знает, что у него в памяти целый битплан образовался?
Меня смущает, что под верхней служебной строкой вылазит мерцающая строчка.. как стек.
В демке прерывания отключены, а если их включить всякая ерунда вылазит.. скрол вообще что попало творит.
может служебные строки не трогать? И как-то заблокировать запись в битплан который в ПП.
Единственное что он "знает", это то что "он" выделил регион памяти под наши нужды.
Тут только один выход - вешать свои обработчики прерываний.
Не нужно ничего блокировать, достаточно переопределить цвета таким образом, чтобы бит битплана ПП ни на что не влиял, то есть задавая цвета в таблице строк, внести одинаковые цвета для случаев когда он установлен и когда нет.
При сборке в SAV стэк конец кода ставится?
Не могу понять что за полоски.. сверху изменяется, снизу просто мусор:
https://yadi.sk/i/veyV7XmFP614UQ
ЕМНИП, то по умолчанию (если не играться .ASECT секциями) все из .OBJ размещается с адреса 1000(8) и указатель стека на тот же адрес 1000(8).
Щас гляну
- - - Добавлено - - -
Да, так
- - - Добавлено - - -
http://bitsavers.informatik.uni-stut...nual_Aug91.pdf
Есть ли простой способ вернуть значения по умолчанию в таблице строк?
код 4 по моему только рулон упорядочивает
Думаю что будет достаточно вызвать подпрограмму, которая вот здесь в самомо начале листинга.
- - - Добавлено - - -
Тольк как её вызвать из программы ЦП...
Удаление в знак протеста против действий MM
Для резервирования памяти под экран можно использовать сплэшскрин:
https://yadi.sk/i/fEaMpdl1ZibuVA
с битпланами разобрался, одна проблема мигающая строка вверху.. см. картинку.
Мигает с частотой курсора.. как бы ее прибить...
/* приходилось в конце резервировать память под стек */
Да я так и сделал. Но почему так, это же косяк...?
Это не косяк. Это не совсем по феншую использование стека :)
Поскольку в PDP-11 он растёт вниз - традиционно он в начале программы.
При таком подходе есть риск запороть вектора прерываний, но если программа работает с включённым ДП (RT-11XM, TSX, RSX), то блок векторов прерываний (опять же - традиционный размер 0-376(8) или 0-максимальный используемый) как правило не задействован (кроме некоторых ячеек в самом низу - зависит от операционки) - и для стека доступен больший объем ОЗУ.
Если выделять блок памяти выделять в конце программы - риск потереть верхушку кода или данных программы. И более интересные чудеса :)
Как мне кажется, лучше наверное использовать традиционный подход, а так же желательно прикинуть потребную глубину стека (если нет рекурсии - в принципе возможно) - и при линковке программы указать
Удаление в знак протеста против действий MM
/* Переопределите там палитру. */
Хотелось бы туда тоже рисовать.. пробовал менять адреса строк с 1 по 18.. мигалка эта не уходит..
может это "невидимая" строчка (или что там под служебной строкой) и ее как буфер что-то использует?
...
Я уже склоняюсь к тому, что хоть прямой доступ и хорош по скорости, но при этом памяти не остается от слова "совсем"..
написать что-то серьезное не реально, демку какую возможно...
...
А курсор можно выключить? (по простому)
и еще что я делаю не так?
MOV #100000, R3
MOV R3, @#176640
MOV #SPLASH, R1
MOV R4,3840. ; ***********
1$: MOV (R1)+, R0
MOV R0, @#176642
INC @#176640
SOB R4, 1$
Что бы ни писал в R4-- крутит 55000, если поменять на R2.. крутит ~320 раз
короче пофиг что в счетчик записываю... :(
Удаление в знак протеста против действий MM
если установить режим экрана 40Х24 у вас будет две страницы,
1-я видимая, вторая как бы справа висит за границей экрана (именно справа "смайл"),
между ними можно переключаться.
курсор можно сделать 0 цветом
есть верхняя и нижняя служебные строки у них свои адрес начала и конца в памяти
читайте все советы в архиве где Alex_K комментирует документация (я же выше писал где брать Феликса архив скачайте!)
/*Или это ошибка */
Это все x86, подсознательно написал.
/*есть верхняя и нижняя служебные строки у них свои адрес начала и конца в памяти*/
Да я уже как бы в курсе, я спросил есть ли простой способ (например ПП в ПЗУ) чем каждый раз таблицу строк переписывать...
.. пп.. выкл. курсор
.. пп. переключить экран 0-1