title Z80 ENKODER, KONZOLA SK5/2 subttl Dodano poenostavljeno klicanje V2.1 ;.XLIST .COMMENT @rem Revizija 2: 10.3.1991 - V switch stavku za CCIR9 ton ni bilo ukaza LD HL, CCIR9 - Label Z1NAP premaknjena za 2 ukaza navzgor - Label ZASED je predelana tako, da gori PAGE ko je BUSY - Dodatno testiranje BUSY v rutini KEY Revizija 2.1 : 19.3.1993 - Omogoceno ponovno klicanje zadnje klicane stevilke samo s pritiskom na tipko * - 20.3.1993 Tipka # ne podalj{uje ve~ poziva ampak ga lahko v poljubnem trenutku prekine. Za podaljsevanje klica je predvidena tipka * ASSEMBLERSKI IZPIS KRMILNEGA PROGRAMA ZA Z80 ENKODER brez tabele za sinusno digitaliziranje frekvenc po ZVEI in CCIR normi. Stati~ne spremenljivke v sistemu: (Indeksna registra sta razdeljena s sinteti'nimi ukazi na vi{ji in na ni`ji byte: XH in XL ter YH in YL). Registri (8 bitni) so nato razdeljeni `e na 4+4 bite tako, da je v enem 8 bitnem registru mo`no shraniti po dve cifri, ki jih beremo na za~etku za dolo~anje konfiguracije sistema (1.cifra 2., 3.cifra ter MODE). Ker ne uporabljmo prekinitev je I (interrupt) register uporabljen za MODE in pa kot "flag vektor" za podprograme. Ker v hardveru ni uporabljen RAM za sklad (stack) v sistemu ni mo`no uporabljati ukaze, ki uporabljajo sklad (CALL, RST in prekinitve). V indeksnih registrih se hranijo cifre za normalen in skupinski klic. R3, R4, R5 so cifre normalnega klica. R3', R4', R5' pa dodatne cifre za klicanje zaporedja (skupine) im povedo zgornjo ali spodnjo stevilko v zaporedju klicev. Cifre so zbrisane ce vsebujejo 0Fh. XH HL +--------+--------+--------+--------+ | ?? | ?? | R3' | R3 | IX +--------+--------+--------+--------+ YH YL +--------+--------+--------+--------+ | R4 | R5 | R4' | R5' | IY +--------+--------+--------+--------+ 15 12 11 8 7 4 3 0 Interrupt register hrani konfiguracijo (mode) sistema. pomen bitov je slede~: ____ I0: ZVEI/CCIR norma I1: 70/100 ms dol`ina tona I2: 2/3 fiksirane cifre I3: 0/G ton I4: telefon vektor vrnitve podprograma 1=KEYSCAN/KEYPA I5: piskaj vektor KEYRTN/TELRTN I6: zastavica za skupinski klic GRKLIC I7: ni uporabljen Pomen bitov OUT porta 0: Pomen bitov OUT porta 1: ____ D7: mode D7: mute D6: /MSD display D6: on line pulzi D5: /NSD display D5: T (PTT) D4: /LSD display D4: P (Page) D3: O3 bus display/kbd D3: D/A konverter msb D2: O2 bus D2: D/A konverter D1: O1 bus D1: D/A konverter D0: O0 bus D0: D/A konverter lsb Pomen bitov IN porta 0: ____ D5: BUSY == READY vhod iz oddajnika D4: DIAL vhod iz telefona D3: } D2: }} vrste iz tipkovnice D1: }} D0: } @rem .Z80 .SALL P0 EQU 0FEH ;port st. 0 P1 EQU 0FDH ;port st. 1 X EQU 0DDH ;byte za sinteticne ukaze Y EQU 0FDH ;byte za sinteticne ukaze MOV MACRO index, dest, data ;sinteticni Z80 ukaz. DEFB index LD dest,data ENDM ;primer MOV X A, L MOVXL MACRO data ;Sinteticni Z80 ukaz DEFB X LD L,data ENDM MOVXH MACRO data ;Sinteticni Z80 ukaz DEFB X LD H,data ENDM MOVYL MACRO data ;Sinteticni Z80 ukaz DEFB Y LD L,data ENDM MOVYH MACRO data ;Sinteticni Z80 ukaz DEFB Y LD H,data ENDM SWAP MACRO RLCA RLCA RLCA RLCA ENDM OBRNIST MACRO ;zamenja sifre s sen~nimi MOV X A,L ;swap R3 in R3' SWAP MOVXL A MOV Y A,L ;swap R4,R4' in R5,R5' MOV Y E,H MOV Y H,A MOV Y L,E ENDM DISPL345 MACRO ;izpisovanje 2 ali 3 fix cifer LOCAL DISPLN LD A, 10111111B OUT (P0),A ;izpis MSD=0FFH OR 0F0H OUT (P0),A LD A,I BIT 2,A JR Z,DISPLN MOV X A,L AND 0FH OR 10110000B OUT (P0),A ;izpis MSD OR 0F0H OUT (P0),A DISPLN: MOV Y A,H SWAP AND 0FH OR 11010000B OUT (P0),A ;izpis NSD OR 0F0H OUT (P0),A MOV Y A,H AND 0FH OR 11100000B OUT (P0),A ;izpis LSD OR 0F0H OUT (P0),A ld a,0FFh out (P0), a ENDM WAIT MACRO MS ;~aka doloceno {tevilo ms LD E,MS LD B,103 IN A,(P0) DEFB 10H, 0FCH DEC E DEFB 20H, 0F7H ENDM CRLF MACRO DEFB 0Dh, 0Ah ENDM CSEG ORG 0000H ;ZACETEK GLAVNEGA PROGRAMA DI ;onemogo~i prekinitve LD A,10000111B; P1 inicializacija OUT (P1),A LD A,0F0H ;Beri tipkovnico OUT (P0),A nop IN A,(P0) AND 0FH ;~e je pritisnjena XOR 0FH ;katerakoli tipka JP Z,SYSINI ;~e ne beri DIP st. JP SYSKS ;sko'i na rutino za ;nastavitev DIP stikal REPT 20 ;pomik nazaj zaradi lepsega izpisa pri type DEFB 8 ENDM DEFM " Z80A CPU PAGER Encoder SYSTEM PROGRAM " CRLF DEFM " VERSION 2.10" CRLF DEFM " Release Date: June 1989 " CRLF DEFM " Revision 2: March 1993" CRLF CRLF DEFM "AUTHOR: Kos Leon, C.4.maja 11a " DEFM "61380 Cerknica, Slovenia, tel (061)791084. " CRLF DEFM " leon.kos [at] uni-lj.si" CRLF CRLF DEFM "The program is provided 'as is'. " CRLF DEFM "The entire risk risk as to the quality " DEFM "and performance of the program is with" CRLF DEFM "you. Should the program prove defective, " DEFM "you assume " DEFM "the etire cost of all necessary " DEFM "servicing, repair or correction!" CRLF REPT 50 DEFB 1Ah ENDM INIT: NOP ;GLAVNI PROGRAM ;se za~enja tukaj po ;testiranju nastavitev LD A,0FH ;bri{i display OUT (P0),A LD A,0FFH OUT (P0),A MOVYH 0FFh ;brisi R4,R5 MOV X A,L ;brisi R3 OR 0Fh MOVXL A MOVYL 0FFH ;brisi R4'R5' MOV X A,L ;brisi R3' OR 0F0H MOVXL A LD A,I ;brisi flag za skupinski klic RES 6,A LD I,A ;............................................. ;1.ZANKA DENA EQU 10000111B ;ON Line high level DNIC EQU 11000111B ;ON Line low level BUSY EQU 00100000B ;Busy signal iz IN porta DIAL EQU 00010000B ;Dial signal iz IN porta PAGE EQU 00010000B ;PAGE dioda maska ;GLAVNA ZANKA Z1: ; MOVYH 0FFh ;brise cifre ki niso ; LD A,I ;fiksirane ; BIT 2,A ; JR Z,Z1NAP ; DEFB X ; Izkljucimo brisanje ; LD B,L ; DEFB X ; LD A,0FH ; OR B ; MOVXL A ; Testiranje prisotnosti vezja za dodatno fiksiranje ; preostalih dveh cifer (4 in 5) v2.1 ld a, 11111100b ;testiram prvi dve koloni out (P0), a nop in a, (P0) and 0Fh cp 0Fh jr z, Z1NAP ;~e vezje ni prisotno sko~i swap ld e,a ld a, 11111001b ;testiram naslednji dve koloni out (P0), a nop nop in a, (P0) and 0Fh or e mov y h,a ld a, i bit 2,a jr z, z13fix ld a, 10111111b ;berem 3. cifro na stikalih out (P0), a in a, (P0) and 0Fh ld e, a mov x a,l and 0F0h or e movxl a z13fix: displ345 Z1NAP: LD A,10000111B OUT (P1),A ;ugasni TX,PG in D/A IN A,(P0) ;Rev 2 AND BUSY JR Z,ZASED LD A,11110000B OUT (P0),A IN A,(P0) AND 1111B XOR 1111B JP NZ,KEY ;Tipka pritisnjena IN A,(P0) AND DIAL JR Z,TELEF ;Telefon dvignjen JR Z1NAP ;............................................. ; ZASEDENO generiranje tona zasedeno ; bere BUSY vhod dokler poziv ni mogo~ ZASPA EQU 11100 ;pauza med toni LTON1 EQU 255 ;{tevilo nihajev TON1 EQU 22 ;~as enega nivoja ZASED: LD C,LTON1 ZAS0: LD B,TON1 ZAS1: IN A,(P0) AND BUSY JP NZ,Z1 ;sko~i iz zanke nazaj LD A,DENA OR PAGE ;Rev 2 OUT (P1),A DJNZ ZAS1 LD B,TON1 ZAS2: IN A,(P0) AND BUSY JP NZ,Z1 ;Sko~i iz zanke LD A,DNIC OR PAGE ;Rev 2 OUT (P1),A DJNZ ZAS2 DEC C JR NZ,ZAS0 LD BC,ZASPA ZAS3: LD A,DENA OR PAGE ;Rev 2 OUT (P1),A IN A,(P0) AND BUSY JP NZ,Z1 ;sko~i iz zanke DEC BC LD A,B OR C JR NZ,ZAS3 JR ZASED ;.............................................. ;Generiranje ON LINE pulzov in testiranje TELOL EQU 100 ;dol`ina tona za on line (1ms) TELTL EQU 255 ;{tevilo impulzov TEPA0 EQU 2000 ;100ms pavza med toni TEPA1 EQU 18000 ;0.9 sek pavza TELEF: ;HL {tevec za H(igh) Dial signal ONLIN: LD C,3 ;TU-TU-TU ONLI: LD E,TELTL ONLI0: LD B,TELOL ;B {tevec ton LD A,DNIC OUT (P1),A ONLI1: DJNZ ONLI1 LD B,TELOL LD A,DENA OUT (P1),A ONLI2: DJNZ ONLI2 IN A,(P0) AND BUSY ;testiranje BUSY linije JR Z,ZASED IN A,(P0) AND DIAL JR NZ,TEHI LD A,0F0H OUT (P0),A IN A,(P0) AND 0FH XOR 0FH JP NZ,KEY DEC E JR NZ,ONLI0 LD DE,TEPA0 ONLI3: IN A,(P0) ;generiranje pavze med AND BUSY ;toni JR Z,ZASED ;kontrola dial in BUSY IN A,(P0) ;~kamo na H signal iz AND DIAL ;DIAL linije JR NZ,TEHI ;sko'i 'e je visok signal LD A,0F0H OUT (P0),A IN A,(P0) AND 0FH XOR 0FH JP NZ,KEY DEC DE LD A,D OR E JR NZ,ONLI3 DEC C JR NZ,ONLI LD DE,TEPA1 ONLI4: IN A,(P0) AND BUSY JP Z,ZASED IN A,(P0) AND DIAL JR NZ,TEHI LD A,0F0H OUT (P0),A IN A,(P0) AND 0FH XOR 0FH JP NZ,KEY DEC DE LD A,D OR E JR NZ,ONLI4 JR ONLIN ;.............................................. ;Stetje impulzov iz telefona po prvem H impulzu MAXHI EQU 4902; 100ms max Hi signal iz DIAL MINLO EQU MAXHI/256-2;10.4ms min LO level MAXLO EQU 9802 ;200ms max low ~akanje MINHI EQU MAXLO/256-2 ;minimalno ~akanje TEHI: LD D,1 ; D `tevec impulzov digit:=1 TEHI0: LD HL,MAXHI TEHI1: IN A,(P0) AND DIAL JR Z,TELO DEC HL LD A,H OR L JR NZ,TEHI1 JP Z1 TELO: LD A,H CP MINLO ;'e je L signal kraj`i JP NC,ONLIN ;od 10 ms potem ignoriraj LD BC,MAXLO ;LOW signal ker je to TELO1: IN A,(P0) ;bounce AND DIAL JR NZ,TEHI2 DEC BC LD A,B OR C JR NZ,TELO1 JR TEDVA ;pojdi na drugo `tevilko TEHI2: LD A,B ;ignoriraj kraj`i impulz CP MINHI ;od 10 ms JR NC,TEHI1 INC D ;pove'aj digit JR TEHI0 ;in `tej naprej TEDVA: LD A,D ;testiraj 'e je digit CP 11 ;ve' kot 10 impulzov JR C,TEDVA1 ;'e je ve' potem JP OFFLIN ;piskaj napako TEDVA1: CP 10 ;deset impulzov JR NZ,TEDVA2;spremeni v LD D,0 ; ni'lo TEDVA2: LD A,I ; kontrola 2 ali 3 cifre AND 100B JR NZ,TEDVA3 ;3 fiksirane cifre LD A,D ;shranjevanje 1. cifre v RLA ;YHH RLA RLA RLA AND 11110000B LD B,A DEFB Y LD H,A AND 1111B OR B DEFB Y LD H,A JR TEDVA4 TEDVA3: DEFB X LD A,L AND 0F0h OR D DEFB X ;2 fiksirani cifri LD L,A ;shranjevanje TEDVA4: LD A,1111B ;izpis 1.cifre OUT (P0),A LD A,0FFH OUT (P0),A LD A,D OR 11110000B OUT (P0),A AND 11101111B OUT (P0),A OR 11110000B OUT (P0),A ;Cakanje na HI signaliz telefona max 20 sek TWAHI EQU 10;zgornjih 16 bitov WAIT zanke LD HL,TWAHI TWA1: LD BC,0FFFFH TWA2: IN A,(P0) AND DIAL JR NZ,TEHID1 IN A,(P0) AND BUSY JP Z,ZASED DEC BC LD A,B OR C JR NZ,TWA2 DEC HL LD A,H OR L JR NZ,TWA1 JP OFFLIN ;'as 20 sek prekora'en ;.......................................... ;~tetje impulzov z telefona po drugem H impulzu TEHID1: LD D,1 DEHI0: LD HL,MAXHI DEHI1: IN A,(P0) AND DIAL JR Z,DELO DEC HL LD A,H OR L JR NZ,DEHI1 JP Z1 DELO: LD A,H CP MINLO JR NC,TWA2 LD BC,MAXLO DELO1: IN A,(P0) AND DIAL JR NZ,DEHI2 DEC BC LD A,B OR C JR NZ,DELO1 JR DEDVA DEHI2: LD A,B CP MINHI JR NC,DEHI1 INC D JR DEHI0 DEDVA: LD A,D CP 11 JR C,DEDVA1 JP OFFLIN DEDVA1: CP 10 JR NZ,DEDVA2 LD D,0 DEDVA2: LD A,I AND 100B JR Z,DEDVA3 LD A,D ;dve fix cifri RLA RLA RLA RLA AND 11110000B LD B,A DEFB Y LD A,H AND 1111B OR B DEFB Y LD H,A JR DEDVA4 DEDVA3: DEFB Y LD A,H AND 11110000B OR D DEFB Y LD H,A DEDVA4: LD A,1111B OUT (P0),A LD A,0FFH OUT (P0),A LD A,I AND 100B JR Z,DEDVA5 DEFB X LD A,L AND 0Fh ;XLL OR 11110000B OUT (P0),A AND 11011111B OUT (P0),A OR 11110000B OUT (P0),A JR DEDVA6 DEDVA5: DEFB Y LD A,H RRA RRA RRA RRA OR 11110000B OUT (P0),A AND 11011111B OUT (P0),A OR 11110000B OUT (P0),A DEDVA6: LD A,D OR 11110000B OUT (P0),A AND 11101111B OUT (P0),A OR 11110000B OUT (P0),A ;.......................................... ;Kontrola ali je potrebno pre~itati {e eno ;cifro z telefona in ~itanje le te LD A,I AND 100B JP Z,TEPISK LD HL,TWAHI ;~akanje na hi signal DWA1: LD BC,0FFFFH ;Max 20 sek DWA2: IN A,(P0) AND DIAL JR NZ,REHID1 IN A,(P0) AND BUSY JP Z,ZASED DEC BC LD A,B OR C JR NZ,DWA2 DEC HL LD A,H OR L JR NZ,DWA1 JP OFFLIN ;......................... ;stetje impulzov z telefona po tretjem REHID1: LD D,1 ; H impulzu REHI0: LD HL,MAXHI REHI1: IN A,(P0) AND DIAL JR Z,RELO DEC HL LD A,H OR L JR NZ,REHI1 JP Z1 RELO: LD A,H CP MINLO JR NC,DWA2 LD BC,MAXLO RELO1: IN A,(P0) AND DIAL JR NZ,REHI2 DEC BC LD A,B OR C JR NZ,RELO1 JR REDVA REHI2: LD A,B CP MINHI JR NC,REHI1 INC D JR REHI0 REDVA: LD A,D CP 11 JR C,REDVA1 JP OFFLIN REDVA1: CP 10 JR NZ,REDVA2 LD D,0 REDVA2: DEFB Y ;Shranjevanje 3. cifre in prikaz ;kompletno vseh treh cifer LD A,H AND 11110000B OR D DEFB Y LD H,A ;Izpis 2. cifre RRA RRA RRA RRA OR 11110000B OUT (P0),A AND 11011111B OUT (P0),A OR 11110000B OUT (P0),A ;Izpis 3. cifre LD A,D OR 11110000B OUT (P0),A AND 11101111B OUT (P0),A OR 11110000B OUT (P0),A ;izpis 1.cifre DEFB X LD A,L AND 0Fh ;XLL OR 11110000B OUT (P0),A AND 10111111B OUT (P0),A OR 11110000B OUT (P0),A ;...........Konec izpisa vseh cifer.......... JP TEPISK ;Generiranje OFF-LINE signala za telefon OFLPA EQU 2000 ;pavza za OFFLINE piskanje OFLTON EQU 15 ;dol`ina tonov cca 1ms OFLTL EQU 200 ;{tevilo nihajev cca 200ms OFFLIN: LD C,OFLTL OFLIN0: LD B,OFLTON OFLIN1: LD A,11110000B OUT (P0),A IN A,(P0) AND 1111B XOR 1111B JP NZ,KEY IN A,(P0) AND DIAL JR NZ,OFLCNT ;pojdi na `tetje IN A,(P0) ;H pulsa AND BUSY JP Z,ZASED LD A,DENA OUT (P1),A DJNZ OFLIN1 LD B,OFLTON OFLIN2: LD A,11110000B OUT (P0),A IN A,(P0) AND 1111B XOR 1111B JP NZ,KEY IN A,(P0) AND DIAL JR NZ,OFLCNT;pojdi za stetje H pulza IN A,(P0) AND BUSY JP Z,ZASED LD A,DNIC OUT (P1),A DJNZ OFLIN2 DEC C JR NZ,OFLIN0 ;......Generiranje pavze...... LD HL,OFLPA OFLIN3: LD A,11110000B OUT (P0),A IN A,(P0) AND 1111B XOR 1111B JP NZ,KEY IN A,(P0) AND DIAL JR NZ,OFLCNT ;pojdi na stetje IN A,(P0) ;H pulsa AND BUSY JP Z,ZASED LD A,DENA OUT (P1),A DEC HL LD A,H OR L JR NZ,OFLIN3 JR OFFLIN ;{tetje dolzine H pulza OFLHPU EQU MAXHI/104*51 ;maksimalo 'akanje OFLCNT: LD HL,OFLHPU ;na low signal OFLIN5: LD A,11110000B OUT (P0),A IN A,(P0) AND 1111B XOR 1111B JP NZ,KEY IN A,(P0) AND DIAL JP Z,OFFLIN DEC HL LD A,H OR L JR NZ,OFLIN5 JP Z1 ;........................................... ;KEY-SCAN rutina ko je pritisnjena tipka ;in piskanje OFF LINE v telefon MAXNKE EQU 50 ;15sek max.'akanje na tipko KSHTON EQU 94 ;H pulz v telef. (0.5msek) KSLTON EQU 60 ;L pulz v telefon (0.5ms) KEY: ;v2.1 DEFB Y ;C=stevec impulzov za piskanje v telefon ; LD H,0FFH ;B=DJNZ stevec (zacasen) LD H,1 ;D=Scan koda tipke ; LD A,I ;HL=stetje dolzine pavze ; BIT 2,A ; JR Z,KEYZAC ;v2.1 DEFB X ;brisanje 3. in ze prej 4. in 5. cifre ; LD A,L ; OR 0Fh ; DEFB X ; LD L,A KEYZAC: LD C,150 ;stevilo impulzov (150 ms) KSPIS: LD B,KSHTON ;Low ton v telefon LD A,DNIC OUT (P1),A IN A,(P0) ;Rev 2 AND BUSY ;Rev 2 JP Z,ZASED ;Rev 2 KSWA1: DJNZ KSWA1 LD A,DENA OUT (P1),A LD B,KSLTON ;High ton v telefon KSWA2: DJNZ KSWA2 LD A,I SET 4,A ;Vektor vrnitve iz KeyScan rutine LD I,A JR KEYSCA KEYPI: DEC C ;to se vrne KeyScan ce je BIT(I4)==1 JR NZ,KSPIS LD C,0FFH ;300 ms pavze v telefonu LD A,I RES 4,A LD I,A ;Vektor vrnitve iz KeyScan rutine KEYPA0: JR KEYSCA ;je resetiran za vracanje na KEYPA KEYPA: LD B,226 KSWA3: DJNZ KSWA3 ;1.175 ms pavze DEC C JR NZ,KEYPA0 JR KEYZAC ;..Rutina za skaniranje in izpis tastature KEYSCA: LD D,0FFH ;Nobena tipka ni pritisnjena LD A,11111110B ;row 1,4,7,* OUT (P0),A nop IN A,(P0) BIT 0,A JR NZ,KS1 LD D,1 ; 1 KS1: BIT 1,A JR NZ,KS2 LD D,4 ; 4 KS2: BIT 2,A JR NZ,KS3 LD D,7 ; 7 KS3: BIT 3,A JR NZ,KS4 LD D,11 ; * KS4: LD A,11111101B ;row 2,5,8,0 OUT (P0),A nop IN A,(P0) BIT 0,A JR NZ,KS5 LD D,2 ; 2 KS5: BIT 1,A JR NZ,KS6 LD D,5 ; 5 KS6: BIT 2,A JR NZ,KS7 LD D,8 ; 8 KS7: BIT 3,A JR NZ,KS8 LD D,0 ; 0 KS8: LD A,11111011B ;row 3,6,9,# OUT (P0),A nop IN A,(P0) BIT 0,A JR NZ,KS9 LD D,3 ; 3 KS9: BIT 1,A JR NZ,KS10 LD D,6 ; 6 KS10: BIT 2,A JR NZ,KS11 LD D,9 ; 9 KS11: BIT 3,A JR NZ,KS12 JP GRKLIC ; # obdelaj rutino za skupinski klic KS12: LD A, 0FFh ; v2.1 OUT (P0), A ; v2.1 LD A,D CP 0FFH JR NZ,KS13 INC HL LD A,MAXNKE CP H JP Z,Z1 JP KSOUT KS13: XOR A ; A=0 OR H ; A<-H JR NZ,KSDONE ; ali je H=0 LD A,100 ; Ali je preteklo 100ms pavze CP L ; vsak scan traja 1ms JP NC,KSOUT KSDONE: LD A,10 ; ali je koda tipke ve~ja CP D ; od 10 JP C,KSPTST LD A,I BIT 2,A JR Z,KS3OUT DEFB X ;shrani R3'. cifro v LD A,L ;E register AND 0F0H ;le zacasno LD E,A DEFB Y ;dve fix. cifri LD A,H ;rotiram tri cifre RRA RRA RRA RRA AND 0Fh OR E DEFB X ;shrani R3.in R3'. cifro LD L,A OR 11110000B ;izpis 1. cifre OUT (P0),A AND 10111111B OUT (P0),A OR 11110000B OUT (P0),A DEFB Y LD A,H OR 11110000B ;izpis 2.cifre OUT (P0),A AND 11011111B OUT (P0),A OR 11110000B OUT (P0),A RLA ;rotiranje cifer RLA ; 4 <= 5 RLA ; 5 <= D RLA AND 11110000B OR D DEFB Y LD H,A OR 11110000B ; izpis 3.cifre OUT (P0),A AND 11101111B OUT (P0),A OR 11110000B OUT (P0),A LD HL,0 JR KSOUT KS3OUT: DEFB Y ; 3 fix. cifre LD A,H ; rotiram dve cifri OR 11110000B; izpis prve cifre OUT (P0),A AND 11011111B OUT (P0),A OR 11110000B OUT (P0),A RLA RLA ; rotiranje cifer RLA ; 4 <= 5 RLA ; 5 <= D AND 11110000B OR D DEFB Y LD H,A OR 11110000B OUT (P0),A AND 11101111B OUT (P0),A OR 11110000B OUT (P0),A LD A,0FFH OUT (P0),A AND 10111111B OUT (P0),A LD A,0FFH OUT (P0),A LD HL,0 KSOUT: LD A,I BIT 4,A JP Z,KEYPA JP KEYPI KSPTST: LD A,I BIT 2,A JR Z,KSPTS3 DEFB X ;dve fix. cifri LD A,L ;testiram ali je XL==#0F AND 1111B CP 0FH JR Z,KSOUT ;ce je potem JP KEYPIS ;pojdi na piskanje tonov KSPTS3: DEFB Y ;isto testiram tudi 'e LD A,H ;so 3 fix. cifre AND 11110000B CP 0F0H ;'e koda tipke cifra JR Z,KSOUT ;skaniraj tipke naprej JP KEYPIS ;............................................ TEPISK: LD A,I ;rutina za piskanje iz RES 5,A ;telefona LD I,A JP KPROG TELRTN: LD A,00100111B OUT (P1),A IN A,(P0) AND DIAL JP Z,TELRTN LD HL,MAXHI/100*113 TEHIPA: IN A,(P0) ;Ali je po pomoti pritisnjena AND DIAL ;`tevilka med razgovorom JR Z,TELRTN ;ce je potem je puls DEC HL ;kraj`i od 100 ms LD A,H OR L JR NZ,TEHIPA LD A,10000111B;zato ga ignoriraj OUT (P1),A JP Z1 ;......................... KPROG: LD A,10111000B OUT (P1),A LD HL,20192 ;210ms pavze pred KPWA: DEC HL ;generiranjem sinusev LD A,H OR L JR NZ,KPWA RT EQU 11 ;koda repeat tona GRPISK: EXX ;ALTERNATE REGS DEFB X ;rutina ki kontrolira LD A,H ;ali je potrebno RRA ;vstaviti repeat tone RRA ;med ciframi in jih po RRA ;potrebi tudi vstavi RRA AND 1111B LD H,A ;H' DEFB X LD A,H AND 1111B LD L,A ;L' DEFB X LD A,L AND 1111B LD D,A ;D' DEFB Y LD A,H RRA RRA RRA RRA AND 1111B LD E,A DEFB Y ; E' LD A,H AND 1111B LD B,A ;KONTROLA ALI JE POTREBNO VSTAVITI R TON LD A,H CP L JR NZ,ALT1 LD L,RT ALT1: LD A,L CP D JR NZ,ALT2 LD D,RT ALT2: LD A,D CP E JR NZ,ALT3 LD E,RT ALT3: LD A,E CP B JR NZ,ALT4 LD B,RT ALT4: EXX ;.....konec rutine za R ton ; Program za piskanje LD A,1 EX AF,AF' ;v A' je vektor vrnitve EXX ;po generiranju 1.cifre LD A,H EXX JP PISKAJ ;generiraj prvo cifro KPR1: LD A,2 EX AF,AF' ;vektor vrnitve za 2.cifro EXX ;ko se vrne iz generiranja LD A,L ;druge cifre se program EXX ;nadaljuje na labeli KPR2 JP PISKAJ KPR2: LD A,3 EX AF,AF' EXX ; 3. cifra LD A,D EXX JP PISKAJ KPR3: LD A,4 EX AF,AF' EXX ; 4. cifra LD A,E EXX JP PISKAJ KPR4: LD A,5 EX AF,AF' EXX ; 5. cifra LD A,B EXX JP PISKAJ KPR5: LD A,I BIT 6,A ;Skoci ce je to skupinski JP NZ,GRPRTN ;klic LD L,17 ;BIBIBIBI BIP: LD H,4 ;piskanje v telefon BI: LD C,27 ;5.29 sek ~akanje BIP0: LD B,120 LD A,11110111B OUT (P1),A BIP1: DJNZ BIP1 LD B,120 LD A,10110111B OUT (P1),A BIP2: DJNZ BIP2 DEC C JR NZ,BIP0 LD DE,2885 BIP3: DEC DE LD A,D OR E JR NZ,BIP3 LD A,11111011B ; testiranje kolone 1 4 7 # OUT (P0),A ; V2.1 IN A,(P0) AND 1000B JR NZ, BIP33 ;~e je bila oddaja prekinjena JR BIPEXIT ;sko~i na izhod BIP33: DEC H JR NZ,BI LD DE,7692 BIP4: DEC DE LD A,D OR E JR NZ,BIP4 DEC L JR NZ,BIP ;konec ~akanja po {estih ;......... sekundah od za~etka poziva BIPEXIT:LD A,I BIT 5,A JP Z,TELRTN JP KEYRTN ;........................ TAB EQU 20;Za'etek tabele sinusov za razne ;frekvence v blokih po 256 bytov 20*256=5120 PISKAJ: LD B,A;Program za generiranje sinusov LD A,I BIT 0,A JP Z,PICCIR LD A,B CP 0 JR NZ, PI1 LD A,I BIT 3,A JR NZ,PI0 LD B,TAB+23 LD HL,ZVEIG JP TOUT PI0: LD B,TAB ;v Breg zapi{emo MSB LD HL ,ZVEI0;tabele sinusov JP TOUT ;V HL pa za'etek tabele PI1: CP 1 ;za~etkov generiranja JR NZ,PI2 ;sinusov LD B,TAB+1 LD HL,ZVEI1 JP TOUT PI2: CP 2 JR NZ,PI3 LD B,TAB+2 LD HL,ZVEI2 JP TOUT PI3: CP 3 JR NZ,PI4 LD B,TAB+3 LD HL,ZVEI3 JP TOUT PI4: CP 4 JR NZ,PI5 LD B,TAB+4 LD HL,ZVEI4 JP TOUT PI5: CP 5 JR NZ,PI6 LD B,TAB+5 LD HL,ZVEI5 JP TOUT PI6: CP 6 JR NZ,PI7 LD B,TAB+6 LD HL,ZVEI6 JP TOUT PI7: CP 7 JR NZ,PI8 LD B,TAB+7 LD HL,ZVEI7 JP TOUT PI8: CP 8 JR NZ,PI9 LD B,TAB+8 LD HL,ZVEI8 JP TOUT PI9: CP 9 JR NZ,PI10 LD B,TAB+9 LD HL,ZVEI9 JP TOUT PI10: LD B,TAB+10 LD HL,ZVEIR JP TOUT ;........................................... PICCIR: LD A,B CP 0 JR NZ,PI11 LD A,I BIT 3,A JR NZ,PI100 LD B,TAB+22 LD HL,CCIRG JP TOUT PI100: LD B,TAB+11 LD HL,CCIR0 JP TOUT PI11: CP 1 JR NZ,PI12 LD B,TAB+12 LD HL,CCIR1 JP TOUT PI12: CP 2 JR NZ,PI13 LD B,TAB+13 LD HL,CCIR2 JP TOUT PI13: CP 3 JR NZ,PI14 LD B,TAB+14 LD HL,CCIR3 JP TOUT PI14: CP 4 JR NZ,PI15 LD B,TAB+15 LD HL,CCIR4 JP TOUT PI15: CP 5 JR NZ,PI16 LD B,TAB+16 LD HL,CCIR5 JP TOUT PI16: CP 6 JR NZ,PI17 LD B,TAB+17 LD HL,CCIR6 JP TOUT PI17: CP 7 JR NZ,PI18 LD B,TAB+18 LD HL,CCIR7 JP TOUT PI18: CP 8 JR NZ,PI19 LD B,TAB+19 LD HL,CCIR8 JP TOUT PI19: CP 9 JR NZ,PI20 LD B,TAB+20 LD HL,CCIR9 ; REVIZIJA 2 JP TOUT PI20: LD B,TAB+21 LD HL,CCIRR ;........................ TOUT: LD D,28 ;100ms puls ; JP OUTST ;Testiranje izpisa LD A,I BIT 1,A JR Z,TOUT1 LD D,20 ;70ms puls TOUT1: LD C,0 ;zacni na nicti poziciji tabele CONT0: LD E,200 ;generiraj 200 bytov tabele CONT1: LD A,(BC) OR 10110000B OUT (P1),A ;glavna zanka za INC C ;digitaliziraje DEC E ;sinusov JR NZ,CONT1 INC HL LD C,(HL) DEC D JP NZ,CONT0 ;........................ OUTRTN: LD A,10110111B OUT (P1),A ;gledamo kam kaze EX AF,AF' ;vektor vrnitve programa CP 1 ;za piskanje in skocimo JP Z,KPR1 ;tja kamor kaze A' CP 2 JP Z,KPR2 CP 3 JP Z,KPR3 CP 4 JP Z,KPR4 JP KPR5 ;....Glavni program za oddajo iz tipkovnice KEYPIS: LD A,I LD A,I SET 5,A ;Vektor vrnitve LD I,A IN A,(P0) AND BUSY JP Z,ZASED JP KPROG KEYRTN: LD A,10100111B OUT (P1),A ;Brisi P ;----------------------------------------------------------- LD E,8 ;30*0.45 sek piskaj OFF LINE LD A,1 ;SPREMEMBA NA 8*0.45 Sekunde EX AF,AF' ;vektor vrnitve JR KEYOFP KEYRT1: LD D,5 ;5* utripni displaj KEYPI0: LD A,0FH ;bri{i display OUT (P0),A LD A,0FFH OUT (P0),A LD E,1 ;0.45sek piskaj OFF LINE LD A,2 EX AF,AF' JR KEYOFP KEYRT2: LD A,I BIT 2,A JR Z,KEYIZ3 ;ne izpisi prve cifre DEFB X LD A,L AND 0FH OR 10110000B OUT (P0),A OR 0F0H OUT (P0),A KEYIZ3: DEFB Y LD A,H RRA RRA RRA RRA AND 0FH OR 11010000B OUT (P0),A OR 0F0H OUT (P0),A DEFB Y LD A,H AND 0FH OR 11100000B OUT (P0),A OR 0F0H OUT (P0),A LD E,1 LD A,3 EX AF,AF' JR KEYOFP ;0.45sek cakaj KEYRT3: DEC D ; ponovno utripni, JR NZ,KEYPI0 ; ~e je potrebno KEYPI1: LD A,11111110B ; testiranje kolone 1 4 7 * OUT (P0),A IN A,(P0) AND 1000B JR NZ,BOUTST LD E,1 LD A,4 EX AF,AF' JR KEYOFP KEYRT4: JR KEYPI1 BOUTST: LD HL,49000;Ignoriraj bounce T tipke BOUTS1: IN A,(P0) ;max 1 sek AND 1000B JR Z,KEYPI1 DEC HL LD A,H OR L JR NZ,BOUTS1 LD A,10000111B ;Brisi PTT OUT (P1),A JP Z1 ;in se vrni v glavno zanko ;............................................ ;Podprogram za piskanje OFF LINE ;pri KEY programu KEYOFP: LD C,150 ;ms tona KEOFFT: LD B,95 LD A,11100111B OUT (P1),A KOFFW1: DJNZ KOFFW1 ;500ms H tona LD B,95 LD A,10100111B OUT (P1),A KOFFW2: DJNZ KOFFW2 ;isto le L ton LD A,11111011B ; testiranje kolone 1 4 7 # OUT (P0),A ; V2.1 IN A,(P0) AND 1000B JR NZ, KOFFNP ;~e je bila oddaja prekinjena OBRNIST ;prej obrni {tevilke JP Z1 ;in sko~i KOFFNP: DEC C JR NZ,KEOFFT LD BC,28846 ;300ms pavze KOFFW3: DEC BC LD A,B OR C JR NZ,KOFFW3 DEC E JR NZ,KEYOFP EX AF,AF' CP 1 JP Z,KEYRT1 CP 2 JP Z,KEYRT2 ;Vektorji vra'anja CP 3 ;v zanke JR Z,KEYRT3 JR KEYRT4 ;............................................ OUTST: LD H,0 ;ta rutina je le za testiranje LD A,0FH ;izpisa B reg pri piskanju OUT (P0),A ;glej linijo 9970 LD A,0FFH OUT (P0),A LD A,B CP 10 JR C,TSTIZP TSTZ1: INC H SUB 10 CP 10 JR NC,TSTZ1 TSTIZP: OR 11100000B OUT (P0),A OR 0F0H OUT (P0),A LD A,H OR 11010000B OUT (P0),A OR 0F0H OUT (P0),A LD DE,0FFFFH TSTZ2: DEC DE LD (0),A IN A,(P0) IN A,(P0) IN A,(P0) LD A,D OR E JR NZ,TSTZ2 JP OUTRTN ;Tabele za'etkov digitaliziranja sinusov ZVEI0: DEFB 0,39,31,0,39 ;2400 Hz DEFB 31,0,39,8,0 DEFB 39,8,0,39,8 DEFB 47,39,8,47,16 DEFB 8,47,16,8,47 DEFB 16,8,47,16 ZVEI1: DEFB 0,43,34,25,16 ;1060 Hz DEFB 7,51,42,33,24 DEFB 15,6,49,40,31 DEFB 22,14,4,48,39 DEFB 30,21,12,3,46 DEFB 37,28,19,10 ZVEI2: DEFB 0,9,18,27,36 ;1160 Hz DEFB 45,7,16,25,34 DEFB 43,4,13,22,31 DEFB 40,49,11,20,29 DEFB 38,47,8,17,26 DEFB 35,44,53,15 ZVEI3: DEFB 0,26,51,33,15 ;1270 Hz DEFB 41,23,5,30,12 DEFB 38,20,2,27,53 DEFB 35,17,43,25,50 DEFB 32,14,40,22,47 DEFB 29,11,37,19 ZVEI4: DEFB 0,42,44,7,9 ;1400 Hz DEFB 11,53,16,18,20 DEFB 22,25,27,29,31 DEFB 33,36,38,40,3 DEFB 5,47,49,51,14 DEFB 16,18,21,23 ZVEI5: DEFB 0,19,2,21,40 ;1530 Hz DEFB 23,42,25,44,27 DEFB 46,28,11,30,13 DEFB 32,15,34,53,36 DEFB 19,38,21,40,22 DEFB 5,24,7,26 ZVEI6: DEFB 0,1,2,3,4 ;1670 Hz DEFB 5,6,41,42,9 DEFB 44,45,46,47,48 DEFB 49,50,51,52,53 DEFB 21,22,23,24,25 DEFB 26,27,28,29 ZVEI7: DEFB 0,49,37,25,13 ;1830 Hz DEFB 32,20,8,27,45 DEFB 33,52,40,28,16 DEFB 4,53,11,29,48 DEFB 36,24,12,31,19 DEFB 7,25,44,32 ZVEI8: DEFB 0,34,40,19,25 ;2000 Hz DEFB 31,37,16,22,28 DEFB 34,13,19,25,31 DEFB 10,16,22,28,34 DEFB 13,19,53,4,10 DEFB 44,50,1,34 ZVEI9: DEFB 0,24,48,21,45 ;2200 Hz DEFB 44,17,41,14,38 DEFB 37,10,34,7,6 DEFB 30,3,27,51,24 DEFB 23,47,20,44,43 DEFB 16,40,13,12 ZVEIR: DEFB 0,51,38,25,12 ;2600 Hz DEFB 20,50,37,24,11 DEFB 19,49,36,23,10 DEFB 18,48,35,22,9 DEFB 17,47,34,42,29 DEFB 38,3,33,41 CCIR0: DEFB 0,4,37,13,17 ;1981 Hz DEFB 50,26,2,35,39 DEFB 15,48,52,0,33 DEFB 37,13,46,50,26 DEFB 31,35,11,44,48 DEFB 24,29,33,9 CCIR1: DEFB 0,3,6,9,12 ;1124 Hz DEFB 15,18,21,24,26 DEFB 29,32,35,38,41 DEFB 44,47,50,53,6 DEFB 9,12,15,18,21 DEFB 24,27,30,33 CCIR2: DEFB 0,15,30,45,14 ;1197 Hz DEFB 29,44,12,27,42 DEFB 11,26,31,9,24 DEFB 39,8,23,38,53 DEFB 21,36,5,20,35 DEFB 50,19,34,2 CCIR3: DEFB 0,26,9,35,18 ;1275 Hz DEFB 1,27,10,36,19 DEFB 2,28,11,38,20 DEFB 3,30,12,39,21 DEFB 4,31,13,40,22 DEFB 49,32,14,41 CCIR4: DEFB 0,37,33,29,25 ;1358 Hz DEFB 21,17,14,10,6 DEFB 2,39,35,31,27 DEFB 23,19,15,52,8 DEFB 4,0,37,33,29 DEFB 25,21,17,13 CCIR5: DEFB 0,47,17,26,34 ;1446 Hz DEFB 43,13,21,30,0 DEFB 47,17,26,34,43 DEFB 13,21,30,0,47 DEFB 17,26,34,43,13 DEFB 21,30,0,47 CCIR6: DEFB 0,20,41,25,45 ;1540 Hz DEFB 29,13,34,18,2 DEFB 22,43,27,11,31 DEFB 15,36,20,4,24 DEFB 45,29,13,33,17 DEFB 38,22,6,27 CCIR7: DEFB 0,31,29,26,24 ;1640 Hz DEFB 21,52,16,13,44 DEFB 8,39,3,0,31 DEFB 29,26,23,21,52 DEFB 16,13,44,8,39 DEFB 3,0,31,29 CCIR8: DEFB 0,10,20,30,39 ;1747 Hz DEFB 49,27,37,47,25 DEFB 3,13,23,1,42 DEFB 52,30,40,50,28 DEFB 6,16,26,4,45 DEFB 23,33,43,53 CCIR9: DEFB 0,51,13,5,26 ;1860 Hz DEFB 18,39,1,52,14 DEFB 35,27,48,10,31 DEFB 23,44,6,27,19 DEFB 40,2,53,15,7 DEFB 28,20,41,3 CCIRR: DEFB 0,43,6,49,39 ;2110 Hz DEFB 29,19,9,52,42 DEFB 32,48,38,28,18 DEFB 8,51,41,31,47 DEFB 37,27,17,7,50 DEFB 40,30,20,36 CCIRG: DEFB 0,39,31,0,39 ;2400 Hz DEFB 31,0,39,8,0 ;G(roup) ton DEFB 39,8,0,39,8 DEFB 47,39,8,47,16 DEFB 8,47,16,8,47 DEFB 16,8,47,16 ZVEIG: DEFB 0,22,44,7,9 ;2800 Hz DEFB 31,53,35,18,40 DEFB 42,44,7,29,51 DEFB 14,16,38,40,3 DEFB 44,27,49,12,14 DEFB 36,38,1,3 ;SYSTEM INFORMATION rutina za branje ;konfiguracije sistema in izpis le teh, 'e je SYSKS: ;potrebno ;keyscan rutina LD A,11111110B ;row 1,4,7,* OUT (P0),A IN A,(P0) BIT 0,A JR NZ,SYSKS1 LD D,1 ;1 SYSKS1: BIT 1,A JR NZ,SYSKS2 LD D,4 ;4 SYSKS2: BIT 2,A JR NZ,SYSKS3 LD D,7 ;7 SYSKS3: LD A,11111101B ;row 2,5,8,0 OUT (P0),A IN A,(P0) BIT 0,A JR NZ,SYSKS4 LD D,2 ;2 SYSKS4: BIT 1,A JR NZ,SYSKS5 LD D,5 ;5 SYSKS5: LD A,11111011B ;row 3,6,9,# OUT (P0),A IN A,(P0) BIT 0,A JR NZ,SYSKS6 LD D,3 ;3 SYSKS6: BIT 1,A JR NZ,SYSKS7 LD D,6 ;6 SYSKS7: BIT 3,A JR NZ,SYSKS8 LD D,12 ;# == 12 SYSKS8: LD A,0F0H OUT (P0),A IN A,(P0) AND 0FH XOR 0FH JR NZ,SYSKS ;tipka pritisnjena LD BC,3000 ;100ms pavze SYSKWA: DEC BC LD A,0F0H OUT (P0),A IN A,(P0) AND 0FH XOR 0FH JR NZ,SYSKS LD A,B OR C JR NZ,SYSKWA LD A,01111111B ;beri MODE OUT (P0),A IN A,(P0) LD I,A LD A,11101111B OUT (P0),A IN A,(P0) RLA RLA RLA RLA AND 0F0H LD B,A ;za'asno sHrani LD A,11011111B ;prvo cifro OUT (P0),A IN A,(P0) AND 0FH ;2. cifra OR B DEFB X ; == LD XH,a LD H,A LD A,10111111B OUT (P0),A IN A,(P0) DEFB X ;3. cifra LD L,A LD A,D CP 1 JR NZ,SYSKT2 DEFB X LD A,H RRA RRA RRA RRA JR SYSCIF SYSKT2: CP 2 ;v A je `tevilka JR NZ,SYSKT3 ;katero je treba DEFB X ;izpisat in pojdi LD A,H ;na SYSCIF JR SYSCIF SYSKT3: CP 3 JR NZ,SYSKT4 DEFB X LD A,L SYSCIF: AND 0FH ;izpis `tevilke, ki CP 10 ;je v A registru JR NC,DVOMES ;`tev. je dvomestna OR 11100000B OUT (P0),A OR 0F0H OUT (P0),A LD A,10011111B ;bri`i MSD in NSD OUT (P0),A LD A,0FFH OUT (P0),A JP SYSKS DVOMES: SUB 10 ;izpis dvomestne OR 11100000B ;`tevilke (10..15) OUT (P0),A OR 0F0H OUT (P0),A LD A,11010001B OUT (P0),A OR 0F0H OUT (P0),A LD A,10111111B OUT (P0),A OR 0F0H OUT (P0),A JP SYSKS SYSKT4: CP 4 JR NZ,SYSKT5 LD A,I ;"1" == ZVEI AND 1 ;"0" == CCIR JR SYSCIF SYSKT5: CP 5 JR NZ,SYSKT6 LD A,11000000B OUT (P0),A LD A,0F0H ;"100" == 100ms OUT (P0),A LD A,I BIT 1,A JR NZ,SYS70 LD A,10110001B OUT (P0),A OR 0F0H OUT (P0),A JP SYSKS SYS70: LD A,11010000B+7 OUT (P0),A OR 0F0H ;"70" == 70 ms OUT (P0),A LD A,10111111B OUT (P0),A OR 0F0H OUT (P0),A JP SYSKS SYSKT6: CP 6 JR NZ,SYSKT7 LD A,I BIT 2,A ;"2" LD A,2 JR NZ,SYSCIF LD A,3 ;ali "3" fiksirane JR SYSCIF ;cifre SYSKT7: CP 7 JR NZ,SYSKT8 LD A,0FH OUT (P0),A ;"00" == G ton LD A,0FFH ;"0" == 0 ton OUT (P0),A LD A,11100000B OUT (P0),A LD A,0F0H OUT (P0),A LD A,I BIT 3,A JP NZ,SYSKS LD A,11010000B OUT (P0),A LD A,0F0H OUT (P0),A JP SYSKS SYSKT8: CP 12 ;'e je bila pritisnjena JR NZ,SYSKT9 ;tipka # potem za'ni od JP 0000H ;za'etka SYSKT9: LD A,R DAA AND 0FH OR 11010000b OUT (P0),A OR 0F0H OUT (P0),A LD A,10101111B OUT (P0),A LD A,0FFH OUT (P0),A ;........................................... ;Citanje MODE in fiksiranih cifer SYSINI: LD A,01111111B OUT (P0),A IN A,(P0) LD I,A LD A,11101111B OUT (P0),A IN A,(P0) AND 0FH LD D,A RLA RLA RLA RLA AND 0F0H LD B,A LD A,11011111B OUT (P0),A IN A,(P0) AND 1111B LD E,A OR B DEFB X LD H,A LD A,10111111B OUT (P0),A IN A,(P0) AND 0FH LD C,A DEFB X LD L,A ;kontrola ali so fiksirane cifre v oobmo'ju LD A,9 ; od 0 do 9 CP D JR NC,SYSIN1 LD B,1 ;'e ne pojdi na izpis JR SYSERR ;napake SYSIN1: CP E JR NC,SYSIN2 LD B,2 JR SYSERR SYSIN2: CP C JR NC,SYSIN3 LD B,3 JR SYSERR SYSIN3: JP INIT ;vse fix. cifre so OK SYSERR: LD A,B ;utripajo' izpis `t., OR 11100000B ;ki je napa'no OUT (P0),A ;postavljena z DIP OR 0F0H ;stikali OUT (P0),A LD A,10010000B OUT (P0),A OR 0F0H OUT (P0),A LD DE,15000 SYSERW: LD A,0F0H OUT (P0),A IN A,(P0) AND 0FH XOR 0FH JP NZ,SYSKS DEC DE LD A,D OR E JR NZ,SYSERW LD A,0FH OUT (P0),A LD A,0FFH OUT (P0),A LD DE,18000 SYSEW2: DEC DE LD A,D OR E JR NZ,SYSEW2 JR SYSEW2 JR SYSERR GRKLIC: LD A,I BIT 2,A JP Z,GRKLIC2 MOV X A,L AND 0FH ;brisi zgornje bite CP 0FH ;ali je R3=0FH JP Z,KS12 ;ce je potem se vrni ; CP 0 ;ali je R3=0 ; JP Z,KS12 GRKSWR: MOV X A,L ;swap R3 in R3' SWAP MOVXL A MOV Y A,L ;swap R4,R4' in R5,R5' MOV Y E,H MOV Y H,A MOV Y L,E DISPL345 GRK3C: LD E,10 ;300ms count stevec za #tipko GRK3C0: LD B,247 ;10ms je en obhod GRK3C1: LD A,11111110B ; 7T row 1,4,7,* OUT (P0),A ;11T IN A,(P0) ;11T nop BIT 3,A ; 8T JR Z,GRK3TST ; 7T * je pritisnjena LD A,11111011B ; 7T row 3,6,9,# OUT (P0),A ;11T nop IN A,(P0) ;11T BIT 3,A ; 8T JR Z,GRK3C ; 7T # je pritisnjena DJNZ GRK3C1 ;13T SUM=101T=40.4æS DEC E JR NZ,GRK3C0 ld a, 0FFh ;v2.1 out (P0), a JP KS12 GRK3TST:MOV X A,L AND 0FH CP 0FH ;ali je R3=0Fh JR Z,GRK3C1 ;testiranje in vstavljanje enic v R3, R4, R5 ce ;je to potrebno MOV X A,L AND 0FH JR NZ,GRKIZ0 MOV X A,L INC A ;povecamo R3 za 1 MOVXL A GRKIZ0: MOV Y A,H AND 0F0H JR NZ,GRKIZ1 MOV Y A,H OR 10H ;R4<-1 MOVYH A GRKIZ1: MOV Y A,H AND 0FH JR NZ,GRKIZ2 MOV Y A,H INC A MOVYH A ;povecamo R5 za 1 ;Testiranje ali je potrebno vstaviti enice v ; R3', R4'in R5' GRKIZ2: MOV X A,L AND 0F0H JR NZ,GRKIZ3 MOV X A,L OR 10H ; R3'<- 1 MOVXL A GRKIZ3: MOV Y A,L AND 0FH JR NZ,GRKIZ4 MOV Y A,L OR 1 ;R5'<- 1 MOVYL A GRKIZ4: MOV Y A,L AND 0F0H JR NZ,GRK3S1 MOV Y A,L OR 10H ;R4'<- 1 MOVYL A ;Rutina, ki po potrebi zamenja R345 in R3'4'5' ;tako, da je v R345 manjsa stevilka GRK3S1: MOV X A,L AND 0FH LD E,A ;R3 je v E MOV X A,L SWAP AND 0FH ;R3' je v A CP E ;F <- R3'-R3 JP M,GRK3SW ;SWAP ce je R3>R3' JR NZ,GRK3PS ;NOSWAP ce je R3ØR3' MOV Y A,H ;E <- R4 SWAP AND 0FH LD E,A MOV Y A,L SWAP AND 0FH ;A <- R4' CP E JP M,GRK3SW ;SWAP ce je R4>R4' JR NZ,GRK3PS ;NOSWAP ce je R4=<R4' MOV Y A,H ;A <- R5 AND 0FH LD E,A MOV Y A,L AND 0FH ;A <- R5' CP E ;F <- R5'-R5 JP M,GRK3SW ;SWAP ce je R5>R5' JR GRK3PS ;NOSWAP ce je R5=<R5' GRK3SW: MOV X A,L ;swap R3 in R3' SWAP MOVXL A MOV Y A,L ;swap R4,R4' in R5,R5' MOV Y E,H MOV Y H,A MOV Y L,E GRK3PS: LD A,10111000B ;prizgi TX in PG OUT (P1),A LD A,I SET 6,A ;nastvi vektor za GRPISK LD I,A LD E,210 ;cakaj 210ms GRK3PS0:LD B,103 ;zakasnitev 1ms GRK3PS1:IN A,(P0) DJNZ GRK3PS1 ;ena zanka je 9.6æs DEC E JR NZ,GRK3PS0 GRKPI: ;rutina, ki avtomatsko vstavlja Group tone ce je ;to le mozno MOV X A,L AND 0FH LD H,A ;H:=R3 MOV Y A,H SWAP AND 0FH LD L,A ;L:=R4 MOV Y A,H AND 0FH LD D,A ;D:=R5 LD A,L ;A:=R4 CP 0 ;R4=0 JR NZ,GRKCR5 INC H ;R3:=R3+1 LD L,1 ;R4:=1 LD D,1 ;R5:=1 JR GRKCR3 GRKCR5: LD A,D ;A:=R5 CP 0 ;R5=0 JR NZ,GRKC51 INC L ;R4:=R4+1 LD D,1 ;R5:=1 LD A,L CP 10 JR NZ,GRKC41 LD L,1 INC H JR GRKCR3 GRKC51: CP 1 ;R5=1 JR NZ,GRKMPI GRKC41: LD A,L ;A:=R4 CP 1 ;R4=1 JR NZ,GRKCR4 GRKCR3: MOV X A,L SWAP AND 0FH ;A:=R3' CP H ;F:=R3'-R3 JR Z,GRKC49 ;R3'=R3 GRKC3P: LD L,0 ;R4:=0 LD D,0 ;R5:=0 JR GRKMPI GRKC49: MOV Y A,L CP 99H ;(R4'=9)AND(R5'=9)=>F:=Z JR Z,GRKC3P GRKCR4: MOV X A,L SWAP AND 0FH ;A:=R3' CP H ;F:=R3'-R3 JR NZ,GRKCI5 MOV Y A,L SWAP AND 0FH ;A:=R4' CP L ;F:=R4'-R4 JR NZ,GRKCI5 MOV Y A,L AND 0FH ;A:=R5' CP 9 JR Z,GRKCI5 JR GRKMPI GRKCI5: LD D,0 GRKMPI: ;Rutina za klic programa za Piskanje MOV X A,L AND 0F0H OR H MOVXL A ;najprej shranimo R3 LD A,L SWAP OR D MOVYH A ;nato se R4 in R5 DISPL345 ;piskaj ton ************************************ JP GRPISK ;klisi rutino za GRPRTN: ;piskanje LD E,98 ;cakaj 100ms e=100 GRK3WA0:LD B,103 ;zakasnitev 1ms b=103 GRK3WA1:IN A,(P0) DJNZ GRK3WA1 ;ena zanka je 9.6æs DEC E JR NZ,GRK3WA0 MOV Y E,H ;primerjaj med sabo R4,5 MOV Y A,L ;in R4'R5' CP E ;ce niso enaki pojdi na JR NZ,GRKINC ;povecanje R345 MOV X A,L ;primerjaj se R3 LD E,A SWAP XOR E ;ce je R3=R3'->> A=0 JP Z,LASTWAIT ;if A=0 pojdi v Z1 GRKINC: ;povecanje R345 za 1 in nadaljevanje ;Grupnega klica MOV Y A,H ;A:=R5 AND 0FH ;ce je R5=0 potem ne JP Z,GR5TST ;povecaj ampak skoci MOV Y A,H AND 0F0H LD E,A ;zacasno shrani R4 MOV Y A,H AND 0FH INC A ;povecaj R5 CP 10 ;ali je R5=10 JR Z,GRKINC1 ;if R5=10 JR OR E ;sicer shrani R4 in R5 MOVYH A JP GRKPI ;in nadaljuj s piskanjem GRKINC1:LD A,E ;poklici R4 SWAP INC A ;povecaj R4 CP 10 ;ali je R4=10 JR Z,GRKINC2 ;if R4=10 JR SWAP OR 1 ;R5=1 MOVYH A ;shrani R4inR5 JP GRKPI ;in nadljuj s piskanjem GRKINC2:MOVYH 11H ;brisi R4inR5 R4=1,R5=1 MOV X A,L ;povecaj se R3 AND 0F0h LD E,A MOV X A,L AND 0FH INC A OR E MOVXL A JP GRKPI GR5TST: ;Testiramo ali smo prisli do konca z ;piskanjem G tona v R5 MOV X A,L ;A:=R3'R3 LD E,A ;E:=A SWAP ;A:=R3R3' XOR E ;primerjaj R3' in R3 JP NZ,GRKPI ;JP ce nista enaka MOV Y A,H AND 0F0H LD E,A ;Eh:=R4 MOV Y A,L AND 0F0H ;Ah:=R4' CP E ;F:=R4'-R4 JR Z,LASTWAIT ;JP ce sta enaka LD A,E ;A:=R4 CP 0 JP NZ,GRKPI JR LASTWAIT ;Rutina Skupinskega klica za 3 fiksirane cifre. ;glej Labelo GRKLIC GRKLIC2: MOV Y A,H AND 0F0H CP 0F0H ;ali je R4=0Fh JP Z,KS12 MOV X A,L AND 0FH ;A:=R3 LD E,A ;E:=R3 SWAP OR E ;A:=R3R3 MOVXL A JP GRKSWR LASTWAIT: ;5 sek cakanje na zadnjega ki smo ga ; poklicali s skupinskim klicem GLWPI MACRO FREQ, WTAB, WATIME LOCAL GLWC0,GLWC1 LD HL,FREQ LD D,WATIME LD B,WTAB+TAB LD C,0 ;zacni na nicti poziciji tabele GLWC0: LD E,200 ;generiraj 200 bytov tabele GLWC1: LD A,(BC) OR 10110000B OUT (P1),A ;glavna zanka za INC C ;digitaliziraje DEC E ;sinusov JR NZ,GLWC1 INC HL LD C,(HL) DEC D JP NZ,GLWC0 ENDM EXX LD B,5 ;Cakaj 5 sekund EXX GLW: WAIT 110 WAIT 200 GLWPI CCIR4,15,20 ;1358Hz,70ms WAIT 200 GLWPI CCIR4,15,20 WAIT 250 GLWPI CCIR1,12,28 ;1124Hz,100ms EXX DEC B EXX JP NZ,GLW LD A,I RES 6,A ;brisi vektor za LD I,A ;skupinski klic JP KEYRTN .COMMENT @ IZPISI:DEFB X ;program je rabljen le pri testiranju LD A,L ;izpise vrednost registra B na display SWAP AND 0FH LD B,A defb y ld a,l SWAP and 0fH LD B,A LD H,0 ;ta rutina je le za testiranje LD A,0FH ; OUT (P0),A ;glej linijo 9970 LD A,0FFH OUT (P0),A LD A,B CP 10 JR C,IZPIZP IZPISZ1:INC H SUB 10 CP 10 JR NC,IZPISZ1 IZPIZP: OR 11100000B OUT (P0),A OR 0F0H OUT (P0),A LD A,H OR 11010000B OUT (P0),A OR 0F0H OUT (P0),A OUT (P1),A JR IZPISI @ DEFM "MACRO-80 RTL END" END