Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. ;#INCLUDE "ALLVARS.ASH"
  2.  
  3. ;------------------------------------------
  4. ; RESET - RESET DRV. A 0-SCREEN, 1-MODE, 2-FULL RESET
  5. ;
  6. RESET: SUB     2
  7.         JR      NZ,_RET_OK_
  8.         LD      (T_FLAG),A
  9.         LD      (IX-_CUR_VAL),"_"
  10.         LD      HL,41C0H
  11.         LD      (SCR_ADR),HL
  12.         RET
  13.  
  14. ;------------------------------------------
  15. ; OUT_CH -  OUTPUT CHAR.  A - CHAR
  16. ;
  17. _OUT_CH_:EX      AF,AF'
  18.        XOR     A
  19.        EX      AF,AF'
  20.         LD      C,A
  21.         LD      HL,(SCR_ADR)
  22.         BIT     _OVER,(IX-_FLAG1)
  23.         JR      Z,_PUT_CH_
  24.         CP      " "
  25.         JR      Z,SKP_CH
  26.         LD      A," "
  27.         CP      (HL)
  28.         JR      Z,_PUT_CH_
  29.         EX      AF,AF'
  30.        LD      A,CST_OVER
  31.        EX      AF,AF'
  32.         DB      3EH             ; LD A,N (SKIP NEXT COMMAND)
  33. _PUT_CH_: LD      (HL),C
  34. SKP_CH: BIT     _TRANS,(IX-_FLAG1)
  35.         JR      NZ,DONE_CH
  36.         CALL    ATTR_
  37.         LD      A,(COLOR_M)
  38.         LD      (HL),A
  39. DONE_CH:EX      AF,AF'
  40.        RET
  41. ;
  42. ATTR_:  LD      A,H             ; CONVERT SCREEN ADDRESS TO ATTRIBUTE
  43.        OR      0C0H
  44.        JR      ADV_1
  45.  
  46. ;------------------------------------------
  47. ; ADV_POS - ADVANCE POSITION
  48. ;
  49. ADV_POS:LD      HL,(SCR_ADR)
  50.        CALL    ADV
  51.        LD      (SCR_ADR),HL
  52. _RET_OK_: XOR     A
  53.        RET
  54.  
  55. ADV:    LD      A,H
  56. ADV_1:  XOR     20H
  57.        LD      H,A
  58.        AND     20H
  59.        RET     NZ
  60.        INC     HL
  61.        RET
  62.  
  63. ;------------------------------------------
  64. ; GOTO_XY - DIRECT ADDRESSATION. C - X, B - Y
  65. ;
  66. GOTO_XY:CALL    _GOXY__
  67.        LD      (SCR_ADR),HL
  68.        XOR     A
  69.        RET
  70.  
  71. _GOXY__  XOR     A
  72.        LD      H,A
  73.        RRC     C       ; C>>1 & SET CF
  74.        RRA
  75.        RRA
  76.        RRA             ; A IS 20H IF CF
  77.        OR      41H
  78.        LD      L,B     ; HL IS Y
  79.        LD      B,A     ; BC IS (X>>1)+(X&1?2000H:0)+41C0H
  80.        SET     7,C
  81.        SET     6,C
  82.        ADD     HL,HL
  83.        ADD     HL,HL
  84.        ADD     HL,HL
  85.        ADD     HL,HL
  86.        ADD     HL,HL
  87.        ADD     HL,HL   ; Y*=64
  88.        ADD     HL,BC   ; HL IS ADDRESS
  89.        RET
  90.  
  91. ;------------------------------------------
  92. ; CURS_OO - CURSOR TURN ON/OFF. A - CURS STATE
  93. ;
  94. CURS_OO:OR      A
  95.        EX      AF,AF'
  96.         LD      HL,(SCR_ADR)
  97.         BIT     _TF_CURATR,(IX-_T_FLAG) ; IF FLEX ATTRIB...
  98.         CALL    NZ,ATTR_                ;  DEAL WITH ATTRIB ADDRESS
  99.         EX      AF,AF'
  100.        LD      A,(SAV_CUR)             ; CURSOR OFF - RESTORE BUF CONTENTS
  101.        CALL    NZ,CURS_ON
  102.        LD      (HL),A
  103.        XOR     A
  104.        RET
  105.  
  106. CURS_ON:LD      A,(HL)
  107.        LD      (SAV_CUR),A
  108.        LD      A,(CUR_VAL)
  109.        BIT     _TF_CURATR,(IX-_T_FLAG) ; IF NO FLEX ATTRIB...
  110.        RET     Z                       ;  JUMP - SIMPLE PUT
  111.        XOR     (HL)                    ;  ELSE - XOR'ED VALUE
  112.         RET
  113.  
  114. ;------------------------------------------
  115. ; CONV_COL - COLOR CONVERT. B-INK, C-PAPER, A-COLOR
  116. ;
  117. CONV_COL:LD     (COLOR_M),A
  118.         XOR     A
  119.         RET
  120.  
  121. ;------------------------------------------
  122. ; SET_CURS - SET CURSOR SCANS. B-BEG LINE, C-END LINE
  123. ;
  124. SET_CURS:SET    _TF_CURATR,(IX-_T_FLAG) ; PRESUME 'FLEX ATTR' MODE
  125.         LD      A,7
  126.         CP      C
  127.         JR      NZ,SC_1
  128.         CP      B
  129.         LD      A,"_"
  130.         JR      Z,SET_CHR
  131.         INC     B
  132.         DEC     B
  133.         LD      A,3FH
  134.         JR      Z,SET_ATR
  135. SC_1:   BIT     2,B
  136.         LD      A,0X2C+0X80;","+80H       ; ABS CODE OF '▄'
  137.         JR      NZ,SET_CHR
  138.         LD      A,0X2F+0X80;"/"+80H       ; ABS CODE OF '▀'
  139.         BIT     2,C
  140.         JR      Z,SET_CHR
  141.         DEC     A
  142. SET_CHR:RES     _TF_CURATR,(IX-_T_FLAG)
  143. SET_ATR:LD      (CUR_VAL),A
  144.         XOR     A
  145.         RET
  146.  
  147. FF_ERR: LD      A,CS_UNKNO
  148.         RET
  149.  
  150. ;------------------------------------------
  151. ; CIO_MUX - MUX INPUT.  B - FUNC
  152. ;
  153. CIO_MUX:EX      AF,AF'
  154.        LD      A,B
  155.        ;VJMP    <FF_ERR,M_VER,M_CURSC,M_CURSA>
  156.                 CALL _VJMP
  157.                 DB 4
  158.                 DW FF_ERR
  159.                 DW M_VER
  160.                 DW M_CURSC              ; -74=5F4B
  161.                 DW M_CURSA              ; -74=5F4B
  162.  
  163. M_VER:  LD      HL,100H         ; TEXT MODE DRIVER VERSION
  164.        XOR     A
  165.        RET
  166.  
  167. M_CURSC EQU     SET_CHR         ; SET CHAR FROM A FOR CURSOR IMAGE
  168. M_CURSA:SET     _TF_CURATR,(IX-_T_FLAG) ; SET ATTRIB FOR CURSOR IMAGE
  169.        JR      SET_ATR
  170.  
  171.  
  172. ;---- AUX PROC FOR CLR/ROLL PROCS ---------
  173. _SIZE:  LD      C,E     ; SIZE OF SET OF CHARS.
  174.        SRL     C       ; IN E-DX, OUT C-SIZE1, B-SIZE2
  175.        LD      B,C
  176.        RET     NC
  177.        INC     C
  178.        RET
  179.  
  180. _PREP:  EX     AF,AF'   ; CHECK DX&DY, DETERM. SCREEN ADDR, EVALUATE SIZES
  181.         LD      A,CS_ERPAR
  182.         SCF
  183.         INC     D
  184.         DEC     D
  185.         RET     Z
  186.         INC     E
  187.         DEC     E
  188.         RET     Z       ; IF DX OR DY IS 0 - ERROR
  189.         CALL    _GOXY__
  190.         CALL    _SIZE
  191.         EX      AF,AF'
  192.        OR      A
  193.        RET
  194.  
  195. ;----------- ROLL/CLR LOOP ---------------
  196. ;
  197. CLR_ROLL:LD     A,0C3H          ; HL-BUF, BC-SIZES, DE- -SHIFT
  198.        LD      (CL_SW),A      ;  C'-CHAR(IF NEED), B'-LINE COUNT
  199.        EXX
  200. CR_LP:  LD      A,C             ; IS VALUE
  201.        EXX
  202.        OR      A
  203.        CALL    NZ,_CLRMOV
  204.        BIT     _TRANS,(IX-_FLAG1)
  205.        JR      NZ,CR_SC
  206.        PUSH    HL
  207.        EX      AF,AF'
  208.         CALL    ATTR_
  209.         LD      A,(COLOR_M)
  210.         CALL    _CLRMOV
  211.         EX      AF,AF'
  212.        POP     HL
  213. CR_SC:  XOR     A
  214.        SBC     HL,DE
  215.        EXX
  216.        DJNZ    CR_LP
  217.        EXX
  218.        RET
  219.  
  220. _CLRMOV:PUSH    DE
  221.        PUSH    HL
  222.        CALL    CL_SW           ; CALL FIRST PART
  223.        POP     HL
  224.        PUSH    HL
  225.        EX      AF,AF'
  226.         CALL    ADV
  227.         EX      AF,AF'
  228.        CALL    CL_SW           ; CALL SECOND PART
  229.        POP     HL
  230.        POP     DE
  231.        RET
  232.  
  233. ;------------------------------------------
  234. ; CLW_WIND - CLEAR WINDOW. BC-Y1&X1, DE-DY&DX, A-CHAR
  235. ;
  236. CLW_WIND:CALL   _PREP
  237.        RET     C
  238.        LD      E,A
  239.        PUSH    DE
  240.        EXX
  241.        POP     BC      ; B'-DY, C'-CHAR
  242. CLR_:   EXX
  243.        LD      DE,_CLR_ ; FORM 'JP _CLR' COMMAND INTO ED_BUF
  244.        LD      (CL_SW +1),DE
  245.        LD      DE,-64
  246.        CALL    CLR_ROLL
  247.        RET
  248.  
  249. _CLR_:  PUSH    BC
  250.        DEC     C
  251.        JP      M,_CL_DN
  252.        LD      (HL),A
  253.        JR      Z,_CL_DN
  254.        LD      D,H
  255.        LD      E,L
  256.        INC     DE
  257.        LD      B,0
  258.        LDIR
  259. _CL_DN: POP     BC
  260.        LD      E,B
  261.        LD      B,C
  262.        LD      C,E
  263.        RET
  264.  
  265. ;------------------------------------------
  266. ; ROL_WIND - ROLL WINDOW. BC-Y1&X1, DE-DY&DX, A-DIR:
  267. ;                          0-UP,1-DOWN,2-RIGHT,3-LEFT
  268. ;
  269. ROL_WIND:CALL    _PREP
  270.        RET     C       ; HL - ADDR, BC-SIZE 2&1
  271.        CP      2
  272.        JR      NC,ROLL_HOR ; HORIZONTAL ROLL
  273.        RRA
  274.        DEC     D
  275.        JR      Z,ROL_SC; 1 LINE DON'T ROLL
  276.         LD      A,D
  277.         EXX
  278.         LD      B,A     ; B' IS LINE COUNT
  279.         LD      C,1     ; C' NOT ZEROED
  280.         EXX
  281.         LD      DE,_MOVE; FORM 'JP _MOVE' COMMAND INTO ED_BUF
  282.         LD      (CL_SW +1),DE
  283.         LD      DE,-64  ; PRESUME 'ROLL UP'
  284.         JR      NC,IS_UPP ; JUMP IF WAS 'ROLL UP' COMMAND
  285.         EX      DE,HL
  286.         LD      L,A
  287.         LD      H,0
  288.         ADD     HL,HL
  289.         ADD     HL,HL
  290.         ADD     HL,HL
  291.         ADD     HL,HL
  292.         ADD     HL,HL
  293.         ADD     HL,HL   ; .. AND MULTIPLY IT BY 64
  294.         ADD     HL,DE
  295.         LD      DE,64   ; HL -> END OF WINDOW, DE - 64
  296. IS_UPP: PUSH    BC
  297.         CALL    CLR_ROLL
  298.         POP     BC
  299.         EXX
  300. ROL_SC: LD      BC,0X100+0X20;256+" "
  301.         JR      CLR_
  302.  
  303. ROLL_HOR:LD     A,B
  304.         LD      BC,ADV  ; INC PROC IN 'ROLL RIGHT' CASE
  305.         JR      Z,RH_OK
  306.         CALL    ADD_HL_A
  307.         LD      BC,DEG  ; ELSE DEC PROC
  308.         BIT     0,E
  309.         CALL    Z,DEG
  310. RH_OK:  LD      (CL_SW +1),BC
  311.         LD      A,0C3H
  312.         LD      (CL_SW ),A
  313. RH_LP:  LD      A," "
  314.         PUSH    HL
  315.         CALL    RH_DO   ; PULL SYMBOL ' ' TO SCREEN LINE
  316.         POP     HL
  317.         BIT     _TRANS,(IX-_FLAG1)
  318.         JR      NZ,RH_SC
  319.         PUSH    HL
  320.         CALL    ATTR_
  321.         LD      A,(COLOR_M)
  322.         CALL    RH_DO   ; AND PULL ATTRIBUTE (IF NEED)
  323.         POP     HL
  324. RH_SC:  LD      BC,64
  325.         ADD     HL,BC
  326.         DEC     D
  327.         JR      NZ,RH_LP
  328.         XOR     A
  329.         RET
  330.  
  331. RH_DO:  LD      B,E     ; IS DX
  332.         LD      C,A     ; IS PULLED VALUE
  333. RH_PULL:LD      A,(HL)  ; PULL LOOP
  334.         LD      (HL),C
  335.         LD      C,A
  336.         CALL    CL_SW
  337.         DJNZ    RH_PULL
  338.         RET
  339.  
  340. DEG:    LD      A,H
  341.         XOR     20H
  342.         LD      H,A
  343.         AND     20H
  344.         RET     Z
  345.         DEC     HL
  346.         RET
  347.  
  348. _MOVE:  PUSH    DE      ; C-SIZE, DE-DISP. HL,DE,BC,A-PRESERVE
  349.         PUSH    BC
  350.         PUSH    HL
  351.         PUSH    HL
  352.         OR      A
  353.         SBC     HL,DE
  354.         POP     DE
  355.         LD      B,0
  356.         INC     C
  357.         DEC     C
  358.         JR      Z,_MV1
  359.         LDIR
  360. _MV1:   POP     HL
  361.         POP     BC
  362.         LD      E,B
  363.         LD      B,C
  364.         LD      C,E
  365.         POP     DE
  366.         RET
  367.  
  368. ;.COMMENT @
  369. ;------------------------------------------
  370. ; IMG_PG - PUT/GET IMAGE. BC-Y1&X1, DE-DY&DX, HL-BUF
  371. ;                         A.[0:6]-PAGE, A.[7]-FUNC:
  372. ;                               0-GET/1-PUT IMAGE
  373. ;
  374. ;IMG_PG: PUSH    HL
  375. ;        CALL    _PREP
  376. ;        EX      AF,AF'
  377. ;        AND     1FH
  378. ;        CALL $;   ED_SET
  379. ;        EX      AF,AF'
  380. ;        LD      B,D     ; B-DY
  381. ;        LD      C,E     ; C-DX
  382. ;        POP     DE      ; DE-BUF ADDR, HL-SCREEN ADDR
  383. ;        RET     C       ; RET IF ERROR INTO '_PREP'
  384. ;        ADD     A,A
  385. ;        EXX
  386. ;        LD      HL,PUT_PRG
  387. ;        JR      C,PUT_IM
  388. ;        LD      HL,GET_PRG
  389. ;PUT_IM: LD      DE,ED_BUF
  390. ;        LD      BC,LEN_PRG
  391. ;        LDIR
  392. ;        EXX
  393. ;        EX      DE,HL   ; HL-BUF, DE-SCREEN
  394. ;IMG_LP: PUSH    BC
  395. ;        PUSH    DE
  396. ;I_LLP:  CALL    ED_BUF  ; MOVE ONE CHAR
  397. ;        PUSH    DE
  398. ;        EX      DE,HL
  399. ;        CALL    ATTR_
  400. ;        EX      DE,HL
  401. ;        CALL    ED_BUF  ; ... AND ONE ATTRIBUTE
  402. ;        POP     DE
  403. ;        EX      DE,HL
  404. ;        CALL    ADV
  405. ;        EX      DE,HL
  406. ;        DEC     C
  407. ;        JR      NZ,I_LLP
  408. ;        EXX             ; NEXT LINE
  409. ;        POP     HL
  410. ;        LD      BC,64
  411. ;        ADD     HL,BC
  412. ;        PUSH    HL
  413. ;        EXX
  414. ;        POP     HL
  415. ;        POP     BC
  416. ;        DJNZ    IMG_LP
  417. ;        XOR     A
  418. ;        RET
  419.  
  420. ;GET_PRG:LD      A,(DE)
  421.         ;STA     PP
  422. ;        RET
  423.  
  424. ;PUT_PRG:;LDA     PP
  425. ;        LD      (DE),A
  426. ;        RET
  427.  
  428. ;LEN_PRG EQU     PUT_PRG-GET_PRG
  429.