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

User Tag List

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

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Junior Аватар для moronizzz
    Регистрация
    02.05.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    15
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    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 
Просмотров:	715 
Размер:	9.1 Кб 
ID:	57627

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

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

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

  3. #2
    Сибирский антропоморфн Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,552
    Спасибо Благодарностей отдано 
    922
    Спасибо Благодарностей получено 
    870
    Поблагодарили
    634 сообщений
    Mentioned
    5 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

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

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

  4. #3
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 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 Extreme + NeoGS.

  5. #4
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,153
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    23 сообщений
    Mentioned
    1 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 в 14:16. Причина: Подправил теги

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

    По умолчанию

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

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

  7. #6
    Сибирский антропоморфн Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,552
    Спасибо Благодарностей отдано 
    922
    Спасибо Благодарностей получено 
    870
    Поблагодарили
    634 сообщений
    Mentioned
    5 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

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

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

  8. #7
    Guru Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 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
    [свернуть]

  9. #8
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

    По умолчанию

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

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

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

  11. #10
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    moronizzz, размещай это дело в памяти
    ld a,(foo)
    inc a
    ld (foo),a
    ld hl,(foow)
    ret

    foo db 1
    foow dw #8001

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

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

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

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

Похожие темы

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

Ваши права

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