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

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: Общая тема для моих вопросов (ассемблер и zx spectrum)

  1. #1
    Junior Аватар для moronizzz
    Регистрация
    02.05.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    15
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Общая тема для моих вопросов (ассемблер и zx spectrum)

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

    Простите за плохое название темы, но у меня сейчас каждая мелочь занимает около суток, а обратиться за помощью не к кому:

    * Есть ли хорошая книга и внятная статья по работе со screen memory (как в желаемом месте желаемым цветом нарисовать точку)? Есть ли простой способ определить адрес какой-то точки на экране?

    Я уже частично понял суть, нарисовал линию из восьми писелей:

    Код:
    ORG #8000
    ld hl, #5920 ; адрес атрибутов для строки #4820
    ld a, %01000100 ; первый бит - мерцание, второй бит - яркость, три бита бумага, три бита чернила.
    ld (hl), a ; загрузили атрибуты цвета для строки
    ld de, #4820 ; это адрес начала строки
    ld a, %11111111 ; это какие пиксели заполнены
    ld (de), a ; выводим символы
    ret
    Но "придумывать" как это работает приходится самому на основе http://www.animatez.co.uk/computers/...memory-layout/ и http://speccy.info/%D0%9F%D0%B5%D1%8...82%D0%BE%D0%B2

    * Я компилирую код при помощи pasmo (pasmo -d -v --bin zzz.z80 zzz.bin), после этого создаю tap с загрузчиком при помощи bin2tap (./bin2tap -b zzz.bin) (почему-то .tap с загрузчиком, получаемый из pasmo у меня работает некорректно). При загрузке полученного .tap в fuse-gtk сверху и снизу отображаются данные Бейсика ("Bytes: aaa" и "0 OK, 60: 1") есть ли возможность не показывать/скрывать эти данные?

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

