Entrar    Registrar

8086 architecture

Software e Hardware para linha x86

Moderadores: andre_teprom, 51

  • Autor
    Mensagem

8086 architecture

Mensagempor tcpipchip » 03 Mai 2013 21:54

Estou montando o circuito (melhorando) para o 8086.

Ele terá

8086 - processador principal
8259 - Controlador de Interrupções (a novidade)
8251 - Usart
8253 - 3 timers
8255 - PIC 24 IO

Exemplos para inicializar estes dispositivos em assembly.

O 8253 vai gerar em uma das saidas um SYSTICK para gerar uma interrupcao em uma da 8 entradas do 8259 (8 ou 1ch)...ou para fazer SOM.

Já esta funcionando 8251, 8253, 8255, tenho que fazer funcionar o 8259, tenho que ver pq nao responde com INTA.

Tem funcao para ler e escrever no terminal...

Abraços

TCPIPCHIP
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5727
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: 8086 architecture

Mensagempor Aquino » 03 Mai 2013 22:58

Esses dias tinha uma empresa que fabrica impressoras de cheque procurando programador ASM e C para 8086....
Então, antes que alguém fala mal do 8086, fica aí a informação...
"...People who are really serious about software should make their own hardware..." Alan Kay
Aquino
Dword
 
Mensagens: 1790
Registrado em: 12 Out 2006 22:24

Re: 8086 architecture

Mensagempor 51 » 04 Mai 2013 09:45

Aquino, vc se lembra que empresa é?
51
Administrador
 
Mensagens: 325
Registrado em: 12 Out 2006 12:37
Localização: Americana - SP

Re: 8086 architecture

Mensagempor Aquino » 04 Mai 2013 10:08

"...People who are really serious about software should make their own hardware..." Alan Kay
Aquino
Dword
 
Mensagens: 1790
Registrado em: 12 Out 2006 22:24

Re: 8086 architecture

Mensagempor tcpipchip » 04 Mai 2013 11:13

será que fica aqui "perto" ?
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5727
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: 8086 architecture

Mensagempor andre_teprom » 04 Mai 2013 19:39

tcpipchip escreveu:Estou montando o circuito (melhorando) para o 8086...



Acho o conceito de programação em arquiteturas microprocessadores muito interessante, pois diferentemente dos microcontroladores onde os módulos periféricos já estão integrados, e mapeados em SFR´s, há uma liberdade para se mapear em hardware o endereçamento dos I/O´s.

Lembro de uma empresa onde trabalhei uns 10 anos atrás, fabricante de monitores multiparametricos, onde a CPU de todos os modelos era baseado no Z84 ( um Z80 melhorado, com alguns periféricos integrados ), e era muito bacana fazer o projeto desde o desenho do esquema com seus diversos chip selects até o programa final.

Por mais que se abobine o passado, dava pra fazer muita coisa bacana com esses cores.

Como já mexi um pouco com o 8086, tenho curiosidade em saber onde vai dar a sua empreitada....rsrsrs.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_teprom
Dword
 
Mensagens: 5260
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: 8086 architecture

Mensagempor tcpipchip » 06 Mai 2013 18:04

Hoje, finalmente consegui entender o 8259.

Consegui configurar ele com MASTER e programei as 8 interrupções, iniciando nos vetores de 60H a 67H

Tambem consegui acertar o EOI

Vou partir agora para o PIC 8255 e implementar as rotinas de LCD e TECLADO, alem do BEEP (INTERRUPT)

Depois de tudo testado, libero arquivo do proteus e arquivo assembly (MASM)

TCPIPCHIP
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5727
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: 8086 architecture

Mensagempor norad58 » 07 Mai 2013 19:32

tcpipchip,

Poderia incorporar um CI relogio calendario como o DS12887 ou outro parecido, assim terá hora real e calendario na sua placa.
Fica facil adaptar no seu hardware.
Tenho aqui alguma peças que desmontei na epoca do PC XT. Como a CPU 8088 e seus perifericos.
Está usando RAM estatica ou dinamica no seu kit? Os endereçmentos dos perifericos está adotando como um PC IBM?
norad58
Word
 
Mensagens: 693
Registrado em: 08 Abr 2013 15:56

Re: 8086 architecture

Mensagempor KrafT » 07 Mai 2013 20:34

