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 EFFLINESOS Programmeurs n°1
★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 142 millisecondes et consultée 2256 foisL'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. |
|
|