Top secrets sources NedoPC pentevo

Rev

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


;LAST UPDATE: 21.11.2013 savelij

;.Z80
;-----------------------------------
; NUMBER CONVERT/LETTER SEARCH SUB
; USAGE: CALL HEX_CVT
;        DB <CODE> - BIT 0  : UPCASE LETTER
;                    BIT 1,2: 0-NO NUMBER CONVERT, 1-DEC NUM, 2-HEX NUM,
;                             3-USE LIMIT
;       [DB <MATCHED CHAR'S>] (IN REVERSE ORDER)
;       [DB <LIMIT>] (EXCLUSIVE)
;    NOP    OR    JR   NORM_RET
;    ...          JR   FIRST LIT MATCH
;                 JR   SECOND LIT MATCH AND SO ON
; IN VALUE - A, OUT - A (NUMBER, OR N MATCHED CHAR+80H, OR LETER & CF (BOUND
;                        ERROR OR NO MATCHED CHARS & NO NUMBER CONVERT SPECIF.)
HEX_CVT: ADD   A," "
HEX_CVT1: EX     (SP),HL
        PUSH   BC
        LD     C,(HL)
        INC    HL
        SRL    C
        JR     NC,H_NOU
        CP     "a"
        JR     C,H_NOU
        CP     0X7A+1;'Z'+1
        JR     NC,H_NOU
        SUB    20H
H_NOU:  PUSH   BC
        SRL    C
        SRL    C
        JR     Z,H_NOM
        LD     B,0
        CPIR
        ADD    HL,BC
        JR     NZ,H_NOM
        LD     A,C
        OR     80H
H_NOM:  POP    BC
        LD     B,"0"
        RR     C
        RR     C             ; SET CF & SF
        JP     P,H_1
        LD     C,10          ; SF=1
        JR     NC,H_TST      ;  CF=0 => 1 IS DEC
        LD     C,(HL)        ;  CF=1 => 3 IS LIMIT
        INC    HL
        JR     H_TST
H_1:    LD     C,16
        JR     C,H_TST       ; SF=0, CF=1 => 2 IS HEX
        LD     C,0FFH        ;       CF=0 => 0 IS NO CONVERT
        LD     B,0
H_TST:  OR     A
        JP     M,H_MTC       ; IS MATCHED CHAR - NO CONVERT
        SUB    B
        JR     C,H_OK
        CP     10
        JR     C,H_T2
        SUB    7
        CP     10
        JR     C,H_OK
H_T2:   CP     C             ; CHECK LIMIT
        CCF
        JR     H_OK

H_MTC:  LD     C,(HL)        ; NOP ... VARIANT
        INC    C
        DEC    C
        PUSH   AF
        CALL   NZ,ADD_HL_2A-1
        POP    AF
H_OK:   POP    BC
        EX     (SP),HL
        RET

;-----------------------------------
; HL += A
ADD_HL_2A_PRIM
        INC    A
ADD2_HL_A
ADD_HL_2A: ADD A,A
ADD_HL_A: ADD  A,L
        LD     L,A
        RET    NC
        INC    H
        RET

;-----------------------------------
; LDIR COMMAND FOR ALL PAGES
; USAGE: RST 8
;        DB <PAGE TO>, <PAGE FROM>
;             - SPEC VALUE: FF-USE PREVIOS VALUE (FROM VARS R8_FR OR R8_TO)
;                           FE-MOVE FROM USER MODE
;   THIS CALL MAY DESTROY AF', BC' & ED_BUF AREA (IN CASE PAGE-PAGE MOVE)
;    AND UNCONDITIONALY DESTROY AF
RST8:   EX     (SP),HL
        LD     A,(HL)
        INC    HL
        INC    A
        JR     Z,_R8_1
        DEC    A
        LD     (R8_TO),A
_R8_1:  LD     A,(HL)
        INC    HL
        INC    A
        JR     Z,_R8_2
        DEC    A
        LD     (R8_FR),A
_R8_2:  EX     (SP),HL
        PUSH   HL
        PUSH   DE
        PUSH   BC
        RES    6,H
        RES    7,H
        RES    6,D
        RES    7,D
        OR     A
        SBC    HL,DE
        ADD    HL,DE
        JR     C,_R8_3
        EX     DE,HL
_R8_3:  LD     HL,4000H
        OR     A
        SBC    HL,DE
        LD     (TMP_W),HL
        SBC    HL,BC
        POP    BC
        POP    DE
        JR     NC,_R8_4
        LD     BC,(TMP_W)
        EX     (SP),HL
        CALL   _R8_5
        POP    BC
        PUSH   HL
        XOR    A
        LD     H,A
        LD     L,A
        SBC    HL,BC
        LD     B,H
        LD     C,L
_R8_4:  POP    HL
_R8_5:  PUSH   HL
        PUSH   DE
        PUSH   BC
        CALL   _R8_DO
        POP    BC
        POP    HL
        ADD    HL,BC
        EX     DE,HL
        POP    HL
        ADD    HL,BC
        LD     BC,0
        RET

_R8_DO: LD     A,(R8_TO)
        EX     DE,HL
        CALL   R8_CVRT
        LD     (TMP_W),A
        EX     DE,HL
        LD     A,(R8_FR)
        CALL   R8_CVRT
        LD     (TMP_W+1),A
        LD     A,H
        AND    D
        OR     3FH
        INC    A             ;DEST & SRC BOTH IN UPPER PAGE ?
        DI
        LD     A,(MEMDSP)
        PUSH   AF
        JR     NZ,S_LDIR     ;NO - USE SIMPLE LDIR COMMAND
        LD     A,(TMP_W+1)
        CP     (IX-_TMP_W)   ;PAGE THE SAME?
        JR     NZ,C_LDIR     ;NO - USE COMPLEX MOVE SUBROUTINE
S_LDIR: LD     A,H
        OR     3FH
        INC    A
        LD     A,(TMP_W+1)
        JR     Z,R8_OK
        LD     A,(TMP_W)
R8_OK:  PUSH   BC
        RST    18H           ;IS SET_PG ROUTINE
        POP    BC
        EI
        LDIR
R8_RET: POP    AF
        RST    18H
        EI
        RET

C_LDIR: RLC    C             ; PAGE-PAGE COPY THROUGH BUFFER
        SRL    C
        LD     A,B
        RLA
        JR     NZ,CL_SK
        LD     C,128
        DEC    A
CL_SK:  INC    A
        LD     B,0
CL_LP:  EX     AF,AF'
        EXX
        LD     A,(TMP_W+1)
        RST    18H
        EI
        EXX
        LD     A,C
        PUSH   DE
        LD     DE,ED_BUF
        LDIR
        POP    DE
        LD     C,A
        EXX
        LD     A,(TMP_W)
        RST    18H
        EI
        EXX
        PUSH   HL
        LD     HL,ED_BUF
        LDIR
        POP    HL
        EX     AF,AF'

        DEC    A
        JR     NZ,CL_LP
        JR     R8_RET

R8_CVRT        
;               IF HACK_RBIOS=0
;               BIT 5,A           ; CONVERT PAGE FROM CALL TO REAL PAGE NUM
;               ELSE
                BIT 7,A
;               ENDIF
        RET    Z
R8_UH:  BIT    7,H
        LD     A,3           ;       PAGE 3
        RET    NZ            ;       PAGE 2  (IN SYS TOO)
        INC    A             ; --->  PAGE 4
        BIT    6,H           ;       PAGE 0
        SET    6,H
        SET    7,H
        RET    NZ
        XOR    A
        RET

;------------------------------------
; VECTORIZE JUMP PROC
;
_VJMP:  EX     (SP),HL
        CP     (HL)
        INC    HL
        JR     NC,VJ_OVR
        INC    A
        CALL ADD2_HL_A
VJ_OVR: LD     A,(HL)
        INC    HL
        LD     H,(HL)
        LD     L,A
        EX     (SP),HL
        EX     AF,AF'
        RET

;------------------------------------
; PRINT PROC
PRN_HL: LD      A,(HL)
        OR      A
        INC     HL
        RET     Z
        RST     20H
        JR      PRN_HL

PRN:   EX      (SP),HL
        PUSH    AF
        CALL    PRN_HL
        POP     AF
        EX      (SP),HL
        RET

;.COMMENT @
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
PHEX:  PUSH   AF
        CALL   PHEX1
        LD      A,'
'
        RST    20H
        POP    AF
        RET

PHEX1:  PUSH    AF
        RRCA
        RRCA
        RRCA
        RRCA
        CALL   DHEX
        POP     AF
        CALL   DHEX
        RET

;
; TYPE ONE HEX DIGIT
;
DHEX:   AND     0FH
        ADD     A,90H
        DAA
        ADC     A,40H
        DAA
        RST    20H
        RET