Subversion Repositories pentevo

Rev

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

  1.  
  2. ; LAST UPDATE: 17.10.2023 savelij
  3.  
  4. ;               PHASE 0XEA00-0X31
  5. ; FLAG'S BIT LAYOUT
  6. _VMODE EQU  0
  7. _C_STA EQU  1
  8. _FLEX_C EQU 2
  9.  
  10. _CAPS  EQU  4
  11. _RUS   EQU  5
  12. _K_SS  EQU  6
  13. _K_CS  EQU  7
  14.  
  15. ; FLAG1'S BIT LAYOUT
  16. _OVER  EQU  0
  17. _TRANS EQU  1
  18. _FASTR EQU  2
  19. _BREAK EQU  3
  20. _ROLL  EQU  4
  21.  
  22. UND_MUX
  23. IRG_FUN         XOR A
  24.                 RET
  25.  
  26. ; CONVERT WIN-RELATIVE TO ABS & CHECK
  27. CHKCOR: LD   HL,(W_X1)
  28.        ADD  HL,BC
  29.        LD   B,H
  30.        LD   C,L
  31. _CHKCO: OR   A          ; ONLY CHECK
  32.        EX   AF,AF'
  33.       LD   A,(W_X1)
  34.       CP   C
  35.       JR   Z,_CHS1
  36.       JR   NC,_CHX
  37. _CHS1: LD   A,(W_X2)
  38.       CP   C
  39.       JR   NC,CHSH1
  40. _CHX:  LD   C,A
  41.       EX   AF,AF'
  42.        SCF
  43.        EX   AF,AF'
  44. CHSH1: LD   A,(W_Y1)
  45.       CP   B
  46.       JR   Z,_CHS2
  47.       JR   NC,_CHY
  48. _CHS2: LD   A,(W_Y2)
  49.       CP   B
  50.       JR   NC,CHSH2
  51. _CHY:  LD   B,A
  52.       SCF
  53.       RET
  54.  
  55. CHSH2: EX   AF,AF'
  56.        RET
  57.  
  58. ; SET CURSOR (W-RELATIVE & CHECK)
  59. GOXY_:  CALL CHKCOR
  60. _GOXY: LD   (CUR_X),BC ;SET ABS & NO CHECK
  61.        CALL GOTO_XY;EV_COR
  62. ;       LD   (SCR_AD),HL
  63.        RET
  64.  
  65. CUR_IN
  66. ;       DI
  67.        DEC  (IX-_C_CNT)
  68.        RET  NZ
  69.        LD   A,(C_MAX)
  70.        LD   (C_CNT),A
  71.        LD   A,(FLAG)
  72.        XOR  2         ;C_STAT BIT
  73.        LD   (FLAG),A
  74.                 EX AF,AF'
  75.       LD   A,(C_ACT)
  76.       OR   A
  77.       RET  NZ
  78.                 EX AF,AF'
  79.                 RRA
  80.                 AND 1
  81.                 CALL CURS_OO
  82.                 RET
  83. ;C_INV: LD   HL,C_I
  84. ;SW:    LD   (SW_DO+1),HL
  85. ;       LD   HL,(SCR_AD)
  86. ;       LD   DE,SV_ARE
  87. ;       JP   SW_C
  88.  
  89. CUR_AC1         LD (IX-_C_ACT),1
  90. CUR_AC
  91. ;    DI
  92.        DEC  (IX-_C_ACT)
  93.        JR   Z,CA_SH
  94.        RET  P
  95.        LD   (IX-_C_ACT),0
  96.        RET
  97.  
  98. CA_SH           BIT _C_STA,(IX-_FLAG)
  99.                 RET Z
  100.                 LD A,1
  101.                 CALL CURS_OO
  102.                 SET _C_STA,(IX-_FLAG)
  103.                 RET
  104. ; LD   HL,C_A
  105. ;       CALL SW
  106. ;       BIT  _C_STA,(IX-_FLAG)
  107. ;       JR   NZ,C_INV
  108. ;       RET
  109.  
  110. CUR_PA
  111. ;    DI
  112.        LD   A,(C_ACT)
  113.        INC  A
  114.        LD   (C_ACT),A
  115.        DEC  A
  116.        RET  NZ
  117.                 BIT _C_STA,(IX-_FLAG)
  118.                 RET Z
  119.                 XOR A
  120.                 CALL CURS_OO
  121.                 RES _C_STA,(IX-_FLAG)
  122.                 RET
  123. ;       LD   HL,C_P
  124. ;       JR   SW
  125.  
  126. ; ENCODING ROUTINE
  127. ENCODE:LD   B,A
  128.        RLCA
  129.        RLCA
  130.        RLCA
  131.        AND  7
  132.        LD   HL,SG_ENC
  133.        CALL ADD_HL_A
  134.        LD   A,(HL)
  135.        BIT  4,B
  136.        JR   Z,ESH
  137.        RLCA
  138.        RLCA
  139.        RLCA
  140.        RLCA
  141. ESH:   AND  0F0H
  142.        XOR  B
  143.        AND  0F0H
  144.        XOR  B
  145.        RET
  146.  
  147. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  148. ;     PROTECTION
  149. ROM_CHK
  150. ;               IF HACK_RBIOS=0
  151. ;               LD BC,3FFFH
  152. ;               ELSE
  153.                 RET
  154.                 DW 0X3FFF
  155. ;               ENDIF
  156.        XOR  A
  157.        LD   H,A
  158.        LD   L,A
  159. RC_LP: ADD  A,(HL)
  160.        ADC  A,0
  161.        INC  HL
  162.        RRCA
  163.        XOR  0B9H
  164.        DEC  BC
  165.        LD   D,A
  166.        LD   A,B
  167.        OR   C
  168.        LD   A,D
  169.        JR   NZ,RC_LP
  170.        DEC  A
  171.        RET  Z
  172.        LD   A,R
  173.        LD   L,A
  174.        LD   H,0DCH                     ; IS BDOS ADRESS
  175.        INC  (HL)
  176.        AND  7FH
  177.        RET  NZ
  178. PROT       LD   HL,MES_RCK
  179.        XOR A
  180. RC_PLP:XOR  (HL)
  181.        INC  HL
  182.        CALL NZ,CONOUT
  183.        JR   NZ,RC_PLP
  184.        LD   A,1
  185.        RST  18H
  186. RC_HLT:LD   HL,PAL_BUF
  187.        LD   B,16
  188. RC__1: INC  (HL)
  189.        INC  HL
  190.        DJNZ RC__1
  191.        CALL SET_PAL
  192.        LD   B,25
  193.        EI
  194. RC__2: HALT
  195.        DJNZ RC__2
  196.        JR   RC_HLT
  197. MES_RCK:
  198.        DB   0DH,16H,0AH,58H,69H,43H,11H,13H,02H,08H,0EH,01H,4AH,0EH
  199.        DB   69H,69H,48H,09H,0DH,18H,11H,01H,4AH,0EH,70H,22H,17H,16H
  200.        DB   00H,53H,72H,17H,16H,16H,11H,74H,54H,1BH,4FH,43H,0CH,01H
  201.        DB   1AH,1DH,07H,1BH,10H,4BH,00H,00H,2EH
  202. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  203.  
  204. ;--------------------------------
  205. ; ROLL WINDOW UP
  206. ROLL: BIT  _ROLL,(IX-_FLAG1)
  207.        RET  NZ
  208.        XOR  A
  209.        JR   ROL_1
  210.  
  211. ;--------------------------------
  212. ; WROLL PROCEDURE. DIRECTION: 0-UP, 1-DOWN, 2-RIGHT, 3-LEFT
  213. WROLL: CALL HEX_CVT
  214.        DB   6
  215.        DB   4
  216.        RET  C
  217. ROL_1           LD   BC,(W_X1)
  218. ROL_2: LD   HL,(W_X2)
  219.        SBC  HL,BC
  220.        INC  H
  221.        INC  L
  222.        EX   DE,HL
  223.        JP ROL_WIND
  224.  
  225. ;       OR   A
  226. ;       JP   Z,ROLL
  227. ;       DEC  A
  228. ;       JP   Z,UROLL                     ; A=1 - RIGHT, A=2 - LEFT
  229. ;       RRA
  230. ;       CALL C,PRP_INS                   ; PROC'S PRP_INS DON'T CHANGE CF
  231. ;       LD   C,(IX-_W_X1)
  232. ;       JR   C,ROL_W
  233. ;       CALL PRP_DEL
  234. ;       LD   C,(IX-_W_X2)
  235. ;ROL_W: LD   B,(IX-_W_Y1)
  236. ;       CALL EV_COR
  237. ;       LD   A,(W_Y2)
  238. ;       SUB  (IX-_W_Y1)
  239. ;       RET  C
  240. ;       INC  A
  241. ;       LD   B,A
  242. ;       LD   C,(IX-_W_X1)
  243. ;ROL_LW:LD   A,(W_X2)
  244. ;       SUB  C
  245. ;       RET  C
  246. ;       INC  A
  247. ;       LD   C,A
  248. ;       LD   IY,ARR_CO
  249. ;       JP   SW_RRL
  250.  
  251. ;-------------------------------
  252. ; INS/DEL CHAR PROCS
  253. ;I_CH:  CALL PRP_INS
  254. ;       JR   ROL_L
  255.  
  256. ;D_CH:  CALL PRP_DEL
  257. ;       LD   C,(IX-_W_X2)
  258. ;ROL_L: CALL EV_COR
  259. ;       LD   C,(IX-_CUR_X)
  260. ;       LD   B,1
  261. ;       JR   ROL_LW
  262. ;-------------------------------
  263. ; INS/DEL CHAR PROCS
  264. I_CH:  LD   D,2
  265.        DB   21H         ; LD HL,NN
  266. D_CH:  LD   D,3
  267.        CALL _PRP_L
  268.        JP ROL_WIND
  269.  
  270. _PRP_L:LD   A,(W_X2)
  271.        SUB  C
  272.        LD   E,A
  273.        INC  E
  274.        LD   A,D
  275.        LD   D,1
  276.        RET
  277.  
  278. ;--------------------------------
  279. ;CLEAR TO END OF SCREEN
  280. CLREOL:
  281.        CALL _PRP_L
  282. _CLR:  LD   A,' '
  283.        JP CLW_WIND
  284. ;       LD   HL,40
  285. ;       LD   (TMP_W),HL
  286. ;       LD   HL,FIL
  287. ;       LD   (SW_CLR+1),HL
  288. ;       LD   HL,(SCR_AD)
  289. ;       LD   A,(W_X2)
  290. ;       SUB  (IX-_CUR_X)
  291. ;       RET  C
  292. ;       INC  A
  293. ;       LD   C,A
  294. ;CESW1: LD   B,8
  295. ;       LD   IY,ARR_CO
  296. ;       JP   SW_CLL
  297.  
  298. ; INIT ENCODER
  299. ENC_INIT:
  300.         LD  HL,ENC_ITAB
  301.         LD  DE,SG_ENC
  302.         LD  BC,12
  303.         LDIR
  304.         RET
  305. ENC_ITAB:
  306.         DB   01H,23H,45H,67H
  307.         DB   01H,23H,0EFH,0CDH
  308.         DB   01H,23H,45H,67H
  309.  
  310. ;HOME CURSOR
  311. PHOME: CALL ROM_CHK
  312. HOME_  LD   BC,0
  313.        JP   GOXY_
  314.  
  315. ;RESET WHOLE SCREEN
  316. C_INIT_:                 ; CONSOLE INIT (A-DEEP)
  317.        CALL RESET
  318.  
  319.     ; SET COLOR '70'
  320.        LD   DE,'07'
  321.        CALL SET_COLOR
  322.     ; SET ENCODER
  323.        CALL ENC_INIT
  324.     ; TURN ON CURSOR
  325.        LD   A,(C_ACT)
  326.        OR   A
  327.        CALL NZ,CUR_AC1
  328.     ; SET LAT MODE & CAPS
  329.        RES  _RUS,(IX-_FLAG)
  330.        CALL RL_BRD
  331.     ; RESET ALL CONIO FLAG
  332.        LD   (IX-_FLAG1),0
  333.  
  334. CLRALL:
  335.        LD   (IX-_W_X1),0
  336.        LD   (IX-_W_Y1),0
  337.        LD   (IX-_W_X2),79
  338.        LD   (IX-_W_Y2),24
  339.  
  340. CLRPG: CALL HOME_
  341.        LD   BC,(W_X1)
  342.  
  343. ;CLEAR REST OF PAGE
  344. CLR_EOP:
  345.        CALL CLREOL
  346. ;/*
  347. ;       LD   HL,(RTIME)
  348.         ;#IFNDEF ATM
  349. ;       LD   DE,-0F4BH
  350.         ;#ELSE
  351. ;       LD   DE,-0EE8H
  352.         ;#ENDIF
  353. ;       ADD  HL,DE
  354. ;       LD   DE,-5
  355. ;       ADD  HL,DE
  356. ;       JR   NC,__1
  357. ;       INC  (IX-_HSIGN)
  358. ;__1:
  359. ;*/
  360.        LD   B,(IX-_CUR_Y)
  361.        INC  B
  362.        LD   C,(IX-_W_X1)
  363.        LD   HL,(W_X2)
  364.        OR   A
  365.        SBC  HL,BC
  366.        INC  H
  367.        RET  Z
  368.        INC  L
  369.        EX   DE,HL
  370.        JP   _CLR
  371.  
  372. ;RESET WHOLE SCREEN
  373. ;CLRALL: LD   (IX-_W_X1),0
  374. ;       LD   (IX-_W_X2),79
  375. ;       LD   (IX-_W_Y1),0
  376. ;       LD   (IX-_W_Y2),24
  377. ;       BIT  _VMODE,(IX-_FLAG)
  378. ;       JR   NZ,DSX
  379. ;       LD   (IX-_W_X2),39
  380. ;DSX:
  381. ;CLRPG: CALL HOME_
  382.  
  383. ;CLEAR REST OF PAGE
  384. ;CLR_EOP:
  385. ;       CALL CLREOL
  386. ;       LD   A,(W_Y2)
  387. ;       SUB  (IX-_CUR_Y)
  388. ;       RET  C
  389. ;       RET  Z
  390. ;       LD   B,A
  391. ;       LD   A,(W_X2)
  392. ;       SUB  (IX-_W_X1)
  393. ;       INC  A
  394. ;       LD   C,A
  395. ;       PUSH BC
  396. ;       LD   B,(IX-_CUR_Y)
  397. ;       INC  B
  398. ;       LD   C,(IX-_W_X1)
  399. ;       CALL EV_COR
  400. ;       POP  BC
  401. ;CLLP:  PUSH HL
  402. ;       PUSH BC
  403. ;       CALL $;CESW1
  404. ;       POP  BC
  405. ;       POP  HL
  406. ;       LD   DE,320
  407. ;       ADD  HL,DE
  408. ;       DJNZ CLLP
  409. ;       RET
  410.  
  411. ; OUT CHAR & ADVANCE POSITION
  412. PUT_CH:
  413.        CALL ENCODE
  414. _P_CHA: CALL _OUT_CH_
  415. __PCH: LD   A,(CUR_X)
  416.        CP   (IX-_W_X2)
  417.        JR   NC,N_POS
  418.        INC  A
  419.        LD   (CUR_X),A
  420.                 JP ADV_POS
  421. ;       CALL ADV
  422. ;       LD   (SCR_AD),HL
  423. ;       RET
  424.  
  425. N_POS: LD   B,(IX-_CUR_Y)
  426.        LD   C,(IX-_W_X1)
  427. N_POS1: INC  B
  428.        CALL _CHKCO
  429.        PUSH BC
  430.        CALL C,ROLL
  431.        POP  BC
  432. _GOXY_: JP  _GOXY
  433.  
  434.  
  435. ;OUTPUT CHAR
  436. OUT_CH: CP  " "
  437.        JP   NC,PUT_CH
  438.        LD   BC,(CUR_X)
  439.        CALL HEX_CVT1
  440.        DB   CCH_L*8
  441. CCH_T: DEFB 0DH,0AH,0EH,0FH,1BH,7,8,9
  442. CCH_L  EQU  $-CCH_T
  443.        RET
  444.  
  445.        NOP
  446.        JR   TAB_P
  447.        JR   BS_P
  448.        JR   BELL_P
  449.        JR   ESC_P
  450.        JR   DC1_P
  451.        JR   DC3_P
  452.        JR   N_POS1
  453.  
  454. CR_P:  LD   C,(IX-_W_X1)
  455.                 JR   _GOXY_
  456.  
  457. DC1_P: SET  _RUS,(IX-_FLAG)
  458.                 LD A,1
  459.                 CALL KB_SET_RUS
  460.        LD   HL,ENC_SI
  461. DCSH:  LD   DE,SG_ENC
  462.        LD   BC,4
  463.        LDIR
  464.        JP   RL_BRD
  465.  
  466. DC3_P: RES  _RUS,(IX-_FLAG)
  467.                 XOR A
  468.                 CALL KB_SET_RUS
  469.        LD   HL,ENC_SO
  470.        JR   DCSH
  471.  
  472. ESC_P: LD   HL,ELET_P
  473. SET_SW: LD   (OUT_SW+1),HL
  474.        RET
  475.  
  476. TAB_P: LD   A," "
  477.        CALL _P_CHA
  478.        LD   A,(CUR_X)
  479.        AND  7
  480.        JR   NZ,TAB_P
  481.        RET
  482.  
  483. BS_P:  DEC  C
  484.        CALL _CHKCO
  485.                 JR   NC,_GOXY_
  486.        LD   C,(IX-_W_X2)
  487.        DEC  B
  488.        CALL _CHKCO
  489.                 JR   NC,_GOXY_
  490.        LD   B,(IX-_W_Y2)
  491.                 JR   _GOXY_
  492.  
  493. BELL_P: LD   HL,(BEEP_D)
  494. BEEP:  LD   A,(BORDER)
  495.        LD   C,(IX-_FE_IMG)
  496.        DI
  497. BPLP:  LD   B,H
  498.        OUT  (C),A
  499.        DJNZ $
  500.        XOR  10H
  501.        DEC  L
  502.        JR   NZ,BPLP
  503.        EI
  504.        RET
  505.  
  506. ;ESC SEQUINCE CONTROL ROUTINE
  507. ELET_P: SUB  "@"
  508.        JR   NC,TST_L
  509. RES_OU: LD   HL,OUT_CH
  510.                 LD (IX-_C_STAT),CS_ERSEC
  511.        JR   SET_SW
  512.  
  513. TST_L: CP   NPAR_L
  514.        JR   NC,RES_OU
  515.        INC  A
  516.        LD   (FUNC),A
  517.        DEC  A
  518.        LD   HL,NPAR_T
  519.        CALL ADD_HL_A
  520.        LD   A,(HL)
  521.        OR   A
  522.        JR   Z,DO_PR
  523. ACP_1: LD   HL,PAR1
  524.        LD   (FCNT),A
  525.        LD   (PAR_PT),HL
  526.        LD   HL,ACC_PA
  527.        JR   SET_SW
  528.  
  529. ACC_PA: LD   HL,(PAR_PT)
  530.        SUB  " "
  531.        JR   NC,AP_OK
  532.        LD   (IX-_FUNC),0FFH
  533.                 LD (IX-_C_STAT),CS_UNPRN
  534. AP_OK: LD   (HL),A
  535.        INC  HL
  536.        LD   (PAR_PT),HL
  537.        DEC  (IX-_FCNT)
  538.        RET  NZ
  539. DO_PR:
  540.        LD   HL,OUT_CH
  541.        LD   (OUT_SW+1),HL
  542.        LD   A,(FUNC)
  543.        INC  A
  544.        RET  Z
  545.        DEC  A
  546.        CALL IRG_FUN
  547.        LD   BC,(CUR_X)
  548.        LD   A,(PAR1)
  549.        EX   AF,AF'
  550.       LD   A,(FUNC)
  551.       CALL _VJMP
  552.       DB   NPAR_L+1
  553.       DW   RES_OU
  554. JPAR_T:DEFW SETP_AUX  ; SET PALLET EXECUTABLE PART
  555.       DEFW PUT_CH, UP_P,   DN_P,   RT_P   ; @ABC
  556.       DEFW LT_P,   CLRPG,  SET_CO, GRAPH  ; DEFG
  557.       DEFW PHOME,  RLF_P,  CLR_EOP,CLREOL ; HIJK
  558.       DEFW SET_CA, MODE,   PALLET, PLAY   ; LMNO
  559.       DEFW I_CH,   D_CH,   SETENC, I_LIN  ; PQRS
  560.       DEFW D_LIN,  BORD_P, GET_ALL,WIND   ; TUVW
  561.       DEFW WROLL,  C_GOXY, S_CUR,  CUR_PAR; XYZ[
  562.       DEFW KEY_PA, CUR_LN, SET_MOD,CLRALL ; 0x5C]^_
  563.       DEFW SP_AUX, _CUR_PA,_KEY_PA,PRN_SC ; 'ABC
  564.  
  565. ;       LD   B,0
  566. ;       LD   C,(IX-_FUNC)
  567. ;       INC  C
  568. ;       RET  Z
  569. ;       DEC  C
  570. ;       LD   HL,JPAR_T
  571. ;IJMP:  ADD  HL,BC
  572. ;       ADD  HL,BC
  573. ;       LD   C,(HL)
  574. ;       INC  HL
  575. ;       LD   B,(HL)
  576. ;       PUSH BC
  577. ;       LD   BC,(CUR_X)
  578. ;       LD   A,(PAR1)
  579. ;       RET
  580.  
  581. NPAR_T:DEFB 1, 0, 0, 0  ; @ABC
  582.        DEFB 0, 0, 2, 0  ; DEFG
  583.        DEFB 0, 0, 0, 0  ; HIJK
  584.        DEFB 16,1, 1, 1  ; LMNO
  585.        DEFB 0, 0, 9, 0  ; PQRS
  586.        DEFB 0, 2, 0, 4  ; TUVW
  587.        DEFB 1, 2, 1, 1  ; XYZ[
  588.        DEFB 2, 2, 2, 0  ; 0x5C]^_
  589.        DEFB 16,1, 2, 16 ; 'AB
  590. NPAR_L EQU  $-NPAR_T
  591.  
  592. GET_ALL:
  593. GRAPH:
  594. PLAY:  LD   A,-1
  595.        RET
  596.  
  597. UP_P:  DEC  B
  598.        CALL _CHKCO
  599.        JR   NC,GO
  600.        LD   B,(IX-_W_Y2)
  601. GO:    JP   _GOXY
  602.  
  603. DN_P:  INC  B
  604.        CALL _CHKCO
  605.        JR   NC,GO
  606.        LD   B,(IX-_W_Y1)
  607.        JR   GO
  608.  
  609. RT_P:  INC  C
  610.        CALL _CHKCO
  611.        JR   NC,GO
  612.        LD   C,(IX-_W_X1)
  613.        JR   GO
  614.  
  615. LT_P:  DEC  C
  616.        CALL _CHKCO
  617.        JR   NC,GO
  618.        LD   C,(IX-_W_X2)
  619.        JR   GO
  620.  
  621. RLF_P: INC  B
  622.        DEC  B
  623.        SCF
  624.        JR   Z,RLF_SK
  625.        DEC  B
  626.        CALL _CHKCO
  627. RLF_SK:PUSH BC
  628.                 LD A,1
  629.        CALL C,ROL_1
  630.        POP  BC
  631.        JP   _GOXY
  632.  
  633. SET_CA
  634. SET_CO          LD DE,(PAR1)
  635. SET_COLOR:
  636.        LD    A,E
  637.        LD    BC,(COLOR_P)
  638. ;PATM 'NI' UC HEX
  639.                 CALL HEX_CVT
  640.                 DB 1+4+2*8             ; MATCH 2 LETTER , UPCASE, HEX
  641.                 DB "NI"                ; N- OLD VALUE, I - INVERT
  642.        RET   C          ; NUM OR ERR
  643.        NOP
  644.        LD    B,A        ; INVERT OR NUM
  645.        NOP
  646.        LD    A,D        ; IGNORE
  647. ;PATM 'NI' UC HEX
  648.                 CALL HEX_CVT
  649.                 DB 1+4+2*8             ; MATCH 2 LETTER , UPCASE, HEX
  650.                 DB "NI"                ; N- OLD VALUE, I - INVERT
  651.        RET   C          ; NUM OR ERR
  652.        NOP
  653.        LD    C,A        ; INVERT OR NUM
  654.        NOP
  655.        LD    (COLOR_P),BC
  656.        BIT  7,B                 ; NOT CHANGE
  657.        JR   Z,SCHS1
  658.        LD   A,C
  659.        CALL INVERT
  660.        LD   B,A
  661. SCHS1: BIT  7,C
  662.        JR   Z,SCHS2
  663.        LD   A,B
  664.        CALL INVERT
  665.        LD   C,A
  666. SCHS2: CALL PCK
  667.        JP   CONV_COL
  668.  
  669.  
  670. PCK:   LD   A,B        ;IN B-INK, C-PAPER
  671.        XOR  C         ;OUT A-COLOR
  672.        AND  0F8H
  673.        XOR  C
  674.        RL   C
  675.        XOR  C
  676.        AND  0EFH
  677.        XOR  C
  678.        RLA
  679.        RLA
  680.        RLA
  681.        XOR  B
  682.        AND  0F8H
  683.        XOR  B
  684.        RET
  685.  
  686. SET_MOD:CALL HEX_CVT
  687.        DB   1+M_LNG*8
  688. _M_S:  DB   "IRBFTO"
  689. M_LNG  EQU  $-_M_S
  690.        NOP
  691.        RET  C
  692.        AND  7FH
  693.        LD   B,A
  694.        INC  B
  695.        XOR  A
  696.        SCF
  697. SM_L:  RLA
  698.        DJNZ SM_L
  699.        LD   C,A
  700.        LD   A,(PAR2)
  701.        CALL HEX_CVT
  702.        DB   6
  703.        DB   2
  704.        RET  C
  705.        RRA
  706.        SBC  A,A
  707.        LD   B,(IX-_FLAG1)
  708.        XOR  B
  709.        AND  C
  710.        XOR  B
  711.        LD   (FLAG1),A
  712.        RET
  713.  
  714. ;MODE PROCEDURE
  715. MODE    LD   A,(PAR1)
  716.        SUB  '0'-' '
  717.        LD   B,A
  718.        CALL SET_MODE
  719.        LD   (SYS_P),A
  720.        CALL SET_SYS
  721.  
  722.        LD   (IX-_C_ACT),1 ; FLAG 'CURSOR OFF'
  723.        LD   H,40H      ; CLEAR PHYSICAL SCREEN
  724.        CALL _MD1
  725.        LD   H,60H
  726.        CALL _MD1
  727.        LD   H,0C0H
  728.        CALL _MD1
  729.        LD   H,0E0H
  730.        CALL _MD1
  731.        ;CALL TST_RT
  732.        LD   A,2
  733.        JP   C_INIT_
  734. _MD1:  LD   L,0
  735.        LD   D,H
  736.        LD   E,1
  737.        LD   BC,8000-1
  738.        LD   (HL),L
  739.        LDIR
  740.        RET
  741.  
  742. SET_MODE:
  743.        LD   A,(SYS_P)
  744.        AND  7!0XFF;NOT 7
  745.        DEC  B
  746.        JR   Z,MOD_TXT
  747.        DEC  B
  748.        RET  NZ
  749.        OR   2
  750.        RET
  751. MOD_TXT:
  752.        OR   6
  753.        RET
  754.  
  755.  
  756. ;       BIT  0,(IX-_PAR1)
  757. ;       LD   HL,ARR_CO
  758. ;       JR   Z,MD_M
  759. ;       SET  5,(IX-_FE_IMG)
  760. ;       SET  _VMODE,(IX-_FLAG)
  761. ;       LD   DE,ARR_CO+1
  762. ;       LD   BC,8
  763. ;       LD   (HL),7
  764. ;       LDIR
  765. ;       LD   (HL),0
  766. ;       LD   BC,7
  767. ;       LDIR
  768. ;       LD   HL,$;HI_MOD
  769. ;MD_SH: LD   DE,SW_C
  770. ;       LD   BC,SW_SIZ
  771. ;       LDIR
  772. ;       CALL OUT_FE
  773. ;       JP   CLRALL
  774.  
  775. ;MD_M:  RES  5,(IX-_FE_IMG)
  776. ;       RES  _VMODE,(IX-_FLAG)
  777. ;       LD   B,8
  778. ;MD_M_L: LD   (HL),7
  779. ;       INC  HL
  780. ;       LD   (HL),0
  781. ;       INC  HL
  782. ;       DJNZ MD_M_L
  783. ;       LD   HL,$;M_MODE
  784. ;       JR   MD_SH
  785.  
  786. ;BORDER & BORD COLOR MANIP ROUTINES
  787. BORD_P:CALL HEX_CVT
  788.        DB   5;4
  789.        RET  C
  790.        LD   C,A
  791.        LD   A,(PAR2)
  792.        CALL HEX_CVT
  793.        DB   5;4
  794.        RET  C
  795.        RRCA
  796.        RRCA
  797.        RRCA
  798.        RRCA
  799.        XOR  C
  800.        AND  0F0H
  801.        XOR  C
  802.        LD   (BCOL),A
  803.  
  804. RL_BRD: LD   A,(BCOL)
  805.        BIT  _RUS,(IX-_FLAG)
  806.        JR   NZ,SET_BR
  807.        RRA
  808.        RRA
  809.        RRA
  810.        RRA
  811.  
  812. SET_BR:LD   C,A
  813.        XOR  (IX-_BORDER)
  814.        AND  7
  815.        XOR  (IX-_BORDER)
  816.        LD   (BORDER),A
  817.        LD   A,(FE_IMG)
  818.        XOR  C
  819.        AND  0F7H
  820.        XOR  C
  821.        XOR  8
  822.        LD   (FE_IMG),A
  823.  
  824. OUT_FE:LD   C,(IX-_FE_IMG)
  825.        LD   A,(BORDER)
  826.        OUT  (C),A
  827.        RET
  828.  
  829. ;GOTOXY PROC
  830. C_GOXY: LD  C,(IX-_PAR2)
  831.        LD   B,A
  832.        JP   GOXY_
  833.  
  834.  
  835. ;WINDOW PROC
  836. WIND:  LD   A,(PAR3)
  837.        CP   (IX-_PAR1)
  838.        RET  C
  839.        LD   L,A
  840. ;       BIT  _VMODE,(IX-_FLAG)
  841. ;       JR   NZ,$+4
  842. ;       ADD  A,A
  843. ;       RET  C
  844.        CP   80
  845.        RET  NC
  846.        LD   A,(PAR4)
  847.        CP   (IX-_PAR2)
  848.        RET  C
  849.        CP   25
  850.        RET  NC
  851.        LD   H,A
  852.        LD   (W_X2),HL
  853.        LD   HL,(PAR1)
  854.        LD   (W_X1),HL
  855.        JP   HOME_
  856.  
  857. I_LIN: LD   A,1
  858.        DB   0EH         ; LD C,N
  859. D_LIN: XOR  A
  860.        LD   C,(IX-_W_X1)
  861.        JP   ROL_2
  862.  
  863. ;I_LIN: LD   HL,UROLL
  864. ;ID_LIN:LD   A,(W_Y1)
  865. ;       PUSH AF
  866. ;       LD   (IX-_W_Y1),B
  867. ;       CALL ID__1
  868. ;       POP  AF
  869. ;       LD   (W_Y1),A
  870. ;       RET
  871.  
  872. ;ID__1: JP   (HL)
  873. ;
  874. ;D_LIN: LD   HL,ROLL
  875. ;       JR   ID_LIN
  876.  
  877. S_CUR: CALL HEX_CVT
  878.        DB   6
  879.        DB   3
  880.        RET  C
  881.        RES  _FLEX_C,(IX-_FLAG)
  882.        DEC  A
  883.        JP   Z,CUR_AC
  884.        INC  A
  885.        EX   AF,AF'
  886.       CALL CUR_PA
  887.       EX   AF,AF'
  888.        RET  Z
  889.        SET  _FLEX_C,(IX-_FLAG)
  890.        RET
  891.  
  892. CUR_PAR:CALL HEX_CVT
  893.        DB   1+6
  894.        DB   32
  895.        RET  C
  896.        CALL LOG
  897. _CUR_PA:LD  (C_MAX),A
  898.        RET
  899.  
  900. _KEY_PA:LD  (KEY_REP),A
  901.        LD   A,(PAR2)
  902.        JR   _KP_1
  903.  
  904. KEY_PA:CALL HEX_CVT
  905.        DB   1+6
  906.        DB   32
  907.        RET  C
  908.        CALL LOG
  909.        LD   (KEY_REP),A
  910.        LD   A,(PAR2)
  911.        CALL HEX_CVT
  912.        DB   1+6
  913.        DB   32
  914.        RET  C
  915.        CALL LOG
  916. _KP_1: ADD  A,A
  917.        DEC  A
  918.        LD   (KEY_DEL),A
  919.        RET
  920.  
  921. LOG:   INC  A
  922.        CP   16
  923.        RET  C
  924.        SUB  8
  925.        CP   16
  926.        JR   C,LOG1
  927.        SUB  8
  928.        ADD  A,A
  929. LOG1:  ADD  A,A
  930.        RET
  931.  
  932. CUR_LN:CALL HEX_CVT
  933.        DB   6
  934.        DB   8
  935.        RET  C
  936.        LD   B,A
  937.        LD   A,(PAR2)
  938.        CALL HEX_CVT
  939.        DB   6
  940.        DB   8
  941.        RET  C
  942.        CP   B
  943.        RET  C
  944.                 LD C,A
  945.                 JP SET_CURS
  946. ;       INC  A
  947. ;       LD   (IX-_C_BEG),B
  948. ;       LD   (C_END),A
  949. ;       RET
  950.  
  951. SETENC:CALL HEX_CVT
  952.        DB   6
  953.        DB   3
  954.        RET  C
  955.        ADD  A,A
  956.        LD   HL,SG_ENC
  957.        CALL ADD_HL_2A
  958.        LD   DE,PAR2
  959.        LD   B,8
  960. SEC_LP:LD   A,(DE)
  961.        INC  DE
  962.        CALL HEX_CVT
  963.        DB   5;4
  964.        RET  C
  965.        RLD
  966.        BIT  0,B
  967.        JR   Z,SEC_1
  968.        INC  HL
  969. SEC_1: DJNZ SEC_LP
  970. MY_RET:RET
  971.  
  972. PRN_SC  LD   C,0
  973.        JP   UND_MUX
  974. ;       LD   DE,PAR1
  975. ;       LD   HL,ED_BUF
  976. ;       LD   B,16
  977. ;       CALL SEC_LP
  978. ;       LD   DE,ED_BUF
  979. ;       CALL _PT_CH
  980. ;       JP   __PCH
  981.  
  982. PALLET:CALL HEX_CVT
  983.        DB   1+4+8*2
  984.        DB   "RT"
  985. ;       NOP
  986.        RET  C
  987.                 NOP
  988.                 JR PLT_1
  989.  
  990.                 JR SP_DEF
  991.  
  992. PLT_1
  993. ;       CP   81H
  994. ;       JR   Z,SP_DEF
  995.        LD   (PAR4),A
  996.        XOR  A
  997.        LD   (FUNC),A
  998. SPA_S: LD   A,3
  999.        JP   ACP_1
  1000.  
  1001. SP_DEF:LD   HL,PALN
  1002.        JR   SP_AUX1
  1003.  
  1004. SP_AUX:LD   HL,PAR1
  1005. SP_DIR
  1006. SP_AUX1:LD   DE,PAL_BUF
  1007.        LD   BC,16
  1008.        LDIR
  1009.        JR   SET_PAL
  1010.  
  1011. SETP_AUX:
  1012.        LD   B,3
  1013.        LD   D,0
  1014.        LD   HL,PAR1
  1015. PACC_: LD   A,(HL)
  1016.        CALL HEX_CVT
  1017.        DB   6
  1018.        DB   4
  1019.        RET  C
  1020.        CPL
  1021.        RRA
  1022.        RRA
  1023.        RL   D
  1024.        RLA
  1025.        SBC  A,A
  1026.        AND  8
  1027.        OR   D
  1028.        LD   D,A
  1029.        INC  HL
  1030.        DJNZ PACC_
  1031.        ADD  A,A
  1032.        ADD  A,A
  1033.        XOR  D
  1034.        AND  0FCH
  1035.        XOR  D
  1036.        OR   0CH
  1037.        LD   D,A
  1038.        LD   HL,PAL_BUF
  1039.        LD   A,(PAR4)
  1040.        AND  7FH
  1041.        CALL ADD_HL_A
  1042.        LD   (HL),D                      ; PAGE 1 SETS ON ENTRY TO CONOUT
  1043.        INC  (IX-_PAR4)
  1044.        JP   P,SET_PAL
  1045.        BIT  4,(IX-_PAR4)
  1046.        JR   Z,SPA_S
  1047. ;----------------------
  1048. ; SET PALLET FROM PAL_BUF
  1049. SET_PAL: DI
  1050.        LD   A,I
  1051.        PUSH AF
  1052.        LD   A,HIGH (MY_R_ADR)           ; 3DH
  1053.        LD   I,A
  1054.        IM   2
  1055.        LD      A,(SYS_P)
  1056.        LD      BC,0BD77H
  1057.        OUT     (C),A
  1058.        LD   A,(BORDER)
  1059.        AND  0F8H
  1060.        LD   HL,PAL_BUF
  1061.        LD   C,0XFF
  1062.        LD   D,8
  1063.        EXX
  1064.        LD   C,(IX-_FE_IMG)
  1065.        SET  3,C
  1066.        EXX
  1067.        EI
  1068.        HALT
  1069.                 DI
  1070. SPL:   EXX
  1071.        OUT  (C),A
  1072.        EXX
  1073.        OUTI
  1074. ;       INC  B
  1075.        INC  A
  1076.        DEC  D
  1077.        JR   NZ,SPL
  1078.        EXX
  1079.        RES  3,C
  1080.        EXX
  1081.        SUB  8
  1082.        LD   D,8
  1083. SPL1:  EXX
  1084.        OUT  (C),A
  1085.        EXX
  1086.        OUTI
  1087. ;       INC  B
  1088.        INC  A
  1089.        DEC  D
  1090.        JR   NZ,SPL1
  1091.        ADD  A,0                 ; +7
  1092.        CALL OUT_FE              ; +71 / +78 = 13*6
  1093.        POP  AF
  1094.        LD   I,A
  1095.        IM   1
  1096.        CALL SET_SYS
  1097.        EI
  1098.        LD   BC,1000H                   ; FIND MIN&MAX COLORS
  1099.        LD   DE,0FFH                    ; D - MAX, E - MIN
  1100.        LD   HL,PAL_BUF
  1101. FIV_LP:CALL CLT
  1102.        CP   D
  1103.        JR   C,FIV_NU
  1104.        LD   D,A
  1105.        LD   (IX-_I_MAX),C
  1106. FIV_NU:CP   E
  1107.        JR   NC,FIV_ND
  1108.        LD   E,A
  1109.        LD   (IX-_I_MIN),C
  1110. FIV_ND:INC  C
  1111.        INC  HL
  1112.        DJNZ FIV_LP
  1113.        LD   A,D
  1114.        ADD  A,E
  1115.        LD   (I_AVR),A
  1116.        JP   RL_BRD
  1117.  
  1118. INVERT:PUSH HL
  1119.        LD   HL,PAL_BUF
  1120.        CALL ADD_HL_A
  1121.        CALL CLT
  1122.        ADD  A,A
  1123.        LD   HL,I_AVR
  1124.        CP   (HL)
  1125.        POP  HL
  1126.        LD   A,(I_MIN)
  1127.        RET  NC
  1128.        LD   A,(I_MAX)
  1129.        RET
  1130.  
  1131. CLT:   PUSH HL
  1132.        PUSH BC
  1133.        LD   C,(HL)
  1134.        LD   HL,CLT_TB
  1135.        LD   B,6
  1136.        XOR  A
  1137. CLT_LP:RR   C
  1138.        JR   C,CLT_1
  1139.        ADD  A,(HL)
  1140. CLT_1: INC  HL
  1141.        DJNZ CLT_LP
  1142.        POP  BC
  1143.        POP  HL
  1144.        RET
  1145.  
  1146. CLT_TB:DB   2,6,0CH,1,3,6
  1147.  
  1148.                 DEPHASE
  1149.  
  1150. ;------------------------------------------------
  1151. CONOUT PUSH BC       ;PRINT CHAR FROM A
  1152.        PUSH DE       ;DESTROY ALL ALT REGS
  1153.        PUSH HL       ;IX MAST POINT TO IX_BASE
  1154.        PUSH IY
  1155.        PUSH AF
  1156.        EX   AF,AF'
  1157.       LD   A,1
  1158.       RST  18H
  1159.       PUSH AF
  1160.       CALL CUR_PA
  1161.       EI
  1162.       EX   AF,AF'
  1163.        CALL OUT_SW
  1164.        CALL CUR_AC
  1165.        POP  AF
  1166.        RST  18H
  1167.        EI
  1168.        POP  AF
  1169.        POP  IY
  1170.        POP  HL
  1171.        POP  DE
  1172.        POP  BC
  1173.        RET
  1174.