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

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

Тема: Использование мыши в восьмибитной Атари (Ассемблер).

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

    По умолчанию

    Я думаю, что самое нужное на сегодня - это 64-колоночный редактор программ. С мышью, разумеется.
    Во первых он и русское Ж вместит,.. а во вторых и длинные комментарии к коду.

    Самый лучший и привычный (от MS-DOSa), на сегодня - это редактор MAE.
    Разумеется, с Русским он не в ладах.

    Вот два изображения разных редакторов:

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

Название:	TextWriter.jpg 
Просмотров:	236 
Размер:	18.3 Кб 
ID:	64718

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

Название:	CLSN Pascal.jpg 
Просмотров:	227 
Размер:	22.7 Кб 
ID:	64719

    Мне они больше всего нравятся.

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

    Зато, вот моя демка мыши.
    Её код и данные полностью находятся в области PMG!!! и если мы защитим PMG от ресета, то он будет жив и при перезагрузке.

    Он движет мышь и мигает курсором при нажатии LFB мыши (то есть реагирует на действия).
    Значит, можно использовать соответствующие подпрограммы... Далее, можно использовать даже систему столкновений в ANTIC!

    Увы, этот код не написан на основе библиотек MAE (так просто ляпял сдуру на MAC/65), а теперь переводить его - нихоцца!
    STM1.zip
    Последний раз редактировалось ezswift; 22.03.2018 в 16:30.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

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

    По умолчанию

    Создание текстового редактора - интересная задача.

  3. #13
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    966
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    Создание текстового редактора - интересная задача.
    Она интересная ровно до того момента как додумаешься что текст надо хранить в памяти двумя кусками, от начала памяти до курсора, потом дырка, и хвост до конца памяти. Но это выдумано уже до нас =) Это добавляет сложностей в код навигации, текст от курсора надо рисовать снизу вверх до начала экрана и сверху вниз до его конца. И немного усложняет код сохранения, особенно если в руках нет путней 16битной арифметики. Зато снимает весь остальной геморрой по вставке чегойта в середину. Да, переход из начала в конец документа будет подтупливать, потому-что надо его весь по памяти перетащить чтоб перетащить "дырку". Зато вставка всегда происходит в пустое место, а при навигации "страница вверх"/"страница вниз" нужно двигать по памяти максимум одну страницу, и торопливость этого дела критического значения уже не имеет.

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

    По умолчанию

    На Atari реализовать все же проще. Более замороченно с операциями над текстом.

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

    По умолчанию Плавный подход к PMG

    Хотим мы этого, или не хотим, но самым хардверным артефактом в PMG является жесткая зависимость от GTIA. По факту - от устанавливаемого нами вертикального Разрешения PMG.

    Для двойного разрешения, поток обработки задерживается на время одной линии сканирования и при тех же входных данных, GTIA прорисовывает строку дважды.
    Все вертикальные координаты должны быть сокращены вдвое, иначе, изображения уйдут за экран. Также, изменяется структура памяти.

    Из чего исходить?
    Из жесткой связки - Вертикальное разрешение-Распределение памяти...

    Именно поэтому, во всех руководствах нам рекомендуют:

    1. Сначала, выделить область PMG для конкретного разрешения.

    Вот код на PL65, который правильно устанавливает соотношения. Фактически, это - программа инициализации глобальных данных.

    Код:
    !- Globals ----------
    BYTE pmRes,pmZone,plOffs,vPos
    
    ! Resolution may be Single=1 or Double=2 lines
    PROC pmSetMem(pmRes)
    BEGIN
      IF pmRes=1 THEN
        pmZone=RAMTOP-16
        plOffs=$0400
        plAddr=pmZone*$0100+plOffs
      ELSE
        pmZone=RAMTOP-8
        plOffs=$0200
    	plAddr=pmZone*$0100+plOffs
    	vPos=vPos/2
      ENDIF
    END
    2. Затем, установить требуемые режимы DMA
    Стандартные установки реализуют DMA-чтение DL и PF, в режиме Нормальной ширины экрана.
    Фактически, нам нужно задать Разрешение PMG и к стандартным установкам (SDMCTL=34) добавить чтение Игроков, Ракет, или обоих.

    Порядок инициализации - несущественен, так как оверлей прорисовывается не средствами ANTIC, а средствами GTIA. Я это - к тому, что пока не включена трансляция GTIA, на экран ничего не выводится.

    Для отрисовки курсора нам нужен один Игрок P0.
    Осталось инициализировать DMA-чтение Игроков с заданным разрешением (SDMCTL=58) и, затем, дополнительные параметры отображения. (цвета, ширину и пр.).

    Код:
    PROC pmSetDma()
      CONST mask=%00011000 ! (SGL=16)+(PLDMA=8)
    BEGIN SDMCTL=SDMCTL+mask END
    Вот рабочий код Демки на PL65:

    Код:
    !====================================!
    ! PMGR.PRG                           !
    !------------------------------------!
    ! Evgeny Zolotarev,(aka 576XE), 2018 !
    !====================================!
    
    != Global Data ======================!
    !====================================!
    
    !- Equates --------------------------!
    BYTE RAMTOP=$6A,COLPF2=$02C6
    BYTE PMBASE=$D407,SDMCTL=$022F,GRACTL=$D01D
    BYTE HPOSP0=$D000,SIZEP0=$D008,PCOLR0=$02C0
    !- Player Bitmap --------------------!
    BYTE PLAYER[8]
    DATA
      %10000000,
      %01100000,
      %01111000,
      %00111110,
      %00111100,
      %00011100,
      %00010010,
      %00000001;
    !- Program Variables  ---------------!
    BYTE pmZone,hPos,vPos
    INT p0offs,p0addr
    
    != Procedures & Functions ===========!
    !====================================!
    
    !- Main Procedure -------------------!
    MAIN()
    BEGIN
      GRACTL=0 ! На всякий случай...
      hPos=126 HPOSP0=hPos
      PCOLR0=52 COLPF2=128 SIZEP0=0
      pmZone=RAMTOP-16 p0offs=1024
      p0addr=pmZone*256+p0offs
      FILL(p0addr,256,0) ! Очистка p0zone
      vPos=128 MOVE(.PLAYER,8,p0addr+vPos) ! Прорисовка в нужном месте
      PMBASE=pmZone ! Доложили ANTICу
      SDMCTL=58 ! Добавили plDma+SLR
      GRACTL=2 ! Транслируем Игроков без Ракет
    END
    
    !====================================!
    !------- >>> End Of File <<< --------!
    Вскоре напишем на Ассемблере
    zen
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

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

    По умолчанию

    мелькала ссылка на пример PMG, да трэд пропал

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

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

    По умолчанию

    Чтобы нарисовать в ассемблере Игрока, мы совсем не обязаны производить многие 'стандартные' действия!

    Вот три пути отрисовки PMG:
    I. Рисуем под Дисплей Листом, а значит, заведомо сохраняем данные PF графики.

    Считаем:
    PF занимает ~1k памяти в режиме GR.0
    - Так как нам всё равно надо выравнивать графику PMG по границам, кратным 1-page, так и примем размер PF как 1k. (4 страницы)
    - В SLR размер области PMG добавит ещё 2k, то есть (8 страниц).
    В сумме это = 12 страниц.
    Сугубо не кратно 8 (то-есть 2k)!!!
    Добавляем ещё 4 страницы и Вуаля... Получаем наши (RAMTOP-16).

    II. В случае, если мы хотим расположить 2k PMG над RAMTOP, мы так или иначе должны сместить вектор RAMTOP вниз, на размер PM-области, чтобы основной текст тоже как-то отрисовывать!
    И тогда, мы должны ресетировать GR.0, при этом выравнивание стандартной графики АВТОМАТИЧЕСКИ установит GR.0 ниже RAMTOP. Вот для чего нужен ресет!

    III. В случае, когда Вы сами выбираете адрес базирования PMG (достаточно удалённый от обоих границ!) Вы СОВСЕМ не обязаны ресетировать режим графики, что и показывает Демка с использованием мыши.
    В ней мы прекрасно выводим на экран директорию диска, имея на экране работающую PMG.

    Новая Демка преследует цель ВЫЧИСЛЯТЬ адрес PMG. Затем по-честному Ресетировать графику и отрисовывать курсор.

    Код:
    ; pl0.com
    ; Draws player above working DOS screen
            .ou pl0.com
    ; ====================
    ; Z-page Variables
    zppy    =   $cc           ; Z-page pointer for y
    zppx    =   $ce           ; Z-page pointer for x
    xini    =   $d0           ; initial x value
    yini    =   $d1           ; initial y value
    ; --------------------
    ; Included LIBS
            .in syseq.mae
            .in pmgeq.mae
            .in macro.mae
    ; --------------------
    ; Variables
    stotop  =   $100          ; Temporary storage(adress)
    
    ; ====================
    ; Main PROG
            .or $0600
    start
    ; --------------------
    ; Bump Down RAMTOP
            mab RAMTOP stotop ; Save old RAMTOP
            sec
            sbc #$08
            sta RAMTOP        ; Set new RAMTOP
            sta PMBASE        ; Tell ANTIC
            sta 1+zppx        ; for erase SUBR
            mib 0 zppx
    ; --------------------
    ; Reset GR mode immediately
            ofs 6
            bfa sname
            lda GRMODE
            jsr setgr
    ; --------------------
    ; Init player/missile graphics
            mib 126 xini
            mib 128 yini
            mib $3a SDMCTL    ; Set SLR,PLDMA=on
    ; --------------------
    ; Clear out p0 area of ram
            ldy #0            ; Reverse counter
    erase
            mib $00 (zppx),y
            dey               ; 255->0 counter
            bne erase         ; Wait for 0 in counter
            inc 1+zppx        ; Set next page
            lda 1+zppx        ; Here checks are we done?
            cmp stotop        ; Are we on old RAMTOP?
            beq erase         ; Yes! Clear it from 255->0
            bcc erase         ; No! Continue...
    ; --------------------
    ; Calculate y position
            lda RAMTOP
            clc
            adc #4            ; Go to P0 page in SLR
            sta 1+zppy        ; Set up P0 area
            mab yini zppy     ; y-pos = offset from P0
    ; Draw shape
            ldy #0            ; Normal counter
    draw
            mab shape,y (zppy),y
            iny
            cpy #shlen
            bne draw
            mab xini HPOSP0
            sta zppx
            mib $0e PCOLR0    ; Needed to be refreshed in VBI!
            mib $02 GRACTL
    ;
            rts ; Return to DOS
    ; ====================
    ; Used Subroutines
    
    ; --------------------
    ; Set Up Graphics Mode
    setgr
            pha ; Mode
            jsr close
            pla
            tay               ; Y=Opt (AUX1)
            and #16+32        ; TXTWIN+NoClear
            eor #16           ; flip TXTWIN
            ora #OPUPD        ; Open rw
            jmp open
    
    ; --------------------
    ; Included SUBS
            .in iolib.mae
    ; Needed data
    sname   .by "S:",$9b
    shape   .by %10000000
            .by %01100000
            .by %01111000
            .by %00111110
            .by %00111100
            .by %00011100
            .by %00010010
            .by %00000001
    shlen   = *-shape-1
    ; ====================
    ; Setup Run Address
            .or RUNAD
            .wo start
    ;
            .en
    ; >>> End Of File <<< ;
    Последний раз редактировалось ezswift; 19.04.2018 в 13:09.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

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

    По умолчанию

    Всем Атаристам, ПРИВЕТ!

    Уточнение:
    Я говорил о 64 колонном редакторе! Это существенно.

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

    Видать, это - не тривиальная задача, так как даже под новейшими CON 64 (Зверски быстрые функции (прокрутка и пр.) , бесквирковая работа [квирки в МАЕ - обычная вещь!]), для SDX, редакторов-то, как раз и нет!

    2ram_scan
    Если Вы заметили, мышка в примере работает с максимальной графической для PM точностью.

    То есть графический Y отражается точно, а X , будучи в размере удвоенным, ездит по экрану через две КолорКлоки, то есть с удвоенной скоростью.

    Можно специально загрубить ВОСПРИЯТИЕ передвижения курсора мышки до байта высоты строки и байта ширины знакоместа, тогда Инверсный курсор будет прыгать с центра одного знакоместа на центр другого (при плавном движении стрелки на экране).

    Видел, ранее, как люди делают.

    Однако, ясно, что должнЫ существовать и ЛОГИЧЕСКИЕ структурные переменные текста, такие как - текст До_Курсора и После_Курсора, или - текст До_Экрана и После_Экрана...

    В общем, не зная, как ляпать 64-колоночную панель, я - не в курсе даже как к этому приступить. Ну, не программист я!

    Сейчас, с трудом, занят унификацией интерфейсов контроллеров.
    Где-то словил логическую ошибку, и по осям движение ПОЧТИ предсказуемое, однако пока глуповастое...
    Исправлял костылями и где-то улучшил, а где-то испортил.

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

Страница 2 из 2 ПерваяПервая 12

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

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

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

Похожие темы

  1. Атари ассемблер
    от atariki в разделе Atari
    Ответов: 220
    Последнее: 31.03.2022, 07:41
  2. Эмуляция мыши на джойстика
    от Граф Куракин в разделе Поиск
    Ответов: 4
    Последнее: 19.10.2013, 14:07
  3. Чувствительность Kempston мыши
    от wally в разделе Устройства ввода
    Ответов: 7
    Последнее: 21.12.2006, 11:43
  4. кнопки мыши в BGE 3.05
    от SaaB в разделе Графика
    Ответов: 8
    Последнее: 04.03.2006, 16:53
  5. Подключение кемпстон мыши
    от Aprisobal в разделе Устройства ввода
    Ответов: 14
    Последнее: 10.02.2005, 15:04

Ваши права

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