Subversion Repositories pentevo

Rev

Rev 831 | Rev 888 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 18.08.2019 savelij
  3.  
  4.                 TITLE "menu_execute.a80"
  5.  
  6. ;[ЗАГРУЗКА С ЛЕНТЫ]
  7. TAPELOAD        LD H,CMOS_BYTE_00
  8.                 CALL READCMOS
  9.                 AND M_EMUL_TAPE
  10.                 JP NZ,EMULTAPLOAD
  11.                 LD IX,TAPE_LDT
  12.                 RST8 _WINW
  13. TAPELOAD1       CALL MEMSET                     ;ВЫСТАВИЛИ РЕЖИМЫ ПАМЯТИ И ТУРБЫ
  14.                 LD HL,BAS4TAPE
  15.                 LD DE,0X5C3A
  16.                 LD BC,EBAS4TAPE-BAS4TAPE
  17.                 LDIR                            ;ПЕРЕМЕННЫЕ БАСИКА СДЕЛАЛИ FOR ONLY TAPE
  18.                 LD HL,ERROR_TAPE
  19.                 PUSH HL
  20.                 LD (0X5C3D),SP                  ;ПЕРЕХВАТ ОШИБКИ ЕСЛИ ЕСТЬ ЖЕЛАНИЕ ВЕРНУТЬСЯ
  21.                 LD HL,0XFF58
  22.                 LD SP,HL                        ;ВЫСТАВИЛИ СТЕК А ЛЯ БЕЙСИК 48
  23.                 LD DE,0X3E08
  24.                 LD BC,0XA8
  25.                 EX DE,HL
  26.                 LDIR                            ;ПОЛОЖИЛИ ШРИФТ UDG
  27.                 LD HL,0X3E00
  28.                 PUSH HL
  29.                 LD HL,0X1303
  30.                 PUSH HL
  31.                 LD HL,0X1B76
  32.                 PUSH HL                         ;ЗАПОЛНИЛИ ДНО ПЕРЕСТАВЛЕННОГО СТЕКА
  33.                 LD IX,0X5CD1                    ;УСТАНОВИЛИ ДЛЯ ЗАГРУЗКИ С ЛЕНТЫ
  34.                 JP 0X073E                       ;ПЕРЕХОД НА ЗАГРУЗКУ С ЛЕНТЫ
  35.  
  36. ;[ПЕРЕХВАТ ОШИБКИ ИЛИ БРЕКА ДЛЯ ВОЗВРАТА]
  37. ERROR_TAPE      LD HL,BAS_VAR
  38.                 LD DE,0X5C00
  39.                 LD BC,EBAS_VAR-BAS_VAR
  40.                 LDIR                            ;ВЕРНУЛИ ТЫРДОСНЫЕ ПЕРЕМЕННЫЕ НА МЕСТО
  41.                 XOR A
  42.                 LD (0X5C3D),BC                  ;СНЯЛИ ПЕРЕХВАТЧИК ОШИБОК
  43.                 OUT (0XFE),A
  44.                 DEC A
  45.                 LD (gFenv),A
  46.                 CALL GLUDIN                     ;ПОГУДЕЛИ В АУ ЧТО БЫЛА ОШИБКА
  47.                 LD A,1
  48.                 LD (gFenv),A
  49.                 JP RESTART                      ;ПЕРЕЗАПУСК HE GLUK
  50.  
  51. ;[СОЗДАНИЕ РАМ ДИСКА НА 640К]
  52. RAM_640         LD HL,RESTART
  53.                 PUSH HL
  54. CREATE_TRDRAM   LD HL,636*4                     ;RAM DISK НА 640 КИЛОБАЙТ
  55. ;               JR KILRAMd
  56.  
  57. ;СОЗДАНИЕ РАМ ДИСКА НА 896 КИЛ
  58. ;RAM_892                LD HL,RESTART
  59. ;               PUSH HL
  60. ;               LD HL,892*4                     ;RAM DISK НА 896 КИЛОБАЙТ
  61. KILRAMd         LD (SECFREE),HL                 ;ВЫСТАВИЛИ ПЕРЕМЕННУЮ КОЛИЧЕСТВА СЕКТОРОВ НА RAM DISK
  62.                 DI
  63.                 PEC_ON M_SHADOW_BF
  64.                 LD A,RAM_RAMDISK+1
  65.                 LD BC,WIN_P2
  66.                 OUT (C),A
  67.                 LD HL,0X8000
  68.                 LD D,H
  69.                 LD E,L
  70.                 INC DE
  71.                 LD BC,0X0FFF
  72.                 LD (HL),L
  73.                 LDIR                            ;ОЧИСТИЛИ СТРАНИЦУ TR-DOS ДИРЕКТОРИИ
  74.                 LD HL,DSKINFO
  75.                 LD DE,0X88E1
  76.                 LD C,DSK_END-DSKINFO
  77.                 LDIR                            ;ПЕРЕНЕСЛИ ШАБЛОН ДЛЯ 9 СЕКТОРА ДИРЫ
  78.                 LD A,ZXSTD_CPU2;0XFD
  79.                 LD BC,WIN_P2
  80.                 OUT (C),A
  81.                 PEC_OFF M_SHADOW_BF
  82.                 JP CREATE_TRD640
  83.  
  84. ;[СБРОС NEOGS]
  85. RESETNGS        LD A,0X80
  86.                 OUT (0X33),A
  87.                 JP RESTART
  88.  
  89. ;[FILE NOT FOUND]
  90. FILE_NONE       LD IX,FILENONE
  91.                 RST8 _WINW
  92.                 JP STUPID1
  93.  
  94. ;[ПРОВЕРКА ВИРТУАЛЬНОГО ПРИВОДА]
  95. CMP_VIRTUAL     LD H,VIRT_REAL_DRIVE
  96.                 CALL READCMOS
  97.                 LD A,(DRV_SYM)
  98.                 LD D,A                          ;НОМЕР ТЕКУЩЕГО РЕАЛЬНОГО ДИСКОВОДА
  99.                 LD A,L
  100.                 RRCA
  101.                 RRCA
  102.                 AND 3                           ;НОМЕР РЕАЛЬНОГО ДИСКОВОДА ИЗ CMOS
  103.                 CP D
  104.                 JR NZ,PRT_NONETRDOS
  105.                 LD IX,ERR_VIRTUAL
  106.                 JR PRT_NONETRDOS1
  107.  
  108. PRT_NONETRDOS   LD IX,NONETRDOS
  109. PRT_NONETRDOS1  RST8 _WINW
  110.                 JR STUPID1
  111.  
  112. ;[ВЫВОД ПОМОЩИ]
  113. VIEW_HELP       LD IX,WIN_HELP
  114.                 RST8 _WINW
  115. VIEWHELP1       CALL PRINTTIME
  116.                 EI
  117.                 HALT
  118.                 BIT 5,(IY+1)
  119.                 CALL Z,CP_TIME_KOSHAK
  120.                 JR Z,VIEWHELP1
  121.                 RES 5,(IY+1)
  122.                 JR STUPID1
  123.  
  124. LDFDI_ERROR     LD IX,LDFDIERROR
  125.                 RST8 _WINW
  126.                 JR STUPID1
  127.  
  128. _STUPID         LD IX,MSTUPID
  129.                 CALL DRAWWIN
  130.                 LD HL,_STUPID
  131.                 LD (DSTUPID),HL
  132. STUPID1         LD SP,0
  133. TEK_SP          EQU $-2
  134.                 CALL SET_7FFD_0
  135.                 EI
  136.                 CALL RESET_VG
  137.                 CALL EXIT4ERROR
  138. ;               LD A,0XFF
  139. ;               LD (gFenv),A
  140. ;               CALL GLUDIN                     ;HL
  141. ;               LD A,1
  142. ;               LD (gFenv),A
  143.                 JP RESTART
  144.  
  145. ;[ПЕРЕХОДИЛКА В БАСИК128]
  146. BAS128          CALL SYSTEM
  147.                 CALL MEMSET
  148.                 DI
  149.                 CALL INIT_LOADTAPE
  150.                 XOR A
  151.                 CALL SET_7FFD
  152.                 RST 0
  153.  
  154. ;[СБРОС УКАЗАТЕЛЯ ЗАГРУЗЧИКА TAPE]
  155. INIT_LOADTAPE   PEC_ON M_SHADOW_BF
  156.                 LD BC,WIN_P2
  157.                 XOR A
  158.                 OUT (C),A
  159.                 LD HL,0X8000
  160.                 LD (HL),A
  161.                 INC L
  162.                 LD (HL),A
  163.                 INC L
  164.                 LD (HL),A
  165.                 LD B,HIGH (WIN_A2)
  166.                 LD A,0X7D
  167.                 OUT (C),A
  168.                 PEC_OFF M_SHADOW_BF
  169.                 RET
  170.  
  171. ;[ПЕРЕХОДИЛКА В БАСИК48]
  172. BAS48           CALL SYSTEM
  173.                 CALL MEMSET
  174.                 CALL INIT_LOADTAPE
  175.                 LD A,0X30
  176.                 CALL SET_7FFD
  177.                 RST 0
  178.  
  179. ;[ПЕРЕХОДИЛКА В ТЫРДОС]
  180. DOS128          CALL SYSTEM
  181.                 CALL MEMSET
  182.                 LD IX,0
  183.                 JP DOSIX
  184.  
  185. ;МЕНЮХА ЗАЧИСТКИ СТРАНИЦ, ФОРМАТИРОВАНИЯ РАМДИСКА И ДИСКЕТНЫЙ КОПИР
  186. _KILLS          LD IX,MKILLS
  187.                 RST8 _WINW
  188.                 JP _RULILKA
  189.  
  190. ;[СБРОС В BASIC 48 СО СТАНДАРТНОЙ ПРОШИВКОЙ ПРИ ВЫКЛЮЧЕННОМ ТУРБО РЕЖИМЕ]
  191. BAS48STD        DI
  192.                 CALL SET_EMU_TAPE
  193.                 LD BC,PENT_CONF
  194.                 LD A,0X14
  195.                 OUT (C),A
  196.                 LD BC,CONF_128
  197.                 LD A,0X30
  198.                 OUT (C),A
  199.                 PEC_ON M_SHADOW_BF
  200.                 ATMPORT WIN_A0,0X3F
  201.                 EVOPORT WIN_P0,0
  202.                 LD HL,0
  203.                 LD (HL),H
  204.                 INC L
  205.                 LD (HL),H
  206.                 INC L
  207.                 LD (HL),H
  208.                 ATMPORT WIN_A0,ROM_BAS48_STD
  209.                 PEC_OFF M_SHADOW_BF
  210.                 JP 0
  211.  
  212. ;[СБРОС В BASIC 128 СО СТАНДАРТНОЙ ПРОШИВКОЙ ПРИ ВЫКЛЮЧЕННОМ ТУРБО РЕЖИМЕ]
  213. BAS128STD       DI
  214.                 CALL SET_EMU_TAPE
  215.                 LD BC,PENT_CONF
  216.                 LD A,0X14
  217.                 OUT (C),A
  218.                 PEC_ON M_SHADOW_BF
  219.                 ATMPORT WIN_A0,0X3F
  220.                 EVOPORT WIN_P0,0
  221.                 LD HL,0
  222.                 LD (HL),H
  223.                 INC L
  224.                 LD (HL),H
  225.                 INC L
  226.                 LD (HL),H
  227.                 ATMPORT WIN_A0,ROM_BAS48_128
  228.                 LD BC,CONF_128
  229.                 XOR A
  230.                 OUT (C),A
  231.                 ATMPORT WIN_A0,ROM_BAS128_STD
  232.                 PEC_OFF M_SHADOW_BF
  233.                 JP 0
  234.  
  235. ;[HDD BOOT]
  236. HDD_BOOT        LD HL,ADR_CAT
  237.                 PUSH HL
  238.                 RST8 _COM_DEV,_COMHDDN,_DEV_INIT
  239.                 LD A,H
  240.                 POP HL
  241.                 AND A
  242.                 JR NZ,HDDBOOT1
  243. HDDBOOT4        PUSH HL
  244.                 CALL MEMSET
  245.                 POP DE
  246.                 PUSH DE
  247.                 LD HL,HDDBOOT2
  248.                 LD BC,EHDDBOOT2-HDDBOOT2
  249.                 LDIR
  250.                 RET
  251.  
  252. HDDBOOT1        LD IX,HDDBOOT_ERROR
  253.                 RST8 _WINW
  254.                 JP STUPID1
  255.  
  256. HDDBOOT2        LD HL,0X6000                    ;ГРУЗИТЬ БУДЕМ КАК И БЫЛ АДРЕС
  257.                 PUSH HL                         ;ПОСЛЕ ЗАГРУЗКИ ЗАПУСКАЕМ ЗАГРУЖЕННОЕ
  258.                 LD BC,0
  259.                 LD DE,2
  260.                 LD A,0X30
  261.                 RST8 _COM_DEV,_COMHDDN,_DEV_READ
  262.                 RET
  263.  
  264.                 LD DE,2                         ;ГРУЗИМ НАЧИНАЯ С СЕКТОРА 2 ИБО LBA
  265.                 LD BC,0XFF00+PN_1F6
  266.                 LD A,0XE0                       ;ВЫБРАЛИ МАСТЕР И LBA РЕЖИМ
  267.                 OUT (C),A
  268.                 LD C,PN_1F5
  269.                 OUT (C),D
  270.                 LD C,PN_1F4
  271.                 OUT (C),D
  272.                 LD C,PN_1F3
  273.                 OUT (C),E
  274.                 LD C,PN_1F2
  275.                 LD A,0X30                       ;ГРУЗИМ СЕКТОРОВ КАК И БЫЛО
  276.                 OUT (C),A
  277.                 EX AF,AF'                       ;СПРЯТАЛИ КОЛИЧЕСТВО СЕКТОРОВ ЗАГРУЗКИ
  278.                 LD C,PN_1F7
  279.                 LD A,0X20
  280.                 OUT (C),A                       ;КОМАНДА ЧТЕНИЯ
  281.                 LD C,PN_1F7
  282. HDDRD1_         IN A,(C)
  283.                 AND 0X88
  284.                 CP 8
  285.                 JR NZ,HDDRD1_
  286.                 EX AF,AF'
  287. HDDRD2_         EX AF,AF'
  288.                 XOR A
  289.                 LD C,PN_1F0
  290. READSC1_        IN E,(C)
  291.                 INC C
  292.                 IN D,(C)
  293.                 DEC C
  294.                 LD (HL),E
  295.                 INC HL
  296.                 LD (HL),D
  297.                 INC HL
  298.                 DEC A
  299.                 JR NZ,READSC1_
  300.                 LD C,PN_1F7
  301. HDDRD3_         IN A,(C)
  302.                 AND 0X80
  303.                 JR NZ,HDDRD3_
  304.                 EX AF,AF'
  305.                 DEC A
  306.                 JR NZ,HDDRD2_
  307.                 RET
  308. EHDDBOOT2
  309.  
  310.                 include "hdd_cd_boot.a80"
  311.  
  312. HDDRDLN EQU $-HDDREAD
  313.  
  314. ;[CD BOOT]
  315. CDBOOT  XOR A
  316.         CALL CLS
  317.         CALL MEMSET
  318.         CALL HDDBINI
  319.         EI
  320.         JP CDBOOTGO
  321.  
  322. UMOUNTIMAGE     RST8 _MOUNTER,_GET_VIRT_BITS
  323.                 AND 0XF0
  324.                 JP Z,RESTART
  325.                 LD IX,WDISMOUNT
  326.                 RST8 _WINW
  327.                 JP _RULILKA                     ;ВОЗВРАЩАЕМСЯ К ОБЩЕМУ УПРАВЛЕНИЮ
  328.  
  329. DISMOUNT_A      XOR A
  330. DISMOUNT_DRV    RST8 _MOUNTER,_CLOSEMOUNT
  331.                 JP RESTART
  332.  
  333. DISMOUNT_B      LD A,1
  334.                 JR DISMOUNT_DRV
  335.  
  336. DISMOUNT_C      LD A,2
  337.                 JR DISMOUNT_DRV
  338.  
  339. DISMOUNT_D      LD A,3
  340.                 JR DISMOUNT_DRV
  341.  
  342. ;[СБРОС CMOS]
  343. RESET_CMOS      RST8 _CMOS_RW,_CLEAR_CMOS
  344.                 CALL SET_MODES
  345.                 JP RESTART
  346.  
  347. ;[УСТАНОВКА ЗАДЕРЖКИ ДО ОПРЕДЕЛЕНИЯ HDD]
  348. HDDTIMEOUT      LD H,HDD_TIMEOUT
  349.                 CALL READCMOS
  350.                 INC A
  351.                 CP 10
  352.                 JR C,HDDTIMEOUT1
  353.                 XOR A
  354. HDDTIMEOUT1     LD L,A
  355.                 CALL WRITECMOS
  356.                 ADD A,'0'
  357.                 LD (TXT_HDDTIMEOUT),A
  358.                 JR REPRINT_MENU
  359.  
  360. ;[УСТАНОВКА РАЗРЕШЕНИЯ/ЗАПРЕЩЕНИЯ ОЗВУЧКИ КЛАВИАТУРЫ]
  361. SOUND_KEYS      LD C,M_SOUNDKEYS
  362.                 LD HL,SNDKEYS_STAT
  363. SET_MENU        PUSH HL
  364.                 LD H,CMOS_BYTE_01
  365. SET_MENU1       CALL READCMOS
  366.                 XOR C
  367.                 LD L,A
  368.                 CALL WRITECMOS
  369.                 AND C
  370.                 POP HL
  371.                 CALL SET_ONOFF
  372. REPRINT_MENU    LD HL,SETUPERTXT
  373.                 RST8 _PRINT_MESSAGE
  374.                 CALL REST_COLCURS
  375.                 RST8 _COM_DEV,_CONTROL_SD
  376.                 JP _RULILKA
  377.  
  378. ;[УСТАНОВКА РАЗРЕШЕНИЯ/ЗАПРЕЩЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS]
  379. ACS_SDNGS       LD C,M_ACCESSSDG
  380.                 LD HL,ACCSSDG_STAT
  381.                 JR SET_MENU
  382.  
  383. ;[УСТАНОВКА ВЫБОРА ДРАЙВЕРА ПРИНТЕРА]
  384. AYPRN_SETUP     LD C,M_TYPE_FONT
  385.                 LD HL,ETXT_AYPRINTER
  386.                 JR SET_MENU
  387.  
  388. ;[ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ АВТОСТАРТА TAP ФАЙЛА ПРИ ВЫБОРЕ В FILE BROWSER]
  389. AUTO_TAPE       LD C,M_AUTO_TAPE
  390.                 LD HL,TXT_AUTOTAPE
  391.                 PUSH HL
  392.                 LD H,CMOS_BYTE_00
  393.                 JR SET_MENU1
  394.  
  395. ;для резидента HONEY COMANDER
  396.         IFDEF REZIDENT
  397. ;включение/выключение резидента
  398. REZID_SETUP     LD C,M_REZIDENT
  399.                 LD HL,TXT_REZIDENT
  400.                 JR SET_MENU
  401.  
  402. ;включение/выключения порчи резидента при запуске
  403. KILL_REZID      LD C,M_KILL_REZIDENT
  404.                 LD HL,TXT_KILLREZID
  405.                 PUSH HL
  406.                 LD H,CMOS_BYTE_03
  407.                 JR SET_MENU1
  408.         ENDIF;REZIDENT
  409.  
  410. ;[УСТАНОВКА ПЕРЕД ВЫВОДОМ МЕНЮ SETUP]
  411. SETUPM          LD IX,SETUPER
  412.                 LD H,CMOS_BYTE_01
  413.                 CALL READCMOS
  414.                 LD B,A
  415.                 AND M_SOUNDKEYS
  416.                 LD HL,SNDKEYS_STAT
  417.                 CALL SET_ONOFF
  418.                 LD A,B
  419.                 AND M_ACCESSSDG
  420.                 LD HL,ACCSSDG_STAT
  421.                 CALL SET_ONOFF
  422.                 LD H,CMOS_BYTE_00
  423.                 CALL READCMOS
  424.                 AND M_AUTO_TAPE
  425.                 LD HL,TXT_AUTOTAPE
  426.                 CALL SET_ONOFF
  427.                 LD H,HDD_TIMEOUT
  428.                 CALL READCMOS
  429.                 ADD A,'0'
  430.                 LD (TXT_HDDTIMEOUT),A
  431.                 RST8 _WINW
  432.                 JP _RULILKA
  433.  
  434. ;[ATM CP/M]
  435. ATM_CPM         EI
  436.                 HALT
  437.                 DI
  438.                 PEC_ON M_SHADOW_BF
  439.                 LD HL,CPM_PAGES
  440.                 LD DE,0X3F
  441. ATM_CPM1        LD BC,CONF_128
  442.                 OUT (C),D
  443.                 LD BC,LOW (WIN_A3)
  444. ATM_CPM2        OUTI
  445.                 LD A,B
  446.                 SUB E
  447.                 LD B,A
  448.                 JR NZ,ATM_CPM2
  449.                 LD A,D
  450.                 XOR 0X10
  451.                 LD D,A
  452.                 JR NZ,ATM_CPM1
  453.                 LD SP,0X8000
  454.                 LD BC,0X177
  455.                 LD A,6
  456.                 OUT (C),A
  457.                 PEC_OFF M_SHADOW_BF
  458.                 JP 0X000C
  459.  
  460. CPM_PAGES       DB 3!0X7F,2!0X7F,4!0X7F,0!0X7F
  461.                 DB 3!0X7F,2!0X7F,5!0X7F,ROM_ATMCPM
  462.  
  463. ;[УСТАНОВКА РАЗРЕШЕНИЯ/ЗАПРЕЩЕНИЯ ЭМУЛЯЦИИ ЛЕНТЫ]
  464. SET_EMU_TAPE    LD H,CMOS_BYTE_00
  465.                 CALL READCMOS
  466.                 AND M_EMUL_TAPE
  467.                 RET Z
  468.                 LD BC,BREAK_LOW_WR
  469.                 LD A,LOW (ADRBRK_EMUTAP)
  470.                 OUT (C),A
  471.                 LD B,HIGH (BREAK_HIGH_WR)
  472.                 LD A,HIGH (ADRBRK_EMUTAP)
  473.                 OUT (C),A
  474.                 PEC_ON M_BREAK_BF
  475.                 RET
  476.