Um slot Pci Express 16x vem bem...
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2112
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: 8086 architecture

Mensagempor tcpipchip » 10 Mai 2013 15:07

Código: Selecionar todos
.MODEL   SMALL
 
IO0  EQU  0000h
IO1  EQU  0200h
IO2  EQU  0400h
IO3  EQU  0600h
IO4  EQU  0800h
IO5  EQU  0A00h
IO6  EQU  0C00h
IO7  EQU  0E00h
IO8  EQU  1000h
IO9  EQU  1200h
IO10 EQU  1400h
IO11 EQU  1600h
IO12 EQU  1800h
IO13 EQU  1A00h
IO14 EQU  1C00h
IO15 EQU  1E00h

 ; 8251A USART
 
ADR_USART_DATA EQU  (IO0 + 00h)
ADR_USART_CMD  EQU  (IO0 + 02h)
ADR_USART_STAT EQU  ADR_USART_CMD

 ; 8253A Timer

ADR_TIMER_CONTROL EQU  (IO2 + 06h)
ADR_TIMER_DATA0   EQU  (IO2 + 00h)
ADR_TIMER_DATA1   EQU  (IO2 + 02h)
ADR_TIMER_DATA2   EQU  (IO2 + 04h)

TIMER_COUNTER0   EQU 00h
TIMER_COUNTER1   EQU 40h
TIMER_COUNTER2   EQU 80h

TIMER_LATCH     EQU 00h
TIMER_LSB     EQU 10h
TIMER_MSB     EQU 20h
TIMER_LSB_MSB      EQU 30h

TIMER_MODE0   EQU 00h
TIMER_MODE1   EQU 02h
TIMER_MODE2   EQU 04h
TIMER_MODE3   EQU 06h
TIMER_MODE4   EQU 08h
TIMER_MODE5   EQU 09h
TIMER_BCD   EQU 01h

 ; 8255A PIO

ADR_PPI_PORTA   EQU  (IO1)
ADR_PPI_PORTB   EQU  (IO1 + 02h)
ADR_PPI_PORTC   EQU  (IO1 + 04h)
ADR_PPI_CONTROL   EQU  (IO1 + 06h)

PPI_PORTA_INP   EQU  10h
PPI_PORTA_OUT   EQU  00h
PPI_PORTB_INP   EQU  02h
PPI_PORTB_OUT   EQU  00h
PPI_PORTCL_INP   EQU  01h
PPI_PORTCL_OUT   EQU  00h
PPI_PORTCH_INP   EQU  08h
PPI_PORTCH_OUT   EQU  00h
PPI_MODE_BCL_0   EQU  00h
PPI_MODE_BCL_1   EQU  04h
PPI_MODE_ACH_0   EQU  00h
PPI_MODE_ACH_1   EQU  20h
PPI_MODE_ACH_2   EQU  40h
PPI_ACTIVE   EQU  80h

 ; 8259
 
IO8259_MAIN_ADDR EQU 0600H
IO8259_SUB_ADDR  EQU 0800H
.8086
.code
        io8259_std1_init macro base,icw1_val,icw2_val,icw4_val
                mov dx,base
                mov al,icw1_val 
                out dx,al
               
                mov dx,base+2
                mov al,icw2_val
                out dx,al
               
                mov al,icw4_val
                out dx,al
        endm
        io8259_std_init macro base,icw1_val,icw2_val,icw3_val,icw4_val
                mov dx,base
                mov al,icw1_val 
                out dx,al
               
                mov dx,base+2
                mov al,icw2_val
                out dx,al
               
                mov al,icw3_val
                out dx,al
               
                mov al,icw4_val
                out dx,al
        endm
       
        setup_int macro int_irq,int_cs,int_ip
                push di
                push ds
                mov di,0
                mov ds,di
                mov di,(int_irq)*4
                mov word ptr ds:[di],int_ip
                mov word ptr ds:[di+2],int_cs
                pop ds
                pop di
        endm
        setup_ints macro int_irq,int_cs,int_ip
                setup_int int_irq,int_cs,int_ip
                setup_int (int_irq+1),int_cs,int_ip
                setup_int (int_irq+2),int_cs,int_ip
                setup_int (int_irq+3),int_cs,int_ip
                setup_int (int_irq+4),int_cs,int_ip
                setup_int (int_irq+5),int_cs,int_ip
                setup_int (int_irq+6),int_cs,int_ip
                setup_int (int_irq+7),int_cs,int_ip
        endm
       


        intxx proc far
      IRET
      ;cli
      pushf
      push ax
      push dx
      MOV DX,IO11
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      ;sti
                iret
        intxx endp

        intl1 proc far
      cli
      pushf
      push ax
      push dx
      MOV DX,IO15
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      sti
                iret
        intl1 endp

        intl2 proc far
      cli
      pushf
      push ax
      push dx
      CALL IMPRIME_DISPLAY_A
      MOV DX,IO14
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      sti
                iret
        intl2 endp

        intl1_s proc far
      cli
      pushf
      push ax
      push dx
      CALL IMPRIME_DISPLAY_B
      MOV DX,IO13
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      sti
                iret
        intl1_s endp

        intl2_s proc far
      cli
      pushf
      push ax
      push dx
      MOV DX,IO12
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      sti
                iret
        intl2_s endp
       
