ORG  0A67BH-95H
LOAD 0A67BH-95H
;
; DOUBLE HAUTEUR
; SUR AMSTRAD CPC 464
;
; M. Gantier 1985
;
; assembleur ZEN (KUMA)
;
;*********************************
; cette routine permet de repro- *
; duire toute chaine en double   *
; hauteur dans la mesure ou elle *
; ne contient pas CHR$(254/255)  *
;*********************************
;
; EQUIVALENCES
;
; points d'entree dans FIRMWARE
;
TXTOUT: EQU 0BB5AH ; car. vers
                   ; l'ecran
LROMEN: EQU 0B906H ; KL L ROM
                   ; ENABLE
ROMBACK: EQU 0B90CH ; KL ROM
                    ; RESTORE
RSXEXT: EQU 0BCD1H ; KL LOG EXT
MATRICE: EQU 3900H ; matrices des
                   ; caracteres
; codes ASCII
;
SYMBO1: EQU 254   ; symboles
SYMBO2: EQU 255   ; utilises
LF: EQU 10 ; line feed
BS: EQU 8 ; backspace
VT: EQU 11 ; vertical tab
EM: EQU 19H
;
; INITIALISATION
;
INIRSX: LD BC,TBLCDE ; adr. TABLE
        LD HL,RSXUSE ;zone travail
        JP RSXEXT ; RSX KL LOG EXT
;
RSXUSE: DS 4 ; zone travail RSX
;
TBLCDE: DW TBLNOM ; adr. noms cdes
        JP DBLHAU ;  "   execution
;
TBLNOM: DB 'DHAU','T'+80H
;
        DB 0 ; FIN TABLE
;
; IX contient adr. du parametre
; A=nbre de param.
; IY indefini (RSX)
; parametre : descripteur
; de chaine (octet 0=long. chaine
; octet 1 et 2=adr. chaine)
;
; programme double hauteur
;
DBLHAU: LD L,(IX+0) ; HL=adr. par.
        LD H,(IX+1)
        LD B,(HL) ; B=long. chaine
        INC HL
        LD E,(HL)
        INC HL
        LD D,(HL) ; DE=adresse
        EX DE,HL  ; HL= " "
;
AFFCAR: LD A,(HL) ; caractere
        PUSH HL ; sauve adresse
        LD C,20H ; espace
        SUB C ; A=dept par rapport
        LD L,A ; a "espace"
        LD H,0 ; mis ds HL
        PUSH BC ; sauve long.
                ; chaine
        LD B,3
MULT:   LD D,H ; cherche matrice
        LD E,L ; du caractere a
        ADD HL,DE ; afficher
        DJNZ MULT
;
        LD DE,MATRICE ; HL=adr.
        ADD HL,DE ; matrice
;
        LD A,EM ; cde SYMBOL
        CALL TXTOUT
        LD A,SYMBO1 ; redefinir
        CALL TXTOUT ; CHR$(SYMBO1)
        LD B,4
LIRE1:  CALL LROMEN ; lire matrice
        LD C,A  ; etat ROM
        LD E,(HL) ; ligne matrice
        LD A,C
        CALL ROMBACK ; restaurer
                     ; etat ROM
        LD A,E
        CALL TXTOUT ; doubler
        CALL TXTOUT
        INC HL ; suite matrice
        DJNZ LIRE1
;
        LD A,EM ; lire 2eme
        CALL TXTOUT ; partie
        LD A,SYMBO2 ; CHR$(SYMBO2)
        CALL TXTOUT
        LD B,4
LIRE2:  CALL LROMEN
        LD C,A
        LD E,(HL)
        LD A,C
        CALL ROMBACK
        LD A,E
        CALL TXTOUT
        CALL TXTOUT
        INC HL
        DJNZ LIRE2
;
        LD A,SYMBO1 ; affiche 1ere
        CALL TXTOUT ; partie car.
        LD A,LF     ; descente
        CALL TXTOUT ; ligne
        LD A,BS ; 1 pas a gauche
        CALL TXTOUT
        LD A,SYMBO2 ; 2eme partie
        CALL TXTOUT
        LD A,VT ; remonte 1 ligne
        CALL TXTOUT
;
        POP BC ; long. restante
               ; chaine
        POP HL ; adr. chaine
        INC HL ; + 1 car.
        DJNZ AFFCAR ; continuer
;
        RET
;
        END