ZX-Ревю 1997 №1-2 1997 г.

Этюды - процедура выгрузки/загрузки, не использующую системные переменные.


(с) Старков Павел, 1996.

Предлагаю вниманию читателей процедуру выгрузки/загрузки, не использующую системные переменные. С ее помощью на диск можно записать кодовый блок в виде файла. Драйвер записи/чтения сектора был взят из ZX РЕВЮ 95/4.

Чтобы записать кодовый блок, нужно вызвать процедуру SAVE. При этом в регистровой паре HL адрес начала файла в памяти, в DE длина файла, а с метки DATA должно находиться имя файла (8 байтов) и байт расширения файла.

При загрузке нужно вызвать процедуру LOAD. При этом, с метки DATA должны находиться аналогичные данные, что и при записи. Если при вызове процедуры загрузки в регистре А - 0, то

A.D

7

NZ

А,Е

А,32

Е,А

С

A.D

8

D.A D

A.D

7

7

NZ А,Е 32

E,А С

A.D А,8 D.A

стартовый адрес и длина файла будет взята из каталога, а если А не равен 0, то в регистре HL - адрес, в DE - длина файла.

Если при выходе из SAVE или LOAD, в регистре А содержится 0, то процедура отработала успешно, если не равно 0 - ошибка.

При работе с модулем существует несколько проблем:

1. Если в записываемый блок попадают ячейки #5С00-5С01 и #5CFE-5D01, то их содержимое будет записано неверно, т.к. процедура записи во время работы использует эти ячейки, восстанавливая их при. выходе. Чтобы эти ячейки записать правильно, надо сначала перебросить записываемый блок в другую область памяти и записывать его оттуда.

2. Если при записи диск будет неотформатирован или защищен от записи, программа попытается выдать сообщение Retry, Abort, Ignore, но если системные переменные уничтожены, то последствия будут печальны.

3. Если при загрузке не будет читаться какой-нибудь сектор, то программа зависнет.

В остальном программа работает устойчиво. Весь модуль вместе с переменными занимает 476 байт + буфер длиной 256 байт, расположенный следом за программой.

10

ORG

50000

20 SAVE

LD

(START),HL

30

LD

(LEN).DE

40

CALL

ON DSK

50

LD

DE,8

60

CALL

LOADL

70

LD

A,(BUFF+228)

80

CP

128

90

RET

NC

100

LD

HL,(BUFF+225)

110

LD

(SECTRK).HL

120

LD

HL.(LEN)

130

PUSH

AF

140

LD

C,H

150

INC

L

160

DEC

L

170

JR

Z.S1

180

INC

С

190 S1

LD

B,0

200

LD

А,С

210

LD

(LENSEC),A

220

LD

HL,(BUFF+229)

230

POP

AF

240

AND

A

250

SBC

HL.BC

260

RET

С

270

PUSH

HL

280

LD

(NUM1 + 1),A

290

LD

D.B

300

LD

B.A

310

AND

15

320

ADD

A,A

330

ADD

A.A

340

ADD

A.A

350

ADD

A,A

360

LD

E.A

370

LD

HL.BUFF

380

ADD

HL.DE

390

PUSH

HL

400

LD

А,В

410

AND

240

420

RRA

430

RRA

440

RRA

450

RRA

460

LD

E.A

470

LD

(SYSTRK+1),DE

480

CALL

LOADL

490

POP

DE

500

LD

HL.DATA

510

LD

ВС, 16

520

LDIR

530

LD

A,(NUM1+1)

540

CPL

550

AND

15

560

PUSH

AF

570

JR

Z,S9

580

XOR

A

590

LD

(DE),A

zx-p<?«ho 97/1-2

ЭТЮДЫ

600 s9

LD

DE.(SECTRK)

1090 LOAD2

LD

A.(DE)

610

LD

HL,(START)

1100

CP

(HL)

620

LD

A.(LENSEC)

1110

JR

Z.LOAD3

630

LD

B,A

1120

POP

DE

640

LD

C,6

1130

DEC

(IX+0)

650

CALL

DRIVER

1140

RET

Z

660

POP

AF

1150

LD

HL.16

670

PUSH

DE

1160

ADD

HL.DE

680

PUSH

AF

1170

EX

DE,HL

690

LD

DE,(SYSTRK+1)

1180

DJNZ

LOAD1

700

CALL

SAVEL

1190 IS TRK

LD

DE,0

710

POP

AF

1200

JR

LOADO

720

JR

NZ.S3

1210 LOAD3

INC

DE

730 systrk

LD

DE,0

1220

INC

HL

740

INC

E

1230

DEC

С

750

CALL

LOADL

1240

JR

NZ.LOAD2

760

XOR

A

1250

POP

IX

770

LD

(BUFF),A

1260

LD

HL,(START)

780

DEC

E

1270

LD

BC.(LEN)

790

CALL

SAVEL

1280

LD

A.(LENSEC)

800 s3

LD

DE,8

1290

AND

A

810

CALL

LOADL

1300

JR

NZ.LOAD6

820

POP

HL

1310

LD

L,(IX+9)

830

LD

(BUFF+225),HL

1320

LD

H,(IX+10)

840

POP

HL

1330

LD

C,(IX+11)

850

LD

(BUFF+229),HL

1340

LD

B,(IX+12)

860 num1

LD

A,0

1350 LOAD6

LD

E,(IX+14)

870

HMC

A

1360

LD

D,(IX+15)

880

LD

(BUFF+228),A

1370 LOAD5

INC

В

890

LD

DE,8

1380

DEC

В

900

CALL

SAVEL

1390

JR

Z.LOAD8

910

XOR

A

1400

PUSH

ВС

920

RET

1410 LOAD7

LD

С,5

930 load

LD

(LENSEC),A

1420

CALL

DRIVER

940

LD

(START),HL

1430

POP

ВС

950

LD

(LEN).DE

1440

INC

С

960

CALL

ON DSK

1450

DEC

С

970

LD

DE,8

1460

RET

Z

980

CALL

LOADL

1470

LD

DE,(IS TRK+1)

990

LD

A,(BUFF+228)

1480 LOAD8

PUSH

HL

1000

LD

(NUM1 + 1),A

1490

CALL

LOADL

1010

LD

DE.O

1500

POP

DE

1020 loado

CALL

LOADL

1510

LD

BC.(LEN)

1030

LD

DE.BUFF

1520

LD

B,0

1040

LD

IX.NUM1 + 1

1530

LD

HL.BUFF

1050

LD

B,16

1540

LDIR

1060 load1

PUSH

DE

1550

LD

А,В

1070

LD

HL.DATA

1560

RET

1080

LD

C,9

1570 LOADL

LD

С,5

zx«fwp 97/1

ЭТЮДЫ

1580

JR

CONT2

1590 SAVEL

LD

C,6

1600 CONT2

LD

B,1

1610

LD

HL.BUFF

1620 DRIVER

BIT

o,c

1630

JR

NZ.M1

1640

EXX

1650

PUSH

HL

1660

LD

HL,(#5C00)

1670

LD

DE,(#5CFE)

1680

LD

BC,(#5D00)

1690

EXX

1700

XOR

A

1710

LD

(#5C00),A

1720 М1

Dl

1730 L1

PUSH

DE

1740

PUSH

ВС

1750

LD

A,D

1760

OR

A

1770

RRA

1780

LD

C,A

1790

LD

A,#3C

1800

JR

NC.L2

1810

LD

A,#2C

1820 L2

LD

IX,#2F4D

1830

CALL

DOS

1840

POP

ВС

1850

POP

DE

1860 L3

BIT

o.c

1870

JR

NZ.M2

1880

LD

A,E

1890

LD

(#5CFF),A

1900

LD

(#5D00),HL

1910 М2

PUSH

HL

1920

PUSH

DE

1930

PUSH

ВС

1940

LD

IX,#2F1B

1950

BIT

o,c

1960

JR

NZ.M3

-1970

LD

IX,#3F0A

1980 МЗ

CALL

DOS

1990

POP

ВС

2000

POP

DE

2010

POP

HL

2020

INC

H

2030

INC

E

2040

BIT

4,E

2050

JR

NZ.L5

2060

BIT

o,c

2070

JR

NZ.M4

2080

LD

A,E

2090

LD

(#5CFF),A

2100 M4

DJNZ

L3

2110

JR

EXIT

2120 L5

LD

E,0

2130

INC

D

2140

DJNZ

L1

2150 EXIT

LD

(IS TRK+D.DE

2160

BIT

o,c

2170

RET

NZ

2180

EXX

2190

LD

(#5D00),BC

2200

LD

(#5CFE),DE

2210

LD

(#5C00),HL

2220

POP

HL

2230

EXX

2240

RET

2250 ON DSK

Dl

2260

LD

IX,#2F65

2270 DOS

PUSH

IX

2280

JP

#3D2F

2290 DATA

DEFM

"FileNameC"

2300 START

DEFW

0

2310 LEN

DEFW

0

2320 LENSEC

DEFB

0

2330 SECTRK

DEFW

0

2340 BUFF

DEFS

256




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Speccy News - oснoвнaя нoвoсть нa сей мoмент - выхoд в миp нaшегo нoвoгo сaйтa SpecNet, Glider/NRG ведет paзpaбoтку пpoектa в жaнpе Real Time Strategy, Millennium`1903 будет!
Credits - авторы газеты.
Code on - инструкция по использованию комманд процессора Z80.
Тусовка - Для всех тех кто хочет найти себе друзей, установить с ними переписку, высказать вслух свои мысли и т.д., мы открываем эту рубрику.
Перспективы - Dune для Спектрума от Сосюра Игоря.

В этот день...   29 марта