Subversion Repositories pentevo

Rev

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

  1.  
  2. ; LAST UPDATE: 18.10.2023 savelij
  3.  
  4.                 include ../../macros.a80
  5.                 include ../../global_vars.a80
  6.  
  7.                 include all_vars.a80
  8.  
  9. VERSBIOS        EQU "1.07.15pe"
  10.  
  11.                 ORG 0
  12.                 DI
  13.                 JP $;H_INIT
  14.  
  15. PM_RUN_4000     OUT (C),E
  16.  
  17.                 DUPL 8-$,0
  18.                 JP RST8
  19.  
  20.                 DUPL 0X0C-$,0
  21.                 JP PENTEVO_START
  22.  
  23.                 DUPL 0X14-$,0
  24.                 OUT (C),A
  25.                 NOP
  26.                 RET
  27.  
  28.                 DUPL 0X18-$,0
  29.                 DI
  30.                 PUSH BC
  31.                 LD B,(IX-_MEMDSP)
  32.                 JP SET_PG
  33.  
  34.                 DUPL 0X20-$,0
  35.                 JP CONOUT
  36.  
  37.                 DUPL 0X38-$,0
  38.                 JP DO_INT
  39.  
  40. PAL_MN          DB 0XFF,0XEC,0XBD,0X8D,0X0C,0XFF,0XEC,0XCF,0X4C,0XCC,0X6F,0X4E,0XBD,0X9C,0X2D,0X0C
  41.  
  42. ; CONVERT PAGE NUMBER
  43. ED_PG           ADD A,6
  44.                 RET
  45.  
  46. ; SET PAGE NUMBER
  47. SET_PG  LD (MEMDSP),A
  48.                 PUSH BC
  49.                 CPL
  50.                 LD BC,WIN_P3
  51.                 OUT (C),A
  52.                 POP AF
  53.                 POP BC
  54.                 RET
  55.  
  56. ENTRY:  LD      SP,SYS_SP       ; MUST BE CPSYS
  57.         IM      1
  58.         LD      HL,(TST_1RUN)
  59.         LD      DE,55AAH
  60.         XOR A
  61.         SBC     HL,DE
  62.         LD (TST_1RUN),DE
  63.         JR Z,ALL_INIT
  64.         LD (IX-_TST_IS1),-1
  65. ALL_INIT        LD A,0X11
  66.         CALL    C_INIT
  67.         CALL    M_INIT
  68.                 LD A,0X11
  69.         CALL    C_INIT
  70.         CALL    M_INIT
  71.                 LD A,0X55
  72.                 IN A,(0XFE)
  73.                 LD A,1
  74.                 IN A,(0XFE)
  75.                 LD A,0X55
  76.                 IN A,(0XFE)
  77.                 LD A,8
  78.                 IN A,(0XFE)
  79.                 XOR A
  80.                 IN A,(0XFE)
  81.                 EI
  82.                 LD HL,PAL_MN
  83.                 CALL SP_DIR
  84.                 LD    SP,0B000H
  85.                 LD A,3
  86.                 RST 0X18
  87. ;---------------------------------
  88. ; MAIN MENU MANAGER.
  89. ;
  90. ; IN:  A - 1 FOR RU7, 0 FOR RU5
  91. ;      E - IBMPC KEYBOARD LOCKS STATUS
  92. ; OUT: A - SELECTION (0-CP/M,1-TR-DOS,2-S128,3-S48)
  93. ;      D - 1 FOR 'TURBO' MODE, 0 IN OTHER CASE
  94. ;      E - IBMPC KEYBOARD LOCKS STATUS
  95. ;      L - 1 FOR IMBPC KEYBOARD, 0 FOR SPECTRUM KEYBOARD
  96.                 LD E,(IX-_KS_SHIFTS)
  97.                 DI
  98.                 XOR A
  99.                 LD DE,0X100
  100.                 PUSH AF
  101.                 LD IX,IX_BASE
  102.                 LD (IX-_KS_SHIFTS),E
  103.                 DEC D
  104.                 JR NZ,_NO_TUR
  105.                 SET 3,(IX-_SYS_P)
  106. _NO_TUR         LD A,0X55
  107.                 IN A,(0XFE)
  108.                 LD A,8
  109.                 IN A,(0XFE)
  110.                 LD A,0X8A
  111.                 IN A,(0XFE)
  112.                 LD A,0X55
  113.                 IN A,(0XFE)
  114.                 LD A,1
  115.                 IN A,(0XFE)
  116.                 EX AF,AF'
  117.                 LD A,0X55
  118.                 IN A,(0XFE)
  119.                 LD A,8
  120.                 IN A,(0XFE)
  121.                 XOR A
  122.                 IN A,(0XFE)
  123.                 EX AF,AF'
  124.                 CP 0X0A
  125.                 JR NC,ALLINIT2
  126.                 LD A,0X55
  127.                 IN A,(0XFE)
  128.                 LD A,7
  129.                 IN A,(0XFE)
  130.                 LD HL,IBMKEYB_T
  131.                 JR ALLINIT3
  132.  
  133. ALLINIT2        LD HL,SPKEYB_T
  134. ALLINIT3        LD DE,KEYBOARD
  135.                 LD BC,6*3
  136.                 DI
  137.                 LDIR
  138.                 EI
  139.                 LD A,3
  140.                 RST 0X18
  141.                 CALL SP_DEF
  142.                 POP AF
  143.                 CALL CI_INIT
  144.                 LD SP,SYS_SP
  145.                 CALL PRN
  146.                 DB 0X1B,0X5F,0
  147.                 CALL MEM_SIZE
  148.                 CALL CPM_LOAD
  149.                 CALL CFG_LOAD
  150.                 JP ENTR1
  151.  
  152. DO_INT          PUSH AF                 ; TEST TRDOS ACTIVITY
  153.        PUSH BC
  154.        PUSH DE
  155.        PUSH HL
  156.        EX   AF,AF'
  157.       EXX
  158.       PUSH AF
  159.       PUSH BC
  160.       PUSH DE
  161.       PUSH HL
  162.       PUSH IX
  163.       LD   IX,IX_BASE
  164.       LD   A,1
  165.       RST  18H
  166.       PUSH AF
  167.       LD   HL,TIME_C
  168.       LD   B,4
  169. TM_L:  INC  (HL)
  170.       INC  HL
  171.       JR   NZ,TM_DN
  172.       DJNZ TM_L
  173. TM_DN: CALL CUR_IN
  174.                 CALL KEYBOARD
  175.       POP  AF
  176.       RST  18H
  177.       POP  IX
  178.       POP  HL
  179.       POP  DE
  180.       POP  BC
  181.       POP  AF
  182.       EXX
  183.       EX   AF,AF'
  184.        POP  HL
  185.        POP  DE
  186.        POP  BC
  187.        POP  AF
  188.        EI
  189.        RET
  190.  
  191. ;---------------------------
  192. ; MULTYPLEXOR CALL
  193. ;
  194. DO_MUX: EI
  195.         PUSH HL
  196.         PUSH DE
  197.         PUSH AF
  198.         LD   A,MUX_LNG-1
  199.         CP   C
  200.         JR   NC,MUX_OK
  201.         POP  AF
  202.         LD   A,0FFH
  203.         POP  DE
  204.         POP  HL
  205.         RET
  206.  
  207. MUX_OK: LD   A,C
  208.         LD   HL,MUX_TBL
  209.         CALL _IND
  210.         POP  AF
  211.         POP  DE
  212.         EX   (SP),HL
  213.         RET
  214.  
  215. MUX_TBL         DW R_VER
  216.                 DW CPM_L
  217.                 DW SET_RST              ; FUNC 0,1,2
  218.                 DW READA_KNW            ; (3) READ KEY (NO WAIT) (SEE SCANKEY)
  219.                 DW KB_TYP               ; (4) READ KEYB TYPE (L) & FLAGS (D)
  220.                 DW G_TIME               ; (5) GET CURRENT TIME
  221.                 DW WR_FE                ; (6) WRITE TO 'FE' PORT
  222.                 DW ADR_FE
  223.                 DW WR_SYS
  224.                 DW ADR_SYS
  225.                 DW PAGE_MAN
  226. ;         DW ADR_FE             ; (7) GET ADDRESS & DEFAULT OF 'FE' PORT
  227. ;         DW WR_SYS             ; (8) WRITE TO SYS PORT ('TON' & 'TNAB' BITS)
  228. ;         DW ADR_SYS            ; (9) GET ADDRESS & DEFAULT OF SYS PORT
  229.          ;!!!!!!!!!!!!!!!!!!!!!!!
  230. ;         DW TST_RT     ; RET HL & RTIME
  231. ;         DW SIGN       ; D - CONST
  232.                         ; RET - HL
  233.          ;!!!!!!!!!!!!!!!!!!!!!!!
  234. MUX_LNG  EQU ($-MUX_TBL)/2
  235.  
  236.  
  237. R_VER:  LD      HL,107H ; MUX FUNC 0 - GET VERSION (HL-VERSION)
  238.                 LD DE,-1
  239.         XOR     A
  240.         RET
  241.  
  242. CPM_L:  LD      BC,1600H; MUX FUNC 1 - LOAD CPM IMAGE
  243.         CALL    CPM_L1
  244.         XOR     A
  245.         RET
  246.  
  247. SET_RST:LD      DE,(ENT_ADR)    ; MUX FUNC 2 - SET RESTART ADRESS
  248.         LD      (ENT_ADR),HL    ; HL - ADRESS FOR RESTART (RET IN HL OLD)
  249.         EX      DE,HL
  250.         XOR     A
  251.         RET
  252.  
  253. G_TIME: LD      DE,(TIME_C)     ; MUX FUNC 5 - GET TIME INTO HL:DE
  254.         LD      HL,(TIME_C+2)
  255.         XOR     A
  256.         RET
  257.  
  258. ADR_SYS
  259. WR_SYS
  260. ADR_FE
  261. WR_FE
  262. ERR_FF  LD A,0XFF
  263.         RET
  264.  
  265. CHK_SUM
  266. ;               IF HACK_RBIOS=0
  267. ;               LD HL,0XC000
  268. ;               ELSE
  269.                 RET
  270.                 DW 0XC000
  271. ;               ENDIF
  272.                 XOR A
  273. CS_LP           ADD A,(HL)
  274.                 ADC A,0
  275.                 INC HL
  276.                 BIT 7,H
  277.                 JR NZ,CS_LP
  278.                 DEC A
  279.                 RET Z
  280.                 JP PROT
  281.  
  282. ;---------------------------------------
  283. ; PAGE MANIPULATION
  284. PAGE_MAN        LD A,E
  285.                 CP 7
  286.                 JR Z,PM_TST_RU5
  287.                 JR NC,PM_ERR_1
  288. PM_2            LD (TMP_W),HL
  289.                 LD HL,PM_ROM_TAB
  290.                 CP 4
  291.                 JR NC,PM_1
  292.                 LD HL,PM_RAM_RU5
  293.                 BIT 0,(IX-_FLAG)
  294.                 JR NZ,PM_1
  295.                 LD HL,PM_RAM_RU7
  296. PM_1            BIT 0,A
  297.                 JR Z,PM_3
  298.                 LD A,6
  299.                 CALL ADD_HL_A
  300. PM_3            LD A,B
  301.                 CALL _VJMP
  302.                 DB 4
  303.                 DW ERR_FF
  304.                 DW PM_GET_INF
  305.                 DW PM_SET_PG
  306.                 DW PM_GO
  307. PM_TST_RU5      BIT 0,(IX-_FLAG)
  308.                 JR Z,PM_2
  309. PM_ERR_1        LD A,1
  310.                 RET
  311.  
  312. PM_ERR_2        LD A,2
  313.                 RET
  314.  
  315. PM_ERR_3        LD A,3
  316.                 RET
  317.  
  318. PM_GET_INF      LD A,D
  319.                 CP 6
  320.                 JR NC,PM_ERR_2
  321.                 CALL ADD_HL_A
  322.                 LD D,(HL)
  323.                 XOR A
  324.                 RET
  325.  
  326. PM_GO           LD A,D
  327.                 PUSH HL
  328.                 POP IY
  329.                 INC HL
  330.                 EXX
  331.                 LD HL,PM_GO_TAB
  332.                 CP 3
  333.                 JR NC,PM_ERR_3
  334.                 CALL _IND
  335.                 LD DE,4004H
  336.                 LD BC,32-4
  337.                 LDIR
  338.                 LD E,(IX-_SYS_P)
  339.                 DI
  340.                 IM 0
  341.                 LD BC,0C077H
  342.                 XOR A
  343.                 OUT (C),A
  344.                 LD BC,CONF_128
  345.                 OUT (C),A
  346.                 LD A,(IY+4)
  347.                 RCALL PM_SET
  348.                 LD A,10H
  349.                 LD BC,CONF_128
  350.                 OUT (C),A
  351.                 LD A,(IY+0)
  352.                 RCALL PM_SET
  353.                 LD BC,0C077H
  354.                 LD A,6
  355.                 OUT (C),A
  356.                 LD A,(IY+5)
  357.                 RCALL PM_SET
  358.                 XOR A
  359.                 LD BC,CONF_128
  360.                 OUT (C),A
  361.                 LD A,(IY+5)
  362.                 RCALL PM_SET
  363.                 LD BC,0FF77H
  364.                 LD A,E
  365.                 AND 0F8H
  366.                 OR 3
  367.                 LD E,A
  368.                 JP PM_RUN_4000
  369.  
  370. PM_SET          EXX
  371.                 LD E,L
  372.                 LD D,H
  373.                 LD BC,0F7H
  374.                 JR PM_S_1
  375.  
  376. PAGE_L1         LD A,(DE)
  377.                 INC DE
  378. PM_S_1          XOR 80H
  379.                 CPL
  380.                 OUT (C),A
  381.                 LD A,B
  382.                 ADD A,40H
  383.                 LD B, A
  384.                 JR NC,PAGE_L1
  385.                 EXX
  386.                 RET
  387.  
  388. MON_IMG         include mon.a80
  389.  
  390. CH1:            ; EDISK  RU7
  391.                 DB 0XFF         ;0FFH    ;+ ПРИЗНАК ДЕЙСТВИТЕЛЬНОСТИ
  392.                 DB 4            ;2       ;+ КОД УСТРОЙСТВА
  393.                 DB 0            ;0       ;+ НОМЕР ПРИВОДА
  394.                 DB 0            ;1       ;- КОД ПРИВОДА
  395.                 DB 5            ;1       ;+ ЧИСЛО ФИКСИРОВАННЫХ ГОЛОВОК
  396.                 DB 0            ;0       ;+ ЧИСЛО СМЕННЫХ ГОЛОВОК
  397.                 DW 0X96         ;1AH     ;+ ЧИСЛО ЦИЛИНДРОВ НА ДИСКЕ
  398.                 DB 0X11         ;128     ;+ ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ
  399.                 DW 0X200        ;128     ;+ ЧИСЛО БАЙТОВ В СЕКТОРЕ
  400.                 DB 1            ;1       ;+ ЧИСЛО СИСТЕМНЫХ ДОРОЖЕК
  401.                 DW 0            ;0       ;+ НОМЕР НАЧАЛЬНОГО ЦИЛИНДРА
  402.                 DW 0XC5E4       ;3328    ;+ ЧИСЛО БЛОКОВ НА ДИСКЕ
  403.                 DW 0X44         ;128     ;+ ЧИСЛО БЛОКОВ НА ДОРОЖКЕ
  404.                 DW 0X2EE        ;1AH     ;+ ЧИСЛО ДОРОЖЕК НА ДИСКЕ
  405.                 DB 8            ;8       ;+ ДЛИНА НОМЕРА БЛОКА В СЕКТОРЕ
  406.                 DW 0X80         ;128     ;+ ЧИСЛО ЗАПИСЕЙ В ДИРЕКТОРИИ
  407.                 DB 2
  408.                 DB 2
  409.                 DB 2
  410.                 DW 0
  411.                 DB 0XFF
  412.                 DB 2
  413.                 DB 0X50
  414.                 DW 0X50
  415.                 DW 0
  416.  
  417. CH1_5:          ; EDISK RU5 (ROM)
  418.         DB      0FFH    ;+ ПРИЗНАК ДЕЙСТВИТЕЛЬНОСТИ
  419.         DB      2       ;+ КОД УСТРОЙСТВА
  420.         DB      0       ;+ НОМЕР ПРИВОДА
  421.         DB      1       ;- КОД ПРИВОДА
  422.         DB      1       ;+ ЧИСЛО ФИКСИРОВАННЫХ ГОЛОВОК
  423.         DB      0       ;+ ЧИСЛО СМЕННЫХ ГОЛОВОК
  424.                 DW              160             ;3H      ;+ ЧИСЛО ЦИЛИНДРОВ НА ДИСКЕ
  425.         DB      16      ;+ ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ
  426.         DW      256     ;+ ЧИСЛО БАЙТОВ В СЕКТОРЕ
  427.         DB      2       ;+ ЧИСЛО СИСТЕМНЫХ ДОРОЖЕК
  428.         DW      0       ;+ НОМЕР НАЧАЛЬНОГО ЦИЛИНДРА
  429.                 DW              5120    ;     384     ;+ ЧИСЛО БЛОКОВ НА ДИСКЕ
  430.         DW      32     ;+ ЧИСЛО БЛОКОВ НА ДОРОЖКЕ
  431.                 DW              160             ;3H      ;+ ЧИСЛО ДОРОЖЕК НА ДИСКЕ
  432.         DB      8       ;+ ДЛИНА НОМЕРА БЛОКА В СЕКТОРЕ
  433.         DW      128     ;+ ЧИСЛО ЗАПИСЕЙ В ДИРЕКТОРИИ
  434.  
  435.                 include conio.a80
  436.                 include scankey.a80
  437.                 include textio.a80
  438.                 include hex.a80
  439.                 include disk.a80
  440.                 include fdc_wd.a80
  441.                 include ed_drv.a80
  442.                 include hddrv.a80
  443.                 include config.a80
  444.  
  445. CPM_IMG         binclude cpm.img
  446.                 include bios.a80
  447. CPM_SIZE        EQU $-CPM_IMG
  448.  
  449. VAR1_I
  450. ;          IN VALUE
  451. RQCHAN_         DB 0            ;       DM      RQCHAN   1       ;НОМЕР КАНАЛА
  452. RQCOM_          DB 0            ;       DM      RQCOM    1       ;КОМАНДА
  453. RQBLN_          DB 0            ;       DM      RQBLN    1       ;ЧИСЛО БЛОКОВ
  454. RQTRACK_        DW 0            ;       DM      RQTRACK  2       ;НОМЕР ДОРОЖКИ
  455. RQBLOCK_        DW 0X4F00       ;       DM      RQBLOCK  2       ;НОМЕР БЛОКА
  456. RQBADR_         DW 0X18         ;       DM      RQBADR   2       ;БУФЕР ПОЛЬЗОВАТЕЛЯ
  457.  
  458. ;          WORK VALUE
  459. RQHEAD_         DB 7            ;       DM      RQHEAD   1       ;НОМЕР ГОЛОВКИ
  460. RQCYL_          DW 0            ;       DM      RQCYL    2       ;НОМЕР ЦИЛИНДРА
  461. RQDEV_          DB 0            ;       DM      RQDEV    1       ;КОД УСТРОЙСТВА
  462. LOCBUF_         DW 0            ;       DM      LOCBUF   2       ;АДРЕС БЛОКА В БУФЕРЕ
  463. RQSECT_         DB 7            ;       DM      RQSECT   1       ;НОМЕР СЕКТОРА
  464. ;DM      DCSEGM  2       ;СЕЛЕКТОР СЕГМЕНТА
  465. DCBUF_          DW 0X300        ;       DM      DCBUF    2       ;АДРЕС БУФЕРА
  466. REP_            DB 1            ;       DM      REP      1       ;СЧЕТЧИК ЧИСЛА ПОВТОРОВ
  467.  
  468. ;ПЕРЕМЕННЫЕ КОНТРОЛЕРА ФЛОПОВ
  469. FD_TRKS_        DB 0X0A,7,8,0   ;       DM      FD_TRKS  4       ;НОМЕРА ТЕКУЩИХ ДОРОЖЕК
  470.  
  471. ;БЛОК СОСТОЯНИЯ БУФЕРА
  472. BUFT_           DB 0            ;       DM      BUFT     1               ;НОМЕР КАНАЛА
  473. BUFTRK_         DW 0X1001       ;       DM      BUFTRK   2               ;НОМЕР ДОРОЖКИ
  474. BUFSEC_         DB 0X3F         ;       DM      BUFSEC   1               ;НОМЕР СЕКТОРА
  475.  
  476.                 DB 0XFE,0,0XA6
  477.                 DUPL 0X0C,0
  478.                 DB 0XFF,0X0F,5,0,8,0X60,4,0X3F,0XC9,0,0
  479.  
  480. VAR1_S          EQU $-VAR1_I
  481.  
  482. PALN            DB 0FFH,0FEH,0FDH,0FCH,0EFH,0EEH,0EDH,0ECH,0FFH,0DEH,0BDH,09CH,06FH,04EH,02DH,00CH
  483.  
  484.                 include init.a80
  485.                 include ve31.a80
  486.                 include ci.a80
  487.  
  488.         IF MOMPASS = 1
  489. HZ      EQU $
  490.         ENDIF
  491.  
  492. ;               IF HACK_RBIOS=0
  493. ;               ELSE
  494.         DUPL 0x3E20 - $
  495. WR_MAS_SLA      LD BC,HD_HEAD;0XCF
  496.                 LD A,(IY+2)
  497.                 AND 1
  498.                 RRCA
  499.                 RRCA
  500.                 RRCA
  501.                 RRCA
  502.                 OR 0XA0
  503.                 OUT (C),A
  504.                 LD BC,HD_CYLHI;0XAF
  505.                 RET
  506.  
  507. GET_MAS_SLA     LD C,A
  508.                 LD A,(IY+2)
  509.                 AND 1
  510.                 RRCA
  511.                 RRCA
  512.                 RRCA
  513.                 RRCA
  514.                 OR C
  515.                 LD BC,HD_HEAD;0XCF
  516.                 RET
  517. ;               ENDIF
  518.  
  519.                 DUPL 0X3EFF-$,0
  520. MY_R_ADR:       DEFW  PTST_1
  521.  
  522. PM_ROM_TAB:
  523.         DB      64H,5,2,0,  66H,65H
  524.         DB      64H,5,2,80H,66H,65H
  525. PM_RAM_RU5:
  526.         DB      6,  5,2,0,  6,7
  527.         DB      6,  5,2,80H,6,7
  528. PM_RAM_RU7:
  529.         DB      1CH,5,2,0,  1DH,1EH
  530.         DB      1CH,5,2,80H,1DH,1EH
  531.  
  532. PM_GO_TAB:
  533.         DW      PM_GO_S48
  534.         DW      PM_GO_S128
  535.         DW      PM_GO_TRDOS
  536.  
  537. PM_GO_S48:
  538.         OUT     (C),E
  539.         NOP
  540.         LD      A,30H
  541.         LD      BC,CONF_128
  542.         OUT     (C),A
  543.         RST     0
  544.  
  545. PM_GO_S128:
  546.         OUT     (C),E
  547.         NOP
  548.         XOR     A
  549.         LD      BC,CONF_128
  550.         OUT     (C),A
  551.         RST     0
  552.  
  553. PM_GO_TRDOS:
  554.         OUT     (C),E
  555.         NOP
  556.         LD      BC,CONF_128
  557.         LD      A,30H
  558.         OUT     (C),A
  559.         LD      BC,0
  560.         PUSH    BC
  561.         JP      3D2FH
  562.  
  563. ;               DUPL 0X3FFE-$,0
  564. ;               DB 0XB2
  565.  
  566.         IF MOMPASS = 1
  567. ;       ssss
  568.         ENDIF
  569.  
  570.                 DUPL 0X3FF8-$,0
  571.                 DB "ATMCPM"
  572.                 DW DATA_VERS
  573.