Subversion Repositories pentevo

Rev

Rev 1047 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ; LAST UPDATE: 21.02.2023 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
  55.                 LD HL,636*4                     ; RAM DISK на 640 килобайт
  56.                 LD (SECFREE),HL                 ; выставили переменную количества секторов на RAM DISK
  57.                 DI
  58.  
  59.         IFNDEF TESTEMUFDD
  60. ; test
  61.         PEC_ON M_SHADOW_BF
  62.                 LD A,RAM_RAMDISK+1
  63.                 LD BC,WIN_P2
  64.                 OUT (C),A
  65.                 LD HL,0x8000
  66.                 LD D,H
  67.                 LD E,L
  68.                 INC DE
  69.                 LD BC,0x0FFF
  70.                 LD (HL),L
  71.                 LDIR                            ; очистили страницу TR-DOS директории
  72.                 LD HL,DSKINFO
  73.                 LD DE,0x88E1
  74.                 LD C,DSK_END-DSKINFO
  75.                 LDIR                            ; перенесли шаблон для 9 сектора диры
  76.                 LD A,ZXSTD_CPU2
  77.                 LD BC,WIN_P2
  78.                 OUT (C),A
  79.         PEC_OFF M_SHADOW_BF
  80. ; test
  81.         ENDIF
  82.  
  83.                 JP CREATE_TRD640
  84.  
  85. ; сброс NEOGS
  86. RESETNGS        LD A,C_GRST
  87.                 OUT (GSCTR),A
  88.                 JP RESTART
  89.  
  90. ; file not found
  91. FILE_NONE       LD IX,FILENONE
  92.         RST8 _WINW
  93.                 JP STUPID1
  94.  
  95. ; проверка виртуального привода
  96. CMP_VIRTUAL     LD H,VIRT_REAL_DRIVE
  97.                 CALL READCMOS
  98.                 LD A,(DRV_SYM)
  99.                 LD D,A                          ; номер текущего реального дисковода
  100.                 LD A,L
  101.                 RRCA
  102.                 RRCA
  103.                 AND 3                           ; номер реального дисковода из CMOS
  104.                 CP D
  105.                 JR NZ,PRT_NONETRDOS
  106.                 LD IX,ERR_VIRTUAL
  107.                 JR PRT_NONETRDOS1
  108.  
  109. PRT_NONETRDOS   LD IX,NONETRDOS
  110. PRT_NONETRDOS1
  111.         RST8 _WINW
  112.                 JR STUPID1
  113.  
  114. ; вывод помощи
  115. VIEW_HELP       LD IX,WIN_HELP
  116.         RST8 _WINW
  117. VIEWHELP1       CALL PRINTTIME
  118.                 EI
  119.                 HALT
  120.                 BIT 5,(IY+1)
  121.                 CALL Z,CP_TIME_KOSHAK
  122.                 JR Z,VIEWHELP1
  123.                 RES 5,(IY+1)
  124.                 JR STUPID1
  125.  
  126. LDFDI_ERROR     LD IX,LDFDIERROR
  127.         RST8 _WINW
  128.                 JR STUPID1
  129.  
  130. _STUPID         LD IX,MSTUPID
  131.                 CALL DRAWWIN
  132.                 LD HL,_STUPID
  133.                 LD (DSTUPID),HL
  134. STUPID1         LD SP,0
  135. TEK_SP          EQU $-2
  136.                 CALL SET_7FFD_0
  137.                 EI
  138.                 CALL RESET_VG
  139.                 CALL EXIT4ERROR
  140. ;               LD A,0xFF
  141. ;               LD (gFenv),A
  142. ;               CALL GLUDIN                     ;HL
  143. ;               LD A,1
  144. ;               LD (gFenv),A
  145.                 JP RESTART
  146.  
  147. ; переходилка в басик 128
  148. BAS128          CALL SYSTEM
  149.                 CALL MEMSET
  150.                 DI
  151.                 CALL INIT_LOADTAPE
  152.                 XOR A
  153.                 CALL SET_7FFD
  154.                 RST 0
  155.  
  156. ; сброс указателя загрузчика TAPE
  157. INIT_LOADTAPE
  158.         PEC_ON M_SHADOW_BF
  159.                 LD BC,WIN_P2
  160.                 XOR A
  161.                 OUT (C),A
  162.                 LD HL,0x8000
  163.                 LD (HL),A
  164.                 INC L
  165.                 LD (HL),A
  166.                 INC L
  167.                 LD (HL),A
  168.                 LD B,HIGH (WIN_A2)
  169.                 LD A,0x7D
  170.                 OUT (C),A
  171.         PEC_OFF M_SHADOW_BF
  172.                 RET
  173.  
  174. ; переходилка в басик 48
  175. BAS48           CALL SYSTEM
  176.                 CALL MEMSET
  177.                 CALL INIT_LOADTAPE
  178.                 LD A,0x30
  179.                 CALL SET_7FFD
  180.                 RST 0
  181.  
  182. ; переходилка в тырдос
  183. DOS128          CALL SYSTEM
  184.                 CALL MEMSET
  185.                 LD IX,0
  186.                 JP DOSIX
  187.  
  188. ; менюха зачистки страниц, форматирования рамдиска и дискетный копир
  189. _KILLS          LD IX,MKILLS
  190.         RST8 _WINW
  191.                 JP _RULILKA
  192.  
  193. ; сброс в basic 48 со стандартной прошивкой при выключенном турбо режиме
  194. BAS48STD        DI
  195.                 CALL SET_EMU_TAPE
  196.                 LD BC,PENT_CONF
  197.                 LD A,0x14
  198.                 OUT (C),A
  199.                 LD BC,CONF_128
  200.                 LD A,0x30
  201.                 OUT (C),A
  202.         PEC_ON M_SHADOW_BF
  203.         ATMPORT WIN_A0,0x3F
  204.         EVOPORT WIN_P0,0
  205.                 LD HL,0
  206.                 LD (HL),H
  207.                 INC L
  208.                 LD (HL),H
  209.                 INC L
  210.                 LD (HL),H
  211.         ATMPORT WIN_A0,ROM_BAS48_STD
  212.         PEC_OFF M_SHADOW_BF
  213.                 JP 0
  214.  
  215. ; сброс в basic 128 со стандартной прошивкой при выключенном турбо режиме
  216. BAS128STD       DI
  217.                 CALL SET_EMU_TAPE
  218.                 LD BC,PENT_CONF
  219.                 LD A,0x14
  220.                 OUT (C),A
  221.         PEC_ON M_SHADOW_BF
  222.         ATMPORT WIN_A0,0x3F
  223.         EVOPORT WIN_P0,0
  224.                 LD HL,0
  225.                 LD (HL),H
  226.                 INC L
  227.                 LD (HL),H
  228.                 INC L
  229.                 LD (HL),H
  230.         ATMPORT WIN_A0,ROM_BAS48_128
  231.                 LD BC,CONF_128
  232.                 XOR A
  233.                 OUT (C),A
  234.         ATMPORT WIN_A0,ROM_BAS128_STD
  235.         PEC_OFF M_SHADOW_BF
  236.                 JP 0
  237.  
  238. ; HDD BOOT
  239. HDD_BOOT        LD HL,ADR_CAT
  240.                 PUSH HL
  241.         RST8 _COM_DEV,_COMHDDN,_DEV_INIT
  242.                 LD A,H
  243.                 POP HL
  244.                 AND A
  245.                 JR NZ,HDDBOOT1
  246. HDDBOOT4        PUSH HL
  247.                 CALL MEMSET
  248.                 POP DE
  249.                 PUSH DE
  250.                 LD HL,HDDBOOT2
  251.                 LD BC,EHDDBOOT2-HDDBOOT2
  252.                 LDIR
  253.                 RET
  254.  
  255. HDDBOOT1        LD IX,HDDBOOT_ERROR
  256.         RST8 _WINW
  257.                 JP STUPID1
  258.  
  259. HDDBOOT2        LD HL,0x6000                    ; грузить будем как и был адрес
  260.                 PUSH HL                         ; после загрузки запускаем загруженное
  261.                 LD BC,0
  262.                 LD DE,2
  263.                 LD A,0x30
  264.         RST8 _COM_DEV,_COMHDDN,_DEV_READ
  265.                 RET
  266.  
  267.                 LD DE,2                         ; грузим начиная с сектора 2 ибо LBA
  268.                 LD BC,0xFF00+PN_1F6
  269.                 LD A,0xE0                       ; выбрали мастер и lba режим
  270.                 OUT (C),A
  271.                 LD C,PN_1F5
  272.                 OUT (C),D
  273.                 LD C,PN_1F4
  274.                 OUT (C),D
  275.                 LD C,PN_1F3
  276.                 OUT (C),E
  277.                 LD C,PN_1F2
  278.                 LD A,0x30                       ; грузим секторов как и было
  279.                 OUT (C),A
  280.                 EX AF,AF'                       ; спрятали количество секторов загрузки
  281.                 LD C,PN_1F7
  282.                 LD A,0x20
  283.                 OUT (C),A                       ; команда чтения
  284.                 LD C,PN_1F7
  285. HDDRD1_         IN A,(C)
  286.                 AND 0x88
  287.                 CP 8
  288.                 JR NZ,HDDRD1_
  289.                 EX AF,AF'
  290. HDDRD2_         EX AF,AF'
  291.                 XOR A
  292.                 LD C,PN_1F0
  293. READSC1_        IN E,(C)
  294.                 INC C
  295.                 IN D,(C)
  296.                 DEC C
  297.                 LD (HL),E
  298.                 INC HL
  299.                 LD (HL),D
  300.                 INC HL
  301.                 DEC A
  302.                 JR NZ,READSC1_
  303.                 LD C,PN_1F7
  304. HDDRD3_         IN A,(C)
  305.                 AND 0x80
  306.                 JR NZ,HDDRD3_
  307.                 EX AF,AF'
  308.                 DEC A
  309.                 JR NZ,HDDRD2_
  310.                 RET
  311. EHDDBOOT2
  312.  
  313.                 include "hdd_cd_boot.a80"
  314.  
  315. HDDRDLN EQU $-HDDREAD
  316.  
  317. ; CD BOOT
  318. CDBOOT  XOR A
  319.         CALL CLS
  320.         CALL MEMSET
  321.         CALL HDDBINI
  322.         EI
  323.         JP CDBOOTGO
  324.  
  325. UMOUNTIMAGE
  326.         RST8 _MOUNTER,_GET_VIRT_BITS
  327.                 AND 0x0F
  328.                 JP Z,RESTART
  329.                 LD IX,WDISMOUNT
  330.         RST8 _WINW
  331.                 JP _RULILKA                     ; возвращаемся к общему управлению
  332.  
  333. ; демонтирование всех дисков
  334. DISMOUNT_ALL    LD A,3
  335.         RST8 _MOUNTER,_CLOSEMOUNT
  336.                 LD A,2
  337.         RST8 _MOUNTER,_CLOSEMOUNT
  338.                 LD A,1
  339.         RST8 _MOUNTER,_CLOSEMOUNT
  340. DISMOUNT_A      XOR A
  341. DISMOUNT_DRV
  342.         RST8 _MOUNTER,_CLOSEMOUNT
  343.                 JP RESTART
  344.  
  345. DISMOUNT_B      LD A,1
  346.                 JR DISMOUNT_DRV
  347.  
  348. DISMOUNT_C      LD A,2
  349.                 JR DISMOUNT_DRV
  350.  
  351. DISMOUNT_D      LD A,3
  352.                 JR DISMOUNT_DRV
  353.  
  354. ; сброс CMOS
  355. RESET_CMOS
  356.         RST8 _CMOS_RW,_CLEAR_CMOS
  357.                 CALL SET_MODES
  358.                 JP RESTART
  359.  
  360. ; установка задержки до определения HDD
  361. HDDTIMEOUT      LD H,HDD_TIMEOUT
  362.                 CALL READCMOS
  363.                 LD E,A
  364.                 AND 0x0F
  365.                 INC A
  366.                 CP 10
  367.                 JR C,HDDTIMEOUT1
  368.                 XOR A
  369. HDDTIMEOUT1     LD D,A
  370.                 LD A,E
  371.                 AND 0xF0
  372.                 OR D
  373.                 LD L,A
  374.                 CALL WRITECMOS
  375.                 AND 0x0F
  376.                 ADD A,'0'
  377.                 LD (TXT_HDDTIMEOUT),A
  378.                 JR REPRINT_MENU
  379.  
  380. ; установка задержки запуска screensaver
  381. SCRSAVTIMEOUT   LD H,HDD_TIMEOUT
  382.                 CALL READCMOS
  383.                 LD E,A
  384.                 AND 0xF0
  385.                 ADD A,0x10
  386.                 CP 0xA0
  387.                 JR C,.L0
  388.                 XOR A
  389. .L0             LD D,A
  390.                 LD A,E
  391.                 AND 0x0F
  392.                 OR D
  393.                 LD L,A
  394.                 CALL WRITECMOS
  395.                 AND 0xF0
  396.                 RRCA
  397.                 RRCA
  398.                 RRCA
  399.                 RRCA
  400.                 LD (SCRSAV.TIMEOUT),A
  401.                 ADD A,'0'
  402.                 LD (TXT_SCRSAVDELAY),A
  403.                 JR REPRINT_MENU
  404.  
  405. ; установка разрешения/запрещения озвучки клавиатуры
  406. SOUND_KEYS      LD C,M_SOUNDKEYS
  407.                 LD HL,SNDKEYS_STAT
  408. SET_MENU        PUSH HL
  409.                 LD H,CMOS_BYTE_01
  410. SET_MENU1       CALL READCMOS
  411.                 XOR C
  412.                 LD L,A
  413.                 CALL WRITECMOS
  414.                 AND C
  415.                 POP HL
  416.                 CALL SET_ONOFF
  417. REPRINT_MENU    LD HL,SETUPERTXT
  418.         RST8 _PRINT_MESSAGE
  419.                 CALL REST_COLCURS
  420.         RST8 _COM_DEV,_CONTROL_SD
  421.                 JP _RULILKA
  422.  
  423. ; установка разрешения/запрещения доступа к SD карте NEOGS
  424. ACS_SDNGS       LD C,M_ACCESSSDG
  425.                 LD HL,ACCSSDG_STAT
  426.                 JR SET_MENU
  427.  
  428. ; установка выбора драйвера принтера
  429. AYPRN_SETUP     LD C,M_TYPE_FONT
  430.                 LD HL,ETXT_AYPRINTER
  431.                 JR SET_MENU
  432.  
  433. ; включение/выключение автостарта TAP файла при выборе в FILE BROWSER
  434. AUTO_TAPE       LD C,M_AUTO_TAPE
  435.                 LD HL,TXT_AUTOTAPE
  436.                 PUSH HL
  437.                 LD H,CMOS_BYTE_00
  438.                 JR SET_MENU1
  439.  
  440. ; для резидента HONEY COMANDER
  441. ; включение/выключение резидента
  442. REZID_SETUP     LD C,M_REZIDENT
  443.                 LD HL,TXT_REZIDENT
  444.                 JR SET_MENU
  445.  
  446. ; включение/выключения порчи резидента при запуске
  447. KILL_REZID      LD C,M_KILL_REZIDENT
  448.                 LD HL,TXT_KILLREZID
  449.                 PUSH HL
  450.                 LD H,CMOS_BYTE_03
  451.                 JR SET_MENU1
  452.  
  453. ; установка перед выводом меню SETUP
  454. SETUPM          LD IX,SETUPER
  455.                 LD H,CMOS_BYTE_01
  456.                 CALL READCMOS
  457.                 LD B,A
  458.                 AND M_SOUNDKEYS
  459.                 LD HL,SNDKEYS_STAT
  460.                 CALL SET_ONOFF
  461.                 LD A,B
  462.                 AND M_ACCESSSDG
  463.                 LD HL,ACCSSDG_STAT
  464.                 CALL SET_ONOFF
  465.                 LD H,CMOS_BYTE_00
  466.                 CALL READCMOS
  467.                 AND M_AUTO_TAPE
  468.                 LD HL,TXT_AUTOTAPE
  469.                 CALL SET_ONOFF
  470.                 LD H,HDD_TIMEOUT
  471.                 CALL READCMOS
  472.                 LD D,A
  473.                 AND 0x0F
  474.                 ADD A,'0'
  475.                 LD (TXT_HDDTIMEOUT),A
  476.                 LD A,D
  477.                 AND 0xF0
  478.                 RRCA
  479.                 RRCA
  480.                 RRCA
  481.                 RRCA
  482.                 ADD A,'0'
  483.                 LD (TXT_SCRSAVDELAY),A
  484.         RST8 _WINW
  485.                 JP _RULILKA
  486.  
  487. ; установка разрешения/запрещения эмуляции ленты
  488. SET_EMU_TAPE    LD H,CMOS_BYTE_00
  489.                 CALL READCMOS
  490.                 AND M_EMUL_TAPE
  491.                 RET Z
  492.                 LD BC,BREAK_LOW
  493.                 LD A,LOW (ADRBRK_EMUTAP)
  494.                 OUT (C),A
  495.                 LD B,HIGH (BREAK_HIGH)
  496.                 LD A,HIGH (ADRBRK_EMUTAP)
  497.                 OUT (C),A
  498.         PEC_ON M_BREAK_BF
  499.                 RET
  500.  
  501.                 include sdcardboot.a80
  502.  
  503. SONGLN          CALL START_SONGLN
  504.                 JP RESTART
  505.  
  506. START_SONGLN    DI
  507.                 PUSH IX
  508.                 PUSH IY
  509.                 LD A,0x11
  510.                 CALL SET_7FFD
  511.                 LD A,0x10
  512.                 CALL SET_EFF7
  513.                 LD HL,0x4000
  514.                 LD DE,0xE000
  515.                 LD BC,0x1B00
  516.                 LDIR
  517.                 LD HL,0xD000
  518.                 LD DE,0xD001
  519.                 LD BC,0x1000
  520.                 LD (HL),0
  521.                 LDIR
  522. SONGLN1         XOR A
  523.                 IN A,(0xFE)
  524.                 CPL
  525.                 AND 0x1F
  526.                 JR NZ,SONGLN1
  527.         PEC_ON M_SHADOW_BF
  528.         EVOPORT WIN_A0,ROM_RST82
  529.                 CALL UNP_SONGLN
  530.         EVOPORT WIN_A0,ROM_BAS48|0x80
  531.         PEC_OFF M_SHADOW_BF
  532.                 CALL 0xC000
  533.                 LD HL,0xE000
  534.                 LD DE,0x4000
  535.                 LD BC,0x1B00
  536.                 LDIR
  537.                 LD HL,0xC000
  538.                 LD DE,0xC001
  539.                 LD BC,0x3FFF
  540.                 LD (HL),0
  541.                 LDIR
  542.                 LD A,0x10
  543.                 CALL SET_7FFD
  544.                 XOR A
  545.                 CALL SET_EFF7
  546.                 POP IY
  547.                 POP IX
  548.                 RET
  549.