ORG #5DC0 JP L5E3C DEFM "UnCo" DEFB #02 L5DC8 DEFB #07 DEFB #01 L5DCA PUSH BC LD BC,#001C ; в B будет номер текущего диска L5DCD EQU $-#1 RST #10 ; открываем текущий диск POP BC RET C LD HL,(L5DFB) XOR A SBC HL,DE PUSH BC PUSH HL LD C,B LD B,A XOR A SBC HL,BC POP HL POP BC JR NC,L5DE3 LD B,L L5DE3 LD HL,L5E3C LD C,#2B ; грузим B блоков, начиная с DE, по адресу HL RST #10 RET C PUSH BC LD BC,#001C L5DED EQU $-#1 ; в регистре B будет номер диска, на который заливать образ RST #10 ; переключаемся на ram-диск POP BC RET C LD C,#E ; запись B блоков с адреса HL начиная с блока DE RST #10 RET C LD HL,0 ; количество блоков, которое можно разместить в памяти L5DF6 EQU $-#2 ADD HL,DE EX DE,HL ; приращиваем номер блока на количество записанных LD HL,0 L5DFB EQU $-#2 ; предположительно размер файла образа в блоках OR A SBC HL,DE ; HL - сколько блоков осталось считать PUSH AF PUSH BC PUSH DE ; CALL L5E11 ; процедура печати прогресс бара L5E11 LD HL,0 ; предположительно, номер файла в каталоге L5E12 EQU $-#2 EX DE,HL XOR A L5E16 INC A SBC HL,DE JR NC,L5E16 CP #21 JR C,L5E21 LD A,#20 L5E21 LD B,A LD HL,0 ; здесь будет позиция печати L5E23 EQU $-#2 LD C,#C RST #10 LD C,#A L5E2A LD A,#DB RST #10 ; в цикле закрашиваем прогресс-бар DJNZ L5E2A ; RET POP DE POP BC POP AF JP Z,L5E30 JP C,L5E30 JR L5DCA L5E30 LD A,#0 ; пересоздаём кэш, A - количество блоков L5E31 EQU $-#1 LD C,#0 RST #10 L5E35 LD C,#41 ; восстанавливаем среду RST #10 XOR A LD A,#F4 RET ; на выход L5E3C LD HL,#007E ; Вставка команд LD A,(HL); NOP LD (L5EAB),HL L5E42 LD C,#43 ; открываем внутрений буфер командной строки RST #10 RET C EXX LD DE,L60CA ; указатель на имя файла PUSH DE JR NZ,L5E91 ; ключа нет пути нет AND A JR Z,L5E89 ; обработка пути POP DE ; иначе - найден ключ INC HL ; 11-байтовый описатель или шаблон LD A,(HL) AND #DF CP #59 ; проверка ключа Y JR Z,L5E7A ; переход, если найден ключ Y LD HL,#FFFD CP #54 ; проверка на ключ T JR Z,L5E75 CP #51 ; проверка на ключ Q INC HL JR Z,L5E75 CP #53 ; проверка на ключ S INC HL JR Z,L5E75 AND A SBC A,#41 ; Вычитаем из буквы диска "A" LD H,A LD L,#3E LD (L5EAB),HL ; отправляем по адресу команду LD A,<номер диска> JR L5E42 ; ключ T, HL=FFFD, ключ Q, HL=FFFE, S, HL=FFFF L5E75 LD (L5EA8),HL ; закинули значение в команду ниже, значение окажется в BC JR L5E42 ; обработка ключа /Y L5E7A LD (L5EED),A LD A,#8 LD (L6016),A LD A,#3 LD (L6085),A JR L5E42 L5E89 LD BC,#0008 POP DE ; DE - адрес буфера програмы с именем файла LDIR ; копируем 8 байт имени в буфер JR L5E42 ; переод сюда после разбора командной строки L5E91 POP HL LD DE,L606A ; указатель на имя файла в тексте окна LD C,#4F ; преобразовывается в имя файла с точкой RST #10 EXX LD A,#20 LD (DE),A ; DE - адрес символа #0D, затыкаем пробелом LD C,#13 ; A - номер текущего диска RST #10 LD (L5DCD),A LD C,#10 ; получаем в HL' вектор конфигурации ядра RST #10 EXX PUSH HL LD BC,#FFFE ; -1 номер канала устройства S, -2 Q, -3 T L5EA8 EQU $-#2 ADD HL,BC L5EAB NOP ; здесь будет команда или LD A,(HL), или LD A,<номер устройства> NOP PUSH HL LD HL,L5DCD ; номер текущего диска CP (HL) ; сравнили с тем, что указано в команде POP HL ; HL - указывает на номер канала устройства в векторе ядра JR Z,L5F0F ; предположительно - вывод окна "копирование на то же устройство" и выход PUSH AF ; запоминаем номер указанного диска на который заливать образ LD C,#14 ; по номеру устройства ищем драйвер. A - номер канала RST #10 JR C,L5EBF CP #F8 ; проверяем номер канала F8 - обычно драйвер дисковода JR NZ,L5EC9 ; не понятно, какой вызов происодит в этой ветке L5EBF POP AF LD A,#70 ADD A,C LD C,A OR #39 SLA A RST #10 L5EC9 POP AF LD (L5DED),A ; отправляем номер устройства в команду процедуре ADD A,#41 LD (L6082),A ; до,авляем "A" и пишем в текст окна LD BC,#0009 ADD HL,BC ; из вектора ядра берём количество блоков кэша и помещаем в процедуру пересоздания LD A,(HL) LD (L5E31),A XOR A LD IX,L6014 LD HL,(L5DC8) ; берём цвета из UnCo, помещаем в вектор окна LD (L6018),HL LD C,#61 ; рисуем окно RST #10 LD C,#66 ; выводим текст RST #10 POP HL LD A,#0 ; в случае ключа /Y здесь будет "Y" L5EED EQU $-#1 JR L5F08 L5EF0 LD C,#7 ; ожидание нажатия клавиши RST #10 CP #20 ; пробел JP Z,L5E30 CP #10 ; SS+A JP Z,L5E30 CP #D ; Enter JR Z,L5F3E AND #DF CP #4E ; N JP Z,L5E30 ; на выход L5F08 CP #59 ; Y JP Z,L5F3E ; переход на копирование JR L5EF0 L5F0F POP HL LD HL,L5F19 ; CALL L60E3 ; выводим красное окно с шибкой, ждём нажатия клавиши XOR A LD IX,L6139 LD C,#61 RST #10 LD C,#66 RST #10 LD C,#7 RST #10 JP L5E35 ; ускоренный выход без восстановления среды ; ошибок не возникло, продолжаем L5F3E PUSH HL ; LD DE,#0903 ; AND A ; LD A,(L5F70) ; #28, код команды JR Z,... ; LD C,A ; LD B,#0 ; LD HL,L5F4D ; ADC HL,BC ; ED 4A ;L5F4D EQU $-#1 ; адрес байта 4A ; LD A,(HL) ; HL=5F75 ; LD BC,#0010 ; AND A ; ADC HL,BC ; HL=5F85 ; LD A,(HL) ; A=#94 ; INC HL ; LD H,(HL) ; H=#03 ; XOR C ; A=#84 ; LD L,A ; LD DE,L5F85 ; RST #10 ; C=#10 ; PUSH HL ; HL=#0384 ; EXX ; HL - вектор конфигурации ядра ; POP BC ; LD DE,LFFFA ; ADD HL,DE ; HL - казывает на размер эл. диска ; DEC HL ; DEC HL ; ядро - 8 не понятно, что там ; LD A,(HL) ; INC HL ; LD H,(HL) ; LD L,A ; данные по адресу ядро -8 теперь в HL ; LD A,#AA ; AND A ; SBC HL,BC ; HL - #0384 ;; BC - путаным способом вычисляем число #0384 ;; HL - получаем из вектора системы со смещением -8 то же число #0384 ;; сравниваем, если не равно - идём на процедуру ниже ;L5F70 JR Z,L5F87 ; LD BC,#030E ; LD L,B ; DEC L ; LD A,L ; DEC A ; DEC A ; OR #BF ; CPL ; LD H,A ; DEC L ; DEC L ; LD D,L ; LD E,B ;; к этому моменту BC=#030E, HL=#4000, DE=#0003 ;; на диск, с которого хотим залить образ, пишется 3 блока, начиная с блока #0003 из видеопамяти ;; в результате чего диск убивается ; RST #10 ; C=#0E запись трёх блоков на диск ; JR L5F87 ;L5F85 SUB H ; INC BC L5F87 LD A,#6 ; пересоздание кэша с минимальным значением (A=6) LD C,#0 RST #10 POP HL RET C LD BC,#0005 ADD HL,BC LD E,(HL) INC HL LD D,(HL) EX DE,HL ; HL - адрес начала электронного диска (верхняя граница памяти программы) XOR A LD DE,L5E3C SBC HL,DE ; HL - размер памяти от L5E3C до кэша LD L,H LD H,A ; HL - количество блоков, округлённое в меньшую сторону LD (L5DF6),HL LD B,L PUSH BC LD A,#5 LD IX,L6014 LD HL,L5FF1 LD BC,#0165 RST #10 LD HL,#0501 LD C,#6B LD IX,L6014 RST #10 LD C,#12 RST #10 EXX INC HL LD A,(HL) INC HL LD H,(HL) LD L,A LD (L5E23),HL ; сохраняем позицию печати LD HL,L60CA LD C,#34 RST #10 ; открываем файл с образом POP BC RET C EXX LD BC,#000F ADD HL,BC LD A,(HL) INC HL LD H,(HL) LD L,A LD (L5DFB),HL ; ещё какой-то параметр задаём для заливки образа LD DE,#0020 LD BC,0 L5FE0 INC BC AND A SBC HL,DE JR NC,L5FE0 ; делим HL на 32, результат в BC LD (L5E12),BC EXX LD DE,0 JP L5DCA L5FF1 DEFB #20 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #B1 DEFB #20 DEFB #0D L6014 DEFB #02 DEFB #08 L6016 DEFB #0A DEFB #1C L6018 DEFB #00 DEFB #00 DEFB #04 DEFB #22 DEFB #52 DEFB #61 DEFB #6D DEFB #20 DEFB #44 DEFB #69 DEFB #73 DEFB #6B DEFB #20 DEFB #43 DEFB #6F DEFB #70 DEFB #79 DEFB #65 DEFB #72 DEFB #20 DEFB #62 DEFB #79 DEFB #20 DEFB #4D DEFB #2E DEFB #48 DEFB #2C DEFB #20 DEFB #4B DEFB #2E DEFB #53 DEFB #20 DEFB #26 DEFB #20 DEFB #53 DEFB #6C DEFB #6F DEFB #74 DEFB #0D DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #20 DEFB #56 DEFB #20 DEFB #31 DEFB #2E DEFB #30 DEFB #31 DEFB #20 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #C4 DEFB #0D DEFB #0D DEFB #20 DEFB #20 DEFB #46 DEFB #69 DEFB #6C DEFB #65 DEFB #3A L606A DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #20 DEFB #74 DEFB #6F DEFB #20 DEFB #44 DEFB #65 DEFB #76 DEFB #69 DEFB #63 DEFB #65 DEFB #3A DEFB #20 L6082 DEFB #41 DEFB #0D DEFB #0D L6085 DEFB #0D DEFB #20 DEFB #50 DEFB #72 DEFB #65 DEFB #73 DEFB #73 DEFB #20 DEFB #3C DEFB #59 DEFB #3E DEFB #20 DEFB #6F DEFB #72 DEFB #20 DEFB #3C DEFB #45 DEFB #4E DEFB #54 DEFB #45 DEFB #52 DEFB #3E DEFB #20 DEFB #74 DEFB #6F DEFB #20 DEFB #43 DEFB #6F DEFB #6E DEFB #74 DEFB #69 DEFB #6E DEFB #75 DEFB #65 DEFB #0D DEFB #20 DEFB #3C DEFB #4E DEFB #3E DEFB #20 DEFB #6F DEFB #72 DEFB #20 DEFB #3C DEFB #53 DEFB #53 DEFB #2B DEFB #41 DEFB #3E DEFB #20 DEFB #6F DEFB #72 DEFB #20 DEFB #3C DEFB #53 DEFB #50 DEFB #41 DEFB #43 DEFB #45 DEFB #3E DEFB #20 DEFB #74 DEFB #6F DEFB #20 DEFB #51 DEFB #75 DEFB #69 DEFB #74 DEFB #03 L60CA DEFM "qb__data###" ; имя файла с образом DEFM " Slot Co.,Ltd" ; вектор окна "копирование на тот же диск" L6139 DEFB #00 DEFB #14 DEFB #03 L613C DEFB #1C DEFB #17 DEFB #01 DEFB #01 L6140 DEFB #24 L5F19 DEFM "Попытка копирования на тот же диск !" DEFB #03