CODING ★ CODING - Routines annexes ★

Fdc - 07 - Routines Annexe (SOS Programmeurs)

SOUS PROGRAMMES DIVERS

Ci dessous la longue litanie des sous programmes assurant une bonne présentation de l'ensemble . Les heureux possesseurs de L'ASSEMBLEUR COULE DE SOURCE VOLUME 1 , ne seront pas dépaysés ...

;
;- Initialisation programme -
;
INIPROG LD BC,#0000 ;Fixer couleurs
CALL #BC38 ;Bord
LD BC,0
XOR A
CALL #BC32 ;Paper
LD A,1
LD BC,#0F0F
CALL #BC32 ;Pen
XOR A
CALL #BB96 ;Paper 0
LD A,1
CALL #BB90 ;Pen 1
LD A,2
CALL #BC0E ;Mode 2
XOR A
LD (DRSELEC),A ;DRIVE A
ADD A,#41 ;Decalage ASCII pour "A"ou"B"
LD HL,TDRSELE+20
LD (HL),A
TYPE CALL #B900 ;Determiner type CPC et initialiser adresse editeur basic
LD A,(#DE01)
CP #71
JR Z,L464
CP #C9
JR NZ,L664
L6128 LD HL,#BD5E
JR INIT
L664 LD HL,#BD5B
JR INIT
L464 LD HL,#BD3A
INIT LD (EDIT1+1),HL
CALL #B903
LD A,41
LD (WAITPIS),A
LD HL,TUS
JP PRT
;
INPUPRT2 CALL PRTLOC2 ;Afficher message "INPUT"
INPUNB PUSH HL ;Entree d'un nombre de 1 a 5 chiffre deci ou hexa ("&")
PUSH DE
PUSH BC
PUSH AF
LD HL,0
LD (VALEUR),HL
LD HL,BUFFNB ;RAZ buffer nombre en ASCII
LD B,5
RAZBNB LD (HL),"0"
INC HL
DJNZ RAZBNB
LD HL,TTXEDIT ;Adresse buffer édition
LD (HL),0 ;Annuler
CALL EDITNB ;Editer
;
;- Specifique decimal -
;
DECI LD HL,TTXEDIT
LD A,(LENEDIT) ;Tester presence caracteres non decimaux
LD B,A
BCLDECI LD A,(HL)
INC HL
CP "&" ;Si 1er = "&" c'est de l'hexadecimal
JR Z,HEXA
CP "0"
JR C,RECNB
CP "à"
JR NC,RECNB
DJNZ BCLDECI
JR OKDECI
RECNB CALL CHVIDE ;Si non decimal detecte recommencer
JR DECI
;
OKDECI CALL RANGENB ;Ranger nombre
LDIR
;
ASCDECI LD C,5 ;Convertir ASC decimal en valeur numerique
LD HL,BUFFNB
LD IX,DIXMILL
SUIVANT LD A,(HL)
CP "0"
JR NZ,PASZERO
CONT INC IX
INC IX
INC HL
DEC C
JR Z,EXITNB
JR SUIVANT
PASZERO LD E,(IX+0)
LD D,(IX+1)
;SUB #30
LD B,A
PUSH HL
LD HL,(VALEUR)
ADDI ADD HL,DE
DJNZ ADDI
LD (VALEUR),HL
POP HL
JR CONT
;
DIXMILL DEFW 10000
MILLE DEFW 1000
CENT DEFW 100
DIX DEFW 10
UN DEFW 1
;
;- Specifique hexadecimal -
;
HEXA DEC B ;Ignorer "&"
BCLHEXA LD A,(HL) ;Tester si presence caractere non valide
CP "0"
JR C,RECNB ;Si caractere non hexadecimal , refaire
CP "G"
JR NC,RECNB
INC HL
DJNZ BCLHEXA
;
CALL RANGENB ;Ranger nombre
INC HL
DEC C
LDIR
;
HEXVAL LD IX,BUFFNB ;Conv. ASCII Hex. en val.16 Bits
LD DE,4096
LD HL,0
LD B,4
BCLHXVA LD A,(IX+0)
;SUB #30
JR C,BCLCALC
;SUB 7
BCLCALC OR A
JR Z,FINCALC
ADD HL,DE
DEC A
JR BCLCALC
FINCALC PUSH BC
LD B,4
DIVIS SRL D
RR E
DJNZ DIVIS
POP BC
INC IX
DJNZ BCLHXVA
LD (VALEUR),HL
EXITNB POP AF
POP BC
POP DE
POP HL
RET
;
RANGENB LD A,(LENEDIT) ;Ranger nombre dans buffer completer vides par 0
LD C,A
LD B,0
LD A,5
;SUB C
LD D,0
LD E,A
LD HL,BUFFNB
ADD HL,DE
EX DE,HL
LD HL,TTXEDIT
RET
;
EDITNB LD A,5
LD (MAXEDIT),A ;Pour un nombre , pas plus de 5 caracteres
EDIT CALL #BB78 ;Memoriser position curseur
LD (CURPOS),HL
REFAIRE LD HL,TTXEDIT ;Edition d'une chaine de caracteres
CALL #B900 ;ROM BASIC
EDIT1 CALL #BD3A ;Adresse editeur 464 modifiee par INIT si pas 464
CALL #B903 ;Deconnecter ROM BASIC
LD B,0
LD HL,TTXEDIT
COMPTE LD A,(HL)
OR A
JR Z,FINI
INC B
INC HL
JR COMPTE
FINI LD A,B
LD (LENEDIT),A ;Longueur reellement editee
OR A
JR Z,CHVIDE ;Interdire edition nulle
LD A,(MAXEDIT)
CP B ;ou plus longue que MAXEDIT
RET NC
CHVIDE LD A,7
CALL #BB5A
LD HL,(CURPOS)
CALL #BB75
JR REFAIRE ;Mauvaise edition recommencer
;
PRTBIN2 LD A,H ;Conversion binaire 16 bits
CALL PRTBIN
LD A,L
;
PRTBIN PUSH BC ;8 bits
PUSH AF
LD C,A
LD B,8
BCLBIN LD A,#30
;RLC C
JR NC,BINZERO
INC A
BINZERO CALL #BB5A
DJNZ BCLBIN
POP AF
POP BC
JP SPACE
;
PRTHEX2 LD A,"&" ;Afficher en HEXA
CALL #BB5A
LD A,H
CALL PRTHEX1 ;16 Bits
LD A,8
CALL #BB5A
LD A,L
;
PRTHEX1 PUSH AF ;8 Bits
PUSH AF
;RRCA
;RRCA
;RRCA
;RRCA
CALL AFFHEX
POP AF
CALL AFFHEX
POP AF
JP SPACE
;
AFFHEX AND #F
ADD A,#30
CP #3A
JR C,OKHEX
ADD A,7
OKHEX JP #BB5A
;
PRTDECI PUSH HL ;Conversion decimale 5 chiffres
PUSH DE
PUSH BC
PUSH AF
LD HL,(VALEUR)
DEC1 LD B,5
DEC2 LD IY,DIXMILL
CONDEC LD E,(IY+0)
LD D,(IY+1)
LD A,#30
CALCUL AND A
;SBC HL,DE
JR C,CARRY
INC A
JR CALCUL
CARRY CALL #BB5A
ADD HL,DE
INC IY
INC IY
DJNZ CONDEC
FINCONV POP AF
POP BC
POP DE
POP HL
JP SPACE
;
TROICON LD HL,TCONVER ;Routine conversion appelee par menu
CALL PRT ;effectue 3 conversions 16 bits successives
CALL INPUNB
LD HL,TCON2
CALL PRT
LD HL,(VALEUR)
CALL PRTBIN2
CALL PRTHEX2
CALL PRTDECI
RET
;
TCONVER DEFB " CONVERTIR ?"," "+#80
TCON2 DEFB " ="," "+#80
;
LIST
VALEUR DEFW 0 ;Variables et Buffers pour edition numerique
NOLIST
BUFFNB DEFS 5
TTXEDIT DEFS 256,0
MAXEDIT DEFB 0
LENEDIT DEFB 0
CURPOS DEFW 0
;
;- Affichage textes -
;
PRTCR CALL PRT ;Affiche avec SL+CR
JR CR
;
PRTLOC2 LD IY,#0217 ;Affichage sur avant derniere ligne
PRTLOC PUSH AF ;Affichage avec locate
PUSH HL
PUSH IY ;IY passe dans HL
POP HL
CALL #BB75 ;LOCATE
POP HL ;Adresse du texte
JR BCLPRT
;
PRTDRIV PUSH HL ;Afficher drive selectionne
LD HL,TDRSELE
CALL PRT
POP HL
RET
;
PRT PUSH AF ;Affiche sans SL+CR
BCLPRT LD A,(HL)
CP #80 ;Bit 7 mis = fin du texte
JR NC,FINPRT
CALL #BB5A
INC HL
JR BCLPRT
FINPRT AND %01111111 ;Enlever bit 7
INC HL ;Pointer debut eventuel texte suivant
PRT2 CALL #BB5A ;Afficher caractere et retour
POP AF
RET
;
;- Passage a la ligne -
;
CR PUSH AF
LD A,10
CALL #BB5A
LD A,13
JR PRT2
;
;- Espace -
;
SPACE PUSH AF
LD A,32
JR PRT2
;
;- Video inverse -
;
INV PUSH AF
LD A,24
JR PRT2
;
;- Efface ligne en cours -
;
EFFLIN1 PUSH AF
LD A,13
CALL #BB5A
JR EF1
EFFLINE PUSH AF
EF1 LD A,18
JR PRT2
;
;- Oui ou non -
;
OUNO PUSH HL
LD HL,TOUNO
CALL PRT
POP HL
CALL #BB06
CALL EFFLINE
AND #DF ;Majuscules
CP "N"
RET Z
CP "O" ;Oui = CARRY mis
JR NZ,OUNO
;SCF
RET
;
TOUNO DEFB 24," OK ? (O/N) ",24,7,13+#80
;
;- Afficher un message d'erreur en bas de l'ecran -
;
AFFERR LD IY,#0218
CALL PRTLOC
CALL #BB06
XOR A
JP EFFLINE

SOS Programmeurs n°1

★ ANNÉE: ???
★ AUTEUR: MICHEL MAIGROT

Page précédente : Fdc - 06 - Entree Programme
★ AMSTRAD CPC ★ DOWNLOAD ★

Dump disquette:
» SOS  Programmeurs  1    FRENCHDATE: 2011-05-26
DL: 1006
TYPE: ZIP
SiZE: 95Ko
NOTE: 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Fdc - 23 - Ecraser les Secteurs (SOS Programmeurs)
» Coding » Fdc - 25 - Formatage et Ecriture Piste (SOS Programmeurs)
» Coding » Fdc - 02 - Transmission Fdc (SOS Programmeurs)
» Coding » Fdc - 21 - Programme de Copie (SOS Programmeurs)
» Coding » Fdc - 22 - Analyse de la Piste (SOS Programmeurs)
» Coding » Fdc - 14 - Creation d'un Piste a Partir du Buffer (SOS Programmeurs)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 325 millisecondes et consultée 2253 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.