S53MV > DSP3MV 12.02.00 22:20 663 Lines 21349 Bytes #999 @SVN BID : C20S50BOX01A Read: S53MV S53RI S57MMK Subj: KISSTNC.ASM Path: !S50BOX! Sent: 000212/2120z @:S50BOX.SVN.EU [Ljubljana ] bcm1.42 From: S53MV @ S50BOX.SVN.EU (Matjaz) To: DSP3MV @ SVN X-Info: No login password ;*** Preizkus mega int KISS TNC tiskanine - 12/02/2000 *** ;*** Tabela izjem na zacetku *** zacetek $00040000000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 $00000100000001000000010000000100 movea.l #$40000,a7 ;ponovno postavi SP move.w #8191,d0 ;prepisi EPROM v RAM movea.l #0,a0 movea.l #0,a1 zacete1 move.l (a0)+,(a1)+ dbf d0,zacete1 tst.l (#$ccccccc) ;preklopi RD na RAM!!!!!!!!!!!!!!!!!! ;!!! Tu ni vec poti nazaj !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! bsr.w iniblok ;razrezi spomin v bloke bsr.w inivmes ;dodeli vmesnike bsr.w inirxad ;dodeli bloke in naslove za sprejem bsr.w rxaint move.l a0,(#aintoff) ;postavi naslov AV INT3 bsr.w spurint move.l a0,(#sintoff) ;postavi naslov AV INT2 bsr.w rxbint move.l a0,(#bintoff) ;postavi naslov AV INT1 bsr.w iniscc ;inicializacija SCCja andi #$f8ff,sr ;prioriteta procesorja 0!!!!!!!!!!!!!!!! bra.w gzanka ;*** Naslovi SCCja Z8530 *** kanalbc equ $260001 ;SCC#1 naslov B command kanalbd equ $260003 ;SCC#1 naslov B data kanalac equ $260005 ;SCC#1 naslov A command kanalad equ $260007 ;SCC#1 naslov A data acmdoff equ -2 ;odmik A komande glede na A podatke bdatoff equ -4 ;odmik B podatkov glede na A podatke aintoff equ $6c ;odmik A-int v tabeli izjem sintoff equ $68 ;odmik prazne prekinitve, vektor #2 bintoff equ $64 ;odmik B-int v tabeli izjem ;*** Inicializacija SCCja, A=SDLC, B=UART *** iniscc move.b (#kanalac),d0 ;precita RR0, resetira kazalce moveq #5,d0 ;popolni reset SCCja lea #4(pc),a0 bra.b iniscc1 $09c0 ;WR9 popolni reset SCCja $0200 ;WR2 INT vector #0 $0900 ;WR9 status low, izkljucen MIE iniscc1 move.b (a0)+,(#kanalac) nop dbf d0,iniscc1 moveq #35,d0 ;inicializacija kanala A (megabit) lea #4(pc),a0 bra.b iniscc2 $04e0 ;WR4 SDLC mode $0100 ;WR1 INT disable $0aa0 ;WR10 CRC preset 1, NRZI, flag idle $077e ;WR7 flag $03c8 ;WR3 RX 8bits/character $0561 ;WR5 TX 8bits/character, SDLC CRC $0e62 ;WR14 disable DPLL & BRG, PCLK>BRG, DTR $0b87 ;WR11 XTAL, RTxC>RXclk=TXclk, DPLL>TRxC $0c02 ;WR12 BRG lower byte ;modulo deljenja 8=38.4kbps $0d00 ;WR13 BRG upper byte $0ee2 ;WR14 set NRZI mode, DTR $0e82 ;WR14 set source = BR generator (PCLK), DTR $0e22 ;WR14 enter DPLL search mode, DTR $0e03 ;WR14 enable BRG, DTR $03c9 ;WR3 RX enable $0569 ;WR5 TX enable, brez RTS!!! $0f80 ;WR15 break/abort IE $01f9 ;WR1 DMA RX, RX INT on special condition, EXT INT iniscc2 move.b (a0)+,(#kanalac) nop dbf d0,iniscc2 moveq #27,d0 ;inicializacija kanala B (UART) lea #4(pc),a0 bra.b iniscc3 $0444 ;WR4 async mode, no parity, 1 stop bit, x16 clk $0100 ;WR1 INT disable $0a00 ;WR10 NRZ $03c0 ;WR3 RX 8bits/character $0560 ;WR5 TX 8bits/character $0e62 ;WR14 disable DPLL & BRG, DTR, PCLK>BRG $0b86 ;WR11 XTAL, RTxC>RXclk=TXclk, BRG>TRxC $0c00 ;WR12 BRG lower byte ;modulo deljenja 2=153.6kbps $0d00 ;WR13 BRG upper byte $0e03 ;WR14 DTR, enable BRG $03c1 ;WR3 RX enable $056a ;WR5 TX enable, RTS $0f00 ;WR15 disable INT $01e0 ;WR1 DMA RX, all INT off iniscc3 move.b (a0)+,(#kanalbc) nop dbf d0,iniscc3 rts ;*** Okvir iz SCC-RXA *** rxaokv move.b #3,(#kanalac) ;RR3 preglej stanje SCC RX move.b (#kanalac),d0 andi.b #$28,d0 ;SCC RXIP & EXTSTATIP? bne.b rxaokv1 rts rxaokv1 move.b #3,(#kanalac) ;WR3 RX disable move.b #$c8,(#kanalac) clr.w d1 ;pobrisi dolzino okvirja v D1.W andi.b #$08,d0 ;break/abort IP? bne.b rxaokv2 move.b #1,(#kanalac) ;RR1 - kontrola sprejetega okvirja move.b (#kanalac),d0 andi.b #$ee,d0 cmpi.b #$86,d0 bne.b rxaokv2 move.w #maxdol,d1 ;izracunaj dolzino okvirja v D1.W sub.w d7,d1 subq.w #2,d1 ;odsteje CRC znaka viska bpl.b rxaokv2 clr.w d1 rxaokv2 move.b #$30,(#kanalac) ;WR0 error reset command move.b #$10,(#kanalac) ;WR0 reset ext/status interrupt cmpi.w #mindol,d1 ;pravilno sprejeti okvir? bcs.b rxaokv3 move.w (#rxablok),d0 ;sprejeti blok v vmesnik? move.w (#smeti),d2 cmp.w d2,d0 beq.b rxaokv4 bsr.w naslov move.w d1,(a0) move.w (#rxablok),d0 movea.l (#rxvmes),a0 bsr.w okvirvv rxaokv4 bsr.w dodeli ;dodeli nov blok za sprejemnik move.w d0,(#rxablok) bne.b rxaokv3 move.w (#smeti),(#rxablok) rxaokv3 move.w (#rxablok),d0 ;postavi naslove sprejemnika bsr.w naslov move.w #1,#rxkanal(a0) adda.w #bokvir,a0 movea.l a0,a5 move.w #maxdol,d7 move.b #3,(#kanalac) ;WR3 RX enable move.b #$c9,(#kanalac) rts ;*** Preklop sprejem/oddaja kanala A *** txaglav equ 500 txarep equ 100 txakuza equ 100000 tecnoba equ 16384 txaprek move.w (#txastat),d0 ;stanje 0 - sprejem bne.b txapre6 bsr.w rxaokv movea.l (#txavmes),a0 ;cakajoci okvirji za oddajo? move.w (a0)+,d0 cmp.w (a0),d0 bne.b txapre1 rts txapre1 move.l (#milisek),d0 ;nakljucno cakanje za oddajo? sub.l (#txastev),d0 cmpi.l #txaglav,d0 bcc.b txapre2 rts txapre2 move.l (#milisek),(#txastev) ;resetira stevec btst #3,(#kanalac) ;pogleda in caka na DCD? beq.b txapre4 rts txapre4 bsr.w psevnak ;tecnoba se primerja s psevdonak. stev. cmpi.w #tecnoba,d0 bcs.b txapre5 rts txapre5 move.b #3,(#kanalac) ;WR3 RX disable move.b #$c8,(#kanalac) move.b #5,(#kanalac) ;WR5 vkljuci RTS!!! move.b #$6b,(#kanalac) move.l (#milisek),(#txastev) move.w #1,(#txastat) ;preklop v stanje 1 rts txapre6 subq.w #1,d0 ;stanje 1 - oddaja sinhronizacijske glave bne.b txapre8 move.l (#milisek),d0 ;kontrola casa? sub.l (#txastev),d0 cmpi.l #txaglav,d0 bcc.b txapre7 rts ;cas se se ni iztekel txapre7 move.b #$30,(#kanalac) ;WR0 error reset move.w #2,(#txastat) ;stanje pripravljena oddaja rts txapre8 subq.w #1,d0 ;stanje 2 - priprava okvirja za oddajo bne.b txapre9 movea.l (#txavmes),a0 bsr.w izokvir move.w d0,(#txablok) ;stevilka okvirja, konec oddaje? beq.w txapr13 move.b #$30,(#kanalac) ;WR0 error reset bsr.w naslov ;postavi naslove oddajnega bloka move.w (a0),d7 subq.w #1,d7 adda.w #bokvir,a0 movea.l a0,a5 bsr.w txaint ;postavi naslov oddajne prekinitve move.l a0,(#aintoff) move.b #$80,(#kanalac) ;reset TX CRC generator move.b #1,(#kanalac) ;WR1 vkljuci TX DMA request move.b #$d9,(#kanalac) move.l (#milisek),(#txastev) move.w #3,(#txastat) ;stanje oddaja okvirja rts txapre9 subq.w #1,d0 ;stanje 3 - oddaja okvirja bne.b txapr11 move.l (#milisek),d0 sub.l (#txastev),d0 cmpi.l #txakuza,d0 bcc.b txapr10 tst.w d7 bmi.b txapr10 rts txapr10 move.l (#milisek),(#txastev) move.w #4,(#txastat) ;stanje oddaja repa rts txapr11 move.l (#milisek),d0 ;stanje 4 - oddaja repa sub.l (#txastev),d0 cmpi.l #txarep,d0 bcc.b txapr12 rts txapr12 move.w (#txablok),d0 ;sprosti oddani blok bsr.w sprosti move.w #2,(#txastat) ;stanje pripravljena oddaja rts txapr13 clr.w (#txastat) ;stanje 0 - sprejem move.b #5,(#kanalac) ;WR5 RTS izkljuci oddajnik move.b #$69,(#kanalac) bsr.w rxaint ;postavi naslov sprejemne prekinitve move.l a0,(#aintoff) move.w (#rxablok),d0 ;naslov sprejemnega bloka bsr.w naslov adda.w #bokvir,a0 movea.l a0,a5 move.w #maxdol,d7 move.b #1,(#kanalac) ;WR1 vkljuci RX DMA request move.b #$f9,(#kanalac) move.b #3,(#kanalac) ;WR3 RX enable move.b #$c9,(#kanalac) rts ;*** Prekinitve SCC-TXA, neposredna uporaba A4,A5,D7 *** txaint lea #4(pc),a0 ;naslov prekinitve v A0 rts move.b (a5)+,(a6) ;prekinitveni podprogram subq.w #1,d7 bmi.b txaint1 rte txaint1 move.b #$c0,#acmdoff(a6) ;reset TX underrun/eom latch nop move.b #1,#acmdoff(a6) ;WR1 DMA request disable nop move.b #$59,#acmdoff(a6) rte ;*** Prekinitve SCC-RXA, neposredna uporaba A5,A6,D7 *** rxaint lea #4(pc),a0 ;naslov prekinivte v A0 rts subq.w #1,d7 ;prekinitveni podprogram bmi.b rxaint1 move.b (a6),(a5)+ rte rxaint1 clr.w d7 tst.b (a6) rte ;*** Prekinitve SCC-RXB, neposredna uporaba A4,A6,D6 *** rxbint lea #4(pc),a0 ;naslov prekinitve v A0 rts move.b #bdatoff(a6),#0(a4,d6.w) ;prekinitveni podprog. subq.w #1,d6 bmi.b rxbint1 rte rxbint1 addi.w #dolblok,d6 rte ;*** Prazni prekinitveni podprogram *** spurint lea #4(pc),a0 ;naslov prekinitve v A0 rts rte ;*** KISS oddaja okvirjev na kanalu B *** nicla equ 0 fend equ $c0 fesc equ $db tfend equ $dc tfesc equ $dd kisstx btst #2,(#kanalbc) ;oddajnik B razpolozljiv? bne.b kisstx1 rts kisstx1 move.w (#txbstat),d0 ;stanje 0 - cakanje na okvir bne.b kisstx3 movea.l (#txbvmes),a0 bsr.w izokvir tst.w d0 bne.b kisstx2 rts kisstx2 move.w d0,(#txbblok) ;postavi stevilko in naslov bsr.w naslov move.l a0,(#txbstev) clr.w #rxkanal(a0) ;#rxkanal(a0) se uporabi kot kazalec move.w #2,(#txbstat) ;preklop v stanje 2 rts kisstx3 subq.w #1,d0 ;stanje 1 - oddaja vsebine okvirja bne.b kisstx7 movea.l (#txbstev),a0 ;konec znakov v okvirju? subq.w #1,(a0) bpl.b kisstx4 move.w #4,(#txbstat) ;preklop v stanje 4 rts kisstx4 move.w #rxkanal(a0),d0 ;preverjanje in oddaja znaka move.b #bokvir(a0,d0.w),d1 cmpi.b #fend,d1 ;posebni znak FEND? bne.b kisstx5 move.b #fesc,(#kanalbd) move.b #tfend,#bokvir(a0,d0.w) addq.w #1,(a0) rts kisstx5 cmpi.b #fesc,d1 ;posebni znak FESC? bne.b kisstx6 move.b d1,(#kanalbd) move.b #tfesc,#bokvir(a0,d0.w) addq.w #1,(a0) rts kisstx6 move.b d1,(#kanalbd) ;navaden znak, povecaj kazalec! addq.w #1,#rxkanal(a0) rts kisstx7 subq.w #1,d0 ;stanje 2 - oddaja FEND na zacetku bne.b kisstx8 move.b #fend,(#kanalbd) move.w #3,(#txbstat) ;preklop v stanje 3 rts kisstx8 subq.w #1,d0 ;stanje 3 - oddaja #nicla za zacetnim FEND bne.b kisstx9 move.b #nicla,(#kanalbd) move.w #1,(#txbstat) ;preklop v stanje 1 rts kisstx9 move.b #fend,(#kanalbd) ;stanje 4 - FEND, sprosti! move.w (#txbblok),d0 bsr.w sprosti clr.w (#txbstat) ;preklop v stanje 0 rts ;*** KISS sprejem okvirjev na kanalu B *** kissrx move.w (#rxbstev),d0 ;nov znak iz RXB int? cmp.w d6,d0 bne.b kissrx1 rts kissrx1 move.b #0(a4,d0.w),d1 ;nov znak v D1.B, nov kazalec subq.w #1,d0 bpl.b kissrx2 addi.w #dolblok,d0 kissrx2 move.w d0,(#rxbstev) bsr.b kissrx3 bra.b kissrx ;ponavljaj dokler so znaki v vmesniku kissrx3 move.w (#rxbstat),d0 ;stanje 0 - cakanje zacetni FEND? bne.b kissrx5 cmpi.b #fend,d1 beq.b kissrx4 rts kissrx4 move.w #1,(#rxbstat) ;preklop v stanje 1 rts kissrx5 subq.w #1,d0 ;stanje 1 - cakanje na zacetno niclo? bne.b kissrx9 cmpi.b #fend,d1 ;se en znak FEND? - ostani v 1! bne.b kissrx6 rts kissrx6 cmpi.b #nicla,d1 ;zacetna nicla? beq.b kissrx7 clr.w (#rxbstat) ;nazaj v stanje 0, cakaj FEND rts kissrx7 bsr.w dodeli ;dodeli nov blok za sprejem RXB tst.w d0 bne.b kissrx8 clr.w (#rxbstat) ;nazaj v stanje 0, ko ni bloka! rts kissrx8 move.w d0,(#rxbblok) ;nov sprejemni blok bsr.w naslov move.l a0,(#rxbbadd) clr.w (a0) move.w #2,#rxkanal(a0) move.w #2,(#rxbstat) ;preklop v stanje 2 rts kissrx9 subq.w #1,d0 ;stanje 2 - sprejem navadnih znakov? bne.b kissr14 cmpi.b #fend,d1 ;FEND na koncu okvirja? bne.b kissr11 movea.l (#rxbbadd),a0 ;kontrola dolzine okvirja move.w (#rxbblok),d0 cmpi.w #mindol,(a0) ;sprosti prekratek okvir? bcc.b kissr10 bsr.w sprosti clr.w (#rxbstat) ;preklop v stanje 0 rts kissr10 movea.l (#rxvmes),a0 ;okvir v sprejemni vmesnik bsr.w okvirvv clr.w (#rxbstat) ;preklop v stanje 0 rts kissr11 cmpi.b #fesc,d1 ;znak FESC? bne.b kissr12 move.w #3,(#rxbstat) ;preklop v stanje 3 rts kissr12 movea.l (#rxbbadd),a0 ;naslov sprejemnega okvirja move.w (a0),d0 cmpi.w #maxdol,d0 ;max dolzina okvirja? bcs.b kissr13 rts kissr13 move.b d1,#bokvir(a0,d0.w) ;nov znak v okvir addq.w #1,(a0) rts kissr14 move.w #2,(#rxbstat) ;stanje 3 - povratek v 2! cmpi.b #tfend,d1 ;znak TFEND? bne.b kissr15 move.b #fend,d1 bra.b kissr12 kissr15 cmpi.b #tfesc,d1 ;znak TFESC? bne.b kissr16 move.b #fesc,d1 bra.b kissr12 kissr16 rts ;*** Parametri programa *************************************** ramzac equ $3000 ;zacetek podatkovnega RAMa ramdol equ $c800 ;dolzina podatkovnega RAMa dolblok equ 512 ;dolzina enega bloka, mora biti potenca 2!!!!!! dolbexp equ 1 ;binarni eksponent-8 dolzine bloka, glej dolblok dolvmes equ 300 ;dolzina vmesnika v bajtih (max: dolblok-4) ;dolzina okvirja na zacetku (offset=0) (.W) rxkanal equ 2 ;offset stevilke sprejemnega kanala (.W) bokvir equ 16 ;offset vsebine okvirja maxdol equ 480 ;max dolzina vsebine okvirja mindol equ 15 ;min dolzina vsebine okvirja ;organizacija spomina (ramzac,ramdol): ;zastavice blokov (celo stevilo long) ;bloki spomina (celostevilski mnogokratnik 32) ;naslovi skupnih parametrov v RAMu zastave equ $3ff00 ;naslov parametra dolzine zastavic (.W) zastkaz equ $3ff02 ;kazalec na naslednji prost blok (.W) rxvmes equ $3ff04 ;naslov sprejemnega vmesnika (.L) txavmes equ $3ff08 ;naslov A oddajnega vmesnika (.L) txbvmes equ $3ff0c ;naslov B oddajnega vmesnika (.L) smeti equ $3ff10 ;stevilka bloka za v smeti (.W) rxablok equ $3ff12 ;blok sprejemnika A (.W) txablok equ $3ff14 ;blok oddajnika A (.W) rxbblok equ $3ff16 ;blok sprejemnika B (.W) txbblok equ $3ff18 ;blok oddajnika B (.W) milisek equ $3ff1a ;milisekundni stevec (.L) txastat equ $3ff1e ;stanje oddajnika A (.W) txastev equ $3ff20 ;stevec oddajnika A (.L) txbstat equ $3ff24 ;stanje oddajnika B (.W) txbstev equ $3ff26 ;stevec oddajnika B (.L) nakljuc equ $3ff2a ;spremenljivka psevdonakljucnega izvora (.L) rxbstat equ $3ff2e ;stanje sprejemnika B (.W) rxbstev equ $3ff30 ;stevec sprejemnika B (.W) rxbbadd equ $3ff32 ;naslov B sprejemnega bloka (.L) ;*** Razrezi spomin (ramzac,ramdol) v bloke, zastavice *** iniblok move.w #dolblok,d1 mulu #32,d1 addq.l #4,d1 move.l #ramdol,d0 divu d1,d0 ;izracunaj stevilo blokov /32 v D0.W mulu #4,d0 move.w d0,(#zastave) movea.l #ramzac,a0 bra.b iniblo1 iniblo2 move.b #-1,(a0)+ ;postavi zastavice blokov iniblo1 dbf d0,iniblo2 clr.w (#zastkaz) ;pobrisi kazalec na zastavice rts ;*** Izracunaj naslov bloka stevilka D0.W v A0 *** naslov subq.w #1,d0 ;preverjanje stevilke bloka? bmi.b naslov1 movea.l #ramzac,a0 ;izracunaj naslov bloka adda.w (#zastave),a0 ext.l d0 lsl.l #8,d0 lsl.l #dolbexp,d0 adda.l d0,a0 rts naslov1 movea.l #0,a0 ;naslov neobstojecega bloka rts ;*** Sprosti blok stevilka D0.W v spominu *** sprosti subq.w #1,d0 ;preverjanje stevilke bloka? bmi.b sprost1 movea.l #ramzac,a0 move.w d0,d1 lsr.w #3,d1 adda.w d1,a0 andi.w #7,d0 moveq #$80,d1 ror.b d0,d1 or.b d1,(a0) sprost1 rts ;*** Dodeli prost blok spomina, vrni stevilko bloka v D0.W *** dodeli move.w (#zastave),d1 move.w d1,d3 lsr.w #2,d1 movea.l #ramzac,a0 move.w (#zastkaz),d2 clr.w d0 ;nicla pomeni, da ni prostega bloka.... bra.b dodeli2 ;zanka isce nenicelno skupino zastavic dodeli1 addq.w #4,d2 dodeli2 andi.w #-4,d2 ;kontrola kazalca na zastavice cmp.w d3,d2 bcs.b dodeli3 clr.w d2 dodeli3 move.l #0(a0,d2.w),d4 dbne d1,dodeli1 beq.b dodeli4 ;ni prostega bloka v skupini 32? move.w d2,d0 lsl.l #3,d0 moveq #31,d1 ;poisce prosti blok v skupini 32 zastvic dodeli5 addq.w #1,d0 lsl.l #1,d4 dbcs d1,dodeli5 rol.l d1,d4 ;zavrti d4 nazaj v prvotni polozaj move.l d4,#0(a0,d2.w) dodeli4 move.w d2,(#zastkaz) rts ;*** Izracunaj stevilo prostih blokov v D0.L *** nprost move.w (#zastave),d1 lsr.w #2,d1 movea.l #ramzac,a0 clr.l d0 bra.b nprost3 nprost1 move.l (a0)+,d2 moveq #31,d3 moveq #0,d4 nprost2 add.l d2,d2 addx.l d4,d0 dbf d3,nprost2 nprost3 dbf d1,nprost1 rts ;*** Dodeli vmesnike za sprejem in oddajo *** inivmes bsr.b inivme1 move.l a0,(#rxvmes) bsr.b inivme1 move.l a0,(#txavmes) bsr.b inivme1 move.l a0,(#txbvmes) rts inivme1 bsr.w dodeli bsr.w naslov clr.l (a0) ;pocisti pisalni/bralni kazalec v vmesniku rts ;*** Okvir stevilka D0.W v vmesnik A0 *** okvirvv move.w (a0),d1 ;pisalni/bralni kazalec move.w #2(a0),d2 addq.w #2,d1 ;povecaj pisalni kazalec, kontrola cmpi.w #dolvmes,d1 bcs.b okvirv1 clr.w d1 okvirv1 cmp.w d1,d2 ;prostor v vmesniku na razpolago? beq.b okvirv2 move.w (a0),d2 ;stari kazalec za blok v vmesnik move.w d0,#4(a0,d2.w) move.w d1,(a0) ;shrani nov pisalni kazalec rts okvirv2 bsr.w sprosti ;sprosti okvir, ce ni prostora! rts ;*** Stevilka okvirja v D0.W iz vmesnika A0 *** izokvir move.w (a0),d1 ;pisalni/bralni kazalec move.w #2(a0),d2 cmp.w d1,d2 ;nov okvir na razpolago? bne.b izokvi1 clr.l d0 ;0 ni novega okvirja rts izokvi1 move.w #4(a0,d2.w),d0 ;stevilka okvirja addq.w #2,d2 ;povecaj bralni kazalec, kontrola cmpi.w #dolvmes,d2 bcs.w izokvi2 clr.w d2 izokvi2 move.w d2,#2(a0) ;novi kazalec rts ;*** Generator psevdo-nakljucnega stevila v D0.L *** psevnak move.l (#nakljuc),d0 ;PN generator zataknjen v 0? bne.b psevna1 moveq #-1,d0 psevna1 add.l d0,d0 ;polinomski generator 1+(X**28)+(X**31) btst #28,d0 beq.b psevna2 eori.w #1,d0 psevna2 btst #31,d0 beq.b psevna3 eori.w #1,d0 psevna3 move.l d0,(#nakljuc) rts ;*** Dodeli bloke in naslove za sprejem in oddajo *** inirxad bsr.w dodeli move.w d0,(#smeti) ;dodeli blok za smeti bsr.w dodeli move.w d0,(#rxablok) ;dodeli blok za sprejemnik A bsr.w naslov move.w #1,#rxkanal(a0) movea.l #kanalad,a6 ;postavi naslove sprejemnika A adda.w #bokvir,a0 movea.l a0,a5 move.w #maxdol,d7 bsr.w dodeli ;dodeli naslov za asinhroni RXB vmesnik bsr.w naslov movea.l a0,a4 clr.w d6 clr.w (#rxbstat) clr.w (#rxbstev) clr.l (#milisek) ;resetiranje urnega stevca clr.w (#txastat) clr.l (#txastev) clr.w (#txbstat) rts ;*** Zanka za obdelavo SCC-RXA okvirjev *** gzanka addq.l #1,(#milisek) ;poskusni urni stevec!!!!!!!!!!!!! bsr.w txaprek bsr.w kisstx bsr.w kissrx bsr.w obdela bra.b gzanka ;*** Obdelaj sprejete okvirje *** obdela movea.l (#rxvmes),a0 bsr.w izokvir tst.w d0 bne.b obdela1 rts obdela1 move.w d0,-(a7) ;usmeri sprejeti okvir na obratni kanal bsr.w naslov move.w (a7)+,d0 cmpi.w #1,#rxkanal(a0) beq.b obdela2 movea.l (#txavmes),a0 bra.b obdela3 obdela2 movea.l (#txbvmes),a0 obdela3 bsr.w okvirvv rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ------------------------------------------------------ S53MV > DSP3MV 12.02.00 22:21 43 Lines 2185 Bytes #999 @SVN BID : C20S50BOX01B Read: S53MV S53RI S57MMK S52CO S54DF S57UUD S55OO Subj: KISSTNC.TXT Path: !S50BOX! Sent: 000212/2121z @:S50BOX.SVN.EU [Ljubljana ] bcm1.42 From: S53MV @ S50BOX.SVN.EU (Matjaz) To: DSP3MV @ SVN X-Info: No login password Hojhojhoj, zapisa KISSTNC.PCB in KISSTNC.ASM opisujeta poskus megabitnega TNCja, ki za zacetek dela v KISS rezimu. TNC uporablja dobri stari Z85C30 na prekinitvah se bolj starega MC68HC000. Ce iz vezja iztisnemo zadnji takt, je delovanje enega kanala mogoce celo na 1.2288Mbit/s pri CPU taktu priblizno 15MHz. Poleg procesorja in vmesnika je na tiskanini se EPROM 27C256, dva RAMa 62256 ali 628128 (podnozje je prirejeno za oba), nekaj 74HC cipovja, uporov, diod in vedno prisotnih 100nF. Takt daje DIL oscilator, ki ga za SCC deli z dva HC74. HC164, HC10 in HC374 poskrbijo za zagon 16-bitnega procesorja iz 8-bitnega EPROMa. HC138 dekodira naslove, HC02 se ukvarja z DTACK, HC08 poskrbi za nestandardni reset Z85C30, HC32 pa za WR in RD signale za oba RAM cipa. Dodatni HC244 prihrani dragocenih 11 taktov pri skakanju v prekinitve, ki so kodirane kar s schottky diodami (dve diodi prihranita HC148). Dostop do CMOS pomnilnika ob resetu ali izklopu upravlja 2N2369, tako da naj bi se njegova vsebina ohranila. Program je zaenkrat poskus, dela samo strogo KISS nacin. Hitrost na asinhroni strani je nastavljena na 153k6 pri taktu 19.6MHz. Procesor je v kockastem plasticnem ohisju s spodvihani nogicami. Tiskanina je prirejena za ustrezno podnozje, ki ima malo drugacno razporeditev 68 tack v dveh kvadratih. Poskusi zaenkrat kazejo dobro: stvar dela brezhibno celo pri taktu 33MHz in to s procesorjem 68HC000 za samo 10MHz! Max takt sicer izgleda zavisi le od RAM cipov: 70ns prilezejo do 33MHz, 120ns pa samo do 24MHz. 128k hibridi iz stirih SMD 62256 prav tako ne prilezejo cez 24MHz. Program je sicer napisan tako, da bi se dalo nanj nastukati SuperVozelj. Struktura blokov spomina je enaka. Razlika pa je v uporabi nekaterih registrov: A4,A5,A6,D6,D7 so stalno dodeljeni hitrim prekinitvam, zato jih program ne sme uporabljati prav nikjer drugje! Ker so vsi kosi CMOS, je poraba celotne naprave vkljucno s skramblerjem in switcher napajalnikom okoli 100mA pri 12V. Stvar bi lahko prav prisla tudi za majhen vozelj na soncne celice. Ta drugi kanal bi lahko bil WBFM 38k4 ali celo 1M2 PSK pri taktu nad 30MHz... 73 de Matjaz S53MV VSEM/DSP3MV >