Название:	zzz1.png 
Просмотров:	425 
Размер:	9.1 Кб 
ID:	57627

    * Я хочу создать .trd файл с загрузчиком. "Автоматизированный" способ при помощи tap2trd у меня не получился (при загрузке его из tr-dos я получаю "чёрный экран"). И здесь совсем не понятно в какую сторону копать, то ли tap2trd некорректно отработал, то ли я некорректно в tr-dos данные запускаю, то ли загрузчик, который в моём .tap, не подходит. Вот здесь начинается проблема с тем, что я не понимаю суть различий форматов файлов и создания загрузчиков для кода. Есть ли где-то статья на тему того, как "вручную" написать загрузчик при написании ассемблерного когда, чтобы у меня на этапе компиляции уже бинарник с загрузчиком получился, или так не бывает? Или может быть можно "вручную" создать .trd?

    * Нашёл утилиту bin2trd, она при выполнении говорит "Descriptor must have TRL extention", кто-нибудь знает что такое trl?
    Последний раз редактировалось moronizzz; 20.07.2016 в 20:42.

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

  3. #2
    Veteran Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    1,064
    Благодарностей: 408
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от moronizzz Посмотреть сообщение
    "Автоматизированный" способ при помощи tap2trd у меня не получился (при загрузке его из tr-dos я получаю "чёрный экран"). И здесь совсем не понятно в какую сторону копать, то ли tap2trd некорректно отработал, то ли я некорректно в tr-dos данные запускаю, то ли загрузчик, который в моём .tap, не подходит.
    Само собой загрузчик не подходит. Он пытается, код с кассеты грузить, а не с диска.

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

    Цитата Сообщение от moronizzz Посмотреть сообщение
    При загрузке полученного .tap в fuse-gtk сверху и снизу отображаются данные Бейсика ("Bytes: aaa" и "0 OK, 60: 1") есть ли возможность не показывать/скрывать эти данные?
    Bytes: aaa
    выдает команда LOAD "" CODE (которая и загружает ваш код) в загрузчике. Это ее нормальное поведение.
    Другое дело, что после нее можно (желательно) очистить экран (CLS) перед запуском самого кода, но скорее всего в "готовом" загрузчике этого просто нет.
    Там скорее всего идет просто RANDOMIZE USR Addr (Addr - адрес запуска вашего кода).
    Далее, после того как ваш код выполнится, он по команде ret передает управление назад в загрузчик, а так как строк в загрузчике больше и нет, работа его успешно завершается с соответствующим сообщением.
    Все логично. А что же должно происходить? Зависание? Программа выполнена, код ваш выполнен.
    Seamos realistas y hagamos lo imposible!
    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

  4. #3
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,720
    Благодарностей: 947
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от moronizzz Посмотреть сообщение
    Есть ли хорошая книга и внятная статья по работе со screen memory (как в желаемом месте желаемым цветом нарисовать точку)?
    Настоятельно рекомендуется прочитать вот это (ассемблер) и (опционально) вот это (Basic). Очень доступные книги обо всем, читаются легки и понятно. Конкретно по графике можно посмотреть вот это (это только первый том), там как раз про расчет адреса видеопамяти есть отдельная глава (впрочем, об этом и в других книгах тоже много есть). Под рукой в качестве справочника Библии всегда иметь вот это и вот это. Вообще, всяких книг исключительно про Spectrum много тут.

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

    Цитата Сообщение от moronizzz Посмотреть сообщение
    Я компилирую код при помощи pasmo (pasmo -d -v --bin zzz.z80 zzz.bin), после этого создаю tap с загрузчиком при помощи bin2tap (./bin2tap -b zzz.bin) (почему-то .tap с загрузчиком, получаемый из pasmo у меня работает некорректно).
    Ассемблер sjasm умеет делать сразу trd и sna (для более быстрой отладки). Есть пара толковых инструкций по созданию среды разработки из редактора, sjasm и эмулятора, позволяющей запускать программы на ассемблере из редактора "в один клик".
    ZX Evolution Rev C + ZXM-SoundCard Extrme + NeoGS.

  5. Этот пользователь поблагодарил Alex Rider за это полезное сообщение:
    moronizzz (24.07.2016)

  6. #4
    Доктор Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,078
    Благодарностей: 818
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чтоб создать .trd программой bin2trd надо приложить .trl файл, в котором будет описано какие файлы на диск помещать. У меня в одном проекте вот такой фаил:

    Код:
    NORMAL "DISK"
    HOBETA "DEMO____.$B"
    BINARY "file.BIN","DEMO","C",25000
    BINARY "to.scr","TOTOTOTO","C",49152
    BINARY "zas.scr","ZASTZAST","C",49152
    BINARY "CHEMPHON.SCR","CHEMPHON","C",57344
    HOBETA "Hot mix.$C","MUSICAAA","C",40000

    Необходимы только первые два - это бейсик загрузчик (трдос-загрузчик) и сам бинарный фаил с данными. Могу приложить все файлы, если интересно. Хотя, сейчас все пишут на sjasm+, он сам может компонавать trd/tap. Про тап не знаю, а трд делается так:

    Код:
    	DEVICE ZXSPECTRUM128
    	emptytrd "aa.trd"
    	org 25000
    
    	;Пишем тут код
    
    
    ee:
    	jp ee
    
    endpr:
    	savetrd "aa.trd","DEMO.C",25000,endpr-25000	
    	org 25000
    	inchob "boot.b" ; Бейсик загрузчик. Тот же что и в первом примере
    endb:
    	savetrd "aa.trd","boot.B",25000,endb-25000
    Кстати, sjasm+ есть и для линукса.
    Прикладываю загрузчик.

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

    Цитата Сообщение от moronizzz Посмотреть сообщение
    есть ли возможность не показывать/скрывать эти данные?
    Можно очистить экран перед выводом изображения, например так:
    Код:
       ld hl,16384
       ld de,16385
       ld (hl),0
       ld bc,6144
       ldir
    А после рисования впасть в бесконечный цикл
    Код:
    label:
       jp label
    Вложения Вложения
    Последний раз редактировалось Kakos_nonos; 23.07.2016 в 13:16. Причина: Подправил теги
    нефть.

  7. Этот пользователь поблагодарил Kakos_nonos за это полезное сообщение:
    moronizzz (24.07.2016)

  8. #5
    Junior Аватар для moronizzz
    Регистрация
    02.05.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    15
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    1) А как из ассемблера установить цвета по-умолчанию для бумаги и чернил? (аналог BORDER и INK), попробовал напрямую в системные переменные значения записать необходимые, но кажется, что не сработало. Хочу несколько знакомест заполнить одним цветом, и не выставлять цвет для каждого из них.

    2) Подскажите хорошую книгу, или статью по кодированию музыки, например на бипере. И чтобы было понятно, как совместить вывод звуков и вывод графики.

  9. #6
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,545
    Благодарностей: 856
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    1.
    ld hl,#5800
    ld de,$5801
    ld bc,#2ff
    ld (hl),7
    ldir
    Заполнение всех аттрибутов цвета экрана чёрным папером и белым инком.

    2. возьми музыкальный редактор для бипера и попробуй ним экспорт в бинарник.

  10. Этот пользователь поблагодарил Hacker VBI за это полезное сообщение:
    moronizzz (22.08.2016)

  11. #7
    Veteran Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    1,064
    Благодарностей: 408
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Типа так
    Код:
    ATRRs EQU %01000111 ;тут 2 старших бита - FLASH, BRIGHT, потом PAPER, INK. Это константа, ее значение можно поменять только до компиляции
    Fill  LD HL,StartAddr ;Адрес 1 знакоместа, которое надо заполнять в области атрибутов экрана
          LD (HL),ATTRs
          LD DE,StartAddr+1
          LD BC,Len-1 ;Len - сколько знакомест подряд (они идут друг за другом построчно) заполнять.
          LDIR
          RET
    Пользовать так:
    Код:
    CALL Fill
    Можно чуть иначе:
    Код:
    Fill  LD HL,StartAddr ;Адрес 1 знакоместа, которое надо заполнять в области атрибутов экрана
          LD A,(ATTRs)
          LD (HL),A
          LD DE,StartAddr+1
          LD BC,Len-1 ;Len - сколько знакомест подряд (они идут друг за другом построчно) заполнять.
          LDIR
          RET
    ATTRs DEFB %01000111 ;тут 2 старших бита - FLASH, BRIGHT, потом PAPER,  INK. Это переменная, ее значение можно менять когда угодно
    Пользовать так:
    Код:
          LD A,нужное значение
          LD (ATTRs),A
          CALL Fill
    Seamos realistas y hagamos lo imposible!
    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

  12. Этот пользователь поблагодарил Black Cat / Era CG за это полезное сообщение:
    moronizzz (22.08.2016)

  13. #8
    Junior Аватар для moronizzz
    Регистрация
    02.05.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    15
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hacker VBI Посмотреть сообщение
    2. возьми музыкальный редактор для бипера и попробуй ним экспорт в бинарник.
    Как из музыки сделать бинарник более-менее понятно, не понятно, как объеденить графику и звук, чтобы они "параллельно" выполнялись.

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

    И ещё, хочу добавить в код "именованные переменные", таким образом, чтобы их можно было модифицировать (уменьшать, увеличивать, копировать туда данные из регистров, оттуда данные брать в регистр). Как это правильно сделать? Вижу, что при помощи EQU можно значение присвоить метке, но изменить его уже нельзя.

  14. #9
    Veteran Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    Курган
    Сообщений
    1,693
    Благодарностей: 356
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от moronizzz Посмотреть сообщение
    1) А как из ассемблера установить цвета по-умолчанию для бумаги и чернил?
    Поместить нужные значения в переменные бейсика. Описание переменных (их имена и назначение) можно найти в многочисленных книгах по бейсику, "Таники ZX" и прочих. У вас скорее всего всё сработало. Дело в том, что переменные эти используются лишь тогда, когда спектрум бейсик выводит текст своими процедурами. Либо мы вызываем процедуру вывода символов или строк из ПЗУ бейсик. Если же вы работаете напрямую с экранной областью, т.е. пишите свои процедуры вывода символа, на её основе вывод строк, рисование линий и т.д. То само собой, что переменные эти никак не влияют на вывод, если вы сами не будете брать оттуда значения для задания цвета.

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  15. Эти 2 пользователя(ей) поблагодарили Vadim за это полезное сообщение:
    moronizzz (22.08.2016), Reobne (22.08.2016)

  16. #10
    Veteran Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    1,064
    Благодарностей: 408
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Смотри мой второй пример, там именно переменная же.
    Имя переменной DEFB 0 ;1-байтная переменная (значение 0 можно менять)
    Seamos realistas y hagamos lo imposible!
    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

  17. Эти 2 пользователя(ей) поблагодарили Black Cat / Era CG за это полезное сообщение:
    moronizzz (22.08.2016), Reobne (22.08.2016)

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Исходники и коды моих наработок на Z80 под Спектрум
    от weiv в разделе Программирование
    Ответов: 8
    Последнее: 18.02.2017, 21:00
  2. Сегодня ДР у двух моих (и не только) друзей!
    от CodeMaster в разделе Поздравления
    Ответов: 3
    Последнее: 23.01.2016, 23:26
  3. Исходники моих старых программ.
    от SAM style в разделе Программирование
    Ответов: 23
    Последнее: 21.10.2015, 22:14
  4. Одна из моих самых любимых мелодий
    от Cooper в разделе Музыка
    Ответов: 11
    Последнее: 28.08.2008, 11:00

Ваши права

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