User Tag List

Страница 7 из 23 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя
Показано с 61 по 70 из 222

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

  1. #61

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

    По умолчанию

    А интересно, есть ли внятное описание работы с устройствами с помощью ассемблера?

    т.е. E: - экран, D:дисковод.

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

  3. #62

    Регистрация
    22.01.2011
    Адрес
    г. Кирово - Чепецк
    Сообщений
    335
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    давайте начнём/продолжим с чего нибудь попроще ?
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  4. #63

    Регистрация
    28.10.2005
    Адрес
    Омск
    Сообщений
    2,117
    Спасибо Благодарностей отдано 
    163
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    32 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    http://atariage.com/forums/topic/247...-contest-2016/
    примеры различных простейших (и не очень простейших ) игр для атари.
    есть куски кода и много интересного.

  5. #64

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

    По умолчанию

    Цитата Сообщение от atariki Посмотреть сообщение
    давайте начнём/продолжим с чего нибудь попроще ?
    а с чего? минимум - это графика и спрайты(PMG). Затем - опрос клавиатуры и джойстика. Ну и звук как последний.

  6. #65

    Регистрация
    22.01.2011
    Адрес
    г. Кирово - Чепецк
    Сообщений
    335
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну да, хотя бы с этого.
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  7. #66

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

    По умолчанию Продолжение банкета

    Давайте напишем Трояна для Атари.

    То есть программу, которая исполняля бы НАШ код, а Атари и не знала бы об этом.

    Что мы имеем в виду под "не знала"?
    То, что Атари свой родной код всё равно исполняла бы, а потом незаметно для себя и наш.

    Наш Троян безобидный. Пусть он меняет цвет экрана с их голубого на наш красный.

    Начнём:
    Опишем ячейки памяти Атари, существенные для нас.

    ; Fully saved Trojan inserted to WARMSTART
    ;
    ; EQUATES
    DOSINI = $0C
    COLOR2 = $02C6
    MEMLO = $02E7
    ;
    ; CONSTANTS
    RED = $32

    Далее зададим опции компилятора, чтобы он компилил в ПАМЯТЬ и выдавал нам полный листинг.
    (Неполный листинг нужен, если мы будем использовать библиотеки компилятора. То-есть, будут печататься каждый раз сначала библиотеки, а потом только наша маленькая программка. Кому это надо?)

    ; ASM OPTIONS
    .OPT OBJ,LIST ; Пусть пишет в память объектный код и по требованию выдаёт полный листинг программки.

    Теперь напишем наш Троян.
    (Сначала функционально, потом, чтоб работал.)
    Функционально нам нужно изменить цвет.
    LDA #RED
    STA COLOR2

    Но эта станза будет сразу же затёрта инициализацией горячего старта при нажатии Reset!

    А вот это уже не троян!

    Придётся либо искать всегда сохранную память в Атари, которая не инициализируется при горячем старте.
    Или писать свой код.

    Пойдём по лёгкому пути, тем более, что это не сложно.

    Теория: Разница между JMP и JSR

    JMP является ЕДИНСТВЕННОЙ инструкцией, среди инструкций 6502, использующей косвенную адресацию непосредственно!

    То есть, для работы ей нужен только Аккумулятор и адрес памяти.
    Так как комп ЗНАЕТ!, что адресация косвенная и адрес может быть задан ТОЛЬКО при инициализации,
    то он ждёт второго прохода ассемблера и Фазовую ошибку не вызывает.

    Для работы всех остальных инструкций ещё нужен стэк.
    Например, JSR ТРЕБУЕТ, чтобы данные адреса были занесены в стэк.
    Поэтому, если до момента вызова инструкции JSR, не было явного определения и инициализации адреса, в стэк НЕЧЕГО заносить!
    Возникает фазовая ошибка.

    Из всего этого мы должны понять, что если возникает фазовая ошибка, значит виноваты все команды перехода,
    которые не могут найти адрес перехода, либо явно, как заданный Глобально - EQUATES, VARIABLES, либо как метки, которые должны быть описаны РАНЕЕ вызова команды. Ошибка будет, если они описаны ПОЗДНЕЕ!

    Вот при этих гнусных условиях нам и придётся работать.
    Нам нужна ВЕРА!
    АССЕМБЛЕР МОЖЕТ ВСЁ!

    Обшая идея такая.
    Я хочу, чтобы начиная со старого (заведомо рабочего) адреса, до которого докатилась Атари, занести коды трояна, после чего,
    Перенести указатель на прежний "заведомо рабочий адрес" на конец моих кодов! и тогда, программа инициализации по Ресет затронет ВСЁ, кроме моих кодов.

    Ясно, что если я исполню свою идею РАНЬШЕ, чем произойдёт нормальная инициализация по горячему старту, то когда она произойдёт она всё ЗАТРЁТ!

    Надо, чтобы сначало Атари сделала по-своему, а потом, уж ... !!!

    Да, и ешё, важно держать свои ЗНАНИЯ "при себе"! То есть ДАННЫЕ по инициализации ТРОЯНА должны быть в нём сАмом!

    Чтобы узнать адрес с которого я могу действовать, я вызываю комманду SpartaDOS X33A (Без БАТФАЙЛОВ!!!).
    MEM
    Memlo: $1900 Memhi: $BC1F

    То-есть, я могу пользоваться памятью насиная с $1900
    Я и начну.

    START
    *= $1900
    JMP INIT
    ;
    NEWMLO .WORD 0 ; Это неинициализированная ПОКА переменная, которая будет
    ; всегда сохранена, покуда мы сохраняем коды трояна.

    DUMMY
    TROJAN JSR DUMMY ; JSR'у нужен DUMMY, в качестве РАНЕЕ определённой метки!
    До исполнения ВСЁ - просто заполненная память! Если вместо DUMMY подставить (ВО ВРЕМЯ ИСПОЛНЕНИЯ! Старый адрес DOSINI, то сначала программа выполнит полный цикл горячего старта.)

    А куда нам надо поднять память?
    Зададим в конце нашего кода метку:

    LOMEM = *

    Вот рабочий код:

    Код:
    1000 ; RESET THE MEMLO POINTER
    1010 ;
    1020 ; EQUATES
    1030 DOSINI = $0C
    1040 COLOR2 = $02C6
    1050 MEMLO = $02E7
    1060 ;
    1070 ; CONSTANTS
    1080 RED =   $32
    1090 ;
    1100 ; CODES
    1110     .OPT OBJ,LIST
    1120 ;
    1130 START
    1140     *=  $1900
    1150     JMP INIT
    1160 NEWMLO
    1170     .WORD 0
    1180 DUMMY
    1190 TROJAN JSR DUMMY
    1200     LDA NEWMLO
    1210     STA MEMLO
    1220     LDA NEWMLO+1
    1230     STA MEMLO+1
    1240 ;
    1250     LDA #RED
    1260     STA COLOR2
    1270 ;
    1280     RTS 
    1290 ;
    1300 LOMEM = *
    1310 ;
    1320 INIT
    1330     LDA # <LOMEM ; Set NEWMLO as LOMEM
    1340     STA NEWMLO
    1350     LDA # >LOMEM
    1360     STA NEWMLO+1
    1370 ;
    1380     LDA DOSINI  ; Save DOSINI into TROJAN
    1390     STA TROJAN+1
    1400     LDA DOSINI+1
    1410     STA TROJAN+2
    1420 ;
    1430     LDA # <TROJAN ; Set DOSINI as TROJAN
    1440     STA DOSINI
    1450     LDA # >TROJAN
    1460     STA DOSINI+1
    1470 ;
    1480     LDA NEWMLO  ; Fill MEMLO as NEWMLO
    1490     STA MEMLO
    1500     LDA NEWMLO+1
    1510     STA MEMLO+1
    1520 ;
    1530     LDA #RED
    1540     STA COLOR2
    1550 ;
    1560     RTS
    Теперь, сколько бы Вы не нажимали Ресет, MEMLO будет $191A

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

  8. #67

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

    По умолчанию

    у меня брат с этой ерунды умер.

  9. #68

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

    По умолчанию

    2denpopov
    Не уберегли, значит...

    Код:
    Кажется кто-то упоминал, что нужна программа для обработки джойстика...
    
    Предлагаю программу Джеймса Коренталя для расшифровки положений джойстика.
    Я думаю, она малопонятная, но самая быстрая.
    
    Что мы думаем о джойстике?
    Прежде всего он замыкает контакты. Может и попарно!
    
    Все контакты джойстика нормально разомкнутые и при считывании аппаратного регистра джойстика
    в разрядах дают логическую ЕДИНИЦУ!
    При замыкании контакта, это приводит ЕДИНИЦУ к НУЛЮ! (Искра ушла в землю.)
    
    Максимум числа джойстиков для Атари - 4. В новых моделях - 2.
    
    Вот "Роза Ветров" положений джойстика:
    
        N
     NW   NE
    W   C   E
     SW   SE
        S
    
    Всего их 9, А значит 4Joy x 9Dir = 36 предложенных данных для разбора.
    Вот почему в Бейсике такой разбор по значениям неприемлем!
    
    Джойстик сильно абстрагирован от программ.
    В частности, это означает то, что джойстик ориентируется НЕ НА ДАННЫЕ ПРОГРАММЫ, а только на свои!
    То есть, когда мы тянем его вниз, то в лётном симуляторе самолётик-то летит вверх, и именно это означает,
    что обработка данных джойстика лежит не на джойстике, а на программе!
    
    Предлагаю битовую таблицу значений для различных положений джойстика:
    
    .DIRECTION	 BINARY
    		HOR  VER
    .		E W  S N
    .Center		1 1  1 1
    .N		1 1  1 0
    .NE		0 1  1 0
    .E		0 1  1 1
    .SE		0 1  0 1
    .S		1 1  0 1
    .SW		1 0  0 1
    .W		1 0  1 1
    .NW		1 0  1 0
    
    То есть:
    1. Коренталь обратил внимание, что Атарьские ГЕНИИ разделили младший Нибл на два полуНибла!
    Младший полуНибл отвечает за Y (VER), Старший полуНибл отвечает за X (HOR).
    
    Он знал, что любые данные, левее младшего полуНибла можно элиминировать с помощью инструкции AND #3.
    DEC BIN
    3   11
    Эта инструкция обращает в ноль ВСЁ, что левее младшего полуНибла в байте, оставляя полуНибл неприкосновенным!
    2. Кроме этого Коренталь знал, что чтобы скинуть младший полуНибл, если нам нужно исследование
    ТОЛЬКО старшего полуНиббла (HOR), мы можем два раза сдвинуть значение Аккумулятора вправо, командой LSR A.
    
    Это всё стало доступным благодаря Атарьцам!
    
    Атарьские Гении разделили! выходные значения покоординатно и поконтактно следующим образом:
    1. На всё определение данных отводится младший нибл байта.
    2. младший полунибл отвечает за вертикаль!
    3. старший полунибл отвечает за горизонталь!
    Остальная часть байта не имеет значения.
    
    Проблема дешифрации не столь очевидна.
    
    Наша задача привести данные джойстика к значениям Диффирента по X или по Y!
    Тогда, прибавляя дифферент по любой координате к текущему положению, мы получим новую координату!
    
    Программа Бейсика, иллюстрирующая применение Ассемблерной программы вызывается следующим образом:
    
    X=0,Y=1
    
    FOR N=0 TO 3 : REM Это для 800-х для новых 0...1
    
    DIR=X : REM For X
    DX=USR(RDJ,N,DIR)
    
    DIR=Y REM For Y
    DY=USR(RDJ,N,DIR)
    
    ... Some ACTIONS like ? SMTH ... etc.
    
    NEXT N : REM Возврат на начало цикла для считывания следующего джойстика...
    
    Вид СТЭКА в Бейсике определяется Аргументами вызова USR!
    
    Справа налево аргументы кладутся ПОСЛОВНО на стэк, Потом кладётся Число аргументов БАЙТ.
    
    Многие из этих данных нам не нужны, так как Бейсик использует ТОЛЬКО двухбайтовые данные!
    Соответственно, для представления однобайтовых данных нам не нужны старшие байты.
    Кроме этого нам не нужно число аргументов вызова, до тех пор, пока это не существенно для нашей программы!
    (Это когда вызов с переменным числом аргументов.)
    
    Видим сразу, - в отличии от Ассемблера Бейсик Явно избыточен!
    
    Вот наш Стэк:
    
    Number of Arguments - 1 байт - TOP OF STACK
    -------------------
    MSB of JOYNUM
    LSB of JOYNUM
    -------------------
    MSB of DIR
    LSB of DIR
    -------------------
    ...
    LAST LSB of ...              - BOTTOM of STACK
    -------------------
    
    Смотрим то, что нам не нужно...
    1. Число аргументов нафиг!
    2. Номеров джойстика мало, значит MSB нафиг!
    3. Номеров направлений ваще два - MSB нафиг!
    
    Итак, ПОМНИМ у нас есть пул джойстиков - STICK0...STICK3 (в Лучшем случае...)
    
    Вспоминаем, что обращение к Аккумулятору ведёт себя как Экскаватор.
    Всегда выбрасывает породу,.. и иногда загружает её в самосвал.
    
    ;Assembler Joystick Routine
    ;
    ; EQUATES
    STICK0 = $0278
    ;
    ; VARIABLES
    ANSWLO = $D4 ; Произвольный регистр
    ANSWHI = $D5 ;  ... на Нулевой странице.
    ;
         .OPT LIST,OBJ
    ;
         *= $0600
    ; CODES
         PLA ; Нафиг число аргументов!
         PLA ; Нафиг старший байт числа джойстиков!
         PLA ; Берём младший байт числа джойстиков
         TAX ; Это и будет побайтным смещением в пуле джойстиков!
         PLA ; Нафиг старший байт направлений (всего два!)
         LDA STICK0,X ; Читаем пронумерованный в цикле Бейсика джойстик
    ; На этом этапе, вершина СТЭКа содержит младший (существенный)
    байт направления (0...1)
    ; который, командой PLP заносится в Регистр P-Процессорный статус
    
    NV BDIZC - регистр P
    
         PLP ; Берём флаг
    P - ЭТО ИНДИКАТОР! Его значения могут быть учтены и считаны, но ... ПОЗЖЕ,
    если это нужно ПРОГРАММЕ!
    На процессор регистр НЕ ВЛИЯЕТ!
    ; Так как в регистре P - наше значение (0...1) Всегда МЛАДШИЙ бит! это = флаг Carry, то определяем направление...
         BCS NOTX ; Если установлен то мы запрашиваем Игрек, пропуская X.
    RDX  LSR A ; Если X, сдвигаем
         LSR A ; на 2 бита вправо...
    NOTX AND #3 ; здесь, скрываем все данные старших битов, кроме интересующих нас.
         SEC ; Готовим вычитание
         SBC #2 ; Математическая обработка ...
         BPL SAVEIT ; Если положительно
         LDA #2 ; Если отрицательно
    SAVEIT STA ANSWLO
         LDA #0
         STA ANSWHI
         RTS
         .END
    
    Здесь мы приехали к расшифровке данных джойстика.
    
    .DIRECTION	 BINARY	     PROGRAM ANSWER
    		HOR  VER
    .		E W  S N      X-Val   Y-Val
    .Center		1 1  1 1	1	1
    .N		1 1  1 0	1	0
    .NE		0 1  1 0	2	0
    .E		0 1  1 1	2	1
    .SE		0 1  0 1	2	2
    .S		1 1  0 1	1	2
    .SW		1 0  0 1	0	2
    .W		1 0  1 1	0	1
    .NW		1 0  1 0	0	0
    
    Караул!
    ДОКТОР МЫ ЕГО ТЕРЯЕМ!
    
    Ничего мы не потеряли!!!
    
    Смотрим на X-Val.
    Чтобы получить стандартные значения (-1 0 1), для смещений по координате X,
    достаточно в Бейсике сделать DX=USR(...)-1
    а для данных Y-val
    достаточно в Бейсике сделать DY=1-USR(...)
    
    Вот!
    Последний раз редактировалось ezswift; 05.04.2016 в 20:56.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  10. #69

    Регистрация
    10.11.2011
    Адрес
    Москва
    Сообщений
    766
    Спасибо Благодарностей отдано 
    237
    Спасибо Благодарностей получено 
    233
    Поблагодарили
    196 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Решил перейти в эту тему про ассемблер. Пока у меня после восстановления моей железки продолжаются муки выбора стартовой литературы. Вот тут 2 очень интересные книги http://seriouscomputerist.altervista...e.language.htm
    Под шапкой Osborne / McGraw-Hill: 6502 Assembly Language
    Далее еще одна книженция.
    И всякие сводные таблицы по процу 6502
    http://seriouscomputerist.altervista...e.language.htm
    Еще хвалят такую книжку:
    http://seriouscomputerist.altervista...urce.atari.htm
    Atari: De Re Atari
    Ну и еще та 130Xe про которую упоминал в своей теме про неизвестные знаки

  11. #70

    Регистрация
    10.11.2011
    Адрес
    Москва
    Сообщений
    766
    Спасибо Благодарностей отдано 
    237
    Спасибо Благодарностей получено 
    233
    Поблагодарили
    196 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Остановился на одной книге как основной. Это Programming the 6502 Rodnay Zaks четвертое издание 83го года. Материал изложен нормально, как я привык видеть в более современных изданиях. И главное она толстая Что то многие старые книги какие то ущербные по ассемблеру. В помощь ей еще один фолиант Osborne / McGraw-Hill: 6502 Assembly Language Programming
    Ну и Atari Roots иногда поглядываю.
    Изучаю неспеша пока азы.

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

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

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

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

Ваши права

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