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

User Tag List

Страница 5 из 23 ПерваяПервая 123456789 ... ПоследняяПоследняя
Показано с 41 по 50 из 221

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

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

    По умолчанию Готовая пропраммулька

    Вот готовая программа.
    Консоль работает!

    Самое странное, с чем столкнулся - это с тем, что некоторые версии MAC/65 не поддерживают символа подчёркивания.
    Ничего страшного. Можно заменить в тексте какой нибудь буковкой.

    Код:
    1000 ; CONSOL STATUS ROUTINE
    1010 ;
    1020 ; ATARI EQUATES
    1030 SDMCTL = $022F
    1040 SDLSTL = $0230
    1050 SDLSTH = $0231
    1060 CONSOL = $D01F
    1070 SETVBV = $E45C
    1080 SYSVBV = $E45F
    1090 ;
    1100 ; PROGRAM CONSTANTS
    1110 BL1 =   $00
    1120 BL7 =   $60
    1130 BL8 =   $70
    1140 GR0 =   $02
    1150 LMS =   $40
    1160 JTO =   $01
    1170 JVB =   $41
    1180 ;
    1190 ; Z-PAGE CELLS
    1200 Z_OLDL = $C0
    1210 ;
    1220     .OPT LIST,OBJ
    1230 ;
    1240 START *= $2000
    1250     JMP INIT
    1260 ;
    1270 DLDATA
    1280 L0  .SBYTE "  Consol: /START/ /SELECT/ /OPTION/     "
    1290 L1  .SBYTE "  Consol: /Start/ /SELECT/ /OPTION/     "
    1300 L2  .SBYTE "  Consol: /START/ /Select/ /OPTION/     "
    1310 L3  .SBYTE "  Consol: /Start/ /Select/ /OPTION/     "
    1320 L4  .SBYTE "  Consol: /START/ /SELECT/ /Option/     "
    1330 L5  .SBYTE "  Consol: /Start/ /SELECT/ /Option/     "
    1340 L6  .SBYTE "  Consol: /START/ /Select/ /Option/     "
    1350 L7  .SBYTE "  Consol: /Start/ /Select/ /Option/     "
    1360 ;
    1370 NEW_DL
    1380     .BYTE BL8,BL7
    1390     .BYTE GR0+LMS
    1400 LMSADR
    1410     .WORD 0
    1420     .BYTE JTO
    1430 TO_OLD
    1440     .WORD 0
    1450 ;
    1460 VBI
    1470     LDA CONSOL
    1480     ASL A
    1490     TAY 
    1500     LDA TABRET,Y
    1510     STA LMSADR
    1520     INY 
    1530     LDA TABRET,Y
    1540     STA LMSADR+1
    1550 ;
    1560     JMP EXIT
    1570 ;
    1580 INIT
    1590     LDA #$06
    1600     LDX # >VBI
    1610     LDY # <VBI
    1620     JSR SETVBV
    1630 ;
    1640     LDA CONSOL
    1650     STA OLDCON
    1660 ;
    1670     LDA #$00
    1680     STA SDMCTL
    1690 ;
    1700     LDA SDLSTL
    1710     STA Z_OLDL
    1720     CLC 
    1730     ADC #3
    1740     STA TO_OLD
    1750 ;
    1760     LDA SDLSTH
    1770     STA Z_OLDL+1
    1780     STA TO_OLD+1
    1790 ;
    1800     LDA # <NEW_DL
    1810     STA SDLSTL
    1820     LDY #30
    1830     STA (Z_OLDL),Y
    1840 ;
    1850     LDA # >NEW_DL
    1860     STA SDLSTH
    1870     LDY #31
    1880     STA (Z_OLDL),Y
    1890 ;
    1900     LDA #$22
    1910     STA SDMCTL
    1920 ;
    1930     RTS 
    1940 ;
    1950 EXIT
    1960     LDA CONSOL
    1970     STA OLDCON
    1980     JMP SYSVBV
    1990 ;
    2000 OLDCON
    2010     .BYTE 0
    2020 TABRET
    2030     .WORD L0,L1,L2,L3
    2040     .WORD L4,L5,L6,L7
    В тексте можно применить инверсию текста для нажатых клавиш.
    Но вместо инверсных букв появятся кракозябры. Не стал.

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

    Да, кстати, тут где-то вопрос о применении HW-ячеек, типа DMACTL вставал.
    Тех, которые каждый раз переписываются на этапе обработки подпрограммы SYSVBV во время обратного хода луча...
    Лучше их не трогать вообще.
    Их адреса не сдуру переписываются из Теневых Регистров.

    Представим загрузку картриджа, который тоже HW-периферия.
    При включении он перехватывает у программы стандартной загрузки управление и производит свою настройку программой инициализации.
    Разумеется, переменные, связанные с настройкой картриджа, он помещает в ОЗУ. Сам-то он ПЗУ!!!
    Как раз стандартизированная система переменных для любого оборудования и есть Теневые Регистры на второй странице памяти. (Первая занята аппаратным стеком.)
    Разумеется, нормальная загрузка Атари подразумевает ТО ЖЕ САМОЕ, так как ATARI OS (Атарьская прошивка) тоже расположена в ПЗУ.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  2. #42
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ezswift, без комментариев мало понятно, что Вы делаете.
    и один момент: а почему при обработке вектора прерывания VBLANK не сохраняются регистры A/Y ?

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

    По умолчанию

    Не знаю как проще, но чтобы перехватить картриджу управление он ОБЯЗАН представить данные о своих настройках, в ОЗУ,
    В СПЕЦИАЛЬНО ОТВЕДЁННЫХ МЕСТАХ, чтобы затем к ним могли обратиться системные программы Атари СТАНДАРТНЫМ ОБРАЗОМ.
    А системные программы как раз и производят из этих МЕСТ настройку реального оборудования,
    путём постоянного переписывания данных из теневых регистров в HW-регистры.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  4. #44
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а регистры? насколько я знаю A,X,Y сохраняются при DLI.

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

    По умолчанию Исправленный текст

    2denpopov.
    Вот исправленный текст программки
    Код:
    1000 ; CONSOL STATUS ROUTINE
    1010 ;
    1020 ; ATARI EQUATES
    1030 SDMCTL = $022F
    1040 SDLSTL = $0230
    1050 SDLSTH = $0231
    1060 CONSOL = $D01F
    1070 SETVBV = $E45C
    1080 SYSVBV = $E45F
    1090 ;
    1100 ; PROGRAM CONSTANTS
    1110 BL1 =   $00
    1120 BL7 =   $60
    1130 BL8 =   $70
    1140 GR0 =   $02
    1150 LMS =   $40
    1160 JTO =   $01
    1170 JVB =   $41
    1180 ;
    1190 ; Z-PAGE CELLS
    1200 Z_OLDL = $C0
    1210 ;
    1220     .OPT LIST,OBJ
    1230 ;
    1240 START *= $2000
    1250     JMP INIT
    1260 ;
    1270 DLDATA
    1280 L0  .SBYTE "  Consol: /START/ /SELECT/ /OPTION/     "
    1290 L1  .SBYTE "  Consol: /Start/ /SELECT/ /OPTION/     "
    1300 L2  .SBYTE "  Consol: /START/ /Select/ /OPTION/     "
    1310 L3  .SBYTE "  Consol: /Start/ /Select/ /OPTION/     "
    1320 L4  .SBYTE "  Consol: /START/ /SELECT/ /Option/     "
    1330 L5  .SBYTE "  Consol: /Start/ /SELECT/ /Option/     "
    1340 L6  .SBYTE "  Consol: /START/ /Select/ /Option/     "
    1350 L7  .SBYTE "  Consol: /Start/ /Select/ /Option/     "
    1360 ;
    1370 TABRET
    1380     .WORD L0,L1,L2,L3
    1390     .WORD L4,L5,L6,L7
    1400 ;
    1410 NEW_DL
    1420     .BYTE BL8,BL7
    1430     .BYTE GR0+LMS
    1440 LMSADR
    1450     .WORD 0
    1460     .BYTE JTO
    1470 TO_OLD
    1480     .WORD 0
    1490 ;
    1500 VBI
    1510     LDA CONSOL
    1520     ASL A
    1530     TAY 
    1540     LDA TABRET,Y
    1550     STA LMSADR
    1560     INY 
    1570     LDA TABRET,Y
    1580     STA LMSADR+1
    1590     JMP SYSVBV
    1600 ;
    1610 INIT
    1620     LDA #$06
    1630     LDX # >VBI
    1640     LDY # <VBI
    1650     JSR SETVBV
    1660 ;
    1670     LDA #$00
    1680     STA SDMCTL
    1690 ;
    1700     LDA SDLSTL
    1710     STA Z_OLDL
    1720     CLC 
    1730     ADC #3
    1740     STA TO_OLD
    1750     LDA SDLSTH
    1760     STA Z_OLDL+1
    1770     STA TO_OLD+1
    1780 ;
    1790     LDA # <NEW_DL
    1800     STA SDLSTL
    1810     LDY #30
    1820     STA (Z_OLDL),Y
    1830     LDA # >NEW_DL
    1840     STA SDLSTH
    1850     LDY #31
    1860     STA (Z_OLDL),Y
    1870 ;
    1880     LDA #$22
    1890     STA SDMCTL
    1900     RTS
    Ну, реально-то регистры на стеке сохраняются только для правильного вызова машкодов из программ Бейсика и для правильного возврата в Бейсик.

    А моя программулька целиком написана на Ассемблере.

    Попробую описать, что она делает:

    В строчках 1000-1210 я обозначаю адреса ячеек, константы программы и адреса переменных, с которыми программе предстоит работать.

    В строчке 1220 я говорю ассемблеру, что мне нужен листинг для печати и занесение в память машкодов.

    В строчке 1240 я задаю Адрес START, с которого машкоды должны заноситься.

    Строка 1250 сразу же занесёт три байта машкодов, начиная с этого Адреса - команду JMP и два байта адреса INIT.

    Строки 1280-1350 тоже будут заноситься в последующие адреса в виде SBYTE - (представлены во внутреннем экранном представлении Атари)

    Строки 1370-1390 представляют собой адреса по соответствующим меткам, то есть адреса начала наших экранных строчек.

    Далее строки 1410-1480 тоже будут заноситься в последующие адреса - это команды и данные нового дисплей листа. Старый дисплей лист остаётся до поры нетронутым.

    Строки 1500-1590 представляют собой коды программы VBI. Они заносятся последовательно в машкодах в память, но обращения к ним не будет, пока не выполнена подпрограммка инициализации VBI.


    Делает VBI следующее:

    1510 - Загружает значение CONSOL в Аккумулятор (значение от нуля до семи).

    1520 - умножает значение Аккумулятора на 2 (значение 0-14 с шагом 2)

    1530 - Загружает в регистр Y значение из Аккумулятора (Это будет ИНДЕКС)

    1540 - Загружает в Аккумулятор значение из таблицы Адресов наших текстовых строчек - TABRET, со смещением от начала таблицы равным ИНДЕКСУ из регистра Y. Так как шаг смещения 2, то все они будут - LSB (младшие байты двухбайтовых адресов)

    1550 - полученный LSB загружается в LSB в нашем Дисплей листе, там где команда считывания на экран строк - LMS.
    (При прорисовки экрана именно эта строчка появится в нашей статусной строке!)

    1560 - Увеличиваем наше смещение в регистре Y на 1, чтобы уже указывал на MSB адресов. Порядок байт в памяти Little Endian.

    1570 - Загружает в Аккумулятор значение из таблицы Адресов наших текстовых строчек - TABRET, со смещением от начала таблицы равным ИНДЕКСУ из регистра Y, уже увеличенным на 1. Все они будут теперь - MSB (старшие байты двухбайтовых адресов)

    1580 - полученный MSB загружается в MSB в нашем Дисплей листе, там где команда считывания на экран строк - LMS.
    С этого момента Команда LMS дисплейного листа полностью инициализирована.

    1590 - Переход по вектору системной подпрограммы выхода из Immediate VBI.
    (Важно знать, что эта подпрограмма в конце имеет RTS, а поэтому чисто произведёт выход из VBI)

    1610 - 1900 программа инициализации всех настроек нашей программы.
    1620 - 1650 подпрограммка инициализации Системного Установщика Immediate VBI.

    Для Immediate VBI:
    в Аккумуляторе должна быть 6
    в регистре X - MSB адреса начала подпрограммы (Метка VBI)
    в регистре Y - LSB адреса начала подпрограммы
    После этого должен быть вызов JMP SYSVBV (Системный установщик)

    Вуаля! VBI работает!

    1670 - 1890 Инициализация нашего дисплейного листа
    МЫ ОБ ЭТОМ УЖЕ ПИСАЛИ!!!

    1900 - выход в вызывающую подпрограмму!!! У нас в ДОС!

    Задаю вопрос.
    Чем занят комп, когда он включён, а на нём никто не работает и все устройства простаивают?

    ОТВЕТ:
    Он отрабатывает REPL!!! Read Eval Print Loop.
    В ДОСе REPL свой, в Бейсике свой в Лиспе свой.
    По сути, REPL - это закольцованная программа состоящая из:
    1. Ввода
    2. Вычисления
    3. Вывода (Печать на экран или другое оконечное устройство),
    а потом снова ожидание ввода ...

    Вот в этот цикл REPL и возвращает нас RTS!
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

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

    По умолчанию

    что - то я не могу всё это переварить (((
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

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

  8. #47
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от atariki Посмотреть сообщение
    что - то я не могу всё это переварить (((
    да все просто, но замороченно.
    программа инициализирует прерывание VBlank(прерывание перед каждым кадром), сам вектор опрашивает значение ячейки CONSOL( адрес $D01F) и выводит строку на экран, что нажато из клавиш - Start/Select/Option.
    Параллельно формируется DisplayList, который состоит из двух частей:
    одна адресована для строки состояния и переход на "остаток" Display List.

    читай Atari Mapping, которую я тебе перезалил и сопоставь с русской версией, которую ты выложил.Качество скана паршивое, конечно, но разобраться можно.

    один вопрос: что ты хочешь? просто так изучить бесполезно имхо.
    А вот написать игрушку - это другое.

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

    По умолчанию

    не просто так конечно же ))) да хотелось бы игру написать интересную, задумки есть.
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  10. #49
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от atariki Посмотреть сообщение
    да хотелось бы игру написать интересную, задумки есть
    ну опиши примерно, чтонить подумаем

    по сути программирование, если не системное - это графика и форматы хранения данных и Display List, в аркадах еще и спрайты PMG и мизер прерываний. Ну и шрифты для 5ти текстовых режимов(:

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

    По умолчанию

    ну что то типа бегающего сантехника, который чинит поломанные трубы и ему мешают там всякие нехорошие персонажи ну и в конце надо замесить босса и выйти победителем. игра типа комнаты, можно добавить интересностей типа нашёл ключ, открыл сейф, собрал узел - унёс установил. всякие там преграды типа: вот тут идёт пар, нужно уйти туда-то закрыть вентиль и потом отремонтировать. Игра начнётся глубоко внизу и перс будет подниматься выше и выше, когда он всё починит на верху стоит завод и он заработает. Смесь Scooter, Monty и Spy vs Spy. Можно ещё добавить дикого электрика, который будет кидать фазу "как бы случайно" на трубы и перса будет бить током вычитая немного жизни.
    Последний раз редактировалось atariki; 12.03.2016 в 14:19.
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

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

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

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

Эту тему просматривают: 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

Ваши права

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