Subversion Repositories pentevo

Rev

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

  1.  
  2. ; LAST UPDATE: 25.11.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.                 CALL CMP_REZIDENT               ; проверка резидента
  222.                 LD BC,0xFEFF
  223. RSTKEYS1        LD A,B
  224.                 IN A,(0xFE)
  225.         REPT 5
  226.                 RRA
  227.                 JR C,$+3
  228.                 INC C
  229.         ENDM
  230.                 RLC B
  231.                 JR C,RSTKEYS1
  232.                 DEC C
  233.                 JP P,GTSTKEY                    ; нажато более 1 кнопки, переходим к тесту клавиатуры
  234.                 LD IXL,0                        ; запуск неосновной прошивки сервиса
  235.                 LD DE,0                         ; 1 нажата, проверяем что это
  236.                 LD BC,CONF_128
  237.                 PUSH DE                         ; адрес перехода в пзу если выбрано
  238.                 LD A,0xFE
  239.                 IN A,(0xFE)                     ; чтение нажатости кнопки "CS"
  240.                 RRA
  241.                 LD A,0
  242.                 JP NC,START_SELECT              ; при нажатой "CS" переходим в бейсик 128
  243.                 LD A,0x7F
  244.                 IN A,(0xFE)                     ; чтение нажатости кнопки "SS"
  245.                 LD D,A
  246.                 RRA
  247.                 RRA
  248.                 LD A,0x30
  249.                 JP NC,START_SELECT              ; при нажатой "SS" переходим в бейсик 48
  250.                 LD A,D
  251.                 RRA                             ; проверка нажатости кнопки "SPACE"
  252.                 JR C,CMPCFG1                    ; переходим далее если ничего не нажато
  253.                 LD A,0x10
  254.                 LD DE,0x3D2F
  255.                 PUSH DE
  256.                 JP START_SELECT                 ; при нажатой "SPACE" переходим в TR-DOS
  257.  
  258. CMPCFG1         LD A,0xFD
  259.                 IN A,(0xFE)
  260.                 AND 4                           ; нажато "D" запуск демки
  261.                 JP Z,GDEMO
  262.                 LD IXL,1                        ; запуск основной прошивки сервиса
  263.                 LD HL,DEPKADR                   ; ничего не нажато, запускаем основную прошивку
  264.                 LD SP,HL
  265.                 EX DE,HL
  266.                 LD HL,CMPCFG3
  267.                 PUSH HL
  268.                 LD HL,0x0101
  269.                 PUSH HL
  270.                 LD BC,WIN_A0
  271.                 LD A,ROM_MAINMENU
  272.                 JP ADR_SEL_ROM
  273.  
  274. CMPCFG3         XOR A
  275.                 IN A,(0xFE)
  276.                 CPL
  277.                 AND 0x1F
  278.                 LD A,0x10
  279.                 JR NZ,CMOSHELP
  280.                 LD HL,0x6000
  281.                 PUSH HL
  282.                 JR START_SELECT
  283.  
  284. GTSTKEY         SCF
  285.                 LD A,0x10
  286. CMOSHELP        LD HL,BONUADR                   ; CMOS setup & HELP
  287.                 LD DE,0x6000                    ; распаковка и запуск CMOS SETUP
  288.                 PUSH DE
  289.                 PUSH AF
  290.                 CALL DEC40
  291.                 POP AF
  292.                 JR START_SELECT
  293.  
  294. GDEMO           LD HL,0x6000-szdemoini
  295.                 LD SP,HL
  296.                 EX DE,HL
  297.                 PUSH DE
  298.                 LD HL,DEMO
  299.                 LD B,3
  300.                 LDIR
  301. START_SELECT    EX AF,AF'                       ; сохранение А и флагов
  302.                 LD HL,ERAM_CODE-1
  303.                 LD DE,0x5C80
  304.                 LD BC,ERAM_CODE-RAM_CODE
  305.                 LDDR
  306.                 EX DE,HL
  307.                 INC HL
  308.                 EXX
  309.                 LD A,IXL
  310.                 AND A
  311.                 LD D,0xA3
  312.                 JR NZ,SET_MODE3
  313.                 LD H,CMOS_BYTE_00
  314.                 CALL READCMOS
  315.                 AND M_TURBO14
  316.         REPT 4
  317.                 RRCA
  318.         ENDM
  319.                 OR D
  320.                 LD D,A                          ; установка для 14МГЦ
  321. SET_MODE3       LD H,CMOS_BYTE_01
  322.                 CALL READCMOS
  323.                 LD E,A                          ; установка для 7.0/3.5МГЦ и модель памяти
  324.         PEC_OFF M_SHADOW_BF
  325.                 EXX
  326. CMPCFG2         JP (HL)
  327.  
  328. RAM_CODE        EXX
  329.                 LD BC,PENT_CONF
  330.                 LD A,IXL
  331.                 AND A
  332.                 LD A,0x10
  333.                 JR NZ,SET_MODE2
  334.                 LD A,E
  335.                 AND 3
  336.                 LD L,0
  337.                 JR Z,SET_MODE1
  338.                 LD L,4
  339. SET_MODE1       LD A,E
  340.                 AND M_TURBO357
  341.         REPT 3
  342.                 RRCA
  343.         ENDM
  344.                 OR L
  345.                 BIT 3,D
  346.                 JR Z,SET_MODE2
  347.                 SET 4,A
  348. SET_MODE2       OUT (C),A
  349.                 LD BC,CONF_128
  350.                 XOR A
  351.                 OUT (C),A                       ; включили маппер 0
  352.         PEC_ON M_SHADOW_BF
  353.                 LD BC,WIN_A0
  354.                 LD A,IXH
  355.                 OUT (C),A                       ; запрограммировали ROM для маппер 0
  356.                 LD BC,0xFF77
  357.                 OUT (C),D                       ; выставили турбо в зависимости от установок
  358.         PEC_OFF M_SHADOW_BF
  359.                 EX AF,AF'
  360.                 LD BC,CONF_128
  361.                 OUT (C),A                       ; включили маппер 1
  362.                 RET
  363. ERAM_CODE
  364.  
  365. ; на входе:  H - адрес ячейки
  366. ; на выходе: L,A - прочитанное значение
  367. READCMOS        PUSH BC
  368.                 LD BC,CMOSD_SET_ADR
  369.                 OUT (C),H
  370.                 LD B,HIGH (CMOSD_RD_WR)
  371.                 IN L,(C)
  372.                 LD A,L
  373.                 POP BC
  374.                 RET
  375.  
  376. ; сброс включенного резидента
  377. RES_REZIDENT    PUSH AF
  378.                 PUSH HL
  379.                 LD H,CMOS_BYTE_01
  380.                 CALL READCMOS
  381.                 RES B_REZIDENT,L
  382.         RST8 _CMOS_RW,_WRITE_CMOS
  383.                 POP HL
  384.                 POP AF
  385.                 RET
  386.  
  387. ; для резидента HONEY COMANDER
  388. CMP_REZIDENT    LD H,CMOS_BYTE_01
  389.                 CALL READCMOS
  390.                 AND M_REZIDENT
  391.                 RET Z
  392.                 LD BC,WIN_A3
  393.                 LD A,0x1F ! 0x7F
  394.                 OUT (C),A
  395.                 LD HL,CPU3
  396.                 LD A,(HL)
  397.                 CP 0xC3
  398.                 JR NZ,.NOTFOUND
  399.                 XOR A
  400. .NEXTBYTE       ADD A,(HL)
  401.                 ADC A,0
  402.                 INC HL
  403.                 BIT 7,H
  404.                 JR NZ,.NEXTBYTE
  405.                 DEC A
  406.                 JR NZ,.NOTFOUND
  407.                 LD A,0xAA
  408.                 DEC HL
  409.                 CP (HL)
  410.                 JR NZ,.NOTFOUND
  411.                 CPL
  412.                 DEC HL
  413.                 CP (HL)
  414.                 JR NZ,.NOTFOUND
  415.                 LD BC,0x4177
  416.                 LD A,6
  417.                 OUT (C),A
  418.         PEC_OFF M_SHADOW_BF
  419.                 JP CPU3
  420.  
  421. .NOTFOUND       LD BC,WIN_A3
  422.                 LD A,0xFF
  423.                 OUT (C),A
  424.                 RET
  425.  
  426. BONUADR         binclude ../../mainmenu/cmosset_pack.rom
  427.  
  428.                 DUPL ADR_RST8END-$,0xFF
  429. EDOS2RST8       LD A,L
  430.                 OUT (PEVO_CONF),A
  431.                 POP DE
  432.                 POP HL
  433.                 POP AF
  434.                 JP PO,EDOS2RST01
  435.                 EI
  436. EDOS2RST01      POP BC
  437.                 POP AF
  438.                 EX (SP),HL
  439.                 RET
  440.  
  441. DOS2RST8        EX (SP),HL                      ; HL
  442.                 PUSH AF                         ; AF
  443.                 PUSH BC                         ; BC
  444.                 LD A,R
  445.                 JP PE,DOS2RST8_01
  446.                 LD A,R
  447. DOS2RST8_01     DI
  448.                 PUSH AF                         ; RF
  449.                 PUSH HL                         ; ADR_RET
  450.                 PUSH DE                         ; DE
  451.                 IN A,(PEVO_CONF)
  452.                 LD L,A
  453.                 OR M_SHADOW_BF
  454.                 OUT (PEVO_CONF),A
  455.                 LD BC,RD_0WINA0
  456.                 IN H,(C)
  457.                 LD B,HIGH (RD_DOS7FFD)
  458.                 IN E,(C)
  459.                 RES 4,E
  460.                 DEC B
  461.                 IN D,(C)
  462.                 LD BC,WIN_P0
  463.                 XOR A
  464.                 JP ADR_SEL_ROM
  465.  
  466.                 DUPL 0x3D2D - $,0xFF
  467.                 OUT (C),A
  468.                 NOP
  469.                 RET
  470.  
  471. DEMO            LD BC,CONF_128
  472.                 LD A,0x10
  473.                 OUT (C),A
  474.                 EI
  475. szdemoini       EQU $ - DEMO
  476.  
  477.                 binclude ../../mainmenu/src/grass.bin
  478.  
  479. LDIR4PROFROM    LD HL,JMP2PROFROM
  480.                 LD DE,JMP2PROFROM+0x8000
  481.                 LD BC,EJMP2PROFROM-JMP2PROFROM
  482.                 LDIR
  483.                 PUSH BC
  484.                 LD BC,0xBC77
  485.                 LD A,3
  486.                 OUT (C),A
  487.                 LD A,IXH
  488.                 LD BC,WIN_A0
  489.                 OUT (C),A
  490.                 LD BC,0xFF77
  491.                 LD A,0xA3
  492.                 JP JMP2PROFROM+0x8000
  493.  
  494. JMP2PROFROM     OUT (C),A
  495.                 RET
  496. EJMP2PROFROM   
  497.  
  498. SET_MAPPER     
  499.                 RET
  500.  
  501. ; 1000 0001 81 0 BASIC 128      | EVO
  502. ; 1000 0011 83 0 BASIC 48       | SERVICE
  503.  
  504. ; 1000 0101 85 1 BASIC 128      | ADDONS
  505. ; 1000 0111 87 1 BASIC 48       | RST8 SERVICE
  506.  
  507. ; 1000 1001 89 2 BASIC 128      | RESERVED
  508. ; 1000 1110 8B 2 BASIC 48       | EVODOS EMUL 3D2F
  509.                                          
  510. ; 1000 1101 8D 3 BASIC 128      | PROFROM 1
  511. ; 1000 1111 8F 3 BASIC 48       | PROFROM 1
  512.                                          
  513. ; 1001 0001 91 4 BASIC 128      | PROFROM 0
  514. ; 1001 0011 93 4 BASIC 48       | PROFROM 0
  515.  
  516. ; 1001 0101 95 5 BASIC 128      | GLUK
  517. ; 1001 0111 97 5 BASIC 48       | GLUK
  518.  
  519. ; 1001 1001 99 6 BASIC 128      | FREE
  520. ; 1001 1011 9B 6 BASIC 48       | FREE
  521.  
  522. ; 1001 1101 9D 7 BASIC 128      | CUSTOM
  523. ; 1001 1111 9F 7 BASIC 48       | CUSTOM
  524.  
  525. ; основная конфигурация по сбросу, изменять категорически не рекомендуется
  526. PAGES_CONF      DB 0xFF,0x7D,0x7A,0x83
  527.                 DB 0xFF,0x7D,0x7A,0x00,0x81
  528.  
  529. ; конфигурация для GLUK
  530. PAGES_CONFGLUK  DB 0xFF,0x7D,0x7A,CONF4GLUK+3
  531.                 DB 0xFF,0x7D,0x7A,0x00,CONF4GLUK+1
  532.  
  533. ; конфигурация для EVO PROFROM
  534. PAGES_PROFROM   DB 0xFF,0x7D,0x7A,CONF4PROF+3
  535.                 DB 0xFF,0x7D,0x7A,0x00,CONF4PROF+1
  536.  
  537. ; конфигурация для отдельно прошиваемой 64к прошивки (USER ROM)
  538. PAGES_CUSTOM    DB 0xFF,0x7D,0x7A,CONF4CUSTOM+3
  539.                 DB 0xFF,0x7D,0x7A,0x00,CONF4CUSTOM+1
  540.  
  541. ; палитра для spectrum режима
  542. TRSTPAL
  543.                 DB (M_R_H | M_R_L | M_G_H | M_G_L | M_B_H | M_B_L) ! 0xF3       ; 00
  544.                 DB (M_R_H | M_R_L | M_G_H | M_G_L                ) ! 0xF3       ; 21
  545.                 DB (                M_G_H | M_G_L | M_B_H | M_B_L) ! 0xF3       ; 42
  546.                 DB (                M_G_H | M_G_L                ) ! 0xF3       ; 63
  547.                 DB (M_R_H | M_R_L |                 M_B_H | M_B_L) ! 0xF3       ; 90
  548.                 DB (M_R_H | M_R_L                                ) ! 0xF3       ; B1
  549.                 DB (                                M_B_H | M_B_L) ! 0xF3       ; D2
  550.                 DB BLACK                                           ! 0xF3       ; F3
  551.                 DB (M_R_H |         M_G_H |         M_B_H        ) ! 0xF3       ; E0
  552.                 DB (M_R_H |         M_G_H                        ) ! 0xF3       ; E1
  553.                 DB (                M_G_H |         M_B_H        ) ! 0xF3       ; E2
  554.                 DB (                M_G_H                        ) ! 0xF3       ; E3
  555.                 DB (M_R_H |                         M_B_H        ) ! 0xF3       ; F0
  556.                 DB (M_R_H)                                         ! 0xF3       ; F1
  557.                 DB (                                M_B_H        ) ! 0xF3       ; F2
  558.                 DB BLACK                                           ! 0xF3       ; F3
  559.  
  560.                 DUPL 0x3FF8 - $,0xFF
  561.                 DB "HEGLUK"
  562.                 DW DATA_VERS
  563.