Важная информация

User Tag List

Страница 16 из 23 ПерваяПервая ... 121314151617181920 ... ПоследняяПоследняя
Показано с 151 по 160 из 221

Тема: Атари ассемблер

  1. #151
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от atariki Посмотреть сообщение
    ну вот допустим захотел я джойстиком погонять точку по экрану в gr.0, как мне логически рассуждать в ассемблере для написания этой программы ?
    Добрый денёк, atariki.

    Ну, чтобы пиксель гонять по экрану, надо объединить графику 0 с графикой 8.
    Это сделать можно, но там свои проблемы...
    А вот, чтобы погонять знакоместо (курсор) по экрану в ДОСе, могу предоставить ассемблерную программку...

    Рассуждаем следующим образом...

    1) Что гоняет курсор по экрану?
    - При нажатии на клаве стрелки, код клавиши идёт в системную программу преобразования кодов в буквы(ATASCII) и окончательно оседает в однобайтовом теневом буфере ввода CH.
    Таким образом, зная коды стрелок и анализируя положение джойстика, мы можем руководствуясь джойстиком, по нашему желанию подменять коды в регистре CH. Тогда при следующем VBI, наши коды будут двигать системный курсор.

    2) Когда подменять коды в CH?
    - Так как машинка не должна знать, что мы подменяем коды, надо делать это в прерывании по Вертикальному Бланку (по кадрам экрана).

    3) Где поместить программу VBI?
    - Программка достаточно короткая (~40 байт), чтобы быть помещена где угодно!!! В частности, я помещал её в конце аппаратного стека и стек никогда её не затирал.

    4) Какой режим VBI выбрать?
    - Я выбрал Immediate, так как у этого режима около 60 свободных циклов, но можно и Deferred - без разницы.

    5) Какой будет скорость курсора?
    - Нормальная для меня скорость курсора это считывание данных джойстика каждый пятый кадр экрана. (Счётчик кадров должен меняться от 4 до 0). Большие значения счётчика замедляют движение.

    А вот и сама программа.
    Код:
    ; Джойстик-курсор
    ; jc.com
            .ou jc.com
    
    ; ====================
    ; Ярлыки
    SETVBV  =   $e45c    ; Вектор установки VBI.
    SYSVBV  =   $e45f    ; Возврат на системный VBI.
    STICK0  =   $0278    ; Теневой регистр джойстика.
    RUNAD   =   $02e0    ; Адрес запуска программы
    CH      =   $02fc    ; Теневой буфер текстовых кодов
    
    ; --------------------
    ; Константы
    vbmode  =   6        ; Режим VBI=Immediate
    speed   =   $04      ; Скорость курсора.
    cur.up  =   142      ; Величины кодов стрелок...
    cur.dn  =   143
    cur.lt  =   134
    cur.rt  =   135
    
    ; ====================
    ; Главная программа
            .or $0110    ; Конец стека
    start   jmp init     ; Переход на подпрограмму инициализации
                         ; прерывания по VBI
    
    ; --------------------
    ; Блок данных
    keytab  .by cur.up,cur.dn
            .by cur.lt,cur.rt
    counter .by 2
    
    ; --------------------
    ; Инициализация прерывания VBI
    init
            ldy #<vbi    ; LSB исполняемой части VBI 
            ldx #>vbi    ; MSB исполняемой части VBI
            lda #vbmode  ; Режим VBI
            jsr SETVBV
    ;
            rts          ; Возврат в ДОС после инициализации VBI
    
    ; ====================
    ; Подпрограмма исполняемой части VBI
    vbi
            dec counter  ; Уменьшаем счётчик пропуска считываний джойстика.
            bne done     ; Если не дошел до нуля,
                         ; переходим на системный VBI.
            lda #speed   ; Если ноль,..
            sta counter  ; обновляем счётчик пропуска считываний джойстика.
    ;
            lda STICK0   ; Затем, считываем джойстик
            eor #$0f     ; Проводим проверку на движение ручки.
    ; Число $0f равно 15, а это значение, если ручка НЕ ДВИГАЛАСЬ!
    ; eor (Исключающее ИЛИ) ИНВЕРТИРУЕТ данные в Аккумуляторе и
    ; в случае, если там было 15, станет 0.
    
    ; При анализе положения ручки будут исследоваться уже ИНВЕРТИРОВАННЫЕ данные!!!
    
            beq done     ; Если ноль, джойстик не двигался и мы
                         ; переходим на системный VBI.
    ;
            ldx #$ff     ; Если двигался, устанавливаем в 255 (reset)
                         ; селектор считывания таблицы кодов стрелок.
                         ; По сути - это смещение в регистре X.
    chkstk
            inx          ; Чтобы перейти к следующему значению в таблице,
                         ; увеличиваем смещение.
                         ; В случае, если мы реинициализировали селектор,
                         ; вспоминаем, что в однобайтных вычислениях $ff+$01=$00,
                         ; то есть смещение равно нулю и селектор показывает
                         ; на первое значение в таблице.
            lsr a        ; Так как в аккумуляторе у нас ИНВЕРТИРОВАННОЕ значение
                         ; данных джойстика, сдвинем логически биты вправо.
                         ; При этом сдвинутый бит помещается во флаг статуса Carry.
            bcc chkstk   ; Если в Carry ноль, значит в этом направлении
                         ; джойстик не двигался, проверяем следующее направление...
            lda keytab,x ; Если движение было, берём соответствующее значение
                         ; данных курсора из таблицы
            sta CH       ; и заносим их в теневой буфер CH
    done
            jmp SYSVBV   ; переходим к системному VBI.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  2. #151
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #152
    Activist Аватар для atariki
    Регистрация
    22.01.2011
    Адрес
    г. Кирово - Чепецк
    Сообщений
    308
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не работает программа.
    Нажмите на изображение для увеличения. 

