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

User Tag List

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

Тема: Как загрузить файлы из ассемблера?

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

    По умолчанию Как загрузить файлы из ассемблера?

    Всех с прошедшими праздниками!

    Подскажите, кто знает.

    Имею три файла 1) шрифт "MYFONT01" 2) блок сцен игры "TEXT-000" 3) сама программа "cod03".
    Когда гружу их из бейсика (см. скрин №1) - все грузится и попадает куда надо: шрифт в 26.000, блок сцен в #С000, код в 28050 - все видно дебагером.

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

    Попробовал сделать (см.скрин №2), но что-то ничего не грузит. Вроде все как в примере из книги "ТР-ДОС для пользователей и программистов".
    Причем первый вызов #3d13 с кодом в регистре с = #13 работает, имена файлов "MYFONT01" и "TEXT-000" с меток FILE00 и FILE01 в область системных переменных из DEFB "MYFONT01C" и DEFB "TEXT-000C" перемещаются. Спектрулятор типа дисковом мигает, а в памяти нули...

    Где туплю?
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Скрин2.jpg 
Просмотров:	470 
Размер:	48.8 Кб 
ID:	57191   Нажмите на изображение для увеличения. 

Название:	Скрин1.jpg 
Просмотров:	403 
Размер:	71.4 Кб 
ID:	57190  
    Последний раз редактировалось STD; 14.05.2016 в 22:42.

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

  3. #2
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    32 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну по той книге на которую вы ссылаетесь в DE должна быть длинна. А что у вас?

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

    Вам вроде нужен режим a=3

  4. #3
    Member
    Регистрация
    14.03.2016
    Адрес
    г. Псков
    Сообщений
    48
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    2 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Там написано: если A=#FF то "коды загружаются с адреса HL, но длина загружаемого файла равна длине записанного на диск." Поэтому я только HL и устанавливаю. Честно говоря это уже второй вариант, сначала пробовал режим "A=#00 - адрес загрузки и длина берется из каталога" - тоже не работало. Может правда а =3 попробовать....

  5. #4
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    32 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Страница 193/194, и там того что вы говорите не написано. Возможно и 0 должен работать но на скринах нет вывода команды LIST

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

    А и CLEAR надо на еденицу ниже ставить, не помню почему но так принято

  6. #5
    Member
    Регистрация
    14.03.2016
    Адрес
    г. Псков
    Сообщений
    48
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    2 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Извиняюсь, ввел в заблуждение относительно первоисточника смотрел в "TR-DOS для профессионалов и любителей" вот здесь http://zxpress.ru/book_articles.php?id=1352.
    Точно! Есть же еще "ZX-Spectrum & TR-DOS для пользователей и программистов" http://zxpress.ru/book.php?id=132, и выглядит посолиднее, сейчас там почитаю.
    А за подсказку про CLEAR - спасибо, не заметил. Думаю это вызвано тем, что на адрес clear, как я понял, переставляется стек процессора. Получается, что при загрузке в 26000 файла в моем случае первая ячейка стека затрется первый байтом загруженного файла, так что, действительно, надо его в 25999 поставить. 8)

    Почитал и вторую книжку, вроде там все также написано... 8(. Ладно, попробуем еще DE задать...
    Последний раз редактировалось STD; 15.05.2016 в 23:42.

  7. #6
    Member
    Регистрация
    14.03.2016
    Адрес
    г. Псков
    Сообщений
    48
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    2 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вах, если кому интересно сообщаю итоги моих экспериментов.

    Загрузить файлы из ассемблера именно в виде файла просто по его имени наиболее простой и логичной командой с = #0E у меня не получилось ни в каком виде. 2 вечера бесплотных попыток. Причем и сам файл находился с помощью c = #0A и дискриптор его считывался по c = #08, а грузить по с = #0E - никак. Так и не понял в чем дело.

    В итоге выход нашелся благодаря Яндексу, этому форуму и сообщению jerri от 2011г. (спасибо ему заочно). Теперь гружу файлы по-секторно, предварительно всеми вышеуказанными функциями узнав его физическое местоположение на диске. Выглядит так (вдруг еще кому пригодится):

    LD HL,FILENAME ; по этому адресу имя загружаемого файла 8 байт и расширение (у меня "FNT00000C")
    LD C,#13 ; переносим имя и тип файла в область системных переменных ТР-ДОС
    CALL #3D13 ;

    LD C,#0A ; По перенесенному имени и типу файла ищем его в каталоге
    CALL #3D13 ; номер файла получаем в регистре С

    LD A,C ; Копируем полученный номер файла в каталоге в А
    LD C,#08 ; и по его номеру считываем из каталога в область системных переменных
    CALL #3D13 ; полные данные о файле

    LD HL,26000 ; в HL - адрес куда будем считывать файл
    LD DE,(#5CEB) ; в DE - из сист.переменных берем начальную дорожку и сектор файла
    LD A,(#5CEA) ; в B через А заносим длину файла в секторах
    LD B,A ;
    LD C,5 ; читаем!!!
    CALL #3D13

    Надеюсь никого не оскорбил сим опусом...

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

    По умолчанию

    Цитата Сообщение от STD Посмотреть сообщение
    Загрузить файлы из ассемблера именно в виде файла просто по его имени наиболее простой и логичной командой с = #0E у меня не получилось ни в каком виде. 2 вечера бесплотных попыток. Причем и сам файл находился с помощью c = #0A и дискриптор его считывался по c = #08, а грузить по с = #0E - никак. Так и не понял в чем дело.
    0 устанавливал не в ту переменную



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

  9. #8
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    32 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Решил и я проверить раз такие страсти и как и следовало ожидать все работает как и написано в книге. TR-DOS 5.04TM была в анриле по дефолту. Код:
    Код:
           device zxspectrum128
    
            org #5d3b
    start   dw #100                         ; line number = 1
            dw lend-lbegin                  ; line length
    lbegin  db #fd,#30                      ; 'clear' 0
            db #0e,#00,#00,#ff,#5f,#00      ;   value=#5fff
            db #3a,#f9,#c0,#30              ; ':' 'rand' 'usr' 0
            db #0e,#00,#00:dw code:db #00   ;   start address
            db #3a,#ea                      ; ':' 'rem'
    
    code    ; insert your code here
            ; res 4,(iy+1)                ; fix usr0 issue
            ; ld hl,#c9f1,(#5cc2),hl      ; don't break while loading
            display code
            ld hl,name
            ld c,#13
            call #3d13
            xor a
            ld (#5cf9),a
            ld a,3
            ld hl,#4000
            ld c,#0e
            call #3d13
            di
            halt
    name
    	db "scr     C"
            db #0d                          ; enter (end of basic line)
    lend
        
            emptytrd "mydisk.trd"
            savetrd  "mydisk.trd","boot.B",start,lend-start
            org #6000
    scr
    	ds #1800,#55
    	ds #300,#07
    scrl	equ $-scr
            savetrd "mydisk.trd","scr.C",scr,scrl
    Видим ожидаемую картинку с полосками. Проверил на 5.03, абсолютно также ( да и как могло быть по другому???).

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

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Проверил на 5.03, абсолютно также ( да и как могло быть по другому???)
    частенько возникает ситуация когда значение в (23824)/(#5d10) не-равно нулю,
    вот тогда функция #0E и перестаёт работать как загрузчик файла.
    ..............
    похоже туда пишется #FF после загрузки файла (например основного загрузчика) стандартными средствами trdos из бейсика.
    ага PC==#181E
    Последний раз редактировалось goodboy; 20.05.2016 в 22:58.

  11. #10
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    32 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    частенько возникает ситуация когда значение в (23824)/(#5d10) не-равно нулю
    Ну ок, возможно. Проверил при работе запись в данную ячейку, словил кучу записей туда 0 и ничего более. Все равно мне не совсем понятно что было не так. Сброс, трдос, ран при таком подходе все должно было работать.

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

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

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

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

Похожие темы

  1. У. Морер. Язык ассемблера для ПК ЭПЛ
    от shapipovo в разделе Техническая литература
    Ответов: 3
    Последнее: 05.04.2015, 19:27
  2. Ответов: 10
    Последнее: 06.03.2015, 12:59
  3. Азбука ассемблера
    от Zidane в разделе Для начинающих
    Ответов: 22
    Последнее: 11.06.2013, 18:56
  4. (Обмен) У. МОРЕР. Язык ассемблера для ПК ЭПЛ
    от shapipovo в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 30.08.2011, 22:06
  5. листинг ассемблера z80 в фильме }{0Тт@БЬ)Ч
    от daniel в разделе Разный софт
    Ответов: 6
    Последнее: 11.02.2008, 23:19

Ваши права

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