User Tag List

Страница 2 из 23 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 222

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

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

    По умолчанию

    Здравствуйте.

    Прежде всего... Вопрос.
    Насколько Вы знаете машину?

    Понимаете, выучить Ассемблер очень легко! А пользоваться им для программирования (о-о-очень трудно).

    Дело в том, что, не зная до тонкостей машины (процессор, ПЗУ, ОЗУ, OS, DOS и пр. И как эта вся "нелюдь" работает?) Вы не будете знать, где Вы находитесь и куда идти.

    Если Вы не знаете, для чего ячейка 88, Вы не будете знать как её применять.

    Если Вы даже знаете для чего какая-то ячейка, но не знаете как она обрабатывается операционной системой "по умолчанию", Вы всё равно не будете знать как с ней работать.

    Начать надо с удивления тому, что комп не умеет НИЧЕГО, кроме как перегонять биты из одного места в другое !!!
    Вычисления и "побочные действия" (например прорисовка экрана) получаются при алгоритмизации этого процесса, то есть при применении ВНЕШНИХ, по отношению к процессору правил!!!

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

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

  3. #2

    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    971
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ezswift Посмотреть сообщение
    Понимаете, выучить Ассемблер очень легко! А пользоваться им для программирования (о-о-очень трудно).
    Гораздо труднее выучить современный язык программирования со всеми его "мегафичами", а потом иметь голову как дом советов чтобы представлять во что написанный код откомпилируется.

    Если ты знаешь ассемблер, понимаешь как работает машина и имеешь в руках компилятор с мощной системой макросов, то на ассемблере писать одно удовольствие (собственно си в свое время вырос из такого ассемблера, он своими конструкциями языковыми идеально укладывается в архитектуру PDP).

    По состоянию на сегодня мне проще даже под windows писать на ассемблере, чем разбираться с гигабайтами говна что идет в составе SDK и потом как-то работает (а чаще не работает) и я не понимаю как от слова вообще без отладчика. И код получается в 100 раз компактнее. Причем по состоянию на сегодня даже под подобные системы проще писать программы на ассемблере и потом если надо их переписывать под другую архитектуру наново, чем писать на том-же си, и потом ловить годами на них глюки, потому-что оно компилируется, но из-за нюансов компиляторов, многозначностью стандартов и проглядов программиста работает неверно. Просто исходный текст программы на ассемблере раз в 20 короче сишного. И его быстрее переписать заново (все едино разбираться), чем в 20 раз больше разбираться а потом неуловимых блох там топтать.

    А сложно писать на ассемблере только всякие тест-ромы, когда у тебя нету оперативной памяти и стека вообще, и которые предполагаются выполнять на неисправной машине. И где даже вызов процедуры (а тем более двухуровневый) превращается знатное в извращение, и все что у тебя есть в принципе - набор регистров процессора. Зато извращение изящное. Но такие извращения без ассемблера написать в принципе невозможно.

    PS: кто-то в соседней теме диггера с писи портировал на куда-то. Написанную на си. Чтоб оно хотя бы компилировалось угробил месяц работы. Если бы она была написана на ассемблере за это время такую программу проще было написать заново. Заколдобистых мест в такой программе - по пальцам посчитать, и это звук и графика. Остальное макросами шляпать можно. В исходниках исправлений было больше чем в ней самого бинарного кода содержится. А сколько глюков потом полезет еще....
    Последний раз редактировалось ram_scan; 16.01.2017 в 16:41.

  4. #3

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ram_scan Посмотреть сообщение
    Гораздо труднее выучить современный язык программирования со всеми его "мегафичами", а потом иметь голову как дом советов чтобы представлять во что написанный код откомпилируется.
    Чем писать на асме, да? Насчёт сложности современных языков - подпишусь. А вот реализация в одиночку на асме того, что за*****кодено в тоннах SDK, без преувеличения, займёт не одну сотню лет. Попробуйте, например, написать на асме TCP/IP-стек.

    Желание контролировать сложность и иметь системы, открытые на всех уровнях и достаточно обозримые, чтобы разобраться в них глубоко за короткое время (например, чтобы исправить баг или добавить фичу) породило интерес к простым ЯВУ. Например, Оберон - самый юзабельный из простых и самый простой из юзабельных. Легко транслируется в Си, но он настолько прост, что только за последние 5 лет я вижу появление десятка новых компиляторов. Есть разные диалекты Оберона, но здесь углубляться в это не буду. Чтобы не быть голословным, приведу несколько ссылок на новодельные компилеры.



    Вот ещё мотиватор:



    P.S. Извините, что не по теме.

  5. #4

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

    По умолчанию

    ну я вообще ничего не знаю, а вот это поможет для начала ?
    ATARI 800. Операционная система. Руководство пользователя
    Mapping The Atari (rus)
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  6. #5

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

    По умолчанию

    Всё, что содержит информацию МОЖЕТ!
    Либо помочь, Либо помешать.

    Давайте пытаться программиривать.

    Ну, начнём, помолясь...

    Я в ассемблере программировал только на MAC/65, поэтому и инструкции ассемблера будут для MAC/65.

    Чтобы всё было интересно сразу раскрою тайну.

    Программировать будем статусную строку для состояния консоли.
    Консольные клавиши в Атари - это START,SELECT,OPTION.

    Общая идея такова:
    1. Сначала добавим статусную строку и увидем её на экране.
    Она должна заполняться не меняя нашей работы с Атари.
    ...
    Вот и начнём.

    Есть такая фишка в Атари, которая называется Дисплей Лист.
    Это - место в памяти, в котором лежат инструкции по отображению данных, которые исполняет ANTIC
    (Alphanumeric Television Interface Controller - Знако-Цифровой Контроллер телевизионного интерфейса).

    Стандартный DLIST таков:

    > dlist

    BC20: 3 раза по 8-BLANK
    BC23: MODE 2 + LMS(BC40)
    BC26: MODE 2 (23 раза)
    BC3D: JVB BC20

    Утомлю командами ANTIC для DLIST.

    Они аддитивны, то есть их можно и нужно (с участием моска!) складывать.
    Кроме этого, нужно вспомнить, что обычная текстовая строка Атари состоит из 8 заполненных растровых линий TV!
    (ЗАПОМНИТЕ! 8 ЛИНИЙ РАСТРА!)

    ; Display List Commands
    ;
    ; ПРОБЕЛЫ - (незаполненые растровые линии телевизора/ЛУЧ ВЫКЛЮЧЕН - например, черная область выше голубого экрана!)

    BL1=$00
    BL2=$10
    BL3=$20
    BL4=$30
    BL5=$40
    BL6=$50
    BL7=$60
    BL8=$70
    ;
    ; СТРОКИ - неважно текстовые, или графические, но, выводящие на экран данные из экранной памяти.
    GR* - это режимы Бейсика
    AN* - это режимы ANTIC, недоступные для Бейсика.

    GR0=$02
    AN3=$03
    AN4=$04
    AN5=$05
    GR1=$06
    GR2=$07
    GR3=$08
    GR4=$09
    GR5=$0A
    GR6=$0B
    ANC=$0C
    GR7=$0D
    ANE=$0E
    GR8=$0F
    ;
    ; ПЕРЕХОДЫ - так как, даже если мы ничего не делаем на Атари, всё равно надо прорисовывать экран, а также и по многим другим причинам,
    неоюходимы переходы с конца прорисовки на начало - по циклу, или всякие другие.

    JTO=$01 - Jump To(далее Адрес!) - переход на конкретный адрес экранной памяти.
    JVB=$41 - Jump by Vertical Blank(далее Адрес!) - Переход по дефолту на начало экранной памяти, если прорисован весь экран, для

    постоянной прорисовки экрана.
    ;
    ; ДЕЙСТВИЯ
    HSC=$10 - Включение оборудования горизонтального скроллирования
    VSC=$20 - Включение оборудования вертикального скроллирования
    LMS=$40 - Load Memory Scan - Включение прорисовки экранной памяти.
    LIN=$80 - Display List Interrupt - Включение прерывания со следующей строки сканирования.

    Далее...

    Мы желаем! обычную текстовую строку над голубеньким экраном, но так, чтобы Атари её не замечал. Есть - и есть...
    Вот это и есть - наша глобальная задача.

    Посмотрим стандартный DLIST (выше.)
    Там сверху непрорисованных 24 линии сканирования, то есть 3 раза по BL8.
    (8+8+8)=(8+7+8(здесь появится НАША текстовая строка, а не пробельные строчки сканирования)+1)

    Вот такой NEWDL мы и начнём...

    А что ждём-то? Это же данные, а не ассемблирование! Их так и так надо вносить. Пора кодить.

    Обиняки:
    Будем кодить в выделенном месте для программирования пользовательских программ на ассемблере! Это $0600.
    Потом, уже задумаемся, куда всё поместить.


    Запускаем MAC/65
    Увидели на экране

    Edit

    Пишем ручками:
    NUM 1000,10 - нумерация от 1000 с шагом 10

    Получаем:
    1000

    Дописываем:
    1000 CODES *=$0600 <нажать Return>
    1010

    Звёздочка - это состояние PC - Program Counter, то есть ГДЕ мы находимся при ИСПОЛНЕНИИ программ.

    Здесь призадумаемся.
    Нам нужна инициализация многих подпрограмм, значит - ДО исполнения, а именно в этом месте нужно перейти к ней.
    В этом случае ассемблер будет знать Что,Где,Когда!

    Итак,
    1000 CODES *=$0600
    1010 JMP INIT - прыгаем на INIT.

    Получаем:

    1000 CODES *=$0600 ; Адрес начала кодов
    1010 JMP INIT ; Адрес инициализации.
    1020

    Что мы знаем?
    Задали метку CODES, Это пользовательская 6 страница!
    Начинаем с $0600
    (Переходим на INIT, - пока не задали!)

    Вот здесь мы упёрлись в структуризацию программы!

    Начало тупое - START

    Инициализация данных всех подпрограм - INIT
    Объявление всех системных адресов - EQUATES
    Объявление всех системных векторов - VECTORS
    Объявление всех наших констант - CONSTANTS
    (Эти данные сугубо необходимы для того, чтобы ассемблер хоть что-то понял.)
    Далее идут исполняемые Коды - CODES

    А здесь прервёмся.
    Я уже тексты утомился писать.

    Сохранись в Ассемблере Бра!

    SAVE #DL.m65

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

  7. #6

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

    По умолчанию

    Благодарен. Очень интересно. С Mac65 v1.01 немного знаком.
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  8. #7

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

    По умолчанию

    Двигаемся потихоньку...

    "Кривые руки - причина боли моска!"

    В прошлом уроке сразу ошибка.
    надо:
    SAVE #D: DL.M65

    Пардон, но всё же назову CODES -> START так привычнее.

    1000 START *=$0600

    В редакторе эта строчка перепишет прежнюю.

    Кстати, Эта команда - инструкция для MAC/65, а не для процессора.
    Первая инструкция для процессора, которая будет помещена на 6 страницу
    - 1010__JMP INIT.
    Специально выделил 2 пробела перед JMP!
    Если один пробел -> это будет воспринято как МЕТКА!

    1000 START *=$0600
    1010 JMP INIT
    1020 ;
    1030 NEWDL .BYTE BL8,BL7
    1040 .BYTE GR0+LMS
    1050 .WORD DLDATA

    Вот здесь включаем моск!
    MAC/65 при компиляции сразу выдаст ошибку фазирования, так как DLDATA ещё не определена нигде!

    Увы, надо исправлять!

    Вот табличка DLDATA:

    1000 START *=$0600
    1010 JMP INIT
    1020 ;
    1030 DLDATA
    1040 L0 .SBYTE "Consol: /START/ /SELECT/ /OPTION/" - Start+Select+Option
    1050 L1 .SBYTE "Consol: /Start/ /SELECT/ /OPTION/" - Select+Option
    1060 L2 .SBYTE "Consol: /START/ /Select/ /OPTION/" - Start+Option
    1070 L3 .SBYTE "Consol: /Start/ /Select/ /OPTION/" - Option
    1080 L4 .SBYTE "Consol: /START/ /SELECT/ /Option/" - Start+Select
    1090 L5 .SBYTE "Consol: /Start/ /SELECT/ /Option/" - Select
    1100 L6 .SBYTE "Consol: /START/ /Select/ /Option/" - Start
    1110 L7 .SBYTE "Consol: /Start/ /Select/ /Option/" - Не нажаты
    1120 NEWDL ; Наш новый DLIST (8+7+8+1)=24 линии
    1130 .BYTE BL8,BL7
    1130 .BYTE GR0+LMS
    1140 OUTTXT ; Метка нужна, чтобы загружать сюда изменяемые адреса.
    1140 .WORD DLDATA ; Указываем команде LMS Адрес загрузки текста статуса.
    1150 .BYTE BL1
    1160 .BYTE JTO ; Скачок на старый OLDDL, как ни в чём ни бывало ...
    1170 .WORD OLDDL+3 ; Тройку добавляем, так как область (24 пустых линии) над голубым экраном мы уже обработали.

    ...

    !!! Надо не забыть определить возникающие вечно переменные !!! , вроде OLDDL.


    Вспомним про консоль.

    Это регистр Атари с адресом
    CONSOL 53279 ($D01F)

    !!! Надо не забыть, перед чтением из него, его очистить, а то там может чёрти-что оказаться, из-за дребезга контактов, например !!!

    Вот таблица его состояний:

    CONSOLE KEYS____________PEEK(53279)_____BIT VALUES

    START + SELECT + OPTION______0___________00000000
    SELECT + OPTION______________1___________00000001
    START + OPTION_______________2___________00000010
    OPTION_______________________3___________00000011
    START + SELECT_______________4___________00000100
    SELECT_______________________5___________00000101
    START________________________6___________00000110
    None_________________________7___________00000111
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  9. #8

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

    По умолчанию

    загнал в мас65 v1.01

    1000 START *=$0600
    1010 JMP INIT
    1020 ;
    1030 DLDATA
    1040 L0 .SBYTE "Consol: /START/ /SELECT/ /OPTION/"
    1050 L1 .SBYTE "Consol: /Start/ /SELECT/ /OPTION/"
    1060 L2 .SBYTE "Consol: /START/ /Select/ /OPTION/"
    1070 L3 .SBYTE "Consol: /Start/ /Select/ /OPTION/"
    1080 L4 .SBYTE "Consol: /START/ /SELECT/ /Option/"
    1090 L5 .SBYTE "Consol: /Start/ /SELECT/ /Option/"
    1100 L6 .SBYTE "Consol: /START/ /Select/ /Option/"
    1110 L7 .SBYTE "Consol: /Start/ /Select/ /Option/"
    1120 NEWDL ;
    1130 .BYTE BL8,BL7
    1130 .BYTE GR0+LMS
    1140 OUTTXT
    1140 .WORD DLDATA
    1150 .BYTE BL1
    1160 .BYTE JTO
    1170 .WORD OLDDL+3

    ввёл команду asm и получил следующее

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