.startup

   MOV AX,CS
   MOV DS,AX
   MOV SS,AX

   CALL INICIALIZA_8255
   CALL INICIALIZA_8251
   CALL INICIALIZA_8259
   CALL INICIALIZA_8253

LOO:
   inc bx
   cmp bx,65535
   je zera
        jmp LOO

zera:
   call manda_caracter
   mov bx,0
   jmp loo
 
;19200,N,8,1
INICIALIZA_8251:                                     
   MOV AL,7Dh
   MOV DX,ADR_USART_CMD     ;  /* ED */
   OUT DX,AL
   
   MOV AL,07h
   MOV DX,ADR_USART_CMD     ;  /* RxEn, TxEn, DTRa */
   OUT DX,AL
   RET

MANDA_CARACTER:
   PUSHF
   PUSH AX
   PUSH DX
   MOV DX, ADR_USART_STAT
BUSY:
   IN  AL,DX
   AND AL,1
   JZ BUSY
   MOV AL,"."
   MOV DX,ADR_USART_DATA     ; DATA
   OUT DX,AL
   
   MOV DX,0FFFFH
   MOV AL,0AAH
   OUT DX,AL

   POP DX
   POP AX
   POPF

   RET

;20 IOS SENDO UTILIZADAS
INICIALIZA_8255:
   MOV DX, ADR_PPI_CONTROL
   MOV AL,0
   OR AL,PPI_PORTA_OUT
   OR AL,PPI_PORTB_OUT 
   OR AL,PPI_PORTCL_INP
   OR AL,PPI_PORTCH_INP
   OR AL,PPI_MODE_BCL_0
   OR AL,PPI_MODE_ACH_0
   OR AL,PPI_ACTIVE
   OUT DX,AL
   RET       

IMPRIME_DISPLAY_A:
   PUSH AX
   PUSH DX
   MOV DX,ADR_PPI_PORTB
   MOV AL,7FH
   OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
   POP DX
   POP AX
   RET

IMPRIME_DISPLAY_B:
   PUSH AX
   PUSH DX
   MOV DX,ADR_PPI_PORTB
   MOV AL,0FFH
   OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
   POP DX
   POP AX
   RET


;CONFIGURA 8 INTERRUPTS (0-MAIOR PRIORIDADE)
INICIALIZA_8259:
        cli

   ;NMI
        setup_ints 00h,seg intxx,offset intxx

        setup_int 30h,seg intl1,offset intl1
        setup_int 31h,seg intl2,offset intl2
        setup_int 32h,seg intl1_s,offset intl1_s
        setup_int 33h,seg intl2_s,offset intl2_s

        io8259_std_init io8259_main_addr,13h,30h,03h,0h

   sti
       
   ret         


INICIALIZA_8253:
   PUSH AX
   PUSH DX
   MOV DX,ADR_TIMER_CONTROL
   MOV AL,0
   OR AL,TIMER_COUNTER1
   OR AL,TIMER_MODE2
   OR AL,TIMER_LSB_MSB
   OUT DX,AL
   MOV DX,ADR_TIMER_DATA1
   MOV AL,0D0H
   OUT DX,AL
   MOV DX,ADR_TIMER_DATA1
   MOV AL,07H
   OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
   POP DX
   POP AX
   RET

; VARIAVEIS
.DATA
VALUE DB 0

.STACK
STK DW 128 DUP(0)
END

------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5727
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: 8086 architecture

Mensagempor tcpipchip » 10 Mai 2013 15:13

Imagem
Na foto mostra as 4 IRQS sendo utilizadas.
Desabilitei a NMI, pois esta bloquenado as demais...pode ser bug do PROTEUS. Na pratica nao deveria...
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5727
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: 8086 architecture

Mensagempor msamsoniuk » 11 Mai 2013 02:39

nem curto x86... mas pq nao usar um 80186? eh relativemente bem "glue-less":

Imagem

tcpipchip escreveu:Estou montando o circuito (melhorando) para o 8086.

Ele terá

8086 - processador principal
8259 - Controlador de Interrupções (a novidade)
8251 - Usart
8253 - 3 timers
8255 - PIC 24 IO

Exemplos para inicializar estes dispositivos em assembly.

O 8253 vai gerar em uma das saidas um SYSTICK para gerar uma interrupcao em uma da 8 entradas do 8259 (8 ou 1ch)...ou para fazer SOM.

Já esta funcionando 8251, 8253, 8255, tenho que fazer funcionar o 8259, tenho que ver pq nao responde com INTA.

Tem funcao para ler e escrever no terminal...

Abraços

TCPIPCHIP
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2882
Registrado em: 13 Out 2006 18:04

Re: 8086 architecture

Mensagempor tcpipchip » 11 Mai 2013 15:13

ahh sim!
Já trabalhei com o 80186 (beck pc), 12 anos atras.
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5727
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: 8086 architecture

Mensagempor tcpipchip » 17 Mai 2013 16:11

Fiz as rotinas em assembly para ler o teclado e escreve no display de 7 segmentos.
Usei uma interrupt para varredura do teclado e escrita no display....
Código: Selecionar todos
.MODEL   SMALL
 
IO0  EQU  0000h
IO1  EQU  0200h
IO2  EQU  0400h
IO3  EQU  0600h
IO4  EQU  0800h
IO5  EQU  0A00h
IO6  EQU  0C00h
IO7  EQU  0E00h
IO8  EQU  1000h
IO9  EQU  1200h
IO10 EQU  1400h
IO11 EQU  1600h
IO12 EQU  1800h
IO13 EQU  1A00h
IO14 EQU  1C00h
IO15 EQU  1E00h

 ; 8251A USART
 
ADR_USART_DATA EQU  (IO0 + 00h)
ADR_USART_CMD  EQU  (IO0 + 02h)
ADR_USART_STAT EQU  ADR_USART_CMD

 ; 8253A Timer

ADR_TIMER_CONTROL EQU  (IO2 + 06h)
ADR_TIMER_DATA0   EQU  (IO2 + 00h)
ADR_TIMER_DATA1   EQU  (IO2 + 02h)
ADR_TIMER_DATA2   EQU  (IO2 + 04h)

TIMER_COUNTER0   EQU 00h
TIMER_COUNTER1   EQU 40h
TIMER_COUNTER2   EQU 80h

TIMER_LATCH     EQU 00h
FTIMER_LSB     EQU 10h
TIMER_MSB     EQU 20h
TIMER_LSB_MSB      EQU 30h

TIMER_MODE0   EQU 00h
TIMER_MODE1   EQU 02h
TIMER_MODE2   EQU 04h
TIMER_MODE3   EQU 06h
TIMER_MODE4   EQU 08h
TIMER_MODE5   EQU 09h
TIMER_BCD   EQU 01h

 ; 8255A PIO

ADR_PPI_PORTA   EQU  (IO1)
ADR_PPI_PORTB   EQU  (IO1 + 02h)
ADR_PPI_PORTC   EQU  (IO1 + 04h)
ADR_PPI_CONTROL   EQU  (IO1 + 06h)

PPI_PORTA_INP   EQU  10h
PPI_PORTA_OUT   EQU  00h
PPI_PORTB_INP   EQU  02h
PPI_PORTB_OUT   EQU  00h
PPI_PORTCL_INP   EQU  01h
PPI_PORTCL_OUT   EQU  00h
PPI_PORTCH_INP   EQU  08h
PPI_PORTCH_OUT   EQU  00h
PPI_MODE_BCL_0   EQU  00h
PPI_MODE_BCL_1   EQU  04h
PPI_MODE_ACH_0   EQU  00h
PPI_MODE_ACH_1   EQU  20h
PPI_MODE_ACH_2   EQU  40h
PPI_ACTIVE   EQU  80h

 ; 8259
 
