ZX-Spectrum & TR-DOS для пользователей и программистов 1994 г.

Драйвер дисковых операций - пример использования.


Пример использования

Ниже представлен листинг программы-копировщика, в которой ис-
пользован описанный драйвер. Приведенная программа копирует «диск в
диск» информацию с дискеты в дисководе В на дискету в дисководе А.
Копирование «диск в диск» означает, что в результате получается точная
копия исходной дискеты. Этой программой можно скопировать дискеты не
только от ZX Spectrum, но и практически от любых других компьютеров,
которые используют в качестве микроконтроллера микросхемы КР1818ВГ93
или 18072, например Robotron, IBM, Amstrad и многих других.

Предполагается, что коды программы драйвера расположены с адреса
63000, а коды тестовой программы с адреса 60000. В процессе работы для
таблиц и буферов используется память, начиная с адреса 30000, поэтому
перед запуском тестовой программы необходимо выполнить оператор Бей-
сика CLEAR 29999.

10 ;Hard copy disk

20 ORG 60000 ;адрес размещения кодов тестовой программы

ВО ENT $ ;адрес запуска

40 ЕХХ ^охранение регистровой пары HL'

50 PUSH HL

60 CALL 3503 «'очистка экрана

70 LD HLJXTH ;печать сообщения

80 CALL PRINT

90 LD С,1

100 PUSH ВС

110 XOR A

120 CALL DISK ; выбор дисковода В

130 LD С,7

140 CALL DISK. «'настройка на дискету

150 POP ВС

160 LD А,1

170 CALL DISK ;выбор дисковода A

180 LD С,7

190 CALL DISK ; «астройка на дискету

200 LD DE,0 «'инициализация счетчика дорожек

210 LD (TRKSID),DE

220 LOOP LD в,4

230 CALL 8020 «-Анализ клавиши Break

240 JP NC.EXIT

250 LD (FAR1),BC «'Инициализация счетчика повторов при ошибке

260 LOOP11 LD А,1

270 LD С J

280 CALL DISK ; выбор диска В

290 LD HL.TEXT

300 CALL PRINT ;плчать сообщения

310 LD BC,(TRKS1D)

320 PUSH ВС

330 LD C,B

340 CALL NUM «-печать номера дорожки

350 LD HLJXTSP

360 CALL PRINT .-печать сообщения

370 POP ВС

380 CALL NUM ; печать номера стороны

390 LD DE,(TRKSID)

400 LD A,E

410 LD C,14

420 CALL DISK позиционирование на выбранную дорожку и

установка нужной стороны

430 JP C.ERR1 «-переход, если ошибка

440 LD HLJXTS

450 CALL PRINT ; печать сообщения

460 LD HL,30000

470 LD С,10

480 CALL DISK «-сканирование дорожки

490 JP C.ERR1

500 LD HL.TXTR

510 CALL PRINT ;п«чать сообщения

520 LD DE,32000

530 LD HL,30000

540 LD С,12

550 CALL DISK «-считывание дорожки

560 JP C.ERR1

570 LD С,1

580 XOR А

590 CALL DISK «-выбор дисковода А

600 LD DE.(TRKSID)

610 LD А,Е

620 LD С,14

630 CALL DISK «-позиционирование на выбранную дорожку и

«-установка нужной стороны

640 JP C«ERR1

450 LD HLJXTF

660 CALL PRINT «-печать сообщения

670 LD В, #20

680 LD HL,30000

690 LD DE,42000

700 LD C.11

710 CALL DISK ;форматирование дорожки

720 JP C«ERR1

730 LD HL.TXTW

740 CALL PRINT ;печать сообщения

750 LD С,13

760 LD HL,30000

770 LD DE,32000

780 CALL DISK «-запись дорожки

790 JP C,ERR1 «-завершение цикла копирования.

800 LOOPT LD DE.(TRKSID)

810 LD A,E

820 INC A

830 AND 1

840 LD E,A

850 JR NZ,MET1

860 INC D

870 LD A,80

880 CP D

890 JR Z.EXIT

900 MET1 LD (TRKSID).DE

910 JP LOOP

920 TRKSID DEFW 0

930 ERR1 LD BC.(FARI)

940 DJN2 MET3

950 LD HLJXTER

960 CALL PRINT

970 RES 5,(IY+1)

980 LOOPK BIT 5,(IY+1)

990 JR Z, LOOPK

1000 LD A,(IY-50)

1010 AND #DF

1020 CP "Y"

1030 JP Z,LOOP

1040 CP "T"

1050 JP Z,LOOPT

1060 CP

1070 JR HZ,LOOPK

1080 EXIT POP HL

1090 EXX

1100 LD BC.O

1110 RET

1120 MET3 LD (FAR1)tBC

1130 LD C,1

1140 XOR A

1150 CALL DISK

1160 LD C.O

1170 CALL DISK

1180 LD C,1

1190 LD A,1

1200 CALL DISK

1210 LD C.O

1220 CALL DISK

1230 JP LOOP11

Подпрограмма вызова функций драйвера. В случае ошибки делается повторный
вызов функции. Если и он заканчивается ошибкой, то при возврате устанавливается
бит переноса.

1240 DISK PUSH ВС

1250 LD В,2

1260 LD (FAR), ВС

1270 POP ВС

1280 LOOP2 LD (ВС_„),ВС

1290 LD (А__),А

1300 LD (HL__),HL

1310 LD (DE_),DE

1320 CALL 63000

1330 LD A, (63002)

1340 CP -1

1350 RET Z

1360 LD BC,(FAR)

1370 DJNZ MET2

1380 LD BC,(BC__)

1390 LD B.O

1400 SCF

1410 RET

1420 MET2 LD (FAR),ВС

1430 LD BC,0

1440 BC_„ EQU $-2

1450 LD A,0

1460 A_ EQU $-1

1470 LD HL{0

1480 HI______EQU $-2

1490 LD DEr0

1500 DE__EQU $-2

1510 JR LOOP2

1520 FAR DEFW 0

1530 FAR1 DEFW 0

1540 PRINT LD A,(HL)

1550 CP 255

1560 RET Z

1570 RST 16

1580 INC HL

1590 JR PRINT

1600 NUM LD B,0 •

1610 CALL #2D2B

1620 JP #2DE3

1630 TEXT DEFB 22,1,0

1640 DEFM "

1650 DEFB 22,0,0

1660 DEFM "Track's "

1670 DEFB 255

1680 TXTSP DEFM "; Side's *

1690 DEFB 255

1700 TXTR DEFB 22,1,0

1710 DEFM "Reading"

1720 DEFB 255

1730 TXTW DEFB 22,1,0

1740 DEFM "Writing "

1750 DEFB 255

1760 TXTS DEFB 22,1,0

1770 DEFM "Scaning"

1780 DEFB 255

1790 TXTF DEFB 22,1,0

1810 DEFB 255

1820 TXTER DEFB 22,2,0

1830 DEFM "Error in disk! "

1840 DEFB 13

1850 DEFM "Retry [Y], Cont [+]"

1870 TXTH DEFB 22,10,2

1880 DEFM "Hard copy В -> A"

1890 DEFB 255

1900 END




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
ASCII'2003 - Рассуждение: ижевская пати, смысл которой объеденить спектрумистов соседних городов и, конечно, же ижевских челов.
Проходилка - прохождение LAST NINJA 2.
Поиск - поиск игр, программ.
Обо всём - подробный отчет с Funtop'98 от MMA (глава 7-8).
Numberlogy - нумерология.

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