Пример использования
Ниже представлен листинг программы-копировщика, в которой ис-
пользован описанный драйвер. Приведенная программа копирует «диск в
диск» информацию с дискеты в дисководе В на дискету в дисководе А.
Копирование «диск в диск» означает, что в результате получается точная
копия исходной дискеты. Этой программой можно скопировать дискеты не
только от 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