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

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 29

Тема: Загрузка блока(Bytes) из aссемблера

  1. #1
    Member Аватар для amfirifma
    Регистрация
    04.11.2009
    Адрес
    Севастополь
    Сообщений
    55
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question Загрузка блока(Bytes) из aссемблера

    Как загрузить блок (с заголовком!) стандартным способом из ассемблера,
    т.е. аналогично команде BASIC
    LOAD""CODE ?

    пробовал вариант:

    LD IX,30000
    LD DE,1000
    LD A,0 ;0 - блок с заголовком, 255 - без
    SCF
    CALL 1366 ;(или 2050)
    RET

    при 0 - происходит щелчок, но не выбивает имя блока, (если загрузить его в экранную область, - рисует линии, т.е. воспринимает заголовок, как блок данных. Сразу после этого склеивается с самими блоком данных и загрузка продолжается, но мне нужно высветить заголовок блока!
    Методом "тыка" нашел такое:
    если поставить вместо call 1366 - call 1568,
    тогда заголовок выбивается на экране, но не идет загрузка последующего блока
    Я не знаю ассемблера, но очень хочется
    Помогите пожалуйста.
    Пробовал в EmuZWin
    и чуток в Spectaculatorе.

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

  3. #2
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,767
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    770 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    тут два варианта

    1 пользоваться встроенными процедурами, но тогда надо подготовить хотя-бы адрес для загрузки заголовка,
    кроме того для печати необходимы системные переменные, то есть бейсик функционирует.
    непонятно зачем тогда нужно грузиться именно из маш.кода
    2 делать всё самому.
    в том числе и печать заголовка

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

    Цитата Сообщение от amfirifma Посмотреть сообщение
    LD A,0 ;0 - блок с заголовком, 255 - без
    SCF
    CALL 1366 ;(или 2050)
    неправильное понимание ситуации.
    у любого блока данных (при сохранении стандартными процедурами) есть два невидимых байта.
    первый это тип данных, последний - контрольная сумма.
    у заголовка это #00, у данных #ff / 255

    call 1366 тупо грузит (или сверяет) данные,
    напечатать заголовок она не в состоянии

  4. #3
    Member Аватар для amfirifma
    Регистрация
    04.11.2009
    Адрес
    Севастополь
    Сообщений
    55
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Когда мы вводим в бейсике LOAD""CODE (после проверки что это за команда и какие у нее параметры) происходит же переход по какому-то адресу в памяти к процедурам ее обслуживающим? Можно как-то узнать какой это адрес и из машинных кодов перейти по этому адресу?
    После LOAD""CODE блок будет грузиться по адресу по которому он записан, и мы же не указываем его длину, а тем более куда записать его заголовок. Или я чего-то не понимаю.
    самое смешное что пару раз заголовок и данные грузились, но в следущий разы (после закрытия эмуля) уже почему-то нет.
    Адрес в IX - это только адрес для данных? Как подготовить адрес для заголовка? Есть ли процедура печатающая заголовок?
    Как-то же печатается заголовок, если запускать call 1568 вернее 1569 (SA-SPACE). Может можно дернуть начало из этой процедуры, а потом перейти к call 1366?
    Сделал весь "загрузчик" на ассемблере и споткнулся на вроде бы ровном месте.
    Простите за словесный поток

  5. #4
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

  6. #5
    Member Аватар для amfirifma
    Регистрация
    04.11.2009
    Адрес
    Севастополь
    Сообщений
    55
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, посмотрел, но в деле не продвинулся, не хватает знаний. Может кто-нибудь поможет собрать такую процедуру, а я вам интересную темку представлю

  7. #6
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    amfirifma, в книге смотри адрес 0605 Save-etc это точка загрузки\записи и тд
    С уважением,
    Jerri / Red Triangle.

  8. #7
    Member Аватар для amfirifma
    Регистрация
    04.11.2009
    Адрес
    Севастополь
    Сообщений
    55
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    C Nonsense in Basic
    Может надо задать какие-то входные параметры перед call 1541 ?
    Последний раз редактировалось amfirifma; 13.03.2017 в 14:04.

  9. #8
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если нужна полная копия команды бейсика (с проверкой и выводом заголовка и т.п.), проще выйти из машкода в бейсик, загрузить блок командой бейсика, и вернуться в машкод. Использовать код ПЗУ команд бейсика слишком муторно, легко не получится.

    Из машинного кода обычно грузят блоки с заранее известными параметрами - адресом начала загрузки, длиной и флаговым байтом. Где-то так:

    LD IX, адрес начала загрузки
    LD DE, длина блока кодов
    LD A,#FF (или другой флаговый байт в самом начале блока. бейсик использует 0 для заголовков, 255 для собственно блоков)
    SCF
    INC D
    EX AF,AF'
    DEC D
    DI
    CALL #0562 (#0556 в случае ошибки загрузки выйдет в бейсик)
    JP NC, обработка ошибки загрузки. например, повтор


    Если точно известно, что перед блоком кодов идёт заголовок, нужно написать сначала подобный код для заголовка:
    LD IX, адрес буфера для заголовка
    LD DE, 17
    LD A,0
    SCF
    INC D
    EX AF,AF'
    DEC D
    DI
    CALL #0562
    JP NC, обработка ошибки загрузки
    Последний раз редактировалось Spectramine; 17.03.2017 в 23:39. Причина: добавил DI

  10. #9
    Veteran
    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,747
    Спасибо Благодарностей отдано 
    149
    Спасибо Благодарностей получено 
    53
    Поблагодарили
    39 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а для чего в этих примерах дёргать регистр D?
    INC D
    EX AF,AF'
    DEC D
    ZX-Evo Rev. C4 (Double-config) / VDAC2 / ZiFi / NeoGS / ZXM-Soundcard Extreme

  11. #10
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чтобы обнулить флаг ZF - ZF=0 индицирует необходимость сверки флагового байта в процессе загрузки. После сверки флагового байта ZF =1, и остальные байты грузятся в память. Т.е. если ZF=1 перед EX AF,AF', флаговый байт будет загружен в память, как и все остальные, без его сверки.
    Последний раз редактировалось Spectramine; 13.03.2017 в 16:08.

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

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

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

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

Похожие темы

  1. Legends of Bytes #5
    от cherkasy в разделе Пресса
    Ответов: 21
    Последнее: 02.11.2015, 22:22
  2. Legends of Bytes #4
    от cherkasy в разделе Пресса
    Ответов: 15
    Последнее: 19.12.2012, 01:41
  3. Legends of Bytes #3
    от cherkasy в разделе Пресса
    Ответов: 11
    Последнее: 24.02.2012, 18:46
  4. Ищу схемы от блока КНГМД и блока КМ
    от Gryphon в разделе БК-0010/0011
    Ответов: 53
    Последнее: 21.06.2010, 21:37
  5. Legends of Bytes #2
    от cherkasy в разделе Пресса
    Ответов: 20
    Последнее: 05.11.2009, 19:25

Ваши права

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