
; Note about DoIo vector ***********************************************
;
; The DoIO vector is only 24 bits long normally (($xxxxxx) = jmp $-xxxx)
; We save a long word (32 bits) from -454, because we will be putting
; a new vector, A LONG WORD, here!
; Bytes -456 to -454 contain the instruction $4ef9 = jmp, that's why
; we start at -454.
; We ARE destroying the CloseDevice vector, BUT we repair it afterwards!
;
; **********************************************************************

-456(a6)	0004ae:4ef9 jmp     $00fc0718
-450(a6)	0004b4:4ef9 jmp     $00203308
-444(a6)	0004ba:4ef9 jmp     $002032f4

; Wat is het probleem ?
;
; Het klopt dat er van de DoIO vector maar 24 bits gebruikt worden. 
; Maar om te voorkomen dat het volgende commando op een oneven adres
; komt te staan worden alle 32 bits gebruikt.
; De CloseDevice vector wordt dus niet destroyed.
;

###########################################################################

040184:0ca9 cmpi.l  #$00000400,io_Lenght(A1)
04018c:6606 bne.s   $040194	; Bug: A virus with io_lenght <> $400
				; survives!
04018e:b9e9 cmpa.l  io_Data(A1),A4
040192:6706 beq.s   $04019a	; Question : Can a virus have
				; io_Data <> A4 ?
040194:4ef9 jmp     $07f7fe	; Old DoIo routine


; Ik zal even uitleggen wat hier gebeurt omdat het commentaar niet 
; helemaal klopt.

; In het onderstaande stuk code zie je een gedeelte van de strap.routine.
; Deze routine leest de BB in en controleert de checksum en voert dan de
; BB routine uit.

; Het SCA-Virus en de System-Z BB controleert of DoIO wordt aangeroepen
; door de strap.routine door te kijken of de io_Length = $400 en A4 = io_Data.

; Als aan deze twee condities voldaan is wordt er van uitgegaan dat DoIO het 
; BB heeft ingelezen op adres io_Data(a1).

; Hoe het BBVirus ook werkt, er wordt altijd maar $400 bytes ingelezen en 
; altijd op adres io_Data(a1) = A4

fe857e:43ed lea     44(A5),A1
fe8582:337c move.w  #$0002,28(A1)	;CMD_READ
fe8588:237c move.l  #$00000400,36(A1)	;1024 bytes
fe8590:234c move.l  A4,40(A1)		;Inladen op adres a4
fe8594:237c move.l  #$00000000,44(A1)	;DiskOffSet
fe859c:4eae jsr     -456(A6)		;DoIO
fe85a0:4a80 tst.l   D0			;Gelukt ?


De strap.routine is verder uitgewerkt en staat in directory txt.


						PVL.
