; LC-21, SVETLOSNI EFEKTI V.1.0 sa Z80A ; by: Stankovic Goran dipl.ing. Novembar 1989. ; www.qsl.net/yt2fsg goranstank@email.com ; $8000 1 Brzina (0.02...5.1s) ; $8002 1 Takt ; $8004 2 Pocetak paterna ; $8006 1 Duzina paterna ; $8008 1 Brzina paterna (0.02...5.1s) ; $800A 1 Broj paterna ; $800C 1 Max Broj paterna ; $800E 2 PODACI adresa ; $8010 1 Broj bafera ; $8011 3 Input bafer ; $8014 2 Brojac INT ; $8016 1 FLEG1 ; Inicijalizacija sistema SIST .EQU $8000 PORTA .EQU %11111000 PORTB .EQU %11111001 CAPORT .EQU %11111010 CBPORT .EQU %11111011 .ORG 0 LD SP,$8800 ;Za 8K RAM $A000 LD IY,SIST ;Inicijalizacija Z80A PIO LD A,255 OUT (CAPORT),A LD A,%11110000 OUT (CAPORT),A LD A,255 OUT (CBPORT),A LD A,0 OUT (CBPORT),A LD A,0 ;Ponisti port B OUT (PORTB),A JP STANKOVIC ; podprogram INT .ORG $38 DI EX AF,AF' EXX INC (IY+20) JR NZ,JAGODA INC (IY+21) JAGODA: DEC (IY+0) ; DEC BRZ. JR NZ,HOP LD A,(IY+8) LD (IY+0),A LD D,0 LD E,(IY+2) LD H,(IY+5) LD L,(IY+4) ADD HL,DE LD A,(HL) OUT (PORTB),A INC (IY+2) ;INC TAKT LD A,(IY+6) CP (IY+2) ; ?TAKT=DUZ.PAT. JR NZ,HOP LD (IY+2),0 ;TAKT=0 HOP: EX AF,AF' EXX EI RET ; Brisanje RAM memorije STANKOVIC: LD BC,$800 LD HL,SIST LOOP: LD (HL),0 INC HL DEC BC LD A,B OR C JR NZ,LOOP ; Postavljanje sistemskih promenljivih LD (IY+0),1 LD HL,PODACI LD (IY+14),L LD (IY+15),H LD A,(HL) LD (IY+4),A INC HL LD A,(HL) LD (IY+5),A INC HL LD A,(HL) LD (IY+6),A INC HL LD A,(HL) LD (IY+8),A LD (IY+22),7 LD HL,BRKOMBINACIJA LD A,(HL) LD (IY+12),A ; Omoguci prekid IM 1 EI ; Ispitivanje tastature START: LD A,%11111110 OUT (PORTA),A LD B,100 LOOP3: IN A,(PORTA) BIT 4,A JR Z,ISPIT1 BIT 5,A JR Z,ISPIT1 BIT 6,A JR Z,ISPIT1 BIT 7,A JR Z,ISPIT1 JR HOP1 ISPIT1: DJNZ LOOP3 BIT 4,A JP Z,BROJ7 BIT 5,A JP Z,BROJ8 BIT 6,A JP Z,BROJ9 BIT 7,A JP Z,FLASH HOP1: LD A,%11111101 OUT (PORTA),A LD B,100 LOOP4: IN A,(PORTA) BIT 4,A JR Z,ISPIT2 BIT 5,A JR Z,ISPIT2 BIT 6,A JR Z,ISPIT2 BIT 7,A JR Z,ISPIT2 JR HOP2 ISPIT2: DJNZ LOOP4 BIT 4,A JP Z,BROJ4 BIT 5,A JP Z,BROJ5 BIT 6,A JP Z,BROJ6 BIT 7,A JP Z,BRZINA HOP2: LD A,%11111011 OUT (PORTA),A LD B,100 LOOP5: IN A,(PORTA) BIT 4,A JR Z,ISPIT3 BIT 5,A JR Z,ISPIT3 BIT 6,A JR Z,ISPIT3 BIT 7,A JR Z,ISPIT3 JR HOP3 ISPIT3: DJNZ LOOP5 BIT 4,A JP Z,BROJ1 BIT 5,A JP Z,BROJ2 BIT 6,A JP Z,BROJ3 BIT 7,A JP Z,STOP HOP3: LD A,%11110111 OUT (PORTA),A LD B,100 LOOP6: IN A,(PORTA) BIT 4,A JR Z,ISPIT4 BIT 5,A JR Z,ISPIT4 BIT 6,A JR Z,ISPIT4 BIT 7,A JR Z,ISPIT4 JP START ISPIT4: DJNZ LOOP6 BIT 4,A JP Z,MINUS BIT 5,A JP Z,BROJ0 BIT 6,A JP Z,PLUS BIT 7,A JP Z,PATTER JP START ; Definisanje tastera BROJ0: LD C,0 JR SKOKB BROJ1: LD C,1 JR SKOKB BROJ2: LD C,2 JR SKOKB BROJ3: LD C,3 JR SKOKB BROJ4: LD C,4 JR SKOKB BROJ5: LD C,5 JR SKOKB BROJ6: LD C,6 JR SKOKB BROJ7: LD C,7 JR SKOKB BROJ8: LD C,8 JR SKOKB BROJ9: LD C,9 SKOKB: LD A,3 CP (IY+16) JR Z,IZLAZ1 LD A,(IY+18) LD (IY+19),A LD A,(IY+17) LD (IY+18),A LD (IY+17),C INC (IY+16) LD (IY+22),0 ;FLEG1=0 ; ld a,(iy+16) ; out (portb),a IZLAZ1: CALL DEBAG JP START FLASH: LD C,(IY+10) PUSH BC LD (IY+10),3 CALL BRPAT DEBAG1: LD B,100 TESTP1: IN A,(PORTA) BIT 4,A JR Z,DEBAG1 BIT 5,A JR Z,DEBAG1 BIT 6,A JR Z,DEBAG1 BIT 7,A JR Z,DEBAG1 DJNZ TESTP1 POP BC LD (IY+10),C CALL BRPAT CALL CLBAFER JP IZLAZ1 BRZINA: LD A,0 CP (IY+16) ; Ima li neÊto u baferu JR Z,BIZLAZ CALL BINARY ; ld a,l ; out (portb),a LD A,0 CP H JR NZ,BIZLAZ LD (IY+8),L LD (IY+0),L BIZLAZ: LD (IY+22),$38 CALL CLBAFER JP IZLAZ1 STOP: LD A,%10101010 OUT (PORTB),A CALL DEBAG JP START PATTER: LD A,0 CP (IY+16) ; Ima li neÊto u baferu JR Z,JAG2 CALL BINARY ; ld a,l ; out (portb),a LD A,0 CP H JR NZ,JAG2 LD A,(IY+12) ;max br.pattera DEC A CP L JR C,JAG2 LD (IY+10),L CALL BRPAT JAG2 LD (IY+22),7 CALL CLBAFER JP IZLAZ1 ; Pritisnit je taster "+" PLUS: LD A,7 ;? fleg1=7 CP (IY+22) JR Z,PINC LD A,$38 CP (IY+22) JR Z,BINC CALL CLBAFER JR SKOK10 PINC: LD D,(IY+10) INC D LD A,(IY+12) ;max br.pattera DEC A CP D JR C,SKOK10 LD (IY+10),D CALL BRPAT JR SKOK10 BINC: LD A,(IY+8) INC A JR Z,SKOK10 LD (IY+8),A LD (IY+0),A ; CALL CEKAJ1 ;JP START SKOK10: JP IZLAZ1 ; Pritisnut je taster "-" MINUS: LD A,7 ;? fleg1=7 CP (IY+22) JR Z,PDEC LD A,$38 CP (IY+22) JR Z,BDEC CALL CLBAFER JR SKOK20 PDEC: LD A,(IY+10) DEC A LD D,A INC D JR Z,SKOK20 LD (IY+10),A CALL BRPAT JR SKOK20 BDEC: LD A,(IY+8) DEC A JR Z,SKOK20 LD (IY+8),A LD (IY+0),A ; CALL CEKAJ1 ;JP START SKOK20: JP IZLAZ1 ; Âeka dok se ne otpusti taster DEBAG: LD B,100 TESTP: IN A,(PORTA) BIT 4,A JR Z,DEBAG BIT 5,A JR Z,DEBAG BIT 6,A JR Z,DEBAG BIT 7,A JR Z,DEBAG DJNZ TESTP CEKAJ: LD BC,$4000 ;Çekaj 170 ms LOOP2: NOP NOP NOP NOP DEC BC LD A,B OR C JR NZ,LOOP2 RET CEKAJ1: LD BC,$B000 ;Çekaj 0.5 s LOOP22: NOP NOP NOP NOP DEC BC LD A,B OR C JR NZ,LOOP22 RET ; pretvaranje BCD broja u binarni BINARY: LD H,0 LD L,(IY+19) ; mnoËenje sa 100 LD D,H LD E,L ADD HL,HL ADD HL,HL ADD HL,DE ADD HL,HL LD D,H LD E,L ADD HL,HL ADD HL,HL ADD HL,DE ADD HL,HL LD B,H LD C,L LD H,0 LD L,(IY+18) ; mnoËenje sa 10 LD D,H LD E,L ADD HL,HL ADD HL,HL ADD HL,DE ADD HL,HL ADD HL,BC LD D,0 LD E,(IY+17) ADD HL,DE RET ; IzbriÊi input bafer CLBAFER: LD (IY+16),0 LD (IY+17),0 LD (IY+18),0 LD (IY+19),0 RET ; ProraÇun broja pattera BRPAT: LD H,0 ; BR.PAT. LD L,(IY+10) ADD HL,HL ADD HL,HL ; BR.PAT.*4 LD B,(IY+15) LD C,(IY+14) ;POCETAK PODATAKA ADD HL,BC LD A,(HL) ; PREBACIVANJE PODATAKA LD (IY+4),A ; IZ MEMORIJE U INC HL ; SISTEMSKE PROM. LD A,(HL) LD (IY+5),A INC HL LD A,(HL) LD (IY+6),A INC HL LD A,(HL) LD (IY+8),A LD (IY+0),A ;BRZ.=BRZINA PAT. LD (IY+2),0 ;TAKT=0 RET ; ZA LIGHT COMPUTER * LC-21 * BRKOMBINACIJA ; Broj kombinacija .DB 70,0,0,0 PODACI: .DB $00,$05,8,10,$08,$05,8,10,$10,$05,14,5 .DB $1E,$05,2,5,$20,$05,2,10,$22,$05,2,10,$24,$05,2,10 .DB $26,$05,2,10,$28,$05,2,10,$2A,$05,5,10,$2F,$05,5,10 .DB $34,$05,6,10,$3A,$05,4,10,$3E,$05,4,10,$42,$05,6,10 .DB $48,$05,9,10,$51,$05,9,10,$5A,$05,12,10,$66,$05,16,10 .DB $76,$05,6,10,$7C,$05,6,10,$82,$05,8,10,$8A,$05,4,10 .DB $8E,$05,4,10,$92,$05,6,10,$98,$05,11,10,$A3,$05,11,10 .DB $AE,$05,10,10,$B8,$05,18,10,$CA,$05,11,10,$D5,$05,11,10 .DB $E0,$05,8,10,$E8,$05,20,10,$FC,$05,5,10,$01,$06,5,10 .DB $06,$06,4,10,$0A,$06,8,10,$12,$06,16,10,$22,$06,16,10 .DB $32,$06,16,5,$42,$06,16,5,$52,$06,11,10,$5D,$06,11,10 .DB $68,$06,10,10,$72,$06,18,10,$84,$06,12,10,$90,$06,12,10 .DB $9C,$06,8,10,$A4,$06,20,10,$B8,$06,13,10,$C5,$06,13,10 .DB $D2,$06,6,10,$D8,$06,22,10,$EE,$06,6,15,$F4,$06,14,10 .DB $02,$07,16,10,$12,$07,18,10,$24,$07,23,5,$3B,$07,16,10 .DB $4B,$07,16,10,$5B,$07,28,10,$77,$07,20,10,$8B,$07,20,10 .DB $9F,$07,34,10,$C1,$07,14,10,$CF,$07,28,10,$EB,$07,28,10 .DB $07,$08,37,5,$2C,$08,37,5,$51,$08,32,10,$71,$08,1,10 PODACI2: .ORG $500 .DB 1,2,4,8,16,32,64,128 .DB 128,64,32,16,8,4,2,1 .DB 1,2,4,8,16,32,64,128,64,32,16,8,4,2 .DB 255,0 .DB 15,240 .DB 195,60 .DB 51,204 .DB 85,170 .DB 165,90 .DB 129,66,36,24,0 .DB 24,36,66,129,0 .DB 129,66,36,24,36,66 .DB 17,34,68,136 .DB 136,68,34,17 .DB 17,34,68,136,68,34 .DB 1,3,6,12,24,48,96,192,128 .DB 128,192,96,48,24,12,6,3,1 .DB 3,6,12,24,48,96,192,96,48,24,12,6 .DB 1,3,6,12,24,48,96,192,128,192,96,48,24,12,6,3 .DB 129,195,102,60,24,0 .DB 24,60,102,195,129,0 .DB 129,195,102,60,24,60,102,195 .DB 3,12,48,192 .DB 192,48,12,3 .DB 3,12,48,192,48,12 .DB 1,3,7,14,28,56,112,224,192,128,0 .DB 128,192,224,112,56,28,14,7,3,1,0 .DB 7,14,28,56,112,224,112,56,28,14 .DB 1,3,7,14,28,56,112,224,192,128,192,224,112,56,28,14,7,3 .DB 1,3,7,15,30,60,120,240,224,192,128 .DB 128,192,224,240,120,60,30,15,7,3,1 .DB 15,30,60,120,240,120,60,30 .DB 1,3,7,15,30,60,120,240,224,192,128,192,224,240,120,60,30,15,7,3 .DB 3,15,60,240,192 .DB 192,240,60,15,3 .DB 15,60,240,60 .DB 3,15,60,240,192,240,30,15 .DB 1,3,7,15,31,63,127,255,254,252,248,240,224,192,128,0 .DB 128,192,224,240,248,252,254,255,127,63,31,15,7,3,1,0 .DB 1,3,7,15,31,63,127,255,127,63,31,15,7,3,1,0 .DB 128,192,224,240,248,252,254,255,254,252,248,240,224,192,128,0 .DB 1,2,5,10,20,40,80,160,64,128,0 .DB 128,64,160,80,40,20,10,5,2,1,0 .DB 5,10,20,40,80,160,80,40,20,10 .DB 1,2,5,10,20,40,80,160,64,128,64,160,80,40,20,10,5,2 .DB 1,2,4,9,18,36,72,144,32,64,128,0 .DB 128,64,32,144,72,36,18,9,4,2,1,0 .DB 9,18,36,72,144,72,36,18 .DB 1,2,4,9,18,36,72,144,32,64,128,64,32,144,72,36,18,9,4,2 .DB 1,2,4,8,17,34,68,136,16,32,64,128,0 .DB 128,64,32,16,136,68,34,17,8,4,2,1,0 .DB 17,34,68,136,68,34 .DB 1,2,4,8,17,34,68,136,16,32,64,128,64,32,16,136,68,34,17,8,4,2 .DB 165,90,60,90,165,195 .DB 3,5,10,20,40,80,160,192,160,80,40,20,10,5 .DB 3,5,9,18,36,72,144,160,192,160,144,72,36,18,9,5 .DB 3,5,9,17,34,68,136,144,160,192,160,144,136,68,34,17,9,5 .DB 3,5,9,17,34,68,136,144,160,192,128,128,192,160,144,136,68,34,17,9,5,3,1 .DB 1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,0 .DB 128,0,64,0,32,0,16,0,8,0,4,0,2,0,1,0 .DB 1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,0,64,0,32,0,16,0,8,0,4,0,2,0 .DB 1,2,4,2,4,8,4,8,16,8,16,32,16,32,64,32,64,128,64,128 .DB 128,64,32,64,32,16,32,16,8,16,8,4,8,4,2,4,2,1,2,1 .DB 1,2,4,2,4,8,4,8,16,8,16,32,16,32,64,32 .DB 64,128,64,32,64,32,16,32,16,8,16,8,4,8,4,2,4,2 .DB 1,2,4,8,4,8,16,32,16,32,64,128,64,128 .DB 1,2,4,8,4,2,4,8,16,8,4,8,16,32,16,8,16,32,64,32,16,32,64,128,64,32,64,128 .DB 128,64,32,16,32,64,32,16,8,16,32,16,8,4,8,16,8,4,2,4,8,4,2,1,2,4,2,1 .DB 1,2,4,8,16,32,64,128,129,130,132,136,144,160,192,193 .DB 194,196,200,208,224,225,226,228,232,240,241,242,244,248,249,250,252,253,254,255,8 .DB 255,254,253,252,250,249,248,244,242,241,240,232,228,226,225,224 .DB 208,200,196,194,193,192,160,144,136,132,130,129,128,64,32,16,8,4,2,1,0 .DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 .DB 27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50 .DB 51,52,53,54,55,56,57,58,59,60 .END