Advertisement
Guest User

2011-03-07

a guest
Jan 23rd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.     .model small          
  3.     .data    
  4.  
  5.     .stack    
  6.     .code  
  7.    
  8.    
  9.     ; procedura di inizializzazione della interrupt vector table
  10. INIT_IVT    PROC
  11.         PUSH    AX
  12.         PUSH    BX
  13.         PUSH    DX
  14.         PUSH    DS
  15.         XOR AX,     AX
  16.         MOV DS,     AX      
  17.        
  18.         ; channel 7
  19.         MOV BX,     39     
  20.         SHL BX,     2      
  21.         MOV AX,     offset ISR_PA_IN
  22.         MOV DS:[BX],    AX
  23.         MOV AX,     seg ISR_PA_IN
  24.         MOV DS:[BX+2],  AX      
  25.         ; channel 6
  26.         MOV BX,     38     
  27.         SHL BX,     2      
  28.         MOV AX,     offset ISR_PA_OUT
  29.         MOV DS:[BX],    AX
  30.         MOV AX,     seg ISR_PA_OUT
  31.         MOV DS:[BX+2],  AX             
  32.         ; channel 5
  33.         MOV BX,     37     
  34.         SHL BX,     2      
  35.         MOV AX,     offset ISR_PB_IN
  36.         MOV DS:[BX],    AX
  37.         MOV AX,     seg ISR_PB_IN
  38.         MOV DS:[BX+2],  AX                     
  39.         ; channel 4
  40.         MOV BX,     36     
  41.         SHL BX,     2      
  42.         MOV AX,     offset ISR_PB_OUT
  43.         MOV DS:[BX],    AX
  44.         MOV AX,     seg ISR_PB_OUT
  45.         MOV DS:[BX+2],  AX             
  46.         ; channel 3
  47.         MOV BX,     35     
  48.         SHL BX,     2      
  49.         MOV AX,     offset ISR_COUNT0
  50.         MOV DS:[BX],    AX
  51.         MOV AX,     seg ISR_COUNT0
  52.         MOV DS:[BX+2],  AX                 
  53.         ; channel 4
  54.         MOV BX,     34     
  55.         SHL BX,     2      
  56.         MOV AX,     offset ISR_COUNT12
  57.         MOV DS:[BX],    AX
  58.         MOV AX,     seg ISR_COUNT12
  59.         MOV DS:[BX+2],  AX                 
  60.                                        
  61.         POP DS
  62.         POP DX
  63.         POP BX
  64.         POP AX     
  65.         RET
  66. INIT_IVT    ENDP
  67.  
  68. ; ISR for reading the value received on PA            
  69. ISR_PA_IN   PROC
  70.  
  71.             IRET    
  72. ISR_PA_IN   ENDP            
  73.              
  74. ; ISR for waiting a confirmation that the value written on PA is externally read
  75. ISR_PA_OUT  PROC              
  76.  
  77.  
  78.                                      
  79.             IRET    
  80. ISR_PA_OUT  ENDP                                  
  81.                            
  82. ; ISR for reading the value received on PB                                      
  83. ISR_PB_IN   PROC
  84.             IRET
  85. ISR_PB_IN   ENDP            
  86.                                          
  87. ; ISR for waiting a confirmation that the value written on PB is externally read                                          
  88. ISR_PB_OUT  PROC
  89.                                      
  90.             IRET  
  91.            
  92. ISR_PB_OUT  ENDP        
  93.                
  94. ; ISR executed when count0 ends                
  95. ISR_COUNT0  PROC                        
  96.                  
  97.             IRET
  98. ISR_COUNT0  ENDP  
  99.  
  100.  
  101. ; ISR executed when count2 ends                                
  102. ISR_COUNT12 PROC
  103.             CMP CL,0
  104.             JNE noread:
  105.             IN  AL,080H
  106.             XCHG AL,AH    ;AH diventa il mio nuovo "valore precedente"
  107.             CMP  AL,AH    ; sottraggo il valore precedente(in AL) all'attuale  (in AH)
  108.             JLE   noread:
  109.             INC  CH
  110.            
  111.            
  112.            
  113. noread:     CMP CH,1
  114.             JL  spenta
  115.             MOV AL,0FFH
  116.             OUT 081H,AL
  117.             DEC CH
  118.             JMP fine
  119.  
  120. spenta:     MOV AL,00H
  121.             OUT 081H,AL    
  122.  
  123.            
  124. fine:       INC CL
  125.             CMP CL,6
  126.             JNE nores:
  127.             MOV CL,0; CL gestito in maniera circolata
  128. nores:            
  129.             IRET    
  130. ISR_COUNT12 ENDP                  
  131.                  
  132. INIT_8255   PROC
  133.             ; init 8255    
  134.             mov al, 10010000b;
  135.             out 083h, al
  136.             ; set PC4 to enable interrupt on PA in
  137.             ;mov al, 00001001b    
  138.             ;out 083h, al  
  139.             ; set PC2 to enable interrupt on PB in or PB out
  140.             ;mov al, 00000101b
  141.             ;out 083h, al  
  142.             ; set PC6 to enable interrupt on PA out
  143.             ;mov al, 00001101b
  144.             ;out 083h, al  
  145.             RET            
  146. INIT_8255   ENDP          
  147.  
  148. INIT_8253   PROC
  149.             ;init 8253
  150.             ;counter0 init
  151.             ;mov al, 00110100b
  152.             ;out 063h, al
  153.              ;counter1 init
  154.             mov al, 01110100b
  155.             out 063h, al  
  156.              ;counter2 init    
  157.             mov al, 10010100b
  158.             out 063h, al
  159.              ;counter1 value                      
  160.             mov ax,  10 ;tolgo 3 zero perche il simulatore inchioda
  161.             out 061h, al
  162.             xchg al,  ah
  163.             out 061h, al                            
  164.              ;counter2 value                      
  165.             mov al,  30
  166.             out 062h, al
  167.             RET
  168. INIT_8253   ENDP    
  169.  
  170. ; init 8259      
  171. INIT_8259   PROC
  172.             PUSH DX
  173.             PUSH AX
  174.             MOV DX, 40H
  175.             MOV AL, 00010011b  ; ICW1
  176.             ; edge triggered
  177.             ; single 8259
  178.             ; IC4 = si
  179.             OUT DX, AL
  180.             MOV DX, 41H
  181.             MOV AL, 00100000b  ; ICW2
  182.             ; a partire da INTR 32
  183.             OUT DX, AL
  184.             MOV AL, 00000011b  ; ICW4
  185.             ; fully nested mode
  186.             ; buf mode
  187.             ; master
  188.             ; Automatic End Of Interrupt
  189.             ;MOV AL, 00000001b  ; ICW4
  190.             ; fully nested mode
  191.             ; buf mode
  192.             ; master
  193.             ; normal End Of Interrupt
  194.             OUT DX, AL
  195.             MOV AL, 00000000b  ; OCW1  
  196.             ;no channel enabled
  197.             MOV DX, 41H
  198.             OUT DX, AL
  199.             POP DX
  200.             POP AX
  201.             RET
  202. INIT_8259   ENDP
  203.  
  204.  
  205. ;programma principale
  206.             .startup    
  207.             CLI        
  208.             call INIT_IVT
  209.             call INIT_8259
  210.             call INIT_8253
  211.             call INIT_8255
  212.             XOR CX,CX
  213.             XOR AX,AX
  214.             STI        
  215.                        
  216.            
  217. block:      ;hlt
  218.             jmp  block
  219.                      
  220.             .exit
  221.  
  222.             end  ; set entry point and stop the assembler.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement