Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 21.11.2013 savelij
  3.  
  4. ;.Z80
  5. ;-----------------------------------
  6. ; NUMBER CONVERT/LETTER SEARCH SUB
  7. ; USAGE: CALL HEX_CVT
  8. ;        DB <CODE> - BIT 0  : UPCASE LETTER
  9. ;                    BIT 1,2: 0-NO NUMBER CONVERT, 1-DEC NUM, 2-HEX NUM,
  10. ;                             3-USE LIMIT
  11. ;       [DB <MATCHED CHAR'S>] (IN REVERSE ORDER)
  12. ;       [DB <LIMIT>] (EXCLUSIVE)
  13. ;    NOP    OR    JR   NORM_RET
  14. ;    ...          JR   FIRST LIT MATCH
  15. ;                 JR   SECOND LIT MATCH AND SO ON
  16. ; IN VALUE - A, OUT - A (NUMBER, OR N MATCHED CHAR+80H, OR LETER & CF (BOUND
  17. ;                        ERROR OR NO MATCHED CHARS & NO NUMBER CONVERT SPECIF.)
  18. HEX_CVT: ADD   A," "
  19. HEX_CVT1: EX     (SP),HL
  20.         PUSH   BC
  21.         LD     C,(HL)
  22.         INC    HL
  23.         SRL    C
  24.         JR     NC,H_NOU
  25.         CP     "a"
  26.         JR     C,H_NOU
  27.         CP     0X7A+1;'Z'+1
  28.         JR     NC,H_NOU
  29.         SUB    20H
  30. H_NOU:  PUSH   BC
  31.         SRL    C
  32.         SRL    C
  33.         JR     Z,H_NOM
  34.         LD     B,0
  35.         CPIR
  36.         ADD    HL,BC
  37.         JR     NZ,H_NOM
  38.         LD     A,C
  39.         OR     80H
  40. H_NOM:  POP    BC
  41.         LD     B,"0"
  42.         RR     C
  43.         RR     C             ; SET CF & SF
  44.         JP     P,H_1
  45.         LD     C,10          ; SF=1
  46.         JR     NC,H_TST      ;  CF=0 => 1 IS DEC
  47.         LD     C,(HL)        ;  CF=1 => 3 IS LIMIT
  48.         INC    HL
  49.         JR     H_TST
  50. H_1:    LD     C,16
  51.         JR     C,H_TST       ; SF=0, CF=1 => 2 IS HEX
  52.         LD     C,0FFH        ;       CF=0 => 0 IS NO CONVERT
  53.         LD     B,0
  54. H_TST:  OR     A
  55.         JP     M,H_MTC       ; IS MATCHED CHAR - NO CONVERT
  56.         SUB    B
  57.         JR     C,H_OK
  58.         CP     10
  59.         JR     C,H_T2
  60.         SUB    7
  61.         CP     10
  62.         JR     C,H_OK
  63. H_T2:   CP     C             ; CHECK LIMIT
  64.         CCF
  65.         JR     H_OK
  66.  
  67. H_MTC:  LD     C,(HL)        ; NOP ... VARIANT
  68.         INC    C
  69.         DEC    C
  70.         PUSH   AF
  71.         CALL   NZ,ADD_HL_2A-1
  72.         POP    AF
  73. H_OK:   POP    BC
  74.         EX     (SP),HL
  75.         RET
  76.  
  77. ;-----------------------------------
  78. ; HL += A
  79. ADD_HL_2A_PRIM
  80.         INC    A
  81. ADD2_HL_A
  82. ADD_HL_2A: ADD A,A
  83. ADD_HL_A: ADD  A,L
  84.         LD     L,A
  85.         RET    NC
  86.         INC    H
  87.         RET
  88.  
  89. ;-----------------------------------
  90. ; LDIR COMMAND FOR ALL PAGES
  91. ; USAGE: RST 8
  92. ;        DB <PAGE TO>, <PAGE FROM>
  93. ;             - SPEC VALUE: FF-USE PREVIOS VALUE (FROM VARS R8_FR OR R8_TO)
  94. ;                           FE-MOVE FROM USER MODE
  95. ;   THIS CALL MAY DESTROY AF', BC' & ED_BUF AREA (IN CASE PAGE-PAGE MOVE)
  96. ;    AND UNCONDITIONALY DESTROY AF
  97. RST8:   EX     (SP),HL
  98.         LD     A,(HL)
  99.         INC    HL
  100.         INC    A
  101.         JR     Z,_R8_1
  102.         DEC    A
  103.         LD     (R8_TO),A
  104. _R8_1:  LD     A,(HL)
  105.         INC    HL
  106.         INC    A
  107.         JR     Z,_R8_2
  108.         DEC    A
  109.         LD     (R8_FR),A
  110. _R8_2:  EX     (SP),HL
  111.         PUSH   HL
  112.         PUSH   DE
  113.         PUSH   BC
  114.         RES    6,H
  115.         RES    7,H
  116.         RES    6,D
  117.         RES    7,D
  118.         OR     A
  119.         SBC    HL,DE
  120.         ADD    HL,DE
  121.         JR     C,_R8_3
  122.         EX     DE,HL
  123. _R8_3:  LD     HL,4000H
  124.         OR     A
  125.         SBC    HL,DE
  126.         LD     (TMP_W),HL
  127.         SBC    HL,BC
  128.         POP    BC
  129.         POP    DE
  130.         JR     NC,_R8_4
  131.         LD     BC,(TMP_W)
  132.         EX     (SP),HL
  133.         CALL   _R8_5
  134.         POP    BC
  135.         PUSH   HL
  136.         XOR    A
  137.         LD     H,A
  138.         LD     L,A
  139.         SBC    HL,BC
  140.         LD     B,H
  141.         LD     C,L
  142. _R8_4:  POP    HL
  143. _R8_5:  PUSH   HL
  144.         PUSH   DE
  145.         PUSH   BC
  146.         CALL   _R8_DO
  147.         POP    BC
  148.         POP    HL
  149.         ADD    HL,BC
  150.         EX     DE,HL
  151.         POP    HL
  152.         ADD    HL,BC
  153.         LD     BC,0
  154.         RET
  155.  
  156. _R8_DO: LD     A,(R8_TO)
  157.         EX     DE,HL
  158.         CALL   R8_CVRT
  159.         LD     (TMP_W),A
  160.         EX     DE,HL
  161.         LD     A,(R8_FR)
  162.         CALL   R8_CVRT
  163.         LD     (TMP_W+1),A
  164.         LD     A,H
  165.         AND    D
  166.         OR     3FH
  167.         INC    A             ;DEST & SRC BOTH IN UPPER PAGE ?
  168.         DI
  169.         LD     A,(MEMDSP)
  170.         PUSH   AF
  171.         JR     NZ,S_LDIR     ;NO - USE SIMPLE LDIR COMMAND
  172.         LD     A,(TMP_W+1)
  173.         CP     (IX-_TMP_W)   ;PAGE THE SAME?
  174.         JR     NZ,C_LDIR     ;NO - USE COMPLEX MOVE SUBROUTINE
  175. S_LDIR: LD     A,H
  176.         OR     3FH
  177.         INC    A
  178.         LD     A,(TMP_W+1)
  179.         JR     Z,R8_OK
  180.         LD     A,(TMP_W)
  181. R8_OK:  PUSH   BC
  182.         RST    18H           ;IS SET_PG ROUTINE
  183.         POP    BC
  184.         EI
  185.         LDIR
  186. R8_RET: POP    AF
  187.         RST    18H
  188.         EI
  189.         RET
  190.  
  191. C_LDIR: RLC    C             ; PAGE-PAGE COPY THROUGH BUFFER
  192.         SRL    C
  193.         LD     A,B
  194.         RLA
  195.         JR     NZ,CL_SK
  196.         LD     C,128
  197.         DEC    A
  198. CL_SK:  INC    A
  199.         LD     B,0
  200. CL_LP:  EX     AF,AF'
  201.        EXX
  202.        LD     A,(TMP_W+1)
  203.        RST    18H
  204.        EI
  205.        EXX
  206.        LD     A,C
  207.        PUSH   DE
  208.        LD     DE,ED_BUF
  209.        LDIR
  210.        POP    DE
  211.        LD     C,A
  212.        EXX
  213.        LD     A,(TMP_W)
  214.        RST    18H
  215.        EI
  216.        EXX
  217.        PUSH   HL
  218.        LD     HL,ED_BUF
  219.        LDIR
  220.        POP    HL
  221.        EX     AF,AF'
  222.         DEC    A
  223.         JR     NZ,CL_LP
  224.         JR     R8_RET
  225.  
  226. R8_CVRT        
  227. ;               IF HACK_RBIOS=0
  228. ;               BIT 5,A           ; CONVERT PAGE FROM CALL TO REAL PAGE NUM
  229. ;               ELSE
  230.                 BIT 7,A
  231. ;               ENDIF
  232.         RET    Z
  233. R8_UH:  BIT    7,H
  234.         LD     A,3           ;       PAGE 3
  235.         RET    NZ            ;       PAGE 2  (IN SYS TOO)
  236.         INC    A             ; --->  PAGE 4
  237.         BIT    6,H           ;       PAGE 0
  238.         SET    6,H
  239.         SET    7,H
  240.         RET    NZ
  241.         XOR    A
  242.         RET
  243.  
  244. ;------------------------------------
  245. ; VECTORIZE JUMP PROC
  246. ;
  247. _VJMP:  EX     (SP),HL
  248.         CP     (HL)
  249.         INC    HL
  250.         JR     NC,VJ_OVR
  251.         INC    A
  252.         CALL ADD2_HL_A
  253. VJ_OVR: LD     A,(HL)
  254.         INC    HL
  255.         LD     H,(HL)
  256.         LD     L,A
  257.         EX     (SP),HL
  258.         EX     AF,AF'
  259.        RET
  260.  
  261. ;------------------------------------
  262. ; PRINT PROC
  263. PRN_HL: LD      A,(HL)
  264.        OR      A
  265.        INC     HL
  266.        RET     Z
  267.         RST     20H
  268.        JR      PRN_HL
  269.  
  270. PRN:   EX      (SP),HL
  271.        PUSH    AF
  272.        CALL    PRN_HL
  273.        POP     AF
  274.        EX      (SP),HL
  275.        RET
  276.  
  277. ;.COMMENT @
  278. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
  279. PHEX:  PUSH   AF
  280.        CALL   PHEX1
  281.        LD      A,' '
  282.        RST    20H
  283.        POP    AF
  284.        RET
  285.  
  286. PHEX1:  PUSH    AF
  287.        RRCA
  288.        RRCA
  289.        RRCA
  290.        RRCA
  291.        CALL   DHEX
  292.        POP     AF
  293.        CALL   DHEX
  294.        RET
  295.  
  296. ;
  297. ; TYPE ONE HEX DIGIT
  298. ;
  299. DHEX:   AND     0FH
  300.        ADD     A,90H
  301.        DAA
  302.        ADC     A,40H
  303.        DAA
  304.        RST    20H
  305.        RET
  306.