Название:	1.jpg 
Просмотров:	463 
Размер:	34.4 Кб 
ID:	56293Нажмите на изображение для увеличения. 

Название:	2.jpg 
Просмотров:	396 
Размер:	34.1 Кб 
ID:	56294
    ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD

  10. #9

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,293
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,457
    Поблагодарили
    947 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от atariki Посмотреть сообщение
    ввёл команду asm и получил следующее
    так и должно быть.
    тебе дали текст основной программы,
    а про мелкие модули (init) ещё не-рассказали

  11. #10

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

    По умолчанию

    Не,
    на самом деле ATARIKI маленько отбезобразничал. Я ранее писал, что Если один пробел после начальной цифирки -> это будет воспринято как МЕТКА!
    То есть Ассемблер ждёт какого-то невиданного... чего? Невиданной программы JMP!
    Ответ - для Ассемблера ПРОСТ! У него невиданный только Макрос.

    А теперь к делу.
    Поблагодарю GOODBOY, надо!

    Поблагодарю ATARIKI - он Аудитория!

    Пояснение.
    Я с Вами ОДНОВРЕМЕННО программирую!
    И я - не программист.
    ПОЖАЛЕЙТЕ!

    И потом,
    Если мы только ввели и сохранили данные, а не программу, разве мы написали программу?
    НАДО включать моск!

    На этом этапе компилировать НЕЧЕГО!
    Обработчика данных НЕТ!
    Просто пишем и сохраняем.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

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

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

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

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

Ваши права

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