Subversion Repositories pentevo

Rev

Rev 1041 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ; LAST UPDATE: 16.02.2025 savelij
  3.  
  4.                 include ../../macros.a80
  5.                 include ../../define.a80
  6.                 include ../../global_vars.a80
  7.                 include ../../evodos_vars.a80
  8.  
  9. DEPKADR         EQU 0x6000
  10.  
  11.                 ORG 0x0000
  12.                 DI
  13.                 JP INITPAGE0
  14.  
  15.                 DB 0x0008 - $ DUP 0xFF
  16.                 NOP
  17.                 JP DOS2RST8
  18.  
  19.                 DB ADR_SEL_ROM - $ DUP 0xFF
  20.                 OUT (C),A
  21.                 NOP
  22.                 RET
  23.  
  24.                 DB 0x0038 - $ DUP 0xFF
  25.                 EI
  26.                 RET
  27.  
  28.                 DB 0x0066 - $ DUP 0xFF
  29.                 NOP
  30.  
  31.                 DB 0x0080 - $ DUP 0xFF
  32.                 include ../../dec40.a80
  33.  
  34.                 DB 0x00FF - $ DUP 0xFF
  35.                 DW 0x0038
  36.  
  37. INITPAGE0       LD SP,DEPKADR
  38.                 LD IY,0x5C3A
  39.                 LD A,0x3F
  40.                 LD I,A
  41.                 IM 1
  42.                 XOR A
  43.                 OUT (0xFE),A
  44.                 LD HL,PAGES_CONF
  45.                 LD BC,0xBC77
  46.                 LD A,2
  47.                 OUT (C),A
  48.                 LD DE,0x103F
  49. .L1             LD BC,CONF_128
  50.                 OUT (C),D
  51.                 LD BC,LOW (WIN_A0)
  52. .L2             OUTI
  53.                 LD A,B
  54.                 SUB E
  55.                 LD B,A
  56.                 JR NZ,.L2
  57.                 LD BC,CONF_128
  58.                 LD A,D
  59.                 XOR 0x10
  60.                 LD D,A
  61.                 JR Z,.L1
  62.                 LD BC,0xFF77
  63.                 LD A,0xAB
  64.                 OUT (C),A
  65.         PEC_ON M_SHADOW_BF
  66.                 LD HL,.L3
  67.                 PUSH HL
  68.                 LD HL,0x40
  69.                 PUSH HL
  70.                 LD BC,WIN_A0
  71.                 LD A,ROM_RST81
  72.                 JP ADR_SEL_ROM
  73.  
  74. .L3
  75.         RST8 _CMOS_RW,_INIT_CMOS
  76.                 LD HL,PAGES_CONF
  77.                 LD A,0xEF
  78.                 IN A,(0xFE)
  79.                 RRCA                            ; проверка нажатия кнопки "0" при сбросе
  80.                 CALL NC,RES_REZIDENT
  81.                 JR NC,.L5                       ; сброс в основное пзу
  82.                 RRCA
  83.                 RRCA
  84.                 RRCA
  85.                 RRCA                            ; проверка нажатия кнопки "6" при сбросе
  86.                 JR C,.L4
  87. ; вход в отладчик
  88.                 EXX
  89.                 LD BC,WIN_P2
  90.                 XOR A
  91.                 OUT (C),A
  92.                 LD HL,CPU2 + DEBUG_ONOFF
  93.                 SET 7,(HL)
  94.                 EXX
  95.                 IN A,(PEVO_CONF)
  96.                 OR M_NMI_BF
  97.                 OUT (PEVO_CONF),A
  98.                 AND M_NMI_BF ! 0xFF
  99.                 OUT (PEVO_CONF),A
  100.                 HALT
  101. .L4             LD BC,CMOSD_SET_ADR
  102.                 LD A,CMOS.BYTE_00
  103.                 OUT (C),A
  104.                 LD B,HIGH (CMOSD_RD_WR)
  105.                 IN A,(C)
  106.                 AND CMOS_EC.MKOL_MODES
  107.                 CP CMOS_EC.KOL_MODES
  108.                 JR NC,.L5
  109.                 AND A
  110.                 JR Z,.L5
  111.                 DEC A
  112.                 LD HL,PAGES_CONFGLUK            ; конфигурировать для GLUK
  113.                 JR Z,.L5
  114.                 DEC A
  115.                 LD HL,PAGES_PROFROM             ; конфигурировать для PROFROM
  116.                 JR Z,.L5
  117.                 LD HL,PAGES_CUSTOM              ; конфигурировать для USER ROM
  118. .L5             LD A,0xEF
  119.                 IN A,(0xFE)
  120.                 RRCA                            ; проверка не нажатости кнопки "0" при сбросе
  121.                 JR NC,.L5                       ; если нажата ждем отпускания
  122.                 LD BC,0xBC77
  123.                 LD A,2
  124.                 OUT (C),A
  125.                 LD DE,0x103F
  126. .L6             LD BC,CONF_128
  127.                 OUT (C),D
  128.                 LD BC,LOW (WIN_A0)
  129. .L7             OUTI
  130.                 LD A,B
  131.                 SUB E
  132.                 LD B,A
  133.                 JR NZ,.L7
  134.                 LD BC,CONF_128
  135.                 LD A,D
  136.                 XOR 0x10
  137.                 LD D,A
  138.                 JR Z,.L6
  139.                 LD A,(HL)
  140.                 LD IXH,A                        ; номер страницы завершения инита манагера
  141.                 LD DE,0xAB0F                    ; ZX SCREEN MODE, TURBO ON 14MHZ
  142.                 LD BC,0xFD77                    ; и доступ к палитре
  143.                 OUT (C),D
  144.                 EI                              ; палитра
  145.                 HALT
  146.                 DI
  147.                 LD HL,TRSTPAL                   ; +15
  148.                 LD BC,0xBD77
  149.                 OUT (C),D                       ; вкл.PAL
  150. .L8             LD A,E
  151.                 BIT 3,E
  152.                 OUT (0xFE),A
  153.                 JR Z,.L9
  154.                 OUT (0xF6),A
  155. .L9             LD A,(HL)
  156.                 INC HL
  157.                 OR %00001100
  158.                 OUT (0xFF),A
  159.                 DEC E
  160.                 JP P,.L8
  161.                 LD A,0xAB
  162.                 LD BC,0xFF77
  163.                 OUT (C),A                       ; выкл.PAL
  164.                 LD A,IXH
  165.                 LD BC,0
  166.                 AND 0x3C
  167.                 JR Z,.L11                       ; RESET TO EVO SERVICE PAGE
  168.                 CP CONF4GLUK & 0x3F
  169.                 JR Z,.L10                       ; RESET TO GLUK SERVICE PAGE
  170.                 CP CONF4CUSTOM & 0x3F
  171.                 JR Z,.L10                       ; RESET TO CUSTOM ROM
  172.                 JP LDIR4PROFROM                 ; RESET TO PROFROM BASIC 128
  173.  
  174. .L10            PUSH BC
  175.                 LD BC,0xBC77
  176.                 LD A,2
  177.                 OUT (C),A
  178.                 LD BC,WIN_A0
  179.                 LD A,IXH
  180.                 OUT (C),A
  181.         PEC_OFF M_SHADOW_BF
  182.                 LD BC,0xFF77
  183.                 LD A,0xA3
  184.                 JP 0x3D2D
  185.  
  186. .L11            LD H,CMOS.BYTE_00
  187.         RST8 _CMOS_RW,_READ_CMOS
  188.                 AND CMOS_ED.RESET2CUSTOM ! 0xFF ; сброс для основного пзу
  189.                 LD L,A
  190.         RST8 _CMOS_RW,_WRITE_CMOS               ; принудительно выставление в кмос сброса на EVO SERVICE
  191.         IFDEF DOS_FE
  192.                 LD BC,WIN_A3
  193.                 LD A,ROM_RST82
  194.                 OUT (C),A
  195.                 LD B,HIGH (WIN_P2)
  196.                 LD A,RAM_EVODOS
  197.                 OUT (C),A
  198.                 CALL UNP_DOS_FE + CPU3          ; распаковка эмуля ВГшки
  199.         ELSE
  200.                 LD BC,WIN_A3
  201.                 LD A,ROM_ADD_DOS
  202.                 OUT (C),A
  203.                 LD B,HIGH (WIN_P2)
  204.                 LD A,RAM_EVODOS
  205.                 OUT (C),A
  206.                 LD HL,CPU3
  207.                 LD DE,CPU2
  208.                 LD BC,0x4000
  209.                 LDIR                            ; копирование DOS
  210.         ENDIF
  211.                 LD BC,WIN_A2
  212.                 LD A,0x7D
  213.                 OUT (C),A
  214.                 LD B,HIGH (WIN_A3)
  215.                 LD A,0xFF
  216.                 OUT (C),A
  217. ; для резидента HONEY COMANDER
  218.                 CALL CMP_REZIDENT               ; проверка резидента
  219.                 LD BC,0xFEFF
  220. .L12            LD A,B
  221.                 IN A,(0xFE)
  222.         REPT 5
  223.                 RRA
  224.                 JR C,$+3
  225.                 INC C
  226.         ENDM
  227.                 RLC B
  228.                 JR C,.L12
  229.                 DEC C
  230.                 JP P,.L15                       ; нажато более 1 кнопки, переходим к тесту клавиатуры
  231.                 LD IXL,0                        ; запуск неосновной прошивки сервиса
  232.                 LD DE,0                         ; 1 нажата, проверяем что это
  233.                 LD BC,CONF_128
  234.                 PUSH DE                         ; адрес перехода в пзу если выбрано
  235.                 LD A,0xFE
  236.                 IN A,(0xFE)                     ; чтение нажатости кнопки "CS"
  237.                 RRA
  238.                 LD A,0
  239.                 JP NC,.L18              ; при нажатой "CS" переходим в бейсик 128
  240.                 LD A,0x7F
  241.                 IN A,(0xFE)                     ; чтение нажатости кнопки "SS"
  242.                 LD D,A
  243.                 RRA
  244.                 RRA
  245.                 LD A,0x30
  246.                 JP NC,.L18              ; при нажатой "SS" переходим в бейсик 48
  247.                 LD A,D
  248.                 RRA                             ; проверка нажатости кнопки "SPACE"
  249.                 JR C,.L13                       ; переходим далее если ничего не нажато
  250.                 LD A,0x10
  251.                 LD DE,0x3D2F
  252.                 PUSH DE
  253.                 JP .L18                 ; при нажатой "SPACE" переходим в TR-DOS
  254.  
  255. .L13            LD A,0xFD
  256.                 IN A,(0xFE)
  257.                 AND 4                           ; нажато "D" запуск демки
  258.                 JP Z,.L17
  259.                 LD IXL,1                        ; запуск основной прошивки сервиса
  260.                 LD HL,DEPKADR                   ; ничего не нажато, запускаем основную прошивку
  261.                 LD SP,HL
  262.                 EX DE,HL
  263.                 LD HL,.L14
  264.                 PUSH HL
  265.                 LD HL,0x0101
  266.                 PUSH HL
  267.                 LD BC,WIN_A0
  268.                 LD A,ROM_MAINMENU
  269.                 JP ADR_SEL_ROM
  270.  
  271. .L14            XOR A
  272.                 IN A,(0xFE)
  273.                 CPL
  274.                 AND 0x1F
  275.                 LD A,0x10
  276.                 JR NZ,.L16
  277.                 LD HL,0x6000
  278.                 PUSH HL
  279.                 JR .L18
  280.  
  281. .L15            SCF
  282.                 LD A,0x10
  283. .L16            LD HL,BONUADR                   ; CMOS setup & HELP
  284.                 LD DE,0x6000                    ; распаковка и запуск CMOS SETUP
  285.                 PUSH DE
  286.                 PUSH AF
  287.                 CALL DEC40
  288.                 POP AF
  289.                 JR .L18
  290.  
  291. .L17            LD HL,0x6000-szdemoini
  292.                 LD SP,HL
  293.                 EX DE,HL
  294.                 PUSH DE
  295.                 LD HL,DEMO
  296.                 LD B,3
  297.                 LDIR
  298. .L18            EX AF,AF'                       ; сохранение А и флагов
  299.                 LD HL,ERAM_CODE-1
  300.                 LD DE,0x5C80
  301.                 LD BC,ERAM_CODE-RAM_CODE
  302.                 LDDR
  303.                 EX DE,HL
  304.                 INC HL
  305.                 EXX
  306.                 LD A,IXL
  307.                 AND A
  308.                 LD D,0xA3
  309.                 JR NZ,.L19
  310.                 LD H,CMOS.BYTE_00
  311.                 CALL READCMOS
  312.                 AND CMOS_ED.M_TURBO14
  313.                 RRCA
  314.                 RRCA
  315.                 RRCA
  316.                 RRCA
  317.                 OR D
  318.                 LD D,A                          ; установка для 14МГЦ
  319. .L19            LD H,CMOS.BYTE_01
  320.                 CALL READCMOS
  321.                 LD E,A                          ; установка для 7.0/3.5МГЦ и модель памяти
  322.         PEC_OFF M_SHADOW_BF
  323.                 EXX
  324.                 JP (HL)
  325.  
  326. RAM_CODE        EXX
  327.                 LD BC,PENT_CONF
  328.                 LD A,IXL
  329.                 AND A
  330.                 LD A,0x10
  331.                 JR NZ,.L2
  332.                 LD A,E
  333.                 AND 3
  334.                 LD L,0
  335.                 JR Z,.L1
  336.                 LD L,4
  337. .L1             LD A,E
  338.                 AND CMOS_EC.M_TURBO357
  339.                 RRCA
  340.                 RRCA
  341.                 RRCA
  342.                 OR L
  343.                 BIT 3,D
  344.                 JR Z,.L2
  345.                 SET 4,A
  346. .L2             OUT (C),A
  347.                 LD BC,CONF_128
  348.                 XOR A
  349.                 OUT (C),A                       ; включили маппер 0
  350.         PEC_ON M_SHADOW_BF
  351.                 LD BC,WIN_A0
  352.                 LD A,IXH
  353.                 OUT (C),A                       ; запрограммировали ROM для маппер 0
  354.                 LD BC,0xFF77
  355.                 OUT (C),D                       ; выставили турбо в зависимости от установок
  356.         PEC_OFF M_SHADOW_BF
  357.                 EX AF,AF'
  358.                 LD BC,CONF_128
  359.                 OUT (C),A                       ; включили маппер 1
  360.                 RET
  361. ERAM_CODE
  362.  
  363. ; на входе:  H - адрес ячейки
  364. ; на выходе: L,A - прочитанное значение
  365. READCMOS        PUSH BC
  366.                 LD BC,CMOSD_SET_ADR
  367.                 OUT (C),H
  368.                 LD B,HIGH (CMOSD_RD_WR)
  369.                 IN L,(C)
  370.                 LD A,L
  371.                 POP BC
  372.                 RET
  373.  
  374. ; сброс включенного резидента
  375. RES_REZIDENT    PUSH AF
  376.                 PUSH HL
  377.                 LD H,CMOS.BYTE_01
  378.                 CALL READCMOS
  379.                 RES CMOS_EC.B_REZIDENT,L
  380.         RST8 _CMOS_RW,_WRITE_CMOS
  381.                 POP HL
  382.                 POP AF
  383.                 RET
  384.  
  385. ; для резидента HONEY COMANDER
  386. CMP_REZIDENT    LD H,CMOS.BYTE_01
  387.                 CALL READCMOS
  388.                 AND CMOS_EC.M_REZIDENT
  389.                 RET Z
  390.                 LD BC,WIN_A3
  391.                 LD A,0x1F ! 0x7F
  392.                 OUT (C),A
  393.                 LD HL,CPU3
  394.                 LD A,(HL)
  395.                 CP 0xC3
  396.                 JR NZ,.NOTFOUND
  397.                 XOR A
  398. .NEXTBYTE       ADD A,(HL)
  399.                 ADC A,0
  400.                 INC HL
  401.                 BIT 7,H
  402.                 JR NZ,.NEXTBYTE
  403.                 DEC A
  404.                 JR NZ,.NOTFOUND
  405.                 LD A,0xAA
  406.                 DEC HL
  407.                 CP (HL)
  408.                 JR NZ,.NOTFOUND
  409.                 CPL
  410.                 DEC HL
  411.                 CP (HL)
  412.                 JR NZ,.NOTFOUND
  413.                 LD BC,0x4177
  414.                 LD A,6
  415.                 OUT (C),A
  416.         PEC_OFF M_SHADOW_BF
  417.                 JP CPU3
  418.  
  419. .NOTFOUND       LD BC,WIN_A3
  420.                 LD A,0xFF
  421.                 OUT (C),A
  422.                 RET
  423.  
  424. BONUADR         binclude ../../mainmenu/cmosset_pack.rom
  425.  
  426.                 DUPL ADR_RST8END-$,0xFF
  427. EDOS2RST8       LD A,L
  428.                 OUT (PEVO_CONF),A
  429.                 POP DE
  430.                 POP HL
  431.                 POP AF
  432.                 JP PO,EDOS2RST01
  433.                 EI
  434. EDOS2RST01      POP BC
  435.                 POP AF
  436.                 EX (SP),HL
  437.                 RET
  438.  
  439. DOS2RST8        EX (SP),HL                      ; HL
  440.                 PUSH AF                         ; AF
  441.                 PUSH BC                         ; BC
  442.                 LD A,R
  443.                 JP PE,.L1
  444.                 LD A,R
  445. .L1             DI
  446.                 PUSH AF                         ; RF
  447.                 PUSH HL                         ; ADR_RET
  448.                 PUSH DE                         ; DE
  449.                 IN A,(PEVO_CONF)
  450.                 LD L,A
  451.                 OR M_SHADOW_BF
  452.                 OUT (PEVO_CONF),A
  453.                 LD BC,RD_0WINA0
  454.                 IN H,(C)
  455.                 LD B,HIGH (RD_DOS7FFD)
  456.                 IN E,(C)
  457.                 RES 4,E
  458.                 DEC B
  459.                 IN D,(C)
  460.                 LD BC,WIN_P0
  461.                 XOR A
  462.                 JP ADR_SEL_ROM
  463.  
  464.                 DB 0x3D2D - $ DUP 0xFF
  465.                 OUT (C),A
  466.                 NOP
  467.                 RET
  468.  
  469. DEMO            LD BC,CONF_128
  470.                 LD A,0x10
  471.                 OUT (C),A
  472.                 EI
  473. szdemoini       EQU $ - DEMO
  474.  
  475.                 binclude ../../mainmenu/src/grass.bin
  476.  
  477. LDIR4PROFROM    LD HL,JMP2PROFROM
  478.                 LD DE,JMP2PROFROM + 0x8000
  479.                 LD BC,EJMP2PROFROM - JMP2PROFROM
  480.                 LDIR
  481.                 PUSH BC
  482.                 LD BC,0xBC77
  483.                 LD A,3
  484.                 OUT (C),A
  485.                 LD A,IXH
  486.                 LD BC,WIN_A0
  487.                 OUT (C),A
  488.                 LD BC,0xFF77
  489.                 LD A,0xA3
  490.                 JP JMP2PROFROM + 0x8000
  491.  
  492. JMP2PROFROM     OUT (C),A
  493.                 RET
  494. EJMP2PROFROM   
  495.  
  496. ; 1000 0001 81 0 BASIC 128      | EVO
  497. ; 1000 0011 83 0 BASIC 48       | SERVICE
  498.  
  499. ; 1000 0101 85 1 BASIC 128      | ADDONS
  500. ; 1000 0111 87 1 BASIC 48       | RST8 SERVICE
  501.  
  502. ; 1000 1001 89 2 BASIC 128      | RESERVED
  503. ; 1000 1110 8B 2 BASIC 48       | EVODOS EMUL 3D2F
  504.                                          
  505. ; 1000 1101 8D 3 BASIC 128      | PROFROM 1
  506. ; 1000 1111 8F 3 BASIC 48       | PROFROM 1
  507.                                          
  508. ; 1001 0001 91 4 BASIC 128      | PROFROM 0
  509. ; 1001 0011 93 4 BASIC 48       | PROFROM 0
  510.  
  511. ; 1001 0101 95 5 BASIC 128      | GLUK
  512. ; 1001 0111 97 5 BASIC 48       | GLUK
  513.  
  514. ; 1001 1001 99 6 BASIC 128      | FREE
  515. ; 1001 1011 9B 6 BASIC 48       | FREE
  516.  
  517. ; 1001 1101 9D 7 BASIC 128      | CUSTOM
  518. ; 1001 1111 9F 7 BASIC 48       | CUSTOM
  519.  
  520. ; основная конфигурация по сбросу, изменять категорически не рекомендуется
  521. PAGES_CONF      DB 0xFF,0x7D,0x7A,0x83
  522.                 DB 0xFF,0x7D,0x7A,0x00,0x81
  523.  
  524. ; конфигурация для GLUK
  525. PAGES_CONFGLUK  DB 0xFF,0x7D,0x7A,CONF4GLUK+3
  526.                 DB 0xFF,0x7D,0x7A,0x00,CONF4GLUK+1
  527.  
  528. ; конфигурация для EVO PROFROM
  529. PAGES_PROFROM   DB 0xFF,0x7D,0x7A,CONF4PROF+3
  530.                 DB 0xFF,0x7D,0x7A,0x00,CONF4PROF+1
  531.  
  532. ; конфигурация для отдельно прошиваемой 64к прошивки (USER ROM)
  533. PAGES_CUSTOM    DB 0xFF,0x7D,0x7A,CONF4CUSTOM+3
  534.                 DB 0xFF,0x7D,0x7A,0x00,CONF4CUSTOM+1
  535.  
  536. ; палитра для spectrum режима
  537. TRSTPAL
  538.                 DB (M_R_H | M_R_L | M_G_H | M_G_L | M_B_H | M_B_L) ! 0xF3       ; 00
  539.                 DB (M_R_H | M_R_L | M_G_H | M_G_L                ) ! 0xF3       ; 21
  540.                 DB (                M_G_H | M_G_L | M_B_H | M_B_L) ! 0xF3       ; 42
  541.                 DB (                M_G_H | M_G_L                ) ! 0xF3       ; 63
  542.                 DB (M_R_H | M_R_L |                 M_B_H | M_B_L) ! 0xF3       ; 90
  543.                 DB (M_R_H | M_R_L                                ) ! 0xF3       ; B1
  544.                 DB (                                M_B_H | M_B_L) ! 0xF3       ; D2
  545.                 DB BLACK                                           ! 0xF3       ; F3
  546.                 DB (M_R_H |         M_G_H |         M_B_H        ) ! 0xF3       ; E0
  547.                 DB (M_R_H |         M_G_H                        ) ! 0xF3       ; E1
  548.                 DB (                M_G_H |         M_B_H        ) ! 0xF3       ; E2
  549.                 DB (                M_G_H                        ) ! 0xF3       ; E3
  550.                 DB (M_R_H |                         M_B_H        ) ! 0xF3       ; F0
  551.                 DB (M_R_H)                                         ! 0xF3       ; F1
  552.                 DB (                                M_B_H        ) ! 0xF3       ; F2
  553.                 DB BLACK                                           ! 0xF3       ; F3
  554.  
  555.                 DUPL 0x3FF8 - $,0xFF
  556.                 DB "HEGLUK"
  557.                 DW DATA_VERS
  558.