pal.asm 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. .model small
  2. .code
  3. org 100h
  4. start: push bp ; стек
  5. mov bp,sp
  6. sub sp, 303h
  7. mov ah,0 ; установка реж 320х200х256
  8. mov al,13h
  9. int 10h
  10. xor bx,bx ; считываем палитру в [BP-4]-[BP+FCFDh]
  11. mov cx,0FDh
  12. lea dx,[bp][0FCFDh]
  13. mov ax,ds
  14. mov es,ax
  15. mov ax,01017h
  16. int 10h
  17. mov ax,0A000h ; устанавливаем es:di на видео память
  18. mov es,ax
  19. xor ax,ax
  20. mov di,ax
  21. mov cx,0FA00h ; начинаем рисовать
  22. mov al,00h
  23. LP: mov es:[di],BYTE PTR al ; цикл прорисовки
  24. mov ax,di
  25. add ax,01h
  26. xor dx,dx ; проверяем, кратно ли di 320ти
  27. mov bx,0140h
  28. div bx
  29. mov al, BYTE PTR es:[di]
  30. add di,1h
  31. cmp dx,0h
  32. je UVEL ; если да, увеличиваем цвет
  33. LOP: loop LP ; конец цикла
  34. jmp e
  35. UVEL: add al,1h ; здесь увеличиваем цвет
  36. jmp LOP
  37. e: mov al, [bp][0FD00h] ; сохраняем первый цвет в [BP-3]
  38. mov [bp-0003], al
  39. mov al, [bp][0FD01h] ; сохраняем первый цвет в [BP-2]
  40. mov [bp-0002], al
  41. mov al, [bp][0FD02h] ; сохраняем первый цвет в [BP-1]
  42. mov [bp-0001], al
  43. lea ax,[bp][0FD00h] ; от сих
  44. lea bx,[bp][0FD03h]
  45. mov si,bx
  46. mov di,ax
  47. mov ax,ds
  48. mov es,ax
  49. mov cx,02FAh
  50. repe movsb ; до сих, смещаем палитру ниже
  51. mov al, [bp][-0003h]
  52. mov [bp-0006], al ; потерянный цвет в конец палитры
  53. mov al, [bp][-0002h]
  54. mov [bp-0005], al
  55. mov al, [bp][-0001h]
  56. mov [bp-0004], al
  57. mov dx,03DAh ; порт состояния луча монитора
  58. in1: in al,dx ; от сих
  59. and al,008h
  60. jne in1
  61. in2: in al,dx
  62. and al,008h
  63. je in2 ; до сих - ждем обратного хода луча
  64. xor bx,bx ; от сих
  65. mov cx,0100h
  66. lea dx,[bp][0FCFDh]
  67. mov ax,ds
  68. mov es,ax
  69. mov ax,01012h
  70. int 10h ; до сих - вставляем палитру
  71. mov ah,01h ; проверка на нажатие кнопки
  72. int 16h ; -----
  73. jz e ; если нету, то снова
  74. mov ah,0
  75. mov al,3h ; обратно в текстовый режим
  76. int 10h ; -----
  77. mov sp,bp ; вертаем стек
  78. pop bp
  79. int 20h ; типа конец :)
  80. end start