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 &emspDEFW 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: 1220
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 - 12 - la Routine d'Ecriture de Secteurs (SOS Programmeurs)
» Coding » Fdc - 21 - Programme de Copie (SOS Programmeurs)
» Coding » FDC - 23 - Etude de la Piste (SOS Programmeurs)
» Coding » Fdc - 25 - Formatage et Ecriture Piste (SOS Programmeurs)
» Coding » Fdc - 23 - Ecraser les Secteurs (SOS Programmeurs)
» Coding » Fdc - 05 - Deplacement Tete (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.732-desktop/c
Page créée en 267 millisecondes et consultée 2828 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.