Название:	Ashampoo_Snap_9 сентября 2017 г._17h38m36s_001_File View.jpg 
Просмотров:	190 
Размер:	19.3 Кб 
ID:	62177
    Последний раз редактировалось atariki; 09.09.2017 в 17:39.
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  4. #153
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,155
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    23 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .or $0110 ; Конец стека
    triple facepalm

    - - - Добавлено - - -

    Кстати, тебя пример запутает, наверное, глянь:
    http://hype.retroscene.org/blog/597.html

  5. #154
    Activist Аватар для atariki
    Регистрация
    22.01.2011
    Адрес
    г. Кирово - Чепецк
    Сообщений
    308
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    MAE не хочет грузиться с диска на железе, только если вытащить файл mae40.com с образа и загрузив на железе он перестаёт видеть sio2sd, как так ?

    - - - Добавлено - - -

    Зато пишет на кассету через команду C: а через D: или D1: - Error -130
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  6. #155
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Atariki
    В стандартной поставке MAE загружается только в расширенную память!
    То есть начиная с 130XE.

    Так как у меня расширение 576XE, я сделал образы для него.
    Грузится как на эмуляторе, так и на железе.

    Существуют и описаны процедуры установки MAE в системную память.
    Вот ссылка на мануал http://mixinc.net/atari/mae.htm

    Шынни
    Стек прирастает сверху вниз, пустой стэк имеет смещение $FF, поэтому, младшие адреса и есть конец стека. (Или вершина, если угодно...)

    ez
    Последний раз редактировалось ezswift; 12.09.2017 в 03:19.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  7. #156
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,155
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    23 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ezswift Посмотреть сообщение
    Стек прирастает сверху вниз, пустой стэк имеет смещение $FF, поэтому, младшие адреса и есть конец стека. (Или вершина, если угодно...)
    А разместить код в свободной 6й странице религия не позволяет?

  8. #157
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нет проблем.
    .or $0600
    и всего-то делов...

    У меня в этом коде была с другим заморочка.

    Я не учёл, что инициализация возможне не только из ассемблера, но и из бейсика.
    Из-за этого промежутки между движениями курсора были ОГРОМАДНЫМИ. Я вообще думал, что прога нерабочая...
    Однако, Джон Хэлидэй помог. Нашёл бяку.

    Славься Ди, Славься Ди ... !!!

    В общем, я же говорил, что я - не программист вовсе, хотя и люблю покумекать.

    ZEN (Вот такие у меня инициалы... типа, Дзен)
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  9. #158
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,155
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    23 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не касается Атари, но трюки со стеком иногда - моветон. Я одну такую долго вылавливал, когда нашел - появилось желание грохнуть автора.

    Нашел на интересном сайте:
    Код:
    	CMP	#$80		; copy the sign bit to the carry bit		
    	ROR	A		; effectively perform a true ASR
    арифметический сдвиг вправо(или деление на 2 со знаком)

  10. #159
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Шынни, никогда не знал об этом сайте.
    Буду посмотреть...

    Что касается аппаратного стэка, моветон, почти всегда. Абсолютно согласен!

    Сейчас, болтаю с FJC (Джоном Хэллидэем) о необходимости 64 колоночного вывода на экран.
    Уже речь зашла о картридже.

    Не знаю, что он ответит, но программировать безусловно лучше на 64 колонках.

    zen
    Последний раз редактировалось ezswift; 14.09.2017 в 15:32.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  11. #160
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,155
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    23 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати, использование стека встретилось - распаковщик помещен не пойми куда. Как результат - SelfTest (:

    В общем, с момента освоения усвоили, что 6я страница - нашевсе.

Страница 16 из 23 ПерваяПервая ... 121314151617181920 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ПК8000 - Ассемблер
    от scaraby в разделе ПК8000
    Ответов: 9
    Последнее: 16.12.2018, 11:00
  2. Ассемблер для 48к на ленте
    от newart в разделе Программирование
    Ответов: 37
    Последнее: 20.09.2015, 22:48
  3. Переведите на ассемблер
    от Руслан в разделе Программирование
    Ответов: 2
    Последнее: 06.08.2012, 23:41
  4. Ассемблер Z-80
    от sergey2b в разделе Пресса
    Ответов: 12
    Последнее: 11.07.2011, 23:41

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •