; test14.asm ; ; Programme de test du 8031 N° 14 ; Test de la bibliotheque mathematique entiers 8 bits ; ; (C) CHAMOUARD 2001 ; (Libre de droits pour utilisation non ; commerciale et à vos propres risques) ; ; Matériel requis : ; carte 8031 base 1, programme chargé en 2000h ; afficheur/clavier LCD 2*16 aux adresses spécifiées ci-dessous ; Bibliothèques requises : ; libasc.asm decodages ASCII ; liblcd.asm afficheur ; libcla2.asm clavier 1-8 touches ; libi16.asm entiers 16 bits ; Sortie : ; affichage avant et après l'opération testée (voir fin du fichier) ; appuyer sur un touche pour faire avancer le programme word LcdCmdReadAdd, #E002h word LcdCmdWriteAdd, #E000h word LcdDataReadAdd, #E003h word LcdDataWriteAdd,#E001h word ClaAdd, #E040h byte ClaAntiRebonDly,#20 word Mext1, #4000h word Mext2, #4001h direct RE10, 10h direct RE20, 11h byte Mint1, #3ch byte Mint2, #3dh ORG 2000h ; Debut du programme ljmp Begin Begin: mov SP,#3fh ; Debut de pile en 40h lcall LcdInit lcall LcdCurseurOff lcall LcdHome ; Test transferts en memoire externe mov DPTR,#Mext ; Avant RE1=34h RE2=78h lcall LcdWriteStringCode ; Apres RE1=78h RE2=34h mov RE10,#34h mov RE20,#78h clr C lcall AffRE1et2 mov DPTR,#Mext1 lcall I08WriteExtRE1 mov DPTR,#Mext2 lcall I08WriteExtRE2 mov DPTR,#Mext1 lcall I08ReadExtRE2 mov DPTR,#Mext2 lcall I08ReadExtRE1 clr C lcall AffCetRE1et2 lcall ToucheClav lcall LcdHome ; Test transferts en memoire programme mov DPTR,#Mprog ; Avant RE1=78h RE2=34h lcall LcdWriteStringCode ; Apres RE1=43h RE2=98h lcall AffRE1et2 mov DPTR,#Mprog1 lcall I08ReadProgRE1 mov DPTR,#Mprog2 lcall I08ReadProgRE2 clr C lcall AffCetRE1et2 lcall ToucheClav lcall LcdHome ; Test transferts en memoire interne mov DPTR,#Mint ; Avant RE1=34h RE2=78h lcall LcdWriteStringCode ; Apres RE1=78h RE2=34h mov RE10,#34h mov RE20,#78h lcall AffRE1et2 mov R0,#Mint1 lcall I08WriteIntRE1 mov R0,#Mint2 lcall I08WriteIntRE2 mov R0,#Mint1 lcall I08ReadIntRE2 mov R0,#Mint2 lcall I08ReadIntRE1 clr C lcall AffCetRE1et2 lcall ToucheClav lcall LcdHome ; Test decalage gauche mov DPTR,#MShLe1 ; Avant RE1=b5h RE2=55h lcall LcdWriteStringCode ; Apres RE1=d4h RE2=55h mov RE10,#b5h mov RE20,#55h lcall AffRE1et2 mov A,#2 lcall I08ShLeRE1 lcall AffCetRE1et2 lcall ToucheClav lcall LcdHome ; Test decalage droite mov DPTR,#MShRi1 ; Avant RE1=d5h RE2=55h lcall LcdWriteStringCode ; Apres RE1=35h RE2=55h mov RE10,#d5h mov RE20,#55h lcall AffRE1et2 mov A,#2 lcall I08ShRiRE1 lcall AffCetRE1et2 lcall ToucheClav lcall LcdHome ; Test decalage gauche mov DPTR,#MShLe2 ; Avant RE1=55h RE2=b5h lcall LcdWriteStringCode ; Apres RE1=55h RE2=d4h mov RE10,#55h mov RE20,#b5h lcall AffRE1et2 mov A,#2 lcall I08ShLeRE2 lcall AffCetRE1et2 lcall ToucheClav lcall LcdHome ; Test decalage droite mov DPTR,#MShRi2 ; Avant RE1=55h RE2=d4h lcall LcdWriteStringCode ; Apres RE1=55h RE2=d5h mov RE10,#55h mov RE20,#d5h lcall AffRE1et2 mov A,#2 lcall I08ShRiRE2 lcall AffCetRE1et2 lcall ToucheClav mov R2,#HIGH(Data) ; Test fonctions arithmetiques mov R3,#LOW(Data) Boucle: mov DPH,R2 mov DPL,R3 mov A,#0 movc A,@A+DPTR jnz Gotest ljmp Begin ; Retour au premier test Gotest: lcall LcdHome mov DPH,R2 mov DPL,R3 lcall LcdWriteStringCode ; Ecriture de la fonction testee mov DPH,R2 mov DPL,R3 mov A,#8 movc A,@A+DPTR mov RE10,A ; 1er argument mov A,#9 movc A,@A+DPTR mov RE20,A ; 2nd argument lcall AffRE1et2 ; Affichage des arguments mov A,#LOW(Suite) push ACC mov A,#HIGH(Suite) push ACC ; Programmation de l'adresse de retour mov DPH,R2 mov DPL,R3 mov A,#10 movc A,@A+DPTR push ACC mov A,#11 movc A,@A+DPTR mov DPL,A pop DPH ; Dans DPTR l'adresse de la fonction a tester mov A,#0 jmp @A+DPTR ; Jump dans la fonction a tester Suite: lcall AffCetRE1et2 ; Affichage resultats lcall ToucheClav mov A,#12 ; Passage au test suivant add A,R3 mov R3,A mov A,#0 addc A,R2 mov R2,A ljmp Boucle Data: ; Affichage RE1 RE2 Fonction RE1 RE2 C ; Init Init Fina Fina ; RW/Ext 34h 78h 78h 34h 0 ; R/Prog 78h 34h 43h 98h 0 ; RW/Int 34h 78h 78h 34h 0 ; ShLeR1 b5h 55h d4h 55h 0 ; ShRiR1 d5h 55h 35h 55h 0 ; ShLeR2 55h b5h 55h d4h 0 ; ShRiR2 55h d5h 55h 35h 0 db "Clear ",0, 78h, 34h, HIGH(I08ClearRE1), LOW(I08ClearRE1) ; 00h 34h 0 db "UAdd ",0, 7fh, 80h, HIGH(I08UAdd), LOW(I08UAdd) ; ffh 80h 0 db "UAdd ",0, 7fh, 81h, HIGH(I08UAdd), LOW(I08UAdd) ; 00h 81h 1 db "USub ",0, 7fh, 7eh, HIGH(I08USub), LOW(I08USub) ; 01h 7eh 0 db "USub ",0, 7fh, 80h, HIGH(I08USub), LOW(I08USub) ; ffh 80h 1 db "UMul ",0, 0ch, 0eh, HIGH(I08UMul), LOW(I08UMul) ; a8h 0eh 0 db "UMul ",0, 1ch, 0eh, HIGH(I08UMul), LOW(I08UMul) ; 88h 0eh 1 db "UDiv ",0, 79h, 0ch, HIGH(I08UDiv), LOW(I08UDiv) ; 0ah 01h 0 db "UDiv ",0, 79h, 00h, HIGH(I08UDiv), LOW(I08UDiv) ; ffh 00h 1 db "Neg ",0, 00h, 00h, HIGH(I08NegRE1), LOW(I08NegRE1) ; 00h 00h 0 db "Neg ",0, 7fh, 00h, HIGH(I08NegRE1), LOW(I08NegRE1) ; 81h 00h 0 db "Neg ",0, 80h, 00h, HIGH(I08NegRE1), LOW(I08NegRE1) ; 80h 00h 1 db "Sgn ",0, 7fh, 00h, HIGH(I08SgnRE1), LOW(I08SgnRE1) ; 7fh 00h 0 db "Sgn ",0, 80h, 00h, HIGH(I08SgnRE1), LOW(I08SgnRE1) ; 80h 00h 1 db "Abs ",0, 7fh, 00h, HIGH(I08AbsRE1), LOW(I08AbsRE1) ; 7fh 00h 0 db "Abs ",0, 81h, 00h, HIGH(I08AbsRE1), LOW(I08AbsRE1) ; 7fh 00h 0 db "Abs ",0, 80h, 00h, HIGH(I08AbsRE1), LOW(I08AbsRE1) ; 80h 00h 1 db "SAdd ",0, 12h, 1eh, HIGH(I08Add), LOW(I08Add) ; 30h 1eh 0 db "SAdd ",0, 7fh, 01h, HIGH(I08Add), LOW(I08Add) ; 80h 01h 1 db "SAdd ",0, eeh, e2h, HIGH(I08Add), LOW(I08Add) ; d0h e2h 0 db "SAdd ",0, 80h, ffh, HIGH(I08Add), LOW(I08Add) ; 7fh ffh 1 db "SAdd ",0, 7fh, 80h, HIGH(I08Add), LOW(I08Add) ; ffh 80h 0 db "SSub ",0, 82h, 02h, HIGH(I08Sub), LOW(I08Sub) ; 80h 02h 0 db "SSub ",0, 82h, 03h, HIGH(I08Sub), LOW(I08Sub) ; 7fh 03h 1 db "SSub ",0, 7eh, ffh, HIGH(I08Sub), LOW(I08Sub) ; 7fh ffh 0 db "SSub ",0, 7eh, feh, HIGH(I08Sub), LOW(I08Sub) ; 80h feh 1 db "SSub ",0, 7fh, 40h, HIGH(I08Sub), LOW(I08Sub) ; 3fh 40h 0 db "SMul ",0, 0bh, 0bh, HIGH(I08Mul), LOW(I08Mul) ; 79h 0bh 0 db "SMul ",0, 0ch, 0bh, HIGH(I08Mul), LOW(I08Mul) ; 84h 0bh 1 db "SMul ",0, 20h, 0bh, HIGH(I08Mul), LOW(I08Mul) ; 60h 0bh 1 db "SMul ",0, 0bh, f5h, HIGH(I08Mul), LOW(I08Mul) ; 87h f5h 0 db "SMul ",0, 0ch, f5h, HIGH(I08Mul), LOW(I08Mul) ; 7ch f5h 1 db "SMul ",0, 20h, f5h, HIGH(I08Mul), LOW(I08Mul) ; a0h f5h 1 db "SMul ",0, f5h, f5h, HIGH(I08Mul), LOW(I08Mul) ; 79h f5h 0 db "SMul ",0, f4h, f5h, HIGH(I08Mul), LOW(I08Mul) ; 84h f5h 1 db "SMul ",0, e0h, f5h, HIGH(I08Mul), LOW(I08Mul) ; 60h f5h 1 db "SDiv ",0, 7fh, 01h, HIGH(I08Div), LOW(I08Div) ; 7fh 00h 0 db "SDiv ",0, 7fh, 7fh, HIGH(I08Div), LOW(I08Div) ; 01h 00h 0 db "SDiv ",0, 23h, 10h, HIGH(I08Div), LOW(I08Div) ; 02h 03h 0 db "SDiv ",0, 80h, 01h, HIGH(I08Div), LOW(I08Div) ; 80h 00h 0 db "SDiv ",0, dch, 10h, HIGH(I08Div), LOW(I08Div) ; feh fch 0 db "SDiv ",0, 7fh, ffh, HIGH(I08Div), LOW(I08Div) ; 81h 00h 0 db "SDiv ",0, 80h, ffh, HIGH(I08Div), LOW(I08Div) ; 80h 00h 1 db "SDiv ",0, 7fh, 00h, HIGH(I08Div), LOW(I08Div) ; 7fh 00h 1 db "SDiv ",0, 80h, 00h, HIGH(I08Div), LOW(I08Div) ; 80h 00h 1 db 0 Mprog1: db 43h Mprog2: db 98h Mext: db "RW/Ext ",0 Mprog: db "R/Prog ",0 Mint: db "RW/Int ",0 MShLe1: db "ShLeR1 ",0 MShRi1: db "ShRiR1 ",0 MShLe2: db "ShLeR2 ",0 MShRi2: db "ShRiR2 ",0 COn: db "C=1 ",0 COff: db "C=0 ",0 ToucheClav: lcall ClaRead jz ToucheClav lcall ClaAntiRebond ret AffCetRE1et2: push PSW mov A,#16 lcall LcdCurseur pop PSW mov DPTR,#COn jc AffCetRE1et2S mov DPTR,#COff AffCetRE1et2S: lcall LcdWriteStringCode AffRE1et2: mov A,RE10 lcall LcdWriteByte mov A,#32 lcall LcdWriteChar mov A,RE20 lcall LcdWriteByte ret INCLUDE lib\liblcd.asm INCLUDE lib\libcla2.asm INCLUDE lib\libasc.asm INCLUDE lib\libi08.asm