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

User Tag List

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

Тема: Чтение файла в tr-dos

  1. #1
    Activist Аватар для hippiman
    Регистрация
    29.02.2008
    Адрес
    Ростов-на-Дону
    Сообщений
    260
    Благодарностей: 300
    Записей в дневнике
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question Чтение файла в tr-dos

    Прошу помощи. Пишу на z88dk и только начал изучать ассемблер. Потребовалось мне сделать загрузку файлов с дискетки. Т.к. ни в z88dk ни в spritepack подобных функций я не нашел, то пришлось вооружаться поиском, книгами и получилось вот это
    Код:
    void tr_dos_load (char *filename,char* dest)
    {
    	sprintf(asm_filename,"%s",filename);
    	asm_adres=&asm_dat[0];
    	asm_len=0;
    	#asm
    	di
    	.LOAD
            CALL   SET_NAMEL   ; готовим сист.
                             ; переменные
           LD     C,10       ; ищем файл
           CALL   15635
           LD     A,C
           BIT    7,C
    	   JR     Z,LD_1
    	   jp ext
           RET
        
    		
    	.LD_1                     ; грузим...
           LD     A,C
           LD     C,8
           CALL   15635
           XOR    A
           LD     (23801),A
           LD     (23824),A
    	   LD	  A,3
    	   LD     HL,(_asm_adres)
           LD     C,14
           CALL   15635
    	   
           JP	ext
    	.SET_NAMEL
         LD     HL,_asm_filename    ; перекидываем
           LD     DE,23773   ; имя файла
           LD     BC,8
           LDIR
           LD     A,67    ; тип файла м.б.
           LD     (23781),A  ; любой, кроме
           LD     A,9        ; поиск файла
           LD     (23814),A  ; по 9 символам
           RET
    	 .ext
    	 ei
    	#endasm
    	sprintf(dest,"%s",asm_dat);
    }
    С выключенными прерываниями функция работает, но когда я включаю прерывания функцией sp_InitIM2(0xf1f1) сбрасывает спектрум при обращении. Помогите мне разобраться что не так и довести ее в работоспособное состояние.

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 706
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    при обращении к ТР-Дос и переходе по адресу #3dхх происходит подключение РОМ ТРДос
    Далее происходит отработка программы именно в этом РОМе
    при приходе прерывания РОМ ТРдос отключается и соответственно
    возвращение из Прерывания происходит непоймикуда и потому РЕСЕТ!
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  4. #3
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    2,679
    Благодарностей: 2035
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как было написано в книге Ларченко-Родионова (стр. 196). Работа tr-dos с прерываниями реализована плохо (точнее, никак не реализована). В частности, это относится к работе во втором режиме прерывания (насколько я понял, речь шла о im2).
    Проблема в "аппаратном переключении" ПЗУ tr-dos в стандартное ПЗУ sos (стандартное spectrum ПЗУ) в момент прихода прерывания. И его "невозврат" в tr-dos по завершении обработки прерывания (т.е. вместо выполнения кода tr-dos будет выполняться, что-то из sos). В книге, для корректной работы в режиме IM2, используют "разницу" в этих ПЗУ для значения вектора прерывания (а значит и определения, с каком из ПЗУ, в данный момент работает компьютер). Там же приводится пример программы, работающей во втором режиме прерывания, независимо от того, "находитесь" вы в sos или tr-dos.
    Последний раз редактировалось null_device; 27.09.2011 в 08:40.
    Когда есть, но не знаеш где - это все равно, что нету.

  5. #4
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 706
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hippiman Посмотреть сообщение
    Помогите мне разобраться что не так и довести ее в работоспособное состояние.
    1. для чего тебе вообще загрузка с включенными прерываниями?
    если для понтов то подумай как это будет выглядеть в ТАПке

    2 если загрузка действительно нужна, то посмотри загрузчик в
    http://www.worldofspectrum.org/infos...cgi?id=0012860 в этой игрушке -
    он работает везде, во всяком случае нареканий не было.

    3 ну и пара советов
    1 загрузку стандартными средствами трудно переделать под ИМ2 изза того, что Дос периодически лазает в ПЗУ басика
    2 отследить какое ПЗУ включено невозможно, можно только предположить
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  6. #5
    Activist Аватар для hippiman
    Регистрация
    29.02.2008
    Адрес
    Ростов-на-Дону
    Сообщений
    260
    Благодарностей: 300
    Записей в дневнике
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все разобрался. Спасибо подтолкнули в нужное русло . Прерывания во время загрузки мне не нужны вообще. Теперь перед обращениями к тр-дос просто переключаю на 1й режим, а после на 2й.

  7. #6
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,947
    Благодарностей: 1520
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hippiman Посмотреть сообщение
    Все разобрался. Спасибо подтолкнули в нужное русло . Прерывания во время загрузки мне не нужны вообще. Теперь перед обращениями к тр-дос просто переключаю на 1й режим, а после на 2й.
    Йожег, сабж милион раз обсосан в электронной ZX прессе. (там процедуры как правило актуальнее реликтовых книг)

  8. #7
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 706
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    newart, Общение с живыми оно же завсегда лучше
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  9. Этот пользователь поблагодарил jerri за это полезное сообщение:
    Destr (27.09.2011)

  10. #8
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,288
    Благодарностей: 749
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hippiman Посмотреть сообщение
    Все разобрался. Спасибо подтолкнули в нужное русло . Прерывания во время загрузки мне не нужны вообще. Теперь перед обращениями к тр-дос просто переключаю на 1й режим, а после на 2й.
    может просто запретить их?
    ZXMAK2 - Виртуальная Машина ZX Spectrum http://zxmak2.codeplex.com
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  11. #9
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 706
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexander Makeev Посмотреть сообщение
    может просто запретить их?
    прерывания трдос само запрещает
    а потом снова разрешает... и привет
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  12. #10
    Activist Аватар для hippiman
    Регистрация
    29.02.2008
    Адрес
    Ростов-на-Дону
    Сообщений
    260
    Благодарностей: 300
    Записей в дневнике
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    что-то все равно не выходит. Теперь функция отрабатывает после вызова
    Код:
    sp_InitIM2(0xf1f1);
    sp_CreateGenericISR(0xf1f1);
    но вылетает с криками "out of memory" если ее вызвать после любой функции spritepack'a.
    А вылетает она на этих строчках.
    Код:
    LD     C,10      
    CALL   15635
    Может быть нужно какую-то область памяти предварительно сохранять, а потом восстанавливать?
    Последний раз редактировалось hippiman; 27.09.2011 в 14:46.

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

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

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

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

Похожие темы

  1. Помогите с расширением файла
    от Rindex в разделе Музыка
    Ответов: 6
    Последнее: 28.10.2009, 10:16
  2. Архивирование wav файла
    от p@lex в разделе Музыка
    Ответов: 4
    Последнее: 09.02.2008, 00:23
  3. Чтение дисков с iS-DOS
    от IDma в разделе Утилиты
    Ответов: 11
    Последнее: 12.02.2006, 08:04

Ваши права

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