Subversion Repositories pentevo

Rev

Rev 966 | Rev 1041 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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