PROGRAMSKA KODA ČITALCA |
IRLOCK | ldab | K_STAT | ; 4 naloži statusni in kontrolni register | |||
andb | #%00010000 | ; 2 preveri bit za odpiranje | ||||
beq | K_TOTA | ; 3 če ni postavljen skoči navzdol | ||||
rts | ; 5 drugače končaj rutino | |||||
;--------ZADRŽEVANJE NAPAK ZA 2 SEKUNDI(TOE)--------- | ||||||
K_TOTA | ldab | K_STAT | ; 4 naloži statusni in kontrolni register | |||
andb | #%00000011 | ; 2 preveri napake | ||||
beq | K_TOTB | ; 3 če ni napak skoči navzdol | ||||
inc | K_TO11 | ; 6 povečaj števec delčkov T0E (Time Out for Errors) | ||||
bne | K_TOTB | ; 3 če ni preliva skoči navzdol | ||||
inc | K_TO12 | ; 6 povečaj števec delcev TOE (delec =1 sekunda) | ||||
ldaa | #$02 | ; 2 naloži število delcev za 2 sekundi | ||||
cmpa | K_TO12 | ; 4 in jih primerjaj z števcem delcev TOE | ||||
bne | K_TOTB | ; 3 če nista pretekli 2 sekundi skoči navzdol | ||||
ldab | K_STAT | ; 4 naloži statusni in kontrolni register | ||||
andb | #%11111100 | ; 2 izbriši napake | ||||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
clr | K_TO11 | ; 6 izbriši TOE delčke | ||||
clr | K_TO12 | ; 6 izbriši TOE delce | ||||
;-----------TIME OUT TIMER (TOT)-------------------------------------------- | ||||||
K_TOTB | ldab | K_STAT | ; 4 naloži statusni in kontrolni register | |||
andb | #%01000000 | ; 2 preveri ce poteka branje ključa | ||||
beq | K_START | ; 3 če ne poteka skoči navzdol | ||||
inc | K_TO21 | ; 6 povečaj števec delčkov T0T (Time Out Timer) | ||||
bne | K_START | ; 3 če ni preliva skoči navzdol | ||||
inc | K_TO22 | ; 6 povečaj števec delcev T0T (delec = 1 sekunda) | ||||
ldaa | #$04 | ; 2 naloži število delcev za 4 sekunde | ||||
cmpa | K_TO22 | ; 4 in jih primerjaj z števcem delcev TOT | ||||
bne | K_START | ; 3 če niso pretekle 4 sekunde skoči navzdol | ||||
ldab | #%00000011 | ; 2 izbriši kontrolne bite in postavi napako preliva TOT | ||||
stab | K_STAT |
; 4 in shrani v statusni in kontrolni register |
||||
clr | K_TO21 | ; 6 izbriši TOT delčke | ||||
clr | K_TO22 | ; 6 izbriši TOT delce | ||||
clr | POINTR | ; 6 izbriši števec bitov | ||||
;-----------ANALIZA URE IN SMERI KLJUČA------------------------------ | ||||||
K_START | ldab | K_STAT | ; 4 naloži statusni in kontrolni register | |||
ldaa | _DPRA | ; 4 preberi vrata A v PIA | ||||
bmi | CLK_1 | ; 3 če je postavljen b7 (ura ključa) skoči navzdol | ||||
orab | #%01000000 | ; 2 postavi bit za potek branja ključa | ||||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
bmi | CLKK_1 | ; 3 če je ura 1 skoči navzdol | ||||
rts | ; 5 drugače končaj rutino | |||||
CLK_1 | orab | #%10000000 | ; 2 postavi uro na 1 | |||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
rts | ; 5 končaj rutino | |||||
CLKK_1 | andb | #%01111111 | ; 2 postavi uro na 0 | |||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
andb | #%00100000 | ; 2 preveri smer ključa | ||||
beq | DIR_0 | ; 3 če gre noter skoči navzdol | ||||
jmp | DIR_1 | ; 3 če gre ven skoči navzdol | ||||
;---------------KLJUČ GRE V KLJUČAVNICO---------------------------------------- | ||||||
DIR_0 | lsla | ; 2 premakni podatke iz PIA v levo | ||||
bmi | DATAK_1 | ; 3 če je postavljen b6 (koda ključa) skoči navzdol | ||||
clra | ; 2 | |||||
jmp | DATAK_0 | ; 3 skoči navzdol | ||||
DATAK_1 | ldaa | #$01 | ; 2 postavi LSB | |||
DATAK_0 | ldab | CODE | ; 4 naloži CODE (prebrano kodo ključa ob vsavitvi ključa) | |||
lslb | ; 2 in jo pripravi za naslednji bit | |||||
aba | ; 2 | |||||
staa | CODE | ; 4 shrani jo v CODE | ||||
inc | POINTR | ; 6 povečaj števec bitov | ||||
ldaa | POINTR | ; 4 nalozi števec bitov | ||||
cmpa | #$08 | ; 3 preveri vrednost števca | ||||
bne | POIN_8 | ; 3 če je manjši od 8 skoči navzdol | ||||
ldab | K_STAT | ; 4 naloži statusni in kontrolni register | ||||
orab | #%00100000 | ; 2 postavi smer ključa na 1 | ||||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
POIN_8 | rts | ; 5 končaj rutino | ||||
;---------------KLJUČ GRE IZ KLJUČAVNICE---------------------------------- | ||||||
DIR_1 | lsla | ; 2 premakni podatke iz PIA v levo | ||||
bmi | DATA_1 | ; 3 če je postavljen b7 (koda ključa) skoči navzdol | ||||
clra | ; 2 | |||||
jmp | DATA_0 | ; 3 skoči navzdol | ||||
DATA_1 | ldaa | #$80 | ; 2 postavi MSB | |||
DATA_0 | ldab | EDOC | ; 4 naloži EDOC (prebrano kodo ključa ob izvleku ključa) | |||
lsrb | ; 2 in jo pripravi za naslednji bit | |||||
aba | ; 2 | |||||
staa | EDOC | ; 4 shrani jo v EDOC | ||||
dec | POINTR | ; 6 zmanjšaj števec bitov | ||||
ldaa | POINTR | ; 4 nalozi števec bitov | ||||
beq | POIN_0 | ; 3 če je 0 skoči navzdol | ||||
rts | ; 5 končaj rutino | |||||
;---------------ANALIZA KOD------------------------------------------------------ | ||||||
POIN_0 | ldaa | CODE | ; 4 naloži CODE | |||
cmpa | EDOC | ; 4 primerjaj z EDOC | ||||
bne | CODE_E | ; 3 če kodi nista enaki skoči navzdol | ||||
cmpa | CODE_1 | ; 4 primerjaj z prvo veljavno kodo | ||||
beq | C_1_OK | ; 3 če se kodi ujemata skoči navzdol | ||||
cmpa | CODE_2 | ; 4 primerjaj z drugo veljavno kodo | ||||
beq | C_2_OK | ; 3 če se kodi ujemata skoči navzdol | ||||
ldab | K_STAT | ; 4 naloži statusni in kontrolni register | ||||
orab | #%00000001 | ; 2 postavi napako napačen ključ | ||||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
rts | ; 5 končaj rutino | |||||
CODE_E | ldab | K_STAT | ; 4 naloži statusni in kontrolni register | |||
orab | #%00000010 | ; 2 postavi napako napaka v kodi | ||||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
rts | ; 5 končaj rutino | |||||
C_1_OK | ldab | #%00010100 | ; 2 postavi bit za odklepanje, 2 bita za identifikacijo ključa in izbriši kontrolni register | |||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
rts | ; 5 končaj rutino | |||||
C_2_OK | ldab | #%00011000 | ; 2 postavi bit za odklepanje, 2 bita za identifikacijo ključa in izbriši kontrolni register | |||
stab | K_STAT | ; 4 in shrani v statusni in kontrolni register | ||||
rts | ; 5 končaj rutino | |||||
;=< 204 rutina porabi v najslabšem primeru 204 ciklov | ||||||
;----------------------------------------------------------------------------------------------------- | ||||||
INICIALIZACIA PIA (Peripherial interface adapter) | ||||||
INI_PIA | ldaa | #%00000000 | ||||
staa | _CRA | ; onemogoči vse prekinitve, ki ji generira PIA vmesnik A | ||||
staa | _CRB | ; onemogoči vse prekinitve, ki ji generira PIA vmesnik B | ||||
ldaa | #%00111111 | |||||
staa | _DPRA | ; vmesnik A ima b7 in b6 vhoda, ostalo so izhodi | ||||
ldaa | #%11111111 | |||||
staa | _DPRB | ; vmesnik B ima vse bite izhodne | ||||
ldaa | #%00000100 | |||||
staa | _CRA | ; ob branju vmesnika A dobim stanje podatkovnega registra A | ||||
staa | _CRB | ; ob branju vmesnika B dobim stanje podatkovnega registra B | ||||
rts | ; končaj podprogram | |||||
;----------------------------------------------------------------------------------------------------- | ||||||
UPORABNIKOVE SPREMENLJIVKE (izsek programa) | ||||||
~ | ||||||
K_STAT | rmb | 1 | ;kontrolno - | b7 - ura ključa | b3 - identifikacija ključa MSB | |
; statusni register | b6 - potek branja | b2 - identifikacija ključa LSB | ||||
; | b5 - smer ključa | b1 - napaka MSB | ||||
; | b4 - odklepaje | b0 - napaka LSB | ||||
; identifikacija | MSB | LSB | ||||
; ključa | 0 | 0 | ni ključa | |||
; | 0 | 1 | ključ 1 | |||
; | 1 | 0 | ključ 2 | |||
; | 1 | 1 | kombinacija ni uporabljena | |||
; napaka | MSB | LSB | ||||
; | 0 | 0 | ni napak | |||
; | 0 | 1 | napačen ključ | |||
; | 1 | 0 | napaka pri prebiranju kode ključa | |||
; | 1 | 1 | prekoračitev časa branja ključa | |||
(ključ ni bil izvlečen ali pa | ||||||
ni bil vstavljen pravilno) | ||||||
K_TO11 | rmb | 1 | ; števec delčkov TOE(Time Out for Errors) | |||
K_TO12 | rmb | 1 | ; števec delcev TOE(Time Out for Errors) | |||
K_TO21 | rmb | 1 | ; števec delčkov TOT(Time Out Timer) | |||
K_TO22 | rmb | 1 | ; števec delcev TOT(Time Out Timer) | |||
POINTR | rmb | 1 | ; števec bitov kode prebrane iz ključa | |||
CODE | rmb | 1 | ; koda prebrana pri vstavljanju ključa | |||
EDOC | rmb | 1 | ; koda prebrana pri izvleku ključa | |||
CODE_1 | rmb | 1 | ; koda prvega ključa | |||
CODE_2 | rmb | 1 | ; koda drugega ključa | |||
;----------------------------------------------------------------------------------------------------- | ||||||
INICIALIZACIJA SPREMENLJIVK (izsek podprograma) | ||||||
~ | ||||||
ldx | #$0000 | |||||
stx | K_STAT | ; izbriši kontrolno-statusni register in števec delčkov TOE | ||||
stx | K_TO12 | ; izbriši števec delcev TOE in števec delčkov TOT | ||||
stx | K_TO22 | ; izbriši števec delcev TOT in stevec bitov kode ključa | ||||
ldaa | #%01100000 | |||||
staa | CODE_1 | ; nastavimo kodo prvega ključa | ||||
ldaa | #%01000110 | |||||
staa | CODE_2 | ; nastavimo kodo drugega ključaključa | ||||
~ | ||||||
rts | ||||||