home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 01 / asm_eck / cgacolor.asm next >
Encoding:
Assembly Source File  |  1990-10-09  |  3.4 KB  |  149 lines

  1. ; ┌─────────────────────────────────┐
  2. ; │  CGACOLOR.ASM                   │
  3. ; ├─────────────────────────────────┤
  4. ; │                                 │
  5. ; │  Ändert die Paletteneinträge    │
  6. ; │  im CGA Modus 320 x 200         │
  7. ; │  (c) 1990 by R.Seelig & toolbox │
  8. ; │                                 │
  9. ; │  Assembler :                    │
  10. ; │       TASM 1.0 oder höher       │
  11. ; │       MASM 4.0 oder höher       │
  12. ; │       A86  3.19 oder höher      │
  13. ; │ Mit EXE2BIN zu COM-File wandeln!│
  14. ; └─────────────────────────────────┘
  15. program        Segment para 'code'
  16.                assume cs:program
  17. org 100h
  18.  
  19. start:
  20. jmp anfang
  21.  
  22.   dw 80 dup (?)             ; eigener Stackspeicher
  23.   newstack:
  24.   aktiv      db 0
  25.   cgamode    db 0
  26.   altint     dd ?
  27.   altss      dw ?
  28.   altsp      dw ?
  29.  
  30. egafarbreihe: db 0,9,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0
  31.  
  32. neuint10:
  33.   pushf
  34.   cmp cs:[aktiv],00h        ; TSR Programm bereits aktiv ?
  35.   jz nichtaktiv
  36.   call cs:[altint]          ; dann alten Interrupt aufrufen
  37.   iret
  38. nichtaktiv:
  39.   call cs:[altint]          ; alten Interupt aufrufen
  40.   cmp ax,04
  41.   jne keingrinstall
  42.   mov cs:[cgamode],01       ; CGA Grafik wurde installiert
  43.   jmp egafarben             ; eigene Palette installieren
  44. keingrinstall:
  45.   cmp cs:[cgamode],00h
  46.   jnz cga_on
  47.   iret                      ; Grafikmodus ist nicht gesetzt
  48. cga_on:
  49.   cmp ax,04
  50.   jnb egafarben
  51.   mov cs:[cgamode],00       ; Textmodus ist gesetzt worden
  52.   iret
  53. egafarben:
  54.   inc cs:[aktiv]
  55.   cli
  56.   mov cs:altss,ss           ; Stack eigenen Speicher geben
  57.   mov cs:altsp,sp
  58.   push cs
  59.   pop ss
  60.   mov sp,offset newstack
  61.   push ax                   ; saemtliche Register sichern
  62.   push bx
  63.   push cx
  64.   push dx
  65.   push ds
  66.   push es
  67.   push di
  68.   push si
  69.   push cs
  70.   pop ds                    ; DS = CS
  71.   sti
  72.  
  73.   ; Hier ist das eigentliche seicherresidente Programm
  74.   ; bei Interrupt 10h  Funktion 00h und 0BH  eigene Farb-
  75.   ; palette installieren
  76.  
  77.   cmp ax,04
  78.   jnz moeg2
  79.   jmp neuefarben
  80.  
  81. moeg2:
  82.   cmp ah,0bh
  83.   jnz prgend1
  84.  
  85. neuefarben:
  86.   push ds
  87.   pop es                    ; ES = DS
  88.   mov dx,offset egafarbreihe
  89.   mov ax,1002h
  90.   int 10h
  91.  
  92. prgend1:
  93.   pop si
  94.   pop di
  95.   pop es
  96.   pop ds
  97.   pop dx
  98.   pop cx
  99.   pop bx
  100.   pop ax
  101.   dec cs:[aktiv]
  102.   cli
  103.   mov ss,cs:altss
  104.   mov sp,cs:altsp
  105.   sti
  106.   iret
  107. endetsr:
  108.  
  109. ; Daten, die nicht resident gemacht werden
  110. meldung:
  111.   db 13,10,'CGACOLOR Version 1.1 (toolbox 01/91) ist '
  112.   db 'speicherresident installiert !',13,10
  113.   db 13,10,'Standardfarben des 4 Farben'
  114.   db ' CGA Modus werden mit'
  115.   db 13,10,'Farben aus der EGA Palette belegt !',13,10
  116.   db 13,10,'(c) 1990 by R. Seelig & toolbox',13,10,'$'
  117.  
  118. anfang:
  119.   mov si,offset egafarbreihe
  120.   mov di,si
  121.   mov cx,17
  122. addschleife:
  123.   lodsb
  124.   cmp al,8
  125.   jb keinadd
  126.   add al,8                  ; EGA Farbreihe anpassen
  127. keinadd:
  128.   stosb
  129.   loop addschleife
  130.   mov dx,offset meldung
  131.   mov ah,09h
  132.   int 21h                   ; Install - Meldung ausgeben
  133.   mov ah,35h
  134.   mov al,10h
  135.   int 21h                   ; Interruptvektor holen
  136.   mov word ptr cs:[altint],bx
  137.   mov word ptr cs:[altint+2],es
  138.   push cs
  139.   pop ds                    ; DS = CS
  140.   mov dx,offset neuint10
  141.   mov ah,25h
  142.   mov al,10h
  143.   int 21h                   ; neuen Interruptvektor setzen
  144.   lea dx,endetsr            ; Laenge des TSR Programms
  145.   int 27h                   ; speicherresident beenden
  146. program ends
  147. end start
  148. ;***** ENDE CGACOLOR.ASM **********************************
  149.