ZX-Ревю 1994 №3 1993 г.

Секреты TR-DOS - Адаптация АССЕМБЛЕРа "ZEUS" под систему TR-DOS.


СЕКРЕТЫ TR-DOS

Адаптация АССЕМБЛЕРа "ZEUS" под систему TR-DOS

© Мясников Герман, Сыктывкар, 94

Система TR-DOS иашла широкую поддержку в кругах отечественных любителей "Спектрума". Однако, до сих пор многое из давно наработанного программного обеспечения, остается доступным только в кассетных версиях, т.к. не обеспечивается обмен информацией с дисководом. Работы над адаптацией известных прикладных и системных программ под TR-DOS ведутся во всех уголках страны и, нам кажется, на страницах ZX-РЕВЮ было бы не лишним осветить практические приемы таких адаптаций.

В результате предлагаемой адаптации пользователь получит новые команды АССЕМБЛЕРа, доступ к которым возможен из режима MONITOR.

S - записать (SAVE) объектный кода с адреса nn или исходный файл.

L - загрузить (LOAD) файлы типа CODE с адреса, объявленного в каталоге.

D - смена дисковода.

V - каталог.

Р - принтер.

g (строчная) - печать на принтере начинается с колонки 0.

w (строчная) - печать с колонки 40.

Как видите, модернизация программы коснулась не только введения операций ввода/вывода с дисковода, но и возможной поддержки принтера пользователя.

Ниже приведен исходный текст кода, встраиваемого в стандартный АССЕМБЛЕР ZEUS (см. Листинг_1).

Листинг 1.

00010

ORG

#F1F4

00020

CP

80

00030

CALL

Z,#F880

00040

CP

68

00050

JP

Z,DISK

00060

CP

86

00070

JP

Z, CAT

00080

NOP

00090

JP

#F980

00100

ORG

#F980

00110

CP

113

00120

CALL

Z,P0

00130

CP

119

00140

CALL

z,p0

00150

CP

83

00160

JR

Z,SAVE

00170

CP

76

00180

JR

Z,LOAD

00190

JR

END

00200

SAVE

CALL

#E4E3

00210

DEFM

/Code or File?/

00220

DEFB

13.0

00230

CALL

#F652

00240

CP

70

00250

JR

Z,SAVEF

00260

CP

67

00270

JP

Z,SAVEC

00280

END

LD

A,13

00290

CALL

#F503

00300

JP

#F1B3

00310

SAVEF

CALL

NAME

00320

JR

C, END

00330

LD

A,54

00340

LD

(BUF),A

00350

CALL

FNAME

00360

CP

255

00370

JP

NZ,ERR

00380

LD

DE, (#FD0 0)

00390

LD

HL,(#FD02)

00400

INC

HL

00410

WHOD

SBC

HL, DE

00420

JR

Z, END

00430

EX

DE, HL

00440

LD

C,11

00450

LEND1

CALL

15635

00460

JR

END

00470

LOAD

CALL

NAME

00480

JR

C, END

00490

LD

A,57

00500

LD

(BUF),A

00510

CALL

FNAME

00520

CP

255

00530

JR

Z, ERR

00540

XOR

A

00550

LD

(23801),

00560

LD

C,14

00570

LEND

JR

LEND1

00580

NAME

CALL

FILL

00590

LD

B, 8

00600

CALL

#E4E3

00610

DEFM

/Name:/

00620

DEFB

0

00630

LP 1

CALL

#F652

00640

CP

8

00650

RET

C

00660

CP

13

00670

JR

Z, LP

00680

JR

NC,AGA

00690

LP4

DEC

DE

00700

LD

A, E

00710

CP

#DD

00720

JR

C,NAME

00730

LD

A,32

00740

LD

(DE),A

00750

LD

A,12

00760

INC

B

00770

INC

B

00780

JR

LP3

00790

AGA

LD

(DE),A

00800

INC

DE

00810

LP3

CALL

#F503

00820

DJNZ

LP 1

00830

RET

00840

LP

LD

HL,23773

00850

LD

A,(HL)

00860

CP

32

00870

RET

NZ

00880

LD

A,90

00890

LD

(HL),A

00900

INC

HL

00910

PUSH

HL

00920

LD

A,47

00930

LD

(HL),A

00940

LP2

POP

HL

00950

INC

(HL)

00960

PUSH

HL

00970

CALL

FNAME

00980

CP

255

00990

JR

NZ,LP2

01000

POP

HL

01010

RET

01020

FNAME

LD

C,10

01030

CALL

15635

01040

LD

A, (23823

01050

RET

01060

ERR

CALL

#E4E3

01070

DEFB

13

01080

DEFM

/Error /

01090

BUF

DEFB

0,13,0

01100

JP

#F1B3

01110

FILL

LD

HL,23773

01120

PUSH

HL

01130

PUSH

HL

01140

POP

DE

01150

INC

DE

01160

LD

(HL),32

01170

LD

BC, 8

01180

LDIR

01190

LD

(HL),67

01200

POP

DE

01210

RET

01220

SAVEC

CALL

NAME

01230

JP

C, END

01240

CODE

CALL

#E4E3

01250

DFEM

/ Code:/

01260

DEFB

0

01270

CALL

NUM

01280

JR

C,LEND2

01290

LD

H, A

01300

CP

#E0

01310

LD

A,51

01320

LD

(BUF),A

01330

JP

NC,ERR

01340

CALL

NUM

01350

LEND2

JP

C, END

01360

LD

L,A

01370

CALL

#F652

01380

CP

13

01390

LD

A,13

01400

CALL

#F503

01410

CALL

NZ,#F252

01420

JR

NZ,CODE

01430

PUSH

HL

01440

POP

DE

01450

CALL

DLINA

01460

LD

A,53

01470

LD

(BUF),A

01480

JR

NZ,ERR

01490

PUSH

HL

01500

PUSH

DE

01510

LD

A,54

01520

LD

(BUF),A

01530

CALL

FNAME

01540

CP

255

01550

POP

DE

01560

POP

HL

01570

JR

NZ,ERR

01580

JR

WHOD

01590

NUM

CALL

#F652

01600

CP

8

01610

RET

C

01620

CALL

SRAW

01630

AND

A

01640

JR

Z,EXIT

01650

LD

D,A

01660

CALL

#F503

01670

LD

A, D

01680

CALL

LA

01690

RLCA

01700

RLCA

01710

RLCA

01720

RLCA

01730

LD

D,A

01740

CALL

#F652

01750

CP

8

01760

RET

C

01770

CALL

SRAW

01780

AND

A

01790

JR

Z,EXIT

01800

LD

E,A

01810

CALL

#F503

01820

LD

A, E

01830

CALL

LA

01840

OR

D

01850

RET

01860

LA

SUB

48

01870

CP

10

01880

RET

C

01890

SUB

7

01900

RET

01910

SRAW

CP

48

01920

JR

C, LER

01930

CP

58

01940

RET

C

01950

CP

65

01960

JR

C, LER

01970

CP

71

01980

RET

C

01990

LER

CP

7

02000

RET

Z

02010

XOR

A

02020

RET

02030

EXIT

POP

HL

02040

LD

A,13

02050

CALL

#F503

02060

CALL

#F2 7 6

02070

JP

CODE

02080

DLINA

PUSH

HL

02090

POP

BC

02100

PUSH

HL

02110

LD

HL,573

02120

SBC

HL, BC

02130

PUSH

HL

02140

POP

BC

02150

POP

HL

02160

L8

LD

A,101

02170

CPIR

02180

RET

NZ

02190

LD

A,(HL)

02200

CP

78

02210

JR

NZ, L8

02220

INC

HL

02230

LD

A,(HL)

02240

CP

68

02250

JR

Z,L9

02260

DEC

HL

02270

JR

L8

02280

L9

DEC

HL

02290

DEC

HL

02300

RET

02310

DISK

CALL

#E4E3

02320

DEFM

/a or :

02330

DEFB

0

02340

CALL

#F652

02350

SUB

65

02360

AND

A

02370

JR

Z, DA

02380

CP

1

02390

JR

Z, DA

02400

JP

#F1B3

02410

DA

LD

C,1

02420

LD

(#5D19),A

02430

JR

LP5

02440

CAT

LD

C,24

02450

CALL

15635

02460

LD

A,2

02470

LD

C,7

02480

LP5

CALL

15635

02490

LD

A,3

02500

CALL

#1601

02510

LP 6

CALL

#F652

02520

CP

13

02530

JR

C, LP6

02540

LD

A,15

02550

CALL

#F503

02560

JP

END

02570

P0

SUB

79

02580

PUSH

AF

02590

LD

A,27

02600

CALL

#F95A

02610

CALL

A,108

02620

CALL

#F95A

02630

POP

AF

02640

CP

40

02650

JR

Z,P1

02660

XOR

A

02670

P1

CALL

#F95A

02680

RET

После модернизации программы у Вас появятся несколько новых возможных сообщений об ошибках: 3 - адрес при записи на диск больше #Е000.

5 - нет метки (см. ниже).

6 - файл уже есть.

9 - нет файла на диске.

По поводу ошибки "5". В режиме SAVE CODE программа ищет байты 101, 78, 68 и по ним определяет длину блока. Например:

10 20 30 40 50

(или:

ORG LD OUT RET DEFM 101,78,

DEFB

40000 A, 2 (254),

A

/eND/; )

Блок кодов будет загружен с адреса 40000 до "eND".

В заключение скажем несколько слов относительно поддержки Вашего принтера. Строки 2570...2680 выполняют действия, аналогичные строке Бейсика:

LPRINT CHR$ 2 7+"l"+CHR$ 40. Если Вас не устраивает значение "40", то Вам нужно будет поставить свой код управления табуляцией. Если у Вас "Скорпион-256", то можете просто набрать драйвер "1р 256", приведенный ниже. Иначе придется использовать (может быть писать или подбирать) свой драйвер.

"Ip256"

for

"SCORPION-256"

F880

F5

3E

85

32

7F

5C

3E

00

F888

32

7B

F9

F1

2A

53

5C

2B

F890

2B

2B

2B

2B

11

E1

F8

72

F898

2B

73

21

3C

00

22

7C

F9

F8A0

AF

32

7E

F9

3E

98

00

00

F8A8

00

00

00

00

00

00

C9

CD

F8B0

00

F9

7E

E6

0F

20

F8

C9

F8B8

2B

CB

FE

2B

CB

FE

C9

3E

F8C0

20

18

42

FE

40

38

02

D6

F8C8

07

E6

0F

CB

7E

28

06

17

F8D0

17

17

17

77

C9

86

2B

CB

F8D8

BE

18

2A

CD

4D

F9

36

00

F8E0

C9

21

7C

F9

CB

7E

23

20

F8E8

DA

FE

06

23

28

C1

FE

0D

F8F0

28

E9

FE

20

00

FE

7F

28

F8F8

C6

38

07

D6

A5

C3

10

0C

F900

3E

20

F5

34

F1

CD

1D

F9

F908

18

50

00

00

0E

FE

ED

78

F910

17

38

FB

16

FE

00

00

15

F918

20

FD

00

00

C9

FE

0E

DA

F920

42

F9

F5

DD

21

7B

F9

DD

F928

7E

00

DD

34

00

DD

21

7F

F930

5C

DD

BE

00

DA

4B

F9

3E

F938

0D

CD

08

F9

3E

00

CD

08

F940

F9

F1

DD

21

7B

F9

DD

36

F948

00

00

C9

F1

C9

3E

0D

CD

F950

05

F9

3E

00

C3

05

F9

00

F958

00

00

F5

CD

54

1F

D2

00

F960

0D

DB

FE

E6

80

20

F4

F1

F968

01

DD

FF

ED

79

F5

01

FD

F970

1F

AF

CB

EF

ED

79

AF

ED

F978

79

F1

C9

0E

3C

00

17

00

При подборе своего драйвера учтите возможное изменение адресов в строках 2600, 2620 и 2670. Эти строки должны адресоваться в блок кодов, аналогичный приведенному в Листинге_2.

Листинг_2.

00005

ORG

#F95A

00010

PUSH

AF

00020 L1

CALL

#1F54

00030

JP

NC,#0D00

00040

IN

A, (254)

00050

AND

128

00060

JR

NZ . L1

00070

POP

AF

00080

LD

BC,FFDD

00090

OUT

(C) , A

00100

PUSH

AF

00110

LD

BC,#1FFD

00120

XOR

A

00130

SET

5,A

00140

OUT

(C) , A

00150

XOR

A

00160

OUT

(C) , A

00170

POP

AF

00180

RET

При желании можно вообще убрать всякое упоминание о принтере: удалите строки 2570-2680; 110-160; и измените строки 20-30 на: 20 CP 83

30 JP Z, SAVE

ИФК: Заканчивая эту статью, мы не заканчиваем эту тему. Пользовательская адаптация программ под TR-

DOS - это один из самых интересных и важных вопросов.

* * *




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Рабочий стол - Как работать с программами: Cache File Manager 512k.
Зазеркалье - Из хроники исчезновений (продолжение).
От авторов - о создателях газеты и новой групе NOT-SOFT.
Анекдоты - 16 анекдотов.
Обратная связь - контакты редакции.

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