Subversion Repositories pentevo

Rev

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

  1.  
  2. ; LAST UPDATE: 09.11.2022 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. DISMOUNT_A      XOR A
  334. DISMOUNT_DRV
  335.         RST8 _MOUNTER,_CLOSEMOUNT
  336.                 JP RESTART
  337.  
  338. DISMOUNT_B      LD A,1
  339.                 JR DISMOUNT_DRV
  340.  
  341. DISMOUNT_C      LD A,2
  342.                 JR DISMOUNT_DRV
  343.  
  344. DISMOUNT_D      LD A,3
  345.                 JR DISMOUNT_DRV
  346.  
  347. ; сброс CMOS
  348. RESET_CMOS
  349.         RST8 _CMOS_RW,_CLEAR_CMOS
  350.                 CALL SET_MODES
  351.                 JP RESTART
  352.  
  353. ; установка задержки до определения HDD
  354. HDDTIMEOUT      LD H,HDD_TIMEOUT
  355.                 CALL READCMOS
  356.                 LD E,A
  357.                 AND 0x0F
  358.                 INC A
  359.                 CP 10
  360.                 JR C,HDDTIMEOUT1
  361.                 XOR A
  362. HDDTIMEOUT1     LD D,A
  363.                 LD A,E
  364.                 AND 0xF0
  365.                 OR D
  366.                 LD L,A
  367.                 CALL WRITECMOS
  368.                 AND 0x0F
  369.                 ADD A,'0'
  370.                 LD (TXT_HDDTIMEOUT),A
  371.                 JR REPRINT_MENU
  372.  
  373. ; установка задержки запуска screensaver
  374. SCRSAVTIMEOUT   LD H,HDD_TIMEOUT
  375.                 CALL READCMOS
  376.                 LD E,A
  377.                 AND 0xF0
  378.                 ADD A,0x10
  379.                 CP 0xA0
  380.                 JR C,.L0
  381.                 XOR A
  382. .L0             LD D,A
  383.                 LD A,E
  384.                 AND 0x0F
  385.                 OR D
  386.                 LD L,A
  387.                 CALL WRITECMOS
  388.                 AND 0xF0
  389.                 RRCA
  390.                 RRCA
  391.                 RRCA
  392.                 RRCA
  393.                 LD (SCRSAV.TIMEOUT),A
  394.                 ADD A,'0'
  395.                 LD (TXT_SCRSAVDELAY),A
  396.                 JR REPRINT_MENU
  397.  
  398. ; установка разрешения/запрещения озвучки клавиатуры
  399. SOUND_KEYS      LD C,M_SOUNDKEYS
  400.                 LD HL,SNDKEYS_STAT
  401. SET_MENU        PUSH HL
  402.                 LD H,CMOS_BYTE_01
  403. SET_MENU1       CALL READCMOS
  404.                 XOR C
  405.                 LD L,A
  406.                 CALL WRITECMOS
  407.                 AND C
  408.                 POP HL
  409.                 CALL SET_ONOFF
  410. REPRINT_MENU    LD HL,SETUPERTXT
  411.         RST8 _PRINT_MESSAGE
  412.                 CALL REST_COLCURS
  413.         RST8 _COM_DEV,_CONTROL_SD
  414.                 JP _RULILKA
  415.  
  416. ; установка разрешения/запрещения доступа к SD карте NEOGS
  417. ACS_SDNGS       LD C,M_ACCESSSDG
  418.                 LD HL,ACCSSDG_STAT
  419.                 JR SET_MENU
  420.  
  421. ; установка выбора драйвера принтера
  422. AYPRN_SETUP     LD C,M_TYPE_FONT
  423.                 LD HL,ETXT_AYPRINTER
  424.                 JR SET_MENU
  425.  
  426. ; включение/выключение автостарта TAP файла при выборе в FILE BROWSER
  427. AUTO_TAPE       LD C,M_AUTO_TAPE
  428.                 LD HL,TXT_AUTOTAPE
  429.                 PUSH HL
  430.                 LD H,CMOS_BYTE_00
  431.                 JR SET_MENU1
  432.  
  433. ; для резидента HONEY COMANDER
  434. ; включение/выключение резидента
  435. REZID_SETUP     LD C,M_REZIDENT
  436.                 LD HL,TXT_REZIDENT
  437.                 JR SET_MENU
  438.  
  439. ; включение/выключения порчи резидента при запуске
  440. KILL_REZID      LD C,M_KILL_REZIDENT
  441.                 LD HL,TXT_KILLREZID
  442.                 PUSH HL
  443.                 LD H,CMOS_BYTE_03
  444.                 JR SET_MENU1
  445.  
  446. ; установка перед выводом меню SETUP
  447. SETUPM          LD IX,SETUPER
  448.                 LD H,CMOS_BYTE_01
  449.                 CALL READCMOS
  450.                 LD B,A
  451.                 AND M_SOUNDKEYS
  452.                 LD HL,SNDKEYS_STAT
  453.                 CALL SET_ONOFF
  454.                 LD A,B
  455.                 AND M_ACCESSSDG
  456.                 LD HL,ACCSSDG_STAT
  457.                 CALL SET_ONOFF
  458.                 LD H,CMOS_BYTE_00
  459.                 CALL READCMOS
  460.                 AND M_AUTO_TAPE
  461.                 LD HL,TXT_AUTOTAPE
  462.                 CALL SET_ONOFF
  463.                 LD H,HDD_TIMEOUT
  464.                 CALL READCMOS
  465.                 LD D,A
  466.                 AND 0x0F
  467.                 ADD A,'0'
  468.                 LD (TXT_HDDTIMEOUT),A
  469.                 LD A,D
  470.                 AND 0xF0
  471.                 RRCA
  472.                 RRCA
  473.                 RRCA
  474.                 RRCA
  475.                 ADD A,'0'
  476.                 LD (TXT_SCRSAVDELAY),A
  477.         RST8 _WINW
  478.                 JP _RULILKA
  479.  
  480. ; ATM CP/M
  481. ATM_CPM         EI
  482.                 HALT
  483.                 DI
  484.         PEC_ON M_SHADOW_BF
  485.                 LD HL,CPM_PAGES
  486.                 LD DE,0x3F
  487. ATM_CPM1        LD BC,CONF_128
  488.                 OUT (C),D
  489.                 LD BC,LOW (WIN_A3)
  490. ATM_CPM2        OUTI
  491.                 LD A,B
  492.                 SUB E
  493.                 LD B,A
  494.                 JR NZ,ATM_CPM2
  495.                 LD A,D
  496.                 XOR 0x10
  497.                 LD D,A
  498.                 JR NZ,ATM_CPM1
  499.                 LD SP,0x8000
  500.                 LD BC,0x177
  501.                 LD A,6
  502.                 OUT (C),A
  503.                 LD BC,FDD_EMU_PORT
  504.                 XOR A
  505.                 OUT (C),A
  506.         PEC_OFF M_SHADOW_BF
  507.                 JP 0x000C
  508.  
  509. CPM_PAGES       DB 3!0x7F,2!0x7F,4!0x7F,0!0x7F
  510.                 DB 3!0x7F,2!0x7F,5!0x7F,ROM_ATMCPM
  511.  
  512. ; установка разрешения/запрещения эмуляции ленты
  513. SET_EMU_TAPE    LD H,CMOS_BYTE_00
  514.                 CALL READCMOS
  515.                 AND M_EMUL_TAPE
  516.                 RET Z
  517.                 LD BC,BREAK_LOW
  518.                 LD A,LOW (ADRBRK_EMUTAP)
  519.                 OUT (C),A
  520.                 LD B,HIGH (BREAK_HIGH)
  521.                 LD A,HIGH (ADRBRK_EMUTAP)
  522.                 OUT (C),A
  523.         PEC_ON M_BREAK_BF
  524.                 RET
  525.  
  526.                 include sdcardboot.a80
  527.  
  528. SONGLN          CALL START_SONGLN
  529.                 JP RESTART
  530.  
  531. START_SONGLN    DI
  532.                 PUSH IX
  533.                 PUSH IY
  534.                 LD A,0x11
  535.                 CALL SET_7FFD
  536.                 LD A,0x10
  537.                 CALL SET_EFF7
  538.                 LD HL,0x4000
  539.                 LD DE,0xE000
  540.                 LD BC,0x1B00
  541.                 LDIR
  542.                 LD HL,0xD000
  543.                 LD DE,0xD001
  544.                 LD BC,0x1000
  545.                 LD (HL),0
  546.                 LDIR
  547. SONGLN1         XOR A
  548.                 IN A,(0xFE)
  549.                 CPL
  550.                 AND 0x1F
  551.                 JR NZ,SONGLN1
  552.         PEC_ON M_SHADOW_BF
  553.         EVOPORT WIN_A0,ROM_RST82
  554.                 CALL UNP_SONGLN
  555.         EVOPORT WIN_A0,ROM_BAS48|0x80
  556.         PEC_OFF M_SHADOW_BF
  557.                 CALL 0xC000
  558.                 LD HL,0xE000
  559.                 LD DE,0x4000
  560.                 LD BC,0x1B00
  561.                 LDIR
  562.                 LD HL,0xC000
  563.                 LD DE,0xC001
  564.                 LD BC,0x3FFF
  565.                 LD (HL),0
  566.                 LDIR
  567.                 LD A,0x10
  568.                 CALL SET_7FFD
  569.                 XOR A
  570.                 CALL SET_EFF7
  571.                 POP IY
  572.                 POP IX
  573.                 RET
  574.