![]() |
Чтение файла в tr-dos
Прошу помощи. Пишу на z88dk и только начал изучать ассемблер. Потребовалось мне сделать загрузку файлов с дискетки. Т.к. ни в z88dk ни в spritepack подобных функций я не нашел, то пришлось вооружаться поиском, книгами и получилось вот это
Code:
void tr_dos_load (char *filename,char* dest) |
при обращении к ТР-Дос и переходе по адресу #3dхх происходит подключение РОМ ТРДос
Далее происходит отработка программы именно в этом РОМе при приходе прерывания РОМ ТРдос отключается и соответственно возвращение из Прерывания происходит непоймикуда и потому РЕСЕТ! |
Как было написано в книге Ларченко-Родионова (стр. 196). Работа tr-dos с прерываниями реализована плохо (точнее, никак не реализована). В частности, это относится к работе во втором режиме прерывания (насколько я понял, речь шла о im2).
Проблема в "аппаратном переключении" ПЗУ tr-dos в стандартное ПЗУ sos (стандартное spectrum ПЗУ) в момент прихода прерывания. И его "невозврат" в tr-dos по завершении обработки прерывания (т.е. вместо выполнения кода tr-dos будет выполняться, что-то из sos). В книге, для корректной работы в режиме IM2, используют "разницу" в этих ПЗУ для значения вектора прерывания (а значит и определения, с каком из ПЗУ, в данный момент работает компьютер). Там же приводится пример программы, работающей во втором режиме прерывания, независимо от того, "находитесь" вы в sos или tr-dos. |
Quote:
если для понтов то подумай как это будет выглядеть в ТАПке 2 если загрузка действительно нужна, то посмотри загрузчик в http://www.worldofspectrum.org/infos...cgi?id=0012860 в этой игрушке - он работает везде, во всяком случае нареканий не было. 3 ну и пара советов 1 загрузку стандартными средствами трудно переделать под ИМ2 изза того, что Дос периодически лазает в ПЗУ басика 2 отследить какое ПЗУ включено невозможно, можно только предположить |
Все разобрался. Спасибо подтолкнули в нужное русло :). Прерывания во время загрузки мне не нужны вообще. Теперь перед обращениями к тр-дос просто переключаю на 1й режим, а после на 2й.
|
Quote:
|
newart, Общение с живыми оно же завсегда лучше
|
Quote:
|
Quote:
а потом снова разрешает... и привет:v2_dizzy_messed: |
что-то все равно не выходит. Теперь функция отрабатывает после вызова
Code:
sp_InitIM2(0xf1f1);А вылетает она на этих строчках. Code:
LD C,10 |
| All times are GMT +4. The time now is 21:03. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.