Subversion Repositories pentevo

Rev

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

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