IO8259_MAIN_ADDR EQU 0600H
IO8259_SUB_ADDR  EQU 0800H
.8086
.code
        io8259_std1_init macro base,icw1_val,icw2_val,icw4_val
                mov dx,base
                mov al,icw1_val 
                out dx,al
               
                mov dx,base+2
                mov al,icw2_val
                out dx,al
               
                mov al,icw4_val
                out dx,al
        endm
        io8259_std_init macro base,icw1_val,icw2_val,icw3_val,icw4_val
                mov dx,base
                mov al,icw1_val 
                out dx,al
               
                mov dx,base+2
                mov al,icw2_val
                out dx,al
               
                mov al,icw3_val
                out dx,al
               
                mov al,icw4_val
                out dx,al
        endm
       
        setup_int macro int_irq,int_cs,int_ip
                push di
                push ds
                mov di,0
                mov ds,di
                mov di,(int_irq)*4
                mov word ptr ds:[di],int_ip
                mov word ptr ds:[di+2],int_cs
                pop ds
                pop di
        endm
        setup_ints macro int_irq,int_cs,int_ip
                setup_int int_irq,int_cs,int_ip
                setup_int (int_irq+1),int_cs,int_ip
                setup_int (int_irq+2),int_cs,int_ip
                setup_int (int_irq+3),int_cs,int_ip
                setup_int (int_irq+4),int_cs,int_ip
                setup_int (int_irq+5),int_cs,int_ip
                setup_int (int_irq+6),int_cs,int_ip
                setup_int (int_irq+7),int_cs,int_ip
        endm
       

        intxx proc far
      IRET
        intxx endp

        intl1 proc far
      cli
      pushf
      push ax
      push dx
      push bx

      CALL VERIFICA_TECLA

      MOV DX,ADR_PPI_PORTA      
      MOV AL,0FFH
      OUT DX,AL
      
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL

      MOV BX, WORD PTR LIN_COL
      MOV AL,DISPLAY[BX]

      MOV BH,0
      MOV BL,AL

      MOV AL,TABLE_LED[BX]
      MOV DX, ADR_PPI_PORTB
      OUT DX,AL      

      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL

      MOV BX, WORD PTR LIN_COL
      MOV AL, TABLE_LIN_COL[BX]
      INC WORD PTR LIN_COL
      CMP WORD PTR LIN_COL,4   
      JE ZERA
      JMP VARRE
   ZERA:
      MOV WORD PTR LIN_COL,0
   VARRE:
      
      MOV DX,ADR_PPI_PORTA      
      OUT DX,AL
      
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL

      pop bx
      pop dx
      pop ax
      popf
      sti
                iret
        intl1 endp

        intl2 proc far
      cli
      pushf
      push ax
      push dx
      MOV DX,IO13
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      sti
                iret
        intl2 endp

        intl1_s proc far
      cli
      pushf
      push ax
      push dx
      MOV DX,IO14
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      sti
                iret
        intl1_s endp

        intl2_s proc far
      cli
      pushf
      push ax
      push dx
      MOV DX,IO15
      MOV AL,0AAH
      OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      pop dx
      pop ax
      popf
      sti
                iret
        intl2_s endp
       



   


.startup

   MOV AX,CS
   MOV DS,AX
   MOV SS,AX

   CALL INICIALIZA_8255
   CALL INICIALIZA_8251
   CALL INICIALIZA_8259
   CALL INICIALIZA_8253

   MOV WORD PTR LIN_COL,0
   MOV BYTE PTR TECLA,'.'

LOO:
   inc bx
   cmp bx,65535
   je zera
        jmp LOO

zera:
   ;MANDA . PELA SERIAL
   call manda_caracter
   mov bx,0
   jmp loo
 
;19200,N,8,1
INICIALIZA_8251:                                     
   MOV AL,7Dh
   MOV DX,ADR_USART_CMD     ;  /* ED */
   OUT DX,AL
   
   MOV AL,07h
   MOV DX,ADR_USART_CMD     ;  /* RxEn, TxEn, DTRa */
   OUT DX,AL
   RET

MANDA_CARACTER:
   PUSHF
   PUSH AX
   PUSH DX
   MOV DX, ADR_USART_STAT
BUSY:
   IN  AL,DX
   AND AL,1
   JZ BUSY
   MOV AL,TECLA
   MOV DX,ADR_USART_DATA     ; DATA
   OUT DX,AL
   
   MOV DX,0FFFFH
   MOV AL,0AAH
   OUT DX,AL

   POP DX
   POP AX
   POPF

   RET

;20 IOS SENDO UTILIZADAS
INICIALIZA_8255:
   MOV DX, ADR_PPI_CONTROL
   MOV AL,0
   OR AL,PPI_PORTA_OUT
   OR AL,PPI_PORTB_OUT 
   OR AL,PPI_PORTCL_INP
   OR AL,PPI_PORTCH_INP
   OR AL,PPI_MODE_BCL_0
   OR AL,PPI_MODE_ACH_0
   OR AL,PPI_ACTIVE
   OUT DX,AL
   RET       

;CONFIGURA 4 INTERRUPTS (0-MAIOR PRIORIDADE)
INICIALIZA_8259:
        cli

   ;NMI
        setup_ints 00h,seg intxx,offset intxx

        setup_int 30h,seg intl1,offset intl1
        setup_int 31h,seg intl2,offset intl2
        setup_int 32h,seg intl1_s,offset intl1_s
        setup_int 33h,seg intl2_s,offset intl2_s

        io8259_std_init io8259_main_addr,13h,30h,03h,0h

   sti
       
   ret         


INICIALIZA_8253:
   PUSH AX
   PUSH DX
   MOV DX,ADR_TIMER_CONTROL
   MOV AL,0
   OR AL,TIMER_COUNTER1
   OR AL,TIMER_MODE2
   OR AL,TIMER_LSB_MSB
   OUT DX,AL
   MOV DX,ADR_TIMER_DATA1
   MOV AL,0FFH  ;;D0
   OUT DX,AL
   MOV DX,ADR_TIMER_DATA1
   MOV AL,0FFH   ;;07
   OUT DX,AL
      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
   POP DX
   POP AX
   RET

VERIFICA_TECLA:
      MOV DX,ADR_PPI_PORTC
      IN AL,DX
      AND AL,0FH
      CMP AL,0FH

      JE SEM_TECLA

      CMP AL,0EH
      JE COLUNA_1

      CMP AL,0DH
      JE COLUNA_2

      CMP AL,0BH
      JE COLUNA_3

      CMP AL,07H
      JE COLUNA_4

COLUNA_1:
      MOV BX,WORD PTR LIN_COL
      MOV AL,TABCOL_1[BX]
      MOV TECLA,AL
      JMP SEM_TECLA
COLUNA_2:
      MOV BX,WORD PTR LIN_COL
      MOV AL,TABCOL_2[BX]
      MOV TECLA,AL
      JMP SEM_TECLA
COLUNA_3:
      MOV BX,WORD PTR LIN_COL
      MOV AL,TABCOL_3[BX]
      MOV TECLA,AL
      JMP SEM_TECLA
COLUNA_4:
      MOV BX,WORD PTR LIN_COL
      MOV AL,TABCOL_4[BX]
      MOV TECLA,AL

SEM_TECLA:

      MOV DX,0FFFFH
      MOV AL,0AAH
      OUT DX,AL
      RET


; VARIAVEIS
;.DATA
LIN_COL DW 0
TABLE_LIN_COL DB 0FEH,0FDH,0FBH,0F7H
;DECODER SEVEN SEGMENT
TABLE_LED DB 3FH,06H,5BH,4FH,66H,6DH,79H,07H,7FH,67H
;DISPLAY DEVE CONTER DADO A SER IMPRESSO NO SEVEN SEGMENT
DISPLAY DB 1,2,3,4

TABCOL_1 DB 'C','7','4','1'
TABCOL_2 DB '0','8','5','2'
TABCOL_3 DB '=','9','6','3'
TABCOL_4 DB '+','/','X','-'

TECLA DB 0

.STACK
STK DW 128 DUP(0)
END
[code][/code]
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5727
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: 8086 architecture

Mensagempor KrafT » 17 Mai 2013 16:43

Não tem o 8279 no Proteus?
Iria facilitar tua vida.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2112
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Próximo

Voltar para Intel x86

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante