ZX-Forum №1 1993 г.

Секреты TR-DOS - Применение процедур TR-DOS без использования области системных переменных.


Темы статьи: Программирование  

СЕКРЕТЫ TR-DOS

Применение процедур TR-DOS без использования области системных

переменных.

© Андрей Бастраков, г. Челябинск.

Основная трудность полной адаптации программ типа "ELITE" к системе TR-DOS состоит в том, что они занимают всю память, включая и область системных переменных, что не позволяет использовать для обращения к диску Бейсик и даже подпрограммы TR-DOS, вызываемые через регистр "С" (несчастные империалисты, не могли байтов 500 оставить, или хотя бы пару адресов добавить к Z-80). В таких случаях выход может быть только в непосредственном обращении к ПЗУ TR-DOS.

Ниже приводятся листинги подпрограмм, из которых видно, как это можно сделать. Адреса подпрограмм ПЗУ указаны для версий TR-DOS 5.03 и 5.04.

Несколько слов об этих версиях. Версия 5.04s отличается от 5.03 только тремя байтами: 2 -номер версии и 1 - флаг переноса в подпрограмме определения скорости перемещения головки. Версия 5.04t - это те же три байта + другая программа форматирования. В остальном они абсолютно идентичны.

Теперь о доработке программы. Подпрограммы обслуживания диска размещаются вместо подпрограмм работы с лентой. Отгрузочный блок размещается в отдельном файле, рассчитанном на одного игрока. При загрузке программы последней операцией должен быть поиск файла на диске, вычисление дорожки и сектора и установка головки на нужную дорожку. Все адреса в листингах даны для версии "JOYSTICK CLUB", будьте внимательны.

Здесь, конечно, я не претендую на истину в последней инстанции, так как все это было написано при остром дефиците информации по TR-DOS.

Подпрограмма "LOAD".

55622

21D0DE

LD

HL,57040

55625

CD53DA

CALL

55891

;Ввод имени пилота.

55628

CD6DD9

CALL

55661

;Запуск дисковода.

55631

211B2F

LD

HL,12059

;Команда чтения сектора.

55634

CD2DDA

CALL

55853

;Переход в ПЗУ TR-DOS.

55637

210048

LD

HL,18432

;Начало буфера чтения.

55640

1154D0

LD

DE,53332

;Блок данных ELITE.

55643

016600

LD

BC,00102

;Длина блока.

55646

EDB0

LDIR

55648

3E01

LD

A,#01

55650

3207D9

LD

(55559),A

;Прошла загрузка.

55653

3ED6

LD

A,#D6

;Сообщение "FOUND COMMANDER"

55655

CD5ADA

CALL

55898

;Печать сообщения.

55658

C308DA

JP ORG

55816 55816

;Переход на продолжение.

55816

2154D0

LD

HL,53332

55819

1132D2

LD

DE,53810

;Прим. ред.: Здесь есть разночтение, ;которое при редактировании книги ; устранить не удалось в связи с ;отсутствием у нас данной версии ;игры. Адрес #D232 = 53810г а не ;53814, как указано у автора.

55822

015D00

LD

BC,00093

55825

EDB0

LDIR

;Перекомпоновка.

55827

C327D9

JP

55591

;Возврат в меню.

Подпрограмма "SAVE".

ORG

55680

55680

2154D0

LD

HL,53332

55683

CD53DA

CALL

55891

;Ввод имени пилота.

55686

210771

LD

HL,28935

55689

11B1D0

LD

DE,53425

;Новые данные в

55692

010900

LD

BC,00009

;отгрузочный блок.

55695

EDB0

LDIR

55697

2154D0

LD

HL,53332

55700

110048

LD

DE,18432

;Подготовка буфера

55703

016600

LD

BC,00102

;к записи.

55706

EDB0

LDIR

55708

CD6DD9

CALL

55661

;Запуск дисковода.

55711

21732D

LD

HL,11635

;Команда записи сектора.

55714

CD2DDA

CALL

55853

;Переход в ПЗУ TR-DOS.

55717

00

NOP

;Удалить ненужные

55718

00

NOP

; команды

Следует заметить, что использование подпрограмм по адресам 12059 и 11635

при ошибке

чтения или записи приводят к зависанию программы, так как в них в этих случаях используется

команда HALT при запрете

прерываний. Надо

сказать, что в TR-DOS ничего не

сделано для

контроля записи (о

том, что

есть, можно даже

не упоминать, настолько это не существенно) и

зачастую об ошибке записи узнаешь только при считывании.

Подпрограмма "Запуск дисковода".

ORG

55661

55661

3A50DA

LD

A, (55888)

;Взять номер дорожки.

55664

21502F

LD

HL,12112

;Команда поиска дорожки для

ВГ-93.

55667

F3

DI

;

55668

CD2DDA

CALL

55853

;Переход в ПЗУ TR-DOS.

55671

21FD3D

LD

HL,15869

;Задержка на

55674

CD2DDA

CALL

55853

;раскрутку диска.

55677

FB

EI

;

55678

C9

RET

;

Подпрограмма "Переход в ПЗУ TR-DOS".

ORG

55853

55853

E5

PUSH

HL

;Запомнить адрес команды.

55854

ED5B4FDA

LD

DE,(55887)

;Е - номер сектора. ;D - номер дорожки.

55858

212D3D

LD

HL,15661

;Команда переключения ПЗУ.

55861

1812

JR ORG

55881 55881

;Переход на продолжение.

55881

E5

PUSH

HL

;Запомнить адрес команды.

55882 55885

210048 C9

LD RET

HL,18432

;Установить адрес буфера. ;Выполнение.

Чтобы все это работало, в ячейки 55887 и 55888 нужно занести номера сектора и дорожки. Это может быть сделано так. После загрузки всех блоков программы (можно даже из Бейсика), кроме отгрузочного, запускается следующий загрузчик:

NAME

DEFM

"elitedatC"

;Имя файла.

21

XX

XX

LD

HL,NAME

;Начальный адрес имени.

0E

13

LD

C,#13

;Переписать имя в

CD

13

3D

CALL

15635

;системную область.

01

0A

09

LD

BC,02314

;Искать номер

78

LD

A, B

;файла в каталоге.

32

06

5D

LD

(23814),A

;Число символов для поиска.

CD

13

3D

CALL

15635

79

LD

A, C

;Теперь в А - номер файла.

0E

08

LD

C,#08

;Прочитать заголовок

CD

13

3D

CALL

15635

;файла из каталога.

2A

EB

5C

LD

HL,(23787)

22

4F

DA

LD

(55887),HL

;Запомнить дорожку и сектор.

3A

EC

5C

LD

A,(23788)

;Определение дорожки для

1F

RRA

;2-стороннего диска (используется

32

50

DA

LD

(55888),A

;в подпрограмма ПЗУ).

01

05

01

LD

BC,00261

;Команда чтения файла.

EB

EX

DE, HL

;В DE - дорожка и сектор.

21

00

48

LD

HL,18432

;Адрес буфера.

CD

13

3D

CALL

15635

;Прочитать файл (установить головку ;на нужной дорожке, в системный ;регистр записать номер стороны).

31

XX

XX

LD

SP,SPACE

;Указатель стека на свободное ;пространство.

Здесь при считывании файла сразу убиваются два зайца: головка устанавливается на необходимую дорожку и программируется системный регистр (ТМ9), что избавляет от необходимости делать это специально.

Затем производится окончательная компоновка программы, если нужно - ввод POKE's (обязательно в машинных кодах), а затем запуск:

F3

DI

3E

FD

LD

A,#FD

ED

47

LD

I,A

ED

5E

IM

2

31

FD

FF

LD

SP,65533

AF

XOR

A

32

E3

70

LD

(28899),A

C3

66

73

JP

29542

Где взять отгрузочный файл? Два самых простых способа.

1. Взять магнитофонный вариант и любым копировщиком, например, "PCOPIER" Н.Родионова, переписать его на диск, а затем переименовать, к примеру, в "elitedat".

2. Проделать такую операцию:

RANDOMIZE USR 15619: REM : SAVE "elitedat"CODE 255,102

Затем загружаете "ELITE" и в "ACCESS MENU" клавишей "2" заполняете файл нужными Вам данными (до этой операции "1" лучше не трогать!)".




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Реклама - Реклама и объявления...
Презентация - варгеймы которые мы выбираем.
Лит. страничка - Гриф "Y-II" (Дневник - продолжение).
Железо - о распайке SCART разъема для ZX Spectrum.
Презентация - Презентация рассказа "Червь".

В этот день...   24 ноября