;GET_1F DI
; LD IX,0X2FC1 ;OUT(1F),D0
; CALL DOSIX
; LD A,8
; LD C,0X1F
; LD IX,0X2A53 ;OUT(C),A
; CALL DOSIX
; LD B,0
; LD A,0XFF
; LD (0X5CD8),A
; CALL READ_1F
; PUSH AF
; LD A,0XC9
; LD (0X5CC2),A
; XOR A
; LD IX,0X1FF3 ;OUT(FF),A
; CALL DOSIX
; LD IX,0X1FEB ;OUT(FF),(5D16)|3C
; CALL DOSIX
; LD IX,0X2FC1 ;OUT(1F),D0
; CALL DOSIX
; POP AF
; EI
; RET
;READ_1F LD (RD1F_SP+1),SP
; LD A,0XC3
; LD (0X5CC2),A
; LD HL,RD1F_SP
; LD (0X5CC3),HL
; LD IX,0X2076
; JP DOSIX
;RD1F_SP LD SP,0
; XOR A
; RET
;G1FKNOW LD A,(yIKNOW)
; AND A
; RET Z
; PUSH IX
; CALL GET_1F
; POP IX
; LD HL,OLD_1F
; CP (HL)
; RET Z
; POP HL
;_IKNOW CALL GLUDIN
; LD A,0XC3
; LD (0X5CC2),A
; LD HL,ONERR
; LD (0X5CC3),HL
; CALL S_FACE
; LD IX,mIKNOW
; CALL DRAWWIN
; CALL NAMEROM
; CALL PRINTTIME
; LD C,0X3F
; XOR A
; LD IX,0X2A53
; CALL DOSIX
; LD A,0X5F
; CALL DOSIX
; LD C,0X1F
; LD A,0X0C
; CALL DOSIX
; LD IX,0X3EF5
; CALL DOSIX
GLUBOOT LD HL,FLAGS
RES 3,(HL) ;ЗАПУСК С ДИСКЕТЫ
LD HL,ADR_CAT
LD DE,8
LD BC,0X0105
CALL TO_DOS4BAS ;ЗАГРУЗИЛИ 9 СЕКТОР
LD A,(ADR_CAT+0XE7)
CP 0X10 ;ПРОВЕРКА НА ПРИЗНАК TR_DOS
JP NZ,CMP_VIRTUAL;PRT_NONETRDOS ;ОШИБКА, ДИСК НЕ TR-DOS
LD HL,ADR_CAT
LD DE,0
LD BC,0X0905
CALL TO_DOS4BAS ;ЗАГРУЗКА TR-DOS ДИРЫ
LD A,(ADR_CAT+0X8E7)
CP 0X10 ;ПРОВЕРКА НА ПРИЗНАК TR_DOS
JP NZ,_STUPID
; CALL GET_1F ;ЧТЕНИЕ ПОРТА TR-DOS
; LD (OLD_1F),A
LD IX,ADR_CAT
LD DE,0X10
LD A,(ADR_CAT+0X8E4)
AND A
JP Z,NO_BAS
LD B,A ;СКОЛЬКО ФАЙЛОВ НАДО ПРОСМОТРЕТЬ
LD C,0 ;ОБНУЛЕНИЕ СЧЕТЧИКА НАЙДЕННОГО
EXX
PUSH IX
POP DE
EXX
FIND_BASIC LD A,(IX+8)
CP "B" ;ИЩЕМ ТОЛЬКО БАСИК ФАЙЛЫ
JR NZ,FINDBAS1
LD A,(IX+0)
DEC A ;ПРОВЕРКА НА УДАЛЕННЫЙ ФАЙЛ
JR Z,FINDBAS1
EXX
PUSH IX
POP HL ;ОТКУДА ПЕРЕНОСИТЬ ОПИСАТЕЛЬ
REPT 16
LDI
ENDM
EXX
INC C
FINDBAS1 ADD IX,DE
DJNZ FIND_BASIC
LD IX,WIN_FILES ;ОКНО ДЛЯ ВЫВОДА БАСИК ФАЙЛОВ
OUT_HOB LD (IX+7),0
LD (IX+8),C
LD (IX+9),B ;ПОЛНОЕ КОЛИЧЕСТВО НАЙДЕННОГО
LD (IX+0X0A),0
LD (IX+0X0B),0 ;ОБНУЛЯЕМ ПОЗИЦИЮ ФАЙЛОВ И КУРСОРА
REOUT_HOB LD A,B
OR C ;ПРОВЕРКА КОЛИЧЕСТВА НАЙДЕННОГО
JP Z,NO_BAS ;ЕСЛИ 0, ТО НЕТ БАСИКОВ
RES 2,(IY+55) ;ПРЕДПОЛОЖИТЕЛЬНО ФАЙЛОВ МЕНЕЕ ВЫСОТЫ ОКНА
LD A,B
AND A
LD A,C
JR NZ,FINDBAS2
CP H_FILE-1
JR C,FINDBAS2
SET 2,(IY+55) ;ФАЙЛОВ БОЛЬШЕ ВЫСОТЫ ОКНА
LD A,H_FILE-2
FINDBAS2 LD (KOL4OUT),A ;УСТАНОВКА КОЛИЧЕСТВА ОПИСАТЕЛЕЙ В ОКНО
ADD A,2
LD (IX+2),A ;УСТАНОВКА ВЫЧИСЛЕННОЙ ВЫСОТЫ ОКНА
LD (IX+3),V_FILE ;УСТАНОВКА ШИРИНЫ ОКНА
FINDBAS6 LD HL,FLAGS
BIT 3,(HL)
JR Z,FINDBAS5 ;ЕСЛИ РАБОТА С TR-DOS, ТО ПЕРЕХОДИМ НА ВЫВОД ОКНА
INC (IX+3)
LD A,(IX+2) ;ЕСЛИ РАБОТА С FAT, ТО ОКНО НАДА ВЫВОДИТЬ В ПОЛНЫЙ РОСТ
PUSH AF ;СОХРАНИЛИ ВЫЧИСЛЕНУЮ ВЫСОТУ И ШИРИНУ ОКНА
LD (IX+2),H_FILE
CALL WINW ;ВЫВЕЛИ ОКНО В ПОЛНЫЙ РОСТ
POP AF
LD (IX+2),A
JR FINDBAS7
FINDBAS5 CALL WINW ;ВЫВОДИМ ОКНО
FINDBAS7
; LD B,(IX+2)
; DEC B
; DEC B
; LD C,"A"
; LD DE,HOT_KEY
;FINDBAS5 PUSH BC
; LD A,C
; LD (DE),A
; LD HL,HOT_KEYS
; CALL NEXT
; POP BC
; INC C
; DJNZ FINDBAS5
CALL OUT_TEK_DIR ;ВЫВОДИМ КУСОЧЕК ДИРЕКТОРИИ
; BIT 2,(IY+55)
; JP Z,_RULILKA
; CALL RIGHT_SIDE ;ЕСЛИ НАЙДЕНО БОЛЬШЕ ВЫСОТЫ ОКНА -2, ТО РИСУЕМ БОКОВУШКУ
JP _RULILKA
;ВЫВОД ЧАСТИ ДИРЕКТОРИИ С УКАЗАННОЙ ПОЗИЦИИ
OUT_TEK_DIR LD L,(IX+0X0A) ;ВЫВОД ДИРЫ TR-DOS ДИСКА
LD H,(IX+0X0B) ;ПОЛУЧИЛИ НОМЕР ТЕКУЩЕЙ ПОЗИЦИИ
LD E,(IX+7) ;ПОЛУЧИЛИ ПОЗИЦИЮ КУРСОРА В ОКНЕ
XOR A
LD D,A
SBC HL,DE ;ВЫЧИСЛИЛИ ПОЗИЦИЮ ФАЙЛА С КОТОРОГО БУДЕМ ВЫВОДИТЬ
LD DE,ADR_CAT
ADD HL,HL
LD A,(FLAGS)
AND 8
JR NZ,OUT_TEK_FAT ;ПЕРЕХОД ЕСЛИ ДЛЯ FAT
ADD HL,HL
ADD HL,HL
ADD HL,HL ;УМНОЖИЛИ НА РАЗМЕР ОПИСАТЕЛЯ
ADD HL,DE ;ВЫЧИСЛИЛИ АДРЕС ОПИСАТЕЛЯ С КОТОРОГО БУДЕМ ВЫВОДИТЬ
LD C,(IX+2)
DEC C
DEC C ;ВЫЧИСЛИЛИ СКОЛЬКО ВЫВОДИТЬ
LD D,(IX+0)
LD E,(IX+1)
INC D
INC D
INC E ;ВЫЧИСЛИЛИ ПОЗИЦИЮ ВЫВОДА НА ЭКРАН
FINDBAS3 LD B,8 ;ПЕЧАТАЕМ ТОЛЬКО ИМЯ
PUSH DE
FINDBAS4 LD A,(HL)
INC HL
CALL PRT_SYM
DJNZ FINDBAS4
LD DE,8 ;8 СИМВОЛОВ НАПЕЧАТИЛИ, ОСТАЛЬНЫЕ 8 ПРОПУСКАЕМ
ADD HL,DE
POP DE
INC E
DEC C
JR NZ,FINDBAS3 ;ЕСЛИ НЕ КОНЧИЛИСЬ ПЕРЕХОДИМ НА ПЕЧАТЬ СЛЕДУЮЩЕГО ИМЕНИ
RET
;ВЫВОД ДИРЫ НА FAT
OUT_TEK_FAT ADD HL,DE
LD D,(IX+0)
LD E,(IX+1)
INC D
INC D
INC E ;ВЫЧИСЛИЛИ ПОЗИЦИЮ ВЫВОДА НА ЭКРАН
LD C,0
KOL4OUT EQU $-1
OTF2 PUSH BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
PUSH HL
PUSH DE
LD A,6
CALL COM_FAT
DB Positf
CALL COM_FAT
DB Getfzap
POP DE
PUSH DE
LD BC,0X0B
ADD HL,BC
LD A,(HL)
SBC HL,BC
AND 0X10
LD A,0
JR NZ,OTF4
LD A,1
OTF4 CALL PRTSYMALT
LD B,8
OTF1 LD A,(HL)
INC HL
CALL PRT_SYM
DJNZ OTF1
POP DE
POP HL
POP BC
INC E
DEC C
JR NZ,OTF2
RET
NO_BAS LD IX,NOBASIC
CALL WINW
JP _RULILKA
RUNFILE DI
CALL SHUT2AY ;БУМКАЛКА В AY
LD L,(IX+0X0A)
LD H,(IX+0X0B) ;НОМЕР ВЫБРАННОГО ФАЙЛА
LD DE,ADR_CAT
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,DE ;ОТКУДА ИМЯ ФАЙЛА ВЗЯТЬ
LD DE,RUNNAM
LD BC,8
LDIR
LD HL,0X3E08+0XA7
LD DE,0XFFFF
LD C,0XA8 ;21 символ UDG
LDDR
LD HL,RUN_BASIC
LD DE,0X5D3B
LD BC,ERUN_BASIC-RUN_BASIC
LDIR ;ПЕРЕНОС БЕЙСИК ПРОГИ ДЛЯ ЗАПУСКА
CALL MEMSET ;ВЫСТАВИЛИ РЕЖИМ КОМПА
CALL FOR_RUN
EI
JP 0X1B7D ;ЗАПУСК ПЕРЕНЕСЕННОЙ БЕЙСИК ПРОГИ
; LD BC,0XFE8F
; CALL 0X1EB7
; LD HL,0X1303
; PUSH HL
; LD (0X5C3D),SP
; LD HL,(0X5C4F)
; LD DE,0X0F
; ADD HL,DE
; LD DE,0X15BE
; EX DE,HL
; LD BC,4
; LDIR
; RES 4,(IY+1)
; SET 7,(IY+1)
; LD HL,0X1B7D
; PUSH HL
; LD HL,LOC_5BEA
; PUSH HL
; LD HL,0X2970
; PUSH HL
; LD HL,0X2920
; PUSH HL
; LD HL,0X294A
; PUSH HL
; JP 0X3D2F
;LOC_5BEA LD HL,(0X5C61)
; LD A,(HL)
; DEC HL
; LD L,(HL)
; LD H,A
; LD (0X5C42),HL
; XOR A
; LD (0X5C44),A
; RET
E_LINE EQU 0X5C59
K_CUR EQU 0X5C5B
WORKSP EQU 0X5C61
STKBOT EQU 0X5C63
STKEND EQU 0X5C65
TRD_5D0E EQU 0X5D0E
FOR_RUN
; LD HL,BAS4TAPE
; LD DE,0X5C3A
; LD BC,EBAS4TAPE-BAS4TAPE
; LDIR ;ПЕРЕМЕННЫЕ БАСИКА СДЕЛАЛИ FOR ONLY TAPE
; LD HL,0X3D21
; CALL TODOS4RUN
; LD A,0XFE
; LD (TRD_5D0E),A
; LD HL,(E_LINE)
; LD (HL),0XF7
; INC HL
; LD (HL),0X22
; INC HL
; LD DE,RUNNAM
; LD BC,8
; EX DE,HL
; LDIR
; EX DE,HL
; LD (HL),0X22
; INC HL
; LD (K_CUR),HL
; LD (HL),0X0D
; INC HL
; LD (HL),0X80
; INC HL
; LD (WORKSP),HL
; LD (STKBOT),HL
; LD (STKEND),HL
SET 3,(IY+1)
LD IY,0X5C3A
LD (IY),0XFF
SET 7,(IY+1)
RES 4,(IY+1)
LD HL,0X2758
EXX
LD A,0XC9
LD (0X5CC2),A
LD HL,0
LD (0X5C42),HL
XOR A
LD (0X5C44),A
RET
LD HL,0X2EF
EI
TODOS4RUN PUSH HL
JP 0X3D2F
; LD BC,0X5FFF
; CALL 0X1EB7 ;УСТАНОВКА СТЕКА СРЕДСТВАМИ БЕЙСИКА
; LD (0X5C3D),SP
; RET
;КРУГОВОЙ ПЕРЕБОР ИМЕНИ ДИСКОВОДА 1-4 (A-D)
NEXTDRIVE LD A,(TXT_DRIVE) ;ВЗЯЛИ БУКВУ ТЕКУЩЕГО ДИСКОВОДА
INC A ;+1, ТО ЕСТЬ ВЫБРАЛИ СЛЕДУЮЩИЙ ПО ПОРЯДКУ
SUB 0X10 ;ПРЕВРАТИЛИ В НОМЕР
CP "5" ;ЕСЛИ ПРЕВЫСИЛИ 4
JR C,SELDRV1
SUB 4 ;ТО ИЗМЕНИЛИ НА НОМЕР ПЕРВЫЙ
JR SELDRV1
NEXTVIRT LD HL,MAINLOP
PUSH HL
LD A,(FLAGS)
AND 4
RET Z
LD H,0X0F
CALL READCMOS
INC A
CP 4
JR C,NEXTVIRT1
XOR A
NEXTVIRT1 LD L,A
ADD A,"A"
LD (VIRT_DRIVE),A
CALL WRITECMOS
CALL REST2X2
CALL PRT_VIRTDRV
LD A,(FLAGS)
AND 2
RET Z
JP DRAW_MOUSE
;ИЗМЕНЕНИЕ НОМЕРА ДИСКОВОДА И СОХРАНЕНИЕ В КМОСЕ ЕСЛИ ТАКОВОЙ ОБНАРУЖЕН
SELDRV LD A,(0X5C08) ;ВЗЯЛИ НОМЕР ДИСКОВОДА
SELDRV1 SUB "1" ;ОБРАТИЛИ В БИНАРНЫЙ ВИД ДЛЯ ЗАПИСИ В ПЕРЕМЕННУЮ
LD HL,MAINLOP ;АДРЕС КУДА ВЕРНУТЬСЯ ПОСЛЕ ЗАПИСИ
PUSH HL
SELDRVPP LD (DRV_SYM),A
LD L,A
LD A,(FLAGS)
AND 4
RET Z ;ЕСЛИ КМОС НЕ НФЙДЕН, ВЫХОДИМ
LD H,0X10
CALL WRITECMOS ;СОХРАНЯЕМ ВЫБРАННЫЙ ДИСКОВОД В КМОСЕ
CALL SET_DRIVE ;УСТАНОВКА ИЗМЕНЕНИЯ
CALL REST2X2 ;ВОССТАНОВИЛИ ПОД КУРСОРОМ МЫШИ
CALL PRT_DRV_SYM ;ПЕРЕПЕЧАТАЛИ СТРОКУ О ДИСКОВОДАХ
LD A,(FLAGS)
AND 2
RET Z
JP DRAW_MOUSE ;НАРИСОВАЛИ МЫШЬ НА СТАРОМ МЕСТЕ
;FIX mouse key if no mouse
ONERNCLS LD A,(FLAGS)
AND 2
JR Z,ONERNC1
LD A,0XFA
IN A,(0XDF)
RRA
JP NC,_STUPID
ONERNC1 POP AF
EX (SP),HL
RET
;ПЕРЕХВАТ ДИСКОВОЙ ОШИБКИ ДЛЯ ОБРАБОТКИ
ONERR EX (SP),HL
PUSH AF
LD A,H
CP HIGH (0X0D6B)
JR NZ,ONERNCLS
LD A,L
CP LOW (0X0D6B)
JR NZ,ONERNCLS
POP HL
POP HL
POP HL
POP HL
POP HL
EI
CALL GLUDIN
LD HL,0X5CF4
LD A,(HL) ;ВЗЯЛИ НОМЕР СЕКТОРА
INC A
CALL DIV10
LD (NUM_SEC_TXT+1),A
LD A,D
LD (NUM_SEC_TXT),A
INC HL
LD A,(HL) ;ВЗЯЛИ НОМЕР ТРЕКА
SRL A
LD E,A
ADC A,"0"
SUB E
LD (SIDE_DISK),A ;СТОРОНА ДИСКА
LD A,E
CALL DIV10
LD (NUM_TRK_TXT+1),A
LD A,D
LD (NUM_TRK_TXT),A
LD IX,DSK_ERR ;ОКНО ВЫВОДИМ ПОЛНОСТЬЮ
CALL WINW
JP _RULILKA
RESET_VG
; LD C,0XFF
; XOR A
; LD IX,0X2A53 ;OUT(C),A
; CALL DOSIX
; LD A,(DRV_SYM)
; OR 0X3C
; CALL DOSIX
; LD A,0X68 ;шаг назад
; LD C,0X1F
; CALL DOSIX
LD HL,DSTUPID
LD (0X5C3D),HL
LD A,0XC3
LD (0X5CC2),A
LD HL,ONERR
LD (0X5CC3),HL
RET
DOSIX PUSH IX
JP TO_DOS
;ПРОВЕРКА НАЛИЧИЯ МАРКЕРА РАМДИСКА, ПРИ ОТСУСТВИИ СОЗДАНИЕ ДИСКА НА 640КБ
DISK_NONE LD A,1
OUT (PEVO_CONF),A
LD A,PAGE_RAMDISK
LD BC,WIN_P1
OUT (C),A
LD HL,0X7FFF
LD A,(HL)
DEC H
CP "R"
JR NZ,DISK_NONE1
LD A,(HL)
CP "D"
DISK_NONE1 EX AF,AF'
LD A,0XFA
OUT (C),A
XOR A
OUT (PEVO_CONF),A
EX AF,AF'
JP NZ,CREATE_TRDRAM ;МАРКЕР НЕ ОБНАРУЖЕН, СОЗДАТЬ
RET
;FormTR SRL A
; LD (_phystr),A
; RLA
; LD C,2 ;позиционир-е на лог.tr A
; CALL TO_DOS4BAS
; LD A,0XFF
; LD (0X5CD8),A
; LD HL,SeCS
; LD (0X5CE6),HL
; LD E,0
;_phystr EQU $-1
; LD IX,0X1FFD ;format track
; JR DOSIX
DIV10 LD D,0X30-1
INC D
SUB 0X0A
JR NC,$-3
ADD A,0X0A+0X30
RET
_RETRY LD A,"R"
JR $+4
_IGNORE LD A,"I"
LD HL,0X3F7E
EX (SP),HL
DI
JP TO_DOS