; ATARI-DEAKTIVATOR BIOS 1.072 ; written by Frank Riemenschneider ; Postfach 730309 ; 3000 Hannover 71 ; Beim ersten Aufruf wird die ATARI-Taste deaktiviert, ; so da keine Applikation mehr aufgerufen werden knnen. ; Beim zweiten Aufruf wird die ATARI-Taste reaktiviert. CODE segment assume cs:code,ds:code,es:code start: mov ax,3509h int 21h ;Flag holen mov di,offset flag mov ax,es:[di] cmp ax,11111 ;gesetzt, reinstallieren jz reinstall ; Programm installieren und resident im Speicher belassen mov cs:flag,11111 ;Flag setzen mov ax,2001h ;Funktion 20h mov dl,0 ;Kein Zurcksetzen des Interruptvektors 9 int 61h mov ax,cs sub ax,10h ;Segmentadresse PSP merken mov cs:pspadr,ax mov ax,3509h ;Interruptvektor 9 holen int 21h mov cs:int9_ofs,bx ;und sichern mov cs:int9_seg,es mov ax,2509h ;Interruptvektor 9 neu setzen push cs ;Segment = Code-Segment pop ds mov dx,offset int9 int 21h mov ah,09 ;Meldung ausgeben mov dx,offset m1 ;Adresse des Strings int 21h mov ax,3100h ;Programm resident beenden mov dx,big ;Anzahl Paragraphen holen int 21h ; Programm reinstallieren und Speicher freigeben reinstall: mov ax,2509h ;Interruptvektor auf alte Routine mov dx,es:int9_ofs mov ds,es:int9_seg int 21h mov es,es:pspadr ;Segmentadresse PSP holen mov ax,es mov es,es:[02ch] mov ah,49h ;Enviroment-Speicher freigeben int 21h mov es,ax mov ah,49h ;Programm-Speicher freigeben int 21h push cs pop ds mov ah,09 ;Meldung ausgeben mov dx,offset m2 ;Adresse des Strings int 21h mov ah,4ch ;Programm beenden int 21h ; Der neue Interrupthandler 9 int9: push ax push bx push dx push si push ds mov ax,0040h mov ds,ax mov dx,8000h in al,dx cmp al,80h ;ATARI-Taste gedrckt, dann jz wan ;dann Code umwandeln cmp al,0 jz wan jnz l4 wan: mov al,155 l4: db 80h,0Eh,25h,01h,80h ;or BYTE PTR [0125],80h mov bx,ds:[0153h] sub bx,ds:[0155h] ja l1 add bx,0Ah l1: cmp bx,04 ja l2 l3: db 234,6Ah,15h,00,224 ;JMP E000:156A l2: db 234,81h,15h,00,224 ;JMP E000:1581 flag dw 0 pspadr dw 0 m1 db 13,'ATARI-Taste wurde deaktiviert.',13,'$' m2 db 13,'ATARI-Taste wurde wieder aktiviert.',13,'$' int9_ofs dw 0 int9_seg dw 0 big EQU (($-start)/16)+11h ;Gre des Programms in Paragraphen CODE Ends END