Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;*****************************************************************************
- ;EMPRESA: KOPP TECNOLOGIA LTDA.
- ;NOME DO PROGRAMA: BOLIARG.ASM
- ;PROGRAMADOR : SIDNEI LUDWIG MACIEL
- ;PROGRAMA PARA UM JOGO DE BOLICHE SEM TERMINAL PARA ARGENTINA
- ;*****************************************************************************
- ; DEFINICAO DOS ENDERECOS -- "EQU" / E INDICACAO DE USO DO "IX" E
- ; -----------------------------------------------------------------
- ; COMENTARIO DAS FUNCOES DOS ENDERECOS
- ; -------------------------------------
- DELTA :EQU 3
- ;---------------
- ;valor de folga p/"S13" (cm de corda) p/subida de pinos
- CORMIN :EQU 106 ; era 116
- ;-----------------
- ;valor minimo padrao na descida dos pinos
- CORMAX :EQU 116 ; era 123
- ;-----------------
- ;valor maximo padrao p/descida dos pinos
- SENTADA:EQU 60
- ;----------------
- ;valor p/sentar pinos e desligar sensores dos mesmos
- DESENL1:EQU 50
- ;----------------
- ;valor limite p/descida na 1a tentativa de desenlinhamento
- DESENL2:EQU 70
- ;----------------
- ;valor limite p/descida nas 5 proximas tentativas de desenlinhamento
- INENL :EQU 70
- ;----------------
- ;valor aproximado de inicio de enlinhamento dos pinos
- ;usado p/verificar falha rotor na subida logo no inicio
- ;dificilmente sera mudado
- ESPMIN :EQU 2048
- ;------------------
- ;tempo minimo de espera para cair pinos
- ESPMAX :EQU 3072
- ;------------------
- ;tempo maximo de espera para cair pinos
- ;-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-
- ;-------------------
- START :EQU 8000H ; -----> IX=START
- ;-------------------
- ;funcoes variadas dos bits --> habilita funcao com "1"
- ;bits: 0 - mesma funcao do bit 3,(IX+7) -> usado na rotina "REARMI"
- ; 1 - indica p/"limpa" que foi pressionado "banda ou anular" ou "banda"
- ; p/jogo "cheia"
- ; 2 - ref. de sinal do bit 6,(IN1) - botao de regulagem dos cordoes
- ; 3 - indica que foi pressionada "ANULAR" ou "BANDA" p/jogo "limpa" ou
- ; "cheia"
- ; 4 - "1" indica tecla "rearme" pressionada
- ; 5 - com "1" indica que foi pressionada tecla banda / com "0" indica te-
- ; cla "anular"
- ; 6 - indica p/cheia que foi pressionado "anular"
- ; 7 - "1" indica tecla "zerar" pressionada
- ;-------------------
- ; 8001H --> (IX+1)
- ;-------------------
- ;Endereco 1 p/consulta do teclado serial na rotina principal
- ;tecla pressionada = nivel "1"
- ;bits: 0 - nivel "0" do sincronismo da leitura
- ; 1 -
- ; 2 - tecla "reset" (zerar jogo)
- ; 3 - tecla "banda"
- ; 4 - tecla "anular jogada"
- ; 5 - tecla "rearme" (armar os pinos em qualquer circunstancia)
- ; 6 - sensor inicio de pista "S10"
- ; 7 - nivel "0" p/indicar sincronismo fim de byte
- ;-------------------
- ; 8002H ;--> (IX+2)
- ;-------------------
- ;Endereco 2 p/consulta do teclado serial na rotina principal
- ;tecla pressionada = nivel "1" / 8 teclas dos pinos do jogo "TREINO"
- ;bits: 0 - tecla pino 4
- ; 1 - tecla pino 3
- ; 2 - tecla pino 9
- ; 3 - tecla pino 5
- ; 4 - tecla pino 1
- ; 5 - tecla pino 2
- ; 6 - tecla pino 7
- ; 7 - nivel "0" p/indicar sincronismo fim de byte
- ;-------------------
- ; 8003H --> (IX+3)
- ;-------------------
- ;Endereco 3 p/consulta do teclado serial na rotina principal
- ;tecla pressionada ou chave ativada = nivel "1"
- ;bits: 0 - tecla pino 8 do jogo "TREINO"
- ; 1 - chave p/selecao do jogo "LIMPA"
- ; 2 - chave p/selecao do jogo "CHEIA"
- ; 3 - Exp.
- ; 4 - tecla "programa" (selecionar os pinos do modo "TREINO")
- ; 5 - tecla pino 10 do jogo "TREINO"
- ; 6 - tecla pino 6 do jogo "TREINO"
- ; 7 - nivel "0" p/indicar sincronismo fim de byte
- ;----------------
- ;8004H --> (IX+4)
- ;----------------
- ;referencia do numero da jogada (1 a 3)
- ;----------------------------
- ;8005H e 8006H ---> Expansao
- ;----------------------------
- ;-------------------
- ; 8007H --> (IX+7)
- ;-------------------
- ;funcoes variadas --> habilita funcao com "1"
- ;bits: 0 - alterana piscada de leds ("1" acende / "0" apaga)
- ; 1 - habilita piscar todos os leds dos pinos do painel (STRACK)
- ; 2 - hab. piscar led indicador de falha "S13" (cm da corda)
- ; 3 - indica que tem falha "S13" (cm da corda)
- ; 4 - retem pulso do "S13" / "1" habilita ler pulso
- ; 5 - "0" hab. decrementar contador "S13" / "1" hab. incrementar
- ; 6 - habilita piscar led "verde" indicando que esta no jogo "treino" pa-
- ; ra programar o jogo
- ; 7 - hab. ativar sub-rotina "TIME" na NMI (controle de qualquer tempo p/
- ; rotina principal e avisa fim de tempo com "0")
- ;-------------------
- ; 8008H --> (IX+8)
- ;-------------------
- ;envia para "OUT1" --> sao os mesmos bits do "OUT1"
- ;-------------------
- SERIN :EQU 8009H ;idem a posicao (IX+1)
- ;ate SERIN+4 --> 800DH
- ;---------------------
- ;buffer p/leitura do teclado serial na NMI / A leitura das teclas faz-se no
- ;bloco "800AH a 800CH" e depois coloca-se no bloco "8001H a 8003H"
- ;Obs: SERIN - (8009H) --> FF p/sincronismo de entrada
- ;800EH a 8012H --> Exp.
- ;----------------------
- ;=============================================================================
- ;buffer p/mostrar painel serial na NMI
- ;-------------------------------------
- ;8013H --> (IX+19d)
- ;------------------
- ;ref. p/saida serial do painel
- ;-------------------
- FONT1 :EQU 8014H
- ;-------------------
- ;bits: 0 - nivel "0" p/sincronismo de inicio de mostragem
- ; 1 - lampada do pino 4
- ; 2 - lampada do pino 8
- ; 3 - lampada do pino 2
- ; 4 - lampada do pino 1
- ; 5 - lampada do pino 3
- ; 6 - lampada do pino 5 (rei)
- ; 7 - nivel "0" p/sincronismo fim de byte
- ;-------------------
- FONT2: EQU 8015H
- ;-------------------
- ;bits: 0 - lampada do pino 9
- ; 1 - lampada do pino 6
- ; 2 - lampada do pino 10
- ; 3 - lampada do pino 7
- ; 4 - led "bola1"
- ; 5 - led "bola3"
- ; 6 - led "bola2"
- ; 7 - nivel "0" p/sincronismo fim de byte
- ;-------------------
- FONT3 :EQU 8016H
- ;-------------------
- ;bits: 0 - nivel "0" p/sincronismo de inicio
- ; 1 - solenoide do pino 4
- ; 2 - solenoide do pino 8
- ; 3 - solenoide do pino 2
- ; 4 - solenoide do pino 1
- ; 5 - solenoide do pino 3
- ; 6 - solenoide do pino 5 (rei)
- ; 7 - nivel "0" p/sincronismo de fim de byte
- ;-------------------
- FONT4 :EQU 8017H
- ;-------------------
- ;bits: 0 - solenoide do pino 9
- ; 1 - solenoide do pino 6
- ; 2 - solenoide do pino 10
- ; 3 - solenoide do pino 7
- ; 4 - Expancao
- ; 5 - led "servico de maquina"
- ; 6 - Expansao
- ; 7 - nivel "0" p/sincronismo de fim de byte
- ;-------------------
- FONTX :EQU 8018H
- ;-------------------
- ;byte FFH de sincronismo
- ;============================================================================
- ;8019H a 8028H --> Exp.
- ;----------------------
- ;-------------------
- GENDX :EQU 8029H
- ;GENDX+1 --> 802AH
- ;-------------------
- ;guarda enderecos da saida serial p/mostrar no painel (end.I. = "FONT1")
- ;-------------------
- ; 802BH --> (IX+43d)
- ;-------------------
- ;contador de bytes p/mostrar no painel
- ;-------------------
- ; 802CH --> (IX+44d)
- ;-------------------
- ;contador de bits p/cada byte da mostragem do painel
- ;-------------------
- ;802DH a 8032H ---> Expansao
- ;-------------------
- ;-------------------
- ; 8032H ---> (IX+50d)
- ;-------------------
- ;funcoes variadas
- ;bits: 0 - "1" indica desab SELBOL quando houver rearme
- ; 1 - indica falha no "S11" (fim de pista) com nivel "1"
- ; 2 - alterna piscada do led falha S13
- ; 3 - indica que foi desligado o transistor dos reles no "DESLMT" com "1"
- ; com "0" indica para "TRANSI" que pode voltar ao normal
- ; 4 - hab. piscar led "servico de maquina", apos as tentativas de
- ; rearme quando pinos enlinhados
- ; 5 - alterna piscada do led "servico de maquina"
- ; 6 - ref. do sinal de regulagem do cordao dos pinos
- ; 7 - Exp.
- ;-------------------
- ;8033H e 804DH ---> Expansao
- ;-------------------
- ;-------------------
- RTECW :EQU 804EH
- ;RTECW+1 ---> 804FH
- ;-------------------
- ;contador de tempo da piscada do led bola 1 p/jogo treino
- ;-------------------
- CONTG :EQU 8050H
- ;CONTG+1 ---> 8051H
- ;-------------------
- ;contador geral p/qualquer tempo na sub-rotina "TIME" da NMI
- ;-------------------
- TYSON :EQU 8052H
- ;TYSON+1 ---> 8053H
- ;-------------------
- ;ref. para sub-rotina "PSTX" do jogo "cheia" dos sensores dos pinos
- ;8054H a 8055H - Exp.
- ;--------------------
- ;-------------------
- LSP :EQU 8056H
- ;-------------------
- ;compara com 56H para saber se foi carregado o "SP"
- ;-------------------
- VER :EQU 8057H
- ;-------------------
- ;compara com 56H para saber se foi inicializado o sistema (INIX)
- ;-------------------
- AUX :EQU 8058H
- ;-------------------
- ;auxilia a contagem dos pulsos "S13" (cm da corda) na descida dos pinos p/ve-
- ;rificar se existe falha no "S13"
- ;8059H e 805AH --> Exp.
- ;----------------------
- ;-------------------
- S13 :EQU 805BH
- ;-------------------
- ;contador hexadecimal do cm da corda
- ;-------------------
- TS13 :EQU 805CH
- ;TS13+1 ---> 805DH
- ;-------------------
- ;contador de tempo para testar "S13" na NMI
- ;-------------------
- TS11 :EQU 805EH
- ;TS11+1 ---> 805FH
- ;-------------------
- ;contador de tempo para verificar se ha falha no "S11" (sensor fim de pista)
- ;-------------------
- RTEC2 :EQU 8060H
- ;RTEC2+1 ---> 8061H
- ;-------------------
- ;contador de tempo p/ruido da tecla "banda"
- ;-------------------
- RTEC3 :EQU 8062H
- ;RTEC3+1 ---> 8063H
- ;-------------------
- ;contador de tempo p/ruido da tecla "anular jogada"
- ;-------------------
- TRLS :EQU 8064H
- ;TRLS+1 ---> 8065H
- ;-------------------
- ;contador de tempo p/transistor dos reles 1 e 2 da rotina "TRANSI"
- ;-------------------
- RTEC4 :EQU 8066H
- ;RETC4+1 --> 8067H
- ;-------------------
- ;tempo p/piscada do led "servico de maquina"
- ;-------------------
- CTG :EQU 8068H
- ;CTG+1 ----> 8069H
- ;-------------------
- ;contador de tempo p/piscada dos leds na sub-rotina "PISCA"
- ;-------------------
- RAB1 :EQU 806AH
- RAB2 :EQU 806BH
- ;-------------------
- ;enderecos onde guarda ref. da ultima jogada p/anular ou banda p/jogo "limpa"
- ;serve tambem para a contagem de pinos caidos na rotina "CPSPSB"
- ;-------------------
- LPIN1 :EQU 806CH
- LPIN2 :EQU 806DH
- ;-------------------
- ;referencia dos sensores dos pinos para jogo "limpa" e "cheia", e teclas dos
- ;pinos para jogo "treino"
- ;bits: (LPIN1) 0 - nivel "0"
- ; 1 - ref. do pino 4
- ; 2 - ref. do pino 8
- ; 3 - ref. do pino 2
- ; 4 - ref. do pino 1
- ; 5 - ref. do pino 3
- ; 6 - ref. do pino 5 (rei)
- ; 7 - nivel "0"
- ;bits: (LPIN2) 0 - ref. do pino 9
- ; 1 - ref. do pino 6
- ; 2 - ref. do pino 10
- ; 3 - ref. do pino 7
- ; 4 a 6 --> nada
- ; 7 - nivel "0"
- ;-------------------
- RTECR :EQU 806EH
- ;RTECR+1 ---> 806FH
- ;-------------------
- ;contador de tempo p/ruido da tecla "rearme"
- ;-------------------
- RTECZ :EQU 8070H
- ;RTECZ+1 ---> 8071H
- ;-------------------
- ;contador de tempo p/ruido da tecla "zerar"
- ;8072H a 8077H --> Expansao
- ;--------------------------
- LERIN :EQU 8078H
- ;-------------------
- ;referencia de leitura da porta IN1
- TPPS13:EQU 8079H
- ;+1 --> 807AH
- ;-------------------
- ;tempo p/piscada de led falha "S13"
- CABOU :EQU 807BH
- ;+1 ---> 807CH
- ;-------------------
- ;guarda end. da tabela p/grupo de solenoides p/desenlinhar pinos
- ;-------------------
- PILHA :EQU 87FFH
- ;-------------------
- ;ultimo endereco da RAM para "SP"
- ;*****************************************************************************
- ;DEFINICAO E COMENTARIOS DAS PORTAS DE ENTRADA E SAIDA
- ;-----------------------------------------------------
- ;---------------
- OUT1 :EQU 2
- ;---------------
- ;bits: 0 - contador de jogadas (gera pulso a cada 1 jogada)
- ; NAO MAIS -> transistor p/reles 1 e 2 / ligar depois e antes quando ligar reles
- ; 1 - rele 1 (subir pinos)
- ; 2 - rele 2 (descer pinos)
- ; 3 - zerar sensores dos pinos "S1 a S10"
- ; 4 - saida serial do painel
- ; 5 - led indicador de falha do "S13" (cm da corda)
- ; 6 - saida para zeramento do clock do micro
- ; 7 - rele 3 p/solenoides (para nao queima-las)
- ;---------------
- IN1 :EQU 0
- ;---------------
- ;indica ativado com nivel "1"
- ;bits: 0 - sensor de CM da corda "S13" - rotor
- ; 1 - "S11" (sensor fim de pista) --> "0" passou bola
- ; 2 - entrada serial do pulpito
- ; 3 - sensor do pino 7
- ; 4 - sensor do pino 10
- ; 5 - indica p/descida numero de cm de corda
- ; "0" = CORMIN / "1" = CORMAX
- ; 6 - botao de regulagem dos cordoes dos pinos
- ; 7 - "0" indica tempo Minimo de Espera dos Pinos cairem / "1" Maximo
- ;---------------
- IN2 :EQU 1
- ;---------------
- ;bits: 0 - sensor do pino 5 (rei)
- ; 1 - sensor do pino 8
- ; 2 - sensor do pino 9
- ; 3 - sensor do pino 4
- ; 4 - sensor do pino 2
- ; 5 - sensor do pino 1
- ; 6 - sensor do pino 3
- ; 7 - sensor do pino 6
- ;*****************************************************************************
- ;*****************************************************************************
- ; *******************************
- ; INICIO DO PROGRAMA BOLICHE2.ASM
- ; *******************************
- ;*****************************************************************************
- ; PSEUDO INSTRUCOES P/DAR INICIO
- ; ------------------------------
- DEFSEG INICIO,ABSOLUTE
- SEG INICIO
- ORG 0
- ;*****************************************************************************
- ; ---------------------------------------------
- ; INICIO PROPRIAMANTE DITO --> ROTINA PRINCIPAL
- ; ---------------------------------------------
- LD SP,PILHA;carrega endereco para pilha de dados da ram
- XOR A
- LD (VER),A
- LD A,56H
- LD (LSP),A;indica que "SP" foi carregado
- XOR A
- OUT (OUT1),A
- JP INKK
- ;*****************************************************************************
- ;*****************************************************************************
- ; ---------------------------
- ; ROTINA DA INTERRUPCAO "NMI"
- ; ---------------------------
- ;#############################################################################
- ;-->SAIDA SERIAL DOS LEDS DOS PINOS, SOLENOIDES, VERDE, BOLA1 E BOLA2
- ;-->ENTRADA SERIAL DO TECLADO DO PULPITO
- ;-->CONTROLE DE PISCADA DOS LEDS DOS PINOS P/"STRACK"
- ;-->CONTROLE DE TEMPO P/ROTINA PRINCIPAL
- ;-->VERIFICACAO DE FALHA NO "S13"(SENSOR DO Cm DA CORDA)
- ;-->ENVIA "OUT1"
- ORG 66H;endereco inicial do "NMI"
- PUSH AF
- IN A,(IN1)
- LD (LERIN),A
- LD A,(LSP);referencia do "SP"
- CP 56H;compara com 56H p/saber se "SP" foi carregado no inicio
- JP NZ,0;se "Z" OK, se "NZ" dar um RESET
- LD A,(VER);referencia do "INIX"
- CP 56H;compara com 56H p/saber se houve "INIX"(inicializacao)
- JR NZ,POF;se "Z" OK, se "NZ" indica que nao terminou "INIX" (devera
- ;retornar somente ate que encerre "INIX"
- PUSH BC
- PUSH DE
- PUSH HL
- EXX
- PUSH BC
- PUSH DE
- PUSH HL
- EXX
- CALL SAIDA;saida serial p/placar e BOLVID
- LD A,(IX+8)
- OUT (OUT1),A
- ; CALL ENTRAD;entrada serial do teclado do pulpito
- CALL PISCA;pisca leds do painel quando houver "STRACK" e pisca led de
- ;defeito do "S13" (cm da corda) quando houver
- CALL CORDA;contar cm da corda
- CALL FALROT;verificar se ha falha "S13"
- CALL FALS11;verifica se ha falha no "S11"
- CALL TIME;controla tempo qualquer p/rotina principal
- ; CALL TRANSI;ligar transistor quando rele 1 ou 2 ligados
- CALL BANDA;funcao da tecla "banda"
- CALL ANULA;funcao da tecla "anula"
- CALL TREARM;tecla "rearme"
- CALL TZERAR;tecla "zerar"
- CALL LEDMAQ
- CALL PISS13;pisca led falha S13
- CALL LEDTRE;pisca led "bola 1" (treino)
- EXX
- POP HL
- POP DE
- POP BC
- EXX
- POP HL
- POP DE
- POP BC
- POF :POP AF
- RETN
- ;*****************************************************************************
- ;*****************************************************************************
- ; ------------------------------
- ; SUB-ROTINAS DA INTERRUPCAO NMI
- ; ------------------------------
- ;#############################################################################
- ;ENTRADA SERIAL DO TECLADO DO PULPITO
- ;------------------------------------
- ENTRAD:RES 6,(IX+8);envia "0" para deixar clock do micro normal
- LD HL,SERIN+4
- LD A,(LERIN)
- BIT 2,A
- JR NZ,SETW
- RES 0,(HL)
- JR KRAS
- SETW :SET 0,(HL)
- KRAS :LD B,5
- RRXW :RR (HL)
- DEC HL
- DJNZ RRXW
- LD A,(SERIN)
- CP 0FFH
- RET NZ
- LD HL,SERIN+1
- BIT 0,(HL)
- RET NZ
- LD B,5
- SAW :BIT 7,(HL)
- RET NZ
- INC HL
- DJNZ SAW
- SET 6,(IX+8);envia "1" p/zerar clock do micro
- LD HL,SERIN+1;endereco inicial do buffer serial do teclado
- LD DE,START+1;endereco inicial do buffer p/consulta do teclado
- LD BC,3
- LDIR
- RET
- ;*****************************************************************************
- ;SAIDA SERIAL DO PAINEL (LEDS DOS PINOS,DISPLAYS,SOLENOIDES E RELES)
- ;-------------------------------------------------------------------
- SAIDA :BIT 0,(IX+19d);testa bit p/saida
- JR Z,RES
- SET 4,(IX+8);p/enviar "1" na saida serial
- SAI :RRC (IX+19d);posiciona proximo bit p/saida serial
- DEC (IX+44d);contador p/8 bits
- RET NZ
- LD (IX+44d),8
- LD HL,(GENDX)
- LD A,(HL)
- LD (IX+19d),A
- INC HL
- LD (GENDX),HL
- DEC (IX+43d);contador de bytes da saida serial
- RET NZ
- LD (IX+43d),5
- LD HL,FONT1;endereco inicial do buffer serial do painel
- LD (GENDX),HL;guarda p/proximo ciclo de saida
- LD (IX+19d),0FFH;sincronismo de entrada (primeiro byte de saida)
- RET
- RES :RES 4,(IX+8);p/enviar "0" na saida serial
- JR SAI
- ;*****************************************************************************
- ;PISCA LEDS DO PAINEL QUANDO HOUVER "STRACK"
- ;-------------------------------------------
- PISCA :BIT 1,(IX+7);se "NZ" pisca todos leds dos pinos (STRACK)
- RET Z
- BIT 0,(IX+7);"NZ" acende leds / "Z" apaga leds --> quando necessario
- JR Z,AP
- LD A,(FONT1);leds dos pinos "P1 a P6"
- OR 7EH;p/acender estes leds
- LD (FONT1),A;mostrar leds acesos ("P1 a P6")
- LD A,(FONT2);leds dos pinos "P7,P8,P9 e P10"
- OR 0FH;p/acender estes leds
- LD (FONT2),A;mostrar leds acesos ("P7,P8,P9 e P10")
- DT :CALL XCTG;faz a contagem de tempo de 0.5 seg. p/acender ou apagar leds
- ;e alterna a piscada
- RET
- AP :CALL APP;apaga leds dos pinos "P1 a P10"
- JR DT
- ;APAGA PINOS NO BUFFER DO PAINEL
- ;-------------------------------
- APP :XOR A
- LD (FONT1),A;apaga no painel leds dos pinos "P1 a P6"
- LD A,(FONT2);leds dos pinos "P7,P8 e P9"
- AND 70H
- LD (FONT2),A;apaga no painel leds dos pinos "P7,P8 e P9"
- RET
- ;FAZ CONTAGEM DE TEMPO DE 0.5 SEG. E ALTERNA PISCADA SOMENTE P/ "PISCA"
- ;----------------------------------------------------------------------
- XCTG :LD HL,(CTG);contador para 0.5 segundos
- DEC HL
- LD (CTG),HL;mantem contador sempre guardado p/proxima NMI
- LD A,H
- OR L
- RET NZ;"Z" indica fim dos 0.5 seg.
- LD HL,512d;valor p/0.5 seg.
- LD (CTG),HL;carrega tempo novamente
- BIT 0,(IX+7);vamos inverter o sinal p/poder alternar piscada dos leds
- JR Z,P3
- RES 0,(IX+7);alterna p/"0"
- RET
- P3 :SET 0,(IX+7);alterna p/"1"
- RET
- ;*****************************************************************************
- ;CONTAGEM DO CM DA CORDA (COM RETENSAO DO PULSO "S13")
- ;-----------------------------------------------------
- CORDA :BIT 4,(IX+7);retensao do pulso do cm
- JR Z,COR;"NZ" habilita ler pulso / "Z" retem pulso
- CALL BTS13;testa pulso do cm da corda
- RET Z;"NZ" 1 cm de corda
- LD A,(S13);contador do cm da corda
- BIT 5,(IX+7);"Z" decrementa (S13) p/subida de pinos / "NZ" incrementa
- ;(S13) p/descida de pinos
- JR NZ,BAXO;
- CP 0
- JR Z,AXO
- DEC A;decrementa contador do cm da corda (S13)
- JR AXO
- BAXO :CP 255
- JR Z,AXO
- INC A;incrementa contador do cm da corda (S13)
- AXO :LD (S13),A;atualiza valor
- CALL AUXVVX;auxilia verificacao de falha "S13"
- RES 4,(IX+7);retem pulso "S13"
- COR :CALL BTS13;testa pulso do cm da corda
- RET NZ;enquanto "NZ" indica retensao do cm da corda
- SET 4,(IX+7);desabilita retencao do pulso "S13"
- RET
- ;testa pulso do cm da corda "S13"
- BTS13 :IN A,(IN1)
- BIT 0,A
- RET
- ;AUXILIA VERIFICACAO DA FALHA "S13"
- ;----------------------------------
- AUXVVX:LD A,(AUX);guarda numero de incrementos do "S13" tanto na subida dos
- ;pinos quanto na descida
- CP 255
- RET Z
- INC A
- LD (AUX),A
- RET
- ;*****************************************************************************
- ;VERIFICA SE HA FALHA NO "S13"
- ;-----------------------------
- FALROT:LD A,(IX+8);endereco do "OUT1"
- AND 6;aceita somente reles 1 e 2
- CP 0
- JR NZ,VV;se "Z" indica motores desligados
- LD HL,400
- LD (TS13),HL
- XX :XOR A
- LD (AUX),A;zerar auxiliar da verificacao de falha "S13"
- RET
- VV :LD HL,(TS13);contador p/ 2 seg. de espera com motor ligado para tes-
- ;tar cm da corda "S13"
- DEC HL
- LD (TS13),HL
- LD A,H
- OR L
- RET NZ
- LD HL,400
- LD (TS13),HL
- LD A,(AUX);contador de pulsos "S13" p/sabermos se esta funcionando
- CP 2;se < (mais-ou-menos) ha falha no "S13"
- JR NC,VX;"C" indica < 2
- SET 3,(IX+7);indica falha no "S13" (cm da corda)
- SET 0,(IX+0)
- JR XX
- VX :RES 3,(IX+7);indica "S13" OK
- RES 0,(IX+0)
- JR XX
- ;*****************************************************************************
- ;INDICA FALHA NO "S11" (FIM DE PISTA) SE FICAR ATIVADO POR MAIS DE 5 SEG.
- ;------------------------------------------------------------------------
- ;"Z" indica ativado (passou bola)
- ;---------------------------------
- FALS11:CALL BTS11;testa "S11"
- JR Z,FAL
- RES 1,(IX+50d);indica que "S11" nao esta sempre ativado
- PDT :LD HL,5000d;tempo p/5 seg.
- LD (TS11),HL;contador p/3seg. de espera com "S11" ativado
- RET
- FAL :LD HL,(TS11)
- DEC HL
- LD (TS11),HL
- LD A,H
- OR L
- RET NZ
- SET 1,(IX+50d);indica que "S11" fica ativado por mais de 3s continuos
- ;sinalizando falha no "S11"
- JR PDT
- ;LER "S11"
- ;---------
- BTS11 :IN A,(IN1)
- BIT 1,A
- RET
- ;*****************************************************************************
- ;CONTAGEM PARA QUALQUER TEMPO DA ROTINA PRINCIPAL
- ;------------------------------------------------
- TIME :BIT 7,(IX+7);"NZ" aciona contagem de um tempo qualquer
- RET Z
- LD HL,(CONTG);contador de um tempo qualquer
- LD A,H
- OR L
- JR NZ,TM
- RES 7,(IX+7);trava contagem de tempo e indica para rotina principal o
- ;termino do time
- RET
- TM :DEC HL
- LD (CONTG),HL
- RET
- ;*****************************************************************************
- ;LIGAR TRANSISTOR 0.1 SEG. APOS LIGAR RELE 1 OU 2
- ;------------------------------------------------
- ;TRANSI:LD A,(IX+8);bit 1 --> rele 1 / bit 2 --> rele 2
- ; AND 6;anula o que nao interessa
- ; CP 0
- ; JR Z,TRS ;"Z" indica que reles estao desligados
- ; LD HL,(TRLS);contador de tempo de 0.1 seg. apos ligar rele 1 ou 2
- ; DEC HL
- ; LD (TRLS),HL
- ; LD A,H
- ; OR L
- ; RET NZ
- ; BIT 3,(IX+50d);"NZ" indica que foi desligado o transistor no "DESLMT"
- ; ;quando no tempo de 0.1 seg. ("SEG01")
- ; JR NZ,TRS
- ; SET 0,(IX+8);ligar transistor p/rele 1 ou 2
- ;TRS :LD HL,100d;p/0.1 seg.
- ; LD (TRLS),HL
- ; RET
- ;*****************************************************************************
- ;*****************************************************************************
- ;FUNCAO DA TECLA "BANDA"
- ;-----------------------
- BANDA :BIT 3,(IX+1);"NZ" indica tecla "banda" pressionada
- JR NZ,ASTRO
- LD HL,200;tempo p/ruido da tecla "banda"
- LD (RTEC2),HL
- RET
- ASTRO :LD HL,(RTEC2)
- DEC HL
- LD (RTEC2),HL
- LD A,H
- OR L
- RET NZ
- LD HL,200
- LD (RTEC2),HL
- BIT 3,(IX+1);"NZ" tecla "banda" continua pressionada
- RET Z
- SET 5,(IX+0);indica tecla "banda" pressionada
- SET 3,(IX+0);indica que houve "banda" ou "anular" para jogo"limpa" ou
- ;"cheia"
- RET
- ;*****************************************************************************
- ;FUNCAO DA TECLA "ANULAR JOGADA"
- ;-------------------------------
- ANULA :BIT 4,(IX+1);"NZ" tecla "anular" pressionada
- JR NZ,PORK
- LD HL,200;tempo p/ruido da tecla "anular"
- LD (RTEC3),HL
- RET
- PORK :LD HL,(RTEC3)
- DEC HL
- LD (RTEC3),HL
- LD A,H
- OR L
- RET NZ
- LD HL,200
- LD (RTEC3),HL
- BIT 4,(IX+1);"NZ" tecla "anular" continua pressionada
- RET Z
- RES 5,(IX+0)
- SET 3,(IX+0);indica que houve "banda" ou "anular" para jogo"limpa" ou
- ;"cheia"
- RET
- ;*****************************************************************************
- ;FUNCAO DA TECLA "REARME"
- ;-----------------------
- TREARM:BIT 5,(IX+1);"NZ" indica tecla "rearme" pressionada
- JR NZ,AST
- LD HL,200;tempo p/ruido da tecla "banda"
- LD (RTECR),HL
- RES 4,(IX+0)
- RET
- AST :LD HL,(RTECR)
- DEC HL
- LD (RTECR),HL
- LD A,H
- OR L
- RET NZ
- LD HL,200
- LD (RTECR),HL
- BIT 5,(IX+1);"NZ" tecla "rearme" continua pressionada
- RET Z
- SET 4,(IX+0);indica tecla "rearme" pressionada
- RET
- ;*****************************************************************************
- ;FUNCAO DA TECLA "REARME"
- ;-----------------------
- TZERAR:BIT 2,(IX+1);"NZ" indica tecla "zerar" pressionada
- JR NZ,STJ
- LD HL,200;tempo p/ruido da tecla "banda"
- LD (RTECZ),HL
- RES 7,(IX+0)
- RET
- STJ :LD HL,(RTECZ)
- DEC HL
- LD (RTECZ),HL
- LD A,H
- OR L
- RET NZ
- LD HL,200
- LD (RTECZ),HL
- BIT 2,(IX+1);"NZ" tecla "zerar" continua pressionada
- RET Z
- SET 7,(IX+0);indica tecla "rearme" pressionada
- RET
- ;*****************************************************************************
- ;PISCA LED "SERVICO DE MAQUINA"
- ;------------------------------
- LEDMAQ:BIT 4,(IX+50d);"NZ" pisca led servico de maquina pelo BOLICHE
- JR NZ,CORVO
- LD HL,200d
- LD (RTEC4),HL
- JR LUVAS
- CORVO :LD HL,(RTEC4)
- DEC HL
- LD (RTEC4),HL
- LD A,H
- OR L
- RET NZ
- LD HL,200d
- LD (RTEC4),HL
- BIT 5,(IX+50)
- JR NZ,LUVAS
- SET 5,(IX+50)
- LD A,(FONT4)
- SET 5,A
- LD (FONT4),A
- RET
- LUVAS :RES 5,(IX+50)
- LD A,(FONT4)
- RES 5,A
- LD (FONT4),A
- RET
- ;*****************************************************************************
- ;PISCA LED "FALHA S13"
- ;---------------------
- PISS13:BIT 2,(IX+7);"NZ" hab. piscar led
- JR NZ,CORVO2
- LD HL,200d
- LD (TPPS13),HL
- JR LUVAS2
- CORVO2:LD HL,(TPPS13)
- DEC HL
- LD (TPPS13),HL
- LD A,H
- OR L
- RET NZ
- LD HL,200d
- LD (TPPS13),HL
- BIT 2,(IX+50)
- JR NZ,LUVAS2
- SET 2,(IX+50)
- SET 5,(IX+8);liga led
- RET
- LUVAS2:RES 2,(IX+50)
- RES 5,(IX+8);desliga led
- RET
- ;*****************************************************************************
- ;PISCA LED "treino"
- ;------------------
- LEDTRE:BIT 6,(IX+7);"NZ" pisca
- JR Z,CORVW
- LD HL,(RTECW)
- DEC HL
- LD (RTECW),HL
- LD A,H
- OR L
- RET NZ
- LD HL,512
- LD (RTECW),HL
- LD A,(FONT2)
- BIT 4,A
- JR NZ,LUVAW
- LD A,(FONT2)
- SET 4,A
- LD (FONT2),A
- RET
- LUVAW :LD A,(FONT2)
- RES 4,A
- LD (FONT2),A
- RET
- CORVW :LD HL,512
- LD (RTECW),HL
- RET
- ;#############################################################################
- ; ROTINAS DO PROGRAMA PRINCIPAL
- ; ------------------------------
- ; ------------------------------
- ;#############################################################################
- ;INICIALIZACAO DOS DADOS DOS ENDERECOS
- ;-------------------------------------
- INIX :LD IX,START;endereco inicial p/referencia para "IX"
- LD (IX+50d),0
- LD B,17d
- LD HL,START;end.I. da RAM
- ACDC :LD (HL),0
- INC HL
- DJNZ ACDC
- LD HL,FONT1
- LD (GENDX),HL
- LD B,4
- KAKO :LD (HL),0
- INC HL
- DJNZ KAKO
- LD (IX+19d),0FFH
- LD A,0FFH
- LD (FONTX),A
- LD (IX+43d),11d;contador de bytes da saida serial
- LD (IX+44d),8;contador de 8 bits p/cada byte da saida serial
- LD HL,512d;p/0.5 seg.
- LD (CTG),HL;contador de 0.5 seg. para piscada dos leds dos pinos de
- ;falha "S13"
- LD (CONTG),HL;zerar contador de qualquer tempo p/uso do principal
- XOR A
- LD (AUX),A;zerar auxiliar da contagem do pulso "S13" para verificar
- ;falha no momento de ligar motor
- LD (S13),A;zerar contador do cm da corda
- LD HL,400
- LD (TS13),HL;contador de 4 seg. para teste de "S13" (cm da corda)
- CALL REXYW
- LD HL,3000d;p/3 seg.
- LD (TS11),A;contador p/10 seg. continuo com "S11" ativado
- LD HL,100d;p/0.1 seg.
- LD (TRLS),HL ;contador p/tempo de 0.1 seg. p/ligar transistor apos-
- ;ligar rele1 ou 2
- LD (IX+3),4;indica jogo cheia caso nao vier comunicacao
- CALL CHAINI;corrige sinal do botao de regulagem dos cordoes
- LD (IX+4),1;referencia bola 1
- RET
- ;*****************************************************************************
- ;CONTINUACAO DO INICIO
- ;---------------------
- INKK :XOR A
- OUT (OUT1),A
- CALL INIX;inicializa dados
- LD A,56H
- LD (VER),A
- LD HL,1000d
- LD (CONTG),HL
- SET 7,(IX+7)
- BESSA :BIT 7,(IX+7)
- JR NZ,BESSA
- CALL ZERASX;zerar sensores dos pinos "S1 a S9" / tempo=2 NMI
- BIT 2,(IX+3);"NZ" cheia
- JR Z,BOS
- CALL ALP
- BOS :CALL REARMI;rearme de inicio (diferente do rearme normal)
- INI :BIT 1,(IX+3);"NZ" jogo "limpa"
- JP NZ,LIMPAX
- BIT 2,(IX+3);"NZ" jogo "cheia"
- JP Z,TREINO
- CALL REXYW;zerar ref. dos sensores dos pinos p/atuar nas solenoides
- CALL APP;apaga pinos no painel
- SET 1,(IX+0)
- SET 6,(IX+0)
- LD A,(FONT2)
- SET 4,A
- RES 5,A
- RES 6,A
- LD (FONT2),A
- LD (IX+4),1
- LD HL,0
- LD (TYSON),HL
- JP CHEIAX
- ;*****************************************************************************
- ; JOGO CHEIA
- ; ----------
- ; ----------
- CHEIA :CALL REXYW;zerar ref. dos sensores dos pinos p/atuar nas solenoides
- CALL APP;apaga pinos no painel
- SET 1,(IX+0)
- SET 6,(IX+0)
- LD A,(FONT2)
- SET 4,A
- RES 5,A
- RES 6,A
- LD (FONT2),A
- LD (IX+4),1
- LD HL,0
- LD (TYSON),HL
- CALL REARME
- CHEIAX:LD SP,PILHA
- CALL LIGBOL;acende led bola1, bola2 ou bola3
- CALL REGUCOR;botao de regulagem dos cordoes
- BIT 2,(IX+3);"NZ" cheia
- JP Z,MUDAJO;mudanca de jogo
- CALL RESETJ
- CALL PSTX;ler teclas "banda ou anular" p/"cheia"
- CALL LPINOS;ler pinos --> "NZ" caiu pinos
- JR NZ,SPRY
- BIT 4,(IX+0);"NZ" tecla "rearme"
- CALL NZ,REARME
- BIT 1,(IX+50d);"NZ" indica falha no "S11"
- JR NZ,CHEIAX
- CALL BTXS11;ler "S11" (sensor fim de pista) --> "Z" passou bola
- JR NZ,CHEIAX
- SPRY :SET 0,(IX+50);hab. SELBOL
- LD A,(IX+4)
- CP 1
- JR NZ,POLY2
- LD (IX+4),2
- JR POLY4
- POLY2 :CP 2
- JR NZ,POLY3
- LD (IX+4),3
- JR POLY4
- POLY3 :LD (IX+4),1
- POLY4 :SET 1,(IX+0);hab. acessar "PSTX" quando pressionar "banda"
- SET 6,(IX+0);hab. acessar "PSTX" quando pressionar "anular"
- CALL CPSPSB;conta pinos caidos e espera 3s cair pinos
- JR Z,RMX;"NZ" caiu pinos
- CALL REARME
- LD A,1;verifica se e primeira bola
- CP (IX+4)
- JR NZ,ROLF1
- SET 0,(IX+8);ligar LED contador de jogadas ROLF
- CALL SEG01
- CALL SEG01
- RES 0,(IX+8)
- ROLF1 :JP CHEIAX
- RMX :CALL TAURUS;se for bola 3 e tiver pino trancado em cima --> rearma
- LD A,1;verifica se e primeira bola
- CP (IX+4)
- JR NZ,ROLF1
- SET 0,(IX+8);ligar LED contador de jogadas ROLF
- CALL SEG01
- CALL SEG01
- RES 0,(IX+8)
- JP CHEIAX
- ;*****************************************************************************
- ;SE FOR BOLA3 E TER ALGUM PINO TRANCADO, FAZ O REARME E REINICIA A JOGADA
- ;-----------------------------------------------------------------------------
- ;SUB-ROTINA DO JOGO "CHEIA"
- ;--------------------------
- TAURUS:LD A,(IX+4)
- CP 1
- JR NZ,ROSSI
- LD A,(LPIN1)
- CP 0
- JR NZ,RTXU;"NZ" indica pino trancado
- LD A,(LPIN2)
- CP 0
- JR NZ,RTXU;"NZ" indica pino trancado
- ROSSI :CALL SELBOL
- RET
- RTXU :CALL REARME
- RET
- ;*****************************************************************************
- ;LER TECLA "BANDA" OU "ANULAR" PARA JOGO "CHEIA" (BOLA1 OU 2)
- ;------------------------------------------------------------
- PSTX :BIT 2,(IX+3);"NZ" jogo "cheia"
- RET Z
- BIT 3,(IX+0);"NZ" tecla "banda" ou "anular" pressionada
- RET Z
- RES 3,(IX+0);desab. indicacao das teclas:banda ou anular
- BIT 5,(IX+0);"NZ" indica tecla "banda" "Z" "Anular"
- JR Z,PASTA
- ;
- BIT 1,(IX+0);"Z" indica que ja foi pressionado "banda"
- RET Z
- RES 1,(IX+0)
- LD A,(LPIN1)
- CP 0
- JR NZ,TOCA;"NZ" indica pino caido ou pino em cima por solenoide
- LD A,(LPIN2)
- CP 0
- RET Z
- TOCA :LD A,(IX+4)
- CP 2 ;bola 2
- JR NZ,TREP
- LD HL,0
- LD (LPIN1),HL;zerar ref. dos sensores dos pinos
- CALL APP;apaga leds dos pinos no painel
- CALL REARME
- RET
- TREP :LD HL,(TYSON);ref. da ultima jogada
- LD (LPIN1),HL
- LD HL,LPIN1
- LD A,(RAB1)
- CPL
- AND (HL)
- LD (HL),A
- INC HL
- LD A,(RAB2)
- CPL
- AND (HL)
- LD (HL),A
- CALL REARME
- RET
- ;tecla "Anular"
- PASTA :BIT 6,(IX+0);"Z" indica que ja foi pressionado "anular"
- RET Z
- RES 6,(IX+0)
- RACA :LD A,(LPIN1)
- CP 0
- JR NZ,BOCAO;"NZ" indica pino caido ou pino em cima por solenoide
- LD A,(LPIN2)
- CP 0
- JR NZ,BOCAO;idem
- LD A,(IX+4)
- CP 2;"Z" bola 2
- JR NZ,LIMA
- LD (IX+4),1
- XIGU :CALL LIGBOL ;localizado no SELBOL
- RET
- BOCAO :LD A,(IX+4)
- CP 2 ;"Z" bola 2
- JR NZ,LIMA
- LD (IX+4),1
- LD HL,0
- LD (LPIN1),HL;zerar ref. dos sensores dos pinos
- CALL APP;apaga leds dos pinos no painel
- CALL REARME
- JR XIGU
- LIMA :CP 3
- JR NZ,XIKA
- LD (IX+4),2
- JR PANE
- XIKA :LD (IX+4),3
- ;
- PANE :LD HL,(TYSON);ref. da ultima jogada
- LD (LPIN1),HL
- LD HL,LPIN1
- LD A,(RAB1)
- CPL
- AND (HL)
- LD (HL),A
- INC HL
- LD A,(RAB2)
- CPL
- AND (HL)
- LD (HL),A
- CALL REARME
- JR XIGU
- ;*****************************************************************************
- ; JOGO LIMPA
- ; ----------
- ; ----------
- LIMPA :CALL REXYW;zerar ref. dos sensores dos pinos p/atuar nas solenoides
- LD HL,0
- LD (RAB1),HL
- CALL APP;apaga pinos no painel
- CALL REARME
- LIMPAX:LD SP,PILHA
- CALL RESETJ
- CALL REGUCOR
- BIT 1,(IX+3);"NZ" limpa
- JP Z,MUDAJO
- CALL LPINOS;"NZ" caiu pinos
- JR NZ,TEEN
- BIT 4,(IX+0);"NZ" tecla "rearme"
- CALL NZ,REARME
- BIT 1,(IX+50d);"NZ" indica falha no "S11"
- JR NZ,CAPAO
- CALL BTXS11;ler "S11" (sensor fim de pista) --> "Z" passou bola
- JR Z,TEEN
- CAPAO :CALL RBAL;verifica teclas "banda ou anular" p/jogo "limpa"
- JR LIMPAX
- TEEN :SET 1,(IX+0);hab. acessar "RBAL" quando pressionar "banda oa anular"
- CALL CPSPSB;conta pinos caidos e espera 3s cair pinos/"NZ" caiu pinos
- JR Z,LIMPAX
- CALL REARME
- JR LIMPAX
- ;rearma se "banda ou anular" p/jogo "limpa"
- RBAL :BIT 1,(IX+3);"NZ" indica jogo "limpa"
- RET Z
- BIT 3,(IX+0);"NZ" indica que houve "anular" ou "banda"
- RET Z
- RES 3,(IX+0);desab. indicacao de "banda" ou "anular"
- BIT 1,(IX+0);"Z" indica que ja foi pressionado "banda ou anular"
- RET Z
- RES 1,(IX+0);indica que foi pressionado "banda ou anular"
- LD A,(LPIN1)
- CP 0
- JR NZ,BALDE
- LD A,(LPIN2)
- CP 0
- JR NZ,BALDE
- LD A,(RAB1)
- CPL
- LD (LPIN1),A
- LD A,(RAB2)
- CPL
- LD (LPIN2),A
- JR FILTRO
- BALDE :LD HL,LPIN1
- LD A,(RAB1);end. que guarda ref. da ultima jogada dos pinos caidos
- CPL
- AND (HL)
- LD (HL),A
- INC HL
- LD A,(RAB2);end. que guarda ref. da ultima jogada dos pinos caidos
- CPL
- AND (HL)
- LD (HL),A
- FILTRO:CALL ALPLP;acende leds dos pinos para jogo "limpa"
- CALL REARME
- RET
- ;acende leds dos pinos para jogo "limpa"
- ALPLP :LD A,(LPIN1)
- CPL
- AND 7EH
- LD (FONT1),A
- LD A,(LPIN2)
- CPL
- AND 0FH
- LD (FONT2),A
- RET
- ;*****************************************************************************
- ; JOGO TREINO
- ; -----------
- ; -----------
- TREINO:RES 3,(IX+7);desab falha rotor
- CALL REXYW;zerar ref. dos sensores dos pinos p/atuar nas solenoides
- CALL APP
- LD A,(FONT2)
- RES 4,A
- RES 5,A
- RES 6,A
- LD (FONT2),A
- SET 6,(IX+7);hab. piscar led "bola 1" para indicar que deve programar
- ;o jogo "treino"
- TROX :BIT 4,(IX+3)
- JR NZ,TROX;retem tecla "programa"
- BIT 2,(IX+1);retem tecla reset
- JR NZ,TROX
- TRI :CALL TRAIL;ler teclas dos pinos e mostrar no painel o que foi digitado
- BIT 1,(IX+3);"NZ" jogo "limpa"
- JP NZ,MUDAJO
- BIT 2,(IX+3);"NZ" jogo "cheia"
- JP NZ,MUDAJO
- BIT 2,(IX+1);tecla "reset"
- JR NZ,TREINO
- BIT 4,(IX+3);tecla "programa"
- JR NZ,TREINO
- BIT 4,(IX+0);"NZ" tecla "rearme" pressionada
- JR Z,TRI
- CALL CFPRG;confer programa das teclas dos pinos
- JP NZ,ZIZI;"Z" indica que nao foi programado nada,portanto vao se-
- ;rem aceitos todos os pinos p/treino
- THOR :LD A,7EH
- LD (LPIN1),A
- LD (FONT1),A;acende leds dos pinos no painel
- LD A,0FH
- LD (LPIN2),A
- LD C,A
- LD A,(FONT2)
- AND 0F0H
- OR C
- LD (FONT2),A;acende leds dos pinos no painel
- ZIZI :CALL REARME
- TREINX:LD SP,PILHA
- LD A,(FONT2)
- RES 4,A
- LD (FONT2),A
- RES 6,(IX+7);desab. piscar led "verde"
- TRIZ :BIT 1,(IX+3);"NZ" jogo "limpa"
- JP NZ,MUDAJO
- BIT 2,(IX+3);"NZ" jogo "cheia"
- JR Z,XSP
- RES 6,(IX+7)
- LD A,(LPIN1)
- CPL
- AND 7EH
- LD (LPIN1),A
- LD A,(LPIN2)
- CPL
- AND 0FH
- LD (LPIN2),A
- CALL ALP
- JP CHEIAX
- XSP :BIT 4,(IX+3);"NZ" tecla "programa" pressionada
- JP NZ,TREINO
- BIT 2,(IX+1);tecla "reset"
- JP NZ,TREINO
- CALL LPINOS;ler pinos --> "NZ" caiu pinos
- JR NZ,PEPSI
- BIT 4,(IX+0);"NZ" tecla "rearme"
- CALL NZ,REARME
- BIT 1,(IX+50d);"NZ" indica falha no "S11"
- JR NZ,TREINX
- CALL BTXS11;ler "S11" (sensor fim de pista) --> "Z" passou bola
- JR NZ,TREINX
- PEPSI :CALL CPSPSB;conta pinos caidos e espera 3s cair pinos/"NZ" caiu pinos
- JR Z,TREINX
- CALL REARME
- JR TREINX
- ;confere programa das teclas do jogo "treino"
- CFPRG :LD A,(LPIN1)
- CP 0
- RET NZ
- LD A,(LPIN2)
- CP 0
- RET
- ;ler teclas dos pinos p/jogo "TREINO"
- TRAIL :LD BC,0
- LD A,(IX+2);teclas dos pinos 1,2,3,4,5,7 e 9
- BIT 4,A;tecla do pino 1
- JR Z,BB1
- SET 4,C
- BB1 :BIT 5,A;tecla do pino 2
- JR Z,BB2
- SET 3,C
- BB2 :BIT 1,A;tecla do pino 3
- JR Z,BB3
- SET 5,C
- BB3 :BIT 0,A;tecla do pino 4
- JR Z,BB4
- SET 1,C
- BB4 :BIT 3,A;tecla do pino 5
- JR Z,BB5
- SET 6,C
- BB5 :BIT 6,(IX+3);tecla do pino 6
- JR Z,BB6
- SET 1,B
- BB6 :BIT 6,A;tecla do pino 7
- JR Z,BB7
- SET 3,B
- BB7 :BIT 0,(IX+3);tecla do pino 8
- JR Z,BB8
- SET 2,C
- BB8 :BIT 2,A;tecla do pino 9
- JR Z,BB9
- SET 0,B
- BB9 :BIT 5,(IX+3);tecla do pino 10
- JR Z,BB10
- SET 2,B
- BB10 :LD A,(LPIN1)
- OR C
- LD (LPIN1),A
- LD A,(LPIN2)
- OR B
- LD (LPIN2),A
- CALL ALP;acende leds dos pinos no painel
- RET
- ;*****************************************************************************
- ;HABILITA PISCAR TODOS LEDS DOS PINOS NO PAINEL P/NMI QUANDO HOUVER "STRACK"
- ;---------------------------------------------------------------------------
- STRACK:BIT 1,(IX+3);"NZ jogo "limpa"
- JR NZ,STX1
- BIT 2,(IX+3);"NZ" cheia
- JR Z,TREK
- LD A,(FONT1)
- CP 7EH
- RET NZ
- LD A,(FONT2)
- AND 0FH
- CP 0FH
- RET NZ
- LD A,(IX+4)
- CP 1
- RET Z
- JR INDY
- TREK :IN A,(IN2);ler referencia dos sensores dos pinos "S1 a S5" e "S8"
- CP 0FFH; "Z" indica que caiu todos estes pinos
- RET NZ
- IN A,(IN1)
- BIT 3,A;sensor do pino 7
- RET Z
- BIT 4,A;sensor do pino 10
- RET Z
- INDY :SET 1,(IX+7);strack --> pisca todos leds dos pinos
- BIT 1,(IX+3);"NZ" jogo "limpa"
- JR NZ,STX0
- BIT 2,(IX+3);"NZ" jogo "cheia" / "Z" jogo "treino"
- RET Z
- STX0 :LD (IX+4),1;inicializa numero da bola apos o strike
- CALL REXYW
- RET
- STX1 :LD A,(LPIN2)
- CP 0FH;"Z" caiu pinos 6,7,9 e 10
- RET NZ
- LD A,(LPIN1)
- CP 7EH;"Z" caiu os pinos 1 a 5 e 8
- JR Z,INDY
- RET
- ;*****************************************************************************
- ;LER "S11" (sensor fim de pista) DURANTE TEMPO DE ALGUMAS NMI CONTINUO PARA E-
- ;-----------------------------------------------------------------------------
- ;VITAR RUIDOS NO "S11" --> "Z" INDICA QUE PASSOU BOLA (NAO HOUVE RUIDO)
- ;----------------------------------------------------------------------
- BTXS11:CALL BTS11;ler "S11"
- RET NZ
- LD HL,12d
- LD (CONTG),HL
- SET 7,(IX+7);ativa time na NMI
- TOCAIA:CALL BTS11
- RET NZ
- BIT 7,(IX+7);"Z" indica fim de time
- JR NZ,TOCAIA
- RET
- ;*****************************************************************************
- ;MUDA SELECAO DE JOGO
- ;--------------------
- MUDAJO :RES 6,(IX+7)
- CALL TEMP1
- BIT 1,(IX+3);"NZ" jogo "limpa"
- JP NZ,LIMPA
- BIT 2,(IX+3);"NZ" jogo "cheia"
- JP NZ,CHEIA
- JP TREINO;jogo "treino"
- ;*****************************************************************************
- ;REARME P/INICIALIZACAO DA MAQUINA
- ;---------------------------------
- REARMI :RES 0,(IX+0)
- RES 3,(IX+7)
- SET 1,(IX+8);ligar rele p/subir
- LD HL,1024
- LD (CONTG),HL
- SET 7,(IX+7)
- XYI :BIT 7,(IX+7)
- JR Z,JKO
- BIT 0,(IX+0)
- JR Z,XYI;"NZ" motor parado
- CALL DESLMT
- SET 2,(IX+8);ligar rele p/descer
- LD HL,1024
- LD (CONTG),HL
- SET 7,(IX+7)
- VYI :BIT 7,(IX+7)
- JR Z,NJU
- BIT 0,(IX+0)
- JR NZ,VYI;"NZ" motor parado
- CALL DESLMT
- SET 1,(IX+8);subir
- JKO :BIT 0,(IX+0);"NZ" parou rotor
- JR Z,JKO
- LD HL,200 ;quase 0.2 segundos de espera (so no inicio)
- LD (CONTG),HL
- SET 7,(IX+7)
- ROROI :BIT 7,(IX+7)
- JR NZ,ROROI
- CALL DESLMT
- RES 0,(IX+0)
- XOR A
- LD (S13),A
- LD C,SENTADA
- CALL CPMD
- CALL ZERASX
- IN A,(IN1)
- BIT 5,A
- JR NZ,YOD
- LD C,CORMIN
- JR JOJD
- YOD :LD C,CORMAX
- JOJD :CALL CPMD
- CALL FODAKU
- CALL DESLMT
- RET
- NJU :CALL DESLMT;desliga motor
- CALL ZERASX
- RES 3,(IX+7);desab. falha rotor
- RES 0,(IX+0);desab. falha rotor
- SET 2,(IX+7);hab. piscar led falha S13
- SET 4,(IX+50);hab. piscar led servico de maquina
- CALL XUCA;sinal vermelho / desliga reles / zera "S1 a S10"
- CALL ZORRA;ler tecla e pinos --> se pressionar tecla ou cair pinos ira
- ;retornar
- RES 2,(IX+7)
- RES 4,(IX+50)
- JP REARMI
- ;****************************************************************************
- ; SUBIR PINOS
- ; -----------
- ; -----------
- SUBIR :LD HL,TABGRU
- LD (CABOU),HL
- LD D,2
- LD E,3; 2 x 3 = 6
- CALL CPMS;subir pinos
- RET Z;"NZ" pinos em cima (OK) - "Z" pinos enlinhados ou falha rotor
- ;quando pinos enlinhados ou falha rotor
- LD A,(S13)
- CP INENL;valor aproximado p/inicio de enlinhamento
- JP NC,PARE13
- CALL DESLMT
- LD C,DESENL1
- JR APTO
- DNOVO :CALL CPMS
- RET Z
- APTO :RES 3,(IX+7)
- SET 7,(IX+8);rele p/solenoides
- CALL GRUSOL;aciona grupo de solenoides
- CALL CPMD
- CALL ZSOL;zera solenoides
- RES 7,(IX+8);desliga rele para solenoide (R3)
- CALL DESLMT
- LD C,DESENL2
- DEC E
- JP NZ,DNOVO
- LD E,3
- SET 4,(IX+50d);hab. piscar led "servico de maquina"
- DEC D;contador de vezes p/desenlinhar pinos
- JP NZ,DNOVO
- IN A,(IN1)
- BIT 5,A
- JR NZ,YUU
- LD C,CORMIN
- JR NJKL
- YUU :LD C,CORMAX
- NJKL :CALL CPMD
- CALL DESLMT;desliga reles / tempo=0.5 seg.
- CALL ZSOL;zerar solenoides
- CALL ZERASX;zerar "S1 a S10" / tempo=2 NMI / volta "S1 a S10" normal
- PARAR :CALL LPINOS;"NZ" indica que caiu pinos
- JP NZ,SUBIR
- BIT 4,(IX+0);"NZ" tecla rearme pressionada
- JP NZ,SUBIR
- JR PARAR
- ;*****************************************************************************
- ;SUBIR PINOS
- ;SAIDA:"NZ"--> CONTADOR "S13" < 0+DELTA INDICA FALHA ROTOR OU PINOS ENLINHADOS
- ; "Z" --> CONTADOR "S13" > OU = 0+DELTA INDICA PINOS EM CIMA - OK
- ;---------------------
- CPMS :RES 5,(IX+7);hab. decrementar "S13"
- SET 1,(IX+8);ligar rele p/subir
- XY :CALL RESETJ
- BIT 0,(IX+0)
- JR Z,XY
- LD A,(S13)
- CP 0
- JR Z,BEL
- CP DELTA; valor de S13 - DELTA
- JR NC,ROLAO
- BEL :CALL DESLMT
- XOR A
- LD (S13),A ;zera contador cm corda
- SET 5,(IX+7)
- ; PUSH HL
- ; LD HL,512
- ; LD (CONTG),HL
- ; POP HL
- ; SET 7,(IX+7)
- ;RORO :CALL RESETJ
- ; BIT 7,(IX+7)
- ; JR NZ,RORO
- RES 3,(IX+7)
- RES 0,(IX+0)
- XOR A;"Z" pino nao enlinhado (rotor OK)
- RET
- ROLAO :CALL DESLMT ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- SET 5,(IX+7) ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ; PUSH HL
- ; LD HL,1024
- ; LD (CONTG),HL
- ; POP HL
- ; SET 7,(IX+7)
- ;RLM :BIT 0,(IX+0)
- ; JR Z,XY
- ; BIT 7,(IX+7)
- ; JR NZ,RLM
- RES 3,(IX+7)
- RES 0,(IX+0)
- OR 1;"NZ" falha rotor ou pino enlinhado
- RET
- ;*****************************************************************************
- ;ACIONA GRUPO DE SOLENOIDES POR TABELA
- ;-------------------------------------
- ;ENTRADA: HL = TABELA
- ;---------------------
- GRUSOL :LD HL,(CABOU)
- LD A,(HL)
- AND 7EH
- LD (FONT3),A
- INC HL
- LD A,(HL)
- AND 0BH
- LD (FONT4),A
- INC HL
- LD (CABOU),HL
- RET
- ;#############################################################################
- ; DESCER PINOS
- ; ------------
- ; ------------
- DESCER:RES 4,(IX+50d);desab. piscada led "servico de maquina"
- CALL SELBOL;seleciona bola 1 ou 2
- CALL VERB2;verifica se arremecou bola 3 p/descer todos pinos
- RES 1,(IX+7);desab. piscar "strike"
- LD C,5
- CALL CPMD;descer ate 1cm p/ligar ou nao rele3
- CALL GOE; ver se caiu todos pinos p/ zerar referencia dos sensores dos
- ; pinos, e ligar rele 3 caso tenha que ligar as solenoides
- LD C,14
- CALL CPMD
- CALL LIGSOL
- LD C,25
- CALL CPMD;descer ate 20cm
- CALL ZSOL;zerar solenoides
- LD C,30
- CALL CPMD;descer ate 25cm p/desligar depois rele3
- LD C,SENTADA
- CALL CPMD
- CALL APLED;apaga lampadas dos pinos se for bola 1
- CALL ZERASX;zerar S1 a S10 / tempo=2 NMI / volta S1 a S10 normal
- CALL FODAKU
- IN A,(IN1)
- BIT 5,A
- JR NZ,YOO
- LD C,CORMIN
- JR JOJO
- YOO :LD C,CORMAX
- JOJO :CALL LPINOS;"NZ" caiu pinos
- JR NZ,DRAGON
- BIT 4,(IX+0);"NZ" tecla rearme
- JR NZ,DRAGON
- BIT 3,(IX+7);"NZ" falha S13
- JP NZ,PARE13
- LD A,(S13)
- CP C
- JR C,JOJO
- CALL DESLMT
- RET
- DRAGON:CALL DESLMT
- CALL SUBIR
- CALL DESLMT
- JP DESCER
- ;zerar referencia dos sensores dos pinos se derrubarem todos,
- ;ligar rele 3 caso tenha que ligar depois as solenoides
- GOE :LD A,(LPIN1);referencia dos sensores dos pinos "S1 a S5" e "S8"
- CP 7EH; "Z" indica que estes pinos cairam
- JR NZ,CASIO
- LD A,(LPIN2);referencia dos sensores dos pinos "S6,S7,S9 e S10"
- CP 0FH; "Z" indica que estes pinos cairam
- RET Z
- CASIO :LD A,(LPIN1)
- CP 0
- JR NZ,REX; "Z" indica que nao caiu pinos ("S1 a S5" e "S8")
- LD A,(LPIN2)
- CP 0
- RET Z; "Z" indica que nao caiu pinos ("S6,S7 e S9")
- REX :SET 7,(IX+8);ligar rele3 p/evitar queimar solenoides caso haja algum
- ;pane no micro
- RET
- ;zerar sensores dos pinos "S1 a S10" / tempo=0.5 seg. / volta S1 a S10 normal
- ZERASX:SET 3,(IX+8);zerar S1 a S10
- CALL INT2;tempo=2 NMI
- RES 3,(IX+8);volta S1 a S10 normal
- RET
- ;apaga lampadas dos pinos se for bola 1
- ;---------------------------------------
- APLED :BIT 2,(IX+3);"NZ" cheia
- RET Z
- LD A,(IX+4)
- CP 1
- RET NZ
- CALL APP
- RET
- ;verifica se acende ou nao as lampadas dos pinos do painel de acordo com o jo-
- ;go selecionado na chave de selecao
- FODAKU:BIT 1,(IX+3);"NZ" jogo "limpa"
- JR Z,FD1
- CALL ALPLP;acende leds dos pinos p/jogo "limpa"
- RET
- FD1 :BIT 2,(IX+3);"NZ" jogo "cheia" / "Z" jogo "treino"
- JR Z,FD2
- CALL ALP
- RET
- FD2 :CALL TRAIL
- RET
- ;SELECAO DO NUMERO DA JOGADA: BOLA1, BOLA2 OU BOLA3
- ;--------------------------------------------------
- ;QUANDO PASSAR BOLA NO "S11" OU CAIR PINOS
- ;-----------------------------------------
- SELBOL:BIT 0,(IX+50);"NZ" hab. acessar selecao de jogada
- RET Z
- RES 0,(IX+50);desab. caso haja uma rearme que nao seja jogada
- BIT 1,(IX+7);"NZ" strike
- JR Z,LIGBOL
- RES 1,(IX+7)
- JR GTX
- LIGBOL:LD A,(IX+4)
- CP 2
- JR NC,BOL2
- GTX :LD A,(FONT2)
- SET 4,A
- RES 5,A
- RES 6,A
- BL :LD (FONT2),A
- RET
- BOL2 :CP 3
- JR NC,BOL3
- LD A,(FONT2)
- SET 6,A
- RES 5,A
- RES 4,A
- JR BL
- BOL3 :LD A,(FONT2)
- SET 5,A
- RES 4,A
- RES 6,A
- JR BL
- ;verificar se ultima bola foi arremecada p/poder descer todos os pinos
- VERB2 :BIT 2,(IX+3);"NZ" cheia
- RET Z
- LD A,(IX+4)
- CP 2
- RET NC
- XOR A
- ;zerar referencia de pinos p/baixar todos pinos quando acionar solenoides
- LD (LPIN1),A;"P1 a P5" e "P8"
- LD (LPIN2),A;"P6,P7,P9 e P10"
- RET
- ;#############################################################################
- ;COMPARACAO DO CM DA CORDA QUANDO DESCER PINOS
- ;---------------------------------------------
- ;OBS: IDEM A ANTERIOR (CPMS)
- ;---------------------------
- CPMD :SET 5,(IX+7);habilita incrementar (S13)
- SET 2,(IX+8);descer pinos
- ZZ :CALL RESETJ
- BIT 3,(IX+7);"NZ" indica falha no "S13"
- JP NZ,PARE13
- LD A,(S13);contador do cm da corda
- CP C
- JR C,ZZ;"NC" quando (S13) atingir valor maior que o determinado (OK)
- RET
- ;#############################################################################
- ;REARME NORMAL
- ;-------------
- REARME:CALL SUBIR;subir pinos
- CALL DESLMT
- CALL DESCER;descer pinos
- RET
- ;#############################################################################
- ;ROTINAS DE TEMPO
- ;----------------
- ; meio segundo
- MEIO :EXX
- LD HL,512d;tempo p/0.5 seg.
- TP :LD (CONTG),HL;contador p/tempo geral
- EXX
- SET 7,(IX+7);habilita a acessar "TIME" na NMI
- BT :CALL RESETJ
- BIT 7,(IX+7);"Z" indica fim do time
- JR NZ,BT
- RET
- ; 2 interrup.
- INT2 :EXX
- LD HL,2
- JR TP
- ; 1 segundo
- TEMP1 :EXX
- LD HL,1024d
- JR TP
- ;2 segundos
- TEMP2 :EXX
- LD HL,2048d
- JR TP
- ; 0.1 segundos
- SEG01 :EXX
- LD HL,100d
- JR TP
- ;*****************************************************************************
- ;REGULAGEM DO CORDAO POR BOTAO
- ;-----------------------------
- REGUCOR:BIT 6,(IX+50);ref. p/saber qual sinal indica botao pressionado
- JR NZ,NIVEL
- CALL BOTAOR;"NZ" pressionou botao
- RET Z
- JR MEDIO
- NIVEL :CALL BOTAOR;"Z" pressionou botao
- RET NZ
- MEDIO :LD SP,PILHA
- CALL DESLMT
- CALL CPMS;"Z" indica pinos em cima / "NZ" problemas
- CALL DESLMT
- BIT 6,(IX+50);ref. p/saber qual sinal indica botao pressionado
- JR NZ,NIVKK
- REGX :CALL BOTAOR;"NZ" pressionou botao
- JR Z,REGX
- LD HL,3000
- LD (CONTG),HL
- SET 7,(IX+7)
- GUNSKY :CALL BOTAOR;"Z" pressionou botao
- JR Z,FREE
- BIT 7,(IX+7)
- JR NZ,GUNSKY
- JR FREE
- NIVKK :CALL BOTAOR;"Z" pressionou botao
- JR NZ,NIVKK
- LD HL,3000
- LD (CONTG),HL
- SET 7,(IX+7)
- GUNSX :CALL BOTAOR;"Z" pressionou botao
- JR NZ,FREE
- BIT 7,(IX+7)
- JR NZ,GUNSX
- FREE :CALL DESCER
- BIT 1,(IX+3);"NZ" jogo "limpa"
- JP NZ,LIMPAX
- BIT 2,(IX+3);"NZ" jogo "cheia"
- JP NZ,CHEIAX
- JP TREINX;jogo "treino"
- ;CORRIGE SINAL DO BOTAO DE REGULAGEM DOS CORDOES
- ;-----------------------------------------------
- CHAINI:CALL BOTAOR
- JR NZ,VYKA
- RES 6,(IX+50)
- RET
- VYKA :SET 6,(IX+50)
- RET
- BOTAOR:IN A,(IN1)
- BIT 6,A
- RET
- ;****************************************************************************
- ;DESLIGA RELE1 E RELE2 / TEMPO=0.5 SEG.
- ;--------------------------------------
- DESLMT:SET 3,(IX+50d);indica p/sub-rotina "TRANSI" p/nao ligar novamente o
- ;transistor enquanto rele 1 ou 2 tiver ligado
- ; RES 0,(IX+8);desliga transistor p/rele 1 e 2
- CALL SEG01 ;0.1 seg.
- RES 3,(IX+50d);indica p/"TRANSI" que pode voltar ao normal
- RES 1,(IX+8);desliga rele1
- RES 2,(IX+8);desliga rele2
- CALL SEG01;0.1 seg.
- RES 3,(IX+7);indica "S13" OK
- RET
- ;#############################################################################
- ;ACIONA SOLENOIDES P/TRANCAR PINOS QUE CAIRAM, OU NAO
- ;----------------------------------------------------
- LIGSOL:LD A,(LPIN1);referencia dos sensores dos pinos ("S1 a S5" e "S8") em
- ;relacao a ultima jogada
- LD B,A
- LD A,(LPIN2);referencia dos sensores dos pinos ("S6,S7,S9 e S10")
- AND 0FH
- LD C,A
- BIT 1,(IX+3);"NZ" jogo "limpa"
- JR NZ,LG1
- BIT 2,(IX+3);"NZ" jogo "cheia" / "Z" jogo "treino"
- JR Z,LG2
- LG1 :LD A,B
- AND 7EH
- LD (FONT3),A;aciona respectivas solenoides ("SOL1 a SOL5" e "SOL8")
- LD A,C
- AND 0FH
- LD (FONT4),A;aciona respectivas solenoides("SOL6,SOL7,SOL9 e SOL10")
- RET
- LG2 :LD A,B
- CPL
- LD B,A
- LD A,C
- CPL
- LD C,A
- JR LG1
- ;#############################################################################
- ;ZERAR SOLENOIDES P/NAO QUEIMAREM
- ;--------------------------------
- ZSOL :XOR A
- LD (FONT3),A;zerar "SOL1 a SOL5" e "SOL8"
- LD A,(FONT4)
- AND 20H
- LD (FONT4),A;zerar "SOL6,SOL7,SOL9 e SOL10"
- RES 7,(IX+8);desliga rele3 (mesmo que nao tenha sido ligado)
- RET
- ;#############################################################################
- ;LEITURA DOS SENSORES DE PINOS CAIDOS P/MOSTRAR NO PAINEL E SABER SE CAIRAM
- ;--------------------------------------------------------------------------
- LERPIN:LD HL,0;referencia dos sensores "S1 a S10"
- IN A,(IN1);ler "S7" no bit 3
- LD C,A;salva no reg. C
- IN A,(IN2);ler "S1 a S6","S8" e "S9"
- BIT 3,A; "S4"
- JR Z,PM1
- SET 1,L; posicao do "S4" p/painel
- PM1 :BIT 1,A; "S8"
- JR Z,PM2
- SET 2,L; posicao do "S8" p/painel
- PM2 :BIT 4,A; "S2"
- JR Z,PM3
- SET 3,L; posicao do "S2" p/painel
- PM3 :BIT 5,A; "S1"
- JR Z,PM4
- SET 4,L; posicao do "S1" p/painel
- PM4 :BIT 0,A; "S5"
- JR Z,PM5
- SET 6,L; posicao do "S5" p/painel
- PM5 :BIT 6,A; "S3"
- JR Z,PM6
- SET 5,L; posicao do "S3" p/painel
- PM6 :BIT 2,A; "S9"
- JR Z,PM7
- SET 0,H; posicao do "S9" p/painel
- PM7 :BIT 7,A; "S6"
- JR Z,PM8
- SET 1,H; posicao do "S6" p/painel
- PM8 :BIT 3,C; "S7"
- JR Z,PM9
- SET 3,H; posicao do "S7" p/painel
- PM9 :BIT 4,C;"S10"
- JR Z,TRUS
- SET 2,H;posicao do "S10" p/painel
- TRUS :LD (RAB1),HL;guarda referencia da ultima jogada p/jogo "limpa"
- BIT 1,(IX+3);"NZ" jogo "limpa"
- JR NZ,KIKO
- BIT 2,(IX+3);"NZ" jogo "cheia" / "Z" jogo "treino"
- JR Z,PIKA
- KIKO :LD A,(LPIN1)
- OR L
- AND 7EH
- LD (LPIN1),A
- LD A,(LPIN2)
- OR H
- AND 0FH
- LD (LPIN2),A
- LD DE,(LPIN1)
- LD A,D
- OR E
- CP 0
- JR Z,XALE
- LD (TYSON),DE;guarda ref. da ultima jogada dos pinos p/jogo "cheia"
- ;usado na sub-rotina "PSTX"
- XALE :BIT 1,(IX+3);"NZ" jogo "limpa"
- JR Z,BIKU
- CALL ALPLP;acende leds dos pinos para jogo "limpa"
- RET
- BIKU :CALL ALP;acende leds dos pinos para jogo "cheia"
- RET
- ;acende leds dos pinos para jogo "treino"
- PIKA :PUSH BC
- LD A,L
- CPL
- LD L,A
- LD A,(LPIN1)
- AND L
- LD (FONT1),A
- LD A,H
- CPL
- LD H,A
- LD A,(LPIN2)
- AND H
- LD C,A
- LD A,(FONT2)
- AND 0F0H
- OR C
- LD (FONT2),A
- CALL STRACK
- POP BC
- RET
- ;*****************************************************************************
- ;LER SENSORES DOS PINOS SEM ALTERAR ENDERECOS DE REFERENCIA "LPIN1" E "LPIN2"
- ;----------------------------------------------------------------------------
- LPINOS:IN A,(IN1)
- BIT 3,A; "NZ" indica pino 7 caido
- RET NZ
- BIT 4,A;"NZ" indica pino 10 caido
- RET NZ
- IN A,(IN2);ler sensores "S1 a S6" e "S8,S9"
- CP 0; "NZ" indica pinos caidos
- RET
- ;*****************************************************************************
- ;ACENDE LEDS DOS PINOS NO PAINEL P/"CHEIA"
- ;-----------------------------------------
- ALP :LD A,(LPIN1);referencia dos sensores dos pinos lidos
- AND 7EH;manter bits "7" e "0" c/"0" p/sincronismo da saida
- LD (FONT1),A; envia o valor p/painel
- LD A,(LPIN2);referencia dos sensores dos pinos lidos
- AND 0FH;manter bits "4 a 7" zerados (nada existe)
- LD C,A;salva
- LD A,(FONT2)
- AND 0F0H;anula os leds dos pinos anteriores do painel
- OR C;pega os bits dos leds de pinos atuais
- LD (FONT2),A;envia o valor p/painel
- RET
- ;#############################################################################
- ;DAR STOP NO PROGRAMA POR FALHA "S13" (CM DA CORDA)
- ;--------------------------------------------------
- PARE13:LD SP,PILHA
- CALL DESLMT;desliga motor
- RES 3,(IX+7);desab. falha rotor
- SET 2,(IX+7);hab. piscar led falha S13
- SET 4,(IX+50);hab. piscar led servico de maquina
- CALL XUCA;sinal vermelho / desliga reles / zera "S1 a S10"
- CALL ZORRA;ler tecla e pinos --> se pressionar tecla ou cair pinos ira
- ;retornar
- RES 2,(IX+7)
- RES 4,(IX+50)
- CALL REARMI
- BIT 1,(IX+3);"NZ" jogo "limpa"
- JP NZ,LIMPAX
- BIT 2,(IX+3);"NZ" jogo "cheia"
- JP NZ,CHEIAX
- JP TREINX;jogo "treino"
- ;
- XUCA :CALL DESLMT;desliga reles / tempo=0.5 seg.
- SET 3,(IX+8);zerar S1 a S10
- CALL INT2; tempo=2 NMI
- RES 3,(IX+8);volta S1 a S10 normal
- CALL ZSOL;zera solenoides para evitar queimar caso tenham sido ligadas
- RES 7,(IX+8);desliga rele 3, que e usado junto com as solenoides
- RET
- ZORRA :BIT 4,(IX+0);"NZ" tecla rearme pressionada
- RET NZ
- ZORR :CALL LPINOS;ler sensores dos pinos s/alterar enderecos de ref.
- RET NZ
- CALL RESETJ
- JR ZORRA
- ;*****************************************************************************
- ;TEMPO P/MOSTRAR PINOS CAINDO
- ;----------------------------
- TPVEL :IN A,(IN1)
- BIT 7,A
- JR NZ,TYJU
- LD HL,ESPMIN
- JR TUKO
- TYJU :LD HL,ESPMAX
- TUKO :LD (CONTG),HL
- SET 7,(IX+7);aciona contagem do "TIME" na NMI
- TPVX :CALL LERPIN;ler pinos e coloca na memoria
- CALL STRACK
- BITH :BIT 1,(IX+7);"NZ" houve "strack"
- RET NZ
- BIT 7,(IX+7);"Z" indica fim de time
- JR NZ,TPVX
- RET
- ;*****************************************************************************
- ;ZERAR REFERENCIA DOS SENSORES DOS PINOS PARA ATUAR NAS SOLENOIDES NA DESCIDA
- ;----------------------------------------------------------------------------
- ;E REFERENCIA DO JOGO "LIMPA" E "TREINO"
- ;---------------------------------------
- REXYW :LD HL,0
- LD (LPIN1),HL
- ; LD (RAB1),HL
- RET
- ;*****************************************************************************
- ;LER TECLA RESET P/JOGOS
- ;-----------------------
- RESETJ:BIT 7,(IX+0);"NZ" houve reset
- RET Z
- LD SP,PILHA
- BIT 1,(IX+3);"NZ" limpa
- JP NZ,LIMPA
- BIT 2,(IX+3);"NZ" cheia
- JP NZ,CHEIA2
- JP TREINO
- CHEIA2:SET 0,(IX+8);ligar LED contador de jogadas ROLF
- CALL SEG01
- CALL SEG01
- RES 0,(IX+8)
- JP CHEIA
- ;*****************************************************************************
- ;CONTAR PINOS CAIDOS E ESPERAR CAIR MAIS PINOS
- ;---------------------------------------------
- CPSPSB:CALL TPVEL;ler sensores dos pinos e mostrar no painel durante um tempo
- CALL LPINOS;ler pinos --> "NZ" caiu pinos
- RET
- ;*****************************************************************************
- ;tabela
- ;------
- TABGRU:DB 2CH;grupo 1 de solenoides
- DB 8
- DB 12H;grupo 2 de solenoides
- DB 3
- DB 68H;grupo 3 de solenoides
- DB 3
- DB 2CH;grupo 4 de solenoides
- DB 8
- DB 12H;grupo 5 de solenoides
- DB 3
- DB 68H;grupo 6 de solenoides
- DB 3
- ;-----------------------------
- ;OBS: BITS --> 0 - NADA
- ; 1 - PINO 4
- ; 2 - PINO 8
- ; 3 - PINO 2
- ; 4 - PINO 1
- ; 5 - PINO 3
- ; 6 - PINO 5 (REI)
- ; 7 - NADA
- ;-----------------------------
- ; 0 - PINO 9
- ; 1 - PINO 6
- ; 2 - NADA
- ; 3 - PINO 7
- ; 4 a 7 - NADA
- ;-----------------------------
- ;*****************************************************************************
- ;*****************************************************************************
- END
- ;*****************************************************************************
- ;*****************************************************************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement