home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / asm_programming / AO2.LST < prev    next >
File List  |  1990-10-03  |  7KB  |  218 lines

  1. Microsoft (R) Macro Assembler Version 5.10                  10/3/90 23:11:50
  2.                                                              Page     1-1
  3.  
  4.  
  5.                 ; ASCII Organ II (Version 2: bypasses DOS)
  6.                 
  7.  = 0042                timer   equ     42h
  8.  = 0061                speaker equ     61h
  9.  = 004F                sponmsk equ     4fh
  10.  = 004C                spofmsk equ     4ch
  11.  = 00B6                settim  equ     0b6h
  12.  = 0001                termkey equ     1
  13.  = 0060                keyport equ     60h
  14.                 
  15.                 doscall macro   x
  16.                         mov     ah,x
  17.                         int     21h
  18.                         endm
  19.                 
  20.                 pout    macro   x,y
  21.                         mov     al,y
  22.                         out     x,al
  23.                         endm
  24.                 
  25.  0000                code    segment
  26.  0100                        org     100h
  27.                         assume  cs:code
  28.                 
  29.  0100  EB 1E 90            start:  jmp     begin           ; bypasses vari
  30.                 able storage
  31.                 
  32.                 ;---- Variable storage ----
  33.                 
  34.  0103  41 74 74 65 6E 74    msg     db      'Attention: <ESC> to quit$'
  35.        69 6F 6E 3A 20 3C    
  36.        45 53 43 3E 20 74    
  37.        6F 20 71 75 69 74    
  38.        24            
  39.                 
  40.  011C  00000000            oldvect dd      0               ; define double
  41.                  word (4 bytes)
  42.                                                 ; for storage..
  43.                 .
  44.                 ; Start of Program
  45.                 
  46.  0120  BA 0103 R        begin:  mov     dx,offset msg
  47.                         doscall 9
  48.  0123  B4 09                 1            mov     ah,9 
  49.  0125  CD 21                 1            int     21h 
  50.  0127  2B C0                    sub     ax,ax           ; establish add
  51.                 ressing area
  52.  0129  8E D8                    mov     ds,ax           ; interupt vect
  53.                 or
  54.  012B  BE 0024                    mov     si,9*4          ; mov si,36
  55.  012E  B9 0004                    mov     cx,4            ; 2.0 makes a c
  56.                 all here
  57.  0131  BF 011C R                mov     di,offset oldvect
  58.  0134  FC                    cld                     ; in precaution
  59. Microsoft (R) Macro Assembler Version 5.10                  10/3/90 23:11:50
  60.                                                              Page     1-2
  61.  
  62.  
  63.  0135  F3/ A4                    rep     movsb
  64.  0137  0E                    push    cs              ; set DS = CS
  65.  0138  1F                    pop     ds
  66.  0139  BA 0147 R                mov     dx,offset kbdintarget
  67.  013C  B0 09                    mov     al,9             ; make interru
  68.                 pt 9 point
  69.                         doscall 25h              ; to kbdintarg
  70.                 et
  71.  013E  B4 25                 1            mov     ah,25h 
  72.  0140  CD 21                 1            int     21h 
  73.  0142  BA 0192 R                mov     dx,offset lastin + 5
  74.  0145  CD 27                    int     27h             ; end, make res
  75.                 ident
  76.                 
  77.                 ; execute with each stroke of a key
  78.                 
  79.  0147                kbdintarget:
  80.  0147  FB                    sti                     ; timer interru
  81.                 pt
  82.  0148  50                    push    ax              ; save ax
  83.  0149  E4 60                    in      al,keyport      ; read key 
  84.  014B  3C 80                    cmp     al,80h          ; key > 80h?
  85.  014D  73 3D                    jnb     exit            ; if yes, jump.
  86.                 .. 
  87.  014F  3C 01                    cmp     al,termkey      ; <esc> key?
  88.  0151  74 1D                    je      lastime         ; if yes, jump.
  89.                 ..
  90.  0153  50                    push    ax              ; store key
  91.                         pout    timer+1,settim
  92.  0154  B0 B6                 1            mov     al,settim 
  93.  0156  E6 43                 1            out     timer+1,al 
  94.  0158  2A C0                    sub     al,al           ; let AL = 0
  95.  015A  E6 42                    out     timer,al        ; send divisor,
  96.                  LSB first
  97.  015C  58                    pop     ax              ; MSB of diviso
  98.                 r=value of key
  99.  015D  E6 42                    out     timer,al        ; timer control
  100.                 s tone 
  101.                         pout    speaker,sponmsk  ; play note
  102.  015F  B0 4F                 1            mov     al,sponmsk 
  103.  0161  E6 61                 1            out     speaker,al 
  104.                 
  105.  0163  B8 2000                    mov     ax,2000h        ; wait loop
  106.  0166  48            repeat: dec     ax
  107.  0167  75 FD                    jne     repeat
  108.                 
  109.                         pout    speaker,spofmsk
  110.  0169  B0 4C                 1            mov     al,spofmsk 
  111.  016B  E6 61                 1            out     speaker,al 
  112.  016D  EB 1D 90                    jmp     exit
  113.                 
  114.  0170                lastime:                        ; resume keyboa
  115.                 rd vector
  116.  0170  1E                    push    ds              ; store all reg
  117. Microsoft (R) Macro Assembler Version 5.10                  10/3/90 23:11:50
  118.                                                              Page     1-3
  119.  
  120.  
  121.                 isters in stack
  122.  0171  06                    push    es              ; 
  123.  0172  56                    push    si              ; 
  124.  0173  57                    push    di
  125.  0174  51                    push    cx
  126.  0175  0E                    push    cs
  127.  0176  1F                    pop     ds              ; let DS = CS
  128.  0177  2B C0                    sub     ax,ax           ; establish add
  129.                 ressing area
  130.  0179  8E C0                    mov     es,ax           ; interrupt vec
  131.                 tor
  132.  017B  BF 0024                    mov     di,9*4          ; move program 
  133.                 storage
  134.  017E  BE 011C R                mov     si,offset oldvect ; into int. v
  135.                 ector area
  136.  0181  B9 0004                    mov     cx,4
  137.  0184  FC                    cld                    
  138.  0185  F3/ A4                    rep    movsb        ; return former
  139.                  keyboard interrupt
  140.  0187  59                    pop     cx        ; vector and re
  141.                 gisters
  142.  0188  5F                    pop     di              ; in order oppo
  143.                 site of push...
  144.  0189  5E                    pop     si 
  145.  018A  07                    pop     es     
  146.  018B  1F                    pop     ds 
  147.                 
  148.  018C  58            exit:   pop     ax
  149.  018D  2E: FF 2E 011C R        lastin: jmp     [oldvect]       ; jump former r
  150.                 out. keyb. int.
  151.                 
  152.  0192                code    ends
  153.                         end     start
  154.  
  155. Microsoft (R) Macro Assembler Version 5.10                  10/3/90 23:11:50
  156.                                                              Symbols-1
  157.  
  158.  
  159. Macros:
  160.  
  161.         N a m e            Lines
  162.  
  163. DOSCALL  . . . . . . . . . . . .         2
  164. POUT . . . . . . . . . . . . . .         2
  165.  
  166. Segments and Groups:
  167.  
  168.                 N a m e             Length     Align    Combine Class
  169.  
  170. CODE . . . . . . . . . . . . . .      0192    PARA    NONE    
  171.  
  172. Symbols:            
  173.  
  174.                 N a m e             Type     Value     Attr
  175.  
  176. BEGIN  . . . . . . . . . . . . .      L NEAR    0120    CODE
  177.  
  178. EXIT . . . . . . . . . . . . . .      L NEAR    018C    CODE
  179.  
  180. KBDINTARGET  . . . . . . . . . .      L NEAR    0147    CODE
  181. KEYPORT  . . . . . . . . . . . .      NUMBER    0060    
  182.  
  183. LASTIME  . . . . . . . . . . . .      L NEAR    0170    CODE
  184. LASTIN . . . . . . . . . . . . .      L NEAR    018D    CODE
  185.  
  186. MSG  . . . . . . . . . . . . . .      L BYTE    0103    CODE
  187.  
  188. OLDVECT  . . . . . . . . . . . .      L DWORD    011C    CODE
  189.  
  190. REPEAT . . . . . . . . . . . . .      L NEAR    0166    CODE
  191.  
  192. SETTIM . . . . . . . . . . . . .      NUMBER    00B6    
  193. SPEAKER  . . . . . . . . . . . .      NUMBER    0061    
  194. SPOFMSK  . . . . . . . . . . . .      NUMBER    004C    
  195. SPONMSK  . . . . . . . . . . . .      NUMBER    004F    
  196. START  . . . . . . . . . . . . .      L NEAR    0100    CODE
  197.  
  198. TERMKEY  . . . . . . . . . . . .      NUMBER    0001    
  199. TIMER  . . . . . . . . . . . . .      NUMBER    0042    
  200.  
  201. @CPU . . . . . . . . . . . . . .      TEXT  0101h        
  202. @FILENAME  . . . . . . . . . . .      TEXT  ao2        
  203. @VERSION . . . . . . . . . . . .      TEXT  510        
  204.  
  205. Microsoft (R) Macro Assembler Version 5.10                  10/3/90 23:11:50
  206.                                                              Symbols-2
  207.  
  208.  
  209.  
  210.     102 Source  Lines
  211.     112 Total   Lines
  212.      24 Symbols
  213.  
  214.   47906 + 280712 Bytes symbol space free
  215.  
  216.       0 Warning Errors
  217.       0 Severe  Errors
  218.