Advertisement
Guest User

Untitled

a guest
Feb 16th, 2022
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .org 22h
  2. dw @vbi
  3.  
  4. .org 80h
  5.  
  6. ; %al, overwrites ;
  7. abs:
  8.     test %al 1h
  9.     jz @.L2
  10.     neg %al
  11.     .L2:
  12.     ret
  13.  
  14. drawpixel:
  15.     push %a
  16.     push %b
  17.     push %c
  18.    
  19.     mov %a [%sp + 8h]
  20.  
  21.     mov %b %al
  22.     mul %b 12h
  23.     add %b @T1
  24.    
  25.     mov %c %ah
  26.     mov %a %ah
  27.    
  28.     div %c 8h ; todo: add mod ;
  29.     mul %c 8h
  30.    
  31.     sub %a %c
  32.    
  33.     div %c 8h
  34.     add %b %c
  35.    
  36.     mov %c 7h
  37.     sub %c %a
  38.     mov %a %c
  39.  
  40.     mov %c 1h
  41.     shl %c %a
  42.    
  43.     mov %a [%b]
  44.     or %a %c
  45.     mov [%b] %a
  46.    
  47.     pop %c
  48.     pop %b
  49.     pop %a
  50.     ret
  51.    
  52. ; %ch - x1, %cl - y1, %dh - x2, %dl - y2 ;
  53. drawline:
  54.     push %a
  55.     push %b
  56.     push %c
  57.     push %d
  58.     push %e
  59.    
  60.     mov %al %dh
  61.     sub %al %ch
  62.     call @abs
  63.     mov %ah %al ; ah - dX ;
  64.    
  65.     mov %al %dl
  66.     sub %al %cl
  67.     call @abs
  68.     neg %al ; al - -dY ;
  69.    
  70.     mov %bh FFh ; bh - signX;
  71.     mov %bl FFh ; bl - signY ;
  72.    
  73.     cmp %ch %dh
  74.     jgz @.S1
  75.     neg %bh
  76.     .S1:
  77.    
  78.     cmp %cl %dl
  79.     jgz @.S2
  80.     neg %bl
  81.     .S2:
  82.    
  83.     mov %el %ah
  84.     add %el %al ; el - error ;
  85.    
  86.     push %d
  87.     call @drawpixel
  88.     pop %d
  89.      
  90.     .loop:
  91.         cmp %ch %dh
  92.         jnz @.L1
  93.         cmp %cl %dl
  94.         jnz @.L1
  95.         jmp @.loop_end
  96.         .L1:
  97.        
  98.         push %c
  99.         call @drawpixel
  100.         pop %c
  101.  
  102.         mov %eh %el
  103.        
  104.         cmp %eh %al
  105.         jng @.L2
  106.             add %el %al
  107.             add %ch %bh
  108.         .L2:
  109.         cmp %eh %ah
  110.         jgz @.loop
  111.             add %el %ah
  112.             add %cl %bl
  113.         jmp @.loop
  114.        
  115.     .loop_end:
  116.    
  117.     pop %e
  118.     pop %d
  119.     pop %c
  120.     pop %b
  121.     pop %a
  122.     ret
  123.  
  124. start:
  125.     mov %sp FFFFh
  126.     outb 20h 1h
  127.     outb 21h 20h
  128.     out  22h @T1
  129.  
  130.     mov %al 1h
  131.     int 10h
  132.    
  133.     mov %ch 60h
  134.     mov %cl 50h
  135.    
  136.     mov %dh 5h
  137.     mov %dl 3h
  138.    
  139.     call @drawline
  140.  
  141.     .loop:
  142.         jmp @.loop
  143.  
  144. vbi:
  145.     ret
  146.  
  147. .org 1000h
  148. T1:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement