Sunday, April 20, 2014

TSR program in 8086 ALP to implement Screen Saver in TASM[x86/64 architecture]

Problem Statement: Write a TSR program in 8086 ALP to implement Screen Saver. Screen Saver should get activated if the keyboard is idle for 7 seconds. Access the video RAM directly in your routine.

CODE SEGMENT
        ASSUME CS:CODE,DS:CODE,ES:CODE
        ORG 100H
START : JMP BEGIN
        TIMER_IP DW ?
        TIMER_CS DW ?
        KB_IP DW ? 
        KB_CS DW ?
        FLAG DB 0
        CNT DB 127
        BUFFER DW 2000 DUP(0)
TIMER:
        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX
        PUSH SI
        PUSH DI
        PUSH DS
        PUSH ES

        MOV AX,CS
        MOV DS,AX
        MOV ES,AX

        CMP FLAG,00H
        JNE TIMER_END
        DEC CNT
     
        JNE TIMER_END
           
        CLD
        MOV AX,0B800H  ;cursor to the start of the screen(initialising data seg)
        MOV DS,AX
        MOV SI,0000H
        MOV DI,OFFSET BUFFER
        MOV CX,2000 
            ;size(80*25=2000 characters, 2 bytes per char:ascii code & attribute)

        REP MOVSW  ;saving the screen contents to the buffer


        MOV AX,0B800H ;initialising extra segment to the starting of screen mem

        MOV ES,AX
        MOV DI,0000H
        MOV AL,00  
        MOV AH,00   ;attribute
        MOV CX,2000
        REP STOSW   ;filling the entire screen

        MOV CS:FLAG,01H
TIMER_END:
        POP ES
        POP DS
        POP DI
        POP SI
        POP DX
        POP CX
        POP BX
        POP AX
JMP DWORD PTR CS:TIMER_IP    ;jump to timer ISR

KB:
        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX
        PUSH SI
        PUSH DI
        PUSH DS
        PUSH ES

        MOV AX,CS
        MOV DS,AX
        MOV ES,AX

        MOV CNT,127   ;setting count for waiting period  to activate screen

        CMP FLAG,01
        JNE KB_END

        CLD
        MOV AX,0B800H
        MOV ES,AX
        MOV SI,OFFSET BUFFER
        MOV DI,0000H
        MOV CX,2000
        REP MOVSW

        MOV FLAG,00H
KB_END :
        POP ES
        POP DS
        POP DI
        POP SI
        POP DX
        POP CX
        POP BX
        POP AX
JMP DWORD PTR CS:KB_IP

BEGIN:
        MOV AX,CS
        MOV DS,AX
        MOV ES,AX

        MOV AH,35H
        MOV AL,08H
        INT 21H

        MOV TIMER_IP,BX
        MOV TIMER_CS,ES

        MOV AH,35H
        MOV AL,09H
        INT 21H

        MOV KB_IP,BX
        MOV KB_CS,ES

        MOV AH,25H
        MOV AL,08H
        MOV DX,OFFSET TIMER
        INT 21H

        MOV AH,25H
        MOV AL,09H
        MOV DX,OFFSET KB
        INT 21H

        MOV AH,31H ; requests stay resident  

        MOV DX,OFFSET BEGIN ;specify size
        INT 21H
 
CODE ENDS

END START

Output


TSR program in 8086 ALP to implement Real Time Clock (RTC) in TASM[x86/64 architecture]

Problem Statement: Write a TSR program in 8086 ALP to implement Real Time Clock (RTC). Read the Real Time from CMOS chip by suitable INT and FUNCTION and display the RTC at the bottom right corner on the screen. Access the video RAM directly in your routine.


.MODEL TINY
.286
ORG 100H


CODE SEGMENT
     ASSUME CS:CODE,DS:CODE,ES:CODE
        OLD_IP DW 00
        OLD_CS DW 00
JMP INIT

MY_TSR:
        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX
        PUSH SI
        PUSH DI
        PUSH ES

        MOV AX,0B800H
        MOV ES,AX
        MOV DI,3650

        MOV AH,02H
        INT 1AH

        MOV BX,CX

        MOV CL,2
LOOP1:  ROL BH,4
        MOV AL,BH
        AND AL,0FH
        ADD AL,30H
        MOV AH,17H
        MOV ES:[DI],AX
        INC DI
        INC DI
        DEC CL
        JNZ LOOP1

        MOV AL,':'
        MOV AH,97H
        MOV ES:[DI],AX
        INC DI
        INC DI

        MOV CL,2
LOOP2:  ROL BL,4
        MOV AL,BL
        AND AL,0FH
        ADD AL,30H
        MOV AH,17H
        MOV ES:[DI],AX
        INC DI
        INC DI
        DEC CL
        JNZ LOOP2

        MOV AL,':'
        MOV AH,97H
        MOV ES:[DI],AX

        INC DI
        INC DI

        MOV CL,2
        MOV BL,DH

LOOP3:  ROL BL,4
        MOV AL,BL
        AND AL,0FH
        ADD AL,30H
        MOV AH,17H
        MOV ES:[DI],AX
        INC DI
        INC DI
        DEC CL
        JNZ LOOP3

        POP ES
        POP DI
        POP SI
        POP DX
        POP CX
        POP BX
        POP AX

        JMP DWORD PTR CS:OLD_IP

INIT:
        MOV AX,CS
        MOV DS,AX

        CLI

        MOV AH,35H
        MOV AL,08H
        INT 21H

        MOV OLD_IP,BX
        MOV OLD_CS,ES

        MOV AH,25H
        MOV AL,08H
        LEA DX,MY_TSR
        INT 21H

        MOV AH,31H
        MOV DX,OFFSET INIT
        STI
        INT 21H

CODE ENDS

END


Output


8086 interfacing with 8279

Problem Statement: 8279


Write 8086 ALP to initialise 8279 and to display characters in right entry mode.
Provide also the facility to display
• Character in left entry mode.
• Rolling display.
• Flashing display



1. Left entry mode
0000:3000  MOV BX,2000
0000:3003  MOV AL,08
0000:3005  OUT 31,AL
0000:3007  MOV CL,08
0000:3009  MOV AL,D1
0000:300B  OUT 31,AL
0000:300D  MOV DL,FF
0000:300F  DEC DL
0000:3011  JNZ 300F
0000:3013  MOV AL,[BX]
0000:3015  OUT 30,AL
0000:3017  MOV DL,FF
0000:3019  DEC DL
0000:301B  JNZ 3019
0000:301D  INC BX
0000:301E  DEC CL
0000:3020  JNZ 3013
0000:3022  INT 3

2. Rolling display
0000:3000  MOV AL, 18
0000:3002  OUT 31, AL
0000:3004  MOV AL, D1
0000:3006  OUT 31, AL
0000:3008  CALL 1000
0000:300B  MOV AL, 90
0000:300D  OUT 31, AL
0000:300F  MOV BX, 2000
0000:3012  MOV CL, 10
0000:3014  MOV AL, [BX]
0000:3016  OUT 30, AL
0000:3018  CALL 1000
0000:301B  INC BX
0000:301C  DEC CL
0000:301E  JNZ 3014
0000:3020  JMP 300F
0000:3022  INT 3

0000:1000  MOV DX,FFFF
0000:1003  DEC DX
0000:1004  JNZ 1003
0000:1006  RET

3. Flashing display
0000:4000  MOV BX,2000
0000:4003  MOV AL,08
0000:4005  OUT 31,AL
0000:4007  MOV CL,08
0000:4009  MOV AL,D1
0000:400B  OUT 31,AL
0000:400D  CALL 1000
0000:4010  MOV AL,[BX]
0000:4012  OUT 30,AL
0000:4014  CALL 1000
0000:4017  INC BX
0000:4018  DEC CL
0000:401A  JNZ 4010
0000:401C  MOV AL,A3
0000:401E  OUT 31,AL
0000:4020  CALL 1000
0000:4023  MOV AL,A0
0000:4025  OUT 31,AL
0000:4027  CALL 1000
0000:402A  JMP 401C
0000:402C  INT 3

0000:1000  MOV DX,FFFF
0000:1003  DEC DX
0000:1004  JNZ 1003
0000:1006  RET

8086 interfacing with 8251

Problem Statement: 8251

Perform an experiment to establish communication between two 8251 systems A and B. Program 8251 system A in asynchronous transmitter mode and 8251 system B in asynchronous receiver mode. Write an ALP to transmit the data from system A and receive the data at system B. The requirements are as follows: 
Transmission:
• message is stored as ASCII characters in the memory.
• message specifies the number of characters to be transmitted as the first byte.
Reception:
• Message is retrieved and stored in the memory.
• Successful reception should be indicated.

0000:2050  MOV DI, 2010
0000:2052  MOV SI, 2000
0000:2054  MOV CX, 05
0000:2056  MOV AL, 4D
0000:2058  OUT 31, AL
0000:205A  OUT 29, AL
0000:205C  MOV AL, 03
0000:205F  OUT 31, AL
0000:2061  MOV AL, 24
0000:2063  OUT 29, AL
0000:2066  MOV AL, [SI]
0000:2068  OUT 30, AL
0000:206A  IN AL, 29
0000:206D  AND AL,02
0000:206F   JZ 206A
0000:2071  IN AL, 28
0000:2074  MOV [DI], AL
0000:2076  INC SI
0000:2078  INC DI
0000:207B  DEC CX
0000:207D  JNZ  2066
0000:207F  INT 3   

8086 interfacing with 8253

Problem Statement: 8253


Write 8086 ALP to program 8253 in Mode 0, modify the program for hardware retriggerable Mono shot mode. Generate a square wave with a pulse of 1 ms. Comment on the difference between Hardware Triggered and software triggered strobe mode. Observe the waveform at GATE & out pin of 1C 8254 on CRO.



MODE 0
0000:4000  MOV AL,10
0000:4002  OUT 33, AL
0000:4004  MOV AL, 04
0000:4006 OUT 30, AL
0000:4007 INT 3

MODE 1
0000:4000  MOV AL, 12
0000:4002  OUT 33, AL
0000:4004  MOV AL, 04
0000:4006 OUT 30, AL
0000:4007 INT 3                                                  

MODE 2
0000:4000  MOV AL, 14
0000:4002  OUT 33, AL
0000:4004  MOV AL, 04
0000:4006 OUT 30, AL
0000:4007 INT 3

MODE 3
0000:4000  MOV AL, 16
0000:4002  OUT 33, AL
0000:4004  MOV AL, 04
0000:4006 OUT 30, AL
0000:4007 INT 3

MODE 4
0000:4000  MOV AL, 18
0000:4002  OUT 33, AL
0000:4004  MOV AL, 04
0000:4006 OUT 30, AL
0000:4007 INT 3

MODE 5
0000:4000  MOV AL, 1A
0000:4002  OUT 33, AL
0000:4004  MOV AL, 04
0000:4006 OUT 30, AL
0000:4007 INT 3

8255 interfacing with 8086 Stepper Motor

Problem Statement: 8255


Write 8086 ALP to rotate a stepper motor for given number of steps at a given angle and in the given direction of rotation based on the user choice such as
(i) If 'C' key is pressed - clockwise rotation, (ii) If 'A' key is pressed -
anticlockwise rotation. (iii) If 'B' is pressed - 1/2 clockwise and Vz
Anti-clock wise rotation, (iv) If 'S' key is pressed - stop rotation. Also write routines to accelerate and de- accelerate the motor.


1. Anticlockwise (360 degrees)
Dyna-86>U 3000
0000:3000 MOV AL,80
0000:3002 OUT 67,AL
0000:3004 MOV DL,32
0000:3006 MOV AL,06
0000:3008 OUT 61,AL
0000:300A CALL 2000
0000:300D MOV AL,05
0000:300F OUT 61,AL
0000:3011 CALL 2000
0000:3014 MOV AL,09
0000:3016 OUT 61,AL
0000:3018 CALL 2000
0000:301B MOV AL,0A
0000:301D OUT 61,AL
0000:301F CALL 2000
Dyna-86>U 301F
0000:301F CALL 2000
0000:3022 DEC DL
0000:3024 JNZ 3006
0000:3026 INT 3

2. Anticlockwise (180 degrees)
Dyna-86>U 3000
0000:3000 MOV AL,80
0000:3002 OUT 67,AL
0000:3004 MOV DL,19
0000:3006 MOV AL,06
0000:3008 OUT 61,AL
0000:300A CALL 2000
0000:300D MOV AL,05
0000:300F OUT 61,AL
0000:3011 CALL 2000
0000:3014 MOV AL,09
0000:3016 OUT 61,AL
0000:3018 CALL 2000
0000:301B MOV AL,0A
0000:301D OUT 61,AL
0000:301F CALL 2000
Dyna-86>U 301F
0000:301F CALL 2000
0000:3022 DEC DL
0000:3024 JNZ 3006
0000:3026 INT 3
3. Clockwise (360 degrees)
Dyna-86>U 3000
0000:3000 MOV AL,80
0000:3002 OUT 67,AL
0000:3004 MOV DL,32
0000:3006 MOV AL,06
0000:3008 OUT 61,AL
0000:300A CALL 2000
0000:300D MOV AL,09
0000:300F OUT 61,AL
0000:3011 CALL 2000
0000:3014 MOV AL,05
0000:3016 OUT 61,AL
0000:3018 CALL 2000
0000:301B MOV AL,05
0000:301D OUT 61,AL
0000:301F CALL 2000
Dyna-86>U 301F
0000:301F CALL 2000
0000:3022 DEC DL
0000:3024 JNZ 3006
0000:3026 INT 3

;Delay Routine
Dyna-86>U 2000
0000:2000 MOV CX,OFFF
0000:2002 DEC CX
0000:2004 JNZ 2003
0000:2006 RET

Perform a suitable assignment using Xen Hypervisor or equivalent open source to configure it. Give necessary GUI.

 To install kvm on Fedora:  yum install kvm  yum install virt-manager libvirt libvirt-python python-virtinst  su -c "yum install @v...