home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
beermon
/
installbus.s
< prev
next >
Wrap
Text File
|
1995-02-27
|
3KB
|
186 lines
; This bootblock installer is no virus...
; it is designed to patch the buserror vector while booting
; if you have the magic button and beermon is located on module
; or at $c00000, this is a good deal.
FindResident = -96
AllocMem =-198
FreeMem =-210
FindTask =-294
OldOpenLibrary =-408
CloseLibrary =-414
OpenDevice =-444
CloseDevice =-450
DoIO =-456
Write = -48
Output = -60
run: move.l 4.w,a6
sub.l a4,a4 ;pointer to memory buffer
lea DiskIOReq(pc),a3
moveq #0,d6 ;errorflag
move.l a7,d5
moveq #1,d4 ;disk open flag 0=ok
moveq #0,d0
lea dosname(pc),a1
jsr OldOpenLibrary(a6)
move.l d0,a5
tst.l d0
beq.l error
move.l #$10003,d1
move.l #1024,d0 ;2 blocks: 2*512 byte
jsr AllocMem(a6)
tst.l d0
beq.s shit
move.l d0,a4
moveq #0,d2 ;chksum
moveq #bootsize/4-1,d0
move.l a4,a1 ;the sick buffer
lea bootstart(pc),a0
l0: move.l (a0)+,d1
move.l d1,(a1)+ ;move the gore
add.l d1,d2 ;calc a bit
bcc.s l1 ;no jesus here
addq.l #1,d2
l1: dbf d0,l0
not.l d2
move.l d2,4(a4) ;chksum to buf
sub.l a1,a1 ;trackdiskport init
jsr FindTask(a6)
lea DiskPort(pc),a0
move.l d0,16(a0)
moveq #device,d0 ;trackdiskdevice (df1)
moveq #0,d1
move.l a3,a1
lea diskname(pc),a0
jsr OpenDevice(a6)
move.l d0,d4 ;some error
bne.s shit
move.l a3,a1
move.l a4,40(a1) ;diskbuf
jsr DoIO(a6)
tst.l d0
bne.s shit
move.l a3,a1
move.w #4,28(a1) ;write the gore
jsr DoIO(a6)
tst.l d0
bne.s shit
move.l a3,a1
move.w #9,28(a1) ;motor off
clr.l 36(a1)
jsr DoIO(a6)
tst.l d0
beq.s allesok
shit: move.l d0,d6 ;sick errors?
lea fehler(pc),a0
move.l a0,a1
move.l a0,d3
l2: tst.b (a0)+
bne.s l2
sub.l d3,a0
move.l a0,d3
subq.l #1,d3 ;length
move.l a1,d2 ;text
jsr Output(a5)
move.l d0,d1 ;filehandle
jsr Write(a5)
allesok:move.l a5,a1
jsr CloseLibrary(a6)
move.l a4,d0
beq.s l3
move.l d0,a1
move.l #1024,d0
jsr FreeMem(a6)
l3: tst.l d4
bne.s l4
move.l a3,a1
jsr CloseDevice(a6)
l4: move.l d6,d0
move.l d5,a7
error: rts
device = 1
bootstart:
dc.b "DOS",0
dc.l 0 ;chksum
dc.l 880 ;root block
lea $f00000,a1
cmp.w #$1111,(a1)+ ;any module with beermon?
beq.s modf0
lea $c00000,a1 ;if not, he shall be here...
modf0: move.l a1,$8.w
lea $dff180,a1
moveq #-1,d0
blink: move.w d0,(a1) ;blinkabit
dbf d0,blink
clr.w (a1)
lea dosname(pc),a1 ;the reek of putrefaction
jsr FindResident(a6) ;any dos at home?
tst.l d0
beq.s lb
move.l d0,a0
move.l 22(a0),a0
moveq #0,d0
la: rts
lb: moveq #-1,d0
bra.s la
DosName:dc.b "dos.library",0
dc.b "this bootblock has been installed with "
dc.b "vomit and gore by BeerMacht "
dc.w 0
bootend:
bootsize = bootend-bootstart
diskname: dc.b "trackdisk.device",0
fehler: dc.b "Disk in DF1: was NOT installed",$A,0
even
DiskPort: dc.l 0 ;0
dc.l 0 ;4
dc.w $0400 ;8
dc.l 0 ;10
dc.b 0 ;14
dc.b 31 ;15
dc.l 0 ;16 task ptr.
LH1: dc.l LH2 ;20
LH2: dc.l 0 ;24
dc.l LH1 ;28
dc.b 0 ;32
dc.b 0 ;33
DiskIOReq: dc.l 0 ;0
dc.l 0 ;4
dc.b 5 ;8
dc.b 0 ;9
dc.l 0 ;10
dc.l DiskPort ;14
dc.w 48 ;18
dc.l 0 ;20
dc.l 0 ;24
dc.w 3 ;28 IO_CMD
dc.w 0 ;30
dc.l 0 ;32
dc.l 1024 ;36 IO_LENGTH
dc.l 0 ;40 IO_DATA
dc.l 0 ;44 IO_OFFSET
dc.l 0
dc.l 0